Conjure Studio 的个人资料召唤工作室(Conjure Studio)(严超...照片日志列表更多 工具 帮助

日志


谈论 解码 XML 和 DTD

 

引用

解码 XML 和 DTD
Last Modified:12/18/2006 22:17:10


2006/12/14

什么是ERP?(举个实例)


 

什么叫ERP
ERP(Enterprise Resource Planning)企业资源计划系统,是指建立在信息技术基础上,以系统化的管理思想,为企业决策层及员工提供决策运行手段的管理平台.
一天中午,丈夫在外给家里打电话:"亲爱的老婆,晚上我想带几个同事回家吃饭可以吗 "(订货意向)
妻子:"当然可以,来几个人,几点来,想吃什么菜 "
丈夫:"6个人,我们7点左右回来,准备些酒,烤鸭,番茄炒蛋,凉菜,蛋花汤…….你看可以吗 "(商务沟通)
妻子:"没问题,我会准备好的."(订单确认)
妻子记录下需要做的菜单(MPS计划),具体要准备的东西:鸭,酒,番茄,鸡蛋,调料……(BOM物料清单),发现需要:1只鸭蛋,5瓶酒,4个鸡蛋……(BOM展开),炒蛋需要6个鸡蛋,蛋花汤需要4个鸡蛋(共用物料).
打开冰箱一看(库房),只剩下2个鸡蛋(缺料).
来到自由市场,妻子:"请问鸡蛋怎么卖 "(采购询价)
小贩:"1个1元,半打5元,1打9.5元."
妻子:"我只需要8个,但这次买1打."(经济批量采购)
妻子:"这有一个坏的,换一个."(验收,退料,换料)
回到家中,准备洗采,切菜,炒菜……(工艺线路),厨房中有燃气灶,微波炉,电饭煲……(工作中心).妻子发现拨鸭毛最费时间(瓶颈工序,关键工艺路线),用微波炉自己做烤鸭可能来不及(产能不足),于是阅览室在楼下的餐厅里买现成的(产品委外).
下午4点,电话铃又响:"妈妈,晚上几个同学想来家里吃饭,你帮忙准备一下."(紧急订单)
"好的,你们想吃什么,爸爸晚上也有客人,你愿意和他们一起吃吗 "
"菜你看着办吧,但一定要有番茄炒鸡蛋,我们不和大人一起吃,6:30左右回来."(不能并单处理)
"好的,肯定让你们满意."(订单确定)
鸡蛋又不购了,打电话叫小贬送来.(紧急采购)
6:30,一切准备就绪,可烤鸭还没送来,急忙打电话询问:"我是李太,怎么订的烤鸭还不送来 "(采购委外单跟催)
"不好意思,送货的人已经走了,可能是堵车吧,马上就会到的."
门铃响了."李太太,这是您要的烤鸭.请在单上签一个字."(验收,入库,转应付账款)
6:45,女儿的电话:"妈妈,我想现在带几个朋友回家吃饭可以吗 "(呵呵,又是紧急订购意向,要求现货)
"不行呀,女儿,今天妈已经需要准备两桌饭了,时间实在是来不及,真的非常抱歉,下次早点说,一定给你们准备好."(哈哈,这就是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/8/26

什么是CV?

CV是 Curriculum Vitae (履历表)的简写包括Personal Data, Education, Work Experience, References
2006/7/15

什么是EJB

EJB

转载自: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 从技术上而言不是一种"产品"
EJB 是一种标准描述了构建应用组件要解决的:
可扩展 (SCAlable)
分布式 (DISTributed)
事务处理 (TranSActional)
数据存储 (Persistent)
安全性 (SECure)

二.Sun 对 EJB 的期望

提供一个标准的分布的、基于 OO 的组件架构
屏蔽复杂的系统级功能需求
Write once, run anywhere
与非 Java 应用之间的互操作能力
兼容 CORBA 标准

三.为什么选择 EJB?

EJB 服务器完成"繁杂"的工作:应用开发人员关注于业务逻辑的实现而不是底层的实现机制(似于 4GL 语言设计的目标)
支持事务处理
多个业务操作同时成功,或全部失败
可以通过在代码外的描述来定义事务处理级别
可扩展性
EJB 可以根据您应用的增长而扩展
EJB 服务器往往还提供了负载均衡和
安全性:由 EJB 服务器提供资源的访问权限控制

四.EJB 架构

为了满足架构的目标,规范中描述了
服务器 (Server)
容器 (ContAIner)
类 (Class) 和实例 (Instance)
Home 和 Remote 接口
客户端 (Client)

五. 简化的编程模型

关注于业务逻辑实现:EJB 负责生命周期 (lifecycle), 数据存储 (persistence), 事务处理语义 (transactional semantic), 安全(security), ...
通用的编程模型:各种服务的高层 API
Java 是其编程语言

1.EJB 特点

由一个 EJB 容器在运行时创建和管理 EJB
在部署 EJB 时定制其运行方式
由 EJB 容器和服务器来协调客户端的访问
可以部署到任何兼容的 EJB 容器中
客户端对 EJB 的视图是由 Bean 开发人员决定的

2.EJB 服务器

管理 EJB 容器 (它管理 Bean)
提供对操作系统服务的存取
提供 Java 相关的服务,尤其是
通过 JNDI 访问命名空间
基于 OTS 的事务处理服务

3.EJB 容器

管理 Bean 生命周期:将 EJB 服务器提供的服务传递给 Bean
生成代码来实现对 Bean 的存取访问
强制事务处理的限制
创建、初始化和回收 Bean
管理持久数据的存储
对客户端而言 EJB 容器是透明的

4.在一个 EJB 服务器中的容器

目前容器通常是由 EJB 服务器本身提供的
在 EJB 1.0 或 1.1 规范中没有定义容器-到-服务器的接口
各厂商可以根据他们的见解来实现服务器和容器的各自责任

5.容器提供服务: 数据存储

容器决定何时载入/储存状态
Container-Managed Persistence(容器管理存储/CMP)
容器负责存储您的 Bean
容器生成必要的类和代码
Bean-Managed Persistence(Bean 管理存储/BMP)
Bean 开发人员提供存储代码
开发人员决定 如何存储, 容器仍然决定 何时进行

6.容器提供服务: 事务处理

可以由容器代理来实现
容器将得到业务逻辑方法的事务处理需求
容器提供事务控制代码
也可以由程序员通过代码实现

7.容器提供服务: 其它服务

其它服务包括
命名 (NAMing)
安全 (Security)
线程管理 (thread management)
这些服务由容器代理完成将减少应用开发人员的负担


8.分布式对象运算

远程对象被作为本地对象来处理:传递信息的方式不变,但开销更大
Enterprise JavaBeans 永远运行在服务器上:对 Bean 的访问永远是远程调用

9.Stub 和 Skeleton

由 EJB 生成:
"Stub" 对要传递出去的信息编码
"Tie/Skel" 将接受到的信息解码并传递给目标对象

10.分类: Enterprise JavaBeans

+---Entity Beans--CMP/BMP
Ejb--|
+---SESsion Beans--Stateful/Stateless

会话 Bean (Session Bean):根据 EJB 规范,一个会话 Bean 是:

代表单个客户端来执行
可以参与到事务处理中
不直接代表共享于数据库中的数据,但它能访问和更新这些数据
相对而言是短暂存在的
当 EJB 容器失效后就不存在---客户端需要重新建立一个信新的会话对象来继续运算

实体 Bean (Entity Bean):根据 EJB 规范,一个实体 Bean 是:

提供在数据库中数据的对象视图
允许被多个用户共享存取访问
可以是长期存在 (只要它存在于数据库中)
实体 Bean, 它的主键对象, 以及它的远程引用将能跨 EJB 容器的宕机而存在

11.EJB 类和实例

构建 EJB 应用包括来自三方的代码
开发人员编写的代码
由 EJB API 定义的类和接口
由容器自动生成的代码
开发人员编写的代码包括
Bean 类 (定义了业务逻辑)
Home 接口 (如何查找或创建 bean)
Remote 接口 (如何存取 bean)
其它组件,根据 bean 实际要求

12.EJB Home 接口

每个 bean 有一个
用于:创建新的 bean 实例、查找现存的 bean (只能是实体 bean)

Remote 接口:定义 bean 的公共接口---只有在 Remote 接口中定义的方法才能被客户端访问

EJB 客户端

可以为 Servlet, JSP, 应用程序或其它 bean
通过 JNDI 来查找 EJB home 接口,步骤为:
创建一个 JNDI Context (initial context)
使用 JNDI Context 来查找 bean home 接口
使用 bean home 接口来创建/查找 bean 实例
使用 bean 实例完成业务操作
实际的存取 (对 EJB) 是通过容器生成的类来完成

EJB 架构

客户端对 bean 访问永远不是直接的
EJBobject (tie) 是由容器自身提供的:用来帮助管理 bean 的生命周期

EJB 中的角色

EJB 服务器供应商: 开发并销售 EJB 服务器
EJB 容器供应商: 开发并销售 EJB 容器
Enterprise bean 开发人员: 开发并销售 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)。这直接导致如下问题:网络负载大(远程客户端时)、并发性能低、客户端与服务器端关联度大、可重用性和可维护性差、性能
因此有必要在客户端与实体EJB层间加入Session EJB层,在Sessino EJB中实现商业逻辑并封装对实体EJB的操作。(如下图2)

20064416036850
 
图1:客户端直接与实体EJB交互


20064416246212.gif" border=0> 
图2:通过SessionEJB层实现

      Session Facade模式的好处是:降低了网络负载,SessionEjb可以调用实体EJB的本地接口;将商业逻辑与商业数据隔离;维护与开发方便;显著提高性能。

      Session Facade模式因其简单使用,是目前使用很广的模式。但具体应用过程中应注意:避免将所有的操作封装到一个很大的SessionEJB内;服务器端数据结构应由实体EJB实现,除非特例否则避免直接的数据库操作;SessionEjb内某些系统通用操作的代码容易重复(比如权限检查等,解决办法是将系统通用服务封装在Java ClASs内)。

MesSAge Facade Pattern

      很多时候,一次RequeST需要操作多个EJB又不需要得到即时返回。对这种异步调用,通常应用Message Fa?ade Pattern.

      这种时候,如采用Session Fa?ade Pattern存在如下问题:
      1. 客户端等待返回的时间过长。一个SessionEjb的实例在完成客户请求过程中中涉及到的每一次对其他实体Ejb的调用过程中都会被锁定直到得到实体EJB返回信息后才能进行下一步操作。这样造成客户不必要的等待,并很容易因时间导致整个事务失败。
      2. 系统可靠性和容错性低。如果需要调用不同系统或服务器上或多个异构数据源的多个EJB时,任何一个环节出错,均导致客户请求失败。
以Message-Driven Bean为基础的Message Facade Pattern则可以解决上述异步请求需求。具体架构见下图3

20064416439582.gif" border=0>
 
图3:使用Message Facade Pattern

Message Facade Pattern的不足之处在于:
1. Message-Driven Bean没有返回值。这样通知客户执行结果只能依赖于EmAIl或人工等其他手段。
2. Message-Driven Bean执行过程中无法将捕获的异常直接返回给客户端,即无法使客户端直接直到错误信息。
3. Message-Driven Bean通过接收Message响应客户请求,对Message内容的合法性(比如对象的类型等)依赖与客户端.容易产生运行时错误。
Message Facade Pattern经常与Session Facade Pattern在同一个项目里共同使用。

EJB Command Pattern

      Session Facade Pattern中将商业逻辑实现封装在Session EJB中,这种做法带来诸多益处之外也带来如下问题:

1. 由于业务经常的变化,导致经常需要更新Session EJB代码。
2. 客户端代码不得不包含大量EJB相关的API,不利于后期项目维护。
3. 项目开发测试需要经常的EJB重部署过程。

      引起上述问题的重要根结就是Session EJB本身重量级组件,其开发测试部署工作量较大,开发周期较长。以上不足可以通过EJB Command Pattern克服。

      EJB Command Pattern中将商业逻辑实现封装在普通的Java ClASs(称之为Command Bean)中。该模式的具体实现有很多种,通常的框架都包括三部分:

1. Command Bean.由应用开发者写的具体实现某商业操作的Java Class.主要包含getXXX(),setXXX(),exECute()方法。
2. Client-SIDE Routing Logic.由多个Class组成,用于将请求转发至Command Sever,这个过程对客户是透明的。这部分代码可以跨项目使用。路由规则中可以考虑用XML技术。
3. Remote Command Server.实际执行商业操作请求。通常可以用Session EJB层实现。

整个框架见下图4:

20064416612725


图4:Command的基本框架


      EJB Command Pattern具有如下好处:

1. 适应与需要快速开发环境。因Command Bean是轻量级的Java Class,其编译和调试比较方便。
2. 将表现层与商业实现层隔离,同时将客户端代码与EJB层隔离。
3. 将客户端代码开发与服务器端代码开发相对清晰。早期可以创建空的Command Bean方便客户端代码调试。

EJB Command Pattern的弱处在于:
1. Command Bean中对事务的控制不如Session EJB中。
2. Command Bean是无状态的。
3. 无法将异常直接返回给客户。
4. 在大项目中,由于商业逻辑复杂,常导致大数量的Command Bean存在.
5. 作为Command Server的Session EJB打包时必须包含Command Bean以致存在维护上的不便。

EJB Command Pattern的一个实际实现可以参考IBM's Command Framework.


Data Transfer object Factory

      基于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
 
图6:DTO Factory示例


      DTO Factory具体实现方式通常有两种:

1. 普通Java Class实现,用于Session Facade Pattern使用DTO环境下。
2. Stateless Session EJB实现,用于非EJB客户端使用DTO环境下(见图7)。


  200644161050435
      图7:SessionEJB实现DTOFactory

      DTO Factory带来如下好处:

1. 使Entity EJB的重用成为可能。由于不含DTO处理逻辑,Entity EJB功能单一化,只作为数据源。不通客户端通过各自的DTO Factory可以从同一个Entity EJB得到各自所需的个性化数据(自定义DTO)。
2. 提高可维护性和性能。
3. 可以根据在DTO Factory层生成很复杂的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变的庞大无比。
2. 使Entity EJB的客户端(比如Session EJB)和Entity EJB的接口紧密关联。Entity EJB属性的增删都需要更改客户端代码,给项目开发和维护带来不便。

      事实上可以利用更通用的方式访问Entity EJB的属性,即定义Generic Attribute Access Interface。见下图8:


  20064416124988
图8:Generic Attribute Access Interface示例

      Generic Attribute Access Interface由Entity EJB的本地或远程接口实现,并利用Hash Maps传输数据。实现方式常见如下:

1. BMP类型实体EJB可以在Bean类中定义包含所有属性的私有成员变量HashMap。
2. CMP类型实体EJB可以在Bean类中可以适用Java Reflection API实现。
3. 建立一个父类,在不同的情况下定义子类重载父类方法。
使用Generic Attribute Access Interface需要在客户端与服务器端对属性以及对应的关键字建立统一的命名习惯。常见的做法如下:
1. 建立并保持良好的文档记录和命名约定。
2. 在实体EJB的实现类中定义静态成员映射属性。
3. 创建共享静态类,通过成员变量映射实体EJB属性。
4. 通过JNDI在服务器端保存属性映射关系。
Generic Attribute Access Interface的运用带来一下益处:
1. 接口实现后对不通实体EJB都适用。
2. 对属性较多实体EJB能精简代码,并更具维护性。
3. 使运行中动态增删实体EJB属性成为可能。
Generic Attribute Access Interface的缺点在于:
1. 访问EJB属性时增加了额外的操作。需要通过关键字映射属性,最后还需进行类型转换。
2. 需要建立客户端与服务器端的命名约定。
3. 因为通过HashMap操作时候需要进行类型转换,容易产生运行时类型不匹配异常。


Business Interface

      EJB规范要求Bean实现类必须实现所有在远程(或本地)接口中定义的所有方法,同时不允许Bean实现类直接继承远程(或本地)接口。这就导致编译时候很容易产生两者不一致的问题,即远程(或本地)接口中定义的某方法为在Bean实现类中被实现等错误。为避免上诉错误,可以利用应用服务器厂商所提供的工具。但也可以应用EJB的设计架构来实现:定义商业接口。
Business Interface即创建自定义商业接口,在接口中定义所有EJB提供的商业方法,并让Bean实现类和远程(或本地)接口都实现该商业接口。其继承关系见下图9:


  200644161214600
图9:商业接口的使用

      Business Interface是个普通的Java Class。依赖于使用本地接口与远程接口的不通,Business Interface的定义略有不同:应用与远程接口时,在接口中的方法需要抛出java.RMI.RemoteException;而应用与本地接口时候则不需要作任何特别处理。
应用Business Interface时候必须注意一点:EJB规范不允许直接EJB的实例将对自己的引用(this对象)返回给客户端,否则编译时候即报错。但使用Business Interface后,编译时候无法检查出有无将this对象返回给客户端。这一点需要程序员自己保证。


三. 内部数据转换策略

Data Transfer Object

      基于EJB的J2EE多层架构应用中,经常涉及的一个问题就是如何在各层之间传递批量数据,比如客户端对服务器端数据的批量读写操作等。比如需要得到实体EJB的属性,直接的方法是多次调用不通的属性,如下图10:

200644161221390
 
图10:低效的数据传递方式

但这种方法容易导致许多问题,比如性能以及代码的复杂度等,更有效的办法是在一个调用中得到所有需要的属性。所以可以引入Data Transfer Object来封装所需要的属性,并在客户与服务器端通过传递该对象一次实现对数据的操作。如下图11:

200644161237165.gif" border=0>
图11:通过DTO传递数据



DTO为普通的Java Class,通常是服务器端数据的快照。由于网络传输的需要,DTO应该实现java.io.Serializable接口。
DTO的设计有两种模型:Domain DTO以及Custom DTO。
Domain DTO仅仅实现对服务器数据的拷贝,通常与实体EJB为一对一的关系(也存在为多个相关联的实体EJB对应一个Domain DTO)。Domain DTO通常除用于读取更改实体EJB属性外也可用于创建实体EJB时候。实体EJB与Domain DTO对应关系如下图12:

200644161250518.gif" border=0>
 
图12:Account EJB 与 Account DomainDTO

      Domain DTO的应用除了DTO所具有的一般优点外,还有别的益处:

1. 开发迅速。因为一旦实体EJB设计好后,很容易转换得到Domain DTO。
2. 可以利用Domain DTO的setXXX()方法在客户端进行属性有效性效验。
Domain DTO的缺点有:
1. 客户端绑定了服务器端数据模型,不利于维护。
2. 不够灵活,无法处理客户端的多样化数据要求。对一个数百个属性的实体EJB请求一个属性时候却返回一个包含所有属性值的Domain DTO明显是笨重的实现。
3. 导致代码的重复。
4. Domain DTO中如果嵌套包含了别的Domain DTO时,一旦需服务器端数据的更改而需要重定义Domain DTO模型时候异常困难。

      Custom DTO则可以克服上述的一些缺点。Customer DTO仅仅封装用户感兴趣的服务器数据集即可以根据客户端需求创建Customer DTO。这样作的优点是灵活高效;缺点是大项目中可能导致大量的Customer DTO存在。

      通常Domain DTO可以用于数据的更新与创建;Customer DTO可以用于客户用于表现层的数据读取。两者可以相辅相成。而且使用DTO一般与DTO Factory同时使用。

Domain Transfer Hash Map

DTO的使用往往缺乏通用性。不通的用户案例需要创建不同的DTO。当项目很复杂时,从维护性考虑需要更好的数据传输的实现方式。
Domain Transfer Hash Map即利用HashMap作为客户所需数据集的封装。好处是:

1. 良好的维护性。
2. 较大的通用性。不同的客户端可以使用相同的数据传递方式。
缺点是:
1. 需要维护客户端与服务器端在属性及其对应关键字的映射关系。
2. 当需要使用基本类型的数据时候,因为Hash Map的限制必须将基本类型先转换成对象。
3. 使用得到的数据时,需要进行类型强制转换。

Data Transfer RowSet

      当需要处理直接的JDBC调用得到的结果集时,显然用DTO/Hash Map已经不合适,因为需要对大量数据进行类型转换等额外操作是很费资源和不必要的,而且最终用户常需要以表格式样显示数据。

      所以对二维表式数据,更好的处理方式是利用Data Transfer RowSet。Data Transfer RowSet通过将ResultSet直接转换为RowSet传递给客户端。
在Session EJB中使用RowSet的一段示例代码如下图13:

200644161320608.gif" border=0>
 
图13:使用RowSet

使用RowSet的好处很多:
1. 接口通用于各样的数据库查询操作。
2. 当需要表格式数据显示时,因为直接从ResultSet得到,所以不需要额外的数据类型转换。
缺点是:
1. 数据库结构暴露给客户端。
2. 不符合面向对象设计思想。
3. 依赖于SQL
      Data Transfer RowSet通常用于只读式数据的显示操作,经常和JDBC for Reading Pattern连用。

四.事务和数据持久机制

JDBC for Reading Pattern

      基于EJB的J2EE应用中,通过EJB对数据库的操作可以有两种方式:实体EJB或者Session EJB中直接利用JDBC访问。
客户很多时候取出数据库中数据并以表格方式显示。这种情形如果使用实体EJB会导致如下问题:
1. 引用服务器端频繁的数据库查询和加载操作。因为加载N个实体EJB总需要进行一次find()操作N次数据加载。
2. 如果使用Remote接口,引起频繁的额外网络操作。
3. 对关联关系比较复杂的数据库表结构,很难直接通过Entity EJB表现。

      因此建议在只需对数据库表数据进行只读访问时候,应该采用JDBC for Reading Pattern,即通过JDBC直接访问数据库。除了避免上述使用实体EJB的缺点还带来一下好处:
1. 充分利用数据库能力,比如数据库的缓存机制。
2. 减少了对事务控制的资源。
3. 利用自定义SQL可以按需要比较灵活的读取数据。
4. 只需要一次数据查询,减少了数据库操作。

      缺点是:
1. 于J2EE应用的面向对象设计相违背。
2. 因为Session EJB代码中包含了自定义SQL,维护性差。
3. Session EJB中不得不包含JDBC的API,并且需要了解数据库结构。

2006/6/21

MIME

Multipurpose 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 接口类型)。

