2008年11月10日星期一

请不要忽视项目文档管理?

这么些年来,大大小小经历了一些信息系统的实施项目,有一部分是协助别人进行项目的实施工作,有一部分是自己负责管理项目的实施工作,另外还有一部分是通 过各种渠道了解的别人的项目实施工作,在这个过程中也在不断地思索一些管理方面的问题。信息系统的实施工作是纷繁复杂的,走过了这么些年,令自己欣慰的是 积累了一些成功的经验,另外一个感触就是一次次发现可改进之处的欣喜和感悟,现在就将项目管理过程中本人关于文档管理的一些潜质拙见通过本文进行一个分 享。

    在此前的关于信息系统的项目实施管理整个过程的文章中也提到过一些文档管理的内容,撰写此文的目的在于更加详实的表达我对项目管理过程中的文档管理的一些理解。

    文档管理的重要性
    一直以来,有很多的人都在说文档管理的重要性,最耳熟能详的莫过于软件项目中的人员变动以后后面的人无法识别之前的代码,或者识别的成本较高。事实情况 是,就算人员不变动,时间长了,当时的编写者也不会记得当时的思路是什么,因为时间会消磨一些东西,另外每个人的想法和思维方式也在发生变化。

    一个项目组织在进行一些想法的沟通时,由于个人知识结构的不同、所处的地位立场不同等原因也会导致对一个想法的最终实现方案的认知上存在差异,最终落实到 方案上也会有所不同,通过一个书面的文档可以将每个人的认知形成一个统一的认知,减少不必要的沟通障碍。同时明确的文档也可以给参与者更多思考的空间。

     为了达到一个好的沟通交流方式,我们需要各式各样的文档,在现实的项目管理过程中也确实存在了大量的文档,每个人都认为文档是重要的,但是当真正文档到来 的时候又开始困扰了,会不自觉的有些厌烦和无从下手。做文档的过程是辛苦的,更是麻烦的,原来几句话的事情在有了文档以后变得异常麻烦,需要对应好格式, 需要不同人员的审核和认可,难免就会觉得麻烦;而在自己做完文档以后发现可用性并不如想象中的那么高,真正想要的文档不知道到哪里去找,不同的文档说法不 统一,等等诸如此类的问题让使用者有点无从下手。

    或许是印证了一句话,叫做事情做的没有头绪的时候就想到了管理,对于那些各式各样的文档同样不会例外。

    文档管理的方式
    在文档管理的过程中,需要把握住一些重要的原则和方法,这样可以让我们的文档真正达到我们预期的目的。
文档模板的管理

    面对各类纷繁复杂的文档,如果各式各样,每个人一个风格,不论从美观性和可读性上都会有影响,所以在文档管理中的过程中需要建议一套文档的模板。

    在建立文档模板时,需要对一些格式进行要求,需要将一些基本的要素固化到文档模板中,确保文档需要的内容能够在文档中体现,例如文档的页眉页脚、文档变更历史、文档的目录方式、文档的字体等。

    在建立文档时,要注意做好文档的分类,各种分类有一个清晰的定义,使用者可以清楚地知道实际使用时要采用哪种模板。如果是使用共享目录方式管理文档,需要 在一个相对容易找到的文件夹目录中存放模板,如果是使用信息系统方式进行模板管理,最好能够在首页进行一个连接,或者是让使用者可以快速的搜索到。在建立 分类时,需要含有一个共同类,或者叫做公用类,因为在实际的使用过程中总是会有一些新的类别出现,也会有一些无法进行分类的文档,这个时候就可以通过共同 类进行管理。

    对于文档模板的变更需要能够做到及时告知使用者,并做好版本管理。
    文档目录的管理
    为了能够在纷繁复杂的文档中找到需要的文档,需要在进行文档管理时建立一套完整的文档目录体系,主要包括文档的索引管理和文档的分类管理。

    在进行文档管理前,需要对不同的文档建立一个分类,建议不同的分类可以便于文档的查找,也可以针对不同的分类制定不同的管理要求。如果是文件夹方式管理, 还需要分别不同的文件夹内容的安排以及权限的控制,因为文件夹管理的特殊性,需要注意其权限管理的简洁化;如果是采用信息系统管理,需要注意类型的编码体 系的建立。一个好的文档分类体系可以让使用者方便地进行文档的归类和查找,文档的分类在一些管理过程中还需要注意归档管理的需求。

    对于文档,需要建立一套索引机制,这里之所以特别提出索引机制,是因为在日常的文档使用中,会发现一些很多类似的文档,或者类似的内容说明,由于不同的撰 写者会对一些基本的概念或者原则的说明会存在一些差异,这个时候就需要能够有一个索引来明确什么是最准确的,这一点在项目管理过程中特别重要,因为一个项 目组往往会不时的发生一些变动,后来人面对多个说法时很难知道什么是对的,同时一些实际情况也会发生变动,一些说法也需要进行修正,而之前的一些文档也无 法进行更正,所以这个时候也需要有一个索引来明确正确的说法,这一点问题也可以通过文档版本的管理加以改善。另外对于那些纷繁复杂的文档,有些只是事务性 的,通过一个索引的方式,可以将一些重点的内容放在一个突出的位置,便于进行检索和阅览。

    不论是文件夹方式还是信息系统方式,都需要注意对文档的权限管理,特别是对一些归档的文档,避免归档的文档被不正确的修改或者删除。

    文档的命名规范
    各种文档,如果名称多样,或者名称含义模糊将会造成使用和交流上的不便,需要建立一套有效的命名规范体系。
    对于文档的名称,首先需要名称能够容易识别,有些使用者不是很注意文档的名称,经常直接用文件的默认名称,或者就是一个自己的姓名、项目的名称等,其他的使用者很难识别是什么类型的文档。

    在文档的使用过程中,可以规定在文档的某些部位必须放置文档的类型或者某些其他关键字,例如将要求将文档的类别放在文件名的头部,对于月度性的文档,规定头部必须放某年某月,等等。

    对于一些分不同版本的文档,可以要求分不同的版本进行管理,文件名称中注明版本号,对于终稿等一些标志性的内容可以加一些特殊的标识,这样可以明确其重要性和权威性。

    这些方式将有助于文档的文件名的整洁和清晰,使用者在查找时也较为方便。在进行文档的交互调整过程中,也可以增加一些日期或者修改者的标识来进行传递,主要的目的在于能够唯一识别一个文档,减少互相沟通的障碍。
文档的变更管理

    文档在使用过程中发生变更是很常见的现象,对于发生变更的文档,需要通过手段加以约束,最常用的方法就是版本的管理,对于形成的文档及时进行归档保存。

    文档发生变更时,需要能够做到两点:第一,文档有清晰的变更记录,主要是针对变化的部分,不能让每个使用者在文档发生变化后都需要把文件通篇读一遍;第二,文档的最终版本要能方便的阅览,如果出现只能看变更历史才知道最终版本的话将大大提高使用成本。

    在文档发生变更时,需要能够通过必要的途径通知相关人,例如通过邮件通知或者公告通知的方式,避免新的文档产生后还有大量的使用者使用旧的文档,在实际操 作环境中,ISO9000管理使用的签字回收重要文档的方式很值得借鉴,当然对一些电子文档需要采用一些其他变通的方式来处理。

    文档的审核制度
    很多文档作为一种指导性文件,需要有一定的严肃性和权威性,因而对文档进行必要的审核是必须的。
    文档的审核时机一般为文档建立时和文档发生变更时,对于文档的适用范围的变更也应该进行必要的审核。通过文档的审核,可以检查是否存在错误的事项或者一些 不合理的事项,撰写者和审核者所处的岗位不同、知识结构不同,对于一个文档如何撰写的角度和看法也会不同,在后续的审核过程中能够很好的进行文档的校正。 同时,文档的审核机制也可以明确各自岗位的责任。

    后记
    信息系统的实施是一个负责的管理过程,需要方方面面的管理工作配合到位,文档作为一种日常交流的重要依据和工作成果的总结显得尤为重要,在文档管理的过程 中既要注意严肃性,又要能兼顾灵活性,要本着在达到正常的规范性的基础上尽可能地方便使用者的使用和交流,提高使用效率。
    文档管理工作在其他的一些管理工作中同样是一个重要的内容,很多大型企业都会有一个专门的档案管理部门进行文档的归档管理,这些都能充分体现文档管理的重要性之所在。





[广告] 金秋最关注楼盘-房不胜房

2008年11月6日星期四

人生致命的八个经典问题---你想过了吗?

人生致命的八个经典问题---你想过了吗?
问题一, 
如果你家附近有一家餐厅,东西又贵又难吃,桌上还爬着蟑螂,你会因为它很近很方便,就一而再、再而三地光临吗? 
回答:你一定会说,这是什么烂问题,谁那么笨,花钱买罪受? 可同样的情况换个场合,自己或许就做类似的蠢事。不少男女都曾经抱怨过他们的情人或配偶品性不端,三心二意,不负责任。明知在一起没什么好的结果,怨恨已经比爱还多,但却"不知道为什么"还是要和他搅和下去,分不了手。说穿了,只是为了不甘,为了习惯,这不也和光临餐厅一样?
——做人,为什么要过于执著?! 

问题二, 
如果你不小心丢掉100块钱,只知道它好像丢在某个你走过的地方,你会花200块钱的车费去把那100块找回来吗? 
回答:一个超级愚蠢的问题。 

可是,相似的事情却在人生中不断发生。做错了一件事,明知自己有问题,却*也不肯认 错,反而花加倍的时间来找藉口,让别人对自己的印象大打折扣。被人骂了一句话,却花了无数时间难过,道理相同。为一件事情发火,不惜损人不利已,不惜血本,不惜时间,只为报复,不也一样无聊? 失去一个人的感情,明知一切已无法挽回,却还是那么伤心,而且一伤心就是好几年,还要借酒浇愁,形销骨立。其实这样一点用也没有,只是损失更多。 
——做人,干吗为难自己?!

问题三, 
你会因为打开报纸发现每天都有车祸,就不敢出门吗? 
回答:这是个什么烂问题?当然不会,那叫因噎废食。 
然而,有不少人却曾说:现在的离婚率那么高,让我都不敢谈恋爱了。说得还挺理所当然 。也有不少女人看到有关的诸多报道,就对自己的另一半忧心忡忡,这不也是类似的反应?所谓乐观,就是得相信:虽然道路多艰险,我还是那个会平安过马路的人,只要我小心一点,不必害怕过马路。 
——做人,先要相信自己。

问题四, 
你相信每个人随便都可以成功立业吗? 
回答:当然不会相信。 
但据观察,有人总是在听完成功人士绞尽脑汁的建议,比如说,多读书,多练习之后,问了另一个问题?那不是很难? 
我们都想在3分钟内学好英文,在5分钟内解决所有难题,难道成功是那么容易的吗?改变当然是难的。成功只因不怕困难,所以才能出类拔萃。有一次坐在出租车上,听见司机看到自己前后都是高档车,兀自感叹:"唉,为什么别人那么有钱,我的钱这么难赚?"  我心血来潮,问他:"你认为世上有什么钱是好赚的?"他答不出来,过了半晌才说:好像都是别人的钱比较好赚。 
其实任何一个成功者都是艰辛取得。我们实在不该抱怨命运。 
——做人,依靠自己! 

问题五, 
你认为完全没有打过篮球的人,可以当很好的篮球教练吗? 
回答:当然不可能,外行不可能领导内行。 

可是,有许多人,对某个行业完全不了解,只听到那个行业好**,就马上开起业来了。
我看过对穿着没有任何口味、或根本不在乎穿着的人,梦想却是开间服装店;不知道电脑怎么开机的人,却想在网上**,结果道听途说,却不反省自己是否专业能力不足,只抱怨时不我与。 
——做人,量力而行。 

问题六, 
相似但不相同的问题:你是否认为,篮球教练不上篮球场,闭着眼睛也可以主导一场完美的胜利? 
回答:有病啊,当然是不可能的。
可是却有不少朋友,自己没有时间打理,却拼命投资去开咖啡馆,开餐厅,开自己根本不懂的公司,火烧屁股一样急着把辛苦积攒的积蓄花掉,去当一个稀里糊涂的投资人。亏的总是比赚的多,却觉得自己是因为运气不好,而不是想法出了问题。 
——做人,记得反省自己。 

问题七,
你宁可永远后悔,也不愿意试一试自己能否转败为胜? 
解答:恐怕没有人会说:"对,我就是这样的孬种"吧。

然而,我们却常常在不该打退堂鼓时拼命打退堂鼓,为了恐惧失败而不敢尝试成功。以关颖珊赢得2000年世界花样滑冰冠军时的精彩表现为例:她一心想赢得第一名,然而在最后一场比赛前,她的总积分只排名第三位,在最后的自选曲项目上,她选择了突破,而不是少出错。在4分钟的长曲中,结合了最高难度的三周跳,并且还大胆地连跳了两次。她也可能会败得很难看,但是她毕竟成功了。她说:"因为我不想等到失败,才后悔自己还有潜力没发挥。"  一个中国伟人曾说;胜利的希望和有利情况的恢复,往往产生于再坚持一下的努力之中。 
——做人,何妨放手一搏。 

问题八, 
你的时间无限,长生不老,所以最想做的事,应该无限延期? 
回答:不,傻瓜才会这样认为。 
然而我们却常说,等我老了,要去环游世界;等我退休,就要去做想做的事情;等孩子长大了,我就可以……我们都以为自己有无限的时间与精力。其实我们可以一步一步实现理想,不必在等待中徒耗生命。如果现在就能一步一步努力接近,我们就不会活了半生,却出现自己最不想看到的结局。 

——做人,要活在当下。 


网易邮箱10周年,技术见证辉煌

2008年11月4日星期二

简析Java RMI 与 .NET Remoting

Java与.NET都提供了远程处理功能,但不完全相同.Java远程处理是通过一个"共享接口"实现的,而.NET可以通过一个"共享命令集"实现。下面就这两种方式来具体说明。

Java 远程处理

Java远程方法调用(RMI)提供了Java程序语言的远程通讯功能,这种特性使客户机上运行的程序可以调用远程服务器上的对象,使Java编程人员能够在网络环境中分布操作。
创建一个简单的Java分布式远程方法调用程序可以按以下几个步骤操作,

一、定义远程接口:
在 Java 中,远程对象是实现远程接口的类的实例, 远程接口声明每个要远程调用的方法。在需要创建一个远程对象的时候,我们通过传递一个接口来隐藏基层的实施细节,客户通过接口句柄发送消息即可。
远程接口具有如下特点:
1) 远程接口必须为public属性。如果不这样,除非客户端与远程接口在同一个包内,否则 当试图装入实现该远程接口的远程对象时,调用会得到错误结果。
2) 远程接口必须扩展接口java.rmi.Remote。
3) 除与应用程序本身特定的例外之外,远程接口中的每个方法都必须在自己的throws从句中 声明java.rmi.RemoteException。(或 RemoteException 的父类)。
4) 作为参数或返回值传递的一个远程对象(不管是直接,还是本地对象中嵌入)必须声明为远 程接口,而不应声明为实施类。
下面是远程接口的接口RmiSample的定义

 import java.rmi.*;
 public interface RmiSample extends Remote {
     public int sum(int a,int b) throws RemoteException;
 }

 二、实现远程接口:
远 程对象实现类必须扩展远程对象java.rmi.UnicastRemoteObject类,并实现所定义的远程接口。远程对象的实现类中包含实现每个远 程接口所指定的远程方法的代码。这个类也可以含有附加的方法,但客户只能使用远程接口中的方法。因为客户是指向接口的一个句柄,而不是它的哪个类。必须为 远程对象定义构造函数,即使只准备定义一个默认构造函数,用它调用基础类构造函数。因为基础类构造函数可能会抛出 java.rmi.RemoteException,所以即使别无它用必须抛出java.rmi.RemoteException例外。
以下是远程对象实现类的声明:

  import java.rmi.*;
  import java.rmi.server.*;
  public class RmiSampleImpl extends UnicastRemoteObject
                           implements RmiSample {
      RmiSampleImpl() throws RemoteException {
         super();
      }
      public int sum(int a,int b) throws RemoteException {
         return a + b;
      }
  }

三、编写服务器类:
包 含 main 方法的类可以是实现类自身,也可以完全是另一个类。下面通过RmiSampleServer 来创建一个远程对象的实例,并通过java.rmi.registry.LocateRegistry类的createRegistry 方法从指定端口号启动注册服务程序,也可以通过执行 rmiregistry 命令启动注册服务程序,注册服务程序的缺省运行端口为 1099。必须将远程对象名字绑定到对远程对象的引用上: Naming.rebind("//localhost:8808/SAMPLE-SERVER" , Server);
以下是服务器类的声明:

 import java.rmi.*;
 import java.rmi.registry.*;
 public class RmiSampleServer{
     public static void main(String args[]) {
         try {
         LocateRegistry.createRegistry(8808) ;
         SampleServerImpl Server = new SampleServerImpl();
         // 将该对象实例与名称"SAMPLE-SERVER"捆绑
         Naming.rebind("//localhost:8808/SAMPLE-SERVER" , Server);
         } catch (java.net.MalformedURLException me) {
            System.out.println("Malformed URL: " + me.toString());
         } catch (RemoteException re) {
            System.out.println("Remote exception: " + re.toString());
         }
     }
  }

四、编写使用远程服务的客户机类:
客户机类的主要功能有两个,一是通过Naming.lookup方法来构造注册服务程序 stub 程序实例,二是调用服务器远程对象上的远程方法。
以下是服务器类的声明:

 import java.rmi.*;
 import java.rmi.server.*;
 public class RmiSampleClient {
     public static void main(String[] args)
     {
         try {
            String url = "//localhost:8808/SAMPLE-SERVER";
            RmiSample RmiObject = (RmiSample)Naming.lookup(url);
            System.out.println(" 1 + 2 = " + RmiObject.sum(1,2) );
         } catch (RemoteException exc) {
             System.out.println("Error in lookup: " + exc.toString());
         } catch (java.net.MalformedURLException exc) {
             System.out.println("Malformed URL: " + exc.toString());
         } catch (java.rmi.NotBoundException exc) {
             System.out.println("NotBound: " + exc.toString());
         }
      }
   }

五、编译代码:
要编译 Java 源文件,请运行 javac 命令:
 javac RmiSample.java RmiSampleImpl.java RmiSampleServer.java RmiSampleClient.java

六、为远程对象实现创建根和干:
要创建存根程序和骨架文件,应以包含远程对象实现的已编译类包全名运行 rmic 编译器。
存根(Stub)是远程对象在客户端的代理,它将RMI调用传递给服务器端的骨架(Skeleton),后者负责将该调用传递给实际的远程方法输入如下:
D:RMI>rmic -d D:RMI RmiSampleImpl 执行这个命令, 若rmic成功运行,RMI目录下就会多出两个新类: RmiSampleImpl_Stub.class RmiSampleImpl_Skel.class 它们分别对应的是存根(stub)和骨架(skeleton).

七、运行代码:
运行服务端程序:在Windows下,输入下列命令,在后台启动RmiSampleServer程序:
D:RMI>java RmiSampleServer
运行客户端程序:
D:RMI>java RmiSampleClient
客户端输出: 1 + 2 = 3

.NET 远程处理。

微软的.NET Remoting提供了一种允许对象通过应用程序域与另一对象进行交互的框架,从结构上而言,.NET Remoting对象非常适合通过网络访问资源,而又无需处理由基于SOAP的WebServices所带来的难题。下面介绍创建一个简单的.NET Remoting分布式远程方法调用程序一般所需要的几个步骤。

第一步:创建共享远程对象

创建一个C# Library,并将其命名为RemoteObject。这将创建一个我们的.NET Remote客户端和服务器端用来通讯的"共享命令集"。
 public class RemoteObject : System.MarshalByRefObject
 {
     public RemoteObject()
     {
        System.Console.WriteLine("New Referance Added!");
     }

     public int sum(int a, int b)
     {
        return a + b;
     }
 }
