浅谈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[…]

Snow Leopard Ars Technica Review 摘要

每次Mac OS X升级, Ars Technica都会有一个长篇的评论, 这次也不例外, 有23页之长. 原文在此. 边看边将我比较感兴趣的部分摘要了一下. Snow Leopard是一次主要针对开发者的升级, 预告时就打出了0 feature的噱头, 最终用户能体验到的变化也许不多. 安装 安装大小有比较显著的变化, 比Leopard小很多. 排除Finder采用十进制方式展示空间大小的原因, 真正节约了空间的地方包括: 可运行码中不再有PPC部分. 很多文件采用了压缩模式, 利用extended attributes, 以ResourceFork的形式保存. 从之前版本的Mac OS X会是一个0大小的文件, 但在文件拷贝的层面做到了向前兼容. 对于更小的文件, 会直接保存在extended attributes中, 而不再单独分配一个块(通常是4K). 压缩存放文件, 一方面是节约了硬盘, 另一方面以CPU换I/O. 将内容存放在extended attributes中, 可以减少硬盘磁头的移动. 一切都是为了更快的读写速度. 安装过程中过检查不兼容的程序.另外, 安装增加了掉电保护功能. 64位 一图顶万言 64位内核 K64(64位内核)并没有在所有的系统上被激活, 目前缺省激活的只有08以后的XServers. 要想在其他K64-capable的机器上启动64位内核, 需要在启动时同时按下6和4两个键. 或者用nvram直接修改启动配置. 64位内核最直接的好处是可以使用更大的内存. 更多的寄存器, 新的寻址方式和浮点运算能力对性能提升有帮助, 但只有少数程序(通常是server-based的程序)用到了这些特性, 对更多的日常应用而言, K64没有你想象中那么有用. Read more about Snow Leopard Ars Technica Review 摘要[…]

小魔女简历(已授权)

女儿下周要上幼儿园了。入园前要求准备简历一份。闷头写了一晚上。经授权,特此公布。 (防人肉,姓名略),女,两岁半。 喜欢吃面食,吃饭比较慢,不太会用餐具。食物卡在牙缝中会停止进食,要求刷牙。有时候太大的食物嚼不动会要求吐出。 喜欢的形象有小熊维妮系列,天线宝宝,花园宝宝,喜羊羊系列。喜欢猫、狗、小兔子等等小动物,已注射狂犬疫苗,对蜗牛、蚂蚁、植物的种子等等也有兴趣。 跑跳能力一般,比较善于攀爬。对运动中一般的小磕碰不会在意。 性格谨慎,面对新环境或者陌生人面前会先选择在旁边观察,可以适当的鼓励,主要需要足够的时间,可以自己适应,慢慢主动融入。容易接受比她年龄稍大的小朋友。在熟悉环境中,或者和熟悉的人一起时会很爱说话。 有秩序感,生活习惯形成后会自觉遵守,对秩序的破坏有时会表现出不满。对别人动自己的东西会比较敏感,分享意愿不强,仍需培养。 困或者刚起床的时候比较容易烦躁。偶尔会因要求不能满足而发脾气,有可能脸和脖子都因为气愤而变红,气头上会拒绝任何条件,可以先让她发泄一两分钟后再做处理。 需要大小便的时候一般会自己提出,但仍然有些时候会便在裤子里,需要进一步训练。

ChinaonRails关于Rubyist的调查

望勤兄正在他的ChinaOnRails做一个中国Ruby/Rails优秀人物采访计划,我烂人一条,但也有幸接到了邀请。我觉得这些问题也很有意思,现在把我的答案同时公布在这里: 1. 请简单介绍一下你自己,留下Blog、Twitter等 Robin Lu http://www.robinlu.com @robinlu 2. 你是怎样找到你的第一个Ruby相关的工作的? 我和朋友辞职出来创业,开发一个网站,选用了Ruby On Rails框架。 3. 你是在哪里和怎样搜索工作机会?你能给我一些最好的方法找到Ruby相关工作的建议吗? 很久没有找工作了。以前换工作一般是通过朋友的介绍,最后一次换工作是辞职创业。 国内Ruby的工作还不算多,除非对一门语言有特殊的感情或者自己给自己干活,我不建议工程师把自己限定在过于狭窄的领域,既然要找工作,最好为自己多留一些出路。 4. 你能给一个没有完整项目展示的Ruby新手一些建议吗? 首先,基础知识要扎实,最终考验程序员的都是语言以外的东西,语言只是一个外在的工具,用的好坏都看的是你的基础。除此之外,说到具体技术,如果是做互联网开发,最好掌握一些数据库知识,也要懂一些前端,熟悉HTML/CSS/Javascript,学习和了解一些成熟的构架和设计模式也是必要的。订阅一些相关的rss,了解社区的发展。Ruby社区中有很多开源项目,可以多去学习甚至参与这些项目。最好的办法就是多写多用。 5. 你可以说说怎样做可以让现在比过去更好的吗?主要是关于使用Ruby工作、客户、如何寻找好的客户方面。很多人梦想着现在比过去好,现在比将来好,所以请写下任何你关于超越过去的想法。 我不知道怎么回答这个问题,我只能说热爱你现在在做的事情,然后,尽人事,听天命。另外,如果你现在用的是微软Windows,改用苹果产品会让你比以前过的更好。如果你已经在用Mac了,那等下次升级吧。 6. 你可以推荐一些你认为将帮助一个程序员生活得更好的书籍、网站、秘诀吗? 我不知道什么能让程序员生活得更好,只是列部分我读过,看过,并且对我有过帮助的东西: 书: Introduction To Algorithms The Design of The Unix Operating System Advanced Programming in the UNIX Environment以及其他你能找到的Richard Stevens的书 Design Pattern Refactoring Getting things done 网站: 我现在只看google reader了,但我认为它在消耗我的生命,不看它也许可以让我的生活更好 秘诀: 写一百万行代码。每工作日写一千行,四年可成。每工作日写四千行,一年可速成。 7. Read more about ChinaonRails关于Rubyist的调查[…]