Joseph Smarr

Thoughts on web development, tech, and life.

Page 7 of 9

More on my new role at Plaxo

I just posted some thoughts on my new role at Plaxo as their Chief Platform Architect. Like my previous roles at Plaxo, this is both a formalization of something I was already doing and a decision to focus more intensely on it. In this case, it’s because Plaxo has ended up in a potentially pivotal position to help keep track of who you know and what they’re doing across all the various sites and services you and your contacts use.

So many services these days are driven by sharing content with your friends/contacts/etc. and yet the problem of wiring up who you know on each of these services and keeping that up-to-date is as unsolved as ever. At best you get a one-time auto-import from webmail providers, but if we’ve learned anything at Plaxo, it’s that persistent sync with your existing address book(s) is the real ticket, and everything else falls short of what users really want–that any time I meet someone new or they join a new service, I can automatically find out about it and stay in touch with them without leaving my existing tools. It’s a hard problem, and one that’s not core to most companies, but it’s Plaxo’s bread-and-butter so we’re eager to dive in.

Actually, It’s kind of funny in retrospect that Plaxo launched in 2002–before Friendster, before flickr, before LinkedIn, before MySpace, before Facebook, etc. Even way back then (heh), we thought the problem of staying connected to the people you know was hard enough to warrant starting a company. The initial pitch pointed out that the “explosion of communication tools” (meaning, at the time, email, IM, and cell phones) was actually making it harder to stay in touch, because there were so many channels to keep track of now, and they all tended to be incomplete and out-of-date. Boy is that ever more true today than it was five years ago! Just like before, all these new tools ostensibly aim to help you stay more connected, but they can only truly deliver in conjunction with a service like Plaxo to help you manage it all.

The good news is that these days we’re in the best position yet to make a difference in this new social web. We have 15+ Million people already using Plaxo, we have 2-way sync with most of the major address books and calendars out there, and most importantly we have built our service on open standards like SyncML, vCard, iCal, etc. that will enable others to pick up where we’ve left off.
This last point is really the starting place for my new role as Chief Platform Architect. We are fortunate to be part of a community of developers and evangelists that cares deeply about keeping the social web open–and thus interoperable. I’ve spent the last few years participating in events like the FOAF Workshop, MashupCamp, Internet Identity Workshop, OSCON, and others, trying to figure out how the community envisions building a user-centric social web and how I and Plaxo can best help. It’s exciting to see the fruits of these events start to ripen–things like OpenID, microformats, cross-site mashups, standards-based identity agents–and even more exciting to get to spend my days figuring out how Plaxo can continue to embrace them, help them continue to develop and flourish, and use our technology and resources to help get them deployed at web-scale.

The company is firmly behind this effort and everyone here gets why open is the way to go. In fact, it’s really the only way to go for us–if you believe (as we do) that people will continue to use multiple tools and services and that no single site will own everything (i.e. if you believe that “the web will continue to be the web”) then you can’t wire everything up in a top-down fashion. You have to agree on standards, keep users in control, and empower them to let their data follow them around wherever they go and share it with whomever they want. There’s still a hard problem to solve in the implementation and operation of such a system, and that’s where Plaxo (and others) will be able to run a thriving business. But believe me, we’ve already written one-too-many custom authentication and sync conduits and we long for the day when a new service can just point their standard sync endpoint at us and the rest is done automagically. The day where I can join a new service and instantly find out everyone I know there–including people that I meet or that join later on. That’s the goal, that’s what I’m working on. Let me know what you think!

Best marketing campaign ever!

The 7-Eleven in Mountain View (near the old Plaxo office) has been transformed into a Kwik-E-Mart in support up the upcoming Simpsons movie. There are lot of hardcore Simpsons fans at Plaxo (myself included), so we had to check this out for ourselves.

When we got there, there was a line out the door. So the promotion is definitely working. And I have to say I was really impressed at the thoroughness and level of detail put into the promotion. In addition to changing the entire facade of the store and the giant 7-Eleven signs to look like the Kwik-E-Mart, there were a lot of little references to past episodes inside the store.

Some of my favorites were Jasper inside the freezer section (“Moon pie–what a time to be alive!“) and a warning sign next to the sprinkled donuts: “A Mounds bar is not a sprinkle. A Twizzler is not a sprinkle. A Jolly Rancher is not a sprinkle.” And I had to buy the homer hat that said “This is everyone’s fault but mine”, though the actual quote is “This is everybody’s fault but mine“, heh.

(Quick rant: As a fan, I found it frustrating (though expected) that alongside these classic quotes were a bunch of additional made-up phrases like “buy 3 for the price of 3” and “they’re not called don’t-nuts” that were so clearly sub-par. The hubris to think you can just make up lines that are as good as the best-written show in TV history. Would you ever see promoters of a Shakespeare festival make up some extra Shakespeare-sounding quotes to toss in as if they were original lines?!?! And yes, I do find the comparison broadly apt. :))

Here’s a picture of me drinking a Squishee next to the Kwik-E-Mart.

