推荐一个console插件

前几天在看 screencasts,发现一好插件:Hirb 。这是个扩展命令行的插件,可以以更加易读的形式展现方法返回的内容(比如以 mysql 输出的形式展现 ActiveRecord 实例)

gem install cldwalker-hirb --source http://gems.github.com/

# Append the following lines into ~/.irbrc
require 'rubygems'
require 'hirb'
Hirb::View.enable

Screenshot of Hirb

发现“里克”

睡觉之前,习惯性的打开 google reader 看看国外有没有最新的 feed。空白的列表,唯有推荐中小字一行:里克的自习室,关注Ruby和Rails学习与开发

发现里克。

发现了一位创业者,一个普通的程序员,一个与生活做斗争的坚强的父亲。我无法描绘出心里的感受,所能做的,只是默默的记下这些,在心底祝福。

里克,一切都会好的!

生活并不平台,里克在努力

生活并不平坦,里克在努力

互联网之漫谈(一)

事情的起因是这样的:因为27号上海有一次Facebook开发者大会,我原来的公司,现在的五分钟,将会出席演讲。和Ellison在Gtalk上聊了会天,然后和女朋友打电话,话匣子就打开了……

今天先说说钱。

早在2000年互联网泡沫破灭之前,钱是个什么概念?当时的社会在我看来,赚钱的传统行业。哪些算传统行业呢,我觉得吧,最恰当的例子就是,商品是一种交换物,可以换取等价的货币。这么说有点拗口,但是反过来,就是你花钱买了一样货品,这就简单了!那么依靠这种商品的流通而赚取利益的行业,我称之为传统行业。

在这种行业当中,钱的概念在人的脑海中会被具象化,这种影响是潜移默化的,比方说,你对一个人描述1000万,很难抽象的描述清楚,但是当你和他说,市中心的5套房子,那么他对这个价值就会有一个清楚的认识了,两个人在这问题上才能取得共识,才会有继续深入的交流。

方才和女朋友聊天,她和我不同,我从互联网盛行之处就站在风口浪尖上接受摧残,亲身经历过99年-2000年之间泡沫破灭的过程。不瞒您说,当初我就是推手的一份子。当全中国沸沸扬扬抗起互联网大旗,号称要闯出一番事业,此所谓冤大头。冤大头有“梦想”,有“钱”,总有人要贯彻下去吧,于是底下的工作人员,一般都是程序员,就称为推手了,拿钱干活,将冤大头推落深渊的推手。扯远了。

当时砸钱的那个规模,就如我刚才所说,光用数字无法给人感官体会,直接说哪些个投资占当时经济总产值多少多少来的直接点,只可惜已经无可考证了。那时候人的心态,已经跨越了理性的边缘,近乎疯狂。你想啊,传统行业,一年的营业额也就那么点钱,开个店人家敬称您为老板,乐啊,倍儿有面子。现在冒出来个英特耐特,动动手指头就比您老辛苦一年买卖赚的还多个XX倍,这还能理性么?

一浪又一浪,后浪推前浪,钱就这么去了,这么起泡沫了,这么消逝在闪烁的硬盘灯之中,在比特世界无影无踪。

这时候钱是个什么概念?已经不再有一个具象化的描述了,多少多少风投,多少多少推广,只不过一个一个的数字而已,虚!我已经司空见惯,可是当我和她交流的时候,我才猛然醒悟:对大多数人来说,互联网还是个很陌生而不可思议的东西,这玩意儿怎么个赚钱法。即使我仔细给她粗算各种收入的比例,成本,等等,对她来说还是过于陌生了。

是啊,谈何容易,在这个时代,钱的概念已经被抽象到游离于物质价值之外,或者说,被一种非物质的存在打破了,那就是信息。说到这个词,我想起中学时候的计算机客,讲信息的定义。当时原文意思是这样讲的:举例说,书上的文字并不是信息,应当称之为载体;文字中所传达的能为人所理解的意义,称之为信息。多么抽象的文字啊,反正当时没多少人能理解也没多少人去相信,就这么填空去了。再回国头来看现在,这种抽象到不能再抽象的东西,却能换来实实在在的钱,和传统行业一比较,能让人接受么?

