随笔-38  评论-25  文章-0  trackbacks-1
  2007年9月7日
        晚上跟老大,还有泰稳以及其他几位,见到了骆老师——骆古道。骆老师人如其名,自88年去德国,到现在已近20年,虽然已过不惑之年,仍然奋战在编程第一线,这次回国,是为了商量有关JRuby的图书写作出版一事,愿意与我们分享他在JRuby方面的思考和实践。恳谈过程中,骆老师屡次强调:软件产业作为一个国家的工业基础,对国家的重要性是毋庸置疑的;而且,国家现在就要从官方开始,重视开源软件,并应将其作为一个产业来做,否则中国软件产业前途堪忧。不过,在这一点上,我跟老大意见一致:惜乎官不随人愿,现在的官方环境,众所周知;似我等这样的“升斗小民”,纵有天大的“意见和建议”,苦无“门路”,要想“上达天听”,完全是天方夜谭了。
        老大现在的境况,我完全理解,每日事务繁杂不堪,具体而微,而且多方都有求于他。所发出的声音,其影响力更多是在业界之内,对于前述议题,以及今天提及的关于IT教育的一些话题(德国那边的大学现在已经有了RoR的课程,吃惊么?我其实不……),确实很难找到合适的场合、合适的对象来阐述一腔肺腑之言。不过我个人觉得,这些论题,其实是影响更为深远,造福更多人的选择。从我的角度来讲,应该尽快进入角色,从他肩上卸下一些担子,让他能够有时间更深入地思考更有价值的东西;并应该试图寻找一条途径,让他的声音,能够为目标人所知。
        与骆老师一席谈,收获颇丰,近20年在德国的经历,养成的严谨、认真之工作习惯与风格,从下面言论可见一斑(并非原文,大意如此):“我要写书,其中的代码,一定是从现有可用的系统中摘录出来的,我不希望人家把我的代码输入进去,结果不能运行”,“要搞懂人家的思路,一定要看人家的源代码,否则你是不会知道人家是怎么想的”。只这两句话,便可以让我汗颜了。
        此前的工作,说是坐井观天,并不过分,坐视人家勤勉实干,自己每日介不知在搞些什么,时有碌碌无为之感;到了现在的岗位,每日的工作,接触的人,所做的事,都与以往不同,新鲜之余,总有些惶惶然,可能做的事情,确实有很多,虽有繁琐之虞,但仍有其意义,只是以现在的方法,恐仍需改进;将来,是很难预测的,尤其是目前这个敏感时期,但就软件开发行业来说,那盏橘灯已慢慢变大变亮,大的方向应该说是越来越清晰了,在此种情势下,如何顺应潮流,引导人群,看清大势,也应该算是做势方式之一种吧。
        告别之时,骆老师热情邀请,如有机会到慕尼黑一游,莫忘与他联系。要是真有这等好事,我一定叨扰,借机品尝天下闻名的慕尼黑啤酒,只是不知骆老师酒量如何?
posted @ 2007-09-07 00:57 小熊bryan 阅读(50) | 评论 (0)编辑
  2007年9月6日

从2007年3月28日InfoQ中文站预启动测试版上线,到今天也走过了一段艰辛而骄傲的路程。和InfoQ.com网站一样,InfoQ中文站的使命是成为国内关注企业软件开发领域变化和创新的源泉之地,向中文读者提供有深度的内容,专注于服务团队领导者、技术架构师、企业架构师、项目经理和高级软件开发人员。带着这种使命,过去的一段时间里,InfoQ中文站发布了:

  • 444篇翻译+原创新闻
  • 88篇翻译+原创深度技术文章
  • 2个原创视频技术访谈
  • 1本翻译免费下载电子书

InfoQ.com是由一些热爱热区的人联合创建的,他们包括TheServerSide.com的创始人、总编、《EJB Design Patterns》一书的作者Floyd Marinescu,WebWork、AspectWorkz等开源项目的主力开发人员Alexandur Popescu等,于2006年6月8日正式上线。现在包括Java、.NET、Ruby、SOA、Agile和Architecture等六大社区。在内容方面,InfoQ.com是由编辑团队驱动,包括技术文章、案例研究、视频采访、会议演讲和迷你书等。在每个社区都有专职的编辑人员负责,以保证每天都有最新的内容发布。在技术方面,InfoQ.com在设计的时候深切考虑到用户的需求,大量采用AJAX技术,比如用户注册、评论、定制等,使得用户可以在最短的时间内得到最丰富的内容。

InfoQ中文站采用和InfoQ.com全球统一的技术架构,同样包含包Java.NETRubySOAAgileArchitecture等六大社区,编辑团队由一线对社区非常感兴趣的专业开发人员组成,比如ThoughtWorks公司咨询师,《重构:改善既有代码的设计》和《J2EE核心模式(原书第2版)》图书译者熊节,开源JavaEE项目SpringSide发起人肖桦(江南白衣),IBM中国软件开发中心工程师,《Ajax实战》译者张凯峰,微软最有价值专家朱永光、陈黎夫,全国海关信息中心高级架构师王翔,技术专家郭晓刚、李剑、陈俊、高昂、胡键、乔梁、宋玮、田乐、张海龙、孙向晖、郑柯、吴磊、张雪、岳立东等,共计22人,详情请浏览InfoQ中文站关于我们(部分专家信息没有更新)。如果你愿意和InfoQ中文站这些热情的专家一起参与InfoQ中文站的内容建设,请随时通过china-editorial[at]infoq.com邮件和InfoQ中文站联系。另外自2007年6月中旬起,InfoQ中文站还向读者推出了“每周精要”,通过邮件的形式浏览过往一周发布于InfoQ中文站的精彩内容。感谢所有参与InfoQ中文站内容建设的社区编辑和专家们,还有支持InfoQ中文站一路前行的读者朋友!

在增加了技术演讲、技术访谈、迷你书以及搜索等功能后,现在InfoQ中文站的基本功能已经具备,现正式从“中文预启动测试版”升级到“InfoQ中文站 1.5版”。InfoQ中文站会一如既往关注国内企业软件开发领域的发展,与国内其他技术社区一道为促进中国软件产业的发展而努力!如果你喜欢InfoQ中文站,请通过注册的方式表示对InfoQ中文站的支持,并帮助我们用你力所能及的方式进行宣传,同时我们也渴望听到你的评论和反馈!

InfoQ中文站近期发布的精彩内容:

posted @ 2007-09-06 10:35 小熊bryan 阅读(56) | 评论 (0)编辑
  2007年8月23日

1、一本杂志的硬实力和软实力?
2、要坚决杜绝错别字,这是是否专业的表现
3、作为编辑,什么样的文章可以有观点?什么样的文章只能有事实?这道界线划在哪里?

posted @ 2007-08-23 10:43 小熊bryan 阅读(107) | 评论 (1)编辑
  2007年8月21日
是某一项运动的五十周年,还有人记得是什么么?
posted @ 2007-08-21 17:14 小熊bryan 阅读(35) | 评论 (2)编辑
http://www.edubridge.com/erxiantang/library/shudian.htm     
        看了这篇文章,让我重新拾起了被我遗忘多时的梦想。其中提到的《书店风景》,早在2001年我就已经买了,只是现在已经淹没在我的书柜之中了。
      其实,人生真的有很多可能……
posted @ 2007-08-21 16:23 小熊bryan 阅读(29) | 评论 (0)编辑

        马上要离开现在这个地方了,我与大家在一起共事,时间最长的已经有四年了。四年,在现在的职场里面,在我这个年龄阶段,应该说不是特别多见的。这么长的时间里,可以回顾的东西很多,可以总结的东西也很多。这四年的时间,虽然不能说特别理想,但是对我的职业发展起到了重要的作用。尤其是最近一年以来,我有了自己将来的发展规划,也明确了发展方向。这是我对这四年最大的感激。也由此,心情逐渐有些失落。要知道,我是最怕离别的。大学毕业时,为了不与同学们执手相看泪眼,我做了胆小鬼,一个人拖着行李偷偷的离开了学校。没成想,还是没能逃脱命运,只不过变成了“执话筒相听泣声”。每每想起此事,总是觉得遗憾。人生之中唯一的一次机会,能够看到那几个平时总是嘻嘻哈哈的兄弟是怎么哭成一坨的,就这样被我错过了。
        接下来要面临的,是全新的行业,全新的工作,全新的环境,全新的挑战。我能否适应这个岗位?能否做出成绩?目前还不能轻易下结论。但我必竭尽所能。我不会现在就去预测将来的困难,因为这些东西想多了也是白搭。我要敏捷一点,再敏捷一点。“积极、沟通、协作、适应”,这就是我为自己定下的工作信条。
        抄一首《祷告良辰歌》的歌词,祈祷我和所有看到我文字的人都能找到心中的平静和安详。

祷告之时甘甜之时
使我离开烦恼之事
来到神的座前发表
所有意愿所有需要
当我遇到重压忧愁
我灵却常得着自由
不陷恶者所有布置
因为有你祷告之时
祷告之时甘甜之时
如有只翼载我愿辞
来她宝座向她求恳
她是信实她是全真
她既命我寻求她面
信阿话语靠她恩典
我要将我重担卸释
在于你前甘甜之时

posted @ 2007-08-21 15:39 小熊bryan 阅读(119) | 评论 (1)编辑
  2007年8月7日
    Kernel中的callcc方法,经过调用后,会产生一个Continuation对象,其中包含返回地址和执行上下文,允许从程序的任何地方返回callcc block的结尾处。

    上面代码中的strange()的定义中,调用了callcc方法,因此将当前的执行上下文置为了cont这个对象实例,而且一个返回地址也在其中;并且strange将cont作为自己的返回值。在接下来的代码中,顺序执行第5行、第6行、第7行代码。在执行第6行代码的时候,strange中的<print “Back in method, “>这一句,也就是第3行代码并未被执行,因为在上面的callcc的block中,return语句把生成的Continuation这个class的实例cont返回了,同时cont对象已经保存了当前的堆栈返回地址与当前的执行上下文。当执行到第8行代码中的cont.call的时候,从strange中的callcc所带的block的末尾开始执行,也就是说,接下来执行的是print “Back in method, “这一句。然后根据cont对象中保存的堆栈位置,继续执行第7行代码,这样就完成了这段代码的运行。
实际的语句调用顺序是:

最后的输出结果为:


不妨把对callcc的调用想为设定了一个堆栈调用指针到cont上,当在程序中调用cont.call的时候,堆栈调用回指到callcc所在位置的下一个位置上,执行完成后,再根据cont中保存的上下文返回到cont.call的执行位置,并向下执行接下来的代码。
posted @ 2007-08-07 13:10 小熊bryan 阅读(84) | 评论 (0)编辑
        作为一个Ruby初学者,最让我感到头痛的就是ProcClassModuleKernelObject这几者之间的关系,如果能把他们搞懂,并且可以玩弄于股掌之间的话,感觉这样才算是真正进了Ruby的大门。本文记录我在学习并感受这几个类时的点点滴滴。
  • 关于Class

         Class的官方文档urlhttp://corelib.rubyonrails.org/classes/Class.html

(虽然《Programming Ruby 中文版第二版》翻译的已经算是不错了,但是在后面内置类库的一些译法上,我认为有可商榷之处。当我遇到书中有些话不能理解的时候,我会直接到ruby的网站上去看官方的英文文档。)

    •  Parent: Module

说明:请注意,ClassModule的子类。

irb中运行:

Class.ancestors

输出:

=> [Class, Module, Object, Kernel]

运行:

Module.ancestors

输出:

=> [Module, Object, Kernel]

运行:

Object.ancestors

输出:

=> [Object, Kernel]

运行:

Kernel.ancestors

输出:

=> [Kernel]

 

  • 其中Class, Module, Object 都是class,KernelModule
  • Object mixes in the Kernel module, making the built-in kernel functions globally accessible. Although the instance methods of Object are defined by the Kernel module, we have chosen to document them here for clarity.
  • Object混入了Kernel这个模块,又由于ObjectRuby中所有类的父类,这样以来,Kernel中内建的核心函数就可以被Ruby中所有的类和对象访问。
  • Object的实例方法由Kernel模块定义。
  • Kernel模块中定义了private methodpublic method
    • 对于一个普通的对象,可以直接调用Kernelpublic method
  • irb中运行: a=Object.new

输出:=> #<Object:0x2ee9470>

  • 运行:  a.public_methods

                    输出:

=> ["inspect", "clone", "public_methods", "display", "instance_variable_defined?", "equal?", "freeze", "methods", "respond_to?", "dup", "to_yaml_style",

"instance_variables", "__id__", "method", "eql?", "id", "singleton_methods", "send", "taint", "to_yaml_properties", "frozen?", "instance_variable_get", "__send__", "instance_of?", "to_a", "to_yaml", "type", "protected_methods", "instance_eval", "object_id", "require_gem", "==", "require", "===", "taguri", "instance_variable_set", "kind_of?", "extend", "gem", "to_s", "taguri=", "hash", "class", "private_methods", "=~", "tainted?", "untaint", "nil?", "is_a?"]

  •  而要想调用一个普通对象所包含的Kernel的函数,用一般的调用方法无法做到,只有通过Send来实现:

 

posted @ 2007-08-07 13:05 小熊bryan 阅读(293) | 评论 (0)编辑
http://blog.sina.com.cn/u/47841af7010003rn

I will try to use short sentences when I am writing in English.
posted @ 2007-08-07 12:52 小熊bryan 阅读(37) | 评论 (0)编辑
   外面看起来挺好,可是里面没什么陷儿,没辙,疲了,倦了,觉得累了。怎么攒点字就那么难呢?
posted @ 2007-08-07 12:51 小熊bryan 阅读(19) | 评论 (0)编辑