<?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>Big fish</title>
	<atom:link href="http://log.dongsheng.org/feed" rel="self" type="application/rss+xml" />
	<link>http://log.dongsheng.org</link>
	<description></description>
	<lastBuildDate>Tue, 07 Sep 2010 09:33:32 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1-alpha</generator>
		<item>
		<title>Linux从NTP更新系统时间</title>
		<link>http://log.dongsheng.org/archives/76</link>
		<comments>http://log.dongsheng.org/archives/76#comments</comments>
		<pubDate>Tue, 07 Sep 2010 09:20:56 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[System]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[ntp]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/archives/76</guid>
		<description><![CDATA[每次改时间都忘记怎么弄，不是忘了命令就是忘了ntp服务器地址，记录一下： sudo ntpdate ntp.iinet.net.au 写入CMOS： sudo hwclock -w --localtime]]></description>
			<content:encoded><![CDATA[<p>每次改时间都忘记怎么弄，不是忘了命令就是忘了ntp服务器地址，记录一下：</p>
<pre>
sudo ntpdate ntp.iinet.net.au
</pre>
<p>写入CMOS：</p>
<pre>
sudo hwclock -w --localtime
</pre>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/archives/76/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>简单总结一下 Git 的使用</title>
		<link>http://log.dongsheng.org/archives/92</link>
		<comments>http://log.dongsheng.org/archives/92#comments</comments>
		<pubDate>Wed, 25 Aug 2010 15:14:44 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[git]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/?p=92</guid>
		<description><![CDATA[前段时间折腾Moodle的Quesion/Quiz模块，最大的难点不是开发，而是怎么跟另一个维护该模块的同事讨论，这哥们远在大不列颠，每次在tracker上留言都不得不等到第二天起床才能看到他的回复，更烦的是要review一个个patch，小点还好说，这动辄一万多行的大patch真不好一行行的解释。 然后决定把战线延伸到GitHub。对小项目来说Git相对CVS的优势不明显，徒增学习曲线，但对于Moodle这种庞大的开源软件，Git却是大大降低复杂程度，最重要的一点是创建分支的成本为零，我可以单独创建新分支以开发某特性，开发过程中可以方便的与上游代码合并，之前的cvs是无法享受这种便利的，我们不得不checkout多份拷贝进行测试。另一个很重要的特点是Git在本地保存全部改动历史，这样可以极其快捷的进行diff和blame 再说说GitHub，对于项目管理来说，GitHub肯定是不如Jira，但细化到编码这个层次，GitHub比Jira好很多，首先Jira没有官方的Git支持，无法追踪相关的Git提交，然后Jira不便于Code review（可能有好的插件会支持，说错了请指正）。GitHub在这方面做的很好，可以在git commit做inline note，代码浏览比viewvc强出一个世纪。 转到GitHub后，工作效率提高了很多，我白天把改动push到我的在GitHub的分支上，然后同事做Code review，提交改动，第二天我把他的改动合并到我的分支上，然后继续昨天的工作…… Git实际上是个新的开发模型，从编码到项目管理都不同于cvs时代。 简单总结一下Git的使用以 Moodle在GitHub的mirror为例。 打开 http://github.com/moodle/moodle，然后Fork，这个并不是必须的，之后可以通过git remote添加新的上游代码库 git clone 我自己的代码库 我不喜欢origin这个默认远程代码库名，所以重命名一下：git remote rename origin github，运行一下 git branch -r 发现远程名字变了 我之前fork的Moodle并不是官方的，换成官方的git源：git remote add upstream git://git.moodle.org/moodle.git，然后：git fetch upstream 我要创建一个我自己的分支newfeature：git branch newfeature，切换到这个分支需运行：git checkout newfeature 这个时候newfeature是个本地分支，在github上是不存在的，我得把这个分支push到github上，同事才能看到我的改动，运行：git push github，打开.git/config [branch "newfeature"] remote = github merge = refs/heads/newfeature 如果没有就加上这段，有了这段，就可以git pull直接获取并合并，有个命令可以设置git checkout &#8211;track github/newfeature，但我觉的用配置文件更直观 如果上游更新了，我就需要合并：git [...]]]></description>
			<content:encoded><![CDATA[<p>前段时间折腾Moodle的Quesion/Quiz模块，最大的难点不是开发，而是怎么跟另一个维护该模块的同事讨论，这哥们远在大不列颠，每次在tracker上留言都不得不等到第二天起床才能看到他的回复，更烦的是要review一个个patch，小点还好说，这动辄一万多行的大patch真不好一行行的解释。</p>
<p>然后决定把战线延伸到GitHub。对小项目来说Git相对CVS的优势不明显，徒增学习曲线，但对于Moodle这种庞大的开源软件，Git却是大大降低复杂程度，最重要的一点是创建分支的成本为零，我可以单独创建新分支以开发某特性，开发过程中可以方便的与上游代码合并，之前的cvs是无法享受这种便利的，我们不得不checkout多份拷贝进行测试。另一个很重要的特点是Git在本地保存全部改动历史，这样可以极其快捷的进行diff和blame <img src='http://log.dongsheng.org/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>再说说GitHub，对于项目管理来说，GitHub肯定是不如<a href="http://www.atlassian.com/software/jira/">Jira</a>，但细化到编码这个层次，GitHub比Jira好很多，首先Jira没有官方的Git支持，无法追踪相关的Git提交，然后Jira不便于Code review（可能有好的插件会支持，说错了请指正）。GitHub在这方面做的很好，可以在git commit做inline note，代码浏览比<a href="http://www.viewvc.org/">viewvc</a>强出一个世纪。</p>
<p>转到GitHub后，工作效率提高了很多，我白天把改动push到我的在GitHub的分支上，然后同事做Code review，提交改动，第二天我把他的改动合并到我的分支上，然后继续昨天的工作……</p>
<p>Git实际上是个新的开发模型，从编码到项目管理都不同于cvs时代。</p>
<p>简单总结一下Git的使用以 Moodle在GitHub的mirror为例。</p>
<ol>
<li> 打开 http://github.com/moodle/moodle，然后Fork，这个并不是必须的，之后可以通过git remote添加新的上游代码库</li>
<li> git clone 我自己的代码库</li>
<li> 我不喜欢origin这个默认远程代码库名，所以重命名一下：git remote rename origin github，运行一下 git branch -r 发现远程名字变了</li>
<li> 我之前fork的Moodle并不是官方的，换成官方的git源：git remote add upstream git://git.moodle.org/moodle.git，然后：git fetch upstream</li>
<li>  我要创建一个我自己的分支newfeature：git branch newfeature，切换到这个分支需运行：git checkout newfeature</li>
<li>这个时候newfeature是个本地分支，在github上是不存在的，我得把这个分支push到github上，同事才能看到我的改动，运行：git push github，打开.git/config
<pre>
[branch "newfeature"]
remote = github
merge = refs/heads/newfeature
</pre>
<p>如果没有就加上这段，有了这段，就可以git pull直接获取并合并，有个命令可以设置git checkout &#8211;track github/newfeature，但我觉的用配置文件更直观
</li>
<li>如果上游更新了，我就需要合并：git merge upstream/cvshead</li>
<li>删除本地分支：git branch -d newfeature，删除远程分支：git push :newfeature</li>
<li>一般的提交就不多说了，跟cvs之流一样，不同的是提交完了要git push才能把你的改动推送到远程服务器上</li>
<li>git可以比较分支，这样你可以比较你的当前分支和主干，生成一个patch提交到cvs里</li>
</ol>
<p>在 ~/.gitconfig 上下点功夫，能提高工作效率，Stack overflow上有个讨论不错：<a href="http://stackoverflow.com/questions/267761/what-does-your-gitconfig-contain">What does your ~/.gitconfig contain?</a></p>
<p>最后推荐两个软件，GitX和tig，两个都是Git浏览器，前者是Mac的，后者是终端上的，对于常用ssh的人，后者有用，有效率的多。</p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/archives/92/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>免费DNS Hosting</title>
		<link>http://log.dongsheng.org/archives/93</link>
		<comments>http://log.dongsheng.org/archives/93#comments</comments>
		<pubDate>Tue, 24 Aug 2010 03:23:18 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[System]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/?p=93</guid>
		<description><![CDATA[买了一个 com.au 的域名，登入一看，竟然连CNAME和MX记录都不能创建，非用不可的话就得买他的 web hosting 服务，然后“免费”提供。这好像去饭店吃饭不给你筷子，问他要说您必须再点一盘菜，然后我们送你一套餐具，这不就是敲诈吗？ 还好能改DNS服务器地址，心想自己搭一个Bind吧，看了下那砣另类的zone文件，改主意了，弄不好就得折腾上一天。 想起DNSPod好像是干这事的，但注册一下又是邀请码又是 VIP的，还是算了吧，找到其它两个免费DNS hosting网站分享一下： http://freedns.afraid.org/ （推荐） http://www.zoneedit.com/ 配置很简单，在你域名供应商的网站里把DNS服务器改成新的DNS服务器地址，然后再做域名记录添改即可。]]></description>
			<content:encoded><![CDATA[<p>买了一个 com.au 的域名，登入一看，竟然连CNAME和MX记录都不能创建，非用不可的话就得买他的 web hosting 服务，然后“免费”提供。这好像去饭店吃饭不给你筷子，问他要说您必须再点一盘菜，然后我们送你一套餐具，这不就是敲诈吗？</p>
<p>还好能改DNS服务器地址，心想自己搭一个Bind吧，看了下那砣另类的zone文件，改主意了，弄不好就得折腾上一天。</p>
<p>想起DNSPod好像是干这事的，但注册一下又是邀请码又是<br />
VIP的，还是算了吧，找到其它两个免费DNS hosting网站分享一下：<br />
http://freedns.afraid.org/ （推荐）</p>
<p>http://www.zoneedit.com/</p>
<p>配置很简单，在你域名供应商的网站里把DNS服务器改成新的DNS服务器地址，然后再做域名记录添改即可。</p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/archives/93/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>用bash批量重命名</title>
		<link>http://log.dongsheng.org/archives/75</link>
		<comments>http://log.dongsheng.org/archives/75#comments</comments>
		<pubDate>Fri, 02 Jul 2010 09:33:25 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[System]]></category>
		<category><![CDATA[bash]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/archives/75</guid>
		<description><![CDATA[某人让我把某系统插件的主文件名由repository.class.php改成lib.php（真闲的蛋痛），一个个改也行，但之后还可能让我干把icon.png改成pix/icon.png之类的事，所以弄个脚本吧： for i in ./*/repository.class.php; do newpath=`echo $i&#124;sed 's/repository.class.php/lib.php/g'`; mv $i $newpath; done 单行： for i in ./*/repository.class.php; do newpath=`echo $i&#124;sed 's/repository.class.php/lib.php/g'`; mv $i $newpath; done 不知道还有没有更好的办法？欢迎指教。 Reference: RENAME MULTIPLE FILES IN BASH USING REGULAR EXPRESSIONS]]></description>
			<content:encoded><![CDATA[<p>某人让我把某系统插件的主文件名由repository.class.php改成lib.php（真闲的蛋痛），一个个改也行，但之后还可能让我干把icon.png改成pix/icon.png之类的事，所以弄个脚本吧：</p>
<pre>
for i in ./*/repository.class.php;
do
    newpath=`echo $i|sed 's/repository.class.php/lib.php/g'`;
    mv $i $newpath;
done
</pre>
<p>单行：</p>
<pre>
for i in ./*/repository.class.php; do newpath=`echo $i|sed 's/repository.class.php/lib.php/g'`; mv $i $newpath; done
</pre>
<p>不知道还有没有更好的办法？欢迎指教。</p>
<p>Reference: <a href="http://snipplr.com/view/2736/rename-multiple-files-in-bash-using-regular-expressions/">RENAME MULTIPLE FILES IN BASH USING REGULAR EXPRESSIONS</a> </p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/archives/75/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Putty的UTF-8问题</title>
		<link>http://log.dongsheng.org/archives/74</link>
		<comments>http://log.dongsheng.org/archives/74#comments</comments>
		<pubDate>Sun, 27 Jun 2010 11:00:00 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[System]]></category>
		<category><![CDATA[putty]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/archives/74</guid>
		<description><![CDATA[Putty有个非常恼人的UTF8问题，比如你用wget下载文件，包括文件名的双引号是显示成乱码的（奇怪这双引号是全角的），有个Trick可以修复这个问题，在.bashrc里加上 echo -ne '\e%G\e[?47h\e%G\e[?47l' 参考：9300i Putty UTF-8 Trick]]></description>
			<content:encoded><![CDATA[<p>Putty有个非常恼人的UTF8问题，比如你用wget下载文件，包括文件名的双引号是显示成乱码的（奇怪这双引号是全角的），有个Trick可以修复这个问题，在.bashrc里加上</p>
<pre>
echo -ne '\e%G\e[?47h\e%G\e[?47l'
</pre>
<p>参考：<a href="http://www.earth.li/~huggie/blog/tech/mobile/putty-utf-8-trick.html">9300i Putty UTF-8 Trick</a></p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/archives/74/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>陆克文下台了</title>
		<link>http://log.dongsheng.org/archives/82</link>
		<comments>http://log.dongsheng.org/archives/82#comments</comments>
		<pubDate>Thu, 24 Jun 2010 04:00:20 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[Life]]></category>
		<category><![CDATA[australia]]></category>
		<category><![CDATA[rudd]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/?p=82</guid>
		<description><![CDATA[党的发炎人总是教育我们，“不能干涉他国内政“，但我只议论议论应该是无妨吧？ 老陆今天下台了，某党自己内部内讧，党魁换成了史上首个女总理（虽然有人不同意，因为不是选出来的）。搞到现在这步，跟大闹移民政策没关系，说实在的，这政策大多数人根本不关心，留学生市场萎缩又能怎样？也不是对澳洲经济伤筋动骨的损失，受损失最大的也仅仅是开私校的而已，真正的大财主/某党代表的普通工人阶级根本不关心。最主要还是征收资源暴利税，加上船民/环保/医疗改革等等政策执行不力，近几个月，陆克文支持率暴跌，眼看着就要大选了……资源税该不该收？我觉得该（不懂经济政治，无责任评论）：资源不可再生就不说了，大家都懂。另外，这些矿业公司都不是纯澳资，政府用这种方式强行入股，也算是为了国家利益的考虑了。再一个，这个国家的经济支柱是矿业，资本都投矿业上了，导致其它行业都萎缩掉了，等资源采光了该怎么办？ 只是始终想不通的是为什么老陆要这么坚决的执行暴利税，坚决到连总理宝座都拱手让人。刚看他离职的发言，觉得他也挺可怜的。 前段时间twitter上有个女人喷，某党就是好啊就是好，因为它跟穷人站在一起的，x党不好，x党是代表富人的……有想法是好事，太自以为是就不好了。这就像你爸妈当然是向着你了，一直惯你宠你，你过的貌似舒坦，但最后离了你爸妈，你就什么也不是了。这里是类似道理，某党宣称移民政策过松导致失业率太高人口激增，所以得改。大爷们怎么不去调查一下，移民都干的什么活？失业的又是怎样的人？通过降低竞争提高一般民众的竞争力，这不跟惯孩子差不多的道理？最后的结果就是穷人还是穷，还造成劳动力成本高居不下，做事效率低。总之，富不富起来，跟谁执政无关，这是个人努力和机遇的问题。还有虽然某些组织纲领是为人民服务，但其实人家只是说着玩玩，您可千万别当真了。 我高中班主任常说一句话“这世界总不能令人满意”，说得太多，慢慢成了坊间流传的笑谈，今天把这话送给老陆，送给不幸坠机的矿产大亨和生活在水深火热中的劳动人民。]]></description>
			<content:encoded><![CDATA[<p>党的发炎人总是教育我们，“不能干涉他国内政“，但我只议论议论应该是无妨吧？</p>
<p>老陆今天下台了，某党自己内部内讧，党魁换成了史上首个女总理（虽然有人不同意，因为不是选出来的）。搞到现在这步，跟大闹移民政策没关系，说实在的，这政策大多数人根本不关心，留学生市场萎缩又能怎样？也不是对澳洲经济伤筋动骨的损失，受损失最大的也仅仅是开私校的而已，真正的大财主/某党代表的普通工人阶级根本不关心。最主要还是征收资源暴利税，加上船民/环保/医疗改革等等政策执行不力，近几个月，陆克文支持率暴跌，眼看着就要大选了……资源税该不该收？我觉得该（不懂经济政治，无责任评论）：资源不可再生就不说了，大家都懂。另外，这些矿业公司都不是纯澳资，政府用这种方式强行入股，也算是为了国家利益的考虑了。再一个，这个国家的经济支柱是矿业，资本都投矿业上了，导致其它行业都萎缩掉了，等资源采光了该怎么办？</p>
<p>只是始终想不通的是为什么老陆要这么坚决的执行暴利税，坚决到连总理宝座都拱手让人。刚看他离职的发言，觉得他也挺可怜的。</p>
<p>前段时间twitter上有个女人喷，某党就是好啊就是好，因为它跟穷人站在一起的，x党不好，x党是代表富人的……有想法是好事，太自以为是就不好了。这就像你爸妈当然是向着你了，一直惯你宠你，你过的貌似舒坦，但最后离了你爸妈，你就什么也不是了。这里是类似道理，某党宣称移民政策过松导致失业率太高人口激增，所以得改。大爷们怎么不去调查一下，移民都干的什么活？失业的又是怎样的人？通过降低竞争提高一般民众的竞争力，这不跟惯孩子差不多的道理？最后的结果就是穷人还是穷，还造成劳动力成本高居不下，做事效率低。总之，富不富起来，跟谁执政无关，这是个人努力和机遇的问题。还有虽然某些组织纲领是为人民服务，但其实人家只是说着玩玩，您可千万别当真了。</p>
<p>我高中班主任常说一句话“这世界总不能令人满意”，说得太多，慢慢成了坊间流传的笑谈，今天把这话送给老陆，送给不幸坠机的矿产大亨和生活在水深火热中的劳动人民。</p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/archives/82/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WordPress 3</title>
		<link>http://log.dongsheng.org/archives/73</link>
		<comments>http://log.dongsheng.org/archives/73#comments</comments>
		<pubDate>Fri, 18 Jun 2010 09:00:30 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/archives/73</guid>
		<description><![CDATA[WordPress的SVN更新够快的，3.0刚刚发布，TRUNK的版本号就变成了3.1-ALPHA]]></description>
			<content:encoded><![CDATA[<p>WordPress的SVN更新够快的，3.0刚刚发布，TRUNK的版本号就变成了3.1-ALPHA</p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/archives/73/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Busybox for android</title>
		<link>http://log.dongsheng.org/archives/56</link>
		<comments>http://log.dongsheng.org/archives/56#comments</comments>
		<pubDate>Thu, 15 Apr 2010 08:30:51 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[Gadget]]></category>
		<category><![CDATA[System]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[busybox]]></category>
		<category><![CDATA[Forensics]]></category>
		<category><![CDATA[linux]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/archives/56</guid>
		<description><![CDATA[前几天有个朋友问我怎么搞Android Forensics，说了半天我也不明白Forensics是干什么，然后他拿出作业，其实很简单，就是从Android的文件系统里面拷贝出通话记录/联系人记录 etc，ssh进去不就得了，我马上说，iPhone思维惯式很严重……不知道Android能不能越狱，在adb shell进去的那个shell里找不到ssh相关的东西，毕竟是个极精简的Linux，据说现在还跟Linux分道扬镳了。 然后找到了Busybox，这个东西以前登录路由器的时候常见到，总以为是个嵌入式Linux发行版，其实是一坨打包的GNU工具集，比如想用tar： /bin/busybox tar cjvf archive.tar.bz2 folder 参数可能少一点，但少的那些也很少用到。 有了这个东西就好办了，找到一个预编译的Busybox for Android，就不用自己交叉编译了，然后用adb push到模拟器里，打开adb shell，假设Busybox装到了/data/busybox，就可以用/data/busybox tar把/system和/data打包，存到/sdcard，这样隐私文件都保存到一个img镜像文件里了，在Linux上用mount -o loop加载，Android的文件系统就一览无遗啦。 简单看了以下，Android的用户数据都是存成了SQLite文件，比如联系人是存在/data/data/com.google.android.providers.contacts/databases/contacts.db，Firefox用SQLite Manager就能打开，用户信息一览无余。]]></description>
			<content:encoded><![CDATA[<p>前几天有个朋友问我怎么搞Android Forensics，说了半天我也不明白Forensics是干什么，然后他拿出作业，其实很简单，就是从Android的文件系统里面拷贝出通话记录/联系人记录 etc，ssh进去不就得了，我马上说，iPhone思维惯式很严重……不知道Android能不能越狱，在adb shell进去的那个shell里找不到ssh相关的东西，毕竟是个极精简的Linux，据说现在还<a href="http://www.kroah.com/log/linux/android-kernel-problems.html">跟Linux分道扬镳了</a>。</p>
<p>然后找到了<a href="http://www.busybox.net/about.html">Busybox</a>，这个东西以前登录路由器的时候常见到，总以为是个嵌入式Linux发行版，其实是一坨打包的GNU工具集，比如想用tar：</p>
<pre>
/bin/busybox tar cjvf archive.tar.bz2 folder
</pre>
<p>参数可能少一点，但少的那些也很少用到。</p>
<p>有了这个东西就好办了，找到一个预编译的<a href="http://benno.id.au/blog/2007/11/14/android-busybox">Busybox for Android</a>，就不用自己交叉编译了，然后用adb push到模拟器里，打开adb shell，假设Busybox装到了/data/busybox，就可以用/data/busybox tar把/system和/data打包，存到/sdcard，这样隐私文件都保存到一个img镜像文件里了，在Linux上用mount -o loop加载，Android的文件系统就一览无遗啦。</p>
<p>简单看了以下，Android的用户数据都是存成了SQLite文件，比如联系人是存在/data/data/com.google.android.providers.contacts/databases/contacts.db，Firefox用<a href="https://addons.mozilla.org/en-US/firefox/addon/5817">SQLite Manager</a>就能打开，用户信息一览无余。</p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/archives/56/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>XMPP客户端</title>
		<link>http://log.dongsheng.org/archives/85</link>
		<comments>http://log.dongsheng.org/archives/85#comments</comments>
		<pubDate>Fri, 09 Apr 2010 05:29:28 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[System]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[jabber]]></category>
		<category><![CDATA[xmpp]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/archives/85</guid>
		<description><![CDATA[平日工作是用Jabber跟同事联系，有人笑说，xmpp其实就是开发了一个复杂难懂的IRC协议，功能貌似多了，但我们就是用它当聊天室，Jabber最大的好处就是开放所以在各种平台上都能找到相当不错的客户端软件。 Miranda IM Windows上最好的客户端，没有之一，很喜欢GTalk的界面，可惜它不是标准XMPP客户端，不能进聊天室。 Pidgin 各种平台通吃，没什么缺点，就是群聊的时候不能设置昵称显示格式，某些的昵称很长很长，影响阅读。胜在有大量有用的扩展，比如自动纠错，关键字高亮提醒，别的软件不是缺这就是缺那，Pidgin是唯一集大成的。 Gajim PyGTK写的，很简洁，问题是它的用户列表设计的比较失败，用户组缩进感觉乱七八糟的。 Psi Qt写的，跨平台，非常非常简单，连个群聊书签功能都没有，但也不是说干不了，得打开xmpp console自己输指令，它的显示界面是我最喜欢的，简单清晰，没有多余的东西，缺点是无法用tab组织聊天窗口。 iChat 我最喜欢的，不过只能在苹果上用，装上个chax可以锦上添花。 Empathy 因为Pidgin开发太慢等等问题，Gnome自己弄了一个Empathy，第一次用是在Ubuntu 10.4上，优化的很漂亮，就是没Pidgin那么多功能。]]></description>
			<content:encoded><![CDATA[<p>平日工作是用Jabber跟同事联系，有人笑说，xmpp其实就是开发了一个复杂难懂的IRC协议，功能貌似多了，但我们就是用它当聊天室，Jabber最大的好处就是开放所以在各种平台上都能找到相当不错的客户端软件。</p>
<p><a href="http://www.miranda-im.org/">Miranda IM</a><br />
Windows上最好的客户端，没有之一，很喜欢GTalk的界面，可惜它不是标准XMPP客户端，不能进聊天室。</p>
<p><a href="http://www.pidgin.im/">Pidgin</a><br />
各种平台通吃，没什么缺点，就是群聊的时候不能设置昵称显示格式，某些的昵称很长很长，影响阅读。胜在有大量有用的扩展，比如自动纠错，关键字高亮提醒，别的软件不是缺这就是缺那，Pidgin是唯一集大成的。</p>
<p><a href="http://www.gajim.org/">Gajim</a><br />
PyGTK写的，很简洁，问题是它的用户列表设计的比较失败，用户组缩进感觉乱七八糟的。</p>
<p><a href="http://psi-im.org/">Psi</a><br />
Qt写的，跨平台，非常非常简单，连个群聊书签功能都没有，但也不是说干不了，得打开xmpp console自己输指令，它的显示界面是我最喜欢的，简单清晰，没有多余的东西，缺点是无法用tab组织聊天窗口。</p>
<p><a href="http://www.apple.com/macosx/what-is-macosx/ichat.html">iChat</a><br />
我最喜欢的，不过只能在苹果上用，装上个<a href="http://www.ksuther.com/chax/">chax</a>可以锦上添花。</p>
<p><a href="http://live.gnome.org/Empathy">Empathy</a><br />
因为Pidgin开发太慢等等问题，Gnome自己弄了一个Empathy，第一次用是在Ubuntu 10.4上，优化的很漂亮，就是没Pidgin那么多功能。</p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/archives/85/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>PHP成员函数中竟然也能用static声明变量</title>
		<link>http://log.dongsheng.org/archives/84</link>
		<comments>http://log.dongsheng.org/archives/84#comments</comments>
		<pubDate>Wed, 07 Apr 2010 02:08:57 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/?p=84</guid>
		<description><![CDATA[又发现一个PHP Feature，PHP成员函数中竟然也能用static声明变量。怎么想怎么奇怪，你都创建新实例了，怎么static还是有效？不过有时候还蛮有用的。 class static_var { function __construct($name) { $this->name = $name; } function output() { static $counter; $counter++; echo $counter.'&#124;'.$this->name.'&#124;'; } } $t1 = new static_var('take 1'); $t1->output(); $t2 = new static_var('take 2'); $t2->output();]]></description>
			<content:encoded><![CDATA[<p>又发现一个PHP Feature，PHP成员函数中竟然也能用static声明变量。怎么想怎么奇怪，你都创建新实例了，怎么static还是有效？不过有时候还蛮有用的。</p>
<pre>
class static_var {
    function __construct($name) {
        $this->name = $name;
    }
    function output() {
        static $counter;
        $counter++;
        echo $counter.'|'.$this->name.'|';
    }
}
$t1 = new static_var('take 1');
$t1->output();
$t2 = new static_var('take 2');
$t2->output();
</pre>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/archives/84/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>把车卖了</title>
		<link>http://log.dongsheng.org/archives/80</link>
		<comments>http://log.dongsheng.org/archives/80#comments</comments>
		<pubDate>Sat, 03 Apr 2010 17:00:40 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[Life]]></category>
		<category><![CDATA[carsale]]></category>
		<category><![CDATA[vehicle]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/archives/80</guid>
		<description><![CDATA[托三月二十二号大冰雹的福，这周五终于把我的第一辆车卖掉了，买家是个刚拿到保险公司赔款的女士，试了两次车，连价都不讲就买下了车，一方面有保险公司赔钱，另一方面如果她再办保险，申请赔付的金额也高，所以干脆就不讲价。我也挺赚，卖出价只比我买入价低500块，按照每年的折旧率，算是个不错的价格了。当初买车的时候不懂，还花钱办了一个dealer的有限质保，事实证明这个完全没用，几乎可以说是dealer骗钱的利器，还好我不厌其烦的磨回一半，算算还不亏多少。 卖车其实很简单，到license center拿一张transfer form（免费），还得要一张包含车基本信息的Vehicle license paper（很黑，打印这张纸要$8），然后和买家添添表核对一下信息就行了。支付最好是用支票，那个买车的女士没听明白我的话，最后给的我现金 -_-，不得不跑了趟银行存钱，好久没见过真钱了。没了车还是很麻烦的，四天的假期都没法出去玩了，购物/吃东西都有问题。不过也少了很多麻烦，不用关心油价/找停车位/保养。 之前一直打算卖了这车然后换辆新车，但看到二手车这么保值有点犹豫了，新车买了是100%没法原价卖出的，买个好的二手车开起来也很爽，运气好了还能原价卖出去，相当于白开了几年。另一方面，不想在汽车上投资太多，还是攒钱买房最保值。 Anyway，先过几天没车的生活吧，不知道我能坚持多久]]></description>
			<content:encoded><![CDATA[<p>托三月二十二号大冰雹的福，这周五终于把我的第一辆车卖掉了，买家是个刚拿到保险公司赔款的女士，试了两次车，连价都不讲就买下了车，一方面有保险公司赔钱，另一方面如果她再办保险，申请赔付的金额也高，所以干脆就不讲价。我也挺赚，卖出价只比我买入价低500块，按照每年的折旧率，算是个不错的价格了。当初买车的时候不懂，还花钱办了一个dealer的有限质保，事实证明这个完全没用，几乎可以说是dealer骗钱的利器，还好我不厌其烦的磨回一半，算算还不亏多少。</p>
<p>卖车其实很简单，到license center拿一张transfer form（免费），还得要一张包含车基本信息的Vehicle license paper（很黑，打印这张纸要$8），然后和买家添添表核对一下信息就行了。支付最好是用支票，那个买车的女士没听明白我的话，最后给的我现金 -_-，不得不跑了趟银行存钱，好久没见过真钱了。没了车还是很麻烦的，四天的假期都没法出去玩了，购物/吃东西都有问题。不过也少了很多麻烦，不用关心油价/找停车位/保养。</p>
<p>之前一直打算卖了这车然后换辆新车，但看到二手车这么保值有点犹豫了，新车买了是100%没法原价卖出的，买个好的二手车开起来也很爽，运气好了还能原价卖出去，相当于白开了几年。另一方面，不想在汽车上投资太多，还是攒钱买房最保值。</p>
<p>Anyway，先过几天没车的生活吧，不知道我能坚持多久 <img src='http://log.dongsheng.org/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/archives/80/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>山寨 CGVG</title>
		<link>http://log.dongsheng.org/archives/81</link>
		<comments>http://log.dongsheng.org/archives/81#comments</comments>
		<pubDate>Sun, 28 Mar 2010 04:32:07 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[System]]></category>
		<category><![CDATA[awk]]></category>
		<category><![CDATA[cgvg]]></category>
		<category><![CDATA[grep]]></category>
		<category><![CDATA[mac]]></category>
		<category><![CDATA[search]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/?p=81</guid>
		<description><![CDATA[CGVG是08年时同事推荐我的搜索工具，查找速度很快，分为cg和vg两个命令，cg查找关键字，vg可以快速打开cg的搜索结果（通过搜索结果里的序号）。 这个东西完全可以装在Mac上，但macport里却没有，我不想在系统里装一堆没法控制的文件，所以就用BASH函数山寨了一个，最基本的： cg (){ grep $1 -rn . } 这个完全没问题，就是生成的格式难看了了点，所以又用awk完善了一下： cg () { grep "$1" -rn . &#124; awk 'BEGIN {FS=":"};{print "\033[1;31mPath:\033[0;0m "$1 " \033[0;31m" $2 "\033[0;0m\n=> " $3}' } 其实完全可以用awk加上trim和关键字高亮的效果，但把这个脚本变得太长就失去我本意了。]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.uzix.net/cgvg.html">CGVG</a>是08年时同事推荐我的搜索工具，查找速度很快，分为cg和vg两个命令，cg查找关键字，vg可以快速打开cg的搜索结果（通过搜索结果里的序号）。</p>
<p>这个东西完全可以装在Mac上，但macport里却没有，我不想在系统里装一堆没法控制的文件，所以就用BASH函数山寨了一个，最基本的：</p>
<pre>
cg (){
    grep $1 -rn .
}
</pre>
<p>这个完全没问题，就是生成的格式难看了了点，所以又用awk完善了一下：</p>
<pre>
cg () {
    grep "$1" -rn . | awk 'BEGIN {FS=":"};{print "\033[1;31mPath:\033[0;0m "$1     " \033[0;31m"  $2 "\033[0;0m\n=> " $3}'
}
</pre>
<p>其实完全可以用awk加上trim和关键字高亮的效果，但把这个脚本变得太长就失去我本意了。</p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/archives/81/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>微软 Dynamics AX</title>
		<link>http://log.dongsheng.org/archives/79</link>
		<comments>http://log.dongsheng.org/archives/79#comments</comments>
		<pubDate>Fri, 19 Mar 2010 16:04:08 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[System]]></category>
		<category><![CDATA[dynmics]]></category>
		<category><![CDATA[microsoft]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/archives/79</guid>
		<description><![CDATA[整整熬了五天夜，我终于成功的安装了 Microsoft Dynamics AX 2009(帮别人装的，我对ERP是一点兴趣也没有)。 这之前我干过的很折腾的事是给诺基亚刷机配机器和手动挡安装Gentoo Linux。前者让我恶心透了诺基亚，后者虽然折腾但学到不少东西。而折腾微软的ERP，痛苦且毫无乐趣可言，且不论这个产品怎样，我只说微软的服务器解决方案真是垃圾中的战斗机。 并非是对微软的偏见，年轻时候确实讨厌微软，主要是因为自己愤青，慢慢的也想明白了，作为一个 OS，Windows 还不算太差，微软公司也算是个值得尊敬的企业，我还始终留着个装XP的电脑，玩玩游戏、上QQ、开网银、跑电驴……干这些事，Windows 比 Linux、Mac 强得多了。有人说微软搞垄断把产品价格弄的很高，那就大错特错了，其实微软现在已经够开放了，还把某些入门级产品免费提供给学生，见：http://dreamspark.com，不是开玩笑的，Windows 2008，2003，VS 2010 Ultimate都是正版免费，获取正版序列号的唯一要求就是你有个大学的edu邮箱。 好话说差不多了，言归正传。微软服务器方案相当的臃肿和难用。最搞笑的是，微软推销自己服务器的卖点竟然是易用！有个人人都熟悉的界面可以戳戳点点可不能与易用划等号！ 装这个系统的原因本身就是一个悲剧，因为某大学使用微软的活动目录技术，要通过 VPN 连到学校里访问 Dynamics 服务器，这当然要走防火墙了，但据老师说这个活动目录和防火墙相处的不太和谐，莫名其妙的挡下了 Dynamics 客户端和服务器的通信，老师让我从4.0降级到3.0，还是无法正常连接。邮件来来往往二十余封，依然原地踏步走。 我想这有何难，我在虚拟机里装个 Dynamics 服务器不就行了，谁知这是灾难的开始。 到 DreamSpark 下载了 SQL Server Express (好像就是2008的简化版）Windows 2003和久违的 Virtual PC。在 Virtual PC 中装上 win2003 以后，发现严重的拖影，基本无法正常使用（已经安装了VPC的客户端驱动），于是就在 VMware server 上重新再来，这次没问题了，插上老师给我的 Dynamics 安装盘，启动，然后告诉我必须在一个有域控制器的网络里才能使用，就是说要运行这玩意还得配上活动目录，那就装吧，Easy，2003点几下就给我弄好了 DNS，DHCP 和活动目录，到这里是实实在在的比 Linux 容易，烦人的就是得重启。然后开始装 SQL Server，安装程序开始吵着嚷着让我装 Windows installer [...]]]></description>
			<content:encoded><![CDATA[<p>整整熬了五天夜，我终于成功的安装了 Microsoft Dynamics AX 2009(帮别人装的，我对ERP是一点兴趣也没有)。</p>
<p>这之前我干过的很折腾的事是给诺基亚刷机配机器和手动挡安装Gentoo Linux。前者让我恶心透了诺基亚，后者虽然折腾但学到不少东西。而折腾微软的ERP，痛苦且毫无乐趣可言，且不论这个产品怎样，我只说微软的服务器解决方案真是垃圾中的战斗机。</p>
<p>并非是对微软的偏见，年轻时候确实讨厌微软，主要是因为自己愤青，慢慢的也想明白了，作为一个 OS，Windows 还不算太差，微软公司也算是个值得尊敬的企业，我还始终留着个装XP的电脑，玩玩游戏、上QQ、开网银、跑电驴……干这些事，Windows 比 Linux、Mac 强得多了。有人说微软搞垄断把产品价格弄的很高，那就大错特错了，其实微软现在已经够开放了，还把某些入门级产品免费提供给学生，见：http://dreamspark.com，不是开玩笑的，Windows 2008，2003，VS 2010 Ultimate都是正版免费，获取正版序列号的唯一要求就是你有个大学的edu邮箱。</p>
<p>好话说差不多了，言归正传。微软服务器方案相当的臃肿和难用。最搞笑的是，微软推销自己服务器的卖点竟然是易用！有个人人都熟悉的界面可以戳戳点点可不能与易用划等号！</p>
<p>装这个系统的原因本身就是一个悲剧，因为某大学使用微软的活动目录技术，要通过 VPN 连到学校里访问 Dynamics 服务器，这当然要走防火墙了，但据老师说这个活动目录和防火墙相处的不太和谐，莫名其妙的挡下了 Dynamics 客户端和服务器的通信，老师让我从4.0降级到3.0，还是无法正常连接。邮件来来往往二十余封，依然原地踏步走。</p>
<p>我想这有何难，我在虚拟机里装个 Dynamics 服务器不就行了，谁知这是灾难的开始。</p>
<p>到 <a href="http://www.dreamspark.com">DreamSpark </a>下载了 SQL Server Express (好像就是2008的简化版）Windows 2003和久违的 Virtual PC。在 Virtual PC 中装上 win2003 以后，发现严重的拖影，基本无法正常使用（已经安装了VPC的客户端驱动），于是就在 VMware server 上重新再来，这次没问题了，插上老师给我的 Dynamics 安装盘，启动，然后告诉我必须在一个有域控制器的网络里才能使用，就是说要运行这玩意还得配上活动目录，那就装吧，Easy，2003点几下就给我弄好了 DNS，DHCP 和活动目录，到这里是实实在在的比 Linux 容易，烦人的就是得重启。然后开始装 SQL Server，安装程序开始吵着嚷着让我装 Windows installer 和.Net framework 2.x，装完以后不让我继续装 SQL Server，说必须重启。</p>
<p>好吧……</p>
<p>重启完了，让我装 .Net framework 3.x……难道这两个版本还不兼容？再重启……</p>
<p>好……</p>
<p>终于装上了 SQL Server，发现连个控制台都没有，原来还得装个 xx Studio。</p>
<p>好……</p>
<p>下了一个三百多M的大家伙，启动，不让我装了，说必须装了 Power shell……</p>
<p>微软增强 Shell 了！？好事，所以我忍了！下载、安装……</p>
<p>思维定势了，重启……</p>
<p>装上了，继续装那个 XX Studio</p>
<p>然后开始装 Dynamics AX，算是顺利吧……</p>
<p>装上了……</p>
<p>但是连不上……</p>
<p>到服务里查，服务进程毫无征兆的死掉了，看错误日志，告诉我错误代码100……</p>
<p>妈的，我知道什么是错误代码100！！！谁知道？！连个文档都没有！</p>
<p>问 Google，说是数据库权限设置错误，于是我把 dbadmin 都加个了某用户，得到的还是冰冷冷的错误100。</p>
<p>于是开始了我的微软数据库之旅，装上 SQL Server 2000，告我这个版本太老了。</p>
<p>我想了想也是，都十年了，当年用这数据库的时候，叔我还年轻呢，伤感了一会儿，还是喝酒睡觉吧，明天再折腾……</p>
<p>去下盗版 SQL Server 2005，迅雷是个好地方，即使我从上面下载一千部盗版电影软件，它也能顺利拿到一个视听许可证，并且告诉大家，迅雷的正版率是99.9%，想到这我心里就一点也不别扭了，看看人家的脸皮，我用盗版又算什么？何况叔也只是试用一下而已。可能 13 亿中国人只下 0.1% 的盗版，迅雷就是这么圣洁。</p>
<p>我猜得到这开头，却猜不中这结局，我装上了，却还是连不上，而错误日志没有告诉我一点点有用信息。</p>
<p>怎么办？我开始到国内的几个 ERP 论坛研究，下载了详细到连安装 Windows 2003 都教的教程，跟我完完全全一样的环境，别人没问题，但我的就是连不上！</p>
<p>崩溃了……</p>
<p>万般无奈，又找到迅雷，下载了另一个 Dynamics AX 2009，把上面的步骤又重新做了一遍……然后，又好了……</p>
<p>感谢国家培养了迅雷，感谢迅雷友情提供 Dynamics AX 2009，感谢微软让我测试了如此“强大的” ERP 系统，这果然是个专家才能干的工作，我显然只是个用 XP 打游戏的水平。</p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/archives/79/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>PTY allocation request failed on channel 0</title>
		<link>http://log.dongsheng.org/archives/78</link>
		<comments>http://log.dongsheng.org/archives/78#comments</comments>
		<pubDate>Sat, 13 Mar 2010 00:23:33 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[System]]></category>
		<category><![CDATA[archlinux]]></category>
		<category><![CDATA[openvz]]></category>
		<category><![CDATA[ssh]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/?p=78</guid>
		<description><![CDATA[Archlinux 真是不能做服务器，升一次级就要死一次，你们三天两头倒腾包的布局/命名有啥意思呢？ 这次OpenVZ的用户倒了大霉，升级 udev 以后，ssh 进不去，提示：PTY allocation request failed on channel 0。 这下傻眼了，ssh 进不去这不完了蛋了，修都没法修。 Google 了一下，有个大叔已经研究出了怎么修复，用 `ssh user@dongsheng.org &#8216;/bin/bash -i&#8217;` 进去，重新挂载 /dev/pts 即可，但这个办法治标不治本，系统重启就又回到原点。在 /etc/rc.d 里放个脚本就行了： rm -rf /dev/ptmx mknod /dev/ptmx c 5 2 chmod 666 /dev/ptmx umount /dev/pts rm -rf /dev/pts mkdir /dev/pts mount /dev/pts 文件名存为 /etc/rc.d/udevfix，然后在 /etc/rc.conf 的 DEAMON 中加入 udevfix 即可。 据悉，这个问题是由于 OpenVZ [...]]]></description>
			<content:encoded><![CDATA[<p>Archlinux 真是不能做服务器，升一次级就要死一次，你们三天两头倒腾包的布局/命名有啥意思呢？</p>
<p>这次OpenVZ的用户倒了大霉，升级 udev 以后，ssh 进不去，提示：PTY allocation request failed on channel 0。</p>
<p>这下傻眼了，ssh 进不去这不完了蛋了，修都没法修。</p>
<p>Google 了一下，有个大叔已经研究出了<a href="http://www.asteriosk.gr/blog/2009/02/20/pty-allocation-request-failed-on-channel-0/comment-page-1/#comment-248">怎么修复</a>，用 `ssh user@dongsheng.org &#8216;/bin/bash -i&#8217;` 进去，重新挂载 /dev/pts 即可，但这个办法治标不治本，系统重启就又回到原点。在 /etc/rc.d 里放个脚本就行了：</p>
<pre>
rm -rf /dev/ptmx
mknod /dev/ptmx c 5 2
chmod 666 /dev/ptmx
umount /dev/pts
rm -rf /dev/pts
mkdir /dev/pts
mount /dev/pts
</pre>
<p>文件名存为 /etc/rc.d/udevfix，然后在 /etc/rc.conf 的 DEAMON 中加入 udevfix 即可。</p>
<p><a href="http://platonic.techfiz.info/2008/10/13/pty-allocation-request-failed-on-channel-0/comment-page-1/#comment-11048">据悉</a>，这个问题是由于 OpenVZ 的模板与 udev 不兼容导致的。</p>
<p>升级 Archlinux 要谨慎啊！！</p>
<p>Credits：</p>
<p>http://www.asteriosk.gr/blog/2009/02/20/pty-allocation-request-failed-on-channel-0/</p>
<p>http://platonic.techfiz.info/2008/10/13/pty-allocation-request-failed-on-channel-0/comment-page-1/#comment-11048</p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/archives/78/feed</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>流水账</title>
		<link>http://log.dongsheng.org/archives/77</link>
		<comments>http://log.dongsheng.org/archives/77#comments</comments>
		<pubDate>Thu, 11 Mar 2010 15:40:42 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[我真的不想分类]]></category>
		<category><![CDATA[life]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/archives/77</guid>
		<description><![CDATA[我网站更新频率已经降到将近两个月一次了，要不是打算试试 MacJournal 好不好用，怕用不了多久就会降到三个月一次了。 上次更新之后，我回国过年了，起飞前一度兴奋的睡不着，心里也明白，回国的生活还是乏善可陈，无非是吃喝玩乐，朋友聚会和父母亲人的唠叨，但家就是个让人一直惦记着的地方，我出国两年多了，其实在国外也慢慢有了自己的生活，但找不到归属感，因为在外国，没有一个叫家的地方。 回国，其实还挺不适用的，不敢上路开车，国人开车之凶悍是我开了一年多车之后才感觉出来的，在澳洲开车得规矩，换道打灯，严控车速，拐弯进转盘都得让路，停车也得规矩，不然难免被罚……回国发现要是这么开车基本上是寸步难行。可是没有车，更是寸步难行，还好国内出租算是便宜，才不至于让自己在家里憋上一个月。 见了一些朋友，但毕业三年以来，见的人其实越来越少，共同话题也是越来越少，工作的那帮人在关注跳槽、加班，上学的那帮人快毕业了关心的是找工作或者是不是应该接着读圣斗士，无论哪一种都被挤压的焦躁不堪，希望明年再见你们的时候都能轻松一些。 回去三个周自己的生活作息被彻底打乱，在东八区过西八区的时间，搞的我到现在都没有恢复过来，生活浑浑噩噩，做事也是乱七八糟，明天改整理一下近期的工作计划，不能庸庸碌碌下去了。 哎，该睡了。]]></description>
			<content:encoded><![CDATA[<p>我网站更新频率已经降到将近两个月一次了，要不是打算试试 <a href="http://www.marinersoftware.com/sitepage.php?page=85">MacJournal</a> 好不好用，怕用不了多久就会降到三个月一次了。</p>
<p>上次更新之后，我回国过年了，起飞前一度兴奋的睡不着，心里也明白，回国的生活还是乏善可陈，无非是吃喝玩乐，朋友聚会和父母亲人的唠叨，但家就是个让人一直惦记着的地方，我出国两年多了，其实在国外也慢慢有了自己的生活，但找不到归属感，因为在外国，没有一个叫家的地方。</p>
<p>回国，其实还挺不适用的，不敢上路开车，国人开车之凶悍是我开了一年多车之后才感觉出来的，在澳洲开车得规矩，换道打灯，严控车速，拐弯进转盘都得让路，停车也得规矩，不然难免被罚……回国发现要是这么开车基本上是寸步难行。可是没有车，更是寸步难行，还好国内出租算是便宜，才不至于让自己在家里憋上一个月。</p>
<p>见了一些朋友，但毕业三年以来，见的人其实越来越少，共同话题也是越来越少，工作的那帮人在关注跳槽、加班，上学的那帮人快毕业了关心的是找工作或者是不是应该接着读圣斗士，无论哪一种都被挤压的焦躁不堪，希望明年再见你们的时候都能轻松一些。</p>
<p>回去三个周自己的生活作息被彻底打乱，在东八区过西八区的时间，搞的我到现在都没有恢复过来，生活浑浑噩噩，做事也是乱七八糟，明天改整理一下近期的工作计划，不能庸庸碌碌下去了。</p>
<p>哎，该睡了。</p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/archives/77/feed</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>网站搬到 ramhost.us 了</title>
		<link>http://log.dongsheng.org/archives/72</link>
		<comments>http://log.dongsheng.org/archives/72#comments</comments>
		<pubDate>Fri, 29 Jan 2010 04:17:30 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[System]]></category>
		<category><![CDATA[ramhost]]></category>
		<category><![CDATA[vps]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/archives/72</guid>
		<description><![CDATA[跟现实搬家一样麻烦，琐碎的小问题不断。OpenVZ 打出来的信息： Result: Starting VE ... VE is unmounted VE is mounted Adding IP address(es): xxx.xxx.xxx.xxx Setting CPU limit: 100 Setting CPU units: 1000 Setting devices Configure meminfo: 98304 Set hostname: vzxxx.ramhost.us File resolv.conf was modified Setting quota ugidlimit: 1000 VE start in progress... VE is already running 我先试用一个月，有兴趣入伙的，给我发个消息要“钥匙”]]></description>
			<content:encoded><![CDATA[<p>跟现实搬家一样麻烦，琐碎的小问题不断。OpenVZ 打出来的信息：</p>
<pre>
Result: Starting VE ...
VE is unmounted
VE is mounted
Adding IP address(es): xxx.xxx.xxx.xxx
Setting CPU limit: 100
Setting CPU units: 1000
Setting devices
Configure meminfo: 98304
Set hostname: vzxxx.ramhost.us
File resolv.conf was modified
Setting quota ugidlimit: 1000
VE start in progress...
VE is already running
</pre>
<p>我先试用一个月，有兴趣入伙的，给我发个消息要“钥匙” <img src='http://log.dongsheng.org/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/archives/72/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Mac 转移用户文件夹</title>
		<link>http://log.dongsheng.org/archives/71</link>
		<comments>http://log.dongsheng.org/archives/71#comments</comments>
		<pubDate>Mon, 16 Nov 2009 03:40:47 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[System]]></category>
		<category><![CDATA[ditto]]></category>
		<category><![CDATA[dscl]]></category>
		<category><![CDATA[mac]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/?p=71</guid>
		<description><![CDATA[笔记本的开关机速度已经慢到无法忍受，昨天就重装了，这还是我第一次重装 Mac 操作系统，安装过程轻松愉快，一点也不折腾。 但由于要重新分区，所以得备份所有数据，我 iTunes 里的音乐已经多达 35G，备份相当费时。反过来讲，这也是我要重分区的主要目的，把用户目录转移到一个新分区，以后重装就不用重复备份数据的痛苦了。 转移目录其实很简单，在图形界面就可以做：在系统设置->用户帐号->右键点击用户名->在高级设置里就可以更改。 但我转移的时候还不知道有这么简单的办法，是在终端上改的： 1. 把当前用户目录同步到目标卷标： sudo ditto -rsrc /Users/dongsheng /Volumes/storage/Users/dongsheng 2. 然后用 dscl 更改用户目录设置： sudo dscl . -change /Users/dongsheng NFSHomeDirectory /Volumes/storage/Users/dongsheng 3. 删掉旧的用户目录，然后做个符号链接 sudo rm -rf /Users/dongsheng sudo ln -s /Volumes/storage/Users/dongsheng /Users/dongsheng 注意，有的文章说要用 niutil 重新设置用户目录，但这个命令在 10.5 以后的操作系统中不存在，需要用 dscl 处理。 比 Linux 麻烦的多，Linux 只用 usermod -m 即可搞定，可能 Mac 的设计目标是鼓励用户使用 GUI [...]]]></description>
			<content:encoded><![CDATA[<p>笔记本的开关机速度已经慢到无法忍受，昨天就重装了，这还是我第一次重装 Mac 操作系统，安装过程轻松愉快，一点也不折腾。</p>
<p>但由于要重新分区，所以得备份所有数据，我 iTunes 里的音乐已经多达 35G，备份相当费时。反过来讲，这也是我要重分区的主要目的，把用户目录转移到一个新分区，以后重装就不用重复备份数据的痛苦了。</p>
<p>转移目录其实很简单，在图形界面就可以做：在系统设置->用户帐号->右键点击用户名->在高级设置里就可以更改。</p>
<p>但我转移的时候还不知道有这么简单的办法，是在终端上改的：</p>
<p>1. 把当前用户目录同步到目标卷标：</p>
<pre>
sudo ditto -rsrc /Users/dongsheng /Volumes/storage/Users/dongsheng
</pre>
<p>2. 然后用 dscl 更改用户目录设置：</p>
<pre>
sudo dscl . -change /Users/dongsheng NFSHomeDirectory /Volumes/storage/Users/dongsheng
</pre>
<p>3. 删掉旧的用户目录，然后做个符号链接</p>
<pre>
sudo rm -rf /Users/dongsheng
sudo ln -s /Volumes/storage/Users/dongsheng /Users/dongsheng
</pre>
<p>注意，有的文章说要用 niutil 重新设置用户目录，但这个命令在 10.5 以后的操作系统中不存在，需要用 dscl 处理。</p>
<p>比 Linux 麻烦的多，Linux 只用 usermod -m 即可搞定，可能 Mac 的设计目标是鼓励用户使用 GUI 而忽略了优化终端吧。</p>
<p>参考文章：</p>
<ul>
<li><a href="http://developer.apple.com/mac/library/DOCUMENTATION/Darwin/Reference/ManPages/man1/dscl.1.html">dscl manpage</a></li>
<li><a href="http://www.macosxhints.com/article.php?story=20071025175202466">10.5: Move a user&#8217;s home directory via the command line System 10.5</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/archives/71/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Xmarks 使用自建服务器</title>
		<link>http://log.dongsheng.org/archives/70</link>
		<comments>http://log.dongsheng.org/archives/70#comments</comments>
		<pubDate>Tue, 20 Oct 2009 05:39:02 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[我真的不想分类]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[webdav]]></category>
		<category><![CDATA[xmarks]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/?p=70</guid>
		<description><![CDATA[听说天朝把 Xmarks 也封了，真卄了。这样下去今年过年回家只能喝西北风了，我看 Dropbox 也快了，党国是一定要赶尽杀绝的。 读了下 Xmarks 的文档，原来 Xmarks 是支持自建服务器的，只要给 WebDAV 和 FTP 写权限就行了，弄起来很简单，这样的另一个好处的是可以放心大胆的把密码也给同步了，记录一下启用的步骤： 1. 启用 Apache 的 WebDav 模块，Arch Linux 默认把 WebDav 设置放到 extra/httpd-dav.conf 了，在 /etc/httpd/conf/httpd.conf 中反注释掉好了，我的配置如下： DavLockDB "/var/log/httpd/DavLock/DavLockDB" Alias /xmarks "/srv/webdav/xmarks" &#60;Directory "/srv/webdav/xmarks"&#62; Dav On Order Allow,Deny Allow from all AuthType Digest AuthName xmarks-rule AuthUserFile "/etc/httpd/user.passwd" AuthDigestProvider file &#60;LimitExcept GET OPTIONS&#62; require user [...]]]></description>
			<content:encoded><![CDATA[<p>听说天朝把 Xmarks 也封了，真卄了。这样下去今年过年回家只能喝西北风了，我看 Dropbox 也快了，党国是一定要赶尽杀绝的。</p>
<p>读了下 Xmarks 的文档，原来 Xmarks 是支持自建服务器的，只要给 WebDAV 和 FTP 写权限就行了，弄起来很简单，这样的另一个好处的是可以放心大胆的把密码也给同步了，记录一下启用的步骤：</p>
<p>1. 启用 Apache 的 WebDav 模块，Arch Linux 默认把 WebDav 设置放到 extra/httpd-dav.conf 了，在 /etc/httpd/conf/httpd.conf 中反注释掉好了，我的配置如下：<br />
<code><br />
DavLockDB "/var/log/httpd/DavLock/DavLockDB"<br />
Alias /xmarks "/srv/webdav/xmarks"<br />
&lt;Directory "/srv/webdav/xmarks"&gt;<br />
    Dav On<br />
    Order Allow,Deny<br />
    Allow from all<br />
    AuthType Digest<br />
    AuthName xmarks-rule<br />
    AuthUserFile "/etc/httpd/user.passwd"<br />
    AuthDigestProvider file<br />
    &lt;LimitExcept GET OPTIONS&gt;<br />
        require user xmarks<br />
    &lt;/LimitExcept&gt;<br />
&lt;/Directory&gt;<br />
</code><br />
2. 创建 //var/log/httpd/DavLock/ 和 /srv/webdav/xmarks 目录，设置写权限<br />
3. 创建用户</p>
<pre>
htdigest -c "/etc/httpd/user.passwd" xmarks-rule xmarks
</pre>
<p>xmarks-rule 对应 AuthName， xmarks 对应 require user xmarks<br />
4. 在 Xmarks 里勾上 Use own server，Bookmark URL 设置成 http://localhost/xmarks/xmarks.json，注意 xmarks.json 是创建在 /src/webdav/xmarks/ 目录下。</p>
<p>然后就搞定了，Xmarks 您随便封吧。</p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/archives/70/feed</wfw:commentRss>
		<slash:comments>19</slash:comments>
		</item>
		<item>
		<title>又一篇 Archlinux 安装笔记</title>
		<link>http://log.dongsheng.org/archives/68</link>
		<comments>http://log.dongsheng.org/archives/68#comments</comments>
		<pubDate>Thu, 01 Oct 2009 04:10:21 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[System]]></category>
		<category><![CDATA[archlinux]]></category>
		<category><![CDATA[lvm]]></category>
		<category><![CDATA[openbox]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/?p=68</guid>
		<description><![CDATA[这次重装主要是为了把系统整到 lvm 上，曾很痛苦的给 home 换过分区，用上 lvm 就终结痛苦了，安装过程遇到的一些小问题总结一下 应用 lvm 是照着 Installing Arch Linux on LVM 来的，我的分区方案是：128M 的 ext3 分区挂到 /boot，剩下的所有空间加入到 lvm 中，/var, /home, / 等使用 lvm 分区，我曾把 /etc 也弄成 lvm 分区，但启动过程中，系统找不到 /etc 里配置文件（比如 initlevel），所以慎用 grub 2 改了磁盘命名方式，以前的 (hd0,0) 现在要写成 (hd0,1) 了，也不算坏，终于跟 /dev 里的命名方式一致了 (hd0, 1) == /dev/sda1 grub 中镜像路径的问题，如果 /boot 是独立分区的话，kernel 路径是 /kernel26，如果不是就得写成 /boot/kernel26 桌面换成 [...]]]></description>
			<content:encoded><![CDATA[<p>这次重装主要是为了把系统整到 lvm 上，曾很痛苦的给 home 换过分区，用上 lvm 就终结痛苦了，安装过程遇到的一些小问题总结一下</p>
<ol>
<li>应用 lvm 是照着 <a href="http://wiki.archlinux.org/index.php/LVM#Installing_Arch_Linux_on_LVM">Installing Arch Linux on LVM</a> 来的，我的分区方案是：128M 的 ext3 分区挂到 /boot，剩下的所有空间加入到 lvm 中，/var, /home, / 等使用 lvm 分区，我曾把 /etc 也弄成 lvm 分区，但启动过程中，系统找不到 /etc 里配置文件（比如 initlevel），所以慎用</li>
<li>grub 2 改了磁盘命名方式，以前的 (hd0,0) 现在要写成 (hd0,1) 了，也不算坏，终于跟 /dev 里的命名方式一致了 (hd0, 1) == /dev/sda1</li>
<li>grub 中镜像路径的问题，如果 /boot 是独立分区的话，kernel 路径是 /kernel26，如果不是就得写成 /boot/kernel26</li>
<li>桌面换成 slim+openbox，进入 slim 以后键盘鼠标全部无效，经查是 archlinux 没有装上 xf86-input-mouse 和 xf86-input-keyboard，我真。。。把 hal 和这两个包都装上，并在 rc.conf 的 DAEMONS 里加上 hal，重启就好了，还有要 .xinitrc 中加上 exec openbox-session</li>
<li>openbox 的自动启动是通过脚本实现的，详见：<a href="http://icculus.org/openbox/index.php/Help:Autostart">Help:Autostart</a></li>
<li>ibus 虽然要你把几个环境变量加到 .bashrc，但不要这么干，最好放到 /etc/profile 里</li>
<li>界面透明，在 autostart.sh 中加上
<pre>
<del datetime="2009-10-02T18:09:25+00:00">xcompmgr -c -t-5 -l-5 -r4.2 -o.55 &#038;</del>
</pre>
<pre>
xcompmgr ＆
</pre>
<blockquote><p>经实验，阴影效果极差，常在桌面上拖影，所以去掉</p></blockquote>
<p>然后 tilda 就能透明啦，用 transset 让没有内置透明的实现透明</li>
<li>还有 archlinux 那帮偏执狂把 php 的 apache 模块分离出来了，叫做 php-apache</li>
<li>不喜欢 openbox 的 gtk 风格，装上了 <del datetime="2009-10-02T18:06:17+00:00">gtk-theme-switch2</del> gtk-chtheme 和 clearlooks-bluecurve-gtk-theme &#038; gtk-aurora-engine</li>
<li>今天折腾一下午，终于把系统字体改的满意了：<a href="http://github.com/dongsheng/config/raw/archlinux/.fonts.conf">.fonts.conf</a></li>
</ol>
<p>最后，找到一篇 <a href="http://urukrama.wordpress.com/openbox-guide">openbox 配置指南</a>，慢慢研究吧。</p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/archives/68/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>申请 US B1 签证 DIY</title>
		<link>http://log.dongsheng.org/archives/69</link>
		<comments>http://log.dongsheng.org/archives/69#comments</comments>
		<pubDate>Mon, 14 Sep 2009 05:47:38 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[Life]]></category>
		<category><![CDATA[b-1]]></category>
		<category><![CDATA[travel]]></category>
		<category><![CDATA[us]]></category>
		<category><![CDATA[visa]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/?p=69</guid>
		<description><![CDATA[今年作为 mentor 参加了 Google summer of code 2009，上个月项目顺利结束，Google 邀请我们 Moodle 的两个 Mentor 去山景城一游，我的同事是法国人，法国加入了 Visa Waiver Program，所以根本不用申请签证，问公司其他人（都是澳洲人新西兰人，还有个美国人）也对此一无所知，传说中的澳洲护照是算的上旅游最佳护照了，去大多数国家都不用签证，只好自己 DIY 了。说起我签证的问题，我老板还讲了去年去中国申请中国签证的故事，去趟中国光有一般材料（护照，bank statement之类）是远远不够的，还得准备出生证，结婚证，他跑了三趟中国大使馆才申请下来，所以想想别的国家对中国护照如此苛责，也不算过分，谁让中国也对人家这么严格呢？话说中国在世界上也有了不小的影响力（常参加个鸡八，鸡土会议），一本中国护照却在世界上基本没有影响力，怎么在开放的问题上就这么跟不上时代？ 这是我第三次申请签证了，第一次是办澳洲的学生签证，表格之多令人发指，这也可以理解，毕竟是个长达四年的签证，澳洲又不是慈善机构。这些都不算啥，最让我恶心和难忘的是某些政府部门的办事态度，花了一整天去办无婚姻证明，为了一个狗屎文件，就是不给我开证明，我打车在烈日炎炎的济南来回跑了两趟……不想提了，快三年前的事了，想起来还是很窝火。第二次是申请 457 签证，这次是简单的令人发指，公司给我提交了 Nomination 申请，我添了一个表，然后到移民局补充了一下材料，不到一周就批下来了，可能 onshore 申请更容易吧。这是第三次了，情况变得有点特别，在澳洲作为一个中国人申请美国签证，找到美国大使馆在澳洲的网站，发现申请也没什么区别。本来还担心得跑到堪培拉大使馆面试，翻了翻网站发现原来在珀斯有个办公室，网站：http://perth.usconsulate.gov/consular/visas/niv/ 我简述一下申请的步骤： 去美国政府网站填写 DS-160 申请表，在这一步里要上传一张个人照片，照片的要求：Guidelines for Producing High Quality Photographs for U.S. Travel Documents &#8211; for Visa Online Applications，添完以后，要把确认页面打印出来，最好把整个申请表也打印出来，备份用。 定一个面试时间，使用 VisaPoint service 网站，定时间要花 14 澳元拿一个 PIN，申请完以后，打印出出确认页 去邮局交 170 澳元的 VISA [...]]]></description>
			<content:encoded><![CDATA[<p>今年作为 mentor 参加了 Google summer of code 2009，上个月项目顺利结束，Google 邀请我们 Moodle 的两个 Mentor 去山景城一游，我的同事是法国人，法国加入了 <a href="http://en.wikipedia.org/wiki/Visa_Waiver_Program">Visa Waiver Program</a>，所以根本不用申请签证，问公司其他人（都是澳洲人新西兰人，还有个美国人）也对此一无所知，传说中的澳洲护照是算的上旅游最佳护照了，去大多数国家都不用签证，只好自己 DIY 了。说起我签证的问题，我老板还讲了去年去中国申请中国签证的故事，去趟中国光有一般材料（护照，bank statement之类）是远远不够的，还得准备出生证，结婚证，他跑了三趟中国大使馆才申请下来，所以想想别的国家对中国护照如此苛责，也不算过分，谁让中国也对人家这么严格呢？话说中国在世界上也有了不小的影响力（常参加个鸡八，鸡土会议），一本中国护照却在世界上基本没有影响力，怎么在开放的问题上就这么跟不上时代？</p>
<p>这是我第三次申请签证了，第一次是办澳洲的学生签证，表格之多令人发指，这也可以理解，毕竟是个长达四年的签证，澳洲又不是慈善机构。这些都不算啥，最让我恶心和难忘的是某些政府部门的办事态度，花了一整天去办无婚姻证明，为了一个狗屎文件，就是不给我开证明，我打车在烈日炎炎的济南来回跑了两趟……不想提了，快三年前的事了，想起来还是很窝火。第二次是申请 457 签证，这次是简单的令人发指，公司给我提交了 <a href="http://www.immi.gov.au/skilled/skilled-workers/sbs/step-2.htm">Nomination</a> 申请，我添了<a href="http://www.immi.gov.au/e_visa/employer-sponsored.htm">一个表</a>，然后到移民局补充了一下材料，不到一周就批下来了，可能 onshore 申请更容易吧。这是第三次了，情况变得有点特别，在澳洲作为一个中国人申请美国签证，找到美国大使馆在澳洲的网站，发现申请也没什么区别。本来还担心得跑到堪培拉大使馆面试，翻了翻网站发现原来在<a href="http://maps.google.com.au/maps?hl=en&#038;safe=off&#038;client=firefox-a&#038;q=16+St+Georges+Terrace,+Perth+WA+6000&#038;ie=UTF8&#038;f=q&#038;sll=-25.335448,135.745076&#038;sspn=38.161973,47.373047&#038;ll=-31.954383,115.869884&#038;spn=0.011852,0.027874&#038;t=h&#038;z=16&#038;iwloc=A">珀斯有个办公室</a>，网站：http://perth.usconsulate.gov/consular/visas/niv/</p>
<p>我简述一下申请的步骤：</p>
<ol>
<li>
去美国政府网站填写 <a href="https://ceac.state.gov/genniv/">DS-160</a> 申请表，在这一步里要上传一张个人照片，照片的要求：<a href="http://travel.state.gov/visa/guide/guide_3877.html">Guidelines for Producing High Quality Photographs for U.S. Travel Documents &#8211; for Visa Online Applications</a>，添完以后，要把确认页面打印出来，最好把整个申请表也打印出来，备份用。</li>
<li>定一个面试时间，使用 <a href="https://aus.us-visaservices.com/Forms/DetermineTCN.aspx">VisaPoint service</a> 网站，定时间要花 14 澳元拿一个 PIN，申请完以后，打印出出确认页</li>
<li>去邮局交 170 澳元的 VISA 申请费，不用带任何资料，跟邮局的人说我要交美国签证申请费就搞定了</li>
<li>准备材料，<a href="Documents Checklist for non-immigrant VISA interview (L1, H1B, B1, B2, F1, M1 Visas)">Documents Checklist for non-immigrant VISA interview (L1, H1B, B1, B2, F1, M1 Visas)</a>
<ul>
<li>各种申请表，包括之前填写的 DS-160 表，Visa point 确认信，邮局的收条</li>
<li>商务旅游需要来自美国公司的邀请信，我把 Google 的邀请信打印出来了</li>
<li>护照照片（两寸的方形照片）</li>
<li>一个挂号信，给你把护照寄回去用</li>
<li>护照</li>
<li><del datetime="2009-09-16T03:44:42+00:00">旅游行程，我打印出机票了</del></li>
<li><del datetime="2009-09-16T03:44:42+00:00">税单</del></li>
<li><del datetime="2009-09-16T03:44:42+00:00">Bank statement，证明自己有财力在美国呆着</del></li>
</ul>
</li>
</ol>
<p>还有个官方的网站详细介绍申请签证的步骤：<a href="http://perth.usconsulate.gov/consular/visas/niv/">How to apply</a></p>
<p>然后……我周三去面试，Good luck！</p>
<blockquote><p>Last edited 14th, Sep, 2009</p>
<p>今天签证批准了，明后天贴签寄给我，文档列表里的删除掉的项目的表示实际不用出示。</p>
<p>Perth 的领事馆搞得很防恐，先在四楼 security check，不准带手机，钥匙，搞得跟登飞机一样，搞完了让我说十三楼，真的办公室在十三楼，进去的时候又过了一个 Gate 才见到领事馆真容，找地方坐下见到一个亚洲人，我一看就是个中国来的博士，从着装（就是好学生那种打扮），举止（坐立不安），口音（坚定了我的判断）种种方面说明了自己博士的身份，跟签证官对答时说自己是 UWA 的 PhD，是到美国大学访问的，解释访美原因的时候满嘴量子物理，牛死了。</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/archives/69/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>HTTPS 自签证书</title>
		<link>http://log.dongsheng.org/archives/66</link>
		<comments>http://log.dongsheng.org/archives/66#comments</comments>
		<pubDate>Mon, 07 Sep 2009 07:45:09 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[System]]></category>
		<category><![CDATA[certificate]]></category>
		<category><![CDATA[https]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/?p=66</guid>
		<description><![CDATA[关于 SSL 的 CA 签名和用户加密过程，有篇简要介绍。 要自签证书自然需要自建的 CA 证书和你服务器的证书。 首先创建 CA 证书 创建 CA 的 rsa 私钥，私钥 4096 位： openssl genrsa -out ca.key 4096 如果要加密私钥，可以加上 -des3 参数，给私钥加上 pass phrase 创建 x509 证书 openssl req -new -x509 -days 3650 -key ca.key -out ca.crt 服务器证书 创建私钥 openssl genrsa -out server.key 4096 创建签名请求 openssl req -new -key server.key -out [...]]]></description>
			<content:encoded><![CDATA[<p>关于 SSL 的 CA 签名和用户加密过程，有篇<a href="https://ssl.trustwave.com/support/support-how-ssl-works.php">简要介绍</a>。</p>
<p>要自签证书自然需要自建的 CA 证书和你服务器的证书。</p>
<p><strong>首先创建 CA 证书</strong></p>
<ol>
<li>创建 CA 的 rsa 私钥，私钥 4096 位：
<pre>
openssl genrsa -out ca.key 4096
</pre>
<p>如果要加密私钥，可以加上 -des3 参数，给私钥加上 pass phrase</li>
<li>
创建 x509 证书</p>
<pre>openssl req -new -x509 -days 3650 -key ca.key -out ca.crt</pre>
</li>
</ol>
<p><strong>服务器证书</strong></p>
<ol>
<li>创建私钥
<pre>openssl genrsa -out server.key 4096</pre>
</li>
<li>
创建<a href="http://en.wikipedia.org/wiki/Certificate_signing_request">签名请求</a></p>
<pre>openssl req -new -key server.key -out server.csr</pre>
</li>
<li>
用 CA 证书给 csr 签名，然后生成服务器证书（既公钥）</p>
<pre>openssl x509 -req -days 3650 -in server.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out server.crt</pre>
</li>
</ol>
<p><strong>修改 Apache，把下面的配置放到虚拟机配置段里</strong></p>
<pre>SSLEngine on
SSLCertificateFile /etc/httpd/ssl/dongsheng.moodle.local/server.crt
SSLCertificateKeyFile /etc/httpd/ssl/dongsheng.moodle.local/server.key</pre>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/archives/66/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>[LCOTW] chmod 的两个特殊权限位</title>
		<link>http://log.dongsheng.org/archives/67</link>
		<comments>http://log.dongsheng.org/archives/67#comments</comments>
		<pubDate>Tue, 18 Aug 2009 08:20:39 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[System]]></category>
		<category><![CDATA[chmod]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[permission]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/archives/67</guid>
		<description><![CDATA[LCOTW (Linux Commands Of The Week)，我打算改改名，叫 Linux commands Of The Quarter 把，人越来越懒了，学到的新东西懒得记下来，等忘了的时候又重新找重新学，太傻了。 执行 ls -l /bin 会发现除了熟悉的 r w x 权限外，还有一些可执行文件有一个 s 权限位（setuid bit），这是啥意思呢？ 这个 s 权限可以让文件以文件 owner 的权限运行，做个实验： sudo touch /test rm /test #failed! You don't have permission sudo chmod u+s `which rm` rm /test #worked! 可以看出这个权限位是很危险的，它可以让一个普通用户以 root 权限运行程序，所以慎用。 还有一个叫 Sticky bit，这个权限只对目录有效 chmod +t [...]]]></description>
			<content:encoded><![CDATA[<p>LCOTW (Linux Commands Of The Week)，我打算改改名，叫 Linux commands Of The Quarter 把，人越来越懒了，学到的新东西懒得记下来，等忘了的时候又重新找重新学，太傻了。</p>
<p>执行 ls -l /bin 会发现除了熟悉的 r w x 权限外，还有一些可执行文件有一个 s 权限位（setuid bit），这是啥意思呢？<br />
这个 s 权限可以让文件以文件 owner 的权限运行，做个实验：</p>
<pre>
sudo touch /test
rm /test #failed! You don't have permission
sudo chmod u+s `which rm`
rm /test #worked!
</pre>
<p>可以看出这个权限位是很危险的，它可以让一个普通用户以 root 权限运行程序，所以慎用。</p>
<p>还有一个叫 Sticky bit，这个权限只对目录有效 chmod +t /dir（为什么不叫 s？因为已经被 setuid bit 枪了，只好用第二个字符了），一个典型例子是 /tmp，这个目录是全局可写的，sticky bit 可以让文件只能被文件 owner 删除。</p>
<p>这两个权限位的数字表示方法：</p>
<pre>
4000 setuid bit
2000 setgid bit
1000 sticky bit
</pre>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/archives/67/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Hands on Kindle 2</title>
		<link>http://log.dongsheng.org/archives/65</link>
		<comments>http://log.dongsheng.org/archives/65#comments</comments>
		<pubDate>Thu, 30 Jul 2009 07:26:19 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[Gadget]]></category>
		<category><![CDATA[ebook]]></category>
		<category><![CDATA[kindle]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/?p=65</guid>
		<description><![CDATA[Kindle 飘洋过海终于到了我的手上，穿过太平洋和大洋洲来到澳洲西岸之用了六天，世界真小。 拿到手之后终于不纠结于 Kindle DX 了，DX 可以直接读 PDF 还有一个更大的屏幕，但价格太贵，思量再三还是买了 Kindle，心想如果以后真的需要再整个大的吧。Kindle 其实大小挺合适了，我也只是打算来读读小说，并不打算读什么技术书籍。 屏幕 前面说了，屏幕不大，但读一般的书绝对够了，除非你要看 A4 大小的 PDF。Kindle 2 实际的显示效果没有在网上看到的惊艳，但确实很像一本真正的书了，翻页比较慢，会闪动一下，不太爽 键盘 很生硬，反正很少用，无所谓了 网络 本以为是内置 WIFI 网络，买了之后看网上评测才知道是 3G 网络，US only，在网上找到《Kindle 2 上手记》，就在 Archlinux 上试了一下联网，可能是内核被我编译次了，怎么也找不到 Kindle 这个 USB 设备，回家再试试吧，现在上班不好折腾 文件转换 在 amazon 注册 kindle 时可以指定一个邮箱用以转换电子书，我的地址是 dongsheng@free.kindle.com，试着转化了一下 Advanced Bash-Scripting Guide，速度还蛮快，还有一个叫 MobiPocket 的转换工具，现在没有 Windows 机器，回家再试试吧。 字典 这是我选择 Kindle 的一个重要原因，方便看英文书，用五向按钮选择文字，然后 Kindle 最下面就会显示出单词释义，不错……但还是远远不如 [...]]]></description>
			<content:encoded><![CDATA[<p>Kindle 飘洋过海终于到了我的手上，穿过太平洋和大洋洲来到澳洲西岸之用了六天，世界真小。</p>
<p>拿到手之后终于不纠结于 Kindle DX 了，DX 可以直接读 PDF 还有一个更大的屏幕，但价格太贵，思量再三还是买了 Kindle，心想如果以后真的需要再整个大的吧。Kindle 其实大小挺合适了，我也只是打算来读读小说，并不打算读什么技术书籍。</p>
<p>屏幕<br />
前面说了，屏幕不大，但读一般的书绝对够了，除非你要看 A4 大小的 PDF。Kindle 2 实际的显示效果没有在网上看到的惊艳，但确实很像一本真正的书了，翻页比较慢，会闪动一下，不太爽</p>
<p>键盘<br />
很生硬，反正很少用，无所谓了</p>
<p>网络<br />
本以为是内置 WIFI 网络，买了之后看网上评测才知道是 3G 网络，US only，在网上找到《<a href="http://hutuworm.blogspot.com/2009/03/kindle-2.html">Kindle 2 上手记</a>》，就在 Archlinux 上试了一下联网，可能是内核被我编译次了，怎么也找不到 Kindle 这个 USB 设备，回家再试试吧，现在上班不好折腾</p>
<p>文件转换<br />
在 amazon 注册 kindle 时可以指定一个邮箱用以转换电子书，我的地址是 dongsheng@free.kindle.com，试着转化了一下 <a href="http://tldp.org/LDP/abs/html/">Advanced Bash-Scripting Guide</a>，速度还蛮快，还有一个叫 <a href="http://www.mobipocket.com/en/downloadSoft/ProductDetailsCreator.asp">MobiPocket</a> 的转换工具，现在没有 Windows 机器，回家再试试吧。</p>
<p>字典<br />
这是我选择 Kindle 的一个重要原因，方便看英文书，用五向按钮选择文字，然后 Kindle 最下面就会显示出单词释义，不错……但还是远远不如 Treo 650 上的 vbook……</p>
<p>汉化和文本阅读还没法试（在办公室朗读有点猖狂），回家补上。</p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/archives/65/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Mercurial for Google Code 的几个小技巧</title>
		<link>http://log.dongsheng.org/archives/64</link>
		<comments>http://log.dongsheng.org/archives/64#comments</comments>
		<pubDate>Fri, 24 Jul 2009 14:31:22 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[hg]]></category>
		<category><![CDATA[Mercurial]]></category>
		<category><![CDATA[scm]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/archives/64</guid>
		<description><![CDATA[为了方便改本站主题，我把代码放在了 Google Code 上，一冲动把代码管理工具选成了 Mercurial 而不是熟悉的 SVN，Mercurial 操作起来跟 Git 差不多，但配置碰到一些小问题。 1. 无法象 SVN 一样记住登录密码 解决办法：打开 .hg/hgrc ，默认是这样的： [paths] default = https://projectname.googlecode.com/hg 把密码和用户名填到 URL 里就行啦 [paths] default = https://accountname:password@projectname.googlecode.com/hg 2. 提示没有设置用户名 解决办法：在 .hg/hgrc 中添加 [ui] username = Dongsheng Cai]]></description>
			<content:encoded><![CDATA[<p>为了方便改本站主题，我把代码放在了 Google Code 上，一冲动把代码管理工具选成了 Mercurial 而不是熟悉的 SVN，Mercurial 操作起来跟 Git 差不多，但配置碰到一些小问题。<br />
1. 无法象 SVN 一样记住登录密码<br />
解决办法：打开 .hg/hgrc ，默认是这样的：</p>
<pre>
[paths]
default = https://projectname.googlecode.com/hg
</pre>
<p>把密码和用户名填到 URL 里就行啦</p>
<pre>
[paths]
default = https://accountname:password@projectname.googlecode.com/hg
</pre>
<p>2. 提示没有设置用户名<br />
解决办法：在 .hg/hgrc 中添加</p>
<pre>
[ui]
username = Dongsheng Cai
</pre>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/archives/64/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>原来我也有 PageRank</title>
		<link>http://log.dongsheng.org/archives/53</link>
		<comments>http://log.dongsheng.org/archives/53#comments</comments>
		<pubDate>Thu, 23 Jul 2009 18:40:52 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[我真的不想分类]]></category>
		<category><![CDATA[pagerank]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/?p=53</guid>
		<description><![CDATA[用 prchecker 查了一下，原来我的网站 PageRank == 2 Updated 24th, July, 2009 现在涨到 3 啦，好玩]]></description>
			<content:encoded><![CDATA[<p>用 <a href="http://prchecker.info/">prchecker</a> 查了一下，原来我的网站 PageRank == 2 <img src='http://log.dongsheng.org/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<blockquote><p>Updated 24th, July, 2009<br />
现在涨到 3 啦，好玩</p></blockquote>
<div>
<img src="http://pr.prchecker.info/getpr.php?codex=aHR0cDovL2RvbmdzaGVuZy5vcmc=&#038;tag=3" title="Pagerank" alt="Free Page Rank Tool" height="15px" width="80px" /></div>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/archives/53/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>书和 Kindle 2</title>
		<link>http://log.dongsheng.org/archives/59</link>
		<comments>http://log.dongsheng.org/archives/59#comments</comments>
		<pubDate>Thu, 23 Jul 2009 16:27:56 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[Gadget]]></category>
		<category><![CDATA[Life]]></category>
		<category><![CDATA[eink]]></category>
		<category><![CDATA[kindle]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/archives/59</guid>
		<description><![CDATA[早在上大学的时候就动过买电子阅读器的野心，但动辄几千块的 iRex iLiad 和 Sony Reader PRS-XXX 是穷学生无福消受的，另一个没有购买的原因是手上有一台 Treo 650，vbook + zdic_da 给了我难以忘怀的阅读体验，除了屏幕太小，怕是找不到比他更好的读书机了。那时候每天都要到 hi-pda 的 geek talks 版流流口水，但有 Treo 在手，心里还是有几分自得。 2007 年底出国，这之后的每天都在奔波，上学、打工，几乎没再读过一本书。再后来工作了，以为属于自己的时间更多了，有时间读几本书了，事实是心都野了，每天不是抱着电脑上网就是往床上一躺。电脑上的电子书一坨，但坐在电脑前，想完完整整看本书真是太难了，信息干扰太大。于是开始买实体书，常去的两个网站是 fishpond.com.au 和 www.bookdepository.co.uk，前者是澳洲本地网站，所以送货速度快一点，消费五十以上免邮费，后者是个英国网站，全球免费送货，而且价格通常是最便宜的，买书前可以从 www.booko.com.au 对比一下书的价格，通常 Book depository 就是最便宜的，比亚马逊还便宜。 最近关于 kindle 2 的信息越来越多了，早已是心痒难耐，尚犹豫花近 300 多美刀买这么个 gadget 是否值得？前几天发生的事坚定了购买决心：拿回借出的几本实体书，书已经破旧的让人心疼了，想来电子书是摆脱这种痛苦的最佳办法。于是第二天就在 ebay 上买下了 kindle 2，DX 很诱人，但我想 kindle 2 暂时肯定够我用了，要是以后有这需求再买吧。 希望 kindle 2 能让我再找回阅读的乐趣。 BTW，找到一个可以追踪包裹的网站：boxoh.com，可以将包裹状态显示在 Google maps。]]></description>
			<content:encoded><![CDATA[<p>早在上大学的时候就动过买电子阅读器的野心，但动辄几千块的 iRex iLiad 和 Sony Reader PRS-XXX 是穷学生无福消受的，另一个没有购买的原因是手上有一台 Treo 650，vbook + zdic_da 给了我难以忘怀的阅读体验，除了屏幕太小，怕是找不到比他更好的读书机了。那时候每天都要到 <a href="http://www.hi-pda.com/forum/">hi-pda</a> 的 <a href="http://www.hi-pda.com/forum/forumdisplay.php?fid=7">geek talks</a> 版流流口水，但有 Treo 在手，心里还是有几分自得。</p>
<p>2007 年底出国，这之后的每天都在奔波，上学、打工，几乎没再读过一本书。再后来工作了，以为属于自己的时间更多了，有时间读几本书了，事实是心都野了，每天不是抱着电脑上网就是往床上一躺。电脑上的电子书一坨，但坐在电脑前，想完完整整看本书真是太难了，信息干扰太大。于是开始买实体书，常去的两个网站是 <a href="http://fishpond.com.au">fishpond.com.au</a> 和 <a href="http://www.bookdepository.co.uk">www.bookdepository.co.uk</a>，前者是澳洲本地网站，所以送货速度快一点，消费五十以上免邮费，后者是个英国网站，全球免费送货，而且价格通常是最便宜的，买书前可以从 <a href="http://www.booko.com.au">www.booko.com.au</a> 对比一下书的价格，通常 Book depository 就是最便宜的，比亚马逊还便宜。</p>
<p>最近关于 <a href="http://www.amazon.com/Kindle-Amazons-Wireless-Reading-Generation/dp/B00154JDAI">kindle 2</a> 的信息越来越多了，早已是心痒难耐，尚犹豫花近 300 多美刀买这么个 gadget 是否值得？前几天发生的事坚定了购买决心：拿回借出的几本实体书，书已经破旧的让人心疼了，想来电子书是摆脱这种痛苦的最佳办法。于是第二天就在 ebay 上买下了 kindle 2，DX 很诱人，但我想 kindle 2 暂时肯定够我用了，要是以后有这需求再买吧。</p>
<p>希望 kindle 2 能让我再找回阅读的乐趣。</p>
<p>BTW，找到一个可以追踪包裹的网站：<a href="http://boxoh.com/">boxoh.com</a>，可以将包裹状态显示在 Google maps。</p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/archives/59/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>在 Patch 中添加新文件</title>
		<link>http://log.dongsheng.org/archives/49</link>
		<comments>http://log.dongsheng.org/archives/49#comments</comments>
		<pubDate>Mon, 06 Jul 2009 08:10:39 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[System]]></category>
		<category><![CDATA[cvs]]></category>
		<category><![CDATA[cvsdo]]></category>
		<category><![CDATA[patch]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/archives/49</guid>
		<description><![CDATA[我们的项目使用 CVS 托管代码，在把提交代码前，我们通常会创建一个 Patch，然后放到 Tracker 上做质量检查。 作为一个不会用 IDE 的程序员，Patch 一般是这样创建的： cvs diff file1.php > file1.patch 问题是，这个命令无法处理 CVS 中不存在的文件，即新文件，诸如 Netbeans 和 Eclipse 等 IDE 都有办法为新建文件创建 Patch（因为我看到同事发的 Patch 里有 Eclipse 的标示），其实用命令行也是能实现这个功能的。 首先要下载一个叫 cvsdo 的工具，这是个 Perl 文件，下载到 /usr/bin/ 下，然后加上可执行权限就完事了。回到代码目录，执行 cvsdo add newfile.php，然后 cvs diff -uN newfile.php > newfile.patch，这样就能可以对新文件做 cvs diff 了。这个脚本的原理就是修改了 CVS/Entries，让 cvs 以为这个文件已经在 cvs 仓库里了。注意，要给 cvs diff [...]]]></description>
			<content:encoded><![CDATA[<p>我们的项目使用 CVS 托管代码，在把提交代码前，我们通常会创建一个 Patch，然后放到 Tracker 上做质量检查。<br />
作为一个不会用 IDE 的程序员，Patch 一般是这样创建的：</p>
<pre>cvs diff file1.php > file1.patch</pre>
<p>问题是，这个命令无法处理 CVS 中不存在的文件，即新文件，诸如 Netbeans 和 Eclipse 等 IDE 都有办法为新建文件创建 Patch（因为我看到同事发的 Patch 里有 Eclipse 的标示），其实用命令行也是能实现这个功能的。</p>
<p>首先要下载一个叫 <a href="http://viper.haque.net/~timeless/redbean/cvsdo">cvsdo</a> 的工具，这是个 Perl 文件，下载到 /usr/bin/ 下，然后加上可执行权限就完事了。回到代码目录，执行 cvsdo add newfile.php，然后 cvs diff -uN newfile.php > newfile.patch，这样就能可以对新文件做 cvs diff 了。这个脚本的原理就是修改了 CVS/Entries，让 cvs 以为这个文件已经在 cvs 仓库里了。注意，要给 cvs diff 使用 -N 参数，这样才能输出新文件。如果嫌 cvs diff 后面跟参数麻烦，可以创建 ~/.cvsrc</p>
<pre>
cvs -q
update -dPA
diff -uN
</pre>
<p>这样每次执行 cvs diff 就会默认加上这些参数的。</p>
<p>参考：</p>
<ol>
<li><a href="http://http://viper.haque.net/~timeless/redbean/">CVSdo</a></li>
<li><a href="https://developer.mozilla.org/En/Creating_a_patch">Creating a patch</a></li>
</ol>
<p>Updated on 7th, July, 2009<br />
补充在 Netbeans 中创建 Patch 的方法，在左边的文件树中选中修改了的文件，然后 Team -> CVS -> Export Diff Patch</p>
<p>Updated on 16th, July, 2009<br />
做了一个 Archlinux 上的 PKGBUILD，名字 cvsutils，直接装上就都有啦</p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/archives/49/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>一团乱麻</title>
		<link>http://log.dongsheng.org/archives/47</link>
		<comments>http://log.dongsheng.org/archives/47#comments</comments>
		<pubDate>Tue, 23 Jun 2009 14:40:49 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[Life]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/archives/47</guid>
		<description><![CDATA[最近乱七八糟的事一坨一坨的都挤到一起了，零零散散解决了一些，依然是理不清。 上次被追尾，车刚刚送修，幸运的是这次没有多大波折，人家痛痛快快答应修好车，修完之后还得把我划的车门修好，另外还得抽时间把那个没用的 warranty cancel 掉，等搞定了我就可以卖车换车了 考驾照，我已经念叨了很久要做的事，没个澳洲驾照，要是出了点事，即使不是自己的责任，也感觉虚的很，驾照是非考不可了，不能再拖了 表弟在这周回国（上周刚把堂弟送到机场），不但把他东西临时转移到我的住处，而且还得给他安排新的 home stay，他在这里待的一个学期惹得麻烦不断，这周得去趟学校给老师解释一下 学校，他妈的 ECU 给我办转学分已经进行整整两个月，发了三次 email 每次都是说让我等，严重影响我下学期的选课计划，一个月要是还搞不出来，爷就不跟你们玩了，转回 Murdoch，谁是谁大爷啊？ 工作，最近的生产率很低，一方面是身体原因，整天对着电脑，弄得眼睛特别疲劳，看上一阵就眼睛流泪，抽时间得看看医生了，另一方面是感觉自己的工作越来越陷入重复，工作一年多了，始终是 PHP JS 的圈子里转来转去，工作忙里偷闲学了不少 Linux 的东西，但现在的职业方向非常混乱，这也是在小公司做事的弊端吧 这周尽量把乱七八糟的事都搞完，周末得给下半年做个打算了。 国外的生活是很单调，也没有多少选择的自由，但现在任何积极的改变都是再为以后的我创造更多的选项。]]></description>
			<content:encoded><![CDATA[<p>最近乱七八糟的事一坨一坨的都挤到一起了，零零散散解决了一些，依然是理不清。</p>
<ul>
<li>上次被追尾，车刚刚送修，幸运的是这次没有多大波折，人家痛痛快快答应修好车，修完之后还得把我划的车门修好，另外还得抽时间把那个没用的 warranty cancel 掉，等搞定了我就可以卖车换车了</li>
<li>考驾照，我已经念叨了很久要做的事，没个澳洲驾照，要是出了点事，即使不是自己的责任，也感觉虚的很，驾照是非考不可了，不能再拖了</li>
<li>表弟在这周回国（上周刚把堂弟送到机场），不但把他东西临时转移到我的住处，而且还得给他安排新的 home stay，他在这里待的一个学期惹得麻烦不断，这周得去趟学校给老师解释一下</li>
<li>学校，他妈的 ECU 给我办转学分已经进行整整两个月，发了三次  email 每次都是说让我等，严重影响我下学期的选课计划，一个月要是还搞不出来，爷就不跟你们玩了，转回 Murdoch，谁是谁大爷啊？</li>
<li>工作，最近的生产率很低，一方面是身体原因，整天对着电脑，弄得眼睛特别疲劳，看上一阵就眼睛流泪，抽时间得看看医生了，另一方面是感觉自己的工作越来越陷入重复，工作一年多了，始终是 PHP JS 的圈子里转来转去，工作忙里偷闲学了不少 Linux 的东西，但现在的职业方向非常混乱，这也是在小公司做事的弊端吧</li>
</ul>
<p>这周尽量把乱七八糟的事都搞完，周末得给下半年做个打算了。<br />
国外的生活是很单调，也没有多少选择的自由，但现在任何积极的改变都是再为以后的我创造更多的选项。</p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/archives/47/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Archlinux 的 Flash player 无法显示部分汉字</title>
		<link>http://log.dongsheng.org/archives/58</link>
		<comments>http://log.dongsheng.org/archives/58#comments</comments>
		<pubDate>Fri, 29 May 2009 08:15:41 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[System]]></category>
		<category><![CDATA[archlinux]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/archives/58</guid>
		<description><![CDATA[这个问题存在很久了，由于工作电脑用中文不是很多，所以一直忍着。这几天一直用亦歌听歌，那些被截了一半的歌名看着太别扭了，受不了了，得想办法解决。 先试着把 /etc/fonts/conf.d/49-sansserif.conf 中的字体都换成了文泉驿，问题依旧，到 LinuxSir 上问了一下，据说使用 nightly-build 的文泉驿就没问题了，安装以后果然问题解决。 PS，写这篇文章的时候，又搜索了一下，发现亦歌已经贴出了一个解决办法：linux,ubuntu,flash中文汉字显示方块乱码的问题。 还找到一篇文章解释了为什么会发生这个问题：FlashPlayer 9 for Linux中文显示问题的一些临时解决办法。]]></description>
			<content:encoded><![CDATA[<p>这个问题存在很久了，由于工作电脑用中文不是很多，所以一直忍着。这几天一直用<a href="http://www.1g1g.com/">亦歌</a>听歌，那些被截了一半的歌名看着太别扭了，受不了了，得想办法解决。</p>
<p>先试着把 /etc/fonts/conf.d/49-sansserif.conf 中的字体都换成了文泉驿，问题依旧，到 LinuxSir 上问了一下，据说使用 nightly-build 的文泉驿就没问题了，安装以后果然问题解决。</p>
<p>PS，写这篇文章的时候，又搜索了一下，发现亦歌已经贴出了一个解决办法：<a href="http://blog.1g1g.com/2009/02/05/linux-ubuntu-flash-problem/">linux,ubuntu,flash中文汉字显示方块乱码的问题</a>。<br />
还找到一篇文章解释了为什么会发生这个问题：<a href="http://blog.eshangrao.com/2007/02/15/348/">FlashPlayer 9 for Linux中文显示问题的一些临时解决办法</a>。</p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/archives/58/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Palm Pre Mojo early access</title>
		<link>http://log.dongsheng.org/archives/55</link>
		<comments>http://log.dongsheng.org/archives/55#comments</comments>
		<pubDate>Thu, 07 May 2009 02:50:33 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[Gadget]]></category>
		<category><![CDATA[mojo]]></category>
		<category><![CDATA[palm]]></category>
		<category><![CDATA[sdk]]></category>
		<category><![CDATA[webos]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/archives/55</guid>
		<description><![CDATA[今天 Mojo SDK 终于可以访问了，上几张模拟器的图： 模拟器是基于 VirtualBox 的 拨号界面 Kernal panic，好久没见过这场面了 纯种 Linux 血统，连 Grub 都有。]]></description>
			<content:encoded><![CDATA[<p>今天 Mojo SDK 终于可以访问了，上几张模拟器的图：<br />
<img class="picasa" src="http://lh3.ggpht.com/_ItjVZAOwvt8/SgJMDp1mp-I/AAAAAAAAADY/K-X-nrg4_Iw/s512/Screenshot-2.png" alt="" /><br />
模拟器是基于 VirtualBox 的<br />
<img class="picasa" src="http://lh6.ggpht.com/_ItjVZAOwvt8/SgJNEyCEw5I/AAAAAAAAADc/867jkZmlbFU/s512/Screenshot-4.png" alt="" /><br />
拨号界面<br />
<img class="picasa" src="http://lh6.ggpht.com/_ItjVZAOwvt8/SgJMDSYetAI/AAAAAAAAADQ/zyi8EZsnfMc/s512/Screenshot.png" alt="" /><br />
Kernal panic，好久没见过这场面了<br />
<img class="picasa" src="http://lh6.ggpht.com/_ItjVZAOwvt8/SgJMDsCxWkI/AAAAAAAAADU/fawCL08oQXw/s512/Screenshot-1.png" alt="" /><br />
纯种 Linux 血统，连 Grub 都有。</p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/archives/55/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>糟透的澳洲经济</title>
		<link>http://log.dongsheng.org/archives/46</link>
		<comments>http://log.dongsheng.org/archives/46#comments</comments>
		<pubDate>Sat, 02 May 2009 04:20:04 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[Life]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/archives/46</guid>
		<description><![CDATA[去年中国对原材料近乎饥渴的需求，使得西澳经济一路飘红，经济增长率达到连发展中国家都咂舌的 6.3%，钱哪来的？都是压榨中国老百姓的。 今年形势逆转，一方面中国对资源需求降低，另一方面是席卷全球的金融危机，西澳的金融、IT、矿业公司都风光不在，最近不断听到有人失业的消息，听起来让人很沮丧，澳洲经济这样下去，不知何年何月才能走出低谷。 我们公司还好，最近贴出招聘两个程序员的广告，短短一周，就有收到十几个应聘申请，看来最近失业的人太多了，要知道当初我找工作的时候，招聘广告贴了半年才有人应聘。 公司的人越来越多了，我的交流水平依然低下，问题的根源还是英语，主要体现在有想法表达不好，听不懂同事开得小玩笑……要求得良好发展，最关键的还是英语，得加把劲了。]]></description>
			<content:encoded><![CDATA[<p>去年中国对原材料近乎饥渴的需求，使得西澳经济一路飘红，经济增长率达到连发展中国家都咂舌的 6.3%，钱哪来的？都是压榨中国老百姓的。</p>
<p>今年形势逆转，一方面中国对资源需求降低，另一方面是席卷全球的金融危机，西澳的金融、IT、矿业公司都风光不在，最近不断听到有人失业的消息，听起来让人很沮丧，澳洲经济这样下去，不知何年何月才能走出低谷。</p>
<p>我们公司还好，最近贴出招聘两个程序员的广告，短短一周，就有收到十几个应聘申请，看来最近失业的人太多了，要知道当初我找工作的时候，招聘广告贴了半年才有人应聘。</p>
<p>公司的人越来越多了，我的交流水平依然低下，问题的根源还是英语，主要体现在有想法表达不好，听不懂同事开得小玩笑……要求得良好发展，最关键的还是英语，得加把劲了。</p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/archives/46/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>在提交源码前检测调试代码</title>
		<link>http://log.dongsheng.org/archives/57</link>
		<comments>http://log.dongsheng.org/archives/57#comments</comments>
		<pubDate>Wed, 29 Apr 2009 07:37:01 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[cvs]]></category>
		<category><![CDATA[firephp]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/archives/57</guid>
		<description><![CDATA[做 Ajax 开发最大的痛苦就是调试不易，尤其是 PHP 脚本跟远程服务器交互中的调试更是不易，还好有 FirePHP，有热心人做了 FirePHP 的 Moodle 绑定，目前这个补丁还没有提交到 CVS，所以一不小心我就把调式代码放在源码里忘了去掉，然后别的开发者 update 以后就会得到一个未定义函数错误，必须想办法避免这个错误了。 首先在 vim 配置文件中加入 match ErrorMsg /echo_fb/ 这将 echo_fb 函数标记为错误，警醒我提交前要去掉。这招显然不够狠，我要是连看都不看就把 vim 关了怎么办？最有效的办法还是在提交前用 grep 搜索文件，所有有了这个 shell 脚本： ci (){ if [ $# -eq 0 ]; then echo "CVS CHECKIN: No arguments entered."; return 1 else echo "Checking in file(s): ${@:2}"; echo "Working ..."; if [...]]]></description>
			<content:encoded><![CDATA[<p>做 Ajax 开发最大的痛苦就是调试不易，尤其是 PHP 脚本跟远程服务器交互中的调试更是不易，还好有 <a href="http://www.firephp.org/">FirePHP</a>，有热心人做了 FirePHP 的<a href="http://tracker.moodle.org/browse/MDL-16371"> Moodle 绑定</a>，目前这个补丁还没有提交到 CVS，所以一不小心我就把调式代码放在源码里忘了去掉，然后别的开发者 update 以后就会得到一个未定义函数错误，必须想办法避免这个错误了。</p>
<p>首先在 vim 配置文件中加入</p>
<pre>
match ErrorMsg /echo_fb/
</pre>
<p>这将 echo_fb 函数标记为错误，警醒我提交前要去掉。这招显然不够狠，我要是连看都不看就把 vim 关了怎么办？最有效的办法还是在提交前用 grep 搜索文件，所有有了这个 shell 脚本：</p>
<pre>
ci (){
    if [ $# -eq 0 ]; then
        echo "CVS CHECKIN: No arguments entered.";
        return 1
    else
        echo "Checking in file(s): ${@:2}";
        echo "Working ...";
        if [ "$(grep "echo_fb" ${@:2})" ]; then
            echo 'Remove debug code firstly';
        else
            cvs ci -m "\"$1\"" ${@:2}
        fi

    fi
}
</pre>
<p>这样基本就没问题了。</p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/archives/57/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>换了 Gmail 帐户</title>
		<link>http://log.dongsheng.org/archives/18</link>
		<comments>http://log.dongsheng.org/archives/18#comments</comments>
		<pubDate>Fri, 17 Apr 2009 17:03:21 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[Life]]></category>
		<category><![CDATA[gmail]]></category>
		<category><![CDATA[google]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/?p=18</guid>
		<description><![CDATA[以前用的 Gmail 邮箱已经垃圾泛滥，因为曾经用来接收 CVS 更新，邮件列表，所以邮箱容量到了百分之三十多，最麻烦的是别人问完我邮箱地址还总要带上一句“这名啥意思啊”，算了，还是换个自己名字的邮箱吧，dongsheng@gmail.com 当然被无情的注册掉了，于是我用这个：，在 Google 注册用户名我就从来没顺心过。 Gmail 邮箱对我来说最有价值的功能是无敌的全文检索，我常用来搜索代码段来快速定位 Issue number（或者反过来），屡试不爽，所以把以前的邮件倒到新邮箱就是必须的任务。另外，我用以前邮箱注册了太多太多网络服务，所以得把没来得及修改联系邮箱的邮件转发到新邮箱： 1. 在 Accounts 标签里找 Get mail from other accounts，然后把前 Gmail 帐号加上，这个收取挺慢的，一次收 200 封，我从下午一直收到现在还差四千多封。 在我做这件变态的事的时候，我发现自己一点也不孤单：Migrate All Your Old Gmail to a New Gmail Address，还有 Consolidate Multiple Email Addresses with Gmail。 2. 在 Forwarding and POP/IMAP 中设置新的邮件转发地址。 3. 最后还要设置一下自己的马甲： 4. 启用 Gmail labs 里的 Filter [...]]]></description>
			<content:encoded><![CDATA[<p>以前用的 Gmail 邮箱已经垃圾泛滥，因为曾经用来接收 CVS 更新，邮件列表，所以邮箱容量到了百分之三十多，最麻烦的是别人问完我邮箱地址还总要带上一句“这名啥意思啊”，算了，还是换个自己名字的邮箱吧，dongsheng@gmail.com 当然被无情的注册掉了，于是我用这个：<img class="picasa" src="http://lh4.ggpht.com/_ItjVZAOwvt8/SehEQbc-8eI/AAAAAAAAABM/ny8ayta9jIo/s512/image.png" alt="email logo" />，在 Google 注册用户名我就从来没顺心过。</p>
<p>Gmail 邮箱对我来说最有价值的功能是无敌的全文检索，我常用来搜索代码段来快速定位 Issue number（或者反过来），屡试不爽，所以把以前的邮件倒到新邮箱就是必须的任务。另外，我用以前邮箱注册了太多太多网络服务，所以得把没来得及修改联系邮箱的邮件转发到新邮箱：<br />
1. 在 Accounts 标签里找 Get mail from other accounts，然后把前 Gmail 帐号加上，这个收取挺慢的，一次收 200 封，我从下午一直收到现在还差四千多封。<br />
在我做这件变态的事的时候，我发现自己一点也不孤单：<a href="http://lifehacker.com/352401/migrate-all-your-old-gmail-to-a-new-gmail-address">Migrate All Your Old Gmail to a New Gmail Address</a>，还有 <a href="http://lifehacker.com/376367/consolidate-multiple-email-addresses-with-gmail">Consolidate Multiple Email Addresses with Gmail</a>。<br />
2. 在 Forwarding and POP/IMAP 中设置新的邮件转发地址。<br />
3. 最后还要设置一下自己的马甲：<br />
<img class="picasa" src="http://lh3.ggpht.com/_hFhhiuJJ9FU/SejAuv9oaFI/AAAAAAAAAVE/bJLOTXocWk0/s512/Chromium-gmail.jpg" alt="undefined" /><br />
4. 启用 Gmail labs 里的 Filter import/export，把过滤器都导入到新邮箱。</p>
<p>这还只是个开始，我还得处理 Google Picasa，Google Reader，Google Maps（我存了大量地址）还有我所有的联系人资料，还好，这里的数据都可以导入导出。</p>
<p>我非常沮丧的发现，Google 已经无情的渗入到我生活中的每个部分，我的帐单，好友，工作，住址等等私密信息全部存储在 Google 这张网中，Google 的用户粘度比 Windows 强太多，没有 Windows，我用 Linux 或者 Mac 都能过得更好，但如果没有 Google 该怎么办？我有点忧虑了。</p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/archives/18/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[LCOTW] netstat</title>
		<link>http://log.dongsheng.org/archives/52</link>
		<comments>http://log.dongsheng.org/archives/52#comments</comments>
		<pubDate>Thu, 16 Apr 2009 03:51:45 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[System]]></category>
		<category><![CDATA[LCOTW]]></category>
		<category><![CDATA[netstat]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/?p=52</guid>
		<description><![CDATA[LCOTW (Linux Commands Of The Week) Tag 下是总结 Linux 常用命令的文章。 netstat 是用来检测网络信息的工具。 当直接在终端输入 netsate，可以看到两部分输出 Active Internet connections 和 Active UNIX domain sockets，其中 Proto 栏表示所使用的协议 RefCnt 引用计数使用本连接的进程数，State 表示接口状态。 显示已经建立的端口： netstat -n 显示所有端口： netstat -a 显示正在监听的端口： netstat -lnep p 选项表示显示 PID/Program n 选项强制表示用数字显示地址，不进行解析 e 选项表示显示扩展信息，比不加 e 多了 user 和 inode 信息 显示本机路由表： netstat -nr 显示接口信息： netstat -i [...]]]></description>
			<content:encoded><![CDATA[<p>LCOTW (<strong>L</strong>inux <strong>C</strong>ommands <strong>O</strong>f <strong>T</strong>he <strong>W</strong>eek) Tag 下是总结 Linux 常用命令的文章。</p>
<p>netstat 是用来检测网络信息的工具。<br />
当直接在终端输入 netsate，可以看到两部分输出 Active Internet connections 和 Active UNIX domain sockets，其中 Proto 栏表示所使用的协议 RefCnt 引用计数使用本连接的进程数，State 表示接口状态。</p>
<p>显示已经建立的端口：</p>
<pre>netstat -n</pre>
<p>显示所有端口：</p>
<pre>netstat -a</pre>
<p>显示正在监听的端口：</p>
<pre>netstat -lnep</pre>
<p>p 选项表示显示 PID/Program<br />
n 选项强制表示用数字显示地址，不进行解析<br />
e 选项表示显示扩展信息，比不加 e 多了 user 和 inode 信息</p>
<p>显示本机路由表：</p>
<pre>netstat -nr</pre>
<p>显示接口信息：</p>
<pre>netstat -i</pre>
<p>netstat 常和 awk 结合来统计连接数：</p>
<pre>netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'</pre>
<p>[via <a href="http://blog.s135.com/post/269/"> Nginx 0.5.31 + PHP 5.2.4（FastCGI）搭建可承受3万以上并发连接数，胜过Apache 10倍的Web服务器</a>]</p>
<pre>netstat -an |awk '/LISTEN/{next};/^tcp/{s=split($5, N,":"); \
A[N[s-1]]++} END{ for (a in A) print a, A[a]}'</pre>
<p>[via <a href="http://www.hiadmin.com/%E7%AE%80%E5%8D%95%E7%BB%84%E5%90%88%E7%94%A8awk%E8%BF%87%E6%BB%A4%E6%9F%A5%E7%9C%8Bnetstat-%E8%BF%9E%E6%8E%A5%E6%95%B0/">用awk过滤查看netstat 连接数</a>]</p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/archives/52/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>快速锁定 Mac</title>
		<link>http://log.dongsheng.org/archives/54</link>
		<comments>http://log.dongsheng.org/archives/54#comments</comments>
		<pubDate>Thu, 16 Apr 2009 02:07:55 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[System]]></category>
		<category><![CDATA[dashboard]]></category>
		<category><![CDATA[lock]]></category>
		<category><![CDATA[mac]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/?p=54</guid>
		<description><![CDATA[有时候我要离开 Mac，但不想别人乱动我电脑，用 Shift-Command-Option-Q 注销的话成本太高，Mac 上需要设置一下才有象 Windows Win+L 锁定屏幕的功能。 第一种方法是安装 Locker，这是一个 Dashboard widget，要锁定的时候，进入 Dashboard，然后点 Locker 的图标就可以快速锁定 第二种方法是使用 keychain 的 menubar 图标，首先打开 Utilities 中的 Keychain access 然后用 cmd+, 打开属性设置，勾选 Show status in menu bar， 然后就可以在 menubar 中快速锁定了，]]></description>
			<content:encoded><![CDATA[<p>有时候我要离开 Mac，但不想别人乱动我电脑，用 Shift-Command-Option-Q 注销的话成本太高，Mac 上需要设置一下才有象 Windows Win+L 锁定屏幕的功能。<br />
第一种方法是安装 Locker，这是一个 Dashboard widget，要锁定的时候，进入 Dashboard，然后点 Locker 的图标就可以快速锁定<br />
第二种方法是使用 keychain 的 menubar 图标，首先打开 Utilities 中的 Keychain access<br />
<div class="wp-caption aligncenter" style="width: 819px"><a href="http://lh6.ggpht.com/_hFhhiuJJ9FU/SeYKyNgLHGI/AAAAAAAAAR0/ObKJ6lGrHLo/Utilities.jpg"><img alt="Keychain access.app" src="http://lh6.ggpht.com/_hFhhiuJJ9FU/SeYKyNgLHGI/AAAAAAAAAR0/ObKJ6lGrHLo/Utilities.jpg?imgmax=800" title="Utilities" width="809" height="488" /></a><p class="wp-caption-text">Keychain access.app</p></div><br />
然后用 cmd+, 打开属性设置，勾选 Show status in menu bar，<br />
<div class="wp-caption aligncenter" style="width: 606px"><a href="http://lh6.ggpht.com/_hFhhiuJJ9FU/SeYKynr5ZJI/AAAAAAAAASA/bbaKlTwVXQo/Preferences.jpg"><img alt="Preferences" src="http://lh6.ggpht.com/_hFhhiuJJ9FU/SeYKynr5ZJI/AAAAAAAAASA/bbaKlTwVXQo/Preferences.jpg?imgmax=800" title="Preferences" width="596" height="341" /></a><p class="wp-caption-text">Preferences</p></div><br />
然后就可以在 menubar 中快速锁定了，<br />
<div class="wp-caption aligncenter" style="width: 418px"><a href="http://lh5.ggpht.com/_hFhhiuJJ9FU/SeYKzNmOcyI/AAAAAAAAASI/5e93H8JmKuk/Keychains.jpg"><img alt="Menu bar" src="http://lh5.ggpht.com/_hFhhiuJJ9FU/SeYKzNmOcyI/AAAAAAAAASI/5e93H8JmKuk/Keychains.jpg?imgmax=800" title="menubar" width="408" height="261" /></a><p class="wp-caption-text">Menu bar</p></div></p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/archives/54/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Fcitx 和 dropbox 双双崩溃</title>
		<link>http://log.dongsheng.org/archives/51</link>
		<comments>http://log.dongsheng.org/archives/51#comments</comments>
		<pubDate>Tue, 07 Apr 2009 07:16:03 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[System]]></category>
		<category><![CDATA[dropbox]]></category>
		<category><![CDATA[fcitx]]></category>
		<category><![CDATA[linux]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/?p=51</guid>
		<description><![CDATA[昨天 ArchLinux 更新了，好像 xorg 和 gnome 都升级了小数点后的若干位，更新完以后忘了重启。 今天上班开机，发现 dropbox 不工作了，以前也出过这种毛病，我把 $HOME/.dropbox 和 $HOME/.dropbox-dist 删除以后重装就没事了，这次是连图形界面都起不来，运行 $HOME/.dropbox-dist/dropboxd，报了一个符号未定义错误： ImportError: /usr/lib/libgdk-x11-2.0.so.0: undefined symbol: XRRGetScreenResourcesCurrent 怀疑是 API 变了，到 dropbox 官网论坛报告，找到一个 0.6.504 的 RC 版，下载安装一试，问题竟然解决了。 然后 Fcitx 也罢工了，这次报了一个段错误就直接死翘翘了，我猜又是 API 的问题，于是到 Google Code 上下载最新源码， 编译安装，问题消失。 最后得赞一下 Dropbox，实在太方便了，已经成了 vim 之后第二个我在 Windows，MAC，Linux 都必装的软件。]]></description>
			<content:encoded><![CDATA[<p>昨天 ArchLinux 更新了，好像 xorg 和 gnome 都升级了小数点后的若干位，更新完以后忘了重启。</p>
<p>今天上班开机，发现 dropbox 不工作了，以前也出过这种毛病，我把 $HOME/.dropbox 和 $HOME/.dropbox-dist 删除以后重装就没事了，这次是连图形界面都起不来，运行 $HOME/.dropbox-dist/dropboxd，报了一个符号未定义错误：</p>
<pre>
ImportError: /usr/lib/libgdk-x11-2.0.so.0: undefined symbol: XRRGetScreenResourcesCurrent
</pre>
<p>怀疑是 API 变了，到 dropbox 官网论坛报告，找到一个 <a href="http://dl.getdropbox.com/u/17/dropbox-lnx.x86-0.6.504.tar.gz">0.6.504</a> 的 RC 版，下载安装一试，问题竟然解决了。</p>
<p>然后 Fcitx 也罢工了，这次报了一个段错误就直接死翘翘了，我猜又是 API 的问题，于是到 <a href="http://code.google.com/p/fcitx/source/checkout">Google Code</a> 上下载最新源码， 编译安装，问题消失。</p>
<p>最后得赞一下 <a href="https://www.getdropbox.com/referrals/NTE4MjUwMDk">Dropbox</a>，实在太方便了，已经成了 vim 之后第二个我在 Windows，MAC，Linux 都必装的软件。</p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/archives/51/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Taskbar stuck in classic mode (Windows XP SP3)</title>
		<link>http://log.dongsheng.org/archives/50</link>
		<comments>http://log.dongsheng.org/archives/50#comments</comments>
		<pubDate>Tue, 07 Apr 2009 02:53:20 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[System]]></category>
		<category><![CDATA[theme]]></category>
		<category><![CDATA[uxtheme]]></category>
		<category><![CDATA[windows]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/?p=50</guid>
		<description><![CDATA[昨天给朋友装 Windows 发生一件匪夷所思的事，我替换了 c:\windows\system32\uxtheme.dll 为破解版本以使用第三方主题，但不幸弄错了破解文件的版本，连官方主题都失效了，这个容易，我到 XP 安装盘里找到 uxtheme.dl_，改名为 uxtheme.cab，解压得到原版 uxtheme.dll的，到 DOS 下替换以后重新登入 XP 发现窗口样式正常。 但任务栏却变成了经典样式，不管怎样都改不过来，怀疑是 c:\windows\system32\dllcache 的问题，把文件夹清空，问题依旧，把我弄的抓狂了，在网上狂搜，终于找到这个帖子：Taskbar &#038; Start Menu Refuse to theme &#8211; stuck in classic mode。四楼的就是正解，我在 DOS 下操作的时候，不小心在 c:\windows 下放了个重复的 uxtheme.dll，造成任务栏无法使用主题。删除这个文件以后问题解决。 希望本文对遇到同样问题的朋友有用。]]></description>
			<content:encoded><![CDATA[<p>昨天给朋友装 Windows 发生一件匪夷所思的事，我替换了 c:\windows\system32\uxtheme.dll 为破解版本以使用第三方主题，但不幸弄错了破解文件的版本，连官方主题都失效了，这个容易，我到 XP 安装盘里找到 uxtheme.dl_，改名为 uxtheme.cab，解压得到原版 uxtheme.dll的，到 DOS 下替换以后重新登入 XP 发现窗口样式正常。</p>
<p>但任务栏却变成了经典样式，不管怎样都改不过来，怀疑是 c:\windows\system32\dllcache 的问题，把文件夹清空，问题依旧，把我弄的抓狂了，在网上狂搜，终于找到这个帖子：<a href="http://www.anetforums.com/posts.aspx?ThreadIndex=40096">Taskbar &#038; Start Menu Refuse to theme &#8211; stuck in classic mode</a>。四楼的就是正解，我在 DOS 下操作的时候，不小心在 c:\windows 下放了个重复的 uxtheme.dll，造成任务栏无法使用主题。删除这个文件以后问题解决。</p>
<p>希望本文对遇到同样问题的朋友有用。</p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/archives/50/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PostgreSQL notes</title>
		<link>http://log.dongsheng.org/archives/48</link>
		<comments>http://log.dongsheng.org/archives/48#comments</comments>
		<pubDate>Fri, 03 Apr 2009 06:48:30 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[System]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/?p=48</guid>
		<description><![CDATA[在 Tracker 上有人报告 Moodle 的一个模块在 PostgreSQL 会报错，以前装 DSpace 时用过一次 PostgreSQL，现在全忘光了，所以这次得记下来。 # Create postgres user sudo adduser postgres # Create data directory sudo mkdir /usr/share/pgsql/data sudo chown -R postgres /usr/share/pgsql/data su - postgres # create initial databases initdb -D /usr/local/pgsql/data # launch server postgres -D /usr/local/pgsql/data >logfile 2>&#038;1 &#038; # create a database, or create it [...]]]></description>
			<content:encoded><![CDATA[<p>在 Tracker 上有人报告 Moodle 的一个模块在 PostgreSQL 会报错，以前装 DSpace 时用过一次 PostgreSQL，现在全忘光了，所以这次得记下来。</p>
<pre>
# Create postgres user
sudo adduser postgres
# Create data directory
sudo mkdir /usr/share/pgsql/data
sudo chown -R postgres /usr/share/pgsql/data
su - postgres
# create initial databases
initdb -D /usr/local/pgsql/data
# launch server
postgres -D /usr/local/pgsql/data >logfile 2>&#038;1 &#038;
# create a database, or create it by SQL
createdb moodle -E UNICODE -e
# create a super user with password
createuser dongsheng -s -d -r -P
psql moodle
# change user password
>alter role dongsheng set password="123456"
# create a database with utf-8 charset
>create database moodle_head WITH ENCODING 'UNICODE'
# create a database for a specfic role
>create database moodle_head OWNER root
# list all roles
>\du
# or
>SELECT rolname FROM pg_roles;
# list all databases
>\l
</pre>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/archives/48/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[LCOTW] luit &amp; iconv</title>
		<link>http://log.dongsheng.org/archives/45</link>
		<comments>http://log.dongsheng.org/archives/45#comments</comments>
		<pubDate>Thu, 02 Apr 2009 04:21:39 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[System]]></category>
		<category><![CDATA[LCOTW]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/?p=45</guid>
		<description><![CDATA[LCOTW (Linux Commands Of The Week) Tag 下是每周总结 Linux 命令用法的活动。 今天突发奇想用 ssh 登录水木论坛，问题是 Linux 的终端是 UTF-8 的，而水木是 GBK 编码，所以登进去以后全变成乱码了，在网上搜索了一下得知可以用 luit 在终端中实时转换编码到 UTF-8，比如登录水木的命令应该这么写： luit -encoding gbk ssh username@newsmth.net 另一个很有用的跟编码有关的命令是 iconv，典型的用法是： iconv -f cp936 -t UTF-8 -o file_utf8.txt file.txt 这个命令可以将 cp936（既 gb2312）编码的文件 file.txt 转换为 UTF-8 编码的 file_utf8.txt 不过我还找到给这个文件自动添加 BOM 的办法，所以通常是用 Python 做批量转换，代码为： import codecs filein = open(filename, [...]]]></description>
			<content:encoded><![CDATA[<p>LCOTW (<strong>L</strong>inux <strong>C</strong>ommands <strong>O</strong>f <strong>T</strong>he <strong>W</strong>eek) Tag 下是每周总结 Linux 命令用法的活动。<br />
今天突发奇想用 ssh 登录水木论坛，问题是 Linux 的终端是 UTF-8 的，而水木是 GBK 编码，所以登进去以后全变成乱码了，在网上搜索了一下得知可以用 luit 在终端中实时转换编码到 UTF-8，比如登录水木的命令应该这么写：</p>
<pre>
luit -encoding gbk ssh username@newsmth.net
</pre>
<p>另一个很有用的跟编码有关的命令是 iconv，典型的用法是：</p>
<pre>
iconv -f cp936 -t UTF-8 -o file_utf8.txt file.txt
</pre>
<p>这个命令可以将 cp936（既 gb2312）编码的文件 file.txt 转换为 UTF-8 编码的 file_utf8.txt<br />
不过我还找到给这个文件自动添加 BOM 的办法，所以通常是用 Python 做批量转换，代码为：</p>
<pre>
    import codecs
    filein = open(filename, 'r')
    string = ''
    for line in filein:
        string += line.decode('cp936').encode('utf-8')
    out = open(filename+'_utf8', 'w')
    out.write(codecs.BOM_UTF8)
    out.write(string)
</pre>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/archives/45/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>在 Gajim 上用 HTTPS 登录 Jabber</title>
		<link>http://log.dongsheng.org/archives/40</link>
		<comments>http://log.dongsheng.org/archives/40#comments</comments>
		<pubDate>Thu, 02 Apr 2009 02:55:43 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[System]]></category>
		<category><![CDATA[gajim]]></category>
		<category><![CDATA[openssl]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/?p=40</guid>
		<description><![CDATA[Pidgin 挂了，我既没用它登录非法网站，也没有通过它跟境外间谍组织联络，反正它是挂了，本来对它也没有好感，所以换成了 Gajim。 打算用 HTTPS 是因为前几天在 Twitter 上看到一个耸人听闻的消息：党国最新研发的 GFW 有了重置 HTTPS 连接的神力，这个难以置信的消息增强了我保护网络隐私的决心，以后聊天要用 HTTPS 加密，发邮件上 PGP，发文件用 SCP，QQ 聊天用 3DES 加密再发送，整死这帮整天偷看别人隐私的王八蛋。 问题是我把 Gtalk 登录设置成了 talk.google.com:5223 以后，显示无法连接，猜测是编译时候没加上绑定 SSL 的选项，于是从 SVN 上抓下最新的源码，看了一下 ./configure &#8211;help 的输出里根本就没有 SSL 的选项，到源码里搜了一通找到一个 pyopenssl_available 的函数，原来我没有装一个叫 pyOpenSSL 的库，从 SourceForge 上下载了这个库编译并安装，然后 Gajim 中就能使用 HTTPS 连接登录 Jabber 了。]]></description>
			<content:encoded><![CDATA[<p>Pidgin 挂了，我既没用它登录非法网站，也没有通过它跟境外间谍组织联络，反正它是挂了，本来对它也没有好感，所以换成了 Gajim。<br />
打算用 HTTPS 是因为前几天在 Twitter 上看到一个耸人听闻的消息：党国最新研发的 GFW 有了重置 HTTPS 连接的神力，这个难以置信的消息增强了我保护网络隐私的决心，以后聊天要用 HTTPS 加密，发邮件上 PGP，发文件用 SCP，QQ 聊天用 3DES 加密再发送，整死这帮整天偷看别人隐私的王八蛋。<br />
问题是我把 Gtalk 登录设置成了 talk.google.com:5223 以后，显示无法连接，猜测是编译时候没加上绑定 SSL 的选项，于是从 SVN 上抓下最新的源码，看了一下 ./configure &#8211;help 的输出里根本就没有 SSL 的选项，到源码里搜了一通找到一个 pyopenssl_available 的函数，原来我没有装一个叫 pyOpenSSL 的库，从 SourceForge 上下载了这个库编译并安装，然后 Gajim 中就能使用 HTTPS 连接登录 Jabber 了。</p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/archives/40/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[LCOTW] Netcat notes</title>
		<link>http://log.dongsheng.org/archives/39</link>
		<comments>http://log.dongsheng.org/archives/39#comments</comments>
		<pubDate>Tue, 17 Mar 2009 01:38:48 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[System]]></category>
		<category><![CDATA[LCOTW]]></category>
		<category><![CDATA[mldonkey]]></category>
		<category><![CDATA[netcat]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/?p=39</guid>
		<description><![CDATA[LCOTW (Linux Commands Of The Week) Tag 下是每周总结 Linux 命令用法的活动。 本文内容是 netcat tutorial 的简化中文版。 1. 端口扫描 netcat -v -w 2 -z localhost 20-80 -v 是 verbose 模式 -w 设置超时时间 -z 设置 Zero IO，在监听模式下，会拒绝所有连接，在访问模式下会在建立连接后马上断开 2. 踩点 netcat -v localhost 80 用这个命令可以查看 HTTP 连接的信息，输入 GET HTTP 构造一个非法请求以刺探服务器信息，我通常用 curl 来作这件事： curl -I localhost 3. 用 netcat 作后门 服务端（即被入侵端） [...]]]></description>
			<content:encoded><![CDATA[<p>LCOTW (<strong>L</strong>inux <strong>C</strong>ommands <strong>O</strong>f <strong>T</strong>he <strong>W</strong>eek) Tag 下是每周总结 Linux 命令用法的活动。<br />
本文内容是<a href="http://www.ol-service.com/sikurezza/doc/netcat_eng.pdf"> netcat tutorial</a> 的简化中文版。</p>
<p><strong>1. 端口扫描</strong><br />
netcat -v -w 2 -z localhost 20-80<br />
-v 是 verbose 模式<br />
-w 设置超时时间<br />
-z 设置 Zero IO，在监听模式下，会拒绝所有连接，在访问模式下会在建立连接后马上断开</p>
<p><strong>2. 踩点</strong><br />
netcat -v localhost 80<br />
用这个命令可以查看 HTTP 连接的信息，输入 GET HTTP 构造一个非法请求以刺探服务器信息，我通常用 curl 来作这件事：</p>
<pre>curl -I localhost</pre>
<p><strong>3. 用 netcat 作后门</strong><br />
服务端（即被入侵端）</p>
<pre>netcat -l -p 10001 -e bash</pre>
<p>如果服务端是 windows 就输入：</p>
<pre>netcat -l -p 10001 -e cmd</pre>
<p>在 GNU netcat 0.7.1 里面 -d 是开启 debug 模式的选项，但旧版里是 Tells Netcat to detach from the process we want it to run<br />
从客户端连接：</p>
<pre>netcat -v localhost 10001</pre>
<p><strong>4. 文件传输</strong><br />
在服务端：</p>
<pre>netcat -l -p 10001 > file.dat</pre>
<p>在客户端：</p>
<pre>netcat localhost 10001 < file_to_be_transfered.dat</pre>
<p>记住按 ctrl+c 终止传输，检查文件的 md5 是否一致。</p>
<p>补充一个关于 Mldonkey 的技巧，Mldonkey 支持 telnet 方式检查下载状态，但登入登出 telnet 太麻烦，用 netcat 可以简化这个过程：</p>
<pre> echo -e 'vd\nexit' | netcat localhost 4000</pre>
<p>谢谢 chroot 提供这个<a href="http://linuxtoy.org/archives/view-download-status-of-mldonkey.html#comment-106856">方法</a>。</p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/archives/39/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Movable Type 4 installation notes</title>
		<link>http://log.dongsheng.org/archives/37</link>
		<comments>http://log.dongsheng.org/archives/37#comments</comments>
		<pubDate>Tue, 17 Mar 2009 00:55:30 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[movabletype]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/?p=37</guid>
		<description><![CDATA[Installation 1. Uncompress movable type package, move mt-static folder to htdocs/ 2. Modify mt-config.cgi, choose your prefered DBI and remove the other chunk of code, add MailEncoding UTF-8 to mt-config.pl 3. Move all the other files to cgi-bin/mt/, assign executive right to cgi scripts 4. Access http://localhost/cgi-bin/mt/mt.cgi Theming 1. Modify the css file which can [...]]]></description>
			<content:encoded><![CDATA[<p>Installation<br />
1. Uncompress movable type package, move mt-static folder to htdocs/<br />
2. Modify mt-config.cgi, choose your prefered DBI and remove the other chunk of code, add</p>
<pre>MailEncoding UTF-8</pre>
<p> to mt-config.pl<br />
3. Move all the other files to cgi-bin/mt/, assign executive right to cgi scripts<br />
4. Access http://localhost/cgi-bin/mt/mt.cgi</p>
<p>Theming<br />
1. Modify the css file which can be located at static/themes-base/blog.css<br />
2. Remove &#8220;powered by&#8221; widget<br />
3. Modify template in admin page<br />
4. To backup templates, every template should be linked with a local file, then you can modify the files on disk to customize looking.</p>
<p>Plugins<br />
Comming soon</p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/archives/37/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Firefox 的地址栏检索功能</title>
		<link>http://log.dongsheng.org/archives/38</link>
		<comments>http://log.dongsheng.org/archives/38#comments</comments>
		<pubDate>Mon, 16 Mar 2009 07:17:49 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[System]]></category>
		<category><![CDATA[firefox]]></category>
		<category><![CDATA[search]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/?p=38</guid>
		<description><![CDATA[以前开会发现老板总是在地址栏输入 php function_name 来查找 PHP 函数，还以为他用了 Firefox 扩展，今天突然想起来问问他原来通过书签就能实现。 在书签中加入 http://php.net/%s，然后给这个书签设置一个叫 php 的关键字，这样在地址栏输入 php preg_match 就直接跳到 PHP 的文档页了，非常方便。 如法炮制出下面的书签： http://dict.cn/search.php?q=%s http://www.baidu.com/s?wd=%s http://docs.python.org/search.html?q=%s /** python 的搜索结果是 ajax 载入的，不过连个载入进度条都没有，老让我以为没有找到结果 */]]></description>
			<content:encoded><![CDATA[<p>以前开会发现老板总是在地址栏输入 php function_name 来查找 PHP 函数，还以为他用了 Firefox 扩展，今天突然想起来问问他原来通过书签就能实现。</p>
<p>在书签中加入 http://php.net/%s，然后给这个书签设置一个叫 php 的关键字，这样在地址栏输入 php preg_match 就直接跳到 PHP 的文档页了，非常方便。</p>
<p>如法炮制出下面的书签：</p>
<p>http://dict.cn/search.php?q=%s</p>
<p>http://www.baidu.com/s?wd=%s</p>
<p>http://docs.python.org/search.html?q=%s</p>
<p>/** python 的搜索结果是 ajax 载入的，不过连个载入进度条都没有，老让我以为没有找到结果 */</p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/archives/38/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mac OS X 上构建 PHP5</title>
		<link>http://log.dongsheng.org/archives/36</link>
		<comments>http://log.dongsheng.org/archives/36#comments</comments>
		<pubDate>Sat, 28 Feb 2009 04:47:44 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[System]]></category>
		<category><![CDATA[mac]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/?p=36</guid>
		<description><![CDATA[在安装 PHP 前先安装 Mysql，Apache2 我用的是 Mac 内置的那个。下载 PHP 5.2.9 源码，然后执行： ./configure &#8211;prefix=/usr/local &#8211;with-iconv &#8211;with-gd &#8211;with-xmlrpc &#8211;enable-zip &#8211;with-openssl=/usr &#8211;enable-ftp &#8211;enable-sockets &#8211;enable-mbstring &#8211;enable-bcmath &#8211;with-curl &#8211;with-zlib-dir=/usr &#8211;with-mysqli=/usr/local/mysql/bin/mysql_config &#8211;with-mysql=/usr/local/mysql &#8211;with-config-file-path=/etc/php.ini &#8211;with-apxs2=/usr/sbin/apxs 配置过程中会因为缺少某些开发包而出错，用 Mac port 安装一下就可以了 make &#038;&#038; sudo make install 这样创建的 libphp5.so 是无法被 Apache 载入的，需要用 lipo 处理一下 Apache 的二进制程序 /usr/sbin$ sudo cp httpd httpd-fat /usr/sbin$ sudo lipo httpd -thin [...]]]></description>
			<content:encoded><![CDATA[<p>在安装 PHP 前先安装 Mysql，Apache2 我用的是 Mac 内置的那个。下载 PHP 5.2.9 源码，然后执行：<br />
./configure &#8211;prefix=/usr/local &#8211;with-iconv &#8211;with-gd<br />
&#8211;with-xmlrpc &#8211;enable-zip &#8211;with-openssl=/usr &#8211;enable-ftp &#8211;enable-sockets<br />
&#8211;enable-mbstring &#8211;enable-bcmath &#8211;with-curl &#8211;with-zlib-dir=/usr<br />
&#8211;with-mysqli=/usr/local/mysql/bin/mysql_config<br />
&#8211;with-mysql=/usr/local/mysql<br />
&#8211;with-config-file-path=/etc/php.ini &#8211;with-apxs2=/usr/sbin/apxs<br />
配置过程中会因为缺少某些开发包而出错，用 Mac port 安装一下就可以了</p>
<p>make &#038;&#038; sudo make install</p>
<p>这样创建的 libphp5.so 是无法被 Apache 载入的，需要用 lipo 处理一下 Apache 的二进制程序</p>
<p>/usr/sbin$ sudo cp httpd httpd-fat<br />
/usr/sbin$ sudo lipo httpd -thin i386 -output httpd</p>
<p>完了重启 Apache 就可以使用了：<br />
sudo apachectl restart</p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/archives/36/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>闹心的 iPod Touch 坏点</title>
		<link>http://log.dongsheng.org/archives/35</link>
		<comments>http://log.dongsheng.org/archives/35#comments</comments>
		<pubDate>Thu, 19 Feb 2009 04:57:15 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[Gadget]]></category>
		<category><![CDATA[apple]]></category>
		<category><![CDATA[ipod]]></category>
		<category><![CDATA[warranty]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/?p=35</guid>
		<description><![CDATA[周日回澳洲，在机场免税店看到 iPod Touch 一台，仅售 299 澳元（合人民币 1350 左右），价格比较令人心动，马上买了一台出关，回家把玩几个小时，非常满意上网的效果，但不幸的是发现 App Store 图标下面有个坏点，看起来非常不爽，给免税店发了个邮件要求换机，但他们回复说必须找苹果换，到这里我就开始后悔了，如果在 JBHIFI 或者 DickSmith 买的话当场就换了，这免税店怎么这么麻烦呢。 于是找到苹果主页的 the Online Service Assistant，然后选 Set up online service or find other available options for your product，添了一通信息以后提交，没一会儿苹果给我回信答应给我换机，接着问题就来了，苹果给我一个打印邮递信息的页面，说是有个 label 在页面里，但我怎么找也找不到，难不成 label 指的就是这张页面，于是我带上这张页面和 iPod 去了邮局，但邮局工作员说不对，这个东西一点没用，于是给苹果打电话，接电话的又是该死的印度口音，叨叨半天就是说 label 就在那个页面啊。我想算了，周六去授权苹果店看看，让他们帮我寄吧。 打开 Google，搜了一下 &#8220;Dead pixel fixer&#8221; 找到一个说法，说死点也分两种一种是黑的，这种完全没救，另一种是白的，英文叫 struck pixel，运气好的话，可以通过快速变化屏幕颜色把死点冲开，我下载了那个快速闪动的视频文件，果然。。。没有效果。但也有人成功过：iPod stuck pixel fixer? 抱着最后希望打开那个邮递信息的页面，把页面一拖到底竟然发现了那个传说中的 label！原来这个 label 是个很大的图片文件，苹果傻了叭叽的把它放在页面最底部，在网速慢的情况下，根本意识不到下面还有一张图片，而且这图离上面的说明文字有很大一块空白，让我以为网页就那么多了。 [...]]]></description>
			<content:encoded><![CDATA[<p>周日回澳洲，在机场免税店看到 iPod Touch 一台，仅售 299 澳元（合人民币 1350 左右），价格比较令人心动，马上买了一台出关，回家把玩几个小时，非常满意上网的效果，但不幸的是发现 App Store 图标下面有个坏点，看起来非常不爽，给免税店发了个邮件要求换机，但他们回复说必须找苹果换，到这里我就开始后悔了，如果在 JBHIFI 或者 DickSmith 买的话当场就换了，这免税店怎么这么麻烦呢。</p>
<p>于是找到苹果主页的 the Online Service Assistant，然后选 Set up online service or find other available options for your product，添了一通信息以后提交，没一会儿苹果给我回信答应给我换机，接着问题就来了，苹果给我一个打印邮递信息的页面，说是有个 label 在页面里，但我怎么找也找不到，难不成 label 指的就是这张页面，于是我带上这张页面和 iPod 去了邮局，但邮局工作员说不对，这个东西一点没用，于是给苹果打电话，接电话的又是该死的印度口音，叨叨半天就是说 label 就在那个页面啊。我想算了，周六去授权苹果店看看，让他们帮我寄吧。</p>
<p>打开 Google，搜了一下 &#8220;Dead pixel fixer&#8221; 找到一个说法，说死点也分两种一种是黑的，这种完全没救，另一种是白的，英文叫 struck pixel，运气好的话，可以通过快速变化屏幕颜色把死点冲开，我下载了那个快速闪动的视频文件，果然。。。没有效果。但也有人成功过：<a href="http://forums.ilounge.com/showthread.php?t=148919">iPod stuck pixel fixer?</a></p>
<p>抱着最后希望打开那个邮递信息的页面，把页面一拖到底竟然发现了那个传说中的 label！原来这个 label 是个很大的图片文件，苹果傻了叭叽的把它放在页面最底部，在网速慢的情况下，根本意识不到下面还有一张图片，而且这图离上面的说明文字有很大一块空白，让我以为网页就那么多了。</p>
<p>今早带着那张显示地址信息的 label 去了 Australia Post，终于成功寄出 iPod（记住只把主机寄出去，耳机数据线之类的自己留着），希望能尽快拿到一个无缺陷的新机器 <img src='http://log.dongsheng.org/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>&#8211;<br />
更新：</p>
<p>今天收到苹果给换的新 iPod Touch，这次没有坏点了，从上周三从悉尼发货，到珀斯共费了五个工作日，整个过程苹果做得还算贴心，给出一个网页追踪产品的维修状态，货寄出以后也给了 Australia Post 的追踪号码。但愿不要再出啥问题，换来换去半个月就进去了。</p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/archives/35/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>使用 SSH Tunnel 翻墙 SSH/MyEnTunnel/Putty</title>
		<link>http://log.dongsheng.org/archives/34</link>
		<comments>http://log.dongsheng.org/archives/34#comments</comments>
		<pubDate>Mon, 16 Feb 2009 04:23:08 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[System]]></category>
		<category><![CDATA[hostmonster]]></category>
		<category><![CDATA[MyEnTunnel]]></category>
		<category><![CDATA[putty]]></category>
		<category><![CDATA[ssh]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/?p=34</guid>
		<description><![CDATA[回国一个月，受尽了 GFW 的折磨，装了个 Gladder 聊以度日，但限制也很多，比如担心自己的隐私安全，下载不方便，速度缓慢等等，更坏的消息是澳洲也要开始搞网络过滤了，所以得未雨绸缪设置一个 SSH Tunnel。 在虚拟主机端的配置 刚买的 Hostmonster 虚拟主机就派上了用场，默认情况下 SSH Access 是不开启的，于是跟在线客服联系，让他开通 SSH 支持，并把护照复印件或其它有效证件发给他，然后 SSH 就激活了。 在 Hostmonster 的 cPanel 中导入自己的公钥，到本地电脑把私钥存在 ~/.ssh/id_rsa 中，就可以实现无密码登录了。 对于一般的 sshd 公钥登陆配置是在 /etc/ssh/sshd_config 中添加 AuthorizedKeysFile %h/.ssh/authorized_keys 然后在 ~/.ssh/authorized_keys 中添加公钥，Hostmonster 是自动处理了。 本地设置 本地要做两件事，建立 SSH Tunnel 通道和设置浏览器使用 SOCKS v5 代理。 Windows 系统 如果是用 putty，用如下命令即可建立 ssh tunnel： plink -N -D 8080 -l [...]]]></description>
			<content:encoded><![CDATA[<p>回国一个月，受尽了 GFW 的折磨，装了个 Gladder 聊以度日，但限制也很多，比如担心自己的隐私安全，下载不方便，速度缓慢等等，更坏的消息是<a href="http://nocleanfeed.com/learn.html">澳洲也要开始搞网络过滤了</a>，所以得未雨绸缪设置一个 SSH Tunnel。</p>
<h3>在虚拟主机端的配置</h3>
<p>刚买的 Hostmonster 虚拟主机就派上了用场，默认情况下 SSH Access 是不开启的，于是跟在线客服联系，让他开通 SSH 支持，并把护照复印件或其它有效证件发给他，然后 SSH 就激活了。</p>
<p>在 Hostmonster 的 cPanel 中导入自己的公钥，到本地电脑把私钥存在 ~/.ssh/id_rsa 中，就可以实现无密码登录了。</p>
<p>对于一般的 sshd 公钥登陆配置是在 /etc/ssh/sshd_config 中添加</p>
<pre>
AuthorizedKeysFile %h/.ssh/authorized_keys
</pre>
<p>然后在 ~/.ssh/authorized_keys 中添加公钥，Hostmonster 是自动处理了。</p>
<h3>本地设置</h3>
<p>本地要做两件事，建立 SSH Tunnel 通道和设置浏览器使用 SOCKS v5 代理。</p>
<h4>Windows 系统</h4>
<p>如果是用 <a href="http://www.chiark.greenend.org.uk/~sgtatham/putty/">putty</a>，用如下命令即可建立 ssh tunnel：</p>
<pre>
plink -N -D 8080 -l dongsheng -pw thepassword -v dongsheng.org
</pre>
<p>然后在火狐或者 IE 中设置 SOCKS v5 代理为 127.0.0.1:8080。</p>
<p>Windows 上最简单的办法是使用 <a href="http://nemesis2.qx.net/pages/MyEnTunnel">MyEnTunnel</a>，直接在图形界面中添上 ssh 服务器地址，用户名密码，然后点连接就轻松创建了 ssh tunnel。</p>
<p>对于 Firefox 来说有不少很棒的代理扩展，我觉得最棒的是 <a href="https://addons.mozilla.org/en-US/firefox/addon/11009">AutoProxy</a>，它维护了一个黑名单列表（对GFW来说是黑名单），只有在列表里的网站才会使用代理访问，一般的网站都是直接访问。</p>
<p>还要有注意的一点是在 Firefox 的 about:config 里要把 network.proxy.socks_remote_dns  设置为 true，不然会遭遇 DNS 劫持。</p>
<h4>Linux</h4>
<p>在终端里输入：</p>
<pre>
ssh -N -D 8080 -l dongsheng dongsheng.org
# -v 可以输出更多连接信息
#ssh -N -v -D 8080 -l dongsheng dongsheng.org
</pre>
<p>这就建立了一个本地 SOCKS v5 代理，在火狐中设置 SOCKS v5 类代理为 127.0.0.1:8080 就可以使用了。</p>
<ul>
<li>-N 是禁止执行远程命令</li>
<li>-v 是输出调试信息，用于测试结果</li>
<li>-D 设置转发端口</li>
<li>-l 是自己的登录名</li>
</ul>
<p>补充：</p>
<ul>
<li>在远程主机上运行一个命令并退出：
<pre>
plink -l root -pw thepassword -v dongsheng.org "/etc/rc.d/fastcgi restart"
</pre>
</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/archives/34/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>遇见山寨机</title>
		<link>http://log.dongsheng.org/archives/42</link>
		<comments>http://log.dongsheng.org/archives/42#comments</comments>
		<pubDate>Mon, 09 Feb 2009 02:58:54 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[Gadget]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/?p=42</guid>
		<description><![CDATA[在网上搜了一下“老人手机”，得到的结果令人沮丧，无非是些早就退市的破机器，还美其名曰“经济、实用”。猪头也该知道，对于老人来说，手机最重要的是清晰的大字，洪亮的铃声和尽量简单的功能，但看看现在市场上的手机，能满足这些条件的机器还真罕见，可能老人手机市场实在太小，这些大厂也就忘了“以人为本”的台词。 在我陷入绝望的时候，我想到了传说中著名的富有中国特色的山寨机，为什么选山寨机？ 第一，牛逼无敌的大屏幕，人年纪大了，视力普遍下降，大屏幕绝对不是装饰，话说山寨机的屏幕精细度没法和 N 记手机比，但你也受够了 N 记小气的屏幕尺寸了吧，何况对于老人来说，还是看得清楚最实在。 第二，君不见山寨机惊天地泣鬼神的喇叭输出功率，莫说当铃声，动不动三声道恐怕当扩音喇叭也能胜任，轻松应付任何嘈杂环境。但切记，别用“月亮之上”当铃声（http://zn.sj.91.com/content/2009-01-22/20090122183956516.shtml）。 第三，无敌电量，虽说电池容量虚标（要是真的，两块就能当汽车电瓶了），但事实是，山寨机普遍拥有超人的待机时间，我的 E71 号称 N 记的无敌待机时间，但也不过区区二三天耳，面对山寨机毫无竞争力。老人普遍对电气产品缺乏认识，也没法总记得给手机充电，在这种情况下，待机时间就是很重要的指标了。 第四，功能，尽管 MTK 平台比较低俗，但大多功能非常实用，比如拨号语音提示、短信真人发音、收音机、电视……那些要靠第三方软件才能支持这些功能的所谓智能机还是留给 Geek 用吧，此“智能”真非彼智能。 第五，价格便宜，再牛逼的山寨机也不过区区千元，一下买两个，一年坏一个或丢一个也能用两年啊。 唯一不确定的是电池安全问题，这几天搞搞极限“测试”。]]></description>
			<content:encoded><![CDATA[<p>在网上搜了一下“老人手机”，得到的结果令人沮丧，无非是些早就退市的破机器，还美其名曰“经济、实用”。猪头也该知道，对于老人来说，手机最重要的是清晰的大字，洪亮的铃声和尽量简单的功能，但看看现在市场上的手机，能满足这些条件的机器还真罕见，可能老人手机市场实在太小，这些大厂也就忘了“以人为本”的台词。</p>
<p>在我陷入绝望的时候，我想到了传说中著名的富有中国特色的山寨机，为什么选山寨机？</p>
<p>第一，牛逼无敌的大屏幕，人年纪大了，视力普遍下降，大屏幕绝对不是装饰，话说山寨机的屏幕精细度没法和 N 记手机比，但你也受够了 N 记小气的屏幕尺寸了吧，何况对于老人来说，还是看得清楚最实在。</p>
<p>第二，君不见山寨机惊天地泣鬼神的喇叭输出功率，莫说当铃声，动不动三声道恐怕当扩音喇叭也能胜任，轻松应付任何嘈杂环境。但切记，别用“月亮之上”当铃声（http://zn.sj.91.com/content/2009-01-22/20090122183956516.shtml）。</p>
<p>第三，无敌电量，虽说电池容量虚标（要是真的，两块就能当汽车电瓶了），但事实是，山寨机普遍拥有超人的待机时间，我的 E71 号称 N 记的无敌待机时间，但也不过区区二三天耳，面对山寨机毫无竞争力。老人普遍对电气产品缺乏认识，也没法总记得给手机充电，在这种情况下，待机时间就是很重要的指标了。</p>
<p>第四，功能，尽管 MTK 平台比较低俗，但大多功能非常实用，比如拨号语音提示、短信真人发音、收音机、电视……那些要靠第三方软件才能支持这些功能的所谓智能机还是留给 Geek 用吧，此“智能”真非彼智能。</p>
<p>第五，价格便宜，再牛逼的山寨机也不过区区千元，一下买两个，一年坏一个或丢一个也能用两年啊。</p>
<p>唯一不确定的是电池安全问题，这几天搞搞极限“测试”。</p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/archives/42/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>在 Mac OS X 用 OpenSSL 加密文件</title>
		<link>http://log.dongsheng.org/archives/33</link>
		<comments>http://log.dongsheng.org/archives/33#comments</comments>
		<pubDate>Mon, 02 Feb 2009 16:46:48 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[System]]></category>
		<category><![CDATA[mac]]></category>
		<category><![CDATA[openssl]]></category>
		<category><![CDATA[security]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/?p=33</guid>
		<description><![CDATA[OpenSSL 是个非常有用的 Unix 工具，即可以用来生成 DSA 和 RSA 公私钥对，也可以用来生成消息摘要。 当我们需要保存某些机密信息的时候，OpenSSL 可以用来充当有用的加密工具。比如需要加密 readme.txt 中的机要信息，可以用 3-DES 进行加密： openssl des3 -in readme.txt -out readme.des 解密时使用命令： openssl des3 -d -in readme.des -out readme.plain 其它加密算法也可以使用，详表见：OpenSSL Manual。]]></description>
			<content:encoded><![CDATA[<p>OpenSSL 是个非常有用的 Unix 工具，即可以用来生成 DSA 和 RSA 公私钥对，也可以用来生成消息摘要。</p>
<p>当我们需要保存某些机密信息的时候，OpenSSL 可以用来充当有用的加密工具。比如需要加密 readme.txt 中的机要信息，可以用 3-DES 进行加密：</p>
<pre>
openssl des3 -in readme.txt -out readme.des
</pre>
<p>解密时使用命令：</p>
<pre>
openssl des3 -d -in readme.des -out readme.plain
</pre>
<p>其它加密算法也可以使用，详表见：<a href="http://www.openssl.org/docs/apps/openssl.html">OpenSSL Manual</a>。</p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/archives/33/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>第一次自己装机</title>
		<link>http://log.dongsheng.org/archives/32</link>
		<comments>http://log.dongsheng.org/archives/32#comments</comments>
		<pubDate>Sat, 17 Jan 2009 09:32:05 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[Gadget]]></category>
		<category><![CDATA[diy]]></category>
		<category><![CDATA[pc]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/?p=32</guid>
		<description><![CDATA[在国内习惯于在装机店让老板装，国外的服务费是很高的，装一台电脑收费一百五十澳元，还是自己动手，丰衣足食（感谢大帅同学的电脑成为我的实验品），简略记一下安装步骤。 1. 把 CPU 和内存插在主板上，CPU 是夹在主板上的（我对 CPU 的安装还停在奔腾时代），然后风扇固定在主板上，并把电源接在主板上。 2. 除掉机器上的接口隔板，换上主板自带的。 3. 把主板固定在机箱上，这里可能要用到两个支撑柱。 4. 把电源接到主板上，包括主板电源和 CPU 电源。 5. 装上硬盘和光驱。 6. 独立显卡，现在的独立显卡一般需要独立电源，别忘了装上 7. 最麻烦的是安装乱七八糟的面板接口线，前面板耳机接口，USB 接口，大多数都可以说明书中找到，前面板耳机接口可能会显示不匹配： 我这里的对应关系是： 01:port1L &#8212; MIC2 02:aud_gnd &#8212; AGND 03:port1R &#8212; MIC_PWR 04:presence# 05:port2R &#8212; BLINE.out.R 06:sense1_return &#8212; LINE.OUT.R 07:sense_send 08:key 09:port2L &#8212; BLINE.OUT.L 10:sense2_return &#8212; LINE.OUT.L 参考： 1. 菜鸟晋级必修功课！图解Intel电脑组装全过程 2. 常用主板前置音频接法详细设置]]></description>
			<content:encoded><![CDATA[<p>在国内习惯于在装机店让老板装，国外的服务费是很高的，装一台电脑收费一百五十澳元，还是自己动手，丰衣足食（感谢大帅同学的电脑成为我的实验品），简略记一下安装步骤。<br />
1. 把 CPU 和内存插在主板上，CPU 是夹在主板上的（我对 CPU 的安装还停在奔腾时代），然后风扇固定在主板上，并把电源接在主板上。<br />
2. 除掉机器上的接口隔板，换上主板自带的。<br />
3. 把主板固定在机箱上，这里可能要用到两个支撑柱。<br />
4. 把电源接到主板上，包括主板电源和 CPU 电源。<br />
5. 装上硬盘和光驱。<br />
6. 独立显卡，现在的独立显卡一般需要独立电源，别忘了装上<br />
7. 最麻烦的是安装乱七八糟的面板接口线，前面板耳机接口，USB 接口，大多数都可以说明书中找到，前面板耳机接口可能会显示不匹配：<br />
我这里的对应关系是：<br />
01:port1L &#8212; MIC2<br />
02:aud_gnd &#8212; AGND<br />
03:port1R &#8212; MIC_PWR<br />
04:presence#<br />
05:port2R &#8212; BLINE.out.R<br />
06:sense1_return &#8212; LINE.OUT.R<br />
07:sense_send<br />
08:key<br />
09:port2L &#8212; BLINE.OUT.L<br />
10:sense2_return &#8212; LINE.OUT.L</p>
<p>参考：<br />
1. <a href="http://diy.yesky.com/cpu/330/2521830.shtml">菜鸟晋级必修功课！图解Intel电脑组装全过程</a><br />
2. <a href="http://bbs.e-lsw.com/showtopic-6901.aspx">常用主板前置音频接法详细设置</a></p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/archives/32/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>原来 Mac 自带了 PHP</title>
		<link>http://log.dongsheng.org/archives/31</link>
		<comments>http://log.dongsheng.org/archives/31#comments</comments>
		<pubDate>Sun, 11 Jan 2009 09:30:47 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[mac]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/?p=31</guid>
		<description><![CDATA[1. 启用 Apache，System Preferences -> Sharing -> Web Sharing 2. 编辑 /etc/apache2/httpd.conf，把启用 php5 的那一行，反注释掉，然后修改 DirectoryIndex，加上 index.php，然后创建 php 配置文件： mv /etc/php.ini.default /etc/php.ini 重启 apache： apachectl restart 3. 文档根目录在 /Library/WebServer/Documents，看了看 phpninfo 发现支持的扩展还不算太少]]></description>
			<content:encoded><![CDATA[<p>1. 启用 Apache，System Preferences -> Sharing -> Web Sharing<br />
2. 编辑 /etc/apache2/httpd.conf，把启用 php5 的那一行，反注释掉，然后修改 DirectoryIndex，加上 index.php，然后创建 php 配置文件：</p>
<pre>
mv /etc/php.ini.default /etc/php.ini
</pre>
<p>重启 apache：</p>
<pre>
apachectl restart
</pre>
<p>3. 文档根目录在 /Library/WebServer/Documents，看了看 phpninfo 发现支持的扩展还不算太少 <img src='http://log.dongsheng.org/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/archives/31/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mac 不支持 seq</title>
		<link>http://log.dongsheng.org/archives/30</link>
		<comments>http://log.dongsheng.org/archives/30#comments</comments>
		<pubDate>Sun, 11 Jan 2009 09:29:59 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[System]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[mac]]></category>
		<category><![CDATA[shell]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/?p=30</guid>
		<description><![CDATA[以前在 Linux 上用这样一个脚本： str='..' level='./../' for i in `seq 5 1`; do eval "alias '$str=cd $level'" level=$level'../' str=$str'.' done 可以方便的点几个点就蹦到上面的 n 层目录，但 MAC 上没有 seq 这个 shell 命令（确切的说是 FreeBSD 没这个命令），问了管理 FreeBSD 包的朋友才知道，可以使用 jot 代替 seq，问题解决。]]></description>
			<content:encoded><![CDATA[<p>以前在 Linux 上用这样一个脚本：</p>
<pre>
str='..'
level='./../'
for i in `seq 5 1`;
do
    eval "alias '$str=cd $level'"
    level=$level'../'
    str=$str'.'
done
</pre>
<p>可以方便的点几个点就蹦到上面的 n 层目录，但 MAC 上没有 seq 这个 shell 命令（确切的说是 FreeBSD 没这个命令），问了管理 FreeBSD 包的朋友才知道，可以使用 <a href="http://developer.apple.com/DOCUMENTATION/DARWIN/Reference/ManPages/man1/jot.1.html">jot</a> 代替 seq，问题解决。</p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/archives/30/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Console Versus the Terminal</title>
		<link>http://log.dongsheng.org/archives/29</link>
		<comments>http://log.dongsheng.org/archives/29#comments</comments>
		<pubDate>Wed, 07 Jan 2009 09:28:19 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[System]]></category>
		<category><![CDATA[console]]></category>
		<category><![CDATA[terminal]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/?p=29</guid>
		<description><![CDATA[一直搞不清 Terminal 和 Console 的区别，今天在 Learning Cocoa with Objective-C 中看到这样一段终于搞明白了。 The Terminal application is the command-line interface to Mac OS X. It presents an interface to what old-school Unix users call the &#8220;shell.&#8221; In a shell, you can issue any command line you want and see it executed. In contrast, the Console is a simple [...]]]></description>
			<content:encoded><![CDATA[<p>一直搞不清 Terminal 和 Console 的区别，今天在 <a href="http://oreilly.com/catalog/9780596003012/">Learning Cocoa with Objective-C</a> 中看到这样一段终于搞明白了。</p>
<blockquote><p>
The Terminal application is the command-line interface to Mac OS X. It presents an interface to what old-school Unix users call the &#8220;shell.&#8221; In a shell, you can issue any command line you want and see it executed. In contrast, the Console is a simple log of messages printed to STDOUT by various programs, which do not end up anywhere else. In the Console, you will typically see messages from various background processes and, sometimes, debug statements from GUI programs.</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/archives/29/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>这过去的一年</title>
		<link>http://log.dongsheng.org/archives/41</link>
		<comments>http://log.dongsheng.org/archives/41#comments</comments>
		<pubDate>Mon, 05 Jan 2009 02:57:16 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[Life]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/?p=41</guid>
		<description><![CDATA[2008 过得非常缓慢，这一年生活发生了很多变化，在 2009 的边上，简单的流水账一下。 1. 出国 我从没一个人出过远门，这是第一次到坐十小时飞机才能抵达的地方，常回家看看成了一个物理上都极困难的事情。这是好事，我学会了出国的第一课：没有后路，只能往前走。国外的消费是高昂的，我得学着在这里生存下去。刚开始有点令人沮丧，大部分时间，我都在等待，等待开学等待成绩等待工作等待机会，后来证明—— 等待也是一种学习。 不久就开始了打工和上学。上课第一天就得到一个令人沮丧消息，我上的这是个语言学校是个黑校，会毫无理由的推迟学生的毕业时间以赚取学费，碰到一个山东老乡告诉我，学校无故给他延长了半年的学期，不但耽误了大学入学还要交付七千多澳币的学费，所以他决定回国了……另外一个坏消息是我要到 Fremantal 市校区上课，每天来回三小时，我不得不每天7点起床…… 就这样开始了在这个学校战战兢兢的两个月的学习生涯。这两个月里我只相信一个道理：只要自己做的尽善尽美，学校没理由给我延期。结果是，我按时毕业了，还要回了学校多收我的一个月学费，两个月的学习对我的语言没有显著提高，比这重要的是，我明白了这样的道理：在国外，别指望别人能帮到自己，任何事都要靠自己去抗争去改变，简单的讲只是两个字——自强，不错，我们的生活中充满令人沮丧的事实，束手无策是件很痛苦的事情，但我有个信念，世上没有无法改变的东西，认真的去想对策，积极的行动必然会让现状朝好的方面转变，这个道理谁都懂，但我是从那时候才真的开始实践的，信则成。 关于打工，我曾经写过一篇长文，现在看来还是有点触动：http://log.dongsheng.org/archives/3 2008 年二月，我正式进入大学开始研究生课程，澳洲的计算机课程极其无聊，第一学期的三门课分别是：专家实践（讲狗屁的计算机专家职业道德，花近三千澳币学这个？）、项目管理（背了几百页项目管理的过程和理论，完全 bullshit）、局域网设计（我不是大二就学过了吗？）。我很郁闷，光上课就能培养出硕士吗？澳大利亚怎么还能搞出个只上课就能拿学位的研究生？扯淡。说露骨点，到澳洲读研究生，就是花钱换绿卡，绿卡能否到手还得看澳洲政府的脸色，目前的政策是再交了两年高昂学费后，你还得考出雅思四个七或者有一年相关工作经验才能顺利移民（这两个条件都不是一般的难）。 我决定走别的路，投了大量简历，涵盖了软件开发、网络管理、系统管理，我运气超好，零八年三月我就找到一份兼职 PHP 开发的职位（详见：http://log.dongsheng.org/archives/4）。我热爱这份工作，原因在于，我既可以实践我已有的知识并能学到新的技术，在与别人的交流中还能有效的提供英语水平。但在学校，我得不到提高的满足感——一周只在学校呆三个上午，你觉得能学到什么？学校声称把更多时间给学生去研究，但那些弱智的作业啊，我看不到任何的创新和研究的元素在里面（http://log.dongsheng.org/archives/5）。于是矛盾激发，发生了下面的事。 2. 退学 学生签证当然是不可能退学的，一旦中断课程我就必须回国，但我还不打算在一事无成的情况下回国，所以我找老板谈：我想全职工作，老板很高兴，非常欢迎你全职工作，但我们没有处理签证的经验，你需要自己完成所有的 Paperwork，我们提供一切支持。我花了不少时间查学生签证转工作签证的信息，但没有找到有用的信息，我决定带上所有的支持材料去移民局咨询，interview 时发生一件很传奇的事，接待我的老外竟然精通汉语，拿着我的毕业证书看了一会，问我济南是不是山东的？然后说他没去过济南，但在青岛呆过几天，我听的目瞪口呆，半天才反应出应该怎么回答……总之很顺利，我递交材料不到一周就收到了移民局通知——我的临时居民签证顺利签发了！真没想到移民局工作效率竟然这么高。 关于中断学业是否值得的问题，我曾跟父母解释过很多遍，我可以在任何适当的时机回学校办理重新入学手续，我以前修完的课程依然有效。并且，澳洲的高等教育与中国有很大差异，在职教育和普通全日制教育在本质上完全相同，我可以在 2009 年重新入学，事实上，这也我正打算做的事，毕竟，这张文凭还是很有分量的。一边工作一边上学要更辛苦一点，但解决了工作经验和物质生活等等问题，显然利远大于弊。 3. 学开车 自此在国内学开车险些把车开到墙上以后我就再没动过学开车的年头，但在澳洲，没车实在太痛苦了，这里没有中国那样满大街跑的出租车（必须打电话预约），地广人稀所以工作的地方离住的地方也非常远。 所以决定买车，买回车后的第一件事竟然是：我还不会开呢！我堂弟的房东是个驾车教练，我就开始跟他学，一次还不到小时，收费五十澳币，真是贵。 我的技术非常糟糕，学开车的第一个月就撞坏了路灯，倒车时蹭到一辆马六，还在十字路口熄火+倒车……险象环生，可没有出大问题。2009 年我一定要把开车技术练好，拿到正式驾照就去换个新四驱车，要是拿不到，就还开现在这个好了 4. Roadtrip 零八年底跟两个朋友开车去了 Broome，西澳洲最北部，行程三千多公里，路上看尽了西澳洲的繁华和荒凉，这是我经历的最有价值的一次旅行，路上看到了粉色的天然湖，热带的对流雨还有一个非常难以发现的地中海，拍了四五百张照片，改天整理一下传上来。 零九年我还要来一次 Roadtrip，这次可能要开到墨尔本 5. 告别 PC 圣诞前我买了一台 Macbook，准备淘汰掉我用了近两年的 DELL XPS，吸引我的不仅是新 Macbook 精湛的做工（整个机身没有一道缝），还有基于 UNIX 的 Mac OS X，昨天买了 displayport 2 [...]]]></description>
			<content:encoded><![CDATA[<p>2008 过得非常缓慢，这一年生活发生了很多变化，在 2009 的边上，简单的流水账一下。</p>
<p>1. 出国</p>
<p>我从没一个人出过远门，这是第一次到坐十小时飞机才能抵达的地方，常回家看看成了一个物理上都极困难的事情。这是好事，我学会了出国的第一课：没有后路，只能往前走。国外的消费是高昂的，我得学着在这里生存下去。刚开始有点令人沮丧，大部分时间，我都在等待，等待开学等待成绩等待工作等待机会，后来证明—— 等待也是一种学习。</p>
<p>不久就开始了打工和上学。上课第一天就得到一个令人沮丧消息，我上的这是个语言学校是个黑校，会毫无理由的推迟学生的毕业时间以赚取学费，碰到一个山东老乡告诉我，学校无故给他延长了半年的学期，不但耽误了大学入学还要交付七千多澳币的学费，所以他决定回国了……另外一个坏消息是我要到 Fremantal 市校区上课，每天来回三小时，我不得不每天7点起床……</p>
<p>就这样开始了在这个学校战战兢兢的两个月的学习生涯。这两个月里我只相信一个道理：只要自己做的尽善尽美，学校没理由给我延期。结果是，我按时毕业了，还要回了学校多收我的一个月学费，两个月的学习对我的语言没有显著提高，比这重要的是，我明白了这样的道理：在国外，别指望别人能帮到自己，任何事都要靠自己去抗争去改变，简单的讲只是两个字——自强，不错，我们的生活中充满令人沮丧的事实，束手无策是件很痛苦的事情，但我有个信念，世上没有无法改变的东西，认真的去想对策，积极的行动必然会让现状朝好的方面转变，这个道理谁都懂，但我是从那时候才真的开始实践的，信则成。</p>
<p>关于打工，我曾经写过一篇长文，现在看来还是有点触动：<a href="http://log.dongsheng.org/archives/3">http://log.dongsheng.org/archives/3</a></p>
<p>2008 年二月，我正式进入大学开始研究生课程，澳洲的计算机课程极其无聊，第一学期的三门课分别是：专家实践（讲狗屁的计算机专家职业道德，花近三千澳币学这个？）、项目管理（背了几百页项目管理的过程和理论，完全 bullshit）、局域网设计（我不是大二就学过了吗？）。我很郁闷，光上课就能培养出硕士吗？澳大利亚怎么还能搞出个只上课就能拿学位的研究生？扯淡。说露骨点，到澳洲读研究生，就是花钱换绿卡，绿卡能否到手还得看澳洲政府的脸色，目前的政策是再交了两年高昂学费后，你还得考出雅思四个七或者有一年相关工作经验才能顺利移民（这两个条件都不是一般的难）。</p>
<p>我决定走别的路，投了大量简历，涵盖了软件开发、网络管理、系统管理，我运气超好，零八年三月我就找到一份兼职 PHP 开发的职位（详见：<a href="http://log.dongsheng.org/archives/4">http://log.dongsheng.org/archives/4</a>）。我热爱这份工作，原因在于，我既可以实践我已有的知识并能学到新的技术，在与别人的交流中还能有效的提供英语水平。但在学校，我得不到提高的满足感——一周只在学校呆三个上午，你觉得能学到什么？学校声称把更多时间给学生去研究，但那些弱智的作业啊，我看不到任何的创新和研究的元素在里面（<a href="http://log.dongsheng.org/archives/5">http://log.dongsheng.org/archives/5</a>）。于是矛盾激发，发生了下面的事。</p>
<p>2. 退学</p>
<p>学生签证当然是不可能退学的，一旦中断课程我就必须回国，但我还不打算在一事无成的情况下回国，所以我找老板谈：我想全职工作，老板很高兴，非常欢迎你全职工作，但我们没有处理签证的经验，你需要自己完成所有的 Paperwork，我们提供一切支持。我花了不少时间查学生签证转工作签证的信息，但没有找到有用的信息，我决定带上所有的支持材料去移民局咨询，interview 时发生一件很传奇的事，接待我的老外竟然精通汉语，拿着我的毕业证书看了一会，问我济南是不是山东的？然后说他没去过济南，但在青岛呆过几天，我听的目瞪口呆，半天才反应出应该怎么回答……总之很顺利，我递交材料不到一周就收到了移民局通知——我的临时居民签证顺利签发了！真没想到移民局工作效率竟然这么高。</p>
<p>关于中断学业是否值得的问题，我曾跟父母解释过很多遍，我可以在任何适当的时机回学校办理重新入学手续，我以前修完的课程依然有效。并且，澳洲的高等教育与中国有很大差异，在职教育和普通全日制教育在本质上完全相同，我可以在 2009 年重新入学，事实上，这也我正打算做的事，毕竟，这张文凭还是很有分量的。一边工作一边上学要更辛苦一点，但解决了工作经验和物质生活等等问题，显然利远大于弊。</p>
<p>3. 学开车</p>
<p>自此在国内学开车险些把车开到墙上以后我就再没动过学开车的年头，但在澳洲，没车实在太痛苦了，这里没有中国那样满大街跑的出租车（必须打电话预约），地广人稀所以工作的地方离住的地方也非常远。</p>
<p>所以决定买车，买回车后的第一件事竟然是：我还不会开呢！我堂弟的房东是个驾车教练，我就开始跟他学，一次还不到小时，收费五十澳币，真是贵。</p>
<p>我的技术非常糟糕，学开车的第一个月就撞坏了路灯，倒车时蹭到一辆马六，还在十字路口熄火+倒车……险象环生，可没有出大问题。2009 年我一定要把开车技术练好，拿到正式驾照就去换个新四驱车，要是拿不到，就还开现在这个好了 <img src='http://log.dongsheng.org/wp-includes/images/smilies/icon_sad.gif' alt=':-(' class='wp-smiley' /> </p>
<p>4. Roadtrip</p>
<p>零八年底跟两个朋友开车去了 Broome，西澳洲最北部，行程三千多公里，路上看尽了西澳洲的繁华和荒凉，这是我经历的最有价值的一次旅行，路上看到了粉色的天然湖，热带的对流雨还有一个非常难以发现的地中海，拍了四五百张照片，改天整理一下传上来。</p>
<p>零九年我还要来一次 Roadtrip，这次可能要开到墨尔本 <img src='http://log.dongsheng.org/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>5. 告别 PC</p>
<p>圣诞前我买了一台 Macbook，准备淘汰掉我用了近两年的 DELL XPS，吸引我的不仅是新 Macbook 精湛的做工（整个机身没有一道缝），还有基于 UNIX 的 Mac OS X，昨天买了 displayport 2 dvi 的转接口（荒唐！一根线四十五澳币），把 Macbook 接到了我的大显示器上，告别 PC 的工作算是圆满完成了。</p>
<p>这差不多就是零八年对我影响最深远的一些事，先写这么多吧，有时间可能还要再修改一下</p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/archives/41/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>出游</title>
		<link>http://log.dongsheng.org/archives/43</link>
		<comments>http://log.dongsheng.org/archives/43#comments</comments>
		<pubDate>Tue, 23 Dec 2008 02:59:40 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[Life]]></category>
		<category><![CDATA[travel]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/?p=43</guid>
		<description><![CDATA[明天跟朋友驾车出游，Perth 向北。 我其实一点也不热衷旅游，比起在路上颠簸疲顿，我心里更希望躺在床上懒懒度过十几天的圣诞假日，花与平日同样多的时间在电脑上，幻想这样就能驰骋世界，神游四方。但事实是，我很悲哀，科技让生活越来越多的电子化，我们用 Google Earth 周游世界，通过 Flickr 看别人的生活，用 iPod 听场音乐会或者在聊天室里和素未谋面的人倾谈，当感激科技带来的便利时，我们真的更幸福了吗？ 别忘了，外面有色彩真实的世界，有能拂过我脸的大沙漠的风，有可触摸的湿软沙滩、有可倾听的鸟语虫鸣还有一直延伸到蔚蓝天边的大马路。所以我得走出去，尝试逐步改变现在的生活。 叔本华说过这样一段让人触动的话： 一种平静欢愉的气质，快快乐乐的享受非常健全的体格，理知清明，生命活泼，洞彻事理，意欲温和，心地善良，这些都不是身份与财富所能促成或代替的。因为人最重要的在于他自己是什么。当我们独处的时候，也还是自己伴随自己，上面这些美好的性质既没有人能给你，也没有人能拿走，这些性质比我们所能占有的任何其他事物重要，甚至比别人看我们如何来得重要。]]></description>
			<content:encoded><![CDATA[<p>明天跟朋友驾车出游，Perth 向北。</p>
<p>我其实一点也不热衷旅游，比起在路上颠簸疲顿，我心里更希望躺在床上懒懒度过十几天的圣诞假日，花与平日同样多的时间在电脑上，幻想这样就能驰骋世界，神游四方。但事实是，我很悲哀，科技让生活越来越多的电子化，我们用 Google Earth 周游世界，通过 Flickr 看别人的生活，用 iPod 听场音乐会或者在聊天室里和素未谋面的人倾谈，当感激科技带来的便利时，我们真的更幸福了吗？</p>
<p>别忘了，外面有色彩真实的世界，有能拂过我脸的大沙漠的风，有可触摸的湿软沙滩、有可倾听的鸟语虫鸣还有一直延伸到蔚蓝天边的大马路。所以我得走出去，尝试逐步改变现在的生活。</p>
<p>叔本华说过这样一段让人触动的话：</p>
<p><strong>一种平静欢愉的气质，快快乐乐的享受非常健全的体格，理知清明，生命活泼，洞彻事理，意欲温和，心地善良，这些都不是身份与财富所能促成或代替的。因为人最重要的在于他自己是什么。当我们独处的时候，也还是自己伴随自己，上面这些美好的性质既没有人能给你，也没有人能拿走，这些性质比我们所能占有的任何其他事物重要，甚至比别人看我们如何来得重要。</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/archives/43/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>编译 PHP GD 模块</title>
		<link>http://log.dongsheng.org/archives/27</link>
		<comments>http://log.dongsheng.org/archives/27#comments</comments>
		<pubDate>Tue, 16 Dec 2008 09:20:31 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[System]]></category>
		<category><![CDATA[gd]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/?p=27</guid>
		<description><![CDATA[在编译 PHP 使用 &#8211;with-gd 选项无法正常将 GD 编译进 PHP，所以我尝试将 GD 编译成一个 PHP 扩展，方法如下： 1. 进入 PHP 源码 ./ext/gd 2. 运行 phpize 3. 进行 ./configure &#038;&#038; make &#038;&#038; make install 编译完成后修改 PHP 配置文件，设置本扩展的路径。 重启 Apache 问题依旧，查看 Apache 的错误日志，显示该模块无效，猜想可能是没有正确链接 GD 的支持库，看了一下 configure 的选项，意识到 libjpeg 和 libpgn 库没有安装，用 pacman 安装这两个库以后，重新编译 GD 库，问题解决。]]></description>
			<content:encoded><![CDATA[<p>在编译 PHP 使用 &#8211;with-gd 选项无法正常将 GD 编译进 PHP，所以我尝试将 GD 编译成一个 PHP 扩展，方法如下：<br />
1. 进入 PHP 源码 ./ext/gd<br />
2. 运行 phpize<br />
3. 进行 ./configure &#038;&#038; make &#038;&#038; make install<br />
编译完成后修改 PHP 配置文件，设置本扩展的路径。<br />
重启 Apache 问题依旧，查看 Apache 的错误日志，显示该模块无效，猜想可能是没有正确链接 GD 的支持库，看了一下 configure 的选项，意识到 libjpeg 和 libpgn 库没有安装，用 pacman 安装这两个库以后，重新编译 GD 库，问题解决。</p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/archives/27/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Windows NTFS 权限设置</title>
		<link>http://log.dongsheng.org/archives/28</link>
		<comments>http://log.dongsheng.org/archives/28#comments</comments>
		<pubDate>Wed, 10 Dec 2008 09:21:45 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[System]]></category>
		<category><![CDATA[asp]]></category>
		<category><![CDATA[ntfs]]></category>
		<category><![CDATA[windows]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/?p=28</guid>
		<description><![CDATA[今天不得不用一个 ASP 程序，折腾半天，ACCESS 总提示无法写入数据，猜想是 NTFS 分区上没有写权限，点右键找属性，却发现根本没有“安全”标签页，这可怎么办啊！在网上搜了半天终于搞明白，原来需要在文件管理器里关掉“使用简单共享”！]]></description>
			<content:encoded><![CDATA[<p>今天不得不用一个 ASP 程序，折腾半天，ACCESS 总提示无法写入数据，猜想是 NTFS 分区上没有写权限，点右键找属性，却发现根本没有“安全”标签页，这可怎么办啊！在网上搜了半天终于搞明白，原来需要在文件管理器里关掉“使用简单共享”！</p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/archives/28/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>DSpace 安装笔记</title>
		<link>http://log.dongsheng.org/archives/26</link>
		<comments>http://log.dongsheng.org/archives/26#comments</comments>
		<pubDate>Wed, 10 Dec 2008 09:18:08 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[dspace]]></category>
		<category><![CDATA[java]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/?p=26</guid>
		<description><![CDATA[DSpace 是被学术，非盈利，商业组织广泛应用的数字仓库管理软件，它可以管理包括文本，图片，动画，视频等各种数据文件，它是 BSD 协议下的开源软件。 DSpace 可以从源码或二进制包安装，我选择下载了一个 1.9 M 的二进制包，心里挺高兴，心想 Java 软件怎么做的这么小了？ 但一解压就看到一个 pom.xml，心里一凉，说完了，这个包是想用 maven 下载第三方库啊！进到根目录下的 [dspace] 目录，然后运行 mvn install，这会自动下载运行 dspace 所需要的所有包，下载了半天，这个只有 1.9M 的安装包变成了近 400M 的庞然大物。在上面的步骤里 maven 只负责包依赖关系，然后要用 ant 把 dspace 安装到适当的位置，进入 [dspace]/target/dspace-{$version}-build.dir/，编辑 config/dspace.cfg，把 dspace.dir 设置成 /usr/share/dspace，其他选项都很简单，看看就明白了。 运行 ant fresh_install 把 dspace 安装到目标位置，在我的例子里 /usr/share/dspace/webapps 是相关 web 文件。 最后设置 [tomcat]/conf/server.xml 在 host 段中加入： &#60;Context path="/jspui" docBase="/usr/share/dspace/webapps/jspui" debug="1" [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.dspace.org/index.php/Introducing-DSpace/">DSpace</a> 是被学术，非盈利，商业组织广泛应用的数字仓库管理软件，它可以管理包括文本，图片，动画，视频等各种数据文件，它是 BSD 协议下的开源软件。</p>
<p>DSpace 可以从源码或二进制包安装，我选择下载了一个 1.9 M 的二进制包，心里挺高兴，心想 Java 软件怎么做的这么小了？<br />
但一解压就看到一个 pom.xml，心里一凉，说完了，这个包是想用 <a href="http://maven.apache.org/">maven</a> 下载第三方库啊！进到根目录下的 [dspace] 目录，然后运行 mvn install，这会自动下载运行 dspace 所需要的所有包，下载了半天，这个只有 1.9M 的安装包变成了近 400M 的庞然大物。在上面的步骤里 maven 只负责包依赖关系，然后要用 ant 把 dspace 安装到适当的位置，进入 [dspace]/target/dspace-{$version}-build.dir/，编辑 config/dspace.cfg，把 dspace.dir 设置成 /usr/share/dspace，其他选项都很简单，看看就明白了。<br />
运行 ant fresh_install 把 dspace 安装到目标位置，在我的例子里 /usr/share/dspace/webapps 是相关 web 文件。<br />
最后设置 [tomcat]/conf/server.xml 在 host 段中加入：</p>
<pre>
      &lt;Context path="/jspui" docBase="/usr/share/dspace/webapps/jspui" debug="1"
          reloadable="true" cachingAllowed="false"
          allowLinking="true"/&gt;
      &lt;!-- DEFINE A CONTEXT PATH FOR DSpace OAI User Interface --&gt;
      &lt;Context path="/oai" docBase="/usr/share/dspace/webapps/oai" debug="1"
          reloadable="true" cachingAllowed="false"
          allowLinking="true"/&gt;
</pre>
<p>启动 tomcat，然后浏览 http://localhost:8080/jspui。</p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/archives/26/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>编写 Nginx 启动脚本</title>
		<link>http://log.dongsheng.org/archives/25</link>
		<comments>http://log.dongsheng.org/archives/25#comments</comments>
		<pubDate>Sun, 07 Dec 2008 09:10:45 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[System]]></category>
		<category><![CDATA[nginx]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/?p=25</guid>
		<description><![CDATA[今天试了一下直接使用 php-cgi 启用 fastcgi 的脚本竟然又可以使用了，真奇怪。 写了一个自动启动脚本，放到这里做个备份： #!/sbin/runscript # Copyright 1999-2004 Gentoo Foundation # Distributed under the terms of the GNU General Public License, v2 or # later # $Header:$ NGINX_EXEC=/usr/sbin/nginx PHP_EXEC=/usr/bin/php-cgi depend() { need logger net } start () { ebegin "Starting FCGI Service" spawn-fcgi -a 127.0.0.1 -p 9000 -C 5 -f /usr/bin/php-cgi eend $? [...]]]></description>
			<content:encoded><![CDATA[<p>今天试了一下直接使用 php-cgi 启用 fastcgi 的脚本竟然又可以使用了，真奇怪。<br />
写了一个自动启动脚本，放到这里做个备份：</p>
<pre>
#!/sbin/runscript
# Copyright 1999-2004 Gentoo Foundation
# Distributed under the terms of the GNU General Public License, v2 or
# later
# $Header:$

NGINX_EXEC=/usr/sbin/nginx
PHP_EXEC=/usr/bin/php-cgi

depend() {
need logger net
}

start () {
ebegin "Starting FCGI Service"
spawn-fcgi -a 127.0.0.1 -p 9000 -C 5 -f /usr/bin/php-cgi
eend $?
ebegin "Starting Nginx"
start-stop-daemon --start --exec ${NGINX_EXEC}
eend $?
}

stop() {
ebegin "Stopping FCGI Service"
killall php-cgi
eend $?
ebegin "Stopping Nginx"
killall nginx
start-stop-daemon --stop --quiet --pidfile /var/run/nginx.pid
--exec $NGINX_EXEC
eend $?
}
</pre>
<p>然后把这个文件保存为 /etc/init.d/httpd 并加上执行权限。<br />
然后运行 rc-config add httpd default</p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/archives/25/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>利用公私钥实现无密码登录</title>
		<link>http://log.dongsheng.org/archives/24</link>
		<comments>http://log.dongsheng.org/archives/24#comments</comments>
		<pubDate>Sun, 07 Dec 2008 09:09:42 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[System]]></category>
		<category><![CDATA[cryptography]]></category>
		<category><![CDATA[security]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/?p=24</guid>
		<description><![CDATA[1. 先用 SecureCRT 创建 Openssl 格式的 公私钥 2. 上传公钥到 $HOME/.ssh/authorized_keys 3. 修改 /etc/ssh/sshd_config PubkeyAuthentication yes AuthorizedKeysFile .ssh/authorized_keys #这里是到用户根目录的相对路径 重启 sshd 服务 4. 在 SecureCRT 中设置使用密钥登录]]></description>
			<content:encoded><![CDATA[<p>1. 先用 SecureCRT 创建 Openssl 格式的 公私钥<br />
2. 上传公钥到 $HOME/.ssh/authorized_keys<br />
3. 修改 /etc/ssh/sshd_config</p>
<p>PubkeyAuthentication yes<br />
AuthorizedKeysFile .ssh/authorized_keys #这里是到用户根目录的相对路径</p>
<p>重启 sshd 服务<br />
4. 在 SecureCRT 中设置使用密钥登录</p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/archives/24/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>在 Gentoo 上安装 Nginx + php</title>
		<link>http://log.dongsheng.org/archives/23</link>
		<comments>http://log.dongsheng.org/archives/23#comments</comments>
		<pubDate>Sat, 06 Dec 2008 09:06:29 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[System]]></category>
		<category><![CDATA[fastcgi]]></category>
		<category><![CDATA[nginx]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/?p=23</guid>
		<description><![CDATA[从源码安装 Nginx ./configure --prefix=/usr --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx_error.log --http-log-path=/var/log/nginx_access.log --pid-path=/var/run/nginx.pid --http-client-body-temp-path=/var/tmp/nginx_client_body.tmp --http-proxy-temp-path=/var/tmp/nginx_proxy.tmp --http-fastcgi-temp-path=/var/tmp/nginx_fastcgi.tmp --with-http_stub_status_module --with-http_ssl_module --with-openssl=/usr/src/openssl （启用了监控和ssl模块，重新设置文件路径） make make install 注意，&#8211;with-openssl 指向的是 openssl 的完整源码树。 Nginx 的配置 在 server 段中加入 root 指令，指向网站根目录，然后把 location / 段改为： location / { stub_status on; access_log off; } 这样就能在首页显示状态信息了，在这里用作测试。 从源码安装 PHP 5.2.7 ./configure --prefix=/usr --with-config-file-path=/etc/php --with-curl=shared --with-curlwrappers --enable-fastcgi --enable-force-cgi-redirect --with-openssl=shared --with-mysql=shared --with-mysqli=shared --enable-zip=shared [...]]]></description>
			<content:encoded><![CDATA[<h4>从源码安装 Nginx</h4>
<pre>./configure --prefix=/usr --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx_error.log --http-log-path=/var/log/nginx_access.log --pid-path=/var/run/nginx.pid --http-client-body-temp-path=/var/tmp/nginx_client_body.tmp --http-proxy-temp-path=/var/tmp/nginx_proxy.tmp  --http-fastcgi-temp-path=/var/tmp/nginx_fastcgi.tmp --with-http_stub_status_module --with-http_ssl_module --with-openssl=/usr/src/openssl</pre>
<p>（启用了监控和ssl模块，重新设置文件路径）<br />
<code>make<br />
make install</code><br />
注意，&#8211;with-openssl 指向的是 openssl 的完整源码树。</p>
<h4>Nginx 的配置</h4>
<p>在 server 段中加入 root 指令，指向网站根目录，然后把 location / 段改为：</p>
<pre>location / {
  stub_status on;
  access_log off;
}</pre>
<p>这样就能在首页显示状态信息了，在这里用作测试。</p>
<h4>从源码安装 PHP 5.2.7</h4>
<pre>./configure --prefix=/usr --with-config-file-path=/etc/php --with-curl=shared --with-curlwrappers --enable-fastcgi --enable-force-cgi-redirect --with-openssl=shared --with-mysql=shared --with-mysqli=shared --enable-zip=shared --with-xmlrpc=shared --enable-mbstring --enable-pdo=shared --with-pdo-sqlite=shared --with-sqlite=shared --with-gd=shared --with-zlib
make
make install
cp php.ini-dist /etc/php/php.ini</pre>
<p>在这种情况下，模块会编译进 PHP 而不是作为模块动态加载，如果想要创建模块需要设置 shared 选项，比如我要把 PDO 作为模块加载：</p>
<pre>./configure --enable-pdo=shared --with-pdo-sqlite=shared --with-sqlite=shared</pre>
<p>如果是 apache 的话要加上  &#8211;with-apxs2 项以创建模块。</p>
<h4>设置 FASTCGI</h4>
<p>我尝试用 <a href="http://blog.kovyrin.net/2006/05/30/nginx-php-fastcgi-howto/">php-cgi 直接创建 FCGI 服务</a>，但无法成功，只好使用 lighttpd 的 spawn-fcgi 程序创建 FCGI 服务（这里偷懒用 emerge 装的 lighttpd）：</p>
<pre>spawn-fcgi -a 127.0.0.1 -p 9000 -C 5 -f /usr/bin/php-cgi</pre>
<p>最后修改 nginx 的配置文件使之调用 php FCGI 服务：</p>
<pre>location / {
 index index.php index.htm index.html;
}
location ~ .php$ {
 fastcgi_pass 127.0.0.1:9000;
 fastcgi_index index.php;
 include fastcgi_params;
 fastcgi_param SCRIPT_FILENAME /var/www$fastcgi_script_name;
}</pre>
<p>创建一个 phpinfo 页面测试一下吧！</p>
<h4>参考</h4>
<p><a href="http://wiki.codemongers.com/NginxInstallOptions">Nginx 编译参数说明</a><br />
<a href="http://php.mirrors.ilisys.com.au/manual/en/configure.php">PHP 编译参数说明</a><br />
<a href="http://blog.s135.com/post/366.htm">Nginx 0.7.x + PHP 5.2.6（FastCGI）搭建胜过Apache十倍的Web服务器（第4版）</a><br />
<a href="http://blog.kovyrin.net/2006/05/30/nginx-php-fastcgi-howto/">Nginx With PHP As FastCGI Howto</a></p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/archives/23/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Arch Linux Installation</title>
		<link>http://log.dongsheng.org/archives/22</link>
		<comments>http://log.dongsheng.org/archives/22#comments</comments>
		<pubDate>Tue, 02 Dec 2008 09:01:38 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[System]]></category>
		<category><![CDATA[archlinux]]></category>
		<category><![CDATA[linux]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/?p=22</guid>
		<description><![CDATA[通过 SSH 远程安装提示： ssh_exchange_identification 需要在 /etc/hosts.allows 中添加： ALL: 0.0.0.0/0.0.0.0 : allow 关于这个文件的详细配置，参见：http://linux.die.net/man/5/hosts.allow 键盘鼠标无法使用 Arch 的 xorg 升级出了不少问题，我用 hwd -xa 生成 xorg.conf 以后无法使用键盘鼠标，问题的关键是 hal 服务没有启动，以下是 LinuxSir 网友总结的修复办法： 1、注释掉Section &#8220;Files&#8221;中的RgbPath项 2、修改i810为intel（我原先用i810,现在只能用intel，根据你的自己设置） 3、注释掉Section &#8220;ServerLayout&#8221;中inputdevice项和所有Section “InputDevice” 4. rc.conf中的daemons添加hal 5 使用以上方法仍有问题的，请不要使用方法3，并将ServerFlags中的AutoAddDevices设为false Section &#8220;ServerFlags&#8221; Option &#8220;AutoAddDevices&#8221; &#8220;False&#8221; EndSection vim Arch 自带的 vi 不好使，我最需要的 clientserver feature 没有打开，所以只能下载源码自己编译。 vim 的 features 可以通过编辑 src/feature.h [...]]]></description>
			<content:encoded><![CDATA[<h4>通过 SSH 远程安装提示： ssh_exchange_identification</h4>
<p>需要在 /etc/hosts.allows 中添加：<br />
ALL: 0.0.0.0/0.0.0.0 : allow<br />
关于这个文件的详细配置，参见：<a href="http://linux.die.net/man/5/hosts.allow">http://linux.die.net/man/5/hosts.allow</a></p>
<h4>键盘鼠标无法使用</h4>
<p>Arch 的 xorg 升级出了不少问题，我用 hwd -xa 生成 xorg.conf 以后无法使用键盘鼠标，问题的关键是 hal 服务没有启动，以下是 LinuxSir 网友总结的<a href="http://www.linuxsir.org/bbs/thread339907.html">修复办法</a>：</p>
<blockquote><p>
1、注释掉Section &#8220;Files&#8221;中的RgbPath项<br />
2、修改i810为intel（我原先用i810,现在只能用intel，根据你的自己设置）<br />
3、注释掉Section &#8220;ServerLayout&#8221;中inputdevice项和所有Section “InputDevice”<br />
4. rc.conf中的daemons添加hal<br />
5 使用以上方法仍有问题的，请不要使用方法3，并将ServerFlags中的AutoAddDevices设为false<br />
Section &#8220;ServerFlags&#8221;<br />
Option &#8220;AutoAddDevices&#8221; &#8220;False&#8221;<br />
EndSection
</p></blockquote>
<h4>vim</h4>
<p>Arch 自带的 vi 不好使，我最需要的 clientserver feature 没有打开，所以只能下载源码自己编译。<br />
vim 的 features 可以通过编辑 src/feature.h 删改，记得一定要开启双字节支持！<br />
vim 的 <a href="http://www.vim.org/htmldoc/various.html#+feature-list">feature list</a>。<br />
vim 的 <a href="http://www.vim.org/htmldoc/usr_90.html">编译说明</a>。</p>
<h4>Bitlbee</h4>
<p>装了默认的 bitlbee 竟然不支持 join_chat，无奈只能下载源码编译。<br />
安装的时候使用 ./configure &#8211;help 看看协议的默认值，用不到的禁用。 Arch 把 xinetd 的配置文件放在 /etc/xinetd.d/ 下，建一个 bitlbee 的服务描述文件：</p>
<pre>
service bitlbee
{
       type = UNLISTED
       socket_type = stream
       protocol = tcp
       wait = no
       user = bitlbee
       group = bitlbee
       server = /usr/sbin/bitlbee
       port = 6667
       disable = no
}
</pre>
<h4>LAMP</h4>
<p>在 /etc/httpd/conf/httpd.conf 中加入：</p>
<pre>
LoadModule php5_module modules/libphp5.so
AddHandler php5-script php
Include conf/extra/php5_module.conf
</pre>
<p>然后修改 http 服务器根目录。<br />
还有个小问题是发现 php 无法读写一个 777 的文件夹，折腾了半天才想起 php 有个 open_basedir 选项，把要读写的文件路径加入，问题解决。<br />
对于 mysql：</p>
<pre>
mysql_ininstall_db
/usr/bin/mysqladmin -u root password 'new-password'
</pre>
<p>暂时就这些。</p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/archives/22/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>VMware server 1.0.* 在 2.6.27 内核上运行的问题</title>
		<link>http://log.dongsheng.org/archives/21</link>
		<comments>http://log.dongsheng.org/archives/21#comments</comments>
		<pubDate>Mon, 17 Nov 2008 08:58:41 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[System]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[vmware]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/?p=21</guid>
		<description><![CDATA[每次升级 Linux 内核，VMware 一定要闹出点事来无法运行，今天卸载了 2.0 安装 1.0.* 版本，连安装都没法进行了。 在网上搜索一下找到了 http://www.insecure.ws/2008/10/20/vmware-specific-specific-55x-and-kernel-2627，这个补丁包解决了 api 的不兼容问题。 用法： 安装 vmware 的时候会问你是否要运行 vmware-config.pl，选 no，然后运行补丁包里的 runme.pl。]]></description>
			<content:encoded><![CDATA[<p>每次升级 Linux 内核，VMware 一定要闹出点事来无法运行，今天卸载了 2.0 安装 1.0.* 版本，连安装都没法进行了。</p>
<p>在网上搜索一下找到了 http://www.insecure.ws/2008/10/20/vmware-specific-specific-55x-and-kernel-2627，这个补丁包解决了 api 的不兼容问题。</p>
<p>用法：<br />
安装 vmware 的时候会问你是否要运行 vmware-config.pl，选 no，然后运行补丁包里的 runme.pl。</p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/archives/21/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ubuntu 中启用 Apache Rewrite 模块</title>
		<link>http://log.dongsheng.org/archives/20</link>
		<comments>http://log.dongsheng.org/archives/20#comments</comments>
		<pubDate>Sun, 19 Oct 2008 08:57:36 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[System]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[rewrite_mod]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/?p=20</guid>
		<description><![CDATA[1. sudo a2enmod rewrite 2. sudo vi /etc/apache2/sites-available/default 3. 修改 AllowOverride none 为 AllowOverride all 4. sudo /etc/init.d/apache2 restart 5. 编辑 .htaccess 启用重写规则]]></description>
			<content:encoded><![CDATA[<p>1. sudo a2enmod rewrite<br />
2. sudo vi /etc/apache2/sites-available/default<br />
3. 修改 AllowOverride none 为 AllowOverride all<br />
4. sudo /etc/init.d/apache2 restart<br />
5. 编辑 .htaccess 启用重写规则</p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/archives/20/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>长假</title>
		<link>http://log.dongsheng.org/archives/19</link>
		<comments>http://log.dongsheng.org/archives/19#comments</comments>
		<pubDate>Sat, 04 Oct 2008 08:56:22 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[Life]]></category>
		<category><![CDATA[holiday]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/?p=19</guid>
		<description><![CDATA[从上周五一直玩到现在，放松了很多，脑子里面很多乱七八糟的东西整理的差不多了。在布里斯班呆了三天，参加了今年的 Moodle Moot AU，发生了一些事，零散的记一下。 1) 尴尬的 周四晚去参加宴会，进去发现所有人都穿的很正式，还有不少穿的礼服，只有我是披着一件破 T-Shirt 就进去了，还是唯一的亚洲人，太显眼了，丢大了。后来陆陆续续才来了几个跟我一样的“随意”的人，有图为证： 这件事的教训是我得赶紧买套西装了，虽然来了快一年了，但参加这种大的社交活动还是第一次，我完全不懂在这种场合应该干什么怎么办。西方礼仪跟中国差异太大，这个我得好好学习。 2) 郁闷的 有种广泛接受的偏见：在国外生活英语就会短时间提高。但现实是难以令人满意的，回到前面那个宴会，西方的人的习惯是在正式开饭前，端杯酒自由交流，话题无非是恭维、客气（有时候我觉得西方人比中国人还要虚伪），但信息量大环境嘈杂，远不同于我已经习惯的工作环境的语言交流，我完全没法融入到话题中。我同事说，不要沮丧，你刚来不到一年，而语言的提高是需要时间和精力投入的。如果你想快速提高，还是来杯白兰地吧 它会让你“觉得”英语提高了。 未来几年我没有太担心的东西，最难的关卡过得差不多了，把英语提高到 local 的水平或至少能提高到能跟 local 自由交流的水平是我得下大功夫办的事。 3) 开心的 看到这么多人来参加 Moodle Moot，我很惊讶，没想到会有这么多人使用我们开发的软件（不少与会者还是从新西兰来），我突然有了要把现在的工作长期做下去的决心。刚开始工作的时候，我很不喜欢 Moodle 的代码库，代码风格不一致，庞大，甚至杂乱，到现在看法改变了很多，不能老拿理想说事（有些问题是社区开发的硬伤），一方面 Moodle 的功能很强大，它是实现了一些我以前没想过 WEB 能做好的功能，比如 Comunity Hub，Repository，Portfolio，另一方面它的历史很久远，大量的历史遗留代码和早期设计问题对新功能的开发造成限制，开发过程实际上也是一个不断折中的过程，有些问题已是积重难返。在未来的一两年，我们会开发一个完全重写的版本 —— Moodle 3.0，或许它将不再是一个产品还是一个像 Facebook 的网络平台，可能现在考虑这些有点早了，我很期待这个充分发挥想象力的机会。 最后一天的中午有个 Session 还专门讲了我开发的 Repository API（我做了约百分之八十），我很高兴这个模块解决了不少人的难题，听到的一些好的意见我下周就会写到代码里。 4) OLPC 第一次把 OLPC 拿在手上，它硬件平平，只有 1G 硬盘（可能是固态硬盘），AMD CPU，有趣的是它的软件，一个基于 Linux 的操作系统，窗口管理器是叫做 Sugar（专用于 OLPC），上面带了很多有趣的聚合学习软件，我们带回 Perth [...]]]></description>
			<content:encoded><![CDATA[<p>从上周五一直玩到现在，放松了很多，脑子里面很多乱七八糟的东西整理的差不多了。在布里斯班呆了三天，参加了今年的 Moodle Moot AU，发生了一些事，零散的记一下。</p>
<p>1) 尴尬的<br />
周四晚去参加宴会，进去发现所有人都穿的很正式，还有不少穿的礼服，只有我是披着一件破 T-Shirt 就进去了，还是唯一的亚洲人，太显眼了，丢大了。后来陆陆续续才来了几个跟我一样的“随意”的人，有图为证：<br />
<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://farm4.static.flickr.com/3225/2911687082_4fbfcbda69.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px;" src="http://farm4.static.flickr.com/3225/2911687082_4fbfcbda69.jpg" alt="" border="0" /></a><br />
这件事的教训是我得赶紧买套西装了，虽然来了快一年了，但参加这种大的社交活动还是第一次，我完全不懂在这种场合应该干什么怎么办。西方礼仪跟中国差异太大，这个我得好好学习。</p>
<p>2) 郁闷的<br />
有种广泛接受的偏见：在国外生活英语就会短时间提高。但现实是难以令人满意的，回到前面那个宴会，西方的人的习惯是在正式开饭前，端杯酒自由交流，话题无非是恭维、客气（有时候我觉得西方人比中国人还要虚伪），但信息量大环境嘈杂，远不同于我已经习惯的工作环境的语言交流，我完全没法融入到话题中。我同事说，不要沮丧，你刚来不到一年，而语言的提高是需要时间和精力投入的。如果你想快速提高，还是来杯白兰地吧 <img src='http://log.dongsheng.org/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  它会让你“<span style="font-weight: bold;">觉得</span>”英语提高了。<br />
未来几年我没有太担心的东西，最难的关卡过得差不多了，把英语提高到 local 的水平或至少能提高到能跟 local 自由交流的水平是我得下大功夫办的事。</p>
<p>3) 开心的<br />
看到这么多人来参加 Moodle Moot，我很惊讶，没想到会有这么多人使用我们开发的软件（不少与会者还是从新西兰来），我突然有了要把现在的工作长期做下去的决心。刚开始工作的时候，我很不喜欢 Moodle 的代码库，代码风格不一致，庞大，甚至杂乱，到现在看法改变了很多，不能老拿理想说事（有些问题是社区开发的硬伤），一方面 Moodle 的功能很强大，它是实现了一些我以前没想过 WEB 能做好的功能，比如 Comunity Hub，Repository，Portfolio，另一方面它的历史很久远，大量的历史遗留代码和早期设计问题对新功能的开发造成限制，开发过程实际上也是一个不断折中的过程，有些问题已是积重难返。在未来的一两年，我们会开发一个完全重写的版本 —— Moodle 3.0，或许它将不再是一个产品还是一个像 Facebook 的网络平台，可能现在考虑这些有点早了，我很期待这个充分发挥想象力的机会。</p>
<p>最后一天的中午有个 Session 还专门讲了我开发的 Repository API（我做了约百分之八十），我很高兴这个模块解决了不少人的难题，听到的一些好的意见我下周就会写到代码里。</p>
<p>4) OLPC<br />
第一次把 OLPC 拿在手上，它硬件平平，只有 1G 硬盘（可能是固态硬盘），AMD CPU，有趣的是它的软件，一个基于 Linux 的操作系统，窗口管理器是叫做 Sugar（专用于 OLPC），上面带了很多有趣的聚合学习软件，我们带回 Perth 两台 OLPC，以后要在上面做测试开发。</p>
<p>5) Ubuntu<br />
Ubuntu 的流行程度超出了我的想象，与会的<span style="font-weight: bold;">开发者</span>，除了用 Mac 的就是 Ubuntu 了（没见有程序员用 Windows），我还发现一个家伙用的是 awesome 窗口管理器，Mac 和 Linux 的流行跟澳洲教育有关系，很多孩子从小就开始用 Linux 或者 Mac 学习甚至编程，在大学，你也可以发现运行着各种操作系统的机器，这点中国做的太差了。</p>
<p>6) 旅行<br />
我有点喜欢上澳大利亚了，打算明年中旬再到东岸玩一玩。</p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/archives/19/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP 的 OpenSSL 库</title>
		<link>http://log.dongsheng.org/archives/17</link>
		<comments>http://log.dongsheng.org/archives/17#comments</comments>
		<pubDate>Sat, 27 Sep 2008 03:23:02 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[cryptography]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/?p=17</guid>
		<description><![CDATA[书接上回，在研究 XML 签名之前先研究一下 OpenSSL 库。 签名和原理 PHP 签名的函数原型是： bool openssl_sign ( string $data , string &#038;$signature , mixed $priv_key_id [, int $signature_alg ] ) 大四时学的密码学全忘光了，用 Google CodeSearch 搜了一气 OpenSSL 的源代码才搞明白了签名的原理。 生成签名： 对 $data 按照 $signature_alg 设置的算法（默认是OPENSSL_ALGO_SHA1）进行 hash 运算 用私钥加密（$priv_key_id） $signature 就是产生的签名数据，连同 $data 发送给接收方 可用的 hash 算法包括： OPENSSL_ALGO_SHA1 OPENSSL_ALGO_MD5 OPENSSL_ALGO_MD4 OPENSSL_ALGO_MD2 验证： 用公钥解密签名数据 解密后的结果是 $data 的 [...]]]></description>
			<content:encoded><![CDATA[<p>书接<a href="http://log.dongsheng.org/archives/16">上回</a>，在研究 XML 签名之前先研究一下 OpenSSL 库。</p>
<h3>签名和原理</h3>
<p>PHP 签名的函数原型是：</p>
<pre>
bool openssl_sign ( string $data , string &#038;$signature , mixed $priv_key_id [, int $signature_alg ] )
</pre>
<p>大四时学的密码学全忘光了，用 Google CodeSearch 搜了一气 OpenSSL 的源代码才搞明白了签名的原理。</p>
<p>生成签名：</p>
<ol>
<li>对 $data 按照 $signature_alg 设置的算法（默认是OPENSSL_ALGO_SHA1）进行 hash 运算</li>
<li>用私钥加密（$priv_key_id）</li>
<li>$signature 就是产生的签名数据，连同 $data 发送给接收方</li>
</ol>
<p>可用的 hash 算法包括：</p>
<ul>
<li>OPENSSL_ALGO_SHA1</li>
<li>OPENSSL_ALGO_MD5</li>
<li>OPENSSL_ALGO_MD4</li>
<li>OPENSSL_ALGO_MD2</li>
</ul>
<p>验证：</p>
<ol>
<li>用公钥解密签名数据</li>
<li>解密后的结果是 $data 的 hash 值，接受方再生成 $data 的 hash 值与之对比</li>
</ol>
<h3>签名验证算法</h3>
<p>最常见的有两种：基于大数因子分解问题的数字签名（RSA），基于离散对数问题的数字签名（DSA），公私钥分别对应 ~/.ssh/id_rsa &#038; ~/.ssh/id_rsa.pub 和 ~/.ssh/id_dsa &#038; ~/.ssh/id_dsa.pub<br />
二者区别在于 RSA 还可以用于加密，而 DSA 只能用于签名验证，二者签名效率相近，但 RSA 的验证要远快于 DSA。</p>
<p>所以 PHP 中使用 RSA，公私钥可以用 OpenSSL 工具包生成：</p>
<pre>
openssl genrsa 512 >id_rsa
openssl rsa -pubout <id_rsa >id_rsa.pub
</pre>
<p>我在 .ssh 目录下的 RSA 公私钥是用 ssh-keygen 生成的，但在在这里做试验失败，可能于密钥长度有关系。</p>
<p>验证函数原型：</p>
<pre>
int openssl_verify  (  string $data  ,  string $signature  ,  mixed $pub_key_id  [,  int $signature_alg = OPENSSL_ALGO_SHA1  ] )
</pre>
<p>很好理解，$data 是接受方获取的数据，$signature 是一起发过来的签名，$pub_key_id 是校验用的公钥，$signature_alg 就是前面制定的 hash 算法了。</p>
<h3>加密</h3>
<p>函数原型：</p>
<pre>
int openssl_seal  ( string $data  , string &#038;$sealed_data  , array &#038;$env_keys  , array $pub_key_ids  )
</pre>
<ol>
<li>用随机字符串加密 data （ <a href="http://www.rsa.com/rsalabs/node.asp?id=2250">RC4</a> 加密算法）</li>
<li>用 pub_key_ids 里的公钥对共享密钥进行加密，将结果保存在 env_keys</li>
<li>将 env_keys 和 sealed_data 发送给接收方</li>
</ol>
<h3>解密</h3>
<p>函数原型：</p>
<pre>
bool openssl_open  ( string $sealed_data  , string &#038;$open_data  , string $env_key  , mixed $priv_key_id  )
</pre>
<ol>
<li>私钥揭开 env_key</li>
<li>用 env_key 打开加密消息</li>
</ol>
<h3>用 PHP 创建公私钥</h3>
<pre>
function get_key_pair() {
    $ret = array();
    $res = openssl_pkey_new();
    openssl_pkey_export($res, $ret['private_key']);
    $pub_key = openssl_pkey_get_details($res);
    $ret['public_key'] = $pub_key['key'];
    return $ret;
}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/archives/17/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>在 PHP 中使用 XMLRPC</title>
		<link>http://log.dongsheng.org/archives/16</link>
		<comments>http://log.dongsheng.org/archives/16#comments</comments>
		<pubDate>Thu, 25 Sep 2008 13:22:03 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[xmlrpc]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/?p=16</guid>
		<description><![CDATA[这几天在研究 Moodle Network 组件，通过这个模块，各个孤立的系统被连接到了一起，实现了单点登录和资源共享（对于 e-learning 有很大的意义），通信协议是 XML-RPC，信息安全不是依赖 SSL 的方案，而是在采用了 XML 签名（不对称加密算法），想法非常好，但实现的不太完整，因为这个模块的原作者离开了在新西兰的公司，整得像个半完成作品。 今天看了一下代码，打算在这上面解决多 Moodle 系统的资源共享问题（包含点对点和 HUB 模式），之前没用过 XMLRPC，所以现在开始学一下，我用的是 PHP 的 XMLRPC 模块（比纯 PHP 实现快了不少）。 首先实现一个 XMLRPC 服务，我封装了一个简单的类： class xmlrpc_server { private $server; public function __construct() { $this->server = xmlrpc_server_create(); } public function add($name, $func) { xmlrpc_server_register_method($this->server, $name, $func); } public function run() { $req = file_get_contents('php://input'); [...]]]></description>
			<content:encoded><![CDATA[<p>这几天在研究 Moodle Network 组件，通过这个模块，各个孤立的系统被连接到了一起，实现了单点登录和资源共享（对于 e-learning 有很大的意义），通信协议是 XML-RPC，信息安全不是依赖 SSL 的方案，而是在采用了 XML 签名（不对称加密算法），想法非常好，但实现的不太完整，因为这个模块的原作者离开了在新西兰的公司，整得像个半完成作品。</p>
<p>今天看了一下代码，打算在这上面解决多 Moodle 系统的资源共享问题（包含点对点和 HUB 模式），之前没用过 XMLRPC，所以现在开始学一下，我用的是 PHP 的 XMLRPC 模块（比纯 PHP 实现快了不少）。</p>
<p>首先实现一个 XMLRPC 服务，我封装了一个简单的类：</p>
<pre>
class xmlrpc_server {
    private $server;
    public function __construct() {
        $this->server = xmlrpc_server_create();
    }
    public function add($name, $func) {
        xmlrpc_server_register_method($this->server, $name, $func);
    }
    public function run() {
        $req = file_get_contents('php://input');
        $response = xmlrpc_server_call_method($this->server, $req, null);
        echo $response;
        xmlrpc_server_destroy($this->server);
    }
}
</pre>
<p>调用这个类创建一个服务：</p>
<pre>
header('Content-Type: text/xml');
function func_add($method, $params) {
    return $params[0]+$params[1];
}
$xmlrpc = new xmlrpc_server;
$xmlrpc->add('add', 'func_add');
$xmlrpc->run();
</pre>
<p>PHP 客户端的调用是通过 HTTP 的 POST 方法，我用的是 <a href="http://code.anbutu.com/n-342">cURL</a> 扩展：</p>
<pre>
require_once('curl.class.php');
class xmlrpc_client {
    public function __construct($url, $autoload = false) {
        $this->connection = null;
        $this->url = $url;
        $this->connection = new curl;
        $this->methods = array();
        if ($autoload) {
            $resp = $this->call('system.listMethods', null);
            $this->methods = $resp;
        }
    }
    public function call($method, $params = null) {
        $post = xmlrpc_encode_request($method, $params);
        return xmlrpc_decode($this->connection->post($this->url, $post));
    }
}
header('Content-Type: text/plain');
$rpc = "http://10.0.0.10/api.php";
$client = new xmlrpc_client($rpc, true);
print_r($client->call('add', array(199,2)));
</pre>
<p>待续，下一步优化代码并实现 XML 签名技术。</p>
<p>资料：</p>
<p><a href="http://www.w3.org/TR/xmldsig-core/">XML Signature Syntax and Processing</a><br />
<a href="http://au2.php.net/manual/en/book.openssl.php">OpenSSH</a><br />
<a href="http://www.w3.org/TR/xmlenc-core/">XML Encryption Syntax and Processing</a></p>
<p>== TO BE CONTINUED ==</p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/archives/16/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Gentoo 上的 Python 没有 sqlite 支持</title>
		<link>http://log.dongsheng.org/archives/15</link>
		<comments>http://log.dongsheng.org/archives/15#comments</comments>
		<pubDate>Wed, 24 Sep 2008 12:20:00 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[System]]></category>
		<category><![CDATA[gentoo]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[sqlite]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/?p=15</guid>
		<description><![CDATA[Sqlite 从 Python 2.5 以后就是标准模块了，但 Gentoo 上的 Python 竟然没有这个模块，开始以为需要一个额外的包，但安装 pysqlite 以后问题依旧（过后才想起来是没进入标准前的一个模块），于是使用 USE 标签重新编译 Python： USE="sqlite" emerge python 问题解决]]></description>
			<content:encoded><![CDATA[<p>Sqlite 从 Python 2.5 以后就是标准模块了，但 Gentoo 上的 Python 竟然没有这个模块，开始以为需要一个额外的包，但安装 pysqlite 以后问题依旧（过后才想起来是没进入标准前的一个模块），于是使用 USE 标签重新编译 Python：</p>
<pre>
USE="sqlite" emerge python
</pre>
<p>问题解决</p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/archives/15/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>最近的我有点焦虑</title>
		<link>http://log.dongsheng.org/archives/44</link>
		<comments>http://log.dongsheng.org/archives/44#comments</comments>
		<pubDate>Tue, 02 Sep 2008 13:00:50 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[Life]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/?p=44</guid>
		<description><![CDATA[焦虑与我亦敌亦友，它无处不在，周期性爆发，时常伴随——坐立不安、脾气暴躁、心态失衡等不良症状。 引起焦虑的原因是多方面的，且在不能年龄段呈现不同形态，譬如，备考一门很难很无聊的课、寻思是不是挂了、闯祸了等着挨揍、大学第一天、毕业了、考雅斯、被自杀了、雷蒙倒闭了、去没去过的地方、用“重口味”英语问路、跟 MM 搭讪、喝喝奶粉进了医院（俺是血管里流着三聚氰胺的中国人）…… 老蔡第四定律推论四十二中赫然写着：焦虑源自对答案的渴望和对未知的恐惧，往往答案揭开后（无论是喜悦的或是惶恐的），焦虑就荡然无存……焦虑无法避免，它与寻求答案的过程相伴相生，无论答案带来的是片刻欢愉或长久遗憾……回想从前的经历，最难忘的不是一个个里程碑，而是在焦虑中度过的日日夜夜……消灭焦虑就是消灭生活的乐趣…… 快要奔向二十五的我给焦虑赋予了新的意义，在这个尴尬的年龄，一方面野心勃勃，另一方面我是如此的缺乏经验以至于未来充满变数。有人曾说过：人生就像倒车，你不会知道什么时候会撞上路灯（老蔡列传第十一）。坐在电脑前自寻烦恼的我给自己列出了一串问题： 1) 我的生活是否暗涌重重？或者相反，接下来的五六年我会不会两点一线日趋平淡的过下去？ 2) 我的下一个拐点在哪里？ 3) 昨天天做的牛肉是不是过期了？ 在百分之八十的情况下，我都能列出种种条件然后告诉自己最佳和最糟结果，但再缜密的分析也不及现实的权威性（比如问题三被证实不容乐观的），我们能做的就是在焦虑中准备和等待。 今天站在厨房里想做饭，掐指一算发现自己竟然连续做了一周饭了，突然把自己吓了一跳，我什么时候开始这么关心油盐酱醋柴米油盐了？！从小伙变成了大叔就在一念之间啊，所以我决定不吃了，回屋挨饿。 焦虑毫无悬念的继续着，因为答案啊，在风中飘。]]></description>
			<content:encoded><![CDATA[<p>焦虑与我亦敌亦友，它无处不在，周期性爆发，时常伴随——坐立不安、脾气暴躁、心态失衡等不良症状。</p>
<p>引起焦虑的原因是多方面的，且在不能年龄段呈现不同形态，譬如，备考一门很难很无聊的课、寻思是不是挂了、闯祸了等着挨揍、大学第一天、毕业了、考雅斯、被自杀了、雷蒙倒闭了、去没去过的地方、用“重口味”英语问路、跟 MM 搭讪、喝喝奶粉进了医院（俺是血管里流着三聚氰胺的中国人）……</p>
<p>老蔡第四定律推论四十二中赫然写着：焦虑源自对答案的渴望和对未知的恐惧，往往答案揭开后（无论是喜悦的或是惶恐的），焦虑就荡然无存……焦虑无法避免，它与寻求答案的过程相伴相生，无论答案带来的是片刻欢愉或长久遗憾……回想从前的经历，最难忘的不是一个个里程碑，而是在焦虑中度过的日日夜夜……消灭焦虑就是消灭生活的乐趣……</p>
<p>快要奔向二十五的我给焦虑赋予了新的意义，在这个尴尬的年龄，一方面野心勃勃，另一方面我是如此的缺乏经验以至于未来充满变数。有人曾说过：人生就像倒车，你不会知道什么时候会撞上路灯（老蔡列传第十一）。坐在电脑前自寻烦恼的我给自己列出了一串问题：</p>
<p>1) 我的生活是否暗涌重重？或者相反，接下来的五六年我会不会两点一线日趋平淡的过下去？<br />
2) 我的下一个拐点在哪里？<br />
3) 昨天天做的牛肉是不是过期了？</p>
<p>在百分之八十的情况下，我都能列出种种条件然后告诉自己最佳和最糟结果，但再缜密的分析也不及现实的权威性（比如问题三被证实不容乐观的），我们能做的就是在焦虑中准备和等待。</p>
<p>今天站在厨房里想做饭，掐指一算发现自己竟然连续做了一周饭了，突然把自己吓了一跳，我什么时候开始这么关心油盐酱醋柴米油盐了？！从小伙变成了大叔就在一念之间啊，所以我决定不吃了，回屋挨饿。</p>
<p>焦虑毫无悬念的继续着，因为答案啊，在风中飘。</p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/archives/44/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>VirtualBox 内核模块升级</title>
		<link>http://log.dongsheng.org/archives/14</link>
		<comments>http://log.dongsheng.org/archives/14#comments</comments>
		<pubDate>Tue, 02 Sep 2008 07:18:41 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[System]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[virtualbox]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/?p=14</guid>
		<description><![CDATA[Ubuntu 的内核升级到 2.6.24-21 以后，软件源里就找不到匹配模块了，这就需要下载 VirtualBox 的源码自行编译： sudo apt-get install virtualbox-ose-source sudo m-a update sudo m-a prepare sudo m-a a-i virtualbox-ose sudo /etc/init.d/vboxdrv restart]]></description>
			<content:encoded><![CDATA[<p>Ubuntu 的内核升级到 2.6.24-21 以后，软件源里就找不到匹配模块了，这就需要下载 VirtualBox 的源码自行编译：<br />
<code><br />
sudo apt-get install virtualbox-ose-source<br />
sudo m-a update<br />
sudo m-a prepare<br />
sudo m-a a-i virtualbox-ose<br />
sudo /etc/init.d/vboxdrv restart<br />
</code></p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/archives/14/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>xbindkeys + xmms2</title>
		<link>http://log.dongsheng.org/archives/13</link>
		<comments>http://log.dongsheng.org/archives/13#comments</comments>
		<pubDate>Tue, 02 Sep 2008 04:17:03 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[System]]></category>
		<category><![CDATA[music]]></category>
		<category><![CDATA[xbindkeys]]></category>
		<category><![CDATA[xmms2]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/?p=13</guid>
		<description><![CDATA[昨天跟 Songbird 拜拜了，开始用 xmms2 听音乐，但想切换音轨都得到终端里输入 xmms2 next/prev，这就有点猥亵了，要解决这个问题还得要 xbindkeys 的一臂之力。 xbindkeys 是 X 下一个抓取键盘动作的工具，它可以将按键动作映射到一个 shell 命令上。 使用方法： 安装了这个软件以后，要从 /usr/share/doc/xbindkeys/examples/ 中拷贝一个配置文件到 ~/.xbindkeysrc。 通过xbindkeys --key可以获取按键信息。 xbindkeys -v可以显示运行时信息。 我的 .xbindkeysrc 文件： "xmms2 next" m:0x14 + c:102 "xmms2 prev" m:0x14 + c:100 "xmms2 toggleplay" m:0x50 + c:65 "amixer sset PCM 5%+" m:0x14 + c:98 "amixer sset PCM 5%-" m:0x14 + [...]]]></description>
			<content:encoded><![CDATA[<p>昨天跟 Songbird 拜拜了，开始用 xmms2 听音乐，但想切换音轨都得到终端里输入 xmms2 next/prev，这就有点猥亵了，要解决这个问题还得要 xbindkeys 的一臂之力。</p>
<p>xbindkeys 是 X 下一个抓取键盘动作的工具，它可以将按键动作映射到一个 shell 命令上。</p>
<p><span style="font-weight:bold;">使用方法：</span><br />
安装了这个软件以后，要从 /usr/share/doc/xbindkeys/examples/ 中拷贝一个配置文件到 ~/.xbindkeysrc。<br />
通过<code>xbindkeys --key</code>可以获取按键信息。<br />
<code>xbindkeys -v</code>可以显示运行时信息。</p>
<p><span style="font-weight:bold;">我的 .xbindkeysrc 文件：</span><br />
<code><br />
"xmms2 next"<br />
  m:0x14 + c:102<br />
"xmms2 prev"<br />
  m:0x14 + c:100<br />
"xmms2 toggleplay"<br />
  m:0x50 + c:65<br />
"amixer sset PCM 5%+"<br />
  m:0x14 + c:98<br />
"amixer sset PCM 5%-"<br />
  m:0x14 + c:104<br />
</code><br />
<strike><br />
<span style="font-weight:bold;">把 xbindkeys 加到启动里：</span><br />
在 /etc/init.d/ 里创建一个 shell 脚本，<br />
<code><br />
#!/bin/bash<br />
/usr/bin/xbindkeys<br />
exit 0<br />
</code><br />
给这个脚本加上可执行权限以后，执行<br />
<code><br />
update-rc.d xbindkeys defaults<br />
</code><br />
</strike></p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/archives/13/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>DSA 与 RSA 的区别</title>
		<link>http://log.dongsheng.org/archives/12</link>
		<comments>http://log.dongsheng.org/archives/12#comments</comments>
		<pubDate>Sat, 30 Aug 2008 03:16:05 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[System]]></category>
		<category><![CDATA[cryptography]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/?p=12</guid>
		<description><![CDATA[DSA 用于签名，而 RSA 可用于签名和加密。 DSA is faster in *signing*, but slower in *verifying*. A DSA key of the same strength as RSA (1024 bits) generates a smaller signature. An RSA 512 bit key has been cracked, but only a 280 DSA key. It doesn&#8217;t matter because with Ssh only authentication is done using RSA or [...]]]></description>
			<content:encoded><![CDATA[<p>DSA 用于签名，而 RSA 可用于签名和加密。</p>
<blockquote><p>DSA is faster in *signing*, but slower in *verifying*.<br />
A DSA key of the same strength as RSA (1024 bits) generates a smaller signature.<br />
An RSA 512 bit key has been cracked, but only a 280 DSA key.<br />
It doesn&#8217;t matter because with Ssh only authentication is done using RSA or DSA algorithm, and then the &#8220;rest&#8221; is encoded using a (uh, was it block?) cipher like IDEA, DES, Blowfish, etc, etc after the authentication is done.<br />
While SSH2 can use either DSA or RSA keys, SSH1 cannot. Ssh2 will also not use patented cypers like IDEA.</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/archives/12/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JeOS + VMWare</title>
		<link>http://log.dongsheng.org/archives/11</link>
		<comments>http://log.dongsheng.org/archives/11#comments</comments>
		<pubDate>Sat, 30 Aug 2008 03:15:08 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[System]]></category>
		<category><![CDATA[jeos]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[vmware]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/?p=11</guid>
		<description><![CDATA[VirtualBox 在 Windows 上的表现实在难以令我满意，搜了一下老牌虚拟机 Vmware，惊喜的发现 Vmware Server 已经免费了，与 Vmware Workstation 的主要区别是，VMS 可以通过 Vmware console 远程管理虚拟机，VMW 则是针对单机的产品，但它为虚拟机提供了更多的硬件特性，这对我不重要，另外，VMS 只有 100 多兆，VMW 高达 500 多兆。 我的主要目的是在虚拟机上装一个没有 X 的 Linux，然后在 Windows 上用 SSH 登录，我的第一号候选系统是 Ubuntu Server，在 Ubuntu 网站下载的时候意外的发现了精简版的 Server 版 —— JeOS （Just Enough OS），这个东西是专门为 VMWARE 优化的，更美的是才 100MB，系统只包含了基本工具，这就是我想找的系统！ VMS 创建虚拟机跟 VMW 是一样的。装完成 JeOS 后我启用了 SSH 服务，然后就可以关掉 VMWARE Console 了，用 [...]]]></description>
			<content:encoded><![CDATA[<p>VirtualBox 在 Windows 上的表现实在难以令我满意，搜了一下老牌虚拟机 Vmware，惊喜的发现 Vmware Server 已经免费了，与 Vmware Workstation 的主要区别是，VMS 可以通过 Vmware console 远程管理虚拟机，VMW 则是针对单机的产品，但它为虚拟机提供了更多的硬件特性，这对我不重要，另外，VMS 只有 100 多兆，VMW 高达 500 多兆。</p>
<p>我的主要目的是在虚拟机上装一个没有 X 的 Linux，然后在 Windows 上用 SSH 登录，我的第一号候选系统是 Ubuntu Server，在 Ubuntu 网站下载的时候意外的发现了精简版的 Server 版 —— <a href="http://www.ubuntu.com/products/whatisubuntu/serveredition/jeos">JeOS</a> （Just Enough OS），这个东西是专门为 VMWARE 优化的，更美的是才 100MB，系统只包含了基本工具，这就是我想找的系统！</p>
<p>VMS 创建虚拟机跟 VMW 是一样的。装完成 JeOS 后我启用了 SSH 服务，然后就可以关掉 VMWARE Console 了，用 PuTTY 登录 JeOS！</p>
<p>Vmware Tools 是一套给虚拟机提供服务的 Linux 软件，安装它需要下载 Linux 的构建工具和内核源码，教程可以看 Ubuntu 的<a href="https://help.ubuntu.com/community/JeOS">帮助文档</a>，下载完内核源码以后记得在 /usr/src/local/ 中建立一个 linux 的符号连接。</p>
<p>JeOS 中默认的 Vim 是个极精简的版本，完全无法满足我的要求，恰好 Vim 7.2 正式发布了，下载了 Vim 源码，修改 src/Makefile 调整 Vim 的某些模块，JeOS 没有没有 X，去掉了所有跟 X 相关的模块（clientserver 没法用了），由于没有图形的依赖，编译出来的 Vim 比 Ubuntu 源里的 vim-full 快了不是一点点。</p>
<p>其它方面 JeOS 与 Ubuntu 无异，易用性做的非常好，现在只有一个小问题就是 apt-get 的 autocomplete 功能无法使用，远没有 Ubuntu 上的方便，正在考虑解决方案。</p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/archives/11/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>VirtualBox 的网络配置 （Windows）</title>
		<link>http://log.dongsheng.org/archives/10</link>
		<comments>http://log.dongsheng.org/archives/10#comments</comments>
		<pubDate>Fri, 29 Aug 2008 14:11:08 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[System]]></category>
		<category><![CDATA[virtualbox]]></category>
		<category><![CDATA[windows]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/?p=10</guid>
		<description><![CDATA[作为一款开源软件，VirtualBox 完全继承了开源软件糟糕的用户体验，想正儿八经的用起网络来可真不简单。 默认情况下 GUEST 系统使用 VirtualBox 提供的 NAT 服务连接网络，这种方式的“神奇”之处是有的服务（HTTP）可以用，而有的（ICMP）无法使用，要真正正常地使用网络，需要在 VirtualBox 的网络设置 Host Interface 方式连接： 首先在网络设置界面中添加一个网络接口，这个接口会作为一个虚拟网卡出现在 Windows 控制面板的网络连接设置中，同时选中这个虚拟网卡和一个可用连接，点右键选择桥接，这个操作会造成 Windows 的网络设置丢失，需要你重新设置，另外虚拟网卡和可用连接会显示为连接断开，不用管它，网络通信是正常的。最后进　GUEST 系统，将网络地址为 HOST 系统的子网内地址： ifconfig eth0 10.0.0.100.8 route add default gw 10.0.0.1 echo nameserver 10.0.0.1 > /etc/resolv.conf 测试一下，发现 HOST 和 GUEST 之间可以 Ping 通了。]]></description>
			<content:encoded><![CDATA[<p>作为一款开源软件，VirtualBox 完全继承了开源软件糟糕的用户体验，想正儿八经的用起网络来可真不简单。</p>
<p>默认情况下 GUEST 系统使用 VirtualBox 提供的 NAT 服务连接网络，这种方式的“神奇”之处是有的服务（HTTP）可以用，而有的（ICMP）无法使用，要真正正常地使用网络，需要在 VirtualBox 的网络设置 Host Interface 方式连接：</p>
<p>首先在网络设置界面中添加一个网络接口，这个接口会作为一个虚拟网卡出现在 Windows 控制面板的网络连接设置中，同时选中这个虚拟网卡和一个可用连接，点右键选择桥接，这个操作会造成 Windows 的网络设置丢失，需要你重新设置，另外虚拟网卡和可用连接会显示为连接断开，不用管它，网络通信是正常的。最后进　GUEST 系统，将网络地址为 HOST 系统的子网内地址：<br />
<code><br />
ifconfig eth0 10.0.0.100.8<br />
route add default gw 10.0.0.1<br />
echo nameserver 10.0.0.1 > /etc/resolv.conf<br />
</code><br />
测试一下，发现 HOST 和 GUEST 之间可以 Ping 通了。</p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/archives/10/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>08 下半年计划</title>
		<link>http://log.dongsheng.org/archives/9</link>
		<comments>http://log.dongsheng.org/archives/9#comments</comments>
		<pubDate>Sat, 09 Aug 2008 06:32:37 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[Life]]></category>
		<category><![CDATA[plan]]></category>
		<category><![CDATA[thought]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/?p=9</guid>
		<description><![CDATA[拿到了澳洲临时居民签证，标志我的生活进入了全新阶段，明年开始我会以Part-time的形式完成我的硕士学位，更重要的是我必须在一两年内大幅提升我的工作能力，争取一年内通过ACS的职业评估。 千里之行始于足下，近期我要在LFS和Java上下一些功夫。 1. LFS 我打算投入一些时间来彻底了解 Linux 的组织结构和运行原理，LFS是个很好的开始。 2. Java 研究Java的目的是很功利的，精通Java会给我的工作带来更多的选择。 Update, 17/08/2008 零散的事 1. 下月前买出车 2. 9月份跟朋友学车，进行笔试 3. 9月底去布里斯班 4. 十月开始准备雅思（考虑一下时机） 5. 十二月份开始准备明年回学校的事 6. 零九年一月初回家]]></description>
			<content:encoded><![CDATA[<p>拿到了澳洲临时居民签证，标志我的生活进入了全新阶段，明年开始我会以Part-time的形式完成我的硕士学位，更重要的是我必须在一两年内大幅提升我的工作能力，争取一年内通过<a href='http://www.acs.org.au/index.cfm?action=show&amp;conID=skillassessment' target='_blank'>ACS</a>的职业评估。<br/><br />
千里之行始于足下，近期我要在<a href='http://www.linuxfromscratch.org/lfs/' target='_blank'>LFS</a>和<a href='http://www.sun.com/java/' target='_blank'>Java</a>上下一些功夫。<br />
1. LFS<br />
我打算投入一些时间来彻底了解 Linux 的组织结构和运行原理，LFS是个很好的开始。<br />
2. Java<br />
研究Java的目的是很功利的，精通Java会给我的工作带来更多的选择。</p>
<p>Update, 17/08/2008</p>
<p>零散的事<br />
1. <strike>下月前买出车</strike><br />
2. <strike>9月份跟朋友学车，进行笔试</strike><br />
3. <strike>9月底去布里斯班 <img src='http://log.dongsheng.org/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </strike><br />
4. 十月开始准备雅思（考虑一下时机）<br />
5. <strike>十二月份开始准备明年回学校的事</strike><br />
6. <strike>零九年一月初回家</strike></p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/archives/9/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>cURL 并发访问</title>
		<link>http://log.dongsheng.org/archives/8</link>
		<comments>http://log.dongsheng.org/archives/8#comments</comments>
		<pubDate>Wed, 16 Jul 2008 03:10:23 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[curl]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/?p=8</guid>
		<description><![CDATA[通常情况下 PHP 中的 cURL 是阻塞运行的，就是说创建一个 cURL 请求以后必须等它执行成功或者超时才会执行下一个请求，curl_multi_* 系列函数使并发访问成功可能，PHP 文档对这个函数的介绍不太详细，用法如下： $requests = array('http://zz.dongsheng.org', 'http://www.google.com'); $main = curl_multi_init(); $results = array(); $errors = array(); $info = array(); $count = count($requests); for($i = 0; $i < $count; $i++) { $handles[$i] = curl_init($requests[$i]); var_dump($requests[$i]); curl_setopt($handles[$i], CURLOPT_URL, $requests[$i]); curl_setopt($handles[$i], CURLOPT_RETURNTRANSFER, 1); curl_multi_add_handle($main, $handles[$i]); } $running = 0; do { curl_multi_exec($main, [...]]]></description>
			<content:encoded><![CDATA[<p>通常情况下 PHP 中的 cURL 是阻塞运行的，就是说创建一个 cURL 请求以后必须等它执行成功或者超时才会执行下一个请求，curl_multi_* 系列函数使并发访问成功可能，PHP 文档对这个函数的介绍不太详细，用法如下：</p>
<pre>$requests = array('http://zz.dongsheng.org', 'http://www.google.com');
$main    = curl_multi_init();
$results = array();
$errors  = array();
$info    = array();
$count   = count($requests);
for($i = 0; $i < $count; $i++) {
  $handles[$i] = curl_init($requests[$i]);
  var_dump($requests[$i]);
  curl_setopt($handles[$i], CURLOPT_URL, $requests[$i]);
  curl_setopt($handles[$i], CURLOPT_RETURNTRANSFER, 1);
  curl_multi_add_handle($main, $handles[$i]);
}
$running = 0;

do {
  curl_multi_exec($main, $running);
} while($running > 0);

for($i = 0; $i < $count; $i++)
{
  $results[] = curl_multi_getcontent($handles[$i]);
  $errors[]  = curl_error($handles[$i]);
  $info[]    = curl_getinfo($handles[$i]);
  curl_multi_remove_handle($main, $handles[$i]);
}
curl_multi_close($main);
var_dump($results);
var_dump($errors);
var_dump($info);
</pre>
<p>通过这种方式就可以实现多任务并发执行，更详细的用法看我写的这个类：<a href="http://code.anbutu.com/n-342">curl class</a></p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/archives/8/feed</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>CVS Cheat Sheet</title>
		<link>http://log.dongsheng.org/archives/7</link>
		<comments>http://log.dongsheng.org/archives/7#comments</comments>
		<pubDate>Tue, 15 Jul 2008 11:07:08 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[System]]></category>
		<category><![CDATA[cvs]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/?p=7</guid>
		<description><![CDATA[记住：cvs 的操作可以通过 cvs -H 来查看，比如： cvs -H diff CVS CHECKOUT d 输出目录 A 重设所有 sticky tags r 指定一个 tag CVS UPDATE d 参数 CVS DIFF b 忽略行尾空格 c 输出上下文 p 显示所改变的函数名（或类名） u 使用 unified 输出格式 r 标识 tag CVS UPDATE p 重定向到标准输出 r 标识tag CVS 操作的默认参数可以写在 ~/.cvsrc 里，如 diff -bc update -dP USE CASE： 1. [...]]]></description>
			<content:encoded><![CDATA[<p><span style="font-weight:bold;">记住</span>：cvs 的操作可以通过 cvs -H 来查看，比如：<br />
<code>cvs -H diff</code><br />
CVS CHECKOUT<br />
d 输出目录<br />
A 重设所有 sticky tags<br />
r 指定一个 tag<br />
CVS UPDATE<br />
d 参数</p>
<p>CVS DIFF<br />
b 忽略行尾空格<br />
c 输出上下文<br />
p 显示所改变的函数名（或类名）<br />
u 使用 unified 输出格式<br />
r 标识 tag</p>
<p>CVS UPDATE<br />
p 重定向到标准输出<br />
r 标识tag</p>
<p>CVS 操作的默认参数可以写在 ~/.cvsrc 里，如<br />
<code>diff -bc<br />
update -dP</code><br />
USE CASE：<br />
1. 查看历史<br />
<code>cvs log xx.php<br />
cvs log -r1.5 xx.php</code><br />
2. 添加文件<br />
<code>cvs add xx.php<br />
cvs ci xx.php<br />
# 添加图片<br />
cvs add -kb xx.jpg<br />
cvs ci xx.jpg<br />
# 添加目录<br />
cvs add folder1<br />
# 不需要提交</code><br />
3. 删除<br />
<code>rm xx.php<br />
cvs remove xx.php<br />
cvs commit xx.php<br />
# cvs 无法彻底删除空目录，只能到服务端彻底删除</code><br />
4. 版本恢复<br />
<code>cvs update -p -r 1.6 xx.php > xx.php</code><br />
5. 代码更新<br />
<code>cvs update<br />
cvs update -dPA<br />
# 创建新目录（如果必要），清理空目录，重置锁定点</code><br />
6. diff<br />
<code>cvs diff -upc xx.php<br />
# 生成 patch<br />
cvs diff -up xx.php > xx.patch<br />
# 应用 patch<br />
patch -p0 < xx.patch<br />
# 测试 patch<br />
patch --dry-run -p0 < xx.path<br />
</code><br />
更多 CVS 操作：<a href="http://code.anbutu.com/n-462">.bashrc</a></p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/archives/7/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>bitlbee + irssi</title>
		<link>http://log.dongsheng.org/archives/6</link>
		<comments>http://log.dongsheng.org/archives/6#comments</comments>
		<pubDate>Tue, 15 Jul 2008 10:15:00 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[System]]></category>
		<category><![CDATA[bitlbee]]></category>
		<category><![CDATA[irc]]></category>
		<category><![CDATA[irssi]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/?p=6</guid>
		<description><![CDATA[bitlbee 实质上是一个 irc 服务器，但它的主要功能是做一个转发消息的网关，通过它，普通的 irc 客户段就可以和其他 IM 网络（比如 ICQ，MSN 和 jabber）通信了。 irssi 是个基于终端的 irc 客户端。 使用步骤： 1. 用 apt-get 安装上 irssi 和 bitlbee 2. 修改 bitlbee 的配置文件： RunMode = Daemon DaemonInterface = 127.0.0.1 DaemonPort = 6667 AuthMode = Open 改完以后用 /etc/init.d/bitlbee restart 重新启动 2. 启动 irssi 输入 /network add bitlbee # 这个相当于在配置文件中加入 bitlbee = { [...]]]></description>
			<content:encoded><![CDATA[<p>bitlbee 实质上是一个 irc 服务器，但它的主要功能是做一个转发消息的网关，通过它，普通的 irc 客户段就可以和其他 IM 网络（比如 ICQ，MSN 和 jabber）通信了。<br />
irssi 是个基于终端的 irc 客户端。</p>
<p>使用步骤：<br />
1. 用 apt-get 安装上 irssi 和 bitlbee<br />
2. 修改 bitlbee 的配置文件：<br />
RunMode = Daemon<br />
DaemonInterface = 127.0.0.1<br />
DaemonPort = 6667<br />
AuthMode = Open<br />
改完以后用 /etc/init.d/bitlbee restart 重新启动<br />
2. 启动 irssi<br />
输入<br />
/network add bitlbee<br />
# 这个相当于在配置文件中加入   bitlbee = { type = &#8220;IRC&#8221;; };<br />
/server add -network bitlbee 127.0.0.1 6667<br />
# 相当于在 server 段加入<br />
#  {<br />
#    address = &#8220;127.0.0.1&#8243;;<br />
#    chatnet = &#8220;bitlbee&#8221;;<br />
#    port = &#8220;6667&#8243;;<br />
#    use_ssl = &#8220;no&#8221;;<br />
#    ssl_verify = &#8220;no&#8221;;<br />
#    autoconnect = &#8220;yes&#8221;;<br />
#  }<br />
3. 开始聊天了！<br />
/connect bitlbee<br />
# 连接到 bitlbee 服务器<br />
按 alt+右箭头进入自动创建的名为 bitlbee 的聊天室<br />
account add jabber xxx@gmail.com password<br />
# 创建一个 jabber 帐号<br />
set charset UTF-8<br />
account on 0<br />
# 登陆，0 是创建的帐号的顺序号<br />
join_chat 0 conference@jabber.server.org &#038;local_chatroom_name username<br />
# 进入 jabber 聊天室<br />
4. 保存 bitlbee 账号信息<br />
首先创建一个bitlbee账号<br />
register yourpassword<br />
# irssi nickname will be your default username<br />
# account information can be located at /var/lib/bitlbee<br />
set auto_connect true<br />
然后输入 save 即可保存所创建的账号</p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/archives/6/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>又是一夜没睡</title>
		<link>http://log.dongsheng.org/archives/5</link>
		<comments>http://log.dongsheng.org/archives/5#comments</comments>
		<pubDate>Sun, 11 May 2008 08:20:45 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[Life]]></category>
		<category><![CDATA[sleepless]]></category>
		<category><![CDATA[thought]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/?p=5</guid>
		<description><![CDATA[这是梦幻般的一周，我指的是噩梦：周六搬家大量东西未收拾，五千字论文要周六前完成，还得到学校指定机房对论文做很麻烦的写作鉴定，另外下周一还要做 Presentation，真他妈的巧，都挤一起了，还都是不可避免的事。在这最艰苦的岁月里，我充分发挥了铁人精神，连续四天睡眠时间少于5小时，奋斗在学习第一线，而且早上8点还要爬起来上班——我试图保持清晰的头脑把vim切成三个窗口然后在上千个文件中找那该死的bug到底藏在哪里，幸运的是，对我来讲这算是有趣的挑战。 昨晚又在图书馆泡了一夜，论文终于告成，午夜三点，Perth还下着不知是雾是雨的东西，我坐在图书馆前的草地上，心里一片通明。就在我来到这里后的某一天起，我曾经对生活不切实际的，乱七八糟的意淫消失了，我明白自己没活在幻想中的完美世界，真实的生活得一步步地走。在最苦闷难熬的时候，心里就会冒出一个念头：爷是在奋斗呢！然后所有的痛苦都烟消云散。我极其反感那种逻辑混乱形式泛滥的成功学：“只要XX，就一定能XX”，这种荒唐的公式在现实中没有市场，前因不明朗，后果太肯定，前因后果之间的偶然因素也被忽略了。我清楚的知道我要做怎样的人，现在要做的就是修正可能的偏差，朝着既定的方向走，这不是什么成功路或者失败路，这就是简单的我要走的路。 还有一个月就要考试了，我希望我能过得更快乐些。]]></description>
			<content:encoded><![CDATA[<p>这是梦幻般的一周，我指的是噩梦：周六搬家大量东西未收拾，五千字论文要周六前完成，还得到学校指定机房对论文做很麻烦的写作鉴定，另外下周一还要做 Presentation，真他妈的巧，都挤一起了，还都是不可避免的事。在这最艰苦的岁月里，我充分发挥了铁人精神，连续四天睡眠时间少于5小时，奋斗在学习第一线，而且早上8点还要爬起来上班——我试图保持清晰的头脑把vim切成三个窗口然后在上千个文件中找那该死的bug到底藏在哪里，幸运的是，对我来讲这算是有趣的挑战。</p>
<p>昨晚又在图书馆泡了一夜，论文终于告成，午夜三点，Perth还下着不知是雾是雨的东西，我坐在图书馆前的草地上，心里一片通明。就在我来到这里后的某一天起，我曾经对生活不切实际的，乱七八糟的意淫消失了，我明白自己没活在幻想中的完美世界，真实的生活得一步步地走。在最苦闷难熬的时候，心里就会冒出一个念头：爷是在奋斗呢！然后所有的痛苦都烟消云散。我极其反感那种逻辑混乱形式泛滥的成功学：“只要XX，就一定能XX”，这种荒唐的公式在现实中没有市场，前因不明朗，后果太肯定，前因后果之间的偶然因素也被忽略了。我清楚的知道我要做怎样的人，现在要做的就是修正可能的偏差，朝着既定的方向走，这不是什么成功路或者失败路，这就是简单的我要走的路。</p>
<p>还有一个月就要考试了，我希望我能过得更快乐些。</p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/archives/5/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>在澳洲做程序员</title>
		<link>http://log.dongsheng.org/archives/4</link>
		<comments>http://log.dongsheng.org/archives/4#comments</comments>
		<pubDate>Sun, 16 Mar 2008 11:01:56 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[Life]]></category>
		<category><![CDATA[thought]]></category>
		<category><![CDATA[work]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/?p=4</guid>
		<description><![CDATA[打工三个月，也就是刷盘子的三个月，我从汉斯一路刷到PCEC，保守的估计被我服务过的倒霉客人可能逼近五位数了（没夸张，PCEC一个宴会就是五六百人），我具备了职业技能却缺乏职业素质，我很想对那些在享用美食的同时却在使用我伺候过的盘子的顾客说一声：真是委屈您了。 就在我要开始麻木于打工生活、满足于工资待遇、对发出的没有结果的几十份简历心灰意冷、打算把“首席刷盘手”作为未来两三年目标的时候，一份令我欣喜若狂的工作offer（Moodle）把我拉回了正常的轨道。从没人甩我，到出现有礼貌的拒绝，再到现在已经混到了面试阶段，这三个月过得像是过山车，大起大落，就当我打算放弃的时候，机会也来了，做事，真的得坚持到底。 接下来的面试就很顺了，在我运气爆发的同时，我最担心的英语表达也爆发了，公司的头跟我聊了半个小时，竟然没有出现重大错误，然后工作就这么敲定了！因为澳洲政府只允许国际学生每周工作20小时，所以我只能 part-time 工作，公司的经理说我可以随意选择来工作的时间，保证二十小时就行。公司总部这里出只有大概四五个人（澳洲缺IT人），其他的开发者分布在世界各地，大家平日都是用 skype 联系。近 100 万行的 PHP 代码通过CVS托管，我把代码 checkout 以后，倒吸一口凉气，这么多代码可怎么看？ 上周四去交了工作要添的几个表，然后开始设置我的电脑，办公室的环境很好，电脑也很不错，我面试那天放的是台 19 的液晶，我来了以后，经理说这个还不够好，又换了一个超宽的三星液晶，宽屏的一个好处是 diff 的时候很方便。第一次在 Linux 上操作 CVS 有点丢人，我设置不知道怎么设置 ssh 私钥，逊，那天算是逊到家了。配完服务器，装上 skype 以后，就有人开始跟我打招呼了，第一句话竟然是“Are you a VIM guy?”，嘿嘿。工作中发现一个很好用的工具 —— cgvg，debian 的源里就有。 虽然目前只上了一天班，但国外软件公司的工程管理方式让我开了眼。CVS、Tracker 等对我来说都是很新的东西，和世界各地开发者一起工作更是一件令人兴奋的事情。得继续学习，不懂的东西太多了。]]></description>
			<content:encoded><![CDATA[<p>打工三个月，也就是刷盘子的三个月，我从汉斯一路刷到PCEC，保守的估计被我服务过的倒霉客人可能逼近五位数了（没夸张，PCEC一个宴会就是五六百人），我具备了职业技能却缺乏职业素质，我很想对那些在享用美食的同时却在使用我伺候过的盘子的顾客说一声：真是委屈您了。</p>
<p>就在我要开始麻木于打工生活、满足于工资待遇、对发出的没有结果的几十份简历心灰意冷、打算把“首席刷盘手”作为未来两三年目标的时候，一份令我欣喜若狂的工作offer（<a href="http://www.moodle.com/hq">Moodle</a>）把我拉回了正常的轨道。从没人甩我，到出现有礼貌的拒绝，再到现在已经混到了面试阶段，这三个月过得像是过山车，大起大落，就当我打算放弃的时候，机会也来了，做事，真的得坚持到底。</p>
<p>接下来的面试就很顺了，在我运气爆发的同时，我最担心的英语表达也爆发了，公司的头跟我聊了半个小时，竟然没有出现重大错误，然后工作就这么敲定了！因为澳洲政府只允许国际学生每周工作20小时，所以我只能 part-time 工作，公司的经理说我可以随意选择来工作的时间，保证二十小时就行。公司总部这里出只有大概四五个人（澳洲缺IT人），其他的开发者分布在世界各地，大家平日都是用 skype 联系。近 100 万行的 PHP 代码通过CVS托管，我把代码 checkout 以后，倒吸一口凉气，这么多代码可怎么看？</p>
<p>上周四去交了工作要添的几个表，然后开始设置我的电脑，办公室的环境很好，电脑也很不错，我面试那天放的是台 19 的液晶，我来了以后，经理说这个还不够好，又换了一个超宽的三星液晶，宽屏的一个好处是 diff 的时候很方便。第一次在 Linux 上操作 CVS 有点丢人，我设置不知道怎么设置 ssh 私钥，逊，那天算是逊到家了。配完服务器，装上 skype 以后，就有人开始跟我打招呼了，第一句话竟然是“Are you a VIM guy?”，嘿嘿。工作中发现一个很好用的工具 —— cgvg，debian 的源里就有。</p>
<p>虽然目前只上了一天班，但国外软件公司的工程管理方式让我开了眼。CVS、Tracker 等对我来说都是很新的东西，和世界各地开发者一起工作更是一件令人兴奋的事情。得继续学习，不懂的东西太多了。</p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/archives/4/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>麦田里的人</title>
		<link>http://log.dongsheng.org/archives/3</link>
		<comments>http://log.dongsheng.org/archives/3#comments</comments>
		<pubDate>Sat, 29 Dec 2007 06:29:08 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[Life]]></category>
		<category><![CDATA[thought]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/?p=3</guid>
		<description><![CDATA[来澳已近一个月，我用心观察着这个以前只在电视看过的新世界，吸收新知识，适应新环境。跟我预想过的一样，现实比我的想象的还要艰难很多，到了国外，意味着从前的经验、习惯、关系统统作废，一切从头开始，我怀念以前的日子，但现在我得开始学着独立生存。我很佩服上一代留学生，全部生活费，甚至学费都要靠打工去赚，他们用自己挣出来“奖学金”完成学业，在实现自我价值的路上坚定走了下去。到了二十一世纪，留学的内涵变了很多，留学生低龄化，家境富裕化，出国不再是光荣和艰苦的岁月，留学几乎成了“镀金”的代名词。走上这条路，是我自己的决定，我不重复别人的路，我不满足现状也不怕改变，我要有自己的一片天。 然而，梦想在未来闪光，千里之行却始于足下。两周前，在我找 IT 工作无果后（资源太少），朋友把我带到一家饭店开始做工，去之前，我妈我姑我全家几乎所有朋友都对我的“事业”表达了相当程度的悲观态度：“这饭店有那么多碗让你砸吗？”一瞬间，伯夷叔齐灵魂附体，我的一根筋脾气爆发出来：我一定要让你们知道爷也是能刷碗的！第一天试工，在水池边刷了整整四个小时的碗，精神亢奋体力透支，累得我灵魂出窍，幸运的是，截至十一点收工也没有发生任何人为伤亡事故，走之前，经理问我感觉如何，我还强表示出风度来说：“很轻松嘛，在这里工作很兴奋！”晚上回了家就为自己的虚伪付出了代价，我几乎是从车里爬到床上，尽管身上有带着我最讨厌的咖喱味，但终是没力气去洗了……第二次去更兴奋，因为从现在开始算工资了，朋友声称我造型太像个文化人，刷起饭店的破碗来像是在抚摸精美瓷器，但是，打工不是鉴赏，效率第一，然后开始教我大手大脚的把一大把盘子放到洗碗机，然后批量取出，我采用后效率大幅提高，开始深为自己的新技能骄傲。这天干完已不像第一天那么疲劳，说明身上肌肉已经适应了这种强度的工作量。如此这般，一周后，老板发了我来澳洲以后的第一笔工资，第一次，有了种舍不得花自己钱的感觉，这就是“血汗”钱呀。今天去的时候穿的鞋子不合适，结果后脚背被磨出了血，加上圣诞期间到饭店吃饭的人又特别多，我就这么忍着疼痛从六点一直干到十一点，这算辛苦吗？不，大多数留学生都是这么过的。打工已逾一周，我虽然业务熟料程度依然欠佳，但尚算兢兢业业，工资虽然不高，但这种简单活干不好是会被人鄙视的，于是咬着牙坚持。以后大家再抱怨工作辛苦看不见出路，郁闷得难以排解的时候不妨想想我，我绝对是最辛苦最底层的一个。 通过打工，我明白了不少事情，这些都是过去的有父母荫庇的日子所无法体会的。回想我过去的生活，有什么算是真正的挫折？我所有的需要所有的欲望都被宽容的满足了，但我还是对现实不满，课业繁重，老师不顺眼，学校傻X……这些都成了我选择玩世不恭的理由，我甚至深信不疑：这是在现行状态下的理性选择。可我何曾反过来想想如果错的不是这些外部因素，而是我的态度、我的偏执、我的一根筋呢？打工让我知道，我的臭脾气在现实面前一钱不值，不好好适应就会被残酷淘汰，没有实力就没有言语权。 我依然在寻找适合我的 IT 工作，圣诞期间发出的所有简历目前只收到大量假期无法回复的通知，我在等待一个理想结果，但这时候最重要的是保持平常心，生活是一步步走的，刚来一个月的我不可能这么快就把一切纳入正轨。在这之前，我要做好我现在的工作，尽管它肮脏、它让我不肖，但我仍能从中汲取有用的东西。 我追求的是种幸福的生活，她不是功利视角下的金钱也不是狭隘的男女之爱，她存在于生活的各方面，她可以是屋檐的鸟语虫鸣、阳光下的突来的一场雨也可以是我精疲力竭时递来的一杯可乐……更重要的是，她是我的梦，渴望和爱。让我在最低潮的时候，也热爱生活、对未来充满期望。 2008，2008，我要过得更好…… 又想起了凡高，想起他书信集中一段感人至深的话：“……我在病中重又见到津德尔特家中每一间屋子，重又见到每一条小路，园子里每一样植物，四周田野的景色，附近的邻居，重又见到墓地，教堂，我们家房子后面的菜地——一切的一切，直到墓地中那棵高高的银叶相思树上的喜鹊巢。” 突然很想家。]]></description>
			<content:encoded><![CDATA[<p>来澳已近一个月，我用心观察着这个以前只在电视看过的新世界，吸收新知识，适应新环境。跟我预想过的一样，现实比我的想象的还要艰难很多，到了国外，意味着从前的经验、习惯、关系统统作废，一切从头开始，我怀念以前的日子，但现在我得开始学着独立生存。我很佩服上一代留学生，全部生活费，甚至学费都要靠打工去赚，他们用自己挣出来“奖学金”完成学业，在实现自我价值的路上坚定走了下去。到了二十一世纪，留学的内涵变了很多，留学生低龄化，家境富裕化，出国不再是光荣和艰苦的岁月，留学几乎成了“镀金”的代名词。走上这条路，是我自己的决定，我不重复别人的路，我不满足现状也不怕改变，我要有自己的一片天。</p>
<p>然而，梦想在未来闪光，千里之行却始于足下。两周前，在我找 IT 工作无果后（资源太少），朋友把我带到一家饭店开始做工，去之前，我妈我姑我全家几乎所有朋友都对我的“事业”表达了相当程度的悲观态度：“这饭店有那么多碗让你砸吗？”一瞬间，伯夷叔齐灵魂附体，我的一根筋脾气爆发出来：我一定要让你们知道爷也是能刷碗的！第一天试工，在水池边刷了整整四个小时的碗，精神亢奋体力透支，累得我灵魂出窍，幸运的是，截至十一点收工也没有发生任何人为伤亡事故，走之前，经理问我感觉如何，我还强表示出风度来说：“很轻松嘛，在这里工作很兴奋！”晚上回了家就为自己的虚伪付出了代价，我几乎是从车里爬到床上，尽管身上有带着我最讨厌的咖喱味，但终是没力气去洗了……第二次去更兴奋，因为从现在开始算工资了，朋友声称我造型太像个文化人，刷起饭店的破碗来像是在抚摸精美瓷器，但是，打工不是鉴赏，效率第一，然后开始教我大手大脚的把一大把盘子放到洗碗机，然后批量取出，我采用后效率大幅提高，开始深为自己的新技能骄傲。这天干完已不像第一天那么疲劳，说明身上肌肉已经适应了这种强度的工作量。如此这般，一周后，老板发了我来澳洲以后的第一笔工资，第一次，有了种舍不得花自己钱的感觉，这就是“血汗”钱呀。今天去的时候穿的鞋子不合适，结果后脚背被磨出了血，加上圣诞期间到饭店吃饭的人又特别多，我就这么忍着疼痛从六点一直干到十一点，这算辛苦吗？不，大多数留学生都是这么过的。打工已逾一周，我虽然业务熟料程度依然欠佳，但尚算兢兢业业，工资虽然不高，但这种简单活干不好是会被人鄙视的，于是咬着牙坚持。以后大家再抱怨工作辛苦看不见出路，郁闷得难以排解的时候不妨想想我，我绝对是最辛苦最底层的一个。</p>
<p>通过打工，我明白了不少事情，这些都是过去的有父母荫庇的日子所无法体会的。回想我过去的生活，有什么算是真正的挫折？我所有的需要所有的欲望都被宽容的满足了，但我还是对现实不满，课业繁重，老师不顺眼，学校傻X……这些都成了我选择玩世不恭的理由，我甚至深信不疑：这是在现行状态下的理性选择。可我何曾反过来想想如果错的不是这些外部因素，而是我的态度、我的偏执、我的一根筋呢？打工让我知道，我的臭脾气在现实面前一钱不值，不好好适应就会被残酷淘汰，没有实力就没有言语权。</p>
<p>我依然在寻找适合我的 IT 工作，圣诞期间发出的所有简历目前只收到大量假期无法回复的通知，我在等待一个理想结果，但这时候最重要的是保持平常心，生活是一步步走的，刚来一个月的我不可能这么快就把一切纳入正轨。在这之前，我要做好我现在的工作，尽管它肮脏、它让我不肖，但我仍能从中汲取有用的东西。</p>
<p>我追求的是种幸福的生活，她不是功利视角下的金钱也不是狭隘的男女之爱，她存在于生活的各方面，她可以是屋檐的鸟语虫鸣、阳光下的突来的一场雨也可以是我精疲力竭时递来的一杯可乐……更重要的是，她是我的梦，渴望和爱。让我在最低潮的时候，也热爱生活、对未来充满期望。</p>
<p>2008，2008，我要过得更好……</p>
<p>又想起了凡高，想起他书信集中一段感人至深的话：“……我在病中重又见到津德尔特家中每一间屋子，重又见到每一条小路，园子里每一样植物，四周田野的景色，附近的邻居，重又见到墓地，教堂，我们家房子后面的菜地——一切的一切，直到墓地中那棵高高的银叶相思树上的喜鹊巢。”</p>
<p>突然很想家。</p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/archives/3/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Knowledge and Wisdom</title>
		<link>http://log.dongsheng.org/archives/1</link>
		<comments>http://log.dongsheng.org/archives/1#comments</comments>
		<pubDate>Sun, 31 Dec 2006 15:00:48 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[Brain Storm]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/?p=1</guid>
		<description><![CDATA[By Bertrand Russell Most people would agree that, although our age far surpasses all previous ages in knowledge, there has been no correlative increase in wisdom. But agreement ceases as soon as we attempt to define &#8216;wisdom&#8217; and consider means of promoting it. I want to ask first what wisdom is, and then what can [...]]]></description>
			<content:encoded><![CDATA[<p>By <em>Bertrand Russell</em></p>
<p>Most people would agree that, although our age far surpasses all previous ages in knowledge, there has been no correlative increase in wisdom. But agreement ceases as soon as we attempt to define &#8216;wisdom&#8217; and consider means of promoting it. I want to ask first what wisdom is, and then what can be done to teach it.<br />
There are, I think, several factors that contribute to wisdom. Of these I should put first a sense of proportion: the capacity to take account of all the important factors in a problem and to attach to each its due weight. This has become more difficult than it used to be owing to the extent and complexity fo the specialized knowledge required of various kinds of technicians. Suppose, for example, that you are engaged in research in scientific medicine. The work is difficult and is likely to absorb the whole of your intellectual energy. You have not time to consider the effect which your discoveries or inventions may have outside the field of medicine. You succeed (let us say), as modern medicine has succeeded, in enormously lowering the infant death-rate, not only in Europe and America, but also in Asia and Africa. This has the entirely unintended result of making the food supply inadequate and lowering the standard of life in the most populous parts of the world. To take an even more spectacular example, which is in everybody&#8217;s mind at the present time: You study the composistion of the atom from a disinterested desire for knowledge, and incidentally place in the hands of powerful lunatics the means of destroying the human race. In such ways the pursuit of knowledge may becorem harmful unless it is combined with wisdom; and wisdom in the sense of comprehensive vision is not necessarily present in specialists in the pursuit of knowledge.</p>
<p>Comprehensiveness alone, however, is not enough to constitute wisdom. There must be, also, a certain awareness of the ends of human life. This may be illustrated by the study of history. Many eminent historians have done more harm than good because they viewed facts through the distorting medium of their own passions. Hegel had a philosophy of history which did not suffer from any lack of comprehensiveness, since it started from the earliest times and continued into an indefinite future. But the chief lesson of history which he sought to unculcate was that from the year 400AD down to his own time Germany had been the most important nation and the standard-bearer of progress in the world. Perhaps one could stretch the comprehensiveness that contitutes wisdom to include not only intellect but also feeling. It is by no means uncommon to find men whose knowledge is wide but whose feelings are narrow. Such men lack what I call wisdom.</p>
<p>It is not only in public ways, but in private life equally, that wisdom is needed. It is needed in the choice of ends to be pursued and in emancipation from personal prejudice. Even an end which it would be noble to pursue if it were attainable may be pursued unwisely if it is inherently impossible of achievement. Many men in past ages devoted their lives to a search for the philosopher&#8217;s stone and the elixir of life. No doubt, if they could have found them, they would have conferred great benefits upon mankind, but as it was their lives were wasted. To descend to less heroic matters, consider the case of two men, Mr A and Mr B, who hate each other and, through mutual hatred, bring each other to destruction. Suppose you dgo the Mr A and say, &#8216;Why do you hate Mr B?&#8217; He will no doubt give you an appalling list of Mr B&#8217;s vices, partly true, partly false. And now suppose you go to Mr B. He will give you an exactly similar list of Mr A&#8217;s vices with an equal admixture of truth and falsehood. Suppose you now come back to Mr A and say, &#8216;You will be surprised too learn that Mr B says the same things about you as you say about him&#8217;, and you go to Mr B and make a similar speech. The first effect, no doubt, will be to increase their mutual hatred, since each will be so horrified by the other&#8217;s injustice. But perhaps, if you have sufficient patience and sufficient persuasiveness, you may succeed in convincing each that the other has only the normal share of human wickedness, and that their enmity is harmful to both. If you can do this, you will have instilled some fragment of wisdom.</p>
<p>I think the essence of wisdom is emancipation, as fat as possible, from the tyranny of the here and now. We cannot help the egoism of our senses. Sight and sound and touch are bound up with our own bodies and cannot be impersonal. Our emotions start similarly from ourselves. An infant feels hunger or discomfort, and is unaffected except by his own physical condition. Gradually with the years, his horizon widens, and, in proportion as his thoughts and feelings become less personal and less concerned with his own physical states, he achieves growing wisdom. This is of course a matter of degree. No one can view the world with complete impartiality; and if anyone could, he would hardly be able to remain alive. But it is possible to make a continual approach towards impartiality, on the one hand, by knowing things somewhat remote in time or space, and on the other hand, by giving to such things their due weight in our feelings. It is this approach towards impartiality that constitutes growth in wisdom.</p>
<p>Can wisdom in this sense be taught? And, if it can, should the teaching of it be one of the aims of education? I should answer both these questions in the affirmative. We are told on Sundays that we should love our neighbors as ourselves. On the other six days of the week, we are exhorted to hate. But you will remember that the precept was exemplified by saying that the Samaritan was our neighbour. We no longer have any wish to hate Samaritans and so we are apt to miss the point of the parable. If you wnat to get its point, you should substitute Communist or anti-Communist, as the case may be, for Samaritan. It might be objected that it is right to hate those who do harm. I do not think so. If you hate them, it is only too likely that you will become equally harmful; and it is very unlikely that you will induce them to abandon their evil ways. Hatred of evil is itself a kind of bondage to evil. The way out is through understanding, not through hate. I am not advocating non-resistance. But I am saying that resistance, if it is to be effective in preventing the spread of evil, should be combined with the greatest degree of understanding and the smallest degree of force that is compatible with the survival of the good things that we wish to preserve.</p>
<p>It is commonly urged that a point of view such as I have been advocating is incompatible with vigour in action. I do not think history bears out this view. Queen Elizabeth I in England and Henry IV in France lived in a world where almost everybody was fanatical, either on the Protestant or on the Catholic side. Both remained free from the errors of their time and both, by remaining free, were beneficent and certainly not ineffective. Abraham Lincoln conducted a great war without ever departing from what I have called wisdom.</p>
<p>I have said that in some degree wisdom can be taught. I think that this teaching should have a larger intellectual element than has been customary in what has been thought of as moral instruction. I think that the disastrous results of hatred and narrow-mindedness to those who feel them can be pointed out incidentally in the course of giving knowledge. I do not think that knowledge and morals ought to be too much separated. It is true that the kind of specialized knowledge which is required for various kinds of skill has very little to do with wisdom. But it should be supplemented in education by wider surveys calculated to put it in its place in the total of human activities. Even the best technicians should also be good citizens; and when I say &#8216;citizens&#8217;, I mean citizens of the world and not of this or that sect or nation. With every increase of knowledge and skill, wisdom becomes more necessary, for every such increase augments our capacity of realizing our purposes, and therefore augments our capacity for evil, if our purposes are unwise. The world needs wisdom as it has never needed it before; and if knowledge continues to increase, the world will need wisdom in the future even more than it does now.</p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/archives/1/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
