最近评论

项目经理、系统架构师或技术骨干应该具备的水平

 一直想写一篇这样的总结性文章,但不是没有时间就是没有勇气写下去,因为怕别人丢臭鸡蛋。这两天有时间,终于鼓起勇气,将这篇文章写来下!也希望对一些正在寻找更好发展的朋友能有点帮助,也希望对于一些技术跟管理方面的牛人,能给予一些建议。

      作为一名项目经理、系统架构师或技术骨干,其水平如何,关系到公司的项目管理、软件质量管理等方面的问题。项目经理或技术骨干应该要起带头作用,使整个团队的开发及管理能达到一种更高的水平。

      那作为一名项目经理或公司技术骨干应该学会那些工具及知识点呢?涉及到这一块的工具及技术点非常多,如何去选择,是摆在项目经理、系统架构师跟技术骨干面前的问题。根据公司及团队的情况,选择合适的工具或技术框架,这一点非常重要。在项目的不同阶段,需要有不同的工具来支持。

      按照软件系统的生命周期的六个阶段,一般分为需求分析阶段、系统设计阶段、系统开发阶段、软件测试阶段、系统发布阶段、系统维护阶段,这几个阶段都需要有不同工具的支持。

一、需求分析阶段:
第一、项目管理及需求管理工具

    项目管理工具很多公司都在使用,为什么要使用这些工具?假如没有使用这些工具,而是使用Excel或Word进行记录,那当需求变更?需求实现情况的跟踪?软件是否能按时交付?将是一件非常烦锁且容易出错的事情。一个软件项目、开发团队能否获得成功,管理非常关键。比较有名的商业化工具有:MicroSoft Project ServerProject 2003IBM Rational RequisiteProJIRAPowerDesinger。比较有名的开源需求管理工具包括:OSRMT(Open Source Requirements Management Tools)XplannerOpenworkbench等等。

    很多软件公司都会使用SharePoint,在SharePoint平台上,只要你想得到,基本上都可以通过配置方式来满足你的业务需求。在SharePoint上,可以跟MicroSoft Project Server很好的结合,再配置Project 2003为客户端,进行公司的项目管理。也许对Project操作习惯的问题,在Web界面进行项目管理的时候,总觉得很不方便。

    IBM Rational RequisiteProhttp://www.ibm.com )可以算是最骨灰级的一个软件了,假如你公司整个软件生命周期管理都是采用IBM的解决方案,那使用RequisitePro是一个非常好的解决方案。需要这些软件可以到IBM官方网站上去下载一个最新版本,或者在电驴上面下载一些“特别”版本。设计工具、管理工具的完美结合,这个正是IBM Rational RequisitePro的强项。RequisiteProOffce结合得也是非常完美。

    JIRAhttp://www.atlassian.com )原来只是一个缺陷跟踪系统,你可以在JIRA上面创建新的ISSUE,当ISSUE分配给某个程序员时,系统会自动发送一封邮件给该程序员,提示有新的BUG。JIRA也有提供一个Eclipse插件,你可以在Eclipse上面,查到属于自己的ISSUE,并快速解决。现在JIRA也可以用来做项目管理,在操作方面非常人性化,个人一直非常喜欢使用JIRA来进行项目管理、缺陷管理,再结合Eclipse,简直就是完美!但作为商业的软件,价格也非常贵,互联网上也有很多Crack,大家有兴趣也可以搜一下。

    OSRMThttp://sourceforge.net/projects/osrmt )是一个开源的需求管理工具,分为客户端跟服务器,也提供了一个安装界面供用户安装,做开源的已经算是做得非常完美了。当前最新版本是V1.5,有兴趣的朋友可以下载一个最新版本玩一下,操作还算是挺人性化的。

    Xplannerhttp://www.xplanner.org )是一个开源的,基于XP编程的项目管理软件,它可以帮我们生成一些统计图表。这个软件从06年底发布0.7b7版后,就再也没有更新过了,我对开源工具的看法就是:版本号没有超过1.0版,我都不会应用于生产!对于Xplanner,也是停留在试用的阶段。

    Openworkbenchhttp://www.openworkbench.org )也是一个开源的项目管理软件,其功能跟Project 2003相似,是一个值得大家去使用的一个工具,但对于中国很多软件公司,都是使用特别版的Project 2003。假如你很尊重版权,又不想使用Project 2003,那Openworkbench是一个非常好的选择。

第二、需求分析工具
    需求分析工具用得比较多可能就是Rational RoseMicroSoft VisioMindManager,一般我们使用Rational Rose来进行用例分析,画用例图,画状态图;使用MicroSoft Visio来画出应用系统的结构图、流程图等。当然,对于MicroSoft Visio能画出来的东西,其实Rose也一样可以实现,只是,大家都是这么干,我们也没有必要专门去做一些特例的东西,特别是对于一些比较特殊的公司及行业。

    Ration Rose 2003是一个值得怀念的工具,至今还是有很多公司跟个人都是使用,个人觉得这个软件版本算是最经典的一个,但对于现在所见即所得的要求下,使用Rose 2003,可能没有办法满足你,因为它需要经过一些小操作才能满足你的要求。但不可否认,它是一个非常优秀的软件。现在对于一些喜欢使用新工具新技术的程序员,也许现在他们正在使用RSA。

    MicroSoft Visiohttp://www.microsoft.com )是每个搞设计的人都会用的一个工具,我们一般使用Visio来画系统结构图、关键流程图、系统部署结构图等。MicroSoft Visio也提供了UML的功能,可以用它来画用例图、类图、状态图,时序图等,但一般这个功能很少使用。至少我基本上不用。

    MindManagerhttp://www.mindjet.com )是一个非常好用的工具,我们用来描述我们的思维,很多人都不喜欢通过软件来描述,而是通过一张纸,然后在上面进行涂鸦,接着跟客户或团队进行思维沟通。MindManager很好地解决了这个问题。MindManager跟Office结合得非常完美,可以生成Word、Excel、PDF等文件。这个工具是我一直在使用的一个软件,非常好用。最新版本为7,大家有兴趣可以下载一个试用一下,也可以在网搜搜索一些“特别”版本。

二、系统设计阶段:
第一、系统设计工具
    主流的系统设计工具有大家非常熟悉的Rose2003,不过,现在已经不叫Rose了,现在IBM最新的设计工具是RSA(Ration Software Architect),Borland Together,SyBase PowerDesinger,MicroSoft Visio,对于开源的系统设计工具也有很多,比如ArgoUML、DBDesigner等等。

    RSAhttp://www.ibm.com ):IBM最新的设计工具,它是一个基于Eclipse平台的一个工具,对于你使用RSA,那也许你会将你的整个团队的工具都采用IBM的整套解决方案,使用RequisitePro来进行需求管理、使用RSA来进行建模、使用ClearCase来进行配置管理、使用ClearQuest来进行缺陷跟踪、使用RFT(Rational Functional Tester)来进行测试……RSA有一个最大的优点,那就是跟Word结合得非常好。这一点可以肯定。

    Togetherhttp://www.borland.com ):Borland公司的NB的设计工具,Together 2006版本也是一个基于Eclipse平台的软件,功能也是非常强大,其所见所得的功能,是我非常喜欢它的一个原因。还有一个原因就是基于Eclipse平台,这个可以跟我的开发工具很完美地整合在一起。不过,整合要注意一个问题,那就是Eclipse兼容性问题,这一点是非常烦人的。

    PowerDesignerhttp://www.sybase.com ): PowerDesigner是“一站式”建模与设计解决方案,物理数据模型的数据库平台无关性,所见即所得,反向工程,报表生成等等功能,使得它成为数据库设计人员心目中最好的产品,它的易用性深深地吸引了我!特别它的Repository模型库的功能,更让我们实现了模型设计的版本控制。最新的PowerDesigner,使得我觉得它是一件艺术品。做设计的人员一般会使用PowerDesigner来进行数据库物理模型设计,它是我心目中的首选工具。之前曾经对比过RSA、Together、ERWin的数据库模型设置工具,最终我还是更加喜欢使用PowerDesigner,也许,我的操作习惯已经被PowerDesigner腐蚀。

