2006年08月17日

有人能连续写出抨击RoR的文章,本来是件好事,可惜此人对要抨击的技术一点都不懂就乱吐口水的做法,太让人气愤了,懒得理他,可惜这种做法误导多少人?什么心态?

我真的很生气,还有这种人,传说也做企业级应用很多年了,怎么混到这种RP?在自己没人访问的blog上发发牢骚,不去满世界得罪人了,嗯嗯!!!

2006年08月14日

http://blog.csdn.net/danny_xcz/archive/2006/08/13/1056932.aspx

最近blog没啥好写的,看到纯月部落上又发文挑RoR –有反对声音总是好事,只要挑对地方。
一时兴起又去留言。

—————-

大家冷静,就事论事~
我有个疑问:LZ "1 从技术的角度来看"…."无论从Ruby语言,还是DSL,还是Web容器性能和代码生成,不存在任何创新。"

不知道LZ说的"代码生成"是指?

LZ上篇的ror安全问题正在关注…

———
受不了,大家说话口气真是服了!

纯月几篇blog提出以技术角度分析/对比RoR(现状及前景),却流于评论者资历、RoR现有成功案例、商业模式、业务领域等非技术话题,难免 让我们这些看官失望,期待能写些更具体的东西,安全性就是其中之一,纯月做了,虽然也有争论,但这个争论对俺来说更有看头。毕竟都是做技术的,实打实的掰 扯更有意思,比方(这里只是比方,俺都不懂PHP,估且拿Java当靶子)有人说代码生成不存在任何创新,俺就说它好(不知道此"代码生成"与彼"代码生 成"是不是同一个东东),俺贴段代码:
class Person < ActiveRecord::Base
end
对应Java(hibernate)就要:
class Person{
private Integer id;
private String name;
private int age;
…. getter & setter (& constructor [optional])
}
同时写Person.hbm.xml用来做声明映射
<hibernate-mapping>
<class name="Person" table="people">
<id name="id" column="id">
<generator …>
</id>
<property name="name" column="name" />
…其它property映射
</class>
</hibernate-mapping>

并且,ror(更具体是ror的ActiveRecord)使得Person类不光做了自动映射及自动有了setter/getter, 而且还自动有了find,find_by_id,update等类方法和update_attributes等实例方法,对于Java,借助spring 的HibernateTemplate(连同它的配置文件)可以做到一些,但不如ror的灵活。

这么一来,我用RoR PK Java的目的就达到了,当然,看官们肯定有理由反击,至少耙子立在这儿了。

———

俺一直坚持认为:东西好不好,和它有没有前途 *没有* 必然因果关系。
因此,同样不能用分析其前途的手段,来断言该东东好不好。
没人说RoR就是银弹,空来空去的没什么意思,俺是个爱细抠的同学,不如把它肢解了一点点掰扯,说商业就单说商业,说技术就单说技术,说现状就陈列现状,说预测就标明预测,把话题拉到一个具体的层面上大家好说事,比如技术上可以拿ORMapping、安全性、第三方库、IDE、AJAX…,商业上可以是大厂商支持、布署模式、客户认知度、市场响应速度…,像现在这样搅和着来对于初学者会是误导。
纯月自然是很历害的了,光看blog上的文章就很佩服,不过去回复那些质疑者就显得….嘿嘿嘿~
不过牛人只会牛在一个或几个领域,所以俺也没有盲目崇拜,期待后面精彩的评论。

2006年08月02日

SNA(Share Nothing Architecture),号称是php/ror承载高并发的终极方案,产品现在就知道有memcached(BSD开源协议),比起java的session复制优点多多。

对于java,如何不修改代码即可实现SNA?
包装一个新的HttpSession,delegate原始session,对它的setAttribute和getAttribute进行改写,调用memcached API。搞个Filter在最外层注入。

