<?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>Erlang非业余研究 &#187; install</title>
	<atom:link href="http://blog.yufeng.info/archives/tag/install/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.yufeng.info</link>
	<description>Erlang系统深度探索和应用</description>
	<lastBuildDate>Tue, 17 Jan 2012 06:05:54 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>再谈systemtap在ubuntu 10.10下的安装</title>
		<link>http://blog.yufeng.info/archives/1098</link>
		<comments>http://blog.yufeng.info/archives/1098#comments</comments>
		<pubDate>Fri, 11 Mar 2011 11:13:35 +0000</pubDate>
		<dc:creator>Yu Feng</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[工具介绍]]></category>
		<category><![CDATA[install]]></category>
		<category><![CDATA[systemtap]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://blog.yufeng.info/?p=1098</guid>
		<description><![CDATA[原创文章，转载请注明： 转载自Erlang非业余研究 本文链接地址: 再谈systemtap在ubuntu 10.10下的安装 NinGoo的这篇文章写的很明白了:http://www.ningoo.net/html/2010/use_systemtap_on_ubuntu.html 原始出处:http://sourceware.org/systemtap/wiki/SystemtapOnUbuntu 安装的时候有几个地方需要注意: 在做步骤2的时候: $ uname -a Linux yufeng-laptop 2.6.35-22-generic #35-Ubuntu SMP Sat Oct 16 20:45:36 UTC 2010 x86_64 GNU/Linux 下载debug包的时候要注意核对好版本, 包括后面的小版本号,以及你的系统是amd64还是i386版本. 在做步骤4的时候: &#8230; rm -fr /usr/lib/debug/.build-id #最好添加这句 mkdir -p /usr/lib/debug/.build-id/$dir &#8230; 模块符号信息安装成功的标志是: 不墨迹啥bad news. 但是我在ubuntu下安装还是有点麻烦, 通过分析stap -vvvv -k 告诉你的模块所在的目录, 生成的模块代码如stap_xxx.c: 我们可以看到这个模块初始化要比对于 UTS_RELEASE 和 `uname -r` 是否相同. 明显在我的机器上这二个东西是不同的,原因是我的系统多次升级 UTS_RELEASE估计没升上去, 知道原因了,就很好办了, [...]]]></description>
			<content:encoded><![CDATA[<div style="margin-top: 15px; font-style: italic">
<p><strong>原创文章，转载请注明：</strong> 转载自<a href="http://blog.yufeng.info/">Erlang非业余研究</a></p>
<p><strong>本文链接地址:</strong> <a href="http://blog.yufeng.info/archives/1098">再谈systemtap在ubuntu 10.10下的安装</a></p>
</div>
<p>NinGoo的这篇文章写的很明白了:<a href="http://www.ningoo.net/html/2010/use_systemtap_on_ubuntu.html">http://www.ningoo.net/html/2010/use_systemtap_on_ubuntu.html</a><br />
原始出处:<a href="http://sourceware.org/systemtap/wiki/SystemtapOnUbuntu">http://sourceware.org/systemtap/wiki/SystemtapOnUbuntu</a></p>
<p>安装的时候有几个地方需要注意:</p>
<p>在做步骤2的时候:<br />
<span id="more-1098"></span></p>
<pre class="brush: bash; title: ; notranslate">
$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=10.10
DISTRIB_CODENAME=maverick
DISTRIB_DESCRIPTION=&quot;Ubuntu 10.10&quot;
</pre>
<p>$ uname -a<br />
Linux yufeng-laptop 2.6.35-22-generic<span style="color: #ff0000;"> #35</span>-Ubuntu SMP Sat Oct 16 20:45:36 UTC 2010 x86_64 GNU/Linux</p>
<p>下载debug包的时候要注意核对好版本, 包括后面的小版本号,以及你的系统是amd64还是i386版本.</p>
<p>在做步骤4的时候:<br />
&#8230;<br />
rm -fr /usr/lib/debug/.build-id  <span style="color: #ff0000;">#最好添加这句</span><br />
mkdir -p /usr/lib/debug/.build-id/$dir<br />
&#8230;<br />
模块符号信息安装成功的标志是:</p>
<pre class="brush: bash; title: ; notranslate">
$ stap -l 'module(&quot;*&quot;).function(&quot;*&quot;)'
</pre>
<p>不墨迹啥bad news.</p>
<p>但是我在ubuntu下安装还是有点麻烦,</p>
<pre class="brush: bash; title: ; notranslate">
$ sudo stap -e 'probe begin{printf(&quot;hello&quot;); exit();}'
ERROR: module release mismatch (2.6.35.4 vs 2.6.35-22-generic)
</pre>
<p>通过分析stap -vvvv -k  告诉你的模块所在的目录, 生成的模块代码如stap_xxx.c:</p>
<pre class="brush: cpp; title: ; notranslate">
...
static int systemtap_module_init (void) {
...
{
const char* release = UTS_RELEASE;
if (strcmp (release, &quot;2.6.35-22-generic&quot;)) {
_stp_error (&quot;module release mismatch (%s vs %s)&quot;, release, &quot;2.6.35-22-generic&quot;);
rc = -EINVAL;
}
if (_stp_module_check()) rc = -EINVAL;
}
...
</pre>
<p>我们可以看到这个模块初始化要比对于 UTS_RELEASE 和 `uname -r` 是否相同.</p>
<p>明显在我的机器上这二个东西是不同的,原因是我的系统多次升级 UTS_RELEASE估计没升上去, 知道原因了,就很好办了, 不比对就好了.</p>
<p>下载源码:<br />
$ apt-get source systemtap</p>
<p>修改 translate.cxx  中的代码:<br />
&#8230;<br />
  o->newline() << "if (<span style="color: #ff0000;"> 0 &#038;&#038; </span> strcmp (release, &#8221;<br />
               << lex_cast_qstring (session->kernel_release) << ")) {";</p>
<pre class="brush: bash; title: ; notranslate">
$ ./configure &#8211;prefix=/usr &amp;&amp; make &amp;&amp; sudo make install
</pre>
<p>收获的时间:</p>
<pre class="brush: bash; title: ; notranslate">
$ sudo stap -k -e 'probe begin{printf(&quot;hello&quot;); exit();}'
hello
</pre>
<p>玩得开心!
<div style="margin-top: 0; margin-bottom: 15px; color: #888888; font-size: 80%; font-style: italic">
<p>Post Footer automatically generated by <a href="http://easwy.com/blog/wordpress/wp-posturl/" style="color: #8888FF; text-decoration: underline;">wp-posturl plugin</a> for wordpress.</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://blog.yufeng.info/archives/1098/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>如何在TILEPro64多核心板卡上编译和运行Erlang</title>
		<link>http://blog.yufeng.info/archives/791</link>
		<comments>http://blog.yufeng.info/archives/791#comments</comments>
		<pubDate>Tue, 02 Nov 2010 02:25:35 +0000</pubDate>
		<dc:creator>Yu Feng</dc:creator>
				<category><![CDATA[Erlang探索]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[工具介绍]]></category>
		<category><![CDATA[64]]></category>
		<category><![CDATA[compile]]></category>
		<category><![CDATA[install]]></category>
		<category><![CDATA[kernel]]></category>
		<category><![CDATA[otp]]></category>
		<category><![CDATA[Tilera]]></category>
		<category><![CDATA[并发，并行]]></category>

		<guid isPermaLink="false">http://blog.yufeng.info/?p=791</guid>
		<description><![CDATA[原创文章，转载请注明： 转载自Erlang非业余研究 本文链接地址: 如何在TILEPro64多核心板卡上编译和运行Erlang 参考文章： 1. https://groups.google.com/group/erlang-programming/msg/2d61b1083a10a7b6 2. http://erlang.2086793.n4.nabble.com/How-to-Cross-compile-Erlang-OTP-R13B04-for-TileraPro64-td2119304.html 美国Tilera公司的众核服务器，单颗内核包含64颗CPU。硬件架构图： 卡长这样的： Erlang已经可以在这款CPU上成功运行，我们可以参考Ulf Wiger在Multicore ☺ Message-passing Concurrency 文档中关于Erlang在Tilera上的性能图. Erlang系统前2年就开始正式支持Tilera，一直用这个CPU来调整他的调度器，所以性能和基础的编译运行支持都很到位。 Linux内核2.6.36起就开始支持Tilera的CPU架构了，看起来前途不错。 最近 上海泛腾电子科技 开始在国内销售 Tilera机器， 我公司也得到一台样机，使得我有机会把玩下这个高科技！ 该测试机是PCI-e的形式，是单板机，直接安装在PC机或者是服务器里,好处是可以通过主机的VGA口接显示器直接调试。当然也可以作为智能网卡来使用。构成一个与Host的异构结构，通过PCI-e总线进行通讯。 还需要相应的配套SDK: 目前有TileraMDE-2.1.2.112814 和 TileraMDE-3.0.alpha3.116173 二个版本, 来负责和板卡的通信。 推荐用2.0的，好像不容易出问题。 废话少说，让我们开始享受64核心快乐旅程吧！ 好吧到此为止，我们在目标机器上/tmp/otp目录下有个完整的erlang系统。 我们开个console连接到板载的linux系统去： Bingo! 我们顺利的跑了数学计算，同时绑定调度器到CPU core上去了。接下来就可以按照平常那样进行Erlang并发编程了。 祝玩的开心！ Post Footer automatically generated by wp-posturl plugin for wordpress.]]></description>
			<content:encoded><![CDATA[<div style="margin-top: 15px; font-style: italic">
<p><strong>原创文章，转载请注明：</strong> 转载自<a href="http://blog.yufeng.info/">Erlang非业余研究</a></p>
<p><strong>本文链接地址:</strong> <a href="http://blog.yufeng.info/archives/791">如何在TILEPro64多核心板卡上编译和运行Erlang</a></p>
</div>
<p>参考文章：<br />
1. <a href="https://groups.google.com/group/erlang-programming/msg/2d61b1083a10a7b6">https://groups.google.com/group/erlang-programming/msg/2d61b1083a10a7b6</a></p>
<p>2. <a href="http://erlang.2086793.n4.nabble.com/How-to-Cross-compile-Erlang-OTP-R13B04-for-TileraPro64-td2119304.html">http://erlang.2086793.n4.nabble.com/How-to-Cross-compile-Erlang-OTP-R13B04-for-TileraPro64-td2119304.html</a></p>
<p>美国Tilera公司的众核服务器，单颗内核包含64颗CPU。硬件架构图：<br />
<a href="http://blog.yufeng.info/wp-content/uploads/2010/11/Tile_Processor_Hardware_Architecture.jpg"><img src="http://blog.yufeng.info/wp-content/uploads/2010/11/Tile_Processor_Hardware_Architecture.jpg" alt="" title="Tile_Processor_Hardware_Architecture" width="792" height="439" class="alignnone size-full wp-image-806" /></a><br />
卡长这样的：<br />
<a href="http://blog.yufeng.info/wp-content/uploads/2010/11/tilera_board.jpg"><img src="http://blog.yufeng.info/wp-content/uploads/2010/11/tilera_board.jpg" alt="" title="tilera_board" width="208" height="148" class="alignnone size-full wp-image-820" /></a><br />
Erlang已经可以在这款CPU上成功运行，我们可以参考Ulf Wiger在Multicore ☺ Message-passing Concurrency 文档中关于Erlang在Tilera上的性能图.<br />
<a href="http://blog.yufeng.info/wp-content/uploads/2010/11/multi_core_message_passing_concurrency_erlang.jpg"><img src="http://blog.yufeng.info/wp-content/uploads/2010/11/multi_core_message_passing_concurrency_erlang.jpg" alt="" title="multi_core_message_passing_concurrency_erlang" width="627" height="405" class="alignnone size-full wp-image-798" /></a></p>
<p>Erlang系统前2年就开始正式支持Tilera，一直用这个CPU来调整他的调度器，所以性能和基础的编译运行支持都很到位。</p>
<p>Linux内核2.6.36起就开始支持Tilera的CPU架构了，看起来前途不错。</p>
<p>最近 上海泛腾电子科技 开始在国内销售 Tilera机器， 我公司也得到一台样机，使得我有机会把玩下这个高科技！</p>
<p>该测试机是PCI-e的形式，是单板机，直接安装在PC机或者是服务器里,好处是可以通过主机的VGA口接显示器直接调试。当然也可以作为智能网卡来使用。构成一个与Host的异构结构，通过PCI-e总线进行通讯。</p>
<p>还需要相应的配套SDK: 目前有TileraMDE-2.1.2.112814 和 TileraMDE-3.0.alpha3.116173 二个版本, 来负责和板卡的通信。 推荐用2.0的，好像不容易出问题。</p>
<p>废话少说，让我们开始享受64核心快乐旅程吧！<br />
<span id="more-791"></span></p>
<pre class="brush: bash; title: ; notranslate">
# wget http://www.erlang.org/download/otp_src_R13B03.tar.gz  %%R13B04后otp_build变了好像有点问题，编译不过去。
# tar xzf otp_src_R13B03.tar.gz
# cd otp_src_R13B03
%%由于R13B03有个小小的bug会导致segment fault,我们需要对erl_misc_utils.c打个patch,以下是要打patch的地方:
# diff -Nau otp_src_R13B04/erts/lib_src/common/erl_misc_utils.c{~,}
--- otp_src_R13B04/erts/lib_src/common/erl_misc_utils.c~
2009-11-20 14:32:23.000000000 +0100
+++ otp_src_R13B04/erts/lib_src/common/erl_misc_utils.c 2010-03-29
15:53:28.000000000 +0200
@@ -373,8 +373,8 @@
        return 0;
     memcpy((void *) topology,
           (void *) cpuinfo-&gt;topology,
-          cpuinfo-&gt;configured*sizeof(erts_cpu_topology_t));
-    return cpuinfo-&gt;configured;
+          cpuinfo-&gt;topology_size*sizeof(erts_cpu_topology_t));
+    return cpuinfo-&gt;topology_size;
 }
%%源码算是准备完毕了 

%%开始编译前的环境准备
# export ERL_TOP=`pwd`
# eval `./otp_build env_cross $ERL_TOP/xcomp/erl-xcomp-TileraMDE2.0-tilepro.conf`
# export TILERA_ROOT=/root/TileraMDE-2.1.2.112814/tilepro/  %%这个最好用2.x版本的
# export PATH=$TILERA_ROOT/bin:$PATH
# tile-monitor --pci -- uname -a  %%验证板卡确实可用
Linux localhost 2.6.26.7-MDE-2.1.2.112814 #1 SMP Wed Sep 1 00:05:06 EDT 2010 tile GNU/Linux

%%开始交叉编译
# ./otp_build configure
# touch lib/crypto/SKIP &amp;&amp;  touch lib/ssl/SKIP &amp;&amp; touch lib/ssh/SKIP   %%这几个模块用到了openssl, 编译不过去，忽略掉
# ./otp_build boot -a
# ./otp_build release -a /tmp/otp %%安装到/tmp/otp目录去

%%如果一切顺利，到这时候就编译完毕了。

%%我们开始收获成果。

# cd /tmp/otp
# ./Install `pwd`
#  tile-monitor --pci --here -- bin/erl  %%没出错的话，就说明我们成功了。

%%当然我们可以把otp系统上载到板卡去，方便日后使用
# $TILERA_ROOT/bin/tile-monitor --pci  --upload /tmp/otp /tmp/otp --quit   %% 放在板卡的/tmp/otp目录下

%%我们还可以定义个命令别名，方便我们执行命令
# tile_erl=&quot;$TILERA_ROOT/bin/tile-monitor --pci --resume --tunnel 2023 23  --env HOME=/tmp  --tiles - all ^0 - -- /tmp/otp/bin/erl&quot;
# $tile_erl +sct L10-18,1-9,19-55,57,58,61c1-55,57,58,61 +sbt db   -noshell +S 58 -s init stop
</pre>
<p>好吧到此为止，我们在目标机器上/tmp/otp目录下有个完整的erlang系统。</p>
<p>我们开个console连接到板载的linux系统去：</p>
<pre class="brush: bash; title: ; notranslate">
[root@client otp_src_R13B03]# /root/TileraMDE-2.1.2.112814/tilepro/bin/tile-console
tile-console: Assuming '--pci'.
Connecting to /dev/ttyS0, speed 115200
 Escape character: Ctrl-\ (ASCII 28, FS): enabled
Type the escape character followed by C to get back,
or followed by ? to see other options.
----------------------------------------------------
# uname -a
Linux localhost 2.6.26.7-MDE-2.1.2.112814 #1 SMP Wed Sep 1 00:05:06 EDT 2010 tile GNU/Linux

# cd /tmp/otp
%%我们跑个erlang程序&lt;em&gt;64核心并行&lt;/em&gt;进行数学计算
%% 代码在这里下载 http://shootout.alioth.debian.org/u32/program.php?test=spectralnorm&amp;lang=hipe&amp;id=2
#cat &gt; spectralnorm.erl
%   The Computer Language Benchmarks Game
%   http://shootout.alioth.debian.org/
%   contributed by Fredrik Svahn

-module(spectralnorm).
-export([main/1]).
-compile( [ inline, { inline_size, 1000 } ] ).

main([Arg]) -&gt;
    register(server, self()),
    N = list_to_integer(Arg),
    {U, V} = power_method(N, 10, erlang:make_tuple(N, 1), []),
    io:format(&quot;~.9f\n&quot;, [ eigen(N, U, V, 0, 0) ]),
    erlang:halt(0).

% eigenvalue of V
eigen(0, _, _, VBV, VV) when VV /= 0 -&gt; math:sqrt(VBV / VV);

eigen(I, U, V, VBV, VV) when I /= 0 -&gt;
    VI = element(I, V),
    eigen(I-1, U, V, VBV + element(I, U)*VI, VV + VI*VI).

% 2I steps of the power method
power_method(_, 0, A, B) -&gt; {A, B};
power_method(N, I, A, _B) -&gt;
    V = atav(N, A),
    U = atav(N, V),
    power_method(N, I-1, U, V).

% return element i,j of infinite matrix A
a(II,JJ) -&gt; 1/((II+JJ-2)*(II-1+JJ)/2+II).

% multiply vector v by matrix A
av(N, V) -&gt; pmap(N, fun(Begin, End) -&gt; av(N, Begin, End, V) end).

av(N, Begin, End, V) -&gt; server ! { self(), [ avloop(N, I, V, 0.0) || I &lt;- lists:seq(Begin, End) ]}.

avloop(0, _, _, X) -&gt;  X;
avloop(J, I, V, X) -&gt;  avloop(J-1, I, V, X + a(I, J)*element(J, V) ).

% multiply vector v by matrix A transposed
atv(N, V) -&gt; pmap(N, fun(Begin, End)-&gt; atv(N, Begin, End, V) end).

atv(N, Begin, End, V) -&gt; server ! { self(), [ atvloop(N, I, V, 0.0) || I &lt;- lists:seq(Begin, End) ]}.

atvloop(0, _, _, X) -&gt; X;
atvloop(J, I, V, X) -&gt; atvloop(J-1, I, V, X + a(J, I)*element(J, V) ).

% multiply vector v by matrix A and then by matrix A transposed
atav(N, V) -&gt; atv(N, av(N, V)).

%Helper function for multicore
pmap(N, F) -&gt;
    Chunks = chunks(0, erlang:system_info(logical_processors), N, []),
    Pids = [spawn(fun()-&gt; F(Begin, End) end) || {Begin, End} &lt;- Chunks],
    Res = [ receive {Pid, X} -&gt; X end || Pid &lt;- Pids],
    list_to_tuple(lists:flatten(Res)).

chunks(I, P, N, A) when I == P-1 -&gt; lists:reverse([{I*(N div P)+1, N} | A ]);
chunks(I, P, N, A) -&gt; chunks(I+1, P, N, [{ I*(N div P)+1, (I+1)*(N div P)} | A ]).

CTRL+D

# bin/erlc spectralnorm.erl
# time bin/erl -noshell -run spectralnorm  main 500  -s init stop
1.274224116
real    0m 16.90s
user    1m 16.07s
sys     0m 0.79s
# bin/erl  +sct L10-18,1-9,19-55,57,58,61c1-55,57,58,61 +sbt db   -noshell +S 58 -eval 'io:format(&quot;schedulers: ~p~n&quot;1)' -s init stop
schedulers: 58
</pre>
<p>Bingo! 我们顺利的跑了数学计算，同时绑定调度器到CPU core上去了。接下来就可以按照平常那样进行Erlang并发编程了。</p>
<p>祝玩的开心！</p>
<div style="margin-top: 0; margin-bottom: 15px; color: #888888; font-size: 80%; font-style: italic">
<p>Post Footer automatically generated by <a href="http://easwy.com/blog/wordpress/wp-posturl/" style="color: #8888FF; text-decoration: underline;">wp-posturl plugin</a> for wordpress.</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://blog.yufeng.info/archives/791/feed</wfw:commentRss>
		<slash:comments>20</slash:comments>
		</item>
		<item>
		<title>Erlang R13B04 Installation</title>
		<link>http://blog.yufeng.info/archives/200</link>
		<comments>http://blog.yufeng.info/archives/200#comments</comments>
		<pubDate>Thu, 28 Jan 2010 02:32:22 +0000</pubDate>
		<dc:creator>Yu Feng</dc:creator>
				<category><![CDATA[Erlang探索]]></category>
		<category><![CDATA[install]]></category>
		<category><![CDATA[R13B04]]></category>

		<guid isPermaLink="false">http://blog.yufeng.info/?p=200</guid>
		<description><![CDATA[原创文章，转载请注明： 转载自Erlang非业余研究 本文链接地址: Erlang R13B04 Installation R13B04后erlang的源码编译为了考虑移植性,就改变了编译方式,以下是官方wiki上的安装文档: 1. Cloning Here are the basic steps to build Erlang/OTP in the Git repository. Start by cloning: 2. Building Next, set ERL_TOP the environment variable: The repository does not contain a generated configure file, so it must be generated like this: before configure can be run. When the [...]]]></description>
			<content:encoded><![CDATA[<div style="margin-top: 15px; font-style: italic">
<p><strong>原创文章，转载请注明：</strong> 转载自<a href="http://blog.yufeng.info/">Erlang非业余研究</a></p>
<p><strong>本文链接地址:</strong> <a href="http://blog.yufeng.info/archives/200">Erlang R13B04 Installation</a></p>
</div>
<p>R13B04后erlang的源码编译为了考虑移植性,就改变了编译方式,以下是<a href="http://wiki.github.com/erlang/otp/installation">官方wiki上的安装文档</a>:</p>
<p><strong>1. Cloning</strong></p>
<p>Here are the basic steps to build Erlang/OTP in the Git repository.<br />
Start by cloning:</p>
<pre class="brush: bash; title: ; notranslate">
git clone git://github.com/erlang/otp.git
</pre>
<p><strong><br />
2. Building</strong></p>
<p>Next, set ERL_TOP the environment variable:</p>
<pre class="brush: bash; title: ; notranslate">
cd otp
export ERL_TOP=`pwd`
</pre>
<p>The repository does not contain a generated configure file, so it must be generated like this:</p>
<pre class="brush: bash; title: ; notranslate">
./otp_build autoconf
</pre>
<p>before configure can be run. When the configure files has been generated, you can build in the usual way as described in the README file. Shortly:</p>
<pre class="brush: bash; title: ; notranslate">
./configure
make
</pre>
<p><strong>3. To run the system you have built without installing it first:</strong></p>
<pre class="brush: bash; title: ; notranslate">
$ERL_TOP/bin/erl
</pre>
<div style="margin-top: 0; margin-bottom: 15px; color: #888888; font-size: 80%; font-style: italic">
<p>Post Footer automatically generated by <a href="http://easwy.com/blog/wordpress/wp-posturl/" style="color: #8888FF; text-decoration: underline;">wp-posturl plugin</a> for wordpress.</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://blog.yufeng.info/archives/200/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

