记点东西
2010年05月3日点滴

没有评论
819 views

旭日东升,照我窗台

早上躺在床上,初升的太阳顺着后楼的空隙,穿过窗台,照在我喝完水的杯子上。看着光线中微尘翻滚,心就像宽阔的湖面,无限平静。

我经常搬家,住过很多房子,屋子里的东西往往还没堆满的就要搬,碰到那些认为有用的东西,也会留下来了,但搬家的时候却全被扔掉了,仿佛是一个杯子,不停的接水倒掉。回家的时候也一样,我会打包衣服,思量什么东西要用到,却很少带全。其实我知道,任何时候我能孤身一人,很多东西都能丢,不能丢的都带在身上。

孤身一人的时候我会迟疑,也能说服自己,继续前行,知道当下即是过往,期待明日有所收获。往往事与愿违,可能等待了很长时间,走了许多的路,到结束却连个痕迹也没有留下。回望的时候,才发现当初的迟疑徘徊即是全部,明日只是一个结束。有人说,希望是至善,我却认为希望是可有可无的,身陷囹圄的人才会觉得无比重要。有勇气面对自己,有勇气正视环境,听从内心,做自己能做的事,知道自己不能做的事,明白通过练习可以做到的事,就已足够。更多时候,希望是一些人用来证明自己生命的意义,而我的生命没有意义,我的时光就是用来感受时光的消逝,我的生命就是用来感受生命的终结。当然,这只是一种理想的状态,看着九零后前仆后继,身为八零后,身为唐家岭的蚁族,我感到压力很大。

漫步时,许多的背影在身边穿行,我仿佛赤着脚,行走于路间,感受赤热冰凉,喜怒哀乐,我知道你也一样,却不知道你是否如我一样。我常怀疑自己,也常贪图片刻的安宁,我能正视自己,也能感受内心的坚定。我活在当下,不期许虚妄的未来,不纠缠无谓的过往。知盈虚有数,不奢望恒久的快乐,不排斥安静的孤独。我喜欢平静,知道平静才能长久,我想做真正的自己,虽然这话听起来是在蛋逼,却不知道你是怎么想?

2010年05月2日点滴

2条评论
2,814 views

三国杀忠臣,内奸,反贼的识别

玩三国杀我比较喜欢5人局,1主公1忠臣2反贼1内奸,这种人数搭配进度快,也能看出忠臣的无奈,反贼的徘徊,内奸的摇摆不定。做为一个英明的主公,如何能识别出这些面具背后的身份?

首先,第一局如果有牌就要出手,逻辑上来说,蒙的概率还是很高的,有3/4的机会杀到反贼和内奸。先手之后,就很容易根据大家的表现猜出大致的身份。

1,忠臣,因为无所顾忌,在战斗中会表现出一往无前的气势,逮谁踹谁,一踹到底,不死不休,而且还喜欢杀体力少的,容易杀的。

2,内奸,我遇过两种风格,一种很低调很安静,走反贼路线,这种我一般是放到最后才收拾。另一种则是表现出很强大的气场,走忠臣路线,到了后期就很难分辨谁是忠臣谁是内奸。做为一个英明的主公,在这个时候应该低调,忠臣死可以,但不能死在你手里。让他们自相残杀,如果有什么【南蛮入侵】,【万箭齐发】之类的,可以统统放出来通杀。至于装备,那是一定要拆的。等他们分出胜负,伤痕累累的面对一个武装到牙齿的你,胜利是一定的。

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

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

2010年04月18日收藏

没有评论
673 views

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,斯坦福监狱实验

2010年02月11日platform

没有评论
1,007 views

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

盘今的主机,是我用过最烂的,虽然客服很尽责,但是速度已经不能用慢来形容,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”

2010年01月12日点滴

没有评论
658 views

回首2009,展望2010

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也是很好的一年。

2009年11月16日点滴

没有评论
878 views

今天跑完一个环线

一直绕操场跑圈圈,今天和志远跑了一次环线。遥想07年初我和鸭子也是跑这条线,一直跑到我吐,那滋味真不好受。今天速度控制的还可以,跑的比较轻松。

run

QQ群前端使用的 javascript loader