什么是SNS



  SNS即网络社交平台——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开发简介

QT开发简介
Qt 是一个跨平台的 C++ 图形用户界面库,由挪威 TrollTech 公司出品,目前包括Qt, 基于 Framebuffer 的 Qt Embedded,快速开发工具 Qt Designer,国际化工具 Qt Linguist 等部分 Qt 支持所有 Unix 系统,当然也包括 Linux,还支持 WinNT/Win2k,Win95/98 平台。
  
  Trolltech 公司在 1994 年成立,但是在 1992 年,成立 Trolltech 公司的那批程序员 就已经开始设计 Qt 了,Qt 的第一个商业版本于 1995 年推出然后 Qt 的发展就很快了,下面是 Qt 发展史上的一 些里程碑:
  
  1996 Oct KDE 组织成立
  1998 Apr 05 Trolltech 的程序员在 5 天之内将 Netscape5.0 从 Motif 移植到 Qt 上
  1998 Apr 08 KDE Free Qt 基金会成立
  1998 Jul 09 Qt 1.40 发布
  1998 Jul 12 KDE 1.0 发布
  1999 Mar 04 QPL 1.0 发布
  1999 Mar 12 Qt 1.44 发布
  1999 Jun 25 Qt 2.0 发布
  1999 Sep 13 KDE 1.1.2 发布
  2000 Mar 20 嵌入式 Qt 发布
  2000 Sep 06 Qt 2.2 发布
  2000 Oct 05 Qt 2.2.1 发布
  2000 Oct 30 Qt/Embedded 开始使用 GPL 宣言
  2000 Sep 04 Qt free edition 开始使用 GPL
  基本上,Qt 同 X Window 上的 Motif,Openwin,GTK 等图形界 面库和 Windows 平台上的 MFC,OWL,VCL,ATL 是同类型的东西,但是 Qt 具有下列优点:
  
  优良的跨平台特性:
  Qt支持下列操作系统: Microsoft Windows 95/98, Microsoft Windows NT, Linux, Solaris, SunOS, HP-UX, Digital UNIX (OSF/1, Tru64), Irix, FreeBSD, BSD/OS, SCO, AIX, OS390,QNX 等等。
  
  面向对象
  Qt 的良好封装机制使得 Qt 的模块化程度非常高,可重用性较好,对于用户开发来说是非常 方便的。 Qt 提供了一种称为 signals/slots 的安全类型来替代 callback,这使得各个元件 之间的协同工作变得十分简单。
  
  丰富的 API
  Qt 包括多达 250 个以上的 C++ 类,还替供基于模板的 collections, serialization, file, I/O device, directory management, date/time 类。甚至还包括正则表达式的处理 功能。
  
  支持 2D/3D 图形渲染,支持 OpenGL
  
  大量的开发文档
  
  XML 支持
  但是真正使得 Qt 在自由软件界的众多 Widgets (如 Lesstif,Gtk,EZWGL,Xforms,fltk 等等)中脱颖而出的还是基于 Qt 的重量级软件 KDE 。 有趣的是,KDE 也是使得 Trolltech 公司承受巨大压力的一个原因。下面我们将来看看这场 著名的自由软件圣战 -- "KDE/QT .VS. Gnome/Gtk" 是怎么发生的。
  
  在 Unix 的图形界面一向是以 MIT 的 X Window 系统为标准, 可是在商业应用上有两大流派,一派是以 Sun 公司领导的 Openlook 阵营,一派是 IBM/HP 领导的OSF (Open Software Foundation) 的 Motif, 双方经过多年竞争之后, Motif 最终胜出,成为最普遍使用的界面库, 后来双方又妥协出一个 CDE(Common Desktop Enviroment) 作为一个标准的图形界面。 但是 Motif/CDER 的价格非常昂贵,在这同时微软的 Windows 图 形界面发展速度非常快,而 Unix 界的后起之秀 Linux 也急需一个可靠并且免费的图形界面。
  
  1996 年 10 月,由开发图形排版工具Lyx的德国人 Matthias Ettrich 发起了 KDE 计划。 KDE 的全称为 K Desktop Environment,可以看出是针对 CDE。 KDE 本身 是采用 GPL 宣言的,但是 KDE 却是使用 Qt 来作为其底层库,因为当时 Qt 已经将其 Unix 版本自由发布了,但是 Qt 并不遵循 GPL, 因此 KDE 被很多自由软件的作者攻击,认为利用非自 由软件开发违背了 GPL 的精神,于是 GNU 的狂热信徒兵分两路,一路是去制作 Harmonny,试图重写一套兼容于 Qt 的替代品,另一路是由一个 26 岁的墨西哥程序员 Miguel De Icaza 领导 下重新开发一套叫 GNOME(GNU Network Object Enviroment)来替代 KDE。
  
  由于 Linux 界的老大 RedHat 不喜欢 KDE/Qt 的版权,因此 RedHat 甚至专门派出了几个全职程序员来加入 GNOME 进行开发工作,于是一场同 Motif VS Openlook 相似的圣战就这么打起来了。 Trolltech 为了 KDE 曾数次修改 Qt 的版权,从成立 KDE Free Qt 基 金会到采用 QPL,可谓是费尽心机,但是 GNOME 采用的 GTK 一开始就是完全的 GPL,因此在这个方 面 GNOME 有一定的优势,加上 Qt/KDE 采用 C++ 开发,入门的门槛比较高,而 GTK/Gnome 采用 C, 因此 GNOME 吸引了更多的自由软件开发者,但是 KDE 毕竟先走了一步, 推出的 KDE1.1.2 十分稳定, 而当时急忙中推出的 GNOME1.0 的系统稳定性奇差,有人甚至笑称 GNOME1.0 还没有 KDE 1.0 Alpha 稳定。但是 GNOME 后来发展比较快,大有迎头赶上的势头。当时双方的开发者在网络 上炒得天翻地覆,连 Linux 之父 Linus 只是说了一句喜欢用 KDE 都倍受指责。
  
  战争到了第三个年头,也就是2000年,可谓是风云突变,一个接一个重大的事件先后发生: 首先是一批从 Apple 公司出来的工程师成立了一个叫 Eazel 的公司替 GNOME 设计界面,然后是一批 GNOME 程序员成立了一个 Helix Code 公司替 GNOME 提供商业支持,而大家期待以久的 KDE 2.0 也终于发布了,这恐怕是目前最为庞大的自由 软件了之一, 除了 KDE 本身,还包括 Koffice 套件,和集成开发环境 Kdevelop 等等大批软件,其主力软件 Kounqueror 也是第一个可以同微软的 Internet Exploer 相抗衡的浏览器。 而 Sun 公司,Red Hat 公司, Eazel 公司,Helix Code 等一批公司成立了一个GNOME 基金会, Sun 还宣布将把重量级办公软件 Star office 同 GNOME 集成, Trolltech 公司自然不能坐以 待毙,于今年 10 月 4 日将 Qt 的 free edition 变为 GPL 宣言,彻底解决了 KDE 的版权问题, 又推出了嵌入式 Qt ,给了 GNOME 阵营一个有力的回击。
  
  到现在为止,这场战争还在继续,相信我们不能很快看到结果。一般说来, 目前 GNOME 吸引的公司比较多,但是 KDE/Qt 的开发的效率和质量比 GNOME 高,而且在 Office/嵌入式 环境中先走一步,在一定时间内还将处于优势地位。
  
  那么对于用户来说,如何在 Qt/GTK 中作出选择呢?一般来说,如果用户使用 C++,对库的稳定性,健壮性要求比较高,并且希望跨平台开发的话,那么使用 Qt 是较好的选择, 但是值得注意的是,虽然 Qt 的 Free Edition 采用了 GPL 宣言,但是如果你开发 Windows 上的 Qt 软件或者是 Unix 上的商业软件,还是需要向 Trolltech 公司支付版权费用的。
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 2级验证,一次性奖励50万元。

