2007-12-09
TAG:Ruby 感受
初次听说Ruby那是今年3月份左右,当听到Ruby的快速编程时,我还有点不相信,总认为Java已经很强大,便捷了,很难相信Ruby比它更加强大,便捷。但是随着老师还有Todayhill的介绍,我开始对它动心了。于是快速看了Ruby的介绍,简单的语法,然后按着Programing ruby上写了几个小程序,发现Ruby两大优势:

更加面向对象;

程序编写更加快捷,工作量小。 





 
2007-12-07
TAG:DB2 ROR PureXML DB2onRails
    最近公司的一次会上得了一件DB2 Express-C的T-shirt. 我对DB2 EXP的印象还不错,总有短小精干的感觉,当然,最主要一点就是它免费----可能我对所有免费的东西印象都不错。

    DB2 team把支持动态语言作为一个未来工作的重点,当然ROR的支持就是重中之重了。在DB2的开发team中特别抽出了人专门做这个DB2OnRails的开发.这个项目在AlphaWorks上也有.在那里,它叫D...



 
2007-12-05
TAG:DB2 ROR PureXML
    今天在GOOGLE上搜索ROR,第一页就有我们这个BLOG。转眼一看,上篇BLOG居然都是一年前了,这一年过的好快,也好忙,直到现在,感觉刚刚松了一小口气。

     ROR在这一年里也在如设想般发展,可是企业应用似乎并没有呈井喷方式出现。

     现在我继续关注ROR,正好有了一个DH的空间,有机会写点自己的小应用了。最近正在做一个RO...



 
2006-07-30
TAG:rails book Translate

ROR的学习总是断断续续的,有一部分原因是自己英文水平不行,读起参考手册那种比较庞大的东西感觉有些吃力,最近算是有些时间,所以找来《Rails 4 days》这个小家伙希望再迅捷的学习学习ROR的一些精华。

一边看一边翻译吧,虽然不是很难,但自己翻译能力实在一般,所以这东西只是个实验品,顺便也督促一下自己的学习进度,先发个介绍和第一天的内容,以后会慢慢补上,希望对大家有用。

点此下载





 
2006-04-22
TAG:rails Ruby ROR

     经过几个月的学习和努力,我这个用ROR做的进销存系统终于告一段落了。因为一直都很忙,都没时间上来把后面用到的东西写上。在这段时间我用到了ROR的login_generator 好像大概是这么个名字,就是用来自动生成系统的权限验证部分的。另外还用到了file_column,用来进行文件上传的组件。除此之外,还在几个地方用了AJAX,也摩登了一把。总体来说,ROR里面资源还是很丰富的,需要的东西基本都可以找的到。

    当然,经过这一个项目,对ROR的认识又深了一步,也发现了一些它的一些缺点。总体来说,感觉它距离大规模企业级应用还有不近的路要走。我下来会尽量找时间来好好总结一下我用到的ROR相关的技术和一些个人体会。

    我的个人邮箱是todayhill@tom.com,如果有朋友想跟我联系可以给我写信。另外,www.railscn.com  才是人才济济,我个人也在上面获得了大量的帮助.大家可以常常去看一看.





 
2005-12-23
TAG:Ruby hello_world

    初学Ruby给我留下印象最深的callback的实现,即Rubyblock。它给我的感觉是很新颖,很有想法,也很大胆。

以前我也曾接触过一些其他语言的callback的实现,但都没有真正理解其中的精髓。直到看了Rubyblock,我才突感茅塞顿开,好像积压在心头的一块大石一下子被拿开了一样。Ruby似乎就是为了block而生的(好像有些绝对了,只是为了表达一下喜悦的心情:P)。

    下面就是一个Rubyblock的小例子:

        class SayHello

                    def say_hello

                                hello = ‘hi ’

                                yield hello

                    end

        end

        SayHello.say_hello{|greeting| print greeting, ‘tracy’}

    结果如下:

        hi tracy

    它的执行过程是这样的,系统调用SayHellosay_hello方法,并带有一个block,即{}中的代码,以后简称“块”。块中的代码首先被记录下来,然后开始执行say_hello方法,先是将‘hi’赋值给变量hello,接着遇到yield关键字,这时之前被记录下来的块中的代码会将yield取代,而yield后面的变量hello赋给块里||所夹的变量,这时方法say_hello的代码就好像是下面这样:

        def say_hello

                    hello = ‘hi ’

                    print ‘hi’,’tracy

        end

    它所产生的结果会是hi tracy就不难理解了。

    我觉得这种机制的新颖之处就在于它将一段代码作为了方法的参数,这样就大大增强了方法的灵活性,而如此灵活的设计并非一定是好事,它就像一把双刃剑,程序员需要理解它更深层次的意思,明白Ruby语言设计者的良苦用心,正确的使用,这样它必将发挥巨大的作用!否则,代码将会复杂难懂,破败不堪。





 
