Posted on 16-04-2014
Filed Under (技术) by waterlin

经常使用多种工具来记录自己的想法,今天就简单介绍一下自己常用的几种笔记载体,算是对自己工作方法的一种总结,期待能开拓一些更好的方法。

笔和纸:我永远不会忘记在身上带着记事本,在办公室也有一个记事板和白纸,笔和纸的最大好处,是你可以不受任何限制,随意的画出自己的想法,勾勒出自己想要的轮廓,甚至于在你完全不知道要怎么解决问题、完全不知道要如何入手的时候,提供一个随便写写画画的地方来激发灵感。

博客:像时间轴一样的记事本,更适合资讯、新闻等媒体,但如果要修改旧文档,就不是特别方便,适合个人或小团体采用时间轴的更新方式记录灵感、想法以及知识。我也使用博客来记录一些短时间内成形的想法或是经验,这个想法或是经验只是阶段性的。

问题模式:即 Question2Answer 或是知乎模式,在记事本里写上一条问题,以后碰到类似的相关知识即在后面加上一条,以问题为核心,可以逐层盖楼,而这个回答,没有时间限度,可以方便你任何时间进行修改。对于一个问题,你现在可能没有答案,可是随着时间的推移,你或许会得出一个非常好的结论。随着技术与经验的增加,答案会有变化,而问题本身却是恒永不变的,并且每个人看问题的方式与角度不同,适合多人问题、小团队回答同一个问题,或是自问自答,有一些问题,你可能要用一辈子去尝试回答。互联网产品里,这方面做得最好的典范是知乎和 StackOverflow。而我的知识库里,我自己也有一个这样的工具,即使用 OneNote 来收集与某一问题相关的资料。

Wiki:最严谨的笔记方式,可以有内链外链等一堆东西,还可以无限制地修改,同时,也是最需要花时间去维护的平台。Wiki 我最喜欢用的是 Emacs Org Mode,这个是本地化的 Wiki,还是万能的。通过把 Emacs 变成我本地的 Wiki,我可以链接 Evernote、博客链接等,维护我自己一个权威的知识库,这个库更新比较谨慎,我并不会往里面塞大量我觉得不靠谱的内容,我希望它成为我自己的智囊,在我需要寻找答案或是我忘记了标准答案的时候,我首先会去这里寻找,并且沿着相关链接一路研读下去。

这些平台或是模式根本无法由一个来代替另一个,如果只是随便写写感想、当下的一些经验,用博客就非常好,而要正儿八经长篇大论的记录自己的知识与经验,并且很好地把他们串联起来,那 Wiki 无疑是最佳人选,问答模式则可以贯穿两者之间,甚至于延续到时间的尽头。

最后说一句,不管用什么方式来记笔记,经常重新回来审视你的笔记是永远永远最最重要的。

(0) Comments    Read More   
Posted on 16-04-2014
Filed Under (文化) by waterlin

原本以为《信息简史》是一本有关 IT 史的书,作为 IT 从业者的我们,当然需要拜读一下。

在我们接受的教育中,基本上信息史就是等同于计算机历史。而在这本书中,计算机只是信息的一个载体,计算机或许是信息发展历史上最重要的一个载体,但绝不是全部,本书只用了最后一节来介绍网络信息技术,并没有着重太多的笔墨。并且恰恰想反,如果把计算机去掉,这本书依然是完全的,起码信息史的理念是完整的。这本书最大的作用,即是让我明白了 IT 只是信息史中的很小一个部分,小到甚至于可以忽略,甚至于本书去掉现代 IT 史相关的东西,依然可以保持完整,现代的 IT 信息科技界,依然没有跳出几十年甚至于几百年前人们设定的框架与范畴。

书中最少花了三分之一,来描述电报发明前的通信故事,看起来好像和现代通信技术无关,但是是从思想内容上,电报和现代网络通信技术的目的都是为了解决同一个内容。而解决这一目的的思维过程,和现代通信技术解决问题的基本思路都是一样的。我们现代人真没发明多少新东西,恰恰相反,我们只是对古代的思想和哲学进行改良罢了。

