<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_果果的笔记本</title><subtitle type="text">随便写写促进思考和总结。</subtitle><id>http://feed.cnblogs.com/blog/u/23947/rss</id><updated>2011-05-31T15:33:25Z</updated><author><name>果果’er</name><uri>http://www.cnblogs.com/nonlyli/</uri></author><generator>CNBlogs BlogServer</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/nonlyli/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/23947/rss"/><entry><id>http://www.cnblogs.com/nonlyli/archive/2011/05/31/2065285.html</id><title type="text">《轻轻松松背单词II》扩展：拖动、切换窗口，成绩显示，增量显示</title><summary type="text">转自这个帖，原来的链接无效了，更新一下： http://pgy.hotbbs.cn/script/forum/view.asp?article_id=13916249&amp;amp;board_id=96&amp;amp;Page=1参考丛强的制作的外挂，最近也做了个类似的小扩展：可以显示成绩，越看成绩越有动力　：） 功能： 1.自由拖动《轻松II》窗口； 2.可在任务栏切换《轻松II》程序； 3.在标题栏显示当前单词量：认识理解:1234 熟练掌握:1234 4.在标题栏显示本次背单词增量：认识理解:1234+12 熟练掌握:1234+15 可以在这里下载：http://www.guoguoer.cn/p</summary><published>2011-05-31T15:32:00Z</published><updated>2011-05-31T15:32:00Z</updated><author><name>果果’er</name><uri>http://www.cnblogs.com/nonlyli/</uri></author><link rel="alternate" href="http://www.cnblogs.com/nonlyli/archive/2011/05/31/2065285.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/nonlyli/archive/2011/05/31/2065285.html"/><content type="html">&lt;p&gt;转自这个帖，原来的链接无效了，更新一下： http://pgy.hotbbs.cn/script/forum/view.asp?article_id=13916249&amp;amp;board_id=96&amp;amp;Page=1&lt;/p&gt;&#xD;
&lt;p&gt;参考丛强的制作的外挂，最近也做了个类似的小扩展：可以显示成绩，越看成绩越有动力　：） 功能： 1.自由拖动《轻松II》窗口； &#xD;
2.可在任务栏切换《轻松II》程序； 3.在标题栏显示当前单词量：认识理解:1234 熟练掌握:1234 &#xD;
4.在标题栏显示本次背单词增量：认识理解:1234+12 熟练掌握:1234+15 &#xD;
可以在这里下载：&amp;nbsp;http://www.guoguoer.cn/post/BDC_loader_2.html&lt;/p&gt;&#xD;
&lt;p&gt;已知BUG：必须选中&amp;ldquo;拖动时显示窗口内容&amp;rdquo;，拖动功能才有效。（我是一直选着这个的：） 希望有同样需要的朋友喜欢。 &lt;/p&gt;&#xD;
(开启方法：桌面右击，属性-&amp;gt;外观-&amp;gt;效果&#xD;
&lt;p&gt;下载链接：&lt;a target="_blank" href="http://files.cnblogs.com/nonlyli/BDCloader.rar"&gt;http://files.cnblogs.com/nonlyli/BDCloader.rar&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/nonlyli/aggbug/2065285.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/nonlyli/archive/2011/05/31/2065285.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/nonlyli/archive/2010/09/19/1830883.html</id><title type="text">解决innerHTML中的script不能执行的问题</title><summary type="text">// eval scripts from text (from mootools)function evalScripts(text){ var script, scripts; scripts = []; var regexp = /&amp;lt;script[^&amp;gt;]*&amp;gt;([\s\S]*?)&amp;lt;\/script&amp;gt;/gi; while ((script = regexp.exec(...</summary><published>2010-09-19T03:50:00Z</published><updated>2010-09-19T03:50:00Z</updated><author><name>果果’er</name><uri>http://www.cnblogs.com/nonlyli/</uri></author><link rel="alternate" href="http://www.cnblogs.com/nonlyli/archive/2010/09/19/1830883.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/nonlyli/archive/2010/09/19/1830883.html"/><content type="html">&lt;p&gt;&lt;div &gt;&#xD;
&lt;pre &gt;// eval scripts from text (from mootools)&#xD;
function evalScripts(text){&#xD;
    var script, scripts;&#xD;
    scripts = [];&#xD;
    var regexp = /&amp;lt;script[^&amp;gt;]*&amp;gt;([\s\S]*?)&amp;lt;\/script&amp;gt;/gi;&#xD;
    while ((script = regexp.exec(text))) scripts.push(script[1]);&#xD;
    scripts = scripts.join('\n');&#xD;
&#xD;
    if (scripts) (window.execScript) ? window.execScript(scripts) : window.setTimeout(scripts, 0);&#xD;
}&#xD;
&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;/p&gt;&lt;img src="http://www.cnblogs.com/nonlyli/aggbug/1830883.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/nonlyli/archive/2010/09/19/1830883.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/nonlyli/archive/2010/09/16/1827909.html</id><title type="text">测试用的javascript dumpVar</title><summary type="text">如题。用来alert的。</summary><published>2010-09-16T03:08:00Z</published><updated>2010-09-16T03:08:00Z</updated><author><name>果果’er</name><uri>http://www.cnblogs.com/nonlyli/</uri></author><link rel="alternate" href="http://www.cnblogs.com/nonlyli/archive/2010/09/16/1827909.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/nonlyli/archive/2010/09/16/1827909.html"/><content type="html">&lt;p&gt;&lt;div &gt;&#xD;
&lt;pre &gt;function dumpVar(obj)&#xD;
{&#xD;
    if (obj == null) return 'null';&#xD;
    if (typeof(obj) == 'object') {&#xD;
        var isArray = (Object.prototype.toString.apply(obj) === '[object Array]');&#xD;
        var str = isArray ? '[' : '{';&#xD;
        for ( var i in obj)&#xD;
            str += i + ': ' + dumpVar(obj[i])+ ', ';&#xD;
        if (str.substr(-2) == ', ') str = str.substr(0, str.length - 2);&#xD;
        return str + (isArray ? ']' : '}');&#xD;
    }&#xD;
    else&#xD;
        return obj.toString();&#xD;
}&#xD;
&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;如题。用来alert的。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/nonlyli/aggbug/1827909.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/nonlyli/archive/2010/09/16/1827909.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/nonlyli/archive/2010/08/22/1805598.html</id><title type="text">如果我有四只翅膀</title><summary type="text">如果我有四只翅膀 连岳（转自《来去自由》)一百年后，我们都死了。不过，那时还是有人。一个人在树阴下坐着，幸运的是，那时也还有树，他在想自己的未来。　　&amp;ldquo;如果我有四只翅膀就好了，我可以飞到远方。去远方之前，有些事得做完。我要在那幢摩天塔楼的二十八层扔一块石头，因为里面那个姑娘不爱我，却爱着一个死了的人，那人叫做刘以达。连续十天，我要飞进老板的厨房，在他餐桌上端端正正留泡排泄物，而警察找不...</summary><published>2010-08-21T16:24:00Z</published><updated>2010-08-21T16:24:00Z</updated><author><name>果果’er</name><uri>http://www.cnblogs.com/nonlyli/</uri></author><link rel="alternate" href="http://www.cnblogs.com/nonlyli/archive/2010/08/22/1805598.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/nonlyli/archive/2010/08/22/1805598.html"/><content type="html">&lt;p&gt;&lt;strong&gt;如果我有四只翅膀&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;连岳（转自《来去自由》)&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;一百年后，我们都死了。&lt;br /&gt;不过，那时还是有人。&lt;br /&gt;一个人在树阴下坐着，幸运的是，那时也还有树，他在想自己的未来。&#xD;
&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&amp;ldquo;如果我有四只翅膀就好了，我可以飞到远方。&lt;br /&gt;去远方之前，有些事得做完。&lt;br /&gt;我要在那幢摩天塔楼的二十八层扔一块石头，因为里面那个姑娘不爱我，却爱着一个死了的人，那人叫做刘以达。&lt;br /&gt;连续十天，我要飞进老板的厨房，在他餐桌上端端正正留泡排泄物，而警察找不到任何线索。&amp;rdquo;&lt;br /&gt;想到警察狼狈的样子，他笑出了声。&lt;/p&gt;&#xD;
&lt;p&gt;恶作剧完成后，他可以去远方了，在远方做什么？&lt;br /&gt;他想，&lt;br /&gt;我要和叶芝一样，找个湖心小岛，养一箱蜜蜂，种九行豆角，在蜂鸣声中，睡个死去活来的午觉。&lt;br /&gt;我还要在湖中潜水，要潜150米，在深水里打坐一会儿，仿佛处在虚空当中，我的肺缩小了十六倍，面耳朵敏锐了二十倍，听见深水鱼苍白地游弋，听见水草顺着几缕阳光向上攀爬。&lt;br /&gt;我要向上飞翔，在缺氧的平流层随遇而安，有时藏在云里，有时坐在客机的机翼上，望着远处的太阳，机舱里那些蝇营狗苟的人，他们终于会知道：有一种生活是多么自由自在。他们只能看到我自由的背影。&lt;br /&gt;晚上我住在自己的木屋里，火炉上的面包烤得松脆，如果下午钓到了一条乌鱼，面包就有鱼汤可送，没有的话，就喝一点蜂蜜凉水。&lt;br /&gt;接下来的时间，打一个美妙的盹。&lt;/p&gt;&#xD;
&lt;p&gt;四只翅膀的自由日子如此诱人，他拢拢自己背上的两只翅膀，有点失落。顺便说一下，一百年后，人都长着两只翅膀。那个树阴下的沉思者，看看上班已到，拍打着翅膀向办公楼飞去。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/nonlyli/aggbug/1805598.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/nonlyli/archive/2010/08/22/1805598.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/nonlyli/archive/2010/04/15/1713071.html</id><title type="text">rsync and ssh automatic authentication</title><summary type="text">1. create user on every server(root login):useradd syncuser -g apachepasswd syncuser# set sync folder pemissionchown -R syncuser.apache /opt/syncuserchmod -R 770 /opt/syncuser2. on every src server(sy...</summary><published>2010-04-15T15:10:00Z</published><updated>2010-04-15T15:10:00Z</updated><author><name>果果’er</name><uri>http://www.cnblogs.com/nonlyli/</uri></author><link rel="alternate" href="http://www.cnblogs.com/nonlyli/archive/2010/04/15/1713071.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/nonlyli/archive/2010/04/15/1713071.html"/><content type="html">&lt;p&gt;&lt;pre &gt;1. create user on every server(root login):&#xD;
useradd syncuser -g apache&#xD;
passwd syncuser&#xD;
&#xD;
# set sync folder pemission&#xD;
chown -R syncuser.apache /opt/syncuser&#xD;
chmod -R 770 /opt/syncuser&#xD;
&#xD;
2. on every src server(syncuser login):&#xD;
# create key&#xD;
ssh-keygen -t rsa&#xD;
&#xD;
# pub id_rsa to every src server&#xD;
ssh syncuser@192.168.1.102 "mkdir .ssh; chmod 0700 .ssh"&#xD;
scp ~/.ssh/id_rsa.pub syncuser@192.168.1.102:~/.ssh/id_rsa.pub&#xD;
ssh syncuser@192.168.1.102 "cat ~/.ssh/id_rsa.pub &amp;gt;&amp;gt; ~/.ssh/authorized_keys2"&#xD;
&#xD;
3. try again, needn't password.&#xD;
ssh syncuser@192.168.1.102 "touch /tmp/test.txt"&#xD;
&#xD;
4. rsync files&#xD;
rsync --delete --stats -ago --exclude "/log"  src/ cco@192.168.1.102:~/desc/&#xD;
rsync --delete --stats -ago --exclude "/log"  src/ cco@192.168.1.103:~/desc/&#xD;
&#xD;
5. make sure that:&#xD;
(1) use src/ to just sync sub files, not this folder&#xD;
(2) use --exclude to keep some folder on desc folder(e.g. log)&#xD;
&#xD;
Exclude pattern ref: http://www.blowfisher.net/wiki/tech-notes/rsync-exclude-pattern&#xD;
&#xD;
&#xD;
&#xD;
&lt;/pre&gt;&#xD;
&lt;/p&gt;&lt;img src="http://www.cnblogs.com/nonlyli/aggbug/1713071.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/nonlyli/archive/2010/04/15/1713071.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/nonlyli/archive/2010/04/12/1709889.html</id><title type="text">改了个outlook web access的自动检查Greasemonkey脚本</title><summary type="text">实在是用着outlook2007太累了，速度慢得忍不下去了，想只用一个web页面来检查邮件。大约是2006版的OWA，在chrome上测试可以用了。chrome直接支持userscript，直接拖到浏览器上即可安装。再使用chrome的&amp;ldquo;创建应用程序快捷方式&amp;rdquo;功能，感觉就比较好用了。效果是过N分钟检查一次邮件，仅在列表页时才会自动刷新去检查，有新邮件会在标题栏有显示。需要手...</summary><published>2010-04-11T16:37:00Z</published><updated>2010-04-11T16:37:00Z</updated><author><name>果果’er</name><uri>http://www.cnblogs.com/nonlyli/</uri></author><link rel="alternate" href="http://www.cnblogs.com/nonlyli/archive/2010/04/12/1709889.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/nonlyli/archive/2010/04/12/1709889.html"/><content type="html">&lt;p&gt;实在是用着outlook2007太累了，速度慢得忍不下去了，想只用一个web页面来检查邮件。&lt;/p&gt;&#xD;
&lt;p&gt;大约是2006版的OWA，在chrome上测试可以用了。chrome直接支持userscript，直接拖到浏览器上即可安装。&lt;/p&gt;&#xD;
&lt;p&gt;再使用chrome的&amp;ldquo;创建应用程序快捷方式&amp;rdquo;功能，感觉就比较好用了。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;效果是过N分钟检查一次邮件，仅在列表页时才会自动刷新去检查，有新邮件会在标题栏有显示。&lt;/p&gt;&#xD;
&lt;p&gt;需要手动修改一下里面的域名才能使用。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;下载: &lt;a href="http://files.cnblogs.com/nonlyli/21967.user.js"&gt;http://files.cnblogs.com/nonlyli/21967.user.js&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;根据这个改的：&lt;br /&gt;&lt;a href="http://userscripts.org/scripts/show/21967"&gt;http://userscripts.org/scripts/show/21967&lt;/a&gt;&lt;br /&gt;原来的版本有提示框，但我使用不了。只好改成这样了。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/nonlyli/aggbug/1709889.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/nonlyli/archive/2010/04/12/1709889.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/nonlyli/archive/2010/03/29/1699198.html</id><title type="text">[incomplete]Memcached Element and ElementList auto version control [占位]</title><summary type="text">This is my 1st version, maybe i can use getMulti and setMulti refactor it(优化之).Test Case:</summary><published>2010-03-28T17:09:00Z</published><updated>2010-03-28T17:09:00Z</updated><author><name>果果’er</name><uri>http://www.cnblogs.com/nonlyli/</uri></author><link rel="alternate" href="http://www.cnblogs.com/nonlyli/archive/2010/03/29/1699198.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/nonlyli/archive/2010/03/29/1699198.html"/><content type="html">&lt;p&gt;This is my 1st version, maybe i can use getMulti and setMulti refactor it(优化之).&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;pre &gt;class CacheUtils {&#xD;
    const CACHE_MAX_VERSION = 10;&#xD;
