本来以为 archlinuxarm.org 上有 Mele A100 的安装指南装起来会方便些,但实际操作过程中仍然踩了一些坑,这里记录一下备查。
Ubuntu 11.10 (Oneiric) 上如何编译带 utrace 补丁的内核
首先准备 linux 内核编译环境:
sudo apt-get install fakeroot build-essential crash kexec-tools makedumpfile kernel-wedge kernel-package
sudo apt-get build-dep linux
sudo apt-get install git-core libncurses5 libncurses5-dev libelf-dev asciidoc binutils-dev
Alienware 惊魂记
Alienware M17x R3 已经到手很久了,本来配置的 AMD Radeon HD 6990M 是准备拿来玩 GPGPU 的。但由于 Alienware 坚持使用 Muxed Graphics Switch(人工切换集/独显比较可靠),而 Linux 下的新版本 AMD Catalyst 驱动只支持 Muxless Graphics Switch,使得这块卡在 Linux 下一直得不到很好的应用。
64 位 Ubuntu 11.10 下安装 PPStream
PPStream 的 Linux 版本只出了 i386 架构的安装包,但由于 64 位 Ubuntu 11.10 的包划分有所变化,直接安装 PPStream 官方 deb 包会提示依赖问题。在我的机器上通过以下步骤可以成功安装 PPStream:
[zz] Optimizing TCP Socket Across Data Centers
原文链接:http://sna-projects.com/blog/2011/01/optimizing-tcp-socket-across-data-centers/
一点评注: 广域网中高延迟带宽积链路的基本优化方式就是增加 TCP 连接的确认窗口大小,确认窗口大小在 Linux 下直接对应于 socket send/recv buffer size 设置,大于 64 KB 的窗口大小是 TCP 扩展选项,需要在 3-way handshake 时进行双方协商,因此对 socket send/recv buffer size 的设置必须在 listen / connect 之前进行,否则在 TCP 连接建立以后就无法使用大于 64 KB 的窗口了。看 man 7 tcp 就能发现相关说明。
另外应用程序能自行设置的最大 send/recv buffer size 同时收到 kernel 配置项 net.core.rmem_max
/ net.core.wmem_max
和 net.ipv4.tcp_rmem[2]
/ net.ipv4.tcp_wmem[2]
的约束,设置很大的 buffer size 前先看看需不需要提升这些限制。
Baidu 首页手写输入法交互数据格式分析
手写识别接口以 HTTP POST 方式访问 http://hw.baidu.com , Content-Type
为 application/x-www-form-urlencoded
,POST body 中包含如下 2 个参数:
- type - 总是为 1;
- wd - 为手写笔划矢量数据,格式如下:
- 每条矢量笔划数据都是形如
x1,y1,x2,y2,...
的坐标列表,其中 x 和 y 坐标的有效值范围在 4~209 之间(屏幕坐标系,左上角为原点,向右向下坐标递增),以字符 "a" 作为分隔符将 10 进制坐标数值序列化为字符串。例如一个笔划经过的坐标若为(15,15)-(15,30)
,则该笔划序列化后的字符串为 "15a15a15a30
" ;而另一条笔划经过的坐标若为(15,30)-(30,30)
,则序列化后的字符串为"15a30a30a30
"; - 多条矢量笔划数据字符串之间以 "aa" 分隔后作为最终数据串,例如上述 2 条笔划组成的最终数据串为 "
15a15a15a30aa15a30a30a30
"
- 每条矢量笔划数据都是形如
RPM 打包时报告 Package already exists: %package ... 错误的可能原因
用 rpmbuild 编译一些老的 SRPM 或 tarball 时经常会报告 Package already exists: %package ...
错误而无法继续,通常其原因是这些包的 spec 文件中含有当前版本的 rpmbuild 无法识别或展开的宏定义,只要修改一下 spec 文件保证其中非标准的宏都有对应定义应该就能继续打包了。
Erlang 中 DNS 解析顺序的问题
Erlang 的 DNS 解析方法有包括 file(读取 /etc/hosts
文件)、dns(Erlang 自己的 DNS 客户端)、native(调用外部程序 inet_gethost
用 libc 的 gethostbyname
函数解析域名) 在内的好几种方式,可以在 kernel inetrc 文件中以 {lookup, [...]}
形式指定多种 DNS 解析方法的应用顺序。在 inet:gethostbyname_tm/4
函数中可以发现任意一个域名的解析顺序是:
Linux 中针对 SysV IPC 的内核参数调整
SysV IPC 包括 Semaphore、Shared Memory 和 Message Queue 这 3 类进程间通信手段,虽然 POSIX.1-2001 实时接口标准规定了另一套提供相同手段但更一致化的接口(POSIX IPC),但 SysV IPC 仍然有相当数量的用户。