蜗牛

2018-11-05
阅读 10 分钟
2.5k
此事纯属无心之举。原本是要用 awk 写一个能够自动编排文档中的参考文献和注释的工具。在酝酿情绪的过程中,打算用 MetaFun 画一幅简单的示意图。在绘图过程中,因不断嫌弃所用代码的繁琐,最终有了十余行简短的绘图代码以及能够让这些代码工作的一个小模块。

MetaFun 小传

2018-10-29
阅读 20 分钟
4.3k
ConTeXt 专事文字排版,功能匹于 LaTeX,但更易于使用,二者皆为 TeX 宏包,即二者皆基于 TeX 提供的宏编程功能,对 TeX 语言予以封装,建立更利于文字排版工作的高级语言。TeX 是一种计算机排版语言,供编排科技手稿以及著作出版印刷之用 [1] 。MetaPost 是用于绘制矢量绘图的计算机语言。

awk 小传

2018-10-20
阅读 8 分钟
3k
awk 是一种专事文本解析与处理的解释型编程语言,其解释器与其同名注 1。awk 原始版本发布于 1977 年,后于 1985 年发布第一个增强版本。在这一时期,awk 羽翼渐丰,随后成为 Unix 系统的一个标准(POSIX 标准)组件。目前 Linux 系统配备的 awk 皆为 gawk,隶属 GNU 项目,伊始于 1986 年。

大黄蜂

2018-08-23
阅读 7 分钟
4.3k
起初,在笔记本里预装的 Windows 7 系统里,我发现了它们的存在。于是我试着在设备管理器里禁用了其中一个,然后发现另一个也不再工作了。这个时候我才亲自接触了一种技术的存在,也因此明白了 Linux 之父 Linus 当年为何对 Nvidia 公司竖中指。这是六年前的事了,很不凑巧,我得到的这部笔记本也是六年前的机器。

书呆子的音乐理论

2018-08-11
阅读 10 分钟
5.6k
音乐的其他知识就让我觉得极为混乱了。为什么要有 12 个音,为什么只用 7 个字母来表示它们?调号从何而来?为什么维基百科上对这些知识的介绍只有学过其他乐理知识才能读懂呢?

对齐

2018-08-10
阅读 5 分钟
3.3k
按照中文排版惯例,段落首行缩进两个字符的宽度。但是,像左引号这样的标点符号,当它出现在段落之首时,所体现的段落缩进在视觉上就会大于两个字符的宽度。这样的标点符号出现在段落中任何一行的行首,都会导致类似的问题。

解析

2018-08-10
阅读 7 分钟
3.2k
大千世界,茫茫人海,我总是可以一眼便认出你。这个过程里包含着一个叫做解析的过程。计算机程序也能够通过这样的过程,在一堆文本中认出一些特定形式的文本。在短暂又漫长的计算机语言编译原理的发展过程中,诞生了很多种形式化文本解析方法,PEG 是其中一种。

改造

2018-08-10
阅读 5 分钟
2.2k
现在,我基本熟悉了 pretty-c 模块 [1]。熟悉,也许是为了控制甚至改变,否则没理由要去熟悉。请想一想自己对亲人、爱人和朋友曾经做过的以及正在做的那些事吧!于是,我要对 pretty-c 模块进行一些改造。

五颜六色

2018-08-10
阅读 19 分钟
2.5k
在看我的 github 主页(据说有识之士正纷纷将自己的项目迁往 gitlab)的时候,发现了以前 fork 的一个项目 pretty-c。这个项目为 ConTeXt MkIV 实现了一个模块,用于解决 C 代码的高亮(Highlighting)问题。

计算机科学:一门失传的艺术

2018-08-10
阅读 2 分钟
3.5k
打扰了。犬子考入肯尼索州立大学,有志于攻读计算机科学学位,但是有两年课程,他不太喜欢上,为此而纠结。亚特兰大有三所学院只专注于技术,提供 8 到 16 周的沉浸式课程。在计算机科学领域,对于这种办学形式怎么看?四年制的学位更有价值吗?

DOT

2018-03-16
阅读 5 分钟
2.9k
马尔克斯的《百年孤独》这本书的主角是一个家族。这个家族的谱系,就可以构成有向图。若未读过《百年孤独》,不妨去读几遍。虽然也算世界名著,但应该很快就能看完。有不少人一年能读几百本书,《百年孤独》总是会出现在他们所列书单之内。下面就尝试用 DOT 语言描述一下这个家族的谱系。

文化编程

2018-03-16
阅读 3 分钟
2.9k
文化编程(Literate Programming)由计算机学界名宿 Donald Knuth 所创。其名,大陆译为「文学编程」,甚缪。将程序视为蛮夷,以文教化,Literate Programming 之意大抵如是。

三生万物

2018-01-05
阅读 2 分钟
3.4k
若对续延有所认识 [1],Scheme 的阴阳谜题就很容易理解了。 下面我先逐步构造出来这个谜题,然后从宏观的角度略微解释一下。事实上,也只能作宏观解释,否则纵身跳入续延的洞里,就更不容易弄清楚了。 从最简单的函数开始: {代码...} 这个函数什么也不干,只是将自己接受的参数返回。 倘若将这个函数的求值表达式所形成...

续延,有什么难的……

2017-12-31
阅读 3 分钟
3.7k
学 C 语言,拦路虎是指针。学 Haskell,拦路虎是单子(Monad)。学 Scheme,拦路虎是什么呢?初学者觉得是层峦叠嶂的括号,实际上是续延(Continuation)。

单子,想弄不懂都很难

