Category Archives: 其它

Rails 3 beta 中文邮件乱码问题解决

更新: Mail 2.2 已解决此问题 如果你升级到了Rails 3 Beta,并且使用了ActionMailer,那么你会发现邮件标题出现有规律的乱码,每个8的倍数的地方都出现了奇怪的字符,这是ActionMailer和Mail gem配合出现了问题,解决的办法很简单,修改ActionMailer::Base#quote_fields,将这个函数改成如下: def quote_fields!(headers, charset) #:nodoc:   m = @_message   m.subject ||= headers[:subject] if headers[:subject]   m.to ||= headers[:to] if headers[:to]   m.from ||= headers[:from] if headers[:from]   m.cc ||= headers[:cc] if headers[:cc]   m.bcc ||= headers[:bcc] if headers[:bcc]   m.reply_to ||= headers[:reply_to] if headers[:reply_to] end 给Rails Core提了一个Patch,但是因为考虑不周,没有通过,所以官方的解决方案恐怕要等到Mail 2.2或者Rails 3 Beta1。

Posted in 其它 | Leave a comment

CityHelper更新:增加国家和国际化支持

CityHelper是一个提供国家,省,市选择框的小插件,这次更新增加了国家和国际化支持,目前只支持简体中文和英语。 安装 $ script/plugin install git://github.com/yzhang/city_helper.git 这会在你的config/locales目录下安装一个cities目录,这个目录包含了i18n的信息,还会在config/initializers目录增加一个city_helper.rb来设置i18n的加载目录。 使用 country_select(:user, :country, {        :only => [:china], # 指定要显示的国家        :update => ‘state_select_id’, # 指定国家改变后要更新的省份选择框的id     }, html_options) state_select(:user, :state, {        :country => :china, # 指定默认显示那个国家的省份        :countries => [:china], # 只有在country_select中设置了update属性时才需设置这个属性              # 这个属性应该与country_select中的:only属性保持一致        :update => ‘city_select_id’, # 指定省份变动时要更新的城市选择框ID      }, html_options) city_select(:user, :city, { [...]

Posted in 其它 | 3 Comments

Rseg: 纯Ruby中文分词插件

Rseg是一个基于纯Ruby的中文分词插件,内置了CC-CEDICT和维基百科两本字典,目前只支持Ruby 187以上版本及UTF8编码。 项目地址:http://github.com/yzhang/rseg 分词算法:http://xiecc.blog.163.com/blog/static/14032200671110224190/ 安装 sudo gem install rseg –source=http://gemcutter.org 使用 Rseg目前支持两种用法,本地调用或者C/S模式调用。 1. 本地调用 > require ‘rubygems’ > require ‘rseg’ > Rseg.segment(“需要分词的文章”) ['需要', '分词', '的', '文章'] 第一次执行需要加载字典,大概需要30秒,不过你也可以调用Rseg#load来手动加载字典。 2. C/S方式 $ rseg_server 这条命令会监听4100端口,你可以通过http://localhost:4100/ 访问Web界面,也可以通过rseg命令远程调用: $ rseg ‘需要分词的文章’ 需要 分词 的 文章 还可以调用Rseg#remote_segment > require ‘rubygems’ > require ‘rseg’ > RSeg.remote_segment(“需要分词的文章”) ['需要', '分词', '的', '文章'] 这次就不需要加载字典了。 性能 [...]

Posted in 其它 | 5 Comments

Rails保存记录而不更新时间戳

Rails的save和update方法默认都会将updated_at更新为当前时间,并且不允许手动设置,但是有些情况下,我们可能希望只更新记录的某个字段,而不希望updated_at被更新,比如显示帖子的时候增加帖子的查看次数,这可以通过设置model的record_timestamps属性实现: Post.record_timestamps=false 但是因为record_timestamps是一个类变量,因此改变这个值会影响到所有Post的保存,如果在同一时间有用户确实修改了Post的内容或者标题,updated_at也将不会更新。 Neeraj在这篇帖子里提供了一个方法,只修改当前对象的record_timestamps属性,在保存完后再进行恢复: module ActiveRecord   class Base     def save_without_timestamping       class

