# 30. 没有主题的闲聊

内核恐慌 · 2015-12-12

<https://lib.pan.icu/503c5b12-a114-4648-bde2-9110055fb50e>

本期《内核恐慌》以听众反馈开篇，讨论了MinGW在Windows下用于科学计算（Fortran编译）和Wi-Fi组网难题（电力猫方案），随后聚焦Linux初学者的困境：一位听众因迁移网站至云服务器而遭遇命令行挫败，感叹“所有步骤都对却出问题”。主持人解释这是因为缺乏Unix历史理解，并建议系统学习或使用PaaS/SaaS简化。新闻环节点评了Swift开源（包括编译器、包管理器及社区成长）、Let's Encrypt公测（免费SSL证书自动化）以及PHP 7发布（跳过了难产的PHP 6，新增飞船运算符和null合并运算符），并分析了PHP社区因缺乏领袖导致的特性混乱。

## Questions this episode answers

### PHP 7 发布后，很多人发现没有 PHP 6，为什么 PHP 6 被跳过了？

吴涛解释，PHP 6 原计划加入 Unicode 支持，但因核心社区缺乏共识，采用投票制（需 2/3 多数）导致新特性迟迟无法通过，最终难产。许多计划特性被反向移植到 PHP 5，而社区认为剩余改动已无法构成 PHP 6，于是直接发布 PHP 7。这暴露出 PHP 开发者社群缺乏明确的愿景和强有力的领导者。

