偶然访问到了川农的首页,看到了迎新的新闻,想想9年前我也是第一次来到雅安这个地方,四年的光阴,更多的来说象一场梦,不知不觉就渡过了。
初到雅安,感觉真的是太有80年代的感觉了,一部80年代的西部电影不在这里做外景真是浪费了胶片。真的有种时光倒流的感觉。不过也是不知不觉中,这种世外桃源般的环境却我们所接受了,高原下的蓝天比其他地方更蓝,5、6月看蓝天的那种感觉格外让人心情舒畅。(待续)
开源软件、重庆初创企业IT咨询与架构
偶然访问到了川农的首页,看到了迎新的新闻,想想9年前我也是第一次来到雅安这个地方,四年的光阴,更多的来说象一场梦,不知不觉就渡过了。
初到雅安,感觉真的是太有80年代的感觉了,一部80年代的西部电影不在这里做外景真是浪费了胶片。真的有种时光倒流的感觉。不过也是不知不觉中,这种世外桃源般的环境却我们所接受了,高原下的蓝天比其他地方更蓝,5、6月看蓝天的那种感觉格外让人心情舒畅。(待续)
本文以我的OpenPoker项目为例介绍另一种构建大规模多人在线系统的方案。OpenPoker是一个大型多人扑克网游,内建支持了容错能力,负载平衡和无限制的规模大小。OpenPoker的源代码遵循GPL协议可以从我的网站下载,大约包含一万行代码,有三分之一是用来测试的。
在Openpoker最终版出台之前,我花了很大精力设计参考,尝试过Delphi, Python, C#,C/C++还有Scheme。我甚至还用Common Lisp完成了一个可运行的Poker引擎。虽然我花了9个多月研究设计,最终代码编写却只用了6个星期,这最后的高效率要归功于选择了Erlang作为编写平台。
根据比较,老版本的OpenPoker需要4~5个人的小组9个月时间完成。原班人马还另外完成了一个Windows版的客户端,就算把这个开发时间的一半(1个半月)算进去,也比预期的18个月少得多,就当今游戏开发的客观环境,如此可观的时间节省不可小看!
Continue reading ‘轻松实现可伸缩性,容错性,和负 载平衡的大规模多人在线系统’
| 今天我们一起来了解Facebook背后的软件,看看作为当今世界上访问量最大的网站之一,Facebook是如何保证5亿用户的系统一直稳定可靠的运行。
Facebook的扩展性挑战 在我们讨论细节之前,这里有一些Facebook已经做的软件规模:
|
在了解过世界最大的PHP站点,Facebook的后台技术后,今天我们来了解一个百万级PHP站点的网站架构:Poppen.de。Poppen.de是德国的一个社交网站,相对Facebook、Flickr来说是一个很小的网站,但它有一个很好的架构,融合了很多技术,如 Nigix、MySql、CouchDB、Erlang、Memcached、RabbitMQ、PHP、Graphite、Red5以及Tsung。
Poppen.de目前有200万注册用户数、2万并发用户数、每天20万条私有消息、每天25万登录次数。而项目团队有11个开发人员,两个设计,两个系统管理员。该站点的商业模式采用免费增值模式,用户可以使用搜索用户、给好友发送消息、上载图片和视频等功能。
如果用户想享受不受限制发送消息和上载图片,那么就得根据需要支付不同类型的会员服务,视频聊天及网站其他服务也采用同样的策略。 Continue reading ‘Poppen.de网站架构’
10年前就听Jay Chou,从第一张倒现在的专辑,每张必听,不过还算不上他的fans,不太喜欢他的摇滚风,R&B或者中国风还不错啦。特别是中国风,听起来就有种纯情歌的味道,虽然都是那种凄美的感觉,不过也好,给人很多遐想,也许方文山和Jay Chou就是那种人吧
中国风里必备的二胡也许正适合这样的意境,难道二胡是贫苦劳动人民的智慧结晶?总是那么婉约凄美。总之,失恋必听。心情不好也可以听,可以以毒攻毒。
中国风里还有什么?当然还有一段若即若离的故事,虽然总有些不着边际,但是现代人总还是喜欢把自己放进那些故事,让自己和某某某成为故事的以部分,纵然是配角,但还是显得那么铭心刻骨,痛彻心扉。
中国风有种时光倒流的感觉,就是在那种感觉里,才能让彼此在自己的想像里任意放纵,是喜是悲,只不过是随着旋律转换罢了。明知道是想像,却还是不能自拔。也好,给自己一个说法,让流逝的月岁变成了只不过是一场幻境,一场戏。戏如人生、人生如戏。下一场戏于是也又要上演了。
To get current controller name/id inside your controller, or view
1 2 3 | $controllerId = Yii::app()->controller->id; //or $controllerId = $this->getId(); |
To get current action name/id being executed, if you are inside beforeAction() or afterAction(), use the received CAction argument
1 2 3 4 5 | //inside beforeAction or afterAction public function beforeAction($action) { $actionId = $action->id; ... |
or just elsewhere inside your controller
1 | $actionId = $this->getAction()->getId(); |
写的次序:
redo → undo → datafile
insert一条记录时, 表跟undo的信息都会放进 redo 中, 在commit 或之前, redo 的信息会放进硬盘上. 故障时, redo 便可恢复那些已经commit 了的数据.
redo → 每次操作都先记录到redo日志中,当出现实例故障(像断电),导致数据未能更新到数据文件,则数据库重启时须redo,重新把数据更新到数据文件
undo → 记录更改前的一份copy,但你系统rollback时,把这份copy重新覆盖到原来的数据
redo → 记录所有操作,用于恢复(redo records all the database transaction used for recovery)
undo → 记录所有的前印象,用于回滚(undo is used to store uncommited data infor used for rollback)
redo → 已递交的事务,实例恢复时要写到数据文件去的
undo → 未递交的事务. Continue reading ‘Oracle的redo和undo区别’
1 2 | svn propset 'svn:mime-type' 'text/html' *.html svn propset 'svn:mime-type' 'text/css' *.css |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | from twisted.web.server import Site from twisted.web.resource import Resource from twisted.internet import reactor class PaymentRequired(Resource): def render_GET(self, request): request.setResponseCode(402) return "<html><body>Please swipe your credit card.</body></html>" root = Resource() root.putChild("buy", PaymentRequired()) factory = Site(root) reactor.listenTCP(8880, factory) reactor.run() |
Recent Comments