技术,互联网,eLearning …

Twitter的RPC框架:Finagle

今天在google reader上无意中看到了twitter开源出来的RPC框架Finagle项目。简单看了介绍,立刻引起了我的兴趣,一是Finagle提供了RPC服务器端和客户端所需的众多成熟的功能,另外则是Finagle是用我所喜欢的scala语言写的。

Finagle基于Netty,支持众多rpc调用方式,包括request-response, streaming  和 pipelining;同时也提供对于保持状态的支持。

客户端特性

  • Connection Pooling
  • Load Balancing
  • Failure Detection
  • Failover/Retry
  • Distributed Tracing (a la Dapper)
  • Service Discovery (e.g., via Zookeeper)
  • Rich Statistics
  • Native OpenSSL bindings
  • Sharding

服务器端特性

  • Backpressure (to defend against abusive clients)
  • Service Registration (e.g., via Zookeeper)
  • Native OpenSSL bindings

支持的协议

  • HTTP
  • Streaming HTTP (Comet)
  • Thrift
  • Memcached/Kestrel

闲扯RSS Reader

最近google reader基本上是上不去了。墙的触角又伸长了。这对我来说很不适应,因为reader是我获取信息的主要手段。

除却被封的因素外,最近上reader的频率也不如以前高了。经常是看看好友的分享文,看看几个特别关注的网站和博客,其它的就全部标记已读了,或者就直接放在那里不管了。在繁忙的工作之余,很难在有时间阅读大量的大段长文了。

想起了09年中的一个话题:RSS 已死?TechCrouch的一篇文章Rest in Peace, RSS认为RSS将被twitter所取代,这引起了大家对于RSS命运的争论。WebLeOn的观点是:RSS不会死去,而是将获得重生。曹增辉则得出结论:阅读器大众化已死

现在看起来,将RSS Reader普及到大众的努力已经基本上失败了。而在一些小众的应用领域,RSS Reader仍然发挥着重要的作用。正向曹増辉所说的,“它依然是最高效的定向阅读工具”。每次登录google reader,都会看到好友们在积极的分享文章,flower我的人的数量也在逐步增加,我依然会在reader里记笔记,收藏和分享文章。

也许,RSS Reader的定位应该是:知识管理工具和知识分享工具。

基于GAE的导出农历生日ics文件的工具

很多中国人的习惯是按照农历过生日的,但是在Google Calendar里添加农历生日只能一年一年的添加,而不能一次添加多年,这样就很不方便。为了避免这个麻烦,在几个月前写了一个程序,用来生成按年重复的农历生日的ICS文件,导入Google Calendar里,避免一年一年的添加带来的麻烦。程序是一个Web应用,运行在GAE(Google App Endine)之上,地址在这里: http://spur.appspot.com

前几天有网友给我发信说他在用这个工具,问我能不能开源,因为appspot随时可能会被封掉,这样就用不了了。如果开源的话别人拿到源代码至少可以自己部署起来使用。我想这也是个不错的主意,本来这只是我个人写着玩的东西,能对人有帮助还是很高兴的。

于是在Google Code上建了个项目,把源代码放了上去,地址: http://code.google.com/p/lunar-cal-ics-gen/ 。

简单说明一下:

  • 程序使用python语言编写,运行于GAE平台, 要想在本机运行,需要下载GAE SDK。当然,也可以修改代码改造成不依于GAE的Web应用。
  • Web框架使用了从friendfeed开源出来的tornado,具体介绍可见这里
  • 生成日历使用的是icalendar 库,计算农历的代码取自pyzh 项目。

目前添加日历的方式是以ics文件做为中介,最初曾设想通过GData API直接将日历添加到Google Calendar,不过由于时间关系,一直没来得及做这件事,也不确定这个想法是否可行。

程序截图

截图

eLearning工具之RSS阅读器

网上分布着大量的不同种类型的知识,每天都有无数的知识被生产出来。作为知识消费者的学习者,往往面对着海量信息无所释从。RSS阅读器可以帮助他们解决这个问题。学习者可以通过订阅感兴趣的信息源,实现对于知识的集中阅读和管理。前提是,这些信息源提供了可供订阅的格式。

也就是说,RSS阅读器提供了由知识生产者到知识消费者之间的快捷通道。但是在RSS阅读器里,知识仍然是原有的知识,并不能通过知识消费者之间的互动而得到升华,因而RSS阅读器作为eLearning工具的作用也就甚为有限了。为什么这么说呢,先简单的扯一点理论。

