JSMinNpp 下载统计的一些有趣数字

从 2010 年 9 月 10 日开始(原来研究生一入学就开始了,我都不记得了),至目前,前十名是:

  • 美国
  • 德国
  • 中国
  • 俄罗斯
  • UK
  • 法国
  • 印度
  • 巴西
  • 加拿大
  • 意大利

只有一次下载的是:

  • 斯威士兰
  • 格陵兰
  • 法属圭亚那
  • 马拉维
  • 维京群岛(邓肯老家)
  • 马里
  • 安哥拉
  • 莫桑比克
  • 尼日尔
  • 法罗群岛
  • 法属波利尼西亚
  • 根西岛
  • 百慕大
  • 曼岛(Isle of Man,男人之岛:))
  • 开曼群岛
  • 安圭拉

台湾地区 1,150 次,香港 754 次,澳门 12 次。

阿富汗 27 次,伊拉克 21 次,伊朗 294 次,巴勒斯坦 41 次。

改用 Android 之后 II

在换到 Moto Defy 进入 Android 阵营之后,曾经写过一篇博客,对比 iOS 系统和 Android 系统。这篇博客被一些网站转载(1, 2)后,被各种“大神”们猛喷

现在 Defy 已经用了快半年,期间也接触过一些别的 Android 手机,最近实验室的项目更是进入了 Android 开发领域,是时候再写一篇,进一步写一写使用的感受。这次就不做对比了,因为手头没有运行 iOS 5 的苹果设备,而且也没有怎么用过新的 iOS。

先看一看之前那篇中写到的观点。

  • 同步

我始终还是认为,iOS 的同步是一个很好的方法,在音乐和视频传输、应用程序安装和数据备份方面都有明显的优势。

继续阅读“改用 Android 之后 II”

ZOIZ

2012 到了,那个啥,玛雅人预测要地球毁灭了?如果真的是这样的话,还有很多事情没有干呢。

2011 就是不断的南京-景德镇-南京来回的跑,实验室的项目真是相当的麻烦。暑假中间去趋势科技呆了一周,认识了不少大神,不知道明年是不是就从了趋势,不过也许外面的天空会更蓝一些。JSMinNpp 如预测的超过了 100,000 次下载,不过持续更新的也就 24% 左右。11 年还首次做了小规模的公开 PPT 演讲,其实开口说话也没有那么难。

技术的道路是走得比较顺利,不过感情方面持续不给力,好人卡有越拿越多的势头。眼看世界末日就要到了,为了人类的未来,还得继续加把劲。

Google stackoverflow in Firefox

自从发现了 stackoverflow.com 就无法自拔,csdn.net 之流完全无法何其匹敌。不过 stackoverflow 自己的搜索还是不太靠谱,于是每次都是用 Google 的 site 参数搜索 stackoverflow.com,用起来比较麻烦。于是做了个 Google Stackoverflow,可以在 Firefox 的搜索栏里面直接用 Google 搜索 stackoverflow。正在审核中,不过已经可以尝试安装了。

x=x++;

之前囧哥曾经写过一个日志,讨论一个问题,就是在c/c++里面这个代码的结果

x = 1;
x = x++;

执行后,x是2。这个结论还是比较显而易见的,不过编译器到底是怎么处理这段代码的呢?
我用 Fedora 15 自带的 gcc -S -O0 将 .c 编译成 .s 文件,来看看究竟编译器干了什么。

int x = 13; // 为了看汇编更方便,赋值13
x = x++;

被翻译成如下的汇编代码:

movl	$13, -4(%rbp)  ;x=13
addl	$1, -4(%rbp) ;x++
movl	$0, %eax
popq	%rbp

从汇编码来看,gcc 是这样理解x = x++的:

x = x; // 被优化掉了
x++;

也就是对于 int 这种 trivial 类型,= 的优先级高于后置++。 先赋值,再做后置++。
我们再来试几个代码:
第一组

int x=13;
int y;
y = x++;

翻译结果:

movl	$13, -4(%rbp) ;x=13
movl	-4(%rbp), %eax ;eax=x
movl	%eax, -8(%rbp) ;y=eax
addl	$1, -4(%rbp) ;x++
movl	$0, %eax
popq	%rbp

————————————————–
第二组

int x=13;
int y;
x = y = x++;

翻译结果:

movl	$13, -4(%rbp) ;x=13
movl	-4(%rbp), %eax ;eax=x
movl	%eax, -8(%rbp) ;y=eax
movl	-8(%rbp), %eax ;eax=y
movl	%eax, -4(%rbp) ;x=y
addl	$1, -4(%rbp) ;x++
movl	$0, %eax
popq	%rbp

————————————————–
第三组

int x=13;
int y;
y = ++x;

翻译结果:

movl	$13, -4(%rbp) ;x=13
addl	$1, -4(%rbp) ;++x
movl	-4(%rbp), %eax ;eax=x
movl	%eax, -8(%rbp) ;y=eax
movl	$0, %eax
popq	%rbp

————————————————–
从各个例子中可以看出,gcc 对于 int 这种 trivial 类型,认为 = 优先级高于后置++,低于前置++。

赋值先于后置++,后于前置++。

即使复杂点的例子x=((x++)+(y++)),相当于:

x=x+y;

x++;

y++;