Conjure Studio 的个人资料召唤工作室(Conjure Studio)(严超...照片日志列表更多 ![]() | 帮助 |
|
|
2006/12/14 什么是ERP?(举个实例)
什么叫ERP 2006/10/12 什么是AIC/AIB?什么是AIC/AIB? 他们的由来 “昂达的这款显示卡怎么和铭暄的显示卡这么像?”如果你是一位DIY玩家的话,那么时常能够在朋友中听到这样的言论。其实,对于普通玩家来说,了解一款产品的背景比这款产品本身更为重要。首先,优秀的生产能力以及高标准的良品率是一款产品在市场上获得较好口碑的关键,其次再是价格的因素作为辅助效应,两者相辅相成才能让一款产品在零售市场上真正立足。 众所周知,目前市场上的两大芯片巨头非nVIDIA和ATi莫属了,虽然也有一些专业级厂商和非主流厂商的产品,不过他们并不是针对DIY领域的。纵观整个显示卡业的发展,闭门造车的运作方式已经被市场所否定,著名的Voodoo就是最为经典的范例,而芯片授权开放政策不仅让nVIDIA依靠TNT系列芯片彻底的打败了Voodoo,并逐步走上了显示卡业界第一把交椅的位置,通过制造更多的图形芯片,并将他们分给自己的合作伙伴,以众人之力共同挖掘市场的份额,让名不见经传的nVIDIA一夜之间成为了DIY心中的女神。nVIDIA并根据市场的变化,不断的调整合作伙伴的阵容,直至最后发展成为AIC(Add-in-Cards亲密合作伙伴),nVIDIA的官方AIC列表中还包括了主板合作伙伴的厂商。 而在ATi这边,原先的独家研发制造显示卡的历史也一去不复返,01年的十月,当ATi重整旗鼓发布8500和7500系列的时候,首度效仿nVIDIA的芯片授权开放政策,允许显示卡厂商以及通路商获得授权以后生产或销售基于ATi显示芯片的显示卡,和nVIDIA一样,这些厂商作为帮助ATi打天下的团队,被命名为AIB(Add-in-Board认证合作伙伴)。AIB 合作商专门生产运用 Graphics by ATi(ATi 图形技术)的显示卡。 这些合作伙伴制造的图形卡皆具有独特的附加功能,符合全球各地游戏玩家的特别需求。 这些图形卡采用 ATi 图形技术,但均具有增强的设计,附加额外的板上功能,专门满足所有游戏体验所需。 不过,无论是nVIDIA还是ATi来说,对于AIC/AIB并非都是一视同仁的,从核心AIC至AIC到通路商,主要表现在对于AIC往往能够比传统的通路厂商享受到更多的支持,如市场基金、活动方案、显示芯片与显存的捆绑优惠等等,当然核心的AIC得到的支持则更多,这就直接影响到品牌推广以及消费者的购买取向。 2006/9/24 什么是IOCP?转载:
理解I/O Completion Port 欢迎阅读此篇IOCP教程。我将先给出IOCP的定义然后给出它的实现方法,最后剖析一个Echo程序来为您拨开IOCP的谜云,除去你心中对IOCP的烦恼。OK,但我不能保证你明白IOCP的一切,但我会尽我最大的努力。以下是我会在这篇文章中提到的相关技术: I/O端口 同步/异步 堵塞/非堵塞 服务端/客户端 多线程程序设计 Winsock API 2.0 在这之前,我曾经开发过一个项目,其中一块需要网络支持,当时还考虑到了代码的可移植性,只要使用select,connect,accept,listen,send还有recv,再加上几个#ifdef的封装以用来处理Winsock和BSD套接字[socket]中间的不兼容性,一个网络子系统只用了几个小时很少的代码就写出来了,至今还让我很回味。那以后很长时间也就没再碰了。 前些日子,我们策划做一个网络游戏,我主动承担下网络这一块,想想这还不是小case,心里偷着乐啊。网络游戏好啊,网络游戏为成百上千的玩家提供了乐趣和令人着秘的游戏体验,他们在线上互相战斗或是加入队伍去战胜共同的敌人。我信心满满的准备开写我的网络,于是乎,发现过去的阻塞同步模式模式根本不能拿到一个巨量多玩家[MMP]的架构中去,直接被否定掉了。于是乎,就有了IOCP,如果能过很轻易而举的搞掂IOCP,也就不会有这篇教程了。下面请诸位跟随我进入正题。 什么是IOCP? 先让我们看看对IOCP的评价 I/O完成端口可能是Win32提供的最复杂的内核对象。 [Advanced Windows 3rd] Jeffrey Richter 这是[IOCP]实现高容量网络服务器的最佳方法。 [Windows Sockets2.0:Write Scalable Winsock Apps Using Completion Ports] Microsoft Corporation 完成端口模型提供了最好的伸缩性。这个模型非常适用来处理数百乃至上千个套接字。 [Windows网络编程2nd] Anthony Jones & Jim Ohlund I/O completion ports特别显得重要,因为它们是唯一适用于高负载服务器[必须同时维护许多连接线路]的一个技术。Completion ports利用一些线程,帮助平衡由I/O请求所引起的负载。这样的架构特别适合用在SMP系统中产生的”scalable”服务器。 [Win32多线程程序设计] Jim Beveridge & Robert Wiener 看来我们完全有理由相信IOCP是大型网络架构的首选。那IOCP到底是什么呢? 微软在Winsock2中引入了IOCP这一概念 。IOCP全称I/O Completion Port,中文译为I/O完成端口。IOCP是一个异步I/O的API,它可以高效地将I/O事件通知给应用程序。与使用select()或是其它异步方法不同的是,一个套接字[socket]与一个完成端口关联了起来,然后就可继续进行正常的Winsock操作了。然而,当一个事件发生的时候,此完成端口就将被操作系统加入一个队列中。然后应用程序可以对核心层进行查询以得到此完成端口。 这里我要对上面的一些概念略作补充,在解释[完成]两字之前,我想先简单的提一下同步和异步这两个概念,逻辑上来讲做完一件事后再去做另一件事就是同步,而同时一起做两件或两件以上事的话就是异步了。你也可以拿单线程和多线程来作比喻。但是我们一定要将同步和堵塞,异步和非堵塞区分开来,所谓的堵塞函数诸如accept(…),当调用此函数后,此时线程将挂起,直到操作系统来通知它,”HEY兄弟,有人连进来了”,那个挂起的线程将继续进行工作,也就符合”生产者-消费者”模型。堵塞和同步看上去有两分相似,但却是完全不同的概念。大家都知道I/O设备是个相对慢速的设备,不论打印机,调制解调器,甚至硬盘,与CPU相比都是奇慢无比的,坐下来等I/O的完成是一件不甚明智的事情,有时候数据的流动率非常惊人,把数据从你的文件服务器中以Ethernet速度搬走,其速度可能高达每秒一百万字节,如果你尝试从文件服务器中读取100KB,在用户的眼光来看几乎是瞬间完成,但是,要知道,你的线程执行这个命令,已经浪费了10个一百万次CPU周期。所以说,我们一般使用另一个线程来进行I/O。重叠IO[overlapped I/O]是Win32的一项技术,你可以要求操作系统为你传送数据,并且在传送完毕时通知你。这也就是[完成]的含义。这项技术使你的程序在I/O进行过程中仍然能够继续处理事务。事实上,操作系统内部正是以线程来完成overlapped I/O。你可以获得线程所有利益,而不需要付出什么痛苦的代价。 完成端口中所谓的[端口]并不是我们在TCP/IP中所提到的端口,可以说是完全没有关系。我到现在也没想通一个I/O设备[I/O Device]和端口[IOCP中的Port]有什么关系。估计这个端口也迷惑了不少人。IOCP只不过是用来进行读写操作,和文件I/O倒是有些类似。既然是一个读写设备,我们所能要求它的只是在处理读与写上的高效。在文章的第三部分你会轻而易举的发现IOCP设计的真正用意。 IOCP和网络又有什么关系? int main() { WSAStartup(MAKEWORD(2, 2), &wsaData); ListeningSocket = socket(AF_INET, SOCK_STREAM, 0); bind(ListeningSocket, (SOCKADDR*)&ServerAddr, sizeof(ServerAddr)); listen(ListeningSocket, 5); int nlistenAddrLen = sizeof(ClientAddr); while(TRUE) { NewConnection = accept(ListeningSocket, (SOCKADDR*)&ClientAddr, &nlistenAddrLen); HANDLE hThread = CreateThread(NULL, 0, ThreadFunc, (void*) NewConnection, 0, &dwTreadId); CloseHandle(hThread); } return 0; } 相信只要写过网络的朋友,应该对这样的结构在熟悉不过了。accept后线程被挂起,等待一个客户发出请求,而后创建新线程来处理请求。当新线程处理客户请求时,起初的线程循环回去等待另一个客户请求。处理客户请求的线程处理完毕后终结。 在上述的并发模型中,对每个客户请求都创建了一个线程。其优点在于等待请求的线程只需做很少的工作。大多数时间中,该线程在休眠[因为recv处于堵塞状态]。 但是当并发模型应用在服务器端[基于Windows NT],Windows NT小组注意到这些应用程序的性能没有预料的那么高。特别的,处理很多同时的客户请求意味着很多线程并发地运行在系统中。因为所有这些线程都是可运行的[没有被挂起和等待发生什么事],Microsoft意识到NT内核花费了太多的时间来转换运行线程的上下文[Context],线程就没有得到很多CPU时间来做它们的工作。 大家可能也都感觉到并行模型的瓶颈在于它为每一个客户请求都创建了一个新线程。创建线程比起创建进程开销要小,但也远不是没有开销的。 我们不妨设想一下:如果事先开好N个线程,让它们在那hold[堵塞],然后可以将所有用户的请求都投递到一个消息队列中去。然后那N个线程逐一从消息队列中去取出消息并加以处理。就可以避免针对每一个用户请求都开线程。不仅减少了线程的资源,也提高了线程的利用率。理论上很不错,你想我等泛泛之辈都能想出来的问题,Microsoft又怎会没有考虑到呢?! 这个问题的解决方法就是一个称为I/O完成端口的内核对象,他首次在Windows NT3.5中被引入。 其实我们上面的构想应该就差不多是IOCP的设计机理。其实说穿了IOCP不就是一个消息队列嘛!你说这和[端口]这两字有何联系。我的理解就是IOCP最多是应用程序和操作系统沟通的一个接口罢了。 至于IOCP的具体设计那我也很难说得上来,毕竟我没看过实现的代码,但你完全可以进行模拟,只不过性能可能…,如果想深入理解IOCP, Jeffrey Ritchter的Advanced Windows 3rd其中第13章和第14张有很多宝贵的内容,你可以拿来窥视一下系统是如何完成这一切的。 实现方法 Microsoft为IOCP提供了相应的API函数,主要的就两个,我们逐一的来看一下: HANDLE CreateIoCompletionPort ( HANDLE FileHandle, // handle to file HANDLE ExistingCompletionPort, // handle to I/O completion port ULONG_PTR CompletionKey, // completion key DWORD NumberOfConcurrentThreads // number of threads to execute concurrently ); 在讨论各参数之前,首先要注意该函数实际用于两个截然不同的目的: 1.用于创建一个完成端口对象 2.将一个句柄[HANDLE]和完成端口关联到一起 在创建一个完成一个端口的时候,我们只需要填写一下NumberOfConcurrentThreads这个参数就可以了。它告诉系统一个完成端口上同时允许运行的线程最大数。在默认情况下,所开线程数和CPU数量相同,但经验给我们一个公式: 线程数 = CPU数 * 2 + 2 要使完成端口有用,你必须把它同一个或多个设备相关联。这也是调用CreateIoCompletionPort完成的。你要向该函数传递一个已有的完成端口的句柄,我们既然要处理网络事件,那也就是将客户的socket作为HANDLE传进去。和一个完成键[对你有意义的一个32位值,也就是一个指针,操作系统并不关心你传什么]。每当你向端口关联一个设备时,系统向该完成端口的设备列表中加入一条信息纪录。 另一个API就是 BOOL GetQueuedCompletionStatus( HANDLE CompletionPort, // handle to completion port LPDWORD lpNumberOfBytes, // bytes transferred PULONG_PTR lpCompletionKey, // file completion key LPOVERLAPPED *lpOverlapped, // buffer DWORD dwMilliseconds // optional timeout value ); 第一个参数指出了线程要监视哪一个完成端口。很多服务应用程序只是使用一个I/O完成端口,所有的I/O请求完成以后的通知都将发给该端口。简单的说,GetQueuedCompletionStatus使调用线程挂起,直到指定的端口的I/O完成队列中出现了一项或直到超时。同I/O完成端口相关联的第3个数据结构是使线程得到完成I/O项中的信息:传输的字节数,完成键和OVERLAPPED结构的地址。该信息是通过传递给GetQueuedCompletionSatatus的lpdwNumberOfBytesTransferred,lpdwCompletionKey和lpOverlapped参数返回给线程的。 根据到目前为止已经讲到的东西,首先来构建一个frame。下面为您说明了如何使用完成端口来开发一个echo服务器。大致如下: 1.初始化Winsock 2.创建一个完成端口 3.根据服务器线程数创建一定量的线程数 4.准备好一个socket进行bind然后listen 5.进入循环accept等待客户请求 6.创建一个数据结构容纳socket和其他相关信息 7.将连进来的socket同完成端口相关联 8.投递一个准备接受的请求 以后就不断的重复5至8的过程 2006/7/15 什么是EJBEJB转载自:(www.jiangyao.com)EJB (Enterprise JavaBean)是J2EE的一部分,定义了一个用于开发基于组件的企业多重应用程序的标准。其特点包括网络服务支持和核心开发工具(SDK)。 在J2EE里,Enterprise Java Beans(EJB)称为Java 企业柄,是Java的核心代码,分为整体柄和片段柄和消息柄三个部分,其中的消息柄将在以后再作讨论。现在我们来看看什么是整体柄和片段柄。 整体柄是一种对象: 标准Java对象由创建它的程序创建,当程序终止时,对象也随之丢失,这就意味着当再次运行些程序时,将无法找到先前创建的柄,而整体柄会一直存在着直到它被删除。 一个程序可以创建一个整体柄,并且这个程序可以在被保存后随时停止和重启。整体柄将会依然存在。重启后,程序可以找到与之相对应的整体柄,并且会继续使用这个整体柄。 EJB实际上是SUN的J2EE中的一套规范,并且规定了一系列的API用来实现把EJB概念转换成EJB产品.EJB是BEANS,BEANS是什么概念,那就是得有一个容纳她,让她可劲造腾的地方,就是得有容器.EJB必须生存在EJB容器中.这个容器可是功能强大之极!她首先要包装你BEAN,EJB的客户程序实际上从来就不和你编写的EJB直接打交道,他们之间是通过HOME/REMOTE接口来发生关系的.它负责你的BEAN的所有的吃喝拉萨睡,比如BEAN的持续化,安全性,事务管理... 一.什么是 EJB? 一个技术规范:EJB 从技术上而言不是一种"产品" 二.Sun 对 EJB 的期望 提供一个标准的分布的、基于 OO 的组件架构 三.为什么选择 EJB? EJB 服务器完成"繁杂"的工作:应用开发人员关注于业务逻辑的实现而不是底层的实现机制(类似于 4GL 语言设计的目标) 四.EJB 架构 为了满足架构的目标,规范中描述了 五. 简化的编程模型 关注于业务逻辑实现:EJB 负责生命周期 (lifecycle), 数据存储 (persistence), 事务处理语义 (transactional semantic), 安全(security), ... 1.EJB 特点 由一个 EJB 容器在运行时创建和管理 EJB 2.EJB 服务器 管理 EJB 容器 (它管理 Bean) 3.EJB 容器 管理 Bean 生命周期:将 EJB 服务器提供的服务传递给 Bean 4.在一个 EJB 服务器中的容器 目前容器通常是由 EJB 服务器本身提供的 5.容器提供服务: 数据存储 容器决定何时载入/储存状态 6.容器提供服务: 事务处理 可以由容器代理来实现 7.容器提供服务: 其它服务 其它服务包括
远程对象被作为本地对象来处理:传递信息的方式不变,但开销更大 9.Stub 和 Skeleton 由 EJB 生成: 10.分类: Enterprise JavaBeans +---Entity Beans--CMP/BMP 会话 Bean (Session Bean):根据 EJB 规范,一个会话 Bean 是: 代表单个客户端来执行 实体 Bean (Entity Bean):根据 EJB 规范,一个实体 Bean 是: 提供在数据库中数据的对象视图 11.EJB 类和实例 构建 EJB 应用包括来自三方的代码 12.EJB Home 接口 每个 bean 有一个 Remote 接口:定义 bean 的公共接口---只有在 Remote 接口中定义的方法才能被客户端访问 EJB 客户端 可以为 Servlet, JSP, 应用程序或其它 bean EJB 架构 客户端对 bean 访问永远不是直接的 EJB 中的角色 EJB 服务器供应商: 开发并销售 EJB 服务器 六、EJB的体系结构 目前,EJB最新的标准是2.1,EJB3.0规范正在讨论中,预计将于明年推出。EJB2.1定义了三种企业Bean,分别是会话Bean(Session Bean),实体Bean(Entity Bean)和消息驱动Bean(MessageDriven Bean)。 Session Bean用于实现业务逻辑,它可以是有状态的,也可以是无状态的。每当客户端请求时,容器就会选择一个Session Bean来为客户端服务。Session Bean可以直接访问数据库,但更多时候,它会通过Entity Bean实现数据访问。 Entity Bean是域模型对象,用于实现O/R映射,负责将数据库中的表记录映射为内存中的Entity对象,事实上,创建一个Entity Bean对象相当于新建一条记录,删除一个Entity Bean会同时从数据库中删除对应记录,修改一个Entity Bean时,容器会自动将Entity Bean的状态和数据库同步。 MessageDriven Bean是EJB2.0中引入的新的企业Bean,它基于JMS消息,只能接收客户端发送的JMS消息然后处理。MDB实际上是一个异步的无状态Session Bean,客户端调用MDB后无需等待,立刻返回,MDB将异步处理客户请求。这适合于需要异步处理请求的场合,比如订单处理,这样就能避免客户端长时间的等待一个方法调用直到返回结果。 调用一个EJB组件要比调用一个JavaBean麻烦些,由于EJB组件可以分布在多台服务器上,因此必须首先获得远程或本地Home接口,然后使用Home接口创建EJB之后就可以调用EJB的方法了。 七、EJB设计模式 常见EJB设计模式 SESsion Facade pattern 通常项目中,客户端往往需要频繁的对服务器端数据进行操作。当采用实体EJB作为数据的抽象层时,如果直接让客户端程序与实体EJB交互,会产生实现一个业务需求便需要大量的EJB属性操作(如下图1)。这直接导致如下问题:网络负载大(远程客户端时)、并发性能低、客户端与服务器端关联度大、可重用性和可维护性差、性能 20064416036850
Session Facade模式的好处是:降低了网络负载,SessionEjb可以调用实体EJB的本地接口;将商业逻辑与商业数据隔离;维护与开发方便;显著提高性能。 Session Facade模式因其简单使用,是目前使用很广的模式。但具体应用过程中应注意:避免将所有的操作封装到一个很大的SessionEJB内;服务器端数据结构应由实体EJB实现,除非特例否则避免直接的数据库操作;SessionEjb内某些系统通用操作的代码容易重复(比如权限检查等,解决办法是将系统通用服务封装在Java ClASs内)。 MesSAge Facade Pattern 很多时候,一次RequeST需要操作多个EJB又不需要得到即时返回。对这种异步调用,通常应用Message Fa?ade Pattern. 这种时候,如采用Session Fa?ade Pattern存在如下问题: 20064416439582.gif" border=0> Message Facade Pattern的不足之处在于: EJB Command Pattern Session Facade Pattern中将商业逻辑实现封装在Session EJB中,这种做法带来诸多益处之外也带来如下问题: 1. 由于业务经常的变化,导致经常需要更新Session EJB代码。 引起上述问题的重要根结就是Session EJB本身重量级组件,其开发测试部署工作量较大,开发周期较长。以上不足可以通过EJB Command Pattern克服。 EJB Command Pattern中将商业逻辑实现封装在普通的Java ClASs(称之为Command Bean)中。该模式的具体实现有很多种,通常的框架都包括三部分: 1. Command Bean.由应用开发者写的具体实现某商业操作的Java Class.主要包含getXXX(),setXXX(),exECute()方法。 整个框架见下图4: 20064416612725
1. 适应与需要快速开发环境。因Command Bean是轻量级的Java Class,其编译和调试比较方便。 EJB Command Pattern的弱处在于: EJB Command Pattern的一个实际实现可以参考IBM's Command Framework.
基于EJB的J2EE项目,经常需要在客户端与服务器端传输大量数据。数据的组织形式常用的是DTO(Data Transfer Object,服务器端数据对象的抽象)。但因为客户端表现层经常是变化的,所需要服务器端数据也变动频繁,换句话说,DTO的数量和属性经常要更改。因此如何以及在何处生成和维护DTO便是需要考虑的问题。 一种解决方案是直接在Entity EJB中直接处理,即在Entity EJB的Bean类中加入getXXXDTO()、setXXXDTO()等。但这样做导致EJB与DTO层紧紧绑定。一旦DTO更改,与该DTO相关的EJB即需要重编译打包。EJB层与客户端层相关联不仅使维护困难而且导致EJB的重用性大大降低。 更好的解决方案是利用Data Transfer Object Factory封装对DTO的操作逻辑(如下图6)。 20064416928696
1. 普通Java Class实现,用于Session Facade Pattern使用DTO环境下。
DTO Factory带来如下好处: 1. 使Entity EJB的重用成为可能。由于不含DTO处理逻辑,Entity EJB功能单一化,只作为数据源。不通客户端通过各自的DTO Factory可以从同一个Entity EJB得到各自所需的个性化数据(自定义DTO)。 使用DTO Factory时需要注意的是:不需为每个Entity EJB定义一个Factory。可以为一系列相关的Entity EJB创建一个Factory,或者只创建一个Factory。 Generic Attribute Access 使用Entity EJB作为商业数据层时,我们首先需要从数据库加载数据,创建对应的Entity EJB实例,之后对内存中Entity EJB实例的属性进行相应操作。对属性的操作比较直接的做法是:直接调用Entity EJB的getXXX()/setXXX(),通常利用EJB2.0的本地接口;通过DTO Factory生成DTO。但这两种做法都存在如下问题: 1. 当Entity EJB的属性特别多时候,以上做法会带来复杂罗嗦的代码,使EJB变的庞大无比。 事实上可以利用更通用的方式访问Entity EJB的属性,即定义Generic Attribute Access Interface。见下图8:
Generic Attribute Access Interface由Entity EJB的本地或远程接口实现,并利用Hash Maps传输数据。实现方式常见如下: 1. BMP类型实体EJB可以在Bean类中定义包含所有属性的私有成员变量HashMap。
EJB规范要求Bean实现类必须实现所有在远程(或本地)接口中定义的所有方法,同时不允许Bean实现类直接继承远程(或本地)接口。这就导致编译时候很容易产生两者不一致的问题,即远程(或本地)接口中定义的某方法为在Bean实现类中被实现等错误。为避免上诉错误,可以利用应用服务器厂商所提供的工具。但也可以应用EJB的设计架构来实现:定义商业接口。
Business Interface是个普通的Java Class。依赖于使用本地接口与远程接口的不通,Business Interface的定义略有不同:应用与远程接口时,在接口中的方法需要抛出java.RMI.RemoteException;而应用与本地接口时候则不需要作任何特别处理。
Data Transfer Object 基于EJB的J2EE多层架构应用中,经常涉及的一个问题就是如何在各层之间传递批量数据,比如客户端对服务器端数据的批量读写操作等。比如需要得到实体EJB的属性,直接的方法是多次调用不通的属性,如下图10: 200644161221390 但这种方法容易导致许多问题,比如性能以及代码的复杂度等,更有效的办法是在一个调用中得到所有需要的属性。所以可以引入Data Transfer Object来封装所需要的属性,并在客户与服务器端通过传递该对象一次实现对数据的操作。如下图11: 200644161237165.gif" border=0>
200644161250518.gif" border=0> Domain DTO的应用除了DTO所具有的一般优点外,还有别的益处: 1. 开发迅速。因为一旦实体EJB设计好后,很容易转换得到Domain DTO。 Custom DTO则可以克服上述的一些缺点。Customer DTO仅仅封装用户感兴趣的服务器数据集即可以根据客户端需求创建Customer DTO。这样作的优点是灵活高效;缺点是大项目中可能导致大量的Customer DTO存在。 通常Domain DTO可以用于数据的更新与创建;Customer DTO可以用于客户用于表现层的数据读取。两者可以相辅相成。而且使用DTO一般与DTO Factory同时使用。 Domain Transfer Hash Map DTO的使用往往缺乏通用性。不通的用户案例需要创建不同的DTO。当项目很复杂时,从维护性考虑需要更好的数据传输的实现方式。 1. 良好的维护性。 Data Transfer RowSet 当需要处理直接的JDBC调用得到的结果集时,显然用DTO/Hash Map已经不合适,因为需要对大量数据进行类型转换等额外操作是很费资源和不必要的,而且最终用户常需要以表格式样显示数据。 所以对二维表式数据,更好的处理方式是利用Data Transfer RowSet。Data Transfer RowSet通过将ResultSet直接转换为RowSet传递给客户端。 200644161320608.gif" border=0> 使用RowSet的好处很多: 四.事务和数据持久机制 JDBC for Reading Pattern 基于EJB的J2EE应用中,通过EJB对数据库的操作可以有两种方式:实体EJB或者Session EJB中直接利用JDBC访问。 因此建议在只需对数据库表数据进行只读访问时候,应该采用JDBC for Reading Pattern,即通过JDBC直接访问数据库。除了避免上述使用实体EJB的缺点还带来一下好处: 缺点是: 2006/6/21 MIMEMultipurpose Internet Mail Extensions
MIME表示多用途Internet邮件扩允协议。MIME扩允了基本的面向文本的Internet邮件系统,以便可以在消息中包含二进制附件。 MIME利用了一个事实就是,RFC 822在消息体的内容中做了一点限制:唯一的限制就是只能使用简单的ASCII文本。所以,MIME信息由正常的Internet文本邮件组成,文本邮件拥有一些特别的符合RFC 822的信息头和格式化过的信息体(用ASCII 的子集来表示的附件)。这些MIME头给出了一种在邮件中表示附件的特别的方法。 MIME信息的剖析 一个普通的文本邮件的信息包含一个头部分(To: From: Subject: 等等)和一个体部分(Hello Mr.,等等)。在一个符合MIME的信息中,也包含一个信息头并不奇怪,邮件的各个部分叫做MIME段,每段前也缀以一个特别的头。MIME邮件只是基于RFC 822邮件的一个扩展。然而它有着自已的RFC规范集。 头字段 MIME头根据在邮件包中的位置,大体上分为MIME信息头和MIME段头。(译者:MIME信息头指整个邮件的头,而MIME段头只每个MIME段的头。) MIME信息头有: MIME-Version: 这个头提供了所用MIME的版本号。这个值习惯上为1.0。 Content-Type: 它定义了数据的类型,以便数据能被适当的处理。有效的类型有:text, image,audio,video, applications,multipart和message。注意任何一个二进制附件都应该被叫做application/octet- stream。这个头的一些用例为: image/jpg, application/mswork,multipart/mixed,这只是很少的一部分。 Content-Transfer-Encoding: 这是所有头中最重要的一个,因为它说明了对数据所执行的编码方式,客 户/MUA 将用它对附件进行解码。对于每个附件,可以使用7bit,8bit, binary ,quoted-printable,base64和custom中的一种编码方式。7bit编码是用在US ASCII字符集上的常用的一种编码方式,也就是,保持它的原样。8bit和binary编码一般不用。对人类可读的标准文本,如果传输要经过对格式有影响的网关时对其进行保护,可以使用quoted printable 。Base64是一种通用方法,在需要决定使用哪一种编码方法时,它提供了一个不用费脑子的选择;它通常用在二进制,非文本数据上。注意,任何非7bit 数据必须用一种模式编码, 这样它就可以通过Internet邮件网关! Content-ID: 如果Content-Type是message/external-body或multipart/alternative时,这个 头就有用了。它超出了本文的范围。 Content-Description: 这是一个可选的头。它是任何信息段内容的自由文本描述。描述必须使用us-ascii码。 Content-Disposition: 一个试验性的头,它用于给客户程序/MUA提供提示,来决定是否在行内显示附件或作为单独的附件。 MIME段头(出现在实际的MIME附件部分的头),除了MIME-Version头,可以拥有以上任何头字段。如果一个MIME头是信息块的一部分,它将作用于整个信息体。例如,如果Content-Transfer-Encoding显示在信息(指整个信息)头中,它应用于整个信息体,但是如果它显示在一个MIME段里,它"只能"用于那个段中。 2006/6/15 什么是REST什么是REST(Representational State Transfer)?是否又合适的相关资料介绍呢?
关于REST的大量资源,可以访问这个网站: http://rest.blueoxen.net/cgi-bin/wiki.pl。 REST是代表状态传输(的缩写。它代表了分布式超媒体系统的体系结构风格,该风格是Roy Field在他的论文中定义的。REST在系统中加入一系列的限制,为系统确保了极大的可扩展性。虽然REST定义了大量的重要体系结构限制(例如将用户接口和服务器实现的清晰分离,无状态,以及缓存能力)。REST关键的特有能力是统一接口的要求。REST要求使用通用的,统一的以及非特殊的接口。它不允许应用程序专用接口。在Web世界中,REST接口是由HTTP接口定义的,支持基本的应用程序方法:GET。POST,PUT和DELETE。(除了这基础的四个方法外,HTTP没有其他的方法。)这种统一接口限制,跟面向服务体协结构风格(SOA)相反,后者为每种类型的服务定义了不同的接口(例如WSDL 接口类型)。 什么是SNSSNS即网络社交平台——Social Network Service,它的理论依据是著名的六度理论,即人们通过六层人际关系便可以找到地球上的任何一个人。SNS通过互联网的方式,可以将人际关系网的资源完全挖掘出来。在SNS的帮助下,可以轻松认识“朋友的朋友”,通过认识的人找到需要的人,扩展自己的人脉,还可以更科学地管理人际网络资源,为自己赢得更多的机会。 在经济高速发展的今天,人际关系的作用愈发明显,人脉资源对于一个人的成功非常重要。目前很多职业人士在人际资源方面其实都比较匮乏,因此SNS这种新兴的网络社交方式一出现,迅速流行欧美国家,已经成为精英阶层拓展人际关系的主要方式之一。 SNS进入2.0时代 SNS在中国的发展走过一段弯路。SNS在2003年开始进入中国,但遗憾的是,网站大多不具备SNS的核心元素——真实姓名和真实连接,相关服务也没有整合进来,其中很多网站维持得很艰难或者已经倒闭。这段时间国内企业对SNS探索并不成功,也使这块潜力巨大的市场一直没有得到较大发展。我们可将这一时期称之为SNS1.0时代。 进入2005年,SNS又一次成为投资热点,天际网等几家始终坚持推广SNS理念的企业,也成为了投资界追捧的热点。其中,天际网由新浪前副总裁、Q点网的创始人——林峰创建。由于一直坚持针对职业人士,提供了大量创新的网络社交服务,自2004年试运行以来,天际网在北京、上海、广州的白领群体中逐渐树立了巨大的影响,目前天际网已有4万多名注册会员,其中35%为中高级管理者。 SNS2.0带给我们什么 首先,SNS2.0价值来源于真实性。SNS2.0能够为职业人士提供一个真实、可信、有效的社交舞台。所有用户的资料都是完全真实的,这一点使得职业人士能够掌握社交对象的有价值信息。由于会员层次高,社交效果好,已经有许多朋友在天际网上得到了回报,比如说,有很多个人会员从天际网上找到了更好的工作;一些公司会员如广告公司,在天际网上获得新的客户;一些猎头公司从天际网中找到了合适人才。值得一提的是,目前猎头公司已经与天际网形成一种良性的合作关系,发展势头很好。 第二,SNS2.0的最大价值体现在它的应用性。之前很多SNS做的不够深入,是因为他们提供给用户的仅仅是一个网络平台,没有直接的帮助使用者去拓展他的人际关系,因此也没有让用户认识到SNS的真正价值。天际网在应用性方面走在了同类网站的前面,不仅为大家提供了一个认识朋友的平台,更提供了丰富多样的线上线下社交活动,为用户提供的是一种真实的社交生活,不仅使职业人士的社交面更广,同时也节约了使用者在拓展人际关系上所花费的时间成本、物质成本。 SNS:Social Network Sofwaret,社会性网络软件,依据六度理论,以认识朋友的朋友为基础,扩展自己的人脉。并且无限扩张自己的人脉,在需要的时候,可以随时获取一点,得到该人脉的帮助。 SNS网站,就是依据六度理论建立的网站,帮你运营朋友圈的朋友。 六度关系理论:美国著名社会心理学家米尔格伦(Stanley Milgram)于20世纪60年代最先提出,在人际脉络中,要结识任何一位陌生的朋友,这中间最多只要通过六个朋友就能达到目的。就是说你想认识一个人,托朋友找朋友找认识他的人,之间不会超过六个人。 SNS是一个采用分布式技术,通俗地说是采用P2P技术,构建的下一代基于个人的网络基础软件。 SNS通过分布式软件编程,将现在分散在每个人的设备上的CPU、硬盘、带宽进行统筹安排,并赋予这些相对服务器来说很渺小的设备更强大的能力。这些能力包括:计算速度,通信速度,存储空间。 SNS的技术起源:在互联网中,PC机、智能手机都没有强大的计算及带宽资源,它们依赖网站服务器,才能浏览发布信息。如果将每个设备的计算及带宽资源进行重新分配与共享,这些设备就有可能具备比那些服务器更为强大的能力。这就是分布计算理论诞生的根源,是SNS技术诞生的理论基础。 SNS的商业空间:当普通人通过安装SNS软件都可以拥有媲美网站服务器的计算及通信资源时,那些投资了大量服务器的互联网公司将怎么办呢?他们的优势在什么地方?会不会有更多的新型的互联网公司出现,而且他们的后台他们的前端有没有可能完全不是现在的GOOGLE、EBAY、新浪模式呢?甚至包括盛大网络游戏这样的运营商,他们引为骄傲的强大的3万台服务器集群,是不是他们的核心竞争力呢?当一个漫画作者家里的那台机器,就可以让他通过SNS视频器播放他的作品,他还需要去管理一个网站吗?或许一个家庭主妇不需要懂得HTML编程,不需要懂得网站这个词汇,只通过SNS菜谱发布程序及一台厨房里的PC就能让千百万人掌握她的手艺,而且她在厨房的灶台上的一招一式都清晰可见。这个时候,您会想到什么? 现在的互联网中,作为客户端的我们就像个蠢蛋,只能通过服务器才能干些奴隶般的事情,看别人的网站,玩别人的游戏,发发邮件,除此之外,我们没有自由。现在是开始革命的时候了!革命中心任务就是:如何让10多亿台电脑发挥他们自己的作用,让用户去创造和控制自己的信息。中间不需要公司的服务器来摆布我们。 第二章SNS带给顾客的特殊价值描绘 假设:我拥有一台没有预装SNS的电脑,我现在只能用它来从事以下活动: 浏览网页、搜索、聊天、电子邮件、社区BBS、网络游戏、购物、盗版共享、特殊的企业应用。 我在使用SNS之后,我用它来从事下列活动: 1. 创建我的网站,而不需要懂得HTML或其它任何需要专业人员的技术。所有来访问我的SNS个人网站的人,都可以排队和我即时交流,包括使用文字,网络电话,或者面对面的视频。 2. 创建我的网络电台,让那些我许可或不需要许可的人来听我的电台,并且我可以和我的听众一起卡拉OK、DJ等等。 3. 创建我的网络电视频道,我许可只有我的朋友们才能观看我的网络电视。 4. 创建我的商店,我在我的商店里发布我的商品信息,并且可以即时在线地和那些对我的商品感兴趣的顾客面对面讨价还价。而且,我还可以逛一下他们的商店,甚至相互交换一下各自商店的物品。 5. 创建我的社会网络,我把我认识的或不认识的人组织到我创建的一个SNS私人网络中。我只愿意在私人网络中和他们交往,当然就包括可以使用电台,电视,商店,SNS网站等方式和他们交流。关键是这个私人网络我有一定的控制权。 6. 创建我的工作流,同事们可以和我在SNS网络里建立一个工作流社会网络。在工作流社会网络里,我们用来交流的应用工具应有尽有,比如一起画图,一起开会,一起做CAD设计等,而且我可以自行开发一个专用交流工具和同事们一起工作。 7. 玩SNS游戏,我可以玩那些在SNS上开发的网络游戏,因为这些游戏的运行不需要盛大那样的服务器集群,所以我是直接向游戏厂商付费的。当然就很便宜了。至少省了现在这种模式的游戏的一半以上的费用。而且据说,那些游戏专家在SNS上开发游戏根本就不需要懂什么网络编程,更不需要他们假设服务器。只是听说,银行就可以直接从我这里扣费。可能那个地方是需要服务器的,毕竟帐号在银行那里啊。 8. 看网络电视终于很爽了。这几年总是听说可以看网络电视,可没有一次成功。现在我的ADSL虽然是2MB的,但是我却可以拥有400KB的速度缓存网络电视,DVD质量已经不在话下。 9. 听歌曲就太老旧了。我现在用SNS来制作DJ,配上我在云南的旅游景点视频,哇塞,我也可以卖自己的DJ了。很简单嘛,通过SNS上的银行做个帐户,让那些想看的人付钱啊。 10. 我不喜欢电子邮件了,为什么?因为我用SNS模式的电子邮件啊。为什么?因为我只允许那些想发邮件的人进入我的社会网络,在我的社会网络中他们可以利用SNS的邮件程序给我发啊。这样当然就没垃圾邮件了嘛。傻。 11. 我不喜欢GOOGLE了,啊?GOOGLE上的东西有什么了不起嘛。全是那些公司在里面搞的假信息,一点也不真实。我喜欢用SNS来搜索那些个人发布的信息,毕竟个人创造的流言飞语要比那些官腔有趣啊。啊??? 12. 我不喜欢EBAY了,啊?你不是EBAY了8年了么,你现在已经是EBAY上的钻石王老五了么?呵呵,你不知道我在SNS上可以直接面对顾客,就象在南京路上开店那样,可以和顾客直接切磋么?其实啊,做买卖还是要面对面交流才来得快,光靠比店家便宜做法的电子商务是没用的。 13. 嗨,这是我的新形象!什么,你什么时候变成了网络教授了?听你课程还需要每小时500块?凭什么啊?歪歪,你不知道我通过SNS开办我的〈考研题目一招鲜〉价值几何吗?我这可是实时直播的,不象我过去做的那些教材只是产品。我这里是限制教授人数的,第一期嘛,我只招了上海的2个,北京的1个,新疆的1个,还有就是奉贤县的3个考生啦。 14. 这年头,在SNS上居然有星巴克!你看看,那些年轻人拿个摄像头,摆个椅子,就在三维空间里的星巴克店里聊起来了。你瞧,进去先要点首25块的歌才能邀请人一起进去呢。场面到还不小,你看里面100多人。看看,那个男的在追那个女的呢。真的吗?你看你看,他拿起一个星巴克的玫瑰了。悲哀,人类生活在什么空间里啊? SNS为您手中设备解决带宽与计算资源,一切尽在掌握。 第三章 观察SNS的技术与服务 SNS与这些应用对比时的独特性 1. 传统即时通信(聊天): QQ,MSN等都是基于集中管理的网络模式,他们需要在后台拥有成千上万的服务器,这些服务器在分配给用户进行文字聊天时的资源消耗量并不很大(比如QQ1000万同时在线用户,1万台服务器,1GB带宽已经很足够)。因此基于依赖服务器的方式,聊天应用并没有出现太大的问题。 SNS则不需要任何服务器。 2. 视频及语音通信: QQ、MSN等都没有成功地进入这个市场,因为庞大的服务器集群难以有效地管理这类通信量大,处理过程复杂的多媒体网络通信业务。相反,SKYEP通过与P2P技术,却成功地进入了语音市场,而且几乎毋须任何服务器。 SNS的传速速度是SKYPE的8倍以上,因为SNS相对SKYPE来说,优势不在于简单的P2P语音连接,而是提高整个网络的带宽速度。那么,SNS的语音质量就将大大超过SKYPE。SNS是一个平台,SKYPE是一个语音通信P2P软件。 3. 网络游戏: 盛大经营的游戏都是集中服务器的网络游戏,需要更高级的服务器及带宽资源。盛大这家公司的成功在很大程度上依赖于中国电信前期的带宽资源支持计划。 在SNS上开发的网络游戏,不需要网络游戏开发者为解决集中服务器和带宽投入费用。他们唯一需要的是有一个银行收费接口。 4. 与GOOGLE竞争: GOOGLE搜索的是网站上的信息,SNS搜索的是SNS网络中个人发布共享的信息,但仍然可以使用SNS建立起一个GOOGLE那样的事前搜索,事后用户快速访问的搜索引擎。这依赖于SNS的网格计算模式。 5. 与EBAY竞争: 前面提到的SNS商店仅是SNS用之于交易的应用举例。SNSP2P交易市场是为满足任何需要进行交易的个人或中小企业服务的。其特点是面对面,你可以买我的东西和我交流,我也可以直接访问你的商店彼此交流。这模糊了商店和顾客的关系,顾客是兼备消费者和卖家特征的对等体。 EBAY这样集中拍卖系统虽然24小时在线,但更象是一个商品黄页。真正的交易需要面对讨价还价才有意思。那么EBAY这样的网站,除了提供更大的服务器和更多的带宽之外,他们还能凭什么收取卖家的登陆商品手续费呢?因为在SNS交易市场中,买卖任何东西都不需要服务器进行控制,买卖的双方需要的仅是如何保证买卖的信用如何完成,要完成这一任务不是依靠EBAY,或者SNS,而是依靠业已存在的银行和保险公司。 SNS带来的崭新应用 1. SNSP2P网络电视: 全国有150家左右的大公司在网络电视领域内进行投资,包括MS等巨头。有5000多个网站已经开始进行网络电视的实验播放。 按照目前服务器/客户端的互联网模式,在最近3年内,如果电信运营商不能将集中带宽大幅度降价(100MB独享带宽从56万/年降低到5万/年),并将客户端带宽普遍提升到4MB,用户还不能真正看到网络电视。但通过SNS,用户则将看到200KB/S级的网络电视。这一标准正是目前网络电视商努力希望达到的。而且SNS不需要改变现有的任何基础设施。 基于服务器的网络虽然可以购买大量硬件软件资源以使网络电视应用化。但这一成本是要转嫁到消费者头上去的。中国网通首席科学家侯自强说:这是完全不可能的网络电视模式,网络电视需要P2P网络才可以。 2. SNSP2P内容收费化: 那些共享盗版的用户,通过类似BT这样的多点下载P2P网络已经看到了P2P网络应用的有趣之处。但是,打击盗版会使那些专业的BT网站关门。这给SNS带了有巨大的市场机会,因为SNS可以实现内容的收费化,并让那些拥有有价值的内容供应商从中获益,而毋须架设多余的服务器及带宽。例如,一首歌曲的下载成本是1毛钱的话,那么在SNS上则是零。 中美两国的法律界已经宣判提供盗版内容有罪,现在是考虑是否从网络中去除BT这样的技术应用的时候了。而SNS可以对网络中的数字版权内容进行管理。 3. SNSP2P个人信息中心: 前面提到的个人网络电台及个人电视台是SNSP2P个信息中心的应用化举例。通过SNS任何人都可以拥有象网站服务器那样的能力。这就彻底改变了互联网需要服务器的逻辑,服务器和集中带宽不再是阻碍有创造力而没有钱和IT技术者的力量。 这是目前除了SNS之外,还不可见的应用。SNS目前的用户均可拥有自己的音乐电台了。其个人信息中心的应用开发都能在6个月内不断推出。 4. SNSP2P企业工作流中心: 每个企业只需要对SNS进行简单的配置,就可以顺利地建立自己的工作流P2P网络。而且他们的管理核心即可是自封闭的,也可以是开放式。因为没有中心服务器,他们只需要对自己的管理应用程序进行控制。这就大大压缩了企业管理网络所需要的硬件及管理人员的投资。 5. SNSP2P基础硬件市场: 当电信骨干网运营商意识到P2P网络的威力之时,他们就要着手改造他们目前基于服务器构造的基础设施。例如提供P2P网络可视电话机,P2P网络路由器,甚至P2P网络移动电话网。这将为这些走投无路的电信运营商带来新的赢利途径。 事实上,象INTEL这样的公司早在1998年就开始设计基于SNS这样的P2P网络硬件设计。他们的目标也非常明确,如果能生产P2P芯片,那么他们就不会因为摩尔定律的失效而没有饭吃。所谓P2P芯片就是将单一的奔腾处理器变成是有1亿10亿片P2P方式的奔腾处理芯片协同计算。这种芯片的出现,将从根本上解决单台设备计算能力不够的局面。以后人们不再认为购买更高级的芯片,才能得到更快的处理速度,而是去购买INTEL的计算费用,就象购买多少度电力那样。 SNS基础网络技术对大规模网络应用的特殊优势 互联网的前身是完全基于简单分布网络的军用网,当时的互联网爸爸简单可爱,彼此共享通信资源。不过,互联网爸爸只在大型主机之间有这种能力。到了这个叫互联网的时代,人们忘记了它的父亲。为什么?因为商业公司疯狂地进入这个市场,根本就不考虑基础网络的安全性和效率。现在是他们回头寻根的时候了。 2004年4月、10月、11月,2005年1月、3月,用户最多的QQ及MSN即时通讯网络发生全球性的瘫痪事件,这两家公司对外的解释是:病毒攻击。事实上,基于服务器的即时通信网络无论怎么加固,只会更复杂,更不安全。因为他们的网络有中心点,就是他们的服务器中心。黑客的攻击或中心机器的瘫痪,都会导致所有人不可用。 2005年4月8日,中国电信网络全国性瘫痪5分钟。有人解释是病毒攻击骨干网路由器。 至于盛大网络游戏,PK不了人,那更是家常便饭。 这一问题就是著名的网络论断:服务器模型的网络应用越广泛,越接近于崩溃。也就是说从理论到实践,现在基于集中服务器的各种应用都难以获得超大规模的发展。已经有专家预测:互联网在10年内崩溃。 那些基于1G、2G、3G的封闭的移动电话网络,如果他们要进行除了话音之外的业务,也必将吸取目前基于服务器网络的教训。 这一共识是1960年代的计算机先驱建设互联网爸爸的初衷,现在是回到网络本质的时代了。即,服务器看似方便管理,却很脆弱,是专制的脆弱。分布网络看似自由,没有管理,却有更好的管理方式,那就是民主管理的方式。 与SNS相关的重量级言论 1. 美国通信委员会主席:我第一次看到SKYPE这种P2P毋须服务器的VOIP(网络电话),我就知道一切都完了。 2. SUN公司首席科学家:P2P终结WEB互联网,人人都需要P2P。 3. 中国网通首席科学家:没有P2P,就没有前途。 4. GROOVE创始人(原莲花软件公司技术总监,LOTUS发明人):P2P使我更兴奋。 与SNS相关的市场大事件: 1. 2001年,NAPSTER推出集中管理模式的P2P音乐共享软件,3个月内500万用户在线。 2. 2002年NAPSTER公司被美国法院关门,使用NAPSER的部分用户被起诉。 3. 1999年,INTEL公司宣布使用P2P技术,并制造与P2P相关的硬件。 4. 2004年,SKYPE同时在线用户突破150万,只用了8个月的时间。 5. 2004年,QQ同时在线用户突破1000万,几乎每个公司都想拥有自己的即时通信软件。 SNS市场与竞争 SNS的市场定位: SNS不是一个应用产品,而是一个象WINDOWS那样的技术平台。SNS可以在自身的平台上开发与很多应用产品开发商类似的产品,但这不是SNS的核心市场价值。 SNS是为那些没有服务器资源,但有强大的信息创造能力,需要大量免费的网络应用程序的个人及小型公司提供的新型网络操作系统。那些拥有一台或几台设备的个人或公司,一经安装SNS就可进入一个崭新的网络世界。在这里,没有服务器统治信息的概念。 SNS的市场定位:帮助每个人都可以通过自己手上的设备,在网络中发挥自己的力量,中间不需要服务器的管制。 现在的互联网,那些地方最赚钱?用户参与性越高的地方越赚钱 1. 1000万同时在线的QQ用户,他们在QQ上的行为98%是通过文字聊天。QQ公司拥有3万台各式后台服务器设备,并包括与电信运营商合建的专有机房。 分析:在QQ网络中,用户是参与进去的,他们不是简单地浏览网页。用户参与到网络中从事活动,他们的活跃度是非常高的 证明:。QQ去年通过与电信运营商合作及广告收入营业额达到18亿。 2. 100万网络游戏迷同时在线玩大约12款网络游戏。盛大在其中占有70%的同时在线用户。盛大公司拥有2万台各式后台服务器设备,并包括与电信运营商合建的专有机房。 分析:在网络游戏市场中,用户是以极为上瘾的方式参与进去的。因为他们和对手打得正欢。证明:这个市场在国内现在已经发展到36亿的市场。 3. SKYPE网络电话,200万全球人士同时在线。它宣称只有50MB的带宽,和两台大服务器,因为它是P2P网络模式的。 分析:打电话是传统交流方式。因为免费,大家进入。用户通过网络电话交流,主因是免费。 证明:SKYPE已经因此而出售了大量的技术许可证,至少已经获得1亿美元的收入。 5. 新浪网已经成为国内最大的门户网站,他们的用户是最多的。 分析:用户在新浪网就是看东西。 证明:只是看,用户再多。收入也不多。新浪网被盛大收购说明了,让用户只来看的网络并非互联网的最大金矿。 6. GOOGLE搜索引擎,全球最有市场价值的网络公司。 分析:帮助用户查找互联网网站上的信息,让用户有了寻找信息的能力。 证明:GOOGLE让用户可以大规模地参与到网络中,它成为了目前最成功的互联网公司。 7. EBAY拍卖网站 分析:EBAY是最早赢利的互联网公司,也是最有市场价值的网络公司 分析:为进行交易,用户之间进行的信息沟通量是最大的。 证明:让用户彼此进行交流,交流越深,商业机会越大。 证明:以上凡是可以让用户参与进来利用互联网的应用,如QQ,盛大网络游戏,打电话都具备了显而易见的赢利能力。其核心是:用户参与。 市场总印象: 从1990年开始,在技术界前沿,就已经开始有人研究P2P技术的可行性,通过15年的发展,适合P2P网络的土壤(更强大的电脑和宽带的普及)已经产生。互联网技术从服务器数据库、中间件到WEB服务走过了一段蓬勃发展的阶段。但是,现在的公司也意识到,没有用户更深的参与,仅提供象广告页那样的网站,赚不到钱,即使EBAY也存在这类问题。GOOGLE也还只能从广告中获得收入,因为用户搜索到的信息绝大部分是公司提供的广告信息(包括媒体制造的所谓新闻)。但是那些让用户参与的网络应用,例如网络游戏及即时通信,却展现了强大的生命力,拷牢用户的本事远远大于其它应用。 市场是有人创造的,在当今社会,以人为本,不是以公司为本。公司只能为个人服务,但不能控制人们的行为。控制越多,信息创造力越低,越低的信息创造力,那就会造成生产设备、维护基础设施、包括制造可消费信息的媒体都看不到前途。 互联网的根在信息利用的价值,那就是谁能解放个人的信息创造力,谁就能站在互联网浪潮的前面。SNS个人社会网络的市场原则就是顺应这一很多公司自以为是,还看不到的浪潮。 SNS如何竞争 1.SNS是构筑网络基础的软件,经营它不需要购买投入硬件资源和其它软件资源。 QQ、MSN、盛大网络游戏、新浪门户网站、GOOGLE式搜索引擎、EBAY集中拍卖网站、集中下载内容网站这类互联网公司都需要大量的硬件投资和人力运营成本。他们无一不是风险资本注入之后才得以发展的。 他们的这类应用同样可以体现在SNS之上,但SNS与他们显著的区别是:SNS运营这些应用是依靠用户的机器和网络带宽,而不是依靠SNS这家公司。 2.烧钱而成的互联网公司不可能放弃既得利益,并与SNS在同一层次上竞争。 不可想象有朝一日,QQ会放弃它已经建立起来的包含3万多台服务器的网络,并自我毁坏与电信运营商业已达成的收入模式。这会毁掉这家上市公司,会使内部大量的服务人员无饭可吃。 SNS没有任何这类包袱,SNS的任务就是寻找雇佣最好的软件人才。 3.技术时间的领先就是绝对优势 SNS以两人之力,就已经在应用上创造了比MSN、QQ、BT这类软件更强大的功能。加以市场推广的少许投资,MSN、QQ、BT之类的软件在产品层次上更无优势。SNS创始人而且不是在这一个方向上与他们竞争,而是要创造一个包罗万象的P2P网络产业。技术的起始点及目标非这类相关竞争者可以相对比,除非他们也象SNS这样来创造一个新的互联网平台。 帮助您理解软件业根本特点的几条建议: 4. 有钱就能做好软件,这是笑话。因此,SNS具备自己的独特优势! 软件和别的产品或技术很不一样,每一行代码都是某个人某个团队具体的创造。原理可以研究,代码可以照抄,但要想复制一个软件的灵魂,那么需要复制的人必须理解那个软件开发者的灵魂。软件的发明,是非常困难的事情。这里当然不包括所谓工程软件。 如果投资1000万就可以做好B级软件,如果投资5亿,就能做出A级软件。那是个笑话。从DOS、WINDOWS、OFFICE到LINUX这些重量级的软件都不是一个团队首先制作出来的,而是1个人,2个人,不超过5个人首先做出来的。这是秘密吗?当技术制成第一个版本,后续加入的人都仅是在创始人制定的框架中去做二次创新!!这个时候才轮得到资金及团队管理起作用。否则面对软件发明,这些资源都是零。 再举一个玩游戏的例子,DOOM3的核心代码从头到尾就是一个叫库马克的人写的。这些核心代码库同样是盛大运行的那些游戏的基础。没有库马克转让许可的机制,那些游戏开发公司什么也做不出!库马克被比尔盖茨称为最伟大的软件家!初中毕业,个子很瘦,蔑视大公司是他的特点。 5. 很多站在台上的IT英雄们看不到简单的真理 从微软到IBM,甚至于很多做P2P软件的专家,他们都不象SNS创始人那样“偏激”地看待市场的潮流。大多数人都认为P2P很有用,但我们认为他们没有看清楚:P2P比WEB互联网更能激发创造信息的能力,而信息的丰富程度及质量是互联网赖以发展的根基,而不是机器或软件。机器或软件是为创造信息的人服务的。 SNS的创始人制定的一系列计划都是围绕着:如何发挥个人的创造信息的能力,最后才是帮助那些制造信息的公司如何公正地向消费者提供信息,而不是鼓励他们以广告垃圾信息愚昧人类。相反,大量所谓成功的互联网上市公司天天向人类灌输愚昧落后的商业品,在门户网站的首页到处都是垃圾广告,使人不厌其烦。包括EBAY这样的网站,也并不是在做多么公平的交易。QQ这类通信商,更是挂满了各种广告,让你倒胃口。连一向自认为财大气粗的MSN,也急不可耐地想靠点广告挣钱。他们的钱太多,已经变成了只迷信钱的公司,而失去了创新精神。事实上,IT还是个幼稚的行业,只容纳得下最勤奋思考的人。 6. 做软件的人要牢记推广才能使你成功 当一个原始的想法以第一个软件版本出现在市场上时,你的首要工作不是继续琢磨你的原始思想,而是怎么让这个原始思想为你的开发员及用户明白理解,并在用户的帮助下不断挖掘它的潜力。这叫进入市场后的用户替你发明阶段。 SNS与竞争者的相比,目前只有一个原始的技术及创始人的思想概念。但SNS如果获得志同道合者的支持,将中心定位在大力推广,而不是急功近利地先捞一点钱上,SNS就是轻装上阵,信心百倍地出发了。 赚钱不要事后来想,而是要相信在什么时候什么地点上你可以获得明确的收入。自己都说不清楚,别人更拿你没办法。 第五章SNS的主要营销策略简介 定价 SNS面向个人消费者是免费的。只面对战略结盟者收取少量软件准入许可费。 SNS进入市场的战略是结盟掠夺式和侵略性的。 掠夺基于服务器的互联网公司的用户资源 使MSN、QQ、SKYPE这类即时通信商永远也不要指望他们可以依靠卖注册号码赚钱,也不要指望依靠广告获得收入。在消费者心目中树立起这类应用根本不需要开发者的成本,放大他们的服务器成本,使他们的服务器拷牢用户的战略破产。 使EBAY、GOOGLE这样的网站在SNS的面对面,个人对个人的模式下,凸现出他们的弱点。在消费者心目中形成互联网应用就在自己的机器上的印象。将他们培育的用户顺利地转移到SNS上来。同时,使他们的服务器和带宽成本放大。 使盛大这样的网络游戏运营商不敢面对游戏制作者霸道。利用SNS开发P2P游戏,使游戏商发行游戏,不在依赖大量的服务器。从而打乱盛大这样的游戏运营商的垄断梦。让游戏制作者叫好,让消费者获得更便宜的游戏体验。 与创造了信息本身及服务本身的产业伙伴结盟 与电信运营商结盟 免费许可他们在SNS广泛地建立电信传统业务,例如QQ短信,免费许可移动运营商使用,而不收取运营商的分成费。但SNS要收取他们的按用户数许可的人头费。 与银行结盟 使在SNS上进行交易的人们可以方便地利用银行的支付系统进行交易活动。SNS许可支付运营商直接在SNS上从事这项业务,而且免费。但SNS要收取支付运营商面向交易者收取的手续费中的一部分,而且做为代理方式获得。 与有形产品供货商、交易安全保险商结盟 那些卖书、卖技术、卖飞机大炮的供货商等等都可免费从SNS这里获得相关应用程序,并获得SNS的商品登陆目录服务。SNS就是一个EBAY那样的系统,但完全免费开放给供货商。、内容供应商使用。其中有需要交易安全保险服务者,可以购买与SNS合作的保险公司的服务业务。但SNS针对保险服务商收取他们的保险费中的一部分代理费。 与个人信息创造者结盟 那些乐于创造信息的个人,他们需要的应用程序可以委托SNS开发,也可以是第三方厂家开发。都是免费的。SNS从他们个人那里收取6%的分成费。 与SNS应用程序及服务商结盟 向第三方开发者开放SNS开发库,他们所开发的应用程序及服务所获得收益由他们自行处理。但SNS要他们在推广市场时和我们一起促销。 结盟运动的中心只有一个:将SNS发展为一个事实上的标准平台。打击那些业已对生产信息销售信息提供服务的传统生产者和服务者的网站,让生产者和服务者,个人站在我们这一边。 地点 SNS做为一个软件的特征就是营销全球化,没有地域的限制。但与伙伴的结盟运动是有地点的。 SNS通过当地的合作伙伴完成在地面上进行推销任务。 例如与电信运营商经营短信业务,因此项业务是由电信运营商拥有,他们将更有动力地去完成诸如移动IM这样的活动。 促销 SNS不上门象用户推销,因为SNS是免费的。但不等同于SNS不做促销活动。 促销活动是有合作伙伴来完成的,因为他们推销的是自己的业务,推销SNS只是因为SNS被捆绑在其中。 举例 SNS现在对顾客最有效的应用不是MSN或QQ那样的即时通信软件,而是需要体现网络传输速度的地方。 有一大批的网站需要SNS,因为SNS可以节省他们的花费,提高他们的服务质量,帮助他们获得收入。这些网站就是拥有大量内容的内容供应商。 BBS社区站长:估计有15万个社区,这些站长在多年的经营中,都拥有大量的独特的信息文件,例如歌曲、电影、考试资料、电子书等等。很多是市面上见不到的。而且他们拥有自己固定的用户群,忠诚度比门户网站用户高且集中。 内容下载网站:这些网站往往提供电影电视音乐文件,他们现在大部分都是收费的,而且有自己的收入和固定的客户群。但随着用户的发展,带宽和服务器成本越来越高。而且服务器人工管理成本成倍增长。 网络电视试水者:这类网站拥有大量投资,但在技术上很难解决规模用户发展起来之后,是否能靠免费策略支持撑下来,因为那些服务器和带宽,电信公司不会给他们预付。(拷贝盛大模式的条件已经不存在,家庭带宽市场已经成熟。) 我们将制定一份合作计划书,让合作者与我们合作: 1. 免费使用SNS,将已有内容复制到SNS中。其中他们希望收费的内容,通过SNS扫描后成为需要付费才能使用的文件。 2. 我们已经找来一家收费系统运营商,许可他们在SNS上提供网络点卡收费系统。内容供应商直接与这家公司签约(他们要收费总得找一家支付运营商)。手续费跟任何一家银行谈都是一样的。这家收费系统运营商不仅获得了新客户,而且还为推广SNS有了动力,将说服他原来的更多使用点卡的内容商在SNS上提供服务。 内容供应商将各自为销售自己的内容而说服其现有客户免费下载SNS软件。 第六章SNS的赚钱模式 赚钱模式 1. 代理银行支付系统运营商的支付业务,这一运营商在SNS上支持的商户,每产生一笔交易,SNS的将获得交易额的1%到2%。但SNS自己并不做支付业务运营商,目的是发挥支付运营商的积极性。扩大交易市场的总份额。(象MSN,QQ这类公司,他们都自己做点卡。而我们认为内容非我们所做,我们是帮助培养这个市场,只收取基础的费用。) 2. 开发各类交易系统,引入交易安全保险商业务。SNS从中代理其交易安全保险业务。每个交易保证手续费,SNS可从中获得1到5%的代理费用。这一交易安全保险业务商就是中国银联这样的金融组织。(阿里巴巴是自己做这种金融业务,而我们自己不做,而是代理金融公司的业务,这样体现我们的中立策略) 3. OEM许可证交易:我们预计大型企业需要SNS的特殊技术许可,并委托SNS为其定制解决方案。这将成为SNS的直接技术交易收入来源。 4. 战略合作交易费:某些特殊应用将有某些行业垄断公司需要使用,这包括网络电视运营商。他们如果需要特殊的应用,就必须获得SNS的技术授权。 5. 开发并经营SNS上垄断性的业务:SNS拍卖交易系统是SNS需要进行垄断经营的具体业务应用,因为以沃尔玛在全球的商业价值已经超过能源公司居于第一位。这是商业全球化的趋势所决定的,因为销售者更为重要,物质已经极大丰富,关键在于如何交易和分配。SNS上基于个人及中小公司的拍卖交易业务,将累积大量的用户互动行为,并为个人及公司致富提供崭新的渠道。 2006/5/28 QT开发简介
2006/5/12 什么是XSL?XSL(eXtensible Stylesheet Language,可扩展样式语言)是为XML文件定义的一种标识语言,它将提供远远超过CSS的强大功能,如将元素再排序等。实际上简单的XML已可被CSS所解释,然而复杂的高度结构化的XML数据或XML文档则只能依赖于XSL极强的格式化的能力而现给用户。 XSL以包含了一套元素集的XML语法规范而定义,该语法规范将被用来把XML文件转换成HTML文件或XML文档。一个XSL样式表集合了一系列设计规则以用于将信息从XML文件中汲取出,并将其转换成HTML等其它格式。这种转换将采用一种公开的方式,使其更加容易方便地被程序员描述。而且XSL还将提供多种脚本语言的通道以满足更为复杂的应用需求,因此尽管XSL是一项新的标识语言,但程序员完全可以继续充分发挥其所熟练的HTML或脚本语言的优势。XSL凭借其可扩展性能够控制无穷无尽的标签,而控制每个标签的方式也是无穷尽的。这就给Web提供了高级的布局特性。例如旋转的文本、多列和独立区域。它支持国际书写格式,可以在一页上混合使用从左至右、从右至左和从上至下的书写格式。 XSL能使Web浏览器直接根据用户的不同需求改变文档的表示法,例如数据的显示顺序改变,从而不需要再与服务器进行交互通信。通过变换样式表,同一个文档可以显示得更大,或者经过叠折只显示外面的一层,或者变为打印格式。可以设想一个适合用户学习特点的技术手册,它为初学者和更高一级的用户提供不同的样式,而所有的样式都是根据同样的文本产生的。 正如XML介于HTML和SGML之间一样,XSL标准介于CSS和SGML的DSSSL(Document Style Semanticsand Specification Language,文档样式语义和规范语言)之间。DSSSL定义格式化对象的全特征模式。由于DSSSL使用框架语法,而且是很复杂的,所以DSSSL未能得到推广应用。XSL支持DSSSL流对象和CSS对象,并对复杂的任务提供进入脚本语言的通道,而且允许扩展。实现从CSS到XSL的映射是可能的,因而内容开发商无需学习这种语言的全部。 作为一种技术预展,微软最近发布了两种XSL处理器:一个是可以从XML文档和XSL样式层产生HTML输出的命令行应用程序,另一个是一种ActiveX控件,用于在浏览器中显示XML。微软的这种XSL处理器适合在Windows95和WindowsNT环境下通过InternetExplorer4.0浏览器使用。 IBM公司及其Lotus子公司日前发布了XSL的原型,这是一个能将XML格式转换成HTML或其它Web格式的转换引擎,现在已可在WWW.alphaworks.ibm.com免费下载。这个转换引擎称为LotusXSL,基于WWW联合会最新的XSL工作草案完成的。除了能将XML文档转换成HTML外,XSL还能将XML转换为PGML(Precision Graphics Markup Language精确图形描述语言)。如果电子商务中用XML表示产品数据,用户可以使用XSL定义网站中数据的格式以及信息图形显示方式等。LotusXSL打包成一个JavaBean。用户可用LotusXSL创建样单,定义转换方式,就可将文档转换为相应的格式,供浏览器显示。 2006/2/27 什么是CMM什么是CMM 日前,国务院发布的《鼓励软件产业和集成电路产业发展的若干政策》中第17条中表示,将对软件出口型企业CMM认证费用予以适当支持,那么CMM是什么呢? CMM是能力成熟度模型(capabilityMaturityModel)的缩写,是一种用于评价软件承包能力并帮助其改善软件质量的方法,侧重于软件开发过程的管理及工程能力的提高与评估。CMM分为五个等级:一级为初始级,二级为可重复级,三级为已定义级,四级为已管理级,五级为优化级。 CMM是由美国卡内基梅隆大学软件工程研究所1987年研制成功的,是目前国际上最流行最实用的软件生产过程标准和软件企业成熟度等级认证标准。目前,我国已有软件企业通过了CMM标准认证。
CMM五级标准(中文) 第一级:初始级 Initial Level 在初始级,企业一般不具备稳定的软件开发与维护的环境。 常常在遇到问题的时候,就放弃原定的计划而只专注于编程与测 试。 第二级:可重复级 Repeatable Level 在这一级,建立了管理软件项目的政策以及为贯彻执行这些 政策而定的措施。基于过往的项目的经验来计划与管理新的项目。 第三级:定义级 Defined Level 在这一级,有关软件工程与管理工程的一个特定的、面对整 个企业的软件开发与维护的过程的文件将被制订出来。同时,这 些过程是集成到一个协调的整体。这就称为企业的标准软件过程。 第四级:管理级 Managed Level 在这一级,企业对产品与过程建立起定量的质量目标,同时 在过程中加入规定得很清楚的连续的度量。作为企业的度量方案, 要对所有项目的重要的过程活动进行生产率和质量的度量。软件 产品因此具有可预期的高质量。 第五级:优化级 Optimizing Level 在这个等级,整个企业将会把重点放在对过程进行不断的优 化。企业会采取主动去找出过程的弱点与长处,以达到预防缺陷 的目标。同时,分析有关过程的有效性的资料,作出对新技术的 成本与收益的分析,以及提出对过程进行修改的建议。
CMM的用途
1.用于软件过程的改进(SPI Software Process Improvement) 帮助软件企业对其软件(制作)过程的改变(进)进行计划、(措施)制定以及实施。 2.用于软件过程评估(SPA Software Process Assessment): 在评估中,一组经过培训的软件专业人员确定出一个企业软件过程的状况,找出该企业所面对(存在)的与软件过程有关的、最迫切的所有问题;以及取得企业领导层对软件过程改进的支持。 3.软件能力评鉴(SCE Software Capability Evaluation): 在能力评鉴中,一组经过培训的专业人员鉴别出软件承包者的能力资格;或者是检查监察正用于(进行)软件制作的软件过程的状况。
政府将出资帮助认证,北京软件将要“出国”
市政府将出资帮助 北京软件将要“出国” (北京晨报)作为国内软件业“龙头老大”的北京软件产业,由于没有取得进军北美市场的“绿卡”,在总计人民币190亿元的销售额中,出口仅占4000多万美元。市科委有关负责人日前告诉记者,政府正在出资帮助企业获得国际认证,以改变北京软件业在外国人眼中的“小作坊”形象。据悉,北京软件业年产值去年已达190亿元,占全国销售总额的三分之一。国内软件界也有这样一句话:“搞软件在北京,买软件到北京。”可是因为缺少CMM认证,北京企业的软件产品却不能进入美国市场,去年的出口额仅有4000多万美元。市科委副主任俞慈声认为,“拦路虎”便是CMM。 据北京软件产业促进中心副主任姜广智介绍,CMM认证又叫企业成熟度认证,最高级别为五级。北京虽有389家认证软件企业,但中资企业只有“联想”一家通过了CMM二级认证。据姜广智分析,难以通过CMM认证的因素很多,但其中一个很重要的原因是,目前国内评估机构中尚无一位CMM认证主任评估师。而要获取这一资格,要有十余年软件设计和管理经验,还要通过美国卡耐基·梅隆大学的两轮培训。 目前许多大企业已认识到申请CMM认证的重要性。北京市今年也出台了新规定,凡通过CMM认证的软件企业,可获政府至少30万元资助款项。市软件促进中心已决定出资培训CMM认证主任评估师,我国第一位高级主任评估师有望年内在京出现。国内从业人数最多的软件企业——中国计算机软件与技术服务公司(中软)负责人表示,“中软”有望在年内获得CMM认证。 (薛晖)
评论:实施CMM是一条没有终点的路 在大多数软件企业看来,CMM只是一张通往海外的通行证,或是一张让客户放心购买软件期货产品的质量保证书。但实际上,开始实施CMM只是踏上不断优化自己、修正自己的一个起点;起点延伸处是一条没有终点的路;路上充满了引领企业“更上一层楼”的路标。 胡大庆是摩托罗拉中国公司大中华区网络方案部研究开发中心的经理,每当他面试前来应聘的人,都会问对方:“为什么想来我们研发中心?”近来,有一个回答,他经常听到――“因为你们CMM做得好,我希望能在这儿得到这方面的学习空间。”胡大庆所在的研发中心已于2000年12月通过了CMM5级的认证。据介绍,在我国境内目前只有两家企业通过了CMM5级认证,另外一家是摩托罗拉中国公司的软件中心。这样的稀缺资源难怪让想了解、学习CMM的人趋之若鹜。 CMM软件工业化的大纲CMM(Capability Maturity Model For Software,软件能力成熟度模型)是美国卡内基梅隆大学软件工程研究所(CMU SEI)应美国联邦政府的要求开发的一种用于评价软件承包商能力并帮助其改善质量的方法。1991年,CMM1.0版本面世,1992年,他们又推出了CMM 1.1版本。CMM提供了一个评估软件开发过程的管理以及工程能力的标准,是目前国际上最流行、最实用的软件生产过程标准和软件企业成熟度认证标准。CMM标准共分为五个级别:初始级、可重复级、定义级、管理级和优化级,从低到高,标志着软件生产的计划度越来越高、生产周期越来越短、成本也越来越低。业内人士认为,“CMM既是软件企业走向国际市场的通行证,也是用来衡量类似期房的软件质量的保证书。” 除此之外,CMM还是一个软件生产工业化的产物与检验标准,是软件工程化的核心环节。“CMM为软件企业进入工业时代制定了一个大纲。”于是,一些以往就专注于提供软件工程开发解决方案的软件公司就以这个“大纲”为标准,帮助软件企业克服提升质量过程中的各种矛盾。瑞理(Rational,Nasdaq的100个指标股之一)软件就是这样一家提供软件工程化工具的公司,摩托罗拉网络研发中心从CMM4就开始使用它的软件。 在瑞理耳濡目染了许多软件工程化的理论,使瑞理中国公司的技术总监吴穹对CMM有着更深一步的认识。“它告诉企业怎么做软件工程,有哪些要求,如何检验,每个阶段的重点是什么、应该做什么。这个框架为软件工程化提供了一个循序渐进的模式,并不是将这个过程简化为一步――从0到1。”吴穹说。 软件企业实施CMM基本上都是从2级,即可重复级起步的。吴穹说:“二级已经不简单了。对一个软件企业来说,达到二级的要求就基本上进入了规模开发,开始跳出作坊式的开发模式,能把一个项目的经验或好的方法重现在下一个项目中,基本具备了一个现代化软件企业的基本架构和方法,具备了承接外包项目的能力。”从二级一直往上走,是不间断的改进过程。“效率不断在提高,时间控制更严格,品质更有保证,管理更有序。可以逐渐具备承接跨地区、跨部门的大型项目的实力。”根据SEI的统计,软件企业在引入CMM后劳动生产率平均增长了35%;错误比率平均减少39%;平均成本回报率为5:1。 CMM重构企业 在胡大庆的时间表上,1995年底才成立的摩托罗拉中国公司的网络研发中心,在实施CMM上三年内完成了三级跳:1998年内部评审,取得了等同CMM3级的水准;1999年底达到了第4级;2000年的12月通过了5级。 “但我们是从成立之日起就开始着手准备实施CMM的,算起来也有5年半的时间了。当初积极准备实施CMM是因为摩托罗拉的高层质量管理委员会在90年代中期制定了一个政策,明确规定所有从事软件研发与测试的部门都必须采用CMM,并在规定年限内达到三级或是更高的级别。这是一个研发政策。”摩托罗拉的这个全球研发政策无疑是其中国网络研发中心与软件中心达到CMM5的最大推动力。在实施CMM的整个过程中,胡大庆很重视研发中心步入CMM的起点――1998年做的内部评估。这次评估“让拿着地图的我们不但明确知道目的地是什么地方,而且还找到了自己究竟在什么位置。”在吴穹的眼中,侧重于软件生产过程的CMM的实施,被提升到软件企业重构的地位。摩托罗拉中国网络研发中心5年多来的CMM之路正佐证了他的这种看法。 胡大庆在清点5年多来的收获时,可谓颇丰。 “最根本的收获是每一个具体参与其中的员工,无论是项目经理,还是工程师,甚至一些高层管理人的做事方法逐渐变得标准化、规范化了。”以往,软件企业某些关键的开发人员离开后,往往会给企业造成很大的损失,甚至使一个项目前功尽弃。而在CMM框架中,运用2级中的一个基本软件工程(KPA)就可以使员工自觉而规范地管理软件生产过程中所有的资源、阶段性产品、产品源代码、文件以及最终生成的产品。“严格遵循这套管理方法,程序员写完一段代码,经过一定测试之后,一旦提交到某个公共地方时,这个东西就不是你的了,已经成为项目小组或者是整个企业的了。如果你想对它进行任何修改,都要按照规范的程序把它从公共区域提取出来。”规范的过程控制,将软件企业由于人员流动带来的风险降到了最低,同时还促使他们养成良好的职业素养。 受益者还有摩托罗拉研发中心的项目经理们。CMM可以有效地缩短项目组中新参加人员进入状态的时间。“过去,给新到项目组工作的同事解释流程、规矩很费劲。要是新加入的员工经过CMM的基本培训的话,进来以后,只要稍微澄清一下,他就能知道怎样按定义好的文件与流程来做事情。”项目经理还可以从CMM中获得一整套完整的体系,保证项目良性运转。在项目开始的时候,“他如果不知道项目该怎么做,我们参照CMM框架定义好的文件会规定他应该做什么。比如,有一些样本模式告诉他项目计划书怎么写,如何召开例行会议等。他只要按照定义文件执行就可以很快上手了。”这个体系无疑加速了资深工程师转向项目经理的速度。 在传统模式下,项目开发的某个阶段,尤其到最后阶段,项目经理会经常发现“成本控制不住了,或是时间来不及了。”这种情形下,项目经理就需要做危机管理,动用“救火队”,或是让客户宽限一些时间,或是游说客户加一些钱,否则就只好牺牲软件产品的质量了。“对于采纳了CMM的项目经理或者说比较成熟的企业来讲,这样的事情也会发生,但是它会是一种可控或者能预见到的。在做项目计划的阶段就事先把突发事件可能发生的情况,一旦发生时必须采取的措施都列出来。于是,传统的危机管理质变为可控的风险管理。”尽管项目经理从CMM实施中获益良多,但当初,“最大的阻力也来自于第一线的项目经理。”因为,实施CMM需要在一线打拼的项目经理放弃几年甚至是十几年形成的那套非常熟悉的套路,要完全按照一种新的规律做一些不熟悉的事情,不愿意肯定是当然的。“一方面要求我提高质量,另一方面又要求我做一些没做过的事,同时谁也没答应我可以延长工期,只有加大工作量了”。但一旦度过艰难的改变阶段,不断的获益使项目经理由CMM实施的阻力变成了推力。 最大的获益者无疑是摩托罗拉中国的网络研发中心。通过实施CMM,他们的企业文化发生了明显的变化。胡大庆说:“CMM整个实施过程也是一种积累,为我们积累了很多有形和无形的资产。”这种积累甚至小到一个会议该如何开。“以前,我们经常会有一些清谈清议的会。大家没什么准备就来开会,说了半天,有些人不关心;即使发表了不少意见,也没有形成任何结论。”现在,他们的会议是这样开的:会议之前要做充分的准备,让参与会议的人知道要谈的议题,每个相关的人甚至要看到发言的主要内容。如果对议题或发言有什么意见可能在会前就有所反馈。同时,会议一定要有人做记录,所有议论和结论都要记下来。会议在结束之前一定要明确这个会议的决议是什么,有哪几项工作必须做,由谁来做,在什么时候做完。会后要将记录发给大家,还有人专门进行检查;下一次会上的第一个议程,就是总结上一次会议决议的执行情况。 胡大庆认为“这种一点一点积累起来的习惯性的概念、做事方法非常重要。”没有最好只有更好国内有一个刚刚通过CMM2的软件企业为之花费了400万元人民币。面对这样一个数字,胡大庆说:“我们没有一个具体的数字,但我们所投入的费用肯定比400万元要多。”无法确切统计投入,是因为CMM的实施是一个没有终点与止境的过程,即使通过认证,仍需要长年将CMM体系的实践与软件开发融为一体。由于CMM只提供一个持续改善软件生产质量与过程的框架,并没有制定出具体的方法,因此,就要求实施CMM的企业要在实践中不断发现问题,定义文件与流程,在否定自我中持续优化自身。CMM并没有为实施者界定一个最好的境界,它将不断地追求更好定义为常态。 CMM认证不是终身的,“按照官方的说法它的有效期一般是两年。”在摩托罗拉公司内就有在通过较高的级别后,重新再做评估时掉到了较低级别的先例。“CMM5级是优化级,之所以称之为优化级不是因为它比4级更高,它强调的是一个持续不断的优化过程。如果你在某一个阶段停顿下来,那么不进则退,你就有可能会掉下去。”摩托罗拉曾有一位资深人士告诫胡大庆:“你们现在面临的困难不是说能够在什么时候拿到CMM4级或5级,而是怎么来保持。” 为了保持在CMM5上,摩托罗拉中国网络研发中心以年度来规划,每年都会对上一年的CMM做一次评估。“评估结果会告诉我们哪些地方做得好,哪些做得还不够。根据这个结果,我们再制定下一年度改善的规划。这个规划要做得非常具体,包括今年的大目标是什么;在这个目标下要做10件或20件事;这些事由谁负责,什么时候做完。规划制定完以后,就由我们的软件工程定义组(SEPG)来推进,并通过会议制度定期检查这些事情究竟做得怎么样。”胡大庆认为,在不断优化自身的过程中,“建立一套机制很关键。”机制保障之一来自他们内部的CMM推进核心组织――SEPG,它的成员包括研发中心的主要负责人、中层项目经理、骨干工程师以及专门从事质量确保定义工作的员工。这个组有10个人(整个研发中心一共有300名员工),他们的职责不是从事一般的软件编程,而是专门来负责定义文件,进一步改善日常工作。 培训是另一个保障机制。“CMM要求全员参加培训。目前员工的培训率达到90%以上。包括秘书在内都要参加CMM的培训。”此外,胡大庆觉得,好工具的引入可以“避免人工犯错的机会”。这样的工具大多是控制软件生命周期的软件。“到了CMM4或更高阶段,很多东西都基于统计分析的结果。比如,每个项目经理在分配一个月的工程量的时候,就不能拍脑袋凭经验安排。他需要借助专门的软件工具,登记员工每天的工作量,最终通过统计报表直接产生出科学的工作量安排。” 吴穹称,自己从这些软件工具中获益匪浅。“在我读研究生的时候,我曾经用瑞理开发的面向对象分析设计工具做过一个项目。在开始编码前,我们用它搭建出了项目的整体架构,尽管前期用于做分析、设计的时间有4个月,但用在编码上的时间仅有两周。这个工具改变了我以前边想边干的编程方法,让我在施工前就有了一张完整的施工图。施工时,什么样的砖码在什么地方很清楚。”超越认证的制约经常可以在CMM前看到“通过”、“认证”等动词。瑞理中国区销售总监左允京认为冠在CMM身上的这些动词都不准确。在他看来,应给CMM这样一个限定――“实施软件工程,达到CMM标准。”他说:“单纯强调CMM认证,如果没有积累的话,大概两三年之后,就有可能软件企业墙上到处都贴着CMM的认证证书,而CMM却像前几年的ISO9000一样有名无实。那样就是CMM的悲哀了。”要想避免这种局面出现,就要超越为了认证而认证。 摆脱认证的制约,成为胡大庆总结成功经验中最重要的一点。“在实施CMM前,软件企业一定要讨论清楚是不是要采用CMM。讨论的基础就是,要将CMM与企业的最终利益、发展目标统一起来。如果把追求通过认证作为第一目标,那么,CMM对企业的改善是不可持续的。而在实施中首先要想企业最大的问题在哪,如果CMM可以帮我解决问题,然后再决定实施CMM。”第二个便是企业领导层的认识和决心。“我们之所以成功,就是因为我们历任的总监都非常重视CMM的持续实施。”这样的认识与决心,在CMM的实施影响到了企业暂时利益的时候尤其重要。通常,新工具的实施都是一个趋势:会在初始阶段出现负效果。这个时候要是没有充分的信心坚持下去,那就会半途而废或者新工具被折中为“四不像”。 摩托罗拉中国公司网络研发中心在由CMM3向CMM4提升的时候就出现过负增长。“在那一个阶段投入大了,因为4级要求强化管理,这非常难做,需要开发很多工具,要求大家在质量上花更多的时间,对一个软件企业而言,时间就是成本。”在“反复”面前,摩托罗拉研发中心的领导层表现出了很强的“抗冲击力”。 今年4月刚刚通过CMM2认证的西安博通公司的总经理李台元觉得,CMM带来最大的改变就是把隐性管理变为了显性管理。这将CMM背后强大管理需求推到了前台。在实施CMM过程中简化管理是许多企业的软肋。其中,最突出的就是缺少技术管理人员。“好的项目经理太少了。”我国大多数技术管理人员走的是一条“技术优则仕”的道路。在编码面前得心应手的程序员未必能成为优秀的管理人员。管理人才的匮乏,成为走在CMM这条没有终点的路上的软件企业难以逾越的路障。 选自《IT经理世界》
东软通过CMM 3级认证 ZDNet China消息 2001年6月,软件博览会传来喜讯,东软股份正式通过了美国Process Strategies,Inc.与美国Soft Tech Developement Inc.组织的CMM 3级评估 。东软成为了国内第一家通过CMM 3级认证的中国软件企业。 火热的CMM认证市场 CMM是什么? CMM标准共分五个等级,从第一级到第五级分别为:初始级、可重复级、定义级、管理级和优化级,从低到高,软件开发生产的计划精度越来越高,每单位工程的生产周期越来越短,每单位工程的成本也越来越低。 认证源于需求 面对如此成绩,东软以惯有的低调方式处理,并没有就此大肆造势,过多宣传。 按照东软集团软件工程组经理,资深咨询顾问何晓源女士的话说,东软并没有将CMM认证当成是形象工程在做,东软之所以要通过CMM 2,CMM 3,以至于将来过CMM 4、CMM 5都是出于对自身业务的不断调整,对质量的不断改进。纠其根源,是按市场需求行事。 近年来,东软集团想要拓展出口业务,尤其看好欧美市场。在与欧美市场接触时发现,ISO9000认证对于软件开发质量并没有过多的指导意义,无法满足需求。同时,发现要开展欧美业务,与众多的印度软件厂商竞争,需要改变软件企业手工作坊式的运营方式,与国际市场接轨。就需要提高开发效率,降低成本,提高产品质量,而这些,正是CMM认证标准能达到的。出于这种考虑,东软才毅然决然地走上了CMM认证之路。 CMM认证之始 但是据何晓源女士介绍在通过CMM认证过程中,困难并非来源于大量资金的投入,而来自三方面: 第一是对于标准的理解问题。 第二是执行中的困难问题。 第三是习惯问题。 问及何晓源女士通过认证有没有制胜因素时,何女士认为,除了努力形成文档化的制度,规范和模板,不断提高软件检查和监督质量外,更重要的是来自管理层的支持,该强制执行时就要使用行政手段。同时,推行CMM认证的领导班子必须要有较强的技术开发背景,对于软件开发各个环节都要什么熟悉,才能真正理解CMM认证中的各种标准。而同时也要求,推行者要求较强的沟通,培训,讲解能力。 在祝贺东软通过CMM 3级认证时,我们的企业也应该摆正对待CMM认证的态度,过不过CMM认证并不重要,不要被几张证书所累,真正重要的是,借鉴CMM,改善企业的流程管理质量,提高中国软件企业在国际市场上的竞争力,这才是中国软件走上正轨的硬道理。 什么是ARM 英国ARM 公司是全球领先的16/32 位嵌入式 RISC 微处理器解决方案的供应商,向全球各大领先电子公司提供高性能、低成本和高效率的RISC 处理器、外设和系统芯片技术授权。ARM 还为开发完整系统提供综合技术支持。ARM 的微处理器核技术广泛用于便携式通信产品、手持运算、多媒体和嵌入式解决方案等领域,已成为RISC 标准。 2005/12/18 SCORM: E-Learning的国际技术标准SCORM: E-Learning的国际技术标准 问: E-Learning的国际技术标准SCORM是在什么条件下应运而生的? 余胜泉: 计算机被发明后不久,心理学家和教育学家就认识到了计算机的教学价值和潜力。随后 1997年,美国国防部(DoD)想利用学习和信息技术使教育现代化,并促使政府、学院和商界共同合作开发数字化学习(E-Learning)的标准,于是就提出建立高级分布式学习(Advanced Distributed Learning)的方案。ADL的长远目标是使学习者随时随地可以得到他们想得到的高质量的教育、培训或是帮助,而且还要适应不同学习者的不同需要、知识背景、兴趣爱好和认知体系,使学习更可靠,更有效,还要能减少教育培训的成本,做到“物美价廉”。有了网络这个传递平台,传递什么样的学习资源成为ADL能否实现长远目标的关键。现有的一些学习资源,不能满足ADL的高要求,例如,现有课件因缺乏统一的格式和结构,难于适应将来网络教学共享资源的基本要求。不同系统使用不同的文档格式,各自开发独立的课件管理系统,系统之间无法进行交流,即便在系统内部,内容及课件的更新也不容易。于是ADL的开发者开始把焦点集中到定义可重复使用的学习对象,开发新的内容模型,内容包装等问题上,于是SCORM应运而生。 SCORM是英文Sharable Content Object Reference Model的缩写,即可共享内容对象参考模型。 问: 请您谈谈E-Learning的 国际技术标准SCORM都包含哪些主要内容? 余胜泉: SCORM定义了一个网络化学习的“内容聚合模型”(Content Aggregaion Model)和学习对象的“实时运行环境”(Run-time Environment)。简单说,它是为了满足对网络化学习内容的高水平要求而设计的模型,参考了一系列相关技术规范。这个模型由内容模型(Content Model)、元数据(Meta-data)和内容包装(Content Packaging)三部分组成。SCORM内容聚合模型的目的是提供一个公共的方法,把学习资源组合成学习内容。它还定义了如何确认和描述学习内容,怎么整合成一个课程或课程的一部分,学习内容如何在学习管理系统和内容知识库这样的系统之间移动。许多组织在SCORM的开发方面做出了重要的贡献,如欧洲远程教学和分布式网络联盟(ARIADNE)、航空工业计算机培训委员会(AICC)、电气和电子工程师协会学习技术标准委员会(IEEE LTSC)、教学管理系统全球化学习联盟(IMS)等。
问: E-Learning的国际技术标准SCORM关注的核心是什么? 余胜泉: SCORM关注的核心是学习内容和学习管理系统之间的问题。学习管理系统(LMS: Learning Management System)具有发送、跟踪、汇报、评估和管理学习内容、学习者学习进展情况、学习者之间交互情况等等一系列的功能。它运用广泛,从简单的课程管理,到相当复杂的企业范围的分布式环境,都有它的用武之地。在 SCORM中,学习管理系统包含在服务器端的环境中,它有能力决定发送什么学习内容,什么时间发送,并跟踪学习者的学习情况。图1所示的综合模型就展示了学习管理系统提供的服务。 在SCORM中,LMS指一套基于服务器的应用运行环境,在这个环境下,系统可以对传送给学生的学习内容进行智能控制。也就是说,在SCORM中,LMS可以决定什么时候传送和传送的内容,并在学生学习内容期间跟踪学生的进展。 SCORM关注的是内容和LMS的主要接口点,但不涉及一个具体LMS所具备的特征和性能。 问: E-Learning的国际技术标准SCORM与其它国际标准有什么关系? 余胜泉: SCORM的开发参考利用了它们已有的一些规范和标准,并进行适当的改编、综合,才形成了更为完整、更容易执行的SCORM模型。这些标准主要来源于AICC、LTSC、 IMS等国际标准化组织的相关技术标准,可以说,SCORM是集百家之长。用一个形象的比喻,把SCORM看作一个书架,书架上的“书”就是各个组织的标准规范,如AICC的数据模型、IEEE的元数据字典、IMS的内容包装。这些“书”可以分成两大主题: 内容聚合模型和实时运行环境,如图2所示。
2005/11/27 UI
一篇关于评价中国UI的文章,转载过来!
界面设计(UI Design),交互设计(interactive design),可用性研究(usability research),人力因素(human factors),信息结构工程师(information architect)
在美国,这些工作职位的区分并不是很容易。也许不同的公司有不同的职位名称和工作重点,但是有一点可以肯定,他们设计的产品与人类都有有强烈的互动性。
在与国内同行探讨中,不止一次有朋友将自己的设计作品Email过来,希望得到我的意见。打开Email,看到的只是一个截图(Screenshot),就有些纳闷,UI设计怎么能用静态的图像来表现呢?虽然我也接受过一些正式的色彩和Layout训练,可是凭心而论,可能我没有什么资格对那些作品发表评论,因为他们的确色彩搭配赏心悦目,Layout结构合理,个人风格突出,我只能说,朋友,Good Job,但是你错过了UI设计中最重要的部分。UI设计不只是给人提供视觉上的享受,真正UI设计的好坏,必须要设定一个任务,从头至尾使用一遍才能知道。 UI的概念是动态的过程,是逻辑的推理,也是各种状况的预测。如果衡量UI设计只有一种标准,那就是用户体验(User Experience). 用户体验是以用户为中心的设计(UCD/User Centered Design)中最重要的一个部分,强调的是过程,是软件对用户行为(User Action)产生的反应与用户期待值的误差测试,也就是说,这种误差越小,也就越符合以用户为中心的设计原则。
在西方,UI行业的兴起要归功于以计算机为主的高科技迅速发展,尤其是视窗操作系统的普及,然而广义的UI概念在十七世纪的工业革命阶段就已经开始,只不过,把易用性带入机械的设计还是一种无意识的举动,再加上当时几乎所有的工业程序都是由熟练工人一手操办,就更加减弱了易用性设计的能见度(visibility)。
在我从事UI设计的最初两年之中,对于UI的定义有个极大的转变,这也从而影响了我的设计风格。在我的定义里,只有两种用户,过程为主的用户(process oriented end user),和结果为主的用户(result oriented end user)。过程为主的用户的典型例子是电玩族,他们追求的终级目标就是视觉听觉的冲击和享受,最终游戏的结果反而变得不是那么重要了。此类设计对视觉和创意的要求是极为挑剔的,绝大多数设计师都有深厚的美术功底。然而,与结果为主的用户设计相比,它的市场和受众都要小的多。
结果为主的用户不在乎用什么样的方式完成任务,但是任务必须以最短的时间,以最简洁的方式,最精确的运算结果来完成。这些用户通常是工业化软件的受众,工作环境以大型企业为主,软件最终运算结果对于企业的运行和管理有着重大的意义,稍有偏差,可能会对企业产生重大损失。对于此类用户的产品设计人员来讲,绝大部分部分时间可能用在设计任务的逻辑流程(logical task flow),以期最大幅度的符合人脑的思考方式和认知过程(cognitive process)。
平面设计(包括icon, logo, button, etc.)至多是UI定义中很小的一部分,也是微不足道的一部分。并不是我轻视它,在以前的论述中已经提到过,目的为主的用户对于完成任务的欲望已经大大超出了对色彩的挑剔。同时,视窗和JAVA环境下的开发更多的朝着工业化和标准化的方向迈进,这已经给专攻色彩和搭配为主的人没有留有太多的发展余地。
在这里花了很多时间探讨对UI的定义,虽然知道我的看法对一些同行来说是偏激的,最主要的目的是要传达一个讯号,从业者以及业界对于UI的定义可能会决定UI在中国有多大程度的发展,甚至存亡,如果把它转换成眼前的利益,则是UI设计师能否在企业中受到与工程人员同等的重视,以及福利。也许你会说,中国有自己的国情,美国的东西未必能在中国行的通。其实即使是在美国,不是所有的公司都会有专门的UI组,很多工程部门对UI存有偏见,错误的认知,甚至轻视和嘲讽。人机交互科学在美国已经经历几十年的发展,过程从未顺利过。然而,随着学术界将此门学科正式列入大学,己及研究所课程,业界更多投资在将研究成果转换成生产力的过程中,人力因素(human factors) 已经逐渐形成自己一个清晰战略发展态势。
UI在中国发展需要是一个自上而下的推动性改革。中国的软件开发已经很大程度上与西方接轨,我们没有那么多时间让真正意义的UI慢慢渗入开发过程。
在中国,将一个新的概念或产业名称带入产品开发,并使其发展壮大,最大的源动力应该是投入的回报率。这也是许多同业人推荐将UI设计带人尝试性的项目,用成功的案例来让更多的企业信服并采纳用户为中心的设计方法。
然而,能够找到一个有效的商业环境,让相仿产品在其他方面势均力敌,最终凭借UI设计的优势胜出的案例几乎是不可能的。当一个产品成功打入市场的时候,人们看到的是其强大的功能,上乘的质量,周密的市场策略,合适的价格定为,甚至是美观的包装设计,而很少有人会将亲和性的界面设计放在功劳簿上。界面设计所倡导的是可用,易用,然而在消费者心中可用,易用是理所当然的,所以当产品具有了以上优势,设计因素会被忽视,而当一个产品因设计不良出现问题,可用和易用便会被揪出来大加鞭挞。
为弥补设计不足的印象,或者说给UI设计找一个正当性,于是某些企业更加强调UI设计中德美观和创意性,而忽略了易用的开发投入。这在短期中可能会有帮助,因为色彩创意是看得见模的着的东西,会对客户有暂时性的心理暗示,然而长期来讲,会因忽略易用而使产品冠上消极的印象在长时间内很难消除。而对UI错误的定义则可能会导致从业人员沦为产品后期装饰和创意而无法参与产品的早期开发。
毫无疑问,UI设计优势在产品竞争中扮演的重要角色是无庸置疑的,但是,这种优势实现和意识都是长期性的,而非短期行为。他意味着需要相当长的时间让客户了解到,但是一旦形成此种心理上的优势,就会在很长的时间内存在,会将易用的心理暗示代入整个产品的后续开发甚至整个品牌。
UI以及相关行业在中国的发展应该不是自下而上的,受制与消费者缺乏与之相关的概念要求以及作为专门学科未在大专院校及研究部门广泛设立的现实,无法由消费者和终端用户推动这一行业的发展。时间上,中国的硬件配置,软件开发技术与西方不相上下,我们没有那么多时间让真正意义的UI慢慢渗入开发过程。
当然UI设计的定位有一个很大的利益分配的问题。任何一个新兴行业的兴起都是以另外一个较老旧的行业作为牺牲代价。在我们们所说的较理想的设计环境中,它所意味或暗示的东西是目前正在作真正意义上UI设计或结构的那一批人将不得不放弃现有的资源,这些难题不是能用技术来解决的,也无法经由一些人的呼吁,或者几个个别的案例来说服即得利益的一批人放弃手中的资源。
在企业内部研发部门需要一批能够从战略角度和长期利益出发认识到UI设计重要性的高级管理人才,从而将UI设计在产品生命开发周期中正式的程序化,制度化,创造工程与设计部门共同探讨产品的早期设计的机制和公司文化,并主动向客户宣传用户为中心的设计理念,增加UI设计的能见度。同时,
当UI设计不再被外界偏视为装饰性的行业,同时不被本公司的工程部门轻视时,与之相关的培训和大学科研部门也会加大投资力度,培养出更专业的人才,行成良性循环。
当然,如何将UI设计合理有效的整合到产品开发过程当中以期产生最大生产力,在美国也是一个未知数的课题。不同公司根据开发部门大小,产品特性,公司文化等总结出适合自己的一套东西,很难说哪一种更好。我在近两年参与旧金山湾区交互设计特殊兴趣小组(www.baychi.org)活动时,曾非正式的访问了硅谷几家企业的资深设计师,这其中包括IBM,Adobe,Google, 和WebEx,他们代表了不同大小,行业,设计平台,以及公司文化。我将在以后的文章里将采访的内容作一个总结,与大家分享。从业人员的培训是至关重要的,培训方向应该是从实践到理论。
人机交互科学是跨学科的科学,包括了计算机科学,心理学,社会学,人类学,以及工业设计。同时,根据UI部门分工细致程度,对背景要求也不一样。在中国尚无任何一家高等院校提供人机交互学学位教育的情况下,对从业人员的在岗教育显得格外重要。
其中有数次跟国内同行交流中,听到最多的抱怨是对设计总体格局缺乏控制权,或者只能在有限空间发挥自己的设计理念。这里面固然有程序上的问题,但我的总体感受是,许多设计师把自己的工作范围定义在了狭小的空间而未能在业务的广度和宽度上拓展自己的知识。UI设计本身有很多共通的地方,然而,今年来高科技的发展,已经将计算机科学分工更细,每一门附属学科每天都在变化。也许穷尽一个人毕生的经历,也只能对某一学科略知一二,所以我无法想像,作为一个UI设计师如何能在不了解产品和技术的情况下参与与工程部门的决策,如何能在只了解颜色和构图的基础作出精彩的设计,毕竟,我们的产品不是给人看得,而是给人用得。
目前大部份UI从业人员没有受过正规人机互动教育已经是不争的事实,从实用的角度出发,由实践到理论的培训方法也许更加快速有效。 Ruby Ruby,一种面向对象的脚本语言。 它综合了perl,python,java等语言的特点写成,有强大的文字处理能力,简单的语法,完全的面向对象。下面是我找到的关于别人爱上ruby的37个理由,也正好显示出来它的优点!
1. 它是面向对象的。 这表示什么意义呢? 如果问10个程序员,你也许会得到12种结果,你有你的看法,我不会试图去改变你的看法。但是有一点,Ruby提供了对数据和方法的封装,允许类的继承,对象的多态。不像其它语言(C++,Perl等),Ruby从设计的时候开始就是一种面向对象的语言。
2. 它是纯面向对象的语言。难道是我多余?不是这样的,之所以这么说,因为Ruby中一切都是对象,包括原始数据类型(primitive data types),比如字符串,整型,都表示的是一个对象,而不需要Java那样提供包装类(wrapper classes)。另外,甚至是常量,也会被当作对象来处理,所以一个方法的接收者,可以是一个数字常量。 3. 它是动态语言。 对于只熟悉像C++,Java这样静态语言的人来说,这是一个重大的概念上的差别。动态意味着方法和变量可以在运行时候添加和重定义。它减少了像C语言那样的条件编译(#ifdef),而且容易实现反射API(reflection API)。动态性使得程序能自我感知(self-aware),比如运行时类型信息,检测丢失的方法,用来检测增加方法的钩子等。在这些方面Ruby和Lisp和Smalltalk都有一些关系。 4. 它是一种解释执行的语言。这是一个负杂的问题,值得重点解释一下,也许这个特点会因为性能的原因而引起从优点变为缺点的争论。对于此,我有几点见解:1.第一:快速开发循环是一个巨大的好处,这要得意于Ruby的解释执行。2.多慢才叫慢呢?在说它慢之前先定一个慢的基准。3.也许有人要批评我了,但我还要说:处理器每年都在变得原来越快。4.如果你真的很在意你的速度,你可以用C开发一部分你的代码。5.最后,从某种意义上说,这是一个还在争论中的问题,没有一个语言天生就是解释型的,世界上没有哪个法律进制开发一个Ruby编译器出来。 5. 它理解正则表达式。 很多年之前,正则表达式只是用在UNIX的工具如grep或者sed中,或者在vi中进行一些一定的查找-替换等。Perl的出现解决了这些问题,而现在,Ruby同样也能做到这些。越来越多得人认识到了这种字符串和文本处理技术的难以置信的能力,如果你对此表示怀疑,那么请去看一下 Jeffrey Friedl的书Mastering Regular Expressions,然后,你就应该不会有什么怀疑了。 6. 它是多平台的。 Ruby可以运行在Linux,UNIX,Windows,BeOS?,甚至MS-DOS。如果我没记错,甚至还有一个Amiga 版本的 7. 它是派生来的。 这是一件好事情吗?抛去书本上的知识,它是有用的。牛顿曾说过“我如果看得比别人远,那是因为我站在巨人的肩膀上”。Ruby同样也是站在巨人的肩膀上,它借鉴了Smalltalk, CLU, Lisp, C, C++, Perl, Kornshell等的优点。在我看来它的原则包括:1.不要重复制造轮子。2.不要修补没有损坏的东西。3.最后一个也是比较特别的,它能平衡(Leverage )你已有的知识。你了解UNIX的文件和管道,没关系,你可以在Ruby中继续用,你用了两年的时间学习了printf 指示符,不必担心,Ruby中你也可以使用printf。你知道Perl的正则表达式处理,那么你也就学会了Ruby中的正则表达式。 8. 它是创新的。 是不是觉得这个和第七条矛盾了?也许是有一部分矛盾,每个硬币都有两面。一些Ruby的特点都是创新的东西,比如非常有用的Mix-in,也许这个特点会被后来的语言借鉴。(注:一位读者指出Lisp早在1979年就有mix-in了,这是我的疏忽;我应该找个更好的例子,并且能确信它。) 9. 它是非常高层次的语言。(Very High-Level Language :VHLL) 这是一个容易引起争论的话题,因为这个术语还没有广泛使用。而且它的意思比起OOP来说还是有讨论余地的。我这么说,指的是Ruby能支持复杂的结构和这些结构的负杂的操作,而需要的指令非常少,这与最小努力原则(Principle of Least Effort)一致。 10. 它有一个灵巧的垃圾收集器。 像malloc和free 这样的例程已经是昨天的恶梦了,你不需要什么回收内存的操作,甚至是调用垃圾收集器。 11. 它是脚本语言。 不要因为此就认为它不够强大,它不是一个玩具。它是完全成熟的语言,用它能轻松的完成传统的脚本操作,比如运行外部程序,检查系统资源,使用管道,捕获输出等等。 12. 它是通用的。 Kornshell做的东西它也可以做,C语言做的东西它也可以做的很好。你可以用它写一个只运行一次的只有10行的程序,或者对一些遗留程序进行包装,你想写个web server,或者一个CGI,都可以用Ruby来写。 13. 它是多线程的。 Y你可以用一些简单的API来写多线程程序,甚至在MS-DOS上都可以。 14. 它是open source的。 你想看它的源代码吗?可以,你也可以提交补丁,参加广泛的社区,包括它的创造者。 15. 它是值觉得。 Ruby的学习曲线比较低,而如果你翻过了一个坎,你开始“猜测”事情是怎么工作的,而且你的猜测很多时候都是正确的。Ruby坚持最小惊讶( Least Astonishment)的原则。 16. 它有异常机制。 像Java和 C++一样, Ruby 中也有异常机制,这意味着你不必因为返回值而将代码弄得凌乱不堪,很少的嵌套if语句,很少的意大利面条似的逻辑,更好的错误处理。 17. 它有一个高级的数组类:Array。 Ruby中数组都是动态的,你不必像pascal那样在声明它的大小,也不必像C,C++那样为它分配内存。它们是对象,所以你不必关心它们的长度,实际上你不能"走到末尾(walk off the end)"。这个类提供了各种方法,使得你能够根据索引,根据元素来访问数组内容,也可以反向处理数组。你也可以用数作作为set,队列,堆栈等。如果你想用查找表,可以用哈希结构。 18. 它是可以扩展的。 你可以用C或者Ruby来编写外部库(external libraries),同样,你也可以修改已有的类和对象。 19. 鼓励文档编程(literate programming)。 你可以在Ruby程序中嵌入注释或者文档,这些文档可以用Ruby的文档工具提取和处理。(真正的文档编程者可能认为这是必须的基本东西吧) 20. 创造性的使用标点符号和大写字母。 比如一个方法返回一个boolean型(Ruby中并没有这种说法),那么一般这个方法最后都以问号结尾,如果一个方法要修改接收者本身,或者具有破坏性,则用一个感叹号结尾,简单,直觉。所有常量,包括类名,都以大写字母开头,所有对象属性以@符号开头。这有匈牙利命名法的实用性,但是没有视觉上的丑陋性。 21. Reserved words aren't.It's perfectly allowable to use an identifier that is a so-called "reserved word" as long as the parser doesn't perceive an amibiguity. This is a breath of fresh air.(能用保留字作为变量吗?没看太懂。) 22. 支持迭代器。 这使得你可以给一个数组,list,tree等对象传递一个块,然后对它们的每个元素进行block调用。这个技术值得深入学习。 23. 它的安全性。 Ruby借鉴了Perl中基于$SAFE变量的分层控制机制 。这对于CGI程序来说非常有用,可以防止人们攻击web服务器。 24. Ruby中没有指针。 像 Java一样,和C++不同,Ruby中没有指针的概念,所以免除了关于指针语法和调试的头疼。当然,这也意味着最底层的程序开发将会很困难,比如访问一个设备的控制状态寄存器;但是,我们可以用一个C库来调用。(像C语言程序员有时候要使用汇编语言一样,Ruby程序员有时候也要使用C语言来完成一定的任务) 25. 它使得人们专注于细节。 Ruby中有很多同义词和别名,你也许不记得字符串或数组的长度是size还是length,没关系,它们任何一个都可以工作。对于Range来说,你可以使用begin 和end 或者使用 first 和 last,它们也都工作。你想拼写indices,结果写成了indexes,没关系,这两个都一样。 26. 非常灵活的语法。 方法调用时候括号可以省略,参数之间只需用逗号分割。类似Perl风格的数组定义可以让你不用全部使用引号和逗号定义一个字符串的数组。关键字return可以生路。 27. 丰富的库函数。 Ruby提供了线程,socket,有限对象持久化,CGI,服务器端可执行的,数据库等其它库函数,还有对Tk的支持等。还有很多其它的库函数。 28. 本身自带调试器(debugger)。 在完美的世界中,我们才不需要调试器,但是这个世界不是完美的。 29. 交互式执行。 可以用Ruby像Kornshell那样执行。 (这可能是本页最具争论的一点,我不得不承认,Ruby真的不是一个很好的shell。但我仍然坚持,基于Ruby的shell是一个不错的主意。) 30. 它是简明的。 不像Pascal那样要求if后面跟着then,while后面跟着do 。变量不需要声明,它们不需要类型。返回类型不必指定,关键字return 可以省略,它将返回最后一个表达式的值。另一方面,它也不像Perl或者C那样复杂难懂。 31. 它是面向表达式的(expression-oriented)。 你可以轻易的使用 x = if a<0 then b else c 这样的表达式。 32. 语法砂糖(syntax sugar)。 (像Mary Poppins解释:一勺语法的糖能使语义被接受) 。如果你想对数组x进行迭代,可以用for a in x。你也可以用a+=b代替a=a+b,这都行。很多操作符其实在Ruby中都是方法,这些方法的名字比较直观,短小,有着便利的语法。 33. 它支持操作符重载。 如果我没有记错的话,早在很久之前的SNOBOL就提供了这个功能,但是直到C++它才变得流行。虽然它可能乱用而出错,但是这仍是一个非常不错的优点。另外Ruby自动定义操作符的赋值版本,比如,如果你重定义了+,那么,你同时得到了一个+=操作符。 34. 支持无限精度的数字。 有人会关心 short, int, long吗,只需要使用 Bignum就行了,你可以轻松的实现365的阶乘。 35. 有幂操作符。 在很久以前,我们在BASIC和FORTRAN中使用它,然而当我们学习Pascal和C之后,我们才认识到这个操作符有多差劲。(我们被告知自己连它是怎么工作的都不知道-它使用了对数,迭代了吗,效率如何?),但是,我们真的关系这些吗?如果是,我们可以重写这个方法,否则,Ruby有非常好的* *(星号之间无空格)操作符可以用。 36. 强大的字符串处理。 If如果你想查找,判断,格式化,trim,定界(delimit),interpose,tokenize,你可以自己选择随便用哪一个来得到你想要的结果。 37. 规则很少引起异常。 Ruby的语法和语义比其它语言有条理,每种语言都有独特的一面,每条规则都会有异常发生,但是Ruby规则引起的异常就少的多了。 官方网站解释:www.ruby-lang.org
What's Ruby
Ruby is the interpreted scripting language for quick and easy object-oriented programming. It has many features to process text files and to do system management tasks (as in Perl). It is simple, straight-forward, extensible, and portable. Oh, I need to mention, it's totally free, which means not only free of charge, but also freedom to use, copy, modify, and distribute it. Features of Ruby
PythonPython是一种面向对象的解释性语言. 它是一种高级编程语言,也就是说它尽可能将用户与底层操作系统隔离.然而,与其他解释性语言不同的是支持对操作系统的底层访问.因而,通常将划分在处于VB或PERL到系统级的C语言之间的位置. 虽然象PERL,TCL和其他一些语言一样,Python被认为是一种解释性语言,但是它有编译的过程,用编码器将原始的脚本翻译成一系列字节码,然后让字节码在Python虚拟机上面跑.但是由于是脚本语言,所以和C以及PASCAL这类编译语言相比还是慢了三分.但是别急,Python模块的字节码是可以保存的,在需要的时候拿来用就是了,不需要重新编译,而且产生的字节码完全独立于平台和操作系统!了解Java的朋友是不是觉得很眼熟啊?哈. Python是免费的 Python是可移植的 Python的强大功能 虽然Python的主要目的是向程序员屏蔽底层的复杂性,但是它也支持一些必要的挂钩(hook),扩展和函数,这样我们可以对操作系统的特定区域进行底层访问.上天入地的本事都有了,Python的确是可以做任何事情. Python的可扩展性 Python和C可以一起工作.它可以嵌入到C或者C++的应用程序当中,因此可用Python语言为应用程序提供脚本接口.由于支持跨语言开发,可用Python设计概念化应用程序,并逐步移植到C,使用前不必用C重写应用程序. Python可以和Java一起工作:Jython是Java 与Python天衣无缝的结合.无论是在Python里面调Java的包,或是在Java里面使用Python的对象,你都可以畅通无阻.还有更妙的,由于Jython的解释器完全用Java编写,因此可以在支持Java的任何平台上部署Python程序,甚至WEB浏览器也可以直接运行Python脚本.本人曾经在项目中用Jython画3D图,客户端IE可以直接浏览并用鼠标进行操纵! Python的简单性
Creative CommonsCreative Commons (创作共用) 是网络上的数字作品(文学、美术、音乐等)许可授权机制,它致力于让任何创造性作品都有机会被更多人分享和再创造,共同促进人类知识作品在其生命周期内产生最大价值。 “创作共用”由CreativeCommons.org发起,并在全球越来越多地区被广泛采纳,CNBlog.org是CreativeCommons.org在中文领域的授权机构,负责管理、维护和提供中文数字作品的“创作共用”授权服务。目前,中文服务站点正在建设中,想了解Creative Commons的更多信息请访问英文站点。 |
|
|