<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_Neil Chen's Blog</title><subtitle type="text"/><id>http://feed.cnblogs.com/blog/u/9493/rss</id><updated>2011-12-30T17:05:21Z</updated><author><name>木野狐(Neil Chen)</name><uri>http://www.cnblogs.com/RChen/</uri></author><generator>CNBlogs BlogServer</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/RChen/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/9493/rss"/><entry><id>http://www.cnblogs.com/RChen/archive/2011/12/31/2308299.html</id><title type="text">Common Lisp 在 Windows 上的开发环境比较</title><summary type="text">经过最近试验用 EMacs 玩 Lisp 后，发现在 Windows 上使用各种坑爹：快捷键不符合 Windows 正常操作习惯（当然也可以用插件模拟，不过麻烦）；点击菜单经常假死；切换 buffer 经常会假死；实在受不鸟了。重新切换回去用之前配置的 Eclipse + CUSP 插件，发现原来是没学会怎样使用——比如不知道怎样仅仅 Eval 一段选中的表达式。现在会了，重新用上了现代 IDE 各种爽。</summary><published>2011-12-30T17:05:00Z</published><updated>2011-12-30T17:05:00Z</updated><author><name>木野狐(Neil Chen)</name><uri>http://www.cnblogs.com/RChen/</uri></author><link rel="alternate" href="http://www.cnblogs.com/RChen/archive/2011/12/31/2308299.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/RChen/archive/2011/12/31/2308299.html"/><content type="html">&lt;p&gt;经过最近试验用 EMacs 玩 Lisp 后，发现在 Windows 上使用各种坑爹：&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;快捷键不符合 Windows 正常操作习惯（当然也可以用插件模拟，不过麻烦）；&lt;/p&gt;&lt;p&gt;点击菜单经常假死；&lt;/p&gt;&lt;p&gt;切换 buffer 经常会假死；&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;实在受不鸟了。&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;重新切换回去用之前配置的 Eclipse + CUSP 插件，发现原来是没学会怎样使用&amp;#8212;&amp;#8212;比如不知道怎样仅仅 Eval 一段选中的表达式。现在会了，重新用上了现代 IDE 各种爽。&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/RChen/aggbug/2308299.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/RChen/archive/2011/12/31/2308299.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/RChen/archive/2011/12/29/2306016.html</id><title type="text">翻译英文技术文章是一件很可耻的事情吗？</title><summary type="text">不知从何时起，在博客园首页上我看到了越来越多的翻译文章，其特点是 —— 仅阅读标题或者 80% 甚至 90% 的正文，你无法判断这是一篇译文。而英文文章原作者的名字都被可耻的藏匿到了翻滚好几屏以后的最底端。作为一个老的博客园用户，我心生疑惑：难道翻译别人的文章是一件很可耻的事情吗？这么见不得人？ 根据我本人的学习成长经验，在翻译原文文章的过程中，当你逐字逐句体会一篇经典时，译者自身也能得到...</summary><published>2011-12-29T05:57:00Z</published><updated>2011-12-29T05:57:00Z</updated><author><name>木野狐(Neil Chen)</name><uri>http://www.cnblogs.com/RChen/</uri></author><link rel="alternate" href="http://www.cnblogs.com/RChen/archive/2011/12/29/2306016.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/RChen/archive/2011/12/29/2306016.html"/><content type="html">&lt;p&gt;不知从何时起，在博客园首页上我看到了越来越多的翻译文章，其特点是 —— 仅阅读标题或者 80% 甚至 90% 的正文，你无法判断这是一篇译文。而英文文章原作者的名字都被可耻的藏匿到了翻滚好几屏以后的最底端。作为一个老的博客园用户，我心生疑惑：难道翻译别人的文章是一件很可耻的事情吗？这么见不得人？&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;根据我本人的学习成长经验，在翻译原文文章的过程中，当你逐字逐句体会一篇经典时，译者自身也能得到技术上更细致的体会和认识。这就和我们学习编程时，习惯照书敲一遍代码是一个道理。我想这应该也是大部分译者的目的吧？—— 在自己提高的同时，顺带造福别人。&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;每个人学习技术都有一个成长阶段的。一般看的原文文章多了之后，渐渐的就只看原文的了，可能逐字逐句来翻译的时间也变少了，通过快速浏览原文就可以对某个技术获得认知。通过翻译文章来提高技术，也渐渐变成了一项奢侈的时间投资。当然，也有人会完全出于公益的目的，翻译很多文章或者书籍来造福初学者或英文不太好的同行。&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;不管是哪种目的，出于对原文作者最起码的尊重，我真诚的建议：大家在翻译文章时应该在一开头就写明该文章是译文，原作者是谁，以及原文的链接。&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;对翻译技术文章你有什么看法？欢迎讨论。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/RChen/aggbug/2306016.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/RChen/archive/2011/12/29/2306016.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/RChen/archive/2011/12/29/2305517.html</id><title type="text">写了个博客备份的 ruby 程序</title><summary type="text">现在网上账号随时都有被盗的危险，感觉不太放心，于是用 ruby 做了一个备份我在博客园的所有随笔的小程序，总共只用了110行代码，包括长段的注释，还是面向对象，结构良好的。 第一次写正经的 ruby 程序，发现抽象层次高的语言做事情就是省心省力啊，爽。</summary><published>2011-12-28T16:58:00Z</published><updated>2011-12-28T16:58:00Z</updated><author><name>木野狐(Neil Chen)</name><uri>http://www.cnblogs.com/RChen/</uri></author><link rel="alternate" href="http://www.cnblogs.com/RChen/archive/2011/12/29/2305517.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/RChen/archive/2011/12/29/2305517.html"/><content type="html">&lt;p&gt;现在网上账号随时都有被盗的危险，感觉不太放心，于是用 ruby 做了一个备份我在博客园的所有随笔的小程序，总共只用了110行代码，包括长段的注释，还是面向对象，结构良好的。&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;第一次写正经的 ruby 程序，发现抽象层次高的语言做事情就是省心省力啊，爽。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/RChen/aggbug/2305517.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/RChen/archive/2011/12/29/2305517.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/RChen/archive/2011/12/20/2294117.html</id><title type="text">体验 Clozure CL</title><summary type="text">Clozure CL 简称 CCL. 网站在 http://ccl.clozure.com/ 是一个高性能的开源 Common Lisp 实现，其特性包括 native 线程的支持等等。还包括一个 IDE，但好像只是 for Mac 的。windows 上估计跑不起来。不过不要紧，我也可以将它 setup 到 Emacs 中。 CCL 可以通过 svn 直接下载到本机的一个目录。然后打开 .e...</summary><published>2011-12-19T17:43:00Z</published><updated>2011-12-19T17:43:00Z</updated><author><name>木野狐(Neil Chen)</name><uri>http://www.cnblogs.com/RChen/</uri></author><link rel="alternate" href="http://www.cnblogs.com/RChen/archive/2011/12/20/2294117.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/RChen/archive/2011/12/20/2294117.html"/><content type="html">&lt;p&gt;Clozure CL 简称 CCL. 网站在 &lt;a href="http://ccl.clozure.com/"&gt;http://ccl.clozure.com/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;是一个高性能的开源 Common Lisp 实现，其特性包括 native 线程的支持等等。还包括一个 IDE，但好像只是 for Mac 的。windows 上估计跑不起来。不过不要紧，我也可以将它 setup 到 Emacs 中。&lt;/p&gt;  &lt;p&gt;CCL 可以通过 svn 直接下载到本机的一个目录。然后打开 .emacs.d\init.el 文件，将原先 clisp 的配置注释掉，加入一行指向 CCL 的 exe 即可：&lt;/p&gt;  &lt;pre &gt;;(setq inferior-lisp-program &amp;quot;clisp&amp;quot;)&#xD;
(setq inferior-lisp-program &amp;quot;e:/ccl/wx86cl.exe&amp;quot;)&lt;/pre&gt;&#xD;
&#xD;
&lt;p&gt;&amp;#160;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;接下来我简单的测试对比了一下 clisp 和 CCL 的性能。各进行1千万次简单的加法运算：&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;clisp:&lt;/p&gt;&#xD;
&#xD;
&lt;pre &gt;CL-USER&amp;gt; (time (loop for i from 1 to 10000000 do (+ 100 100)))&#xD;
Real time: 16.82791 sec.&#xD;
Run time: 16.8125 sec.&#xD;
Space: 4580 Bytes&#xD;
NIL&lt;/pre&gt;&#xD;
&#xD;
&lt;p&gt;&amp;#160;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;CCL:&lt;/p&gt;&#xD;
&#xD;
&lt;pre &gt;CL-USER&amp;gt; (time (loop for i from 1 to 10000000 do (+ 100 100)))&#xD;
(LOOP FOR I FROM 1 TO 10000000 DO (+ 100 100)) took 78 milliseconds (0.078 seconds) to run &#xD;
                    with 2 available CPU cores.&#xD;
