2007年4月28日
原文地址
下午无聊翻译一下,看看ruby官方怎么和java对比
相同点:
类似于java,在ruby中:
内存管理都是由GC(garbage collector)负责。
都是强类型语言。
都有public,private,protected的方法可见性之分。
都有嵌入式文档工具(ruby的叫做RDoc)。rdoc生成的文档看起来非常像由javadoc生成的。
不同:
于java不同的是,在ruby中:
你不必编译代码,你只需要直接运行代码。
Gui开发包不同。比如,ruby的用户会尝试WxRuby,FXRuby,Ruby-GNOME2,或者基于Ruby Tk库。
你要在定义任何事物(像class)后面加上关键字end,而不是用花括号({})来包围代码块。
使用了require代替了import。
所有的成员变量(属性)都是private级的。在类外访问任何事物要通过方法调用。
什么都是对象,包括2和3.14159。
没有静态类型检查。
变量名都只是标签,它们没有与类型相关。
不用声明变量类型,你只需要赋值给新的变量名就可以了(例子,a = [1,2,3] 相当于 int[] a = {1,2,3};)。
没有类型强制转换这个概念,只管调用方法就好了。
用 foo = Foo.new( "hi") 取代这样新建对象的方法 Foo foo = new Foo( "hi" )。
构造方法一直都叫“initialize”,不是和class同名的方法。
使用“混入” 代替 “接口”。
YAML 比 XML 更受欢迎。
这里用nil代替null。
==和equals()方法处理方法不同。当你想要测试相等性时就使用 == 操作符(就像Java的equals()方法)。当要想要知道两个对象是否是同一个时就使用equal?()方法(就像Java中的==)。
摘要: 早上看了Ruby论坛中有人(blackanger)写的TDD by Ex这本书里的资金例子,自己也想写一写。和他不同,我是全过程详细写出来。第一次用Ruby写代码,第一次用Ruby的Unit框架,而且下午睡醒后迷迷糊糊写的,可能有很多错误,请多多指正。
阅读全文
在Ubuntu下通过apt包管理器安装ror环境是很方便的。我自己写了一个脚本:
sudo apt-get install build-essential gcc g++ libssl0.9.8 libssl0.9.8-dbg libssl-dev build-essential
sudo apt-get install ruby
sudo apt-get install libzlib-ruby rdoc ri irb ruby1.8-dev
sudo apt-get install libzlib-ruby
sudo apt-get install rubygems
sudo gem update --system
sudo gem install rails -y
sudo gem install rails --include-dependencies
sudo gem install mongrel -y
sudo gem install mongrel_cluster --include-dependencies
sudo apt-get install libopenssl-ruby
sudo apt-get install libgd-ruby1.8 libyaml-ruby libzlib-ruby
sudo apt-get install imagemagick
sudo apt-get install libmagick9-dev ruby1.8-dev
sudo gem install RMagick -y
直接把上面的一串保存在一个文本文件中,然后用sh命令执行就可以一步安装完成了。
我发现网上很多在安装gem的命令都是错的,在Ubuntu里gem包不是ruby的gem,ubuntu下gem包的解释如下:
Graphics Environment for Multimedia - PureData library
Gem is a loadable library for puredata, which adds OpenGL graphics rendering
and animation to Pd. Pd is a graphical programming language and computer
music system.
这个包和ruby一点关系都没有。正确的应该是rubygems包。不知道为什么到处有人都是写
sudo apt-get install gem的,很多都是转载,有的连转载都不声明,直接试都不试把错的东西直接贴出来。
另有人说源里的gem很过时,其实也不会。
转载自:http://blog.csdn.net/bvbook/archive/2007/08/20/1751786.aspx
一、148 页
英文: We check that the name is present and unique
原文:我们首先检查用户名与密码都不为空
二、148页
英文:We check that the name is present and unique
原文:我们首先检查用户名与密码都不为空
改为:我们首先检查用户名不为空
三、153页
代码中 flash[:notice] 应为flash.now[:notice]
四、310页
列表中第二个“使用save方法时”应为“使用save!方法时“
五、407页
英文:Instead, they provide a regular (and simple) interface to a set of resources.
原文:它们只要为一组资源提供一个普通(并且简单)的接口就行了
改为:它们只要为一组资源提供一个规则(并且简单)的接口就行了
六、408页
两处的 /article/1 应为/articles/1
七、456页
原文:默认配置下,cache 只有在产品环境下才生效
改为:默认配置下,cache 只有在生产环境下才生效
八、535页
原文:这个辅助方法就是把 remote_function 一个remote_function
改为:这个辅助方法就是把一个remote_function
九、554页
原文:表单可以这些方法交互以提交用户输入的内容
改为:表单可以与这些方法交互以提交用户输入的内容
十、106页 代码
@product = Product.find(params[:id])
应为
product = Product.find(params[:id])
110、117相应的代码也需要改正。
我自己还发现了:
P119
代码
<%= form_remote_tag :url => { :action => :add_to_cart, :id => product } %>
<%= submit_tag "Add to Cart" %>
<% end %>
应为:
代码
<%= form_remote_tag :url => { :action => :add_to_cart, :id => product } %>
<%= submit_tag "Add to Cart" %>
<%= end_form_tag %>
106页
代码
@product = Product.find(params[:id])
应该是
product = Product.find(params[:id])
用了Ubuntu7.04一个多星期了觉得挺很不错,很多方面比在windows下好很多。方便的硬盘安装。一开始是在家里的电脑安装的,之后把硬盘拿到学校的电脑一插上去就可以用了,只需在命令行界面配置显卡和校园网就OK了。Ubuntu的硬件的兼容性真是没得说,还有人还制作了一个可以放在U盘的精简版本。Linux的整个系统加上所有的常用软件比windows加上所有常用软件的磁盘占用小很多。
记得刚刚接触电脑的时候就用了一段时间的RH9,觉得很神秘很帅。后来来到学校后发现校园网上不到网,用xrgsu要么掉线要么上不到,试了sesu和fc都是这样。因为万恶的锐捷又不能用虚拟机上网。这次是因为有个师兄用ubuntu7.04成功的上到了所以我又用回了Linux,用回了久违的VI。我不知为什么学了vi和emacs两个编辑器,但是一直都用不惯emacs,vi就用得很顺手。Linux下的编辑器就好在可以双手不离开键盘,不用去用到鼠标,不过太久没有用了,时不时手还是会想去摸鼠标,然后想一想手又缩回来按快捷键。
Ubuntu的中文社区很活跃,中文的资料又多得不得了,一般有什么问题搜索一下就可以查找到。
Ubuntu下用得最爽的是FireFox,好像没有windows下的内存泄漏现象。Linux下的BT软件就不怎样,还是用wine+比特精灵比较好。相对于bt,linux下的电驴软件就很厉害了,MLDonkey很快,最高能过1M/s。
下载安装软件,Ubuntu继承了Debian系的apt-get系列的方便,很大得方便了我这类懒人。只要一个命令就可以简单地在非图形界面安装软件,而且自动安装软件源中最新的版本,一并安装配置。只是把软件安装到哪里要自己去查找,有时是挺麻烦的,比如在安装后要修改配置文件的时候,特别是安装时文件分得很散,在配置radrails时要求输入rails和rake的路径。不过用了一段时间后熟悉了目录的配置之后就要找程序文件就简单多了,程序文件一般放在/usr/bin下。
不过有时一些软件还是自己手动安装好。第一有个权限问题,我的电脑还是主要用来做开发和学习的,而且又是我自己一个人用,对于Linux系统一向来的用户安全机制对我来说有点多余。自动安装的一些软件,有时要设置权限,比较麻烦。第二就是版本问题,软件源里的软件虽说都是稳定版本,但是我有时想要新一点的版本,比如Eclilpse3.3,NetBeans6。
在开发时最大的好处就是编码问题在Linux下对utf-8的支持很好。还有好像一些ide在Linux下好像速度快一点,还有ruby也是,反应快了很多。正在试着Gvim+rails.vim的感觉。不过还是习惯eclipse。Linux下的软件,要么是gtk的,要么是Qt,要么java的,感觉上至少比win32程序用起来觉得舒服一点,完全是心理作用。
最后有两件事让我不爽,一个是特效开不到,我的显卡是Ati 的X1650,万恶的ati官方驱动不支持XGL,开源驱动又不支持X1650。另一件事是我用eva和QQ2006上了几天之后登录的时候竟然说我“您的IP不能用低版本的QQ”,真是万恶的腾讯。我最后找了飘云版的QQ2007(因为不带键盘锁)才能用wine跑QQ2007。用wine+qq的时候发现打字那个提示框很快会不见,我用的是fcitx,还有我不能发起语音请求,发起时qq会崩溃,别人发起我接受就正常。
Ubuntu好好玩。
这个暑假过了一大半了,过得比较郁闷。
今天是暑假第一次在家上网,因为家里电脑坏了,主板拿去保修,修了20天后拿回来发现坏得更严重,又要不知道修到什么时候。(体验了华硕的售后实在不敢恭维)只好上个星期叫同学在网上帮我买了块二手主板,现在终于有电脑用一下。
暑假前已经计划好了要做什么,就是要把这个学期还没有做好的几个应用做好它,把picocontainer的1.0版的代码分析和文档汉化做完(在期末考试前因为无聊所以就做了这个事),还有再写一些有趣的代码,比如一个简单的XML仓库。
读书的计划提前完成了,看完了《领域模型驱动》,《web开发敏捷之道》(新鲜热辣),《Ruby for rails》。看了一半《对象设计》,还有把《重构》又看了一遍。
还好带了一些英语资料,手机里也存了一些英语的对话,每天背一篇短文,没事练习听着英语大声念几句。感觉还好。
今天看了一下敏捷大会的消息,又看了一下Thoughtworks里的强人的博客,觉得毕业后去那里的希望很渺茫。英语又差,技术和那些强人差了几个数量级,看来要更加更加努力。
今晚想update一下rails,结果在升级gem时出现错误。搜索了一下找到答案
升級Rubygems到0.9.2时,會產生一個Error:
ERROR: While executing gem ... (NoMethodError)
undefined method `refresh' for #<......>
解决方法:
删除掉source_cache文件,win是在$ruby安装目录\lib\ruby\gems\1.8,linux是在/usr/local/lib/ruby/gems/1.8/source_cache下。
运行gem update --system升级
转载自:http://www.cnzxh.net/blog/Index.php?do=readArticle&articleId=145
摘要: JCreator是个轻量级的JAVA开发工具,对JAVA文件,JSP文件和XML文件编辑有比较好的支持。因为真的是很轻量级,所以功能也很弱,没有 JUnit集成,也没有代码格式化。我自己也是用管了eclipse,其中的JUnit当然是最常用的功能,其余常用功能还有重构和代码整理和格式化。有时要改一点代码或者实验一些代码又不可能打开一个eclipse那么笨重的工具,但是用比如JCreator,又太弱。所以我就想着把JUnit和代码格式化功能集成到JCreator中。
......
阅读全文
大名顶顶的JUnit是Kent Beck和Erich Gamma编写的用java语言实现的单元测试框架。
JUnit3
JUnit3的用法比较简单,就是实现继承框架中TestCase的测试用例(一般实践中命名为XxxTest),然后在其中加入以testXxx命名的测试方法。然后就可以用JUnit框架中的Runner运行测试。
而且在JUnit的测试中如果要加入初始化方法就把方法命名为setup(),如果要加入清理方法就把方法命名为downDown()。
如果要将几个测试用例作为一个集合一次运行就实现一个有public static Test suite()方法签名的方法,在其中创建一个TestSuite实例,然后调用方法addTest把一个个测试用例加入到集合中。
JUnit4
JUnit4在3的基础上融入了JDK1.5的注释特性,大大得改进和强化了JUnit框架。将测试方法由之前的通过继承TestCase确定测试类和通过命名方法确定测试方法的测试编写方式转变为由注释确定这些方面。
常用的注释:
@Before:初始化方法
@After:清理资源
@Test:测试方法
@BeforeClass:针对所有测试,只执行一次,且必须为static void
@AfterClass:针对所有测试,只执行一次,且必须为static void
只要有在类中要测试的方法前加入@Test,这个类就是一个测试用例。而加了对应注释的方法就是各个功能方法,比如初始化和清理。
JUnit4相对以前的增强体现在以下的注释中:
@Test(expected=Exception.class):异常测试,断言异常必定产生
@Test(timeout=n):要求测试在允许超时时间(n秒)中完成
@Ignore:忽略某个测试方法
@Parameters:提供参数测试,也就是用一组参数测试代码
而且JUint4对ant1.7以下的版本有兼容性问题。
以上讲的JUnit用法就是最最常用用法。
有机会可以接到一个小型商务平台的项目,最近就开始做一个平台的一些基础组件,比如新闻发布模块和用户管理模块。开发团队只有我和另一个同学,一共两个人。而我们对XP开发过程比较有兴趣,刚刚好可以进行结对编程和TDD。
开发已经进行了一个星期左右,已完成新闻发表模块中的新闻管理模块。因为完全没有经验,而且开发时间不够(只能在没有课的上午或者下午开发),开发进度很慢。但是自我感觉不错,因为体验了以前没有体验过的开发过程,从中学到了很多东西。
在整个开发过程中,我们始终坚持“测试先行”原则。首先列出要完成的任务清单,用JUnit写出相应测试代码,然后运行测试,出错,伪实现,重构。一般都是两个人,一个人持有键盘,写一个钟左右的代码,然后一边讨论一边写代码。在完成了一段代码之后有种神奇的感觉,好像不知不觉中代码就被写出来了,这可能是TDD神奇的地方。先写出符合需求的测试,接着按照测试来写代码,就是这么简单。
不过完成了新闻发布模块之后,经过讨论,决定下一步完成前台的UI。对于UI的开发,平时例子学习了不少,自己写的toycode也写了一些,但是在实际应用开发中对我们还是比较陌生。一开始准备用简单的JSP和Servlet来做前端,但是在前端控制器中代码实现有点混乱,现在就卡在UI这里了,最后经过讨论决定用WebWork作前端控制器。
以前在看K.Back的《解析极限编程》时,看到他把结对编程描述的很神奇:
结对程序员:
- 使彼此都专注于任务
- 一起头脑风暴,讨论系统的精化
- 理清思路
- 在搭档陷入困境时要主动,这样才能减少挫折
- 使彼此都对团队的实践负责
经过实践之后,就很清楚地体会到k.Back讲到的结对的好处。
五一应该还会继续完成这个项目,而且是一边做一边学。