开源软件的盈利模式

盈利模式之一:多种产品线
在这种模式中,利用开源软件为直接产生收入的专有软件来创造或维持一种市场地位。例如,开放源代码的客户端软件带动了服务器软件的销售,或者借用开源版本带动商业许可版本的产品销售。这种模式应用的比较普遍。如 产品就同时推出面向个人和企业的两种版本,即开源版本和专业版本,分别采用不同的授权方式。开源版本完全免费以便更好的推广,而从专业版的许可销售和支持服务获得收入。再如 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:, , , , , , , , , , , ,

如何删除删不掉的”PRN.asp:.jpg”

一个用户的网站被挂马 很多以prn.开头的文件…这个文件其实是windows禁止建立的..但是可以在dos建立

所以在dos下用更改属性 结果不让改

然后想恢复权限 不让恢复 ,网站的跟目录被加了几个文件,怎么删也删不掉,

prn.gupiao.

prn.liuhe.asp

com1.shouji.asp

或是COM2,COM8等文件主,  

第一步:打开工具>文件夹选项>查看>有一项为”隐藏受保护的操作系统文件(推荐)”,去掉其前边的钩,选中”显示所有文件和文件夹”

第二步:建立一个del.bat的文件 把以下代码黏贴进去…

DEL /F /A /Q \\?\%1

RD /S /Q \\?\%1
然后要删那个文件就把那个文件拖进去即可….

但是又遇到问题了…有一个顽固的…PRN.asp;.jpg 拖进去也删不掉….

不过没问题 这个也可以删…先把这个文件的文件夹里的其他的文件备份…

然后把文件夹拖过去…^_^ 删了吧…

然后把备份的文件 拷回去 ok了

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

PHP和Socket简介

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

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

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

深入探讨PHP中的内存管理问题

一、 内存

  在PHP中,填充一个字符串变量相当简单,这只需要一个语句”"即可,并且该字符串能够被自由地修改、拷贝和移动。而在C语言中,尽管你能够编写例如”char *str = “hello world “;”这样的一个简单的静态字符串;但是,却不能修改该字符串,因为它生存于程序空间内。为了创建一个可操纵的字符串,你必须分配一个内存块,并且通过一个函数(例如strdup())来复制其内容。

以下为引用的内容:

  {

  char *str;

  str = strdup(“hello world”);

  if (!str) {

  fprintf(stderr, “Unable to allocate memory!”);

  }

  }

  由于后面我们将分析的各种原因,传统型内存管理函数(例如malloc(),free(),strdup(),realloc(),calloc(),等等)几乎都不能直接为PHP源代码所使用。 (更多…)

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

mysql优化及全文搜索

my.cnf文件常见优化模块
[mysqld]
port = 3306
-id = 1
socket = /tmp/mysql.sock

# 避免MySQL的外部锁定,减少出错几率增强稳定性。
skip-locking

# 禁止MySQL对外部连接进行DNS解析
skip-name-resolve

# 指定MySQL可能的连接数量
back_log = 256
(更多…)

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

游戏服务器内的组播

游戏服务器在设计时,会有许多组播的需求。比如一个 NPC 需要向周围的观察者播出它的状态信息。无出不在的各种聊天频道中需要向频道中的参于者广播聊天消息等。

通常,我们会为每个组播的请求维护一张列表,然后再把需要的信息包发送给指定列表上的多个连接。这个过程在很多地方都会遇到,一个设计的不太好的引擎,再这里有可能滋生诸多 bug 。尤其在多服务器的设计时尤其如此。

这两天,我试图寻找一种简洁统一的解决方案。

前几天的一篇 blog 讨论了一组服务器设置多个外部接入点的设计。就着这个思路我们可以引申一下。

当每台连接服务器设置一个不大的上限,比如最多同时处理 8192 个外部连接,那么管理分组倒不会带来太大的负担。

我们只需要在逻辑服务器与连接服务器间定义四条协议。

把一个连接加入指定分组。
让一个连接退出指定分组。
向一个分组广播消息。
删除一个分组。
这里,后两条协议是冗余的。

对于第三条协议,如果表示连接号的容量足够大,我们完全可以留一部分号码用于组播。这在 IP 协议中定义 IP 地址的构成时就是用的类似方案。不过我们的设计为了节省带宽,全部用的 2 字节做内部连接号,资源比较紧张,所以就单独设计一条协议了。

