Say Hello to Jekyll & Github Pages!

博客已搬家至Github Pages!(http://jing0.github.io)

阮一峰曾在一篇博文里写,

喜欢写Blog的人,会经历三个阶段。 第一阶段,刚接触Blog,觉得很新鲜,试着选择一个免费空间来写。 第二阶段,发现免费空间限制太多,就自己购买域名和空间,搭建独立博客。 第三阶段,觉得独立博客的管理太麻烦,最好在保留控制权的前提下,让别人来管,自己只负责写文章。

我也尝试过不少博客,高一高二主要用新浪博客(因为韩寒),中间也尝试过CSDN。虽然它们用户很多,很受大众欢迎,但它们都存在一些问题,当你复制引用一段文字时,它会自动给你加上一些HTML标签。因为受不了它们提供的令人抓狂的网页编辑器,我会先在本地写好,再粘贴到网页中去,因此我有时需要编辑两次甚至更多次。另外就是这些服务都不自由,不是说言论自由,而是界面、样式都是千篇一律。

到高三时,看着网上高手的教程,我也用WordPress和免费主机搭建了一个博客,也写了一些现在看起来可笑的东西放上去(不知道一年后,看现在写的东西是不是同样的感觉)。

到上了大学,一个星期五晚上不知道是不是吃饱了撑的,花了几个小时找个了国外主机又做了一个。当时感觉还不错,主机每月流量几乎用不完,访问速度比原来找的快多了,东西想怎么写就怎么写,还送个免费的域名,有时还可以做些有趣的实验放上去。不过既然是免费的,就肯定有缺点,后来发现这域名其他学校都不能访问,回到家也不行。好吧,肯定是主机服务商名声太差了。发现了一个缺点,你就会去找其他缺点。绑定域名有限制不说,ping一下,有时响应时间竟超过700ms!还有WordPress有时也让人难以忍受,而且每月一次的博客备份在不稳定的网络成了沉重的负担。WordPress配合这主机就像一个八九十岁的老头拄着拐棍儿参加马拉松一样,随便装几个插件就等于把他的拐棍儿也给没收了。

后来听说OpenShift不错,不过频繁地被qiang还是让我放弃了。然后,我就看到了Github Pages,速度当然没问题,流量和空间更是无限,东西都在Github上还用备份?!而且最重要的是,暂时不用担心被qiang的问题。好吧,谁也不能保证Github会在瓷器国的魔爪下永存。

使用Github Pages的blog一般采用Jekyll搭建,这是Github员工mojombo写的静态站点生成器,所以访问速度够快,并且可以采用Markdown等标记语言来编写,简单高效。这是一种真正让你专注于blog的组合,你所需要的只是git和一个编辑器。

不过用gh-pages和Jekyll依然存在一些问题:

  • 配置起来实在够麻烦。先不说翻来覆去的git命令,稍微一不注意就会出现一些error。Jekyll-Bootstrap官方页面给的步骤我试了好几次也没成功,最后用了笨方法:在新建repo的setting里生成Page,然后把下载的Jekyll同步上去。
  • Markdown难以满足需求。虽然说Markdown有时简单方便到极致,但正是因为它的简单,导致了一些本来很简单的东西需要很复杂的方式来实现,最后反而破坏了它的长处。就比如迁移博客时一些文章里的代码片段,用Markdown语法怎么写都不对劲儿,最后把原文章里的HTML代码粘贴上去才可以。HTML标签和Markdown混合?那我还不如直接用HTML呢!
  • 有时push以后没反应。有几次repo中已经显示同步成功,但Github Pages里过了好长时间才更新,有时甚至一直不更新,索性我就再来一次。不知道是不是个别问题。
  • 文章多了影响速度。额,这个等我达到那个程度时再来考虑吧。
  • 功能缺失。不能像WordPress自带评论系统。好吧,这个不算问题,反正也没几个人评论。不过一个搜索功能都需要用Google的custom search就不怎么称心了,难道搜索影响了简洁?

花了几个小时总算把东西都移过来了,看着新的Blog,心里舒服多了。

在新的一年换了新的服务,算是给自己的一个礼物吧。

推荐几篇文章:

ELIZA是如何思考的——Emacs Doctor代码的简单分析

版本:Gnu Emacs 20.2.2.

使用的源代码: http://www.csee.umbc.edu/courses/471/papers/emacs-doctor.shtml

 

输入以后,Doctor会首先结合句子长度和关键词来进行选择,注意,是结合。我看到有的文章说是关键词为主,其实并不是这样,比如输入“unix”,并不是直接匹配“mach”类型。

一般Doctor所作的输出都是在一个个list中选取的。比如句子长度过短而句子中又没有特定关键词,就会被定义为short,然后结果就会从“shortlst”中选取。

另外,这些list还会结合一些语气词(如hmmm,well),短语(如feelings about,thoughts on),形容词(如vivid,boring)等生成句子,来使它看起来更像是人机对话。

 Emacs Doctor把269个关键词分为26类,并归为“doctor-put-meaning”,下面是“doctor-meaning”的全部分类

howdy打招呼

mach机器/计算机

foul脏话

toke放松

drug药物

loves/love 爱

hates/hate 恨

state 状态

desire 渴望

mood 心情

fear 恐惧

sexnoun 关于性的名词

family 家庭

death 死亡

symptoms 症状

alcohol 酒精

sexverb 关于性的动词

conj 连词

when 时间连词

rms Stallman 

school学校

eliza 这个不用解释了吧

sports运动

math数学

zippy 有活力

chat 这个只有“Chat”一个关键词

 

注:这个有意思了,不知道“Stallman”的自己Google。

事例:

Know Stallman?

 

Have you been a friend of Stallman?

所以说,当你问About Stallman时,它会回复一个带有Stallman的句子,

请注意,“Stallman”,是大写“S”的,而在Doctor里一般情况下名字是不可能出现大写字母开头的,如问的是”Tom“,会输出”tom“。这个也算是个彩蛋吧!向自由软件致敬!

 

每一个”doctor-put-meaning“对应一个函数defun和一个lst(list)

输出过程探究

1.输入”Know unix?”

2.“unix”属于“mach”(代码:(doctor-put-meaning unix ‘mach))

3.调用函数defun doctor-mach ()

4.函数查询machlst,并从machlst的几个句子中选取(貌似是按顺序选取的),见下面。

machlst代码:

(make-local-variable ‘machlst)
(setq machlst
‘((you have your mind on (// found) \, it seems \.)
(you think too much about (// found) \.)
(you should try taking your mind off of (// found)\.)
(are you a computer hacker \?)))

测试:

know unix?

 

You have your mind on unixs, it seems.

 

know unix?

 

You think too much about unixs.

 

know unix?

 

You should try taking your mind off of unixs.

 

know unix?

 

Are you a computer hacker?

 

这样就完成了一次和Doctor的对话。

写的不好,如有错误欢迎指正。

从Emacs Doctor到ELIZA,看早期的人工智能

在Mac中学习一些Terminal命令时尝试过Emacs Doctor,当时只知道这个可以和机器聊天小程序是集成在Emacs中的。最近发现Emac Doctor背后是一个早期的人工智能项目——ELIZA,仔细研究了一下,来头不小。


1.Emacs Doctor长什么样?

如下,

GNU Emacs

 

2.如何找到她?

Emacs中输入“xdoctor”即可。Terminal中需要先输入“Emacs”,再“shift+esc”。

3.这个Doctor怎么用?

找到Doctor后,输入你的问题,按两下“Return”,Doctor就会回答你的问题。

不过貌似这个精神治疗师的回答会让你更加神经。

下面是我和她的一段对话。

 

Talk

 

4.Emacs Doctor到底什么来头?

说到Emacs Doctor,就不得不说ELIZA维基百科-ELIZA)。

Eliza是早期的一项人工智能项目,被MIT的41岁计算机科学家Joseph Weizenbaum在1964-1966年开发出来,并以萧伯纳的戏剧作品《卖花女》(不是《茶花女》)中的主人公的名字命名(因此本文用“她”来称呼)。ELIZA的智能之处在于她能通过脚本理解简单的自然语言,并能产生类似人类的互动。而其中最著名的脚本便是模拟罗吉斯心理治疗师Doctor。GNU Emacs Doctor则是这个脚本的另一个版本。

ELIZA在1966年被发布出来以后,引起了不小的轰动,与ELIZA“聊天”的用户有时会误以为自己是在和人类,而不是和一个程序交谈。但是实际上ELIZA根本不知道自己在说什么。它只是按固定套路作答,或者用符合语法的方式将问题复述一遍。甚至有一段时间,人们认为这种思路可以做出通过图灵测试的程序。

Weizenbaum很吃惊很多用户会忽视自己面对的是一个机器,而对ELIZA敞开心扉(这种情况也叫做ELIZA effect,ELIZA效应)。虽然Weizenbaum创造的ELIZA使他在人工智能领域成就斐然,但他并不认为AI能与人类的情感和智慧相比。1976年Weizenbaum出版著作《计算机的力量与人类的推理》,书中表示人工智能的滥用可能损害人类生命的价值,并对计算机和人类的关系进行了探讨。

关于这段历史,可以看看《面对互联网:我们已经丧失了人性》。查到有两部关于Joseph Weizenbaum和ELIZA的电影《Weizenbaum. Rebel at Work.》《Plug & Pray》,打算有时间看一下。

Weizenbaum最早是用SLIP写的ELIZA。后来出现了很多其他语言的版本,著名的有Bernie Cosell重写的Lisp版本,Jeff Shrager的BASIC版本,还有就是GNU Emacs中的Emacs Doctor了。

另外,有一个用Perl写的改进版本的ELIZA(Chatbox-ELIZA),好像只能装到UNIX内核的机器上,我尝试了下。ELIZA体验过程及更多请看文章最后“ELIZA体验”。

作为最早的机器智能的体现之一,ELIZA可以说是一个里程碑。不管它有多么简陋,但它是将人-人互动的感觉带到了人机互动上的第一次尝试。

自己总结一下,ELIZA有以下影响:

* ChatterBot:ELIZA可以说是第一个Chatterbot——聊天机器人,你现在依然可以在很多Chatterbot中发现ELIZA的影子。不得不说的是,两年前Apple的Siri发布时,ELIZA也被再次请出,用来吐槽“智能”的Siri。

* Game:这一点很容易理解,由于ELIZA具有很强的互动性,她对游戏领域的影响是深远的,特别对早期的游戏。一些角色扮演类游戏和文字游戏很大程度上借鉴了ELIZA的设计,具体看这里。2011年的游戏黑客入侵:人类革命(Deus Ex: Human Revolution)也在向ELIZA致敬。游戏中的一个伪装成记者的反派Eliza Cassan最后被主角击杀,并发现她是一个高度智能的AI。

* Smart Assistant:虽然Google Now和Siri等一些智能语音助理能完成各种任务,甚至对它们给予的输入是完全的自然语言,但是它们仍可以判断意思并给出回答。维基百科上说Siri中有个很有意思的彩蛋(前提是语言设置为en),问Siri:“Who would you vote for-Mitt Romney or Barack Obama?”,Siri回答:“I can’t vote.But if I did,I would vote for ELIZA.She knows all.”或者问Siri:“Tell me a story.”最后她会给你讲她是如何被选中给Apple工作的,然后故事中会提及ELIZA。当然你也可以向Siri问ELIZA,然后她会仔细地向你介绍。

* etc.

 

 Emacs Doctor源代码中这样介绍自己

The single entry point `doctor', simulates a Rogerian analyst using
;; phrase-production techniques similar to the classic ELIZA demonstration
;; of pseudo-AI.

Emacs Doctor的脚本是用eLisp语言写的。在Mac中,打开emacs/24.3/Emacs.app/Contents/Resources/lisp/play ,其中的doctor.elc便是Doctor的藏身之处

Gnu Emacs 20.2.2中Emacs Doctor源代码http://www.csee.umbc.edu/courses/471/papers/emacs-doctor.shtml

写的不好,有错误还请指正。

Eliza体验

安装过程:

$ cd Chatbot-Eliza-1.04

$ ls

Chatbotdebug.cgidoctor.txtsimple

MANIFESTdeutschnorsksimple.cgi

Makefile.PLdeutsch.cginorsk.cgitest.pl

READMEdeutsch.txtnorsk.txttwobots

$ perl Makefile.pl

Checking if your kit is complete…

Looks good

Writing Makefile for Chatbot

$ make test

cp Chatbot/Eliza.pm blib/lib/Chatbot/Eliza.pm

PERL_DL_NONLAZY=1 /opt/local/bin/perl “-Iblib/lib” “-Iblib/arch” test.pl

 

Attempting to load module…done.  

 

OK, looks good.

 

$ make install 在这需要权限才行,sudo就行了

Manifying blib/man3/Chatbot::Eliza.3pm

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

ERROR: Can’t create ‘/opt/local/lib/perl5/site_perl/5.12.4/Chatbot’

mkdir /opt/local/lib/perl5/site_perl: Permission denied at /opt/local/lib/perl5/5.12.4/ExtUtils/Install.pm line 494

 

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

 at -e line 1

make: *** [pure_site_install] Error 13

$ sudo make install

Password:

Sorry, try again.

Password:

Files found in blib/arch: installing files in blib/lib into architecture dependent library tree

Installing /opt/local/lib/perl5/site_perl/5.12.4/darwin-thread-multi-2level/.DS_Store

Installing /opt/local/lib/perl5/site_perl/5.12.4/darwin-thread-multi-2level/auto/.DS_Store

Installing /opt/local/lib/perl5/site_perl/5.12.4/darwin-thread-multi-2level/.DS_Store

Installing /opt/local/lib/perl5/site_perl/5.12.4/darwin-thread-multi-2level/auto/.DS_Store

Installing /opt/local/lib/perl5/site_perl/5.12.4/darwin-thread-multi-2level/Chatbot/Eliza.pm

Installing /opt/local/share/perl5.12/siteman/man3/Chatbot::Eliza.3pm

Appending installation info to /opt/local/lib/perl5/5.12.4/darwin-thread-multi-2level/perllocal.pod

这算安装好了。

然后”./simple”运行,尝试一下,本来感觉无聊的过程却发现亮点在最后。。。 感觉这个比Emacs Doctor的回答智能多了!

Eliza

 

 

参考资料:

Need A Psychiatrist? Meet Eliza

Meet The Emacs Doctor

Wikipedia—ELIZA

Wikipedia—ELIZA Effect

Wikipedia—Joseph Weizenbaum

CSEE.UMBC.EDU

面对互联网:我们已经丧失了人性