存档

2010年8月 的存档

通过分区(Partition)提升MySQL性能

2010年8月31日 没有评论

什么是数据库分区? 数据库分区是一种物理数据库设计技术,DBA和数据库建模人员对其相当熟悉。虽然分区技术可以实现很多效果,但其主要目的是为了在特定的SQL操作中减少数据读写的总量以缩减响应时间。 分区主要有两种形式://这里一定要注意行和列的概念(row是行,column是列) 1. 水平分区(Horizontal Partitioning)这种形式分区是对表的行进行分区,通过这样的方式不同分组里面的物理列分割的数据集得以组合,从而进行个体分割(单分区)或集体分割(1个或多个分区)。所有在表中定义的列在每个数据集中都能找到,所以表的特性依然得以保持。 举个简单例子:一个包含十年发票记录的表可以被分区为十个不同的分区,每个分区包含的是其中一年的记录。(朋奕注:这里具体使用的分区方式我们后面再说,可以先说一点,一定要通过某个属性列来分割,譬如这里使用的列就是年份) 2. 垂直分区(Vertical Partitioning) 这种分区方式一般来说是通过对表的垂直划分来减少目标表的宽度,使某些特定的列 被划分到特定的分区,每个分区都包含了其中的列所对应的行。 举个简单例子:一个包含了大text和BLOB列的表,这些text和BLOB列又不经常被访问,这时候就要把这些不经常使用的text和BLOB了划分到另一个分区,在保证它们数据相关性的同时还能提高访问速度。 在数据库供应商开始在他们的数据库引擎中建立分区(主要是水平分区)时,DBA和建模者必须设计好表的物理分区结构,不要保存冗余的数据(不同表中同时都包含父表中的数据)或相互联结成一个逻辑父对象(通常是视图)。这种做法会使水平分区的大部分功能失效,有时候也会对垂直分区产生影响。 在MySQL 5.1中进行分区 MySQL5.1中最激动人心的新特性应该就是对水平分区的支持了。这对MySQL的使用者来说确实是个好消息,而且她已经支持分区大部分模式: Range(范围) – 这种模式允许DBA将数据划分不同范围。例如DBA可以将一个表通过年份划分成三个分区,80年代(1980’s)的数据,90年代(1990’s)的数据以及任何在2000年(包括2000年)后的数据。 Hash(哈希) – 这中模式允许DBA通过对表的一个或多个列的Hash Key进行计算,最后通过这个Hash码不同数值对应的数据区域进行分区,。例如DBA可以建立一个对表主键进行分区的表。 Key(键值) – 上面Hash模式的一种延伸,这里的Hash Key是MySQL系统产生的。 List(预定义列表) – 这种模式允许系统通过DBA定义的列表的值所对应的行数据进行分割。例如:DBA建立了一个横跨三个分区的表,分别根据2004年2005年和2006年值所对应的数据。 Composite(复合模式) – 很神秘吧,哈哈,其实是以上模式的组合使用而已,就不解释了。举例:在初始化已经进行了Range范围分区的表上,我们可以对其中一个分区再进行hash哈希分区。 分区带来的好处太多太多了,有多少?俺也不知道,自己猜去吧,要是觉得没有多少就别用,反正俺也不求你用。不过在这里俺强调两点好处: 性能的提升(Increased performance) – 在扫描操作中,如果MySQL的优化器知道哪个分区中才包含特定查询中需要的数据,它就能直接去扫描那些分区的数据,而不用浪费很多时间扫描不需要的地方了。需要举个例子?好啊,百万行的表划分为10个分区,每个分区就包含十万行数据,那么查询分区需要的时间仅仅是全表扫描的十分之一了,很明显的对比。同时对十万行的表建立索引的速度也会比百万行的快得多得多。如果你能把这些分区建立在不同的磁盘上,这时候的I/O读写速度就“不堪设想”(没用错词,真的太快了,理论上100倍的速度提升啊,这是多么快的响应速度啊,所以有点不堪设想了)了。 对数据管理的简化(Simplified data management) – 分区技术可以让DBA对数据的管理能力提升。通过优良的分区,DBA可以简化特定数据操作的执行方式。例如:DBA在对某些分区的内容进行删除的同时能保证余下的分区的数据完整性(这是跟对表的数据删除这种大动作做比较的)。 此外分区是由MySQL系统直接管理的,DBA不需要手工的去划分和维护。例如:这个例如没意思,不讲了,如果你是DBA,只要你划分了分区,以后你就不用管了就是了。 站在性能设计的观点上,俺们对以上的内容也是相当感兴趣滴。通过使用分区和对不同的SQL操作的匹配设计,数据库的性能一定能获得巨大提升。下面咱们一起用用这个MySQL 5.1的新功能看看。 下面所有的测试都在Dell Optiplex box with a Pentium 4 3.00GHz [...]

分类: Mysql 标签:

大型高性能网站的十项规则

2010年8月31日 没有评论