当session中某个复杂对象的状态发生了变化,又没有调setAttribute更新怎么办?
方法1: 要求开发者调用setAttribute通知更新。
方法2: 设计初期规定某个类,所有要在session中存储的内容必须以成员变量的方式定义。禁止直接使用session.set/get attribute,只能通过某些方法操作该类的实例。 在这个类里,通过AOP或其它的途径检测自身的更新,自动更新memcached。

据robbin称java的Serialize效率较低,关注一下。
能确信在设计前期不考虑集群的问题,后期可以方便迁移就可以了。

http://www.danga.com/memcached/
http://www.whalin.com/memcached/javadocs/
http://forum.javaeye.com/viewtopic.php?t=20298

2006年07月17日

今天发现以前在纯月部落blog上留的回复,他另写了篇blog专来回应我这个小字辈,能力有限,幸得"负暄琐话"和gigix两个大佬接招。刚查到以前的那个blog,原文:
http://blog.csdn.net/danny_xcz/archive/2005/12/28/563665.aspx

我的回复:

纯月部落对ruby on rails的看法跟我当初一样,但我现在承认那是个失误.
我是04年学的ruby,被它的语法所折服(之前也学过一点python).后来看到有人夸rails,于是找资料玩,第一步遇到的就是 generate命令,生成controller,model,scaffold这些东西,第一印象,这不就是代码生成吗?类似VC的代码生成已经让我深 恶痛绝了,这么没创意的东西还炒个P啊…
直到去年年底,rails被提的越来越多,于是又拿资料好好看,最后发现,以前一开始遇到的代码生成 不是它的核心,可以说,这个功能可有可无,它能生成的代码 我们自己手写也不麻烦. 它的核心,是利用ruby语言的强大,DSL式的web编程. 我是做java web应用的,ror的体系结构与它十分相似,但与之相比,各层的实现都简单清晰. 才终于理解了为什么ror对java社区的冲击很大.
你提到ruby/ror的库少,成熟度低,这是事实.它在飞速成长中,也不是任何地方都适用的.现在它的应用也有一些了. 我个人的一点看法,如果有精力,ruby/ror是个值得学习的东西,因为它清新有趣又能解决问题. 如果公司应用,需要观望,除非有精通它的人.
纯月部落 说>>>
其实我只是觉得自己已经没有经历去跟上不断更新换代的这些语言,框架的角度了,开源给软件的获得带来极大的便利,但是也给我们对软件的选择带来了极大的挑战。J2EE里面的框架没几个月就出来一个新的,谁有劲一直跟着学呢?
所以我只能把握一个大方向,掌握一些立足的本领(Java,php,VB),然后锻炼业务素质,协调能力等综合素质,我相信绝大部分认为自己不是天才的人都要走这条路的吧!
—-
既然没有精力跟踪那些新技术,就让它们在喧嚣中自生自灭吧,写这篇文章引来不少反搏,始料不及吧! :)

php俺没玩过,你说与java结合像groovy一样也是我梦想的,不过梦想归梦想,让java上的脚本语言达到ruby/ror的优秀与成 熟,不知要等到猴年马月,深层的问题解决不掉永远不行。楼主是个实用主义者,所以倾向于选择久经证实的成熟的东西,那么,近期也别指望java平台上有达 到原创ror的东东了。现成的东西在这摆着,发展又这么好,足够有吸引力玩一玩了吧。

一家之言,莫见怪~

http://blog.csdn.net/danny_xcz/archive/2006/06/26/835417.aspx
还有"负暄琐话"和gigix的反击:
http://blog.csdn.net/g9yuayon/archive/2006/06/26/836271.aspx
http://blog.csdn.net/gigix/archive/2006/06/27/840775.aspx
因为纯月部落blog的回复功能关闭了,我只好贴在这里:

【正如年初的预言一样,ROR已经死了。】
性能、编码效率、代码可维护性是正交的方面,为什么只盯住性能这一点(而且是不见得正确的观点)来全盘否定它在其它方面的优势?

