2008年5月29日星期四

Install Patch

When I tryed to install patch with the command:

sudo apt-get install patch

I have occurred:

Media change: please insert the disc labeled
'Ubuntu 7.10 _Gutsy Gibbon_ - Release i386 (20071016)'
in the drive '/cdrom/' and press enter


Resolve:
Comment out all the "deb cdrom:" lines in /etc/apt/sources.list

2008年5月26日星期一

One Foundation

人间百味,惟善最苦

经过这次,已经彻底不相信中国的官方慈善机构了。
以后捐款通通捐给壹基金,至少有德勒来审计,财务透明。
百度百科上壹基金的介绍:http://baike.baidu.com/view/944321.htm
官方网站:http://www.one-foundation.com/
壹基金的官网做得不错。第一次上中国红十字会的官网,我都以为是个假网站,太不专业了。

注意,壹基金不是独立的法人实体,而是挂靠在中国红十字会下的一个特殊组织,所以叫壹基金计划。壹基金有筹款权利,有监督权利,但是支出款需要红十字会批准。中国尚未批准公募的个人慈善基金。具体请看:http://finance.jrj.com.cn/news/2007-07-17/000002434244.html


"李连杰壹基金计划" 捐款方法
http://www.onefoundation.cn/html/cn/beneficence_01.htm

"李连杰壹基金计划" 是由中国红十字会博爱大使李连杰先生发起和倡导的一项为公益事业的筹款计划,他倡导每人每月最低捐出1元钱,帮助那些确实需要帮助的人们。基金的捐款全部进入中国红十字会总会帐户,并注明"李连杰壹基金计划"财务透明,定期公布。李连杰本人非常诚恳邀请社会与媒体共同监督。
捐款方式有以下三种:

1.使用财付通在线捐赠

2. 手机捐款 (999309 - 谐音是"救救救,善缘久")
如果您愿意捐1或2元,可以发送短信1或2到999309;如果您愿意每月捐款5元或10元或15元,可以发送短信MY5或MY10或MY15到999309。