开始主要想看一下qq群所使用的javascript模板,后来发现他们用的也是一个jquery的插件。
不过这个加载写的也很不错,分析了一下,原JS: http://qun.qq.com/god/m/js/loader.zh-cn.js

; (function() {
    var window = this,
    undefined,
    jLoader = window.jLoader = window.jL = {
        _version: "1.2.1",
        _sequence: [],
        _queue: {},
        _xhr: function() {
            return window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP") : new XMLHttpRequest();
        },
        // 直接加载脚本
        _script: function(uri, context) {
            context = context || document;
            var head = context.getElementsByTagName("head")[0] || context.documentElement,
            script = context.createElement("script");
            script.type = "text/javascript";
            script.src = uri;
            head.appendChild(script);
            return script;
        },
        _style: function(uri, context) {
            context = context || document;
            var head = context.getElementsByTagName("head")[0] || context.documentElement,
            link = context.createElement("link"),
            links = context.getElementsByTagName("link", context);
            link.type = "text/css";
            link.rel = "stylesheet";
            link.href = uri;
            if (0 &lt; links.length) {
                 var _last = links[links.length - 1];
                 _last.parentNode.insertBefore(_link, _last.nextSibling);
             } else {
                 head.appendChild(link);
             }
             return link;
         },
         _replace: function(pattern, uri, context) {
             if (!pattern || !uri) {
                 return;
             }
             context = context || document;
             var links = context.getElementsByTagName("link", context);
             for (var i = links.length - 1; i &gt;= 0; i--) {
                if ( - 1 != links[i].href.indexOf(pattern)) {
                    links[i].parentNode.removeChild(links[i]);
                }
            }
            if (uri) {
                jLoader._style(uri, context);
            }
        },
        // 将脚本内容插入当前页面来执行
        _globalEval: function(data, context) {
            if (data &amp;&amp; /\S/.test(data)) {
                context = context || document;
                var head = context.getElementsByTagName("head")[0] || context.documentElement,
                script = context.createElement("script");
                script.type = "text/javascript";
                if (jLoader._excute) {
                    script.appendChild(context.createTextNode(data));
                } else {
                    script.text = data;
                }
                head.insertBefore(script, head.firstChild);
                head.removeChild(script);
                return true;
            }
            return false;
        },
        // 执行回调方法数组。有可能请求多次,绑定了多个的回调方法。
        _call: function(mark) {
            if (jLoader._queue[mark].callbacks) {
                var cl = jLoader._queue[mark].callbacks.length;
                for (var j = 0; j &lt; cl; j++) {
                    jLoader._queue[mark].callbacks[j][0](jLoader._queue[mark].callbacks[j][1]);
                }
            }
        },
        // 这是一个顺序加载的过程,每加载一个JS,都会放入sequence队列,如果depend=true,则该脚本之前的脚本全部加载完后该脚本才执行
        _inject: function() {
            var len = jLoader._sequence.length;
            for (var i = 0; i &lt; len; i++) {
                var seq = jLoader._queue[jLoader._sequence[i]];
                if (!seq.done) {
                    if (!seq.response) {
                        return;
                    } else {
                        seq.done = true;
                        seq.response = [seq.response, ";jLoader._call(\"", jLoader._sequence[i], "\");"].join("");
                        jLoader._globalEval(seq.response);
                    }
                }
            }
        },
        scripted: function(mark) {
            if ("undefined" == typeof jLoader._queue[mark]) {
                return false;
            } else {
                if (jLoader._queue[mark].done) {
                    return true;
                } else {
                    return false;
                }
            }
        },
        script: function(options) {
            options = options || {};
            // 参数不全
            if (!options.mark || !options.uri)
            return;
            options.depend = options.depend || false;
            options.params = options.params || {};
            options.onload = options.onload || null;
            // 如果没有依赖关系和回调方法,则直接引入
            if (!options.onload &amp;&amp; !options.depend) {
                jLoader._script(options.uri);
                jLoader._queue[options.mark] = {
                    uri: options.uri,
                    response: null,
                    done: true
                };
                return;
            }
            // 是否为第一次请求
            if ("undefined" == typeof jLoader._queue[options.mark]) {
                jLoader._queue[options.mark] = {
                    uri: options.uri,
                    response: null,
                    done: false
                };
                // 设置回调方法和回调的参数
                if ("function" == typeof options.onload) {
                    jLoader._queue[options.mark].callbacks = [[options.onload, options.params]];
                }
            } else {
                // 虽然不是第一次请求,但有没有真正加载。没有真正加载的原因此时正在异步请求脚本内容
                if (false == jLoader._queue[options.mark].done) {
                    // 如果已经设置为callbacks, 则追加callbacks, 前面设置的callbacks是数组
                    if ("function" == typeof options.onload) {
                        if ("undefined" == typeof jLoader._queue[options.mark].callbacks) {
                            jLoader._queue[options.mark].callbacks = [[options.onload, options.params]];
                        } else {
                            var cl = jLoader._queue[options.mark].callbacks.length;
                            jLoader._queue[options.mark].callbacks[cl] = [options.onload, options.params];
                        }
                    }
                } else {
                    // 已真正加载,直接执行回调方法
                    if ("function" == typeof options.onload) {
                        options.onload(options.params);
                    }
                }
                return;
            }
            // 将脚本按顺序放入队列,self._inject会用到
            var len = jLoader._sequence.length;
            if (options.depend) {
                jLoader._sequence[len] = options.mark;
            }
            var xhr = jLoader._xhr();
            xhr.onreadystatechange = function() {
                if (4 == xhr.readyState) {
                    // 如果设置了依赖关系,则检查依赖。如果没有设置,则执行脚本内容和回调函数
                    if (options.depend) {
                        jLoader._queue[options.mark].response = xhr.responseText;
                        jLoader._inject();
                    } else {
                        jLoader._queue[options.mark].done = true;
                        var response = [xhr.responseText, ";jLoader._call(\"", options.mark, "\");"].join("");
                        jLoader._globalEval(response);
                    }
                }
            };
            xhr.open("GET", options.uri, true);
            xhr.send("");
        }
    };
    // 很好,很强大,因为getTime()结果不一样,所以用这种方法可以准确的定位到某一个类有没有执行
    jLoader._excute = false;
    var root = document.documentElement,
    script = document.createElement("script"),
    id = "script" + (new Date).getTime();
    script.type = "text/javascript";
    try {
        script.appendChild(document.createTextNode("window." + id + "=1;"));
    } catch(e) {}
    root.insertBefore(script, root.firstChild);
    if (window[id]) {
        jLoader._excute = true;
        delete window[id];
    }
    root.removeChild(script);
})();
2009年11月12日点滴

