Archive for the ‘转载’ Category.

作坊式软件公司,如何面对紧迫项目

来自:http://zhudonghua.cto.csdn.net/Article.aspx?Name=zhudonghua&pointid=2046

作者:祝冬华

(非常具有实际意义)

如何面对紧迫项目,如何控制项目的进度?我一直在思考这个问题。
不论积极文化建立的怎么样,不论公司对员工的信任和员工对公司的信任达到什么样的程度,最终的目的就是高质量、高要求、并在可控的时间范围内完成项目。项目带来利润公司才能生存。

然一个现实是:我们所在的软件公司,大多是作坊式企业。有的是令人绝望的管理质量、开发模式和管理层。最可悲的是,管理层的保守性,并且地位不可动摇。于是,营盘是泥塑的,员工是流水的。项目也就变成不可控了。

面对这种情况,只有死马当活马医了。在急迫的项目面前,所有的敏捷开发、CMM、PSP、TSP、RUP、完善的管理开发流程等等都是遥远的事情。所以就近有效的处理才是有效的办法。

第一:文化使之。必须让所有参与者明白,我们是如何的紧迫,项目是如何重要,每个人的作用是如何的关键。大家唯有奋勇杀敌,才能求得生存。通过激发大家的热情,激发士气。

第二:合理使用工具。合理的使用工具,可以使工作事半功倍。例如:版本控制工具SVN,文档编写工具WPS Office 2009(几乎与Word2003一样,而又不收费),脑图工具,Visio,project,bugfree等。

第三:任务部署。项目负责人需要第一时间快速做总体分析,现状汇总,并将任务分解,并用project制作Gantt chart。然后将任务分配下去。做这些工作的基础是充分沟通。

第四:控制项目的进度。项目负责人每天要把项目状态汇总,并及时更新每天的Gantt chart。第二天早上,要一早开项目组短会,并报告项目的进展情况。对于表现突出的成员,要表扬;对于落后的成员,要鼓励。最后,要团结所有项目组成员,将使他们士气高涨。

第五:加强内测。项目开始后,首先要改善测试环境,其次改变大家的测试观念(很多软件开发者,就是把程序跑一遍就认为通过了),使大家做好充分的测试,并及时的发现缺陷并修复。项目达到相应阶段后,要交叉测试。

第六:加强思想工作。对于出现思想或工作未达到要求的人员,一定要做好思想工作。一定要了解他工作未达到要求的原因,并及时帮助解决。最终要的结果是,将落后的工作,及时补回来,并重新高效率工作。

第七:要团结所有项目组成员,千万不要有划分他们,不分彼此。所有人,必须明白:兄弟齐心,其利断金。

第八:要及时安排加班很晚的成员,及时休息。项目负责人,要做好后勤工作。(比如:解决就餐,临时住宿,交通费用等问题,这些问题一定要及时解决)

第九:要及时分享项目阶段性成果。一是成果与总结会议;二是项目组聚餐;三是精神奖励(奖状,小物品,优秀员工等);四是物质奖励,这个视实际条件定。

最后呢,项目必须要成功。

艾睿CMAX技术峰会

活动页面来自http://bbs.airia.cn/riameeting/thread-8950-1-1.aspx

本次活动除了北京主会场以外,上海、广州还将以分会场形式参与到这次CMAX技术峰会中。

本次会议话题规划为三个大类:

  • HTML5\FLEX\SL\AJAX 与 RIA 解读
  • Flex 4、AIR 2.0、Flash Player 10.1新特性解读与RIA技术瞻望
  • 实际应用案例与开发经验分享

话题范畴(例子):

·      HTML 5与RIA之间的关系

·      Flex 4、Flash Builder与Flash Catalyst之间的配合

·      Flex 4新特性

·      Flash Player 10.1新特性(主要讲一下智能手机这块的发展)

·      AIR 2.0 Beta的新特性(主要讲一下UDP、多点触摸、手势识别、P2P等新特性)

·      在实际项目中使用的一些Flex特性、技巧、框架等(例如:Flex测试、性能优化、视频点播、某一个框架分析)

具体信息请通过稍后放出的活动报名页查阅。


在此提前揭晓会议幕前幕后日程表:

11月25日
主会场准备就绪、演讲者就位、分会场就绪。

11月26日
会议技术话题确定,各演讲者话题提纲确定。

11月30日
第一批入场卷 200 张通过活动报名页送出

12月10日
业界嘉宾到位、媒体到位

