<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">

  <title><![CDATA[Mr Sunshine]]></title>
  <link href="http://xoyo.name/atom.xml" rel="self"/>
  <link href="http://xoyo.name/"/>
  <updated>2012-04-23T23:21:42+08:00</updated>
  <id>http://xoyo.name/</id>
  <author>
    <name><![CDATA[Zhiwei Xiao]]></name>
    <email><![CDATA[zwxiao@gmail.com]]></email>
  </author>
  <generator uri="http://octopress.org/">Octopress</generator>

  
  <entry>
    <title type="html"><![CDATA[给中英文间加个空格]]></title>
    <link href="http://xoyo.name/2012/04/auto-spacing-for-octopress/"/>
    <updated>2012-04-23T21:47:00+08:00</updated>
    <id>http://xoyo.name/2012/04/auto-spacing-for-octopress</id>
    <content type="html"><![CDATA[<blockquote><p>如果你跟我一樣，每次看到網頁上的中文字和英文、數字、符號擠在一塊，就會坐立難安，忍不住想在它們之間加個空格⋯⋯</p><p>漢學家稱這個空白字元為「盤古之白」，因為它劈開了全形字和半形字之間的混沌。另有研究顯示，打字的時候不喜歡在中文和英文之間加空格的人，感情路都走得很辛苦，有七成的比例會在 34 歲的時候跟自己不愛的人結婚，而其餘三成的人最後只能把遺產留給自己的貓。畢竟愛情跟書寫都需要適時地留白。</p><footer><strong>@vinta</strong> <cite><a href='https://github.com/gibuloto/paranoid-auto-spacing'>為什麼你們就是不能加個空格呢？</a></cite></footer></blockquote>


<p>关于中英文字符之间是否应该加入空格已经有过很多讨论。在这之前我也没怎么意识到这个问题，在被指出这点之后，回头看看挤在一起的中英文字块，确实有点别扭。不过我还是不大愿意在写博客的时候人为地去加入空格，因为 1）这很麻烦，尤其是写技术类文章时要夹入不少英文；2）加入空格实际上是一个显示效果的问题，而不是原有文本的语义问题（中英文间有天然的隔阂，不需要再用多余的空格来分离），所以应该在显示层面处理，比如 Word 默认就实现这个功能。</p>

<p>所以我想在 octopress 生成 html 页面时自动插入空格。原来有想过直接修改 markdown 编译工具的，这样的好处是能分析语义，很方便地处理 markdown 的各种语法。考察了下，现在 octopress 默认用的是 rdiscount，因为是用 C 语言实现的，速度遥遥领先其他实现，所以要改也得改 rdiscount 靠谱点。扫了下 rdiscount 代码，发现它并没像我想象那样先解析出一棵 markdown 的语法树再生成 html，而是直接边解析边生成，这样改起来会比较乱。于是只能在 octopress 上打主意。</p>

<h4>Octopress 的 post_filter 机制</h4>

<p>之前 p 哥在自动连接他的断行中文时是直接<a href="http://chenyufei.info/blog/2011-12-23/fix-chinese-newline-becomes-space-in-browser-problem/">修改了 jekyll 代码</a>，这样的缺点是以后升级新的版本得重新再改一次。其实 Ruby 可以随时打开一个现有的 class 或 module 的定义并修改，而 jekyll 在执行前会先加载（require）网站<code>/plugins</code>目录下的所有文件，所以我只要把重新定义的代码放在这个目录下就可以了。</p>

<p>看了下 octopress 和 jekyll 相关代码，发现原来 octopress 已经有类似的扩展：它在<code>/plugins/post_filters.rb</code>中实现了一套在处理页面前后加入 filter/hooker 的机制，<code>/plugins/octopress_filters.rb</code>中定义的<code>ContentFilters</code>就是一个样例实现。所以我现在只要加入一个 hooker 函数，在里面实现空格插入的功能。</p>

<h4>Liquid</h4>

<p>Liquid 是 jekyll 用到的一套模板系统，我们可以自定义 filter 处理模板的内容。原来我也想过用 filter 来实现自动插入空格的功能，但实现出来才发现博客模板里待处理的文字都是转换后的 html 格式，而不是原始的 markdown 格式，处理 html 实在是太恶心了，于是就没继续做下去。不过后来发现分类 rss 模板中是直接引用 markdown 格式的文字，再调用<code>markdownify</code>这个 filter 转换成 html 格式，我也跟着把我的主体功能实现成 filter（再让 hooker 函数去引用），这样就能在<code>markdownify</code>之前调用我自己实现的<code>insert_ch_en_space</code>：</p>

<div><script src='https://gist.github.com/2471129.js?file=category_feed.xml.diff'></script>
<noscript><pre><code>--- a/source/_includes/custom/category_feed.xml
+++ b/source/_includes/custom/category_feed.xml
@@ -21,7 +21,7 @@ layout: nil
     &lt;link href=&quot;{{ site.url }}{{ post.url }}&quot;/&gt;
     &lt;updated&gt;{{ post.date | date_to_xmlschema }}&lt;/updated&gt;
     &lt;id&gt;{{ site.url }}{{ post.id }}&lt;/id&gt;
-    &lt;content type=&quot;html&quot;&gt;&lt;![CDATA[{{ post.content | expand_urls: site.url | markdownify | cdata_escape }}]]&gt;&lt;/content&gt;
+    &lt;content type=&quot;html&quot;&gt;&lt;![CDATA[{{ post.content | expand_urls: site.url | insert_ch_en_space | markdownify | cdata_escape }}]]&gt;&lt;/content&gt;
   &lt;/entry&gt;
   {% endfor %}
 &lt;/feed&gt;</code></pre></noscript></div>


<h4>insert_ch_en_space</h4>

<p><code>insert_ch_en_space</code>主要考虑了三种情况，1）汉英之间没有特殊字符；2）汉英之间有_或*等强调字符，这和前一类正则表达式可以合到一起；3）汉英之间有链接标签，这需要分标签左边和右边两种情况。具体见代码及注释：</p>

<div><script src='https://gist.github.com/2471129.js?file=insert_space_filter.rb'></script>
<noscript><pre><code>#encoding: UTF-8

require './plugins/post_filters'

module InsertSpaceFilter
  def insert_ch_en_space(input)
    unless @he_regex
      en = '[a-zA-Z0-9]'
      han = '\p{Han}'
      link = '[\[\(][^\]\)]*[\]\)]'
      del = '[\_\*]*'
      @he_regex = Regexp.new(&quot;(#{han}#{del})(#{en})&quot;)  # 汉e 汉_/*e
      @eh_regex = Regexp.new(&quot;(#{en})(#{del}#{han})&quot;)  # e汉 e_/*汉
      @hne_regex = Regexp.new(&quot;(#{han})(\\[#{en})&quot;)  # 汉[e
      @enh_regex = Regexp.new(&quot;(#{en})(\\[#{han})&quot;)  # e[汉
      @hle_regex = Regexp.new(&quot;(\\[.*?#{han}\\]#{link})(#{en})&quot;)  # [...汉](...)e
      @elh_regex = Regexp.new(&quot;(\\[.*?#{en}\\]#{link})(#{han})&quot;)  # [...e](...)汉
    end
    input.gsub(@he_regex, '\1 \2').
      gsub(@eh_regex, '\1 \2').
      gsub(@hne_regex, '\1 \2').
      gsub(@enh_regex, '\1 \2').
      gsub(@hle_regex, '\1 \2').
      gsub(@elh_regex, '\1 \2')
    
  end
end

module Jekyll           
  class MyFilters &lt; PostFilter
    include InsertSpaceFilter
    def pre_render(post)
      post.content = insert_ch_en_space(post.content)
    end
  end
end

Liquid::Template.register_filter InsertSpaceFilter
</code></pre></noscript></div>


<p>正则表达式写的比较少，不知道有没更高效的写法。</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[J1退税小记]]></title>
    <link href="http://xoyo.name/2012/04/j1-tax-refund-notes/"/>
    <updated>2012-04-19T10:03:00+08:00</updated>
    <id>http://xoyo.name/2012/04/j1-tax-refund-notes</id>
    <content type="html"><![CDATA[<p>我是去年（2011 年）拿 J1 签证去的美国，从 7 月到 10 月。因为我是以访问学生的身份在 rice 参与一个科研项目，每个月 rice 都会给我发工资，根据中美的协定<a href="http://www.chinatax.gov.cn/n8136506/n8136593/n8137537/n8138502/11581046.html">[2]</a><a href="http://www.irs.gov/pub/irs-trty/china.pdf">[3]</a>，我这部分收入是不需要在美国交税的。但是实际上学校给你发工资的时候还是会预扣（withhold）约 13%的税额，而且在你拿到 SSN 之前比例更是达到 30%。我就这个问题咨询过学校的薪资部门（payroll），他们一直坚持说根据系统记录我确实是应该被扣除税额的，我可以在明年跟国税局（IRS）申请退税。当时还跟他们在邮件里争了几个来回，最后还跑到办公室去当面对质，才算弄明白他们确实没搞错。</p>

<p>如果你和我一样在退税之前就回国了，那么退税是比较麻烦的。第一，来回寄材料费时间，有在美国的朋友帮忙操作是最好的了；第二，如果你让 IRS 寄支票给你退税，那当中的手续费也很吃亏，最后拿到手可能就不多钱了。好在 BOA 和建行有合作关系，BOA 的 debit 卡可以在建行的 ATM 上提款免收手续费。所以只要在回国前开个 BOA 的账号，到时让 IRS 直接把退税打到这个账号上就可以了。</p>

<p>很快就到了第二年的开春，也就是退税的季节，这时候学校会发 W-2 和 1042S 税表给你。rice 的 W-2 可以选择电子版的方式，1042S 可以自取也可以邮寄。这两张表记录了你被用人单位预扣的收入税。另外你还需要填 <a href="http://www.irs.gov/pub/irs-pdf/f1040nre.pdf">1040NR-EZ</a> 和 <a href="http://www.irs.gov/pub/irs-pdf/f8843.pdf">8843</a> 这两个表，前者计算你的税额，后者记录一些基本信息。1040NR-EZ 看起来很复杂，但它的<a href="http://www.irs.gov/pub/irs-pdf/i1040nre.pdf">填表指导</a>非常详细，表里的每一项都会告诉你怎么填。其中<code>J. Income Exempt from Tax</code>这一项要查 <a href="http://www.irs.gov/pub/irs-pdf/p901.pdf">Pub. 901</a>，我这种 J1 访问学生是属于 Tax treaty article <strong>19 </strong>的情况的。8843 就相对好填多了，它的表后也有详细的填表指导。</p>

<p>填好之后把 W-2, 1042S, 1040NR-EZ 和 8843 这些材料都寄到 IRS 就行了，三周后可以<a href="http://www.irs.gov/individuals/article/0,,id=96596,00.html">查询</a>退税状态。</p>

<h3>主要时间点</h3>

<p>2011.11.17 收到 payroll 的信让我选择是否接受电子版 W-2，并更新居住地址<br/>
2012.01.31 开始发 W-2<br/>
2012.03.13 陈栋帮我到 payroll 拿了 1042S<br/>
2012.03.22 陈栋帮我寄出材料<br/>
2012.04.14 查询到退税状态<br/>
2012.04.18 退税到账</p>

<p>最后要特别鸣谢陈栋同学的鼎力相助：）</p>

<h3>参考</h3>

<h4>表</h4>

<p>[1] <a href="http://www.irs.gov/pub/irs-pdf/p901.pdf">Publication 901</a><br/>
[2] <a href="http://www.irs.gov/pub/irs-pdf/f1040nre.pdf">Form 1040NR-EZ</a><br/>
[3] <a href="http://www.irs.gov/pub/irs-pdf/i1040nre.pdf">Form 1040NR-EZ instruction</a><br/>
[4] <a href="http://www.irs.gov/pub/irs-pdf/f8843.pdf">Form 8843</a></p>

<h4>攻略</h4>

<p>[1] <a href="http://oiss.rice.edu/content.aspx?id=132">Taxes page from Rice</a><br/>
[2] <a href="http://www.docin.com/p-170561925.html">杜克中文 F 类签证报税(国税)指南</a></p>

<h4>官方说明</h4>

<p>[1] <a href="http://www.sino-education.org/studyabroad/tax.htm">驻美大使馆关于留学生报税的介绍</a><br/>
[2] <a href="http://www.chinatax.gov.cn/n8136506/n8136593/n8137537/n8138502/11581046.html">关于《关于〈中华人民共和国政府和美利坚合众国政府关于对所得避免双重征税和防止偷漏税的协定〉第十九条解释的主管当局协议》生效执行的公告</a><br/>
[3] <a href="http://www.irs.gov/pub/irs-trty/china.pdf">UNITED STATES-THE PEOPLE&#8217;S REPUBLIC OF CHINA INCOME TAX CONVENTION</a></p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Emacs desktop configuration persistence]]></title>
    <link href="http://xoyo.name/2012/04/emacs-desktop-configuration-persistence/"/>
    <updated>2012-04-08T16:20:00+08:00</updated>
    <id>http://xoyo.name/2012/04/emacs-desktop-configuration-persistence</id>
    <content type="html"><![CDATA[<p>之前一直用 Emacs 的 desktop 来保存工作状态，其实主要就是记录打开的 buffer（文件）。desktop 可以保存多个桌面，每个桌面都保存在单独的目录里，但是每次要切换桌面都得填路径这点比较麻烦。<a href="http://scottfrazersblog.blogspot.com/2009/12/emacs-named-desktop-sessions.html">my-desktop</a> 在其基础上增加了命名功能，这样保存和读取桌面都只要用名字就可以了。my-desktop 里的路径处理都是用字符串操作来做的，比较丑，我都改了过来，还加了个删除功能，另外还有些小改动。</p>

<p>新的接口如下：<br/>
* <code>my-desktop-save</code> 保存当前桌面<br/>
* <code>my-desktop-save-as</code> 重命名当前桌面<br/>
* <code>my-desktop-save-and-read</code> 加载指定桌面<br/>
* <code>my-desktop-new</code> 新建桌面<br/>
* <code>my-desktop-destroy</code> 删除桌面<br/>
* <code>my-desktop-name</code> 查看当前桌面名</p>

<p>代码：</p>

<div><script src='https://gist.github.com/2329912.js?file=my-desktop.el'></script>
<noscript><pre><code>;; desktop session tweaks based on my-desktop(http://scottfrazersblog.blogspot.com/2009/12/emacs-named-desktop-sessions.html)
;; by Zhiwei Xiao

(require 'desktop)

(defvar my-desktop-session-dir 
  (expand-file-name &quot;~/.emacs.d/desktop/&quot;)
  &quot;*Directory to save desktop sessions in&quot;)

(defvar my-desktop-session-name-hist nil
  &quot;Desktop session name history&quot;)

(defvar my-desktop-default-session-name &quot;default&quot;
  &quot;The default session name&quot;)

(defun my-desktop-save-as (&amp;optional name)
  &quot;Save desktop by name.&quot;
  (interactive)
  (unless name
    (setq name (my-desktop-get-session-name &quot;Save session&quot; t)))
  (when name
    (let ((dirname (expand-file-name name my-desktop-session-dir)))
      (make-directory dirname t)
      (desktop-save dirname t)
      (message (concat &quot;Session saved as &quot; name &quot;.&quot;)))))

(defun my-desktop-save ()
  &quot;Save current desktop&quot;
  (interactive)
  (my-desktop-save-as (my-desktop-get-current-name)))

(defun my-desktop-new ()
  &quot;Save current desktop and create a new desktop.&quot;
  (interactive)
  (call-interactively 'my-desktop-save)
  (desktop-clear)
  (setq desktop-dirname nil)
  (call-interactively 'my-desktop-save-as))

(defun my-desktop-read (&amp;optional name)
  &quot;Read desktop by name.&quot;
  (interactive)
  (unless name
    (setq name (my-desktop-get-session-name &quot;Read session&quot; t)))
  (when name
    (desktop-clear)
    (desktop-read (expand-file-name name my-desktop-session-dir))))

(defun my-desktop-save-and-read ()
  &quot;Save current desktop and read a desktop.&quot;
  (interactive)
  (my-desktop-save)
  (call-interactively 'my-desktop-read))

(defun my-desktop-destroy (&amp;optional name)
  &quot;Destroy desktop by name.&quot;
  (interactive)
  (setq current-name (my-desktop-get-current-name))
  (unless name
    (setq name (my-desktop-get-session-name &quot;Destroy session&quot; t)))

  (if (string= name my-desktop-default-session-name)
      (message &quot;The default desktop cannot be destroyed.&quot;)
    (let ((dirname (expand-file-name name my-desktop-session-dir)))
      (setq desktop-dirname dirname)
      (desktop-remove)
      (delete-directory dirname t)
      (message (concat &quot;Session &quot; name &quot; has been destroyed.&quot;))
      ; read the default session after destroying current session
      (if (string= current-name name)
      (my-desktop-read my-desktop-default-session-name)
    (setq desktop-dirname (file-name-as-directory 
                   (expand-file-name 
                current-name my-desktop-session-dir)))))))

(defun my-desktop-name ()
  &quot;Return the current desktop name.&quot;
  (interactive)
  (let ((name (my-desktop-get-current-name)))
    (if name
        (message (concat &quot;Desktop name: &quot; name))
      (message &quot;No named desktop loaded&quot;))))

(defun my-desktop-get-current-name ()
  &quot;Get the current desktop name.&quot;
  (when desktop-dirname
    (let ((dirname (directory-file-name desktop-dirname)))
      (when (string= (file-name-directory dirname) my-desktop-session-dir)
        (file-name-nondirectory dirname)))))

(defun my-desktop-get-session-name (prompt &amp;optional use-default)
  &quot;Promt the user to enter a session name.&quot;
  (let* ((default (and use-default 
               my-desktop-default-session-name 
               (my-desktop-get-current-name)))
         (full-prompt (concat prompt (if default
                                         (concat &quot; (default: &quot; default &quot;): &quot;)
                                       &quot;: &quot;))))
    (completing-read full-prompt (and (file-exists-p my-desktop-session-dir)
                                      (directory-files my-desktop-session-dir))
                     nil nil nil my-desktop-session-name-hist default)))

(global-set-key &quot;\C-cds&quot; 'my-desktop-save)
(global-set-key &quot;\C-cda&quot; 'my-desktop-save-as)
(global-set-key &quot;\C-cdn&quot; 'my-desktop-new)
(global-set-key &quot;\C-cdr&quot; 'my-desktop-save-and-read)
(global-set-key &quot;\C-cdd&quot; 'my-desktop-destroy)
(global-set-key &quot;\C-cdi&quot; 'my-desktop-name)

;; create directory for the default session
(let ((default-dir (concat my-desktop-session-dir 
               my-desktop-default-session-name)))
   (unless (file-directory-p default-dir) (make-directory default-dir))
   (setq desktop-path (list &quot;.&quot; default-dir)))

(provide 'my-desktop)</code></pre></noscript></div>


<p>desktop 虽然能记录打开的 buffer，但是它并不能保存窗口的配置信息。比如我写代码时习惯先垂直划分大窗口，再水平划分右半窗口，而在退出 Emacs 之后 desktop 并没有保存这个配置。</p>

<p>其实 Emacs 的桌面配置可以保存在 <a href="http://www.gnu.org/software/emacs/manual/html_node/emacs/RegConfig.html#RegConfig">Emacs Register</a> 里，不过就是一直没找到很好用的包。后来发现 <a href="https://github.com/tlh/workgroups.el">workgroups</a> 这个扩展能保存窗口状态，封装得也还不错，而且还是有人在维护的。但它的 master 分支没有记录打开的 buffer 的功能，可以配合 desktop 使用，这样做有个问题是保存的 buffer 历史和窗口配置之间没有关联，需要手动分别切换。而 workgroups 的 experimental 分支就支持 buffer 历史和窗口配置的关联，但是<code>kill-buffer</code>似乎有点 bug，关闭最后一个 buffer 之后会出现其他窗口的 buffer，有空再研究下。这些 Emacs 桌面的问题在 workgroups 的文档里都提到了，看来大家遇到的情况都差不多。</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[重读《量化》多处理器章节]]></title>
    <link href="http://xoyo.name/2012/02/multiprocessors-and-cache-coherence/"/>
    <updated>2012-02-12T21:02:00+08:00</updated>
    <id>http://xoyo.name/2012/02/multiprocessors-and-cache-coherence</id>
    <content type="html"><![CDATA[<p><a href="http://book.douban.com/subject/1984303/"><img class="alignleft" title="Computer Architecture" src="http://img3.douban.com/lpic/s4254078.jpg" alt="" width="143" height="200"></a>
一直对多处理器结构一些基本概念和机制认知有些模糊，这阵子终于抽空看了《量化》的相关章节，清晰许多。画了张<a href="http://www.xmind.net/share/zwxiao/multiprocessors-and-cache-coherence/">脑图</a>，总结了多处理器和缓存一致性的基本问题。</p>

<p>书里提到一个常见的认识误区，也是我平时容易忽视的：</p>

<!-- more -->


<p><strong>用执行速度是否线性提高来衡量多处理器的性能</strong></p>

<blockquote><p>Measuring performance of multiprocessors by linear speedup versus execution time.</p></blockquote>

<p>我们经常用同一段代码来比较不同系统的性能，但其实这是不公平的。因为并行版本的程序在单处理器上可能比串行版本要慢得多，相当于你让单处理器去做它不擅长的事情。<strong>公平的做法应该是比较各个处理器上各自最优的版本</strong>。但其实这样子则会带来算法差异的问题，因为并行版本往往采用针对并行优化过的算法，这样就是拿苹果和橙子比较了。为了区分这两种情况，作者提出相对加速比（relative speedup，用同样的程序测试出来的加速比）和真实加速比（true speedup，分别用各个处理器上最优的程序测试出来的加速比）这两个概念。</p>

<p>另一方面，作者说以是否线性提高来衡量多处理器<strong>性能</strong>也是不对；不过我觉得作者这一点多虑了。其实我们一般是拿线性提高来衡量系统的<strong>伸缩性</strong>，这是没有问题的。但是单纯的看核数/处理器数的增加也是不公平的，比如肇国吴总他们当年测 <a href="http://sourceforge.net/p/coremu">COREMU</a> 时，就遇到过超线性加速的情况；这是由于当核数增多时，可用的 Cashe 也变大，提高了缓存命中率从而带来更好的性能。所以在评测中需要综合考虑 Cache，I/O 等子系统带来的影响。</p>

<p>比较两个处理器之间的加速比并不总能反映它们的相对性能。执行时间变化趋势图可以看，但是要小心别被误导。</p>

<p>另外<a href="http://gernot-heiser.org/benchmarking-crimes.html">这篇文章</a>也总结了很多常见的评测和分析的误区，值得一读。</p>

<hr />

<h4>原子指令</h4>

<p>还有以前傻傻的老搞不清楚为什么要用 exchange 这样的指令作为最基本的原子指令，为什么不实现一个锁呢？看书的时候顺便才想明白，其实我们拿锁的过程就是读取和写入锁状态两个动作，一读一写正好就是 exchange 的语义。由于硬件本身只能实现单独一个读或写操作的原子性，原子指令就是为了解决读写两个动作的原子性这个问题而引入的。</p>

<p>书上介绍的是用特殊的读指令 load linked(LL)和写指令 store conditional(SC)来实现原子操作。先用 LL 读取某个地址，在 SC 要写入值之前，会先检查 LL 所指向的内存值是否发生改变，是的话则操作失败。这样这一对指令合起来就能实现原子的 exchange 操作。书里没说 LL/SC 是怎么实现的，扫了 Intel 的文档也没看到相关介绍，我猜测应该是这样：LL 相当于注册了一个内存监听器，以后执行写操作时，会先检查内存地址是否被 LL 注册，是的话则置上某个 flag；当 SC 执行时先独占 bus，保证没有其他写操作进行，然后检查该 flag 是否被置上，是的话说明指定的内存被改过了，操作失败，反之则操作成功。
doubanclaim17b6d9ef1ce58f18</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[在HP TouchPad上安装Android 4.0]]></title>
    <link href="http://xoyo.name/2012/02/install-android-4-dot-0-on-hp-touchpad/"/>
    <updated>2012-02-10T22:43:00+08:00</updated>
    <id>http://xoyo.name/2012/02/install-android-4-dot-0-on-hp-touchpad</id>
    <content type="html"><![CDATA[<p>暑假赶上 HP 挥泪甩卖，拼到 TouchPad 一只。TouchPad 的原生系统是 webOS，虽然上面的应用及其稀少，但也有其独到之处：醒目而又不烦人的<strong>通知系统</strong>，富有操作感的<strong>卡片式任务管理</strong>，以及对<strong> Flash </strong>的完美支持。而且在后来的一次版本升级里还加入了一个彩蛋，当你以某一个特定方位查看任务卡片时，往下拉卡片会有弹弓被拉紧的声效，松指让卡片飞出的时候就能听到后面有只愤怒的小鸟也欢乐地“hui”出来。</p>

<p>无奈应用确实少得可怜，前天终于抽空把它刷成 webOS 和 Android 双系统。目前移植得比较成功的是 CyanogenMod(CM)这个发行版，最新版本是 CM9，基于 Android 4.0。网上的教程大多很啰嗦，中文的也都还是 CM7(Android 2.3)版本，所以简单记录下。我是在 Mac OS X 10.7.3 下刷机的，Windows 和 Linux 的步骤也都类似。</p>

<!-- more -->


<h4>0. 先下载下面这几个文件/工具：</h4>

<ul>
<li>ACMEInstaller2</li>
<li>update-cm-9.0.0-RC0-Touchpad-alpha0.6-fullofbugs.zip</li>
<li>update-cwm_tenderloin-1012.zip</li>
<li>moboot_0.3.5.zip</li>
<li>novacom</li>
</ul>


<p>前四个文件都可以在开发团队的[论坛发布贴][1]下载。其中 ACMEInstaller2(<strong>A</strong> <strong>C</strong>yanogen<strong>M</strong>od <strong>E</strong>xperimental Installer)是用来将 CyanogenMod 刷进 TouchPad 的工具；update-cm 这个就是 CM(Android)的镜像；update-cwm_tenderloin 是一个专门刷 Android ROM 的工具(ClockworkMod)；moboot 提供多系统启动的支持。</p>

<p>而最后一个 novacom 则是 HP 官方提供的 TouchPad 驱动和刷机工具，包含在 <a href="https://developer.palm.com/content/resources/develop/sdk_pdk_download.html">HP webOS SDK</a> 里，不过因为整个 SDK 太大了，<a href="http://code.google.com/p/universal-novacom-installer/downloads/list">有人</a>就专门把这 novacom 从 SDK 抽取出来。我一开始试了好几个第三方的 novacom 都不成功，最后还是装了 SDK 才认出设备来。</p>

<h4>1. 安装 novacom</h4>

<h4>2. 准备刷机文件</h4>

<p>让 TouchPad 以 USB drive mode 连接电脑，把</p>

<ul>
<li>update-cm-9.0.0-RC0-Touchpad-alpha0.6-fullofbugs.zip</li>
<li>update-cwm_tenderloin-1012.zip</li>
<li>moboot_0.3.5.zip</li>
</ul>


<p>这三个文件复制到 TouchPad 根目录下的<code>cminstall</code>(一定要叫这个名字)这个目录去(需要自己新建目录)。</p>

<h4>3. 进入开发模式</h4>

<p>重启 TouchPad，在屏幕变暗时按住<strong>增大音量键</strong>(也有说法是要同时按住电源键，不过我只按增大音量键就行了，可能是 TouchPad 版本问题吧)，直到屏幕出现 USB 连接图示的时候才松手。这时候要等一下让电脑安装驱动。</p>

<h4>4. 刷机</h4>

<p>在终端执行下面这个命令，其中<code>/path/to/ACMEInstaller2</code>是 ACMEInstaller2 文件路径</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>novacom boot mem:// &lt; /path/to/ACMEInstaller2</span></code></pre></td></tr></table></div></figure>


<p>你应该会看到 TouchPad 屏幕上哗啦啦的一溜输出，等到它完成后会自动重启，这时候 TouchPad 就已经安装上 Android 系统了。刷机后启动会先进入 moboot 的选择启动界面，默认是 5 秒后进 Android，你也可以用音量键上下移动，用菜单键选择启动项。</p>

<h3>问题</h3>

<p>Q: novacom 报<code>failed to connect to server</code>错误。<br/>
A: 这个可能是硬件问题，换根 USB 线，换个电压大点的 USB 插口；也可能是软件问题，比如 novacom 没装好，系统没驱动认不出 TouchPad 来。</p>

<p>Q: Android 下连接电脑没法识别出 USB 存储设备。<br/>
A: Settings -> Storage -> 注意到右上角那个小菜单没有 -> USB Settings -> 选上 MTP 模式。</p>

<p>Q: Mac 下还是看不到挂载的 USB 设备。<br/>
A: 装一个 <a href="http://www.android.com/filetransfer">Android File Trasfer</a></p>

<p>Q: 怎么刷完机就充不上电啊！<br/>
A: 最近天气冷，把 TouchPad 丢被窝里暖暖再充。</p>

<hr />

<p>3 月 4 日更新：</p>

<h3>升级至更新版的 CM9</h3>

<p>目前 CM9 的移植已经更新至 <a href="http://rootzwiki.com/topic/18843-releasealpha2-cyanogenmod-9-touchpad/" title="[Release][Alpha2] CyanogenMod 9 Touchpad">Alpha 2</a> 版本，解决了硬解码问题。只要把新的 CM9 内核放到 TouchPad 上，然后重启 TouchPad 进入 ClockworkMod 模式，执行 Wipe cache partition，清除缓存后执行 Install zip from sdcard，选择新的 CM9 内核，执行后重启后就进入新的系统了。具体的升级过程可以参考这个<a href="http://wiki.cyanogenmod.com/wiki/HP_Touchpad:_Full_Update_Guide" title="HP Touchpad: Full Update Guide">教程</a>和<a href="http://www.youtube.com/watch?v=i34DePhXvnE" title="Install ICS Cyanogenmod CM9 Android on the HP Touchpad">视频</a>。</p>

<h3>参考</h3>

<p>[1] <a href="http://rootzwiki.com/topic/15509-releasealpha06-cyanogenmod-9-touchpad/" title="[Release][Alpha0.6] CyanogenMod 9 Touchpad">[Release][Alpha0.6] CyanogenMod 9 Touchpad</a><br/>
[2] <a href="http://liliputing.com/2012/01/how-to-install-android-4-0-on-the-hp-touchpad-cyanogenmod-9-alpha.html" title="How to install Android 4.0 on the HP TouchPad (CyanogenMod 9 Alpha)">How to install Android 4.0 on the HP TouchPad (CyanogenMod 9 Alpha)</a><br/>
[3] <a href="http://rootzwiki.com/topic/18843-releasealpha2-cyanogenmod-9-touchpad/" title="[Release][Alpha2] CyanogenMod 9 Touchpad">[Release][Alpha2] CyanogenMod 9 Touchpad</a></p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[博客跟风改用octopress]]></title>
    <link href="http://xoyo.name/2012/02/migrate-to-octopress/"/>
    <updated>2012-02-07T18:33:00+08:00</updated>
    <id>http://xoyo.name/2012/02/migrate-to-octopress</id>
    <content type="html"><![CDATA[<p>前几天把博客从 WordPress 搬到 Octopress。为什么要用 Octopress 以及如何迁移<a href="http://blog.yxwang.me/2011/11/migrated-to-octopress/">小 z</a> 和 <a href="http://chenyufei.info/blog/2011-12-13/migrate-to-octopress/">p 哥</a>的博客基本都讲得差不多了，这里只做点补充。</p>

<p>整个迁移过程很简单：</p>

<!-- more -->


<ul>
<li><p>安装 <a href="http://octopress.org/docs/setup/">octopress</a></p></li>
<li><p>博文迁移：我用的是小 z 改进过的 <a href="https://gist.github.com/1403202">migrate.rb</a></p></li>
<li><p>导入评论：原来的 WordPress 里安装 <a href="http://disqus.com/">disqus</a> 插件，在插件设置里把 WordPress 评论导进 disqus</p></li>
<li><p>博客图片：我原来的 WordPress 博客图片都是用第三方图片存储服务的，所以博客图片也不需要迁移。需要的话直接复制<code>wp-content</code>文件夹就好。</p></li>
<li><p>非博文页面(Page)：其实第 2 步可以参考这里提供的<a href="https://github.com/mojombo/jekyll/wiki/Blog-Migrations">其他迁移方式</a>，能把所有页面都同步过来。
我的博客只有一个 About 页面，就自己重新写写算了。</p></li>
</ul>


<h3>图片格式</h3>

<p>有些博文开头会放插图，比如<a href="http://xoyo.name/2011/05/why-human-need-tolerant/">这篇</a>。我希望这类小幅插图都能被文字环绕显示，这就要为它们定义 css style。虽然能直接写 html 代码，但总觉得难看；好在 octopress 有一个 <a href="http://octopress.org/docs/plugins/image-tag/">Image Tag</a> 插件，它支持这样的语法：</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>&lt;img class="[class names]" src="http://xoyo.name/path/to/image" title="[width] [height] [title text [alt text]]" ></span></code></pre></td></tr></table></div></figure>


<p>所以只要在<code>/sass/custom/_styles.scss</code>里定义好 css class，需要的时候直接指定<code>[class name]</code>就行了。</p>

<h3>导航栏</h3>

<p><code>rake new_page</code>添加页面之后是不会自动生成导航栏链接的，得手动修改<code>/source/_includes/custom/navigation.html</code>。</p>

<hr />

<p>2 月 8 日更新：</p>

<h3>Emacs</h3>

<p>我平时一般用的是 Emacs，加上这个<a href="https://github.com/gfreezy/octopress-emacs">扩展函数</a>之后可以直接在 Emacs 里创建博文和部署网站。我<a href="https://github.com/xoyowade/octopress">修改过 Rakefile</a> 里的<code>new_post</code>和<code>new_page</code>任务，让它们自动打开 Mou 编辑新建页面；而在 Emacs 里执行这两个任务的时候就不需要自动打开 Mou，所以在调用<code>rake new_post</code>和<code>rake new_page</code>的时候还需要加个开关参数，这是我<a href="https://gist.github.com/1760275">修改后的扩展</a>。</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[MacBook Air进水遭遇+攻略]]></title>
    <link href="http://xoyo.name/2011/09/macbook-air-spilled-water/"/>
    <updated>2011-09-26T00:00:00+08:00</updated>
    <id>http://xoyo.name/2011/09/macbook-air-spilled-water</id>
    <content type="html"><![CDATA[<p>前阵子不小心把一整杯水泼到 air 的键盘上，刚倒下瞬间还没事，结果一慌张又把杯口推到电源附近，当场就自动关机。当时手忙脚乱的，把机器擦干之后就迫不及待的按了电源键，还是没任何反应。后来才知道这是一个很致命的错误，这样子是很容易烧坏主板的。正确的做法应该是：</p>

<ul>
<li>
<strong>立刻关机，断开外接电源，能拔电池的赶紧拔电池</strong>（air 悲剧）。切断电源后至少能保证不会有短路带来的后续伤害。</li>
    <li>
<strong>能拆机器的拆开来，用吹风筒猛吹</strong>。有些人说不要用吹风筒吹，可能是考虑到温度过高；其实高级点的吹风筒可以让它吹冷风的，但我觉得应该没啥关系，因为本本工作温度比吹风筒吹出来的风温高多了。这里 air 再次悲剧了，苹果用的螺丝是专门定制的，得用苹果专用的梅花螺丝刀才能拧开。作为一个自行拆过机的苹果用户，这里我要吐个槽：苹果既然要自己设计螺丝，为什么不干脆做成六角这样不容易滑丝的呢？苹果的梅花螺丝有五个点，每个点都是圆的，这样很难受力，很容易就滑丝。我当时自己拆开装上后，想再拆一次，就发现有一颗螺丝已经滑了，怎么也拧不出来。</li>
    <li>如果拆不了机，或者觉得有些地方吹不到，那可以<strong>把整只本本插到米堆里搁上几天</strong>，觉得不给力可以在米袋里再放点茶叶或干燥剂。</li>
</ul>




<!-- more -->


<p>经过上面几步，如果还不能正常开机，或者开机后出现其他问题的话，说明部分电路已经被烧挂掉了，果断把本本抱去修吧。</p>

<p>我当时就是这么插到米堆里放了好几天，但一点用也没有，开机黑屏，BIOS 时叫时不叫。苹果的保修是不保这种意外伤害的，即使是买了苹果关心 apple care 也不保。还有朋友告诉我苹果本本里好像是有进水检测的（我查到是 2010 年底有人在说这事，但不确定我的 2010 版 air 有没有），这样子如果被发现我的本本是因为进水挂了，苹果肯定不给修。所以就想等着我 ebay 上买的螺丝刀寄到，然后先拆机看看有没进水试纸以求安心。这里我又犯了个错，快递应该选至少 2-3 天送达的那种，不该选便宜的 1-5 天。因为后来它就真的是第五个工作日才到，中间还有一个周末，所以一共是七天！我那时候是等急了，螺丝刀还没到的时候，又搜到了一条大利好：</p>

<ul>
<li>
<strong>苹果店里的 genius 有权给你一个 one time exception，免费维修人外造成的损坏</strong>，而且只要他们心情好就都会给。要记住你一定要非常坦诚的把真实的情况告诉 genius，态度温和礼貌些不要太恶劣，因为如果你一心想着掩饰过失但却被发现是进水短路，那人家肯定就不高兴给你免费修的机会了。</li>
</ul>


<p>于是果断就上官网预约 genius bar，选的是第二天的早晨（这时候人一般心情比较好，而且刚上班不久应该不会有什么坏情绪）。</p>

<p>第二天一早起来又把搜到的成功案例重新温习了一遍，自我感觉希望还是蛮大的。苹果店里人确实不是一般的多，不过 genius bar 因为有预约机制所以还好，等了几分钟就轮到我了。接待我的 genius 叫 Taylor（看到他名字第一反应就是很想把他展开⋯⋯），在问完我的情况后，就把本本抱进了里屋。大概三五分钟后他就出来了，说刚刚帮我拆机检查过了，主板上好几处都烧坏了@$@%$%#。然后开始跟我说这种情况是不在保修范围内的⋯⋯我一听他的语气就知道有戏了！果然他又接着讲，但是他刚刚已经查过了，我之前没有任何不良的维修记录，所以他可以给我 one time exception，免费给我换一个新的本本！但是他说没办法帮我备份数据，只能把 ssd 板子拿出来给我，等我备份完一起送回来才能换新的，而且还不肯提供任何读取数据的方式，估计是苹果为了避免数据恢复的连带责任吧。</p>

<p>但这样就很郁闷了，你让我自己怎么把数据弄出来呢？我们先到 microcenter 转了一圈，技术支持和苹果专区的人都不懂，卖零件那边的 geek 工作人员看了下倒是说这是挺标准的接口，用一般的 miniSATA 读卡器就能读出来了。我们不放心回来又搜了下，果然苹果又装逼了，自己搞了个特殊的接口，很像 miniSATA，但是根脚数不一样（我找到 miniSATA 的设计说明，一个一个数过来的）。看来只有唯一一个办法了，就是用另外一台 air 来当读卡器（把它的 ssd 换成我的。。）⋯⋯可是在这边都没其他朋友有 air 啊，这时候还是陈栋牛逼：他提醒我 amazon 一个月内无条件退货，所以我们可以在 amazon 搞一个，恢复完数据就退货。虽然猥琐了点，但确实是没其他办法的下下之策了。</p>

<p>后面的事就挺顺利的了，本本和螺丝刀先后到货，换上我的 ssd，用 Carbon Copy Cloner 把系统备份到移动硬盘，再把 ssd 换回去，搞定。iFixit 上有很详细的<a title='MacBook Air 11" Model A1370 Teardown' href="http://www.ifixit.com/Teardown/MacBook-Air-11-Inch-Model-A1370-Teardown/3745/1" target="_blank">拆机图</a>，上面会告诉你需要什么工具。这时候因为前面提到的螺丝滑丝，所以没把旧的 ssd 装回旧 air。备份完数据第二天又跑了躺苹果店，这次的 genius 叫 Allen，人也很好，说 Taylor 已经帮我把 ticket 都填好了，今天直接就能拿到新机器！不过 Allen 在帮我把 ssd 装回去的时候似乎也折腾了好一会那颗滑丝的螺丝（在屋里呆好久），还好最后他还是顺利地很牛逼地走出来了。让我稍等一会，又里里外外跑了好一会，终于给我搞了一个新的 air 出来。</p>

<p>他告诉我给我换的是最新的 2011 款 air，算是意料之外，也是情理之中，因为现在老 air 已经停产，苹果店里也早不卖了，所以他们能拿得出来的也只有最新款了吧。新 air 带的是刚出来不久的 lion 系统，Allen 还开玩笑说我欠了他$30（lion 卖$29.99）⋯⋯新本本的保修期是从当天开始算的，也是一年，苹果服务实在是太给力了，不得不服。所以其实如果考虑售后服务的话，苹果的产品还是挺值这个价的。最后看到他们给的单子（改天我再晒出来）上写着，用户报告进水，检测器也指示有进水迹象。还好当时没有试图掩饰，要不肯定就被发现了。这个故事告诉我们，千万不要对 genius 撒谎。。。</p>

<p>另外当时看到有个<a title="macbook air 进水了 ，机子已经修好了！！[附三里屯 apple store 维修经过]" href="http://bbs.weiphone.com/read-htm-tid-2750399.html" target="_blank">帖子</a>，楼主 air 进水拿去北京三里屯的苹果店修，没说进水，genius 也没问，不知道是不是因为他的症状比较轻，所以检查的程序不一样？</p>

<p>啰嗦了那么一大堆，其实只有一句话：<strong>如果你的 mac 进水了，直接拿去换个新的吧</strong>⋯⋯</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[人类为什么需要宽容？]]></title>
    <link href="http://xoyo.name/2011/05/why-human-need-tolerant/"/>
    <updated>2011-05-15T00:00:00+08:00</updated>
    <id>http://xoyo.name/2011/05/why-human-need-tolerant</id>
    <content type="html"><![CDATA[<p><a href="http://book.douban.com/subject/1063221/"><img class="alignleft" title="宽容" src="http://img3.douban.com/lpic/s2731422.jpg" alt="" width="143" height="200"></a>这里的宽容不是讲个人的宽容。个人不宽容只能以大多数人不介意为极限，而官方不宽容则可以权力浩大。宽容如同自由，只是乞求是得不到的，只有永远保持警惕才能保住它。《宽容》讲述的就是千百年来欧洲文明如何在宽容事业上的一点一滴前进的故事。直到现在，“不宽容”仍在向我们进军，我们不能再坐以待毙。虽然历史并不能告诉我们如何建立一个宽容的社会，但至少我们多少可以学到如何避免这些悲剧的发生。</p>

<p>故事从原始时代讲起。原始人把一切事情都归为生灵操纵，为让社会维持下去，就要靠专横的制度，使所有人绝对服从能平息上帝怒火的律法。那时没有军队和警察，靠的是忌讳来保护这些条例。这对他们来说也是理所当然的事。那时候还没有什么宽容的概念。</p>

<!-- more -->


<p><strong>古希腊和罗马</strong></p>

<p>一直觉得古希腊人是个神奇的存在，在两三千年前黑暗的欧洲就孕育出如此璀璨的文明。希腊人自由思考的风气得益于他们独特的众神信仰。他们认为宙斯并不把他本人和它的天国看得太重（本来就像人间一样乱糟糟的），因而古希腊从未有过条例森严的教规，这为独立思考精神的发展提供了广阔的背景。泰勒斯（前 624～547）勇敢地把一切自然现象看作是受永恒法则（而不是天神）支配的结果。阿那克萨哥拉（前 500～428）谈及世间万物由“种子”产生，这与天神背道而驰，由此而受到大肆攻击。苏格拉底（前 200～100）进一步宣称塑造命运的不是上帝，而是每个人自己，因此我们需要宽容和自由。苏格拉底也为此付出代价，从容就义。可见希腊人的宽容也是有限度的，只不过他们的限度相对更大一些罢了。与其扎根民众的老师不同，世家（梭伦）出身的柏拉图是惧怕生活的人。他厌恶平民在政治上的争吵，认为宗教必不可少，所有人都必须服从规定。希腊的宽容是因为老一代希腊思想的领袖人物把宽容精神置于明确结论之上。而罗马人的宽容则是因为他们从不关心这些理论问题，除了不允许过问政治其他都是可以容忍的。“罗马和平”赖于“待人宽则人亦待己宽”以及类似于“如果那位上帝认为必须补偿他所蒙受的损失，他一定会自己关照的”这样的逻辑。</p>

<p><strong>基督教</strong></p>

<p>随着社会的进步，普通百姓逐渐开始认为大部分古代神话是愚昧祖先的产物，却又接受不了高高在上的哲学思想。这时各种宗教行会开始趁虚而入。由于长年的征战使得财富集中于少数权贵手中（《人类的故事》有详细的描述），大量市民破产涌入凄凉的贫民窟。而不久前还在世的基督让人有亲身接触的感觉，基督教由此获得优于其他教义的优越性。同时罗马广阔的疆土和中央集权也帮助了简单又实用的基督教统一世界。</p>

<p>基督教早起只有松散的集会，为了对付警察的搜捕（那时罗马当局认为他们已触动统治根基），集会推选出常任的执事。集会扩大之后就有了负责区域事务的长老（神父），进而产生教区总监（主教）。到了 258 年，罗马大主教（教皇，圣父）成为地位最为显赫的主教，统领整个教会。在罗马迁都拜占庭后，教皇声望更是迅速扩大。313 年，君士坦丁大帝为获得教会支持，以官方名义承认基督教会，并颁布《宽容法》，使基督教成为国教。363 年，异教徒朱利安皇帝死后，基督教立即开始扫荡欧洲。到公元 5 世纪上半叶，基督徒将异教偶像移走；教皇也毫不夸张地宣称，古代哲学家的书已经从地球上消失了。自诩正确和专横的风气弥漫了整个世界。</p>

<p>12 世纪到 15 世纪，为镇压普罗旺斯人对基督教的质疑和叛逆，教会组建特别法庭并授意十字军烧杀掳掠。后来在此基础上逐渐建立起各地宗教法庭，而教会亦藉此搜刮了许多民脂民膏。没有限制的权力必然导致权力的滥用。为了控制思想，教会编排了《禁书目录》。但却起到反面的效果，《禁书目录》为公众瞩目，书商争相盗印。现在国 an 部或伟大的防火墙和这个目录一样，经过它们认证的人或者网站一般都是好东西。</p>

<p><strong>文艺复兴和宗教改革</strong></p>

<p>14 世纪到 16 世纪的文艺复兴不是钻研科学的时代，在精神领域也缺乏真正的志趣，三百年间主导的是美和享乐。冒险家们的经历激发了人们对生活新的向往，同时里面也蕴藏着一种潜在的不满。人们开始从“我们知道”走向“我们真的知道吗？”。</p>

<p>16 世纪到 17 世纪的宗教改革实际上是一场不可避免的社会和经济革命，神学背景微乎其微。它是各民族反抗教会这国上之国的产物，制造出无数意见分歧的小团体。这些小团体的当权者并没建立宽容的统治，而是效法教会打击异端。尽管如此，宗教改革还是使得人们熟悉了《圣经》，扫除了《圣经》的神秘感，也就扫除了自由思考的障碍；另一方面宗教改革也把西欧和北欧从权力专制中解脱出来。从此，不同禁地之间形成了精神上的“无人区”，人们可以在此自由思考。</p>

<p>这数百年间，社会在牛人们的推动下开始一点一点的进步。伊拉斯谟和拉伯雷带领人们摧毁了旧的社会，可惜下一代人没能另起炉灶，加尔文在日内瓦建立起新的集权统治。索兹尼的信仰与其他人截然不同，呼吁让每个人自由地判断他的宗教。道理很简单，我们唯一的主是耶稣，大家都是兄弟，谁都没有资格凌驾于其他人之上。在政治上也有蒙田促成法国的《国家宽容法》产生。与此同时，商业发达的地区如威尼斯和阿姆斯特丹出于经济利益考虑，也实行宽容的宗教政策。而荷兰共和国则是殊途同归。它由数百个贵族家庭控制，这些人把国家视为似有财产，因而压抑宗教的过度狂热（以防破坏国家稳定），这使得荷兰成为国际思想交换站。到了 17 世纪，笛卡尔和斯宾诺莎摈弃旧宗教的狭隘界限，建立起崭新的思想体系。洛克的《关于宽容的信》从根本上否定国家有权干涉宗教，教派间也不应利用政治势力相倾轧。</p>

<p><strong>近代</strong></p>

<p>18 世纪伏尔泰利用他的个人关系和影响，通过法律和各方压力保护被宗教法庭迫害的人，使得宗教法庭只有在暗地里才能达到目的。法国大革命推翻了旧的残暴统治，却带来新的暴政。谁敢坚持说人民的意愿不一定正确，也就会被处死。两次世界大战和现在遍布世界的恐怖活动，时时提醒我们不能放松警惕，宽容事业还有待我们人类千千万万年的努力和奋斗。</p>

<p>全书的后记和《明朝那些事儿》一样充满了历史沧桑感，不过《宽容》少了几分玄乎和感慨，多了几分力量和使命感。</p>

<p> </p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Hadoop的下一代MapReduce框架]]></title>
    <link href="http://xoyo.name/2011/02/hadoop-nextgen/"/>
    <updated>2011-02-20T00:00:00+08:00</updated>
    <id>http://xoyo.name/2011/02/hadoop-nextgen</id>
    <content type="html"><![CDATA[<p>最近雅虎开发者博客发了一篇介绍<a title="The Next Generation of Apache Hadoop MapReduce" href="http://yhoo.it/fDoTzt" target="_blank">Hadoop 重构计划</a>的文章。他们发现当集群的规模达到 4000 台机器的时候，Hadoop 遭遇到伸缩性的瓶颈。目前 Hadoop 各个模块的紧耦合使得在现有设计的基础上的继续改进举步维艰。这一点早已在社区内达成共识，目前他们正准备开始对 Hadoop 进行重构。</p>

<p>新架构的主要思想是把原来 JobTracker 的功能一分为二：ResourceManager 管理资源的分配，ApplicationMaster 管理任务监控和调度。ResourceManager 与原有的 JobTracker 类似，作为整个集群的控制中心；而 ApplicationMaster 则是每个 application 都有一个单独的实例，application 是用户提交的一组任务，它可以由一个或多个 job 组成。每台 slave 运行一个 NodeManager 实例，功能类似于原来的 TaskTracker。</p>

<!--more-->


<p><a href="http://ydn.zenfs.com/blogs/22/MapReduce_NextGen.jpg"><img class="alignnone" title="Hadoop Nextgen Architecture" src="http://ydn.zenfs.com/blogs/22/MapReduce_NextGen.jpg" alt="Hadoop Nextgen Architecture" width="624" height="386"></a></p>

<p>雅虎的博客已经对新架构的优势作了全面的介绍，这里只列出几点我个人比较关注的：</p>

<p>1、层次化的管理</p>

<p>目前 Hadoop 的资源管理和任务调度都是在 JobTracker 中进行的，它需要复制所有 task 的资源分配和调度。而 task 是非常微观的调度单位，通常每个 job 都会产生成百上千个 task，而系统同一时刻又会有大量的 job 同时运行，这让 JobTracker 的管理负担变得非常繁重。新架构将这一管理任务下放到各个 ApplicationMaster，ResourceManager 只管理每个 application 的资源分配。这样即使系统中存在很多 application，ResourceManager 的负担也能控制在一个合理的程度；这也是新架构最大的优势。</p>

<p>2、ApplicationMaster 应该在 Master 还是 Slave 上运行？</p>

<p>新架构实际上将管理和调度的任务转移到 ApplicationMaster 上来，如果 ApplicationMaster 所在的节点挂掉，整个任务都需要重做。原来 JobTracker 可以跑在相对稳定的 Master 上，出错概率低；现在 ApplicationMaster 跑在好些 Slave 上，出错的概率就非常高了。而且新架构打破了原来简单的 Master-Slave 模型，节点之间的通讯和依赖关系变得更加复杂，增加了网络优化的难度。如果把 ApplicationMaster 全都放在 Master 上执行，则 Master 的负担会非常重（需要处理各种持续性的 heartbeat 和爆发性的如 getTaskCompletionEvents 这样的 rpc 请求），不过这个问题可以通过分布式的 Master 解决（Google 已经实现）。</p>

<p>3、资源管理方式</p>

<p>原来单纯地以简单静态的 slot 作为资源单位确实不能很好描述集群的资源状况。新架构将更细粒度地控制 CPU，内存，磁盘，网络这些资源。每个 task 都将在 Container 中执行，并只能使用其所分配到的系统资源。资源的分配可以用静态估计动态调整的方式实现。</p>

<p>4、支持其他编程模型</p>

<p>由于任务的管理和调度都由 ApplicationMaster 进行，ApplicationMaster 又相对独立于系统的其他模块，用户甚至可以部署自己的 ApplicationMaster，实现对其他编程模型的支持。这使得其他不大适合用 MapReduce 实现的应用程序也能在同一个 Hadoop 集群中运行。</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Linux全系统复制]]></title>
    <link href="http://xoyo.name/2011/02/clone-linux/"/>
    <updated>2011-02-19T00:00:00+08:00</updated>
    <id>http://xoyo.name/2011/02/clone-linux</id>
    <content type="html"><![CDATA[<p>千盼万盼，终于盼来实验室的 7 台 R715 集群，捣腾了两天好不容易才把机器和交换机都安上机架。机器有点多，我们不想每台机器都重新配置一遍环境，所以准备先配好一台机器再复制到其他机器的硬盘上。</p>

<p><strong>方案 1 – 全盘复制</strong></p>

<p>直接复制整个硬盘，这样包括 boot loader 和分区表在内的硬盘所有信息都能完整的复制过去。不过目标盘的容量不能比复制源低，否则文件系统就悲剧了。这种方法需要拷贝整个硬盘，即使你什么文件也没写，所以速度非常慢。</p>

<!--more-->


<p>可以用 dd 复制单块硬盘</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>dd if=/dev/sda of=/dev/sdb& ddpid=$!</span></code></pre></td></tr></table></div></figure>


<p>dd 会很慢，可以向 dd 进程发 USR1 信号监控 dd 进展</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>kill -USR1 $ddpid</span></code></pre></td></tr></table></div></figure>


<p>也可以同时复制到多块硬盘</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>dd if=/dev/sda | tee &gt;(dd of=/dev/sdb) &gt;(dd of=/dev/sdc) &gt;(dd of=/dev/sdd) &gt; /dev/null</span></code></pre></td></tr></table></div></figure>


<p>另外还有 G4L 和 CloneZilla 这样的工具可以全盘复制，不过我们觉得还是太慢了，500G 的硬盘居然复制了 11 个小时……</p>

<p><strong>方案 2 – 人肉搬家</strong></p>

<p>1) 用 cfdisk/fdisk 建好要目标硬盘的分区表，mkfs.ext4/mkswap 创建好文件系统和 swap 分区后，把文件系统 mount 上来</p>

<p>2-1) 我们装的是 Debian squeeze 系统，/etc/fstab 中的设备是用 uuid 而不是/dev/sdb1 这样的设备名的，所以得把其中的 uuid 改成新磁盘上相应分区的 uuid</p>

<p>可以先查看目标盘分区的 uuid：</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>ll /dev/disk/by-uuid</span></code></pre></td></tr></table></div></figure>


<p>这个目录里的每个文件都是一个 uuid 到实际设备的映射（软链接的形式）</p>

<p>然后再根据这些映射更新/etc/fstab 中相应设备的 uuid。当然我们也可以通过自定义 udev[2]规则固定设备名称，然后直接在/etc/fstab 中直接填设备名就好了。</p>

<p>2-2) 复制文件系统根目录，注意要排除目标盘 mount 的目录和系统自己 mount 的目录（可以用 mount -l 查看，比如/proc，/sys 这些目录）</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>tar c --exclude=/proc/* --exclude=$EXCLUDE_DIR / | (cd /mnt/sdb2; tar x)</span></code></pre></td></tr></table></div></figure>


<p>3) 安装 boot loader</p>

<p>一开始我们以为直接用 dd 复制源硬盘 MBR 的前 446 字节（启动代码部分）过去就可以了，但启动发现连 grub 菜单都进不去。</p>

<p>其实 grub 启动包含了两个阶段的代码，第一阶段代码是在 MBR 里的，第二阶段在文件系统上，那么 grub 如何从第一阶段跳转到第二阶段呢？它是把第二阶段代码所在的磁盘扇区位置记录在 MBR 中 [1]。而这份代码在每块硬盘上的位置肯定是不一样的，于是 grub 没办法跳转到第二阶段继续执行。</p>

<p>所以我们得重新安装 boot loader：</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>grub-install --root-directory=/mnt/sdb2</span></code></pre></td></tr></table></div></figure>


<p>这里–root-directory 是告诉 grub 说我们的根文件系统是在 sdb2 上而不是源硬盘上，一开始我们没指定就悲剧了。</p>

<p>现在把目标盘装回其他机器，不出意外应该就成功了。</p>

<p>[1] <a title="The GRUB MBR" href="http://mirror.href.com/thestarman/asm/mbr/GRUB.htm">The GRUB MBR</a></p>

<p>[2] <a title="udev" href="http://www.kernel.org/pub/linux/utils/kernel/hotplug/udev.html">udev</a></p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[我们都是意志的奴隶]]></title>
    <link href="http://xoyo.name/2011/01/slave-of-will/"/>
    <updated>2011-01-03T00:00:00+08:00</updated>
    <id>http://xoyo.name/2011/01/slave-of-will</id>
    <content type="html"><![CDATA[<p><a href="http://book.douban.com/subject/1785347/"><img class="alignleft" title="爱与生的苦恼" src="http://img3.douban.com/mpic/s1665393.jpg" alt="爱与生的苦恼" width="143" height="200"></a>《爱与生的苦恼》这本书是叔本华的选辑，安排的九篇短文虽然相对独立，但都是围绕着人生、爱欲与生死这一主题。为什么我们活着这么痛苦？为什么我们会有如此强烈的爱欲？为什么我们如此惧怕死亡？这些都是每一个严肃对待生命思考生命的人所会遇到的问题。而在这本书中你会发现叔本华早已敏锐地将这些疑惑和苦恼暴露出来，并用意志的理论诠释了一套完整的世界观和人生观。很多人说叔本华是一个悲观主义者，因为在他看来，人的一生是悲惨的，而且这种悲惨还会在其他的个体上无限地延续下去。而我在读完这本书之后却有一种释然，知悉这种悲惨这种痛苦的根源之后的释然。</p>

<!--more-->


<p> 叔本华的论述方式很有意思，在他的文章里你看不到严密的逻辑推理，却有着无比丰富而广阔的素材：历史、文艺、宗教、自然现象、生活经验……抛开叔本华的观点，单看行文你都会不得不感慨：这位大叔真有文化！不过我并不接受这种纯粹浪漫主义的论述方式，由于缺乏逻辑的演绎，他的很多观点都有检验，说服力并不强。可能是专业思维习惯影响吧，我更欣赏的是严谨的演绎加上几个浅显的例子这种说理方式。因为类似的原因，我也不是很能接受咱们老祖宗比如庄子那种气势磅礴的行文。当然我也承认，不是什么都能用逻辑来解释的。
在理解叔本华对这些问题的阐述之前，需要先了解叔本华所说的意志。<strong>意志</strong>是世界的内在和根本，我们看到的世界其实质是意志的表象。意志直接客体化为事物的理念（也就是柏拉图所说的理念），叔本华称之为<strong>种族</strong>;并由此间接地表现为事物的现象（柏拉图所说的影子），叔本华称之为<strong>个体</strong>。意志是一种原始的求生本能，它没有终止只有无尽的要求，以使得自身无限地生存。意志超脱于时间，永无生灭。</p>

<p>一、性爱的哲理
恋爱实质上是希望产生新个体的生存意志，它是求生意志的核心，也是求生意志在个体上最完全的表现最明确的形态。这使得性欲成为人类最激烈的一种情欲。这种种族求生意志要远较个体意志强烈，它只关注种族的延续，而并不关心个体的幸福。事实上，个体正是受到意志的控制和折磨，沦为延续种族意志的工具。
有过恋爱经历的人都有这样的经验：在恋爱中，人往往很容易失去本来面目。在热恋中你会变得敏感，会对爱人有无穷无尽的要求和欲望。性欲会让你觉得与心爱之人结合必可得到无限幸福，如果得不到，即感生命的空虚乏味。恋爱的人真的都是疯子。那些殉情的人就是由于种族意志压倒了个人意志，前者得不到满足也不愿在后者下苟活。
在这种求生意志的本能的驱动和支配下，人很容易失去原有的理智。恋爱会让你忽视爱人的不足，情人眼里出西施；也可以让你因为爱慕得不到回应而产生爱恨交织的心理，让你报复性地对恋人冷淡，甚至以对方痛苦为乐。恋爱会使人误以为本来只对种族有价值的事情对个人也有利。素不知，在种族目的达成之后这种幻想随即消失无踪，回想过去除了性满足外其实一无所获。
叔本华对包办婚姻的解释也挺有意思。他认为由激情结合的夫妇，彼此可能有很多不和谐之处；而家长安排的以实利为目的的婚姻是为当事人幸福着想，但却是违背种族的。家长包办婚姻确实是为子女考虑，子女对此也确实十分反感。
最后叔本华总结说，求生意志是种族意志的内在本质，是人类意识的核心，存在于个体之中，即使个体死亡仍得以保存。使个体从痛苦世界解脱只能通过否定意志一途，也即佛教的涅槃。而恋爱则通过生殖将这种痛苦延续下去。</p>

<p>二、漫谈男性性倒错
这章讲男同，叔本华的歧视过于严重，看得我直摇头。他认为男同是种族中残缺和衰弱的个体，他们产生同性恋倾向是由于造化为预防他们的繁衍危害种族而采取的一种间接手段。</p>

<p>三、谈禁欲
前面说过，求生意志关注种族的延续，而并不关心个体的幸福。只有洞察这一个体化原理的人，才能看到世间的一切苦恼，不为生存所桎梏。他们能认识全体并把握本质，不像被利己心所束缚的人只看到自己的幸与不幸。他们对求生意志的现象和这个世界的苦恼产生厌恶，开始否定求生意志。否定求生意志的第一步就是不追求性欲的满足，通过禁欲超越个人生存，进而否定意志的肯定。因为肉体是意志的表现，必会促使意志产生新的活动。为了避免欲望再度煽动意志，我们就需要不断虐待意志：不做想做的事，强迫自己做不想做的事。默认命运所决定的痛苦亦可达到意志的否定。通过某种惨痛的教训，在濒临绝望之际倏然返回自我的人，亦可以认清自己和世界，进而改变自己的所有本质。
一旦达到否定意志的人，必须倾其全力保持这种成果，或寄托于禁欲，或过严苛的生活。彻底否定求生意志的人，虽然外表看既无快乐也无生趣，但心灵则是一片清澄，充满宁静和喜悦。这一点颇有佛教修得正果的意味。
纵观历史，那些名垂青史的人只是“世界的征服者”，他们和他们的历史不过是在说明和肯定无数个体的求生意志，到头来终归枉然。而真正伟大和重要的，是“世界的客服者”，才是真正的圣贤。唯有世界的客服者才能表现意志的自由，因而其言行显得与世格格不入。
基督教主张以最纯粹的爱心及基于自由意志的完全禁欲，来消灭自己的意志。印度人的道德观则完全否定对自己的爱，让人去爱并帮助别人和所有的生物。若想成为真正的圣者，还需抛弃肉欲，与世隔绝和苦行，最后通过自杀基于自由意志死亡。佛教和吠檀多教派都有类似的思想。</p>

<p>四、论女人
叔本华和女同胞们也过不去。他认为女人天生不适于从事精神或肉体上的重大工作，无法承当“人生的债务”，因而造物者特别安排一些苦难的事以求补偿，如分娩、照顾子女、服从丈夫等等。</p>

<p>五、生命的理念
这章谈的是意志与性欲的话题，与第一章有很多交集。
种族超出时间的理念，是一切存在的本质，通过它才能认识个体，谈论存在。意志客观化之后，表现出来的仍是种族意识。个体的生命只不过是借自于种族，一切生命力都是种族力量的迸发。所有个体追求的要事，都与种族有密切关系。
除了性欲其他器官或作用只是直接服务于个体而非种族，因此为了维持种族，性欲冲动常常把其他一切事物搁置一旁。生殖行为是不受认识影响的，是求生意志的集体表现，这一点上人与动物并无区别。</p>

<p>六、素质与遗传
叔本华认为意志是人类的本质，它表现为人的性格、道德；智慧居于其次，它只是附属物。智慧不断地更新和发生变化，给予世代相传的意志新的世界观，让意志表现出新的面貌。这一章用了很大篇幅以各种生活体验、史实、作品来说明：意志遗传自父亲，智慧得自母亲。如果来自父母的素质不能协调，人的性格就会有不调和不稳定的现象。若要改善人类，只能以生殖的方法达成目的，叔本华也是肯定优生优育的。
当然意志的遗传并不是绝对的。骨肉手足之间性格截然相反不乏其例，这是意志在表现它真正的自由。作为物自体本身我们无由去理解这意志的本来面目。</p>

<p>七、人生的空虚与烦恼</p>

<p>1、生命的本质就是苦恼</p>

<p>意志就像重力一样，永远无法获得最后的满足，永无尽期地持续下去。看看我们周围的植物，它们也是重复着开花结种的过程，彼此相互竞争。意志无法称心如意就会产生苦恼，而欲望的满足即为意志达成目的。但世上并没有永恒的满足，我们的努力永无最终目标，苦恼也永无休止。
意志现象越完全，智力越发达，感觉痛苦的程度就越高。意志现象在人类身上达到极点，而天才的人便有最多的苦恼。
一切生命的本质就是苦恼，这是意志内在本质的命运。</p>

<p>2、人生就是欲望和成就之间的不断流转</p>

<p>人类是求生意志最完全的客观化，彻头彻尾是欲求的化身，为了满足推陈出新的苛求而充满忧虑。大多数人为这种生存而不断战斗着，但他们知道即使用尽手段和努力，也在一步步逼近最终的死亡。但如果没有欲望也并不快乐，如若穷困和苦恼稍止，则倦怠也将立刻随之而来，生存本身成为负担，它带给人的祸害和痛苦不亚于贫穷和饥饿。
人生就是欲望和成就之间的不断流转，愿望是痛苦的，而成就和满足令人生腻。所谓的幸福的生活其实就是愿望和痛苦相继产生的状态。如果我们能完全摆脱它们，立于漠不关心的旁观地位，这才是“最纯粹的欢悦”——只有智慧卓越、感受敏锐的人才能有这样的体验。
所以不论如何，痛苦总是无法避免的。痛苦以各种形式在生命各个阶段出现，包括倦怠。一个人若能理解痛苦无可避免，消灭一个痛苦会引入另一个痛苦的道理，他就能获得斯多葛派的恬淡平静，不再为本身的幸福惦念了。
每个人身上固有的痛苦分量是一定的，这个观点很有意思，在生活经验中也能找到许多事实的印证。想象中的大不幸一旦降临实际上并不是那么可怕，而没有大苦恼时一点小烦恼也会使人痛苦不堪。类似的，获得长期所急切等待的幸福后，在刚来到的那一瞬间之后，亦不会感到有何特别的愉快欣慰。所以大部分的苦恼和幸福亦与认识力相同，都是主观的，先天决定的。我们往往只看到痛苦缘于某种外在条件，以为一旦消除必可获得最大的满足，其实这是妄想。由于认识力不足，我们还不时从外界寻找痛苦的原因，孜孜不倦地追求一个接一个的愿望。如果我们能认识到苦恼是生存的本质，带着几分忧郁的气质，对小苦恼小欣喜则可生出蔑视之心。
过度的欢喜和强烈的痛苦经常会在同一个人身上发生，因为两者都以极活泼的精神为前提，都是对未来的主观预想。因此一个人只有看透事物的整体性，才可从痛苦或妄想挣脱出来，获得坚实的平静。</p>

<p>3、消极的幸福和积极的痛苦</p>

<p>我们从未珍视过现在所拥有的幸福或利益，而仅视之为理所当然的事情，这乃是因为它们仅以抑制痛苦来消极地满足我们。当我们失去它时，才渐渐觉出它们的价值，这就是因为缺乏、困苦能积极地直接传达给我们。所以我们回想困苦的过往或目睹他人的痛苦，能促使自己享受现在所拥有的一切，这是一种“把自己的幸福建立在别人的痛苦身上”的自私立场。
艺术也证实了幸福的消极。戏剧中一旦主角达到目标便草草收场，因为继续下去就会发现原来主角原以为无比幸福灿烂的目标是那么稀松平常。诗歌中的自然美虽然是纯粹的幸福，前后都没有苦恼，但它只是人生的一个季节。音乐的旋律经常离开基音，最后又复归于基音，基音是意志满足的表现，持续太长就显得单调，相当于倦怠。
意志的一般现象以至最完全的现象——人类的生命和努力充分显现了幸福的永不满足和意志努力的无目的。人生有三种极端：第一是强烈的感情和意欲，如历史上的伟大人物；第二是纯粹的认识和理念的把握，亦即天才的生活；第三是意志和认识皆昏睡的状态，大多数人终其一生过着空虚而愚蠢的生活。</p>

<p>4、人在苦恼中的挣扎</p>

<p>若从人生经验中体会人生的苦恼本质，会远离哲学本质的普遍性立场。只有以先天性的方法和完全冷静的哲学态度，才能免于疑虑，但通常还是从后天方面较易获得确证：人间是偶然和迷惑的世界。所有的传记都是一部苦难史。一个有思虑而正直的人，当他濒死时一定不希望再度生于此世，反而宁愿选择完全的虚无。
面对生命的痛苦，短促的人生倒是一种幸运。因为人生的烦恼实在是让人绝望：人们常常掩盖苦恼，炫耀富有；越缺乏满足，越希望别人认为他是幸福的人。操纵人烦恼的是人格的本身，是难以克服的客观化意志，任何力量都不能从意志现象产生的苦恼中解放意志。甘于尝受灾难的贤者是因为他们的求生意志已告断绝。乐观主义者的空谈是卑劣的见解，是对人类难以名状的苦恼的嘲弄。</p>

<p>5、人生除了痛苦之外一无所有</p>

<p>我们应从人生连续的迷惘和觉醒的交迭中产生一种信念：没有任何事物值得我们奋斗，一切都是空无，这个世界终必归于破灭，人生是一宗得不偿失的交易。我们从时间流逝中了解到万物也即意志的所有客体的空虚和无常。
我们总是受到愿望的欺蒙，事实上一切的努力和欲望皆为迷误。痛苦才是积极的，我们只有对痛苦才有所感觉；而平安无事时则毫无所觉。我们生存的所谓幸福，是指我们一般所未觉察到的事情，最不能感觉到的事情，也就是最幸福的事情。若满足的时间太长，所带来的则是如何排遣或如何满足其他虚荣心的问题。享乐愈增，则相对增加了对痛苦的感受性。
人类所遭遇的灾祸的最大根源在于人类本身的嫉妒心，“人便是吃人的狼”。死亡反倒是苦恼人生的慰藉。这样看起来，世界似乎不宜存在，但世界本身无法解释是否为自身的利益而存在的命题。世界存在的理由并没有明显的根据，它只是由物自体盲目的求生意志以现象的形式表现。
生存让我们得不偿失。与其说人类的生命是一种赠物，莫若说是一种负债契约。我们要把人类的生存当做是一种惩罚、一种赎罪的行为，这样才能正确地观察世相。新约在这点与之契合。
上苍赋予我们存续的条件并不完备，这个世界是“可能有的世界之最坏者”。这个世界就是烦恼痛苦的生物互相吞食以图苟延残喘的场所，到了人类这种痛苦达到最高峰，生活中除了悲剧和闹剧一无所有，即使世界万物多么井井有条也无济于事。（休谟的观点）而乐观主义其实就是世界真正的创造者——求生意志的自我陶醉。把苦恼和死亡当做人生的目的才是正当的。（伏尔泰的观点）乐观主义是对人类灾难的蒙蔽和嘲弄。
最后表扬了伏尔泰、拜伦和他类似的思想，还不忘批了下卢梭、莱布尼茨的乐观主义。同时在历代伟人和民族传统习俗中列举了许多反乐观主义的证据，他们都看出这个世界的悲惨事实。</p>

<p>八、求生意志的肯定
个体可抑制冲动，改变意志方向，消灭意志，获得个体生存的安乐，但这极为罕见。一般习见的是，最强烈的冲动也即性欲一旦达成，必定联结着新生命的诞生，随之而来的便是无数的负荷和困苦。求生意志的肯定造成了新个体的产生也即我们的生存，让我们相继承受生命所有的烦恼。肯定求生意志最纯粹的表现就在于互相爱慕的男女眼神中，这种幻想把我们诱进人生的冲动，使得苦恼接踵而来。
这种意志所肯定、造成人类原因的生殖行为是可憎的。人类对生殖行为所产生的羞耻之念也波及到性器官。由此看出，不独行为，人类的身体也属于意志现象，是它的客观化。
世界的空间时间和多样的形态无非是意志的现象，而意志的焦点则是生殖行为，这种行为就是世界之内在本质的最明显表现。性欲的满足是意志的焦点和最高表现。
只有人类才有避免求生意志的肯定的反省能力。动物只有现在的意识，人类有现在、过去和未来的概念，但还未能了解它们的真义。然而，否定意志通常只是穿着神话的外衣，表现于意识而已——意志并未具备可达致较高度客观化的证据，盖因此时已是意志到达其转机的时候了。（这句不理解）</p>

<p>九、谈死亡</p>

<p>1、我们没必要恐惧死亡</p>

<p>我们实在没有理由恐惧死亡。试想，你的生前有无限的时间，死后亦有无限的时间，生前死后并无差别。既然我们从不惧怕生前的“无”，为什么要对死后的“无”感到恐惧呢？更何况现在的生活并不美好，人的一生都充满苦难。而我们的意识在生命结束即告停止，而没有意识也就没有灾祸可言。再者，寿终正寝的死亡并不痛苦，人在临时的刹那是安详的。所以，运用经验和理智，我们并不畏惧死亡，事实上非存在胜于存在。退一步说，个体如果能无限延伸，人反而会感到过分单调而腻烦。
那为什么我们潜意识里还是那么畏惧死亡呢？那是因为我们对死亡的恐惧来自于求生意志，它将本身与现象视为同一，误以为死亡是自己的终结，因而全力抵抗。
婆罗门教和佛教认为一切生灭与认识的本体无关，这比起西方的人从无到有的解释要高明得多。因为既然没有“生”，“死”又从何谈起？</p>

<p>2、我们的真正本质是不灭的</p>

<p>虽然我们看到许许多多的个体生生死死，但是种族本身并不受影响。自然对个体生命漠不关心，因为他们虽毁灭仍可安全回到自然怀抱，这种破灭丝毫不影响其本质。
物质是物自体（意志）的直接反映，以时间不灭性的姿态再现意志真正的永恒性。虽然看起来有机物生死无常，无机物却长久存续，但这种不断生灭只是相对的，绝不会波及事物的根底，只是我们的智慧有限看不出本质而已。我们只有直接从自然的理解所产生的信念才能理解深刻的事物本质，免除死亡的恐惧。
试想，现在家里养的猫，和三百年前祖辈养的猫有什么本质区别？已消失的和代之而起的生命，事实上本质完全相同。昆虫的秋死春生和人类的就寝起床一样，个体死亡之于种族就像是睡眠之于个人而已，个体的生灭并不影响事物/种族发展的本质。
我们的智慧是为理解动机而生，而不是为了理解事物的本质。由于受到时间的限制，我们并不能理解我们的本质永存于超越时间的“现在”中。
从理智上看，死亡这种经验性的“无”也并不是绝对性的“无”。比如双亲的性质传承到了子女身上。</p>

<p>3、理念（种族）的永恒性表现于个体的有限性之中</p>

<p>如果我们能观察人类的全盘经过，我们将看到出生和死亡只是种族的不间断摆动，两者轮流交替，而不是陆续从“无”产生新个体，然后归之于“无”。柏拉图看出理念（种族）才是真正的存在，死去的个体都是它的影子。物自体只有和时间结合，才能显示出来它的无关乎生灭。时间其实是永恒性的影像。
造化加诸个体只是尽量节约（器官退化，衰老），而加诸种族则是大量浪费（强大的繁殖能力）。客观的种族表现着不灭，但其主观只是生物的自我意识而已。一切客观性的东西（即外在的存续）不外是主观性（即内在）的不灭表现。主观性是本质，客观性是现象。</p>

<p>4、没有生也就没有死</p>

<p>出生的概念其实本质上已包含了死亡。我们只要不认为本身是起源，就会了解自己是不灭的。婆罗门教和佛教也有类似的观点。
试想，在我们“实存”的过去，既已经过无限的时间，发生无限的变化，在我们的背后，亦横亘着无限的时间，以此推测，我们不能不说，我们实是生存于所有的时间中——过去，现在和未来。因为，若“时间”的力量能引导我们的“实存”走向破灭，我们应早已破灭。</p>

<p>5、死去的只是个人意识，意志不灭</p>

<p>我们必须分清个人意识和意志，才能不介意死亡问题。我们所知的自己，只有表现于外在直观中的个体性而已。如果对此了解透彻的话，反而会对这副臭皮囊付之以冷笑，甚至舍弃。这和佛学中破处我执的教导吻合。
人生如梦，当人的全部组织消灭时，梦醒了，人还存在着。个人意识随着死亡而终止，意识所以热爱永恒生命是因为对自我的执着或对世界的怜悯。对世界的怜悯的人虽然很多出发点是希望在死后获得尊敬，但是正是这种做法才使得人类的仁爱精神得以传承。
“停止”、“永存”等概念是以时间为前提才能通用的概念，而时间只是一种认识形式，因此这些概念无关事物的本质。一切经验的认识和卷入生灭的物体都只是现象而已，它们并非物自体。人类一切形上的、不灭的、永恒的东西皆存在于意志之中。对生存的本质（意志）而言，种族的不灭，即为个体不灭的象征，个体与种族之间并无任何区别，表象世界的法则并不能应用于物自体（意志）世界。</p>

<p>6、意志为个体的表象所迷惑</p>

<p>前面已经说明，我们对死亡的恐惧来自于没有认识力的盲目的意志。意志之所以恐惧死亡，是因为在肉体看来，意志是表现于个体的现象。有机体也就是我们的肉体，可以解释为意志与智慧的结合。虽然智慧处于意志的对立和旁观者地位，但是智慧认识的只是某段时间之中的片段的经验的意志，它并不能理解意志的本质。</p>

<p>7、死亡的意义</p>

<p>死亡就是意志挣脱原有的羁绊和重获自由的时候，它使得意志获得新的智慧和意识。我们的智慧因受时间形式的限制，并不能了解物自体的问题，因而宗教只能用“轮回”来解释，其实应该是再生更为恰当。轮回的信仰存在于世界各个角落，是基于人类自然的信念而产生。
意志在个体损失后将继续存在与其他个体，因而善良的人“自他”区别最小，也不会把“他人”当作绝对非我的人。</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[20101010101010]]></title>
    <link href="http://xoyo.name/2010/10/20101010101010/"/>
    <updated>2010-10-09T00:00:00+08:00</updated>
    <id>http://xoyo.name/2010/10/20101010101010</id>
    <content type="html"><![CDATA[<p>没想到还有人记得十几年前四个黄毛小屁孩在龙湖沟畔踢完球一时性起的约定，2010 年 10 月 10 日早上 10 点 10 分 10 秒，在龙湖沟金砂东路口东侧草坪的榕树下再相会。大家互相想象对方 10 年后的模样，YY 某某人的女友有多漂亮。</p>

<p>如今四人四地，汕头上海，广州杭州，也只能在手机里通通气。</p>

<p>不过想到当时那份纯净无暇的心情，还是挺感动的。汕头的兄弟说他明天还是会去的，儿时的梦总是能打动人心啊。</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[骑马]]></title>
    <link href="http://xoyo.name/2010/07/riding/"/>
    <updated>2010-07-11T00:00:00+08:00</updated>
    <id>http://xoyo.name/2010/07/riding</id>
    <content type="html"><![CDATA[<p>端午的那个周末，19 号和 zr 跑去骑马了。我是第一次骑，带教教的是英式骑法，就是直挺挺的很绅士的那种。戴着圆顶黑头盔，套上修长的护腿，看来倒还真像那么回事。<!--more-->原来没准备骑的，所以穿的裤子很紧身，差点蹬不上马，不过把马镫放低些还是上去了。英式骑法要求你双腿夹紧马身不动，手握紧马缰也不能乱动，挺直腰板，昂首平视前方。随着马的奔跑要练习“打浪”，随着马奔跑的节奏提起臀部，再放下，再提，再放，如此往复，全身其他部位都必须保持不动。这个动作挺吃力的，还好骑车骑得多，用到的肌肉群差不多，还不算太累。就是头被颠簸的马背震得裂痛无比，骑了一个小时就受不了了。不过我不大习惯这种风度翩翩的骑法，因为以前看电视里那种骑马打仗的骑士或者草原上纵马奔腾的牧民，都是前倾着身子随着马的奔跑有节奏得策动马缰，身体也随着马背起伏——还是东方的圡骑法比较豪爽大气不憋屈。
下马之后又在马场那边呆了会，有幸看到各种师傅在喂马、削马蹄（相当于剪指甲）、给马洗澡、打点滴。给老马打点滴真是技术活，马的皮厚，好不容易才找出来的静脉，稍不留神就又沉下去了，折腾了 10 来分钟才把针头扎准了血管。马的体积大，血压高，血流的速度比人快多了，几瓶点滴没一会就打完。下午的时候马场的人渐渐多了些，而且男女老少都有的，还有很有气质的 MM 和 loli。看着她们打浪的动作多少觉得有点联想到 ML 的姿势了。中间还发生了个小意外，有匹马的马尾不小心带倒了边上一块木牌，紧随其后的是小 loli 的马，被这突然倒下的木牌吓了一跳，一个背摔直接把小 loli 从马背上滚到马前方。万幸的是小 loli 很快就爬起来了，拍拍屁股，表情非常轻松。还好摔在马前，要是摔在马屁股后，万一那马一个凌空后蹬，或者往地上补上一脚，那就悲剧了。想起《飘》里郝思嘉的女儿就是在马背在摔死的，多可爱的一枚小 loli 哎。</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[20100616 车协端午苏州单日往返]]></title>
    <link href="http://xoyo.name/2010/07/20100616-cycling-team-suzhou/"/>
    <updated>2010-07-11T00:00:00+08:00</updated>
    <id>http://xoyo.name/2010/07/20100616-cycling-team-suzhou</id>
    <content type="html"><![CDATA[<p>端午原本来要跟枫林一个车友走小长线到合肥的，可惜两人时间不大一致，而且端午第一天要帮阿尼 PP 搬家，就没成行，正好跟了车协的苏州往返。<!--more-->
因为 16 号一大早就要在本部毛像出发，15 号晚上跑到彦哲那住了一夜，那边文娱氛围浓厚，其乐融融。
出发前，oyoung 发现我的坐管是“弯”的！原来是坐管太短，一直都被我调到最低线以下 4、5 公分，调到极限位置实在是太矮，导致之后路上脚又比平时要酸。我还在纠结我的坐垫老是要顶到后面的问题，大家都说那肯定是没拧紧，Merkava 帮我又拧了拧。
这次出行有 15 人，1 个 MM，拗造型合影后旋即出发。一开始还在想那 MM 还真厉害跟一群大男人骑那么远，不知等下跟不跟得上大队伍，没想到从一开始她就一直处于领骑左右的位置，一直保持到回来……还在中山北二路上的时候，就有人爆胎了，果断停下跟在旁边学习换胎技术。其实换胎挺简单的，先卸下轮子，用一根撬胎棒撬开一角之后，再用另一根棒沿着撬开那角顶出一小段弧线出来，然后两根棒一起用力就把内胎取出来了。装备胎的时候先安气嘴，然后再整条塞进去，打气。很快就换好了，破胎留着回去补。
补完胎之后奋力直追大队伍，脚开始有点感觉了。一路速度很快，一直保持 25+吧。这次路线比较奇怪，在嘉定绕来绕去。到了嘉定后队伍开始散开，后队渐渐跟不上前队，中间零星散着各个散骑，我也没跟上大队伍散了好几次，明显感到个人骑行要比队伍里费力许多。过了嘉定，那 MM 的车也爆了，这次自知体力不济，也不敢凑热闹赶紧跟上大队伍。快到金鸡湖大道的时候大伙在路边消灭了好几个西瓜哈密瓜。后面又一次停车等人的时候，看我又在那折腾坐垫，好心的雄爷帮我把坐垫彻底拧紧，这下我想拧松都拧不开了。
中午在一家叫做阿康酒家的吃饭，饭饱喝足之后，睡到了一天。店家态度很好，还专门开了个包厢给我们睡觉。不过躺没一会那边喊着要跟苏州大学的车友会合游苏大，大家兴致又来了。苏大校园是新校套老校的结构，保留着东吴大学旧址，百年的老树和与之同龄的建筑都保存完好，我们就那么横在大树荫下幸福地吃着西瓜。等到 3 点多要上路的时候，才发现西瓜吃得实在有点撑了。
回程大家由于体力开始下滑，都非常自觉地保持队形，因为一旦脱离队伍将独立面临强大无比的风阻。中间发现骑过头，那次休整之后一下子感觉就泄了气，没一会队伍就散开了。有两次掉队就骑得非常吃力，用的力气比跟骑的时候大得多，但速度却大打折扣。咬牙切齿地撑到快到安亭，顺利地与已经跑了 200km 的 whitemonkey 会合，于是改由 whitemonkey 领骑，速度瞬间又上来了，直带到安亭肯德基。
不知悔改的我再次吃撑……而且还没吃完大家就准备出发了，赶紧把吃了一半的嫩牛五方包（非常难吃，以后打死也不点这个）好塞进包里。没消化好骑车对我来说真是很痛苦的一件事，不给力啊。不过 whitemonkey 也很照顾，一直控制在和谐的 24 巡航速度。好不容易撑到市区，与压队作别，只身前往阿尼家拿钥匙（上次搬家的时候落在他家里了，晚上阿满又正好不在寝室）。因为没消化好，胃开始泛酸，不敢喝冷饮料，那种感觉很难过。还好事先打个电话让 PP 帮忙准备点热温水，坐在楼道口边喝水暖胃，边和阿尼聊了会今天的坎坷经历。
借着温水的力道，从静安延北京路一直骑到外滩，剩下的路就非常熟悉了，走了无数遍。在万籁寂静的龙阳路上，我又听到刹车片搭在车轮上的吱吱声，不知道今天又走了多少公里刹车路……</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[20100605 杭州单日]]></title>
    <link href="http://xoyo.name/2010/07/20100605-hanzhou/"/>
    <updated>2010-07-11T00:00:00+08:00</updated>
    <id>http://xoyo.name/2010/07/20100605-hanzhou</id>
    <content type="html"><![CDATA[<p>6.5 周六
骑行杭州，走 01 省道，6 点 1 刻出发。
清晨的阳光很舒服，但感觉骑的不是很舒适，也说不上哪里不对。骑到沪南公路才刚过 A20 就觉得脚有点酸，而且酸的是大腿下侧肌肉和韧带的部位，很奇怪，同时感觉屁股一直都坐在坐垫前侧，要完全坐脚绷得很紧。于是赶紧下车检查，发现上次换上新坐垫之后没固定紧，被我顶到最靠后的位置，导致脚踩踏姿势严重变形。<!--more-->一番整顿之后重新上路，没过多久到了沪南公路那个很大的弯角，知道已经错过原先既定路线，赶紧停下找个环卫大妈问路。大妈不大会讲普通话，还好彼此都大概能听得懂，不过她也不大清楚浦星公路要怎么走。GPS 很适时地搜不到信号，凭方向感果断右转向东。穿过 6、7 公里不知名的破路（印象里很长一段是沈杜公路）终于转到浦星公路。浦星公路路况非常好，堪比华夏东路，不过再往南这段路边都是田地，难怪大妈不知道浦星公路在哪。在路口等红灯的时候，遇上一队从南边杀过来的自行车队，小白菜队服，公路山地车都有，拉风地在我身前飘过。我也是全身装备，头盔墨镜手套长袖长裤，队伍里的 MM 纷纷与我互行注目礼。他们应该出发得挺早，因为浦星公路下去就是金山了，那么多人不像是从金山出来的吧……
中午时分穿过金山，到达 01 省道 0 公里处，也是上海浙江界，顺便解决午饭，这时才骑了 80 公里。午饭吃得很饱，但为了赶时间坐没一会还是很快又出发了。上车没一会我就后悔了，太阳毒辣不说，肚子明显消化不好，全身还是没什么力气，于是开始了一段痛苦的自虐行。平湖段的省道边公车站不少，但大中午的基本没人在等车，也几乎没看到公车经过。于是这些车站就成了绝佳的休息点，骑累了就在阴凉的长凳上躺上一觉。可惜这样的便宜并不长久，进了海盐界完全就是另外一种路况。非机动车道的沙石特别多，骑起来又颠簸又吃力，机动车道虽然路况好些但是没有树荫酷日晒得头晕，为了避免中暑还是选择艰难地在砂石路前行。海盐就没平湖那么好有那么多公车站了，路边能歇脚的只有一个个里程碑石。而且不知道为什么今天脚特别特别酸，后来才知道原来这时候车座早就又被我顶错位了，而且更要命的是刹车片可能在这时就已经搭在车轮上，所以骑起来特别费劲。可是当时就一心想着怎么努力到达目的地，完全没注意到这些细节。到了下半午才到达海宁界，海宁明显比平湖海盐有钱，公车站修得大气多了，不过好多玻璃被人家砸坏。实在是太累，没几公里就歇下来看下电子书上下 Q 缓解下情绪。
就这么踉踉跄跄的直到天黑才到杭州郊区。八、九点到达市区，正好接到永锋电话，谈了下校友网和汕头那边交接的事。接着 zzm 电话/短信也来了，好像是问二级域名的事，只得很囧地说我周日晚再回去看看。市区到处在修路，似乎是在造轻轨，沿着 GPS 的路线直奔预定的酒店。一路上上下下左拐弯转，穿越各种羊肠小径，越骑越奇怪，而却关键是怎么方向有点反了？！一看 GPS，靠它给我安排了一条优美的麻花路线！要照着继续绕还不绕死我，于是果断掉头，最后凭方向感总算找到靠谱的大路。来到酒店已经是 10 点了，兴冲冲地推车入门，被保安果断拦下，硬是不让我把它作为行李带上房间，只得停在它们的仓库里。
中午的消化不是很好，加上路上一直靠奶酪和巧克力补充，晚上肚子也没觉得特别饿，收洗好了就直接躺了睡倒。</p>

<p>6.6 周日
昨晚睡得很香。早上起来先是约了潘旸，小学的好友，不过人家今天要陪客户无法。接着联系高三同班的大鸟博士，正好人家周末没事，欣然相约骑游西湖，顺便让他帮弄了张晚上返沪的火车票。四年没见大家都还是没咋变样，大鸟依然肌肉男，我这万年瘦人就不说什么了。白天的西湖人那个多啊，路上讲粤语的不比普通话的少。一路详谈甚欢，没一会儿就从苏堤绕了西半湖。路上瞥见湖边一个日月光华的牌坊，有点唐突，很是莫名，估计在这里拍照的都是校友吧。
中午来到大鸟的博士之家寝室，浙大的寝室比复旦大气多了，四人的寝室中间有 10 多平方的空地。外面通道和厕所也是宽敞明亮，人口密度比这边低上一半不止。因为晚上带车上火车得拆轮子，之前没拆过，就趁机先演练了一下。感谢车版 zhumao 同学昨天中午电话里的悉心指导，现在心里也算是有底，拆车装车还算顺利。
下午跟着大鸟去听他们电气系的博士答辩，正好避暑。去的时候第一个博士已经开讲一会了，讲的是分布式电网。第二个博士做的是电网监控信息的数据压缩，用的是有损压缩算法，根据需要对原数据做特征提取。像他提到的小波分析和傅里叶变换这些都是信号分析的基本算法，大牛那边做的模拟器上的程序周期分析也会用到。感觉做的和电关系不会太大。最后是大鸟的师兄，搞电网监控的，讲得很技术，加上 PPT 上密密麻麻的大段文字，直接催眠。大鸟说他们系的实验室基本都是项目导向的，他们做的这些都是实际的项目。不得不佩服的是他们确实做得很踏实，这些都是现在在各级电网里实际上线运行着的系统，不像搞计算机的大家都知道学校里做出来的项目是什么质量呵。当然计算机也有它的难处，搞计算机的不像电力系统，给水系统这些，它没有一个固定的系统和体系可供研究，因而实际的需求也就千差万别，很难按照一定的范式去指导设计和开发。扯远了，话说听完答辩回到大鸟实验室，正好遇上他本科的同学从瑞典放假回来。瑞典那边公立大学是免学费的，不过好像从今年开始非欧盟国家就要收费了，他正好赶上末班车。那边每学期课很少，就 1、2 门，但是课业非常繁重，基本每天都是在拼命赶各种作业。这样学得非常踏实，不像我们以前那样每天疲于应付各种科目，到头来学到的只是浅尝辄止和烦躁。
晚饭在食堂里解决，浙大的食堂再次让我叹为观止，希望每个复旦食堂的管理层能组织前往参观学习，感受一个优秀大学食堂所应有的气质和实惠。饭后在大鸟的寝室看他室友看新三国，其实拍的还不错，就是完全按照原来的主线走没什么意思。试试从曹操或者孙权的角度叙事会更有新意，不过这样就得完全重写剧本了，三国演义本身就是很好的剧本，各种矛盾冲突引人入胜，谁也不会想去写第二本。消化的差不多之后，大鸟从隔壁弄了辆捷安特的 ATX740，决定去爬山绕湖。因为脚还没恢复，上山非常艰难，腰特别酸。不过这些艰辛在开始下山那一刻就立刻被滑行的兴奋冲得烟飞云散。迎面的行风，飞转的车轮，两旁快速掠过的山体，我们俩都很久没这么爽过了，开心。下到山下就是西湖了，晚上的西湖特别安静和清凉，人也很少。在湖边享受了一会清净，又乘兴绕了东半湖，已经快 9 点了于是直奔火车站，正好准点上车。
动车上单车即使拆掉前后轮，体积还是很大，几乎占了整个出口的过道，好在这车中间只在海宁停，也没碍到太多人。后来听 zhumao 说才知道我原来忘了他说的要放在那个不开门的车厢接驳处。到了上海就一个劲地往回飚，到了在龙阳路已经很累速度也降了下来。不知什么时候突然从旁边草丛窜出两只黑狗，边朝着我叫边追上来，我那时还真被吓到了，因为一路上一个人都没有一直很安静的。眼看着那狗差点就扑上来了，赶紧几个急加速才把速度提了上来逃离这是非之地。后来在龙东大道的高架上也被下面的狗吠了几声，它们难道就没见过这么晚骑车的吗，一只只都那么大惊小怪的。
回到寝室才发现坐垫又顶到后面，刹车片又搭到车轮上，无奈……</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[碧油鸡]]></title>
    <link href="http://xoyo.name/2010/05/bug-imagine/"/>
    <updated>2010-05-24T00:00:00+08:00</updated>
    <id>http://xoyo.name/2010/05/bug-imagine</id>
    <content type="html"><![CDATA[<p>你说 / 在我面前 / 一切美好</p>

<p>可是 / 我看你时 / 世界灰暗</p>

<!--more-->


<p><img class="alignnone" title="碧油鸡 bug" src="http://i781.photobucket.com/albums/yy94/xoyowade/1237384625.jpg" alt="碧油鸡 bug"></p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[小黑昨突破1000里程]]></title>
    <link href="http://xoyo.name/2010/05/break-1000km/"/>
    <updated>2010-05-16T00:00:00+08:00</updated>
    <id>http://xoyo.name/2010/05/break-1000km</id>
    <content type="html"><![CDATA[<p>2010 年 3 月 7 日，肖之宣布接受起点报价，小黑以 1,500 人民币身价成功转会肖之联队。截止 5 月 15 日，小黑行驶里程数已突破 1,000 公里，轮迹遍布上海中心城区、各大郊区以及苏州周庄等周边睦邻友好合作城镇。骑行时间累计已达 55 小时，雄踞肖之坐骑榜榜首！<!--more-->特别值得一提的是，这两个月来小黑一直勤勤恳恳，任劳任怨，并超额完成上级下达的交通安全指标，创造了一千公里零爆胎零事故这一肖之骑行史上的奇迹，为肖之的和谐生活做出了不可磨灭的贡献！
<img src="http://i781.photobucket.com/albums/yy94/xoyowade/IMG_1814.jpg" alt=""></p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[20100417周庄同里]]></title>
    <link href="http://xoyo.name/2010/04/20100417-zhouzhuang-tongli/"/>
    <updated>2010-04-28T00:00:00+08:00</updated>
    <id>http://xoyo.name/2010/04/20100417-zhouzhuang-tongli</id>
    <content type="html"><![CDATA[<p>上周末到周庄附近转了一趟，本想绕淀山湖环行一周，可惜中途走错个岔路结果原路返回，以后不确定路还是老老实实请教 GPS 吧。早 6:15 出发，晚 00:30 回来，东南风 4-5 级，回程悲剧。全程<a href="http://maps.google.com/maps/ms?ie=UTF8&hl=en&msa=0&msid=117260912477249715944.000484ac48b813c40c8b4&z=10">236 公里</a>。<!--more--></p>

<p>早上无风，临近中午时东南风渐强，12 点多就到达周庄。现在越来越反感一切人造的景区，尤其是在看到海宝的时候我忍不住笑了。
<img src="http://i781.photobucket.com/albums/yy94/xoyowade/100417ZhouZhuang_Tongli/IMG_1764.jpg" alt=""></p>

<p>记得冯贤亮老师课上曾经讲过，江南水乡凡是挂着红灯笼的都是被开发过的地方。课后我每次有机会经过这些地方都会特别留意，果真如此。很明显，周庄景区不是我想要去的地方，填饱肚子之后就直接绕进附近的村子里，悠闲地穿梭于田园之间。</p>

<p>某户人家的后院，恬静的午后连花草都显得懒洋洋的，依稀可以听见远处小孩们的嬉戏声。周庄人民很有米，村里平房砖楼并立，很有乡村的气息却丝毫不显破落。
<img src="http://i781.photobucket.com/albums/yy94/xoyowade/100417ZhouZhuang_Tongli/IMG_1767.jpg" alt=""></p>

<p>很喜欢像这样两旁有笔挺的苍天大树荫蔽的小路，即便是本部的日月大道两旁的法国梧桐也能让我心情舒畅，在南方（广东人定义里的南方）是见不到这样的景色的。话说这些是白杨树吧？@@
<img src="http://i781.photobucket.com/albums/yy94/xoyowade/100417ZhouZhuang_Tongli/IMG_1783.jpg" alt=""></p>

<p>砖楼主人留下的旧屋子
<img src="http://i781.photobucket.com/albums/yy94/xoyowade/100417ZhouZhuang_Tongli/IMG_1787.jpg" alt=""></p>

<p>稻草屋冬天应该很暖和吧，如果这真的是稻草屋的话。
<img src="http://i781.photobucket.com/albums/yy94/xoyowade/100417ZhouZhuang_Tongli/IMG_1787.jpg" alt=""></p>

<p>午后的村庄真的很安静，车轮碾着沙石小径咯吱咯吱的响，咯咯咯的鸡鸭声很有小时在农村的感觉。我用手机记录了这些声音。
<img src="http://i781.photobucket.com/albums/yy94/xoyowade/100417ZhouZhuang_Tongli/IMG_1788.jpg" alt=""></p>

<p>耶稣威武。车子飞出十来米开外急刹车掉头拍照留念。
<img src="http://i781.photobucket.com/albums/yy94/xoyowade/100417ZhouZhuang_Tongli/IMG_1796.jpg" alt=""></p>

<p>绕着周庄游荡，发现通往同里的路牌，想想反正也不远，就顺道拜访同里古镇。四年之间没感觉什么变化，人还是好多，门票还是很贵。看，红灯笼！
<img src="http://i781.photobucket.com/albums/yy94/xoyowade/100417ZhouZhuang_Tongli/IMG_1807.jpg" alt=""></p>

<p>回程一路顶着四五级大风，很累很累，躺在路边草坪上休息
<img src="http://i781.photobucket.com/albums/yy94/xoyowade/100417ZhouZhuang_Tongli/IMG_1812.jpg" alt=""></p>

<p>你也累了吗
<img src="http://i781.photobucket.com/albums/yy94/xoyowade/100417ZhouZhuang_Tongli/IMG_1813.jpg" alt=""></p>

<p>后来在北青公路东段遇到一个刚从苏州回来的上海车友，原来他也是新手，这次是第一次长距离骑行。一路同行，他体力很好一路顶风猛冲，受着鼓舞我似乎也回了劲，不过后来实在是筋疲力尽就让他先回去了。咬咬牙，再次凭借强大的生存意志一个人捱回张江。</p>

<p>这次骑行感觉体力明显优于上次苏州骑行，中途补给、运动节奏、踏频车速都一直在有意识地调整。只是四五级逆风实在可怕，以后遇上五级以上劲风要慎重。另外晚饭吃得太晚太饱，没怎么休息就上路了，加上衣服单薄胃部受凉，一路明显感到消化不良，不敢喝冷水带的火腿肠也不敢吃，只能靠着仅存的 1/3 片巧克力支撑。晚饭是傍晚 6 点多在商塌解决的，店老板的女儿很可爱，我说什么她都会很配合地说：好<sup>^</sup></p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[20100327苏州往返]]></title>
    <link href="http://xoyo.name/2010/04/20100327-suzhou/"/>
    <updated>2010-04-01T00:00:00+08:00</updated>
    <id>http://xoyo.name/2010/04/20100327-suzhou</id>
    <content type="html"><![CDATA[<p>我骨子里果然还是那么冲动。周五傍晚突然意识到明天就是周末，想到自己上周 160km 之后其实还是有体力的，这周就挑战下更长距离吧，苏州来回大概是 200km。那时比较晚了不大方便找人了，于是决定周六单骑走苏州。<!--more--></p>

<p>当天晚上大概将近 12 点才回寝室，洗个澡磨蹭下就快两点准备睡觉了，也没来得及仔细研究前人攻略和路线。不过听浩斌说苏州很轻松的，也就没怎么在意。</p>

<p>周六早上 6 点多起来，快 7 点准备出发的时候发现码表又不走了！折腾了好长时间还没弄好于是放弃，出门已经是 7：30，连巧克力干粮什么的也没来得及准备，播下了悲剧的种子。</p>

<p>7：30 出门导致的直接后果是路上人车已经很多，8：30 才刚到东昌路渡口。令人欣慰的是在船上把码表折腾好，晕死原来是我之前不小心把显示屏碰歪。</p>

<p>去程走 G312 国道，中午在昆山江桥镇吃包子。这一天体力明显不在状态，离苏州还有 20 公里的时候已经开始觉得骑不动了，靠意志把最后一段路完成。</p>

<p>14：30 到达苏州市区，在拙政园观前街苏州大学四处转悠。和 4 年前一样，还是很喜欢苏州这座园林式的城市。
<img src="http://i781.photobucket.com/albums/yy94/xoyowade/100327Suzhou/DSCF1359.jpg" alt=""></p>

<p>观前街啃了个鸡排，晚饭在苏大前某快餐店解决，回程走 S343 省道</p>

<p>17：30 苏州市区出发，屁股开始无情地宣泄着它的不满，体力殆尽。</p>

<p>19：44 在“千灯镇——伟大的思想家顾炎武的故乡”的路边草坪小歇。夜色下的小黑颇为动人。
<img src="http://i781.photobucket.com/albums/yy94/xoyowade/100327Suzhou/DSCF1365.jpg" alt=""></p>

<p>21：30 进入青浦。意志在遥遥无尽的青浦公路上一点一点消磨殆尽，求生欲望支撑着我的前行。</p>

<p>22：20 标志性时刻！！到达虹桥立交！！！立交高架，出租车，飞机……这一切让我平生第一次感到城市原来如此亲切和美好，不再是冷漠和束缚。</p>

<p>长宁区吃了点烧烤暖了身子继续上路，再一次后悔没带巧克力和干粮</p>

<p>01：20 终于来到寝室门下。240 公里，历时 18 小时。</p>

<p>详见<a href="http://maps.google.com/maps/ms?ie=UTF8&hl=en&msa=0&msid=117260912477249715944.000482f25039003566db7&ll=31.248617,121.133194&spn=0.326388,0.441513&z=11&iwloc=0004831aaa0d6fb7a9de3">路线图</a>。</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[20100320 160km~]]></title>
    <link href="http://xoyo.name/2010/03/20100320-160km-pudong-air-port-and-fudan/"/>
    <updated>2010-03-22T00:00:00+08:00</updated>
    <id>http://xoyo.name/2010/03/20100320-160km-pudong-air-port-and-fudan</id>
    <content type="html"><![CDATA[<p>7:00 - 20:10，途径三甲港，浦东机场，上南，莘庄，复旦四校区&amp;五角场监狱@@。160km。</p>

<p>没时间写口水游记了，放几张图吧。详情见<a href="http://maps.google.com/maps/ms?ie=UTF8&hl=en&msa=0&msid=117260912477249715944.000482515ab29c37b60ab&ll=31.230417,121.91391&spn=0.772677,1.454315&z=10">路线图</a>。<!--more--></p>

<p>机场高架，水里还有鱼哦
<img src="http://i781.photobucket.com/albums/yy94/xoyowade/100320AirPort_XinZhuang_Fudan4Compas/IMG_1585.jpg" alt=""></p>

<p>在枫林远远望见一个可爱小 loli 在颜大爷旁边摆各种 pose，后来看照片才知道她是来做眼科手术的，bless~
<img src="http://i781.photobucket.com/albums/yy94/xoyowade/100320AirPort_XinZhuang_Fudan4Compas/IMG_1597.jpg" alt=""></p>

<p>火车站，人行天桥只有台阶，貌似手腕就是在这里扛车上去时扭伤了，今天还疼
<img src="http://i781.photobucket.com/albums/yy94/xoyowade/100320AirPort_XinZhuang_Fudan4Compas/IMG_1600.jpg" alt=""></p>

<p>傍晚在财大啃包子，有只流浪猫一直对着我的晚餐猫视眈眈。我放左边她就跟着跳到左边，吓她一下把袋子挪到右边她又跟着凑过来。看她挺可怜的肯定是饿坏了才这么不讲理，分了些包子给她。小猫一边跟我共进晚餐一边在脚边蹭来蹭去哈，反正今天又溅了一身泥，还不知道谁比谁脏，就让她蹭吧
<img src="http://i781.photobucket.com/albums/yy94/xoyowade/100320AirPort_XinZhuang_Fudan4Compas/IMG_1616.jpg" alt=""></p>

<p>小猫吃饱之后就一直乖乖的坐在我车旁边，等到我准备启程了才跑开，这是只有教养的流浪猫~
<img src="http://i781.photobucket.com/albums/yy94/xoyowade/100320AirPort_XinZhuang_Fudan4Compas/IMG_1618.jpg" alt=""></p>

<p>骑了一天其实体力还 OK，就是屁股疼死了，看来跑长途骑行服果然是必需的啊</p>
]]></content>
  </entry>
  
</feed>