社会建构主义学习观认为个人建构的、独有的主观意义和理论只有与社会、与物理世界“相适应”时,才有可能得到发展。因此,社会建构主义学习观强调意义的社会建构和学习的社会情境,强调社会互动、协作与活动等。从社会建构主义角度来看,知识不仅是个体在与物理环境的相互作用中建构起来的,而且社会性的相互作用对于知识的建构也同样重要,甚至更为重要。

基于上面的理论,只有当阅读器支持社会性互动,支持社会性知识建构,才能成为更有效的社会化学习工具。社会化也是目前大多数在线RSS阅读器的发展方向。
Google Reader 在社会化方面做了很多尝试,包括许多社会化方面的功能:

  • 分享:包括对文章的分享,目录的分享,标签的分享以及把文章邮寄给好友等功能
  • 评论:可对分享的文章进行评论
  • Like: 与分享不同的地方在于Like对于所有人是可见的,从而为学习者提供了一种找到兴趣可能相同的人的方法
  • Follow: 最初是订阅gtalk好友的分享,改成follow后范围大大扩大,而且是单向关系。

总的来说,这几个方面的功能都可归结为“分享”。其实,“分享”的过程可以看做是知识整理的过程,相当于无数的用户不断地在以人工的方式从Google Reader的巨大的内容库中挑选出有价值的知识。重要的是,这些知识是存在Google Reader里的,这本身就是一个财富。用户精挑细选互联网上的内容,加以评论和注释,帮助google构建了一个巨大的知识库。这个知识库又会吸引更多的人来使用Google Reader,他们之中又会有很多人参与“分享”活动,从而形成一个知识不断增长的“生态系统”。

从上面的分析来看,阅读器本身可以作为一个社会化的学习工具,且在社会化方面其实可以走得更远一些,比如围绕同种类型的知识形成学习圈子(因其小众,更容易形成同质的人群),更好地促进学习。

Google Reader的中文用户都在分享些啥

上周末写了个抓取程序,用来抓取Google Reader分享的Feed。由于分享的Feed里每一篇被分享的文章都列出了like该文章的用户ID,通过该用户ID可以拼出一个新的分享Feed。这样,以几个用户的分享作为种子,就可以获取大量的用户分享数据。

我的小破电脑吭哧吭哧地抓了一周,主要抓取中文用户的分享,其间又由于有些Feed里含有特殊内容而被connection reset了几次。到了周六早晨,共获得了11万个用户ID,其中,中文用户有2.7万(share或者like过中文文章的用户被认为是中文用户)。从抓取的过程来看,这2.7万用户应该是有过分享行为的中文用户里的绝大多数了。

被share最多的文章和被like最多的文章

对已经获得的数据做统计,被share最多的十篇文章是:

被like最多的十篇文章:

韩寒的文章被分享的次数最多,看来他的文章很对阅读器用户的胃口。另外一个被分享比较多的是可能吧,大家对IT类的科普文章还是很感兴趣的嘛。另外,同被share的文章相比,被like比较多的文章看起来知识性更强一些。

比较有意思的一篇文章是唐龙与藏獒(转),来自土摩托日记,被like和share的次数都很多,从标题上看是一篇转载文,不过用google搜索 “唐龙与藏獒”的时候,都是转帖,反而找不到该文章的原始出处和作者。看来一篇文章要想广为流传,不仅要有好的文章质量和独到的见解,还得借助有影响的媒介来传播。

用户的阅读时间

用户分享的Feed里有一个元素叫做gr:crawl-timestamp-msec,经过验证,这个时间在分享Feed里就是用户分享文章的时间。对这个时间做统计,就可以看出用户在哪些时间里使用阅读器。统计结果如下图:

阅读时间图

除了晚上睡觉的时间,用户在其他时间使用阅读器的频率似乎差不多,只能大约看出中午,晚上6点和晚上10点左右几个高峰期。这说明用户在工作时间也是在使用Reader的?

分享的长尾

对所有文章的分享次数做统计,最后得到一张图,很明显这张图与长尾理论的观点相符合。

分享的长尾

横轴代表文章,纵轴代表文章分享次数。少数文章被大量的分享,而大多数文章则只有一两次分享。

返回顶部