【我的本意是希望大家不要把精力花在无谓的使用框架上。多多研究业务模型,敏捷开发的方法才是正道。】
同样,当醉心于业务模型、开发方法的时候,就要认为 技术实现 低一个层次吗?我现在恰好遇到一个产品,号称在该行业市场占有率第一,由于技术问题需要扒掉重新实现。
决策、财务、销售、管理、业务、技术…都不错的时候,是不存在哪方面比其它方面更重要的。只有某方面出了问题,才会显示出它的重要性,自然,不见得就是业务模型或开发方法。(引用某位老大的观点)
如果一个销售人员说,【大家不要把精力花在无谓的业务模型上。多多研究客户心理,销售技术才是正道。】你认为他能客观评价“研究业务模型”的作用吗?
或者一个经理说…

我没见过将ROR作为"业务分析"或"开发方法"的,纯月部落潜意识里将它们进行比较真是独出心裁。以这种角度看的话,ROR确实没什么用处。
ROR不是万能的,它有自已的缺点和适用范围。但超出这个范围去鼓吹或批评就不厚道了。

【IBM最终选择了php。 】 ,如果IBM全面转向php是事实,那么!@!#$#%#$^%&

如果一个新事物出现的时候,根据它没有大面积应用就能推理出它已经死了,那么世上就没有新事物这一名词。
它本身技术好不好 和 成功案例多不多 有关联,但不见得有必然的因果关系,尤其对一个新生儿。我们不是习惯把技术和商业当成两码事了吗?
既然谈到它好不好,就应该拿出它本身的东西说事(比如文章前面的性能),而不是拿一些没有必然联系的事实做推理。

公司选择技术时衡量成本、收益、风险是正常不过的事情,考查成功案例多不多这种具体的风险度量行为是十分有效的,新事物自然带有多方面的风险,连同员工培训等成本的加大。
但是如果选择了像java这样的成熟方案,就失去了ROR能带来的编程效率等收益(又见机会成本,呵呵)。有稳定产品的公司放弃现有大量积累转用ROR除非脑子进水才这么干,可也有新创业的公司没有包袱而且有足够的能力驾驭ROR提高自身的竞争力。
一个东西不适合自己,不一定同样不适合别人。(希望某女不要误会)

纯月部落抬爱我这个晚生了,php没用过,ror也没实际做过,jboss seam打算有时间看看。我也关注ROR的性能问题,也可能因为它的这种不确认性放弃它,但不会认为它一无是处。
由此引出的一些技术讨论有些收益,希望各位大佬在一个可比的层面上继续深入讨论,小弟学习中…

2006年07月13日

http://learning.sohu.com/s2006/gkminxiao/

http://www.gaolu.com/gaoxiao/ligong/

http://www.gaolu.com/gaoxiao/by/

http://www.gaolu.com/gaoxiao/dwjmdx/

2006年06月21日

从ajaxcn醒来那里淘到的:
http://ajaxcn.org/comments/start/2006-06-08/1
http://domscripting.com/blog/display/41

一个在 旧MVC代码结构上 增加AJAX 特效的js库:progressive enhancement and graceful degradation
它也基于prototype,思考它与RJS模式的区别(或将来的融合)……

小记

2006年06月17日

http://forum.javaeye.com/viewtopic.php?p=126052

找到了:


http://rubyforge.org/projects/rubylexer/



这个ruby库可以解析ruby源文件 成 一个个token 并可遍历。


原以为太复杂自已玩不转,试了试还可以。下面是解析出module结构树的代码:



ruby代码: 



require "rubylexer.rb"


f = open(‘d:\test\testrr6.rb’)


lexer=RubyLexer.new(‘d:\test\testrr6.rb’, f)



# module tree node