2005-12-22
TAG:Java 架构 ROR

    随着这些天来对RAILS的学习,渐渐感受着ROR开发快速所带来的欣喜,可是在这惊喜过后也自然把它跟JAVA架构做了一些比较.

    这些天来最大的感觉就是,JAVA的架构比ROR要"干净"的多.而这里的"干净"与"不干净"实际上却正是我接触OO以来在一个含混不清的问题,归根结底就是面向对象里面"类的封装范围".

    记得在以前刚开始学习OO的时候就说"类可以封装一系列属性和方法".好,那时候经常以Persion来做例子,人有身高有体重,有爱好有性格,这些都是属性,人还能吃饭能睡觉,这些是方法,好了,这些都是人的特征,所以都被"人"这个类来封装.多么完美的OO,我们简直是在创造世界!可是现实通常却不像想的那么完美,我想上帝创造世界的工作也一定不是一件轻松的事情.我们的系统通常要具有分布性,对象应该可以在不同的机器上传来传去,那好,为了这样的要求,在J2EE的架构设计中,常常要把M这一层再分为静态层和动态层两个层次,这样也就有了我们的service和domain以及他们之间的dao.软件设计中,通常是通过引入一个中间层来解决一些问题,而我们这里引入的中间层把"静"和"动"分开了.我想这里不仅仅是为了解决分布的问题,通常经验还告诉我们,"动"的部分改变的几率是远远大于"静"的.所以用OO来把这"动"和"静"分别封装.可这又跟我们刚开始的类设计理论似乎有些不一样了,不过,这样的设计是为了实际而做的牺牲还是对OO的活学活用呢?恐怕说出来也会是人们一个争论的话题吧.

    而ROR似乎对OO更友好,学过OO的人很容易就能理解它,它的model封装了静和动两部分,包括一些验证的操作都放在model里面了,根本不分service和domain这两部分.这一切都符合我们刚开始所学到的OO,可是~有了对JAVA的理解和使用经验,我越来越觉得,跟JAVA相比这分明是一种"肮脏",混杂的类设计.不过,这样做也是有它的道理的,ROR里面的对象可以分布传输吗?分布传输过去的对象,里面的方法还可以调用吗?如果这个方法访问了本地资源,这一调用出错了怎么办?这一切的解决方法,可能就是"不让对象分布出去"吧,至少我现在还没有在ROR上看到有讲类似RMI和EJB级别的东西,它似乎是用WEB SERVICE来代替这些作为分布的解决方案,可是上面那些问题在WEB SERVICE中是怎么做的,我就没有研究过了.

    上面的一些话只是现阶段的一些个人感觉,也不排除随着对ROR的学习深入而有所改变的可能.





 
