<?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>I&#039;m frankyue &#187; C</title>
	<atom:link href="http://frankyue.me/category/c/feed/" rel="self" type="application/rss+xml" />
	<link>http://frankyue.me</link>
	<description>VIIV 535</description>
	<lastBuildDate>Sat, 27 Mar 2010 07:11:12 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>zh</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>DDD强大的图形调试工具</title>
		<link>http://frankyue.me/2009/12/ddd-debugger/</link>
		<comments>http://frankyue.me/2009/12/ddd-debugger/#comments</comments>
		<pubDate>Sat, 12 Dec 2009 14:45:22 +0000</pubDate>
		<dc:creator>frankyue</dc:creator>
				<category><![CDATA[C]]></category>
		<category><![CDATA[开源项目]]></category>

		<guid isPermaLink="false">http://frankyue.cn/?p=309</guid>
		<description><![CDATA[一直没有写东西，主要是不知道写什么，而且没有动力，就懒得写了！不过不能浪费这个空间和域名，还是应该动动手过来!
前段时间一直在复习，每天早上6点多爬起来和别人去抢位子，这帮人起的一天比一天早，7点开始一直被迫到6点15起来。不过到也不累，累的是那书，看的头晕了快！
嘻嘻今天逃出来偷闲下跑杭图和TX一起研究技术。前几天在看代码之美的时候曾看到关于DDD的介绍，一时来了兴趣，今天花了一天的时间在那里研究DDD，虽然只是知道皮毛，但已够让我吃惊的了！这个古老的调试工具实在是太牛了，虽然最初只是一个德国研究生的毕业设计作品，只是对GDB的一个外壳包装，但是历经了将近14年的开发，它的功能已经远远超出了当初的设想!

那就先简单介绍一下这个伟大的图形界面的调试工具：
DDD最初是90年由一个德国的研究生做的一个具有GUI的GDB软件，并加入了一些其他图形调试器没有的独特功能（书上看的）。到2000年的时候，DDD开始进入了自由软件的行列也成为GNU的一份子。不过好像那时的DDD已经完全成型了，到2003年就没有怎么更新了，只是在做移植和兼容的修改。下面时它的一些历史事件。
April, 1995 ddd 0.9: First ddd beta release.
May, 1995   ddd 1.0: First public ddd release.
December, 1995  ddd 1.4: Machine-level debugging, glyphs, Emacs integration.
October, 1996  ddd 2.0: Color displays, xdb support, generic dbx support, command tool.
May, 1997   ddd 2.1: Alias detection, button tips, status displays.
November, 1997    ddd 2.2: Sessions, display shortcuts.
June, 1998 ddd 3.0: Icon tool [...]]]></description>
			<content:encoded><![CDATA[<p>一直没有写东西，主要是不知道写什么，而且没有动力，就懒得写了！不过不能浪费这个空间和域名，还是应该动动手过来!</p>
<p>前段时间一直在复习，每天早上6点多爬起来和别人去抢位子，这帮人起的一天比一天早，7点开始一直被迫到6点15起来。不过到也不累，累的是那书，看的头晕了快！</p>
<p>嘻嘻今天逃出来偷闲下跑杭图和TX一起研究技术。前几天在看代码之美的时候曾看到关于DDD的介绍，一时来了兴趣，今天花了一天的时间在那里研究DDD，虽然只是知道皮毛，但已够让我吃惊的了！这个古老的调试工具实在是太牛了，虽然最初只是一个德国研究生的毕业设计作品，只是对GDB的一个外壳包装，但是历经了将近14年的开发，它的功能已经远远超出了当初的设想!</p>
<p><span id="more-309"></span></p>
<p>那就先简单介绍一下这个伟大的图形界面的调试工具：</p>
<p>DDD最初是90年由一个德国的研究生做的一个具有GUI的GDB软件，并加入了一些其他图形调试器没有的独特功能（书上看的）。到2000年的时候，DDD开始进入了自由软件的行列也成为GNU的一份子。不过好像那时的DDD已经完全成型了，到2003年就没有怎么更新了，只是在做移植和兼容的修改。下面时它的一些历史事件。</p>
<blockquote><p>April, 1995 ddd 0.9: First ddd beta release.</p>
<p>May, 1995   ddd 1.0: First public ddd release.</p>
<p>December, 1995  ddd 1.4: Machine-level debugging, glyphs, Emacs integration.</p>
<p>October, 1996  ddd 2.0: Color displays, xdb support, generic dbx support, command tool.</p>
<p>May, 1997   ddd 2.1: Alias detection, button tips, status displays.</p>
<p>November, 1997    ddd 2.2: Sessions, display shortcuts.</p>
<p>June, 1998 ddd 3.0: Icon tool bar, Java support, jdb support.</p>
<p>December, 1998  ddd 3.1: Data plotting, Perl support, Python support, Undo/Redo.</p>
<p>January, 2000  ddd 3.2: New manual, Readline support, Ladebug support.</p>
<p>January, 2001 ddd 3.3: Data themes, JDB 1.2 support, VxWorks support.</p>
<p>November, 2002   ddd 3.3.2: Bash support.</p>
<p>March, 2003    ddd 3.3.3: Better Bash support. Compiles using modern tools thanks to Daniel Schepler.</p></blockquote>
<p>当然它拥有多数调试器的功能，但还有其他特殊的强大功能，虽然用的是tcl的图形界面，比较难看，但是今天我和TX完全被这个“丑八怪”给吸引住了，实在太强大拉。</p>
<p>首先它拥有一个session的保存和读取功能，这个功能超级的强大，你可以保存当前调试了一半的session，然后关掉，玩推特去，等你又有兴趣时，打开刚才保存的session就可以回到之前调式一半的程序！怎么样，酷吧！这完全可以帮你解决很多问题！session是一个文件，不知道能不能直接把这个文件拿到另一台电脑上用，按它的规则来讲应该是可以的，所以你可以把在家调试一半的程序拿到公司继续调试。</p>
<p>上面只是其一，你有看到可以撤销调式步骤的调试器不？你有，那算拉别看这条，我反正没用过！DDD竟然可以将撤销步骤一直撤销到你打开程序为止，这个太惊人了！按上面的日历来看这个功能是98年做上去的！帅气～～</p>
<p>数据的显示也很酷，有个专门的窗口来显示数据，可以随便拖来拖去，也可以随意修改里面的数据，非常的随意，而且最直观的是，你在调试到一半时，可以把鼠标指到某个变量上，它会自动显示当前的变量数据.哇欧 &#8230;&#8230;</p>
<p>今天最吸引人的一个功能是它的远程调试功能，我不知道其他调试器是否有这个功能，但这个足以吸引大部分人的眼球！用一个DDD的命令你可以直接远程调式某一台电脑上的指定程序，还可以直接调用对方的X来调式（manual里有这么说，今天没有尝试成功，到是了解一个强大的SSH功能，可以直接用SSH -X user@host命令来远控某电脑并在自己电脑上运行这个host的X）。调式的处理都是在远程机上进行的，本机只是获得调式结果，这样一台小小的NOTEBOOK都可以链接某机器调式大型的软件，不过应该相反，这个应该是嵌入式里用更好吧！</p>
<p>有兴趣的花去gun的官方项目主页上看看吧<a href="http://www.gnu.org/software/ddd/" target="_blank">http://www.gnu.org/software/ddd/</a></p>
<p>受这个影响我们想到了更多的邪恶应用哈哈，应该很强大！</p>
<p>对了，要对GOOGLE MAP上的数据进行投诉！今天我们俩去找工商银行，按照MAP的信息整整花了2个多小时，被忽悠了6个地址才找到工商银行，太郁闷了，这信息太旧了。MAP应该增加信息发布的时间和评论，好让我们有个选择。以后大家找银行得往大的找，如总行之类，小银行信息太不靠谱了（一度怀疑有其他银行人员在MAP上发布的假信息）。</p>
<p>呃<!--more-->，话还挺多让我写了不少哈哈 下次努力多写写！</p>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 144px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">Major ddd events:</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 144px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">April, 1995 ddd 0.9: First ddd beta release.</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 144px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">May, 1995   ddd 1.0: First public ddd release.</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 144px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">December, 1995</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 144px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">ddd 1.4: Machine-level debugging, glyphs, Emacs integration.</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 144px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">October, 1996</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 144px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">ddd 2.0: Color displays, xdb support, generic dbx support, command tool.</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 144px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">May, 1997   ddd 2.1: Alias detection, button tips, status displays.</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 144px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">November, 1997</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 144px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">ddd 2.2: Sessions, display shortcuts.</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 144px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">June, 1998 ddd 3.0: Icon tool bar, Java support, jdb support.</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 144px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">December, 1998</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 144px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">ddd 3.1: Data plotting, Perl support, Python support, Undo/Redo.</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 144px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">January, 2000</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 144px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">ddd 3.2: New manual, Readline support, Ladebug support.</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 144px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">January, 2001</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 144px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">ddd 3.3: Data themes, JDB 1.2 support, VxWorks support.</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 144px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">November, 2002</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 144px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">ddd 3.3.2: Bash support.</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 144px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">March, 2003</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 144px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">ddd 3.3.3: Better Bash support. Compiles using modern tools thanks to Daniel Schep-</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 144px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">ler.</div>
]]></content:encoded>
			<wfw:commentRss>http://frankyue.me/2009/12/ddd-debugger/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>留在这 过些时候解决</title>
		<link>http://frankyue.me/2008/11/%e7%95%99%e5%9c%a8%e8%bf%99-%e8%bf%87%e4%ba%9b%e6%97%b6%e5%80%99%e8%a7%a3%e5%86%b3/</link>
		<comments>http://frankyue.me/2008/11/%e7%95%99%e5%9c%a8%e8%bf%99-%e8%bf%87%e4%ba%9b%e6%97%b6%e5%80%99%e8%a7%a3%e5%86%b3/#comments</comments>
		<pubDate>Wed, 26 Nov 2008 13:00:45 +0000</pubDate>
		<dc:creator>frankyue</dc:creator>
				<category><![CDATA[C]]></category>
		<category><![CDATA[嵌入式]]></category>
		<category><![CDATA[待解决]]></category>

		<guid isPermaLink="false">http://frankyue.cn/?p=155</guid>
		<description><![CDATA[宏定义还不知道怎么回事，今天接触到select函数，然后碰到几个宏函数（FD_SET,FD_CLR,FD_ISSET）,下面就是他的定义 不是很懂先用了再说，放在这，提醒自己去解决
FD_SET 打开类型fd_set的某一位
FD_ZERO初始化fd_set
FD_ISSET测试结构fd_set中的描述字
#define FD_CLR(fd, set) do { \
u_int __i; \
for (__i = 0; __i &#60; ((fd_set FAR *)(set))-&#62;;fd_count ; __i++) { \
if (((fd_set FAR *)(set))-&#62;;fd_array[__i] == fd) { \
while (__i &#60; ((fd_set FAR *)(set))-&#62;;fd_count-1) { \
((fd_set FAR *)(set))-&#62;;fd_array[__i] = \
((fd_set FAR *)(set))-&#62;;fd_array[__i+1]; \
__i++; \
} \
((fd_set FAR *)(set))-&#62;;fd_count&#8211;; \
break; \
} \
} \
} while(0)
#define FD_SET(fd, set) do [...]]]></description>
			<content:encoded><![CDATA[<p>宏定义还不知道怎么回事，今天接触到select函数，然后碰到几个宏函数（FD_SET,FD_CLR,FD_ISSET）,下面就是他的定义 不是很懂先用了再说，放在这，提醒自己去解决</p>
<p><span style="color: #ff0000;">FD_SET 打开类型fd_set的某一位<br />
FD_ZERO初始化fd_set<br />
FD_ISSET测试结构fd_set中的描述字</span></p>
<p>#define FD_CLR(fd, set) do { \<br />
u_int __i; \<br />
for (__i = 0; __i &lt; ((fd_set FAR *)(set))-&gt;;fd_count ; __i++) { \<br />
if (((fd_set FAR *)(set))-&gt;;fd_array[__i] == fd) { \<br />
while (__i &lt; ((fd_set FAR *)(set))-&gt;;fd_count-1) { \<br />
((fd_set FAR *)(set))-&gt;;fd_array[__i] = \<br />
((fd_set FAR *)(set))-&gt;;fd_array[__i+1]; \<br />
__i++; \<br />
} \<br />
((fd_set FAR *)(set))-&gt;;fd_count&#8211;; \<br />
break; \<br />
} \<br />
} \<br />
} while(0)</p>
<p>#define FD_SET(fd, set) do { \<br />
u_int __i; \<br />
for (__i = 0; __i &lt; ((fd_set FAR *)(set))-&gt;;fd_count; __i++) { \<br />
if (((fd_set FAR *)(set))-&gt;;fd_array[__i] == (fd)) { \<br />
break; \<br />
} \<br />
} \<br />
if (__i == ((fd_set FAR *)(set))-&gt;;fd_count) { \<br />
if (((fd_set FAR *)(set))-&gt;;fd_count &lt; FD_SETSIZE) { \<br />
((fd_set FAR *)(set))-&gt;;fd_array[__i] = (fd); \<br />
((fd_set FAR *)(set))-&gt;;fd_count++; \<br />
} \<br />
} \<br />
} while(0)</p>
<p>#define FD_ZERO(set) (((fd_set FAR *)(set))-&gt;;fd_count=0)</p>
<p>#define FD_ISSET(fd, set) __WSAFDIsSet((SOCKET)(fd), (fd_set FAR *)(set))</p>
]]></content:encoded>
			<wfw:commentRss>http://frankyue.me/2008/11/%e7%95%99%e5%9c%a8%e8%bf%99-%e8%bf%87%e4%ba%9b%e6%97%b6%e5%80%99%e8%a7%a3%e5%86%b3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>关于checksum</title>
		<link>http://frankyue.me/2008/10/%e5%85%b3%e4%ba%8echecksum/</link>
		<comments>http://frankyue.me/2008/10/%e5%85%b3%e4%ba%8echecksum/#comments</comments>
		<pubDate>Wed, 15 Oct 2008 04:58:18 +0000</pubDate>
		<dc:creator>frankyue</dc:creator>
				<category><![CDATA[C]]></category>

		<guid isPermaLink="false">http://frankyue.cn/?p=136</guid>
		<description><![CDATA[       最近一段时间很忙没来写东西了，发下最近写的一个东西，一个UDP的CHECKSUM（校验和）。

在网络传送的数据包为了保证传送正确都含有效验字段，IP、arp、tcp等每个数据段都有自己的效验和。

       刚开始找来个现成的IP数据包的校验和，不过后来才知道UDP和IP的校验和还有差别，所有又重新来
UDP报文的头由 发送端端口(2字节)，目标端口(2字节)，UDP包长度(2字节)，校验和(2字节)4部分组成。
校验和的值由伪IP头，UDP头和UDP数据三部分的字串以16bit作单位进行相加后取反码（one’s complement ）得到。若数据长度为基数，则最后补一个字节的0。

        老师要求都用C语言写，古老的语言阿，都N年没用了，不过嵌入式的东西都用他来完成，虽然我还没接触到嵌入式的东西，用了些之前从没用过的unsigned short,取反等操作，都是接触底层的东西按照网上了解的算法得出如下：
#include
#define INDEXUDPLANG 12
void ChecksumForudp(unsigned short *str1,unsigned short *str2,int len)
{
	unsigned short	*sbuf;
	int	 i;
	unsigned int	hi=0, lo=0, hicarry, locarry;
	sbuf = (unsigned short *) str1;
	for (i = 0 ; i < len ; i [...]]]></description>
			<content:encoded><![CDATA[<p>       最近一段时间很忙没来写东西了，发下最近写的一个东西，一个UDP的CHECKSUM（校验和）。</p>
<blockquote><p>
在网络传送的数据包为了保证传送正确都含有效验字段，IP、arp、tcp等每个数据段都有自己的<a href="http://it.icxo.com/htmlnews/2004/07/20/270977.htm">效验和</a>。</p>
</blockquote>
<p>       刚开始找来个现成的IP数据包的校验和，不过后来才知道UDP和IP的校验和还有差别，所有又重新来</p>
<blockquote><p>UDP报文的头由 发送端端口(2字节)，目标端口(2字节)，UDP包长度(2字节)，校验和(2字节)4部分组成。<br />
校验和的值由伪IP头，UDP头和UDP数据三部分的字串以16bit作单位进行相加后取反码（one’s complement ）得到。若数据长度为基数，则最后补一个字节的0。</p>
</blockquote>
<p>        老师要求都用C语言写，古老的语言阿，都N年没用了，不过嵌入式的东西都用他来完成，虽然我还没接触到嵌入式的东西，用了些之前从没用过的unsigned short,取反等操作，都是接触底层的东西按照网上了解的算法得出如下：</p>
<blockquote><p>#include<stdio.h><br />
#define INDEXUDPLANG 12<br />
void ChecksumForudp(unsigned short *str1,unsigned short *str2,int len)<br />
{<br />
	unsigned short	*sbuf;<br />
	int	 i;<br />
	unsigned int	hi=0, lo=0, hicarry, locarry;</p>
<p>	sbuf = (unsigned short *) str1;</p>
<p>	for (i = 0 ; i < len ; i += 2)<br />
	{<br />
		if( i != INDEXUDPLANG )<br />
		{<br />
			if( i != len-2)<br />
			{<br />
		    	hi += sbuf[i];<br />
	    		lo += sbuf[i+1];<br />
	    	}<br />
	    	else<br />
	    	{<br />
	    		hi += sbuf[i];<br />
   				lo += sbuf[i+1];<br />
	    	}<br />
    	}<br />
 	   else<br />
 	   {<br />
	   		hi +=sbuf[i]+sbuf[i];//加两次包长<br />
	   		lo +=sbuf[i+1]+sbuf[i+1];//加两次包长<br />
    	}<br />
	}</p>
<p>	lo += 0&#215;11;						//加UDP协议值0&#215;0011</p>
<p>	hicarry = hi >> 8;				//提取进位<br />
	locarry = lo >> 8;</p>
<p>	while (hicarry || locarry)<br />
	{								//将进位循环加回<br />
	    hi = (hi &#038; 0xFF) + locarry;<br />
	    lo = (lo &#038; 0xFF) + hicarry;<br />
	    hicarry = hi >> 8;<br />
	    locarry = lo >> 8;</p>
<p>	}</p>
<p>	sbuf[INDEXUDPLANG]=		(~hi) &#038; 0xff;				//将checksum高位放入<br />
	sbuf[INDEXUDPLANG+1]=	(~lo) &#038; 0xff;				//将checksum低位放入</p>
<p>	str2 = str1;<br />
}<br />
int main()<br />
{<br />
	//unsigned short str[]= {0&#215;0a,0&#215;99,0&#215;35,0&#215;0f,0&#215;0a,0&#215;00,0&#215;00,0xac,0&#215;20,0xdb,0&#215;23,0xf1,0&#215;00,0&#215;0b,0&#215;00,0&#215;00,0&#215;18,0&#215;00,0&#215;23};<br />
	unsigned short str[]= {0&#215;0a,0&#215;99,0&#215;35,0&#215;0f,0&#215;0a,0&#215;00,0&#215;00,0xac,0&#215;20,0xdb,0&#215;23,0xf1,0&#215;00,0&#215;7b,0&#215;00,0&#215;00,0&#215;0a,0&#215;00,0&#215;21,0&#215;12<br />
	,0&#215;01,0&#215;10,0&#215;13,0&#215;58,0&#215;04,0&#215;80,0&#215;83,0xd4,0&#215;60,0&#215;04,0&#215;81,0&#215;83,0xd4,0&#215;60,0&#215;02,0&#215;82,0&#215;00,0&#215;02,0&#215;83,0&#215;05,0&#215;02,0&#215;84,0&#215;01,0&#215;80<br />
	,0&#215;80,0&#215;83,0&#215;99,0&#215;81,0xea,0xa9};<br />
	unsigned short *str1,*str2;<br />
	str1=str;<br />
	int i = 0;<br />
	ChecksumForudp(str1,str2,50);</p>
<p>	printf(&#8220;%x\n&#8221;,str1[12]);<br />
	printf(&#8220;%x\n&#8221;,str1[13]);<br />
	printf(&#8220;ANSWER IS 35B8!\n&#8221;);<br />
}
</p>
</blockquote>
<p>还有个BUG，就是UDP包最长为65535，在进行加法hi和lo是会不会超过int 长度，在得到hicarry和locarry会不会使数据丢失，总想不明白会不会，自己数学太差了！我再琢磨琢磨！</p>
<p>得去装个代码查看插件，这里发出来的格式都变了郁闷</p>
]]></content:encoded>
			<wfw:commentRss>http://frankyue.me/2008/10/%e5%85%b3%e4%ba%8echecksum/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
