原来测试驱动开发是需要练习的

10月 23rd, 2008

题目很SB,但是确实是感想

昨天看了老外写的一篇文章。他们使用TDD做了一个项目,然后在项目里面获得了一些经验。突然明白原来TDD是实践的结果,而不是理论的结果。前一段时间不停的在查书,想知道从哪里入手开始TDD,这些都是错误的。暂时的想法是一切的设计都来自于经验,包括TDD开始的顺序和粒度。

看来开发方法一定要使走了弯路才能明白吧,就像设计模式。没有走过弯路的人是很难理解设计模式的用处的。而顺着Menu去记忆十几个设计模式导致的结果必然是接下来的一个项目设计过度,恰好违反了设计模式的初衷。

最近找一个合适的小项目试验TDD~

【转】rails里面reder和redirect_to的区别

10月 7th, 2008

render和redirect的区别在于:
render 没有执行相对应的controller方法!而redirect_to 则重新执行controller方法,也就是说redirect_to 让浏览器去创建一个新的请求。
render 其参数是有效的,而redirect_to 其参数是重新请求的。

南郭:下面这段代码很有代表性。

def index
list=Product.find[...];
render :action => ‘list’
end

简单说,其实index这个action跟list的作用是一样的。所以index直接调用list的模板。不需要重新执行list这个action

而redirect_to的话就相当于一个简单的跳转了,会产生一次30X的http指令,这样目标的action会执行。如果上面这个地方换成redirect的话估计list这个action就需要重新在action代码里面获得list了,那么这个index的action应该直接写成

def index
redirect :action => 'list'
end

但是这样的话,客户端的相应其实是慢了。因为你进到了index以后马上刷新了一下再到了list。而结果也是看到了list结尾的url

不知道说清楚了没有。。。

在新居写的流水账

09月 24th, 2008

差不多一个星期的折腾,现在算是有了新的小窝,村里面比我想象的好很多了,现在还不太清楚冬天的情况,反正勤劳勇敢的中国人民会想出办法解决滴~

周末去宜家买来的新台灯比较满意,恩,基本符合我的要求

晚上躲在自己的小空间里面玩游戏看书很是惬意啊,今天看到linkin park的广告,刚刚听了一下,很不错,一种感觉,很适合现在的心情吧

最近在看的书:Agile Web Development with Rails 3nd Edition Beta

看到rails里面的一些设置,觉得有点好笑,有点感动。rails的作者必然是从java或者c#阵营转到ruby阵营的,所以针对现在使用的编译语言和既有框架的问题做了很多修正,甚至看出来是刻意的处理。比如今晚感觉明显的一个地方,在对数据库做update操作的时候,因为多用户操作存在脏读,导致了竞争条件问题。rails里面可以通过一个版本号的列来处理这个问题,猜测他内部使用了一个事务,先查再改,被他自己成为乐观锁(optimistic lock),最近用到一个地方可能也需要这样处理,呵呵

cheer up~

千里赴宴记

09月 1st, 2008

张凯那小子去集训了, 现在已经在开往呼市的K车上面

和鞠两个人做动车闪速回家,一起吃了顿饭,算是送行吧。其实不在因为工作,gabei(音)工作的时候我们也没有这样的感觉,不是因为感情,而是因为当你知道如果想见面的时候随时可以见的话,其实没有离别的感觉。张凯这次过去估计得半年没得出来,我们能做的估计也就是帮他查查资料,寄点补给品了吧

呃。。。。。一顿饭吃到4点,回家跟老爸对饮两杯,又匆匆赶上了回京的车,真的感谢动车的速度

项目开始,心得收获

08月 29th, 2008
  1. 尊重每位成员的个性,配合会更默契.合作就是磨平棱角的过程
  2. VS确实不适合用SVN管理.项目文件和解决方案文件很难解决conficts
  3. 项目中存在成员代码间相互依赖是很难处理的问题,因为这将导致大家一起等待.尽量绕开这样的问题
  4. NHibernate是一坨屎,Spring.Net是两坨.注意,特指以上两个软件,没说java的版本

[转]你有没有“杀人”的天赋?

08月 19th, 2008

“杀人游戏”是来自硅谷的一款推理游戏,由于其高度的参与性和复杂的逻辑内涵已然风靡了许久。不要以为它仅仅是游戏,从心理学角度诠释,它纯粹是人格特质的对抗。参与者不但可以清晰的看到自身的人格特点,还可以通过观察游戏进程和结局来洞悉别人的人际模式。

