灯火阑珊

纷扰城市中,似乎遗忘这城市的美;繁杂世事中似乎遗忘最初的悸动。

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  8 随笔 :: 1 文章 :: 22 评论 :: 1 引用

公告

2007年2月2日 #

昨天广东卫视播放的《士兵突击》已经放到二十四集了,越来越精彩。昨天自认为很优秀的成才被A大队淘汰了,不服气的他从袁朗队长那得到了满意的解释,让他知道自己错在哪儿,队长的一句话很适合成才,那就是:我们不敢和你这样的战友一起上战场。队长的回答,让他想到了当兵三年来的做的一些对不起战友的事。

成才进部队开始就是一个不错的士兵,他的接受能力强,各项技能突出,这是大家认同的,但是大家也看出他喜欢耍小聪明。在新兵连,他教笨笨的许三多“处人”,也就是拉关系。他当然不需要那么直接,他在班长和连长面前表现得非常好,于是很自然的被分到钢起连---一个有着悠久历史的威武部队。

在钢七连,表面上他和战友的感情很不错,用的的话说“没处到全连的人,那也总处了一半吧”,但他把钢七连作为过场。在一次演习中,钢七连惨败,成才就在那个时候跳到了红三连,他做了钢七连有史以来跳槽的第一个兵。

在红三连做班长没多久升了士官,然而要他去许三多曾经待过的地方---红三连五班,驻守训练场。当然没过多久机会就来了,神秘的A大队要招一批新人,这给他新的希望,因为他是个技能优秀的士兵。A大队的选拔开始了,在他们几十号人中选3个,这是很残酷的,当然话又说回来了,战争不是更残酷吗?在行动中和他们一起的一个战士快不行了,许三多等人仍然坚持着“不放弃,不抛弃”,成才认为要放弃该士兵,当然客观的说,他这次做得对,因为拖下去那士兵可能会死掉,但从感情上说,他的做法让人心寒。

更让人心寒的在后面,那就是选拔行动快结束的时候,伍六一脚受伤了,那时候已经有一个人跑到了终点,也就是说只有两个名额了,而且这个时候另外的两名士兵爬到他们前面,如果他们背着伍六一的话,可能他们三个都被淘汰。在这个关键的时候上演了两个截然不同的场景,成才抛弃了许三多和伍六一,自己跑向了终点,而许三多“不抛弃,不放弃”,仍然坚持背伍六一艰难的走向终点,伍六一为了不连累许三多,自己主动放弃了。这个时候,可以说是个人都会被许三多和伍六一感动,就连“铁石心肠”的袁朗队长都被感动了。在去看医院的伍六一时,成才买那么多东西(买的都是补骨头的,而伍六一伤的是韧带),只是为了让自己心安。

终于进了A大队了,当然这只是进,而不是成为A大对的成员。为期三个月的集训开始了,这训练不同平时的训练,可以说是残酷的,让每个人在绝望中去生存,进步。三个月的训练中,成才的得分是最高的一个,技能是拔尖的。但是在一个近似于实战的战斗中,教官模拟了其他战友战死的情况下个人的单兵作战表现。成才在判断他所在组的战友全部牺牲时,进入了绝望,于是他退出了战场,因为他不想死。

评估的时候到了,他隐约的知道自己可能要走人,但是当他听到自己被踢出A大队的时候,仍然不死心,连说了几个不服。袁朗队长让他回想以前站在他旁边的二十七号(空降兵上尉),本来二十七号可能留下的,但是成才没去拉他,因为他认为和他无关,而且二十七号也会是他的竞争对手。

