Robin Words

QConf Beijing 2010

QConf是InfoQ的招牌技术大会,每年会在世界各地举行。从去年起QConf登陆中国,让我们也可以享受这一技术盛宴了。 今年QConf大会将于4月23号在北京举行,演讲内容涵盖InfoQ一贯依赖所关注的敏捷、构架、语言和SOA等内容,演讲整容非常值得期待,Eclips之父Erich Gamma, JSON创始人Douglas Crockford,Facebook、Twitter等等知名企业的构架师,全部都是重量级人物,国内也不乏豆瓣的洪强宁、目前供职于支付宝的蔡学镛等等技术大牛。 三天的大会,我最感兴趣的是前两天的内容。其中包括Paul King的动态语言的敏捷开发实践,洪强宁的Python于Web 2.0网站的应用,邓草原的并发需求下的Scala及Erlang语言的比较与使用,Erich Gamma的从Eclipse、Jazz和Rational Team Concert的开发中学习,Marc Kwiatkowski的Facebook技术实践等等话题都是我非常想听的。 参加技术会议,更有趣的一件事情是结识很多的朋友,希望在今年的大会上也可以见到更多的朋友。

荐书:Cocoa Programming Developer’s Handbook

最近有机会读到Addison Wesley即将出版的新书Cocoa Programming Developer’s Handbook,感觉非常好。 目前市面上Cocoa编程的书,比较有名的象O’Reilly的Learning Cocoa with Objective-C,Addison Wesley的Cocoa Programming for Mac OS X,可以将一个完全不懂Cocoa编程的人带入门。而入门之后,似乎就只有苹果官方文档可看了。对于一些有一定编程经验,又希望学习一个新编程框架的人来说,那些从ABC讲起的编程入门书往往会让他们觉得花了时间却学不到什么东西,他们更需要一本直接告诉他们这个框架能做什么和怎样去充分利用这个框架。从入门到成为一个有经验的Cocoa programmer,有一个很大的落差,其中的经验和相关知识散落在官方文档、官方实例、开源项目和各种各样诸如Cocoadev的知识库和Cocoa With Love这样的blog之中。缺乏一本书,能够把入门者从浩如烟海的官方文档和口口相传的经验中解救出来,给他们一个更全面和深入了解Cocoa的机会。 Cocoa Programming Developer’s Handbook就刚好填补了这个空白,达到了这个目的。这本书首先是内容很全,八大部分二十五个章节九百多页,是目前市面上涵盖Cocoa内容最广的一本书。另外,它的内容非常新,包含了Mac OS X 10.6的许多新特性,实际上它的预计出版日期是明年一月。更重要的是,作者David Chisnall是Cocoa的GNU实现GNUStep的贡献者,有丰富的Cocoa和Objective-C的开发经验,不仅把很多技术的来龙去脉讲的很清楚,又有很多Cocoa编程的最佳实践,这些都是从API文档中很难获得的知识。读这本书就象和一个Cocoa高手交流的过程,读起来可以说是饶有兴味。 但需要说明的是,这本书可能并不适合用来入门,不会去手把手教你如何从无到有实现一个Cocoa应用。同样,它也无法代替官方API文档,不会去介绍每个method的使用细节。它讨论的更多的是”big picture”和”best practice”,是paradigm和pattern,让一个有一定经验的程序员可以更快的进入Cocoa的语境。另外,它不是一本讲iPhone编程的书,但它对iPhone程序员一定会有很大的帮助。 可以说,这就是我一直想要的那本Cocoa编程书,翻看了电子版后,已经在amazon预订了印刷版。如果有国内出版社可以将此书引进,功德无量。

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开发者也不少,却少有线下交流的机会。也许我们也可以开始组织一些活动,希望可以尽快开始。 最后,这次活动的一些照片,分享在这里。

浅谈Blocks

在上次的Snow Leopard tech review摘要中提到,Snow Leopard(实际上是Xcode 3.2附带的编译器)开始支持Blocks。这是一个非常有意思的功能,以前通常只有一些动态语言支持,而现在,C/C++/Objective-C也可以用上这个功能了。 Block, 简单的说,就是一个函数对象,和其它类型的对象一样,你可以创建它,可以赋给一个变量,也可以作为函数的参数来传递。计算机科学中,更常用的名字是”closure”或者”lambda”。先通过一个例子看看什么是Block: void (^hello)(char*); hello = ^(char* str) { NSLog(@”hello %s”, str); }; hello(“robin”); 这段代码申明了一个block变量hello,然后用一个block对象为它赋值,最后调用了这个函数。这是打印出的结果: 2009-09-06 16:36:12.693 blocks[6379:903] hello robin 再看一个例子。玩ruby的都知道each方法,可以很方便的遍历一些数据组合。比如: [1,2,3].each {|x| puts x } 就可以打印出 1 2 3 现在,我们也可以为NSArray加上这样的方法。我为NSArray写了一个Category,加入下面函数的实现: – (void)each:(void (^)(id))block { for (id obj in self) { block(obj); } } 很简单,我们就有了一个属于NSArray的each。看一个调用的例子: 
NSArray * array = Read more about 浅谈Blocks[…]