<?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>vifix.cn &#187; Linux</title>
	<atom:link href="http://vifix.cn/blog/tag/linux/feed" rel="self" type="application/rss+xml" />
	<link>http://vifix.cn/blog</link>
	<description>compile the dream, compile tomorrow</description>
	<lastBuildDate>Sun, 20 May 2012 15:26:15 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>CentOS 安装 KVM 因 nc.openbsd 不存在导致无法使用远程 virt-manager 连接的问题</title>
		<link>http://vifix.cn/blog/centos-6-2-install-kvm-remote-virt-manager-nc-openbsd-exception.html</link>
		<comments>http://vifix.cn/blog/centos-6-2-install-kvm-remote-virt-manager-nc-openbsd-exception.html#comments</comments>
		<pubDate>Tue, 15 May 2012 07:36:42 +0000</pubDate>
		<dc:creator>Mac</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[CentOS]]></category>
		<category><![CDATA[KVM]]></category>
		<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://vifix.cn/blog/?p=2321</guid>
		<description><![CDATA[这两天公司里面准备配置一台专门的机器作为开发这边的共同测试环境 虽然前段时间早就配置过真实的生产环境机器的kvm，但是发现这次有些东西还是想不起来了，所以还是记录一下 安装KVM本身没什么，在yum的帮助下完成即可： yum install libvirt kvm 就行了，然后使用modprobe加载下kvm模块，并且启动libvirtd服务（或者重启也可以） 但是在接下去的用远程的virt-manager连接的时候会碰到远程管理无法连接的问题，使用virt-manager &#8211;debug可以看到错误输出如下： 2012-05-14 20:35:10,068 (connection:991): Scheduling background open thread for qemu+ssh://root@hxdev/system 2012-05-14 20:35:10,068 (connection:1177): Background &#8216;open connection&#8217; thread is running 2012-05-14 20:35:10,095 (connection:1227): Background open thread complete, scheduling notify 2012-05-14 20:35:10,096 (connection:1232): Notifying open result 2012-05-14 20:35:10,096 (create:158): Closing new vm wizard 2012-05-14 20:35:10,097 (storagebrowse:80): Closing storage [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://vifix.cn/blog/wp-content/uploads/2012/05/virt-manager-kvm.png" rel="shadowbox[sbpost-2321];player=img;" title="virt-manager-kvm"><img class="alignnone size-medium wp-image-2363" title="virt-manager-kvm" src="http://vifix.cn/blog/wp-content/uploads/2012/05/virt-manager-kvm-300x240.png" alt="" width="300" height="240" /></a></p>
<p>这两天公司里面准备配置一台专门的机器作为开发这边的共同测试环境</p>
<p>虽然前段时间早就配置过真实的生产环境机器的kvm，但是发现这次有些东西还是想不起来了，所以还是记录一下</p>
<p>安装KVM本身没什么，在yum的帮助下完成即可：</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">yum <span style="color: #c20cb9; font-weight: bold;">install</span> libvirt kvm</pre></div></div>

<p>就行了，然后使用modprobe加载下kvm模块，并且启动libvirtd服务（或者重启也可以）</p>
<p>但是在接下去的用远程的virt-manager连接的时候会碰到远程管理无法连接的问题，使用virt-manager &#8211;debug可以看到错误输出如下：<br />
<span id="more-2321"></span></p>
<blockquote><p>2012-05-14 20:35:10,068 (connection:991): Scheduling background open thread for qemu+ssh://root@hxdev/system<br />
2012-05-14 20:35:10,068 (connection:1177): Background &#8216;open connection&#8217; thread is running<br />
2012-05-14 20:35:10,095 (connection:1227): Background open thread complete, scheduling notify<br />
2012-05-14 20:35:10,096 (connection:1232): Notifying open result<br />
2012-05-14 20:35:10,096 (create:158): Closing new vm wizard<br />
2012-05-14 20:35:10,097 (storagebrowse:80): Closing storage browser<br />
2012-05-14 20:35:10,097 (createvol:80): Closing new volume wizard<br />
2012-05-14 20:35:10,100 (cli:83): Uncaught exception:<br />
Traceback (most recent call last):<br />
File &#8220;/usr/share/virt-manager/virtManager/manager.py&#8221;, line 665, in _connect_error<br />
if conn.is_remote() and re.search(r&#8221;nc.openbsd: .* &#8212; &#8216;U&#8217;&#8221;, details):<br />
UnboundLocalError: local variable &#8216;details&#8217; referenced before assignment</p>
<p>Traceback (most recent call last):<br />
File &#8220;/usr/share/virt-manager/virtManager/manager.py&#8221;, line 665, in _connect_error<br />
if conn.is_remote() and re.search(r&#8221;nc.openbsd: .* &#8212; &#8216;U&#8217;&#8221;, details):<br />
UnboundLocalError: local variable &#8216;details&#8217; referenced before assignment</p></blockquote>
<p>原因是virtmanager依赖的nc.openbsd不存在，但实际上nc（netcat）在CentOS中是有的，所以只要在服务器上为nc建立一个符号链接即可：</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">ln</span> <span style="color: #660033;">-s</span> <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>nc <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>nc.openbsd</pre></div></div>

<p>小TIP: virt-manager貌似bug还不少，很多时候实际发生错误的时候它都不会报错，如果你在使用它连接远程的时候，connect发现毫无动静，那就说明实际上已经出错了，可以通过virt-manager &#8211;debug进行查看。先前靠着这个信息还发现了一个变量在使用前没有初始化的问题，可见其代码质量并不是很好……</p>
<p>可以参考此文：<a href="http://korprulu.blogspot.com/2011/05/virt-manager-problem-in-archlinux.html" target="_blank" onclick="pageTracker._trackPageview('/outgoing/korprulu.blogspot.com/2011/05/virt-manager-problem-in-archlinux.html?referer=');">http://korprulu.blogspot.com/2011/05/virt-manager-problem-in-archlinux.html</a> （讲的也是上面的问题，当时找这个错误的原因花了好久……）</p>
]]></content:encoded>
			<wfw:commentRss>http://vifix.cn/blog/centos-6-2-install-kvm-remote-virt-manager-nc-openbsd-exception.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Coreseek在GCC 4.7上编译不通过的问题</title>
		<link>http://vifix.cn/blog/coreseek-cant-make-in-gcc-4-7-enviroment.html</link>
		<comments>http://vifix.cn/blog/coreseek-cant-make-in-gcc-4-7-enviroment.html#comments</comments>
		<pubDate>Mon, 16 Apr 2012 06:31:35 +0000</pubDate>
		<dc:creator>Mac</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Coreseek]]></category>
		<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://vifix.cn/blog/?p=2342</guid>
		<description><![CDATA[今天在archlinux在安装coreseek 4.1-beta时碰到的问题，在g++编译sphinxexpr.cpp时： &#160; g++ -DHAVE_CONFIG_H -I. -I../config -DSYSCONFDIR=&#34;\&#34;/opt/coreseek-3.2.14/etc\&#34;&#34; -DDATADIR=&#34;\&#34;/opt/coreseek-3.2.14/var/data\&#34;&#34; -I/usr/local/include -pthread -I/usr/include/mysql -fPIC -pipe -fstack-protector --param=ssp-buffer-size=4 -D_FORTIFY_SOURCE=2 -fno-strict-aliasing -DBIG_JOINS=1 -fomit-frame-pointer -g -I/opt/mmseg-3.2.14/include/mmseg/ -Wall -g -D_FILE_OFFSET_BITS=64 -O3 -DNDEBUG -MT sphinxexpr.o -MD -MP -MF .deps/sphinxexpr.Tpo -c -o sphinxexpr.o sphinxexpr.cpp sphinxexpr.cpp: In constructor ‘ExprParser_t::ExprParser_t&#40;CSphSchema*, ISphExprHook*&#41;’: sphinxexpr.cpp:742:17: warning: ‘ExprParser_t::m_pExtra’ will be initialized after &#91;-Wreorder&#93; sphinxexpr.cpp:711:19: warning: ‘ISphExprHook* ExprParser_t::m_pHook’ &#91;-Wreorder&#93; [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://vifix.cn/blog/wp-content/uploads/2012/04/coreseek.gif" rel="shadowbox[sbpost-2342];player=img;" title="coreseek"><img src="http://vifix.cn/blog/wp-content/uploads/2012/04/coreseek.gif" alt="" title="coreseek" width="180" height="55" class="alignnone size-full wp-image-2344" /></a></p>
<p>今天在archlinux在安装coreseek 4.1-beta时碰到的问题，在g++编译sphinxexpr.cpp时：</p>
<p><span id="more-2342"></span></p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">&nbsp;
<span style="color: #c20cb9; font-weight: bold;">g++</span> -DHAVE_CONFIG_H -I. -I..<span style="color: #000000; font-weight: bold;">/</span>config  <span style="color: #660033;">-DSYSCONFDIR</span>=<span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\&quot;</span>/opt/coreseek-3.2.14/etc<span style="color: #000099; font-weight: bold;">\&quot;</span>&quot;</span> <span style="color: #660033;">-DDATADIR</span>=<span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\&quot;</span>/opt/coreseek-3.2.14/var/data<span style="color: #000099; font-weight: bold;">\&quot;</span>&quot;</span> -I<span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>local<span style="color: #000000; font-weight: bold;">/</span>include <span style="color: #660033;">-pthread</span> -I<span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>include<span style="color: #000000; font-weight: bold;">/</span>mysql <span style="color: #660033;">-fPIC</span> <span style="color: #660033;">-pipe</span> <span style="color: #660033;">-fstack-protector</span> <span style="color: #660033;">--param</span>=ssp-buffer-size=<span style="color: #000000;">4</span> -D_FORTIFY_SOURCE=<span style="color: #000000;">2</span> <span style="color: #660033;">-fno-strict-aliasing</span> -DBIG_JOINS=<span style="color: #000000;">1</span> <span style="color: #660033;">-fomit-frame-pointer</span>  <span style="color: #660033;">-g</span>  -I<span style="color: #000000; font-weight: bold;">/</span>opt<span style="color: #000000; font-weight: bold;">/</span>mmseg-3.2.14<span style="color: #000000; font-weight: bold;">/</span>include<span style="color: #000000; font-weight: bold;">/</span>mmseg<span style="color: #000000; font-weight: bold;">/</span>   <span style="color: #660033;">-Wall</span> <span style="color: #660033;">-g</span> -D_FILE_OFFSET_BITS=<span style="color: #000000;">64</span> <span style="color: #660033;">-O3</span> <span style="color: #660033;">-DNDEBUG</span> <span style="color: #660033;">-MT</span> sphinxexpr.o <span style="color: #660033;">-MD</span> <span style="color: #660033;">-MP</span> <span style="color: #660033;">-MF</span> .deps<span style="color: #000000; font-weight: bold;">/</span>sphinxexpr.Tpo <span style="color: #660033;">-c</span> <span style="color: #660033;">-o</span> sphinxexpr.o sphinxexpr.cpp
sphinxexpr.cpp: In constructor ‘ExprParser_t::ExprParser_t<span style="color: #7a0874; font-weight: bold;">&#40;</span>CSphSchema<span style="color: #000000; font-weight: bold;">*</span>, ISphExprHook<span style="color: #000000; font-weight: bold;">*</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>’:
sphinxexpr.cpp:<span style="color: #000000;">742</span>:<span style="color: #000000;">17</span>: warning: ‘ExprParser_t::m_pExtra’ will be initialized after <span style="color: #7a0874; font-weight: bold;">&#91;</span>-Wreorder<span style="color: #7a0874; font-weight: bold;">&#93;</span>
sphinxexpr.cpp:<span style="color: #000000;">711</span>:<span style="color: #000000;">19</span>: warning:   ‘ISphExprHook<span style="color: #000000; font-weight: bold;">*</span> ExprParser_t::m_pHook’ <span style="color: #7a0874; font-weight: bold;">&#91;</span>-Wreorder<span style="color: #7a0874; font-weight: bold;">&#93;</span>
sphinxexpr.cpp:<span style="color: #000000;">698</span>:<span style="color: #000000;">2</span>: warning:   when initialized here <span style="color: #7a0874; font-weight: bold;">&#91;</span>-Wreorder<span style="color: #7a0874; font-weight: bold;">&#93;</span>
sphinxexpr.cpp: In instantiation of ‘int Expr_In_c<span style="color: #000000; font-weight: bold;">&lt;</span>T<span style="color: #000000; font-weight: bold;">&gt;</span>::IntEval<span style="color: #7a0874; font-weight: bold;">&#40;</span>const CSphMatch<span style="color: #000000; font-weight: bold;">&amp;</span><span style="color: #7a0874; font-weight: bold;">&#41;</span> const <span style="color: #7a0874; font-weight: bold;">&#91;</span>with T = float<span style="color: #7a0874; font-weight: bold;">&#93;</span>’:
sphinxexpr.cpp:<span style="color: #000000;">3152</span>:<span style="color: #000000;">1</span>:   required from here
sphinxexpr.cpp:<span style="color: #000000;">1823</span>:<span style="color: #000000;">43</span>: error: ‘ExprEval’ was not declared <span style="color: #000000; font-weight: bold;">in</span> this scope, and no declarations were found by argument-dependent lookup at the point of instantiation <span style="color: #7a0874; font-weight: bold;">&#91;</span>-fpermissive<span style="color: #7a0874; font-weight: bold;">&#93;</span>
sphinxexpr.cpp:<span style="color: #000000;">1823</span>:<span style="color: #000000;">43</span>: note: declarations <span style="color: #000000; font-weight: bold;">in</span> dependent base ‘Expr_ArgVsSet_c<span style="color: #000000; font-weight: bold;">&lt;</span>float<span style="color: #000000; font-weight: bold;">&gt;</span>’ are not found by unqualified lookup
sphinxexpr.cpp:<span style="color: #000000;">1823</span>:<span style="color: #000000;">43</span>: note: use ‘this-<span style="color: #000000; font-weight: bold;">&gt;</span>ExprEval’ instead
sphinxexpr.cpp: In instantiation of ‘int Expr_In_c<span style="color: #000000; font-weight: bold;">&lt;</span>T<span style="color: #000000; font-weight: bold;">&gt;</span>::IntEval<span style="color: #7a0874; font-weight: bold;">&#40;</span>const CSphMatch<span style="color: #000000; font-weight: bold;">&amp;</span><span style="color: #7a0874; font-weight: bold;">&#41;</span> const <span style="color: #7a0874; font-weight: bold;">&#91;</span>with T = long long int<span style="color: #7a0874; font-weight: bold;">&#93;</span>’:
sphinxexpr.cpp:<span style="color: #000000;">3152</span>:<span style="color: #000000;">1</span>:   required from here
sphinxexpr.cpp:<span style="color: #000000;">1823</span>:<span style="color: #000000;">43</span>: error: ‘ExprEval’ was not declared <span style="color: #000000; font-weight: bold;">in</span> this scope, and no declarations were found by argument-dependent lookup at the point of instantiation <span style="color: #7a0874; font-weight: bold;">&#91;</span>-fpermissive<span style="color: #7a0874; font-weight: bold;">&#93;</span>
sphinxexpr.cpp:<span style="color: #000000;">1823</span>:<span style="color: #000000;">43</span>: note: declarations <span style="color: #000000; font-weight: bold;">in</span> dependent base ‘Expr_ArgVsSet_c<span style="color: #000000; font-weight: bold;">&lt;</span>long long int<span style="color: #000000; font-weight: bold;">&gt;</span>’ are not found by unqualified lookup
sphinxexpr.cpp:<span style="color: #000000;">1823</span>:<span style="color: #000000;">43</span>: note: use ‘this-<span style="color: #000000; font-weight: bold;">&gt;</span>ExprEval’ instead
sphinxexpr.cpp: In instantiation of ‘int Expr_In_c<span style="color: #000000; font-weight: bold;">&lt;</span>T<span style="color: #000000; font-weight: bold;">&gt;</span>::IntEval<span style="color: #7a0874; font-weight: bold;">&#40;</span>const CSphMatch<span style="color: #000000; font-weight: bold;">&amp;</span><span style="color: #7a0874; font-weight: bold;">&#41;</span> const <span style="color: #7a0874; font-weight: bold;">&#91;</span>with T = int<span style="color: #7a0874; font-weight: bold;">&#93;</span>’:
sphinxexpr.cpp:<span style="color: #000000;">3152</span>:<span style="color: #000000;">1</span>:   required from here
sphinxexpr.cpp:<span style="color: #000000;">1823</span>:<span style="color: #000000;">43</span>: error: ‘ExprEval’ was not declared <span style="color: #000000; font-weight: bold;">in</span> this scope, and no declarations were found by argument-dependent lookup at the point of instantiation <span style="color: #7a0874; font-weight: bold;">&#91;</span>-fpermissive<span style="color: #7a0874; font-weight: bold;">&#93;</span>
sphinxexpr.cpp:<span style="color: #000000;">1823</span>:<span style="color: #000000;">43</span>: note: declarations <span style="color: #000000; font-weight: bold;">in</span> dependent base ‘Expr_ArgVsSet_c<span style="color: #000000; font-weight: bold;">&lt;</span>int<span style="color: #000000; font-weight: bold;">&gt;</span>’ are not found by unqualified lookup
sphinxexpr.cpp:<span style="color: #000000;">1823</span>:<span style="color: #000000;">43</span>: note: use ‘this-<span style="color: #000000; font-weight: bold;">&gt;</span>ExprEval’ instead
sphinxexpr.cpp: In instantiation of ‘int Expr_Interval_c<span style="color: #000000; font-weight: bold;">&lt;</span>T<span style="color: #000000; font-weight: bold;">&gt;</span>::IntEval<span style="color: #7a0874; font-weight: bold;">&#40;</span>const CSphMatch<span style="color: #000000; font-weight: bold;">&amp;</span><span style="color: #7a0874; font-weight: bold;">&#41;</span> const <span style="color: #7a0874; font-weight: bold;">&#91;</span>with T = float<span style="color: #7a0874; font-weight: bold;">&#93;</span>’:
sphinxexpr.cpp:<span style="color: #000000;">3152</span>:<span style="color: #000000;">1</span>:   required from here
sphinxexpr.cpp:<span style="color: #000000;">1777</span>:<span style="color: #000000;">43</span>: error: ‘ExprEval’ was not declared <span style="color: #000000; font-weight: bold;">in</span> this scope, and no declarations were found by argument-dependent lookup at the point of instantiation <span style="color: #7a0874; font-weight: bold;">&#91;</span>-fpermissive<span style="color: #7a0874; font-weight: bold;">&#93;</span>
sphinxexpr.cpp:<span style="color: #000000;">1777</span>:<span style="color: #000000;">43</span>: note: declarations <span style="color: #000000; font-weight: bold;">in</span> dependent base ‘Expr_ArgVsSet_c<span style="color: #000000; font-weight: bold;">&lt;</span>float<span style="color: #000000; font-weight: bold;">&gt;</span>’ are not found by unqualified lookup
sphinxexpr.cpp:<span style="color: #000000;">1777</span>:<span style="color: #000000;">43</span>: note: use ‘this-<span style="color: #000000; font-weight: bold;">&gt;</span>ExprEval’ instead
sphinxexpr.cpp: In instantiation of ‘int Expr_Interval_c<span style="color: #000000; font-weight: bold;">&lt;</span>T<span style="color: #000000; font-weight: bold;">&gt;</span>::IntEval<span style="color: #7a0874; font-weight: bold;">&#40;</span>const CSphMatch<span style="color: #000000; font-weight: bold;">&amp;</span><span style="color: #7a0874; font-weight: bold;">&#41;</span> const <span style="color: #7a0874; font-weight: bold;">&#91;</span>with T = long long int<span style="color: #7a0874; font-weight: bold;">&#93;</span>’:
sphinxexpr.cpp:<span style="color: #000000;">3152</span>:<span style="color: #000000;">1</span>:   required from here
sphinxexpr.cpp:<span style="color: #000000;">1777</span>:<span style="color: #000000;">43</span>: error: ‘ExprEval’ was not declared <span style="color: #000000; font-weight: bold;">in</span> this scope, and no declarations were found by argument-dependent lookup at the point of instantiation <span style="color: #7a0874; font-weight: bold;">&#91;</span>-fpermissive<span style="color: #7a0874; font-weight: bold;">&#93;</span>
sphinxexpr.cpp:<span style="color: #000000;">1777</span>:<span style="color: #000000;">43</span>: note: declarations <span style="color: #000000; font-weight: bold;">in</span> dependent base ‘Expr_ArgVsSet_c<span style="color: #000000; font-weight: bold;">&lt;</span>long long int<span style="color: #000000; font-weight: bold;">&gt;</span>’ are not found by unqualified lookup
sphinxexpr.cpp:<span style="color: #000000;">1777</span>:<span style="color: #000000;">43</span>: note: use ‘this-<span style="color: #000000; font-weight: bold;">&gt;</span>ExprEval’ instead
sphinxexpr.cpp: In instantiation of ‘int Expr_Interval_c<span style="color: #000000; font-weight: bold;">&lt;</span>T<span style="color: #000000; font-weight: bold;">&gt;</span>::IntEval<span style="color: #7a0874; font-weight: bold;">&#40;</span>const CSphMatch<span style="color: #000000; font-weight: bold;">&amp;</span><span style="color: #7a0874; font-weight: bold;">&#41;</span> const <span style="color: #7a0874; font-weight: bold;">&#91;</span>with T = int<span style="color: #7a0874; font-weight: bold;">&#93;</span>’:
sphinxexpr.cpp:<span style="color: #000000;">3152</span>:<span style="color: #000000;">1</span>:   required from here
sphinxexpr.cpp:<span style="color: #000000;">1777</span>:<span style="color: #000000;">43</span>: error: ‘ExprEval’ was not declared <span style="color: #000000; font-weight: bold;">in</span> this scope, and no declarations were found by argument-dependent lookup at the point of instantiation <span style="color: #7a0874; font-weight: bold;">&#91;</span>-fpermissive<span style="color: #7a0874; font-weight: bold;">&#93;</span>
sphinxexpr.cpp:<span style="color: #000000;">1777</span>:<span style="color: #000000;">43</span>: note: declarations <span style="color: #000000; font-weight: bold;">in</span> dependent base ‘Expr_ArgVsSet_c<span style="color: #000000; font-weight: bold;">&lt;</span>int<span style="color: #000000; font-weight: bold;">&gt;</span>’ are not found by unqualified lookup
sphinxexpr.cpp:<span style="color: #000000;">1777</span>:<span style="color: #000000;">43</span>: note: use ‘this-<span style="color: #000000; font-weight: bold;">&gt;</span>ExprEval’ instead
sphinxexpr.cpp: In instantiation of ‘int Expr_IntervalConst_c<span style="color: #000000; font-weight: bold;">&lt;</span>T<span style="color: #000000; font-weight: bold;">&gt;</span>::IntEval<span style="color: #7a0874; font-weight: bold;">&#40;</span>const CSphMatch<span style="color: #000000; font-weight: bold;">&amp;</span><span style="color: #7a0874; font-weight: bold;">&#41;</span> const <span style="color: #7a0874; font-weight: bold;">&#91;</span>with T = float<span style="color: #7a0874; font-weight: bold;">&#93;</span>’:
sphinxexpr.cpp:<span style="color: #000000;">3152</span>:<span style="color: #000000;">1</span>:   required from here
sphinxexpr.cpp:<span style="color: #000000;">1746</span>:<span style="color: #000000;">43</span>: error: ‘ExprEval’ was not declared <span style="color: #000000; font-weight: bold;">in</span> this scope, and no declarations were found by argument-dependent lookup at the point of instantiation <span style="color: #7a0874; font-weight: bold;">&#91;</span>-fpermissive<span style="color: #7a0874; font-weight: bold;">&#93;</span>
sphinxexpr.cpp:<span style="color: #000000;">1746</span>:<span style="color: #000000;">43</span>: note: declarations <span style="color: #000000; font-weight: bold;">in</span> dependent base ‘Expr_ArgVsSet_c<span style="color: #000000; font-weight: bold;">&lt;</span>float<span style="color: #000000; font-weight: bold;">&gt;</span>’ are not found by unqualified lookup
sphinxexpr.cpp:<span style="color: #000000;">1746</span>:<span style="color: #000000;">43</span>: note: use ‘this-<span style="color: #000000; font-weight: bold;">&gt;</span>ExprEval’ instead
sphinxexpr.cpp: In instantiation of ‘int Expr_IntervalConst_c<span style="color: #000000; font-weight: bold;">&lt;</span>T<span style="color: #000000; font-weight: bold;">&gt;</span>::IntEval<span style="color: #7a0874; font-weight: bold;">&#40;</span>const CSphMatch<span style="color: #000000; font-weight: bold;">&amp;</span><span style="color: #7a0874; font-weight: bold;">&#41;</span> const <span style="color: #7a0874; font-weight: bold;">&#91;</span>with T = long long int<span style="color: #7a0874; font-weight: bold;">&#93;</span>’:
sphinxexpr.cpp:<span style="color: #000000;">3152</span>:<span style="color: #000000;">1</span>:   required from here
sphinxexpr.cpp:<span style="color: #000000;">1746</span>:<span style="color: #000000;">43</span>: error: ‘ExprEval’ was not declared <span style="color: #000000; font-weight: bold;">in</span> this scope, and no declarations were found by argument-dependent lookup at the point of instantiation <span style="color: #7a0874; font-weight: bold;">&#91;</span>-fpermissive<span style="color: #7a0874; font-weight: bold;">&#93;</span>
sphinxexpr.cpp:<span style="color: #000000;">1746</span>:<span style="color: #000000;">43</span>: note: declarations <span style="color: #000000; font-weight: bold;">in</span> dependent base ‘Expr_ArgVsSet_c<span style="color: #000000; font-weight: bold;">&lt;</span>long long int<span style="color: #000000; font-weight: bold;">&gt;</span>’ are not found by unqualified lookup
sphinxexpr.cpp:<span style="color: #000000;">1746</span>:<span style="color: #000000;">43</span>: note: use ‘this-<span style="color: #000000; font-weight: bold;">&gt;</span>ExprEval’ instead
sphinxexpr.cpp: In instantiation of ‘int Expr_IntervalConst_c<span style="color: #000000; font-weight: bold;">&lt;</span>T<span style="color: #000000; font-weight: bold;">&gt;</span>::IntEval<span style="color: #7a0874; font-weight: bold;">&#40;</span>const CSphMatch<span style="color: #000000; font-weight: bold;">&amp;</span><span style="color: #7a0874; font-weight: bold;">&#41;</span> const <span style="color: #7a0874; font-weight: bold;">&#91;</span>with T = int<span style="color: #7a0874; font-weight: bold;">&#93;</span>’:
sphinxexpr.cpp:<span style="color: #000000;">3152</span>:<span style="color: #000000;">1</span>:   required from here
sphinxexpr.cpp:<span style="color: #000000;">1746</span>:<span style="color: #000000;">43</span>: error: ‘ExprEval’ was not declared <span style="color: #000000; font-weight: bold;">in</span> this scope, and no declarations were found by argument-dependent lookup at the point of instantiation <span style="color: #7a0874; font-weight: bold;">&#91;</span>-fpermissive<span style="color: #7a0874; font-weight: bold;">&#93;</span>
sphinxexpr.cpp:<span style="color: #000000;">1746</span>:<span style="color: #000000;">43</span>: note: declarations <span style="color: #000000; font-weight: bold;">in</span> dependent base ‘Expr_ArgVsSet_c<span style="color: #000000; font-weight: bold;">&lt;</span>int<span style="color: #000000; font-weight: bold;">&gt;</span>’ are not found by unqualified lookup
sphinxexpr.cpp:<span style="color: #000000;">1746</span>:<span style="color: #000000;">43</span>: note: use ‘this-<span style="color: #000000; font-weight: bold;">&gt;</span>ExprEval’ instead
<span style="color: #c20cb9; font-weight: bold;">make</span><span style="color: #7a0874; font-weight: bold;">&#91;</span><span style="color: #000000;">2</span><span style="color: #7a0874; font-weight: bold;">&#93;</span>: <span style="color: #000000; font-weight: bold;">***</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span>sphinxexpr.o<span style="color: #7a0874; font-weight: bold;">&#93;</span> Error <span style="color: #000000;">1</span>
<span style="color: #c20cb9; font-weight: bold;">make</span><span style="color: #7a0874; font-weight: bold;">&#91;</span><span style="color: #000000;">2</span><span style="color: #7a0874; font-weight: bold;">&#93;</span>: Leaving directory <span style="color: #000000; font-weight: bold;">`/</span>home<span style="color: #000000; font-weight: bold;">/</span>mac<span style="color: #000000; font-weight: bold;">/</span>Downloads<span style="color: #000000; font-weight: bold;">/</span>coreseek-<span style="color: #000000;">4.1</span>-beta<span style="color: #000000; font-weight: bold;">/</span>csft-<span style="color: #000000;">4.1</span><span style="color: #000000; font-weight: bold;">/</span>src<span style="color: #ff0000;">'
make[1]: *** [all] Error 2
make[1]: Leaving directory `/home/mac/Downloads/coreseek-4.1-beta/csft-4.1/src'</span>
<span style="color: #c20cb9; font-weight: bold;">make</span>: <span style="color: #000000; font-weight: bold;">***</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span>all-recursive<span style="color: #7a0874; font-weight: bold;">&#93;</span> Error <span style="color: #000000;">1</span></pre></div></div>

<p>在替换为coreseek 3.2.13后仍然发生了类似问题，但是在自己的Mac OS X 10.6.8上类似的编译却没有碰到这个问题，于是觉得很奇怪。</p>
<p>搜索之后，仅找到一个有用的链接：<a href="http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=667378" target="_blank" onclick="pageTracker._trackPageview('/outgoing/bugs.debian.org/cgi-bin/bugreport.cgi?bug=667378&amp;referer=');">http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=667378</a>，是关于coreseek上游的sphinx的同样问题的，看了一下了解似乎是gcc 4.7的C++作用域的问题（？），上面的debian bugs里面提供了一个patch，看了下patch的内容，也对自己本地的coreseek的制作了同样的补丁，压缩包发布如下，使用时注意版本：</p>
<p><a href="http://vifix.cn/blog/wp-content/uploads/2012/04/sphinxexpr.cpp_.patch_.zip">sphinxexpr.cpp.patch.zip</a></p>
]]></content:encoded>
			<wfw:commentRss>http://vifix.cn/blog/coreseek-cant-make-in-gcc-4-7-enviroment.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>KVM + libvirtd 配置iptables端口转发</title>
		<link>http://vifix.cn/blog/kvm-libvirtd-iptables-port-forward.html</link>
		<comments>http://vifix.cn/blog/kvm-libvirtd-iptables-port-forward.html#comments</comments>
		<pubDate>Sat, 14 Apr 2012 07:43:47 +0000</pubDate>
		<dc:creator>Mac</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[KVM]]></category>
		<category><![CDATA[libvirtd]]></category>
		<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://vifix.cn/blog/?p=2328</guid>
		<description><![CDATA[（标题图与文章正文没有关系！ orz） 这个玩意儿不好好找文档看是真心不知道的，中文的iptables和libvirt的资源又比较零碎，所以特此总结下。 这两天在配置一个KVM虚拟机在宿主机（MAIN）上的端口转发，环境如下： 宿主机MAIN： eth0 &#8211; 连接外网，有一个固定IP（例如12.34.56.78），并且可以被外网直接访问到 virbr0 &#8211; libvirtd自动建立的虚拟网卡，用于连接内网，IP:192.168.122.1 虚拟机VM： eth0 &#8211; 连接MAIN的virbr0，IP:192.168.122.100 MySQL在端口3306上提供真实服务 现在要在外网上通过访问外网的MAIN的某个端口（例如12345），实现访问内网VM的3306，最初我想当然的在iptables.rules（CentOS位于/etc/sysconfig/iptables）里面增加了两条规则： *filter #... 其他规则 -A FORWARD -p tcp --dport 3306 -d 192.168.122.100 -j ACCEPT #... 其他规则 COMMIT #... *nat #... 其他规则 -A PREROUTING -p tcp -d 12.34.56.78 --dport 12345 -j DNAT --to 192.168.122.100:80 -A POSTROUTING -p tcp -d 192.168.122.100 [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://vifix.cn/blog/wp-content/uploads/2012/04/snapshot-haiku.png" rel="shadowbox[sbpost-2328];player=img;" title="snapshot-haiku"><img class="alignnone size-medium wp-image-2329" title="snapshot-haiku" src="http://vifix.cn/blog/wp-content/uploads/2012/04/snapshot-haiku-300x240.png" alt="" width="300" height="240" /></a></p>
<p>（标题图与文章正文没有关系！ orz）</p>
<p>这个玩意儿不好好找文档看是真心不知道的，中文的iptables和libvirt的资源又比较零碎，所以特此总结下。</p>
<p>这两天在配置一个KVM虚拟机在宿主机（MAIN）上的端口转发，环境如下：</p>
<blockquote><p>宿主机MAIN：<br />
eth0 &#8211; 连接外网，有一个固定IP（例如12.34.56.78），并且可以被外网直接访问到<br />
virbr0 &#8211; libvirtd自动建立的虚拟网卡，用于连接内网，IP:192.168.122.1</p>
<p>虚拟机VM：<br />
eth0 &#8211; 连接MAIN的virbr0，IP:192.168.122.100<br />
MySQL在端口3306上提供真实服务</p></blockquote>
<p>现在要在外网上通过访问外网的MAIN的某个端口（例如12345），实现访问内网VM的3306，最初我想当然的在iptables.rules（CentOS位于/etc/sysconfig/iptables）里面增加了两条规则：</p>
<p><span id="more-2328"></span></p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">*</span>filter
<span style="color: #666666; font-style: italic;">#... 其他规则</span>
<span style="color: #660033;">-A</span> FORWARD <span style="color: #660033;">-p</span> tcp <span style="color: #660033;">--dport</span> <span style="color: #000000;">3306</span> <span style="color: #660033;">-d</span> 192.168.122.100 <span style="color: #660033;">-j</span> ACCEPT
<span style="color: #666666; font-style: italic;">#... 其他规则</span>
COMMIT
<span style="color: #666666; font-style: italic;">#...</span>
<span style="color: #000000; font-weight: bold;">*</span>nat
<span style="color: #666666; font-style: italic;">#... 其他规则</span>
<span style="color: #660033;">-A</span> PREROUTING <span style="color: #660033;">-p</span> tcp <span style="color: #660033;">-d</span> 12.34.56.78 <span style="color: #660033;">--dport</span> <span style="color: #000000;">12345</span> <span style="color: #660033;">-j</span> DNAT <span style="color: #660033;">--to</span> 192.168.122.100:<span style="color: #000000;">80</span>
<span style="color: #660033;">-A</span> POSTROUTING <span style="color: #660033;">-p</span> tcp <span style="color: #660033;">-d</span> 192.168.122.100 <span style="color: #660033;">--dport</span> <span style="color: #000000;">80</span> <span style="color: #660033;">-j</span> SNAT <span style="color: #660033;">--to</span> 192.168.122.1
<span style="color: #666666; font-style: italic;">#... 其他规则</span>
COMMIT</pre></div></div>

<p>结果测试发现，在系统只有这些规则的情况下是没有问题的，但一旦libvirtd启动时自己加入的确保虚拟内网正常访问外网的NAT规则进来的话会产生冲突，原因很简单，就是libvirtd后来加入规则优先级高过我在iptables.rules里面设置的规则，所以就失去作用了。在这里我几乎花费了一天的时间来找问题到底如何解决，其中包括尝试修改iptables的优先级，详细阅读各种iptables的各种文档，用iptables-save导出被libvirtd修改后的iptables表在这基础上进行修改。最后终于搜到了libvirtd官网上的文档，讲libvirt管理下的虚拟机应该如何处理传入的连接，才了解到要用libvirtd的钩子脚本，会在任何虚拟机启动时启动这个脚本，位于/etc/libvirt/hooks/qemu 这个位置，于是编写脚本如下：</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">#!/bin/sh</span>
&nbsp;
<span style="color: #007800;">Guest_name</span>=vm-database
<span style="color: #007800;">Host_external_ipaddr</span>=12.34.56.78
<span style="color: #007800;">Host_port</span>=<span style="color: #000000;">12345</span>
<span style="color: #007800;">Host_ipaddr</span>=192.168.122.1
<span style="color: #007800;">Guest_ipaddr</span>=192.168.122.100
<span style="color: #007800;">Guest_port</span>=<span style="color: #000000;">3306</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">${1}</span>&quot;</span> = <span style="color: #ff0000;">&quot;<span style="color: #007800;">${Guest_name}</span>&quot;</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span>; <span style="color: #000000; font-weight: bold;">then</span>
  <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">${2}</span>&quot;</span> = <span style="color: #ff0000;">&quot;start&quot;</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span>; <span style="color: #000000; font-weight: bold;">then</span>
     iptables <span style="color: #660033;">-t</span> nat <span style="color: #660033;">-A</span> PREROUTING <span style="color: #660033;">-p</span> tcp <span style="color: #660033;">--dport</span> <span style="color: #800000;">${Host_port}</span> <span style="color: #660033;">-d</span> <span style="color: #800000;">${Host_external_ipaddr}</span> \
              <span style="color: #660033;">-j</span> DNAT <span style="color: #660033;">--to</span> <span style="color: #800000;">${Guest_ipaddr}</span>:<span style="color: #800000;">${Guest_port}</span>
     iptables <span style="color: #660033;">-I</span> FORWARD <span style="color: #660033;">-d</span> <span style="color: #800000;">${Guest_ipaddr}</span><span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">32</span> <span style="color: #660033;">-p</span> tcp \
              <span style="color: #660033;">--dport</span> <span style="color: #800000;">${Guest_port}</span> <span style="color: #660033;">-j</span> ACCEPT
<span style="color: #000000; font-weight: bold;">elif</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">${2}</span>&quot;</span> = <span style="color: #ff0000;">&quot;stopped&quot;</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span>; <span style="color: #000000; font-weight: bold;">then</span>
     iptables <span style="color: #660033;">-t</span> nat <span style="color: #660033;">-D</span> PREROUTING <span style="color: #660033;">-p</span> tcp <span style="color: #660033;">--dport</span> <span style="color: #800000;">${Host_port}</span> <span style="color: #660033;">-d</span> <span style="color: #800000;">${Host_external_ipaddr}</span> \
              <span style="color: #660033;">-j</span> DNAT <span style="color: #660033;">--to</span> <span style="color: #800000;">${Guest_ipaddr}</span>:<span style="color: #800000;">${Guest_port}</span>
     iptables <span style="color: #660033;">-D</span> FORWARD <span style="color: #660033;">-d</span> <span style="color: #800000;">${Guest_ipaddr}</span><span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">32</span> <span style="color: #660033;">-p</span> tcp \
              <span style="color: #660033;">--dport</span> <span style="color: #800000;">${Guest_port}</span> <span style="color: #660033;">-j</span> ACCEPT
 <span style="color: #000000; font-weight: bold;">fi</span>
<span style="color: #000000; font-weight: bold;">fi</span></pre></div></div>

<p>这样的话，就可以确保新建的FORWARD规则的优先级是最高的了，从而不被libvirtd的规则给盖住。不过要注意的是这里无需做SNAT，因为libvirtd自己添加的在NAT表的MASQUERADE规则相当于已经给你做掉了SNAT转换！</p>
<p>这是值得一看的中文iptables文档，对于理解如何配置iptables的NAT配置非常有帮助！：<a href="http://blog.chinaunix.net/space.php?uid=276597&amp;do=blog&amp;id=2014536" target="_blank" onclick="pageTracker._trackPageview('/outgoing/blog.chinaunix.net/space.php?uid=276597_amp_do=blog_amp_id=2014536&amp;referer=');">iptables 应用初探（nat+三层访问控制）</a></p>
<p>libvirt的官网文档：<a href="http://wiki.libvirt.org/page/Networking#Forwarding_Incoming_Connections" target="_blank" onclick="pageTracker._trackPageview('/outgoing/wiki.libvirt.org/page/Networking_Forwarding_Incoming_Connections?referer=');">http://wiki.libvirt.org/page/Networking#Forwarding_Incoming_Connections</a> （里面提供了一个hooks钩子脚本的范例，不过这个里面提供的脚本不够全面，实际的生产环境因为可能更加复杂所以那个无法产生效果，）</p>
<p>最后和本文主题无关的~感谢下<a href="http://haiku-os.org/" target="_blank" onclick="pageTracker._trackPageview('/outgoing/haiku-os.org/?referer=');">Haiku</a>里面的&#8221;PoorMan&#8221;，也就是文章顶图中虚拟机中高亮的窗口，是Haiku内建的一个超级轻量级的http服务器，在我本地archlinux上研究iptables和libvirtd的时候，作为主要测试对象立下了汗马功劳。Haiku是一个开源项目，立足于创立一个与BeOS兼容的操作系统，是一个很有趣的系统，感兴趣的童鞋可以去官网下载一个玩一下~</p>
]]></content:encoded>
			<wfw:commentRss>http://vifix.cn/blog/kvm-libvirtd-iptables-port-forward.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SimpleSnake &#8211; Hello, Android World</title>
		<link>http://vifix.cn/blog/simplesnake-hello-android-world.html</link>
		<comments>http://vifix.cn/blog/simplesnake-hello-android-world.html#comments</comments>
		<pubDate>Fri, 20 Jan 2012 06:39:13 +0000</pubDate>
		<dc:creator>Mac</dc:creator>
				<category><![CDATA[Atelier]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[Game]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://vifix.cn/blog/?p=2229</guid>
		<description><![CDATA[年末了，相对来说工作已经比较清闲，于是趁着机会研究了一下Android的游戏开发，花了一个下午写了这个贪吃蛇的应用。 使用的游戏引擎是libgdx，虽然目前看起来文档比较缺少，但是，最大的好处是可以在Winodows/OSX/Linux上运行，android上则只需要额外几行代码就可以运行，极大的方便了调试和跨平台的工作。 下载apk请点击此处 &#8211; simplesnake （必须要800&#215;480的分辨率才可以正常运行，如果大于这个分辨率仍然可以运行但按钮将错位，低于这个分辨率则可能出现奇怪的问题并且按钮缺失，因为只是hello, world，所以也不打算进一步优化各个分辨率了） 另外推荐下libgdx原作者的博客badlogic，以及他写的书：google book，豆瓣，像我这样的游戏开发初学者看看挺不错的。 一篇国产PC/Android游戏引擎LGame作者cping1982同学的介绍libgx的科普文章也很值得一看：http://blog.csdn.net/cping1982/article/details/6176191]]></description>
			<content:encoded><![CDATA[<p><a href="http://vifix.cn/blog/wp-content/uploads/2012/01/simple-snake.png" rel="shadowbox[sbpost-2229];player=img;"><img class="alignnone size-medium wp-image-2230" src="http://vifix.cn/blog/wp-content/uploads/2012/01/simple-snake-300x276.png" alt="" width="300" height="276" /></a></p>
<p>年末了，相对来说工作已经比较清闲，于是趁着机会研究了一下Android的游戏开发，花了一个下午写了这个贪吃蛇的应用。</p>
<p>使用的游戏引擎是<a href="http://code.google.com/p/libgdx/" target="_blank" onclick="pageTracker._trackPageview('/outgoing/code.google.com/p/libgdx/?referer=');">libgdx</a>，虽然目前看起来文档比较缺少，但是，最大的好处是可以在Winodows/OSX/Linux上运行，android上则只需要额外几行代码就可以运行，极大的方便了调试和跨平台的工作。</p>
<p>下载apk请点击此处 &#8211; <a href="http://vifix.cn/blog/wp-content/uploads/2012/01/simplesnake.zip">simplesnake</a> （必须要800&#215;480的分辨率才可以正常运行，如果大于这个分辨率仍然可以运行但按钮将错位，低于这个分辨率则可能出现奇怪的问题并且按钮缺失，因为只是hello, world，所以也不打算进一步优化各个分辨率了）</p>
<p>另外推荐下libgdx原作者的博客<a href="http://badlogicgames.com/" target="_blank" onclick="pageTracker._trackPageview('/outgoing/badlogicgames.com/?referer=');">badlogic</a>，以及他写的书：<a href="http://books.google.com.hk/books?id=NetBrvVEe3cC&amp;printsec=frontcover&amp;dq=beginning+android+game&amp;hl=en&amp;sa=X&amp;ei=HAsZT_2IJM2ciQf6ronWCw&amp;redir_esc=y&amp;hl=zh-CN&amp;sourceid=cndr#v=onepage&amp;q&amp;f=false" target="_blank" onclick="pageTracker._trackPageview('/outgoing/books.google.com.hk/books?id=NetBrvVEe3cC_amp_printsec=frontcover_amp_dq=beginning+android+game_amp_hl=en_amp_sa=X_amp_ei=HAsZT_2IJM2ciQf6ronWCw_amp_redir_esc=y_amp_hl=zh-CN_amp_sourceid=cndr_v=onepage_amp_q_amp_f=false&amp;referer=');">google book</a>，<a href="http://book.douban.com/subject/4753615/" target="_blank" onclick="pageTracker._trackPageview('/outgoing/book.douban.com/subject/4753615/?referer=');">豆瓣</a>，像我这样的游戏开发初学者看看挺不错的。</p>
<p>一篇国产PC/Android游戏引擎LGame作者cping1982同学的介绍libgx的科普文章也很值得一看：<a href="http://blog.csdn.net/cping1982/article/details/6176191" target="_blank" onclick="pageTracker._trackPageview('/outgoing/blog.csdn.net/cping1982/article/details/6176191?referer=');">http://blog.csdn.net/cping1982/article/details/6176191</a></p>
]]></content:encoded>
			<wfw:commentRss>http://vifix.cn/blog/simplesnake-hello-android-world.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Parted Magic</title>
		<link>http://vifix.cn/blog/parted-magic.html</link>
		<comments>http://vifix.cn/blog/parted-magic.html#comments</comments>
		<pubDate>Thu, 05 Jan 2012 11:10:44 +0000</pubDate>
		<dc:creator>Mac</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://vifix.cn/blog/?p=2224</guid>
		<description><![CDATA[近来在朋友送了个512M的小U盘给我，在这文件动辄上G的年代，这小巧的容量显得并不是那么实用，于是一直在考虑到底该拿它来干吗。然后自己公司里面的PC因为是去年安装的kubuntu，当时出于可能仍然还会双系统的考虑，所以分区划分的太小，一年过去了已经渐渐的不堪用起来了，于是开始考虑把还没利用起来的仍然存在的ntfs分区合并入已有的ext4当中。以前做这种事情都是在Windows下面的Acronis Disk Director这个工具，这次打算在Linux下面处理掉这个问题。所以就google到了一个名为Parted Magic的Linux LiveCD发行版，从名字就可以看得出来，这是在模仿曾经的经典的分区软件Norton PartitionMagic的名字。 gparted是这个发行版最核心的应用，此外还提供了testdisk这个非常优秀的恢复软件（我曾经用过它的windows版本恢复过一个彻底被覆盖的分区表），当然还有其他很多和磁盘相关的应用（包括但不限于磁盘检查，磁盘备份，磁盘镜像等等等等等），并且可以使用firefox随时上网查相关的问题。 照着官网的说明，很容易就做成了自启动U盘，通过在gparted约一个小时的折腾（其中主要是因为分区位置变动所以其自动复制几十G数据时的消耗的时间），搞定了相关的问题，觉得此物还是蛮不错的，所以就写了这篇日志。 PS:  开始的时候还担心移动分区的位置可能会导致uuid变动导致grub2无法正常引导的问题，事实证明（操作前后进行了对比）这个是不会发生变化的，所以可以安心使用移动分区位置的功能（当然还是要小心操作啦～丢了数据还是伤不起的 = 。 =）]]></description>
			<content:encoded><![CDATA[<p><a href="http://vifix.cn/blog/wp-content/uploads/2012/01/partedmagic.png" rel="shadowbox[sbpost-2224];player=img;" title="partedmagic"><img class="alignnone size-medium wp-image-2225" title="partedmagic" src="http://vifix.cn/blog/wp-content/uploads/2012/01/partedmagic-300x240.png" alt="" width="300" height="240" /></a></p>
<p>近来在朋友送了个512M的小U盘给我，在这文件动辄上G的年代，这小巧的容量显得并不是那么实用，于是一直在考虑到底该拿它来干吗。然后自己公司里面的PC因为是去年安装的kubuntu，当时出于可能仍然还会双系统的考虑，所以分区划分的太小，一年过去了已经渐渐的不堪用起来了，于是开始考虑把还没利用起来的仍然存在的ntfs分区合并入已有的ext4当中。以前做这种事情都是在Windows下面的Acronis Disk Director这个工具，这次打算在Linux下面处理掉这个问题。所以就google到了一个名为<a href="http://partedmagic.com/doku.php" target="_blank" onclick="pageTracker._trackPageview('/outgoing/partedmagic.com/doku.php?referer=');">Parted Magic</a>的Linux LiveCD发行版，从名字就可以看得出来，这是在模仿曾经的经典的分区软件<a href="http://zh.wikipedia.org/zh/Norton_PartitionMagic" target="_blank" onclick="pageTracker._trackPageview('/outgoing/zh.wikipedia.org/zh/Norton_PartitionMagic?referer=');">Norton PartitionMagic</a>的名字。</p>
<p>gparted是这个发行版最核心的应用，此外还提供了testdisk这个非常优秀的恢复软件（我曾经用过它的windows版本恢复过一个彻底被覆盖的分区表），当然还有其他很多和磁盘相关的应用（包括但不限于磁盘检查，磁盘备份，磁盘镜像等等等等等），并且可以使用firefox随时上网查相关的问题。</p>
<p>照着官网的说明，很容易就做成了自启动U盘，通过在gparted约一个小时的折腾（其中主要是因为分区位置变动所以其自动复制几十G数据时的消耗的时间），搞定了相关的问题，觉得此物还是蛮不错的，所以就写了这篇日志。</p>
<p>PS:  开始的时候还担心移动分区的位置可能会导致uuid变动导致grub2无法正常引导的问题，事实证明（操作前后进行了对比）这个是不会发生变化的，所以可以安心使用移动分区位置的功能（当然还是要小心操作啦～丢了数据还是伤不起的 = 。 =）</p>
]]></content:encoded>
			<wfw:commentRss>http://vifix.cn/blog/parted-magic.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>convmv &#8211; Linux下修改文件名编码</title>
		<link>http://vifix.cn/blog/convmv-linux-convert-filename-encoding.html</link>
		<comments>http://vifix.cn/blog/convmv-linux-convert-filename-encoding.html#comments</comments>
		<pubDate>Wed, 19 Oct 2011 09:01:28 +0000</pubDate>
		<dc:creator>Mac</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[CLI]]></category>
		<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://vifix.cn/blog/?p=2173</guid>
		<description><![CDATA[今天在公司tar打包一些编码为GBK的中文文件名的文件时打包碰到的问题。我自己的locale是en_US.UTF8，那台主机的环境是zh_CN.GBK，因此tar不管怎么打包，都会使文件名出现问题。而如果采用7z打包，虽然可以解决乱码问题（7z会记录下文件名的编码），但会丢失文件属性，所以不打算采用。 google了下发现可以通过convmv来进行解决： convmv -f GBK -t UTF8 -r --notest target 其中-f是源编码，-t是目标编码，-r是递归处理目录，&#8211;notest是不移动，实际上对文件进行改名（actually do rename the files），target是目标目录。其余参数可以参考man或者-h。 另外一个方案是google到了一个python脚本，通过python的tarfile包解决问题，感兴趣的可以看看这个link: http://superuser.com/questions/60379/linux-zip-tgz-filenames-encoding-problem]]></description>
			<content:encoded><![CDATA[<p>今天在公司tar打包一些编码为GBK的中文文件名的文件时打包碰到的问题。我自己的locale是en_US.UTF8，那台主机的环境是zh_CN.GBK，因此tar不管怎么打包，都会使文件名出现问题。而如果采用7z打包，虽然可以解决乱码问题（7z会记录下文件名的编码），但会丢失文件属性，所以不打算采用。</p>
<p>google了下发现可以通过convmv来进行解决：</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">convmv <span style="color: #660033;">-f</span> GBK <span style="color: #660033;">-t</span> UTF8 <span style="color: #660033;">-r</span> <span style="color: #660033;">--notest</span> target</pre></div></div>

<p>其中-f是源编码，-t是目标编码，-r是递归处理目录，&#8211;notest是不移动，实际上对文件进行改名（actually do rename the files），target是目标目录。其余参数可以参考man或者-h。</p>
<p>另外一个方案是google到了一个python脚本，通过python的tarfile包解决问题，感兴趣的可以看看这个link: <a href="http://superuser.com/questions/60379/linux-zip-tgz-filenames-encoding-problem" target="_blank" onclick="pageTracker._trackPageview('/outgoing/superuser.com/questions/60379/linux-zip-tgz-filenames-encoding-problem?referer=');">http://superuser.com/questions/60379/linux-zip-tgz-filenames-encoding-problem</a></p>
]]></content:encoded>
			<wfw:commentRss>http://vifix.cn/blog/convmv-linux-convert-filename-encoding.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>DoubanFM-CLI</title>
		<link>http://vifix.cn/blog/doubanfm-cli.html</link>
		<comments>http://vifix.cn/blog/doubanfm-cli.html#comments</comments>
		<pubDate>Wed, 12 Oct 2011 09:14:36 +0000</pubDate>
		<dc:creator>Mac</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[CLI]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://vifix.cn/blog/?p=2158</guid>
		<description><![CDATA[嗯……一直想在Linux下面搞个好使的豆瓣FM客户端好在工作时听听（不然要专门开个浏览器），于是google了下找到了这个，于是什么桌面客户端之类的弱爆了啊，这个才是Geeker听音乐的方式 = 。 = 东西是Python写的，代码短小精干，也可以自己研究下 github: https://github.com/zhendi/DoubanFM-CLI 作者豆瓣: http://www.douban.com/people/KaKa9527/]]></description>
			<content:encoded><![CDATA[<p><a href="http://vifix.cn/blog/wp-content/uploads/2011/10/douban_cli.png" rel="shadowbox[sbpost-2158];player=img;" title="douban_cli"><img class="alignnone size-medium wp-image-2160" title="douban_cli" src="http://vifix.cn/blog/wp-content/uploads/2011/10/douban_cli-300x187.png" alt="" width="300" height="187" /></a></p>
<p>嗯……一直想在Linux下面搞个好使的豆瓣FM客户端好在工作时听听（不然要专门开个浏览器），于是google了下找到了这个，于是什么桌面客户端之类的弱爆了啊，这个才是Geeker听音乐的方式 = 。 =</p>
<p>东西是Python写的，代码短小精干，也可以自己研究下</p>
<p>github: <a href="https://github.com/zhendi/DoubanFM-CLI" target="_blank" onclick="pageTracker._trackPageview('/outgoing/github.com/zhendi/DoubanFM-CLI?referer=');">https://github.com/zhendi/DoubanFM-CLI</a></p>
<p>作者豆瓣: <a href="http://www.douban.com/people/KaKa9527/" target="_blank" onclick="pageTracker._trackPageview('/outgoing/www.douban.com/people/KaKa9527/?referer=');">http://www.douban.com/people/KaKa9527/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://vifix.cn/blog/doubanfm-cli.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>fbterm—支持freetype2字体库的帧缓冲终端控制台</title>
		<link>http://vifix.cn/blog/fbterm.html</link>
		<comments>http://vifix.cn/blog/fbterm.html#comments</comments>
		<pubDate>Sat, 20 Aug 2011 18:02:18 +0000</pubDate>
		<dc:creator>Mac</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[CLI]]></category>
		<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://vifix.cn/blog/?p=2134</guid>
		<description><![CDATA[http://code.google.com/p/fbterm/ 继续来推荐Linux下面的software，这是最近发现的好物，fbterm，可以在帧缓冲的终端控制台下提供中文显示的支持，并且也能支持输入法，比起那个已经数年没有更新的zhcon好多了（zhcon也容易导致没有响应或有奇怪的问题）。更重要的是，它的字体显示是调用freetype2的，所以能和X下面的GUI应用达到相同的字体显示效果，看着文泉驿非常舒服～ 中文输入法可以用来自对岸的香草输入法，在ubuntu下面（我是11.04），需要安装的包为 libucimf fbterm-ucimf ucimf-openvanilla openvanilla-modules 装完openvanilla后可以去/usr/share/openvanilla/OVIMGeneric把文件移走到别的目录（其实就是删除），只剩拼音或者其它你熟悉的输入法～ 然后配置一下你自己的.fbtermrc，做如下设置即可： input-method=fbterm_ucimf 输入效果： PS.1: 如果不介意中文输入，也可以尝试下jfbterm这个另外的控制台终端程序，貌似也还行，就是不知道为什么我这里退出的时候程序会死掉。 PS.2:KDE 4.6的性能提升不少啊，用着很舒服，KDE加油！ PS.3: 最近工作真的是忙死了，各种求RP啊]]></description>
			<content:encoded><![CDATA[<p><a href="http://vifix.cn/blog/wp-content/uploads/2011/08/vim.png" rel="shadowbox[sbpost-2134];player=img;" title="vim"><img class="alignnone size-medium wp-image-2135" title="vim" src="http://vifix.cn/blog/wp-content/uploads/2011/08/vim-300x187.png" alt="" width="300" height="187" /></a></p>
<p><a href="http://code.google.com/p/fbterm/" target="_blank" onclick="pageTracker._trackPageview('/outgoing/code.google.com/p/fbterm/?referer=');">http://code.google.com/p/fbterm/</a></p>
<p>继续来推荐Linux下面的software，这是最近发现的好物，fbterm，可以在帧缓冲的终端控制台下提供中文显示的支持，并且也能支持输入法，比起那个已经数年没有更新的zhcon好多了（zhcon也容易导致没有响应或有奇怪的问题）。更重要的是，它的字体显示是调用freetype2的，所以能和X下面的GUI应用达到相同的字体显示效果，看着文泉驿非常舒服～</p>
<p><span id="more-2134"></span></p>
<p>中文输入法可以用来自对岸的香草输入法，在ubuntu下面（我是11.04），需要安装的包为</p>
<ul>
<li>libucimf</li>
<li>fbterm-ucimf</li>
<li>ucimf-openvanilla</li>
<li>openvanilla-modules</li>
</ul>
<p>装完openvanilla后可以去/usr/share/openvanilla/OVIMGeneric把文件移走到别的目录（其实就是删除），只剩拼音或者其它你熟悉的输入法～</p>
<p>然后配置一下你自己的.fbtermrc，做如下设置即可：</p>
<blockquote><p>input-method=fbterm_ucimf</p></blockquote>
<p>输入效果：</p>
<p><a href="http://vifix.cn/blog/wp-content/uploads/2011/08/w3m-img.png" rel="shadowbox[sbpost-2134];player=img;" title="w3m-img"><img class="alignnone size-medium wp-image-2136" title="w3m-img" src="http://vifix.cn/blog/wp-content/uploads/2011/08/w3m-img-300x187.png" alt="" width="300" height="187" /></a></p>
<p>PS.1: 如果不介意中文输入，也可以尝试下jfbterm这个另外的控制台终端程序，貌似也还行，就是不知道为什么我这里退出的时候程序会死掉。</p>
<p>PS.2:KDE 4.6的性能提升不少啊，用着很舒服，KDE加油！</p>
<p>PS.3: 最近工作真的是忙死了，各种求RP啊</p>
]]></content:encoded>
			<wfw:commentRss>http://vifix.cn/blog/fbterm.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>推荐下mintty</title>
		<link>http://vifix.cn/blog/mintty.html</link>
		<comments>http://vifix.cn/blog/mintty.html#comments</comments>
		<pubDate>Sat, 25 Jun 2011 10:10:14 +0000</pubDate>
		<dc:creator>Mac</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Cygwin]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[UNIX]]></category>

		<guid isPermaLink="false">http://vifix.cn/blog/?p=2086</guid>
		<description><![CDATA[没啥好说的，cmd.exe太挫了，找到了这个mintty用来替换之，非常不错，对于CLI一直很薄弱的windows来说已经觉得很满意了。 项目似乎是基于putty的，推荐给那些整天Unix世界（Linux/BSD/OSX）和Windows世界来回奔波的geeker们（伤不起啊有木有！！！）]]></description>
			<content:encoded><![CDATA[<p><a href="http://vifix.cn/blog/wp-content/uploads/2011/06/mintty.png" rel="shadowbox[sbpost-2086];player=img;" title="mintty"><img class="alignnone size-medium wp-image-2087" title="mintty" src="http://vifix.cn/blog/wp-content/uploads/2011/06/mintty-300x240.png" alt="" width="300" height="240" /></a></p>
<p>没啥好说的，cmd.exe太挫了，找到了这个mintty用来替换之，非常不错，对于CLI一直很薄弱的windows来说已经觉得很满意了。</p>
<p>项目似乎是基于putty的，推荐给那些整天Unix世界（Linux/BSD/OSX）和Windows世界来回奔波的geeker们（伤不起啊有木有！！！）</p>
]]></content:encoded>
			<wfw:commentRss>http://vifix.cn/blog/mintty.html/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Mac OSX 十周年</title>
		<link>http://vifix.cn/blog/mac-os-x-10th-anniversary.html</link>
		<comments>http://vifix.cn/blog/mac-os-x-10th-anniversary.html#comments</comments>
		<pubDate>Fri, 25 Mar 2011 03:32:58 +0000</pubDate>
		<dc:creator>Mac</dc:creator>
				<category><![CDATA[Undefined]]></category>
		<category><![CDATA[Apple]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[OS]]></category>
		<category><![CDATA[OSX]]></category>

		<guid isPermaLink="false">http://vifix.cn/blog/?p=1902</guid>
		<description><![CDATA[好久没来更新了（怎么感觉最近几篇的博客的第一句话都是这个…………）连续的加班，各种忙碌……好在最近忙的这个项目终于算是快到头了。 看google reader发现engadget上一条新闻是昨天（3月24日）是Mac OSX这个神奇的OS发售的十周年，于是就来感慨下。 想当年，只是初学英语，随便翻阅英文词典想找个合适的英文名，Mac这个发音简单，又和计算机有所关联的词很快引起了我的注意，于是当成了自己的英文名，一直用到了现在，还混杂在各种注册的ID之中。再后来看到了Power G3的外观和Mac Classic OS（OS9以及之前的版本）的GUI，就决定了以后一定要买一台苹果机——即使心里清楚这玩意儿可一点都不便宜，和自己一直以来的追求性价比的想法是完全不符合的……也许那个时候我就已经被乔教主洗脑了吧……再后来看到了漂亮的iBook，iMac之类的漂亮的设计，就产生了以后一定要买一个送给自己当时暗恋的姑娘的这种单纯又可爱的想法，可惜啊，现在Mac倒是已经买了，但当时的姑娘却也已经传来了订婚的消息，我却还在为脱离死死团而努力奋斗着⋯⋯ 总体而言，自己还是不能那么喜欢苹果这家公司，却不得不承认它的产品真的是非常有吸引力（喂你其实就是被洗脑了！），但总觉得有那么一点点的缺憾让你很犹豫是不是去尝试使用这个产品（比如说iPad，我觉得没有一个扩展存储这个实在是太那啥了）。另外还是很反感一些它的策略，比如说App Store的条款什么的⋯⋯ 现在上班和回家就是三个OS也就是Linux(Kubuntu)，Windows XP，Mac OSX三个换来换去，发现其实操作系统什么的对我来说真的只是快捷键，菜单布局，按钮位置，任务切换方式，软件安装方式的不同罢了（你还要多大不同啊！），用的软件却其实都是同一套，比如firefox, eclipse, openoffice.org, photoshop, mplayer, vim, ssh, bash等等等等⋯⋯甚至QQ其实也能算进去。 好吧，最后在纠结要不要加一句 &#8220;from my macbook air&#8221;之类的以示自己被乔教主洗脑成功 orz &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-无关分割线&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;- 原本想难得在vifix.cn上发表下心情，却发现最后变成了混杂了各种乱七八糟的东西的奇怪的东西，各位路过的真的见笑了 m(_._)m 标题图是前几年iphone刚出来时候的老图了，所以这几年的产品都没有出现，不知道有没有更新的版本。 话说下一次我是不是该感谢下google，感谢下linux，感谢下KDE，感谢下windows，感谢下PHP，等等⋯⋯⋯⋯]]></description>
			<content:encoded><![CDATA[<p><a href="http://vifix.cn/blog/wp-content/uploads/2011/03/apple.jpg" rel="shadowbox[sbpost-1902];player=img;" title="apple"><img class="alignnone size-medium wp-image-1903" title="apple" src="http://vifix.cn/blog/wp-content/uploads/2011/03/apple-300x210.jpg" alt="" width="300" height="210" /></a></p>
<p>好久没来更新了（怎么感觉最近几篇的博客的第一句话都是这个…………）连续的加班，各种忙碌……好在最近忙的这个项目终于算是快到头了。</p>
<p>看google reader发现engadget上一条新闻是昨天（3月24日）是Mac OSX这个神奇的OS发售的十周年，于是就来感慨下。</p>
<p><span id="more-1902"></span></p>
<p>想当年，只是初学英语，随便翻阅英文词典想找个合适的英文名，Mac这个发音简单，又和计算机有所关联的词很快引起了我的注意，于是当成了自己的英文名，一直用到了现在，还混杂在各种注册的ID之中。再后来看到了Power G3的外观和<a href="http://vifix.cn/blog/mac-os9.html">Mac Classic OS（OS9以及之前的版本）</a>的GUI，就决定了以后一定要买一台苹果机——即使心里清楚这玩意儿可一点都不便宜，和自己一直以来的追求性价比的想法是完全不符合的……也许那个时候我就已经被乔教主洗脑了吧……再后来看到了漂亮的iBook，iMac之类的漂亮的设计，就产生了以后一定要买一个送给自己当时暗恋的姑娘的这种单纯又可爱的想法，可惜啊，现在Mac倒是已经买了，但当时的姑娘却也已经传来了订婚的消息，我却还在为脱离死死团而努力奋斗着⋯⋯</p>
<p>总体而言，自己还是不能那么喜欢苹果这家公司，却不得不承认它的产品真的是非常有吸引力（喂你其实就是被洗脑了！），但总觉得有那么一点点的缺憾让你很犹豫是不是去尝试使用这个产品（比如说iPad，我觉得没有一个扩展存储这个实在是太那啥了）。另外还是很反感一些它的策略，比如说App Store的条款什么的⋯⋯</p>
<p>现在上班和回家就是三个OS也就是Linux(Kubuntu)，Windows XP，Mac OSX三个换来换去，发现其实操作系统什么的对我来说真的只是快捷键，菜单布局，按钮位置，任务切换方式，软件安装方式的不同罢了（你还要多大不同啊！），用的软件却其实都是同一套，比如firefox, eclipse, openoffice.org, photoshop, mplayer, vim, ssh, bash等等等等⋯⋯甚至QQ其实也能算进去。</p>
<p>好吧，最后在纠结要不要加一句 &#8220;from my macbook air&#8221;之类的以示自己被乔教主洗脑成功 orz</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-无关分割线&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-</p>
<p>原本想难得在vifix.cn上发表下心情，却发现最后变成了混杂了各种乱七八糟的东西的奇怪的东西，各位路过的真的见笑了 m(_._)m</p>
<p>标题图是前几年iphone刚出来时候的老图了，所以这几年的产品都没有出现，不知道有没有更新的版本。</p>
<p>话说下一次我是不是该感谢下google，感谢下linux，感谢下KDE，感谢下windows，感谢下PHP，等等⋯⋯⋯⋯</p>
]]></content:encoded>
			<wfw:commentRss>http://vifix.cn/blog/mac-os-x-10th-anniversary.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

