该死的小偷

今天一早上班,女朋友的手机就被偷掉了。放下自己的文明,不得不骂一句:该死的小偷。

其实上海的治安也不见得好到哪里去,每天成百上千的手机被偷,不知道多少夜归人在回家的路上被抢。还和谐社会,至少我作为一个平民百姓没有感觉,每天上下班依然是提心吊胆,左顾手机右顾钱包,我可以肯定最起码在上海,没有几个人可以说没被第三只手光顾过。这样的日子让人怎么过的安心?

话说回来,和小偷讲良心是跟自己过不去。但是,难道小偷们就没有自己的父母没有自己的孩子?看到自己的家人在社会中被瞧不起,对得起他们么?

又碰到这种事情,心里是在觉得很无奈,很纠结

Console2 错位问题

在 Windows 平台上 Command Prompt 之烂为很多开发人员所诟病,任何一方面都不能和 Linux 或者 Mac OS 的 Terminal 相比。一个朋友推荐我使用 Console2 ,用过以后爱不释手,唯一的问题就是在显示中文的时候会产生错位。

在 Google 和 SourceForge 上查了很多资料,也稍微了解了一下 Console2 的工作方式,解决这个问题并不是很复杂。

产生这个 bug 的原因是因为 Console2 只是作为一个 command 窗口的代理,负责讲输入输出流在两个窗口之间传递,而输出部分则是读屏的方式,因此收到 Command 窗口字体设置的影响,了解这一点以后,最简单的方式就是修改掉 Command Prompt 的字体设置,用一个 TypeTrue 字体替代默认的光栅字体。

Get Console2 on SourceForge.net

ActiveRecord 中的 include 关系

对 include 很多开发者避而不谈,也有很多人趋之若骛。其实归根结底只是生成了不同的 SQL 语句。至于造成的影响,见人见智,当然和项目的需求有很大的关系。

但是有一点,include 既不是天使也不是恶魔。

合理的使用 include 可以避免 N+1 的问题,但是 Rails 生成的 SQL 确实不怎么好看……而且今天还发现了一个问题:

A 中声明了一个关系

has_many :items, :order => 'some_time_field DESC'

但是在执行 A.find(123, :include => :items) 的时候,可以发现对象的 items 集合并没有按照预想的顺序排列,查看 log 中的 SQL 记录,发现 order 子句并不在里面。

暂且归结为 BUG 或者未完成状态吧……

关于开发和国际化的分离

当前的项目有一个需求:网站有多个语言的版本,但是翻译工作不是由公司总部的人完成,翻译工作人员分布在世界各地;另一个情况就是项目经常更新,换句话说 catelog 会经常更新。面对这样的情况,老板要求不使用 poEdit 客户端,而使用 web 方式来访问、修改和更新。

因为项目是基于  Ruby on Rails 开发的,i18n 的实现使用  GetText  ,面对这样的要求,自然反应就是需要一个 po parser ,放在 prealpha 服务器上,所有的翻译工作人员通过这个页面来管理自己所负责的 catelog。

google 了好多内容,都没有发现一个现成的 po file parser。想从 gettext 的源代码里面找到 parser 代码,却发现  gettext 这个 gem 里面基本都是 module_eval 的实现方式,相当的丑陋,所以放弃了。

最终,还是去找到了 gettext 这个项目的规范文档,按照规范自己写了一个简单的 parser,还不支持 comment,暂且凑合吧,等以后有空余时间了再做扩展。

P.S. 计划赶不上变化,所以在项目的开发过程当中要做好充分的心理准备。这是一个经验的积累,不是一朝一夕就能达到的。当面对一个需求,能够预测到以后可能会做哪些扩展,怎么设计结构最为灵活,这是一个架构师必须具备的素质。

Safari 的 JavaScript 解析引擎

昨天在对旧项目做修补的时候,重写了一个通用的 Validator 类,本来打算以后在其他项目中也可以使用。写完以后在浏览器下测试,Internet Explorer,Firefox 下都表现得非常好,然而在 Safari 下,无论如何都没有反应。

由于当时是作为表单验证的,绑定在 onsubmit 事件中, onsubmit="return checkForm();"。第一反应就是:难道 Safari 不支持这种写法?来来回回折腾了半天,终于发现问题了。在类的内部,一个方法定义中,变量没有加 var 声明。因为这个原因,导致 JavaScript 解析到这里出错,类无法加载。偏偏我的 Safari 没有调试工具,JavaScript 错误也没有提示,郁闷啊。