[1:29:53](https://lib.pan.icu/503c5b12-a114-4648-bde2-9110055fb50e?t=5393000)

### 为什么 Linux 服务器通常只用命令行，而不是像 Windows 那样提供远程图形界面管理？

Rio 和吴涛指出：Linux 的图形界面不统一（GNOME、KDE 等），无法像 Windows 那样标准化；命令行是通用接口，信息熵低，更适合远程操作和自动化；历史原因导致许多开源软件仅提供命令行配置；而且图形界面的自动化难度高。对于熟练用户，命令行的效率反而更高，但对初学者确实不友好。

[1:29:40](https://lib.pan.icu/503c5b12-a114-4648-bde2-9110055fb50e?t=5380000)

### 苹果开源 Swift 后，开发者能用它做什么？目前有哪些局限？

Rio 介绍 Swift 开源后发布了编译器、工具链及 Swift Package Manager，官方支持 Ubuntu（x86-64），但暂不支持 ARM 架构。吴涛补充社区已在尝试移植到 Android。局限性包括：语言层面缺少并发支持，依赖 libdispatch；标准库仍在用 Swift 重写；目前仅适合实验性项目。本次开源保留了提交历史，使外界得以窥见苹果内部的开发过程。

[1:10:42](https://lib.pan.icu/503c5b12-a114-4648-bde2-9110055fb50e?t=4242000)

## Key moments

- **[0:00] 片头**
  - [0:31] "Show me a pull request, or STFU"
- **[0:59] MinGW**
  - [2:24] 饶悯华反馈：公司Windows开发环境禁止安装虚拟机，只能用MinGW编译C++
- **[6:11] Wi‑Fi**
  - [7:01] Wi-Fi 2.4G在30个信号源环境下干扰严重，内网ping延迟达50-300毫秒
  - [10:21] Rio认为Wi-Fi覆盖问题可通过合理整体规划解决，但需要企业级设备
- **[20:18] 命令行**
  - [21:22] 宅反馈：推荐Git Bash、Cmder等Windows终端仿真器作为替代方案
  - [23:39] Poly Diary讲述自己两天配置Linux环境却频繁失败的经历
  - [25:03] Q: 为什么现在的服务器普遍使用shell命令行而不是图形界面？
  - [26:25] "为什么我所有步骤都做对了还是出各种问题"
  - [27:59] Rio回顾自己初学Linux时同样感到困惑和气愤
  - [31:14] 吴涛对比现在和过去学Linux的不同：过去只能一台电脑，崩溃了就没法查资料
- **[1:05:37] KK**
  - [1:05:41] 苹果兑现承诺，Swift编程语言正式开源
- **[1:10:16] Swift**
  - [1:10:16] Swift的Git仓库公开，可追溯Chris Lattner从最初提交构建语言的完整历史
  - [1:16:12] Swift Package Manager由Homebrew作者Max Howell编写，他曾因翻转二叉树面试失败被谷歌拒绝
  - [1:17:06] Rio设想Swift开源后可实现iOS客户端和服务器端代码共享
  - [1:19:38] Rio比较Go和Swift：Swift无GC、生成二进制小，但缺乏内置并发支持
  - [1:24:07] Let's Encrypt开始公测，提供免费自动化SSL证书
- **[1:28:22] Let’s Encrypt**
  - [1:28:26] PHP 7正式发布，跳过了从未正式面世的PHP 6
- **[1:29:40] PHP 7**
  - [1:29:51] 吴涛批评PHP核心团队无能导致PHP 6难产，新特性被迫backport到5.x
  - [1:30:57] PHP 7引入spaceship operator (<=>) 用于比较
  - [1:34:40] PHP 7引入??运算符，简化null判断
  - [1:36:26] 吴涛分析PHP社区问题：缺乏BDFL，重大变更需要投票，导致新特性难以通过
  - [1:39:22] 核心开发者撰文《PHP 6: Pissing in the wind》反思社区决策机制
  - [1:41:10] Rio推测Facebook作为最大PHP用户可能对语言发展有重大影响
- **[1:44:09] 结尾**
  - [1:44:19] "no hard feelings"

## Speakers

- **Rio** (host)
- **吴涛** (host)

## Topics

编程语言, 安全, 操作系统

## Mentioned

Apple (company), GitHub (company), ConEmu (product), Docker (product), Eclipse CDT (product), Git for Windows (product), Homebrew (product), Let's Encrypt (product), Linux (product), MinGW (product), PHP (product), PUTTY (product), Swift (product), Ubuntu (product), Windows (product), commander (product), macOS (product)

## Transcript

### 片头

**吴涛** [0:00]
欢迎收听 《IPN Podcast》， 网络旗下的 IT、 技术 、 体育 、 娱乐节目 《 内核恐慌 》。 我们号称 "hardcore"，但谁也没有干货 ； 想听的人听 ，不想听的人就别听 。

本节目的网址是 kernelpanic.fm， 我们推荐大家使用 Podcast 客户端订阅节目 ， 详情请访问 ipn.li/faq。 欢迎你为节目捐款 ， 捐款地址是 kernelpanic.fm/donate。

捐款金额随意 ， 只要是 8 的正整数倍就可以 。 捐款不会为你带来什么 ，不捐也不会让你失去什么 。

我们的口号是 ： "Show me a pull request, or STFU." 这个是我在今天早上在一个 T-shirt 上看到的 ， 上面是大大的一行字 ： "Show me the pull request, or shut the fuck up."

**Rio** [0:50]
你应该是 "send me the pull request" 吧 ？

**吴涛** [0:52]
呃 ， 说得也是 ， 为什么不是 "send" 呢 ？ 还是我看错了 ？

**Rio** [0:57]
对啊 。

**吴涛** [0:58]
Anyway, you could.

**Rio** [0:59]
You couldn't. 呃 ， 好吧 ， 我们进入这个听众反馈环节 。 上一期我们讲了这个 ， 那个叫 Windows 上面的一些问题 。

### MinGW

**吴涛** [1:11]
对 ， 我们只是随口提了一下这个 MinGW 的问题 ， 结果就收到了至少两封关于相关的反馈 。

**Rio** [1:20]
那个电台最喜欢用的词叫什么来着 ？ 听众反馈如雪片般飞来 ，是吧 ？

**吴涛** [1:26]
我们是 " 听众反馈如铁板般砸来 "。

**Rio** [1:31]
我们选择性地念两个相关的事吧 ，但第一个不全是啊 ，有一小节 。

**吴涛** [1:37]
对 。

**Rio** [1:38]
呃 ， 这个你来还是我来念 ？

**吴涛** [1:40]
先我来念吧 ， 呃 ， 一位叫饶悯华的朋友 ——

**Rio** [1:45]
那个字念什么 ？

**吴涛** [1:46]
哪个字 ？ 你是三个字都不认识吗 ？

**Rio** [1:49]
中间那个字念 。

**吴涛** [1:49]
不 ， 中间那个字念 " 悯 "。

**Rio** [1:50]
上日下文 ， 悯 。

**吴涛** [1:53]
OK。

**Rio** [1:53]
因为我大学同学有 。

**吴涛** [1:54]
那第三个呢 ？

**Rio** [1:55]
华呀 ， 这不是那个黄 ， 黄花的花 ？

**吴涛** [1:59]
你不念 " 耶 " 吗 ？

**Rio** [2:00]
应该不念 " 耶 " 吧 。

**吴涛** [2:02]
啊 ， 伙子吧 ， 那个念 " 耶 "。

**Rio** [2:03]
对 ， 刘烨 ，但这个是华 。Anyway， 名字就是一个代号 。

**吴涛** [2:11]
呃 ，他说 ："Rio， 吴涛你们好 ， 用户反馈关于 MinGW 的使用场景 。 之前任职于国内某社交公司 ， 开发环境是 Windows，不允许装虚拟机 。

括号 ： 网管检测到虚拟机自动端口断网 。"

**Rio** [2:29]
这什么样的变态公司 ？

**吴涛** [2:30]
这是 ， 这是 ， 我觉得 B 公司的 IT 已经非常龟毛了 ，但是显然还有更龟毛的 。

**Rio** [2:37]
不不 ， 这个理由是什么 ？

**吴涛** [2:40]
呃

， 嗯 。

**Rio** [2:45]
不 ， 你想哈 ，他开发环境是 Windows， 运行环境是 Linux， 然后不准装虚拟机 ， 那怎么测试啊 ？

**吴涛** [2:51]
就直接在服务器上嘛 。

**Rio** [2:53]
那

， 所以你要那个 ， 哎 ， 最近不是搞那个什么 Docker 的那个 container movement 吗 ？

**吴涛** [3:01]
我现在都在做 。

**Rio** [3:03]
对啊 ， 那你得在本机上用这个 ，Windows 上还没有 Docker 吧应该 ？

**吴涛** [3:10]
哎 ， 我们只念了一句半话 ， 我把它念完再说吧 。 对 ， 反正是很奇怪就是了 。 然后它的开发语言是 C++， 运行环境是 Linux， 无 X11。

对 ， 这个很重要 ， 就是我 ，因为我刚才在想 ， 我在公司其实也是不能在本机开发的 ， 我是远程桌面到一个远程服务器上 ，但是我有 X11，他没有 。OK。

而且跳本机网络隔离 ，而且我不是 WIM 档 ， 背景交代完毕 。 于是选用 Eclipse CDT 作为 Windows 上的 IDE 做开发 ，但是不可能使用 Windows 的 VC 编译器 ，因为 VC 编译器能编译过 ，GCC 不一定能过 ，而且引用的库也不一样 ， 比如 Linux 的线程库是 P-thread，Visual Studio 加没这玩意儿 。

于是最后选的是 Eclipse CDT 配 MinGW 或者 Sigwin。 另外一个例子是之前在实验室做图像算法 ， 采用一个 C++ 的 OpenCV 的库 ， 呃 ，Open Computer Vision 吧应该是 ， 视觉识别的应该 。

**Rio** [4:15]
对对对 。

**吴涛** [4:16]
开发环境 。

**Rio** [4:17]
呃 ， 视觉 。

**吴涛** [4:17]
开发环境也是 Windows 加 Eclipse CDT 加 MinGW。 现在回想用 Ubuntu 加 Eclipse CDT 加 GCC 应该也可以 ，但是当时的机器跑不动虚拟机 。

**Rio** [4:31]
我还是要吐槽一下， 这家公司实在是太奇怪了 ， 为什么是这样呢 ？ 你开发一个在 Linux 上运行的 C++ 的东西 ， 然后你开发环境是 Windows， 还不允许装虚拟机 ， 这 what the fuck？

**吴涛** [4:42]
是很病态啊 。

**Rio** [4:44]
然后那个 Eclipse CDT 是什么东西 ？

**吴涛** [4:48]
呃 ，CDT 是 C Developer，C Development 什么的一个缩写吧应该是 ， 就是 Eclipse 的一个版本 。

**Rio** [4:59]
就针对 C 开发者用的 。

**吴涛** [5:01]
对 ，T 代表什么我还真不记得了 ，Tooling 吧应该是 。

**Rio** [5:05]
现场 。

**吴涛** [5:06]
啊 ，Toolkit 还是 ？

**Rio** [5:08]
C Development Tooling。

**吴涛** [5:10]
我靠 ， 我真的没记错 。C/C。

**Rio** [5:16]
所以 Eclipse 这个 pull， 哎呀 ，不光写 Java 也要用 ， 现在写 C++ 也要用它了 。

**吴涛** [5:20]
不 ，不是也要用 ，是你可以选择用 。 就因为你写 C++ 的可选的方案太多了 ， 可以用什么 ， 呃 。

**Rio** [5:29]
Xcode。

**吴涛** [5:31]
一时想不起来 ， 我第一想 ， 第一跳到脑海里的居然是 Qt Designer。

对 ，但 C++ 的 IDE 实在是太多了 ， 所以选择用 Eclipse CDT 也许是公司的限制 ， 谁知道呢 。 对 ， 总之它回报了一个非常小众的这个 MinGW 的使用场景 。

我所以 ，因为我们上期提到了说活人请回报一下， 如果你用 MinGW 的话 ， 跟我们说一下到底是什么场景 ， 所以现在出现了一个这么奇葩的场景 。

**Rio** [6:05]
然后就 ， 对啊 ， 这个场景左想右想还是太蛋疼了 。

**吴涛** [6:09]
嗯 。

### Wi‑Fi

**Rio** [6:11]
哎 ， 如果我想想去这种公司工作 ， 还是辞职算了 。

**吴涛** [6:17]
别这样 。 呃 ，OK， 第二点反馈 ： 上上期关于 Wi-Fi 取代网线布线的反馈 ， 这个非常疼 ，不推荐对网络有要求的人这样布线 。

因为 ， 呃 ，2.1 就是像维特格斯坦一样 ， 每一个这个反馈点下面还要分子点 。2.1 点 ， 办公室 。 现在在一个类似于重创空间的地方创业 ， 一栋楼有 20 到 30 家公司 ， 每家公司面积几平米到十来平米 。

每次打开 Wi-Fi 的时候 ， 都可以搜到不下 30 个 Wi-Fi 信号源 。Wi-Fi 2.4G 虽然有 13 个信道 ，但是要完全做到不干扰的信道只有 3 个 。

可以想象 2.4G 信道空间会有多大干扰 。 做过实验 ， 千元左右的国际品牌路由器 ，2.4G 的 Wi-Fi 信道调优 ， 距离不到 2 米 ， 内网 ping 路由大概 50 到 300 millisecond 不等 ， 呃 ， 还会有大量的随机丢包 。

另外附带的是 ， 我们现在所有的无线键鼠都属于梦游状态 。 采用 5G 信号之后，Wi-Fi 信号质量好了很多 ，但是随着各个公司的网管都在改用 5G 信号的路由 ， 呃 ， 网络状况也是每况愈下 。

呃 ，2.2 点 ， 家里 。 家里去年装修 ， 呃 ， 小三房 ， 什么是小三房 ？ 给小三住 。

**Rio** [7:41]
就是三房 ， 然后面积比较小 。

**吴涛** [7:43]
OK。 采用的是无线网络部署 ，在房间正中央放了一个小米路由器 ， 呃 ， 带硬盘 ， 做 NAS。 有几个结论 ：A，5G 信号穿墙比 2.4G 差 ；B， 卧室需要穿两堵墙 ， 只剩下两格信号 ，而且会降频到只有 11 Mbps 的连接速度 ，而且丢包严重 ，NAS 连接的速度不可接受 ；C，在穿一堵墙的时候架设 Wi-Fi 中继 ， 到卧室使用时， 还是只有 300 到 400 Kb 左右的上传下载速度 ，而且不稳定 ，不可接受 。

最后采用的方案是电力猫 ， 小米路由器直接插网线连墙上的电力猫 ， 呃 ， 卧室电源口放一个电力猫接收设备 ， 带 802.11n 加网线 ， 基本能达到 5 Mbps 左右的速度 ，而且不丢包 ， 基本可以接受 。

但是拷贝大东西的时候 ， 还是得把笔记本和路由器用千兆网线直连 。 另外， 电力猫有个缺点 ， 发热量大的情况下容易死机 ， 深圳的夏天基本一个月重启一次 。

哎 ， 所以这位听众和你都在一起 ， 都在深圳吧 ？

**Rio** [8:47]
嗯哼 。

**吴涛** [8:48]
呃 ， 另外国内小区 Wi-Fi 信道的干扰也挺大 。 现在家里三个电力猫 ， 一个 input， 两个 output， 我家的热点有五个 ，不过 Wi-Fi 多了还是会给自己造成信道的干扰 。

家里 PS4 streaming 到 PSV 上， 使用 PS4 主动 Wi-Fi， 离得非常近都频繁掉线 。 后来 PS4 关闭主动 Wi-Fi，PS4 连网线 ，PSV 连电力猫的 Wi-Fi， 情况好了很多 。

推荐一下 Android 上的 Wi-Fi 信道分析相关的 App， 能够快速了解当前空间下的信道占用情况 。 个人结论是能不网线就不网线吧 。OK， 所以你对这一点有什么反馈呢 ？

有什么评论吗 ？

**Rio** [9:31]
呃 ， 首先其实无线也没什么 ，不得好的话问题不是很大 。 她说那些情况 ， 就我也去过很多这种 ， 这种什么叫 co-working space 嘛 ， 这种合作办公的空间 ， 确实看他们那个 ，因为现在特别深圳这边很多这种孵化器啊 ， 重装空间都是当二房东的 ， 就是基建也没好好干 ， 就是很多人对这个也不熟 ， 然后做得都挺差的 。

公司也是这样子 ， 就是其实你要很多这种所谓的 IT 公司的这些技术部门都是非常差的嘛 。

**吴涛** [10:08]
啊 。

**Rio** [10:08]
所以 。

**吴涛** [10:08]
这不是债都的常态吗 ？

**Rio** [10:11]
不 ， 全 ， 就是中国都基本上都这样 ， 就不是那个 ， 那个 Wi-Fi 不得好的非常少 ， 就但如果 Wi-Fi 不得好的话 ，其实这些问题都应该 。

**吴涛** [10:20]
都可以解决 。

**Rio** [10:21]
OK。 对 ，但有很多前提条件 ， 就是说首先你要是那个要整体规划嘛 ， 你不是说像她说那种一层楼二三十个公司 ， 妈的 ， 各家都搞自己的 ， 那就没得玩了 ， 对吧 ？

**吴涛** [10:33]
嗯哼 。

**Rio** [10:33]
肯定是要那个 ， 呃 ， 要禁掉那个 。

**吴涛** [10:36]
禁用端 。

**Rio** [10:36]
对 ， 要禁掉个人用个人的那个 Wi-Fi 热点的情况 ， 要那个统一去布嘛 ， 然后要那个要根据那个内楼层的形状啊 ， 包括那些中间的隔墙的材质啊去考虑 ， 要布多少个点 ， 然后采用哪些东西 。

就其实这里面学问还蛮多的 ， 就是要做好是挺难 ，但是做好了效果会很好 。

**吴涛** [11:00]
现场布线的确是一个不是说你念完网络工程就可以搞定的事情 ， 真的有很多 。

**Rio** [11:06]
对 ，不是说你在这加俩 ， 加俩那个热点 ， 这个信号就好了 ， 就是你加了可能会反而更糟糕 ， 你要去考虑到各种各样的情况 ， 比方就是设备也是一个问题 。

现在她说那些什么 ， 呃 ， 千元左右国际品牌路由器 ， 对 ， 这种就是办公楼这种密度的 ， 就几百人的那种 ，也不可能用这种千元级别 ， 一般都是家用的嘛 ，不可能用家用的 ， 一定要用企业级别的 ， 然后它里面的那些方法是不一样 ， 就像什么 C 厂牌和 H 厂牌的那样 ， 就比较贵 ， 一个那个就普通的还不带那个 802.11ac 的 ， 就 802.11n 的吧 ， 我看最便宜的那

种就还是得三四千一个 ， 然后如果你要上最新的 11ac， 那所谓什么 1900 兆的那种企业级的无线那个 AP， 我看好像是最便宜的淘宝货都要六千多块钱吧 ， 一个 ， 对吧 ？

然后你一层 ， 你一个覆盖的范围也就那么点嘛 ， 然后你一层楼看面积还得装上十几二十个 ， 对吧 ？

差不多小十万块钱光买 AP 就进去了 ， 完了你还得买 AC， 对吧 ？ 还要做那个 ， 呃 ， 那个就是 ， 呃 ， 千兆网 ， 就是那个 Cat 5E 的网 ， 呃 ， 做那个 backbone 嘛 ， 对吧 ？

**吴涛** [12:26]
嗯哼 。

**Rio** [12:26]
然后你还要布完之后， 你还要去在每个之间做那个叫 ， 呃 ，roaming， 就是漫游嘛 。

**吴涛** [12:33]
对 。

**Rio** [12:33]
你从一个 AP 切换到另一个 AP 的时候 ， 中间连接不会断掉 ， 对吧 ？

**吴涛** [12:38]
嗯 。

**Rio** [12:38]
要在二层三层之间 。

**吴涛** [12:39]
Handover。

**Rio** [12:40]
对 ，handover 很讲究的 。 然后那个 2.4G， 她说有那个三个不重叠的信号 ， 没错 ， 确实这样子 。 那么你更要小心谨慎去做 。

然后那个信号强度也不是说你开到最大是最好的 ， 你要根据周围的情况来看 ，也可能要调到中或者调到小才是能够更好的一个方案 。

然后现在 5G 也是一样的 ， 就是说 5G 也有那几个信道 ， 它基本上不怎么互相干扰 。 而且 ， 哎 ，5G 有个好处 ， 她说得很对 ，5G 的信号穿墙性能比 2.4G 差 ， 这就导致一个什么样的后果呢 ？

就使得 5G 就邻居之间啊 ， 比如说你刚才说她说家里还有一个情况 ， 就是 5G 和 5G 邻居之间的影响是比较小的 ，因为基本上隔一堵墙 5G 信号就很弱了嘛 ， 隔两堵的话你就可以就忽略不计了 。

所以你在家里布 5G 的话 ，其实是更好的一个选择 。 然后包括用那个 11n 和 11ac 区别也是蛮大的 ，因为同样的这个信道带宽 ， 你用更快的这个标准 ，在更短的时间内完成的数据的传输 ， 那你有更多的空闲出来给别人传输 ， 那个就是那个冲突的时间会更少嘛 。

**吴涛** [13:47]
对 。

**Rio** [13:47]
因为一旦冲突就要两个都要 back off， 然后重传嘛 。 再然后就是这个设备的选择 ， 刚才吐槽了一下， 她用那个千元左右的 ， 家用还没问题 。

然后她说她家里用那个小米路由器 ， 我靠 ， 小米路由器我看了好多这个测评 ， 就都是那个信号非常差的代表 ， 为什么会用这个 ？

我觉得她把那个刚才那个办公室用那个千元左右的国际品牌路由器放家里 ， 我估计还差不多 。

**吴涛** [14:14]
然后小米的可以扔了是吧 ？

**Rio** [14:16]
其实也不是说便宜的一定不好 ，但是大部分的便宜的就概率 ， 你买到好的概率很少 ，而且你没有人去做这种专业测评 ，而且国内这种硬件测评他妈都被搞坏了 ， 就是全是枪文软文拿钱写的嘛 ， 就没有正儿八经在做的 。

**吴涛** [14:32]
那国外有一些 。

**Rio** [14:32]
叫什么 ， 我们只谈硬件的 ， 杂志叫什么来着 ？ 嗯 ，有

。

**吴涛** [14:38]
就这种杂志 。

**Rio** [14:39]
微型 ， 好像就叫微型计算机吧 ， 就一本杂志 ， 然后封面上写着我们只谈硬件 ， 那个杂志 。

**吴涛** [14:45]
那个也是枪文满天飞的 。

**Rio** [14:46]
好吧 。

**吴涛** [14:46]
不用想了 。

**Rio** [14:47]
我记得我小时候它口碑还不错 。 就我觉得国内其实真缺乏那种真真正正的 ， 就踏踏实实做那种某一个细分领域的这种 ， 呃 ， 很专业很有深度的测评的 。

因为最近我遇到两件事 ， 最近我不是在买那种小的 PC 机来着 ， 那种玩 ， 就是 NUC 嘛 ， 英特尔那个小的 ， 我发现国外有个专门的 ，有个网站叫 NUC Blog， 它专门就只测评这么一个非常 niche 的一个产品 。

**吴涛** [15:14]
OK。

**Rio** [15:15]
就很 ， 它会讲得很细嘛 ， 然后说这个家用无线组网的话 ， 或者小范围无线组网 ， 它有个叫 small net builder 嘛 ， 上面会把那些就在 ， 就当然是它是美国的吧 ， 应该是 ， 它会把那些在美国市场上卖的 ， 呃 ， 那些新的 ， 呃 ， 无线设备都会测得非常详细 ，也相对来说比较专业嘛 。

那国内找不到这种啊 ， 你只能听这个 ， 听那个各种公关文给你瞎逼逼 ， 对吧 ？ 就基本上不可信的嘛 ， 那你买回来实际测的时候就很麻烦 。

**吴涛** [15:44]
嗯 。 我觉得可能在西方比较好的一点就是很多网站都会 ，不是网站 ， 就是很多媒体都会提供付费 ， 呃 ， 购买测评结果的服务 。

德国有很多 ， 德国法国都有这样的网站 ， 就是它的测评给出来了 ， 然后它会给你个排名。

**Rio** [16:06]
啊哈 。

**吴涛** [16:07]
然后但如果你想要知道具体这个排名是怎么得出来的 ， 你需要花几欧元去买它的测评报告 。

**Rio** [16:14]
嗯哼 。

**吴涛** [16:14]
然后 。

**Rio** [16:15]
对 ， 我觉得这个模式至少你可以相信他们基本上是不需要拿别人的钱 ， 然后就也可以做出相对独立的判断 。

**吴涛** [16:27]
这个问题我觉得一下还解决不了在国内 。

**Rio** [16:30]
对 ， 这个国内不可能的 ， 这我靠 ， 花钱看别人评论 ， 这是闻所未闻的事情 ，是吧 ？ 怎么能接受呢 ？

**吴涛** [16:37]
对对 。

**Rio** [16:38]
关于你们社会这个事哈 ， 就是说那比如说你买了一个比较 ， 呃 ， 就是 ， 呃 ， 工业界工人比较好的那种无线设备的话 ， 覆盖一个家里的 ， 当然其实家里情况也比较特殊 ， 不同那个户型 ， 那个楼 ， 那个叫什么 ， 那个隔墙的结构不一样嘛 。

**吴涛** [16:54]
嗯哼 。

**Rio** [16:55]
有些是那种就是有承重墙 ， 里面是有钢筋的 ， 那效果就很差 ， 然后跟你摆位有关系 ， 对吧 ？

**吴涛** [17:01]
防滑力度 。

**Rio** [17:02]
对 ， 这之类的事情 。 像我们比方我在现在住的地方是一个两房吧 ， 然后面积就还有那么大 ， 我就一个那个 ， 呃 ， 那个比较新的无线路由 ， 然后我选的还不错的 ， 测过的嘛 ， 然后就效果就挺好的 。

隔个墙我也能够有个二三十兆 ，因为我是还是 ， 我这个设备还是 11n，不是 11ac 的嘛 。

**吴涛** [17:26]
OK。

**Rio** [17:26]
11n 的话三个 stream 顶天也就 450 的理论直路嘛 。

**吴涛** [17:31]
嗯哼 。

**Rio** [17:31]
你扣一下打个对折 ， 差不多也就那样二三十兆的速度了 。

**吴涛** [17:36]
对 。

**Rio** [17:37]
就其实还是挺不错的 。 呃 ， 所以就是里面还是有很多这种要有 ， 就是这确实挺难的 ， 要有 ， 你要对这个东西要有技术上有足够的了解 ， 然后你要知道怎么去判断那些软文 ， 然后去看足够多的测评 ， 然后你也得从测评里面买一个合适的 ， 完了之后你再知道在家里怎么去选择一个合适的点 ，因为不一定合适嘛 ， 你刚好选了那个信

号最好的点 ， 可能没有网线接口 ， 你怎么办 ， 对吧 ？ 然后像她这种情况就是说如果是这个 ， 看起来它是隔两堵墙的话就很麻烦 ，因为它可能那个入户的地方不是在房间的中间的位置嘛 。

就我的运气比较好 ， 我入户的位置可以刚好在整个房间的中心点 ， 啊 ， 就可以整个平均覆盖得到 ， 然后她那个就不行 ， 她就只能 ， 然后之前没有埋线的话就很糟糕 。

**吴涛** [18:26]
是 。

**Rio** [18:26]
就所以我觉得她那个的话很早就能布线就布线吧 ，但是我觉得这个看情况 ， 就是说 ， 呃 ， 如果就成本不是问题 ， 然后装修的方案也可以 ， 你还没有定死的话 ， 最好的方案就是说你在每个房间的那个顶部啊 ， 去布一个那种吸顶式的那种 AP， 然后做那个漫游的方案 ， 那这个成本就比较贵 ， 可能一个三房的话 ， 家里加三房就是三个卧室加一个

客厅嘛 ， 对吧 ？

**吴涛** [18:53]
对 。

**Rio** [18:53]
就有四个房间你要布这个东西 ， 搞完这一趟下来也得可能几千块钱 ， 挺贵的 。

**吴涛** [19:00]
我觉得 ， 我是觉得从安全的角度讲 ， 布线至少要比无线安全一些 。 呃 ， 安全的意思 ， 比如说首先在和平时代 ， 邻居不会来破你的无线 ，在僵尸来袭的时候 。

**Rio** [19:16]
现在无线很容易破吗 ？ 还好吧 。

**吴涛** [19:17]
现在 。

**Rio** [19:18]
那个用那个 WPA2 应该还可以 。

**吴涛** [19:21]
哇 ， 换一种说法 。

**Rio** [19:22]
邻居不会说我老婆怀孕了 ， 你把无线关一下 。

**吴涛** [19:30]
不过她怎么知道是你的 ？

**Rio** [19:32]
呃 ， 对 。 然后你如果买了网线的话 ， 你就可以理直气壮地说 ， 啊 ， 我们家没有无线 。

**吴涛** [19:37]
嗯 ，但很不方便啊 。

**Rio** [19:38]
啊 。

**吴涛** [19:39]
就是无线设备 。

**Rio** [19:40]
对 ， 我反正我现在是基本上， 虽然我现在有这个有线口可以用 ，但我还是 PS 还是连着无线 ， 比如说 。

**吴涛** [19:47]
对嘛 ， 对嘛 。

**Rio** [19:48]
对 。

**吴涛** [19:48]
而且她家里这个也挺奇怪的 ， 她热点就五个 ， 我不明白为什么你家里有一个这个路由器的情况下， 你还要加这么多个热点 ， 这不是自己给自己找事儿吗 ？

**Rio** [19:59]
嗯 。

**吴涛** [19:59]
当然是要关掉那些干扰的热点了 。

**Rio** [20:02]
因为小米路由器嘛 。

**吴涛** [20:04]
啊 ， 好 ， 我们不要继续吐槽这位听众 ， 我们把人家的名字都说出来了 。 对不起 ， 饶先生 ， 我们这个对视不对 。

**Rio** [20:10]
今天那个 ， 那个什么 ， 这个 XX 路由器那里应该逼掉了 。

**吴涛** [20:16]
哈哈哈 ， 好吧 。

**Rio** [20:17]
对 。

**吴涛** [20:18]
嗯 ，yeah。No hard feelings。

### 命令行

**Rio** [20:21]
呃 ， 下一则又是 MinGW 哈 ， 这位叫 。

**吴涛** [20:29]
宅 。

**Rio** [20:29]
叫什么 ？

**吴涛** [20:30]
这个字念宅 。

**Rio** [20:31]
我靠 。

**吴涛** [20:33]
呃 ， 梁永主播好 ， 然后他想补充一下这个 Windows 下面 MinGW 的问题啊 。在 Windows 下用 MinGW 的人有很多 ，其中一个是我 。

原因很简单 ，因为 Windows 下还在更新的 ，而且免费的 Fortran 编译器 ， 基本只有 MinGW 一个选项 ， 或者更严谨地说 ， 最流行的一个选项 。

不要惊讶为什么我还在用 Fortran， 我的主页是科学计算 ， 就是显式的使用 ， 包括大量学 C 语言的 ， 跟压根不想学编程的本科生在内 ， 则在隐式的使用 ， 比如被学长推荐安装个 code 某好某好 block。

**Rio** [21:10]
Code block 是一个 IDE 吧 ， 应该 。 没记错的话 。

**吴涛** [21:13]
OK。

**Rio** [21:13]
关于 Windows 里的终端仿真器 ， 我想两位也许是很久不用 Windows 了 ，不了解也是很正常的 。 我依据个人的经历提几个哈 。

有一个是 Git for Windows 里面带了一个 Bash。

**吴涛** [21:27]
啊 ？Git Bash， 对 。 就如果你在 Windows 上面装 。

**Rio** [21:30]
你带了一个终端仿真 。

**吴涛** [21:31]
对对对 ， 如果你在 Windows 上面装一个 Bash 的话 ， 它会给你提供一个命令行 ， 然后这个命令行其实是纯 ， 呃 ，其实是个 shell， 就是一个 Bash shell。

**Rio** [21:42]
啊 。

**吴涛** [21:43]
对 。

**Rio** [21:43]
啊 ，因为 Git 离不开 shell 嘛 。

**吴涛** [21:45]
呃 ， 对对对 ， 就是 GitHub 的人觉得与其写一个图形界面 ，不如让 Windows 的人逼着 Windows 用户也用 Git 命令行 。

**Rio** [21:57]
跟 GitHub 什么关系 ？

**吴涛** [21:58]
这个东西是 GitHub 做的 。

**Rio** [22:01]
啊 ，OK。 呃 ， 如果比较习惯 Bash 行为的人， 可以用那个做一个基本 ， 做一点基本的操作 。 对于使用 commander 点 exe 的人， 应该推荐一个叫做 commander， 网址是 commander CMDER dot net 的项目 。

当然这个项目是 ConEmu 的一个改进版 ，ConEmu 是 C-O-N-E-M-U，但的确很流行 ， 重点是开箱即用 ， 且美观 。 哇 ， 这个还蛮难得的 。

没记错的话应该是 ，也支持基本的 Linux shell 命令 ， 比如说 list 之类的 ，也可以在里面调用 PowerShell 以及 Bash，而且可以试一下 。

**吴涛** [22:45]
OK。Console EMU 嘛 ， 是一个 console emulation， 是一个有些 。

**Rio** [22:51]
你用过吗 ？

**吴涛** [22:52]
好像用过吧 ，但我具体不记得长什么样了 ，也有可能不是 ，但是 ， 呃 ， 应该是一个 。

**Rio** [22:59]
你用过这种东西 ？

**吴涛** [23:00]
我之前不是在 Windows， 我之前不是在一个 ， 呃 ， 数据调研公司写的软件 ， 最后是要部署到 Linux 服务器上的嘛 ， 然后 ，但是开发环境是 Windows， 所以要 。

**Rio** [23:15]
哈哈哈 。

**吴涛** [23:17]
对 。 我记得那个 ConEmu 是支持 ， 反正是个支持 tab， 然后 。

**Rio** [23:23]
好吧 。 啊 ， 下面一则反馈就可有意思了 ， 这个一定要强烈推荐 。

**吴涛** [23:29]
这是我们 ， 这简直是我们这一期的主题 。

**Rio** [23:32]
对 。

**吴涛** [23:33]
可以吐槽好久 。

**Rio** [23:35]
对对对 。

**吴涛** [23:36]
不对 ，不吐槽 ， 就是和他一起吐槽 。

**Rio** [23:38]
对 。

**吴涛** [23:38]
应该说是共同 。

**Rio** [23:39]
叫什么 ， 一起共鸣 。

**吴涛** [23:40]
呃 ， 对 ， 就本期我们没有主题 ， 就这个还是要解说明一下 ，因为我周末要去意大利玩 ， 陪女朋友 ， 所以 ， 嗯 ， 我们这一期是以这个 ， 呃 ， 非常友善 。

**Rio** [23:57]
轻松幽默为主 ，是吧 ？

**吴涛** [23:58]
哈哈哈 。 好吧 ， 我刚才想说 。

**Rio** [24:01]
我们毕竟是一个 IT 主题娱乐节目 。

**吴涛** [24:03]
啊 ， 没错 ， 我们是以这个听众反馈 ， 呃 ， 充填时间的一期节目 ， 我刚才想说 。

**Rio** [24:10]
嗯 。

**吴涛** [24:10]
呃 。

**Rio** [24:11]
好了 ， 这个最后是我们每次都写很多反馈的老朋友 ， 叫做 Poly Diary。

**吴涛** [24:18]
对 。

**Rio** [24:18]
Rio， 吴涛 ， 你们好 。 首先还是感谢一下二位 ， 通过你们的节目的确让我了解了不少计算机方面的基础知识 。

最新一期的 Terminal Emulators， 虽然我几乎没听懂在讲什么 ， 辛苦你了 。 但是这种形式 ， 这种节目形式的好处就是可以一边听着也不耽误手头的事儿 。

啊 ， 还好 ， 还好 。

**吴涛** [24:37]
我们应该有一个 convention， 就是当你大声念的时候 ， 就是这个反馈的内容 ， 然后当你小声的时候 。

**Rio** [24:43]
我应该换一种 voice。

**吴涛** [24:45]
对 ， 我应该换一种 voice。

**Rio** [24:46]
来 ， 来 ， 我现在开始切 ， 我们为了这个表意清晰 ， 我们进入一个 ， 就是以后我念听众反馈都会用一种不是我这种日常说话的声音 。

**吴涛** [24:56]
说 ， 说 ， 用播音腔好了 。

**Rio** [24:58]
对 。 这次的反馈是关于上一期命令行的 ，是因为最近我决定把网站迁移到某云服务器上， 正好折腾了两天 Linux 的 web 环境配置 ， 真的是无比的痛苦 。

所以想说一下对命令行的看法和疑问 ， 当然是从外行的角度 。 和大多数人一样 ， 我真正开始接触计算机也是从 Windows 开始的 。

对于命令行的了解 ， 基本上仅限于在 Windows 命令提示符下拼一下域名 ， 或者 ipconfig 看一下本机 IP 等简单操作 ， 对于 Linux 是完全陌生的 。

之前在本机环境测试都是装一个 web， 集成 web 环境 。 呃 。

**吴涛** [25:43]
WANT 是 Windows based Apache MySQL PHP。

**Rio** [25:48]
Holy。

**吴涛** [25:49]
这是 LAMP 的那个衍生版 。

**Rio** [25:51]
Windows 版是吧 ？OK。

**吴涛** [25:52]
对 。

**Rio** [25:53]
呃 ， 然后所有的操作都可以通过图形界面的菜单或者编辑器来操作 。 我最近才知道 Linux 下都是需要用命令来操作这些简单事情 。

我记得很多年前就听说过一些 Linux 系统 ， 比如 Ubuntu 就已经实现了类似 Windows 的图形界面 ，而 macOS 也是基于 Next。 呃 ， 这里说明一下这个是错的 ，macOS 是基于 BSD 的 。

**吴涛** [26:19]
嗯 。

**Rio** [26:20]
我有点搞不懂的是 ， 为什么现在的服务器还普遍使用 shell 命令行的操作方式 ，而不是像 Windows 那样远程登录过去 ， 直接用图形界面操作 。

当然我也看到有的观点说是为了节省性能 ，但是我觉得对于今天的硬件配置 ， 加一个图形界面这样的资源应该是微乎其微吧 ，是不是有其他的原因呢 ？

还有就是我本来以为我使用的云服务已经实现了类似虚拟主机那样的 web 图形界面管理能力 ，但是我发现完全不是那样 。

实际上它们只是在硬件层面实现了弹性和虚拟化 ， 用户拿到的仍然是一个空白的系统 ， 一切需要自己配置 。

虽然它们有云市场里面可以购买集成了的镜像 ，但是我试了一下， 根本用不了 ，而且客服根本就不回复 。

所以最后我只能自己按照它们的配置教程去做 ，但是它们的文档明显是写给专业用户的 ， 比如说 ， 比如刚开始就说如何运行安装命令 ， 却不告诉你如何把安装包弄到服务器上 。

最后我是从一个视频里面才找到办法 ， 用 Linux 自带的命令上传过去 ， 然后再用命令解压 ， 点点点 。

最后配置好了 ， 程序跑几分钟 MySQL 就挂了 。 我根据错误提示从网上找解决方案 ， 结果发现有四五种可能 ，而且也没有把原因说清楚 。

最后都试过还是不行 ， 只能重启服务器维持几分钟 。 好吧 ， 我又说多了 。 基本上我的感受就像是一个小黑箱 ， 对于服务器来说也是一种神秘无形的存在 ， 只能通过一个小黑窗 ， 通过某种神秘的密码和它对话 。

让人困惑和气愤的是 ， 为什么我所有步骤都做对了还是出各种问题 ， 或者已经能运行了还是会出一些小的错误 。

折腾了两天 ， 重置无数次之后我终于崩溃了 。 所以最后我通过根据别人的提示 ， 用了一个云主机面板 ， 可以通过图形界面来操作了 。

这件事让我意识到运维并不是一件容易的事 ，但至于为什么会这样 ， 我还是有点不明白 ，也许因为已经习惯了 Windows 这种图形化的直观操作方式 ， 或者像 smartphone 上的应用 ，其实大部分工作开发源都替你完成了 ，而 Linux 这样的只能从一砖一瓦自己开始盖大楼 ， 要自己亲自踏过所有的坑才能跑起来 。

我总觉得这不是一种理想的方式 。 用一个例子来说 ， 我觉得微信大行其道 ，其中有一个重要原因可能是 ， 它通过图形化的 、 直观的 、 人人都可以操作的方式 ， 完成了以前只有开发人员才能完成的工作 。

直到现在 ， 一个没有任何编程基础的人， 想在 web 上做一个类似公众号的东西 ， 都是几乎不可能的 。 所以就算是公众号早期的时候 ， 仅仅只有一个发布图文的功能 ， 几乎相当于 web 2.0 以前的技术水平和模式 ， 仍然吸引了大量用户 。

**吴涛** [29:24]
哈哈哈 。

**Rio** [29:26]
哎 ， 后面就不用念了吧 。

**吴涛** [29:27]
对 。 您现在收听到的是 《 内核恐慌 》 一档 Rio 卖萌的节目 。

**Rio** [29:33]
OK， 啊 ， 现在切换回我自己的声音啊 ， 表示这个听众反馈环节结束了 。其实你觉不觉得这个反馈代表了很多人的心声 ？

**吴涛** [29:40]
我觉得有点像在回顾自己的童年 。

**Rio** [29:45]
呃 ， 童年太早了吧 ， 你 。

**吴涛** [29:48]
就差不多 。

**Rio** [29:49]
十年、 二十年前的 ， 就我们刚学这个接触 Linux 的时候 ， 差不多也经历过这种一种很 ， 怎么叫 ， 我用那个词太太叫 ， 让人困惑和愤怒 ， 呃 ， 让人困惑和气愤的时代 。

**吴涛** [30:01]
对 ， 这个 ， 这篇 email 里面其实我其实当时有种冲动 ， 就是把它打印出来 。

**Rio** [30:06]
被吓哭的感觉是不是 ？

**吴涛** [30:07]
不是 ， 把它打印出来 ， 然后把其中一些亮点的句子用这个荧光笔 highlight， 比如这个让人困惑和气愤的事 。

**Rio** [30:18]
对 。

**吴涛** [30:19]
啊 。

**Rio** [30:19]
因为其实这一则反馈其实我觉得相当有代表性 ，因为其实我们自己 ， 起码我自己哈 ，是也是经历过他们这个阶段这么摸索过来的嘛 ， 就是觉得就是这什么是跟什么 ， 就是一堆什么乱七八糟的玩意在屏幕跳来跳去 ， 对吧 ？

为什么这么难 ？ 为什么不能点两下就搞定了 ？ 呃 。

**吴涛** [30:40]
但我觉得这个是 ， 就这里有一个历史背景在那儿 ， 就是我们的那个时代 ， 你必须去买杂志或者是看报纸上一篇受字数限制的文章来一步一步的去钻研怎么 。

**Rio** [30:55]
没有搜索引擎 。

**吴涛** [30:56]
对 ，但是现在这个时代还是会有这样同样的 ， 比如说那个时候最简单 ， 那个时候不可能有什么 ， 呃 ， 一个 virtual box 让你装一个 Linux， 然后你按一个快键切换出来就可以去查文档了 ， 这种事情是不存在的 ， 对吧 ？

**Rio** [31:14]
就一台电脑 ， 装上就那个地方 ， 然后崩溃了 ， 你没有任何东西可以用 ， 对吧 ？

**吴涛** [31:19]
对 ，而且那个时候我反正 somehow 脑子一热把 Windows 整个删掉了 ， 就

就连一个想打游戏的 ， 就是非常 。

**Rio** [31:31]
跟我说话重来 。

**吴涛** [31:32]
非常挫折的时候想要打游戏都没有选择 ， 只能关机 。

嗯 ， 对 。

**Rio** [31:40]
不 ，但我觉得其实他这个有 ， 就是有几个方面啊 ，但是我们这个可能展开来讨论 ，但是我觉得首先有一点我要承认的就是说他说的这件事情 ， 从一个 ， 就如果我们把这个 Linux 服务器当成一个消费级别的产品来看 ， 就从它的产品感或者说这个易用性 ， 它确实是很差的 。

这点我们要承认 。

**吴涛** [32:01]
沿用那个上一期提到那个车的比喻 ，Linux 卖给你的是坦克呀 ， 那里边一大堆 。

**Rio** [32:08]
而且是不保证能正常运行 。

**吴涛** [32:10]
对 ， 里面搞不好你坐进去连方向盘都没有 ，是两个操纵杆 ， 你得先明白同时推操纵杆是前进 ， 一个前一个后就是转弯 ， 这跟就是你连方向盘的使用经验都没有了 ， 对吧 ？

**Rio** [32:24]
没错 ， 没错 。 这确实它不是一个 ， 它不是一个包装的 ， 当然也有现在有很多商业公司在做 ， 比如说就像我们觉得像一些比较 ， 呃 ， 比较 user friendly， 就比较用户友好的这个 Linux 发行版 ， 它做的已经还 ， 就是在这方面做的已经比以前好多了 。

以前那个时代真的是你要自己去下载一个这个什么 tab 回来解压编译 ， 然后选各种参数 ， 然后自己解决各种依赖 ， 对吧 ？

然后才能搞上一个软件 。 那现在比如说大部分主流的发行版都有很成熟的这个包管理器 ， 然后你只需要运行几条命令就连上网了 ， 就可以自动安装 ， 然后包括所有的依赖啊 ， 基本的配置啊都给你搞好了 ， 对吧 ？

就其实已经比十几年前好的多多多了 ， 就从我们这些老用户的角度来看 。 但是他说的那些问题确实存在 ， 就特别是对于一种 ， 呃 ， 你刚从 Windows 过来 ， 然后你也完全不理解这个命令行操作方式 ，也不理解 Linux 这些原理的话 ，其实没有这个 ， 没有这所谓没有基础嘛 ， 你真的是很难去搞懂 ，因为就是在命令行的界面有一个发现性比较差的一个问题 ， 就如果

你不知道要做什么的话 ， 你就不知道 ， 对 ， 你就根本就无处 ， 就你不能东点点西看看 ， 对吧 ？

你看啥呢 ？ 你都不知道 ， 这就是一个很自由开放的一个世界 ， 你都不知道该查什么 ， 然后也不像说有图形界面的话 ， 你可以至少看一下一共有多少个选项 ， 每个选项是干嘛的 ， 对吧 ？

它有一个这个逐渐学习的一个过程 。 但是呢 ， 就说完这些问题之后 ，其实就我自己的这种 ， 呃 ， 这种摸索学习的经历来看 ，其实它这个问题的最核心的原因就是说 ， 它没有这个基础知识 ， 就是说还没有学会走 ， 就想学会跑 ， 对吧 ？

**吴涛** [34:11]
我觉得应该这么说 ， 就是它是 ， 我觉得这个比喻可能非常的 ， 呃 ， 政治不正确 ，但是应该说它比较像 ， 呃 ， 它是一条鱼 ， 它游惯了 ， 然后上岸之后它试图在一个没有水的地方用摆动尾巴的方式前进 ， 这是行不通的 。

就是 ， 呃 ，因为有那些 Windows 的知识 ， 图形化的知识在那边 ， 你会想说沿用你曾经可行的方式去在一个崭新的环境里面工作 ， 这个是 ， 对 ， 你必须先有个词叫 unlearn， 就是把一些东西忘掉 ， 就像学那个什么太极拳一样 ， 你要忘掉自己所学的东西 ， 才可以重新开始去学一些新的东西 。

**Rio** [35:06]
对 ， 就是说你 ， 特别是遇到你从那个 GUI 图形界面转换成一个这个命令行界面 ， 这种是有本质就是范式转换的嘛 ， 你那些之前的经验是行不通的 ， 然后那么就会 ， 呃 ， 那么一个正确的方法应该是怎么样子 ？

就是说你其实需要看一些更加基础 、 更加底层的东西 ， 你得一步一步看 Linux 的基本操作 ， 它的基本原理是怎么样子的 ， 它为什么会有这些东西 ， 对吧 ？

就像我们之前讨论过的很多这种问题 ， 它的这个命令行 ， 命令行界面是更早于图形界面出现的嘛 ， 它的历史沿革是怎么样子 ， 那为什么我们在服务器上还是沿用这么一套东西 ，有各种各样的历史的原因或者是一些更加务实的考虑 ， 就没有那么简单的一个 ， 啊 ， 那个 ， 呃 ， 就没有图形界面这么直观的可以用的界面嘛 。

**吴涛** [35:57]
反正有句话说学哲学就是学哲学史 ， 那其实你学操作系统 ， 至少 Linux 操作系统 ， 你其实是要学一遍 Unix 的历史 ， 这是绕不过去的 。

**Rio** [36:07]
但其实 ， 我觉得对很多这种新手来讲 ， 它是 ， 就起码我自己也有这个很经历 ， 我就是说 ， 啊 ， 我只想做这么一个非常简单的事情 ， 对吧 ？

我为什么要花一个月或者半年的时间去研究一遍这么底层的东西 ，但你学这个 Windows 的时候 ， 你不也花了这么多时间做同样的事情 ， 你就忘了嘛 ， 对吧 ？

所以我觉得还是要先首先要把心态放对 ， 如果你要选择这条道路的话 ， 那你肯定是要先打一些 ， 就是要先读小学嘛 ， 你要完成一个高中的作业 。

**吴涛** [36:40]
最大的问题是很多人可能就被迫去做这件事情 ， 这并不是他主动的一个意愿 ， 比如说他 ， 比如说这位听众 ，他的动机其实就很简单的是把网站迁移到另外一个云服务器上， 对吧 ？

那为什么就要 ， 呃 ， 被逼着去 。

**Rio** [36:58]
折腾这么多 ，是吧 ？ 对啊 ，其实也有其他的选项 ， 只是说你没有选择那些更简单 ，因为那个什么各种 ， 什么 ， 呃 ，不叫云服务器 ， 叫什么主机空间嘛 ， 对吧 ？

那些比较简单 ， 它各种什么 PHP、Madmin 啊 ， 那些它都给你搞定了 ， 对吧 ？ 你直接配置复制过去就好了 ，也可以啊 ，但是你自己选择了一条 hard way， 那你肯定要默默 ， 你自己要想要有一个心理准备嘛 。

然后它里面其实提到一些 ， 我觉得一个核心的问题就是为什么这个 ， 就是他说为什么现在的服务器还普遍使用需要命令行的操作方式 ，而不是像 Windows 那样远程就能够直接用图形界面操作 。

啊 ， 这当然是有原因的啦 。

**吴涛** [37:40]
一个 ， 就无言以对 。 我觉得要从我的 ， 我先说我的意见 ， 我觉得就是因为命令行是个 universal 的东西 ， 就是 ， 呃 ， 它是像 Rio 最喜欢说的那句话一样 ， 它是一个最大公约数 ，是这么说的 ， 对 ， 最大公约数 。

**Rio** [38:02]
没错 。

**吴涛** [38:02]
就是你在一台路由器上 。

**Rio** [38:05]
不对 ， 错了 ， 最小公倍数 。

**吴涛** [38:07]
不不不 ， 最大公约数 ，I'm pretty sure。

**Rio** [38:10]
OK。

**吴涛** [38:10]
就是任何一个机器 ， 就任何一个数都有的那个部分嘛 ， 所以当然是最大公约数了 。

**Rio** [38:17]
没有啊 ，Windows 没有 shell 啊 ，Windows Server 没有 shell， 至少 ， 哎 ，有的 ，PowerShell 算 shell。

**吴涛** [38:23]
就我的意思是命令行这个东西基本上是可以确定它在任何一个环境下都应该有的 ， 你可能比如说什么 ， 嗯 ，macOS 9 或者是 BEOS 可能没有命令行 ，但是其他的基本上每一个操作系统都会有命令行 ，而且呢 。

**Rio** [38:43]
对 。

**吴涛** [38:44]
呃 ， 比如说你要给一个 ， 呃 ， 单片机编程 ， 单片机上是不可能跑起来图形界面的 ， 对吧 ？ 呃 ， 另一方面你要给一个 ， 比如说你要去调一些路由器上的东西 ， 路由器也不可能给你一个图形界面 ， 当然它有可能装一个 web 服务器 ，但最多也就是那样了 。

呃 。

**Rio** [39:03]
对 。

**吴涛** [39:03]
所以为什么说 ， 呃 ，Linux 普遍还要使用 shell 命令行的操作方式 ， 我觉得一方面就是这个 ，而另一方面呢 ， 则是 ， 呃 ， 使用图形界面是一种非常效率低下的方式 ， 就是可能这位听众现在还没有感觉到 ，但是 ， 呃 ， 如果用 ， 呃 ， 借用这个通信领域的一个概念来说的话 ， 就是熵非常的

低 ， 信息熵非常的低 ， 你传过来一个窗口 ， 好吧 ， 这个窗口可能有 99% 的像素是对于我来说没有任何意义的 ， 我唯一需要的就是那个 ， 呃 ， 组成输入命令行密码的窗口的那个 text input， 仅此而已 ， 对吧 ？

那为什么不就直接告诉我说我应该输入命令行密码呢 ？ 用户名和密码呢 ？ 呃 ，而且如果你每一台计算机都登录过去用图形界面操作的话 ， 呃 ， 一方面每一台计算机的图形界面将会有细微的不同 ，不管是设计上的还是 ， 呃 ， 操作系统本身上的不同 ， 呃 ， 这个会给你带来一个影响 ， 就是你会每登录到一个新服务器上就被迫去熟悉这个服务器的一些

特性 ， 比如说图标摆在哪 ， 或者是 ， 呃 ， 字体渲染有一些不一样的地方 ，但是在命令行下面没有这个问题 ， 对吧 ？

你不管到哪里 ， 你用到的那个 shell， 当然我们那些讲过的什么 bash、zsh 之类的 ，但是它们大同小异啊 ， 你只需要 ， 呃 ， 敲几乎一样的一些命令就可以完成一模一样的事情 ， 这个效率其实是要比图形界面高很多的 。

**Rio** [40:47]
对 ， 你刚才讲了一点技术上的原因啊 ， 那我讲几个另外一个维度的事情吧 ， 就是说首先你说 ， 啊 ， 如果那个 Linux 服务器用图形界面操作可不可以 ， 我觉得技术上是可以可行的呀 ，但是有一个问题在于 ， 你去看一下现在的 Linux 发行版 ， 甚至都没有几个主流发行版是用的同一个图形界面 ， 图形界面不只是一个泛指啊 ， 就包括很多东西 ， 比如说 ， 就像

比如说五光图它的那个图形系统 ， 它底层替代那些 ， 最开始的时候我们上期讲过是这个 ， 呃 ，Unix 上面的图形系统是一个 X11 的这一套东西嘛 ，但其实那个很古老 ， 现在基本上没有什么 。

**吴涛** [41:28]
从 80 年代开始吧 。

**Rio** [41:30]
对对 ， 然后现在其实就各家有各家的玩法 ， 比如说那个 Canonical， 就是五光图的东家 ，他写了一个叫做 Mere 的东西替代这一套 ，但是没有别的家采用 Mere 啊 ， 对吧 ？

**吴涛** [41:41]
对 。

**Rio** [41:42]
叫 MIR 那个子系统 ， 这就连这种底层的东西都没有办法统一 ， 更不用说上面那些什么桌面环境了 ， 比如说有什么 ， 呃 ，GNOME 啊 ，有 KDE 啊 ， 还有各种各种那种小的什么 LXD 啊 ， 之前我们讲过的嘛 。

**吴涛** [41:57]
对 。

**Rio** [41:58]
就是说在整个就是 Unix、Linux 这个环境里面 ， 图形界面这个事情从来就没有统一过 ，但反而是这个命令行这件事情 ， 就刚才你讲的是一个 universal 的一个 interface。

**吴涛** [42:09]
是一个相对来说比较统一的东西 。

**Rio** [42:12]
对 ， 对 ， 相对来说统一的 ， 它可能大同小异在命令上面 ，但是就不用说是大家对这个命令行 ， 对这个 shell 的理解都不一样 ， 起码大家的 shell 还是都是一个 sudo TTY 的设备 ， 对吧 ？

就大家这个还是有一个共同的 ， 这个是一个历史包袱 ， 你可以这么理解 ， 或者说这是一个商业现实 ， 就这样子 。

所以它不可能像 Windows 那样有一家商业公司 ， 或者像 macOS 的那个 server 那样 ， 它因为只有一家商业公司在做这个事情 ， 它可以把这个图形界面做得很漂亮 ，因为就是你真的比一下那个 macOS 的那个 server，其实做得也挺好的 ，也是通过图形化的方式来控制的 ， 然后它的底层也是 ， 就是一个 Unix 的系统嘛 ， 基本上就可以达到我们就是起码达到它 Polydary 的理想的情况 ， 就是底层

还是 Unix 系统 ，但是面上有一个很简单和好用的图形系统去解决 ， 可以远程登录去解决这个问题 。 我现在正在这么干 ， 对吧 ？

**吴涛** [43:08]
对 。

**Rio** [43:08]
但是有一个问题是绕不开的 ， 就是刚才你讲的那个熵的问题 ， 图形界面能表达的东西 ， 就它毕竟它的那个抽象的维度有限嘛 ， 它能表达的一些东西其实是不是那么够用的 ， 然后会导致有些比较复杂的软件的配置 ， 如果你用图形化的方式来表达它的话 ， 那个简直不可以接受的麻烦 ， 或者是难以开发 、 难以实现 、 难以维护 、 难以理解

。 有时候反而你用一个文本界面看一下手册 ， 可能是更加简单的一个方式 。 当然同样的来说 ， 就对于这些不同各种各样的软件来讲 ， 大部分的我们现在用的那台上面这种开源的这种软件 ， 它都不可能由于前面那个图形系统四分五裂的原因 ， 它不可能说基于那个来去支持各个主流操作系统的这些图形系统嘛 ，因为你知道很多我们用的这些 Linux 上面的软件

， 它在开发最早版本的时候 ， 这些后来图形界面都还没有诞生呢 ， 对吧 ？ 它怎么可能为它提供支持呢 ？

啊 ， 所以它一定是采用一种类似于配置文件的方式去实现的 ，而配置文件一定是通过这种命令行的方式去加载 、 去搞它的嘛 。

然后再然后， 哈哈哈 ， 就是这个自动化的过程了 。 就现在其实我们真的就对于那种大规模部署而言啊 ， 手工去操作某一个这个 Linux 服务器 ， 然后去手工安装软件 ， 基本上已经成为历史了 。

现在都是说基于这个这种虚拟机 ， 基于这种镜像的方式去部署一个基础环境 ， 然后再之后再用类似于像 Chef 啊 ， 像用那个 ， 那个还有一个 Chef 之前的那个叫什么 ？

**吴涛** [44:50]
哦 ， 呃 ，Puppet。

**Rio** [44:51]
还是后来的 ？ 啊 ，不对 ， 啊 ， 哎 ， 对了 ，Puppet， 对 ， 那个是早一代的这个运维自动化的一些工具嘛 。 像后来 ， 现在我们在流行这个 container， 之前我们也几期节目聊过嘛 ，是用 container 的方式 ， 就一定它都是自动化的 ， 自动化的话就更不需要用图形界面去增加这个东西的复杂性了 。

比如说你点鼠标先点哪个键 ， 后点哪个键 ， 你这东西怎么自动化 ， 对吧 ？

**吴涛** [45:14]
你可以用什么 ？

**Rio** [45:16]
拖拉 ， 呃 ，micro recorder 这个东西 。

**吴涛** [45:18]
录制 。

**Rio** [45:19]
这是实在是太大的 。

**吴涛** [45:21]
太大了 。

**Rio** [45:21]
对 ， 所以就不管是说从历史沿革也好 ， 技术层面也好 ， 还是说现在的实际的 ， 呃 ， 商业的 ， 就实际的大规模操作来讲 ， 呃 ，Linux Server 都不可能用图形化的方式去管理和配置 。

**吴涛** [45:37]
呃 ， 甚至我们可以说在过去的 15 年里面 ， 软件界渐渐走出了这个图形界面的迷思 ， 走向了这个 ， 呃 ， 命令行 retro 的复兴道路 。

基本上现在任何一个新推出的工具 ， 或者是 ， 啊 ， 比较有用 、 实用的开发者 、 面向开发者的工具 ， 基本上都会只给你一个 ， 呃 ， 命令行工具 ， 然后在文档上也只会教你说这个东西安装很简单 ， 什么 apt-get install， 然后， 或者 brew install， 然后， 呃 ， 具体的使用起来也都是什么 ， 比如说 Docker，Docker 的命令 ，Docker 基本上不可能给你一个开发出一个图形界面来的 。

**Rio** [46:20]
对 ， 那其实说回它这个情况 ， 那如果说那我们刚才讲的这个现状是这样 ，以后也不大可能改了 ， 那这种小白用户怎么办 ？

刚才我讲了两种出路 ， 第一个就是说 。

**吴涛** [46:30]
学 。

**Rio** [46:31]
你学 ， 对 ， 你真的花了时间去学 ， 比如说它后面提到说它明显是装了一个 MySQL， 应该跑网站 ， 应该是应个类似于这种 WordPress 的一个类型的应用吧 。

**吴涛** [46:40]
Dump。

**Rio** [46:40]
它可能装了一个 MySQL， 它竟然在 2015 年自己把安装包传到服务器上解压 ， 然后在那个了 。其实这个你明显就是用错了嘛 ，因为现在大部分的主流的这种发行版都自带这种 MySQL 的这种安装包 。

**吴涛** [46:56]
哎 ， 这还 ， 这其实还是一个我刚才说的 unlearn 的问题 ，因为在 Windows 上面没有这个东西 ， 对吧 ？

**Rio** [47:03]
啊 ， 对 ， 没有 ， 包括你 。

**吴涛** [47:04]
因为 Windows 用户习惯了说我应该从什么地方 down 一个 。

**Rio** [47:07]
下载一个什么 。

**吴涛** [47:08]
需要安装的东西 。

**Rio** [47:09]
然后装 MySQL。

**吴涛** [47:10]
双击它安装 ， 对吧 ？ 那么当你用这套 setting 是去 Linux 上装东西的时候 ， 你会自然而然产生这样的疑惑 ， 这个安装包从哪来 ， 对吧 ？

**Rio** [47:19]
对对对 ， 所以其实它就完全搞错了嘛 ， 然后其实这个事情真的是可以很简单几行命令就搞定 ， 就是从我们看来 ， 两三行命令就可以搞定 ， 你中间不用做任何别的麻烦的事情 ，而且配置都自动给你配置好了 。

但是因为你不知道什么是正确的方式 ， 所以你就只好选择一个错误的方式 ， 就一路踩坑 。

**吴涛** [47:43]
反过来说 ， 就是我们前面那一期讲这个包管理的时候 ， 这位听众明显没有认真听 。

**Rio** [47:51]
哈哈哈

，他都说了嘛 ， 边听一边听 ，也不耽误手头的事 ， 结果听是听了没记住 。Anyway， 就是说其实这种情况就是说其实完全可以不用绕过它这些嘛 ， 就我们连自己 ， 就我们这种对这个过程很了解的人都不会说自己去下载一个 MySQL 的那个安装包 ， 再传到服务器上手动去编译再配置嘛 ， 一定是有个包管理需求 。

**吴涛** [48:18]
20 年前做这样的事情吧 ， 现在不可能了 。

**Rio** [48:21]
对 ， 呃 ， 还有一个出路 ， 就现在也有一些这个厂商在尝试 ， 就是说它现在我们那个叫 ， 我们不是什么叫做 XXX as a service 嘛 ， 对吧 ？

就是什么什么作为一个服务嘛 ， 现在它在这个层级上就叫做 Infrastructure as a Service， 就技术设施作为一个服务 ， 你可以买一个虚拟的服务 ， 一个所谓的云服务器 ， 一个虚拟机嘛 ， 就是说它给你这一个 ， 就把过去把这个硬件事情把它变成一个虚拟的一个环境 ，但是你还是要去维护中间的事情 。

但是对于这种很多应用或者很多应用 ， 这个东西并不是最合适的选择 ， 你可能需要选择一个叫做 ， 我们叫做 PaaS， 就是 Platform as a Service。

这个 Platform 什么意思呢 ？ 就是说这个 Platform 可以把底层的刚才讲的那些底层是由什么什么多少个虚拟机构成的 ， 啊 ， 它们虚拟机上跑了什么软件 ， 这些都可以藏起来 ， 你不用管你最后上面跑上层的一个应用 ， 比如说你要跑一个博客 ， 对吧 ？

你只要知道怎么在一个 PaaS 平台上去安装 ， 或者是运行一个 WordPress 应用就好了 。 这个东西的 ， 呃 ， 难度是远远低于在 iS 上你自己从头到尾装一个 MySQL， 装一个这个 Nginx 或者是 Apache， 再装一个 PHP 的解释器 ， 然后再配置各种各样的 ， 要简单得多的 。

但还有一个更高级的就是在我们叫 SaaS 嘛 ， 就是你的 Software as a Service， 对吧 ？ 之前我们像国外那个 ， 当然也之前赞助过我们另外一档节目的那个平台叫 Squarespace 嘛 ， 它就把这个东西做成了一个这个软件作为一个服务嘛 ， 就是你不用管这个网站是怎么 ， 就你不用管这个网站怎么 ， 啊 ， 这个软件怎么安装的 ， 甚至你都不管怎么运行的 ， 你只要交钱 ， 每

个月出这个几十块钱 ， 它就给你一个账号 ， 你登录这个账号你就可以用一个很傻瓜的话的方式去选择一个模板 ， 然后填充你的内容就可以了 。

你这甚至都不需要知道它后面跑了什么软件 ， 对吧 ？ 就是说在不同的层级上有不同的解决方案 。 如果说你的这个能力 ， 或者说你的这个知识储备不足以在 iOS 这个最底层的平台上去做的话 ， 你可以往上走啊 ， 对吧 ？

但是就是说国内有没有这种很好的这种 PaaS， 甚至是在 SaaS 的这种平台 ， 这个是要待考的 。 但是 ， 呃 ， 起码在国外我们就从这个逻辑上来讲 ，有很多这种很成熟的选项是可以用的 。

只是说国内可能现在还没有 ， 呃 ， 普及到那一步吧 ，因为 iOS 是一个相对来说比较成熟的一个 ， 一个在技术上大家是能够理解的 。PaaS 和 SaaS 的话都有不可避免的一定程度的叫做 vendor lock-in 嘛 ， 就是叫供应商锁定 。

就你当你用了这个之后， 你就没法再迁移到别的地方了 ，因为你用了它这个 software， 就它这个软件 as a service 的话 ， 别家跟它不一样啊 ， 你要换一家的时候你怎么办 ， 对吧 ？

所以 。

**吴涛** [51:06]
你享受服务 。

**Rio** [51:07]
灵活性 。

**吴涛** [51:07]
你所拥有的自由就越少 。

**Rio** [51:09]
对 ， 就你要做的事情越 ， 你要自己要做的事情越少越简单 ， 当然是可能你从易用性角度讲是更好的 ，但是你同时你的灵活性也就越差 。

你能够迁移到别的地方的这种成本就越高 。 所以这个东西它是在不同的维度上有各有取舍的 ， 所以你自己要想清楚 ， 你愿意 ， 你是愿意花时间花成本去学这个呢 ， 还是说愿意 ， 啊 ， 就反正我要求也不高嘛 ， 对吧 ？

我就跑一个很简单的应用 ， 用一个 SaaS 或者是 PaaS 就好了 。 所以 ， 呃 ， 这件事情就没有那么简单 ， 包括后面他说那个微信大型化的原因其实很简单 ， 如果你把微信视作一个软件的话 ， 它就是一个 SaaS 嘛 ， 对吧 ？

公众账号 ， 公众号不就是这么一个 SaaS 吗 ？ 过去要开发一整套的这个技术跑在这些虚拟机上， 你能完成公众号 ， 现在公众号点一下能实现的东西 。

但是你也知道了 ， 离开公众号 ， 离开微信 ， 你还有什么呢 ？

**吴涛** [52:03]
对 ，其实这位听众说 ， 呃 ，在一个没有任何编程技术的人想在 web 上做一个类似公众号的东西 ，其实几乎是不可能的 。

我觉得其实是可能的 ， 你无非是申请一个比如说免费 blog 空间嘛 ，不就是 ？ 但是 。

**Rio** [52:18]
但是他就要自己去搭呀 。 对 。

**吴涛** [52:20]
不 ， 免费 blog 空间不需要自己搭 。

**Rio** [52:24]
呃 。

**吴涛** [52:25]
就你去什么牛波网申请一个公众号 。

**Rio** [52:28]
我那天在聊有吗 ？

**吴涛** [52:28]
有 ， 还是有的 。 什么博客 。

**Rio** [52:29]
不 ， 我就说现在 ， 现在在国 ， 就监管很严的现在 。

**吴涛** [52:33]
我的点是说为什么 ， 呃 ， 公众号早期的时候只有一个发布图文的功能 ， 仍然吸引了大量用户呢 ？

是因为本来就有大量用户啊 ， 就微信是一个封闭的有大量用户的平台 ， 所以你开公众号自然会有很多人来看 。

这是这个平台的独占性决定的 ，而不是因为就是 ， 或者说它的易用性只是一个次要的 ， 呃 ， 因素 。

就我相信即便它把 ， 呃 ， 就是腾讯把微信号 ， 呃 ， 把微信公众号的开设的门槛调得非常高 ， 还是会有很多人打破头去做一个公众号 ，因为可以吸引大量用户啊 。

**Rio** [53:14]
对 ，不过这点还是要说插一句嘴啊 ， 跟技术无关的 。 微信这个没错 ， 它确实把这个东西做得很简单 ， 然后你确实能有大量的用户 ，但是你要想清楚啊 ， 这个用户可不是你的用户 。

**吴涛** [53:26]
对 。

**Rio** [53:26]
它可是微信的用户 。

**吴涛** [53:27]
是的 。

**Rio** [53:29]
哈哈哈 ， 对 。So， 叫什么 ， 那句话怎么说来着 ？ 叫做 Choose your own drug，是吧 ？

**吴涛** [53:35]
Choose your own drug。

**Rio** [53:37]
选择你自己的药 。

**吴涛** [53:38]
Choose your own poison。

**Rio** [53:40]
Choose your own clue.

**吴涛** [53:41]
选择你自己的 。

**Rio** [53:43]
哈哈哈 ， 对 ， 每一个选择都是有后果的 。 你觉得你只要思前想后， 到底你能够接受什么 ， 你能够投入什么 ， 嗯 ， 世界上的事情并不都是那么美好的 。

**吴涛** [53:55]
对 ， 反正我觉得这篇这封读者来信 ， 呃 ， 之所以会引起我们非常热烈讨论 ，也是因为这位听众非常的诚实 ， 就他没有去掩饰自己的 ， 呃 ， 焦虑或者是 ， 呃 ， 困惑 。

我觉得这点是很好 。 呃 ， 比如我觉得最让我感受深刻的这句话 ， 让人困惑和气愤的事情 ， 为什么 ， 让人困惑和气愤的是为什么我所有步骤都做对了 ， 还是出各种问题 。

哈哈哈 ， 这就好像 ， 就好像小学的时候在 。

**Rio** [54:31]
怪我了 。

**吴涛** [54:32]
什么 ？

**Rio** [54:34]
怪我了 。

**吴涛** [54:34]
对 ， 哈哈哈 。 就好像小学的时候 ， 呃 ， 听着老师讲的什么东西 ， 或者说在学英语的时候 。

**Rio** [54:42]
点题步骤是吧 。

**吴涛** [54:43]
一步一步来 ， 最后还是做不对 。 为什么呀 ？ 这是为什么呀 ？ 这个世界为什么这样对我不公平 ， 对吧 ？

嗯 。

**Rio** [54:50]
对 ， 这其实就只说明一件事 ， 就是说你还没有真正的理解这件事 。 然后 。

**吴涛** [55:00]
所以 ， 呃 ， 我觉得我可以推荐这位听众去系统的看一下 Linux 相关的入门教材 ， 比如说国内很 。

**Rio** [55:09]
其实我觉得他不一定有时间真的去看 ， 就看他的那个工作和需求情况 。 就是说其实不一定 ， 我刚才我说了嘛 ， 就是其实系统的学习一下 Linux 的基础知识只是一种选择 ， 你可以选择别的方案 ，但只是说你考虑好你选择的后果是什么 ， 你要付出什么样的成本 ，以及你的代价是什么 。

就是真正的自由肯定是要花成本的 ， 这个成本可能不只体现在金钱上， 可能更多是体现在你的时间 ， 你的精力的投入上面去 。

然后你可以选择那些简单易用的方案 ， 就好像为什么你看那些美观的成熟的图形界面总是要付费的 ， 对吧 ？

**吴涛** [55:47]
而且我还想说的一点就是 ， 我觉得生活里面其实并不仅仅是运维或者是编程的 ， 呃 ， 这个领域有这样让人， 让这个刚入行的人来 ， 呃 ， 或者说新手 ， 让新手感觉到非常困惑和痛苦的就是他为什么要这样 ， 对吧 ？

那 。

**Rio** [56:06]
嗯哼 。

**吴涛** [56:08]
答案就是历史原因 ， 历史严格 ， 就是有非常多的历史原因造成了它现在就是今天这个样子 。 比如说我记得 ， 呃 ，Linux 里面有一个函数叫 create， 没有 e， 最后的没有 e， 对吧 ？

就我第一次用这个函数的时候写了好多遍 ， 我说我靠 ， 为什么错了 ？ 呃 ， 最后一查手册 ， 这个函数名里面没有末尾的那个 e， 就 create 没有 e。

这件事情就让我觉得 ，what the fuck， 这世界是 ， 就为什么这些事 ，Linux 世界会是这样一个破破烂烂的状况啊 ？

**Rio** [56:44]
其实只是当年写那个函数的人少打了一手 ， 一时手滑没有打到那个 e。

**吴涛** [56:50]
我记得 ， 呃 ， 那个 Unix Hate Handbook 里面提到这件事说 ，是因为当时的那个中文机特别慢 ， 呃 ， 所以所有的命令都能短则短 。

那 。

**Rio** [57:03]
不是 ， 应该不是这个原因吧 ？ 如果这样的话 ， 我 close 为什么又有 e？

**吴涛** [57:08]
对啊 。

**Rio** [57:10]
哈哈哈 ，他那个人说了嘛 ， 就是因为说打错了 ，他打错了 。

**吴涛** [57:15]
对 。

**Rio** [57:15]
还有一个事 ， 你知道那个在那个 ， 呃 ，HTTP 协议里面不是一个 refer 这个头吗 ？

**吴涛** [57:22]
对 。

**Rio** [57:24]
那个 refer 的拼写是错的 。

**吴涛** [57:25]
What？

**Rio** [57:26]
那个拼写是错的 。 因为 refer 应该是只有一个 ， 呃 ，是 refrer 吗 ？ 应该只有一个 r。

**吴涛** [57:34]
OK。

**Rio** [57:36]
他写了两个 refrer， 哎 ， 等等。

**吴涛** [57:40]
RE。

**Rio** [57:41]
我想想 。

**吴涛** [57:43]
FRER。

**Rio** [57:44]
我想哪个是正确的 ？ 我现在有点糊了 。

**吴涛** [57:46]
你别拼和英国拼法和美国拼法 。

**Rio** [57:50]
没有 ， 那是一个 ， 那是一个 ， 那是一个 ， 呃 ， 对 ，他多了一个 r， 就是正确的写法是 refrer 嘛 ， 对吧 ？ 但是他在就是 HTTP 协议制定的时候 ， 错写成了 refrer。

**吴涛** [58:03]
Oh my fucking god。

**Rio** [58:05]
然后这个错误一直被保留到现在 。

**吴涛** [58:07]
你知道这让我想起什么 ？ 那个 Tmax 的作者是个英国人吗 ？ 大概还是 anyway， 反正他在那个 ， 你在 Tmax 的 ， 呃 ， 配置文件里面写 ， 呃 ， 颜色的时候一定要打 color, you know？

**Rio** [58:22]
啊 ， 英式拼法啊 。

**吴涛** [58:25]
啊 ， 真的 。 对 ， 世界上很多事情都是这样的 ， 就是它有它有它的历史严格 ， 它成为今天这个让人困惑的 ， 让人质疑它为什么不能再简单一点的现状 ， 都是有它的原因的 。

**Rio** [58:37]
就为什么它这么不一致的 。 哎 ， 说到不一致哈 ， 下面呢我们就开始了 。 呃 ， 上期我们讲到那个 Windows 上那个叫 PUTTY 的这么一个 ， 呃 ，terminal emulator 的工具 ， 然后我们把它念成 putty。

**吴涛** [58:54]
你也念 putty 吗 ？ 我想问的是 。

**Rio** [58:56]
对 ， 我念的是 putty。

**吴涛** [58:57]
为什么 ？

**Rio** [58:58]
对 ，put 嘛 。

**吴涛** [59:01]
就 put 会加 ty 就是 putty， 对吧 ？

**Rio** [59:04]
对啊 。

**吴涛** [59:05]
多自然 ， 对吧 ？

**Rio** [59:05]
我一直以为是因为我在 ， 呃 ， 德国 ， 德国乌 ， 反正不加点的话只有乌一种念法 。

**吴涛** [59:12]
不可能念 r 是吧 ？

**Rio** [59:13]
那 。

**吴涛** [59:14]
对 。

**Rio** [59:14]
而且 。 呃 ， 说来我们就来讲讲这个 ，其实后来有那个 ，也是那个什么听众反馈 ， 如雪攀盘飞来告诉我们说 ，其实他念 ，他不 ， 我们念错了 ，他应该念 putty。

**吴涛** [59:27]
Putty, 对 。

**Rio** [59:29]
因为在那个英 ， 美式英语里面嘛 ， 至少那个 pu 它有 ， 它有念 ，不是念 ，不是 gut 吧 ， 那个肠子吧 ，不是念 gut，是念 gut， 对吧 ？

所以不是 putty，是 putty。

**吴涛** [59:45]
对 。

**Rio** [59:45]
但虽然 ，但你不知道为什么 。

**吴涛** [59:47]
不是 put， 对 ， 虽然 put 是念 put，不是 put。 啊 ，不要问我为什么 ， 这就是这个高度不高 ， 就完全没有任何一致性可言的英文就是这样 。

**Rio** [59:58]
要怪就怪法国人吧 。

**吴涛** [1:00:00]
对 ，但是为了一致性呢 ， 我们还是准备念成 putty。

**Rio** [1:00:04]
对 。

**吴涛** [1:00:05]
What？

**Rio** [1:00:06]
以及 。

**吴涛** [1:00:06]
我以为你是 。

**Rio** [1:00:07]
Micro USB。

**吴涛** [1:00:10]
哈哈哈 ， 哈 DME。

**Rio** [1:00:13]
对 ， 还有哈 DME 接口 。

**吴涛** [1:00:15]
呃 。

**Rio** [1:00:16]
德文 ， 还是德语比较严谨 ， 我觉得 。

**吴涛** [1:00:17]
严谨 。

**Rio** [1:00:18]
因为我们那个写 ， 哎 ， 德 ， 德 ， 德 ， 你们德国同事写那个 ， 呃 ， 就写这个这个这个程序的时候 ， 会用德语命名还是用英语命名 ？

**吴涛** [1:00:27]
呃 ， 英语不好的就容易写德语嘛 。其实这个这一点呢 ， 世界各地都一样 ， 就日本人还会用那个罗马字的假名来命名变量 ， 你看他们的代码 。

**Rio** [1:00:38]
中文会用拼音是吧 ？

**吴涛** [1:00:40]
你看他们代码简直想死 。 就我们的代码很多里面也是一打开一大堆那个 。

**Rio** [1:00:46]
但我觉得德 ，但德国人做这件事情我觉得很有那个 ， 就起码拉丁字母的人做这件事应该很自然而然吧 。

**吴涛** [1:00:53]
呃 ， 你说用德语来命名变量名 ， 就看起来没有那么违和吧 ？ 就是你 。

**Rio** [1:00:58]
对对对 ， 就不会很奇怪 ，因为比如说中文你用这个拼音命名就很奇怪 ，因为有那个映射的问题 ， 对吧 ？

你看 ， 你要猜 ，因为有那个一字多音的问题嘛 ， 你要猜它到底是什么玩意儿 ， 那可能根据上下文的这个 ， 呃 ， 语义你可以猜得出来 ，但德语完全没有这个问题啊 。

而且你有德国键盘又不存在输入法切换的问题 。

**吴涛** [1:01:17]
嗯 ， 对 ， 唯一需要注意的就是 encoding， 你打开的时候很容易就出现那个菱形中间一个问号 。

**Rio** [1:01:24]
还好吧 ， 现在都是 unicode 了 。

**吴涛** [1:01:26]
没有还好 。

**Rio** [1:01:27]
啊 ， 你们是 ， 你们是 Windows 环境 。

**吴涛** [1:01:30]
我们是 Linux 环境 。

**Rio** [1:01:30]
哈哈哈 。 哎 ， 那为什么会有这个问题 ？

**吴涛** [1:01:33]
有很多服务器还在跑旧版 。

**Rio** [1:01:35]
呃 ，long story，不要说这个 ， 我觉得 。 我其实也 。 泄露了公司商业机密 。

**吴涛** [1:01:41]
在上一个公司的原代码里面有很多地方我看到它判断那个 ， 呃 ， 判断一个条件是否为真的时候 ， 它总是写不等于 n。

然后我在改一段代码的时候 ， 我就写了个判 ，不去判断它是不是等于 n，而是判断它是不是 ， 呃 ，不 ，sorry，不去判断它是不是不等于 n，而是去判断它是不是等于 y。

然后那个之前维护这个代码的人就跟我说千万不要这样写 ，因为在这个代码库里面有很多地方 ， 呃 ， 和 n 相对的是 j，而不是 y。

**Rio** [1:02:20]
哈哈哈 ，是 ，是德语的 ja。

**吴涛** [1:02:22]
就 ，但是有些人是用 y 的 。

**Rio** [1:02:24]
那这里科普一下， 就是英文的 yes 是对应德文的 ja， 就是 ja。

**吴涛** [1:02:29]
然后我就说我靠 ， 我之前以为这个在 ， 呃 。

**Rio** [1:02:37]
哎 ， 等一下， 如果这样的话 ， 为什么 n， 为什么 n 是也是 ， 你们应该用 k 啊 ？

**吴涛** [1:02:41]
Kind。

**Rio** [1:02:41]
Nine。

**吴涛** [1:02:42]
哎呀 ， 用 nine。

**Rio** [1:02:43]
不是 kind，而是 nine。

**吴涛** [1:02:45]
OK。

**Rio** [1:02:46]
这也是让我觉得我靠 ， 非常崩溃的一件事情 。 所以 ， 所以你们 ， 你见过有同事用德文写这个命名吗 ？

**吴涛** [1:02:54]
有啊 ， 很多 ， 就什么什么 schleife 啊 ， 什么 ， 嗯 ， 对 。

**Rio** [1:03:00]
所以这个会影响你对代码的理解吗 ？

**吴涛** [1:03:03]
呃 ， 我 。

**Rio** [1:03:04]
还是说你现在已经这个脑子里面中德 ， 呃 ， 英德已经不 ， 已经那个自成流畅了 ？

**吴涛** [1:03:10]
我觉得我还可以吧 ， 就目前我没有因为有 。

**Rio** [1:03:14]
就你不会觉得违和吗 ？

**吴涛** [1:03:15]
我是 ， 对 ， 我不会觉得违和 ，但是我看到大段的用德语写的注释的时候 ， 我还是会皱眉头 ， 我觉得 ， 哎 ， 对 ， 何必呢 。

**Rio** [1:03:25]
就德国人英文也不是那么好 。

**吴涛** [1:03:27]
其实很多人英文非常差 ， 当然还是要比法国人好 。

**Rio** [1:03:30]
哈哈哈 ， 法国意识 。

**吴涛** [1:03:35]
好吧 。

**Rio** [1:03:37]
呃 ， 好吧 ， 那 ， 那 ， 那这个问题在中国就更加严重了 ， 我觉得 。 就起码我看到很多 ， 大部分吧 ， 应该是 ， 呃 ， 英文不那么好的人写注释都是写的中文 。

**吴涛** [1:03:50]
对 。

**Rio** [1:03:52]
或者是拼音 。

**吴涛** [1:03:53]
对 。

**Rio** [1:03:54]
如果是英文的话 ， 一定是惨不忍睹的 。 哎 。 当然也有人有问这么一件事 ， 就说你一个中国的公司 ， 程序员绝大部分都是中国人 ，在可以预见的未来也不可能招外国程序员 ， 你纠结个英文写注释算个啥 ， 对吧 ？

**吴涛** [1:04:11]
嗯 。

**Rio** [1:04:11]
然后我静无言以对 。

**吴涛** [1:04:13]
说的也对吧 ， 就是你看德国人也就一亿人嘛 ， 为什么很多程序员理直气壮的在注释里面写德语 ， 我们却 ， 我们 ， 我们世界五分之一的人口却必须在注释里面写英文呢 ？

好像的确 。

**Rio** [1:04:27]
那好歹还是世界第一大语言吧 。

**吴涛** [1:04:29]
对 。

**Rio** [1:04:30]
从人数上来讲 。

**吴涛** [1:04:31]
好像的确有点道理吧 。

**Rio** [1:04:33]
嗯 。

**吴涛** [1:04:34]
而且你看现在很多语言 ， 接下来要谈到 Swift， 就在 first， 就是在原生级别支持 Unicode， 对吧 ？ 你既然可以用 image 来 ，image 来做变量名 ， 用 Unicode 来写一些比较扯的这个操作符 ， 那为什么不能用中文 ， 用你的母语来写注释呢 ？

**Rio** [1:04:56]
嗯 ，也是啊 。

**吴涛** [1:04:58]
说的也是 。

**Rio** [1:04:58]
我觉得起码从效率来讲可能还是好一点点 ， 可能唯一要考虑的就是真的是编码的问题 。

**吴涛** [1:05:05]
就是至少你用中文 ， 你想用 ， 呃 ，brainfuck。

**Rio** [1:05:10]
特别是在 ， 特别是在 Windows 上面的话 ， 你特别要注意这个 。

**吴涛** [1:05:13]
你想用 brainfuck 来写一段程序的话 ， 你要想输出中文是非常累的 。

**Rio** [1:05:19]
哈哈哈

。 好吧 。 呃 ，OK， 今天的那个听众环节以及相关的 ， 呃 ， 吐槽就到此为止 。 我们下面进入新闻 ， 呃 ， 新闻环节 。

**吴涛** [1:05:37]
对 。

### KK

**Rio** [1:05:37]
啊 ， 第一条新闻是挺 ， 挺不错的 。

**吴涛** [1:05:41]
呃 。

**Rio** [1:05:42]
这之前是 ， 上一期还是前一期 ， 我们提到了这个有两个维多利亚秘密的模特儿 ，其实是程序员来的 。

**吴涛** [1:05:51]
去做了程序员 ，不是他们本身是程序员 。

**Rio** [1:05:54]
呃 ，不 ， 你那个是去做程序员 ， 我那个本来就是程序员 。

**吴涛** [1:05:57]
我说的是 Karlie Kloss， 你说的是谁 ？

**Rio** [1:06:00]
我说的是另外那个上次我们发的那个 ， 一个 ， 一个 ， 就是一个黑人女孩 。 她那个是本来是 iOS 开发者 ， 然后后来去被发现去做了微密模特儿 ，但是没做多久哈 。

然后你 ， 你这边后来我也找到了 ， 然后 。

**吴涛** [1:06:13]
然后她就成了你女神是吧 ？

**Rio** [1:06:15]
这 ， 这 ， 哎 ，不 ， 这个是另外一回事 。 这 ， 这 ， 这位 ， 这位最近在国内非常火 ， 呃 ，因为她帮那个华为代言了一个表 ， 然后各种就是枪文断字在那个公众号里面推嘛 ， 然后我也看到了 。

**吴涛** [1:06:35]
What？

**Rio** [1:06:36]
但我们提到啊 ， 这个有做广告前因 ， 就这段你可以略过了 ，不用解释为什么 。 嗯 ， 后来其实我们关注她是因为 ，因为别的事 ，是因为她跑去 SpaceX 作秀去了 。

**吴涛** [1:06:52]
What？

**Rio** [1:06:54]
呃 ， 然后在一个什么 ，在叫做华尔街日报的封面有一个很帅很帅的标题 ， 背后是 SpaceX 的火箭升空 ， 前面是这位 KK 女神穿着这个 ，不是凯文 · 卡利哈 ， 叫 Karlie Kloss， 德国人吗这个是 ？

**吴涛** [1:07:12]
应该不是吧 。

**Rio** [1:07:13]
看姓好像有点像 。

**吴涛** [1:07:14]
Kloss。

**Rio** [1:07:15]
Anyway， 然后拿着一个很帅的这个宇航员 ，他们喷 ， 喷绘着美国国旗 。

**吴涛** [1:07:21]
他拿的其实是用摩托头 ， 摩托车头盔 ， 我必须吐槽的是 。

**Rio** [1:07:25]
啊 ？

**吴涛** [1:07:26]
对 。

**Rio** [1:07:27]
哇 。

**吴涛** [1:07:28]
他拿的这个头盔其实叫 Jet， 呃 ，Jet 式的摩托车头盔 ， 然后他穿的衣服也只是一个印了星标旗的皮夹克而已 。

**Rio** [1:07:38]
对 ，但其实我觉得为什么这件事一定要单独拿出来讲 ，其实我提 ， 觉得它体现了一种 ， 呃 ， 呃 ， 或者就就是美国现在科技圈比较讲究的事 ， 就是这个性别平等吧 。

就是为什么我们之前讲发火箭 、 搞计算机 、 写代码这些事情一定都是男人的事情呢 ， 对吧 ？

**吴涛** [1:07:59]
对 。

**Rio** [1:07:59]
那我们也看一下是不是也有这个女人的事情 ，而且有一个怎么怎么漂亮 ， 然后身材火爆的 。

**吴涛** [1:08:07]
跑量调整 。

**Rio** [1:08:08]
对 ， 什么呀 ？

**吴涛** [1:08:09]
就是已经黑化 ，是说一个女孩身材好 ， 就是调 ， 调是指身材 ， 调直就是身材非常好 ， 爬是指脸 ， 呃 ， 爬量就是长得漂亮 ， 爬量调直的妞 。

这是从早期 ， 我相信是从什么清末的黑化转移来 ， 现在是北京日常语言 。

**Rio** [1:08:31]
对 。Anyway， 就她就是一个典范嘛 ， 然后我觉得这是一个好的现象 ， 就是说 ， 呃 ， 过去我们通常觉得这种 ， 比如说这种 ， 你想到一个什么内衣模特儿 ， 你脑子中浮现出来一定是已经有一些很多带偏见的成分嘛 ， 特别是我知道在中国大部分 ， 呃 ， 这个屌丝男性的心目里面哈 ， 会有一些这种固定的看法 。

那其实 KK 她为什么我们觉得这是一个很好的事 ， 就是她 ， 她代表了另外一种 ， 就是叫做又有头脑又有智慧又有身材又有脸蛋 ， 还超级努力 ， 然后男朋友 ， 那就是男朋友还特别有钱 ， 做什么 ， 做什么 ， 呃 ， 财团的一个二代吧 。

这 ， 这种就叫做 ， 我们姑且叫做 。

**吴涛** [1:09:17]
人生赢家 。

**Rio** [1:09:19]
人生赢家不太对 ， 人生赢家有很多形式吧 ， 我觉得这个叫 ， 就又有头脑 ， 然后又很漂亮 。

**吴涛** [1:09:26]
你要重新说一遍吗 ？ 爬 ， 我 ， 我 ， 我跟你说 ， 爬量调直 ， 脑子好使 ， 行了吧 ？

**Rio** [1:09:35]
哈哈哈 。 好吧 ， 对 ， 就我觉得这个 ， 这个是非常好的一件事 ， 然后她 ， 她会在社会中树立起另外一种形象 ， 然后这种形象会改变我们过去对这种 ， 比如说内衣模特儿也好 ， 这种比较主 ， 就先入为主的成见吧 。

**吴涛** [1:09:49]
嗯 ， 我 ， 我相信这一点也许可以在 ， 可以让我们的子孙后代在二三十年之后不会再面临我现在这样公司里面可能七八十个人只有三个女生的窘境了 。

**Rio** [1:10:04]
对 。 呃 ， 对 ， 这件事情就是这样的 ， 所以再这种女生再多来一些 ， 越多越好 。 哈哈哈 。

**吴涛** [1:10:14]
嗯 。

**Rio** [1:10:15]
啊 ， 接下来是一条 。

**吴涛** [1:10:16]
下一则新闻就是比较重量级的了哈 ，其实我们有点错过了 ，因为这是上周的新闻 。

### Swift

**Rio** [1:10:22]
现在已经有点稍微有点退热了 ，但至少看到的时候我们两个还是比较 ， 至少我很兴奋 。 不知道你 。

**吴涛** [1:10:31]
因为苹 ， 苹果在 WWDC 的时候说了吧 ， 那个 Swift 语言年底之前要开源 ，他们赶在 12 月初的时候 ，12 月上旬吧 。

**Rio** [1:10:42]
终于把这件事情做了 。

**吴涛** [1:10:43]
终于把这个事情 ， 对 ， 所以你怎么 ， 你怎么看 ？

**Rio** [1:10:47]
嗯 ， 当然很高兴了 ， 就 ， 呃 ， 我终于可以在家里面和公司里都用这种语言了 ，但 ，但怎么说呢 ， 反正要走的路还很远嘛 ，但这是一个很好的开始 。

为什么感觉好像某种巨大重大事情的发布宣言 。 它这次开源的细节还是要讨论一下， 我觉得它这次当然除了我们之前过去理解的 ， 它会把这个语言啊 ，compiler 啊 ， 这些相关的工具链开放出 ， 开放出来之外， 一个很更加重要的事 ， 它可能是把那个叫做 foundation， 就是它的标准库 ，也就至少它没有说要 ， 没有 ， 它现在还没完成 ， 没有 ， 没有全部完成吧 ，但至少它说会

， 会以后会用 Swift 逐渐写过来 。 就是说因为以前的 ， 呃 ， 就你 ， 你如果你做 iOS 开发 ， 你现在要用那个 Swift 写一个 iOS 应用的话 ， 你还是要有很多这种 Object C 的那些 foundation 的 ， 呃 ， 那个 ， 那个库嘛 ， 对吧 ？

你要调那个东西 ， 然后那个是闭源的 ， 就是私有的一个东西 。

**吴涛** [1:11:52]
对 。

**Rio** [1:11:52]
但如果你把没有这个标准库的话 ， 你光有一个语言其实并没有什么用 。

**吴涛** [1:11:57]
对 ， 简单来说这一次开源最大的一个趋势就是 Swift，Swift 这个语言和这和 Cocoa 乃至于跟 ， 呃 ，OSTEN 的这种非常紧密的耦合关系将会松动 ， 就导致 Swift 会获得更大的自由度 ， 可能将来会有一个比较标准的 ， 比如说可能会有一个标准的 IO 库 ， 对吧 ？

不像现在就是现在 。

**Rio** [1:12:24]
对 。

**吴涛** [1:12:24]
这个时间点 ， 你要在 ， 你想在 Swift， 你想用 Swift 在 Linux，Linux 上开发一些程序的话 ， 你必须做大量的这个操作性判断 。

如果是 ， 呃 ，OSTEN 的话 ， 你要调用一套 IO 函数 ，而如果是 Linux 的话 ， 你会需要去调用另外一套函数 。 但是在将来很有可能这个就就不再会是一个问题了 ，因为可能那个 ， 呃 ，CoreLib 的那帮人会做出一个跨平台的 ， 我也不知道 ，POSIC，POSIX， 呃 ， 标准 ， 标准库出来 。

**Rio** [1:12:57]
对 。 对 。 呃 ， 这次发布的那个 ，他们也有一些像工具链的话 ，他们发布了两个 ， 主要针对两个系统吧 ， 一个是针对 OSTEN 的 ， 就是它肯定是自家平台嘛 ， 肯定要支持的 。

然后它还发布了一个针对 Ubuntu，有两个发行版吧 ，14.04 那个 LTS 版本和最新的 15.10 吧 。

**吴涛** [1:13:18]
15.10 还是 15.0？

**Rio** [1:13:19]
15.4 吧 ， 应该是 。

**吴涛** [1:13:20]
15.4。

**Rio** [1:13:21]
OK。 的这个就是像编译器那些 ， 那些包都可以直接用的 。

**吴涛** [1:13:26]
对 。

**Rio** [1:13:26]
而且是就是预先编译好的嘛 。

**吴涛** [1:13:28]
反正 Windows 还暂时还是没戏的 。

**Rio** [1:13:31]
呃 ， 应该不会支持敌 ， 敌方平台吧 ， 我觉得 。

**吴涛** [1:13:37]
敌方平台 。

**Rio** [1:13:37]
但 ，但但这次也局限比较多 ，因为它只发布了一个架构 ， 就是只支持这个 X64 架构的处理器的这个指令集哈 。

它不是说你想跑一个 ， 呃 ， 就开源的 ， 你想跑 ARM 上面就好像没什么戏了 。

**吴涛** [1:13:53]
呃 ， 跑到 ARM 上面有 ，有 ， 我在邮件列表 ， 我在邮件列表里面看到了一个仁兄在做 ， 然后他目前撞到了墙 ， 然后 。

**Rio** [1:14:02]
但 ，但但至少那个 。

**吴涛** [1:14:03]
至少肯定没有官方的 。

**Rio** [1:14:05]
这是肯定的 。 对 。 对 ， 对 ， 所以 ， 所以这件事情还是挺沮丧的 。 当然了 ， 呃 ， 这个就是时间问题 。

**吴涛** [1:14:12]
早晚 。

**Rio** [1:14:13]
对 ， 总有人会去做的 。

**吴涛** [1:14:15]
就现在就已经在人做 ， 就已经有人在做了 ，而且它就它 ， 据它的说法 ， 它已经走得很远了 。 就什么 LVM 没有问题 ， 然后那个 CMark 当然也没有问题 ， 就然后唯一跑不出来的就是 Swift 本身 ， 然后它在 。

对 ， 我加入了里面的两个 ， 两个邮件列表吧 ， 一个是 Swift， 呃 ，Swift Dev 和另外一个是 Swift User， 然后这两天的讨论还是比较热烈的 。

呃 ，有 ，有一个哥们在做 Swift for Android，而且好像是个中国人。 对 。 呃 ， 然后我也是把那个代码都在公司和本机上都就按照它的那个一 ， 呃 ， 说明一步一步做下来 ， 还是 ， 还是 OK 的吧 。

就 。

**Rio** [1:15:02]
它这个 ， 它这次发布的是 2.2 的版本 。

**吴涛** [1:15:04]
2.2 版本 。

**Rio** [1:15:05]
然后我看 ， 我看了一下 Xcode 里面自带那个是 2.1 嘛 。

**吴涛** [1:15:08]
呃 ， 我已经很久没有开过 Xcode 了 ， 应该是吧 。

**Rio** [1:15:14]
对 ， 所以还是挺有意思 ， 它发布了一个更加实验性的版本 ， 然后就 ， 就他们生产 。

**吴涛** [1:15:19]
这是 master 还是 iOS？ 就其实是 master 和 stable 差别嘛 。

**Rio** [1:15:24]
对 ， 对 ， 这 ， 这次还有一个很 ， 很重要的事就是说 ，因为过去苹果像开源 ， 这个像 WebKit 也好啊 ， 还有那个叫 ， 呃 ， 那个叫什么 ， 就是苹果之前的那些开源产品 ， 它都 ， 它不会把它们内部的开发的过程拿出来 ， 它只会说给你一个 code dump， 对吧 ？

就是我们最现在这个 ， 这个状态是这样子 ， 你拿去你们自己研究怎么弄 ，但你看 ， 你从里面你看不到它是怎么一步一步得到它那个发布那个版本的嘛 。

这次就不一样了 ， 这次他们是直接选择把那个 Git 发布到那个 GitHub 上面去 ， 作为一个公开的一个 repository 嘛 。 就你可以看到 ， 你可以根据那个 commit history 嘛 ， 就是那个提交的那个历史记录 ， 你可以看到最早的一个提交是什么 ， 那个 ， 那个谁 ， 那个叫 。

**吴涛** [1:16:08]
Chris。

**Rio** [1:16:09]
叫什么 ？Chris。

**吴涛** [1:16:10]
Chris Lattner。

**Rio** [1:16:12]
Lattner， 对 ，他怎么从最开始第一个提交怎么一步一步把这个 Swift 这个这套东西搭起来的这个历史过程 ， 这个是 ， 这个是应该是从来没有出现过的事情 。

**吴涛** [1:16:22]
这是人类学研究的至宝 。

**Rio** [1:16:25]
苹果学研究 。

**吴涛** [1:16:26]
对 。

**Rio** [1:16:28]
对 ， 你可以看到苹果内部他们是至少在这个 team， 就是 Swift 这个 team 是怎么做研 ， 怎么 ， 怎么做开发 ， 怎么做项目管理 ， 怎么去 ， 呃 ， 呃 ， 这个代码怎么一步一步搞出来的 ， 过去是看不到的 ， 就其实还挺有意思的 。

这也可能跟最近这一两年苹果整体上的一个开放的态度还有点一个契合吧 。

**吴涛** [1:16:50]
对 。

**Rio** [1:16:50]
就还比较难能可贵的一个机会啊 。 大家有兴趣可以去看一下 。

**吴涛** [1:16:55]
没错 。

**Rio** [1:16:55]
然后这次发布的还有一个比较有趣的小东西叫做 ， 叫做 Swift Package Manager， 就是 Swift 语言的官方包管理器 。 为什么有趣呢 ？

因为这个 ， 这个东西是 。

**吴涛** [1:17:08]
我们之前评论过的 。

**Rio** [1:17:09]
Max Howe 写的 。

**吴涛** [1:17:10]
Max 写的 ， 对 。

**Rio** [1:17:12]
Max Howe 如果这个名字你不熟悉的话 ，Max 上那个著名的包管理器 Homebrew 是他写的 。

**吴涛** [1:17:19]
然后 。

**Rio** [1:17:20]
他自己 。

**吴涛** [1:17:20]
我们之前还 。

**Rio** [1:17:21]
去面 Google。

**吴涛** [1:17:22]
讨论过他面 Google 被拒的糗事 。

**Rio** [1:17:25]
然后他是因为什么来着 ？ 他是因为在面试的时候 。

**吴涛** [1:17:28]
翻转二叉树 。

**Rio** [1:17:30]
没有办法在白板上写出 ， 手工写出翻转二叉树的算法 。

**吴涛** [1:17:36]
对 。

**Rio** [1:17:37]
呃 ， 好吧 ， 这个我也写不出来 。

不能去 Google 这种公司 。 呃 ， 呃 ， 所以这次他后来他不是和我们说他后来去了苹果嘛 ， 然后也去了苹果也不知道该在干嘛 ， 现在就知道他是在花时间写这个 Swift Package Manager。其实想来其实还蛮合理的哈 。

**吴涛** [1:17:56]
对 。 物尽其用 。

**Rio** [1:17:57]
做得挺好的嘛 。 各尽其才 。Swift 这次发布的话 ， 就是大家想怎么去用它 ， 可能很多人在设想的一个场景就是说 ， 现在不是这个 ， 呃 ， 叫什么 ， 移动端和这个服务端的协同性比较要求比较高了嘛 ， 对吧 ？

**吴涛** [1:18:16]
对 。

**Rio** [1:18:16]
可能有一段代码需要在客户端 ， 就跟以前写那个 web app 是一样的嘛 ， 比如说最简单的 ， 你要有一个验证用户输入是否正确的 ， 或者是否合法的一段代码 ， 你可能会想在先在那个本地 ， 就是客户端上跑 。

如果客户端是一个网页的话 ， 就是在 JavaScript 里面跑嘛 。 如果客户端是一个这个 iOS 应用的话 ， 就在 ， 就是你用 Object C 或者 Swift 写嘛 。

如果客户端是一个 Android 应用 ， 你可能要用这个 Java 写 ， 对吧 ？ 但是同样一段代码和逻辑 ， 你又希望在服务端重复一下， 用户最终你还是要以服务端验证的结果为准嘛 ，因为客户端可能谁他妈知道你会不会被搞了 ， 对吧 ？

**吴涛** [1:18:55]
对 。

**Rio** [1:18:56]
呃 ，但 ， 呃 ， 过去的话 ， 你如果做这个 Object C， 没有人在服务器端用吧 ？

**吴涛** [1:19:05]
已经没有人在服务器端用 Object C 了 。

**Rio** [1:19:08]
对 ， 所以 ， 呃 ， 你一定是说在服务器端用的一种语言 ，PHP 也好 ，JavaScript 也好 ，Python 也好 ，Ruby 也好 ， 它的那个逻辑你要在 ， 呃 ， 客户端里面再复述一遍 ， 就是重写一遍 ， 就是挺容易导致两边不一致嘛 ， 或者出错的嘛 。

现在很多人想法就是说 ，其实那这样我可能很多代码就可以共享了 ， 那很多功能逻辑如果根据这个那个手 ， 那个 ， 呃 ， 对方这个设备的实际情况来考虑 ，是在客户端上运行还是在服务端运行 ， 对吧 ？

比如说 ， 比如说是一个比较老的机型 ， 可能跑起来有点慢 ， 那我可能在服务端算完就直接给它结果好了 ， 对吧 ？

**吴涛** [1:19:45]
对 。

**Rio** [1:19:46]
那如果说新的机型性能比较好 ， 我可能直接在客户端算 ， 算完之后它可以有个更快的响应的速度嘛 。

**吴涛** [1:19:52]
对 。

**Rio** [1:19:53]
对 ， 就这些东西事情就可以做了 。 但是我 ， 我 ， 我后来想了一下， 这个事情怎么说始终是一个 ， 呃 ， 很片面的事情 。

比如说你现在你国内假设你做一个应用 ，但你说你个人或者你只做 iOS， 问题不大 ，但是基本上你要做一个稍微大的应用 ， 你不可能只做 iOS， 你还是要做安卓的嘛 。

**吴涛** [1:20:14]
对 。

**Rio** [1:20:15]
那你 Swift 在安卓上怎么办 ？ 你要用安卓 ， 就是你的安卓应用是不是得写嘛 ， 对吧 ？ 就 ， 就所以其实还是逃不掉那个问题 。

所以反而是现在那些 。

**吴涛** [1:20:25]
JavaScript。

**Rio** [1:20:26]
那个什么 ， 呃 。

**吴涛** [1:20:26]
从这个远程看 ， 可能生命力最强也是 ， 呃 。

**Rio** [1:20:30]
对 ， 反而是 JavaScript。

**吴涛** [1:20:31]
从头去进的就是 JavaScript。

**Rio** [1:20:32]
对 ， 通过那个 React Native 的方式来可能反而会好一丢丢吧 。

**吴涛** [1:20:37]
对 ，但是 ， 呃 ， 怎么说呢 ， 反正你刚才说这个问题 ， 现在既有的解决方案基本就是 ， 比如说在服务 ， 呃 ， 器端实现一套逻辑 ， 然后生成客户端的代码 ， 比如说服务器端是 Java， 然后生成与这个逻辑一模一样的 JavaScript， 然后部署到客户端上 。

**Rio** [1:20:59]
你可以 compile to JavaScript。

**吴涛** [1:21:01]
对 ， 要么就是客户端 。

**Rio** [1:21:03]
这也 ， 这也 ， 这也是一种方案 ，但是 。

**吴涛** [1:21:05]
对 。

**Rio** [1:21:06]
还是挺好的 。

**吴涛** [1:21:06]
要么就是都用 JavaScript。 呃 ， 然后如果你只做苹果 ， 如果你是这个 ， 呃 ，120% 的果粉的话 ， 你可以选择只用 ，也许在不远的将来可以选择只用 Swift。

呃 ，但 ，但我觉得 Swift 的用例并不仅仅限于此吧 。

**Rio** [1:21:27]
嗯哼 。 所以你觉得在你的构想中还有什么其他的用例可以 。

**吴涛** [1:21:31]
因为我觉得 Swift 是作为一种 ， 呃 ， 怎么说呢 ， 作为一种系统级别语言而生的 。 啊 ，其实系统级别的语言可以做的事情要远远超过 web 的范畴 。

呃 ， 比如说我觉得 ， 呃 ， 叫什么 SwiftLine 之类的项目啊 ， 就是支持什么用 Swift 来写命令行下面的工具啊 。

**Rio** [1:21:52]
嗯哼 。

**吴涛** [1:21:52]
呃 ， 写一些就跟 web 完全没有关系的东西的时候 。

**Rio** [1:21:55]
就替代 C 嘛 。

**吴涛** [1:21:57]
对 ， 它其实是一种相对来说比较靠谱的系统级别的语言 。 我觉得 ， 当然我的意思是它可能还达不到比如说 Go 或者 C++ 这样的级别 ，但是它毕竟刚刚开始嘛 ， 才 3.0 还没有 ， 还在 ， 还在 ， 还在 review。

**Rio** [1:22:17]
对 。

**吴涛** [1:22:17]
假以时日也许可以成长成一个比较既优雅对吧 ， 又性感的这么一个编程语言 。

**Rio** [1:22:25]
哈哈哈 。 就想看那个叫做 adoption 嘛 ， 就是社区到底对它支持怎么样 ， 然后有 ，因为它毕竟苹果它开放只是一些核心的组件嘛 ， 然后就像周边的那些第三方包啊 ， 第三方库还是要靠社区去发布和维护嘛 。

**吴涛** [1:22:40]
对 。

**Rio** [1:22:41]
所以看社区对这个事情怎么想嘛 。 那起码 。

**吴涛** [1:22:44]
这个让我想起那个 。

**Rio** [1:22:45]
嗯哼 。

**吴涛** [1:22:45]
呃 ，Daunet 的 core library 在去年开源的时候的类似的一些 ， 一些讨论 。

**Rio** [1:22:54]
嗯哼 。

**吴涛** [1:22:54]
就是 ， 呃 ， 微软有这个愿景 ， 现在很 ， 很有趣啊 ， 微软和 Apple 都在 ， 呃 ， 呃 ，GitHub 上面有一个用户 ， 这个还 。

**Rio** [1:23:04]
就是 。

**吴涛** [1:23:05]
GitHub slash， 对 ，GitHub dot slash apple，GitHub dot slash， 呃 ，GitHub，GitHub dot com slash Microsoft， 这个 。

**Rio** [1:23:12]
嗯哼 。

**吴涛** [1:23:13]
挺违和的感觉 ， 藏好 。

**Rio** [1:23:15]
哈哈哈 。

**吴涛** [1:23:16]
就这么大的人公司居然用 。

**Rio** [1:23:17]
现在两家的主 ， 就是起码微软的也 ， 现在也说要拥抱开源了嘛 ， 对吧 ？ 它也 。

**吴涛** [1:23:23]
对 。

**Rio** [1:23:23]
它认识到这个过去那套玩不 ， 玩不下去了嘛 。

**吴涛** [1:23:27]
对 ， 过去那套说 Linux 是癌细胞的这个 ，不对 ， 它说 ， 它是说 Linux 是癌细胞吗 ？ 还是说 。

**Rio** [1:23:34]
自有软件吧 ， 应该是 ， 开源软件 。

**吴涛** [1:23:36]
它说 GPL， 它说 GPL 是癌细胞 ， 应该说 。

**Rio** [1:23:38]
GPL 确实是癌细胞 。

**吴涛** [1:23:40]
哈哈哈 。 好吧 ， 呃 ， 对 ， 就 ， 哎 ， 我刚才说到哪了 ？ 对 ， 和 C# 类似吧 ， 就 C# 和 Swift 都是我觉得蛮 ， 蛮 ， 蛮漂亮的语言 ， 希望他们就此被放飞之后可以有更大的作为吧 ，而且后面都有推手 。

**Rio** [1:23:59]
对 。

**吴涛** [1:24:00]
比较大的财团 ， 对吧 ？ 我觉得前途应该是还是可以 ， 可以 ， 可以观望一下 。

**Rio** [1:24:07]
其实我 ， 我个人哈 ， 我比较关心那个 Swift 在写服务器端软件的应用 ，因为我之前用 Go 写过一些乱七八糟的小东西嘛 。

然后我 ， 我这么想 ，因为这两个语言的性质还是不太一样哈 ，因为 Go 它是一个相对来说比较简单的语言 ， 就没有很多复杂的特性 ， 然后它支持的一些 ， 它的 ， 它的 ， 它的一些选择是很 ， 很特殊的一种组合吧 ， 比如说它有 ， 它是一个 GC， 就是垃圾回收的语言 ， 然后它对这个就是并发的支持比较良好 ， 对 web 的支持也比较不错 。

但 Swift 的话现在就不太一样 ，因为它是一个更加通用一点的语言 ， 然后它没有 GC 嘛 ， 它是用通过那个计数器的 reference counting 的方式来做内存管理 ， 然后就没有 GC 的那个暂停的问题 。

啊 ， 另外它起码在目前为止它没有对这个并发做任何特殊的优化 。

**吴涛** [1:25:03]
对 ， 它的并发不是在语言层面上支持 。

**Rio** [1:25:06]
对 ，不是语言层面对并发的支持 。 它目前在 OS 上是依赖于那个叫做 libdispatch 嘛 ， 就是那个库 ， 然后来做 。

那么 ， 那我如果 ， 那第一个自然而然的问题就是说 ， 如果做高并发的这种 web 的软件的话 ， 呃 ， 或者服务器软件的话 ， 这个 Swift 怎么弄 ？

是说用那个像 event 的方式呢 ？ 还是说以后谁再实现一个轻量级的类似于 Go 的那种现成的方式 ？ 就现在都还是未知的嘛 。

就这一块我觉得 ， 呃 ， 还不太适合现在用它来写一些服务器上的应用 。

**吴涛** [1:25:43]
对 。

**Rio** [1:25:43]
但之后 。

**吴涛** [1:25:44]
即便 Swift 3.0 也没有涵盖任何和 concurrency 相关的东西 。

**Rio** [1:25:50]
对 ， 这个其实我觉得还蛮失望的 ，因为毕竟现在就是我们一个大致的认同就是未来肯定是一个并发并行要特别考虑的时代嘛 。

因为那个核 ， 每个核不会变得更快了 ， 就是说变得更多 ， 所以 ， 呃 ， 怎么弄 ， 怎么去适应这个环境 ， 或者说怎么降低 ， 呃 ， 开发者编写这种并发应用 、 并行应用的难度 ，其实 Swift 没有 ， 没有给出它自己的答案 ， 我觉得 。

**吴涛** [1:26:18]
对 。 总之这个燕子目前还是太嫩了 ， 就还是要 。

**Rio** [1:26:23]
观望一下吧 。

**吴涛** [1:26:24]
观望一下 。

**Rio** [1:26:25]
呃 ， 刚才说到那个 Swift 3.0 啊 ，是他们明年年末 ， 就是从现在开始一年之后要发布的一个大版本 。

**吴涛** [1:26:32]
嗯 ， 说是 2016 年秋天 ， 没有记错的话 。

**Rio** [1:26:35]
呃 ， 反正是就是一年以后了 ， 至少 。

**吴涛** [1:26:37]
对 。

**Rio** [1:26:38]
然后， 呃 ， 会有一些语言层面的变动 。其实 Swift 到现在为止出来这么多版本 ， 一直都在折腾这个语言层面的变化吧 。

**吴涛** [1:26:47]
对 ，其实从最开始的 demo 一直到现在 ， 这个语言特性已经有相当程度上的变化 。 如果你做一个 now and then 的对比的话 。

**Rio** [1:26:58]
对 。 所以现 。

**吴涛** [1:27:00]
3.0 也一样 ，3.0 有可能会给做出一些就是直接打破先后兼容性的改动 。

**Rio** [1:27:06]
几乎一定的吧 。

**吴涛** [1:27:07]
对 ， 对于一个新语言来说 ， 这 ， 这还是挺正常的 。

**Rio** [1:27:11]
对 ，但是起码有这套工具链了 ， 然后我可以说 ， 呃 ， 我能够写一个 ， 呃 ， 应用 ， 小应用出来玩一下， 然后丢到这个 Linux 的服务器上一直跑着 ， 然后因为我的这个兴趣点还是在写那个服务端软件上面嘛 。

**吴涛** [1:27:27]
嗯哼 。

**Rio** [1:27:27]
我还知道以前不可能嘛 ， 现在至少可能嘛 。 然后因为它这个还有 Swift， 它是 ， 它是写出来是一个 ， 怎么说来的 ， 它不带一个 runtime 嘛 ， 它没有 GC 那套机制 ， 它生成的那个 binary 还比较小 ， 比如说最简单哈 ， 我们都写一个这个 print hello world 这么一个应用 ，Swift 编译出来在 X86 上，X864 上就是一个不到 10k 的一个 binary 吧 。

**吴涛** [1:27:51]
嗯哼 。

**Rio** [1:27:52]
但是你用 Go 写的话 ， 出来就是一兆多两兆的一个 binary，因为它里面还包含了整个 Go 的一个 runtime。

**吴涛** [1:28:00]
Go 是 battery included。

**Rio** [1:28:02]
哈哈 ， 就是有 runtime，有 GC 那套机制嘛 。 所以 ， 啊 ， 如果你想写那些小的那种 ， 就 utility， 就工具型的应用的话 ，Swift 也是一个很非常不错的选择 。

好吧 ， 那个 Swift 的事就先聊到这哈 。 还有一个重大的新闻 ， 就是我们 ， 就我也一直很关注的那个 Let's Encrypt 那个开放的 ， 呃 ， 开放的 SSL， 一个 CA 开始公测了 。

### Let’s Encrypt

**Rio** [1:28:32]
那个之前我们提到过哈 ， 它是说因为过去证书是要钱的嘛 ， 它有一些不要钱的那种 SSL 证书的发放商 ， 像那个 startssl， 它那界面不是很好使 ， 然后也很麻烦嘛 。

那 Let's Encrypt 要解决这个问题 ， 让大家都能免费的用上这个 SSL 证书加密 ， 加这 ， 进行这个加密的 HTTPS 通信嘛 ， 然后同时又可以把这个证书的生成啊 、 替换啊自动化掉 。

它这个整套这个机制是做这么一件事的 。 之前 ， 呃 ， 说是 9 月份开始发 ， 呃 ， 公测啊 ， 就拖了到了 12 月份了 ，但是好歹也开始用了 。

然后如果有兴趣的话 ， 大家可以去看一下 。 呃 ，不建议现在马上部署到生产环境里面去 ， 可以试试在一些不 ， 这可以在一些无关痛痒的地方先弄一下吧 。

**吴涛** [1:29:22]
呃 ， 我记得那天的 Let's Encrypt 呃 ， 开放公测的时候 ，是谁在推特上说了一句 ， 说 Let's Encrypt 简直就是 ， 呃 ， 科技圈的汪峰 ， 每次要 ， 要上头条就 ， 就遇到别的大新闻 。

上一次就是 Swift 开源把这个 Let's Encrypt 公测的风口完全压下去 。 接下来的新闻 ， 呃 ，也是一门一个 ， 一个语言的更新的新闻 。

### PHP 7

**吴涛** [1:29:51]
我们真的要说它吗 ？

**Rio** [1:29:53]
说吧 ， 这个还是很重要的 。

**吴涛** [1:29:55]
OK， 呃 ，PHP 7。 你看 ， 说出来都走音了 。PHP 发布了第七版 。

**Rio** [1:30:04]
呃 ， 所以这版有什么变化 ？

**吴涛** [1:30:07]
我不知道你的反应是什么 ， 我第一反应是 the fuck， 呃 ，PHP 6 怎么了 ？

**Rio** [1:30:12]
有 ，有 6 吗 ？ 有 6 吗 ？

**吴涛** [1:30:13]
为什么突然变成了 PHP 7？

**Rio** [1:30:15]
你发布过 6 是吧 ？

**吴涛** [1:30:16]
哦 ，OK， 原来你比我还那个 ， 哈哈哈 。

**Rio** [1:30:20]
因为我知道 ， 我 ， 我最后一次接触 PHP 它是 5.0 的时代 ， 对 ， 所以有 ，也有些年头了 。

**吴涛** [1:30:26]
OK， 好吧 ，PHP 4.0 是一坨屎 ，5.0 是 ， 呃 ，不那么臭的屎 ，但是到什么 5.3、5.4 其实就还不错了 。 然后 PHP 6 其实是有点像 ， 像 Python 3 吧 ，有点 。

**Rio** [1:30:42]
啊 。

**吴涛** [1:30:42]
就是 PHP 6 试图 ， 试图解决的一个最大的 PHP 的痛点 ， 就是 Unicode 支持 。 呃 ，但是 PHP 6 一直难产 ，因为这个跟他们的这个核心开发者的这个 incompetent。

**Rio** [1:30:57]
无能 。

**吴涛** [1:30:59]
对 ， 这群人不 ， 当然他们的无能 ， 呃 ， 接下来我们要介绍到很可能不是能力上的无能 ，而是一个制度上的无能 。

呃 ，他们 6.0 一直做不出来 ， 然后被迫把给 6 开发的许多新特性一点点 backport 到 PHP 5 里面 。

**Rio** [1:31:19]
啊 。

**吴涛** [1:31:19]
然后 PHP 5.3 啊 ，5.4 啊 ， 乃至接下来 whatever 的什么版本里面 ，其实都有很多新特性是来自于原本计划的 PHP 6。

**Rio** [1:31:29]
那所以其实有 PHP 6 这个版本发 ， 发布过吗 ？

**吴涛** [1:31:33]
它 ，但是问题就在于 PHP 6， 呃 ， 从来没有一个正式的 ， 就我记得 2005 还是 06 年的时候 ，他们是希望 2009 年的时候大家都迁移到 PHP 6 上 。

**Rio** [1:31:47]
嗯 。

**吴涛** [1:31:48]
呃 。

**Rio** [1:31:49]
明显不可能嘛 。

**吴涛** [1:31:50]
而 ，而 9 年之后我们 ， 呃 ，6 年之后我们看这 P， 就这扯淡去吧 ， 这大绝大部分 PHP 程序员可能连 5 和 6 之间有什么差别都弄不清楚 。

**Rio** [1:32:02]
那连 5.0、5.1、5.2、5.3 的区别估计都没有很多人解释得清楚啊 。

**吴涛** [1:32:11]
对 ， 然后我觉得 PHP 程序员其实有一种就是 ， 当然不是说亲爱的你 ， 你这位 PHP 程序员 ，不要觉得被冒犯 ， 我们是说另外一些 PHP 程序员 ，他们在 ， 哈哈哈 ，他们在写 PHP 程序的时候 ， 呃 ， 基本上就是哦 ， 看到这个 warning 就 ， 呃 ， 把 warning 关掉 ， 然后不管开发的时候有多少 warning， 只要把 warning 关掉之后看不到 warning，他们就认为这个代码是可以跑的 。

所以你给这些人说什么这个特性下一个版本就 ， 就要废掉了 ， 简直是让他们觉得不可接受的东西 。

呃 ， 总之我觉得就是这样 ， 就 PHP 的程 ，PHP 程序员很多就是白痴啊 ， 就你 ， 你跟这些人讲到的讲不清楚了 。

所以这个核心开发者也没有办法就是强势的去推动这样一群人去 。

**Rio** [1:33:07]
他也推不动吧 ， 你想这么大规模的部署量了 ， 怎么可能呢 ？ 就好像 Python 从 2 转 3 一样 ， 这么多年呢 ， 就好像也没怎么成功吧 。

**吴涛** [1:33:16]
对 ， 所以就像我们在 ， 呃 ， 就像 ， 或者说就像 Python 社区不得不把很多 3 的新特性 backport 到 2.7 里面一样 。

啊 ，PHP 也是嘛 ， 很多 6 的新特性 backport 到 PHP 5，但是这就有个问题就是 。

**Rio** [1:33:33]
更没有动力升级了 。

**吴涛** [1:33:35]
对 ， 那 ， 那新一代的 PHP Ng 应该用什么版本 ？ 然后去年的时候 PHP 社区有一个讨论 ， 就说那新的 PHP Ng 就叫 PHP 7 好了 ，Ng 就是 next generation， 所以新版的 PHP 就是 PHP 7。

所以 ， 呃 ， 如果你对这个 PHP 感兴趣的话 ， 然后你说哦 ， 现在有三个并存版本 5、6 和 7， 我应该用哪个版本呢 ？

答案是用 7。 呃 ， 或者说我从 5 要迁移 ， 那我迁移到哪呢 ？ 答案是迁移到 7，而不是到 6，因为 。

**Rio** [1:34:10]
没有 6 吗 ？

**吴涛** [1:34:10]
6 很有可能就不再会继续 。

**Rio** [1:34:14]
跳过了呗 。

**吴涛** [1:34:14]
对 ， 对 。

**Rio** [1:34:15]
OK， 呃 ， 所以总体来说 ， 那 7 到底有什么新特性是比较好的 ， 好 ，有意思的 ？

**吴涛** [1:34:22]
呃 ， 语言层面上的新特性是 ，是 ， 怎么说呢 ， 呃 ， 好像有一些是会弄坏现有代码的 ， 比如说 。

**Rio** [1:34:33]
啊 ， 就没有像它会兼容嘛 ， 这个我已经有心理预期了 ， 无所谓 。

**吴涛** [1:34:38]
OK。

**Rio** [1:34:38]
有什么好玩的特性但是 ？

**吴涛** [1:34:40]
有一个好玩的特性是 the spaceship operator。

**Rio** [1:34:43]
这是干什么的 ？ 太空船运算服务 。

**吴涛** [1:34:47]
对 ， 它的写法是一个小于号 ， 一个等于号 ， 一个大于号 。

**Rio** [1:34:50]
呃 ， 这个做什么的 ？

**吴涛** [1:34:52]
What？ 我觉得我们现在又可以拿出那个 PHP 的锤子来了 ， 就是那个两边都是起钉子的那个弯曲的翘的锤子 ， 就是有很多这样无趣且无用的东西 ， 我觉得 。

就是它这个 spaceship operator 其实就是一个 ， 呃 ，comparator 运算服务 ， 就是它会返回它左右两侧的参数之间的关系 。

如果是小的话就返回 -1， 如果是相等的话就是返回 0， 如果是大于的话就返回 1。

**Rio** [1:35:30]
哈 ？

**吴涛** [1:35:32]
对 。

**Rio** [1:35:32]
What？ 为什么会有这种意思 ？

**吴涛** [1:35:34]
是不是 ？ 对 ， 为什么要做出这样的东西来 ？

**Rio** [1:35:37]
对啊 。

**吴涛** [1:35:38]
就你不知道吧 ， 就不可理喻 ， 我觉得 。

**Rio** [1:35:43]
哎 。

**吴涛** [1:35:44]
呃 。

**Rio** [1:35:44]
好吧 。

**吴涛** [1:35:45]
好吧 ， 好吧 ， 我们从现在开始换回这个比较 ， 比较客观的态度 。 呃 ， 另外一个新特性是比如说叫 ， 呃 ，他们官方的名字叫什么来着 ？Null coalescing 之类的一个名字 ， 就是问号问号 。

**Rio** [1:36:04]
OK， 这回是做什么 ？

**吴涛** [1:36:06]
问号问号的 ， 呃 ，因为 PHP 写 PHP 的时候你经常会需要去判断一个值是不是 ，是不是被设定了 。 啊 ， 你要调用一个函数叫做 isset。

**Rio** [1:36:17]
就所谓被设定就是它不是空 ， 就不是未赋值的状态 。

**吴涛** [1:36:20]
其实就是 ， 对 ，其实就是那个 Swift 里面那个 。

**Rio** [1:36:25]
Optional type 嘛 。

**吴涛** [1:36:26]
对 ， 对 ，optional type。 然后， 呃 ， 这个 ， 这个 pattern 因为被用得太多了 ， 所以他们专门做了一个这个运算服务 ， 就是两个问号 ， 比如说你前面写一个 ， 你要判断那个 get query 里面 user 这个 variable 是不是存在 。

**Rio** [1:36:43]
天哪 。

**吴涛** [1:36:43]
你之前可能会写 isset， 呃 ，get user，而现在你可以写 get user， 问号问号 ， 如果没有设定的话 ， 后面有个缺省式是 no one， 就比如说 ， 对 ， 这有点像那个 JavaScript 的一个常用的 pattern 就是 ， 呃 ，a 等于 b， 然后或者 c， 如果 b 没有被设定的话 ， 那 a 就会被赋给 c 的值 ， 大概是这样一个用途 。

**Rio** [1:37:10]
那我问你啊 ， 如果说这个它前面判断是空的话 ， 那 user name 等于什么 ？

**吴涛** [1:37:17]
等于 no one 啊 。

**Rio** [1:37:18]
啊 。

**吴涛** [1:37:19]
我刚才说如果 gets 里面 user， 呃 ， 好吧 ， 写法是这样的 ，dollar get， 然后那个 array accessor 里面写 user， 然后问号问号 ， 后面写一个字母串 nobody。

所以意思就是如果前面这个 gets array 里面的这个 user。

**Rio** [1:37:39]
是 no 的话就是 nobody。

**吴涛** [1:37:41]
对 。

**Rio** [1:37:41]
如果它设定的话就是那个值 ，但那个值是什么就不知道 。

**吴涛** [1:37:45]
对 ， 没错 。

**Rio** [1:37:47]
就它做了一个 optional type 嘛 ，其实 。

**吴涛** [1:37:50]
其实就是相当于 loop 啊 ， 或者是 JavaScript 里面的 or 嘛 。

**Rio** [1:37:55]
啊 ？

**吴涛** [1:37:56]
Or， 就是写 loop 也会有这样的场景 ， 就是你会不知道一个值是否为设定 ， 然后你要提供一个缺省式 ， 然后 loop 的写法就是 ， 呃 ，a or or b。

**Rio** [1:38:07]
啊 ，不是 ， 还 ， 还不一样 ， 你那个 or 的话它会对那个进行逻辑判断嘛 ，但这个也是非常奇怪的一件事 ， 就是 ， 啊 ， 你逻辑判断什么 ， 就是你得到那个值 ， 你 a or b 它一定是前面 a 是为 false 的时候你才会执行 b 嘛 ， 对吧 ， 然后得到 b 嘛 。

**吴涛** [1:38:25]
对 。

**Rio** [1:38:25]
那么你怎么判断 a 为 false， 呃 ， 为假呢 ？ 就牵涉到一个那个 ， 那个叫什么来着 ， 那个叫 。

**吴涛** [1:38:32]
哦 ， 这里有一个这个问题 ， 就是这个语言如果它的布尔运算服务 。

**Rio** [1:38:37]
严不严 ？

**吴涛** [1:38:38]
布置类型严不严格 ？ 返回一个布尔类型的话 ， 那这个就可以 ， 就是可以这么滥用的 ， 这个在动 ， 很多动态里面 ， 动态语言里面都是这样的 。

它 ， 它只要求前面的那个值是一个 。

**Rio** [1:38:49]
就是 false 的值就对了 。

**吴涛** [1:38:51]
Falsy，falsy 就是 false 加 y，falsy 就是类似于假的值 ， 它就可以 ， 呃 。

**Rio** [1:38:58]
但其实 ， 这其实这个是类型不严谨的一种设计 。

**吴涛** [1:39:02]
对 ， 这基本上只有在弱类型的语言上可以用 。

**Rio** [1:39:04]
好吧 ，不过

PHP 这种 ，PHP 这种叫什么呢 ， 这种 ， 这种语言设计的方式也是挺令人奇特的 ， 我们社区需要什么我们就加进去什么 ， 完全不考虑后果 ， 或者考虑这个统一性怎么样 。

**吴涛** [1:39:22]
呃 ， 我觉得这其实这就是我们这次要说的 ， 就是 PHP 的社区为什么会有今天这个问题 ，其实 ， 呃 ， 最简单的原因就是 PHP 社区是一个没有 。

**Rio** [1:39:34]
群龙无首 。

**吴涛** [1:39:35]
嗯 ， 对 ，他们缺乏一个像 Guido 那样的所谓什么 ， 呃 ，benevolent dictator。

**Rio** [1:39:44]
For life。

**吴涛** [1:39:45]
就是 ， 对 ，for life， 对 ，他们没有一个铁腕式的人物可以明确的说这个语言应该有一个什么样的明确的性格 。 呃 ， 很有趣的一点就是 PHP 开发者社区 ， 核心开发者社区是否做新特性的时候 ，他们是要投票的 ， 就是你要做一个大的更改 ， 你 ， 你需要获得 2/3 的多数才可以把这个大的更改做进去 。

**Rio** [1:40:10]
那就是 design by committee 吗 ？

**吴涛** [1:40:13]
对 ， 这个就导致了一个现象 ， 就是很多平时根本不 care 的人， 呃 ， 你去问他们投票的意见 ，他们就会说我靠 ， 做这个干嘛 ， 烦不烦 ，不做 ， 然后就投反对票 。

呃 ， 很多比较新的特性都是因为这个就没有多 ， 没有拿到 ， 呃 ， 多数 ， 然后就 ， 然后就胎死腹中了 。

然后， 呃 ，2013 年的时候有一个人就此写了一篇文章啊 ， 题目也写得非常有 ， 写得非常有趣 ， 叫做 PHP 6 冒号 。

Pissing in the wind。

逆风而尿 。 就 ，

呃 ，而且有意思的是你在网上搜 PHP 6， 呃 ， 如果语言设定是英语的话 ， 这将是第一个结果 。 我觉得一个语言能混到今天这一步也真是不容易啊 。

然后他提出一些观点 ， 或者说他作为一个核心开发者提出的一些洞见 ， 就是说 ， 嗯 ， 这个 PHP， 呃 ， 核心开发者的社区缺乏一种 ， 呃 ，clear vision， 就是明确的这个眼界所带 ， 所 ， 所给这个语言导致的 ， 所把语言带到了今天这个境地 ，其实都是 ， 怎么说呢 ， 咎由自取 。

然后他其中给了一个链接 ， 就是 ， 呃 ，他们 PHP Core Developer 内部的一个邮件列表里面的一些对话 ， 就是首先这篇这封邮件写的火气就非常大 ， 然后， 呃 ， 它里面揭露一个问题 ， 就是说连这个 PHP 开发者叫什么来着 ，Rasmus， 都没有一个明确的目标 ， 就是 PHP 到底应该做成一个什么样的范式的语言 。

呃 ， 对此有三种态度 ， 然后一个是说啊 ， 我们 PHP 就应该做成 OO 的语言 ， 就是面向对象的 。 然后另外一个就是我们应该明确的摒弃 OO， 或者说 ， 呃 ， 提供一些 OO 的特性 ，但是语言本身应该是以 procedural 为主的 。

第三种就是说我们应该作为一个做成像 C++ 那样的 ， 就是一个什么范式都支持的语言 ，但是这三群人， 呃 ， 彼此不认同的发明关系 。

**Rio** [1:42:26]
怎么想出来这个 ？

**吴涛** [1:42:27]
对 ， 然后现在的状 ， 现状基本上就是每个人把自己想要的功能加进去 ， 然后并且假设别人都愿意接受这个功能 ， 才会导致社区今天这个样子 。

**Rio** [1:42:38]
嗯哼 ， 所以其实我有一个问题啊 ， 就是 PHP 这个社区到底现在谁比较 powerful， 能够说了算 ？

**吴涛** [1:42:45]
没有人比较 。

**Rio** [1:42:46]
因为我觉得其实这件事情 Facebook 其实还蛮有这个 ， 呃 ， 发言权或者影响力的嘛 ，他们做的那个叫做什么来着 ？

**吴涛** [1:42:53]
HHFM。

**Rio** [1:42:54]
HHFM， 然后， 呃 ， 比如说性能屌炸天嘛 ， 然后那他说我要这么干 ， 我只支持这个 ， 这个 ， 这个 ABCDE 这几个特性我觉得比较好 ，因为他们那个 Facebook 也是最大的商业的 PHP 的用户之一吧 ， 至少 。

**吴涛** [1:43:11]
现在还是吗 ？

**Rio** [1:43:11]
至少如果不是最大 ， 它至少是前 ， 可能前十 ， 举个例子啊 。

**吴涛** [1:43:15]
好吧 。

**Rio** [1:43:15]
那他们对这个完全有足够的话语权去制定这个 ， 去 ， 去 ， 去给出这么一个 vision 吗 ？

**吴涛** [1:43:22]
呃 ， 应该有道理 ，但是我也不知道 ， 这 ， 这个如果各位听众里面有在 PHP 核心开发者社区混的话 ， 可以帮我们解释一下目前 PHP 的这个 ，他们的 mentality 是怎么样的 。

**Rio** [1:43:38]
那个 ， 那个什么 ， 那个 Zen 的现在还在吗 ？

**吴涛** [1:43:41]
不知道 ， 完全没感觉 。

**Rio** [1:43:43]
Anyway， 这就是 ，其实反正没什么关系啊 ， 就只是挺 ， 纯好奇这个到底会怎么发展下去 。

**吴涛** [1:43:49]
对 ， 所以如果你对八卦和这个 ， 呃 ， 开发 ， 开发人员怎么吵架有兴趣的话 ， 可以看一看这两篇文章 ， 就说一篇文章和这个 ， 呃 ， 一封邮件吧 ， 应该说 ， 对 ， 还是挺有意思的 。OK， 好 ， 那我们 ， 呃 ， 本期 ， 呃 ， 这是第几期 ？31 期 ？

### 结尾

**Rio** [1:44:09]
30 吧 。 哎 ，30，31 了 。

**吴涛** [1:44:13]
咱们两个也是做了一年多了 ， 渐渐 lost count。

**Rio** [1:44:18]
对 。

**吴涛** [1:44:19]
嗯 ，OK， 感谢收听 IPN Podcast 网络旗下的 IT 技术主题娱乐节目 《 内核恐慌 》。 我们号称 hardcore 啊 ，但是也没有干货 。

想听人听 ，不想听人就别听 。 您可以为本节目捐款 ， 捐款地址是 kernelpanic.fm/donate。 捐款金额随意 ， 只要是 8 个正整数位就可以 。

捐款不会为你带来什么 ，不捐也不会让你失去什么 。 我们的口号是 no hard feelings。 呃 ， 如果你有任何 ， 如果你有任何反馈 ， 可以发电子邮件到 kernelpanic@ipn.li。

同时也欢迎你收听 IPN 旗下的其他 ， 呃 ， 旗下的其他几档节目 ：《IT 公论 》、《 未知道 》、《 太一来了 》、《 流星通讯 》、《High Story》、《 硬影像 》、《 无次元 》、《 薄雾志 》 以及 《 选美 》。

我们下期节目再会 。

---

本节目库由 PodHood（https://podhood.com）提供支持——播客网站平台。
