what the hell is opensocial?

花了一天多的时间写了一个可能是“符合规范”的豆瓣秀 OpenSocial Gadget。然后零零碎碎合起来花了大概两天的时间试着把它提交到各个号称支持OpenSocial的容器里,均不成功,目睹怪现象若干。。。陈列于此:

1. iGoogle:iGoogle提供了一个可用于调试OpenSocial的Sandbox,这个Sandbox是Google在各次宣传OpenSocial活动中展示的工具。不过当本猫在iGoogle Sandbox中调试好gadget,然后提交到iGoogle的App Directory中安装之后发现,iGoogle非Sandbox的普通用户使用的版本不支持OpenSocial,囧。。。(今天参加Google Devfest的时候又试了一下,结论上Sandbox也不支持OpenSocial了,而今天Google自己的演示也全是Orkut了)

2.Orkut:Google的当家SNS。另一个Google在活动中展示的Sandbox。首先Orkut中文版里提交gadget的文件总是显示“抱歉,XXX错误”。。。切换到Orkut英文版,暂时可以用了。不过gadget的标题里的中文字符,会被莫名其妙的Url Encode。。。不管怎么说,勉强可以用吧,调试完毕,欣欣然然submit。显示“审核”,等了整整一天(时差,时差问题),一封拒信打回来,说只接收够“production”的gadget。。。老大们好歹给点线索哪里不够吧。。。自己猜了半天,东改改西改改。然后再去提交,提示“这个url不能提交,因为已经提交过了”。。。囧,暂时放弃中。。。(p.s. Orkut的opensocial实现里有bug,一些时候会出现取不到UserPrefs的问题,不过和之下的比这不算什么。。。)

3. Myspace中国:好大一个SNS,好多用户,然后基本上认为开发人员都是超人。。。首先花了几分钟没在页面上找到进入developer页面的链接,结果只能google “myspace developer”(不愧和google是合作关系,帮他增加了2个pv)。。。进入页面创建一个gadget,提示我输入一个email地址,输了自己的email,提示“已经被用了”。。。我靠,仔细看提示,要是输入不能和任何注册用户和提交Gadget重复的唯一标示gadget的email地址。。。What the hell is that… 帮助“合作伙伴”增加gmail注册数?通过给gmail加"."的方式通过。。。下一步上传gadget图标,提示"16×16",我上传了一个64X64的,提示“尺寸不对”。。。ok,开ps,我是前端、后端、技术、美工全能猫。。。最后终于可以开始弄代码了,把在orkut下测试过的代码粘过去,运行。想设置自己的豆瓣用户名,找不到设置的地方,囧。。。仔细找了半天,未果,上“合作伙伴”搜,发现原来Myspace的opensocial根本不支持Google gadget那一堆xml标签——有一个大哥说得很直白,“MySpace has a different development pattern”。。。

4. Hi5:另一个好大的SNS,然后被盾了。。。搜了,偷偷发现,原来sandbox的链接还可以用(呀,是不是又犯法了)。不过上去一试,毫无疑问的也不支持gadget的标签。。。

5. YiQi:填完表单,点提交按钮。我点呀点,我点呀点,它就是没反应。。。看代码,按钮onclick了一个叫applyapp之类的函数,然后页面load的js里没有这个函数。。。

6. 51:原来5不仅可以1ml,还可以1OpenSocial。ok,创建,又开始填表。第一个就让我填“真实姓名”,而写明了不能改,以后要想分钱(51B,啊,不是,是51币)全靠这名字了。。。填了,接着,让我填身份证号,囧。。。嘿咻嘿咻终于快填完了,忽然出现一个“添加应用通知地址”,后面跟着一个链接“详细说明”。没禁住诱惑,偷偷一点,页面跳转,再后退,强制不缓存,什么都没了。。。T_T。。。最后,弄好之后,毫无疑问的,显然也不支持gadget规范里的标签。

好了,上面是一大堆没什么意义的吐槽,下面写一点点稍微有点小价值的建议。

1. 如果你去看opensocial的文档,里面的例子都会是gadget的例子。如果你真的打算做跨container的opensocial应用,就忘掉gadget裸用html+js吧,因为除了orkut之外,没发现哪个container支持gadget规范。

2. 如果你是基于兴趣爱好想写opensocial的应用,有点心理准备。各个container都假设你是领工资或者是为了发大财才用这个container。既然你是为了钱或者为了理想做这个,那么无论用户体验多差、系统多难用,你还是会坚持用下去。而如果你是凭爱好,嘿嘿,嘿嘿嘿嘿,嘿嘿嘿嘿嘿嘿。

技术blogger要有技术blogger的操守

总的来说javaeye的robbin在一些方面还是我非常欣赏的技术作者,尤其在ror方面他的一系列文章对我的帮助都很大。不过今天他发的这篇blog,为什么说OpenSocial只不过是一个PR Scam(公关骗局)?,写得实在是不靠谱了一点。本来想到javaeye原贴下反驳一下,但是鉴于风闻robbin同学一些做法,我还是想保护好我的javaeye账号,于是乎,就写在这里,虽然我的水博是没什么影响力的,但是至少看见了的同学们不至于被robbin的文章误导。

总的来说就只有一点,robbin同学完全不知道什么是OpenSocial,他看一眼google的文档(还没看全)并且去网上搜索了一些相关的评论(还都是一些很早期的评论)就开始写下了上面那篇blog。文章中他提了OpenSocial的三点问题,其中第二点确有其事,剩下两点完全是出于臆想。

第一点说,OpenSocial的widget和Facebook中的app能力相差很远,这个完全是错的。。。虽然两者实现方式不同,fb是基于fbml(其实也有iframe的实现),而opensocial是基于iframe,但是两者的能力几乎是一样的。OpenSocial也有RESTful的接口(显然robbin同学没有好好读文档),同时它的widget也会跨域js调用进行了封装。说什么“OpenSocial仅仅是一个xml文件而已”完全是错的,这就像说“fb app仅仅是一个fbml文件”一样可笑。。。像fb app一样,OpenSocial gadget可以连接一个完整的第三方网站。OpenSocial gadget只是网站在OpenSocial SNS上的一个呈现,这个呈现像fb app的呈现一样可以帮助你的网站利用SNS传播。

 至于第三点,因为第一点是臆想,所以第三点也是。只要OpenSocial能实现,它带给SNS网站和第三方应用开发者的好处和Facebook platform是一样的。

当然不得不说第二点是对的(显然robbin同学的java背景可以很容易的帮他想到实现异构性这点)。SNS网站一定会(MySpace已经)通过向OpenSocial中加入私有扩展使自己差异化,像往常一样,“一次编写,到处运行”永远是个梦。然而这不妨碍SNS网站引入OpenSocial,而这确实能为第三方的网站带来好处,因此第三方应用开发人员就必须面对这一切。就好像虽然跨浏览器兼容性是个噩梦,但是基于ajax的富客户时代还是到来了。

最后随便说一点自己的感想,作为一个技术blogger,特别是一个在一些社区还算有影响力的技术blogger要有自己的操守。毕竟你说的很多东西,会被社区里一些不是这个领域的人当真,这会产生很大的误导作用。特别对于一个新出现的东西,如果只草草看了一晚上文档以及一些已经没有时效性的blog评论,就写这么nb的题目的文章是非常不负责任的。

ps. 又仔细看了robbin文章的最后一段,我发现其实这很有可能是帮facebook写的一篇软文,从这个角度说,这篇文章写的相当不错。虽然细节技术经不起推敲,但是题目nb,内容又显得微言大义,传播性和影响力绝对是有的。非常的好。恩,非常的好,技术软文的典范。