第二、开发的技术框架
    技术框架的选择是非常关键,一个好的技术框架,可以让我们的开发更加快速、团队的分工更加合理、系统能够支持多种数据库平台、我们的维护更加方便。

    Web前端MVC框架是Struts 2。Struts 2可以说是Struts穿上了WebWork的外衣,其内核大部分都是采用了WebWork的技术,并且基于AOP的设计思想,让我们在软件设计上的能够更加多地体现“高内聚,低耦合”的设计思想。

    J2EE框架是Spring,作为一个开源的J2EE框架,虽然它没有太多的新技术点,但它的整合性,拿得我们的开发更加简单,IOC、AOP、事务处理、开源框架的整合支持等等,使得作为一个J2EE框架的首选。

    持久层框架是Hibernate,作为一个开源的项目,我想,没有一个开源项目的社区能够你Hibernate一样,丰富的文档,活跃的社区,基于Hibernate的开发团队的庞大,使得它作为持久层框架的首先。基于 Hibernate,我们可以开发出数据库平台无关性的产品。但是,Hibernate也有自身的问题,假如使用不当,也许会有所失控,一旦失控,它所带来的,就是性能问题。对于最新的Hibernate3,存储过程的支持,外部SQL的定制,很好地解决了这个问题。但在关联关系上,使用还是要小心为好。

    页面框架,可以多考虑使用DIV技术、JSTL标签库、Struts 2标签库、DWR、AJAX、XML+XSLT等技术来让我们页面更好维护,使用OSCache缓存技术来提高我们页面的访问速度。

第三、开发规范的定制
    文件命名规范、数据库设计规范、编码规范、团队协作规定等等一些规范性的东西,需要在系统开发前就规定好,并且做相应的培训。QA也要做好监督的作用,定期做评审工作,对已发生的问题及可能出现的问题,及早发现,及早处理。

第四、开发工具的选择
    团队一定要选择同样的开发工具,开发工具相同,软件版本相同。为什么要这样子做,其实假如你作为一个Team Leader,你会在管理你的团队的时候发现很多问题,而解决这个问题,那在项目编码前,就把什么东西都规定好,以免其中发生问题,影响整个团队的开发速度。开发工具的选择也是非常重要的,目前企业用得比较多的开发工具有:Eclipse、Jbuilder、NetBeans、IDEA。

    Jbuilder:最新的Jbuilder版本是2007,2007版基本上可以算是重新开发的版本,因为它是基于Eclipse之上的。我算是Borland公司最为忠实的Fans啦,从Jbuilder6,到Jbuilder7,再到Jbuilder8,再到Jbuilder9、Jbuilder X,Jbuilder 2005,Jbuilder 2006,我经常跟我学生说,对于Jbuilder,相信没有人比我更熟悉他了,做Java开发接近6年时间,超过4年的时间,每天都都在使用的工具,Jbuilder见证了我的长成。使用过Jbuilder的人很多人知道一点,就是Jbuilder的盗版问题,安装完Jbuilder之后,假如你一个不小心,没有安装防火墙,那Jbuilder会不时通过8888端口向Borland总部发送一些你的计算机信息,这个是一种非常可怕的“木马”,什么是“木马”?这个就是!这种情况自从Jbuilder X以后就一直有。假如你不怕Borland公司的人跟工商局过来查你公司的软件的话,那选择Jbuilder是一个不错的选择。作为Java IDE开发平台的老大,Jbuilder在企业应用开发是非常有优势的,特别是开发EJB跟WebService,偶只能用一个句来形容,那就是牛。Jbuilder 2007,王者归来,相信对于很多Borland的Fans,还是非常喜欢并乐意去尝试的,不过,价格还是会让很多公司都受不了、速度会让很多程序员也受不了。我的Jbuilder的缘分到2006就基本上已经结束了。现在我的开发环境基本上都是Eclipse。

    Eclipse:IBM捐出来的好东西,发展挺快的,现在已经到了Eclipse3.3,非常好用的一个工具。但Eclipse只是一个基础平台,假如你需要其他的功能,那你需要下载相关的插件进行扩展,下载的插件要注意一下跟Eclipse平台的兼容性问题。Eclipse+MyEclipsehttp://www.myeclipseide.com )是个是很多WEB开发人员都是在采用的一个整合工具,但MyEclipse要钱,如果公司愿意为此支付29.9美元的话,那它是一个非常好的选择;比MyEclipse更上一个档次的还有Exadelhttp://www.exadel.com/web/portal/home ),不过,价格贵得离谱,因为它本身就是一家咨询服务公司做出来,主要还是靠咨询服务,培训挣钱,并且,运行时的不稳定,也让我放弃了选择这个插件作为我的开发工具,虽然这个工具真的是很强大。Eclipse+WTPhttp://www.eclipse.org )也是一个非常好的免费的开发工具,从eclipse官方网站上可以下载WTP跟Eclipse整合在一起的工具,现在教学基本上用这个。Lombozhttp://lomboz.objectweb.org/ )也是一个非常好用的免费J2EE插件,学生用的很多,因为好像有不少书都是用这个进行教学的。通过插件来的扩展本来是一件好事,但当它的版本问题?兼容性问题?安全性问题?语言问题?出现的时候,你就会骂着,为什么不提供一站式开发平台呢?如果你下载了语言包,你会发现,有些地方是中文的,有些地方是英文的,极其丑陋!也许,Eclipse作为一个基础平台,它确实是太基础了。但现在,我们也可以下载一些All-In-One版本的Eclipse,但个人感觉还是不够,很多功能,我们还需要去找插件来进行扩展。也许,Eclipse的决策者认为,作为基础平台,肯定是越简单越好,需要什么就加什么,这样,资源占用会更少。正如东方标准最咨深的平面老师曾宇飞讲过一句话:你会去麦当劳点酸菜鱼吃吗?

    NetBeans:作为Sun公司出品的开发工具,功能一样也是非常强大,不管你是做应用程序开发还是做应用系统开发,NetBeans都是一个不错的选择。NetBeans也跟Eclispe一样,也是一个基础平台,但这个基础平台做得比Eclipse强大很多,基本上你下载一个NetBeans就可以开发应用程序或J2EE应用系统了。并且,NetBeans的中文支持非常好,基本上一个新版本出来,就已经有中文版、英文版跟日语版了。看来,NetBeans的决策者还是比较看好这些人群的。NetBeans的Mobile插件开发J2ME是最快最好用的,至少我个人这么认为。开发J2ME应用产品,我首选的就是NetBeans。目前NetBeans已经发展到6.0的版本了,界面非常华丽,有兴趣的朋友可以下载一个玩一下。NetBeans的下载地址是:http://www.netbeans.org

    IDEA:对于IDEA的评价,我只能用六个字来形容,那就是:实用的艺术品。它非常好用,界面非常华丽,相当如果你是一个女性的项目经理或技术牛人,你会喜欢上这件艺术器的。IDEA开发应用程序非常强大,这一点绝对可以肯定。官方提供的插件也非常丰富,当你需要那一方面的功能,基本上都可以找得到,找插件,你只需要在官方插件库里面去找就可以了,并且自动安装,自动更新。作为2003年拿到JavaWorld大将的一个作品,相信,它可以带来很多IDEA的创新。它是属于商业化的工具,价格也只有499美元,而个人买也就249美元,如果你愿意牺牲某些功能,那你完全可以下载一个免费的版本。价格方面,个人觉得完全对得起这件艺术品价值。有兴趣的话可以下载一个试用版玩一下:http://www.jetbrains.com/idea ,小声地说,上一下baidu,插件一下,其实你可以找到很多注册号。

    Ant是apache的一个开源项目,可以从Ant官方网站上下载一个最新的版本:http://ant.apache.com 。虽然该项目虽然现在发展变得非常缓慢,但可以非常肯定地讲,它是一个好东西。我们可以使用ant来对我们整个工程进行编译,打包,单元测试,部署等等,基本上你想得到的东西,Ant可以帮你做得到。Maven(http://maven.apache.com )是一人比Ant还要强大的工具,现在大有Maven将会代替Ant的趋势,Maven也是项目经理要关注的一个技术点。基本上现在主流的开发工具都提供共了对Ant的支持,有些甚至是依赖,比如:NetBeans,你在NetBeans当中创建一个新的工程,那系统会自动地创建一个ant的运行脚本程序。对于你进行编译、打包、发布,那完全都是依赖于这个ant脚本。我们可以使用Ant来开发一个DailyBuild(微软叫每日产品生成,XP叫持久集成)的流程,来提高我们整个团队的软件开发质量。Ant的使用非常简单,多看手册,多花点心思,那你会做得更好。

