Loading...

有多少人在收听你的广播

Filed under: 编程, 网络 — 深柳堂主 @ 2008-10-21 00:19:11 Comments

MS之前已经引用过一次了,我再不厌其烦地引用一次——

“譬如咱们这次同船的许多人,没有一个认识的。不知道他们的来头,为什么不先不后也乘这条船,以为这次和他们聚在一起是出于偶然。假使咱们熟悉了他们的情形和目的,就知道他们乘这只船并非偶然,和咱们一样有非乘不可的理由。这好像 开无线电。你把针在面上转一圈,听见东一个电台半句京戏,西一个电台半句报告,忽然又是半句外国歌啦,半句昆曲啦,鸡零狗碎,凑在一起,莫名其妙。可是每 一个破碎的片段,在它本电台广播的节目里,有上文下文并非胡闹。你只要认定一个电台听下去,就了解它的意义。我们彼此往来也如此,相知不深的陌生人——”柔嘉打个面积一寸见方的大呵欠。像一切人,鸿渐恨旁人听自己 ” 说话的时候打呵欠,一年来在课堂上变相催眠的经验更增加了他的恨,他立刻闭嘴。柔嘉道歉道:“我累了,你讲下去呢。”鸿渐道:“累了快去睡,我不讲了。”柔嘉怨道:“好好的讲咱们两个人的事,为什么要扯到全船的人,整个人类?”鸿渐恨恨道:“跟你们女人讲话只有讲你们自己,此外什么都不懂!你先去睡罢,我还要坐一会呢。”柔嘉佯佯不睬地走了。鸿渐抽了一支烟,气平下来,开始自觉可笑。

其实大家不论是在twitter,饭否,还是做啥,都像方鸿渐说的那样,都只是一句句支离破碎的电台广播而已。在频繁换台的陌生人耳朵里,随意泛听时,或许会有只言片语引起注意;只有认定你的频道收听下去,才能连贯地读懂你的心脉,理解你的悲欢。今天我的话题就是,在blog上显示你的饭否或“做啥”听众数量。

这本不是我的创意。是前天我无谓中浏览一位饭友的博客时,发现了http://twittercounter.com/提供了这样的服务,能将你在twitter中的followers的数量以图像形式显示出来,例如本人的图片是TwitterCounter for @zhasm。可是我最常用的饭否却没有类似网站提供类似服务。我思考了一下,觉得不太难,自己也可以实现。

实现思路:

  1. 通过现有的饭否API http://api.fanfou.com/users/show.xml?id=zhasm 来获得当前饭否用户的信息,其中的ID就是所要统计的用户的ID,听众数量在followers_count节点中。其结构是:<followers_count>(\d+)</followers_count>。
  2. 使用网页语言(我用的是PHP)来获得该数值,并将其转换成图片。基本要求是即时更新,即,不是只生成当前听众数量统计,当数量有变动时,还能随时更新。
  3. 提供在线的图片输出服务。

由于饭否的API比较完备,第一步没问题;第二步我没有使用php的xml解析函数,而是使用了比较顺手的正则表达式来获取该数值;生成图片的模板,我参考了feedsky的。其三维效果是通过明暗的线条来实现的。为省事,将中文改为英文了。至于在线的图片输出,我慷慨地使用了自己博客所在的cph空间,将网页放在http://zhasm.com/fanfou/里面。效果如图:

饭否听众统计图片使用方法很简单,因为功能也很简单:)。具体如下:

  1. 取得你的饭否ID。如果你的饭否链接是http://fanfou.com/regex,而你的饭否用户名是正泽,则你的ID是regex,而不是正泽。值得一提的是,我写的听众统计功能,暂时还不支持中文ID。
  2. 取得图片。图片位置在
    http://zhasm.com/fanfou?id=regex


    http://iregex.org/fanfou?id=regex
    推荐国内的用户使用前者(zhasm对应cph主机),国外的用户使用后者(iregex.org对应dreamhost主机)。
  3. 您可以在blog中这样调用(请酌情将YourfanfouID换成相应值):
    <a href="http://fanfou.com/YourfanfouID" title="个性提示语,例如hello world,当鼠标移动到链接上时显示的文字" target="_blank">
    <img src="http://zhasm.com/fanfou?id=YourfanfouID" />
    </a>

