写了个豆瓣 Gtalk/XMPP/Jabber 机器人玩

豆瓣是我每天要上很多次的网站,我是个八卦的人,所以看得最多的是友邻广播

我是个重度的 jabber 用户,一直希望有人开发一个机器人,这样就可以随时接收广播。但是等了很久都一直没人弄,写了一下,算做抛砖引玉吧。

我不懂 python ,但是一直对 python 的 twisted 很感兴趣,因此选用的 wokkel 来实现。花了两个晚上终于写好了一个可以接收豆瓣友邻广播,发广播的豆瓣 jabber 机器人出来了。

twisted 非常好玩,很好很强大,除了文档太少不好。wokkel 把 twisted 的 words 模块封装得非常好,用它来开发机器人很简单。

把代码扔 github 上了,大家可以来看,python 新手写的代码,很乱很烂,欢迎扔鸡蛋。

如果要支持大量用户的话,现在估计还得改成使用 xmpp component 的方式来跑,同时代码里面还有很多同步的操作,图省事的数据库使用方式,都得修改。

豆瓣的接口 很开放很强大,这个机器人还可以实现更多功能。不过根据我懒人的习性,估计兴趣过了之后就不会怎么再弄了了,所以欢迎大家去fork

机器人地址:douban@geowhy.org 直接将其加为好友即可使用

GeoWHY 两周年

两年的时候虽然不长,但是要回想出当时的情形,也不是一个容易的事情。估计我和darktemplarhedgehog对当年情形的回忆,也会有很大的差别。当然,写得最差,最语句不通顺的,无疑是这篇(标题都取得那么土)

04,05年的时候,正在web2.0刚开始的时候,国外兴起了很多好玩的网站,国内也有很多跟风的。于是在某个月黑风高的夜晚,我们也聊到我们是不是也来做一个网站,之后geowhy这个名字就诞生了。当时yahoo正在域名促销,好像是1.99美元一年,于是就在上面注册了geowhy.net, 时间是两年前的12月8日。(一年后我们都忘了geowhy.net的管理密码,也没找不回)

WHY 这个词是源于一次数据库的大作业,由我和darktemplar及hedgehog一起完成,于是我们把那个作业叫做W.H.Y. (其它他俩就是挂名而已,都是我做的)

后来有一个晚上我们还讨论geowhy的中文名,我想了一个名字,撷问,当时都以为撷是读做ji, 于是都觉得很不错。后来发现原来读做xie, 而且读做ji的话,谐音就是“接吻”,所以这个中文名称也就不了了之了。现在看来,“唧哦歪” 是大家比较认同的名字,也很有意思。

最早入伙的是ddt, 他好像先在darktemplar的blog上和他认识,然后直接来到我们宿舍, 并感受到交流对于blogger的温暖, 成为最早加入geowhy的人。

之后的一年多里,rainbowrain, imean, putaotang, asiapan, donny, hghg 这一个个有趣的人相继加入之后,geowhy 俨然成了一个像模像样的圈子。因为rainbowrain出国的契机,geowhy 还成功地举办了第一次的聚会。而近期随着 dan, su27, 大元宝, cress的加入,geowhy成为了一个包括科学家,农民,教师,哲学家,艺术家,设计师,美食家,海外留学生,杀手等等个性人群的组织,更新频率越来越快,文章也越来越丰富有趣。

本懒人无大理想,希望能继续做好geowhy的服务器维护工作,争取2008年后半年能达到99.9%的uptime, 欢迎监督。 希望能在2009年实现多点分布,实现零宕机,同时提高国内用户的访问质量(嗯,这个难度还是比较大)。

本blog估计更新频率还是会很慢(看来世博会的审查员监督员们都是吃白饭的),看完本篇后,请半年后再来~~

GeoWHY 2007 Beijing

GeoWHY 2007 Beijing 昨日在北大胜利召开。hedgehog, rainbowrain, darktemplar, 葡萄唐, hghg 及我参加了本次大会。国内外未能前来参会的成员们纷纷在大会召开之前表达了他们的祝贺。

这是 GeoWHY 成立两年以来的首次大会,也是众多成员的首次面对面交流。会上大家对很多感兴趣的话题进行了热烈而深入的讨论。darktemplar 和 hghg 首次见面就擦出强烈的火花,两人就多个议题展开了唇枪舌战。同时与会者也享受东道主 rainbowrain葡萄唐准备的美味晚宴,大家对即将加盟 GeoWHY Euro 的 rainbowrain 博士表示了良好的祝愿。

会后大家漫步于北大校园,并照了首次合照。

geowhy members

geowhy members

XDDDDD

varnish 2.0 load balancing

varnish 是一个高效的 HTTP accelerator, 目前的稳定版本是 1.1.1 不过有个大 bug,预计下下周就会出 1.1.2

目前正在开发的 2.0 版本有一些非常有意思的改进,最重要的就是对 load balancing 的支持。 从目前的 trunk 里面可以看到,其功能已经基本实现,目前支持 round robinweighted random 两种算法对后端进行负载均衡,同时对后端服务器也有简单的健康检查机制