三、开发阶段
第一、配置管理工具

代码管理工具有很多,现在公司用得比较多的代码管理工具有CVSVSSSVN
对于一个开发团队只有2-5个人,并且这两三个人是同一间办公室里,那使用VSS是一个非常不错的选择,个人觉得他小团队的管理方面非常好用。个人觉得VSS唯一的缺点就是一个文件当被一个人锁定,那其他人就没有办法进行修改了,当一个文件为多个人所共用且开发团队人数较多时,这种问题将会显示非常严重。VSS客户端跟服务器你都可以从Visio Studio里面找到。

Eclipse的VSS客户端插件:http://vssplugin.sourceforge.net/

    对于一个开发团队有超过5个人,那此如选择CVS或SVN将是一个更好的选择,并且,假如你的团队是分散的,可能不在一间办公室或者根本不在同一个城市,那使用CVS或SVN是一个非常更想的选择。CVS的服务器一般是使用CVSNT或CVSServer。

CVSServer
Linux for X86http://ftp.gnu.org/non-gnu/cvs/binary/stable/x86-linux/RPMS/i386/
Window for X86http://ftp.gnu.org/non-gnu/cvs/binary/stable/x86-woe/
CVSNThttp://www.cvsnt.org/
CVSClient
    WinCVShttp://www.wincvs.org
    TortoiseCVShttp://www.tortoisecvs.org/
    JBuilderEclipseNetBeansIDEA集成的CVS客户端

    作为版本管理工具,CVS出现至今,已经有二十个年头,可以说他已经走到了尽头,但可以肯定,它将继续存在着。SVN是作为CVS的代替产品而出现的。现在很多开源组织,都慢慢地转到SVN上,比如Apache跟SourceForge。SVN有着比CVS更强大的功能,比如,它可记录目录的更改,它的性能比CVS会快很多等等。目前SVN慢慢地被企业所接受,但个人觉得其Eclipse的客户端的稳定性还有待提高,也许这个跟Eclipse的版本兼容性有一定关系。但这些不稳定性,让我现在对这个产品的使用还继续停留在试用的阶段。

SVNServerhttp://subversion.tigris.org/
SVNClient
    TortoiseSVN http://tortoisesvn.net/
    Eclipse插件:http://subclipse.tigris.org/
目前SVN插件支持包括Eclipse、Jdeveloper、NetBeans等开发工具。

第二、知识库管理工具
团队每一个人在开发的时候都会发现一些问题,最终,有些问题可能没有办法解决,有些问题可以解决。一般情况,大部分问题经过团队成员的共同努力,都是可以解决的,那解决问题的方法,解决问题的步骤,这些都应该形成知识。作为一个团队的Leader,我们必须重视这些知识,因为,这些知识非常有用,它对于一些新手或没有遇到此类问题的同事,能够提供相应的帮助。

    Confluencehttp://www.atlassian.com/software/confluence ),跟JIRA来自同一家公司的产品,它跟JIRA可以整合得非常好。我们可以通过JIRA的ISSUE,将该ISSUE上升为一个知识。假如你是使用JIRA来进行项目管理跟缺陷管理,那使用Confluence是一个最佳选择。

    PHPBBhttp://www.phpbb.com ),论坛其实也是一个非常好的知识库管理工具,当某一个工程师遇到一些疑难杂症的时候,最终,通过自己的努力或团队其他同事的努力,终于解决问题了。那作为Leader的你,应该鼓励他们将这些知识,写一些文章,然后发布在公司自己的BBS上。供大家参考及讨论。这个是一种很好的方法。记得我以前,我在网上看到一些有用的信息,我就把它保存在我本机的PHPBB上。只可怜,后来电脑被人偷了。贼郁闷。

四、软件测试阶段
第一、缺陷管理工具
    软件你不能保证它永远不会错,只是,有些错误你暂时还没有发现而已;有些错误需要在某些特定的环境下它才会发生。就像Windows,时不时会有一些系统更新文件要求更新。可能这些更新不是错误,只是一些系统安全方面的隐患。这些都可以算是软件系统的缺陷。那这些缺陷我们应该怎么进行管理?怎么进行跟踪呢?现在缺陷管理用得比较多的有两个:第一个是开源的bugzilla,另一个是商业的JIRA。

    Bugzillahttp://www.bugzilla.org ),作为开源界缺陷管理系统的鼻祖,它发展到现在已从98年到现在经有10的时间了。它的开发语言是Perl,这使得它的安装变得很麻烦,Bugzilla可以安装在Windows、Linux、Unix等操作系统上。现在的Eclipse也提供了对它的支持,我们可以在Eclispe平台上,找到应用系统的BUG,功能做得非常强大。如果安装能更加轻松一点,或者提供一个All-In-One版本,那会更好!

    JIRA,作为商为上化的缺陷管理系统,JIRA的价格对得起它的功能。JIRA不只是一个缺陷管理系统,它更是一个集项目管理、缺陷管理、统计分析为一身的工具。这个工具我一直在使用,只是使用一些“特别”版本而已。

第二、软件性能监测工具
    Jprofilerhttp://www.ej-technologies.com )是一个非常好的性能监测工具,使用这个工具,你可以快速发现系统那些模块出现性能瓶颈或算法导致的性能问题;它还可以分析内存泄漏的问题。这个工具也提供了相应的Eclipse插件,让你开发更加快速方便。它支持主流的服务器。

    Borland Optimizeit Suitehttp://www.borland.com )也是一个非常好的性能监测工具,它跟Borland产品整合得非常好。不过,运行这个工具,你最好准备一下,最好有2G内存,否则,本来系统好好的,一运行起来,你机器反而死掉了。

第三、软件性能测试工具
    Ant+Windows计划任务创建公司的DailyBuild自动化测试流程,这个是以前做的一个测试流程。使用这种测试流程,无非一个目的,就是提高公司的软件质量。

    Jmeterhttp://jakarta.apache.org/jmeter ),这个工具是apache出品的,作为apache忠实的Fans,我对Jmeter也是很喜欢,使用Jmeter,你可以摸似多用户环境,对应用系统进行测试,测试整个应用系统能够承受的最大并发量。

    LoadRunnerhttp://www.hp.com ),假如你不知道这个软件,那你肯定做不了测试工程师,这个是最专业的一个软件性能测试工具,它可以模似上千万个用户量来进行压力测试,检测系统能够承受的最大并发量。这个软件我只用过几次,编写脚本,进行测试,使用来讲其实算是比较简单。

