喜欢玩饥荒的朋友可能都知道,朋友在他的电脑上开一个服务器,你就可以加进去玩,那为什么需要专有服务器呢?原因很简单:家用电脑的性能和网络都不是很 OK(如果你的计算机性能和网络都不错,那就不需要专有服务器,除非你想有一个一直不关闭的服务器,让小伙伴在你下线的时候也能玩)。因为饥荒需要大量的即时演算,可能 1 个人自己玩还能勉强可行,一旦人多就卡出天际。网络也是一方面,作为服务器的电脑需要有不错的上行带宽,而运营商给的上行一般都很低。所以为了和小伙伴愉快地玩耍,我们要搭建一个专属服务器。
我需要内核源码
我们可能经常会用到 Linux 内核源码,因此 CentOS 在仓库里提供了内核源码的支持。本文是 CentOS 官网的 HowTos,介绍了如何在 CentOS 里方便地下载内核源码。最初由 JohnnyHughes 创建了该 HowTos,现在由 AlanBartlett and AkemiYagi 维护。
关于除数为常量时的快速取余的更多乐趣
在编程中,编译器经常会把除法优化掉,取而代之的是耗时更低的指令,尤其当除数为常量时。我最近写了一些关于除数为常量时的快速取余的内容(译注:翻译内容在 这里)。我有提到如果直接算出余于是非常有效的,而不需要先计算商(就像是除数为常量时编译器做的那样)。
除数为常量时的快速取余法:优于编译器优化和libdivide
现代处理器的所有指令耗时并不相同。加法和减法比乘法耗时少,而他们都比除法耗时少。因此,编译器经常将除法替换成乘法。大致来讲,它就是这样工作的。假设你想要用一个常量 d 去除一个变量 n,你可以得到这样一个等式 n/d = n * (2^N/d) / (2^N)
。而如果我们使用无符号证书的话,除以 2 的次幂(/ (2^N))可以实现成右移操作,这就编译成一条指令了:因为底层硬件使用 2 进制。因此,如果我们把 2^N/d 事先算出来,就可以使用一次乘法和一次移位来计算 n/d。当然,如果 d 不是 2 的次幂,2^N/d 可能算出来的不是整数。但是只要 N 足够大1,我们就可以近似认为 2^N/d 是一个整数,并能准确计算范围内所有可能的n的余数。我相信所有的带优化的 C/C++ 编译器都会使用这个把戏,无论什么处理器架构,这通常都有用。
多线程漫谈:走向并发的世界,一步一个脚印
现代计算机具有一次执行多个操作的能力。得益于硬件的精进以及更加聪明的操作系统,这个特性会让你的程序跑得更快,无论是执行速度还是响应速度。
Tox: 点对点即时通信
Tox 是一个点对点的即时通信协议,也包括一个通过 Opus 实现音频流,通过 VP8 实现视频流,并使用基于 NaCl 进行开发的 libsodium 加密库进行加密。
Citra: 一款 3DS 模拟器
世面上有很多游戏主机模拟器,比如像街机模拟器 MAME、NES 模拟器 Fceux,以及我们今天介绍的 Nintendo 3DS 模拟器 Citra 等等。他们中的一些是为了怀旧,比如 MAME 和 Fceux,有了他们,我们可以在电脑上快乐地玩耍几十年前的游戏;也有一些是为了更高清的游戏体验,比如今天介绍的 Citra。
IP 所在地查询 -- GeoIP
通常我们想要知道某个 IP 具体的地理位置,所以网络上出现了很多 IP 地理位置查询的服务,比如我们常用的 cip.cc 和 ipip.net 等。当我们想要在项目中使用时,通过 HTTP 查询的方式就不可行了,因为这通常是这些网站提供的收费服务。比如 ipip.net,其免费 API 每秒最多 5 次请求。
多余的话
瞿秋白
Linux 系统上程序的退出码
退出 | 含义 | 例子 | 注释 |
---|---|---|---|
0 | 正常退出 | echo “hello” | 正常 |
1 | 普通错误 | df -abcd | |
2 | shell内建的错误 | empty_function() {} | 缺少关键字或命令,或者权限问题 |
126 | 调用的命令不可执行 | /dev/null | 权限问题,或者是不可执行的命令 |
127 | 找不到命令 | not_command | 可能命令不存在,或者未加入环境变量$PATH 中 |
128 | 无效的退出码 | exit 6.18 | exit只接受整型退出码 |
128+n | 致命的信号n | kill -9 $PPID of script | 返回137(128+9) |
130 | 被Ctrl-C终止 | Ctrl-C | Ctrl-C是错误信号2,(130=2+128) |
255* | 退出状态超过范围 | exit -1 | exit只接受0 ~ 255范围的退出码 |