其实在我们生活中有许许多多的“成才”,可能是你,也可能是我。出来工作也快3年了,正好和成才当兵的时间差不多,回想一下过去,还是对在学校的同学的影象要深得多,工作后有很多同事的名字现在都想不起来了,因为和成才一样,只是把前面的工作当着是过场,没有好好的去对待同事之情。可以说这是个普遍现象,大家也不防回想一下,以前的工作中有多少是影响深刻的呢???[ 转自铁血社区 http://bbs.tiexue.net/ ]

我觉得我们不能做成才,那样我们的社会、生活就没有什么意义了,人与人之间的关系就成了过路人、竞争者。我们现在在工作中不也是经常体会到人情淡薄吗?所以我们都应该对身边的人,多一点温情,少一点冷眼旁观,世界之大,能走到一起工作也是件很不容易的事啊。虽然我们不可能做到向战友那样生死与共的友情,但我们在老的时候能想起在工作中遇到的人和事,那不也是个美好的回忆么???

posted @ 2007-02-02 09:42 灯火阑珊 阅读(2631) 评论(12) 编辑

2007年1月2日 #


实践是检验真理的唯一标准,看下面的代码:

//序列化和反序列化的测试
//构造测试数据,一个DataTable
System.Data.DataTable dt = new DataTable();
dt.Columns.Add(
"Id",System.Type.GetType("System.Int32"));
dt.Columns.Add(
"Name",System.Type.GetType("System.String"));

DataRow dr1 
= dt.NewRow();
dr1[
"Id"= 1;
dr1[
"Name"= "atao";
dt.Rows.Add(dr1);

DataRow dr2 
= dt.NewRow();
dr2[
"Id"= 2;
dr2[
"Name"= "tommy";
dt.Rows.Add(dr2);

//序列化
IFormatter formatter = new SoapFormatter();
System.IO.FileStream fs 
= new System.IO.FileStream("d:/test.xml",
                                                                             System.IO.FileMode.Create,
                                                                             System.IO.FileAccess.Write,
                                                                             System.IO.FileShare.None);
formatter.Serialize(fs,dt);
fs.Close();


//反序列化
IFormatter formatter_d = new  SoapFormatter();
System.IO.FileStream fs_d 
= new System.IO.FileStream("d:/test.xml",
                                                                                 System.IO.FileMode.Open,
                                                                                 System.IO.FileAccess.Read,
                                                                                 System.IO.FileShare.None);

DataTable dtt 
= (DataTable)formatter_d.Deserialize(fs_d);

this.DataGrid1.DataSource = dtt.DefaultView;
this.DataGrid1.DataBind();
//_________________________________________________________________

要更换序列化方式,只需把formatter更换就可以了。比如:IFormatter formatter_d = new  BinaryFormatter();
posted @ 2007-01-02 09:47 灯火阑珊 阅读(2293) 评论(1) 编辑

2006年12月28日 #


异步调用Webservice的方法及实例代码如下:

主方法(调用Webservice的方法):

ArrayList al = new ArrayList();
localhost.TestService ts 
= new TestWebPro.localhost.TestService();//这是Webservice在本地的代理类
System.Threading.ManualResetEvent mre = new System.Threading.ManualResetEvent(false);
al.Add(ts);
al.Add(mre);
   
//执行异步调用,localhost.TestEnum.bus是自定义的枚举,用做调用方法的参数
System.IAsyncResult ar = ts.BeginTestMethod(localhost.TestEnum.bus,new System.AsyncCallback(this.EndCall),al);

//.执行其它操作

mre.WaitOne();
//等待调用完成

//.继续执行其它操作


回调方法EndCall(调用完成后执行的方法):

public void EndCall(System.IAsyncResult ar)
{
 
try
 
{
  ArrayList al 
= (ArrayList)ar.AsyncState;
  localhost.TestService ts 
= (localhost.TestService)al[0];
  System.Threading.ManualResetEvent mre 
= (System.Threading.ManualResetEvent)al[1];

  
string s = ts.EndTestMethod(ar);//获得调用结果
    
  mre.Set();
//通知主方法可以继续执行
 }

 
catch(Exception ex)
 
{
  
throw ex;
 }

}


如果主方法和回调方法在同一个类就可以把ts和mre声明成私有全局变量,而不用通过IAsyncResult.AsyncState来传递到回调函数中。

posted @ 2006-12-28 11:43 灯火阑珊 阅读(337) 评论(0) 编辑

2006年12月25日 #

 注:该系列讨论基于CMMI V1.2

一.基本概念

1. CMM(Capability Maturity Model),能力和成熟度模型

2. CMMI是英文Capacity Maturity Model Integrated的简称。中文的译意是能力成熟度集成模型。CMMI是CMM的更高版本,现在CMMI的最新版本是1.2,由SEI发布于2006年8月。

3.专业术语及缩写:

1). 相关术语:

共利益者(Stakeholder):所谓“共利益者”,指的是受到某种负责产生输出的方式影响的群体或个人。共利益者可能包括项目经理、供方、顾客以及其他人。术语“相关的共利益者”用于指某个计划中要求执行某类活动或接收某类信息的群体和个人。
工作产品(work product):指由过程产生的任何人工制品。这些人工制品可能包括文卷、文档、产品的一部分、服务、过程、规范以及清册等。

产品构件(product component):“产品构件”是产品的组成部分。把产品构件加以集成,可以构造出产品。可能存在多个层次的产品构件。产品构件也是工作产品,但是必须经过工程化(需求确定、设计、集成式解决方案开发等)才能实现产品的预计用途。产品构件可能是将要交付给顾客的产品的组成部分,也可能只是供项目内部使用或其他方面使用。

目标(goal):本标准中为评估模型定义了“通用目标”和“特定目标”,把它们作为衡量实际的软件过程的能力的重要尺度;在涉及软件过程能力的上下文中,每个通用目标和特定目标都具有特定的含义,不要把其他背景中的目标一词与它们混淆。

组织的标准过程集合(organization's set of standard process):“组织的标准过程集合”包含各个基本过程的定义,用以指导本组织里的所有过程。这些过程的描述覆盖各个基本过程要素以及要素之间的关系。这些基本要素是项目已定义过程的组成部分。对于那些要在项目中实施的已定义过程而言,这些要素是必须借用的。标准过程为整个组织范围内的开发活动和维护活动确立了一致性,是实现长期稳步改进的基础。 

已定义过程(defined process):“己定义过程”是根据本组织的剪裁指南从组织的标准过程集合剪裁得到的受管理的过程。“项目已定义过程”是对项目的作业和活动进行策划、执行和改进的基础。一个项目可以有不止一个已定义过程(例如,一个用于产品开发,一个用于产品测试)。

组织过程财富(organizational process assets):“组织过程财富”是被认为对定义和实施组织里的过程有用的制品,它们供项目和开发、剪裁、维护以及实施过程时使用。 

过程体系结构(process architectures):“过程体系结构”是标准过程中的各个过程要素之间的顺序、界面、相互依存性和其他关系的描述。 

过程要素(process element):“过程要素”是过程描述的基本单位。过程可以用子过程或过程要素予以定义。子过程可以进一步加以分解;过程要素不能再分解。每个过程要素覆盖一组密切相关的活动(例如,同行审查要素,估计要素)或一项活动或一项作业。

组织的过程相关文档库(organizational library of process-related documentation):“组织的过程相关文档库”存储过程文档和提供使用这些过程文档的信息库。这种信息库中包含文档、文档片段、过程实施的帮助信息和其他那些对定义、实施和管理过程有用的人工制品,过程相关文档等,例子有:方针、已定义过程、标准、规程、开发计划、测量计划以及培训材料等。在启动新的过程时,这个文档库有助于减少开始工作的工作量

2). 缩写:

通用目标GG:Generic Goals 

特定目标SG:Specific Goals

通用实践GP:Generic Practices

特定实践SP:Specific Practices

过程域PA:Process Area

质量保证QA:Quality Assurance

 软件工程过程组SEPG:Software engineering process group

 过程改进指导描述PIID:Process Improvement Indicator Description

 SCAMPI:Appraisal Method for Process Improvement  (CMMI中评估过程改进的一种方法)

以下是CMMI中所有的22个KPA:

        需求管理REQM: Requirement Management
        项目策划PP:Project Planning
        项目监督和控制PMC:Project Monitoring and Control  Planning
        供方协定管理SAM:Supplier Agreement Management
        测量和分析MA:Measurement and Analysis
        过程和产品质量保证PPQA:Process and Product Quality Assurance
        配置管理CM:Configuration Management
        需求开发RD:Requirement Development
        技术解决TS:Technical Solution
        产品集成PI:Product Integration
        验证VER:Verification
        确认VAL:Validation
        组织过程聚焦OPF:Organization Process Focus
        组织过程定义OPD:Organization Process Definition
        组织培训OT:Organization Training
        集成项目管理IPM:Integration Project Management
        风险管理RSKM:Risk Management
        决策分析和决定DAR:Decision Analysis and Resolution
        项目定量管理QPM:Quantitative Project Management
        组织过程性能OPP:Organizational Process Performance
        组织革新和实施(Organizational Innovation and Deployment)
        原因分析和解决(Causal Analysis and Resolution)

二.CMMI表示法

1.CMMI的两种表示方法:

    a).连续式:选择性的实施过程域,不一定所有项目都实行,属于项目级。

    b).阶段式:必须全部或大部分项目都达到标准,属于组织级。

这两种表现方法的区别是:阶段式表现方法把CMMI中的若干个过程区域分成了5个成熟度级别,帮助实施CMMI的组织建议一条比较容易实现的过程改进发展道路。而连续式表现方法则通过将CMMI中过程区域分为四大类:过程管理、项目管理、工程以及支持。对于每个大类中的过程区域,又进一步分为基本的和高级的。这样,在按照连续式表示方法实施CMMI的时候,一个组织可以把项目管理或者其他某类的实践一直做到最好,而其他方面的过程区域可以完全不必考虑。

2.CMMI的阶段式表示(连续式不做关注)

CMMI阶段式表示中总共分成了5各阶段,图一是各个等级的总体描述:


 

图一:CMMI阶段式表示各等级总体描述

图二描述了项目开发在各等级性能表现,这里的性能是指在项目开发中过程的性能,而不是指软件产品的性能。图中横轴表示项目所花费的资源,包括时间,金钱,人力等,纵轴表示可能达到的性能,而标识为"target"的竖线表示组织期望达到的目标,即期望在target处应该达到最佳的性能。有趣的是从1级到2级的变化趋势,1级时的target比2级时还要靠前一点,这可能也是一些企业不愿实施CMMI的原因,这完全是劳命伤财的事嘛,做了那么多,工作效率不升反降,哪里的道理。其实我们仔细研究,发现在2级时期望值确实是推后了,但是,实际值却靠前了并且和我们的期望值十分的吻合,这就是管理的作用。
图二:项目在各个等级上实施可能性能情况概览

好了,从整体上把握了CMMI阶段式表示的5个等级后,下面分别详细阐述CMMI阶段式表示的各个阶段的特征,并且列出各个阶段的关键过程域(Key Process Area-KPA):

a).初始级:企业对项目的目标与要做的努力很清晰。项目的目标得以实现。因此,任务是完成了。 但是由于任务的完成带有很大的偶然性,企业无法保证在实施同类项目的时候仍然能够完成任务。企业在一级上的项目实施对实施人员有很大的依赖性。

特点:图三描述了初始级的项目状态

图三:CMMI初始级(一级)项目状态描述

    这个阶段的项目,开发人员和项目经理都是依靠个人的经验来推动项目走向预期目标,没有任何规定的流程遵循,大家都是一头雾水,走到哪里算哪里,没有任何的监督和控制。主要特点可以概括如下:

1).性能取决于开发者的能力,好的雇员就可以提高软件开发性能。

