<?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>SteamedFish &#187; 技术相关</title>
	<atom:link href="http://blog.steamedfish.org/category/%e6%8a%80%e6%9c%af%e7%9b%b8%e5%85%b3/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.steamedfish.org</link>
	<description>Feeling warm in the pot</description>
	<lastBuildDate>Mon, 21 Jun 2010 10:06:46 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Code Hilighting in ConTeXt</title>
		<link>http://blog.steamedfish.org/2010/04/07/code-hilighting-in-context/</link>
		<comments>http://blog.steamedfish.org/2010/04/07/code-hilighting-in-context/#comments</comments>
		<pubDate>Wed, 07 Apr 2010 09:16:53 +0000</pubDate>
		<dc:creator>SteamedFish</dc:creator>
				<category><![CDATA[技术相关]]></category>

		<guid isPermaLink="false">http://blog.steamedfish.org/?p=531</guid>
		<description><![CDATA[学完 ConTeXt 的基础知识之后，第一件事就是想找一个类似于 LaTeX 下面 listings 宏包这样的工具，来实现代码的自动语法高亮。经百般 Google 竟然未果。然而我死活不相信 ConTeXt 连这个功能都没有，于是发扬愚公移山的精神，埋头在 TeXLive 的 doc 里面一阵乱翻，居然就被我翻到了（幸亏 ConTeXt 的模块并不多），原来 ConTeXt 是用一个叫做 t-vim 的模块来干这事情的。这个名字起得实在太隐蔽了，根本看不出来跟语法高亮有任何的关系。再仔细看文档，原来这个模块是直接调用 vim 来生成语法高亮配置的。
然后照着文档随便写了一个代码。然后 ConTeXt 报错

VIM - Vi IMproved 7.2 (2008 Aug 9, compiled Mar  8 2010 22:56:09)
Garbage after option argument: "-u NONE -e -C -n -c "set tabstop=8" -c "syntax on" -c "set syntax=sh" [...]]]></description>
			<content:encoded><![CDATA[<p>学完 ConTeXt 的基础知识之后，第一件事就是想找一个类似于 LaTeX 下面 listings 宏包这样的工具，来实现代码的自动语法高亮。经百般 Google 竟然未果。然而我死活不相信 ConTeXt 连这个功能都没有，于是发扬愚公移山的精神，埋头在 TeXLive 的 doc 里面一阵乱翻，居然就被我翻到了（幸亏 ConTeXt 的模块并不多），原来 ConTeXt 是用一个叫做 <code>t-vim</code> 的模块来干这事情的。这个名字起得实在太隐蔽了，根本看不出来跟语法高亮有任何的关系。再仔细看文档，原来这个模块是直接调用 vim 来生成语法高亮配置的。</p>
<p>然后照着文档随便写了一个代码。然后 ConTeXt 报错<br />
<code><br />
VIM - Vi IMproved 7.2 (2008 Aug 9, compiled Mar  8 2010 22:56:09)<br />
Garbage after option argument: "-u NONE -e -C -n -c "set tabstop=8" -c "syntax on" -c "set syntax=sh" -c "let contextstartline=1" -c "let contextstopline=0" -c "source /opt/context-minimals/texmf-context/tex/context/third/vim/2context.vim" -c "wqa" "4-vimsyntax.tmp" "<br />
</code></p>
<p>传给 vim 的参数竟然有错，我大囧。研究了半天，似乎跟最后面那个空格有关系。于是看 <code>t-vim.tex</code> 源文件，修改了一下</p>

<div class="wp_syntax"><div class="code"><pre class="diff" style="font-family:monospace;">@@ -<span style="color: #cb694d; font-style: italic;">329</span>,<span style="color: #cb694d; font-style: italic;">7</span> +<span style="color: #cb694d; font-style: italic;">329</span>,<span style="color: #cb694d; font-style: italic;">7</span> @@
 \def\runvimsyntax#<span style="color: #cb694d; font-style: italic;">1</span>
    <span style="color: #53695d;">&#123;</span>\executesystemcommand
       <span style="color: #53695d;">&#123;</span>mtxrun --verbose --noquote bin:vim
<span style="color: #991111;">-          &quot;-u NONE  % No need to read unnessary configurations</span>
<span style="color: #00b000;">+           -u NONE  % No need to read unnessary configurations</span>
            -e       % run in ex mode
            -C       % Set compatibile
            -n       % No swap
<span style="color: #440088;">@@ -<span style="color: #cb694d; font-style: italic;">341</span>,<span style="color: #cb694d; font-style: italic;">7</span> +<span style="color: #cb694d; font-style: italic;">341</span>,<span style="color: #cb694d; font-style: italic;">7</span> @@</span>
            -c \shellescapedquote let contextstopline=\@@vsstop\shellescapedquote  \space
            -c \shellescapedquote source kpse:2context.vim\shellescapedquote\space
            -c \shellescapedquote wqa\shellescapedquote\space    
<span style="color: #991111;">-            \shellescapedquote#<span style="color: #cb694d; font-style: italic;">1</span>\shellescapedquote\space &quot;<span style="color: #53695d;">&#125;</span><span style="color: #53695d;">&#125;</span></span>
<span style="color: #00b000;">+            \shellescapedquote#<span style="color: #cb694d; font-style: italic;">1</span><span style="color: #53695d;">&#125;</span><span style="color: #53695d;">&#125;</span></span>
&nbsp;
&nbsp;
 %D \macros<span style="color: #53695d;">&#123;</span>definetypevimfile<span style="color: #53695d;">&#125;</span></pre></div></div>

<p>就可以正常使用了</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.steamedfish.org/2010/04/07/code-hilighting-in-context/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>编码恐惧症</title>
		<link>http://blog.steamedfish.org/2010/03/01/%e7%bc%96%e7%a0%81%e6%81%90%e6%83%a7%e7%97%87/</link>
		<comments>http://blog.steamedfish.org/2010/03/01/%e7%bc%96%e7%a0%81%e6%81%90%e6%83%a7%e7%97%87/#comments</comments>
		<pubDate>Mon, 01 Mar 2010 15:47:28 +0000</pubDate>
		<dc:creator>SteamedFish</dc:creator>
				<category><![CDATA[技术相关]]></category>
		<category><![CDATA[疯疯癫癫]]></category>
		<category><![CDATA[胡言乱语]]></category>

		<guid isPermaLink="false">http://blog.steamedfish.org/?p=517</guid>
		<description><![CDATA[我一直有一点点的编码恐惧症，但是没想到最近变得极为强烈，乃至于到了严重影响我的程度。
这源于我的性格。我在其他方面有着绝好的脾气，却不知道为何在面对软件产品的时候有一种吹毛求疵和鸡蛋里面挑骨头的敏感。甚至连公司卫生间一边写着 Ladies 一遍写着 men, 两边词汇不对应( women 对 men, Ladies 对 Gentlemen)，都要让我看不下去。
这种敏感和洁癖在这几个月达到了极高的程度，才因此引发了最近的严重的编码恐惧症。
这敏感和洁癖产生的原因，在我之前的博客里面有个简单的论述。我就不再多言。
这个世界上没有任何东西是完美的。而敏感和洁癖放大了这个世界上的不完美。而这实际上一直导致了我的一个特点，那就是遇到任何问题，我优先想到的是寻找利用现有工具的解决方案，而不是自己创造一个工具出来。
原因很简单，当你用的是别人的工具的时候，你只需要无休止的抱怨就可以了。抱怨别人永远都是容易的。可是当你面对你自己的工具的时候，你需要的就不仅仅是无休止的抱怨了。这是你的产品，你自己的代码，糟糕透顶，这是属于你的耻辱，你必须修复它，可是你又没有足够的能力和足够的时间。
于是，当别人写代码的时候获得的是成就感和喜悦的时候，我却总是在获得挫败感和耻辱。每次写代码获得的都是负反馈。于是，就慢慢开始有了编码恐惧症。在写代码之前，你就已经预计到了这个代码将给你带来的无尽的痛苦，于是你开始写不下去了。
编码恐惧症的优点是，它会让你话费很多力气去寻找各种能够满足你要求的工具，它会让你尽可能少的重新发明轮子。它会让你花费很多时间去研究每一款工具的方方面面，以及各种工具的搭配和混合使用。缺点自然就是，当你真的需要创造一个轮子的时候，你创造不出来。而且因为编码这个东西特别需要经验的积累，这事实上成了一个恶性循环。因为害怕编码，所以没经验，因为没经验，写的代码烂，所以害怕编码。
但现在的最大问题是，我知道原因，却不知道解决方案。我知道病因，却开不出药方。我可以逼迫我去写代码，但带来的只是更深的恐惧。
]]></description>
			<content:encoded><![CDATA[<p>我一直有一点点的编码恐惧症，但是没想到最近变得极为强烈，乃至于到了严重影响我的程度。</p>
<p>这源于我的性格。我在其他方面有着绝好的脾气，却不知道为何在面对软件产品的时候有一种吹毛求疵和鸡蛋里面挑骨头的敏感。甚至连公司卫生间一边写着 Ladies 一遍写着 men, 两边词汇不对应( women 对 men, Ladies 对 Gentlemen)，都要让我看不下去。</p>
<p>这种敏感和洁癖在这几个月达到了极高的程度，才因此引发了最近的严重的编码恐惧症。</p>
<p>这敏感和洁癖产生的原因，在我<a href="http://blog.steamedfish.org/2010/01/31/%e8%bf%b7%e6%83%98/">之前的博客</a>里面有个简单的论述。我就不再多言。</p>
<p>这个世界上没有任何东西是完美的。而敏感和洁癖放大了这个世界上的不完美。而这实际上一直导致了我的一个特点，那就是遇到任何问题，我优先想到的是寻找利用现有工具的解决方案，而不是自己创造一个工具出来。</p>
<p>原因很简单，当你用的是别人的工具的时候，你只需要无休止的抱怨就可以了。抱怨别人永远都是容易的。可是当你面对你自己的工具的时候，你需要的就不仅仅是无休止的抱怨了。这是你的产品，你自己的代码，糟糕透顶，这是属于你的耻辱，你必须修复它，可是你又没有足够的能力和足够的时间。</p>
<p>于是，当别人写代码的时候获得的是成就感和喜悦的时候，我却总是在获得挫败感和耻辱。每次写代码获得的都是负反馈。于是，就慢慢开始有了编码恐惧症。在写代码之前，你就已经预计到了这个代码将给你带来的无尽的痛苦，于是你开始写不下去了。</p>
<p>编码恐惧症的优点是，它会让你话费很多力气去寻找各种能够满足你要求的工具，它会让你尽可能少的重新发明轮子。它会让你花费很多时间去研究每一款工具的方方面面，以及各种工具的搭配和混合使用。缺点自然就是，当你真的需要创造一个轮子的时候，你创造不出来。而且因为编码这个东西特别需要经验的积累，这事实上成了一个恶性循环。因为害怕编码，所以没经验，因为没经验，写的代码烂，所以害怕编码。</p>
<p>但现在的最大问题是，我知道原因，却不知道解决方案。我知道病因，却开不出药方。我可以逼迫我去写代码，但带来的只是更深的恐惧。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.steamedfish.org/2010/03/01/%e7%bc%96%e7%a0%81%e6%81%90%e6%83%a7%e7%97%87/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>邀请制</title>
		<link>http://blog.steamedfish.org/2010/02/23/%e9%82%80%e8%af%b7%e5%88%b6/</link>
		<comments>http://blog.steamedfish.org/2010/02/23/%e9%82%80%e8%af%b7%e5%88%b6/#comments</comments>
		<pubDate>Tue, 23 Feb 2010 10:58:49 +0000</pubDate>
		<dc:creator>SteamedFish</dc:creator>
				<category><![CDATA[技术相关]]></category>
		<category><![CDATA[胡言乱语]]></category>

		<guid isPermaLink="false">http://blog.steamedfish.org/?p=514</guid>
		<description><![CDATA[第一次接触邀请制，是 Google 开始推出 Gmail 的时候。那个时候为了能够得到一个 Gmail, 到处求邀请。好不容易求到了一个邀请，发现 SteamedFish 这个帐号已经被抢注了，伤心了半天。再后来，在我自己也开始有了几个邀请的时候，视若珍宝，不是最好的朋友，是舍不得给的。乃至于突然有一天 Gmail 邀请已经烂大街的时候，我最原初的邀请都还没舍得送完。
那是我第一次意识到，而且事实上也是唯一一次意识到，邀请制给人带来的狂热。 Gmail 取得了如此巨大的成功，跟邀请制有很大的关系。一是网上各种狂热的求邀请事实上是在为 Gmail 做免费的宣传，二是网上一片叫好的东西自己用不着，非常激起人们的好奇心，三是好不容易拿到的东西，自然会珍惜，好好研究好好使用，第四是邀请制是一种传染性的传播手段。
然后， Google 似乎已经相当习惯了对新产品使用邀请制。 Google Voice, Google Wave 推出时莫不如此。邀请制在其他公司也得到了广泛的使用，例如网易微博。然而它们从未取得像 Gmail 当时那样的成功。对于某一些产品，例如 Google Wave, 我甚至开始认为，邀请制获得了彻头彻尾的失败（莫非 Google 也有同样的想法，所以在 Google Buzz 推出的时候换了一种推广方式？）。
就用 Google Wave 做一个例子。 Google Wave 已经被证明是一个相当失败的产品。至少在我的朋友圈中如此。在我的 Wave 上已经几个月没有任何新 Wave 出现了。当然它的失败有着多方面的原因，然而我这篇文章要谈论的是，邀请制政策在此起到了推波助澜的作用，加速了它的失败。
第一，同 Gmail 不一样， Wave 是一个无法自娱自乐的产品。你不需要你的好友也在使用 Gmail 你才能够享受到 Gmail 的便利。全世界就你一个人用 Gmail, 其他人全部都在用别的邮箱，你照样可以用得足够开心，但是 Google Wave 不行。你必须有足够的 [...]]]></description>
			<content:encoded><![CDATA[<p>第一次接触邀请制，是 Google 开始推出 Gmail 的时候。那个时候为了能够得到一个 Gmail, 到处求邀请。好不容易求到了一个邀请，发现 SteamedFish 这个帐号已经被抢注了，伤心了半天。再后来，在我自己也开始有了几个邀请的时候，视若珍宝，不是最好的朋友，是舍不得给的。乃至于突然有一天 Gmail 邀请已经烂大街的时候，我最原初的邀请都还没舍得送完。</p>
<p>那是我第一次意识到，而且事实上也是唯一一次意识到，邀请制给人带来的狂热。 Gmail 取得了如此巨大的成功，跟邀请制有很大的关系。一是网上各种狂热的求邀请事实上是在为 Gmail 做免费的宣传，二是网上一片叫好的东西自己用不着，非常激起人们的好奇心，三是好不容易拿到的东西，自然会珍惜，好好研究好好使用，第四是邀请制是一种传染性的传播手段。</p>
<p>然后， Google 似乎已经相当习惯了对新产品使用邀请制。 Google Voice, Google Wave 推出时莫不如此。邀请制在其他公司也得到了广泛的使用，例如网易微博。然而它们从未取得像 Gmail 当时那样的成功。对于某一些产品，例如 Google Wave, 我甚至开始认为，邀请制获得了彻头彻尾的失败（莫非 Google 也有同样的想法，所以在 Google Buzz 推出的时候换了一种推广方式？）。</p>
<p>就用 Google Wave 做一个例子。 Google Wave 已经被证明是一个相当失败的产品。至少在我的朋友圈中如此。在我的 Wave 上已经几个月没有任何新 Wave 出现了。当然它的失败有着多方面的原因，然而我这篇文章要谈论的是，邀请制政策在此起到了推波助澜的作用，加速了它的失败。</p>
<p>第一，同 Gmail 不一样， Wave 是一个无法自娱自乐的产品。你不需要你的好友也在使用 Gmail 你才能够享受到 Gmail 的便利。全世界就你一个人用 Gmail, 其他人全部都在用别的邮箱，你照样可以用得足够开心，但是 Google Wave 不行。你必须有足够的 Google Wave 好友，不然 Google Wave 不好用。所以邀请制直接导致了少量幸运的 Wave 用户找不到好友而处于孤单寂寞之中体会不到 Wave 的便利，另外绝大多数人没有 Wave 可用。</p>
<p>第二，同 Gmail 不一样， Wave 是被设计用来做协作创作平台用的。也就是说，它更加适合用于一些严肃的事情，例如你和你的同事共同完成一份项目文档，而不适合你和一帮好友讨论今天的晚饭应该在哪里吃。但是，你有了邀请之后，你所优先考虑发放的一定是你的好友，而不太可能是你的同事，一定不会是你的老板。你一定不会和你的朋友之间讨论那些严肃的工作。所以事实上，绝大多数 Wave 被用在了它并不适合的闲扯和聊天上了。（事实上，如果能够解决几个设计上的致命缺陷——毕竟 Wave 并没有打算设计成一个聊天工具—— Wave 事实上是一个非常好的聊天工具。不过这个就跟本文主题无关了。）</p>
<p>第三， Google 在发放 Wave 邀请的时候实在太过于保守了。直到现在，大家对 Wave 的热情劲早已经过去了的时候， Wave 邀请仍然没有烂大街。当然，这其中 Google 也有很多无奈， Wave 推出时的缺乏深思熟虑使得 Wave 至今仍然有重大的缺陷（例如 Wave 多的时候仍然很卡）而不适合大量推广。</p>
<p>然后，我要批评网易微博了。第一，网易微博也是个不能自娱自乐的产品，你需要好友，但是严格的邀请制度在逼迫用户自娱自乐。第二，微博用户，要么 follow 名人，要么 follow 现实中的好友。但是网易微博根本就没有邀请现实生活中好友的任何渠道，所有的邀请码都是通过官方活动发出的。第三，网易在发放邀请的时候太保守了。当然，这也跟网易微博推出的过于仓促有关。原本只是想公司内部测试的产品，不小心闹得沸沸扬扬只能公开。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.steamedfish.org/2010/02/23/%e9%82%80%e8%af%b7%e5%88%b6/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Google Voice 试用小记</title>
		<link>http://blog.steamedfish.org/2010/01/10/google-voice-%e8%af%95%e7%94%a8%e5%b0%8f%e8%ae%b0/</link>
		<comments>http://blog.steamedfish.org/2010/01/10/google-voice-%e8%af%95%e7%94%a8%e5%b0%8f%e8%ae%b0/#comments</comments>
		<pubDate>Sun, 10 Jan 2010 09:52:57 +0000</pubDate>
		<dc:creator>SteamedFish</dc:creator>
				<category><![CDATA[技术相关]]></category>

		<guid isPermaLink="false">http://blog.steamedfish.org/?p=490</guid>
		<description><![CDATA[对于没有美国的电话号码可以绑定的我来说， Google Voice 可以实现以下这些功能：

我可以免费给全世界大部分国家的手机号码发短信，不过有时候会有很大延迟。而且短信不支持汉字，只支持拉丁字母。
对方给我这个号码发短信，资费跟他同一个普通的美国号码发短信一样。我可以以邮件的方式收到发来的短信。同样的不支持汉字。
对方给我这个号码打电话，资费跟他同一个普通的美国号码打电话一样。会提示进行语音留言，我可以以邮件的方式收到语音留言

当然，如果绑定了美国的电话号码，可以有更多更有趣的功能，不过这只能等待 Gizmo5 重新开放注册后才能实现了。
想跟我通过 Google Voice 联系的童鞋，可以记住我的 Google Voice 号码 +1-937-757-1379 。
]]></description>
			<content:encoded><![CDATA[<p>对于没有美国的电话号码可以绑定的我来说， Google Voice 可以实现以下这些功能：</p>
<ul>
<li>我可以免费给全世界大部分国家的手机号码发短信，不过有时候会有很大延迟。而且短信不支持汉字，只支持拉丁字母。</li>
<li>对方给我这个号码发短信，资费跟他同一个普通的美国号码发短信一样。我可以以邮件的方式收到发来的短信。同样的不支持汉字。</li>
<li>对方给我这个号码打电话，资费跟他同一个普通的美国号码打电话一样。会提示进行语音留言，我可以以邮件的方式收到语音留言</li>
</ul>
<p>当然，如果绑定了美国的电话号码，可以有更多更有趣的功能，不过这只能等待 <a href="http://www.google.com/gizmo5/">Gizmo5</a> 重新开放注册后才能实现了。</p>
<p>想跟我通过 Google Voice 联系的童鞋，可以记住我的 Google Voice 号码 +1-937-757-1379 。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.steamedfish.org/2010/01/10/google-voice-%e8%af%95%e7%94%a8%e5%b0%8f%e8%ae%b0/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Totem 的 PPstream 插件</title>
		<link>http://blog.steamedfish.org/2009/08/30/totem-%e7%9a%84-ppstream-%e6%8f%92%e4%bb%b6/</link>
		<comments>http://blog.steamedfish.org/2009/08/30/totem-%e7%9a%84-ppstream-%e6%8f%92%e4%bb%b6/#comments</comments>
		<pubDate>Sun, 30 Aug 2009 15:29:07 +0000</pubDate>
		<dc:creator>SteamedFish</dc:creator>
				<category><![CDATA[技术相关]]></category>

		<guid isPermaLink="false">http://blog.steamedfish.org/?p=426</guid>
		<description><![CDATA[我们大家都知道 ppstream 出了官方的 Linux 版。不过，做得实在有点烂。。。今天才知道 Luo Jinghua 在官方 Linux 版的基础上做了 Totem 的 PPstream 插件，试用结果非常的令我满意。网络电视是我的 Windows 虚拟机上剩下的唯一的软件了，看来我的 Windows 虚拟机可以删了^_^。
安装方法：
如果你用的是 arch 的话，在 AUR 中安装 libpps 和 gst-plugins-pps-git 即可。
如果你用的不是 arch, 呃，我暂时没有环境测试，稍候再更新安装方法
]]></description>
			<content:encoded><![CDATA[<p>我们大家都知道 ppstream 出了官方的 Linux 版。不过，做得实在有点烂。。。今天才知道 Luo Jinghua 在官方 Linux 版的基础上做了 Totem 的 PPstream 插件，试用结果非常的令我满意。网络电视是我的 Windows 虚拟机上剩下的唯一的软件了，看来我的 Windows 虚拟机可以删了^_^。</p>
<div id="attachment_427" class="wp-caption alignnone" style="width: 310px"><img src="http://blog.steamedfish.org/wp-content/uploads/2009/08/totemppstream-300x225.png" alt="Totem 的 PPstream 插件" title="TotemPPstream" width="300" height="225" class="size-medium wp-image-427" /><p class="wp-caption-text">Totem 的 PPstream 插件</p></div>
<p>安装方法：<br />
如果你用的是 arch 的话，在 AUR 中安装 libpps 和 gst-plugins-pps-git 即可。<br />
如果你用的不是 arch, 呃，我暂时没有环境测试，稍候再更新安装方法</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.steamedfish.org/2009/08/30/totem-%e7%9a%84-ppstream-%e6%8f%92%e4%bb%b6/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Linux 下使用 pidgin 实现 gtalk 语音/视频聊天</title>
		<link>http://blog.steamedfish.org/2009/08/30/linux-%e4%b8%8b%e4%bd%bf%e7%94%a8-pidgin-%e5%ae%9e%e7%8e%b0-gtalk-%e8%af%ad%e9%9f%b3%e8%a7%86%e9%a2%91%e8%81%8a%e5%a4%a9/</link>
		<comments>http://blog.steamedfish.org/2009/08/30/linux-%e4%b8%8b%e4%bd%bf%e7%94%a8-pidgin-%e5%ae%9e%e7%8e%b0-gtalk-%e8%af%ad%e9%9f%b3%e8%a7%86%e9%a2%91%e8%81%8a%e5%a4%a9/#comments</comments>
		<pubDate>Sun, 30 Aug 2009 14:03:54 +0000</pubDate>
		<dc:creator>SteamedFish</dc:creator>
				<category><![CDATA[技术相关]]></category>

		<guid isPermaLink="false">http://blog.steamedfish.org/?p=420</guid>
		<description><![CDATA[最近的 Pidgin 2.6.1 已经正式支持 gtalk 的 google audio/video 语音/视频聊天了。可惜 ArchLinux 官方的 pidgin 包虽然已经升级到了 2.6.1, 却没有默认将这一功能编译进去。所以我就自己编译了一个 pidgin, 增加了一个编译参数 enable-vv, vv 是 voice and video 的意思。全部编译参数如下：

  ./configure --prefix=/usr --sysconfdir=/etc --disable-schemas-install --disable-meanwhile \
    --disable-nm --disable-perl --disable-gnutls --enable-cyrus-sasl --disable-doxygen \
    --with-system-ssl-certs=/etc/ssl/certs --enable-vv &#124;&#124; return 1

经测试，一切正常。放上两张截图。抱歉我把视频窗口做了模糊化处理^_^
]]></description>
			<content:encoded><![CDATA[<p>最近的 Pidgin 2.6.1 已经正式支持 gtalk 的 google audio/video 语音/视频聊天了。可惜 ArchLinux 官方的 pidgin 包虽然已经升级到了 2.6.1, 却没有默认将这一功能编译进去。所以我就自己编译了一个 pidgin, 增加了一个编译参数 <code>enable-vv</code>, vv 是 voice and video 的意思。全部编译参数如下：</p>
<pre>
  ./configure --prefix=/usr --sysconfdir=/etc --disable-schemas-install --disable-meanwhile \
    --disable-nm --disable-perl --disable-gnutls --enable-cyrus-sasl --disable-doxygen \
    --with-system-ssl-certs=/etc/ssl/certs --enable-vv || return 1
</pre>
<p>经测试，一切正常。放上两张截图。抱歉我把视频窗口做了模糊化处理^_^</p>
<div id="attachment_421" class="wp-caption alignnone" style="width: 321px"><img src="http://blog.steamedfish.org/wp-content/uploads/2009/08/screenshot3.png" alt="Pidgin 的 Google Voice and Video 支持" title="Pidgin_Gtalk_Video_Audio" width="311" height="571" class="size-full wp-image-421" /><p class="wp-caption-text">Pidgin 的 Google Voice and Video 支持</p></div>
<div id="attachment_423" class="wp-caption alignnone" style="width: 875px"><img src="http://blog.steamedfish.org/wp-content/uploads/2009/08/screenshot1.png" alt="Pidgin 的 Google Voice and Video 支持" title="Pidgin_Google_Voice_Video" width="865" height="852" class="size-full wp-image-423" /><p class="wp-caption-text">Pidgin 的 Google Voice and Video 支持</p></div>
]]></content:encoded>
			<wfw:commentRss>http://blog.steamedfish.org/2009/08/30/linux-%e4%b8%8b%e4%bd%bf%e7%94%a8-pidgin-%e5%ae%9e%e7%8e%b0-gtalk-%e8%af%ad%e9%9f%b3%e8%a7%86%e9%a2%91%e8%81%8a%e5%a4%a9/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>用 fortune 的输出作为 pidgin 的状态显示</title>
		<link>http://blog.steamedfish.org/2009/08/07/%e7%94%a8-fortune-%e7%9a%84%e8%be%93%e5%87%ba%e4%bd%9c%e4%b8%ba-pidgin-%e7%9a%84%e7%8a%b6%e6%80%81%e6%98%be%e7%a4%ba/</link>
		<comments>http://blog.steamedfish.org/2009/08/07/%e7%94%a8-fortune-%e7%9a%84%e8%be%93%e5%87%ba%e4%bd%9c%e4%b8%ba-pidgin-%e7%9a%84%e7%8a%b6%e6%80%81%e6%98%be%e7%a4%ba/#comments</comments>
		<pubDate>Fri, 07 Aug 2009 09:45:34 +0000</pubDate>
		<dc:creator>SteamedFish</dc:creator>
				<category><![CDATA[技术相关]]></category>

		<guid isPermaLink="false">http://blog.steamedfish.org/?p=403</guid>
		<description><![CDATA[很久没有写技术贴了，惭愧和忏悔中。。。
我的 python 很烂，大家凑活看吧，这个程序算是我写的第一个实用的而不是作为练习的 python 程序了。
参考了这个文档:http://developer.pidgin.im/wiki/DbusHowto

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#!/usr/bin/env python
&#160;
import os, sys, dbus, subprocess, time
&#160;
icon = u'\u27a9 '
fortune = &#34;fortune&#34;
fortune_parameters = &#34;-s&#34;
sleep_time=600
&#160;
bus = dbus.SessionBus&#40;&#41;
obj = bus.get_object&#40;&#34;im.pidgin.purple.PurpleService&#34;, &#34;/im/pidgin/purple/PurpleObject&#34;&#41;
purple = dbus.Interface&#40;obj, &#34;im.pidgin.purple.PurpleInterface&#34;&#41;
&#160;
def pidgin_status&#40;message&#41;:
	old_status = purple.PurpleSavedstatusGetCurrent&#40;&#41;
	status_type = purple.PurpleSavedstatusGetType&#40;old_status&#41;
	new_status = purple.PurpleSavedstatusNew&#40;&#34;&#34;, status_type&#41;
	purple.PurpleSavedstatusSetMessage&#40;new_status, fortune + icon + message&#41;
	purple.PurpleSavedstatusActivate&#40;new_status&#41;
&#160;
def fortune_status&#40;fortune_parameters&#41;:
    message = subprocess.Popen&#40;fortune + ' ' + fortune_parameters, stdout=subprocess.PIPE, shell=True&#41;.stdout.read&#40;&#41;.rstrip&#40;&#41;
   [...]]]></description>
			<content:encoded><![CDATA[<p>很久没有写技术贴了，惭愧和忏悔中。。。<br />
我的 python 很烂，大家凑活看吧，这个程序算是我写的第一个实用的而不是作为练习的 python 程序了。<br />
参考了这个文档:<a href="http://developer.pidgin.im/wiki/DbusHowto">http://developer.pidgin.im/wiki/DbusHowto</a></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
</pre></td><td class="code"><pre class="python" style="font-family:monospace;"><span style="font-style: italic; color: #666e64;">#!/usr/bin/env python</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;color: #ede290;">import</span> <span style="color: #dc143c;color: #6b9591;">os</span>, <span style="color: #dc143c;color: #6b9591;">sys</span>, dbus, <span style="color: #dc143c;color: #6b9591;">subprocess</span>, <span style="color: #dc143c;color: #6b9591;">time</span>
&nbsp;
icon = u<span style="color: #483d8b;color: #8e9c6d;">'<span style="color: #000099; font-weight: bold;color: #efb03f;">\u</span>27a9 '</span>
fortune = <span style="color: #483d8b;color: #8e9c6d;">&quot;fortune&quot;</span>
fortune_parameters = <span style="color: #483d8b;color: #8e9c6d;">&quot;-s&quot;</span>
sleep_time=<span style="color: #ff4500;color: #cb694d; font-style: italic;">600</span>
&nbsp;
bus = dbus.<span style="">SessionBus</span><span style="color: black;color: #53695d;">&#40;</span><span style="color: black;color: #53695d;">&#41;</span>
obj = bus.<span style="">get_object</span><span style="color: black;color: #53695d;">&#40;</span><span style="color: #483d8b;color: #8e9c6d;">&quot;im.pidgin.purple.PurpleService&quot;</span>, <span style="color: #483d8b;color: #8e9c6d;">&quot;/im/pidgin/purple/PurpleObject&quot;</span><span style="color: black;color: #53695d;">&#41;</span>
purple = dbus.<span style="">Interface</span><span style="color: black;color: #53695d;">&#40;</span>obj, <span style="color: #483d8b;color: #8e9c6d;">&quot;im.pidgin.purple.PurpleInterface&quot;</span><span style="color: black;color: #53695d;">&#41;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;color: #ede290;">def</span> pidgin_status<span style="color: black;color: #53695d;">&#40;</span>message<span style="color: black;color: #53695d;">&#41;</span>:
	old_status = purple.<span style="">PurpleSavedstatusGetCurrent</span><span style="color: black;color: #53695d;">&#40;</span><span style="color: black;color: #53695d;">&#41;</span>
	status_type = purple.<span style="">PurpleSavedstatusGetType</span><span style="color: black;color: #53695d;">&#40;</span>old_status<span style="color: black;color: #53695d;">&#41;</span>
	new_status = purple.<span style="">PurpleSavedstatusNew</span><span style="color: black;color: #53695d;">&#40;</span><span style="color: #483d8b;color: #8e9c6d;">&quot;&quot;</span>, status_type<span style="color: black;color: #53695d;">&#41;</span>
	purple.<span style="">PurpleSavedstatusSetMessage</span><span style="color: black;color: #53695d;">&#40;</span>new_status, fortune + icon + message<span style="color: black;color: #53695d;">&#41;</span>
	purple.<span style="">PurpleSavedstatusActivate</span><span style="color: black;color: #53695d;">&#40;</span>new_status<span style="color: black;color: #53695d;">&#41;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;color: #ede290;">def</span> fortune_status<span style="color: black;color: #53695d;">&#40;</span>fortune_parameters<span style="color: black;color: #53695d;">&#41;</span>:
    message = <span style="color: #dc143c;color: #6b9591;">subprocess</span>.<span style="">Popen</span><span style="color: black;color: #53695d;">&#40;</span>fortune + <span style="color: #483d8b;color: #8e9c6d;">' '</span> + fortune_parameters, stdout=<span style="color: #dc143c;color: #6b9591;">subprocess</span>.<span style="">PIPE</span>, shell=<span style="color: #008000;color: #97bea9;">True</span><span style="color: black;color: #53695d;">&#41;</span>.<span style="">stdout</span>.<span style="">read</span><span style="color: black;color: #53695d;">&#40;</span><span style="color: black;color: #53695d;">&#41;</span>.<span style="">rstrip</span><span style="color: black;color: #53695d;">&#40;</span><span style="color: black;color: #53695d;">&#41;</span>
    pidgin_status<span style="color: black;color: #53695d;">&#40;</span>message<span style="color: black;color: #53695d;">&#41;</span>	
&nbsp;
<span style="color: #ff7700;font-weight:bold;color: #ede290;">try</span>:
    fortune_parameters = <span style="color: #dc143c;color: #6b9591;">sys</span>.<span style="">argv</span><span style="color: black;color: #53695d;">&#91;</span><span style="color: #ff4500;color: #cb694d; font-style: italic;">1</span><span style="color: black;color: #53695d;">&#93;</span>
<span style="color: #ff7700;font-weight:bold;color: #ede290;">except</span>:
    fortune_status<span style="color: black;color: #53695d;">&#40;</span>fortune_parameters<span style="color: black;color: #53695d;">&#41;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;color: #ede290;">while</span> <span style="color: #008000;color: #97bea9;">True</span>:
    fortune_status<span style="color: black;color: #53695d;">&#40;</span>fortune_parameters<span style="color: black;color: #53695d;">&#41;</span>
    <span style="color: #dc143c;color: #6b9591;">time</span>.<span style="">sleep</span><span style="color: black;color: #53695d;">&#40;</span>sleep_time<span style="color: black;color: #53695d;">&#41;</span></pre></td></tr></table></div>

]]></content:encoded>
			<wfw:commentRss>http://blog.steamedfish.org/2009/08/07/%e7%94%a8-fortune-%e7%9a%84%e8%be%93%e5%87%ba%e4%bd%9c%e4%b8%ba-pidgin-%e7%9a%84%e7%8a%b6%e6%80%81%e6%98%be%e7%a4%ba/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>关于中国某些地区仍然无法连接 google 的分析</title>
		<link>http://blog.steamedfish.org/2009/06/25/%e5%85%b3%e4%ba%8e%e4%b8%ad%e5%9b%bd%e6%9f%90%e4%ba%9b%e5%9c%b0%e5%8c%ba%e4%bb%8d%e7%84%b6%e6%97%a0%e6%b3%95%e8%bf%9e%e6%8e%a5-google-%e7%9a%84%e5%88%86%e6%9e%90/</link>
		<comments>http://blog.steamedfish.org/2009/06/25/%e5%85%b3%e4%ba%8e%e4%b8%ad%e5%9b%bd%e6%9f%90%e4%ba%9b%e5%9c%b0%e5%8c%ba%e4%bb%8d%e7%84%b6%e6%97%a0%e6%b3%95%e8%bf%9e%e6%8e%a5-google-%e7%9a%84%e5%88%86%e6%9e%90/#comments</comments>
		<pubDate>Thu, 25 Jun 2009 03:29:03 +0000</pubDate>
		<dc:creator>SteamedFish</dc:creator>
				<category><![CDATA[技术相关]]></category>

		<guid isPermaLink="false">http://blog.steamedfish.org/?p=352</guid>
		<description><![CDATA[叫全国几个地区的朋友帮我做了测试，其结果是类似的，那就是 dig www.l.google.com 的结果和 dig +trace www.l.google.com 的结果不一样，前者得到的 IP 被 GFW 而后者得到的 IP 可以访问。
现在我倾向于认为，在 google 发现自己的 IP 被 GFW 之后更换了 IP 地址，但是其 DNS 的更改没有在第一时间 fully propagate, 导致部分地区可上而部分地区不能。
解决方法：
1. 换用 opendns
2. 等待 DNS 的 fully propagate
有任何新的发现我将第一时间更新。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
&#91;^_^:~&#93;dig www.google.com                     [...]]]></description>
			<content:encoded><![CDATA[<p>叫全国几个地区的朋友帮我做了测试，其结果是类似的，那就是 dig www.l.google.com 的结果和 dig +trace www.l.google.com 的结果不一样，前者得到的 IP 被 GFW 而后者得到的 IP 可以访问。</p>
<p>现在我倾向于认为，在 google 发现自己的 IP 被 GFW 之后更换了 IP 地址，但是其 DNS 的更改没有在第一时间 fully propagate, 导致部分地区可上而部分地区不能。</p>
<p>解决方法：<br />
1. 换用 opendns<br />
2. 等待 DNS 的 fully propagate</p>
<p>有任何新的发现我将第一时间更新。</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
</pre></td><td class="code"><pre class="" style="font-family:monospace;"><span style="color: #53695d;">&#91;</span>^_^:~<span style="color: #53695d;">&#93;</span>dig www.google.com                                                                                                 
&nbsp;
; &lt; &lt;&gt;&gt; DiG 9.6.0-P1 &lt; &lt;&gt;&gt; www.google.com
;; global options: +cmd
;; Got answer:
;; -&gt;&gt;HEADER&lt; &lt;- opcode: QUERY, status: NOERROR, id: <span style="color: #cb694d; font-style: italic;">44827</span>
;; flags: qr rd ra; QUERY: <span style="color: #cb694d; font-style: italic;">1</span>, ANSWER: <span style="color: #cb694d; font-style: italic;">2</span>, AUTHORITY: <span style="color: #cb694d; font-style: italic;">7</span>, ADDITIONAL: <span style="color: #cb694d; font-style: italic;">1</span>
&nbsp;
;; QUESTION SECTION:
;www.google.com.                        IN      A
&nbsp;
;; ANSWER SECTION:
www.google.com.         <span style="color: #cb694d; font-style: italic;">599685</span>  IN      CNAME   www.l.google.com.
www.l.google.com.       <span style="color: #cb694d; font-style: italic;">36775</span>   IN      A       216.234.179.13
&nbsp;
;; AUTHORITY SECTION:
l.google.com.           <span style="color: #cb694d; font-style: italic;">5579</span>    IN      NS      a.l.google.com.
l.google.com.           <span style="color: #cb694d; font-style: italic;">5579</span>    IN      NS      b.l.google.com.
l.google.com.           <span style="color: #cb694d; font-style: italic;">5579</span>    IN      NS      d.l.google.com.
l.google.com.           <span style="color: #cb694d; font-style: italic;">5579</span>    IN      NS      e.l.google.com.
l.google.com.           <span style="color: #cb694d; font-style: italic;">5579</span>    IN      NS      c.l.google.com.
l.google.com.           <span style="color: #cb694d; font-style: italic;">5579</span>    IN      NS      g.l.google.com.
l.google.com.           <span style="color: #cb694d; font-style: italic;">5579</span>    IN      NS      f.l.google.com.
&nbsp;
;; ADDITIONAL SECTION:
a.l.google.com.         <span style="color: #cb694d; font-style: italic;">84457</span>   IN      A       74.125.53.9
&nbsp;
;; Query time: <span style="color: #cb694d; font-style: italic;">37</span> msec
;; SERVER: 61.135.255.144#<span style="color: #cb694d; font-style: italic;">53</span><span style="color: #53695d;">&#40;</span>61.135.255.144<span style="color: #53695d;">&#41;</span>
;; WHEN: Thu Jun <span style="color: #cb694d; font-style: italic;">25</span> <span style="color: #cb694d; font-style: italic;">11</span>:03:<span style="color: #cb694d; font-style: italic;">24</span> <span style="color: #cb694d; font-style: italic;">2009</span>
;; MSG SIZE  rcvd: <span style="color: #cb694d; font-style: italic;">196</span></pre></td></tr></table></div>

</pre>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
</pre></td><td class="code"><pre class="" style="font-family:monospace;"><span style="color: #53695d;">&#91;</span>^_^:~<span style="color: #53695d;">&#93;</span>dig +trace www.l.google.com                  
&nbsp;
; &lt; &lt;&gt;&gt; DiG 9.6.0-P1 &lt; &lt;&gt;&gt; +trace www.l.google.com
;; global options: +cmd                         
.                       <span style="color: #cb694d; font-style: italic;">518273</span>  IN      NS      B.ROOT-SERVERS.NET.
.                       <span style="color: #cb694d; font-style: italic;">518273</span>  IN      NS      E.ROOT-SERVERS.NET.
.                       <span style="color: #cb694d; font-style: italic;">518273</span>  IN      NS      G.ROOT-SERVERS.NET.
.                       <span style="color: #cb694d; font-style: italic;">518273</span>  IN      NS      M.ROOT-SERVERS.NET.
.                       <span style="color: #cb694d; font-style: italic;">518273</span>  IN      NS      H.ROOT-SERVERS.NET.
.                       <span style="color: #cb694d; font-style: italic;">518273</span>  IN      NS      K.ROOT-SERVERS.NET.
.                       <span style="color: #cb694d; font-style: italic;">518273</span>  IN      NS      I.ROOT-SERVERS.NET.
.                       <span style="color: #cb694d; font-style: italic;">518273</span>  IN      NS      L.ROOT-SERVERS.NET.
.                       <span style="color: #cb694d; font-style: italic;">518273</span>  IN      NS      F.ROOT-SERVERS.NET.
.                       <span style="color: #cb694d; font-style: italic;">518273</span>  IN      NS      A.ROOT-SERVERS.NET.
.                       <span style="color: #cb694d; font-style: italic;">518273</span>  IN      NS      J.ROOT-SERVERS.NET.
.                       <span style="color: #cb694d; font-style: italic;">518273</span>  IN      NS      D.ROOT-SERVERS.NET.
.                       <span style="color: #cb694d; font-style: italic;">518273</span>  IN      NS      C.ROOT-SERVERS.NET.
;; Received <span style="color: #cb694d; font-style: italic;">492</span> bytes from 61.135.255.144#<span style="color: #cb694d; font-style: italic;">53</span><span style="color: #53695d;">&#40;</span>61.135.255.144<span style="color: #53695d;">&#41;</span> in <span style="color: #cb694d; font-style: italic;">38</span> ms
&nbsp;
com.                    <span style="color: #cb694d; font-style: italic;">172800</span>  IN      NS      K.GTLD-SERVERS.NET.
com.                    <span style="color: #cb694d; font-style: italic;">172800</span>  IN      NS      I.GTLD-SERVERS.NET.
com.                    <span style="color: #cb694d; font-style: italic;">172800</span>  IN      NS      G.GTLD-SERVERS.NET.
com.                    <span style="color: #cb694d; font-style: italic;">172800</span>  IN      NS      A.GTLD-SERVERS.NET.
com.                    <span style="color: #cb694d; font-style: italic;">172800</span>  IN      NS      M.GTLD-SERVERS.NET.
com.                    <span style="color: #cb694d; font-style: italic;">172800</span>  IN      NS      E.GTLD-SERVERS.NET.
com.                    <span style="color: #cb694d; font-style: italic;">172800</span>  IN      NS      J.GTLD-SERVERS.NET.
com.                    <span style="color: #cb694d; font-style: italic;">172800</span>  IN      NS      L.GTLD-SERVERS.NET.
com.                    <span style="color: #cb694d; font-style: italic;">172800</span>  IN      NS      H.GTLD-SERVERS.NET.
com.                    <span style="color: #cb694d; font-style: italic;">172800</span>  IN      NS      B.GTLD-SERVERS.NET.
com.                    <span style="color: #cb694d; font-style: italic;">172800</span>  IN      NS      D.GTLD-SERVERS.NET.
com.                    <span style="color: #cb694d; font-style: italic;">172800</span>  IN      NS      C.GTLD-SERVERS.NET.
com.                    <span style="color: #cb694d; font-style: italic;">172800</span>  IN      NS      F.GTLD-SERVERS.NET.
;; Received <span style="color: #cb694d; font-style: italic;">494</span> bytes from 192.112.36.4#<span style="color: #cb694d; font-style: italic;">53</span><span style="color: #53695d;">&#40;</span>G.ROOT-SERVERS.NET<span style="color: #53695d;">&#41;</span> in <span style="color: #cb694d; font-style: italic;">66</span> ms
&nbsp;
google.com.             <span style="color: #cb694d; font-style: italic;">172800</span>  IN      NS      ns1.google.com.
google.com.             <span style="color: #cb694d; font-style: italic;">172800</span>  IN      NS      ns2.google.com.
google.com.             <span style="color: #cb694d; font-style: italic;">172800</span>  IN      NS      ns3.google.com.
google.com.             <span style="color: #cb694d; font-style: italic;">172800</span>  IN      NS      ns4.google.com.
;; Received <span style="color: #cb694d; font-style: italic;">170</span> bytes from 192.43.172.30#<span style="color: #cb694d; font-style: italic;">53</span><span style="color: #53695d;">&#40;</span>I.GTLD-SERVERS.NET<span style="color: #53695d;">&#41;</span> in <span style="color: #cb694d; font-style: italic;">169</span> ms
&nbsp;
l.google.com.           <span style="color: #cb694d; font-style: italic;">86400</span>   IN      NS      e.l.google.com.
l.google.com.           <span style="color: #cb694d; font-style: italic;">86400</span>   IN      NS      d.l.google.com.
l.google.com.           <span style="color: #cb694d; font-style: italic;">86400</span>   IN      NS      g.l.google.com.
l.google.com.           <span style="color: #cb694d; font-style: italic;">86400</span>   IN      NS      a.l.google.com.
l.google.com.           <span style="color: #cb694d; font-style: italic;">86400</span>   IN      NS      b.l.google.com.
l.google.com.           <span style="color: #cb694d; font-style: italic;">86400</span>   IN      NS      c.l.google.com.
l.google.com.           <span style="color: #cb694d; font-style: italic;">86400</span>   IN      NS      f.l.google.com.
;; Received <span style="color: #cb694d; font-style: italic;">258</span> bytes from 216.239.34.10#<span style="color: #cb694d; font-style: italic;">53</span><span style="color: #53695d;">&#40;</span>ns2.google.com<span style="color: #53695d;">&#41;</span> in <span style="color: #cb694d; font-style: italic;">201</span> ms
&nbsp;
www.l.google.com.       <span style="color: #cb694d; font-style: italic;">300</span>     IN      A       64.233.189.104
www.l.google.com.       <span style="color: #cb694d; font-style: italic;">300</span>     IN      A       64.233.189.147
www.l.google.com.       <span style="color: #cb694d; font-style: italic;">300</span>     IN      A       64.233.189.99
;; Received <span style="color: #cb694d; font-style: italic;">82</span> bytes from 74.125.53.9#<span style="color: #cb694d; font-style: italic;">53</span><span style="color: #53695d;">&#40;</span>a.l.google.com<span style="color: #53695d;">&#41;</span> in <span style="color: #cb694d; font-style: italic;">174</span> ms</pre></td></tr></table></div>

]]></content:encoded>
			<wfw:commentRss>http://blog.steamedfish.org/2009/06/25/%e5%85%b3%e4%ba%8e%e4%b8%ad%e5%9b%bd%e6%9f%90%e4%ba%9b%e5%9c%b0%e5%8c%ba%e4%bb%8d%e7%84%b6%e6%97%a0%e6%b3%95%e8%bf%9e%e6%8e%a5-google-%e7%9a%84%e5%88%86%e6%9e%90/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>echo &#8220;hello!&#8221;</title>
		<link>http://blog.steamedfish.org/2009/05/28/echo-hello/</link>
		<comments>http://blog.steamedfish.org/2009/05/28/echo-hello/#comments</comments>
		<pubDate>Thu, 28 May 2009 02:36:01 +0000</pubDate>
		<dc:creator>SteamedFish</dc:creator>
				<category><![CDATA[技术相关]]></category>

		<guid isPermaLink="false">http://blog.steamedfish.org/?p=307</guid>
		<description><![CDATA[I was asked why echo "hello!" doesn&#8217;t work yesterday. I finnaly figured it out today.

steamedfish@SteamedFish:~$ echo "hello!"
bash: !": event not found
steamedfish@SteamedFish:~$ \"
bash: ": command not found
steamedfish@SteamedFish:~$ echo "hello!"
echo "hello""
>

When bash sees !" it trys to search histroy for command ".
]]></description>
			<content:encoded><![CDATA[<p>I was asked why <code>echo "hello!"</code> doesn&#8217;t work yesterday. I finnaly figured it out today.</p>
<pre>
steamedfish@SteamedFish:~$ echo "hello!"
bash: !": event not found
steamedfish@SteamedFish:~$ \"
bash: ": command not found
steamedfish@SteamedFish:~$ echo "hello!"
echo "hello""
>
</pre>
<p>When bash sees <code>!"</code> it trys to search histroy for command <code>"</code>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.steamedfish.org/2009/05/28/echo-hello/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>我感到羞愧和耻辱，和无能为力</title>
		<link>http://blog.steamedfish.org/2009/05/23/%e6%88%91%e6%84%9f%e5%88%b0%e7%be%9e%e6%84%a7%e5%92%8c%e8%80%bb%e8%be%b1%ef%bc%8c%e5%92%8c%e6%97%a0%e8%83%bd%e4%b8%ba%e5%8a%9b/</link>
		<comments>http://blog.steamedfish.org/2009/05/23/%e6%88%91%e6%84%9f%e5%88%b0%e7%be%9e%e6%84%a7%e5%92%8c%e8%80%bb%e8%be%b1%ef%bc%8c%e5%92%8c%e6%97%a0%e8%83%bd%e4%b8%ba%e5%8a%9b/#comments</comments>
		<pubDate>Fri, 22 May 2009 16:25:22 +0000</pubDate>
		<dc:creator>SteamedFish</dc:creator>
				<category><![CDATA[技术相关]]></category>
		<category><![CDATA[疯疯癫癫]]></category>

		<guid isPermaLink="false">http://blog.steamedfish.org/?p=297</guid>
		<description><![CDATA[我们高高在上，看着那些受苦受难的人们，然后我们根据自己心目中的想当然创造了一个系统来“拯救”他们，并且强迫他们使用，然后把他们对这个系统的一切抱怨都归罪于他们的能力。
我们自己为我们创建了一个系统, 这个系统是我们的乐园，我们不欢迎那些低下的人们进入。我们为除了我们之外的其他人创建了另外一个系统，把我们不喜欢的东西通通扔进去。我们在我们的乐园之中喝着咖啡，在优越感的驱使下对乐园以外的人们表达一些廉价的同情。
我们花费了大量的时间来使人们相信， bug 是不可避免的，没有 bug 的软件就不是软件。这样我们就可以做修复 bug 和维护系统这样轻松的工作，而不用花很大精力去写一个没有 bug 的软件。为了能够赚到更多，我们甚至有意让软件充满 bug, 因为只有我们会修复 bug 。
当我们实在懒得修复 bug 的时候，我们就说这是一个 feature 。
我们开发两种软件，一种是为我们开发的软件，只有我们会用，一种是我们为别人开发的软件，没有人会用。
后者没有人会用的原因是我们根本不肯放低我们那高贵的姿态仔细听从那些傻瓜的意见。
我们大声抱怨那些傻瓜从来就没有试图去理解我们强加给他们的意志。
天哪，我们花了那么多的精力给你们开发这套系统，为你们减轻了如此之多的工作量，而你们不但不懂得感恩，竟然还一个劲的抱怨！
我们喝着咖啡，坐在椅子上悠闲地对朋友说：你看这个傻瓜，他连他自己想要做什么都说不清楚。
我们的程序弹出这样的对话框：这个程序似乎已经死了，点击 yes 杀掉它从而绝望地丢失一切数据，点击 no 来继续毫无意义的等待直到电脑被运行到过热起火。
我们的程序弹出这样的对话框：你真的知道点击这个按钮能干什么吗？点击 yes 来发现你错了，点击 no 来发现你还是错了。
我们的程序弹出这样的对话框：我们强烈建议你赶紧点下面的 no, 不过你要是真的蠢到无可救药去点那个 yes 我们也没办法。
我们的程序弹出这样的对话框：我认为你肯定没有足够的智商去弄懂这个选项的含义，所以你得去看我们为你准备的帮助，如果你找得到他在哪里的话。当然，就算你找到了帮助并且看了，你也还是不懂，因为你的智商不够。
我们的程序弹出这样的对话框：我认为你肯定不懂得这个选项的含义，所以我把他弄成了灰色，不让你去点它。
我们的程序弹出这样的对话框：噢，天哪，这个功能需要智商大于250的人才能理解如何使用。你的智商没有达到250，所以我们没有为你准备这个功能。
我们的程序弹出这样的对话框：如果你不赶紧按 no, 你的计算机将在一秒钟之后爆炸。希望爆炸请等待1秒钟，不希望爆炸请赶紧按 no 。
我们的程序弹出这样的对话框：你点击了卸载。请问你知道什么叫做卸载么？什么？！你知道？！那你为什么还要卸载我？！你必须给我说清楚！难道你不知道你卸载了我之后我有办法让你的生活变得更加悲惨么？
IT 业是一个服务行业，我们编写的软件搭建的系统，都是为了服务他人。可是我们实际上把自己化身为上帝，而把我们服务的人都变成了我们的奴隶。
我是一个乐天派。而且，在我周围的，也都是一些乐天派。我原来不理解为什么，现在我理解了：不是乐天派的 IT 工作者，早就因为羞愧而自杀了。
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;
今天，面对着一个让人绝望而抓狂的软件，而自己身为一个 IT 专家却感到无能为力。
我自己从来不用这种“低劣”的软件，并且从内心中鄙视它，可是他们必须靠着这个软件生存。
我不能建议他们使用我那种只能同 IT 专家进行交流的软件。
我奇怪于我内心邪恶的优越感，而我的无能为力伤害了我的自尊心。这一切噩梦，其实都是由我们 IT 人创造。
我们不能逃避。
]]></description>
			<content:encoded><![CDATA[<p>我们高高在上，看着那些受苦受难的人们，然后我们根据自己心目中的想当然创造了一个系统来“拯救”他们，并且强迫他们使用，然后把他们对这个系统的一切抱怨都归罪于他们的能力。<br />
我们自己为我们创建了一个系统, 这个系统是我们的乐园，我们不欢迎那些低下的人们进入。我们为除了我们之外的其他人创建了另外一个系统，把我们不喜欢的东西通通扔进去。我们在我们的乐园之中喝着咖啡，在优越感的驱使下对乐园以外的人们表达一些廉价的同情。<br />
我们花费了大量的时间来使人们相信， bug 是不可避免的，没有 bug 的软件就不是软件。这样我们就可以做修复 bug 和维护系统这样轻松的工作，而不用花很大精力去写一个没有 bug 的软件。为了能够赚到更多，我们甚至有意让软件充满 bug, 因为只有我们会修复 bug 。<br />
当我们实在懒得修复 bug 的时候，我们就说这是一个 feature 。</p>
<p>我们开发两种软件，一种是为我们开发的软件，只有我们会用，一种是我们为别人开发的软件，没有人会用。<br />
后者没有人会用的原因是我们根本不肯放低我们那高贵的姿态仔细听从那些傻瓜的意见。<br />
我们大声抱怨那些傻瓜从来就没有试图去理解我们强加给他们的意志。<br />
天哪，我们花了那么多的精力给你们开发这套系统，为你们减轻了如此之多的工作量，而你们不但不懂得感恩，竟然还一个劲的抱怨！</p>
<p>我们喝着咖啡，坐在椅子上悠闲地对朋友说：你看这个傻瓜，他连他自己想要做什么都说不清楚。</p>
<p>我们的程序弹出这样的对话框：这个程序似乎已经死了，点击 yes 杀掉它从而绝望地丢失一切数据，点击 no 来继续毫无意义的等待直到电脑被运行到过热起火。<br />
我们的程序弹出这样的对话框：你真的知道点击这个按钮能干什么吗？点击 yes 来发现你错了，点击 no 来发现你还是错了。<br />
我们的程序弹出这样的对话框：我们强烈建议你赶紧点下面的 no, 不过你要是真的蠢到无可救药去点那个 yes 我们也没办法。<br />
我们的程序弹出这样的对话框：我认为你肯定没有足够的智商去弄懂这个选项的含义，所以你得去看我们为你准备的帮助，如果你找得到他在哪里的话。当然，就算你找到了帮助并且看了，你也还是不懂，因为你的智商不够。<br />
我们的程序弹出这样的对话框：我认为你肯定不懂得这个选项的含义，所以我把他弄成了灰色，不让你去点它。<br />
我们的程序弹出这样的对话框：噢，天哪，这个功能需要智商大于250的人才能理解如何使用。你的智商没有达到250，所以我们没有为你准备这个功能。<br />
我们的程序弹出这样的对话框：如果你不赶紧按 no, 你的计算机将在一秒钟之后爆炸。希望爆炸请等待1秒钟，不希望爆炸请赶紧按 no 。<br />
我们的程序弹出这样的对话框：你点击了卸载。请问你知道什么叫做卸载么？什么？！你知道？！那你为什么还要卸载我？！你必须给我说清楚！难道你不知道你卸载了我之后我有办法让你的生活变得更加悲惨么？</p>
<p>IT 业是一个服务行业，我们编写的软件搭建的系统，都是为了服务他人。可是我们实际上把自己化身为上帝，而把我们服务的人都变成了我们的奴隶。</p>
<p>我是一个乐天派。而且，在我周围的，也都是一些乐天派。我原来不理解为什么，现在我理解了：不是乐天派的 IT 工作者，早就因为羞愧而自杀了。</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;</p>
<p>今天，面对着一个让人绝望而抓狂的软件，而自己身为一个 IT 专家却感到无能为力。<br />
我自己从来不用这种“低劣”的软件，并且从内心中鄙视它，可是他们必须靠着这个软件生存。<br />
我不能建议他们使用我那种只能同 IT 专家进行交流的软件。<br />
我奇怪于我内心邪恶的优越感，而我的无能为力伤害了我的自尊心。这一切噩梦，其实都是由我们 IT 人创造。<br />
我们不能逃避。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.steamedfish.org/2009/05/23/%e6%88%91%e6%84%9f%e5%88%b0%e7%be%9e%e6%84%a7%e5%92%8c%e8%80%bb%e8%be%b1%ef%bc%8c%e5%92%8c%e6%97%a0%e8%83%bd%e4%b8%ba%e5%8a%9b/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