We took some more photos from our visit and here’s a larger collection we found. AP also has an interesting write-up of the story–apparently 7-Eleven paid for the entire thing. It’s amazing how these deals get structured (after all, this is ostensibly marketing for a movie).

All in all, I’m very impressed with this bold and clever marketing move, and while it may be sad that corporate marketing budgets are the last haven for public art installations in America, at least in some cases they put in the extra effort to make it really special. As I remarked to a fellow Simpsons fan in line there, “well, I guess now if the movie sucks I’ll be slightly less disappointed”.

P.S. on the Simpsons movie web site, they have this tool where you can create your own Simpsons avatar by customizing the hair, eyes, mouth, clothes, etc. using primarily well-known features from Simpsons characters. While the choices are sometimes limiting (many pages of hair choices but no choice in pants or shoes?!), you can still create characters that bear a humorously close resemblance to real people. Here’s my attempt at representing myself, as well as Plaxo’s founders Todd & Cam. 🙂

Celebrating our 2nd anniversary

It’s hard to believe, but Michelle and I have now been happily married for two years! To celebrate, I took her on a little getaway in SF. We had an amazing dinner at Michael Mina and we stayed in a tower suite at the Westin St. Francis that looked out at the Golden Gate Bridge and Coit Tower. (Michael Mina is inside the St. Francis, so “getting home safely” after dinner just meant finding the right elevator, heh).

Here are some photos we took.

We both had a wonderful time. It really felt like a little vacation, even though we were only gone for about 24 hours total. Just getting a change of scenery, a break from your normal routine, and a chance to really focus on one another and enjoy life can have a major impact. We both left feeling so refreshed and in love. In fact. celebrating our anniversary was so nice that I think we’ll try it again next year! 🙂

DSC00994DSCN4355

Great video interview about lunch 2.0

The PodTech crew shot and edited a really nice video at our recent Lunch 2.0 at Netgear. It covers the event and features an interview with the lunch 2.0 founders, including your humble narrator, on the origins of Lunch 2.0.

I conducted the entire interview while lying on a bed in Netgear’s “lifestyle room” showcase, watching TV using their wireless media center product. And I’m wearing a commemorative Netgear apron from their BBQ lunch.

I love living in Silicon Valley. 🙂

Here’s the video (thanks, Jeremiah!):

Twitter status and upcoming events now on my blog sidebar

BTW, I’ve added my current twitter status (using Twit-Twoo) and events I’m attending (via upcoming.org) to the left sidebar of my blog. It’s cool how easy it is these days to integrate data from third-party sites without having to write any API client code. Like we found with Plaxo’s widget, when you can just give people some HTML/JavaScript to copy and paste, the barrier to adoption is dramatically lowered compared to requiring even simple direct API consumption.

Of course, as someone who reads blogs exclusively inside Bloglines, I rarely see the actual web pages where people host their blogs. If you’re like me, now you know I have this extra info on my site. But from what I’ve seen, it appears many (if not most) people still read blogs by typing in the URLs and seeing if there’s anything new. It seems crazy not to take advantage of RSS, especially given how user-friendly many blog readers are these days, but I guess old habits die hard. 🙂

WordPress "XML-RPC server accepts POST requests only."

This morning I found I couldn’t publish to WordPress using Windows Live Writer any more. I would get errors like “Invalid Server Response – The response to the blogger.getUsersBlogs method received from the weblog server was invalid.” and when I looked at the request in HTTPAnalyzer, WordPress’s xmlrpc.php was sending “XML-RPC server accepts POST requests only.”, even though I WAS posting. Since WordPress’s WSYWIG and HTML editors both horribly mangle any code samples you try to use, this was quite frustrating.

But after a bit of Googling, I found a quick solution that worked perfectly. Just add the following line of PHP to the top of your xmlrpc.php file (inside the <?php of course):

$HTTP_RAW_POST_DATA = file_get_contents("php://input");

Thanks to helpful bloggers like Will for reporting solutions to problems like this, and thanks to Google for helping other distressed hackers find them! I hope this increases the ease with which this particular solution can be found by others.

The hidden cost of meta-refresh tags

We just discovered at Plaxo that redirecting using meta-refresh tags has a surprising performance penalty as a side-effect: it causes all cached resources on the redirected-to page to be re-requested (as if the user had hit the “refresh” button). Even though most of them should return 304s (if you’re caching them properly), this still results in a ton of extra requests and round-trips. A good workaround is to replace the meta-refresh tags with JavaScript redirects.

A bit more detail

A standard technique for redirecting users from one web page to another is to put a “meta refresh” tag in the first page that says to immediately redirect to the other page, e.g.

<html>
<head>
<title>Redirecting...</title>
<meta http-equiv=refresh content="0; url=http://new-page" />
...

When browsers see this, they go to the URL specified, and if the time specified before redirecting is (the “0;” in the above example), they’re even smart enough to remove the redirecting page from the browser history so when you press Back you don’t get re-redirected.

However, there is a side effect that none of us knew about or expected. We only discovered it while performance-tuning Plaxo Online 3.0 (coming real soon now!!) while using HTTPAnalyzer. For some people, after the initial visit to the site, on return visits none of the images would be re-requested (we send long cache expiration times, so this is good behavior). But for others, they’d be requested each time they went to the page.

