posts - 59,  comments - 323,  trackbacks - 0
一直有朋友发email来索要那本OpenDoc的源代码,这里一并给出下载地址。

http://www.blogjava.net/Files/zbw25/code.rar

抱歉,拖了这么长时间。

Update:
昨天在BlogJava上传的文件,今天就不能下载了,比较晕。。。

http://www.javaeye.com/topic/19448

这是在JavaEye的发布OpenDoc的地址,里面有下载的Link。
http://www.javaeye.com/topics/download/54f814f5-b77f-46e1-bf61-bd384493f118

应该要注册成为javaeye的用户后,才能下载。
posted @ 2006-10-18 19:45 读书、思考、生活 阅读(108248) | 评论 (11)编辑 收藏
 
 

我写的总结
 

  如果和超级女生这样的大赛相比的话, Ajax 大赛应该被称之为“ Ajax 小赛”吧。 250 名初赛选手, 10 多名复赛选手,三个来自于一个网站“ Ajax 中国”的评委。这样的比赛意义在哪里呢?

 

  仅仅看数量,是看不出来的。

 

  Ajax Web 应用的一种,而且可以肯定的说,是 Web 应用中最为复杂的一种,一个 Web 项目,我们通常都会分为“美工”、“ Web 静态页面制作”、“ Server 端系统开发”这样几个工种。而 Ajax 应用则同时需要 Server 端与 Client 端复杂的端到端编程技术。

 

  对于参赛选手而言,这些工作,都得靠一己之力来完成,在 2 个多月之内,做出来的作品,要美观,要好用,要有创意,要符合 W3C 组织的 Web 标准,还得正确有效的作为一个程序在浏览器里运行。真的,不容易!这 11 位(可能会修改)参赛选手,每一位都不容易!

 

  我们(大赛组织者、评委和参赛选手)都非常确切的意识到,我们正处在一场变革刚刚起步的阶段。 Ajax 可能仅仅是这场革命开始时,最响亮的一个名字。激动人心的发展将会接踵而来,而我们这些人将会自豪的宣称,我们从一开始就不是旁观者,而是实实在在的参与者,和有力的推动者!

 

  看着选手们的代码,我们的信心更加充足,这些 Ajax 的爱好者和参与者们,不仅是热忱的,更是踏实的。不但是严肃认真的,更是勇于创新的。由这样的一群人来推动 Ajax 在中国的发展,实在是一个极好的开始。

 

  而 Ajax 大赛,正是这样一个机会,使得这一群中坚力量,能够集结、凝聚,进而取得更加卓越的成就。这就是我对于这个比赛意义的理解。


   说实话,稍微吹了一点

posted @ 2006-07-14 21:35 读书、思考、生活 阅读(30185) | 评论 (0)编辑 收藏

“出来混,总是要还的。”这话说得真好。我最近的blog写得太少了,想写的东西,其实又实在是不少,一日复一日的堆积心里,又想写,又不想写,难受呀。

这篇blog原本还是打算在Word 2007里写的, 后来作为草稿发上来,发现还有不少不如意的地方,还是在线写吧。

想说的事情挺多的,一件一件的说吧。

一、敏捷中国大会,6月6日在上海交大举办了一场。专门介绍ruby的,昨天在csdn的martin fowler的中文blog上,也贴出了完整的演讲全文。《Ruby是一个非常好的开发工具》,《现场演示Ruby编程》,《细数Ruby语言优缺点》。关于这次活动的一篇Blog按理我早就该写了,但是却一直没有写出来。有两个原因,一个是那天老马在开讲之前,熊节是打算在边上当翻译的,谁知道交大的同学们牛啊,纷纷表示,不必翻译,都听得懂的,我一个学俄语的人,在那里抗议也没什么用,大家都一副听力很好的架势,老马在上面叽里呱啦的讲着,下面的同学们不时的笑着……我呢,也只能随着大家的笑声,冲着老马空洞的笑着……;第二个原因呢,是个原本打算等CSDN的演讲的翻译出来,我也好引用一下,谁知这一等,就是半个月,我都已经换了一个工作了。

说实话,那天老马的演讲,我没听懂,不过因为他在那里现场coding,所以我还是看懂了一些代码。Ruby的代码给人留下了深刻的印象,而且我不知道是不是Martin故意装作是一个初哥,反正看起来他对ruby的语法也不怎么熟悉,不过ruby厉害的地方就在于,你就算是个初哥,边试边弄,也能把程序鼓捣出来。

原本的计划是介绍Ruby DSL的,不过时间明显的不够用,关于DSL的部分反而讲得很少,还好这两天armlinux-w翻译了一篇专讲Ruby DSL的文章过来:《用Ruby 创建领域特定语言》。当时看到Martin演示的,用Ruby语言描述的配置文件时,脑子里颇有些想法,也写了问题交上去问,不过老马也来不及一一回答,后来想想,提的那个问题,也没有经过自己的深入思考与实践,不提也罢。

倒是我提的另外一个问题,颇有些价值,当时正好交大的林德樟老师也在,我以前就对林老师的那句语录有所不满《XP是草书,UP是正楷,先草书后正楷,就会乱套》。在自己的Blog上也和林老师的门徒们吵过架,如今Martin教主本人既然来了,我等看客正应该把这仗挑起来才是。于是我就提了一个问题,让两位专家都来评价一下这句话。可惜的是,后来他们两人的精彩交锋,我也没怎么听懂,还是林老师还用中文阐述了一遍自己的观点,我算是了解了一下他的逻辑。

原来我以为,林老师这样的说法,是出于在校教师“和稀泥”的考虑。这下我才了解到,原来林老师是真的这么认为的。而他这么一种说法的依据,还是惯常的“中国国情论”。或者称之为“补课论”。因为美国人是现有软件工程,才有极限编程,而我们现在的软件产业还落后人家几十年,所以不把软件工程这一课不上,是不行的。然后林老师还颇有些“攻击力”的询问Martin,当初你先写了UML,后来又写了XP,不也是这样一个心路历程吗?老马如何回答,我也没有听懂,但是在我看来,林老师混淆了三个概念,一个是国家级的软件产业的发展水平,一个是企业级的软件开发的管理水平,一个是开发人员的技术与理论水平。这三个不同的水平被他搅在一起,用于支撑自己的说法,实在是所以,会后我又追上去问林老师,我提出了三个概念混淆了云云,没想到林老师相当和蔼可亲的对我说:“嗯,你说的没错”,然后又说到关于大学的软件教育的问题,我在说很多刚毕业的学生,对于软件开发的理解,往往停留于知识点的积累上,而没有去思考,我打算把这些知识点,组合起来运用,以达到什么目的。很多学生,只是说我知道什么什么,而不会说,我会做什么什么。林老师又和蔼可亲的对我说:“嗯,你说的没错。我一直跟学生们说,学校和企业是完全不同的,真正的知识,只能在企业里才能学到。”然后我又说,其实软件学院应该多推荐学生去企业实习,还有就是多鼓励学生参与Open Source的项目呀。林老师还是和颜悦色的对我说:“是啊,不过现在的企业,要他们肯接收学生实习,不容易的。在美国,每年暑期都会有大量的实习生招聘,这其实就是企业在做慈善呀。再说现在的大学老师,对Open Source的了解,也很少的呀。”然后,我就跟林老师告辞了。作为一个老师,他给我留下了很好的印象,但是,我更加悲观的发现,要通过学校教育,提高软件开发人员的素质,好难啊!

会后大家又找了一家小饭店FB了一下,CSDN的霍泰稳也来了,我还给他们提了一个建议,以后CSDN最好能够搞一个系列的活动,不断的把世界各地的软件大师们请到中国来,巡回演讲,收取门票,整理成每年基本的《软件大师在中国》这样书出版,还有视频光盘也可以卖钱,各位大师的中文Blog也都建在CSDN,应该是一桩双赢的好事啊,就看他们是不是打算做了。

(待续)

posted @ 2006-06-20 23:05 读书、思考、生活 阅读(28407) | 评论 (6)编辑 收藏
最近一直在讨论招人的事情,如何判断一个人的水平,怎么样才算是没有bug,等等等等。也看到一些并不怎么有趣的反对意见,比如:
不要出来搞笑说:
没有bug的程序?????????
靠,站着说话不腰疼。那个公司可以做出没有bug的软件来?
当然,没有写过程序的人不出bug!!
估计这位同志不会写代码,是个理论专家。
还是不要这么狂的好。
我估摸按你的标准,你是肯定不会被别人录用的!
123说:
你是编程的吗?
无“BUG”搞笑吧你
测试是不能查出所有BUG的
而且不是所有测试都能穷举的
只能是测试覆盖率达到一个标准
BUG出现的概率达到标准
才算产品
“ZERO-BUG”做梦去吧
说实话,这两个名字我看都不是用户名,而且很可能是同一个人,就是所谓的troller。我说的没有bug,是交给我的demo没有bug,这样的要求很高吗?我还没有出算法题,要求应聘者的算法效率呢?仅仅要求一个正确实现简单功能的程序,很过分吗?
 
在JavaEye还看到另外一篇帖子《大伙能进来讨论下“跳槽”的问题》,有一个小伙子,对自己的代码有感情,对人有感情,对公司有感情,所以当公司遇到困难的时候,一时间舍不得走。这样正常的事情,居然颇遭到不少人的冷嘲热讽,和各种“善意”的劝诫。
 
我就觉得非常奇怪,一个程序员,如果对自己写的代码没有感情,怎么可能写出漂亮的代码来?同样的道理,如果一个程序员,对自己的工作质量没有追求,又怎么可能成为高水平的程序员?一个前来应聘的人,为了得到offer而写的demo,就这种情况下,在寄出代码之间都不认认真真的检查检查,这样粗心大意的家伙,我怎么敢招?
 
总而言之一句话:“对代码有感情,对质量有追求”,这是成为好程序员的基本前提。
posted @ 2006-06-18 02:23 读书、思考、生活 阅读(28016) | 评论 (14)编辑 收藏
  我写了一篇blog叫做《招人不难》,很多朋友很赞同,也有的朋友不同意我的意见,他们很怀疑:“有bug的一律不要?没有BUG的代码是不存在的...blabla”
 
  正好今天又看到一篇转贴的笑话,叫做《【转】从一个笑话看软件开发管理》,大意是,程序员交出了自以为没有bug的代码,然后一切都变得越来越糟糕,而程序员总是会交出自以为没有bug的代码。
 
  我们今天就来谈谈,一个程序员,什么时候可以交出自己的代码,并且可以自豪的对别人说:“我的代码里面,没有bug!”。
 
  先说传统的做法,一个负责的程序员,应该在交出代码之前,自己跑好多次自己的代码,左看右看,上看下看。直到交出去的时候,没有一个人能够发现其中的问题。这样的能力一般只有天才才能具备,我以前遇到过一个。但是,如果我企图以这样的标准来招人的话,那就是在发疯,怎么还敢说“招人不难”?
 
  说说可行的办法吧。一个程序员如果足够的谦虚,时时想证明自己可能犯错,即将犯错,或者已经犯错。那么他就会尽量写出足够多的TestCase,以便打消自己的疑虑。直到所有的测试用例全部通过,屏幕上显示出美丽的绿色长条,他才能确信,自己的代码没有bug。
 
  所以,我的判断标准,也很简单。如果寄给我的代码,没有附带测试用例,我就自己运行他的程序,随意的乱找,找到一个我认为是bug的,那就是有bug了。如果寄给我的代码,附带了足够的测试用例,我只要Run一次,看到绿条,这一关就算是过了。~~~很简单吧。
 
  也许有人会说,那如果他的测试用例很简单呢?岂不是不能说明什么问题?怎么不能说明问题呢?首先可以说明:这是一个会写测试用例的程序员!其次,我会看看他的测试用例的代码,大概覆盖了多少的功能特性。当然,这是更进一步的能力判断。但是至少,他的代码已经达成了他自己的设计了呀。
 
  所以:“有bug的一律不要”,意味着,你最好能够自己证明自己没有bug,否则,我如果找到一个bug,你就没戏了。
posted @ 2006-06-11 10:34 读书、思考、生活 阅读(29229) | 评论 (10)编辑 收藏
  孟老师最近有点烦,面试了一个刚毕业大学生,结果发现那家伙一问三不知。随后的跟帖也是常见的感叹:
  “现在的大学生过于浮躁”
  “真不明白本科都在学什么”
  还有一位台湾同胞说:“本來還以為只有在台灣有這種情形,原來兩岸的情都相同。”
 
  因此,打算写这篇blog,介绍一下我是怎么招人的。其实,招人并不难。
 
  1、写招聘广告
  2、收简历,初步了解背景情况,然后让加我的MSN
  3、在MSN里,就问一个问题:以下几种技术,你哪一种最熟悉,哪一种最不熟悉
  4、你就用最不熟悉的那种技术,做一个demo给我,没有时间限制,要求如下:
    -首先是demo的质量,一定不能有任何bug
    -其次是代码的质量,要干净,明白,好懂。
    -要有创意
    -在功能创意与时间进度之间,自行平衡
  5、拿到代码之后,先看看能不能正常运行,看看有没有bug。
  6、在Google里搜索代码的关键段落,看看有没有抄袭,或者了解一下借鉴的程度
  7、看他的代码,是不是足够干净,足够合理,足够朴素
  8、如果一个人能够在很短的时间里,自行快速学习一种新的技术,并交出足够质量的代码。这样的员工,我就准备要了。至于面试,无非是谈谈工资的高低意向罢了。
 
  这样的招人办法,要点在于:
  1、我不关心他的学历,工作经验,年龄和技术背景,因为招到一个出色的员工,他会持续的自我学习,不断的进步。
  2、有bug的一律不要
  3、代码最能够说明问题,其他一切判断都要在我看过他的代码之后。一个人,不要玩弄聪明,不要炫耀技巧,写老老实实,干干净净的代码,合理的贴切的变量命名、方法命名、类命名,合理而不多不少的类间关系。这样的代码,就是漂亮的代码。能写出这样的代码的人,就有足够好的思维和品性。
  4、快速学习的能力要比过去的工作经验更加重要,因为那么多工作经验,也要有助于完成今后的工作,才能体现出价值。
  5、不抄袭,有创意,这样的人才很难得。
  6、有计划的实现功能,能够在功能和时间进度之间合理决断。这就是有大局观的人才。
 
  当然,这样招人的基础是,你自己的代码水平要够高。很多公司根本就没有这样的水平,只能靠笔试来判断人家的水平。
 
  我工作过的公司,曾经有一个小伙,他的代码,缩进不是靠Tab,而是“按下空格键,任代码随意后退”,他的代码,弯弯曲曲,难看至极。前两天,他跟我说“我笔试得了90多分,当场拿到了4.5K的Offer。”可见,笔试是毫无意义的测试手段。
 
btw:还有问题,这样招人效率不是很高,也比较累,紧急招人的情况不适用。当然,紧急招人的项目,通常肯定是搞不好的。
posted @ 2006-05-30 16:11 读书、思考、生活 阅读(28933) | 评论 (36)编辑 收藏
  大多数程序员,都极度痛恨写文档。Coding是愉快的,而Write是痛苦的。有一部分原因,其实是要归咎于程序员自身,以我的经验,很多程序员往往会“艰于表达”,尤其是用“文字、图表、PPT、Word”之类的Office Document来表达。当然,还有一部分原因,是由于很多项目开发实践中,文档的前后矛盾、形式主义、反复修改、歧义重重,常常让程序员们抓狂。
 
  UML是一个比较好的工具,但是,仅仅靠UML,是无法将项目的知识描述清楚的。也有不少项目组在引入了UML之后发现,文档的工作量不但没有减少,而是更多了。随着项目的进展,需要维护的设计文档数量,也更多了。也因此造成了更多的前后矛盾,形式主义,反复修改。
 
  根本的痛苦,并不在于一开始写一份文档,而在于所有写下的文档,都必须跟随项目的进展而随之变化。当我们写出来的文档越多,需要被持续维护的文档也就越多,需要反复检查文档间的可能存在的矛盾也就越多,所有扔出去的石头,最后都会落回到自己头上。
 
  于是,还有不少项目组,将文档工作与代码工作截然分开,文档就写一次,用来应付上面的管理层,而代码自管自的继续开发。对于小型项目来说,这其实是一个不错的权宜之计。但是一旦项目越来越庞大、复杂。所有的隐性的知识,都仅仅存在于程序员的脑子里,所有成文的东西,都可能是错的,而真实的情况,却隐藏在代码之中。如果代码质量再糟糕一些,后来维护的朋友,就遭遇火坑了。
 
  文档,写还是不写,这是一个问题!
 
  还记得测试驱动开发吗?为自己的每一个方法,每一个类,都写出单元测试来。不但如此,更加彻底的做法是,在写代码之前,先写测试用例。这样才能保证不会忘记写测试用例。更大的好处在于,这样有助于思考、有助于获得更加完善的设计,有助于写出更加高质量的代码,有助于安全的重构,有助于自动化的持续集成实践。总之,是好得不能再好的一项开发实践。
 
  这一实践之所以可行,就在于他将繁杂的集中的测试工作,分解为日常的,必须不断进行的工作。当你每天都在写测试用例,当你的每一个测试用例,都能够与代码完全对应时,压力反而减轻了,工作量也更少了,更重要的,一些优良的习惯也因此被养成了。
 
  在两年前,我要开始一个全新的P2P网络电视项目时,也在考虑关于文档的问题。当时我发现了Open Source的WikiPedia。这是一个PHP的WIKI,最大的应用是维基百科全书。因此,这个项目的质量就绝对值得信赖。我就将它拿过来,作为我们项目文档管理的工具。
 
  用Wiki来管理项目文档,基于以下一些考虑:

文档是项目的知识,这些知识必须集中管理、容易获取、人人可以编辑。

项目在生长,代码在增加,文档也必须能够跟随项目自然生长,强行划分设计阶段和开发阶段,是不可取的。

Wiki不是传统的项目文档,而是一个应交流需要,可能随时增删改的知识库。项目组的成员,遇到问题,就应该首先查看Wiki,如果这是Wiki中没有,那么他应该找人询问。而那个知道答案的人,如果他不想再今后不断的回答同一问题,就应该把这个答案写入Wiki,这就是Wiki条目增长的自然动力。

传统文档最大的问题在于浪费,而Wiki通过持续修改,按需提供的方式,保证了所有写下的文字,一定有超过一个人需要读它。

 
  在Wikipedia的基础上,我又做了一些增强,以更好的辅助项目的管理。

Include功能,增加include标签,可以在一个条目中,引入其他条目的全文,而不是仅仅增加一个link。

文档的层次结构,当项目的文档条目逐渐增加,分门别类的条目,更加便于查找,也可以有效的避免条目重名的问题。

一个Click,就能够创建新一个条目,用于填写当天的工作安排。

  相应的管理制度,也必须建立起来。