CMM是什么?
其实,CMM是能力成熟度模型(Capability Maturity Model)的缩写,是一种用于评价软件承包能力并帮助其改善软件质量的方法,也就是评估软件能力与成熟度的一套标准,它侧重于软件开发过程的管理及工程能力的提高与评估。它是由美国卡内基梅隆大学软件工程研究所1987年研制成功的,是目前国际上最流行最实用的软件生产过程标准和软件企业成熟度等级认证标准。

CMM标准共分五个等级,从第一级到第五级分别为:初始级、可重复级、定义级、管理级和优化级,从低到高,软件开发生产的计划精度越来越高,每单位工程的生产周期越来越短,每单位工程的成本也越来越低。

认证源于需求
如果说,东软不算是国内第一个吃螃蟹的人,最起码也算是第二个。早在1999年,东软,那时还叫东大阿尔派就已经开始开始引用CMM评估体系,并于2000年9月,首创纪录,率先通过了CMM 2认证,今年年6月,东软更是成为了国内唯一通过CMM 3级认证的企业。

面对如此成绩,东软以惯有的低调方式处理,并没有就此大肆造势,过多宣传。

按照东软集团软件工程组经理,资深咨询顾问何晓源女士的话说,东软并没有将CMM认证当成是形象工程在做,东软之所以要通过CMM 2,CMM 3,以至于将来过CMM 4、CMM 5都是出于对自身业务的不断调整,对质量的不断改进。纠其根源,是按市场需求行事。