五、软件发布
    软件的发布我们会怎么去做呢?我们一般做法就是,将数据库脚本化,包括建表语句、初始化数据等,还有制作WAR文件或EAR文件。然后到客户那边,我们需要将数据库表及数据进行初始化,接着,将WAR或EAR文件发布到应用服务器上。这个也许是我们到客户现在发布经常在做的一件事情。那能不能做得更加简单呢?做法一般有两个,第一个就是使用Ant,编写一个初始化数据库跟发布应用程序模块的Ant脚本,然后到生产机上直接运行该脚本即可;第二个就是制作安装文件,一般用来制作安装文件的有IzPack,这个是用得最多的一个免费工具,你可以使用这个免费工具来制作安装程序。也许客户都习惯了安装程序的安装方式了,制作一个可执的安装程序,有助于提高软件产品化的档次。

六、软件维护阶段
第一、客户CASE跟踪管理工具
    客户CASE跟踪系统相信很多做CISCO公司金牌代理的人都会用过。我们必须在公司内部建立相应的CASE跟踪制度。当用户使用系统的时候,发现一些问题,那我们需要对这些问题进行录入并进行跟踪。像客户呼叫服务系统等等一些商业化的软件外面还是很多的,这些系统其实公司自己开发一个也是很快的。但必须要有。这个也是提高整个公司整体服务形象的一种态度。

暂时先写这些,以后再慢慢修改补充!
版权所有,欢迎转载,转载请标明转自http://www.suneca.com

如果大象能够跳舞,那么蚂蚁就必须离开舞台

           2005年5月1日,中国电脑大腕联想集团正式对外宣布完成收购IBM全球PC业务。这是皆大欢喜的一幕:新联想一跃成为全球第三大PC制造商,而IBM终于在他们的前任董事长郭士纳指引的IT服务转型的道路上义无反顾地轻装前进。
  
   提到IBM,让人想到著名的thinkpad,深蓝的气质,四海一家的解决之道的广告等等….
  
   IBM是美国的骄傲,或国家的象征。
  
   20世纪20年代初,IBM的创始人老沃森,先是收购了几家小公司,把新公司命名为:国际商务机器公司,简称IBM。IBM的早期业务是由广泛而大多不相关的业务构成,从刻度尺、奶酪切片机、到钟表和打字机。但是重要的是,IBM还是表现出了自己的远见:它是当时最早涉及到计算行业的少数公司。在30年代,美国政府委托IBM作为其“社会安全体系”计划的规划和实施者,这一切都代表着IBM巨大的成功。
  
   IBM真正成为IT业的全球大腕,要归功于小沃森把IBM带入了电脑时代。IBM主机系统的成功研制,奠定了IBM的至高地位。IBM 的s/360是电脑历史上的里程碑。
  
   当然,成也萧何,败也萧何。IBM围绕自己的主机系统,建立了庞大的软件开发、咨询、销售、服务体系。s/360的实施也远非规划那么容易达到。在著名的《人月神话》中,参与s/360开发的作者暗示,s/360的开发就像落在史前焦油坑里的怪物,硕大无比而无法收场。
  
   正当IBM还沉溺于自己的大型主机的帝国梦时,时间已经推进到20世纪90年代。在名正言顺的IT时代,在短短的几年时间里,不可思议的发生了两次大事件。这两件大事件的到来,不仅改变了IBM,也改变了整个IT行业,更改变了世界。
  
   第一个大事件个人电脑时代的兴起。第二个大事件是互联网时代的到来。
  
   IBM推出了世界上第一台IBM PC。然而,IBM却让巨大的历史机遇从手上溜走:他们采用了微软公司的ms-dos操作系统,把一个软件帝国的王者,送上了成功之路。
  
   在20世纪90年代早期,IBM面临的就是这样的困境:大型主机的市场,被用来玩玩得unix低价侵蚀;而个人电脑的标准化,开放性市场的竞争对手的崛起,如compaq等的强大压力。内忧外患,IBM再也不能保有自己崇高的地位:优越的垄断,丰厚的利润,夸张地成长…
  
   所有的迹象表明,当时的IBM正在滑向深渊。媒体和咨询专家都在给IBM出谋划策:似乎为了生存下去,IBM撤分成更小的单位,更适合生存和成长。
  
   正是在这样的背景下,郭士纳临危受命,成为IBM的船长。
  
   郭士纳,哈佛商学院毕业,曾就职于麦肯锡咨询,美国运通公司。在外人看来,郭没有技术背景,但他在美国运通的业务经历,使之对信息技术拥有一种独特的战略眼光。
  
   在郭士纳接手IBM后,他给IBM开出了三剂良药。从后来历史的数据显示,94年开始后,IBM不但结束了自己的亏损噩梦,而且开始了持续10年之久的高速增长。IBM终于起死回生,震惊世界。
  
   郭士纳给IBM开出的苦口良药是:
  
  [止血但保留IBM完整性]
   郭士纳充分意识到在过去的经营中,IBM的品牌是IBM最大的隐形资产。他没有简单的拆分公司,这为公司的战略转型留好了伏笔。
  
   从公司内部为向导,转变为以市场为向导。简化商业的执行策略,坚持按市场竞争机制定价和销售。对非核心资产和不盈利单位,坚决实施“关停并转”
  
   推进新型有效的绩效考核机制,简化组织结构,听取客户或市场建议
  
  [转型为IT服务]
  
   过去封闭的IBM主机体系结构,代表着恶性的产业链结构。这种产业结构,必然树立起众多的强敌。
  
   化敌为友,化竞争关系为合作关系,建立良好的生态环境,发挥自己独特的资产优势,IBM必须退出应用软件开发的领域,专注于特长更多、优势更大、利润最丰厚的IT服务市场。
  
   定位于软件服务,热烈拥抱互联网时代的到来。互联网的大众化的市场细分趋势,使得技术价值向服务价值转移,使得IBM的软件服务资产优势更为明显
  
  [转变IBM文化]
  
   从技术导向,到顾客导向的转变
  
   这意味着,IT服务不是传统意义上的,只是服务于自己的产品体系,而是更多的关注顾客的流程和业务整合。
  
  
   郭士纳这样说IBM:
  
   大,很重要,因为规模就是杠杆。深度和广度可以容纳更大的投资、更大的风险以及更长久的对未来的投入。
  
   这不是大象是否能够战胜蚂蚁的问题,这是一只大象是否能跳舞的问题。如果大象能够跳舞,那么蚂蚁就必须离开舞台。
  
  
   《谁说大象不能跳舞》是郭士纳本人亲笔写就的IBM管理传奇,书中翔实的记录了他从加盟IBM,到引领IBM凤凰涅磐的全部过程。书中展现了一位管理大师的境界、眼光和博大胸怀。
  
   众所周知,现在的IBM已经成功转型为世界上最大的IT服务公司。郭士纳具有的信息技术的战略眼光,对公司治理之道,值得学习和借鉴。

绩效管理

对于绩效管理,我们需要从新开始思考这个事情怎么做,因为好多公司的绩效管理在执行过一段时间之后都被证明是失败的,因为根本没有调动大部分人的积极性,甚至打击了不少人的积极性。

 1. 首先考虑清楚,绩效管理的目的是什么?是推动整个团队的进步,而不是成为部分领导打击报复个人的工具。当然,对于团队的定义,一定要明细,团队拥有各种类型的人,包括新员工,老员工,一定要考虑对于不同的人都要有不同的推动效果。

2. 绩效管理同时需要考虑公司的年度目标,部门的目标,项目的目标,个人的目标。并把公司的目标分解到部门,部门的目标分解到项目,项目的目标分解到个人。注意,一定要让每个人有表达自己意愿的机会,让他们把自己的个人职业目标提出来,然后在项目实施过程中贯彻进去。

 3. 对于这个目标管理,一定要对每个人都指定一个,需要遵守SMART准则。并且这个目标一定要和个人达成认可,否则,目标无效,要让个人感觉到有这个挑战动力。

