<body><script type="text/javascript"> function setAttributeOnload(object, attribute, val) { if(window.addEventListener) { window.addEventListener('load', function(){ object[attribute] = val; }, false); } else { window.attachEvent('onload', function(){ object[attribute] = val; }); } } </script> <div id="navbar-iframe-container"></div> <script type="text/javascript" src="https://apis.google.com/js/plusone.js"></script> <script type="text/javascript"> gapi.load("gapi.iframes:gapi.iframes.style.bubble", function() { if (gapi.iframes && gapi.iframes.getContext) { gapi.iframes.getContext().openChild({ url: 'https://www.blogger.com/navbar.g?targetBlogID\x3d4684235500622716427\x26blogName\x3dCaiwangqin\x27s+blog\x26publishMode\x3dPUBLISH_MODE_HOSTED\x26navbarType\x3dBLUE\x26layoutType\x3dCLASSIC\x26searchRoot\x3dhttp://blog.caiwangqin.com/search\x26blogLocale\x3dzh_CN\x26v\x3d2\x26homepageUrl\x3dhttp://blog.caiwangqin.com/\x26vt\x3d3393395200455623441', where: document.getElementById("navbar-iframe-container"), id: "navbar-iframe" }); } }); </script>

Caiwangqin's blog

Focus on Cloud Service, Smart Hardware, Architecture, Technic and beyond…

收到了博文视点寄来的Programming Ruby

2007年4月30日星期一



今天收到了博文视点寄来《Programming Ruby》中文版,谢谢。


bd7lx 说书中有一处翻译的特别不准确,就是上图中我红线标出的部分。我询问了母语是英语的朋友,他说要解释”Programming like duck”有一段相当长的故事,大致意思是说这个语言简单,理解起来容易,看到什么就是什么。翻译成中文的确是件困难的事,读者看了那章的内容自然会明白。但不应该翻译为“像鸭子那样编码”,可能“鸭子编程”更好点吧。


标签:

posted by Jesse Cai, 上午7:47 | Permalink | 0 comments |

Setp by Step 体验 Grails

2007年4月28日星期六

Groovy 是我在2005年底使用 Ruby on Rails 之前使用到的一种语言,使用 Groovy 做完了一个项目后,才通过 Grails 了解到 Ruby on Rails, 当时,Grails 还没有发布的版本,所以放弃了使用, 现在他们发布了0.4.2 稳定版,看了体验视频,决定体验一下。Let’s go, Easy to follow Grails:


一、安装



  • 首页要安装J2SDK 1.4 以上
  • 安装 Apache Ant 1.6.5 以上,最近版是1.7.0,安装Ant很简单,只需要下载解压缩到本地,然后系统环境变量中增加(以下为例):


JAVA_HOME = C:\j2sdk1.4.2_14


CLASSPATH = C:\j2sdk1.4.2_14\lib;D:\Work\Grails\apache-ant-1.7.0\lib


ANT_HOME = D:\Work\Grails\apache-ant-1.7.0


PATH = %PATH%;%JAVA_HOME%\bin;%ANT_HOME%\bin




  • 通过SVN下载Grails


svn co http://svn.codehaus.org/grails/trunk/grails/




  • 编译Grails(将目录改成你自己的路径)




    1. 设置 GRAILS_HOME = D:\Work\Grails\grails

    2. PATH = %PATH%;%GRAILS_HOME%\bin;

    3. 进入 GRAILS_HOME , 执行以下命令(如果提示命令不存在可以重启一下电脑),我使用ant编译了10分钟左右完成的,看你的系统有多快 :)

    4. D:\Work\Grails\grails>ant



二、创建项目



  • D:\Work\Grails>grails create-app




基本上还是属于实验室东西,如果Grails也像Ruby on Rails一样有Basecamp等已经运行的项目,可能使用者的信心会多点。顺便提一下,写Groovy比Java愉快多了。


标签:

posted by Jesse Cai, 上午9:47 | Permalink | 0 comments |

声明:不在ChinaonRails以外的地方回答Rails问题

2007年4月27日星期五

关于学习RubyonRails,bd7lx说:因为现在国内书还不多,国外Ruby和Rails的书出现了爆炸性的增长,很多人已经找不着北了。而我觉得一个优秀社群的带动可能比指南/指北都来得实在,为了更好的管理我的时间,也为了建设一个实时更新的知识管理系统。我不在ChinaonRails以外的其他地方回答RubyonRails相关的问题,如果你有初学的问题或遇到任何困难,欢迎提出来大家一起解决,当然,提问也要有艺术。请记住下面的网址:


http://chinaonrails.com/go/ask



ChinaonRails 的意思是 Ruby on Rails Team in China ,旨在成为中国 Ruby on Rails 应用者们心中的北斗星,照亮自己也照亮他人。