&#xD;
    private $memcache;&#xD;
&#xD;
    private static $instance;&#xD;
&#xD;
    private function __construct() {&#xD;
        $this-&amp;gt;memcache = new Memcache();&#xD;
        $this-&amp;gt;memcache-&amp;gt;connect('127.0.0.1', 11211) or die('Can not connect to memcached server.');&#xD;
    }&#xD;
&#xD;
    public static function getInstance() {&#xD;
        if(self::$instance == null) {&#xD;
            self::$instance = new CacheUtils();&#xD;
        }&#xD;
        return self::$instance;&#xD;
    }&#xD;
&#xD;
    public function addElementVersion($type) {&#xD;
        $key = 'Element_Version:'.$type;&#xD;
        $ver = $this-&amp;gt;memcache-&amp;gt;increment($key);&#xD;
        if ($ver == false) {&#xD;
            $ver = $this-&amp;gt;memcache-&amp;gt;set($key, 0);&#xD;
            $ver = $this-&amp;gt;memcache-&amp;gt;increment($key);&#xD;
        }&#xD;
        else if ($ver &amp;gt; self::CACHE_MAX_VERSION) {&#xD;
            // flush all! keep data correct&#xD;
            $this-&amp;gt;memcache-&amp;gt;flush();&#xD;
        }&#xD;
        return $ver;&#xD;
    }&#xD;