2).没有过程域,整个软件开发过程缺乏管理。

3).不可预测性,运气好的话,结果可能令人满意。

4).这次的成功不能代表下次同样的项目也能取得成功。

b).管理级(图中表示为可重复级:Repeatable):企业在项目实施上能够遵守既定的计划与流程,有资源准备,权责到人,对相关的项目实施人员有相应的培训,对整个流程有监测与控制,并与上级单位对项目与流程进行审查。企业在二级水平上体现了对项目的一系列的管理程序。这一系列的管理手段排除了企业在一级时完成任务的随机性,保证了企业的所有项目实施都会得到成功。

特点:图四描述了管理级的项目状态

图四:CMMI管理级(二级)项目状态描述

    在这个阶段下,项目按照预期的计划有条不紊的进行,并且设置了若干的里程碑,在每个里程碑对项目进行检查,评审,看项目是否按照预期的计划正确的执行,但是在这个阶段中,各个里程碑之间仍然是一个黑箱,是不可见。这个阶段的特点可以概括为:

1).建立了有效的软件项目管理机制,遵循并且文档化这个机制。

2).软件开发过程是一系列带有检查点(里程碑)的黑盒子。

3).因为已经文档化,所以以前项目中的成功经验可以重复使用。

    管理级包括7个过程域:

        配置管理(CM)

        需求管理(REQM)

        项目计划(PP)

        过程和产品质量保证(PPQA)

        供应商合同管理(SAM)

        项目监督和控制(PMC)

        度量和分析(MA)