我们从最早扬帆驶过这片海域的英雄的见闻中,也许能窥见若干年间这片海域的若干情况。


标签:

posted by Jesse Cai, 上午12:33 | Permalink | 0 comments |

ChinaonRails.com 重出江湖, 建设活的 Rails 知识库

2007年4月25日星期三


中午bd7lx打来电话,说www.railscn.com上面有人在恶意广告灌水,因为程序有错误而不能删除,非常郁闷。

我在2006年初做的China on Rails online Conference at 9:00 的时候,当时在apemanchen的 dreamhost上架设了chinaonrails.com ,也有很多人在上面留下了珍贵的学习资料。但后来apemanchen的 dreamhost被关闭了,chinaonrails也就一度不能访问。资料我都备份了,本来是想恢复的,但由于原来使用了RForum, 这个Rails程序的功能丑陋,恢复起来使用也没有多大意思,更重要的原因是知识已经陈旧。于是我寻找到了Livid 的V2EX, 这是一个非常棒的Web2.0 论坛,经过相当长时期的试用,决定用她来建设一个全新的Chinaonrails, 可以做非常好的实时更新的知识管理系统。

在接下来的时间里,我会经常将我工作中Rails相当的所得,发布到ChinaonRails上与大家分享,并持续。

ChinaonRails旨在为中国使用Rails的朋友提供一个好的沟通环境,不断推进优秀的Web Framework在中国的发展。

希望大家和我一起维护这条铁道线 :)

Are you ready?  go:  http://chinaonrails.com


标签:

posted by Jesse Cai, 下午2:57 | Permalink | 0 comments |

Getting Real Maps

2007年4月24日星期二


重新整理了一次《Getting Real 》,这个图清晰的描述了Getting Real的思想。我们目前的状况和这其中所说的大部分很相似,缺少的是独处的时间,我需要更多不被打扰的时间。


标签:

posted by Jesse Cai, 上午8:44 | Permalink | 0 comments |

玩转校内网

2007年4月23日星期一

一、进入篇


进入校内网,被他们人为的设置了一些障碍,必须在校内注册,当然要想进入你可以请朋友帮你注册。这个门槛看起来就象深圳的关卡,分为关内和关外,但不要期待这个能关住“不法者”,深圳关内也会有坏人。在发展初期是有一定的作用。


二、搜索篇


进入后,你当然不会希望只一个人,那就要搜索男/女朋友。一般有以下三种方式:



  1. 搜索,可能会搜索到你失去联系的小学/中学朋友

  2. 随便看看,会随机的得到一些推荐

  3. 学校,根据学校搜索


三、随机打招呼篇


这个很有意思,如果你是注册男生,随机的招呼,只会帮你随机发现女生,这符合大学生的需求。


四、日记篇


没有什么特色,属于Web2.0都必须有的附属功能。


五、相册篇


值得一提的是吸收了Facebook的“我在照片中”这个功能,浏览和上传的过程做得很烂。


六、分享篇


个人分享还是不如del.icio.us或digg式的社会分享有意思。


七、群/圈子


基本没有高质量的群,要么就是像驴行天下一样拥有12963个成员的大水塘,要么就没有人气,重要的是没有有质量的内容在群里。


八、校内通篇


基本没有用的东西,只有一个功能,就是和朋友发消息,其他都链接到网站上。一般用户都是QQ和校内网同时使用的。


九、校内广场篇


猫扑大杂烩式的BBS,全是软文。千橡的整合能力还是很强的。


十、登录后的首页/我的页面


这个进入校内网的第一个页面,放在最后面讲,是因为我觉得这是校内网设计得最成功的页面。里面包含:



  1. 左侧导航栏,这完全是把Facebook优秀的设计搬来了,不错

  2. 人气之星展示/最近看过我的人

  3. 新留言/及回复

  4. 下面的内容推送不是必要的,但有些许意义:朋友新鲜事/班级新鲜事/群新鲜事/推荐日志/广场热帖/随机学院人气之星/校内网新人

  5. 右侧放置了:招呼/我的状态/我的班级成员/我的好友列表/我的群列表/好友生日/小提示


里面的用户大部分都很活跃,可能校园里呆着的学生有大量上网的时间。经过体验,有些页面出现的还不是很流畅,首页还经常会出现Ajax Request Error,但校内网的模式是经过美国验证成功的,能否在中国创造和Facebook一样或更大的价值,让我们拭目以待。


标签:

posted by Jesse Cai, 上午4:05 | Permalink | 0 comments |

CSS 设计规范

2007年4月21日星期六

行为,布局,风格 三者分离。


昨晚和一位MOP出来的朋友聊CSS, 他说一个大型的Web团队可能以上三者都是不同的人在做,所以要三者分离,以利于以后的维护更新。我赞同将三者分享做标准的网页,但不知多大的Web团队才需要这三者分别不同的人来做。一般Ruby on Rails项目的人都是三者都做的。