&#xD;
    public function getElementVersion($type) {&#xD;
        $key = 'Element_Version:'.$type;&#xD;
        return $this-&amp;gt;memcache-&amp;gt;get($key);&#xD;
    }&#xD;
&#xD;
    public function addElement($elem) {&#xD;
        $key = 'Element:'.$elem-&amp;gt;type.':'.$elem-&amp;gt;id;&#xD;
        $retE = $this-&amp;gt;memcache-&amp;gt;set($key, $elem);&#xD;
        $retV = $this-&amp;gt;addElementVersion($elem-&amp;gt;type);&#xD;
        return $retE &amp;amp;&amp;amp; $retV;&#xD;
    }&#xD;
&#xD;
    public function getElement($type, $id) {&#xD;
        $key = 'Element:'.$type.':'.$id;&#xD;
        return $this-&amp;gt;memcache-&amp;gt;get($key);&#xD;
    }&#xD;
&#xD;
    public function getElementListVersion($type, $sql) {&#xD;
        $key = 'Element_List_Version:'.$type.':'.$sql;&#xD;
        return $this-&amp;gt;memcache-&amp;gt;get($key);&#xD;
    }&#xD;
&#xD;
&#xD;
    public function addElementList($type, $list, $sql = '') {&#xD;
        $keyList = 'Element_List:'.$type.':'.$sql;&#xD;
        $keyVersion = 'Element_List_Version:'.$type.':'.$sql;&#xD;
&#xD;
        $ver = $this-&amp;gt;getElementVersion($type);&#xD;
        $retL = $this-&amp;gt;memcache-&amp;gt;set($keyList, $list);&#xD;
        $retV = $this-&amp;gt;memcache-&amp;gt;set($keyVersion, $ver);&#xD;
&#xD;
        return $retL &amp;amp;&amp;amp; $retV;&#xD;
    }&#xD;
