KungFu Rails小记

上周末赶去上海参加了KungFu Rails中国Rails开发者大会。本来因为女儿发烧,差点去不成,最后夫人鼎力支持,终于成行。 这次Rails开发者大会整容相当强大,演讲也很精彩。Rails 3的主导开发者Yehuda Katz来做了关于Rails 3的介绍,比起五月份Rails Conf看到的Rails 3介绍,又多了一些新内容。github的Scott和PJ双双到场。Scott的视频我是看过一堆了,第一次听到现场。PJ在创立github前,我就很fan他的err blog。刚好InfoQ还给我们了一个机会,采访了Scott和PJ,问了不少git和github的问题,他们两人也很健谈,相信视频很快会在InfoQ上看到。台湾来的張文鈿讲的Rails Best Practice: Write Better Code,实用性很强,是这次大会的一个亮点,据说还得到Yehuda同学的青睐。易空海黄志敏写的Rails插件Bulletin最近获得Rails社区广泛的关注,这次他来分享了如何制作gem和plugin的经验。我们团队的Louie Zhao讲了一下使用Integrity做持续集成和使用metric_fu做静态代码检查的经验,演讲的slides和更具体的内容都分享在这里。另外《JRuby实战》的译者丁雪丰,易空海的郜磊,也都有精彩的演讲。唯一遗憾的是本来很期待的高桥征义的演讲,不知道什么原因不太流畅,高桥流简报法的威力大大缩水。 这次KungFu Rails收门票,虽然不贵,但人数明显少于上次RubyConfChina。不过有一个好处,就是来的人都是铁杆Rails开发者,结识这样一批人让人很开心,更觉得不虚此行。 我们三个人以IN-SRC Studio的名义赞助了这次活动。这是今年第二次赞助这样的活动。碰到很多人来问,又不搞宣传又不招人,为什么赞助。其实我们的想法很简单,我们是ruby和rails的受益者,虽然没什么钱,但既然有人不辞辛苦来组织这样的活动,能帮一点是一点。在中国有这样好的rails活动,却没有一个中国人赞助,说不过去。对于社区乃至大环境,不知道这样的蝴蝶翅膀能改变什么,但我们除了空谈和抱怨,还可以做点别的。 这次另外一些收获,就是向Shanghai On Rails 小组请教了一下他们平时开展活动的经验。其实北京的Ruby和Rails开发者也不少,却少有线下交流的机会。也许我们也可以开始组织一些活动,希望可以尽快开始。 最后,这次活动的一些照片,分享在这里。

忙碌的一周

预告过了, 这周主要参加了两个活动. 周四在上海的Ruby Conference China 2009, 可以说相当成功. Matz 绝对是现场最耀眼的明星, 他的演讲非常有趣, 充满了程序员的智慧. 他提到编程语言应该有common sense, 程序员即使是在为生计编程, 也不应该放弃对fun的追求. 每个ruby程序员都知道这不是泛泛的说道, 因为我们都能确切的体验到这种common sense,以及ruby编程给我们带来的快乐. 以前听过Bjarne Stroustrup和James Goslin的演讲, 和这些编程语言之父面对面的交流总是让人有颇多的收获. javaeye的Robbin Fan的演讲也非常精彩, 分享的内容是国内ruby/rails社区极为宝贵的经验. 有一个小插曲, Robbin演讲当中, 接到了一个网警要求删贴的电话, 不得不马上处理. 老大哥的无处不在让人啼笑皆非. 另外, 这次上海之行, 看到这样一个没有做太多宣传的活动, 一下就聚集了全国各地四百多人, 会上会下都以javaeye会员相称, 着实见识了一下javaeye的号召力. 借这次活动, 看到了ThoughtWorks的郑烨, 图灵的刘江老师, 杭州的ashchan, Kernel1983, 吕国宁等等很多神交已久的朋友, 也结识了象薄荷网的谢文威等等的新朋友, 可谓不虚此行. 今天下午在奇遇花园的技术沙龙也不错, 来了不少人, 对iPhone感兴趣的人还不少. 因为Tinyfool告诉我最好不要超过二十分钟, 所以没有准备太多内容, 做开发的可能会觉得没啥意思, 不做开发的可能又觉得太偏技术,不过最后回答了一些大家的问题,也算有点补偿了. 其实技术沙龙就应该是这样, 上面讲的人只是抛砖引玉, 大家的交流才最关键. 我自己的体会也是这样, Read more about 忙碌的一周[…]

动态组合named_scope

named_scope是Ruby On Rails 2.x后一个非常好用的功能,介绍的地方已经很多,在这里不再多说。 named_scope有一个很好的地方,是数个scope和scope可以组合,本来很难看的代码可以变成这样优美可读的形式: Post.published.by_author(user).within_a_week.in_forum(forum) 但有时候,到底需要将哪些scopes组合在一起,在运行时才能决定,没法在程序中写死。找了一下,似乎没有现成的解决方案,就写了一个叫ScopeGroup的plugin。 使用这个plugin,可以在运行时动态组合named scope,然后可以针对这个组合来调用find, count, average等等函数。 比如,如下代码: # 为model Post创建一个ScopeGroup scope_group = ScopeGroup.new(Post) # 将scope分别加入组合 scope_group.published scope_group.by_author(user) scope_group.within_a_week 再调用 scope_group.find(:all) 就等同于: Post.published.by_author(user).within_a_week 我们碰到的一个用户场景是需要根据地区、类别、状态等各种条件分层次组合生成报表,使用了动态组合named scope的方式,大大简化了代码。 我把这个插件放在了github: ScopeGroup项目主页链接。 安装方式: script/plugin install git://github.com/robin/scopegroup.git