<?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-2421403492236735102</id><updated>2012-01-04T21:07:51.511-06:00</updated><category term='Velocityconf speed websites facebook twitter Google June2010 fast webapps'/><category term='OpenId'/><category term='ajax'/><category term='prototype'/><category term='examples'/><title type='text'>Catch It If You Can ...</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://techspeed.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2421403492236735102/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://techspeed.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Kunal Shah</name><uri>http://www.blogger.com/profile/14056873751705050529</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>4</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-2421403492236735102.post-2111927858571496640</id><published>2011-07-18T04:29:00.001-05:00</published><updated>2011-07-18T19:23:15.467-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OpenId'/><title type='text'>OpenID - create one for you today!</title><content type='html'>http://openid.net&lt;br /&gt;&lt;br /&gt;I've started using openID with my blogspot URI. &amp;nbsp;This is great from the perspective of remembering number of passwords/usernames. &amp;nbsp;As the number of websites supporting it increases the web will be much simpler place.&lt;br /&gt;&lt;br /&gt;There are complex theories out there to explain how openID works. &amp;nbsp;I'll try to explain it the way I understood ... user perspective only! &amp;nbsp;Actual implementation is also easy with libraries available in almost all languages. &amp;nbsp;Here is Java Implementations:&lt;br /&gt;Created by VeriSign: &lt;a href="http://code.google.com/p/joid/"&gt;http://code.google.com/p/joid/&lt;/a&gt;&lt;br /&gt;&lt;a href="http://code.google.com/p/openid4java/"&gt; http://code.google.com/p/openid4java/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Example of "Sign on 1.0" version:&lt;br /&gt;On yahoo.com: mysickname@yahoo.com and yahoopassword&lt;br /&gt;On google.com: myothersickname@gmail.com and googlepassword&lt;br /&gt;On aol.com: myaol-name@aol.com and aolpassword&lt;br /&gt;On (legacy) hotmail.com: mylegacyname@hotmail.com and hotmailpassword&lt;br /&gt;This became a problem when facebook, myspace and other social networks came out recently with Web2.0 boom for which a person has to create more account/passwords. &amp;nbsp;Some websites temporarily solved the problem of remembering username by asking your email address to create an account.&lt;br /&gt;On facebook.com: &lt;span style="font-weight: bold;"&gt;mysickname@yahoo.com&lt;/span&gt; and &lt;span style="font-weight: bold;"&gt;googlepassword&lt;/span&gt;&lt;br /&gt;So, by the end of the day a person has to enter 10 accounts all with almost similar passwords (since it sucks to remember 10 user/password combination). &amp;nbsp;Internet is only 12 years old. &amp;nbsp;Living in such an environment for another 5 years would be terrible.&lt;br /&gt;&lt;br /&gt;To solve this problem we now have something called, openID. &amp;nbsp;Since a lot of websites have now started supporting it, our dream might come true of remembering one username/password. &amp;nbsp;OpenID username comes in a URI format. &amp;nbsp;Create one with the website that supports openid (http://openid.net) &amp;nbsp;You may already have one URI, e.g. "goodforall.blogspot.com" with one of your existing account, which you can use while creating an OpenID.&lt;br /&gt;&lt;br /&gt;Let's say I want to use "software-nerd.blogspot.com" with blogger.com (draft.blogger.com for now) as my OpenID.&lt;br /&gt;&lt;br /&gt;Now, I'll go to yahoo.com and use my OpenID. &amp;nbsp;At this point yahoo.com will:&lt;br /&gt;1) forward the user to blogger.com login page if user is not logged in. &amp;nbsp;After successful login user will be asked to choose "add yahoo.com account forever" or "only once".&lt;br /&gt;2) forward the user to yahoo.com login page since I'm trying to use OpenID first time with yahoo.com. &amp;nbsp;Attaches "OpenID" to yahoo.com's account. and then (3)&lt;br /&gt;3) user has access to yahoo.com pages as user is already logged in with OpenID account&lt;br /&gt;&lt;br /&gt;So, if we keep using OpenID to all of the websites, this is how "OpenID" gets shared.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;On google.com:&lt;/span&gt; myothersickname@gmail.com/software-nerd.blogger.com and googlepassword and OpenID with OtherWebsiteAccountsList (mysickname@yahoo.com, myaol-name@aol.com, mylegacyname@hotmail.com)&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;On yahoo.com:&lt;/span&gt; mysickname@yahoo.com and yahoopassword and OpenID(software-nerd.blogger.com) verification&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;On aol.com:&lt;/span&gt; myaol-name@aol.com and aolpassword and OpenID(software-nerd.blogger.com) verification&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;On (legacy) hotmail.com:&lt;/span&gt; mylegacyname@hotmail.com and hotmailpassword and OpenID(software-nerd.blogger.com) verification&lt;br /&gt;&lt;br /&gt;So, now Google account knows nothing about Yahoo credentials and Yahoo account knows nothing about Google credentials. &amp;nbsp;Next time yahoo.com will only match the "OpenID verification" and give mysickname@yahoo.com access to the software-nerd.blogger.com&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;I still couldn't find an answer if people started to use 5 different URIs ... what would be the complexity factor. &amp;nbsp;And if this starts to becoming a problem what would be the next user's identity after "name", "email" and "URI"? &amp;nbsp;Anybody?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;OpenID helps at least for now, so get one today (&lt;a href="http://openid.net/get/"&gt;http://openid.net/get&lt;/a&gt;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2421403492236735102-2111927858571496640?l=techspeed.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://techspeed.blogspot.com/feeds/2111927858571496640/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2421403492236735102&amp;postID=2111927858571496640&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2421403492236735102/posts/default/2111927858571496640'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2421403492236735102/posts/default/2111927858571496640'/><link rel='alternate' type='text/html' href='http://techspeed.blogspot.com/2011/07/openid-create-one-for-you-today.html' title='OpenID - create one for you today!'/><author><name>Kunal Shah</name><uri>http://www.blogger.com/profile/14056873751705050529</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-2421403492236735102.post-3366428602107410678</id><published>2010-06-27T12:28:00.001-05:00</published><updated>2010-06-27T12:36:49.050-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Velocityconf speed websites facebook twitter Google June2010 fast webapps'/><title type='text'>Velocity conference - Speed up your website techniques</title><content type='html'>There are a lot of conferences happening all around the world. But velocity has a special purpose to solve, like save billions of man hours. The speed of every single byte that's get delivered to the client matters more than any time before.&lt;br /&gt;&lt;br /&gt;It was great to see efforts on all levels:&lt;br /&gt;&lt;br /&gt;- data center with the power savings talk&lt;br /&gt;&lt;br /&gt;- big pipe techniques&lt;br /&gt;&lt;br /&gt;- only download resources which are extremely needed else cache static ones; define proper UI vs data&lt;br /&gt;&lt;br /&gt;-minify or obfuscate or incremental JavaScript or base64 images or one css or primer JavaScript or predefined reusable html components&lt;br /&gt;&lt;br /&gt;- reduce latency by using data centers or cloud&lt;br /&gt;&lt;br /&gt;- html5 on all major browsers with app caching abilities&lt;br /&gt;&lt;br /&gt;- browsers thinking in terms of unlocking the power of CPU or gpu on which it runs on&lt;br /&gt;&lt;br /&gt;- search engines considering speed as a search SEO criteria&lt;br /&gt;&lt;br /&gt;- using caching technology such as memcache as a first tier of serving contents&lt;br /&gt;&lt;br /&gt;- using iframe to serve the slow ads, Google might be introducing it in the future by default&lt;br /&gt;&lt;br /&gt;&lt;b&gt;And some cheat notes:&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;- pre load resources of popular pages of your site&lt;br /&gt;&lt;br /&gt;- psychological change by loading major components of the page or use 'time to interact' technique.&lt;br /&gt;&lt;br /&gt;That's just to much to handle if you haven't started on any of them.   Cloud could solve some problem.  But i would like to see some of these functionalities start to come as default in popular frameworks by default or as plugins.&lt;br /&gt;&lt;br /&gt;Have fun with your velocity. &lt;a href="http://en.oreilly.com/velocity2010"&gt;Velocity2010&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2421403492236735102-3366428602107410678?l=techspeed.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://techspeed.blogspot.com/feeds/3366428602107410678/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2421403492236735102&amp;postID=3366428602107410678&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2421403492236735102/posts/default/3366428602107410678'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2421403492236735102/posts/default/3366428602107410678'/><link rel='alternate' type='text/html' href='http://techspeed.blogspot.com/2010/06/velocity-conference-what-about-it.html' title='Velocity conference - Speed up your website techniques'/><author><name>Kunal Shah</name><uri>http://www.blogger.com/profile/14056873751705050529</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-2421403492236735102.post-6955318377343959745</id><published>2007-05-27T15:55:00.000-05:00</published><updated>2007-05-27T22:37:21.375-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ajax'/><category scheme='http://www.blogger.com/atom/ns#' term='examples'/><category scheme='http://www.blogger.com/atom/ns#' term='prototype'/><title type='text'>Prototype - developer friendly javascripts</title><content type='html'>Prototype AJAX examples made with 1.5.1 version.  The examples use the struts2 tags instead of HTML tags.&lt;br /&gt;&lt;br /&gt;Example 1: Prototype ajax request in it's simplest form&lt;br /&gt;&lt;code&gt;&lt;/code&gt;&lt;pre&gt;&amp;lt;script language="JavaScript" type="text/javascript"&amp;gt;&lt;br /&gt;function ajaxRequest() {&lt;br /&gt; alert('start of prototype ajax request function.');&lt;br /&gt; var url = '&amp;lt;s:url action="ajaxresponse" namespace="example"&amp;gt;&amp;lt;/s:url&amp;gt;';&lt;br /&gt; var params = '';&lt;br /&gt; var ajax = new Ajax.Request(url, {&lt;br /&gt;   method: 'get',&lt;br /&gt;   parameters: params,&lt;br /&gt;   onCreate: processCreate,&lt;br /&gt;   onSuccess: processSuccess,&lt;br /&gt;   onFailure: processFailure,&lt;br /&gt;   onComplete: processComplete,&lt;br /&gt; });&lt;br /&gt; alert('end of prototype ajax request function.');&lt;br /&gt;}&lt;br /&gt;function processCreate(transport) {&lt;br /&gt; alert('create');&lt;br /&gt;}&lt;br /&gt;function processSuccess(transport) {&lt;br /&gt; alert('success');&lt;br /&gt;}&lt;br /&gt;function processFailure(transport) {&lt;br /&gt; alert('failure');&lt;br /&gt;}&lt;br /&gt;function processComplete(transport) {&lt;br /&gt; alert('complete');&lt;br /&gt;}&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;s:submit onclick="ajaxRequest()" &amp;gt;&amp;lt;/s:submit&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Example 2: Shows different methods to retrieve information from XMLHttpRequest object (e.g. transport in the example below)&lt;br /&gt;&lt;code&gt;&lt;/code&gt;&lt;pre&gt;&amp;lt;script language="JavaScript" type="text/javascript"&amp;gt;&lt;br /&gt;function ajaxRequest() {&lt;br /&gt; alert('start of prototype ajax request function.');&lt;br /&gt; var url = '&amp;lt;s:url action="ajaxresponse" namespace="example"&amp;gt;&amp;lt;/s:url&amp;gt;';&lt;br /&gt; var params = '';&lt;br /&gt; var ajax = new Ajax.Request(url, {&lt;br /&gt;   method: 'get',&lt;br /&gt;   parameters: params,&lt;br /&gt;   onCreate: processCreate,&lt;br /&gt;   onSuccess: processSuccess,&lt;br /&gt;   onFailure: processFailure,&lt;br /&gt;   onComplete: processComplete,&lt;br /&gt; });&lt;br /&gt; alert('end of prototype ajax request function.');&lt;br /&gt;}&lt;br /&gt;function processCreate(transport) {&lt;br /&gt; alert('create');&lt;br /&gt;}&lt;br /&gt;function processSuccess(transport) {&lt;br /&gt; alert('success');&lt;br /&gt; showResponses(transport);&lt;br /&gt;}&lt;br /&gt;function processFailure(transport) {&lt;br /&gt; alert('failure');&lt;br /&gt; showResponses(transport);&lt;br /&gt;}&lt;br /&gt;function processComplete(transport) {&lt;br /&gt; alert('complete');&lt;br /&gt;}&lt;br /&gt;function showResponses(transport) {&lt;br /&gt; alert('responseHeaders: ' + transport.getAllResponseHeaders());&lt;br /&gt; alert('response header content-length: ' + transport.getResponseHeader('content-length'));&lt;br /&gt; alert('status: ' + transport.status);&lt;br /&gt; alert('statusText: ' + transport.statusText);&lt;br /&gt; alert('responseXML: ' + transport.responseXML);&lt;br /&gt; alert('responseText: ' + transport.responseText);&lt;br /&gt;}&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;s:submit onclick="ajaxRequest()" &amp;gt;&amp;lt;/s:submit&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Example 3: Ajax updater to update the contents for success/failure to the given ajax-success-div-id/ajax-failure-div-id accordingly.&lt;br /&gt;&lt;code&gt;&lt;/code&gt;&lt;pre&gt;&amp;lt;script language="JavaScript" type="text/javascript"&amp;gt;&lt;br /&gt;function ajaxUpdate() {&lt;br /&gt; alert('start of prototype ajax update function.');&lt;br /&gt; var url = '&amp;lt;s:url action="ajaxresponse" namespace="example"&amp;gt;&amp;lt;/s:url&amp;gt;';&lt;br /&gt; var params = '';&lt;br /&gt; var ajax = new Ajax.Updater({success: 'ajax-success-div-id', failure: 'ajax-failure-div-id'}, url, {&lt;br /&gt;   method: 'get', // post get&lt;br /&gt;   parameters: params,&lt;br /&gt;   encoding: 'UTF-8', //UTF-8&lt;br /&gt;   insertion: Insertion.Bottom,//Insertion.After Insertion.Before Insertion.Top Insertion.Bottom&lt;br /&gt;   onCreate: processCreate,&lt;br /&gt;   onSuccess: processSuccess,&lt;br /&gt;   onFailure: processFailure,&lt;br /&gt;   onComplete: processComplete&lt;br /&gt; });&lt;br /&gt; alert('end of prototype ajax update function.');&lt;br /&gt;}&lt;br /&gt;function processCreate(transport) {&lt;br /&gt; alert('create');&lt;br /&gt;}&lt;br /&gt;function processSuccess(transport) {&lt;br /&gt; alert('success');&lt;br /&gt; showResponses(transport);&lt;br /&gt;}&lt;br /&gt;function processFailure(transport) {&lt;br /&gt; alert('failure');&lt;br /&gt; showResponses(transport);&lt;br /&gt;}&lt;br /&gt;function processComplete(transport) {&lt;br /&gt; alert('complete');&lt;br /&gt;}&lt;br /&gt;function showResponses(transport) {&lt;br /&gt; alert('responseHeaders: ' + transport.getAllResponseHeaders());&lt;br /&gt; alert('response header content-length: ' + transport.getResponseHeader('content-length'));&lt;br /&gt; alert('status: ' + transport.status);&lt;br /&gt; alert('statusText: ' + transport.statusText);&lt;br /&gt; alert('responseXML: ' + transport.responseXML);&lt;br /&gt; alert('responseText: ' + transport.responseText);&lt;br /&gt;}&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;s:submit onclick="ajaxUpdate()" &amp;gt;&amp;lt;/s:submit&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;div id="ajax-success-div-id"&amp;gt;&lt;br /&gt;Hello, I should be replaced for success!&lt;br /&gt;  &amp;lt;/div&amp;gt;&lt;br /&gt;  &amp;lt;div id="ajax-failure-div-id"&amp;gt;&lt;br /&gt;Hello, I should be replaced for failure!&lt;br /&gt;  &amp;lt;/div&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Example 4: Show "Loading response ..." and an insight into when the response is populated i.e. right before onComplete is called.&lt;br /&gt;&lt;code&gt;&lt;/code&gt;&lt;pre&gt;&amp;lt;script language="JavaScript" type="text/javascript"&amp;gt;&lt;br /&gt;function ajaxUpdate() {&lt;br /&gt; alert('start of prototype ajax update function.');&lt;br /&gt; var url = '&amp;lt;s:url action="ajaxresponse" namespace="example"&amp;gt;&amp;lt;/s:url&amp;gt;';&lt;br /&gt; var params = '';&lt;br /&gt; var ajax = new Ajax.Updater({success: 'ajax-success-div-id', failure: 'ajax-failure-div-id'}, url, {&lt;br /&gt;   method: 'get', // post get&lt;br /&gt;   parameters: params,&lt;br /&gt;   encoding: 'UTF-8', //UTF-8&lt;br /&gt;   //insertion: Insertion.Bottom,//Insertion.After Insertion.Before Insertion.Top Insertion.Bottom&lt;br /&gt;   onCreate: processCreate,&lt;br /&gt;   onLoading: processLoading,&lt;br /&gt;   onSuccess: processSuccess,&lt;br /&gt;   onFailure: processFailure,&lt;br /&gt;   onComplete: processComplete&lt;br /&gt; });&lt;br /&gt; alert('end of prototype ajax update function.');&lt;br /&gt;}&lt;br /&gt;function processLoading(transport) {&lt;br /&gt; $('ajax-success-div-id').innerHTML = 'Loading response ...';&lt;br /&gt;}&lt;br /&gt;function processCreate(transport) {&lt;br /&gt; alert('create');&lt;br /&gt;}&lt;br /&gt;function processSuccess(transport) {&lt;br /&gt; alert('success');&lt;br /&gt; alert('text will be replaced after you press OK button now but before you press OK button for complete!');&lt;br /&gt;}&lt;br /&gt;function processFailure(transport) {&lt;br /&gt; alert('failure');&lt;br /&gt; alert('text will be replaced after you press OK button now but before you press OK button for complete!');&lt;br /&gt;}&lt;br /&gt;function processComplete(transport) {&lt;br /&gt; alert('complete');&lt;br /&gt;}&lt;br /&gt;function showResponses(transport) {&lt;br /&gt; alert('responseHeaders: ' + transport.getAllResponseHeaders());&lt;br /&gt; alert('response header content-length: ' + transport.getResponseHeader('content-length'));&lt;br /&gt; alert('status: ' + transport.status);&lt;br /&gt; alert('statusText: ' + transport.statusText);&lt;br /&gt; alert('responseXML: ' + transport.responseXML);&lt;br /&gt; alert('responseText: ' + transport.responseText);&lt;br /&gt;}&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;s:submit onclick="ajaxUpdate()" &amp;gt;&amp;lt;/s:submit&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;div id="ajax-success-div-id"&amp;gt;&lt;br /&gt;Hello, I should be replaced for success!&lt;br /&gt;&amp;lt;/div&amp;gt;&lt;br /&gt;&amp;lt;div id="ajax-failure-div-id"&amp;gt;&lt;br /&gt;Hello, I should be replaced for failure!&lt;br /&gt;&amp;lt;/div&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Example 5: Periodically updates the response with "10 seconds frequency &amp; 1 second decay", fully replaces the content for the success/failure div.&lt;br /&gt;&lt;code&gt;&lt;/code&gt;&lt;pre&gt;&amp;lt;script language="JavaScript" type="text/javascript"&amp;gt;&lt;br /&gt;function ajaxPeriodicUpdate() {&lt;br /&gt; alert('start of prototype ajax periodic update function.');&lt;br /&gt; var url = '&amp;lt;s:url action="ajaxresponse" namespace="example"&amp;gt;&amp;lt;/s:url&amp;gt;';&lt;br /&gt; var params = '';&lt;br /&gt; var ajax = new Ajax.PeriodicalUpdater({success: 'ajax-success-div-id', failure: 'ajax-failure-div-id'}, url, {&lt;br /&gt;   method: 'get',&lt;br /&gt;   parameters: params,&lt;br /&gt;   encoding: 'UTF-8',&lt;br /&gt;   frequency: 10,&lt;br /&gt;   decay: 1,&lt;br /&gt;   onCreate: processCreate,&lt;br /&gt;   onLoading: processLoading,&lt;br /&gt;   onSuccess: processSuccess,&lt;br /&gt;   onFailure: processFailure,&lt;br /&gt;   onComplete: processComplete&lt;br /&gt; });&lt;br /&gt; alert('end of prototype ajax periodic update function.');&lt;br /&gt;}&lt;br /&gt;function processLoading(transport) {&lt;br /&gt; $('ajax-success-div-id').innerHTML = 'Loading response ...';&lt;br /&gt;}&lt;br /&gt;function processCreate(transport) {&lt;br /&gt; alert('create');&lt;br /&gt;}&lt;br /&gt;function processSuccess(transport) {&lt;br /&gt; alert('success');&lt;br /&gt;}&lt;br /&gt;function processFailure(transport) {&lt;br /&gt; alert('failure');&lt;br /&gt;}&lt;br /&gt;function processComplete(transport) {&lt;br /&gt; alert('complete');&lt;br /&gt;}&lt;br /&gt;function showResponses(transport) {&lt;br /&gt; alert('responseHeaders: ' + transport.getAllResponseHeaders());&lt;br /&gt; alert('response header content-length: ' + transport.getResponseHeader('content-length'));&lt;br /&gt; alert('status: ' + transport.status);&lt;br /&gt; alert('statusText: ' + transport.statusText);&lt;br /&gt; alert('responseXML: ' + transport.responseXML);&lt;br /&gt; alert('responseText: ' + transport.responseText);&lt;br /&gt;}&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;s:submit onclick="ajaxPeriodicUpdate()" &amp;gt;&amp;lt;/s:submit&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;div id="ajax-success-div-id"&amp;gt;&lt;br /&gt;Hello, I should be replaced for success!&lt;br /&gt;&amp;lt;/div&amp;gt;&lt;br /&gt;&amp;lt;div id="ajax-failure-div-id"&amp;gt;&lt;br /&gt;Hello, I should be replaced for failure!&lt;br /&gt;&amp;lt;/div&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Example 6: Register the responder for both Update and Request Ajax activities, In the example, "onCreate"&lt;br /&gt;&lt;code&gt;&lt;/code&gt;&lt;pre&gt;&amp;lt;script language="JavaScript" type="text/javascript"&amp;gt;&lt;br /&gt;var ajaxResponder = Ajax.Responders.register({&lt;br /&gt; onCreate: commonCreate&lt;br /&gt;});&lt;br /&gt;function commonCreate(transport) {&lt;br /&gt; alert('responder:create');&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;function ajaxUpdate() {&lt;br /&gt; alert('start of prototype ajax update function.');&lt;br /&gt; var url = '&amp;lt;s:url action="ajaxresponse" namespace="example"&amp;gt;&amp;lt;/s:url&amp;gt;';&lt;br /&gt; var params = '';&lt;br /&gt; var ajax = new Ajax.Updater({success: 'ajax-success-div-id', failure: 'ajax-failure-div-id'}, url, {&lt;br /&gt;   method: 'get',&lt;br /&gt;   parameters: params,&lt;br /&gt;   encoding: 'UTF-8'&lt;br /&gt; });&lt;br /&gt; alert('end of prototype ajax update function.');&lt;br /&gt;}&lt;br /&gt;function ajaxRequest() {&lt;br /&gt; alert('start of prototype ajax request function.');&lt;br /&gt; var url = '&amp;lt;s:url action="ajaxresponse" namespace="example"&amp;gt;&amp;lt;/s:url&amp;gt;';&lt;br /&gt; var params = '';&lt;br /&gt; var ajax = new Ajax.Request(url, {&lt;br /&gt;   method: 'get',&lt;br /&gt;   parameters: params,&lt;br /&gt;   encoding: 'UTF-8', //UTF-8&lt;br /&gt;   onSuccess: processSuccess&lt;br /&gt; });&lt;br /&gt; alert('end of prototype ajax request function.');&lt;br /&gt;}&lt;br /&gt;function processSuccess(transport) {&lt;br /&gt; $('ajax-success-div-id').innerHTML = 'success: Ajax.Request - ' + transport.responseText;&lt;br /&gt;}&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;s:submit onclick="ajaxRequest()" value="request"&amp;gt;&amp;lt;/s:submit&amp;gt;&lt;br /&gt;&amp;lt;s:submit onclick="ajaxUpdate()" value="update"&amp;gt;&amp;lt;/s:submit&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;div id="ajax-success-div-id"&amp;gt;&lt;br /&gt;Hello, I should be replaced for success!&lt;br /&gt;&amp;lt;/div&amp;gt;&lt;br /&gt;&amp;lt;div id="ajax-failure-div-id"&amp;gt;&lt;br /&gt;Hello, I should be replaced for failure!&lt;br /&gt;&amp;lt;/div&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2421403492236735102-6955318377343959745?l=techspeed.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://techspeed.blogspot.com/feeds/6955318377343959745/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2421403492236735102&amp;postID=6955318377343959745&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2421403492236735102/posts/default/6955318377343959745'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2421403492236735102/posts/default/6955318377343959745'/><link rel='alternate' type='text/html' href='http://techspeed.blogspot.com/2007/05/prototype-developer-friendly.html' title='Prototype - developer friendly javascripts'/><author><name>kshah</name><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-2421403492236735102.post-2666704581687059840</id><published>2007-04-24T00:43:00.000-05:00</published><updated>2007-04-24T00:56:18.709-05:00</updated><title type='text'>Java Design principles</title><content type='html'>If you follow all five you are the best ... Do not try to apply all the principles from the start.  Use the iterative approach to improve implementation but make sure your classes are testable.&lt;br /&gt;&lt;br /&gt;Principle 1: The Single Responsibility Principle (SRP) - A class should have only one reason to change.&lt;br /&gt;Principle 2: The Open-Closed Principle (OCP) - Software Entities (Class, modules, functions ...) should be open for extension, but closed for modifications.&lt;br /&gt;Principle 3: The Liskov Subsitution Principle (LSP) - Subtypes must be substitutable for their base types.&lt;br /&gt;Principle 4: The Dependency Inversion Principle (DIP) - (a) High-level modules should not depend upon low-level modules.  Both should depend upon abstractions.  (b) Abstractions should not depend upon details.  Details should depend upon abstractions.&lt;br /&gt;Principle 5: The Interface Segregation Principle (ISP) - Clients should not depend upon methods that they do not use.&lt;br /&gt;&lt;br /&gt;These are the principles that I apply on a day to day code development which makes my life a lot more easier.  I will try to explain each in detail in one or more of my later posts.&lt;br /&gt;&lt;br /&gt;Have fun designing ... on white board,&lt;br /&gt;Kunal&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2421403492236735102-2666704581687059840?l=techspeed.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://techspeed.blogspot.com/feeds/2666704581687059840/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2421403492236735102&amp;postID=2666704581687059840&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2421403492236735102/posts/default/2666704581687059840'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2421403492236735102/posts/default/2666704581687059840'/><link rel='alternate' type='text/html' href='http://techspeed.blogspot.com/2007/04/java-design-principles.html' title='Java Design principles'/><author><name>kshah</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
