# 每周分享第 4 期

这里记录过去一周，我看到的值得分享的东西，每周五发布。

![](http://www.ruanyifeng.com/blogimg/asset/2018/bg2018051101.jpg)

今年5月5日是马克思诞生200周年的纪念日，中新社的记者来到伦敦的[马克思墓地](http://dajia.qq.com/original/MFL/ym20180509.html)，写了一篇[《墓地见闻》](http://dw.chinanews.com/chinanews/content.jsp?classify=zwsp&from=timeline&id=8507133&language=chs&pageSize=6)。

> 马克思墓地位于伦敦北部的海格特公墓内。该公墓是伦敦最大公墓之一，安葬着16万名已故人士，其中不乏英国历史上有名的人物；公墓内5万多座墓碑，马克思墓碑最为高大和醒目。
> 
> 马克思墓碑高近3米，被各种花束和花篮簇拥着。墓碑顶端矗立着的马克思青铜头像，须发浓密，目光深邃，远眺前方。碑座上铭刻着几行镏金英文，为《共产党宣言》中的："全世界无产者联合起来"。马克思、马克思夫人及亲人共6位安葬于墓室内。

照片上可以看到，墓碑刻着一行字" Workers of all lands unite"（全世界无产者联合起来）。

![](http://img1.gtimg.com/cul/pics/hv1/148/24/2275/147938143.jpg)

马克思研究的是，无产者怎样才能在一个有产者主导的社会里面获得解放。可是我们看到，200年过去了，这个世界依然存在无产者和有产者的对立。互联网技术甚至加剧了这种趋势，有钱的人变得更有钱了，没钱的人更难获得翻身的机会。

让我坚持下来的一个动力，就是我想看看，技术到底会带给这个社会怎样的变革？如果技术没有办法解决社会阶层的分化（甚至带来固化），那么我可以做些什么？

## 新闻

1、[世界上最长寿的人去世，享年117岁](http://www.abc.net.au/news/2018-04-22/worlds-oldest-person-dies-aged-117/9685084)

4月21日晚上，目前世界上最长寿的人，日本九州鹿儿岛县的 [田岛锅](https://zh.wikipedia.org/wiki/%E7%94%B0%E5%B3%B6%E9%8D%8B)（Nabi Tajima）女士去世，享年117岁又260天。她出生于1900年8月4日。

她去世后，现在还活着的最长寿的人是日本的[都千代](https://zh.wikipedia.org/wiki/%E9%83%BD%E5%8D%83%E4%BB%A3)，她生于1901年5月2日。

历史上，能够证实的最长寿的人是法国的珍妮·露意丝·卡尔芒（Jeanne Louise Calment，1875年2月21日－1997年8月4日）活了122岁又164天。

2、[LED 电影院](https://www.hollywoodreporter.com/behind-screen/how-new-led-cinema-screen-could-change-filmmaking-moviegoing-1104745)

![](http://www.ruanyifeng.com/blogimg/asset/2018/bg2018051102.jpg)

4月20日，美国第一家 LED 电影院在洛杉矶开幕，电影屏幕变成了液晶屏，而不是电影放映机的投影幕布。此前的2月4日，[上海](http://www.sohu.com/a/220912922_115565)的 LED 电影院已经开张了。

三星生产的 LED 屏幕宽10.3米，高5.49米，可以播放4K视频。这块屏幕的售价最便宜也要300多万人民币，比目前最高级的激光投影机，还贵上三四倍，更不要提普通的电影放映机了。它的优点：（1）可以自动化控制，以后可能会出现无人值守的电影院；（2）放电影的时候，可以开灯；（3）LED 屏幕的使用寿命可能比投影机更长久。

3、[盲人程序员](https://blog.aboutamazon.com/working-at-amazon/blind-since-birth-writing-code-at-amazon-since-2013)

![](http://www.ruanyifeng.com/blogimg/asset/2018/bg2018051103.jpg)

亚马逊公司的官方博客，介绍了一位盲人程序员，出门靠导盲犬，阅读代码就靠屏幕阅读器。第一次觉得，代码适合朗读，也很重要啊......

如果换成中国，即使他的编程技能没问题，恐怕也很难在互联网公司就业。因为他的编程速度肯定不如正常人，别人一天可以写完，他要写两天或更多，项目经理就一定会赶走他。

4、[QT 支持浏览器了](http://blog.qt.io/blog/2018/04/23/beta-qt-webassembly-technology-preview/)

![](http://www.ruanyifeng.com/blogimg/asset/2018/bg2018051104.jpg)

图形界面框架 Qt 宣布可以在浏览器中使用，方法是通过 WebAssembly。那就是说，C++ 可以编写网页 UI 组件了，不必一定要通过 JS 了。

以后出现前端 C++ 工程师真不是不可能了...... 

5、[JavaScript 的新数据类型：大整数 BigInt](https://v8project.blogspot.com/2018/05/bigint.html)

经过很长一段时间的测试以后，V8 引擎正式宣布支持 JS 的第8种数据类型：[大整数 BigInt](http://es6.ruanyifeng.com/#docs/proposals#BigInt-%E6%95%B0%E6%8D%AE%E7%B1%BB%E5%9E%8B)。从此，JS 可以精确表示任意位数的整数，再也不受64位双精度浮点数格式的限制了。

![](http://www.ruanyifeng.com/blogimg/asset/2018/bg2018051106.jpg)


6、[1000架无人机编队表演失灵](http://tech.sina.com.cn/it/2018-05-06/doc-ihacuuvu0776524.shtml)（[视频](http://video.sina.com.cn/view/257117825.html)）

![](http://www.ruanyifeng.com/blogimg/asset/2018/bg2018051107.jpg)

5月1日晚《红五月西安城墙国际文化节》无人机表演出现事故。1374架无人机并没有成功组成完整图案。演出一开始就有一部分无人机没有飞到预定位置，导致局部不成图案。

亿航无人机官方微博称，表演结束后，公司立即召集行业专家对496架受影响的无人机进行数据分析，后台数据表明：5月1日演出当晚，无人机设备、通讯系统和飞行系统正常，但部分无人机的定位及辅助定位系统在起飞后受到定向干扰，造成其位置和高度的数据异常。

另有[报道](http://www.bjnews.com.cn/invest/2018/05/03/485624.html)称，这样一场表演的收费是 1050 万元人民币。

7、[吴恩达的 Drive.ai 无人出租车正式运营](http://www.sohu.com/a/230791086_610300)

![](http://www.ruanyifeng.com/blogimg/asset/2018/bg2018051109.jpg)

吴恩达任职董事的自动驾驶公司 Drive.ai，要在德克萨斯州弗里斯克（Frisco）市，提供无人驾驶出租车服务了。从今年7月开始，Drive.ai将会和当地交管协会合作部署，为期6个月，为特定区域内的1万多人提供无人驾驶（免费）打车服务，只要通过Drive.ai的App，就能约到一辆无人驾驶出租车。

此次Drive.ai投入试运营的车，不仅车变了----从林肯MKZ变成了日产NV200，传感器方案也有所更新：搭载4个激光雷达、10个摄像头，以及2个毫米波雷达。

无人驾驶投入实用的那一天越来越近了。

8、[谷歌的人工智能客服 Google Duplex](https://ai.googleblog.com/2018/05/duplex-ai-system-for-natural-conversation.html?m=1)

谷歌宣布了人工智能客服系统 Google Duplex。以后，你打电话订餐、投诉、咨询，跟你交谈的都不是真人，而是一个软件。客服这个行业从此要被消灭了。

另一方面，如果你意识不到对方是软件，就意味着它通过了图灵测试。这是不是意味着，以后软件冒充人已经没问题了？

## 教程

1、[文章] [Node.js 最佳托管商](https://railsware.com/blog/2018/04/19/best-hosting-for-node-js-app/)

现在，各大云服务商都支持 Node.js 主机，本文对比了最大的 6 家服务商各自的优缺点。

2、[文章] [软件测试的误区](http://blog.codepipes.com/testing/software-testing-antipatterns.html#anti-pattern-7---having-flaky-or-slow-tests)

![](http://www.ruanyifeng.com/blogimg/asset/2018/bg2018051110.png)

本文讨论了13种软件测试的错误做法，比如：（1）单元测试与集成测试的比例不正确；（2）太相信 TDD（即写代码之前就写测试）；（3）写了大量很慢的测试；（4）手动运行测试；（5）没有把生产环境的错误写成测试等等。

3、[电子书] [《React in patterns》](https://github.com/krasimir/react-in-patterns)

![](http://www.ruanyifeng.com/blogimg/asset/2018/bg2018051111.jpg)

React 如何使用各种编程模式？

4、[文章] Rust 的内存安全革命（[中译](http://szpzs.oschina.io/2018/04/28/rust-memory-safety-revolution/#more)、[原文](https://anixe.pl/content/news/rust_memory_safety_revolution)）

Rust 语言不需要手动管理内容，却也没有垃圾回收机制，这是怎么实现的？

> 本文集中介绍 Rust 最重要的核心特性：内存管理。这是 Rust 的主要创新之一，它的许多独特的特点是基于此的。本文写给不知道 Rust 或刚刚开始学习它的程序员的。对于熟悉 C、C++ 或其他使用手动管理内存以及使用垃圾回收器语言的读者来说会更容易理解 Rust 的特点。 


5、[文章] [SHA256 的实现](https://webassemblycode.com/sha256-books-implementation/)

SHA256 是目前常用哈希算法里面最可靠的，Git 和比特币都依赖这种算法。本文解释了它的实现。

6、[文章] [Python 列表的用法](https://dev.to/georgeoffley/data-structures-in-python-lists-and-the-avengers-305f)

列表（list）是最基本的数据结构，这篇文章通过实例讲解 Python 如何操作列表。很容易读，就是内容比较浅，只适合刚刚开始学 Python 的初学者。

7、[代码仓库] [Cosmos](https://github.com/OpenGenus/cosmos)

收集各种算法的代码实现的仓库。

## 工具

1、[GitHub Desktop](https://desktop.github.com/)

![](http://www.ruanyifeng.com/blogimg/asset/2018/bg2018051112.jpg)

GitHub 官方的桌面 App。

2、[ReLaXed](https://github.com/RelaxedJS/ReLaXed)

一个将 HTML 文件转为 PDF 文件的命令行工具。

3、[goproxy](https://github.com/snail007/goproxy)

Go 语言实现的高性能 http、https、websocket、tcp、udp、socks5 代理服务器。

4、[Dojo 2.0](https://dojo.io/blog/2018/05/02/2018-05-02-Dojo2-0-0-release/)

![](http://www.ruanyifeng.com/blogimg/asset/2018/bg2018051113.jpg)

前端框架 Dojo 发布了2.0版，它跟 jQuery 是一个年代的，至今不放弃也算值得尊敬了。我看了一下 API，核心概念也是虚拟 DOM，没看到任何令人眼前一亮的创意，我不觉得它有机会赢得大量用户。

5、[css-protips](https://github.com/AllThingsSmitty/css-protips/tree/master/translations/zh-CN)

一个收集 CSS 使用技巧的库。

6、[github-contributions-chart](https://github.com/sallar/github-contributions-chart)（[Demo](https://github-contributions.now.sh/)）

GitHub 的用户主页有一张图，每一天就是一个小格子。你只要在这一天提交了代码，这个格子就是绿色。但是，这张图只显示过去的一年，即365个格子。

这个工具可以生成从你加入 GitHub 那天起的所有格子。

7、[bat](https://github.com/sharkdp/bat)

![](http://www.ruanyifeng.com/blogimg/asset/2018/bg2018051114.jpg)

命令行的 cat 命令用来显示文件的内容，bat 命令完全跟 cat 一致，只有一个地方不一样，就是现在的内容会带有行号和代码高亮。

## 文摘

1、[《为什么程序员不喜欢开会？》](http://paulgraham.com/makersschedule.html)，by Paul Graham

> 世界上有两种日程表。
> 
> 一种是管理者的日程表。他们是面向老板的，日程表都是以小时为单位，所以开会对他们来说，只是在日程表上找出一个小时。
> 
> 另一种是工匠的日程表，也就是程序员的日程表。他们需要做出实际的东西，日程表都是至少以半天为单位。所以，他们不喜欢开会，因为一小时的会议，会将半天分成两半，每个部分都时间太短，导致无法做成任何事情。

2、[大多数分布式系统工程师不相信区块链](https://threadreaderapp.com/thread/987266940887535616.html)

作者说，他问了许多分布式系统工程师。他们普遍觉得，区块链不具有媒体所称的那种重大意义，适用场景非常有限：（1）成员之间缺乏信任；（2）所有记录都要汇总到一个全局日志。

> 目前，区块链通过共识机制，达到记录的不可抵赖性，这种做法的代价很大。一旦有一个值得信赖的中立方，那个受信任的中立方就可以通过强制认证/授权以及内容签名来建立不可抵赖性，并且只允许对日志追加内容。这意味着，中立方维护的任何常规旧数据库，都可以达到区块链的作用，而且还不存在区块链共识机制的缺陷。
> 
> 加密记录链是加强总账不变性的一个好主意，但是签名链可以在任何现有的数据库上完成。

3、[SQL 命名约定](https://launchbylunch.com/posts/2014/Feb/16/sql-naming-conventions/)

数据库的表和字段怎么起名？这也是一门学问。下面是数据库的一些命名原则。

> * __小写__。标识符应该全部用小写字母来书写，使用`first_name`，不是`"First_Name"或者"FirstName"`。
> * __数据类型不是名称__。避免使用仅为数据类型的名字（如`text`或`timestamp`）。
> * __强调单独的单词__。由多个单词组成的对象名称应该用下划线分隔，例如使用`word_count`或`team_member_id`，而不是`wordcount`或`wordCount`。
> * __完整的单词，而不是缩写__。例如使用`middle_name`，不是`mid_nm`。
> * __使用常用缩写__。对于几个长词而言，缩写词比词本身更为常见，比如`i18n`和`l10n`，这时使用缩写。

4、[Lars Bak 的故事](http://www.kuqin.com/itman/20090421/47185.html)

![](http://www.ruanyifeng.com/blogimg/asset/2018/bg2018051115.jpg)

V8 引擎是 JS 语法事实上的标准实现，Chrome 浏览器和 Node 的底层都用了它。它名字里面的 V 代表虚拟机（virtual machine），8 表示这是作者 Lars Bak 写的第8个虚拟机。

Lars Bak 是一个传奇的丹麦程序员，在 V8 之前，他还写过 Java虚拟机、Smalltalk虚拟机、Dart虚拟机。下面是2009年，英国《金融时报》的报道。

> 奥尔胡斯（Aarhus）是丹麦第二大城市，在该市郊外5英里的地方，有一座改造过的农舍。房子的主人叫 Lars Bak，是一个年轻的编程天才，他之所以把家安在这里是因为他非常不愿意让别人找到自己。他最近的作品 V8 是 Chrome 浏览器的一部分。
> 
> 1991年，他在 Sun 公司工作，后来成为业界最佳程序员之一，开发了 Java HotSpot。2000年初，他离开了硅谷，回到了丹麦。搬家是为了他的女儿们（他想让她们上丹麦语学校），也为了自己的身心健康。美国的工作很紧张，生活方式不健康。
> 
> 他并不特别想找新项目：他有足够的钱养家糊口，也有各种打发时间的方式，包括粉刷农舍的计划。他估计得要一年时间。这时，Google 的电话就来了。对于 Google，他是编写 JavaScript 引擎的最佳人选。巴克接受了这份工作，但不会回到加州。事实上他从没打算再次回加州，虽然谷歌的人性化办公室闻名远近，餐厅里的美食，还可以免费理发，巴克却宁可在家工作离总部5000英里，相差9个时区。

5、[雷军：如不是富贵人家 你的唯一机会是忠诚和勤奋](https://finance.sina.cn/stock/ssgs/2018-05-06/detail-ifyqptqv8528581.d.html)

![](http://www.ruanyifeng.com/blogimg/asset/2018/bg2018051116.jpg)

> 1991年11月4日，在一个计算机展览会上，雷军见到了WPS之父求伯君，雷军作为一名程序员，求伯君是他的偶像。次年，求伯君邀请雷军加入金山，他二话没说，毅然砸掉了当时的铁饭碗，追随求伯君离开北京去了珠海，成为金山第六名员工。这一追随就是16年，这16年里无论金山遭遇了什么困境雷军都不离不弃。
> 
> 雷军先后在金山担任金山公司北京开发部经理、珠海公司副总经理、北京金山软件公司总经理等职务。
> 
> 1998年，29岁的雷军出任金山公司总经理，那一年中国"BAT"的创始人们还都是屌丝一枚。马化腾刚从学校毕业进入到一家电讯公司，李彦宏还在美国念书，马云在一年后才成立阿里巴巴。
> 
> 雷军在金山总经理这个位置上一干就是十年，这十年里，雷军眼见着马化腾、马云、李彦宏的事业高歌猛进，公司不但上市，三人还轮流做首富。

## 本周图片

1、[Douglas Crockford 的名片](http://seriot.ch/parsing_json.php#1)

![](http://www.ruanyifeng.com/blogimg/asset/2018/bg2018051117.jpg)

2001年，Douglas Crockford 发明了 JSON 格式。他声称这种格式极其简单，全部语法可以印在一张名片上，而且所有应该有的语法都有了，以后也不需要再增订，因此 JSON 格式没有版本号。上面就是他的名片的背面图案。

但是，我们现在知道，JSON 格式的解析器[很难写](http://seriot.ch/parsing_json.php)，因为它没有规定如何处理各种边界情况。

2、[1961年的科幻小说](https://imgur.com/e1x76Nz)

![](http://www.ruanyifeng.com/blogimg/asset/2018/bg2018051118.jpg)

使用 Kindle 阅读波兰科幻小说家斯坦尼斯拉夫•莱姆（Stanislaw Lem）1961年的作品《外星归来》（Return From The Stars）。

> "那些书籍就像水晶体，里面保存着内容。这些书可以使用一个叫做 Opton 的装置阅读，那个装置很像书，但是封面里只有一页。只要轻轻触摸，后面的页就会出现在上面。"

__3、游戏卡__

![](http://www.ruanyifeng.com/blogimg/asset/2018/bg2018051121.jpg)

当年 Gameboy 游戏卡（容量几十MB）的盒子，现在可以放15块Switch游戏卡（容量几十GB）。（图片来自推特[@BalrogGameRoom](https://twitter.com/BalrogGameRoom/)）

## 新奇

1、[摄像头挂钟](https://defplex.wordpress.com/2018/04/24/playing-with-a-covert-clock-camera/)

![](http://www.ruanyifeng.com/blogimg/asset/2018/bg2018051119.jpg)

这是一款深圳出产的挂钟。表面上平淡无奇，但是实际上里面藏了一个摄像头，可以监控屋里的情况。

这样的摄像头是很难发现的。可以想象，以后无论何时何地，我们的一举一动一定都处在监控之下。

2、[魔法少女](https://magical-girl.site/)

![](http://www.ruanyifeng.com/blogimg/asset/2018/bg2018051120.jpg)

日本漫画风格的网站，很炫的开场动画。

## 本周金句

1、

十八年前刚刚接触网络，常常有世界触手可及的奇妙感觉。如今技术越来越先进，那种感觉却越来越少。（网友）

2、

现在的开发者需要具备的，不仅仅是技能树，而是技能森林。（推特@qing\_wang）

3、

硬件、软件、计算机工程师的半衰期都只有几年。（Craig Barrett，Intel 公司创始人之一）

## 欢迎订阅

这个专栏每周五发布，同步更新在我的[个人网站](http://www.ruanyifeng.com/blog)、[微信公众号](http://weixin.sogou.com/weixin?query=%E9%98%AE%E4%B8%80%E5%B3%B0%E7%9A%84%E7%BD%91%E7%BB%9C%E6%97%A5%E5%BF%97)和[语雀](https://yuque.com/ruanyf/share/)。

微信搜索"__阮一峰的网络日志__"或者扫描二维码，即可订阅。

![](http://www.ruanyifeng.com/blogimg/asset/2018/bg2018042311.jpg)

（完）