书中也对二进制在信息史中的重要地位以及采用源由进行了大量的逻辑推理与介绍。在今天看来,比特成为信息通信技术中的基本单位或许是最理所当然的事情,二进制的编码方法成为信息表达的不二选择也是再自然不过的事情,可是在之前,在连续数字及模拟信号布满天下的时候,为什么要用二进制、以及什么是二进制,可是为难了一大批科学家。这本书更像一本哲学书,讲述了人类尝试解释为什么世界可以用二进制来编码的思考过程。

书里反复强调了定义是对信息进行描述的关键环节。书中反复有讲到类似于对于某某词的定义之类的条目,我觉得这才是科学的态度。不管是数学物理,或是其它学科,都要注重定义的解释。这或许是中文特别有缺陷的地方。中文特别灵活的词语组合、松散的语法,最容易带来歧义性,这或许对文学创作特别有帮助,但是对于科学推导来说,却是一个泥沼。

书里大量引用别人的观点都有出处,引用别人的原话也会说明是谁说的或是某个出版物上写的,更让我叹为观止的是书中最后一百多页的参考文献,这才是写书的态度。这和中国的文化很不相同,中国文化也有引用别人观点的习惯,但是这却是一个“有文化”的象征,你要自己能读明白出自哪里、什么意思。中国人写文章,喜欢引经据典,同时,又不喜欢把这些经、典的出处明白地告诉读者,形成这一历史文化的原因估计已经无从考据了。这或许是西方文化和中国文化的巨大不同,这也可能是导致了现在西强东弱的格式的原因。

书中有关熵的介绍与解释,我觉得蛮精炼易懂的(起码比我那个研究生同学的论文来得靠谱),对熵的本质含义有兴趣的人,可以试着读一读那一部分。

最后说句题外话,信息的本质是比特,是二进制的,但是8位一个字节的定义,这个却纯粹是人为规定的,与自然哲学无关。

(0) Comments    Read More   
Posted on 11-04-2014
Filed Under (技术) by waterlin

经常在 Putty 里连到服务器写代码,不像其他大多数人使用 Vi/Vim 来编辑文件,我使用 Emacs。这样问题就来了,一来现在的 Linux 发行版默认都不带 Emacs,除了安装需要耗费时间以外,emacs 这个命令使用起来过长,并且 Emacs 的配置文件如果一大,Emacs 的启动速度还是受一点影响,另外,默认的 Emacs 配色在 Putty 下也是有一点问题的。

总之,Emacs 如果想在 Putty 下使用得爽的话,还得做一番配置。今天就简单分享一下我自己在 Putty 里使用 Emacs 时做的一些最基本的配置,希望能对 Emacs 新手有帮助。

Putty 下配置 Emacs 小缓冲区 (minibuffer)的颜色

默认情况下,在 Putty 里使用 Emacs,当在 minibuffer 里有系统提示信息时,会显示深蓝色,这和黑色背景显然是不搭配的,导致提示信息看不清楚。我们肯定不会把 Putty 的黑色背景改变成浅颜色的,不然用起来多难受呀。我们只有修改一下 minibuffer 的颜色了:

这样就解决了撞色的问题。

Putty 下快速简便地启动 Emacs

终端或是 Putty 下,不喜欢反复开启或是关闭 Emacs,这个时候,可以开启 Emacs Server,并且使用 emacsclient 来把文件发送到 Emacs Server 从而实现编辑文件,当关闭了该文件后, emacsclient 才会返回,让命令行得以继续编辑。

什么,这样还是太麻烦,还有更简单的办法吗?这时可以使用 Emacs daemon

Emacs daemon 就是为了这个而诞生的。它将 Emacs 变成了一个 C/S 模型——只需要启动一个服务器在后台作为守护进程(daemon)跑着,之后启动的每个 emacs 都是一个客户端,它连接上服务器进行工作。这样一来,只要在启动服务器时运行初始化脚本,客户端启动无需运行脚本,实现启动时间从 Firefox 到 Chrome 的转变。

先用命令把 Emacs Server 跑起来:

以后在需要编辑文件的地方,直接可以用 emacsclient 来快速打开文件了:

