<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>阿飞呓语</title>
	<atom:link href="http://www.86afei.com/feed" rel="self" type="application/rss+xml" />
	<link>http://www.86afei.com</link>
	<description>男人，努力！</description>
	<lastBuildDate>Fri, 13 Jan 2012 05:34:29 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>centos 下为php添加mongodb扩展</title>
		<link>http://www.86afei.com/2012/01/13/457</link>
		<comments>http://www.86afei.com/2012/01/13/457#comments</comments>
		<pubDate>Fri, 13 Jan 2012 05:34:29 +0000</pubDate>
		<dc:creator>阿飞</dc:creator>
				<category><![CDATA[UNIX&LINUX&服务器架构]]></category>
		<category><![CDATA[mongodb]]></category>

		<guid isPermaLink="false">http://www.86afei.com/?p=457</guid>
		<description><![CDATA[export PHP_AUTOCONF=/usr/bin/autoconf export PHP_AUTOHEADER=/usr/bin/autoheader wget http://pecl.php.net/get/mongo-1.2.7.tgz tar zxvf mongo-1.2.7.tgz cd mongo-1.2.7 /usr/local/php/bin/phpize ./configure --with-php-config=/usr/local/php/bin/php-config make &#38;&#38; make install //最后在php.ini中加入以下行并重启webserver extension=mongo.so 查看phpinfo,如出现mongo字样，说明成功了。]]></description>
			<content:encoded><![CDATA[<pre name="code">
export PHP_AUTOCONF=/usr/bin/autoconf
export PHP_AUTOHEADER=/usr/bin/autoheader
wget http://pecl.php.net/get/mongo-1.2.7.tgz
tar zxvf mongo-1.2.7.tgz
cd mongo-1.2.7
/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config
make &amp;&amp; make install

//最后在php.ini中加入以下行并重启webserver
extension=mongo.so
</pre>
<p>查看phpinfo,如出现mongo字样，说明成功了。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.86afei.com/2012/01/13/457/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>KMP算法精髓之预算NEXT值</title>
		<link>http://www.86afei.com/2012/01/10/454</link>
		<comments>http://www.86afei.com/2012/01/10/454#comments</comments>
		<pubDate>Tue, 10 Jan 2012 09:01:43 +0000</pubDate>
		<dc:creator>阿飞</dc:creator>
				<category><![CDATA[算法&数据结构]]></category>
		<category><![CDATA[KMP]]></category>

		<guid isPermaLink="false">http://www.86afei.com/?p=454</guid>
		<description><![CDATA[void next_index(char *str, int next[]) {h int i = 0, j = -1, str_length = strlen(str); next[0] = -1; while(i &#60; str_length) { if(j == -1 &#124;&#124; str[i] == str[j] ) { ++i; ++j; next[i] = j; } else { j = next[j]; } } }]]></description>
			<content:encoded><![CDATA[<pre name="code" class="c">void next_index(char *str, int next[]) {h
    int i = 0, j = -1, str_length = strlen(str);
    next[0] = -1;
    while(i &lt; str_length) {
        if(j == -1 || str[i] == str[j] ) {
            ++i;
            ++j;
            next[i] = j;
        } else {
            j = next[j];
        }
    }
}</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.86afei.com/2012/01/10/454/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>顺序表的初始、插入、删除实现</title>
		<link>http://www.86afei.com/2012/01/08/450</link>
		<comments>http://www.86afei.com/2012/01/08/450#comments</comments>
		<pubDate>Sun, 08 Jan 2012 08:52:56 +0000</pubDate>
		<dc:creator>阿飞</dc:creator>
				<category><![CDATA[算法&数据结构]]></category>
		<category><![CDATA[顺序表]]></category>

		<guid isPermaLink="false">http://www.86afei.com/?p=450</guid>
		<description><![CDATA[#define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define INFEASIBLE -1 #define OVERFLOW -2 typedef int Status; typedef int ElemType; #include&#60;stdlib.h&#62; #include&#60;stdio.h&#62; #define LIST_INIT_SIZE 100 #define LISTINCREMENT 10 typedef struct { ElemType *elem; int length; int listsize; } SqList; Status InitList_Sq(SqList *L) { L-&#62;elem = (ElemType *)malloc(LIST_INIT_SIZE * sizeof(ElemType)); if (!L-&#62;elem) [...]]]></description>
			<content:encoded><![CDATA[<pre name="code" class="c">
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
typedef int Status;
typedef int ElemType;
#include&lt;stdlib.h&gt;
#include&lt;stdio.h&gt;
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10

typedef struct {
    ElemType *elem;
    int length;
    int listsize;
} SqList;

Status InitList_Sq(SqList *L) {
    L-&gt;elem = (ElemType *)malloc(LIST_INIT_SIZE * sizeof(ElemType));
    if (!L-&gt;elem) exit(OVERFLOW);
    L-&gt;length = 0;
    L-&gt;listsize = LIST_INIT_SIZE;
    return OK;
}

Status ListInsert_Sq(SqList *L, int i, ElemType e) {
    ElemType *newbase, *q, *p;
    if (i &lt; 1 || i &gt; L-&gt;length + 1) return ERROR;
    if (L-&gt;length &gt;= L-&gt;listsize) {
        newbase = (ElemType *)realloc(L-&gt;elem, (L-&gt;listsize + LISTINCREMENT) * sizeof(ElemType));
        if (!newbase) exit(OVERFLOW);
        L-&gt;elem = newbase;
        L-&gt;listsize += LISTINCREMENT;
    }
    q = &amp;(L-&gt;elem[i-1]);
    for (p = &amp;(L-&gt;elem[L-&gt;length - 1]); p &gt;= q; --p) *(p + 1) = *p;
    *q = e;
    ++L-&gt;length;
    return OK;
}

Status ListDelete_Sq(SqList *L, int i, ElemType *e) {
    ElemType *p, *q;
    if(i &lt; 1 || i &gt; L-&gt;length) return ERROR;
    p = &amp;(L-&gt;elem[i - 1]);
    *e = *p;
    q = L-&gt;elem + L-&gt;length - 1;
    for(++p; p length;
    return OK;
}</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.86afei.com/2012/01/08/450/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CentOS下安装Tsung</title>
		<link>http://www.86afei.com/2011/12/31/430</link>
		<comments>http://www.86afei.com/2011/12/31/430#comments</comments>
		<pubDate>Sat, 31 Dec 2011 05:56:11 +0000</pubDate>
		<dc:creator>阿飞</dc:creator>
				<category><![CDATA[UNIX&LINUX&服务器架构]]></category>

		<guid isPermaLink="false">http://www.86afei.com/?p=430</guid>
		<description><![CDATA[首先爆个粗口，尼玛，这二郞向下兼空也有真有点弱啊？！ 嗯，发泄一下感觉好一点，先说一下我之前犯下的错误，大家有遇到时，别再往这个坑里跳。 Tsung是erlang写的，并且在出报表图时，需要使用perl相关库，所以先要安装三个玩意： 1.erlang 2.perl 3.gnuplot 后面两个好办，perl在centos上直接就带了，没装就装一下。 yum -y install perl yum -y install gnuplot 现在说这鸟erlang,你特么真是二郞，带个二的东西就是犯二。 在我安装时，我选择的Tsung是1.4.1这个最新版。 而erlang也是选择的最新版R15B这个源码包。 在make install 时报错： build main app boot script .. make : *** [priv/tsung.boot] Error 1 这个无解，在网上一直找不到答案。最后我一个一个试，先选择不同的Tsung版本，发现报同样的错，所以排除Tsung 版本的问题。然后选择不同的erlang版本,但选择R14B04时，安装成功，所以这特么的问题应该出在最新版上面，R15B。。看什么看，说的就是你丫的，真想抽你丫的，耽误老子半天时间。 具体安装如下： 1.下载erlang-R14B04,(这里erlang的依赖包，需要到官网上去看，依赖啥就装啥。我这就省略了。) wget http://www.erlang.org/download/otp_src_R14B04.tar.gz tar zxvf opt_src_R14B04.tar.gz cd opt_src_R14B04 ./configure &#8211;prefix=/usr/local/erlang make &#38;&#38; make install 2.安装tsung wget http://tsung.erlang-projects.org/dist/tsung-1.4.1.tar.gz tar zxvf [...]]]></description>
			<content:encoded><![CDATA[<p>首先爆个粗口，尼玛，这二郞向下兼空也有真有点弱啊？！<br />
嗯，发泄一下感觉好一点，先说一下我之前犯下的错误，大家有遇到时，别再往这个坑里跳。<br />
Tsung是erlang写的，并且在出报表图时，需要使用perl相关库，所以先要安装三个玩意：<br />
1.erlang<br />
2.perl<br />
3.gnuplot</p>
<p>后面两个好办，perl在centos上直接就带了，没装就装一下。<br />
yum -y install perl<br />
yum -y install gnuplot</p>
<p>现在说这鸟erlang,你特么真是二郞，带个二的东西就是犯二。<br />
在我安装时，我选择的Tsung是1.4.1这个最新版。<br />
而erlang也是选择的最新版R15B这个源码包。<br />
在make install 时报错：<br />
<strong><span style="color: #ff0000;">build main app boot script .. make : *** [priv/tsung.boot] Error 1</span></strong><br />
这个无解，在网上一直找不到答案。最后我一个一个试，先选择不同的Tsung版本，发现报同样的错，所以排除Tsung 版本的问题。然后选择不同的erlang版本,但选择<strong><span style="color: #ff0000;">R14B04</span></strong>时，安装成功，所以这特么的问题应该出在最新版上面，R15B。。看什么看，说的就是你丫的，真想抽你丫的，耽误老子半天时间。</p>
<p>具体安装如下：<br />
1.下载erlang-R14B04,(这里erlang的依赖包，需要到官网上去看，依赖啥就装啥。我这就省略了。)<br />
wget http://www.erlang.org/download/otp_src_R14B04.tar.gz<br />
tar zxvf opt_src_R14B04.tar.gz<br />
cd opt_src_R14B04<br />
./configure &#8211;prefix=/usr/local/erlang<br />
make &amp;&amp; make install<br />
2.安装tsung<br />
wget http://tsung.erlang-projects.org/dist/tsung-1.4.1.tar.gz<br />
tar zxvf tsung-1.4.1.tar.gz<br />
cd tsung-1.4.1<br />
./configure &#8211;prefix=/usr/local/tsung &#8211;with-erlang=/usr/local/erlang<br />
make &amp;&amp; make install</p>
]]></content:encoded>
			<wfw:commentRss>http://www.86afei.com/2011/12/31/430/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>git优点分析</title>
		<link>http://www.86afei.com/2011/12/05/427</link>
		<comments>http://www.86afei.com/2011/12/05/427#comments</comments>
		<pubDate>Mon, 05 Dec 2011 02:35:56 +0000</pubDate>
		<dc:creator>阿飞</dc:creator>
				<category><![CDATA[UNIX&LINUX&服务器架构]]></category>
		<category><![CDATA[git]]></category>

		<guid isPermaLink="false">http://www.86afei.com/?p=427</guid>
		<description><![CDATA[最近想把SVN换成git,总结了一下为什么git更爽一些： 1. git 是分布式的 目前大多数VCS都是集中式式，如SVN，也就是说一台SVN服务器，别人都是客户端，数据的操作都必需在这台服务器上。这会造成一个明显的问题：单点故障，你懂的。 而git是分布式的，也就是说大家都是服务端，你中有我，我中有你，合恢统一，当然git也有共同的远程服务器。不过就算一台服务器挂了，随便找个客户端clone一下，又生龙活虎了。 分布式的别一个好处是，断网或不在内网，你也可以工作。相信大家都有这么个经历，公司有事没做完，背电脑回家做，做了又提交不了，而git就无需担心了，你机子的数据库就是完整的git数据库，就算处于无网状态，你也可以提交修改。 2. git 分支使用指针 传统的VCS切分支挺麻烦的，如果有过管理VCS经验的人应该知道，切一个分支就是完全复制当前分支的所有文件，在比较大型的项目里，开销是比较大的，如果你有N个APP，且每个APP都有各自的分支，那就有的你忙了。 git提倡你多切分支，因为它使用的是指针，你可以在去上厕所前切一个，去上厕所后再切一个，左切切右切切，没关系，它罩得住。 传统VCS切分支是在服务端操作的，也就是说本地其实要在服务端操作完再check下来。git 不然。服务端也可以切分支，本地也可以切分支，这是我认为最大的好处，你在处理12345这个bug时可以切一个分支，马上老大来话说你给我优化一下XXX功能，你又切一个分支，上级应用层来个电话说YYY功能不太好用啊。。同样，你再切一个分支。由于你切的分去只是本地的，不会影响到别人，在发好功能测试后你可以合并到master里，测试提交。 3. 分工协作 本来这点可以放到第一点中，git 是分布式的。不过我单独拿出来是因为这个优点有不同寻常的意义。大家可能经历过手里同时有2～N个活，可能都是基于公司同一个源代码。其中可能要和A完成一个功能，和B完成一个功能。这时候git就可以大显身手了，你也可从A机子里得到项目的最新代码，也可以从B机子里拿到他的劳动成果，而完全不用经过中央服务器，所以不会对其他人照成影响。 4&#8230;还有一些优点，以后补充，因为哥们要上班了。]]></description>
			<content:encoded><![CDATA[<p>最近想把SVN换成git,总结了一下为什么git更爽一些：</p>
<p>1. git 是分布式的</p>
<p>目前大多数VCS都是集中式式，如SVN，也就是说一台SVN服务器，别人都是客户端，数据的操作都必需在这台服务器上。这会造成一个明显的问题：单点故障，你懂的。</p>
<p>而git是分布式的，也就是说大家都是服务端，你中有我，我中有你，合恢统一，当然git也有共同的远程服务器。不过就算一台服务器挂了，随便找个客户端clone一下，又生龙活虎了。</p>
<p>分布式的别一个好处是，断网或不在内网，你也可以工作。相信大家都有这么个经历，公司有事没做完，背电脑回家做，做了又提交不了，而git就无需担心了，你机子的数据库就是完整的git数据库，就算处于无网状态，你也可以提交修改。</p>
<p>2. git 分支使用指针</p>
<p>传统的VCS切分支挺麻烦的，如果有过管理VCS经验的人应该知道，切一个分支就是完全复制当前分支的所有文件，在比较大型的项目里，开销是比较大的，如果你有N个APP，且每个APP都有各自的分支，那就有的你忙了。</p>
<p>git提倡你多切分支，因为它使用的是指针，你可以在去上厕所前切一个，去上厕所后再切一个，左切切右切切，没关系，它罩得住。</p>
<p>传统VCS切分支是在服务端操作的，也就是说本地其实要在服务端操作完再check下来。git 不然。服务端也可以切分支，本地也可以切分支，这是我认为最大的好处，你在处理12345这个bug时可以切一个分支，马上老大来话说你给我优化一下XXX功能，你又切一个分支，上级应用层来个电话说YYY功能不太好用啊。。同样，你再切一个分支。由于你切的分去只是本地的，不会影响到别人，在发好功能测试后你可以合并到master里，测试提交。</p>
<p>3. 分工协作</p>
<p>本来这点可以放到第一点中，git 是分布式的。不过我单独拿出来是因为这个优点有不同寻常的意义。大家可能经历过手里同时有2～N个活，可能都是基于公司同一个源代码。其中可能要和A完成一个功能，和B完成一个功能。这时候git就可以大显身手了，你也可从A机子里得到项目的最新代码，也可以从B机子里拿到他的劳动成果，而完全不用经过中央服务器，所以不会对其他人照成影响。</p>
<p>4&#8230;还有一些优点，以后补充，因为哥们要上班了。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.86afei.com/2011/12/05/427/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ruby中的信号</title>
		<link>http://www.86afei.com/2011/11/27/422</link>
		<comments>http://www.86afei.com/2011/11/27/422#comments</comments>
		<pubDate>Sun, 27 Nov 2011 05:43:41 +0000</pubDate>
		<dc:creator>阿飞</dc:creator>
				<category><![CDATA[程序&程序设计]]></category>
		<category><![CDATA[signal]]></category>
		<category><![CDATA[trap]]></category>

		<guid isPermaLink="false">http://www.86afei.com/?p=422</guid>
		<description><![CDATA[在unix/linux中，进程之间传递信息是用信号的方式，(不清楚 ？=》google : linux singal 信号机制），ruby也支持这种方式。 ri trap 代码： trap :INT do puts puts 'Bye' exit end print 'Say something: ' STDOUT.flush puts "You said: #{STDIN.gets}" 当运行这段代码时，如果按^C即control+c,这样会传递一个SIGINT信号给该进程。可以尝试*nux下的信号表的其它信号， 还是比较有趣的。HOHO～]]></description>
			<content:encoded><![CDATA[<p>在unix/linux中，进程之间传递信息是用信号的方式，(不清楚 ？=》google : linux singal 信号机制），ruby也支持这种方式。</p>
<pre name="code" class="ruby">
  ri trap
</pre>
<p>代码：</p>
<pre name="code" class="ruby">
trap :INT do
  puts
  puts 'Bye'
  exit
end

print 'Say something: '
STDOUT.flush
puts "You said: #{STDIN.gets}"
</pre>
<p>当运行这段代码时，如果按^C即control+c,这样会传递一个SIGINT信号给该进程。可以尝试*nux下的信号表的其它信号，<br />
还是比较有趣的。HOHO～</p>
]]></content:encoded>
			<wfw:commentRss>http://www.86afei.com/2011/11/27/422/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>《web cache》(译)- 1.介绍</title>
		<link>http://www.86afei.com/2011/11/11/413</link>
		<comments>http://www.86afei.com/2011/11/11/413#comments</comments>
		<pubDate>Fri, 11 Nov 2011 07:21:22 +0000</pubDate>
		<dc:creator>阿飞</dc:creator>
				<category><![CDATA[程序&程序设计]]></category>
		<category><![CDATA[cache]]></category>
		<category><![CDATA[web cache]]></category>
		<category><![CDATA[缓存]]></category>

		<guid isPermaLink="false">http://www.86afei.com/?p=413</guid>
		<description><![CDATA[翻译出于个人意愿，一为对技术的兴趣，二为对英语的学习，过英语三级以上者还请去阅读英语原版，切勿自误。 &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211; 1. 介绍 术语缓存出至法译,字面上的意思,就是存储。作为一个数据处理的术语,缓存是指计算机储存最近读取的信息,以备将来访问。存储的信息可以使用或不使用,所以只有当存储量低于读取量时，缓存才是有益的。 缓存的概念几乎在计算机和网络系统每一个方面的都有应用。CPU中有数据和指令缓存，计算机操作系统有硬盘和文件系统的缓冲存储器缓存。分布式（网络）文件系统,如:NFS和AFS的良好性能也依赖缓存。网络路由器缓存最近使用的路由。域名系统（DNS）服务器缓存主机名到地址的查询及其他查询。 对某些数据块的请求可能同时发起。CNN的主页的请求通常伴随着该页面的所有图片请求。缓存基于之前的访问数据来预测随后的访问。当预测是正确的，会有显着的性能改善。在实践中，这种技术的好处，使得我们难以忍受计算机系统中，没有内存和磁盘高速缓存之缓慢。几乎所有的数据处理任务中读取的地方都能从高速缓存中受益。 当请求的数据在缓存中存在,我们称它为命中。同理，访问数据没有被缓存称为未命中。缓存提供性能改进的主要依据，是在服务时间上缓存命中率和未命中率的比较。所有的请求，命中的比例是所谓的命中率。 任何使用缓存的系统必须支持缓存一致性机制。这是缓存保持更新的过程。我们说缓存的数据，是新的或过时的。缓存可以立即重用新鲜的副本，但通常需要验证数据是否过时。保持一致性的算法可强可弱。弱一致性意味着缓存有时会返回过时的信息。强的一致性，意味着缓存的数据始终是先验证，然后再使用它。CPU和文件系统缓存需要很强的一致性。然而，某些类型比如：路由器和DNS解析器缓存，即使他们返回过时的信息仍是有效的。 我们知道，在现代计算机的内存和磁盘系统中，缓存起着重要作用。在WEB中，能同样成功么？问不同的人，你可能会得到不同的答案。一些缓存使Web可用是至关重要的。其他看法是缓存非常不利于用于web中。一小部分可能认为这只是一般不利于[图克斯伯里，1998]。 在这本书中，我将谈Web应用缓存技术，并试图说服你，Web缓存是一项好的技术。我们将看到如何使用Web缓存的工作原理，如何与客户端和服务器交互，和HTTP扮演的角色。您将了解用于构建缓存集群和层次的协议。除了有关技术方面的问题，我也花了很多时间在讨论分岐问题上面。由于Web高度分散的性质,介绍了一些其它有趣的问题。 当你读完本书，你应该能够为您所属机构设计和评估缓存代理解决方案。也许你将在你的防火墙安装一个独立的缓存代理，或也许你需要位于整个网络的各种缓存。此外，你应该做好准备，从缓存操作了解和诊断任何可能出现的问题或故障。如果你是一个内容提供商，那么我相信你增加你提供的信息的缓冲能力。]]></description>
			<content:encoded><![CDATA[<p><span style="color: #339966;"><strong>翻译出于个人意愿，一为对技术的兴趣，二为对英语的学习，过英语三级以上者还请去阅读英语原版，切勿自误。</strong></span></p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;</p>
<h1>1. 介绍</h1>
<p align="left">术语缓存出至法译,字面上的意思,就是存储。作为一个数据处理的术语,缓存是指计算机储存最近读取的信息,以备将来访问。存储的信息可以使用或不使用,所以只有当存储量低于读取量时，缓存才是有益的。</p>
<p>缓存的概念几乎在计算机和网络系统每一个方面的都有应用。CPU中有数据和指令缓存，计算机操作系统有硬盘和文件系统的缓冲存储器缓存。分布式（网络）文件系统,如:NFS和AFS的良好性能也依赖缓存。网络路由器缓存最近使用的路由。域名系统（DNS）服务器缓存主机名到地址的查询及其他查询。</p>
<p align="left">对某些数据块的请求可能同时发起。CNN的主页的请求通常伴随着该页面的所有图片请求。缓存基于之前的访问数据来预测随后的访问。当预测是正确的，会有显着的性能改善。在实践中，这种技术的好处，使得我们难以忍受计算机系统中，没有内存和磁盘高速缓存之缓慢。几乎所有的数据处理任务中读取的地方都能从高速缓存中受益。</p>
<p align="left">当请求的数据在缓存中存在,我们称它为命中。同理，访问数据没有被缓存称为未命中。缓存提供性能改进的主要依据，是在服务时间上缓存命中率和未命中率的比较。所有的请求，命中的比例是所谓的命中率。</p>
<p align="left">任何使用缓存的系统必须支持缓存一致性机制。这是缓存保持更新的过程。我们说缓存的数据，是新的或过时的。缓存可以立即重用新鲜的副本，但通常需要验证数据是否过时。保持一致性的算法可强可弱。弱一致性意味着缓存有时会返回过时的信息。强的一致性，意味着缓存的数据始终是先验证，然后再使用它。CPU和文件系统缓存需要很强的一致性。然而，某些类型比如：路由器和DNS解析器缓存，即使他们返回过时的信息仍是有效的。</p>
<p align="left">我们知道，在现代计算机的内存和磁盘系统中，缓存起着重要作用。在WEB中，能同样成功么？问不同的人，你可能会得到不同的答案。一些缓存使Web可用是至关重要的。其他看法是缓存非常不利于用于web中。一小部分可能认为这只是一般不利于[图克斯伯里，1998]。</p>
<p align="left">在这本书中，我将谈Web应用缓存技术，并试图说服你，Web缓存是一项好的技术。我们将看到如何使用Web缓存的工作原理，如何与客户端和服务器交互，和HTTP扮演的角色。您将了解用于构建缓存集群和层次的协议。除了有关技术方面的问题，我也花了很多时间在讨论分岐问题上面。由于Web高度分散的性质,介绍了一些其它有趣的问题。</p>
<p align="left">当你读完本书，你应该能够为您所属机构设计和评估缓存代理解决方案。也许你将在你的防火墙安装一个独立的缓存代理，或也许你需要位于整个网络的各种缓存。此外，你应该做好准备，从缓存操作了解和诊断任何可能出现的问题或故障。如果你是一个内容提供商，那么我相信你增加你提供的信息的缓冲能力。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.86afei.com/2011/11/11/413/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>《web cache》(译)- 目录</title>
		<link>http://www.86afei.com/2011/11/11/410</link>
		<comments>http://www.86afei.com/2011/11/11/410#comments</comments>
		<pubDate>Fri, 11 Nov 2011 07:21:13 +0000</pubDate>
		<dc:creator>阿飞</dc:creator>
				<category><![CDATA[程序&程序设计]]></category>

		<guid isPermaLink="false">http://www.86afei.com/?p=410</guid>
		<description><![CDATA[翻译出于个人意愿，一为对技术的兴趣，二为对英语的学习，过英语三级以上者还请去阅读英语原版，切勿自误。 &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211; 目录 1．介绍 1.1 网络架构 1.2 网络传输协议 1.3 为什么要缓存网页? 1.4 为什么不缓存网页? 1.5 网络缓存的类型 1.6 缓存代理特征 1.7 网格、集群、层次 1.8 产品]]></description>
			<content:encoded><![CDATA[<p><span style="color: #339966;"><strong>翻译出于个人意愿，一为对技术的兴趣，二为对英语的学习，过英语三级以上者还请去阅读英语原版，切勿自误。</strong></span></p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;</p>
<p>目录<br />
<a title="1.介绍" href="http://www.86afei.com/2011/11/11/413">1．介绍</a><br />
1.1 网络架构<br />
1.2 网络传输协议<br />
1.3 为什么要缓存网页?<br />
1.4 为什么不缓存网页?<br />
1.5 网络缓存的类型<br />
1.6 缓存代理特征<br />
1.7 网格、集群、层次<br />
1.8 产品</p>
]]></content:encoded>
			<wfw:commentRss>http://www.86afei.com/2011/11/11/410/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>修改validation中错误信息的字段名</title>
		<link>http://www.86afei.com/2011/10/25/404</link>
		<comments>http://www.86afei.com/2011/10/25/404#comments</comments>
		<pubDate>Tue, 25 Oct 2011 07:32:45 +0000</pubDate>
		<dc:creator>阿飞</dc:creator>
				<category><![CDATA[程序&程序设计]]></category>

		<guid isPermaLink="false">http://www.86afei.com/?p=404</guid>
		<description><![CDATA[在rails的activerecord中，如果对字段进行验证，出错信息中，往往会把表中的字段名显示成主语,比如： class Person < ActiveRecord::Base validates :name, :presence => true end 出错时显示的是：”Name can&#8217;t be blank”，其中”can&#8217;t be blank”是rails默认的信息，我们可以通过候改I18n，轻易的改成中文，但在以前的rails版本中，想把字段名(这里是name)友好化，那很麻烦。 不过现在也可以通过修改I18n配置文件来自定义你的字段描述了： cn: activerecord: attributes: person: name: "姓名" 是不是很简单呢，嘎嘎。]]></description>
			<content:encoded><![CDATA[<p>在rails的activerecord中，如果对字段进行验证，出错信息中，往往会把表中的字段名显示成主语,比如：</p>
<pre name="code" class="ruby">
class Person < ActiveRecord::Base
  validates :name, :presence => true
end
</pre>
<p>出错时显示的是：”Name can&#8217;t be blank”，其中”can&#8217;t be blank”是rails默认的信息，我们可以通过候改I18n，轻易的改成中文，但在以前的rails版本中，想把字段名(这里是name)友好化，那很麻烦。<br />
不过现在也可以通过修改I18n配置文件来自定义你的字段描述了：</p>
<pre name="code" class="yml">
cn:
  activerecord:
    attributes:
      person:
        name: "姓名"
</pre>
<p>是不是很简单呢，嘎嘎。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.86afei.com/2011/10/25/404/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>修改form_for生成的提交按钮文字</title>
		<link>http://www.86afei.com/2011/10/24/401</link>
		<comments>http://www.86afei.com/2011/10/24/401#comments</comments>
		<pubDate>Mon, 24 Oct 2011 07:45:52 +0000</pubDate>
		<dc:creator>阿飞</dc:creator>
				<category><![CDATA[程序&程序设计]]></category>

		<guid isPermaLink="false">http://www.86afei.com/?p=401</guid>
		<description><![CDATA[这段代码会生成一个表单，而提交按钮默认值是英文，根据你的模型生成新增或更新字样，比如在上面这个例子中，如果@post是新记录，它将用”Creat Post”，如果不是新记录，会生成”Update post”字样。 这些值能通过I18n自定义，在helpers.submit键中允许使用 %{model}　做为翻译引用表单使用的模型名字： en: helpers: submit: create: "Create a %{model}" update: "Confirm changes to %{model}" post: create: "Add %{model}" 所以当我们使用中文时候可以建一个cn.yml cn: helpers: submit: create: "新建" update: "修改" post: create: "添加"]]></description>
			<content:encoded><![CDATA[<pre name="code" class="ruby">
  <%= form_for @post do |f| %>
    <%= f.submit %>
  <% end %>
</pre>
<p>这段代码会生成一个表单，而提交按钮默认值是英文，根据你的模型生成新增或更新字样，比如在上面这个例子中，如果@post是新记录，它将用”Creat Post”，如果不是新记录，会生成”Update post”字样。<br />
这些值能通过I18n自定义，在helpers.submit键中允许使用 %{model}　做为翻译引用表单使用的模型名字：</p>
<pre name="code" class="yml">
  en:
    helpers:
      submit:
        create: "Create a %{model}"
        update: "Confirm changes to %{model}"
      post:
        create: "Add %{model}"
</pre>
<p>所以当我们使用中文时候可以建一个cn.yml</p>
<pre name="code" class="yml">
  cn:
    helpers:
      submit:
        create: "新建"
        update: "修改"
      post:
        create: "添加"
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.86afei.com/2011/10/24/401/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

