<?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.juliuschen.com/feed" rel="self" type="application/rss+xml" />
	<link>http://www.juliuschen.com</link>
	<description></description>
	<lastBuildDate>Mon, 17 Oct 2011 10:30:11 +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>C语言文件操作</title>
		<link>http://www.juliuschen.com/archives/22.html</link>
		<comments>http://www.juliuschen.com/archives/22.html#comments</comments>
		<pubDate>Sun, 15 Aug 2010 13:53:24 +0000</pubDate>
		<dc:creator>Julius Chen</dc:creator>
				<category><![CDATA[Files]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[C语言文件操作]]></category>
		<category><![CDATA[文件操作函数]]></category>
		<category><![CDATA[文件流]]></category>

		<guid isPermaLink="false">http://www.juliuschen.com/?p=22</guid>
		<description><![CDATA[在C语言中，对文件的操作都通过标准库中的函数或宏来进行。标准库不是C语言本身的构成部分，但是支持标准C的实现都会提供该函数库中的函数声明、类型以及宏定义。比如，与文件操作相关的函数都定义在输入输出头文件&#60;stdio.h&#62;中。 流、缓存和文件 流（stream）不是缓存，也不等于文件。流是一种逻辑的、与设备无关的操纵多种外设方式，它把数据输入输出的操作对象（如磁盘文件或是物理设备的打印机、显示器、键盘等）都抽象化为一种“流”而不管其具体结构，这样涉及到流的操作函数都可用于各种对象，提高了编程的通用性。《C程序设计语言》中说“流是与磁盘或其他外围设备关联的数据的源或目的地，打开一个流，将把该流与一个文件或设备连接起来，关闭流将断开这种连接”。从代码的实现上来看，一个流可以由一个FILE结构来描述，而FILE结构里包含了指向缓冲区的指针和文件描述符，打开一个流时它通过指向缓冲区的指针和文件描述符来和缓存与文件（或设备）关联。更多的介绍还可以看这里和这里。 文件操作函数 FILE *fopen(const char *filename, const char *mode) fopen函数打开filename指定的文件，并返回一个与之相关联的流。如果打开操作失败，则返回NULL。 int fclose(FILE *stream) fclose函数将所有未写入的数据写入stream中，丢弃缓冲区中的所有未读输入数据，并释放自动分配的全部缓冲区，最后关闭流。若出错则返回EOF，否则返回0。 int remove(const char *filename) remove函数删除filename指定的文件，这样，后续试图打开该文件的操作将失败。如果删除操作失败，则返回一个非0值。 int rename(const char *oldname, const char *newname) rename函数修改文件的名字。如果操作失败，则返回一个非0值。 int setvbuf(FILE *stream, char *buf, int mode, size_t size) void setbuf(FILE &#8230; <a href="http://www.juliuschen.com/archives/22.html">继续阅读 <span class="meta-nav">&#8594;</span></a>]]></description>
		<wfw:commentRss>http://www.juliuschen.com/archives/22.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>KMP算法</title>
		<link>http://www.juliuschen.com/archives/21.html</link>
		<comments>http://www.juliuschen.com/archives/21.html#comments</comments>
		<pubDate>Sun, 24 Jan 2010 06:27:25 +0000</pubDate>
		<dc:creator>Julius Chen</dc:creator>
				<category><![CDATA[Strings]]></category>
		<category><![CDATA[KMP算法]]></category>
		<category><![CDATA[前缀函数]]></category>
		<category><![CDATA[字符串算法]]></category>
		<category><![CDATA[有限自动机]]></category>
		<category><![CDATA[模式匹配]]></category>

		<guid isPermaLink="false">http://www.juliuschen.com/archives/21.html</guid>
		<description><![CDATA[KMP算法是字符串匹配的一种改进算法，在1977年由D. E. Knuth，J. H. Morris和V. R. Pratt一起提出，并以他们名字的首字母命名。和朴素的模式匹配算法相比，KMP算法最大的特点就是主串指针不回溯。它利用已经得到的“部分匹配”信息来减少不必要的比较而加快字符串的匹配速度。 KMP算法的本质 KMP算法本质上是实现了对自动机的模拟。它通过构造一个有限自动机来搜寻某给定的模式在正文中出现的位置。整个算法的核心就是对自动机的构建（或前缀函数的构建，KMP算法不用计算变迁函数，而是根据模式预先计算出一个辅助函数next来实现更快速的状态切换），当完成有限自动机的构建之后对主串的搜寻就显得很简单了。 前缀函数next的构建 模式的前缀函数包含有模式与其自身的位移进行匹配的信息。这些信息可用于避免在朴素的模式匹配算法中对无用位移的测试。比如主串和模式串在主串指针为Ti、模式串指针为Pj处匹配失败时，可以主串指针不回溯并直接取next函数的值next[j] = k将模式串向右滑动到第k个字符处重新开始比较，而不用去做无用位移的测试。只是这样的操作能成立k必须要满足一定的条件，如下所示： 首先，如果模式串能直接向右滑动到第k个字符处重新开始比较则说明模式串中的前k-1个字符必然已经和主串匹配了，也即必然已经有下面式子，且为了能最大化的向右移动则不能存在更大的k&#8217;满足下面式子： ： P1 P2 &#8230; Pk-1 = Ti-k+1 Ti-k+2 &#8230; Ti-1 而由已经比较所得的“部分匹配”信息可知： ： Pj-k+1 Pj-k+2 &#8230; Pj-1 = Ti-k+1 Ti-k+2 &#8230; Ti-1 因此由式子和式子我们可以推得： ： P1 P2 &#8230; &#8230; <a href="http://www.juliuschen.com/archives/21.html">继续阅读 <span class="meta-nav">&#8594;</span></a>]]></description>
		<wfw:commentRss>http://www.juliuschen.com/archives/21.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>朴素模式匹配算法</title>
		<link>http://www.juliuschen.com/archives/20.html</link>
		<comments>http://www.juliuschen.com/archives/20.html#comments</comments>
		<pubDate>Sat, 23 Jan 2010 12:41:59 +0000</pubDate>
		<dc:creator>Julius Chen</dc:creator>
				<category><![CDATA[Strings]]></category>
		<category><![CDATA[Brute-Force算法]]></category>
		<category><![CDATA[字符串算法]]></category>
		<category><![CDATA[模式匹配]]></category>

		<guid isPermaLink="false">http://www.juliuschen.com/archives/20.html</guid>
		<description><![CDATA[朴素模式匹配算法又称简单匹配算法或Brute-Force算法，它是字符串模式匹配中比较简单的一种算法。它从主串的第一个字符开始进行模式匹配，依次比较主串和模式串中的每个字符，若比较全部相等（模式匹配成功），则返回模式串中第一个字符在主串中的位置，否则主串指针从比较失败的字符处回溯到第二个字符开始重新和模式串进行匹配，这样依此下去，直到和模式串匹配成功或到主串的末尾（匹配不成功）为止。 朴素模式匹配算法的C/C++代码实现： 另外也可以参考一下C语言库函数中具有相同功能的strstr()函数的实现 朴素模式匹配算法在通常情况下其时间复杂度都近似于O(n+m)，但在最坏情况下（如极端情况：主串aaaaa &#8230; 很多个a &#8230; aaaaab，模式串aaaaab），由于主串指针需要不停的回溯，因此其时间复杂度需为O(nm)。]]></description>
		<wfw:commentRss>http://www.juliuschen.com/archives/20.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>字符串函数</title>
		<link>http://www.juliuschen.com/archives/18.html</link>
		<comments>http://www.juliuschen.com/archives/18.html#comments</comments>
		<pubDate>Sat, 16 Jan 2010 08:19:14 +0000</pubDate>
		<dc:creator>Julius Chen</dc:creator>
				<category><![CDATA[String]]></category>
		<category><![CDATA[字符串函数]]></category>

		<guid isPermaLink="false">http://www.juliuschen.com/archives/18</guid>
		<description><![CDATA[几个常见字符串处理函数]]></description>
		<wfw:commentRss>http://www.juliuschen.com/archives/18.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>基数排序</title>
		<link>http://www.juliuschen.com/archives/15.html</link>
		<comments>http://www.juliuschen.com/archives/15.html#comments</comments>
		<pubDate>Fri, 25 Dec 2009 09:54:43 +0000</pubDate>
		<dc:creator>Julius Chen</dc:creator>
				<category><![CDATA[Sorting]]></category>
		<category><![CDATA[基数排序]]></category>
		<category><![CDATA[排序算法]]></category>
		<category><![CDATA[非比较排序]]></category>

		<guid isPermaLink="false">http://www.juliuschen.com/archives/15</guid>
		<description><![CDATA[基数排序和计数排序一样，是非基于比较的排序算法，它借助“分配”和“收集”两种操作对单逻辑关键字进行排序（基于箱/桶排序），它的排序速度很快，时间复杂度为线性，但由于需要的辅助空间太大（n(radix+1)），因此长期无法应用。直到1954年有人提出用“计数”代替“分配”才得以使它能在计算机上实现。此后，又有人提出用链表作为存储数据的结构，这样又能减少一些辅助空间，这也是一种比较好的实现方法（只是算法要较复杂）。 基数排序分为MSD（最高位优先）基数排序和LSD（最低位优先）基数排序，MSD从左到右处理关键字的位数，首先处理最重要的数字。它比较符合常规的思维，所需处理的信息量也较少。但按MSD进行排序，必须将序列逐层分割成若干个子序列，然后对各子序列分别进行排序；而LSD则从右到左先处理最不重要的数字，这样虽然可能花费了一些时间来处理不会影响结果的信息，但它不用分子序列，对每个关键字都是整个序列参加排序，而且对具体的应用还可以对其进行改进。因此在很多排序应用中都选择这种方法。 基数排序（LSD/用计数排序）的C/C++代码实现： 这是以16进制方式对整数进行基数排序，若用十进制方式，则抽取关键字当中某位数字时（即a[j]>>4*i&#038;0xf处）会稍显复杂，效率也稍低。 基数排序的时间复杂度如上面所说是线性的O(n)，由于是非比较排序，所以可以突破比较排序O(n㏒n)的时间复杂度下限。因此通常来说比所有的比较排序都快。但由于计数排序的内部循环中的操作数目比快速排序或归并排序内部循环要多的多，因此这里的线性运行时间可能并不比快速排序的运行时间少很多。 基数排序还有一个问题是它的应用范围并不如比较排序应用的广泛，这主要是因为基数排序基于的关键字抽取算法没有比较排序的比较操作那么普遍。 基数排序是稳定的排序方法。]]></description>
		<wfw:commentRss>http://www.juliuschen.com/archives/15.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>计数排序</title>
		<link>http://www.juliuschen.com/archives/14.html</link>
		<comments>http://www.juliuschen.com/archives/14.html#comments</comments>
		<pubDate>Thu, 24 Dec 2009 10:34:17 +0000</pubDate>
		<dc:creator>Julius Chen</dc:creator>
				<category><![CDATA[Sorting]]></category>
		<category><![CDATA[排序算法]]></category>
		<category><![CDATA[计数排序]]></category>
		<category><![CDATA[非比较排序]]></category>

		<guid isPermaLink="false">http://www.juliuschen.com/archives/14</guid>
		<description><![CDATA[计数排序(Counting Sort)是一种非基于比较的排序方法，它要求所有的待排元素都必须是≥0的整数。它的排序步骤是首先根据数组中最大的元素值加1作为长度来定义一个计数数组C。然后统计待排数组中每个值为i的元素出现的次数，存入C的第i项中。再对所有的计数累加（从C中的第一项开始，每一项和前一项相加）。最后再反向填充辅助数组：将每个元素i放在辅助数组的第C(i)项，每放一个元素就将C(i)减去1。这样完成之后排序就已完毕，有序序列已存储在辅助数组中。如果结果想用原数组输出，则将它们从辅助数组考回到原数组即可。 计数排序的C/C++代码实现： 计数排序是稳定的排序方法，这是它很重要的特性之一，也是为什么要在这里介绍它的原因：因为后面的LSD基数排序会因为它的这个特性而用到它。 计数排序的时间复杂度是O(n)，比之前所讲的所有比较排序算法都快。但由于它的限制条件苛刻，比如所排元素必须是≥0的正整数，并且数据范围和数据元素个数不宜过大等。虽然经过改进可以对数据项较大、包含范围较小的文件进行排序，但应用范围仍然不是很大。]]></description>
		<wfw:commentRss>http://www.juliuschen.com/archives/14.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>归并排序</title>
		<link>http://www.juliuschen.com/archives/13.html</link>
		<comments>http://www.juliuschen.com/archives/13.html#comments</comments>
		<pubDate>Tue, 22 Dec 2009 10:27:11 +0000</pubDate>
		<dc:creator>Julius Chen</dc:creator>
				<category><![CDATA[Sorting]]></category>
		<category><![CDATA[归并排序]]></category>
		<category><![CDATA[排序算法]]></category>

		<guid isPermaLink="false">http://www.juliuschen.com/archives/13</guid>
		<description><![CDATA[归并排序是建立在归并操作（Merging）上的一种排序方法，它是采用分治法的一个非常典型的应用。归并是指将两个或两个以上的有序表合并成一个新的更大的有序表，归并排序则是递归的先将待排序列分割成n个序列，然后从最小的有序序列（只含一个元素）开始不断调用归并操作进行合并直到最后都合并成一个大的完整的有序表为止。 归并排序的C/C++代码实现： 归并排序的时间复杂度是O(n㏒n)，并且和输入数据无关。这点和堆排序一样，是归并排序最吸引人的特性之一（虽然这有时候也可能成为缺点，如在某些特殊的情况下（如已基本有序）连简单的排序方法运行时间也可以为线性，但归并和堆还是只能为O(n㏒n)）。 归并排序还有一个特性是它的执行过程中基本是按顺序访问数据的，这点在某些情况下会很重要。例如，链表排序中只可以按顺序访问数据，这时就可以选用归并排序。 归并排序主要的缺点就是需要与n成比例的额外内存空间。虽然可以克服这个障碍，但通常比较复杂而且花费很大，一般并不值得这么做，特别是还可以选择堆排序时。 归并排序是一种稳定的排序方法，与归并排序竞争的算法，如快速排序和堆排序，是不稳定的。虽然使这些算法也变成稳定有很多方法，但需要额外的内存空间。因此当稳定性是基本的要求时，归并排序中需要额外内存空间这个缺点就变得没那么重要了。 竞争的排序算法 如上所述，和归并排序竞争的是快速排序和堆排序。归并排序和堆排序的时间复杂度一样，它内部循环的长度在快速排序和堆排序之间，因此当运行速度很重要（去堆排序），不能有最坏的运行情况（去快速排序），又有足够的空间可以使用时，可以考虑使用归并排序。]]></description>
		<wfw:commentRss>http://www.juliuschen.com/archives/13.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>堆排序</title>
		<link>http://www.juliuschen.com/archives/12.html</link>
		<comments>http://www.juliuschen.com/archives/12.html#comments</comments>
		<pubDate>Mon, 21 Dec 2009 10:12:45 +0000</pubDate>
		<dc:creator>Julius Chen</dc:creator>
				<category><![CDATA[Sorting]]></category>
		<category><![CDATA[堆排序]]></category>
		<category><![CDATA[排序算法]]></category>
		<category><![CDATA[选择排序]]></category>

		<guid isPermaLink="false">http://www.juliuschen.com/archives/12</guid>
		<description><![CDATA[堆排序是对树形选择排序的改进，它首先将整个待排序列构建成一个堆，然后将堆顶元素与最后一个元素交换，由此得到一个有序元素和一个长度减1的堆。由于交换后新的堆顶元素可能不满足堆的定义，因此需要将新的堆重新进行堆化（堆化无需重新建堆，只需做少许调整），在堆化完成之后再次将堆顶元素与堆的最后一个元素交换，由此再得到一个新的有序元素和一个长度减1的堆。然后再重新进行堆化，再交换。。。这样一直下去，直到整个堆只有一个元素为止。这样也就完成了对序列的排序。由这个排序的过程也可以知道，堆排序和简单选择排序不同，不是从前往后慢慢有序，而是从后往前慢慢有序。 堆排序的C/C++代码实现： 堆排序的平均时间复杂度为O(n㏒n)，并且最差时间复杂度也为O(n㏒n)，而且它仅需要一个记录大小的额外存储空间。这就是说，无论输入什么，它都能保证以与n㏒n成比例的时间把n个元素排好序，没有什么最坏运行时间的输入使得排序运行明显变慢（不像快速排序），也无需巨大的额外辅助空间（不像归并排序）。这两个优点是堆排序有实用意义的两个主要原因。 此外，堆排序对于解决在n个元素中找出第k大元素（或前k个最大元素）也很有用，特别是在k比较小而n比较大的情况。在算法中，我们可以在把第k个元素从堆顶移出时停止其继续运行。 堆排序对于小文件排序时并不值得提倡，但对于较大的文件，堆排序还是很有效的。 竞争的排序算法 堆排序的主要竞争方法是快速排序和归并排序。堆排序和归并排序的选择主要归结于不稳定的排序和需要额外内存的排序之间的选择；堆排序和快速排序的选择归结于平均情况下速度和最坏情况下速度之间的选择。]]></description>
		<wfw:commentRss>http://www.juliuschen.com/archives/12.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>快速排序</title>
		<link>http://www.juliuschen.com/archives/11.html</link>
		<comments>http://www.juliuschen.com/archives/11.html#comments</comments>
		<pubDate>Sun, 20 Dec 2009 07:50:37 +0000</pubDate>
		<dc:creator>Julius Chen</dc:creator>
				<category><![CDATA[Sorting]]></category>
		<category><![CDATA[交换排序]]></category>
		<category><![CDATA[快速排序]]></category>
		<category><![CDATA[排序算法]]></category>

		<guid isPermaLink="false">http://www.juliuschen.com/archives/11</guid>
		<description><![CDATA[快速排序是应用最广泛的排序算法，也是目前认为最好的一种内部排序方法（就平均时间而言）。它采用分治（divide-and-conquer）的策略，通过一趟排序将待排记录分割成独立的两个部分，使其中的一部分记录关键字均比另一部分记录关键字小（大），然后分别对两个部分继续进行排序，以达到整个序列有序。 快速排序的C/C++代码实现： 快速排序的平均时间复杂度为O(n㏒n)，相对于希尔排序，对于大（large）的随机顺序文件，快速排序比希尔排序快将近两倍。对于巨大（huge）文件，快速排序算法的性能是则是希尔排序的5~10倍。 快速排序在空间使用上需要一个小的辅助栈。对于快速排序来说，其最好的情况是每趟排序时都将待排序列均匀地分割成长度相接近的两个子序列，这样排序栈的最大深度将不超过㏒2n+1（完全二叉树深度），且如果都先对长度短的子序列进行排序，那么栈的最大深度还可降为O(㏒n)。但如果碰到最坏的情况，比如文件已经排好序时，那么快速排序所有的划分都将退化，这不仅意味着执行时间上将为n2/2，而且栈所需要的空间也将是n。这对大文件来说是不可接受的，因为它可能使程序因为缺少内存空间而非正常结束。 快速排序对于寻找一些数字的中间数也很有用，寻找一些数字的中间数与排序有关但又不是排序的重要应用。一个解决办法就是先将这些数字排序，再找到中间数。但采用基于快速排序的寻找可以做的更好，它能使所需运行时间达到线性。具体的介绍可以参考《算法I-IV》（Robert Sedgewick著）。 快速排序的改进版本 从C. A. R. Hoare发布快速排序的那一刻起，快速排序的改进版本就不断的涌现。比如对于上面的程序，就还可以再做两点改进：1. 为了避免最坏情况的发生，在选取Pivot元素的时候，可以采用“三者取中法”（median-of-three method），即取待排序列中的最左边元素、中间元素和最右边元素，对这三个数排序，然后取它们的中间元素作为Pivot。2. 由于递归实现中程序多次因为小的子序列而调用自身，这影响程序的运行效率。因此当子序列已经很小时，可以中止递归的执行。在递归完成的最后再统一对它们采取一次插入排序。因为此时的序列已基本有序，因而插入排序效率非常高。对于中止的子序列长度的取法，通常是5~25之间的值，一个比较好的值是9（参考《计算机程序设计艺术》 Donald E. Knuth著）。通常，对这两点的改进就可以有效提高快速排序20%~25%的效率。 竞争的排序算法 快速排序的最直接竞争者是堆排序（Heap Sort）。堆排序通常比快速排序稍微慢，但是最坏情况的执行时间总是O(n㏒n)。快速排序经常比较快，但最坏情况下时间复杂度却为O(n2)。此外快速排序空间的使用O(㏒n)也要比堆排序O(1)要高。 快速排序也与归并排序（Merge Sort）竞争，这是另外一种递归排序算法，它也有最坏情况O(n㏒n)执行时间的优势，并且归并排序是稳定的排序方法。归并排序的主要缺点是在最佳情况下仍需O(n)的额外辅助空间。]]></description>
		<wfw:commentRss>http://www.juliuschen.com/archives/11.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>希尔排序</title>
		<link>http://www.juliuschen.com/archives/10.html</link>
		<comments>http://www.juliuschen.com/archives/10.html#comments</comments>
		<pubDate>Tue, 15 Dec 2009 12:37:25 +0000</pubDate>
		<dc:creator>Julius Chen</dc:creator>
				<category><![CDATA[Sorting]]></category>
		<category><![CDATA[希尔排序]]></category>
		<category><![CDATA[排序算法]]></category>
		<category><![CDATA[插入排序]]></category>

		<guid isPermaLink="false">http://www.juliuschen.com/archives/10</guid>
		<description><![CDATA[希尔排序是插入排序的扩展。希尔排序的一个特点是：子序列的构成不是简单的逐段分割，而是将相隔某个增量的记录组成一个子序列。希尔排序的一个关键是：其步长（也就是增量）的取法，通常认为步长序列中的数字互质很重要。 希尔排序的C/C++代码实现： 和直接插入排序相比，这里的shell_insert只做了两处修改： 1. 前后记录位置的增量不再是1，而是h； 2. sort_array[0]已不能再作为监视哨，而只能作为一个暂存单元，因为式子j -= h并不一定能使j值到达0。因此，这里干脆用一个temp来代替sort_array[0]做为暂存单元，而让sort_array[0]也加入排序，这样的做法也更通用。 关于h，上面程序中，步长序列取的是：1 4 13 40 121 364 1093 3280 9841&#8230;（从1开始，通过乘3加1得到下一个步长），这是由Knuth在1969年提出来的，该方法容易实现，而且即使是对中等大小的文件，效率也相对还可以。其时间复杂度最差时是O(n3/2)。 此外，也还存在效率更好的h序列，如：1 8 23 77 281 1073 4193 16577&#8230; 但这种序列通常也较难实现，而且相对于上面所用的，效率提高上很难超过20%。比如使用 1 8 23&#8230; 这组序列时，时间复杂度最差为O(n4/3)。 另外还有一些取法不好的步长序列，如：1 2 4 8 16 32 64 128 256 &#8230; <a href="http://www.juliuschen.com/archives/10.html">继续阅读 <span class="meta-nav">&#8594;</span></a>]]></description>
		<wfw:commentRss>http://www.juliuschen.com/archives/10.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

<!-- www.000webhost.com Analytics Code -->
<script type="text/javascript" src="http://analytics.hosting24.com/count.php"></script>
<noscript><a href="http://www.hosting24.com/"><img src="http://analytics.hosting24.com/count.php" alt="web hosting" /></a></noscript>
<!-- End Of Analytics Code -->