行为:可以简单理解为Javascript


布局:是一个网站的Layouts


风格:是CSS


首先你只需要考虑网页的布局,任何样式CSS都是可以实现的。


标签:

posted by Jesse Cai, 上午2:09 | Permalink | 0 comments |

Javascript debugging in IE6

2007年4月20日星期五


该死的IE6总是会对在Firefox下执行很好的Javascript报错,而且没有类似Firebug一样优秀的调试工具.而MS Script Debugger,微软要求通过Windows正版验证后,才能下载, 这太不方便了,以下是直接下载地址。


1、从微软网站下载MS Script Debugger并安装,这是下载地址:
http://download.microsoft.com/download/winscript56/install/1.0a/NT45XP/EN-US/scd10en.exe



2、修改IE的设置:
IE的选项–>高级,有两个选项默认是钩选的:
Disable Script Debugging(Internet Explorer)
Disable Script Debugging(Other)
中文可能是“禁用脚本调试”,去掉这两项的钩选。


3、在需要调试的地方加上debugger;例如: <script language=javascript>
..
debugger;
..
</script>
这就是一个断点,当运行到这里的时候就会中断进入调试模式.


标签:

posted by Jesse Cai, 上午5:58 | Permalink | 0 comments |

和孟岩聊Ruby on Rails

2007年4月19日星期四

bd7lx来北京,陪他去CSDN孟岩CSDN是我2001-2002年常去的社区,这次很高兴去到他们的大本营。结果被赶上架一起在摄像机前聊了一期Ruby on Rails, 纯属聊天,没有任何排演,看者不要扔鸡蛋 :)



标签:

posted by Jesse Cai, 上午2:09 | Permalink | 0 comments |

Initial Public Offerings Seminar

2007年4月18日星期三


标签:

posted by Jesse Cai, 上午9:03 | Permalink | 0 comments |

Rails实现验证码

2007年4月17日星期二


dennis写了几点rails实现验证码时需要注意的几点事项:


1.在windows上安装Rmagic,如果你是通过gem安装的,


require ’Rmagic’

要修改为:

require ’rubygems’
require ’Rmagick’

才能正确引入。
2.网上那个例子,画布是使用Rmagic内置的图像格式,Rmagic内置的图像格式还有:

gradient*

梯度,比如gradient:red-blue

granite

花岗石,比如: "granite:".

logo

logo型的图像. 如: "logo:",后面会多显示一个五角星^_^

netscape

非常漂亮的彩条。如: "netscape:"

null*

空白 使用方式: "null:"

rose

玫瑰 使用方式 : "rose:"

xc*

设置一个背景色,比如”xc:green”

一个修改的例子,在rails的models下存为noisy_image.rb,在Controller就可以这样调用NoisyImage.new(6) :

require ’rubygems’
require ’Rmagick’
class NoisyImage
  include Magick
  attr_reader :code, :code_image
  Jiggle = 15
  Wobble = 15
def initialize(len)
    chars = (’a’..’z').to_a - [’a',’e',’i',’o',’u']
    code_array=[]