近年来,东软集团想要拓展出口业务,尤其看好欧美市场。在与欧美市场接触时发现,ISO9000认证对于软件开发质量并没有过多的指导意义,无法满足需求。同时,发现要开展欧美业务,与众多的印度软件厂商竞争,需要改变软件企业手工作坊式的运营方式,与国际市场接轨。就需要提高开发效率,降低成本,提高产品质量,而这些,正是CMM认证标准能达到的。出于这种考虑,东软才毅然决然地走上了CMM认证之路。

CMM认证之始
东软作为第一家涉足CMM认证领域的国内软件企业,在没有任何前车可鉴的情况下,靠自己的刻苦钻研,不断摸索,为了通过认证,估计投入的各类资产投入达到了近1000万元。

但是据何晓源女士介绍在通过CMM认证过程中,困难并非来源于大量资金的投入,而来自三方面:

第一是对于标准的理解问题。
东软从98年就开始做CMM认证,一切从零开始。万事开头难,刚开始是没有现成的标准的,一切完全靠自己研究,参照国外的资料,自力更生,艰苦奋斗,仅制定标准就投入30-40人月数,研究工作持续了将近半年的时间,才对标准有了一个统一的认识。

第二是执行中的困难问题。
在项目执行过程中碰到了一些困难。当商业利益与项目发生冲突时,很多员工会处于利益考虑,而忽视项目的要求。为了解决这一问题,东软的做法是将标准融入到企业运营的各个环节,在要求员工自我规范同时,不断引导,调整,逐步推行。