如果你觉得 emacsclient 太长的话,可以给这个命令设置一个别名。然后我们编辑 ~/.bashrc 文件,添加如下内容:

以后就可以用 ec 命令来编辑文件了,同样也不用先手动启动 emacs server。

当然,如果你是经常使用 ssh 来远程登陆主机,那还是需要在 .bash_profile 里加上这么一条

这样的话,当你 ssh 登陆主机的时候,.bashrc 里的设置才会被引导,ec 这个命令才能代表 emacsclient。

有些人可能对 .bashrc 和 .bash_profile 的区别不是太理解,可以看看这篇文章

给你的 elisp 文件建立一个代码库

相信大家肯定是要在很多台服务器上工作,比如说生产环境、测试环境、虚拟机等等,这些机器可能是不相通的。这个时候,你要在上面使用 Emacs,没有配置文件可怎么办?有一个办法很简单地解决了这个问题,那就是找一个代码版本管理库,比如说 GitHub 或是 Bitbucket,把你的 Emacs 配置文件放在自己的代码库里,到了一台服务器上,就从里面 clone 一份 elisp 配置出来。

一般来说,你可以把你的 elisp 主配置文件放在一个名叫 common.el 的文件里,然后你可以在 .emacs 里写上 load-file 来引导真正的 emacs 配置。通过这种方式,你到了一台新机器上,只需要把 elisp 代码 clone 下来,然后引导这个目录里的 common.el 文件即可。

因为是在服务器上写东西,自然最好不要把一些和代码编辑不相关的配置放到这个代码库里,比如说 org mode 的配置等。还是专心写代码吧!

一些杂项

  1. 终端下打开 Emacs 菜单:F10 或是命令 M-x menu-bar-open;
  2. 在 Emacs 里写东西的时候,想查一下 shell 里的东西,这时可以不用退出 Emacs 而直接用 eshell,只用 M-x eshell <RET> 就可以启动,功能整合了操作系统自带的终端,退出 eshell 可以输入 exit <RET> 也可以 kill-buffer。

(0) Comments    Read More   

多年养成的习惯,我喜欢用 Emacs Org Mode 来记笔记,并且建成一个 html 工程,当笔记写到一定程度的时候,我就发布成网页,这样可以直接在本地用浏览器打开笔记转成的 html 文件来查看内容。这样还可以自定义网页的样式、用 JS 控制显示方式等,比直接在 Emacs 里阅读的体验更好。

严格地说来,我是把 Org Mode 当成一个 Wiki 在用,我并不是把笔记一股脑地放在一个 org 文件里,而是分成不同的目录,存放不同的笔记内容。这样,经过七八年的积累,都差不多有 300 个 org 文件了,并且每个 org 文件还不短。很难想象,如果把这些内容全塞在一个 org 文件里,会是怎样一个结果?这些 org 文件,还有相互链接跳转、锚链接等,其实就是构成了一个完整的 Wiki 笔记库,只不过这个 Wiki 是本地的、使用 Emacs 作为发布引擎。

也许很多人会问,你为什么不使用 Evernote、为知笔记这些现有的笔记工具,而喜欢使用 Emacs 呢?这些工具的笔记收集功能已经很优秀了,并且还自带搜索功能,干嘛这么费力气自己折腾一套生态工具出来?

我承认,Evernote、为知笔记这些笔记工具,的确非常优秀,我也在平时使用它们收集资料、记一些事情。但是这些工具的强项也就在于收集资料了,可惜编辑功能太弱。所有的所见即所得编辑工具的致命缺点,就是编辑功能太弱了,这个特性在 Evernote 上体现得太明显了。无法快速选定内容,无法快速改写格式,最不能忍受的是,清除格式就把所有的格式都清除了。而 Emacs 的 Org Mode 使用的却是自己的文本标记语言,功能强大,并且最重要的是,写起来够快速,你永远用不着去找那些格式标记符号,只要拼命写就可以了。标记语言比起所见即所得的编辑工具来说,最大的优点就在于你熟悉了这一套语法后,你就能快速地记录你的想法,并且是带格式的!这样你的思维永远不会被工具的零散操作所打断。