During that period, 78 milliseconds (0.078 seconds) were spent in user mode&#xD;
                    0 milliseconds (0.000 seconds) were spent in system mode&#xD;
 32 bytes of memory allocated.&#xD;
NIL&lt;/pre&gt;&#xD;
&#xD;
&lt;p&gt;&amp;#160;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;天壤之别！CCL 还利用上了我电脑上的双核 CPU. 比较下来 clisp 的性能可以用垃圾来形容。而且，CCL 是支持多线程的，clisp 不支持。&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;虽然 clisp 性能差，不过，目前来说保留它的理由是可以用来运行 Portable Allegro Serve 的代码。而我粗略的试了一下在 CCL 下跑这个代码会报错。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/RChen/aggbug/2294117.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/RChen/archive/2011/12/20/2294117.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/RChen/archive/2011/12/15/2289330.html</id><title type="text">试用 Portable Allegro Serve</title><summary type="text">安装好 Common Lisp 的开发环境后，想试试看 web 开发。 虽然 Allegro Serve 运行起来更简单，但是要在 Allegro CL 中运行，而后者是个商业软件，暂时我没有购买的打算。退而求其次，只好用 Portable Allegro Serve. 这个开源代码貌似很久没更新了。下载后，运行出了很多小问题。简要记录如下： 用 CLisp 来运行的时候，可能下...</summary><published>2011-12-15T11:34:00Z</published><updated>2011-12-15T11:34:00Z</updated><author><name>木野狐(Neil Chen)</name><uri>http://www.cnblogs.com/RChen/</uri></author><link rel="alternate" href="http://www.cnblogs.com/RChen/archive/2011/12/15/2289330.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/RChen/archive/2011/12/15/2289330.html"/><content type="html">&lt;p&gt;安装好 &lt;a href="http://www.cnblogs.com/RChen/archive/2011/12/14/2287439.html" target="_blank"&gt;Common Lisp 的开发环境&lt;/a&gt;后，想试试看 web 开发。&lt;/p&gt;  &lt;p&gt;虽然 Allegro Serve 运行起来更简单，但是要在 Allegro CL 中运行，而后者是个商业软件，暂时我没有购买的打算。退而求其次，只好用 Portable Allegro Serve.&lt;/p&gt;  &lt;p&gt;这个开源代码貌似很久没更新了。下载后，运行出了很多小问题。简要记录如下：&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;用 CLisp 来运行的时候，可能下载的 aserve 代码里包含的那些中间文件是由其他 lisp 实现生成的，也可能是 clisp 的早期版本，会报错误提示这些中间文件 out-dated 了。解决的办法很简单，只要将 aserve 代码的子孙目录中所有 .fas 和 .lib 文件全部删掉即可，可以写个简单的脚本来做这个 clean 的工作。删掉后，重新加载时会自动重新生成这些中间文件。这个非常类似于 Python 的 .pyc 文件。&lt;/li&gt;    &lt;li&gt;加载 install.lisp 的时候会报一个函数调用 ipaddr-to-dotted 找不到。这是因为代码里有个地方的调用少写了该函数所在包的前缀。解决办法是，打开 aserve\log.cl, 找到这个函数调用的地方，将函数写法替换为 acl-compat.socket:ipaddr-to-dotted 即可。&lt;/li&gt;    &lt;li&gt;执行 (start :port 8080) 启动服务器的时候，会报错如下：     &lt;br /&gt;&lt;/li&gt;    &lt;p&gt;&lt;font color="#ff0000"&gt;Evaluation aborted on #&amp;lt;SIMPLE-TYPE-ERROR #x1A2AAEF9&amp;gt;.       &lt;br /&gt;Lisp connection closed unexpectedly: connection broken by remote peer        &lt;br /&gt;&lt;/font&gt;      &lt;br /&gt;首先需要通过 Emacs 里打开 *inferior-lisp* buffer，然后重新加载这些代码来测试。得到一个更为详细的错误：&lt;/p&gt;    &lt;p&gt;&lt;font color="#ff0000"&gt;*** - FUNCALL: undefined function ACL-COMPAT.MP:MAKE-PROCESS&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;可以判断是因为 clisp 不支持多线程造成的问题。&lt;/p&gt;    &lt;p&gt;解决办法：启动 aserve 多提供一个参数如下：     &lt;br /&gt;      &lt;br /&gt;(start :port 8080 &lt;strong&gt;:listeners 0&lt;/strong&gt;)&lt;/p&gt; &lt;/ol&gt;&lt;img src="http://www.cnblogs.com/RChen/aggbug/2289330.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/RChen/archive/2011/12/15/2289330.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/RChen/archive/2011/12/14/2287439.html</id><title type="text">Windows XP, Emacs, CLisp, SLIME</title><summary type="text">LispBox 已经不再维护了，很多代码跑不起来，只好手工配置这套工具。 终于搞定了所有的安装配置，好麻烦。其中 clisp 最新的2.49版本配置了总是报错，只好用2.48版。其他都是当前最新的。 Emacs 23.3 CLisp 2.48 SLIME (CVS current snapshot) 安装的步骤如下。 首先下载 clisp 2.48 的 exe 版本，...</summary><published>2011-12-14T05:09:00Z</published><updated>2011-12-14T05:09:00Z</updated><author><name>木野狐(Neil Chen)</name><uri>http://www.cnblogs.com/RChen/</uri></author><link rel="alternate" href="http://www.cnblogs.com/RChen/archive/2011/12/14/2287439.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/RChen/archive/2011/12/14/2287439.html"/><content type="html">&lt;p&gt;LispBox 已经不再维护了，很多代码跑不起来，只好手工配置这套工具。&lt;/p&gt;  &lt;p&gt;终于搞定了所有的安装配置，好麻烦。其中 clisp 最新的2.49版本配置了总是报错，只好用2.48版。其他都是当前最新的。&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Emacs 23.3&lt;/p&gt;  &lt;p&gt;CLisp 2.48&lt;/p&gt;  &lt;p&gt;SLIME (CVS current snapshot)&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;安装的步骤如下。&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;首先下载 clisp 2.48 的 exe 版本，安装到 c:\clisp.&lt;/li&gt;    &lt;li&gt;打开 CLisp，查看当前 HOME 目录的位置。方法是输入 (user-homedir-pathname). 找到后，在其中建立一个空的文本文件命名为 .clisprc.lisp.     &lt;br /&gt;我机器上的目录如下：C:\Documents and Settings\[UserName]\.clisprc.lisp&lt;/li&gt;    &lt;li&gt;安装 Emacs. 直接将下载的 zip 包解压到一个目录就好。我是 c:\emacs.&lt;/li&gt;    &lt;li&gt;下载 SLIME 的 CVS 快照版本，解压到 c:\emacs\slime-2011-12-13&lt;/li&gt;    &lt;li&gt;打开 Emacs，确定当前的 HOME 目录。方法是输入 (insert (getenv “HOME”)) 命令后输入 C-c C-e 来执行，看输出。我机器上得到的结果是：     &lt;br /&gt;C:\Documents and Settings\[UserName]\Application Data&lt;/li&gt;    &lt;li&gt;建立一个文本文件到：     &lt;br /&gt;C:\Documents and Settings\[UserName]\Application Data\.emacs.d\init.el      &lt;br /&gt;输入内容如下并保存：      &lt;br /&gt;&lt;/li&gt;    &lt;pre &gt;;;; Initialize slime.&#xD;
(setq inferior-lisp-program &amp;quot;clisp&amp;quot;)&#xD;
(add-to-list 'load-path &amp;quot;c:\\emacs\\slime-2011-12-13\\&amp;quot;)&#xD;
(require 'slime-autoloads)&#xD;
(eval-after-load &amp;quot;slime&amp;quot;&#xD;
  '(progn (slime-setup '(slime-fancy))))&#xD;
&#xD;
;;; Automatically use slime mode on .cl and .lisp files.&#xD;
(add-to-list 'auto-mode-alist '(&amp;quot;\\.cl$&amp;quot; . common-lisp-mode))&#xD;
(add-to-list 'auto-mode-alist '(&amp;quot;\\.lisp$&amp;quot; . common-lisp-mode))&#xD;
&#xD;
;;; Start slime.&#xD;
(slime)&lt;/pre&gt;&#xD;
&#xD;
  &lt;li&gt;安装 &lt;a title="Quicklisp" href="http://www.quicklisp.org/"&gt;Quicklisp&lt;/a&gt;. 下载 quicklisp.lisp 后，打开 CLisp 控制台 load 该文件，然后执行之，按提示执行安装命令即可。&lt;/li&gt;&#xD;
&#xD;
  &lt;li&gt;修改配置文件 C:\Documents and Settings\[UserName]\.clisprc.lisp 如下：&#xD;
    &lt;br /&gt;&lt;/li&gt;&#xD;
&#xD;
  &lt;pre &gt;;;; Play nice with shebangs&#xD;
(set-dispatch-macro-character #\# #\!&#xD;
 (lambda (stream character n)&#xD;
  (declare (ignore character n))&#xD;
  (read-line stream nil nil t)&#xD;
  nil))&#xD;