实现此功能后,我将此消息群发到fanfou、twitter、jiwaide、zuosa、plurk上。zuosa的老大alex发现了我的消息,委托我为zuosa也写一个。

我阅读了zuosa的api文档,发现对应的函数并没有提供followers_count功能;与alex沟通,zuosa两天后就在http://api.zuosa.com/users/show.xml加上了本功能。而我原有的php脚本也无需改动太多,只需要修改两行就能服务于zuosa,一条是api接口,另一条是正则式解析的位置。根据alex要求,将followers修改为粉丝;同时去掉了原来数值的前导0。现在效果如下:

类似,做啥听众统计图片使用方法如下:

  1. 取得你的做啥ID。如果你的做啥链接是http://zuosa.com/rexxer,而你的饭否用户名是zhasm,则你的ID是rexxer,而不是zhasm。值得一提的是,我写的听众统计功能,暂时还不支持中文ID。
  2. 取得图片。图片位置在
    http://zhasm.com/
    zuosa?id=rexxer

    http://iregex.org/zuosa?id=rexxer
    推荐国内的用户使用前者(zhasm对应cph主机),国外的用户使用后者(iregex.org对应dreamhost主机)。
  3. 您可以在blog中这样调用(请酌情将YourZuosaID换成相应值):
    <a href="http://zuosa.com/YourZuosaID" title="个性提示语,例如hello world,当鼠标移动到链接上时显示的文字" target="_blank">
    <img src="http://zhasm.com/zuosa.com?id=YourZuosaID" />
    </a>

目前的不足之处是,不支持中文ID;没有提供更详细的定制功能。还有什么不足之处呢,请留言告之。

2008.10.23更新:
应alex要求,新增一种风格,如图所示:,使用方法不变,图片路径改为http://zhasm.com/zuosa/2?id=YOUR_ZUOSA_ID。

2008.10.27更新:
将alex要求的方式做为默认,格式如,使用方法不变,图片路径改为http://zhasm.com/zuosa?id=YOUR_ZUOSA_ID。

uuid in twitter and fanfou

Filed under: 编程 — 深柳堂主 @ 2008-01-30 09:13:54 Comments

简要分析了一下twitter和fanfou消息的uuid格式.对于twitter和fanfou,每一条消息都有一个全局的唯一的”身份证号”–uuid.在可视化的操作中,这是不需要的.而使用api来进行统一操作时,uuid就必不可少.

饭否的uuid格式是[-_a-zA-Z0-9]{11},例如jMzxknImnRs,因此理论上可以标识64^11=73,786,976,294,838,206,464条消息; 而twitter的uuid是\d{9},例如609308932,貌似只能标识10^9条消息,即1,000,000,000.不过, 后者貌似可以增加到\d{10,},即开放式增长.早期的twitter消息的uuid号码长度为8,不过没刻意去寻找更短的.

由此作出”大胆推测”,twitter程序员喜欢使用C语言的数组来存储消息;而fanfou的程序员喜欢使用perl语言的散列来存储消息.姑妄听之,没有作”小心证明”的必要了吧,呵呵.

fanfou vs twitter, base64 vs tinyurl?

Filed under: 编程 — 深柳堂主 @ 2007-12-30 01:33:31 Comments

在fanfou上与网友分享链接时,链接表面显示的是你所输入的网址,可是,这只是障眼法;实际上,当你点击链接时,fanfou是按如下格式把你带到目的地的:

http://fanfou.com/linkto/aHR0cDovL3poYXNtLmNvbQo=

仿佛是你给了A地的女朋友一张地址纸片,约她按纸片上的地址到B地找你。可是,她上了出租车,司机却从A地出发,绕经C市,才又到达B地。明明A到B有直线可以经过,为什么还要取道C地呢?女朋友并没有因此而来迟多少时间,可好奇而细心的你却想弄清究竟。

我怀疑linkto之后是加密了的网络地址。至于加密算法,既然大小写并存,还有等号在里面,那么80%是base64了。验证之后,果然如此。我把另外一个网址也做成fanfou的格式,如下:

http://fanfou.com/linkto/aHR0cDovL2NvZGUuemhhc20uZ29vZ2xlcGFnZXMuY29tCg==

至于什么是base64算法,可以参考这里,此文言之甚详:老罗的矛与盾的较量(4)——奇妙的Base64编码