The difference turned out to be that some people were accessing the site by a slightly different URL that uses a meta-refresh tag to go to the actual site. Since “http-equiv=refresh” means “treat this as if I’d sent the equivalent HTTP header ‘refresh'”, the browser (especially IE) acts as if the user had hit the reload button and re-requests all cached images on the redirected-to page with If-Modified-Since and If-None-Match headers. If you’ve got the right cache headers, these requests will all return 304 (i.e. the images won’t actually be re-downloaded), but it still results in a big–and unnecessary/unintended–performance hit because you’re now sending a bunch of extra round-trip requests while loading the page.

The ideal solution for redirecting is to send a 302 redirect response from the web server itself to avoid even loading the intermediate web page. However, there are times when this isn’t feasible, e.g. if you don’t have that level of control over the server or if your template system wants to only do this if certain variables are set. Another case is if you want to redirect from an HTTPS page to an HTTP page–if you try to do this on the server, you’ll get a browser warning about redirecting from a secure page to an insecure page, but if you do it with meta-refresh, it works fine (bravo, browser security dudes, heh). So in these cases you want to redirect client-side, but you don’t want to incur the side-effect of re-fetching all the cached resources.

A good solution is to use JavaScript (while some web developers like to degrade gracefully when JavaScript is disabled, we’re redirecting to a rich Ajax app, so this isn’t really an issue). Wherever you’d use a meta-refresh tag, instead insert the following script block:

<script type="text/javascript">
location.replace('http://real-page');
</script>

By using location.replace (instead of, say, location.href=), the browser will purge the redirecting page from the browser history, just like a meta-refresh tag with 0 wait time, which is a good thing. And you won’t get any bad caching side effects, which is also a good thing.

Thanks to the two Ryans for figuring this out! Now you know too. 🙂

I’m so impressed with f8

Facebook Platform Launch (photo by Ted "Dogster" Rheingold)

As f8 would have it, I was in San Francisco yesterday for Facebook’s platform launch and hackathon. What a day it was!

The event itself quite a spectacle (they filled the SF Design Center with about 800 people, Mark gave a Jobs-esque keynote, and the hackathon was set up with tons of couches, tray-passed hors d’oeuvres, a DJ, and Facebook engineers a plenty to help out with the hacking).

But the platform itself was the real star–Facebook really wants developers to be able to build apps that are as powerful and as integrated as the ones Facebook could build themselves, and the Platform really delivers on that audacious goal. You can host your app pages inside Facebook’s chrome, add items to news feeds, send notifications, and basically hook into all the places that Facebook’s existing apps do.

The technology to make this work–and still be safe–is quite clever: basically they curl your page with enough query args to let you access their APIs, you construct the page results, and they display it inside Facebook. Instead of returning straight HTML, they have a modified version they call FBML which, in addition to stripping out JavaScript and sandboxing your CSS, lets you insert special facebook tags to easily do things like link to your friends, use Facebook-styled UI widgets, and even some basic AJAX (they proxy the call through Facebook and then give you a limited-but-still-quite-powerful set of options for what to do with the results, like injecting them into a given DOM node). And since they’re just calling your page via HTTP and it’s up to you to interact with Facebook’s REST API while constructing your result, there’s no need to even write your Facebook app in PHP (which is good news for me, since I’m no Terry, heh).

But the most impressive thing to be about f8 is just how much Facebook “gets it”. They could have continued to be a walled garden–they were doing quite well at it!–but it’s clear from their words and their actions that they really believe they will be more successful by being an open platform and letting developers have real power to extend the experience and take advantage of the social graph they’ve built up. They’re pushing the limits of technology to enable deep integration, they’re providing prominence to third-party apps inside Facebook to help them spread, and they’re even letting the apps keep 100% of the ad money they generate. It’s of course quite defensive for Facebook inasmuch as it disincentivizes people from trying to build new social networks and gives them a multiplier on the features they can offer their users, but it still shows great vision and I couldn’t be happier or more impressed with what they’re doing!

See you at Internet Identity Workshop

IIW2007 Registration banner

I’ll be attending the Internet Identity Workshop (IIW2007a, to be precise) this Mon-Wed at the Computer History Museum in Mountain View, CA. I went to IIW2006b last year and was immediately excited to be a part of this community. The people involved are not only very smart, they’re pragmatic, hands-on, accessible, and motivated by all the right reasons.

The progress of OpenID has been stunning–developing the standard, building libraries, folding in related projects, and getting broad support–and I think we may well start to see its adoption hit the mainstream this year (we’re certainly playing with it at Plaxo these days).

Like other workshops and conferences that I go to, this will also be an opportunity to catch up with a lot of friends that I (for whatever reason) seem to only find time to see at events like these. So if you’re planning to attend, come say hi or give me a call (my latest contact info is linked to from my blog sidebar, thanks to Plaxo of course).

See you there, js

« Older posts Newer posts »

© 2025 Joseph Smarr

Theme by Anders NorenUp ↑