• 2006-07-29

    编译Ruby

    安装Cygwin
    编译Ruby,首先要选择编译环境。如果是Linux环境,通常已经包含了必要的工具,而我的机器是Windows环境,正如我在前面的blog中提到过的,Cygwin将对用户友好的Windows和对开发者友好的Unix很好的结合在一起,所以,Cygwin成为了这次编译Ruby活动的首选。

    1 到Cygwin的网站上下载安装程序,不要为setup.exe只有几百K而窃喜,因为它只是一个引导程序,真正的程序在后面。
    2 运行setup.exe,选择Downloading Without Installing。如果网速足够快的话,可以考虑Install from Internet。
    3 略过俗套的目录选择,选择一个自己顺眼的下载站点。
    4 选择需要的软件,如果想全部选择,点击All边上的小圈,我们可以看到后面内容的变化。有位实心的兄弟,为了全部安装,居然一项一项点选,佩服其耐性。我安装的成果是,全部下载需要几百M的空间,安装需要上G。如果不想全选,那就自便吧!
    5 最好满足依赖关系,否则后果自负。
    6 准备好了,漫长的下载过程开始了。如果运气好,一觉醒来,我们可以看到下载完成的提示。
    7 再次运行setup.exe,选择Install from Local Directory,剩下的就是人所共知的本地安装了。

    编译Ruby
    1 到Ruby的网站上,下载Ruby的源码,我下载的是最新的1.8.4的源码
    2 进到Cygwin的Shell中,解压缩源码:
    tar -xvf ruby-1.8.4.tar.gz
    3 进到ruby的目录中,有兴趣的话可以拜读一下README。
    4 ./configure,进行基本的配置,生成makefile
    5 make,真正的编译过程,正常的话,会生成一个Ruby的可执行文件。
    6 有兴趣的话,还可以验证一下生成的结果
    make test

    一个小问题
    我们肯定对新鲜出炉的Ruby有着无比浓厚的兴趣,于是写了一个Ruby版的“Hello,world”:
    puts "Hello, world!"

    然后满怀欣喜的运行这个程序,期待着Ruby的问候:
    ./ruby hello.rb

    可能结果会很不幸,我们得到了一个出乎我们意料的结果:
    ./ruby: no such file to load -- ubygems (LoadError)

    这个问题来自Ruby的环境变量RUBYOPT,它是用来记录附加命令行参数,也就是说,对于常用的参数,只要把它设置在RUBYOPT中,就不必每次输入了。究竟是怎样的参数,阻挡了我们使用Ruby的脚步呢?echo一下。
    echo $RUBYOPT
    结果是:-rubygems

    Rubygems是一个类似于RPM的包管理器,不过,在这里怎么会成了绊脚石。看一下帮助就知道了,原来-r表示需要在执行脚本之前加载一个特定的库,于是,这个参数就被解释成了需要加载ubygems这个库,没有这个库当然就会加载失败了。最简单的解决办法就是抛弃它,在BASH中,我们可以这么做:
    export RUBYOPT=

    这是一个很简单的问题,可我解决的过程中却走了好大弯路,居然是在顺着源码追进去很远的情况下才最终发现了问题所在。记得有问题先搜索!类似的问题在Windows上也有,如果你用的Ruby是One-Click的版本。不过,在那个版本中,它通过在Ruby的查找路径上添加了一个ubygems.rb的文件屏蔽了这个问题。

    好了,问题解决了,就让新鲜的Ruby和我们问好吧!
    ./ruby hello.rb
    Hello,world!

  • 2006-07-29

    回到轨道上

    随着机器和网络的就绪,日常生活也进入到我期望的状态中,我发现,我已经不能离开计算机了,哪怕是只有几天时间,我都会呈现出一种抓狂的状态。而在我的眼中,没有网络的计算机是没有生命力的,所以,我也离不开网络了。而网络的作用之一就是可以和好朋友们在一起交流,即便是天各一方。

    有一段时间没联系的小师妹给我发了条短信,于是,两个人约到了QQ上。出乎我意料的是她首先告诉我的是她的blog,为了不辜负人家的一片好心,索性一口气把她所有的blog拜读了一番。虽然我每天都会读许多blog,但是已经有很长时间没有如此细细品位一个人的blog了。不曾发现原来她如此有文采,她的文字给人一种很清爽的感觉。

    可能正如她自己所说的,写之前从来没有想过自己这么能写,大家都一样,做了两年半的blogger,我也觉得自己较之从前,在思维和表达能力上都有了许多的提高。曾向身边的一些朋友推荐blog,拒绝的借口大抵相同,没文采。写blog本来应该是为自己而写的,写什么、写得如何与别人有何相干,大不了做自己的心情日记,干嘛非要有文采,指望与徐博客比拼访问量吗?有一段时间,我也曾困惑于在blog上写什么东西,因为有一些朋友期望我在blog上看到更多所谓技术的东西,完全的庸人自扰,为什么我的blog就不能写些随性的东西。技术人,首先是人。blogger应该有blog的自由。

    好的文字是一面镜子,阅读的时候让人思索。小师妹在毕业三年之后,想去读书了,于是开始复习考研。她是一个之前的路一直走得很顺的女孩,几乎不知道什么叫忧愁,这次考研也是受到了一些刺激的结果,也好,否则真的就平平淡淡走下去了,这样,至少可以让生活更丰富一些,至于结果,倒在其次了。读着她的一篇篇blog,看着她心情的逐步调整,一直到最近进入到学习的状态中,刚好和自己一段时间内的心态相似。

    到北京之前的一段时间里,遇到了种种不如意,我整个人处于一种迷失的状态中,甚至自己都会觉得讨厌自己,因为我不喜欢那种状态。与家人朋友在一起,我忽然发现,原来他们对我都是寄以很高的期望,在他们心中,我应该比现在做得更好。在北京的一个月时间里,心情平复了许多,自我调整也让自己逐渐向着自己预期的方向在走,慢慢驶回原本属于自己的轨道。我相信我可以做得更好,做自己喜欢的事情,让自己快乐!
  • 2006-07-25

    体验Tex

    如果一个软件拥有近三十年的生命,无论它是否依旧站在风口浪尖,它必然拥有自己的独到之处。在大多数人的心目中,Word是字处理和排版的代名词,TeX对普通用户来说,如果不是闻所未闻,可能也是敬而远之。但在许多专业人士心中,TeX远要比Word优秀,所以,许多专业论文投稿都采用了TeX。

    我很早就听说,Donald Knuth因为自己那套《计算机程序设计艺术》排版效果不好,于是打造出TeX。但是和大多数人一样,因为没有实际用到它的地方,所以也从未走近TeX。不过,现在有机会了。因为我们在这里的文档需要用TeX来写。

    用了才知道,原来TeX也并不像自己想象的那样复杂,而且给我的感觉是,它非常适合程序员。

    我们使用的是CTeX,CTeX的套装中包含基本TeX的软件、几个文件的阅读器(ps、dvi等格式)、帮助文档和一个“开发环境”。没错,是开发环境,我说过,它适合程序员。

    来个小例子:

    \documentclass{article}
    \begin{document}
    Small is beautiful.
    \end{document}

    这就是一个TeX文档,来自帮助文档中那份不太简短的介绍。用TeX的命令对它进行处理,就可以生成不同格式的文档,在那份不太简短的介绍中,有着详尽的描述,有兴趣的可以试试。事实上,我们可以省去自己敲命令的过程,因为开发环境的存在。在那个开发环境中编写TeX文件,就像在IDE中编写程序一样,而且集成了TeX的各种命令也省去了新手记忆命令的过程。

    我们可以把TeX理解程序设计语言,TeX文档就是这种语言的源文件,只不过,生成的目标是不同格式的文档而已。在TeX文件中,我们可以使用各种各样的命令,就像普通程序设计语言中的函数一样,如果觉得不够,我们可以编写自己的命令,甚至可以把命令打包发布,供其他人使用,所以,一般在TeX文件的开头我们会看到\usepackage,是不是想起了Java的import,C的include……

    从中我们不难体会到TeX设计上的精妙。首先,它分离了文档内容和具体格式,一旦某种文档格式退出了历史的舞台,只要编写一个新的后端,它就可以产生出新的文档格式。其次,它不是设计了所有的东西,而只是一个核心,其它的内容只是作为外围的包,这样TeX就可以不断扩展,拥有新的功能。现在广泛运用LaTeX就是在TeX的基础上加了许多扩展包。一个良好的扩展机制对于一个可以跨越历史的软件来说,非常重要。

    如果文档需要用到数学公式,TeX的优势尽显无疑,用公式编辑器编写公式简直是一场恶梦,不好用不说,排版效果简直令人作呕。不过,客观的说,对于编写文档的普通用户来说,TeX还是有些复杂。对于我这个习惯了编译运行的程序员来说,这个过程感觉还不错。

    突然冒出一个念头,如果Donald Knuth今天设计TeX,会不会把所有“\”都换成“<>”,这样就很像XML了,呵呵!

  • 2006-07-24

    胡侃的周末

    周日下午,founder_chen打电话给我,让我帮忙搬家,刚好在外面有事,帮不上忙,于是只能以抱歉回复。接近晚饭的时候,founder_chen再次打来电话,家已经搬完了,他找了另外一个朋友帮忙,让我过去一起吃饭。不干活,也能吃饭,这就是朋友的好处。

    帮founder_chen搬家的是一个来自SUN的人,坐在一起一聊才知道自己面前的原来是一个JDK的开发者。不管怎么说,我也是专注过几年Java的人,稍微可惜的是,我可能没太用过他开发的部分,因为来得比较晚,他在Java SE 5中只是修正一些bug,而真正的全情投入是尚未正式出炉的Mustang

    一群做技术的人很容易找到一些共同的话题,于是,我们三个人的这顿饭就成了天南海北的胡侃。以下观点我已无力分清到底哪句出自谁的口了,就算是共同所有吧!

    最近比较火的一个话题是关于百度的裁员。在大家心目中,百度原来的形象是很正面的,不过,这次的事件不管官方说法如何,至少很大程度上毁坏了百度在很多人心目中的形象,尤其是技术人。至少百度不再像从前那样吸引人了,这个损失恐怕是百度即便花钱也无法挽回的。有一个提法很好,百度终于露出了中国公司的本色。

    谈到自己的开发环境,话题扯到了Linux上。作为一个桌面Linux,大家对Ubuntu的评价都很不错。刚好前一阶段用过一段时间Ubuntu,它是我个人寄予评价最高的一个Linux发行版。这个发行版的创始人做了一件很了不起的事情,对于前几年的Linux桌面混战估计还记忆犹新,记得自己那时候一段时间换一个Linux,结果Ubuntu一出,在很短时间内,大有扫荡的趋势。

    据说,Ubuntu和Debian之间有矛盾,原因是Ubuntu没有把一些东西反馈回Debian,使得Debian在发展上受到了影响。谈及这个话题,让人不禁想到了Java,其实SUN拥有同样的担心,怕Java一旦开源,控制不好就会四分五裂,这是SUN所不愿意看到的。

    多核日益成为成为一个大势所趋的东西,散热的成本和物理的极限使单核CPU基本上走到了尽头。SUN的硬件有一些也同样采用了多核技术,并行技术在单机上也会大有作为。前不久在blog提到过,Java之父James Gosling对多核问题有些理解也存在问题,看来在JDK未来在这方面还是大有文章可做的。

    SUN的朋友为我们介绍了SUN的一些开发情况。JDK在开发控制方面是相当严格的,有专门的人负责接口,任何对接口的改动都需要审批,可以理解,毕竟这是Java世界的基石。听说SUN里面有不少不错内部工具,可惜,它们没有开放出来。

    胡侃的好处是涨见识。

  • 初到新的办公环境,一切都需要小心翼翼,其中包括不要用那些不该用的软件。不过,对习惯了四处搜索的我来说,这也不是什么难事。下面就列最近常用的一些软件。

    浏览器:FirefoxMathon
    开始接触Firefox的时候,它还年轻,还不到1.0。道听途说了它的优点,禁不住诱惑,就这样,一直用到现在。Firefox的扩展很多,刚开始的时候,我也不停的尝试各种扩展,最后发现对我来说必需的只有几个:Super DragAndGo,从Maxthon带来的习惯,点住一个连接,甩开,链接就打开了,原来的版本到了1.5不支持,只要修改一下其中的配置文件就可以了;Add Bookmark Here,加书签可以直接分类;FlashGot,下载用。

    Firefox之前的浏览情人是Maxthon。喜欢它,是因为IE的不断崩溃,那时候它叫MyIE2。现在与它藕断丝连实在是因为有些网站用Firefox打开会有问题。

    Shell:Cygwin
    从来没和Cygwin走过这么近,现在它已经成了我日常的伙伴。我看到过一种说法,Cygwin将对用户友好的Windows和对开发者友好的Unix很好的结合在一起。使用XWin连接远程桌面,也可以让我们在Windows下享受Unix/Linux的GUI环境。这有一篇文章教你怎么做,《Connect to remote Unix desktops with Cygwin》。这不,我就偶尔打开Linux桌面,打一下其中的小游戏。^_^

    SSH:Putty
    现在的工作环境连接服务器需要SSH,本来我可以使用Cygwin来连接。但每次都要额外打开一个Cygwin窗口,再敲ssh。我闲麻烦,按照一个同事的说法,懒到一定程度了。于是,我想起了一个几年前的伙伴——Putty,一个小巧的终端,甚至连安装都不需要。

    CVS客户端:WinCvsTortoiseCVS
    GUI的CVS客户端最大的优点当然是省去了敲键盘的运动量,WinCvs是我从前最常用的CVS客户端,但是懒到一定程度的我,居然认为打开个窗口都是浪费,于是TorotiseCVS进入了我的系统。现在直接在目录下就可以完成各种各样的CVS操作了。

    翻译软件:StarDict
    对我来说,看英文的东西,没有翻译软件是难以想像的。刚好StarDict最近发布了新版本,于是装上一个尝尝,感觉还不错,虽然采用GTK+作为底层的它看上去不是那么好看。它的字典和程序是分开的,可以根据需要选择适合的字典。我觉得不够好的一点是,它不支持在Adobe Reader直接取词。

    FTP:FileZilla
    曾经Sourceforge的Project of the Month,所以,我知道它。尝试之后,就彻底的投入了它的怀抱,我的要求没那么复杂,能够让我在本地和服务器之间传送文件,能够走SSH,这就够了。FileZilla完全满足需要,而且操作起来也是相当简单。

    先到这里,以后有机会再继续这个话题。这是我身边的软件,你的呢?