<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet href='http://feedsky.blogbus.com/styles/temp01.xsl' type='text/xsl' ?><!--这是一个由Feedsy提供技术支持的Feed，为了提高读者阅读的体验，以及满足用户美化自己Feed的需要，我们设计了多种精美的Feed模板，提供给大家选择，所有最终呈现出来的样式，皆由用户自愿选择使用，未经许可，任何团体和个人，请不要擅自修改样式或者盗用，这是对于用户选择权的尊重。--><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:fs="http://www.feedsky.com/namespace/feed" xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"><channel><link atom:type="text/html">http://bigwhite.blogbus.com/</link><fs:self_link href="http://feeds.feedsky.com/blogbus.com/bigwhite_blogbus_com" type="application/rss+xml"></fs:self_link><lastBuildDate>Thu, 05 Nov 2009 05:28:04 GMT</lastBuildDate><title>Tony Bai</title><description>一个程序员的心路历程</description><atom:link href="http://feedsky.blogbus.com/bigwhite_blogbus_com" type="application/rss+xml" rel="self"></atom:link><generator xmlns="http://www.w3.org/2005/Atom" uri="http://www.blogbus.com/">博客大巴</generator><id xmlns="http://www.w3.org/2005/Atom">http://bigwhite.blogbus.com/atom.xml</id><link xmlns="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://bigwhite.blogbus.com/atom.xml"></link><pubDate>Thu, 05 Nov 2009 05:28:04 GMT</pubDate><image><title>Tony Bai</title><url>http://public.blogbus.com/profile/head.gif</url><link>http://bigwhite.blogbus.com/</link></image><item><title>一个Solaris x86平台64位编译的问题</title><link atom:type="text/html">http://bigwhite.blogbus.com/logs/50267208.html</link><author xmlns="http://www.w3.org/2005/Atom"></author><id xmlns="http://www.w3.org/2005/Atom">http://bigwhite.blogbus.com/logs/50267208.html</id><description>&lt;p&gt;上午在做一个&lt;a href=&quot;http://bigwhite.blogbus.com/logs/46150698.html&quot; target=&quot;_blank&quot;&gt;Solaris 10 &lt;/a&gt;on x86代码移植测试过程中，发现一个&lt;a href=&quot;http://bigwhite.blogbus.com/logs/2062606.html&quot; target=&quot;_blank&quot;&gt;Gcc&lt;/a&gt;编译问题，这里记录下来以作备忘。&lt;/p&gt;
&lt;p&gt;我们的代码在一台安装了Solaris 10 for x86平台的机器A上进行64位编译(gcc -m64)时报错，错误信息如下：&lt;br /&gt;&quot;xx.c:1: sorry, unimplemented: 64-bit mode not compiled in&quot;。&lt;/p&gt;
&lt;p&gt;而奇怪的是在另外一台同为Solaris 10 for x86的机器B（与上面的机器A硬件配置相同）上则顺利编译通过。最初猜测可能是因为系统设置或环境变量设置不同导致的问题，经过对比检查后发现以上设置都一致，最后将问题定位在Gcc编译器版本上了。&lt;/p&gt;
&lt;p&gt;机器A上使用的是Gcc 3.4.6 for Solaris 10 on x86版本；而可以通过编译的那台机器B上使用的是Gcc 3.4.3 (csl-sol210-3_4-branch+sol_rpath) for Solaris 10 x86版本。尝试在机器A上使用Gcc 3.4.3进行编译，错误未再出现，看来的确是Gcc编译器版本问题。&lt;/p&gt;
&lt;p&gt;遂到Sunfreeware网站上一查究竟。在Gcc 3.4.6 for Solaris 10 on x86的软件说明中，有这样一段话：&lt;br /&gt;&amp;ldquo;If you need to do 64-bit compiles, you should use the gcc-3.4.3 that comes with Solaris 10 in /usr/sfw/bin.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;而Gcc 3.4.6 for Solaris 10 on sparc的版本说明中，则明确表示：&amp;ldquo;When needed and the source code supports it, this C compiler can create 64-bit executables via the -m64 flag as well as the usual 32-bit ones.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;注：以上提到的Solaris软件均来自于&lt;a href=&quot;http://www.sunfreeware.com&quot; target=&quot;_blank&quot;&gt;Sunfreeware&lt;/a&gt;站点。&lt;/p&gt;&lt;!--sp--&gt;&lt;div class=&quot;relpost&quot;&gt;&lt;br/&gt;&lt;h3&gt;随机文章：&lt;/h3&gt;&lt;div&gt;&lt;a href=&quot;http://bigwhite.blogbus.com/logs/49659694.html&quot;&gt;使用iconv做内码转换&lt;/a&gt; 2009-10-31&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;http://bigwhite.blogbus.com/logs/47259473.html&quot;&gt;也谈VIM字符集编码设置&lt;/a&gt; 2009-09-28&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;http://bigwhite.blogbus.com/logs/46150698.html&quot;&gt;Solaris 10安装二三事&lt;/a&gt; 2009-09-10&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;http://bigwhite.blogbus.com/logs/45987721.html&quot;&gt;Bash文件描述符重定向符号的另类理解&lt;/a&gt; 2009-09-08&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;http://bigwhite.blogbus.com/logs/45153784.html&quot;&gt;Cmockery支持mock输出参数&lt;/a&gt; 2009-08-26&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;sysmsg&quot;&gt;&lt;b&gt;&lt;a href=&quot;http://www.blogbus.com&quot; target=&quot;_blank&quot;&gt;博客大巴，你的个人传媒早班车&lt;/a&gt;&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;addfav&quot;&gt;收藏到：&lt;span class= &quot;delicious&quot;&gt;&lt;a href=&quot;http://delicious.com/save?url=http%3A%2F%2Fbigwhite.blogbus.com%2Flogs%2F50267208.html&amp;title=%E4%B8%80%E4%B8%AASolaris+x86%E5%B9%B3%E5%8F%B064%E4%BD%8D%E7%BC%96%E8%AF%91%E7%9A%84%E9%97%AE%E9%A2%98&quot;&gt;Del.icio.us&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/292272796/bigwhite_blogbus_com/blogbus.com/s.gif?r=http://bigwhite.blogbus.com/logs/50267208.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/blogbus.com/bigwhite_blogbus_com/292272796/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/blogbus.com/bigwhite_blogbus_com/292272796/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><category domain="http://bigwhite.blogbus.com/c/">未分类</category><pubDate>Thu, 05 Nov 2009 13:20:23 +0800</pubDate><guid isPermaLink="false">http://bigwhite.blogbus.com/logs/50267208.html</guid><fs:srclink>http://bigwhite.blogbus.com/logs/50267208.html</fs:srclink><fs:srcfeed>http://bigwhite.blogbus.com/atom.xml</fs:srcfeed><fs:itemid>blogbus.com/bigwhite_blogbus_com/~6905475/292272796/5013394</fs:itemid></item><item><title>使用iconv做内码转换</title><link atom:type="text/html">http://bigwhite.blogbus.com/logs/49659694.html</link><author xmlns="http://www.w3.org/2005/Atom"></author><id xmlns="http://www.w3.org/2005/Atom">http://bigwhite.blogbus.com/logs/49659694.html</id><description>&lt;p&gt;前不久某南方省份的客户反馈说我们的产品对某些生僻字(如&amp;ldquo;赟&amp;rdquo;)的&lt;a href=&quot;http://bigwhite.blogbus.com/logs/10617585.html&quot; target=&quot;_blank&quot;&gt;转码&lt;/a&gt;支持的不好，终端收到后无法显示这个字。&lt;br /&gt;&lt;br /&gt;经分析，发现类似&amp;ldquo;赟&amp;rdquo;这样的字在GB2312编码标准中并未收录，要想支持这样的生僻字的内码转换需要产品支持目前最新的中文编码标准GB18030。而我们的产品在诞生到现在就一直只支持GB2312，这就是导致这一问题的直接原因。&lt;br /&gt;&lt;br /&gt;产品以前的代码库中&lt;a href=&quot;http://bigwhite.blogbus.com/logs/10617585.html&quot; target=&quot;_blank&quot;&gt;内码转换&lt;/a&gt;的接口都是自己实现的，仅支持GB2312和UCS-2(即UNICODE16)之间的内码互转，如果要扩展就要更换码表。与其耗费力气找码表还不如挖掘一下开源世界最常用的内码转换工具&lt;a href=&quot;http://www.gnu.org/software/libiconv/&quot; target=&quot;_blank&quot;&gt;iconv&lt;/a&gt;呢。iconv既提供了命令行转换工具(&lt;a href=&quot;http://zh.wikipedia.org/wiki/Iconv&quot; target=&quot;_blank&quot;&gt;iconv&lt;/a&gt;)，也提供一系列函数库接口供开发人员在代码里调用。很多知名的开源软件包(如&lt;a href=&quot;http://bigwhite.blogbus.com/logs/33121799.html&quot; target=&quot;_blank&quot;&gt;vim&lt;/a&gt;等)都依赖iconv包。而iconv也几乎遍布所有unix和linux平台，iconv提供的转码支持也基本涵盖了世界范围内绝大多数主流字符集，其中支持的中文字符集就包括GBK, CP936, GB18030, BIG5等主流内码标准。&lt;br /&gt;&lt;br /&gt;iconv的函数接口很简单，我迫不及待的想写一个例子测试一下了（不料，就在写下的这个简单的例子里我犯下了一个低级错误^_^)。&lt;br /&gt;&lt;br /&gt;下面例子代码目的是将&quot;赟&quot;从UTF-8编码转换为GB18030编码（环境：GCC 3.4.6 on &lt;a href=&quot;http://bigwhite.blogbus.com/logs/46150698.html&quot; target=&quot;_blank&quot;&gt;Solaris 10&lt;/a&gt; for X86）。&lt;br /&gt;#include &amp;lt;iconv.h&amp;gt;&lt;br /&gt;&lt;br /&gt;int main() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; char&amp;nbsp;&amp;nbsp;&amp;nbsp; in[8];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; char&amp;nbsp;&amp;nbsp;&amp;nbsp; out[255];&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; memset(in, 0, sizeof(in));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; memset(out, 0, sizeof(out));&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; in[0]&amp;nbsp;&amp;nbsp; = 0xe8; /* &quot;赟&quot;的UTF-8编码: E8B59F */&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; in[1]&amp;nbsp;&amp;nbsp; = 0xb5;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; in[2]&amp;nbsp;&amp;nbsp; = 0x9f;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; size_t&amp;nbsp; inlen = strlen(in);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; size_t&amp;nbsp; outlen = sizeof(out);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; iconv_t cd;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cd = iconv_open(&quot;gb18030&quot;,&quot;utf-8&quot;); /* from utf-8-&amp;gt;gb18030 */&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (cd &amp;lt; 0) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;iconv_open failed!\n&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return -1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (iconv(cd, &amp;amp;in, &amp;amp;inlen, &amp;amp;out, &amp;amp;outlen) &amp;lt; 0) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;iconv failed!\n&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; iconv_close(cd);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return -1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;out = %s\n&quot;, out);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; iconv_close(cd);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return 0;&lt;br /&gt;}&lt;br /&gt;以上代码通过iconv_open获取一个转换描述符，这个描述符包含了转换信息（如从UTF-8转换到GB18030），然后调用iconv接口对传入的字符串进行转换，转换后的结果存储在OUT缓冲区中。&lt;br /&gt;&lt;br /&gt;编译执行执行上面代码：&lt;br /&gt;gcc -g testiconv.c -liconv &lt;br /&gt;testiconv.c: In function `main':&lt;br /&gt;testiconv.c:26: warning: passing arg 2 of `libiconv' from incompatible pointer type&lt;br /&gt;testiconv.c:26: warning: passing arg 4 of `libiconv' from incompatible pointer type&lt;br /&gt;&lt;br /&gt;./a.out&lt;br /&gt;段错误 (core dumped)&lt;br /&gt;&lt;br /&gt;为什么会&lt;a href=&quot;http://bigwhite.blogbus.com/logs/12296535.html&quot; target=&quot;_blank&quot;&gt;dump core&lt;/a&gt;呢？回顾一下编译时的Warning信息，再对比一下iconv接口的原型：&lt;br /&gt;size_t iconv (iconv_t cd, const char* * inbuf, size_t * inbytesleft, &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; char* * outbuf, size_t * outbytesleft);&lt;br /&gt;似乎没什么问题，但又仔细分析了一下Core的栈上信息，发现了一个低级失误：&lt;br /&gt;问题就出在iconv的第二个和第四个参数上，我在栈上分配了数据in和out，并简单的将&amp;amp;in和&amp;amp;out作为参数传给了iconv。iconv要得是char **类型的参数。看起来&amp;amp;in和&amp;amp;out类型也是char **，但实则不然，这也是C语言的一个陷阱。以in为例，in本身就是栈上那个数组的首地址，&amp;amp;in的含义与in相同，同样是数组的首地址，所以&amp;amp;in = in，也就是说实际上传给iconv的是一个char*而不是char**，iconv在内部对一个char*执行*操作，并以为这是一个地址，显然会导致内存错误。&lt;br /&gt;&lt;br /&gt;修改一下代码：&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; char&amp;nbsp;&amp;nbsp;&amp;nbsp; *p_in&amp;nbsp;&amp;nbsp;&amp;nbsp; = in;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; char&amp;nbsp;&amp;nbsp;&amp;nbsp; *p_out&amp;nbsp;&amp;nbsp;&amp;nbsp; = out; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (iconv(cd, &amp;amp;p_in, &amp;amp;inlen, &amp;amp;p_out, &amp;amp;outlen) &amp;lt; 0) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;iconv failed!\n&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; iconv_close(cd);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return -1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;p_in变量在&lt;a href=&quot;http://bigwhite.blogbus.com/logs/1592114.html&quot; target=&quot;_blank&quot;&gt;栈上&lt;/a&gt;分配，其本身的地址是&amp;amp;p_in，其值指向in这个&lt;a href=&quot;http://bigwhite.blogbus.com/logs/2668761.html&quot; target=&quot;_blank&quot;&gt;数组&lt;/a&gt;的首地址，这样将&amp;amp;p_in传给iconv就万无一失了。&lt;br /&gt;再编译执行，我们就得到了正确结果：&lt;br /&gt;out = 赟&lt;br /&gt;&lt;br /&gt;unix上有很多iconv实现，由于版本不同可能支持的字符集范围不同，所以为了保证代码行为一致，你可下载最新iconv包，并生成静态库(./configure --enable-static=yes)，并让你的代码链接静态库。&lt;br /&gt;&lt;br /&gt;午饭时从电视中得知：中国航天之父钱学森今天上午在北京离世。钱老可谓是中国科学家的楷模，对钱老的离世感到甚为惋惜。这里也道一句：&amp;ldquo;钱老，一路走好！&amp;rdquo;&lt;/p&gt;&lt;!--sp--&gt;&lt;div class=&quot;relpost&quot;&gt;&lt;br/&gt;&lt;h3&gt;随机文章：&lt;/h3&gt;&lt;div&gt;&lt;a href=&quot;http://bigwhite.blogbus.com/logs/50267208.html&quot;&gt;一个Solaris x86平台64位编译的问题&lt;/a&gt; 2009-11-05&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;http://bigwhite.blogbus.com/logs/47259473.html&quot;&gt;也谈VIM字符集编码设置&lt;/a&gt; 2009-09-28&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;http://bigwhite.blogbus.com/logs/46150698.html&quot;&gt;Solaris 10安装二三事&lt;/a&gt; 2009-09-10&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;http://bigwhite.blogbus.com/logs/45987721.html&quot;&gt;Bash文件描述符重定向符号的另类理解&lt;/a&gt; 2009-09-08&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;http://bigwhite.blogbus.com/logs/45153784.html&quot;&gt;Cmockery支持mock输出参数&lt;/a&gt; 2009-08-26&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;sysmsg&quot;&gt;&lt;b&gt;&lt;a href=&quot;http://www.blogbus.com&quot; target=&quot;_blank&quot;&gt;博客大巴，你的个人传媒早班车&lt;/a&gt;&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;addfav&quot;&gt;收藏到：&lt;span class= &quot;delicious&quot;&gt;&lt;a href=&quot;http://delicious.com/save?url=http%3A%2F%2Fbigwhite.blogbus.com%2Flogs%2F49659694.html&amp;title=%E4%BD%BF%E7%94%A8iconv%E5%81%9A%E5%86%85%E7%A0%81%E8%BD%AC%E6%8D%A2&quot;&gt;Del.icio.us&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/292272797/bigwhite_blogbus_com/blogbus.com/s.gif?r=http://bigwhite.blogbus.com/logs/49659694.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/blogbus.com/bigwhite_blogbus_com/292272797/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/blogbus.com/bigwhite_blogbus_com/292272797/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><category domain="http://bigwhite.blogbus.com/c/">未分类</category><pubDate>Sat, 31 Oct 2009 15:08:45 +0800</pubDate><guid isPermaLink="false">http://bigwhite.blogbus.com/logs/49659694.html</guid><fs:srclink>http://bigwhite.blogbus.com/logs/49659694.html</fs:srclink><fs:srcfeed>http://bigwhite.blogbus.com/atom.xml</fs:srcfeed><fs:itemid>blogbus.com/bigwhite_blogbus_com/~6905475/292272797/5013394</fs:itemid></item><item><title>说书单2009.10.28</title><link atom:type="text/html">http://bigwhite.blogbus.com/logs/49365632.html</link><author xmlns="http://www.w3.org/2005/Atom"></author><id xmlns="http://www.w3.org/2005/Atom">http://bigwhite.blogbus.com/logs/49365632.html</id><description>&lt;p&gt;十月以来，自已通过&lt;a href=&quot;http://bigwhite.blogbus.com/logs/10807232.html&quot; target=&quot;_blank&quot;&gt;网购&lt;/a&gt;或换购还真收了不少书，这里说说：&lt;br /&gt;&lt;br /&gt;国内关于伟大领袖毛主席的传记实在让我无法提起兴致，但哈佛大学教授Ross Terrill的《&lt;a href=&quot;http://www.douban.com/subject/1485628/&quot; target=&quot;_blank&quot;&gt;毛泽东传&lt;/a&gt;》我早在其出版时就关注过，它可以让我弄清楚毛主席在一个西方人眼中的事实形象。昨天偶然发现该书在&lt;a href=&quot;http://www.amazon.cn&quot; target=&quot;_blank&quot;&gt;卓越网&lt;/a&gt;的卖价居然比其他网店（诸如&lt;a href=&quot;http://www.dangdang.com&quot; target=&quot;_blank&quot;&gt;当当网&lt;/a&gt;）便宜近十元，这个&amp;ldquo;便宜&amp;rdquo;怎能不捡^_^，遂在昨天下了订单。今天再一看卓越的定价居然涨到了35.8元，涨了仅5元，不过还是比其他网店要便宜。&lt;br /&gt;&lt;br /&gt;说到传记，就不能不提到最近卖的很火一本传记书-前Google中国区负责人李开复的新书 《&lt;a href=&quot;http://www.douban.com/subject/4010196/&quot; target=&quot;_blank&quot;&gt;世界因你不同 李开复自传&lt;/a&gt;》。以前读过李开复的《&lt;a href=&quot;http://www.douban.com/subject/1427679/&quot; target=&quot;_blank&quot;&gt;做最好的自己&lt;/a&gt;》，感觉很不错，所以这次也这本新书列入了购物车中。同时我也的确想通过李开复的书或多或少的去了解一下像微软、Google这样的大公司的一些运作&amp;ldquo;内幕&quot;^_^。&lt;br /&gt;&lt;br /&gt;今天在中国移动积分商场看到一套丛书套装《&lt;a href=&quot;http://www.douban.com/subject/2103573/&quot; target=&quot;_blank&quot;&gt;世界艺术瑰宝&lt;/a&gt;》很是动心，遂让同事先帮忙用2170积分换购下来（我的积分还差100多）。丛书共六册，均为全彩印刷，主要留作日后陶冶艺术情操、提升品位、家庭教育和旅游规划之用。&lt;br /&gt;&lt;br /&gt;&amp;ldquo;灵修&amp;rdquo;二字我也是第一次遇到，十月初网购的一本名为《&lt;a href=&quot;http://www.douban.com/subject/3158482/&quot; target=&quot;_blank&quot;&gt;新世界 灵性的觉醒&lt;/a&gt;》就是此类书籍。书的作者在西方很有名，同时也是一个怪人。书还没开始看（还未做好心理准备^_^），初略翻阅了一下，觉得有些难度，或多或少的会折腾一下你的大脑神经的。&lt;br /&gt;&lt;br /&gt;《&lt;a href=&quot;http://www.douban.com/subject/3908032/&quot; target=&quot;_blank&quot;&gt;怪诞心理学&lt;/a&gt;》和《&lt;a href=&quot;http://www.douban.com/subject/3353860/&quot; target=&quot;_blank&quot;&gt;思维风暴&lt;/a&gt;》与&amp;ldquo;新世界&amp;rdquo;一书一起到手，前者是为了尝试了解一些大众心理学的内容，花了两个等晚点航班的时间段就翻阅完了；后者则纯粹为了让自己的大脑保持活跃的。&lt;br /&gt;&lt;br /&gt;现在已是深秋近初冬季节，在暖气未供给之前，北方的屋内也都是冷冷的、湿湿的。捂在暖暖的被窝儿中看书那是何等的快哉。捧在我手中的这本《&lt;a href=&quot;http://www.douban.com/subject/1867642/&quot; target=&quot;_blank&quot;&gt;世界是平的&lt;/a&gt;》 自从07年从书刊批发市场买回后只看了一半，现在正以每天一章的速度阅读着，估计这周就能欣赏完这部三年前的名作了。如果再不快看，里面的一些观点可能就要过时了^_^。&lt;/p&gt;&lt;!--sp--&gt;&lt;div class=&quot;relpost&quot;&gt;&lt;br/&gt;&lt;h3&gt;随机文章：&lt;/h3&gt;&lt;div&gt;&lt;a href=&quot;http://bigwhite.blogbus.com/logs/38277390.html&quot;&gt;网上淘二手书&lt;/a&gt; 2009-04-21&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;http://bigwhite.blogbus.com/logs/16383186.html&quot;&gt;在卓越网买书&lt;/a&gt; 2008-03-04&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;http://bigwhite.blogbus.com/logs/10807232.html&quot;&gt;第一次网上买书&lt;/a&gt; 2007-11-15&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;http://bigwhite.blogbus.com/logs/10717732.html&quot;&gt;读'代码修改艺术'，可观其大略&lt;/a&gt; 2007-11-09&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;http://bigwhite.blogbus.com/logs/4137065.html&quot;&gt;'Write Great Code'书中的一处错误&lt;/a&gt; 2006-12-26&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;sysmsg&quot;&gt;&lt;b&gt;&lt;a href=&quot;http://www.blogbus.com&quot; target=&quot;_blank&quot;&gt;博客大巴，你的个人传媒早班车&lt;/a&gt;&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;addfav&quot;&gt;收藏到：&lt;span class= &quot;delicious&quot;&gt;&lt;a href=&quot;http://delicious.com/save?url=http%3A%2F%2Fbigwhite.blogbus.com%2Flogs%2F49365632.html&amp;title=%E8%AF%B4%E4%B9%A6%E5%8D%952009.10.28&quot;&gt;Del.icio.us&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/292272798/bigwhite_blogbus_com/blogbus.com/s.gif?r=http://bigwhite.blogbus.com/logs/49365632.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/blogbus.com/bigwhite_blogbus_com/292272798/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/blogbus.com/bigwhite_blogbus_com/292272798/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><category domain="http://bigwhite.blogbus.com/c/">未分类</category><pubDate>Wed, 28 Oct 2009 23:03:22 +0800</pubDate><guid isPermaLink="false">http://bigwhite.blogbus.com/logs/49365632.html</guid><fs:srclink>http://bigwhite.blogbus.com/logs/49365632.html</fs:srclink><fs:srcfeed>http://bigwhite.blogbus.com/atom.xml</fs:srcfeed><fs:itemid>blogbus.com/bigwhite_blogbus_com/~6905475/292272798/5013394</fs:itemid></item><item><title>榕城走一回</title><link atom:type="text/html">http://bigwhite.blogbus.com/logs/49056437.html</link><author xmlns="http://www.w3.org/2005/Atom"></author><id xmlns="http://www.w3.org/2005/Atom">http://bigwhite.blogbus.com/logs/49056437.html</id><description>&lt;p&gt;应客户之邀，本周一到福州做业务需求调研，周三返回沈阳。&lt;br /&gt;&lt;br /&gt;以前从未去过榕城福州，领导下达调研任务时已是上周五。时间比较仓促，而且要求周一上午务必到达福州，因为客户方领导都较忙，也只有在周一才有机会见到客户领导。&lt;br /&gt;&lt;br /&gt;安抚了LP后，周日下午我背上本子，带了几件随身衣物，就匆忙赶往机场。从沈阳出发到福州的航班都是有经停的，而且多是厦航、川航这样的小航空公司。为了能多陪LP一会儿，我选择了起飞较晚的航班，计划晚上22点到达福州。但是人算不如天算，航班晚点，周一凌晨1点才抵达福州长乐机场。在机场等飞机那是何等的煎熬，还好我随身带了一本《&lt;a href=&quot;http://www.douban.com/subject/3908032/&quot; target=&quot;_blank&quot;&gt;怪诞心理学&lt;/a&gt;》可以帮我打发时间。&lt;br /&gt;&lt;br /&gt;此时的北方已进入深秋，夜晚温度近零度，但榕城却仍旧是一片温暖和煦，下飞机时机场地面温度依然有20多摄氏度。福州长乐机场距离市区较远，估计是我到过的城市里机场离市区最远的了。乘机场大巴用了将近一个多小时才到达终点（阿波罗大酒店）。打车到达闽江饭店Checkin时已是凌晨2点半了。走进房间后竟全无睡意，但想到白天还要到客户那开会，还是强迫自己入睡。&lt;br /&gt;&lt;br /&gt;早上七点醒来，头有些痛，显然这短暂的睡眠还不能缓解我身体的疲劳。酒店提供早餐，早餐品种还算丰富，就是味道清淡了些，让我这个习惯了浓重口味的北方人有些不适^_^。和当地办事处的同事约好时间，上午做内部讨论，下午再去见客户。上午9点走出酒店，第一次清晰的看到榕城的闹市景象。和大多数省会城市一样，高楼大厦，繁忙喧嚣。瞥了一眼马路上的情况，看得出福州堵车也很严重^_^。既然福州号称榕城，那自然少不了榕树，我是不认识榕树的，但是猜也猜得出，大街两旁矗立的那些枝叶繁茂、树冠巨大的树肯定就是榕树了。&lt;br /&gt;&lt;br /&gt;和北方相比，这里简直就是夏天，大街上男女老幼均是半袖裙子打扮，我也&amp;ldquo;入乡随俗&amp;rdquo;，脱去了厚重的外套，穿上了半袖衬衫。公司的办事处离酒店很近，走路也就5分钟，工作内容这里就不多说了。中午办事处领导在港式茶餐厅请客，这也算是入榕城后的第一顿饭了，遗憾的是少了些许本地菜的特色。席间听同事谈福州的房价，才知道福州房价要比沈阳高出一倍多，均价估计要上万，这在国内省会级城市里也算是排在前列的了。&lt;br /&gt;&lt;br /&gt;下午见客户，途中路过闽江，江不宽，但却不失忙碌，闽江两旁码头林立，闽江中央船只往复。很想驻足欣赏，但无奈有公务在身^_^。&lt;br /&gt;&lt;br /&gt;从客户那开完会出来已是华灯初上。同事带我去了一家当地特色的饭店吃了一顿牛排，这个牛排不是西餐中的那种烤牛肉，而是原生的牛排骨，一碗鲜美的汤中泡着两块包裹着厚实牛肉的牛排骨。以前从未这么吃过牛肉，这还是第一次，据同事介绍这家店里的牛肉是正宗的当地&amp;ldquo;达道牛肉&amp;rdquo;，肉质的确很嫩。&lt;br /&gt;&lt;br /&gt;我有一个喜好，就是每到一地必到当地的博物馆，但是这次估计是真的没有时间了，因为周二有很多资料要准备，索性就在酒店里闷了一天。晚上出来随意到了一家小店吃了一口，然后在酒店附近转了转。福州的街道环境卫生一般，马路上街道旁可见随意丢弃的废物，很多国内城市（包括沈阳）也是这个样子。福州的电动自行车很多，起码比沈阳要多，每到饭点儿，在各家饭店门口你会看到一排排的电动车。福州的物价倒是不低，在超市里逛了逛发现无论是菜价还是水果价格都不在沈阳之下，甚至一些南方水果的价格也不低。&lt;br /&gt;&lt;br /&gt;周三上午到客户现场与客户再次开会，就周一会上的一些问题和需求做应答。下午一点坐大巴赶往机场，三点的厦行航班居然又晚点了近一个小时。更可气的是经停南京时由于航空管制，竟坐在飞机上等了近一个多小时。回到家里已经是晚上10点多了。一进门，LP正坐在沙发上等我吃晚饭呢，那时那刻，心里美滋滋的。这两天发现自己的脸摸起来很顺滑儿，估计用福州的水的功劳，福州的水水质较软。&lt;br /&gt;&lt;br /&gt;之前一直认为福州是个内陆临江城市，但是今天看了Google地图才发现原来福州机场东测就是大海。这次榕城行真是太匆忙了，甚至没有留下一张照片，下次有机会有时间一定细致&amp;ldquo;挖掘&amp;rdquo;一下福州。&lt;br /&gt;&lt;br /&gt;有些像流水帐^_^。&lt;/p&gt;&lt;!--sp--&gt;&lt;div class=&quot;relpost&quot;&gt;&lt;br/&gt;&lt;h3&gt;随机文章：&lt;/h3&gt;&lt;div&gt;&lt;a href=&quot;http://bigwhite.blogbus.com/logs/41788785.html&quot;&gt;成都行记&lt;/a&gt; 2009-07-02&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;http://bigwhite.blogbus.com/logs/41429409.html&quot;&gt;走进九寨&lt;/a&gt; 2009-06-24&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;http://bigwhite.blogbus.com/logs/30865697.html&quot;&gt;离开太原&lt;/a&gt; 2008-10-31&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;http://bigwhite.blogbus.com/logs/30650562.html&quot;&gt;游永祚寺和迎泽公园&lt;/a&gt; 2008-10-26&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;http://bigwhite.blogbus.com/logs/30630740.html&quot;&gt;太原晋祠游记&lt;/a&gt; 2008-10-25&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;sysmsg&quot;&gt;&lt;b&gt;&lt;a href=&quot;http://www.blogbus.com&quot; target=&quot;_blank&quot;&gt;博客大巴，你的个人传媒早班车&lt;/a&gt;&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;addfav&quot;&gt;收藏到：&lt;span class= &quot;delicious&quot;&gt;&lt;a href=&quot;http://delicious.com/save?url=http%3A%2F%2Fbigwhite.blogbus.com%2Flogs%2F49056437.html&amp;title=%E6%A6%95%E5%9F%8E%E8%B5%B0%E4%B8%80%E5%9B%9E&quot;&gt;Del.icio.us&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/292272799/bigwhite_blogbus_com/blogbus.com/s.gif?r=http://bigwhite.blogbus.com/logs/49056437.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/blogbus.com/bigwhite_blogbus_com/292272799/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/blogbus.com/bigwhite_blogbus_com/292272799/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><category domain="http://bigwhite.blogbus.com/c/">未分类</category><pubDate>Sat, 24 Oct 2009 13:58:11 +0800</pubDate><guid isPermaLink="false">http://bigwhite.blogbus.com/logs/49056437.html</guid><fs:srclink>http://bigwhite.blogbus.com/logs/49056437.html</fs:srclink><fs:srcfeed>http://bigwhite.blogbus.com/atom.xml</fs:srcfeed><fs:itemid>blogbus.com/bigwhite_blogbus_com/~6905475/292272799/5013394</fs:itemid></item><item><title>ReviewBoard中文支持</title><link atom:type="text/html">http://bigwhite.blogbus.com/logs/47654353.html</link><author xmlns="http://www.w3.org/2005/Atom"></author><id xmlns="http://www.w3.org/2005/Atom">http://bigwhite.blogbus.com/logs/47654353.html</id><description>&lt;p&gt;&lt;a id=&quot;lfp7&quot; title=&quot;ReviewBoard安装&quot; href=&quot;http://bigwhite.blogbus.com/logs/46764596.html&quot;&gt;ReviewBoard安装&lt;/a&gt;成功至今已半月有余，这期间我一直在试用它，虽欣喜于其提供的强大的功能，但还是有若干使用中的问题一直让我头痛不已，同时也阻碍了在部门推广该工具的进程。&lt;br /&gt;&lt;br /&gt;首当其冲的就是对中文的支持问题。按照&lt;a id=&quot;e1.e&quot; title=&quot;默认的步骤安装和配置&quot; href=&quot;http://bigwhite.blogbus.com/logs/46764596.html&quot;&gt;默认的步骤安装和配置&lt;/a&gt;后，
输入和保存英文均没有问题，但是一旦输入中文，保存后页面显示的都是乱码，甚至某些时候在保存中文数据时ReviewBoard还提示错误。我的
Ubuntu的locale是&quot;zh_CN.UTF-8&quot;，输入法输入后的中文内码应该是UTF-8。ReviewBoard本身按理来说其内核也应该是
内置支持的UTF-8编码的，问题出在哪呢？答案是MySQL。&lt;br /&gt;&lt;br /&gt;在命令行模式进入MySQL，敲入status命令:&lt;br /&gt;Server characterset:&amp;nbsp;&amp;nbsp;&amp;nbsp; latin1&lt;br /&gt;Db&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; characterset:&amp;nbsp;&amp;nbsp;&amp;nbsp; latin1&lt;br /&gt;Client characterset:&amp;nbsp;&amp;nbsp;&amp;nbsp; latin1&lt;br /&gt;Conn.&amp;nbsp; characterset:&amp;nbsp;&amp;nbsp;&amp;nbsp; latin1&lt;br /&gt;&lt;br /&gt;我
们看到MySQL当前的四大字符集默认都是latin1，而创建reviewboard数据库时使用的语句又没有指定编码，这样一来
reviewboard数据库和其中表的编码应该都是按照MySQL默认字符集编码(即latin1)创建的，这应该就是中文乱码的根源吧。&lt;br /&gt;&lt;br /&gt;修改MySQL默认字符集的方法很简单，先停止MySQL Server(sudo /etc/init.d/mysql
stop)，之后打开/etc/mysql/my.cnf，分别在[client]和[mysqld]两个section下，增加一个key-value
pair: default-character-set = utf8，保存后退出。启动MySQL(sudo /etc/init.d/mysql
start)，用status命令查看，你会看到所有characterset都已经变成了utf-8:&lt;br /&gt;Server characterset:&amp;nbsp;&amp;nbsp; &amp;nbsp;utf8&lt;br /&gt;Db&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; characterset:&amp;nbsp;&amp;nbsp; &amp;nbsp;utf8&lt;br /&gt;Client characterset:&amp;nbsp;&amp;nbsp; &amp;nbsp;utf8&lt;br /&gt;Conn.&amp;nbsp; characterset:&amp;nbsp;&amp;nbsp; &amp;nbsp;utf8&lt;br /&gt;&lt;br /&gt;但是这个设置对已经创建完的reviewboard数据库和相关表不会起作用。由于对MySQL不甚熟悉，所以没有尝试去转数据库和表的编码，而是尝试重新创建一套库。这次在创建库的时候为了以防万一，我加上了显式的字符集编码要求。&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;mysql&amp;gt; create database reviewboard_utf8 default charset utf8 collate utf8_general_ci&lt;/span&gt;;&lt;br /&gt;mysql&amp;gt;
grant all on reviewboard_utf8.* to 'reviewboard'@'localhost';&amp;nbsp; /*
前一个reviewboard_utf8是新建的数据库的名字，后一个reviewboard则是之前创建的访问数据库的用户名 */&lt;br /&gt;Query OK, 0 rows affected (0.00 sec)&lt;br /&gt;mysql&amp;gt; exit&lt;br /&gt;&lt;br /&gt;数据库reviewboard_utf8默认是utf8编码，则系统默认其中创建的表也都是utf8编码。下面的问题就是如何将ReviewBoard与新库reviewboard_utf8连接起来的问题了。以下步骤供参考:&lt;br /&gt;1、sudo vi /var/www/reviewboard/conf/settings_local.py，修改其中的DATABASE_NAME为reviewboard_utf8;&lt;br /&gt;2、sudo rb-site upgrade /var/www/reviewboard，这个步骤中rb-site会在新库reviewboard_utf8中重新创建ReviewBoard需要的各个表&lt;br /&gt;3、重启apache2 server，sudo /etc/init.d/apache2 restart&lt;br /&gt;&lt;br /&gt;当
你再次打开ReviewBoard的首页面时，你会发现一切从头开始了。上面的&quot;换库&quot;操作中，rb-site只是创建了新表，表里并未有任何数据，这与
首次安装ReviewBoard时rb-site帮你创建了一个超级用户是不同的。所以我们这里需要手动做这件事。首先通过页面Register一个帐
户，比如就叫做admin吧。创建后用admin帐户登入，你会发现页面右上方的缺少了'Admin'这个链接选项，你无法通过'admin'用户对
ReviewBoard进行设置，也无法设置用户的权限。这里就需要在数据库中作些手脚了:&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; use reviewboard_utf8;&lt;br /&gt;
mysql&amp;gt; update auth_user set is_staff = 1 where username = 'admin';&lt;br /&gt;
&lt;br /&gt;
这里is_staff的值决定该用户是否有权限对ReviewBoard站点进行设置。你再刷新一下页面，就会发现右上方出现了一个&amp;lsquo;Admin'的链接了。做了上面的工作后，我们尝试在各个页面输入中文并保存，这次中文保存和显示都变得正常了。&lt;br /&gt;
&lt;br /&gt;
在使用ReviewBoard过程中的第二个&quot;问题&quot;其实严格来说是我们自己的问题。我们已有的代码都是在Unix
GBK环境下开发的，所有源代码文件都是以GBK编码格式存储的。这样一来一旦你提交了这些源文件的diff，在ReviewBoard中'View
Diff'时看到的中文全是乱码，更严重的是某些时候ReviewBoard显示的代码差异的位置与真实代码修改的位置不符。比如我在第1000行
增加了一行: i += 1; 提交diff后，ReviewBoard显示的第1000行根本不是i +=
1这行代码，而是之前的若干行甚至是十几行、几十行。我怀疑是我们源代码文件的GBK编码导致ReviewBoard判断出现了错误。我尝试将源码重新以
UTF-8格式保存了一下，并重复上面的修改，提交diff，这回ReviewBoard的View
Diff则完全正确，源码文件中的中文注释显示的也很正常。&lt;br /&gt;&lt;br /&gt;再有一点就是ReviewBoard的Mail通知设置问题，公司采用SSL
加密mail，ReviewBoard仅支持TSL，在网上查了一下这两个协议应该是可以兼容的，但是设置后就是无法将mail发送出去。突然想起来公司
似乎还发布了一个数字证书 for mail
client端使用，也许可能是这个原因导致ReviewBoard无法发送Mail，还待继续研究^_^。&lt;/p&gt;&lt;!--sp--&gt;&lt;div class=&quot;relpost&quot;&gt;&lt;br/&gt;&lt;h3&gt;随机文章：&lt;/h3&gt;&lt;div&gt;&lt;a href=&quot;http://bigwhite.blogbus.com/logs/46796076.html&quot;&gt;Firefox变身Vim&lt;/a&gt; 2009-09-20&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;http://bigwhite.blogbus.com/logs/46764596.html&quot;&gt;ReviewBoard安装和配置札记&lt;/a&gt; 2009-09-19&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;http://bigwhite.blogbus.com/logs/36729683.html&quot;&gt;发掘Trac&lt;/a&gt; 2009-03-18&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;http://bigwhite.blogbus.com/logs/35797428.html&quot;&gt;“扶正”Bash Shell&lt;/a&gt; 2009-02-27&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;http://bigwhite.blogbus.com/logs/35619026.html&quot;&gt;CSCOPE使用中问题小解&lt;/a&gt; 2009-02-23&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;sysmsg&quot;&gt;&lt;b&gt;&lt;a href=&quot;http://www.blogbus.com&quot; target=&quot;_blank&quot;&gt;博客大巴，你的个人传媒早班车&lt;/a&gt;&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;addfav&quot;&gt;收藏到：&lt;span class= &quot;delicious&quot;&gt;&lt;a href=&quot;http://delicious.com/save?url=http%3A%2F%2Fbigwhite.blogbus.com%2Flogs%2F47654353.html&amp;title=ReviewBoard%E4%B8%AD%E6%96%87%E6%94%AF%E6%8C%81&quot;&gt;Del.icio.us&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/292272800/bigwhite_blogbus_com/blogbus.com/s.gif?r=http://bigwhite.blogbus.com/logs/47654353.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/blogbus.com/bigwhite_blogbus_com/292272800/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/blogbus.com/bigwhite_blogbus_com/292272800/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><category domain="http://bigwhite.blogbus.com/c/">未分类</category><pubDate>Mon, 05 Oct 2009 10:04:17 +0800</pubDate><guid isPermaLink="false">http://bigwhite.blogbus.com/logs/47654353.html</guid><fs:srclink>http://bigwhite.blogbus.com/logs/47654353.html</fs:srclink><fs:srcfeed>http://bigwhite.blogbus.com/atom.xml</fs:srcfeed><fs:itemid>blogbus.com/bigwhite_blogbus_com/~6905475/292272800/5013394</fs:itemid></item><item><title>这个十一没回家</title><link atom:type="text/html">http://bigwhite.blogbus.com/logs/47498013.html</link><author xmlns="http://www.w3.org/2005/Atom"></author><id xmlns="http://www.w3.org/2005/Atom">http://bigwhite.blogbus.com/logs/47498013.html</id><description>&lt;p&gt;以往每逢重要节假日，我一般都会回到老家看望父母和亲戚朋友。不过这个十一因工作和其他一些原因，我决定不回家了。八天长假确也不短，事先也做了一些计划和准备。&lt;br /&gt;&lt;br /&gt;这个十一是祖国六十周年的生日，国家将举行盛大的庆典，所以十月一日这天我和LP选择在家里守在电视旁，看庆典、看阅兵、看游行。自从1999年第一次看国庆庆典以来，一晃已是十年，不禁感叹一下时光荏苒、岁月如梭啊。中国已经有了多次组织大型庆典活动的经验了，本次六十周年庆典组织的也很井井有条。细数一下庆典中让我格外激动和感动的场景：当五星红旗冉冉升起、全体高唱国歌的时候；当国旗护卫队第一个通过天安门前的时候；当阅兵空中梯队飞临广场上空的时候；当毛主席和邓小平的声音再次响彻天安门广场的时候；当5000名少年儿童放飞手中气球、呼喊跳跃地奔向天安门城楼的时候。当然庆典也不是没有瑕疵的，如果非要鸡蛋里挑骨头的话，那我觉得CCTV导播的镜头切换技术显然还不够成熟，还有待提高啊。&lt;br /&gt;&lt;br /&gt;十月二日也就是今天是个好天气，沈城秋高气爽，温度适中。我和LP本来的计划是这样的：先到辽宁省博物馆看展览，再到市府广场休闲，下午陪LP到长安寺，最后进电影院看&quot;&lt;a href=&quot;http://www.douban.com/subject/3543690/&quot; target=&quot;_blank&quot;&gt;建国大业&lt;/a&gt;&quot;。&lt;br /&gt;&lt;br /&gt;大约10点钟到了辽博正门，发现这里排了近50米的长队，节日里市民到博物馆游览的热情如此之高是我们始料不及的，无奈我们也只能放弃今天游省博的计划了。旁边的市府广场倒是一派热闹的景象。放眼望去，家长带孩子来这里休闲的居多，广场上熙熙攘攘、欢笑声此起彼伏。我也拿起相机将这里和谐的景象收录了下来，这里展示一部分出来：&lt;br /&gt;&lt;br /&gt;&lt;img src=&quot;http://filer.blogbus.com/40445/4044512544926254.jpg&quot; alt=&quot;&quot; /&gt;&lt;br /&gt;广场五星红旗主题景观&lt;br /&gt;&lt;br /&gt;&lt;img src=&quot;http://filer.blogbus.com/40445/404451254492635m.jpg&quot; alt=&quot;&quot; /&gt;&lt;br /&gt;&quot;我也要放风筝&quot;&lt;br /&gt;&lt;br /&gt;&lt;img src=&quot;http://filer.blogbus.com/40445/404451254492763n.jpg&quot; alt=&quot;&quot; /&gt;&lt;br /&gt;&quot;宝贝，抬头看镜头&quot;&lt;br /&gt;&lt;br /&gt;到长安寺纯属LP意愿，这里就不细说了。出寺后，我们直奔电影院。以前我是很少去电影院看国产影片的，近一两年来有所改观，但与国外影片相比，国产影片始终无法激起我到电影院观影的热情。这次是LP非要看&quot;建国大业&quot;。这部国庆六十周年献礼影片在公映前是做足了宣传，其实这部影片的献礼性质+百位三地明星的出镜就足以吸引广大老百姓的眼球了。两个多小时下来，有两点主要感受：一是影片中将领袖演绎的更接近普通人；二是影片的确尊重历史的真实展现和还原，这点从政治协商会议上毛主席讲话那段就可以看出来，那组镜头中唐国强的表演就是在真实还原当年毛主席的讲话神态和肢体语言。总体来说，如果有条件的话，还是推荐在十一期间到影院去看看这部片子的，就算是对那段历史的重温了，也缅怀一下那些为新中国建立做出巨大贡献的革命志士们。&lt;/p&gt;&lt;!--sp--&gt;&lt;div class=&quot;relpost&quot;&gt;&lt;br/&gt;&lt;h3&gt;随机文章：&lt;/h3&gt;&lt;div&gt;&lt;a href=&quot;http://bigwhite.blogbus.com/logs/47025467.html&quot;&gt;“找回”自己的密码&lt;/a&gt; 2009-09-23&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;http://bigwhite.blogbus.com/logs/46958165.html&quot;&gt;瞬时“失忆”，密码忘记&lt;/a&gt; 2009-09-22&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;http://bigwhite.blogbus.com/logs/45460527.html&quot;&gt;手机做MODEM实现无线上网&lt;/a&gt; 2009-08-30&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;http://bigwhite.blogbus.com/logs/43966295.html&quot;&gt;天儿太热了！&lt;/a&gt; 2009-08-12&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;http://bigwhite.blogbus.com/logs/42515951.html&quot;&gt;体检·SSH·Safari4&lt;/a&gt; 2009-07-17&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;sysmsg&quot;&gt;&lt;b&gt;&lt;a href=&quot;http://www.blogbus.com&quot; target=&quot;_blank&quot;&gt;博客大巴，你的个人传媒早班车&lt;/a&gt;&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;addfav&quot;&gt;收藏到：&lt;span class= &quot;delicious&quot;&gt;&lt;a href=&quot;http://delicious.com/save?url=http%3A%2F%2Fbigwhite.blogbus.com%2Flogs%2F47498013.html&amp;title=%E8%BF%99%E4%B8%AA%E5%8D%81%E4%B8%80%E6%B2%A1%E5%9B%9E%E5%AE%B6&quot;&gt;Del.icio.us&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/292272801/bigwhite_blogbus_com/blogbus.com/s.gif?r=http://bigwhite.blogbus.com/logs/47498013.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/blogbus.com/bigwhite_blogbus_com/292272801/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/blogbus.com/bigwhite_blogbus_com/292272801/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><category domain="http://bigwhite.blogbus.com/c/">未分类</category><pubDate>Fri, 02 Oct 2009 23:21:30 +0800</pubDate><guid isPermaLink="false">http://bigwhite.blogbus.com/logs/47498013.html</guid><fs:srclink>http://bigwhite.blogbus.com/logs/47498013.html</fs:srclink><fs:srcfeed>http://bigwhite.blogbus.com/atom.xml</fs:srcfeed><fs:itemid>blogbus.com/bigwhite_blogbus_com/~6905475/292272801/5013394</fs:itemid></item><item><title>也谈VIM字符集编码设置</title><link atom:type="text/html">http://bigwhite.blogbus.com/logs/47259473.html</link><author xmlns="http://www.w3.org/2005/Atom"></author><id xmlns="http://www.w3.org/2005/Atom">http://bigwhite.blogbus.com/logs/47259473.html</id><description>&lt;p&gt;安装完中文语言包支持后，&lt;a href=&quot; http://bigwhite.blogbus.com/logs/15847566.html&quot; target=&quot;_blank&quot;&gt;Ubuntu&lt;/a&gt;的默认locale是zh_CN.UTF-8(即简体中文语言环境，字符集内码UTF-8)。这与我们日常开发环境中Unix设定的环境有所区别，我们日常使用的环境一般为zh_CN.GBK或zh。我们的源代码文件的&lt;a href=&quot; http://bigwhite.blogbus.com/logs/10617585.html&quot; target=&quot;_blank&quot;&gt;字符编码&lt;/a&gt;也都是GBK的编码，直接在Ubuntu下用默认设置的VIM打开后，中文的注释会显示乱码。如果你直接编辑这个文件并提交，那么其他在Unix下开发的同事Checkout这份源码后打开也将显示乱码（你新增的中文内容会是乱码）。&lt;/p&gt;
&lt;p&gt;解决这个问题至少有两种方法：一种是为Ubuntu新增加一个zh_CN.GBK的locale的支持；另外一种就是通过设置&lt;a href=&quot;http://bigwhite.blogbus.com/logs/33121799.html&quot; target=&quot;_blank&quot;&gt;VIM&lt;/a&gt;，在不变换Ubuntu所支持的locale的情况下支持对GBK内码文件的读写。&lt;/p&gt;
&lt;p&gt;第一种方法简单说一下，总共分四步走：&lt;br /&gt;第一步：sudo vi /var/lib/locales/supported.d/local，该文件原始状态只有一行记录：zh_CN.UTF-8 UTF-8；为了增加zh_CN.GBK的locale，我们在这个文件尾添加一行：zh_CN.GBK GBK，保存退出。&lt;/p&gt;
&lt;p&gt;第二步：执行：sudo locale-gen，生成zh_CN.GBK对应的locale&lt;br /&gt;第三步：编辑：/etc/environment，在文件尾添加如下内容：&lt;br /&gt;LANGUAGE=&quot;zh_CN:zh:en_US:en&quot;&lt;br /&gt;LANG=zh_CN.GBK&lt;br /&gt;LC_CTYLE=zh_CN.GBK&lt;br /&gt;LC_ALL=&quot;zh_CN.GBK&quot;&lt;/p&gt;
&lt;p&gt;第四步：重启Ubuntu系统。重启后用&lt;a href=&quot;http://bigwhite.blogbus.com/logs/46796076.html&quot; target=&quot;_blank&quot;&gt;VIM&lt;/a&gt;再打开以前GBK编码的源代码文件，就不再会有乱码了，而且默认情况下编辑文件采用的依然是GBK编码。不会影响他人在其他平台上读写文件。&lt;/p&gt;
&lt;p&gt;第二种方法是本文重点要谈的内容。即在zh_CN.UTF-8的环境下保证正确读写GBK编码的文件。问题主要集中在：如何读出并正确显示已有的特定&lt;a href=&quot; http://bigwhite.blogbus.com/logs/10617585.html&quot; target=&quot;_blank&quot;&gt;字符编码&lt;/a&gt;的文件和如何按照特定字符编码写新文件。&lt;/p&gt;
&lt;p&gt;这里有两个数据文件：data1和data2，内容都是&amp;ldquo;祝祖国六十年生日快乐&amp;rdquo;，但是data1采用UTF-8编码，而data2采用GBK编码，可以用od -x查看文件实际存储数据是不同的。&lt;br /&gt;od -x data1&lt;br /&gt;0000000 a5e7 e79d 96a5 9be5 e5bd ad85 8de5 e581&lt;br /&gt;0000020 b4b9 94e7 e69f a597 bfe5 e4ab 90b9 000a&lt;br /&gt;0000037&lt;/p&gt;
&lt;p&gt;od -x data2&lt;br /&gt;0000000 a3d7 e6d7 fab9 f9c1 aeca eac4 fac9 d5c8&lt;br /&gt;0000020 ecbf d6c0 000a&lt;br /&gt;0000025&lt;/p&gt;
&lt;p&gt;在终端UTF-8编码，LC_ALL=zh_CN.UTF-8，VIM默认配置的前提下，尝试用VIM分别打开data1和data2，发现data1正常显示，data2显示乱码；为什么呢？这里VIM当打开一个已存在的文件时会有一系列的处理过程：&lt;/p&gt;
&lt;p&gt;用VIM打开一个已存在的文件时，VIM首先要查看fileencodings（或fencs）这个option。fileencodings是一系列字符编码格式的列表，例如：set fileencodings = GBK,UTF-8,gb18030,ucs-bom,cp936。这个option仅在打开一个已存在的文件时起作用。如果你没有在.vimrc中显式set这个option，那fileencodings的默认值是'ucs-bom,UTF-8,default,latin1'，其中default的值是用户环境的默认编码格式。&lt;/p&gt;
&lt;p&gt;当你打开一个已存在的文件时，VIM会用fileencodings值列表中的编码格式逐一去探测该文件的编码方式，直到两者匹配一致。探测成功后，VIM会用匹配到的编码格式去设置此文件session的fileencoding选项值。fileencoding选项指示该session的VIM BUFFER里的数据写入文件或从文件读出时文件中的数据的编码格式。同样该session中VIM BUFFER中数据的编码格式则由另外一个选项指示，那就是encoding option。这里有多个&quot;encoding-like&quot;字样的options，极易混淆。但实际上真正对VIM文件操作时数据显示和保存起作用的只有两个选项：fileencoding和encoding。而fileencodings只是在打开已有文件时用来探测并设置fileencoding字段的一个外围option。VIM的编码转换也是围绕fileencoding和encoding这两个options展开的。无论读写文件，当某个VIM session中fileencoding和encoding的值不一致时，VIM就会自动做编码转换。例如：当读取一个文件时，session的fileencoding为UTF-8，而encoding为GBK时，VIM将文件中的数据读出来后会自动做一个UTF-8到GBK的转换，并将转换后的数据存储在VIM针对该session的BUFFER里；同样当创建一个新文件时，如果该session的vim BUFFER中数据的编码格式(encoding指示)和fileencoding指示的文件编码格式不一致时，save file时，VIM会自动将BUFFER中的数据按照fileencoding指示的编码格式进行一次转换后再存入新文件中。&lt;/p&gt;
&lt;p&gt;每个option都有三种状态：显式设置、空(encoding除外)和默认值。其中显式设置是指在.vimrc或在session中利用set指令对选项进行赋值设置；空：比较特殊，表示该选项的值为empty；默认值则是未通过set在.vimrc或在session对选项进行赋值的状态。&lt;/p&gt;
&lt;p&gt;fileencodings为空时，即在.vimrc中set fileencodings=&quot;&quot;；VIM将无法进行文件编码探测，将直接根据fileenoding和encoding的值来确定文件编码和BUFFER编码以及是否需要自动做编码转换；当fileencodings不为空，但探测文件编码均告失败时，VIM会将该session的fileencoding置为空，之后将根据encoding的值来设置文件编码和VIM BUFFER编码。&lt;/p&gt;
&lt;p&gt;fileencoding的默认值就是空(&quot;&quot;)，打开已有文件时通过fileencodings来设置其值，新建文件时如果fileencoding为默认值或空，那么encoding将决定一切。其显式设置的值只有在新建文件的session中才会其作用。&lt;/p&gt;
&lt;p&gt;encoding是核心，是VIM session中BUFFER数据的编码，也可以理解为VIM核心的内码；VIM会根据它与fileencoding、termencoding(term的编码格式)的不同由VIM做自动转码。encoding默认值为$LANG。&lt;/p&gt;
&lt;p&gt;下面用一些例子来说明一下VIM的行为模式，测试环境&lt;a href=&quot;http://bigwhite.blogbus.com/logs/46697386.html&quot; target=&quot;_blank&quot;&gt;Ubuntu 9.04&lt;/a&gt;, LANG=zh_CN.UTF-8, data1和data2如上所述。&lt;br /&gt;(1) 三个Option均采用默认值，没有在.vimrc下显式设置&lt;br /&gt;此时在vim session未建立之前，fileencodings的默认值为&amp;ldquo;ucs-bom,UTF-8,default,latin1&amp;rdquo;，fileencoding为空，encoding=UTF-8($LANG).打开data1，VIM通过fileencodings做探测，顺利匹配到UTF-8的编码格式，将fileencoding设置为UTF-8，此时encoding也为UTF-8，两者一致，VIM不做编码转换，屏幕正确显示&amp;ldquo;祝祖国六十年生日快乐&amp;rdquo;。打开data2，VIM通过fileencodings做探测，未能匹配到GBK的编码，将fileencoding置为空，encoding发挥作用，VIM不做任何编码转换，将GBK编码的数据以UTF-8格式显示，屏幕显示乱码。&lt;/p&gt;
&lt;p&gt;(2) fileencodings显式被设置为&quot;UTF-8,GBK&quot;，其他option采用默认值&lt;br /&gt;此时在vim session未建立之前，fileencodings的值为&amp;ldquo;UTF-8,GBK&amp;rdquo;，fileencoding为空，encoding=UTF-8($LANG).打开data1，VIM通过fileencodings做探测，顺利匹配到UTF-8的编码格式，将fileencoding设置为UTF-8，此时encoding也为UTF-8，两者一致，VIM不做编码转换，屏幕正确显示&amp;ldquo;祝祖国六十年生日快乐&amp;rdquo;。打开data2，VIM通过fileencodings做探测，顺利匹配到GBK的编码，将fileencoding置为GBK，此时encoding为UTF-8，两者不一致，VIM做自动编码转换，将GBK编码的数据转换为UTF-8格式后放入BUFFER并显示，屏幕正确显示&amp;ldquo;祝祖国六十年生日快乐&amp;rdquo;，VIM在状态条提示&amp;ldquo;已转换&amp;rdquo;。&lt;/p&gt;
&lt;p&gt;(3) fileencoding显式设置为&quot;GBK&quot;，encoding显式设置为&amp;ldquo;UTF-8&amp;rdquo;或采用默认值&lt;br /&gt;新建一个文件data3，输入：&amp;ldquo;祝祖国六十年生日快乐&amp;rdquo;，保存，此时fileencoding和encoding值不一致，VIM做自动编码转换，将BUFFER中的UTF-8编码的数据转换为GBK编码后存储到文件中，VIM状态栏提示&amp;ldquo;已转换&amp;rdquo;。退出VIM。od -x data3，输出的是GBK编码。&lt;/p&gt;&lt;!--sp--&gt;&lt;div class=&quot;relpost&quot;&gt;&lt;br/&gt;&lt;h3&gt;随机文章：&lt;/h3&gt;&lt;div&gt;&lt;a href=&quot;http://bigwhite.blogbus.com/logs/50267208.html&quot;&gt;一个Solaris x86平台64位编译的问题&lt;/a&gt; 2009-11-05&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;http://bigwhite.blogbus.com/logs/49659694.html&quot;&gt;使用iconv做内码转换&lt;/a&gt; 2009-10-31&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;http://bigwhite.blogbus.com/logs/46150698.html&quot;&gt;Solaris 10安装二三事&lt;/a&gt; 2009-09-10&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;http://bigwhite.blogbus.com/logs/45987721.html&quot;&gt;Bash文件描述符重定向符号的另类理解&lt;/a&gt; 2009-09-08&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;http://bigwhite.blogbus.com/logs/45153784.html&quot;&gt;Cmockery支持mock输出参数&lt;/a&gt; 2009-08-26&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;sysmsg&quot;&gt;&lt;b&gt;&lt;a href=&quot;http://www.blogbus.com&quot; target=&quot;_blank&quot;&gt;博客大巴，你的个人传媒早班车&lt;/a&gt;&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;addfav&quot;&gt;收藏到：&lt;span class= &quot;delicious&quot;&gt;&lt;a href=&quot;http://delicious.com/save?url=http%3A%2F%2Fbigwhite.blogbus.com%2Flogs%2F47259473.html&amp;title=%E4%B9%9F%E8%B0%88VIM%E5%AD%97%E7%AC%A6%E9%9B%86%E7%BC%96%E7%A0%81%E8%AE%BE%E7%BD%AE&quot;&gt;Del.icio.us&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/292272802/bigwhite_blogbus_com/blogbus.com/s.gif?r=http://bigwhite.blogbus.com/logs/47259473.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/blogbus.com/bigwhite_blogbus_com/292272802/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/blogbus.com/bigwhite_blogbus_com/292272802/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><category domain="http://bigwhite.blogbus.com/c/">未分类</category><pubDate>Mon, 28 Sep 2009 10:24:14 +0800</pubDate><guid isPermaLink="false">http://bigwhite.blogbus.com/logs/47259473.html</guid><fs:srclink>http://bigwhite.blogbus.com/logs/47259473.html</fs:srclink><fs:srcfeed>http://bigwhite.blogbus.com/atom.xml</fs:srcfeed><fs:itemid>blogbus.com/bigwhite_blogbus_com/~6905475/292272802/5013394</fs:itemid></item><item><title>“找回”自己的密码</title><link atom:type="text/html">http://bigwhite.blogbus.com/logs/47025467.html</link><author xmlns="http://www.w3.org/2005/Atom"></author><id xmlns="http://www.w3.org/2005/Atom">http://bigwhite.blogbus.com/logs/47025467.html</id><description>&lt;p&gt;继续昨天的情况道来。话说昨天因&lt;a href=&quot;http://bigwhite.blogbus.com/logs/46958165.html&quot; target=&quot;_blank&quot;&gt;瞬时&amp;ldquo;失忆&amp;rdquo;&lt;/a&gt;，导致将公司办公账户的密码忘记了。这给工作带来的不便是我没有想到的。今天一上班就询问秘书密码重置的进度，得到的回复是已经发给公司HR并催促多次了。但是直到近中午也未曾收到密码重置的通知，耐不住性子的我终于决定亲自跟踪这件事，电话直接打到HR部门负责此事的专员那，结果无人接听，一连多次，估计是那个同事不在Office。遂直接拨打公司IT服务部门的电话，说明了情况，这个部门的态度倒是很好，帮我查了一下，并告知我昨天没有收到HR那边的邮件，并答应我，一旦收到邮件就会马上处理的。&lt;br /&gt;&lt;br /&gt;放下电话又想了想，觉得我不能就这么等下去，应该尝试一下找回自己的密码。虽然昨天瞬时&amp;ldquo;失忆&amp;rdquo;，但是自己的密码组成规则还是记得的。公司的密码起码的要求包括长度、大小写字母和特殊符号。记得当时我只是想换一下大写字母的位置，只是事后忘记了调整了哪两个字母。午饭过后，决定花一定时间尝试去&amp;ldquo;找回&amp;rdquo;自己的密码，工具吗，用&lt;a href=&quot;http://bigwhite.blogbus.com/logs/2716344.html&quot; target=&quot;_blank&quot;&gt;Ruby&lt;/a&gt;+Watir。用&lt;a href=&quot;http://bigwhite.blogbus.com/logs/30127753.html&quot; target=&quot;_blank&quot;&gt;Watir&lt;/a&gt;来操作&lt;a href=&quot;http://bigwhite.blogbus.com/logs/36921503.html&quot; target=&quot;_blank&quot;&gt;IE&lt;/a&gt;，用穷举的方法来尝试各种密码组合，直到能正确登录的密码就是我想要的。Watir好久没有用了，而且也没有现成的包，还得重新安装，Ubuntu上安装Watir总是提示已存在的文件的gem格式不符，无奈回到Windows上安装。先用C代码生成了所有可能的密码组合，写到一个文件中，每行一个密码。然后在网上找到了Watir使用的例子，参考之完成了自己的脚本：打开公司内外首页，用文件中的密码逐一尝试，如果登录成功，则脚本执行结束。&lt;br /&gt;&lt;br /&gt;一杯咖啡功夫，脚本执行完了，不过出乎意料的是没有一个密码是正确的，这让我大为疑惑。30分钟后，&lt;a href=&quot;http://bigwhite.blogbus.com/logs/15847566.html&quot; target=&quot;_blank&quot;&gt;Ubuntu&lt;/a&gt;上的&lt;a href=&quot;http://code.google.com/p/iptux/&quot; target=&quot;_blank&quot;&gt;iptux&lt;/a&gt;闪动，秘书将重置后的密码发了过来，我再一想估计是在我尝试&amp;ldquo;破解&amp;rdquo;之前IT服务部门的同事就已经将密码重置了，所以我穷举的那些密码也就都不正确了。&lt;br /&gt;&lt;br /&gt;现在我最想知道的就是到底我昨天更改后的密码是什么^_^。&lt;/p&gt;&lt;!--sp--&gt;&lt;div class=&quot;relpost&quot;&gt;&lt;br/&gt;&lt;h3&gt;随机文章：&lt;/h3&gt;&lt;div&gt;&lt;a href=&quot;http://bigwhite.blogbus.com/logs/47498013.html&quot;&gt;这个十一没回家&lt;/a&gt; 2009-10-02&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;http://bigwhite.blogbus.com/logs/46958165.html&quot;&gt;瞬时“失忆”，密码忘记&lt;/a&gt; 2009-09-22&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;http://bigwhite.blogbus.com/logs/45460527.html&quot;&gt;手机做MODEM实现无线上网&lt;/a&gt; 2009-08-30&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;http://bigwhite.blogbus.com/logs/43966295.html&quot;&gt;天儿太热了！&lt;/a&gt; 2009-08-12&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;http://bigwhite.blogbus.com/logs/42515951.html&quot;&gt;体检·SSH·Safari4&lt;/a&gt; 2009-07-17&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;sysmsg&quot;&gt;&lt;b&gt;&lt;a href=&quot;http://www.blogbus.com&quot; target=&quot;_blank&quot;&gt;博客大巴，你的个人传媒早班车&lt;/a&gt;&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;addfav&quot;&gt;收藏到：&lt;span class= &quot;delicious&quot;&gt;&lt;a href=&quot;http://delicious.com/save?url=http%3A%2F%2Fbigwhite.blogbus.com%2Flogs%2F47025467.html&amp;title=%E2%80%9C%E6%89%BE%E5%9B%9E%E2%80%9D%E8%87%AA%E5%B7%B1%E7%9A%84%E5%AF%86%E7%A0%81&quot;&gt;Del.icio.us&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/292272803/bigwhite_blogbus_com/blogbus.com/s.gif?r=http://bigwhite.blogbus.com/logs/47025467.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/blogbus.com/bigwhite_blogbus_com/292272803/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/blogbus.com/bigwhite_blogbus_com/292272803/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><category domain="http://bigwhite.blogbus.com/c/">未分类</category><pubDate>Wed, 23 Sep 2009 22:15:04 +0800</pubDate><guid isPermaLink="false">http://bigwhite.blogbus.com/logs/47025467.html</guid><fs:srclink>http://bigwhite.blogbus.com/logs/47025467.html</fs:srclink><fs:srcfeed>http://bigwhite.blogbus.com/atom.xml</fs:srcfeed><fs:itemid>blogbus.com/bigwhite_blogbus_com/~6905475/292272803/5013394</fs:itemid></item><item><title>瞬时“失忆”，密码忘记</title><link atom:type="text/html">http://bigwhite.blogbus.com/logs/46958165.html</link><author xmlns="http://www.w3.org/2005/Atom"></author><id xmlns="http://www.w3.org/2005/Atom">http://bigwhite.blogbus.com/logs/46958165.html</id><description>&lt;p&gt;密码这东西在信息化的今天真是很重要，估计大家一张口就能说出5个以上使用密码的地方：登录网银、上淘宝、上亚马逊购书、写博客、登录Gmail等等。平时在公司，我的mail就是我的ID，公司所有内部网络服务都需要使用这个ID登录，甚至包括内部无线网络也是如此，所以在公司办公，内部mail账户和密码很重要。&lt;br /&gt;&lt;br /&gt;公司为了加强信息安全管理，要求每位员工的密码都要符合SOX规范，而且要每隔若干个月就要对密码做一次修改，更有甚者公司内网首页居然做了强制密码修改的校验，如果你超出规定时间没有修改密码，那么当你登录公司内网时就必须修改密码，否则就无法登入。&lt;br /&gt;&lt;br /&gt;今天就因为这个让我&amp;ldquo;损失&amp;rdquo;大了。符合SOX规范的密码较长也比较难记，所以大家也都总偷懒，很少去改密码。今天为了到内网去下载一个文档，不得不被强制修改密码。修改密码时有些三心二意了，改完后，突然感觉&amp;ldquo;瞬时&amp;rdquo;失忆了似的，刚才的新密码就是想不起来了，试了十几次，仍然无法想起正确的密码。这下可惨了，一分钟后，无线网络断了、outlook和thunderbird相继弹出输入密码对话框、Firefox也弹出了输入代理密码的对话框。无奈只能向秘书&amp;ldquo;求救&amp;rdquo;，后被告知重置密码还真不那么简单，先要秘书发mail给人力，人力再发mail给公司网络管理部门，之后如何处理还不得而知了。不过公司的办事效率也真不怎么高，到现在为止我仍然没能恢复我的密码，真是耽误事啊。一天了都没能收到mail，中间有几封重要的客户mail也没能及时回复。&lt;br /&gt;&lt;br /&gt;悔啊！&lt;/p&gt;&lt;!--sp--&gt;&lt;div class=&quot;relpost&quot;&gt;&lt;br/&gt;&lt;h3&gt;随机文章：&lt;/h3&gt;&lt;div&gt;&lt;a href=&quot;http://bigwhite.blogbus.com/logs/47498013.html&quot;&gt;这个十一没回家&lt;/a&gt; 2009-10-02&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;http://bigwhite.blogbus.com/logs/47025467.html&quot;&gt;“找回”自己的密码&lt;/a&gt; 2009-09-23&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;http://bigwhite.blogbus.com/logs/45460527.html&quot;&gt;手机做MODEM实现无线上网&lt;/a&gt; 2009-08-30&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;http://bigwhite.blogbus.com/logs/43966295.html&quot;&gt;天儿太热了！&lt;/a&gt; 2009-08-12&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;http://bigwhite.blogbus.com/logs/42515951.html&quot;&gt;体检·SSH·Safari4&lt;/a&gt; 2009-07-17&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;sysmsg&quot;&gt;&lt;b&gt;&lt;a href=&quot;http://www.blogbus.com&quot; target=&quot;_blank&quot;&gt;博客大巴，你的个人传媒早班车&lt;/a&gt;&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;addfav&quot;&gt;收藏到：&lt;span class= &quot;delicious&quot;&gt;&lt;a href=&quot;http://delicious.com/save?url=http%3A%2F%2Fbigwhite.blogbus.com%2Flogs%2F46958165.html&amp;title=%E7%9E%AC%E6%97%B6%E2%80%9C%E5%A4%B1%E5%BF%86%E2%80%9D%EF%BC%8C%E5%AF%86%E7%A0%81%E5%BF%98%E8%AE%B0&quot;&gt;Del.icio.us&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/292272804/bigwhite_blogbus_com/blogbus.com/s.gif?r=http://bigwhite.blogbus.com/logs/46958165.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/blogbus.com/bigwhite_blogbus_com/292272804/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/blogbus.com/bigwhite_blogbus_com/292272804/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><category domain="http://bigwhite.blogbus.com/c/">未分类</category><pubDate>Tue, 22 Sep 2009 21:45:27 +0800</pubDate><guid isPermaLink="false">http://bigwhite.blogbus.com/logs/46958165.html</guid><fs:srclink>http://bigwhite.blogbus.com/logs/46958165.html</fs:srclink><fs:srcfeed>http://bigwhite.blogbus.com/atom.xml</fs:srcfeed><fs:itemid>blogbus.com/bigwhite_blogbus_com/~6905475/292272804/5013394</fs:itemid></item><item><title>Firefox变身Vim</title><link atom:type="text/html">http://bigwhite.blogbus.com/logs/46796076.html</link><author xmlns="http://www.w3.org/2005/Atom"></author><id xmlns="http://www.w3.org/2005/Atom">http://bigwhite.blogbus.com/logs/46796076.html</id><description>&lt;p&gt;在'&lt;a href=&quot;http://www.zhangkf.com/&quot; target=&quot;_blank&quot;&gt;IDEAL Garden&lt;/a&gt;'上看到作者在文章中提到一个名为&lt;a href=&quot;http://vimperator.org&quot; target=&quot;_blank&quot;&gt;Vimperator&lt;/a&gt;的FireFox插件，该插件功能甚是强大，可以让你以&lt;a href=&quot;http://bigwhite.blogbus.com/logs/33121799.html&quot; target=&quot;_blank&quot;&gt;Vim&lt;/a&gt;的操作方式来使用&lt;a href=&quot;http://bigwhite.blogbus.com/logs/32606027.html&quot; target=&quot;_blank&quot;&gt;Firefox&lt;/a&gt;，对于我这个天天都用Vim写代码的人来说，Vimperator可谓有非凡的吸引力，它可以让你的手指留在键盘上。&lt;br /&gt;&lt;br /&gt;安装Vimperator这个插件仅需十几秒的时间，重启Firefox后你就可以以Vim的操作方式来尽情操作Firefox了。重启Firefox后，Vimperator会自动打开其Tutorial页面(你也可以通过在命令行输入'help tutorial'打开tutorial页面)。Tutorial页面介绍了Vimperator的大多数基本命令，熟练掌握了这些命令你就可以自由操控Firefox了。&lt;br /&gt;&lt;br /&gt;Vimperator默认会隐藏Firefox的菜单栏和工具栏，你可以通过输入'set go+=mTB&amp;lt;CR&amp;gt;'恢复菜单栏和工具栏的显示。&lt;br /&gt;&lt;br /&gt;Vimperator与Vim一样，提供常用的normal模式和command-line模式，通过':'或'ESC&amp;rsquo;可以在两种模式间切换。&lt;br /&gt;&lt;br /&gt;打开一个新网页，可以在command-line模式下输入open(或o)，加上url来打开网页。同样你也可以输入o加上你要搜索的关键词，敲击回车后会自动打开默认的搜索引擎搜索该关键字，就和你用Google ToolBar是一样的。当然在command-line模式下输入open这种方式也支持自动补齐功能，输入若干个关键字后，敲击TAB键，会出现一个下拉列表，之后可继续用TAB键在列表中做选择。另外使用tabopen(或t)则是在新标签页中打开你要的网页。&lt;/p&gt;
&lt;p&gt;当你在各个Tab间切换时，命令行中显示的是该页面的url地址，如果你想复制这个地址，只需在normal mode下敲击&quot;yy&quot;，该地址就被写入剪贴板了。&lt;br /&gt;&lt;br /&gt;在Tab之间切换你大可依然使用ctrl+tab的方式，但是你同样可以在normal模式下通过gt或gT来前后切换标签页。关闭一个标签页你只需要在normal模式下敲入d即可。在当前页面中后退到历史页用ctrl+o，前进到下一页用ctrl+i。&lt;br /&gt;&lt;br /&gt;打开页面中的超链接，你大可以继续用mouse点击；但是vimperator也给你提供了一种方法。在normal模式下敲入:f或F，页面上的超链接将被编号，快速输入你要跳转的超链接的编号，即可打开那个超链接。如果超链接较多，你在输入f或F后输入的字符将被用来做匹配，Vimperator会根据匹配到的超链接文字做编号重分配，减少编号个数，便于你精确定位你想打开的链接。&lt;br /&gt;&lt;br /&gt;有了好工具，剩下的就是多多练习、熟练掌握并提升效率了。&lt;/p&gt;&lt;!--sp--&gt;&lt;div class=&quot;relpost&quot;&gt;&lt;br/&gt;&lt;h3&gt;随机文章：&lt;/h3&gt;&lt;div&gt;&lt;a href=&quot;http://bigwhite.blogbus.com/logs/47654353.html&quot;&gt;ReviewBoard中文支持&lt;/a&gt; 2009-10-05&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;http://bigwhite.blogbus.com/logs/46764596.html&quot;&gt;ReviewBoard安装和配置札记&lt;/a&gt; 2009-09-19&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;http://bigwhite.blogbus.com/logs/36729683.html&quot;&gt;发掘Trac&lt;/a&gt; 2009-03-18&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;http://bigwhite.blogbus.com/logs/35797428.html&quot;&gt;“扶正”Bash Shell&lt;/a&gt; 2009-02-27&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;http://bigwhite.blogbus.com/logs/35619026.html&quot;&gt;CSCOPE使用中问题小解&lt;/a&gt; 2009-02-23&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;sysmsg&quot;&gt;&lt;b&gt;&lt;a href=&quot;http://www.blogbus.com&quot; target=&quot;_blank&quot;&gt;博客大巴，你的个人传媒早班车&lt;/a&gt;&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;addfav&quot;&gt;收藏到：&lt;span class= &quot;delicious&quot;&gt;&lt;a href=&quot;http://delicious.com/save?url=http%3A%2F%2Fbigwhite.blogbus.com%2Flogs%2F46796076.html&amp;title=Firefox%E5%8F%98%E8%BA%ABVim&quot;&gt;Del.icio.us&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/292272805/bigwhite_blogbus_com/blogbus.com/s.gif?r=http://bigwhite.blogbus.com/logs/46796076.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/blogbus.com/bigwhite_blogbus_com/292272805/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/blogbus.com/bigwhite_blogbus_com/292272805/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><category domain="http://bigwhite.blogbus.com/c/">未分类</category><pubDate>Sun, 20 Sep 2009 00:30:32 +0800</pubDate><guid isPermaLink="false">http://bigwhite.blogbus.com/logs/46796076.html</guid><fs:srclink>http://bigwhite.blogbus.com/logs/46796076.html</fs:srclink><fs:srcfeed>http://bigwhite.blogbus.com/atom.xml</fs:srcfeed><fs:itemid>blogbus.com/bigwhite_blogbus_com/~6905475/292272805/5013394</fs:itemid></item></channel></rss>