没有评论
932 views

看完《蚁族》

在唐家岭住了2年多,终于看到一本描述唐家岭的书《蚁族》,立马和同在这儿住的同事买了,看完后发现虽然不是很全面但还是真实客观的。只是那些调查人员感觉唐家岭脏,乱在我眼里却很平常,或许我习惯了,除了下雨天路难走,别的还可以。

在唐家岭住,生活成本比较低,吃饭的地方比较多,而且租一间房子比合租小区更自由。除了难挤的公交车,我觉得这里倒是暂住的好地方。另外,这本书后面个别章节有一种在上俯视众生,我很不喜欢。唐家岭虽然没那么好,但也没那么惨,在这里住两年就知道了。

20091112112       20091112112

还是值一买本,当当链接:http://product.dangdang.com/product.aspx?product_id=20684969
前三章节试读:http://book.ifeng.com/book.php?book_id=2414

update 100210:做为一个在唐家岭的蚁族,我认为张鸣的这篇文章远比廉思的那本书要清醒和现实 http://news.qq.com/a/20100210/001085.htm

2009年10月29日点滴

没有评论
3,614 views

使用自己的FTP做为xmark的服务器

在众多网站阵亡之后,我最常用,最必不可少的xmark也倒下了。
因为平时在公司和在家里用的不是一台电脑,很多收藏要同步,每次同步都要挂代理,太麻烦了。在xmark里有选项可以使用自己的服务器,试了一下,只要是简单的FTP权限即可以,而且速度比以前也理想。
1。在 【设置】- 【status】里面填上自己的FTP用户名和密码
status

2。在 【设置】 – 【高级】中, 填上在FTP的保存收藏的URI,xmark会在服务器自动建立文件。
2

返回顶部