每日15分钟文档制度,基于“填写当日工作”的功能,我规定每个项目组成员,每天要花三个5分钟来写文档,早上的5分钟,填写当日工作计划。中午的5分钟填写上午的工作情况,下班前的5分钟,填写下午的工作情况。这样,每天的文档工作相当轻松,但是文档能够保证持续的跟随项目成长下去。更进一步的,这样的制度,对于项目的进度控制,也很有帮助。

User Case条目驱动,所有分解出去的User Case,在分配到责任人之后,该责任人的第一项工作,就是在Wiki中写下对于这个User Case的理解。随后项目进展,也应该持续的维护这个条目。

同时进行Bug的管理,Bug也作为Wiki中的条目,以便于和其他条目项目引用。

每次Check In CVS时,必须写注释。这是更加细节的文档,然后我还做了一个小程序,能够自动的从CVSTrac中读出当天Check In代码的注释。供每个人在写当天文档的时候引用。

  总而言之,我对于项目文档的看法,并不是非此即彼的极端主义者。在我看来,好的项目文档管理政策,应该有助于集中团队知识和智慧,同时不要让程序员痛苦和反感。这样才叫做有效的项目管理。仿造Martin Fowler的著名文献《持续集成》,我给这篇Blog起这样一个名字《软件开发文档的持续集成》,希望能够引发更多的、更深入的思考。
posted @ 2006-05-12 14:23 读书、思考、生活 阅读(28609) | 评论 (3)编辑 收藏
  我新到这家公司,就开始了一场死亡之旅,我们的项目开发周期是3个月,人员大概有3~6个不一定。而以我的经验,我们大概要做的,是一个3~5个人年的非常复杂的创新型项目。新加盟的技术总监,是一个崇尚文档交流的“老干部”,因此,我们花了一个月的时间,在写各种各样的设计文档。真正能够用于开发的时间,是2个月。
 
  我们这个小组的另外一位组员,也是一位经验丰富的项目经理,他崇尚的,是文档UML化描述。因此,我现在除了写文档,还要用Rational Rose画好多好多的图~~~
 
  在他们两位来这个项目组之前,我其实已经写出了一份基本完整的User Case列表,而且和另外一位组员已经进入测试驱动的、结对编程阶段了。。。
 
 
  大家可能已经看出来了,这其中的开发模式,简直就是混乱不堪。到底是文档驱动?UML驱动?用例驱动?还是测试驱动呢?
 
  问题还不止这些,我们的大老板比较喜欢和我们一起讨论设计,甚至会和我们争论具体的某个算法。开发文档没有统一的管理,汇报机制没有明确的定义,项目需求随时都可能变动,就连到底我们这个小组会有几个人,都还是一个未知数,这样的死亡之组,不知各位有什么好的建议?

 背景资料介绍完毕,抱怨结束,下面讨论正题:

  文档驱动、测试驱动、用例驱动、模型驱动、特征驱动。。。。他们都要解决的是什么问题?

  要回答这个问题,还真不容易。我们得问一个更加重要的问题,真正驱动项目的,究竟是什么呢?我想,应该是需求吧?

 

  那么,这些“文档”、“测试”、“用例”、“模型”、“特征”,究竟是什么呢?对于需求的描述!我们之所以不会直接用需求来驱动项目开发,而是要借助工具,来帮助我们描述需求,就是因为口语化的需求描述是非常模糊的,充满歧义的。所以,选择什么来驱动我们的项目,其实就是要看,以上这些工具,哪一个能够更好、更准确的描述需求?

 

  文档其实是最难准确描述需求的一种方式,如果是纯文字的文档,就更难。我们的技术总监,非常喜欢读写文档,我最近也创下了一天写47页文档的最新记录。但是,当我们开会的时候,我还是经常需要提醒我们的技术总监,麻烦他再仔细看看文档第XX页的第XX段,以及配合着另一份文档的XX小节,来确切的理解我的意思!如果没有我的解释,他就会误解我的文档。

 

  当然,如果要写出不需要我来解释,他就能理解的文档,那么文档的工作量,将会极其惊人!我以前写过一篇blog,《Jacobson博士演讲观后感》是我对UP的创始人的极度反感的集中体现。GHawk,以及交大林老师的所谓“UP”的观点,当然不可能获得我的赞同。在GHawk的最新一篇blog:《UP & XP之争,意义何在?(续)》中,GHawk说:“唯一的问题是:“如何确保测试用例的质量”。显然,我们不能把一把不直的尺子度量出来的结果作为可靠的参考依据。怎么解决呢?“结对编程”么?嗯,这是一个不错的方式,那么最终该信赖谁呢?是Pair中的A还是B呢?或者,是Leader么?那么又是谁提出的要求呢?是老板么?还是客户?政府?法规?市场?……问题没有终结了。”

 

  由此我可以推断,他对于XP的认识,基本上是停留在猜测的阶段。对于这篇blog的观点,我就不逐一反驳了,我的猜测是,他经历过一次失败的XP尝试,而究其原因,我猜测是因为他们那个所谓的XP Team中,没有一个人,曾经实践过一次正规的XP开发。

 

  再来看模型驱动,这中间有一个大问题,因为需求是“问题域”的范畴,而模型,则是“解答域”的范畴,试图通过解答域的精确描述,来实现对于需求的准确描述,肯定不靠谱啊。

 

  特征驱动,我认为FDD其实是老方法的新名词,具体的实践,可能更加接近测试、迭代式的过程。了解不过,所以我也不打算多说。

 

  用例驱动与测试驱动,其实我认为这是一个硬币的两面,用例要尽快的翻译为测试用例,而测试用例,正是为了更加准确的表述需求用例。这是我能够想到的,驱动项目开发的,最好的方法!

posted @ 2006-04-26 00:32 读书、思考、生活 阅读(29524) | 评论 (31)编辑 收藏
  几段在脑子里盘旋了很久的话:
 
  带一个项目,要保证项目的质量,当然要靠Team Leader的水平。那么,什么才是最重要的项目质量呢?当然是代码质量!一个软件项目,最重要的产品当然是代码!
 
  如果这个Leader看不懂项目的代码,他只能通过要求文档的质量,来间接的控制代码的质量。一个能够看得懂代码的Leader,他就能够直接控制代码质量。而能够直接控制代码质量的Leader,对于文档的要求,会合理很多。
 
  直接控制与间接控制,哪一个更加有效,是不言而喻的。当然,那些没有代码阅读能力的Leader,他们会更加强调文档的重要性,甚至舍本逐末,认为文档质量才是项目质量的体现。进而变态地追求文档完美,以至于浪费了程序员写代码的时间。这样的Leader,根本就不可能管好项目的。
 
  公司往往会出于恐慌,向员工要求很多详尽的文档,主要是为了防止员工离职带来的损失。而问题在于,公司的主要努力,应该用于留住员工,而不是用于加强“善后能力”。更不是为了增强善后能力,搞得员工越发想离开这家公司。
 
btw:
 
补记一段交锋对话:
软件开发项目中的成本比例》是我以前写的一篇blog,有一个GHawk有这么一段留言:
 
UP和Agile都是工程过程实践的总结,林德彰先生说过“UP是正楷,XP是草书。先学好了UP,才能学好XP;先学XP再学UP就会乱套。”
Agile强调的是“代码是真正有价值的东西。”这同样也是实践的结果。二位对于过程有不同的看法并不能说明孰是孰非,这只是在不同的实践内容和阶段上的总结。在过程的选用问题上,只有不断地实践才是前进的方向。 
 
另外还有一篇blog,专门讨论这句话。
 
我的回答是:
 
林德彰的说法,是一个在校教师,典型的和稀泥的说法,我不同意。
 
没想到今天有一个朋友WANG回了一帖:
 
老林是在校教师?你应该去看一下人家在美国打拼的经验~~  
 
我的回复是:
他在美国打拼怎么了?还有好多土生土长的美国人,也不鸟那什么UP呢?
我为什么要听一个海龟来上课呢?
这年头,海龟还不够多吗?

另外对GHawk多说一句话:让组员快速磨合的最好办法,是结对编程,而不是大家埋头写文档。
posted @ 2006-04-22 21:35 读书、思考、生活 阅读(29901) | 评论 (21)编辑 收藏
  我们现在这个公司的大老板,平时在三楼办公。但是,每天都会有几次,他会在我们的办公室里走来走去——“进行着聊胜于无的监督工作”。
 
  我想,他大概没有听说过“XP”、“结对编程”这样的名词。
 
  4月15日,周六,我参加了BEA上海User Group的一次活动。北京来的Charls,做了一次非常精彩的演讲。名字叫做《一个Xper的心路历程》。全场笑声不断,Charls的感染力征服了每一个人。
  演讲最后提出的一个观点是:“成为一个Xper,就是成为一个合格的程序员”。要勇于暴露自己的不足,要善于沟通,要谦虚,要有计划,要……做到了这些,我们才算是“刚刚够格”。
 
  我基本上已经被说服了……在Charls演讲结束的时候,我只想问一个小问题。因为他说,在项目组里,如果有人遇到问题,不要自己偷偷摸摸 的Google搞定,而是应该马上“举手”,看看小组里有没有人能够马上告诉你答案。这才是“勇于暴露自己的不足”。而我还想从另外一个角度问一下。
 
  (以下对话是一个大概的回忆)
 
  “我一直以来的工作方式是这样的,遇到问题的时候,首先Google一下,这样我不但可以找到当前这个问题的答案,还能够了解很多周边的知识,触类旁通。如果直接问人的话,问题解决,我也就不再深入了。这样是不是对于个人能力成长不太有利呀。”
  Charls:“项目进度在那里,当然是马上解决问题最好。”
  我:“那么我们是不是可以这么理解,XP对于项目开发的目标很有效,而对于程序员个人能力的成长目标,不是很有效?”
  Charls:“我一直这么说,XP更加高级的剥削方式……”
 
  顿时,我豁然开朗。XP的好处,从老板的角度来看,应该更多:
 
  结对编程——最有效的相互监督机制
  结对编程——最有效的内部培训机制
  测试驱动开发——最有效的质量保证体系
  User Story+客户现场办公——最低成本的需求收集、分析机制
  每日集成——有效降低集成、测试成本
  …….
  从程序员的角度来说,这些“与我何干”呢?

  所以,一个追求利润最大化的老板,就应该选择XP,而一个聪明的老板,不但要运用XP,还要保证8小时工作制,甚至给员工20%的 On Beach时间(来源于Gigix对于ThroughWorks的介绍)。这样才能保持员工的可持续编程能力。如果我是老板的话,我就会这么干!
  那天讨论的话题中,还有一些XP没能够很好回答的问题:
  比如文档。在我以前的开发实践中,我们都建立了一个Wiki,并且强制程序员每人每天就Wiki几次,以分散写文档的压力。
  比如对于人员的高要求的疑问。我的理解是,XP对人员提出了很高的要求,但是同时也提供了最有效的人员培训机制(结对编程),所以,对于入职人员的要求,并不需要很高,更多的是考察一个人的沟通能力、学习能力,而不是开发的能力。
posted @ 2006-04-18 06:44 读书、思考、生活 阅读(30158) | 评论 (9)编辑 收藏
决定不再玩连载的把戏了,总共就这么点文字,还不如一口气放出来算了。
 
这是以前写的书的初稿,后来因为打算全部推翻重写,所以将过去写的内容,作为Open Doc放出。
 

欢迎下载: AJAX——新手快车道

posted @ 2006-03-27 22:39 读书、思考、生活 阅读(6210) | 评论 (24)编辑 收藏
Crmky 独立开发Cindy,已经很久了~~~至今只有他一个人。
 
这是一个Java的NIO开发框架,我在上一家公司,和现在所在的这家公司,都已经使用了这个框架。但是,开发人员始终只有他一个人。
 
前天他写了一篇Blog:《目标》,对我有很大的触动。我也一直存在这样的疑虑,为什么我们要用Java开发网络应用?或者说,使用java开发的网络应用,难道注定只是一个快速原型,就像当年用VB开发桌面应用?一旦需要面对性能需求时,就得推翻过去的工作,用C/C++重新实现一遍?
 
现在,目标已经很明确了——“无限接近于C/C++效率的java网络框架”。这是Cindy的终极目标,而我则相当确信,我一定要为这个目标,做出贡献!现在,我已经是Cindy项目的第二名成员了

正好今天看到一篇Leal的blog。我能为开源社区做些什么?

zoomq在woodpecker上写道:

每日至少抽一刻钟解答列表中初学者的问题,
每周至少抽两小时整理新学知识,用Blog/Wiki/mail将体验发表/分享出去,
每周至少抽四个小时来翻译自个儿喜爱的自由软件的文档,
每月至少抽八小时编程,推进自个儿的项目,
每年至少参加一次自由软件的活动,传播自由软件思想,发展一名“自由人”……

只要我们每个人都坚持下去……
10年!就足以改变中国软件的整体风貌!

自接触电脑以来,自由/开源软件也一直给我诸多帮助和乐趣,Linux、Python、Vim凡此种种。当我有些业余时间,有些体会和收获时,又该为自由/开源社区做何回馈呢?


  我的思考是:参加一个项目,或者发起一个项目,使用一个项目并且提交反馈,宣传一个项目。不要仅仅是感叹中国开源项目的水平。如果你是一个程序员,那么,你也可以为之做点什么。

posted @ 2006-03-27 13:53 读书、思考、生活 阅读(3143) | 评论 (16)编辑 收藏
本来拿到的是一个20多M的MP3文件,还好找到一个工具,转了一下。还是微软的格式牛啊。
 
下载地址:
posted @ 2006-03-22 15:55 读书、思考、生活 阅读(3176) | 评论 (7)编辑 收藏

  我有很浓厚的“地图情结”,以前我写过一篇《我的信仰地图》,最近又做了一次关于Ajax的演讲,名字叫做《Ajax技术地图》。我一直以来的观点是,世界是一个整体,在这个巨大的世界之中,任何事物、任何知识,任何观点,都有其合理、自然的位置。理解这个世界的过程,就是逐步将需要了解的各种事物,在作为整体的一个世界中,找到其位置。了解这个位置的前后左右,相互关系,相互影响。这样的理解世界的学习方式,我认为是最为有效的。所以当我在JavaEye看到关于《代码大全》的广告时,我的第一反应就是:这不是世界地图吗?
 
  看了看他的目录,竟然有35章之多?架构、分析、设计、编程、测试、重构、面向对象、调试、规范、管理、软件质量控制、协作、优化、开发工具、注释、甚至个性、开发艺术等等等等,只要是与软件有关的,基本上他都写到了。
 
  说实话,我当时相当的不屑......可能吗?居然有这么一个家伙,能够像当年的托马斯•阿奎那一样,以一己之力,写出《神学大全》?CSDN的网站上介绍这个Steve McConnell,在1998年的时候,被Software Development杂志的读者评为软件业最具影响力的三大人物之一,与Bill Gates、Linus Torvalds齐名。一个写书的,能和两个写代码的天才齐名?网站上的那些推荐的话,个个都是大名鼎鼎,个个都是推崇备至。作为我这样一个有逆反心里的家伙来说,直觉上就是:“会不会呀,有这么牛吗?”

 

  当然了,我也不好多说什么,毕竟没有看过书~~~

 

  没想到好事居然找上门来了,博文视点的魏泉是我要写的那本Ajax书的责任编辑。而《代码大全》也是他们负责出版的。那天他找到我,说是让我看看这本书的书稿……看看能不能写一篇书评。这等美差,我很爽快的就答应下来了。

 

  一看之下,果然是很喜欢,作者的思考问题的方式,与我的方式相当的接近,都是尽可能将多种、甚至矛盾的事物,放在一个整体的环境中来理解。比如对于隐喻,用于描述软件开发的特征的各种各样的隐喻,其实各有其价值,如果能够组合运用,自然能够获得一种平衡。正如作者所说:“使用隐喻又是件说不清楚的事情(fuzzy business)。你需要适当地引申它的含义,才能从其中蕴含的深刻启发中受益。但若你过分地或者在错误的方向上引申了它的含义,它也会误导你。正如人们会误用任何强大的工具一样,你也可能误用隐喻,但它的强大的功效,还是会成为你智慧工具箱中的一个宝贵部分。”

 

  这样的一种看法,可以说“中正平和、深具智慧”,这是我们在大多数关于软件开发的论述中,很难看到的。

 

  再比如说,作者在第三章时给出的一个表格:三种常见的软件项目种类,及其典型的良好实践。就将软件分为商业系统、性命攸关的系统以及性命攸关的嵌入式系统。然后指出对于这三类不同的应用,在开发手段、管理强度、设计、构建、测试、部署等等方面的差别化策略。这样的分类,自然就避免了将各种开发手段,简单的对立起来比较的方法,显得更加具有说服力。

 

  再比如说,全书给出了相当多的Check List,这样的表格,实在是大有益处,借用地图的隐喻来书,这样的CheckList,就是一个一个的定位器,它能够帮助你认清自己的位置,了解问题所属的范畴,了解应该努力的大致方向。这样的“开发工具”,真是独一无二。

 

  这本书我目前只看了前面的5~6章,实在没有太多的发言权,不过我现在已经可以肯定,这是一本非常有价值的好书,我推荐所有没有看过的朋友去看看这本名副其实的经典之作。

 

  说实话,天下没有免费的午餐,我这篇书评,也是属于交差之作。人家出版社把样书给你看,请你写书评,当然希望你能说些好话幸运的是,这些好话,的确都是我自己愿意说的。

posted @ 2006-03-22 15:53 读书、思考、生活 阅读(5615) | 评论 (5)编辑 收藏
广州之行,真是匆匆又匆匆,在广州呆的时间,算上在飞机场的时间,都还不到24个小时。

个中甘苦,就不在这里说了,还是把PPT传上来吧。

之所以叫处女秀,是因为这是我第一次上台做技术演讲,但是这句话却不是我自己想到的,而是江南白衣说出来的。

PPT的标题是《Ajax技术地图》,基本上是一个纯粹空对空的理论探索,不出现一行代码。还好随后曹晓钢的演讲,同样是讲Ajax,充斥了无数的代码,相信广州的朋友们,一定爽到了。

 

PPT的下载地址是:
http://www.ajaxcn.org/space/start/2006-03-13/1/Ajax%E6%8A%80%E6%9C%AF%E5%9C%B0%E5%9B%BE.pps

 

广州游记和其他感想,就明天再补吧。

posted @ 2006-03-13 22:47 读书、思考、生活 阅读(2965) | 评论 (8)编辑 收藏
去广州参加BEA的User Group活动。
演讲题目是:《Ajax技术地图》
副标题是:为即将到来的技术变革做好准备。
 
11日晚19:45起飞,22:25到达白云机场。
12日晚19:25起飞,21:20回到上海。
 
