<?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-35473976</id><updated>2012-01-24T06:46:36.036-08:00</updated><category term='JX'/><category term='openid'/><category term='jQuery'/><category term='General'/><category term='Javascript'/><category term='identity'/><category term='Ajax'/><title type='text'>40 Something Geek!</title><subtitle type='html'>My travails and rants in the realm of Software Engineering.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://santrajan.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35473976/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://santrajan.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Santosh Rajan</name><uri>http://www.blogger.com/profile/04123305937973885088</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_VGpTmPoWSls/SeqT5VFXULI/AAAAAAAAABM/F2N2YvC0cQc/S220/Me240X160.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>31</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-35473976.post-8177995524818588412</id><published>2011-07-24T05:20:00.000-07:00</published><updated>2011-07-24T05:41:46.814-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='openid'/><title type='text'>Browser supported Single Sign on with Email Addresses</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;br /&gt;In this post I would like to explore &lt;a href="http://en.wikipedia.org/wiki/Single_sign-on"&gt;Single Sign on&lt;/a&gt;'s with email addresses, with the support of the users browser. Browsers do not currently support Single Sign On. Recently Mozilla showcased their concept of &lt;a href="http://browserid.org/"&gt;BrowserID&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I am not comfortable with their use of &lt;a href="http://en.wikipedia.org/wiki/Public-key_cryptography"&gt;asymmetric keys&lt;/a&gt;, because this requires the user to manage his own private/public keys. Indeed BrowserID will ease the process for the user, but he still needs a private key on every computer he uses. And this may include public computers at browsing centers etc.&lt;br /&gt;&lt;br /&gt;So here, I will present a Single Sign on process, that will not require asymmetric keys. For the sake of this post we will call the users email provider "email.com". The site he wants to sign into "site.com", and "BSSO" &amp;nbsp;for Browser Supported Single Sign On. This article will not get into the details of algorithm's etc, because each step described here can be carried out in many ways, and has already been implemented in some form or the other by other protocols. A good example is &lt;a href="http://openid.net/specs/openid-authentication-2_0.html"&gt;OpenID 2.0&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;First, I will describe the process when the user is already signed into "email.com", and wants to sign into "site.com".&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;&lt;b&gt;Case 1 - User signed into email.com&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-z64un0_6blA/TivtCL8dJPI/AAAAAAAAAGY/cIx5Ox6aW7E/s1600/SSO1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-z64un0_6blA/TivtCL8dJPI/AAAAAAAAAGY/cIx5Ox6aW7E/s1600/SSO1.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;b&gt;Step 1&lt;/b&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;The user browses to "site.com". "site.com" needs to indicate to the user's browser that it supports BSSO. This can be done in many ways. I will give one example here. On site.com's page it can include two elements. One element in the html head part like below&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;lt;link href="https://site.com/bsso" rel="bsso_end_point"/&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;In the body part it can have an element with id "bsso_sign_in_button".&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;The rel="bsso_end_point" link element will indicate to the browser that this site supports BSSO and it should listen to the click event of the element with id="bsso_sign_in_button".&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;b&gt;Step 2&lt;/b&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;When the user clicks the "Sign In" button for "site.com" the browser will make an authentication request to "email.com" on behalf of "site.com" with "site.com"s end point. This will need the user to have pre selected his prefered email address(s) in the browsers BSSO setup, if not the browser will show a popup asking the user to select his prefered email address. The browser may also have discovered "email.com"s end point during setup using &lt;a href="http://en.wikipedia.org/wiki/Webfinger"&gt;webfinger&lt;/a&gt;.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;b&gt;Step 3&lt;/b&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;"email.com" returns a positive assertion of the user's email address. This is not a problem because the user is currently signed into "email.com". Also a private "association key" is included along with the assertion.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Steps (2) and (3) are transparent to the user. The browser makes a cross-domain ajax request to "email.com". This is possible because it is the browser making the request and not any javascript on "site.com"s page.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;b&gt;Step 4&lt;/b&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;The browser now directs the user to "site.com"s end point url with a http post request, with the assertion returned from "email.com" in the post body.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;b&gt;Step 5&lt;/b&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;"site.com" will now verify the assertion by sending the assertion along with the association directly to "email.com"s endpoint. "site.com" would have also followed the webfinger protocol to determine the end point. It is possible for "site.com" to request a time bound association with "email.com", so that Step 5 and 6 can be avoided in subsequent requests.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;b&gt;Step 6&lt;/b&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;"email.com" will respond with success or failure.&amp;nbsp;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;&lt;b&gt;Case 2 - User Not signed into email.com&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;In the case where the user is not signed into "email.com", in Step 3 "email.com" will respond with a "user not signed in" response along with a sign in url that might have an encoded token in its query parameter. (The encoded token is for preventing phishing, I am not yet sure if this token is required or not as of now). The browser will pop up a window and listen to the popup's close event, and direct the user to the returned sign in url. After sign in "email.com" must "close" the popup via javascript. When the popup is closed the browser will continue with Step 2 again. In case the popup was closed without the user signing in, the browser will receive a "user not signed in" for the second time, in which case the browser has to query the user again.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Some Notes&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;This may look like a lot of steps, but the user only "see's" (1) and (4). Also (5) and (6) are not required after "site.com" and "email.com" have established an association.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Phishing is not possible, because there are no redirects from "site.com".&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;The user can sign in from anywhere, there is no need to have any private keys on the computer being used.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Unlike BrowserID "email.com" will be aware of the site's the user sign's into. I don't know how much of a problem this is. It's a debatable issue I guess.&lt;/div&gt;&lt;a href="http://2.bp.blogspot.com/-z64un0_6blA/TivtCL8dJPI/AAAAAAAAAGY/cIx5Ox6aW7E/s1600/SSO1.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;br /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35473976-8177995524818588412?l=santrajan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://santrajan.blogspot.com/feeds/8177995524818588412/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://santrajan.blogspot.com/2011/07/browser-supported-single-sign-on-with.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35473976/posts/default/8177995524818588412'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35473976/posts/default/8177995524818588412'/><link rel='alternate' type='text/html' href='http://santrajan.blogspot.com/2011/07/browser-supported-single-sign-on-with.html' title='Browser supported Single Sign on with Email Addresses'/><author><name>Santosh Rajan</name><uri>http://www.blogger.com/profile/04123305937973885088</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_VGpTmPoWSls/SeqT5VFXULI/AAAAAAAAABM/F2N2YvC0cQc/S220/Me240X160.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-z64un0_6blA/TivtCL8dJPI/AAAAAAAAAGY/cIx5Ox6aW7E/s72-c/SSO1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35473976.post-7957386487807302283</id><published>2010-10-25T03:38:00.000-07:00</published><updated>2010-10-25T03:42:45.066-07:00</updated><title type='text'>Android App Development in Scheme</title><content type='html'>You can now develop android apps in Scheme. I find this very exciting because you can develop in a simple functional manner. I have started a tutorial for this here.&lt;br /&gt;&lt;a href="http://androidscheme.blogspot.com/"&gt;http://androidscheme.blogspot.com&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35473976-7957386487807302283?l=santrajan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://santrajan.blogspot.com/feeds/7957386487807302283/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://santrajan.blogspot.com/2010/10/android-app-development-in-scheme.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35473976/posts/default/7957386487807302283'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35473976/posts/default/7957386487807302283'/><link rel='alternate' type='text/html' href='http://santrajan.blogspot.com/2010/10/android-app-development-in-scheme.html' title='Android App Development in Scheme'/><author><name>Santosh Rajan</name><uri>http://www.blogger.com/profile/04123305937973885088</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_VGpTmPoWSls/SeqT5VFXULI/AAAAAAAAABM/F2N2YvC0cQc/S220/Me240X160.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35473976.post-8018880564538163665</id><published>2010-09-28T04:26:00.000-07:00</published><updated>2010-09-28T04:27:18.833-07:00</updated><title type='text'>Fast Track Clojure</title><content type='html'>Fast Track Clojure is a tutorial I am developing for learning the Clojure language. The objective of the tutorial is to get you developing in Clojure as soon as possible.&lt;br /&gt;&lt;br /&gt;Clojure is a Lisp based language, and here I would like to quote Eric Raymond on why you should learn Lisp.&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #666666; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 15px; line-height: 20px;"&gt;&lt;i&gt;"Lisp is worth learning for the profound enlightenment experience you will have when you finally get it; that experience will make you a better programmer for the rest of your days, even if you never actually use Lisp itself a lot."&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;You can start with the tutorials here.&lt;br /&gt;&lt;a href="http://fasttrackclojure.blogspot.com/2010/09/lesson-1-hello-clojure.html"&gt;http://fasttrackclojure.blogspot.com/2010/09/lesson-1-hello-clojure.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35473976-8018880564538163665?l=santrajan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://fasttrackclojure.blogspot.com/2010/09/lesson-1-hello-clojure.html' title='Fast Track Clojure'/><link rel='replies' type='application/atom+xml' href='http://santrajan.blogspot.com/feeds/8018880564538163665/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://santrajan.blogspot.com/2010/09/fast-track-clojure.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35473976/posts/default/8018880564538163665'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35473976/posts/default/8018880564538163665'/><link rel='alternate' type='text/html' href='http://santrajan.blogspot.com/2010/09/fast-track-clojure.html' title='Fast Track Clojure'/><author><name>Santosh Rajan</name><uri>http://www.blogger.com/profile/04123305937973885088</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_VGpTmPoWSls/SeqT5VFXULI/AAAAAAAAABM/F2N2YvC0cQc/S220/Me240X160.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35473976.post-2659600790496694749</id><published>2010-07-01T03:14:00.000-07:00</published><updated>2010-07-01T03:14:33.399-07:00</updated><title type='text'>Released Eezee MVC</title><content type='html'>I released Eezee MVC an Easy, Model, View, Controller framework for Google App Engine.&lt;br /&gt;&lt;b&gt;Features&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Has a Controller Class that does routing, handling and rendering templates&lt;/li&gt;&lt;li&gt;Your controllers reside in the controllers folder, views (html Django templates) in views folder,&lt;br /&gt;models in models folder&lt;/li&gt;&lt;li&gt;Allows Controller to recieve GET/POST parameters as function arguments.&lt;/li&gt;&lt;li&gt;Use's S Nakajima's excellant &lt;a href="http://github.com/snakajima/gdispatch"&gt;gdispatch router&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;URL: &lt;a href="http://eezeemvc.appspot.com/"&gt;http://eezeemvc.appspot.com/&lt;/a&gt;&lt;br /&gt;Project URL: &lt;a href="http://code.google.com/p/eezeemvc"&gt;http://code.google.com/p/eezeemvc&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35473976-2659600790496694749?l=santrajan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://eezeemvc.appspot.com/' title='Released Eezee MVC'/><link rel='replies' type='application/atom+xml' href='http://santrajan.blogspot.com/feeds/2659600790496694749/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://santrajan.blogspot.com/2010/07/released-eezee-mvc.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35473976/posts/default/2659600790496694749'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35473976/posts/default/2659600790496694749'/><link rel='alternate' type='text/html' href='http://santrajan.blogspot.com/2010/07/released-eezee-mvc.html' title='Released Eezee MVC'/><author><name>Santosh Rajan</name><uri>http://www.blogger.com/profile/04123305937973885088</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_VGpTmPoWSls/SeqT5VFXULI/AAAAAAAAABM/F2N2YvC0cQc/S220/Me240X160.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35473976.post-925822117166911482</id><published>2009-06-23T23:40:00.000-07:00</published><updated>2009-06-24T01:52:00.804-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='openid'/><category scheme='http://www.blogger.com/atom/ns#' term='identity'/><title type='text'>Federated Identity in your Browser</title><content type='html'>&lt;div&gt;In this post I am going to discuss the background information that will make a case for &lt;a href="http://en.wikipedia.org/wiki/Federated_identity"&gt;Federated Identity&lt;/a&gt; &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_0"&gt;Management&lt;/span&gt; in Browsers. With the advent of new Browser &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_1"&gt;capabilities&lt;/span&gt;, and leveraging the new technologies that will be adopted by Federated Identity specifications, I hope to show how Federated Identity &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;Management&lt;/span&gt; can be achieved using Browsers.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;Federation of Identity serves to enable portability of Identity information across otherwise autonomous security domains. In other words Federated Identity is about using a single Identity to sign into different web sites (over simplifying a bit here). This is not only about your "&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;username&lt;/span&gt;&lt;/span&gt;" and "password" but also a about other information that identifies a person like, real name, address, nick name, email etc.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Examples of common Federated Identity usage are, using your Google or Yahoo Account to &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;&lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_1"&gt;Log in&lt;/span&gt;&lt;/span&gt; to other sites like Blogger, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;Youtube&lt;/span&gt;&lt;/span&gt; etc. In this case the web site allows authentication via any "Provider" that follows a Federated Identity standard like &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_6"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;OpenID&lt;/span&gt;&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_7"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;eg&lt;/span&gt;&lt;/span&gt;. This is different from using your &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_8"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;Facebook&lt;/span&gt;&lt;/span&gt; or Twitter Accounts to sign into third Party sites. In the latter case it is called Delegated Identity. In other words the web site you are signing into has delegated authentication to &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_9"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_6"&gt;Facebook&lt;/span&gt;&lt;/span&gt; or Twitter.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The way Federated Identity &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_10"&gt;&lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_7"&gt;Log ins&lt;/span&gt;&lt;/span&gt; work is that, when you visit a Site you are redirected to your Identity Provider, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_11"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_8"&gt;eg&lt;/span&gt;&lt;/span&gt;. Google. You &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_12"&gt;Log in&lt;/span&gt; at your Provider, and also "allow" your provider to provide additional information (your name, email etc), and then you are redirected back to the web site. For one this method is prone to &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_13"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_9"&gt;Phishing&lt;/span&gt;&lt;/span&gt;. If a user &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_14"&gt;&lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_10"&gt;inadvertently&lt;/span&gt;&lt;/span&gt; visits a untrustworthy site, the site could redirect the user to a site that appears to look like the users provider and steal his &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_15"&gt;user name&lt;/span&gt; and password.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Another problem is that when you visit a site that supports Federated Identity, you cannot &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_16"&gt;log in&lt;/span&gt; to the site just by clicking a button. The site for various reasons will choose to support a selected list of providers from which you have to choose from, leading to what is called &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_17"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_11"&gt;&lt;a href="http://factoryjoe.com/blog/2009/04/06/does-openid-need-to-be-hard/"&gt;Nascarization&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Another problem is that of data portability. Let us say you have your identity, profile and social contacts at Google, and you want to change to Yahoo. There is no way to do that seamlessly as of now.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;All this begs the question where is the best place to keep your identity information? With You! &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_18"&gt;That's&lt;/span&gt; the obvious answer. And the closest that can get to "You" is your Browser. Unfortunately in the current state of affairs of Federated Identity, the browser only plays the role of via media or broker, between the Identity provider and the web site. If the Browser were to manage your identity you could solve all the three problems above in one fell swoop!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;However there are two reasons why browsers do not play a greater role in Federated Identity &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_19"&gt;&lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_12"&gt;Management&lt;/span&gt;&lt;/span&gt;.&lt;/div&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;There is no commonly accepted standard that will allow browser vendors to support this. This would require a specification to allow the browser, identity provider, web sites to speak a "common" language.&lt;/li&gt;&lt;li&gt;Another solution would have been to implement browser &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_20"&gt;plug ins&lt;/span&gt;. This would still require the common standard but &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_21"&gt;at least&lt;/span&gt; we do not have to wait for the browser vendors. But the problem here is developing &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_22"&gt;plug ins&lt;/span&gt; for all types of browsers is not easy (&lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_23"&gt;at least&lt;/span&gt; up to now).&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;New browser developments like &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_24"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_13"&gt;&lt;a href="http://jetpack.mozillalabs.com/"&gt;Jetpack&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;a href="http://jetpack.mozillalabs.com/"&gt; from Mozilla Labs&lt;/a&gt; allows you to develop browser &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_25"&gt;plug ins&lt;/span&gt; very easily using Javascript. Opera Unite is another effort to empower the browser. All browser vendors are moving in the direction of empowering the browser. What all this means that extending your browser to support a Federated &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_26"&gt;Log in&lt;/span&gt; standard is going to be trivial.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So what we really need is a "Federated Identity Standard for Browsers". There must be a working group for this at one of the standards bodies like &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_14"&gt;&lt;a href="http://openid.net/"&gt;OpenID&lt;/a&gt;&lt;/span&gt;, &lt;a href="http://openwebfoundation.org/"&gt;Open Web&lt;/a&gt;, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_15"&gt;&lt;a href="http://kantarainitiative.org/"&gt;Kantara&lt;/a&gt; &lt;/span&gt;etc. I have not seen such a working group yet.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I intend to demonstrate how a simple Federated Identity standard can be implemented using Mozilla &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_27"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_16"&gt;Jetpack&lt;/span&gt;&lt;/span&gt;, and some minor tweaks to existing Federated Identity provider and consumer software, in a future post of mine.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&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/35473976-925822117166911482?l=santrajan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://santrajan.blogspot.com/feeds/925822117166911482/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://santrajan.blogspot.com/2009/06/federated-identity-in-your-browser.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35473976/posts/default/925822117166911482'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35473976/posts/default/925822117166911482'/><link rel='alternate' type='text/html' href='http://santrajan.blogspot.com/2009/06/federated-identity-in-your-browser.html' title='Federated Identity in your Browser'/><author><name>Santosh Rajan</name><uri>http://www.blogger.com/profile/04123305937973885088</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_VGpTmPoWSls/SeqT5VFXULI/AAAAAAAAABM/F2N2YvC0cQc/S220/Me240X160.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35473976.post-6769800134758858118</id><published>2009-06-16T01:28:00.000-07:00</published><updated>2009-06-16T07:19:46.530-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='openid'/><title type='text'>Opera Unite, will I really use it?</title><content type='html'>Opera has released its new web server in a browser called &lt;a href="http://unite.opera.com/"&gt;Opera Unite&lt;/a&gt;. This is not a new idea, and the idea of running your own server, is I guess only appealing to geeks. Having said that, it does give the lay user an ability to run some basic services like picture sharing, chat etc from his own PC.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I can't see a killer application from among the ones they have available now. So we have to wait and see what applications developers will come up with.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Also we have to consider why people don't usually run web servers from their PC's. One reason is of cource bandwidth. If you are connected via ADSL or something like that this is a bad idea. You can do some limited stuff with a small group of friends. But nothing for public consumption.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The second problem is discovery. User's may just have temporary IP addresses. Opera solves this by being your proxy server that allows users to connect to your PC. That means you have to sign up for the Opera Unite service. The part I dont like is accepting their terms of service "By uploading Content to Opera’s site, you grant Opera an unrestricted, blah blah blah ....". &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So I don't think this is going to replace my blogger, facebook, twitter etc etc accounts. But I can see where I could use it. For one, to delegate my OpenID. So my OpenID could be something like&lt;/div&gt;&lt;div&gt;http://home.mynickname.operaunite.com/openid.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Now before you run and download Opera I would say hang on. I haven't figured how to do the above my self yet. Its 45 mins since I have downloaded Opera. So its not like just editing your "index.html". Looks to me somebody has to do a "OpenID" Opera Unite Service. So my Opera unite OpenID is actually pointing to a Opera Unite Service by adding a "/openid". And he has to upload the service and Opera has to approve it! Or has anybody figured how to edit index.html yet?&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;But you see, there is potential here. If you have an application that stores your personal profile data and provides it to applications as and when required, we have the beginnings of data portability. But now the problem is to port your data from browser to browser instead of from web site to web site!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;Update.&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;To set up your openid on your browser do the following. You cannot set it on your default home page. After downloading Opera Unite, Install the web server application by clicking on web server tab. Select a folder to be your web server root. eg C:\openid. Click on automatically create index.html file. Set Access control to public and save. Edit the index and add the following in the HEAD part. Change the href's accordingly to point to your provider.&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;i&gt;&lt;br /&gt;   &amp;lt;link rel="openid2.provider" href="http://www.myopenid.com/server"/&amp;gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;&lt;br /&gt;   &amp;lt;link rel="openid2.local_id" href="http://myname.myopenid.com"/&amp;gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;Your OpenID is&lt;/i&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;http://home.mynickname.operaunite.com/webserver&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&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/35473976-6769800134758858118?l=santrajan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://santrajan.blogspot.com/feeds/6769800134758858118/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://santrajan.blogspot.com/2009/06/opera-unite-will-i-really-use-it.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35473976/posts/default/6769800134758858118'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35473976/posts/default/6769800134758858118'/><link rel='alternate' type='text/html' href='http://santrajan.blogspot.com/2009/06/opera-unite-will-i-really-use-it.html' title='Opera Unite, will I really use it?'/><author><name>Santosh Rajan</name><uri>http://www.blogger.com/profile/04123305937973885088</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_VGpTmPoWSls/SeqT5VFXULI/AAAAAAAAABM/F2N2YvC0cQc/S220/Me240X160.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35473976.post-6321509755014179790</id><published>2009-06-08T00:51:00.000-07:00</published><updated>2009-06-08T01:11:30.996-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='openid'/><title type='text'>About Email Addresses and OpenID</title><content type='html'>Out of the hundreds of millions of &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;OpenID's&lt;/span&gt; in the wild today, 99% of them are provided for by Yahoo, Google, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;MySpace&lt;/span&gt; and AOL.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Three of them are email providers and your &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;OpenID&lt;/span&gt; is tied to your email address. &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;ie&lt;/span&gt; Opening and account at one of them gives you an email address and an &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;OpenID&lt;/span&gt;. You can also create a Google account with a non Google email address. Again the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;OpenID&lt;/span&gt; is tied to an email address. So when you are logging in with any of these &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_6"&gt;OpenID's&lt;/span&gt; you are in effect logging in with an email account.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This is also true in the case of &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_7"&gt;MySpace&lt;/span&gt; even though it is not an email provider. When you &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_8"&gt;login&lt;/span&gt; with your &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_9"&gt;MySpace&lt;/span&gt; ID you are really logging in with your email address! The &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_10"&gt;MySpace&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_11"&gt;OpenID&lt;/span&gt; is also tied to your &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_12"&gt;login&lt;/span&gt; email address.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In other words 99% of the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_13"&gt;OpenID's&lt;/span&gt; in the wild are really email addresses masquerading as &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_14"&gt;OpenID's&lt;/span&gt;!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Why the need for this masquerading? Because &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_15"&gt;OpenID&lt;/span&gt; does not support Email addresses as &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_16"&gt;OpenID's&lt;/span&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;And why doesn't &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_17"&gt;OpenID&lt;/span&gt; support Email addresses as &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_18"&gt;OpenID's&lt;/span&gt;? Given the facts above I cant think of a reason. Can you?&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35473976-6321509755014179790?l=santrajan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://santrajan.blogspot.com/feeds/6321509755014179790/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://santrajan.blogspot.com/2009/06/about-email-addresses-and-openid.html#comment-form' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35473976/posts/default/6321509755014179790'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35473976/posts/default/6321509755014179790'/><link rel='alternate' type='text/html' href='http://santrajan.blogspot.com/2009/06/about-email-addresses-and-openid.html' title='About Email Addresses and OpenID'/><author><name>Santosh Rajan</name><uri>http://www.blogger.com/profile/04123305937973885088</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_VGpTmPoWSls/SeqT5VFXULI/AAAAAAAAABM/F2N2YvC0cQc/S220/Me240X160.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35473976.post-4283028681798334153</id><published>2009-05-31T21:07:00.000-07:00</published><updated>2009-05-31T22:01:52.415-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='openid'/><category scheme='http://www.blogger.com/atom/ns#' term='Ajax'/><category scheme='http://www.blogger.com/atom/ns#' term='General'/><title type='text'>Google Wave is Web 3.0</title><content type='html'>If you search the web to find out what web 2.0 and 3.0 is, you will find them associated with social aspects. Things like web 2.0 is the "social web" etc. But really each version of the web is a technological leap.&lt;div&gt;&lt;ol&gt;&lt;li&gt;Static Web - Web 1.0 was the static web were you had to change the page or reload the page to change its contents.&lt;/li&gt;&lt;li&gt;Dynamic Web - Web 2.0 was the dynamic web where you could change the content without changing your browser page. (Google Maps, Ajax Pages).&lt;/li&gt;&lt;li&gt;Real time Web - Web 3.0 is the real time web where the content of the page will change in real time as the "author(s)" changes it. &lt;a href="http://wave.google.com/"&gt;Google Wave&lt;/a&gt; makes this possible.&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;Web 2.0, the dynamic web took off in 2004 with Google maps. That is when developers realized that you could change the contents of the page in place, paving the way for Ajax technologies, leading to the social web.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Web 3.0 as described above is a technological leap to the next level. What is interesting is that the very same people who brought about Web 2.0 with Google maps, the brothers, Lars and Jens Rasmussen are also the ones who are behind Google Wave, poised to bring about web 3.0!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Much has already been written about Google Wave, some even skeptical. But most of the articles seem to have missed the fundamental point what Google Wave is all about. What Google Wave has done is to combine the static, dynamic, real time aspects of the web into one composite object called the "Wave". &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The Wave Object can be turned into anything  the developer wants. It can be turned into a message, blog comment, blog, real time game, tweet, a wall, literally limited only to your imagination. That is why 4000 developers gave it a standing ovation when it was revealed at the Google IO conference. (Standing ovations are an extremely rare &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_0"&gt;occurrence&lt;/span&gt; at developer conferences).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Imagine a chat messenger without its text box (where you type), which has only its display area. Now imagine that you can type right into the display area. While you are typing the person you are chatting with can see you typing in real time. Actually if it is a chat conference all the people can type in at the same time and all of them can seen it in real time. You can add, pics video's and other types of content into the display area. You can fork off private conversations. A robot can spell check while all this is happening. The possibilities are endless. And this is what a Google Wave is.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Actually Google Wave sits on top of the same protocol that Google Talk sits on. The Jabber protocol now called &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;XMPP&lt;/span&gt;. Google added to this protocol and called it the Wave protocol.  It is an Open protocol, anyone can implement this protocol. Google is not keeping anything proprietary here. I can already see an army of developers piling on to this technology and you will see a lot cool stuff coming out within months.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Web 3.0 is here!&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/35473976-4283028681798334153?l=santrajan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://santrajan.blogspot.com/feeds/4283028681798334153/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://santrajan.blogspot.com/2009/05/google-wave-is-web-30.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35473976/posts/default/4283028681798334153'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35473976/posts/default/4283028681798334153'/><link rel='alternate' type='text/html' href='http://santrajan.blogspot.com/2009/05/google-wave-is-web-30.html' title='Google Wave is Web 3.0'/><author><name>Santosh Rajan</name><uri>http://www.blogger.com/profile/04123305937973885088</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_VGpTmPoWSls/SeqT5VFXULI/AAAAAAAAABM/F2N2YvC0cQc/S220/Me240X160.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35473976.post-6367237677196670333</id><published>2009-05-29T02:56:00.000-07:00</published><updated>2009-05-29T03:41:37.110-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='openid'/><title type='text'>About Google Wave and OpenID</title><content type='html'>I have been looking at Google Wave all day, wow, very very interesting. I have a lot to say but I will make this short by sticking to a couple of points that relate to OpenID.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;1) Wave servers are natural OpenID Providers.&lt;/div&gt;&lt;div&gt;The wave protocol sits on top of XMPP and provides for real time communication between users. It is decentralized using the DNS system. Yes this is like OpenID, but the clincher is that you can communicate with the user in real time, as soon as he logs in, and you can verify the user immediately.&lt;/div&gt;&lt;div&gt;2) Wave ID's are natural OpenID's&lt;/div&gt;&lt;div&gt;Wave ID's are really Jabber ID's, look like email addresses and have discovery inherant in the ID.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Eg. If you have a user with wave ID&lt;/div&gt;&lt;div&gt;user@domain.com/waveserver&lt;/div&gt;&lt;div&gt;An OpenID server on the same domain is a natural. The users Wave ID can be his OpenID or it can be&lt;/div&gt;&lt;div&gt;user@domain.com/openidserver&lt;/div&gt;&lt;div&gt;ie.  either make the waveid and openid same with xrds discovery or let it be different but point to the openid endpoint.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Any way it really deosn't matter how we do it, what matters is how fast we do it. In the coming months we may see a lot of Wave servers popping up, and if we are ready with support for WaveID's in OpenID we can make a killing.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Other wise the world will move on without us, and this will be another missed opportunity for OpenID. (We already missed it with email addresses).&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35473976-6367237677196670333?l=santrajan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://wave.google.com' title='About Google Wave and OpenID'/><link rel='replies' type='application/atom+xml' href='http://santrajan.blogspot.com/feeds/6367237677196670333/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://santrajan.blogspot.com/2009/05/about-google-wave-and-openid.html#comment-form' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35473976/posts/default/6367237677196670333'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35473976/posts/default/6367237677196670333'/><link rel='alternate' type='text/html' href='http://santrajan.blogspot.com/2009/05/about-google-wave-and-openid.html' title='About Google Wave and OpenID'/><author><name>Santosh Rajan</name><uri>http://www.blogger.com/profile/04123305937973885088</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_VGpTmPoWSls/SeqT5VFXULI/AAAAAAAAABM/F2N2YvC0cQc/S220/Me240X160.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35473976.post-4111997053946706439</id><published>2009-05-21T04:10:00.000-07:00</published><updated>2009-05-21T05:47:16.299-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='openid'/><title type='text'>About Google, Yahoo, Facebook and OpenID</title><content type='html'>Facebook's support for OpenID may have some worrying prospects for Google, Yahoo, Microsoft  and other major email providers, who would like to be OpenID providers.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Even though everyone says Facebook is now an OpenID RP, I dont agree with that. What Facebook does is only grock the users browser login status, and logs the user in if he has delegated that provider to Facebook. It does not work in many cases and I am not impressed with their implementation, and have said as much in my &lt;a href="http://santrajan.blogspot.com/2009/05/facebook-support-for-openid-where.html"&gt;earlier posts&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So what is it that is going to be of a concern for Google, Yahoo etc?&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Whether by design or by accident, what really Facebook has done, is to become an OpenID discovery and delegation provider for all its users. ie. Facebook users can now point to their Openid provider and also indicate their prefered provider in case they have more than one. This is significant. Because the primary problem to be solved for OpenID is discovery and delegation, and Facebook does it for its users.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Now all Facebook has to do is "Switch On" OpenID for Facebook Connect and Voila! You have 250 million users ready with single sign on with Facebook Connect! Throw in 250 million verified email addresses for good measure. (I am not sure all these are verified, but I can say they did verify mine).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;If major RP's are not already salivating at the prospects, then they will soon. And this is not really all that bad. If you don't mind Facebook being your centralized mechanism for OpenID discovery and if they are the closest you can get to one, then why not?&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Now you know why Google, Yahoo etc need to be concerned. But there are other options. One is the &lt;a href="http://santrajan.blogspot.com/2009/05/case-for-openemailid.html"&gt;OpenEmailID&lt;/a&gt; i have suggested in an earlier post, where the onus on discovery rests with the RP. An even better Option is the &lt;a href="http://code.google.com/p/webfinger/"&gt;WebFinger&lt;/a&gt; protocol, where the onus on discovery lies with the email provider for email addresses as identities.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Whatever happens I think it is high time Google, Yahoo etc move ahead with providing discovery for their users. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The OpenID community must come to a concrete decision on which way they must go and go after their objective as fast as possible.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35473976-4111997053946706439?l=santrajan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://santrajan.blogspot.com/feeds/4111997053946706439/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://santrajan.blogspot.com/2009/05/about-google-yahoo-facebook-and-openid.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35473976/posts/default/4111997053946706439'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35473976/posts/default/4111997053946706439'/><link rel='alternate' type='text/html' href='http://santrajan.blogspot.com/2009/05/about-google-yahoo-facebook-and-openid.html' title='About Google, Yahoo, Facebook and OpenID'/><author><name>Santosh Rajan</name><uri>http://www.blogger.com/profile/04123305937973885088</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_VGpTmPoWSls/SeqT5VFXULI/AAAAAAAAABM/F2N2YvC0cQc/S220/Me240X160.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35473976.post-6237062553386133321</id><published>2009-05-18T20:05:00.000-07:00</published><updated>2009-05-18T20:40:13.130-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='openid'/><title type='text'>Facebook support for OpenID. Where?</title><content type='html'>I am seeing tweets and blog posts about Facebook support for OpenID. I had already suggested in an earlier post that it is going to be a &lt;a href="http://santrajan.blogspot.com/2009/04/facebook-support-for-openid-farce-or.html"&gt;farce&lt;/a&gt;. And that is what it exactly is.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;You see, I have always maintained that it is impossible for Web site's who base their user identity on email addresses to support OpenID in the current form. And let me list out the problems with the so called Facebook OpenId support.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;You can't log in into Facebook with your OpenID unless you are already logged in to another OpenID provider. So if you fire up your browser and go straight to Facebook, sorry!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;You cannot create a Facebook account with OpenID. You need to create your Facebook account with your email address, and then log in to your account, and then go to settings, and then link your OpenID account.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Ok, so I decided to link my Google Account. I found that I could not link to my Google Account without me handing over all my Google contacts! In other words Google log in was useless for me.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;When I tried to log in with Yahoo and I got the famous Yahoo message &lt;span class="Apple-style-span" style="font-size: small;"&gt;"&lt;/span&gt;&lt;span class="Apple-style-span"  style="  font-weight: bold; line-height: 15px; font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Warning: This website has not confirmed its identity with Yahoo! and might be fraudulent. Do not share any personal information with this website unless you are certain it is legitimate."&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="  font-weight: bold; line-height: 15px; font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="  font-weight: bold; line-height: 15px;font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="line-height: 15px; "&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;And what I find most embarrassing is the so called "Openid evangelists" going "gaga" over this release. Maybe it is "Facebook" so they better say good things, no matter whatever they do.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35473976-6237062553386133321?l=santrajan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://santrajan.blogspot.com/feeds/6237062553386133321/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://santrajan.blogspot.com/2009/05/facebook-support-for-openid-where.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35473976/posts/default/6237062553386133321'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35473976/posts/default/6237062553386133321'/><link rel='alternate' type='text/html' href='http://santrajan.blogspot.com/2009/05/facebook-support-for-openid-where.html' title='Facebook support for OpenID. Where?'/><author><name>Santosh Rajan</name><uri>http://www.blogger.com/profile/04123305937973885088</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_VGpTmPoWSls/SeqT5VFXULI/AAAAAAAAABM/F2N2YvC0cQc/S220/Me240X160.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35473976.post-4817647292926129158</id><published>2009-05-08T09:16:00.000-07:00</published><updated>2009-05-08T10:05:47.088-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='openid'/><title type='text'>Finally, light at the end of the tunnel, for OpenID</title><content type='html'>&lt;div&gt;In the last few days two new pieces of information come as great news for &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;OpenID&lt;/span&gt;. One for the long term, and the other for the short term.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Mozilla &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;Firefox's&lt;/span&gt; demonstration of a &lt;a href="http://ajaxian.com/archives/who-do-i-trust-with-my-identity-erm-how-about-me-openid-weaves-into-the-browser"&gt;single sign on with &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;OpenID&lt;/span&gt;&lt;/a&gt; is testimony to the fact that Browsers will eventually manage the users identity. It may take five years or more to happen.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;What is interesting for &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;OpenID&lt;/span&gt; is that Browsers will not support proprietary "&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;Connect's&lt;/span&gt;". Unless of &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_5"&gt;course&lt;/span&gt; the Connect vendor also happens to own the Browser. I am hearing of Twitter Connect and Google Connect. The only "Connect" that will be common to all browsers will be &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_6"&gt;OpenID&lt;/span&gt;! I think vendors coming out with their own &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_7"&gt;Connect's&lt;/span&gt;, are venturing into something really futile.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The short term good news for &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_8"&gt;OpenID&lt;/span&gt; is the &lt;a href="http://code.google.com/p/webfinger/"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_9"&gt;webfinger&lt;/span&gt; protocol&lt;/a&gt; being developed. This will allow for email discovery, paving the way for emails as &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_10"&gt;OpenID's&lt;/span&gt;. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The onus on discovery lies with the email provider which is only natural, and that is the only way it can work. This won't work if non email providers were &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_11"&gt;OP's&lt;/span&gt;. &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_12"&gt;Atleast&lt;/span&gt; not as equals to the email providers. Non email providers can issue virtual email addresses if they like. But it is not the real thing and they will have to dish out the real email address via &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_13"&gt;SREG&lt;/span&gt; or AX.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;If &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_14"&gt;Facebook&lt;/span&gt; had supported &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_15"&gt;OpenID&lt;/span&gt; as an OP with &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_16"&gt;SREG&lt;/span&gt; support earlier, me as an &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_17"&gt;OpenID&lt;/span&gt; community member would have been hard pressed to support the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_18"&gt;webfinger&lt;/span&gt; protocol. Another way out would have been the centralized discovery mechanism which is not going to happen anytime soon, and &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_19"&gt;Facebook&lt;/span&gt; would have been the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_20"&gt;de&lt;/span&gt; facto centralized mechanism until then!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;To really make &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_21"&gt;OpenID&lt;/span&gt; happen I always &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_22"&gt;believed&lt;/span&gt; we need one of the biggies. &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_23"&gt;Ebay&lt;/span&gt; or Amazon or someone like that, and these guys won't play without an email address. With the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_24"&gt;webfinger&lt;/span&gt; protocol for email addresses they will definitely come on board. So it becomes very important for the community to move the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_25"&gt;webfinger&lt;/span&gt; protocol fast.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;We can now look forward to great times with &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_26"&gt;OpenID&lt;/span&gt;!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35473976-4817647292926129158?l=santrajan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://santrajan.blogspot.com/feeds/4817647292926129158/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://santrajan.blogspot.com/2009/05/finally-light-at-end-of-tunnel-for.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35473976/posts/default/4817647292926129158'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35473976/posts/default/4817647292926129158'/><link rel='alternate' type='text/html' href='http://santrajan.blogspot.com/2009/05/finally-light-at-end-of-tunnel-for.html' title='Finally, light at the end of the tunnel, for OpenID'/><author><name>Santosh Rajan</name><uri>http://www.blogger.com/profile/04123305937973885088</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_VGpTmPoWSls/SeqT5VFXULI/AAAAAAAAABM/F2N2YvC0cQc/S220/Me240X160.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35473976.post-6170499832169471507</id><published>2009-05-03T03:40:00.000-07:00</published><updated>2009-05-03T06:43:16.461-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='openid'/><title type='text'>A Case for OpenEmailID</title><content type='html'>&lt;div&gt;What if Email addresses were your OpenID's, ie. your OpenEmailID's?&lt;/div&gt;&lt;div&gt;1) As a user you don't have to learn anything new. You just continue to use your email addresses to log in anywhere like you almost always did.&lt;/div&gt;&lt;div&gt;2) Web sites can easily integrate OpenEmailID into their existing log in systems. eg. If Facebook were to implement OpenEmailID's there is really nothing much more it needs to do. If the authenticated OpenEmailID is an existing account thats the users account. If it does not exist it is a new account and Facebook can skip the email verification process, an obvious advantage.&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;Considering the above two points OpenEmailID's are really a no brainer.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Now let us see what is needed to implement this. Turns out we don't need anything more than what we already have!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;If a web site requires email address Log in, chances are, 1 out 3 of its users, would be logging in with a Yahoo or Gmail account. These figures are based on &lt;a href="http://fingerprintapp.com/email-client-stats"&gt;email client statistics&lt;/a&gt;.  I know you can argue this figure but it doesn't affect the overall argument.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;When a web site detects a Yahoo or Gmail address it can not only get the user authenticated from that web site (via OpenID directed identity), it will also get a verified email address of the account. Google already supports this and Yahoo will be supporting this very soon.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In effect this is the Users OpenEmailID. So you already have it for one third of the cases. I expect AOL and Microsoft to support this in the near future. In effect this pretty much covers 80% of the email Users.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In the case of companies or individuals running their own email servers, they can very easily implement an OpenID 2.0 provider service on their domain. The software is available free as Open Source. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;And that's not all. We don't even have to wait for Microsoft, AOL and the other companies. If a User does not have a Yahoo or Gmail account he can get an OpenEmailID for free from a number of Providers even now! He can create a Google account with his own Email address. He can create an OpenID account from one of the OpenID providers like myOpenID or MyVidoop. He can actually create an OpenEmailID at any provider who supports OpenID 2.0 and supplies a verified email address.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So if the user does not have a Yahoo or Google account a web site needs to ask if he has an account with any of the above providers. This has to be done once only, and the web site should save his account preference. And the web site should encourage the user to create an account at one of these sites.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;All this can be done very easily, because there is nothing new to implement or invent here. It only requires some concerted effort from the open web community, providers and web sites.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;We can very easily achieve the objective of a single sign on. One email one password. One OpenEmailID!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35473976-6170499832169471507?l=santrajan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://santrajan.blogspot.com/feeds/6170499832169471507/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://santrajan.blogspot.com/2009/05/case-for-openemailid.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35473976/posts/default/6170499832169471507'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35473976/posts/default/6170499832169471507'/><link rel='alternate' type='text/html' href='http://santrajan.blogspot.com/2009/05/case-for-openemailid.html' title='A Case for OpenEmailID'/><author><name>Santosh Rajan</name><uri>http://www.blogger.com/profile/04123305937973885088</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_VGpTmPoWSls/SeqT5VFXULI/AAAAAAAAABM/F2N2YvC0cQc/S220/Me240X160.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35473976.post-2415286298700185317</id><published>2009-04-28T01:22:00.000-07:00</published><updated>2009-04-28T02:52:19.518-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='openid'/><title type='text'>Facebook support for OpenID. Farce or Feign?</title><content type='html'>You want a Facebook Account? No problem. Just sign up with your OpenID. Yes you will be able to do &lt;a href="http://www.insidefacebook.com/2009/04/27/facebook-announces-users-will-soon-be-able-to-login-to-facebook-with-an-openid/"&gt;that in the near future&lt;/a&gt;.&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So you type in your OpenID URL. (If you have a Google account you will have to type https://www.google.com/accounts/o8/id I presume.) Didn't you want to get notified in your email box every time there is some activity from your friends, or other interests? Great! Please get your email address verified as well.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Good now that we have a Facebook account with our OpenID we can sign in to our account, or Facebook connect, with it. Now wait a minute. I can sign in with either my OpenID or Email address it doesnt matter! So what are you going to choose? Your OpenID or Email address to sign in?&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Now the above is for people who have an OpenID, people who are a small minority among a large majority of people who have not even heard of OpenID. The large majority are going to sign up with their email addresses anyway. They are not about to go get themselves an OpenID just to sign up to Facebook.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Is this a farce? Or is it a feigned right hook, before they land the knockout left hook to OpenID?&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Once we have all the OpenID officionadoes and users signed up to facebook with their email addresses how about releasing email addresses with Facebook Connect? BAM! Every RP who requires an email address will adopt Facebook connect before adopting OpenID. Because OpenID has still a long way to go as far as OP SREG support goes. Your NASCAR buttons will become a single Facebook Connect button.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I had wanted Facebook to support OpenID as an OP with SREG Email support in an &lt;a href="http://santrajan.blogspot.com/2009/04/lesson-in-history-for-facebook.html"&gt;earlier post&lt;/a&gt;. These guys dont get it do they? They are virtually sitting on a Gold mine, If only they supported OpenID as an OP. Looks like they are going the &lt;a href="http://santrajan.blogspot.com/2009/04/lesson-in-history-for-facebook.html"&gt;Apple way back in the 80's&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The battle lines are drawn. It is Facebook Vs The Rest. We will see if history repeats itself!&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35473976-2415286298700185317?l=santrajan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://santrajan.blogspot.com/feeds/2415286298700185317/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://santrajan.blogspot.com/2009/04/facebook-support-for-openid-farce-or.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35473976/posts/default/2415286298700185317'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35473976/posts/default/2415286298700185317'/><link rel='alternate' type='text/html' href='http://santrajan.blogspot.com/2009/04/facebook-support-for-openid-farce-or.html' title='Facebook support for OpenID. Farce or Feign?'/><author><name>Santosh Rajan</name><uri>http://www.blogger.com/profile/04123305937973885088</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_VGpTmPoWSls/SeqT5VFXULI/AAAAAAAAABM/F2N2YvC0cQc/S220/Me240X160.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35473976.post-5255417964740693538</id><published>2009-04-23T00:02:00.001-07:00</published><updated>2009-04-23T00:08:34.539-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='openid'/><category scheme='http://www.blogger.com/atom/ns#' term='Javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='JX'/><category scheme='http://www.blogger.com/atom/ns#' term='jQuery'/><title type='text'>OpenID Login Box user Interface released</title><content type='html'>I have released an OpenID Login box user interface for OpenID. It has a single button, drop down list of OpenID or non OpenID providers, and popup authentication. You can customize the login box to your requirements. You can view and download it by going to the link below. License MIT, GPL.&lt;div&gt;&lt;a href="http://openid.myofiz.com/"&gt;http://openid.myofiz.com&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&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/35473976-5255417964740693538?l=santrajan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://santrajan.blogspot.com/feeds/5255417964740693538/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://santrajan.blogspot.com/2009/04/openid-login-box-user-interface.html#comment-form' title='18 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35473976/posts/default/5255417964740693538'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35473976/posts/default/5255417964740693538'/><link rel='alternate' type='text/html' href='http://santrajan.blogspot.com/2009/04/openid-login-box-user-interface.html' title='OpenID Login Box user Interface released'/><author><name>Santosh Rajan</name><uri>http://www.blogger.com/profile/04123305937973885088</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_VGpTmPoWSls/SeqT5VFXULI/AAAAAAAAABM/F2N2YvC0cQc/S220/Me240X160.jpg'/></author><thr:total>18</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35473976.post-2193605374962187921</id><published>2009-04-15T02:19:00.000-07:00</published><updated>2009-04-15T08:34:58.698-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='openid'/><title type='text'>A lesson from history for Facebook</title><content type='html'>Back in the mid 80's Apple launched their now popular Apple Mac with the Mac OS. The Mac OS was the first GUI based OS on a personal computer. All Microsoft had was the rickety &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;MSDOS&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;. Microsoft was caught napping. It took Microsoft 10 years (windows 95) to come out with something equivalent to the Mac OS! Their earlier attempts, windows 3.0 and 3.1 being failures.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Working in favor of Microsoft was the fact that &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;MSDOS&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; was open, and could be used by any hardware vendor, while the Mac OS used the &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_2"&gt;proprietary&lt;/span&gt; Apple hardware. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Apple had a choice to make. Open up Mac OS to all hardware vendors or stay &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_3"&gt;proprietary&lt;/span&gt;. They chose to stay &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_4"&gt;proprietary&lt;/span&gt;, keeping the price of a Mac higher than a equivalent PC. Apple could have really trashed Microsoft if they had opened up Mac OS to the hardware vendors back then.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;By the late 80's Apple was inching closer to &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_5"&gt;bankruptcy&lt;/span&gt;, while William Gates was laughing all the way to the bank!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_6"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;Facebook&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; is pretty much faced with the same situation as Apple back then, as far as their &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_7"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;Facebook&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; Connect is concerned. They can choose to Open it up by supporting &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_8"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;OpenID&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; or stay &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_9"&gt;&lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_5"&gt;proprietary&lt;/span&gt;&lt;/span&gt;. Only this time they have a bunch of contenders to deal with instead of just Microsoft. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_7"&gt;Of cource&lt;/span&gt; the circumstances for &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_8"&gt;Facebook&lt;/span&gt; are different today. But the underlying strategic mistake made by Apple cannot be missed. I hope &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_13"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_8"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_9"&gt;Facebook&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; learns from the past, and chooses to support &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_14"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_9"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_10"&gt;OpenID&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; as an OP, before it is too late.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35473976-2193605374962187921?l=santrajan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://santrajan.blogspot.com/feeds/2193605374962187921/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://santrajan.blogspot.com/2009/04/lesson-in-history-for-facebook.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35473976/posts/default/2193605374962187921'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35473976/posts/default/2193605374962187921'/><link rel='alternate' type='text/html' href='http://santrajan.blogspot.com/2009/04/lesson-in-history-for-facebook.html' title='A lesson from history for Facebook'/><author><name>Santosh Rajan</name><uri>http://www.blogger.com/profile/04123305937973885088</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_VGpTmPoWSls/SeqT5VFXULI/AAAAAAAAABM/F2N2YvC0cQc/S220/Me240X160.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35473976.post-355112370489589579</id><published>2009-04-07T18:39:00.000-07:00</published><updated>2009-04-07T18:50:10.563-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='openid'/><title type='text'>Need of the Hour for OpenID</title><content type='html'>&lt;span class="Apple-style-span"   style="  ;font-family:verdana;font-size:13px;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;Its been 2 weeks now that I have been involved with using OpenID. It all began when I decided to try out OpenID with a &lt;/span&gt;&lt;a href="http://myfeeds.myofiz.com/"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;small application&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;. Thats when it hit me, that OpenID is not going to "happen" without a verified email address. You can read the rest of it in my last 4 posts. I really want this to happen. &lt;br /&gt;&lt;br /&gt;The remarkable thing about OpenID is that it has all the major players (Google, Yahoo, Facebook etc etc) on their board. I havent seen anything like this happen to a standards body ever. (Correct me if I am wrong). Usually what happens to any web standard is that a rival standard will pop up, splitting the major players more or less equally among them.  This is a testimony to the great work done by the pioneers of OpenID, though things have not yet panned out like they would have wished. &lt;br /&gt;&lt;br /&gt;It is increasingly clear to me, that the solution involves a centralized distribution mechanism which I alluded to in my "&lt;/span&gt;&lt;a href="http://www.nabble.com/My-Suggestion-for-OpenID-2.1-td22822935.html"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;Suggestions for OpenID 2.1&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;". Something in the lines of "&lt;/span&gt;&lt;a href="http://sites.google.com/site/oauthgoog/Home/pds"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;Personal Discovery Service&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;". &lt;br /&gt;&lt;br /&gt;This can be possible only if all the major players come to an agreement on this. OpenID is in a perfect position to make this happen. This is easier said than done though. All the major players have their own vested interests. &lt;br /&gt;&lt;br /&gt;To begin with, the solution must only consider sharing of basic profile data. Bringing in other social data will only magnify the disagreements. And in any case as far as Openid is concerned its interests should only be in the basic profile. &lt;br /&gt;&lt;br /&gt;If the major players cant come together on this, then the only way out will be to leave out the Openid Providers from the equation and go straight for the Relying Party's. This is not too difficult a problem to solve. Definitely some food for thought. &lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35473976-355112370489589579?l=santrajan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://santrajan.blogspot.com/feeds/355112370489589579/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://santrajan.blogspot.com/2009/04/need-of-hour-for-openid_07.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35473976/posts/default/355112370489589579'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35473976/posts/default/355112370489589579'/><link rel='alternate' type='text/html' href='http://santrajan.blogspot.com/2009/04/need-of-hour-for-openid_07.html' title='Need of the Hour for OpenID'/><author><name>Santosh Rajan</name><uri>http://www.blogger.com/profile/04123305937973885088</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_VGpTmPoWSls/SeqT5VFXULI/AAAAAAAAABM/F2N2YvC0cQc/S220/Me240X160.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35473976.post-5655480243490781689</id><published>2009-04-07T11:29:00.000-07:00</published><updated>2009-04-07T18:50:35.198-07:00</updated><title type='text'>Accidentaly deleted some posts</title><content type='html'>&lt;span class="Apple-style-span" style="font-size: medium;"&gt;Sorry to those who commented on five of my posts, which i accidentaly deleted while changing labels. I managed to recover four of them. I will try to rewrite the one i could not recover.&lt;/span&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;I think blogger must remove 'Delete' from the drop down which along with Labels, publish etc. Or for delete they must reconfirm, because you cannot recover a deleted post. I was fortunate to have most of them in my mailbox.&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35473976-5655480243490781689?l=santrajan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://santrajan.blogspot.com/feeds/5655480243490781689/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://santrajan.blogspot.com/2009/04/accidentaly-deleted-some-posts.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35473976/posts/default/5655480243490781689'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35473976/posts/default/5655480243490781689'/><link rel='alternate' type='text/html' href='http://santrajan.blogspot.com/2009/04/accidentaly-deleted-some-posts.html' title='Accidentaly deleted some posts'/><author><name>Santosh Rajan</name><uri>http://www.blogger.com/profile/04123305937973885088</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_VGpTmPoWSls/SeqT5VFXULI/AAAAAAAAABM/F2N2YvC0cQc/S220/Me240X160.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35473976.post-7022656828096222260</id><published>2009-04-07T11:26:00.000-07:00</published><updated>2009-04-07T11:36:21.559-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='openid'/><title type='text'>About Facebook, MySpace and OpenID</title><content type='html'>&lt;span class="Apple-style-span" style="font-family: verdana; font-size: 13px; "&gt;MySpace recently announced there support for OpenID. The idea here is that MySpace users will be able to log in to third party sites with their MySpace Id's. MySpace users needn't get too exited about it too soon. &lt;br /&gt;&lt;br /&gt;Consider this. A MySpace user would like to log in to her favorite shopping site with her MySpace Account. The shopping site is unlikely to support MySpace Logins. The simple reason being that shopping sites need the email addresses of their authenticated users for various reasons (communicating orders, delivery, new stock etc etc). It doesnt make sence to the shopping site to authenticate using MySpace (An extra step) and then run the user through another email verification process. This will also be true for many other web sites that require their users to login. &lt;br /&gt;&lt;br /&gt;However  MySpace could have made the users email available to the shopping site (Ofcource with the users consent only) via a provision in the OpenID specifications called SREG. So then why didnt MySpace choose to support SREG? &lt;br /&gt;&lt;br /&gt;This is not a problem for MySpace alone. When Facebook decides to support OpenID it will be faced with the same dilemma. It is really a frightening thought for social networking sites to hand over their users email address to a third party. For social networking sites keeping the users bound their network is of primary importance. &lt;br /&gt;&lt;br /&gt;However an equally frightening possibility for social networking sites is to see their users start using Google accounts and Yahoo accounts to log in into third party sites! They could start loosing users in that case too. &lt;br /&gt;&lt;br /&gt;The jury is out on what these guys should do. &lt;br /&gt;&lt;br /&gt;But I am clear on what MySpace should have done. Facebook being the no 1 social networking site can wait this one out a bit more. However MySpace should really have capitalized on this opportunity. Supported SREG and tried to rope in third party sites to support MySpace logins, and tried to build a small advantage over Facebook on this account. &lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35473976-7022656828096222260?l=santrajan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://santrajan.blogspot.com/feeds/7022656828096222260/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://santrajan.blogspot.com/2009/04/about-facebook-myspace-and-openid_07.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35473976/posts/default/7022656828096222260'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35473976/posts/default/7022656828096222260'/><link rel='alternate' type='text/html' href='http://santrajan.blogspot.com/2009/04/about-facebook-myspace-and-openid_07.html' title='About Facebook, MySpace and OpenID'/><author><name>Santosh Rajan</name><uri>http://www.blogger.com/profile/04123305937973885088</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_VGpTmPoWSls/SeqT5VFXULI/AAAAAAAAABM/F2N2YvC0cQc/S220/Me240X160.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35473976.post-7012743171817932849</id><published>2009-04-07T11:21:00.000-07:00</published><updated>2009-04-07T11:36:21.559-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='openid'/><title type='text'>My 2 Cents to the OpenID Foundation</title><content type='html'>&lt;span class="Apple-style-span" style="font-family: verdana; font-size: 13px; "&gt;After my last blog post about OpenID i spent some time on the OpenID forums to see what was going on. The impression I gathered was that there were some genuine efforts to recognize emails as valid OpenID's in the upcoming OpenID 2.1 specifications. Is it a case of too little too late? Time will tell. &lt;br /&gt;&lt;br /&gt;The problem is that emails were never recognized as OpenID's right from the beginning. And that was the kiss of death for OpenID. It is beyond me, living in a world were practically every one uses an email address to log in almost anywhere, a group of well meaning intelligent people can completely miss its importance. Did they think the concept of a url as an identity could be showed down the whole worlds throat? &lt;br /&gt;&lt;br /&gt;So I rolled up my sleeves and went to work on this one, and I posted my solution on the Openid forum. The jist of what I had to say was, "The user MUST be able to authenticate himself with OpenID using his email address if he so chooses to". &lt;br /&gt;&lt;br /&gt;For those of you who are technically oriented you can &lt;a href="http://www.nabble.com/My-Suggestion-for-OpenID-2.1-td22822935.html" target="_top" style="font-size: 1em; "&gt;see my solution suggested to OpenID foundation here.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;As a side note myspace has come out with there own version of OpenID support, which is not compatible with the OpenID specification. Another example of vested interests tearing apart the concept of OpenID. I think myspace has really shot itself in its foot this time. They really should have supported directed identity in conformance to OpenID 2.0 and SREG 1.0. They are really on there way to "nospace". &lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35473976-7012743171817932849?l=santrajan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://santrajan.blogspot.com/feeds/7012743171817932849/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://santrajan.blogspot.com/2009/04/my-2-cents-to-openid-foundation_07.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35473976/posts/default/7012743171817932849'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35473976/posts/default/7012743171817932849'/><link rel='alternate' type='text/html' href='http://santrajan.blogspot.com/2009/04/my-2-cents-to-openid-foundation_07.html' title='My 2 Cents to the OpenID Foundation'/><author><name>Santosh Rajan</name><uri>http://www.blogger.com/profile/04123305937973885088</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_VGpTmPoWSls/SeqT5VFXULI/AAAAAAAAABM/F2N2YvC0cQc/S220/Me240X160.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35473976.post-129463456456389312</id><published>2009-04-07T11:19:00.000-07:00</published><updated>2009-04-07T11:36:21.559-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='openid'/><title type='text'>The death of OpenID</title><content type='html'>&lt;span class="Apple-style-span" style="font-family: verdana; font-size: 13px; "&gt;&lt;br /&gt;Or atleast the death of open id as we know it.  There is an interesting battle on between the big players of the web, Google, Yahoo, Microsoft, Facebook and what I call the OpenID wannabees (OpenID service providers like myopenid.com, myid.net, verisign etc). &lt;br /&gt;&lt;br /&gt;Lets say you have an email address, and you want to login into any site with it. If every site were to support logins via OpenID 2.0, you could do exactly that. You wouldnt need an OpenID in that case. All you need is your email address! &lt;br /&gt;&lt;br /&gt;Let me show you how it is done with a live example. Go to the link below. Hit on the login button. See the Google Login page. Dont Login. Hit your back button twice and return to this page. &lt;br /&gt;&lt;a href="http://myfeeds.myofiz.com/" target="_top" rel="nofollow" style="font-size: 1em; "&gt;http://myfeeds.myofiz.com&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;On the Google page you can login with your google account. But thats not all. If you noticed, you can also create a Google Account if you dont have one, with your own email address, on that very same page. In effect anyone can login into this site with his own email address (which is verified by Google), which need not be a Google email address, it could be any other email address! &lt;br /&gt;&lt;br /&gt;This is all done with OpenID 2.0 without the user ever knowing what his OpenID actually is. He only needs to know his email address. In other words your email address is your OpenID! &lt;br /&gt;&lt;br /&gt;Now the site above was developed by me, and why dont I support login via OpenID? Because I want only people with verified email addresses to log in. With OpenID I am not guaranteed to get a verified email address, I get just an OpenID that does not mean anything for me. &lt;br /&gt;&lt;br /&gt;Now is this the future of Logins into web site. You bet! If Facebook and yahoo are to support this, the same same way like Google, I think all web sites will adopt OpenID login. If they dont, slowly Google Account will become the defacto logging method for every site. &lt;br /&gt;&lt;br /&gt;Now thats what the battle is all about. Web sites are not sure which way to go. And the big players are not sure either. That is why the hesitancy by Facebook, Yahoo and Microsoft. &lt;br /&gt;&lt;br /&gt;In the end given the choice between logging in, with an OpenId or email address, I bet the users are going to use their email addresses. And indeed that will the the death of OpenID as we know it! &lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35473976-129463456456389312?l=santrajan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://santrajan.blogspot.com/feeds/129463456456389312/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://santrajan.blogspot.com/2009/04/death-of-openid.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35473976/posts/default/129463456456389312'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35473976/posts/default/129463456456389312'/><link rel='alternate' type='text/html' href='http://santrajan.blogspot.com/2009/04/death-of-openid.html' title='The death of OpenID'/><author><name>Santosh Rajan</name><uri>http://www.blogger.com/profile/04123305937973885088</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_VGpTmPoWSls/SeqT5VFXULI/AAAAAAAAABM/F2N2YvC0cQc/S220/Me240X160.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35473976.post-752437076187235039</id><published>2008-11-06T05:30:00.000-08:00</published><updated>2009-04-06T07:58:35.581-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='Ajax'/><category scheme='http://www.blogger.com/atom/ns#' term='JX'/><category scheme='http://www.blogger.com/atom/ns#' term='jQuery'/><title type='text'>JX 0.3 beta released</title><content type='html'>I have released JX 0.3 beta &lt;a href="http://jx.myofiz.com/"&gt;http://jx.myofiz.com/&lt;/a&gt;&lt;br /&gt;&lt;div&gt;It has a quick start tutorial, examples, download and documentation.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35473976-752437076187235039?l=santrajan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://santrajan.blogspot.com/feeds/752437076187235039/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://santrajan.blogspot.com/2008/11/jx-03-beta-released.html#comment-form' title='10 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35473976/posts/default/752437076187235039'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35473976/posts/default/752437076187235039'/><link rel='alternate' type='text/html' href='http://santrajan.blogspot.com/2008/11/jx-03-beta-released.html' title='JX 0.3 beta released'/><author><name>Santosh Rajan</name><uri>http://www.blogger.com/profile/04123305937973885088</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_VGpTmPoWSls/SeqT5VFXULI/AAAAAAAAABM/F2N2YvC0cQc/S220/Me240X160.jpg'/></author><thr:total>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35473976.post-941426111488334826</id><published>2008-11-03T01:07:00.000-08:00</published><updated>2009-04-06T07:58:35.581-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='Ajax'/><category scheme='http://www.blogger.com/atom/ns#' term='JX'/><category scheme='http://www.blogger.com/atom/ns#' term='jQuery'/><title type='text'>A Feed Viewer application developed using JX, jQuery Object oriented extension</title><content type='html'>I have developed a example feed viewer application using JX. You have to read my previous posts if you havent. The complete application is done with just one config option to the viewport. You can see the &lt;a href="http://jx.myofiz.com/feedreader.html"&gt;demo here.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;For the feed viewer application I had to make a few additions to the JX extension.&lt;br /&gt;&lt;br /&gt;Added JX.Panel class which has a jxtype 'panel'. It requires two config objects title: and body:. In the demo the feed list and feed summary boxes are JX.Panels.&lt;br /&gt;&lt;br /&gt;Also added some methods to JX.Component.&lt;br /&gt;You can set config option scopeThis: true, and all the handler functions will be called in the this scope of the component.&lt;br /&gt;Added function setLoadIndicator(imagepath, width, height) to component.&lt;br /&gt;&lt;br /&gt;I overrode the jQuery trigger function for containers, so that custom events are propagated to all its children. eg. in the demo application the feed links triggers the custom event 'loadfeed' on the viewport, and the feed summary panel binds to the loadfeed event. var viewport is accessible everywhere in the config.&lt;br /&gt;&lt;br /&gt;Look at the source code of feedreader.html to see how it is implemented.&lt;br /&gt;&lt;br /&gt;You can download the latest jx.js &lt;a href="http://jx.myofiz.com/jx.js"&gt;here.&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35473976-941426111488334826?l=santrajan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://santrajan.blogspot.com/feeds/941426111488334826/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://santrajan.blogspot.com/2008/11/feed-viewer-application-developed-using.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35473976/posts/default/941426111488334826'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35473976/posts/default/941426111488334826'/><link rel='alternate' type='text/html' href='http://santrajan.blogspot.com/2008/11/feed-viewer-application-developed-using.html' title='A Feed Viewer application developed using JX, jQuery Object oriented extension'/><author><name>Santosh Rajan</name><uri>http://www.blogger.com/profile/04123305937973885088</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_VGpTmPoWSls/SeqT5VFXULI/AAAAAAAAABM/F2N2YvC0cQc/S220/Me240X160.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35473976.post-6896922462849862366</id><published>2008-10-31T04:29:00.000-07:00</published><updated>2009-04-06T07:58:35.582-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='Ajax'/><category scheme='http://www.blogger.com/atom/ns#' term='JX'/><category scheme='http://www.blogger.com/atom/ns#' term='jQuery'/><title type='text'>Viewport, Column Container and nested layouts</title><content type='html'>I have added a viewport class and a column container class to JX. Please read my earlier posts if you havent.&lt;br /&gt;&lt;br /&gt;The viewport takes over the document body element. So you can have only one viewport instance in your application. If you have content in your body element the viewport will hide it. So it is unobtrusive also. Clients with no javascript will see your content. Viewport extends JX.Container so lays out its components vertically.&lt;br /&gt;&lt;br /&gt;The column container works similar to the container in my previous post except that it lays out its components horizontally. You can set fitWidth: true to one of its components and the component width will expand to the remaining width of the parent minus its sibling widths.&lt;br /&gt;&lt;br /&gt;You can nest the containers within each other and create complex layouts. I will create a a border layout using the viewport and column container. The border layout will resize accordingly when you resize your browser. You can see the demo &lt;a href="http://jx.myofiz.com/jxviewport.html"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Here is the code to create the border layout.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;$(document).ready(function() {&lt;br /&gt;    var viewport = new JX.Viewport({&lt;br /&gt;        css: {padding: '0px', margin: '0px'},&lt;br /&gt;        items: [{&lt;br /&gt;            height: 50,&lt;br /&gt;            css: {backgroundColor: '#aaaaaa', padding: '20px'},&lt;br /&gt;            text: $('#north').text(),&lt;br /&gt;            fitWidth: true&lt;br /&gt;        },{&lt;br /&gt;            jxtype: 'columncontainer',&lt;br /&gt;            fitHeight: true,&lt;br /&gt;            items: [{&lt;br /&gt;                text: $('#east').text(),&lt;br /&gt;                width: 150,&lt;br /&gt;                css: {backgroundColor: '#cccccc', padding: '20px'},&lt;br /&gt;                fitHeight: true&lt;br /&gt;            },{&lt;br /&gt;                text: $('#center').text(),&lt;br /&gt;                fitWidth: true,&lt;br /&gt;                css: {backgroundColor: '#eeeeee', padding: '20px', overflow: 'hidden'},&lt;br /&gt;                fitHeight: true&lt;br /&gt;            },{&lt;br /&gt;                text: $('#west').text(),&lt;br /&gt;                width: 150,&lt;br /&gt;                css: {backgroundColor: '#cccccc', padding: '20px'},&lt;br /&gt;                fitHeight: true&lt;br /&gt;            }]&lt;br /&gt;        },{&lt;br /&gt;            height: 50,&lt;br /&gt;            css: {backgroundColor: '#aaaaaa', padding: '20px'},&lt;br /&gt;            text: $('#south').text(),&lt;br /&gt;            fitWidth: true&lt;br /&gt;        }]&lt;br /&gt;    });&lt;br /&gt;});                               &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;I have added a new jxtype 'columncontainer' for column containers. Other jxtypes i have added are 'container' and 'component'. You need not specify jxtype if you are creating the component with 'new'. Also default is component ('div').&lt;br /&gt;&lt;br /&gt;You can download the latest JX source code &lt;a href="http://jx.myofiz.com/jx.js"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35473976-6896922462849862366?l=santrajan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://santrajan.blogspot.com/feeds/6896922462849862366/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://santrajan.blogspot.com/2008/10/viewport-column-container-and-nested.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35473976/posts/default/6896922462849862366'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35473976/posts/default/6896922462849862366'/><link rel='alternate' type='text/html' href='http://santrajan.blogspot.com/2008/10/viewport-column-container-and-nested.html' title='Viewport, Column Container and nested layouts'/><author><name>Santosh Rajan</name><uri>http://www.blogger.com/profile/04123305937973885088</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_VGpTmPoWSls/SeqT5VFXULI/AAAAAAAAABM/F2N2YvC0cQc/S220/Me240X160.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35473976.post-1280145504542241772</id><published>2008-10-30T05:44:00.000-07:00</published><updated>2009-04-06T07:58:35.582-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='Ajax'/><category scheme='http://www.blogger.com/atom/ns#' term='JX'/><category scheme='http://www.blogger.com/atom/ns#' term='jQuery'/><title type='text'>A jQuery Container Class</title><content type='html'>Further to my previous post I have created a container class called JX.Container. The container lays out components vertically just like you would if you append. However it has a few extra features.&lt;br /&gt;In the config options it has a 'items' config which is an array of components or component configs.&lt;br /&gt;You can set 'fitWidth' to each component and the component expand to the width of the container. You have to also call doLayout() on the container, this is required because of 'fitWidth'.&lt;br /&gt;We will use the container class to create a login box. Here is the code.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;$(document).ready(function() {&lt;br /&gt;    var loginbox = new JX.Container({&lt;br /&gt;        width: 200,&lt;br /&gt;        css:{&lt;br /&gt;            background: 'lightcyan',&lt;br /&gt;            border: '1px solid darkblue',&lt;br /&gt;            padding: '20px',&lt;br /&gt;            fontSize: '12px',&lt;br /&gt;            fontFamily: 'Arial, Helvetica',&lt;br /&gt;            fontWeight: 'bold',&lt;br /&gt;            color: 'darkblue'&lt;br /&gt;        },&lt;br /&gt;        appendTo: document.body,&lt;br /&gt;        items: [{&lt;br /&gt;            text: 'Enter your User Name'&lt;br /&gt;        },{&lt;br /&gt;            jxtype: 'input',&lt;br /&gt;            attr: {type: 'text'},&lt;br /&gt;            fitWidth: true&lt;br /&gt;        },{&lt;br /&gt;            text: 'Enter your Password'&lt;br /&gt;        },{&lt;br /&gt;            jxtype: 'input',&lt;br /&gt;            attr: {type: 'password'},&lt;br /&gt;            fitWidth: true&lt;br /&gt;        },{&lt;br /&gt;            jxtype: 'input',&lt;br /&gt;            attr: {type: 'button', value: 'Login'}&lt;br /&gt;        }]&lt;br /&gt;    });&lt;br /&gt;    loginbox.doLayout();&lt;br /&gt;});                               &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Here you can see the &lt;a href="http://www.myofiz.com/jx/jxcontainer.html"&gt;demo&lt;/a&gt;. &lt;br /&gt;You will need the jx.js file to use this container. You can download it &lt;a href="http://www.myofiz.com/jx/jx.js"&gt;here&lt;/a&gt;.&lt;br /&gt;You can also set fitHeight: true to a component. What this does is that the component will take up the height of the container minus the height of the other items. So you you can set fitHeight to only one of the items. I will show fitHeight in another post. I intend to do a columncontainer and a viewport, and by nesting these containers you can create complex layouts.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35473976-1280145504542241772?l=santrajan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://santrajan.blogspot.com/feeds/1280145504542241772/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://santrajan.blogspot.com/2008/10/jquery-container-class.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35473976/posts/default/1280145504542241772'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35473976/posts/default/1280145504542241772'/><link rel='alternate' type='text/html' href='http://santrajan.blogspot.com/2008/10/jquery-container-class.html' title='A jQuery Container Class'/><author><name>Santosh Rajan</name><uri>http://www.blogger.com/profile/04123305937973885088</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_VGpTmPoWSls/SeqT5VFXULI/AAAAAAAAABM/F2N2YvC0cQc/S220/Me240X160.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35473976.post-5294659038251525156</id><published>2008-10-29T03:25:00.000-07:00</published><updated>2009-04-06T07:58:35.582-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='Ajax'/><category scheme='http://www.blogger.com/atom/ns#' term='JX'/><category scheme='http://www.blogger.com/atom/ns#' term='jQuery'/><title type='text'>Configurable jQuery Components</title><content type='html'>I wanted to create jQuery components easily by passing in config options, that would also take in jQuery method parameters in the config option. You have to read my previous post to understand what is going on here. First I will show you how it works. In the code below I create a button object by passing config options to JX.Component.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;$(document).ready(function() {&lt;br /&gt;    var mybutton = new JX.Component({&lt;br /&gt;        jxtype: 'div',&lt;br /&gt;        text: 'Click Me',&lt;br /&gt;        width: 100,&lt;br /&gt;        css:{background: 'darkblue', color: 'lightblue', textAlign: 'center'},&lt;br /&gt;        appendTo: document.body,&lt;br /&gt;        click: function() {&lt;br /&gt;            alert("You clicked a button with text: " + $(this).text());&lt;br /&gt;        },&lt;br /&gt;        hover: [&lt;br /&gt;            function() {&lt;br /&gt;                $(this).css({cursor: 'pointer', opacity: '0.5'})&lt;br /&gt;            },&lt;br /&gt;            function() {&lt;br /&gt;                $(this).css({cursor: 'default', opacity: '1'})&lt;br /&gt;            }&lt;br /&gt;        ]&lt;br /&gt;    });&lt;br /&gt;});                               &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;You will notice that all config options except jxtype are actually jQuery method names whose values are the parameters to the jQuery method. jxtype tells the component what type of dom element to create. If you dont specify jxtype default is 'div'. Also note the the 'hover' config option takes in an array as its value. So where ever the corresponding jQuery method takes more than one argument you must use an array here.&lt;br /&gt;Here is the code for the new JX.Component.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;JX.Component = function() {&lt;br /&gt;    if (JX.isObject(arguments[0])) {&lt;br /&gt;        var config = arguments[0];&lt;br /&gt;        config.jxtype = config.jxtype ? config.jxtype : 'div'; // default type is div&lt;br /&gt;        JX.Component.superclass.init.call(this, document.createElement(config.jxtype));&lt;br /&gt;        this.applyConfig(config);&lt;br /&gt;    } else&lt;br /&gt;        JX.Component.superclass.init.apply(this, arguments);&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;JX.extend(JX.Component, jQuery, {&lt;br /&gt;    applyConfig: function(config) {&lt;br /&gt;        for (var key in config) {&lt;br /&gt;            var a = JX.isArray(config[key]) ? config[key] : [config[key]];&lt;br /&gt;            eval('this.' + key + '.apply(this, a)');&lt;br /&gt;        };&lt;br /&gt;    },&lt;br /&gt;    jxtype: function(jxtype) { &lt;br /&gt;        this._jxtype = jxtype;&lt;br /&gt;    }&lt;br /&gt;});&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;To make reusable components you can create a factory function like this.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;function buttonFactory(config) {&lt;br /&gt; var buttonconfig = jQuery.extend({&lt;br /&gt;        jxtype: 'div',&lt;br /&gt;        width: 100,&lt;br /&gt;        appendTo: document.body,&lt;br /&gt;        click: function() {&lt;br /&gt;            alert("You clicked a button with text: " + $(this).text());&lt;br /&gt;        },&lt;br /&gt;        hover: [&lt;br /&gt;            function() {&lt;br /&gt;                $(this).css({cursor: 'pointer', opacity: '0.5'})&lt;br /&gt;            },&lt;br /&gt;            function() {&lt;br /&gt;                $(this).css({cursor: 'default', opacity: '1'})&lt;br /&gt;            }&lt;br /&gt;        ]&lt;br /&gt; }, config);&lt;br /&gt; return new JX.Component(buttonconfig);&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;$(document).ready(function() {&lt;br /&gt;    var mybutton = buttonFactory({&lt;br /&gt;        text: 'Click Me',&lt;br /&gt;        css:{background: 'darkblue', color: 'lightblue', textAlign: 'center'},&lt;br /&gt;    });&lt;br /&gt;});&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;You can download the source code for JX &lt;a href="http://www.myofiz.com/jx/jx.js"&gt;here&lt;/a&gt;. License is MIT, GPL.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35473976-5294659038251525156?l=santrajan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://santrajan.blogspot.com/feeds/5294659038251525156/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://santrajan.blogspot.com/2008/10/configurable-jquery-components.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35473976/posts/default/5294659038251525156'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35473976/posts/default/5294659038251525156'/><link rel='alternate' type='text/html' href='http://santrajan.blogspot.com/2008/10/configurable-jquery-components.html' title='Configurable jQuery Components'/><author><name>Santosh Rajan</name><uri>http://www.blogger.com/profile/04123305937973885088</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_VGpTmPoWSls/SeqT5VFXULI/AAAAAAAAABM/F2N2YvC0cQc/S220/Me240X160.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35473976.post-7488192062705505080</id><published>2008-10-27T22:58:00.000-07:00</published><updated>2009-04-06T07:58:35.582-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='Ajax'/><category scheme='http://www.blogger.com/atom/ns#' term='JX'/><category scheme='http://www.blogger.com/atom/ns#' term='jQuery'/><title type='text'>Extending jQuery the Object Oriented Way</title><content type='html'>Though I have used quite a few Ajax libraries in the last couple of years, nothing has impressed me like jQuery. However jQuery is not object oriented in the traditional sence. You cannot instantiate a jQuery object like this&lt;br /&gt;&lt;pre&gt;var myobject = new jQuery();&lt;/pre&gt;&lt;br /&gt;or extend jQuery like this.&lt;br /&gt;&lt;pre&gt;extend(MyClass, jQuery);&lt;/pre&gt;&lt;br /&gt;So what if you could object orientify jQuery? Imagine all your classes/widgets as extensions of jQuery. You could call all the jQuery functions from within your own 'this' like&lt;br /&gt;&lt;pre&gt;this.addClass('classname');&lt;br /&gt;this.click(function() {alert('you clicked me')});&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;But then you cannot extend jQuery because it does not have a constructor! It is itself an object. But thats where javascript comes to your rescue. Javascript does not differentiate an object from a class. And the jQuery object has some features that will come as a help. It has a prototype object and though it does not have a constructor it does have an init method. Some of you are already figuring where I am headed. But before we go ahead we need a function that will do a proper object oriented extend. And I will also add a namespace and call it "JX" for jQuery Extend. Here is the code.&lt;br /&gt;&lt;pre&gt;var JX = {&lt;br /&gt;    extend: function(bc, sc, o) {&lt;br /&gt;        var f = function() {};&lt;br /&gt;        f.prototype = sc.prototype;&lt;br /&gt;        bc.prototype = new f();&lt;br /&gt;        bc.prototype.constructor = bc;&lt;br /&gt;        bc.superclass = sc.prototype;&lt;br /&gt;        for (var m in o)&lt;br /&gt;            bc.prototype[m] = o[m];&lt;br /&gt;    }&lt;br /&gt;};&lt;/pre&gt;&lt;br /&gt;JX.extend() is a function that will take in three parameters, a baseclass constructor, a superclass constructor and an object of functions to override any superclass methods. Now let us use this method to create a new Class called JX.Component that will be a base class for all our widgets.&lt;br /&gt;&lt;pre&gt;JX.Component = function() {&lt;br /&gt;  JX.Component.superclass.init.apply(this, arguments);&lt;br /&gt;};&lt;br /&gt;JX.extend(JX.Component, jQuery, {});&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;The arguments passed can be any argument you pass into the jQuery $() function. Voila! You have a class that extends jQuery!&lt;br /&gt;&lt;div&gt;Now try this.&lt;/div&gt;&lt;br /&gt;&lt;pre&gt;$(document).ready(function() {&lt;br /&gt;    var mydiv = new JX.Component(document.createElement('div'));&lt;br /&gt;    mydiv.text("Hello World").click(function(){alert("You Clicked Me!")});&lt;br /&gt;    mydiv.appendTo(document.body);&lt;br /&gt;);&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Now let us get down to something more usefull. Let us extend JX.Component to make a button class.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;JX.Button = function() {&lt;br /&gt;    JX.Button.superclass.constructor.apply(this, arguments);&lt;br /&gt;    this.initialize();&lt;br /&gt;};&lt;br /&gt;JX.extend(JX.Button, JX.Component, {&lt;br /&gt;    initialize: function() {&lt;br /&gt;        var component = this;&lt;br /&gt;        this.hover(&lt;br /&gt;            function() {&lt;br /&gt;                component.css({cursor: 'pointer', opacity: '0.5'})&lt;br /&gt;            },&lt;br /&gt;            function() {&lt;br /&gt;                component.css({cursor: 'default', opacity: '1'})&lt;br /&gt;            }&lt;br /&gt;        );&lt;br /&gt;        this.click(function() {&lt;br /&gt;            alert("You clicked a button with text: " +component.text());&lt;br /&gt;        });&lt;br /&gt;    }&lt;br /&gt;});&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Now try your button class with this code.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;$(document).ready(function() {&lt;br /&gt;    var mybutton = new JX.Button(document.createElement('div'))&lt;br /&gt;        .text("Click Me")&lt;br /&gt;        .css({background: 'darkblue', color: 'lightblue', textAlign: 'center', width: '100px'})&lt;br /&gt;        .appendTo(document.body);&lt;br /&gt;});    &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;If you noticed the Button constructor called its "superclass.constructor". However JX.Component when it extends jQuery calls its "superclass.init". And thats the trick in extending jQuery.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35473976-7488192062705505080?l=santrajan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://santrajan.blogspot.com/feeds/7488192062705505080/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://santrajan.blogspot.com/2008/10/what-john-resig-did-not-tell-you.html#comment-form' title='16 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35473976/posts/default/7488192062705505080'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35473976/posts/default/7488192062705505080'/><link rel='alternate' type='text/html' href='http://santrajan.blogspot.com/2008/10/what-john-resig-did-not-tell-you.html' title='Extending jQuery the Object Oriented Way'/><author><name>Santosh Rajan</name><uri>http://www.blogger.com/profile/04123305937973885088</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_VGpTmPoWSls/SeqT5VFXULI/AAAAAAAAABM/F2N2YvC0cQc/S220/Me240X160.jpg'/></author><thr:total>16</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35473976.post-6360302218149844425</id><published>2008-09-05T06:16:00.000-07:00</published><updated>2009-05-31T22:00:51.605-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='General'/><title type='text'>First ever Printed book had Chinese hardware and Indian software and Open Source Licence!</title><content type='html'>I was reading a book by Amartya Sen (Noble prize winner in Economics 1998) and found an interesting little fact I wasn't aware of, so I thought I must post it here. Let me quote from the book here.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;"The first printed book in the world with a date (corresponding to 868 CE), which was a Chinese translation of a Sanskrit treatise, the so called 'Diamond Sutra', (Kumarajiva had translated it in 402 CE), carried the remarkable motivational explanation: 'for universal free distribution'".&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;And from the footnote.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;"Kumarajiva was a half-Indian half-Kucian scholar who studied in India but had a leading position in the Institute of Foriegn Languages and literature in Xian, from 402 CE".&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So here we have the first printed book in the world and the machinery it was printed on (the hardware) being Chinese, and the contents (software) attributable to original author and the translator of the book both being Indian.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35473976-6360302218149844425?l=santrajan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://santrajan.blogspot.com/feeds/6360302218149844425/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://santrajan.blogspot.com/2008/09/first-ever-printed-book-had-chinese.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35473976/posts/default/6360302218149844425'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35473976/posts/default/6360302218149844425'/><link rel='alternate' type='text/html' href='http://santrajan.blogspot.com/2008/09/first-ever-printed-book-had-chinese.html' title='First ever Printed book had Chinese hardware and Indian software and Open Source Licence!'/><author><name>Santosh Rajan</name><uri>http://www.blogger.com/profile/04123305937973885088</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_VGpTmPoWSls/SeqT5VFXULI/AAAAAAAAABM/F2N2YvC0cQc/S220/Me240X160.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35473976.post-419820813284987305</id><published>2008-09-03T02:25:00.000-07:00</published><updated>2009-05-31T22:00:51.605-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='General'/><title type='text'>Google's Chrome Strategy</title><content type='html'>If you haven't yet downloaded the new Google Chrome browser, launched yesterday, you can download it &lt;a href="http://www.google.com/chrome"&gt;here&lt;/a&gt;. It's worth it. This is what a browser really should be. However this post is not about workings of the browser. There are a lot of articles about this in the last couple of days. This post is about Google's strategy for knocking Microsoft out of the race.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Really why would Google want to create a new browser when we have atleast half a dozen competent browsers already. As a matter of fact Google pays to support Firefox and that agreement is valid through 2011. And the Google Chrome browser itself is based on the WebKit rendering engine which is already being used by Apple's Safari browser. So really no advantage there except for the fact that chrome runs each tab you open as a separate process.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So what does Chrome have that the other browsers don't? A javascript compiler. Thats right, other browsers have javascript interpreters, but Chrome's V8 is really a Javascript compiler, that compiles and runs the javascript code as machine code, which is much faster than interpreting.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Thats the key. Faster javascript, means that you can run larger applications on your browser. If you have seen Google docs, you already have a spreadsheet, editor, and presentation software running on the browser. If you have faster javascript you could have software on your browser that can compete with standalone applications like Microsoft Office etc.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Think about this, over the years I have been using less of standalone applications, and more of applications on the browser. I use my browser for email, editing, spreadsheet and presentation. The only other applications I use is when I want to watch a movie or listen to music on my computer. Even that can be moved to the browser.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So there are many days that the only application I need to run on my computer is a browser. And Google has understood this for years now. That all your applications will eventually move to the browser. So Google docs and all other google apps are a step towards that goal.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Imagine the scenario. All the applications you need, now run on your browser. Does it matter what operating system you have in that case? No. Does it matter if you have an operating system at all? No. Your browser itself could be the OS too! So boot up your browser and shut down your browser! Far fetched or not, I bet this is already sending shivers down Microsoft's Spine.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35473976-419820813284987305?l=santrajan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://santrajan.blogspot.com/feeds/419820813284987305/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://santrajan.blogspot.com/2008/09/googles-chrome-strategy.html#comment-form' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35473976/posts/default/419820813284987305'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35473976/posts/default/419820813284987305'/><link rel='alternate' type='text/html' href='http://santrajan.blogspot.com/2008/09/googles-chrome-strategy.html' title='Google&apos;s Chrome Strategy'/><author><name>Santosh Rajan</name><uri>http://www.blogger.com/profile/04123305937973885088</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_VGpTmPoWSls/SeqT5VFXULI/AAAAAAAAABM/F2N2YvC0cQc/S220/Me240X160.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35473976.post-2952682451614868734</id><published>2008-09-01T06:07:00.000-07:00</published><updated>2009-05-31T22:00:51.605-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='General'/><title type='text'>Three Rules for Successful Software Development</title><content type='html'>In my years of software development I have been looking for that "holy grail" of software development methodology. There are many methodologies, Six Sigma, Agile, Extreme programming to mention a few. However these methodologies have concrete rules to be followed, and they seem to restrict the element of creativity in the process of development.&lt;br /&gt;&lt;br /&gt;If you look at the successful software developed in recent years, especially the open source ones, none of them have been developed using the above methodologies. On the other hand they have evolved to what they are today over the years. It is in this context that I would like to set three rules for successful software development. Look at your software as an evolving organism.&lt;br /&gt;&lt;br /&gt;1) Only software that can be partially usefull, when implemented partially, can succeed. You need your software to evolve into what your ultimate goal is. Start with a small release that you think will make it usefull for a small group of people or solves a small set of problems. Based on feedback let it evolve into the next stage, and so on until you have what you need.&lt;br /&gt;&lt;br /&gt;2) Your software is never in sync with its current requirements. Because of the very nature of the evolutionary process, your software has adapted to the previous requirements, and is currently being adapted to the present requirements.&lt;br /&gt;&lt;br /&gt;3) Finally Orgel's Rule, named after the evolutionary biologist Leslie Orgel. "Evolution is smarter than you are". Let your current users point out what is missing. Let them set your agenda. No one person or group of developers or analysts can point out what is missing better than your current users.&lt;br /&gt;&lt;br /&gt;This blog was inspired by an excellant article called "&lt;a href="http://www.shirky.com/writings/evolve.html"&gt;In praise of evolvable systems&lt;/a&gt;" by Clay Shirkey.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35473976-2952682451614868734?l=santrajan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://santrajan.blogspot.com/feeds/2952682451614868734/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://santrajan.blogspot.com/2008/09/three-rules-for-successful-software.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35473976/posts/default/2952682451614868734'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35473976/posts/default/2952682451614868734'/><link rel='alternate' type='text/html' href='http://santrajan.blogspot.com/2008/09/three-rules-for-successful-software.html' title='Three Rules for Successful Software Development'/><author><name>Santosh Rajan</name><uri>http://www.blogger.com/profile/04123305937973885088</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_VGpTmPoWSls/SeqT5VFXULI/AAAAAAAAABM/F2N2YvC0cQc/S220/Me240X160.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35473976.post-9004121115990220877</id><published>2007-03-14T23:01:00.000-07:00</published><updated>2009-04-06T07:58:35.582-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Javascript'/><title type='text'>Cross Browser Keyboard Handler</title><content type='html'>If you ever thought of writing a javascript editor you will know what I am talking about. Thats right. I am writing a cross browser WYSIWIG In Place javascript editor! Well this post is not about the editor itself. I may do that some time in the future.&lt;br /&gt;&lt;br /&gt;The first problem you have to solve is cross browser keystroke handling because almost every browser has some quirks. I needed a keystroke handler that really was cross browser. Running a search on net, i didnt find a complete solution though there were a lot of interesting partial solutions. So i had to put these together and come up with my own.&lt;br /&gt;&lt;br /&gt;Here is an excellant article on keystroke detection &lt;a href="http://www.quirksmode.org/js/keys.html"&gt;http://www.quirksmode.org/js/keys.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;As you should know by now, all browsers report the keypress, keydown, keyup events. And each of these events should report the KeyCode and Charcode. Of cource it doesnt allways happen. Ideally for each key event the browser should report the Charcode (the ascii character pressed) and the KeyCode (actual key). So if you hit "a" the Charcode would be 95 and the keycode 65.&lt;br /&gt;&lt;br /&gt;For the sake of this discussion let us separate key events into character events and non character events, you will see why soon. Character events occur when a printable character is pressed and non character event occurs when a non printable character (navigation keys, backspace, delete etc) is pressed.&lt;br /&gt;&lt;br /&gt;My Ideal browser (there is none) would for character events give the charcode and 0 for keycode. For non character events it would give keycodes and charcode 0. Your keystroke handler would be simple to write.&lt;br /&gt;&lt;br /&gt;Mozilla comes closest to this ideal but it also reports keycodes for character events, like in the case of character "a" above. Even then it would be easy to write the keyboard handler if all the browsers behaved the same.&lt;br /&gt;&lt;br /&gt;Why do we need keycodes and charcodes? Why not just one CODE? Well for starters there is an overlap of character event codes and non character event codes in the range 33 to 47. Character "%" has the same charcode 37, as the keycode 37 of non character "left arrow".&lt;br /&gt;&lt;br /&gt;There are a lot of inconsistencies between browsers as highlighted in the link I gave above. However to solve my problem i needed to find the consistencies between browsers rather than the inconsistencies. Fortunately there are some consistencies.&lt;br /&gt;&lt;br /&gt;For the keypress event all the browsers are consistent when reporting character events. Either the charcode or keycode will give you the right character code. But the keypress event is useless for non character events. In fact IE does not even fire the keypress event for non characters.&lt;br /&gt;&lt;br /&gt;However for keydown event all browsers are consistent when reporting non character event codes. They correctly give you the right keycode. Even Safari which reports keycodes greater than 64000 for navigation keys on keypress, reports correctly for keydown.&lt;br /&gt;&lt;br /&gt;KeyUp also works more or less like keyDown. Except on IE I wasnt able to capture the backspace key on KeyUp. It is important to capture the backspace key because the browser would otherwise resort to its default behaviour and mimick the back button and get off your page completely!&lt;br /&gt;&lt;br /&gt;Here is the code.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;document.onkeydown = function(e) {handleKeys(e)}&lt;br /&gt;document.onkeypress = function(e) {handleKeys(e)}&lt;br /&gt;var nonChar = false;&lt;br /&gt;&lt;br /&gt;function handleKeys(e) {&lt;br /&gt;    var char;&lt;br /&gt;    var evt = (e) ? e : window.event;       //IE reports window.event not arg&lt;br /&gt;    if (evt.type == "keydown") {&lt;br /&gt;        char = evt.keycode;&lt;br /&gt;        if (char &lt; 16 ||                    // non printables&lt;br /&gt;            (char &gt; 16 &amp;&amp; char &lt; 32) ||     // avoid shift&lt;br /&gt;            (char &gt; 32 &amp;&amp; char &lt; 41) ||     // navigation keys&lt;br /&gt;            char == 46) {                   // Delete Key (Add to these if you need)&lt;br /&gt;            handleNonChar(char);            // function to handle non Characters&lt;br /&gt;            nonChar = true;&lt;br /&gt;        } else&lt;br /&gt;            nonChar = false;&lt;br /&gt;    } else {                                // This is keypress&lt;br /&gt;        if (nonChar) return;                // Already Handled on keydown&lt;br /&gt;        char = (evt.charCode) ?&lt;br /&gt;                   evt.charCode : evt.keyCode;&lt;br /&gt;        if (char &gt; 31 &amp;&amp; char &lt; 256)        // safari and opera&lt;br /&gt;            handleChar(char);               //&lt;br /&gt;    }&lt;br /&gt;    if (e)                                  // Non IE&lt;br /&gt;        Event.stop(evt);                    // Using prototype&lt;br /&gt;    else if (evt.keyCode == 8)              // Catch IE backspace&lt;br /&gt;        evt.returnValue = false;            // and stop it!&lt;br /&gt;}&lt;br /&gt;&lt;/code&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/35473976-9004121115990220877?l=santrajan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://santrajan.blogspot.com/feeds/9004121115990220877/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://santrajan.blogspot.com/2007/03/cross-browser-keyboard-handler.html#comment-form' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35473976/posts/default/9004121115990220877'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35473976/posts/default/9004121115990220877'/><link rel='alternate' type='text/html' href='http://santrajan.blogspot.com/2007/03/cross-browser-keyboard-handler.html' title='Cross Browser Keyboard Handler'/><author><name>Santosh Rajan</name><uri>http://www.blogger.com/profile/04123305937973885088</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_VGpTmPoWSls/SeqT5VFXULI/AAAAAAAAABM/F2N2YvC0cQc/S220/Me240X160.jpg'/></author><thr:total>6</thr:total></entry></feed>
