一直在寻找好用的写作工具或平台,来来回回折腾从未休止。从CSDN、CNBLOGS的博客平台、自己建空间申请域名使用WordPress写技术文章,直到现在使用静态博客生成工具Jekyll+Markdown+Github
。从07年开始到现在,中断了不少,因为各种原因就是无法坚持下去,没有一个好的平台和工具也是其中一个原因。
文章托管在别人的博客平台上,好处就是一方面比较安全,不怕个人电脑出问题,另一方面是这些平台基本上会有相应的社区,写的文章被别人看到的几率会比较大。但是,这些博客平台都是在线编辑,在一个丑陋不堪的网页编辑框里面,小心翼翼地调整着格式,同时还要担心不要一不小心踢掉电源或者网线,刚刚写下的内容丢失(这样的事情曾经遇到过好几次)。最大的问题是,提供的编辑器多数都是半吊子,语法高亮、数学公式这些元素都不一定支持,纷繁的HTML格式总是让人有点抓狂的感觉,被这些形式的东西虐个几次之后,那里还有什么心思静下来写作。
理想的文档编辑工具
下面是我心目中理想的文档编辑工具应该具备的特点:
支持你需要的各种文档元素,支持插件或扩展。
必须支持各种必要的文档元素,最基本的段落、标题、列表、表格、图片对于多数人来说可以满足需求了。但是,对于专业性的功能最好有插件可以进行扩展,比如数学公式,代码语法高亮等等。假设你是个玩化学的?玩音乐的?能支持分子式,乐谱那就是一件很美妙的事情。
能让人专心于内容而非形式。
写东西的时候最怕的就是分心,不要让形式化的东西有太多的干扰。敲一段文字,调整格式用了大半时间,这是一件非常让人恼火和打击写东西积极性的事情。
可以进行版本控制。
玩代码的都知道劳动成果有多重要,及时保存,备份并不是最好的方式,更好的方式是把你写下来的东西进行版本控制,随意写,随意删改,大不了回退版本,各个版本的差异也是一目了然的。
跨平台。
公司的电脑是Windows系统,家里用的MacBook Pro,总不能公司没写完的东西,拿到家里来因为工具不支持跨平台,或者版本兼容问题导致无法继续写下去。
纸笔 Vs. 电子文档
如今已不是纸笔的时代了,那时候当你要开始写点东西的时候,你的面前只有空白的纸,和可以随意书写或绘制的笔,自由度极高,你可以在纸上不加思索的写下脑子里面的文字、公式和图形,抛却一些的形式主义的东西,思想才能行云流水般地从笔尖流出。如今写文章多数都是用电脑完成的,如果仅仅是纯粹的文字,如小说或者心情日记类似的,那倒也没什么,效率肯定要高于手写。但作为技术文章,有时会用到图片、代码、数学公式等多种元素,同时还要注意文章的段落布局是否合理,格式是否清晰可辨,这样一来,如果写作的工具是个半吊子,想完成一篇排版漂亮的文章是需要一番折腾了,图片得想办法找专门的软件绘制、公式需要公式编辑器类似的软件编辑完后截图,如果不支持代码高亮,直接把代码插入到文章中,那阅读的人看起来也不舒服。
写文章其实多数时候是为了整理一下思路,偶尔总结出来的东西能帮到别人那就再好不过了。我认为:
纸和笔是思考的理想工具,电子档则是记录的理想工具。
文档工具:WYSIWYG Vs. Literature Programing
WYSIWYG即所见即所得,这样的工具多的是,比如微软的Word、金山的WPS、开源的OpenOffice等。这些软件其实功能是挺强大的,强大到你其实根本不会用。要想编辑出一个看起来很漂亮的文章,你得好好下一番功夫了,公式编辑器、页眉页脚、行间距、字体、目录,列表等等,一不小心格式就乱掉了。跨平台也不是很好,版本控制基本上很难,因为相应的电子文档是二进制的,对比差异必须提供相应的差异插件才行。
Literature Programing即文字式编程,代码及其文挡编制信息交替出现,该风格不提供独立版本的代码,相反,它使用计算机程序从单个源文件中提取信息,这些源文件是那些为印刷文挡准备的文件和那些需要编译的代码文件。文字式编程背后的主要理念在于,大多数源代码是用来给人们阅读,而不是用来执行的,因此提高可读性,并让其文档编制信息与代码保持一致是至关重要的。在使用文字式编程风格显示一个程序时,我们将它拆粉成几个小部分,定义并描述各部分的用途,再讲各部分组装起来构成整个程序,另一个重要理念在于,各部分可以按照任意顺序排列,包括自上而下或是自下而上的开发模式,或是某中混合模式(而不是按照编程语言规则所指定的顺序)。总之,让写作的人专心于内容,具体形式化的排版工作交给编译器去完成。
作为一个玩命令行的程序员,其实并不是非常喜欢界面非常复杂的软件,总是感觉没有命令行来的那么爽快和直接,用命令的好处就是重复的事情可以随随便写成脚本执行,当然有些界面的软件支持宏录制,最感觉用着非常别扭。当然WYSIWYG和文字式编程各有千秋,选择适合的即可,若没有编程基础的话,使用文字式编程的文档工具会非常难,学习成本会比较高。
作为一个程序员,我的选择是:文字式编程。像写代码一样来写文章,一心关注内容,排版通过一些简单的命令交给编译器去搞定,而编辑用的工具是任何你喜欢的文本编辑器即可,比如我一直在用的:vim、notepad++、sublime。我接触过的比较好用的语言有:Markdown、LaTex、Racket Scribble。
Markdown
Markdown是一种可以使用普通文本编辑器编写的标记语言,通过简单的标记语法,它可以使普通文本内容具有一定的格式。
Markdown具有一系列衍生版本,用于扩展Markdown的功能(如表格、脚注、内嵌HTML等等),这些功能原初的Markdown尚不具备,它们能让Markdown转换成更多的格式,例如LaTeX,Docbook。Markdown增强版中比较有名的有Markdown Extra、MultiMarkdown、 Maruku等。这些衍生版本要么基于工具,如Pandoc;要么基于网站,如GitHub和Wikipedia,在语法上基本兼容,但在一些语法和渲染效果上有改动。
PS. 本文就是用Markdown写的。
LaTex
LaTeX(LATEX,音译“拉泰赫”)是一种基于ΤΕΧ的排版系统,由美国计算机学家莱斯利·兰伯特(Leslie Lamport)在20世纪80年代初期开发,利用这种格式,即使使用者没有排版和程序设计的知识也可以充分发挥由TeX所提供的强大功能,能在几天,甚至几小时内生成很多具有书籍质量的印刷品。对于生成复杂表格和数学公式,这一点表现得尤为突出。因此它非常适用于生成高印刷质量的科技和数学类文档。这个系统同样适用于生成从简单的信件到完整书籍的所有其他种类的文档。
Racket Scribber
Racket,原名PLT Scheme ,是一种计算机程序设计语言,在Lisp和Scheme基础上增加了对象、类型、惰性求值等,也是一个程序设计环境,可以让人们设计自己的程序语言。Racket其中有个包叫Scribble,简简单单几行scheme代码就能实现强大的文字处理能力。这个非常小众,之前玩过一段时间。有兴趣的同学都可以用这个实现一个静态博客生成器,绝对简单。
博客工具:Dynamic Vs. Static
Dymaic指的是动态网页,一般文章的内容是放在数据库里面的,页面的内容是根据数据库里里面存储的内容生成的,支持评论等动态功能。除了像CSDN、博客园、网易博客等平台以外,比较著名的开源博客平台应该就是WordPress了。博客文章的编辑功能基本上都是在网页上操作完成,功能一般都是比较简单,仅支持基本的文档元素,专业性的元素,必须转化成图片插入才可以。好处就是随时可以编辑,只需要打开网页即可,适合非程序专业的用户。
Static指的是静态网页,一般是用某种文字式编程语言进行写作,然后使用编译器生成静态页面。这样生成的页面几乎没什么可交互性,比如评论功能就需要挂在第三方如:Disgus、友言等类似的服务。这样的博客方式是我心目中比较理想的方式:基于Jekyll+Markdown+Github(同时支持数学公式LaTex和代码高亮)。
支持各种文档元素
公式:
MathJax
搞定
代码高亮:Pygments
、coderay
、rouge
都可以Jekyll的配置如下(使用的是Markdonw渲染引擎是kramdown):
1 | markdown: kramdown |
- Markdown的简洁语法,Sublime编辑器的免打扰模式,可以一心于内容。
- 所有内容托管在GitHub上,随意写,肆意改。
- 跨平台,无论使用的Windows、Linux还是MacBook,只要有文本编辑器就可以随时开写。
本周回顾
论文大纲。
大概理出了个思路,预计过程会比较艰辛,茫茫多的数学公式和算法,要狠狠补一把数学知识了。
同IP外挂方案的不足。
从一位安全中心的同事那里得知,破解这一行业果然是高手如云,客户端加密算法随随便便就可以被搞定。上周提出来的基于IP的判定有一个不足就是,长时间外挂制作者摸清了规则,可以多买一些网络资源,现在VPS服务貌似是很便宜的,他们可以买大量VPS,然后在上面运行脱机外挂。
博客Markdown使用kramdown渲染。
博客之前用的Jekyll版本比较老,用的Redcarpet渲染器,在Mac电脑上会有点问题,升级到kramdown后又发现了一些格式问题,比如代码不能高亮,甚至显示的乱七八糟。折腾了一下,终于恢复正常了。