2005-12-21
TAG:ROR rails 表单验证





 
2005-12-21
TAG:rails IDE edrails DataBase test

        之所以写这篇日志是因为在开始rails时浪费了大量的时间在调试环境上,因为很久前按照一个教程搭建过ROR工程,所以理所应当的感觉很简单,但相隔很长时间很多基础的概念都没有记住,所以犯了很低级的错误,要是动手前温习一下教程或者看看英文文档就不至于浪费时间了。

        看山给我介绍了redrails这个IDE,因为我在win上做有没有装eclipse,所以只下了单独运行的文件,还好是绿色软件,只要有java环境就可以了,在第一步建立工程时问题随之出现,首先是workspace,这个指定一个公共目录就好了,比如“railsCode”,以后每个项目都放在里面,IDE建立工程其实等价于命令行workspace目录下运行rails 工程名,建好后会产生所有rails需要的基本目录结构,包括script里面的server(注:经我测试在win下用redrails直接运行项目的server会经常出错,而且严重到直接关闭IDE抛出异常,再次启动时server里找不到启动项,不过用命令行找到workspace目录下运行ruby script\server可以启动,我在这里费了大劲,起初还以为是项目部署的问题~),访问127.0.0.1:3000会出现Congratulations页面,这个页面就是项目\public\index.html页面,数据库配置文件,也就是我们平时写脚本所谓的CONN是项目\config\database.yml文件,在这里设置mysql设置密码似乎还会出现问题~改写后要重启server,切记!

        最令我难堪的问题是项目访问路径,没看书我理所应当的按照127.0.0.1:3000\项目名访问,结果总是找不到路径(竟然为了这么一个问题熬到凌晨3点多,压根就没考虑查一下资料),其实是根本没有了解清rails的url机制,虽然现在不是了解得很全面,但知道以现在这种server的启动方式根本不存在虚拟目录的问题,也就是直接用127.0.0.1:3000访问的就是server所在项目的首页,而其他页面完全靠controller类来指定(controller类文件放在项目\app\controllers目录下),比如我新建test_controller.rb(用redrails时只要命名controller叫test即可,命令行需在项目下运行ruby script\generate controller test),这是项目中会同时产生四个文件app\controllers\test_controller.rb; app\helpers\test_helper.rb; app\view\test\; test\functional\test_controller_test.rb

此时访问127.0.0.1:3000\test会出现“

Unknown action

No action responded to index


查资料后修改test_controller.rb内容为“

class TestController < ApplicationController
 def index
  render_text"这是测试页"
 end
end

”后再次访问以上路径就会出现“这是测试页”的字样了,而定义其他url同理增加新的def就可以了,不过是否所有url都要这样来定义我还没有搞清?rails里model实现比较简单,单数对复数即model里定义test.rb则DB建tests表影射,然后在controller里的test_controller.rb加scaffold:test就ok了,最基础的list、show、edit、delete操作及表单在这之后自动生成127.0.0.1:3000\test\list

可以自己定义页面模版,比如想订制list页面的,就在test_controller.rb里加入

"def list...end”然后编辑view\test\list.rhtml即可,由于...内容与模版中动态程序的书写有关,有时间还需要进一步研究,大概就是数据库对象的声明一类。

PS:太晚了,随做随学随写吧





 
2005-12-20
TAG:ROR rails Ruby 中文 MySQL

MYSQL的中文问题确实非常麻烦,在JAVA开发中就曾经耗费我无数脑细胞来解决这个问题,想必在ROR下面也不是一个非常容易的事情,这个帖子谈论这个话题很全面了,在这里记录一下:

http://www.railscn.com/viewtopic.php?t=211





 
2005-12-19
TAG:ROR Ruby rails 路径





 
2005-12-08
TAG:脚本语言 Ruby ORMapping

    今天开始对项目的数据进行OR MAPPING,我根据使用HIBERNATE的经验来做,到也不觉得很困难,现在对这部分总结一下.
    说到OR MAPPING,总体来说要根据OO的特性来做,即"封装","继承","多态".而"多态"实际上是个动态的概念,因此MAPPING工作的重点就是"封装"和"继承".而"封装"中除了数据的封装外,还有实体间关系的表示.具体来看,无非这么几种关系:
    一对一
    一对多(多对一)
    多对多
    这次系统数据结构的设计没有用到继承,所以仅仅针对封装的这几种关系来说.
   
    一对一
    RAILS使用一对"has_one"和"belongs_to"来描述这种关系,等同于hibernate里的一对""和""
    一对多(多对一)
    这种关系也可以被称为双象映射,但是这里的双方关系却不是对称的.RAILS使用一对"has_many"和"belongs_to"来表示,等同于hibernate里面的.
    多对多
    这种关系的表示得需要一个中间表,hibernate的做法是程序员得指定告诉hibernate这个中间表是谁,而rails的做法是规定死了,这个中间表的名子是两个关联表名中间加个下划线,并且,这两个表名以字母顺序排列,比如表A和表B有多对多关联,则这个中间表必需为A_B.实现上,是通过在双方加上"has_and_belongs_to_many"来实现,比hibernate简化了不少.不过,如果字母一样怎么办?比如rights跟roles的关联表.这个我还没有试验.

    总结来看,建立起静态关联关系是很容易的,不过这种关联关系在访问的时候具体如何来维护?有什么规则?这还需要在写业务代码时再考虑了.



 
