2012年11月16日星期五

国台办要求台湾多发正面新闻

 
 

satan 通过 Google 阅读器发送给您的内容:

 
 

于 12-11-16 通过 Solidot 作者:blackhat

台湾陆委会表示,两岸新闻交流不只是媒体互设办事处,最重要的是两岸新闻资讯交流环境的改善,能让两岸人民共享资讯对等交流所带来的益处。但两岸交流以来,新闻资讯往来仍呈现失衡的现象,原因包括大陆封锁台湾新闻网站,及台湾记者在大陆没享有实质的采访自由。国台办新闻发言人杨毅批评台湾有关方面设置"人为障碍",表示实际上大陆对互联网是开放的,实行依法管理。我们希望有关的境外网站客观地报道大陆情况,反对利用互联网传播违反国家政策的相关信息。



 
 

可从此处完成的操作:

 
 

中国医疗改革的失败原因

 
 

satan 通过 Google 阅读器发送给您的内容:

 
 

于 12-11-16 通过 阮一峰的网络日志

中国的医疗改革,公认是失败的。

高昂的医疗费、稀缺的医疗资源、紧张的医患关系,严重影响人民的生存质量,使得普通老百姓"望医却步"。

(图片说明:2012年8月22日的北京协和医院挂号大厅,来源《中国消费者报》

最近,我在阅读四卷本的《朱镕基讲话实录》

第二卷有一篇1997年10月27日的讲话,题为《基本医疗保障要低水平、广覆盖》

读了这篇讲话,我算是彻底明白了,中国医疗改革为什么会失败,一切都是因为15年前的决策。

一、关于医疗保障的总体水平

财政不宽裕,只能向人民提供低水平的医疗保障,这是可以理解的。但是没想到,这篇讲话明确说了,医疗保障只能是最低水平

  "在我国目前的国情下,任何社会保险制度都只能有一个最基本的保障水平,既不能向美国、欧洲看齐,也不能向一些东南亚国家看齐。我们没有这个能力,无论如何做不到。中国目前还建立不起一个完善的社会保障制度,没有钱呀!"

  "在我国建立社会保障制度最重要的一点就是要符合社会主义初级阶段的国情,只能确定一个最基本的、低标准的保障水平。"

  "标准搞高了,实际上落实不了,最后就会变成国家的负担,增加财政赤字。与其定一个比较高而实际上收不到钱的标准,还不如先不要提高这个标准。"

就是一句话,财政不能在医疗保障上多花钱。

二、关于大病支出

大部分的医疗费,都花在大病上面。作为对策,讲话也明确说了,大病支出是封顶的,财政不能多花钱。

  "大病花统筹基金要有个封顶线,原则是尽量保证不要超支。经过测算,确定了一个社会统筹医疗基金最高支付限额。要说明总共就这么多钱,每个人只能花一定的限额,超过这个限额,没有办法支付;否则,如果无限制地从统筹基金里拿钱,就会难以为继。封顶要讲出去,各地都要下这个决心; 否则,医疗保险搞不下去。有的地方不敢封顶,那就只能自己背包袱,中央财政没钱可补。"

三、关于低收入者的医疗保障

既然大病支出是封顶的,那么超支的部分只能自费。对于那些付不起的人,讲话也考虑到了。

  "亏损企业的职工超出基本医疗保障水平以外的医疗需求怎么办呢?只能通过社会救济。我们也要建立慈善机构,提倡搞社会捐赠。我们要号召那些收入较高的工商界人士,在力所能及的范围内搞一点捐献,参加一些慈善事业。"

四个字,"祝君好运"。

四、关于公务员的医疗保障

  "机关与企业的医疗保险相比要有不同的办法。当前机关干部的工资水平比较低,在制订医疗保险方案时,不能不考虑这个现实。机关与企业缴纳基本医疗保险金的标准应该一样,机关干部超出基本医疗保障水平以上的必需的医疗费用要由财政拿钱。以往国家为机关干部付出的医疗费用不能减少,而且还要逐步有所增加。"

财政可以为这部分人出钱。

五、关于卫生系统的改革

这是最匪夷所思的部分:医疗人员太多了,必须下岗一部分人。

  "卫生系统与国有企业一样,也存在人浮于事的情况。现在,城市里设了这么多的医疗机构(包括企业的医疗机构),供给大大超过需要,资源相对过剩,必须进行结构调整。要实施区域卫生规划,实现资源优化配置与合理利用,减人增效。多余的人员要下岗分流,否则,搞那么大的摊子,养那么多的人,医疗费用肯定贵得不得了。"

原来,医院是财政出钱的,少一点医生,财政可以少出一点钱。

六、关于医疗改革的前景

15年前决策者的预测,不评论了。

  "如果卫生系统减一点人,成本降低了,医疗费用就会下降,医疗保障水平也就提高了。"

(完)

文档信息


 
 

可从此处完成的操作:

 
 

2012年11月14日星期三

高斯模糊的算法

 
 

satan 通过 Google 阅读器发送给您的内容:

 
 

于 12-11-14 通过 阮一峰的网络日志

通常,图像处理软件会提供"模糊"(blur)滤镜,使图片产生模糊的效果。

"模糊"的算法有很多种,其中有一种叫做"高斯模糊"(Gaussian Blur)。它将正态分布(又名"高斯分布")用于图像处理。

本文介绍"高斯模糊"的算法,你会看到这是一个非常简单易懂的算法。本质上,它是一种数据平滑技术(data smoothing),适用于多个场合,图像处理恰好提供了一个直观的应用实例。

一、高斯模糊的原理

所谓"模糊",可以理解成每一个像素都取周边像素的平均值。

上图中,2是中间点,周边点都是1。

"中间点"取"周围点"的平均值,就会变成1。在数值上,这是一种"平滑化"。在图形上,就相当于产生"模糊"效果,"中间点"失去细节。

显然,计算平均值时,取值范围最大,"模糊效果"越强烈。

上面分别是原图、模糊半径3像素、模糊半径10像素的效果。模糊半径越大,图像就越模糊。从数值角度看,就是数值越平滑。

接下来的问题就是,既然每个点都要取周边像素的平均值,那么应该如何分配权重呢?

如果使用简单平均,显然不是很合理,因为图像都是连续的,越靠近的点关系越密切,越远离的点关系越疏远。因此,加权平均更合理,距离越近的点权重越大,距离越远的点权重越小。

二、正态分布的权重

正态分布显然是一种可取的权重分配模式。

在图形上,正态分布是一种钟形曲线,越接近中心,取值越大,越远离中心,取值越小。

计算平均值的时候,我们只需要将"中心点"作为原点,其他点按照其在正态曲线上的位置,分配权重,就可以得到一个加权平均值。

三、高斯函数

上面的正态分布是一维的,图像都是二维的,所以我们需要二维的正态分布。

正态分布的密度函数叫做"高斯函数"(Gaussian function)。它的一维形式是:

其中,μ是x的均值,σ是x的方差。因为计算平均值的时候,中心点就是原点,所以μ等于0。

根据一维高斯函数,可以推导得到二维高斯函数:

有了这个函数 ,就可以计算每个点的权重了。

四、权重矩阵

假定中心点的坐标是(0,0),那么距离它最近的8个点的坐标如下:

更远的点以此类推。

为了计算权重矩阵,需要设定σ的值。假定σ=1.5,则模糊半径为1的权重矩阵如下:

这9个点的权重总和等于0.4787147,如果只计算这9个点的加权平均,还必须让它们的权重之和等于1,因此上面9个值还要分别除以0.4787147,得到最终的权重矩阵。

五、计算高斯模糊

有了权重矩阵,就可以计算高斯模糊的值了。

假设现有9个像素点,灰度值(0-255)如下:

每个点乘以自己的权重值:

得到

将这9个值加起来,就是中心点的高斯模糊的值。

对所有点重复这个过程,就得到了高斯模糊后的图像。如果原图是彩色图片,可以对RGB三个通道分别做高斯模糊。

六、边界点的处理

如果一个点处于边界,周边没有足够的点,怎么办?

一个变通方法,就是把已有的点拷贝到另一面的对应位置,模拟出完整的矩阵。

七、参考文献

* How to program a Gaussian Blur without using 3rd party libraries

(完)

文档信息


 
 

可从此处完成的操作:

 
 

2012年11月13日星期二

Google光纤上线,实测速度700Mbps

 
 

satan 通过 Google 阅读器发送给您的内容:

 
 

于 12-11-13 通过 Solidot 作者:blackhat

本周二,备受期待的光纤入户服务Google Fiber在堪萨斯城正式开始为订户提供网络接入服务,搜索巨人以每月70美元的价格为居民提供1 Gbps接入速度,价格低于其它美国ISP但同时网速却更高。一位Google Fiber用户称,他的网速一直维持在600-700 Mbps左右,他花了大约两分钟时间用BT下完了Ubuntu镜像。



 
 

可从此处完成的操作:

 
 

2012年11月12日星期一

性教育的玩笑话

 
 

satan 通过 Google 阅读器发送给您的内容:

 
 

于 12-11-12 通过 张无计的个人博客 作者:张无计

冰清玉洁

最近的人们似乎特别容易激动,比如鼓掌把手都拍麻了,或者一听到什么讲话就抑制不住热泪盈眶简直要哭晕过去。然而冲动是魔鬼,比如半个月前一位年仅17岁的壮士就挥刀自宫,原因是自己的命根子的不可操控性。这让我想起曾经的东北王高岗在公开场合说过的一句话:"小资产阶级狂热就像是一根鸡X,动不动就硬起来了"。

一、性教育是个啥

以前和一个香港朋友聊天,他说他第一次到大陆的时候来吓了一跳。街上扯的横幅,上书"加强党的先进行教育"。他顿时心里就犯了嘀咕,怎么这大陆的性教育还分先进的和落后的?我印象中的性教育就是初中时候有时候老师进来会让全体男生出去自由活动,女生上课——我到现在都不知道那是什么课,但想必和这个有关。也有人这样描述他经历过的性教育课:老师走进教室,让大家把《生理卫生》课本拿出来,然后一阵沉默,大眼瞪小眼。终于,老师说了句,"大家自己看吧"。

二、性教育该由谁来教育

人们总是在责备学校在性教育方面的失职。其实不然。纵观现在的中学,性教育不但非常普及,而且进行的如火如荼,学生们已经从理论知识积极的转入实操当中。这是句玩笑话。

开展性教育本身对学校而言没什么成本和难度,占用几节班会课,派几个流氓男教师即可,但家长却成了一大阻碍。我坚定的认为在这个问题上,学生家长是最可恶且不可理喻的人。他们一方面反对性教育,担忧因此让他们的孩子早熟,另一方面孩子怀孕了又来赖学校。又要马儿跑,又要马儿不吃草,一副干部做派。到最后,学生的性教育老师还是靠那几位德艺双馨。这不禁让我想起了某美国电影的情节:

小孩子问妈妈:我是哪里来的?

妈妈回答:你是鹳生的。

小孩子问:那是谁睡了鹳?

妈妈:……

三、越快乐越堕落

挥刀自宫的这位少年并不是太悲剧,由于现代医学科技的存在,他的命根子不但能复原如初,而且可以召之即来,来之能战。换做以前就悲剧了。我记得大约十五年前有个类似的新闻,不过那小子颇有些破釜沉舟的气概,一刀剁下来之后直接顺着后窗扔出去了。

古时候更加没有性教育,大姑娘完全是出嫁前的一晚由前辈面授机宜,傻小子则基本靠自己领悟。这说明我们的文化对这类话题是相当排斥的。这就像我们都喜欢钱,但如果有人当众以金钱为条件要我们做某事,我们一定会装作大义凛然的拒绝或者学雷锋做好事不求回报。赵云高喊"大丈夫何患无妻",终获评"赵子龙浑身是胆",可能胆多的把肾的位置都占了。

又想要,又想大家以为自己不要。

四、李银河的奋斗

我不非常了解李银河,也不同意她的许多见解,但我相信她是一个很容易被误解的人。她说女职工上班被强奸属于工伤,小沈阳的表演侮辱了同性恋,主张失足合法化,取消刑法中聚众淫乱罪等等都争议颇多。

除了小沈阳的那个问题我都是赞赏李银河的。因为小沈阳的表演不是侮辱同性恋,而是侮辱了人类的智商。南京某副教授组织几位同志换妻娱乐,这是在自愿的基础上进行的绿色环保的活动,是绿巨人谢霆锋高大形象的一种延伸。既没有危害他人,也没有危害社会,以聚众淫乱罪课以刑罚确实不妥。

但是人们在谈论起李银河的时候必须表现出一种蔑视的态度,这样才能凸显出自己的正直和纯洁。仿佛把脏水泼向一切和性有关的人和事,自己的冰清玉洁、拈花微笑了。

这是病,得治。

结语:李银河的路也就是性教育的路,只不过她有点太超前了。什么换妻、同性恋的问题可以先不去理,但是网吧生孩子之类的事情要先解决好,至少要告诉傻小子们,剁下来后必须保存好,别从窗户扔出去!


 
 

可从此处完成的操作:

 
 

中国屏蔽Google旨在测试外界反应

 
 

satan 通过 Google 阅读器发送给您的内容:

 
 

于 12-11-12 通过 Solidot 作者:blackhat

Google服务上周五被屏蔽了大约十二个小时,《好莱坞报道》引用分析人士的话称,中国此举旨在测试政府的控制能力和观察外界的反应。greatfire.org的博客认为,"可能是某人不小心按错了按钮,对错误的域名进行了DNS污染。他们可能只想封锁 mail.google.com",但"中国政府不仅封锁了google.com 和其子域名 (比如 mail.google.com, play.google.com, maps.google.com 等),他们还DNS污染了google.com.hk 和google-analytics.com. 这不可能是一个错误导致的-他们必须添加3个封锁规则. 如果这不是因为错误导致, 这次对Google封锁还可能因为什么?"作者认为,中国可能旨在测试人民的反应,例如新浪微博就没有屏蔽Google搜索。



 
 

可从此处完成的操作:

 
 

2012年11月4日星期日

[原]Python 于 webgame 的应用(上)

 
 

satan 通过 Google 阅读器发送给您的内容:

 
 

于 12-11-2 通过 赖勇浩的编程私伙局 作者:lanphaday

赖勇浩(http://laiyonghao.com

注:本文根据 2011 年 12 月 日我在上海 PyCon China 上的报告的录像整理而来,有较多口语,但废话不多。

原录像:http://e.gensee.com/v_3df867_14

(前面约四分半钟的暖场与自我介绍,略)今天的主题演讲其实受到两个人的很大的启发,一个是洪强宁洪教授,他在 2010 的时候做过一个叫《Python 于 web2.0 网站的应用》,大家可以看到我今天这个标题就是直接从他那里借鉴过来的,连微创新都没有。这个 slide 是很好的,所以我有给出网址,大家可以去看一下。然后还有沈崴,沈崴在 2010 年的时候也写了一个 slide,就是《Python 编程艺术》。这个 slide 对我的 Python 代码的风格影响非常大,他主要是讲到了应用 Python 时应该遵循怎样的编程哲学,也就是说怎样更加 Pythonic。这两个 slide 我曾经在珠三角技术沙龙的某次活动上说是我在 2010 年遇到的最好的两个幻灯片。

今天我以我经历的项目为蓝本,向大家介绍一下 webgame 服务器端开发这一块的技术和工具。大部分内容都是我在过去或现在的项目中使用的,有小部分内容是我以后才会在项目中用的,大家可以只当我是在做一个介绍,不要当我在做一个推广。如果你选择了这些技术,我不负责任,风险自担。所以这是一个源于项目、高于项目的(分享),因为我在做项目的过程当中会做一些思考和实验,然后这些思考和实验的结果就反映在这个演讲里面。

(开始项目介绍)嗯,这是刚才跟大家提到过的《天下盛境》,它是一个横版卷轴的动作类网页游戏,可以看到它的地图是从左到右移动的,可以在主城里交友、跟网友互动,或是在副本打怪。它现在 host 在 0505u.com 这个运营平台,服务器端完全使用 Python 开发,没有一行 C 代码,从去年(2010 年)的 8 月份开发到现在(2011 年 12 月初)。这是我最近做的一个项目,因为演讲主题会讲到前做的一些东西,所以再介绍另一个项目——web 版的棋牌。它其实就是 QQ 游戏的一个仿制品,在我自己的网站上有提供给大家访问,它的服务器端也是完全用 Python 来开发的,时间大概是用了两三个月的时间来开发,然后后面有一些零星的维护。它是一个半成品,不是一个可以商用的成品。

接下来从库,也就是 library 的角度来介绍一下相关的开发。首先,对于 Python 在项目中的"位置"大家是怎么看的呢?游戏里面,经常用到脚本语言,比如最常用的一个脚本语言 LUA,一般来说网游会用 C++ 写一个 host,由它调用多个 LUA 脚本来完成一个项目(的业务逻辑)。这就是 LUA 项目常见的(脚本)存在形式,而 Python 的话稍有不同,Python 本身就是主体来的,有一些 C/C++ 写的扩展来解决某些特定的问题,也有一些用 Python 来写的业务逻辑,通常 Python 的网游就是这样的一个结构(见下图)。


大型的 Python 项目大家看看是不是这样的:首先有一个入口的主文件 main.py,然后有几个业务逻辑的文件(file1.py、file2.py),然后同层有一些自制或公司用的库(lib1/lib2/lib3),大家的项目是否都是这样的结构?

 

这样做是不对的。但是我之前经历的几个项目、包括我之前看到过的几个项目,都是这样做。然后我认为,大中型的 Python 项目的结构应该是这样的:


它就是一个入口文件,然后写了一些业务逻辑(file1.py/file2.py),就是这样。大家可能会觉得有一些奇怪,那不是更小了吗?是的,其实我主张 lib 要放在 site-packages 里面,也就是做的时候,库就是库,你要分开,不要跟业务逻辑混在一起。但是大家觉得有必要搞那么复杂吗?用刚才的方式也赚到钱了呀。项目也上线了。其实呢,这么做是有一些好处的,而且最重要的是它不复杂。


其实就只是写一个 setup.py,就是用 distutils 写一个 setup.py 然后你再把它打包、安装过去就可以了。setup.py 有两个比较关键的地方,第一个就是如何避免手写 setup.py,第二个就是怎么建立命名空间包。所谓命名空间包就就是类似这种先有一个 abu 的前缀,后面才是 rpc 的包名,这样我们就可以建立专门用来做数据库的 abu.db,包括我们自己的业务逻辑,比如 abu.qipai。这个在 zope 项目是比较常见的。为了构建这样的结构,我给大家介绍一个东西——paster。因为它已经放上 pypi 所以大家可以使用 pip/easy_install 来安装它。它提供了创建项目、安装、测试、部署和运行的全栈式的支持。


大家可以帮看一下它的帮助,它后面可以加很多命令,比如创建项目、运行项目,还有产生配置文件之类的。有很多项目都使用它来构建自己的功能,比如说像 pylonsturbogearszopeskel 等。如果要通过 paster 来运行服务的话,像今天大妈(ZoomQuiet)说到 supervisor 是吧,其实是我比较鄙视的一个东西来的,它不好用,可以试一下这个,另外我也比较推崇 start-stop-daemon,无论如何,我觉得不需要再手写守护进程,没有必要。通过 pastedeploy 可以把自己的应用以守护进程的方式或其它方式运行起来。以上是对 paster 的简单介绍,接下来看一下它的基本用法。

要创建一个应用或一个库,首先要有一个模板。可以通过(create 子命令的 --list-template 参数来查看当前环境可用的模板,比如在这里有一安装就有的 basic_package,然后可以用 -t 参数指定模板,后续可跟项目名,即可创建(项目)包。paster 会询问一些问题,比如版本,只需要填入或采用默认值即可,等询问完成,就获得了 setup.py 和相应的目录结构及相关文件了,马上即可使用,无需手写,因为 setup.py 里的 setup 函数调用有许多参数,而且这些参数还支持多种形式,要了解清楚也是非常困难的事情(,所以能不手写就不手写吧)。以上讲述的是如何避免手写 setup.py,接下来聊一下如何创建命名空间包。创建命名空间包,可以先通过 pypi 安装 pbp.skelspbp.skels 带有许多模板,可以加速创建命名空间包之类的应用,节省宝贵时间。安装以后,可以看到多了一个 pbp_package


然后可以通过 -t 参数指定使用这个模板来创建带点的命名空间包了。通过命名空间,可以有效地把自己的代码与别人的代码分隔开来。接下来是一个深入的主题,我不在此展开,有兴趣的朋友可以去读一下这篇 wikihttp://lucasmanual.com/mywiki/PythonPaste),它讲述的是怎么样针对 paster 编写自己的横板、扩展它的命令,因为 paster 甚至可以让你自己添加扩展自己的命令。

(再回到 setup.py 上来),通过它可以做到项目生命周期的全系列支持。比如在开发时使用 develop 子命名,可以避免每一次改动都要 install 一次。还可以用 test 进行测试,bdist/sdist 打发布包,register 在 pypi server 注册,用 upload 把发布包上传到 pypi server 等。

所以通过这些工具的支持,大家可以很方便地把代码以库的形式分隔开来,放到库应该在的地方,而不是跟业务逻辑代码混在一起,这也有利于在产生服务器上部署代码。甚至可以自建 cheese shop,也就是 pypi server,可以建立一个公司内部使用 cheese shop,就能方便同事使用你的项目。特别是像我前东家网易这样的大公司,有时候想推广一些东西给同事用,同事说我很难用上你的东西啊,比如要穿越内网隔离之类的很麻烦,那就可以通过自建 cheese shop 来解决。

(还有一个最佳实践就是)每一次开发软件包的时候,都应该有一个干净的、纯洁的环境。virtualenv 可以帮助大家建立一个纯净的环境。在项目发布的时候,不要使用系统的那个 python 环境,而是应该针对每一个项目建立相应的 virtualenv 的目录,用 virtualenv 里的 python 来运行它。去年洪教授已经在它的幻灯片里介绍过了,大家可以找来看一下,他的幻灯片写的非常详尽、严谨,而且把一个 pythoner 应该要了解的东西他基本都有介绍到,我从他那里学习到很多。

接下来讲一下插件,首先,插件跟库有什么不同呢?为了讲好这个话题,我曾特意搜索了一下,结果看到 stackoverflow 上有一个很好的解释(http://stackoverflow.com/a/2792342):插件扩展了大性应用的能力;而库则是一系列的子程序或 class 来帮助你的开发。所以库和插件是两个有较大区别的概念,所以我今天是分开来介绍的。(举个生活中的例子),伞就是一个插件,当手握一把伞的时候,人就有了"防雨"的能力了。(回到软件开发中),我们以棋牌项目为例,如图,大家可以看到有多种游戏在其中:


有斗地主、五子棋和象棋等,这些可以看作是(软件的)"功能"。接下来转到后台看一下,可能会稍有不同的感觉:


这个棋牌的项目是每一张桌子是一条独立的进程来运行的,比如我和另一个人下棋,那们就会有一条单独的进程为服务我们。进程以 desk/main.py 作为入口点,它后面可以跟不同的参数,如果跟的是 xiangqi,那么它就会加载象棋业务逻辑的插件,成为一个象棋服务器;参数是 doudizhu,则会加载斗地主的插件,成为一个斗地主服务器。这就给开发业务逻辑程序员提供了很好的扩展性,而且可以匹配权限隔离,也可以通过封装降低业务逻辑的开发技术,可以让相对初级的程序去开发业务逻辑,甚至干脆外包也不会暴露太多细节。以这个棋牌项目为例,开发业务逻辑(游戏玩法)的人不需要了解网络编辑,不需要了解数据库,不需要了解多线程,因为它开发的时候不需要调用原始的网络、数据库、多线程的接口,因为它们都是 host 提供的功能,他们只是实现 host 定义好的接口(或协议)。这其中也是通过 setuptools 来做的:


大家看这个 doudizhu 目录,它里面有个 setup.py,还有一个很重要的是 game_impl.py 文件。在 game_impl.py 文件中,它实现了业务逻辑,也就是实现了 host 定义的接口。接下来我们先看看 setup.py 文件,大家可以看到其中最重的是这两行:可以看到定义了一个 qipaionweb.games 的节,节里面有个叫 doudizhu 的配置项,它的值是 doudizhu.game_impl:GameImpl。这个值是一个 class,它也可以是一个 function


接下来讲一下如何加载插件,大家可以看以下代码:


大家可以看到 get_game_impl_class 函数接受一个 game_name 参数,这个 game_name 参数其实就是前面讲到的命令行传入的参数,比如 xiangqidoudizhu 之类的。然后通过 pkg_resources.load_entry_point 把 setup.py 里通过 entry_points 参数定义的内容取出来,在这里也就是 class GameImpl 啦,所以接下来把它实例化后就可用了。在 host 中,我们除却定义接口,还做了一些业务封装和通用功能,比如与上一级进程(也就是房间进程通信),比如每一个小游戏都有的踢人,统一管理业务相关的计时器等。游戏的实现首先是根据定义实现接口,也就是实现业务逻辑。业务程序员不接触网络、不接触数据库、面对的也是单线程的编程环境,可以大大地降低开发难度。对于插件的话题,大家还可以参考一下 trac 的组件架构,喜欢 OOD 的朋友应该能从中借鉴不少东西,我自己也从中学习到许多,比如它的组件管理器、组件和扩展点,以及接口的声明等。trac 的架构与我刚才讲的稍有不同,我讲的是一个很简单的版本,因为棋牌并不需要像 trac 项目那么高的扩展性。


这是 trac 文档里的两张图,可以看到 trac.core 里面有一个组件管理器,它对应很多个组件,而组件就有很多个扩展点,每一个扩展点都会实现某一个接口,大概就是这样的架构。它的 wiki 里面有详细的文档,大家可以在线访问。插件机制不只有这一种,甚至可以自己设计和实现,比如今天上午演讲的 limodou 写的 ulipad 里面就自己实现了一套插件机制。它是一套借助 mixin 来实现的插件机制。

游戏(服务器)是一件 CPU 密集、I/O 密集的应用……(待续)



作者:lanphaday 发表于2012-11-2 10:25:46 原文链接
阅读:661 评论:0 查看评论

 
 

可从此处完成的操作: