
这本书断断续续看了快了一个月,今天把最后几页看完。我打了四颗星,总体上来说还是不错,但是感觉太零碎,作者像是随手拾来,看不到严密的逻辑,感觉天马行空,这种书一般都不讨我喜。
很少人能坦然面对负面情绪,一出现就会想办法消除或者转移走,就像这个时代每个人都在强调自信,强调勇气,每个都在害怕自卑,害怕懦弱一样。人有七情六欲,交替博弈,是一个正反合的过程,一个再自信的人也有自卑的时候,一个再勇敢的人也有懦弱的时候,只要是个人它就无法摆脱这些情绪。不能坦然面对这些负面的情绪,就不能认识自我,更无法获得真正的自信,勇气。
这是一本很诚恳的书,很喜欢刚开始的一句:孤独没有什么不好,使孤独变得不好的,是害怕孤独。
这么晚了还不睡,主要是因为今天很点背,晚上取钱的时候,银行卡忘记拿出来了,一个杯具。
这个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,反贼,识别这个没有什么难度,同伙身份未明,下手就会顾忌,怕错杀自己人。我也遇过两种风格,一种是上次来就跳,攻击主公,向同伙表明反贼身份。我经常这么干,尤其是用许禇的时候,配合连弩 ,再裸衣,绝对是猛将中的猛将,无敌。另一种就是继续扮演,这就有难度了,只要反贼不傻,就不会像忠臣那样猛干,他可能会左打一下,右打一下,谁都不打死,直到忠臣的身份明朗后才会跳出来猛杀。
做为一个刚入门的菜鸟,在选择主公的时候,还是推荐使用曹操,至少可以保障手中有能进攻的牌。武将推荐夏候墩(刚烈),赵子龙(龙胆),大乔(国色,流离),甄姬(洛神,倾国),技能都偏向于防御,比较好用。