使用合适的会话管理 第一个想到的扩展系统的方法就是添加更多硬件。例如,使用两台服务器而不是一台。这听着合理,但会产生潜在问题:会话管理。这对Java程序来说是很严重的问题,在PHP中也会产生可延展性问题, 对于数据库的负载尤其如此。 会话被定义为单独的最终用户登录或者连接一 段时间,其中通常会包含多个TCP/IP的HTTP连接、几个Web页面,通常还包括几十个甚至上百个页面元素,如框架、菜单、Ajax更新等。所有这些 HTTP请求都需要知道用户是谁,才能满足安全的要求,并向用户传送适当的内容,因为这些都是会话的组成部分。通常每个会话都会包括相互关联的会话数据, 如用户名、用户ID、历史、购物车、统计资料等等信息。 问题在于,在有两台Web服务器和多个 HTTP连接的情况下,用户流量会在两台服务器之间分配和移动,服务器很难知道用户是谁,并对所有数据进行跟踪,因为每个页面或者页面的组成部分都可能来 自不同的服务器。在PHP中,通常是这样解决的,在第一次连接或登录的时候就创建一个会话ID并将其放在Cookie中,然后这个Cookie会和每个 HTTP请求一起发送。 这样做带来一个问题,接下来每段PHP脚本 都需要基于ID来查找会话数据。由于PHP无法在执行过程之间保持状态(这与Java不同),这个会话数据需要存储在某个地方,通常是在数据库中。但是, 如果复杂的页面需要在每个页面载入过程中对其进行十次查找(这是经常要做的),那就意味着每个页面都要执行10次SQL查询,这会导致数据库上很大的负 载。 在前面所举的中国 Internet用户 0.01%的例子中,可能很容易在每秒内仅仅为了管理会话就生成上百个查询。解决方法是一直使用位于Cookie中的会话ID,并且使用像 Memcached之类的服务来缓存会话数据以获得高性能。 还要注 意其中存在安全性的问题,因为黑客可 以伪造另一个用户的会话ID,这是很容易找到或看到的,特别是在公用的Wi-Fi中。解决方法是对会话ID进行恰当的加密或者签名,并将其与时间区间、 IP地址以及其他关键信息 像浏览器或者其他细节相绑定。在Internet上有很多不错的关于良好的会话管理的例子,你可以根据需要找到最适合的。 总是要考虑安全性 尽管编写像防止SQL注入和登录安全之类的 代码涉及很多安全问题,但不幸的是,几乎没有人考虑过安全性,而那些考虑到的人也没有对其进行很好地理解。而本文要关注的是操作性的系统安全。对于这类安 全,我们的焦点集中在三个安全领域:防火墙、运行的用户以及文件访问权限。 除了配置专门的硬件防火墙(像Cisco的 ASA)之外,所有服务器都还应该运行像Iptables之类的防火墙,它会保护服务器免受其他威胁和攻击。这些威胁和攻击可能来自公共的 Internet、其他服务器或本地服务器,也包括使用VPN或者SSH通道的开发和操作人员。我们仅对指定的IP开放确实需要的端口。Iptables 可能会很复杂,但是有很多不错的模板,我们通常可以使用它们来帮助客户创建Iptables。例如,默认的RedHat或者CentOS防火墙的配置说明 只有10行,显然并不实用。我们最佳实践的Iptables配置大概有5页,这其中包含了Linux所能提供的最高级的安全防范。 所有公用的服务,都应该运行在专门的用户 下,如Apache。切记永远都不要使用Root用户运行,因为这会让任何闯入到Apache的用户接管整个服务器。如果Apache只是运行在 Apache用户下或者运行在Nobody下,那么闯入Apache就不是一件容易的事情了。 Web服务器运行或者服务的文件 (像.php和.html文件)对于Web服务器的用户应该是不可写的。这意味着Apache或者Nginx用户不应该拥有Web目录的写权限。有很多方 法都可以做到这一点,而最简单的就是将这些文件为其他用户所有,然后让Apache/Nginx等用户归属于能够使用640权限读取文件的组中。这会防范 几乎所有的黑客和针对页面的攻击。 此外,永远不要使用Ftp来上传文件,特别 是在公用的Wi-Fi环境中,因为在其中黑客很容易盗取用户名和密码。取而代之的是使用Sftp会更加安全。另外,每个雇员都应该拥有自己的用户ID和随 机密码。 使用标准的路径和安装配置 一个令人讨厌的部署问题是,开发者很少考虑 他们的软件会被部署到生产Web服务器的什么位置,以及如何部署。我们看到过许多大型的系统将它们的PHP代码部署在/home/xiaofeng或者 /web/code路径下。事实上,这两个路径都是非常不标准的,并且会带来操作和安全性的问题。当这些系统从开发环境转移到测试环境再到生产环境中时, 因为每个安装配置都是非标准的,所以经常会出现问题,这时就需要开发者调整才能够正常工作。 你应该总是使用标准的安装包和二进制文件来 安装像Apache之类的服务器。不要从源代码编译或者安装Tarball,因为这会导致长期稳定性和管理上的问题,另外在服务器上安装多个不同的版本也 会造成混淆。 Web 站点应该总是在指定的平台和 Linux发布的标准路径下进行测试和部署 ,像 [...]

分类: WEB架构 标签: , , ,

Kohana

2010年8月31日 没有评论

