当前位置:文档之家› webgis应用开发(附源码)

webgis应用开发(附源码)

webgis应用开发(附源码)
webgis应用开发(附源码)

另辟渠道的webgis应用开发(附源码)

在用ARCIMS开发webgis中小型应用程序的时候,我相信很多人和我一样,就是如何将保存在简单数据库(如ACCESS)里的一些专题点信息该如何体现在地图上,这些点多则有3000,4000,另外还可通过地图操作(添加,平移)进行专题点编辑。如果直接用HTML VIEWER,这可是个不大不小的难题。一开始,我们使用了ACETATELAYER方式进行处理,效果不甚理想,在局域网中多用户并发访问时就有明显的速度瓶颈,更何况INTERNET上。

如下代码就是在此问题上做出的一种解决方案尝试,即部分地图信息客户端化。目前我正在开发,只是部分调试仅在局域网中通过,并没有完全成熟,在线面上还是处理开发阶段。现在介绍一下代码的基本思想,希望大家能够加以讨论。该代码使用JAVASCRIPT开发,它以基础图层地图图片为底图,在此之上进行图层扩展,客户端形成一套小型的webgis,与ARCIMS同步刷新,形成无缝整合,给人感觉就是一个整体的webgis系统。该代码在对象层次关系上模拟ACTIVEX CONNECTOR的重点对象。通过不同refres h函数与基础图层同步更新(为提高客户端速度,开放了很多refresh方式,即只refresh发生改变的对象坐标位置,当然放大缩小平移之类的操作就需要整个客户端refresh,因为每个点都发生了位置变化)。之所以如此层次化,一方面是为了增强代码的可读性和可维护性,另一方面通过封装具体VML代码实现来简化开发过程。这样一来,可以大大减轻服务端的处理,客户端和服务端同时处理,提高地图的运行速度。