&#xD;
;;; The following lines added by ql:add-to-init-file:&#xD;
#-quicklisp&#xD;
(let ((quicklisp-init (merge-pathnames &amp;quot;quicklisp/setup.lisp&amp;quot; (user-homedir-pathname))))&#xD;
  (when (probe-file quicklisp-init)&#xD;
    (load quicklisp-init)))&lt;/pre&gt;&#xD;
&#xD;
  &lt;br /&gt;&#xD;
&#xD;
  &lt;br /&gt;&lt;/ol&gt;&#xD;
&#xD;
&lt;p&gt;安装过程完全参考的这里：&lt;a href="http://yellosoft.us/installing-common-lisp"&gt;http://yellosoft.us/installing-common-lisp&lt;/a&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;接下来可以大干一场了。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/RChen/aggbug/2287439.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/RChen/archive/2011/12/14/2287439.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/RChen/archive/2011/10/25/2224335.html</id><title type="text">关于 Business Rule Engine</title><summary type="text">为了避免硬编码业务逻辑，也许很多人在做业务系统时（包括我自己）总希望做一个 Business Rule Engine (BRE)，将各种业务规则拆分到原子单位，保存到外部的存储 (xml / DB) 中。然后通过规则的逻辑运算组合来满足业务要求。 今天从下面链接文章中了解到一种观点： 不要尝试去 build 一个 Business Rule Engine. 因为这样很有可能最终会做出一...</summary><published>2011-10-25T11:58:00Z</published><updated>2011-10-25T11:58:00Z</updated><author><name>木野狐(Neil Chen)</name><uri>http://www.cnblogs.com/RChen/</uri></author><link rel="alternate" href="http://www.cnblogs.com/RChen/archive/2011/10/25/2224335.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/RChen/archive/2011/10/25/2224335.html"/><content type="html">&lt;p&gt;为了避免硬编码业务逻辑，也许很多人在做业务系统时（包括我自己）总希望做一个 Business Rule Engine (BRE)，将各种业务规则拆分到原子单位，保存到外部的存储 (xml / DB) 中。然后通过规则的逻辑运算组合来满足业务要求。 &lt;/p&gt;  &lt;p&gt;今天从下面链接文章中了解到一种观点： &lt;/p&gt;  &lt;p&gt;不要尝试去 build 一个 Business Rule Engine.   &lt;br /&gt;因为这样很有可能最终会做出一个蹩脚的 DSL 实现，并且最终只有程序员才能理解和维护它，反而违反“将规则抽象化，易于理解和配置”这个初衷。    &lt;br /&gt;可能还不如直接使用 C# 直接写来的直接和好维护。 &lt;/p&gt;  &lt;p&gt;恩，确实值得思考一下。至于这个观点是否正确，需要慢慢体会和检验之。 &lt;/p&gt;  &lt;p&gt;另外，有必要去了解一下 Prolog 语言. 有一个人的回复写的很有意思： &lt;/p&gt;  &lt;p&gt;&amp;quot;those who do not understand Prolog will reinvent it, poorly.&amp;quot; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://badprogrammer.infogami.com/business_rule_engines.html"&gt;http://badprogrammer.infogami.com/business_rule_engines.html&lt;/a&gt;    &lt;br /&gt;&lt;a href="http://thedailywtf.com/Articles/The_Enterprise_Rules_Engine.aspx"&gt;http://thedailywtf.com/Articles/The_Enterprise_Rules_Engine.aspx&lt;/a&gt;    &lt;br /&gt;&lt;a href="http://en.wikipedia.org/wiki/Cargo_cult_programming"&gt;http://en.wikipedia.org/wiki/Cargo_cult_programming&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/RChen/aggbug/2224335.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/RChen/archive/2011/10/25/2224335.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/RChen/archive/2011/10/18/2216395.html</id><title type="text">Irony - 一个 .NET 语言实现工具包</title><summary type="text">Irony 可以用来实现一个你自己设计的 .NET 语言，通过这个工具包，不需要自己写词法、语法编译程序。只要将目标语言的语法用 C# 语句进行定义即可。 Irony 通过 C# 运算符重载实现了利用 C# 定义语法规则的功能。比如定义 SQL 语言的语法，通过 Irony 写出来的甚至比 BNF 还要短。利用这个东西可以方便的定义自己的 DSL. 有空关注一下。 http://www.han...</summary><published>2011-10-18T05:28:00Z</published><updated>2011-10-18T05:28:00Z</updated><author><name>木野狐(Neil Chen)</name><uri>http://www.cnblogs.com/RChen/</uri></author><link rel="alternate" href="http://www.cnblogs.com/RChen/archive/2011/10/18/2216395.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/RChen/archive/2011/10/18/2216395.html"/><content type="html">&lt;p&gt;Irony 可以用来实现一个你自己设计的 .NET 语言，通过这个工具包，不需要自己写词法、语法编译程序。只要将目标语言的语法用 C# 语句进行定义即可。&lt;/p&gt;  &lt;p&gt;Irony 通过 C# 运算符重载实现了利用 C# 定义语法规则的功能。比如定义 SQL 语言的语法，通过 Irony 写出来的甚至比 BNF 还要短。利用这个东西可以方便的定义自己的 DSL. 有空关注一下。&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.hanselman.com/blog/TheWeeklySourceCode59AnOpenSourceTreasureIronyNETLanguageImplementationKit.aspx"&gt;http://www.hanselman.com/blog/TheWeeklySourceCode59AnOpenSourceTreasureIronyNETLanguageImplementationKit.aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://irony.codeplex.com/"&gt;http://irony.codeplex.com/&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/RChen/aggbug/2216395.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/RChen/archive/2011/10/18/2216395.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/RChen/archive/2011/09/04/2165923.html</id><title type="text">看完了 Source Code</title><summary type="text">科幻电影经常通过多个世界反复切换来达到神奇的效果，激发遐想。但同时观众也容易被 confuse，搞不清到底是虚拟还是现实。 看了豆瓣上有人提到平行宇宙的概念，我觉得并不是这个片子要表达的内容。平行宇宙的概念应该是指基于某个初始状态，由于量子理论的不确定性，后续可能有很多种宇宙可能的状态，但其发展方向总是向前的。 Source Code 中最厉害的是超级电脑和配套的源代码，它能够通过...</summary><published>2011-09-03T16:00:00Z</published><updated>2011-09-03T16:00:00Z</updated><author><name>木野狐(Neil Chen)</name><uri>http://www.cnblogs.com/RChen/</uri></author><link rel="alternate" href="http://www.cnblogs.com/RChen/archive/2011/09/04/2165923.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/RChen/archive/2011/09/04/2165923.html"/><content type="html">&lt;p&gt;科幻电影经常通过多个世界反复切换来达到神奇的效果，激发遐想。但同时观众也容易被 confuse，搞不清到底是虚拟还是现实。&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;看了豆瓣上有人提到平行宇宙的概念，我觉得并不是这个片子要表达的内容。平行宇宙的概念应该是指基于某个初始状态，由于量子理论的不确定性，后续可能有很多种宇宙可能的状态，但其发展方向总是向前的。&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Source Code 中最厉害的是超级电脑和配套的源代码，它能够通过保存世界在过去某一时刻的 Snapshot，并且能模拟一切物理规律（包括量子理论，包括一个个活生生的人及其大脑里储存的信息，以及他们的行为方式），然后让被实验者接入系统，去重新体验过去的某一段经历。同时因为量子理论的不确定性，和实验者的参与，基于原始的那个 Snapshot 可以运行出无数种可能的运行结果。那么程序运行结束后，被实验者就有可能通过参与和分析，得到所需的信息。&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;但是模拟毕竟只是模拟，它只能在被模拟者的脑子构建出虚拟的感受和他对于世界的认识，在被模拟者的感受中针对过去事件改变的结果（即阻止了火车爆炸）不可能对当前正在进行的这个宇宙的任一个分支的过去事件进行修改；但有可能对未来发生影响——比如，通过对 Snapshot 的破译获知了恐怖分子的名字和车牌号等信息，从而在现实中阻止了他对下一个目标的攻击。&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;影片最后一段部分肖恩进入系统阻止了火车爆炸，并给古德温发邮件，以及古德温收到邮件后的一系列场景，都只是在肖恩的头脑里的幻象而已，或者是体现了在 Source Code 中程序的模拟运行。跟现实世界已经没有任何关系了。在现实中，肖恩仍然会死去，而过去发生的火车爆炸事件仍然不可避免的发生了。最后这段只是一个虚拟的，美好的幻想而已。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/RChen/aggbug/2165923.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/RChen/archive/2011/09/04/2165923.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/RChen/archive/2011/09/02/2164018.html</id><title type="text">转换 PDF 格式为适合电纸书阅读的版本</title><summary type="text">http://www.howtogeek.com/69481/how-to-convert-pdf-files-for-easy-ebook-reading/ 试了一下这个文章介绍的办法，相当的给力。 将原始 pdf 文件依次用这两个工具转换一下即可： k2pdfopt.exe Calibre 看书明显爽多了，不再需要频繁的缩放字体，或者滚动屏幕。</summary><published>2011-09-02T09:34:00Z</published><updated>2011-09-02T09:34:00Z</updated><author><name>木野狐(Neil Chen)</name><uri>http://www.cnblogs.com/RChen/</uri></author><link rel="alternate" href="http://www.cnblogs.com/RChen/archive/2011/09/02/2164018.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/RChen/archive/2011/09/02/2164018.html"/><content type="html">&lt;p&gt;&lt;a href="http://www.howtogeek.com/69481/how-to-convert-pdf-files-for-easy-ebook-reading/"&gt;http://www.howtogeek.com/69481/how-to-convert-pdf-files-for-easy-ebook-reading/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;试了一下这个文章介绍的办法，相当的给力。&lt;/p&gt;  &lt;p&gt;将原始 pdf 文件依次用这两个工具转换一下即可：&lt;/p&gt;  &lt;p&gt;k2pdfopt.exe&lt;/p&gt;  &lt;p&gt;Calibre&lt;/p&gt;  &lt;p&gt;看书明显爽多了，不再需要频繁的缩放字体，或者滚动屏幕。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/RChen/aggbug/2164018.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/RChen/archive/2011/09/02/2164018.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry></feed>