12月17日
布置会场、会场资料到位、机器、设备就位

12月18日
主、分会场通信测试、设备调试完毕,暂停入场券发放。

CMMI基础知识扫盲

来自:http://www.cmmionline.net

CMMI全称是Capability Maturity Model IntegrationCMMI是个好东西来的,但行内人士对她的认识并不全面,甚至有种种的误解。尽管网上有很多CMMI相关介绍,但一般都是比较苦涩难懂的。本文将用生动通俗的语句,让大家初步看清楚CMMI的真面面孔。

CMMI是什么东西?

CMMI英文全称是Capability Maturity Model Integration,直接翻译就是能力成熟度模型,直接看这几个中文字,你还是没有办法搞清楚CMMI是什么东西的。

大家可能在网上见过很多《成功人士的七个习惯》(可能还有很多类似的名字)的文章吧?有人总结了成功人士的成功的原因,总结出他们的习惯,如果我们也能具备这些习惯,那么我们也很可能成为成功人士。类似的,CMMI可以看作是成功企业如何做好软件的一些习惯、做法、准则等的集合,是如何做好软件的最佳实践的集合。如果企业也能按照CMMI的要求做好,那么企业就很可能成为成功的企业。

CMMI里面所有的要求,都是来自于成功企业的最佳实践的,她的先进性我们不必怀疑,如果我们没有做好,那不是CMMI本身的问题,而是我们自己没有理解好或者是没有执行好的原因。

说到CMMI,就不可避免会提到另外3个字母SEISEI全称是Software Engineering Institute的全称,直译就是软件工程学院,是美国的一所大学,CMMI标准就是他们搞出来的。

CMMI目前最新版本是V1.2,如果你是现在才开始了解CMMI的,那么你完全没有必要去搞清楚V1.1V1.2的差别,更加没有必要去比较CMMCMMI的差别,直接了解CMMI V1.2就可以了,你只需要知道CMMCMMI的前身,而CMMI V1.1虽然比CMM要新很多,但现在已经不用了。现在在互联网上还有很多比较CMMCMMI的文章的,除非你很想了解或者你有很多时间,建议不必去看这些内容。

连续式 vs 阶段式

CMMI有两种表述方式:连续式与阶段式,两种方式只是从不同的角度来阐述CMMI,其实质上表达的内容是一致的。就好像我们做数据库设计的时候,可能会设计不同的视图来查看相同数据表的数据,只是角度不一样。

大家可能会问,好好的CMMI,为什么要搞两种表达方式呢?不怕把大家搞糊涂吗?

确实这两种方式把不少人给搞糊涂了,这是SEI的一个败笔。以前的CMM是只有阶段式的表达方式的,连续式是后来提出来的,SEI内部分成两派,一派支持连续式,一派支持阶段式,互不相让,最后达不成一致,就出来了现在这个样子,连续式与阶段式两者共存。

连续式其实更加能反应过程改进的本质,并且能更好地引导企业把过程改进做到实处,但连续式比较难以理解。阶段式是直接继承CMM的,大家都比较容易理解,而且阶段式有一个级别,在商业上更好宣传,但很容易导致企业为了过级而过级。

连续式和阶段式同时也是评估的两个不同角度,用连续式评估,企业会得到很多个PALevel,用阶段式评估,企业会得到一个整体的Level

CMMI还不是很熟的人士,先了解这么多就可以了,以后再慢慢了解。

Wiki技术和规范

很多的转载…

