{"id":1611,"date":"2006-08-03T13:53:57","date_gmt":"2006-08-03T17:53:57","guid":{"rendered":"http:\/\/www.markbaker.ca\/blog\/2006\/08\/03\/mashup-best-practice-2\/"},"modified":"2006-08-03T13:53:57","modified_gmt":"2006-08-03T17:53:57","slug":"mashup-best-practice-2","status":"publish","type":"post","link":"http:\/\/www.markbaker.ca\/blog\/2006\/08\/mashup-best-practice-2\/","title":{"rendered":"Mashup best practice #2"},"content":{"rendered":"<p>Following up on my finger-wag at Google for <a href=\"http:\/\/www.markbaker.ca\/blog\/2006\/08\/02\/towards-best-practices-for-mashups\/\">not properly supporting mashup developers<\/a> by messing up versioning, I have to now send them full props for one thing they&#8217;re doing very, very, right.<\/p>\n\n<p>One half of <a href=\"http:\/\/en.wikipedia.org\/wiki\/Jon_Postel#Postel.27s_Law\">Postel&#8217;s Law<\/a> says &#8220;Be liberal in what you accept&#8221;, and Google has done exactly that in at least two places.  First is in <a href=\"http:\/\/maps.google.com\">Google Maps<\/a>, where you can enter pretty much anything resembling a street address, and more often than not it&#8217;ll grok it.  That&#8217;s not to suggest it couldn&#8217;t be improved mind you &#8211; about a quarter of the time I probably have to refine what I enter, but still, that&#8217;s not bad.  Without this capability, Maps mashups would be a lot more difficult to develop in part because there exists no widely adopted standard format for an address, leaving prose as the only option for interchange.  By doing this <em>Google<\/em> is absorbing the costs of solving the problem, and relieving mashup developers of the burden.  Quite the contrast to their API versioning policy! 8-O<\/p>\n\n<p>Another example of this I&#8217;ve noticed is <a href=\"http:\/\/www.google.com\/calendar\">Google Calendar<\/a>, where it can accept dates also in prose, even relative ones like &#8220;tomorrow&#8221;.  And this is despite having somewhat decent <a href=\"http:\/\/www.w3.org\/TR\/NOTE-datetime\">time<\/a> and <a href=\"http:\/\/www.ietf.org\/rfc\/rfc2445.txt\">calendaring<\/a> standards.  So why the prose?  It just simplifies integration, as the calendar integration with GMail demonstrates; it can pick out dates from an email without requiring the sender conform to any particular standard.  Actually, I don&#8217;t know if that&#8217;s GMail or calendar doing it, but I hope it would be the calendar so that it can be more easily reused in other calendar-integration scenarios.<\/p>\n\n<p>FWIW, I recall <a href=\"http:\/\/www.norvig.com\">Peter Norvig<\/a> saying something in his recent <a href=\"http:\/\/www.zdnet.com.au\/news\/software\/soa\/Google_exec_challenges_Berners_Lee\/0,2000061733,39263931,00.htm\">highly publicized<\/a> run-in with <a href=\"http:\/\/www.w3.org\/People\/Berners-Lee\">TimBL<\/a> about the value of this approach (mining existing content) over authoring new content; just can&#8217;t find the quote I&#8217;m looking for right now, but I&#8217;ll add it when I do.<\/p>","protected":false},"excerpt":{"rendered":"Following up on my finger-wag at Google for not properly supporting mashup developers by messing up versioning, I have to now send them full props for one thing they&#8217;re doing very, very, right. One half of Postel&#8217;s Law says &#8220;Be liberal in what you accept&#8221;, and Google has done exactly that in at least two [&hellip;]","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[12,15,36],"class_list":["post-1611","post","type-post","status-publish","format-standard","hentry","category-uncategorized","tag-google","tag-mashups","tag-web20"],"_links":{"self":[{"href":"http:\/\/www.markbaker.ca\/blog\/wp-json\/wp\/v2\/posts\/1611","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.markbaker.ca\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.markbaker.ca\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.markbaker.ca\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.markbaker.ca\/blog\/wp-json\/wp\/v2\/comments?post=1611"}],"version-history":[{"count":0,"href":"http:\/\/www.markbaker.ca\/blog\/wp-json\/wp\/v2\/posts\/1611\/revisions"}],"wp:attachment":[{"href":"http:\/\/www.markbaker.ca\/blog\/wp-json\/wp\/v2\/media?parent=1611"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.markbaker.ca\/blog\/wp-json\/wp\/v2\/categories?post=1611"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.markbaker.ca\/blog\/wp-json\/wp\/v2\/tags?post=1611"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}