iTechTag从不能访问的麻烦中解脱出来了:换了一个host。但原来alpha测试阶段的数据找不回来了。开发团队加上了更多的数据保障措施,新的iTechTag不会再丢失数据,大家可以注册用户、记录自己做过的事情、骄傲地挂出自己的技能云了(就像我在blog的右边挂的这个)。

按照互联网的惯例,iTechTag还在beta,并且将长期beta。如果有意见或建议,请告诉我们。你的反馈会让iTechTag变得更好。

在实施敏捷的过程中感到孤独了吗?

还有更多敏捷视频

有人评论了RubyWorks Production Stack。“Damn those ThoughtWorks people are smart!” 这话听着很振奋。不过第二天,他又爱上了FiveRunsRM-Manage。“With built in notification it’s definitely a winner”

毫无疑问,FiveRuns的RM-Install是一个好东西。完整的Rails stack,丰富的附加功能,使用简便。但试用以后却加深了我对RubyWorks的信心。因为:

  1. 我们的stack是在现有标准(aptyum)基础上搭建起来的,这就意味着用户能够以他们习惯的方式安装和(更重要的)升级所有软件;一个以自定义格式包装的工具包将不得不提供自己的更新升级方式,甚至根本就无法升级。
  2. 我们的stack是逐步组合出来的,这就意味着我们提供的始终是对绝大多数用户最有价值的东西,并且给用户选择的机会;一个大包大揽的工具包很可能包含一些看上去很酷、但很多用户并不需要的庞大的组件(例如ImageMagick)。
  3. 我们的stack是开源的,这就意味着我们能够得到整个社区的反馈和贡献;一个闭源工具包的开发者需要花费更多的工夫才能弄清系统管理员们的工作方式和习惯。

归根结底,我的信心来自于对Unix传统的信心:开放的、遵循标准的、组合协作的软件,应该好过封闭的、自立山头的、大包大揽的软件。谁能在这场Rails stack的赛跑中最终获胜,走着看吧。

自从用Typo做blog并且放到Dreamhost以后,就一直遇到“Typo failed to start”的问题。今天终于忍不下去了,搜索一下发现原来是因为Typo耗用太多的内存,而Dreamhost有严格的内存限制,所以Typo经常不能工作。

于是用了几个小时的时间,先把Mephisto装上,然后从Typo转换到Mephisto。再把各种各样的样式、边栏……都调好,最后加上tag云。好了,现在“透明思考”不再有讨厌的500问题。

请更新RSS订阅的地址:http://gigix.thoughtworkers.org/feed/rss2.xml

招聘流程

Team work at thoughtworks india

在ThoughtWorks,我们寻找的是象我们一样以努力工作,有创造力,力图创新,追求卓越为贵的个人。我们的文化非常注重团队协作,职业发展,个人发展,和生活质量。

查看在ThoughtWorks中国的招聘职位

为了在确保找到的人才能够象我们每一个人一样热爱在ThoughtWorks的经历,我们建立了一套在IT行业里非常独特的招聘方法。

网上申请。 通过我们的在线申请页面来进行自我介绍,请务必注明你对什么职位感兴趣。

电话面试。 如果技能相符,我们就会与你联系,安排一次电话面试。这次电话交谈是为了确定ThoughtWorks是否适合你,也为了看看你是否适合 ThoughtWorks。在这次电话面试中,我们需要对你的态度,动机,薪资要求,出差意愿等等取得一致意见,保证我们双方都觉得合适。在这之后,许多 候选人都会与我们的顾问进行一次电话技术面试。

代码评估。 给我们看看你的代码。能说一些响亮的名词并不表明一个人是个有所心得的开发人员。我们认为,真正的软件开发本领并不能在一个简历或一次面试中完全表现出来。因此,在你的第一次面试之前,我们有一个需要写代码的考题,让你在家里做好了以后再通过电子邮件寄回给我们。

办公室面试。 这才是真正乐趣的开始。我们会让你来我们在Chicago, New York, San Francisco, Nashville, Calgary, Toronto, London, Melbourne, Sydney, 西安或Bangalore(班加罗尔)的办公室之一。首先,我们会对你进行一套评估,来帮助我们衡量你能够多快地学习新的技术,方法论,等等。然后,你会 和好几个ThoughtWorks员工进行面谈,这样我们互相之间就可以对彼此有更好的了解。注意:尽管在某些场合下应该衣着正式,但在我们的办公室里面 试可以穿随意的服装。大多数时候,你穿T恤或苏格兰方格呢短裙的效果会比戴领带还好。

