<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Joseph Smarr &#187; Plaxo</title>
	<atom:link href="http://josephsmarr.com/category/plaxo/feed/" rel="self" type="application/rss+xml" />
	<link>http://josephsmarr.com</link>
	<description>Thoughts on web development, tech, and life.</description>
	<lastBuildDate>Sat, 21 Jan 2012 18:06:41 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
<atom:link rel="hub" href="http://pubsubhubbub.appspot.com"/><atom:link rel="hub" href="http://superfeedr.com/hubbub"/>		<item>
		<title>Implementing PubSubHubbub subscriber support: A step-by-step guide</title>
		<link>http://josephsmarr.com/2010/03/01/implementing-pubsubhubbub-subscriber-support-a-step-by-step-guide/</link>
		<comments>http://josephsmarr.com/2010/03/01/implementing-pubsubhubbub-subscriber-support-a-step-by-step-guide/#comments</comments>
		<pubDate>Mon, 01 Mar 2010 21:25:17 +0000</pubDate>
		<dc:creator>joseph</dc:creator>
				<category><![CDATA[Open Social Web]]></category>
		<category><![CDATA[Plaxo]]></category>
		<category><![CDATA[Web development]]></category>

		<guid isPermaLink="false">http://josephsmarr.com/2010/03/01/implementing-pubsubhubbub-subscriber-support-a-step-by-step-guide/</guid>
		<description><![CDATA[One of the last things I did before leaving Plaxo was to implement PubSubHubbub (PuSH) subscriber support, so that any blogs which ping a PuSH hub will show up almost instantly in pulse after being published. It&#8217;s easy to do (you don&#8217;t even need a library!), and it significantly improves the user experience while simultaneously [...]]]></description>
			<content:encoded><![CDATA[<p>One of the last things I did before leaving Plaxo was to implement <a href="http://code.google.com/p/pubsubhubbub/">PubSubHubbub</a> (PuSH) subscriber support, so that any blogs which ping a PuSH hub will show up almost instantly in pulse after being published. It&#8217;s easy to do (you don&#8217;t even need a library!), and it significantly improves the user experience while simultaneously reducing server load on your site and the sites whose feeds you&#8217;re crawling. At the time, I couldn&#8217;t find any good tutorials for how to implement PuSH subscriber support (add a comment if you know of any), so here&#8217;s how I did it. (Note: depending on your needs, you might find it useful instead to use a third-party service like <a href="http://www.gnip.com/">Gnip</a> to do this.)</p>
<p>My assumption here is that you&#8217;ve already got a <strong>database of feeds</strong> you&#8217;re subscribing to, but that you&#8217;re <strong>currently just polling</strong> them all periodically to look for new content. This tutorial will help you &#8220;<strong>gracefully upgrade</strong>&#8221; to support PuSH-enabled blogs without rewriting your fundamental polling infrastructure. At the end, I&#8217;ll suggest a more radical approach that is probably better overall if you can afford a bigger rewrite of your crawling engine.</p>
<p>The steps to add PuSH subscriber support are as follows:</p>
<ol>
<li>Identify PuSH-enabled blogs <span style="font-weight: bold">extract </span>their hub and topic</li>
<li>Lazily <span style="font-weight: bold">subscribe </span>to PuSH-enabled blogs as you discover them</li>
<li><span style="font-weight: bold">Verify </span>subscription requests from the hub as you make them</li>
<li>Write an endpoint to <span style="font-weight: bold">receive pings</span> from the hub as new content is published</li>
<li>Get the latest <span style="font-weight: bold">content </span>from updated blogs as you receive pings</li>
<li><span style="font-weight: bold">Unsubscribe </span>from feeds when they&#8217;re deleted from your system</li>
</ol>
<p><u>1. Identify PuSH-enabled blogs <span style="font-weight: bold">extract </span>their hub and topic</u></p>
<p>When crawling a feed normally, you can look for some extra metadata in the XML that tells you this blog is PuSH-enabled. Specifically, you want to look for two links: the &#8220;hub&#8221; (the URL of the hub that the blog pings every time it has new content, which you in turn communicate with to subscribe and receive pings when new content is published), and the &#8220;self&#8221; (the canonical URL of the blog you&#8217;re subscribing to, which is referred to as the &#8220;topic&#8221; you&#8217;re going to subscribe to from the hub).</p>
<p>A useful test blog to use while building PuSH subscriber support is <a href="http://pubsubhubbub-example-app.appspot.com/">http://pubsubhubbub-example-app.appspot.com/</a>, since it lets anyone publish new content. If you view source on that page, you&#8217;ll notice the standard RSS auto-discovery tag that tells you where to find the blog&#8217;s feed:</p>
<p><code>&lt;link title="PubSubHubbub example app" type="application/atom+xml" rel="alternate" /></code></p>
<p>And if you view source on <a href="http://pubsubhubbub-example-app.appspot.com/feed">http://pubsubhubbub-example-app.appspot.com/feed</a>, you&#8217;ll see the two PuSH links advertised underneath the root <code>feed</code> tag:</p>
<p><code>&lt;link type="application/atom+xml" title="PubSubHubbub example app" rel="self" /><br />
&lt;link rel="hub"  href="http://pubsubhubbub.appspot.com/" /></code></p>
<p>You can see that the &#8220;self&#8221; link is the same as the URL of the feed that you&#8217;re already using, and the &#8220;hub&#8221; link is to the free hub being hosted on AppEngine at <code>http://pubsubhubbub.appspot.com/</code>. In both cases, you want to look for a link tag under the root feed tag, match the appropriate rel-value (keeping in mind that rel-attributes can have multiple, space-separated values, e.g. <code>rel="self somethingelse"</code>, so split the rel-value on spaces and then look for the specific matching rel-value), and then extract the corresponding href-value from that link tag. Note that the example above is an ATOM feed; in RSS feeds, you generally have to look for <code>atom:link</code> tags under the <code>channel</code> tag under the root <code>rss</code> tag, but the rest is the same.</p>
<p>Once you have the hub and self links for this blog (assuming the blog is PuSH-enabled), you&#8217;ll want to store the self-href (aka the &#8220;topic&#8221;) with that feed in your database so you&#8217;ll know whether you&#8217;ve subscribed to it, and, if so, whether the topic has changed since you last subscribed.</p>
<p><u>2.  Lazily <strong>subscribe </strong>to PuSH-enabled blogs as you discover them</u></p>
<p>When you&#8217;re crawling a feed and you notice it&#8217;s PuSH-enabled, check your feed database to see if you&#8217;ve got a stored PuSH-topic for that feed, and if so, whether the current topic is the same as your stored value. If you don&#8217;t have any stored topic, or if the current topic is different, you&#8217;ll want to talk to that blog&#8217;s PuSH hub and initiate a subscription so that you can receive real-time updates when new content is published to that blog. By storing the PuSH-topic per-feed, you can effectively &#8220;lazily subscribe&#8221; to all PuSH-enabled blogs by continuing to regularly poll and crawl them as you currently do, and adding PuSH subscriptions as you find them. This means you don&#8217;t have to do any large one-time migration over to PuSH, and you can automatically keep up as more blogs become PuSH-enabled or change their topics over time. (Depending on your crawling infrastructure, you can either initiate subscriptions as soon as you find the relevant tags, or you can insert an asynchronous job to initiate the subscription so that some other part of your system can handle that later without slowing down your crawlers.)</p>
<p>To subscribe to a PuSH-enabled blog, just send an HTTP POST to its hub URL and provide the following POST parameters:</p>
<ul>
<li><code>hub.callback</code> = [the URL of your endpoint for receiving pings, which we'll build in step 4]</li>
<li><code>hub.mode</code> = <code>subscribe</code></li>
<li><code>hub.topic</code> = [the self-link / topic of the feed you're subscribing to, which you extracted in step 1]</li>
<li><code>hub.verify</code> = <code>async</code> [means the hub will separately call you back to verify this subscription]</li>
<li><code>hub.verify_token</code> = [a hard-to-guess token associated with this feed, which the hub will echo back to you to prove it's a real subscription verification]</li>
</ul>
<p>For the <code>hub.callback</code> URL, it&#8217;s probably best to include the internal database ID of the feed you&#8217;re subscribing to, so it&#8217;s easy to look up that feed when you receive future update pings. Depending on your setup, this might be something like <code>http://yoursite.com/push/update?feed_id=123</code> or <code>http://yoursite.com/push/update/123</code>. Another advantage of this technique is that it makes it relatively hard to guess what the update URL is for an arbitrary blog, in case an evil site wanted to send you fake updates. If you want even more security, you could put some extra token in the URL that&#8217;s different per-feed, or you could use the <code>hub.secret</code> mechanism when subscribing, which will cause the hub to send you a signed verification header with every ping, but that&#8217;s beyond the scope of this tutorial.</p>
<p>For the <code>hub.verify_token</code>, the simplest thing would just be to pick a secret word (e.g. &#8220;<code>MySekritVerifyToken</code>&#8220;) and always use that, but an evil blog could use its own hub and quickly discover that secret. So a better idea is to do something like take the HMAC-SHA1 of the topic URL along with some secret salt you keep internally. This way, the <code>hub.verify_token</code> value is feed-specific, but it&#8217;s easy to recompute when you receive the verification.</p>
<p>If your subscription request is successful, the hub will respond with an HTTP 202 &#8220;Accepted&#8221; code, and will then proceed to send you a verification request for this subscription at your specified callback URL.</p>
<p><u>3. <strong>Verify </strong>subscription requests from the hub as you make them</u></p>
<p>Shortly after you send your subscription request to the hub, it will call you back at the <code>hub.callback</code> URL you specified with an HTTP GET request containing the following query parameters:</p>
<ul>
<li><code>hub.mode</code> = <code>subscribe</code></li>
<li><code>hub.topic</code> = [the self-link / topic of the URL you requested a subscription for]</li>
<li><code>hub.challenge</code> = [a random string to verify this verification that you have to echo back in the response to acknowledge verification]</li>
<li><code>hub.verify_token</code> = [the value you sent in <code>hub.verify_token</code> during your subscription request]</li>
</ul>
<p>Since the endpoint you receive this verification request is the same one you&#8217;ll receive future update pings on, your logic has to first look for <code>hub.mode=subscribe</code>, and if so, verify that the hub sent the proper <code>hub.verify_token</code> back to you, and then just dump out the <code>hub.challenge</code> value as the response body of your page (with a standard HTTP 200 response code). Now you&#8217;re officially subscribed to this feed, and will receive update pings when the blog publishes new content.</p>
<p>Note that hubs may periodically re-verify that you still want a subscription to this feed. So you should make sure that if the hub makes a similar verification request out-of-the-blue in the future, you respond the same way you did the first time, providing you indeed are still interested in that feed. A good way to do this is just to look up the feed every time you get a verification request (remember, you build the feed&#8217;s ID into your callback URL), and if you&#8217;ve since deleted or otherwise stopped caring about that feed, return an HTTP 404 response instead so the hub will know to stop pinging you with updates.</p>
<p><u>4. Write an endpoint to <strong>receive pings</strong> from the hub as new content is published</u></p>
<p>Now you&#8217;re ready for the pay-out&#8211;magically receiving pings from the ether every time the blog you&#8217;ve subscribed to has new content! You&#8217;ll receive inbound requests to your specified callback URL without any additional query parameters added (i.e. you&#8217;ll know it&#8217;s a ping and not a verification because there won&#8217;t be any <code>hub.mode</code> parameter included). Instead, the new entries of the subscribed feed will be included directly in the POST body of the request, with a request Content-Type of <code>application/atom+xml</code> for ATOM feeds and <code>application/rss+xml</code> for RSS feeds. Depending on your programming language of choice, you&#8217;ll need to figure out how to extract the raw POST body contents. For instance, in PHP you would <code>fopen</code> the special filename <code>php://input</code> to read it.</p>
<p><u>5. Get the latest <strong>content </strong>from updated blogs as you receive pings</u></p>
<p>The ping is really telling you two things: 1) this blog has updated content, and 2) here it is. The advantage of providing the content directly in the ping (a so-called &#8220;<a href="http://techcrunch.com/2009/09/09/rsscloud-vs-pubsubhubbub-why-the-fat-pings-win/">fat ping</a>&#8220;) is so that the subscriber doesn&#8217;t have to go re-crawl the feed to get the updated content. Not only is this a performance savings (especially when you consider that lots of subscribers may get pings for a new blog post at roughly the same time, and they might otherwise all crawl that blog at the same time for the new contents; the so-called &#8220;thundering herd&#8221; problem), it&#8217;s also a form of robustness since some blogging systems take a little while to update their feeds when a new post is published (especially for large blogging systems that have to propagate changes across multiple data-centers or update caching tiers), so it&#8217;s possible you&#8217;ll receive a ping before the content is available to crawl directly. For these reasons and more, it&#8217;s definitely a best-practice to consume the fat ping directly, rather than just using it as a hint to go crawl the blog again (i.e. treating it as a &#8220;light ping&#8221;).</p>
<p>That being said, most crawling systems are designed just to poll URLs and look for new data, so it may be easier to start out by taking the &#8220;light ping&#8221; route. In other words, when you receive a PuSH ping, look up the feed ID from the URL of the request you&#8217;re handling, and assuming that feed is still valid, just schedule it to crawl ASAP. That way, you don&#8217;t have to change the rest of your crawling infrastructure; you just treat the ping as a hint to crawl now instead of waiting for the next regular polling interval. While sub-optimal, in my experience this works pretty well and is very easy to implement. (It&#8217;s certainly a major improvement over just polling with no PuSH support!) If you&#8217;re worried about crawling before the new content is in the feed, and you don&#8217;t mind giving up a bit of speed, you can schedule your crawler for &#8220;in N seconds&#8221; instead of ASAP, which in practice will allow a lot of slow-to-update feeds to catch up before you crawl them.</p>
<p>Once you&#8217;re ready to handle the fat pings directly, extract the updated feed entries from the POST body of the ping (the payload is essentially an exact version of the full feed you&#8217;d normally fetch, except it only contains entries for the new content), and ingest it however you normally ingest new blog content. In fact, you can go even further and make PuSH the <em>default</em> way to ingest blog content&#8211;change your polling code to act as a &#8220;fake PuSH proxy&#8221; and emit PuSH-style updates whenever it finds new entries. Then your core feed-ingesting code can just process all your updated entries in the same way, whether they came from a hub or your polling crawlers.</p>
<p>However you handle the pings, once you find that things are working reliably, you can change the polling interval for PuSH-enabled blogs to be much slower, or even turn it off completely, if you&#8217;re not worried about ever missing a ping. In practice, slow polling (e.g. once a day) is probably still a good hedge against the inevitable clogs in the internet&#8217;s tubes.</p>
<p><u>6. <strong>Unsubscribe </strong>from feeds when they&#8217;re deleted from your system</u></p>
<p>Sometimes users will delete their account on your system or unhook one of their feeds from their account. To be a good citizen, rather than just waiting for the next time the hub sends a subscription verification request to tell it you no longer care about this feed, you should send the hub an unsubscribe request when you know the feed is no longer important to you. The process is identical to subscribing to a feed (as described in steps 2 and 3), except you use &#8220;<code>unsubscribe</code>&#8221; instead of &#8220;<code>subscribe</code>&#8221; for the <code>hub.mode</code> values in all cases.</p>
<p><u>Testing your implementation</u></p>
<p>Now that you know all the steps needed to implement PuSH subscriber support, it&#8217;s time to test your code in the wild. Probably the easiest way is to hook up that <a href="http://pubsubhubbub-example-app.appspot.com/">http://pubsubhubbub-example-app.appspot.com/</a> feed, since you can easily add content it to it to test pings, and it&#8217;s known to have valid hub-discovery metadata. But you can also practice with any blog that is PuSH-enabled (perhaps your shiny new Google Buzz public posts feed?). In any case, schedule it to be crawled normally, and verify that it correctly extracts the hub-link and self-link and adds the self-link to your feed database.</p>
<p>The first time it finds these links, it should trigger a subscription request. (On subsequent crawls, it shouldn&#8217;t try to subscribe again, since the topic URL hasn&#8217;t changed. ) Verify that you&#8217;re sending a request to the hub that includes all the necessary parameters, and verify that it&#8217;s sending you back a 202 response. If it&#8217;s not working, carefully check that you&#8217;re sending all the right parameters.</p>
<p>Next, verify that upon sending a subscription request, you&#8217;ll soon get an inbound verification request from the hub. Make sure you detect requests to your callback URL with <code>hub.mode=subscribe</code>, and that you are checking the <code>hub.verify_token</code> value against the value you sent in the subscription request, and then that you&#8217;re sending the <code>hub.challenge</code> value as your response body. Unfortunately, it&#8217;s usually not easy to inspect the hub directly to confirm that it has properly verified your subscription, but hopefully some hubs will start providing site-specific dashboards to make this process more transparent. In the meantime, the best way to verify that things worked properly is to try making test posts to the blog and looking for incoming pings.</p>
<p>So add a new post on the example blog, or write a real entry on your PuSH-enabled blog of choice, and look in your server logs to make sure a ping came in. Depending on the hub, the ping may come nearly instantaneously or after a few seconds. If you don&#8217;t see it after several seconds, something is probably wrong, but try a few posts to make sure you didn&#8217;t just miss it. Look at the specific URL that the hub is calling on your site, and verify that it has your feed ID in the URL, and that it does indeed match the feed that just published new content. If you&#8217;re using the &#8220;light ping&#8221; model, check that you scheduled your feed to crawl ASAP. If you&#8217;re using the &#8220;fat ping&#8221; model, check that you correctly ingested the new content that was in the POST body of the ping.</p>
<p>Once everything appears to be working, try un-hooking your test feed (and/or deleting your account) and verify that it triggers you to send an unsubscribe request to the hub, and that you properly handle the subsequent unsubscribe verification request from the hub.</p>
<p>If you&#8217;ve gotten this far, congratulations! You are now part of the real-time-web! Your users will thank you for making their content show up more quickly on your site, and the sites that publish those feeds will thank you for not crawling them as often, now that you can just sit back and wait for updates to be PuSH-ed to you. And I and the rest of the community will thank you for supporting open standards for a decentralized social web!</p>
<p><em>(Thanks to <a href="http://www.google.com/profiles/bslatkin">Brett Slatkin</a> for providing feedback on a draft of this post!)</em>
<div class="social4i" style="height:29px;">
<div class="social4in" style="height:29px;float: left;">
<div class="socialicons s4twitter" style="float:left;margin-right: 10px;background:url(&quot;http://goo.gl/zjqd1&quot;) no-repeat;"><a href="http://twitter.com/share" data-url="http://josephsmarr.com/2010/03/01/implementing-pubsubhubbub-subscriber-support-a-step-by-step-guide/" data-counturl="http://josephsmarr.com/2010/03/01/implementing-pubsubhubbub-subscriber-support-a-step-by-step-guide/" data-text="Implementing PubSubHubbub subscriber support: A step-by-step guide" class="twitter-share-button" data-count="horizontal" data-via="jsmarr"></a></div>
<div class="socialicons s4fblike" style="float:left;margin-right: 10px;">
<div id="fb-root"></div>
<p><fb:like href="http%3A%2F%2Fjosephsmarr.com%2F2010%2F03%2F01%2Fimplementing-pubsubhubbub-subscriber-support-a-step-by-step-guide%2F" send="false" layout="button_count" width="100" height="21" show_faces="false" font=""></fb:like></div>
<div class="socialicons s4plusone" style="float:left;margin-right: 10px;"><g:plusone size="medium" href="http://josephsmarr.com/2010/03/01/implementing-pubsubhubbub-subscriber-support-a-step-by-step-guide/" count="true"></g:plusone></div>
</div>
<div style="clear:both"></div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://josephsmarr.com/2010/03/01/implementing-pubsubhubbub-subscriber-support-a-step-by-step-guide/feed/</wfw:commentRss>
		<slash:comments>20</slash:comments>
		</item>
		<item>
		<title>HipChat is consumer-meets-enterprise done right &#8212; check it out!</title>
		<link>http://josephsmarr.com/2010/01/25/hipchat-is-consumer-meets-enterprise-done-right-check-it-out/</link>
		<comments>http://josephsmarr.com/2010/01/25/hipchat-is-consumer-meets-enterprise-done-right-check-it-out/#comments</comments>
		<pubDate>Mon, 25 Jan 2010 22:08:53 +0000</pubDate>
		<dc:creator>joseph</dc:creator>
				<category><![CDATA[Personal]]></category>
		<category><![CDATA[Plaxo]]></category>

		<guid isPermaLink="false">http://josephsmarr.com/2010/01/25/hipchat-is-consumer-meets-enterprise-done-right-check-it-out/</guid>
		<description><![CDATA[Three of Plaxo&#8217;s best engineers and designers left almost a year ago to start a new company (much as they&#8217;d done a few years ago with HipCal, which Plaxo acquired in 2006). After a brief private beta, today they are launching to the public. Meet HipChat. It&#8217;s a new (and, IMO, very clever and promising) [...]]]></description>
			<content:encoded><![CDATA[<p>Three of Plaxo&#8217;s <a href="http://hipchat.com/about">best engineers and designers</a> left almost a year ago to start a new company (much as they&#8217;d done a few years ago with HipCal, which Plaxo acquired in 2006). After a brief <a href="http://www.techcrunch.com/2009/12/14/hipchat-group-chat/">private beta</a>, today they are <a href="http://www.techcrunch.com/2010/01/25/hipchat-private-chat/">launching to the public</a>. </p>
<p><a href="http://www.hipchat.com/"><img align="right" border="0" style="margin: 0 0 10px 10px;" src="http://www.hipchat.com/img/press_logo.png" alt="HipChat" /></a>Meet <a href="http://hipchat.com">HipChat</a>. It&#8217;s a new (and, IMO, very clever and promising) approach to group collaboration within companies and teams&#8211;essentially group chat plus file-sharing done with the simplicity and polish of a great consumer app, but targeted at the enterprise. And it&#8217;s meant to spread organically and bottoms-up by attracting enthusiastic team members who really find it useful, rather than top-down through long sales-cycles to CIOs&#8211;in other words, winning by actually being better for the people that use it every day. You&#8217;ll be able to tell this from the moment you start using it&#8211;it&#8217;s distinctly &#8220;un-enterprise-y&#8221; in all the right ways, yet every enterprise needs something like this to be more productive and organized.</p>
<p><center><a href="http://hipchat.com/img/screenshots/screenshot_share.png"><img src="http://hipchat.com/img/screenshots/screenshot_share.png" width="458" height="297" /></a><br />
[ <a href="http://hipchat.com/press">More HipChat screenshots</a> ]</center></p>
<p>I&#8217;m excited about HipChat for several reasons:</p>
<p>First, the <a href="http://hipchat.com/about">founders</a> (Pete Curley, Garret Heaton, and Chris Rivers) are all <strong>rockstar talents and super nice guys</strong>; the best of the young web 2.0 &#8220;bootstrap from nothing and build something genuinely good that grows because people are using and loving it&#8221; approach that&#8217;s only become feasible recently. Whatever they work on, I know it&#8217;ll be well thought through and well executed, and it&#8217;ll keep getting better over time. These are good guys to know and watch, and they&#8217;re just getting started.</p>
<p>Second, <strong>group collaboration is a space that everyone knows is important, and yet that nothing does a good job of solving today</strong>. At Plaxo we&#8217;ve tried tons of wikis, internal blogs, mailing lists, document depots, dashboards, you name it. They&#8217;re always too complicated and cumbersome and never have streamlined workflows that work the way you need. One of my early surprises coming to Google is that for all their efforts and internal tools, the situation is ultimately not much better. Information is still spread everywhere across a variety of systems, is too hard to find and curate, and too often forces you to just ask the person next to you and hope for the best. Maybe new tools like Google Wave will make a difference here, but of course the more flexible and general-purpose a tool like that is, the greater the risk that it will do too many things and none of them just the way you want. HipChat may not be the magic solution to this complex problem either, but it&#8217;s refreshing to see the team apply a consumer-app eye and discipline to the problem&#8211;focusing on specific task arcs to really nail, and an end-to-end polish and friendliness that&#8217;s so clearly lacking from most other groupware tools.</p>
<p>This last point deserves its own slot: in my experience, <strong>the only way to really advance the state of technology making a real difference in the lives of real people is to subject it to the harsh Darwinian landscape of consumer software and devices</strong>, where if it doesn&#8217;t &#8220;just work&#8221; and provide a compelling and enjoyable experience, it doesn&#8217;t get used. This is the sharpening steel that&#8217;s honed all the best apps we have today, from gmail to facebook to the iPhone to boxee, and so on. And if you think about it, it&#8217;s the missing piece that makes most enterprise software so terrible&#8211;your company buys it, and you&#8217;re stuck with it, like it or not. The typical enterprise &#8220;fitness function&#8221; yields a much slower and sloppier rate of evolution than the consumer one, and that I believe is the main reason the quality of the two classes of apps differs so much. So it&#8217;s great to see an increase in companies willing to try and swim upstream to gain corporate adoption with a consumer mindset, whether it&#8217;s Google Apps, box.net, Yammer, or now HipChat. </p>
<p>If you work on a team, if you&#8217;re dissatisfied with the state of collaboration tools, or if you just want to see a really well done new app, I encourage you to <a href="http://hipchat.com">check out HipChat</a>. We used several early betas inside Plaxo, and while any new communications tool faces an uphill battle to gain critical mass of adoption and change old habits, enough of us had enough &#8220;eureka moments&#8221; using HipChat to see its strong potential and to wish that we could fast-forward time until more people are using it and it&#8217;s had even more love put into it. The next best thing we can do is to spread the good word and give our support to the team, so consider this post a down payment!
</p>
<div class="social4i" style="height:29px;">
<div class="social4in" style="height:29px;float: left;">
<div class="socialicons s4twitter" style="float:left;margin-right: 10px;background:url(&quot;http://goo.gl/zjqd1&quot;) no-repeat;"><a href="http://twitter.com/share" data-url="http://josephsmarr.com/2010/01/25/hipchat-is-consumer-meets-enterprise-done-right-check-it-out/" data-counturl="http://josephsmarr.com/2010/01/25/hipchat-is-consumer-meets-enterprise-done-right-check-it-out/" data-text="HipChat is consumer-meets-enterprise done right &#8212; check it out!" class="twitter-share-button" data-count="horizontal" data-via="jsmarr"></a></div>
<div class="socialicons s4fblike" style="float:left;margin-right: 10px;">
<div id="fb-root"></div>
<p><fb:like href="http%3A%2F%2Fjosephsmarr.com%2F2010%2F01%2F25%2Fhipchat-is-consumer-meets-enterprise-done-right-check-it-out%2F" send="false" layout="button_count" width="100" height="21" show_faces="false" font=""></fb:like></div>
<div class="socialicons s4plusone" style="float:left;margin-right: 10px;"><g:plusone size="medium" href="http://josephsmarr.com/2010/01/25/hipchat-is-consumer-meets-enterprise-done-right-check-it-out/" count="true"></g:plusone></div>
</div>
<div style="clear:both"></div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://josephsmarr.com/2010/01/25/hipchat-is-consumer-meets-enterprise-done-right-check-it-out/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Joseph Smarr has new work info…</title>
		<link>http://josephsmarr.com/2009/12/18/joseph-smarr-has-new-work-info%e2%80%a6/</link>
		<comments>http://josephsmarr.com/2009/12/18/joseph-smarr-has-new-work-info%e2%80%a6/#comments</comments>
		<pubDate>Fri, 18 Dec 2009 19:09:51 +0000</pubDate>
		<dc:creator>joseph</dc:creator>
				<category><![CDATA[Open Social Web]]></category>
		<category><![CDATA[Personal]]></category>
		<category><![CDATA[Plaxo]]></category>

		<guid isPermaLink="false">http://josephsmarr.com/2009/12/18/joseph-smarr-has-new-work-info%e2%80%a6/</guid>
		<description><![CDATA[High on my to-do list for 2010 will be to update my contact info in Plaxo, because I’ll be starting a new job in late January. After nearly 8 amazing years at Plaxo, I’m joining Google to help drive a new company-wide focus on the future of the Social Web. I’m incredibly excited about this [...]]]></description>
			<content:encoded><![CDATA[<p>High on my to-do list for 2010 will be to update my contact info in Plaxo, because I’ll be starting a new job in late January. After nearly 8 amazing years at Plaxo, I’m joining Google to help drive a new company-wide focus on the future of the Social Web. I’m incredibly excited about this unique opportunity to turbo-charge my passionate pursuit of a Social Web that is more open, interoperable, decentralized, and firmly in the control of users.</p>
<p>I’ve worked closely with Google as a partner in opening up the social web for several years, and they’ve always impressed me with their speed and quality of execution, and more importantly, their unwavering commitment to do what’s right for users and for the health of the web at large. Google has made a habit of investing heavily and openly in areas important to the evolution of the web—think Chrome, Android, HTML5, SPDY, PublicDNS, etc. Getting the future of the Social Web right—including identity, privacy, data portability, messaging, real-time data, and a distributed social graph—is just as important, and the industry is at a critical phase where the next few years may well determine the platform we live with for decades  to come. So when Google approached me recently to help coordinate and accelerate their innovation in this area, I could tell by their ideas and enthusiasm that this was an opportunity I couldn’t afford to pass up.</p>
<p>Now, anyone who knows me should immediately realize two things about this decision—first, it in no way reflects a lack of love or confidence from me in Plaxo, and second, I wouldn’t have taken this position if I hadn’t convinced myself that I could have the greatest possible impact at Google. For those that don’t know me as well personally, let me briefly elaborate on both points:</p>
<p>I joined Plaxo back in March of 2002 as their first non-founder employee, before they had even raised their first round of investment. I hadn’t yet finished my Bachelor’s Degree at Stanford, and I’d already been accepted into a <a href="http://josephsmarr.com/2007/01/27/my-stanford-masters-thesis/">research-intensive co-terminal Masters program</a> there, but I was captivated by Plaxo’s founders and their ideas, and I knew I wanted to be a part of their core team. So I spent the first 15 months doing essentially two more-than-full-time jobs simultaneously (and pretty much nothing else).  Since that time, I’ve done a lot of different things for Plaxo—from web development to natural language processing to stats collection and analysis to platform architecture, and most recently, serving as Plaxo’s Chief Technology Officer. Along the way, I’ve had to deal with hiring, firing, growth, lack of growth, good press, bad press, partnerships with companies large and small, acquisitions—both as the acquirer and the acquiree—and rapidly changing market conditions (think about it: we started Plaxo before users had ever heard of flickr, LinkedIn, friendster, Gmail, Facebook, Xobni , Twitter, the iPhone, or any number of other companies, services, and products that radically altered what it means to “stay in touch with the people you know and care about across all the tools and services that you and they use”). When I joined Plaxo, there were four of us. Now we have over 60 employees, and that’s not counting our many alumni. All of this is to make the following plain: Plaxo has been my life, my identity, my passion, and my family for longer than I’ve known my wife, longer than I was at Stanford, and longer than I’ve done just about anything before. Even at a year-and-a-half since our acquisition by Comcast, Plaxo has the same magic and mojo that’s made it a joy and an honor to work for all these years. And with our current team and strategic focus, 2010 promises to be one of the best years yet. So I hope this makes it clear that I was not looking to leave Plaxo anytime soon, and that the decision to do so is one that I did not make lightly.</p>
<p>Of all the things I’ve done at Plaxo over the years, my focus on opening up the Social Web over the past 3+ years is the work I’m proudest of, and the work that I think has had the biggest positive impact—both for Plaxo and the web itself. Actually, it really started way back in 2004, when I first read about <a href="http://www.foaf-project.org/">FOAF</a> and <a href="http://blog.plaxo.com/archives/000007.html">wrote a paper</a> about its challenges from Plaxo’s perspective, for which I was then selected to <a href="http://josephsmarr.com/2007/01/27/foaf-workshop-talk/">speak</a> at my first industry conference, the <a href="http://www.w3.org/2001/sw/Europe/events/foaf-galway/">FOAF Workshop</a> in Galway, Ireland. Since that time, I realized what a special community of people there were that cared about these issues in a web-wide way, and I <a href="http://blog.plaxo.com/archives/2006/12/plaxo_at_the_in.html">tried to participate</a> on the side and in my free time whenever possible. After leading Plaxo’s web development team to build a rich and complex <a href="http://blog.plaxo.com/archives/2007/06/introducing_an.html">new AJAX address book and calendar</a> (something that also reinforced to me the value of community participation and public speaking, albeit on the topic of <a href="http://josephsmarr.com/2007/08/29/my-ajax-talk-is-now-on-yui-theater/">high-performance JavaScript</a>), I knew I wanted to work on the Social Web full-time, and luckily it coincided perfectly with Plaxo’s realization that fulfilling our mission required focusing on more than just Outlook, webmail, and IM as important sources of “people data”. So we crafted a <a href="http://blog.plaxo.com/archives/2007/07/preparing_for_m_1.html">new role</a> for me as Chief Platform Architect, and off I went, turning Plaxo into the <a href="http://blog.plaxo.com/archives/2007/07/plaxo_is_now_op.html">first large-scale OpenID Relying Party</a>, the <a href="http://blog.plaxo.com/archives/2007/11/opensocial_is_n.html">first live OpenSocial container</a>, co-creator of the <a href="http://portablecontacts.net">Portable Contacts</a> spec, <a href="http://josephsmarr.com/2009/02/03/test-driving-the-new-hybrid/">co-creator</a> and <a href="http://www.readwriteweb.com/archives/comcast_property_sees_92_success_rate_openid.php">first successful deployment</a> of <a href="http://sites.google.com/site/oauthgoog/UXFedLogin/hybridonboarding">hybrid onboarding</a> combining OpenID and OAuth, and so on. Along the way I <a href="http://blog.plaxo.com/archives/2007/09/there_is_now_a_1.html">co-authored</a> the <a href="http://opensocialweb.org">Bill of Rights for Users of the Social Web</a>, coined the term <a href="http://therealmccrea.com/2008/09/19/joseph-smarr-at-web-20-on-the-new-open-stack/">Open Stack</a>, was elected to the Boards of both the <a href="http://openid.net/foundation/">OpenID Foundation</a> and <a href="http://www.opensocial.org/page/opensocial-foundation">OpenSocial Foundation</a>, and worked closely with members of the grass-roots community as well as with people at <a href="http://blog.plaxo.com/archives/2008/06/plaxo_and_frien_1.html">Google</a>, <a href="http://blog.plaxo.com/archives/2008/01/plaxo_and_yahoo_1.html">Yahoo</a>, <a href="http://therealmccrea.com/2008/09/11/live-blogging-from-the-portable-contacts-summit/">Microsoft</a>, <a href="http://blog.plaxo.com/archives/2005/11/new_aim_has_pla_1.html">AOL</a>, <a href="http://blog.plaxo.com/archives/2009/04/post_2.html">Facebook</a>, <a href="http://developer.myspace.com/Community/blogs/devteam/archive/2008/10/25/notable-musing-openid-oauth-and-user-experience.aspx">MySpace</a>, <a href="http://blog.plaxo.com/archives/2008/01/announcing_twow.html">Twitter</a>, <a href="http://blog.plaxo.com/archives/2007/04/get_your_plaxo.html">LinkedIn</a>, <a href="http://blog.plaxo.com/archives/2008/10/joseph_rated_ne.html">Netflix</a>, <a href="http://blog.plaxo.com/archives/2009/09/introducing_the_1.html">The New York Times</a>, and others, often as a launch partner or early adopter of their respective forays into supporting these same open standards. And collectively, I think it’s fair to say that our efforts greatly accelerated the arrival, quality, and ubiquity of a Social Web ecosystem that has the potential to be open, decentralized, and interoperable, and that may define the next wave of innovation in this space, much as the birth of the web itself did nearly 20 years ago.</p>
<p>But we’re not done yet. Not by a long shot. And the future is never certain.</p>
<p>At the recent OpenID Summit hosted by Yahoo!, I <a href="http://josephsmarr.com/2009/11/03/what-an-rp-wants-part-2-openid-summit-2009/">gave a talk</a> in which I outlined the current technical and user-experience challenges standing in the way of OpenID becoming truly successful and a “no-brainer” for any service large or small to implement. Despite all the progress that we’ve made over the past few years, and that I’ve proudly contributed to myself, there is no shortage of important challenges left to meet before we can reach our aspirations for the Social Web. There is also no shortage of people committed to “fighting the good fight”, but as with any investment for the future with a return that will be widely shared, most people and companies are forced to make tough trade-offs about whether to focus on what already works today or what may work better tomorrow. There are a lot of good people in a lot of places working on the future of the Social Web, and we need them all and more. But in my experience, Google is unmatched in its commitment to doing what’s right for the future of the web and its willingness to think long-term. One need only look at the current crop of Social Web “building blocks” being actively worked on and deployed by Google—including OpenID, OAuth, Portable Contacts, OpenSocial, PubSubHubbub, Webfinger, Salmon, and more—to see how serious they are. And yet they came to me because they want to turn up the intensity and focus and coordination and boldness even more.</p>
<p>I talked to a lot of Googlers before deciding to join, and from the top to the bottom they really impressed me with how genuinely they believe in this cause that I’m so passionate about, and how strong a mandate I feel throughout the company to do something great here. I also heard over and over how surprisingly easy it still is to get things built and shipped &#8212; both new products, tools, and specs, as well as integrating functionality into Google’s existing services. And, of course, there are so many brilliant and talented people at Google, and so much infrastructure to build on, that I know I’ll have more opportunity to learn and have an impact than I could ever hope to do anywhere else. So while there are other companies large and small (or perhaps not yet in existence) where I could also have some form of positive impact on the future of the Social Web, after looking closely at my options and doing some serious soul searching, I feel confident that Google is the right place for me, and now is the right time.</p>
<p>Let me end by sincerely thanking everyone that has supported me and worked with me not just during this transition process but throughout my career. I consider myself incredibly fortunate to be surrounded by so many amazing people that genuinely want to have a positive impact on the world and want to empower me to do the best that I can to contribute, even it means doing so from inside (or outside) a different company. It’s never easy to make big decisions involving lots of factors and rapidly changing conditions, let alone one with such deep personal and professional relationships at its core. Yet everyone has treated me with such respect, honesty, and good faith, that it fills me with a deep sense of gratitude, and reminds me why I so love living and working in Silicon Valley.</p>
<p>2010 will be an exciting and tumultuous year for the Social Web, and so will it be for me personally. Wish us both luck, and here’s to the great opportunities that lie ahead!
<div class="social4i" style="height:29px;">
<div class="social4in" style="height:29px;float: left;">
<div class="socialicons s4twitter" style="float:left;margin-right: 10px;background:url(&quot;http://goo.gl/zjqd1&quot;) no-repeat;"><a href="http://twitter.com/share" data-url="http://josephsmarr.com/2009/12/18/joseph-smarr-has-new-work-info%e2%80%a6/" data-counturl="http://josephsmarr.com/2009/12/18/joseph-smarr-has-new-work-info%e2%80%a6/" data-text="Joseph Smarr has new work info…" class="twitter-share-button" data-count="horizontal" data-via="jsmarr"></a></div>
<div class="socialicons s4fblike" style="float:left;margin-right: 10px;">
<div id="fb-root"></div>
<p><fb:like href="http%3A%2F%2Fjosephsmarr.com%2F2009%2F12%2F18%2Fjoseph-smarr-has-new-work-info%25e2%2580%25a6%2F" send="false" layout="button_count" width="100" height="21" show_faces="false" font=""></fb:like></div>
<div class="socialicons s4plusone" style="float:left;margin-right: 10px;"><g:plusone size="medium" href="http://josephsmarr.com/2009/12/18/joseph-smarr-has-new-work-info%e2%80%a6/" count="true"></g:plusone></div>
</div>
<div style="clear:both"></div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://josephsmarr.com/2009/12/18/joseph-smarr-has-new-work-info%e2%80%a6/feed/</wfw:commentRss>
		<slash:comments>60</slash:comments>
		</item>
		<item>
		<title>What an RP Wants, Part 2 (OpenID Summit 2009)</title>
		<link>http://josephsmarr.com/2009/11/03/what-an-rp-wants-part-2-openid-summit-2009/</link>
		<comments>http://josephsmarr.com/2009/11/03/what-an-rp-wants-part-2-openid-summit-2009/#comments</comments>
		<pubDate>Tue, 03 Nov 2009 15:39:32 +0000</pubDate>
		<dc:creator>joseph</dc:creator>
				<category><![CDATA[Open Social Web]]></category>
		<category><![CDATA[Papers and Talks]]></category>
		<category><![CDATA[Plaxo]]></category>

		<guid isPermaLink="false">http://josephsmarr.com/2009/11/03/what-an-rp-wants-part-2-openid-summit-2009/</guid>
		<description><![CDATA[What an RP Wants, Part 2 OpenID Summit 2009 (Hosted by Yahoo!) Mountain View, CA November 2, 2009 What an RP Wants, Part 2 Download PPT (2.1 MB) I was invited to give a talk at the OpenID Summit as a follow-up to my talk &#8220;What an RP Wants&#8220;, which I gave in February at [...]]]></description>
			<content:encoded><![CDATA[<p><strong>What an RP Wants, Part 2</strong><br />
<a href="http://openid.eventbrite.com/">OpenID Summit 2009</a> (Hosted by Yahoo!)<br />
Mountain View, CA<br />
November 2, 2009</p>
<div style="width:425px;text-align:left" id="__ss_2407565"><a style="font:14px Helvetica,Arial,Sans-serif;display:block;margin:12px 0 3px 0;text-decoration:underline;" href="http://www.slideshare.net/jsmarr/what-an-rp-wants-part-2" title="What an RP Wants, Part 2">What an RP Wants, Part 2</a><object style="margin:0px" width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=whatanrpwantspart2-091102193444-phpapp02&#038;stripped_title=what-an-rp-wants-part-2" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=whatanrpwantspart2-091102193444-phpapp02&#038;stripped_title=what-an-rp-wants-part-2" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object></div>
<p><a href="http://www.slideshare.net/jsmarr/what-an-rp-wants-part-2/download">Download PPT</a> (2.1 MB)</p>
<p>I was invited to <a href="http://www.slideshare.net/jsmarr/what-an-rp-wants-part-2">give a talk</a> at the OpenID Summit as a follow-up to my talk &#8220;<a href="http://www.slideshare.net/johnmccrea/what-an-rp-wants">What an RP Wants</a>&#8220;, which I gave in February at the OpenID Design Summit. In both cases, I shared my experiences from Plaxo&#8217;s perspective as a web site that is trying to succeed at letting users sign up using accounts they already have on Google, Yahoo, and other OpenID Provider sites. This talk reviewed the progress we&#8217;ve made as a community since February, and laid out the major remaining challenges to making it a truly-successful end-to-end experience to be an OpenID Relying Party (RP).</p>
<p><a href="http://www.flickr.com/photos/56624456@N00/4069934657/"><img align="right" width="240" height="180" src="http://farm3.static.flickr.com/2470/4069934657_99c2cdbd32_m.jpg" alt="" /></a>My basic message was this: we&#8217;ve made a lot of progress, but we&#8217;ve still got a lot left to do. So let&#8217;s re-double our efforts and commit ourselves once again to working together and solving these remaining problems. As much success as OpenID has had to date, its continued relevance is by no means guaranteed. But I remain optimistic because the same group of people that have brought us this far are still engaged, and none of the remaining challenges are beyond our collective ability to solve.</p>
<p>See more coverage of the OpenID Summit, including my talk, at <a href="http://therealmccrea.com/2009/11/03/from-the-openid-summit-what-gets-google-facebook-microsoft-yahoo-and-plaxo-to-work-together-openid/">The Real McCrea</a>.</p>
<p>And here are a couple of video excerpts from my talk:</p>
<p><object width="480" height="295"><param name="movie" value="http://www.youtube.com/v/wHGc-U9SDfI&#038;hl=en&#038;fs=1&#038;"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/wHGc-U9SDfI&#038;hl=en&#038;fs=1&#038;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="295"></embed></object></p>
<p><object width="480" height="295"><param name="movie" value="http://www.youtube.com/v/DgLJveZzMP8&#038;hl=en&#038;fs=1&#038;"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/DgLJveZzMP8&#038;hl=en&#038;fs=1&#038;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="295"></embed></object>
<div class="social4i" style="height:29px;">
<div class="social4in" style="height:29px;float: left;">
<div class="socialicons s4twitter" style="float:left;margin-right: 10px;background:url(&quot;http://goo.gl/zjqd1&quot;) no-repeat;"><a href="http://twitter.com/share" data-url="http://josephsmarr.com/2009/11/03/what-an-rp-wants-part-2-openid-summit-2009/" data-counturl="http://josephsmarr.com/2009/11/03/what-an-rp-wants-part-2-openid-summit-2009/" data-text="What an RP Wants, Part 2 (OpenID Summit 2009)" class="twitter-share-button" data-count="horizontal" data-via="jsmarr"></a></div>
<div class="socialicons s4fblike" style="float:left;margin-right: 10px;">
<div id="fb-root"></div>
<p><fb:like href="http%3A%2F%2Fjosephsmarr.com%2F2009%2F11%2F03%2Fwhat-an-rp-wants-part-2-openid-summit-2009%2F" send="false" layout="button_count" width="100" height="21" show_faces="false" font=""></fb:like></div>
<div class="socialicons s4plusone" style="float:left;margin-right: 10px;"><g:plusone size="medium" href="http://josephsmarr.com/2009/11/03/what-an-rp-wants-part-2-openid-summit-2009/" count="true"></g:plusone></div>
</div>
<div style="clear:both"></div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://josephsmarr.com/2009/11/03/what-an-rp-wants-part-2-openid-summit-2009/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Social Web: An Implementer&#8217;s Guide (Google I/O 2009)</title>
		<link>http://josephsmarr.com/2009/05/29/the-social-web-an-implementers-guide-google-io-2009/</link>
		<comments>http://josephsmarr.com/2009/05/29/the-social-web-an-implementers-guide-google-io-2009/#comments</comments>
		<pubDate>Fri, 29 May 2009 17:14:32 +0000</pubDate>
		<dc:creator>joseph</dc:creator>
				<category><![CDATA[Open Social Web]]></category>
		<category><![CDATA[Papers and Talks]]></category>
		<category><![CDATA[Plaxo]]></category>
		<category><![CDATA[Web development]]></category>

		<guid isPermaLink="false">http://josephsmarr.com/2009/05/29/the-social-web-an-implementers-guide-google-io-2009/</guid>
		<description><![CDATA[The Social Web: An Implementer&#8217;s Guide Google I/O 2009 San Francisco, CA May 28, 2009 The Social Web: An Implementer&#39;s Guide (Google I/O 2009) Download PPT (7.3 MB) Google invited me back for a second year in a row to speak at their developer conference about the state-of-the-art of opening up the social web. While [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://code.google.com/events/io/sessions/SocialWebImplementorsGuide.html"><strong>The Social Web: An Implementer&#8217;s Guide</strong></a><br />
<a href="http://code.google.com/events/io/">Google I/O 2009</a><br />
San Francisco, CA<br />
May 28, 2009</p>
<p>
<div style="width:425px;text-align:left" id="__ss_1507288"><a style="font:14px Helvetica,Arial,Sans-serif;display:block;margin:12px 0 3px 0;text-decoration:underline;" href="http://www.slideshare.net/jsmarr/the-social-web-an-implementers-guide-google-io-2009?type=presentation" title="The Social Web: An Implementer&#39;s Guide (Google I/O 2009)">The Social Web: An Implementer&#39;s Guide (Google I/O 2009)</a><object style="margin:0px" width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=googleio-smarr-2009-090529121903-phpapp01&#038;rel=0&#038;stripped_title=the-social-web-an-implementers-guide-google-io-2009" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=googleio-smarr-2009-090529121903-phpapp01&#038;rel=0&#038;stripped_title=the-social-web-an-implementers-guide-google-io-2009" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object></div>
</p>
<p><a href="http://josephsmarr.com/papers/GoogleIO-Smarr-2009.ppt">Download PPT</a> (7.3 MB)</p>
<p><a href="http://code.google.com/events/io"><img height="36" align="right" width="187" src="http://code.google.com/events/io/images/io2009-sm.png" /></a>Google invited me back for a <a href="http://josephsmarr.com/2008/05/30/opensocial-openid-and-oauth-oh-my-google-io/">second year</a> in a row to speak at their developer conference about the state-of-the-art of opening up the social web. While my talk last year laid out the promise and vision of an interoperable social web ecosystem, this year I wanted to show all the concrete progress we&#8217;ve made as an industry in achieving that goal. So <a href="http://josephsmarr.com/papers/GoogleIO-Smarr-2009.ppt">my talk</a> was full of demos&#8211;signing up for Plaxo with an existing Gmail account in just two clicks, using MySpaceID to jump into a niche music site without a separate sign-up step, ending &#8220;re-friend madness&#8221; by honoring Facebook friend connections on Plaxo (via Facebook Connect), killing the &#8220;password anti-pattern&#8221; with user-friendly contact importers from a variety of large sites (demonstrated with FriendFeed), and sharing activity across sites using Google FriendConnect and Plaxo. Doing live demos is always a risky proposition, especially when they involve cross-site interop, but happily all the demos worked fine and the talk was a big success!</p>
<p>I began my talk by observing that the events of the last year has made it clear: The web is going social, and the social web is going open. By the end of my talk, having showed so many mainstream sites with deep user-friendly and user-friendly interoperability, I decided to go a step further and declare: <strong>The web is now social, and the social web is now open</strong>. You don&#8217;t have to wait any longer to start reaping the benefits. It&#8217;s time to dive in.
</p>
<div class="social4i" style="height:29px;">
<div class="social4in" style="height:29px;float: left;">
<div class="socialicons s4twitter" style="float:left;margin-right: 10px;background:url(&quot;http://goo.gl/zjqd1&quot;) no-repeat;"><a href="http://twitter.com/share" data-url="http://josephsmarr.com/2009/05/29/the-social-web-an-implementers-guide-google-io-2009/" data-counturl="http://josephsmarr.com/2009/05/29/the-social-web-an-implementers-guide-google-io-2009/" data-text="The Social Web: An Implementer&#8217;s Guide (Google I/O 2009)" class="twitter-share-button" data-count="horizontal" data-via="jsmarr"></a></div>
<div class="socialicons s4fblike" style="float:left;margin-right: 10px;">
<div id="fb-root"></div>
<p><fb:like href="http%3A%2F%2Fjosephsmarr.com%2F2009%2F05%2F29%2Fthe-social-web-an-implementers-guide-google-io-2009%2F" send="false" layout="button_count" width="100" height="21" show_faces="false" font=""></fb:like></div>
<div class="socialicons s4plusone" style="float:left;margin-right: 10px;"><g:plusone size="medium" href="http://josephsmarr.com/2009/05/29/the-social-web-an-implementers-guide-google-io-2009/" count="true"></g:plusone></div>
</div>
<div style="clear:both"></div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://josephsmarr.com/2009/05/29/the-social-web-an-implementers-guide-google-io-2009/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Test-Driving the New Hybrid</title>
		<link>http://josephsmarr.com/2009/02/03/test-driving-the-new-hybrid/</link>
		<comments>http://josephsmarr.com/2009/02/03/test-driving-the-new-hybrid/#comments</comments>
		<pubDate>Wed, 04 Feb 2009 07:21:16 +0000</pubDate>
		<dc:creator>joseph</dc:creator>
				<category><![CDATA[Open Social Web]]></category>
		<category><![CDATA[Plaxo]]></category>

		<guid isPermaLink="false">http://josephsmarr.com/2009/02/03/test-driving-the-new-hybrid/</guid>
		<description><![CDATA[The quest to open up the Social Web is quickly shifting from a vision of the future to a vision of the present. Last week we reached an important milestone in delivering concrete benefits to mainstream users from the Open Stack. Together with Google, we released a new way to join Plaxo&#8211;without having to create [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.plaxo.com/archives/2009/01/introducing_two_1.html"><img height="132" src="http://farm4.static.flickr.com/3432/3237416710_f8ee8eccb0_m_d.jpg" width="240" align="right" /></a>The quest to open up the Social Web is quickly shifting from a vision of the future to a vision of the present. Last week we reached an important milestone in delivering concrete benefits to mainstream users from the Open Stack. <a href="http://googledataapis.blogspot.com/2009/01/bringing-openid-and-oauth-together.html">Together with Google</a>, we <a href="http://blog.plaxo.com/archives/2009/01/introducing_two_1.html">released</a> a new way to join Plaxo&#8211;without having to create yet-another-password or give away your existing password to import an address book. We&#8217;re using a newly developed &#8220;<a href="http://step2.googlecode.com/svn/spec/openid_oauth_extension/latest/openid_oauth_extension.html">hybrid protocol</a>&#8221; that blends OpenID and OAuth so Gmail users (or any users of a service supporting these open standards) can, in a single act of consent, create a Plaxo account (using OpenID) and grant access to the data they wish to share with Plaxo (using OAuth).</p>
<p>We&#8217;re testing this new flow on a subset of Plaxo invites sent to @gmail.com users, which means we can send those users through this flow without having to show them a long list of possible Identity Provider choices, and without them having to know their own OpenID URL. The result is a seamless and intuitive experience for users (&#8220;Hey Plaxo, I already use Gmail, use that and don&#8217;t make me start from scratch&#8221;) and an opportunity for both Plaxo and Google to make our services more interoperable while reducing friction and increasing security. I&#8217;m particularly excited about this release because it&#8217;s a great example of &#8220;putting the pieces together&#8221; (combining multiple Open Stack technologies in such a way that the whole is greater than the sum of the parts), and it enables an experience that makes a lot of sense for mainstream users, who tend to think of &#8220;using an existing account&#8221; as a combination of identity (&#8220;I already have a gmail password&#8221;) and data (&#8220;I already have a gmail address book&#8221;). And, of course, because this integration is based on open standards, it will be easy for both Google and Plaxo to turn around and do similiar integrations with other sites, not to mention that the lessons we learn from these experiments will be helpful to any sites that want to build a similar experience.</p>
<p>To learn more about this integration, you can read <a href="http://blog.plaxo.com/archives/2009/01/introducing_two_1.html">Plaxo&#8217;s blog post</a> and the coverage on <a href="http://www.techcrunch.com/2009/01/29/openid-oauth-two-great-tastes-that-taste-great-together/">TechCrunch</a>, <a href="http://venturebeat.com/2009/01/29/google-plaxo-offer-simplified-version-of-friend-connect/">VentureBeat</a>, or <a href="http://www.readwriteweb.com/archives/google_plaxo_openid_oauth_usability.php">ReadWriteWeb</a> (which got syndicated to <a href="http://www.nytimes.com/external/readwriteweb/2009/01/29/29readwriteweb-google_plaxo_openid_oauth_usability.html?scp=1&#038;sq=google%20plaxo%20openid&#038;st=cse">The New York Times</a>, neat!), and of course <a href="http://www.thesocialweb.tv/blog/2009/01/episode-26-google-and-plaxo-address-openid-ux.html">TheSocialWeb.tv</a>. But I thought I&#8217;d take a minute to explain a bit more about how this integration works &#8220;under the hood&#8221;, and also share a bit of the backstory on how it came to be.</p>
<p><strong>Under the hood</strong></p>
<p>For those interested in the details of how the OpenID+OAuth hybrid works, and how we&#8217;re using it at Plaxo, here&#8217;s the meat: it&#8217;s technically an &#8220;OAuth Extension&#8221; for OpenID (using the standard OpenID extension mechanism already used by simple registration and attribute exchange) where the Relying Party asks the Identity Provider for an OAuth Request Token (optionally limited to a specific scope, e.g. &#8220;your address book but not your calendar data&#8221;) as part of the OpenID login process. The OP recognizes this extension and informs the user of the data the RP is requesting as part of the OpenID consent page. If the user consents, the OP sends back a pre-authorized OAuth Request Token in the OpenID response, which the RP can then exchange for a long-lived Access Token following the normal OAuth mechanism.</p>
<p>Note that RPs still need to obtain an OAuth Consumer Key and Secret offline beforehand (we&#8217;ve worked on ways to support unregistered consumers, but they didn&#8217;t make it into the spec yet), but they *don&#8217;t* have to get an Unauthorized Request Token before initiating OpenID login. The point of obtaining a Request Token separately is mainly to enable desktop and mobile OAuth flows, where popping open a web browser and receiving a response isn&#8217;t feasible. But since OpenID login is always happening in a web browser anyway, it makes sense for the OP to generate and pre-authorize the Request Token and return it via OpenID. This also frees the RP from the burden of having to deal with fetching and storing request tokens&#8211;given especially the rise in prominence of &#8220;directed identity&#8221; logins with OpenID (e.g. the RP just shows a &#8220;sign in with your Yahoo! account&#8221; button, which sends the OpenID URL  &#8220;yahoo.com&#8221; and relies on the OP to figure out which user is logging in and return a user-specific OpenID URL in the response), the RP often can&#8217;t tell in advance which user is trying to log in and whether they&#8217;ve logged in before, and thus in the worst case they might otherwise have to generate a Request Token before every OpenID login, even though the majority of such logins won&#8217;t end up doing anything with that token. Furthermore, the OP can feel confident that they&#8217;re not inadvertently giving away access to the user&#8217;s private data to an attacker, because a) they&#8217;re sending the request token back to the openid.return_to URL, which has to match the openid.realm which is displayed to the user (e.g. if the OP says &#8220;Do you trust plaxo.com to see your data&#8221;, they know they&#8217;ll only send the token back to a plaxo.com URL), and b) they&#8217;re only sending the Request Token in the &#8220;front channel&#8221; of the web browser, and the RP still has to exchange it for an Access Token on the &#8220;back channel&#8221; of direct server-to-server communication, which also requires signing with a Consumer Secret. In summary, the hybrid protocol is an elegant blend of OpenID and OAuth that is relatively efficient on the wire and at least as secure as each protocol on their own, if not more so.</p>
<p>Once a user signs up for Plaxo using the hybrid protocol, we can create an account for them that&#8217;s tied to their OpenID (using the <a href="http://www.plaxo.com/api/openid_recipe">standard recipe</a>) and then attach the OAuth Access Token/Secret to the new user&#8217;s account. Then instead of having to ask the user to choose from a list of webmail providers to import their address book from, we see that they already have a valid Gmail OAuth token and we can initiate an automatic import for them&#8211;no passwords required! (We&#8217;re currently using Google&#8217;s <a href="http://code.google.com/apis/contacts/">GData Contacts API</a> for the import, but as I <a href="http://josephsmarr.com/2008/12/31/portable-contacts-the-half-year-in-review/">demoed in December</a> at the <a href="http://therealmccrea.com/2008/12/20/for-posterity-the-first-ever-open-stack-meetup/">Open Stack Meetup</a>, soon we will be able to use <a href="http://portablecontacts.net">Portable Contacts</a> instead, completing a pure Open Stack implementation.) Finally, when the user has finished setting up their Plaxo account, we show them a one-time &#8220;education page&#8221; that tells them to click &#8220;Sign in with your Google account&#8221; next time they return to Plaxo, rather than typing in a Plaxo-specific email and password (since they don&#8217;t have one).</p>
<p>However, because Google&#8217;s OP supports checkid_immediate, and because Plaxo sets a cookie when a user logs in via OpenID, in most cases we can invisibly and automatically keep the user logged into Plaxo as long as they&#8217;re still logged into Gmail. Specifically, if the user is not currently logged into Plaxo, but they previously logged in via OpenID, we attempt a checkid_immediate login (meaning we redirect to the OP and ask them if the user is currently logged in, and the OP immediately redirects back to us and tells us one way or the other). If we get a positive response, we log the user into Plaxo again, and as far as the user can tell, they were never signed out. If we get a negative response, we set a second cookie to remember that checkid_immediate failed, so we don&#8217;t try it again until the user successfully signs in. But the net result is that even though the concept of logging into Plaxo using your Google account may take some getting used to for mainstream users, most users will just stay automatically logged into Plaxo (as long as they stay logged into Gmail, which for most Gmail users is nearly always).</p>
<p><strong>The backstory</strong></p>
<p>The concept of combining OpenID and OAuth has been around for over a year. After all, they share a similar user flow (bounce over to provider, consent, bounce back to consumer with data), and they&#8217;re both technologies for empowering users to connect the websites they use (providing the complementary capabilities of Authentication and Authorization, respectively). <a href="http://www.davidrecordon.com">David Recordon</a> and I took a first stab at specifying an OpenID OAuth Extension many months ago, but the problem was there were no OpenID Providers that also supported OAuth-protected APIs yet, so it wasn&#8217;t clear who could implement the spec and help work out the details. (After all, OAuth itself was only finalized as a spec in December 07!). But then Google started supporting OAuth for its GData APIs, and they subsequently became an OpenID provider. Yahoo! also became hybrid-eligible (actually, they became an OpenID provider before Google, and added OAuth support later as part of Y!OS), and MySpace adopted OAuth for its APIs and shared their plans to become an OpenID provider as part of their MySpaceID initiative. Suddenly, there was renewed interest in finishing up the hybrid spec, and this time it was from people in a position to get the details right and then ship it.</p>
<p>The Google engineers had a bunch of ideas about clever ways to squeeze out extra efficiency when combining the two protocols (e.g. piggybacking the OAuth Request Token call on the OpenID associate call, or piggybacking the OAuth Access Token call on the OpenID check_authentication call). They also pointed out that given their geographically distributed set of data centers, their &#8220;front channel&#8221; and &#8220;back channel&#8221; servers might be on separate continents, so assuming that data could instantly be passed between them (e.g. generating a request token in one data center and then immediately showing it on an authorization page from another data center) wouldn&#8217;t be trivial (the solution is to use a deterministically encrypted version of the token as its own secret, rather than storing that in a database or distributed cache). As we considered these various proposals, the tension was always between optimizing for efficiency vs. &#8220;composability&#8221;&#8211;there were already a decent number of standalone OpenID and OAuth implementations in the wild, and ideally combining them shouldn&#8217;t require drastic modifications to either one. In practice, that meant giving up on a few extra optimizations to decrease overall complexity and increase the ease of adoption&#8211;a theme that&#8217;s guided many of the Open Stack technologies. As a proof of the progress we made on that front, the hybrid implementation we just rolled out used our existing OpenID implementation as is, and our existing OAuth implementation as is (e.g. that we also used for our recent <a href="http://blog.plaxo.com/archives/2008/10/joseph_rated_ne.html">Netflix integration</a>), with no modifications required to either library. All we did was add the new OAuth extension to the OpenID login, as well as some simple logic to determine when to ask for an OAuth token and when to attach the token to the newly created user. Hurrah!</p>
<p><a href="http://therealmccrea.com/2008/11/12/more-photos-from-day-two-of-iiw/"><img height="180" src="http://farm4.static.flickr.com/3285/3024869907_c36b50e56c_m_d.jpg" width="240" align="right" /></a>A few more drafts of the hybrid spec were floated around for a couple months, but there were always a few nagging issues that kept us from feeling that we&#8217;d nailed it. Then came the <a href="http://josephsmarr.com/2008/11/10/a-new-open-stack-greater-than-the-sum-of-its-parts-internet-identity-workshop-2008b/">Internet Identity Workshop</a> in November, where we held a session on the state of the hybrid protocol to get feedback from the larger community. There was consensus that we were on the right track, and that this was indeed worth pursuing, but the nagging issues remained. Until that night, when as in IIW tradition we all went to the nearby Monte Carlo bar and restaurant for dinner and drinks. Somehow I ended up at a booth with the OpenID guys from Google, Yahoo, and Microsoft, and we started rehashing those remaining issues and thinking out loud together about what to do. Somehow everything started falling into place, and one by one we started finding great solutions to our problems, in a cascade that kept re-energizing us to keep working and keep pushing. Before I knew it, it was after midnight and I&#8217;d forgotten to ever eat any dinner, but by George we&#8217;d done it! I drove home and frantically wrote up as many notes from the evening as I could remember. I wasn&#8217;t sure what to fear more&#8211;that I would forget the breakthroughs that we&#8217;d made that night, or that I would wake up the next morning and realize that what we&#8217;d come up with in our late night frenzy was in fact totally broken. <img src='http://josephsmarr.com/wordpress/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Thankfully, neither of those things happened, and we ended up with the spec we&#8217;ve got today (plus a few extra juicy insights that have yet to materialize).</p>
<p>It just goes to show that there&#8217;s still no substitute for locking a bunch of people in a room for hours at a time to focus on a problem. (Though in this case, we weren&#8217;t so much locked in as enticed to stay with additional drink tickets, heh.) And it also shows the power of collaborating across company lines by developing open community standards that everyone can benefit from (and thus everyone is incentivized to contribute to). It was one of those amazing nights that makes me so proud and grateful to work in this community of passionate folks trying to put users in control of their data and truly open up the Social Web.</p>
<p><strong>What&#8217;s next?</strong></p>
<p>Now that we&#8217;ve released this first hybrid experiment, it&#8217;s time to analyze the results and iterate to perfection (or as close as we can get). While it&#8217;s too early to report on our findings thus far, let me just say that I&#8217;m *very* encouraged by the early results we&#8217;re seeing. <img src='http://josephsmarr.com/wordpress/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  Stay tuned, because we&#8217;ll eagerly share what we&#8217;ve learned as soon as we&#8217;ve had time to do a careful analysis. I foresee this type of onboarding becoming the norm soon&#8211;not just for Plaxo, but for a large number of sites that want to streamline their signup process. And of course the best of part of doing this all with open standards is that everyone can learn along with us and benefit from each other&#8217;s progress. Things are really heating up and I couldn&#8217;t be more excited to keep forging ahead here!
</p>
<p align="center"><object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="437" height="288" id="viddler_8ddb9e75"><param name="movie" value="http://www.viddler.com/player/8ddb9e75/" /><param name="allowScriptAccess" value="always" /><param name="allowFullScreen" value="true" /><embed src="http://www.viddler.com/player/8ddb9e75/" width="437" height="288" type="application/x-shockwave-flash" allowScriptAccess="always" allowFullScreen="true" name="viddler_8ddb9e75" ></embed></object></p>
<div class="social4i" style="height:29px;">
<div class="social4in" style="height:29px;float: left;">
<div class="socialicons s4twitter" style="float:left;margin-right: 10px;background:url(&quot;http://goo.gl/zjqd1&quot;) no-repeat;"><a href="http://twitter.com/share" data-url="http://josephsmarr.com/2009/02/03/test-driving-the-new-hybrid/" data-counturl="http://josephsmarr.com/2009/02/03/test-driving-the-new-hybrid/" data-text="Test-Driving the New Hybrid" class="twitter-share-button" data-count="horizontal" data-via="jsmarr"></a></div>
<div class="socialicons s4fblike" style="float:left;margin-right: 10px;">
<div id="fb-root"></div>
<p><fb:like href="http%3A%2F%2Fjosephsmarr.com%2F2009%2F02%2F03%2Ftest-driving-the-new-hybrid%2F" send="false" layout="button_count" width="100" height="21" show_faces="false" font=""></fb:like></div>
<div class="socialicons s4plusone" style="float:left;margin-right: 10px;"><g:plusone size="medium" href="http://josephsmarr.com/2009/02/03/test-driving-the-new-hybrid/" count="true"></g:plusone></div>
</div>
<div style="clear:both"></div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://josephsmarr.com/2009/02/03/test-driving-the-new-hybrid/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Portable Contacts: The (Half) Year in Review</title>
		<link>http://josephsmarr.com/2008/12/31/portable-contacts-the-half-year-in-review/</link>
		<comments>http://josephsmarr.com/2008/12/31/portable-contacts-the-half-year-in-review/#comments</comments>
		<pubDate>Wed, 31 Dec 2008 21:50:36 +0000</pubDate>
		<dc:creator>joseph</dc:creator>
				<category><![CDATA[Open Social Web]]></category>
		<category><![CDATA[Papers and Talks]]></category>
		<category><![CDATA[Plaxo]]></category>

		<guid isPermaLink="false">http://josephsmarr.com/2008/12/31/portable-contacts-the-half-year-in-review/</guid>
		<description><![CDATA[I&#8217;m excited and humbled by the amazing progress we&#8217;ve made this year on Portable Contacts, which started out as little more than a few conversations and an aspirational PowerPoint deck this summer. We&#8217;ve now got a great community engaged around solving this problem (from companies large and small as well as from the grass-roots), we [...]]]></description>
			<content:encoded><![CDATA[<p><img height="180" align="right" width="240" src="http://farm4.static.flickr.com/3021/3023286822_ae2c14bcb3_m_d.jpg" />I&#8217;m excited and humbled by the amazing progress we&#8217;ve made this year on <a href="http://portablecontacts.net">Portable Contacts</a>, which started out as little more than a few conversations and an aspirational PowerPoint deck this summer. We&#8217;ve now got a <a href="http://groups.google.com/group/portablecontacts">great community</a> engaged around solving this problem (from companies large and small as well as from the grass-roots), we had a successful <a href="http://therealmccrea.com/2008/09/11/live-blogging-from-the-portable-contacts-summit/">Portable Contacts Summit</a> together, we&#8217;ve got a <a href="http://portablecontacts.net/draft-spec.html">draft spec</a> that&#8217;s getting pretty solid, we&#8217;ve got several implementations <a href="http://www.plaxo.com/api/portablecontacts">in</a> <a href="http://www.8bitkid.com/2008/11/16/some-footage-from-the-road/">the</a> <a href="http://code.google.com/p/jpoco">wild</a> (with many more in the works), we&#8217;ve achieved <a href="http://www.alleyinsider.com/2008/9/portable-contacts-could-be-the-final-piece-of-opensocial">wire-alignment</a> with <a href="http://www.opensocial.org/Technical-Resources/opensocial-spec-v081/restful-protocol">OpenSocial&#8217;s RESTful people API</a>, and we&#8217;ve seen how Portable Contacts when combined with other &#8220;open building blocks&#8221; like OpenID, OAuth, and XRD creates a compelling &#8220;Open Stack&#8221; that is <a href="http://josephsmarr.com/2008/11/10/a-new-open-stack-greater-than-the-sum-of-its-parts-internet-identity-workshop-2008b/">more than the sum of its parts</a>.</p>
<p>At the recent <a href="http://therealmccrea.com/2008/12/20/for-posterity-the-first-ever-open-stack-meetup/">Open Stack Meetup</a> hosted by Digg, I gave a presentation on <a href="http://therealmccrea.com/2008/12/31/optimism-for-2009-joseph-smarr-demos-the-near-future-of-the-social-web-on-the-open-stack/">the state of Portable Contacts</a>, along with several demos of Portable Contacts in action (and our crew from <a href="http://thesocialweb.tv">thesocialweb.tv</a> was on hand to film the <a href="http://www.viddler.com/explore/redgee/videos/">entire set of talks</a>). In addition to showing Portable Contacts working with Plaxo, MySpace, OpenSocial, and twitter (via hCard->vCard->PoCo transformers), I was thrilled to be able to give the first public demo of Portable Contacts working live with Gmail. Better still, I was able to demo Google&#8217;s hybrid OpenID+OAuth onboarding plus OAuth-protected Portable Contacts Gmail API. In other words, in one fell swoop I was able to sign up for a Plaxo account using my existing Google account, and I was able to bring over my google credentials, my pre-validated gmail.com e-mail address, and my gmail address book&#8211;all at once, and all in an open, secure and vendor-neutral way. Now that&#8217;s progress worth celebrating!</p>
<p align="center"><object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="437" height="288" id="viddler_530970b8"><param name="movie" value="http://www.viddler.com/player/530970b8/" /><param name="allowScriptAccess" value="always" /><param name="allowFullScreen" value="true" /><embed src="http://www.viddler.com/player/530970b8/" width="437" height="288" type="application/x-shockwave-flash" allowScriptAccess="always" allowFullScreen="true" name="viddler_530970b8" ></embed></object></p>
<p>I have no doubt that we&#8217;re on the cusp of what will become the default way to interact with most new websites going forward. The idea that you had to re-create an account, password, profile, and friends-list on every site that you wanted to check out, and that none of that data or activity flowed with you across the tools you used, will soon seem archaic and quaint. And if you think we came a long way in 2008, you ain&#8217;t seen nothing yet! There has never been more momentum, more understanding, and more consolidated effort behind opening up the social web, and the critical pieces&#8211;yes, including Portable Contacts&#8211;are all but in place. 2009 is going to be a very exciting year indeed!</p>
<p>So let me close out this amazing year by saying Thank You to everyone that&#8217;s contributed to this movement. Your passion is infectious and your efforts are all having a major and positive impact on the web. I feel increddibly fortunate to participate in this movement, and I know our best days are still ahead of us. Happy New Year!
</p>
<div class="social4i" style="height:29px;">
<div class="social4in" style="height:29px;float: left;">
<div class="socialicons s4twitter" style="float:left;margin-right: 10px;background:url(&quot;http://goo.gl/zjqd1&quot;) no-repeat;"><a href="http://twitter.com/share" data-url="http://josephsmarr.com/2008/12/31/portable-contacts-the-half-year-in-review/" data-counturl="http://josephsmarr.com/2008/12/31/portable-contacts-the-half-year-in-review/" data-text="Portable Contacts: The (Half) Year in Review" class="twitter-share-button" data-count="horizontal" data-via="jsmarr"></a></div>
<div class="socialicons s4fblike" style="float:left;margin-right: 10px;">
<div id="fb-root"></div>
<p><fb:like href="http%3A%2F%2Fjosephsmarr.com%2F2008%2F12%2F31%2Fportable-contacts-the-half-year-in-review%2F" send="false" layout="button_count" width="100" height="21" show_faces="false" font=""></fb:like></div>
<div class="socialicons s4plusone" style="float:left;margin-right: 10px;"><g:plusone size="medium" href="http://josephsmarr.com/2008/12/31/portable-contacts-the-half-year-in-review/" count="true"></g:plusone></div>
</div>
<div style="clear:both"></div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://josephsmarr.com/2008/12/31/portable-contacts-the-half-year-in-review/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Web 2.0/Web 3.0 Mashup (EmTech08)</title>
		<link>http://josephsmarr.com/2008/09/26/web-20web-30-mashup-emtech08/</link>
		<comments>http://josephsmarr.com/2008/09/26/web-20web-30-mashup-emtech08/#comments</comments>
		<pubDate>Fri, 26 Sep 2008 21:03:50 +0000</pubDate>
		<dc:creator>joseph</dc:creator>
				<category><![CDATA[Open Social Web]]></category>
		<category><![CDATA[Papers and Talks]]></category>
		<category><![CDATA[Plaxo]]></category>

		<guid isPermaLink="false">http://josephsmarr.com/2008/09/26/web-20web-30-mashup-emtech08/</guid>
		<description><![CDATA[Web 2.0/Web 3.0 Mashup Emerging Technologies Conference at MIT (EmTech08) Boston, MA September 24, 2008 I was invited to speak on a panel at EmTech, the annual conference on emerging technologies put on by MIT&#8217;s TechnologyReview Magazine, on the future of the web. The conference spans many disciplines (alternative energy, cloud computing, biotech, mobile, etc.) [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Web 2.0/Web 3.0 Mashup<br />
</strong><a href="http://www.technologyreview.com/emtech/08/schedule.aspx">Emerging Technologies Conference at MIT (EmTech08)<br />
</a>Boston, MA<br />
September 24, 2008</p>
<p><a href="http://valleywag.com/5054374/a-gigantic-picture-of-robert-scoble-for-no-reason"><img width="158" height="126" align="right" alt="Attribution: Valleywag" src="http://cache.gawker.com/assets/images/34/2008/09/thumb160x_custom_1222287053299_scoblehuge.jpg" /></a>I was invited to speak on a panel at EmTech, the annual conference on emerging technologies put on by MIT&#8217;s TechnologyReview Magazine, on the future of the web. The conference spans many disciplines (alternative energy, cloud computing, biotech, mobile, etc.) and we were the representatives of the consumer internet, which was quite a humbling task! <a href="http://www.scobleizer.com">Robert Scoble</a> moderated the panel, which featured me, <a href="http://davidrecordon.com">David Recordon</a>, <a href="http://www.facebook.com/people/Dave_Morin/10200882">Dave Morin</a>, and <a href="http://novaspivack.typepad.com/">Nova Spivak</a>.</p>
<p>It was a loose and lively back-and-forth discussion of the major trends we see on the web today: it&#8217;s going social, it&#8217;s going open, it&#8217;s going real-time, and it&#8217;s going ubiquitous. These trends are all working together: it&#8217;s now common (at least in silicon valley) to use your iPhone on the go to see what articles/restaurants/etc your friends have recommended from a variety of distributed tools, aggregated via FriendFeed, Plaxo Pulse, or Facebook. A lot of the vision behind the Semantic Web (structured data enabling machine-to-machine communication on a user&#8217;s behalf) is now happening, but it&#8217;s doing so bottoms-up, with open standards that let users easily create content online and share it with people they know. As the audience could clearly tell from our passionate and rapid-fire remarks, this is an exciting and important time for the web.</p>
<p>We got lots of positive feedback on our panel from attendees (and also <a href="http://twitter.com/johnatoreilly/statuses/933449727">via</a> <a href="http://twitter.com/ValeskaUXBoston/statuses/936112227">twitter</a>, of course), as well as from the TR staff. We even received the distinct honor of attracting snarky posts from both <a href="http://valleywag.com/5054374/a-gigantic-picture-of-robert-scoble-for-no-reason">Valleywag</a> and <a href="http://realdanlyons.com/blog/2008/09/24/emtech-inanity/">Fake Steve Jobs</a> (if you don&#8217;t know the valley, trust me: that&#8217;s a good thing). You can watch a <a href="https://www.veodia.com/site/getBlogEmbed.php?fileid=1167011489&#038;type=1&#038;checked=1">video</a> of the entire panel on TechnologyReview&#8217;s <a href="https://www.technologyreview.com/emtech/videos/08/?page=reg2&#038;redi=T">website</a>.</p>
<p><a href="http://www.technologyreview.com/magazine/136/"><img width="114" height="146" align="right" src="http://www.technologyreview.com/images/covers/m_0807.gif" /></a>I must say I&#8217;m quite impressed with TechnologyReview and EmTech. They do a good job of pulling together interesting people and research from a variety of technical frontiers and making it generally accessible but not dumbed-down. The <a href="http://www.technologyreview.com/Infotech/20920/?a=f">piece they wrote recently</a> on opening up the social web (which featured a <a href="http://www.technologyreview.com/files/17731/0708-PLAXO_x220.jpg">full page photo</a> of yours-truly diving into a large bean bag) was perhaps the most insightful mainstream coverage to date of our space. They gave me a free one-year subscription to TR for speaking at EmTech, and I&#8217;ll definitely enjoy reading it. Here&#8217;s looking forward to EmTech09!
<div class="social4i" style="height:29px;">
<div class="social4in" style="height:29px;float: left;">
<div class="socialicons s4twitter" style="float:left;margin-right: 10px;background:url(&quot;http://goo.gl/zjqd1&quot;) no-repeat;"><a href="http://twitter.com/share" data-url="http://josephsmarr.com/2008/09/26/web-20web-30-mashup-emtech08/" data-counturl="http://josephsmarr.com/2008/09/26/web-20web-30-mashup-emtech08/" data-text="Web 2.0/Web 3.0 Mashup (EmTech08)" class="twitter-share-button" data-count="horizontal" data-via="jsmarr"></a></div>
<div class="socialicons s4fblike" style="float:left;margin-right: 10px;">
<div id="fb-root"></div>
<p><fb:like href="http%3A%2F%2Fjosephsmarr.com%2F2008%2F09%2F26%2Fweb-20web-30-mashup-emtech08%2F" send="false" layout="button_count" width="100" height="21" show_faces="false" font=""></fb:like></div>
<div class="socialicons s4plusone" style="float:left;margin-right: 10px;"><g:plusone size="medium" href="http://josephsmarr.com/2008/09/26/web-20web-30-mashup-emtech08/" count="true"></g:plusone></div>
</div>
<div style="clear:both"></div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://josephsmarr.com/2008/09/26/web-20web-30-mashup-emtech08/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tying it All Together: Implementing the Open Web (Web 2.0 Expo New York)</title>
		<link>http://josephsmarr.com/2008/09/22/tying-it-all-together-implementing-the-open-web-web-20-expo-new-york/</link>
		<comments>http://josephsmarr.com/2008/09/22/tying-it-all-together-implementing-the-open-web-web-20-expo-new-york/#comments</comments>
		<pubDate>Mon, 22 Sep 2008 21:54:00 +0000</pubDate>
		<dc:creator>joseph</dc:creator>
				<category><![CDATA[Open Social Web]]></category>
		<category><![CDATA[Papers and Talks]]></category>
		<category><![CDATA[Plaxo]]></category>

		<guid isPermaLink="false">http://josephsmarr.com/2008/09/22/tying-it-all-together-implementing-the-open-web-web-20-expo-new-york/</guid>
		<description><![CDATA[Tying it All Together: Implementing the Open Web Web 2.0 Expo New York New York, NY September 19, 2008 Download PPT (7.2 MB) I gave the latest rev of my talk on how the social web is opening up and how the various building blocks (OpenID, OAuth, OpenSocial, PortableContacts, XRDS-Simple, Microformats, etc.) fit together to [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Tying it All Together: Implementing the Open Web<br />
</strong><a href="http://en.oreilly.com/webexny2008/public/schedule/detail/5034">Web 2.0 Expo New York</a><br />
New York, NY<br />
September 19, 2008</p>
<p><a href="http://josephsmarr.com/papers/Smarr-Web2ExpoNY08.ppt">Download PPT</a> (7.2 MB)</p>
<p><a href="http://josephsmarr.com/papers/Smarr-Web2ExpoNY08.ppt"><img width="240" height="180" align="right" src="http://farm4.static.flickr.com/3213/2870475475_2a07a2b107_m_d.jpg" /></a>I gave the latest rev of my talk on how the social web is opening up and how the various building blocks (OpenID, OAuth, OpenSocial, PortableContacts, XRDS-Simple, Microformats, etc.) fit together to create a new social web ecosystem. Thanks to <a href="http://www.krisjordan.com/2008/09/19/joseph-smarr-tying-it-all-together-implementing-the-open-web/">Kris Jordan</a>,  <a href="http://ekive.blogspot.com/2008/09/geeking-out-at-web-20-expo.html">Mark Scrimshire</a>, and <a href="http://tropedesign.wordpress.com/2008/09/19/tying-it-all-together-implementing-the-open-web/">Steve Kuhn</a> for writing up detailed notes of what I said. Given that my talk was scheduled for the last time slot on the last day of the conference, it was well attended and the audience was <a href="http://webexny2008.crowdvine.com/talks/show/1728">enthusiastic and engaged</a>, which I always take as a good sign.</p>
<p><a href="http://flickr.com/photos/56624456@N00/2869986857/"><img width="240" height="172" align="right" src="http://farm4.static.flickr.com/3075/2869986857_3a22ababf7_m_d.jpg" /></a>I think the reason that people are reacting so positively to this message (besides the fact that I&#8217;m getting better with practice at explaining these often complex technologies in a coherent way!) is that it&#8217;s becoming more real and more important every day. It&#8217;s amazing to me how much has happened in this space even since <a href="http://josephsmarr.com/2008/05/30/opensocial-openid-and-oauth-oh-my-google-io/">my last talk</a> on this subject at Google I/O in May (I know because I had to update my slides considerably since then!). Yahoo has staked its future on <a href="http://www.thesocialweb.tv/blog/2008/09/episode-10-yaho.html">going radically open</a> with Y!OS, and it&#8217;s using the &#8220;open stack&#8221; to do it. MySpace hosted our <a href="http://therealmccrea.com/2008/09/11/live-blogging-from-the-portable-contacts-summit/">Portable Contacts Summit</a> (an important <a href="http://radar.oreilly.com/2008/09/portable-contacts-api-starts-t.html">new building block</a>), and is using OpenID, OAuth, and OpenSocial for it&#8217;s &#8220;data availability&#8221; platform. Google now uses OAuth for all of its GData APIs. These are three of the biggest, most mainstream consumer web businesses around, and they&#8217;re all going social and open in a big way.</p>
<p>At the same time, the proliferation of new socially-enabled services continues unabated. This is why users and developers are increasingly receptive to an <a href="http://openwebfoundation.org/">Open Web</a> in which the need to constantly re-create and maintain accounts, profiles, friends-lists, and activity streams is reduced. And even though some large sites like Facebook continue to push a proprietary stack, they too see the value of letting their users take their data with them across the social web (which is precisely what Facebook Connect does). Thus all the major players are aligned in their view of the emerging &#8220;social web ecosystem&#8221; in which Identity Providers, Social Graph Providers, and Content Aggregators will help users interact with the myriad social tools we all want to use.</p>
<p>So basically: everyone agrees on the architecture, most also agree on the open building blocks, and nothing prevents the holdouts from going open if/when they decide it&#8217;s beneficial or inevitable. This is why I&#8217;m so optimistic and excited to be a part of this movement, and it&#8217;s why audiences are so glad to hear the good news.</p>
<p>PS: Another positive development since my last talk is that we&#8217;re making great progress on actually implementing the &#8220;open stack&#8221; end-to-end. One of the most <a href="http://portablecontactsdemo.janrain.com/">compelling demos</a> I&#8217;ve seen is by <a href="http://brianellin.com">Brian Ellin</a> of JanRain, which shows how a user can sign up for a new site and provide access to their private address book, all in a seamless and vendor-neutral way!
<div class="social4i" style="height:29px;">
<div class="social4in" style="height:29px;float: left;">
<div class="socialicons s4twitter" style="float:left;margin-right: 10px;background:url(&quot;http://goo.gl/zjqd1&quot;) no-repeat;"><a href="http://twitter.com/share" data-url="http://josephsmarr.com/2008/09/22/tying-it-all-together-implementing-the-open-web-web-20-expo-new-york/" data-counturl="http://josephsmarr.com/2008/09/22/tying-it-all-together-implementing-the-open-web-web-20-expo-new-york/" data-text="Tying it All Together: Implementing the Open Web (Web 2.0 Expo New York)" class="twitter-share-button" data-count="horizontal" data-via="jsmarr"></a></div>
<div class="socialicons s4fblike" style="float:left;margin-right: 10px;">
<div id="fb-root"></div>
<p><fb:like href="http%3A%2F%2Fjosephsmarr.com%2F2008%2F09%2F22%2Ftying-it-all-together-implementing-the-open-web-web-20-expo-new-york%2F" send="false" layout="button_count" width="100" height="21" show_faces="false" font=""></fb:like></div>
<div class="socialicons s4plusone" style="float:left;margin-right: 10px;"><g:plusone size="medium" href="http://josephsmarr.com/2008/09/22/tying-it-all-together-implementing-the-open-web-web-20-expo-new-york/" count="true"></g:plusone></div>
</div>
<div style="clear:both"></div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://josephsmarr.com/2008/09/22/tying-it-all-together-implementing-the-open-web-web-20-expo-new-york/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>OpenSocial, OpenID, and OAuth! Oh, My! (Google I/O)</title>
		<link>http://josephsmarr.com/2008/05/30/opensocial-openid-and-oauth-oh-my-google-io/</link>
		<comments>http://josephsmarr.com/2008/05/30/opensocial-openid-and-oauth-oh-my-google-io/#comments</comments>
		<pubDate>Fri, 30 May 2008 15:43:15 +0000</pubDate>
		<dc:creator>jsmarr</dc:creator>
				<category><![CDATA[Open Social Web]]></category>
		<category><![CDATA[Papers and Talks]]></category>
		<category><![CDATA[Plaxo]]></category>

		<guid isPermaLink="false">http://josephsmarr.com/2008/05/30/opensocial-openid-and-oauth-oh-my-google-io/</guid>
		<description><![CDATA[OpenSocial, OpenID, and OAuth! Oh, My! Google I/O San Francisco, CA May 29, 2008 Download PPT (7.3 MB) Update: Google has posted a full-length video of my talk, along with a web-friendly copy of my slides. I was one of only a few non-Google employees who was invited to give a talk at Google&#8217;s big [...]]]></description>
			<content:encoded><![CDATA[<p><strong>OpenSocial, OpenID, and OAuth! Oh, My!<br />
</strong><a href="http://code.google.com/events/io/">Google I/O</a><br />
San Francisco, CA<br />
May 29, 2008</p>
<p><a href="http://josephsmarr.com/papers/GoogleIO-Smarr.ppt">Download PPT</a> (7.3 MB)</p>
<p><strong>Update</strong>: Google has posted a <a href="http://sites.google.com/site/io/opensocial-openid-and-oauth-oh-my">full-length video of my talk</a>, along with a web-friendly copy of my slides.</p>
<p><a title="Giving my talk: " href="http://flickr.com/photos/jsmarr/sets/72157605333057181/"><img width="240" height="180" align="right" alt="Giving my talk: " src="http://farm4.static.flickr.com/3235/2534897505_da4b3c1f30_m.jpg" /></a>I was one of only a few non-Google employees who was invited to give a talk at Google&#8217;s big developer conference, <a href="http://code.google.com/events/io">Google I/O</a>, in San Francisco. This was a huge event, and Google clearly went all-out on design and production. Not only were there a ton of talks and an amazing reception party, the open spaces were filled with colorful balls, beanbags, drink and snack stations (including made-to-order giant pretzels with salt), pool tables, demo areas, and more. This definitely felt like being inside the Googleplex.</p>
<p><a title="Chilling in Google's beanbag chairs by josephsmarr, on Flickr" href="http://www.flickr.com/photos/jsmarr/2535710070/"><img width="240" height="180" align="right" alt="Chilling in Google's beanbag chairs" src="http://farm4.static.flickr.com/3088/2535710070_b452653022_m.jpg" /></a>Most of the talks focused on a particular Google API, product, or service, and they were organized into tracks like &#8220;Maps &#038; Geo&#8221;, &#8220;Mobile&#8221;, and of course &#8220;Social&#8221;, where my talk lived. Not surprisingly, most of the Social talks focused on OpenSocial, and originally I was asked to present as an OpenSocial container (on behalf of Plaxo). When I suggested that I could probably add even more value by talking about all the other building blocks of the open social web and how they complement OpenSocial, they were enthusiastic, and so my talk was born. I got to do a <a href="http://josephsmarr.com/2008/04/23/data-portability-privacy-and-the-emergence-of-the-social-web-web-20-expo/">first version</a> of a talk on this theme at Web 2.0 Expo in April, but enough things had changed in the world since last month that I had to do quite a bit of revising and adding to that talk for Google I/O (a sign of how quickly things are moving in this space!)</p>
<p><a title="Open Social Web pool classic by josephsmarr, on Flickr" href="http://www.flickr.com/photos/jsmarr/2535710180/"><img width="240" height="180" align="right" alt="Open Social Web pool classic" src="http://farm4.static.flickr.com/3009/2535710180_81c7f68c17_m.jpg" /></a>I gave my talk on Thursday morning and the room was literally packed to the walls. Several people came up to me afterwards and lamented that they&#8217;d tried to get in but were turned away because the room was already over capacity. Wow, I guess people really do want to understand how the social web is opening up! I was very pleased with how the talk went, judging both by the positive feedback I received (in person and in <a href="http://twitter.com/atonse/statuses/822733958">tweets</a>) and by the long and engaged Q&#038;A session that followed for more than half an hour after the talk officially ended. Interestingly, 100% of the questions were about the details of how these technologies work and how to best apply them, rather than whether opening up the social web is a good idea in the first place or whether it&#8217;s feasible. Granted, this was a developer conference, but it&#8217;s still a strong indication to me of the momentum that our movement has generated, and the increasing extent to which people view it as both inevitable and good. We&#8217;re definitely making progress, and I couldn&#8217;t be more excited to keep pushing forward!</p>
<p><strong>Update</strong>: My partner-in-crime John McCrea has <a href="http://therealmccrea.com/2008/05/30/openid-oauth-opensocial-oh-my-joseph-smarr-at-google-io/">coverage of my talk</a>, including photos and a video clip he shot towards the end of my talk.
<div class="social4i" style="height:29px;">
<div class="social4in" style="height:29px;float: left;">
<div class="socialicons s4twitter" style="float:left;margin-right: 10px;background:url(&quot;http://goo.gl/zjqd1&quot;) no-repeat;"><a href="http://twitter.com/share" data-url="http://josephsmarr.com/2008/05/30/opensocial-openid-and-oauth-oh-my-google-io/" data-counturl="http://josephsmarr.com/2008/05/30/opensocial-openid-and-oauth-oh-my-google-io/" data-text="OpenSocial, OpenID, and OAuth! Oh, My! (Google I/O)" class="twitter-share-button" data-count="horizontal" data-via="jsmarr"></a></div>
<div class="socialicons s4fblike" style="float:left;margin-right: 10px;">
<div id="fb-root"></div>
<p><fb:like href="http%3A%2F%2Fjosephsmarr.com%2F2008%2F05%2F30%2Fopensocial-openid-and-oauth-oh-my-google-io%2F" send="false" layout="button_count" width="100" height="21" show_faces="false" font=""></fb:like></div>
<div class="socialicons s4plusone" style="float:left;margin-right: 10px;"><g:plusone size="medium" href="http://josephsmarr.com/2008/05/30/opensocial-openid-and-oauth-oh-my-google-io/" count="true"></g:plusone></div>
</div>
<div style="clear:both"></div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://josephsmarr.com/2008/05/30/opensocial-openid-and-oauth-oh-my-google-io/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>

