Today's the day

思考,自知,耐心

Chito - 向 WordPress 学习

从当初的 GemBlog 0.x 到现在的 Chito 1.0 ,已经过去一年的时间了,现在看看当初的界面,还真是简陋哈,没想到现在像样多了。

当初只是个兴趣的产物,现在也决定把他当作一个正式的软件来做,这也是回馈 Rails 的最好方式。既然决定继续折腾下去,那么就得有个方向,思来想去,决定像 WordPress 学习~

WordPress 可以说是现在世界第一的 Blog & CMS 平台,闪耀得都无法让人正视~   别的不说,光是那数不清的皮肤和插件就能让人看花眼。

前两天改了边栏,Chito 的皮肤方面已经变得灵活了多,各种样式的皮肤都可以很好适应。那么,接下来就用插件扩展 Chito 的功能吧~

搜了下,WP 的常用插件其实也就那么几个,大部分在 Chito 上都可以很容易实现,列了个表,尝试一个个实现他们:

  • 热门文章
  • 相关文章
  • 自动链接替换
  • SItemap
  • 评论来源 IP
  • tag 自动完成
  • 密码文章

等搞好 1.0.2 beta 的后续工作就开工~

边栏顺利改造中~

折腾了一个晚上,边栏终于可以灵活的配置了,代价就是具有特殊边栏布局的皮肤要带一个额外的配置文件,指出可以配置的边栏是怎么布局的。

多边栏和脚栏

边栏项是 Blog 必不可少的一部分,边栏的位置也随着皮肤的不同显示在布局的不同位置,不过,目前 Chito 的边栏只有一种布局,就是只有一列边栏,边栏项目纵向的分布在页面左边或右边,缺乏灵活性。

随着宽屏的流行,双边栏甚至三边栏的皮肤也开始出现,这样就不会因为边栏项目过多,把页面拖得很长。

另外脚栏( foot bar ) 这种形式也越来越流行了,毕竟边栏的内容都是次要的,放在页面尾部,可以把横向的空间尽可能多的留给文章的主要内容。

还有的皮肤将某些栏目放在 Blog 标题的右方,甚至先放一个横向的宽边栏,再在下方放两列纵向的边栏,总之边栏项目的位置非常灵活 ( 也不能只称之为“边”栏了 )。

Chito 目前的单一边栏布局已经跟不上时代的发展 ,所以最近的首要任务,就是重新折腾一下边栏的部分,让其适应各种布局

访问 is-Programmer 的浏览器统计

好几天没更新,在家光养膘了,发个文章凑凑数。

到家,恢复工作环境

顺利到家~

机场已经变成了旅馆,航班晚点和未定的通知不停的在广播中播放,下午 4 点的航班,被推迟到晚上 10 点的比比皆是,非常走运的是,我的航班竟然是正常起飞,很顺利的就到了家 ~ 祝愿还困在汽车站、火车站、飞机场的人们能够顺利的回家……

到家已经快凌晨 1 点,说实在的,现在南方比北方要冷,家里更不必说……一进家门,一股热浪扑来,屋里大概 28 度,只好穿裤衩和背心,不然就会中暑,在上海我可是裹两件毛衣才能在屋里待,暖气的威力真不是盖的……

3 点多开始折腾电脑,半年前的 Gentoo,sync 了一下,基本每个包都要升级,先升了 xorg-server 和 nv 驱动,然后进 X 一边干其他的事情一边升级~

现在已经恢复好了和上海一样的工作环境,Chito、ff 收藏夹、Scrapbook、liferea 的 feed 列表也同步上了,这半年,自己的 Gentoo 水平和 Linux 水平确实长了一些,上次回来的时候,折腾了 3 天才把电脑弄好,这次很从容的花了 2 个小时就搞定了……

用惯了新电脑,再用家里的老机器好郁闷……还好屏幕分辨率是一样的……想当初在这个老机子上,我也无畏的去编译 firefox 和 ooo,现在肯定不会这么干了汗……

不过家里的网速真快,夜里下软件包能到 9M/s,真怀疑这 Gentoo 镜像是不是和我住一个楼的家伙开的……

睡了俩小时,听到电脑硬盘不响了,原来是有个包 emerge 出错了,修正好,顺便就起来了,7 点天亮了,感觉不错~ 9 点多去交网费,否则后天就要被断网了汗,收网费的可别收摊了啊……

Real Programmers

xcb 的漫画真是非常有趣~

原来也看过一个类似的漫画,不过说到拿磁铁就结束了,没想到 xcb 这个竟然到了“蝴蝶效应”,顺便还不忘恶搞 Emacs 一把~

迂回的实现了覆盖 helper 中的函数

终于搞定了 Chito 的相对时间插件,早就想实现这个插件了,不过一直没有想出好的实现方法,目前这方法虽然有点迂回,不过总体效果还是不错,也给以后的插件开发带来了很大的方便~