Kohana 是一款纯 PHP5 的框架,基于 MVC 模式开发, 它的特点就是高安全性,轻量级代码,容易使用。 2009年9月发布了3.0版本,支持HMVC模式。 2.3x版本特性 高安全性 轻量级代码 学习周期短 MVC设计模式 100% UTF-8 兼容 松弛耦合架构 易扩展性 2.3x版本特点 PHP5 Only PHP4已经是过去式了,没有必要再花时间和精力去兼容它。可以充分发挥PHP5的优势。 轻量级 更高的灵活性,代码的执行过程比较容易掌握,载入的文件少,执行速度快 使用方便 方便配置,有一个config文件夹,配置文件都放在这里 提供了常用的类和帮助类,并且可以很方便地扩展 自动载入类和Helper,想用的时候直接初始化或者直接调用静态方法 不强行要求使用Model 提供了ORM,不用再写SQL语句,当然也支持SQL语句的执行 强大的事件处理机制,方便编写插件(跟WordPress类似) 级联式资源,优先级为application>moudle>system,方便升级(覆盖system部分即可) 安全性 内置XSS保护,可以在Config里开起全局XSS过滤 所有插入数据库的数据都经过处理,如mysql_real_escape_string 禁用magic quotes 社区驱动 有一个活跃的社区。Kohana的开发者们来自世界各地,有着各自的天赋。开发进度流畅,可以在短时间内修复bug以及反馈用户提出的建议。 文档齐全 文档包括概览、安装、用户指南、具体类的API和使用demo等等。可以帮助你更快更深入地了解Kohana。 3.0版本特性及特点 重写了ORM,可以书写更多的SQL。 重写了路由,所有的路由要用户自己定义。 代码布局做的重新调整,代码的扩展性更强。 技术 严谨的 PHP5 面向对象(OOP)编程 用 SQL 助手实现简单的数据库抽象层 多 session 驱动(native、数据库、cookie) [...]

分类: PHP开源 标签:

WordPress

2010年8月31日 没有评论

WordPress是全球最棒的免费博客(Blog)发布平台之一,在GNU通用公共许可证下授权发布,它基于经典的PHP+MySQL搭建而来,其中PHP用于编写相应的操作代码、生成页面,MySQL数据库则用于保存用户发布和编辑的内容。用户可以在支持PHP和MySQL数据库的服务器上架设自己的博客平台。Wopus中文平台也是基于 WordPress架设的一个内容管理系统(CMS)。 WordPress 是 b2/cafélog 的延续。b2/cafélog由 Michel V 创建。这个工作现在由 WordPress 开发人员接替。相应地,软件的开发人员也少,主要的程序员仅两名,即Ryan Boren和Matthew Mullenweg(一般都称他为Matt)。前者是网络硬件巨头 – 思科公司(Cisco Systems) – 的一名工程师,以开发免费软件为乐。后者则主要为知名IT媒体CNet Networks工作,并有自己的咨询公司(Mobius Limited),时常还做一些中介业务。开发Wordpress,其实只是他们的业余爱好而已。 WordPress并不大,最新的稳定版本Wordpress2.5.1的zip压缩包仅1.2MB左右,“麻雀虽小,但五脏俱全”。有了它,你就可以: 进行文章发布、分类、归档 支持文章、评论、分类等多种形式的RSS输出 提供链接的添加、归类功能 支持评论的管理,防垃圾功能 支持对风格(CSS)和程序本身(PHP)的直接编辑、修改 在Blog系统外,方便的添加所需页面 通过对各种参数进行设置,使你的Blog更具个性化 生成静态html页面(需要mod_rewrite支持) 通过选择不同主题,方便地改变页面的显示效果 通过添加插件,可提供多种特殊的功能 支持Trackback和pingback 支持针对某些其它blog软件、平台的导入功能 支持多用户共同创作 这些功能,已经能够满足个人用户绝大多数的需求,并且,对于中小企业来说,它也是建立内容或资讯发布平台的得力工具。 个人认为,与其它的Blog发布软件相比,Wordpress的主要优势在于: 安装最简单,著名的五分钟安装教程 php+css构造,Web标准支持非常好 主题与插件丰富,您可以到我们的Wopus主题站和Wopus插件基地找找 简单方便的从其他Blog系统导入功能

分类: PHP开源 标签:

2010浏览器下载排行榜

2010年8月31日 没有评论

2010上半年截止6月底,浏览器之家经过7月半个月的统计和参考,发布了2010上半年年中文WEB浏览器下载排行榜。 注:1.这个只是浏览器下载量排行榜,并不是真正意义上的浏览器市场占有排行。 2.本数据存在一些误差,仅供参考。 3.浏览器下载数据以十万起算,低于50万不做浏览器下载排行榜。 参与统计的浏览器有:ie6 ie7 ie8  火狐  傲游 世界之窗 谷歌浏览器 360安全浏览器 搜狗浏览器  腾讯tt浏览器 opera浏览器 参与统计的数据来源有:华军软件下载 天空软件下载站  多特软件下载 迅雷软件推荐 360软件管理器  新浪下载 百度指数以及各浏览器官方的下载数据。 以下是浏览器统计的2010上半年年中文WEB浏览器下载排行榜数据: 排行榜 1.ie系列浏览器 ie6下载超过500万次,ie7近300万次,ie8 360万次 2.傲游浏览器 下载超过1000万次 3.360安全浏览器,因为捆绑和强行推荐,本站统计到的数据仅此傲游浏览器,也许下半年将超越傲游。 4.腾讯tt浏览器 下载次数超过380万 5.火狐浏览器  下载次数310万 火狐如果不是频繁更新下载量可能更低,其中文浏览器要继续发力。 6.世界之窗 170万次 当然这个除去360安全浏览器加壳下载的,360浏览器前面已经另算了。 7.搜狗浏览器 100万 上半年可能用于搜狗拼音强行推荐安装,不便于本站统计,数据只有内部知道。 8.谷歌浏览器 小于80万 去年经历快速增长后,今年增加速度很慢。 9.opera 浏览器  60万上下,勉强入榜。

分类: WEB优化 标签:

【项目经理之修炼(1)】《序章》关于要写给谁看的问题

