2007年6月12日星期二

搬家~~~~~~~~~~~~`

鉴于blogspot的不稳定性, 决定搬家到javaeye...........

2007年6月5日星期二

Class Object的class方法

运行下面的代码片段,我们可以看到,所有class方法的返回值都是一样的.

puts TT.class.object_id #-605661568
puts Array.class.object_id #-605661568
puts Object.class.object_id #-605661568
class Example
puts self.class.object_id #-605661568
end

由此可以得出一个结论,ruby中所有Class object(top level的main除外)的class方法返回的都是同一个Class Object, 也就是Class。 这和class初始化的过程有些关系,在Ruby里面,一个新的Class的创建过程同常是这样的:

rb_eval/rb_define_class
-> rb_define_class_id
-> rb_class_new
-> rb_class_boot

除了rb_eval在eval.rb,其余方法都在class.rb中。过程看似复杂(4步),其实主要的部分都在最后一步,也就是rb_class_boot中。我们来看一下,它的定义

VALUE
rb_class_boot(super)
VALUE super;
{
NEWOBJ(klass, struct RClass);
OBJSETUP(klass, rb_cClass, T_CLASS);

klass->super = super;
klass->iv_tbl = 0;
klass->m_tbl = 0; /* safe GC */
klass->m_tbl = st_init_numtable();

OBJ_INFECT(klass, super);
return (VALUE)klass;
}

可以看出来,在OBJSETUP中,(所有)新的class object的klass变量被设置为rb_cClass

OBJSETUP(klass, rb_cClass, T_CLASS);

#define OBJSETUP(obj,c,t) do {\
RBASIC(obj)->flags = (t);\
RBASIC(obj)->klass = (c);\
if (rb_safe_level() >= 3) FL_SET(obj, FL_TAINT);\
} while (0)

而rb_cClass正是ruby的三个基本类(Object, Module, Class)之一, 其初始化过程可以在object.c中找到

那么,根据ruby的这个特性,我们可以发现一个有意思的sleight,为所有的类添加类方法:
proc = lambda {|arg| puts "class method for all classes: #{arg}"}
Object.class.send :define_method, "methodA", proc
Array.methodA "test"

output: class method for all classes: test




2007年5月29日星期二

翻译,行为驱动开发(一)Behaviour Driven Development

英文原文:http://behaviour-driven.org/BehaviourDrivenDevelopment

行为驱动开发(BDD)衍生于测试驱动开发和验收测试计划,它将测试驱动开发与领域驱动设计这两种有效的开发方法更紧密联系在一起。通过 一个共通的词汇表(common vocabulary, 也称普遍语言),业务逻辑与技术之间的间隙得以弥合,使得我们可以将开发的重心放在交付具有较高优先级的,可验证的商业价值(business value,业务价值?)上。

它将一个基于三个核心原则的行为框架展现在我们面前:
1. 业务和技术应该使用一致的方法表达同一个系统
2. 任何系统都应该有明确并且可验证的商业价值(业务价值?)
3. 预先分析!设计与计划的效果会越来越差(起码是低于预期的)

(译者:以下几段的核心就是:有了BDD,沟通不再困难,广告?另,此段翻译有译者自添的部分,-_-)
实 际的开发中,开发者,测试者,分析人员,业务(business),以及经理这些角色,由于各自领域的不同,彼此之间常常是鸡同鸭讲,误会时有发生。 BDD依靠一个极为明确的词汇表将使这种误会降至最低 从而保证了这些不在同一层面的角色可以使用共通的语言。如果你熟悉领域驱动开发,那么你可以把BDD看作是软件开发中的"世界语"。
有一点要指出的是,BDD并非崭新的理论,而是脱胎于业已存在的实践。BDD致力于使沟通渠道通畅,基于此念,一个准确,易懂,生动,一致(无歧义?)的词汇表由此产生。

附,英文原文
Behaviour-Driven Development (BDD) is an evolution in the thinking behind TestDrivenDevelopment and AcceptanceTestDrivenPlanning.

It pulls together strands from TestDrivenDevelopment and DomainDrivenDesign into an integrated whole, making the relationship between these two powerful approaches to software development more evident.

It aims to help focus development on the delivery of prioritised(此处疑为prioritized), verifiable business value by providing a common vocabulary (also referred to as a UbiquitousLanguage) that spans the divide between Business and Technology.


It presents a framework of activity based on three core principles:

1. Business and Technology should refer to the same system in the same way

2. Any system should have an identified, verifiable value to the business

3. Up-front analysis, design and planning all have a diminishing return

BDD relies on the use of a very specific (and small) vocabulary to minimise miscommunication and to ensure that everyone – the business, developers, testers, analysts and managers – are not only on the same page but using the same words.

For people familiar with the concept of DomainDrivenDesign, you could consider BDD to be a UbiquitousLanguage for software development.

It must be stressed that BDD is a rephrasing of existing good practice, it is not a radically new departure. Its aim is to bring together existing, well-established techniques under a common banner and with a consistent and unambiguous terminology. BDD is very much focussed on “Getting the words right” and this focus is intended to produce a vocabulary that is accurate, accessible, descriptive and consistent.
(删除废话一句)


In fact “Getting the words right” was the starting point for the development of BDD, and is still very much at its core, but the power of getting the words right has led to some insights and extrapolations that have helped us to better understand our approach and to extend it.
本段暂时忽略

2007年5月1日星期二

中国现代茶具与功能

转载自 http://www.teaw.com/release/624.html
主泡器
 · 茶壶 茶壶为主要的泡茶容器,一般以陶壶为主,此外尚有瓷壶、 石壶等。上等的茶,强调的是色香味俱全,喉韵甘润且耐泡;而一把好茶壶不仅外观要美雅、质地要匀滑,最重要的是要实用。空有好茶,没有好壶来泡,无法将茶的精华展现出来;空有好壶没有好茶,总叫人有美中不足的感觉。一个好茶壶应具备之条件有:
1. 壶嘴的出水要流畅,不淋滚茶汁,不溅水花。
2. 壶盖与壶身要密合,水壶口与出水的嘴要在同一水平面上。壶身宜浅不宜深,壶盖宜紧不宜松。 3. 无泥味、杂味。
4. 能适应冷热急遽之变化,不渗漏,不易破裂。
5. 质地能配合所冲泡茶叶之种类,将茶之特色发挥得淋漓尽致。
6. 方便置入茶叶,容水量足够。
7. 泡后茶汤能够保温,不会散热太快,能让茶叶成份在短时间内合宜浸出。

 · 茶船 用来放置茶壶的容器,茶壶里 塞入茶叶,冲入沸开水,倒入茶船后,再由茶壶上方淋沸水以温壶。淋浇的沸水也可以用来洗茶杯。又称茶池或壶承,其常用的功能大致为:
1. 盛热水烫杯。
2. 盛接壶中溢出的茶水。
3. 保温。

 · 茶海 又称茶盅或公道杯。茶壶内之茶汤浸泡至适当浓度后,茶汤倒至茶海,再分倒于各小茶杯内,以求茶汤浓度之均匀。亦可于茶海上覆一滤网,以滤去茶渣、茶末。没有专用的茶海时,也可以用茶壶充当。其大致功用为:
1. 盛放泡好之茶汤,再分倒各 杯,使各杯茶汤浓度相若。
2. 沉淀茶渣。

 · 茶杯 茶杯的种类、大小应有尽有。喝不同的茶用不同的茶杯。近年来更流行边喝茶边闻茶香的闻香杯。根据茶壶的形状、色择,选择适当的茶杯,搭配起来也颇具美感。为便于欣赏茶汤颜色,及容易清洗,杯子内面最好上釉,而且是白色或浅色。对杯子的要求,最好能做到「握」、「拿」舒服,「就口」舒适,「入口」顺畅。

 · 盖碗 或称盖杯,分为茶碗、碗盖、托碟三部份,置茶三公克于碗内,冲水约150 度C,加盖五~六分钟后饮用。以此法泡茶,通常喝上一泡已足,至多再加冲一次。

 · 茶盘 用以承放茶杯或其它茶具的盘子,以盛接泡茶过程中流出或倒掉之茶水。也可以用作摆放茶杯的盘子,茶盘有塑料制品、不锈钢制品,形状有圆形、长方形等多种。

茶则 茶则为盛茶入壶之用具,一般为竹制。

 · 茶漏 茶漏则于置茶时 放在壶口上,以导茶入壶,防止茶叶掉落壶外。

 · 茶匙 又称「茶扒 」,形状像汤匙所以称茶匙,其主要用途是挖取泡过的茶壶内茶叶,茶叶冲泡过后,往往会紧紧塞满茶壶,加上一般茶壶的口都不大,用手挖出茶叶既不方便也不卫生,故皆使用茶匙。

 · 茶荷 茶荷的功用与茶则、茶漏类似,皆为置茶的用具,但茶荷更兼具赏茶功能。主要用途是将茶叶由茶罐移至茶壶。主要有竹制品,既实用又可当艺术品,一举两得。没有茶荷时可用质地较硬的厚纸板折成茶荷形状使用之。

 · 茶挟 又称「茶筷 」,茶挟功用与茶匙相同,可将茶渣从壶中挟出。也常有人拿它来挟着茶杯洗杯,防烫又卫生。

 · 茶巾 又称为「茶布 」,茶巾的主要功用是干壶,于酌茶之前将茶壶或茶海底部衔留 的杂水擦干,亦可擦拭滴落桌面之茶水。

 · 茶针 茶针的功用是疏通茶壶的内网(蜂巢),以保持水流畅通。

 · 煮水器 泡茶的煮水器在古代用风炉,目前较常见者为酒精灯及电壶 ,此外尚有用瓦斯炉及电子开水机,我用电炉和陶壶。

 · 茶叶罐 储存茶叶的罐子,必须无杂味、能密封且不透光,其材料有马口铁、不锈钢、锡合金及陶瓷...等。

2007年4月26日星期四

想变得傻一点

世界上有一种开心是永远买不来的,它要求你比较年轻,而且比较傻。可惜人老了以后固然不能再年轻,看过很多事情以后,再想变得傻一点也比较困难。
所以那种开心,只有一度。

若干年后回首往事,看到这篇涂鸦不知作何感想。

2007年4月4日星期三

感受IDE (五)Java续

上一次提到Java IDEs的时候落下了一个很重要的,JCreator.
到目前为止我从没有用JCreator写过一个工程,但是它却是不可或缺的开发利器,为什么呢。就是它强大的Java Doc浏览功能,只要经过简单的配置(指定目录)就可以使用它强大的doc搜索浏览功能了。最新版的 JCreator 4.00 (我使用的是LE版本),界面比以前更简洁实用。另外,由于是native language实现的速度比流行的其他三个IDE快了不少。

2007年3月8日星期四

Good News, xruby 0.1.3 release, better performance, partly 300% improvement

The same test 1 month ago:
$ java -jar xruby-0.1.0.jar test.rb
832040
4.483999967575073


Now, in 0.1.3 release
C:\code\xruby>java -jar xruby-0.1.3.jar test.rb
832040
1.4219999313354492

Cool ~~~

2007年2月6日星期二

感受IDE (四) Python/Ruby/Perl IDE

时隔1年多,机器的内存也从2G升到了4G, 想再写点

Ruby/Python最好的商业IDE个人认为是ActiveState, 漂亮的界面,强大的调试工具,4.0更是可以直接调试Rails的代码,除了慢了
没有别的缺点了。可惜要钱的 ... ...

Eric 4
好东西,我的最爱。最近,还特意为她写了安装指南 。除了不能调试rails的程序什么都很完美。(偶尔会在debug上出些小为题,瑕不掩瑜 ^_^),同时支持Python(也很完美)


Rdebug
这个不是IDE但是,她应该是当世最好的ruby debugger, me调试rails应用代码全靠他了

Mondrian Ruby IDE
不算强大,但是有个很好的debug实现,正是基于rdebug的。因此也可以用来调试rails应用,就是在linux下面安装费了些劲。

感受IDE (三) Java IDE

写于2005年11月17日,从msn space搬过来



Netbeans:
这是我用第一个Java IDE,那时候用的是Forte Community Edition,因为是用swing写的,运行效率一直很是问题,但是在swing界面设计和Java bean书写,以及javadoc文档编写方面用起来很顺手,到了Netbeans 4.0之后效率比以前有了显著的提高,而且掘弃Mount Driver,引入了Project的观念,项目配置也比以前灵活了许多,大概是借鉴了Eclipse的部分特性。
另外,用Netbeans作基于Tomcat的web应用开发也是一件很愉快的事情。5.0开始支持包括JBoss, Weblogic在内的J2EE服务器,很值得期待。

IntelliJ IDEA
这个IDE是我用过的最好的IDE,就像他宣传的那样Develop with pleasure,用IntelliJ开发东西真的是一种享受,插件也要比Netbeans丰富的多,而且大多是免费的。当然,IntelliJ是商业IDE。

Eclipse
尽管有很多人喜欢用,插件极多,其中包括最好的Hibernate和Spring插件。除此以外,在面对较大的工程时,其速度之慢让人难以接受(公司的机器用的是2G内存),此时,这个东西显得一无是处。用我们在SC的同事的话,There is no good free thing.
Borland JBuilder
看到第一眼就不想再用下去的东西。

感受IDE (二)C/C++ 续 (从msn space搬家)

写于2005年11月17日,从msn space搬过来

居然这个时候还没睡着,再写两句吧,已经1点半了。

KDeveloper

老实说,KDE 3.0之前,KWriter远比这个好用。除非要用到Qt,否则打死我也不用这个鬼东西

Vi

改Linux 内核代码的最佳选择,Cool ~~~

Emac

很崇敬的说,可惜已经有了vi,这个就没时间碰了... ...

(完)

Fin

感受IDE (一)C/C++

写于2005年11月17日,从msn space搬过来

现在是凌晨,仍然没有睡意,涂鸦几笔。谈谈这几年用过的IDE:

Turbo C

既然谈到了C的IDE,那么这个重量级的开发工具不能不提,虽然只有几个mb,但该有的功能一样不缺。最值得称道的就是她的调试功能,灵敏,快捷,方便。比起现在视窗界面下使用的IDE,丝毫不逊色。用这个东西我写出了第一个上了一百行的程序,贪吃蛇,短短120行代码,那时的喜悦回想起来,仍令人兴奋。

可惜,代码丢掉了。

Borland C++ Builder (X用得最多)

ICPC暑期集训的时候,曾用过一段时间。感觉,实在不爽,没有自动储存功能,又经常莫名其妙死掉。最后,还是重新投靠了Turbo C。 那时,妖道老是要提醒我别忘了存盘。 怀念大学的时光,怀念以前的队友,怀念在zju上 AC PE 的兴奋。

后来版本变成了X,变的完全不同了,采用了Java技术,不过已经没时间仔细体验了。

Dev C++

最近还用过这个东西,确切地说是6小时以前。是碰巧知道这个东西的,某天(可能是暑假 )和妖道出去散步的时候在书店看到一本书,好像是C Primer Plus, 书后提及了这个东东,回去就瞄了一眼。有代码的highlight, 有基本的代码视图(后来才发现反应速度不灵敏),又很小,就用上了。但很快就发现有致命的弱点,调试功能行同虚设( What the hell is that, it sucks),要不是因为它用的是和浙大服务器一样的gcc,我早就被人鄙视死了。自从出到 4.9.2 beta就没再有过更新,是不是挂掉了?

VC 6.0

VC 6.0, 可能有人会想到MFC这东西,可惜那不是我用的东西,类库的设计有些混乱。最早做Penbex的时候用过两个月,Penbex把模拟器建在了上面,个人认为那个时代视窗C++ IDE里面,调试功能最好的就是她了。后来,软件大试验做数据库的时候,再次让我和屠哥验证了这点,当然不包括他的STL实现,比较糟糕。

Comparison: XRuby, JRuby, Ruby, and Ruby with YARV

def fibonacci(n)

return n if n == 1 or n == 0

fibonacci(n - 1) + fibonacci(n - 2)

end

pre_time = Time.new.to_f

puts fibonacci(30)

puts Time.new.to_f - pre_time

azure@azure-windows /c/code/xruby

$ java -jar xruby-0.1.0.jar test.rb

832040

4.483999967575073

In New Runtime: around 2 seconds

Latest stable 1.8.5-p12

$ ./ruby.exe test.rb

832040

2.6560001373291

Older revision: 1.8.5 (build-2006-8-25), onclick install edition for win

$ ruby test.rb

832040

3.31200003623962

Lastest snapshot, 1.9.0 bundled with YARC

$ ./ruby.exe test.rb

832040

0.344000101089478

JRuby 0.9.2

C:\code\jruby-0.9.2\bin>jruby.bat test.rb

832040

19.0939998626709

2007年1月29日星期一

Add a screen shot for Eric 4


Screen shot for Eric 4 snapshot 20061112

How to install Eric 4 in windows

How to install Eric 4 in windows

Eric is a full featured Python and Ruby editor and IDE, written in python. (:D I copy this introduction from the home page of Eric 4). If you want to know something more, please access this site for more information.

Environment

. Windows XP sp2

. Python 2.5

. MinGw (the one bundled with dev-cpp)

1. Install SIP for python (install python2.4+ previously), you could find it in "riverbank"

Assume that you've installed mingw (I installed dev-cpp 4.9.2)

1.1 Config: python configure.py -p win32-g++

1.2 Install:

. make

. make install

2. Install Qt 4.2.2 open source edition in windows

Here's a link to that: http://ftp.iasi.roedu.net/mirrors/ftp.trolltech.com/qt/source/qt-win-opensource-4.2.2-mingw.exe

3. Install PyQt 4.1 for windows(PyQt-win-gpl-4.1), Note: Please make sure qmake could be found on your PATH

Main page for PyQt: http://www.riverbankcomputing.co.uk/pyqt/index.php

. python configure.py

. make (this step may cost a long time, more that 10 mins)

. make install

4. Install QScintilla (I installed QScintilla-1.71-gpl-2-snapshot-20061122);

Refer this site http://www.riverbankcomputing.co.uk/qscintilla/index.php for more information

- Qt4 install

. cd Qt4

. qmake qscintilla.pro

. make

. make install

. copy qscintilla2.dll (it's supposed to be under ${QTDIR}/lib) to ${QTDIR}/bin

- Python install

. cd python

. python configure.py

. make

. make install

Baby here we are !! Install Eric 4

. python install.py

The latest snapshot doesn't work I've no idea. Sorry.

eric4-snapshot-20061112