米米的博客

做了一点微小的工作

Mac 版 Chrome 自带双指手势前进后退功能,也就是在一个页面已经水平滑动到尽头后,继续向前 / 向后滑动,就会触发前进 / 后退。这个功能名为「Overscroll history navigation」,其设计初衷不错,只是容易误操作,笔者一直想把它关闭了。但 Chrome 的设置里没有该选项,也没有从 chrome://flags/ 中找到相关内容。
在网上搜索一番后,发现有两种方法可以进行设置。

系统设置

其实 Chrome 对于手势的默认行为是遵循 Mac 的系统偏好设置的。在「系统偏好设置」 → 「触控板」 → 「更多手势」中,禁用「在页面之间轻扫」即可。

禁用「在页面之间轻扫」

命令行设置

前一种方法的设置也会影响到其它的应用。如果只想修改 Chrome 的行为,那么可以通过命令行禁用手势。操作方法是:

禁用鼠标手势

1
defaults write com.google.Chrome AppleEnableMouseSwipeNavigateWithScrolls -bool false

禁用触控板手势

1
defaults write com.google.Chrome AppleEnableSwipeNavigateWithScrolls -bool false

然后重启 Chrome 即可生效。


参考文章:How to Disable Swipe Navigation Gestures in Google Chrome for Mac

今天是圆周率日,我们就来讲一讲关于圆周率的故事吧。
很久以前,笔者看到了一段惊为天人的代码,可以求出圆周率的前 800 位(修改参数可以实现任意精度):

1
2
3
int a=10000,b,c=2800,d,e,f[2801],g;main(){for(;b-c;)f[b++]=a/5;
for(;d=0,g=c*2;c-=14,printf("%.4d",e+d/a),e=d%a)for(b=c;d+=f[b]*a,
f[b]=d%--g,d/=g--,--b;d*=b);}

经过考证,这段代码的作者是 Dik T. Winter。下面我们来看看它是如何工作的。

在 C 语言中,for 循环和 while 循环可以互相代替。这里涉及到 for 循环的执行顺序。例如

1
2
3
for (statement1; statement2; statement3) {
statements;
}

上面的 for 语句可以用下面的 while 语句来代替:

1
2
3
4
5
statement1;
while (statement2) {
statements;
statement3;
}

而逗号运算符和 -- 运算符的功能也是需要注意的。要写出这样怪异的 C 程序,逗号运算符无疑是一个好的助手,它的作用是:从左到右依次计算各个表达式的值,并且返回最右边表达式的值。

了解这些内容后,我们将这段代码中的 for 循环展开,等价地写为 while 的形式。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <stdio.h>
int a = 10000, b, c = 2800, d, e, f[2801], g;
main() {
for (int i = 0; i < c; i++) {
f[i] = a / 5;
}
while (c != 0) {
d = 0;
g = c * 2;
b = c;
while (1) {
d += f[b] * a;
g--;
f[b] = d % g;
d /= g;
g--;
b--;
if (b == 0) break;
d *= b;
}
c -= 14;
printf("%.4d", e + d / a);
e = d % a;
}
}
阅读全文 »

真·红黑树

0%