Today's the day

思考,自知,耐心

这些天

没有条理,思维慎密者慎入……

“页面补丁”插件

晚上花了 5 分钟 (没错,就是 5 分钟),完成了这个插件。

功能就是在 Blog 的某些位置插入自定义的内容,目前支持的位置: 文章正文上方、文章正文下方、文章简介的下方,以后再开发新的位置~

可以拿来插入广告,比如本文下方的 google ad,或者插入版权声明什么的,很方便~

唉,英语还是太差

看过几本英文书就觉着自己了不起了,其实自己英语还是很烂的……

最近又开始看那本 <<算法导论>>,再加上那本 <<REST Web Services>>,看来看去就一个感觉……慢!

每天看十几页,差不多就得一个小时,也不会抓重点,全盘逐句阅读,算法倒是应该这样看,不过 REST 拖拖拉拉看到现在还没有看完,本来只想了解一下 REST 相关,可是现在已经在上面花了不少的时间。

而且最近连几个 com 和 con 打头的单词都开始搞混,暴……  赶紧搞了个专项复习……

究其原因…………还能有什么原因,看得还不够多!继续看吧,加大阅读量~

开始用 Amarok

原来一直用 Audacious,这两天不知道怎么回事,播放某些 wav 文件的时候常常发生杂音,然后 Audacious 就死住了,估计是哪个库更新了之后不兼容吧,找不到解决办法,只好尝试换一款音频播放器。

Gnome 下的找了半天,MPD 什么的懒得折腾,Exaile 本来还不错,可惜和 Audacious 的问题一样,实在找不到什么满意的,最后干脆装了 Amarok。

原来一直有种错误的认识,认为拿 Gnome 当桌面环境,就应该尽量不用 KDE 下的程序,仔细想想一点道理都没有 。 只不过基于的库不同嘛,程序之间互相又没有影响。估计是我很早的时候,留下了 KDE 程序运行都很缓慢和不稳定的印象的缘故吧。现在已经没有了这种问题,电脑也足够快了,再说,现在连 Windows 下的程序都能通过 VirtualBox 和 Linux 桌面共存了,难道 KDE 和 Gnome 的程序还要隔离吗?

被 Ruby 耍了一下

Fixnum 有个实例方法 [ ],返回数字二进制表示的第 n 位,比如:

  1. > 8[3]
  2.  1

  1. > 10.downto(0){|n| print 255[n]}
  2. 00011111111

如果传入个符号会怎么样呢? 本以为会出错,发现运行正常,返回 0:

  1. > 5[:asdasdasd]
  2. 0

果不其然,[ ] 对传入的符号做了隐式转换,符号的 to_int 方法返回一个唯一代表本身的整数,一般这个整数很大,也就是返回数字的很高位,自然是 0。

这样的话,像 val[:something] 这样的形式,有可能 val 是个 hash,拿符号当作键,也有可能像上面那样 val 只是个数字。

前两天写个东西,类似下面的代码:

  1. @user.data ||= {:a => 1, :b => 2, :xxx => xxx ....... }
  2. ....
  3. val = @user.data[:someting]

运行发现,不管我怎么取,val 的值都是 0 ……百思不得其解

后来发现 users 表的 data 这项,不小心在数据库中指定默认值为 0 了,所以 @user.data 就不是 nil,根本没有被赋值为后面的 hash,val 就是 0[:something],怪不得取什么都是 0。

符号可以响应 to_int,字符串无法响应 to_int,所以传入个字符串就报错了,不过数字的 [ ] 方法传入非字符的变量有啥意义呢?检测参数不是 Fixnum 就 raise,这样就好了……


Update: 值得庆幸的是,最新的 Ruby 1.9.0 中已经拿掉了 Symbol 的 to_int 方法~

RUBY_VERSION                                       # => "1.9.0"
:foo.to_int                                       
# ~> -:2: undefined method `to_int' for :foo:Symbol (NoMethodError)

偷偷的看书,打枪的不要

Chito 1.0.1 更新摘要

修正一些 bugs,改善一些小地方。

继续努力,1 月份计划

把 1.0 的 Chito 放到了服务器上,把 Chito 代码迁移到了 SVN 上,重新看了一遍《The Ruby Way》,又发现了不少好营养。 至此, 12月的计划 圆满的完成了

07 年马上就要过去,9 月到现在,这 4 个月,还算说得过去,干的事情虽然没自己期望的多,但也不至于懊悔得想去撞墙,就这样吧,07 年萨优呐拉~

开始用 SVN 管理 Chito 代码

原来一直以为 SVN 是个很复杂的东西,而且觉得 SVN 只有在多人协作的时候才能发挥左右。当初 Ruby中文社区 的版主 skyover 就建议我把项目移到 SVN 上去,不过因为当时忙着毕业,再加上对 SVN 一点都不了解,就没顾上搞,真是不好意思。

这两天花了点时间看了看 SVN 的东西,发现这东西还真是简单,一条命令就可以在电脑上创建个项目仓库,基于目录的管理清晰明了,常用的命令就那么几个: commit, update, co, diff, info, status,其他一切神奇的事情 SVN 都会帮你做好。

确实,SVN 更适合团队协作的情况,像我这样只是一个人搞个超小的项目,很多 SVN 都优点都没有用到。不过,只要花 5 分钟把项目迁移到 SVN 上去,就可以让 SVN 管理你的代码,保存你每一次的改动,告诉你版本之间某个文件的差异,让你可以追溯到之前的任何一个版本……何乐而不为呢~

Rails 中生成二级域名

Rails 中的 url_for,默认生成的地址是相对地址,当然你可以传入参数 :only_path => false,这样就能生成完整的地址。

但是有的时候,我们要指定二级域名,比如像 is-programmer.com 这样的多用户 blog,我们要生成 http://galeki.is-programmer.com 或者 http://yyc.is-programmer.com 这样的地址,但是 url_for 只能传入 :host => 'xxx',并没有 subdomain 的选项。

当初找到的第一个解决办法,就是 Url For Domain 插件,安装之后,只要指定 :subdomain => 'xxx' 和 :only_path => false,就会生成带有正确二级域名的完整地址。

但是升级至 Rails 2.0 之后,貌似这个插件和 Rails 有冲突,没法正确运行。

后来折腾了一番,发现解决这个问题很简单,只需要在在 controllers/application.rb 中加入下面的代码,重定义核心的 url_for 方法即可:

  1. def url_for(options = {}, *params)
  2.   if options[:subdomain] then
  3.     options[:only_path] = false
  4.     host = []
  5.     host << options.delete(:subdomain)
  6.     host << request.subdomains[1..-1] if request.subdomains.size > 1
  7.     host << request.domain
  8.     options[:host] = host.join '.'
  9.   end
  10.   return super(options, *params)
  11. end

这样就顺利解决了问题,连 :only_path => false 都不用写,直接传入 :subdomain => 'xxx',就会自动生成带有二级域名的完整地址了~