4. 项目开始之后,正是贯彻目标之时,每隔2个星期左右,或者1个月左右(取决于项目大小),开始对项目中的各方面,个人的各个目标进行进度跟踪,确保每个人都在正确的轨道上,如果有问题,或者发现有问题的风险,一定要即使提出来,如果必要需要修改目标,保证目标对个人的挑战。

 5. 持续重复第四步,直到项目结束

用JIRA、CVS、XPlanner、WIKI来进行项目管理

从版本管理的角度来考虑,最理想的发布方法就是把CVS中的代码拿下来, 打上一个tag, 编译并且测试一直到发布。这样的管理方式的确是很简单的,但事实上用户可不买帐的。这里讲的Issue就是前面JIRA系统中的一个issue。

JIRA

  一个非常出色的Issue跟踪系统,这里的Issue不单单是指BUG, 很多时候也可以是TASK, IMPROVEMENT, NEW FEATURE, 甚至是一个QUESTION。

  在多年前, 我曾经尝试使用过那个经典的的Bugzilla,但是一个项目作下来,大家都反映那个东西的界面实在是太粗糙,简直无法忍受而且报表功能也是在太弱。最后大家就讨论自己作一个BUG的跟踪系统,就在大家已经完成了设计文档准备编码的时候, 我们发现JIRA原来就是我们要找的东西,而且比我们要的更多。它内置一个可以配置的工作流引擎(osworkflow),一个快捷的全文检索功能(基予Apache Lucene).和一个可以配置的Dashboard(portlet),以及一个和CVS连接的引擎,通过这个连接,在一个Issue中直接可以看到修改的文件名称,如果配置了viewcvs的话,还直接直接定位到行,根据一个问题可以跟踪到代码的行,这正式我们梦寐一求的功能。 也正是这种特性,才使我们能够把一个个Issue当作发布和版本管理的一个单元。

CVS

  这个应该大家都知道。在系统开发过程中,一切的源代码和设计文档都应该进入版本管理系统来进行管理, 有的时候可能资源库可能会膨胀的很大, 但这个代价是值得的。

XPlanner

  在整个管理体系中,进度管理一直是一个?比较薄弱的环节,我也曾试过dotproject这样的管理软件,但由于dotproject管理的太过详细,填报起来太复杂,大家渐渐都失去了填报的热情。这个 XPlanner软件可就简单多了。指定了迭代,story,然后就可以填写进度了。由于这个软件也是OpenSource的,所以如果觉得不满意,修改起来也很方便,现在老林就对这个系统作了些改进,可以直接和JIRA系统连接起来,JIRA中建立issue后,可以在XPlaner中反映出来,连填写 story的时间都省去了, 然后在下班之前可以生成一个详细的报告,列出每个人在这一天内在自己负责的Issue在上的处理时间和进度。

WIKI

  在项目管理中,我们一直把它当作文档管理和Portlet系统来使用,它现在已经变成我们的小组的工作台,在WIKI中我们制定了包括系统开发设计规范在内的一切设计文档,以及数十个经常的HOWTO项目,例如如何配额一个标准的开发环境,如何使用CVS客户端,如何使用JIRA,以及自己的 JavaDoc, JSDoc等。 我们也可以通过Wiki来简单的整合系统,在Wiki中我们列出了所有开发环境和开发工具的入口,例如上面就放了进入JIRA,XPlanner以及我们各个Project的连接,甚至到 Apache中常用的Project的JavaDoc的连接,现在再也没有人去记录这些URL了,只要打开Wiki所有的资源都在面前了,并且由于wiki本身的开放性,所以每个团队的成员都是一个维护者,同时也是这个系统的受益者。在很多的团队中经常出现的情况是一个小子对某个技术特别在行,大家遇到这方面的问题都问他,在小的团队中, 面对面的交流通常是最快的交流方式,但是放到大的团队中,这个就不大可行了,那个小子迟早有一天会被问的烦到吐血为至,特别是他自己的工作也无法按时完工的时候。还是抽一个小时写出来,放到 wiki里面吧, 别问我, 自己去查Wiki。

基于ISSUE的发布管理

  从版本管理的角度来考虑,最理想的发布方法就是把CVS中的代码拿下来, 打上一个tag, 编译并且测试一直到发布。 这样的管理方式的确是很简单的,但事实上用户可不买帐的, 用户觉得在新的版本中某个新的功能他还不想要,这可能是他还没有整理好业务初始数据或者在实际的业务流程上或人员上没有做好准备, 上帝说了不要咱就不能把这个新功能发布。在这个情况下,基于Issue的发布管理是一个好的方案。

  这里讲的Issue就是前面JIRA系统中的一个issue。 通常每个Issue的完成都会伴随这一些代码的修改。 基于Issue的发布简单的来说就是把一组Issue变更的文件用patch的形式发布到正式的系统中。

  基于Issue发布的前提就是要在Issue和Source之间建立连接, 使发布人员清楚的知道每个Issue修改的源代码是什么。我们实践下来最简单的办法就是在提交source的时候必须加上JIRA编号, 没有JIRA编号代码是不能提交的。 这样有以下好处:

1)防止一些没有经验的程序员无意义的提交, 比如一个小子今天提交了一个java文件,明天发现这个变量命名有点不爽, 修改后就要提交,在这种情况下, 这个提交是没有意义的,如果测试组已经测试这个Issue, 是否测试组要重新测试? 为一个变量名称化这样的时间和冒险是可嫩的。小伙子还是在第一次提交的时候就把变量名想好了再提交。

2)程序员偷偷的修改代码,一个小伙子发现自己的已经Closed的Issue中有一个Bug, 便偷偷的修改代码。 这个当然也是不可能的,凡是提交到CVS中的代码就不是自己的了,那是大家的, 没有足够的理由想改当然没有那么容易。 先自己建立建立个Issue, 向Team leader报告, 然后再去修改代码.。

谁说大象不会跳舞–IBM董事长郭士纳

“如果有必要,我会从外部引进人才。但是,你们中的每一个人都最先有机会展现你们自己的才能,而且,我也希望你们能给我一些时间来证明我自己的能力。每个人都是站在新的起跑线上,你们过去所取得的成就或遭受的失败都与我无关。”
  我继续概括性地介绍了我的管理哲学和管理实践:
  我按照原则而不是程序实施管理。
  市场决定我们的一切行为。
  我是一个深深地相信质量、强有力的竞争战略与规划、团队合作、绩效工资制和商业道德责任的人。
  我渴求那些能够解决问题和帮助同事解决问题的人;我会开除那些政客式的人。
  我将致力于战略的制定,剩下的执行战略的任务就是你们的事了。只需以非正规的方式让我知道相关的信息。不要隐瞒坏消息—我痛恨意外之事;不要试图在我面前说谎;要从在生产线以外解决问题,不要把问题带到生产线上。
  动作要快。不要怕犯错误,因为即便是犯错误也要由于我们动作太快而不是太慢。
  我很少有等级制度的观念。无论是谁,也无论其职务高低,只要有助于解决问题,大家就要在一起商量解决。要将委员会会议和各种会议减少到最低限度。取消委员会决策制度。让我们更多一些坦率和直截了当的交流。
  我对技术并不精通,我需要学习,但是不要指望我能够成为一名技术专家。分公司的负责人必须能够为我解释各种商业用语。
  然后,我在自己的认识水平的基础上,向他们提出了一些建议。我们一共有5个刚上任90天中的优先性任务,它们分别是:
  暂时冻结流动资金。我们就要面临着流动资金短缺的危险。
  确保我们将在1994年实现赢利,并向全世界—以及IBM各分公司传个口信:公司的经营业已稳定。
  开发和实施1993年-1994年的关键客户战略,这将会使客户相信,我们又回来为他们的利益提供服务了,而不是强迫他们接受我们的“固定产品”(电脑主机)以便减缓我们自己短期的财政压力。
  在第三季度开始的时候要完成精简裁员任务。
  开发一个中期的商业战略。

