开源软件的盈利模式

盈利模式之一:多种产品线
在这种模式中,利用开源软件为直接产生收入的专有软件来创造或维持一种市场地位。例如,开放源代码的客户端软件带动了服务器软件的销售,或者借用开源版本带动商业许可版本的产品销售。这种模式应用的比较普遍。如 MySQL 产品就同时推出面向个人和企业的两种版本,即开源版本和专业版本,分别采用不同的授权方式。开源版本完全免费以便更好的推广,而从专业版的许可销售和支持服务获得收入。再如 Redhat 自 Redhat Linux 9.0 后将原桌面操作系统转为 Fedora 项目,借 Fedora Core Linux 在开源社区的声望而促进 Redhat Enterprise Linux AS/ES/WS 服务器产品线的销售。
盈利模式之二:技术服务型
在这种模式中,开放源代码软件采用了一种全新的市场定位,并非面向产品,而是针对技术服务。JBoss就是这种模式的典型代表。JBoss 应用服务器完全免费,而通过提供技术文档、培训、二次开发支持等技术服务而获得收入。
盈利模式之三:应用服务托管(
这种模式适用于基于开源软件的应用服务供应商(ASP)。
例如, Live! 就是一种构架于 、MySQL 之上的开源软件,它可为企业用户提供实时交谈服务。目前已经有数十家公开提供 Live! 托管服务的应用服务提供商。
盈利模式之四:软、硬件一体化
这种模式是针对硬件制造商的。随着竞争的普及,市场压力迫使硬件公司开发并维护软件,但是软件本身却并不是利润中心,因而采用开源软件。 这种模式为大型公司广泛采纳,比如 IBM HP 等服务器供应商巨头,通过捆绑免费的 Linux 操作系统销售硬件服务器。SUN 公司近期将其 Solaris 操作系统开放源码,以确保服务器硬件的销售收入,也是这种模式的体现。
盈利模式之五:附属品
在这种模式中,出售开放源代码的附加产品。比如在低端市场,出售杯子和T恤衫等;在高端市场上,出售专业编辑出版的文档和书籍。O’Reilly集团是销售开源软件附加产品公司的典型案例,他出版了很多优秀的开放源代码软件的参考资料。O’Reilly实际上雇用和支持了一些著名的开放源代码黑客(例如Larry Wall和Brain Behlendorf),并以此提高它在市场上的声望。
盈利模式之六:品牌战略、服务致上
在这种模式中,开源公司通过开源软件先天的传播优势,以极低的成本建立和传播品牌。并通过向用户提供产品相关的服务来获得回报。 康比尔公司的 Compiere ERP & CRM 软件是这种模式的典型案例。康比尔公司开发了开源的 ERP & CRM ,由于其产品优秀,很快便获得了北美、欧洲和亚洲中小企业用户的认可,Compiere 品牌也因此迅速地传播到了世界各地,在企业管理软件市场已经成为全球知名品牌。
盈利模式之七:市场策略
这种模式,是一种快速抢占市场的营销策略,主要是为以后增强版产品的销售打下基础。 这种情形的案例有很多。比如,微软宣称部分的公开 Office 的源代码,就是执行这种策略。另一个案例则是CRM 领域的新星 SugarCRM,这款由速加科技开发的开源版本从2004年上半年公开下载后广为传播,为在9月推出的盒装专业版套件做好口碑上的准备。
开源软件的经营模式多种多样,随着开源软件的发展,会有更多的盈利模式应运而生。事实上,一家公司可能混合采用其中的几种盈利模式,比如康比尔公司不仅采用了第六种品牌策略,同时也采用了第二种提供技术服务的方式。 在开源软件大潮的冲击之下,包括微软在内的商业软件公司,也开始认可开源软件”软件成为服务”的本质。微软支持的金牌合作伙伴已经提供包括 Exchange Server 2003、SharePoint Server 2003 等在内的托管服务,如 ASP-One.com 每月每用户起价1美元的 SharePoint Server 2003 租赁服务和全包价9.95美元每月的Exchange Server 2003 租赁服务。 在欧洲和亚太地区各国政府的压力下,微软被迫开放Windows 和Office 的部分源代码,以改善政府的信任度,赢得庞大的政府采购订单。 开源软件的商业运动正方兴未艾。这是否会对传统的商业模式构成致命一击?开源软件在走向成熟的过程中,企业用户和政府用户由怀疑上升到愿意尝试,并最终形成了信任。开源软件已经成为软件业未来发展的重要趋势。正如 Navica 公司 CEO 本纳德·高登所说,”短短两三年间,任何人在选择任何企业软件之时,都开始考虑一个问题:是否有开源软件可作替代?”
***老文章,不知道原文出处
标签Tags:, , , , , , , , , , , ,

Nginx限速

看了网上很多的Nginx介绍,就跟着弄,发现总是限制不了速度: 配置如下

http {
limit_zone   one $binary_remote_addr 10m;

{ …..

location /attachments/ {
limit_conn   one 1;
limit_rate 100k;
}
}

}

在万般无奈下,找到这样句话“如果把limti_rate直接放在server{}中,而不是location中,确实能实现限速,但我只想限制附件下载的速度,请问大大该怎么搞?” (更多…)

标签Tags:, , , , , , , , , , ,

完美解决“由于这台计算机没有终端服务器客户端访问许可证”

由于windows2003默认仅支持2个终端用户的登陆。当“终端连接超出了最大连接”的情况出现导致不能登录时,可以:

1、在另外一台Windows2003的机器上运行“tsmmc.msc”,打开远程桌面连接,添加一个新的连接,输入远程服务器的IP地址、远程登录帐号和密码,登录到远程服务器桌面。这个方式可以随时登录到远程桌面。

2、在登录出问题的服务器上, 单击“开始”,指向“管理工具”,然后单击“终端服务配置”。

3、 单击“服务器设置”,然后双击“授权模式”。

4、将“授权模式”更改为“每用户”,然后单击“确定”。 以后就不会出现此类问题了。

原因:Window 2003 不管理“用户 CAL”。这就是说,即使许可证服务器数据库中有一个“用户 CAL”,它在被使用时也不会减少。这样就不会为了让每个用户都有一个有效的终端服务器 (TS) CAL 而根据“最终用户许可协议”(EULA) 的要求删除管理员。在没有使用“设备 CAL”的情况下,如果不是每个用户都有一个“用户 CAL”,就会违反 EULA。

标签Tags:, , , , , , , ,

让IIS只监听指定IP

放入Windows 2003安装光盘,在目录\Support\Tools\下面找到Support.msi文件,安装他。
  安装文件也可以在http://www.cdnunion.net/soft/support.rar下载。
b.用cmd进入C:\Program Files\Support Tools目录。
c.删除0.0.0.0
 httpcfg delete iplisten -i 0.0.0.0
d.设定HTTP.sys(iis)只是侦听192.168.0.2这个IP地址,运行如下命令:
httpcfg set iplisten -i 192.168.0.2
返回的错误代码0代表成功完成
e.重起http.sys,依次在dos模式执行如下命令。
net stop http /y
net start w3svc

f.查询现在http.sys侦听Web服务的端口。
在dos模式用如下命令:
netstat -an
看看 tcp 0.0.0.0:80 0.0.0.0 listening 是否存在,如果不存在,先恭喜一下。
看看 tcp 192.168.0.2:80 …………… 是否存在,如果是,那就真正恭喜你了。
##########################################################

httpcfg query iplisten 查询

标签Tags:, , , , , , , ,

最令PHP初学者头痛的十四个问题

(更多…)

标签Tags:, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,

PHP和Socket简介

Sockets在PHP中是没有充分利用的功能。今天你将看到产生一个能使用客户端连接的服务器,并在客户端使用socket进行连接,服务器端将详细的处理信息发送给客户端。

当你看到完整的socket过程,那么你将会在以后的程序开发中使用它。这个服务器是一个能让你连接的HTTP服务器,客户端是一个Web浏览器,这是一个单一的 客户端/服务器 的关系。 (更多…)

标签Tags:, , , , , , , , , , , , , , , , , , , , , , , , ,

PHP对文本数据库的基本操作方法

PHP实现对文本数据库的数据显示、加入、修改、删除、查询五大基本操作的方法
我用一个留言本程序作为例子,阐述PHP实现对文本数据库的数据显示、加入、修改、删除、查询五大基本操作的方法。
此文本数据库共有字段10个:客户IP、发言时间、客户名、客户EMAIL、客户主页地址、留言表情图片名、客户QQ、客户形象图片、留言内容、管理员回复内容。

1、加入数据程序段。

$date=date(“Y-m-d H:i:s”);//取得系统时间
$ip = $HTTP__VARS[REMOTE_ADDR]; //取得发言的IP地址
$text=encode($gb_text);//去掉留言内容后面的空格.
$fp=fopen(“gb.dat”,”a”);//以只写模式打开gb.dat文本文件,文件指针指向文件尾部.
$str=$ip.” ”.$date.” ”.$gb_name.” ”.$gb_email.” ”.$gb_home.” ”.$face.” ”.$gb_qq.” ”.$head.” ”.$text.” ”.$reply.”\n”;//将所有留言的数据赋予变量$str,” ”的目的是用来今后作数据分割时的数据间隔符号。
fwrite($fp,$str);//将数据写入文件
fclose($fp);//关闭文件
showmessage(“留言成功!”,”index.”,”3″);//留言成功,3秒后自动返回主界面。
其中的$gb_name 、$gb_email、$gb_home、$face、$gb_qq、$head、$gb_text、$reply是由发言表单传过来的数据。
(更多…)

标签Tags:, , , , , , , , , , , , , , , , , , ,

使用Ajax时的十个常犯的错误

上个月我发现许多Web2.0网站大量运用了ajax,但是其中有些很奇怪,因为他们的速度比起前慢了,并且有时候不起作用(在移动设备上),我总结了十条用Ajax的错误(平台无关)

1、 不要通过把整个页面都放在UpdatePanel中更新整个页面。在你运行网页时需要节省时间,不要更新那些可以用javascript and DHTML (DOM)的部分。

2、 要始终记得有这么几种访问者,他们不能用JavaScript或者用的版本比较老的浏览器或者他们对JavaScript支持不好,比如说移动设备。如果这些都不支持,你的访问者能看到什么?

3、 在客户端浏览器缓存相同的请求或者在we服务器端执行缓存。最好的例子是自动完成个下拉菜单,他们的填充在任何时刻都是相同的,一个有错误写法的自动完成的写法可以减慢你的Web服务器(数据库服务器),因为那样会有比起以前用IsPostBack更多地请求。想一下不停的按F5刷新你的网页的情形。如果你有层叠的下拉菜单你就会结算更多地请求。

4、 在你运用CSS或JavaScript时,不要运行,并发的或者运行很长时间的Ajax请求,一般的浏览器只能有两个并发的http连接(我知道可以给变这个,但是默认的还是设为两个)。如果在读取图片的时候由很多Ajax请求的话,速度会变得很慢。

5、 什么时候都用异步调用的方法发送XMLHttpRequest.。如果你要用同步的方法也是没有请问题的,你的浏览器不会因为网络问题或是连接速度慢而冻结的

6、 试着让你的web应用使用一个很慢的网络连接,再尝试用快的TCP/IP连接

7、 你的web应用是作为桌面程序的替代品?你注意观察过一般浏览器在运行你的Web应用一小时,两小时或者几天时内存的使用。不是所有人都有你那样好的机器。

8、 检查在你返回XMLHttpRequest时你的http请求状态代码(status code),那会有一些常见的网络错误像是不可获得的DNS,Http Server error 500 ,你曾经检查过状态代码(status code),它可以告诉你浏览器在一个为连接的模式

9、 试着禁止XMLHttpRequest object!用IE7你能用native object代替ActiveX object,但是你也可以禁止native object。

10、检查你AJAX requests的安全性!你简单的打开了你的数据访问层吗?充分运用FormsAuthentication和PrincipalPermissions。是不是任何人都可以建立一个请求(不只是点击一个链接)?

标签Tags:, , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,

Rsync详解

1、什么是Rsync

Rsync(remote synchronize)是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件。Rsync使用所谓的“Rsync算法”来使本地和远程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分,而不是每次都整份传送,因此速度相当快。

  (更多…)

标签Tags:, , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,

PHP封装常用Javascript为JS类以便快速调用

<?php
# $Id: ..php,v 0.1 p $

// 禁止直接访问该页面
if (basename($HTTP_SERVER_VARS['PHP_SELF']) == "js.class.php") {
     header("HTTP/1.0 404 Not Found");
}

# Purpose 封装了一些常用的Javascript代码,以便在PHP中快速调用

class JS{
     function JS(){}

     #返回上页
     # @param $step 返回的层数 默认为1
     function Back($step = -1){
         $msg = "history.go(".$step.");";
         JS::_Write($msg);
         JS::FreeResource();
         exit;
     }

    # 弹出警告的窗口
    # @param $msg 警告信息
     function Alert($msg){
         $msg = "alert(\"".$msg."\");";
         JS::_Write($msg);
     }

    # 写js
    # @param $msg
     function _Write($msg) {
         echo "<script language=\"javascript\">\n";
         echo $msg;
         echo "\n</SCRIPT>";
     }

     # 刷新当前页
     function Reload(){
         $msg = "location.reload();";
         JS::FreeResource();
         JS::_Write($msg);
         exit;
     }

     #刷新弹出父页
     function ReloadOpener(){
         $msg = "if (opener)     opener.location.reload();";
         JS::_Write($msg);
     }

     #跳转到url
     #@param $ 目标页
     function Goto($url){
         $msg = "location.href = ‘$url’;";
         JS::FreeResource();
         JS::_Write($msg);
         exit;
     }

     #关闭窗口
     function Close(){
         $msg = "window.close()";
         JS::FreeResource();
         JS::_Write($msg);
         exit;
     }

     #
     #@param $frm 表单名
     function Submit($frm){
         $msg = $frm.".submit();";
         JS::_Write($msg);
     }

    #关闭数据库连接
    function FreeResource(){
         // 数据库连接标志
         global $conn;
         if (is_resource($conn))
             @_close($conn);
     }
}
?>

标签Tags:, , , , , , , , , , , , , , , , , , , ,