• 今天是一个发布的日子,XRuby发布了0.3.1,Ruby Hacking Guide中文版发布了第一部分。

    XRuby 0.3.1

    相比于前一个版本,XRuby 0.3.1最大的进步在于完成标准库的预编译。预编译意味着什么?标准库代码无需在每次运行时编译,这意味着今后使用XRuby的标准库性能会得到一定的提升。

    有一个与编译相关的话题。之前,Jon Tirsen曾经谈到JRuby的一个问题,运行在AppServer中会有占用太多内存。经过分析得知,为了提高程序的并发性,程序运行会启动多个JRuby。每个JRuby解析Ruby脚本都会建立一棵完整的语法树,这就意味着,由于这种解析模式本身的限制,对于同样的内容,内存中需要保存多份相同的语法树,这种做法意味着无谓的耗用了大量的内存。采用编译的做法,则可以很好的避免这个问题。因为在运行时,相同的是字节码,而JVM很好的帮我们解决字节码共享问题,无需耗用大量的内存。

    Ruby Hacking Guide中文版第一部分

    RHG终于完成了第一次发布。已经发布的第一部分介绍的是Ruby的对象模型。我正是从这个部分开始了解Ruby实现的,进而完成了XRuby的Runtime的重写。所以,我一直觉得这部分是了解Ruby实现非常好的一个起点。

    从翻译Ruby Hacking Guide到现在已经超过了一年,从第一次发布消息算起也超过了9个月。相比XRuby,这个项目的进展可以用异常缓慢形容。这是一本日文书,也是一本技术书,而且是一本讲语言实现的书。任何一个点都会增加翻译的难度。几个懂日语的朋友先进行一遍初译,然后,我对再对译稿进行一遍校验,并根据自己的理解修改译稿,这样的过程无疑延长了处理的时间。这是一个业余时间的项目,而我更多的业余时间在XRuby上,没有太多精力投入上面。种种的因素造成了这个项目的一托再托。

    目前,我手头已经有了第二部分全部和第三部分几章的初译稿,不过,按照之前的进度来看,这几章的发布可能要等到许久之后了。如果你有兴趣,可以加入到这个项目中来,这样,有助于加快这个项目的进度。

  • 一年前,yawl将自己用业余时间做了一年的项目开源了,这就是XRuby。
    XRuby project is now hosted on Google Code
    有人愿意做Ruby Compiler么?

    我就是那时加入XRuby的,依然记得最初见到这个项目时的兴奋,转眼,一年过去了。从2007年1月29日0.1.0发布至今,我们一共发布了7个版本。XRuby正逐渐变得越来越有样子:代码越来越干净,功能越来越强大。

    XRuby是我第一次真正全身心投入参与的一个开源项目:常常为自己漂亮的解决了一个问题而自豪,也时常为解决方案不够优雅而寝食难安。依然记得有几次,为了实现一个功能而熬夜;也有本来已经躺在床上,却难以抑制兴奋爬起来继续编码。这一年里,XRuby在成长,我也随着这个项目在成长,对Ruby语言的实现理解越来越深,从最开始的照搬C实现,到现在逐渐有了一些自己的想法在里面。在与大家合作的过程中,从其它人身上学到了许多足以让我受用终身的东西,尤其是yawl。相信其他深入参与XRuby的人与我有着类似的经历和感受吧!

    其实,在这一年里,我也并非始终如一的对XRuby付出着。从项目最初开源到发布0.1.0之间有大约4个多月时间,完成了那个新runtime之后,很长一段时间,我并没有写太多代码。那段时间,应该是我参与XRuby过程,感觉最为黑暗的一段时间,因为确实看不到这个项目的方向,没有版本发布,漫无边际的代码等待着编写,而我写的新runtime又很难集成到XRuby里面。这个状态一直持续到0.1.0的发布,我似乎一下子看到了光明,尽管XRuby看起来那么不成熟,但我们的努力终于得到了一丝回报,于是,我兴奋的写下了《XRuby发布了!》 。

    在我找回动力之后,XRuby也逐渐开始得到了越来越多的关注,项目成员也逐渐增多,XRuby也逐渐步入开发的正轨。每隔一个多月,我们就会发布新版本,每次新版本的发布,都增强着我们对XRuby的信心。XRuby的成员也通过各种途径向大家介绍着XRuby,也有人开始讨论XRuby。

    做开源,最艰难的是什么?技术吗?似乎是,尤其像XRuby,仅仅一个“编译器”的名头,就足以让许多人望而却步了。其实不然,技术这东西,只有不愿意学的,少有难以学会的。参与XRuby并不需要一开始就掌握复杂的编译器技术,因为XRuby包括了许多部分,编译器只是其中的一个部分。时至今日,XRuby中的某些部分对我来说,依然是陌生的,但这并不影响我为XRuby编写代码。从个人的经历来看,builtin是一个很好的入手点,而那里并不多数情况下并不需要了解编译器,甚至几乎不需要了解Ruby内部实现。

    在我看来,最难的是坚持。用业余时间,无偿为一个项目付出着。回报?除了知识和技能上的提升,其他都是不可预期的。在这种情况下,坚持着实是一件困难的事情。其实大家可以很清楚的看出来,这个世界上,开源项目不计其数,但真正能让人知道的少之又少,许多开源项目在开始后没多长时间便死去了。在国内论坛中,很多开源项目的发起者都在抱怨,开源环境很差,没有人参与他们的项目。当然,这其中也有项目本身吸引力的因素。其实,做开源是需要一些理想主义的,这样,才能在一条未知的路上前行。XRuby中也存在类似的问题,许多参与者一开始总是兴致勃勃的要求加入,好一些的,贡献了一些代码之后,便很长时间没有声音,有的则在加入之后,一行代码都没有写,便无声无息了。从加入开始一直比较稳定的贡献代码的人,屈指可数。不过,从另一个角度,这也说明了,当一个开源项目具备了一定的生命力之后,并不会因为某个人的不作为而死去。

    不管一路上有多少阳光和风雨,XRuby走过了它的第一个生日,步入了第二个年头,大家已经开始尝试着进行Rails的支持,我们会努力让它走得更好。在班加罗尔讲XRuby时,有人问过我,现在XRuby面临的主要问题是什么,我说,我们没有足够的资源。其实,现在可以看到的很多问题对我们来说,并不是非常困难,但却需要投入大量时间来完成。这也是我们始终如一的欢迎有兴趣的人加入我们的原因。如果你愿意和XRuby一起成长,欢迎加入我们!

  • 做了一件让自己觉得不可思议的事情,在班加罗尔的Geek Night用英文讲XRuby。

    这周早些时候,在办公室遇到了Sidu——我在西安办公室见过他。周五有个班加罗尔Ruby User Group的活动,叫Geek Night,Sidu是活动的组织者。之前,他知道Ola会来,于是安排Ola介绍JRuby。当他看到我的时候,才知道我也来了班加罗尔,于是邀请我也一起参加活动。我问他,我是否需要准备什么,他建议我做一个XRuby的介绍。Ola会有一个45分钟左右JRuby方面的介绍,所以,我需要做的只是一个简单的XRuby介绍。很合我意,因为要用英文讲,所以,如果讲多了,我恐怕自己不成。我很快就准备好了一个很短的介绍。

    ThoughtWorks做事总是要敏捷的。今天,我发现Ola没来,后来才知道Ola病了。所以,Ola的部分就取消了。Sidu问我怎么办,我只好硬着头皮答应由我讲一个长一点的,一个比较完整的XRuby介绍。晚上六点的活动,商量好这些的时候,已经是四点多了。所幸之前讲过XRuby的介绍,我把讲稿翻出来修改了一番,更新了一些状态,准备用在活动中。XRuby介绍这个稿子居然得到了反复应用,第一次在北京Java User Group,第二次在敏捷西安,据说,XRuby的其他成员也用过。无论如何,我没想到,我个人的第三次居然是在班加罗尔,而且是英文。

    其实,最让我头疼的绝对不是介绍XRuby,而是用英文。这周在班加罗尔上课,对我来说,简直就是一周的英文课。所有课程所有讨论都是英文,我的英文水平让我经常就不知道大家在说什么。不过,自我感觉,经过一些锻炼之后,还是略有提高的。

    活动开始,我开始了第一次用英文在比较公开的场合讲东西。我的开场白是,这是我第一次用英文讲。起初,活动在一个小会议室进行,在我讲的过程中,进来的人越来越多,所以,我们又换到了一个比较大的会议室。因为用英文,我只能说,我尽量把我要表达的意思说出来,至于是否大家听懂了,我不好说。好在有讲稿,即便我讲得不够清楚,讲稿也会帮助大家多一些理解的。当翻到讲稿最后一页的时候,我长出了一口气。如果是用中文的话,我可以说得更多,至少我可以胡扯一些东西。对我来说,更大的挑战是Q&A。我的听力本来就不是太好,印度口音更是经常让我犯晕。开始之前,我找了几个同事,如果我听不懂的话,他们可以为我解释一下。在提问者的宽容和几位同事的帮助之下,我成功的度过了Q&A。问题倒不算太难,唯一让我不敢确认的是,我说的是否真的是我要表达的意思,希望没有大错。

    不管怎样,我用英文讲了一次XRuby,一次很有趣的经历。
  • 2007-08-28

    交流技巧

    在ThoughtWorks里,交流是工作中非常重要的一个部分,在这里工作时间越长,这一点感觉得越加明显。今天,和我们团队中的一个人聊天,他教了我一些交流上的技巧,这里做一个简单的备忘。事实上,他教给我的远不止这些。

    交流中,最大的障碍就是双方是否真的理解了对方的意思。造成误解的原因可能有很多:
    * 双方都认为自己理解了问题,但这种理解可能并不一致。
    * 因为背景不同,所以,双方对达成一致所基于的假设是不同的。
    * 语言之间的障碍,这点我最近颇有体会
    * 双方对问题理解的深度不一致

    同事交给我的解决方案就是不断问问题,不断解释自己对问题的理解,对方接收到反馈就会判断与他的理解是否一致,然后再给出他的看法,这样几个来回下来,双方基本上就可以达成一致。有些人可能认为反复的问问题,反复澄清自己的理解似乎会让自己的看上去很傻,所以,听得差不多就不愿意问了。我们的根本目的是完成工作,如果因为前面不愿意看上去丢人,后面可能就要真正的丢人了。其实,没有人会认为把问题搞清楚是丢人的。

    再有一点,交流之后要尝试总结,通过总结:
    * 确定真正理解问题所在
    * 确定双方对问题有一个共同的接收标准
    * 确定双方能够在进度上达成一致

    学到了,争取用起来!

  • 在ThoughtWorks工作已经有三个月了,快乐的事情在blog上体现了不少。找点让我头疼的话题聊聊吧!

    ThoughtWorks是个外企,所以,必然要大量的使用外语,而外语偏偏是我的弱项。当然,我没有不堪到一点英语不懂的份上。我的英语对付日常的读写没有什么问题,主要就是在听说上。我就是那种传统英语教导出来的哑巴英语,要不是之前和两个朋友曾经专门学过一段时间,我的英语恐怕到现在还是完全张不开嘴的水平,也就不可能能通过TW的面试。现在在北京的办公室里有不少来自其他办公室的同事,所以,不得不与他们进行交流。平时,有时还会有电话会议,原本听力就不那么好的我,再加电话里有些杂音,经常不知道对方在说什么。不过,自我感觉,这几个月下来英语还是有提高的,但为了如果想更好的与外国同事交流,英语还要进一步提高,这样的话,才可能讨论一些相对深入的话题。

    前两天,和老大聊天,他提到了中国人同其他国家人的一个差别。我们比较含蓄,通常会在深思熟虑之后,才提出自己的问题,他们通常会把自己想到的都摆在台面上。所以,这就造成了一些沟通上的障碍,有些时候,我们本来已经发现了问题,但常常会考虑该不该把问题提出来,把问题提出来会带来什么样的影响。结果,往往是在思前想后的阶段,就耽误了一些事。当然,完全展现自己的想法也并不一定就是好事,有一些明显错误的东西还是有些浪费大家时间。和一个在微软的同学聊天,他也提到,他们公司也是鼓励大家想法说出来。只有把想法说出来了,它才是存在的,否则,最后的结果可能就是消亡在自己的大脑中。

    现在在做的其实是一个产品方向,这就需要人有更加全面的能力。因为做项目的时候,我们往往只要关注特定的平台(OS、数据库、浏览器……),但是做产品要兼顾的内容就要广泛得多,有不少问题只有在特定的平台上才会显现出来,比如MySQL的数据库表名在Ubuntu下需要区分大小写,而在Windows上则不区分。这就暴露出我在这个方面的不足,我做过开发的平台其实并不多,所以,有些时候,我经常需要找同事来帮忙,还好,大家通常是只要自己知道,就会不遗余力的帮助你。

    现在我实际上是在一个分布式的团队中工作。说实话,我并不太喜欢这种工作方式,因为可能一个和你工作了很长时间的人,甚至都不知道长成什么模样。道理上没什么,但总不如直接在一起工作,那样的话,交流成本更低。我现在更容易理解为什么我们公司要让大家围坐在一起,这样,有话就说了,即便是一些无聊的话。再有,不熟悉的人总不如熟悉的人交流起来得自然,公司经常会有一些team building的活动,而且通常会鼓励不熟悉的人坐在一起,其目的就是为了大家增进了解,这样的话,在工作中就可以更好的进行沟通。而对于一个分布式团队来说,这一点就很难实现。

    之前做项目的时候,大多数时间都是拿到一个比较明确的任务,然后进行开发。而现在有些时候,某些任务并不是那么明确,虽然大的方向一直在那。仅仅拿远景说事,是不能完成任务的。这样的时候,是需要一些主管能动性让那些大目标变成一个个具体可行的目标。由于适应了之前那种工作方式,我经常会在那里等待。这在无形中就是一种浪费,对公司来说,也是一种损失。

    这样那样的问题,只能说明一点,对于我现在所从事的工作而言,我在某些方面还存在一些不足。发现不足是进步的基础,努力让自己成为一个更加合格的ThoughtWorker。