c).定义级:企业不仅仅能够对项目的实施有一整套的管理措施,并保障项目的完成;而且,企业能够根据自身的特殊情况以及自己的标准流程,将这套管理体系与流程予以制度化。这样,企业不仅能够在同类的项目上得到成功的实施,在不同类的项目上一样能够得到成功的实施。科学的管理成为企业的一种文化,企业的组织财富。

特点:图五描述了管理级的项目状态

图五:CMMI定义级(三级)项目状态描述

    这个阶段下,项目在第二级的基础上加入了对于黑盒子里面过程的更详细的监督。特点概括如下:

1). 角色和职责清晰

2). 整个软件过程可见,而不仅仅在检查点(里程碑)处可见。

    定义级包括11个过程域:

        产品集成(PI)

        集成项目管理(IPM)

        组织培训(OT)

        组织过程定义(OPD)

        组织过程焦点(OPF)

        需求开发(RD)

        技术解决方案(TS)

        验证(VER)

        确认(VAL)

        风险管理(RSKM)

        决策分析和解决(DAR)

d).定量管理级:企业的项目管理不仅仅形成了一种制度, 而且要实现数字化的管理。对管理流程要做到量化与数字化。通过量化技术来实现流程的稳定性,实现管理的精度,降低项目实施再质量上的波动。

