# 11. 从 Backbone 到 React

内核恐慌 · 2015-02-22

<https://lib.pan.icu/7c876b60-1331-4ef1-9809-99c567e13145>

本期《内核恐慌》邀请Backplane前端工程师Willow分享将大型Backbone应用迁移到React的实战经验。Willow指出，Backbone在内存管理、视图复用和手动DOM操作上存在痛点，而React通过虚拟DOM和组件化设计显著提升了开发效率和性能。团队仅用三人、耗时六个月将60%的前端代码转为React，并计划逐步采用Flux架构改进数据流。节目后半段，主持人吴涛和Rio讨论了微软.NET CoreCLR在OS X上的开源编译进展，以及i3窗口管理器在Linux上的高效使用体验。

## Questions this episode answers

### 如何在不重写整个 Backbone 应用的情况下，逐步引入 React？

Willow 介绍了他团队的渐进式迁移方法：他们先写了一个约20行代码的 wrapper，使得可以在 Backbone view 中嵌入 React view。因为 React 组件是自包含的，只需指定一个 DOM 容器即可渲染。这样团队可以一边写新功能一边试用 React，不需要完全重写现有代码。经过六个月，已有约 60% 的前端代码从 Backbone 迁移到 React。

[43:12](https://lib.pan.icu/7c876b60-1331-4ef1-9809-99c567e13145?t=2592000)

### .NET 的 CoreCLR 在 OS X 上编译成功，对微软有什么战略意义？

吴涛指出，这是一个 GitHub 上的 pull request 被合并进了微软官方的 CoreCLR 仓库，使得 CLR 可以在 OS X 上编译和运行非图形界面的 .NET 程序。他认为这是微软的重要战略举动：在服务器端市场面临 Java 压力下，微软通过开源和跨平台支持来扩大 .NET 的生态，即便短期内可能不赚钱，也是为了守住开发者阵地。

[27:27](https://lib.pan.icu/7c876b60-1331-4ef1-9809-99c567e13145?t=1647000)

### i3 窗口管理器实际使用体验如何？与 awesome 和 macOS 上的 Divvy 相比有什么特点？

Rio 分享了他的使用感受：i3 比 awesome 更容易上手，启动飞快，他直接把 Windows 键用作 i3 的修饰键，在 Linux 下没有冲突，体验很爽。相比之下，在 macOS 上用 Divvy 模拟平铺管理时，由于 Mac 的 Command 等快捷键被大量占用，很难找到一个合适的全局快捷键。吴涛则分享了他用 Divvy 预分配网格区域配合快捷键的方法，通过单键快速调整窗口。

[45:32](https://lib.pan.icu/7c876b60-1331-4ef1-9809-99c567e13145?t=2732000)

## Key moments

- **[0:00] 开场**
  - [4:30] 吴涛纠正上期英语发音错误：dialect、modal 和 augmented
  - [6:06] 听众讲解意大利语 -ista 名词复数规则：男性或混合群体用 -isti，纯女性用 -iste
  - [7:02] 吴涛：“做播客最好的就是可以学到各种的语文知识”
  - [10:33] Rio 认为西班牙语元音多，听起来像唱歌，很欢快
  - [11:10] 吴涛纠正中文发音：是“冒天下之大不韪”而非“大不会”
  - [11:56] Q: “干货”应该读 gān huò 还是 gàn huò？ Rio 解释本义为“没有水分”，即精华
- **[20:47] 技术选型**
  - [20:48] Rio 问 Willow 在前端快速更迭中追赶得如何？
  - [21:12] Willow 给 React Native 提交 Pull Request 修复拼写错误，感觉受到鼓舞
  - [22:15] React Native 采用 squash merge，外部贡献者无法获得单独的 git credit
  - [24:46] Willow 团队经过 6 个月将代码库从 Backbone 迁移至 React 的比例超过 60%
  - [25:38] Willow 前端团队仅 3 人，认为人数足够但理解新框架需要时间
  - [26:55] Willow 认为团队超过 4 人后沟通成本明显上升，经验交流变得困难
- **[59:34] 数据管理**
  - [59:34] Q: React 擅于视图层，数据管理方面你们是如何处理的？
  - [1:00:27] Willow 团队保留 MVC 架构，只替换视图层为 React，降低迁移成本
  - [1:01:05] Flux 架构强制单向数据流，视图通过 dispatcher 发送 action 而非直接修改 model
  - [1:03:33] Facebook 采用 Flux 的动机：大型应用中数据流不清会导致循环依赖和维护困难
  - [1:06:24] 过渡策略：保留 Backbone model 和 collection，通过 Flux 的 dispatcher 间接通信
  - [1:08:30] 跟随社区最佳实践的重要性：社区预见了未遇到的问题，且文档更全
- **[1:16:38] 总结**
  - [1:19:50] 吴涛分享因环境限制，曾用 C 预处理器和 Python 构建前端，类似重新发明轮子
  - [1:21:43] Rio 描述 Node 0.12 升级后构建工具频繁出问题，生态脆弱
  - [1:23:31] 前端转译工具 six-to-five 改名 Babel，Rio 差点找不到，感叹前端迭代太快
- **[1:27:00] CoreCLR**
  - [1:27:29] .NET CoreCLR 已能在 OS X 上编译运行，使 Mac 成为 .NET 服务端开发机
  - [1:28:23] 吴涛指出 .NET 不只有 GUI 应用，命令行程序同样常见
  - [1:34:15] 微软已将 CoreCLR 的 OS X 支持合并至官方 Git 仓库，标志正式支持
  - [1:34:42] 吴涛：“我是坚信 CLR 是比 JVM 好的”
  - [1:35:21] Scala 创始人评价 JVM 限制多，在 CLR 上实现某些特性更高效
  - [1:38:50] 吴涛分析微软开源 .NET 是出于生存：需要先占住服务器阵地，再现盈利模式
- **[1:45:37] i3**
  - [1:45:37] Rio 在 Linux 上尝试 i3 平铺式窗口管理器，认为简单高效
  - [1:46:18] Rio 惋惜 macOS 上没有 i3，因快捷键被大量软件占用，难以分配全局修饰键
  - [1:49:44] Q: Mac 上如何像 i3 一样管理窗口？ 吴涛分享用 Divvy 预设网格和快捷键
  - [1:54:44] i3 的 dmenu 启动器功能单一，无法像 Spotlight 做计算或单位转换
  - [1:57:04] 吴涛认为给 i3 添加 omnibar 功能会违背其极简设计理念
  - [1:58:53] Rio 在 VirtualBox 中全屏运行 i3，启动飞快，几乎无感底层 macOS
- **[2:12:28] 尾声**
  - [2:13:48] 吴涛：“今天是猴年马月驴日星期猪”

## Speakers

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

## Topics

Web 开发

## Mentioned

Facebook (company), Microsoft (company), AngularJS (product), Backbone (product), CoreCLR (product), Divvy (product), Flux (product), React (product), Underscore (product), i3 (product)

## Transcript

### 开场

**吴涛** [0:00]
北美山地时间 ，2006 年 1 月 2 日下午 3:04:05， 您正在收听 IPN Podcast 网络旗下的 IT 技术主题节目 《 内核恐慌 》。

我们号称 "Hardcore"，但是也没有干货 ， 想听的人听 ，不想听的人就不要听 。 内核恐慌的网址是 ipn.li/kernelpanic。 我们推荐大家使用 Podcast 的客户端来订阅节目 ； 如果您不知道该用什么样的客户端 ， 您就不要听我们节目 。

哈哈 ， 呃 ， 如果 —— 台词 ， 正确台词是 ： 如果您不知道该用什么样的客户端 ， 请访问 ipn.li/faq。OK， 哈哈 ， 好 ， 大家先讲好 ， 今天我们又一次请到了柳成云先生作为我们的嘉宾 。

**Willow** [0:46]
大家好 ， 我是柳成云 。

**Rio** [0:48]
羊年新 —— 不 ，是羊年吗 ？ 对 ， 羊年新年第一期节目 ， 大家新年快乐 。 要不要说一下什么北美人民发来的贺电 ？

哦 ， 德国人民发来的贺电 。 我这些年已经不流行这个了 ，是吧 ？ 哎 ， 你们有看春晚吗 ？

**Willow** [1:02]
我看了一点点尾巴 。

**Rio** [1:05]
Willow， 你有看吗 ？

**Willow** [1:06]
我已经 4 年没有看过春晚了吧 。

**Rio** [1:09]
我也是 。 然后那个 ， 那天早上 —— 不是 ， 今年你知道那个川普在 YouTube 上直播吗 ？

**Willow** [1:14]
对 ， 我有听说 。 非常讽刺嘛 。

**Rio** [1:18]
对对对 ，是挺讽刺的 。 不过想一下也蛮合理的 ，他这样他可以把那个什么 Low 的分配 ， 分 —— 丢给 Google 去搞吧 ， 然后海外华人也可以装模作样地过个年 。

然后那天早上我起来在那个 Apple TV 上播了可能 5 分钟 ， 实在是看不下去了 ，有点想吐 ， 然后就关了走了 。OK， 啊 ， 这个什么 ， 拜年就到此结束 。

哎 ，是不是可以讨红包 ？ 你们今天有讨红包吗 ？

**Willow** [1:43]
哦 ， 讨红包好啊 ， 讨红包好啊 。 欢迎大家转账到我的支付宝 ， 呃 ， 成云点流 。 哈哈哈 。

**吴涛** [1:52]
你居然有支付宝 ？ 你居然有支付宝 ？

**Willow** [1:54]
啊 ， 对对 ，不要 。

**吴涛** [1:55]
我完全没有支付宝 ， 我没有国内的银行卡 。

**Willow** [1:58]
请大家 ， 请大家交由 Lawrence 转交给我们就好了 。

**Rio** [2:03]
那我们有一个什么官方账号 ， 我们全部放在那里面好了 。

**吴涛** [2:09]
对 ， 可以 。其实可以去那个你们的那个会员网站上加一个什么红包选项 ， 然后大家在那边直接 Stripe 钱过来就好 。

**Rio** [2:20]
哎 ， 这个不错 ， 这个不错 。 哎 ， 刚好那个昨天那个 Stripe 又放出来 ，他们已经开始支持可以收那个什么 Bitcoin 了 。

**吴涛** [2:27]
哎 ，Stripe 支持支付宝吗 ？

**Rio** [2:29]
支持啊 ， 支持啊 。

**吴涛** [2:30]
OK， 那蛮好的 。

**Willow** [2:33]
所以吴涛你有贺青春吗 ？ 有吃年夜饭吗 ？

**吴涛** [2:39]
嗯 ， 我去给女朋友包了下饺子 ，也哪也没去 。 因为我也是要工作 ， 就没有请假什么的 。

**Willow** [2:45]
那还挺温馨的 。

**吴涛** [2:47]
你呢 ？ 你请假了吗 ？

**Willow** [2:49]
我没有呢 。 我跟我室友吃了个火锅 。

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

**Willow** [2:54]
那我那个 ， 我想都没想 ， 我星期一的时候 ， 另外一个同事 ， 我另外一个朋友说他在那个 ，他要吃火锅 ， 我才想起这个事 。

所以立马 ， 立马就抓了我室友 ， 然后还骂了他 。

**吴涛** [3:09]
你们有 ， 你们那边有唐人街什么的吗 ？

**Willow** [3:11]
有 。

**吴涛** [3:12]
是 Trading？

**Rio** [3:13]
啊 ，但是就很少去嘛 。其实你知道 China Town 跟那个 ， 跟你 ， 跟我们这些 ——

**Willow** [3:21]
这一代的中国人没什么关系 。

**Rio** [3:23]
真的就没什么关系 ， 就很很很不一样 。 而特别是我又不是潮汕人， 我又不说广东话 ， 所以说就更加陌生的感觉 。

**吴涛** [3:32]
你从中国哪去的 ？

**Rio** [3:33]
我潮汕人。

**吴涛** [3:35]
你是长沙人 ？

**Rio** [3:36]
我是长沙人， 对吧 ？

**吴涛** [3:37]
你是长沙人 ？

**Rio** [3:39]
你跟那个口音都不对 。 长沙人。 啊 ， 我是啥子说的 ？

**吴涛** [3:43]
呃 ， 长沙啥子 ？

**Rio** [3:45]
啥子说啥子 。

**吴涛** [3:47]
啊 ， 我在长沙上大学 。

**Rio** [3:48]
哦 ， 哪一所啊 ？

**吴涛** [3:50]
呃 ， 中南大学 。

**Rio** [3:51]
哦 ， 这个那挺巧的 。 你是什么时候在长沙 ？

**吴涛** [3:55]
呃 ，2002 年到 2006 年 。

**Rio** [3:58]
啊 ， 我在 ， 我当时在那的 。 啊 ， 我是 ， 我在干嘛 ？ 我在 ， 我是 2002 年啊 ，5011 年的时候 。

**吴涛** [4:06]
已经出国了 。

**Rio** [4:07]
没有 ，5011 年的时候开始上初中 。

**吴涛** [4:10]
哦 ， 对 ， 你好比我小很多 ， 我差点忘了 。

**Rio** [4:13]
对 ， 所以 ， 对对 ， 所以你啊 。 哈 ， 我那个时候还经 —— 其实我 ， 我的那个 ， 我当时， 啊 ， 我的外教是在中南大学 ， 我还经常去呢 。

所以说 ， 呃 。

**吴涛** [4:26]
我靠 ， 搞不好我碰到你 ， 碰见过 。

**Rio** [4:28]
对 ，有可能 ，有可能 。

**吴涛** [4:30]
OK， 我们先做一下前两期的 follow up。 嗯 ， 首先又到了英语课堂时间 。 呃 ， 我 ， 我读错了一个词 ，是 dialect， 我读成了 dialect。

呃 ， 这个是德语读法 ， 我再次检讨 。

**Rio** [4:50]
还有啊 ， 还有啊 ， 还有俩 。

**吴涛** [4:52]
哇 ， 这两个都是我读错的吗 ？

**Rio** [4:54]
难道是我吗 ？

**吴涛** [4:55]
好吧 ， 呃 ， 第一个 ， 这个怎么念 ？model 还是 modal？

**Rio** [5:02]
是 modal 的形容词 ， 所以是 modal。

**吴涛** [5:04]
Modal，OK。

**Rio** [5:05]
对 ， 这个就是模态的意思嘛 。

**吴涛** [5:08]
OK。

**Rio** [5:08]
几种模态嘛 。

**吴涛** [5:09]
可能当时我脑子里面想的都是 model， 所以 。

**Rio** [5:13]
哈哈哈 ， 对 。 然后这个是什么 ？

**吴涛** [5:17]
Augmented。

**Rio** [5:19]
Augmented reality， 对吧 ？

**吴涛** [5:20]
对 ，augmented。 我念成 argumented。 我也不记得了 ，是你念错还是我念错 ？

**Rio** [5:27]
我也忘了 。 下面一个我应该是说我念错了 。Backbone， 没错啊 。

**吴涛** [5:31]
Backbone。

**Rio** [5:33]
好吧 。

**吴涛** [5:33]
那是个 ， 那是个啊 ， 叫什么 ， 法语留给英语的坏习惯 ， 叫什么 ， 开源音 ， 开音节 。

**Rio** [5:40]
OK，不过这个词是今天我们后面要讲的重头戏哈 。

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

**Rio** [5:46]
嗯 ， 啊 ， 就是先卖个关子 ， 接着讲 。

**吴涛** [5:49]
卖关子有什么用 ？

**Rio** [5:50]
你把你那个 title 里面写了 ， 肯定会很明白 。 有些人可能不看嘛 。

**吴涛** [5:56]
OK， 利用了 。

**Rio** [5:57]
直接就听了是不是 ？

**吴涛** [5:58]
好吧 。

**Rio** [5:59]
嗯 ， 然后下面是意大利语正音班 。 哎 ，不对 ， 这是意大利语法 ， 语法班 。

**吴涛** [6:06]
对 ， 自从我上上期抛出那个 Paisanista 的复数是 Paisanisti 的论调之后， 有一位叫做姜正宇的朋友 ， 呃 ， 写 email 来给我们 ， 呃 ， 做了一段意大利语法的讲解 。

就是 ， 呃 ，以 ista 结尾的名词复数变化为 isti， 意思是做什么事的男人们 ， 或者是男女混合的人们 。

而如果这一个 ， 呃 ， 这种人是纯女性的话 ， 才是 ista 变成 isti。

**Rio** [6:43]
OK， 所以是 。

**吴涛** [6:46]
所以 。

**Rio** [6:47]
就是 Paisanisti， 就是复数的 ，不 ， 就是不 。

**吴涛** [6:51]
不分男女的 。

**Rio** [6:52]
不分性别的 ， 对 。

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

**Rio** [6:55]
啊 ， 这个什么 ， 你看 ， 这又印证了你那句话 ， 做播客最好的是可以学到各种的语文知识 ，但是这个语文包括 。

**吴涛** [7:02]
而且是各国语文 。

**Rio** [7:03]
各国语文 ， 哈哈 ， 各种语种的语文 。

**吴涛** [7:07]
每次看这些 ， 呃 ，其他欧洲语言就觉得英语还真是容易啊 。

**Rio** [7:14]
哈哈哈 ， 容易吗 ？

**吴涛** [7:15]
很容易啊 。 英语还 ， 英语其实还是相当容易的 ，因为 。

**Rio** [7:19]
因为我只是觉得英文的就是不太规则 。 就欧洲它像 ， 比如说你像德语啊 ， 那些 ， 就德语吧 ，其他也没什么概念 。

就是它虽然麻烦 ，但是好歹它规则 。

**吴涛** [7:28]
就是它的常用德语词典大部分时候是不需要音标的 ， 这是德语唯一点好的吧 。

**Rio** [7:34]
对 ，而且可以 ， 大部分可以读得出来吧 。 英文很多坑的 ， 就是那种有什么弱音或者是哑音 。

**吴涛** [7:40]
比方说大众是吗 ？

**Rio** [7:43]
不 ， 比如说 ， 比如说 dialect 这个词吧 ， 就什么时候一个字母 I 应该念 I， 什么时候应该念 E。

**吴涛** [7:51]
一的 ， 这个就是比较糟糕的 。

**Rio** [7:53]
对啊 。

**吴涛** [7:55]
不像德语就很 ， 比较唯一 ， 我觉得 。

**Rio** [7:57]
对 ， 比如说那个 anti-Air 还是 anti-Air， 我到现在都不知道 。

**吴涛** [8:02]
是 anti 吧 。

**Rio** [8:04]
OK， 可是很多人都 anti。

**吴涛** [8:08]
哎 ， 这个就 。 我等会儿 ， 我是在座的唯一一个没有在英语国家待过的人， 所以我念错情有可原 。

**Rio** [8:17]
加拿大人不说英语 ， 没事 。

**吴涛** [8:19]
啊 ， 好吧 ， 好吧 。

**Rio** [8:21]
我们的拼写都是跟着 British English 走的 ， 挺奇怪的 。

**吴涛** [8:27]
你知道在英语国家待得越久 ， 啊 ，well, of course， 你那个英语变得好一点 ，但是更多的是你就变得越来越不在乎了 ，因为好像大家也不是特别在意 。

**Rio** [8:38]
反正都听得明白就行了 。

**吴涛** [8:39]
听懂了就好啊 ， 就不用管了 。 所以我根本就不纠结口音的问题 。

**Rio** [8:44]
哈哈哈 。 哎 ，不过他们说是 Willow 不在美国嘛 ， 然后美国其实是没有官方语言的 。

**吴涛** [8:50]
对 ， 那个 official。 美国从来没有法定过官方语言 。

**Rio** [8:53]
对 ， 这个很诡异 ， 我觉得 。

**吴涛** [8:56]
这 ， 日本也没有规定日语是官方语言 。

**Rio** [9:00]
Really？

**吴涛** [9:01]
Really。

**Rio** [9:02]
但他们还有除了日语之外什么主要通行的语言吗 ？

**吴涛** [9:05]
就是因为如此嘛 ， 所以 。

**Rio** [9:08]
那美国还有什么西班牙语啊 ， 这种 ， 这种天 ， 特别是 Willow 所在的什么大加州 ， 那没有西班牙语真是少混半个加州啊 。

**吴涛** [9:17]
啊 ， 加州是这样的吗 ？ 我还以为只有什么新墨西哥州那个 。

**Rio** [9:21]
我觉得加州也很严重 。Willow 你说一下 。

**吴涛** [9:23]
啊 ， 没有什么严不严重的 ， 只是因为离 Latin America 比较近 ， 所以说 ， 呃 ， 所以说有很多从南美移民过来的人嘛 。

**Rio** [9:35]
对 ， 特别是南加那边好像就没有 ，不会西班牙语 ，但是挺吃亏的 ， 我觉得 。

**吴涛** [9:40]
嗯 ， 可能就是在特定的情况下， 比方说如果你开一个餐厅 ， 然后你大部分人所雇的人肯定是 ， 啊 ， 就是拉美裔的 ， 然后如果你不会说西班牙语的话 ， 作为一个 manager 跟他们沟通就很困难 。

但是平时的日常生活中， 除了泡妞之外， 好像也没有 ， 或者泡男人啊 ， 看 ，depends。

**Rio** [10:07]
很多路啊 ， 很多路会是西班牙语的呀 ， 什么那个 。

**吴涛** [10:11]
哦 ，El Camino， 呃 ，Enver Carter。

**Rio** [10:13]
对对对 ， 各种 。

**吴涛** [10:15]
那个 。

**Rio** [10:15]
Yeah, yeah, yeah。

**吴涛** [10:18]
San Jose 也是 ，也是西班牙语 。

**Rio** [10:20]
San Jose，San Jose。

**吴涛** [10:22]
对啊 ， 对啊 。

**Rio** [10:23]
San Francisco 本身也是那个 。

**吴涛** [10:26]
San Diego。

**Rio** [10:26]
西班牙语 。

**吴涛** [10:26]
对 ， 圣弗朗西斯科 。

**Rio** [10:29]
对 ，其实我觉得西班牙语挺好听的 ， 就听起来很像在唱歌的感觉 。

**吴涛** [10:33]
它元音多嘛 ， 它跟日语一样 ， 都是元音和辅音大概一半一半的 ， 就听起来比较动听 。

**Rio** [10:38]
就 ，而且听起来就觉得很欢快 ，不知道为什么 。

**吴涛** [10:41]
确实很欢快 ， 确实很欢快 。

**Rio** [10:43]
然后你就觉得 ， 如果身旁有一个什么西班牙的哥们在那里给你讲话 ， 你觉得整个生活都阳光了一些的样子 。

**吴涛** [10:53]
这个国外其实是个非常阳光的国家 。

**Rio** [10:57]
啊 ， 下面一个是国语正音班 ， 这个应该又是吴涛的吧 。 哎 ， 吴涛你怎么老是念错 ？

**吴涛** [11:03]
我老是掉书袋嘛 ， 一掉书袋就容易念错 。

**Rio** [11:05]
哈哈哈 ， 又暴露了 。

**吴涛** [11:10]
冒天下之大不为 ， 我念成冒天下之大不会了 。

**Rio** [11:14]
其实 ， 我悄悄地说 ， 我也会这么念 ， 我也会念错 。

**吴涛** [11:17]
为什么 ？

**Rio** [11:17]
这个我倒不会 。

**吴涛** [11:18]
我不是 ， 你这些没有文化的人怎么可以跟我一起主持节目啊 。

**Rio** [11:24]
哈哈哈 。

**吴涛** [11:24]
好 ， 我们两个关掉麦 ， 接下来由刘叔 。

**Rio** [11:27]
我想 ， 我想可能是那个字 ， 就是那个避讳那个讳嘛 ，不是言旁一个尾嘛 。

**吴涛** [11:33]
OK。

**Rio** [11:34]
然后这个有点 。

**吴涛** [11:35]
公会 ， 公会的那个会 ， 好像也是一个会 。

**Rio** [11:38]
啊 ， 反正就是会有点那个 ， 就如果我来念 ， 我估计也会念成那个 。 然后现在哈哈 ， 我又知道了 。

谢谢吴涛 。

**吴涛** [11:45]
谢谢 ， 谢谢 。

**Rio** [11:46]
哎 ， 我有个问题啊 。

**吴涛** [11:47]
啊 ，不客气 ，不客气 。 举手提问 ， 举手提问 ， 老师们 。 那个 ， 啊 ， 刚刚吴涛 ， 刚刚吴涛念的是那个 ， 啊 ， 就是 ， 啊 ， 没有什么干货 ，是读干货还是干货啊 ？

**Rio** [12:02]
哈哈哈 。

**吴涛** [12:04]
Serious question, come on。

**Rio** [12:07]
这个词真的不是 ， 这个问题真的不是来戏弄我们的吗 ？ 不 ， 这个其实在某一期我有 ， 啊 ， 这个某一期我遇到过另外一个问题 ， 就是 ， 呃 。

**吴涛** [12:18]
金灿 。

**Rio** [12:19]
对

，是金灿呢 ， 还是金 ， 就说我们说一个东西很 robust 的时候 ， 说它很金灿呢 ， 还是说很金灿呢 ？

**吴涛** [12:30]
啊 ， 我会说 。

**Rio** [12:31]
Willow 你回答 。

**吴涛** [12:32]
啊 ， 我会说金灿啊 。

所以你们两个是一个阵营的 ， 北美大陆都是一个阵营的 。

就我理解这个是从灿炼来的 ， 你应该说这个东西很金灿 ， 就是它非常经得起 。

**Rio** [12:51]
Willow 你说你想哪里去了 。

**吴涛** [12:53]
哦 ， 我就觉得读起来很自然嘛 。

**Rio** [12:56]
哈哈哈 ，yeah, naturally。 所以应该是干货 ， 干湿的干 ， 这个是相对于湿货来讲的 。

**吴涛** [13:06]
对 ，因为如果你用繁体字写的话 ， 这个字必须写成那个干燥的干 ， 就是 。

**Rio** [13:11]
就像看起来很像钱的那个钱 。

**吴涛** [13:13]
钱坤的那个钱 。

**Rio** [13:14]
我懂那个语境下 ，但是我不知道这个干货这个词的来源啊 ，但是我一开始以为是觉得是那个 ， 就是像煮干到那种 ， 就是 。

**吴涛** [13:25]
哦 ， 干 。

**Rio** [13:26]
重要的 。

**吴涛** [13:27]
哦 ， 干 。

**Rio** [13:27]
对 ，main product。

**吴涛** [13:28]
就是重 。

**Rio** [13:29]
我又想歪了线 。

**吴涛** [13:31]
我们没有 byproduct， 我们只有 main product。

**Rio** [13:35]
对 ， 它那个干货是来自于说没有水分嘛 ， 就说很 ， 都是精华 ，essence 这个意思 。

**吴涛** [13:42]
哦 ， 就是别人都是鸡汤 ， 我们是鸡精 ，you know， 这就是干货 。

**Rio** [13:47]
对对对 ，但我们这个就是自来水 。

**吴涛** [13:49]
学到了 ， 学到了 ， 学到了 。 谢谢老师 ， 谢谢老师 。 我们其实 ， 我们两个人是我们是脑髓 ， 脑浆 。

**Rio** [14:01]
啊 ， 还有一个反馈哈 ， 就是在前前前一期 ， 我们不是在提到苹果可能会在今年发布那个传说中的 Red Team 的 MacBook Air 嘛 ， 然后之前不是网上有个什么他的截图说这个椅子的位置被电源这种占据了吗 ？

然后当时我们在讨论就说到底是回退键那个 Backspace， 或者在 Mac 上叫做 Delete 那个键摁得多呢 ， 还是 Escape 按得多呢 ？

然后这里有一位听众叫杜凡 ， 这个是拼音吧 ，他来邮件跟我们说 ，他有一个用那个 Warp House 记录了自己击剑的频率的分布哈 ， 然后猜一下这个比例大概多少 ， 给你两秒钟 。

**吴涛** [14:42]
呃 ，1:1。

**Rio** [14:44]
哈哈哈 。

**吴涛** [14:45]
就是你吧 。

**Rio** [14:47]
就说一个 ， 我觉得这里正常来说应该差不多就差不多 10:1 的样子 ， 就它应该是 7000:600， 就是 11:1， 大概 11:1 的样子 ， 对 。

**吴涛** [14:57]
OK，他为什么不写 70:6， 要写个 7000:600？

**Rio** [15:01]
因为那个是他的击剑次数嘛 。

**吴涛** [15:05]
哦 ， 这是 rounded 次数嘛 。

**Rio** [15:05]
对对对 。 哎 ， 说来很巧啊 ， 我们这里在座三位都是 Wim 党 。

**吴涛** [15:10]
呃 ， 好像是 。

**Rio** [15:13]
Willow 也是 。

**吴涛** [15:13]
有陈云你是用 Wim 还是 EMAC？OK。

**Rio** [15:18]
啊 ， 智商太低 ， 配不上 EMAC 这种高级货 。

**吴涛** [15:22]
哈哈哈 ， 对 ， 先自黑一下以免被人黑 。

**Rio** [15:25]
哈哈哈 。 哎 ， 那个 Willow 其实你做前端开发的话 ，其实很多我看到最近很流行像用什么 Sublime 那些 ， 你怎么没有被勾引过去 ？

**吴涛** [15:35]
啊 ，因为基本上他们能够提供的 Toolchain，Wim 都能够提供嘛 ， 然后， 啊 ， 重新学习一个那个编辑器的成本这个太高了 ， 然后完全没有吸引力啊 。

我觉得那些编辑器不能叫重新学习 ，而是你要先安愣一个非常好的编辑器 ， 然后再 Revamp。

**Rio** [15:56]
将就一下 。

**吴涛** [15:57]
对 ， 强迫自己去 ， 本来已经会跑了 ， 然后慢慢走 ， 就很不适应 。

**Rio** [16:02]
哈哈哈 。

**吴涛** [16:03]
啊 ， 我是很 respect 大家 personal choice 啦 ， 就是你想用其他的编辑器 ， 我不价值你 。

**Rio** [16:14]
啊 ， 这我们节目的主旨就是你不是 Wim 党 ， 就是跟我们作对嘛 。

**吴涛** [16:19]
刚才问到这个 ， 你是用 EMAC 还是用 Wim 的时候 ， 这个割席的刀已经提起来了 。

**Rio** [16:25]
哈哈哈 ， 就等着你那个什么 。

**吴涛** [16:28]
还好 ， 还好 。

**Rio** [16:30]
不过这个是我之前有侦查过 ， 所以我才敢问 。

**吴涛** [16:32]
OK，不然伤了和气说 。

**Rio** [16:35]
对对对 ， 这样就内讧了嘛 。

**吴涛** [16:41]
呃 ， 接下来的 feedback 来自于一位听众在微 ， 呃 ，不是微信 ，是那个东西叫什么 ， 微博上面 。

**Rio** [16:54]
你说你叫什么 ？

**吴涛** [16:58]
已经这么 ， 微博已经离你生活这么远了吗 ？ 我想问一下 。

**Rio** [17:02]
因为不用嘛 ， 所以 。

**吴涛** [17:04]
嗯 ， 确实 。

**Rio** [17:05]
呃 ， 微博很糟糕我觉得 。

**吴涛** [17:07]
对 ，anyway， 反正有一个听众给我们贴了一段这个 YouTube 上面的视频 ， 讲 Lip Motion 和 Oculus Rift 结合在一起的一个应用 ， 它非常逼近我所希望的那个能够在虚拟现实里面看到自己的手 ， 至少是看到自己的手这个需求 ， 然后 。

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

**吴涛** [17:26]
呃 ，他那个 YouTube 的视频就演示了一个人戴着 Oculus Rift， 然后把 Lip Motion 贴在 Oculus Rift 的前面 ， 这样 Lip Motion 可以感受到自己的手 。

然后他在那个 Rift 的 Vision 里面把自己的手以一个虚拟的方式画出来 ， 然后再用那个手去控制虚拟世界里面的物体 。

**Rio** [17:51]
所以他用这个两家公司的方案组合出了那个 HoloLens。

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

**Rio** [17:57]
这个其实是非常非常非常非常

， 呃 ， 很奇妙的一件事情 ， 就是这两个东西本来都不是这么用的 ，但它其实这就是 somehow 叫什么 Duct Tape Programming，Duct Tape Programming， 它把两个东西粘在一起 ， 然后实现一个胶水的功能 ， 把它们两个的功能合起来 。

**吴涛** [18:19]
这不是我们的 Daily Life 吗 ？

**Rio** [18:23]
哈哈哈 ， 就是要实现一个什么功能 ， 先上那个 GitHub Social，有什么那个 Open Source 包先用一下 。

**吴涛** [18:30]
对 ， 如果有什么问题就 Stack Overflow 去搜一下有没有现成的解决方案 。

**Rio** [18:35]
哎 ， 我现在很少用 Stack Overflow 哎 ，因为我发现就是 ， 啊 ， 问题都是有时效性的嘛 ， 你说那个我们解决问题 ， 那个 2011 年解决问题的方式跟 2014、2015 年解决问题的方式有很大的变化 ，但是 Stack Overflow。

**吴涛** [18:53]
特别是前端 。

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

**吴涛** [18:54]
只有前端是这样吗 ？ 我想说 。

**Rio** [18:58]
Stack Overflow 那个搜索的结果很多都来自于就是 Asian time 那种 。 By Asian time, does it mean four years ago? Yeah, yeah, exactly. Two years ago. Yeah. 所以就变得很没用了 。

我知道那个 Google 也有 search tool 了 ，但是 ， 啊 。 那个 Stack Overflow 它现在不是做了一个功能吗 ？ 就是叫什么 ， 可以编辑成 Wiki 啊 。

你知道就它把就是你的答案是可以被再编辑的 ， 所以我看到很多就是最近 ，也不叫最近吧 ， 可能一两年的答案 ， 你可以看它的最开始回答可能是三四年前 ， 然后最近一两年又有人编辑过一遍 。

**吴涛** [19:36]
嗯 ， 那是蛮有帮助的 。 我是觉得在前端这一块可能三个月就是一个 generation。

**Rio** [19:42]
三个月 ？

**吴涛** [19:43]
三个月 。

**Rio** [19:43]
如果你的 。

**吴涛** [19:45]
如果你的技术周期还是月的话 ， 你已经落后了 。 通常都是以周为计算的 。

**Rio** [19:50]
不 ， 我的意思是如果你看到这个答案是三个月之前的 ， 那基本上意味着它可能已经不对了 。 但是其他一些领域 ， 比如说我今天不得已又去碰了一下 JavaSwing， 然后 Stack Overflow driven development 是非常成功 ， 大概是四年前的一个答案 ， 非常完美的帮到我 。

**吴涛** [20:10]
所以这个成熟的 ， 就是 mature product， 就是这个好处 。

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

**吴涛** [20:16]
这个 。

**Rio** [20:17]
就然后我还顺便找了一本书 ， 里面讲的一些 JavaSwing 的技巧 ， 你看里面实现的那些视觉效果 ， 哇靠 ， 都是 90 年代那个感觉 。

**吴涛** [20:28]
还有跑马灯吗 ？

**Rio** [20:30]
好像没有吧 ， 就什么阴影呀 ， 圆角啊 。 哦 ， 圆角现在看起来都已经如此过时了 ， 怎么 。

**吴涛** [20:39]
要 flat。

**Rio** [20:42]
好吧 ， 现在说到这个前端开发 ， 哎 ， 那个我们就切入今天的主题吧 。

### 技术选型

**吴涛** [20:47]
好 。

**Rio** [20:48]
呃 ， 那个什么 ， 呃 ，Willow 同学 ， 你就刚才我们说了前端开发是以周为单位 ， 那个时间单位来计算更迭速度的 ， 您最近追赶得怎么样 ？

**吴涛** [21:00]
还在学习 ， 还在学习 。 这个刚刚说了嘛 ， 就是自黑了 ， 已经自黑过了 ， 就继续一下 。 那个就感觉智商很不够用 ， 你知道吧 ， 就在这个更新周期里头 。

你看 React Native， 我们上期说了那么多 ， 结果我直到昨天才终于有机会尝试了一下， 然后还给他们交了一个 Pull Request，但只是 fix 一个 typo 了 ，但是觉得很骄傲 。

**Rio** [21:27]
这也是贡献 ， 没关系 。

**吴涛** [21:29]
对 ， 就是在 GitHub 上面不管你的贡献多少 ， 哪怕只是改个标点符号 ， 你也会出现在那个 ， 你的 contributions 里面也会出现那个有什么 popular。

**Rio** [21:39]
而且是一个很重要的 contribution， 叫做 improve documentation。

**吴涛** [21:44]
这个多重要的一件事 。

**Rio** [21:46]
你知道那个 React Native 它的那个 management， 我不知道 React 它本身是怎么那个 ， 呃 ，Pull Request 怎么 manage，但是它这个是一个 squash merge， 所以它几个人那个 merge request 会被 squash 在一起 ， 然后以一个 ， 呃 ， 就是他们 main contributor 身份 push 出来 ， 所以说我其实是得不到 credit 的 ， 虽然我也不 deserve something 了 。

**吴涛** [22:15]
摸摸头 。 那可是这样每一个 merge， 每一个 commit 不是会非常大吗 ？ 这样有什么好处 ？

**Rio** [22:22]
应该是就是说 ， 呃 ， 我没有 ， 它现在这个整个这个 repo 上只有 38 个 commit， 然后全都是说 ， 呃 ， 就今天的更新 ， 就是 February 16th，February 17th 的更新 ， 然后， 呃 ， 可能它就是把一些小的东西 merge 出来 ， 或者是 ， 呃 ， 它并没有接受很大的 Pull Request， 我并不是很清楚 ，但是这是它的 。

**吴涛** [22:50]
它应该没有直接在那个 GitHub 上面做那些什么 code review 那些吧 ， 它应该是在线下做 ， 然后就 GitHub 只用来同步用的吧 。

我看很多公司发布出来的产品都是这样子啊 ，他们内部可能比如说是用那个 fabricator。

**Rio** [23:04]
呃 ，Facebook 是用 fabricator， 这是我知道的 ，但是 ， 呃 ， 我不知道就是像这种第三方 ， 就我们 Pull Request，因为 Facebook 那个 fabricator 并不是对外开放的嘛 ， 所以我如果说我作为一个 ， 呃 ， 那个 open source contributor， 我是不能够用 Facebook 那个 fabricator 来做 code review 的 ， 所以应该这个 code review 还是在 GitHub 上完成的 。

**吴涛** [23:29]
所以那个 React Native 他们在 GitHub 上的 repo，他们是有人在什么 ， 就是你们所有的像 Pull Request， 还有包括 issue 都在那边做吗 ？

还是说那只是一个中转的地方而已 ？ 它还是在其他地方做那些代码审核的东西 ？

**Rio** [23:43]
这两者并不冲突啊 ， 两者都可以用 。 像我们公司的话也是这样一个结构 ， 就是我们用 GitHub 来 manage 我们的 repo， 然后用 fabricator 来做那个 code review，fabricator 有很好的跟 GitHub 相连接的那个 ， 就是 built-in plugin， 所以你可以 ， 所以很自然的就可以用两者同时用 。

但是你不可能就是说什么一个 code review 同时在 GitHub 上 review，也在 fabricator 上 review， 这是做不到的 。

**吴涛** [24:16]
对 ， 我就是在想它为什么会出现你说这个 ， 如果它是在 GitHub 上面做的话 ， 为什么会出现你这种状况 ， 会把多个这个 commit 就整合到一起再放上去 ， 就挺奇怪的 。

That's beyond me. I don't know. Yeah. 对 ， 这已经算是他们内部的工作流程的问题了 。 我们这些局外人应该是猜不到的 。

**Rio** [24:40]
OK。 呃 ， 那个 Willow， 那你最近是在忙乎什么 ？

**吴涛** [24:46]
呃 ， 我最近熬夜熬得很多 ，因为我们最近有一个新产品要发布 ， 所以说 ， 呃 ， 然后随着这个新产品 ， 我们整个 ， 呃 ， 前端终于是可以说是超过 60% 是从 Backbone 转移到了 React， 呃 ， 那个非常开心 ，但是 ， 呃 ，也是花了我非常长的时间 。

我们公司整个 ， 呃 ， 这个流程 ， 呃 ， 到现在 ， 从开始到现在 ， 大概是 6 个月的时间 。

**Rio** [25:19]
所以没有以周为计算单位哈 ？ 什么跑得还不够快 ？

**吴涛** [25:25]
至少不够用 ， 至少不够用 ， 至少不够用 。

**Rio** [25:28]
哎 ， 所以先介绍一下这个 ， 就是你们整个这个 ， 就整个这个 ， 就一个直观的认识吧 ， 多大的一个项目 ， 比如说你们这个前端开发团队有多少人 ？

**吴涛** [25:38]
我们只有三个人。 做一个小团队就是说 ，其实我们 ， 呃 ， 我觉得人还算 ， 还算 ， 就是够用 ， 三个人还够用 。

关键是说 ， 呃 ， 从一个新的技术出来 ， 到你能够自由的应用它 ， 全面的理解它的好坏 ， 知道 best practice 是怎么样的 ， 这个流程并不是人多人少能够解决的问题 ，而是一个 。

**Rio** [26:04]
智商高低能够解决的问题吗 ？

**吴涛** [26:06]
行行行 ， 好 。 对 ， 没错 ， 智商高低能够帮助的 。

**Rio** [26:10]
对 ，boycott 智商这个词 。

**吴涛** [26:14]
对 ， 呃 ， 这个 ， 呃 ， 所以我觉得并不是说我们就特别的慢 ， 或者是说人不够用 ， 关键是说 ， 呃 ，React 还是从它的思维方式上跟之前的产品有非常大的不同 ， 然后， 呃 ，在大量的实践的过程中， 我们也是逐渐的 ， 逐渐的明白到底这个不同是怎么样的 。

呃 ， 我觉得大部分的时间花在那个上面 ， 所以如果我看那个 。

**Rio** [26:40]
所以你们会彼此交流吗 ？ 就是我理解的这一块 ， 然后可以给你讲一讲啊之类的 。 因为我觉得就是一个团队可能超过四个人的时候 ， 交流成本就非常可观了 。

呃 ， 可能四个人的时候还可以大家一起坐下来 ， 就直接凑在电脑前面讲自己最新进的发现 ，但是再多一个人就可以非常明显的感觉到空间不够用了 ， 然后就可能会需要去开个会啊什么的 ， 然后这个这个 ， 然后你会觉得五个人里面当人数大于四的时候 ， 你就会意识到这个每个人的进展速度是不一样的 ， 然后会有一种很强烈的 ， 呃 ， 某 A 拖了某

B 的后腿这种感觉 。

**吴涛** [27:31]
这叫什么 ， 沟通复杂度 ， 所以什么 O(n) 的平方的增长吧 ？

**Rio** [27:35]
呃 。

**吴涛** [27:36]
应该是指数级增长吧 。

**Rio** [27:38]
可能 ， 我觉得是指数级 ， 就不只是平方而已 。

**吴涛** [27:41]
不是平方 。

**Rio** [27:42]
OK。

**吴涛** [27:42]
哦 。

**Rio** [27:43]
我觉得 《 人月神话 》 里面好像对这个有一个描述吧 ，但我具体是怎么样的公式我也忘了 。

**吴涛** [27:51]
你竟然还看 《 人月神话 》 这种产品经理吧 ， 工程经理才看的东西 。

**Rio** [27:56]
What？

**吴涛** [27:56]
你 ， 哦 ， 好吧 ， 你本科不 ，因为本科的时候就你总要学习读一读相关的书籍吧 。

**Rio** [28:03]
哎 ， 好啊 ， 暴露了 。

**吴涛** [28:04]
这是我 。

**Rio** [28:05]
哎 ， 为了你我看过 。

**吴涛** [28:07]
《 人月神话 》 没有赢的 ， 啊 ， 天呐 。

**Rio** [28:10]
快 ， 找来个垫背的 ， 太好了 。

**吴涛** [28:13]
你们刚刚在说什么 ？ 我怎么都听不懂啊 。

**Rio** [28:15]
就是那个叫 。

**吴涛** [28:16]
我懂的 ， 我懂的 。

**Rio** [28:18]
我也没有读过那本书啦 。

**吴涛** [28:21]
但是听过名字 。

**Rio** [28:23]
啊 ， 我知道 ， 我知道 。 一开始我以为是那个 sci-fi 书呢 ，Honestly。

**吴涛** [28:29]
看名字很像是吗 ？

**Rio** [28:31]
对啊 。

**吴涛** [28:32]
呃 。

**Rio** [28:34]
对 。

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

**Rio** [28:34]
就是直接回答那个吴涛那个问题 ，其实是一个非常好的团队建设的问题 。 呃 ， 三个人是一个 ， 就沟通成本还比较小一点 ，但是 ， 呃 ， 就是我们不希望花太多的时间在开会和沟通上 ，因为 ， 呃 ， 总体而言还是希望能够花更多时间在写代码上嘛 。

所以我们的设置主要是有几项 ， 呃 ， 就是 process 来帮助吧 。 首先是我们所有的 commit 都会 code review。 呃 ，code review 的确会减慢那个从 commit 到那个 production 的时间 ，但对 code quality 是非常有帮助的 。

同时也是一个很好的经验交流的一个

媒介吧 ，因为在 code review 的时候 ， 如果你看不懂其他人在写什么 ， 那往往就是一个很好的契机来互相学习说对方在想什么 。

呃 ， 然后你也知道这个非常经常的我们会有 WTF moment， 就是看别人的代码的时候 。

**吴涛** [29:34]
对对对 。

**Rio** [29:35]
我觉得 code review 特别有用 ， 就是有时候 ， 就不管你是 review 别人也好 ， 还是就是别人 review 你也好 ， 可能别人 review 你的 ， 就是对方是一个大牛的话 ， 给你的那个提升就更大 。

之前我不是在写一个小的那个开源项目吗 ？ 然后后来 ， 那个 ， 你们知道那个 MemeCash 那个的作者吗 ？

**吴涛** [29:55]
不知道 。

**Rio** [29:56]
叫 Brad，他现在在写 Go 的 ， 就是 Go 的主要开发者之一 ， 然后他也在用那个工具 ， 然后他就给我 ， 就我提交代码之后要 merge 进去嘛 ， 然后他就给我指点了一下， 顿时一种茅塞顿开的感觉 ， 超爽 。

**吴涛** [30:11]
我靠 ， 这是叫什么 ， 令狐冲遇到了风清扬 。

**Rio** [30:14]
对对对 ， 就是那种感觉 。

**吴涛** [30:16]
你这是抬举他还是 ， 对 ， 你这是拍人马屁啊 ， 吴涛 ， 你这不行啊你 。

**Rio** [30:23]
意图太明显了 。

**吴涛** [30:26]
好 ， 接着说 。

**Rio** [30:30]
Code review 非常有用 ， 然后也像刚刚 Rio 说的 ， 特别是说如果你有其他可以学习的对象的话 ， 就更加有帮助了 。

呃 ，而且我们也有 ， 每两周有一个 Tech Talk， 就是我们团队内部的人会给一个 Tech Talk，不管你是 Backend Infrastructure 或者是写前端 ， 都可以来分享一下你最近用的一些工具 ， 用的一些学到的新的东西 ， 这样的话我们也希望能够促进 。

**吴涛** [31:00]
是整个公司范围的 。

**Rio** [31:01]
整个公司范围 。 我们公司很小 ， 所以说 That's possible。

**吴涛** [31:05]
我们公司 ， 我的上一家公司也会有这样一个 event， 然后那个 event 叫做 Tech Bite， 就是你在做 Talk 的时候 ， 别的所有其他人都在吃披萨 。

**Rio** [31:17]
我们也是这样子 ， 我们也是这样子 ，是中餐时间 。

**吴涛** [31:21]
就是每次有个打工蛋会望着别人吃饭 ， 然后自己机场顾着说还有一点 。

**Rio** [31:27]
没错 ， 没错 。

**吴涛** [31:28]
就把这个都讲 。

**Rio** [31:30]
只有吃完了才可以吃点别人， 啊 ，不对 ， 只有讲完了才可以吃一点别人剩下的 。

**吴涛** [31:35]
不讲完不许吃饭 。

**Rio** [31:38]
对 ， 之前我在知乎的时候 ， 我们也算是坚持过一段时间 ， 每周有一次这种开发团队的 ， 就有一个人会讲一些有的没的吧 ， 然后这样就互相学习一下 。

**吴涛** [31:50]
其他人也在吃东西吗 ？

**Rio** [31:52]
呃 ， 好像没有哎 ， 我们是在 。

**吴涛** [31:54]
那就没有东西去了吗 ？

**Rio** [31:55]
对 ，不是在饭点上 。

呃 ， 对 ， 我觉得整个这种模式我觉得还是挺好的 ， 就是整个对团队建设啊 ， 互相学习促进啊 ， 这个还是挺有帮助的一件事情吧 。

**吴涛** [32:07]
所以 Willow 有在这样一个 event 上面讲 React 吗 ？ 还是 ？

**Rio** [32:12]
我有在一个更大型的 event 上讲 React。 我有在这个 event 上讲过两三次 React， 就是六个月之前 ，不是要得到 8 印吗 ？

不是要给大家说这个 ， 我们要为什么要走这条路 ， 为什么要做这个 migration 吗 ？ 在那个时候 internally 做过一次 ， 就当时分析了 。

**吴涛** [32:35]
人称洗脑会的时候是不是 ？

**Rio** [32:37]
哦 ， 这个不需要洗了 ，因为你知道事实摆在面前非常清楚了嘛 ， 特别是像我这样 ， 你知道 ，anyways， 呃

， 看起来就觉得很 trustworthy 嘛 。

**吴涛** [32:51]
哈哈哈哈

。

**Rio** [32:55]
所以当时我们有分析 。

**吴涛** [32:57]
我妹也是这么说的 。

**Rio** [33:01]
呃 ， 当 ， 就是 ， 呃 ， 当时有说一些关于 ， 就是有说一些 backbone 的坏话了 ， 就是说一些 pain points 啊 ， 然后总结出来 ， 你知道 ， 关于 performance 啊 ， 关于 mental ability 啊 ， 这些问题 。

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

**Rio** [33:20]
然后就是说 Angular 或者是 React 怎么样能够帮助解决这些问题 。 所以六个月之前有给一个那样的 talk， 这六个月呢 ， 我们就 set off， 然后， 呃 ， 写了很多 React 的 code。

这六个月回来之后呢 ， 我又把之前那个 slides 给翻了出来 ， 然后看这些问题是不是还存在 ， 然后， 呃 ， 想了一想说我们到底是怎么样从 React migrate 到 ， 呃 ，sorry， 从 Backbone migrate 到 React 这个过程 ， 呃 ， 给我 ， 我们上一周 host 了一个 meetup， 就是举行了一个那个 ， 呃 ， 请了一些 backbone，因为其实这边很多 ， 我不知道国内是不是很经常 ， 就是这边有很多 meetup group， 每一次 ， 呃 ， 就是每一

种技术都基本上有自己的 meetup group， 然后， 呃 ，他们每两三个星期就会有一个 ， 呃 ， 你知道 ，meetup， 大家一起出来喝酒 ， 吃吃东西 ， 然后会有人给一些 speech 来 ， 呃 ， 说就是 。

**吴涛** [34:24]
也有了 ， 国内的话 。

**Rio** [34:26]
研讨会吧 ， 叫做什么技术研讨会 。

**吴涛** [34:28]
对 。

**Rio** [34:29]
但是国内好像没有一个像 meetup 这样的网站在组织这种事情吧 。

**吴涛** [34:34]
有小范围的有人在做 ， 我记得最活跃的应该是现在是 ， 之前就是 Ruby 社区嘛 ， 然后现在是 ， 我看 Golan 社区好像还比较火 。

**Rio** [34:43]
不 ， 我的意思是就是 ，因为 meetup 有 meetup.com，是这个域名吗 ？

**吴涛** [34:48]
是这个 。

**Rio** [34:48]
有一个网站专门在 ， 专门会给你发邀请 ， 然后也是跨主题的 ，而不是一个预于一个专门的 user group 内这样就一个主题来谈 。

**吴涛** [35:01]
嗯 。

**Rio** [35:02]
好 ， 如果国内哪位听众想要抄这个 ID 的话 ，不要忘记给我们红包哦 。

**吴涛** [35:12]
微创新 ， 欢迎微创新 。

**Rio** [35:14]
等一下， 这好像也不是你们想出来的 ， 对不对 ？ 你们为什么要接受这个 credit？

**吴涛** [35:19]
这个信息就是钱啊 。

**Rio** [35:20]
我们是什么 ？ 我们是皮条 ，不是 ， 叫什么 ，

掮客吗 ？ 我们是掮客吗 ？

**吴涛** [35:28]
明白了 ， 明白了 。

**Rio** [35:29]
中间人。

**吴涛** [35:30]
你赶快回国做一个 ，不过现在也是啊 ， 反正各种翻墙也是越来越难了 ， 这种 。

**Rio** [35:36]
我就怕这个最后被做成什么约炮网站 。

**吴涛** [35:39]
程序员之间能约出个啥 ？

**Rio** [35:43]
你别小看我们程序员 。

**吴涛** [35:45]
只能脚鸡了 。

**Rio** [35:51]
所以这个 Willow 我问一下， 就是说其实你们是在半年前已经开始在着手 ， 就是尝试 React 的这个技术了 ， 对吧 ？

但是你们什么时候 ， 就是说一般来讲你们要选择一种像这种比较大型的改写的话 ， 你们怎么去花多少时间去判断它 ， 然后在什么时候决定要 ， 呃 ， 觉得说 ， 哎 ， 假设选定了这个方向走下去的话 ， 怎么去做这个步骤呢 ？

**吴涛** [36:17]
评估这个阶段 。

**Rio** [36:19]
对对对 。Willow， 首先我觉得非常幸运的是 ， 我身处的环境是一个比较

灵活的环境 ， 所以想要做出这样的就是比较重大的 architect 的改变 ，其实并不是一个非常难的事情 。 嗯 ，在这次的改变实际上对于我来说 ， 现在回头看过来 ，也是一个非常顺理成章 、 顺水推舟的一个过程 ，因为 Backbone 已经 ， 我们已经用它也非常久了 ， 所以说其实团队内部对于它的缺点是非常非常清楚的 。

我有我当时的那个 pain point 有列出几项啊 ， 可以告诉你们一下， 还有听众 。 首先我们的那个 performance 并不好 ， 我们的 rendering performance 并不好 ，因为有非常多的就手动的 ， 你知道 ， 那个 dog manipulation， 自己做其实效率蛮低下的 ， 然后， 呃 ， 很多时候就是个 balance 吧 ， 就是多精细 ， 你想要把 code 写得多精细 ， 越精细的话 ， 你那个 performance 就会越好 ，但是写得精细就意味着 。

**吴涛** [37:27]
就越麻烦了 。

**Rio** [37:28]
就花的时间越长 。

**吴涛** [37:29]
越复杂 。

**Rio** [37:29]
对 ， 复杂度又提高嘛 ， 所以我们当时我们的 balance。

**吴涛** [37:33]
这一点其实是在那个 React 之前大部分的这种前端框架都有的问题吧 ，因为就直接操作动 。

**Rio** [37:40]
没错 ， 没错 ， 这个 ， 呃 ，但是 React 还有一点就是 ，因为我们是一个用的那个 Vanilla 的 version 吧 ， 就是没有用其他的 plugin， 比方说 Mariette 或者是说类 Backbone 的 Amber， 我们并没有采取这样的大型的 framework， 所以我们整个的系统并不是特别的 ， 叫做 opinionated 吧 ，并不是特别的 ， 或者是说不是很规范 ，因为你完成一件事情可能有多种写法 ，但是就是从 consistency 的角度来说的话 ， 总是用一种写法是最好的

。 可是因为没有任何的 enforcement 在这个上面 ，因为 Backbone 本身它不 opinionated 嘛 ， 所以

这点上我们作为一个团队做得并不好 ， 这点是大家都知道的 。 嗯 ， 还有就是 memory 上我们也非常非常非常糟糕 ，其实这个说起来有点小惭愧哦 ，但是反正我智商低这也无所谓了 。

就 memory management。

**吴涛** [38:47]
不带这样的 。

**Rio** [38:50]
因为你那个很多时候就忘记 release 一些东西嘛 ， 忘记 release 你的 dom 的那个 hold， 忘记那个 unbind 你的 event handler， 这样的事情非常非常 。

**吴涛** [39:04]
就会 leak 吗 ？

**Rio** [39:06]
就非常多 leak， 就非常的难看 ，也非常的心痛 ， 看着很心痛 。

**吴涛** [39:13]
所以大概是在一个什么样的数量级上呢 ？ 就 leak 会 leak 到一个多严重的程度 。

**Rio** [39:18]
对 ， 你知道像我们这种 pretention 都是 ， 就是这种小节都不去过问 ， 你知道 ， 特别是 ， 特别是像这种 ， 当你 host 一个 meetup 的时候 ， 你总是想要吸引人才的 ，是不是 ？

你总最终还是想要招一些人来的 ， 然后你把这些数字放出来 ， 谁还想跟你工作 ？

**吴涛** [39:36]
那我们可以私下聊一下吗 ？ 对不对 ？

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

**吴涛** [39:39]
悄悄告诉我们 ， 小声的 。

**Rio** [39:41]
你们一个 type 多少个 g？

**吴涛** [39:43]
哦 ， 你这 loaded question 呢 ， 多少个 g， 我靠 。 这样让我觉得又神奇 。

**Rio** [39:51]
风向你达到多少转 ？

**吴涛** [39:53]
0.something 吧 ， 就说 。

**Rio** [39:56]
还不到一个 g， 那还不错了 。

**吴涛** [39:58]
OK， 那这个大家就 。

**Rio** [39:59]
对嘛 ， 智商不低嘛 。

**吴涛** [40:02]
总之呢 ， 这个 memory management 的问题呢 ，在于说 ， 就是程序员自己要非常的规范 ， 就跟那个之前的 iOS 的那个开发是类似嘛 ， 没有那个 autorelease count 的

。

**Rio** [40:20]
Autoreference counting。

**吴涛** [40:21]
没有那个之前也有这样的问题嘛 ， 就是如果你忘记 release 的话 ，也会有这样的问题 。 所以 Backbone 在这点上就是没有任何建树 ， 就是毫无建树的那种 ， 所以我们 memory 很差嘛 。Well, anyways， 就是在整个这个 meetup 上我就 share 了 ， 我们可以继续过这个 pain point， 我有六个 pain point， 然后告诉了这些 Backbone developers 这些 。

**Rio** [40:50]
That's quite some pain there.

**吴涛** [40:51]
Yeah, exactly.

**Rio** [40:55]
Not my language, you know, not my language, 但是这个

，但是大家都是很 ， 就这些 pain point 大家都是感同身受的吧 ， 然后最终的目的这个 meetup 还是告诉大家说 ， 怎么样你有可能就是你今天就可以开始写 React， 即使你有一个 Backbone app， 你也可以直接把那个 React 很容易的 drop in 你的 stack， 然后开始写 React， 就回到你刚刚说的这个我们这个流程啊 ，因为首先有这些 pain point 嘛 ， 大家都很清楚这些 pain point， 然后呢 ， 大家都希望 from 这个做客

户端能够越快越 ， 就是开发速度越快越好 。

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

**Rio** [41:37]
所以说这个需求是在那里的 ， 然后这个实验也非常的简单啊 ，因为 React 的本身我觉得它的 layering 做得非常好 ， 你如果只要用 React 的话 ， 你可以只用 React 做那个 view 嘛 ， 所以我们一开始就 ， 我就花了半天时间就 demo 了一下， 就是说怎么样可能直接的在我们的那个现有的 stack 的情况下做 React， 就是用 React， 然后开销是什么 ， 就是说 React 有多大 ， 然后就是增加了多少

的带宽成本 ， 增加了多少那个 compiling 成本 ， 这些东西来算一下 。

**吴涛** [42:15]
嗯 。

**Rio** [42:18]
就非常容易 ， 就是这些数据摆在面前就非常容易做判断嘛 。 因为 。

**吴涛** [42:25]
所以这个过程对你们来说还是其实挺好的 ， 就是因为 React 它这个就可以比较平滑的引入你们现有的这个 codebase 里面嘛 。

**Rio** [42:34]
非常非常平滑 ， 非常非常平滑 ，因为 React 它是 ， 它 React view 是一个 self-contained 的东西 ， 你只需要告诉它说你的那个 container 是什么 ， 你的那个最后你会在 dom 里面去哪一个 container， 你只要告诉那个 React 的引擎这样一个信息 ， 然后把那个 view 一写 ，React 就会把这个它的 view 给 drop 到这个引擎里 ， 这个 container 里面去 ， 所以可以很容易的把写一个 Backbone view， 然后实际上那个 Backbone view 里面是用了一个 React view，

这是一个非常简单的事情 ， 大概就是 20 行的代码 ， 你就可以把这个事情做出来了 ， 然后这个代码是可以重用的 ， 就是不同的 React view 可以重用同一个那个 wrapper， 所以把那个一写大家就哦 ， 这很容易啊 ， 然后其实大家在这个阶段你知道 ，Angular 出来 ，React 出来 ， 大家都对这个前端就觉得说好像有一股新风 ， 一股新气象 ， 所以我们的团队很想要在 production 中尝试

这些新的技术 ， 大家看到说哦 ， 它有非常多的好处 ， 可以解决我们的 pain point， 然后同时又这么容易开始使用 ， 大家都就觉得说那我们都来试一试 ， 然后就大家都开始写一些不怎么样的 React view， 写一些就是一开始嘛 ， 总是还没有完全的掌握 ，但是可以用嘛 ， 就是至少至少至少 it works， 逐渐的在这个六个月的时间中就学到了更多说怎么样正确的使用 React，也同时在不断的

发新的 feature，swap out。

**吴涛** [44:27]
所以你是说现在 React 的 best practice 已经出来了 ， 或者说你们已经通过自己的摸索找到了使用 React 最佳的方式了吗 ？

**Rio** [44:41]
我觉得从不管是从 community 的那个层面 ， 到我们自己这个小团队的层面来说的话 ， 它的 best practice 其实是比较清楚的 。

最主要的一个 ， 我觉得就是在那个认知困难中最重要的一点是 ， 你要摆脱就是 manual 就是手动 dom 操作这样一个概念 ，因为我们之前的那个习惯就是比方说我们要改变一个页面 element 的 class， 我们都是直接把那个 class 给挑出来 ， 然后直接在改它的那个 attribute， 直接跟那个 dom API 打交道嘛 。

**吴涛** [45:28]
Add class, remove class 这样吗 ？

**Rio** [45:30]
Well, yeah, 那甚至都不是直接跟 dom API 打交道嘛 ， 那是跟那个 JQuery API 打交道嘛 。

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

**Rio** [45:39]
但是在那个 React 中， 就是这并不是一个就是 practice， 就是完全就改变了它写的方式 ， 它实际上是一个状态机嘛 ， 你 。

**吴涛** [45:52]
它把那一层抽象出去了其实 。

**Rio** [45:54]
对 ， 所以你就其实你心里要想的就是两个东西 ， 一个叫做 props， 一个叫 state。Props 是这个你现在这个 view 所从它的那个从它的母体啊 ， 从它 parent 或者是从 render function， 就是 render element function 获得的信息 ，不可变的信息 ， 然后同时这个 view 本身又有它自己的状态 ， 就是从外部获取的信息跟它自身的状态 ， 这两者都是 JavaScript object， 然后你要总是想到说怎么样通过这两者来反映这个 view 的

最终形态 ， 从而在这个过程中你就完全没有 ， 就 dom 就不存在嘛 ， 就是你把这两个变化的 object 给 feed 到你的 render function 中， 你所得到的就是最终形态的 view， 就完全没有 dom 嘛 。

当然我们最开始不是特别适应这个想法 ， 我们并没有很明确的想这个 state 怎么样 ， 应该是什么样构成的 props 是什么意思 ，因为 technically 你可以放任何的 object 进去嘛 ， 所以我们并没有把这个东西用得很好 ，也是在逐步的用 ， 然后发现问题 ， 然后讨论问题 ，code review 中才把这些这个概念每个人心里都非常清楚 ， 所以现在的话就是大家写出来的就少了很多 dom manipulation，

然后更加的 focus 在 state 上 。在这个 React 的 comfort 上我们也提到更多的说怎么样能够写出高性能的 React view， 它的重点就是说怎么样更好的 、 更高效的 detect 你的那个 view 到底要不要 render，view 有什么 change， 然后这个 change 就是通过你的 props 跟 state 所反映出来 。

**吴涛** [47:57]
所以这个就是你们现在之前你提到那六大就是 pain point， 就是痛点之后哈 ， 你们现在大概是就是迁移到了什么样的程度了呢 ？

就说有整个这个架构中有哪些部分已经是被就传统的 ， 就是 Backbone 加这种传统的模板方式来写 ， 现在已经被 React 这个方式替代掉了 。

**Rio** [48:20]
我刚就随便给了一个数字啊 ，60%， 我觉得 60% 是一个 conservative estimation， 特别是当我就是我这个熬夜的成果即将发布 ， 然后特别是在那个出去之后呢 ， 就 60% 肯定可以达到的了 。

对于剩下的那些 Backbone view， 我们所要采取的方式就是把它们包在那个 React view 中， 这样对于其他的开发者来说 ，他们好像是在用一个 React view， 虽然说我们大家都清楚 ， 就有一些 view 并不是 React view，但是就是在 codebase 中它们是以那个 React view 的形式被使用的 ， 这样一来的话就是就封装了嘛 ， 这样的话我们以后要 swap 它们 out 也就变得简单了很多 。

我随着我这个新的项目的话呢 ， 我觉得这个 memory management 这一点是会有很大的改善 ，因为所有的这些子 view 的那个架构都是 React 它帮我来实现的 ， 所以说 React 在很大程度上会帮助我 make sure 就是那个所有的 element 都是会正确的被移走 ， 被加进来 ， 同时 React 又有很清晰的 lifecycle， 所谓 lifecycle 就是如果你有很多 callback function， 就像 protocol 一样 ， 你有很多 callback function， 反映就是这个 element 在它的生

命周期中的

关键点吧 ， 比方说这个

view 会要被放到那个 dom 上去了 ， 你会有一个 callback， 它会要被从那个 dom 中拿出来了 ， 它会有 callback， 放进去那个时候就是最好的做 event handling， 就是如果你要 manually 做一些 event handling 的话 ， 那个是最好的时候了 ， 然后随之对应的在它 onmount 在它被拿出来的时候呢 ， 就是最好的时候来做这个 onbind 嘛 ，event handle 的 。

这个 lifecycle 这么清晰的话呢 ， 对我们 mentally handle 这些

memory management 这些点也是很有帮助的 。 我们的另外一个 pain point 就是在我们之前那个 stack 中是非常难

重用这个 view 的 ， 这点也是 again 就是我也是很不好意思一点 ， 就是因为我们之前是用的叫做 Underscore template， 是一个 EJX 的 embedded JavaScript solution， 非常的 。

**吴涛** [50:50]
可是如果没理解错的话 ，Underscore 的 template 其实就是一个

在 HTML 里面预留出来的 script， 就在那一块里面用纯 HTML 写的 view， 这个会非常难以复用吗 ？

**Rio** [51:12]
Underscore template 它首先它是一个 string 嘛 ， 它只是一个字符串 ， 然后它实际上是叫做 embedded JS， 就是它会把这个 string 做一些 manipulation， 就是很简单的 search and replace， 你所得到的结果就是一个可以 evaluate 的那个 JavaScript string， 然后通过这个 evaluate function 来最后产生结果 。

我之所以说它难用啊 ，是因为你想啊 ， 如果我现在我要写一个 user profile， 我要写一个用户的那个他的 profile， 然后这个上面有一个 follow button， 就是你可以加这个用户为好友 ， 或者 follow 这个用户 ， 这个 follow button 实际上在很多地方都会出现 ， 对不对 ？

我们在比方说我们有更用户会有 user card， 我们用户会有那个就在我们的那个 post card 上面也会有用户信息 ， 然后也会有这个 follow button， 所以好的 practice 就是我们要重用这个 follow button itself，但是呢 。

**吴涛** [52:22]
对 ，don't repeat yourself。

**Rio** [52:24]
在用那个 Underscore template 跟 Vanilla Backbone 就意味着首先你在那个 template 里要写一个 div， 要写一个 container， 然后在那个 Backbone 的 render 里头呢 ， 你要 initialize 这个就手动的啊 ，initialize 这个 follow button， 然后要把这个 container 给从 dom 里面挑出来 ， 然后把这个新 initialize 的 follow button 给它加进去 ， 给它加到那个 dom 里头 ， 这样一个过程实际上你要写 ， 我写了一个 sample code 做这个事啊 ， 然后如果没有记错的话 ， 我得多写 14 行代码

， 就是为了重用这个 follow button， 我得写 14 行代码 ，但是真正这个 follow button 本身可能也就那么 10 行代码的样子 ， 所以说 。

**吴涛** [53:18]
组合性太差 。

**Rio** [53:20]
所以实际上在我们的那个 codebase 中， 这个有非常多的 follow button 的不同的实现 ， 当然这个问题就是我就是不仅仅是 practically 啊 ，practically 很现实的点就是

， 比方说我们后来一开始 follow button 里面的 follow 就是一个 follow 嘛 ， 就是英语嘛 ，但是我们后来做那个国际化的时候 ， 我们要把这个 follow 转换成一个变量 ， 我就改了很多个地方 ， 如果只是我们再重用一个 ， 我们只是重用一个 view 的话 ， 那我们就只需要改一个地方 ， 就是这个很 practically 就有很多这样的问题 ，但是我也很理解为什么大家没有重用这个 button，因为太他妈麻烦了嘛 ， 对

吧 ？

**吴涛** [54:06]
就成本太高嘛 ， 你重用的成本你超过了再写一遍的成本 ， 那肯定不会有人愿意去重用 。

**Rio** [54:12]
在当时你写的时候是这样 ，但是后来就是它这个 induction。

**吴涛** [54:16]
维护起来就是灾难 。

**Rio** [54:18]
所以但是 React 采取的方式完全不一样 ， 虽然你看起来好像它你写的那个代码是一个 template，但是它实际上完全不是 template 啊 ， 它完全不是那个字符串啊 ， 它只是一个 ， 就是它其实就是一个 JavaScript， 所以说你在写你的 view 的时候 ， 你所构建的是一个

object tree， 等于是说而不是一个 pure 字符串嘛 ， 然后它也通过它的那个 grammar candy 叫做 JSX 嘛 ， 重用一个 follow button 就是两行代码 ， 就是你把那个 follow button 给 require 进来 ， 然后在这个你的 view 中写我要这个 follow button， 就可以了 ，follow button 就出现了 ， 这样大家就愿意复用嘛 ， 重用性就得到了极大提高 ， 我们在这个概念上引申出来 ， 就我们有自己的叫做 UI kit，UI components 嘛 ， 就好像你写 iOS 你会有

那个 Apple 官方的 UI kit， 然后大部分都在用这个 UI kit，而不是写自己的重新实现自己的那个一套东西 ， 所以我们也 。

**吴涛** [55:33]
对 ， 这也是挺有意思的一点啊 ， 就是说终于什么写 Web 的同学们赶上了写那个 Desktop 的那种什么那个 SDK 的畅快感 。

**Rio** [55:44]
没错 。

**吴涛** [55:44]
那个 Flash 开发人员现在默默的泪奔 ， 说 Flash 早就有这堆东西了 ， 你们不用 ， 一定要搞什么 HTML， 你看看现在又再重新发明轮子 。

**Rio** [55:53]
这件事情可能本质上也是挺好理解的 ， 就是说不管我们现在怎么讲 WebApp 多么多么牛 ，WebApp 多么多么好 ，但本质上 HTML 它不是用来写一个 application 的一个技术嘛 ， 它本来是用来写文档的一个技术嘛 ， 所以我们把它这样什么滥用来写这个 application。

**吴涛** [56:12]
对 ， 就是我记得是在 Stack Overflow 还是在

哪个 IRC 服务器上， 我看到过一个人写过这样一句话 ， 我印象非常深刻 ， 就是说他说他是不会去

试图理解前端的这些东西的 ，因为前端的整个 stack 在他看来就是一大堆 hack， 被叠放在一起 ， 一种非常古怪的方式被叠放在一起 ， 所以他是完全不会去碰的 。

**Rio** [56:37]
对 。

**吴涛** [56:38]
这其实还是 。

**Rio** [56:39]
这也是为什么说就像我们刚才讲 ， 就是说就传统的那些 frame， 就是开发 WebApp 的 framework， 就是它都基于这个 dom 嘛 ， 它一旦基于 dom 的话 ， 它整个这个思维模型就是在这个文档的那个圈子里面 ， 就是 HTML 那个文档 ， 就是 document oriented 这么导向的一个东西在里面想了嘛 ， 这样的话就其实你跟构建一个现代的这种高度组件化 ， 然后高度可重用的这种应用的话 ， 那

个其实是在底层上就是完全不吻合的嘛 。

**吴涛** [57:11]
对 ， 你说那个 Tim Berners-Lee 在 80 年代某一个昏暗的地下室里面 ，在一台 Next 计算机上研发出万维网的时候 ，他怎么可能想到这个玩意儿有朝一日会被拿来做这种稀奇古怪的用途 。

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

**吴涛** [57:31]
所以整个基础建设就不符合这个时代精神了 。

**Rio** [57:36]
就算在悉尼上建摩天大厦 ， 这是我们前端开发的痛苦是吧 ？ 后来现在也就是什么那个什么 React 现在选择走这个虚拟化 ， 或者叫 virtual dome， 或者它根本就不关注这个 dom 本身 ， 只关注它本身这个 application logic 里面的那些 object tree， 这样的话其实就等于说 ， 哎 ， 你这个悉尼来我给你打几个什么 ， 打几个桩 ， 对吧 ？

终于有一个基石了 。

**吴涛** [58:01]
对 ， 所以 React 试图做的事情其实就是类似于这种打桩子 。

**Rio** [58:07]
对 ， 那个 Willow 哈 ， 就是刚才讲了这个就是在 view 这一块啊 ， 你们就其实 。

**吴涛** [58:13]
就是在你问这个问题之前 ， 我得说我对这个就是各种 developer 的智商优越感其实是很看不惯的一个事情 ， 就是刚刚那个刚刚吴涛提到就是在这个前端开发是一堆 hack， 这个其实并没有大错了 ， 就是在一个阶段确实是这样子 ，但是你得从发展的角度看事情嘛 ， 同时从我的从我个人角度来说的话 ， 更多的考虑解决问题有什么样的好的 solution 才是更值得做的事

情 ， 你像 React 实际上就是这样一个思维过程的一个产物嘛 ，因为你 。

**Rio** [58:57]
这个视角是肯定对的 ， 就像 C 语言 ，C 语言其实也并不是一个特别完美的 ，有朝一日那个 Dan Stritch 会想到这个东西会被拿来开发世界上最为先进和复杂的操作系统之一 ， 可能那个时候也没有 ， 它只不过想要有一个编程语言能够取代汇编语言而已 ，但你说 C 的种种大坑一直到今天都在危害很多很多人， 可能还是非常非常成功 ， 我觉得这个意义上讲 ， 那其

实前端的世界也是这样的 。

**Willow** [59:32]
不好意思打断了 Rio。

**Rio** [59:34]
那我接着问啊 ， 就是说 Willow 你刚才讲了就是说你们其实在 view 这一块已经用得非常成功了哈 ，但是 Backbone 还有一块很重要的就是这个在数据管理这一块 ， 然后这一块其实传统上 React 是没有现成的解决方案的 ， 就是说你们在这一块上是怎么做的呢 ？

### 数据管理

**Willow** [59:55]
我们刚一开始说嘛 ， 就是你要得到 buy-in， 总是要把这个东西做得越简单越好 ， 然后我也说到就是 React 它的那个 abstraction layer 做得非常好的一点就是你可以先从 React view 开始用起 ， 我觉得当你开始用了之后呢 ， 当你终于了解了它的那个背后的这个 props 跟 state 的这个含义之后呢 ， 你再继续去考虑这个 architecture 是一个比较好的 migration 啊 ， 就是从我的个人角度来说 ， 所以我们

的系统在目前来说的话还是用了一个比较传统的 MVC 的那个架构 ， 这个跟就好 ，其实看起来跟原来的 Backbone 也没有太大区别 ， 只是把那个 Backbone 的 view 换成了一个 way better 的 view， 就是这样在那个 controller 跟 model 上面是没有太大变化的 ，但这个对于 migration 来说是非常非常有好处的 ，因为你所要重写的那个代码就大大的降低了嘛 ， 你只要重写就是一小部分代码 ，而不是重写所有代码 ，

随着我们 view 的那个 React view 的比例增大呢 ， 我们才开始就现在考虑说到底要 architecture 要往哪个方向走 ，React 他们这个 Facebook 所倡导的呢 ， 叫做 Flux，Flux 跟那个传统的 MVC 对我来说最主要的区别呢 ， 首先是它非常的强烈的 enforce 了一个单向的数据流 ， 对 ，view 呢它可以改变 ，view 可以改变 model，但是这个改变的过程跟原来完全不一样 ， 就在传统的 MVC 中呢 ， 那个 view 它一般都会直接的 reference

这个 model 嘛 ， 或者间接的通过 controller 来 reference 这个 model， 然后可以改变这个 model， 坏处在于说呢 ， 现在你就是你的那个 model 的改变的 logic 就被分散到各个地方 ， 就你也不知道每个地方会改这个怎么样改这个 model， 这个 model 会怎么样变化 ， 这点是不清楚的 ， 所以在这个 Flux 的这个 structure 呢 ，view 它跟 model 之间没有直接的联系 ，view 没有办法直接去改变这个 model，而是 view 要改变这个 model 需要传递

消息 ， 通过 dispatcher， 通过一个就是算是一个 global object 来发送一条消息 ， 这个 view 也不知道这个消息到底能不能够到达谁 ，view 这个对这个是没有概念的 ， 然后这个好处在于说呢 ，因为这些消息最终都要被 model 所处理嘛 ， 然后 model 可以有选择的处理这些消息 ， 所以 model 就是它可以完全的掌握说它自己到底要怎么改变自己的数据结构 ， 到底有什么样的操作能够被支持 ， 所

以这点上 model 就非常 enforce 这一点 ， 这跟那个传统的 MVC 就不是很一样 。

**Rio** [1:03:16]
那你觉得说就是 React 它选择这个 Flux 这套模式 ， 相比之于相比之前那个 Backbone， 就是它在数据管理这部分 ， 它有什么就是有什么显著的优势吗 ？

或者说解决了一个什么样的核心的痛点 ？

**Willow** [1:03:33]
如果你看那个 React， 就是 Facebook 他们自己给出的一个解释的话呢 ， 就是在大型程序的情况下， 你的数据流是非常不清晰的 ， 就到底是哪一个 view trigger 了哪一个 model 来变化 ， 然后这个因为不仅是 view 可以去改变这些 model， 这些 model 同时也可以 trigger 一些 event 来改变 view， 然后这个数据流动是非常不清晰的 ，也没有任何 enforcement， 就是你有可能甚至于就是出现一个死循环嘛 ， 就是 view 你会改变那个 model，

然后 model trigger event。

**吴涛** [1:04:11]
出发一个事件 。

**Willow** [1:04:12]
然后 view 又会去改变这个 model， 或者是甚至于不是改变 ， 你那个 view 改变 model A，model A 改变 model B，model B trigger view 再改变 model A， 你知道这样的一个就是有很多这样的情况有可能出现 ， 同时在你要 Facebook 是一个 ， 它不是一个三人 ，不是一个三人小团队嘛 ， 所以对他们来讲这样的维护成本其实非常高的 ，因为一个 code 要被有可能被 10 个人被 50 个人所改变嘛 ， 然后你这个你的 knowledge 是不

可能很好的 share 的 ， 这在这个 50 个人中， 所以它 code 本身一定要非常清晰 ， 一定要或者是 architecture 一定要非常清晰 ， 能够 enforce 一些 rule，不然的话要改他们的那个 model，他们的 view，他们的整个程序写起来就非常困难 ， 所以对他们来说是有这样非常强烈的 motivation 的 ， 同时我觉得你如果看两者的话

， 基本的概念就是像 aim 和就是 model 跟 view 这两个基本的概念 ， 实际上是多多少少可以 mapping 的 ， 关键是说他们俩之间怎么交流 ，view 怎么样改变 model， 这一点上我觉得是跟 MVC 是最大的区别 ， 对于我们来讲啊 ， 所以引申出来 ， 你看我们如果下一步要改变这个 architecture 的话 ， 我所想到的也是说我会重用我的 model 跟我的 collection， 就 Backbone model and collection，但是我会用 Flux 的方式来连接

我的 view 跟我的 model 跟 collection， 这样 view 的话它就会不会直接的跟这个 model 跟 collection 打交道 ，而通过另外一个抽象层面来跟 model collection 打交道 ，而这个抽象层面就是 Flux 所引进的这个部分 。

**Rio** [1:06:06]
所以说你们就是下一步的这个演进的计划 ， 就是说假设比如说你们要切换到 immutable 的那一套东西的方面去哈 ， 就现在的一个中间方案就是说先把现在的 view 和 Backbone 之间的直接引用关系给去掉 ， 然后通过 action 的方式来替代 ，是这样吗 ？

**Willow** [1:06:24]
对 ， 如果我们要如果我们要做 immutable 这些那一套的话 ， 用 Backbone 的 model 跟 Backbone collection 是非常难的 ，因为你因为那个 Backbone 的那个 model 跟 collection 并不是 natively immutable 的嘛 ， 可能可以通过 to JSON 那个 function 来实现 ，但是那样的效率会很低 。

**Rio** [1:06:46]
对 ， 同时那个 view 的话它在目前来说的话 ，view 是必须得直接跟那个 collection model 打交道嘛 ，因为你那个没有其他的 mechanic， 要不就用 callback 的方式 ， 要不就用那个直接 call model 的方式嘛 ， 这个是这个问题会永远存在 ， 除非你就是真正的 adopt 这个 Flux， 所以我们必须得先做这一步才能够有可能 adopt 那 immutable，但是话又说回来呢 ， 就是我们这个团队也不是 Facebook 那么 Facebook 所面临的问题跟我们所

面临的问题是非常不一样的 ，Facebook 它的 motivation 是说能够在实现就是说他们那么大一个 scale 能够同时很有效的工作 ，但是对我们来说的话 ， 我们的 motivation 是完全不一样的 ， 我个人觉得啊 ， 就是在有可能情况下， 我们需要尽可能的跟 community best practice 走 ，有些时候我并不能够完全的就是 prove 说我们的 practice 并没有 community best practice 好 ， 我不知道这是不是真的 ，但是 community 它有 100、1000 个人在后面支持它 ，

我们有 3 个人在后面支持我们自己的架构 ， 然后 community 他们可以 foresee 很多问题 ，因为大家都在用嘛 ， 所以他们可能有些问题我们现在还没有遇到 ， 甚至不知道我们会遇到的问题 ，他们已经解决了 ，而我们需要在后面才能去解决 ， 我们三个人又很难写很好的 documentation， 所以有新的人加入的话 ， 那新的人也不一定能够理解说你们为什么要做自己的事情 ， 就是说这

个到底是个什么东西 ， 新人的培训非常难 。 这里还是个学习的成本在里面 。

**吴涛** [1:08:35]
对 ， 这个其实是一个非常好的点 ， 就是如果你们要在如果你们要使用一个并不是那么 opinionated， 这次我没念错吧 ？

**Rio** [1:08:46]
没 ，不要紧张 。

**吴涛** [1:08:48]
这么一个 stack 的话 ， 你必须向一个新人去解释很多东西 ， 就好像我现在也是在历经这样一个被别人解释的过程 ， 就是我需要理解公司里面很多东西 ，而我有时候会觉得说如果这个东西你们用的是某个 community 已经解决过的 ， 或者说已经开发出来的标准工具 ， 那我不就可以省去学习这一个取向了吗 ？

可是出于某某出于种种历史原因 ， 还是有很多东西是一时半会儿没有办法被这样一种 community 所维护的东西所替换掉的 。

**Rio** [1:09:30]
你们说到这个事情 ， 我想起一个前几天在记录上看到挺有趣的一个事情哈 ，也是一个算是一个半一半段子的一个事情吧 ， 就你知道国内不是很多做那种网页游戏 、 手机游戏的小公司嘛 ， 成百上千的 ， 然后他们说这个那些就是那些页游端游的那个后不是它有个服务器要同步那些用户之间的数据啊 ， 或者在维护一个状态嘛 ， 很多都是那个都是 Erland 写的

， 然后他们就有那个 Erland 的这个粉丝说你看这个 Erland 多好多好 ， 这个多扩展性多牛逼啊 ， 多健壮 ， 然后后来又另外另外忘了是谁说 ， 难道不是因为他们的代码都是从同一份公司复制出去抄来抄去改的吗 ？

感觉有点类似这个事情 ， 就其实 。

**吴涛** [1:10:16]
Which is true。

这样我想起来就是之前不是欧洲还是美国有一个小厂商做一个即时战略游戏 ， 然后这个即时战略游戏的某一个版本的源代码泄露了 ， 然后被中国的一堆游戏厂商复制了 。

**Rio** [1:10:35]
视如珍宝 。

**吴涛** [1:10:37]
对 ， 视如珍宝复制了好几十遍 ， 然后每一次改来改去就只改美工 ，其他地方看不懂也不敢改 ， 然后你会发现有十几个游戏 ， 可能十几个太夸张了 ， 四五个游戏 ， 四五个又太少了 ， 反正就是有那么一堆游戏看起来几乎不一样 ， 玩起来一模一样 ， 然后只有这个版本的代码被泄露了 ， 然后也只有这个版本被留在中国流传开来 ， 然后之后这个

公司做的所有的补丁在中国的所有的克隆里面都看不到 ， 平衡度修改之类都没有 。

**Rio** [1:11:10]
对 ， 所以这其实就是刚才那个问题的另外一个极端的版本 ， 就是说有可能就是说可能是一个取舍吧 ， 就是怎么去均衡这两者之间 ， 怎么去说在自己的认识上有一点创新 ， 还是说要贴紧这个这个什么是这个 community 的步伐 ， 这里面可能是一个要把根据这个你的这个团队的大小啊 ， 就开发人员的那个水平的高低要把握的一个事情 。

**Willow** [1:11:37]
同时还要根据你自己所要解决的问题 ， 如果说你要解决的问题是那么的 unique 的话 ， 那可能就你要你就是那个是你解决问题的一部分了 ，但是如果是为了创新 ， 你知道现在想来的话呢 ，其实我们有一些叫做自大吧 ， 就是实际上在一开始在包括在最初 Banana Backbone 的阶段 ，有一些就是说故意的好像说我就要走自己的路来所谓创新来 ，但是但实际上很多时候这是一种自

大 ，而不是一个解决问题的方式 。

**Rio** [1:12:12]
对 ， 它关键是走不下去 ， 就前端前端开发有很多这种领域哈 ， 就特别是就最近这一两年特别明显 ， 你可以看到经常隔三差五来说来一个我们一个什么又一个新的一个 framework 出来 ， 然后再推销一个 totally different way of doing things， 然后就你它有些闪光点也是不错的 ， 就是但是可能你因为它这个整个一个是推动的那个可能团队少 ， 可能就甚至有时候就一两个人两三个人这

样 ， 它推动不下去 ， 然后又没有形成这个社区的这个合力 ， 就是你很难把这些很有意思很有创意的点 ， 然后能够真的把这个这些好的 idea 被大众所普及吧 ， 我觉得 。

**Willow** [1:12:54]
你知道这个这点上最明显的公司是什么吗 ？ 就是 Google， 就是隔三差五就得要翻点新东西出来 ， 然后开始推什么 Dart 啊 ，Angular 啊 ，Polymer 啊 。

**Rio** [1:13:11]
说来这个什么 Angular 现在应该是什么偃旗息鼓了吗 ？

**吴涛** [1:13:17]
不是吧 ， 我怎么觉得 Angular 反而有就是大行其道的趋势 。

**Rio** [1:13:23]
但我觉得它的那套方式整个是很落后很复杂的呀 。

**Willow** [1:13:26]
吴涛你这个是 。

**吴涛** [1:13:27]
就因为上周没有更新了吧已经 ， 你还在运行上周的代码是吧 ？ 什么它已经被彻底抛弃了吗 ？ 不可能吧 ， 就因为就我所知好吧 ，也许是也许是老欧洲们比较保守的人， 就是就欧洲还是有很多项目是在用 AngularJS 的 。

**Rio** [1:13:45]
不 ， 我是这么看的 ， 就首先它出那个 2.0 版本吧 ， 就完全改 ， 就基本上是一个非常大的改动 ， 就否定 。

**吴涛** [1:13:52]
是个 overhaul， 这个没错 。

**Rio** [1:13:53]
否定掉了它 1.0 的很多这种这种概念和说法 ， 然后那么就会有一个问题 ， 那用 1.0 那些怎么切过来 ， 然后就说整个概念要重新学习一遍 ， 对不对 ？

**吴涛** [1:14:04]
也没有吧 ， 没有这么夸张 ，因为就我的前公司其实是在用 Angular 的 ， 就我去我后来跟他们通一下气 ，他们说已经迁移过来了 ， 没什么问题 。

**Rio** [1:14:15]
那还不错 。

**Willow** [1:14:16]
现在有可以迁吗 ？ 可以迁吗 ？ 它现在已经 。

**吴涛** [1:14:19]
就是他们他们认为是 apt， 就是是完全可以的 ， 没有什么 ，他们不觉得在 mentality 上有什么不可逾越的障碍 ， 我觉得至少是没有问题的 。

**Willow** [1:14:32]
问题是你那个是它没有 official 的 support 的 ， 它那个 1.X 跟那个 2.0 之前是没有 official 那个连接的 。

**吴涛** [1:14:42]
对 ， 这个是没有 ，但就是要自己改写嘛 。

**Willow** [1:14:45]
Angular 主要问题啊 ， 这在我看来是这样几个 ， 它的它有非常高的 learning curve， 它的概念非常的快 。

**Rio** [1:14:52]
概念太多了 。

**Willow** [1:14:54]
概念非常就非常快 。

**吴涛** [1:14:55]
它是非常非常 ， 它跟它是 Backbone 的另外一个 ， 它跟 Backbone 是光谱的两端嘛 ， 一个是完全几乎是完全没有 opinion， 另外一个 AngularJS 就是明确的说 。

**Rio** [1:15:07]
My way or highway。

**吴涛** [1:15:09]
就跟苹果一样嘛 ，my way or highway，Angular's way， 就有很多人是可能是你可以说它是一个 Angular developer，但它并不是一个 JavaScript developer。

**Willow** [1:15:20]
这个也非常这个反而 Google 了 ， 确实是 Google。 同时你要想我最就是最我觉得最就是不好的一点是说 Google 它本身自己也不用 Angular， 你看它有多少产品是用 Angular 的 ， 你就是我搜过啊 ， 就是大家都好像不是很确定 ， 然后有人说 Google Trends 是用它写的 ，有人说很多 internal tool 是用它写的 ， 最近那个 Inbox 都不是用那个 English 的 ， 它自己都不用 ， 我觉得这个本身 。

**Rio** [1:15:53]
自己的狗粮都不吃 ， 还要我们吃 ， 真是 。

**Willow** [1:15:55]
对 ， 你要 dark food 嘛 ， 这个对就是还是比较明显的一点 ， 我觉得对于这个就公司对于一个产品到底有多大的支持 ， 它自己用不用这点是非常重要的 ， 相对来说像 React 的话 ，Facebook 它是自己在大量的使用了 ， 包括 React Native 也是自己在 dark food 之后才拿出来给别人吃的嘛 。

**Rio** [1:16:18]
对 ， 它做了那个 groups， 然后大家都没发现它是这种方式实现的 。 对 ， 我觉得这个还是蛮好的一个方式 。 所以为了总的来说 ， 你们这个迁移就是说也是进行的蛮顺利的哈 ， 就整个说那你的这个体验或者说有个什么总结性的感想是怎么样子 ？

### 总结

**Willow** [1:16:38]
我的感想是就对那个 migration 本身来说的话是 ， 它比远比你所想象中要容易开始 ， 同时呢你上了贼船之后呢就很难下来了 。

**吴涛** [1:16:53]
是不想下来吧 。

**Willow** [1:16:56]
没错 ，是不想下来 ， 然后再往后面走一点呢 ， 你会遇到就是在超过 view 的层面上， 你会遇到更多的问题 ， 比方说我们刚刚说的 Flux 这个 architecture， 然后你也会碰到关于 toolchain 的问题 ， 之前就是我们的 toolchain 都是我现在是 outdated 了 ，也不算完全 outdated， 就是不流行了 ， 就比方说用 RJS， 用 Bauer 做那个 package management， 用 Required 做 dependency management，在新的这个 。

**Rio** [1:17:29]
听起来已经是爷爷辈了 。

**Willow** [1:17:32]
好吧 。

**吴涛** [1:17:33]
这个不算什么 ， 我前两天那个做了一个非常小的小小小小级别的项目 ，但是因为公司的限制 ，在我的 Ubuntu Box 上是装不了

，是装不了 Gem 的 ，因为我没有出于某种原因没有权限还是怎么着 ， 还是因为防火墙的问题 ， 好像是因为防火墙的问题 ， 就是我只能利用电脑上已经装了的工具做一个非常小的项目 ， 你猜我是怎么完成的 ？

我用

我用 C preprocessor 写 JS，

可以节省一批 ， 对 ， 我用

C preprocessor 写了一部分的 CSS， 然后用 Python 生成一堆 HTML， 然后再用 preprocessor 把这堆 HTML include 到三个不同的分支诸如此类 ， 我觉得自己实在是太不重新发明文字了 。

**Rio** [1:18:38]
你这重用度也有点高哈 ， 这跟我们前端界差别蛮大 ， 前端界这两年工具也是换了好几轮了 ， 现在那现在为了你们现在是说那是什么样一个状况呢 ？

**Willow** [1:18:50]
我们就想我这个工具嵌的那个 migration 其实挺难的嘛 ，但是我是想要

想要就是至少要去就是 evaluate 一下看说怎么样能够做这个 migration 嘛 ， 我是很希望能够赶上时代的 。

**Rio** [1:19:10]
那你们现在的那个工具链是个什么样的状况呢 ？

**Willow** [1:19:13]
我刚刚说的是我们现在的状态 。

**Rio** [1:19:15]
就还是在用没有改是吧 ？

**Willow** [1:19:17]
因为工具链的那个更新是非常难的嘛 ，因为你一套就是你把所有东西 glue 起来了 ， 然后可以开始用了 ， 这个很好的事情 ，但是你要又重新要 adopt 新的一套东西的话 ， 那有很多问题就要解决了 ， 然后我是我还没有时间来做这个事 。

**Rio** [1:19:39]
对 ， 这也是我 。

**吴涛** [1:19:40]
我觉得这个有点像就是就好像你要学编程 ， 然后你开始折腾 Linux， 然后不小心折腾 Linux 折腾了一年半 ， 这是非常有可能的 。

**Rio** [1:19:50]
终于把编辑器配好了 。

**吴涛** [1:19:51]
纠结说我这到底应该是用 Vim 还是应该用我应该用 KDE 还是用还是用还是用 sorry， 应该用 Vim 还是应该用 Emacs，是应该用 GNOME 还是应该用 KDE， 然后是应该用 FreeBSD 还是应该用 Linux， 然后等你折腾一年半之后， 你还是没有开始学编程 ， 就是在 toolchain 这方面我是真有体会 ， 我觉得有时候有时候一个工具可能你会觉得它很旧了 ，但是更换它的时间成本可能要远远超过你因为更换而

带来的收益 。

**Willow** [1:20:29]
比较现实的问题啊 ，在这个在

就是 React 的这个 community 这个现实的问题是说 ， 大部分人现在新的开发的那个东西都不再支持像 Bauer 这样的爷爷辈 quote unquote 的那个工具了 ， 然后它也不支持比方说 Required 这样的 requiring 的方式 ， 那你就损失了很多使用重用那个社区的工具的那个好处 ， 对不对 ？

所以这点上是比较头痛的 ， 这一点上是我的那个 migration 的主要动力吧 。

**Rio** [1:21:13]
就我自己的感觉就是现在就其实现在这套前端的构建工具还是蛮简单的哈 ， 就是最基本的话 ， 你用那个就是 Gulp 做一个基本的那个 task task manager task runner 吧 ， 然后再用那个叫什么 ， 我是用 Browserify 哈 ，Browserify， 然后就可以把它按中用 NPM 那些方式就管理起来 ， 整个还是比较简单的 ， 问题就是说经常会升级一下， 然后就就不能用了 ， 就前几天不是刚发布那个 Node 发布

了 0.12 的那个版本嘛 ， 就 break 掉了很多东西 ， 要等个可能三四天 ， 等他们把那些打个什么 patch version 上去才可以再构建出来 ， 就整个我觉得还是就是给人一种很 fragile 很脆的感觉 。

**吴涛** [1:22:02]
的确是这样的 。

**Willow** [1:22:03]
我觉得比较比较糟糕 。 对 ，有一个小问题还没有问哈 。

**吴涛** [1:22:06]
在高速发展的东西都是这样吗 ？

**Rio** [1:22:09]
对 ，以周围以周围前进步伐的时候 ， 总是有那么一段时间是不是有会有这样那样问题的 。 那个 Willow 再问一下你们一个就问你们有打算再采用那个 es6 吗 ？

**Willow** [1:22:23]
有 ， 我在就是说我在给团队制定计划的时候 ，有一个重要的点就是我希望大家现在就开始就是非常对 es6 的特性非常熟悉 ， 这样的话我们可以在往后会很好的就是开始使用它嘛 ，但是这个也跟 toolchain 有关系 ，因为我们要就意味着我们要引进新的一个工具 ， 就是 six to five 嘛 ， 这样一个工具 。

**Rio** [1:22:51]
已经改名了 ， 哈哈哈 ， 你又没跟上时代 。

**吴涛** [1:22:54]
改成什么 ？

**Rio** [1:22:56]
它改成 Babel 啊 。

**吴涛** [1:22:59]
突然觉得突然觉得 。

**Rio** [1:23:00]
巴别塔嘛 。

**吴涛** [1:23:02]
突然觉得这个领域好残忍啊 。

**Rio** [1:23:04]
对 ， 就是经常你就不光是说跟不上时代 ， 你可能名都找不着了 。 就那天我在我在跟我在把我的那个就升级一下我的那个依赖的时候 ， 发现它弹出一个错误 ， 说什么 six to five is not Babel， 什么玩意儿 ， 点出去一看哈 ， 连名字都改了 ，在跟不上就就确实是有点就下次再也找不着它的感觉 ， 你知道吗 ？

**吴涛** [1:23:29]
好残忍啊 ， 好残忍啊 。

**Rio** [1:23:31]
就所以前端开发快嘛 ， 那天我还看那个什么 ， 我们不是在 VT 上面有发布那个我们的节目的讨论区嘛 ， 上面还有人在抱怨说这个什么前端进前端开发步伐进步太快 ， 已经感觉有点跟不上好累什么什么的 ， 确实是 。

**吴涛** [1:23:48]
我觉得是这样的 ， 就是有时候我会觉得说这些做前端的人难道从来不休假吗 ？ 就你你你你出去休假回来之后发现自己所学的知识全都作废了 。

**Rio** [1:24:02]
前端开发人多嘛 ， 一个人休假千千万万人还在工作 ， 没事 ， 还有还有像 Willow 现在熬夜这样干的 。

**吴涛** [1:24:09]
这样不会很没有安全感吗 ？

**Rio** [1:24:12]
那没办法 ， 这就是一个拼体力的拼体力的时代 。

**Willow** [1:24:18]
看你怎么看呢 ， 就是从从另外一个角度来说的话 ，也是比较激动人心的嘛 ， 就是有很多很多新的东西出来 ， 很特别是如果说就你抱着一种比较积极的态度来看的话 ， 这些好的工具所解决的问题实际上应该是你能够感同身受的问题 ， 这样的话就是这些你对这些新的工具出来实际上是抱着非常积极的态度 ，因为觉得说它可以解决 。

**吴涛** [1:24:48]
我刚才听成抱着比较鸡贼的态度 ， 让我想我靠 。

**Willow** [1:24:55]
你刚刚就抱着很鸡贼的态度 。

**吴涛** [1:24:57]
对 ， 我刚才就我刚才就蛮鸡贼的在想我说这样 OK 吗 ？

**Rio** [1:25:07]
对 ， 反正我这块 es6 我也最近也在自己的一个就是那个什么 ， 就是我们 IPN 的管理后台 ， 我也在一个劲的折腾它嘛 ， 这套我觉得摸的还挺熟 ， 就是还是体验还是不错的 ， 一旦摸熟就是弄通弄通它这个 build 之后的那个 toolchain 之后， 写起来还是蛮爽的 ， 我觉得 。Willow 我们是可以私下再交流一下 。

**Willow** [1:25:30]
好的 。

**Rio** [1:25:30]
那么今天时间也差不多了 ，Willow Willow 还要去上班 ， 然后有什么特别要再说的吗 ？ 然后没有的话我们就把叫放 Willow 走了 。

**吴涛** [1:25:41]
对 ， 我们我们叫什么 ， 嘉宾近期用把 Willow 不请则已请就请了两期 ， 所以也是非常感谢 ， 非常感谢 Willow 同学能在百忙之中来交流一下他从 Backbone 迁移到 React 上面的经验 。

**Willow** [1:26:04]
也非常开心跟两位继续聊天 ，也非常开心跟听众分享我们的经历 。 如果大家有什么问题的话 ， 可以随时跟我联系 。

**Rio** [1:26:14]
我们还要预告一下哈 ， 就是 Willow 最近正在潜心钻研那个 React Native， 就现在还大家只是神龙见首不见尾的一个高级工具 ， 然后等它摸熟了 ， 我们会让 Willow 再回来跟我们再聊一聊那个东西 。

**吴涛** [1:26:29]
所以我已经是被绑架了是吗 ？

**Rio** [1:26:32]
对 ， 就消息消息被发出去了 。 对对 ， 你已经逃不掉了 。

**吴涛** [1:26:38]
我们会争取给你配一个女嘉宾的声音 。

**Rio** [1:26:42]
那有这种可能吗 ？

**吴涛** [1:26:43]
这个我就说一下嘛 。

**Willow** [1:26:45]
好吧 ， 那听众们我们就那个下次再见喽 。

**Rio** [1:26:51]
OK， 那 Willow 拜拜 。

**吴涛** [1:26:54]
上班小心点 ， 拜拜 。

**Rio** [1:27:00]
那个吴涛 ， 你还在吗 ？

### CoreCLR

**吴涛** [1:27:03]
我在啊 。

**Rio** [1:27:04]
OK， 那我们接着 ，因为今天可能时间还不到嘛 ， 我们再接着吹一会儿 ， 今天那个 notes 里面没有漏掉那些东西 。

**吴涛** [1:27:13]
可以啊 。

**Rio** [1:27:13]
OK， 我把那个 notes 先 。 有两个事情没有说 。其实对 ， 就可以说那个 CR 和 i3 嘛 。 好吧 ， 那个 CR 是微软的那个什么 .NET 的 runtime 嘛 ，common language runtime， 对吧 ？

**吴涛** [1:27:29]
CR 呢 ？

**Rio** [1:27:30]
通用语言运行时 。

**吴涛** [1:27:32]
运行时 。

**Rio** [1:27:33]
对 ， 好久没有听过这个词了 。 它怎么了 ？

**吴涛** [1:27:38]
就有一个大牛在

GitHub 上面提交了一个 merge request， 然后这个 merge request 的 pull request sorry 的目的就是让 CR.NET 的 CoreCLR 可以在 OS X 上编译 。

**Rio** [1:27:58]
那什么意思 ？ 就是以后的那个 .NET 程序可以直接在 OS X 上运行了吗 ？

**吴涛** [1:28:03]
.NET 程序非非 graphical 非图像化的那一部分是可以在 OS X 上跑 。

**Rio** [1:28:11]
有不包含图像化的 。

**吴涛** [1:28:13]
这件事情 。

**Rio** [1:28:14]
的 .NET 程序吗 ？ 我就想问一下， 就有不包含就是 GUI 的 .NET 程序吗 ？

**吴涛** [1:28:23]
当然有了 。

**Rio** [1:28:23]
干嘛的呢 ？

**吴涛** [1:28:24]
Windows Windows 也是有命令行的好吗 ？

**Rio** [1:28:27]
Windows 我知道有 partition，但有人用吗 ？ 真的吗 ？

**吴涛** [1:28:30]
不是吧 ， 这个 Windows 命令行还是还是还有很多很多人的 。

**Rio** [1:28:35]
不 ， 它能干嘛呢 ？ 就是有什么用场合要用到它呢 ？ 这大部分时候不都是有一个什么就有一个管理界面东西去用用它吗 ？

**吴涛** [1:28:46]
怎么说呢 ， 就是如果你要愿意的话 ， 你可以在 PowerShell 里面完成大部分使用 graphic user interface 可以完成的事情 。

**Rio** [1:28:54]
我知道这个是可以 ，但是 。

**吴涛** [1:28:55]
前提是你在 。

**Rio** [1:28:56]
实际上有人这么干吗 ？

**吴涛** [1:28:59]
你问倒我了 ，因为我从来没有接触过任何一个 Windows 以 Windows 为以 Windows 为技术为主的 server developer。

**Rio** [1:29:07]
啊 ，OK。

**吴涛** [1:29:09]
但就我所知 ， 很多 .NET 端 .NET 做的 web application 其实说起来也是没有什么就是传统意义上的一个 。

**Rio** [1:29:23]
GUI。

**吴涛** [1:29:25]
是用 GDI 画的 GUI 的 。

**Rio** [1:29:27]
OK。

**吴涛** [1:29:28]
明白我意思吧 ？ 就是它跑在服务端上 ，但是它它有一个它有比如说它有可能有一个 web 界面用让你可以配置它 。

**Rio** [1:29:35]
就像那个什么什么什么什么企业软件那种东西 ， 就是它没有那个这个就图形化的前台 ，但只是就是通过比如说这个叫什么 ASP.NET 通过这个在 IE 里面运行的方式来做的 。

**吴涛** [1:29:47]
对 ，ASP.NET 程序其实也是你在开发它的过程之中用到用到 GUI 就是 Visual Studio， 然后当你把它 deploy 之后， 你用到的 GUI 就是它的网页端 。

所以所以它难道不也是一个像就像 Java app 一样 ，Java app Java EE 一样 ，不不也是一个没有 GUI 的企业级应用吗 ？

**Rio** [1:30:11]
对对 ，但我就很好奇啊 ， 比如说你现在看现在应该有相当长一段时间了吧 ， 那个 Java runtime 就是以前我记得 OS X 是自带那个 Java runtime 嘛 ，是吧 ？

**吴涛** [1:30:23]
对 ， 现在没有 。 而且而且现在你升了级之后 。

**Rio** [1:30:26]
对 ， 好几个版本自动把那个 Java 删掉 。 对啊对啊 ，而且而且它会提醒你说你真的要装吗 ？ 你真的要装吗 ？

你真的要装吗 ？

**吴涛** [1:30:34]
它不会提醒你 ， 就是我记得从 10.9 升到 10.10 的时候 ，10.9 上装的 Java EE Java 6 被 10.10 自动删掉了 ， 就一声不吭的给你删掉了 。

**Rio** [1:30:47]
不 ， 它会这样 ， 就是说你要运行一个 Java 的程序的时候 ， 它会问你说 。

**吴涛** [1:30:52]
你你只需要打 Java dash version， 然后然后然后它就会跳出来一个提示框说可以 。

**Rio** [1:30:58]
你要装吗 ？ 你真的要装吗 ？ 装了后果很严重哦 ， 你还是不要装了吧 。 它会这么它会这么去给你 。

**吴涛** [1:31:04]
不要这样提交了 。

**Rio** [1:31:07]
那那就说那如果这个 CLR 的实现就就说在 OS X 运行之后差不多也就这个结局吧 。

**吴涛** [1:31:18]
我不知道应该怎么回答这个问题 ，因为首先如果你从切实的实际实用意义上来讲 ， 这其实不是件大事 ，因为反正没有人会把 OS X 部署在服务端不是吗 ？

**Rio** [1:31:32]
你还别说真有人这么干 ，有一个那个叫什么 。

**吴涛** [1:31:37]
但我相信这样做的事很小众 ， 可能比 FreeBSD 还要小 。 对不起 ， 我又黑了 FreeBSD。

**Rio** [1:31:43]
FreeBSD 用户很很大的好不好 ？NGINX。

**吴涛** [1:31:46]
好吧 ， 比 。

**Rio** [1:31:47]
NGINX 是 。

**吴涛** [1:31:48]
比 OpenBSD 还要少 ， 行了吧 ？

**Rio** [1:31:50]
差不多 。

**吴涛** [1:31:51]
比 DragonflyBSD 还要少 。

**Rio** [1:31:52]
差不多差不多 。 对 ， 我明白你的意思 ， 就我就可能还是只是只仅限于那种比较非常专业的领域 ， 可能才有这种需求吧 ， 我觉得 。

**吴涛** [1:32:05]
专业这两个字是应该读成奇葩吗 ？

**Rio** [1:32:09]
这个就 。

**吴涛** [1:32:11]
但我的我的理解是这一个就是 CoreCLR 运行在 OS X 上这件事情使得你用一台 Mac 开发 .NET 服务端的程序成为了可能 ， 就是你不再需要一个 Linux 的虚拟机或者怎么样 ， 你直接在自己的本机上原生开发 ， 原生运行 ，在在在 OS X 上运行一个 .exe 文件的这种实时实时刻的行为终于被支持了 。

**Rio** [1:32:42]
不 ，但但你还别说 ，其实在 Mac 上面做就跨平台的开发 ， 你还真的是一个就假设你要做一个软件是需要同时支持 Mac、Windows、Android 和这个叫什么啊 ， 我我那 Mac。

**吴涛** [1:32:57]
Linux。

**Rio** [1:32:57]
Linux， 对 ， 你还真的只能在 OS X 上做 ， 就如果你只能选择一台设备的话哈 ，因为你你你因为我记得是没有办法在在或者说没有比较方便可靠的办法在 PC 或者是在其他平台上装 OS X 嘛 。

有黑有黑苹果 ，但是经常一升级就好像不行了 。

**吴涛** [1:33:18]
对 ， 我我的理解是如果你要开发 Android 和 iOS 的话 ， 那你基本上你肯定会需要一台 Mac，但是事情也是在慢慢改变的嘛 ， 比如说我好像前两天刚刚看到了一个工具叫什么 Silver， 还是什么东西 ， 还是叫 Fire， 还是 anyway，有这么一个工具 ， 现在可以在 Visual Studio 里面写 Swift， 然后编啊编译成 。

**Rio** [1:33:44]
重新开机 。

**吴涛** [1:33:44]
对 ， 编译成 iOS 和 Android 的程序 ， 我不确定是不是这样 ，但但大体我因为我看到一张截图就是在 Visual Studio 里面写 Swift 的程序 ，但是具体能编译出什么效果来 ， 我好像还还是得看一下的 ， 应该是可以的 。

**Rio** [1:34:03]
哎 ， 所以刚才那个那个 common language runtime 就是微软这个什么通用语言 。

**吴涛** [1:34:08]
CoreCLR。

**Rio** [1:34:09]
它它这个是官方微软官方支持的吗 ？ 还是说只是一个玩票性质的东西 ？

**吴涛** [1:34:15]
这个东西被 merge 进入了微软官方的 Git repository， 就是在 GitHub 上面的这个东西 。

**Rio** [1:34:21]
意思是他们以后要要要负责到底喽 。

**吴涛** [1:34:25]
应该是吧 ，不然他们干嘛要 ， 我的理解这是微软很重要的一个战略举动 。

**Rio** [1:34:31]
哪哪里都要去是吧 ？

**吴涛** [1:34:33]
对啊 。

**Rio** [1:34:34]
嗯 ， 哎 ， 这不错 ， 这就其实其实我觉得那个我就是就人称那个 CLR 是比 JVM 好嘛 。

**吴涛** [1:34:42]
我是坚信 ， 我是坚决这样相信的 。

**Rio** [1:34:45]
对 ， 我我也就是因为之前我是哎 ， 我忘了我有什么会有这个印象啊 ， 想起来了 ，是之前那个很很多年前玩那个 Scala 的时候 ， 就看他们怎么去实现那些到 ，因为 Scala 最开始是在那个 JVM 上面实现的嘛 ， 就就说 JVM 有很多坑 ， 很那个那个什么 Scala 的很多那种特性都不是太好实现 ，但反而是在在那个因为 Scala 也有那个 CLR 的版本嘛 ， 好像就反而是在 CLR 上实

现起来效率会就比较简单啊 ， 效率会比较高一些 。

**吴涛** [1:35:17]
说 Scala 是带着镣铐跳舞 ， 然后这个镣铐它是指的就是 JVM。

**Rio** [1:35:21]
对对对 。

**吴涛** [1:35:22]
JVM 有很多奇葩的地方嘛 。

**Rio** [1:35:25]
那它老嘛 ， 没办法 。

**吴涛** [1:35:28]
而虽然一方面我们也可以说 JVM 是一个被大量的人力精力所优化过的一个虚拟机 。

**Rio** [1:35:38]
企业软件 。

**吴涛** [1:35:40]
对 ，而且我相信在企业机应用上面 ，CLR 应该还不是 JVM 的对手 ， 虽然你可以说这个东西要比 CLR 要先进一些 ，不不比 JVM 要先进一些 。

**Rio** [1:35:52]
体量上还是完全不一样了 。

**吴涛** [1:35:54]
对啊 。

**Rio** [1:35:55]
主要是 JVM 可以可以有那个什么有个开源版可以免费大家自己改 ，而且不是现在有什么安卓有什么 David 大家知道吗 ？

那怎么念 ？David。

**吴涛** [1:36:04]
David。

**Rio** [1:36:05]
David， 对吧 ？ 因为那个东西就是它其实变成一种怎么讲 ， 事实的标准了吧 ， 我觉得 。

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

**Rio** [1:36:11]
不是前段那个什么 Google 跟 Oracle 打官司 ， 还在争这个 JVM 的 API 到底是不是可以被专利什么版权保护的吗 ？

**吴涛** [1:36:21]
Oracle 真是丧心病狂的一个公司 ， 真是 。

**Rio** [1:36:24]
不是说 Oracle 的那么法务 ， 这是这是超过其他所有部门的员工总和吗 ？

**吴涛** [1:36:31]
他们都我是他们对 ，而且即便如此 ，他们的智商加起来还是低于任何一个单一部门 。

**Rio** [1:36:40]
但但这没有关系啊 ， 关键人家能够在法庭上搞定官司 ， 这个就够牛逼了 。

**吴涛** [1:36:46]
好吧 。

**Rio** [1:36:48]
然后 CLR 它这样的话 ， 那那对了 ， 那个有个问题上怎么忘了问 ， 就 CLR 开源之后它它就还需要向微软支付费用吗 ？

使用的就企业使用的话 。

**吴涛** [1:37:02]
开源之后是否需要向微软支付费用 ？ 我相信应该是不需要的 ，因为 CLR .NET 从来没有作为一种 license model 被 。

**Rio** [1:37:15]
因为因为之前它都是只能在 Windows 上面用嘛 ， 就是说 。

**吴涛** [1:37:19]
对 ， 就是微软之前是靠平台 ，不不是靠软件平台赚钱的 ，而是靠操作系统和硬件平台 。

**Rio** [1:37:27]
因为你你要你要买你要买它的这个 。

**吴涛** [1:37:31]
服务器和 。

**Rio** [1:37:32]
对啊 ， 服务器到系统开发工具你全部都要买嘛 ， 对不对 ？ 然后在这里就但那我把这个整套这个什么工具都卖给你 ， 那么我可以赚钱 ， 可以 cover 我的这个开发成本 ， 没有问题 。

那既然它开源出来之后， 那你比如说有那个 CLR 可以在 Linux 上运行了 ， 现在又可以在 OS X 上运行了 ， 那它怎么办 ？

**吴涛** [1:37:50]
卖服务吧 。

**Rio** [1:37:52]
就是卖什么 commercial support。

**吴涛** [1:37:55]
嗯 ， 应该是吧 。 然后 MSDN 要钱吗 ？ 不要钱吗 ？

**Rio** [1:38:01]
MSDN 要要付费的 ，是个 subscription。

**吴涛** [1:38:06]
可是为什么我可以在 MSDN 上查到所有的 API 呢 ？

**Rio** [1:38:10]
不 ， 它有它有大部分的是开放的吧 ，但是我记得有一些不全还是怎么样 ， 我忘了 。

**吴涛** [1:38:17]
哪一部分的 ？ 我我回头我们再查一下 。

**Rio** [1:38:20]
对 ， 可以再查一下 。 我我有我之前也有关注过这个事情 ， 我都忘了为什么了 ，但反正就 。

**吴涛** [1:38:25]
不 ， 我觉得这主要问题是现在微软面微软的微软面临的不是一个怎么赚钱的问题 ，而是一个安身立命的问题 ， 就你再不把你不再不去试图以某种方式占领一下， 就是在不说占领了 ， 就说能够守住服务器上的仅有的一点点阵地的话 ， 那那那这是一个非常 。

**Rio** [1:38:50]
比较死掉了是吧 ？

**吴涛** [1:38:51]
自然或者说对 ， 非常自然或者说非常理性的选择吧 。

**Rio** [1:38:55]
对 。

**吴涛** [1:38:56]
直接就不管 3721 如果有足够多的人用的话 ， 那我就总有一线希望可以赚钱吧 ，但如果没有人用的话 ， 那那别说怎么赚钱了 ， 那是那是根本赚不到钱的 。

**Rio** [1:39:06]
就是活都活不下去的问题了 。

**吴涛** [1:39:08]
对 。

**Rio** [1:39:08]
这确实是一个挺麻烦的事 。 嗯 ， 可以看一下它看它之后怎么弄吧 。 就不知道它这个什么就包括运行效率啊 ， 就在非 Windows 平台上面的运行效率啊 ， 跟跟 JVM 比起来会怎么样 ， 这个是挺挺值得期待的一件事情 。

**吴涛** [1:39:25]
一开始应该不会太好的 ， 我相信 ，但是我怎么说呢 ， 我是相信 CLR 会聚集一批 Java hater。Haters gonna hate， 然后就围绕在 CoreCLR 周围做出一个生态圈来 ， 这是我希望 ， 这是我能这是我希望见到的 。

**Rio** [1:39:45]
你就可以写回你心爱的 C#， 然后在各种地方跑了是不是 ？

**吴涛** [1:39:49]
对嘛 ，而且我前我买了台 PlayStation 4， 然后那天特别好奇 。

**Rio** [1:39:56]
你玩游戏了 。

**吴涛** [1:39:58]
耶 。

**Rio** [1:39:58]
玩什么买买为了什么游戏买的说吧 。

**吴涛** [1:40:02]
目前只有一个游戏玩 ， 就是 The Last of Us。

**Rio** [1:40:06]
叫什么中这个中文叫 。

**吴涛** [1:40:08]
我不知道 。 最后的我们还是什么 。

**Rio** [1:40:14]
不是不是应该翻译成一小股残余势力吗 ？

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

大叔和萝莉的故事 。

**Rio** [1:40:22]
OK。

**吴涛** [1:40:23]
大叔和萝莉在一个僵尸横行的世界里面相依为命的故事 。

**Rio** [1:40:28]
哎 ， 为什么会突然想买个 PS4 来玩这个 ？

**吴涛** [1:40:33]
其实也不是突然想买嘛 ， 就一直说要全主机制霸 ， 然后现在是有了 360 PS One 啊 ，PS4 和 Xbox One。

**Rio** [1:40:44]
齐了哈都 。

**吴涛** [1:40:45]
还差一个 PS3。

**Rio** [1:40:47]
PS3 不是已经有 4 了 ， 还玩 3 吗 ？

**吴涛** [1:40:49]
不 ，但有一个非常重要的游戏在 PS3 上独占的 ，Ace Combat。

**Rio** [1:40:54]
啊 ， 它那个它那个不会有开发 PS4 的版本了吗 ？

**吴涛** [1:40:58]
嗯 ，不会 。 航班空战系列每一作都是独占平台 ，而且绝对不会移植 。

**Rio** [1:41:05]
OK， 这就是我上次在你那里玩那个那款吗 ？

**吴涛** [1:41:10]
应该是 。

**Rio** [1:41:11]
还在 8 单 8 单的时候 。

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

**Rio** [1:41:13]
啊 ， 我知道那个真的挺好玩的 。 上瘾 。

**吴涛** [1:41:18]
然后

PS 我刚才说哪了 ，PS4 的开发工具是 C#。

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

**吴涛** [1:41:27]
至少就是我现在玩的这个 The Last of Us 是用 C# 写的 。

**Rio** [1:41:31]
对 ， 你现在玩游戏如果我没有看错 。

**吴涛** [1:41:33]
可以吗 ？ 对啊 。

**Rio** [1:41:36]
不不不 ， 我也觉得挺惊讶的 。 您您他怎么你是说 C# 的性能可以写那种什么很对性能有极高要求的游戏 ？

**吴涛** [1:41:46]
从目前得到的信息来看是这样的 。

**Rio** [1:41:49]
我靠 ， 这个 。

**吴涛** [1:41:50]
而且而且你不要那个 Unity 整个都是用 C# 写的 。

**Rio** [1:41:57]
不 ，但是我理解它的它那个什么 ， 比如说核心路径 ， 它可能还是用 C 或者是什么是顺着汇编应该不会用了吧 ，也很难说 。

**吴涛** [1:42:07]
好吧 ， 我再来确认一下 。The Last of Us C#。

OK，Sony WWS ATF 就是索尼提供的这一套开发工具 。ATF 是 Othering Tools Framework 的缩写 。 它是 a set of C# .NET components for making tools on Windows。ATF has been in continuous development in Sony Computer Entertainment

Worldwide Studio Central Tools Group since early 2005。

**Rio** [1:42:58]
这个部门的名字怎么这么长 ？

**吴涛** [1:43:02]
SCE Worldwide Studio。

**Rio** [1:43:05]
OK。

**吴涛** [1:43:05]
Central Tools Group。

**Rio** [1:43:07]
天呐 。

**吴涛** [1:43:07]
对 ， 然后这个东西被拿来做

Naughty Dog 的 The Last of Us。 然后 OK， 所以这套工具至少可以肯定是 C# .NET。

**Rio** [1:43:20]
OK。

**吴涛** [1:43:21]
为基础的 ，但有一个问题就是据我所知 ，PlayStation 4 上面跑的 OS 是一套经过修改的 FreeBSD。

**Rio** [1:43:31]
哇 。

这这么分裂 。

**吴涛** [1:43:35]
对 ， 然后这个游戏本这个游戏居然是用 C# 写的 。

**Rio** [1:43:43]
那这个这个这个流程也是蛮蛮近 ， 这个流程也是蛮奇怪的哈 。

**吴涛** [1:43:51]
对 ，是蛮奇怪的 。

**Rio** [1:43:52]
好吧 。

**吴涛** [1:43:54]
一群人在 Windows 上面开发游戏 ， 然后最后又跑在 FreeBSD 上 。

**Rio** [1:43:59]
所以你是打算怎么等它那个 CoreCLR 搞好了之后， 你也写个游戏方向去跑跑 ？

**吴涛** [1:44:07]
哦 ， 这两个东西可能没有什么可比性吧 ， 我觉得 。

**Rio** [1:44:13]
做个小游戏嘛 ， 应该是可以的 。 哎 ， 它现在不是打着那个 CLR 的旗号要说要要跨跨跨设备吗 ？ 就是一套代码可以通吃 mobile 就是手机平板和电脑嘛 。

**吴涛** [1:44:29]
也怎么说呢 ，也不是没有可能吧 ，但我其实比较希望有一天可以有什么 Swift .NET 之类的奇葩出现 。

**Rio** [1:44:40]
哎 ， 你别说 ， 现在那个刚刚那个我 Twitter 更新了 ， 我说微软要把这个 React 加到 Visual Studio 2015 里面去 。

**吴涛** [1:44:50]
What？

**Rio** [1:44:50]
React JavaScript， 就刚才我们讲那个 。

**吴涛** [1:44:53]
这太神奇了 。

**Rio** [1:44:54]
什么 ？Microsoft to add React JavaScript to Visual Studio 2015 in response to overwhelming user requests。

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

**Rio** [1:45:04]
用户需求是震天响啊 。 微软还是一个挺挺蛮听用户的声音的公司啊 ， 我觉得 。

**吴涛** [1:45:13]
对 ， 微软不像苹果那么牛气冲天 。

**Rio** [1:45:17]
就但问题就是主要它听的都不太对 ，有时候 。

那个那个就不扯了 。

**吴涛** [1:45:24]
监听则明 ， 偏听则邪 。

**Rio** [1:45:28]
有时候听多了也不是好事 。

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

**Rio** [1:45:32]
哎 ， 还有一个事情我们可以再扯一下， 就是我上次不是说我装了那个 i3 嘛 。

### i3

**吴涛** [1:45:37]
对 ， 感觉怎么样 ？

**Rio** [1:45:38]
我又用了一段时间了 ， 感觉还真的蛮爽的 。

**吴涛** [1:45:42]
我就说吧 。

**Rio** [1:45:43]
简单 ， 然后我之前那个有个听众也在问 ， 她是试了那个她听了你的古惑就试了那个 awesome， 她觉得不太好用 ， 然后我给她说 try i3， 然后她回去了用了 ， 然后第二天发现说嗯 ， 果然很好用 。

**吴涛** [1:45:58]
我觉得 awesome 可能问题还是在于它给你提供的选项有点多 。

**Rio** [1:46:03]
就不够就是就是什么 ？

**吴涛** [1:46:05]
不够轻松 。

**Rio** [1:46:06]
上手还是有点难嘛 ，而且这种对这种就比较不太就是一样的操作方式 ， 我觉得上手是一个很重要的上手的门槛 ， 是一个很重要的事情 。

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

**Rio** [1:46:18]
我发现但用了那个之后就回来就是想 ， 哎呀 ， 我怎么 Mac 上怎么没有这个呢 ？Mac 上有这个就好了 。

我就觉得很沮丧 。 不过 Mac 上有一个问题啊 ， 我发现一直是有个那 i3 它有个很重要那个那个 Meta key 嘛 ， 就是就是就是你用它来启就它的一个等于是一个专用的快捷键 。

然后发现这个事情在 Linux 上面其实很简单 ， 你就把那个 Windows 那个键留给它就可以了 。 因为我基本到目前为止没有遇到过 Linux 上面的任何一个图形软件是需要用 Window key 作为一个这个快捷键的 。

你有遇到过吗 ？

**吴涛** [1:46:55]
我因为我用的是 hacking keyboard。

**Rio** [1:46:59]
你没有 Window 键对吧 ？

**吴涛** [1:47:00]
我就把那个 command 键设成 Meta key， 就 modifier modifier 5。

**Rio** [1:47:07]
那你要用 command 怎么办 ？ 啊 ， 你的那 command 就是那个是 Mac 那个 command 键 ， 就是 Windows 键嘛 ， 所以 。

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

**Rio** [1:47:14]
OK， 就就常见我们键盘上是有这四对四个改变键盘状态的键嘛 ， 一个是 Shift， 一个是 Control， 一个是这个 Alt 或者叫 Option 在 Mac 上面 ， 然后就是这个所谓 Window 键 ， 就是在 Mac 上叫做 command 这个键嘛 。

然后我记得在很久以前 Windows 键不是很还没有流 ，Windows 键应该是在 XP 之后开始流行的 ， 对不对 ？

**吴涛** [1:47:41]
对 ， 从 XP 开始才渐渐有键盘上出现 Windows。

**Rio** [1:47:44]
我觉得最近很多 Windows 软件它是没有 ， 就是只用那个 Shift、Control 还有 Alt 这三个键来做快捷键就好了啊 ， 当然就会有很多这种怪异的组合了啊 ，但后来就在微软加了就很多这个键盘开始做这个特殊的 Windows 键之后嘛 ， 然后就开始有些软件支持这个要用那个 Windows 键来做快捷键的那个按那个一个辅助按钮按键了 。

但是在 Linux 上面这件事情好像还没有发生 ，因为我知道很多那种键盘都没有 Windows 键的嘛 ， 那 Windows 那个 Linux 用户 。

然后 。

**吴涛** [1:48:14]
对 ，而且很多 Linux 用户会选择用一个键盘贴把那个 Windows 标志去掉 。

**Rio** [1:48:19]
对对 ， 然后但这其实我一直觉得键盘很多键盘厂商把那个 Windows 键做成半透明的圆形 ，是非常恶趣味的一件事情 。

半透明的圆形我从没见过 ， 哪个键盘怎么搞的 ， 这也太丑了 。

**吴涛** [1:48:32]
就是它把那个 Windows 键做成一个触感和其他键不一样的 ， 然后它上面是一个是是是圆形的 。

**Rio** [1:48:40]
哦哦 ， 你说那个键键帽上面的那个那个叫什么键帽上那个 。

**吴涛** [1:48:45]
它是一个气泡 。

**Rio** [1:48:46]
镂空的那个地方 ， 对 。

**吴涛** [1:48:47]
对 ， 它会做成一个气泡 ， 我觉得这实在是太二了 。

**Rio** [1:48:50]
不能忍是吧 ？ 嗯 ，不过不过这个有时候跟那个什么小白又会解释说你按那个圆的跟那个别的键都不一样的 ， 就挺好解释的 。

不过就说 Linux 上面 Linux 上面因为没有这个 Windows 键 ，因为它要支持更更奇奇古怪的设备哈 ， 然后它没有这个 Windows 键的话 ， 它就不会去占用那个嘛 ， 然后这样的话我就可以直接把 Windows 键预留给这样窗口管理器啊这东西 ，而且刚好你你窗口管理嘛 ， 然后 Windows 也是窗口嘛 ， 对吧 ， 就还挺挺一一对应的 。

然后我发现回到这个 OS3 上面我来找一个类似的东西 ，其实也有 ，但是发现根本没法没法用 ， 就是它因为 Mac 上面的那四个快捷键就是大量在广泛使用的一个一个一个组合 ， 这样的话就发现哎呀我靠 ， 那没有一个一个键可以预留给某一个这种全局系统来的工具用了嘛 ， 就就其实挺沮丧的一件事情 。

**吴涛** [1:49:44]
我不知道你怎么样 ，因为你也用 Divvy 对吧 ？

**Rio** [1:49:47]
对 ， 我我现在就我买了嘛 ， 然后就主要用 Divvy，但是哎你你 Divvy 你 Divvy 你是用快捷键启动的还是用鼠标启动的 ？

**吴涛** [1:49:54]
我是用快捷键启动的 。

**Rio** [1:49:56]
你设置哪一个 ？

**吴涛** [1:49:58]
我设成 command 加点 ，command 加句号 。

**Rio** [1:50:02]
这个这个组合键很常见吧 ？

**吴涛** [1:50:07]
这个组合键在 Photoshop 里面应该是有用的 。

**Rio** [1:50:11]
就其他软件里面也经常会用到这个组合键 。

**吴涛** [1:50:14]
在某些软件里面代表结束一件事情或者终止一件事情 。

**Rio** [1:50:21]
对对对 ， 就那你不会冲突吗这样 ？

**吴涛** [1:50:26]
到现在为止还很少 ， 我要说 。

**Rio** [1:50:29]
OK， 哎 ， 那等一下， 这个这两个键这个到底在右边 ， 你是左手用鼠标吗 ？

**吴涛** [1:50:35]
我不基本不用鼠标 。

**Rio** [1:50:38]
啊 ， 那你怎么用 Divvy 呢 ？

**吴涛** [1:50:42]
用 Divvy 不用 Divvy 的 hole points 不就是不要用鼠标吗 ？

**Rio** [1:50:47]
不是 Divvy，但是你需要画的那个比例是要用那个那个鼠标来画那个框吗 ？

**吴涛** [1:50:52]
What？ 你用鼠标来画比例 ， 真的假的 ？

**Rio** [1:50:55]
等一下， 我们说的是同一个东西吗 ？ 是 Divvy 啊这个东西 。

**吴涛** [1:50:57]
对啊 ， 问题是 Divvy 可以在按下就是在你呼出 Divvy 的主界面之后按一个快捷键让窗口成为就迅速占据 。

**Rio** [1:51:09]
你是预先分配了这个叫什么啊 ， 就是你预先确定了一个比例 ， 然后所有窗口都是 。

**吴涛** [1:51:15]
对 ， 我先预先画出一批 grid 来 ， 比如说我把屏幕右半边的 grid 设成 L。

**Rio** [1:51:23]
OK， 我明白你 。

**吴涛** [1:51:24]
然后左半边设成 H， 然后右 2/3 设成 M， 左 2/3 设成 N， 右 1/4 设成 P， 左 1/4 设成 O。

**Rio** [1:51:35]
懂了懂了 。

**吴涛** [1:51:37]
左上设成 Q， 右上设成 W， 左下设成 A， 右下设成 S， 然后这样就是通过一个按键组合来完成 ， 比如说我现在要把浏览器窗口设为左半边 ， 我只需要按 command 加句号 ， 然后 H 就可以了 。

**Rio** [1:51:54]
OK， 我明白你的意思啊 ， 你是这么用的 。 我我是因为经常我会就一会大一会小嘛 ， 然后哎 ，不过其实你说这样有道理 ， 我可以试一下这种方式 ，因为我就是用鼠标 。

**吴涛** [1:52:05]
一会大一会小就就会打破你在 i3 里面养成那种所有的窗口一出现就应该立刻占屏幕一半的这个这个这个闷头猫龙 。

**Rio** [1:52:16]
对 ， 现在发现是这个屏幕有点问题 ， 就是说比如说我现在是 15 寸的那个 Retina MacBook Pro， 它是是就就在逻辑上应该是 1440 乘以 900 的 ， 这样如果一半宽的话 ， 这个一个流程就只有 720 个像素嘛 ，但这样的话就很多网页都不够宽啊 。

**吴涛** [1:52:36]
所以我有一个 2/3 的设定 。

**Rio** [1:52:38]
哦 ， 你是这样 ， 就是有但有有些又可以 ， 你知道就很很纠结 。 不过不过你说的有道理啊 ， 就是大部分时候要么就是 2/3， 要么就是一半嘛 ， 就只有这个 。

**吴涛** [1:52:47]
然后对 ，在我上网的时候我会我用我有一个 u，u 是中间的 2/3，但是上下是怎么说 ， 上下是通透的 ， 就是从最上到最下 。

我为什么现在表达能力这么差 ， 就是纵向的 2/3，但是是居中的 。

**Rio** [1:53:13]
就是那左右两边的留白是是什么东西呢 ？ 空的 。

**吴涛** [1:53:18]
就这种情况下我基本上是在比如说需要读 PDF， 然后专心读 PDF 的时候 ， 我会把所有其他窗口都关掉 ， 然后把 PDF 放成中间 2/3 这样 。

**Rio** [1:53:31]
这就是你的 zine mode， 对不对 ？

**吴涛** [1:53:33]
对 ，into the zone。

**Rio** [1:53:35]
OK， 那我我我一般是这样子 ， 就是我我就 1440 宽的屏幕的话 ， 我一般就是可能 4/5 不是 4/6 就 2/3 吧 ， 对不是 3/3，因为我是按 6 扇来分的哈 ， 然后就是 2/3 是浏览器窗口 ，1/3 是一个要么是一个这个 iMessage 聊天窗口 ， 要么就是这个 Twitter 界面嘛 ， 大概是这么这么一个用法啊 。

不过你说这个方式可以试一下哈 。

**吴涛** [1:54:03]
对 ， 你可以试试 。

**Rio** [1:54:04]
然后就要找一个快捷键 ， 我现在是一个很很扭捏的一个快捷键 ，是是 command 加 F4。

**吴涛** [1:54:12]
Command 加 F4， 你按久了会关窗口的在 Windows 上 。

**Rio** [1:54:18]
我我没有用 Windows 啊 ， 所以没没有这个关系 ，但你不你说的确实确实是一个问题 ， 我要改一下 。

**吴涛** [1:54:25]
Oh my god，OK。

**Rio** [1:54:26]
啊啊 ， 然后那个 i3 还有一个很重要的附属的一个一个一个工具叫 dmanual 嘛 ， 就是一个 launcher 启动器 ， 大概什么意思 ， 跟 spotlight 和那个 offer 差不多意思吧 ，但它那个就比较弱小 ， 只能启动软件 ， 别的什么都不能干 。

**吴涛** [1:54:44]
没错 。

**Rio** [1:54:45]
你有什么更好的替代方案吗 ？

**吴涛** [1:54:47]
我没有什么更好的替代方案 。

**Rio** [1:54:49]
对 ， 我发现其实因为你说 。

**吴涛** [1:54:51]
就是从我的角度来说 ，Windows 不是 Linux 是一个是一台工作的机器 ， 我在上面要干什么我是明确知道的 ， 然后我要启用特我要启用的固定工具就那么几种 。

**Rio** [1:55:03]
你就也用不了几次对吧 ？

**吴涛** [1:55:05]
而且绝大部分工具都是命令行下的 ， 所以用 d3 其实就只需要启动 Remina， 是一个是一个 remote desktop 的 client， 然后启动浏览器 ， 启动命令行 ， 启动命令行 ， 启动编辑器 ， 启动邮件客户端 ， 启动 im。

**Rio** [1:55:27]
就好了 。

**吴涛** [1:55:29]
然后就好了 。

**Rio** [1:55:29]
好吧 ， 对 ，因为我发现有一个很很窘的一个问题 ， 就是它 dmanual 它不是默认启动 ， 就是说你的这种可执行路径下那边的的命令都可以搜得到嘛 。

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

**Rio** [1:55:39]
但是你其实你发现其实大部分都是没有用的 ，因为没有那个界面可以打开任何东西嘛 。

**吴涛** [1:55:46]
没错 ，是这样 。

**Rio** [1:55:47]
就就觉得很窘 ， 比如说我要启动一个这个 Chrome， 那我就打 chr 对吧 ， 然后它会它会第一个是出来那个叫什么 change root， 还是还是对 change root 对 ， 你会觉得这不是神经病吗 ？

就是打开这个你按我按着选的那个没有用啊 ， 就是 。

**吴涛** [1:56:04]
对 ， 它甚至不如一个输入法 ， 它不会不会过滤那些没有用的 。

**Rio** [1:56:09]
但可能这个应该它的那个什么设计也有也有关系 ， 它它没有办法嘛 ， 这个系统上那些东西哪些是可以会启动一个 x 窗口的 ， 哪些是不行 ， 它又不知道对吧 ， 这个是很难做的一件事情 。

不过我就在想 ，其实如果 i3 那个 dmanual 它做强大一点 ， 做成像类似于 spotlight， 可以有这种搜索啊 ， 就常见的搜索 ， 比如说我经常做的一件事情就是就单位转换嘛 ， 或者做一个简单的这个计算嘛 ， 比如说你要算一下啊 ， 它不是显示多少个字节出来 ， 你要转换成这个兆嘛 ， 或者是 GB 的时候你怎么要算一下， 然后说转换一个货币单位 ， 现在在那个 spotlight

里面做就挺方便的 ， 做一些常见的单位度量衡的转换 ， 或者说一个常见的这个 ， 比如说查查单词吧 ， 甚至都可以很方便的做 ，但 dmanual 的话不知道有没有可以更高级的可以把这些东西解决 。

**吴涛** [1:57:04]
嗯 ， 这的确是一个问题 ，但是我觉得这可能也就怎么说呢 ， 违背了

i3 的初衷吧 。

**Rio** [1:57:15]
就简单的极简 。

**吴涛** [1:57:17]
对 ，i3 的设计初衷应该是不包括有一个万能的 ， 就这叫什么 omnibar 还是叫什么 omni。

**Rio** [1:57:27]
对对 。

**吴涛** [1:57:27]
Omni input。

**Rio** [1:57:28]
对 ， 差不多这么一个东西的 。

**吴涛** [1:57:30]
如果你要用这个的话 ，其实 Linux 上是有的 ， 叫什么

啊 。

**Rio** [1:57:36]
我知道以前那个那个最早那个版本叫什么 light，light 什么玩意儿 ，不是 Silver light， 对 ， 你还记得吗 ？

**吴涛** [1:57:46]
Silver light 是 OS3 上的呀 。

**Rio** [1:57:48]
不 ， 它以前是哎 ，不是 Silver light 吗 ？

**吴涛** [1:57:53]
Copper 我记得是叫什么 copper。

**Rio** [1:57:56]
不 ，有一个哥们开发了个版本 ， 它有一个是在可以在 Linux 上面用的 。

**吴涛** [1:58:01]
OK。

**Rio** [1:58:01]
啊 ， 对 ，但我就说其实你现在那个连那个 Ubuntu，因为现在 Ubuntu 不是全面抄袭这个 OS10 的设计嘛 ， 它里面也那个也也有那个功能 ，但 Ubuntu 比较慢 ， 就没怎么用 ， 用了这个 i3 之后感觉真是飞快 ，而且上次我那个分辨率就是在 VirtualBox 里面那个分辨率调不出来 ， 它不会自动随窗口大小变的问题我也解决了 ， 现在感觉还是蛮爽的 ， 就可以不用装 。

**吴涛** [1:58:26]
所以你现在是全屏全屏跑虚拟机 ， 假装自己是在在 Linux 上工作 。

**Rio** [1:58:31]
哎 ，不就有有有时候要在 Linux 上面做点事情的时候 ， 就就就是这么用 ，而且启动超快 ，因为之前骑 Ubuntu 还要等 ， 觉得有点小慢 ， 虽然我是 SSD， 然后又是什么 I7 处理器 ， 然后这怎么怎么感觉配置挺高的是吧 ，但你觉得等它启动还是挺挺久的一件事情 ， 然后现在 i3 一启动哎 ， 爽秒开 。

**吴涛** [1:58:53]
没错 ，是这样的 。 有时候我也会我我在 VirtualBox 里面装一个 Divvy， 然后装了 i3， 然后我把 host key 设成了右边的 command， 这样全屏之后就按左边的 command 比较多嘛 ， 然后就完全可以完全不会意识到自己其实下面还跑着一个 。

**Rio** [1:59:12]
虚拟机是吧 ？

**吴涛** [1:59:15]
OS10 对 。

**Rio** [1:59:16]
就之前之前我我学校有一个有个老师是这么干的 ， 我之前去他办公室 ，他是用一个那个 27 还是 21 的 iMac， 然后他整个就是你看他那个 dock 干干净净 ， 就就一个软件就 VirtualBox， 然后连跑个连跑个 Ubuntu， 我说那何必呢 ， 真是我说你真是何苦 ， 真是那不如直接买个 ，不过不过确实也是现在买不到这个称心如意的硬件能够就除了 Dell 吧 ， 能够跑 Linux 软件都要折腾

嘛 ， 那现在有些人就是他选择不折腾 ， 我买个这个 Mac， 然后上面跑个虚拟机 ， 这样保证硬件不会有问题 。

**吴涛** [1:59:54]
嗯哼 ， 那个 Mac Dell 的 XPS。

**Rio** [1:59:59]
XPS 吗 ？

**吴涛** [1:59:59]
XPS 13 吗 ？XPS 13 还是 17，有一个 developer edition。

**Rio** [2:00:03]
13 对 。

**吴涛** [2:00:05]
Developer edition 就预装了 Ubuntu。

**Rio** [2:00:07]
对对 ， 我就说要如果你不想折腾 ， 然后又想用就专门用 Linux 的话 ， 就用那个还挺好的 。 嗯 ， 买那个好像也不便宜吧 ， 好像 1,200 还是 1,000 几我记得 。

**吴涛** [2:00:18]
对 ，而且做工还是不错的 。

**Rio** [2:00:21]
就那个那个它的高端型号啊 ， 感觉还是不错的 ，但是 。

**吴涛** [2:00:26]
还是不能跟 unibody 相比 。

**Rio** [2:00:28]
对 ， 审美上还是不能够接受啊 ， 感觉而且它那个不是 Retina 屏幕吧 ， 我记得 。

**吴涛** [2:00:35]
嗯 ， 最新的一代好像是的 。

**Rio** [2:00:37]
它有最近我看最近可以选高配的 ，有一个什么是 3200 还是 25 多少是一个高 ，但是那个你说那个 developer edition 好像还不是 。

**吴涛** [2:00:46]
没有吗 ？OK。

**Rio** [2:00:47]
我记得好像这样子 ，但可能今年它再升级一下说不定也就有了呢 ， 谁知道呢 。

**吴涛** [2:00:55]
其实还有一个厂商是做游戏 laptop 的 ， 我一直想不起来名字了 。Razer Razer Blade。

**Rio** [2:01:03]
啊哈 ， 它有 。

**吴涛** [2:01:05]
好像是你们加拿大的 。

**Rio** [2:01:06]
What， 真的 ？

**吴涛** [2:01:08]
Razer。

**Rio** [2:01:10]
加拿大还真的 。

**吴涛** [2:01:11]
Razer Blade laptop gaming laptop 其实也是工业设计非常非常好的 ， 对的 ， 非常我撤掉一个非常 。 就你你去看那个 Razer Blade 的基本上就是一个黑板的 Mac Pro， 然后

也是高端机型装

装 Linux 应该也没什么问题吧 。

**Rio** [2:01:34]
我看看叫什么 Razer Razer。

**吴涛** [2:01:38]
Razer Blade。

**Rio** [2:01:40]
是叫 razerzone.com 吗 ？ 这个网站 。

**吴涛** [2:01:43]
对 ， 没错 ，Razer Blade。

**Rio** [2:01:45]
因为我之前看过那个戴戴尔的那个什么 Alienware 那一套设计哲学 ， 我简直哇这这我都不知道为什么会有人觉得它好看 。

**吴涛** [2:01:54]
哦 ， 那你应该会觉得 Razer Blade 还 OK 吧 ， 除了那个键盘的键盘上面的字体比较比较 kitsch 之外， 反正推荐一下这款笔记本电脑 。

**Rio** [2:02:08]
等一下这笔记本这种游戏笔记本装 Linux 不是找死吗 ？ 那些硬件都驱动都跑不动的 ， 没有驱动 。

**吴涛** [2:02:14]
它好吧 ，Nvidia 的 OK，Nvidia Linux 被被 Linux 被骂过 。

**Rio** [2:02:19]
被打 P 到死 ， 简直我觉得现在你你真的你要做开发机 ， 你只能找什么就全套就全套英特尔平台的可能还好一点 。

**吴涛** [2:02:27]
OK。

**Rio** [2:02:28]
就是就是极极极限 ， 然后不要用太多什么奇奇怪怪的硬件的那种可能会好一点 。

**吴涛** [2:02:35]
好吧 ， 我一直 。 我本来还想本来还想买一台这个 Razer Blade 在去北美的时候 。

**Rio** [2:02:42]
为什么 ？

**吴涛** [2:02:44]
有一个非常了不起的游戏叫 Star Citizen。

**Rio** [2:02:48]
什么玩意儿 ？

**吴涛** [2:02:50]
是 PC only 的 ， 它是 Kickstarter 上面的一个一个一个项目 。

**Rio** [2:02:54]
已经做出来了吗 ？ 还是 ？

**吴涛** [2:02:56]
已经应该是已经做出来了吧 ， 就是可以已经做到可以玩的地步了 ，但还没有做完 。

**Rio** [2:03:01]
啊 ，beta。

**吴涛** [2:03:02]
就是它它准备了吧 ， 就是它要做成一个非常野心勃勃的太空探险式的 MMORPG， 就是你在里面可以拥有很多艘宇宙飞船 ， 然后在 。

**Rio** [2:03:17]
是不是类似以前那个 home home 那种类型的东西 ？

**吴涛** [2:03:21]
Homeworld。

**Rio** [2:03:22]
啊 ， 叫家园嘛 ，也不是以前有个太空游戏 。

**吴涛** [2:03:25]
对 ， 那个叫 Homeworld。

**Rio** [2:03:26]
OK。

**吴涛** [2:03:27]
啊 ，不一样 ，Homeworld 里面你是看不到自己的 ，但是在 Star Citizen 里面你你你是就你在里面有个 avatar， 然后你可以去你可以非常逼真的看到自己爬进自己飞船的座舱 ， 然后开着飞船出去 。

对 ，有点像有点像 1v1，但是要比 1v1 更节奏更快的应该是 。

**Rio** [2:03:49]
啊 ， 我打开这个这个这个什么 Razer 的 ， 这不是雷蛇吗 ？

**吴涛** [2:03:56]
What， 它有中文名 ？

**Rio** [2:03:57]
它好像就叫雷蛇吧 ， 我看这个标志好像挺眼熟的 。Anyway。

**吴涛** [2:04:01]
对 ， 它我因为我以前只知道它做键盘鼠标什么的 ， 就 。

**Rio** [2:04:04]
这整个美学不就是一个黑板 ，以前那个你还记不记得那个 MacBook 还是塑料的时候有个黑色的版本 ？

**吴涛** [2:04:10]
对 ， 我有朋友还在用呢 。

**Rio** [2:04:12]
好像 Logitech 也在用那那台吧 ， 我记得 。

**吴涛** [2:04:14]
嗯哼 。

**Rio** [2:04:15]
这这不是长得一模一样吗 ？ 除了键盘会发光之外 。

**吴涛** [2:04:20]
对 。

**Rio** [2:04:22]
对啊 ， 所以最终还是还是要朝苹果的美学靠拢才好看是吧 ？

**吴涛** [2:04:27]
微创新 ， 微创新 。

**Rio** [2:04:30]
不 ， 你要玩 PC 游戏你干嘛买个笔记本 ， 你买个台式机好了 。

**吴涛** [2:04:34]
嗯 。

**Rio** [2:04:36]
电源游戏还好一些 ， 价格又便宜 。

**吴涛** [2:04:38]
Good point，但是台式机看起来太难看了 。

**Rio** [2:04:41]
你你你这个也不是一个长期用的需求吧 ， 我觉得 。 关键是笔记本的性能和散热都不太适合玩游戏啊 ， 你你这个怎么弄呢 ？

**吴涛** [2:04:54]
你为什么总是要改变我的人生观 ？

**Rio** [2:04:56]
我我我就觉得很很 rational， 很理性的跟你讲道理 ， 为师教育你一下 。

**吴涛** [2:05:02]
好 ， 我 。

**Rio** [2:05:04]
因为我我最近一直想搞个那个搞个那个 。

**吴涛** [2:05:07]
虚心接受 。

**Rio** [2:05:08]
因为用虚拟机还是不是很爽嘛 ，因为有些事情麻烦 ， 我想搞个那种小的 ， 你知道英特尔有个所谓叫做 NUC 的东西吗 ？

**吴涛** [2:05:16]
不知道 。

**Rio** [2:05:17]
NUC 就是一个很小 ， 大概可能有一个多大呢 ， 一个光比一个光区比一个外置光区再小一圈 ，但是厚一些的一种盒子 。

**吴涛** [2:05:27]
啊 ，OK， 那英特尔出那个 mini PC 叫 NUC 啊 。

**Rio** [2:05:31]
对 ， 它那它那个整个它它那个那个 form factor 叫做 NUC， 叫做 。

**吴涛** [2:05:36]
我看到这个产品就知道它是什么 。C 是 Computing， 它有这么一个 。

**Rio** [2:05:40]
我不知道 NU 代表什么 ， 我现在忘了 。 对 ，但是就是 。

**吴涛** [2:05:43]
Net unit。

**Rio** [2:05:43]
就挺挺讨喜的一个东西 ， 就是它可以它它上那个那个 NUC 它是可以 ， 它不是有有四个螺丝吗 ？ 它是可以那个绑在显示器背后那个那个 VESA mount 那个四个洞上面的 。

**吴涛** [2:05:55]
嗯哼 。

**Rio** [2:05:55]
就是可以就是如果你是用 PC 的话 ， 你是可以整个放在那个后面 ， 就完全可以看不见 。 就是它就是怎么讲 ， 可以比较低成本的实现以一体机吧 ， 大概是这个意思 。

**吴涛** [2:06:06]
对 。

**Rio** [2:06:06]
然后也不用看到太多的线 。

**吴涛** [2:06:08]
对 ，其实我之前看的时候挺挺心动的嘛 ，因为它 。

**Rio** [2:06:13]
小啊 。

**吴涛** [2:06:13]
搭配它 。 对 ， 搭配一个 ，而且而且台式机的 Core i5 其实相当于笔记本的 Core i7 的 performance。

**Rio** [2:06:22]
对对对 。

**吴涛** [2:06:23]
嗯 。

**Rio** [2:06:24]
我就我就一直想搞一个 ，但是我发现它那个型号还挺乱的 ， 它出了好多好多款 。

**吴涛** [2:06:30]
对 ，但是再一想买回来好像也没有太多用途 。

**Rio** [2:06:34]
嗯 ， 我又又不能玩游戏 ， 对不对 ？

**吴涛** [2:06:36]
就对 ， 就主要是它它缺缺一块显卡 。

**Rio** [2:06:40]
哎 ， 这这是一个问题 。 哎 ， 现在不是有很多这个可以带什么 ，有那个叫什么 Thunderbolt 之后有那个外置显卡了吗 ？

这种这种黑科技你见过吗 ？

**吴涛** [2:06:50]
见过 。

**Rio** [2:06:51]
不是 ， 我觉得那个太恐怖了 。

**吴涛** [2:06:53]
对 ，Alienware 还专门出了一个叫叫什么

Video Amplifier。

**Rio** [2:07:02]
对对对 ， 差不多就这个意思吧 。 那我看了下价钱 ， 我说那我干嘛不直接买一台 PC 算了 。

**吴涛** [2:07:06]
干嘛不直接买一台电脑 ？

**Rio** [2:07:08]
对啊 ， 这简直是神经病 ， 给自己找抽了这不是 。 反正你你你用那个方法也是对的 ，不过我刚刚觉得这种 NUC 的方式挺讨喜的 ， 就是这样大家在国内好像比较少 ，不知道为什么就国外挺多的 ， 就是 Best Buy 上面都还挺挺方便 。

我不知道德国怎么样 。

**吴涛** [2:07:26]
需求还没有出现 ， 就是德国也挺多的 。

**Rio** [2:07:29]
嗯 ， 就现在那个你家家家家很多家里人都你不需要买个那种传统台式机 ， 很大一坨又占地方又很多灰嘛 ， 买个那个东西贴在那个那个用螺丝拧在显示器背后面多好 ， 简单便宜 ， 关键是 。

**吴涛** [2:07:46]
嗯 。

**Rio** [2:07:47]
下次可以再再再有找机会买一个吧 。

**吴涛** [2:07:53]
你用用吧 ， 然后 。

**Rio** [2:07:55]
再给你报汇报一下 。

**吴涛** [2:07:56]
再来改变我的人生观 。

**Rio** [2:07:57]
好 ， 你这边 PS4 玩多久了 ？ 下次再跟我汇报一下吧 ， 感觉如何 ？

**吴涛** [2:08:03]
嗯 ， 好 ， 没问题 。其实现在我已经觉得它比 Xbox One 要好多了 。

**Rio** [2:08:08]
啊 ， 你你都你是有对比完了哈 ， 这样那有什么具体的感受吗 ？

**吴涛** [2:08:13]
嗯 ， 比如说 Xbox One 有一个有一个变压器巨大无比 。

**Rio** [2:08:18]
啊 ， 对对 ， 这这这个要吐槽一下， 这个是很多事情很多时候不能忍的一件事情 ， 就是 。

**吴涛** [2:08:24]
而且而且最扯的是它自己会发声音 ， 就是我不知道里面是有风扇还是它的它的线圈 ， 它的线圈是震动还是怎么样 ， 就 。

**Rio** [2:08:33]
应该是线圈的问题吧 ， 很多变压器都有 。

**吴涛** [2:08:36]
应该是线圈的问题 。 而且它上来我只是能就这个玩意儿本身已经可以作为一台机器来卖了 。

**Rio** [2:08:42]
这个 。

**吴涛** [2:08:43]
但 PS4 就没有这个问题 ， 就插一根线就好了 。

**Rio** [2:08:45]
就很多人都是这样子啊 ， 之前现在可能最近一些设备现在功率越来越低了 ， 可能还好了 。 以前你记不记得很多笔记本电脑啊 ， 都是什么超轻超薄配一个 5 斤重的这个电源适配器搞死你了 。

**吴涛** [2:08:59]
对 。

**Rio** [2:09:00]
以前我有一个那个叫什么 ThinkPad 13 寸的那个 X 系列 ， 很早了 ，X31 吧 ， 应该是我没记错的话 。

**吴涛** [2:09:08]
对 。

**Rio** [2:09:09]
然后那个 13 寸的本应该当时还是蛮小的 ， 就是商务型的挺小的 ，但是那那个适配器可可估计有一斤重 。

**吴涛** [2:09:19]
哈哈哈 。

**Rio** [2:09:19]
就觉得这个整个拿着就很沮丧 。 不过现在好像包括我现在用这个这个 Retina， 你也用那个 Retina 15 寸的 Retina 嘛 ， 它那个变压器也很大的 ，85 瓦的 。

**吴涛** [2:09:29]
对 ， 要比 13 寸的大一圈 。

**Rio** [2:09:32]
对 ，而大一圈不说还重嘛 。 然后那个什么 Air 的就要好很多 ，Air 它那个好像只有 35 瓦吧 ， 我记得没记错的话 ， 就就挺挺轻巧 。

**吴涛** [2:09:42]
那玩意儿是没有办法给 ， 就是如果你在打开电脑的时候是没有办法给 MBP 充电的吧 。

**Rio** [2:09:50]
你说用 35 瓦那个吗 ？

**吴涛** [2:09:52]
啊 ， 对啊 。

**Rio** [2:09:52]
如果你一直跑那个什么就 CPU 一直在转 ， 或者显卡一直在转 ， 肯定是入不敷出的 。

**吴涛** [2:09:58]
应该是不行的 。

**Rio** [2:09:59]
对 ，但是如果你是静态就是没怎么用 ， 或者看网页应该我觉得应该还凑合 。

**吴涛** [2:10:04]
OK。

**Rio** [2:10:05]
就是可能会很慢 ，但是 。

**吴涛** [2:10:07]
然后 PS4 还有一点比较好的就是它可以竖着放 。

**Rio** [2:10:10]
啊 ， 它是一个两用设计的嘛 。 哎 ，不过对你来说已经无所谓了吧 ， 你那么多就堆在一起好了 ， 一一层一层叠上去 。

**吴涛** [2:10:19]
一层层叠上去的话 。

**Rio** [2:10:20]
散热会有问题吗 ？

**吴涛** [2:10:21]
我是觉得需要一个架子了 。

**Rio** [2:10:24]
不不 ， 你就你就堆叠嘛 ， 你就堆叠它嘛 。

**吴涛** [2:10:29]
我是觉得堆叠会有散热 ，而且会而且有积灰的问题 ， 就是 。

**Rio** [2:10:33]
嗯 ？

**吴涛** [2:10:34]
因为 。

**Rio** [2:10:34]
堆叠怎么会 ？

**吴涛** [2:10:35]
电气 ， 就是电气跑的时候静电会吸附灰尘嘛 ， 然后灰尘会积攒在设备的缝隙里面 。

**Rio** [2:10:44]
德国这个我觉得那边灰还是蛮重的 ，不知道为什么 。

**吴涛** [2:10:48]
呃 。

**Rio** [2:10:48]
烧煤吗 ？

**吴涛** [2:10:49]
你在当时你在曼海姆 ， 曼海姆算是灰比较重的地方了 ， 没错 。

**Rio** [2:10:53]
OK。

**吴涛** [2:10:54]
嗯 。

**Rio** [2:10:56]
因为我经常那个桌面我可能三天就比国内好点 ，但是也不是好多少 ， 就是三天不擦一下就觉得哇 ， 摸一下就一层灰 。

**吴涛** [2:11:04]
然后 PS4 刷脸的也要比 Xbox One 方便 ， 或者是或者是不是直观一点 。

**Rio** [2:11:11]
刷脸 。 不是 ， 你不觉得刷脸这件事情很很久吗 ？ 你拿张照片去忽悠它不行吗 ？

**吴涛** [2:11:18]
我为什么要拿照片去忽悠它 ？

**Rio** [2:11:20]
不 ， 我就说就纯粹从一个安全的角度考虑的话 。

**吴涛** [2:11:26]
纯粹从安全角度考虑的话 ， 根本不应该建立任何 PS 账号了 。

**Rio** [2:11:31]
不 ，但是你你你试过吗 ？ 你拿张照片去忽悠它 ， 它能认出来吗 ？

**吴涛** [2:11:35]
嗯 ， 没有 ， 我可以试一试 。

**Rio** [2:11:38]
你你可以试 ， 我一直很好奇这一点 ， 就之前国内不是 。

**吴涛** [2:11:42]
有可能是不行的 ，因为 PS4 的是双也是双两也是两个眼睛 ， 就是它会 。

**Rio** [2:11:47]
有立体的 。

**吴涛** [2:11:48]
它会 ，而且它在记录你的面部信息的时候也会记录你抬头和转头的样子 。

**Rio** [2:11:53]
OK。

**吴涛** [2:11:54]
所以有可能它会通过鼻子的高度来判断 。

**Rio** [2:11:59]
你说这个人不立体 。

**吴涛** [2:12:00]
照片就不行了 。

**Rio** [2:12:00]
这个人不立体 ， 对吧 ？

**吴涛** [2:12:02]
你这你长得不够立体 。

**Rio** [2:12:04]
就不行 。

**吴涛** [2:12:04]
不认你 。

**Rio** [2:12:04]
亚洲人不能用这个 。

**吴涛** [2:12:07]
种族歧视 。

**Rio** [2:12:08]
哈哈哈 。

**吴涛** [2:12:10]
PS 还是日本人做的吧 ？ 要相信我们亚洲人。

**Rio** [2:12:13]
日本人不算亚洲人啊 。

**吴涛** [2:12:14]
嗯 。

**Rio** [2:12:15]
什么这国家开玩笑呢 ？

**吴涛** [2:12:17]
啊 ， 意大利 ， 意大利是托欧入亚 ， 日本是托亚入欧 。

**Rio** [2:12:23]
这这黑的漂亮 。

**吴涛** [2:12:25]
哈哈哈

。

**Rio** [2:12:28]
好吧 ， 差不多今天扯淡就扯到这了 ， 我估计我的流量也快差不多了 。

### 尾声

**吴涛** [2:12:33]
对 ， 今天我们的 Rio 是为了节目效果 。

**Rio** [2:12:37]
LTE 给你们通话录的 。

**吴涛** [2:12:38]
用 LTE 和我还有柳成荫通话 ， 然后 。

**Rio** [2:12:43]
费了血本啊 ， 简直 。

**吴涛** [2:12:45]
对 ，而且这笔钱哦 ， 你们有会员计划可以报销一部分 。

**Rio** [2:12:49]
等一下， 会员计划会员计划 ， 这个是这个两回事 。 不行 ， 这个这个得红包讨回来 。

**吴涛** [2:12:54]
好吧 。

**Rio** [2:12:55]
看我们能不能弄个红包账号 。

**吴涛** [2:12:57]
对 。OK， 我觉得其实可以考虑一下要不要开捐赠啊 ， 我觉得 。

**Rio** [2:13:05]
我我技术技术方面都很成熟啊 ， 就是等等您一声令下 。

**吴涛** [2:13:10]
行 ， 我回头去找支笔来挥一挥 ， 然后 。

**Rio** [2:13:13]
同意 。

然后就拿着这个纸乐呵乐呵的 ， 哎 ， 同意了 ， 领导批示 ， 赶快去开着 ， 对不对 ？

**吴涛** [2:13:27]
OK。

**Rio** [2:13:27]
好吧 。

**吴涛** [2:13:27]
嗯 。

**Rio** [2:13:28]
我就不耽搁你了 ， 你那边也快半夜了吧 ？

**吴涛** [2:13:31]
呃 ， 现在是 23:37。

**Rio** [2:13:34]
可以 。

**吴涛** [2:13:34]
不对 ， 现在是北美山地时间 2001 年 1 月 2 日下午 3:04:05。 哎 ， 我想到一个梗 ， 就是我上大学的时候说过一个排位话剧 ， 然后里面说今天是猴年马月驴日星期猪 。

哈哈哈哈

。 对 ， 现在是北美山地时间猴年马月驴日星期猪 ， 下午 3:04:05。 呃 ， 您刚刚收听完 ITN Pocket Casts 网络旗下的 IT 技术主题节目 《 内核恐慌 》。

嗯 ， 内核恐慌的网址是 ipn.li/kernelpanic。 我之所以要说这个网址 ，是因为我们的制作人给下了最高指示 ， 说每个节目开头结尾都最好说一个 。

**Rio** [2:14:19]
要做一下硬广 。

**吴涛** [2:14:20]
对 ，不然不主要考量是会有听众 。

**Rio** [2:14:25]
我们这个节目还好 。

**吴涛** [2:14:26]
但我们节目可能对我们节目应该不会有小白 ， 就是听听了之后居然不知道这个节目是有一个网址 。

**Rio** [2:14:33]
哎 ，不要你还别说那个什么 ， 我听 Lawrence 说他妈妈都是都听我们节目的 。

**吴涛** [2:14:40]
播不好 。

**Rio** [2:14:41]
你要你要小心一点 。

**吴涛** [2:14:43]
好 。 我们推荐大家使用 Pocket Casts 客户端订阅节目 。 如果您不知道什么是客户端 ， 嗯 ， 或者不知道该用什么是客户 ，不知道该用什么客户端 ， 欢迎访问 ipn.li/faq。ITN 旗下的其他 5 档 Podcast， 包括 SoftCore 技术主题节目 《IT 公论 》， 呃 ， 医疗主题节目 《 太医来了 》， 美食节目 《 未知道 》，以及不只谈艺术的艺术类节目 《 流行通信 》。

呃 ， 最后还有不知道是在播什么的无主题节目 《 无次元 》。

**Rio** [2:15:15]
刚才刚才那段你是念稿的吧 ？

**吴涛** [2:15:17]
那当然了 ， 这东西怎么可能背下来 ， 我又背串词了 。

**Rio** [2:15:20]
应该铭记于心啊 。

**吴涛** [2:15:23]
我内存太小了 。

**Rio** [2:15:25]
好吧 。 行 ， 那就这样吧 ， 晚安了 。

**吴涛** [2:15:28]
OK。OK。

**Rio** [2:15:30]
OK， 拜拜 。

**吴涛** [2:15:31]
拜拜 。

---

本节目库由 PodHood（https://podhood.com）提供支持——播客网站平台。