1.upto(len) {code_array << chars[rand(chars.length)]}
    granite = Magick::ImageList.new(’xc:#EDF7E7′)
    canvas = Magick::ImageList.new
    canvas.new_image(32*len, 50, Magick::TextureFill.new(granite))
    text = Magick::Draw.new
    text.font_family = ‘times’
    text.pointsize = 40
    cur = 10
    code_array.each{|c|
      rand(10) > 5 ? rot=rand(Wobble):rot= -rand(Wobble)
      rand(10) > 5 ? weight = NormalWeight : weight = BoldWeight
      text.annotate(canvas,0,0,cur,30+rand(Jiggle),c){
        self.rotation=rot
        self.font_weight = weight
        self.fill = ‘green’
      }
      cur += 30
    }
    @code = code_array.to_s
    @code_image = canvas.to_blob{
      self.format=”JPG”
    }
  end
end

3.与rails应用的结合,和一般的验证码原理一样,将产生的随机数存储在session或者request范围内,提交的时候进行比较验证即可。比如产生图片的时候将随机字母存储在session[:code]中:

 session[:noisy_image] = NoisyImage.new(6)

 session[:code] = session[:noisy_image].code

验证的时候,比较提交的type_code与session[:code]即可,为了安全性考虑,最好还是不考虑使用客户端验证。

 unless session[:code]==params[:type_code]
      flash[:notice]=’验证码填写错误,请重新注册,谢谢!’
return redirect_to :action=>:new  
 end

在页面显示图片,类似servlet一样直接调用Controller的action:

def code_image
    image = session[:noisy_image].code_image
    send_data image, :type => ‘image/jpeg’, :disposition => ‘inline’
  end
<img height=’30′ src=”/test/code_image”>


标签:

posted by Jesse Cai, 上午7:40 | Permalink | 0 comments |

QQ不懂中文

因为硬盘坏了,换硬盘后安装了Windows XP SP2英文版,安装中文版QQ情况如下(截图为TM,QQ2007 Beta1一样不懂中文):



 


试用2005 English Version,有进步,居然可以看得见朋友列表上的中文,然而消息和群上的中文仍无法查看:




这让我比较惊讶,QQ竟不懂中文!


标签:

posted by Jesse Cai, 上午2:42 | Permalink | 0 comments |

硬盘坏了

这么多年第一次遭遇了硬盘坏了,由于有部分代码没有调试完毕,关机睡觉前决定不提交代码到SVN,第二天早上起来打开电脑时,意外的找不到硬盘。


于是开机箱检测,听到硬盘在发出“噼、噼”的响声,经过一段时间的折腾,推断可能是硬盘坏了,磁头卡住了。可恨的Seagate.


因硬盘买回不足一月,送修,店员说只能换,不能修,数据找不回来。重写一天的代码不是很困难,但心理郁闷不不。现在丢失的代码已经基本重写完成,决定过段时间把开发计算机做成RAID,代码一定要在关机前进行Daily Build.


标签:

posted by Jesse Cai, 上午1:54 | Permalink | 0 comments |

Temporary Post Used For Style Detection (adc4e68b-612a-42cf-833f-0fcc08713b96)

This is a temporary post that was not deleted. Please delete this manually. (0ae6c210-0617-4655-b05b-ffcf92754584)


标签:

posted by Jesse Cai, 上午1:44 | Permalink | 0 comments |

Ruby on Rails 用户角色管理

2007年4月11日星期三

使用acts_as_authenticated + authorization plugin 实现 Ruby on Rails 用户角色管理,step-by-step :


$ mysqladmin create auth_development

$ rails auth

$ ./script/plugin install http://svn.techno-weenie.net/projects/plugins/acts_as_authenticated 

$ ./script/plugin install http://svn.writertopia.com/svn/plugins/authorization

$ ./script/generate authenticated user account

$ ./script/generate role_model role

$ rake db:migrate

added following to my environment.rb:



AUTHORIZATION_MIXIN = “object roles”

DEFAULT_REDIRECTION_HASH = { :controller => ‘account’, :action =>

‘login’ }


added those to my user model:



  acts_as_authorized_user

  acts_as_authorizable


and this to test controller:



class TestController < ApplicationController

 permit "site_admin or moderator"

 

 def index

  render :text => “okok”

 end

end


$ ./script/server


标签:

posted by Jesse Cai, 上午10:48 | Permalink | 0 comments |

Rails源代码学习

 


4月8日参加了Kevin Yang组织的Rails源代码学习聚会,很高兴见到了慕名已久了人。


1)  如何获得Rails源代码
ruby 一键安装下载地址: ftp://ftp.kr.freebsd.org/pub/ruby/binaries/mswin32/

                                          http://rubyforge.org/frs/?group_id=167

radrails 下载地址: http://www.aptana.com/download_radrails.php

Rails SVN Trunk地址:


2) Rails内部模块的划分


    active_record

    active_support

    action_controller

    action_view

    action_mailer

    actioin_web_service

   

3) 如何debugRails源代码



4) ActiveRecord底层的数据库连接



5) ActiveRecord底层的row到object的map机理



6) Association是什么?



7) Rails是如何加载各种组件?


标签:

posted by Jesse Cai, 上午7:00 | Permalink | 0 comments |

周曙光已经被“和谐”了

2007年4月6日星期五


从Great News换到Google Reader已经有两个星期了,今天在读到周曙光的网络日志时出现问题,但左边的列表中明确的显示有(41)篇未读,于是Google一下,直接出来无法显示该页面错误,我知道他前几天去报道“钉子户”了,感觉可能被GWF了。


和他GTalk后,确认情况属实。




标签:

posted by Jesse Cai, 上午11:06 | Permalink | 0 comments |

P1ay.cn - 中国最时尚的网络生活杂志

2007年4月4日星期三


P1ay.cn launched at 2007-4-5 1:00 am, 做中国最时尚的网络生活杂志.


标签:

posted by Jesse Cai, 下午5:09 | Permalink | 0 comments |

友派网主题杂志 - 走过2006


 


刚回到办公室后,收到了友派网寄来的《走过2006》主题杂志。看到这么些熟悉的面孔,印刷在精美的页面上,让你感受到:想当名人,有时候就这么简单。感谢林子,感谢这些真诚的朋友。


标签:

posted by Jesse Cai, 上午9:12 | Permalink | 0 comments |