&#xD;
    public function getElementList($type, $sql = '') {&#xD;
        $keyList = 'Element_List:'.$type.':'.$sql;&#xD;
&#xD;
        $elementVersion = $this-&amp;gt;getElementVersion($type);&#xD;
        $elementListVersion = $this-&amp;gt;getElementListVersion($type, $sql);&#xD;
        if ($elementListVersion != $elementVersion)&#xD;
            return false;&#xD;
        else&#xD;
            return $this-&amp;gt;memcache-&amp;gt;get($keyList);&#xD;
    }&#xD;
}&#xD;
&lt;/pre&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;Test Case:&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;pre &gt;&amp;lt;?php&#xD;
require_once 'PHPUnit/Framework.php';&#xD;
&#xD;
require_once dirname(__FILE__).'/../CacheUtils.php';&#xD;
&#xD;
class Person {&#xD;
    public $id;&#xD;
    public $name;&#xD;
    public $age;&#xD;
&#xD;
    public $createTime;&#xD;
    public $type;&#xD;
&#xD;
    function __construct($id, $name, $age) {&#xD;
        $this-&amp;gt;id = $id;&#xD;
        $this-&amp;gt;name = $name;&#xD;
        $this-&amp;gt;age = $age;&#xD;
&#xD;
        $this-&amp;gt;type = get_class($this);&#xD;
        $this-&amp;gt;createTime = time();&#xD;
    }&#xD;
}&#xD;
&#xD;
/**&#xD;
 * Test class for CacheFacade.&#xD;
 * Generated by PHPUnit on 2010-03-28 at 04:07:43.&#xD;
 */&#xD;