jira实现创建问题的时候将问题自动分配给模块负责人component lead

我以JIRA 3.12.1来说
1.首先在Project的管理界面,Add相应的Components,添加Components时指定其Component Lead为相应的开发组负责人。
2.添加了Components后,单击Components下方的Select,将Default Assignee指定为Component Lead。
3.在Field Configuration里,显示“模块”/“Components”这个字段,并定义为“必填”/“Required”
4.在该项目创建问题所使用的Screen里(通常是在Screen Scheme里),显示“模块”/“Components”,并告知创建者在创建时要单选,不要多选。因为选择多个模块时,可能会有多个负责人,但一个问题只能被分配给一个人。
5.在该项目创建问题所使用的Screen里(通常是在Screen Scheme里),若显示“开发者”/“Assignee”这个字段,则通知创建者在创建时不用选择开发者,默认为“自动”即可。若隐藏“开发者”这个字段,则系统就会把新创建的问题自动分配给相应的Component Lead.

转载请注明源自www.SCMLife.com,请保留版权. 本贴地址:http://bbs.scmlife.com/viewthread.php?tid=17636

jira 试用license授权码

JIRA 3.*

mNmmqDVQBQhkfqNncKTPLJBnpQRcUDRtwwbxTfdpXcLIcnA
mj2Kc8Zd4E2ELX32<8VdKDWX2L0GZETIelTbYbnsu5uM8G0
ooOtWOnpoPnpRmqRpNXVqmomOopqmpRnrwtuWusTTrTTxSu
tTUSxxTNWWqQNWUsmopvUUnorooqrsmmmmmUUnorooqrsmm
mmmUU8rXtbfWKbZeklildfbpW3lkiWCqak

JIRA 4.0

AAABKg0ODAoPeNptkFFrgzAUhd/zKwJ7naJCS1sIdGhgDmeLtd3LXrL0tmaLiSTRrf9+ViuUscdwc
853znl4gyPOdYejGY7C1Wy+igIc70ocBcESJWC5EY0TWpGXtHjCeyVFLVyv2Vsw9n2FE+hA6gYMz
gQHZQHFBthVkTAH5GrjhaEXzVGslWPc5awGcvpiarlYVy37BuFzXaNPYZh/s6BHMSBpXtJiW6Q7O
onpKxPyHzXtmGwHKjkx2Ye4tysvDQzUhB5ottnSYjz3fqID4kwLSI5fD32pq0mEepByoJjiQH8aY
S63OmHg9Y2CBdqYM1PCjtDnIQougVdKS30WYHGs/UecuaM/0vK2/gCzOQ3DES9Et3RpQrI0mV53r
HbaGm1bwytm4e+iv+MEluowLAIUbzOeTFmaflIz8gM7mOA1Zpw3gRUCFBGxxZcn1PX4xvSirQH5a
G14C7pEX02eu

JIRA 注册码程序

这个程序算出来的license在JIRA 3.13.5版本中是有效的,这个版本是目前最新的release版本,没有在4.0beta中试过。