第三是习惯问题。
每个人做事都有自己的一套方式方法,这势将与统一的流程格格不入,矛盾无法避免。东软对待这个问题,采取从管理层开始,从事业部的领导层,由上而下的贯彻,决不妥协,强制执行。强调公司整体规划,个人习惯应该服从公司规定。同时加大培训力度。

问及何晓源女士通过认证有没有制胜因素时,何女士认为,除了努力形成文档化的制度,规范和模板,不断提高软件检查和监督质量外,更重要的是来自管理层的支持,该强制执行时就要使用行政手段。同时,推行CMM认证的领导班子必须要有较强的技术开发背景,对于软件开发各个环节都要什么熟悉,才能真正理解CMM认证中的各种标准。而同时也要求,推行者要求较强的沟通,培训,讲解能力。

在祝贺东软通过CMM 3级认证时,我们的企业也应该摆正对待CMM认证的态度,过不过CMM认证并不重要,不要被几张证书所累,真正重要的是,借鉴CMM,改善企业的流程管理质量,提高中国软件企业在国际市场上的竞争力,这才是中国软件走上正轨的硬道理。

什么是ARM

 

 

    英国ARM 公司是全球领先的16/32 位嵌入式 RISC 微处理器解决方案的供应商,向全球各大领先电子公司提供高性能、低成本和高效率的RISC 处理器、外设和系统芯片技术授权。ARM 还为开发完整系统提供综合技术支持。ARM 的微处理器核技术广泛用于便携式通信产品、手持运算、多媒体和嵌入式解决方案等领域,已成为RISC 标准。
    ARM公司是一家既不生产芯片(fabless)也不销售芯片(chipless)的公司,它通过出售芯片技术授权,建立起新型的微处理器设计、生产和销售商业模式。更重要的是,这种商业模式取得极大的成功,采用ARM技术IP核的微处理器遍及各类电子产品:汽车、消费电子、成像、工业控制、海量存储、网络、安保和无线等市场,ARM技术几乎无处不在。
    ARM公司在1990年11月英国剑桥的一个谷仓里成立,最初只有12人,怀着一个梦想:推出一个好的32位RISC CPU,让全世界每个人都至少有一个ARM芯片。经过11年多的发展,今日的ARM公司已经拥有700多名员工,其中60%以上都从事研发工作,在全世界8个国家和地区(中国台湾)设有分公司,并且即将在中国上海成立分公司。
很多以核为基础的系统芯片设计都以ARM核为基础。尽管Intel的微处理器在PC领域处于压倒优势地位,但在嵌入系统领域,Intel利用了ARM核的技术授权,例如,推出基于ARM的MP3播放器,Intel与TI在2001年7月30日同时取得ARM V6结构的授权。微软的PocketPC今后只支持ARM结构。Motorola、National Semiconductor、Lucent等一批厂商都取得ARM核的技术授权。
    ARM技术具有很高的性能和更高的功效,因而容易被更多的厂商接受。同时,合作伙伴的增多,可获得更多的第三方工具、制造和软件支持,又使整个系统成本降低,产品进入市场的时间加快,从而具有更有利的竞争优势。
ARM(Advanced RISC Machines)是微处理器行业的一家知名企业,设计了大量高性能、廉价、耗能低的RISC处理器、相关技术及软件。技术具有性能高、成本低和能耗省的特点。适用于多种领域,比如嵌入控制、消费/教育类多媒体、DSP和移动式应用等。
    ARM将其技术授权给世界上许多著名的半导体、软件和OEM厂商,每个厂商得到的都是一套独一无二的ARM相关技术及服务。利用这种合伙关系,ARM很快成为许多全球性RISC标准的缔造者。
    目前,总共有30家半导体公司与ARM签订了硬件技术使用许可协议,其中包括Intel、IBM、LG半导体、NEC、SONY、菲利浦和国民半导体这样的大公司。至于软件系统的合伙人,则包括微软、升阳和MRI等一系列知名公司。
    ARM架构是面向低预算市场设计的第一款RISC微处理器。

2005/12/18

SCORM: E-Learning的国际技术标准

SCORM: E-Learning的国际技术标准

  问: E-Learning的国际技术标准SCORM是在什么条件下应运而生的?

  余胜泉: 计算机被发明后不久,心理学家和教育学家就认识到了计算机的教学价值和潜力。随后, Internet的出现,为信息和知识的交流传播提供了便捷的途径,网络成为一个环球的公共的传递平台,基于网络的学习内容几乎可以被任何媒体传递,基于网络的技术迅速成为学习技术的主流,这也对原有的CBI(Computer-Based Instruction)和ITS(Intelligent TutoringSystems )产生了巨大的影响。研究者开始关注如何运用网络这个学习传递平台,更好地为学习者服务。

  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)等。

  SCORM的目的是学习资源可以在不同的学习管理系统中重复使用和具有互操作性。要使这些成为可能,必须有公共的方法启动学习资源、公共的机制使学习资源和LMS进行交流,并要有预定义的语言和词汇形成这种交流的基础。实时运行环境(Run-Time Environment)就提供了这种公共机制。实时运行环境有三个方面: 运行(Launch)、应用编程接口(API)和数据模型(Data Model)。

  问: 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的本意是用户界面( user interface ) ,概括成一句话就是——人和工具之间的界面。这个界面实际上是体现在我们生活中的每一个环节的,例如我们切菜的时候刀把手就是这个界面,开车时候方向盘和仪表盘就是这个界面 ,看电视的时候遥控器和屏幕就是这个界面,用电脑的时候键盘和显示器就是这个界面。
     
 
 
                             一篇关于评价中国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

  • Ruby has simple syntax, partially inspired by Eiffel and Ada.
  • Ruby has exception handling features, like Java or Python, to make it easy to handle errors.
  • Ruby's operators are syntax sugar for the methods. You can redefine them easily.
  • Ruby is a complete, full, pure object oriented language: OOL. This means all data in Ruby is an object, in the sense of Smalltalk: no exceptions. Example: In Ruby, the number 1 is an instance of class Fixnum.
  • Ruby's OO is carefully designed to be both complete and open for improvements. Example: Ruby has the ability to add methods to a class, or even to an instance during runtime. So, if needed, an instance of one class *can* behave differently from other instances of the same class.
  • Ruby features single inheritance only, *on purpose*. But Ruby knows the concept of modules (called Categories in Objective-C). Modules are collections of methods. Every class can import a module and so gets all its methods for free. Some of us think that this is a much clearer way than multiple inheritance, which is complex, and not used very often compared with single inheritance (don't count C++ here, as it has often no other choice due to strong type checking!).
  • Ruby features true closures. Not just unnamed function, but with present variable bindings.
  • Ruby features blocks in its syntax (code surrounded by '{' ... '}' or 'do' ... 'end'). These blocks can be passed to methods, or converted into closures.
  • Ruby features a true mark-and-sweep garbage collector. It works with all Ruby objects. You don't have to care about maintaining reference counts in extension libraries. This is better for your health. ;-)
  • Writing C extensions in Ruby is easier than in Perl or Python, due partly to the garbage collector, and partly to the fine extension API. SWIG interface is also available.
  • Integers in Ruby can (and should) be used without counting their internal representation. There *are* small integers (instances of class Fixnum) and large integers (Bignum), but you need not worry over which one is used currently. If a value is small enough, an integer is a Fixnum, otherwise it is a Bignum. Conversion occurs automatically.
  • Ruby needs no variable declarations. It uses simple naming conventions to denote the scope of variables. Examples: simple 'var' = local variable, '@var' = instance variable, '$var' = global variable. So it is also not necessary to use a tiresome 'self.' prepended to every instance member.
  • Ruby can load extension libraries dynamically if an OS allows.
  • Ruby features OS independent threading. Thus, for all platforms on which Ruby runs, you also have multithreading, regardless of if the OS supports it or not, even on MS-DOS! ;-)
  • Ruby is highly portable: it is developed mostly on Linux, but works on many types of UNIX, DOS, Windows 95/98/Me/NT/2000/XP, MacOS, BeOS, OS/2, etc.

Python


Python是一种面向对象的解释性语言.

它是一种高级编程语言,也就是说它尽可能将用户与底层操作系统隔离.然而,与其他解释性语言不同的是支持对操作系统的底层访问.因而,通常将划分在处于VB或PERL到系统级的C语言之间的位置.

虽然象PERL,TCL和其他一些语言一样,Python被认为是一种解释性语言,但是它有编译的过程,用编码器将原始的脚本翻译成一系列字节码,然后让字节码在Python虚拟机上面跑.但是由于是脚本语言,所以和C以及PASCAL这类编译语言相比还是慢了三分.但是别急,Python模块的字节码是可以保存的,在需要的时候拿来用就是了,不需要重新编译,而且产生的字节码完全独立于平台和操作系统!了解Java的朋友是不是觉得很眼熟啊?哈.

Python是免费的
免费这个字眼最能吸引眼球了,尤其是对那些BOSS们,使用免费的语言可以不用购买任何软件,而且不用担心版权问题,随意地编写,发布,修改…….程序员如果想深入了解Python内幕,甚至可以下载其源代码!

Python是可移植的
无须多说,许多操作系统都支持Python.

Python的强大功能
几乎没有Python办不到的事情.Python的内核非常之小,但他能够提供基本的构建块,所以程序员能设计很多的应用程序.另外可以用C,C++,Java对Python进行扩展,因此你可以用它开发任何类型的程序.Python解释器提供大量的各种附加模块构成的库来扩展Python程序设计的功能,比如网络通讯,文本处理(广泛的XML支持),以及正则表达式(Regular Expression).