2010年8月30日 没有评论

从事这么多年的软件项目管理工作,也该奉献一些自己的见解和心得了——老孙的心里话。 那么,要写文章,首先是要搞清楚写给谁看。 开门见山的说,我是写给下面三类软件业朋友的: 一.想要成为软件项目经理的朋友; 二.刚刚从技术转型做项目管理的朋友; 三.空降到陌生工作环境做项目管理的朋友。 我为什么要选择这些朋友作为我的读者呢?很简单,他们有三个共同点: 一.缺乏管理经验或对自己的管理经验缺乏自信; 二.缺乏人际技巧或对自己的人际技巧缺乏自信; 三.年纪尚轻。为什么这样说,大部分国内初次成为项目经理的朋友,都是在工作5年左右。也就是说30上下。 理论太高深的我不懂,我也不是学院派的。作为一个经验者,给上面三类朋友解解惑还是有自信的。 那么开始进入主题吧。 说起来,在当今环境下,想成为一个软件项目经理其实不很难。因为什么呢?很简单,潜规则如此。 具体说来,下面三个潜规则,决定了成为项目经理十分简单: 潜规则一.软件项目管理者必须技术者出身。 这个在理论上不成立的潜规则,落实的非常好。因为你不懂技术,根本领导不了手下技术员。这就是国内IT业的现状,不服不行; 潜规则二.软件项目经理还算不上公司领导阶层。 虽然公司把万斤重担压在你身上,其实还是没有把你当回事儿。所以,封你一个软件项目经理,公司并不在乎; 潜规则三.年龄之潜规则。 工作5年就是分水岭。对于核心技术人员来说,给你干了3-5年,如果你不给我个项目经理当当,那后果。。。,结果就是,公司要留人,就不得不叫你做项目经理。 由此可见,在多个潜规则之下,技术高手们纷纷华丽变身,成为了项目经理。 一时间,升了职,加了薪,个人扬眉吐气,公司的期待,家人的祝福,生活真是无限美好! 然而,巨大的危机已经悄悄地来到了你的身边。。。 当你的朋友们在开心地看着你的太空步或者爱尔兰踢踏舞表演时,没有人意识到你已经是在与狼共舞了。。。 先看看下面的招聘启事吧,这只不过是一家几十人公司的一个招聘广告: ××××××××××××××××××××××××××××××××××××××× 招聘职位1:软件项目经理 职位描述: 1、带领实施团队完成某软件项目; 2、制定项目计划和实施部署;项目进度、质量及范围管理与控制。 3、负责软件实施过程中与各方的沟通、关系协调与维护;以及实施人员的安排与管理 4、负责了解客户对软件的业务需求及意见,及时反馈、跟踪开发人员解决问题。 5、及时、有效协调资料解决项目实施过程中出现的疑难问题; 职位要求: 1、具备优秀的团队协作精神,良好的沟通能力,有较强的口头/书面表达能力; 2、熟悉企业信息化业务,百万企业信息化项目经验; 3、精通数据库系统和项目管理工具,; 4、熟悉O行业相关业务知识;有财务背景知识,快速理解和学习能力; 5、良好的客户服务意识,负责、敬业、细心。 6、有软件大项目管理经验或N年以上项目管理经历优先; ××××××××××××××××××××××××××××××××××××××× 那么,让我们看一下这个招聘启事对软件项目经理能力的描述吧: 团队协作精神              ——高 沟通能力                    ——高 口头表达能力              ——高 书面表达能力              ——高 IT技术                      ——高 O行业知识                  ——高 理解和学习能力           [...]

分类: 项目开发 标签:

项目经理管理心得

2010年8月30日 没有评论

