<?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>Chunhao&#039;s Blog &#187; Software</title>
	<atom:link href="http://chunhao.net/blog/category/software/feed/" rel="self" type="application/rss+xml" />
	<link>http://chunhao.net/blog</link>
	<description>Life happens. Love helps.</description>
	<lastBuildDate>Fri, 28 May 2021 12:36:11 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=4.1.1</generator>
	<item>
		<title>Are Your Fingers Long Enough to Use Vim?</title>
		<link>http://chunhao.net/blog/are-your-fingers-long-enough-to-use-vim/</link>
		<comments>http://chunhao.net/blog/are-your-fingers-long-enough-to-use-vim/#comments</comments>
		<pubDate>Fri, 12 Jun 2009 12:14:27 +0000</pubDate>
		<dc:creator><![CDATA[admin]]></dc:creator>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[vim]]></category>
		<category><![CDATA[emacs]]></category>

		<guid isPermaLink="false">http://chunhao.net/blog/?p=122</guid>
		<description><![CDATA[Note: I wrote this post just for fun. Please don’t take it seriously. Thank you! Which editor are you using, Vim or Emacs? And why? Next time, when you are arguing with other people about which editor is better and trying to persuade others to use your favorite editor, just forget it. If you believe [&#8230;]]]></description>
				<content:encoded><![CDATA[<p><span style="color: #ff0000;">Note: I wrote this post just for fun. Please don’t take it seriously.</span> <span style="color: #ff0000;"> Thank you!</span> <img src="http://chunhao.net/blog/wp-includes/images/smilies/icon_smile.gif" alt=":)" class="wp-smiley" /></p>
<p>Which editor are you using, Vim or Emacs? And why?</p>
<p>Next time, when you are arguing with other people about which editor is better and trying to persuade others to use your favorite editor, just forget it. If you believe everything is in destiny, it is not an exception for the editor you choose. The choice is written on your fingers.</p>
<p>Several days ago, I learnt from <a href="http://mike.struct.cn">Mike</a> that the choice between using Vim or Emacs depends on your fingers. As he figured out, people have longer fingers prefer to use Vim, while people have shorter fingers prefer to use Emacs. It is amazing, but reasonable.</p>
<p>Using Vim, the most frequent key you hits might be the &#8220;Esc&#8221;. Vim has three modes: insert mode, command mode and visual mode. Command mode is the bridge of other two modes, and most of navigating and searching is done in command mode. So, when you are using Vim, you must: press &#8220;a&#8221; or &#8220;i&#8221; to start insert mode and input something, then press the &#8220;Esc&#8221; to enter the command mode and do navigation, then enter the insert mode again and then press the &#8220;Esc&#8221; to the command mode. Maybe some times you want to hit &#8220;v&#8221; to enter the visual mode to select something, and after that you must hit the &#8220;Esc&#8221; again back to the command mode. At most time, you are hitting the &#8220;Esc&#8221;. That&#8217;s why they call Vim &#8220;hit Esc to death&#8221;. Of course, you also need Ctrl and Shift in vim, but not so often. For example, when you select contents by line or by block, you will press &#8220;Shift+v&#8221; or &#8220;Ctrl+v&#8221;. When you want to jump to the end of a line, you will press &#8220;$&#8221;(Shift+4). But these cases are much rearer than hitting the &#8220;Esc&#8221;. So, when your fingers are long enough, you will find it very comfortable and easy to hit the &#8220;Esc&#8221;. Maybe that&#8217;s why you like to use Vim.</p>
<p>I have touched Emacs for little times. In Emacs, almost everything except for inputing text are done by &#8220;Ctrl+something&#8221;, &#8220;Shift+something&#8221;, &#8220;Alt+something&#8221;, or even &#8220;Ctrl+Alt/Shift+something&#8221;. That means at most time, one of your finger must hit &#8220;Ctrl&#8221;, &#8220;Shift&#8221; or &#8220;Alt&#8221;. That&#8217;s why they call Emacs &#8220;hit Ctrl to death&#8221;. Some Emacs fans even want to use pedals to help them hit hot keys. I have to twist my fingers to hit those keys. For some complicated combination of keys, I even don&#8217;t know how to hit them comfortably and elegantly. So I gave up Emacs soon to save my hands and fingers. Maybe people who have shorter fingers would fall in love with Emacs because they could hit these hot keys easily without twisting their fingers very much.</p>
<p>Although I prefer Vim, I don&#8217;t mean to comment Emacs and Emacs users. Emacs is also powerful, and even more powerful than Vim (at least in my mind). I admire Emacs users very much because they can learn so many hot keys by heart and use them gently and easily.</p>
<p>If you are still confusing about choosing Vim or Emacs, just check your finger. If your fingers are longer than most of your friends, then just choose Vim without hesitate and you will like the life of hitting the &#8220;Esc&#8221;. If your fingers are shorter than average and you find it&#8217;s uncomfortable to hit the &#8220;Esc&#8221; frequently, then you should definitely choose Emacs.</p>
<p>If you are still arguing with other people about Vim and Emacs, forget it, unless you want to cut some one&#8217;s finger to force them to use Emacs or lengthen some one&#8217;s finger to force them to use Vim.</p>
<p>If you are jeered by Emacs users for you are using such a disharmonious editor that has multiple confusing modes, you could respond them, &#8220;at least I have beautiful long fingers&#8221;. If you are sneered by Vim users for you are using such a complicated editor that requires a pedal to handle the hot keys, you could respond them, &#8220;at least my memory is better than you, since I could remember thousands of hot keys&#8221;.</p>
]]></content:encoded>
			<wfw:commentRss>http://chunhao.net/blog/are-your-fingers-long-enough-to-use-vim/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>Which email client are you using?</title>
		<link>http://chunhao.net/blog/which-email-client-are-you-using/</link>
		<comments>http://chunhao.net/blog/which-email-client-are-you-using/#comments</comments>
		<pubDate>Wed, 03 Jun 2009 16:59:18 +0000</pubDate>
		<dc:creator><![CDATA[admin]]></dc:creator>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[email client]]></category>
		<category><![CDATA[evolution]]></category>

		<guid isPermaLink="false">http://chunhao.net/blog/?p=110</guid>
		<description><![CDATA[What can you do for killing time? Maybe you could figure out what email clients your contacts are using. It&#8217;s funny. Most people prefer webmail, especially Gmail. Webmail is very easy to use and does not require much configuration. Gmail is the most wonderful webmail. It groups messages by threads and it has a powerful [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>What can you do for killing time? Maybe you could figure out what email clients your contacts are using. It&#8217;s funny.</p>
<p>Most people prefer webmail, especially Gmail. Webmail is very easy to use and does not require much configuration. Gmail is the most wonderful webmail. It groups messages by threads and it has a powerful searching tool. You can easily find out what you want from the mass.</p>
<p>However, one drawback of webmail is that you cannot access your mail off-line. Although Gmail started to support off-line email recently, I still think that keeping the emails in my local storage is safe and reliable. Moreover, an email client is generally much more customizable than webmail. So, I am using <a href="http://www.gnome.org/projects/evolution/">Evolution</a>, which is the most powerful and standard email client in Linux, to receive and send email everyday.</p>
<p>As said in the beginning, I want to figure out what email clients my contacts are using. This work is not hard. There might be some fields in the header of email indicating which client this email is generated. The field could be named &#8220;X-Mailer&#8221;, &#8220;X-mailer&#8221;, or &#8220;User-Agent&#8221;. In Evolution, you can open the menu &#8220;Edit&gt;Preferences&gt;Mail Preferences&gt;Headers&#8221;, and check the &#8220;Mailer&#8221;. Then you could see the Mailer information in your mails. Some mails are composed without the Mailer information. I don&#8217;t know why. We just ignore the mails without Mailer information.</p>
<p>Evolution stores mails in the folder &#8220;~/.evolution/mail/local/Inbox.sbd&#8221;. Under this folder, the files without extension are the mail files, which included all the contents of your mail. So, we can grab Mailer informations from these files.</p>
<p>First, we can use &#8220;grep&#8221; to filter the lines containing &#8220;X-Mailer&#8221;, &#8220;X-mailer&#8221;, and &#8220;User-Agent&#8221;. We can store them into a file.</p>
<blockquote><p>cat mail-box-name | grep X-Mailer &gt; outfile</p>
<p>cat mail-box-name | grep X-mailer &gt;&gt; outfile</p>
<p>cat mail-box-name | grep User-Agent &gt;&gt; outfile</p></blockquote>
<p>&#8220;mail-box-name&#8221; is the name of the mail files. Carefully name the outfile. Don&#8217;t let it overwrite the existing file. My suggestion is that you can copy all the mail files to another place and do these operations there. It&#8217;s safe.</p>
<p>Now we get the outfile containing Mailer information. The next step is removing useless information from this file, such as the header &#8220;X-Mailer&#8221; or the version information. This is the most boring part. Maybe there are some sophisticated methods which could do this work automatically, but I am lazy to think them up. For me, I use Vim and <a href="http://en.wikibooks.org/wiki/Learning_the_vi_editor/Vim/Modes">block-edit</a> the text (ctrl+v, then move cursor), and this work is done without much effort. Now we get the file like this:</p>
<blockquote><p>&#8230;<br />
Moto-EZX<br />
Moto-EZX<br />
Moto-EZX<br />
Mozilla<br />
Mozilla<br />
Mozilla<br />
Mutt<br />
Mutt<br />
&#8230;</p></blockquote>
<p>Then we should count them. Use this command:</p>
<blockquote><p>uniq -c inputfile &gt; outputfile</p></blockquote>
<p>Finally we get the file like this:</p>
<blockquote><p>&#8230;<br />
84 Evolution<br />
182 Foxmail<br />
1956 G2/1.0<br />
&#8230;</p></blockquote>
<p>Maybe we need some refinement for these data. For example, remove the very rare entries (e.g &lt; 10), and remove the entries that are obviously web server, such as &#8220;ASPMail&#8221;, &#8220;PHPMail&#8221;, etc.</p>
<p>After refinement, there we come to the OpenOffice Spreadsheet for analyzing these data. Again, we use Vim and block-editing to separate the count and client name, and paste them into  Spreadsheet individually. Then open &#8220;Insert&gt;Chart&#8221; and generate your favourite chart.</p>
<p>Following is my data, in which the size of sample is 3003 (after refinement):</p>
<p style="text-align: center;"><a href="http://chunhao.net/blog/wp-content/uploads/2009/06/data2.png"><img class="aligncenter size-full wp-image-111" title="email-client-distribution" src="http://chunhao.net/blog/wp-content/uploads/2009/06/data2.png" alt="email-client-distribution" width="528" height="264" /></a></p>
<p style="text-align: left;">From the chart we can see the most popular email client of my contacts is Gmail (G2/1.0). Following are Thunderbird and Foxmail. Then it comes Evolution, Apple Mail, SquirrelMail, Outlook and SFUwebmail.</p>
<p>Which client are you using?</p>
]]></content:encoded>
			<wfw:commentRss>http://chunhao.net/blog/which-email-client-are-you-using/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Tools for Reading Sources</title>
		<link>http://chunhao.net/blog/tools-for-reading-sources/</link>
		<comments>http://chunhao.net/blog/tools-for-reading-sources/#comments</comments>
		<pubDate>Thu, 21 May 2009 11:39:17 +0000</pubDate>
		<dc:creator><![CDATA[admin]]></dc:creator>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Doxygen]]></category>
		<category><![CDATA[LXR]]></category>
		<category><![CDATA[LXRng]]></category>
		<category><![CDATA[source code]]></category>
		<category><![CDATA[Source Navigator]]></category>

		<guid isPermaLink="false">http://chunhao.net/blog/?p=88</guid>
		<description><![CDATA[Hacking is a good method of learning. And the pre-stage of hacking is reading the source code. You might have this experience: facing a large amount of source code (generally dozens of files), you don&#8217;t know how to start, or you even don&#8217;t know how to read them. A good tool is very helpful for [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Hacking is a good method of learning. And the pre-stage of hacking is reading the source code. You might have this experience: facing a large amount of source code (generally dozens of files), you don&#8217;t know how to start, or you even don&#8217;t know how to read them. A good tool is very helpful for reading code. It can facilitate your understanding of the code and help you find out the things you want as soon as possible. I will introduce you some wonderful tools of browsing sources.</p>
<p>For me, the must-have feathers of a source browsing tool should be:</p>
<ol>
<li>Syntax highlighting</li>
<li>Friendly user interface</li>
<li>Identifier and function search</li>
</ol>
<p>If you are a Windows user, you might have heard about Source Insight, which is a non-free software. I haven&#8217;t used it, so I am not going to comment it.</p>
<p>For Linux user, the first tool I want to mention is <a href="http://sourcenav.sourceforge.net/">Source Navigator</a>. It is developed and supported by Red hat. It supports C, C++, Java, Tcl, FORTRAN and COBOL. It&#8217;s very powerful. But if you just want to browse sources, I don&#8217;t recommend you to use it. Since it GUI is developed in Tcl, an ancient programming language, the user interface is not very friendly. I bet you don&#8217;t like it.</p>
<p>Another wonderful software is <a href="http://www.doxygen.org">Doxygen</a>. Although it aims to generate documents various programming languages, including C++, C, Java, Objective-C, Python, IDL (Corba and Microsoft flavors), Fortran, VHDL, PHP, C#, and to some extent D, you can treat it as a source browsing tool. It can generate documents in HTML format. So you can read them via Firefox. If the source code is well commented following JavaDoc&#8217;s style, a beautiful documents describing classes, variables, functions could be generated. If the source code is not commented in JavaDoc&#8217;s style, the documents could also be generated, but it just have source codes, without these detailed description about classes, variables, and functions. Doxygen can also generate class-graphs, call-graphs and other similar graphs in UML style, which will help you understand the source.</p>
<p>The disadvantage of Doxygen is that its search result is somehow coarse-grained. It cannot distinguish variables from functions in search result. And it cannot differentiate definition, declaration and reference. So, if you are dealing with a huge project, you may find it uncomfortable to read source generated by Doxygen.</p>
<p>The ultimate tool, in my view, is <a href="http://sourceforge.net/projects/lxr">LXR</a>, which stand for Linux Corss Referencer. Specially, it may be the best choice for you to read Linux source code. Although, namely, LXR aim for Linux source code, it suitable for other projects written in C/C++, COBOL, Java, Perl. It is a web based tool and you can read the source code via Firefox. It uses a database to management cross references. So the search result is very accurate. And it can differentiate definition, declaration and reference.</p>
<p>LXR is famous for its difficulty on setup and configuration. And its user interface cannot be called &#8220;beautiful&#8221;. Luckily, the next generation, <a href="http://lxr.linux.no/">LXRng</a> (<a href="http://lxr.linux.no/linux">demo</a>) is available now. LXRng has a very beautiful and friendly user interface.  Moreover, setup and configuration for LXRng is much simpler than LXR. However, it seems that LXRng currently only support C language. If you need it for C++, you need a slight hack:</p>
<p>Locate to your LXRng&#8217;s installation directory, then open this file:</p>
<blockquote><p>lib/LXRng/Lang/C.pm</p></blockquote>
<p>Find the following code from this file:</p>
<pre lang="perl">sub pathexp {
    return qr/.[ch]$/;
}</pre>
<p>And change it into:</p>
<pre lang="perl">sub pathexp {
    return qr/.[ch]$|.cpp$/;
}</pre>
<p>Then LXRng should support the C++ files.</p>
<p>Doxygen and LXRng could satisfy most of your requirement. Maybe reading source from Firefox is strange and unfamiliar to you, but I think you will going to like it if you just have a try. If you have no idea about how to use them, just go to their websites, where you can find plenty of documents and toturials.</p>
]]></content:encoded>
			<wfw:commentRss>http://chunhao.net/blog/tools-for-reading-sources/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>How to synchronize with SSH</title>
		<link>http://chunhao.net/blog/how-to-synchronize-with-ssh/</link>
		<comments>http://chunhao.net/blog/how-to-synchronize-with-ssh/#comments</comments>
		<pubDate>Fri, 13 Feb 2009 06:08:26 +0000</pubDate>
		<dc:creator><![CDATA[admin]]></dc:creator>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[ssh]]></category>
		<category><![CDATA[synchronize]]></category>

		<guid isPermaLink="false">http://chunhao.net/blog/?p=52</guid>
		<description><![CDATA[I will share my experience in synchronizing files with SSH here. Following are demonstrated by synchronizing Dokuwiki. Of course, you can synchronize everything as you like. The wiki I used in my homepage is Dokuwiki. The most great feature is that it does not require database connection. It&#8217;s very convenience for personal usage. I have [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>I will share my experience in synchronizing files with SSH here. Following are demonstrated by synchronizing Dokuwiki. Of course, you can synchronize everything as you like.</p>
<p>The <a href="http://chunhao.net/wiki/">wiki</a> I used in my homepage is <a href="http://www.dokuwiki.org/">Dokuwiki</a>. The most great feature is that it does not require database connection. It&#8217;s very convenience for personal usage.</p>
<p>I have two Dokuwiki maintained. One is located in localhost, another in the webserver. I always edit the pages on localhost, and synchronize them to the webserver at times. Since Dokuwiki is totally PHP based, without database such as MySQL, I only need to synchronize some files.</p>
<p>All the changes on wiki are reflected on the folder &#8220;data&#8221; in your Dokuwiki path. So every time, I only need to synchronize this folder.</p>
<p>The best way to communicate with webserver is SSH. Fortunately, my webserver <a href="https://www.godaddy.com/">Godaddy</a> support SSH access. Another thing need to concern is synchronizer. Here I use <a href="http://www.cis.upenn.edu/~bcpierce/unison/">Unison</a>. The best description of Unison comes from it&#8217;s the author of this software:</p>
<blockquote><p>A file-synchronization tool for Unix and Windows<br />
Unison is a file-synchronization tool for Unix and Windows, written<br />
in OCaml. It allows two replicas of a collection of files and<br />
directories to be stored on different hosts (or different disks<br />
on the same host), modified separately, and then brought up to<br />
date by propagating the changes in each replica to the other.</p>
<p>Unison offers several advantages over various synchronization methods<br />
such as CVS, Coda, rsync, Intellisync, etc. Unison can run on and<br />
synchronize between Windows and many UNIX platforms. Unison requires<br />
no root privileges, system access or kernel changes to function. Unison<br />
can synchronize changes to files and directories in both directions,<br />
on the same machine, or across a network using ssh or a direct<br />
socket connection.</p>
<p>Transfers are optimised using a version of the rsync protocol,<br />
making it ideal for slower links. Unison has a clear and precise<br />
specification, and is resilient to failure due to its careful<br />
handling of the replicas and its private structures.</p></blockquote>
<p>If you are using Ubuntu machine, you can install it from the repository just by one command:</p>
<blockquote><p>sudo apt-get install unison</p></blockquote>
<p>There is also a gtk front-end for this software: unison-gtk, but I think it&#8217;s useless at most time.</p>
<p>Now, another problem comes to front&#8211;in order to synchronize files with SSH, both installations of Unison on client and server are required. However, at most time, you don&#8217;t have the permission to install software such as unison on SSH server. Here, we attack this issue by SSHFS. It allows you to mount a remote folder on your machine via SSH.</p>
<p>Everything is OK. I wrote a small script to handle the synchronization:</p>
<pre lang="bash">#!/bin/sh
sshfs -o workaround=rename username@sshserver:/path/html/wiki wiki-remote/
echo "Synchronising with sshserver"
unison /var/www/dokuwiki/data ./wiki-remote/data 
  -fastcheck yes 
  -ignore 'Path cache' 
  -ignore 'Path locks'</pre>
<p>Modify it to fit your actual environment. Note that the argument of sshfs command &#8220;-o workaround=rename&#8221;, this prevents the &#8220;<a href="http://ubuntuforums.org/showthread.php?t=553103">renaming problem</a>&#8220;.</p>
<p>All things done. Excute this script. Or, you could add an cron job to run this script automatically once per day. Have fun in synchronizing files with SSH!</p>
]]></content:encoded>
			<wfw:commentRss>http://chunhao.net/blog/how-to-synchronize-with-ssh/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Lessons Learned from Software Engineering</title>
		<link>http://chunhao.net/blog/lesson-learned-from-software-engineering/</link>
		<comments>http://chunhao.net/blog/lesson-learned-from-software-engineering/#comments</comments>
		<pubDate>Sun, 11 May 2008 13:20:53 +0000</pubDate>
		<dc:creator><![CDATA[admin]]></dc:creator>
				<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://chunhao86.cn/blog/lesson-learned-from-software-engineering</guid>
		<description><![CDATA[More than one month since U.A.T of CMPT 275 passed. We almost failed on it. But I have no time to write some experience and lessons learned from that until now, because I was busy with other things after I was back to China. Oppose with what I thought before, writing a big software is [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>More than one month since U.A.T of CMPT 275 passed. We almost failed on it. But I have no time to write some experience and lessons learned from that until now, because I was busy with other things after I was back to China.</p>
<p>Oppose with what I thought before, writing a big software is really a kinda art. The most important thing for one to write a good software is the architecture design. And the most important thing for architecture design is requirement analysis. Coding is simple and should not bother a developer so much. Because if you have some technical problem while coding, you can refer the document for the programming language you are using and solve it quickly. But if you find that your design goes all wrong, you must delete almost all your code and do it again. So, a good designer is more important than is good programmer in your team. And things are always that a good designer is a good programmer himself.</p>
<p>And a crucial thing for your team is having a leader. This is always be true in real software developing scenarios, but not as in taking courses. If you have no leader, you will definitely waste much of your time on arguing. Every one thinks that his design is the best. If you have a leader, you can easily determine which architecture you will use and which style of GUI you will draw, and so on. Meanwhile, your leader must be a experienced programmer as well as a experienced designer. He always has a brief view on how could you achieve your goal with the least overhead.</p>
<p>Another import thing is that all of your team members should under each part of your project. Such like the one do GUI must have the knowledge of database, and the one who are implementing background algorithm must know the message observer stuff. Basically they are not related with each other, but I don&#8217;t want to hear requests like this again: &#8220;can you store the hash map in database table?&#8221;.</p>
<p>Besides, all of you should use the same tools, and follow the same coding style. Coding style is very important. We failed in this because there&#8217;s no leader forced us to do so. Everybody has his own style, and the only common style for us is that each line ended with a semicolon.</p>
<p>The last thing is about user interface. Never write a dialog-based program like us, unless you are doing a cell-phone program. Dialog-based program is ugly and slow. As Rui said, the program should based on a main-frame which will not be changed often, and many functions can be accessed via menu, what is we lost. Dialog is mainly used when a &#8216;dialog&#8217; is needed, not everywhere.</p>
<p>Although I will not likely to be a industry programmer, I think it&#8217;s useful to have a good skill for software engineering, and maybe it will help me develop systems in the future.</p>
<p>Finally, I will thank my teammates here: Chris(Hopefully not misspell your name here, <img src="http://chunhao.net/blog/wp-includes/images/smilies/icon_smile.gif" alt=":)" class="wp-smiley" /> ), Meng, Ting, Ian, and Jeff!</p>
<p>After <a href="http://www.testking.net/testking-1Y0-259.htm">1Y0-259</a>, all those students who are not sure about <a href="http://www.testking.net/testking-70-536.htm">70-536</a> and <a href="http://www.testking.net/testking-1Y0-456.htm">1Y0-456</a>, should try for the qualifying exams like <a href="http://www.testking.net/testking-1z0-042.htm">1z0-042</a> or <a href="http://www.testking.net/testking-642-892.htm">642-892</a> in order to figure out their interests.</p>
]]></content:encoded>
			<wfw:commentRss>http://chunhao.net/blog/lesson-learned-from-software-engineering/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