虽然Python的主要目的是向程序员屏蔽底层的复杂性,但是它也支持一些必要的挂钩(hook),扩展和函数,这样我们可以对操作系统的特定区域进行底层访问.上天入地的本事都有了,Python的确是可以做任何事情.

Python的可扩展性
因为Python是用C写的,有些扩展用C++,而且可以访问其源代码,因此可以对Python写扩展.Python提供的许多标准模块支持C或者C++接口.

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的简单性
只要了解Python的基本原理,学习其他内容就会很容易.语言的核心很小,语义和样式非常简单.半天时间学会,轻轻松松.当然这不是说Python语言没有需要深入学习的复杂问题.许多扩展和库,还是需要认真思考才能达到高效使用这门语言的目的.尤其是与其他语言,如TK和SQL进行集成连接时,更是应该如此.

 

http://www.mypython.net/

Creative Commons

Creative Commons (创作共用) 是网络上的数字作品(文学、美术、音乐等)许可授权机制,它致力于让任何创造性作品都有机会被更多人分享和再创造,共同促进人类知识作品在其生命周期内产生最大价值。

“创作共用”由CreativeCommons.org发起,并在全球越来越多地区被广泛采纳,CNBlog.org是CreativeCommons.org在中文领域的授权机构,负责管理、维护和提供中文数字作品的“创作共用”授权服务。目前,中文服务站点正在建设中,想了解Creative Commons的更多信息请访问英文站点

 

 

licenses explained

选择一种许可方式

 

为你的作品选择一个“创作共用”的许可协议并非代表你放弃了自己的版权。而是意味着你的部分权利在某些条件下可以提供给一些接受者。

到底是那些条件? 我们的站点会让你从下面一个设计好的列表中混合和搭配组成你的条件。经过组合,共有11个“创作共用”许可方式可供你选择。

 

 

可以灵活选择的作品许可权利

从“保留所有权利”到“保留部分权利”

我们通常熟知的唯一一种版权声明方式“保留所有权利”(All Rights Reserved)已经被滥用到任何人都可能触犯版权法律,人们只知道在自己的任何大小的作品(甚至本身也是在别人的成果基础上的再创造)都无以复加地声明为“保留所有权利”。这样的结果一方面导致原创者应有的权利得不到尊重,另一方面是很多优秀的作品(无论是艺术作品、文学作品、个人思想还是其他数字作品等)都无法得到最大价值利用或最广泛传播。虽然在很多国家的版权法律默认地赋予原创者很多权利,但是越来越多的人们开始意识到自己并非需要保留所有权利。相反他们更愿意选择“保留部分权利”(Some Rights Reserved)或“不保留权利”(No Rights Reserved)。

十一种授权选择

“创作共用”协议机制提供了由4个最常见的授权选择的组合方式,任何作品都可以通过选择这性地组合声明自己的作品授权,实际上可以有11种常见的组合方式。这些组合方式构成了从“松”到“紧”的授权限制,给作品的创造者更加灵活便利的选择。为网络上的数字作品提供了新的“护身符”。  署名. 你允许别人拷贝、分发、呈现和表演属于你版权的作品,或者基于该作品的派生作品,但是条件是他们必须提供你的名字。

 

      举例: 小美把她的照片加上了“署名”许可权,因为她很希望全世界都可以在提供她的名字的情况下使用这些照片。鲍勃在网络上发现了她的照片,想把它放在自己的主页上。于是鲍勃就在自己的站点上放上了小美的照片,而且清晰地说明小美是作者。

      非商业用途. 你允许别人拷贝、分发、呈现和表演属于你版权的作品,或者基于该作品的派生作品, 但是条件是只能用于非商业目的。

举例: 老蒋把自己的照片加上了“非商业用途”许可权。林丽把老蒋的照片放入一个拼贴宣传画上。在没有得到老蒋的允许下,林丽不可以销售她的拼贴宣传画。

      禁止派生作品. 你允许别人拷贝、分发、呈现和表演属于你版权的作品,但是只能原封不动,不能是派生改动过的作品。

举例: 萨拉为她的一首歌曲的录音加上了“禁止派生作品”许可权。乔安希望把萨拉的歌曲的一部分截取到自己的新歌曲中。在没有得到萨拉的特别允许下,乔安不可以这样做。

Share Alike 保持一致. 你允许别人分发基于你作品的派生作品,但是条件是必须提供和你的作品许可协议相同的许可协议。

注意: 一个许可协议不能既是“禁止派生作品”又是“保持一致”,“保持一致”条款只适用于允许派生作品的情形。

举例: 老蒋的在线照片附加了“非商业用途”和“保持一致”条款。如果林丽是一个业余的拼贴图创作者,她用老蒋的照片放在自己的拼图作品中,这就成了派生作品。“保持一致”的条款要求林丽必须把为她的作品加上“非商业用途”和“保持一致”许可协议。也就是说她必须按照老蒋允许她使用的许可条件把自己的新作品公之于众。

更多的示例请访问示例页面(英文)。

获得一个许可协议

当你选择了“创作共用”提供的许可条件组合,你会获得三种不同表达方式的许可协议:

  1. 共用约定:这是一个简单的许可协议解释,还带有明确易懂的图标示意,让别人可以清楚地明白你的权利。
  2. 法律文本: 这是有关协议的完整法律文本,你要知道这些文本可以在法庭出世。
  3. 数字代码:这是电脑可以理解的协议编码,帮助搜索引擎或者其他应用确认你的作品和使用条款。

使用一个协议

你应当在你的站点上包含一个创作共用的 "保留部分权利" 图标,靠近你的作品。这个图标按钮会链接到共用条约页面,这样全世界就都可以知道你的作品采用了某种许可协议。如果你发现破坏许可协议的行为,你可以按照版权侵犯的基准去诉讼。更多使用“创作共用”协议的帮助和提示内容可以在参考这里(英文)。

 

上海/Palo Alto,Creative Commons组织和CNBlog.org共同发布中文版“创作共用”协议项目。
 

http://www.creativecommons.cn/