Dark Side cat /dev/brain

fvwm 配置终于可以见人了

昨天搞定了几个让我郁闷很长时间的问题,现在fvwm的配置终于可以见人了。放到了github上,文档还没有整理。README和INSTALL之类都是别人的(因为我的配置其实就是一个大杂烩),等有时间再说吧。

此外修改了conkyrc,昨天才发现,我的conkyrc已经用了2年了。不过新版的conkyrc有点问题,修复之后再放出来吧。

阅读全文

test,中括号,双中括号的效率

bash的条件表达式中有三个几乎等效的符号和命令:test,[]和[[]]。通常,大家习惯用if [];then这样的形式。而[[]]的出现,根据ABS所说,是为了兼容><之类的运算符。如果仅仅是这样的话,在[]中加入就好了吧?刚才看见Bash Cures Cancer上的文章,比较了一下它们之间的效率,发现[[]]是最快的。

$ time for i in {1..100000}; do test -d .;done

real    0m0.658s
user    0m0.558s
sys     0m0.100s
$ time for i in {1..100000}; do [ -d . ];done

real    0m0.609s
user    0m0.524s
sys     0m0.085s
$ time for i in {1..100000}; do [[ -d . ]];done

real    0m0.311s
user    0m0.275s
sys     0m0.036s

看来,在不考虑对低版本bash和对sh的兼容的情况下,用[[]]是一个不错的选择。

阅读全文

关于“Argument list too long”

今天又看见这个信息了,虽然已经知道是glibc的限制,但还是好奇了一把,找了找资料。最后终于发现是ARG_MAX。

阅读全文

一段神奇的代码

在linux上执行如下代码(gcc < 4.1.2)。

#include <stdio.h>
#include <stdlib.h>

void main (void) {
                int i=2;
                if( -10*abs (i-1) == 10*abs(i-1) )
                                printf ("OMG,-10==10 in linux!\n");
                else
                                printf ("nothing special here\n");
}

因为 gcc 在优化 abs() 的时候,认为 Aabs(B) == abs(AB) 造成的。

这个 bug 对应的 patch 在 这里

阅读全文