Posted in 其它 | 1 Comment

财付通Ruby插件更新

对财付通插件做了更新,增加了查询接口,可以通过此接口查询订单状态: @query = Tenpay::Query.new(1, # 订单ID      Date.today) # 订单生成日期 @query.response.successful? # true => 已支付, false => 未支付 不过必须得发一下牢骚,财付通实在是太难用了,虽然提供了返回URL,但是有用户反映支付完成后窗口直接关闭,导致订单没有更新,还有前段时间收了笔款,明明是用QQ号码的帐户发的收款申请,但是款居然到了我的GMail信箱帐户,而且我没有用信箱申请过财付通帐号,只是把QQ帐号和EMail做了绑定。还有选择用财付通余额支付的时候,它会记住QQ号,导致无法用其它帐户的余额付款,还有他们的客服电话基本上要等5-6分钟才有人接,还有就是不支持招行信用卡。。。。 罪状简直数不胜数,总之一句话:财付通有风险,集成需谨慎!

Posted in 其它 | Leave a comment

IE7 Bug导致Rails Session保存失败

同一套代码,部署在同一台服务器上,但是很诡异的是一套工作,另外一套登录的时候总是出现 ActionController::InvalidAuthenticityToken 的异常,即使加上skip_before_filter :verify_authenticity_token,虽然没有异常了,但是仍然无法登陆,追踪进去发现是Rails的Session保存失败,Google了一下“IE rails session can’t be save”,找到这篇帖子,似乎只是IE7独有的一个Bug,当你的子域名包含下划线时,IE7会拒绝接受Session Cookie,从而导致Rails的Session保存失败,而我的两个应用唯一的区别恰恰就在一个应用的域名包含有下划线。 这个问题困扰了我一下午,希望这个帖子可以给遇到同样问题的人节省一点时间。

Posted in 其它 | 3 Comments

程序员的8个级别,你想成为哪一种?

相信很多人都曾经被面试官问过这样的问题:”你对自己未来5年的职业规划是怎样的?“,每当我被问起这个问题时,我的脑海中总是会浮现出《Twisted Sister》(一部拍摄与1984年的电影)中的这个场景,一名老师对着他的学生大喊。 我想要你告诉我,不,是告诉全班的学生   你究竟想要怎样的生活? 一般情况下,你的很自然的想法就是:你要变得很牛,或者至少变成一个很牛的程序员。尽管这个问题看起来并不像其它一些同样老掉牙的问题(比如,”你觉得你最大的弱点是什么?“)那么严肃,但很可能你还是会觉得难于回答,回避这个问题明显不是一个明智的选择。 但是,在我看来,这个问题同样是一个相当严肃的问题,只不过大部分人都没有注意到他的重要性,不是对面试官,而是对你自己。 对于这个问题,大部分人都会选择一个不痛不痒的答案来敷衍面试官,但如果你深入的思考这个问题,你会发现这实际上是一个关于软件开发人员可能的职业 生涯轨迹的问题,当然,我们选择这一行是因为我们喜欢这行,并且幸运的得到老天的眷顾,我们干上了这行,但你能在50岁的时候依然坐在电脑前面敲代码 嘛?60岁呢?所以,我们必须在还年轻的时候先思考一下这个问题:作为一个程序员,最完美的职业生涯应该是什么样? 如果你懒得自己思考,那就让我来告诉你吧,基本上,这个世界的程序员可以分为8种类型: 1. 不朽的程序员 这是最高的级别,虽然你的人已经挂了,但是你的代码却依然活着,你成为计算机博物馆中的一个永久收藏,为数众多的程序员持续的学习和阅读你的作品。 你在生前已经赢得了许多的赞誉,发表了大量非常重要的论文或者是创造了许多影响到计算机专业课程设置的基础技术。你已经不仅仅只是拥有一个维基百科的条 目,会有许多专门的网站讲述你的作品以及你生平的事迹。 能够达到这一级别的程序员屈指可数,这一级别的代表人物是:Dijkstra, Knuth, Kay 2. 成功的程序员 成功的程序员不仅拥有广泛的知名度,并且还运营着一个不错的公司——甚至是整个产业链。他们拥有绝对的自由可以做他们想做的事情。 这一级别的程序员是最多人羡慕的,到达这一级别更多的是需要商业上的才能而不是你的编程能力。 代表人物:Gates, Carmack, DHH 3. 知名程序员 成为这个级别的程序员也不错,当然前提是,你得有一份不错的工作。 这个级别的程序员虽然在圈子里很有名,但是成为名人并不意味着你可以靠这个获取收入甚至是养活你自己。知名固然不错,但无疑成为成功的程序员更加的 好。你的公司可能是一家非常知名的大技术公司,也可能是一家很有影响力的小公司或者是一个最新潮的创业团队,其它的程序员都应该或多或少的听说过你,并且 你对你所从事的领域可以起到积极的影响。 4. 工作杰出的程序员 你做为一个软件工程师的职业生涯非常的成功,因为你的工作能力相当杰出,你从来不会为找不到一份你满意的好工作好发愁,你的同事也非常尊敬你,每一家你工作过的公司都因为你的加盟而在某些方面得到了增强。 但问题是:你接下来的方向在哪呢? 5. 能力一般的程序员 这个级别的程序员,一般来说,由于天赋的差异,通常很难成为杰出的程序员,但天赋跟成功的关系其实不是很大,如果你有很好的商业或者是与人沟通的技 能,你依然可以直接跳升到成功的程序员级别。如果你是一个能力一般的程序员,但你却靠这行当过上了不错的生活,那说明你必须在其它方面有很好的天赋(除了 编码)。 不要怀疑自知的价值,通常你的能力都会比你认为的要少,但缺乏天赋并不是什么大不了的事情。要勇敢一点,发掘自己的特长,并充分利用,你也会成功的! 6. 业余的程序员 业余程序员通常都很喜欢编码,一般来说以学生和实习生为主,他们通常会向开源项目共享代码,或者利用空闲时间凭自己的兴趣开发一些应用,他们的代码和创意通常看起来都很有激情。 成为一个业余程序员是个好事情:这个级别的程序员可以很快速的成为一名工作杰出的程序员。 7. 未知的程序员 还有一些很知名的程序员,比如Joe Coder,有能力但是不太引人注目,很可能在为某个大公司工作。对于这类人来说,写代码仅仅只是工作,并非他们生活的全部,这没什么错,挺好的。 8. 差劲的程序员 这个级别的程序员通常是因为某些意外阴差阳错的成为了程序员,但他们本身并不具备写代码的技能,所有他们做的东西都成了他们同事的噩梦——当然有一种例外,就是他的同事也是十分差劲的程序员,差到都不具备与他的同事进行基本的沟通。 基本上,如果要给差的程序员下一个定义,那就是:没有金刚钻,却揽了瓷器活。 当然,这个级别排的不是很严肃,并且每个人对自己的职业规划都不一样。它只是想给你一点启示,那就是你在未来的10年,20年,30年甚至是你整个一生究竟能够完成哪些事情,你最为崇拜那个程序员,他身上的哪些特点最为吸引你? [...]

Posted in 其它 | 7 Comments

Rails Templates

刚刚在译言上看到相关的介绍,但是感觉讲的不是很清楚,Rails Templates是Edge Rails中的一个新特性,它的作用实际上就是允许你自定义Rails(这里指的是命令行的那个可执行脚本)的行为,比如我们每次创建一个新应用之后,可能都会做一些重复的劳动,安装各种插件,跑migration,定制路由等等,现在Rails允许你将这些操作定义到一个模版文件中,以后你就可以通过调用这个模版来得到一个定制的Rails应用。 要使用Rails Templates功能,你首先需要定义一个模版: # blog_template.rb run “rm public/index.html” generate(:scaffold, “post title:string body:text”) route “map.root :controller => :posts” rake(“db:migrate”) 假设这个模版放在你的主目录下,你可以通过-m参数来调用这个模版: rails blog -m ~/blog_template.rb 可以看到,新创建的blog应用的index.html文件已经被删除了,并且默认路由指向了posts controller。 关于templates的更详细介绍,请参看译言的翻译。

Posted in 其它 | Leave a comment

如何采访Ruby/Rails大牛

互联网让记者这个职业变得没有门槛,只要愿意,任何人都可以成为网络记者,尤其是网络技术记者,你甚至都不需要与采访人见面,只需准备一些问题,然后去封邮件就OK了,当然被采访人一般都会很繁忙,因此要让你的邮件脱颖而出得到回答,你就需要多提些有趣的问题,没有有趣的问题?那也没关系, Joseph Wilk为你准备了一个采访Ruby/Rails牛人的问题清单,你只要照着问就可以了,以下就是他列出的9个问题: 如果有一架无人驾驶客机,并且它的控制系统是由Rails编写的,现在有机会来抢先体验它,那么您会选择它作为你的出行工具吗?为什么? 尽管Ruby很强大,但它也不过是个脚本语言而已,并且对于真正的产品来说,它显得过于动态和黑客化,我的问题就是,为什么要抱怨Ruby继承了许多Perl的缺点并且缺乏国际化支持,而不去试试Python呢? Ruby采用了一种独特的方式解决了多重继承(multiple inheritance)的问题,您能解释下这种方式的优点和缺点吗? 您认为向Ruby的Builtin Class中注入method值得推广吗?请顺被给出一些实例来佐证您的观点 您能解释下为何nil.object_id等于4吗? >> nil.object_id => 4 Twitter是目前比较流行的使用Rails构建的网站,您对Twitter选择Rails怎么看? 您能解释下has_many的运行机制吗? 如果有一个完全使用script/generate scaffold 构建的网站,那么,如果你向‘/images/1′发送一个POST请求,将会发生什么情况? 如果每种语言都可以用一个人来表示,那么你觉得它们分别会是什么样的人,为什么?(Ruby Person,Python Person,Java Person,PHP Person) 仅供参考,后果自负。

Posted in 其它 | 1 Comment

在Migration中操作新添加的字段

在有些情况下,我们需要在某个migration中对新增加的字段进行操作,比如下面这个将name改成first_name和last_name的migration: def self.up   add_column :profiles, :last_name, :string   add_column :profiles, :first_name, :string   Profile.find(:all).each do |profile|     profile.first_name = profile.name     profile.save(false)   end   remove_column :profiles, :name end 这段代码看起来没什么问题,但是如果你真的这么做,那就惨了,你数据库中所有用户的名字信息都会丢失,而不会如你所愿的保存到first_name中,这是因为,当你为profiles表添加first_name字段时,Profile model已经完成了初始化,因此在它的columns里面是不存在first_name的,自己它也就不会被保存到数据库中,因此,要使上面这段代码工作正常,你需要在修改数据库后重新加载Profile model: def self.up   add_column :profiles, :last_name, :string   add_column :profiles, :first_name, :string   Profile.remove_class(Profile)   load(‘profile.rb’)   Profile.find(:all).each do |profile|     profile.first_name = profile.name     profile.save(false)   end   remove_column :profiles, :name end 现在,name就可以被正确的迁移到first_name字段中了,这个方法也可以用于在Console中重新加载某个过期的model。

Posted in 其它 | 4 Comments