Java代码 复制代码
  • package com.justin.workaround;   
  •   
  • import java.io.IOException;   
  • import java.security.KeyFactory;   
  • import java.security.Signature;   
  • import java.security.spec.PKCS8EncodedKeySpec;   
  •   
  • import com.atlassian.license.LicensePair;   
  •   
  • public class JiraLicenseGenerator   
  • {   
  •     static byte EncodedPrvKey[] = { 48, -126, 1, 75, 2, 1, 0, 48, -126, 1, 44, 6, 7, 42, -122, 72, -50, 56, 4, 1, 48,   
  •                     -126, 1, 31, 2, -127, -127, 0, -3, 127, 83, -127, 29, 117, 18, 41, 82, -33, 74, -100, 46, -20, -28,   
  •                     -25, -10, 17, -73, 82, 60, -17, 68, 0, -61, 30, 63, -128, -74, 81, 38, 105, 69, 93, 64, 34, 81, -5,   
  •                     89, 61, -115, 88, -6, -65, -59, -11, -70, 48, -10, -53, -101, 85, 108, -41, -127, 59, -128, 29, 52,   
  •                     111, -14, 102, 96, -73, 107, -103, 80, -91, -92, -97, -97, -24, 4, 123, 16, 34, -62, 79, -69, -87,   
  •                     -41, -2, -73, -58, 27, -8, 59, 87, -25, -58, -88, -90, 21, 15, 4, -5, -125, -10, -45, -59, 30, -61,   
  •                     2, 53, 84, 19, 90, 22, -111, 50, -10, 117, -13, -82, 43, 97, -41, 42, -17, -14, 34, 3, 25, -99,   
  •                     -47, 72, 1, -57, 2, 21, 0, -105, 96, 80, -113, 21, 35, 11, -52, -78, -110, -71, -126, -94, -21,   
  •                     -124, 11, -16, 88, 28, -11, 2, -127, -127, 0, -9, -31, -96, -123, -42, -101, 61, -34, -53, -68,   
  •                     -85, 92, 54, -72, 87, -71, 121, -108, -81, -69, -6, 58, -22, -126, -7, 87, 76, 11, 61, 7, -126,   
  •                     103, 81, 89, 87, -114, -70, -44, 89, 79, -26, 113, 7, 16, -127, -128, -76, 73, 22, 113, 35, -24,   
  •                     76, 40, 22, 19, -73, -49, 9, 50, -116, -56, -90, -31, 60, 22, 122, -117, 84, 124, -115, 40, -32,   
  •                     -93, -82, 30, 43, -77, -90, 117, -111, 110, -93, 127, 11, -6, 33, 53, 98, -15, -5, 98, 122, 1, 36,   
  •                     59, -52, -92, -15, -66, -88, 81, -112, -119, -88, -125, -33, -31, 90, -27, -97, 6, -110, -117, 102,   
  •                     94, -128, 123, 85, 37, 100, 1, 76, 59, -2, -49, 73, 42, 4, 22, 2, 20, 42, 50, -88, 30, 125, -37,   
  •                     118, -50, 20, -82, -63, 0, 8, -36, 106, -9, -110, 124, 107, 68 };   
  •   
  •     public static void main(String args[]) throws IOException   
  •     {   
  •         try  
  •         {   
  •             long l = 267L;   
  •             long l1 = System.currentTimeMillis();   
  •             long l2 = System.currentTimeMillis();   
  •             String s = ”";   
  •             System.out.println(“Keygen for JIRA Enterprise Edition.”);   
  •             System.out.print(“created by mydaj[ROR].”);   
  •             do  
  •             {   
  •                 System.out.print(“\nEnter your organization name: ”);   
  •                 for (int i = System.in.read(); i != 10 && i != 13; i = System.in.read())   
  •                     s = s + (char) i;   
  •   
  •             }   
  •             while (s == ”");   
  •             try  
  •             {   
  •                 PKCS8EncodedKeySpec pkcs8encodedkeyspec = new PKCS8EncodedKeySpec(EncodedPrvKey);   
  •                 KeyFactory keyfactory = KeyFactory.getInstance(“DSA”, ”SUN”);   
  •                 java.security.PrivateKey privatekey = keyfactory.generatePrivate(pkcs8encodedkeyspec);   
  •                 String s1 = Long.toString(l, 10);   
  •                 s1 = s1 + ”^^”;   
  •                 s1 = s1 + Long.toString(l1, 10);   
  •                 s1 = s1 + ”^^”;   
  •                 s1 = s1 + Long.toString(l2, 10);   
  •                 s1 = s1 + ”^^”;   
  •                 s1 = s1 + s;   
  •                 byte abyte0[] = s1.getBytes();   
  •                 Signature signature = Signature.getInstance(“SHA1withDSA”);   
  •                 signature.initSign(privatekey);   
  •                 signature.update(abyte0);   
  •                 byte abyte1[] = signature.sign();   
  •                 LicensePair licensepair = null;   
  •                 try  
  •                 {   
  •                     licensepair = new LicensePair(abyte0, abyte1);   
  •                 }   
  •                 catch (Exception exception1)   
  •                 {   
  •                     exception1.printStackTrace();   
  •                 }   
  •                 System.out.println(s1);   
  •                 System.out.println(“Your license key is: ”);   
  •                 System.out.println(licensepair.toString());   
  •             }   
  •             catch (Exception exception)   
  •             {   
  •                 exception.printStackTrace();   
  •             }   
  •         }   
  •         catch (IOException ioexception)   
  •         {   
  •         }   
  •     }   
  • }  
  • package com.justin.workaround;
    
    import java.io.IOException;
    import java.security.KeyFactory;
    import java.security.Signature;
    import java.security.spec.PKCS8EncodedKeySpec;
    
    import com.atlassian.license.LicensePair;
    
    public class JiraLicenseGenerator
    {
    	static byte EncodedPrvKey[] = { 48, -126, 1, 75, 2, 1, 0, 48, -126, 1, 44, 6, 7, 42, -122, 72, -50, 56, 4, 1, 48,
    					-126, 1, 31, 2, -127, -127, 0, -3, 127, 83, -127, 29, 117, 18, 41, 82, -33, 74, -100, 46, -20, -28,
    					-25, -10, 17, -73, 82, 60, -17, 68, 0, -61, 30, 63, -128, -74, 81, 38, 105, 69, 93, 64, 34, 81, -5,
    					89, 61, -115, 88, -6, -65, -59, -11, -70, 48, -10, -53, -101, 85, 108, -41, -127, 59, -128, 29, 52,
    					111, -14, 102, 96, -73, 107, -103, 80, -91, -92, -97, -97, -24, 4, 123, 16, 34, -62, 79, -69, -87,
    					-41, -2, -73, -58, 27, -8, 59, 87, -25, -58, -88, -90, 21, 15, 4, -5, -125, -10, -45, -59, 30, -61,
    					2, 53, 84, 19, 90, 22, -111, 50, -10, 117, -13, -82, 43, 97, -41, 42, -17, -14, 34, 3, 25, -99,
    					-47, 72, 1, -57, 2, 21, 0, -105, 96, 80, -113, 21, 35, 11, -52, -78, -110, -71, -126, -94, -21,
    					-124, 11, -16, 88, 28, -11, 2, -127, -127, 0, -9, -31, -96, -123, -42, -101, 61, -34, -53, -68,
    					-85, 92, 54, -72, 87, -71, 121, -108, -81, -69, -6, 58, -22, -126, -7, 87, 76, 11, 61, 7, -126,
    					103, 81, 89, 87, -114, -70, -44, 89, 79, -26, 113, 7, 16, -127, -128, -76, 73, 22, 113, 35, -24,
    					76, 40, 22, 19, -73, -49, 9, 50, -116, -56, -90, -31, 60, 22, 122, -117, 84, 124, -115, 40, -32,
    					-93, -82, 30, 43, -77, -90, 117, -111, 110, -93, 127, 11, -6, 33, 53, 98, -15, -5, 98, 122, 1, 36,
    					59, -52, -92, -15, -66, -88, 81, -112, -119, -88, -125, -33, -31, 90, -27, -97, 6, -110, -117, 102,
    					94, -128, 123, 85, 37, 100, 1, 76, 59, -2, -49, 73, 42, 4, 22, 2, 20, 42, 50, -88, 30, 125, -37,
    					118, -50, 20, -82, -63, 0, 8, -36, 106, -9, -110, 124, 107, 68 };
    
    	public static void main(String args[]) throws IOException
    	{
    		try
    		{
    			long l = 267L;
    			long l1 = System.currentTimeMillis();
    			long l2 = System.currentTimeMillis();
    			String s = "";
    			System.out.println("Keygen for JIRA Enterprise Edition.");
    			System.out.print("created by mydaj[ROR].");
    			do
    			{
    				System.out.print("\nEnter your organization name: ");
    				for (int i = System.in.read(); i != 10 && i != 13; i = System.in.read())
    					s = s + (char) i;
    
    			}
    			while (s == "");
    			try
    			{
    				PKCS8EncodedKeySpec pkcs8encodedkeyspec = new PKCS8EncodedKeySpec(EncodedPrvKey);
    				KeyFactory keyfactory = KeyFactory.getInstance("DSA", "SUN");
    				java.security.PrivateKey privatekey = keyfactory.generatePrivate(pkcs8encodedkeyspec);
    				String s1 = Long.toString(l, 10);
    				s1 = s1 + "^^";
    				s1 = s1 + Long.toString(l1, 10);
    				s1 = s1 + "^^";
    				s1 = s1 + Long.toString(l2, 10);
    				s1 = s1 + "^^";
    				s1 = s1 + s;
    				byte abyte0[] = s1.getBytes();
    				Signature signature = Signature.getInstance("SHA1withDSA");
    				signature.initSign(privatekey);
    				signature.update(abyte0);
    				byte abyte1[] = signature.sign();
    				LicensePair licensepair = null;
    				try
    				{
    					licensepair = new LicensePair(abyte0, abyte1);
    				}
    				catch (Exception exception1)
    				{
    					exception1.printStackTrace();
    				}
    				System.out.println(s1);
    				System.out.println("Your license key is: ");
    				System.out.println(licensepair.toString());
    			}
    			catch (Exception exception)
    			{
    				exception.printStackTrace();
    			}
    		}
    		catch (IOException ioexception)
    		{
    		}
    	}
    }

    运行后需要你填写你在安装JIRA过程中填写的公司的名字,如下:

    Enter your organization name:

    填写后回车即可生成license,然后再用管理员登录JIRA,更新license即可。

    jira创建新项目 User not Assignable

    jira创建新项目的时候,提示 Default Assignee: Project Lead (WARNING: User not Assignable.)

    将项目负责人 Project Lead 加入到GROUP  jira-developers组即可

    或直接设置权限方案permission scheme ,将Project Lead加入 Assignable User

    《像唐骏那样》第二大因素之7. 以创业者的心态来工作

    无论从工作的方式、性质,还是直接的利益角度来说,我都是以创业者的心态来工作的。

    —— 唐骏

    工作首先是一种态度,态度背后才是能力的大小。一个人成功与否并不重要,重要的是追求成功的态度。一个员工的精彩人生,是靠出色的工作来铸就的。

    人生的道路上,有的人选择了走马观花,满腹牢骚,得过且过;有的人却选择了积极向上,一丝不苟,活好精彩人生的每一天。事实上,每个人都是无可替代的,独一无二的。离开了谁地球都将继续转,太阳每天还会照常升起,花儿也依然会灿烂地开放,溪水照样流动。

    我们活在这个世界上,渴望精彩的人生,渴望留下生命中最辉煌的时刻,渴望证明自己绚烂的存在。那么,你就要在工作中奉献自己所有的力量,负起所应负起的责任。工作就是衡量一个员工的未来能否灿烂的砝码,对工作的态度就是生命存在的意义所在。

    唐骏说:
    |www.globrand.com|6
    我是一个职业经理人,我很清楚自己的职责。从加入盛大的那天起,我就十分明确,这个公司是陈天桥的,我所要做的是对他的辅佐和执行。

    很多员工总是抱怨这个不好,那个不好,总会有很多的理由。在这里要告诉大家的是,作为一名员工,你对于企业发展过程中遇到的任何问题、苦难和挫折,都没有抱怨的权利,你只有去改善这一切的责任—— 改善所有对于企业发展不利的条件,改善所有对于企业发展过程中的障碍。

    在盛大,陈天桥对所有盛大高管均直呼其名,唯有对唐骏始终以“唐总”称呼。为什么?这不是因为唐骏有着“微软(中国)终身荣誉总裁”的称号,也不是因为唐骏有着“中国第一打工皇帝”的光环,而是因为他在工作上总能保持着一颗创业者的心态,急企业所急,想老板所想。

    4年时间里,除了带领盛大上市,唐骏还与陈天桥共度了2005年盛大的转型危机。唐骏曾坦言地说:“我在盛大4年取得了两大收获,一是经历了带领盛大上市的过程,取得与华尔街接触的经验;二是付出也得到了丰厚的期权回报。”说这些话,并不是唐骏要表明自己有多少钱,而是要告诉大家没有付出你就不可能得到丰厚的回报。

    无论在微软还是在盛大,唐骏总是以一种创业者的心态要求自己。

    唐骏说:

    在我看来,对于任何一个外人空降到一家公司,都需要一种态度,看你以什么样的心态、什么样的态度接受这家公司、融入这家公司、热爱这家公司。我相信这家公司是我喜欢的公司,也是我非常喜欢的产业。在我和盛大总裁的交流过程也感受到了我们的共同点,包括在我们的价值观、处世哲学上都产生了共鸣,我相信我能够比较快地融入盛大的文化,我相信能够为这个企业增加一份新鲜的血液。

    唐骏热爱盛大,他的目标也是发展盛大,把盛大推向国际市场。然而,唐骏在这其中也有一些让他感到遗憾的地方。其中的一个缺憾就是,盛大对新浪的收购案最后没有达到当初的目标。

    2005年2月19日,盛大公司宣布,截至2005年2月10日,盛大及其控股的地平线媒体有限公司,斥资2.3亿美元,通过公开股票市场交易收购了新浪网公司(Nasdaq:SINA)大约19.5%的已发行普通股。这意味着盛大已经成为新浪的第一大股东

    然而,从一开始,盛大入股新浪的事件就具有了太多的传奇色彩,也充满了太多的变数和争议。就在十几个小时后,新浪在当晚21点左右就发表了声明:“此次盛大公司备案中所披露的唯一行为是股票购买,对新浪公司本身的业务及运营均无任何直接影响,新浪公司股东也无须对此采取任何行动。”

    几乎在同一时间,新浪网CEO汪延给员工的一封信也流传开来:“虽然盛大已经成为新浪目前的第一大股东,但它并没有任何法律或实际意义上的控股权或控制权。盛大没有控制我们的董事会管理层,我们的高层管理人员,也从未在盛大购买我们的股票前夕抛售过股票或期权……我们每一个员工都应该只有一个信息要传递:新浪没有变。”

    盛大入股新浪,就这样被放在了全球聚光灯下。

    对于中国互联网来说,这是一件好事。因为相较于雅虎等互联网巨头,中国互联网公司还都太小。而如果能在国内通过兼并、合作的方式先做大,然后再和国际巨头们抗衡,其竞争力必然会大大增强。而且,盛大和新浪合并从整体来说是互补的,并不会出现兼并之后的业务重合现象。

    但让人遗憾的是,盛大最终还是失去了一个改写中国互联网格局的机会。因此,这也成了唐骏在盛大4年来的最大遗憾,并把这件事称为自己职业生涯中的“缺憾美”。唐骏说:“从整体看,我觉得过去在盛大的4年中,每一件事情都做得很完美,如果挑出几件缺憾,这次收购算是一点缺憾了。”

    此外,另一个让唐骏感到遗憾的就是,对于盛大“家庭娱乐战略”的失控,当时虽然在战略上是正确的,但在操作层面上最终还是没能实现最初的构想。因为盛大的战略平台已经在内容、服务和解决方案上做得很好了,然而硬件技术层面一直没有跟上来,所以“家庭娱乐战略”计划最终不得不被搁置下来,也最终成为唐骏在盛大4年中的又一个没有完成的缺憾。

    “以创业者的心态来工作”的思想,就是在这种观念下孕育而来的。作为受薪的工作者,就应该把公司当作自己没出资本的事业,以合伙创业的心态,关心老板和企业的成长,协助老板经营好事业,保证企业能够获利,同时也让自己得到该有的薪金和福利。碍于每天工作8小时的规定,一些人工作总是以上班时间作为基准,总抱着“上班”或“打工”的心态,只追求雇主给付的薪水,不思自我应尽的义务和贡献,忘了自我的能力和价值,而最终忽略了工作的真正内涵。

    我们不妨扪心自问,有谁愿意拿出自有的资金去创业,再去供养一群无论盈亏都得给付薪水的员工?答案显然是没有。

    因此,如果你能反过来想一想,为什么你总是要找工作,总是会被雇主辞掉,其实这就是最明显、最直接的答案—— 你没把工作当成自己的职责,你没有把公司的事当作自己的事,你更没有用一种创业者的心态来工作。

    一个收入很高、职位很高的人肯定是具备创业者精神的人,反过来,一个不具备创业者心态的人也肯定不能得到老板的赏识,他们除了暗地里拿回扣之外,是不可能获得高收入的。

    工作是我们展示自己的大舞台,人的能力受到先天条件的制约,所以也会有大有小,但是对工作的态度却是可以改变的。无论做什么事情,只要你总以一种创业者的心态去做,踏踏实实,一步一个脚印,到头来都会有所收获。

    人生就是一个积累和充实的过程,当我们羡慕唐骏功成名就的时候,我们也应该看看唐骏成功背后的辛勤付出。

    web service 超级简单例子

    首先大家要简单了解了何谓webservice,接下来就做两个非常简单的例子,webservice还是逃不开server端与client端。

    我测试的环境为:apache2.2.11 php5.2.10

    做这个测试之前,要确认你的php配置文件中已经将soap扩展打开,即extension=php_soap.dll;
    OK 现在我们来体验webservice

    //server端 serverSoap.php

    $soap = new SoapServer(null,array(‘uri’=>”http://192.168.1.179/”));//This uri is your SERVER ip.
    $soap->addFunction(‘minus_func’);                                                 //Register the function
    $soap->addFunction(SOAP_FUNCTIONS_ALL);
    $soap->handle();

    function minus_func($i, $j){
        $res = $i – $j;
        return $res;
    }

    //client端 clientSoap.php
    try {
        $client = new SoapClient(null,
            array(‘location’ =>”http://192.168.1.179/test/serverSoap.php”,’uri’ => “http://127.0.0.1/”)
        );
        echo $client->minus_func(100,99);

    } catch (SoapFault $fault){
        echo “Error: “,$fault->faultcode,”, string: “,$fault->faultstring;
    }

    这是客户端调用服务器端函数的例子,我们再搞个class的。

    //server端 serverSoap.php
    $classExample = array();

    $soap = new SoapServer(null,array(‘uri’=>”http://192.168.1.179/”,’classExample’=>$classExample));
    $soap->setClass(‘chesterClass’);
    $soap->handle();

    class chesterClass {
        public $name = ‘Chester’;

        function getName() {
            return $this->name;
        }
    }

    //client端 clientSoap.php

    try {
        $client = new SoapClient(null,
            array(‘location’ =>”http://192.168.1.179/test/serverSoap.php”,’uri’ => “http://127.0.0.1/”)
        );
        echo $client->getName();

    } catch (SoapFault $fault){
        echo “Error: “,$fault->faultcode,”, string: “,$fault->faultstring;
    }

    以上代码我已经测试通过。

    转账来源 http://hi.baidu.com/chesterphp/blog/item/d8ebaefbb0942417a9d3116c.html