对于第四条协议,当最后一个连接退出时,分组就自然取消了。增加一个专门的删除协议,纯粹是使用上的方便。

在连接服务器上维护一个分组,仅仅需要一个 1K 的数组(8192 bits)。而有组播需求时,只用遍历这个数组。在 32 位系统下,只是一个 256 次的循环而已。因为大部分分组的成员都不会太多。数组中充斥着大量的 0 。扫描一下就非常的快了。

连接服务器用一个简单的 freelist + hash 表的技术,就可以高效且动态的管理不限量的分组,无论从 CPU 还是内存的负载来看,都是可以接受的。

我们额外需要做的只是一个分组编号分配管理器。为每个进程分配唯一独立的分组号就够了。在我们现在的设计中,为了尽量避免交互通讯。分配新组号采用不需要反馈的形式。每个需要申请组号的进程,都有独立的组号 id 空间。由分组管理器对若干独立的分组号做一次统一映射。

换句话说,每个服务器进程都可以直接从 0 号分组用起,然后直接用 1 号,2 号,3 号 …… 类似操作系统管理物理内存一样。独立进程拥有的只是虚拟分组号,由管理器映射到全局唯一分组号上。这样就完美的解决了不同服务器进程间的分组编号冲突问题。

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

游戏的帧率控制

我曾在不同场合,多次向人表达我对游戏程序设计的一个重要观点:时间控制,对于游戏程序设计至关重要。

这是因为,大多数电子游戏,都是一个实时人机互动系统。在非人机互动的软件中,软件及硬件一起是一个封闭系统,时间参数对这个系统是否正确工作是无意义的量。这样的系统,我们尽量应该设计成自动化工作模式,只要有正确的输入,得到正确的输出即可。通常,这样的系统的开发,还应该有自动化测试的流程去驱动它。

但实时人机互动软件则不一样,我们得把人看成系统的一部分。人和机器的交互是通过人眼、人耳、键盘、鼠标等完成信息交换的。如果把人脑看成一个线程、计算机看成另一个线程,我们几乎没有能力实现一个资源锁,利用锁的方式保证系统工作永远正常。人脑在全速运转时,适时得不到正确的信息输入,整个系统就可认为出现了故障。

可见,在这样的系统中,时间控制显得多么的重要。 (更多…)

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

用户IP、浏览器、操作系统

<?
$os=$_["HTTP_USER_AGENT"]; // 浏览者操作系统及浏览器

//分析浏览器
if(strpos($os,"NetCaptor")) $explorer="NetCaptor";
elseif(strpos($os,"Opera")) $explorer="Opera";
elseif(strpos($os,"Firefox")) $explorer="Firefox";
elseif(strpos($os,"MSIE 6")) $explorer="MSIE 6.x";
elseif(strpos($os,"MSIE 5")) $explorer="MSIE 5.x";
elseif(strpos($os,"MSIE 4")) $explorer="MSIE 4.x";
elseif(strpos($os,"Netscape")) $explorer="Netscape";
else $explorer="Other";


// 分析操作系统
if(strpos($os,"Windows NT 5.0")) $os="Windows 2000";
elseif(strpos($os,"Windows NT 5.1")) $os="Windows XP";
elseif(strpos($os,"Windows NT 5.2")) $os="Windows 2003";
elseif(strpos($os,"Windows NT")) $os="Windows NT";
elseif(strpos($os,"Windows 9")) $os="Windows 98";
elseif(strpos($os,"unix")) $os="Unix";
elseif(strpos($os,"linux")) $os="Linux";
elseif(strpos($os,"SunOS")) $os="SunOS";
elseif(strpos($os,"BSD")) $os="FreeBSD";
elseif(strpos($os,"Mac")) $os="Mac";
else $os="Other";

//ip
unset($ip);
if($_SERVER['HTTP_CLIENT_IP']){
$ip=$_SERVER['HTTP_CLIENT_IP'];
} else if($_SERVER['HTTP_X_FORWARDED_FOR']){
$ip=$_SERVER['HTTP_X_FORWARDED_FOR'];
} else{
$ip=$_SERVER['REMOTE_ADDR'];
}

//显示浏览者信息
echo "IP地址:".$ip."<br>";
echo ":".$os."<br>";
echo ":".$explorer."<br>";
?>

标签Tags:, , , , ,