2005-10-31
TAG:Ruby variable class name rule

转自:《Programming Ruby - The Pragmatic Programmer'S Guide》

变量及类名称
变量 常量和
局部 全局 实例 类名称
name $debug @name @@total PI
fishAndChips $CUSTOMER @point_1 @@symtab FeetPerMile
x_axis $_ @X @@N String
thx1138 $plan9 @_ @@x_pos MyClass
_26 $Global @plan9 @@SINGLE Jazz_Song

PS:ruby的控制语句很有意思也足够简单,基本用不上什么()、{}、||、&&,碰到手懒的程序员绝对能把一段ruby写成作文,哈哈~就是不知道最后的可读性会不会受到影响?

samples:

if radiation > 3000
  puts "Danger, Will Robinson"
end
puts "Danger, Will Robinson" if radiation > 3000





 
2005-10-31
TAG:Ruby 脚本语言 AJAX
没有了AJAX,ROR的趣味性就要降低很多.
关于ROR中的AJAX,可以从这个文档入门:
AJAX ON ROR



 
2005-10-30
TAG:Ruby hello_world

        嗨~说歇会儿再写就耗到今儿~不说废话了~继续:

        其实我看的第一本有关Ruby的书不是《Programming Ruby - The Pragmatic Programmer'S Guide》,主要是当时一听ROR是MVC就晕了,直接看了Effiel Qiu的那本《Ruby on Rails实践》,说实话反正也是晕晕乎乎看完的,照抄了那个mybook的工程,好像最后运行连表update的时候有些问题~不管他了:P

        我想说的是其实学ROR还是别步子跨的太大了,起码应该好好的看一下Ruby基础再说(这也是我和todayhill的共识),OK~按照习惯我们该Hello World!了~

1、最简单的:(假设你的Ruby安装目录是C:\ruby)

开始 -> 运行 -> cmd - > 运行C:\ruby\bin\ruby.exe -> 输入puts "Hello World!" -> Ctrl+D -> 打印结果

2、用变量的:

到C:\ruby\samples\下新建helloWorld.rb,内容如下:

a = "Hello World!"
puts a

开始 -> 运行 -> cmd - >到C:\ruby\samples\下运行ruby helloWorld.rb -> 打印结果

3、用函数的:(todayhill写过了,我转一下)

def sayGoodnight(name)
       "hello,#{name}"
end

puts sayGoodnight("ZhangQi")

开始 -> 运行 -> cmd - >到C:\ruby\samples\下运行ruby helloWorld.rb -> 打印结果
友情提示:ruby里的函数定义默认把最后一句表达式的值作为返回值,所以这个函数的本来面目应该是
result = "Goodnight, #{name}"
return result
此外函数调用可以用很多种方式,比如
puts sayGoodnight "ZhangQi"
puts sayGoodnight("ZhangQi")
puts(sayGoodnight "ZhangQi")
puts(sayGoodnight("ZhangQi"))
函数中对参数的使用也可以用不同的方法,比如
"hello,"+name
"hello,#{name}"

4、面向对象的:(samples目录下的hello.rb)

class Hello

    attr_reader :msg

    def initialize

        @msg = "Hello, World"

    end

end

h = Hello.new

puts h.msg

print "Press RETURN"

$stdin.gets

开始 -> 运行 -> cmd - >到C:\ruby\samples\下运行ruby hello.rb -> 打印结果