“杀人”里面的每一个角色都是需要天赋的,而出色的掌握“杀人”中的角色更是自我完善的一次实践。

一:杀手天赋:

杀手相互认识但人数少,在PK阶段的投票中不占优势。所以优秀的杀手,必须能及时觉察出最有威胁的好人,首先将他们清洗掉;同时在警察与百姓的包围中很好的自我保护。

天赋1:掩示性与心理稳定性

杀手情绪的细微波动,杀手发言的逻辑变化,都会暴露在百姓和警察审视之下。杀手是否具有很高的掩饰性,是否能够不动声色、镇定冷静,将直接关系到生死存亡。

掩饰性需要心理稳定性来保障。任何人抽到“杀手”牌,总免不了一阵激动;一旦被怀疑总会有些心虚和紧张。如果没有很强的心理稳定性,杀手难免会露出马脚。

天赋2:人际影响力和语言能力

杀手要善于利用百姓,因为百姓并不知道谁是警察、谁是杀手。因此,杀手发言时只要拉拢或误导了百姓,就可以在投票过程中保存自我,甚至害死警察。

杀手要具有很强的语言感染力,能用对自己有利的事实来误导百姓,迷惑警察。但是并非一味的慷慨激昂就是明智,不要忘记一旦成为众人注目的焦点,则警察在辨别阶段很可能首先向法官询问自己的身份。

杀手要充分利用发言过程来扩大自己的人际影响力。比如,一旦好人被怀疑,不妨为他辩护辩护。当获得大多数人好感的时候,杀手在投票中就安然无恙了。

天赋3:较低的紧张性和忧虑性

具有焦虑倾向的人做不了好杀手。好杀手必须是个乐天派,即使情况危机万分也要轻松淡定。皱起的眉头和鬓角的汗珠,都会让杀手面临的情况更加糟糕。

当人数越来越少,局势越来越清晰的时候,杀手一定要表现得像往常一样,不要让人家看出自己过分关注事态的发展。即使同伴已经一一就义,杀手也要坚信:三个杀手容易找,一个杀手就未必了。

谁是天生“杀人狂”?

表演欲强,标榜智慧,自命不凡,精力充沛而又渴求竞争的人。

这种人大多在智商上很有信心,喜欢在多变的人际角色中自我挑战,很可能具有双重人格。也许会有现实中的人际挫折经历,需要在模拟人际对抗中重新获得信心。

对于骨灰级“杀人狂”来说,他们充沛的精力很可能是在现实生活中“剩”下的。

二:警察天赋

警察不但相互认识,而且他们可以在“睁眼”时向法官询问任何一个参与者是不是杀手。尽管警察有可能准确高效的发现杀手,但是警察要想最终杀死杀手,却不得不依赖百姓在PK阶段的投票。

天赋1:观察和逻辑判断能力

警察要尽量高效运用向法官求证的特权,因为这特权每轮讨论只有一次。这首先要求警察详细观察以获得参考信息,比如谁在混淆大家的视线?谁又看似反对,实际却在配合这个人?

只有相互认识的杀手才会在发言阶段有配合。警察一旦发现发言内在逻辑性比较集中的那几个人,杀手就有苦头吃了。

天赋2:掩饰性

警察同样需要掩示自己,因为警察在黑夜里像百姓一样脆弱。

如果警察在发言中过于急切,让杀手觉察到威胁,那么就有可能成为杀手的优先狙击目标,导致自己功未成身先死。

言语上的掩示还不够,更重要的是逻辑上的掩示。因为警察同样相互认识,因此警察之间同样会相互配合,而这种配合同样有可能被杀手发觉。

天赋3:人际影响力

警察的人际影响力,是用来和杀手拔河的。

警察对付杀手,必须依赖百姓,没有百姓在投票中的配合,警察将对杀手无可奈何。杀手杀死警察有两种方式:暗杀和投票;而警察杀死杀手却只有投票这一种方式。从这个角度上看,人际影响力对警察更加重要。

天赋4:低情感性

警察要比杀手更冷血。因为警察要保证自己不被杀手利用,就不能是情感细腻的人。