名字空间是对象所需要的。请记住,如果得到System.Runtime.Remoting.Channels.Tcp名字空间不存在的信息,请检查是否象上面的代码那样添加了对System.Runtime.Remoting.dll的引用。
 
using System;
using System.Runtime;

我们为对象使用的名字空间是RemoteSample,下面的对象是MarshalByRefObject,在其中我们创建了一个引用和包括服务器端操作全部完成所需要的所有工作。

namespace RemoteSample
{
 public class RemoteObject : System.MarshalByRefObject
 {
    public RemoteObject()
    {
       System.Console.WriteLine("New Referance Added!");
    }

    public int sum(int a, int b)
    {
       return a + b;
    }
 }
}//RemoteSample名字空间结束

保存文件,命名为RemoteObject.cs
用命令行csc /t:library RemoteObject.cs 编译文件,就会得到一个RemoteObject.DLL文件,并可以在编译其他的C#文件中使用它。


第二步:创建服务器对象

创建服务器对象,并将它命名为RemoteServer。在创建服务器对象时必须实现以下操作:

1)构造服务器信道。
TcpServerChannel是.NET remoting支持的二种信道类型中的一种,可以将它设置为对象对来自哪一个端口的请求进行回应,ChannelServices.RegisterChannel将把该端口号与操作系统中的TCP/IP栈绑定。

TcpServerChannel channel = new TcpServerChannel(8808);
ChannelServices.RegisterChannel(channel);

也可以设置为另一种的信道类型HTTP, 只要简单地用System.Runtime.Remoting.Channels.Http名字空间中的HttpServerChannel对象替换即 可。使用HTTP和TCP信道之间的区别在于:如果应用程序是在局域网上运行,则最好使用TCP信道,因为它的性能要好于HTTP信道;如果应用程序是在 互联网上运行,则有时候根据防火墙的配置,HTTP是唯一的选择。需要记住的是,如果使用了防火墙软件,则防火墙应该配置成允许TCP数据流量通过你为对 象选择的端口。

2)将服务端上的对象 Type 注册为已知类型。
RemotingConfiguration.RegisterWellKnownServiceType(typeof(RemoteObject),
"RemoteObject", WellKnownObjectMode.SingleCall);
这 行代码设置了服务中的一些参数和把欲使用的对象名字与远程对象进行绑定,第一个参数是绑定的对象,第二个参数是TCP或HTTP信道中远程对象名字的字符 串,第三个参数让容器知道,当有对对象的请求传来时,应该如何处理对象。尽管WellKnownObjectMode.SingleCall对所有的调用 者使用一个对象的实例,但它为每个客户生成这个对象的一个实例。如果用WellKnownObjectMode.SingleCall则每个传入的消息由 同一个对象实例提供服务。

完整的对象代码如下所示:
 using System; using System.Runtime;
 using System.Runtime.Remoting;
 using System.Runtime.Remoting.Channels;
 using System.Runtime.Remoting.Channels.Tcp;
 using RemoteSample;
 namespace RemoteSampleServer
 {
  public class RemoteServer
  {
      public static void Main(String[] args)
      {
         TcpServerChannel channel = new TcpServerChannel(8808);
         ChannelServices.RegisterChannel(channel);
         RemotingConfiguration.RegisterWellKnownServiceType(typeof(RemoteObject),
                                  "RemoteObject", WellKnownObjectMode.SingleCall);
         System.Console.WriteLine("Press Any Key");
         System.Console.ReadLine();
       }
   }
 }
保存文件,命名为RemoteServer.cs
用命令行csc /r:System.Runtime.Remoting.dll /r:RemoteObject.dll RemoteServer.cs 编译这一程序生成的RemoteServer.EXE文件。


第三步:创建Remote客户端程序
创 建服务器对象,并将它命名为RemoteClient。在创建服务器对象时首先创建了一个TCP客户端信道,该信道并不是绑定在一个端口上的;其次获取一 个对远程的RemoteObject对象的引用。 Activator.GetObject方法返回一个对象类型的值,我们随后会将它返回的值赋予RemoteObject。我们传给它的参数与在服务器对 象中传递给RemotingConfiguration的参数非常地相似,第一个参数是对象类型的,第二个参数是远程对象的URI。

 ChannelServices.RegisterChannel(new TcpClientChannel());
 RemoteObject remoteobj = (RemoteObject)Activator.GetObject( typeof(RemoteObject),
                       "tcp://localhost:8808/RemoteObject");

 RemoteClient的全部代码如下所示:

 using System;
 using System.Runtime.Remoting;
 using System.Runtime.Remoting.Channels;
 using System.Runtime.Remoting.Channels.Tcp;
 using RemoteSample;
 namespace RemoteSampleClient
 {
  public class RemoteClient
  {
     public static void Main(string[] args)
     {
        ChannelServices.RegisterChannel(new TcpClientChannel());
        RemoteObject remoteobj = (RemoteObject)Activator.GetObject( typeof(RemoteObject),
                           "tcp://localhost:8808/RemoteObject");
        Console.WriteLine("1 + 2 = " + remoteobj.sum(1,2).ToString());
        Console.ReadLine();//在能够看到结果前不让窗口关闭
     }

   }
 }

保存文件,命名为RemoteClient.cs
用命令行csc /r:System.Runtime.Remoting.dll /r:RemoteObject.dll RemoteClient.cs 编译这一程序生成的RemoteClient.EXE文件。


第四步:测试
在windows中运行Server.exe,然后打开另一个窗体运行Client.exe。
如果一切正常的话,客户端输出: 1 + 2 = 3。



[广告] 金秋最关注楼盘-房不胜房

2008年11月3日星期一

为什么员工要加班

效率 vs 稳定 vs 后期维护 vs 成长

(为什么员工要加班)

----------------------------------------------------------------------------------------------------------------------

如有转载,必需保证本篇文章的完整性,包括本段内容。如果引用,必需注明文章标题、作者和时间。

黄延冬 于 深圳

2008.11.1

----------------------------------------------------------------------------------------------------------------------

目录:

1. 为什么写这篇文章

2. 背景

3. 问题

4. 标准化的漫长之路

5. 这就是我想说的

======================================================================

1.为什么写这篇文章

    为了我自己减少工作,减少加班,特写此文。

 

2. 背景

    经过几年的工作,终于发现,一个公司的成长,终究是经历着千辛万苦的。

    从毕业之后的第一个公司,到之前的一个公司,三家,要么已经死掉了,要么缩小了,要么折腾来折腾去地没钱赚,看上去,各有各的原因,但结果却只有一个:公司的成长总是处于挣扎之中,好像没有成熟的时候,永远是"创业"阶段。

    刚 毕业的时候,在公司里能够写一个软件上能用到的代码就满足了,不管是一个窗口还是一个过程,不需要做任何考虑,写出来只要能正常运行就算是测试通过。后来 换了公司,我志向于VC++的开发,不再使用delphi、vb这样的开发工具了,而VC++的上手,却经历了自我学习的3到4年时间,这个过程太过漫 长,幸运的是,结果还算是用上了VC++,那时很高兴,觉得学习了一些东西,终于迈入了VC++的大门。

    事 实上,真正拿VC开始写较为广泛的程序,是从本公司开始的,以前,只是用VC做数据库开发,因为是公司内部使用的工具,模式都很固定,界面也不需要复杂和 花哨,唯一要做的就是数据库的查询、写入、更新和删除这样的操作,所以,除了数据库的查询之外,对我并没有太大的帮助,每天也只是做着模式一致的几乎重复 的工作。而现在却不一样了,有很多工作要做,有很多程序要写,有很多设备要支持,有很多应用要实现,有很多版本要兼容,有很多的程序架构要考虑。自从腾工 离开之后,我开始思考这些问题,这些不是主动开始思考的,而是被动地开始思考。因为没有人指导,全是凭着经验,碰到了多次相同的问题之后,才开始变"聪明 "的,才开始思考这些问题,我想,这已经够被动了,我们还要继续被动下去吗?

 

3. 问题

    有两个问题:一个是当前的工作,一个是未来的工作。

    实 际上,这两个问题,已经被广泛地讨论过了,只是每个公司并不一定认真地考虑和讨论过这个问题罢了,它们也就是程序的功能和性能问题,而这两个问题又是其它 问题的基础问题,所以它们非常重要,我们需要认真思考和对待。显然,从经验,或者是说从其它任何事情上看,为了我们的目标,我们都不应该只喊口号而不付出 真实的行动,或者只是缓慢地行动,那不是我们想要的,至少它不是我所想要的(真对当前状况而言,我可能只会更关心我所做的工作内容),因为它严重地影响着 一个公司的发展,影响着我的工作,这是一种思想,我想,从公司的发展看,一个企业的负责团队有责任去思考这个问题。

    最早发现的问题是录像的文件名问题。采用扩展名来判别录像文件是由哪种设备产生的,现在看来显然是可笑的,然而,这段代码,在解码库中还是依然存在的,虽然它在当初是发挥了巨大的作用,应该记住它的功劳,但当我们看到它时,也应该记起曾经的狭隘眼光。

    和 录像文件括展名相关的就是解码信息的存储。所有的文件都没有一个统一的正式的文件头,由此造成的后果是,不允许用户修改录像文件名。这对用户而言,显然是 一个过份的要求。所以,我们改了,增加了录像文件头,虽然这个文件头的结构不太好,眼睛睁得不够大,但还是开始行动了,它是一个好的开端,是第一个比较正 式的通用的也考虑了版本兼容问题的具有强制性遵守要求的格式文档。它很重要,堪称是一个里程碑。它预示着我们过去陈旧的思想开始发生转变,并且开始付诸行 动了。我们可以为之高兴一把,但也应该看到,未来的路还很漫长很艰辛很残酷。实践证明了这个漫长、艰辛、残酷它确实存在,而且决不是夸张!

    接 着,就是网络协议的版本问题。此问题体现在设备的升级过程中,在深圳公交中,也很明显地体现出来没有定义好协议所带来的一系列问题。当有新功能提出并在实 际中发现过去的协议有弊端时,旧的协议已完全不能满足新的要求,所以我必需修改握手协议,还有其中的部分通信协议。这虽然在SDK中做到了前后版本的兼 容,但付出的代价却不小,同时,给用户造成的不便,却无法得到修正。在其它的新项目中,也对原来的旧协议进行了稍许修改,因为全部重新定义,将会有大量的 工作出现,这主要包括代码的重写、调试、兼容处理三个方面,它会严重影响项目的进度,所以,即使是原来的协议并不"完美",我们还是得继续使用,不是吗? 现在,我们有两种协议:文本协议和二进制协议。虽然当初我认为应该有两套协议和现在的协议数量是一样的,但我所考虑的协议功能和现有的却是不同的,现在的 文本协议只是对原来深圳公交协议的简单升级,它只是对原协议的弊端进行了补充,并对协议内容做了适当的修改,但我认为,这和我们公司的现实情况并不相符, 我们不仅仅是需要一个更完善的协议,而更需要的是我们的"标准"协议,它应该承载我们未来协议的重担,而不仅仅是一个简单的升级,因为不定义好,我们以后 还要改动,还要痛苦地"升级",而不能简单高效地升级,现在的这种局面,问题已初露端倪,往后的情形,就让我们试目已待吧。

    后 来,我们又定义了帧头打包格式的标准,此标准可以说是一波三折,直到目前,还疑点重重。当初的定义,由于本人太过武断,未进行广泛地调查,就把结构给定义 了下来。结果,结构里面的数据格式却远远不能满足实际的需要,因为各种设备的数据格式不尽相同,为了之间的互相兼容,不得不进行频繁地升级,结果却发现, 升级任何一个小的结构体,都会导致组合种类的数量级飙升,小的结构体越多,其飙升的速度就会成倍地增加,这会为以后的兼容处理带来不应有的困难。在这种情 况下,不得不把这个标准完全推翻,并重新定义,虽然新的定义和老的在大的结构上一致,但其思想的改变,导致以后的升级会轻松很多,而且升级的频率会大大地 降低,然而,这里面还有问题,这问题的成因和过去大家的工作风格是密不可分的,后面会详述。

    以上问题,是我所了解稍许的。其问题的形成,除了有历史遗留原因之外,根本上是我们的思想问题,思想没有得到纠正,依然停留在过去那种走一步是一步的原始状态。

    在 "创业"阶段,这些都不是问题,反而可以提高工作效率,尽快拿出产品,没错,这是起步时的做法。因为我们可以少做考虑,把更多的时间放到产品的推出上,需 要有饭吃,才谈得起发展。在往后的时间里,当有了基本保障之后,这种不进行长远考虑的思想,将会把企业禁锢在一个小小的范围之内,其水平只能停留在一定的 高度,不可能壮大,甚至会把企业扼杀掉!这时候,在开发新产品的时候,会发现,想做到新产品和旧产品完全不扯上关系那是不可能的事情,比如我们的SDK, 不可能为新的产品单独重头写一个SDK,这是显而易见地。问题也随之而来,原有的产品会有缺陷,我们需要修补,如果做旧的产品的时候从来不考虑以后的情 况,那么现在的问题很严重,如果原来做了部分考虑,则现在的问题可能会比不考虑的情况少一点点。如果只是升级一次两次,即使麻烦,也不至于做不下去,但如 果是要一直升级下去,则终有一天会做不下去的。你会发现,过去的高效率,导致了现在的低效率,也导致了稳定性的日趋下降,日子越久,效率和稳定性都会成倍 地降低,由此也导致了后期维护成本的成倍飙升,如果不早做计划,这种情况的发生是不可能避免的。我们现在的情况如何?我认为不容乐观,最起码这上面做得还 远远不够。

    我 们在讨论用户的需求问题,在清楚需求之后,再讨论如何来实现这些功能,再讨论清楚之后,开始付诸行动,一切很顺利。是吗?不!只是现在的情况比早期好了很 多,至少上面的步骤基本上都有进行,那么,我就只说现在的问题。现在的问题,有点像黎明前的黑暗,一切都已准备就序,只等太阳升起把大地照亮。这个太阳, 就是我们的行动,这里面的东西,就是我们的思想,就是我们要做的产品,这里面的问题,就是太阳还未升起,一切都还未有序。我们思想和产品中的问题,需要我 们用行动来解决和消除,这其中首当其冲的就是我们思想的问题解决。我们有两种协议,不说解析不一样,重要的是,里面的常用数据格式不一样,录像文件的常用 数据格式和协议里的不一样,协议里的常用数据格式和设备里的不一样,设备里的常用数据格式和设备的外围设备里的又有版本兼容问题,有了文档约定,大家并没 有去遵守,设备软件本身的前后版本兼容问题。很久以来,研发部做过联调的同事们应该会有一些感触才对,除了功能的调试之外,有很大一部分的时间花在了这些 常用数据的格式上,因为各个地方的格式并不统一,彼此之间为了弄清楚对方的要求,都做了大量的工作,加班到半夜,这个加班,值得吗?这不是造成不稳定的一 个因素?这不是效率降低的一种表现?这不是维护成本提高的一种表现?所以,我们需要标准,我们自己的标准,为的是统一,大家都按照这个标准来,谁不符合这 个标准,就是谁的责任,就谁来加班,不是更好吗?深圳公交为了升级,文档进行了修改,增加了协议,一切都已就序,设备和PC端的代码都已经完成,本是在下 班之前就能完成的,结果联调到半夜12点多才完成,原因是设备的代码和文档不符,结果还要求修改文档,这是一种怎样的思想?我想,做工作说清楚了,大家都 会做,只是时间长短不同罢了,认真去做,都做得出来,但思想就不一样了,如果没有雄霸世界的野心,怎会在外国建立军事基地?如果要让美国撤掉外国的所有军 事基地,美国的总统肯定不干,因为它的思想就是要雄霸世界,你想让他转变这个思想,太难了。同样,我们过去那随便定义数据格式,或者是有了文档约定却不去 遵守的思想要想彻底改掉,去建立大家都"易于"接受的标准,也不是那么容易,但如果没有标准,永远都是处于产品的完善之中,公司不会成熟,不会长大,没有 希望,怎么可能留住人才?

 

4. 标准化的漫长之路

    PC端 为什么要做SDK?是为了方便其他用户使用我们的产品。其他用户不需要关心我们内部的数据是怎么传递的,也不需要知道内部的数据是怎样存放的,他们只需要 关心他们想要的数据,关心这些数据的格式存放。SDK有一个问题,就是版本的升级问题。如果只是功能的增加,也许不成问题,增加接口即可,但如果是复杂的 升级,结果就不一样了。比如原来有的数据是一个整数,没有小数位,但由于设备的升级,有了小数位,这时候,接口的数据格式就要改变,用户在拿到新的SDK 后,需要修改程序以处理带小数点的数据。更复杂的升级会造成SDK的兼容问题和对用户的使用带来更大的麻烦。比如原有的SDK所处理的某一个参数数据都是 3个标识项的,现在有一个新的设备,这个参数却有4个标识项,其中的3个和其它的设备是一样的,那么,SDK如何做到设备之间的兼容?增加一个接口?显示 不好,因为都是设置的同一个参数,如果增加了接口,则用户必需真对设备来调用不同的接口,会造成一定的麻烦。这种情况下,SDK会对原来的接口增加一个参 数,但这个参数有一个缺省值,由SDK内部确定这个参数有没有用,这样用户在拿到新的SDK后,如果还是在原来的设备上使用,则不必理会这个新增加的参 数,只需要重新编译一次工程即可。所以,SDK的功能除了和设备交互之外,很重要的一个功能是对设备的参数进行了加工后传给了上层程序,上层程序不管是对 哪一种设备,它们的处理方式都是一样的,即SDK把N种设备都处理成为第N+1种标准的虚拟设备,对用户而言,都是一样的设备。那么,我们定义标准,除了 升级之外,也是要让所有的设备都做到统一,尽量做到统一,以便减少SDK的处理繁琐程度,以及增加设备之间的互通性,版本升级的兼容性。实际上,设备也同 样应该有一套SDK,这套SDK应该是处理所有外部设备传回的数据,把它们处理成统一的格式,应该具有扩展性,版本兼容性。否则,外围设备发生改变时,设 备所收到的数据格式不一样,将会增加工作量。最明显的例子就是GPS原来的2个小数位变为4个小数位所产生的影响,不仅影响到了设备,也影响到了PC的 SDK,还影响到了上层程序,影响巨大,你会认为这个改动,花费4个人每人半小时的时间就能搞定吗?如果你这么认为,那太天真了。但如果原来是定义好了, 考虑到小数点后10位小数,一开始PC就和设备定义好这样的协议,则这样的变化,PC端就不需要做任何改动,不用花一秒钟的时间,要知道,有那讨论的时 间,还不如早点下班休息一会儿也好。但我们确实没有早点下班,反而是为此花费了大量的时间去更正,去讨论,去修改对外的文档,去重新理解这个GPS,还要 做到和以前版本的兼容而新定义了一个结构,还要记住新旧GPS之间的差别,当有新人问的时候,还要花费时间去讲述这段历史,以便他能够理解为什么会有两个 差不多的结构存在而没有把它们合并成为一个。所以,我们加班,加班来做这些无聊的事情,做这些本来就不应该占用时间的事情。做这些本来就不应该有的工作。 今天,你是否将会做很多无聊的工作?是否做了很多无聊的工作?你是否还要加班?

    虽 然都是程序,但不同的程序是有着很大区别的。这不仅仅是哪种语言的问题,而是一种感性认识的存在,在实际中,这些问题确实存在。如果把我们的SDK限制 住,用户只能使用VC来开发,虽然对大部分客户来说都不是问题,但绝对不是所有的客户都没有问题,成都的客户,就是一个活生生的例子。这只是其中的一个表 面问题,另外还有一个问题,对于没有使用过c、c++、或者是VC的研发人员来说,如果没有进行过底层的开发,我相信,十之八九都不会关心long型变量 占了多少字节,char和TCHAR有什么区别,结构还有字节对齐这样的问题,所以,我们的SDK要做到"通用",让这一类的开发人员也易于理解,而不是 故弄玄虚地再故意弄出几个以位来表示的结构成员,那样只会增加客户的负担,只会增加我们自己的工作量。同样,我们要定义的标准,是为了产品的长远发展,是 为了减少工作量,是为了尽快地推出新产品,是为了研发部各小组之间交流的方便。除了也有维护方便性之外,我们还应该看到,我们定义的数据结构,人工来看是 次要的,而计算机可以方便地读取和处理是首要的,所以,除了某些特殊的情况之外,我们应该按照计算机的意思来定义数据结构,这样,才会使程序的运行效率提 高。基于这些思想,设备就不应该让外围设备的数据格式在设备中到处乱窜,SDK不应该让设备的数据格式在SDK中乱窜,上层的应用程序不应该让SDK的数 据格式在SDK的接口上乱窜,能使用数字表示的,就不要使用字符串来表示。只有每一层都严格地把关,最后到了上层的应用程序,才会做到最大限度地统一,上 层应用程序才不会因为SDK的改动而大修。设备应该做到数据格式的统一,无法统一的,放到SDK上来统一,如果SDK也无法统一的,只能麻烦上层的应用程 序来适应了。同样,设备不应该把难懂的数据发给SDK来解析,SDK应该使用通常语义就能理解的定义来定义数据,这种难以理解的语法和数据,应该在设备内 部处理,为什么要把这种难以理解的语义,从头带到尾,让每个环节的研发人员,都难以理解呢?所以我建议,设备端也需要有一套自己的SDK,专门来处理外围 设备发来的数据,把它们处理成设备使用的标准数据格式,而且这个SDK对所有的设备都通用,完成一个之后,其它设备都直接使用,岂不美哉?

    研 发部写软件的同事们,特别是做PC软件的同事们,如果稍有注意,很容易发现,VC的include目录中的文件里,还有msdn的sample文件里和文 档的示例中,也包括msdn文档,有很多2000年之前的代码或者文章,1998年的有很多,最早的可能到了1995年,请恕我孤陋寡闻和不好的记性,不 知道那里是否有1990年之前的代码和文章,即使现在vc的开发环境已经修改了很多,IDE也大为改观,但1998年的代码还是占到了相当的比例。而听到 我们的同事说,不只一个人说过,我们的代码能用上个8年就非常了不起了。8年,是我听到的最长的时间,最短的有说不超过3年的。这大部分是在我定义标准格 式的文档时听到的。是啊,我们一开始就没有打算过让我们的代码和产品能稳定地用上50年、100年,计划就是短短几年内就要重写,就要大改,就要把旧的产 品踢掉卖全新的产品,有多少人可以做到三年一大改,5年一重写?100个人吗?还是1000个人?而我们现在才几十个人,PC也才不超过10个人,能做到 经常大改和重写吗?买我们产品的客户,注定就是要用上3、4年后再买我们的产品?笑话啊,所以,我常为此担心,也因此而无法使定义的标准畅通无阻地执行下 去,更可笑的是,先写文档做为标准,再写代码,然后再根据写好的代码来修改标准的文档,难道这还不够荒唐吗?如果是刚毕业的学生,或者是经验不多的研发人 员提出这样的问题,我觉得不大奇怪,我也喜欢只用int i, a, b;这样的写法,把a用做超过100行代码的函数中进行时长统计的变量,我也喜欢直 接使用int counter这样的全局变量。但是,这应该只是在"新手"的时候才用,在有了"经验"之后,就不应该再有这样的代码出现,最起码不应该让 这样的代码留在成形的代码中过夜。我们的研发人员如何?我没有检查过别人的代码,我不敢妄下结论,但有"经验"的都仔细地捉摸一下自己在当前水平的基础 上,技术水平是否还有提高的余地。

 