Evernote 这些工具对于码农来说最大的问题还在于,在记录一些代码片断时,远远不够用。比如说,我在 Emacs 里可以针对 C++,Java或是任何一种语言指定代码发布成 html 页面时的风格及高亮显示内容,可是,在 Evernote 里怎么办?我实在是觉得有点不够用。所以,码农们还是老老实实用 Emacs 或是 Vim吧,这种纯文本的方式,才适合你记录各种技术笔记,方便转换为各种格式,还有,不会把你的代码格式搞乱。

Evernote 这类笔记,还有一个我最不喜欢的地方,即它们的信息组织方式。它们的信息组织方式更像是一个时间卷轴,不停地往后写东西,虽然网上也有技巧文章说把 Evernote 当成 Wiki 来用,可是这样使用的体验实在太差了。

你难道不想在本地拥有一个像维基百科那样的笔记工具么?维基这样的信息组织方式,在我看来,是最优秀的。我同样也试过了一些本地 Wiki 工具(例如其中最方便的一款便是 MoinMoin),但是无例外有几点问题:1. 本地备份与保存数据太麻烦;2. 环境搭建也太麻烦;3. 在网页上编辑,体验太差了,还不如 Evernote。

所以,最后我定格在了 Org Mode 上,让 Emacs 成为本地 Wiki 的编辑和发布工具,而让浏览器成为浏览最终结果的地方。

说完编辑工具,再来说说为什么要做这个本地搜索工具。

很多人都说,现在不是有很多这样的工具了么?像什么 Google 桌面搜索、百度本地搜索之类的,和我这个工具差不多用途。是的,没错,所有这些工具我都尝试过,我都有这样的不满意或是那样的不满意,我还是倾向于做一个自己的工具,专门服务于我自己的笔记。这些工具都有一些这样或那样的问题,比如说默认是指定整个电脑范围的搜索,展示页面太杂乱,还有最重要的一点,这些工具都太自以为是了,以为自己想到了用户的全部,竟然都不再更新了!难道不赚钱的生意就可以这样随便糊弄么?于是,我决定自己动手,让这个工具成为自己一生的事业伴侣,哈!

我喜欢 Google 网页的体验,所以我也做了一个网页版本的文件搜索出来,在尝试了 Python、Clojure 等语言后,我最后决定还是用 C++ 来写这个玩意了。现在这个工具还很粗糙,目前只能支持单个单词的关键字查询,不过暂时本地笔记搜索足够用了。以后我会逐步完善相应的搜索功能,比如说添加关键词的组合搜索,甚至于加入我自己擅长的图片搜索功能。或许将来我会逐步加一些我自己的特殊需求进去的,比如说直接对 org mode 格式进行解析、显示并生成预览等。

想试用的请猛戳这里,帮助和使用说明可以看这里,有任何疑问都可以给我留言。

(0) Comments    Read More   
Posted on 01-04-2014
Filed Under (技术) by waterlin

一般来说,自己闷在家里开发的时候,如果需要模拟一些分布式计算或开发工作,不太可能有多台服务器的条件。自己琢磨了一下,其实有一个比较简单的办法可以来模拟这个测试环境:

  1. VirtualBox 架构几个服务器

    如果你是 Windows 64 位系统,还有 8G 内存,一般来说,虚拟两到三个 Linux 主机出来毫无压力,甚至还可以更多。

  2. hosts 文件里,设置域名解析。

    如果你的分布式是想模拟在公网的情况,那很可能是一个域名被解析到多台服务器,这个时候,你可以直接*在 hosts 里设置一个域名和多个 IP 的映射关系*,如下所示:

    如果你只是模拟实验室内网环境,那就更简单了,给你不同的虚拟服务器分配不同的域名,这样在代码里处理起来比较简单,将来也可以少修改。

大致这两步,基本上可以建立一个标准的测试环境,虽然是简陋了一点,不过强在可以随意修改配置服务器。甚至于在你有真实服务器控制权限时,你也可以先这样建立一个测试环境,等情况都摸熟悉了,再部署上线。

(0) Comments    Read More