• 前两天发现手机常常识别不出存储卡,但是今天才给客服打电话,结果发现正好过了15天的换机期限……

    郁闷,只能修了。

  • 2007年4月加入InfoQ,至今翻译新闻83000字,文章2000字,加上一本半的迷你书,一共171000字。

    有某人比我少: InfoQ工作量统计

  • blackanger to agilechina

    实施了Scrum那就一定敏捷,因为成功的消除了浪费,提高了效率。实施的不好,那也不会带来负面作用。本身敏捷就是一个不断寻找的过程, 而Scrum是一种经验性框架,通过一次次的迭代找到属于自己公司的成功的Scrum。

    山头上的旗帜(项目交付)是我们的目标,我们有好多办法去得到它。敏捷是其中一条路,可以让我们减少体能的浪费来达到目标。Scrum好比是上山的缆车,用了Scrum难道就不敏捷吗?

     

  • 减假了 - [朝花夕拾]

    2008-03-25

    每年的事假从5天变成0天;

    护理假从10天变成5天。

    保留意见。 

  • godblessu 写道:
        我是译者苏敬凯。感谢楼主及大家对此书翻译所提出的意见,更期待你毫不留情地提出更多宝贵意见和见解。
        关于game,游戏更贴切,还是博弈更贴切,可能见仁见智。我本人倾向于博弈。
        对于梨花体,我很高兴地承认我写过梨花诗,详见我的博客(http://blog.csdn.net/godblessu/archive/2008/03/24/2212816.aspx)
        关于所谓大汗淋漓、ROOM,纯属楼主在做准爸爸期间产生的幻想。


    不不,我一点意见都没有,译者大人您误会了,我对你可是敬仰的六体投地啊。

    不说别的,单看您的译者序:“参加本书翻译的还有尚计升、史红伟、祝国志、张峰峰、张文军、张艳军、王小财和周宝华、张勇、杜兴平、刘志飞、沈海峰、谢扣林、乔义峰、刘查强、王义强、刘国际、杨传辉、王建华、汪明军、朱兆涛、毛付安”

    再算上译者你,就足足有23个人参加了这本书的翻译啊!能把23个人的文字风格进行统一,就已然不是我这样草芥之民所能想象的难度。

    当然,或许也有另外一种可能,那就是全书本来都是您一人翻译的,只是多加了22个人的名字上去,全书稿费平摊到23个人身上,所缴纳的税金不就微 乎其微了么?不过这样的揣测也太过于恶意了些,即使全书都是您自己翻译完成,能用诗一般的文字将技术文字进行艺术处理,打乱前后相连的语气,破坏语义的承 接关系,瞻之在前,忽焉在后,翩若惊鸿,宛若游龙,完成这等伟业的人,又怎么能在乎区区锱铢呢?

    不过话又说回来,我们都是too simple,sometimes naive的人,神明般的文字远远超出了我们的理解能力,所以还请您老人家高抬贵手,以后再有什么获得Jolt大奖的图书,就留给这些俗人们来翻译吧,我们不喜欢看天书。
  • 当我看到第一章第一行正文时,我不仅深深叹服于译者的能力了。

    在思考软件开发时,有一种富有成效的方式,那就是把它当作一个创造和沟通的合作博弈。”唔,这样急促的呼吸,是刚刚辗转于床第之间才能有的吧?我甚至都可以想象得见译者于大汗淋漓之际,披衣下床,运指如飞,方才能有这样的句式。

    在这个正常人居多的世上,强者终归是少数;于是我满怀对译者的敬仰之情继续了阅读之旅。

    然后我看到了第二段。“轰!”地一声惊雷炸响,那迎面而来的王者之气让我竟不由的虎躯一震,眼前恍惚浮现出了杜甫的千古名句——“何时眼前突兀见此屋,吾 庐独破受冻死亦足!”许久之后,我才渐渐心情平复,眼含热泪掩卷深思:我们国内这些技术书籍的译者,是不是固步自封太久,成了井底之蛙了?说什么“要语句 通顺,符合汉语的语法结构”,又说什么“要意译,透彻理解,灵活表达,在自己理解的基础上进行再创造”。在这种种枷锁下,我们的翻译事业还能有多大的发展 空间?时间永是流逝,街市依旧太平,但强者终归是要逆天的,于是我们才能看到在常人眼里惊世骇俗的文字:“如果它不是我们正在开发的软件,那么开发软件的体验应该像什么?”为什么句子的主语一定要指代明确?为什么语气前后一定要连贯?在书中,我看到的是译者用自己的键盘,向万恶的社会发出血泪控诉!他的这等做法,无异于用自己的生前身后名,为大众劈开一条前所未有的路。舍己为人,至死无悔!

    念及此处,我不免又有些心神激荡,终于还是强忍着拜读下去,“接着,本节把软件开发与另一个团队合作博弈—攀岩做了一番比较,然后与两个对照者—工程化和模型构建做了一番比较。”连续两个“一番比较”,用陈述的句式造出排比的气势,固然非同寻常,但与上文给人的震撼无异于天壤之别,于是有些疑惑,难道短短两段之后,就开始江郎才尽了?

    但转眼便是奇峰突起,目光换行之间,我险些震惊的一口血喷到显示器上。你猜我看到了什么:“它认为这一博弈的首要目标是:交付可工作的软件,而辅助目标(或者说博弈的积淀)是:为下一次博弈做准备。” 连断四句!!这样的节奏,这样的韵律,岂不是只有R~O~O~M才能媲美!一边是挥汗如雨娇喘微微鬓乱钗横,一边是思如泉涌勤勤恳恳笔耕不辍,什么人才能 达到这样的境界啊!化腐朽为神奇,于平淡中见真章,席慕容说过“美丽的人同美丽的梦一样可遇而不可求”,本书译者亦如是。

    文至此处,我已无法继续,凭我等蝼蚁这般微弱的想象力和跳跃性思维,想跟随大神的脚步实属痴心妄想。最后无非落得“夫子步亦步,夫子趋亦趋,夫子驰亦驰;夫子奔逸绝尘,而回瞠若乎后矣”!

    但我无憾。纵有生花妙笔,也未尝能将书中妙处形容万一。若是有人能藉由我这些拙劣的文字,稍稍感悟到译者的神韵,我心已足。

    谨以此文,纪念2008年3月20日初次于技术书中见梨花体。

    ps:书籍链接:敏捷软件开发(原书第2版)

  • 这不是一本简单告诉你如何通过Step by step的方式来学习Struts2的书,也不是把框架的整体结构和功能组成部分细细揉碎了帮助你消化。

    如果你只是想在读过这本书以后,可以在简历上“精通SSH”的部分以外加上一笔“精通Struts2”,那它真的不适合你。如果你在应付过当前的 项目之外,大多数的时间还是用来聊天、看小说、打网游,或者看图片(先提醒一下,浏览或下载超过200张可是犯法的),这本书依然不适合你。如果你对框架 的理解就是到了会用为止,成为一个熟练工种,对提高自己的分析设计能力丝毫不感兴趣,这本书还是不适合你。

    那么,究竟什么人应该读它?大家心里应该已经有了答案。

    希望你可以仔细读一下第四章——架构目标(概念分离、松耦合、易测试性、模块化和惯例重于配置)。

    下载链接:http://www.infoq.com/cn/minibooks/starting-struts2
  • 通常打包Product的时候,一般都是通过Product的export操作来进行的,但这样的做法,则限制了Continous Integration的自动化执行,那么,应该如何编写自动化构建脚本呢?

    一、首先,让我们看一下Eclipse官方的解决方案:

    http://help.eclipse.org/help32/index.jsp?topic=/org.eclipse.pde.doc.user/guide/tasks/pde_product_build.htm

    从 文中我们可以看出,PDE已经为从product文件构建RCP应用做好了一切准备,我们所需要做的,就是搭建目录结构以及构建脚本。但是如果完全按照官方方案去做的话,只会使得构建更加复杂,更加不可自动化,那么,让我们跟随一个简单的例子来看一下如何完成自动构建吧(在下使用的是 Eclipse3.3,pde的版本号为3.3.0.v20070612,使用其他版本的朋友请自行修改):

    1. 下载RCP 3.3版本对应的Delta Pack并安装;

    2. 使用Hello RCP模版构建一个RCP工程。命名为hellorcp,创建到G:\eclipse\workspace\hellorcp;

    在这一步,有一个很关键的问题需要注意,我们先来看一下上文链接中build directory的结构:

         buildDirectory/ 
            plugins/ 
                pluginToBuildA 
                pluginToBuildB 
                    myProduct.product 
                ... 
           features/ 
                featureToBuild  

    要想成功build工程的话,那么工程就必须要放到/plugins/的目录结构下,不然pde是找不到工程的plugin id的!我努力了很长时间才无奈的认可了这个事实。

    如果我们不想把工程放到一个很复杂的目录结构下,或者对于既有的工程不想做这样的改动,那么就只好用到ant来拷贝了。我的做法是,在工程目录下,创建名为dist\plugins\hellorcp的目录,待一切就绪后,使用ant来把整个工程拷贝到这个目录下。

    3.  准备脚本

    在工程下,新建buildConfiguration目录,并把\plugins\org.eclipse.pde.build_3.3.0.v20070612\templates\headless-build下的 build.properties文件拷贝到此目录下,并修改如下设置项:

    1).product

    官方的说法是:the location of your product configuration file in the form "/ /path/to/.product",而我们的buildConfiguration目录和 product文件同处于一个目录下,所以只需要写上product文件的名字即可,如hellorcp.product。

    2).baseLocation

    官方的说法是:the location of an eclipse install containing all the pre-built features and plug-ins that your product requires in features/ and plugins/ subdirectories. The RCP delta pack (it is available from the eclipse download page) is mandatory as it includes the org.eclipse.platform.launchers feature which contains the launchers and root files necessary for a product. 我们要做的就是把RCP delta pack安装到Eclipse目录下,然后把base location指向Eclipse根目录即可,这里需要绝对路径。

    3).buildDirectory

    官方的说法是:the directory the build will take place in. Set this to the full path of the build directory created previously. 这里因为最后的目录指向是ant拷贝完成以后的路径,所以应当是G:\eclipse\workspace\hellorcp\dist

    4).configs—— list the configurations for which you want your product to be built. You can uncomment the configuration(s) provided (be careful of the line continuations).

    5).archivePrefix—— the name of the directory of your product once installed on disk. 如hellorcp

    以上为官方给出的配置项,而我们如果使用了1.5或1.6中的新功能的话,还需要到文件的最底部,找到javacSource和javacTarget两个选项,进行对应的修改。

    4. 准备ant脚本

    在工程目录下新建一个ant脚本,把下面的代码粘贴进去,运行,就可以到dist/I.TestBuild下面找构建后的产品了。


        <xml version="1.0"?> 
        <project name="project" default="rcpAutomatedBuild"> 
            <property name="eclipse.install" value="G:\eclipse" /> 
            <property name="project.dir" value="G:\eclipse\workspace\hellorcp" /> 
            <property name="dist.dir" value="${project.dir}\dist\plugins\hellorcp" /> 
            <target name="prepare"> 
               <mkdir dir="${dist.dir}" /> 
               <copy todir="${dist.dir}"> 
                   <fileset dir="${project.dir}" /> 
            </copy> 
            </target> 
            <target name="rcpAutomatedBuild" depends="prepare"> 
               <java classname="org.eclipse.core.launcher.Main" fork="true" failonerror="true"> 
                   <arg value="-application" /> 
                   <arg value="org.eclipse.ant.core.antRunner" /> 
                   <arg value="-buildfile" /> 
                   <arg value="${eclipse.install}\plugins\org.eclipse.pde.build_3.3.0.v20070612\scripts\productBuild\productBuild.xml" /> 
                   <arg value="-Dbuilder=${dist.dir}\buildConfiguration" /> 
                   <classpath> 
                      <pathelement location="${eclipse.install}\plugins\org.eclipse.equinox.launcher_1.0.0.v20070606.jar" />
                   </classpath> 
               </java> 
           </target> 
       </project> 

    构建后的产品是以zip形式存在的,我们还可以根据实际的需要,对build.properties进行更多的修改。

    上面的脚本还有一些缺陷,比如绝对位置的使用,但这是无法避免的了.......

    常见错误:使用ant build的时候,出现plugin:xxx找不到的错误,请检查buidConfiguration\build.properties中buildDirectory的配置项

  • 2008年第二次Beijing Open Party”春归”–已于3月1日顺利结束。

    在这里,请允许我代表活动组织者对赞助方、Topic贡献者、会场管理人员和所有参与者表示深深的感谢!

    本次参会人数共计六、七十人左右,所贡献的Topic也达到了13个之多,较之第一次活动均有大幅度提升。从现场气氛和朋友们的反馈来看,大家对Open Party的认可程度还是相当高的。我们希望,可以将它做成规律性的活动一直继续下去,让所有感兴趣的朋友都有机会来这里聆听他人的idea,或是与人交流自己的所思所得;积极活跃的开发者社区,必然会与我们的软件产业形成水涨船高之势。

    由于这还只是第二次活动,所以在取得了一定成果的同时,在组织形式等方面也暴露出了种种不足。大家可以加入http://groups.google.com/group/beijing-open-party/来提出你的宝贵意见,或者在本讨论组中拍砖:)我们会在今后的活动中一步步完善。

    根据周六的反馈,下次的活动形式会做如下的变化:

    1. 所有打算贡献Topic的朋友请务必将你的Topic标题,及不超过100字的内容简介在活动前发送至组织者邮箱,我们会在活动前在活动网站上公布,并在活动当前将其张贴或是抄写在会场边的墙壁上;
    2. 参会者请在签到以后,花上几分钟的时间看一下墙壁上的所有Topic简介,以保证在投票(举手或是画正字,待定)时心中有数;
    3. 我们也欢迎当场贡献Topic,但是这就要看你的拉票功力了^_^

    这些内容我们也会在下次活动前再次发送给大家,欢迎继续关注Beijing Open Party!

    此外,如果你在会场拍摄了照片或视频,亦或通过文字进行了总结,请不要忘记加上beijing-open-party和the-return-of-spring这两个Tag,将链接发送给我们,我们会在www.beijing-open-party.org上进行集中展示。也欢迎大家将活动照片放置到我们推荐的分享活动照片站点--好看簿