class ModNode


  attr_reader :children, :mod_name


  def initialize(mod_name)


    @mod_name = mod_name


    @children = []


  end


 


  def <<(child_mod)


    @children << child_mod


  end


 


  def dump(level)


    self.class.dump_level(level)


    print @mod_name


    print "\n"


    if not @children.empty? then


      for child in @children


        child.dump(level+1)


      end


    end


  end


 


  def self.dump_level(level)


    print ‘–’ * level


  end


end



need_capture = false # whether should capture next VarNameToken as module name


mod_stack = []


keyword_stack = []


root = ModNode.new(‘root’)


mod_stack.push root



# iterate tokens


until EoiToken===(tok=lexer.get1token)



  if tok.kind_of?(KeywordToken) then


    next if tok.has_end?.nil?


    if tok.has_end? == true then


      keyword_stack.push tok.ident


    elsif tok.ident == ‘endthen


      ident = keyword_stack.pop


      mod_stack.pop if ident == ‘module


    end



    if tok.ident == ‘module‘  then


      need_capture = true


      next


    end


  end


 


  if need_capture and tok.kind_of?(VarNameToken) then


    mod_name = tok.ident


    mod = ModNode.new(mod_name)


    mod_stack.last << mod


    mod_stack.push mod


    need_capture = false


  end



end



# dump the module tree


root.dump(0)






执行结果是:


引用:
root


–AA


—-BB


—-CC





3000行的watir行不行,很期待 Wink

————————————-

原先考虑过这种方式:


ruby代码: 



s = open(‘d:\test\testrr6.rb’).read


module XX


end



XX.module_eval(s)



ObjectSpace.each_object(Module) do |clazz|


   puts clazz.name if clazz.name.match(/^XX\:\:/) and not clazz.kind_of?(Class)


end





执行结果是:


引用:
XX::AA::CC


XX::AA::BB


XX::AA





d:\test\testrr6.rb 是待解析的ruby源文件。


对过滤出的clazz.name做下处理就会有收获,不过实在是…. 太土了 Sad

2006年06月13日
The fact is that I did not know how to understand anything. I
ought to have judged by deeds and not by words, she cast her fragrance and her
radiance over me. I ought never to have run away from her. I ought to have
guessed all the affection that lay behind her poor little stratagems.  Flowers are so inconsistent! But I was
too young to know how to love her.

—-《小王子》[法国]圣·埃克苏佩里著

 致我所有的朋友……祝願你們都能找到自己的另一半,他(她)給你的愛應是坦誠的、熱烈的、成熟的、無私的、曆久彌堅的、催人向上的,並帶給你激情和安全感,當然也是值得你拿一生去愛的。(何葉)
2006年06月11日

两个月前一度对水木周平的言论推崇倍至,哪料会有今天的失望 — 其实,也不是很失望,从一开始就意识到他的问题了,只是现在这个问题使它的内容几乎不值一看。也许我以前与人讨论,只是想减小其错误造成坏的社会影响吧。目前能偏激到观点无法立足,还会立错靶子,可谓黔驴技穷。难怪他的第一铁杆粉丝重楼小丫头都表达出失望:

近日读《撕响报》,看到神性的光在魔性的狂潮中忽明忽灭。
“天地混沌如鸡子,盘古生其中,万八千岁,天地开辟,阳清为天,阴浊为地。”

真正的魔,参悟生命之真谛,敢与天地争。
真正的神,感悟自然之奥妙,乃与天地合。
真正的人,兼具神魔二性,故立于天地之间。

唯独迷者,于苦难中挣扎不见出口与来路。
水木,我第二次问你,教众生入魔,于天地之争中化分清浊可好?呵呵。

唉。答案不给我也罢,知你定一意孤行。


个人认为,重楼观察问题的深入和客观程度还要高于水木,不过重于传统文化,难免有玄妙、混沌之感。

客观不流行,流行不客观,无奈。
呼吁那些智者空降到平民区(如猫补)普渡众生吧~
科学本复杂,这大概是 连严谨的草根学者都不愿空降 的原因。但是,你忍心藏在那个小众圈里享受短暂的安逸么?