2017-12-15
阅读 3 分钟
5.2k
C 语言里没有现代程序员热衷于讨论的那些东西。 不过,那些东西不是原本就没有么? 下面我尝试用 C 语言来写一个单子(Monad)。 看下面这段代码: {代码...} 在 C 语言里,这是个结构体,而且是一个似乎很无聊的结构体。这种结构体能用来做什么呢? 可以作为函数的返回值类型。例如: {代码...} 假设 foo 像下面这样调...

<译> 自然变换

2017-12-11
阅读 11 分钟
9.5k
我们已经讨论过,函子可以在维持范畴结构的前提下实现范畴之间的映射。函子可以将一个范畴嵌入到另一个范畴,它也可以让多个范畴坍缩为一个范畴且不会破坏范畴的结构。凭借函子,我们可以在一个范畴之内构建另一个范畴。源范畴可视为目标范畴的部分结构的模型或蓝图。

程序的基本形状

2017-12-06
阅读 2 分钟
4.1k
一时兴起,用了差不多十天的时间,为「不懂编程」的人写了一系列的形散神不散的散文。这是我在这一年里做的我觉得最有意义的一件事,当然在我身边的人看来,这可能是我在这一年里做的最不务正业的事了。

无所遁形

2017-12-06
阅读 3 分钟
2.8k
按语:我任何路边的摄像头下走过的时候为「不懂编程的人」写了这一系列文章的最后一篇,整理于此。它的前一篇是《咒语》,介绍了如何在 Emacs Lisp 程序的世界里登坛作法,呼风唤雨。

咒语

2017-12-06
阅读 8 分钟
2.8k
按语:我在围观茅山道士跳大神的时候为「不懂编程的人」写了这一系列文章的第十一篇,整理于此。它的前一篇是《从混乱到有序》,介绍了如何用 Emacs Lisp 语言写一个快速排序程序。

从混乱到有序

2017-12-05
阅读 11 分钟
3.4k
按语:我在一锅汤里为「不懂编程的人」写了这一系列文章的第十篇,整理于此。它的前一篇是《长长的望远镜》,作为《无名》一篇的补充,介绍了 Emacs Lisp 的动态域与词法域。

长长的望远镜

2017-12-05
阅读 3 分钟
2.7k
按语:我在送孩子去幼儿园的路上为「不懂编程的人」写了这一系列文章的第九篇,整理于此。它的前一篇是《无名》,讲述了如何一步一步「推演」出 Y 组合子。

无名

2017-12-05
阅读 10 分钟
2.9k
按语:我从悬崖上跳了下去,在除了坠落没别的事可干的过程中为「不懂编程的人」写了这一系列文章的第八篇,整理于此。它的前一篇是《周游抑或毁灭世界》,讲述了递归函数的基本用法。

周游抑或毁灭世界

2017-12-05
阅读 2 分钟
2.8k
在 Emacs 里,世界就是缓冲区。(goto-char (point-min)) 可以让准备周游世界的光标跳到世界的起点,同理 (goto-char (point-max)) 可以让光标跳到世界的尽头。于是,光标就以光的速度周游了一遍世界。

红药丸,还是蓝药丸

2017-12-04
阅读 4 分钟
5.6k
用 Emacs 打开 init.el 文件,将上面的代码复制到 init.el 文件的尾部,然后将光标移动到 murphis 这个函数定义的末尾,执行 C-x C-e。这样 Emacs Lisp 解释器就知道了 murphis 这个函数的定义了。

周而复始

2017-12-04
阅读 3 分钟
3.2k
无论是汽车、轮船还是火箭,所有的交通工具里面,都有一个被称为发动机的东西。即使我们徒步或骑着单车,这里面也有一个发动机——我们的心脏。计算机里面也有个发动机,就在 CPU 里。

原子与虚空

2017-12-04
阅读 3 分钟
4.2k
到现在为止,我们已经大致见识了在 Emacs Lisp 语言中如何定义一个函数,也见识了interactive、insert、read-string、list 等函数的基本用法。我几乎未对这些函数给出细致的解释,但是通过几次简单的实践,它们的功能应该是显而易见的。不过,这种显而易见是建立在对编程的基本知识有所了解的基础之上的。

勤劳,还是懒惰?

2017-12-04
阅读 3 分钟
3.6k
但是一旦弄懂了如何使用 Emacs Lisp 语言定义一个函数,以及 interactive 与 insert 的用法,我们就可以在很多时候从一个勤劳的人蜕变为一个懒惰的人。

第一声问候

2017-12-04
阅读 6 分钟
3.5k
理解了 Emacs 身为计算机的本质之后,在 Emacs 里编程就顺理成章了。不过,在此之前,还需要略微介绍一下 Emacs 最基本的操作。

Emacs 是一台计算机

2017-12-04
阅读 2 分钟
5k
按语:这是我在幽暗的山洞里为「不懂编程的人」写的系列文章的第一篇,整理于此。在这篇文章之前,有一篇前言《程序的基本形状》,它也兼职了目录功能,便于让你纵览这个系列文章的全貌。

C 程序眼中的 Unicode

2017-11-21
阅读 12 分钟
8k
去年写了一篇文章「在 C 程序中处理 UTF-8 字符串」,介绍了如何使用 GLib 提供的 UTF-8 字符串处理函数来实现基本的 UTF-8 文本处理。不过,GLib 是一个功能比较全面的 C 程序库,C 字符串处理仅仅是它的一个很小的模块。属于 GNU 项目一部分的 libunistring 是更专注 Unicode 字符串处理的 C 库,使用 GPL/LGPL 双协议...