Read Sean

Read me, read Sean.
posts - 508, comments - 655, trackbacks - 9, articles - 4


http://www.extremeplanner.com/blog/2007/02/managing-distributed-software-teams.html

这篇blog文章讲的是如何管理分布式的软件开发团队。现如今许许多多的软件开发团队都面临跨办公室、跨楼层、甚至是跨地域、跨时区的协同合作开发,一个完整的团队被拆散成2个或者更多的小团队,如何管理好这样的“分布式”团队,值得我们思考。

这篇blog的作者给我们开了个好头,他整理了如下几点:
1- 让开发人员结对完成设计和编码,让组员保持沟通;
2- 让项目的信息可以在线看到;
3- 周期性的让组员面对面交流;
4- 每天都开会,会议不必很正式很长,主要目的是让所有人都对项目现状、自己的工作和组员们遇到的困难有所了解;
5- 使用多种沟通和交流的工具/平台,如电话、IM、blog、Wiki。

我觉得尤为重要的是:
1- 把项目信息放在一个方便的、大家都能看到的地方,并保持更新,这个可以通过Wiki来做,关键是需要专人维护,Wiki是死的人是活的,Wiki有多大价值完全在于维护它的人给它多少信息如何组织这些信息;
2- 保持沟通的畅通,随时掌握团队其他人的现状和遇到的问题,也让他人掌握自己的进展和困难,这就体现出daily meeting的重要。


posted @ 2007-02-17 16:59 laogao 阅读(413) | 评论 (0)编辑 收藏


http://www.nytimes.com/2007/02/15/business/worldbusiness/15toyota.html

来自纽约时报的文章: "The ‘Toyota Way’ Is Translated for a New Generation of Foreign Managers"。在丰田全球扩张的过程中,在全球各地都建立了分支机构和生产工厂,雇佣了大量当地的工人和管理人员,如何将丰田多年积累的所谓“丰田模式”贯彻到所有海外工厂的日常管理,成为了一项颇具挑战的工作。

丰田模式,如果我的理解没有错,其最核心最基本的概念是“集体思考”,强调可视性和持续改进。展开来说,比较有趣的几点:
1- 问题是大家共同的,有问题大家一起解决。
2- 在出现问题的现场解决问题而不是在办公桌。
3- 任何人都可以指手画脚,发现质量问题,工人有权直接停掉生产线。
4- 持续发现问题并解决。
5- 建立共识。
6- 对人,尤其是一线工人的尊重。
7- 危机意识。

“丰田模式”有很多概念来自日本本土文化,并不能简单的复制。如今很多生产企业已经在活学活用丰田模式,把适用的部分应用到日常的开发工作中。那么对于软件开发的企业和团队,有什么可以借鉴的经验?

对于一个团队的软件产品或者项目组产出的代码/文档等提交件,首先是共同拥有,功劳是大家的,出现的问题也是大家的;其次是大家需要一个很方便很直接的途径看到团队的目标和当前的问题;对于发现的问题,团队任何人都有权指手画脚,甚至叫停整个开发来解决这些问题。

只有共同拥有和担当,才能最大化团队所有人的责任感和成就感;只有大家都清楚的看到共同的目标,看到需要面对的困难和问题,才能有目的的工作;当有人发现团队出现问题,遇到困难,必须有一个合理的途径报告和解决。并且一个团队应该有这种鼓励和包容“指手画脚”的文化,鼓励大家发现问题,持续改进。

这里面可能最难被接受的一点就是任何人都可以对发现的问题指手画脚并不惜停掉整个开发。这一开始看上去有些过激,但是细想起来则很有深意:叫停的权力带来的最直接的好处是最终产品和提交件的质量,可能有不少人认为软件质量并没有那么严重,或者觉得为了一点点质量问题影响整个进度不值得,但是叫停的权力的真正威力来自它隐含的东西。当所有人都明白质量的重要性,也都明白一旦停产,带来的严重后果就是整个进度的delay,整个团队的效率和产出都会受到牵连,大家就会很小心的遵守开发的规范,大家对待自己的产出也更加有责任感,让“坏分子”和“懒惰”无处容身。一旦叫停的权力成为团队文化的一部分,团队也就自然而然走上了持续改进的道路。