特点:图六描述了管理级的项目状态

图六:CMMI定量管理级(四级)项目状态描述

    这个阶段强调的是对定量的过程控制,不仅通过定量的分析发现问题,而且要据此提出解决方案。特点概括如下:

1). 依据客观数据做出决策。

2). 可在定量的范围内预测性能。

    定量管理级包括2个过程域:

        项目定量管理(QPM)

        组织过程性能(OPP)

e).优化级:企业的项目管理达到了最高的境界。企业仅仅能够通过信息手段与数字手段来实现对项目的管理, 而且能够充分利用信息资料,对企业在项目实施的过程中可能出现的次品予以预防。能够主动地改善流程,运用新技术,实现流程的优化。

特点:图七描述了管理级的项目状态

图七:CMMI优化(五级)项目状态描述

    这个阶段下强调的是对组织流程的不断改造更新,实现流程的优化。特点概括为:

1). 表示和消除不佳性能原因。

2). 持续改进软件过程。

    优化级包括2个过程域:

        组织革新和实施(OID)

        原因分析和解决(CAR)

图八的坐标总体系给出了各个等级的特点联系和区别:

图三:各个等级的特点总结

在这个系列以后的文章中我们会对以上各个过程域展开讨论以深入了解学习CMMI,顺序不一定是按照从低级到高级的顺序。



posted @ 2006-12-25 14:23 灯火阑珊 阅读(1365) 评论(0) 编辑

2006年12月21日 #

   个人觉得《道法自然》这本书很不错,他可以让对于写代码游刃有余得人们回到软件设计最根本的理念上来,用青原禅师的话来说就是让你“见山不是山,见水不是水”,当然我们的目的不是这个,我们的目的是“山非山而山,水非水而水”。
   以后这个看书笔记会是一个系列,之所以写这个系列的看书笔记,是想把一些琐碎的片段整理起来,便于查证复习,另一方面也可以方便大家的学习,借鉴或者讨论和批评。

一. 关于设计模式:

 1.青原惟信禅师的三种境界,个人觉得与王国维得三种境界有异曲同工之妙:
         1). 见山是山,见水是水
         2). 见山不是山,见水不是水
         3). 山非山而山,水非水而水

         精辟的总结:说山者滞山。