class CacheUtilsTest extends PHPUnit_Framework_TestCase {&#xD;
    /**&#xD;
     * testAddElement&#xD;
     */&#xD;
    public function testAddAndGetElement() {&#xD;
        $cacheUtils = CacheUtils::getInstance();&#xD;
&#xD;
        $person = new Person(101,'Linx', 29);&#xD;
        $this-&amp;gt;assertEquals(true, $cacheUtils-&amp;gt;addElement($person));&#xD;
&#xD;
        $personGet = $cacheUtils-&amp;gt;getElement('Person', 101);&#xD;
        $this-&amp;gt;assertEquals('Linx', $personGet-&amp;gt;name);&#xD;
        var_dump($personGet);&#xD;
&#xD;
    }&#xD;
&#xD;
    public function testAddAndGetElementList() {&#xD;
        $cacheUtils = CacheUtils::getInstance();&#xD;
&#xD;
        $person1 = new Person(101,'Linx1', 29);&#xD;
        $person2 = new Person(102,'Linx2', 30);&#xD;
        $list = array($person1, $person2);&#xD;
&#xD;
        $this-&amp;gt;assertEquals(true, $cacheUtils-&amp;gt;addElementList('Person', $list));&#xD;
&#xD;
        $listGet = $cacheUtils-&amp;gt;getElementList('Person');&#xD;
        $this-&amp;gt;assertEquals(2, count($listGet));&#xD;
        $this-&amp;gt;assertEquals('Linx1', $listGet[0]-&amp;gt;name);&#xD;
&#xD;
        var_dump($listGet);&#xD;
    }&#xD;
&#xD;
    public function testAddAndGetElementListExpired() {&#xD;
        $cacheUtils = CacheUtils::getInstance();&#xD;
&#xD;
        $person1 = new Person(101,'Linx1', 29);&#xD;
        $person2 = new Person(102,'Linx2', 30);&#xD;
        $list = array($person1, $person2);&#xD;
&#xD;
        $this-&amp;gt;assertEquals(true, $cacheUtils-&amp;gt;addElementList('Person', $list));&#xD;
&#xD;
        // Person v2&#xD;
        $this-&amp;gt;assertEquals(true, $cacheUtils-&amp;gt;addElement($person1));&#xD;
&#xD;
        // v1 is expired&#xD;
        $listGet = $cacheUtils-&amp;gt;getElementList('Person');&#xD;
        $this-&amp;gt;assertEquals(false, $listGet);&#xD;
&#xD;
        var_dump($listGet);&#xD;
    }&#xD;
&#xD;
&#xD;
}&#xD;
?&amp;gt;&#xD;
&#xD;
&lt;/pre&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/nonlyli/aggbug/1699198.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/nonlyli/archive/2010/03/29/1699198.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/nonlyli/archive/2010/03/29/1699185.html</id><title type="text">Memcached的批量删除问题(版本)[占位]</title><summary type="text">终于还是遇到这个问题了，之前听 @huacnlee 说过，当时不知道具体场景也没有仔细考虑过。这两天想了一下，看了些文章介绍，准备自己实现一个以版本号来处理的批量删除(过期)问题。参考：memcached应用策略http://blog.sina.com.cn/s/blog_5378b2830100figs.htmlmemcached批量删除方案探讨http://it.dianping.com/me...</summary><published>2010-03-28T16:43:00Z</published><updated>2010-03-28T16:43:00Z</updated><author><name>果果’er</name><uri>http://www.cnblogs.com/nonlyli/</uri></author><link rel="alternate" href="http://www.cnblogs.com/nonlyli/archive/2010/03/29/1699185.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/nonlyli/archive/2010/03/29/1699185.html"/><content type="html">&lt;p&gt;终于还是遇到这个问题了，之前听 @huacnlee 说过，当时不知道具体场景也没有仔细考虑过。&lt;/p&gt;&#xD;
&lt;p&gt;这两天想了一下，看了些文章介绍，准备自己实现一个以版本号来处理的批量删除(过期)问题。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;参考：&lt;/p&gt;&#xD;
&lt;p&gt;memcached应用策略&lt;/p&gt;&#xD;
&lt;p&gt;http://blog.sina.com.cn/s/blog_5378b2830100figs.html&lt;/p&gt;&#xD;
&lt;p&gt;memcached批量删除方案探讨&lt;/p&gt;&#xD;
&lt;p&gt;http://it.dianping.com/memcached_item_batch_del.htm&lt;/p&gt;&#xD;
&lt;p&gt;memcached缓存批量更新解决方案探讨&lt;/p&gt;&#xD;
&lt;p&gt;http://bbs.phphubei.com/thread-10038-1-1.html&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;另外好像看过一篇跟版本号方式处理的关的文章没找到了。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/nonlyli/aggbug/1699185.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/nonlyli/archive/2010/03/29/1699185.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/nonlyli/archive/2010/03/29/1699182.html</id><title type="text">php上的memcache和memcached两个pecl库</title><summary type="text">一开始就在疑惑为什么会有两个库，且在php.net官方都有文档支持。之前尝试用的是memcache，后来发现memcached支持setMulti方法，准备转向使用memcached库了。(试了下，实际上，memcache从支持多值set，但文档上还没有，看changelog好像是3.0开始支持，稳定版可能不带此功能。)至于效率，也不清楚会有多大差距。这里有一篇文章也说到，memcached是基于...</summary><published>2010-03-28T16:35:00Z</published><updated>2010-03-28T16:35:00Z</updated><author><name>果果’er</name><uri>http://www.cnblogs.com/nonlyli/</uri></author><link rel="alternate" href="http://www.cnblogs.com/nonlyli/archive/2010/03/29/1699182.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/nonlyli/archive/2010/03/29/1699182.html"/><content type="html">&lt;p&gt;一开始就在疑惑为什么会有两个库，且在php.net官方都有文档支持。&lt;/p&gt;&#xD;
&lt;p&gt;之前尝试用的是memcache，后来发现memcached支持setMulti方法，准备转向使用memcached库了。&lt;/p&gt;&#xD;
&lt;p&gt;(试了下，实际上，memcache从支持多值set，但文档上还没有，看changelog好像是3.0开始支持，稳定版可能不带此功能。)&lt;/p&gt;&#xD;
&lt;p&gt;至于效率，也不清楚会有多大差距。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;这里有一篇文章也说到，memcached是基于libmemcached，可能要好一些。&lt;/p&gt;&#xD;
&lt;p&gt;参考: &lt;a href="http://www.surfchen.org/archives/371"&gt;http://www.surfchen.org/archives/371&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;Memcached manual:&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://cn.php.net/manual/en/book.memcached.php"&gt;http://cn.php.net/manual/en/book.memcached.php&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;Memcache manual:&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://cn.php.net/manual/en/book.memcache.php"&gt;http://cn.php.net/manual/en/book.memcache.php&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;Memcached 协议中英文对照:&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://blog.s135.com/book/memcached/"&gt;http://blog.s135.com/book/memcached/&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/nonlyli/aggbug/1699182.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/nonlyli/archive/2010/03/29/1699182.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/nonlyli/archive/2010/03/27/1698497.html</id><title type="text">准备试用一下PHPUnit</title><summary type="text">看phpunit几点要注意的:1. 数据提供: @dataProvider2. 测试异常: setExpectedException (直接写try catch 再 $this-&amp;gt;fail(); 可能写好)3. 测试输出: PHPUnit_Extensions_OutputTestCase-&amp;gt;expectOutputString();4. 测试性能: PHPUnit_Extension...</summary><published>2010-03-27T11:20:00Z</published><updated>2010-03-27T11:20:00Z</updated><author><name>果果’er</name><uri>http://www.cnblogs.com/nonlyli/</uri></author><link rel="alternate" href="http://www.cnblogs.com/nonlyli/archive/2010/03/27/1698497.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/nonlyli/archive/2010/03/27/1698497.html"/><content type="html">&lt;p&gt;看phpunit几点要注意的:&lt;br /&gt;1. 数据提供: @dataProvider&lt;br /&gt;2. 测试异常: setExpectedException (直接写try catch 再 $this-&amp;gt;fail(); 可能写好)&lt;br /&gt;3. 测试输出: PHPUnit_Extensions_OutputTestCase-&amp;gt;expectOutputString();&lt;br /&gt;4. 测试性能: PHPUnit_Extensions_PerformanceTestCase-&amp;gt;setMaxRunningTime();&lt;br /&gt;5. AllTests需要手动写。不然直接测一个目录也很好用。&lt;br /&gt;6. 可以自动生成测试代码框架，或从反向生成类文件。&lt;br /&gt;7. 在Netbeans里可视化地测，但没找到&amp;ldquo;远程测&amp;rdquo;。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;[参考]&lt;/p&gt;&#xD;
&lt;p&gt;翻译版的袖珍指南:&lt;br /&gt;&lt;a href="http://blog.chinaunix.net/u1/57558/showart_507369.html"&gt;http://blog.chinaunix.net/u1/57558/showart_507369.html&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;所有Assert翻译版:&lt;br /&gt;&lt;a href="http://blog.chinaunix.net/u1/57558/showart.php?id=523325"&gt;http://blog.chinaunix.net/u1/57558/showart.php?id=523325&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;PHPUnit Manula:&lt;br /&gt;&lt;a href="http://www.phpunit.de/manual/3.4/en/automating-tests.html"&gt;http://www.phpunit.de/manual/3.4/en/automating-tests.html&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;PHPUnit Assertions:&lt;br /&gt;&lt;a href="http://www.phpunit.de/manual/3.4/en/appendixes.assertions.html"&gt;http://www.phpunit.de/manual/3.4/en/appendixes.assertions.html&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;Install phpunit in xampp:&lt;br /&gt;&lt;a href="http://blog.airness.de/2008/11/12/installing-phpunit-in-xampp/"&gt;http://blog.airness.de/2008/11/12/installing-phpunit-in-xampp/&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;使用 PHPUnit 和 Selenium 进行测试 - Netbeans IDE 教程&lt;br /&gt;&lt;a href="http://netbeans.org/kb/docs/php/phpunit_zh_CN.html"&gt;http://netbeans.org/kb/docs/php/phpunit_zh_CN.html&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/nonlyli/aggbug/1698497.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/nonlyli/archive/2010/03/27/1698497.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry></feed>