奇怪啊,去要2小时20分,回来只要1小时55分。顺风、逆风吗?
 
得抓紧时间写PPT了
posted @ 2006-03-10 22:34 读书、思考、生活 阅读(1800) | 评论 (7)编辑 收藏

庄表伟 说:

JSVM,我觉得有一个方向可以尝试去发展,就是浏览器中的对象管理,起到一个VM的作用

dlee 说:

问题就是你敢不敢去做小白鼠,或者叫做生活在剃刀边上。对于一个严肃的项目,我做项目经理,是不会采用jsvm的。

庄表伟 说:

那为什么你就会采用prototype呢?

dlee :

prototype背后有强大的支持,而不是像jsvm那样只有万春华同志等很少的几个铁杆。

庄表伟 说:

为什么?你是看着哪边人多去哪边的吗?

dlee :

你看那些叫喊"""支持"""的人会不会贡献一行代码。你太容易非黑即白了。当然不完全是这样,不过支持能力是一个非常重要的考虑因素。

庄表伟 说:

我的意思是,JSVM,该不该用他,只能由我们看过他的代码以后,来决定?

dlee :

你有能力维护所有的代码吗?

庄表伟 说:

我只是用他呀,又不是要改他

dlee :

我的意思是说,如果你在项目中使用了SpringRod Johnson玩累了,明天就宣布解散这个项目。你自己独立去维护Spring的代码。你去用什么啊,它只有很少的UI组件,其中还有问题。 你不要夸口这些自己都能开发好,我两年前开发了一个比较好用的Grid,花费了一周多的时间。你自己去实现这样一个组件后再说话。

庄表伟 说:

我不是用他的UI呀,而是用他的这个框架,来组织自己的代码。

dlee 说:

你不用它的UI,有什么必要使用这个框架呢?dojo/prototype一样可以做到啊,我是认为你这样做引入了不必要的成本。况且你如何判定使用的UI库在设计理念上与jsvm完全没有冲突?

庄表伟 说:

OK,你现在已经有结论了,但是我还没有仔细看过他的代码呢,所以我现在还没有结论,等我看过以后,自然会有一个结论的。

dlee :

Ajax库这方面,大部分人都跟我希望的一样,需要一个全面的解决方案。你说的jsvm专精于做某个领域,我认为是行不通的。任何运行于浏览器的js框架都应该是为UI服务的。没有实现过很多UI组件,如何检验它的这个架构设计的合理性?

庄表伟 说:

目前看来,prototype,也只是专精于基础领域的,在它之上,另有script.aculo.usRicoBehaviour这样的lib

dlee :

你喜欢摆擂台,那么就摆个擂台,大家都实现Grid组件,看看谁做得好。

庄表伟 说:

呵呵,这倒是个好办法

dlee :

你可以跟醒来来详细讨论,问题不是你想想得那么简单。做小白鼠也有好处,晓钢就经常偷偷练习一些自己的独门绝技。

庄表伟 说:

呵呵

dlee :

你可以将我跟他的冲突理解为主要在一个领域,就是我不认为解决他所说的两个问题,需要这么重的方案。而且他的解决方案从JS开发者的角度看来也不是很优雅。

庄表伟 说:

嗯,这两点,我基本上是同意的

dlee :

万春华同志的兴趣不在UI组件方面,这使得他偏离了浏览器JS诞生的使命。今天我跟醒来说过类似的意思。 我们的分歧不完全在技术本身上面。因为我们思考问题的思路差别很大,所以没有出现很大的交集

庄表伟 说:

嗯,我比较理解你的意思了,但是,我不是很同意...

dlee :

你看过他们的代码了吗?

庄表伟 说:

看了一些

dlee :

代码的模块程度如何?有没有可能将醒来说的一些部分完全去掉?

庄表伟 说:

哪些部分?

dlee :

我觉得他们如果做一些更加清晰的划分,划分出一个最小的core部分,而且像Spring那样划分成很多不同的jar,这样会更好一些。最糟的情况是要么全有要么全无

 

  醒来 已经添加到此对话中。

 

dlee :

你既然对jsvm非常感兴趣,就和醒来先详细谈谈。我作为旁听好了。

庄表伟 说:

呵呵,好的呀

醒来 说:

好啊,我 最近刚看了jsvm的源码

庄,你觉得jsvm怎么样

庄表伟 说:

我刚开始看他的代码。说实话,我觉得他的js代码写得非常好,也很干净、清楚。因此,这样的一个人,写出这样水平的代码的人,对于js的理解,肯定是相当深入的。

醒来 说:

代码写的是真不错

庄表伟 说:

我以前曾经想当然的认为,他不了解js,只喜欢java,所以才会把js,扭曲成java的样子这样的想法,肯定是偏见。那么,在承认对方有足够的智力与经验的前提下,再来看他的代码,我觉得更不该"断然否定",说他"一无是处"

醒来 说:

我在javaeye 上提出了我的意见,我也认为他的代码写得很不错,但是侧重点有点不合时宜。现在真是有些像java虚拟机了,基本是一个classloader + class cache 的实现

庄表伟 :

还有这个:

a) 独立模式:standalone, 该模式下,当前页面的jsvm独立加载,不和系统中其他页面的JSVM发生关联。

b) 应用程序模式:application, 应用程序模式下的页面会除了加载jsvm以外,还将构造一个Application的环境。其他模块模式的页面会共享Application的资源。

c) 模块模式:module, 模块模式的页面必须运行在一个Application模式的页面下。该页面可以通过application框架共享资源以及访问全局变量。

d) 自动模式:auto, 页面根据环境自动选择是独立模式还是模块模式。

我觉得很有点意思

醒来 说:

从名字上来讲,jsvm倒是符合本意。但是java的成功不是只靠一个jvm的,我觉得 jdk 更关键

庄表伟 说:

现在的js库,除了jsvm,都是以一个Page为单位运行的,鲜有"Application"的概念。而VM的提出,我认为,为将来合理的Browser Object Cache Layer,提供了可能

醒来 说:

我有点怀疑,这样带来的复杂性有没有必要

庄表伟 说:

而且我还希望将来JSVM,能够更好的支持请求任务队列的管理,这样的机制,JS的语法本身提供得并不够好。还有多线程的管理,JS也没有像Java那样的,语法级的支持。

dlee :

我不大相信浏览器中的JS将来会被用在这样的目的

醒来 说:

其实我觉得,这些应该是浏览器提供的功能,在浏览器未发展到这个程度之前,强迫javascript畸形的实现,不一定值得

庄表伟 说:

嗯,这是问题的关键...我前面的畅想,的确是我希望将来的JS,能够支持的一部分

dlee :

是的,我们希望将来的JS引擎来提供这些基础设施

庄表伟 说:

现在JSVM,也许能够支持一部分,也许还不能够,所以,说不定哪天JS 2.0出来,JSVM就没有意义了

醒来 说:

所以对于jsvm的模式,应用程序模式还可以理解,模块模式很难让人明白有什么用

庄表伟 说:

这是一个思考模式的问题

假设你对于js本身不熟悉,要让你合理、自然的划分多个js文件,合理、自然的在该load的时候才去load,这就相当的费力

醒来 说:

所以我的意见就是,jsvm 希望吸引人来开发,应该要给出jsdk 差不多,一个jsvm 吸引不了人

庄表伟 说:

当然,更加正确的道路,当然是按照js的本性来做,提出某种"js loading design pattener"。但是,在经验还没有被总结成模式之前,模仿java式的代码组织,不失为一种方案

醒来 说:

load js 的模式其实现在都是 用一个同步的xmlhttprequest 去加载js,然后eval。这个 dojo prototype 都有提供基础支持

庄表伟 说:

不是如何loading。而是,我现在有几百Kjs文件,如何切分成合理的大小,然后在需要的时候去调用他们

醒来 说:

这个想法是对的,也是jsvm值得肯定的地方

我的主要意见是说它提供的 jsc 的形式有点鸡肋,同时缺乏简单高效的工具类,所以吸引不了开发人员。jsvm2 的代码里有 1/3 就是为了支持这个自创的jsc语法

庄表伟 说:

这是...败笔...jsc我也不喜欢,混杂了部分js语法和部分java语法...还不如仅仅规定一个必须的头部,其他的完全采用js语法呢。还有一点我觉得是这个万兄在那里畅想,就是JSVM打算支持多种语法的设想,工作量太大了。

dlee :

不过万春来同志说这个可以不用

醒来 说:

所以我建议索性抛弃jsc,以万兄的javascript功力,写一部分有用的工具类,我觉得不会有人真的愿意用 var map = new HashMap(), map.put(k, v); 这样的方式写js

庄表伟 说:

对的

dlee :

所以我刚才说:

我觉得他们如果做一些更加清晰的划分,划分出一个最小的core部分,而且像Spring那样划分成很多不同的jar,这样会更好一些。最糟的情况是要么全有要么全无。

醒来 说:

jsc 是可以不用,但jsvm 加载了接近80kjs就为了支持jsc, 没有意义啊

庄表伟 说:

他现在是有多个js的,只是他core的部分太大了

醒来 说:

庄,如果你去看runtime.js 就知道了,jsvm2其实把jsc都预先编译了,否则效率一定太低

现在甚至还有一些观点,不要把js分得太多,因为要激发太多的http连接,反而响应性更不好。毕竟js的加载是同步的 ,这各ajax的异步核心思想有冲突。

dlee :

这个考虑也是很有道理的

庄表伟 说:

激发太多的http连接?还是激发太多的同步http连接?

dlee :

那个所谓的classloader就是向服务器请求一个包含js类的文件,然后evaluate。而且也要考虑evaluate的执行效率

醒来 说:

每一个import 就是一个http 连接。当然,jsvm 考虑到了cache

dlee :

对的,就是发出一个xmlhttp请求

庄表伟 说:

其实,他完全可以将自己的jsdk,做成一个jsc文件,一口气load进来

dlee 说:

不是多个连接,这个要看服务器怎么配置。其实支持http1.1的浏览器和服务器都是保持长连接

醒来 说:

jsvmcache 也有些问题,他所谓的application模式,在不同的浏览器上实现各不相同,iejs源码用iehtc 技术保存的,ff 是存cookiecookie 的容量是有限制的,所以cache 主要是针对 ie

dlee :

可能是在同一个http连接上发送多个http请求,这些请求需要排队

庄表伟 说:

OK,我提一个方案,你们看是不是可以作为"最佳实践"之一:

对于多个异步请求,可以让他分次异步提交。

对于多个同步请求,应该将多个请求打包以后一次提交。

这个作为"请求队列管理"的一部分

醒来 说:

道理应该是这样,jsvm里好像没有这样的控制,import语句也没有这么智能

庄表伟 说:

其实jsvm应该这么做,比如他load一个jsc文件进来,里面的import语句可能有一堆,就应该是一口气load其他的jsc,不该再分多次了

醒来 说:

我总觉得 线程/队列 这些该是浏览器的事情,用js开发很不保险

庄表伟 说:

你看过我写的那个RSSReader的代码吗?里面就有一个请求队列的

醒来 说:

jsvm做不到,因为loadjsc里又有import 语句,这是递归的

庄表伟 说:

不是递归,是分层的

醒来 说:

要么js语言升级,要么浏览器升级,我总觉得现阶段就想让ajax完全达到替代桌面应用的程度是不可能的

庄表伟 说:

这个当然是不可能的...

醒来 说:

所以在现阶段,还是不要搞复杂了,多线程和队列能用到的地方毕竟不多

我觉得dlee强调的对的,现在需要的是组件

语言级别的东西,就让js语言和浏览器标准去慢慢支持吧

庄表伟 说:

我理解你们所认为的"轻重缓急"了。根本的观点在于:"急于将浏览器中应用,推向完全的桌面应用,并不现实"。立足于"更好的浏览器端应用",而非"尽可能像桌面应用的浏览器端应用",这么说来,当务之急自然是UI控件的完善与丰富

dlee :

我觉得浏览器中js诞生的使命就是改善交互和UI

醒来 说:

对,就是这个意思

dlee :

而且我从项目开发负责人的角度,更希望一个全面的解决方案。不是什么都需要我去做集成

庄表伟 说:

JSVM的问题,不在于他语法上像Java,而在于他的目标上像Java

dlee :

也可以这样来理解

醒来 说:

ajax 里的cache 应该是去cache 数据,用来cache js代码,意义多大呢,所以jsvm太技术化了

dlee :

Ajax in Action中,提出了一种独占式应用。就是像Word一样,可能每天都要用上几个小时。目前的Ajax技术,包括一些基础框架,还很难达到这个要求。所以确实需要这样一类基础架构,但是我们认为这些支持最好由浏览器和JS引擎来提供。

庄表伟 说:

看来我们已经初步达成共识了

醒来 说:

js 就是用来操作DOM的,不要让它承担太多重任,xmlhttp本来也不是 js的一部分,浏览器的扩展而以

dlee :

我发现现在很多人有一个通病。就跟我在那个ajaxmodel2框架的讨论中说的那样。毫不思考地就将一种技术或者架构用于设计意图之外的场合。其实把IFrame用于异步请求也是这个情况

醒来 说:

jsvm 的建议就是抛弃jsc,完善它自己的面向对象架构,并提供工具类支持,这样才有可能和 dojo 有竞争。所以在国外是称为  tricks,  是有贬义的意思,但翻译成中文,变成窍门,反而有了褒义了

dlee :

Ajax in Action的作者称作hacky的做法,带有贬义

dlee :

Ajax显得与众不同的地方不是它所使用的技术本身,而是通过使用这些技术所带来的新的交互模式。我们所习惯的传统的Web交互模型并不适合于独占式的应用,只有打破了这种交互模型,新的可能性才会慢慢浮现出来。

这是Ajax in Action的一句话,说得非常有道理。我们看到如此众多的人都对Ajax感兴趣不是偶然的。现在我们处在web app发生革命性变化的前夕

庄表伟 说:

嗯,我更关注:慢慢浮现出来的这些可能性中,哪些是正道,哪些是邪道

醒来 说:

我是觉得一定要擦亮眼睛,多从用户的角度想问题

庄表伟 说:

这是对的

posted @ 2006-03-02 22:05 读书、思考、生活 阅读(1864) | 评论 (1)编辑 收藏
1、今天,我到新的单位去上班了,地点在张江,是一家做手机游戏的公司。从我们家这里过去,要花1.5~2个小时。还好我在搭车网上找到了一部同去张江的车,每天来回15块,很不错。
 
2、到这家公司,我的工作是Server端架构设计,所以我最近急需补充很多Server端架构方面的知识。所我再一次看起了《POSA 2》,又在网上订了《POSA 3》、《Java并发编程—设计原则与模式(第二版)》、《Effective Java中文版》与《Practical Java(中文版)》。这下又有得要看了。
 
另外我还加入了一个Google Groups,叫做:高性能网络编程邮件列表
 
3、3月12日,我很有可能会到广州,参加那里的BEA User Group。
初步的题目是:《Ajax技术地图》

一、  技术地图概览

初步介绍一下,要研究Ajax技术,需要了解的相关技术的范围。

二、  结构(Structure)、表现(Presentation)与行为(Behavior)

介绍正统Web标准中的三大要素。

三、  模型(Model)、视图(View)与控制(Controller)

介绍正统表现层MVC模式。

四、  思考一:浏览器端的MVC

随着Ajax应用越来越复杂,浏览器端是否需要引入MVC模式呢?

五、  难题一:SPB与浏览器端MVC的关系

SPBMVC之间,应该是一种什么关系,需要有一个概念上的梳理。

六、  难题二:浏览器端MVC与服务器端MVC的关系

如果在浏览器端与服务器端,都定义出MVC结构,显然存在着冲突,这样的冲突,该如何调和。

七、  思考二:Web服务器的角色演变

提出一个思路,Web Server --> Web Service,也就是在浏览器端实现MVC模式,而在服务器端,分别实现Model ServiceView SerivceController Service

八、  一个三维的世界

一个地图,并非一个简单的平面,作为一个三维的世界,我们对于技术的理解,又可以分为三个层次:理论的层面、真实世界的层面以及作为整理世界一部分的层面。

九、  在真实世界中的难题

介绍一些目前Ajax应用开发中,真正存在的困难,困惑,苦恼,陷阱......

十、  思考三:对于整合世界的向往

C/SB/S能否融为一体?

开发工具能否一站购齐?

开发效率能否更快更轻松?

十一、          难题三:Ajax的能力限制

主要谈一谈Web应用无法跨越或者目前无法跨越的一些障碍,比如网络编程;比如线程控制;比如UI表现能力等等。同时也介绍一些前沿的进展。

十二、          难题四:开发工具的功能整合

简单介绍一下目前各家IDE对于Ajax的支持。

十三、          难题五:UI控件的重用与整合

自己从头做UI,实在是太麻烦了,用人家的,又有整个的麻烦,但是从提升开发效率来说,控件化开发,又是必由之路……

十四、          畅想未来

关于Ajax技术的一些畅想。

因为发现与曹晓钢的Topic严重撞车,所以可能还会做一些修改~~~
posted @ 2006-03-01 21:58 读书、思考、生活 阅读(936) | 评论 (2)编辑 收藏

AJAX——新手快车道

 

前言

 

AJAX是什么?

 

首先、AJAX是一种很酷的技术,一旦采用了AJAX,就能让你的Web页面,你的网站,甚至连同你们公司,都变得很酷。在Web2.0的时代里,不使用一点AJAX技术的网站,就会显得很老土,很落伍。

 

但是,这样的理解,其实是很肤浅的。仅仅是从一个外行,从一个使用者的角度出发,来理解AJAX,就像我在本书的第一章AJAX我也行中那样,开发出很愚蠢,甚至都没有资格被称之为AJAX应用的纯IEXMLHTTP应用。

 

AJAX更酷的一点在于,对于传统的Web开发人员来说,AJAX所运用的,是更加先进的,更加标准化的,更加和谐高效的,完整的Web开发技术体系。遵循这样的体系开发Web应用,能让你的开发过程变得更加轻松,也能使你们的开发团队,显得很酷。在Web2.0的时代里,还在采用过时的技术来开发Web,会显得很老土,很落伍。

 

AJAX的相关组成技术,每一个都已经出现了N年以上了,对这些技术的组合运用,也远远早于AJAX这个名词出现之前。所以,我真正敬佩的,并非提出
AJAX
这个缩写的Jesse James Garrett。而是那些早在N年以前,就已经在探索、实践的先行者,他们始终在追求的:是更好的用户体验,以及更好的开发体验。这样的精神,才是最可宝贵的,也是最值得我们学习的。许多年过去以后,当我们再回头来看当年的这些热门技术,也许早已经变得老土,变得落伍了。在这样的历程中,哪些人会成长为高手?会成长为大师呢?就是那些永不满足,永远在追求更好的用户体验,永远在追求更好的开发体验的人!

 

