Today's the day

常识是十八岁之前在头脑中所铺下的偏见层;公理是为几千年的时间所神圣化的偏见。

Firefox 3 CSS Hack

Firefox 3 RC1 终于横空出世,试用了一下,感觉不错,页面渲染速度提升非常明显,js 的执行速度也有很大的提升,cpu 和内存占用率也下降不少,对此我已经相当满意了~

中文版上还有个粗心的笔误

Firefox 2 和 Firefox 3 在 CSS 的渲染在某些细节上还是有点差异,毕竟 Firefox 3 完全通过了Acid2。比如,这次 Chito 1.0.6 里面就碰到了,下面第一张是 Firefox 2 下期望的外观,到了 Firefox 3 下就变成了后面的样子:

  

所以有些时候确实需要 Firefox 3 的 CSS Hack,网上搜了一圈,好不容易看到了个:

  1. #hack, x:-moz-any-link, x:default {
  2.     /* Firefox 3 style here */
  3. }

这样 #hack 这个 id 的样式,只有 Firefox 3 可以解析,不去深究这样写的意义是什么,尝试了一下确实有效。

Chito 也支持浮动窗口了

Chito 边栏的功能是插件提供的,虽然在 “外观 -> 边栏" 下可以调整边栏的位置,但是想要调整某个边栏项的设置,就得跑到 “插件” 下去找,非常麻烦。

同样处境的,还有导航栏的设置,还有将来的评论过滤器的设置,所以搞个像 WP 那样的浮动设置很有必要。

正好看到了 Prototype Window,这个不错的窗口库,构建于 prototype 和 script.aculo.us 库之上,对于 Rails 项目来说很合适。

还附带了 Rails 的 Helper 文件,方便到家~

 

拆分数组

Ruby 中的 Array 类提供了非常实用的 select 和 reject 方法,可以方便的从数组中挑出或剔除符合条件的元素:

  1. a = [1,2,3,4,5,6,7,8]
  2. a.select {|x| x % 2 == 0}
  3. >> [2,4,6,8]

如果想要把数组拆分成两个集合,一个符合某个条件,一个不符合,要怎么办呢?

可以先写一个 select 然后再来个 reject:

  1. a = [1,2,3,4,5,6,7,8]
  2. even = a.select {|x| x % 2 == 0}
  3. odd = a.reject {|x| x % 2 == 0}
  4. >> even = [2,4,6,8]
  5. >> odd = [1,3,5,7]

这样的话,不仅条件要重复写两遍,数组中的元素也要遍历两遍

可以利用 Ruby 可以返回多个值的特性,来写个 separate 函数:

  1. class Array
  2.     def separate
  3.         yes, no = [], []
  4.  
  5.         self.each do |x|
  6.             yield(x) ? yes << x : no << x
  7.         end
  8.  
  9.         return yes, no
  10.     end
  11. end

这样,数组拆分一次就可以搞定了

  1. even, odd = a.separate {|x| x % 2 == 0}

评论过滤链

哎……这两天基本没怎么看书,自从决定要添加评论审核到 Chito,便一发不可收拾,兴趣完全转移到了这个上面来

评论过滤一直以来都没有一个完美的解决方案,即便是强大的 Akismet,对付某些中文评论仍显得有些无力,但是如果可以综合几种办法,效果还是不错的。而且有的时候,我们也想过滤或替换正常评论中的某些关键字,让评论们看上去更加水产……

于是过滤链的想法就顺理成章的产生了,每个评论过滤插件作为链上的一环,检测通过的话直接交给下一环,有问题的话标记为 spam 或者直接丢弃

在过滤链设置中还可以调整顺序,或者移除某个过滤插件~

这样的话,验证码也可以作为一个环节,加入或移出过滤链中。

每个环节可以有不同的错误消息,反馈到评论表单的上方:

比原来弹出一个 js 对话框的体验要好多了~

Safari CSS Hack

那个 ;# 貌似已经不能用了,从这里查到,现在可以用这个:

  1. @media screen and (-webkit-min-device-pixel-ratio:0) {
  2. /* Safari 3.0 and Opera 9 rules here */
  3. }

中间的 CSS 规则只会在 Safari 3.0 和 Opera 9 以上的浏览器上生效