好大的雪……

上海也能下成这样,这雪放在北方也不算小雪了~

现在还在下~

中文相对时间

不知道啥时候开始,流行用相对时间来表示当前的日期,这种方法确实是不错,同 “2007 年 1 月 24 日” 相比,“1 天前” 这种表示确实看起来舒服多了,毕竟人们在思考时间的时候,大多数也是以当前的时间作为基点。

如果是个是个人气很旺的论坛之类,还可以看到某回复发表于 “n 分钟前” 这样的效果,顿时感觉人气和交互度高了很多。

Rails已经内置了对相对时间的支持,time_ago_in_words 这个 helper 就是干这个用的,比如要显示文章发表的相对时间:

post at <%= time_ago_in_words(@article.created_at) %> ago

这样就会显示为诸如 “post at 5 days ago” 这样的效果了~

只不过是英文的,要显示中文的就要翻译一下了,开始我想,把 time_ago_in_words 返回结果中的 days 替换成“天”、month 替换成“月”之类,后来去看了下源码,发现源码很短,重新写一个就行了。

time_ago_in_words 实际上是调用的 distance_of_time_in_words 这个函数,并且以 Time.now 作为第二个参数而已:

def time_ago_in_words(from_time, include_seconds = false)
  distance_of_time_in_words(from_time, Time.now, include_seconds)
end

这样的话,我们把 distance_of_time_in_words 中的英文改成中文就 ok 了:

  1. def distance_of_time_in_words(from_time, to_time = 0, include_seconds = false)
  2.     from_time = from_time.to_time if from_time.respond_to?(:to_time)
  3.     to_time = to_time.to_time if to_time.respond_to?(:to_time)
  4.     distance_in_minutes = (((to_time - from_time).abs)/60).round
  5.     distance_in_seconds = ((to_time - from_time).abs).round
  6.  
  7.     case distance_in_minutes
  8.         when 0..1
  9.             return (distance_in_minutes == 0) ? '不到 1 分钟' : '1 分钟' unless include_seconds
  10.         case distance_in_seconds
  11.             when 0..4   then '不到 5 秒'
  12.             when 5..9   then '不到 10 秒'
  13.             when 10..19 then '不到 20 秒'
  14.             when 20..39 then '半分钟'
  15.             when 40..59 then '不到 1 分钟'
  16.             else             '1 分钟'
  17.         end
  18.  
  19.         when 2..44           then "#{distance_in_minutes} 分钟"
  20.         when 45..89          then '大约 1 小时'
  21.         when 90..1439        then "大约 #{(distance_in_minutes.to_f / 60.0).round} 小时"
  22.         when 1440..2879      then '1 天'
  23.         when 2880..43199     then "#{(distance_in_minutes / 1440).round} 天"
  24.         when 43200..86399    then '大约 1 个月'
  25.         when 86400..525599   then "#{(distance_in_minutes / 43200).round} 个月"
  26.         when 525600..1051199 then '大约 1 年'
  27.     else                      "#{(distance_in_minutes / 525600).round} 年"
  28.    end
  29. end

把上面的代码加到 application_helper.rb 中去,就可以看到中文的相对时间了~ 当然你也可以去掉 “大约” 这个繁琐的词,或者随便改成自己喜欢的中文表达方式~

过两天就做 Chito 的相对时间插件~ 

服务器虚惊一场

昨天晚上起床就发现网站上不去了,ssh 也连不上,心想不妙,去问网管,网管说是内网有个机子在 arp 欺骗,不过每次似乎总是这个原因,真有点怀疑真实性……

网管说等机子自动刷新完 mac 缓存就好了,如果实在着急,可以打电话重启机子。我等了一个小时,还是没好,无奈只好打电话去重启,这也是服务器自上架以来的第一次重启,之前服务器已经无故障平稳的运行了三百多天,不过服务器没什么负载也是真的,所以没什么可自豪的。

结果重启之后还是不行,心情一下跌倒谷底,在想服务器是不是启动失败了、硬盘坏道了、 CPU 烧掉了……越想越郁闷……

但是大半夜的也没发解决问题,只好先去吃饭,吃到一半,试了下发现网站都可以上了,顿时心情大喜,心想运气真是不错~

等我吃完饭,打算 ssh 连一下服务器,结果竟然是 connection refuse,顿时晴天霹雳,心想完蛋列,肯定是上次升级 openssl 之类的,导致 ssh 服务没有正常启动吧,ssh 启动不了,就啥也干不了了,难道这次真的得去跑机房了?

镇静了一下,忽然想到,原来 ssh 的默认端口号我改掉了,升级之后是不是端口也恢复成默认的了呢,马上尝试,OK! 连上~ 再次欢呼~

一身冷汗啊,只要 ssh 不出问题,其他一切问题都好办,ssh 一挂,就只有跑路了……

下次 etc-update 的时候一定要仔细看了……