至于为什么fanfou采用base64,推测如下:

  • 为了使网址格式统一,
  • 更美观,避免出现乱码
  • 被访页面从统计工具上显示页面来源是fanfou,可以增强fanfou的知名度,满足fanfou的虚荣心 :)
  • 这种算法速度较快,可以迅速生成,立刻指向。
  • 这种算法可以起到简单的加密作用,同时解密也简单(可逆)。

但是,这种方法造成的后果是,fanfou所生成的地址太长。

例如,请对比下面的原始网址和fanfou链接:

http://3.1415926535897932384626433832795028841971693993751058209
74944592.com
/
http://fanfou.com/linkto/aHR0cDovLzMuMTQxNTkyNjUzNTg5NzkzMjM4NDYyNjQzMzg
zMjc5NTAyODg0MTk3MTY5Mzk5Mzc1MTA1ODIwOTc0OTQ0NTkyLmNvbS8

好了,fanfou的事情告一段落,那位司机师傅也清白了:他没有私自带着别人的女朋友去不可告人的地方,而是统一按公司规定,先向公司告目的地,然后从公司取得统一的行程安排,所去的地方正好是原来的目的地。整个过程是安全而透明的,事先有计划,事中有记录,事后可追溯。

我们再来看一下fanfou的国外兄弟twitter是什么解决出租车路线问题的。

我把本文原创作者rex.zhasm的blog地址放入twitter,所产生的链接是:

http://zhasm.com

把刚才那个pi的超级变态网址放进去,仍然是原状:

http://3.141592653589793238462643383279502884197169399375105820974
944592.com

于是,我又进行更血腥暴力的实验:

http://www.iol.co.za/index.php?from=rss_Twitter&
set_id=1&click_id=79&art_id=nw20071229175550951C275909

地址放入twitter 中,产生的新的链接是:

http://tinyurl.com/2d39×2

之后把一个新浪博客的文章扔进去,链接还是tinyurl的。

原来是这样呀。我们对twitter作了不完全调查统计,至少有一部分网址转向符合以下规则:

  1. 如果网址是一级域名,即使长一些,也要完全显示。
  2. 如果网址是二级域名,或者是一级域名引申出来的链接,那么把链接改成tinyurl格式。

如果还用出租司机的例子做类比,就变成这样了:

司机先看看你去的地方是不是不拐弯能到的。如果您从长安街东头,一直坐到长安街西头,那么司机很爽快地把您送到目的地;但是,如果您要在中途拐哪怕一个小弯,对不起,咱做不了主,您得登记,按行业规定的路线送过去。

至于路线的安排,则是由tinyurl来制定。它所制定的路线是最短的,无论是http://zhasm.com这样短的路线,还是像刚才的pi一样的路线,都能压缩成http://tinyurl.com/yveppt这样短。

tinyurl这样的做法,其算法应该是不可逆的,根据所输入网址hash出一个N位的关键码。(不分大小写的英文字母,数字)。根据简单的数学原理,N=6时所记录的容量是:

36^6=2,176,782,336,即2个billion多。

根据一篇道听途说的文章: 第19次互联网报告之中国网页总数44.7亿个(2007年01月23日10:13)。 但是你想想看,一天看一百篇文章,能有几篇值得分享。大多数搜索出来的文章都是过眼烟云的垃圾。退一万步讲,tinyurl不够用了,我们再使用更短的一级域名来支持,(例如g.cn之类),稍长一些的关键码,因为36的10次方是3,656,158,440,062,976,一个让人数半天不知怎么念的数字。

总之,以上数据表明,如果使用tinyurl,是前途光明的。具体到twitter和fanfou中,自觉使用tinyurl也是立见其利:如果说一句话时非得包括一个长长的地址,你在tinyurl的亲切关怀下就能表达更多的内容,在140个汉字或140个英文字母中所提供的信息量越大。何乐而不为?

为什么fanfou不用tinyurl呢?猜测如下:

  1. 技术要自己研发,用着才踏实。
  2. 国外网站有被hexielization的危险。
  3. 如果要支付高额成本,价格问题谈不拢。
  4. 该技术或需大量硬盘,或需大量带宽,同时其利甚微,不值得做。
  5. 跟宗教一样,源自外国,到了中国,即自成具有中国特色的体系,不受外国教皇控制。
  6. 与国情相似:国外酌情搞外包,国内事无事无巨细,一概小而全。
  7. 现有模式就挺好。用户没有觉得不方便呀。