wiki是任何人都可以编辑的网页。在每个正常显示的页面下面都有一个编辑按钮,点击这个按钮你就可以编辑页面了。有些人要问:任何人都可以编辑?那不是 乱套了么?其实不然,wiki体现了一种哲学思想:“人之初,性本善”。wiki认为不会有人故意破坏wiki网站,大家来编辑网页是为了共同参与。虽然 如此,还是不免有很多好奇者无意中更改了wiki网站的内容,那么为了维持网站的正确性,wiki在技术上和运行规则上做了一些规范,做到既持面向大众公 开参与的原则又尽量降低众多参与者带来的风险。这些技术和规范包括:
1、保留网页每一次更动的版本:即使参与者将整个页面删掉,管理者也会很方便地从纪录中恢复最正确的页面版本。
2、页面锁定:一些主要页面可以用锁定技术将内容锁定,外人就不可再编辑了。(虽然wiki都有这个功能,但我看到使用它的甚少,这可能跟w iki倡导的精神相违背吧)。
3、版本对比:wiki站点的每个页面都有更新纪录,任意两个版本之间都可以进行对比,wiki会自动找出他们的差别。
4、更新描述:你在更新一个页面的时候可以在描述栏中写上几句话,如你更新内容的依据、或是跟管理员的对话等。这样,管理员就知道你更新页面的情况。
5、IP禁止:尽管wiki倡导“人之初,性本善”,人人都可参与,但破坏者、恶作剧者总是存在的,wiki有纪录和封存IP的功能,将破坏者的IP纪录下来他就不能在胡作非为了。
6、Sand Box(沙箱)测试:一般的wiki都建有一个Sand Box的页面,这个页面就是让初次参与的人先到Sand Box页面做测试,Sand Box与普通页面是一样的,这里你可以任意涂鸦、随意测试。
7、编辑规则:任何一个开放的wiki都有一个编辑规则,上面写明大家建设维护wiki站点的规则。没有规矩不成方圆的道理任何地方都是适用的。

字符编码笔记:ASCII,Unicode和UTF-8

原文来自:http://www.ruanyifeng.com/blog/2007/10/ascii_unicode_and_utf-8.html

今天中午,我突然想搞清楚Unicode和UTF-8之间的关系,于是就开始在网上查资料。

结果,这个问题比我想象的复杂,从午饭后一直看到晚上9点,才算初步搞清楚。

下面就是我的笔记,主要用来整理自己的思路。但是,我尽量试图写得通俗易懂,希望能对其他朋友有用。毕竟,字符编码是计算机技术的基石,想要熟练使用计算机,就必须懂得一点字符编码的知识。

1. ASCII码

我们知道,在计算机内部,所有的信息最终都表示为一个二进制的字符串。每一个二进制位(bit)有0和1两种状态,因此八个二进制位就可以组合出 256种状态,这被称为一个字节(byte)。也就是说,一个字节一共可以用来表示256种不同的状态,每一个状态对应一个符号,就是256个符号,从 0000000到11111111。

上个世纪60年代,美国制定了一套字符编码,对英语字符与二进制位之间的关系,做了统一规定。这被称为ASCII码,一直沿用至今。

ASCII码一共规定了128个字符的编码,比如空格“SPACE”是32(二进制00100000),大写的字母A是65(二进制01000001)。这128个符号(包括32个不能打印出来的控制符号),只占用了一个字节的后面7位,最前面的1位统一规定为0。

2、非ASCII编码

英语用128个符号编码就够了,但是用来表示其他语言,128个符号是不够的。比如,在法语中,字母上方有注音符号,它就无法用ASCII码表示。 于是,一些欧洲国家就决定,利用字节中闲置的最高位编入新的符号。比如,法语中的é的编码为130(二进制10000010)。这样一来,这些欧洲国家使 用的编码体系,可以表示最多256个符号。

但是,这里又出现了新的问题。不同的国家有不同的字母,因此,哪怕它们都使用256个符号的编码方式,代表的字母却不一样。比如,130在法语编码 中代表了é,在希伯来语编码中却代表了字母Gimel (ג),在俄语编码中又会代表另一个符号。但是不管怎样,所有这些编码方式中,0—127表示的符号是一样的,不一样的只是128—255的这一段。

至于亚洲国家的文字,使用的符号就更多了,汉字就多达10万左右。一个字节只能表示256种符号,肯定是不够的,就必须使用多个字节表达一个符号。 比如,简体中文常见的编码方式是GB2312,使用两个字节表示一个汉字,所以理论上最多可以表示256×256=65536个符号。

中文编码的问题需要专文讨论,这篇笔记不涉及。这里只指出,虽然都是用多个字节表示一个符号,但是GB类的汉字编码与后文的Unicode和UTF-8是毫无关系的。

3.Unicode

正如上一节所说,世界上存在着多种编码方式,同一个二进制数字可以被解释成不同的符号。因此,要想打开一个文本文件,就必须知道它的编码方式,否则用错误的编码方式解读,就会出现乱码。为什么电子邮件常常出现乱码?就是因为发信人和收信人使用的编码方式不一样。

可以想象,如果有一种编码,将世界上所有的符号都纳入其中。每一个符号都给予一个独一无二的编码,那么乱码问题就会消失。这就是Unicode,就像它的名字都表示的,这是一种所有符号的编码。

