5.2 – 6.5收藏
5公里,这段时间下雨,聚会,玩三国杀,跑的比较懈怠,85.5KG
3,Web服务器压力测试工具http_load、webbench、ab、Siege使用教程
4,wxpython in action 非常详细的wxpython讲解,对我这种没有做GUI编程的人用处很大。刚看完到11章,准备写一个简单的使用SQLite的报表。
5公里,这段时间下雨,聚会,玩三国杀,跑的比较懈怠,85.5KG
3,Web服务器压力测试工具http_load、webbench、ab、Siege使用教程
4,wxpython in action 非常详细的wxpython讲解,对我这种没有做GUI编程的人用处很大。刚看完到11章,准备写一个简单的使用SQLite的报表。
这本书断断续续看了快了一个月,今天把最后几页看完。我打了四颗星,总体上来说还是不错,但是感觉太零碎,作者像是随手拾来,看不到严密的逻辑,感觉天马行空,这种书一般都不讨我喜。
很少人能坦然面对负面情绪,一出现就会想办法消除或者转移走,就像这个时代每个人都在强调自信,强调勇气,每个都在害怕自卑,害怕懦弱一样。人有七情六欲,交替博弈,是一个正反合的过程,一个再自信的人也有自卑的时候,一个再勇敢的人也有懦弱的时候,只要是个人它就无法摆脱这些情绪。不能坦然面对这些负面的情绪,就不能认识自我,更无法获得真正的自信,勇气。
这是一本很诚恳的书,很喜欢刚开始的一句:孤独没有什么不好,使孤独变得不好的,是害怕孤独。
这么晚了还不睡,主要是因为今天很点背,晚上取钱的时候,银行卡忘记拿出来了,一个杯具。
这个webgame虽然还有bug,有一些功能要完善,界面也要重新更换,但基本上告一段落,我会一般修bug,一边做总结,这是这篇总结的第一章,算是一个备忘。
做这个项目之前,我有2年左右的PHP开发经验,对python有一些了解,javascript一般般,但用起来倒也得心应手。之前对webgame有一些了解,自己也玩过,也debug其中一些认为做的比较好的,这样也就不算陌生。
我的技术背景决定整个webgame是基于PHP+javascript来完成,为了更好的用户体验,我决定采用OPOA的形式。javascript项目有一个问题,就是连接保持,现在流行的comet方式,我都试了一遍,如果没有一个支持这一特性的web server配合的话,都不理想,最后还是使用了flash的socket,后面我会用专门一章节来讲。
其次,在做的过程中也走过一些弯路,比如刚开始,我过于强调所谓的性能,而把很多计算放到客户端来做,为了保证客户端时间正确,又把服务器的时间同步过来等等,做了一些无用功。javascript虽然功能很强大,但过于依赖javascript,限于个人的水平,会导致前端不可控,错误不可重现,bug无法排查,最后会被活活急死。
另一个重要的问题,就是整个后端返回的是数据还是html,我曾经debug一个知名的webgame,发现它整个后端都返回html,当时我不以为然,认为完全没有必要,所以我采用的就是返回json。现在看来其实两个都各有好处,返回html可以避免前端再进行处理(譬如非常烦人的数据组装),只要一个dom就可搞定。返回数据则可以减少数据量,加快响应速度,我现在采用的是数据+javascript模板的方式,javascript模板很少发现有网站在用,模板对于普通网站来说,可能弊大于利,但对于OPOA类的程序,好处显而易见的,配合延迟加载也可以减少一些弊端。
一般应用的过程是:前端 -> 调用后端 -> 处理结束 -> 返回前端,这个过程webgame也有,但webgame有时候会回调前端,即:
前端 -> 调用后端 -> 处理结束 -> 返回前端 -> 再回调前端。
/* 一个例子:购买一个道具,就更新银两的显示。把JRun.loadBack看成是一个ajax的封装。 一般情况下代码会像下面这样写,但这样有一个弊端,不止买道具,其它很多地方(比如卖)也可能要更新银两显示, 难道每一次更新都要这样写吗? */ JRun.loadBack('/goods/buy', {goods_id: 1, num: 5}, function(data) { var status = data.status; if (status == 1) { $('#role_tael').html(data.tael); } }); /* 下面的代码换了一种写法,所有更新银两的显示都调用了JRole.updateTael。 但是又有一个新的问题,买道具不一定非要银两,有可能是声望,购买成功以后也更新声望的显示, 这时候就需要扩展status,来告诉前端如何处理。 */ JRun.loadBack('/goods/buy', {goods_id: 1, num: 5}, function(data) { var status = data.status; if (status == 1) { JRole.updateTael(data.tael); } else if (status == 2) { JRole.updateRepute(data.repute); } }); var JRole = { updateTael: function(tael) { $('#role_tael').html(tael); }, updateRepute: function(repute) { $('#role_repute').html(repute); } };
随着要处理的类型的增多,status会越来越多,整个前端会很臃肿,而且会越来越不可控。如何让后端更自由的调用前端?有一些webgame返回的是html,里面内嵌javascript,这种方式并不推荐。可以采用格式化的返回数据来解决这个问题。
// 前端调用 JRun.loadBack('/goods/buy', {goods_id: 1, num: 5}); // goods/buy返回数据格式 {status: 1, data: {tael: 5}, callBack: "JRole.updateTael(data.tael);"}
这样就清晰简单多了,前端只需一行代码。服务器处理完成以后,自定义callBack作为返回内容,前端会自动调用并将数据传入。只要对JRun.loadBack进行简单的封闭,让它识别callBack的内容。后端对前端的可控性会降低前端的代码量,同时也可应对复杂的交互。
这样的前端设计基本上能满足我目前的应用。另外如果我能在开发早期注意到问题,完全可以在实现控制(JRun.loadBack),模型(后端PHP),模板(javascript渲染)的分离。
早上躺在床上,初升的太阳顺着后楼的空隙,穿过窗台,照在我喝完水的杯子上。看着光线中微尘翻滚,心就像宽阔的湖面,无限平静。
我经常搬家,住过很多房子,屋子里的东西往往还没堆满的就要搬,碰到那些认为有用的东西,也会留下来了,但搬家的时候却全被扔掉了,仿佛是一个杯子,不停的接水倒掉。回家的时候也一样,我会打包衣服,思量什么东西要用到,却很少带全。其实我知道,任何时候我能孤身一人,很多东西都能丢,不能丢的都带在身上。
孤身一人的时候我会迟疑,也能说服自己,继续前行,知道当下即是过往,期待明日有所收获。往往事与愿违,可能等待了很长时间,走了许多的路,到结束却连个痕迹也没有留下。回望的时候,才发现当初的迟疑徘徊即是全部,明日只是一个结束。有人说,希望是至善,我却认为希望是可有可无的,身陷囹圄的人才会觉得无比重要。有勇气面对自己,有勇气正视环境,听从内心,做自己能做的事,知道自己不能做的事,明白通过练习可以做到的事,就已足够。更多时候,希望是一些人用来证明自己生命的意义,而我的生命没有意义,我的时光就是用来感受时光的消逝,我的生命就是用来感受生命的终结。当然,这只是一种理想的状态,看着九零后前仆后继,身为八零后,身为唐家岭的蚁族,我感到压力很大。
漫步时,许多的背影在身边穿行,我仿佛赤着脚,行走于路间,感受赤热冰凉,喜怒哀乐,我知道你也一样,却不知道你是否如我一样。我常怀疑自己,也常贪图片刻的安宁,我能正视自己,也能感受内心的坚定。我活在当下,不期许虚妄的未来,不纠缠无谓的过往。知盈虚有数,不奢望恒久的快乐,不排斥安静的孤独。我喜欢平静,知道平静才能长久,我想做真正的自己,虽然这话听起来是在蛋逼,却不知道你是怎么想?
玩三国杀我比较喜欢5人局,1主公1忠臣2反贼1内奸,这种人数搭配进度快,也能看出忠臣的无奈,反贼的徘徊,内奸的摇摆不定。做为一个英明的主公,如何能识别出这些面具背后的身份?
首先,第一局如果有牌就要出手,逻辑上来说,蒙的概率还是很高的,有3/4的机会杀到反贼和内奸。先手之后,就很容易根据大家的表现猜出大致的身份。
1,忠臣,因为无所顾忌,在战斗中会表现出一往无前的气势,逮谁踹谁,一踹到底,不死不休,而且还喜欢杀体力少的,容易杀的。
2,内奸,我遇过两种风格,一种很低调很安静,走反贼路线,这种我一般是放到最后才收拾。另一种则是表现出很强大的气场,走忠臣路线,到了后期就很难分辨谁是忠臣谁是内奸。做为一个英明的主公,在这个时候应该低调,忠臣死可以,但不能死在你手里。让他们自相残杀,如果有什么【南蛮入侵】,【万箭齐发】之类的,可以统统放出来通杀。至于装备,那是一定要拆的。等他们分出胜负,伤痕累累的面对一个武装到牙齿的你,胜利是一定的。
3,反贼,识别这个没有什么难度,同伙身份未明,下手就会顾忌,怕错杀自己人。我也遇过两种风格,一种是上次来就跳,攻击主公,向同伙表明反贼身份。我经常这么干,尤其是用许禇的时候,配合连弩 ,再裸衣,绝对是猛将中的猛将,无敌。另一种就是继续扮演,这就有难度了,只要反贼不傻,就不会像忠臣那样猛干,他可能会左打一下,右打一下,谁都不打死,直到忠臣的身份明朗后才会跳出来猛杀。
做为一个刚入门的菜鸟,在选择主公的时候,还是推荐使用曹操,至少可以保障手中有能进攻的牌。武将推荐夏候墩(刚烈),赵子龙(龙胆),大乔(国色,流离),甄姬(洛神,倾国),技能都偏向于防御,比较好用。
这是第一篇用 live writer写的blog,住的地方网速很不理想,用这种方法免得丢失。我用rss阅读,但大部都是看了过,过了忘,忘了就一片空白,这样囫囵吞枣也没有什么收获。新加了一个收藏的分类备忘一下,一来让自己零碎的阅读有点记录,二来也是分享一下我感觉有用处的文章。
1,微博之战 微博方便了作者,却麻烦了读者。大量的消息虽然及时却凌乱,分享还可以,发表观点却不够。
3,给你一个真实的芙蓉姐姐 可以从8分钟演讲的时候看,我看到一个自信,从容,淡定的女人。
4,多服务器同步:rsync使用小结 金山逍遥网 sersync 服务器实时镜像、自动同步程序开源
11,囚徒困境
12,戈森定律
13,斯坦福监狱实验
盘今的主机,是我用过最烂的,虽然客服很尽责,但是速度已经不能用慢来形容,ping可以ping,网页只是偶尔能打开。买了一下E动VPS,界面很方便,速度还不错,稳定性有待观察。
我是按装这个【文档】来进行awstats日志的配置。有一些写的不详细:
1. 第(2)步我改成了虚拟主机
<VirtualHost *:80> Alias /awstats/icon/ /var/www/awstats/icon/ Alias /awstats/ /var/www/awstats/ <Directory /var/www/awstats/> DirectoryIndex index.html Options ExecCGI order deny,allow allow from all </Directory> </VirtualHost>
打开浏览器,如果看到是pl的源代码,在apache的配置文件中增加
AddHandler cgi-script .cgi .pl
2. 如果显示的界面是英文,则在第(4)部中,将LANG=“auto” 改成 LANG=”cn”
2009年底,空间商抱着机器从上海跑到重庆再跑到北京,也没让我赶在年末写上一份总结。也能理解,都不容易,现在正常了,也顺道展望一下2010。
回首2009,是有些收获:
1,学习了python。虽然是刚刚入门,总算是写了一个在线聊天的服务器。php虽然好使,但语言特性还是很难遇上诸如内存释放,线程,管道之类的问题,不遇到问题就没有机会搞懂。
2,封装了一个PHP框架。虽然我很鄙视我在做重复的工作,但是thinkphp,zf真的让我感觉很不方便。我有自已习惯,也知道程序部署的环境,所以就很简单,借鉴了部门老大对zf的修改,使用autoload自动加载,用xdebug测试的时候,基本上效率没有什么影响。
3,从09年4月份开始,中间虽然有断层,但基本上我全部精力都放在一个网页游戏上,遇到了很多问题,有的解决有的绕过。一个深刻的教训是,我以后绝不对没有做过的东西说“好做”。为了给用户更自然的体现,应用只用了一个html页面,前端js写了有5000多行,比5w行php都难写。更别提遇到的一些js内存泄漏,莫名其妙的卡,浏览器关闭。在firefox下还好,总有工具可以用。ie下那些debug工具都是不靠谱的,我只能一行一行的删除,alert调试。总算在年终的时候内测,虽然还有很多问题。
展望2010:
1,我知道js做ria的不足,所以今年的一个重要的任务就是学习flex。
2,有武侠情结,想写一个武侠类的网页游戏。因为对实时要求比较高,架构采用我熟悉的js和我不熟悉的python。一直在关注一个框架eurasia,准备尝试一下,主要还是想深入一下python,手熟一下python。
3,存xx的钱,08年09年我原地踏步走,积累了两年应该再上个台阶了。
还有一些我不想说出来的计划,我在心中也默默的说一遍。事情总有反复,事情总有后退,事情总有一日不如一日,事情总在一个漫长的周期上一直向上。
2009是很好的一年,希望2010也是很好的一年。