本人做项目经理工作多年,感到做这个工作最要紧的就是要明白什么是因地制宜、因势利导,只有最合适的,没有什么叫对的,什么叫错的,项目经理最忌讳的就是完美主义倾向,尤其是做技术人员出身的,喜欢寻找标准答案,耽误了工作进度,也迷茫了自己。以下是本人一些做项目的个人体会,写出来供大家指点,在讨论过程中共同提高水平。 项目开始阶段是一个最重要的阶段。项目经理在接手一个新项目的时候,首先要尽可能地多从各个方面了解项目的情况,如: 1.这个项目是什么项目,具体大概做什么事情,是谁提出来的,目的是解决什么问题。在国内很多客户都很不成熟的情况下,千万不要根据项目的名称望文生义地去想象项目的目标。一个名为“办公自动化”的项目很有可能在你进场以后一个月才发现客户其实需要的是一个计算机生产管理辅助信息系统系统。前期了解情况的工作越详细,后面的惊讶就越少,项目的风险就越小。 2.这个项目里牵涉哪些方面的人,如投资方、具体业务干系方、项目建成后的运营方、技术监督方等等,很多项目里除了业主单位的结构很复杂以外,还有一些其他单位也会牵涉进来,如项目监理公司、业主的行业主管机构等。项目经理需要了解每个方面的人对这个项目的看法和期望是什么。事先了解各个方面的看法和期望,可以让你在做项目碰到问题的时候,就每件事情分析哪些人会在什么方面支持你,哪些人会出于什么目的反对你,从而提前准备联合朋友去对抗敌人,让事情向你所希望的方向发展。没有永远的朋友,也没有永远的敌人,只有一致的利益,这句话作为项目经理是一定要记住的; 3.基本了解了客户的情况后,下面的事情就是了解自己公司各方面对这个项目的看法。首先是高层领导是否重视,这个决定了你在需要资源的时候,公司是否会根据你的要求提供最有力的支持。领导口头肯定是说支持的,你需要做的是了解公司对这个项目的实际期望,是想把项目越做越大还是想赚钱?是想做样板工程还是干脆想敷衍了事,公司领导对项目的态度决定了你做这个项目的战略,而这个战略方针将对你做项目计划产生直接的影响; 4.在做整体项目计划前,还要大致计算一下你手上的资源。首先是时间,现在市场竞争激烈,往往很多项目要求在几乎不可能的时间范围里完成。对于这一点,你在做项目的风险控制计划的时候要充分考虑。其次是人员,根据项目预算和已往经验,大致计算一下未来的项目小组有多少种角色,每个角色目前公司是否有人,是否能完全归这个项目使用,是否需要另外招聘一些人员,招聘的准备工作要尽早启动。最后就是一些设备的准备,项目所需大件关键设备要尽早预定,以后不管发生设备等人还是人等设备的情况,浪费的都是你的时间; 5.现在是做项目说明书的时候了。一份好的项目说明书不仅将要做的事情描述得很清楚(主要是讲做什么,而不是说怎么做),而且把如何检查也说明得很透彻。也就是说它不仅说明白了要做哪些事情,也让客户的业务人员(一般不懂技术)知道项目做成什么样就算完成了。简单地说,项目说明书描述项目做哪些事情和每件事情做到什么程度以及如何检查每一个结果。 6. 是到做总体计划的时间了吗?不,你现在已经知道了客户的目标和你手上的资源,那么做计划以前,你还需要和你的经理和客户充分沟通资源的问题。因为很多资源是还不明确的,你需要写一份报告,详细分析这个项目的风险以及对资源的需求情况。如果一些问题不能得到解决的话,将发生什么样的后果。如果资源不够,就要高层改变策略,增加对这个项目的投入。甚至在条件许可的情况下,有些公司会放弃这个项目。总之,没有人能完成一个不可能完成的任务,如果项目经理不能尽早发现风险,那么就只能去当烈士了。 7.明白了要做哪些事情和你手上的筹码以及你做这个项目的总体策略,现在是成立项目小组的时候了。很多项目经理都没有自己选择组员的权利,那么,就尽量发挥你的影响力去寻找那些你想要的人吧。成员的组成根据项目不同,相差较大,很难有什么具体要求,但是,一定要有精通客户业务的人,很多小项目里,这个人就是项目经理本人,大项目里会配备行业专家(Industry expert),这样和客户沟通起来才不会鸡同鸭讲,双方才可以相互理解。我经常看到的情况是我们的技术人员和客户交谈时满口的专业术语,结果搞得客户一头雾水,反过来,他还指责客户不懂技术。其实,明白自己想做什么的客户已经是很好的客户了,不知道自己要做什么,更不懂怎么做还要指手画脚的客户到处存在,但是要明白,是客户选择了你,而不是你选择了客户,有了客户你才有工资拿,心平气和一点吧。 对于这种需求天天变的客户,你就一定要事先做好规矩: 一、统一联系人,客户指定一个人和项目组进行沟通,不能张领导、王领导都来说几句,如果他们意见不一致,那你只有得罪领导的选择了,所以,项目的最初就要定好规矩,我项目组只认一个的意见,有什么要求你们内部先统一再和我谈,我不想卷入你们内部业务部门之间的矛盾之中; 二、所有需求变更全部要有书面文字,这点切记!这样做好处多多: *有书面证据,以后他还想改,你有了他以前要求的证据,告诉他:你以前可是这么说的; *便于需求变更管理,需求如何慢慢演变的历史可以看清楚,从而更深切地体会客户的目的; *对于客户来说,嘴巴一动最方便,反正是你们做,不花他的资源,所以要求是否合理,是否和项目的目的一致,他是不负责任的。但是如果要他写书面要求,还要签字盖章,他就要谨慎多了,而且一写东西,思想就会更加深入,很多无理要求也就这样胎死腹中了;     8.现在你要面对三群人:你的领导、你的组员和你的客户,和这些人沟通,让他们知道你打算怎么做,什么时候要他们做什么准备这些事情将是你的主要工作。既然沟通这么重要,那些事先定义一下沟通的原则也是一件很要紧的事情。很多沟通原则都是潜规则,如果你在一个部门时间做长了,对这些规则的运用觉得是一件理所应当的事情,但是,你现在面对的是多个部门甚至多个单位,不把沟通规则说清楚,你以后就会吃亏。下面的东西看起来无聊,其实还是很管用的:第一个是规定信息的流动方式和介质,是推还是拉。推的意思就是项目经理将主动发布信息,不管通过电话、邮件还是书面方式,保证将信息传达到每个人。这种情况适合小项目,人少;拉的意思就是项目经理就是一个类似web服务器,你自己需要什么信息就去问他。当然,没有项目经理把自己搞得那么累,他会用发布信息到公共介质的方式公布信息,简单的是白板,复杂一点的是项目的公共信息交互区,潜规则就是我发了你没去看就不要说我没告诉你。说这些看似很无聊,其实里面牵涉信息传达不完全的责任问题。当然,这些都是指一般的方式,而且不要绝对化,一般情况下,主动沟通和被动访问是同时存在的,尤其是对领导,项目经理更加应该主动去和领导沟通。第二个问题就是文档问题,很多人怕写文档,但是项目经理一定要牢记“好记性不如烂笔头”的道理。有理有时候为什么会说不清呢?就是因为没有证据。所以项目经理开始就要和客户说清楚有些文档是必须签字的,比如项目经理的项目日志,每个星期至少让客户签字,另外所有达成共识的东西,比如会议纪要,甚至领导的讲话记录,都要写成文档,双方签字,这样以后扯皮的时候,就能做到有据可查。记住:说了的就和没说一样,只有写下来大家签字后才算真正发生了的。还有一些问题,比如你提交的报告,给领导(包括本方领导和客户领导)做一个选择题,结果领导压住不批,让你无所适从,结果拖延了进度。这时候,你可以等,但是注意要留记录,标明是谁的责任;另外,如果你在开始阶段就和领导商定:如果批示提交三天后没有得到领导答复就算对方同意,这样你就会主动很多。再比如不同事件的审批流程问题:什么等级的事情记录在项目日志里、什么等级的事情要双方项目经理专门签署备忘录、什么等级的事情要双方领导出面签署合同附件等等。事先想得越周到,以后的工作就越主动。 9.好了,做了很多前期工作,定义了一些游戏规则,现在是坐下来做计划的时候了。这一节,任意找一本项目管理的书都会说得比我好,所以我就少写一点,说一些自己的体会就是了。首先是找几个关键组员,比如客户业务专家、系统分析员等等,做一下项目模块划分工作。项目分成几块去做,每一块完成什么,模块之间的信息如何交换等等。需求定义的是做什么的问题,而这里说的是怎么做的问题。这里要强调一点:完成一个目标有很多种方式,你要选一种你最熟悉的,而不是看上去最完美的,这个思路会让你的项目减少很多风险。有时候客户会被某种新技术打动,坚持要你采用那种新技术,你就应该告诉他:你选我做这个项目,就应该容许我采用自己最喜欢的方式做事情,新技术之所以有诱惑力,就是因为吃亏的人还不多,我不希望你成为第一批受害者。采用一个计划会让你的工作更加明确,比如用微软的Project软件,你填写完表格以后,就可以知道这个项目有多少件事情要做,每件事情需要什么资源,他们之间的前后关系如何,消耗的时间有多长,完成后有什么标志等。所有的结果最后用一个叫做干特图的形式表现出来。你做完这个表以后会惊奇地发现,干特图上项目的结束时间会远远落后于你的计划结束时间(签合同的人永远不会先征求你的意见的)。当然,学过项目管理的人会大谈什么WBS、优化路径之类的东西,但是我的经验是你再优化也不可能把这些东西安排到计划的时间结束。如果你没碰到这个问题,在我恭喜你挑了一个轻松活之前,请你再去确认你是否罗列了所有要做的事情和正确评估了他们所需要的时间。这时候,你就要考虑牺牲一些任务的时间(也意味着质量)了。按照什么标准牺牲?这个项目的战略!我们在第三节提到过的战略。我的经验是如果你什么都赶进度,其结果可能就是十件事情你一件也没做好,想想多么失败啊。所以,把资源投到你熟悉和有把握的事情上,最后的结果是十件事情,你有三件做成了精品,三件完成,还有四件因为某些原因延误,成绩单是否靓丽了很多呢?战略决定优先级,而正确排列事情的优先级是一个项目经理能力的主要体现。 好,现在项目已经完成了前期工作,了解了项目的目标、搞清楚了手上的资源,制定了项目的策略,然后编制了项目的整体计划,项目进入实施阶段。进入这个阶段反而是项目经理比较空闲的时候,不像前期的时候项目经理要象记者一样到处和不同的人接触,搞清楚他们在说什么,努力猜测他们在想什么和他们的真正目的,那才是最累人的事情。当然,小项目的项目经理往往自己也是一个资源,要做很多事情,这时候反而比谁都苦。项目经理这段时间的主要工作是保持和客户领导以及自己领导的沟通。和客户领导沟通时特别要注意,除非你需要对方给你支持,那么你才需要讲得具体一点,否则,告诉他一切正常就可以了,而且态度要积极一些,千万不要说一些领导不懂的细节,比如:“王局长,最近项目进度还算正常,就是JVM经常发生一些内存泄漏的情况…”王局长:“(*&$@@”。和自己的领导汇报也要注意这个问题,除非他是一个技术高手,你需要他的技术经验,否则一般就汇报进度是否正常以及有问题时你的对策和打算就可以了,有些需要他支持的地方,比如资源调用需要说详细一点。和组员开会,除了一些项目进度跟踪会议以外,还有很多讨论会,需要大家用头脑风暴方法给出解决问题。与会人员很多都是技术人员,他们的特点是注重细节、缺乏大局观、有点消极悲观、自尊心强(如果总结得不对,欢迎大家拍砖),所以,你作为会议的主持人,只要负责提出问题和记录下他们的观点,千万不要做评判者的角色。一个问题,有很多方面,从不同的角度看,现象是完全不同的,想想盲人摸象的故事吧。这些技术人员,他们往往精通一个方面,就自己的角度发表见解,除非一些很特别的情况,你都应该认为,他们提出的方案,从他们的角度来看是最合理的。你的长处是掌握事情的优先级,评估各个方面的轻重缓急,从而根据他们的意见得出一个合适的(而不是正确的)方案。所以,在会议上,你要充分尊重每一个人和他的意见,夸奖那些意见提得比较好的人,千万不要把会议带入无休止的争论(你要让大家知道事情不是非黑即白的,而是多元的,唉,我们的教育惹的祸…)。会后,你自己写文档,做决定。会议上大家的面子都被照顾了,自己实施起来的阻力就小,如果还有意见的,你就私下找他聊,如果还不能说服他,你就要让他明白,因为你负责这个项目、你担当风险,所以,这个优先级应该你来判断。组织中的高层,并不见得水平会比一般的成员高,但是,他要承担组织的风险,加之信息的不对称性,所以,对事情的优先级的判断肯定比下属强。 在开发过程中,内部管理还要注意的一点是时刻强调以验收为目的的思想,每个任务的最终可交付成果一定要是可以被检查的,比如,【界面要求:美观大方、简洁明快】,这个要求我就不知道如何检查。所以,给开发小组布置任务的时候就要考虑如何检查结果,比如我见过一个计划,里面有一个任务【开发人员熟悉EJB编程】,这个任务,除了让这些人去参加一些专业认证考试,否则,结果很难被检查。所以,时刻考虑如何检查结果、如何向客户交付是项目经理一直要注意的事情,我听说有些老项目经理拿到项目是倒排计划的,即首先看如何验收和验收标准,然后决定工作计划。很多项目开始了很久,还不知道如何验收,那么这个项目出问题的可能性就很大了。做项目就是为了验收,我们的角色不是研究机构,我们的目的就是在付出那么多劳动后得到结果。 另外我插一句:我是极其不主张到客户现场开发的。尤其是一大群技术人员直接和客户交流,很容易引起冲突和矛盾(技术人员的本性决定的)。我的做法是项目经理和项目实施人员到现场,软件开发人员还是在公司做项目。项目实施人员就是初级项目经理,他们了解自己的产品,懂得一些客户的业务,关键是在于他们具有良好的沟通能力,俗称“皮厚”。他们是客户和研发人员的桥梁,其职业方向也是很机动灵活,以后可以有很多方向可以转,比开发人员的路要宽得多。 接着,我们再谈谈最让人头痛的需求变更问题。变更通常分为两种:一种是部分更改了原先的目标,即需求变更;另一种是没改变目标,但是客户不满意目前的实现方式,大到流程的实现,小到界面的布局,都是属于这类。碰到这种情况是难以避免的,主要是事先沟通的不够充分和客户随着项目的进展,慢慢想清楚了问题,改变了以前的思路。这时候,如果需要改并且你的战略是容许这种情况的,那么注意下面几点: 1. 确保以前的文档,就是记载着以前的结论的东西,客户是否签过字,如果没有,赶紧把你的工作停下来,赶快再和客户自己确认一下你的方案,然后让他签字,避免以后说话没有凭据; 2. 和客户坐下来,自己探讨他修改的根本目的是什么,是不是有同样能达到相同目的,但是对你来说有代价更小的选择? 3. (项目初期的工作)明确更改流程,一般是客户指定一人签字(否则客户每个领导都有权力来插一杠子,你就废了),以正式项目文件的方式提交给你,然后,你做评估分析,分析对成本、进度的影响,在你的领导同意后,出相应意见书,主要是要说明更改设计的原因和指出由此带来的不确定后果(这个东西先写出来,后面如果真的发生了,至少不是你的错)。然后再让客户在上面签字。见过医院给病人做手术以前让家人签的免责条款吗?对,就学习那个,让大家都意识到任何的更改都有成本和代价。 系统开发告一段落后,就进入客户培训、系统验收阶段,这个阶段,我一般会注意以下几个问题: 一、给客户做培训前,多注意一些表面功夫。很多程序员认为,系统的逻辑核心是否正确是关键,至于界面如何,界面上的用词是否准确,那是无关紧要的问题,而且培训的时候也是信手拈来,想到哪里说到哪里,下面听讲的人不知所云,云山雾罩,培训效果自然可以想象。我的体会是,给客户做培训的版本,如果你在做多次测试以后仍然不能确定逻辑是否合乎要求,那么,你至少要在界面上多花一点功夫。注意每个界面的布局、用词、链接的正确性等等,总之不要让客户看到一些他不该看到的东西。文档方面,准备至少两个文档:用户手册和培训手册。这两个文档的内容很多都是一致的,但是角度完全不同。用户手册往往是站在系统设计者的角度,按照自己的思路,分模块讲解系统的操作和功能;而培训手册,一定要站在客户业务人员的角度,根据每个角色面对不同业务的办理,如何通过使用本系统的一系列功能来实现目标。所以,第一次培训以前,系统界面是否完整正确、培训文档是否完备都是很关键的因素,第一炮打不响,以后就麻烦很多。 作为项目经理,其实脑子里就是几样东西:做哪些事情、做到什么程度、怎么交货、手上的资源以及各个事情的优先级。所谓多快好省那是人类的梦想,这四个方面都是相互矛盾的,属于典型的又要马儿跑,又要马儿不吃草的类型。考虑问题的轻重缓急方面,往往是把快放在第一位,各方领导都会给你最后期限,所以保进度是第一位的;省是第二位的,企业的根本目的是盈利,如果收入不能增加的话,至少费用要控制住;好是第三位的,没办法,谁都想精益求精,但是,没有强大的资源保障,质量只好先牺牲了;最后是多,客户的要求源源不断,如何降低客户的期望值,让他们从理想回到现实也是项目经理的分内工作。 验收前,除了做好文档工作,即可交付成果以外,多花时间搞清楚客户的做事情流程是很重要的事情,这些在前面已经有所提及,这里就不再多说。 我对验收最大的体会就是举证问题。即千万不要让客户这么想:你必须有证据证明你的系统是没问题的。这样你就没戏了,微软那么多天才,做了XP还天天打补丁,要你的程序没问题,既不可能,你也没办法拿出证据。你要让客户明白,所谓验收,就是我按照测试文档的测试用例跑一遍,结果和预期结果一致就应该算通过了,而且还容许有一些小错误留在验收后改正,他可以对测试用例提意见。所以,验收前双方要确认测试计划和测试用例。如果他认为系统不符合要求,那么他应该举证,证明这个系统和最初设计相背离的。所以,参考法律概念,千万不要举证倒置。另外,认为系统完美了才能验收的想法也是错误的,软件开发合同里一定要注明验收以后维护期的费用问题,否则,客户担心一旦验收就得不到你们的支持,自然不配合验收,那么,你这个项目经理就很难交功课了。

分类: 项目开发 标签:

virtualbox 虚拟机磁盘空间不足的解决

2010年8月30日 没有评论

在Virtualbox新建虚拟机,添加磁盘的时候有一项动态扩展虚拟硬盘,设置了一定大小的动态扩展虚拟硬盘,可在虚拟机使用过程中还是会提示磁盘空间不足。 所谓动态扩展是VDI文件的大小随着guest使用的容量而增大,动态扩展的上限就是你最初指定的虚拟硬盘的大小值。 但是很不幸,现在VirtualBox还没有提供改变虚拟硬盘大小上限的功能。其实安装guest时完全可以指定一个很大的值,毕竟它不会占用多余的硬盘空间,仅仅占用guest真正利用到的空间而已。但是问题已经出现了,重新来过显然太过麻烦了,办法还是有的。 新建一个虚拟虚拟硬盘,就你台式机再加一块硬盘一样。 1.在设置->介质->添加虚拟硬盘 新建的虚拟硬盘,就像你新建虚拟机时一样。 2.进入guest系统,我的guest系统是xp. 控制面板->管理工具->计算机管理->存储->磁盘管理 找到新添加的磁盘,初始化磁盘,并添加为扩展磁盘分区。这样就添加了一块新的硬盘,解决了磁盘空间的问题。

分类: Ubuntu 标签:

VirtualBox通过数据空间来共享文件

2010年8月30日 没有评论

VirtualBox是一款开源的功能强大的虚拟机软件。它不仅具有丰富的特色,而且性能也很优异。更重要的是支持简体中文界面。 通过设置数据空间就可以灵活的使虚拟电脑与物理电脑之间共享文件了。 以虚拟电脑里面安装的是WindowsXP为例。首先要给虚拟电脑安装增强功能,启动虚拟电脑后,点击“设备”→“安装增强功能”: 稍候就会弹出自动安装提示,如果没有自动运行,请在虚拟电脑里面手动打开光盘,找到并打开VBoxWindowsAddtions.exe,一路Next下去,并按照提示重启。 然后继续点击“设备”→“分配数据空间”,如图: 按照下图所示添加一个要共享的文件夹或者一个磁盘: 提示 只读分配:勾上后,虚拟电脑就不能向这个文件夹存放数据,只能读取。 为了安全,建议添加几个数据空间的文件夹,留一个不勾选“只读分配”,其他都勾选“只读分配”。 固定分配:勾选这个后,下次使用就不用再重新设置这个数据空间了。 下图是我设置的数据空间,仅供参考: 进入虚拟电脑的桌面,在“我的电脑”上面右击,选择“映射网络驱动器”: 我的电脑-映射网络驱动器 点击“浏览”,找到“VirtualBox Shared Folders”文件组,选择一个数据空间的文件夹或者子文件夹,点击确定: 最后,打开“我的电脑”,拉到最下面,如果有网络驱动器,就说设置已经生效了

分类: Ubuntu 标签:

10个基于Ajax的PHP Webmail客户端

2010年8月29日 没有评论

下面是十个非常不错的,使用Ajax技术的用PHP开发Webmail的客户端。大家在使用的时候请注意其license。 1. RoundCube RoundCube Webmail 是一个基于浏览器的IMAP 客户端,其提供了丰富的功能,包含MIME,地址本,文件夹操作,邮件搜索和拼写检查。 RoundCube Webmail 由 PHP写成,需要 MySQL 或 Postgres 数据库的支持。其UI完全遵守于XHTML 和 CSS 2. 2. Zimbra Zimbra 提供了一个开源的邮件和日历系统,也是基于Ajax技术,非常强大的客户端,他可以通过web service集成第三方的应用“mash-ups” ,于是你可以享有CRM,地图或其它更多的功能。 3. Xuheki Xuheki 是一个很快的 IMAP 使用AJAX技术开发的客户端。你能想到的功能它基本上都有了,它使用的是 GNU General Public License. 4. SquirrelMail SquirrelMail 这是一个中规中矩的webmail,PHP语言写成,并没有使用AJAX技术,所以并不是很炫,不过它是使用了纯内建的PHP功能支持了IMAP和 SMTP。所有的页面都是纯HTML 4.0 (没有任何JavaScript) ,这样的目的主要是为了最大化兼容于不同的浏览器。 5. Atmail AtMail, 一个免费的轻量级的 Ajax Webmail 客户端,由PHP写成,支持WEB和WAP。 6. afterlogic AfterLogic WebMail Lite PHP 是一个非常易用的 webmail 但其界面又非常Cool,其支持 AJAX [...]

分类: PHP 标签: