用 Makefile 记录编译次数
如果您喜欢不用 IDE 写代码, Makefile 可能是您无法避免的东西。然而用朴素的 make 自动记录编译次数, 实现起来可能需要一些技巧。
我所见到的大多数解决方案都依赖於专门的脚本, 这种方法既不优雅也不便於移植。这裡我将给出我的方法, 这个方法只依赖 echo 和 grep (当然, 还有 GNU make), 这些工具几乎在所有平台上都可以使用。
利用 make 计数的主要障碍在於它缺乏数值运算。尽管人们通常用数码表示数字, 但数字也可以利用反覆出现的同一个符号来编码——比如, 两个苹果携带了信息 ‘2’。
因此, 我们可以让 make 做它能做的最简单的事情——每次向一个文件中添加一个固定的符号——然後用 grep 来统计这个符号出现的次数, 也就是编译次数。
下面是一个完整的 Makefile, 供您尝试。它利用文件 .BuildCounter 来存储编译次数, 並向文件 BuildCount.inc 写入一行 BuildNumber = N;, 其中 N 为编译次数。
__COUNTER_FILE__ = .BuildCounter __COUNTER_INC_FILE__ = BuildCount.inc ifeq ($(wildcard $(__COUNTER_FILE__)),) $(shell echo > $(__COUNTER_FILE__)) endif $(shell echo $$ >> $(__COUNTER_FILE__)) $(shell echo BuildNumber = $(shell grep -c -F $$ $(__COUNTER_FILE__))\; > $(__COUNTER_INC_FILE__)) default: @more $(__COUNTER_INC_FILE__)
单击此处下载该文件。
Counting Build Number with Makefile
If you prefer writing code without an IDE, Makefile is something you probably can’t avoid. With plain make, however, automatic build number counting can be tricky to implement.
Most of the existing solutions (to my knowledge) rely on ad hoc scripts that are neither elegant nor portable. Here I’ll give my solution that relies solely on echo and grep (and, of course, GNU make), virtually available on all platforms.
The major obstacle to counting numbers with make is the absence of numerical operations. While a number is usually represented with a numeral, it can also be encoded with repeated usage of a constant symbol—for example, two apples carry the information ‘2-ness’.
Therefore, the idea is to make make do the simplest it can do—adding a symbol to a counter file each time—and use grep to count the number of appearance of that symbol, i.e. the build number.
Below is a complete Makefile for you to try out. It uses the file .BuildCounter to store the build number, and writes the string BuildNumber = N; to the file BuildCount.inc, where N is the build count.
__COUNTER_FILE__ = .BuildCounter __COUNTER_INC_FILE__ = BuildCount.inc ifeq ($(wildcard $(__COUNTER_FILE__)),) $(shell echo > $(__COUNTER_FILE__)) endif $(shell echo $$ >> $(__COUNTER_FILE__)) $(shell echo BuildNumber = $(shell grep -c -F $$ $(__COUNTER_FILE__))\; > $(__COUNTER_INC_FILE__)) default: @more $(__COUNTER_INC_FILE__)
Click here to download this file.
隐式愤青
‘愤青’ 一词, 不论左右, 似乎都被看成一个贬义词。愤青之所以令人反感, 主要原因是他们从不就事论事地思考问题, 而是用既有的立場來判断一個人或观点的优劣对错。
你居然不主张中共下台吗? 那你就是五毛, 愚民, 既得利益者。你居然公开污蔑毛主席? 那你就是人民的叛徒, 西方反华势力的走狗。
愤青的为数众多是宣传者 (propagandists) 成功的标志。
你是愤青吗?
毫无疑问, 很少有成年人自认为愤青。
不过一些作者正在利用各种技巧, 让成年读者像愤青一样思考, ——只要 ‘立场’ 选择 ‘正确’, 只要结论是反对现有的存在, 他们的文章就会得到认同, 至少不易受到公开的质疑。
这裡给出众多技巧之一: 首先在 13 亿中国大陸人口中找出一部分, 比如 5%; 然後选取一个不大不小的金额, 比如 ¥3,000 元人民币; 然後将这两者相乘, 你很可能得到一个很大的数字, 比如 ¥195 亿元人民币。实际上, 只要前面的比例不低於 1%, 後面的金额不低於 ¥100 元人民币, 结果就不比 13 亿小。
对於 ¥195 亿元人民币, 想必很多人只有一个模糊的直观概念: 这是一笔数额很大的款项。这时, 无论这个数字有沒有意义, 只要再去说服读者这笔钱花得不值, 你就能激起读者的愤青心理, ——这个国家地区沒救了。
要查看一个完美的例子, 单击此处。
就事论事
您认为自己生活的地方是一个糟糕透顶, 无药可救的地方吗?
如果您的回答是 ‘是’ 或 ‘否’, 请重新思考一次。
面对铺天盖地的负面新闻, 作者仍然以为, 这种问题是不可以一概而论的。如果您以为未经审查的媒体——特別是民间媒体——由於持某一立场而可以完全受信, 我以为, 正是由於同样的想法, 中国才有了这种曲折的历史, 大陸才有了今天荒谬绝伦的一切。
如何礼貌地对待他人的作品
当看到有趣或有用的文章时, 您可能非常希望将其与您的朋友分享。当您利用各种社交网路 (social networks) 提供的链接共享功能时, 您所做的不仅是分享有价值的信息, 而且也是对原创作者的肯定与鼓励。
另一些时候, 您可能希望将喜欢的文章——通常是以全文转载的形式——转发到一些论坛, 或是您自己的网站上。然而, 如果转载方法不当, 您将不仅损害原创者的利益, 更践踏自己人格的正直 (integrity)。
全文转发有错吗?
首先, 虽然全文转发可能影响原载网站的搜索排名, 但多数作者通常是不禁止这种行为的。
如果作者许可您以 “署名、无衍生作品、非商业使用” 的方式使用作品, 那么您完全拥有转载的自由, 只是不应该删除或替换作者称呼和原文出处、不应该以作品为基础创作衍生作品、不应该利用作品赚钱, ——更不能粗鲁地利用自己的许可替换作者的许可。
如果被作者禁止, 那么您就不能进行全文转载; 如果您沒有看到明显的版权声明, 那么原则上, 您也不应进行全文转载。
如何放置原文链接
无论是全文或部分转载, 原文链接通常都将是不可缺少的一部分。不过, 原文链接应被放在文章的开头还是结尾呢?
回答这个问题可能需要一些技巧。我建议您试着思考这个问题: 如果您是一位作者, 您希望读者首先看到指向自己网站的链接, ——这样如果读者乐意的话, 他说不定还会来看看其他文章, ——还是等到读完文章後, 才看到 (或者忽略掉) 这个链接?
事实上, 同样的问题也适用於一些专门进行全文翻译网站, ——这些网站实际上不提供原创作品。幸好那超出了本文的兴趣范围, 故从略。
“为甚么我应该在意?”
仅仅因为有人不在乎这些问题, 或者因为他们把您的 “正直” 称为 “幼稚”, 并不意味着您的想法是错的。如果您也是一个小型独立博客的作者, 您知道我在说甚么; 如果您一直都是一位读者和共享者, 那么正是您的所作所为塑造了整个简体中文网路世界的风气。