posted @ 2007-02-16 17:39 laogao 阅读(793) | 评论 (0)编辑 收藏


http://www.antoniocangiano.com/articles/2007/02/10/top-10-ruby-on-rails-performance-tips

这是一篇关于提高RoR应用性能的文章,提高RoR性能有两个途径,一个是服务器端配置,一个是在Rails这一块的调整,此文侧重于后者。主要的内容包括:

1- 在Ruby代码级别采用更优的方案;
2- 充分利用缓存;
3- 充分挖掘数据库潜力;
4- 合理使用finder查找函数;
5- 合并数据库事务;
6- 控制好你的控制器,不要滥用filters和实例变量;
7- 不要过度使用helpers,考虑HTML;
8- 合理配置日志;
9- 给你的Ruby GC打补丁;
10- 不鼓吹"premature optimization",但是尽可能带有性能考虑来进行编码。

大家觉得对于RoR的应用,上述这些说到点子上了吗?感觉RoR在性能调优上我们积累的经验还不是很多,我有点担心,虽然上面有很多好的点子可以借鉴,文中提到的某些"强心剂"是否真的值得推广?尤其是针对数据库的那些"quick-and-dirty"的做法。

posted @ 2007-02-11 12:55 laogao 阅读(517) | 评论 (0)编辑 收藏


JBoss的创始人Marc Fleury选择离开去年4月成功并购JBoss的Red Hat。网上大大小小的报道已经铺天盖地,不过我推荐大家读这一篇来自Linux-Watch的Steven J. Vaughan Nichols的文章:

We haven't heard the last of Marc Fleury

离开Red Hat的Marc Fleury会从大家的视线中消失吗?Steven J. Vaughan Nichols大胆的预测Marc Fleury将重操开源软件的旧业,不过不会是JBoss的克隆,而是一家Ruby on Rails的公司。


posted @ 2007-02-10 13:53 laogao 阅读(562) | 评论 (0)编辑 收藏


自从笔者在BlogJava开blog以来,承蒙大家的支持和鼓励,两年的时间内随笔已经接近400篇,当然也要感谢dudu为大家无偿的提供了包括博客园在内的人气blog空间。

为了更好的服务于我的读者,与更多热爱Java热爱技术的朋友分享我的心得体会、交流经验,我已在JavaEye开通分号,从现在起,我的这两个blog将同步更新。欢迎大家bookmark我的新地址:http://readsean.javaeye.com/[rss]。


posted @ 2007-02-10 13:19 laogao 阅读(426) | 评论 (1)编辑 收藏


很多开源框架的官方下载都会提供MD5的验证码,用于验证下载的完整性,确保用户下载的版本和发布者期望的版本是一致的,防止有人恶意篡改,尤其是存在很多镜像站点的时候。使用Unix系统的朋友可以通过命令行直接md5 + 文件名,或者md5sum + 文件名取得本地文件的md5验证码。使用Windows的朋友也能在网上找到不止一个提供MD5的工具。

不过既然Ruby在Unix/Windows/Mac上都能跑,那Ruby有没有提供MD5的功能让我们可以以一致的方式取得MD5 checksum呢?答案是有。
  1. #!/usr/bin/env ruby  
  2. require 'digest/md5'  
  3. ARGV.each do |f|  
  4.     checksum = Digest::MD5.hexdigest(File.read(f))  
  5.     puts "#{f}:\t#{checksum}"  
  6. end  

比如我们到http://struts.apahce.org/下载1.2.9版本Struts的源码,下载到本地后,可以用上面的脚本获取相应的MD5码,输出为:

struts-1.2.9-src.tar.gz   63ff6e570410876412f8fd97749b2415

拿后面这个63ff6e570410876412f8fd97749b2415和官方网站上相应的MD5 checksum作比对看是否一致,即可认定下载到本地的版本是否完整。


posted @ 2007-02-10 12:53 laogao 阅读(2624) | 评论 (0)编辑 收藏


今天在ZDNet上看到一篇挺有意思的blog,为什么Windows比Linux更难实现系统安全。文章举例Windows+IIS和Linux+Apache处理同样一个简单的带有图片的网页,在后台的系统调用图表大不一样。系统调用越多,层次结构越复杂,就越难实现安全性。

http://blogs.zdnet.com/threatchaos/?p=311

posted @ 2007-02-08 08:29 laogao 阅读(507) | 评论 (0)编辑 收藏


昨天试用一个WebService,需要确定是否正确安装配置,用Ruby来做真的很方便,一个本来在Java中颇为麻烦的事,到了Ruby(irb)里面,变得很简单。你要做的,就是打开irb,依次敲入以下代码:
  1. require 'soap/wsdlDriver'    
  2. URL = 'http://somedomain/someapp/somewsdl'    
  3. soap_client = SOAP::WSDLDriverFactory.new(URL).create_rpc_driver  

接下来就可以直接通过soap_client访问这个WebService的方法了,如:
  1. soap_client.version  
  2. soap_client.get_user_roles('user')  

如果你指定
  1. soap_client.wiredump_file_base = 'log_file'  

系统还能帮你记录在使用WebService接口时所有发出和收到的xml消息。

posted @ 2007-02-08 08:29 laogao 阅读(1124) | 评论 (0)编辑 收藏


"Management is doing things right, leadership is doing the right things."
- Peter Drucker

这是管理大师德鲁克的名言,”管理是(要)把事情做对,而领导是(要)做对的事情“。

posted @ 2007-02-08 08:29 laogao 阅读(454) | 评论 (0)编辑 收藏


Apache旗下的ActiveMQ日前正式"毕业"成为Apache的顶级项目之一。官方主页也从http://incubator.apache.org/activemq/改为http://activemq.apache.org/


posted @ 2007-02-07 00:28 laogao 阅读(946) | 评论 (0)编辑 收藏


春节快到了,现在按农历应该是六九吧?可这哪像是冬天?上海昨天白天气温竟高达21摄氏度,甚至有报道说今天达到了历史性的23度!近两年我们时不时就能看到世界各地越来越多的出现反常的天气状况的报道,这究竟是不是全球气候变暖在作祟,科学家们目前似乎还并不能给出一个一致的肯定或否定的答案。但我觉得,如果硬要说这个天气纯属自然规律,和人类活动一点关系都没有,多少有些牵强,至少有点不负责任。来看News.com提供的一组图片(含文字说明):

http://news.com.com/2300-11395_3-6156279-1.html

其中第五张是NASA航拍的马尔代夫群岛(拍的真漂亮),平均海拔在1米左右,如果真如部分科学家预言的那样,本世纪海平面上升7~23英寸(1英寸约合25.4毫米),这样一个美丽的旅游度假胜地会变成什么样子?(按照预期,2400年海平面平均将上升1米。)


posted @ 2007-02-06 23:48 laogao 阅读(638) | 评论 (0)编辑 收藏


"The truth is more important than the facts."
- Frank Lloyd Wright

Frank Lloyd Wright是美国著名的建筑大师,坐落于曼哈顿的纽约古根海姆博物馆即是出自Wright之手。这句话说的是:真理比事实更加重要,你可以罗列出一大推甚至无数的事实,但不管这些事实有多少,也比不上一个朴实无华的真理来得更有价值。这有点像我们现在面临的信息爆炸,不管这些信息是否都是事实,如果无法从海量的信息中得到有价值的部分,不论信息获取多么便捷简单,也没什么用。或者再换个例子,我们很多企业级的应用中每天都在产生记录企业活动的数据,如果没有一个强大的BI (Business Intelligence)对这些数据进行分析和挖掘,这些数据可能永远都是一堆0和1,无人问津,最后被所有人遗忘。