2.设计模式中的原则和理念

         1.设计模式的根本意图是适应需求变化

         2.针对接口编程,而非针对实现编程

         3.优先使用聚合而不是继承

 二. 面向过程与面向对象的区别:

突然觉得面向过程和面向对象的关系可以用企业发展模式来解释,一个企业在自己的业务规模不是特别大的时候,管理者总是希望把公司所有的日常业务进行一个统一的调配和管理,即做统筹管理,但是当企业发展之后,这时做统筹管理已经不能满足业务需求,于是产生了部门,当企业的规模再次扩大时,原来的企业部门已经不能应付新的业务需求了,于是产生了分公司。

上边说到的统筹管理就相当于面向过程,眉毛胡子一把抓;部门就相当于面向对象,已经有了明确的分工;而分公司则相当于面向服务,这是更高层次上的分工协作,即现在的SOA。

三. 面向对象分析:

1.      面向对象分析的核心内容是:找到软件系统中的实体类和软件类,确定类或对象间的关系。

2.      面向对象分析的主要任务时根据用户需求,建立一个准确的,完整的,一致的系统模型,我们称它们为分析模型,这些模型描述我们需要解决的问题是什么。分析模型包括功能模型(即用例模型),对象模型(是系统的静态模型,和动态模型相对),动态模型。

3.      一般来说,每个对象都是数据和相关操作的集合,数据代表对象的状态,操作代表对象对内外环境变换的反应方式。

4.      面向对象分析和面向对象设计的区别:

a)     面向对象分析侧重于理解问题,描述软件做什么;面向对象设计侧重于理解解决方案,描述软件怎么做。

b)    面向对象分析只考虑理想的设计,不考虑技术和实现层面的细节;而面向对象设计需要考虑更详细,更具体,更接近真实代码的设计方案。

c)     面向对象分析阶段侧重于描述对象的行为;而面向对象设计阶段侧重于描述对象的属性和方法。

d)    现象对象分析只关注功能性需求;面向对象设计既关注功能性需求又关注非功能需求。

e)     面向对象分析产生的模型较小;而面向对象设计产生的模型规模较大,内容也比较完整详尽。

posted @ 2006-12-21 09:36 灯火阑珊 阅读(425) 评论(2) 编辑

2006年12月20日 #

摘要: 通常我们在使用HttpHandler时会选择在Web.Config文件中配置以拦截特定请求并指向相应的实现了IHttpHandler接口的类,但是我们还有另外一种更加简单的方式,那就是使用.ashx文件来实现。 新建一个以.ashx为后缀的文本文件,假设命名为"mytest.ashx",然后在这个文件里面加入: <%@ WebHandler Language="C#" Class="clas...阅读全文
posted @ 2006-12-20 14:09 灯火阑珊 阅读(2303) 评论(2) 编辑

2006年3月19日 #

摘要: 因为DataGrid控件的简单易懂,大多数做.NET程序员都喜欢用,有需要把数据显示成表格样式的地方DataGrid会是首选,但是所有的东西都会有好和不好的一面,DataGrid在给我们带来了数据显示方便的同时,也给我们带来了不灵活的问题,多层表头就是例子。 相信大家都遇到过这样的需求: Head1 Head2 Head3 Head4 SubTitle1 SubTitle2 我在网上Google和...阅读全文
posted @ 2006-03-19 18:35 灯火阑珊 阅读(738) 评论(5) 编辑

2005年11月16日 #

摘要: 最近在学习.NET 2.0了(说来惭愧呀,万多年前就出VS2005了,现在才想起学.NET 2.0),粗略看了下,2.0版本较1.1版本多了不少新的特性,比如MaterPage,Theme,无刷新Call Server等,页面生命周期也多了不少方法,可以更精确的控制页面的呈现过程,令人激动呀。不过今天要说的不是.NET FrameWork 2.0,而是新版C#中的新特性:泛型还是先看看下面一段代码...阅读全文
posted @ 2005-11-16 17:33 灯火阑珊 阅读(734) 评论(0) 编辑

仅列出标题