杀手会广泛的寻求人际支持,会通过各种不起眼的小动作尝试感染每个人。情感细腻的人容易受到别人的影响。如果警察因为个人好感而努力维护某个人,最终却发现他居然是个杀手,那可就闹了大笑话。

天赋5:自我牺牲精神

当警察发觉自己已经在暴露边缘,有可能在下个夜晚就要捐躯的时候,要毫不犹豫的“跳井”——立刻在发言时公布自己已经从法官那里获得的准确情报:某某是好人,某某是杀手。

杀手最怕警察“跳井”,这种恐怖相当于驻伊美军面对伊斯兰人弹。虽然自我暴露的警察将肯定被杀,不过被曝光的杀手们也在劫难逃啦!

谁爱当“神探亨特”?

和“杀人狂”们一样,“神探”们同样标榜智慧而又渴求竞争。相对于杀手,他们没有那么丰富的表演欲,却拥有更多的探索欲望和进攻性,在潜意识中趋向维护规则与秩序,有充当“救世主”的主观动机。

有趣的是,他们在现实生活中有很大的比例是“好好先生”,请注意这与潜意识的矛盾。

三:百姓天赋

在杀人游戏里,百姓要想生存就必须尽力帮助警察。可难题就是:谁是警察?

天赋1:换位思维

懂得配合警察的百姓必须善于换位思维。他需要根据现场情况冷静的判断:警察会怎么做?杀手会怎么做?

好杀手会优先在投票中害死那些不太引人注意的人,因为他们留下的线索最少,杀起来最安全。而稚嫩的杀手在投票中喜欢跟风,既能隐藏自己,又能跟风投票害死好人。

当百姓同时面对警察和杀手的人际拉拢时,是否能准确的换位思维将决定自己会不会糊涂的站错队。

天赋2:果断和独立

百姓不知道任何人的真实身份,只能独立思考和抉择。而犹豫不决又是百姓的大忌,因为态度摇摆不定的人将招致怀疑。

百姓要想自保,就要果断的、坦率的说出自己的想法:谁可能是杀手;谁不会是杀手。而这些结论只能通过独立决策获得。

谁是“好市民”?

喜欢当百姓的玩家其实是相对成熟一群,也更加平和。对他们来说,游戏的趣味更多来自身临其境的旁观而非紧张的对抗。他们喜欢在从容参与的过程中体验,而不是在激烈的竞争求存中寻求刺激。

他们多数懒得在休闲时间继续伤脑筋,却更像是来看表演的,这份超脱才是真正的娱乐精神!

四:法官天赋

有人说,法官只是游戏的摆设罢了。也许是吧?但是这个摆设的学问可大了。

天赋1:幽默感

法官准确的知道每个人的真实身份。对于法官来说,每次游戏就是一次情境剧。无论是滑稽的还是精彩的,都需要法官这个唯一观众的幽默感才会变得有趣。

如果一个人缺乏足够的幽默感,不能在局外寂寞太久,杀人游戏就会变成索然无味的痛苦,那还是不要做法官了。

天赋2:心理耐受力

法官必须面无表情,语言简洁而没有暗示性。这种枯燥的操作会持续整个游戏过程,一个优秀的法官必须能够在冗长的重复操作中保持严谨的绝对中立。

这就要求一个法官具有强大的心理耐受力,不会因为参与者的荒唐或精明而有所反应,因为法官的任何一个细微的情绪变化或非标准应答都会左右参与者的选择。

谁是“包青天”?

能拥有先知先觉的操控感和隔岸观火的怡然,法官的游戏享受已经近似于上帝了。

“法官”发烧友大有其人,他们控制欲和窥视欲都很强,但性格却相对内向。如果说到老谋深算,也许这个人群才是最强的,因为其行为模式已经超越了通过对抗来自我证明,而是通过观察来洞悉人性。

不知道读者有没有看过罗丹的“思想者”——沉默的那位,才是思潮彭湃的。

结束语:

世界上没有完全相同的两片叶子,同样,世界上没有完全相同的两个人。每个人都是独一无二的,每个人都有自己不同的天赋,要发现自己的天赋,你必须要勇于实践和探索,在尝试中发现自我、认识自我、反思自我。如此才能扬长避短,进而获得成就。

杀人游戏,就提供了这样一个多变的、抽象的模拟人际“世界”。

Tips:“杀人”游戏规则

最佳游戏人数12—16人,另设法官一名。