负载均衡的一组后端在 vcl 中也是一个 backend, 不过有较特殊的定义语法。

backend_round_robin rr {
set backend.set = {
{ "foo1.bar.com", "http" }
{ "foo2.bar.com", "http" }
{ "foo3.bar.com", "http" }
};
}

这就定义了一个名字为 rr 的 backend, 它对应的是一组使用 round robin 算法负载均衡的后端

backend_random rrr {
set backend.set = {
{ "foo1.bar.com", "http", 0.3 }
{ "foo2.bar.com", "http", 0.6 }
{ "foo3.bar.com", "http", 0.1 }
};
}

这则是定义了一个名字为 rrr 的backend, 它对应的是一组使用 weighted random 算法负载均衡的后端,花括号中的小数是每个后端的权重,可选,默认是每个后端分配相同的权重。

具体参见: #1931

找时间测了一下,功能已经基本可以用,不过测试的过程中 varnish 经常当掉,XD

符合 RFC 822 的 Email 地址 PHP 验证函数

RFC 822: STANDARD FOR THE FORMAT OF ARPA INTERNET TEXT MESSAGES 定义了 Email 地址的详细格式。

于是就有了遵循这个标准的 Email 地址验证代码(php) :

function is_valid_email_address($email){
        $qtext = '[^\x0d\x22\x5c\x80-\xff]';
        $dtext = '[^\x0d\x5b-\x5d\x80-\xff]';
        $atom = '[^\x00-\x20\x22\x28\x29\x2c\x2e\x3a-\x3c'.
            '\x3e\x40\x5b-\x5d\x7f-\xff]+';
        $quoted_pair = '\x5c[\x00-\x7f]';
        $domain_literal = "\x5b($dtext|$quoted_pair)*\x5d";
        $quoted_string = "\x22($qtext|$quoted_pair)*\x22";
        $domain_ref = $atom;
        $sub_domain = "($domain_ref|$domain_literal)";
        $word = "($atom|$quoted_string)";
        $domain = "$sub_domain(\x2e$sub_domain)*";
        $local_part = "$word(\x2e$word)*";
        $addr_spec = "$local_part\x40$domain";
        return preg_match("!^$addr_spec$!", $email) ? 1 : 0;
    }

PHP : Parsing Email Adresses in PHP 上面也提到了 ruby 和 python 的版本

Mephisto 和 Radiant CMS

前一阵花了好多时间把 blog 迁移到了 Mephisto 这个了 blog 发布系统上,因为我喜欢折腾,而这个貌似不错。后来我发现我的选择真的没错。

最近一直有人问我这个 blog 用的系统,所以说明一下吧。

Mephisto 是基于 ROR 的,它主页上写的是 the best blogging system ever. 作者 Rick Olson 也很有来历,是 Rails core team 的成员。

istefMephisto 不好装 ,不过我觉得挺容易的,跟其它的 ROR 程序的配置一样,用 gems 装好 tzinfo,配 database.yml,.htaccess 然后初始化数据库就好了。官网上也有详尽的教程

那有哪些特别的地方呢:

  1. 首先很简洁,大方,我喜欢这种风格。
  2. 分类叫做 section (这点像 TXP ),可以自由对每个 section 的界面进行不同的配置,所以很适合用作小型的 CMS
  3. 支持 tagging
  4. 文章编辑可以使用 textile, markdown, plain html, 文章还有 reveiosn 可以进行版本控制。
  5. 智能的 cache 系统,生成静态文件, 不过不像 mt 那么傻,必须一次把所有的页面生成,它是在对页面的第一次访问时自动生成静态页。另外修改模板,设置之后,它会清除相应的 cache,所以平时根本不用你去管它的 cache。
  6. 模板基于 liquid,很优雅,不过我觉得还不够强大。
  7. 内置的基于 Akismet 的 spam 过滤机制,这个当然很有效。
  8. 非常方便的附件 (assets) 管理,看这个
  9. plugins,liquid tags 之类的扩展也很容易,不过也要有点 ruby/ror 的知识就是了。
  10. 本身不支持 trackback,很多人说不喜欢 trackback,所以也算一个特点吧。
  11. 另外还有一个强大的功能就是支持多个不同站点,不过还不是很完善,在有的平台,如 lightty 上就不太好配,当然在 Apache 和 nginx 上没有问题,这个功能很爽的。详见:Hosting Multiple Sites 还可以看看它的官网:Mephistoblog配置文件

nginx + mongrel 差不多是目前测过的最快的 ROR 环境了,在很破的虚拟机上跑都比 dreamhost 的破 apache + fastcgi 快很多,而且非常稳定,不过似乎还是有点吃 cpu 。

哦,我发现我不会写 blog 了…… 这几个字就敲了这么久,而且似乎没有逻辑…… 不写了,喜欢折腾的自己去试吧。

  1. Mephisto Wiki
  2. Mailing List
  3. IRC: #mephisto on irc.freenode.net

另外 Radiant CMS 也很好用,可以看它的这个应用