posted @ 2007-02-02 23:30 laogao 阅读(631) | 评论 (0)编辑 收藏


几乎每次下班回家,都能在轨道交通站台的广告牌上看到这一句出自姚明的话,以至于不用费心回想便可以脱口而出。我不喜欢篮球,也不是姚明的"粉丝",但我对这句话印象十分深刻。我想我之所以能够如此清晰的记住这句话,还有更深层次的原因,那就是这句话引起了我内心的共鸣。

有人说我是一个自视甚高、自命不凡的人,对待他人也是冷漠多过热情。不知道这个能不能和"不合群"划等号,但确实反映了我个性的一个方面。我追求完美,喜欢条理,希望得到认可,注重实际,对自己高标准严要求,对别人也有很高的期望。我自己并没有觉得什么不对,可能有时候有些锋芒毕露、吹毛求疵吧,别人并不一定能够接受。说真的,夹起尾巴做人也许被很多人奉为职场上需要恪守的原则,我也可以低调再低调,但是我认为该说的、该做的,我也会去说、去做。我曾经尝试退缩,尝试回避一些表达自己想法和不满的念头,但最终不但没有收到任何积极的效果,反倒是让我后悔没有第一时间说出来。

我喜欢什么事大家都挑明了说,如果谁觉得我有什么地方做得不好,可以提出来,我虚心接受,有则改之无则加勉;同样,我认为谁有什么地方值得改进,我也希望可以向他/她提出,而不必担心被他/她误解或者造成不必要的不愉快。有人提意见,至少代表他/她还care,如果有一天,大家都不提意见了,也就意味着大家对别人,对周围发生的事不再care,别人怎样,对他/她已经没有所谓。如果这个"别人"和这个"周围发生的事"和一个团队有关,那么也就意味着这个团队出现了沟通和信任上的危机,至少是失去了本可以更加健康发展的动力。

我可以谦卑而虚心,但我不能什么都不说。


posted @ 2007-02-02 01:13 laogao 阅读(888) | 评论 (2)编辑 收藏


一直误以为CVSNT和Linux下的CVS不兼容,至少没那么"无缝",事实证明一切真的很简单,以下就是从CVSNT迁出一个资源库到Ubuntu下的全部步骤:

1- 通过Samba或者其他方式将CVSNT资源库整个目录,包括CVSROOT子目录,拷贝到Ubuntu文件系统中,chown,chmod。
2- 在Ubuntu下编辑/etc/xinetd.d/cvspserver,在cvsargs增加--allow-root [YOUR CVS PATH],每一个资源库均写在这里,以空格分隔。
3- 命令行执行sudo /etc/init.d/xinetd restart。

迁移后的资源库即可使用了,包括历史修订记录、标签等等信息均完整保留,并不要求新的资源库用户和老资源库用户一致。这就是CVS值得我们叫好的地方,一切都那么简单、直接、好用。可能需要注意一下的是encoding,如果两边的encoding不一致,而文件名或目录名出现非ASCII字符的话,可能出现无法同步或者部分文件丢失的现象,文件内容出现非ASCII字符则不影响。

See Also: [Tips] 在Ubuntu Linux 6.06 LTS (Dapper Drake)上安装CVS服务


posted @ 2007-02-02 00:24 laogao 阅读(1207) | 评论 (0)编辑 收藏


最近拿到的.rar格式的文件越来越多,不论是网上还是工作中,在Ubuntu下倒是好办,sudo apt-get install rar即可搞定,但是切回Windows就有点惨,我没有WinRAR的license,也不想安装试用版什么的,于是一直在Linux下面做解压,再不就是让别人帮我解压好给我。现在不必了,用上了传说中的7-Zip[^],开源而且免费,总算可以和WinRAR彻底bye-bye了。


posted @ 2007-02-02 00:04 laogao 阅读(931) | 评论 (0)编辑 收藏

仅列出标题
共34页: First 上一页 5 6 7 8 9 10 11 12 13 下一页 Last