当我说,一家互联网公司,每年能盈利几百甚至上千万,她就更加怀疑了,而且我很失败,没能解释清楚,反而搞到她心情很糟糕,没做好男朋友的工作啊……又扯远了。总之,我很难解释清楚,为什么现在在我,以及在这个行业中,几百万并不是很大不了的事情,仅仅是数字的大小比较而已。

而“钱”这个概念的转变,以及度量的标准的不同,成了一个分界线。我一直认为,做什么事情能赚钱?就是做那些不把钱当钱的,比如金融,钱就是计算的工具,和数学公式没什么区别,代表是华尔街投行;又比如互联网,钱就是用bit换来的,在物质上什么都没付出,代表就是互联网及其上的整个世界。

说的很乱,不过这几篇博客本来就是乱弹,无所谓,我只是有感而发,想畅通一下,仅此而已。各位看过了,就当是比特好了。

清明

清明时节。
雨。
纷纷路上行人,
欲断魂。
借问酒家何处?
有牧童,
遥指杏花村。

iDeneb 蓝屏

在 PC 上安装 iDeneb 1.4 – Leopard 10.5.6,显卡 9600GT 512MB,调整分辨率、刷新率都会导致蓝屏,其原因在于 leopard 默认输出至主输出端口(出现这个问题的显卡都有两个输出端口),而蓝屏实际上就是第二个显示屏的内容。

解决办法:把显示器插在主输出端口上,一般靠近金手指的为主输出。

Messenger:Mac with Safari 4

更新了 safari 4 以后 microsoft messenger:mac 出现一个奇怪的问题,每次发送一条消息以后,输入框都会失去焦点,就是说没办法连续输入第二条消息,只能tab一下或者是点击一下。很 suck 的 bug!

在 apple 和 microsft mac 论坛都查了一下,都是更新 safari 4 以后引起的,还不确定是因为 webkit 的关系,还是 security update 的关系。回到 safari 3.2 可以解决问题,但是,谁舍得?作为一个优秀的浏览器,即使是 beta 版本也给所有 mac 用户带来震撼的体验,我想没什么人会舍得降级。