3. 永久义工
如果您有能力并愿意成为"李连杰壹基金计划"的永久义工,您可以每年捐赠999元。
邮局汇款:
地址:中国北京东城区北新桥三条8号中国红十字会总会李连杰壹基金计划
邮编:100007
银行转账:
开户单位:中国红十字会总会 (请务必在附言处注明“李连杰壹基金计划”)
人民币开户行:中国工商银行北京分行东四南支行。
人民币账号:0200001009014413252
外币开户单位(account name):Red Cross Society of China Jet Li One Foundation Project
外币开户行(bank address):China CITIC Bank Beijing Jiuxianqiao Sub-branch
外币账号 (account number):7112111482600000209
外币开户行 (Outside of Mainland China):
China CITIC Bank Beijing
Jiuxianqiao Sub-branch
Red Cross Society of China
Jet Li One Foundation Project
外币账号 (Account #): 7112111482600000209
该计划期待人人参与,为他人,为自己。捐一元钱,出一点力,献一份爱。赠人玫瑰手有余香,在帮助他人的时候,您一定会感受到更多的幸福和快乐。
行动吧!"李连杰壹基金计划"等待您的参加。
最后提醒您注意,我们目前只有以上三种捐款方式,您不要相信其他途径的筹款。

2008年5月18日星期日

2008_5_12_14_28

为在地震中丧生的同胞默哀
从本月起,每月存一百元到专门帐户,作为将来灾难发生后的预备捐款。

2008年5月11日星期日

RailsCasts 006 symbol to proc

返回所有project的name,传统写法:
projects = Project.find(:all)
projects.collect { |p| p.name }
使用rails提供的shortcut:
projects.collect(&:name)
刚开始可能会觉得有点weird,不过习惯了就感觉很方便,还可以使用链式操作:
projects.collect(&:name).collect(&:downcase)
而且不止collect方法可以这样用,所有需要跟block的方法都可以用:
projects.all?(&:valid?)
projects.any?(&:valid?)
projects.each(&:save!)
意思是对每个project执行其save!方法,&后面跟的就是要执行的方法名称的symbol。
看完这个episode,不得不叹一句,编程就像是在说话一样,太强大了。

另外,在回复中有读者问到:如果&后的方法有argument的话,还能这样用吗?
作者的回复:Nope, it only works on very simple method calls which don't take an argument. Anything more complicated and you will need to use the full block.

还有老兄问能不能这样写:
ActorNames = Actor.find(:all).collect(&:last_name + ' ' + &:first_name)
作者推荐在actor model中定义一个full_name方法,然后调用这个方法:
ActorNames = Actor.find(:all).collect(&:full_name)

RailsCasts 005 using with scope

接上回episode 004,如果我们要查top 20 tasks而非全部记录,该怎么做呢?
不妨直接告诉聪明的find_incomplete方法:
@tasks = Task.find_incomplete :limit => 20
然后在方法定义中使用with_scope:
def self.find_incomplete(options => {})
with_scope :find => options do
find_all_by_complete(false, :order => 'created_at DESC')
end
end
当然,如果不用with_scope,或者还想传order条件(上面order是写死了的),可以merge options:
def self.find_incomplete(options => {})
find_all_by_complete(false, (:order => 'created_at DESC').merge(options))
end
或者使用reverse_merge:
find_all_by_complete(false, options.reverse_merge(:order => 'created_at DESC'))

在关联查询里,也可以传options进去:
@tasks = @project.tasks.find_incomplete :limit => 20
这里的task查询在两个scope里,一个是@project限定的scope,第二个是:limit限定的scope

RailsCasts 004 move find into model

在controller里:
@tasks = Task.find_all_by_complete(false, :order => 'created_at DESC')
改成:
@tasks = Task.find_incomplete
然后在model里定义incomplete方法,这是一个class方法,前面要加self:
def self.find_incomplete
find_all_by_complete(false, :order => 'created_at DESC')
end
注意方法定义体里的find…方法前不用加self,因为当前的作用域就是model类本身。
到这里都看似很平常,下面神奇的就来了。在episode 003里介绍的关联查询也可以用这里定义的find_incomplete方法:
@project = Project.find(params[:id])
@tasks = @project.tasks.find_all_by_complete(false, :order => 'created_at DESC')
可以改成:
@tasks = @project.tasks.find_incomplete
也就是说,凡是Task的class方法,都可以在@project.tasks这样的关联查询中使用。

RailsCasts 003 find through association

关联关系:
Project has_many Tasks
Task belongs_to Project
传统做法:
@project = Project.find(params[:id])
@tasks = Task.find(:all, :conditions => ['project_id = ? AND complete = ?'], @project.id, false)
Rails做法:
@tasks = @project.tasks.find(:all, :conditions => ['complete = ?'], false)
episode 002介绍的动态方法进一步简化:
@tasks = @project.tasks.find_all_by_complete(false)

RailsCasts 002 dynamic find by methods

传统的查询方法:
@tasks = Task.find(:all, :conditions => ['complete = ?', false])
@tasks = Task.find(:first, :conditions => ['complete = ?', false], :order => 'created_at DESC')
动态查询方法:
@tasks = Taks.find_all_by_complete(false)
@tasks = Taks.find_by_complete(false, :order => 'created_at DESC')
注意第二个,直接把:order这个hash作为第二个参数传进去就可以了。

RailsCasts 001 caching with instance variable

这是RailsCasts系列的笔记。

用实例变量来缓存数据库查询结果,这样就不用每次都访问数据库了:
@current_user ||= User.find(session[:user_id])
但是,实例变量的作用域是一次请求,第二次请求还是会重新去查数据库,得到的结果来给@current_user赋值。

2008年5月10日星期六

Fxxking docx

需要打开一个word文档,但后缀居然是docx,一问才知是office2007的杰作,用以前的office版本居然打不开。
上网一搜,倒是有解决方案,下一个补丁:http://download.microsoft.com/download/6/9/E/69EA942D-4636-4350-A526-0BFD9771A12A/O2007Cnv.exe
天啊,一个补丁居然要26.7M,谷歌金山词霸的安装包才23.2M啊。
于是在等待补丁下载的漫长过程中,上来写了这篇抱怨M$的blog。

2008年5月5日星期一

MySQL dump 命令

MySQL导出sql语句的命令:

mysqldump -u root database_name > database_name.sql