{ "base":"http://www.intertwingly.net/blog/index.atom", "content-type":"application/atom+xml; charset=utf-8", "etag":"\"620977-12b50-3df8ec0\"", "last-modified":"2007-09-28T21:46:11.000Z", "feed":{ "id":"http://intertwingly.net/blog/index.atom", "title":"Sam Ruby", "subtitle":"It\u2019s just data", "updated":"2007-09-28T21:46:11.000Z", "icon":"http://www.intertwingly.net/favicon.ico", "authors":[{ "name":"Sam Ruby", "email":"rubys@intertwingly.net", "uri":"http://www.intertwingly.net/blog/" } ], "links":[{ "href":"http://intertwingly.net/blog/index.atom", "rel":"self" },{ "href":"http://www.intertwingly.net/blog/" } ], "entries":[{ "id":"tag:intertwingly.net,2004:2684", "title":"Email addresses your OpenID via DNS", "summary":{ "value":"

Bernie Reese<\/a>: this is exactly was OpenID needs: Open iDNS, or \u201cOpen Id Domain Name System.\u201d This service would work just like DNS, and would map email addresses to an OpenID provider designated by the owner.<\/em><\/p>\n

Looking at Jabber recently caused me to see this prior discussion in a new light.\u00a0 With Google Talk<\/a>, one\u2019s gmail.com email-style address is one\u2019s identity.\u00a0 I just created a second address, one without a gmail.com account behind it.\u00a0 And Google Talk and GMail seem to be doing just fine.<\/p>", "hash":[["p",{ },[["a",{ "href":"http://www.majordojo.com/technology/what_openid_needs.php" },["Bernie Reese" ] ],":",["em",{ },["this is exactly was OpenID needs: Open iDNS, or \u201cOpen Id Domain Name System.\u201d This service would work just like DNS, and would map email addresses to an OpenID provider designated by the owner." ] ] ] ],["p",{ },["Looking at Jabber recently caused me to see this prior discussion in a new light.\u00a0 With",["a",{ "href":"http://www.google.com/talk/" },["Google Talk" ] ],", one\u2019s gmail.com email-style address is one\u2019s identity.\u00a0 I just created a second address, one without a gmail.com account behind it.\u00a0 And Google Talk and GMail seem to be doing just fine." ] ] ] }, "content":{ "value":"

\n \n \n<\/svg><\/div>\n

Bernie Reese<\/cite><\/a>: this is exactly was OpenID needs: Open iDNS, or \u201cOpen Id Domain Name System.\u201d This service would work just like DNS, and would map email addresses to an OpenID provider designated by the owner.<\/em><\/p>\n

Looking at Jabber recently caused me to see this prior discussion in a new light.\u00a0 With Google Talk<\/a>, one\u2019s gmail.com email-style address is one\u2019s identity.\u00a0 I just created a second address, one without a gmail.com account behind it.\u00a0 And Google Talk and GMail seem to be doing just fine.<\/p>\n

Part of the problem is that the people working on OpenID are concerned about privacy, and the perception is that giving away an email address may be revealing too much.\u00a0 But as email address can be minted at will, the user is still in full control.\u00a0 And those that wish to can still use http flavor URIs, so nobody loses.<\/p>\n

Another part of the problem is that the solution proposed<\/a> required people to do real work, deploy real software in production, and have to deal with all of the counter-measures designed to stop spammers, etc.<\/p>\n

Ironically DNS SRV records<\/a> were dismissed prematurely:<\/p>\n

Although big providers could easily adopt this, others (consumers, mostly<\/b>) would have to make substantial efforts in order to adjust.\u00a0 [Emphasis added]\n<\/p><\/blockquote>\n

Here\u2019s a version of the consumer side of the code for a fully load balancing solution:<\/p>\n

import DNS, sys, random\nDNS.ParseResolvConf()\n\n# resolve _xmpp-server per RFC 2782<\/a>\nfor domain in sys.argv[1:]:\n\n  # resolve the service\n  request = DNS.Request(qtype='srv')\n  response = request.req('_xmpp-server._tcp<\/b>.%s.' % domain)\n  services = [service['data'] for service in response.answers]\n\n  # choose services with the highest priority\n  services.sort()\n  services = [service for service in services if service[0]==services[0][0]]\n\n  # make a weighted choice amongst these services\n  random.shuffle(services)\n  choice = sum([service[1] for service in services]) * random.random()\n  for service in services:\n    choice -= service[1]\n    if choice <= 0:\n      print \"%s:\\t%s:%d\" % (domain, service[-1], service[-2])\n      break\n  else:\n    print \"%s:\\t<none>\" % domain<\/pre>\n

Try it against gmail.com<\/code> to see how it works.<\/p>\n

DNS records are already distributed and cached, so after the first request there would be little to no noticeable latency.\u00a0 The software is already deployed.\u00a0 People could update SRV records without needing to wait for clients to be deployed, and clients could start checking for this without waiting for people to update SRV records.<\/p>", "hash":[["div",{ "style":"width:6.25em; height:6.25em; float:right" },[["svg",{ "xmlns":"http://www.w3.org/2000/svg", "viewBox":"0 0 100 100" },[["path",{ "d":"M43,90c-88,-16,-21,-86,41,-51l9,-6v17h-26l8,-5c-55,-25,-86,29,-32,36z", "fill":"#ccc" },[ ] ],["path",{ "d":"M43,90v-75l14,-9v75z", "fill":"#f60" },[ ] ], ] ] ] ],["p",{ },[["a",{ "href":"http://www.majordojo.com/technology/what_openid_needs.php" },[["cite",{ },["Bernie Reese" ] ] ] ],":",["em",{ },["this is exactly was OpenID needs: Open iDNS, or \u201cOpen Id Domain Name System.\u201d This service would work just like DNS, and would map email addresses to an OpenID provider designated by the owner." ] ] ] ],["p",{ },["Looking at Jabber recently caused me to see this prior discussion in a new light.\u00a0 With",["a",{ "href":"http://www.google.com/talk/" },["Google Talk" ] ],", one\u2019s gmail.com email-style address is one\u2019s identity.\u00a0 I just created a second address, one without a gmail.com account behind it.\u00a0 And Google Talk and GMail seem to be doing just fine." ] ],["p",{ },["Part of the problem is that the people working on OpenID are concerned about privacy, and the perception is that giving away an email address may be revealing too much.\u00a0 But as email address can be minted at will, the user is still in full control.\u00a0 And those that wish to can still use http flavor URIs, so nobody loses." ] ],["p",{ },["Another part of the problem is that",["a",{ "href":"http://blog.phpbb.cc/2007/02/08/read-the-spec-jack/" },["the solution proposed" ] ],"required people to do real work, deploy real software in production, and have to deal with all of the counter-measures designed to stop spammers, etc." ] ],["p",{ },["Ironically DNS",["a",{ "href":"http://en.wikipedia.org/wiki/SRV_record" },["SRV records" ] ],"were dismissed prematurely:" ] ],["blockquote",{ "class":"quote" },[["p",{ },["Although big providers could easily adopt this, others (",["b",{ },["consumers, mostly" ] ],") would have to make substantial efforts in order to adjust.\u00a0 [Emphasis added]" ] ] ] ],["p",{ },["Here\u2019s a version of the consumer side of the code for a fully load balancing solution:" ] ],["pre",{ "class":"code" },["import DNS, sys, random\nDNS.ParseResolvConf()\n\n# resolve _xmpp-server per",["a",{ "href":"http://www.ietf.org/rfc/rfc2782.txt" },["RFC 2782" ] ],"for domain in sys.argv[1:]:\n\n # resolve the service\n request = DNS.Request(qtype='srv')\n response = request.req('",["b",{ },["_xmpp-server._tcp" ] ],".%s.' % domain)\n services = [service['data'] for service in response.answers]\n\n # choose services with the highest priority\n services.sort()\n services = [service for service in services if service[0]==services[0][0]]\n\n # make a weighted choice amongst these services\n random.shuffle(services)\n choice = sum([service[1] for service in services]) * random.random()\n for service in services:\n choice -= service[1]\n if choice <= 0:\n print \"%s:\\t%s:%d\" % (domain, service[-1], service[-2])\n break\n else:\n print \"%s:\\t\" % domain" ] ],["p",{ },["Try it against",["code",{ },["gmail.com" ] ],"to see how it works." ] ],["p",{ },["DNS records are already distributed and cached, so after the first request there would be little to no noticeable latency.\u00a0 The software is already deployed.\u00a0 People could update SRV records without needing to wait for clients to be deployed, and clients could start checking for this without waiting for people to update SRV records." ] ] ] }, "updated":"2007-09-28T18:34:26.000Z", "links":[{ "href":"http://www.intertwingly.net/blog/2007/09/28/Email-addresses-your-OpenID-via-DNS" },{ "href":"http://www.intertwingly.net/blog/2684.atom", "rel":"replies", "attributes":[["thr:count",{ "xmlns:thr":"http://purl.org/syndication/thread/1.0" },"2" ],["thr:updated",{ "xmlns:thr":"http://purl.org/syndication/thread/1.0" },"2007-09-28T15:56:46-04:00" ] ] } ] },{ "id":"tag:intertwingly.net,2004:2683", "title":"Comment Notification via XMPP", "summary":{ "value":"

Elias Torres<\/a>: Sam could you add Jabber notifications to the email in the comment form when a new comment has been posted to entry? pleeeeeeeeeeaase.<\/em><\/p>\n

OK, I\u2019ve added a Register<\/a> entry to the Nav Bar on the right.\u00a0 It will allow you to specify your preferences, but I haven\u2019t yet connected it to XMPP<\/a>.<\/p>", "hash":[["p",{ },[["a",{ "href":"http://intertwingly.net/blog/2007/09/25/JSON-for-Map-Reduce#c1190757323" },["Elias Torres" ] ],":",["em",{ },["Sam could you add Jabber notifications to the email in the comment form when a new comment has been posted to entry? pleeeeeeeeeeaase." ] ] ] ],["p",{ },["OK, I\u2019ve added a",["a",{ "href":"http://intertwingly.net/registry/" },["Register" ] ],"entry to the Nav Bar on the right.\u00a0 It will allow you to specify your preferences, but I haven\u2019t yet connected it to",["a",{ "href":"http://www.xmpp.org/" },["XMPP" ] ],"." ] ] ] }, "content":{ "value":"

\n \n \n<\/svg><\/div>\n

Elias Torres<\/cite><\/a>: Sam could you add Jabber notifications to the email in the comment form when a new comment has been posted to entry? pleeeeeeeeeeaase.<\/em><\/p>\n

OK, I\u2019ve added a Register<\/a> entry to the Nav Bar on the right.\u00a0 It will allow you to specify your preferences, but I haven\u2019t yet connected it to XMPP<\/a>.<\/p>\n