道具:和人数相等的扑克牌。

示例:共13人,选1人做法官。由法官准备12张扑克牌。其中3张J,3张K,6张普通牌。法官将牌交大家抽取。抽到普通牌的为百姓,抽到J的为警察,抽到K的为杀手,不要让其他人知道自己的牌。

【杀人阶段】:

法官说:黑夜来临,大家闭眼。

大家都闭好眼睛。

法官说:杀手杀人。

抽到K的3个杀手睁开眼睛,互相认识一下,并由任意一位杀手示意法官,“杀”掉一位好人。
【辨别阶段】:

法官看清楚被“杀”者后说:“杀手闭眼,警察睁眼。”

抽到J牌的警察可以睁开眼睛,相互认识一下,并怀疑闭眼的某一位为杀手。同时用手势向法官询问判断是否正确。法官用手势回答。

法官说:“所有人闭眼,(稍后说)天亮了,大家睁眼。”

大家睁眼,法官宣布被“杀”者。大家聆听被“杀”者的遗言。被“杀”者可以指认自己认为是杀手的人,并陈述理由。遗言说罢,被“杀”者出局。法官主持剩下的人挨个陈述自己的意见。
【PK阶段】:

意见陈述完毕,会有几人被怀疑为杀手。被怀疑者可以为自己辩解,大家举手表决选出嫌疑最大的两人,并由此二人作最后的辩解。再次投票,“杀”掉票数最多的那个人。这个人如果是真正的凶手,不可再讲话,出局。这个人如不是杀手,可以发表遗言及指认新的怀疑对象,出局。

新的夜晚来到了,剩余的杀手继续“杀”人。

杀手杀光警察或百姓即获胜。警察和百姓的任务就是在杀手胜利前抓出所有的杀手。
来源: 雷明

呃,自己那么喜欢当杀手,但是性格仿佛更像他描述的平民。估计战术不一样,偶作为杀手喜欢胸有成竹的分析,然后一个个杀掉所有人,hiahiahiahia。杀一个,投一个,杀一个,投一个。。。。这样才是杀手的乐趣。

不过很久不玩了,老被人第一局干掉,玩的没激情,杀人游戏保证平衡性也是很重要的,估计将来的版本对规则会做修改吧

自己需要看的几本书

08月 18th, 2008
  1. 设计模式–真的很需要,因为自己走的弯路太多了
  2. Spring & Hibernate–这个没完没了地项目用了Spring和Hibernate这两个框架, 可能需要真的去了解它一下,而且要快。
  3. 需求管理–参与这个项目最大的感受,需求管理是门艺术,管理得好双赢,管理不好双赔
  4. ruby & rails的书,兴趣所至。根据某高手说的,要先干非必需的事情,再干必需的事情,这样可以把自己的时间充分利用起来。从这个角度来看,这些书是最该看的吧

时间进度等自己安排好以后补充吧,发篇日志激励自己

老外常用的聊天简写

08月 14th, 2008

今天跟一鬼子聊天,突然看到brb,有点反应不过来,google以后才知道是be right back,所以从网上找了个收集的版本,自己记一下,呵呵

看了下对方的简历,唉,国内的大学离素质教育还差的远啊

计算机编程的语言大概是比较现代的java, c#, ruby加上基础的c c++ assembly等。估计是上学的时候学了基础,自己为了工作学了新的。

然后接下来的简历直接让我崩溃,包括在戏剧等方面的研究,空手道黑带,游戏协会创建人,厨艺等等等等。

走过了大学四年以后深深感觉成绩不是最重要的,能力才是最重要的,就像很多前辈曾经说过的,成绩好的出路不一定好,成绩差的出路也不一定差。综合能力很关键。

软件方面更是这样吧,沟通能力才是软件最重要的能力,编码能力只是个基本,而身体是革命的本钱。

不知道国外的本科是通过怎样的课程,可以让一个nb软件的作者,同时具有这样的能力,呼~感慨~

afk Away from keyboard

And about to do goodness knows what.

bak Back at keyboard

Having done goodness knows what.

bfn Bye for now

Variations: b4n, bbl (be back later).

brb Be right back

cu See you

The more formal version of cya (See ya).

ltns Long time, no see

ttfn Ta ta for now

gal Get a life

kiss Keep it simple, stupid

An impolite way of saying ot (off topic).

pu That stinks