PS:我也挺傻~todayhill管我要《Programming Ruby - The Pragmatic Programmer'S Guide》的时候我就记得我看过一眼,可怎么也想不起来放什么地方了!哈哈~其实如果你使用One-Click Installer - Windows安装程序,人家自动会在ruby的根目录下给你放一本CHM的......倒!





 
2005-10-29
TAG:Ruby 脚本语言
  上周四和五看了RUBY的基本语法和类的定义与使用部分,总体还不错,各个概念跟其他语言也没有什么不同的,只是多了个“block”的概念和“迭代器”,感觉还不错,这样一来,对于“循环”的实现就更纯粹了。
  总体来说,我是按照我那篇RUBY语言的学习计划里面的步骤来学,发现Programming Ruby这本书的组织还真是不错,在前面的Ruby.new那一个章节里面就已经把“RUBY的结构化编成”这部分概括地讲了一下,后面的一节来讲“RUBY面向对象的部分”。
  现在为止,觉得RUBY的异常、块、迭代、容器,还是很有必要再详细看看的,而至于IO跟线程部分,就可以等用到的时候再看了。
  下周就可以进行RAILS的学习了!

  另外,结合原来对RAILS跟上周对RUBY的学习,我居然想到一个场景:
  一个壮士手抱爪哇宝刀,无论小妖还是关底BOSS都一刀劈将下去,没有能够抵挡的。但是他自己却也得落个气喘吁吁。有一天他终于练成功夫,随手抓来个赖汉,抠点泥蛋下来照样能够伤人。
  ......




 
2005-10-28
TAG:Ruby install Windows

        其实接触Ruby有段时间了,但还是希望把开始时的一些“初级问题”写一下,毕竟自己也是从一头露水走过来的。

开发环境的搭建:

      可以从官网下载源文件,然后到本地用C/C++编译后运行,再配环境变量(麻烦死,直接pass~:P),还有三个windows下的:Ruby-mswin32 Install Ruby under Windows Ruby on Windows(不知是官网还是fans写的,也pass~:P),最简单的方法也是很多教程里提到的就是下载One-Click Installer - Windows(rubyforge.org是个Ruby开源项目站,以后用处肯定会很大...),这个傻瓜安装程序好就好在不仅是一步到底,还很M$风格~环境、DOC、example、IDE、RubyGems(类似于玩儿“力牛”时的rpm,远程安装很实在!)

注:OCIW的Ruby最近版本是1.8.2的,比官网的1.8.3以及1.9低,不过以我面瓜些的看法版本这东西有时还是保守一些好,资料多啊~哈哈!

先做会儿别的事:)稍后再写......





 
2005-10-27
TAG:Ruby
    刚刚尝试了我的第一个RUBY程序,开发环境是RHEL4U1,在这个系统里面,已经默认安装了RUBY 1.8.1,因此我也就跳过了通常的"环境配置"这一个工作.
    程序是照着做的,非常简单,全部代码如下:
    def sayGoodnight(name)
       "hello,#{name}"
    end

    puts sayGoodnight("ZhangQi")
感觉一:RUBY似乎是更彻底的every thing is object,可是方法却不一定仅仅定义在类中吗?我到要看看这是怎么说的.
感觉二:RUBY对代码的的书写提供了非常简便的实现方式,这对于我这种不喜罗嗦的人来说极为有利.
感觉三:RHEL4U1中的VI居然提供了RUBY语法中的不同颜色显示,真是方便,以后就用它开发了!




 
2005-10-27
TAG:Ruby 脚本语言
关于一门新语言的学习,我认为应该从以下几方面入手:
1.如何实现顺序、选择、循环
2.如何实现封装、继承、多态
3.如何实现动态性

        通过上面这三个方面的学习,应该就到了“知其然”的境界,如果想快速应用这个语言进行系统开发,就没有问题了,但是还不到高手的行列,如果还想“知其所以然”,就需要在深入学习这个语言的各个机制的实现方式了。

        当然,仅仅学会语言还是不行,还得学会应用框架,我认为这个部分的学习最好的方式就是做一个很小的但是又能说明问题的小系统来做实验。



分页 共1页 1

用户名:
密 码:
     


    访问统计:

    Powered by Blogbus.com