我想重点说明的是,如果将部分地图信息移到客户端,必然需要自主开发一些原本集成好的功能(比如说在FeatureLayer中的WHEREEXPRESSION,BUFFER等功能)用于客户端。以BUFFER为例,圆形如何画,必然是vml的oval,可以把它作为一个特殊地图图层来看待,它是一个圆,而不是点,线,区(折线),这就是图层类型扩展。同样的道理还用在监控(关于监控的需求可查看https://www.doczj.com/doc/053340715.html,/bbs/disp bbs.asp?BoardID=23&ID=14998),它是一种特殊的点层,它具体表现内容更丰富,所以也可以把它看成一种图层类型。

当然,之所以费尽心思放在客户端做,还有个很重要的目的就是为了解决地图特殊信息的可编辑。首先说明,此方法对基础图层的属性是无能为力的,它仅是用于在客户端生成的专题信息。

以本代码为例,客户端添加一个新点则需要先在相关对象中add,还需要通过数据库的方式将点保存。如果移动某客户端生成点,则显示客户端的移动过程,然后更改该对象的left和top到XY即可。另外要注意的是,客户端gismap对象中的所有涉及点的坐标都是地图坐标,所以经常需要屏幕坐标和地图坐标之间的转换,以前我说过,现在就不多说了,代码也体现比较明显。

以下是未完成代码的详细内容,以后会将很多实现补充上来,希望给有此需求的人员带来启示,并欢迎大家跟贴讨论,恭请候教。

function GisMap()

{

var i ;

this.control = drawonmap ; //控件名称

this.visible = true ; //是否显示

this.mapXMin = 0 ; //地图最小X

this.mapYMin = 0 ; //地图最小Y

this.mapXMax = 0 ; //地图最大X

this.mapYMax = 0 ; //地图最大Y

https://www.doczj.com/doc/053340715.html,yers = new Layers() ; //图层集合对象

///返回含屏幕坐标的point对象

this.fromMapPoint=function(mapX,mapY)

{

var point = new PointObject() ;

point.x = getJX(mapX) ;

point.y = getWY(mapY) ;

return point ;

};

///返回含地图坐标的point对象

this.toMapPoint=function(screenX,screenY)

{

var point = new PointObject() ;

point.x = getScrX(screenX) ;

point.y = getScrY(screenY) ;

return point ;

};

//获得地图坐标

function getJX(scrX)

{

return (this.mapXMin+parseInt(scrX)/(document.body.clientWidth/(this.mapXMax - this.mapXMi n)));

}

function getWY(scrY)

{

return (this.mapYMax-parseInt(scrY)/(document.body.clientHeight/(this.mapYMax-this.mapYMin))); }

//获得屏幕坐标

function getScrX(mapX)

{

return (mapX - this.mapXMin) * document.body.clientWidth/(this.mapXMax-this.mapXMin) ;

}

function getScrY(mapY)

{

return (this.mapYMax - mapY) * document.body.clientHeight/(this.mapYMax-this.mapYMin) ;

}

///画图

///在不同环境下可更改此函数的实现

this.draw=function()

{

for (i=1;i

{

this.drawLayer(https://www.doczj.com/doc/053340715.html,yers.item(i)) ;

//this.control.innerHTML = this.stringBuilder.toString() ;

}

};

///绘制指定层

this.drawLayer=function(layerObject)

{

switch (layerObject.type)

{

case "tail" :

drawTailLayer(layerObject) ;

break;

case "denamic" :

drawDynamicLayer(this.control,layerObject) ;

break;

case "point" :

drawPointLayer(this.control,layerObject) ;

break;

case "line" :

break;

case "polygon" :

break;

}

};

//绘制监控层

function drawTailLayer(layerObject)

{

var sHTML ;

var tailObject = eval("div_tail") ;

var arr0 ;

for (i=1;i

{

sHTML = '

';

arr0 = layerObject.item(i).content.split(",") ;

if (arr0.length>0)

{

sHTML+= '

' ;

sHTML+= '

' ;

sHTML+= '

' ;

sHTML+= '

' ;

sHTML+= '

' ;

sHTML+= '

' ;

for (j=0;j

{

sHTML+= '

' ;

}

sHTML+= '

' + arr0[j] + '
' ;

sHTML+= '

' ;

sHTML+= '

' ;

}

sHTML+= '

' ;

tailObject.innerHTML+= sHTML ;

}

}

//绘制点层

function drawPointLayer(parentObject,layerObject)

{

var i ;

var oSB = new StringBuilder() ;

if (layerObject.symbol!=null)

{

for (i=1;i<=layerObject.count;i++)

{

//oSB.append(setPointVML(layerObject.item(i),layerObject.symbol)) ;

setPointVML(parentObject,layerObject.item(i),layerObject.symbol) ;

}

}

else

{

for (i=1;i<=layerObject.count;i++)

{

//oSB.append(setPointVML (layerObject.item(i))) ;

setPointVML (layerObject.item(i)) ;

}

}

return oSB ;

}

//绘制线层

function drawLineLayer(layerObject)

{

for (i=0;i

{

if (layerObject.symbol!=null)

{

}

else

{

}

}

}

//绘制区层

function drawPolygonLayer(layerObject)

{

var sHTML ;

for (i=0;i

{

if (layerObject.symbol!=null)

{

}

else

{

}

}

}

//绘制动态图层

function drawDynamicLayer(layerObject)

{

var sHTML ;

sHTML = "" ;

for (i=0;i

{

if (layerObject.item(i).type == "point")

{

}

else if (layerObject.item(i).type == "line")

{

}

else if (layerObject.item(i).type == "polygon")

{

}

}

}

///客户端绘图更新

///在此处,更新的含义更多体现为更改各要素在屏幕的坐标,即left和top this.refresh=function()

{

var obj ;

var i,j ;

for (i=1;i

{

switch (https://www.doczj.com/doc/053340715.html,yers.item(i).type)

{

case "tail":

for (j=1;j

{

//alert(i + "," + j) ;

obj = eval(https://www.doczj.com/doc/053340715.html,yers.item(i).item(j).id) ;

obj.style.left = getScrX(https://www.doczj.com/doc/053340715.html,yers.item(i).item(j).x) ;

//alert(i+"&" + j + ":" + https://www.doczj.com/doc/053340715.html,yers.item(i).item(j).x + "," + obj.style.left) ; obj.style.top = getScrY(https://www.doczj.com/doc/053340715.html,yers.item(i).item(j).y) ;

//alert(i+"&" + j + ":" + https://www.doczj.com/doc/053340715.html,yers.item(i).item(j).y + "," + obj.style.top) ;

}

break;

case "point":

for (j=1;i

{

obj = eval(https://www.doczj.com/doc/053340715.html,yers.item(i).item(j).id) ;

obj.style.left = getScrX(https://www.doczj.com/doc/053340715.html,yers.item(i).item(j).x) ;

alert(obj.style.left) ;

obj.style.top = getScrY(https://www.doczj.com/doc/053340715.html,yers.item(i).item(j).y) ;

}

break;

case "" :

}

}

}

//画点对象

function setPointVML(parentObject,pointObject,symbolObject)

{

var sHTML = "" ;

switch (symbolObject.style)

{

//圆形

case 0 :

sHTML+='

if (pointObject.id!="")

sHTML+= " id=\"" + pointObject.id + "\"";

if (https://www.doczj.com/doc/053340715.html,!="")

sHTML+= " name=\"" + https://www.doczj.com/doc/053340715.html, + "\"";

sHTML+= ' style="position:relative;' ;

if (symbolObject.size>0)

{

if (pointObject.y!="")

sHTML+= 'top:' + (parseInt(pointObject.y)+symbolObject.size/2) + ';' ;

if (pointObject.x!="")

sHTML+= ' left:' + (parseInt(pointObject.x)+symbolObject.size/2) + ';' ;

sHTML+= 'width:' + symbolObject.size + ';' ;

sHTML+= 'height:' + symbolObject.size + ';' ;

}

if (symbolObject.color!="")

sHTML+= ' fillcolor="' + symbolObject.color + '"';

if (symbolObject.border>0)

{

sHTML+= ' strokeWeight="' + symbolObject.border + '"' ;

if (symbolObject.bordercolor>0)

sHTML+= ' strokeColor="' + symbolObject.bordercolor + '"' ;

}

sHTML+=">" ;

break;

//矩形

case 1 :

sHTML+='

if (pointObject.id!="")

sHTML+= " id=\"" + pointObject.id + "\"";

if (https://www.doczj.com/doc/053340715.html,!="")

sHTML+= " id=\"" + https://www.doczj.com/doc/053340715.html, + "\"";

sHTML+= ' style="position:relative;' ;

if (symbolObject.size>0)

{

if (pointObject.y!="")

{

sHTML+= 'top:' + String(parseInt(pointObject.y)+symbolObject.size/2) + ';' ;

}

if (pointObject.x!="")

sHTML+= ' left:' + (parseInt(pointObject.x)+parseInt(symbolObject.size/2)) + ';' ;

sHTML+= 'width:' + symbolObject.size + ';' ;

sHTML+= 'height:' + symbolObject.size + ';' ;

}

if (pointObject.color!="")

sHTML+= ' fillcolor="' + symbolObject.color + '"';

if (pointObject.border>0)

{

sHTML+= ' strokeWeight="' + symbolObject.border + '"' ;

if (symbolObject.bordercolor>0)

sHTML+= ' strokeColor="' + symbolObject.bordercolor + '"' ;

}

sHTML+=">" ;

break;

//图片

case 10 :

sHTML+='

if (pointObject.id!="")

sHTML+= " id=\"" + pointObject.id + "\"" ;

if (https://www.doczj.com/doc/053340715.html,!="")

sHTML+= " id=\"" + https://www.doczj.com/doc/053340715.html, + "\"" ;

if (symbolObject.image!="")

{

sHTML+= ' src="' + symbolObject.image + '"' ;

sHTML+=' style="top:' + pointObject.y + ';left:' + pointObject.x + '"' ; }

sHTML+= ">" ;

break;

}

var newPoint = document.createElement(sHTML) ;

parentObject.insertBefore(newPoint) ;

}

}

///layers集合

function Layers()

{

var pri_LayerArray = new Array() ;

this.count=pri_LayerArray.length ;

this.item=function(index)

{

return pri_LayerArray[index-1] ;

};

this.add=function(layer)

{

pri_LayerArray[pri_LayerArray.length] = layer ;

this.count=pri_LayerArray.length ;

};

this.remove=function(index)

{

var i ;

for (i=index;i

{

pri_LayerArray[index-1] = pri_LayerArray[index] ;

}

pri_LayerArray[pri_LayerArray.length-1] = null ;

this.count=pri_LayerArray.length ;

}

}

///自我约束的layer模式,点线面图层需谨慎使用///使用错误则不能自我判别

function LayerObject(layerid,layername)

{

var pri_objArray =new Array();

this.id = layerid ;

https://www.doczj.com/doc/053340715.html, = layername ;

this.visible = true ;

this.type = "dynamic" ;

this.symbol = null ;

this.count = pri_objArray.length ;

this.add=function(object)

{

pri_objArray[pri_objArray.length] = object ; this.count = pri_objArray.length ;

} ;

this.item = function(index)

{

return pri_objArray[index-1] ;

}

this.remove=function(index)

{

for (i=index;i

{

pri_objArray[index-1] = pri_objArray[index] ; }

pri_objArray[pri_objArray.length-1] = null ;

this.count = pri_objArray.length ;

}

this.setSymbol=function(object)

{

if (this.type == "dynamic")

{

return null ;

}

else

{

this.symbol = object ; //symbol赋值

}

}

}

//PolyLine对象

function PolyLineObject()

var pri_PolyLine = null;

var pri_Stroke = null ;

this.parent = null ;

this.id = "" ;

this.Points = new Points() ;

this.filled = "false" ;

this.startArrow = "" ;

this.endArrow = "" ;

this.dashStyle = "" ;

}

//点集合

function Points()

{

var pri_Points = new Array() ;

this.count = pri_Points.length ;

this.item=function(index)

{

return p_Points[index-1] ;

};

this.add=function(pointObject)

{

p_Points[p_Points.length] = pointObject ; this.count = getLength() ;

};

this.remove=function(index)

{

var i ;

for (i=index;i

{

pri_Points[index-1] = pri_Points[index] }

pri_Points[pri_Points.length-1] = null ;

this.count = getLength() ;

}

function getLength()

{

return p_Points.length ;

}

}

//线对象

function LineObject()

var line = null ;

this.parent = null ;

this.id = "" ;

this.fromX = 0 ;

this.fromY = 0 ;

this.toX = 0 ;

this.toY = 0 ;

this.symbol = new LineSymbol() ;

}

//点对象

function PointObject(id,name,code,x,y) {

this.id = id ;

https://www.doczj.com/doc/053340715.html, = name ;

this.code = code ;

this.x = x ;

this.y = y ;

this.symbol = null ;

}

//监控对象

function TailObject()

{

this.id = "" ;

this.id = "" ;

this.x = "" ;

this.y = "" ;

this.content = "" ;

}

///范围

function Envelope(xmin,ymin,xmax,ymax) {

this.xMin = xmin ;

this.yMin = ymin ;

this.xMax = xmax ;

this.yMax = ymax ;

}

function PointSymbol()

{

this.style=0 ;

this.size=10 ;

this.border=0 ;

this.color = "red" ;

this.bordercolor="" ;

this.transparency = 1 ;

this.image="" ; //如果style=image,给这个属性赋值(相对路径)

}

//字符串连接操作类,大量字符串累加的时候可提高效率

function StringBuilder(sString)

{

this.length=0;

this._current=0;

this._parts=[];

this._string=null;

if(sString!=null)

this.append(sString);

this.append=function(sString)

{

this.length+=(this._parts[this._current++]=String(sString)).length; this._string=null;

return this;

}

this.appendSB = function(stringBuilder)

{

//for (i=0;i

//{

// this.append(String(stringBuilder._parts[i])) ;

//}

this.append(stringBuilder.toString()) ;

return this ;

}

this.toString=function()

{

if(this._string!=null)

return this._string;

var s=this._parts.join("");

this._parts=[s];

this._current=1;

return this._string=s;

}

}

大数据相关开源系统简介汇总

大数据相关开源系统简介汇总 本片博客介绍大数据相关的开源系统以及他们对应的一句话简介, 对于各位想大概了解大数据都有哪些开源系统的同学有帮助。各种相关开源系统简介: 如下是Apache基金支持的开源软件 hdfs 跟GFS类似, 一个分布式文件系统。 mapreduce 跟Google的MapReduce类似, 一个典型的简单的分布式计算框架。 yarn 资源管理系统, 跟Mesos类比。 Avro 跟PB类似, 用于将数据结构序列化成字节码, 在不同的语言之间切换。 官方举例是将C转换给Pig。 BigTop 一个给Hadoop打包和测试的软件。其本来是cloudera公司自己给自己写的一个方便OP部署和搭建环境的工具, 不过因为写得不错, 已经成为了Apache顶级项目。目前支持系列Hadoop生态链中的软件: Zookeeper, Flume, HBase, Pig, Hive, Sqoop, Oozie, Whirr, Mahout, SolrCloud, Crunch, DataFu and Hue Chukwa 收集各种实时监控数据(比如日志)并固化到HDFS上的事情。 Drill Google的Dremel的开源版本。PB以上数据实时秒级查询。 Flume 用来做数据迁移的工具。支持数据包括Avro, files, 系统日志, 落地的系统包括HDFS, HBase。

HBase Google的BigTable的开源版本。宽列存储, 底层基于HDFS。 HCatalog 为HDFS做的一个管理metadata的系统。基于Hive, 提供服务给MapReduce, Pig, 将来会支持HBase。 Hive 支持HSQL, 将SQL转换成MapReduce任务。 Mahout 一个数据挖掘, 机器分析的算法库。 Oozie 用来管理Hadoop中的多轮任务的工具, 类似DAG管理工具。 Tez 也是多个任务的DAG管理工具, 但是其做得更底层,直接替代了MR的调度程序,多个任务之间的数据传递不用再落地到hdfs上了。 Pig 跟Hive类似, 提供比裸写MR更友好的界面, 然后翻译成MapReduce。只是Hive提供的是SQL, Pig提供的是更高级别的语言Pig-Latin, 供用户做数据挖掘和分析。 Sqoop Sql-to-Hadoop。将关系型数据库中的数据导入到Hadoop当中。 ZooKeeper 提供高可用的存储服务。内部采用paxos一致性协议。 Whirr 用于将Hadoop放到各种IaaS里面去运行的环境部署类项目。 Crunch

10 大顶级开源 ERP 系统

10 大顶级开源ERP 系统 https://www.doczj.com/doc/053340715.html,/news/27558 企业资源规划(ERP)和客户关系管理(CRM)系统现在已经成为各种组织和企业的必需品,通过它们,可以轻松实现企业的信息数据标准化、系统运行集成化、业务流程合理化、绩效监控动态化、管理改善持续化。 本文将为你介绍10种顶级的开源ERP软件,它们都可以在网上免费下载到。 1. OpenERP 当提到开源ERP软件时,OpenERP是无可争议的重量级冠军。OpenERP开发的初衷是为了提供SAP、Microsoft Dynamics等商业ERP软件的开源替代产品。 OpenERP功能涵盖财务管理、采购/销售管理、库存管理、MRP、CRM、人力资源管理、销售点管理、项目管理等众多方面。 OpenERP使用Python开发,数据库采用开源的PostgreSQL,它的核心和所有模块都是开放源代码的,采用GNU GPL开源协议。你可以自由使用、修改和发布,只要你也保证开源即可。 2. Openbravo

Openbravo ERP是一套适合于中小企业并且基于web可扩展的ERP系统。这个ERP系统所包括的功能可实现生产管理、仓库管理、销售管理、财务管理。同时内置CRM(客户关系管理)和BI(商业智能)。 3. Apache OFBiz OFBiz是Apache的顶级开源项目,提供了创建基于最新JavaEE/XML规范和技术标准,构建大中型企业级、跨平台、跨数据库、跨应用服务器的多层、分布式电子商务类Web应用系统的框架。 OFBiz不仅是一个产品及订单管理系统,它还提供了一整套功能,涵盖企业所需的方方面面。除了管理产品及其相关内容(如电子商店)外,Apache OFBiz还能履行许多其它重要角色,包括客户关系管理、项目进度、计费管理、人力资源管理以及订单管理。 4. Compiere Compiere是全球著名的开源ERP(集成CRM)企业应用解决方案,适用于全球范围的市场。 通过Compiere,你只需短短几小时就可以使用申购-采购-发票-付款、报价-订单-发票-收款、产品与定价、资产管理、客户关系、供应商关系、员工关系、财务管理、经营业绩分析等强大功能了。

开源云计算平台

开源云计算平台 编辑 分类 (1)AbiCloud (Abiquo公司) AbiCloud 是一款用于公司的开源的云计算平台,使公司能够以快速、简单和可扩展的方式创建和管理大型、复杂的IT基础设施(包括虚拟服务器、网络、应用、存储设备等)。Abiquo公司位于美国加利福尼亚州红木市,它提供的云计算服务包括为企业创造和管理私人云服务、公共云服务和混合云服务,能让企业用户把他们的电脑和移动设备中的占据大量资源的数据转移到更大、更安全的服务器上。 (2)Hadoop(Apache基金会) 该计划是完全模仿Google体系架构做的一个开源项目,主要包括Map/Reduce 和HDFS文件系统 (3)Eucalyptus 项目(加利福尼亚大学) 创建了一个使企业能够使用它们内部IT资源(包括服务器、存储系统、网络设备)的开源界面,来建立能够和Amazon EC2兼容的云 (4)MongoDB(10gen) MongoDB是一个高性能、开源、无模式的文档型数据库,它在许多场景下可用于替代传统的关系型数据库或键/值存储方式。mongodb由C++写就,其名字来自humongous这个单词的中间部分,从名字可见其野心所在就是海量数据的处理。关于它的一个最简洁描述为:scalable, high-performance, open source, schema-free, document-oriented database。 (5)Enomalism弹性计算平台

它提供了一个功能类似于 EC2的云计算框架。Enomalism基于 Linux,同时支持 Xen 和 Kernel Virtual Machine(KVM)。与其他纯IaaS 解决方案不同的是,Enomalism提供了一个基于 Turbo Gears Web应用程序框架和 Python 的软件栈 (6)Nimbus(网格中间件Globus) Nimbus面向科学计算需求,通过一组开源工具来实现基础设施即服务(IaaS)的云计算解决方案[1] 。 商业化云计算平台 (1)微软 技术特性:整合其所用软件及数据服务 核心技术:大型应用软件开发技术 企业服务:Azure平台 开发语言:.NET (2)Google 技术特性:储存及运算水平扩充能力 核心技术:平行分散技术MapReduce,BigTable,GFS 企业服务:Google AppEngine,应用代管服务 开发语言:Python,Java (3)IBM 技术特性:整合其所有软件及硬件服务 核心技术:网格技术,分布式存储,动态负载 企业服务:虚拟资源池提供,企业云计算整合方案 (4)Oracle 技术特性:软硬件弹性虚拟平台 核心技术:Oracle的数据存储技术,Sun开源技术企业服务:EC2上的Oracle 数据库,OracleVM,Sun xVM

开源ERP系统比较

开源ERP系统比较 https://www.doczj.com/doc/053340715.html,/zhanghaooy/blog/item/9a144f017114dadd277fb5d0.html 现在有许多企业将ERP项目,在企业中没有实施好,都归咎于软件产品不好。其实,这只是你们的借口。若想要将ERP软件真正与企业融合一体,首先得考虑企业的自身情况,再去选择适合的ERP软件。 如果你的企业是高速发展的中小企业,希望用IT给管理带来提升,对国内主流ERP产品几万元到几十万元的投入觉得风险过大,还恐惧购买成品ERP。你还有另外一种选择,选择免费且开放的开源ERP软件进行二次开发,根据自己的要求设定适合你企业的ERP。下载开源ERP的产品十分方便,在各大知名的开源网站上都可免费下载它们。注意哦!开源所有的产品都是对外开放的,且源代码都可任意查看,若您在实施ERP时遇到问题,可在开源社区上进行咨询讨论,当然,您也可以请软件开发商进行二次开发。 开源ERP和其它ERP软件比较,如图所示 下面介绍有哪些开源ERP? Compiere Compiere ERP&CRM为全球范围内的中小型企业提供综合型解决方案,覆盖从客户管理、供应链到财务管理的全部领域,支持多组织、多币种、多会计模式、多成本计算、多语种、多税制等国际化特性。

Compiere ERP & CRM 通过申购 - 采购 - 发票 - 付款、报价 - 订单 - 发票 - 收款、产品与定价、资产管理、客户关系、供应商关系、员工关系、经营业绩分析等功能,将企业内部运营与外部客户相关的业务进行规范和优化,将企业由“ 人治” 转变为“ 法治” 的境界。 更好地管理您的业务 * 优化您的库存 * 输入销售订单 * 从 Web 接收订单 * 创建发票并记录发货单 * 收集收货单并与银行对账单核对 * 自动生成或手工输入采购订单 * 记录供应商收货和发票 * 供应商付款 * 输入手工日记帐 * 打印报表和对账单 Compiere ERP 的特色 报价至收款:为潜在客户或客户创建报价单;订单管理;发票;现金收据。它与供应链管理、客户管理高度集成。 申购至付款:创建申购单、采购订单、发票收据;付款处理。它与供应链管理高度集成。 客户关系管理:是所有客户与潜在客户相关活动的逻辑视图。它构成了全部业务流程的一分。 伙伴关系管理:将不同的实体相互链接起来,允许它们管理线索分发、服务请求、渠道以及营销费用。它允许您提供集中式服务。 供应链管理:包括有物料管理的活动,包括库存收货、发货,以及从实体、它的组织到供货商、客户之间的移库和盘存。 绩效分析:覆盖了应用程序的成本计算与会计维度。 网上商店 / 自助服务:提供了您运行 Web 业务所需的一切。信息通过标准的应用程序共享,因此无需同步或特别的集成工作。 Compiere 网上商店组件可被定制为与您的网站相一致的外观和感受。 管理仪表板:提供了一目了然的关键绩效指标( KPI )视图,它能够互动、实时地展现公司的总体经营业绩。仪表板使得高层管理者能够更有效地实现关键性业务战略,追踪公司与销售指标,达成公司的业绩目标。

开源云计算管理平台软件介绍

开源云计算管理平台软件 1.1.1. 2.1 Eucalyptus 产品概述: Elastic Utility Computing Architecture for Linking Your Programs To Useful Systems (Eucalyptus)是一种开源的软件基础结构,用来通过计算集群或工作站群实现弹性的、实用的云计算。它最初是美国加利福尼亚大学Santa Barbara 计算机科学学院的一个研究项目,现在已经商业化,发展成为了Eucalyptus Systems Inc。不过,Eucalyptus 仍然按开源项目那样维护和开发。Eucalyptus Systems 还在基于开源的Eucalyptus 构建额外的产品;它还提供支持服务。 Eucalyptus云计算软件,在一个平台上(分为open source版和enterprise版),提供了对这些资源的抽象。Eucalyptus的源码是公开的。并且有提供给CentOS 5,Debian squeeze,OpenSUSE 11,Fedora 12的软件包。 不管是源代码还是包安装,Eucalyptus 很容易安装在现今大多数Linux? 发布版上。 它提供了如下这些高级特性: 与EC2 和S3 的接口兼容性(SOAP 接口和REST 接口)。使用这些接口的几乎所有现有工具都将可以与基于Eucalyptus 的云协作。 支持运行在Xen hypervisor 或KVM 之上的VM 的运行。未来版本还有望支持其他类型的VM,比如VMware。 用来进行系统管理和用户结算的云管理工具。 能够将多个分别具有各自私有的内部网络地址的集群配置到一个云内。 架构: Eucalyptus 包含五个主要组件,它们能相互协作共同提供所需的云服务。这些组件使用具有WS-Security 的SOAP 消息传递安全地相互通信。 ●Cloud Controller (CLC) 在Eucalyptus 云内,这是主要的控制器组件,负责管理整个系统。它是所有用户和管理员进入Eucalyptus 云的主要入口。所有客户机通过基于SOAP 或REST 的API 只与CLC 通信。由CLC 负责将请求传递给正确的组件、收集它们并将来自这些组件的响应发送回至该客户机。这是Eucalyptus 云的对外“窗口”。 ●Cluster Controller (CC) Eucalyptus 内的这个控制器组件负责管理整个虚拟实例网络。请求通过基于SOAP 或REST 的接口被送至CC。CC 维护有关运行在系统内的Node Controller 的全部信息,并负责控制这些实例的生命周期。它将开启虚拟实例的请求路由到具有可用资源的Node Controller。 ●Node Controller (NC) 它控制主机操作系统及相应的hypervisor(Xen 或最近的KVM,很快就会支持VMWare)。必须在托管了实际的虚拟实例(根据来自CC 的请求实例化)的每个机器上运行NC 的一个实例。 ●Walrus (W) 这个控制器组件管理对Eucalyptus 内的存储服务的访问。请求通过基于SOAP 或REST 的接口传递至Walrus。 ●Storage Controller (SC) Eucalyptus 内的这个存储服务实现Amazon 的S3 接口。SC 与Walrus 联合工作,

开源的云计算平台简介

1. Enomalism (https://www.doczj.com/doc/053340715.html,/) 云计算平台。Enomalism 是一个开放源代码项目,它提供了一个功能类似于 EC2 的云计算框架。Enomalism 基于 Linux,同时支持 Xen 和 Kernel Virtual Machine(KVM)。Enomalism 提供了一个基于 TurboGears Web 应用程序框架和 Python 的软件栈。 2. Euclyptus (https://www.doczj.com/doc/053340715.html,/) 项目(Elastic Utility Computing Architecture for Linking Your Programs To Useful Systems)是 Amazon EC2 的一个开源实现,它与商业服务接口兼容。和EC2 一样,Eucalyptus 依赖于 Linux 和 Xen 进行操作系统虚拟化。Eucalyptus 是加利福尼亚大学(Santa Barbara)为进行云计算研究而开发的。您可以从该大学的网站上下载它,或者通过 Eucalyptus Public Cloud 体验它,不过后者有一些限制。 3. AppDrop (https://www.doczj.com/doc/053340715.html,/) Google App Engine (GAE) 的开放源码克隆版,提供与GAE同样的接口。这意着你可以在Euclyptus上提供类似GAE的服务。(网站已失效) 4. 10Gen (https://www.doczj.com/doc/053340715.html,/) 它既是一个云平台,又是一个可下载的开放源代码包,可用于创建您自己的私有云。10gen 是类似于App Engine 的一个软件栈,它提供与 App Engine 类似的功能 — 但有一些不同之处。通过 10gen,可以使用 Python 以及 JavaScript. 和 Ruby 编程语言开发应用程序。该平台还使用沙盒概念隔离应用程序,并且使用它们自己的应用服务器的许多计算机(当然,是在 Linux 上构建)提供一个可靠的环境。 5. NimBus (https://www.doczj.com/doc/053340715.html,/) 呵呵,网格中间件Globus 的作品,从最早的Virtual Workspace演化而来, https://www.doczj.com/doc/053340715.html,/index.html ,提供与EC2类似的功能和接口 Abiquo公司开源产品 Abiquo公司帮助用户建立,管理以及扩展复杂的计算架构。具体开源云计算产品有三类,三种产品分别是abiCloud, abiNtense和abiData。这三种产品都可以用来架构和开发公有私有混合云,以及云应用等的基础设施。 abiCloud是开源云管理软件,可以创建管理资源并且可以按需扩展。 abiNtense是一个类似于Grid的架构,用来减少大量高性能计算的执行时间。

力学分析开源软件简介

Palabos (https://www.doczj.com/doc/053340715.html,/) PalaBos的是一款高效的流体模拟及其建模库,开发基于C++的STL(标准模板库),有极强的拓展性!尽管其源代码是开放,但是基于PalaBos的FlowKit公司已于2011年9月开始运营(https://www.doczj.com/doc/053340715.html,/),主要为流体力学相关领域提供解决方案,并定制软件。主要的开发者为我的日内瓦朋友Jonas Latt博士,另外一个重要开发成员Orestis博士也是我的合作者和好朋友,其主要的贡献在于湍流模型和多块加密的代码的开发。在版本1.0中,目前二维的多块加密是可用的,三维的曲面边界可用,需要提供stl几何文件(参:examples/showCases/aneurysm)。PalaBos的主要特点在于,其在并行结构上采取并行机制与模型分离的方式,使得应用建模与并行机制不相关。这也使得PalaBos 的易于扩展。下面举例来说明其代码特点: 对于二维计算下面两个基本的文件必须包括 #include "palabos2D.h" #include "palabos2D.hh" #include #include #include #include #include 基本的名字空间 using namespace plb; using namespace plb::descriptors; using namespace std; typedef double T; 基本模型的描述。对于PalaBos,众多模型的应用,都是通过DnQmDescriptor 来描述的。用户可自定义! #define DESCRIPTOR D2Q9Descriptor 初场的定义,建议使用这种方法 T poiseuilleV elocity(plintiY, IncomprFlowParamconst& parameters) { T y = (T)iY / parameters.getResolution(); return 4.*parameters.getLatticeU() * (y-y*y); } 压力的定义 T poiseuillePressure(plintiX, IncomprFlowParamconst& parameters) { T Lx = parameters.getNx()-1; T Ly = parameters.getNy()-1; return 8.*parameters.getLatticeNu()*parameters.getLatticeU() / (Ly*Ly) * (Lx/(T)2-(T)iX); } 密度场的定义 T poiseuilleDensity(plintiX, IncomprFlowParamconst& parameters) {

介绍款开源的项目管理软件

介绍30款开源的项目管理软件 本文向你推荐30款免费的项目管理软件,其中有些是桌面应用,还有一些基于Web的平台,其中不乏优秀开源软件。 TeamLab 是一个免费开源的商业协作和项目管理的平台。TeamLab 主要功能包括:项目管理、里程碑管理、任务、报表、事件、博客、论坛、书签、Wiki、即时消息等等。

XPlanner是专门为XP(极限编程)团队设计的项目管理工具

NavalPlan是一个基于框架开发Web的项目规划,监测和控制软件。

2-plan 同时包含了桌面端和Web应用平台,桌面端是一个用来替代微软的 Project 软件的产品;而Web平台则提供基于Web 的项目管理平台。 WhoDoes, 是一个基于Web 的项目管理工具,主要适合各种复杂度的项目规划,可用来管理每天的项目事务、任务分配、时间安排,并对进度进行跟踪。

Collabtive是一个基于Web的项目管理系统。提供的功能包括:项目管理,即时聊天工具,任务、文件管理,时间跟踪,多语言支持。 ?简单易用 ?能管理项目、里程碑、任务 ?基线导入 ?时间跟踪 ?多语言支持 DotProject是一个基于Web的项目管理工具,采用 PHP 开发。它包含的模块有:公司管理,项目管理,任务进度跟踪(运用甘特图),论坛,文件管理,日历,通信录,备忘录/帮助桌面,用户与模块的权限管理,主题管理。DotProject已被翻译成17种语言并采用模块化设计以便于扩展。

jxProject 是一个免费的桌面项目管理工具,支持 Windows、Linux、Solaris 以及 Mac OS X 系统,主要功能包括:时间轴、甘特图、资源分配、任务管理等等。 PHProjekt是一个模块化的协同办公系统用于共享信息和文档。它包括的组件有:团队日 历,Time Card系统,项目管理,请求跟踪,文档管理, 通讯录管理,Email客户端,论坛,聊天,记事本,共享书签,待办事项目列表,投票系统等。PHProjekt支持多种协议如 ldap,xml/soap和

DevOps开源工具平台介绍

DevOps开源工具平台介绍

获得开发者社区支持的自动化,开源的工具是大家梦寐以求的。本文列举了60 多款最棒的开源工具,可以帮助企业很好的实行DevOps。 一、开发工具 版本控制&协作开发 1.版本控制系统Git

Git是一个开源的分布式版本控制系统,用以有效、高速的处理从很小到非常大的项目版本管理。 2.代码托管平台GitLab GitLab是一个利用Ruby on Rails开发的开源应用程序,实现一个自托管的Git项目仓库,可通过Web界面进行访问公开的或者私人项目。 3.代码评审工具Gerrit Gerrit是一个免费、开放源代码的代码审查软件,使用网页界面。利用网页浏览器,同一个团队的软件程序员,可以相互审阅彼此修改后的程序代码,决定是否能够提交,退回或者继续修改。它使用Git作为底层版本控制系统。 4.版本控制系统Mercurial Mercurial是一种轻量级分布式版本控制系统,采用Python 语言实现,易于学习和使用,扩展性强。

5.版本控制系统Subversion Subversion 是一个版本控制系统,相对于的RCS、CVS,采用了分支管理系统,它的设计目标就是取代CVS。互联网上免费的版本控制服务多基于Subversion。 6.版本控制系统Bazaar Bazaar 是一个分布式的版本控制系统,它发布在GPL 许可协议之下,并可用于Windows、GNU/Linux、Unix 以及Mac OS 系统。 二、自动化构建和测试 1.Apache Ant

Apache Ant是一个将软件编译、测试、部署等步骤联系在一起加以自动化的一个工具,大多用于Java 环境中的软件开发。 2.Maven Maven 除了以程序构建能力为特色之外,还提供Ant 所缺少的高级项目管理工具。由于Maven 的缺省构建规则有较高的可重用性,所以常常用两三行Maven 构建脚本就可以构建简单的项目,而使用Ant 则需要十几行。事实上,由于Maven 的面向项目的方法,许多Apache Jakarta 项目现在使用Maven,而且公司项目采用Maven 的比例在持续增长。 3.Selenium (SeleniumHQ) thoughtworks公司的一个集成测试的强大工具。 4.PyUnit

开源电子商务平台介绍

当说到开源电子商务平台的时候,有着太多的选择。这里我们要仔细研究一下这15个最好的平台,希望可以给你正确的指导。我不想说谎——要找到完美的平台不太容易。 每一个都是有利有弊,为了细微的用户差别进行设计。上传商品并定制你的店铺是非常耗时间的,所以保证在做决定之前尝试多个平台,然后集成到你的网站上。。 1. Magento (免费) 你只需要看一下Magent 的客户列表就能意识到这是一款多么优秀的开源软件。Samsung、The North Face、Stussy 和Nespresso 都使用它来提供他们的在线商店。它被3万商家使用,是世界上增长最快的电子商务平台。企业版需要付费,包含了大量非常有用的功能,不过社区版本,开发者定制版本,可以免费下载使用。 2. osCommerce (免费) osCommerce 遵循通用公共许可证完全免费,可以很好地迎合大多数人的需要。一点都不令人吃惊,考虑到它那么容易的安装和运行,所以它非常流行,驱动了超过228,700

在线商店。不过这样的流行度也有一个不好的趋势——它很难让你的商店从成千上万的店铺里区分出来。如果你想要脱颖而出,就需要使用它可以获取到的5,800插件,这些是付费的。 3. OpenCart (免费) OpenCart 不仅有着漂亮的外观,而且还有很强的扩展性。你可以创建无限多的分类、出售无限多的商品、接受多种货币、使用多语言,以及从20种支付方式和8种运送方式中进行选择。它既对用户友好,也对搜索引擎友好,所以能让你在Google 更突出。顾客可以为出售的商品评价和评分。它不如osCommerce 流行,所以帮助和指导不容易找到,不过看起来很好看。 4. Spree Commerce (免费) Spree 是一款开源的电子商务平台,由Ruby on Rails 开发。使用Spree 的扩展系统,你就可以定制自己的店铺并让你从竞争者中脱颖而出。许多有用的功能,包括支持超过

使用开源项目搭建自己的云计算平台

一切皆有可能在他的Blog上发表了名为《搭建自己的云计算平台》文章,介绍了四款主流的开源项目,用于搭建自己的云计算平台。分别为: Abiquo公司开源产品 Abiquo公司帮助用户建立,管理以及扩展复杂的计算架构。具体开源云计算产品有三类,三种产品分别是abiCloud, abiNtense和abiData。这三种产品都可以用来架构和开发公有私有混合云,以及云应用等的基础设施。 abiCloud是开源云管理软件,可以创建管理资源并且可以按需扩展。 abiNtense是一个类似于Grid的架构,用来减少大量高性能计算的执行时间。 abiData 由Hadoop,hBase,Pig开发而来,是一个信息管理系统,可以用来搭建分析大量数据的应用。是低成本的云存储解决方案。 Enomalism 云计算平台 Enomalism 是提供了成为弹性计算(Elastic Computing)的应用开发和部署方式,功能类似于 EC2 的云计算框架的开放源项目。该项目基于Linux,同时支持 Xen 和 Kernel Virtual Machine(KVM)。Enomalism 提供了一个基于TurboGears Web应用程序框架和 Python 的软件栈。 MongoDB MongoDB是一个高性能的面向文件的开源数据存储项目。十分容易部署,管理和使用。可以通过网络访问,并且由C++语言编写。主要包含的功能特性有易存储对象类型的数据,完全索引支持,查询支持,复制和故障恢复支持,高效的二进制数据存储,自动处理碎片提高云层次上的扩展性。高性能,可扩展,适当的功能使这个项目的主要设计目标。 Eucalyptus 项目 Eucalyptus 项目全称是Elastic Utility Computing Architecture for Linking Your Programs To Useful Systems,由Santa Barbara大学建立的开源项目,是主要实现云计算环境的弹性需求的软件,通过其在集群或者服务器组上的部署,并且使用常见的Linux工具和基本的基于web的服务。使用FreeBSD License,意味着可以直接使用在商业软件应用中,当前支持的商业服务只是亚马逊的EC2,今后会增加多种客户端接口。该系统使用和维护十分方便,使用SOAP安全的内部通信,且把可伸缩型作为主要的设计目标,具有简单易用,扩展方便的特点。这个软件层的工具可以用来通过配置服务器集群来实现私有云,并且其接口也是与公有云相兼容,可以满足私有云与公有云混合构建扩展的云计算环境。下面的列表是该项目的路线图:

开源软件介绍

统计机器翻译开源软件介绍 1990年代初IBM公司的Brown等人提出了5个模型来刻画统计机器翻译,取得了不错的效果,但是在此之后很长一段时间内都没有被大家认可和接受,原因是他们的模型非常复杂,难以理解和实现。直到1999年,一些研究人员齐聚约翰霍普金斯大学(JHU)开办了一次讨论班,大家共同合作,重复了IBM的实验,并在讨论班结束时发布了一个开源软件包Egypt,才使得IBM的模型被广泛研究和使用。 1.第一个开源的统计机器翻译工具包----Egypt 它包括四个模块: Whittle:语料库预处理模块; GIZA:用于从句子对齐的双语语料库中训练词语对齐; Cairo:词语对齐的可视化工具; Decoder:解码器,即用来执行具体的翻译过程模块,这一模块没有开放源码。 随着技术的快速发展,Egypt中很多方法现在已经过时了,然而,其中用于训练词语对齐的模块GIZA现在仍然被广泛使用,利用它能够非常方便地从大规模的双语文本中获取统计知识。 现在大家使用的是它的改进版本GIZA++,GIZA++实现了IBM 公司提出的5个模型,其主要思想是利用EM算法对双语语料库迭代训练,由句子对齐得到词语对齐。 以汉英翻译为例,假设我们有如下的语料库:

这一过程完全由计算机自动进行,不用人工干预,节省了很多人力。而且GIZA是独立于语言的,能够对任何两种语言进行训练,这也是统计机器翻译的优点之一。现在几乎所有的统计机器翻译系统都利用这一工具进行词语对齐的训练。 2.语言模型训练工具----SRILM 语言模型被广泛的应用于自然语言处理的各个领域,来衡量某种语言中一个句子符合语法的程度。 语言模型实际上是一种概率分布,它给出了一种语言中所有可能的句子出现的概率。在它看来,一种语言中,任何可能的单词排列都是可能被接受的句子,只是被接受的概率不同。在统计机器翻译中,根据从语料库中获取的知识(例如单词的翻译概率等),一句话可能有很多译文。有些符合语法和人们的表达习惯,有些则可能不符合语法。语言模型赋予这些句子不同的概率,用以选择最优的译文。

四大主要开源云平台对比

四大主要开源云平台对比 摘要:据悉,天云趋势在中国市场的CloudStack商用成功案例已经超过10家,用户类型包括电信运营商、大型企业、软件园区和政府机构等。 尽管OpenStack和CloudStack的较量聚集了太多关注的目光,但这一市场还有其他重要的参与者。相比影响力相对有限的oVirt,Eucalyptus和OpenNebula 是两个不可被忽视的开源云平台项目。目前,这两个项目也拥有自己的生态系统,以及忠实的开发者群体。对中国企业而言尤为重要的是,Eucalyptus和OpenNebula在中国市场均拥有重量级的企业用户。笔者特别对目前四大主要开源云平台进行了对比,具体如附表所示(以开源项目名称为序)。

从大学研究项目发源的Eucalyptus具有浓厚的研究风格,在开发者中拥有较高的知名度。Eucalyptus系统公司现任CEO为MySQL前任 CEO Marten Mickos,其管理团队对开放源代码项目拥有丰富的管理和运营经验。Eucalyptus的生态圈聚拢了包括戴尔、惠普、Intel、NetApp、 Novell、红帽、VMware在内的重量级厂商。在其网站提供的客户列表中,索尼、Puma、趋势科技、Infosys等知名国际化企业,以及中国工商银行、中国镇江市政府名列其中。

OpenNebula则拥有温和、优雅的欧洲基因。它是由欧洲研究学会发起的虚拟基础设备和云端运算的计划。该项目在2005年启动,2008年年初发布首个开放源代码版本。OpenNebula的支持厂商和用户主要在欧洲,其在中国拥有两个重量级的用户。中国移动研究院的“大云”和中国科学院的“凌云” 项目均基于OpenNebula开源框架构建。 虽然各具特色并拥有重量级的粉丝,但不得不承认,Eucalyptus和OpenNebula 开源社区的规模无法与OpenStack的高人气相比。CloudStack从GPL转向Apache 之后,其社区活跃度快速攀升,成为企业用户和开发者在OpenStack之外重点考察的选项。因此,无论是从社区活跃度带动企业应用,还是市场竞争的角度,OpenStack和CloudStack的比较都在所难免。 天云趋势的孙振南表示,相比OpenStack,CloudStack的优势在于更早地进入开源云平台领域,并且拥有许多商用成功案例。“由于初始目标就是实现商业应用,CloudStack具有良好的易用性,功能更加丰富,可直接应用于生产环境。在基础功能相同的前提下,CloudStack的部署和维护更加容易。OpenStack的安装和配置相对复杂,适合具有强大开发能力和技术人才资源的大型企业使用。如果企业希望通过有限的资源投入构建开源IaaS框架,CloudStack是一个不错的选择。”他说。 据悉,天云趋势在中国市场的CloudStack商用成功案例已经超过10家,用户类型包括电信运营商、大型企业、软件园区和政府机构等。 “经过4年的发展,基于CloudStack的实际投入生产的企业云已超过了130个,在商用方面CloudStack显然表现得更加成熟。除此之外,基于CloudStack的Citrix CloudPlatform单用户节点的部署规模已经达到30000台服务器。Citrix CloudPlatform在管理两种工作负载方面还独具优势。”思杰的Mark Micallef 在邮件中指出。 他所提到的“两种工作负载”,指的是像SAP、甲骨文这样的传统企业负载,以及包括Web服务、Web应用、富互联网应用、高性能计算等在内的新一代工作负载。他还透露,CloudStack在亚太地区的用户包括中国移动、中国电信、国家电网和日本电信运营商KDDI,其IaaS平台均已投入实际的生产运营。 对于CloudStack引以为傲的产品成熟度,OpenStack阵营也给出了充分的肯定。程辉向记者表示,用户究竟如何在OpenStack和CloudStack之间做出选择,开发者群体似乎已经达成了某种共识。即如果看重短期效益,CloudStack在产品化方面的确更加成熟,毕竟它是从商业产品开源而来的。但是,如果企业期望投资未来,着眼五年以上的技术发展趋势,OpenStack则占据明显的优势。 “从目前的发展情况看,OpenStack更具人气,并且拥有非常大的发展潜力。同时,OpenStack在短期内成功建立了庞大的生态体系,赢得了众多IT巨头的支持。而CloudStack现阶段仍是由思杰主要来推动,多少显得‘一拳难敌四手'.”他说。谈到自己所服务的新浪在IaaS平台建设中为何选择OpenStack,程辉坦言OpenStack快速崛起的势头,以及巨大的发展潜力让新浪迅速做出了决定。同时,

开源软件简介

开源软件简介 2.1 自由软件介绍 斯托曼发起的“自由软件运动”是信息资本主义时代“赛博空间”里的空想社会主义,其纲领性文献《GNU宣言》主张:软件应该像空气一样供人自由呼吸,软件版权对社会有害无益。为此,软件的源代码应该共享,软件应该免费,尤其是操作系统软件不应该成为“私有软件”。 2.1.1 自由软件 “自由软件”是指遵循GNU宣言(自由软件联盟宣言书)的原则发布的、用户有权对其源代码自由拷贝、研究、改进和分发且不得限制其他用户拥有此种权利的软件,“自由软件”受到“通用公共许可证”(GPL)即“左版”(copyleft)的保护。更精确地说,自由软件赋予使用者四种自由: 自由之零:不论目的为何,有使用该软件的自由。 自由之一:有研究该软件如何运作的自由,并且得以改写该软件来符合使用者自身的需求。取得该软件之源码为达成此目的之前提。 自由之二:有重新散布该软件的自由,所以每个人都可以借由散布自由软件来敦亲睦邻。 自由之三:有改善再利用该软件的自由,并且可以发表改写版供公众使用,如此一来,整个社群都可以受惠。如前项,取得该软件之源码为达成此目的之前提。 如果一软件的使用者具有上述四种权利,则该软件得以被称之为"自由软件"。 2.1.2 自由软件和免费软件 自由软件的英文为“free software”,“free”一词有“自由”、“免费”的双重含意,因此要如何分辨自由软件(libre)和免费软件(gratis)呢?自由软件运动的创始人——理查德?马修?斯托曼(Richard Matthew Stallman)提供了以下的定义:‘自由软件的重点在于自由权,而非价格。要了解其所代表的概念,你应该将“自由”想成是“自由演讲”,而不是“免费啤酒”’。更精确的说,自由软件代表电脑使用者拥有选择和任何人合作之自由、拥有掌控他们所用的软件之自由。

相关主题
文本预览
相关文档 最新文档