心跳那几秒

晚上去吃饭,回来已经8点多了,折腾折腾,9点半左右才出去跑步,比平时晚了40多分钟。穿过像伊拉克一样的唐家岭废墟,沿着土井路跑,到达一个三叉路口,正常情况下我会沿着这条路一直跑到东北旺然后再原路返回。就在拐弯的时候,我看三十多米开外,有一条硕大的黑狗,慢悠悠的穿过马路,消失在黑暗里,当时没引起我警惕,因为一般情况下,这么大的狗都是有人带着的。

谁曾想,我刚跑到这个地方,这条连个绳子都没有的狗,突然从黑暗里窜了出来冲我狂叫,我当时第一反应是,这狗不会过来这狗不会过来,还没想完,这狗就冲我扑过来了。当时离的很近,我后退侧身闪过,手好像砸到什么,大拇指有点疼,当时第一感觉就是手破了手破了,要打狂犬疫苗了。大狗见没有扑到,就往后退了一点,冲我狂叫,我也面对着大狗戒备着,边对峙脚边往后退,当时不是很怕,感觉这条狗不像野狗,扑的时候不凶,也不快,可能是从家跑出来的,退到7,8米左右,这条狗又扑过来了,一个1米多高的狗快速冲人跑过来,还是非常恐怖的,我再次侧身闪过,幸好这时候来了一辆车,灯打过来时这狗就有点虚,一击不中,就又往后退,在那儿冲我吼,这时候已经离的比较远了,我也象征性在路边找了找砖头,可惜也没有找到,望了我一会儿,这狗就又消失在黑暗中了。没有找到砖头的我,思考了一下,决定这条路今天先不跑了,在路灯下看了看大拇指也没破皮,万幸。

这条路我跑了一年多,经常碰到流浪狗,尤其是唐家岭拆迁以后,更时不时的碰到拉帮结派5,6条在一起的狗群。有时候跑步也会被执著的狗追,但一般只要我停一下,这些狗就不敢靠近了,有些不长眼的狗,我要反过来追它们一下。但这次碰到这么大的,这么凶猛的,上来就扑的,还真是第一次,两个字总结:肝颤。明天早点,可不想再和这狗搏斗了。

nginx下wordpress的rewrite

国庆前买了 linode 的VPS,算是edong撤走了,不用再去照相了,照相这种备案方式和以前BBS专项备案一样,没有什么操作性,迟早也要取消的。以前用edong vps,跑的是nginx+apache,这次直接换成nginx+spawn-fcgi。

# BEGIN WordPress

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

# END WordPress

上面是推荐的rewrite规则,但是这样规则会将不存在的图片,css等文件也都转发到index.php,这些文件应该报个404的。

    #现在nginx上使用的rewrite
    server {
        server_name yuehei.37net.com;
    
        access_log   /var/log/nginx/yuehei_37net_com_access.log main;
        error_log     /var/log/nginx/yuehei_37net_com_error.log info;

        root  /data/html/37net.com/yuehei;
        index index.html index.htm index.php;
        
        error_page  403  =200 /403.html;
        location = /403.html {
            root /data/html;
        }
        error_page  404  =200 /404.html;
        location = /404.html {
            root /data/html;
        }
        
        location / {
            if (!-e $request_filename) {
                rewrite ^(.*)$ /index.php last;
                break;
            }
        }

        location ~ \.(gif|jpg|jpeg|png|css|js)$ {
            expires 365d;
        }

        location ~ \.php$ {
            include /etc/nginx/fastcgi_params;
        }
    }

测试一下: http://yuehei.37net.com/test_test.png 报的是404了

看完《孤独六讲》

这本书断断续续看了快了一个月,今天把最后几页看完。我打了四颗星,总体上来说还是不错,但是感觉太零碎,作者像是随手拾来,看不到严密的逻辑,感觉天马行空,这种书一般都不讨我喜。

很少人能坦然面对负面情绪,一出现就会想办法消除或者转移走,就像这个时代每个人都在强调自信,强调勇气,每个都在害怕自卑,害怕懦弱一样。人有七情六欲,交替博弈,是一个正反合的过程,一个再自信的人也有自卑的时候,一个再勇敢的人也有懦弱的时候,只要是个人它就无法摆脱这些情绪。不能坦然面对这些负面的情绪,就不能认识自我,更无法获得真正的自信,勇气。

这是一本很诚恳的书,很喜欢刚开始的一句:孤独没有什么不好,使孤独变得不好的,是害怕孤独。

这么晚了还不睡,主要是因为今天很点背,晚上取钱的时候,银行卡忘记拿出来了,一个杯具。

WebGame 开发过程与备忘(一)前端基础框架的封装

这个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,反贼,识别这个没有什么难度,同伙身份未明,下手就会顾忌,怕错杀自己人。我也遇过两种风格,一种是上次来就跳,攻击主公,向同伙表明反贼身份。我经常这么干,尤其是用许禇的时候,配合连弩 ,再裸衣,绝对是猛将中的猛将,无敌。另一种就是继续扮演,这就有难度了,只要反贼不傻,就不会像忠臣那样猛干,他可能会左打一下,右打一下,谁都不打死,直到忠臣的身份明朗后才会跳出来猛杀。

做为一个刚入门的菜鸟,在选择主公的时候,还是推荐使用曹操,至少可以保障手中有能进攻的牌。武将推荐夏候墩(刚烈),赵子龙(龙胆),大乔(国色,流离),甄姬(洛神,倾国),技能都偏向于防御,比较好用。

4.12 – 4.19收藏

      这是第一篇用 live writer写的blog,住的地方网速很不理想,用这种方法免得丢失。我用rss阅读,但大部都是看了过,过了忘,忘了就一片空白,这样囫囵吞枣也没有什么收获。新加了一个收藏的分类备忘一下,一来让自己零碎的阅读有点记录,二来也是分享一下我感觉有用处的文章。

      1,微博之战  微博方便了作者,却麻烦了读者。大量的消息虽然及时却凌乱,分享还可以,发表观点却不够。

      2,我从11楼跳下去……才知道……

      3,给你一个真实的芙蓉姐姐  可以从8分钟演讲的时候看,我看到一个自信,从容,淡定的女人。

      4,多服务器同步:rsync使用小结  金山逍遥网 sersync 服务器实时镜像、自动同步程序开源

      5,30岁MAN 6年尴尬的IT人生

      6,当我们的想法与别人不同时

      7,当我们开始反思得时候,就开始成长了

      8,互联网常见Open API文档资源

      9,网站内容决定网站的前途

      10,适用于 PHP 开发人员的 Python 基础知识

      11,囚徒困境

      12,戈森定律

      13,斯坦福监狱实验

在vps主机配置awstats日志数据分析软件

盘今的主机,是我用过最烂的,虽然客服很尽责,但是速度已经不能用慢来形容,ping可以ping,网页只是偶尔能打开。买了一下E动VPS,界面很方便,速度还不错,稳定性有待观察。

我是按装这个【文档】来进行awstats日志的配置。有一些写的不详细:

1. 第(2)步我改成了虚拟主机


  Alias /awstats/icon/ /var/www/awstats/icon/
  Alias /awstats/ /var/www/awstats/

  
    DirectoryIndex index.html
    Options ExecCGI
    order deny,allow
    allow from all
  


打开浏览器,如果看到是pl的源代码,在apache的配置文件中增加

AddHandler cgi-script .cgi .pl

2. 如果显示的界面是英文,则在第(4)部中,将LANG=“auto” 改成 LANG=”cn”