新手如何上路

 

软件开发这个领域,永远都在飞速发展,大家都必须不断的学习新的知识、技能、框架、IDE、甚至新的语言。传说中的骨灰级高手们,就像传说中的大侠,任何武器、哪怕是一块木头到了他们手里,也能发挥惊人的威力,人家练了几十年的看家本领,他们随手使来,也竟然像是打娘胎里就开始练了一样。为什么?

 

就算不吹那么玄的,平常我们能够碰到的那些老手,在学新东西的时候,也比那些新手学得更快,理解得更深,运用得更熟练。而新手们呢?往往就会漫无头绪,焦头烂额,以一副张着茫然的大眼睛的经典表情,出现在各大论坛的新手求助区里。他们欠缺的,究竟是什么呢?为什么老手学新东西,就没遇到那么多困难呢?

 

泛泛地说,自然是经验上的欠缺。仔细地说来,又可以分为三个方面:

 

一、本质,一种技术与另一种技术之间,往往会有本质上的相通之处,当你对一种技术的理解与思考越来越深入时,学习一种新技术也会更加容易。触类旁通,举一反三的能力,就是来自于对于技术本质的追寻。

 

二、地图,本质上或多或少的相通,也提示着我们技术之间的相互关联,当你了解的技术越多,了解得越是深入,在你的内心,就能建立起越发清晰的技术地图。各种知识都有一个自然、合理的位置。那么当一个老手要学习一门新技术的时候,他其实并非在探索一个全新的、未知的领域,而是有很多脉络可寻,也很多已知可以帮助他们快速了解未知。

 

三、技巧,面对同样的未知,面对同样的难题,新手们一筹莫展,而老手们却掌握着更多的技巧和手段,帮助他们试探可能性、缩小问题的范围、迅速定位问题、不犯明显愚蠢的错误、甚至能够列举出更具命中力的搜索关键词,而这些技巧,都帮助老手在前进的道路上,更少跌倒,即使跌倒,也能更快的爬起来。

 

作为一本写给新手的入门书籍,我们希望展现给读者的,是一个老手如何学习新技术的过程。我们相信,这样的一个学习过程,对于新手来说,是更具有价值的。

 

何谓快车道

 

必须老老实实的承认,我吹牛了!老手虽然会比新手学习得更快一些,但是也同样会碰到麻烦,遇到障碍,感觉头痛。如果没有真正的专家的指导,我不可能如此迅速地将AJAX掌握到目前这样的程度,要真是让我自学三个月,然后就写出书来的话,那真是在骗钱了。

 

老手能够快速学习的另一个重要的诀窍是:认识很多牛人朋友J

 

如果没有李锟与赵泽欣的专家级指导与帮助,如果没有与李锟AJAX结对编程的体验,如果没有三个人在MSN上无数次的长聊,我想要在短期内建立起:

 

对于AJAX本质的理解;

对于整个AJAX以及相关技术地图的理解;

对于AJAX编程开发所需要的很多技巧、手段的掌握;

几乎是不可能的。

 

如果没有(N多需要感谢的人)的(N多方面的帮助),我们这本书,也不可能以现在这样的深度,以(N个月)内完成的速度,送到读者的面前。

 

希望这本书,能够对大家快速学习AJAX,有所帮助。

 

这是我原来写的前言,自我感觉,写得还是不错的。可惜啊,这最后几段,现在看来是用不上了。

posted @ 2006-03-01 21:57 读书、思考、生活 阅读(4684) | 评论 (39)编辑 收藏
  最近MyEclipse推出了支持Ajax的最新版本,Eclipse也有了一个The AJAX Toolkit Framework (ATF) Project。再加上Sun正式发布Java Studio Creator 2,其中提供了对Ajax的支持并且提供了一组易用,易部署的基于Ajax的UI组件。可以想象,支持更加方便的IDE的Web开发工具的时代,即将到来。我也来设想一下,我理想中的Ajax IDE吧。
 
  1、可视化,但不是直接编辑。类似于Dreamweaver,但是应该再增加一个独立的DOM Tree。任意选择一个DOM节点,就能够高亮相关的CSS规则。任意选择一个CSS规则,就能够高亮受影响的DOM节点。开发工作,是对于DOM Tree的操作+对CSS规则集的管理。而不是直接手动去拖拽页面元素。
 
  2、智能的CSS优化。那么多CSS规则,甚至是跨页面的CSS规则,有多少是可以重用的,有多少是可以归并的,有没有可能设计出一个CSS优化算法,鼠标一个Click,一切就完美了。
 
  3、JavaScript的Debug。基本上能够做到MyEclipse那样,就非常棒了。
 
  4、代码智能感知。MyEclipse似乎也能做出这个效果,就是不知道准确性是多少。
 
  5、代码重构支持。不止是JavaScript的重构,还有XHTML、CSS的重构......
 
  6、JavaScript基础库生成。如果有这样一个Wizard,我能够选择针对的浏览器平台、版本、想要用到的功能......N多选项,然后它就帮我汇集众家之长,去掉无关的代码,在生成一个我需要的JS文件。这个世界就近乎完美了。
 
  7、集成各种UI组件库。各种好的UI,在线Update,拿来就用。
 
  8、UnitTest的完善支持......
 
差不多了,就遐想到这里吧...
posted @ 2006-02-05 22:53 读书、思考、生活 阅读(1487) | 评论 (1)编辑 收藏

鸡年最后一篇blog,一堆乱七八糟的东西,也就不分多篇了。

 

一、维基百科的访问记录 

  • 2006年1月1日8:55湖北武汉电信修改hosts文件,使用原hosts无法访问,将145.97.39.132换成145.97.39.134能访问,速度正常.
  • 2006年1月1日10:50,广东深圳,电信ADSL,通过国外代理登陆成功,否则无法登陆
  • 2006年1月1日23:46山东省济南市广电修改hosts文件,用IE成功登陆.
  • 2006年1月2日6:15山东潍坊市,正常连入.
  • 2006年1月4日16:59,北京,教育网,需要代理.用维基提供的145.97.39.*代理访问很快.
  • 2006年1月6日20:00湖南长沙.145.97.39.132、145.97.39.134均无法使用.使用144登录成功.
  • 2006年1月6日20:04,武汉,中国电信ADSL,只能使用145.97.39.138或140两个维基代理;其他维基代理无法找到服务器,使用145.97.39.130代理服务器出现404页面.
  • 2006年1月9日13:25,江苏常州中国电信ADSL不可直接访问(用[1][2] 访问成功)
  • 2006年1月11日10:04,武汉,中国电信ADSL,使用MultiProxy可流畅访问,使用tor+SocksCap32组合包不能流畅访问.
  • 2006年1月11日13:44(utc+8),广州,使用[3]登陆.原站无法登陆.
  • 2006年1月11日23:00河南郑州河南网通ADSL不可直接访问现在使用自由门5.5
  • 2006年1月12日17:30,辽宁沈阳辽宁网通不可直接访问现在使用自由门5.5
  • 2006年1月12日17:54,北京host文件不知道为什么不灵了不知道ip是不是有变化还是现在不只封锁dns了用无界6上来的
  • 2006年1月12日00:16,香港PCCW可以直接访问
  • 2006年1月12日3:22,成都,中国电信ADSL无法直接访问,无界浏览6.9访问成功
  • 2006年1月12日10:02,吉林长春,网通ADSL,直接访问不能,通过代理服务器成功
  • 2006年1月13日1:40,内蒙古联通,不能直接访问,通过无界浏览6.9访问成功
  • 2006年1月13日3:20,深圳联通,不能直接访问,FreeGate5.5代理访问成功
  • 2006年1月13日香港时间23:26深圳中国电信ADSL不能直接访问,使用无界6.9可以成功访问
  • 2006年1月15日秦皇岛铁通adsl,可以直接访问
  • 2006年1月15日23:52山东网通不可直接访问代理访问
  • 2006年1月15日15:00天津网通ADSL不可直接访问现在使用自由门5.5今天搜索到一个网站大陆可以直接访问[4] ,是不是维基的网站啊,看地址像是个商业网站,还有SOHU的广告,是不是假冒网站啊,有人解释吗?
  • 2006年1月15日23:34北京网通不可直接访问在爱问上找到了下面这个上来的
  • 2006年1月17日0:23北京网通ADSL不能直接访问通过香港电讯盈科代理速度正常
  • 2006年1月17日17:20吉林长春网通ADSL不能直接访问通过torpark代理速度非常快
  • 2006年1月18日22:38福建电信ADSL不可直接访问通过代理正常
  • 2006年1月19日14:02黑龙江中国电信不能直接访问通过torpark代理速度非常快
  • 2006年1月23日23:01黑龙江哈尔滨市,网通,torpark代理
  • 2006年1月27日16:09上海电信,代理
  • 2006年1月27日23:29上海电信,Free Proxy
  • 2006年1月28日16:58,青海西宁,电信ADSL上网,利用自由门正常连入,速度正常。

GFW哪怕再伟大,也不可能真正的隔断Internet......

 

二、最近看的几部电影

1、《一个馒头引发的血案》,狂笑类电影,非常之出色。以至于我居然兴起了想看看这部电影的原材料的心思。

2、《无极》,唯一的长处是给《馒头》一片提供了原材料。我那天看了前面30分钟,实在是看不下去了。

3、《小强历险记》,出色的构思,传奇式的拍摄,这一切在颁奖典礼那天达到了最高潮。然后事情就演变成了一出活剧,黑色得不得了。还是六哥——张立宪的总结有道理:

零诚意  零新意  零意义  零特技  零演技  零逻辑  零成本
零床戏  零打戏  零哭戏  零专业  零职业  零事业  零票房

这42个字,竟然是一字都不可改,佩服啊!

4、《金刚》,有无数的人推荐这是一部好电影,还有好多看到最后哭出来了。我看了以后,一点都不喜欢。这不是一部人道主义的电影,而是一部“猿道主义”的电影。死了那么多的人,也没见到谁难过一下,最后死了个巨猿,倒变成“悲剧”了。荒谬!

5、《僵尸新娘》,绝对好看,创意十足,充满温情,人性的光辉由此得以体现。

 

三、一个域名

打算申请一个域名:www.rsslife.info

大概的意思是:Rich Smart Simple Life。具体想做什么,暂时就不透露了。

 

四、春节晚会
还是那么烂,而且一年比一年烂。小品和相声都没法看了。歌舞还不错。

 

五、原创祝福短信

狗年新春旺旺旺,

身体健康棒棒棒。

吃饭睡觉香香香,

工资收入涨涨涨。

原创短信一条,诚意拜年,庄表伟。

posted @ 2006-01-28 23:43 读书、思考、生活 阅读(1079) | 评论 (1)编辑 收藏

  结构(Structure)、表现(Presentation)、行为(Behavior),是Web开发标准中的一个重要概念(以下简称SPB)。而模型(Model)、视图(View)、控制器(Controller)的MVC模式呢,是图形界面应用的重要模式之一,自然也广泛的用在了Web应用的开发之中。

  最近热门起来的Ajax技术,又刺激了人们对于MVC模式的更多思考。本文的很多观点得到了jasonhsu的一篇论文《基于递归MVC结构的Web应用软件分析模式》的启发,特此感谢。

 

  现在我们要考虑技术范畴:SPB、MVC与Ajax之间的相互关系,或者说,在采用Ajax技术的Web应用中,SPB与MVC之间,应该是怎样的一种关系。

  左边是一个标准的SPB模型,结构通过CSS渲染之后,显示给用户。JavaScript可以通过DOM API以及DOM Event与结构交互。

  右边则是我将JavaScript部分放大之后的情况。

 

  大致上,我们写一个稍微复杂一些的Ajax应用的时候,JavaScript部分,就应该一分为三。一部分是用来做DOM与Style控制。另一部分则专心与Server打交道,通常就是用XMLHTTP了,然后将获取的数据,在浏览器中构建一个Model层。再一部分就是表现层的业务逻辑,主要需要处理各种Event,做出正确的反馈。

 

  这样的三个部分,顺理成章的,也就成了Browser中的MVC了。

 

  写完这点东西之后,我再次看了一下jasonhsu的文章,以及Ajax in Action中的第四章《The page as an application》,发现我的思路似乎与Ajax in Action中的思路几乎完全一致,而与jasonhsu的有所差别。

 

  虽然人家已经说了,不过我毕竟是自己想通了这一层的,嘿嘿。

posted @ 2006-01-26 23:52 读书、思考、生活| 编辑 收藏
  “吃药”是一句上海话,就类似于“被晃掂”的意思。
 
  大家先看看这段代码:
<div id="a">
</div>
<script type="text/javascript">
var node=document.createElement("div");
node.setAttribute(
"class","test");
var tn=document.createTextNode("Test1");
node.appendChild(tn);
var a=document.getElementById("a");
a.appendChild(node);
</script>
  它在FireFox里能够正确运行,一个class为test的div,被正确的显示出来了。但是在IE里面,死活就是不行。
 
  后来我才知道,不能用setAttribute,而是得用setAttributeNode
 
<div id="a">
</div>
<script type="text/javascript">
var node=document.createElement("div");
var attr=document.createAttribute("class");
attr.value
="test";
node.setAttributeNode(attr);
var tn=document.createTextNode("Test1");
node.appendChild(tn);
var a=document.getElementById("a");
a.appendChild(node);
</script>

 

  犀牛书里是这么说的:“通常,用setAttribute()方法,比用setAttributeNode()简单。但是,要为XML文档定义一个性质包含实体引用的性质时,应该使用setAttributeNode()方法。

  什么叫XML文档呀?什么叫性质包含实体引用的性质呀?反正我在IE里,搞搞HTML文档,就是出不来,用了setAttributeNode,就成功了。

 

  所以,我“吃了犀牛书的药”了。

posted @ 2006-01-25 01:23 读书、思考、生活 阅读(807) | 评论 (0)编辑 收藏
一个初步的想法,先简单说一下。
 
1、最初的图形用户界面,都是代码堆出来的,用代码来画界面,用代码来响应事件,用代码来处理事件。
 
2、OO风潮一起,GUI的框架自然也要跟进,基于控件的GUI开发,大行其道。
 
3、最初的Web,根本无法与GUI应用同日而语,反而能够不受太多OO思潮的干扰。独立发展出了:结构、表现、行为三分离的架构模式。也就是XHTMLCSSDOM/ECMAScript
 
4、基于控件的开发,封装细节,因此也各自独立。大家通过消息机制来沟通。这样就导致有一部分逻辑是被封装在控件内部,另一部分则散布在控件“四周”。
 
5、DHTML->AJAX->XUL这样的发展思路,显示了另外一种开发GUI应用的可能性。结构与表现分离,要修改界面效果,自然是修改CSS来得方便。结构与行为分离,自然能够对所有的“动作部分”集中思考。
 
个人认为,后一种GUI应用开发的架构模式,是更加合理的。
posted @ 2006-01-22 11:25 读书、思考、生活 阅读(1543) | 评论 (0)编辑 收藏

记录MSN上与北京姜伟的对话: 

jiangwei说:
主题标引其实是我们的副业,不过进展很快,昨天又把主题关联做完了,效果还不错。
jiangwei说:
其实现在聚类算法挺多的,我们试了几种,各有优缺点,现在准备根据项目的需要,选择一种给用户。
庄表伟 说:
哦,我那天还想到一个思路,我一直认为原来的主题词那样的“用、代、属、分、参、族”的结构实在是过于复杂了。
jiangwei说:
愿闻其详
庄表伟 说:
于是我就想,能不能以这样一种方式来定义主题词:
1、所有的主题词,都是平行的,没有高低之分
2、主题词之间,只有两个关系:相似度、相关度;
3、所有相似度与相关度的数据,都是从人们自行定义的tags情况计算得来的
4、根据词频统计,计算出推荐用词
庄表伟 说:
然后,专家就可以休息了
jiangwei说:
哈哈,有意思的想法,我仔细想想。
jiangwei说:
所有相似度与相关度的数据,都是从人们自行定义的tags情况计算得来的。我觉得这个最难。

庄表伟 说:
有一个网站你知道吗?
http://del.icio.us/
jiangwei说:
知道
庄表伟 说:
同一篇文章,有多人收录,每个人各自独立的设置自己的tags
庄表伟 说:
相似度,就是“两个tags,分别被不同的用户,用于同一篇文章的概率”
相关度,就是“两个tags,被同时用于一篇文章的概率”
jiangwei说:
我当时同keso争论的就是如果同一个概念,如果不采用受控语言来表达,如何被广大用户解析和理解的问题。
庄表伟 说:
比如一篇文章,一个人定义的tags是:“软件、Windows”,另一个人定义的tags是:“编程、Windows”
庄表伟 说:
那么,软件与windows之间,编程与windows之间,都有了相关度
庄表伟 说:
而在软件与编程之间,就有了相似度
jiangwei说:
这需要一个中间桥梁,你这里的是windows,如果用户有的用windows,有的用视窗,有的用微软平台,有的用window,有的用windowsxp,等等,怎么办?
庄表伟 说:
因为是多人收录,所以,就有一个词频的数据,对外展示一篇文章的主题词时,就显示为用户最多用户选择的,也即是推荐词库中的词了。
庄表伟 说:
在民主与集中之间,可以有一个算法的桥梁,并不是绝对不同的
jiangwei说:
我看了365key,感觉里面的tags还没有真正发挥作用。
庄表伟 说:
http://del.icio.us/
干净很多,非常舒服,keso自然是不用的
jiangwei说:
365key那个网站我感觉黄赌毒太多,真想不到后台是刘韧和keso他们。
庄表伟 说:
唉,那是因为在一个“追求点击率”的国家
庄表伟 说:
365key有两个排行榜,一个是收藏榜,一个是点击率榜,如果只有收藏榜的话,365key就干净了
庄表伟 说:
但是,他们哪里舍得去掉这么个点击榜呢?
庄表伟 说:
http://spaces.msn.com/members/zbw25/Blog/cns!1pA6-3FOo9yNp_4lmEHxdDqA!836.entry
jiangwei说:
我现在有想法将365key结合我们的东西用于政府网站平台中,你觉得前景如何?
庄表伟 说:
这是写的一篇新的blog,里面也有一些创意的
庄表伟 说:
那还不如将RSS、tags,引入政府内部网呢
jiangwei说:
是的,就是这个思路,rss、tag
庄表伟 说:
但是是用于内部网,就是给内网的公务员、领导们看的
庄表伟 说:
还有一个好的东西,也可以引入政府内网,就是像baidu新闻,那样的RSS关键词订阅。
jiangwei说:
我们想得完全一样啊,这个东西就是我们即将用于北京市公务员门户和北京市领导决策系统中的东西。
庄表伟 说:

jiangwei说:
思路同你是完全相同的
庄表伟 说:
这个东西,非常的Web2.0啊
庄表伟 说:
推向公众,我认为,也是能够赚大钱的。
jiangwei说:
是的,我就是想把web2.0用于这两个项目,看看实际效果到底如何
jiangwei说:
这个项目的中标单位,################
jiangwei说:
但是他们都会用我们的主题标引和主题关联技术
jiangwei说:
其中一个应用是每天抓取网上的新闻,然后聚类和关联,给领导和公务员看。
庄表伟 说:
不错的
jiangwei说:
抓新闻的那家号称巨牛,专门抓动态网页和数据库
jiangwei说:
我们下周就要联调了
庄表伟 说:
呵呵,已经快做完了呀
jiangwei说:
但是我觉得信息可视化这方面还没有做好,我准备在这上面再下下功夫
庄表伟 说:
信息可视化?
jiangwei说:
就是如何图形化地展现这些信息及其关联
jiangwei说:
包括后台对这些新闻的统计和分析
jiangwei说:
比如:一周新闻关注热点,一周公务员关注热点之类的。
庄表伟 说:
http://home.wangjianshuo.com/cn/20050616_ajax_eeaec.htm
庄表伟 说:
给你看个blog
jiangwei说:
这些都很有启发,你有这么多创意,干吗不自己写一个结合上述优点的东东出来。
庄表伟 说:
唉,人的精力是有限的呀
庄表伟 说:
现在有出版社在约我写一本AJAX新手入门的书,正在努力写作过程中
jiangwei说:
希望早日拜读大作。其实我们的精力也很有限,都放到中文智能处理应用领域了。其实这些创意从技术上看都不难实现,但是如何整合应用,如何被大多数人(不是少数精英)接受,就不是那么容易了,我现在也只是想在下范围(政府内网)中尝试一下。
庄表伟 说:
我们大概会在3月以前写完,具体什么时候出来就不知道了。
庄表伟 说:
王建硕的那个随手标注的AJAX应用,倒是很值得引入政府内部网,在Web页面上,随手划划,就能批注了。
jiangwei说:
是的,而且实现起来也不难。
庄表伟 说:
是啊,领导们肯定会喜欢的
jiangwei说:
但是在政府里面的应用,有很多不是技术问题,就比如这个,我脑子里面想的就不仅仅是好玩,而是它到底给政府工作会带来什么
庄表伟 说:
能够统计到“关注点与关注程度”
jiangwei说:
王建硕是365key的作者吗?
庄表伟 说:
不是呀,他是kijiji的创办者
jiangwei说:
现在在北京吗?我看了他的blog,觉得同你一样,很有深度啊
庄表伟 说:
呵呵,应该是在上海的
jiangwei说:
可惜可惜,不能当面交流请教
庄表伟 说:
他是一个很出名的blogger,比我出名太多了
jiangwei说:
看材料他在微软干过6年
庄表伟 说:
是啊,牛人
庄表伟 说:
http://forum.javaeye.com/viewtopic.php?t=15308
庄表伟 说:
这好这里有一个我写的blog,还有人家的评论
jiangwei说:
里面的“互助式搜索”,提法真好!!
庄表伟 说:

jiangwei说:
“inverted table中 每个词,每个场景 每篇文档都是独立的”这是现有搜索问题的实质。
jiangwei说:
也就是没有语境
jiangwei说:
全新的客户端软件+全新的搜索服务模式+互助式的搜索协作机制=下一代搜索技术,完全同意。
庄表伟 说:
哈哈,总算是找到知音了
jiangwei说:
因为我也是这样想的,也找到知音了
庄表伟 说:
弄一个这样的软件,咱们就能成为下一个Google!!
jiangwei说:
是很有可能的
jiangwei说:
“标记主题词看起来可行, 但实际上我想难度很大.
并不是所有用户对这种标记主题词的"贡献"感兴趣.”你对这个怎么看?
庄表伟 说:
这就要用到你们的智能辅助标引了
庄表伟 说:
用户如果不想自己动脑子的,只需要认可机器的选择即可
jiangwei说:
这是知识管理的一个问题,每人都希望得到别人的,但是却不愿奉献自己的。
庄表伟 说:
但是,他总是希望能够管理自己的知识的
庄表伟 说:
为了管理自己的知识而设置tags,不只是贡献给别人
jiangwei说:
我现在在设想一种机制,奉献得越多,得到的越多。也就是说,你奉献的tag数量越多,被引用得越多,你越有能力查询到更多的人和信息。
庄表伟 说:
这在公众中大概可行,在政府中肯定不可行
庄表伟 说:
奉献tags数量最多的秘书,权限不够
jiangwei说:
是的,我感觉是这可能是一种与google和百度现在的利润模式不同的商业模式。
庄表伟 说:
对的,我们可以给他一个新的名字,叫做“社会化搜索”
庄表伟 说:
也可以缩写为SNS
jiangwei说:
我们的最新版本中,已经加入了搜索的功能,现在我们对外介绍的时候,有时候称为“智能搜索客户端”
jiangwei说:
不是可以强调标引功能
jiangwei说:
在这种方式下,用户实际上是用文章找文章。我称为“文索未文”
庄表伟 说:
我想起来了,你当时的那个PPT,用了N多自造成语,实在是精彩
jiangwei说:
实践证明,尽管现在还是调用的google和百度,但是精度和相关度确实很高。
庄表伟 说:
能够理解
jiangwei说:
如果google和百度能够针对这个技术进行优化或者在排序策略上进行调整,效果肯定会非常好。我自己现在用luccent检索,就是想用试验证明这点。
庄表伟 说:
你写不写blog的?
jiangwei说:
不写
庄表伟 说:
唉,可惜啊
jiangwei说:
好的想法都是在msn上同朋友交流的。
jiangwei说:
原来知识管理网站有个朋友让我写,我发觉还是不习惯。
庄表伟 说:
blog不是写文章,而是把自己的想法记下来
庄表伟 说:
随时想到了,就记一点,渐渐的就写习惯了
jiangwei说:
其实我在搜索、标引、信息可视化、知识管理和数据挖掘上,是有很多想法的。
庄表伟 说:
甚至我有个朋友,自己的BLOG上,都是贴的MSN对话
jiangwei说:
呵呵,你也可以贴咱们的对话啊,我没有意见。
庄表伟 说:
对于以后整理自己的思路,很有帮助的

posted @ 2006-01-14 23:48 读书、思考、生活 阅读(417) | 评论 (0)编辑 收藏
我以前说过一段话:“花费6/7的工作量,去保证那1/7的,有价值的工作。这不是太浪费了吗?”
 
结果纯粹思维居然不同意:“老大,你真的是孤陋寡闻了。人均900行/月,已经是比较高的productivity了。我们公司人均300行,照样是500强,照样销售几百亿美刀。“花费6/7的工作量,去保证那1/7的,有价值的工作。这不是太浪费了吗?”,你又错了,如果那1/7的工作有问题的话,你恐怕花100/7都补不回来。好好看看软件工程的书吧,特别是和software cost相关的章节。”
 
还有这么一段话:“老大,你的思维不会还停留在认为只有代码才是真正有价值的东西,或者说只有编码才是真正的开发工作,或者打心眼里还是认为一来就开始编码最好的层次上吧。”
 
我的确是比较无言以对,只能抄点东西给他看看,鉴于纯粹思维同志,比较喜欢中英文夹杂式的表述,我也搞点花样:
 
个体与交互过程 over processes and tools 
能够工作的软件 over comprehensive documentation 
客户合作 over contract negotiation 
随机应变 over following a plan
 
为什么要这样中英文夹杂呢?因为那些英文是纯粹思维同志相当熟悉的,而这些中文可能是他根本没有想到过的!
 
关于PMP,我倒是从来没有觉得一个PMP有什么了不起,学习PMP,只是让我更加深刻的认识到,以“工程方式管理软件开发项目”,是何等的缘木求鱼
 
至于PV、EV、AV这种纸上谈兵的东西,我都已经忘光了。所以呢,你不认我是个PMP,就不认吧,我现在也的确不是个够格的PMP了。
 
我现在的已经进步了,我的确是认为:

代码才是真正有价值的东西!
posted @ 2006-01-14 14:13 读书、思考、生活 阅读(2840) | 评论 (10)编辑 收藏
[安替]我的态度:关于微软事件和美国国会可能的立法
 
今天有美国媒体打电话询问我,说美国国会有议员即将发起针对类似雅虎、微软等和中国政府合作公司处罚的立法提议,问我什么持什么态度。我在这里发表一个公开声明,解释我的立场。
 
对于微软封我博客,我的态度反复对媒体说过了。1)微软此种行为,侵犯了我的言论自由,我表示抗议。2)微软在没有警告的情况下,删除我的全部博客,不给我任何机会备份,这种对用户的恶劣态度实在摧毁了我之前对微软的信任。3)我保留对微软采取进一步行动的权力。
 
后来微软竟然后来解释说是为了遵从当地法令,这等于把我们这一批因为讨论新京报事件而被删除空间的作者陷于发表非法言论之“犯罪嫌疑人”之处境;因为压力而妥协是一错,因为掩饰妥协行为而构陷受害人于不义是更是错上加错。
 
对于微软这种行为,中国人不能对之惩治,是中国人的耻辱。我们尚不能有任何方法在中国保护自己的言论自由,这也正是我们这辈人仍旧需要继续努力下去的根本原因。总有算帐那天,只要我还活着,我说过,像微软、雅虎此种不义行为,就一定会被惩治,别侥幸能被大家忘掉,未来中国的基础教育普及费用,恐怕都要从这些大公司的赔偿款中出:赚钱之日请先想想未来。我们能活着,并且不失去理想,就是相信历史,相信正义之神必然会眷顾中华,让悲苦者平反,让受害者申张。
 
至于美国国会议员要立法如何如何,这完全是美国人民的事情。我不觉得中国人的言论自由是美国国会能捍卫得了的,一个伟大国家公民的言论自由需要他国国会来庇护,这种想法本身就说明了这个国家离我们盼想的伟大有多么遥远。我的博客被封以及我对言论自由的抵死捍卫,不能自然为美国国会的相关立法背书。
 
说得再清楚点:我需要的是中国国会的立法,我需要的是中国人来立法捍卫中国人的言论自由。今天不能,明天必然会能。这是我们活下去的唯一光荣和梦想。
 
一个国家之所以伟大,就是因为其中还有一批人不愿意放弃民族的理想,并且愿意扎根、牺牲、奉献。我们今天学习华盛顿的政治、纽约的经济和加州的文化,完全就是因为我们对自己的民族有着坚定的盼想——总有一天,我们生活在南京、北京、香港和台北的儿女,能共同享受自由、民主、富裕、和平的生活。而这一切的一切,都需要我们中国人自己来努力争取,因为只有我们才能刻骨铭心地体会到彼此的甘苦。
 
在美国的法庭申张正义,不代表正义也在国人心中得以申张。雅虎、微软是否被美国法庭惩治,这实在不是我们能关心了的,我们实在需要关心的是,对中国人自己的权利,我们中国人能保护多少,甚至说,能减少侵犯多少。有一个网友说的好,耻辱其实是我们自己的。
 
另外,当全球化和政治打包在一起的时候,我不认为任何黑白一刀切处理能事实有利于中国人自由权利的增长。一方面微软以封博客的方法阻碍中国人的言论自由,但另外一方面MSN空间在这一年实际扩张了中国人用博客言说的能力和意愿,而MSN Messenger也影响了互联网信息的传播方法,这是资本追逐市场所造成的实际两面效果。美国人如何判断这个问题,如何加以惩罚,实在是美国人自己的问题,但我个人以为,如果完全阻断妥协的公司进入中国市场的机会,那至少在短期内,中国网民不会由此变得更加自由。另外,必须区分雅虎的出卖和微软的妥协,这是完全不同的事情。
 
我们处在一个极其复杂的处境中,正是如同对经济制裁是否能改善一国民主状况的问题一样,90年代
的中国和伊拉克,有过正反两方面的反证。这种尴尬和复杂,恰恰是我们国人的耻辱,真不足外人道。我只能在此默默和朋友们重念我们自己的梦想:愿有一天,在中华大地上,公平如大水滚滚,公义如江河滔滔。此等声音虽然微小,但在我们心中却坚如磐石。
简评:一直对安替颇有些不屑,但是他这篇文章写得实在是好,特此转贴!
posted @ 2006-01-14 13:00 读书、思考、生活 阅读(417) | 评论 (0)编辑 收藏
<SCRIPT LANGUAGE="JavaScript">
function t(){
    
var t=document.getElementById("test");
    t.innerHTML
="<p>222</p>";
}
</SCRIPT>
<id="test">111</p>
<INPUT TYPE="button" value="test" onclick="t();">
这段代码,在IE5,IE5.5,IE6里执行都会报错。叫做未知的运行错误,try...catch出来是“[object error]”。

在FireFox中,能够完全正常运行。在Opera 8.5中,也能正常运行。

估计的原因是,IE中的<p>,不能接受嵌套<p>标签。
posted @ 2006-01-13 20:04 读书、思考、生活 阅读(380) | 评论 (0)编辑 收藏
  我的Blog在最近一段时间的更新频率,真是愧对大家了。
 
  现在我的脑子里,与技术有关的,主要就是两件事,在单位,就想着公司的技术架构的事情。在家里,就每天晚上要写2~3小时的AJAX的书。与AJAX相关的技术,最近一直在学习、思考,但是又不便在Blog中提前透露,估计要等到第1、2章全部写完之后,才能把样章放出来,给大家评价一下。
 
  儿子现在是越来越好玩了,写两条有趣的事情,大家开心一下吧:
 
  1、那天他在骑自己的小三轮车,然后故意翻到在地。他趟在地上叫到:“救护车,快点来,救护车,快点来。把我拉到那边去,抢救一下。”
 
  2、前两天去南京爬城墙,我们为了鼓励他自己走路,就走一段路,给他一粒优酪糖,并且夸他:“乖小孩。”回到上海以后,他昨天就突然抱着我的腿,大声说到:“我是乖小孩,给我一粒糖。”
posted @ 2006-01-05 22:56 读书、思考、生活 阅读(423) | 评论 (1)编辑 收藏
  2005-8-25,我写完了《OO丧钟》系列的最后一篇。在很长的一段时间内,大家也都不来睬我了。直到最近,四个多月过去了,突然关注的人又多起来了。
 
  先是徐昊的一组《丧钟为谁鸣?》大大的点中了我的薄弱之处,还有ajoo的重量级马后炮。我也心悦诚服的表示了惭愧。
 
  然后事情就有点奇怪了。抄几段话给大家看看:
 
cm4ever:
看了半天,觉得没什么新意,而且标题哗众取宠。
正如前面很多网友所说,你所提出的新语言的部分特性,在一些开源项目中早有人研究。人家都没好意思说自己非常先进,强大,更多的只是默默无闻,踏踏实实的研究。更不说象MS这样拥有n多语言设计大拿的公司,集众人之力辛苦好几年才搞出一个c#。在你身上,我只看到中国软件浮躁的一面。

 

wangzx:
首先,我觉得你太过自信了,因为还没有看到你的具体的内容.
OO是灵丹妙药吗?OO大师们也没有这么说过,从结构化过渡到OO,其实是一件很自然的事情,就像C++只是C + + 一样,OO也不过是Structure++,当然,这么一个++对软件界的影响是足够深远的。

任何误解了OO的人,老沉迷于表面的概念之中,或批评OO、或赞许OO,其实可参考性本不大。我不知道那一位软件的高手在考虑问题的时候,要首先把OO来往自己的问题上套的。如果它能够找到更为合适的方法,比如说DSL、AI、脚本语言,总之,是那种合适用那种。当然,很多通用的问题不见得有成熟的解决模式,OO就自然成为解决这类通用问题的一个选择。

 

VillimWong:
想问一句?你见过治百病的药吗?有谁说过OO是万能药?但是它确定是灵丹妙药,对我们目前面前面对的大多数问题。这里可以明确地是楼主先给我们下了套。不过还是期待LZ说出点更有意义的东西出来。

 

Alec:
???
你要表达什么?
想清楚了再说

 

大熊在天涯:
What are you wanting to say? Nothing so far.

 

赵小刀:
你在搞什么?现把事情做了再说。风声大雨点小。。炒作自己呢吧。。。

 

Ariex_LoA:

OO仅仅是提出了一种新的思维方法,而不是万灵药,没有人说它包治百病,如果有人说过,那么他是傻瓜,如果有人相信,傻瓜again,偶很遗憾的认为,作者不过是一个OO时代的狂热者,因为最后迷失了方向而愤怒,痛恨OO。OO不是一切,只是一种思维方法

重要的时刻……期待你一大堆问题提出后的下文……

 

  我可以肯定的说,真正看完了我的系列文章的朋友,估计只有徐昊、ajoo他们寥寥几个。而后来的这些个批评者呢?没有,他们仅仅是看了一个开头,就准备批判了。

  ajoo说得不错:反正不是老庄浮躁,就是你浮躁,这点我敢确信。

 

  还是回到6月份的时候吧,我当时为什么要起这样一个标题呢?为了吸引眼球,的确是这样的,没有这样的标题,我的思想很难被尽可能多的朋友看到。那天跟徐昊聊天,我自己也说:不过也还是得怪我自己,当初为了吸引更多人的注意力,起了这么大一个标题,也难怪人家要抓我的痛脚。

  所以呢,我也有浮躁的地方,不过比我浮躁的人,更是大把啊。

 

ps:来的人,估计是看来最近一期《程序员》的介绍以后来的,Google-->Click Link-->Write。

posted @ 2005-12-28 15:42 读书、思考、生活 阅读(389) | 评论 (1)编辑 收藏

 

nàn:灾难;祸害,人为而产生的祸害

天灾人祸,层出不穷。地震、海啸、飓风、战乱、疾病、禽流感、矿难、空难、中外爆炸、GFW&备案制造的网难。

nán:困难;艰难

整个中国的国家政策正在发生重大的调整,从以往的政策倾斜于优势发展产业,到现在力图缩小社会差距,倾斜于西部、三农、弱势群体、教育、医疗卫生、民工。无数的既得利益者阻挠这样的改革,中央政府在深水区里举步维艰。

 

相关链接:Postshow发起2005“年度汉字”评选活动

tags:

posted @ 2005-12-26 17:43 读书、思考、生活 阅读(327) | 评论 (0)编辑 收藏
  徐昊终于出手了,最近的一组重量级的文章《丧钟为谁鸣?》,直指当初我的那篇《敲响OO时代的丧钟》。 
  现在我也可以很负责任的说,当初我的批判对象,实在是过广了。OO的领域其实非常的大,而我对于OO的了解,却始终不出Java、C++的范围。当徐昊跟我谈起Pure OO的鼻祖SmallTalk的时候,我还是只是懵懵懂懂的感到,这不过是一个相当古怪逻辑的OO,跟现在的主流OO,不可同日而语。
 
  后来才逐渐理解到,我所向OO开的跑,90%只应该打在Static Type OO的身上。当初夸下了海口,如今只能羞愧万分,还是学习得不够多啊!
 
  特意抄录一段ajoo的重量级马后炮,以自我警醒:
 