Unicode当然是一个很大的集合,现在的规模可以容纳100多万个符号。每个符号的编码都不一样,比如,U+0639表示阿拉伯字母Ain,U+0041表示英语的大写字母A,U+4E25表示汉字“严”。具体的符号对应表,可以查询unicode.org,或者专门的汉字对应表

4. Unicode的问题

需要注意的是,Unicode只是一个符号集,它只规定了符号的二进制代码,却没有规定这个二进制代码应该如何存储。

比如,汉字“严”的unicode是十六进制数4E25,转换成二进制数足足有15位(100111000100101),也就是说这个符号的表示至少需要2个字节。表示其他更大的符号,可能需要3个字节或者4个字节,甚至更多。

这里就有两个严重的问题,第一个问题是,如何才能区别unicode和ascii?计算机怎么知道三个字节表示一个符号,而不是分别表示三个符号 呢?第二个问题是,我们已经知道,英文字母只用一个字节表示就够了,如果unicode统一规定,每个符号用三个或四个字节表示,那么每个英文字母前都必 然有二到三个字节是0,这对于存储来说是极大的浪费,文本文件的大小会因此大出二三倍,这是无法接受的。

它们造成的结果是:1)出现了unicode的多种存储方式,也就是说有许多种不同的二进制格式,可以用来表示unicode。2)unicode在很长一段时间内无法推广,直到互联网的出现。

5.UTF-8

互联网的普及,强烈要求出现一种统一的编码方式。UTF-8就是在互联网上使用最广的一种unicode的实现方式。其他实现方式还包括UTF-16和UTF-32,不过在互联网上基本不用。重复一遍,这里的关系是,UTF-8是Unicode的实现方式之一。

UTF-8最大的一个特点,就是它是一种变长的编码方式。它可以使用1~4个字节表示一个符号,根据不同的符号而变化字节长度。

UTF-8的编码规则很简单,只有二条:

1)对于单字节的符号,字节的第一位设为0,后面7位为这个符号的unicode码。因此对于英语字母,UTF-8编码和ASCII码是相同的。

2)对于n字节的符号(n>1),第一个字节的前n位都设为1,第n+1位设为0,后面字节的前两位一律设为10。剩下的没有提及的二进制位,全部为这个符号的unicode码。

下表总结了编码规则,字母x表示可用编码的位。

Unicode符号范围 | UTF-8编码方式
(十六进制) | (二进制)
——————–+———————————————
0000 0000-0000 007F | 0xxxxxxx
0000 0080-0000 07FF | 110xxxxx 10xxxxxx
0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx
0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

下面,还是以汉字“严”为例,演示如何实现UTF-8编码。

已知“严”的unicode是4E25(100111000100101),根据上表,可以发现4E25处在第三行的范围内(0000 0800-0000 FFFF),因此“严”的UTF-8编码需要三个字节,即格式是“1110xxxx 10xxxxxx 10xxxxxx”。然后,从“严”的最后一个二进制位开始,依次从后向前填入格式中的x,多出的位补0。这样就得到了,“严”的UTF-8编码是 “11100100 10111000 10100101”,转换成十六进制就是E4B8A5。

6. Little endian和Big endian

上一节已经提到,Unicode码可以采用UCS-2格式直接存储。以汉字”严“为例,Unicode码是4E25,需要用两个字节存储,一个字节 是4E,另一个字节是25。存储的时候,4E在前,25在后,就是Big endian方式;25在前,4E在后,就是Little endian方式。

这两个古怪的名称来自英国作家斯威夫特的《格列佛游记》。在该书中,小人国里爆发了内战,战争起因是人们争论,吃鸡蛋时究竟是从大头(Big- Endian)敲开还是从小头(Little-Endian)敲开。为了这件事情,前后爆发了六次战争,一个皇帝送了命,另一个皇帝丢了王位。

因此,第一个字节在前,就是”大头方式“(Big endian),第二个字节在前就是”小头方式“(Little endian)。

那么很自然的,就会出现一个问题:计算机怎么知道某一个文件到底采用哪一种方式编码?

Unicode规范中定义,每一个文件的最前面分别加入一个表示编码顺序的字符,这个字符的名字叫做”零宽度非换行空格“(ZERO WIDTH NO-BREAK SPACE),用FEFF表示。这正好是两个字节,而且FF比FE大1。

如果一个文本文件的头两个字节是FE FF,就表示该文件采用大头方式;如果头两个字节是FF FE,就表示该文件采用小头方式。