那么,就等待 ms 或者 apple 发布 bug fix 补丁吧,相当的无奈 :-(

扩展 Paperclip

Paperclip 是 Rails 的一个处理 attachment 的插件,相对于以往的 FileColumn 在灵活性和效率上更胜一筹,而且代码也比较好看。这个视频 简单的介绍了 Paperclip 的使用方法。

默认的设置,URL 的占位符中与模型本身相关的只有 id,但是一些情况下,你可能会更希望以其他形式来组织你的附件目录 – 比如以 SKU 来代替数据库记录的 id。这里我们暂不讨论这种做法的好坏,双方面的,好处是目录结构更具有维护性,坏处是万一以后升级数据库,SKU 加个前缀什么的……

Here we go!

使用 paperclip 需要在 model 中调用 has_attached_file 方法,检查文档,有一些简单的使用样例,但是没有我们需要的。通过方法描述我们知道这个方法建立了一个 Paperclip::Attachment 对象,我们继续看文档。对象的方法很少,首先思考:应为我们需要配置的是 attachment 的 url 规则,那么应当是对应整个类而不是单个实力,因此我们只关注 Peperclip::Attachment 的类方法,只有两个。default_options 没有描述,而且展开代码发现并不是我们需要的。

# Paperclip::Attchment.interpolation

A hash of procs that are run during the interpolation of a path or url. A variable of the format :name will be replaced with the return value of the proc named “:name”. Each lambda takes the attachment and the current style as arguments. This hash can be added to with your own proc if necessary.

这正是我们需要的,接下来的扩展就非常方便了:


# app/models/product.rb
class Product < ActiveRecord::Base
  has_attached_file :photo,
    :style => { :thumb => '64x64>' },
    :url => '/images/products/:to_param.:extension'

  def to_param
    return self.sku
  end
end

# config/initializers/paperclip.rb
Paperclip::Attachment.interpolations.merge!(
  :to_param => lambda { |attachment, style| attachment.instance.to_param }
)

在这里不直接使用 :sku 作为占位符而使用 :to_param 是为了在其他模型中更加的灵活。

Rails 之一月动态

一个多月之前,Rails 2.2.2 发布了,同时,官方紧接着发表声明,称 Rails 2.3 正在开发中。看到这个消息,一边感叹于 Rails Core Team 进度之紧凑,同时开始做一件很有意思的事情:在接下来的事件里,每天都检查一次 http://github.com/rails/rails/tree/master 上的所有 commit。除了常规的性能优化调整、更独立的代码结构之外,的一系列提交揭示了 Rails 的下一步:

  • Joshua Peek 初次提到 middleware (commit),接下来似乎是他一直负责这部分的开发
  • 官方博客的每周更新,Rack integration 开始与 Rack 整合的步伐,middleware 开始频繁出现在以后的代码中
  • 紧接着的 This Week in Edge Rails,开始移除与 CGI 相关的代码
  • 官方博客介绍 Rails Metal
  • Session Storage 也迁移至 Rack (commit, commit)
  • 随后的几个大 commits 将 Rails 从 CGI 解放
  • Merb 将与 Rails 3 合并

可以看出,高扩展性会是 Rails 2.3 的卖点之一,同时,开发团队似乎有想法把 Rails 设计的更加“热插拔”,通过引入 middleware,在将来会有更多的选择;而与 Merb 的整合,则可以借鉴其中优秀的设计思想,在更高的版本中加以实现和整合。

于此同时,Ruby 1.9.1 也在紧密开发之中,不过道路并不平坦,RC1 的发布延迟到 09 年的 1 月份。正如 Robbin 所说,09 年的 Rails 很灿烂

Merb 将合并至 Rails 3!

原文地址:Merb gets merged into Rails 3!

一直一来,关于 Merb 与 Rails 之间的优劣与取舍之间的争论,伴随着两个框架的不断发展而没有停息。终于,在圣诞前夕,Merb 终于要于 Rails 3 合并了!

原文同时指出,这次的合并不是大规模的 Rails 代码重写(This is not a big bang rewrite),相对的,作为第一个合并的版本,两个团队更倾向于让两者并存,用户可以根据实际需求选择适合的组件(比如 ActiveRecord / Sequel / DM 作为 ORM)。无论如何,我个人都觉得这是一个非常好的开端,Rails 有了 Rails 以外的思想,将来必定会更加精彩!

最后,在 timeline 安排上,目前开发团队的主要精力还是在 Rails 2.3(我自己连续 3 个星期在关注于 Rails 2.3 Edge 的 commits,准备了另一篇博文),2.3 将会在 09 年的 1 月份放出,then all eyes will be on Rails 3!

Rails 2.2 正式发布

Rails 2.2 从 RC1 到 RC2,终于发布了正式版(版本号 2.2.2),需要 gem 1.3.1。带来的新特性包括 I18N / Thread Safety / Connection Pool / Ruby 1.9 Compatibility 等等。

自己从 edge 一路紧跟 rails 步伐研究过来,随后会发表一些个人的实践和看法。

前段时间的热点:DHH 回应 Mongrel 作者的质疑,撰写系列文章:The Rails Myths 。原本打算一同翻译这6篇博文以及 rails 2.2 的新特性,因为种种原因不了了之……

Rails 2.2 官方博客:http://weblog.rubyonrails.org/2008/11/21/rails-2-2-i18n-http-validators-thread-safety-jruby-1-9-compatibility-docs