1 前言

Samson的博客开通了。
作为码农,一直想要有个博客作为学习与积累的记录。
在尝试过多种主流博客套路之后,终于选定了使用 emacs + org-mode + nikola + github pages 组合的技术方案。

2 个人博客的需求整理

在开通博客的想法产生之后,我认真整理了自己的需求点,详细如下:

  • 使用纯文本格式作为内容载体,使用网页作为内容展示
  • 自定义程度要高,要能够根据自身的需求进行修改
  • 标签功能,能够分类所记录的知识技能
  • 在博文的内容中能够插入语法高亮的代码段
  • 编写博客使用的工具尽可能最大化利用现有工具链(emacs, org-mode)
  • 要能够在方便多平台下(Windows/Linux/macOS)的调试
  • 源代码托管在Github平台上

3 折腾过的方案

生命在于折腾,我挑选了一些目前常见的博客方案进行了尝试和比较。

3.1 Markdown + Jekyll

这种方案是GitHub Pages所推荐的方案,也是我最先接触到的方案。

  • 与GitHub的深度集成,如果直接fork一个配置好的工程,你甚至都不用在自己电脑上安装Jekyll,在每次完成内容编写之后,将更改commit提交至GitHub,GitHub Pages会自动将内容转化为静态网页。
  • 这种方案需要我放弃已经使用了很久的org-mode笔记记录方式,使用markdown作为内容的载体。
  • 官方文档中描述Jekyll在windows目前并没有很好的原生支持。

3.2 org-mode + Jekyll

我还是想使用emacs+orgmode做为内容产出的方式。

  • 使用org-mode导出html功能,能够使用使用org-mode格式书写博客。
  • 增加了导出为html的这道流程,也着实是一个痛点,如果能够直接将org-mode作为内容的源文件就太好了

3.3 org-mode + org-publish / org-mode + o-blog

后来我开始尝试寻找仅使用emacs就能完成内容编辑与网页生成的方案。

  • 这种简洁的方案无疑是最符合我的预期的。
  • 这种方案的优点是完全使用现有工具链(emacs)就能够完成博客的发布,减少了学习其他工具的成本。

3.3.1 org-publish

  • 能够直接将org文件导出为html文件,也可以通过css进行样式上的美化。
  • 生成的网页还是太复古了,而且没有tag功能,以后进行内容查找也不会很方便。

3.3.2 o-blog

  • o-blog的作者已经有很长一段时间没有维护这个项目了,如果使用o-blog可能意味着需要对o-blog的代码进行一些优化。我需要学习一些lisp相关的知识和web前端相关的知识,这些与我目前的学习内容计划还是有一些出入的,会打破我现有的计划。
  • o-blog-v2.6 版本上增加了一些新功能,但是会导致ominibar在打开过程中出现显示问题,对于强迫症的我来说肯定是不能忍的。
  • o-blog-v1 从网页上来看,还是没有什么让我不满意的地方的。o-blog-v2的那些新特性(目前知道的是搜索框),我目前还不是特别需要。所以,总体上来说o-blog-v1对于我也是一个不错的选择,如果投入精力去hack一下 lisp 和 web-front-end 相关技术,o-blog-v1可玩的地方还是很多的。

4 最终选用的方案

emacs + org-mode + nikola + github pages 这是我最终的方案。

  • emacs 是我一直在打磨的利器,使用emacs一年以来,自己的 .emacs.d 配置也逐渐稳定下来,我相信emacs的潜力还是很大的,是一个可玩度非常高的玩具。
  • org-mode 作为emacs上的masterpiece,用它来记笔记写文档简直就是一种享受。
  • nikola 支持org-mode格式,这是最重要的; 另外,实现语言是Python,我近期有学习python的计划,有可能会读一读相关源码。
  • github pages 作为程序员必备技能,能够直接托管静态网页,也没有流量限制,真可谓是省时、省力、省心又经济。