录用通知。经过上面这些步骤之后,我们尽量不会让你等待。如果你能加入,你就能加入。一旦你加入了,你就不会再想退出。所以,现在就开始吧!第一步就是 在线申请

应届生招聘流程与这个略有不同,如果你想查看应届生招聘请点击应届生应聘流程获得更多信息。

我的blog右边栏里多出了一个mashup的小框:我的技能云。提供者是iTechTag。iTechTag出自我的一个点子,被1sters!变成了现实。iTechTag到底是什么?抄一段“网站介绍”。

********

作为软件开发者,我们从一个又一个的项目中得到了什么?除了学到新的知识、得到应有的薪酬与职位,我们还积累了良好的声望:我们生产有用的软件,我们又快又好地完成工作,我们用自己的专业技能为客户创造了巨大的价值。作为一个软件开发者,我们无时无刻不在为此骄傲。

但声望给我们带来了多少利益?还有谁记得你几年前完成的那些“不可能的任务”?还有谁记得你通宵加班为项目做出的贡献?还有谁记得客户和领导曾给你的赞扬?我们的声望还没来得及给我们带来回报,就匆匆地销声匿迹了。

我们的声望被严重低估了。

我们创建“技能云”就是为了重建软件开发者的声望。我们希望记录下自己辛勤工作的成果,并与他人分享我们的骄傲。我们希望让别人知道我们掌握什么技能、参 与过什么项目、帮助过什么客户、做出过什么贡献。我们希望让自己、让同事、让朋友、让所有关注我们的人有机会了解:我们是多么优秀的软件开发者。

********

记录自己做过的项目,在自己的blog里放上“我的技能云”,让所有看到你blog的人都知道你有多么了不起。这就是我的——iTechTag的——想法。

(关于1sters!团队,请看InfoQ中文站的报道:梦想上铁道。)

JRubyWorks: J2EE on Rails

August 18th, 2007

(NOTE: JRubyWorks keeps moving forward and this article may not be up to date.)

How to run your Rails application with J2EE web servers (such as Jetty and Tomcat)? Here’s a solution:

1. Set JRUBY_HOME environment variable properly.

export JRUBY_HOME=/usr/lib/jruby

2. Install ActiveRecord-JDBC.

jruby -S gem install ActiveRecord-JDBC -y

3. Install JRubyWorks plugin.

script/plugin install \
http://jrubyworks.rubyforge.org/svn/trunk/jrubyworks/

4. Configure your Rails application as this article. JRubyWorks plugin includes mysql-connector by default. If you use database other than MySQL, you can put corresponding JDBC driver in ${RAILS_ROOT}/lib/java directory and JRubyWorks will take care of it conventionally.

5. Run your application and try it at http://localhost:8080. Also you can find a WAR file of your application in ${RAILS_ROOT}/war directory. You can deploy it to other J2EE web servers.

jruby -S rake retty

JRubyWorks is based on JRuby Rails Integration and hope to make the integration easier. It’s quite immature so far, apparently. Your feedback and contribution will be very helpful and highly appreciated.

(有很多人很多次问过我这个问题。以下是标准答案。)

问:如何对私有方法进行单元测试?

答:重点在于,你不应该有任何方法是从一开始设计出来就是private的,因为你的每段程序都应该在单元测试的驱动之下产生,而测试是不可能驱动出 来一个private方法的。那么private方法从哪里来?只能从重构而来。所以答案是:private方法是不需要测试的,因为它是重构的产物,而 重构是不改变程序可观察之行为的。既然行为不改变,测试自然也不需要有任何改变,所以不需要针对private方法建立任何新的测试。

问:但是,如果private方法确实出现问题了怎么办?如果确实希望用测试来弄清一个private方法里面到底发生了什么,该怎么办?

答:如果一个private方法复杂到你不能一眼看清它,那它就太复杂了,你应该把它重构成为一个独立的class,然后针对这个class来建立单元测试。

从我家窗口看夜景

August 11th, 2007

东北四环,周六的晚上10点还是这么繁华。

望京西路,孤独的红绿灯守望着车来车往。

新买的富士S9600,套上遮光罩以后相当拉风……最长达30秒的快门,拍夜景的能力相当不错。

滇西古镇,疑似江南

August 4th, 2007

I Saw Glacier Today

August 1st, 2007