5. 这就是我想说的

    我们现在是有饭吃了,那么,就应该思考一下以后如何才能吃我们想吃的,而不是想着明天可以多赚10块钱而今天要拼命地不加思考地工作,那效率太低了,而且还会越来越低,每天多赚10块钱的计划会越来越受到挑战。

    公 司的高层,应该多考虑一下如何去制定标准,如何让这些标准能够准确无误地推行下去。这已经严重地影响了现在的效率、稳定和维护,这些问题已经迫在眉睫了, 岂能再这样拖延下去?也许一个公司的成长必然要受到这些问题的困扰,但当我们发现的时候,应该及时地去解决,使公司尽快成长起来,而不是面对问题犹豫不 决,无所适从,让员工为这些问题而彻夜地加班。在一个体面的公司里上班,特别是在一个高科技的公司里做着体面的工作,走在大街上应该是骄傲和自豪才对,可 是我走在大街上如此地匆忙,生活的压力是如此之巨,我未感受到科技带来的轻松,反而被这飞速发展的科技压得气吁吁。

    还有,我不想加班。因为加班并不能解决所有的问题,就像有钱并不能解决所有的问题一样简单。

(全文完)


[广告] 金秋最关注楼盘-房不胜房

2008年10月30日星期四

给年轻人的10个忠告

给年轻人的10个忠告
  
  
  1、努力
   工作要努力,随随便便过日子过四五年也是过,稍微努力的过四五年也是过,努力的过四五年也是过,何不努力好好的干。如果努力的过好毕业后的四五年,这对我们以后的人生非常有帮助。
  
  2、虚心学习
   多与比自己大的人(长辈)/成功人士交流学习,要虚心听取/认真分析他们的意见和建议,以免自己以后走弯路。
  
  3、自由
   出来外面做事情,关键是自由,愉快,能学到知识。每走一步都要分析,不要因某一小点利益限制了自己的自由。记住,30岁之前,不要太在意自己的存款和职位,这些对以后来说太微不足道了。
  
  4、目标
   参加一次21天训练营,提高一下自己实现目标的素质和方法。人生一定要有目标,不仅仅是事业(赚钱)的目标,其他方面也要有目标,如爱情方面的目标,健康方面的目标,家庭方面的目标。各个目标都要重视。只赚了钱,不算成功的人生,也迟早会应了"短木桶效应"。
  
  5、计划。
   给自己定一个五年计划,十年规划。每季度做什么事情,每个月做什么事情,甚至每天做什么事情。不要每天浑浑噩噩。说什么计划敢不上变化的,几年后你就会发现,几年来一直没有目标,什么也没有做成。
  
  6、惜时。
   如果以上你都做了,我估计你的时间过得很快。不要因碌碌无为而悔恨!我常听某某人说:"这一辈子,就象昨天今天一样。" 毛泽东说:"天地转,光阴迫。一万年太久,只争朝夕。" "三十八年过去,弹指一挥间。"
  
  7、了解社会
   多了解社会,多实践。多分析某些社会现象的因果厉害关系。认真分析身边发生的某些事情。 正视社会的阴暗面,分析社会上某些不良风气,不要清高自傲,也不要随波逐流。某些时候办事情,是需要这方面帮助的。
  
  8、不要害怕贫穷
   也许你家里没有几十万上百万。大胆的去做事情,不要怕贫穷。即使我们事情做失败了,我们大不了回到起点——还是穷人。
  
  9、吃苦耐劳
   不要怕吃苦。在创业阶段,我们要的是名气,是经验,有时候在保本的情况下可以以低价策略来和别人竞争。我们出卖的是点脑力活,力气活,年轻人,睡一觉起来什么都恢复了。
  
  10、合作
   不要随便与人合作,与人合作要考虑好利与弊。如果有想法尽快去干,一个人努力的干,卖命的干。干到差不多了,有资本了,可以与人短期性的合作。与人合作目标一定要明确!


[广告] 金秋最关注楼盘-房不胜房

2008年10月22日星期三

开源再显空间信息魅力

图1 开源地理空间信息技术家族

今年9月底,地理空间信息开源界的顶级盛会FOSS4G(Free and Open Soure software for Geospatial)在加拿大落下帷幕,该会议由OSGeo(Open Geospatial Foundation)主办,得到了Autodesk、Google、Leica 、ESRI、Safe 等公司的支持。超过120篇讲演和专题演示几乎涉及了所有开源Geospatial的项目,包括著名的GRASS、OSSIM、PostGIS、Worldwind、GDAL/OGR、FDO等均有专家做主题汇报。基于这些项目在地理数据共享、互操作、无线通信、空间分析、嵌入式终端等方向上均有创新,许多想法和创意是非常值得中国本土的GIS厂商学习和借鉴的。

国际地理空间开源基金会(OpenSouce Geospatial Foundation)2006年初在美国芝加哥成立,基金会的项目已从最初的8个,发展为满足B/S架构的前端地理信息渲染平台、各种地理空间中间件、涵盖企业级地理空间计算平台等数10个门类的开源地理空间项目,是开源地理空间信息技术重要的汇聚地。

目前开源世界已经日趋庞大,纳入IT的主流,国外Linux、MySQL和Apache等项目已经拥有很高的市场份额,各大软件公司都有参与和介入,是当前信息产业发展的巨大推动力。在知识经济与经济全球化的时代,资源环境与地理空间信息资源是现代社会的战略性信息基础资源之一,地理空间信息产业已成为现代知识经济的重要组成部分,开源地理空间信息技术的发展加速了地理空间信息技术的自主创新。截止2007年11月中旬,在地理空间信息开源界著名的freegis索引系统中可以寻找到的开源地理空间信息软件项目多达325个,项目繁多,条目繁琐,很多项目都是父子或叔父的关系。

本文将积极吸纳FOSS4G 2007年会中最新开源项目的技术进展,首先横向介绍开源地理空间信息技术家族,进而从地理空间技术架构的角度,纵向按照GIS客户端技术、开源桌面GIS、开源组件GIS、开源服务器端GIS、开源空间数据库等几个层级结合FOSS4G会议中比较有代表性的几个实际的项目进行对比和分类,抽丝剥茧,调理出之中的关系;最后将部分项目与商业软件进行对比,以供广大的技术爱好者和工程师参考。

开源地理空间信息技术家族

图1是本文着重讲解的近20个项目,其中MapServer、GRASS、FDO、GDAL/OGR、OSSIM、Proj4、GEOS、PostGIS、QGIS、MapGuide OpenSource以及MySQL等均使用C或C++语言撰写。基于C语言撰写的开源地理空间信息项目是成熟也是拥有开发项目最多的,这与C语言本身的发展历史以及与Unix渊源是分不开的,因为其语言的强大和优异性能已经吸引了大量活跃的开发社区和开发者个人。

从图1中我们可以大概了解基于C语言撰写的最有代表性的几个大型项目的隶属关系,其中灰色标志着该项目已经成为诸多其他项目的通用基础,比如空间数据格式的支持以及坐标投影转换功能,这点也是与空间信息与通用软件项目的重要区别。

开源桌面GIS

GRASS是最具有传奇色彩的大型GIS系统,最早由美国军方建筑工程研究实验室构建与维护,后来贡献给开源社区。目前GRASS已经覆盖了大多数GIS系统的操作函数,超过300个经典的算法,是开源版的ArcGIS。它是Unix平台的第一个GIS软件,同其他Unix软件一样,吸引了多家联邦机构、大学和公司的参与研发。

1988年,GRASS 3.0软件包的发行达1000余个。GRASS软件曾经三次获得美国联邦政府的有关奖项。目前在全球政府,科研及大学部门广泛使用。最新的6.3.1版本的GRASS增加Sqlit数据库驱动,修改了包括r.flow等40个左右的算法包,修正了若干Bug,对最新的OGC WMS规范也有了良好的支持。

QGIS也是一个用户界面友好的地理信息系统,目前能够很好得支持PostGIS空间数据库,最新0.9版本的QGIS开始增加对WMS的支持,同时改进了矢量数据和属性数据的编辑,增加了属性信息的搜索。

最为重要的是其重构了QGIS的API库,方便用户可以进行二次开发,修改了矢量图层的透明和反锯齿,增强了矢量数据编辑,这包括复制、剪切、黏贴和节点捕捉等。在去年的版本中,QGIS可以很好的支持GRASS的算法接口,成为GRASS一个重要的前端表现工具,为GRASS的发展起到了很好的推动作用。

另外,由于QGIS基于QT跨平台类库开发,因此QGIS目前支持最为广泛的操作系统Linux、Unix、Mac OSX和Windows,这一点是其他很多桌面地理信息系统软件所不可企及的。

今天QGIS全球已经有了1209个注册用户,超过10万行的源代码,被广泛应用到政府、科研、咨询等多个领域。已经成为一个通用的矢量和栅格数据格式的浏览器,可以编辑SHP和PostGIS数据图层,可以作为一个前端工具操纵GRASS后台的模块和数据,可以基于C++和Python进行二次开发。在即将发布的1.0版本中,QGIS将稳定的API接口提供给开发者,进一步增加其稳定性和用户体验,包括在标注、布局、制图,以及大数据量的处理和可用性方面继续增强。

另外一个重要的桌面产品为udig,在2007年改动不大,重点是更新了编辑和新建工具,为用户提供了更加良好的用户体验,用户可以在数分钟内完成数据的处理工作,在其他方面也做了很多细微的改进和提高。

开源GIS客户端

OpenLayers(http://openlayers.org)是一套免费的开源Javascript脚本库,提供给开发人员大量的工具集,最早来自MetaCarta实验室,目前已经为多个开源项目服务。OpenLayers可以非常容易的在任何Web页面中集成动态地图,同时支持地图分块和多类型数据加载,这套开放的脚本库支持BSD协议。

Worldkit(http://worldkit.org)是一套开源的以Flash技术作为外壳的地图客户端,它可以非常方便的集成各种数据格式的地图数据。它不同于全部依赖脚本实现的Openlayers项目,借助Flash跨浏览器支持的能力,可以非常方便的在Flash环境下完成对地图的操作,同时Flash也可以很好的运行在移动设备中。

Camptocamp是苏黎士的一家基于开源技术的解决方案提供商,主要提供技术咨询和培训,通过广泛的调研发现在网络地理信息应用领域中,只有CartoWeb4积极吸纳了包括DOJO、Python等若干开源技术,打造了最新产品的体系架构。

开源组件GIS

MapWinGIS在国内声音一直不多,但是其作为开源组件GIS项目的地位是不可撼动的。1998年犹他州州立大学Daniel博士在撰写其博士论文《基于贝叶斯评价网络的流域管理》论文时发现,当时ESRI公司的商业GIS组件产品MapObjects LT在很多时候不能满足其工作需求,于是他基于微软的COM技术倡导并研发了MapWinGIS组件,期望该项目的研究成果可以成为开源地理空间软件界一个可以替代MapObjects的产品,最终服务于科研人员。

经过7年的发展,MapWinGIS作为一个ActiveX控件可以非常快捷的在VB、.NET等编程语言和开发环境中完成基本地理信息系统功能的显示、查询和操作等基本功能操作。

开源服务器端GIS

MapGuide OpenSource(简称 MapGuide OS)是Autodesk公司在MapGuide6.5产品为蓝本的基础上,参考最新IT技术重新研发的大型网络空间信息平台。Autodesk公司已将包括FDO等技术的MapGuide源代码都贡献给了OSGeo,在充分利用开源技术优势的同时,也促进了该项技术在全球范围内的广泛使用。

其商业版本Autodesk MapGuide Enterprise正是基于MapGuide OpenSource基础上开发的。在充分利用开源社区创新能力的同时,该产品的愿景是成为基础设施市场上智能解决方案的领先平台,可以基于此搭建适合在网络运行的地理空间门户网站或应用系统。

MapGuide OS采用了标准的C++撰写内核,在高效的内核外,项目的开发人员又增加了对PHP、NET和Java三种不同语言的开发包,以适应不同类型程序员的需求。这非常符合当前混源IT架构的状况,MapGuide OS可以在保证增加一个API的基础上,对三套不同的开发类库均适用。

2006年底,Bob Bray被任命为Autodesk地理空间信息总架构师,同时也担任OSGeo推动委员会的主席。Bob Bray多次宣称在今年的MapGuide OS的开发过程中,重点仍然放在产品的性能和质量上,产品的功能将会更多的考虑市场对企业级功能需求,进而将对企业级的支持部分纳入到整个服务器端的地理空间架构中。同时他还多次讲到Enterprise和OpenSource版本的MapGuide将继续共享同一套源代码库。

从刚刚正式发布MapGuide 1.2开始,已经引入了DM公司的Fusion技术,该技术最早是一套服务于网络地理空间信息的SDK,包含了大量的工具和模板,其内核引擎和外部的工具集全部开源,几乎不需要任何的程序开发。

MapGuide具有良好的扩展性,功能接口相对独立,基于HTML、CSS、Javascipt、JSON和XML等工业标准规范搭建。从功能上看,它可以弥补当前MapGuide OS的诸多不足,如灵活性不够,难以进行二次开发和修改页面布局困难等。今年10月15日,基于Fusion技术的Ajax客户端已经更新完毕,在今年年底会增加对OGC规范支持的工具包。

开源空间数据类库

1.FDO

2006年初,Autodesk公司贡献给OSGeo的还有类似于微软ODBC技术的"空间数据版"——FDO(Feature Data Object)技术。基于该技术,前端的地理信息系统平台可以快捷访问大型关系型数据库,基于使用强大的关系型数据库管理系统,不仅可以支持数百人甚至数千人创建、编辑并管理同一份数据,还提供了更灵活的扩展性、更高的安全性,并能创建更完善的数据模型。

2.GDAL/OGR

数据是一切软件的血液,空间信息产业更是如此,海量数据在空间信息软件行业体现的最为明显,没有一套高效率的数据转换模型和类库很难完成异构数据的集成和融合,正是有了GDAL/OGR,构建在之上的各类空间信息软件项目才有了生命力。

GDAL提供了一整套读写不同栅格数据格式的功能的抽象类库,而OGR则是一个读写诸多矢量数据格式功能的抽象类库。

3.GEOS

GEOS是"Geometry Engine, Open Source"的含义,提供了OGC规范中简单几何要素对象操作的C++语言的实现。在地理信息系统领域,拓扑模型是重要的,其计算方法简单但是难得以实现。使得GEOS不同于其他项目的也正是"空间谓词"与"空间操作"。

开源空间数据库

相对于Oracle、DB2、SQL Server昂贵的价格和并不实用的功能而言,PostgreSQL师从名门,开源界性能最优秀的数据库软件当属PostgreSQL数据库,而构建在其上的空间对象扩展模块PostGIS则使得其成为一个真正的大型空间数据库。PostGIS是对象-关系型数据库系统PostgreSQL的一个扩展,PostGIS提供如下空间信息服务功能:空间对象、空间索引、空间操作函数和空间操作符。

同时,PostGIS遵循OGC的规范,是开源版的Oracle Spatial、ArcSDE,目前绝大多数的开源地理信息软件平台都选择PostGIS作为主要的空间数据库存储方案。

除了对空间存储和管理之外,基于PostgreSQL和PostGIS的pgRouting算法包,则侧重于服务于路径分析功能,目前包括经典的Dijstr、A*和Shooting*算法,同时提供了对旅行商问题的解决方案,以及行程距离的计算,针对城市中的单行线、红绿灯等问题都给于了强大的支持。

NASA大气科学数据中心目前存档的各类影像和科研数据总量有大概两个PB。

当前,大气科学数据中心正在使用一个SGI服务器上的Informix Geodetic DataBlade数据库存储这些影像和科研数据的空间元数据,大气科学数据中心同时也提供了基于Web方式的查询功能。为了减少投资和购买,大气科学数据中心采用PostGIS搭建了整个空间元数据查询系统,满足了系统的需求。

除了Autodesk之外,世界著名的公司也参与到开源地理空间技术中,在2008年发布的ArcGIS 9.3中ESRI将增加对PostgreSQL 8.2版本的支持,这是商业地理信息系统软件与开源整合的又一实例。

我们习惯在比较中分析问题,诸多的开源地理技术已经日趋成熟,很多项目也已经完成了原型的搭建,并拥有了一定优势,商业公司也看到了其创新性,并积极参与到开源的研发中。

最后,笔者将开源地理空间软件与商业的SuperMap系列软件进行大致对比中可以发现,目前开源软件在功能上已经可以完成商业软件类似的功能。

相对于安装方便,帮助文档齐全的国内用户而言,开源软件对用户的要求非常高,用户往往需要专家级的GIS基础概念,需要对多操作系统、多数据库、多格式有所掌握,才能真正将开源地理空间软件使用起来。短时间来看,目前国内使用开源地理空间软件的用户主要仍然是大学和科研院所。

对于行业用户而言,也许更关心的是软件产品的可扩展性,良好的一致性以及稳定性等,从这点意义上讲,目前地理空间技术发展迅猛,越来越多的行业和专家加入到研究和学习地理空间技术的行列中来,相信开源地理空间技术会有更大更好的发展。

图2 QGIS的用户构成

图3 udig软件界面

图4 CW4的体系架构

图5 应用Fusion技术后的MapGuide OS

图6 开源与商业数据库的比较




[广告] 金秋最关注楼盘-房不胜房

2008年10月10日星期五

TFileStream: 文件流

TStream 是一个抽象的基类, 不能直接生成对象. 在具体的应用中, 主要使用它的子孙类:
TFileStream: 文件流
TStringStream: 字符串流
TMemoryStream: 内存流
TResourceStream: 资源文件流

THandleStream: 是 TFileStream 的父类、TStream 的子类
TCustomMemoryStream: 是 TMemoryStream 和 TResourceStream 的父类、TStream 的子类

与流相关的常用类还有: TReader、TWriter、TCompressionStream、TDecompressionStream

  getStream := TFileStream.Create(getPath, fmOpenRead or fmShareExclusive);
setStream := TFileStream.Create(setPath, fmCreate);
{建立文件流需要两个参数: 参数 1 是路径, 参数 2 是打开模式}

getStream.Position := 0; {流指针移到开始, 复制时从这里开始}
setStream.CopyFrom(getStream, getStream.Size); {Copy 流}
{CopyFrom 的参数 2 是要复制的内容大小; 如果为 0 , 不管指针在什么位置都会复制所有内容}
{CopyFrom 返回实际拷贝的字节数}


TFileStream 打开模式与共享模式:
分类 参数 说明



fmCreate  建立文件, 如果存在则打开它。
fmOpenRead 只读打开
fmOpenWrite 只写打开
fmOpenReadWrite 读写打开



fmShareCompat 共享模式, 兼容 Dos
fmShareExclusive  不允许别人以任何方式打开
fmShareDenyWrite  允许别人以只写方式打开
fmShareDenyRead 允许别人以只读方式打开
fmShareDenyNone 允许别人以任何方式打开





[广告] 特惠尝必胜客26道新品

2008年10月9日星期四

Delphi中文件拷贝方法集合

一、使用文件流的方法进行拷贝,当然。同样的道理,你也可以使用内存流等方法进行文件的拷贝,原理是一样的。

procedure copyfile(sourcefilename,targetfilename : String);
var f1, f2: tfilestream;
begin
 f1 := tfilestream.Create(sourcefilename, fmopenread);
 try
   f2 := tfilestream.Create(targetfilename, fmopenwrite or fmcreate);
   try
     f2.CopyFrom(f1, f1.Size);
   finally
     f2.Free;
   end;
 finally
   f1.Free;
 end;
end;

二、使用BLOCKREAD和BLOACKWRITE的方法进行文件的拷贝。

Procedure FileCopy(const Fromfile, Tofile: string);
var
 F1, F2: file;
 NumRead, Numwritten: integer;
 Buf: array[1..2048] of char;
begin
 AssignFile(F1, Fromfile);
 reset(F1, 1);
 AssignFile(F2, Tofile);
 Rewrite(F2, 1);
 repeat
   BlockRead(F1, Buf, sizeof(Buf), NumRead);
   BlockWrite(F2, Buf, NumRead, Numwritten);
 until (NumRead = 0) or (Numwritten <> NumRead);
 closefile(F1);
 closefile(F2);
end;

三、使用API文件进行文件的复制
procedure CopyFile(FromFileName, ToFileName: string);
var
 f1, f2: file;
begin
 AssignFile(f1, FromFileName);
 AssignFile(f2, ToFileName);
 reset(f1);
 try
   Rewrite(f2);
   try
     if Lzcopy(TfileRec(f1).handle, TfileRec(f2).handle) < 0
       then
       raise EinoutError.Create('文件复制错误');
   finally
     closefile(f1);
   end;
 finally
   closefile(f2);
 end;
end;

四、Windows API函数 实现文件的拷贝

function CopyFile(lpExistingFileName, lpNewFileName: PChar; bFailIfExists: BOOL): BOOL; stdcall;


参数说明:
lpExistingFileName    :    原文件名称;
lpNewFileName        :  目标文件名称
bFailIfExists              :  如果文件存在,是否覆盖原文件,True表示覆盖;False表示不覆盖。默认为True;

使用示例:
CopyFile(PChar(Edit1.text),PChar(Edit2.text),true);

五、使用API函数实现文件的转移。
API原型:function MoveFile(lpExistingFileName, lpNewFileName: PChar): BOOL; stdcall;

参数:
lpExistingFileName
必选项。要移动的文件的路径。source 参数字符串仅可在路径的最后一个组成部分中用通配符。

lpNewFileName
必选项。指定路径,表示要将文件移动到该目标位置。destination 参数不能包含通配符。

说明
如 果 source 包含通配符或 destination 以路径分隔符 (\) 结束,则假定 destination 指定现有文件夹,将匹配文件移动到该文件夹中。否则,假定 destination 是要创建的目标文件。在任一种情况下,移动单个文件时,可能出现以下三种情况:

如果 destination 不存在,则进行文件移动。这是通常会发生的情况。
如果 destination 是已经存在的文件,则会出现错误。
如果 destination 是目录,则会出现错误。
如果在 source 使用通配符,但没有匹配文件时,也会出现错误。MoveFile 方法在遇到出现的第一个错误时停止。该方法不会撤消错误发生前所作的任何更改。

Delphi中实现文件拷贝的三种方法

1.调用API函数
procedure CopyFile(FromFileName,ToFileName:string);
var
  f1,f2:file;
Begin
  AssignFile(f1,FromFileName); //指定源文件名
  AssignFile(f2,ToFileName); //指定目标文件名
  Reset(f1);
  Try
    Rewrite(f2);
    Try
      If Lzcopy(TfileRec(f1).handle,TfileRec(f2).Handle)<0 Then
         Raise EinoutError.creat('文件复制错误')
    Finally
      CloseFile(f2); //关闭 f2
    End;
  Finally
    Until length(sLine)<=0;
  End;
End;
2.文件流
procedure copyfile;
var f1,f2: tfilestream ;
begin
  f1:=Tfilestream.Create(sourcefilename,fmopenread);
  try
    f2:=Tfilestream.Create(targetfilename,fmopenwrite or fmcreate);
    try
      f2.CopyFrom(f1,f1.size);
    finally
      f2.Free;
    end;
  finally
    f1.Free;
  end;
end;

3.利用内存块读写buffer实现
Procudure FileCopy(const Fromfile,Tofile:string);
Var
  F1,F2:file;
  NumRead,Numwritten:word;
  Buf:array [1..2048] of char;
Begin
  AssignFile(F1,Fromfile);
  Reset(F1,1);
  AssignFile(F2,Tofile);
  Rewrite(F2,1);
  Repeat
    BlockRead(F1,buf,sizeof(buf),NumRead);
    BlockWrite(F2,buf,Numread,NumWritten);
  Until (NumRead=0) or (NumWritten<>NumRead);
  CloseFile(F1);
  CloseFile(F2);
End;




[广告] 特惠尝必胜客26道新品

2008年9月28日星期日

领导的智商

七仙女湖中洗澡,八戒干着急看不到。
唐僧严肃地朝湖面喊:施主,小心鳄鱼啊!
七仙女一丝不挂飞奔上岸。
八戒感叹:领导的智商无法超越啊



[广告] 买房不必东奔西走,上房老大,看"二手房"网上房展会

2008年9月26日星期五

女人

有的女人就像Windows 虽然很优秀,但是安全隐患太大。
有的女人就像UNIX  她条件很好,然而不是谁都能玩的起。
有的女人就像C# 长的很漂亮,但是家务活不行。
有的女人就像C++,她会默默的为你做很多的事情。
有的女人就像JAVA,只需一点付出她就会为你到处服务。
有的女人就像JAVA script,虽然对她处处小心但最终还是没有结果。
有的女人就像汇编 虽然很麻烦,但是有的时候还得求它。
有的女人就像 SQL,她会为你的发展带来莫大的帮助。
爱情就是死循环,一旦执行就陷进去了。
爱上一个人,就是内存泄露,你永远释放不了。
真正爱上一个人的时候,那就是常量限定,永远不会改变。
女朋友就是私有变量,只有我这个类才能调用。
情人就是指针用的时候一定要注意,要不然就带来巨大的灾难
祝各位在编程第一线的程序员们,国庆快乐

2008年9月24日星期三

四十年软件工程故事

2008年5月14~16日,在德国迷人的小镇Garmisch,举办了软件工程四十年纪念会 议,Peter Naur、Brian Randell、M. Douglas McIlroy、Albert Endres、Luigi Dadda等40年前软件工程会议的关键人物重聚旧地。

40年前的1968年,正是在此地举行的NATO(北约)科技委员会会议上,"软件工程"作为正式的术语被确定下来,标志着一个新学科的开始。 Peter Naur和Brian Randell主编的会议报告中这样写道:"我们特意选择'软件工程'这个颇具争议性的词,是为了暗示这样一种意见:软件的生产有必要建立在某些理论基础 和实践指导之上——在工程学的某些成效卓著的分支中,这些理论基础和实践指导早已成为了一种传统。"

软件工程这个学科还很年轻,Peter Naur和Brian Randell今天依然健在。作为著名的编程语言归约BNF范式中的N,Peter Naur因设计和定义了ALGOL 60而在2005年获得图灵奖。因IBM System360的工作于1999年获得图灵奖的Fred Brooks在《人月神话》的结尾比较了化学工程和软件工程。他认为:软件系统可能是人类所创造的最错综复杂的事物,软件工程还很年轻,需要继续探索和尝 试。

这四十年的过程就是探索和尝试的过程,让我们来细细品味其中的科学精神之美。

软件工程是什么

软件工程的定义有很多版本,比较权威的是IEEE给出的定义:(1)将系统化的、规范的、可量化的方法应用于软件的开发、运行和维护,即,将工程应用于软件。(2)在(1)中所述方法的研究。

所以,软件工程远没有想象中那么高大神秘,它研究的就是我们日常开发软件的工作方式。"程序员"这三个字本就属于软件工程的范围。

关于软件工程和计算机科学的区别,Fred Brooks说:A scientist builds in order to learn; an engineer learns in order to build. 更详细的可以看看David Parnas的"Software Engineering Programs Are Not Computer Science Programs"和Steve McConnell所著"Professional Software Development"的第4章。或者对照一下图灵奖获得者:软件工程领域的David Parnas、Frederick P. Brooks和计算机科学领域的Donald E. Knuth、《程序员》上期介绍的YAO。

软件是为人开发的,软件是由人开发的。正是因为人的心理难以捉摸,人的大脑处理复杂性时速度和容量的局限,我们才需要过程来规范人的行为,需要方法 来帮助人脑面对复杂性,需要工具来贯彻这些过程和方法。所以,软件工程的知识体系分为以下几层。我们按照这个金字塔结构,逐层回顾四十年来的历史。

过程

一开始,软件团队是没有过程的,甚至没有团队概念。没有需求规格说明,没有设计,程序员在大脑中直接将代码思考出来,拼凑到一起,交给客户使用。客 户如果有要求,再修改代码,如此反复。这种"编码-修改"做法对于小程序可以应付,当程序规模变得复杂时,付出的代价就很大了。

瀑布

"软件工程"概念的提出,促进了需求、分析、设计、实现、维护等软件生命周期概念的成熟。瀑布模型是最早的软件过程模型,从名字"瀑布"可以看出, 通常人们认为瀑布模型中的各个步骤是一条线完成的。实际上在Winston W. Royce1970年的经典论文"Managing the Development of Large Software Systems"中有反馈的过程(见图3),作者本人也并不提倡以顺序模型作为团队的过程模型,另外,Royce并没有在论文中把他的过程模型叫做"瀑布 ",只是后来其他人这么叫了。很多团队使用时是按照线性的方式使用的,这是一种误解。

这里要提一下,瀑布模型的提出者Winston W. Royce(已于1995年去世)有时被简写为W. Royce,所以经常会引起误会,把他当成Walker Royce,后者是软件项目管理专家,曾任Rational软件公司副总裁,著有《Software Project Management: A Unified Framework》一书。

增量和迭代

使用瀑布模型,可以运行的产品很迟才能看到,这就潜伏了巨大的风险:很可能,集成之日也就是爆炸之日。为了提早获得可以运行的版本,可以先实现一些功能,再实现一些功能……每个增量交付一个可以运行的版本。

增量开发显著降低了风险,而且还因可运行产品的出现大大提升了士气。最有名的实践应该是Microsoft在1989年就开始使用的Daily Build(每日构建),被称为项目的"心跳"。当然,增量开发不一定意味着每日构建,如Fred Brooks所述,Bell Northern Research是"每周构建"。

增量经常和迭代连在一起说,不过两者是有区别的。增量是逐块建造的概念,迭代是反复求精的概念。二者不一定要绑在一起使用,但很明显,结合这两种方 式是一种有效的做法。现在很多过程所说的迭代开发,默认的意思就是增量&迭代。Jeff Patton最近用两幅图表达了增量和迭代(http://www.agileproductdesign.com/blog/dont_know_what_i_want.html)。

统一过程

1987年,Ivar Jacobson离开Eric-sson,成立了Objective Systems公司。他吸纳了增量迭代的思想,开发出Objectory过程,并且把过程当软件卖,价格卖到25000美元一份,以至于Ivar Jacobson不想在Addison-Wesley等出版社出书公开他的方法,因为卖一本书才得到3美元。1991年,Ericsson收购了该公司, 并更名为Objectory AB(北欧出大师,所以我们常在软件开发的书籍和文章中看到××AB等文字,AB是瑞典语Altiebolag的缩写,意思是"公司"),Ivar Jacobson又回到了Ericsson。

1995年,Rational从Ericsson收购了Objectory,Ivar Jacobson开始和Grady Booch、James Rumbaugh一起开发UML。Philippe Kruchten则负责把Objectory过程和Rational公司多年的积累Rational Approach融合在一起,开发出了"Rational Unified Process"以及4+1视图模型。RUP的中心思想是:用例驱动、架构为中心、迭代和增量。虽然是一个商业产品,但详尽的内容和灵活的组织,使得 RUP成为软件团队中流传最广的软件过程模型,也成为团队学习软件工程和实施过程改进的重要资料。

Ivar Jacobson在IBM收购后离开了Rational。2005年,他发布了Essential Unified Process(EssUP)将之描述为"超轻和超敏捷的"RUP,并且提出了过程定义(PD)和过程(P)的观点,他认为统一过程是一个过程定义 (PD),不是过程(P),团队不能看着别人的P好,就想着拿来就用,必须要找到自己的点。

2007年,Ivar Jacobson的新观点是"过程够了,实践吧(Enough of Processes: Let's Do Practices)"。
Doug Rosenberg和Kendall Scott的ICONIX过程借鉴了Ivar Jacobson和统一过程的思想,而且以其小巧易懂,受到不少开发人员的欢迎。

敏捷运动

敏捷运动在20世纪90年代中期兴起,当时敏捷过程被称为"轻量"过程。2001年,Kent Beck、Alistair Cockburn、Ward Cunningham、Martin Fowler、Jim Highsmith、Ron Jeffries、Jon Kern、Robert C. Martin、Steve Mellor、Ken Schwaber等人聚集在犹他州的Snowbird,决定把"敏捷"作为新的过程家族的名称,并提出以下宣言:

随后,敏捷联盟成立,这是一个致力于传播敏捷过程的非营利组织。敏捷联盟每年召开敏捷大会,今年已经是第6年。

关于敏捷过程,比较全面的介绍文章是Martin Fowler的"The New Methodology"。每隔一段时间,Fowler会随着形势的变化更新此文。该文2005年12月版本列出的各种流行敏捷过程包括:极限编程 (XP)、Scrum、Crystal、上下文驱动测试(Context Driven Testing)、精益开发(Lean Development)、统一过程(Unified Process)。

极限编程(XP)是敏捷过程的代表。1996年,Kent Beck为了挽救Chrysler Comprehensive Compensation (C3)项目而创建了XP过程,虽然Chrysler最终取消了该项目,但是Ron Jeffries和Ward Cunningham等人参与到了XP的工作中。1999年,Kent Beck出版了"Extreme Programming Explained: Embrace Change"一书。XP一代相当于程序员的宣言,受到了程序员的热烈欢迎。2004年,该书第2版出版,Kent Beck说自己几乎完全重写了整本书,书中关于程序员是宇宙中心的内容少了很多,更多的是谈程序员和编程工作必须处于业务环境中,他们需要成为正常商业世 界中的一部分。

过程评估和CMM

从1968年开始,Watts S. Humphrey是IBM负责软件部门的副总裁。1986年,Watts S. Humphrey离开IBM后,加入了SEI(卡内基?梅隆大学软件工程研究所),开始开发CMM(Capability Maturity Model,能力成熟度模型)。CMM一开始的目的是为军方制定一个好用的评估承包商的标准,因为SEI本来就是军方资助的机构。

1989年,在《Managing the Soft-ware Process》一书中,Humphrey描述了CMM。CMM可以看作是一个软件过程元模型,定义软件组织达到一定能力成熟度所需的关键过程域(KPA)。
20世纪90年代中期,CMM开始在世界范围内流传开来,成为一些政府采纳的评估软件组织的标准,政府甚至对通过评估的软件组织加以资助。在这种激励下, 想获得政府订单或者政府资助的软件组织纷纷力争通过CMM评估。目前,通过CMM/CMMI评估的组织数量前三位国家是:美国、印度和中国。

方法

在20世纪60年代,程序员随意地编写代码。虽然当时已经出现了FORTRAN等高级语言,但程序员把代码写在一起,代码中使用GOTO语句来跳转,使得程序的内部结构像"意大利面",整个程序又像一块铁板,无法单独抽取其中一部分复用。

功能分解

1968年,Edsger W. Dijkstra发表《Go To Statement Considered Harmful》,认为GOTO语句是有害的,应该把程序划分成多个子单元,每个子单元只做一件事,当重复的语句集合出现时,只需要调用相应子单元(函 数)。这相当于封装和复用了共同的行为。

数据流

当软件的规模不断变大,大到不能一下子映射到代码级别时,就需要更大颗粒的分析设计方法。20世纪70年代,数据流法出现了,有三种流行的流 派:DeMarco方法(1978)、Gane/Sarsen方法(1979)以及Yourdon/Constantine方法(1979)。

数据流法把系统看作数据的加工机,数据流进去,经过加工,变成新的数据流出来。从最顶层开始(因为此时系统看作是一个整体,所以表达的就是功能需求),一层一层向下求精,一直求精到泡泡所代表的加工成为可以编码的动作。

实体/关系

20世纪70年代末,关系数据库开始变得流行。Peter Chen(陈品山)在1976提出实体关系(ER)模型,用实体和关系映射现实中的事物和概念。该模型提供了数据的图形视角,并能轻松转换为关系数据库模 型。分析员很快认识到,ER模型可以用来表达大型软件的数据库设计,更宏观地把握业务,而且还有助于分析员和用户交流。

数据流法结合实体关系法,曾经是比较流行的开发软件的方法。这种做法的一个问题是数据和行为是分离的,行为可以随意读写数据。另一个问题是分析和设计之间表达不一致,使得从设计回溯到分析相当困难。这正是面向对象分析设计所要改进的。

面向对象

Alan Kay说"面向对象"这个词是他在1967年首先使用的(http://www.purl.org/stefan_ram/pub /doc_kay_oop_en),但人们普遍认为,1967年由挪威的Ole-Johan Dahl和Kristen Nygaard设计的Simula-67是第一门面向对象语言,它是作为ALGOL的一个超集出现的。虽然Simula没有后继版本,但这个语言对后来的 许多面向对象语言的设计者产生了很大的影响,80年代初,Alan Kay在Palo Alto研发的Smalltalk语言被广泛使用(Kent Beck就是Smalltalk的拥护者),掀起了一场"面向对象运动",许多面向对象语言随之诞生。Grady Booch在他的最新著作"Object-Oriented Analysis and Design with Applications"第3版中归纳。

面向对象的思想就是:假设系统由"对象"这样一种东西构成,对象封装了结构和行为。这种思考方式和人类的认知相当贴近,更有利于人脑去把握问题的复杂性。分类是人类认知的一种基本技能,分类哲学的讨论可以追溯到柏拉图的《政治家》和亚里士多德的《范畴》。

结构化分析设计和面向对象编程之间不能很好地过渡,到1980年代后期,不同的方法学家开始提出自己的面向对象分析设计方法学。这些方法学主要 有:Booch、Shlaer/Mellor、Wirfs-Brock责任驱动设计、Coad/Yourdon、Rumbaugh OMT、Jacobson OOSE。

UML

这种百花齐放的局面带来了一个问题:各方法学有自己的一套概念、定义、标记符号和术语,但总的来说大同小异。这些细微的差异通常会造成混乱,使开发人员无从选择,也妨碍了面向对象分析设计的推广。
1994年,在Rational工作的Rumbaugh和Booch开始合并OMT和Booch方法。随后,Jacobson带着他的OOSE方法学也加 入了Rational公司,一同参与这项工作。他们三个人被称为"三友"(three amigo)。这项工作造成了很大的冲击,因为在此之前,各种方法学的拥护者觉得没有必要放弃自己已经采用的表示法,而接受统一的表示法。

1996年,三友开始与James Odell、Peter Coad、David Harel等来自其他公司的方法学家合作,吸纳了他们的成果精华。1997年9月,所有建议被合并成一套建议书提交给OMG。1997年11月,UML被 OMG全体成员一致通过,并采纳为标准。UML诞生时,Martin Fowler就作了如下预测:

你应该使用UML吗?一个字:是!旧的面向对象符号正在快速地消逝。它们还会残留在UML稳固前出版的书上面,但新的书、文章等等将会全部以UML 作为符号。如果你正在使用旧的符号,你就应该在1998年间转换到UML。如果你正要开始使用建模符号,你就该直接学习UML。

时间过去10年了,事实正是如此。以UML为契机,掀起了一股普及软件工程的热潮,比起UML出现之前,软件工程的书籍出现了爆炸性的增长。制定 UML标准的角色(OMG)、根据标准开发工具的角色(UML工具厂商)、使用UML工具开发软件的角色(开发人员)这三种角色的剥离,也导致建模工具数 量和种类出现了爆炸性的增长。

现在,UML已经被ISO吸纳为标准,UML1.4.2即ISO/IEC 19501,UML2.1.2即ISO/IEC 19505。

模式运动

1979年,Christopher Alexander开始使用"模式"来描述建筑的构造方法。1987年,Kent Beck和Ward Cunningham尝试把这种思路应用到软件开发中,并在OOPSLA大会上发表了自己的看法。一直到1994年10月,被称为四人帮(GoF)的 Erich Gamma, Richard Helm, Ralph Johnson和John Vlissides所写的《设计模式》上市(此书是1995年的版权,看来国内外出版业差不多,我们可以在2007年12月买到2008年1月第1版的 书),模式的概念才流行起来。此书到2007年为止共重印36次,被翻译成13种其他语言,而且有不计其数的兄弟书籍诞生出来,"言必称模式"成为一种时 髦,可谓影响深远。

现在,除了最常提到的GoF的23种设计模式之外,不断有各种各样的模式提出来,包括分析模式、架构模式、过程模式、组织模式、实现模式、反模式……

工具

很长一段时间内,软件开发工具指的就是代码工具,而且编辑、调试、编译是分离的。后来慢慢出现了IDE(集成开发环境),各大工具厂商更是在IDE市场激战。这方面的故事,大家可以看李维的《Borland传奇》。

在软件工程工具如分析设计、过程管理等工具方面,却是一片空白。一直到1982年,Nastec公司开发出了DesignAid,该工具提供绘制系 统设计图和建立数据字典的功能。到了1990年代,随着方法学繁荣和图形界面的普及,才出现了大量的设计工具,典型的代表是Rational Rose和Popkin System Architect。

最初的设计工具以独立的产品存在,而且只是提供了画图的功能,然后慢慢有了代码正向逆向工程。开发人员在设计工具里建好模型,再通过一个转换器在代 码环境生成代码。设计工具的一个变种是成为代码环境的插件(Rational XDE,Together for VS.net等),直接在代码环境中创建设计模型,和代码高效同步。

接下来的趋势是设计工具和生命周期其他工具集成。2002年10月,Borland收购了当时UML工具厂商中的老二Togethersoft,这 成为了导火索。之后,IBM、Telelogic、Borland等大厂商通过并购和放弃,打造出了新的品类——应用生命周期管理(ALM)工具。微软的 工具Visual Studio Team System也在朝ALM工具方向进化。图12列出了三家ALM厂商一些产品的对比。

现在,Rational和Telelogic都已经被IBM收入旗下,但Sparx Systems、NoMagic、Gentleware等中小厂商纷纷加入到这个市场中,竞争依然激烈。我们来看看代表性厂商Rational的历史,也可以从一个侧面了解工具的发展。

结语

1999年,我创建了UMLChina,从那时开始关注软件工程各方面的进展。到现在为止,我已经上门为超过100个软件开发团队提供需求和设计技 能(根据我们上面的分类,这属于"方法"层面)服务。我发现一个有趣的现象,在开始服务之前的商议过程中,很多开发团队(不是每个团队)或多或少都会有人 (不是每个人)或明或暗地表达出这样的观点:自己团队的难处与众不同,奇特的困难降临在他们身上,偏偏别人得以幸免。

尽管UMLChina一直强调自己的服务是"聚焦最后一公里",坚信每一个开发团队都会在细节上和其他团队有所不同,而且也应该有所不同。但很多时候,我还是感觉到,开发团队还是高估了自己的"个性",低估了"共性"。

最核心的共性问题,仍然是质量——能最大化获取利润的质量。它无非是两条路:增加收入——如何把东西更好地"卖"出去(给客户,给领导……);减少 成本——如何用可复用的要素(组件、过程……)降低制造的成本。这些正是软件工程的不同分支(需求工程、架构设计、过程改进……)要研究的。四十年来的研 究成果,肯定会有一些适合您的团队。这些成果是先行者们从自己或别人的血泪中提炼出来的,我们没有必要再重复挥洒血泪了。

潘加宇,UMLChina首席专家,潜心研究和实践UML/UP相关技术的应用。

本文摘自2008年第9期《程序员》。


[广告] 买房不必东奔西走,上房老大,看"二手房"网上房展会

2008年9月21日星期日

ESRI发布ArcGIS Flex应用程序接口测试版

  赛迪网讯 9月11日消息,8月4日在圣地亚哥举办的ESRI全球用户大会上,ESRI发布了新的ArcGISFlex应用程序接口的测试版。
 
   ArcGIS Flex 应用程序接口与Adobe FlexBuilder3集成,可以在ESRI网站上免费下载。Flex是一项由Flash Player9或者AdobeAIR提供的客户端技术。这就意味着应用程序的开发人员现在可以将使用ArcGISServer开发的基于地理信息系统的网络服务同其它网络内容进行联合,而且显示速度更快、视觉表达更丰富的地图发布应用程序可以在网络或者桌面版上发布。

  ArcGISFlex应用程序接口充分利用了ArcGIS服务中的强大的制图、地理编码和地理处理功能。应用程序的最终用户只要点击程序中的一个按钮,就可以实现如在交互式地图中发布本地数据、搜索和显示GIS数据的要素和属性、定位、识别要素以及执行复杂的空间分析等功能。

  开发人员不必在机器上安装ArcGIS Server,只要通过URL访问到ArcGIS Server就使用ArcGISFlex应用程序接口来编程。因为这个应用程序接口是基于AdobeFlex架构的,开发人员可以将Flex的组件,比如数据网格、目录结构、面板、图表等,整合进自定义的应用程序当中。

  ArcGIS Flex应用程序接口和ArcGISServer的一个早期使用者是马萨诸塞州的波士顿市。他们最近刚刚发布了名为"光能波士顿"的应用程序。这是一个面向公众的网络地图发布程序,用于显示可持续更新的能源设施。该程序允许用户通过屋顶的面积和周围建筑的遮挡情况,来计算屋顶上潜在的光电能量。

  "我们选择ArcGIS Flex应用程序接口是因为它允许我们在向用户传递丰富的可交互体验时,可以更大限度地发挥ArcGISServer的作用。"波士顿经济再发展当局的资深GIS程序开发人员格雷格?奈特解释道,"开发过程快速而且很享受,对于这个程序的功能和性能,我们都非常满意。"这个项目是由该城市的信息系统管理部门——波士顿再发展当局和光能波士顿项目组共同完成的。而"光能波士顿"计划是响应美国能源部的"光能美国"倡议,作为美国光能城市的一部分完成的。



[广告] 文化重镇 惊现别墅

2008年9月16日星期二

中国人在食品中完成了化学扫盲

中国人在食品中完成了化学扫盲......


从大米里我们认识了石蜡
从火腿里我们认识了敌敌畏
从咸鸭蛋里我们认识了苏丹红
从火锅里我们认识了福尔马林
从银耳蜜枣里我们认识了硫磺
......
今天
三鹿又让我们知道了三聚氰胺的化学用途



[广告] 买房不必东奔西走,上房老大,看"二手房"网上房展会

arcgis许可


2008年9月12日星期五

25种让你精力充沛的方法

 今天的文章跟注意力有关,你的注意力能集中多长时间,想不想集中注意力的时间更长一些,看看下面的办法,如果你在日常生活中按照下面的方法去做,每天都会精力充沛。

  1。晨练5分钟

  起床后锻炼5分钟,不仅为身体充电,而且能加倍燃烧卡路里。很多人误认为晨练必须5点钟爬起来跑上几公里,其实是不必要,也不太现实的。你只消花5分钟,做做俯卧撑和跳跃运动,使心率加快,就能达到理想的效果;要么对着镜子冲拳100下,感受那种能量积蓄的过程。

  2。养成喝水习惯

  处于缺水状态的你,会时常感觉衰惫。清早起来先喝一杯水,做一下内清洁,也为五脏六腑加些"润滑剂";每天至少喝进去一升水,不过也不是多多益善。

  3。讲究吃早餐

  美国有研究发现,不吃早餐的人身高体重比(BMI)偏高,也就是体重超标,还爱犯困,做事无精打采;讲究吃早餐的人则精力充沛得多,身形也相对匀称。 最营养健康的西式早餐是:两片全麦面包。一块熏三文鱼和一个西红柿。全麦面包含有丰富的碳水化合物和纤维;西红柿的番茄红素有利于骨骼的生长和保健,并且 对前列腺疾病的预防很有好处;三文鱼中丰富的omega-3脂肪酸和蛋白质对身体更加有益。

  4。十点加餐

  即使早餐吃得不错,到上午十点半,前一天储存的糖原也差不多用没了。你要想在一天剩下的时间仍像刚充完电,这时就必须加加餐。一块巧克力,或者一根能量棒。几块饼干,补充能量以外,还能有效避免午餐暴饮暴食。

  5。午后喝咖啡

  午餐后,身体的睡眠因子(一种能引发睡眠的分子)成分增多,是最容易犯困的时候,此时喝一小杯咖啡效果最好。当然喝茶也行,随你喜欢!别忘了睡前4小时内不要喝咖啡,免得过于兴奋睡不着。

  6。多倾诉多纾解

  性格也能调节疲惫。荷兰的一项研究表明,在工作中内向。害羞的人更容易觉得累,而外向的人精力更足,这是因为爱跟人交谈的人善于发现乐趣,把自己的烦 恼。压力及倒霉事一股脑说出来,就不会觉得累和无聊,相反地,喜欢安静。独处。不爱社交的人缺乏这种纾解压力的渠道,时间长了,必然感觉不堪重负。

  7。坐有坐相

  坐姿不良,走路踢里踏拉,耸肩腆肚,这些通常是你能量已耗干的表现。在办公室一坐就是七八个小时,如果不能保持正确的姿势,反而会觉得更疲劳。不管是站还是坐着,应当收腹立腰,放松双肩,脖子有稍稍伸展的感觉。

  8。张驰结合

  工作中碰到难题,一时半会儿又没法解决,不如稍事休息,如去倒杯茶,换换脑筋,然后接着干。累得快透不过气来时,深吸一口气(数3下),然后呼出来(数6下);或者翻翻体育杂志,上网浏览娱乐八卦,找谁聊几句,说不定灵感在不经意间就来了。

  9。站起来接电话

  站着打电话借机舒展舒展筋骨,一边深呼吸,使富含氧气的血液流进大脑。这个简单的变化能让你几个小时都精两倍旺。

  10。边沐浴边唱歌

  淋浴时大声唱歌促进身体释放内啡呔,从而产生一种快乐与幸福的感觉,减轻压力。你越是心情不好的时候,越要唱出来,至于好不好听,跑没跑调,你管它呢!

  11。交乐观的朋友

  乐观。精力旺的朋友或同事人见人爱,他们积极的情绪总能感染周围的人。不仅要和聪明有才华的人交往,更要和那些充满热情,积极向上的人交朋友;跟一个悲观。喜欢抱怨的人一起呆上30分钟,你的能量就会被间接耗尽

  12。大事化小

  一口气吃不成胖子!不要总想着把某项大工程一气做完,结果自己累得趴下了。不妨把大工程拆成若干个小工程,一样一样地做,时不时休息一下,这样,既保持体力,又能提高工作效率,最终还能加快工作进度。

  13。锻炼背部

  你有没发现"背多分"型的男人往往受到殊遇,不仅如此,强壮的背部能让你工作起来比别人更轻松,不觉得太累。锻炼背部最有效的方法是用划桨器,注意姿势要正确;脚放平,膝盖微曲,双桨恰到好处地停在胸部。

  14。打坐

  早晨睡眼惺松,先不忙爬起来,舒舒服服地坐在床上坐着,挺直后背,闭上双眼,快速地用鼻子呼气和吸气,嘴巴微闭。(这个胸部练习应当像拉风箱一样,快速而机械地进行)

  15。每天运动

  哪怕你再忙,也要坚持锻炼,或跑步或键步走或游泳。你要是对自己体力过于自信,以为年轻就是本钱,不会那么轻易倒下,有人也许会跟你急。

  16。午睡20分钟

  20分钟左右的小憩是最理想的,它其实跟午睡一小时的作用没什么两样。一个小时对大多数人来说有点长了,睡得太沉,晚上可能睡不好。

  17。补铁

  如果你体内铁的储存太低,身体就不能制造血液中运载氧气的血红蛋白,人就容易觉得累。最好的补铁办法是通过饮食,采用食物疗法:含铁质丰富发热有动物肝脏。肾脏;其次是瘦肉。蛋黄。鸡。鱼。虾和豆类。

  18。开车多吃纤维食物

  男人很少吃零食,你可以在车里放些花生和葡萄干,这些东西含有大量的钾,你的身体需要钾将血液中的糖转化为能量;坚果也不错,它富含碳酸镁,缺乏碳酸镁会使身体产生大量乳酸,而乳酸易使人产生疲劳感。

  19。芳香疗法

  放些香料在家里,尤其是迷迭香。薄荷和姜,可以提神醒脑,增强记忆力,并且能治疗头痛偏头痛。

  20。多看喜剧

  笑一笑,十年少。笑能锻炼面部肌肉,改变你的面部循环,从而提高注意力。英国科学家近日公布的研究表明,尽管快乐不像俗语形容的那样能挽留青春,但每天保持愉悦心情的人确实更健康,罹患心血管病。糖尿病的风险更低。

  21。提前1小时上床

  多睡60分钟的提神功效等于喝两杯咖啡。这是指你每天早睡一小时,而不是周末拼命睡懒觉。否则生物钟被打乱,总感觉晕乎乎的。

  22。和阳光玩游戏

  美国马萨诸塞大学的研究表明,愤怒和敌对的情绪在冬天比较多,而夏天比较少。晒太阳能提高大脑血清素的含量,改善心情,为身体充电。不妨争取一切能晒太阳的出差或旅行机会。

  23。控制酒量

  酒精让你产生蒙蒙睡意,但是睡前喝酒反而会因兴奋影响睡眠,虽然闭着眼,眼球却在不停地转。你得牢记睡前两小时不喝酒,晚餐啤酒最多只喝一两杯。

  24。调整健身时间

  一项研究发现,那些健身族下班后去健身,浑身酸酸地,回家洗个澡睡个好觉,起来后犹如获得新生,无独有偶,美国芝加哥大学的学者认为,晚上锻炼能增加XXXXX素的水平,这对能量的新陈代谢至关重要。

  25。睡沙发

  假如你和爱人吵架,你不得不睡沙发,你不用内疚或怎么样。知道吗,偶尔睡睡沙发对治疗失眠有奇效!很多人都说失眠跟自家的卧室有关,美国的一项调查发现,72%的男人在沙发上睡得不错,只有27%的人说在老婆或女友身边睡的还可以。



[广告] KFC骨肉相连优惠券

2008年9月10日星期三

脑子短路那一刻

脑子短路那一刻
●有一次坐公交拿了IC卡排队上车,前面一个人是扔硬币的,我大脑短路跟着把IC卡扔进去了……
●早上要戴隐形眼镜,结果把盖打开直接把眼镜倒马桶里,然后镇定地倒入新的护理液,准备摘眼镜,半天摘不下来。
●邻居忘了带钥匙,从我家阳台翻过去,在屋里找到钥匙后,又翻回来,再打开自家房门。更令人叫绝的是,我自始至终在阳台接应着,未觉有不妥之处。唉,我俩的脑袋肯定被同一个门缝挤过。
●某日发现手机不见了,翻遍包包以及屋中各个角落,未果。遂郁闷地跌坐地上,从口袋掏出手机,给大家群发短信:我手机丢了
●一次大家打麻将停电了,就点根蜡烛继续打,后来有人嫌热,嚷嚷"喂~把电扇打开"
大家忙劝"不行不行,蜡烛会被吹灭。
●预祝中秋快乐,开心每一天!!



买房不必东奔西走,上房老大,看"二手房"网上房展会

2008年9月8日星期一

GIS热点技术

  GIS是一项和众多IT技术相关,而又有着浓厚测绘、制图、地理等各类地学学科背景的技 术。它是科学家手中的显微镜,也是百姓出行的指南针;它是将军运筹帷幄的沙盘,也是出租车司机的导航仪;它上能助神六飞天,下能监测印度洋海啸;它大能纵 观全球,小能观察办公室布局。2005年中,GIS行业的资深公司仍在不断寻找新的技术突破点;怀抱利器的小公司欲挺身而入一展宏图;IT行业的巨人跻身 GIS领域大象起舞。在不断拓展的行业应用背景下,在IT巨头插手的身影中,在这寒冷的岁末年初,GIS技术的发展方向变得越加微妙和难以把握……
平台的对峙

  开发者都希望自己的软件能够运行在尽可能多的计算机上。然而事与愿违,摆在GIS开发者 面前的仍然是对峙的平台。J2EE随着Java5.0的发布,已经正式更名为JavaEE, 而微软也正式发布了.NET2.0以及集成开发环境利器Visual Studio 2005。到底是.NET还是Java? 面对旗鼓相当的Java和.NET阵营,其实GIS平台开发商的答案早已揭晓,那就是都要!由于.NET和Java比较起来并无明显的优劣之分,只是随应 用的需要和习惯的差别而略有不同,因此提供Java和.NET的双份开发接口来满足不同的需求也就不难理解了。可实际中,若要同时支持Java和.NET 谈何容易!要知道GIS的出现是上个世纪60年代的事,在当代众多IT缩写词出现之前,GIS就已经在城市规划、土地管理、军事等行业得到了应用。几十年 的积累,很多代码已经成为了固化的资产。GIS平台开发商经历过二次开发语言的繁荣和凋敝,组件时代的兴起和衰落,而今又要面对平台对峙的挑战。也许我们 应该考虑一些更好的、更彻底的解决办法,能够让我们在这个多变的时代找到相对稳定的支点。事实上,这个问题已经有了比较好的答案,办法其实也很简单,那就 是重回C/C++的荣耀之都,实现GIS内核和外壳分离,以适应不断变化的外部世界。其实这个办法也不是GIS一家的专利,使用C/C++编写程序然后实 现一次编写,到处编译,是很多软件采取的跨平台策略。相比之下,无论是在Java和COM之间架桥还是在Linux和Windows之间修路,总显得有些 不够优雅。不出意外,平台的对峙在未来的几年还会持续下去,在这对峙的平台下开发,也许最能彰显我们开发者智慧。

  全球的数据

  数据是GIS的重要基石,无论何种行业应用,离开了数据都是无源之水,无本之木。空间数 据不同于其他信息系统中的业务数据,能够在系统运行过程中自然产生,它需要专门的人员采集、编辑、更新,空间数据生产本身就是一个不断壮大的行业。遥感技 术的飞速发展,使我们能够获得的GIS数据不断膨胀,单是这些数据的存储管理就是一个很大的问题。GIS需要管理管理的数据是全球范围的,面对如此庞大的 数据,使用数据库是自然的选择。我们很难将地理信息技术和数据库分割开来,从来都没有人对使用数据库有过怀疑,问题的焦点是如何使用。应用是多样的,工 程、摄影测量和其他技术或行业都有其利用空间数据的特定方式,如果我们试图把多样的需求统一到一种空间数据库的解决方案中,这种努力很可能是无益的。也许 我们需要的是一种开放、灵活和可扩展的结构,能够动态适应变化。

  海量影像数据的建库和发布技术在2005年形成了一轮高潮。GIS、遥感等领域的多家厂 商都推出了各具特色的产品。现在我们可以在各种设备、各种环境下轻松浏览高分辨率的遥感影像。影像库的规模也非常庞大,几十G的数据有时候都不好意思和人 家说,建TB级影像库的大有人在。然而各种影像发布技术在Google Earth所表现出的震撼人心的效果面前都显得黯然失色,一家从事搜索的企业做出来的产品一下子让在GIS行业浸淫多年的正规军们觉得很没面子。其 实,GIS企业和Google这样的网络公司有着不同的盈利模式,GIS企业可能都具备显示三维地球的技术实力,但是它们不可能仅仅是为了好看好玩来开发 产品,必须要根据市场的需要,为那些真正买单的人开发产品。如果开发一个全球三维浏览的产品只是用来广告的话,那这笔广告费未免也过于昂贵了。所幸的是有 Google这样的新贵,非常大手笔地做足了遥感和GIS的科普工作,也提升了大家对地理信息系统的三维表现技术的热情。

  大众地理信息服务

  GIS业界人士一直都期望融入IT主流,让GIS走进千家万户,让GIS成为人们日常生 活的一部分,就像我们每天都会收发E-mail,每天都要使用字处理软件那样。大家有这个想法不是偶然的。毕竟我们无论旅游、约会、购物,只要和出行相 关,都免不了求助于地图。手机通话中使用频率最高的语句除了"喂,你好"之外,恐怕就是"你在哪里"了。大众地理信息服务就是希望为人们的日常生活提供位 置信息,解决大家最常问的"在哪里","怎么去"的问题,这方面典型的业务就是以Google,百度,新浪本地搜索为代表的公众地图服务。在GIS开发者 的眼里,也许公众地图服务技术并不复杂,有经验的开发者也许都考虑过这个颇有诱惑力的市场。事实上,公众地图服务除了要做的简单易用功能强大之外,还有数 据的获取和更新途径,以及最重要的问题:如何从公众地图服务中赚钱?赢利模式是GIS企业在公众地图服务的门槛外看了又看,却始终裹足不前的根本原因。无 法清楚地看到利润的增长点,而前期的高投入和大量的公关协调工作使得这项有巨大潜力的业务理所当然地被Google这样有雄厚财力和丰富IT赢利经验的大 公司所占领。

  应当注意的是,大众地理信息服务的范围远非提供一个本地搜索业务,我们日常中的各种软件 都可能和GIS沾点关系。比如可以在即时通信工具如MSN Messenger, QQ中增加地图聊天功能,方便网友会面;再比如在手机等移动设备上提供和位置信息相关的商业广告。这些由于都是和位置信息相关的增值业务,所以它们就有一 个共同的名字——基于位置的服务(LBS)。LBS看上去市场很大,机会很多,但实际运行起来却很不容易。除了需要运营商的大力支持外,赢利模式仍然是最 重要的因素。

  移动的地图

  移动开发由于其庞大的终端数量形成了一个潜在的巨大市场,并已形成了一条比较清晰的产业链。最上端是集成电路、通信器件等手机电子器件生产商,下游是应用软件开发商,而连接应用软件开发和硬件制造商的是操作系统供应商。

  和网络游戏类似,手机上的地图服务业务也主要掌握在运营商手中。如果中移动或联通有意提 供这种业务,那我们对着电话大喊"喂,你在哪里"的这种"定位基本靠吼"的日子就可以一去不复返了。目前,中国移动增值业务有SMS,彩信/彩 E,WAP,Java/BREW和IVR五块。移动运营商提供的服务主要集中在短信、WAP和KJAVA这三块。移动应用市场尽管在全球范围内已达到了几 十亿美金,但商机周围也密布着风险,因此手机上的地图服务能否成为现实还是个未知数。

  GIS移动开发领域还包括很多其他的重要方向。比较典型和成熟的业务是野外数据采集,车 载导航等和定位系统的集成应用。事实上,谈到移动GIS开发,我们就不能不说到无线定位技术。大家所熟知的GPS是一种定位手段,其实还有很多其他的定位 方法。比如利用无线局域网定位,移动通信基站定位,有线电视台网也能提供位置信息。这些定位方法可以弥补GPS在室内环境中无法应用的不足,从而为移动地 理信息服务业务提供了更广阔的空间。

  开源的追求

  和充满金钱气息的商业GIS开发领域相比,开源GIS的世界则显得朴素沉静,是技术爱好 者的乐园。打开Source Forge网站,在下载排行榜Top10上,我们会赫然发现一个GIS门类的软件——World Wind。这个由NASA策划,用C#编写,调用微软SQL Server影像库Terrain Server来进行全球地形三维显示的软件和Google Earth非常相似。由于三维地球仿真具有强大的视觉冲击力,令人百看不厌,爱不释手,所以使得World Wind这个相当专业的软件能够跻身充斥着电驴、电骡等BT下载客户端软件的Source Forge Top10排行榜。

  不同于商业GIS软件,开源GIS软件不用背负数据兼容、易用性等问题的包袱,开发者能 够集中精力于功能的开发,因此开源GIS软件普遍功能很强,技术也非常先进,其背后是来自技术狂热者和学院研究生的大力支持。开源GIS软件目前已经形成 了一个比较齐全的产品线。打开www.freegis.org网站,我们会 发现众多各具特色的GIS软件。老牌的综合GIS软件GRASS,数据转换库OGR,GDAL,地图投影算法库Proj4,Geotrans,也有比较简 单易用的桌面软件Quantum GIS,Java平台上有Map Tools,Map Server则是优秀的开源Web GIS软件。各种空间分析,模型计算尤其是开源GIS领域的强项。动态语言如Python在开源世界中颇受宠爱,开源GIS软件也不例外,很多GIS工具 都提供了Python接口,以便于系统集成。Python优雅的语法和超强的粘合能力实在是一种挡不住的诱惑。

  开源GIS世界虽然繁荣,但其影响还是很小,其身份在外人眼里看来是高深莫测的专业工 具,现有的Linux发行版中也没有哪个集成了开源GIS工具。开源GIS技术虽然先进,但是缺乏良好的能够满足商用的发行版本,因此涉足开源GIS领域 的多是技术爱好者和科学家,而少有商业人士问津。如果能够提供一个比较系统的、达到商用要求的开源GIS解决方案,并能获得稳定的发行版,如同 Linux-Apache-MySQL-PHP那样,开源GIS前途将是不可限量。
  
  开放、集成、标准和互操作

  我们可以把GIS看作是一个和众多高新技术相关的综合性,交叉性的技术群。它涉及面广, 牵扯的东西多,技术发展的趋势也是见仁见智。那么,这纷纭复杂现象背后的密义是什么呢?其实不难发现,GIS的要旨是开放。包括体系结构的开放,数据模型 的开放,以及我们开发者思想观念的开放。只有开放,才能最大限度地提供扩展能力和灵活性,只有开放才能和应用领域充分融合,也只有开放才能让我们有更多的 创新机会。和开放相应的,是GIS在应用中表现出来的重要特点——集成。GIS自从走出实验室,成为一项服务于信息化建设的技术工具,就没离开过各种集 成。GIS可以集成到业务数据中,可以集成到数据表现中,可以集成到办公软件中…… 集成能力是GIS的活力所在,如果失去了和各种业务系统的集成能力,GIS就只能孤芳自赏,失去生命力了。那么,如何保证GIS的开放和集成能力呢?关键 是标准。标准以及它的派生物互操作,是GIS行业中一个非常重要的问题。对于任何地理信息技术或市场,一致和有效的标准的使用,能够创造机会,激发创新, 增加价值,缩短投资周期,并降低风险。不仅如此,标准还是控制市场的制高点,是GIS厂商的必争之地,因此我们就不难理解大家为何如此热衷于制定标准了。

  GIS发展的另一个重要趋势是从软件向服务的转变。尤其是2001年以来网格计算概念的 爆发,在学术界和信息技术领域掀起了一股网格的热潮。针对网格在GIS中的应用,有很多深入的研究和讨论。我们姑且不管伴随网格计算的那一长串难懂的IT 缩写词,先看看网格之父Ian Foster对网格概念的三点说明:协同非集中管理的资源,使用标准的协议,提供高质量的服务。GIS作为一个与生俱来的分布式系统,在标准和互操作方面 一直没有停止过努力。在网格热浪来临的时候,GIS业界人士也许更多地是会心一笑,因为我们心里很明了Foster所说的三个要点,其实一直都是GIS开 发者追求的目标。




买房不必东奔西走,上房老大,看"二手房"网上房展会

2008年9月7日星期日

一位老年人给年青人的30条忠告

1. 不要欺负弱者. 那不道德. 不要无故跟强者做对, 太愚蠢.
2. 不要憎恨女人. 那纯属浪费时间.
3. 投资于自身. 开发出自己最大潜力, 你就会得到你想要的.
4. 去拼搏, 即使知道自己会输.
5. 接受我这个前海军士兵的这句话. 不要去参军, 除非你愿意为了保护某些人的经济或政治利益而甘愿冒着危险引爆炸弹.
6. 如果某件事情, 对某个人或者某类人有着直接的利益关系, 而同时, 对所有人是一种理论上,抽象的, 意义上的利益关系时, 你要明白, 不管这件事的支持者如何狡辩,他们都是为了前者, 而不是后者,
7. 不要做共和党人. 他们都是一些自私自利的家伙, 作为跟随他们的市民,你会看不到他们有任何尊严和爱国心. 如果你一定要当共和党人, 那就不要做"保守派." 保守派只会发牢骚, 抱怨, 诉苦, 头脑简单的自以为正义, 永远认为自己是受害者. 听听收音机上的谈话节目, 你就会知道我说的是什么意思.
8. 不要轻易的接受批评建议, 90%的建议都是从建议人的利益角度出发的, 而不是从接受人角度出发的, 实际上, 这个数字接近97%, 但我不想被人说成一个怀疑论者.
9. 你可能这辈子都要去听人们说你是多么的欠他们的. 其实你基本上你不欠任何人的.
10. 要帮助你的年轻的同伴. 指导那些跟随你的年青人. 你这样做会让上层社会的那些人感觉你可能成为这个社会上最有权势的人, 这通常会让他们惊恐. 他们不认为年青人会和他们情投意合, 他们恐惧你– 既是出于个人角度,也是出于集体角度. 实施法律的首要目的就是压制你.
11. 作为一个年轻人, 你要依靠你自己. 社会上人们勾心斗角. 不比女性们, 受到很多方面照顾(现在有各种妇女研究机构, 部门, 非营利组织, 政治组织), 你呢, 没人会在意你.
12. 年青人有才智, 有干劲, 社会就是依靠这些进步的. 看看硅谷. 基本上, 社会的变革都不是由老人们完成的. 要明白整个社会都在窃取你的成果, 并且有知识产权法律来保护他们的这种行为, 那些名誉和奖励没有一个是实至名归的,也就是说,应得的人没有得到.
13. 记住, 没有几个人会把你的最重要的东西放在心上. 你的母亲会. 你的父亲也会(如果他还在你身边); 你的兄弟姐妹会站在你这边. 其他人都只关心自己的.
14. 在需要的时候–不要担心–冲那些人说"滚开". 这是很重要的技能, 你必须学会. 就像人们说的, 说你要说的, 即使声音在颤抖.
15. 要有好的沟通技巧, 要有自信. 学会肢体语言和一些非口头上的交际能力. 不要专注于你的专业和技术专长, 否则你会发现你的老婆被其他人引诱了.
16. 坚持锻炼.
17. 不要说妻子/女朋友的不好. 不管到哪里你都要支持她, 即使她错了. 她会知道你在支持她. 当她需要你帮助时, 去帮助她. 她会知道你在为她分担困难.
18. 不要对你的的妻子/女朋友不忠. 如果你不得已, 不要让她出丑. 不要做傻事让她或她的朋友们回想起你的越轨. 不要在你住的地方干那种事. 不要和你的社交圈里的人干那种事. 不要在你的后花园里拉屎.
19. 如果你的女友让你感觉不爽, 或者不能让你的生活快乐起来, 甩了她. 不然要女朋友干嘛.
20. 不要为"她和某某太亲密的事件"而烦恼, 这些只是女人们交际的一种手段, 一些人这样做会感觉很好. 她们需要这种关系. 而对你来说却会当做是一堆麻烦事和大量时间上的投资. 如果她们说你和某某太亲密, 那可能是因为她们有越轨的事情了.
21. 成为一个女孩的朋友和知己并不意味着你会和她有更深的发展. 如果你不能在一个较短的时间里得到她, 你也许永远没机会了. 她会不再信任你, 不会再和你谈起有关她和别人的经历.
22. 发展并保持和女人们的友谊.
23. 要明白, 爱是一种游戏. 陷入爱河很容易. 你也许正看上了一个女孩,并且会感觉得不到她你会死掉. 如果她拒绝了你, 去找下一个. 不要你是她的损失.
24. 不要做网虫. 出去享受外面的生活. 不会有什么极品美女在Craigslist上做广告说愿意和你发生一夜情. 漂亮的女人不需要做广告. 那些贴满诱人美女的网站上说她们都很寂寞的广告都是胡扯. 他们想要的全是你的钱和个人信息,这样他们可以向你推销. 那些所谓的由年轻"女孩"贴出的声称寻找一夜情, 要求你提供一张照片的帖子, 其实都是群好色的图片收集者干的. 如果那些帖子用了一些常见的色情词汇例如"hole",就在"fuck my hole",或者寻找"强壮"男人, 或使用词"cock"(特别是在"Don't send a cock shot."中), 那毫无疑问了, 在Craigslist上有一些女人,可以很容易的通过她们2-5段话的帖子认出来. 她们大部分30多岁, 甚至更老.
25. 当你成年后, 你会发现人们会阻拦你前进. 那些关心你的人会给你设置障碍. 同性恋者会企图引诱你;老人们会在你最不顺心时这样或那样干扰你。 不要沮丧. 别理他们, 继续做你要做的. 要知道,所有这一切都是被动消极的方法,目的是要使你意识到他们的存在。
26. 不要歧视同性恋. 不要因为对方是什么人或怎样的表达了自己的观点就在精神上或行动上侮辱他们. 强迫人们接受同一种意识形态的活跟你没什么关系.
27. 如果你是同性恋, 接受这个事实, 让你的父母, 你的朋友和社会圈的人都知道. 为到来的烦恼做准备. 参考第14条. 如果有人威胁你, 或攻击你, 就叫警察. 把他们全抓起来. 你没有义务因为你现在的身份而做出牺牲. 作为一个同性恋, 你在这个社会上会拥有比异性恋人更多的特权. 使用它保护自己. 如果你的性取向让你的生活不堪忍受的麻烦, 准备好逃避吧. 搬到旧金山, 纽约, 亚特兰大, 或者新奥尔良住. 你会发现那里有很多欢迎你的社团.
28. 不要装腔作势. 有些花花公子喜欢在他们的轿车上放一块冲浪板, 但从来没冲过浪, 不要学他们, 也不要骑一辆绿颜色的自行车带着一个邮递包, 像个邮递员但其实不是. 活出自己. 活出真实 的自己.
29. 不要相信大男子主义. 考入或进入的大学的女人比男人要多. 授予学位的女人要比男人多. 女人比男人寿命长. 男人比女人更喜欢自杀. 男人受暴力侵害的数目大约是女人的两倍, 包括谋杀. 如果你计算监狱里的性侵犯, 男人被侵犯的数目两倍以上的多于女性(社会上都以为监狱里的性侵犯的事情很有趣). 街上到处是无家可归的男人, 但很少有无家可归的女人. 统计显示, 女性比男性更感觉到幸福. 女生被教育系统所误导的谣传和实际情况相违背: 学校是妇女们的堡垒, 大部分的学校是由女性开办, 或者由女性来教授. 在学校里, 女孩胜过男孩. 学校里的那些男孩fuck过度, 靠吃激素才能像个男孩. 男人们的实际工资在下降, 同时女人们的实际工资在上涨. 一句话, 不会应为某些人重复说了足够多遍, 就能从假变为真. 你不需要为这些感到任何的惭愧.
30. 记住, 上面的话, 97%是没用的. 采纳你有用的,其它的都删掉.


超大花房赠送,60万轻松入住顺鑫花语

一个小流氓的色情往事(笑过后你会感动吗)

  1983年12月12日,出生于一个普通的工人家庭,1-5岁不知道自己是谁,干了什么,6岁被爸爸妈妈强行扭送厂办小学1年级2班,在"我去上学校,天天不迟到,小鸟送,早早早,你为什么背上小书包"的儿歌中开始了读书生涯。。。。 

  小学一年级: 

  在女同学面前脱裤子,女同学说我小流氓 

  老师语录:"流氓不可怕,就怕流氓没文化!所以你要好好学习,天天向上,争做"有文化,有知识,有学问,有才气"的四有流氓!" 

  小学二年级: 

  拍女同学的头! 

  老师语录:"不打她,不骂她,要用感情折磨她!才是调戏女生的至高境界,你要努力提高自己的调戏品位了" 

  小学三年级: 

  摸女同学的脸,结果被女同学把我的脸抓花! 

  老师语录:"爱情诚可贵,生命价更高,留的青山在,不怕没柴烧!切记,珍惜生命,远离美女!" 

  小学四年级: 

  拉女同学的手,被拒绝,学习成绩直线下降! 

  老师语录:"中华儿女千千万,一个不行接着换,你没有采到的只是春天的一朵花,整个春天还是属于你的,不要灰心,要屡战屡败,屡败屡战!" 

  小学5年级 

  调戏女同学不成,反被调戏! 

  老师语录:"男生不流氓,发育不正常,你还被女生调戏了,表示你比一般男生有前途。 

  小学6年级,以厂小学本年级第38名的成绩被送到县城南街中学(毕业的一共40人)开始了中学生涯。 

  初中1年级,认识了金庸,古龙等前辈高人,并且每天把自己想象成书中的男主角,和书中MM有着纯洁的男女关系。 

  初中2年级,回到现实中来,对班上的美女(已经有了审美能力)行注目礼,但是脑子中原始的,害羞的,罪恶的念头已经发芽。 

  初中3年级,真正体会到了伟人爷爷那句"好好学习,天天想上"的真正含义(八字真言,毁人不卷)。。。。还好我及时收住了心,我英俊的面庞才得以保存。发疯学习,考上县第3高中(本县就3个高中,前2个是重点。。。。。) 

  高中1年级,生平第1次写情书给班上心仪很久的女生,并自我感觉她对我也有那么点意思。。可惜正当我惶恐,甜蜜的如一只小鹿乱跳时,班主任把我叫到办公室,从抽屉里拿出那封情书。。。。。。。 

  高中2年级,选择了女生和男生比例是4:1的文科班,但是美女们都不理我。。。。 

  高中3年级,听隔壁哥哥口沫横飞的给我讲大学生活。于第2天拿起书本,又开始发疯的复习,发誓要考上大学,要"奋发图强,认真学习,为.建设添砖加瓦"(鬼才这样想呢,大学可以自由恋爱,非法同居。。。。。等等云云。。。。 

  不可否认我是个天才,虽然我没被第1和第2志愿录取(第1我填的清华,第2北大,差了3位的分数),但我接到了XX农业大学的录取通知书。于是 背上行李,跳上火车,来到梦想中的大学校园。开始了大学生涯我要做一个成功的男人,因为成功的男人白天瞎JB忙,晚上JB瞎忙;失败的男人白天没啥鸟事, 晚上鸟没啥事。所以,我要做成功的男人。 

  大1站在校美术展览一幅裸体画面前,不停的告戒自己:"这是艺术,我这是在审美。"但是身体某个部位的突出表现还是出卖了我。 

  大2我喜欢的人名花有主,喜欢我的人惨不忍睹。。于是我:"通宵达旦网上泡,一进课堂就睡觉,一个电话打回家,什么不说要钱花"。 

  大3在全寝室就剩我一个和尚的情况下,终于有了一个正式的女朋友,甜蜜的恋爱中,她希望我裸露心灵,而我希望她裸露身体。。。。。。。。。。(男人为性而爱,女人为爱而性,这句话一点没错) 

  大4我奶奶现在还在农村。自打我考上大学以后,每次回去奶奶总对我说:"家里那几块地,还有这个院子,这些鸡啊猪啊的,都是给你留着的"。当时我笑奶奶老糊涂。可是看到今年的就业形势和满大街的研究生,博士生,我才终于体会到了奶奶的高瞻远瞩和良苦用心…… 

  拿着毕业证,简历,从差点没把我挤暴头的招聘中心一无所获的出来,坐上一辆人力3轮回去,3轮车夫问我:"你是XX农业大学今年毕业生?"我说 是"太巧了,我是XX农业大学88届的毕业生,又指着路边一个搽皮鞋的老头:"那个师兄更早,77届的"。我差点没从3轮车上栽下来。 

  回到家,看着下岗的爸爸正在街上修自行车,同样下岗的妈妈在卖水果,爸爸抽着劣制的香烟,双手满是油污,妈妈在风吹日晒下皱纹早已经爬上了她的 脸,头发也白了很多。我23年来第1次认真的,仔细的看着父母,突然有了想哭的冲动。"这些年来,他们就是这样生活,中毒骗人来供我读那个该死的大学的。 而我……。(人们总是伤痕累累才懂的后悔,但这时候游戏规则已经改变,人生就是如此)。我把那4年青春换来红色小本子丢在角落,挽起袖子帮爸爸推车,从现 在起,我开始还债。




超大花房赠送,60万轻松入住顺鑫花语

挺不错的辞职申请[“模板“]

尊敬的公司领导:
    您好!首先感谢您在百忙之中抽出时间阅读我的辞职信。
    我是怀着十分复杂的心情写这封辞职信的。自我进入公司之后,由于您对我的关心、指导和信任,使我获得了很多机遇和挑战。经过这段时间在公司的工作,我在软件开发领域学到了很多知识,积累了一定的经验,对此我深表感激。
    由于我自身能力的不足,近期的工作让我觉得力不从心。为此,我进行了长时间的思考,觉得公司目前的工作安排和我自己之前做的职业规划并不完全一致,而自己对一个新的领域也缺乏学习的兴趣。
    为了不因为我个人能力的原因而影响公司的项目开发进度,经过深思熟虑之后我决定辞去目前在公司和项目组所担任的职务和工作。我知道这个过程会给您带来一定程度上的不便,对此我深表抱歉。
    我已准备好在下周一从公司离职,并且在这段时间里完成工作交接,以减少因我的离职而给公司带来的不便。
    为了尽量减少对现有工作造成的影响,我请求在公司的员工通讯录上保留我的电子信箱和手机号码1个月,在此期间,如果有同事对我以前的开发工作有任何疑问,我将及时做出答复。
    非常感谢您在这段时间里对我的教导和照顾。在公司的这段经历于我而言非常珍贵。将来无论什么时候,我都会为自己曾经是公司的一员而感到荣幸。我确信在公司的这段工作经历将是我整个职业生涯发展中相当重要的一部分。
    祝公司领导和所有同事身体健康、工作顺利!
    再次对我的离职给公司带来的不便表示抱歉,同时我也希望公司能够体恤我的个人实际,对我的申请予以考虑并批准。

    此致

敬礼


超大花房赠送,60万轻松入住顺鑫花语

IT人 不要一辈子靠技术生存

  我现在是自己做,但我此前有多年在从事软件开发工作,当回过头来想一想自己,觉得特别想对那些初学JAVA/DOT。NET技术的朋友说点心里话,希望你们能从我们的体会中,多少受点启发(也许我说的不好,你不赞同但看在我真心的份上别扔砖头啊).

  一。 在中国你千万不要因为学习技术就可以换来稳定的生活和高的薪水待遇,你千万更不要认为哪些从事 市场开发,跑腿的人,没有前途。

  不知道你是不是知道,咱们中国有相当大的一部分软件公司,他们的软件开发团队都小的可怜,甚至只有1-3个人,连一个项目小组都算不上,而这样的团队 却要承担一个软件公司所有的软件开发任务,在软件上线和开发的关键阶段需要团队的成员没日没夜的加班,还需要为测试出的BUG和不能按时提交的软件模块功 能而心怀忐忑,有的时候如果你不幸加入现场开发的团队你则需要背井离乡告别你的女友,进行封闭开发,你平时除了编码之外就是吃饭和睡觉(有钱的公司甚至请 个保姆为你做饭,以让你节省出更多的时间来投入到工作中,让你一直在那种累了就休息,不累就立即工作的状态)

  更可怕的是,会让你接触的人际关系非常单一,除了有限的技术人员之外你几乎见不到做其他行业工作和职位的人,你的朋友圈子小且单一,甚至破坏你原有的爱情(想象一下,你在外地做现场开发2个月以上,却从没跟女友见过一面的话,你的女友是不是会对你呲牙裂嘴)。

  也许你拿到了所谓的白领的工资,但你却从此失去享受生活的自由,如果你想做技术人员尤其是开发人员,我想你很快就会理解,你多么想在一个地方长期待一段时间,认识一些朋友,多一些生活时间的愿望。

  比之于我们的生活和人际关系及工作,那些从事售前和市场开发的朋友,却有比我们多的多的工作之外的时间,甚至他们工作的时间有的时候是和生活的时间是 可以兼顾的,他们可以通过市场开发,认识各个行业的人士,可以认识各种各样的朋友,他们比我们坦率说更有发财和发展的机会,只要他们跟我们一样勤奋。(有 一种勤奋的普通人,如果给他换个地方,他马上会成为一个勤奋且出众的人。)

  二。在学习技术的时候千万不要认为如果做到技术最强,就可以成为100%受尊重的人。

  有一次一个人在面试项目经理的时候说了这么一段话:我只用最听话的人,按照我的要求做只要是听话就要,如果不听话不管他技术再好也不要。随后这个人得到了试用机会,如果没意外的话,他一定会是下一个项目经理的继任者。

  朋友们你知道吗?不管你技术有多强,你也不可能自由的腾出时间象别人那样研究一下LINUX源码,甚至写一个LINUX样的杰作来表现你的才能。你需 要做的就是按照要求写代码,写代码的含义就是都规定好,你按照规定写,你很快就会发现你昨天写的代码,跟今天写的代码有很多类似,等你写过一段时间的代 码,你将领略:复制,拷贝,粘贴那样的技术对你来说是何等重要。(如果你没有做过1年以上的真正意义上的开发不要反驳我)。

  如果你幸运的能够听到市场人员的谈话,或是领导们的谈话,你会隐约觉得他们都在把技术人员当作编码的机器来看,你的价值并没有你想象的那么重要。而在 你所在的团队内部,你可能正在为一个技术问题的讨论再跟同事搞内耗,因为他不服你,你也不服他,你们都认为自己的对,其实你们两个都对,而争论的目的就是 为了在关键场合证明一下自己比对方技术好,比对方强。(在一个项目开发中,没有人愿意长期听别人的,总想换个位置领导别人。)

  三。你更不要认为,如果我技术够好,我就自己创业,自己有创业的资本,因为自己是搞技术的。

  如果你那样认为,真的是大错特错了,你可以做个调查在非技术人群中,没有几个人知道C#与JAVA的,更谈不上来欣赏你的技术是好还是不好。一句话, 技术仅仅是一个工具,善于运用这个工具为别人干活的人,却往往不太擅长用这个工具来为自己创业,因为这是两个概念,训练的技能也是完全不同的。

  创业最开始的时候,你的人际关系,你处理人际关系的能力,你对社会潜规则的认识,还有你明白不明白别人的心,你会不会说让人喜欢的话,还有你对自己所 提供的服务的策划和推销等等,也许有一万,一百万个值得我们重视的问题,但你会发现技术却很少有可能包含在这一万或一百万之内,如果你创业到了一个快成功 的阶段,你会这样告诉自己:我干吗要亲自做技术,我聘一个人不就行了,这时候你才真正会理解技术的作用,和你以前做技术人员的作用。

  [小结]

  基于上面的讨论,我奉劝那些学习技术的朋友,千万不要拿科举考试样的心态去学习技术,对技术的学习几近的痴迷,想掌握所有所有的技术,以让自己成为技术领域的权威和专家,以在必要的时候或是心里不畅快的时候到网上对着菜鸟说自己是前辈。

  技术仅仅是一个工具,是你在人生一个阶段生存的工具,你可以一辈子喜欢他,但最好不要一辈子靠它生存。

  掌握技术的唯一目的就是拿它找工作(如果你不想把技术当作你第二生命的话),就是干活。所以你在学习的时候千万不要去做那些所谓的技术习题或是研究那些帽泡算法,最大数算法了,什么叫干活?

  就是做一个东西让别人用,别人用了,可以提高他们的工作效率,想象吧,你做1万道技术习题有什么用?只会让人觉得酸腐,还是在学习的时候,多培养些自 己务实的态度吧,比如研究一下当地市场目前有哪些软件公司用人,自己离他们的要求到底有多远,自己具体应该怎么做才可以达到他们的要求。等你分析完这些, 你就会发现,找工作成功,技术的贡献率其实并没有你原来想象的那么高。

  不管你是学习技术为了找工作还是创业,你都要对技术本身有个清醒的认识,在中国不会出现BILL GATES,因为,中国目前还不是十分的尊重技术人才,还仅仅的停留在把软件技术人才当作人才机器来用的尴尬境地。(如果你不理解,一种可能是你目前仅仅 从事过技术工作,你的朋友圈子里技术类的朋友占了大多数,一种可能是你还没有工作,但喜欢读比尔。盖茨的传记)。


超大花房赠送,60万轻松入住顺鑫花语

中国人不可不知道的知识(怕以后找不到了~~)

【四大名绣】苏绣〖苏州〗、湘绣〖湖南〗、蜀绣〖四川〗、广绣〖广东〗

【四大名扇】檀香扇〖江苏〗、火画扇〖广东〗、竹丝扇〖四川〗、绫绢扇〖浙江〗

【四大名花】牡丹〖山东菏泽〗、水仙〖福建漳州〗、菊花〖浙江杭州〗、山茶〖云南昆明〗

【十大名茶】西湖龙井〖浙江杭州西湖区〗、碧螺春〖江苏吴县太湖的洞庭山碧螺峰〗、信阳毛尖〖河南信阳车云山〗、君山银针〖湖南岳阳君山〗、六安瓜片〖安 徽六安和金寨两县的齐云山〗、黄山毛峰〖安徽歙县黄山〗、祁门红茶〖安徽祁门县〗、都匀毛尖〖贵州都匀县〗、铁观音〖福建安溪县〗、武夷岩茶〖福建崇安 县〗

【扑克人物】
黑桃J:查尔斯一世的侍从,丹麦人霍克拉  
红桃J:查尔斯七世的宫廷随从拉海亚
梅花J:亚瑟王的著名骑士兰斯洛特
方块J:查尔斯一世的侍从罗兰
黑桃Q:帕拉斯o阿西纳,古希腊神话中智慧与战争女神
红桃Q:朱尔斯,德国人,查尔斯一世的妻子
梅花Q:英国的兰开斯特王族的约克王后
方块Q:是《圣经o旧约》中的约瑟夫的妹妹,莱克尔皇后
黑桃K:戴维,公元前10世纪的以色列国王索洛蒙的父亲,擅长弹奏竖琴
红桃K:查尔斯一世,弗兰克国王沙勒曼
梅花K:马其顿国的亚历山大大帝,最早go-vern-ment世界
方块K:罗马名将和政治家朱亚斯o西泽,罗马统一后成为独裁统治者

【十二生肖】
〖中国〗子鼠、丑牛、寅虎、卯兔、辰龙、巳蛇、午马、未羊、申猴、酉鸡、戌狗、亥猪
〖埃及〗牝牛、山羊、狮子、驴、蟹、蛇犬、猫、鳄、红鹤、猿、鹰
〖法国〗摩羯、宝瓶、双鱼、白羊、金牛、双子、巨蟹、狮子、室女、天秤、天蝎、人马
〖印度〗招杜罗神的鼠、毗羯罗神的牛、宫毗罗神的狮、伐折罗神的兔、迷立罗神的龙、安底罗神的蛇、安弥罗神的马、珊底罗神的羊、因达罗神的猴、波夷罗神的金翅鸟、摩虎罗神的狗、和真达罗神的猪,

【年龄称谓】
襁褓:未满周岁的婴儿
孩提:指2——3岁的儿童
垂髫:指幼年儿童(又叫"总角")
豆蔻:指女子十三岁
及笄:指女子十五岁
加冠:指男子二十岁(又"弱冠")
而立之年:指三十岁
不惑之年:指四十岁
知命之年:指五十岁(又"知天命"、"半百")
花甲之年:指六十岁
古稀之年:指七十岁
耄耋之年:指八、九十岁
期颐之年:一百岁

【古代主要节日】
元日:正月初一,一年开始。
人日:正月初七,主小孩。
上元:正月十五,张灯为戏,又叫"灯节"
社日:春分前后,祭祀祈祷农事。
寒食:清明前两日,禁火三日(吴子胥)
清明:四月初,扫墓、祭祀。
端午:五月初五,吃粽子,划龙(屈原)
七夕:七月初七,妇女乞巧(牛郎织女)
中元:七月十五,祭祀鬼神,又叫"鬼节"
中秋:八月十五,赏月,思乡
重阳:九月初九,登高,插茱萸免灾
冬至:又叫"至日",节气的起点。
腊日:腊月初八,喝"腊八粥"
除夕:一年的最后一天的晚上,初旧迎新

【婚姻周年】第1年§纸婚、第2年§棉婚、第3年§皮革婚、第4年§水果婚、第5年§木婚、第6年§铁婚、第7年§铜婚、第8年§陶婚、第9年§柳婚、第 10年§铝婚、第11年§钢婚、第12年§丝婚、第13年§丝带婚、第14年§象牙婚、第15年§水晶婚、第20年§瓷婚、第25年§银婚、第30年§珍 珠婚、第35年§珊瑚婚、第40年§红宝石婚、第45年§蓝宝石婚、第50年§金婚、第55年§绿宝石婚、第60年§钻石婚、第70年§白金婚

【科举职官】〖乡试〗:录取者称为"举人",第一名称为"解元"、〖会试〗:录取者称为"贡生",第一名称为"会元"、〖殿试〗:录取者称为"进士",第一名称为"状元",第二名为"榜眼",第三名为"探花"

【四书】《论语》、《中庸》、《大学》、《孟子》

【五经】《诗经》、《尚书》、《礼记》、《易经》、《春秋》

【八股文】破题、承题、起讲、入手、起股、中股、后股、束股

【六子全书】《老子》、《庄子》、《列子》、《荀子》、《扬子法言》、《文中子中说》

【汉字六书】象形、指事、形声、会意、转注、假借

【书法九势】落笔、转笔、藏峰、藏头、护尾、疾势、掠笔、涩势、横鳞竖勒

【竹林七贤】嵇康、刘伶、阮籍、山涛、阮咸、向秀、王戎

【饮中八仙】李白、贺知章、李适之、李琎、崔宗之、苏晋、张旭、焦遂

【蜀之八仙】容成公、李耳、董促舒、张道陵、严君平、李八百、范长生、尔朱先生

【扬州八怪】郑板桥、汪士慎、李鱓、黄慎、金农、高翔、李方鹰、罗聘

【北宋四大家】黄庭坚、欧阳修、苏轼、王安石

【唐宋古文八大家】韩愈、柳宗元、欧阳修、苏洵、苏轼、苏辙、王安石、曾巩

【十三经】《易经》、《诗经》、《尚书》、《礼记》、《仪礼》、《公羊传》、《榖梁传》、《左传》、《孝经》、《论语》、《尔雅》、《孟子》

【四大民间传说】《牛郎织女》、《孟姜女》、《梁山伯与祝英台》、《白蛇与许仙》

【四大文化遗产】《明清档案》、《殷墟甲骨》、《居延汉简》、《敦煌经卷》

【元代四大戏剧】关汉卿《窦娥冤》、王实甫《西厢记》、汤显祖《牡丹亭》、洪升《长生殿》

【晚清四大谴责小说】李宝嘉《官场现形记》、吴沃尧《二十年目睹之怪现状》、刘鹗《老残游记》、曾朴《孽海花》

【莎士比亚四大悲剧】《汉姆莱特》、《李尔王》、《麦克白》、《奥赛罗》

【五彩】青、黄、赤、白、黑

【五音】宫、商、角、徵、羽

【七宝】金、银、琉璃、珊瑚、砗磲、珍珠、玛瑙

【九宫】正宫、中吕宫、南吕宫、仙吕宫、黄钟宫、大面调、双调、商调、越调

【七大艺术】绘画、音乐、雕塑、戏剧、文学、建筑、电影

【四大名瓷窑】河北的瓷州窑、浙江的龙泉窑、江西的景德镇窑、福建的德化窑

【四大名旦】梅兰芳、程砚秋、尚小云、荀慧生

【六礼】冠、婚、丧、祭、乡饮酒、相见

【六艺】礼、乐、射、御、书、数

【六义】风、赋、比、兴、雅、颂

【八旗】镶黄、正黄、镶白、正白、镶红、正红、镶蓝、正蓝

【十恶】谋反、谋大逆、谋叛、谋恶逆、不道、大不敬、不孝、不睦、不义、内乱


【九流】儒家、道家、阴阳家、法家、名家、墨家、纵横家、杂家、农家

【三山】安徽黄山、江西庐山、浙江雁荡山

【五岭】越城岭、都庞岭、萌诸岭、骑田岭、大庾岭

【五岳】〖中岳〗河南嵩山、〖东岳〗山东泰山、〖西岳〗陕西华山、〖南岳〗湖南衡山、〖北岳〗山西恒山

【五湖】鄱阳湖〖江西〗、洞庭湖〖湖南〗、太湖〖江苏〗、洪泽湖〖江苏〗、巢湖〖安徽〗

【四海】渤海、黄海、东海、南海

【四大名桥】广济桥、赵州桥、洛阳桥、卢沟桥

【四大名园】颐和园〖北京〗、避暑山庄〖河北承德〗、拙政园〖江苏苏州〗、留园〖江苏苏州〗

【四大名刹】灵岩寺〖山东长清〗、国清寺〖浙江天台〗、玉泉寺〖湖北江陵〗、栖霞寺〖江苏南京〗

【四大名楼】岳阳楼〖湖南岳阳〗、黄鹤楼〖湖北武汉〗、滕王阁〖江西南昌〗、大观楼〖云南昆明〗

【四大名亭】醉翁亭〖安徽滁县〗、陶然亭〖北京先农坛〗、爱晚亭〖湖南长沙〗、湖心亭〖杭州西湖〗

【四大古镇】景德镇〖江西〗、佛山镇〖广东〗、汉口镇〖湖北〗、朱仙镇〖河南〗

【四大碑林】西安碑林〖陕西西安〗、孔庙碑林〖山东曲阜〗、地震碑林〖四川西昌〗、南门碑林〖台湾高雄〗

【四大名塔】嵩岳寺塔〖河南登封嵩岳寺〗、飞虹塔〖山西洪洞广胜寺〗、释迦塔〖山西应县佛宫寺〗、千寻塔〖云南大理崇圣寺〗

【四大石窟】莫高窟〖甘肃敦煌〗、云岗石窟〖山西大同〗、龙门石窟〖河南洛阳〗、麦积山石窟〖甘肃天水〗

【四大书院】白鹿洞书院〖江西庐山〗、岳麓书院〖湖南长沙〗、嵩阳书院〖河南嵩山〗、应天书院〖河南商丘〗

【四大佛教名山】浙江普陀山〖观音菩萨〗、山西五台山〖文殊菩萨〗、四川峨眉山〖普贤菩萨〗、安徽九华山〖地藏王菩萨〗

【四大道教名山】湖北武当山、江西龙虎山、安徽齐云山、四川青城山

【五行】金、木、水、火、土

【八卦】乾〖天〗、坤〖地〗、震〖雷〗、巽〖风〗、坎〖水〗、离〖火〗、艮〖山〗、兑〖沼〗

【三皇】伏羲、女娲、神农

【五帝】太皞、炎帝、黄帝、少皞、颛顼

【三教】儒教、道教、佛教

【三清】元始天尊〖清微天玉清境〗、灵宝天尊〖禹余天上清境〗、道德天尊〖大赤天太清境〗

【四御】昊天金阙无上至尊玉皇大帝、中天紫微北极大帝、勾陈上宫天后皇大帝、承天效法土皇地祗

【八仙】铁拐李、钟离权、张果老、吕洞宾、何仙姑、蓝采和、韩湘子、曹国舅

【十八罗汉】布袋罗汉、长眉罗汉、芭蕉罗汉、沉思罗汉、伏虎罗汉、过江罗汉、欢喜罗汉、降龙罗汉、静坐罗汉、举钵罗汉、开心罗汉、看门罗汉、骑象罗汉、探手罗汉、托塔罗汉、挖耳罗汉、笑狮罗汉、坐鹿罗汉

【十八层地狱】[第一层]泥犁地狱、[第二层]刀山地狱、[第三层]沸沙地狱、[第四层]沸屎地狱、[第五层]黑身地狱、[第六层]火车地狱、[第七层] 镬汤地狱、[第八层]铁床地狱、[第九层]盖山地狱、[第十层]寒冰地狱、[第十一层]剥皮地狱、[第十二层]畜生地狱、[第十三层]刀兵地狱、[第十四 层]铁磨地狱、[第十五层]寒冰地狱、[第十六层]铁册地狱、[第十七层]蛆虫地狱、[第十八层]烊铜地狱

【五脏】心、肝、脾、肺、肾

【六腑】胃、胆、三焦、膀胱、大肠、小肠

【七情】喜、怒、哀、乐、爱、恶、欲

【五常】仁、义、礼、智、信

【五伦】君臣、父子、兄弟、夫妇、朋友

【三姑】尼姑、道姑、卦姑

【六婆】牙婆、媒婆、师婆、虔婆、药婆、稳婆

【九属】玄孙、曾孙、孙、子、身、父、祖父、曾祖父、高祖父

【五谷】稻、黍、稷、麦、豆

【中国八大菜系】四川菜、湖南菜、山东菜、江苏菜、浙江菜、广东菜、福建菜、安徽菜

【五毒】石胆、丹砂、雄黄、矾石、慈石

【配药七方】大方、小方、缓方、急方、奇方、偶方、复方


超大花房赠送,60万轻松入住顺鑫花语

淘宝交易后,评价中的笑话!

精美欧洲进口巧克力
    差评 [详情]巧克力晚了3天才到,而且到的时候都碎了,害我跟男友吵了一架2007.02.12 15:32

    解释:
    打是亲,骂是爱,实在不行下脚踹。


夏天适用时尚提包
    差评 [详情]卖家服务不好,虽然我知道你很忙,但每次也不必和我说话如此简单吧,不是恩,就是好,一个字一个字的说,太不尊重人了,所以给个差评。2007.01.10 18:22

    解释:
    呸


野生榛子
    差评 [详情] 榛子壳很硬,吃完这一斤,我的牙都快掉了,为了增加重量多收邮费,还往箱里塞一块破铁。2006.12.03 01:51

    解释:
    你细看那块铁,中间是否有个螺丝,再往下看,是不中间有条缝,沿着这个缝用力分开---这块破铁就是给你夹榛子壳用的特制钳子!


物品名称:益达口香糖
    差评 [详情] 我要的是口香糖,但结果送来了一块象白乎乎的东西,甜死.无法吃.2006.04.04 16:56

    解释:晕死,那是我送你的白巧克力啊, 口香糖包在下面报纸里面呀,不会扔垃圾桶了吧?快去找找


物品名称:*耳饰*小鸟耳钉
    中评 [详情] 好评点了怎么没反应,试试中评可以不。

    解释:怎么可以这样啊,哎,你的电脑可以升极拉:( 非常非常郁闷


物品名称:水晶球
    差:球球挺好,照片上的底坐为啥不给我?

    解释:冤枉!那是我老公的烟灰缸。


镀白金项链*9元~
    中评 我女朋友的评价是"一般"

    解释:
    你给她买个钻戒看看!


超大花房赠送,60万轻松入住顺鑫花语

警察查房在妓&女身上搜出来一本书,你认为是本什么

 警察查房在妓&女身上搜出来一本书,你认为是本什么
1、资本论 
2、论持久战 
3、论社会主义初级阶段的建设 
4、演员的自我修养 
5、如何构建和谐社会   
6、我把青春献给了党.
7、钢铁是怎样炼成的



超大花房赠送,60万轻松入住顺鑫花语

五句话足以改变一生

第一句话是:优秀是一种习惯。
  这句话是古希腊哲学家亚里士多德说的。如果说优秀是一种习惯,那么懒惰也是一种习惯。人出生的时候,除了脾气会因为天性而有所不同,其他的东西基本都 是后天形成的,是家庭影响和教育的结果。所以,我们的一言一行都是日积月累养成的习惯。我们有的人形成了很好的习惯,有的人形成了很坏的习惯。所以我们从 现在起就要把优秀变成一种习惯,使我们的优秀行为习以为常,变成我们的第二天性。让我们习惯性地去创造性思考,习惯性地去认真做事情,习惯性地对别人友 好,习惯性地欣赏大自然。
  注解:要会"装",要持续的、不间断的"装",装久了就成了真的了,就成了习惯了,比如准时到会,每次都按时到会,你装装看,你装30年看看,装的时间长了就形成了习惯。:)
  第二句话是:生命是一种过程。
  事情的结果尽管重要,但是做事情的过程更加重要,因为结果好了我们会更加快乐,但过程使我们的生命充实。人的生命最后的结果一定是死亡,我们不能因此 说我们的生命没有意义。世界上很少有永恒。大学生谈恋爱,每天都在信誓旦旦地说我会爱你一辈子,这实际上是不真实的。统计数据表明,大学生谈恋爱的100 对里有 90对最后会分手,最后结婚了的还有一半会离婚。你说爱情能永恒吗?所以最真实的说法是:"我今天,此时此刻正在真心地爱着你。"明天也许你会失恋,失恋 后我们会体验到失恋的痛苦。这种体验也是丰富你生命的一个过程。
  注解:生命本身其实是没有任何意义的,只是你自己赋予你的生命一种你希望实现的意义,因此享受生命的过程就是一种意义所在。
  第三句话是:两点之间最短的距离并不一定是直线。
  在人与人的关系以及做事情的过程中,我们很难直截了当就把事情做好。我们有时需要等待,有时需要合作,有时需要技巧。我们做事情会碰到很多困难和障 碍,有时候我们并不一定要硬挺、硬冲,我们可以选择有困难绕过去,有障碍绕过去,也许这样做事情更加顺利。大家想一想,我们和别人说话还得想想哪句话更好 听呢。尤其在中国这个比较复杂的社会中,大家要学会想办法谅解别人,要让人觉得你这个人很成熟,很不错,你才能把事情做成。
  注解:如果你在考数学试题,一定要答两点之间直线段最短,如果你在走路,从A到B,明明可以直接过去,但所有人都不走,你最好别走,因为有陷阱。在中国办事情,直线性思维在很多地方要碰壁,这是中国特色的中国处事智慧。
  第四句话是:只有知道如何停止的人才知道如何加快速度。
  我在滑雪的时候,最大的体会就是停不下来。我刚开始学滑雪时没有请教练,看着别人滑雪,觉得很容易,不就是从山顶滑到山下吗?于是我穿上滑雪板,哧溜 一下就滑下去了,结果我从山顶滑到山下,实际上是滚到山下,摔了很多个跟斗。我发现根本就不知道怎么停止、怎么保持平衡。最后我反复练习怎么在雪地上、斜 坡上停下来。
  注解:用汽车来比喻,宝马可以上200公里,奇瑞却只能上120公里,为什么?发动机估计不相上下,差距在刹车系统,上了200公里刹不了车,呵呵,我的天!
  第五句话是:放弃是一种智慧,缺陷是一种恩惠。
  当你拥有六个苹果的时候,千万不要把它们都吃掉,因为你把六个苹果全都吃掉,你也只吃到了六个苹果,只吃到了一种味道,那就是苹果的味道。如果你把六 个苹果中的五个拿出来给别人吃,尽管表面上你丢了五个苹果,但实际上你却得到了其他五个人的友情和好感。以后你还能得到更多,当别人有了别的水果的时候, 也一定会和你分享,你会从这个人手里得到一个橘子,那个人手里得到一个梨,最后你可能就得到了六种不同的水果,六种不同的味道,六种不同的颜色,六个人的 友谊。人一定要学会用你拥有的东西去换取对你来说更加重要和丰富的东西。所以说,放弃是一种智慧

2008年9月4日星期四

吃一口唐僧肉可以长生不老!是那个妖怪提出来的!

5看西游记,有一个很奇怪的疑问:为什么会有吃了唐僧肉可以长生不老的说法,这谣言是怎么在妖精中间传开的。 唐僧同志也是按正常人的投胎程序来到人间,在生理结构上应该没有什么特殊之处。再参考泾河龙王被杀、他的老婆病死,猪八戒、沙僧也差点丢掉性命,可见神仙也会死,吃了唐僧肉可以长生不老简直就是一派胡言。退一步,就算吃了唐僧肉可以长生不老,妖精们又怎么知道这消息呢?要知道,唐僧的父母并没有做广告说自己生出了肉如何如何好的儿子,况且西天路上的妖精因为利益关系,基本上老死不相往来甚至势不两立的。像第一个传说吃了唐僧可以长生不老的妖精白骨精,一辈子独来独往,看不出有什么朋友。妖精甲知道吃了唐僧肉可以长生不老,又不想合伙把唐僧吃掉,总不会跑去告诉和自己素无往来的妖精乙吧。要知道,从长安到西天有十万八千里,是长征路的好几倍,凭着妖精们这么窄的社交圈子,无论怎样,都不可能把吃了唐僧肉可以长生不老的消息传遍西天路上的妖精。 这样,可以推断出,是有人故意传播吃了唐僧肉可以长生不老的谣言。而且这个人一定很了解取经的路线,甚至对妖精的活动都很了解才行。否则,你根本上不知道妖精住在哪里,怎么把消息传给他呢? 那么,到底是谁在制造谣言,传播谣言呢? 分析对取经时间、路线最清楚的人,除了发起人如来,唐僧师徒,就是观音,还有陪同唐僧取经的六丁六甲、五方揭谛、四值功曹、一十八位护教伽蓝了。 如来、唐僧师徒制造这谣言的可能性几乎为零,做人,怎么能跟自己过不去呢? 另外一个制造谣言的人可能是观音,作为考核干部的具体的内部共作人员,观音始终关注取经的一举一动。对唐僧的考核,可谓观音的样板工程,政绩工程。让这事情做的热闹一些,产生轰动效应,观音面上也有光,所以表面上看,她可以有这样的动机。 但仔细一想,观音制造谣言的可能性极小。虽然说唐僧是内定的干部,考核只是走过场戏,但也不是那么容易通过的。就像现在一些明明是领导看中的干部,却偏偏想经过民主选举,一民主,结果就被差额掉了。同样在考核唐僧过程中发生的事情,也让观音捏了多少把汗。和猴哥结下梁子的太上老君就派秘书金角童子和银角童子、司机青牛精来和猴哥过不去。就算在西天内部,因为看不惯如来随便提拔自己的亲信,弥勒佛也派出秘书黄眉童子弄出一座小雷音寺来,让唐僧出出丑。一般来说,天上下来的妖精好说,第一他们毕竟是见过世面的,不会相信吃了唐僧肉真的会长生不老。第二就算他们敢不要公务员这铁饭碗,也知道人民政府的专政工具不是开玩笑的。他们的领导尽管和如来面和心不和,却没有彻底闹翻的意思。所以尽管他们对如来提拔唐僧横挑鼻子竖挑眼,百般刁难,却光棍劈竹不伤笋,做事很有分寸。正因为如此,这些妖精们可以让唐僧出出丑,却绝对不会一口把唐僧吃掉,否则麻烦也大了,吃了如来的人,如来会放过他吗?尽管如此,观音也不太放心。针对天上神仙的一些新式武器,观音特意给了猴哥三根保命毫毛。观音如此小心翼翼,也有发生意外的时候,莽撞猴哥就一不小心打死了玉皇大帝这一派系的人碧波潭龙王。幸亏玉皇大帝知道自己斗不过如来,而且万碧潭龙王只是一个基层公务员,大不了给他一个因公殉职,追认为烈士拉倒,不至于造成很大的麻烦。 可见表面上看起来这是十拿九稳的事情,实际暗 箱作起来中间不可控的因素太多,一不小心就搞得收不了场。 组织上的考察还好说一点,民间的妖精就更难弄了。他们又不在如来、玉帝那里拿工资,没有什么组织纪律,初生之犊不怕虎,人间的妖精,哪里知道天堂的种种规矩?抓到唐僧,一口就把他生吃了,到时你再跟他们说八荣八耻吧?不过还好,这些民间的妖精一般武功不是特别高,结果还没有来得及吃唐僧就被制服甚至打死了。 还有一种是踢开党委闹革命的妖精,这些妖精是王八吃了秤砣,铁了心造反的。放倒如来,夺过他的雷音宝刹这样的豪言壮语都敢说,吃一个唐僧,当然不在话下。不过天见可怜,这样的妖精并不多。整个西天路上,只有狮驼洞有几个这样的妖精,被如来制服了。如果唐僧真的让妖精吃掉,叫观音怎样有脸见如来啊? 那些想和唐僧结婚的女妖精,估计也让观音够头痛的了。这些妖精们虽然开放,但无论怎样说毕竟是女同志,不会对唐僧八王硬上弓。不过,如果唐僧自己把持不住,总不能怪别人吧。虽然现在男女关系不算什么新闻,但如果在如来考察亲信的过程中发生这样的事情,也让观音颜面扫地的了。 现在,上托老天爷的鸿福,下靠几个哥们的努力,总算没闹出什么乱子来。但是,观音原来以为三四年取经就可以完成的,结果花了十四年,难度远远超出她的想象。如果她还要制造出谣言来,让多几个妖精在西天的路上闹一闹,我是怎样说也不相信的。 六丁六甲等几位无疑是吃了大亏的,跟着唐僧去取经,暗中保护唐僧吃尽了苦头,却不能出半点凤头。最后不但没有得到半点封赏,甚至也没有得到顾全大局,甘为人梯这样的官样评价。就算陪太子读书,陪成这样子也算背的了。说他们心中没气那是假的,不过如果说他们希望唐僧被妖精吃掉,那就冤枉了。组织上信得过,如来看得起的干部唐僧同志在考察的过程中如果有三长两短,六丁六甲等天庭的小萝卜头第一个就被抓出来做替罪羊。所以,如果说他们传播谣言是不可信的。 那么,除了上面这些仁兄,还有谁有条件散布吃了唐僧肉可以长生不老的谣言呢? 可以看谁经常出现在西天的路上,那就是太白金星了。 去取经,和太白金星应该没什么关系。自始至终,观音都没有委托他对唐僧同志进行考核,不过他老兄却十处敲锣九处在,经常在不应该出现的地方见到他。第一次,从一些山精野怪中把唐僧救下来。第二次是告诉猴哥制服黄凤怪的方法。在他这次出场后,就从白骨精口中传出了吃唐僧肉可以长生不老的谣言。第三次在车迟国,托梦给一些受苦的和尚,说猴哥会解救他们。第四次他在狮驼洞前,给猴哥他们报信。第五次猴哥告托塔李天王的时候,他出来做和事佬。第六次猴哥和三个犀牛精交手的时候,他推荐四木禽星来收拾犀牛精。 不过太白金星的上镜率虽然高,好像却没有给猴哥他们帮很大的忙。尤其是该出手的时候不出手,唐僧最可能被妖精吃掉的时候,如落在红孩儿、南山大王手中的时候,反而不见他的影子。比如他虽然从山精树怪重把唐僧救下来,但是不要忘记,唐僧是有六丁六甲、五方揭谛、四值功曹、一十八位护教伽蓝保护的,就算不救,这些武功平平的家伙夜奈何不了唐僧。推荐人来制服黄凤怪,告诉猴哥狮驼洞有妖精倒算是真的帮忙。不过别忘记黄凤怪和西天有关系,狮驼洞的三位妖精以前也在灵山工作过。虽然前者其实还没有找到组织,后者已经决心出去自己捞自己煲了。但如果让不明真相的外人来看,还以为他们都世灵山派下来考核唐僧的干部。托梦给车迟国的和尚,在猴哥和托塔利天王的纠纷中充当和事老,怎么说都像在送免费人情。推荐四木禽星来收拾犀牛精是事实,但是犀牛精过去只是偷油,并不吃人的。唐僧过来,他们才扬言要吃人。而且,猴哥上天找救兵的时候,就碰到他刚好从外面回来,和传达室的几个天师在那里聊天。并且,他对三个犀牛精的底细知道得这么清楚。所以,传播吃了唐僧肉可以长生不老的谣言,太白金星是有很大的嫌疑的。他推荐推荐四木禽,也许就是为了清洗嫌疑。 那么,太白金星有这样做的动机吗?当然有!太白金星曾经招安猴哥,但后来猴哥闹出大乱子来,他虽然没有被处罚,估计是很丢面子。他也曾经给猪八戒说情,使猪八戒免于一死。不过遗憾的是,他这是人情都白做了,猴哥、猪哥都被如来挖走,他能不怀恨在心吗?更重要的是,地上有很多妖精根本上不服从天庭的统治,可是天庭也奈他们不何。现在可以借助吃唐僧肉能够长生不老的谣言,引蛇出洞,让孙悟空这个免费打手把这些危险分子灭掉。在天庭担任高官的太白金星,是不会放过这个机会的。当然,现在是法制社会,我们可以大胆假设,小心求证,却不能随便说谁是犯罪嫌疑人。    



KFC骨肉相连优惠券