tswc Tell someone who cares

gfete Grinning from ear to ear

lmao Laughing my ankles off

lol Laughing out loud

rotfl Rolling on the floor laughing

aamof As a matter of fact

afaik As far as I know

btw By the way

eod End of discussion

hth Hope this (or that) helps

imho In my humble (or honest) opinion

ianalb I am not a lawyer, but…

As in, “IANALB I play one on TV.”

j/k Just kidding

ot Off topic

otoh On the other hand

aiamu And I’m a monkey’s uncle

Simian slurs are popular everywhere, and cyberspace is no exception.

bbfbbm Body by Fisher, brains by Mattel

cmf Count my fingers

dgt Don’t go there

dqydj Don’t quit your day job

tmi Too much information

bmus Beam me up, Scotty

fmdidgad Frankly my dear, I don’t give a damn

fysbigtbabn Fasten your seat belts, it’s going to be a bumpy night

gmdts Give my daughter the shot!

hlvb Hasta la vista, baby!

mmd Make my day

rutus Round up the usual suspects

yt2m You talking to me?

google is a good friend

关于测试驱动的几个问题

08月 12th, 2008
  1. 如果参数改了,一堆的测试需要相应修改,如何处理?删掉重做还是相应修改?貌似用ide可以自动的refactor,应该会比较爽
  2. 使用spring的时候的实体和service符合怎样的模式才比较容易编写单元测试?
  3. 非常复杂的算法程序如何编写单元测试

彻底了解Oracle字符集问题

08月 11th, 2008

彻底了解Oracle字符集问题

字符集问题分为三个阶段: 数据库字符集, sqlplus的字符集(客户端字符集), 终端程序的字符集

1. 查询数据库字符集

select * from V$NLS_PARAMETERS;

其中

l nls_language表示了显示方式, 就是sqlplus的程序的显示字体,有SIMPLIFIED CHINESE,American america

l nls_characterset是字符集设定, 常用的一些字符集有UTF8,US7ASCII,WE8ISO8859P1,ZHS16CGB231280,ZHS16GBK, AL32UTF8

2。修改数据库字符集
$sqlplus /nolog
SQL>conn / as sysdba;
若此时数据库服务器已启动,则先执行SHUTDOWN IMMEDIATE命令关闭数据库服务器,然后执行以下命令:
SQL>STARTUP MOUNT;
SQL>ALTER SYSTEM ENABLE RESTRICTED SESSION;
SQL>ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
SQL>ALTER SYSTEM SET AQ_TM_PROCESSES=0;
SQL>ALTER DATABASE OPEN;
SQL>ALTER DATABASE CHARACTER SET ZHS16GBK;
SQL>ALTER DATABASE national CHARACTER SET ZHS16GBK;
SQL>SHUTDOWN IMMEDIATE;
SQL>STARTUP

3。修改客户端字符集

oracle 的sqlplus会去读取OS中环境变量下的nls_lang信息

NSL_LANG包括三个部分(语言_地区.字符集)就是V$NLS_PARAMETERS表中的NLS_LANGUAGE,NLS_TERRITORY,NLS_CHARACTERSET

例如可以在cmd中键入

l set nls_lang=”Simplified chinese_china.utf8″

l set nls_lang=”american_america.us7ascii”

l set nls_lang=”american_america.zhs16gbk”

unix下类似, 不过nls_lang要大写NLS_LANG, 在.profile或这.bash_profile(根据你用的shell)里更改NLS_LANG可以长久保持环境变量值.

4。解决查询时显示中文部分显示乱字符

这一般是由于服务器端的字符集设定与客户端的字符集设定不同造成的。只要将两者修改一致就可以解决问题。

5. 终端应用程序的字符集

如果数据库字符集和sqlplus的字符集一致, 还是不能正确显示了, 那很可能就是你的终端应用程序的字符集不支持了. 例如你用bash登陆sqlplus, 如果你的bash是个小字符集, 那么就不能正常显示了.

linux修改bash的字符集, 可以先键入locale, 看有哪些环境变量, 再用export设置.

6。导入数据时提示字符集不匹配问题
exp/imp与sql*plus一样是客户端产品,因此他的字符集是由服务端的nls_lang所设定的。用exp导出备份的export file时,字符集的设定也被存放在export file里。这就是有些人在imp发生字符无法转换时更改export file文件头的原理