ajoo 写道:
其实,这篇文章还应该进一步界定为:给没有类型推导的,泛型支持有限的,基于名字而非结构的子类型系统的,静态类型面向对象语言敲响的丧钟.(说穿了不过就是java, c#, c++等寥寥几个俗语言罢了)

老早跟老庄说让他划定讨论范围或者定义的时候,就是看到老庄话说的挺大,结果讨论来讨论去不过就是java, c++那点东西.文不对题.不过可能老庄认为所谓的"面向对象"必然就是java这个样子,所以下定义属于多此一举。


批判oo而不研究ruby们,smalltalk们,ocaml们;
批判静态强类型而看不见haskell们,clean们,oz们,那就最好小心一点,把标题变成"给我目前所知的OO敲响丧钟"。

 

  再次特别感谢徐昊和ajoo。

posted @ 2005-12-22 21:50 读书、思考、生活 阅读(1071) | 评论 (2)编辑 收藏

  两年前曾经有一段时间,我还挺喜欢看许知远主笔的《经济观察报》。后来实在是厌烦了他们那种不管有病无病都在那小声呻吟的文风。从此彻底戒了所有的经济类报纸和杂志。但是确实我也接受了其中的不少思想,比如“中产阶级”。

  我基本上还是赞同这样的论点的:中产阶级是这个社会的中坚力量,是民族的精英群体,是国家的进步发展的主要动力,是安定团结的和谐因素。这样的同意其实很直觉,因为我自认为自己也是“中产阶级”的一份子,自然也负有这一阶层的使命感。

  很久都没有再想过这方面的问题了。

  直到前两天正好看到了上海电视台新闻频道的七分之一。这一期讲述的,是“代课教师”。三个多月前,甘肃省渭源县委副书记李迎新,将一份《渭源县代课教师状况调研》寄给了甘肃省委与教育部。其中所描述的代课教师的状况令人震惊!

  渭源县有600余名乡村代课教师每月仅拿着40元到80元不等的工资。每月拿40元工资的又占了代课教师的70%,部分代课教师这样的工资已拿了20年!

  北寨镇张家堡小学代课教师王政明,62岁,代课47年,至今每个月的工资是40元。因为根本没有能力养家糊口,自己的女儿都辍学在家了。而他却培养出了76个大学生。但是在他来说,教书已成为生命的一部分:“寒暑假时,不用来学校我心里就会空空的,非要来学校转几圈才踏实。”

每天,王老师都要护送小学生回家。

 

  代课教师刘秉章已经32岁了,也因付不起聘金至今单身。几次相亲中,他颇受刺激,他告诉记者:“几乎每相亲一次,女方得知我是代课教师,甩头就走。还有的抛下一句话,你40元一月的工资,是你养女人还是女人养你?”他出去打工过,本来都想不再回来教书了。结果开学了,他到学校去转转,看到那些孩子,却又舍不得再走了!而记者去采访他时,他脚上的皮鞋,还是他父亲出去打工,在外面捡回来再补一补给他穿的。

代课教师刘秉章赤贫的家

  同样20年来拿40元/月工资的会川镇本庙君安希望小学的代课教师谢毓新,生活压力比李建新更大。他的儿子正在读大学,每年的学费要四五千元,他已经连本加息借了2万元了。李迎新问,如果转不了正怎么办,他嘴唇蠕动了一阵说:“实话告诉你,我真有点坚持不住了。”

 

  李迎新在一次同学聚会的餐桌上说:“代课教师20年来拿着每月40元的工资,你们知不知道?农村教育已经很危险,你们知不知道?”他越说越激动,指着他们那桌丰盛的饭菜说:“这样一桌,对我们来说只是三四百元,对代课老师来说,就是一年的工资啊!”说到此处,他的泪水夺眶而出,顿时一桌无语。

 

  谁才是支撑这个社会的中坚力量呢?是我们?还是他们?

  这还只是整个教育制度的部分图景,另外一部分图景,正好我也在前天的实话实说里看到了。这一期的主题是《择校之痛》。其中教育专家杨东平教授的几段话,说得特别好。

  “‘择校热’的主要原因,并不在于家长,而在于我们的教育政策出了些问题。也就是说,通过这种重点学校制度,示范学校制度,人为地制造和加大学校差距,从而造成家长的集体恐慌。”

  “我们过去有个概念,就是必须通过抓重点,以点带面,好像能够提高教育水平,实际上现在回过头来看,这个想法是有问题的。”

  “教育应该是公平的、平等的、均衡的教育,不应该是分为等级的。”

  “现在的重点学校制度,它形成了一个非常强大的经济利益的机制,也就是说,围绕重点学校形成了一种利益链,或者叫利益集团。形成了非常大的经济利益。这些学校通过择校,可以获得非常高昂的经济收入。教育部门等等,都能从中获得好处。”

  “我们现在的重点学校制度,变成了家长的权力和金钱的竞争,所以这种教育制度,就成为凝固,或者加大社会差距的一种制度。”

 

  大家有没有发现这两件事情其中的关联呢?背后的是同样的国家政策。都是一种典型的梯度发展、倾斜发展的策略。因为这样的政策,造成了强的越强、弱的越弱;富的越富、贫的越贫。富者连阡陌,贫者无立椎。就是我们看得见的未来!

  当财富向少数人集中起来的时候,有些无比荒唐的,烧钱的傻事,就会有人干出来了。2.5亿元人民币拍了个《无极》,陈凯歌在接受记者采访的时候,居然还说:“我们已经很节约了,人家美国人拍同样的大制作,至少几个亿美金”。许知远也搞了个《生活》杂志。定价50元,重的可以砸死一头猪!带三个表就评价到:“一部《无极》和一本《生活》杂志,有多少钱是花在这种贪图自恋的狂欢上,自恋到这份上,估计和自私也就差不多了。”

 

  想想那些代课教师吧!你们这帮畜生糟蹋的这些钱,拿去干些什么不好?代课教师王政明,代课47年,总收入还不到2万块钱哪!

 

  我们这些“中产阶级”,社会中坚,干了些什么呢?

 

相关链接:

经济观察报

中国中产阶级真相-搜狐文化

讲奉献还是要吃饭,谁剥夺了代课老师的生存尊严

择校之痛

带三个表:自私的冒险

posted @ 2005-12-20 18:07 读书、思考、生活 阅读(553) | 评论 (4)编辑 收藏
  目前的四大山头,还处于互不竞争的形态,而且大家都有当年国共合作时期的精神,互相加入对方的组织。
 
  JavaEye(http://forum.javaeye.com):以BBS论坛为交流形式,站长是Robbin,成立最早,人数最多,宝贝最多。当然,灌水的也最多。开放式的会员注册机制,但是必须经过漫长的15天等待,才能发言。不过浏览是完全自由的。
 
  BJUG(http://www.bjug.org):以Google Group提供的Maillist为交流形式,主要的管理者是冰云,以北京Java用户为主,以定期聚会交流技术作为加强凝聚力的手段,目前有100多个会员,已经早就不再局限于北京Javer了。加入BJUG并不容易,必须有介绍人,否则是进不去的。全球Java User Group中的Top 50。
 
  一座千年的妖精旅店(http://blogsite.3322.org/qq2/history.cgi):以QQ群聊天为交流形式,主要的管理者是江南白衣,里面高手众多,不过也让我们看到了高手们大喷口水的本色场面。虽然白衣始终不渝的告诫大家要提高聊天质量,但是跑题是经常发生的。同样很难加入,必须有人介绍,就算进去了,人缘混得差的,也还会被踢出来。可以说是最封闭的山头了。但是这样的山头大有好处,真有什么难事,在里面喊一声,真正的大侠就会出来救你的。
 
  BlogJava(http://www.blogjava.net/):以专业技术Blog为发布形式(Blog本来就不是很利于交流,但是很利于观点、心得与资源的发布)。主要的管理者是dudu,但是现在江南白衣也加入了BlogJava,正在四处拉人加入那里。目前一派欣欣向荣的景象。普通Bloger申请需要等待批准,认识白衣或者其它管理员的,可以走后门。
 
  基本上我的理解还是很片面的,没有被提到的网站、站长、社团、群众小团体、组织、帮会,大家多见谅。尤其应该算一个山头的CSDN Java频道,目前的确还算不上一个山头,遗憾ing......
posted @ 2005-12-16 09:14 读书、思考、生活 阅读(3293) | 评论 (26)编辑 收藏
老百姓就是那些发表自己观点的人
专家就是那些发表大家观点的人
权威就是那些改变大家观点的人
                      --庄表伟
 
  我关注的bloger很多,关注的播客却很少,毕竟国内说汉语的播客,质量好的实在是太少了。比较关注有一个叫“胖大海”北京爷们。他的广播我倒是常常去听听。说实话,这个哥们实在是水平有限,不过砍翻几个、砍晕一堆的口才也是有的。最近听到他的一个《专家又见专家》,倒是颇可以探讨、探讨。
 
  这个段子,胖大海在其中也就是攻击了一个东西:一位教育界人士却称:“现在的教材都是经过专家研究设计的,封面精美、插图多,容易引起学生的阅读兴趣,也符合学生的年龄特点,黑白的教材则没有这个效果。”
 
  那么,这样的说法究竟有没有道理呢?--我不知道。
 
  客观一点来说,什么样的课本,如何编排,如何设计,插图多少,彩图多少,才能更多的引起学生的阅读兴趣,这个问题,我根本就没法回答。在教育心理学这个领域,我完全是个外行。拿到一本书,我也只能够发表自己的意见,我是不是喜欢,我是不是有阅读的兴趣。
 
  至于这样一本教材,是不是能够引起大多数学生的兴趣,这样的问题,我根本无法回答。胖大海那样的反驳,其实根本就站不住脚,因为他跟我们大多数人都一样,不过是个圈外的老百姓。对于这种某本书是否适合学生的问题,根本没有发言权的。
 
  有两种领域的专家,一种是在有是非的领域的专家,那种专家都得靠真本事的,说话做事,得刀刀见血,否则人家一眼就能看出你是耍花枪。另外一种是在无是非的领域的专家。在这种领域,就好混多了。
 
  打个比方,对于那种说不清是非的事情,比如:“这件衣服好不好看”这样的问题,老百姓只有资格说:“我觉得不好看!”。而专家却有资格说:“我认为市场不会看好这样的设计。”听听,多有派。这就是专家!如果抛开咱们作为小老百姓的不服不愤。人家专家的话,也的确可能很有道理。为什么呢?因为作为在一个行当里打滚了多年的老人,他自然有资格作为大众偏好的代言人,来发表“具有普遍意义上的言论”。
 
  比如说教育专家,他的确有资格说:什么样的教材学生会更加喜欢,而什么样的教材效果会比较差。当然,混入专家队伍的伪专家,不在此列。就像那些电台里的假医生一样,他们推荐的药,您一样都不要信。
 
  其实,可怕的不是专家,大多数专家混到目前这样的一个身份,也都不容易。就算没有真才实学,至少也我们见多识广一点。听听他们的建议,其实是不妨的。怕就怕那种“职务型专家”。他有那个说话的权限,仅仅是因为他在那个位置,而他在那个位置,完全可能是因为偶尔因素。最近在热烈讨论的中国院士制度,就有专家说:“少那一票,他就什么都不是,多了那一票,他就好像什么都懂了,什么评审会都要请他去。。。”
 
  院士制度虽然有点荒唐,但是人家至少是由投票选出来的,本身的资历,科研水平也是够一定水准的。还有一些职务专家呢?比如我最近看到的“上海虹口区人民政府网”,那个难看啊。一个首页有九个地方在晃来晃去,根本就是让人眼晕。以我多年做政府网站的经验,这样的网站,一定是出自“某某有水平的领导兼专家”的指点。真可怜那些开发人员啊。
 
  至于权威呢,那就厉害了,他一说话,不但你会认为他是对的,而且还会认为自己过去是错的。反正,他一句能顶你一万句就是了。
posted @ 2005-12-12 16:40 读书、思考、生活 阅读(499) | 评论 (2)编辑 收藏
  最近思考的问题,其实都是围绕着Web2.0的。Web2.0是什么呢?无数的人可以有无数的回答,我的理解是:Web2.0意味着用户体验更好的Web应用。最近业界也颇发生了几件大事,我来随手点评一下。
 
  1、WebWork与Struts合并了。
 
Robbin的评价相当正面:
Web层方面我现在非常看好Struts Ti。Webwork从技术上是非常前卫的,即将发布的2.2版本提供了很不错的AJAX功能,并且易学易用,它的主要问题在于文档缺少,社区小,用户少。现在Struts Ti结合了Webwork的先进技术和Struts的庞大社区,再…
 
Michael Chen的评价则相当负面:
与其说两者的结合,我情愿极端的看成,这是webwork自己的放弃。这其中也许存在不少的原因,个人能力上的,外部环境上的。但在我看来,webwork,这个象征着灵活,先进,优雅等等完全可以用一系列美好的形容词的框架,已死。用户能做出的选择将会更少,web框架之间的竞争开始重量级升级,那些小型的,美丽的框架将会由于没有商业公司或者社区的支持而死得无声无息。这个世界回归到了垄断的世界。
 
  为什么有这么大的反差?其实是在对WebWork的AJAX扩展上,有了分歧。robbin对于WebWork的这一进步同样评价很高。而Michael Chen和DLEE这些原本就做过不少AJAX应用的朋友就觉得是丑陋的。对于 WebWork Ajax 支持的失望(dlee),而Michael Chen则附议到:“深有同感。不过我的观点在美感方面。前些日子scud在BJUG的聚会上做了一个关于Webwork2.2的topic,其中谈到webwork的ajax的支持。在我看来,那些remoteDiv, a, form的ajax标签,使用起来实在是丑陋不堪。当时跟冰云说,webwork现在的team leader一定不是 Richard Oberg了,否则他怎么能容忍这么丑陋的设计呢?”
 
  再进一步问:“为什么对于WebWork的AJAX支持的评价上,有这么大的差别呢?”我的看法是:这就是立场不同所导致的了。究竟是站在传统Web框架的立场来看待AJAX呢?还是站在AJAX的立场来看待传统的Web开发。
 
  站在传统Web框架的角度,“Ajax 其实不过是一堆 JavaScript、HTML 和膨胀的逻辑混合在一辆巨大的失事火车里面。”(dlee翻译的WebWork作者的一段话。)对于他们来说,AJAX就是一个必须闭着眼睛吞下去的一个苍蝇。以这样的态度弄出来的东西,能不丑陋吗?
 
  站在AJAX的角度,来看传统Web开发,这个方面目前的确还不够明朗。打个比方,企业应用架构模式(PoEAA)由Martin Folwer总结出来以后,大家都觉得心里有底,脚下有根了。而现在呢?Web应用架构模式(PoWAA)呢?这个东西大家原来是有一套的,当AJAX出现之后,成熟之后,普及之后,我们也同样期待这有人来总结出新一代的,Web应用架构模式。注意是架构模式而非设计模式。这样的模式,现在似乎还没有出现。只不过站在AJAX开发者的立场来看,总结出这样的新模式,才是正途。
 
  我现在因为要准备写一本AJAX方面的书,自然也就开始思考这方面的问题,在和李锟、泽欣等朋友的讨论中,也在思考这样的问题,举个例子,AJAX之后的MVC,控制层是不是可以完全放在客户端,而服务器端仅仅是一个模型层。说实话,还没有想清楚......
 
  2、Java Web Alignment Group成立
  这件事情让江南白衣相当的兴奋。在他的N个blog里都发布了这个Good News。据说有一堆大佬(达到36个之多)是这个Group的成员。我在白衣的blog下留了一句话: 突然想到一个场景,鹿鼎记里的江湖群豪,前明志士们聚在一起开的那个“杀龟大会”。为什么会有这样的联想呢?因为我从来对于这种所谓的大联合不抱幻想。
 
  根本的原因在于,技术的事情,不是人多力量就大的,不是联合了就能够统一的,小舢板不是捆在一起就成立“航空母舰”的。为什么现在Java Web Framework如此分裂?为什么几十个框架斗不过一个Ruby on Rails?RoR的胜利,不是丰富的胜利,不是强壮的胜利,而是简单性的胜利。你几十个框架合在一起,只会更加复杂,更加烦琐,更加丑陋。这样的联合,根本就是连失败的原因都没想清楚。36个大佬,能在一起设计出一个框架来?Java界的权威们,谁服过谁了?
 
  现在传统的Java Web Framework,一方面在面对各系其它语言的Rails的框架冲击,一方面又面对着AJAX新思维的冲击,新的架构模式尚未出现...。要搞出一个新的、Java的、快捷的、Web开发框架,任重而道远啊!
 
  在QQ群里,江南白衣也颇有些想拉起大旗做一个框架的意思,现在还在七嘴八舌的阶段,嗯,我还是很期待的!
 
  3、微软推出SSE
  老白的Blog上有一篇《几个Blogger对SSE的反应和态度》;曾登高有一篇《微软的RSS扩展--SSE标准解读》;还有就是RSS加油站的《微软拟推出双向RSS新标准SSE》。
 
  说实话,我看到这个消息还是很高兴的,因为我早在4月底5月初的时候,就已经提出了双向RSS的概念。《BBS-Blog-Wiki的未来》《BBS-Blog-Wiki的未来-文字解说》,最后一段话就说到:另外对于RSS的改造,也将从单向接收的功能,进化为双向数据同步的功能。是不是比MS还早啊
 
  其实这也不算啥,我的朋友Wolf,他们的网站叫做“i170”,在他们的客户端,已经早就实现了双向RSS同步了。
 
  我们其实不慢,只是宣传的本事不够......
posted @ 2005-12-01 10:25 读书、思考、生活 阅读(2548) | 评论 (7)编辑 收藏
romza在BJUG的maillist里提出了一个问题,Web开发中的Component,能不能够通过OSGi这样的插件体系,来进行组织,以提高代码的可重用性。
 
这个帖子引起了广泛而深入的讨论,我也在很后面加入了进去,说了一点。
 
飞驰的话题呼啸而过,我稍一迟疑,就赶不上趟了。
 
但是这里面的话题,又的确是我非常感兴趣的(嗯,跑题了那么远,但是还在我的兴趣范围内),所以的确是应该出来聊聊我的看法,特别是徐Rx同志多次提到了我的DJ...
 
1、徐Rx,我认为你不应该为自己的表达能力过多辩护,还把责任推到我们中华民族伟大的中文上来。看着你的帖子,我好几次都差点晕过去,百分之50中文单词勾兑百分之50的英文单词。这样的句子,能让人读懂吗?
 
2、几次昏过去之后,我又强迫自己醒过来接着看帖子,我认为徐Rx还是讲得很正确的,除了再次想把我的DJ和语义网拉上关系之外。
 
3、回到最初的话题,romza的需求可以理解,但是你所猜测的那个解决方案(插件体系结构)我认为不是一条正路。提高软件的重用性,自然是大家多年来一直追求的目标,但是不同的应用领域,应该有不同的重用规范。彼此之间可以参考,但是很难照搬。就我对Web开发的理解,在AJAX还没有大规模改变Web开发的世界之前,浏览器的运作模式是非常单调的(请求-响应)模式,响应的输出,无非就是文本,在这样的世界里,Web模板是最自然的解决方案。比如buaawhl的Fastm,或者我的Fastm+。但是当AJAX的概念大面积的进入人们的视线之后,传统的思维就必须修正了,由此而引发的一系列的思考,我倒现在也没有完全想好,也许Micheal
Chen可以出来谈谈。但是,现有类似于AjaxTags这样的用Tags给Web1.0打补丁的方式,我认为是丑陋的。
 
4、再说面向对象与面向方面的问题,在只有Object的世界里,对象就是唯一的可以重用的积木。这个积木从其本质来说,就是有缺陷的,所以要想在OO的基础上重用,就会很辛苦(参见我的《丧钟》系列)。但是贸然引入Aspect,也并非解救之道。就像AJAX出现之后,我们必须重新思考Web开发,而不是打补丁一样。Aspect的概念出现之后,我们现在的用法,也不过是用Aspect给Object打补丁。这样的做法,在我看来,一样是丑陋的。
 
5、AOSD我看了一下,那老头举的例子,简直就是在说梦话。要像他那样做面向方面的分析设计,系统肯定是做不出来的。
 
6、说说我的DJ,在我看来,强行将一些行为划入Object,而另一些划入Aspect,是不平等的。这些行为不该有这样的高低贵贱之分。在DJ之中,他们都是某一个Channel。语义是:"Channel就是行为插入数据的管子"。每一个管子之间是平等的,而我们需要一个更加强壮的机制,来管理这些行为之间的相互干扰,以及对于数据的交叉读写。
 
7、前面拐拐龙底咚说的:"一下子想起了久违的DB触发器",实在是深得我心。我一直认为,在确保数据安全方面,OO的做法是愚蠢的,而DB的触发器是一种更加灵活的方案。但是传统数据库中的触发器,缺少对行为相互干扰之间的管理,而是纯粹只关心了数据的安全。因此,我一直在设想,如果我的DJ能够成为某种PL/SQL的直接扩展,也许是更加自然的一种实现方案。
 
8、徐Rx的C/C++回忆我也很赞同,我曾经跟一个朋友说过一句话:"框架就是弱语言,而语言就是强框架"。我现在所在的公司,做的那个乐酷网络电视录像机,背后的业务逻辑支撑框架,就是按我的DJ的思路来做的,叫做DOOP。面向动态对象的编程。应该这么说,是先有了DOOP的开发实践,才有了后来更进一步语言化的打算。
 
9、我对于DJ的定位,是一种业务逻辑层的描述语言,而其它的方面,它肯定都不擅长,比如界面层,比如网络层。因此,我的看法是,在现在的多层架构的体系下,抛开"确切所处的层次来谈重用",肯定是用不好的。也可以这么说,你不可能找到一个方案,能够一举解决整个系统的重用性问题。必须区分技术领域、区分系统层次,区分不同的规模尺度。然后才能来谈重用。这样才可能成功的。
posted @ 2005-11-28 22:45 读书、思考、生活 阅读(1113) | 评论 (2)编辑 收藏

  罂粟是一种植物,通过不断的提炼,最终成为高纯度的海洛因。从最初的种植每亩罂粟能赚几千块,到加工1公斤能赚1万元,等运到广州大概能赚4万,如果能运到美国,每公斤能卖到百万美元以上。这么赚钱的买卖,对于写IT这个行业的软件编程这样书,有什么启发呢?

 

  1、纯度——“艺到精纯品自高”

  写软件编程的书,也得有不懈的追求,也得向着完美不断的前进。更重要的是,别兑水,得有很多很多的真材实料。提高书的品质,才是王道。

 

  2、目标用户——“销售给最有购买力的用户才能赚最多的钱”

  作为一个在JavaEye混的人,我也非常鄙视那些来问“低级问题”的家伙。他们太懒了,在现在搜索引擎如此发达的条件下,竟然有人不能自己找到答案。但是,对于图书写作者和出版商来说,他们就是用户啊,他们的购买力×懒惰程度,就决定了咱们的利润高低啊。所以,写书一定要针对目标用户,狠下功夫。

 

  3、吸引力——“要让读者觉得爽,爽了还想再爽”

  一本好书,应该是能够让人一口气读完的,这样的书不容易写,但是一旦写出来,就肯定能赚钱。一本好书,应该是能够让人读完之后还想再进一步的,这样的书更不容易写,但是如果能够做到的话,那咱就吃穿不愁了


题外话:

1、dlee(李锟)最近写了一篇blog,推荐一看:

http://www.blogjava.net/dlee/archive/2005/11/26/21503.html

 

2、我的MSN Spaces的blog的访问量,超过20万了,特此庆贺:

posted @ 2005-11-27 23:40 读书、思考、生活 阅读(676) | 评论 (0)编辑 收藏
  为了准备写AJAX的书,我又开始了新一轮的搜索工作。这样的工作我现在是越来越熟练了突然想到,关于借助网络自学这件事情,我还是挺有发言权的,今天就写写这个吧。
 
一、资源
 
  1、搜索引擎,仅有Google是不够的。我现在常用的搜索引擎是一个集合搜索引擎,叫做http://www.okgo.cn/。这个网站的确是不错,可以搜到网页、博客、BT、论坛、软件、文档、图书等等等等。
 
  2、RSS搜索,okgo也是不够的。再推荐几个:
http://blogsearch.google.com
 
  3、网络书签共享,这里也有很多好东西:
http://www.365key.com/  首页不用看了。
 
  4、电驴搜索,可以搜到很多电子书
 
  5、数字图书馆,还有很多,不过大多是要钱的,就不多推荐了
http://www.ssreader.com/ 超星图书馆
 
  6、论坛,有高手的地方,一定有好东西,AJAX相关的:
 
  7、专业站点,比如AJAX相关
 
  8、wiki
http://zh.wikipedia.org/  如果必要,总要想尽一切办法去访问的。
http://www.ajaxpatterns.org/  专业领域的Wiki。
 
  9、maillist,相关主题的邮件列表,进阶学习时,往往是需要订阅的。
 
  10、开源软件基地
http://open-open.com/  java-source的中文版
 
  11、QQ群
  12、MSN好友
能够直接问到人,但是也容易招人烦,慎用,建议长期潜伏。
 
 
各位看看,还有什么要补充的?
 
第一部分只是介绍资源,接下来我还打算谈谈如何入门,次序怎样等等话题。
posted @ 2005-11-25 10:17 读书、思考、生活 阅读(2150) | 评论 (9)编辑 收藏
  上周六跟dlee碰头,没想到他还记得我的那篇BLOG,居然带了《About Face 2.0》来给我。这本书得好好看看的。
 
  礼拜一,我在蔚蓝书店订的三本书终于送来了,《人类群星闪耀的时刻》我看了前三个故事,感觉挺一般的,没有老白说的那么好,书太花哨了,有点喧宾夺主。还是六哥说的有道理,关键得把美编的创作欲摁住!
 
  巴老的《随想录》我也看了几篇,实在是好。巴老是那种无技巧写作的人。他把自己毫无保留的,完全真诚的袒露在你面前,正如他自己说的“我把心交给了读者”。这样的人,写出来的书,让我想起郭靖的降龙十八掌。天下至刚至正的武学,就是这样的。
 
  今天,我邮购的《读库0600》也终于到了,果然是“素雅清新”,极能勾起我的阅读欲望,今天晚上睡前就看它了。
 
  这些都是纸制的要看的书。另外还要看一堆中英文的技术资料。因为我已经答应出版社,要写一本《AJAX》方面的新手入门的书。需要学习、理解的技术,真是多得不得了。
1、基础知识:XMLHTTP、XML、DOM、XHTML、CSS、JavaScript。
2、Web设计、网站重构、面向使用的软件等等指南性书籍。
3、N多AJAX的框架、Lib的代码。
 
有得忙了
posted @ 2005-11-23 23:51 读书、思考、生活 阅读(392) | 评论 (1)编辑 收藏
  各位一定非常惊讶(如果是读过前面几篇连载《定论》的人),怎么这就完了呢?看着架势,应该还早啊。
 
  是啊,按照原定的计划呢,的确是还早,但是那样的写法,我自己都不知道会写到何年何月去了,因此打算结束这个东西,把我要表达的想法,一口气跟大家说了,也是一种解脱。
 
  总结我的想法,主要有以下几点:
 
  1、现有的软件开发方法,都不是定论,不过是你说你的好,我说我的好罢了。要能够得到定论,必须要有一种能够判断方法好坏的方法。也就是说,能够判断一个方法,用或不用,有多少好处。几个方法比较,哪个能够胜出的“检验标准”。
 
  2、要能够检验软件开发方法的优劣,必须基于对于软件开发本质的正确认识,这样才能量化两个因素:软件需求的复杂程度以及软件开发的实际工作量。而现在的软件复杂度的度量,并未区分“需求”与“实际”的不同,或者“代码行数”,或者“功能点”,都是如此。
 
  3、在能够正确度量需求复杂度与实际工作量之后,我们会发现,过去那么多号称是为了保证软件顺利开发的手段,往往只会坏事,耽误事。但是,完全不提前设计的方法,也并不可取。
posted @ 2005-11-21 23:27 读书、思考、生活 阅读(238) | 评论 (0)编辑 收藏
posted @ 2005-11-19 12:47 读书、思考、生活 阅读(295) | 评论 (0)编辑 收藏


My blog is worth $33,307.86.
How much is your blog worth?

 

网上有人贴出了直接计算的代码,在这里,填入你的Blog地址即可。


文章来源:http://spaces.msn.com/members/zbw25/Blog/cns!1pA6-3FOo9yNp_4lmEHxdDqA!722.entry
posted @ 2005-11-19 10:56 读书、思考、生活 阅读(257) | 评论 (0)编辑 收藏
  昨天看完《一九八四》了,联想到之前看过的《林昭》《兄弟》,颇有些感想。
 
  《兄弟》是最能让人动情的一部书,但是也是最感性的一部书。而对于极权主义的批判,仅仅有感性是远远不够的。这一点,《一九八四》就实在是太到位了。深刻的,理性的,不动声色的,镇定自若的分析,越读越让人感到毛骨悚然。
  一种绝对不会让你变成烈士的权力。你一定能够被改造好。你会真诚的相信,2+2=5,或者是4,是3,都有可能。每一个被送入101房间的人,都会出卖一切,出卖人类所能拥有的一切美好的事物。真、善、美、爱,全部都可以出卖。
 
  太绝望了!
 
  林昭的死,给了我信心。是的,不是让我绝望,反而是给了我信心。因为,有这样的人,在这个世界上存在过,她可以被消灭,但是不可战胜!
 
  另外推荐一篇blog,不像书评的书评。主题有点相关,但是并不直接。大多数人,既不是强者,也不是弱者,仅仅是在中间。这些在中间的人,如果他勇于欺凌弱者,也往往会非常痛快的屈服于强者。换句话说,那些在极权主义制度下,快速屈服的人们,才是迫害弱者的主力军。这样的人,实在是太多了!
posted @ 2005-11-18 22:40 读书、思考、生活 阅读(576) | 评论 (0)编辑 收藏
  讨论软件开发的特征,需要站在一个大的背景下来看。我以前考过PMP,在PMBOK中,软件项目管理,是作为项目管理下的子课题来讨论的。看看下面这张图:
  按照PMBOK的知识结构图,PMBOK已经告诉了我们那么大一个园。而要进一步搞好软件的项目管理,我们只需要再掌握相关应用领域的知识和实践,就ok了。
 
   这其实是大多数项目管理的理论,对于软件项目管理的看法,所有的项目,都是项目。软件项目与大多数其它项目,大同而小异。至于差异部分,往往被归入“风险管理”的领域,就算是“一切尽在掌握了”。
 
  而事实上,软件项目与其它项目的差异是如此之大,以至于由量变而导致了质变,使得我们以传统的工程项目管理的方式来管理软件开发项目,注定是要失败的。
 
  我们来看看这样一个关键词:“迭代”。这是其它的项目管理中,基本上不可能出现的概念,而在软件项目管理领域,却是几乎每一种方法学中,都要极力强调的概念。这就是最大的区别。如果我们能够搞清楚迭代的本质,也就能够搞清楚软件项目与其它项目的本质区别了。
 
  在我看来,在软件开发的过程中,引入迭代,就是承认,软件开发需要承受大大小小的失败,而减少失败的办法,就是不跑步,不走路,尽可能的爬行,这样就算跌倒,也不会跌得太重。我们来看一个有趣的数据。这是我在竹笋炒肉的blog上看到的一段话。
 
  1994年,由于其非凡的软件开发能力和优秀的软件质量,SEL成为第一个因软件过程的成就而赢得IEEE奖励的软件开发组织。与普通的软件开发组织相比,在同样的软件开发条件下,NASA所开发的软件的质量要好10到20倍。
 
  这个成就是如何得出的呢?那么是怎样的项目呢?我搜索了一个google,找到另外一段话
 
  To put it a little differently, the average MIS shop would need about 14 calendar months and 110 staff-months to deliver a 100,000 line-of-code MIS system, and it would typically contain about 850 defects when delivered. The NASA SEL would deliver a system of that size with about the same amount of time and effort, but it would contain only about 50 defects.
 
  也就是说,10万行代码的一个MIS系统,他们花了110个人月,一共14个月,才完成。平均下来,每个人每天大约需要写30行代码!如果这样也算成功的软件项目管理的话,我以后只要将所有的项目工作量估算,乘以10,就能同样拿到IEEE的奖励了,如果我的老板允许的话。
 
(未完待续)
posted @ 2005-11-18 08:47 读书、思考、生活 阅读(281) | 评论 (0)编辑 收藏
  最近一段时间,特别容易买书。11月5日,本来是打算给我的外甥女买一本小学生词典的,想想干脆上当当搜一下。结果发现还真是挺便宜的,会员价只要12.6,实在是不好意思,就另外挑了两本,一本《世界尽头与冷酷仙境》,一本余华的《兄弟》。但是,那该死的当当,竟然在订单完成之后的第二天,才告诉我只有一本《兄弟》。我当时就想,干脆一本都不要,反正是货到付款。
 
  结果,11月6日那天下班回到家里,我爸妈跟我说:“你买的书来了,钱已经帮你付掉了。”效率真是高的不得了啊!
 
  《兄弟》我一口气就看完了,实在是好看啊!
 
  11月9日,一帮老朋友聚会,还去了一个朋友的家里,他们家也是喜欢读书的,我在那里又发现几本好书,结果呢,借不成
 
  因为对当当送书的速度印象相当深刻,于是还是去当当又订了三本书《非常道》、《杨柳风》、《一九八四》。当当还是以非常迅速的速度,分两次,给我送来了。他们这样做,唯一的目的是,能够收我两次的送货费。值得庆幸的是,书的确是不错。《非常道》我已经看完了,现在在看《一九八四》。
 
  我之前写过一篇关于林昭的blog。因此而认识了一个朋友,他也是林昭的老乡,苏州人。看到我这么喜欢林昭,于是说要送一本林昭的书给我,今天,书又寄到家里来了。《追寻林昭》,另外还有一本他们出版社的《挡不住的趋势》。
 
  今天早上,我还在蔚蓝书店订了三本书。《随想录》、《人类群星闪耀的时刻》、《断头王后》。然后呢,今天还收到一封邮件,我邮购的一本《读库0600》也已经寄出来了。
 
  唉,实在是太多了一点,来不及看啊。俗话说:书籍是人类的朋友。又说:有朋自远方来,不亦乐乎。所以,有好书自远方来,不亦乐乎!
 
 
还有一本,属于“地下刊物”,只能搞到很大的照片。
 
这本书的介绍,可以去看这个blog:见招拆招
posted @ 2005-11-15 21:32 读书、思考、生活 阅读(352) | 评论 (0)编辑 收藏

  我是豆瓣的会员,又用的是MSN Spaces的BLOG,目前用得还不错,都不打算退出。但是豆瓣提供的那个豆瓣秀服务,在MSN Spaces上用不成

  没办法,只能自己动手了。实际效果,见:http://spaces.msn.com/members/zbw25/

  1、搞一个Custom HTML
  2、在公司的服务器上,装一个软件,ImageMagick。下载地址:http://www.imagemagick.org/download/binaries/ImageMagick-6.2.5-4-Q16-windows-dll.exe

  3、下载一个JMagick。下载地址:
http://www.yeo.id.au/jmagick/quickload/win-6.2.4/jmagick-6.2.4-1-IM-6.2.5.zip

  4、将dll文件,copy到Windows的System32目录下。将jar文件copy到某lib目录下。

  5、写一个Servlet,代码如下:

  1 package tv.recool.misc;
  2 
  3 import java.io.*;
  4 import java.text.*;
  5 import java.util.*;
  6 import javax.servlet.*;
  7 import javax.servlet.http.*;
  8 import java.net.MalformedURLException;
  9 import java.net.URL;
 10 import java.net.URLConnection;
 11 
 12 import magick.ImageInfo;
 13 import magick.MagickImage;
 14 import magick.MontageInfo;
 15 
 16 public class PutBooks extends HttpServlet {
 17 
 18     //根据url,取得图片的byte[]
 19     private static byte[] getImageBytes(String url){
 20         try {
 21             return StreamUtils.read((new URL(url)).openStream());
 22         } catch (Exception e) {
 23             return null;
 24         }
 25     }
 26     
 27     //根据url,取得文字
 28     private static String getImageText(String url){
 29         try {
 30             URL u=new URL(url);
 31             URLConnection uc=u.openConnection();
 32 
 33             //要做足功夫,不然豆瓣就会拒绝你的请求
 34             uc.setRequestProperty("Host","www.douban.com");
 35             uc.setRequestProperty("Accept","*/*");
 36             uc.setRequestProperty("Referer","http://www.douban.com/");
 37             uc.setRequestProperty("User-Agent","Mozilla/4.0 (compatible; MSIE 5.00; Windows 98)");
 38             uc.setRequestProperty("Pragma","no-cache");
 39             uc.setRequestProperty("Cache-Control","no-cache");
 40             uc.setRequestProperty("Connection","close");
 41 
 42             //StreamUtils是一个辅助工具,就不再给出了
 43             return new String(StreamUtils.read(uc.getInputStream()),"utf-8");
 44         }  catch (Exception e) {
 45             return "";
 46         }
 47     }
 48 
 49     public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException{
 50         //取得参数
 51         String uid=req.getParameter("uid");
 52         String n=req.getParameter("n");
 53         String columns=req.getParameter("columns");
 54         String select=req.getParameter("select");
 55         String picsize=req.getParameter("picsize")+"";
 56         String show=req.getParameter("show");        
 57 
 58         try {
 59             //设置JMagick的ClassLoader,否则会报错
 60             System.setProperty("jmagick.systemclassloader","no");
 61 
 62             String str= getImageText("http://www.douban.com/service/badge/"+
 63                 uid+"/?show="+show
 64                 +"&select="+select
 65                 +"&n="+n
 66                 +"&picsize="+picsize
 67                 +"&columns="+columns);
 68 
 69             int getSize=Integer.parseInt(n);
 70             int colSize=Integer.parseInt(columns);
 71             int len=getSize/colSize;
 72 
 73             //申请一个数组
 74             MagickImage images[] = new MagickImage[getSize];
 75 
 76             //用最简单的办法解析字符串,因为豆瓣的输出是固定的
 77             String imgstr[]=str.split(".jpg");
 78 
 79             for(int i=0;i<getSize;i++){
 80                 if(i<imgstr.length){
 81                     String picurl="";
 82 
 83                     //根据图片大小的设定,解析有所不同
 84                     if(picsize.equals("medium")){
 85                         String temps[]=imgstr[i].split("http://www.douban.com/mpic/");
 86                         picurl="http://www.douban.com/mpic/"+temps[1]+".jpg";
 87                     } else {
 88                         String temps[]=imgstr[i].split("http://www.douban.com/spic/");
 89                         picurl="http://www.douban.com/spic/"+temps[1]+".jpg";
 90                     }
 91                     MagickImage image = new MagickImage(new ImageInfo(),getImageBytes(picurl));
 92                     images[i]=image;
 93                 }
 94             }
 95 
 96             //建立一个图片组
 97             MagickImage seqImage = new MagickImage(images);
 98 
 99             //建立一个图片框架
100             MontageInfo montageInfo = new MontageInfo(new ImageInfo());
101 
102             //setGeometry(String)设置图片的几何特征
103             if(picsize.equals("medium")){
104                 montageInfo.setGeometry("99x149+1+1>");
105             } else {
106                 montageInfo.setGeometry("66x99+1+1>");
107             }
108 
109             //NxM的一个表格
110             montageInfo.setTile(colSize+"x"+len);
111             montageInfo.setBorderWidth(0);
112 
113             //得到一张组合后的图片
114             MagickImage montage = seqImage.montageImages(montageInfo);
115             montage.writeImage(new ImageInfo());
116             montage.setMagick("JPG");
117 
118             //输出到byte[]
119             byte data[]=montage.imageToBlob(new ImageInfo());
120 
121             //通过Servlet输出
122             res.setContentType("image/*");
123             OutputStream toClient=res.getOutputStream();
124             toClient.write(data);
125             toClient.close();
126         }
127         catch (Exception ex) {
128         }
129     }
130 }


  6、在MSN Spaces的Custom HTML中,写以下HTML:

<href="http://www.douban.com/people/1019112/"><img src="http://www.recool.tv:8080/Recool-WebServer/putBooks?uid=1019112&show=collection&select=random&n=12&columns=3" border=0 width=178></a>

  7、搞定,收工。

posted @ 2005-11-14 21:20 读书、思考、生活 阅读(1237) | 评论 (2)编辑 收藏
新家注册成功,特此告示。
posted @ 2005-11-14 15:25 读书、思考、生活 阅读(143) | 评论 (0)编辑 收藏
  昨天我老婆也看完了余华的《兄弟》,突然想到儿子的发展趋势,我们两个人讨论了一下,认为如果宋凡平不死的话,李光头也不至于那么堕落。所以我们的儿子就算不能成为宋钢,起码也不至于成为李光头吧。
 
  家里请了一个钟点工阿姨,每天4点来,6点走。一般快到6点的时候,点点就会一直头转来转去的盯着阿姨看。那意思是,阿姨你怎么还不走呀?我好跟你说再见呀。
 
  今天快到点的时候,我儿子也是一直盯着阿姨看。看到阿姨走到门口,弯腰下去穿鞋,裤子的腰比较低。然后我儿子就笑起来了:“阿姨的屁股都露出来了。”
 
  点点、爷爷、还有我,我们三个男的都面无表情的坐在那里。奶奶一个人在那里狂笑。阿姨的脸通红。我心里在想:“完了,家里真的出了‘李光头’了。”
 
 

文章来源:http://spaces.msn.com/members/zbw25/Blog/cns!1pA6-3FOo9yNp_4lmEHxdDqA!701.entry
posted @ 2005-11-11 21:56 读书、思考、生活 阅读(139) | 评论 (0)编辑 收藏
三、软件开发的特征
 
  软件开发究竟是怎么一回事呢?在我的前一个连载《敲响OO时代的丧钟》里,我也讨论到了软件开发的实质,自己引一段来用用。 
软件开发的定义:“软件开发,就是在一个受到限制的环境中,利用环境提供的可能性,修改或添加环境允许的各种状态,去满足某一组需求。

1) 软件开发所处的环境,不仅仅是一个限制,同时也是一个可能性。软件的能力,局限性与硬件的能力,比如说,如果计算机没有喇叭,那么任何软件都不能使计算机播放音乐。但是,另一个必须考虑的方面是,同样有能力发声的计算机,要想使他播放音乐,可能很容易,也可能很困难。用专业一点话来描述就是:“有些硬件的API设计很合理,有些则非常愚蠢。”由于我们对于软、硬件的定义是一个连续体,因此,这个观点不只是可以用来评价硬件API设计,也可以用来评价语言、虚拟机、框架、平台等等软件的一个方面的优缺点——是否有利于二次开发,这是一个重要的评价标准。

2) 修改、添加状态,比较拗口,其实就是编程的意思。在一个受限制的范围内编程,我们需要考虑很多东西,语法、接口、规范、内存大小诸如此类,当然,不同级别的,不同领域的编程,需要考虑的限制是有巨大差别的。软件开发的水平高低也就体现在,满足同样的需求,有些方法速度更快,有些方面却要慢很多。而软件开发的方法的选择,受到很多因素的影响:环境限制,经验多少以及对于需求的了解程度等等。

3) 满足需求,是啊!提起这个需求,每一个程序员都会有好多的苦水要倒出来。为什么满足需求就这么难呢?因为,对于程序员来说,那是另外一个世界(这是比较客气的说法),那些提需求的家伙根本不懂怎么说话(这个说法稍为激烈一些),那是一些不知道自己要什么的蠢货(你遇到过这样的用户吗?)作为程序员,我知道我有很多同行,非常苦恼于与客户谈需求这样的任务——“至少电脑不会出现前后矛盾的逻辑错误”——这就是做程序员的难处。如果我们不仅仅是抱怨的话,也必须承认,程序员是非常挑战的职业,一个好的程序员,不但得是软件开发领域的专家,还得是他开发的那一类软件所在领域的专家。但事实上,其他行业的人,只需要做一种专家就能够混得很好了。

  软件开发的实质,与软件开发的特征之间,还是有区别的。毕竟我的前一篇文章,是从技术的角度出发来看软件开发,而现在我们的要讨论的是从管理的角度来看待,它又有哪些特征呢?

  软件开发的管理特征,在外行看来,也就是一堆人在做个东西。但是,软件开发的独特之处就在于,软件开发是由一堆独特的人,以独特的方式,做独特的东西。我们先来看看软件开发,遇到了哪些独特的困难:

 

  1、沟通困难:同为软件开发,可能面对的思维模式,是完全不同的世界。比如二进制的世界,函数的世界、逻辑的世界、过程的世界、对象的世界、二维表的世界等等等等。在这些不同的世界中开发软件,需要的思考方式、思维习惯都是不同的。开发项目大到一定程度以后,不同的世界必须在一个完整的项目中和谐并存,这些差异,有时候就会带来沟通障碍。再加上技术与需求世界之间的差异,沟通成为一个非常重要的工作。软件开发中的人与事,如何才能有效沟通,是一个非常重大的课题。

  2、控制困难:程序员都是些怪人,至少都是些聪明人。要让他们听话,很难啊。一个项目,要想顺利进行,程序员们能够接受的,必须是“稳定而合理的命令”。而在软件开发过程中,往往需求频繁变动,领导层层叠叠,用户花样百出,计划一改再改。程序员们经常会接到朝令夕改的命令,而且还来自于那些莫名其妙,连说话的逻辑都成问题的家伙。如何才能知道,那些小伙子是在严格地执行命令而不是在那里磨洋工呢?

  3、评价困难:要控制,必须要能够赏善罚恶,但是在软件开发中,何为善?何为恶?如何评价一个程序员的工作?我们当然可以在项目计划该结束的时候,再去问他们,做完了吗?但是如果他们那时候没有完成,再要挽救就来不及了。必须在项目开发过程中建立即使有效的反馈机制。以小而高密度的评价手段,来对开发过程进行较为准确的控制,这一切,都必须建立在合理的评价机制的基础上。但是,这样一套评价机制,非常困难。什么才算是好的需求分析?好的代码?好的设计?好的测试用例?没有定论。举个例子:两三年前,在项目中加入EJB的成分,越多越好。现在呢?设计人员,随时都可能被人指责滥用EJB。这风向变得也太快了。

  4、估算困难:这个在上一章我们也讨论到了,软件开发与其它行业的一个重大区别,就在于对于软件开发的估算成本,不能忽略不计。想要估算变动剧烈的项目的时间、人力、成本,简直就是不可能的任务。

 

  怎么办?

 

(未完待续)


文章来源:http://spaces.msn.com/members/zbw25/Blog/cns!1pA6-3FOo9yNp_4lmEHxdDqA!693.entry
posted @ 2005-11-11 08:55 读书、思考、生活 阅读(184) | 评论 (0)编辑 收藏
 
  老婆孩子都在边上,好好的睡着了。
  
  我一个人在看《兄弟》。前面有好多精彩的段落,我是在白天看的,看得我哈哈大笑。我两岁的儿子奇怪的看着我,他无法理解,我为什么会对着一本书笑个不停。
  
  到了晚上,他们都睡了,我又开始接着看。
  
  眼泪不停的流下来,我擦干了,它又流下来。还好儿子没有看见,否则,他会如何猜想爸爸的表现呢?
  
  我必须承认,我以前没有看过余华的任何一部作品。既没有任何比较,我也就完全的投入了一个故事。
  
  这是一个我模模糊糊能够理解,我的儿子绝对不可能理解的世界。我甚至希望,他永远也不要理解这样的世界。
  
  在那个世界里,黑暗是那么的重,几乎每一个人,都在尽情的吐出自己的黑暗毒素,宋凡平简直就是一个非凡的存在。他让我想起了《美丽人生》里的那个爸爸。
  
  当两个孩子向妈妈哭喊“爸爸死了!”的时候,我一个人痛哭失声。后面的故事,越看越让人“恨”,让人伤心,让人郁闷,让人几乎绝望。书中反复出现的“你会有善报的”这样的话,似乎在为下集做着铺垫。真的会有善报吗?
  
  我期待着下集。

文章来源:http://spaces.msn.com/members/zbw25/Blog/cns!1pA6-3FOo9yNp_4lmEHxdDqA!686.entry
posted @ 2005-11-08 20:55 读书、思考、生活 阅读(126) | 评论 (0)编辑 收藏
 2.探寻假设
  在探寻软件开发以往的方法论背后的假设之前,首先要指出的是,这些假设很难被发现,不是说它们不存在,而是这些加上很少被看成是假设,往往作为理所当然的一部分,被排除在常规的思考范围之外。让我们来看几段大家都很熟悉的文字吧。
  “大多数大型软件项目都没有达到预期的目标,交付推迟,预算超支,功能不完善。许多软件项目彻底失败了。”
    ——FDD
  “当前,软件开发的情况并不理想。很多系统最终不能交付,或者最终交付的系统经常性地发生延期或者超出预算;系统常常不能满足用户的需要,其结果是不得不一遍又一遍地开发。”
    ——AM
  “许多软件项目,或许应该说大部分软件项目实际的开发周期比预期的要长,实际的花费比预期的要多,实现的功能比预期的要少。这造成了严重的质量问题。”
    ——某一本CMM的书籍
  怎么样,是不是似曾相识?我敢肯定,你不只在一本书的序言部分,看到过类似的文字。无论这本书写于70年代、80年代、90年代还是21世纪。情况一直都是这么“糟糕”。有趣的是,这些书都会在“痛说软件开发现状”之后,转而兜售自己的方案。当然,在Brooks的《没有银弹》之后,他们兜售的语气谦虚了很多。作为一个文化现象来说,这非常值得细细品味。但是,我们需要追问的是:为什么?
  难道软件开发是全世界最难的事情吗?为什么失败率如此之高?如果我们在使用了层出不穷的手段之后,还是不能提高成功率,我们应该怎么办?其实也很容易,当年我的一个老板就想出了一个绝妙的办法,绝对简单,就是将我自己的工作量估算乘2!我们的项目几乎从不失败,总是能够在计划时间内完成。于是我想,如果我们把全世界的软件项目估算都乘以2的话。也许软件开发这个行当,也能成为一个有尊严的职业。大家都会生活得更加幸福。
  “这实在是太过分了!”也许有人会说:“你这是自欺欺人、掩耳盗铃、移靶就箭!”但是且慢生气,生气的人应该冷静下来反思:如果目标如此难以达到,会不会是目标有问题呢?当然,事情没有这么简单,如果把目标直接乘2来提高成功率,全世界的老板都会发疯的!我们要做的,是提高估算的准确性。
  “啧啧,还以为是什么了不得的结论呢!这个问题早就有人研究了,不就是IT度量吗?”一定会有人站出来这么说。但是,IT度量的研究,提高了估算的准确度了吗?思路在这里被卡住了。直到有一天,我看到了量子力学中的“测不准原理”!
  “测不准原理”告诉我们,在物理学中存在着很多对变量,当我们想要精确测量其中一个变量时,对另一个变量的测量误差就会越来越大。但是,在软件开发里,我们是进行估算,而不是进行测量,而且也不存在一个和工作量相对的变量,当工作量估算准确时,它会变得模糊。简单地套用物理定律是行不通的,思路又卡住了。
  突然有一天,我问自己:“假设工作量已经估算精确到了99.9999%会出现什么情况?”“不可能!”“如果真的达到了这个精确度了呢?”我对自己穷追不舍。“那只有一种情况,就是项目已经接近完成了!”“我们估算完成时,项目接近完成,这意味着什么呢?”“这毫无意义,没有一个项目会花这个多时间来估算,而且如果要这样估算,估算本身要花多少时间都不知道。”停!我已经想通这个问题了。
  估算工作量也是一种工作,同样也需要工作量。对于大多数任务来说,估算所花费的工作量,相对与总的工作量来说,几乎可以忽略不计,或者说:为了能够得到一个有指导价值的估算值,所花费的工作量,几乎可以忽略。但是,对于软件开发来说,这只是一个假设。我们假设对于软件开发的工作量估算,同样只需要花费极少的工作量。但事实上,当我们花费三五天时间得出结论,这个项目需要20个人月时,我们估算的误差,可能(甚至一定)会大于200%这就是我们这个行业显得如此失败的原因。
  为什么这个行业与其它行业不同呢?在建筑行业,工程概预算的费用,不超过总费用的百分之一、甚至千分之一。为什么软件项目的估算做不到这一点?因为两个原因:
  一是由于技术的复杂性,以及这个行业技术的飞速发展(也可说尚未定型),同样的需求,采用不同的设计,不同的技术实现,工作量相差极大。仅仅根据需求,无法估算出工作量。而随着概要设计、详细设计的层层分解,工作量估算的精确度的确会提高,但是对于软件开发来说,项目也越来越接近完成了。
  二是由于需求的变动性以及不可预测性。早期的估算、设计甚至代码,都有可能作废。一个项目实际上重做了N遍,在软件开发领域也是常有的事。估算的误差,自然也就大到不可思议了。
  然而,绝大多数人没有想过这个问题,大家都自然而然的根据最初的工作量估算,来评价以后的工作。
    工作量/人员效率=项目时间
    工作量×单位成本=项目成本
    缺陷总数/工作量=软件质量
  我们根据最初估算的工作量,来推出项目的时间、成本和质量目标,我们假设工作量估算只花费可以忽略不计的工作量,我们依据这些目标来衡量项目的成败,然后我们发现大多数项目都失败了,然后我们研究技术、改进过程、寻找银弹!最终,我们发现自己还是这么失败!
  是到了彻底反省我们的假设的时候了。
  (注:Brooks在《人月神话》中指出了另一个重要的假设:人与月是可以互换的。)

文章来源:http://spaces.msn.com/members/zbw25/Blog/cns!1pA6-3FOo9yNp_4lmEHxdDqA!683.entry
posted @ 2005-11-07 23:24 读书、思考、生活 阅读(191) | 评论 (0)编辑 收藏
  发现自己的BLOG,战线实在是铺得太开了,目前排在计划内的就有:
 
  1、连载《定论》——讨论软件项目管理的一篇大论文,目前进度(2/7)
  2、连载《ANTLR学习心得》——学习ANTLR的心得记录,目前进度(1/5)
  3、连载《BBS回顾》——回顾我的BBS的生涯,目前进度(1/8)
  4、最近又看了不少的书,按理应该写点简单的书评,昨天看完了《1973年的弹子球》,今天又拿到了余华的《兄弟》......
  5、技术评论,比如打算写写对于国内开源的一些看法
  6、教育评论,比如打算写写我理解的国内教育的优劣
  7、时事评论,每天都有那么多有趣的事情
  8、生活记录,还好现在老婆记了不少,不过我这“读书、思考、生活”,却越来越名不副实了
  ......
 
  这样下去,肯定是不行的,我必须收缩战线,将精力集中到有限的2~3个主题上来,完成一个,再开一个新的“窗口”。从下周开始,我打算,首先完成一个连载,就先完成《定论》吧,每周除连载之外的BLOG,不超过3个。
 
  就这么定了!

文章来源:http://spaces.msn.com/members/zbw25/Blog/cns!1pA6-3FOo9yNp_4lmEHxdDqA!675.entry
posted @ 2005-11-06 23:27 读书、思考、生活 阅读(141) | 评论 (0)编辑 收藏
<2005年11月>
303112345
6789101112
13141516171819
20212223242526
27282930123
45678910

常用链接

留言簿(20)

随笔档案

友情BLOG

搜索

  •  

最新评论

阅读排行榜

评论排行榜