希望若干年后的史书,会这样记载 2020 年初的疫情。
泥潭挣扎记:Linuxbrew 里的 Glibc
本着 Homebrew 真香的原则,我尝试在 CentOS 上安装 Linuxbrew。至于不用 Yum 的原因,请看刚才提到的真香原则。
但随即,我就陷入到了 Glibc 的泥潭。这个泥潭是一个需要自举(bootstrap)的循环依赖;这个泥潭长这样:
- Linuxbrew 安装任何东西都依赖
curl
和git
,而且它不想用系统中自带的curl
和git
。 curl
和git
都直接或间接依赖 Glibc。- Linuxbrew 里的 Glibc 版本比较高,目前是 2.23,因此依赖高版本的 GCC(
>= 4.7
),以及因为 Linuxbrew 的缘故依赖curl
和git
。 - 系统里的 GCC 版本较低,因此 Linuxbrew 安装 Glibc 失败;而通过 Linuxbrew 安装高版本的 GCC 又再次依赖 Glibc。
泥潭里有两个循环依赖:
- Glibc 和
curl
及git
等基础工具相互依赖; - Glibc 和 GCC 相互依赖。
USB 3.0 射频噪声对 2.4GHz 无线设备的干扰
早些年,第一次使用 USB 3.0 硬盘的时候,我就发现了它对 Wi-Fi 网络信号的影响。为了解决这个问题,当时投资几百块,换了 NetGear 的路由器,并启用其 5GHz 的 Wi-Fi 信号。最近,在结合 rMBP 使用无线鼠标时,我发现鼠标经常出现跳帧的现象。因为距离上一次踩坑的时间已经过去六七年的时间,一时完全没想到可能是 USB 3.0 带来的问题。在经历了一系列折腾之后,才突然想起这个坑。特此记录。
程序员的自我修养(⑨):Linux 系统里的进程状态
今天有同事问到 top
命令里的 running
, sleep
, stop
, zombie
等进程状态分别是什么意思。于是借这个机会写一下 Linux 系统里的进程状态。
向 non-bare 仓库的检出分支推送提交
假设有本地 Git 仓库 A,而后在本地自 A 克隆仓库 B(即,在 B 的视角,A 是远程仓库,只不过物理位置在本机)。若从 B 向 A 推送提交,则 Git 可能会报错。这是因为,A 默认是 non-bare 的仓库,粗略理解即是工作区不为空;此时,从 B 向 A 推送的话,A 仓库中的内容可能和 A 工作区内容不一致。