跟随,学习,进步

阮一峰

阮一峰的个人网站

http://www.ruanyifeng.com
转到作者网站

每周分享第 57 期

这里记录过去一周,我看到的值得分享的东西,每周五发布。 欢迎投稿,或推荐你自己的项目,请前往 GitHub 的 ruanyf/weekly 提交 issue。 (题图:陆家嘴,上海,2018) 前些日子,一个运营的女同学问我:"为什么程序员喜欢分享?" 我说,整个程序员社区都是这样啊,把自己知道的东西告诉别人,也从别人那里学习新知识。她回答,我就不喜欢分享,我的运营计划一说出去,所有人都知道了,好不容易想出来的东西,马上就被别人拷贝了,我什么好处也拿不到。别的运营也是这样,都不愿意分享自己的成果。 我想了想,发现真的是这样:除了程序员以外,好像没有别的行业,流行分享自己的知识。相反的,这个世界上大部分行业,强调的都是保密,千万不能让别人知道我的独家信息和知识。 由此看来,程序员世界的开源和分享,其实是例外。正常情况下,这些东西都应该是标价出售的,花了钱才能拿到手。 经济学有一个假定,每个人都是自私的,追求自己的利益最大化,从而才能让这个世界变得有效率。那么,当我们鼓励开源和分享的时候,可不可以说我们正在做一件反人性的事情呢? React 免费视频课程 本期周刊很高兴得到了开课吧的支持。他们是国内领先的互联网从业者职业成长平台,为互联网人提供职业成长服务。 React 是目前全世界最流行的前端框架,国内大型互联网公司,几乎全部在使用它。想要进入这些公司,从事前端开发,React 几乎是绕不过去的技术。同时,React 本身是对很多底层技术的抽象。深入理解 React,有助于吃透前端开发,提升个人竞争力。 开课吧结合国内 React 的应用现状,针对初学者的学习痛点,推出了系列教学视频 《React 基础+实战CNode》 ,得到了很多学员的肯定和好评。 这套视频的第一部分,带大家快速掌握 React 的基础,学习各种底层库和组件库,搭建一个 React 项目《QQ 好友列表》。第二部分是实战训练,具体内容请看下图。 第三部分《React 16 虚拟 DOM 原理剖析》,紧跟最新版本的底层改动,讲解了 setState 异步队列、虚拟 DOM 的 Diff 算法、Fiber 架构、React Hooks 等难点内容,并教你如何构建自己的虚拟 DOM 库。 微信扫描下面的二维码,就可以领取视频。由于教学助理精力有限,限额500名。 新闻 1、宇宙射线观测站 4月26日,中国的第一个高海拔宇宙射线观测站,正式在四川稻城启动,当地的海拔是4400米。宇宙射线是来自外太空的高能粒子,携带着宇宙起源、天体演化、太阳活动及地球空间环境等重要科学信息,被称为传递宇宙大事件的"信使"。 自从1912年被发现,宇宙射线的来源至今仍然是一个谜。这个观测站的启用,有助于回答宇宙射线来自哪里,它们又是如何被加速到千倍于人类现有加速器之高的能量,这些一直是困扰科学家的问题。 2、白鲸武器 一个挪威渔民最近出海时,发现一条小白鲸主动游到船边。这条白鲸身上还有绑带,上面写着俄文,意思是"圣彼得堡的设备"。 渔民说,这头鲸鱼的行为非常奇怪,会主动寻找船只,并试图拉动船的两侧的绳索。考虑到它可以携带相机和武器,专家怀疑这是附近摩尔曼斯克的俄罗斯海军专门训练的白鲸。上个世纪80年代,苏联曾经训练海豚发现鱼雷,海豚视野敏锐,有良好的记忆力,使它们成为有效的水下探测武器工具。一份2017年的报告显示,俄罗斯海军重新开始训练用于军事目的的白鲸、海豹和宽吻海豚。 3、Red Hat 的新 Logo Red Hat 公司发布了新 logo(上图),变得更简洁和更具有可识别性,从一个戴着红色帽子的男人(下图),变成一顶红帽子。 Red Hat 这个名字来自创始人之一 Marc Ewing,他总是戴着红色曲棍球帽。每当他的同学们在卡内基梅隆大学的计算机实验室需要帮助时,他们就会说"寻找红帽子的那个人。"Red Hat 公司希望,每当人们发现自己需要帮助时,就会去找他们。 4、停车场办公 创业者往往想要使用共享的办公空间,但是大城市的办公空间很贵。旧金山的一个创业者灵机一动,注册了 WePark 公司。他在旧金山的热门区域,选择若干个停车位,付出一整天的停车费,然后摆上桌椅,按小时卖给创业者。创业者就在停车位办公。 WePark 的优势在于价格,每小时收费 2.25美元。相比之下,WeWork 的办公空间,每天收费50美元加上每月会员费。 5、菠菜叶生成的血管 人工心脏的一大问题,就是无法生成心脏肌肉上面的毛细血管,3D 打印可以生成人体组织,但是毛细血管不行。科学家提出了一种新的设想,菠菜叶子或许可以达到这个目的。 菠菜叶子去除叶肉以后,留下层层的叶脉,可以作为支架,将人体细胞培植在上面。然后,通过叶脉为细胞提供水和养分,促使其生长。长成以后,再取出菠菜叶,就会留下血管框架。上图左侧为去除叶肉的菠菜叶,右侧为红色染料处理过的菠菜叶。 6、大麦哲伦星云的照片 一群法国的天文爱好者使用4,000张图片,拼接成一张大麦哲伦星云的照片。这些照片是2017年7月至2019年2月期间,使用位于智利天文台的160毫米折射望远镜拍摄的。 大麦哲伦星云距离地球大约16万光年,是最靠近银河系的星系之一,大约包含了200亿颗恒星,也是裸眼能看见的最遥远天体之一。北半球大多数区域看不到它,只有南半球才能看到。 7、Minecraft 的 AR 玩法 Minecraft 发布了 AR (增强现实)新玩法,允许在现实世界叠加像素艺术。你只要掏出手机,对准街景,就可以在上面叠加一个 Minecraft 层。其他玩家在同一个地点,就可以看到这个层,与你互动。 由于这是微软的产品,应该会引进国内,看看会不会造成像《口袋妖怪》那样的抓宝风潮。 8、一句话新闻 美国2019年销售的汽车82%带有触摸屏,五年前这一比例为53%。这意味着,大部分汽车带有一个计算机操作系统。特斯拉的系统有86%的满意度,评价最高,其次是宝马80%。 微软将 Linux 内核放进了 Windows 10,这是 Linux 第一次成为 Windows 的一部分。 日本计划将手机号码升级到14位,取代现在的11位号码。原因是 5G 通信普及以后,将有大量号码用于"机器对机器"的通信(比如 5G 电视),11号号码不够用了。 美国国防部高级研究局正式宣布,与六所大学合作,研发下一代脑机接口,直接用神经活动控制计算机。 文章 1、电路图符号解释(英文) 本文介绍基本的电路图符号的含义。 2、一张纸对折12次)(英文) 长久以来,人们一直认为,一张纸最多对折7次。2002年,加利福尼亚州的17岁中学生 Britney Crystal Gallivan(1985年出生)成功演示了,将一张1200米长的卫生纸对折12次。她还给出了一个计算公式(上图),根据纸张的厚度和想要对折的次数,算出所需的纸张的最小长度。 3、Caddy 服务器如何过滤网络请求(英文) Caddy 是一种非常好用的 Web 服务器,作者演示如何根据 HTTP 请求携带的 Cookie 信息,返回不同的 CSS 样式表。 4、一种新的网络钓鱼方法(英文) 安卓系统的 Chrome 浏览器,用户向下滚动网页的时候,会自动隐藏地址栏。有人就利用这个特点,伪造了一个地址栏(上图的 hsbc 的地址栏就是伪造的),用来网络钓鱼。 5、虚拟内存探究(中文) 这组系列文章通过实验的方式,介绍虚拟内存的相关概念和实现,这里是中文翻译,还可以参考英语原版。(@NeoTse 投稿) 6、x86-64 汇编语言入门教程(英文) 本文通过运行一个最简单的 hello world 实例,介绍汇编语言的基本概念。 7、使用 Wasabi 和 restic 备份服务器(英文) 本文介绍如何写一个简单的脚本,将服务器数据备份到 Wasabi。 8、如何从零开始制作一块智能手表(英文) 本文含有大量图片,作者从零开始制作一块手表,表盘是3D打印的,电路是自己设计的,电池和充电器都是自己装配的。 9、二进制文件的编译过程(英文) 源码编译成为可运行的二进制文件,有好几个步骤,本文用一个最简单的例子,详细解释编译器的每一步都在干什么。 10、美国政府的高技术管制名单(英文) 2018年底,美国联邦政府发布了一份高技术出口管制名单,列出了14个大项、40多个小项的管制行业。凡是属于这些行业,原则上都不能出口,必须得到政府批准。这份名单可以当作参考,目前哪些行业属于真正的高科技行业。 软件 1、water.css 一个极小化的 CSS 框架,用来快速为网页加上简单样式,特别是不必使用任何 class。 2、ElGrapho 一个基于 WebGL 的浏览器数据可视化库,主要用于性能要求特别高的可视化图形。 3、googler 命令行搜索谷歌的工具。另外,还有一个 DuckDuckGo 的命令行客户端 ddgr。 4、Convert images to LaTeX 数学公式的截图 OCR 转为 LaTex 代码的桌面软件。(@chenylvia 投稿) 5、ScreenDump 一个在线截屏工具。用户只要输入网址,就会显示各种设备的网页截屏,相当方便。 6、I love IMG 该网站提供各种在线的图像编辑工具,比如图像缩放、压缩、裁剪、水印等。(@ifrontend-xyz 投稿) 7、mpvue 基于 Vue.js 的小程序开发框架,美团点评出品。这里有一篇教程,以及用它开发的 Unsplash 小程序。(@iyuyoung 投稿) 8、Motrix 一款桌面端下载工具,支持下载 HTTP、FTP、BT、磁力链、百度网盘等资源。(@ifrontend-xyz 投稿) 9、js-cloudimage-360-view 一个可以360度旋转观看图片的 JS 库,用于在网页上展示商品。 10、re-editor 一个基于 Slate 的开箱即用的 React 富文本编辑器,可以定制化。(@wowlusitong 投稿) 11、Pyodide 一个在浏览器运行的完整的 Python 解释器,可以执行 Python 脚本。 12、Microsoft Edge MacOS 预览版 Microsoft 公司的 Edge 浏览器发布第一个 MacOS 的版本。(@sedgwickz 投稿) 资源 1、国家地理频道纪录片:宇宙时空之旅 美国国家地理频道拍摄的13集科学纪录片,从理论物理学的角度,探讨宇宙的奥秘。中英文字幕,网易公开课提供全片。(@qinhanlei 投稿) 2、wamp 一个收集 WebAssembly 软件包的网站,相当于 WebAssembly 模块的 NPM。它还提供一个命令行工具,可以在命令行运行这些软件包。 3、数据库基础 免费的英文电子书,介绍数据库涉及的基本的数学知识。 4、MuseNet 人工智能公司 OpenAI 开发的自动作曲系统,可以指定你想听的音乐家(比如肖邦、莫扎特),然后该系统就会使用10种乐器生成一段4分钟的音乐。现在,OpenAI 每天在网上直播音乐会,旋律都是人工智能生成的。 5、数据科学的原理与技巧 加州大学伯克利分校的本科生入门教材,全英文,介绍数据科学原理,内容较简单,需要统计学和 Python 基础。 6、RemixIcon 一套免费高质量的开源图标库,目前有1500多枚图标,提供矢量图和字体图标文件,可用于商业用途。(@xiaochunjimmy 投稿) 文摘 1、为什么我们的工作时间越来越长? 中国社科院曾经发布过一个报告,说2017年我国每天工作时间超过8小时的人,占了42.2%。而且这不仅仅是中国的情况,日本,美国这些发达国家也普遍存在过劳。 这种现象虽然普遍,而且我们都身在其中。但仔细想想就会发现,其实"过劳"这件事,不太符合逻辑。 我们都知道,近两百年,人类整体的生产效率,那是一飞冲天啊。按说,生产效率上去了,单位工作时间的产出高了,那相应的工作时间应该减少才对啊。所以经济学家凯恩斯在1930年曾经做出一个有名的预测,他认为到2030年,人类的劳动时间每周15小时,就足够了。 现实是,很多互联网公司甚至开创了996模式,上午9点上班,下午9点下班,一周工作6天。我们还有724模式,一周7天24小时随时待命。你看,凯恩斯在1930年的预测错了。错的离谱,方向都错了。 问题是:他为什么错了?工具越高级,应该干活越省力才对。那为什么我们反而更累了呢? 《过劳时代》这本书里提供了很多解释。比如,全球化把所有人拉到了同一个竞争平面上。你是在一个地方工作,但你不是在和一个地方的人竞争。一个美国的工人是和一个中国的工人,甚至是非洲的工人在竞争。所以,竞争强度增大了。再比如,消费主义盛行。你和身边的人越来越多的攀比,比房子比车比包包比度假酒店,你想挣钱的欲望就越大,所以只能拼命干活。等等。 但是,我觉得最有说服力的解释,不是这些。问题的根子不在别的,就在于生产工具本身。它越进化、越高级、效率越高、越好用,我们就用得越多,所以工作时间就越长。 这是一个很有意思的悖论。举个例子,过去我们上班,必须得到单位才行,和同事见了面,才能展开协作。很不方便,后来有了电脑,有了邮件,有了微信,按说是更方便、更省时间了。但是结果呢?你知道的,老板能随时在微信群里抓到我们说事,周末也行,深更半夜也行。你上班的时间能不更长吗? 表面上看,工具的发明,总是解决一个现实问题的。有了斧头,砍树就更快。有了汽车,走得就更远。这是工具给我们提供的第一样东西,叫便利性。 但是,如果你只看到这一面,就忽略了一个更重要的东西,这也是工具带来的。你要解决问题,任何问题都是有它的时间空间边界的,工具一升级,边界内的问题,是被更高效的解决了,但是,这个时空边界本身也被打破了。于是,会出现新的问题,而且是更大的问题。 比如说,当年人们用马车,非常慢。后来,给车装上了发动机,这就成了汽车,速度提上去了。在有限的时空边界内,这就是一项改善。确定无疑的改善吧?那你说,会因为速度提上去了,所以,人旅行用的时间少了,所以车就会变少吗?当然不是啊。因为汽车打破了原来的时空限制,出现了全新的可能性。你就想,原来坐马车,你至少要带一个马车夫。现在呢?可以开汽车,一个人就可以开车,没有马车夫打扰了。车不仅是交通工具,它还是一个移动的私人空间了。所以就出现了一种新的行为方式,没有确定目的的开车兜风,这种行为模式就出现了。不去哪儿,就是带上女朋友开车去看看诗和远方。车的使用当然就越来越多。 当然,现实中远远不止是这一种情况了。因为车可以走得更远,所以,就一定会走得更远。因为可以走得更远,所以,整个社会的假设就变了,汽车旅馆就出现了,郊区景点和度假村就出现了,远离城区的购物中心,像奥特莱斯就出现了。这就反过来逼迫,你如果不能有汽车,你不能走得更远,你就没有办法享受社会基础设施提供的便利。它就会走到这个程度。 你看,这个过程就是:工具不仅为你解决了问题。工具还在你始料未及的地方,推开了一扇新的可能性的大门。这扇大门一旦推开,就再也关不上了,后面的人就会一涌而出,只会把门撑得越来越宽。这就是工具对人的反向塑造。 有句话叫,身怀利刃杀心自起。你身上有把刀,看见什么都想用上。对,工具虽然只是提供了某种可能,但是人性使然,我们总是倾向于要把这种可能性变成现实性。工具在可能性上推开了多大的空间,我们就一定会倾向于把这个空间填满。 理解了这个逻辑,再回到今天的主题,为什么劳动工具效率越来越高,我们却越来越忙呢?这么看来,答案就非常简单了。和全球化,消费主义有关,但关系没那么大。因为劳动工具让我们工作的可能性越来越高,我们就一定会把这个可能性填满,我们当然就会一直工作,所以越来越忙。 《过劳时代》这本书的解读人,李南南老师还开了一个脑洞。他说,假如未来,你的工资不是按月计算,而是按秒计算。在你的面前,有一个计时器,你每多工作一秒,你的账上马上就会多一毛钱。结果会是什么?表面看起来,这对你只有好处没有坏处。首先,每天工作8小时,这就是一天2880块钱,不少吧?你收入提高了。更重要的是,你碎片时间的工作,比如,吃饭间歇、睡觉前给同事回个工作微信,也能计算报酬了,对你更公平了。好事吧?好工具。 但这是在你现在的时空边界下看问题。真实情况可能是,这个可能性的大门一旦打开,大多数人因为碎片时间也能挣钱,会工作到筋疲力尽才会停。如果不信,你现在到网吧里去看看那些打游戏挣积分通宵不睡的人,你就知道,如果真有那么一天,工作到筋疲力尽那就是我们的未来。 图片 1、微软总部 当你漫步在微软位于西雅图 Overlake 社区的庞大总部时,一定会觉得,那里熙熙攘攘的喧嚣就像大学校园一样。 微软在那里雇佣了超过50,000名员工。午餐时间,你会发现很多人在微软内部的许多咖啡馆和餐馆闲逛,在建筑物之间漫步,浏览商店,就像周末在一个小镇一样。 微软总部的中央大楼,里面有咖啡馆、银行、电信服务、快递服务、酒吧、餐厅和体育用品商店。较低楼层是提供全世界各种口味食物的免费食堂。 中央大楼室外有几个运动场,那里举办的员工足球和板球联赛非常受欢迎。 总部内部还有一片森林,里面有一套树屋会议室。 在微软较新的工作空间中,八到十二人的团队一起工作在大型吊舱中,附近有一些会议室、休息区、咖啡馆、游戏设施,甚至还有充满乐器的音乐室。 言论 1、 工会不允许波音公司解雇任何人,结果导致有大量不干活的员工。我保守估计,同事中有30%是反社会人士,他们会积极破坏其他人的工作;另外50%的人在那里愚蠢地整天瞎扯,阅读报纸或书籍;剩下的20%才是那些真正关心飞机乘客不会死亡的人。 -- 一个自称是波音员工的人,在网上爆料。 2、 我发现很多东西都过时了。其中一个就是签名,现在没有人要我的签名,大家都拿着手机,要求跟我一起自拍。 -- 泰勒·斯威夫特,美国红歌星 3、 年少时,我选择做一件事,只是因为我喜欢这件事。现在,只要一个爱好无法获利,我就会放弃它,转而开始尝试一个可能带来收入的新的爱好或目标。 -- 《每个爱好都是一次赚钱的尝试》 4、 任何情况下,几乎都不应该购买喷墨打印机。激光打印机已经非常便宜,而喷墨打印机的墨水非常贵,实际比香奈儿5号的香水还贵。一加仑墨水的价格,可以购买超过2,600加仑的汽油! -- 《没有理由购买喷墨打印机》 5、 我们现在可以期待,中国人加倍努力推出自己开发的智能手机操作系统,设计自己的芯片,开发自己的半导体技术,并实施自己的技术标准。这只会加速创建数字铁幕的过程,将世界分为两个截然不同的互斥技术领域。 -- 《技术冷战已经开始》,彭博社评论 回顾 去年的本周:《每周分享第 5 期》 订阅 这个专栏每周五发布,同步更新在我的个人网站、微信公众号和语雀。 微信搜索"阮一峰的网络日志"或者扫描二维码,即可订阅。 (完) 文档信息 版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证) 发表日期: 2019年5月24日


每周分享第 56 期

这里记录过去一周,我看到的值得分享的东西,每周五发布。 欢迎投稿,或推荐你自己的项目,请前往 GitHub 的 ruanyf/weekly 提交 issue。 (题图:昆山森林公园,苏州,2018) 一篇新闻报道提到,美国就业行情最好的十种工作,八种是 STEM 岗位。 所谓 STEM,就是科学(Science)、技术(Technology)、工程(Engineering)、机械(Machine)的缩写。也就是说,就业最好的工作,80%是理工科岗位。这跟我的感觉一致,理工科的就业远远好于文科。 现在是信息社会,大量的工作都是技术岗,需要技术工人和工程师,而传统的办公室文秘和管理岗位,由于被软件替代,正在不断减少。这种趋势以后将会越来越明显。理工科学生往往有好几个 offer 可以挑选,文科学生想要一个 offer 都很难,很多人不得不选择考研和考公务员。 所以,中学生选择大学专业的时候,为了就业,建议尽量选择理工科,不要选择文史哲和理论经济学,否则毕业以后,找工作很困难。 除了就业难,文科学生的发展前景也不好。文科培养的其实不是技能,而是思想。但是国内的社会环境,根本不允许你有独立的思想,能做的只是诠释领导的政策。一个例证就是,我国现在培养出了各种各样的人才,但是似乎就是没有思想家。 新闻 1、火星模拟生存基地 甘肃省金昌市政府与中国航天员科研训练中心,合建了一个"火星1号基地",作为航天员火星模拟生存的实验基地,同时也是一个文旅项目,供游客体验火星生活。据介绍,金昌的地理条件与火星表面非常相似,山地和沙漠混合,气候干燥,全年风力强劲,昼夜温差巨大。 该基地共有总控舱、气闸舱、乘员舱、生物舱等9个舱体。生物舱种植小麦和蔬菜,为航天员提供食物来源;生保舱用于处理生活垃圾;乘员舱不仅有宽松舒适的床,还可以做饭、看书,空间宽敞;总控舱是"航天员"与"地球"联络的重要枢纽。 2、徒手移动25吨巨石 古代巨大的石头建筑,到底是怎么组装的?麻省理工学院的研究人员做了一个实验,他们制作了大约25吨重的巨型混凝土结构,仍然可以徒手移动。这些混凝土块的重心都是精心设计的,考虑到了稳定性和平衡性,并且具有斜面、圆角和枢轴点,由此可以被徒手推动、倾斜和旋转。 虽然这种石块仍然不足以解释,复活节岛的巨石人像是怎么放置的,但是这为未来的建筑提供了一种思路,有一天,你甚至可能像组装积木那样,组装巨型混凝土。 3、美国对离境旅客启用人脸识别 美国政府一直想知道,哪些人逾期滞留,成为非法移民。现在,他们终于找到了一个好的方法,美国国土安全部宣布,未来四年中,将对所有离境的旅客进行人脸识别。 旅客登机前会被拍照,跟入境时签证或护照上面的照片进行比对。一旦发现不匹配,就会人工进一步处理。那些逾期滞留的人,将受到法律处罚。目前,美国已经有15个机场在测试这套系统,发现了七千多个逾期滞留的旅客。 4、特斯拉出租汽车服务 特斯拉公司的老板马斯克公开说,"如果你现在不买特斯拉,而买其他车,就是经济上的发疯,好比你给自己买了一匹马。" 他所指的是,特斯拉公司即将推出出租车服务。车主买了特斯拉以后,可以在不用的时候,把车借给特斯拉公司,当作出租车运营。特斯拉公司会将收益分给车主,每年估计可以达到1万美元。马斯克还说,最快明年特斯拉的自动驾驶,就能做到无需人工干预,因此出租车服务也将是无人驾驶。 5、机器解雇工人 媒体揭露,美国亚马逊公司的仓库,有一个计算机系统跟踪仓库工人的工作效率。一旦发现有人没有达到绩效,该系统会发出命令,自动解雇那些工人,整个过程无需人工干预。系统会跟踪工人的休息时间,计算你一天中多少时间没有干活,这使得工人在休息时都感到非常紧张。 根据资料,亚马逊的巴尔的摩仓库,以生产率不达标的原因,一年内解雇了300多个工人。 6、躲过机器监控的图案 比利时鲁汶大学开发出一种二维图像,只要将其打印在衣服上面,就会令监控系统无法识别出这是一个人体。上图左侧是正常的识别,右侧佩戴这种图像以后,识别系统就失灵了,没有认出这是一个人。 它的原理是,通过图像产生足够的噪音,增加随机性,使得模型无法得出结论。 这种方法还可以用于汽车,躲过高速公路上的监控。但是,它对于人脸识别无效,只能躲过那些先判断人体、再识别人脸的系统。 7、切尔诺贝利实境游戏 两个乌克兰青年按照实景,建造了切尔诺贝利核电站废墟模型,包括住宅楼,酒店,音乐厅,游乐园和体育场等场景,然后开发了一个游戏《Isotopium:Chernobyl》。玩家可以通过互联网,控制一辆遥控小车,上面带有摄像头,在这个模型城市里面漫游,感觉跟在真实场景完全一样。 游戏的费用是每小时9美元,同时最多只能20人在线,玩家寻找隐藏在各个地点的能量球,来淘汰其他对手,获取游戏胜利。全球目前有62,615人注册参与游戏。 8、一句话新闻 日本由于人口不断萎缩,据统计,全国13.6%的住房已经废弃,成为荒宅。 SpaceX 公司得到美国政府的许可,可以发射4,425颗卫星,组成一个低轨道卫星网络,用于销售上网服务。 美国2019年4月的能源构成中,可再生能源(水力、风能、太阳能等)的发电量,历史第一次超过煤炭的发电量。 加拿大北极地区由于气温变暖,永久冻土带融化,许多地方已经出现了大型塌方,估计会变得越来越严重。 文章 1、如何画一幅栩栩如生的画(英文) 作者讲了七个让作品变得更真实的绘画技巧/技术。它们与软件开发有相似之处,可以借鉴,比如顶层设计、一开始不要过分关注细节等。(@BIT-zhaoyang 投稿) 2、统计图表撒谎的5个方法(英文) 本文介绍五种统计图表技巧,用来隐藏或突出某些统计信息。比如,上面左右两个图的深色部分都是30%,但是右图比左图看上去大得多。 3、PaaS 和 Serverless 的差异(英文) 本文讨论 PaaS 和 Serverless 两种架构有何不同。 4、美国2020总统大选参选人的网站设计(英文) 本文介绍评论了美国2020年总统大选的参选人的网站设计,目前一共有几十个参选人。 5、为什么面向对象编程糟透了?(英文) 这是 Erlang 语言的发明人 Joe Armstrong 的一篇短文,解释他为什么不喜欢面向对象编程。不过他也承认,面向对象编程的流行是有道理的。 6、Rust 语言的编译时内存安全(英文) Rust 语言不会发生内存错误,都能在编译时发现。本文通过几个简单的例子,解释为什么这项功能很有用。 7、软件开发趋势 2019 调查报告(英文) 这是一份对全世界软件开发者的调查报告,可以了解商业软件开发的趋势,比如软件公司的主要编程语言是什么,使用什么项目管理工具,是否使用外包等。 8、Go 语言为什么快的5个原因(英文) 本文从计算机底层分析 Go 语言运行速度快的五个原因。(@NeoTse 投稿) 9、AWS 上搭建免费的 Wireguard 服务(英文) AWS 提供12个月的免费帐号,可以用来搭建 Wireguard 服务,每月 15GB 流量。 10、放弃 Sass(英文) Sass 是最流行的 CSS 预处理器。作者提出,随着 Grid 布局和 CSS 变量的出现,Sass 已经不是那么有用了,可以考虑放弃了。 软件 1、Precise UI 一个轻量级 React 组件库,提供70多个组件,特点是比较简洁。 2、coc.nvim Vim 的一个插件,提供类似的 VSCode 的自动补全功能(intellisense)。 3、Lode Runner 游戏《挖金子》(Lode Runner)的 Web 重制版,制作非常精良,值得玩一下。 4、tinytetris 命令行游戏"俄罗斯方块",使用 C++ 编写,代码较为简单,可供学习。 5、MikuTools 该网站收集一系列轻量级工具,比如各大视频网站的视频在线下载工具。(@wikiios 投稿) 6、hanzi-writer 一个演示汉字笔画顺序的 JS 库。 7、PeerJS 一个简化 WebRTC 的点对点通信的 JS 库。 8、markdown-nice Markdown 文档进行微信公号排版的工具,支持自定义样式。(@zhning12 投稿) 9、gacp 定制 Git 的提交信息的命令行工具,支持 Emoji。(@vivaxy 投稿) 10、react-component-echarts Echarts 的 React 封装,各种配置项可以写成子组件的形式。(@dawiwt 投稿) 11、gogo 勾勾是一个基于谷歌的开源搜索工具。(@zenuo 投稿) 资源 1、围棋百科 一个英文的围棋维基网站。 2、天线知识 这是无线电天线的百科网站。 3、开源语音数据库项目 Mozilla 基金会为了开发语音识别技术, 做了一个开源语音数据库项目,邀请全世界用户为这个数据库朗读句子,或者听他人的录音,判断朗读是否准确。(@user12138 投稿) 4、镜子中的谷歌街景照相机 该网站收集谷歌街景出现的镜子里面的拍摄机器。 5、命令行的艺术(中文) 一篇命令行的详细介绍,各种任务可以使用什么命令。(@sdir 投稿) 6、kindle电子书分享网 个人业余时间搞得一个小网站,以解决自己找电子书的烦恼,后端基于rails,可以参考技术方案。(@sun1752709589 投稿) 文摘 1、科幻文学本质是幼稚的 以下摘自刘慈欣2001年银河奖的获奖演说。 科幻文学从本质上说是幼稚的,它所要表现的,是童年时代的人类,面对广漠深邃的宇宙所产生的好奇和恐惧,以及探索的冲动。在这样的一个宇宙面前,人类的科学和哲学都很幼稚,科幻是表现这两者的唯一一个文学形式,浸透着稚气也就不奇怪了。未来人类的科学发展到极致,宇宙的一切毫发毕现之日,也就是科幻消亡之时。 目前在国内科幻界,面对中国科幻的幼稚,大家都羡幕美国科幻的成人读者群,并把这看做是科幻文学成熟的标志之一。但要知道,成人之后就是老年,老年之后就是死亡。当今美国科幻的繁荣,很大程度上是影视的繁荣,这些科幻影视仍在延续黄金时代的风格。而当今美国的科幻文学已露出了深深的暮气,作品用复杂的技巧表现晦涩的隐喻,全无黄金时代的朝气与活力,近年来许多顶峰之作已透出了死亡的气息。现在,美国25岁以下的人已基本上不读科幻小说了。我实在看不出这种局面有什么可羡幕的。 我们最应该羡幕的是自己,现在,国内的科幻读者都是八九点钟的太阳,甚至是六七点钟的太阳,中国科幻面对的是一个充满青春与希望的市场,这正是我们这些科幻人信心和力量的源泉。相比之下,幼稚真算不了什么。 2、如何收入1亿美元? 如果你要创造一家收入1亿美元的互联网公司,下面五种收入模式,你觉得哪一种最容易。 方法一、设法做到1000万活跃用户,然后通过出售广告,每人每年变现10美元。不过,千万级别的活跃用户,意味着用户总量要达到1亿左右,市场上能到一亿用户的产品并不多。 方法二、100万付费用户,每人每年付费100美元。这意味着,至少需要1000万人使用你的应用。 方法三,10万小企业,每家每年付费1000美元。这意味着你的 SaaS 服务定价应该是每月50-100美元。你需要大约200万~50万次试用,具体数量取决于你的转化率。 方法四、1万家企业,每家每年付费1万美元。这意味着你可能需要找到10万个客户,让他们试用你的产品。但是,每家一万美元的价格,又不足以向他们做现场销售。你实际上是在互联网上销售价格极高的 SaaS。 方法五、1000家大企业,每家每年付费10万美元。这可能相对容易一些,因为对于大公司来说,10万美元要比一位高级员工的工资更便宜。但是,难点在于你需要花费大量时间和成本,说服他们相信,你真的解决了他们的难题。 图片 1、1969~1970年的贝尔实验室 贝尔实验室在计算机历史上有着重要地位,Unix 系统和 C 语言就是在那里发明的。最近,一位工作人员将他在近50年前拍摄的几十张照片,放到了互联网上。上图是磁带架,当时没有硬盘,数据都是储存在这种磁带上面。下图是当时的计算机。 2、宇宙的形状 自从科学家观测到宇宙正在膨胀,就推断宇宙的形状像一个不断膨胀的气球。随着气球越变越大,气球内部任意两点的距离都在不断增大。 3、百事可乐的新 Logo 2009年,百事可乐公司重新设计了 Logo,左边是原来的 Logo,右边是新 Logo,看上去差异不大,只是改了一下旋转角度。但是,百事可乐为了这个新 logo,支付了100万美元的设计费,据说这个设计象征着未来与革新(下图)。 言论 1、 友谊悖论指的是,你总是觉得,自己的朋友比自己有更多的朋友。 -- 友谊悖论 2、 年轻时,我没受过多少系统教育,但什么书都读。读得最多的是诗,包括烂诗,我坚信烂诗早晚会让我邂逅好诗。 -- [哥伦比亚] 加西亚·马尔克斯,诺贝尔文学奖得主 3、 我从法律系退学,追求成为一个作家。一些老师千方百计地帮我,劝我就算不喜欢,好歹把大学念完。家里每个人都缺钱,指望我毕业当律师,为家里挣钱。我却觉得,没希望比没钱更令我沮丧。 -- [哥伦比亚] 加西亚·马尔克斯,诺贝尔文学奖得主 4、 据说,只要你在 Facebook 上面按过300个"赞",它就会比你自己更了解你。 -- 《电脑会拥有一切吗?》 5、 我是 WebEx 的首席工程师,Webex 被思科收购后,我又在那里待了14年。与客户交流时,我意识到 Webex 的架构有一些深层缺陷,影响可靠性和视频质量,思科需要从头开始重建 Webex。我告诉思科领导,但他们没有听。 我在2011年辞职,独自开发新的视频会议系统。幸运的是,Webex 最有才华和最有远见的工程师很快就加入了我,我们在接下来的两年里一起构建了Zoom 1.0。 -- 袁征,Zoom 创始人 回顾 去年的本周:《每周分享第 4 期》 订阅 这个专栏每周五发布,同步更新在我的个人网站、微信公众号和语雀。 微信搜索"阮一峰的网络日志"或者扫描二维码,即可订阅。 (完) 文档信息 版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证) 发表日期: 2019年5月17日


每周分享第 55 期

这里记录过去一周,我看到的值得分享的东西,每周五发布。 欢迎投稿,或推荐你自己的项目,请前往 GitHub 的 ruanyf/weekly 提交 issue。 (题图:昆山火车站,苏州,2018) 关于 996 工作制,已经有很多评论和报道,但是有一点似乎没人提到:程序员没必要来公司。 软件开发只需要电脑和网络,哪里工作并不重要,完全可以在家工作。事实上,很多软件公司都是远程办公,办公室根本没人去。比如,GitLab 公司2018年底有350人,分布在45个国家或地区,全部在家办公。它甚至有一个网页,专门宣传它的远程办公理念。 我对于 996 工作制不理解的地方是,有什么必要,一定要让大家在办公室待这么长时间。八小时的面对面还不够吗,剩下的时间完全可以回家工作。 有一种管理哲学是,我一定要盯着你,才能保证你的投入,避免你偷懒。很多软件外包公司就是这样,只能用公司的电脑开发,不能把电脑带回家,而且电脑无法访问外网,也不能安装未经批准的软件,所以要想工作,只能去公司上班。 我觉得,程序员要做的不是反对 996,而是提倡远程办公。对于重要的项目,可以一周七天、每天12小时的投入,前提是允许在家办公。 新闻 1、.amazon 顶级域名的纠纷 亚马逊公司申请了 .amazon 顶级域名,遭到了玻利维亚、巴西、哥伦比亚、厄瓜多尔、圭亚那、秘鲁、苏里南和委内瑞拉八个南美洲国家的反对。它们要求与亚马逊公司共用 .amazon 域名。后者不同意,只让出国别的二级域名,比如巴西是 br.amazon。双方争执不下,目前,这起纠纷将交给 ICANN 裁决。 类似的纠纷有过先例。2013年,阿根廷和智利提出异议后,美国户外服装品牌 Patagonia 撤回了 .patagonia 域名申请。 2、太阳能农业 德国正在进行一项实验,将太阳能发电与农业结合起来。在农地上方5米处架设光伏板,进行太阳能发电,下方依然是传统的农业耕作和放牧,发现这样可以使得土地的产值提高160%。 2018年是欧洲最热的年份之一,高温对农作物的产量产生负面影响。有了光伏板的遮挡,土地接受的阳光辐射减少了30%,这就增加了产量,另外,高温天气的额外阳光也提高了电力输出。但是,在其他季节,光伏板会使得下方土地的温度稍低。 3、韩国的食物垃圾回收 经过多年努力,韩国已经将食物垃圾的回收率,提高到了令人乍舌的95%。早在2005年,韩国就禁止食物垃圾倾倒在垃圾填埋场,必须专门回收。 2013年,韩国推行可生物降解的垃圾袋,强制居民必须把食物垃圾装进去,然后送到自动垃圾箱(上图)回收。而且,居民扔垃圾进去的时候,会按照重量收费,你扔的垃圾越重,支付的费用就越高。这促使居民去除水分,以减少垃圾的重量。据估计,食物垃圾的80%是水分。回收的食物垃圾将送往加工厂,分解成沼气和生物油,残渣可以变成肥料。 4、《人类简史》作者谈 AI 4月22日晚,在斯坦福大学可容纳2000人的大演讲厅,畅销书《人类简史》和《未来简史》的作者以色列著名历史学家尤瓦尔•赫拉利(Yuval Noah Harari),与斯坦福 AI 研究院领导者李飞飞,展开了一场人工智能对话。 赫拉利充分表达了他对 AI 的担忧,下面是他的一些精彩言论。 (1)大数据面前,自由意志、独立思考、民主决策都不存在,都是算法结果。 (2)AI 眼里的爱情,跟一场流感没有区别。 (3)AI 不透明,不跟我分享信息,而是跟广告商、大公司、政府组织联合来利用我,怎么办? (4)AI 的全球竞赛,比核竞赛更可怕。因为,核武器研发出来,没有人会随便去用。但是 AI 就不一样了,它是发展出来就马上会被用,不管三七二十一。 5、特朗普蠕虫 最近,巴拿马丛林发现了一种新的蠕虫,长度约10厘米,表皮光滑有粘液。它是一种穴居物种,几乎完全生活在地下,基本没有视力,眼睛只能分辨光暗。 一家建筑公司的老板以2.5万美元,拍卖得到该物种的命名权,然后他将该蠕虫命名为"特朗普蠕虫"。原因是特朗普拒绝承认气候变化,并且采取了很多极端化的措施,好像这种蠕虫只能看出黑白,无法看到更多的颜色。 6、带有人类基因的猴子 昆明动物研究所宣布,人类的 MCPH1 基因已经移植给了猴子。该基因跟大脑发育有关,研究人员想看看,猴子是否会变得更聪明。现在已经有11只带有人类基因的恒河猴诞生,科学家称,转基因猴比野生猴的记忆能力"明显提高"。 7、人工智能创造的游戏 设计公司 AKQA 宣布,世界上第一个人工智能设计的运动 speedgate 已经诞生。人工智能分析了400个人类游戏的规则,然后创造出了该游戏。 游戏时,每方有6个球员,三个前锋,三个后卫。球场有三个门,通过中间的门,攻入对方球门,就能得分。(@CharlesCCC 投稿) 8、一句话新闻 马斯克称,特斯拉汽车的自动驾驶技术极其先进,一年之内,人类就可能无法接管车辆的驾驶,因为人类驾驶比自动驾驶更危险。 币安交易所5月7日遭攻击,被黑客提走了7000个 Bitcoin,损失约人民币2亿多元。币安表示将全额承担这笔损失。 一家德国公司宣布,实现了一公斤电池储存一度电。这个能量密度前所未有,将可能使得电动汽车一次充电,行驶1000公里以上。 英国国家网络安全中心发布一项研究,分析2300万个密码之后,发现互联网最常使用的5个密码是:123456,123456789,qwerty,password 和 1111111。 一项研究发现,全世界范围内,热点事件引发的关注时间越来越短。2013年,推特的热点关注平均是17.5小时,2016年下降到11.9小时,即热点新闻引发关注的平均时间只有半天。 文章 1、为什么 SQL 如此成功?(英文) SQL 语言诞生已经25年了,生命力只有增强,没有丝毫减弱。即使不是关系型数据库的产品,都在设法提供 SQL 类似的查询语言。本文分析 SQL 为什么如此成功的几个原因。 2、Node.js 的简单 JWT 实现(英文) JSON Web Token 是一种令牌的生成机制,用于网站的授权和认证。本文介绍 Node.js 如何实现一个简单的 JWT。 3、50万行 Java 代码移植到 Go 语言的感想(英文) 本文作者将一个大型 Java 项目改为使用 Go 语言,详细比较了 Java 与 Go 的一些差异。 4、Nokia N9 的闹钟设计(英文) Nokia N9 手机的闹钟 App 的设计非常出色,作者介绍这个设计的优秀之处。 5、何时使用 TypeScript?(英文) TypeScript 正变得越来越流行,本文作者谈了自己的看法,何时应该使用 TypeScript,何时应该使用 Native JavaScript。 6、如何发现隐藏的摄像头?(英文) 现在隐藏的摄像头越来越难以发现,比如上图的"6"里面有一个摄像头。本文介绍如何发现这种摄像头,前提是摄像头必须跟你在同一个局域网里面,否则还是发现不了。 7、请不要用 JSON 作为配置文件(英文) 本文指出 JSON 的发明目的是"轻量级数据交换格式",根本不适合作为配置文件。 8、数据储存设备的历史回顾(英文) 本文通过图片介绍历史上的数据储存设备,上图是世界第一个超过1 GB的硬盘1980年的 IBM 3380,可以存储2.52 GB,重 250公斤,售价8万美元~14万美元。 9、浅谈机器学习中的文本摘要(英文) 本文介绍如何使用 Python 自动生成一篇文章的摘要。 10、微信公众号文章链接 GitHub 文章的方法(中文) 微信公众号不允许外部链接,如果想在文中插入 GitHub 链接,可以考虑采用本文的方法。作者提供了一个小程序,可以抓取 GitHub 页面,只要跳转到这个小程序就可以了。 11、全平台框架 Flutter(英文) 谷歌发布 Flutter for web,正式宣布 Flutter 成为全平台框架,支持手机、Web、桌面电脑和嵌入式设备。现在学跨平台应用开发,第一个要看的可能不是 React Native,而是 Flutter。(@ifrontend-xyz 投稿) 软件 1、fyne 跨平台的 Go 语言的图形界面库。 2、jimp 一个 Node.js 的图像处理库,为图像加特效。(@ifrontend-xyz 投稿) 3、GridManager 一个网页表格的 JS 库,支持多种操作。(@baukh789 投稿) 4、laravel-s 一个 PHP 的胶水项目,将 Swoole 用于 Laravel 项目。(@hhxsv5 投稿) 5、griffith React 的视频播放器组件。 6、Kroki 自动生成图形的开源服务,支持多种图形(PlantUML、GraphViz、Mermaid 等等)。 7、md2pdf 通过浏览器,将 Markdown 文本保存成 PDF 文件,并且可以定制页面。 8、scscmsMusic 一个 Chrome 浏览器扩展,用来听歌,支持远程音乐和播放列表。(@scscms 投稿) 9、mokia 一个 mock 网络服务的 JS 工具库。(@varHarrie 投稿) 10、asciiflow 一个画 ASCII 码框图的网站。(@bzhux 投稿) 11、avataaars generator 开源的卡通头像生成器,可以定制各种头像参数。(@ifrontend-xyz 投稿) 12、Windows Terminal 微软新发布的 Windows 终端,提供多标签、分割窗口、快捷键、完整的 Unicode 字符支持等功能。(@erdong 投稿) 资源 1、广东工业大学计算机学院课程攻略 该仓库收集该校从大一到大四各门课程的资料。(@brenner8023 投稿) 2、跟我写 JPEG 解码器 中文教程库,讲解 JPEG 图片压缩标准和理论,并带有配套源码(Rust 语言)。作者希望读者只要跟着学习,就能写出自己的 JPEG 图片解码器。(@MROS 投稿) 3、vue-unit-test-with-jest 教程库,介绍如何用 Jest 为 Vue 项目写单测。(@holylovelqq 投稿) 4、《HelloGitHub》第 36 期 分享 GitHub 上有趣、入门级的开源项目的月刊,帮你找到编程的乐趣。(@521xueweihan 投稿) 5、github-rank Github 中国用户排名。(@xurui3762791 投稿) 6、今日掘金 每15分钟抓取一次掘金首页数据,保留点赞数大于55的文章,过滤出质量相对较高的文章。(@ZY2071 投稿) 文摘 1、终生不婚率 以下摘自日本纪实书籍《无缘社会》(上海译文出版社,2014)。 社会学把五十岁时仍未结过一次婚的人的比率称为"终生不婚率",一般认为这个比率今后会呈增长趋势。 (日本)男子的终生不婚率2005年时为16%,预计2030年将上升到大约三个男子就有一个。女子2030年将为23%,虽然略低于男子,然而与2005年相比,则相当于增加了两倍以上。今后社会中,终生不结婚的现象将会司空见惯。 我们就终生不婚率急剧攀升,对专家进行了采访。藤森克彦是瑞穗信息综合研究所的首席研究员,他很早就关注单身化的进展。藤森君认为,不结婚者增加的原因,有以下几项: 一、便于独立生活的城市基础设施日趋完备(诸如便利店的普及等),独自一人生活的不方便越来越少; 二、终生职业急剧减少,收入不稳定的非正规雇佣越来越普遍。 三、生活方式发生了变化,到了某个年龄必须结婚的社会观念正在弱化。 四、人们对婚姻质量的要求提高,而且女性经济实力上升,不结婚也能够生活的人增加了。 他说其中第二项的原因尤为重要。大多数人要结婚成家时,会想到要增加住宅费用和子女教育费等支出。如果此人从事的是工资和待遇均不稳定的非正规雇佣工作,他势必会心中不安,担心将来这些费用无法筹措,从而想结婚也结不了婚。 2、那些没有发布的项目 作为一个程序员,我有100多个没有发布的个人项目。 它们通常是这样开始的:我对一个想法感到兴奋,估计可以在较短的时间内完成,比如一个周末或几周。结果也差不太多,我疯狂地工作一段时间,项目或多或少都写好了。 但是它能够发布了吗?它是否算完成了呢?有趣和令人兴奋的部分确实是基本完成了,能够证明某个概念是有效的。但是,又好像缺少了一些东西,不是特别能引起别人的兴趣,有一些乏味。项目缺乏设计或视觉呈现,这算不上很重要,功能才比较重要,项目确实能工作。 它也没有登陆页面和介绍页面,这些将对新用户非常友好。但我不是一个好的作家,写不出太多文字。我甚至讨厌写作,我害怕被别人评判,所以我选择不写。 最后一个缺失的部分是营销。世界上几乎没有任何事情,比一个内向的人想到一个创意更糟糕,因为他不得不向全世界推销自己的想法。如果世界批评你的项目怎么办?如果你了解到,别人已经做过了怎么办?世界也可能完全沉默不加理睬,就像以前的许多人一样,你的项目将沉没在互联网的深处。 这些缺失的部分不算多,可能还需要投入整个项目时间的20%。但是这最后的20%,对你来说,比80%用在编码的时间更难做到。因此,你可能会让项目就停在那里。何况世界上又出现了新的闪亮的东西,你又可以急切地在新东西上工作了。 再过一会,你就会去拥抱新项目,忘了旧项目。让那些没做完的事情继续保持没做完,让这样的周期变成永久化。 图片 1、世界最大灵骨塔 台湾新北市,一座白色巨塔矗立在三芝区,外形呈六角形,顶层为宫殿式的望楼塔造型。楼高达二十层的巨塔在翠绿的山峦中尤其突出!这座建筑其实是一个多层式的骨灰盒大楼──龙岩真龙殿生命纪念馆。 该大楼聘请了日本建築大師安藤忠雄事务所負責設計,2002年正式開幕。一共可以容纳38万个骨灰盒。二楼到四楼是三宝佛殿,四楼以上是骨灰盒放置场所。目前,所有位置几乎已经全部售出。 2、《黑客帝国》的片头 电影《黑客帝国》的片头非常著名,一阵绿色的"字符雨"从天而降。很多人很好奇,这些字符到底是什么内容? 现在答案终于揭晓。电影的设计师 Simon Whiteley 告诉大家,他的妻子是日本人,他接受了电影的设计任务回家后,发现妻子有一本寿司菜谱,里面有各种字符,而且这本书是直排版,文字都是从上到下。他觉得非常合适,就使用这本书里的字符,制作了"字符雨"。 言论 1、 我的工作压力很大,我能想到的唯一应对方法就是努力投入工作,这是我释放压力的唯一途径。 -- 艾伦·图灵。他的马拉松成绩是2小时46.03分钟,有人问他为什么刻苦地训练长跑,他做了上面的回答。 2、 20年前,每个人都使用 Windows,只有一小部分人在业余时间浪费生命编译 Linux。 Windows 用户看到以后,感到很困惑:"你们已经拥有了所需的一切,能够完成工作并且易于使用,为什么还要这样折腾?!" -- 《AWS vs K8s 是新形式的 Windows vs Linux》 3、 Stack Overflow 已经成立11年了,现在,世界上每个开发者实际上都使用它。我经常看到开发者编写代码时,他们就会在一个浏览器窗口中打开 Stack Overflow。 嘿!我们保证,你不用注册或付钱,就能看到答案。 -- Joel Spolsky,Stack Overflow 的联合创始人 4、 原型产品或者第一个版本,几乎总是不需要那些时髦的 Web 框架。你需要的是以最快的速度推向市场,忽略那些花哨的潮流,确保第一次出货。 -- 《你可能不需要时髦的 Web 框架》 5、 十六世纪,欧洲普及印刷术以后,一个意外不到的后果是,大学教授的薪水急剧上升,开始远远高于技术工人。 -- 《印刷术推动欧洲》 回顾 去年的本周:《每周分享第 3 期》 保险公众号推荐 最后,介绍一个优秀的保险公众号《保哥和八姐》,很感谢他们一直支持我的网站。其实,去年已经推荐过一次了,今天特别在周刊再推广一下。 保哥是主笔。他是中南财大毕业,保险公司工作十年,负责保险产品设计和核赔,所以很熟悉各种保单的猫腻。他的理想是公众号写满三年,然后结集出版自己的保险书。 八姐是保哥的老婆,日本名校早稻田大学金融学毕业,香港和大陆两地都管理过大型资产,偶尔兴起会在公号写点文章。 他们公众号的特别之处,在于对保险行业和产品的介绍比较深入,提供专业视角,注重实务,绝非纸上谈兵。此外,他们比较坚持自己的价值观,从来不跟风,也不拍脑袋,说一些不负责任的言论,任何知识点、产品资料,都要自己研究透了,才敢写。 这个公号属于是我少数订阅的金融号之一。如果你想要了解保险,或者最近想要购买保单,不妨关注看看。 订阅 这个专栏每周五发布,同步更新在我的个人网站、微信公众号和语雀。 微信搜索"阮一峰的网络日志"或者扫描二维码,即可订阅。 (完) 文档信息 版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证) 发表日期: 2019年5月10日


每周分享第 54 期

这里记录过去一周,我看到的值得分享的东西,每周五发布。 欢迎投稿,或推荐你自己的项目,请前往 GitHub 的 ruanyf/weekly 提交 issue。 (题图:鸣号自动侦测系统,上海,2019。) 能够获得暴利的职业,都有一个共同特点:可扩展性(scaling):一次劳动可以服务成千上万的人。 软件、电影、游戏行业都具有可扩展性,作品的生产成本是固定的,但可以被消费无数次,所以有巨大的获利空间,创造出许许多多的富豪。另一方面,理发师、厨师、出租车司机一次劳动,只能服务少数几个人,就不具有可扩展性,很难获得暴利,生存得很辛苦。 最近,我读到美国一个风险投资家的文章。他说了一句发人深思的话: "写作是最具可扩展性的活动。你呆在家里,不去参加活动/会议,只是在网上写下自己的想法,然后你就具有了最好的可扩展性。" 我想了一下,还真是这样。你写了一篇文章,想让其他人看到,只要到处张贴就行了。每次转贴,就是扩展了一次。这比其他产品的扩展容易多了。面包师傅想要更多的人尝到自己的面包,只能多开面包店;网站要扩展,只能购买更多的服务器。相比之下,文字的扩展简直是零成本。 大公司每年花费数十亿美元用于广告,以求人们关注他们的产品。但是,一个好的作家可以免费获得这种扩展性。这就是为什么你应该把自己的想法写下来的原因,这么好的免费传播渠道,为什么不用呢?你以为,写下来不会有人看。错,其实是有人会看到的,如果他们觉得有价值,就会帮你传播出去。 新闻 1、实验小鼠的需求旺盛 随着中国生物科技的发展,对于实验小鼠的需求持续增长,从基因改造到药物实验都需要小鼠。据专门生产小鼠的公司说,中国一年的实验小鼠需求超过100亿人民币,最贵的小鼠超过10万元人民币一对。 该公司在广州工厂饲养了1万只小鼠,正在扩建上海工厂,可饲养10万只小鼠。下图是饲养车间。 2、世界最深的游泳池 波兰正在建造一个45米深的游泳池,预定今年晚些时候开放,这个游泳池包括水下洞穴和悬崖,用来训练专业的潜水员。同时,游泳池还会配备水下隧道,供那些不想下水的人参观。 目前,世界最深的游泳池是意大利的 Y-40 Deep Joy(下图),深度为40米。2020年,英国预计将建造一个更深的游泳池,深度为50米。 3、铅水管升级的新方案 很多以前的水管是铅水管,导致自来水的铅含量偏高,对人体有害。替换这些水管,往往需要很高的成本。美国的一个环境工程师提出了一个新方案,声称可以低成本地解决这个问题。 首先往自来水加入磷酸盐,然后在水管里面放置一根电线,水管和电线同时通电,让水管带有正电荷,电线带有负电荷。这使得水管迅速将带正电荷的铅离子释放到水中,与带负电荷的磷酸根离子形成固体磷酸铅晶体层。这种晶体层会凝结在水管内曾,将水与水管的铅隔离,防止铅溶解到水中。整个过程只需要几个小时。 4、樱花屋 每年三四月间,樱花盛开,日本赏樱的人数估计今年有6300万人(包含国内和国外游客),这已经日益成为一笔大生意。 三月底坐在樱花树下,还是比较冷的。一家日本公司于是推出"樱花屋"租赁服务,提供透明的塑料圆顶小屋,放在樱花树下,屋内暖气加热,并且还有一张咖啡桌。人们可以坐在小屋内,看着头顶的樱花飘落,又不会感到寒冷和潮湿。租赁一天的价格是80美元,相当于500多人民币。 5、两台显示器还是一台宽屏显示器? 程序员为了提高效率,往往需要较大的显示面积,可以同时显示多个窗口。最近有一项研究,调查哪一种情况效率比较高,两个显示屏,还是一个宽屏显示器?最后发现,两个显示器有助于提高效率,但是宽屏显示器可以减少扭头的次数和幅度,对颈椎健康有利。 6、锁定到2067年的 iPad(英文) 一个3岁小孩玩他爸爸的 iPad,由于不停地输错密码,iPad 被锁定2500多万分钟,相当于2067年才能再次使用。iPad 的设计是输错密码次数越多,就会锁定越长时间。 他爸爸上网征求网友意见,应该怎么办。目前来看,他好像只能进入DFU(设备固件更新)模式,重新刷新固件。 7、开车玩手机是新的酒驾 很多人开车的时候,会看手机。据统计,去年美国有6,227名行人,可能死于玩手机的司机。未来,玩手机成瘾的人可能会取代酒驾,成为公路上的最大威胁。 一项研究表明,玩手机的司机开车时,有10%以上的时间在看手机。这导致于他们反应速度大大下降,极容易导致事故。 8、一句话新闻 非洲猪瘟可能会使中国今年的猪肉产量下降30%(5亿头猪损失1.5亿至2亿头),这个数字相当于欧盟每年的猪肉产量。 富士康开始在印度组装 iPhone,据称印度工人的工资是中国的三分之一。 加州今年的监狱经费将达到114亿美元,平均每个犯人的成本是75,560美元,是全美最高的。如果罪犯不断增加的话,很快会连犯人也关不起。 美国停止公布核弹头的数量,上一次2017年公布时是3,822枚。据美国专家判断,俄罗斯有4,350枚核弹头。 文章 1、Arduino 入门(英文) Arduino 可以看做是一块可以编程的电路板。本文介绍它的基本知识,以及如何用它来控制 LED 发光二极管。 2、Python 图形界面开发(英文) Tkinter 是 Python 内置的 GUI 开发模块,本文一步步教你怎么使用。 3、为什么 request 项目进入维护状态?(英文) request 是最流行的 Nodejs 模块之一,用于发出 HTTP 请求。该项目现在进入了维护状态,不再开发了。作者解释说,这个模块历史太久了,又太流行,导致无法做重大修改,跟上语言的发展,现在是时候放弃它,尝试新的 API。 4、置信区间还是 P 值?(英文) 本文探讨了置信区间和 P 值,这两个统计学概念的异同。它们都用来评估统计发现的可信性。 5、创业公司如何才能不失败?(英文) 孵化器 YC 的创始人之一杰西卡·利文斯顿的演讲,列出她眼中创业公司成功的条件。 6、Quip 的历史(英文) Quip 是一个协同工作软件,2014年诞生,2016年被 Salesforce 以7.5亿美元收购。它的两个创始人,一个担任过 Facebook 的 CTO,另一个曾在Google领导工程和产品团队。 7、Evernote 为什么没能实现它的目标?(英文) 本文回顾了 Evernote 的历史,从诞生到快速发展,以及后来几个重大的决策失误,分析它的经验教训。 8、25年后重新采访 Linus Torvalds(中文) Linux Journal 杂志1994年创刊号采访了 Linus Torvalds,为了庆祝杂志诞生25周年又重新采访了他(英语原文)。上一次采访时,他还没结婚,现在有三个小孩,老大马上就要大学毕业。上一次,杂志问他有何梦想,他说希望 Linux 统治世界。现在,他说早就不开这种玩笑了,因为这话已经不像玩笑了。(@Y024 投稿) 9、什么是幂等?(英文) 幂等这个概念,指重复操作不会产生任何影响。比如,电梯重复按两次,不会有差异。分布式系统特别强调幂等,因为通信可能丢失,就会需要重复发信号。 10、使用 systemd 创建 Linux 服务(英文) 创建 Linux 服务相当容易:使用你喜欢的编程语言编写一个长期运行的程序,并使用 systemd 将其转换为服务。 11、访问 Chrome Dino 游戏的创造者(英文) Chrome 浏览器离线时,会出现一个恐龙跳跃的游戏。为了庆祝 Chrome 浏览器诞生10周年,谷歌官方博客采访了游戏的创造者,并且展示了恐龙头戴蛋糕的一个特别版。 软件 1、stylelint 一个 CSS 的 lint 工具。 2、ColorUI 专用于微信小程序的 UI 组件库,纯 CSS 组件。(@ifrontend-xyz 投稿) 3、leon 一个开源的个人助理,类似 Siri,可以与你英语对话。(@ifrontend-xyz 投稿) 4、cleave.js 一个对输入框中用户输入的内容,进行格式化的 JS 库。(@ifrontend-xyz 投稿) 5、mas Mac 应用商店的命令行界面,可以用来从命令行安装 MacOS App。(@ansiz 投稿) 6、AP Studio 一款新的 Android 开发 IDE。 7、datash 直接从浏览器发送和接收"端对端"加密的文件。 8、scrapydweb Python 爬虫框架 Scrapyd 集群管理的全功能 web UI,支持 Scrapy 日志分析和可视化、自动打包、定时器任务和邮件通知等特色功能。(@my8100 投稿) 9、dropcss 一个清理样式表里面无用的 CSS 代码的工具。 10、brickr 该软件可以生成 3D 的乐高积木图像,使用 R 语言编写。 11、Pock 把 Mac 电脑的 Dock 放到 TouchBar 的工具。(@Y024 投稿) 12、微软新闻 微软最新推出的个性化新闻的 App,有繁体中文版,底层是微软为旗下所有产品统一的新闻引擎。 资源 1、如何构建一个简单的数据库 英文的开源电子书,介绍如何用 C 语言实现一个类似 sqlite 的数据库。 2、简单逻辑 免费电子书,通过实例介绍如何通过 Prolog 语言实现智能推理。 3、libpku 北京大学各种课程资料收集,目前已经接近100门课,让你在网上读北大。(@Y024* *投稿) 4、Programming Notes for Professionals books 该网站提供各种免费计算机教程下载。(@zhjp0 投稿) 5、神经网络与深度学习 复旦大学邱锡鹏老师的开源电子书,主要介绍神经网络与深度学习的基础知识、主要的模型,以及在计算机视觉、自然语言处理等领域的应用。(@ifrontend-xyz 投稿) 6、创意共享图像搜索引擎 创意共享基金会推出的官方图像搜索引擎,索引了3亿张图片,都可以免费使用。素材主要来自 Flickr 和 Behance,下一步会把维基百科的图片放进来。 文摘 1、费曼的故事 有一天,物理学家艾伦·莱特曼和他的两个研究生,在加州理工学院的食堂一起吃饭,谈论他们刚刚做的计算:如果把一束光照向一个正在旋转的黑洞,根据计算,角度合适的话,光有可能从黑洞反弹出来,并且带有比进入黑洞时更多的能量。 费曼在旁边听到了谈话,插话说:"你们描述的那个过程,听起来非常像量子的受激发射。" 吃完饭,大家边走边谈,来到艾伦·莱特曼的办公室,一个小小的房间。费曼走到黑板前,开始研究黑洞发射能量的方程式。到目前为止,人们一直认为所有的黑洞都是全黑的,因为黑洞本身不会释放任何能量。但费曼在午餐时听了谈话之后假设,如果旋转的黑洞能够随着光的进入发光,那么根据量子力学,它也可以在没有任何物质的情况下发射能量。 几分钟后,费曼已经在黑板上,写出了黑洞释放能量的方程式。他没有兴趣抄下他写的东西。他只是想知道大自然是如何运作的,而他刚刚得出结论,考虑到量子效应时,孤立的黑洞能够发射能量。他完成了计算后,拍了拍手,把粉笔灰弄掉,然后走出了办公室。 费曼离开后,艾伦·莱特曼和学生看着黑板,一致认为这可能很重要,但是不知道有多重要。学生还有事,不得不离开了办公室。过了一会儿,艾伦·莱特曼也离开了。但是那天晚上,他意识到这是费曼的重大成果,他需要快点回到办公室,把方程式抄写下来。但是当第二天早上,他回到办公室时,清洁工已经把黑板擦干净了。 第二年,斯蒂芬·霍金发表了同样的结论,因此一举成名。没有人知道,费曼在一年前就得出了这个结论。 2、变压器里面的油脂 我在加州帕洛阿托市中心的一座漂亮的办公楼里工作,周围环绕着餐馆、酒店。我们是一家电脑公司,所在的办公楼需要大量电力,大约是100万瓦。 为了给办公楼提供100万瓦的电力,需要一个非常大的变压器,跟一辆小汽车差不多大小。由于这里是市中心,地面上没有空间,因此变压器被置于地下。马路下面挖了一个空间,放置变压器。 一百万瓦的变压器会产生大量的热量,为了保证通风散热,地面设置了一些通风口,加上了铁栅栏,不知道的人会以为那是下水道。 不久前,这条马路附近的户外休息区,出现一种难闻的气味。卫生部门接到了投诉,他们很快确定,气味是由渗入人行道的腐臭的油引起的。进一步的调查表明,臭油的来源正是放置变压器的地下空间。那里的油是熔化的食用油脂,变压器的热量使得那些油始终是液态的。整个地下空间完全装满了使用过的食用油脂,大约2000加仑,它们已经把变压器淹没了。 警方很快找到了原因。很多年以来,每天晚上,附近的一家餐馆都在夜深人静时,偷偷将用过的油倒入变压器的地下空间,以为油会流入下水道。当然,油脂倒入下水道是违法的,但那家餐馆可能认为不会被抓住。 变压器周围的油脂是非常危险的,一旦过热可能会引发火灾,油脂都是易燃品。 市政府不得不将周围三个街区停电,将油脂抽干净,更换了变压器。市政府表示,除了对肇事餐馆罚款,还会考虑密封变压器所在的地下空间。 图片 1、D21 无人机 D21 是美国的一种高空超音速无人侦察机,1962年开始生产,到1971年项目取消之前,一共生产了38架。 D21 的最后一次飞行是1971年3月20日,用于对中国进行高空侦察,最后坠毁在云南省,残骸被保留了下来。2010年,当作垃圾存放多年以后,终于在中国航空博物馆公开展出。 2、光学电报 伦敦到朴茨茅斯大约100公里。1796年,如果从朴茨茅斯传递一个消息到伦敦,猜猜需要多少时间?答案是十五分钟。这是用下面的设备完成的。 英国海军沿途设置了若干个信号站。每个信号站有六个旋转的板,可以通过绳索控制正面和反面,因此相当于提供一个6位二进制代码,允许传输63个非零状态。这些被分配为字母表中的26个字母,十个数字和一些有用的预设句子,例如"立即击败法国海军"。 上图是两个粗壮的士兵在绳索上传送消息,而右边的那个人接收来自下一站的信息。两个信号站的平均距离约为16公里。 这样的光学电报显然容易受到雾和其他天气影响。但是根据统计,每年至少200个白天,这套系统可以工作。 言论 1、 比特币其实只是一个计算机程序。这个程序连接到其他运行该程序的计算机,所有计算机都共享一个文件,该文件称为区块链。 -- 《什么是比特币?》 2、 我认为,2017年的时候,硅谷已经不再适合创业公司了。但是由于廉价种子资金的大量增加,使得这一点不那么明显。 -- Sam Altman,创业孵化器 YC 的总裁 3、 这八家公司(Facebook,苹果,微软,亚马逊,谷歌,腾讯,百度和阿里巴巴)每一家的市值,都超过了日本和欧元区任何一家公司的市值。 -- 《社会急需另一个互联网》 4、 根据我的个人经历,用来思考竞争对手的每一分钟,都是浪费掉的。 -- Paul Graham 5、 有些公司希望做能够在两三年内获利的事情,如果一件事在两三年内不见效,他们就会转向其他事情。所以,他们专注的主要是竞争对手,而不是客户。 -- Jeff Bezos 回顾 去年的本周:《每周分享第 2 期》 订阅 这个专栏每周五发布,同步更新在我的个人网站、微信公众号和语雀。 微信搜索"阮一峰的网络日志"或者扫描二维码,即可订阅。 (完) 文档信息 版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证) 发表日期: 2019年5月 3日


每周分享第 53 期

这里记录过去一周,我看到的值得分享的东西,每周五发布。 欢迎投稿,或推荐你自己的项目,请前往 GitHub 的 ruanyf/weekly 提交 issue。 日本东京最近举行了一次"DNA 相亲会"。参加活动的男女互不认识,婚介公司根据双方 DNA 的相配程度,介绍他们见面。 这种相亲的依据是,根据 DNA 测序,如果基因高度相似或者互补,那么双方很可能就是相配的。报道说,参加者都认可这种想法,觉得比起其他方法,这样找相亲对象,可能效率更高一点,更可能找到合适的人,以后分手的可能性也会比较小。 如果这种方法可行,那么不久的将来,相亲节目和相亲网站也许都将不存在。只要 DNA 配型合适,你们就开始约会吧。 而且还不止于此,一家公司所有员工的 DNA,进行加总计算,就可以得到这家公司的"平均 DNA"。以后入学或者找工作,有可能都要测 DNA。要是你跟本单位的 DNA 不相配,对不起,只能请你另找别家了。 新闻 1、OpenStreetMap 获奖 2019年3月23日,自由软件基金会 FSF 正式将2018年的自由软件奖,颁发给 OpenStreetMap。理查德·斯托曼亲自颁奖。该奖项表彰显著造福社会、或者表达了自由软件运动理念的自由软件。 OpenStreetMap 是一个协作项目,用于创建可自由编辑的世界地图。它创立于2004年,目前拥有超过一百万社区成员参与编辑,已经有数千个网站、手机 App 和硬件设备上使用了它。它是唯一真正不受限制,可以自由使用的全球地图服务。 2、三个数的立方和问题 长久以来,数学家一直想知道,哪些整数可以写成 x^3 + y^3 + z^3 的形式,比如 29 等于 27 + 1 + 1,而 32 已经证明是不可能的。目前,小于 100 的整数里面,只有 33 和 42 无法确定能否写成三个数的立方和。 最近,一个澳大利亚数学家终于找出了三个整数,它们的立方和等于 33。 (8,866,128,975,287,528)³ + (-8,778,405,442,862,239)³ + (-2,736,111,468,807,040)³ = 33 3、加拿大政府资助"超循环"研究 加拿大运输部发布了一个招标公告,由政府出资,请研究机构评估所谓的"超循环"技术(hyperloop)。这种技术设想使用巨大的真空管,降低摩擦,从而高速移动人员和货物,预计速度可以达到1,000公里/小时,从加拿大东岸到西岸,只要三个小时,比飞机还要快。 加拿大政府想知道两个关键问题:该技术是否可行且安全?成本与传统高速铁路相比如何? 4、这张人像照片是伪造的吗? 现在的人像照片,已经无法确定真人还是假人。有人就收集了几十万张假人的照片,都是算法生成的,然后提供服务。你上传照片,系统返回长相相似的假人照片。上图左边是上传的照片,右边是系统返回的假人照片。 5、世界上最厚的流体和最久的实验 加拿大昆士兰大学的 Pitch Drop实验,是世界历时最久的实验,从1927年开始,到现在还没有结束。该实验由包含在玻璃漏斗中的黑色沥青组成,用来表明沥青实际上不是固体,而是一种非常粘稠的液体,是世界上最厚的流体,粘度约为水的1000亿倍。 沥青从玻璃漏斗里面,慢慢往下滴落。从1930年至今,一共滴下了9滴。最新的一滴是在2014年4月,预计第10滴将在2020年代的某个时候发生。 6、接听推销电话也能赚钱 英国一男子对于推销电话忍无可忍,注册了一个服务收费号码。这种号码要向拨入者收取服务费,常用于心理咨询之类的热线。该男子将这个号码,当作自己的联系电话,留作各种外部服务的联系电话。 这个号码的成本是10英镑,如果有人拨打这个号码,会被收取每分钟10便士。据该男子说,两年里面获利了300英镑。 7、一句话新闻 中国政府修订职业目录,新增13个职业,其中包括电子竞技员和电子竞技运营师。这意味着,玩电子游戏也是政府承认的正式职业。 美国科学家让已经死亡四个小时的猪脑,重新恢复了呼吸功能,但是没有出现意识。此事动摇了死亡的定义,如果死去的大脑是可以恢复生物功能的,那么这算死了吗? 丰田公司公开23,740项电动汽车和混合动力汽车的专利,供其他公司免费使用。由于大部分是混合动力汽车的专利,有人猜测丰田的动机是,使得混合动力汽车不会那么快被淘汰。 国家发改委发布《产业结构调整指导目录(2019年本,征求意见稿)》,将虚拟货币"挖矿"活动列入淘汰类行业。这意味着,中国可能禁止加密货币挖矿。 Game Boy 于1989年4月21日发布,今年是30周年纪念日。 Vue 免费视频课程 非常感谢 开课吧 赞助本期周刊。 2017年开始,Vue.js 迅速发展,用户数和粉丝量呈指数式增长。前端面试时,问题涉及 Vue 框架的次数已经不亚于当年的 jQuery。 对于那些不熟悉 Vue 的同学,这里有一份价值 1299元 的最新 Vue视频课程,可以 免费领取 。 课程内容包含 Vue 基础、Vue 高阶应用、Vue 项目实战 等部分。知识点比较全面,帮助你由浅入深的掌握 Vue 框架。下面是视频课程的完整内容,滑动查看 。 这套 Vue 视频由 开课吧 提供,属于精品付费课程《Web全栈架构师》的一部分。大家熟知的廖雪峰加盟开课吧,耗时半年研发了该课程,帮助初级前端工程师实现全方位进阶。课程深度对标百度P6+,适合有1-4年经验的前端程序员学习。 微信扫描下面二维码,领取视频课程,本期只有500个免费名额,欢迎添加。其他问题也可以微信咨询。 希望大家拿到课程后,能够认真看完,不要放着当做收藏。 文章 1、加强 Linux 服务器安全的七个步骤(英文) 自己架设 Linux 服务器的时候,按照本文的步骤,可以防止90%以上的攻击。 2、提高《星际迷航》的分辨率(英文) 机器学习已经可以将一幅低分辨率图像,提升为高分辨率图像。作者使用这项技术,尝试将早年一部 480p 的电视剧,提升为 1080p 高分辨率。 3、全文搜索的相关性评分(英文) 搜索结果一般按照相关性进行排序,某篇文章与你的搜索词相关性最高,就会排在第一位。相关性是怎么计算的,通常是使用 TD-IDF,但是更高级的算法使用 Okapi BM25。 4、Node.js 的多线程指南(英文) JavaScript 是单线程语言,但是 Nodejs v10.5.0 版本增加了 worker_threads 模块,使得 Node 也支持多线程。 5、如何无限延长一首歌(英文) 作者使用马尔可夫链将一首5分钟的歌,延长到了一个小时。多出来的部分都由软件自动生成。 6、Fuchsia OS 简介(中文) Fuchsia OS 是谷歌正在开发的下一代操作系统。本文是许中兴博士在开源开发工具大会 HelloGCC 2018上发表的一个关于 Fuchsia 的精彩演讲。 7、Nodejs 控制无人机(英文) 本文介绍如何编写 Nodejs 服务控制无人机,但是使用无人机品牌不是大疆。 8、日志记录的最佳实践(英文) 如果狗是男人最好的朋友,那么日志就是软件工程师最好的朋友。本文介绍日志的一些最佳实践,文后附有幻灯片,幻灯片比文章本身更有价值。 9、树莓派搭建空气质量监视器(英文) 本文是树莓派教程,附有示例代码,演示如何搭建一个空气质量监视器(需要自购传感器)。 10、芯片里面有什么?(英文) 芯片可以被认为是一个黑盒子,你通常不会看到它的内部。本文将展示如何打开芯片,看看里面是什么。 软件 1、freeciv-web 仿照《文明》的开源 Web 实时战略游戏,可以单人或多人在浏览器里面玩。 2、Kdenlive 一个功能强大的开源的视频编辑器,主要针对 Linux 系统,但是 Mac 和 Windows 也可以安装。 3、此简历不存在 该网站使用人工智能生成不存在的简历。 4、QuickDraw 谷歌 QuickDraw 功能的开源实现,可以识别随手画出的图形。 5、cloudconvert 在线文件格式转换工具,支持218种格式文件的转换。(@shallynever 投稿) 6、handtrack.js 一个在浏览器中进行实时手部检测的 JS 库。(@rolitter 投稿) 7、jsweet 一个 Java 工具,可以将 Java 代码转为 TypeScript/JavaScript 代码。 8、Pi API 谷歌推出的服务,可以获取指定位置的圆周率,比如圆周率的小数点后第10000位是7。 9、code-server 运行在服务器上的 VS Code 服务,支持大部分插件,可以在浏览器里面远程使用。 10、Commento 一个类似 Disqus 的开源评论服务。 11、Server酱 一个将服务器消息推送到微信的免费工具。(@Ming-Lei 投稿) 资源 1、manypixels 一个收集无版权插图的网站,提供 SVG / PNG 格式下载,并且允许更改颜色。 2、leetcode 记录个人 leecode 解题之路的笔记库,使用 JS 语言。(@azl397985856 投稿) 3、Automate the Boring Stuff with Python 免费电子书,Python 语言的入门和初级应用。(@nosarthur 投稿) 4、955.WLB 该仓库收集国内不加班的 IT 公司名单。(@ifrontend-xyz* *投稿) 5、I love PDF 该网站提供各种免费的 PDF 在线工具,比如合并、拆分、压缩、Office 文件转 PDF、PDF 转图片等。(@ifrontend-xyz 投稿) 文摘 1、美国互联网的中心位置 距离堪萨斯州威奇托市一小时车程的地方,有一个叫 Potwin 的小镇,那里是一个360英亩的农场,主人是现年82岁的 Joyce Taylor。 过去十年,她遇到了很大的麻烦,被指控为垃圾邮件发送者和诈骗犯,联邦调查局特工、联邦警察、州警察、国税局都找过她。有一次,有人在车道上留下了一个破损的马桶,这是一种奇怪的威胁。 这一切都是因为 MaxMind 公司的 IP 定位服务的一个错误。该公司提供每个 IP 地址的物理位置。有时候,只能知道 IP 地址属于某个大致的地理范围,得不到确切的地址。为了处理这种不精确性,MaxMind 决定在城市、州和国家的层面设置默认位置,以便反映 IP 地址的大致位置。如果它只知道某个 IP 地址在美国,并且无法弄清楚它在何处,那么它就显示美国的地理中心。 美国的地理中心位于堪萨斯州北部,确切地说,中心点的坐标为 39°50'N 98°35'W。MaxMind 决定简化这个坐标,采用 38°N 97°W 作为美国 IP 地址的默认地点。过去的14年中,每次有人查询无法识别的美国 IP 地址的位置时,它就会显示这个地点的坐标。现在有超过6亿个 IP 地址与该坐标相关联。如果有人发垃圾邮件或者从事互联网诈骗,MaxMind 的数据库就会现在他们的位置是38.0000,-97.0000。 这正是 Joyce Taylor 的农庄地址。得知这个问题以后,MaxMind 已经更新了数据,从而让农庄恢复平静。 2、谈谈 To B 业务的难点 为什么 To B (企业服务)业务在中国很难做? 首先,很多人可以影响企业客户的购买决策。一个企业要买一套管理系统,决策的可能是业务负责人,也可能是主管信息化的副总裁。他们的诉求很可能不是企业利益最大化,而是他自己及他的部门在企业内的话语权、存在感。如果你连诉求都没搞清楚,你怎么可能拿到订单? 再举一个例子,你认为销售部门使用了你的软件,老板能更容易地掌握他们的业绩和效率,因此销售部门会赞成购买你的软件。但是,销售骨干不一定希望老板掌握他的实际情况。为了自己的利益,他抵触你的系统,最终你就无法完成这个系统的实施。 一个大企业的决策负责人,往往是企业高管或中层。选择 To B 产品的时候,他并不只是从业绩出发,还会考虑自己的风险。我选择上市巨头A公司的产品,如果出了问题,那是 A 公司的问题,不是我的问题,因为人家是上市公司,行业领先者,老板不会说我什么。但如果我选了创业企业 B 公司的产品,如果出了问题,那肯定是我的问题,老板会觉得你怎么选这么一个不靠谱的产品,你是不是拿了人家好处什么的。所以,决策者评估这种信用风险的时候,他们宁可选择对他们而言,风险最低的产品和服务方案。 大部分 To B 产品都是为了老板服务的,而对员工来说,这意味着更多负担和约束,所以他们不喜欢、也不感兴趣你的产品。我知道有不少老板抱怨,他们员工非常不喜欢用钉钉。对于普通人而言,他们为了游戏、娱乐所投入的时间和精力,远大于为了工作和学习投入的时间和精力,也就是说,你不能指望公司职员用玩游戏的精神去研究你的产品。 图片 1、非洲最后的巨齿象 Tusker 象生活在肯尼亚草原。它是非洲最后一种有着巨大牙齿的大象。专家认为,这种大象现存可能不到20只。许多自然保护主义者认为,自己的使命就是让这些大象在偷猎者手中幸存下来,不要死于陷阱、子弹或毒箭。 2、第一款 iPhone 的原型 2007年6月,苹果公司发布 iPhone。此前的两年半,他们一直在秘密研发 iPhone,没有泄露任何消息。 现在,当初研发 iPhone 的原始开发板泄露出来了。你看到这块板子,绝对想不到苹果公司在研发手机。 言论 1、 软件行业是一个年轻的行业,谷歌和亚马逊的员工平均年龄是30岁。全球10万名程序员的2018年 Stack Overflow 调查发现,四分之三的人未满35岁。 尽管技术领域的起薪很高,但是年轻人的优势在就业的前十年就会减少一半。2017年的一份报告发现,50岁以上的技术工人的工资实际上低于年轻人。 -- 《老程序员的按计划淘汰》 2、 "JS 疲倦"发生在人们使用他们不需要的工具,来解决他们没有的问题时。 -- 《JavaScript 疲倦的终极指南》 3、 有些人说,他们更喜欢纸书,而不是电子书。这可能因为纸书是有机物质组成的,那些物质包含了热、光、水分,在生产过程中发生化学反应,产生独特的旧书气味。纸张释放出数百种挥发性有机化合物,让人觉得有大自然的感觉。 -- 《为什么旧书有味道》 4、 现在是2019年,你可以从亚马逊租用 CPU,每小时约2.5美分。换句话说,使用 CPU 每小时的费用,比美国最低工资雇佣一个人便宜约300倍。 -- 《为什么 CPU 时间不值钱?》 5、 以前在台湾拍电影,感觉跟学生时代差不多。一个原因是酬劳,付给你的钱不足以要求你去承担什么责任,我们只是凭着对电影的喜好,拼命去做。 后来为好莱坞拍电影,他们付的薪水,让我觉得真的可以养家糊口、能置产。拍完《理性与感性》后我才第一次在美国缴税,记得第一张支票是18万美元,我手软得都签不下去。 -- 李安《十年一觉电影梦》 6、 面向对象编程的问题是,默认带有环境。你只想要一个香蕉,但是得到了一只拿着香蕉的大猩猩,甚至还有整个丛林。 -- 计算机语言大师 Joe Armstrong,2019年4月20日去世。他非常不喜欢面向对象编程,发明了函数式语言 Erlang。 回顾 去年的本周:《每周分享第 1 期》 订阅 这个专栏每周五发布,同步更新在我的个人网站、微信公众号和语雀。 微信搜索"阮一峰的网络日志"或者扫描二维码,即可订阅。 (完) 文档信息 版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证) 发表日期: 2019年4月26日


GitHub OAuth 示例教程

这组 OAuth 系列教程,第一篇介绍了基本概念,第二篇介绍了获取令牌的四种方式,今天演示一个实例,如何通过 OAuth 获取 API 数据。 很多网站登录时,允许使用第三方网站的身份,这称为"第三方登录"。 下面就以 GitHub 为例,写一个最简单的应用,演示第三方登录。 一、第三方登录的原理 所谓第三方登录,实质就是 OAuth 授权。用户想要登录 A 网站,A 网站让用户提供第三方网站的数据,证明自己的身份。获取第三方网站的身份数据,就需要 OAuth 授权。 举例来说,A 网站允许 GitHub 登录,背后就是下面的流程。 A 网站让用户跳转到 GitHub。 GitHub 要求用户登录,然后询问"A 网站要求获得 xx 权限,你是否同意?" 用户同意,GitHub 就会重定向回 A 网站,同时发回一个授权码。 A 网站使用授权码,向 GitHub 请求令牌。 GitHub 返回令牌. A 网站使用令牌,向 GitHub 请求用户数据。 下面就是这个流程的代码实现。 二、应用登记 一个应用要求 OAuth 授权,必须先到对方网站登记,让对方知道是谁在请求。 所以,你要先去 GitHub 登记一下。当然,我已经登记过了,你使用我的登记信息也可以,但为了完整走一遍流程,还是建议大家自己登记。这是免费的。 访问这个网址,填写登记表。 应用的名称随便填,主页 URL 填写http://localhost:8080,跳转网址填写 http://localhost:8080/oauth/redirect。 提交表单以后,GitHub 应该会返回客户端 ID(client ID)和客户端密钥(client secret),这就是应用的身份识别码。 三、示例仓库 我写了一个代码仓库,请将它克隆到本地。 $ git clone git@github.com:ruanyf/node-oauth-demo.git $ cd node-oauth-demo 两个配置项要改一下,写入上一步的身份识别码。 index.js:改掉变量clientID and clientSecret public/index.html:改掉变量client_id 然后,安装依赖。 $ npm install 启动服务。 $ node index.js 浏览器访问http://localhost:8080,就可以看到这个示例了。 四、浏览器跳转 GitHub 示例的首页很简单,就是一个链接,让用户跳转到 GitHub。 跳转的 URL 如下。 https://github.com/login/oauth/authorize? client_id=7e015d8ce32370079895& redirect_uri=http://localhost:8080/oauth/redirect 这个 URL 指向 GitHub 的 OAuth 授权网址,带有两个参数:client_id告诉 GitHub 谁在请求,redirect_uri是稍后跳转回来的网址。 用户点击到了 GitHub,GitHub 会要求用户登录,确保是本人在操作。 五、授权码 登录后,GitHub 询问用户,该应用正在请求数据,你是否同意授权。 用户同意授权, GitHub 就会跳转到redirect_uri指定的跳转网址,并且带上授权码,跳转回来的 URL 就是下面的样子。 http://localhost:8080/oauth/redirect? code=859310e7cecc9196f4af 后端收到这个请求以后,就拿到了授权码(code参数)。 六、后端实现 示例的后端采用 Koa 框架编写,具体语法请看教程。 这里的关键是针对/oauth/redirect的请求,编写一个路由,完成 OAuth 认证。 const oauth = async ctx => { // ... }; app.use(route.get('/oauth/redirect', oauth)); 上面代码中,oauth函数就是路由的处理函数。下面的代码都写在这个函数里面。 路由函数的第一件事,是从 URL 取出授权码。 const requestToken = ctx.request.query.code; 七、令牌 后端使用这个授权码,向 GitHub 请求令牌。 const tokenResponse = await axios({ method: 'post', url: 'https://github.com/login/oauth/access_token?' + `client_id=${clientID}&` + `client_secret=${clientSecret}&` + `code=${requestToken}`, headers: { accept: 'application/json' } }); 上面代码中,GitHub 的令牌接口https://github.com/login/oauth/access_token需要提供三个参数。 client_id:客户端的 ID client_secret:客户端的密钥 code:授权码 作为回应,GitHub 会返回一段 JSON 数据,里面包含了令牌accessToken。 const accessToken = tokenResponse.data.access_token; 八、API 数据 有了令牌以后,就可以向 API 请求数据了。 const result = await axios({ method: 'get', url: `https://api.github.com/user`, headers: { accept: 'application/json', Authorization: `token ${accessToken}` } }); 上面代码中,GitHub API 的地址是https://api.github.com/user,请求的时候必须在 HTTP 头信息里面带上令牌Authorization: token 361507da。 然后,就可以拿到用户数据,得到用户的身份。 const name = result.data.name; ctx.response.redirect(`/welcome.html?name=${name}`); (完) 文档信息 版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证) 发表日期: 2019年4月21日


每周分享第 52 期

这里记录过去一周,我看到的值得分享的东西,每周五发布。 欢迎投稿,或推荐你自己的项目,请前往 GitHub 的 ruanyf/weekly 提交 issue。 据报道,汉王科技开发了一个"课堂呵护系统",已经在北京牛栏山一中、内蒙古赤峰四中等全国七所学校试点。 该系统在黑板上方安装了一个摄像头,上课时每秒对整个班级拍摄一张照片,然后进行人脸识别,判断谁在专心听课,谁在开小差,谁在讲悄悄话,以及谁在睡觉。 老师打开电脑或手机,可以查看统计结果。每个学生名字后面都有一个图形,红色的向上三角形,表示该学生本周专心听课时间上升,绿色的向下三角形表示下降。 该系统单个教室的安装成本是3万元人民币,学校不需要出钱,所有费用由当地教育局提供财政补助,作为在学校推广人工智能和大数据的体现。除了汉王公司,杭州的海康威视也开发了类似的"智能教室行为管理系统",采样频率低一点,每30秒才拍摄一次照片。 我想,以后不仅是学校,政府机关、公司、工厂应该也会安装类似系统,对员工进行不间断的人脸识别,评估他每天有多少时间在安心工作。这比上下班打卡,对企业更有利。 新闻 1、飞机上的摄像头 一位乘客发现,新加坡航空的座椅背面,液晶屏幕下面居然有摄像头。他把照片发到推特,引起一片哗然。新加坡航空不得不出面解释,这只是客机娱乐系统的标配,未来打算用于跟乘客互动,比如识别手势。新加坡航空称,从未启用摄像头,今后也不会用来监视用户。 但是,人们还是担心,黑客有可能控制这些它们,从而掌握乘客的一举一动。 2、开普勒望远镜的最后一张照片 2009年3月,美国发射了开普勒望远镜,用于观察太阳系外的行星。十年来,这架望远镜逐渐失灵,2018年9月25日,它拍摄了最后一张照片(上图),然后就不再工作了。 上图拍摄了水瓶座,缺少一些方格是因为相机的某些部分已经坏了。这个望远镜目前不再跟地球通信,从此永远围绕太阳公转。 3、种植肉 历史上,人类通过养殖动物得到肉类。现在越来越多的团队开始研究,能否像种植植物那样,把肉类种植出来。英国巴斯大学的团队,在叶子上种植了猪肉细胞;美国一家名叫 Just 的公司表示,它能够从鸡肉羽毛提取的细胞中,培养出鸡肉。 种植肉主要通过细胞分裂产生,最终产物是纯肌肉组织,基本上是瘦肉末。理论上,种植肉跟养殖肉的成分是一样的,但是为了得到相同的口味,需要添加脂肪细胞和结缔细胞。一旦种植肉证明在商业上可行,就会得到大规模推广。 4、横跨美国的列车 美国现在没有东西横穿全国的列车,19世纪淘金时代有,现在没有。如果你一定要坐火车,从东岸的纽约直到西岸的洛杉矶,并且愿意忍受中途换车,那么这2,448.8英里(相当于上海到乌鲁木齐)一共需要花费整整三天(67个小时),整趟行程的票价是1,089美元。 5、流媒体超过电视 美国电影协会 MPAA 宣布,2018年流媒体首次超过电视。美国人有52%的时间看网上视频,48%的时间看电视。 全球范围内,流媒体新增了1.312亿用户,用户总数达到6.133亿人,相比之下,有线电视用户下降了2%,达到5.56亿。另外,流媒体也挤压了 DVD 和蓝光光盘,美国的销售量2018年下降了15%。目前看来,五到十年内网络流媒体就会淘汰有线电视。 6、清江古生物化石 中国科学家在湖北省清江流域,发现了一处大型的古生物化石遗址,已经挖掘了2万多块化石。这些化石距今大约5.18亿年,其中是许多是软体生物。它们柔软的身体组织,包括皮肤、眼睛和内脏,都"精美地"保存完好。下图就是水母和节肢动物的化石,保存得极其完好,触须都清晰可见。 这些化石的珍贵之处在于,软体动物(比如水母和蠕虫)通常不会变成化石。大多数化石都是硬体动物,因为较硬的物质(比如骨头),不太可能腐烂和分解。清江生物群可能是由于突然的风暴,被迅速埋在沉积物中,才能使软组织得到很好的保存。 7、监控驾驶员 汽车的人工智能一般只用于判断车外环境,但是沃尔沃汽车反其道行之,将人工智能用于车内。2020年开始,每一辆出厂的沃尔沃汽车都会带有车内摄像头,专门观察驾驶员的眼睛。 如果发现驾驶员分心,没有专心开车,将以声音和视觉的形式发出警告,例如仪表盘闪烁和发出嘟嘟声。如果驾驶员继续不专心,汽车将自行减速。如果依然无效,汽车将自动靠边停车。另外,还有算法判断驾驶员是否饮酒,如果发现有饮酒迹象,将不允许驾驶。 8、一句话新闻 苹果公司宣布,终止对高通公司的所有诉讼,并向其购买 5G 芯片。随后,Intel 公司宣布放弃 5G 研发,因为它的 5G 芯片的唯一客户就是苹果公司,现在也没了。 全世界74亿人口如果都住在一起,最小需要多少空间?历史上,人口密度最大的地方是香港的九龙城寨,1平方公里住了120万人。据此计算,6000多平方公里就够了,相当于上海市的面积。 爱达荷州的太阳能发电创下美国价格最低记录,每度电2.175美分(相当于人民币0.146元)。该价格是发电厂的价格,居民支付的价格会更高一点。 挪威三月份的新车销售总共18,375辆,其中10,732辆为电动汽车,占比58%。电动车比例是全世界最高。 文章 1、魔兽世界的玩家去世以后(中文) Robert Steen (上图)的儿子患有重病,无法行走,不幸在2014年去世,只有25岁。去世以后,父亲发现儿子的笔记本上有《魔兽世界》的密码,才发现儿子是一个资深玩家,他用这个密码登陆,把死讯告诉儿子在游戏里面的好友,结果,葬礼上,欧洲各国的魔兽玩家都来了。 2、为什么亚马逊河不能架桥?(英文) 亚马逊是世界最长的河流之一,但是整条河没有一座桥,这是为什么? 3、什么是 Wayback Machine?(英文) Wayback Machine 是一个庞大的网页数字档案库,为全世界的网页存档。该项目于1996年启动,目前保存了100亿个快照,数据量达到 30PB,另外还有 30PB 备份。 4、类型正在向右移动(英文) 以前的编程语言,类型声明都是写在变量的左边,比如 int count 。但是,现在越来越多的编程语言,将类型声明写在变量的右边,比如 count:int ,这是为什么? 5、运动追踪的红外线加热器(英文) 作者自己动手,将一个普通的红外线加热器,接上了树莓派,加装了一个摄像头,实时捕捉和识别走动的人体。不管人走到哪里,加热器就会自动转到那个方向,对着人进行加热。 6、我作为工程师的报酬(英文) 一个美国工程师回顾自己的薪水增长,2007年他作为 IT 管理员,年薪是4.2万美元,2018年他变成了架构师,年薪是18.9万美元。许多网友看了他的文章,也纷纷留言,写下自己的年薪变化。 7、10个 Homebrew 软件包(英文) Homebrew 是 Mac 系统的软件包管理器,可用于安装 Unix 软件包。本文推荐10个值得安装的软件包。 8、Java 语言的 null 是一个设计错误(英文) Java 语言的 null 值导致了很多问题,本文解释为什么 Java 的设计是错的,而 Kotlin 的设计是对的。 9、如何安装 Alpine Linux 的桌面(英文) Alpine 是一个极度瘦身的 Linux 发行版,只有 5MB 左右,主要用于制作 Docker 镜像文件。本文介绍 Alpine 的基本知识,如何安装一个基于它的桌面开发环境。 10、未来没有 Webpack 的前端开发(英文) 现在的 Web 应用,一般都需要使用 Webpack 打包脚本。但是,浏览器已经支持 ES6 模块,能够自行处理模块的依赖,因此完全可以跳过打包这个步骤。 11、996.icu 事件的可视化(视频) 这段90秒的视频,帮你回顾 996.icu 事件的全过程。(@jdk137 投稿) 12、Edge 变成 Chromium 意味着什么?(英文) 微软的 Edge 浏览器内核从自研变成了 Chromium,现在 Windows 系统预览版已经发布了。与原来相比,到底新增了哪些功能? 软件 1、ink 使用 React 语法开发富交互的命令行应用的 JS 库。 2、QuickChart 通过 URL 生成图表的开源服务。 3、vuepress-theme-reco VuePress 的一个主题,为博客定制。(@recoluan 投稿) 4、koa-mapper koa-router 模块的替代品。(@helloyou2012 投稿) 5、GitPress 文档的 git 仓库直接发布成静态网站的工具。(@pad0van 投稿) 6、code-server 开源的 VS Code 在线版,支持大部分 VS Code 插件 。(@Y024 投稿) 7、UserLAnd 安卓手机安装 Linux 发行版的 App。 8、ArchiveBox 网页离线储存工具,可以将一个网页的所有资源(HTML、JS、 图片、PDF 等)都下载下来,打包成 Web Archive 格式。 9、instagram.css 一个 CSS 开源库,提供纯 CSS 的 Instagram 滤镜实现。(@ifrontend-xyz 投稿) 10、devices.css 一些主要的电子消费产品外观图片的 CSS 实现。(@ifrontend-xyz 投稿) 11、AutoPiano 自由钢琴,HTML5 技术开发的网页钢琴应用。可以自动演奏曲谱,同步显示琴键的位置。(@WarpPrism 投稿) 12、workbase-server 一个国产的开源企业通信套件,包括私有部署的邮件和聊天解决方案,并提供手机端。可以把它当做自建的 Slack。(@wanglian 投稿) 资源 1、中国哲学古籍电子化计划 免费的线上图书馆,提供中国古籍电子版,已收藏超过3万本著作,约50亿字。(@nosarthur 投稿) 2、Chrome 插件英雄榜 该项目收集优秀的 Chrome 浏览器插件,并为它们写中文说明书。(@zhaoolee 投稿) 3、Ops School 运维工程师的培训资料库,介绍各种运维的基础知识。 4、维米尔全部画作 17世纪荷兰画家维米尔以精确还原生活场景而著称,他一共留下了36幅作品,全部收集在这个网页。 5、好奇者的量子计算入门 英文的开源教程,介绍量子计算的基本概念。同时,网站中包含了上百道简单的练习题,可以帮助初学者检验自己的知识掌握程度。(@nosarthur 投稿) 6、2018年 JavaScript 明星项目 该网站列出2018年各个方向上最受关注的 JavaScript 项目。(@StephenWu5 投稿) 文摘 1、为什么隔着玻璃晒太阳没有用? 人体需要晒太阳,一个主要原因是,阳光里面的紫外线,可以让我们的身体产生维生素 D。这种维生素很难从食物中摄取,必须依靠阳光来合成。 维生素 D 可以促进钙元素的吸收,保证骨骼健康。 所以,长期不见阳光会导致缺乏维生素 D,就会产生骨质疏松,以及其他一些问题。 虽然晒太阳是必要的,但是多晒却不行,多晒太阳会导致皮肤损伤。因为紫外线包含两种,一种是紫外线 A(又称UVA),它们渗透到皮肤深层,可能导致过早老化;另一种是紫外线 B(又称 UVB),导致晒伤发红。研究表明,主要是紫外线里面的 UVB,触发了维生素 D 的合成,而 UVA 并不会产生维生素 D。 一般来说,每天晒十分钟太阳,就能产生足够的维生素 D。但是,在室内或车内晒太阳是没用的,因为玻璃会阻挡 UVB 射线。你无法通过坐在阳光明媚的窗前增加维生素 D 水平,而且玻璃会让大部分 UVA 辐射通过,可能会对你的皮肤造成有害影响。 2、测量地球的年龄 二战后,芝加哥大学的化学家帕特森,希望通过测定岩石里的铅,判断岩石的年代。但是,遇到了一个问题:他找不到无铅环境,到处都有铅污染,因为加铅汽油使得铅在空气无处不在。他试图去除样品中的铅污染,擦洗了玻璃器皿,使用蒸馏水。没有办法,铅仍然出现了。 帕特森从头到尾分析了实验的每一步,以确定铅的起源。当时没人知道,加铅汽油有这么严重的后果。"我发现我使用的所有东西都有铅。这是人们以前从未想过的一种污染。" 玻璃器皿、自来水、实验室墙壁上的油漆、桌子、空气中的灰尘、皮肤、衣服、头发,甚至头皮屑都含铅。如果帕特森希望得到准确的结果,别无选择,他只能成为世界上最洁癖的怪人。 (上图:帕特森竭尽全力将铅和其他污染物排出实验室。) 帕特森竭尽全力摆脱铅。他买了耐热玻璃器皿,洗净,用氢氧化钾热水浸泡,然后用双氧水冲洗。他擦了又擦,跪在地上,擦掉地板上任何铅的痕迹。他用干净材料覆盖了他的工作台面,并在实验室的通风橱里安装了额外的空气泵----甚至在它周围建造了一个塑料笼,以防止空气中的灰尘有铅。他戴着面具和长袍,后来用塑料披着他的身体。 这些措施在当时并不常见。当时还没有"超洁净实验室"实验室的概念。帕特森根本不知道典型的实验室周围漂浮着大约300万个微观粒子,每个粒子都是实验结果的障碍。 五年之后,帕特森终于完善了技术。1951年,他设法准备了一个完全未受污染的铅样品,并确认了一个十亿年前的花岗岩块的年龄,这一成就使他获得了博士学位。下一步是使用这种方法,找出地球的年龄。 帕特森后来去了加州理工学院,建立了世界上最干净的实验室。他拆掉建筑里面的铅管,并重新铺设电线(旧电线有含铅的焊料)。他安装了一个排气系统,用于净化空气,并建造了独立的房间,用于研磨岩石,清洗样品,净化水。地质系通过出售收藏的化石资助了本次大修。 1953年,超净实验室已准备就绪。帕特森着手测试岩石样本,目标是发现地球的年龄。他变得越来越挑剔,要求助手每天用小抹布擦洗地板。后来,他禁止普通服装,要求助手穿着科学连体衣。样本准备好之后,帕特森前往国家实验室使用他们的质谱仪。一天晚上,机器吐出了数字。帕特森独自一人在实验室中将它们代入方程式,得出了地球的年龄是45亿年。 图片 1、BMI 指数 BMI 指数是体重除以身高,用来衡量一个人的肥胖程度。过高的 BMI,几乎必然导致心血管疾病,以及糖尿病等。下图纵轴是身高,横轴是体重,可以用来速查你的 BMI,以及肥胖程度。 2、彩色窨井盖 日本的很多窨井盖都是彩色的,已经成为了一种艺术现象,甚至有专门的民间爱好者交流和收集这些窨井盖。 言论 1、 阿里和腾讯都是膨胀的大平台,将用户聚集在一起,创造一个生态系统。我们听多了创业和快速移动,但是实际上,企业集团正在卷土重来,在政府的支持下成为一个可怕的巨头。这样的互联网公司,正成为当今时代和未来的主导。 -- HN 读者评论 2、 我的工位几乎看不到外面,我觉得这座建筑物真的开始吃掉我整天盯着墙壁的灵魂。 -- HN 读者留言 3、 赚钱的商业方式只有两种,一种是捆绑(bundle),另一种是分解(unbundle)。 -- 马克·安德森,Netscape 浏览器创始人 4、 你想尽办法让孩子上贵族学校,他会骑马,会演莎士比亚剧,但就是不了解普通人的想法,那你确信他会过好这一生吗? -- 逻辑思维 5、 一般来说,帮企业赚钱的系统好卖,帮企业省钱的不好卖,因为省钱的系统基本上都要动到既得利益者。 -- 子柳 订阅 这个专栏每周五发布,同步更新在我的个人网站、微信公众号和语雀。 微信搜索"阮一峰的网络日志"或者扫描二维码,即可订阅。 (完) 文档信息 版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证) 发表日期: 2019年4月19日


如何用网页脚本追踪用户

本文介绍如何编写 JavaScript 脚本,将用户数据发回服务器。 我做了一个代码仓库,包含了下面所有的例子,可以运行查看效果。 一、同步 AJAX 数据发回服务器的常见做法是,将收集好的用户数据,放在unload事件里面,用 AJAX 请求发回服务器。 但是,异步 AJAX 在unload事件里面不一定能成功,因为网页已经处于卸载中,浏览器可能发送,也可能不发送。所以,要改成同步 AJAX 请求。 window.addEventListener('unload', function (event) { let xhr = new XMLHttpRequest(); xhr.open('post', '/log', false); xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); xhr.send('foo=bar'); }); 上面代码中,xhr.open()方法的第三个参数是false,表示同步请求。 这种方法最大的问题在于,浏览器逐步将不允许在主线程上面,使用同步 AJAX。所以,上面代码实际上不能用。 二、异步 AJAX 异步 AJAX 其实是能用的。前提是unload事件里面,必须有一些很耗时的同步操作。这样就能留出足够的时间,保证异步 AJAX 能够发送成功。 function log() { let xhr = new XMLHttpRequest(); xhr.open('post', '/log', true); xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); xhr.send('foo=bar'); } window.addEventListener('unload', function(event) { log(); // a time-consuming operation for (let i = 1; i 上面代码中,强制执行了一次双重循环,拖长了unload事件的执行时间,导致异步 AJAX 能够发送成功。 三、追踪用户点击 setTimeout也能拖延页面卸载,保证异步请求发送成功。下面是一个例子,追踪用户点击。 // HTML 代码如下 // <a id="target" href="https://baidu.com">click</a> const clickTime = 350; const theLink = document.getElementById('target'); function log() { let xhr = new XMLHttpRequest(); xhr.open('post', '/log', true); xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); xhr.send('foo=bar'); } theLink.addEventListener('click', function (event) { event.preventDefault(); log(); setTimeout(function () { window.location.href = theLink.getAttribute('href'); }, clickTime); }); 上面代码使用setTimeout,拖延了350毫秒,才让页面跳转,因此使得异步 AJAX 有时间发出。 四、反弹追踪 追踪用户点击,还可以使用反弹追踪(bounce tracking)。 所谓"反弹追踪",就是网页跳转时,先跳到一个或多个中间网址,以便收集信息,然后再跳转到原来的目标网址。 // HTML 代码如下 // <a id="target" href="https://baidu.com">click</a> const theLink = document.getElementById('target'); theLink.addEventListener('click', function (event) { event.preventDefault(); window.location.href = '/jump?url=' + encodeURIComponent(theLink.getAttribute('href')); }); 上面代码中,用户点击的时候,会强制跳到一个中间网址,将信息携带过去,处理完毕以后,再跳到原始的目标网址。 谷歌和百度现在都是这样做,点击搜索结果时,会反弹多次,才跳到目标网址。 五、Beacon API 上面这些做法,都会延缓网页卸载,严重影响用户体验。 为了解决网页卸载时,异步请求无法成功的问题,浏览器特别实现了一个 Beacon API,允许异步请求脱离当前主线程,放到浏览器进程里面发出,这样可以保证一定能发出。 window.addEventListener('unload', function (event) { navigator.sendBeacon('/log', 'foo=bar'); }); 上面代码中,navigator.sendBeacon()方法可以保证,异步请求一定会发出。第一个参数是请求的网址,第二个参数是发送的数据。 注意,Beacon API 发出的是 POST 请求。 六、ping 属性 HTML 的<a>标签有一个ping属性,只要用户点击,就会向该属性指定的网址,发出一个 POST 请求。 <a href="https://baidu.com" ping="/log?foo=bar"> click </a> 上面代码中,用户点击跳转时,会向/log这个网址发一个 POST 请求。 ping属性无法指定数据体,似乎只能通过 URL 的查询字符串携带信息。 七、参考链接 Link Click Analytics and Privacy, John Wilander ping Attribute, David Walsh (完) 文档信息 版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证) 发表日期: 2019年4月15日


每周分享第 51 期

这里记录过去一周,我看到的值得分享的东西,每周五发布。 欢迎投稿,或推荐你自己的项目,请前往 GitHub 的 ruanyf/weekly 提交 issue。 一个程序员的 Macbook 送修了,他只好重新使用10年前的笔记本电脑(上图)。结果意外地发现,虽然有点慢,但是不影响使用。10年前的电脑依然能够满足日常工作。 如果2009年的时候,让你去使用1999年的电脑,那是不可想象的,根本没有实用性。但是,2019年的时候,去使用2009年的电脑,却是完全可行的。 这说明,过去十年的硬件进展不太大,导致10年前的硬件不是那么过时。过去十年,进展主要体现在软件上面:软件功能更强大、使用更友好、界面更美观。 经济有一个定理,叫做"边际收益递减",意思是,发展到比较成熟的阶段以后,以后每一步的进展会越来越小。硬件就是如此,摩尔定理到了尽头以后,就已经开始慢下来了。我估计,硬件之后就是软件,随着软件开发技术的成熟,以后软件的进展也会放缓,总有一天,我们使用十年以前的软件,也会觉得还可以接受,当然现在还没到这一步。 软件之后的发展重点,我认为将是算法和数据,以后的进步更多会体现在算法优化和数据训练上面。 新闻 1、程序员的专用座椅 美国一家创业公司推出了程序员专用座椅,可以躺着使用三块屏幕,还有按摩功能,可以一边敲代码,一边按摩。由于这个椅子可以140度斜躺,还有脚凳和椅灯,所以也可以在上面睡觉。它的售价是3600美元。 2、世界上最短的高速公路 世界最短的高速公路就在罗马尼亚,长度为1米。当地的一个快餐店老板自费4500欧元,建造了这条1米的四车道高速公路。他是为了抗议政府忽视公路建设,"他们说这个地区不适合建设高速公路,我就造1米给他们看看。"罗马尼亚的面积与英国相当,但是高速公路只有806公里,大约是英国五分之一。 3、海上隔离 美国海军军舰麦克亨利号(US McHenry)在波斯湾执行任务时,全舰700多名官兵中有25人感染了腮腺炎。结果,全舰就被隔离在海上,整整两个月不得靠岸,所有人都没法下船,补给由其他船只运送过来。看上去,以后对于那些高传染性的疾病,海上隔离似乎是一个可行的方案。 4、发光滑雪板 美国一家公司推出了会发光的滑雪板,售价500美元。不过,该公司没说,这是白天用的,还是夜晚用的。如果是夜晚使用,是为了观众能看清楚滑雪的轨迹吗? 5、刷脸乘地铁 3月8日,深圳地铁公司在福田站,开通了"刷脸乘地铁"的测试通道。乘客可以先在地铁公司登记,然后进站时,不需任何动作,只需将脸正对一个平板电脑的摄像头,就能刷脸扣款。目前还不知道,该服务何时会在深圳地铁的其他站点使用。 6、柔软的机器手 机器手臂通常都是钢铁材质,牢牢抓取物体的时候,很容易造成物体损伤。为了解决这个问题,麻省理工学院的科学家发明了柔软的机器手。它是一个橡胶做的套子,可以像花朵一样打开和关闭。 当它套住物体的时候,会泵出里面的气体,通过气密性,使得大气压将套子牢牢压在物体上面,从而能够在不损伤物体的情况下,拾取精细的物品。它能够抓起自身重量100倍的物体。 7、雨伞发电 台湾和美国的科学家研发出一种可以发电的雨伞。这种雨伞利用雨和风与伞面产生的摩擦电能,进行发电。伞和雨衣上的纳米发电机可以收集水滴的冲击能量,将其转化为电能。 这种面料可用于开发自供电的照明雨具,以帮助防止雨天发生交通事故。在125毫升/秒的降雨量下,纳米发电机在5分钟内将 1μF 电容充电至 9V 左右。重复洗涤也不会降低这种面料的性能。 8、环卫工人的手环 有消息称,南京市河西区的环卫工人被要求佩戴 GPS 跟踪智能手环,这会随时监控他们的位置,而且如果他们停止移动超过20分钟,手环就会发出提醒"请继续工作"。 报道披露后,公众压力使得当地环卫公司决定稍微让步,现在如果环卫工人留在一个地方,手环不再发出提醒"请继续工作",但仍然会跟踪工人的移动。 9、787 飞机的 GPS 授时错误 GPS 卫星发送的信息包含时间字段,其中表示"周数"的字段只有10个二进制位,导致该字段每20年会发生一次溢出,自动归零。2019年4月6日,该字段就发生了本世纪第一次溢出。 所有依赖 GPS 授时的设备,都可能因此发生计时错误。波音公司的喷气式飞机就是这样,现在已经出现多架 787 客机的系统时间回到了20年前的1999年(上图红框处)。 10、一句话新闻 华纳音乐签约了一个音乐算法,将发行该算法生成的五张唱片。它主要生成轻音乐,供睡前播放,itunes 上面有试听。 IBM 公司在过去6年中,已经解雇了超过2万名40岁以上的美国员工。报道称,该公司有内部政策,更严厉地评估长期服务的员工,使用负面评估对他们进行裁员。 人的大脑保存的信息,研究认为,以英语表示的话大约是 1.5MB。 英国和加拿大决定,不再新建任何燃煤电厂,现有的燃煤电厂也将逐步放弃。因为燃煤会产生大量二氧化碳。 文章 1、刘慈欣:释放想象力(中英对照) 2018年11月,刘慈欣在克拉克想象力服务社会奖颁奖仪式上的演说。 2、Java 开发者需要知道的20个库(英文) 本文介绍 Java 语言20个常用的库,比如 log4j、JUnit、JSoup 等。 3、与死亡一线之隔的完美(中文) Free Solo 是一部《国家地理》杂志拍摄的纪录片,讲述了徒手独攀优胜美地國家公園內、全世界最難攀爬的酋长岩的故事。它得到了 2019奧斯卡最佳紀錄片獎。本文讲述了这部纪录片背后的故事,为什么有人愿意冒着生命危险去攀岩,他又是怎么爬上去的。 4、再见 Docker(英文) 作者认为,Docker 作为一家公司已经失败,作为一种技术,也即将被其他容器技术取代。 5、关于 EOF(英文) EOF 是一个很容易混淆的概念。Windows 系统的文本文件,结尾可以有 EOF 终止符;C / C++ 语言有一个表示读取终止的特殊值 EOF,还有测试读取是否终止的 eof() 和 feof() 函数。 6、使用 AV1 编解码器(英文) AV1 是一个新的开源的视频编码和解码标准,本文介绍 AV1 的基本知识,以及如何把视频压缩成 av1 格式。 7、无 JavaScript 的前端(英文) 作者呼吁 HTML 语言内置更多的功能,从而使得只用 HTML 就可以写出可交互的页面,减少 JavaScript 的使用。 8、线程的基本知识(英文) 一篇写得非常好的科普文章,通俗地详尽解释了进程和线程的相关知识。 9、如何使用 React Hooks 获取数据?(英文) 本文由浅入深一步步介绍,如何使用 React Hooks 的 useEffect 从远程服务器获取数据。 10、浏览器内置的 KV Storage(英文) 浏览器提供的键值对存储 localStorage API 是同步操作,有时候很慢。为了解决这个问题,Chrome 浏览器开始提供异步键值对存储的 API。 11、浏览器原生的图片懒加载(英文) Chrome 75 将原生支持图片的懒加载,写成 <img loading=lazy> ,就可以滚动到视口加载图片。 软件 1、node-five 一个基于 QT 的 Nodejs 框架,用于开发 Node 应用的图形界面。 2、Learn anything 一个学习资源的搜索引擎,可以搜索各种主题,返回相应的教程。(@Paleless 投稿) 3、Gckit-CLI 命令行下使用一行命令,生成Swift、Objective-C等项目的模板代码。(@SeongBrave 投稿) 4、php-lisp 一个使用 PHP 写的 Lisp 代码解释器。(@wujunze 投稿) 5、Paste to Markdown 粘贴到该窗口的任何文本内容,都会自动转为 Markdown 格式。(@AidySun 投稿) 6、RCT 一个通过解析 rdb 文件对 redis 内存结构分析的一站式平台。(@TrumanDu 投稿) 7、squoosh 谷歌开源的图像压缩服务。(@ifrontend-xyz 投稿) 8、Whoer.net 查看你的 HTTP 请求携带多少个人信息的网站。(@xcuYao 投稿) 9、chunkwm Mac 电脑的多窗口平铺式管理器。 10、StreamSaver.js 流媒体保存成本地文件的浏览器库。(@ifrontend-xyz 投稿) 11、你的电脑有多快? 一个小游戏,提供一系列常见任务的 Python 脚本,让你猜计算机在1秒内可以执行多少次。(@NeoTse 投稿) 12、morec 一个 Flutter 制作的电影 App,用于学习 Flutter。(@Mayandev 投稿) 资源 1、Generative.fm 该网站专门收集软件生成的音乐。比较奇特的是,这些音乐可以无限播放,并且每次听都不一样。暂停以后重新播放,你会听到跟前面不同的音乐。 2、Star Wars Asciimation ASCII 码的形式演绎整部《星球大战》,可以使用 telnet towel.blinkenlights.nl 在命令行观看,也可以在网页观看。(@linkoln 投稿) 3、Test-Driven Web Development with Python 免费的英文电子书,介绍如何以 TDD 的方式开发互联网应用,使用 Django 框架举例。(@nosarthur 投稿) 4、算法 开源英文电子书,作者是美国伊利诺伊大学的教师,本书是他的讲课笔记,偏重于数学。(@nosarthur 投稿) 5、Killed by Google 该网站收集谷歌关闭的所有自家产品。(@murongsihua 投稿) 6、航班实时追踪 国内做的全球航班实时位置展示,国内航班的覆盖是全球最好的。(@cq0206 投稿) 文摘 1、为什么我放弃 Amazon 年薪50万美元的工作? 上周,我辞掉了8年的亚马逊工作。尽管一再得到奖励和表彰,但我没有足够的动力再干一年。 当年,加入亚马逊时,我是初级工程师。5年内,我晋升了两次,现在是高级工程师。如果我留下来,几乎可以肯定今年会再次晋升,成为首席工程师。我被告知,我在公司有很大的潜力。公司里,人们对我的尊重不断增长,我被视为所在领域的专家和领导者。 我在亚马逊的第一年赚了75,000美元。去年,我赚了511,000美元。如果再呆几年,我的年薪应该可以到100万美元。 我的工作不算很忙,也不再需要证明自己。我可以在一周40小时内完成所有工作,而且我的团队每周一天在家工作。晚上或周末,我很少打开笔记本电脑。我总共有三位主管,他们人都很好,有很多同理心。 尽管一切都很好,但每天早上,我上班的动机都在减少。 最初的几年,我主要与另一个同事,一起开发一个内部工具。各种限制很少,我有很大的独立性,直接与用户交谈,然后发布更新,开展测试等等。只要我觉得这件事是重要的,通常就可以去做。大多数时候,工作的方向是我们自己控制的。 后面的几年却完全不同。我领导着部门历史上最重要的项目,有许多利益相关者和复杂的目标。我能做的事情受到了很大的限制,通常取决于我能否说服所有相关人员,而我想做的是实现目标的最佳方式,却不一定能做。 我在公司总是处理其他人的要求或条件,开始时很简单,但随着时间的流逝而变得越来越复杂,因为必须满足所有利益相关者。这种情况迫使我做一些不愿意做的事情,或者我愿意做的事情没法做。 2、善于销售 成功需要自信,但是仅有自信是不够的,你还必须能够让别人相信你的主张。 某种程度上,所有伟大的职业都包含销售工作。您必须向客户、员工、媒体、投资者宣传你的计划。这需要鼓舞人心的愿景,强大的沟通技巧,魅力,以及执行能力的证据。 善于沟通,特别是善于书面沟通,是值得培养的一种能力。如果要达到明确沟通,我的建议是,首先要确保你的思路清晰,然后使用简洁明了的语言,表达出你的想法。 销售的最佳方式是真正相信你所销售的产品。卖你真正相信的东西感觉很棒,试图卖自己都不相信的产品,感觉很糟糕。 我的另一个销售建议是,重要的时候,你最好亲自出现。我刚开始做销售的时候,我总是愿意上飞机,自己去一趟。这通常是不必要的,打电话也可以解决。但其中有三次导致了我的职业生涯转折点,如果我不是亲自去,我的人生本来会走另一条路。 3、Youtube 的热门频道统计 Youtube 有2000多万个活跃频道,2018年底,359个频道有超过1000万个订阅者。其中,87个频道是2018年创建的,在一年内就达到了1000万订阅,相比2017年的47个频道增长了185%。 这87个频道平均需要167天才能达到1000万订户。其中,最快的是墨西哥的 Kenia OS 只用了5天,其次是另一个墨西哥频道 Juki Dog,花了20天。这87个频道的国籍分布是,14个墨西哥频道,12个美国频道,11个印度频道,5个土耳其,4个印度尼西亚频道。 娱乐类频道(电影和娱乐,音乐)是增长最快的频道,其次是生活频道和游戏频道。烹饪、健康、体育类频道也有快速增长。 根据统计,这些热门频道在周五和周六上传了更多视频,这两天发布的视频在观看和订阅方面,要比其他时间更高。 图片 1、打印 DNA 有人把 DNA 上面23亿个碱基对,用打孔机打印出来。打印了一个星期,还不到 DNA 的5%。 2、带名字的手术帽 动手术的时候,医生戴着口罩,穿着手术服和帽子,很难分清谁是谁。一位澳大利亚医生正在互联网上,发起一场运动,倡议医生在帽子上标识自己的名字。 3、各语言的域名分布 截止2019年2月,互联网上共有93,482,546个有内容的域名,其中68%是英文站点,12%是中文站点,3%是西班牙语站点。 言论 1、 随着在线服务的激增,每个用户2007年大约有25个密码,2015年增加到130个,预计到2020年将增长到207个。 -- 《密码管理器研究》 2、 每家公司都说:"我们非常重视您的隐私和安全。"请不要再说这种话了,大多数公司并不关心数据的隐私或安全,而是为了数据被盗时,他们有一个向客户解释的说辞。 -- 《别说"我们严肃对待你的隐私和安全"》 3、 最好的故事是不完美的。当一个故事有点奇怪时,它会吸引你,人们会谈论那些没有按照预期发展的事情。那些出乎意料的东西会让你念念不忘。 -- 《马尔科姆·格拉德威尔的写作课》 4、 思考某事和讲述某事是不同的事情。我们思考事物的方式很复杂,有时甚至是不连贯的,而且经常是矛盾的。但是讲述时,我们必须把某事表达得很清晰,可以在很短的时间内说得出来。 -- 《马尔科姆·格拉德威尔的写作课》 5、 过去七年,谷歌平均每周收购两家公司。 -- Patrick Pichette,谷歌前首席财务官 6、 技术正在发展一定程度的自治,它好像正在以某种方式利用人类来创造它自己。 -- Paul Kingsnorth 订阅 这个专栏每周五发布,同步更新在我的个人网站、微信公众号和语雀。 微信搜索"阮一峰的网络日志"或者扫描二维码,即可订阅。 (完) 文档信息 版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证) 发表日期: 2019年4月12日


OAuth 2.0 的四种方式

上一篇文章介绍了 OAuth 2.0 是一种授权机制,主要用来颁发令牌(token)。本文接着介绍颁发令牌的实务操作。 下面我假定,你已经理解了 OAuth 2.0 的含义和设计思想,否则请先阅读这个系列的上一篇文章。 进入正文之前,插播一则活动消息。 本周一(4月8日)到周日(4月14日),每天晚上八点都有两小时的免费直播课,体系化介绍高级前端开发知识,网易云课堂主办。详细介绍请看本文结尾,欢迎关注。 RFC 6749 OAuth 2.0 的标准是 RFC 6749 文件。该文件先解释了 OAuth 是什么。 OAuth 引入了一个授权层,用来分离两种不同的角色:客户端和资源所有者。......资源所有者同意以后,资源服务器可以向客户端颁发令牌。客户端通过令牌,去请求数据。 这段话的意思就是,OAuth 的核心就是向第三方应用颁发令牌。然后,RFC 6749 接着写道: (由于互联网有多种场景,)本标准定义了获得令牌的四种授权方式(authorization grant )。 也就是说,OAuth 2.0 规定了四种获得令牌的流程。你可以选择最适合自己的那一种,向第三方应用颁发令牌。下面就是这四种授权方式。 授权码(authorization-code) 隐藏式(implicit) 密码式(password): 客户端凭证(client credentials) 注意,不管哪一种授权方式,第三方应用申请令牌之前,都必须先到系统备案,说明自己的身份,然后会拿到两个身份识别码:客户端 ID(client ID)和客户端密钥(client secret)。这是为了防止令牌被滥用,没有备案过的第三方应用,是不会拿到令牌的。 第一种授权方式:授权码 授权码(authorization code)方式,指的是第三方应用先申请一个授权码,然后再用该码获取令牌。 这种方式是最常用的流程,安全性也最高,它适用于那些有后端的 Web 应用。授权码通过前端传送,令牌则是储存在后端,而且所有与资源服务器的通信都在后端完成。这样的前后端分离,可以避免令牌泄漏。 第一步,A 网站提供一个链接,用户点击后就会跳转到 B 网站,授权用户数据给 A 网站使用。下面就是 A 网站跳转 B 网站的一个示意链接。 https://b.com/oauth/authorize? response_type=code& client_id=CLIENT_ID& redirect_uri=CALLBACK_URL& scope=read 上面 URL 中,response_type参数表示要求返回授权码(code),client_id参数让 B 知道是谁在请求,redirect_uri参数是 B 接受或拒绝请求后的跳转网址,scope参数表示要求的授权范围(这里是只读)。 第二步,用户跳转后,B 网站会要求用户登录,然后询问是否同意给予 A 网站授权。用户表示同意,这时 B 网站就会跳回redirect_uri参数指定的网址。跳转时,会传回一个授权码,就像下面这样。 https://a.com/callback?code=AUTHORIZATION_CODE 上面 URL 中,code参数就是授权码。 第三步,A 网站拿到授权码以后,就可以在后端,向 B 网站请求令牌。 https://b.com/oauth/token? client_id=CLIENT_ID& client_secret=CLIENT_SECRET& grant_type=authorization_code& code=AUTHORIZATION_CODE& redirect_uri=CALLBACK_URL 上面 URL 中,client_id参数和client_secret参数用来让 B 确认 A 的身份(client_secret参数是保密的,因此只能在后端发请求),grant_type参数的值是AUTHORIZATION_CODE,表示采用的授权方式是授权码,code参数是上一步拿到的授权码,redirect_uri参数是令牌颁发后的回调网址。 第四步,B 网站收到请求以后,就会颁发令牌。具体做法是向redirect_uri指定的网址,发送一段 JSON 数据。 { "access_token":"ACCESS_TOKEN", "token_type":"bearer", "expires_in":2592000, "refresh_token":"REFRESH_TOKEN", "scope":"read", "uid":100101, "info":{...} } 上面 JSON 数据中,access_token字段就是令牌,A 网站在后端拿到了。 第二种方式:隐藏式 有些 Web 应用是纯前端应用,没有后端。这时就不能用上面的方式了,必须将令牌储存在前端。RFC 6749 就规定了第二种方式,允许直接向前端颁发令牌。这种方式没有授权码这个中间步骤,所以称为(授权码)"隐藏式"(implicit)。 第一步,A 网站提供一个链接,要求用户跳转到 B 网站,授权用户数据给 A 网站使用。 https://b.com/oauth/authorize? response_type=token& client_id=CLIENT_ID& redirect_uri=CALLBACK_URL& scope=read 上面 URL 中,response_type参数为token,表示要求直接返回令牌。 第二步,用户跳转到 B 网站,登录后同意给予 A 网站授权。这时,B 网站就会跳回redirect_uri参数指定的跳转网址,并且把令牌作为 URL 参数,传给 A 网站。 https://a.com/callback?token=ACCESS_TOKEN 上面 URL 中,token参数就是令牌。A 网站因此直接在前端拿到令牌。 这种方式把令牌直接传给前端,是很不安全的。因此,只能用于一些安全要求不高的场景,并且令牌的有效期必须非常短,通常就是会话期间(session)有效,浏览器关掉,令牌就失效了。 第三种方式:密码式 如果你高度信任某个应用,RFC 6749 也允许用户把用户名和密码,直接告诉该应用。该应用就使用你的密码,申请令牌,这种方式称为"密码式"(password)。 第一步,A 网站要求用户提供 B 网站的用户名和密码。拿到以后,A 就直接向 B 请求令牌。 https://oauth.b.com/token? grant_type=password& username=USERNAME& password=PASSWORD& client_id=CLIENT_ID 上面 URL 中,grant_type参数是授权方式,这里的password表示"密码式",username和password是 B 的用户名和密码。 第二步,B 网站验证身份通过后,直接给出令牌。注意,这时不需要跳转,而是把令牌放在 JSON 数据里面,作为 HTTP 回应,A 因此拿到令牌。 这种方式需要用户给出自己的用户名/密码,显然风险很大,因此只适用于其他授权方式都无法采用的情况,而且必须是用户高度信任的应用。 第四种方式:凭证式 最后一种方式是凭证式(client credentials),适用于没有前端的命令行应用,即在命令行下请求令牌。 第一步,A 应用在命令行向 B 发出请求。 https://oauth.b.com/token? grant_type=client_credentials& client_id=CLIENT_ID& client_secret=CLIENT_SECRET 上面 URL 中,grant_type参数等于client_credentials表示采用凭证式,client_id和client_secret用来让 B 确认 A 的身份。 第二步,B 网站验证通过以后,直接返回令牌。 这种方式给出的令牌,是针对第三方应用的,而不是针对用户的,即有可能多个用户共享同一个令牌。 令牌的使用 A 网站拿到令牌以后,就可以向 B 网站的 API 请求数据了。 此时,每个发到 API 的请求,都必须带有令牌。具体做法是在请求的头信息,加上一个Authorization字段,令牌就放在这个字段里面。 curl -H "Authorization: Bearer ACCESS_TOKEN" \ "https://api.b.com" 上面命令中,ACCESS_TOKEN就是拿到的令牌。 更新令牌 令牌的有效期到了,如果让用户重新走一遍上面的流程,再申请一个新的令牌,很可能体验不好,而且也没有必要。OAuth 2.0 允许用户自动更新令牌。 具体方法是,B 网站颁发令牌的时候,一次性颁发两个令牌,一个用于获取数据,另一个用于获取新的令牌(refresh token 字段)。令牌到期前,用户使用 refresh token 发一个请求,去更新令牌。 https://b.com/oauth/token? grant_type=refresh_token& client_id=CLIENT_ID& client_secret=CLIENT_SECRET& refresh_token=REFRESH_TOKEN 上面 URL 中,grant_type参数为refresh_token表示要求更新令牌,client_id参数和client_secret参数用于确认身份,refresh_token参数就是用于更新令牌的令牌。 B 网站验证通过以后,就会颁发新的令牌。 写到这里,颁发令牌的四种方式就介绍完了。下一篇文章会编写一个真实的 Demo,演示如何通过 OAuth 2.0 向 GitHub 的 API 申请令牌,然后再用令牌获取数据。 (正文完) 前端高级开发工程师免费直播课 经过多年的发展,前端工程师的地位日益提升,越来越多的人想往前端的方向发展。 但是,市场对前端工程师的要求也越来越高,深入掌握底层技术的高级前端,才能在市场上找到自己立足之地。 为了帮助大家深入了解高级前端的学习要点,本周一(4月8日)到周日(4月14日),网易云课堂推出了前端进阶免费直播课。 (更多介绍点击这里) 他们邀请了网易资深前端工程师,免费直播分享实战中的经验方法。内容涉及网易内部自定组件库工具分享,前端开发相关知识,深度剖析 JavaScript 等。 这个直播面向前端初、中级开发工程师,每天2个小时,都是一些干货分享并且不收费,建议想进阶的同学坚持学习。大家可以微信扫码,添加助教,获取听课地址。 (完) 文档信息 版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证) 发表日期: 2019年4月 9日


每周分享第 50 期

这里记录过去一周,我看到的值得分享的东西,每周五发布。 欢迎投稿,或推荐你自己的项目,请前往 GitHub 的 ruanyf/weekly 提交 issue。 (题图:杭州,2018) 前几天,我听一个广播节目。主持人问,现在很多人开网约车,这样能赚多少钱,能够赚到大钱吗? 这个问题很容易回答,答案就是不能。出租车司机的收入,主要由营业时间的长短决定。基本上,一天开12个小时,就是比开6个小时,收入高出一倍。每天只有24个小时,因此收入存在上限,不可能偏离平均水平很远。 出租车是"时间换收入"的典型行业,投入的时间越多,收入越高,在家休息就没收入。很多行业都属于"时间换收入",所有此类行业都赚不到大钱。因为你能用来交换的时间是有限的,而且进入中年以后,你就拿不出更多的时间来交换。开出租车赚零花钱,或者作为短期过渡,这是没问题的,但作为终身职业是很糟糕的。 我觉得,越来越多的程序员正在落入这个陷井,用编码的时间换取收入。只有不停地做项目,才能拿到钱。项目做得越多,收入越高。这个项目开发完了,公司又让他去干下一个项目。 忙了好几年,项目完成了一大堆,但是自己什么也没留下,以后的收入还要取决于从零开始的新项目。这样的话,你跟出租车司机有何两样,哪一天你不写代码了,不是照样没收入。 那些赚到大钱的人,没有一个是靠时间换取收入的。他们要么通过积累资产致富,要么购买他人的时间,为自己创造财富。你应该警惕,不要落入"时间换取收入"的陷井,不要只顾着为别人生产代码,而要注意积累自己的资产,以及适时开展属于自己的业务。 新闻 1、银行模仿科技公司 银行通常给人一种严肃保守的感觉。丹麦一家银行决定改变这种印象,向科技公司学习,让银行也变得轻松随便。它重新装修了办公楼,允许员工穿便服,还采用了开放式办公室。 2、霍金教授的纪念硬币 英国皇家造币厂为了纪念去年去世的霍金教授,推出了一枚纪念硬币,面值为50便士。这枚硬币中间有一个洞,象征霍金对黑洞的研究成果。 3、删除 Facebook WhatsApp 于2014年以193亿美元的价格,被 Facebook 收购。但是,2019年3月13日,WhatsApp的联合创始人布莱恩·阿克顿(Brian Acton,上图最右边)在斯坦福大学的一个讲座上,公开呼吁学生删除 Facebook。 他解释说,收购完全是资本的需要,他本人是无可奈何。"我有50名员工,我不得不考虑他们,以及他们从这笔交易中赚到的钱。我不得不考虑我们的投资者,我不得不考虑我的少数股权。即使我想拒绝收购,我也没有完全的影响力来否决。" 4、月球岩石 1969年到1972年,阿波罗计划的宇航员多次登录月球,一共采集了382公斤月球岩石,其中大部分都公开了,但是有三个样本一直是保密的。今年是人类登陆月球50周年,美国宇航局决定将所有样本都公开。 科学家已经决定,采用最先进的手段,彻底检查这些样本。因为月球被发现存在固态水,这些岩石中可能有氧化物,科学家想知道有无可能从月球岩石提取氧气。 5、圆周率的最新记录 3月14日是国际圆周率日,谷歌宣布,日本的谷歌员工 Emma Haruka Iwao 打破了世界记录,将圆周率计算到了31万亿位数,远远超过之前的22万亿记录。整个计算使用虚拟机,花了121天才完成。这个新的圆周率保存在硬盘上,需要 170TB 的空间。 6、VR 电影 今年的美国 SXSW 艺术节,推出了 VR 电影体验。观众一人一套设备,每套设备都有很长的电线,以便观看时可以适度的移动。这次展映了20多部 VR 电影,每部长度都在10分钟~15分钟。不同的电影有不同的观看设备,上图是坐在轮椅上观看,观众表示体验还不错。 VR 电影的优势是沉浸式体验,可以360度观看。下面的这部电影讲述第一次世界大战时,一个英国士兵的经历。他走进一所老宅,然后是战地医院,最后在战地营房里,到处是他无法寄出去的明信片。 另一部 VR 电影则是观看一对夫妻的故事。 7、苹果取消 AirPower 苹果公司宣布,取消 AirPower 这个产品,理由是无法达到该公司的产品要求。AirPower 是2017年宣布的,它是一个椭圆型的无线充电器,可以同时为三个设备进行无线充电。原定2018年上市,但被推迟了,现在终于宣布放弃。 外界猜测,真正的原因是物理学的限制,导致这个产品很难实现。主要的障碍有两个,一个是无线充电通过感应电流实现,会有一部分电量泄漏出来,AirPower 内部有多个线圈,如果同时充电,多个感应电流会互相加强,泄漏电量的强度可能会影响到心脏起博器和助听器这样的设备。另一个障碍是,无线充电的效率不是很高,多个设备同时充电,需要很大的功率,内部会有大电流,过热无法避免。 8、一句话新闻 GPS 传送的数据采用10个二进制位表示"周数",4月6日午夜这个字段将会溢出,重新归零。那些采用 GPS 授时的设备,可能将会出现时间错误。 欧洲议会通过决议,建议成员国2021年废止实行夏令时。此前,欧盟强制所有成员国实行夏令时。 法国与中国签署协议,参与2023-2024年实施的嫦娥六号探月计划,准备在嫦娥六号上搭载15千克的法方设备,包括一台照相机和一台分析仪。 抖音被美国联邦贸易委员会罚款570万美元,因为是没有经过监护人同意,就保存13岁以下儿童的信息。 文章 1、我的 Linux 桌面配置(英文) 一个高级程序员介绍他的 Linux 桌面开发环境,以及他的各种软件选择。 2、我们不再需要 Chrome(英文) Chrome 已经垄断了浏览器市场,作者论证为什么这种情况对互联网是不利的。 3、React Hooks 入门教程(英文) 一篇很好的 React Hooks 的入门介绍文章。 4、Kanban 与 Scrum 的比较(英文) Kanban 和 Scrum 都是敏捷开发的具体实现方法,本文讨论它们的异同。 5、在特斯拉工作的感受(中文) 在马斯克的影响下,特斯拉公司上下极其激进、残酷冰冷、毫无感情,你的工作不仅压力超级大,而且很有可能因为表现不好被开除。但是为什么还有员工没辞职呢? 6、LFU 算法的一种实现(英文) LFU 是常用的删除过期缓存的算法,本文介绍了它的一种代码实现。 7、重新设计 UI 基本上是浪费时间(英文) 作者认为,95%情况下,你不需要重新设计 UI。 8、中国超高压电网(英文) 中国已经建成了全国性的超高压电网,用来将西部的电力输送到东部。这是世界上前所未有的,IEEE 的这篇报道进行了长篇介绍。 9、State of CSS 2019(英文) 针对全世界开发者的 CSS 调查。(@lanlejiudunle 投稿) 10、业余无线电爱好者入门(中文) 如何在国内拥有一个个人的无线电台。 软件 1、syncthing 多台电脑之间自动同步文件夹的工具,可以在命令行作为服务运行,也提供图形界面。 2、snailjs 一个同时包括前端和后端的 Web 框架,采用 node + react,可以用作架构参考。 3、subsync 有时,srt 字幕文件跟视频不同步,该工具可以自动让其同步。它的原理是,从视频里面检测出,何时有语音,然后将字幕与其对齐。 4、Zero server 一个 JS 的后端框架,设计很有意思,每个文件(HTML / JSX / JS)自动成为可访问的路径,不需要其他任何配置。 5、pi-hole 一个基于树莓派的家用 DNS 服务器,自带屏蔽广告功能。 6、dbdiagram.io 制作数据库关系图的在线工具。(@linlicro 投稿) 6、pagedraw 一个浏览器里面的 UI 生成器,可以通过拖曳组件来设计 UI,然后自动生成 JSX 代码。 7、EditorConfig 生成编辑器配置文件,以便整个团队有同样的编辑器设置。 8、Pika 一个只能搜索 npm 上面的 ES6 模块的搜索引擎。 9、BashUpload 一个可以从命令行上传文件的网站,文件上传后可以保存七天,其间可以无限次下载。 10、dead.io 一个显示你是否还活着的 API,做法是它每隔一段时间向你发一封邮件,如果你连续多次没有回复,它就认为你已经死了。你可以通过这个 API,设置一些死了以后需要触发的动作。 11、colorise 一个为黑白照片着色的在线服务。(@bikmanwei 投稿) 12、dust3d 开源的 3D 建模软件,适用于游戏开发,3D打印等。(@huxingyi 投稿) 资源 1、React 教程 一个 React 的30天开源教程。(@CharlesCCC 投稿) 2、PC Assembly Language 介绍汇编语言的本科生入门教材,有中文译本,免费下载。 3、ARM 汇编语言简介 通过树莓派介绍 ARM 汇编语言的开源教材。 4、Visu Algo 各种算法的动态演示网站。(@wyzlove 投稿) 5、7DRL Challenge 2019 这是一个地图探险类(rogue like)游戏的比赛,全世界开发者都可以将自己的作品上传,唯一的条件是该游戏必须是在七天内开发完成。目前,已经有100多个作品,各个平台都有,其中将近一半可以在浏览器里面运行,都可以免费下载。 6、name-suggestion-index 这个项目收集各类商品的著名品牌,作为 OpenStreetMap 的自动拼写建议。比如,你在地图上要标识一家"名牌鞋专卖店",它会自动提示59个牌子的鞋子。 图片 1、建筑物的水平线和垂直线 以前的建筑物追求庞大威严,因此更看重高度和垂直感,会有很多垂直线。但是,现在的建筑物越来越多的是水平线。下图左边是以前的建筑,右边是当代建筑。 2、纯 CSS 图片 下面图片不是照片,而是纯粹用 CSS 生成的。(@beiyeqingteng 投稿) 3、佛罗里达钓鱼比赛 美国佛罗里达州每年举办出海钓鱼比赛。下图是1957年的比赛成果。 下图是80年代初的比赛成果。  最后是2007年。 可以看到,五十年间,鱼变得越来越小,种类也越来越少。 文摘 1、SQL 是最有价值的技能之一 我的职业生涯学到了很多技能,但没有比 SQL 更有用的技术技能。由于以下几个原因,SQL 对我来说是最有价值的技能。 (1)SQL 适用很多方面。 作为产品经理,你需要从数据库看数据。知道如何使用 SQL 查看原始数据,可以为你节省大量的精力,无需向其他人询问数字。 作为一名工程师,SQL 通常可以让我更快地获取我想要的信息,而不需要用 Ruby 或 Python 编写脚本。Web 应用变得缓慢时,了解所执行的 SQL 以及优化它的方法是不可或缺的。 (2)SQL 只需学习它一次,且不需要重新学习。 过去20年,SQL 并没有真正改变。当然,有一些新的改进,但是比起其他语言,它算是毫无变化。是的,每隔几年 SQL 会有一个新的标准,偶尔会出现一些新东西,但 SQL 的基础知识是非常永久的。学习 SQL 一次将允许您在职业生涯中重复使用它,而无需重新学习。 不要误会我的意思,我喜欢学习新的东西,但我宁愿学习一些真正新的东西,而不仅仅是另一种完成同样任务的方法。 (3)SQL 很酷。 熟练掌握 SQL 人并不多,大多数开发者跳过它,很少有人真正了解 SQL,所以掌握 SQL 的人可能看起来比实际更像精英。过去在一家拥有数百名工程师的公司中,我每周会收到多个同样的请求,来自从初级工程师到主要工程师各种人:"嘿,你能帮忙写一个查询吗?"因为你很擅长这样的事情,可以帮助其他人。 2、ARM 公司的蓝图 ARM 是一家芯片公司,但它自己不制造芯片,而是销售芯片的设计图纸。它是地球上最受欢迎的芯片公司,自1990年成立以来,根据它的图纸制造和销售的芯片高达1300亿片,苹果、华为、高通等巨头都购买 ARM 的设计,然后制造的每一块芯片都会向 ARM 支付版税。 2016年,孙正义的软银公司以320亿美元收购了 ARM。这是软银最大的收购,也是最昂贵的收购之一(比 ARM 的市值高出43%)。ARM 原来是一家很赚钱的公司,但是孙正义要求它将利润降至零,全力以赴扩展业务领域,争取收入的快速增长,而不是利润的增长。 收购之前的2015年,ARM 收入高达5.9亿英镑,利润5.39亿英镑。收购之后,2017年它的利润下降至3.25亿英镑,收入为13亿英镑。 ARM 重点关注的一个领域是汽车,它认为未来几年,越来越多的处理器将用于汽车。ARM 现在只占汽车芯片市场的20%份额。由于车内的电子设备越来越多,汽车制造商开始要求将多个控制电路做进一个芯片,以节省空间并消除电路的复杂性。随着自动驾驶汽车的出现,将需要更多的芯片。自动驾驶需要的计算能力是手机的10倍,这意味着每辆自动驾驶汽车,可能会让 ARM 收到十倍的特许费。ARM 预计,汽车芯片市场将变得与手机芯片市场一样大。 ARM 另一个重点领域是网络设备。ARM 认为世界将需要更多的网络设备,来有效地传送数据,并保证网络安全。ARM 在这个市场的份额从2011年的5%,已经增加到20%。 ARM 最弱的地方是服务器,这是一个几乎由英特尔垄断的市场,ARM 的份额不到1%。不过,去年11月,亚马逊宣布已经将 ARM 芯片用于服务器,开始提供云服务。主导云计算的巨型公司,希望能够有 ARM 服务器,这样就可以避免英特尔对他们索取垄断高价。 ARM 公司的一个障碍可能是开源芯片,任何企业都可以免费使用,从而放弃使用 ARM 芯片,比如 RISC-V 芯片就是开源的。 言论 1、 全周期工程师就是一个人负责完整的软件生命周期:设计,开发,测试,部署,操作和支持。 -- 《从全栈工程师到全周期工程师》 2、 只有大型工业,才会让人口大量聚集在一小块地方,愿意不干净地挤在一起生活。 -- T.E.劳伦斯《智慧七柱》 3、 磁带储存数据有一个好处,要是断了,只要把两头再连起来,依然可以读取文件,只丢了断掉的那部分。 -- 《CERN 见闻》 4、 互联网公司的时间是狗年。狗的一年,据说相当于人的七年。一家开张两年的互联网公司,就像经营了二十年的传统行业公司。 -- 某微信公号 5、 任何一种专门服务小企业的软件都很糟糕。对于大众软件来说,客户获取成本低,开发成本可以分散在数百万人身上,因此即使价格低,也有巨大的利润潜力。对于大企业软件而言,客户获取成本很高,但报酬也很高。对于小企业软件而言,客户获取成本仍然很昂贵(面对面的个人销售和售后支持),但销售价格仍然很低。 --《从零到一》 订阅 这个专栏每周五发布,同步更新在我的个人网站、微信公众号和语雀。 微信搜索"阮一峰的网络日志"或者扫描二维码,即可订阅。 (完) 文档信息 版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证) 发表日期: 2019年4月 5日


OAuth 2.0 的一个简单解释

OAuth 2.0 是目前最流行的授权机制,用来授权第三方应用,获取用户数据。 这个标准比较抽象,使用了很多术语,初学者不容易理解。其实说起来并不复杂,下面我就通过一个简单的类比,帮助大家轻松理解,OAuth 2.0 到底是什么。 一、快递员问题 我住在一个大型的居民小区。 小区有门禁系统。 进入的时候需要输入密码。 我经常网购和外卖,每天都有快递员来送货。我必须找到一个办法,让快递员通过门禁系统,进入小区。 如果我把自己的密码,告诉快递员,他就拥有了与我同样的权限,这样好像不太合适。万一我想取消他进入小区的权力,也很麻烦,我自己的密码也得跟着改了,还得通知其他的快递员。 有没有一种办法,让快递员能够自由进入小区,又不必知道小区居民的密码,而且他的唯一权限就是送货,其他需要密码的场合,他都没有权限? 二、授权机制的设计 于是,我设计了一套授权机制。 第一步,门禁系统的密码输入器下面,增加一个按钮,叫做"获取授权"。快递员需要首先按这个按钮,去申请授权。 第二步,他按下按钮以后,屋主(也就是我)的手机就会跳出对话框:有人正在要求授权。系统还会显示该快递员的姓名、工号和所属的快递公司。 我确认请求属实,就点击按钮,告诉门禁系统,我同意给予他进入小区的授权。 第三步,门禁系统得到我的确认以后,向快递员显示一个进入小区的令牌(access token)。令牌就是类似密码的一串数字,只在短期内(比如七天)有效。 第四步,快递员向门禁系统输入令牌,进入小区。 有人可能会问,为什么不是远程为快递员开门,而要为他单独生成一个令牌?这是因为快递员可能每天都会来送货,第二天他还可以复用这个令牌。另外,有的小区有多重门禁,快递员可以使用同一个令牌通过它们。 三、互联网场景 我们把上面的例子搬到互联网,就是 OAuth 的设计了。 首先,居民小区就是储存用户数据的网络服务。比如,微信储存了我的好友信息,获取这些信息,就必须经过微信的"门禁系统"。 其次,快递员(或者说快递公司)就是第三方应用,想要穿过门禁系统,进入小区。 最后,我就是用户本人,同意授权第三方应用进入小区,获取我的数据。 简单说,OAuth 就是一种授权机制。数据的所有者告诉系统,同意授权第三方应用进入系统,获取这些数据。系统从而产生一个短期的进入令牌(token),用来代替密码,供第三方应用使用。 四、令牌与密码 令牌(token)与密码(password)的作用是一样的,都可以进入系统,但是有三点差异。 (1)令牌是短期的,到期会自动失效,用户自己无法修改。密码一般长期有效,用户不修改,就不会发生变化。 (2)令牌可以被数据所有者撤销,会立即失效。以上例而言,屋主可以随时取消快递员的令牌。密码一般不允许被他人撤销。 (3)令牌有权限范围(scope),比如只能进小区的二号门。对于网络服务来说,只读令牌就比读写令牌更安全。密码一般是完整权限。 上面这些设计,保证了令牌既可以让第三方应用获得权限,同时又随时可控,不会危及系统安全。这就是 OAuth 2.0 的优点。 注意,只要知道了令牌,就能进入系统。系统一般不会再次确认身份,所以令牌必须保密,泄漏令牌与泄漏密码的后果是一样的。 这也是为什么令牌的有效期,一般都设置得很短的原因。 OAuth 2.0 对于如何颁发令牌的细节,规定得非常详细。具体来说,一共分成四种授权类型(authorization grant),即四种颁发令牌的方式,适用于不同的互联网场景。下一篇文章,我就来介绍这四种类型,并给出代码实例。 (完) 文档信息 版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证) 发表日期: 2019年4月 4日


每周分享第 49 期

这里记录过去一周,我看到的值得分享的东西,每周五发布。 欢迎投稿,或推荐你自己的项目,请前往 GitHub 的 ruanyf/weekly 提交 issue。 (题图:千岛湖,浙江,2018) 一个美国程序员分享自己的工作方法,其中有一条是 "要么不做,要做就做完"。 他的意思是,不要给自己留下做了一半的活。因为这意味着你需要再回来,继续把它做完;你会挂念这件事情,它就像一个钟摆,过一段时间就会重新出现在你的脑海,时不时烦扰着你。 你的目标应该是,当天就把这件事情做完,从此不必再去碰它,第二天继续做下一件事就行了。如果遇到一天做不完的大项目,那就把它分解成一个个小步骤,每天完成一个步骤。 我觉得他说得很好,但是这句话比较重要的,其实是前半句:有些事情不要去做。事情是做不完的,而你的时间和精力是有限的,不要只想着如何才能把事情做完,还要学会不做那些不应该做的事情。 某种程度上,不做比做完更困难。因为通常来说,做完一件事,多多少少都有一些好处,不做意味着你要放弃一些眼前的好处,这并不容易。 最糟糕的一种情况是,某个项目不值得做,但是你已经做了,为了不要浪费已经投入的成本,于是你进一步投入,在泥坑里面越陷越深。等到项目最后失败的时候,你大伤元气,一蹶不振。项目管理有一个很重要的原则,叫做"尽快失败",就是为了防止这种情况。胡适先生原来学农科,专业是果树栽培,他觉得实在没意思,大学读到一半就改学哲学,后来当上了北大校长。如果他没有放弃,想着拿完农科文凭再说,那他大概就不会有以后的成就了。总之,对于那些没希望的项目,放弃得越早越好。 新闻 1、胰岛素胶囊 糖尿病的病人需要注射胰岛素,而胰岛素只能血液给药(注射),不能通过口服,因为无法进入血液。麻省理工学院开发了一种胰岛素胶囊,可以通过口服补充胰岛素,大大方便了患者。 它的做法是,胶囊里面带有弹簧和一个可降解的小针,针头由压缩的冷冻干燥的胰岛素制成。当胶囊进入胃中,胃酸溶解了外层的糖壳,弹簧就会舒张,针头射到胃壁上,药物穿透胃壁,溶解进入血液。胃壁没有神经,因此患者感受不到疼痛。 2、气候科学家的遗言 2月中旬,美国著名气候科学家 Wallace Smith Broecker 录制了遗言。一周后,他就去世了。 遗言中,他认为由于过度排放二氧化碳,气候灾难已经无法避免,下一步人类将不得不采用一些极端的措施,比如在地球大气层中建立一个巨大的太阳光屏障,防止地球温度太高。最坏的情况下,我们需要让喷气式飞机,在地表以上约70,000英尺的大气中,释放大量二氧化硫。这跟大规模火山喷发的效果相似,1991年菲律宾的皮纳图博火山爆发,喷出的硫磺气体在整整一年的时间里,让地球冷却了一摄氏度。 3、白鲸回归海洋 上海长风海洋世界白鲸馆内的两头明星小白鲸"小白"和"小灰",2月28日进行了最后一次表演。这次表演结束后,这对白鲸姐妹将结束15年的表演生涯,重回大海怀抱。 为了帮它们找到一个合适回归的地方,团队实地考察了俄罗斯、北美洲、挪威和苏格兰等地。最终,位于冰岛南部海岸赫马岛的 Klettdvik 海湾,成为放归目的地,而它们也将成为该保护区首批住客。这个由默林娱乐集团创立的海洋生物基金会(SEA LIFE TRUST)打造的全球首个大型鲸目动物保护区,水域广达32000平方米、深达10米,非常适合鲸类生活。 为了让这趟回归之旅更加安全舒适,来自欧洲的卢森堡货运航空公司,为小白和小灰赞助了一架"私人飞机"。"私人飞机"为波音747-400ERF货机,足足有大半个足球场那么大。飞机表面还喷绘了小白小灰的可爱笑脸。 4、沃尔沃的安全措施 沃尔沃汽车宣布,从2020年开始,将提升旗下产品的安全等级。最主要的措施是,沃尔沃汽车的最高速度只能到180公里/小时,任何情况下都无法超出这个速度。另外,每辆汽车都自带数字地图,当行驶在学校、医院、行人密集的区域时,汽车行驶速度将自动放慢,无法加速。该功能被称为地理围栏。 5、AI 预测老年相貌 美国和加拿大的一组科学家开发了一个 AI 系统,可以根据照片和视频,生成该人老年时的相貌。科学家说,该系统的一个用途是寻找多年前失踪的儿童。 6、TensorFlow 的廉价硬件 TensorFlow 是谷歌的机器学习库,通常需要运行在昂贵的硬件上面。为了降低对硬件的要求,谷歌推出了 TensorFlow Lite 1.0,可以运行在嵌入式硬件上面。上图是一个 Cortex-M4 主板,可以运行简单的语音识别任务。这块主板具有 384KB RAM 和 1MB 闪存存储,售价只有15美元,功耗极低,使用一颗纽扣电池就可以运行数天。人工智能的硬件要求越来越低,以后越来越多的设备将具备"智能"。 7、隼鸟2号的难题 日本隼鸟2号(Hayabusa2)探测器,于2019年2月22日成功登陆小行星"龙宫"(Ryugu)。按照计划,它将于4月在小行星表面制造一次爆炸,然后抓取爆炸产生的地层内部碎片,2019年12月返回地球。 但是,这个计划现在遇到了一个问题。小行星"龙宫"非常小,大约是一个直径1公里的球体。这意味着,它的引力也非常小,任何速度高于每秒38厘米的物体都具备了逃逸速度,可以摆脱它的引力,飞向宇宙深处。这个速度大约就是企鹅的前进速度。那么爆炸产生的碎片会不会都脱离小行星,飞向宇宙?日本研究人员表示,他们还没有考虑这个问题,目前无法判断结果会是怎样。 8、MySpace 丢失数据 MySpace 宣布,用户在2003年~2015年上传到该网站的照片、音乐、视频,都已经丢失,无法找回。很显然,该网站没有备份。2006年,MySpace 曾经一度超过谷歌,成为美国访问量最大的网站。 这件事情的教训就是,永远不要相信,网站会永久保存你上传的数据。 9、一句话新闻 Intuit 是美国最畅销的报税软件,现在被发现,过去五年它花了1150万美元,游说政府不要减税。 美国政府正在考虑 6G 和 7G 的频谱分配,范围是 95GHz 到 3THz。作为参考,5G 的频谱范围大约 2GHz 到 60GHz。 挪威立法禁止砍伐森林,并且禁止采购任何与砍伐森林相关的产品。比如,砍伐森林改种果树,那么这些水果将无法向挪威出口。 中国已经成为全世界出国旅游人数最多的国家,尽管只有7%的中国人(9700万)有护照。 文章 1、JavaScript 模块简史(英文) 本文介绍历史上 JavaScript 各种模块方案的演变。 2、广告 ID 的现状(英文) 通常,网站用 Cookie 设置 ID,以便追踪用户。用户可以通过清除 Cookie,防止被追踪。但是手机上,App 可以通过无法重置的硬件 ID 追踪用户,比如 IMEI、网卡 MAC 地址,SIM 卡序列号等。为了解决这个问题,iPhone 和安卓都提供广告 ID 功能,既可以表示身份,又可以被用户重置。 3、SSD 硬盘是否可靠?(英文) 本文介绍了固态硬盘 SSD 的一些知识,以及与传统硬盘可靠性的对比。 4、磁力链接介绍(英文) 磁力链接是下载和共享 bittorrent 文件的一种方式,本文介绍了磁力链接的基本知识,以及与 Torrent 文件的关系。 5、单页应用的二进制打包(英文) 本文介绍了一种方法,将网站打包成一个 Go 语言的二进制程序。启动网站,就是运行这个程序。 6、抽象的成本(英文) 重复的代码通常会被抽象掉,本文讨论抽象带来的额外成本。 7、JSX 的替代方案(英文) JSX 是前端框架中书写网页代码的一种形式,本文介绍了 JSX 的替代方案,如果不用它,你有什么选择,以加深理解。 8、创建你的第一个 npm 包(英文) 入门文章,针对新手介绍如何创建一个 npm 模块。 9、App 的实验数据(英文) 很多 App 会进行 A/B 测试和新功能实验,将数据传回服务器,本文分析了 Airbnb、Pinterest 等 App 传回服务器的数据。 10、每行80个字符是很好的标准(英文) 作者谈了为什么每行80个字符的长度非常合理有用。 11、独立运行的 WebAssembly(英文) Mozilla 宣布发布独立的、跟 Web 无关的 WebAssembly 运行时,即 WASM 代码现在可以直接在各个操作系统运行。 软件 1、AssemblyScript 一个将 TypeScript 编译成 WebAssembly 的工具。 2、gitmoji-cli 在 git commit message 里面使用 emoji 的工具。(@LanjianNUll 投稿) 3、How old is it 该网站可以查询各种技术存在了多久,用来供 HR 招聘时了解,有些技术岗位要求五年经验是不现实的。 4、WorldWideWeb 世界第一个浏览器的模拟器,还原了欧洲核子研究中心发明的 WWW 服务。 5、uncss 去除样式表里面没有用到的 CSS 规则的工具。(@IceBay 投稿) 6、Bookworm 电子书阅读软件,目前只能在 Linux 系统安装。 7、EmailBin 向该网站发送 Email,你的 Email 会变成一个网页,所有人都可以访问。 8、ICONSVG 一套可以定制的 SVG 图标。 9、ayvri 根据行进路线,生成 3D 可视化的行程视频。 10、day.js 一个 2KB 的 JS 日期时间库,和 Moment.js 的 API 设计保持完全一样. 如果您曾经用过 Moment.js, 那么您已经知道如何使用 Day.js。(@xxyuk 投稿) 11、WordPress 版微信小程序 将 WordPress 应用转为微信小程序。(@Y024 投稿) 12、greendns 一个防止 DNS 污染且 CDN 友好的开源 DNS 服务端。(@faicker 投稿) 13、996.icu 一个程序员制作的抗议 996 工作制的网站。(@9527q 投稿) 资源 1、OCaml 语言在线教程 OCaml 语言教程,从最简单的讲起。 2、Qt5 教程 开源电子书,介绍如何使用 Qt5,开发图形界面。 3、Python 数据科学手册 使用 Python 工具进行数据科学研究的教程,现在全书开源了。 4、WikiHow 一个收集如何解决生活中各种问题的网站,比如"如何换轮胎"、"如何调整电脑字体大小"等等。(@xcuYao 投稿) 5、互动式计算机语言学习网站 该网站提供近10种常用语言(C、Python、JS、Java 等等)的实例教程。(@baibm 投稿) 6、计算机理论导论 哈佛大学本科生的《计算机理论》课程的教材,已经开源。 7、Japan Dev Jobs 一个分享日本技术工作机会的邮件列表,想去日本工作的开发者可关注。(@roujiangzailushang 投稿) 图片 1、密码雕塑 美国 CIA 总部内部有一件雕塑品,上面是四段加密文字。这是1989年一位雕塑家创作的。目前,其中三段已经被破解了,但是最后一段依然无法破解。 2、红衫树桩 1890年,美国加州砍伐了一棵红衫之后,人们的合影。 3、月亮照片 一位爱好者拍摄了近5万张夜空图像,然后合成了一张81万像素的月球图像。 文摘 1、为什么你应该停止阅读新闻? 今天的新闻业与以前有很大不同。 (1)新闻传播的速度大大提高。现在,新闻在发生后的几秒内,就开始传播,每个人在很短时间内,就会知道发生了什么事。 (2)新闻的产出成本大幅下降。现在,有人可以每天写12篇报道,一年就是近3000篇,这还只是一个人的产量。这么快的产出速度,几乎不可能在一个主题有一些深思熟虑的东西。由于产出成本已降至接近零,因此新闻业存在很多竞争。 (3)新闻业企图给读者洗脑。今天的新闻不再强调客观,而是充满了主观看法,企图用个性吸引读者。 (4)点击量成了主要目标。由于竞争激烈,大多数新闻媒体都不得不提供免费新闻,因此必须依靠广告产生收入。广告收入的高低直接依赖于点击量。创造很多耸人听闻的新闻,最容易获得点击。 总之,今天网上的大部分新闻都毫无意义,对你的生活并不重要,不会帮助你做出更好的决定,也不会帮助你理解世界,与周围的人建立联系。它们只会消耗你的注意力,造成你的注意力不足。你被大量信息包围,感到不知所措,为了赶上这一切,内心承受了压力。完全不看新闻,可能是更好的做法。 2、研究也是一种债务 大多数研究就像爬山一样。 有抱负的研究人员必须努力理解摆在他们面前的大量工作,学习各种技巧,攀登现有知识的顶峰。到达顶峰后,研究人员开始做新的工作,将新的石头扔到山顶上,让接下来的人可以爬得更高一点。 数学就是一个鲜明的例子。几个世纪以来,无数学者攀登了数学山脉,并在顶部铺设了新的巨石。随着时间的推移,形成了不同的山峰,建立在美丽的数学定理之上。当代数学的高峰是如此众多和陡峭,以至于任何人都无法全部攀爬它们。即使经过一生的努力,数学家也只能享受其中的一些景观。 人们期望攀登变得艰难,这反映了数学的巨大进步和数学家的努力。攀登被视为一次智力朝圣,是一种晋级的仪式。但是,攀登本身并不值得骄傲。 科学的山峰越来越高,攀登越来越难,这并不是单纯的进步,而是留给后人的一堆债务。 言论 1、 我们这个时代的痛苦在于,那些愚蠢的人都非常自信,那些有想象力和理解能力的人充满了怀疑和犹豫不决。 -- 《关于愚蠢》 2、 他拥有在一件事成为现实之前,就发现它的本事。对他显而易见的事情,其他人要等到十年之后,才觉得显而易见。 -- 《孙正义的故事》 3、 社交媒体的问题是永不结束。它只让你看最新的东西,就像在轮子上奔跑的仓鼠一样,我们生活在消耗短暂内容的无限循环中,结果我们失去了历史感。 -- 《此时此刻永无止尽》 4、 可乐不会形成味道的记忆。你可以在上午9点,上午11点,下午5点各喝一杯,而不会对它的味道厌倦,其他饮料都做不到,一段时间后你会厌倦它们。普通人每天饮用64盎司的液体,你可以将所有64盎司的液体都换成可乐。 -- 巴菲特解释他为什么投资可口可乐 5、 创业公司的一个好处是,一切都如此混乱,如果你不小心搞砸了某事,没有人会注意到。 -- HN 读者留言 订阅 这个专栏每周五发布,同步更新在我的个人网站、微信公众号和语雀。 微信搜索"阮一峰的网络日志"或者扫描二维码,即可订阅。 (完) 文档信息 版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证) 发表日期: 2019年3月29日


Grid 布局教程

一、概述 网格布局(Grid)是最强大的 CSS 布局方案。 它将网页划分成一个个网格,可以任意组合不同的网格,做出各种各样的布局。以前,只能通过复杂的 CSS 框架达到的效果,现在浏览器内置了。 上图这样的布局,就是 Grid 布局的拿手好戏。 Grid 布局与 Flex 布局有一定的相似性,都可以指定容器内部多个项目的位置。但是,它们也存在重大区别。 Flex 布局是轴线布局,只能指定"项目"针对轴线的位置,可以看作是一维布局。Grid 布局则是将容器划分成"行"和"列",产生单元格,然后指定"项目所在"的单元格,可以看作是二维布局。Grid 布局远比 Flex 布局强大。 二、基本概念 学习 Grid 布局之前,需要了解一些基本概念。 2.1 容器和项目 采用网格布局的区域,称为"容器"(container)。容器内部采用网格定位的子元素,称为"项目"(item)。 <div> <div><p>1</p></div> <div><p>2</p></div> <div><p>3</p></div> </div> 上面代码中,最外层的<div>元素就是容器,内层的三个<div>元素就是项目。 注意:项目只能是容器的顶层子元素,不包含项目的子元素,比如上面代码的<p>元素就不是项目。Grid 布局只对项目生效。 2.2 行和列 容器里面的水平区域称为"行"(row),垂直区域称为"列"(column)。 上图中,水平的深色区域就是"行",垂直的深色区域就是"列"。 2.3 单元格 行和列的交叉区域,称为"单元格"(cell)。 正常情况下,n行和m列会产生n x m个单元格。比如,3行3列会产生9个单元格。 2.4 网格线 划分网格的线,称为"网格线"(grid line)。水平网格线划分出行,垂直网格线划分出列。 正常情况下,n行有n + 1根水平网格线,m列有m + 1根垂直网格线,比如三行就有四根水平网格线。 上图是一个 4 x 4 的网格,共有5根水平网格线和5根垂直网格线。 三、容器属性 Grid 布局的属性分成两类。一类定义在容器上面,称为容器属性;另一类定义在项目上面,称为项目属性。这部分先介绍容器属性。 3.1 display 属性 display: grid指定一个容器采用网格布局。 div { display: grid; } 上图是display: grid的效果。 默认情况下,容器元素都是块级元素,但也可以设成行内元素。 div { display: inline-grid; } 上面代码指定div是一个行内元素,该元素内部采用网格布局。 上图是display: inline-grid的效果。 注意,设为网格布局以后,容器的float、display: inline-block、display: table-cell、vertical-align和column-*等设置都将失效。 3.2 grid-template-columns 属性,grid-template-rows 属性 容器指定了网格布局以后,接着就要划分行和列。grid-template-columns属性定义每一列的列宽,grid-template-rows属性定义每一行的行高。 .container { display: grid; grid-template-columns: 100px 100px 100px; grid-template-rows: 100px 100px 100px; } 上面代码指定了一个三行三列的网格,列宽和行高都是100px。 除了使用绝对单位,也可以使用百分比。 .container { display: grid; grid-template-columns: 33.33% 33.33% 33.33%; grid-template-rows: 33.33% 33.33% 33.33%; } (1)repeat() 有时候,重复写同样的值非常麻烦,尤其网格很多时。这时,可以使用repeat()函数,简化重复的值。上面的代码用repeat()改写如下。 .container { display: grid; grid-template-columns: repeat(3, 33.33%); grid-template-rows: repeat(3, 33.33%); } repeat()接受两个参数,第一个参数是重复的次数(上例是3),第二个参数是所要重复的值。 repeat()重复某种模式也是可以的。 grid-template-columns: repeat(2, 100px 20px 80px); 上面代码定义了6列,第一列和第四列的宽度为100px,第二列和第五列为20px,第三列和第六列为80px。 (2)auto-fill 关键字 有时,单元格的大小是固定的,但是容器的大小不确定。如果希望每一行(或每一列)容纳尽可能多的单元格,这时可以使用auto-fill关键字表示自动填充。 .container { display: grid; grid-template-columns: repeat(auto-fill, 100px); } 上面代码表示每列宽度100px,然后自动填充,直到容器不能放置更多的列。 (3)fr 关键字 为了方便表示比例关系,网格布局提供了fr关键字(fraction 的缩写,意为"片段")。如果两列的宽度分别为1fr和2fr,就表示后者是前者的两倍。 .container { display: grid; grid-template-columns: 1fr 1fr; } 上面代码表示两个相同宽度的列。 fr可以与绝对长度的单位结合使用,这时会非常方便。 .container { display: grid; grid-template-columns: 150px 1fr 2fr; } 上面代码表示,第一列的宽度为150像素,第二列的宽度是第三列的一半。 (4)minmax() minmax()函数产生一个长度范围,表示长度就在这个范围之中。它接受两个参数,分别为最小值和最大值。 grid-template-columns: 1fr 1fr minmax(100px, 1fr); 上面代码中,minmax(100px, 1fr)表示列宽不小于100px,不大于1fr。 (5)auto 关键字 auto关键字表示由浏览器自己决定长度。 grid-template-columns: 100px auto 100px; 上面代码中,第二列的宽度,基本上等于该列单元格的最大宽度,除非单元格内容设置了min-width,且这个值大于最大宽度。 (6)网格线的名称 grid-template-columns属性和grid-template-rows属性里面,还可以使用方括号,指定每一根网格线的名字,方便以后的引用。 .container { display: grid; grid-template-columns: [c1] 100px [c2] 100px [c3] auto [c4]; grid-template-rows: [r1] 100px [r2] 100px [r3] auto [r4]; } 上面代码指定网格布局为3行 x 3列,因此有4根垂直网格线和4根水平网格线。方括号里面依次是这八根线的名字。 网格布局允许同一根线有多个名字,比如[fifth-line row-5]。 (7)布局实例 grid-template-columns属性对于网页布局非常有用。两栏式布局只需要一行代码。 .wrapper { display: grid; grid-template-columns: 70% 30%; } 上面代码将左边栏设为70%,右边栏设为30%。 传统的十二网格布局,写起来也很容器。 grid-template-columns: repeat(12, 1fr); 3.3 grid-row-gap 属性,grid-column-gap 属性,grid-gap 属性 grid-row-gap属性设置行与行的间隔(行间距),grid-column-gap属性设置列与列的间隔(列间距)。 .container { grid-row-gap: 20px; grid-column-gap: 20px; } 上面代码中,grid-row-gap用于设置行间距,grid-column-gap用于设置列间距。 grid-gap属性是grid-column-gap和grid-row-gap的合并简写形式,语法如下。 grid-gap: <grid-row-gap> <grid-column-gap>; 因此,上面一段 CSS 代码等同于下面的代码。 .container { grid-gap: 20px 20px; } 如果grid-gap省略了第二个值,浏览器认为第二个值等于第一个值。 根据最新标准,上面三个属性名的grid-前缀已经删除,grid-column-gap和grid-row-gap写成column-gap和row-gap,grid-gap写成gap。 3.4 grid-template-areas 属性 网格布局允许指定"区域"(area),一个区域由单个或多个单元格组成。grid-template-areas属性用于定义区域。 .container { display: grid; grid-template-columns: 100px 100px 100px; grid-template-rows: 100px 100px 100px; grid-template-areas: 'a b c' 'd e f' 'g h i'; } 上面代码先划分出9个单元格,然后将其定名为a到i的九个区域,分别对应这九个单元格。 多个单元格合并成一个区域的写法如下。 grid-template-areas: 'a a a' 'b b b' 'c c c'; 上面代码将9个单元格分成a、b、c三个区域。 下面是一个布局实例。 grid-template-areas: "header header header" "main main sidebar" "footer footer footer"; 上面代码中,顶部是页眉区域header,底部是页脚区域footer,中间部分则为main和sidebar。 如果某些区域不需要利用,则使用"点"(.)表示。 grid-template-areas: 'a . c' 'd . f' 'g . i'; 上面代码中,中间一列为点,表示没有用到该单元格,或者该单元格不属于任何区域。 注意,区域的命名会影响到网格线。每个区域的起始网格线,会自动命名为区域名-start,终止网格线自动命名为区域名-end。 比如,区域名为header,则起始位置的水平网格线和垂直网格线叫做header-start,终止位置的水平网格线和垂直网格线叫做header-end。 3.5 grid-auto-flow 属性 划分网格以后,容器的子元素会按照顺序,自动放置在每一个网格。默认的放置顺序是"先行后列",即先填满第一行,再开始放入第二行,即下图数字的顺序。 这个顺序由grid-auto-flow属性决定,默认值是row,即"先行后列"。也可以将它设成column,变成"先列后行"。 grid-auto-flow: column; 上面代码设置了column以后,放置顺序就变成了下图。 grid-auto-flow属性除了设置成row和column,还可以设成row dense和column dense。这两个值主要用于,某些项目指定位置以后,剩下的项目怎么自动放置。 下面的例子让1号项目和2号项目各占据两个单元格,然后在默认的grid-auto-flow: row情况下,会产生下面这样的布局。 上图中,1号项目后面的位置是空的,这是因为3号项目默认跟着2号项目,所以会排在2号项目后面。 现在修改设置,设为row dense,表示"先行后列",并且尽可能紧密填满,尽量不出现空格。 grid-auto-flow: row dense; 上面代码的效果如下。 上图会先填满第一行,再填满第二行,所以3号项目就会紧跟在1号项目的后面。8号项目和9号项目就会排到第四行。 如果将设置改为column dense,表示"先列后行",并且尽量填满空格。 grid-auto-flow: column dense; 上面代码的效果如下。 上图会先填满第一列,再填满第2列,所以3号项目在第一列,4号项目在第二列。8号项目和9号项目被挤到了第四列。 3.6 justify-items 属性,align-items 属性,place-items 属性 justify-items属性设置单元格内容的水平位置(左中右),align-items属性设置单元格内容的垂直位置(上中下)。 .container { justify-items: start | end | center | stretch; align-items: start | end | center | stretch; } 这两个属性的写法完全相同,都可以取下面这些值。 start:对齐单元格的起始边缘。 end:对齐单元格的结束边缘。 center:单元格内部居中。 stretch:拉伸,占满单元格的整个宽度(默认值)。 .container { justify-items: start; } 上面代码表示,单元格的内容左对齐,效果如下图。 .container { align-items: start; } 上面代码表示,单元格的内容头部对齐,效果如下图。 place-items属性是align-items属性和justify-items属性的合并简写形式。 place-items: <align-items> <justify-items>; 下面是一个例子。 place-items: start end; 如果省略第二个值,则浏览器认为与第一个值相等。 3.7 justify-content 属性,align-content 属性,place-content 属性 justify-content属性是整个内容区域在容器里面的水平位置(左中右),align-content属性是整个内容区域的垂直位置(上中下)。 .container { justify-content: start | end | center | stretch | space-around | space-between | space-evenly; align-content: start | end | center | stretch | space-around | space-between | space-evenly; } 这两个属性的写法完全相同,都可以取下面这些值。(下面的图都以justify-content属性为例,align-content属性的图完全一样,只是将水平方向改成垂直方向。) start - 对齐容器的起始边框。 end - 对齐容器的结束边框。 center - 容器内部居中。 stretch - 项目大小没有指定时,拉伸占据整个网格容器。 space-around - 每个项目两侧的间隔相等。所以,项目之间的间隔比项目与容器边框的间隔大一倍。 space-between - 项目与项目的间隔相等,项目与容器边框之间没有间隔。 space-evenly - 项目与项目的间隔相等,项目与容器边框之间也是同样长度的间隔。 place-content属性是align-content属性和justify-content属性的合并简写形式。 place-content: <align-content> <justify-content> 下面是一个例子。 place-content: space-around space-evenly; 如果省略第二个值,浏览器就会假定第二个值等于第一个值。 3.8 grid-auto-columns 属性,grid-auto-rows 属性 有时候,一些项目的指定位置,在现有网格的外部。比如网格只有3列,但是某一个项目指定在第5行。这时,浏览器会自动生成多余的网格,以便放置项目。 grid-auto-columns属性和grid-auto-rows属性用来设置,浏览器自动创建的多余网格的列宽和行高。它们的写法与grid-template-columns和grid-template-rows完全相同。如果不指定这两个属性,浏览器完全根据单元格内容的大小,决定新增网格的列宽和行高。 下面的例子里面,划分好的网格是3行 x 3列,但是,8号项目指定在第4行,9号项目指定在第5行。 .container { display: grid; grid-template-columns: 100px 100px 100px; grid-template-rows: 100px 100px 100px; grid-auto-rows: 50px; } 上面代码指定新增的行高统一为50px(原始的行高为100px)。 3.9 grid-template 属性,grid 属性 grid-template属性是grid-template-columns、grid-template-rows和grid-template-areas这三个属性的合并简写形式。 grid属性是grid-template-rows、grid-template-columns、grid-template-areas、 grid-auto-rows、grid-auto-columns、grid-auto-flow这六个属性的合并简写形式。 从易读易写的角度考虑,还是建议不要合并属性,所以这里就不详细介绍这两个属性了。 四、项目属性 下面这些属性定义在项目上面。 4.1 grid-column-start 属性,grid-column-end 属性,grid-row-start 属性,grid-row-end 属性 项目的位置是可以指定的,具体方法就是指定项目的四个边框,分别定位在哪根网格线。 grid-column-start属性:左边框所在的垂直网格线 grid-column-end属性:右边框所在的垂直网格线 grid-row-start属性:上边框所在的水平网格线 grid-row-end属性:下边框所在的水平网格线 .item-1 { grid-column-start: 2; grid-column-end: 4; } 上面代码指定,1号项目的左边框是第二根垂直网格线,右边框是第四根垂直网格线。 上图中,只指定了1号项目的左右边框,没有指定上下边框,所以会采用默认位置,即上边框是第一根水平网格线,下边框是第二根水平网格线。 除了1号项目以外,其他项目都没有指定位置,由浏览器自动布局,这时它们的位置由容器的grid-auto-flow属性决定,这个属性的默认值是row,因此会"先行后列"进行排列。读者可以把这个属性的值分别改成column、row dense和column dense,看看其他项目的位置发生了怎样的变化。 下面的例子是指定四个边框位置的效果。 .item-1 { grid-column-start: 1; grid-column-end: 3; grid-row-start: 2; grid-row-end: 4; } 这四个属性的值,除了指定为第几个网格线,还可以指定为网格线的名字。 .item-1 { grid-column-start: header-start; grid-column-end: header-end; } 上面代码中,左边框和右边框的位置,都指定为网格线的名字。 这四个属性的值还可以使用span关键字,表示"跨越",即左右边框(上下边框)之间跨越多少个网格。 .item-1 { grid-column-start: span 2; } 上面代码表示,1号项目的左边框距离右边框跨越2个网格。 这与下面的代码效果完全一样。 .item-1 { grid-column-end: span 2; } 使用这四个属性,如果产生了项目的重叠,则使用z-index属性指定项目的重叠顺序。 4.2 grid-column 属性,grid-row 属性 grid-column属性是grid-column-start和grid-column-end的合并简写形式,grid-row属性是grid-row-start属性和grid-row-end的合并简写形式。 .item { grid-column: / ; grid-row: / ; } 下面是一个例子。 .item-1 { grid-column: 1 / 3; grid-row: 1 / 2; } /* 等同于 */ .item-1 { grid-column-start: 1; grid-column-end: 3; grid-row-start: 1; grid-row-end: 2; } 上面代码中,项目item-1占据第一行,从第一根列线到第三根列线。 这两个属性之中,也可以使用span关键字,表示跨越多少个网格。 .item-1 { background: #b03532; grid-column: 1 / 3; grid-row: 1 / 3; } /* 等同于 */ .item-1 { background: #b03532; grid-column: 1 / span 2; grid-row: 1 / span 2; } 上面代码中,项目item-1占据的区域,包括第一行 + 第二行、第一列 + 第二列。 斜杠以及后面的部分可以省略,默认跨越一个网格。 .item-1 { grid-column: 1; grid-row: 1; } 上面代码中,项目item-1占据左上角第一个网格。 4.3 grid-area 属性 grid-area属性指定项目放在哪一个区域。 .item-1 { grid-area: e; } 上面代码中,1号项目位于e区域,效果如下图。 grid-area属性还可用作grid-row-start、grid-column-start、grid-row-end、grid-column-end的合并简写形式,直接指定项目的位置。 .item { grid-area: <row-start> / <column-start> / <row-end> / <column-end>; } 下面是一个例子。 .item-1 { grid-area: 1 / 1 / 3 / 3; } 4.4 justify-self 属性,align-self 属性,place-self 属性 justify-self属性设置单元格内容的水平位置(左中右),跟justify-items属性的用法完全一致,但只作用于单个项目。 align-self属性设置单元格内容的垂直位置(上中下),跟align-items属性的用法完全一致,也是只作用于单个项目。 .item { justify-self: start | end | center | stretch; align-self: start | end | center | stretch; } 这两个属性都可以取下面四个值。 start:对齐单元格的起始边缘。 end:对齐单元格的结束边缘。 center:单元格内部居中。 stretch:拉伸,占满单元格的整个宽度(默认值)。 下面是justify-self: start的例子。 .item-1 { justify-self: start; } place-self属性是align-self属性和justify-self属性的合并简写形式。 place-self: <align-self> <justify-self>; 下面是一个例子。 place-self: center center; 如果省略第二个值,place-self属性会认为这两个值相等。 五、参考链接 A Complete Guide to Grid, by Chris House Understanding the CSS Grid Layout Module, by Ian Yates How to Build an Off-Canvas Navigation With CSS Grid, Ian Yates Introduction to the CSS Grid Layout With Examples, Dogacan Bilgili Learn CSS Grid, Jonathan Suh How I stopped using Bootstrap's layout thanks to CSS Grid, Cédric Kui (完) 文档信息 版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证) 发表日期: 2019年3月25日


每周分享第 48 期

这里记录过去一周,我看到的值得分享的东西,每周五发布。 欢迎投稿,或推荐你自己的项目,请前往 GitHub 的 ruanyf/weekly 提交 issue。 上图是世界最著名的程序员之一:Bill Joy。 四十年前,他20岁出头,在加州大学柏克利分校读研究生,是 Unix 系统 BSD 版本的主要作者之一。因为找不到合适的编辑器,他用一个周末,在 ex 命令的基础上创造了 Vi 编辑器。Unix 系统的 TCP/IP 协议也是他实现的。 28岁时,他与其他人一起创建 Sun 系统公司,担任首席科学家,参与发明了 Java 语言。2003年,49岁时,他从 Sun 公司离职,改为从事风险投资。但是,他不投互联网公司,只投绿色能源,尤其是新型电池。原因是电动汽车大规模推广以后,地球上所有的锂元素制造电池都不够,必须找到新种类的电池。 我觉得,他的人生非常令人羡慕。不是因为取得的成就,而是因为每个人生阶段,他都在干不一样的事情:年轻时是程序员,中年时是科学家,老年时是新能源企业家。美国总统特朗普也是这种情况:年轻时是房地产商,中年时变成电视明星(《学徒》一口气拍了十季),老年时变成了总统。人生就好像一次旅行,不同时期能够从事不同的领域,就好像看到了不同的风景,体验了不一样的人生。 时代在变化,人生的可能性比任何时候都要多,真的没必要,一种职业干到老,多么单调的人生。实际上也不太可能,有人统计2002年的中国500大企业,三分之二以上已经消失或没落了。这么大的公司都撑不久,何况个人呢?我们在规划自己的人生时,应该有这种预见:总有一天,可能是每隔七年,我就会彻底离开现在的领域,在一个不一样的地方,干着自己感兴趣(理想的情况)或者不感兴趣(不理想的情况)的事情。 新闻 1、汽水税 2014年,美国加州伯克利市宣布开征"汽水税",希望降低人们对含糖饮料的消费,因为大量喝含糖饮料会导致肥胖和糖尿病。 四年后,有一项研究发现,2014~2017年期间,该市的汽水销售量减少了52%。2014年之前,伯克利的居民每天平均喝1.25次含糖饮料。2014年之后,每天平均喝0.5次。同一时期,周边城市的汽水消费量则没有明显变化。 2、世界最大的蜜蜂 印度尼西亚北部的一个小岛上,生活着一种世界最大的蜜蜂 Megachile pluto,比普通蜜蜂大四倍。上次人们看到这种蜜蜂,还是在1981年。 2018年3月,一只雌性的此类蜜蜂的新标本,出现在拍卖网站上,以9100美元的价格成交。几个月后,第二个标本出现,售价为4,150美元。科学家非常担忧,一方面印尼的热带雨林正在快速消失,另一方面这么高的拍卖价格,将会加速这种蜜蜂的灭亡。 2019年1月,一支由美国、澳大利亚、加拿大科学家组成的团队,前往寻找这种蜜蜂。在一个小岛上搜寻五天后,终于在离开前一天,他们发现了这种蜜蜂的活体。科学家希望印尼政府对此采取保护措施。 3、仍在使用的寻呼机 上个世纪80年代,手机普及之前,寻呼机曾被广泛使用,目前已经淘汰了。但是,医疗行业仍在使用寻呼机,单单是英国,还有13万台寻呼机在使用中。医疗行业的许多人认为,寻呼机快速可靠,尤其在紧急情况下有重要作用。 相比手机,寻呼机的优点有:(1)医院的手机信号和 Wi-Fi 信号覆盖范围不完整,往往有死角;(2)手机可能会干扰医院设备;(3)寻呼机功能单一,因此更便捷可靠。 4、ARM 芯片的 Mac 有迹象表明,苹果公司可能会在2020年,将 Mac 电脑的 CPU 芯片从 Intel 的 x86 改为 ARM 芯片,主要目的是让 iPhone、iPad 和 Mac 可以运行同一个应用程序。Mac 以前也改过 CPU 芯片,当时是从摩托罗拉的 PowerPC 芯片改成英特尔。 5、转基因蚊子 意大利的一个实验室已经培养出了转基因蚊子。这种蚊子的嘴巴类似于雄蚊子的嘴巴,所以不能咬人,因此无法传播病菌。此外,这种蚊子的生殖器官变形,这意味着它们不能产卵。这些基因改变会传给下一代,这意味着有可能让蚊子灭绝。 实验室还在评估,这种技术是否安全有效。如果确认的话,有朝一日可能会在疟疾盛行的非洲村庄,把它们释放出来,目标是最终让所有的雌蚊子都受到感染。 6、维珍银河的第一位太空乘客 2月22日,英国太空飞机公司维珍银河(Virgin Galactic),搭载了第一位太空乘客,进行了试飞。飞机飞到距离地面90公里的太空,然后安全返回。该公司计划开展太空观光,让游客在太空观看地球,并且体验失重,据称目前已经有600多人报名。 这次的乘客是一名叫做 Beth Moses 的女性,在维珍银河担任太空乘客的培训老师。与她一起上天的还有两名飞行员。下图是飞行过程的示意图。 7、机器人菩萨 2月23日,日本京都的高台寺公开展示了一个机器人菩萨 Kannon,它象征日本的怜悯之神,造价90万美元。该机器人身高1米95,会念《心经》,进行佛教布道。 该机器人内部安装了 Android 系统,它是世界上第一个受到信徒崇拜的机器人。它的左眼安装了一个摄像头,可以移动头部,手臂和躯干。 8、一句话新闻 Gali.com 这个网站每天至少有5000次访问,并且收到几百万封邮件,原因是人们把 gmail 拼错了。 最新研究发现,周末补睡也无法弥补平时缺乏睡眠对健康造成的影响。 特斯拉公司发布新的超级充电桩,充电5分钟可以行驶120公里,使得用户平均减少充电时间50%。 互联网是1989年3月12日由 Tim Berners-Lee 发明的,三十周年纪念日来临之际,谷歌发布了一个纪念 Doodle。 文章 1、异步编程是什么?(英文) 一组系列文章,从操作系统的高度,较为通俗地介绍如何认识异步编程。 2、行内 JS 脚本的堵塞效应(英文) 网页加载 JS 脚本时,允许异步加载脚本(即加上 async 属性),但是行内脚本可以堵塞异步脚本,本文介绍解决方法。 3、Unix 文本操作命令介绍(英文) Unix 命令行有许多操作文本的命令,本文逐一介绍。 4、Python 数据类型简介(英文) 初学者的基础知识文章,介绍和列举 Python 的数据类型。 5、正则表达式为什么不能解析 HTML 网页?(英文) 正则表达式最多只能解析网页的片段,而不可能写出一个基于它的 HTML 解析器。 6、Go 语言编程风格的最佳实践(英文) 作者谈了一些建议,如何编写可维护的 Go 语言代码。 7、橙色的历史(英文) 欧洲人直到16世纪才开始使用这种颜色。橙色象征着生育和富饶,上图是1895年的油画,反映了穿着橙色长袍的青年女性。 8、Beacon:暗网的搜索引擎(英文) 暗网必须在加密条件下才能访问。Beacon 是一个暗网的搜索引擎,允许在正常网络中搜索暗网的信息,该工具目前还没有正式推出,本文只是介绍。 9、网站扩展的图说教程(英文) 本片使用多张图片,通俗地解释如何拓展网站服务,承受更大的访问量。 10、Flexbox 详解(中文) 详细介绍 CSS 的 Flexbox 布局,配有大量图片说明。(@veedrin 投稿) 11、React Router 为什么发布5.0版?(英文) 如果你记不住脱字符( ^ )的作用,下面这起事故会让你记住。react-router 先发了4.4版,但是一个核心衍生库(react-router-dom)的4.3版,依赖错误地写成 "react-router": "^4.3.1" ,与4.4版不兼容导致报错。最后团队决定,撤销4.4版,改发5.0版。 工具 1、github-history 该工具提供一个用户友好的界面,查看某个文件在 GitHub 上面的编辑历史。 2、swc 一个使用 Rust 语言写的 JS 转码器,可以取代 Babel,将 ES6/TS/JSX 代码转成 ES5 代码。 3、miniC-hosting 运行在浏览器里面的 C 语言虚拟机。 4、Search Icons Visually 图标搜索引擎。你上传一个图标,它就返回一系列相似的图标。 5、gitignore.io 生成 gitignore 文件的网站。 6、DeskGap 生成跨平台(Win & Mac)桌面应用的工具,类似 Electron,但是使用了系统内置的 WebView。 7、TLDR 小程序 TLDR 项目移植到小程序,微信查看 Linux 命令。(@zqb-all 投稿) 8、WireGuard for macOS WireGuard 的 Mac 客户端。 9、Sloth Mac 系统的桌面应用,显示当前所有正在运行的进程、打开的文件和系统连接(socket),基本上就是 lsof 命令的图形界面。 10、Marp 跨平台的桌面工具,将 Markdown 文档转成幻灯片。 11、COI - Chat Over IMAP(英文) IMAP 电子邮件协议可以实时推送邮件,COI 就是基于这一点实现的一个聊天协议。通过它的客户端,可以达到聊天效果,但实际是互相发送 Email。 12、coderplanets 小众语言的社区,可以建立各种主题的子社区。CodePlantes 是开源的,服务端使用 Elixir 语言编写。(@mydearxym 投稿) 资源 1、Tracker 服务器列表 BT 下载需要有稳定的 Tracker 服务,该网站收集可用的 Tracker 服务器列表。另外还有一个 GitHub 仓库 ,也是做类似的事情。 2、Treeographer 该网站收集各种著名树木的历史。 3、Our World in Data 该网站收集一些世界性问题的数据,比如人口、健康、食物、能源等等。 4、互动式线性代数教程 基于网页的线性代数教程,有各种互动式图形。 5、Grokking Deep Learning 深度学习入门教材的在线阅读。 6、Marc Andreessen 创业文集 Marc Andreessen 是 Netscape 浏览器创始人,现在是硅谷著名的风险投资家,本书收集了他关于创业的文章。 7、中国独立 iOS 和 macOS 开发者的作品 该仓库收集个人开发者提交的作品。(@Y024 投稿) 8、GeoFS GeoFS是一个免费的在线飞行模拟器,包含全球的真实景色。你只需要一个网页浏览器就能运行它。(@JeremiahZhang 投稿) 文摘 1、微出行的意义 去年,美国开始流行共享电动滑板车和自行车。很多人把它们看作玩具或者一种时尚风潮,但是我认为,这种微出行比自动驾驶的意义更重大。 微出行比汽车出行更清洁、更安全。除了非常便宜,它们将空间和能源的使用效率提升了一个数量级,而且马上就可以部署它们,不用等待新技术普及。这些特点会改变游戏规则,汽车公司花费数十亿美元追求同样的效果,微出行轻松就达到了。 (1)清洁 交通运输占温室气体排放量的28%。微出行可以承担2英里以下的大部分出行,占城市出行的40%,不排放任何温室气体。 更重要的是,它提高了能源效率。汽车内燃机的效率仅为35%,即只有35%的能量可以用于行进,其余部分都是热能损耗。然后,35%的能量里面,只有5%用于移动乘客 - 另外95%用于移动汽车本身。因此,汽车的整体效率为0.05 * 0.35 = 1.75%。这意味着每加仑汽油,只有2盎司用于移动乘客,其余的要么在高温下丢失,要么用来移动你的车。 相比之下,电动滑板车的能源效率是85%,由于它本身重量约为30磅,所以整体能量的70%可以用于移动乘客。这比汽车提高了4000%。 (2)空间 微出行更节省空间。下图是60个人的出行方式,左边是他们全部驾驶汽车占据的空间,右边是他们步行、骑自行车、乘公共汽车占据的空间。 下图是哥本哈根的一所学校,停放汽车和停放自行车的对比。同样的空间,只能停放七八辆汽车,如果改成自行车,可以停放100多辆。 电动滑板车还允许骑车者彼此之间保持较短的安全距离。这两个因素相结合,将导致交通流量增加10倍。 (3)安全 如果城市交通40%变成自行车和电动滑板车,全世界每年可以少死几十万人。 (4)城市面貌 一座充满自行车的城市,远远比充满汽车的城市更适合居住。下图是30年前和现在的丹麦街道的对比,该国大力推广自行车取代汽车。 这些变化不仅仅对城市风貌有影响,还对当地经济产生影响:它增加了客流量和当地企业的收入。这反过来提升了社区的房地产价值。 汽车是将你隔离在车厢里,汽车行业的创新都是使得这个隔离尽可能有效:更好的噪音隔离,更好的防震动,更好的扬声器......微出行是相反的。当你骑滑板车时,你并不与周围空间隔离。驾驶汽车非常无聊,这就是为什么我们要尝试自动化驾驶。骑自行车很有趣 - 当它是电动时更是如此! 我觉得有趣的是,美国人访问欧洲后,歌颂欧洲很迷人,有热闹的街道,然后回到美国,继续建造汽车城市。 我最喜欢的例子是洛杉矶,用约翰列侬的话说,它只是一个"停车场,你可以在那里购买一个去旧金山的汉堡包。"洛杉矶的停车场面积是曼哈顿的四倍多,这个城市很像一个巨大的停车场。 一个外人来到美国城市,感觉就像一个二等公民。因为这些城市明显地是为汽车设计的,不是为行人设计的。走在城里,缺乏视觉多样性,使得行走很无聊,根本无法长时间闲逛,而且长时间在高楼的阴影里也不健康。 (5)成本 微出行的成本远远低于汽车。今天最便宜的交通选择是公共交通,但是仍然存在"最后一英里"的问题,公共汽车到不了许多地点,微出行可以弥补这个缺陷。 本周图片 1、重访 Lena 相隔46年之后,著名的 Lena 重拍了一张当年姿势的照片。那时她21岁,现在67岁。 2、太空殖民的概念图 1970年代,美国宇航局委托物理学家,绘制太空殖民的概念图,1万人左右的太空殖民点可能是什么样子。下面就是当时绘制的一些想象图。 本周金句 1、 云计算领域对于学习者几乎没有进入障碍,只需要一点天生的好奇心。所有云服务都有免费层,优秀的文档,示例项目等,Kubernetes 是免费和开源的。 技术很有趣,你边玩边学,就会得到一份工作。 -- HN 读者留言 2、 如果你每月在 AWS 花费10万美元,亚马逊会向你提供折扣。如果你一个月的花费超过100万美元,他们将不再理会你。因为他们知道你已经被锁在他们的服务里面,去不了别的地方。 -- 《Lambda 和 无服务器将锁定你》 3、 如果你跟风险投资家说,你的项目将使得他们三年内获得3倍的回报,他们可能根本不会进行投资。每年50%的回报率不值得他们花时间。 这是因为所有风投项目如果有1/3提供3倍的回报,其余的都失败了,那么这个风投基金将一无所获。 -- 《我们未能建立一个10亿美元的公司》 4、 我的80多岁的阿姨说,她没有太大困难适应新事物,但是她无法适应旧东西的消失。 -- 《纽约人》杂志 5、 目前,智能手机的平均尺寸是5.5英寸。苹果手机选择更大的屏幕,可能不是一个好主意。因为统计显示,女性拥有 iPhone 的可能性比男性高,而女性的手比男性小。 -- 英国《卫报》 欢迎订阅 这个专栏每周五发布,同步更新在我的个人网站、微信公众号和语雀。 微信搜索"阮一峰的网络日志"或者扫描二维码,即可订阅。 (完) 文档信息 版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证) 发表日期: 2019年3月22日


普通人的网页配色方案

网页需要配色。一种好看、易用、符合心意的配色,是很不容易的,尤其在没有设计师时。 一、Flat UI 色表 最简单的方法是,从一个给定的色表选择颜色。我以前就是这样,主要根据 Flat UI 的色表配色。 这个色表提供20种颜色(其实是10种,每种颜色有深和浅两个色调),对于简单的网页,基本够用了。实际效果可以参考 Flat UI 官网。 二、香港地铁色表 后来,我听说香港地铁的每个车站,颜色都不一样。比如,中环是红色。 金钟是蓝色,北角是橙色。 这就是有名的香港地铁配色,目前一共有87种颜色。 有人将这87种颜色,做成了色表,方便使用(源码)。 我觉得,这个色表非常漂亮,符合大多数人的审美,87种颜色也足够用了。 三、配色的经验法则 除了使用色表,有人还提出一种配色的经验法则,也很值得参考。 (1)网页的主题色 深颜色使用c、f、6、9这四个字符,组合生成 RGB 色值,比如紫罗兰色是9966ff,靛蓝是6666ff,红色是ff6666。 淡颜色使用a、b、c、d、e、f这六个字符,组合生成 RGB 色值。 (2)文字的颜色 文字最好不要使用全黑,而是使用深蓝色,可以从下面几种颜色挑。1a2a3a最深,2a3a4a次之,7a8a9a最浅。 (3)背景色、阴影色、边框色 背景色、阴影色、边框色都属于衬托,建议使用灰色,可以从aaaaa、bbbbbb、cccccc、dddddd这四个色值挑选。 (完) 文档信息 版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证) 发表日期: 2019年3月16日


每周分享第 47 期

这里记录过去一周,我看到的值得分享的东西,每周五发布。 欢迎投稿,或推荐你自己的项目,请前往 GitHub 的 ruanyf/weekly 提交 issue。 如果你长期看这个周刊,可能知道我的观点:人工智能将导致大量失业,因为算法将取代大部分白领工作。 很多人不同意,认为未来不会有大量失业,因为新的工作岗位可以容纳就业。但是,到底什么岗位可以让大部分人就业呢?没人说得出来。有一点是显然的,这种岗位不可能是程序员、工程师、算法专家,因为大部分人达不到岗位要求,就像你没法让大部分人学会《高等数学》一样。 前一段时间,我读完了一本书《未来地图》,作者是 O'Reilly 出版社的老板。他也同意,人工智能会让很多人失业。但是他说不担心,因为大家会去干别的工作。他举了一个例子,未来大家会拍视频,你拍我看,我拍你看,所以无数人当"视频主""直播主",以拍视频为生。 这看上去说得通,现在不就已经有很多这样的人了,甚至有人天天直播吃饭,靠打赏赚钱。英语里面有一个专门的词 Mukbang,来自韩语的音译,指的就是这种吃吃喝喝的直播。你去百度搜一下图片,就知道 Mukbang 有多流行了。 但是我还是疑惑,如果将来的工作都是拍这种视频,那有多大的意思呢?卡辛斯基曾经提到过这种情况。未来生产力大发展,物质极大丰富,人类无所事事,只能"把时间花在互相擦皮鞋上面,或者用出租车带着彼此到处瞎转,互相为对方做手工艺品,互相给对方端盘子等等。"说实话,我看不出来,大家互相拍视频,直播吃饭、购物、打游戏,跟互相擦皮鞋,有什么本质的不同。 新闻 1、A380 停产 空中客车公司宣布,2021年将停产 A380 客机。A380 是世界上最大的客机,最多可以搭载853个乘客(全部是经济舱的情况),2005年首飞。当时的预测是,航空公司需要大量超大型飞机,才能在主要机场枢纽之间搭载乘客。 但是,事实并非如此,航空公司的兴趣转向了更轻、更省油的客机。空中客车公司本来预计可以卖出1200架 A380,但实际只卖出了234架。而且,航空公司还在削减订单,因此空中客车作出了停产的决定。 2、JP 摩根币 美国投资银行 JP 摩根推出了自己的数字货币"JPM 币"。这种币是有美元支持的,保持一对一的兑换关系,每发行一个 JMP 币,就需要一美元的准备金。 这种币主要供大企业使用,结算在 JP 摩根自己开发的 Quorum 区块链上进行,主要好处是允许企业在互联网上进行近乎实时的转账,而无需在后台移动法定货币(比如美元)。通常,法定货币的转账需要三到五个工作日。 3、德国军队的可悲现状 德军曾是地球上战斗力最强的军队之一,但是二战后,盟国解除了德国的武装,只允许保留防御性的国防军。德国媒体最近报道,德军的现状非常可悲:人员和物资都短缺,战斗机不能飞行,潜艇无法航行。 报道说,今天的德军更像一个消防队。上个月,部队被派去铲除巴伐利亚州屋顶上的雪。最近一次北约任务中,450名德国士兵由于缺乏无线电设备,不得不在民用手机上通信。2018年末,德军68架直升机和136架战斗机中,只有不到30%可以飞行。飞行员由于长期得不到上天的机会,都变得忧郁了。 4、苹果公司2018年打分 一位美国记者邀请55位专业人士,对苹果公司2018年各个产品线打分。不出所料,得分最高、最令人满意的产品是苹果手表,得分最低、最让人失望的产品是苹果 TV。 5、谷歌协查抢劫案 去年10月,美国明尼苏达州发生了一起抢劫案,为了找到嫌疑人,法官要求谷歌公司提交,案发时手机定位出现在附近区域的所有用户,估计会涉及到上万居民。上图中,白色区域是案发地点,红色区域是法官要求提供信息的区域。 6、喷气式客机的最高速度 2月19日,一架从伦敦到洛杉矶的波音787客机,遭遇了高空气流,在顺风情况下,飞出了每小时1289公里的速度,创造了喷气式客机飞行速度的世界纪录。此前的纪录是1249公里,正常的飞行速度大约是每小时900公里。 这个速度看上去超过了音速(每小时1224公里),但实际上没有。因为这个速度是相对于地面测算的,而飞机在高空气流中,相对于周围的气流,移动速度并没有特别快。喷气式客机是无法超音速飞行的,因为设计时就没有考虑这种可能。 7、写字机器人 《钱江晚报》报道,哈尔滨市的张女士发现,初三的女儿在网上买了一台"写字机器人",它不仅可以模仿孩子的笔迹抄课文、抄生字,还能画手抄报,女儿的语文作业就是机器人帮着写的。她一怒之下摔碎了"机器人",还骂了女儿一顿。 据网店客服介绍,"写字机器人"实为一组杆状的电子金属套件,只需简单组装、下载软件,让机器人识别使用者的笔迹,导入需要书写的文字内容,再在前端安置一支笔,它就能在纸上模仿使用者笔迹书写指定内容,书写速度比较快,每分钟40个字左右,连笔字更快。 8、世界最高的木建筑 2019年3月,挪威小镇 Brumunddal 即将完工一幢18层的木结构大楼,高达80多米,是世界上最高的木结构建筑。该楼将开设写字楼、酒店和公寓。 该楼完全采用胶合板,为了保证承重,采用了特殊的技术,保证了胶合板的坚固耐用。使用木材作为主要建筑材料,也能缩短施工时间和成本,与现浇混凝土相比,木材可以将施工时间减少一半。另外,木材比混凝土轻,也有利于减少地基的施工。 9、一句话新闻 全世界的汽车种类十年前大约是超过50个品牌和350个车型。十年间,随着 Saab、Scion、Mercury 和 Pontiac 等品牌的消失,以及厂商精简车型,汽车种类估计减少了20%以上。 特斯拉公司宣布以3.5万美元的低价,出售 Model 3 车型。由于这个价格太低,为了盈利,特斯拉宣布将关闭线下门店,以节省成本,只能网上购车。这意味着,顾客无法试车。 亚马逊公司为了解决假货问题,准备给予正牌厂商直接下架假货的权力。只要在平台上发现假货,正牌厂商可以不必通过亚马逊官方,直接让对方下架。 Firefox 推出 Firefox send 服务,允许用户上传文件,可以加密,也可以自由下载,最长可以保存7天。 美国一家创业公司准备检查古代信封上面的邮票,提取前人的 DNA,以建立完整的人类 DNA 数据库,因为以前人们往往使用唾液来粘邮票。 文章 1、Amazon Lambda 的通俗解释(英文) 本文使用最简单的语言解释 Lambda 服务,如果你不知道它是什么,可以看看。当然不涉及细节。 2、Chrome 浏览器支持跳转到指定文字(英文) Chrome 将支持跳转到指定文字,而不需要锚点。做法是 URL 里面设置 #targetText=hello%20world ,然后就会跳转到网页的第一个hello world的地方。 3、AltaVista 的历史(英文) AltaVista 是谷歌之前最大的搜索引擎,本文回顾了它的兴起和没落。 4、Windows 10 新版本可以直接访问 Linux 文件(英文) 下一次2019年春季的 Windows 10 更新,将允许 Windows 的文件资源管理器,直接访问和编辑 Linux 文件,不过必须是 Windows Subsystem for Linux(WSL)里面的文件。 5、如何获取全球航班的实时位置?(英文) 很多应用可以显示全球航班的实时信息(上图),这是怎么做到的?原来每架民用客机都配备了一个特殊设备,发送自身的各种数据,使用 1090MHz 未加密的无线电频率,因此个人可以接收到这些数据。 6、你可能不需要单页应用(SPA)(英文) 作者认为,网站做成单页应用的这种趋势,有滥用的嫌疑。他提出,大多数情况应该使用传统网页,只有那些强调实时响应、富交互、状态分享的场景,才应该使用单页应用。 7、Python NumPy 实例教程(英文) NumPy(Numerical Python 的缩写)是一个开源 Python 库,用于进行科学计算。这篇是详细教程,通过大量实例介绍这个库的用法。 8、自学计算机科学(英文) 本文给出自学计算机科学所需阅读的书单,有中译。(@baibm 投稿) 9、BeOS 如何输给 NeXT(英文) 1996年,陷入困境的苹果公司决定从外部购买一个操作系统,当时有两个候选者:BeOS 和 NeXT。最后,他们选择了 NeXT,让乔布斯重新回到苹果。本文作者是 BeOS 的开发者,谈了当时的情况。 10、成为亿万富翁的工程师(英文) 79岁的 Herbert Wertheim 拥有大约23亿美元的财富,是美国少数白手起家的亿万富翁。他没有创办过任何企业,纯粹靠投资股票致富。他以前是工程师,靠阅读专利选择投资目标。本文是他的故事。 工具 1、Mermaid 在线作图 Mermaid 是一个网页作图的 JS 库,该页面可以实时编辑预览 Mermaid 图形。 2、wechat-format 微信公号编辑器,可以把 Markdown 代码转为微信公号格式。(@Y024 投稿) 3、gita git 命令只能用于一个库,而这个工具可以一条命令管理多个 git 仓库。 4、My Brand New Logo 你提供产品的描述,该网站会自动生成 Logo 图案。 5、LitElement Polymer 项目推出的一个 JS 基类库,基于这个基类,可以方便快速地创建 Web 组件。 6、FlightGear 开源的飞行模拟器,可在 Linux,MacOS 和 Windows 上运行。 7、send Mozilla 的文件上传服务 send.firefox.com 的源码,基于 Nodejs。(@roojay520 投稿) 8、Iconfu 一个可以在线定制、修改图标的网站。 9、声音地图 该网站将不同情绪对应的声音,画成一幅地图。鼠标移到每个点上,都会听到声音,比如包含了50%的敬爱、33%的同情、17%满意的声音。 10、Volt 跨平台的桌面应用,将一些常用服务(比如 Gmail、Slack、Twitter、Facebook 等)聚合在一起。 11、theme-ad Hexo 的开源博客主题,针对大屏进行过优化。(@dongyuanxin 投稿) 12、Skype for Web 微软发布新版 Skype for Web,可以在浏览器直接拨打世界各地的电话,不用安装应用程序。 资源 1、我爱 Ruby(英文) Ruby 语言的开源入门电子书。 2、魔方数学(PDF) 麻省理工学院的课程材料,介绍魔方里面包含的数学。 3、前端开发技术日报 每日分享互联网上的前端技术、前端资讯。(@kujian 投稿) 4、sicp-py-zh 加州大学伯克利分校的 SICP 的 Python 版教程中译。(@Ming-Lei 投稿) 5、GitNews 该网站实时显示 GitHub 趋势、HackerNews 和 Reddit 里面出现的热门代码仓库。 6、Go by Example 通过示例学习 Go 语言的教程。 7、AntzOS 一个用于实验和教学目的的操作系统,从零开始实现。(@CasterWx 投稿) 本周图片 1、最贵的飞机头等舱 新加坡飞纽约的 A380 飞机头等舱机票是世界最贵的机票,大约1.84万美元一张。它不仅提供平躺的床,还提供带滑动门的封闭式私人小屋,并使新加坡航空公司成为第一家也是唯一一家拥有双人床的商业航空公司。 上图是头等舱分成一间间小舱房。下图是每间小舱房的内景。 如果是双人乘坐,相邻舱房之间的隔断墙可以降下。 两间相邻舱房的床可以合并,形成一张双人床。 2、胡佛水坝的雕塑 美国胡佛水坝的西侧有两座巨型青铜雕塑,1931年大坝建设时同期施工。 下面是纪念碑广场的全景。 纪念碑广场的地面上有一个标记,写着公元14,000年。 它的含义是,地球的自转轴一直在变化。根据计算,到了12000年之后,也就是公元14000年,此地的上空将正对着现在的北极星。 3、书轮 中世纪时,欧洲的书籍都是使用羊皮纸,导致每一本书都非常重。因此,有人发明了一种叫做"书轮"(bookwheel)的机器,一次可以放多本书,如果想换一本书看,就摇动把手,想看的书就会上升到眼前。 上图是德国下萨克森州 Herzog August 图书馆1625年制造的书轮。目前,全世界只保留下来14个书轮。 新奇 1、带轮子的行李箱 很难相信,行李箱上带有四个轮子,上个世纪60年代才发明出来,1972年才有人申请专利。带有两个轮子的行李箱,发明得更晚,1991年才申请专利。 文摘 1、鸽子塔 农业需要氮肥和磷肥。古代往往采用两个方法,解决肥料问题。一个方法是作物轮作,一期种植固氮作物,另一期种植排氮作物。另一个方法是利用鸡、鸭、鹅的粪便,为田地添加鸟粪。牛粪也可以用,但是通常缺乏磷。 古代波斯(今天的伊朗)的鸽子塔,就是氮磷问题优雅的解决方案之一。波斯人为数千只野鸽建造一座城堡,放置在田野中间。鸽子的粪便都积累在城堡底部,城堡主人每年铲起一次,卖给附近的农民。今天,依然存在的大多数鸽子塔都年久失修,现存最古老的一座建于16世纪,但是人们认为鸽子塔在1000多年前就已经存在了。 鸽子塔的基本设计很简单,其主要结构为圆锥形,由泥砖制成。一座鸽子塔可以容纳多达10,000只鸽子。塔的最顶端有洞,让鸽子随意出入。这些洞也被设计为蛇无法进入,蛇是该地区鸽子的主要天敌。 鸽子与鸡或鸭不同,极少需要维护。只要提供水和住所,它们就会来,也不需要管理它们。你还可以吃鸽子并收获鸽子蛋,尽管伊朗的农民基本不吃这些东西,部分原因在于伊斯兰文化中鸽子的重要地位。最重要的是,鸽子塔技术极低,不需要什么技术和设备,只需要砖块和铲子来收集粪便,每隔几百年维护一次就行了。 2、健身并不会带来健康 人类作为一个物种,正变得越来越久坐。 数十万年前,原始人的运动水平远高于我们今天的水平。从觅食、寻水到狩猎、建造避难所、制造工具等各种工作,人类不得不运动。 到了一百年前,人类的运动已经大大减少,但是购物、擦地板、做家具、手工洗涤这些事情仍然需要运动。后来,人类不断发明新东西,越来越不需要自己动手。扫地机器人让我们不用扫地,洗碗机让我们不用洗碗,网络购物让我们不用去商店,语音控制甚至让我们不用站起身开电灯。 人类的工作性质也发生了变化。以前,大多数工作岗位是体力劳动,现在则是办公室工作。1841年的英国人口普查表明,当时有0.1%的劳动力从事行政或办公室工作。1891年,这个数字增加了20倍,变成2%。今天,美国一项调查估计,86%的劳动力从事久坐工作。 运动的减少使得人类的骨骼变薄,肌肉变弱,出现很多健康问题。根据世界卫生组织的数据,心脏病和中风每年导致大约1700万人死亡。许多人意识到,需要减少久坐,增加运动,这导致健身变得非常流行,成为了一种时尚。 问题是,你需要的是长期的、持续的运动增加,而不是间歇性、高强度的健身。即使你每天都去健身房,但只要不去健身房的时候,你还是在久坐,就依然有问题。真正健康的运动模式,要求你在一天中持续地燃烧卡路里,而不是短暂的爆发式燃烧卡路里。 对于人体而言,固定的运动时间依然不是最佳方式,虽然有运动总是比没有运动好。只要你依然存在久坐,就还是会引发很多问题。我们真正需要的是,体育活动与日常生活结合在一起,这样才能摆脱久坐。地球上,最健康、寿命最长的一些地区的人们,从来没有去过健身房。很多百岁老人以前每天都要走几英里。 另外,站立式办公只比久坐好一点,但也没有好到哪里去。它的升级版是跑步机办公桌,旨在让人在运动中办公,但是并不实用。一把不太舒服的办公椅可能是一种有效的策略,使得你很难做到长时间不动。 总之,经常去健身,但是其他时间久坐,这仍然会对身体造成伤害。长时间的、持续的、低强度或中等强度的活动,似乎会产生最佳结果。过度的高强度活动反而会推动新陈代谢和细胞更新,可能加速衰老过程。 本周金句 1、 中国正在变成一个高工资的低增长经济体。 -- 《世界经济的糟糕状态》 2、 如果没有完成项目,你再忙碌,也无法掩饰没有成效。 -- Jack Bruce Simpson 3、 技术本身并不重要,公司只是希望工程师团队不知疲倦地应用最新的流行技术,做出很炫的东西。 -- James Beswick 4、 自动化和云服务已经改变了后端开发,RDS 使得数据库管理员几乎是多余的,服务器管理员被虚拟化了,QA / QE 已经被 TDD、CI / CD替代。 采用云服务的大型公司,正在将他们的后端工程师,转型为云架构师或服务扩展工程师。 -- James Beswick 5、 只有一个场景,区块链是很好的解决方案,也是唯一的解决方案:交易各方互不信任,无法使用合同和法律制度。换句话说,就是违法的事情。其他场景,数据库和各方之间的合同是更好的解决方案。 -- 《区块链的流行场景,已经为什么它们不起作用》 欢迎订阅 这个专栏每周五发布,同步更新在我的个人网站、微信公众号和语雀。 微信搜索"阮一峰的网络日志"或者扫描二维码,即可订阅。 (完) 文档信息 版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证) 发表日期: 2019年3月15日


每周分享第 46 期

这里记录过去一周,我看到的值得分享的东西,每周五发布。 欢迎投稿,或推荐你自己的项目,请前往 GitHub 的 ruanyf/weekly 提交 issue。 (题图:西子宾馆,杭州,2018) 现在,很多网站使用大数据算法,很精确地知道用户的喜好和立场,总是推荐感兴趣的新闻给你看,或者说只给你看想看的东西,比如今日头条和 Facebook。 久而久之,天天看到一大堆同类新闻,你会产生一种幻觉,以为自己的喜好和立场是主流,跟大多数人一致。但是实际上,这完全是假象,举例来说,算法发现你养狗,天天给你看小狗的新闻,搞得你以为到处都是爱狗人士,其实社会上不喜欢狗的人才是多数。 这就是推荐算法的一个副作用,不管你是多么少的少数,它都有办法满足你,让你产生幻觉,高估自己的份量。你明明是人群的1%,却误以为大多数人跟你一样,这样就容易做出错误判断。比如,你天天看到小狗的新闻,就决定做一款宠物相关的产品,进行创业。你以为自己的产品针对大众市场,感兴趣的人应该很多,其实响应者寥寥。 知道自己是少数派还是多数派,挺重要的。如果你是创业者,这就决定了你的产品定位和市场策略。如果涉及到政治,那就更重要了。我觉得,推荐算法以后不仅应该推荐用户感兴趣的内容,还应该告诉用户,你是不是少数派。 新闻 1、SpaceX 飞船即将载人 3月2日,美国宇航局采用 SpaceX 公司的飞船,向国际空间站运送货物。本次任务没有载人,但是放置了一个真人大小的假人,如果一切顺利,将在七月份的第二次任务时开始载人。SpaceX 公司的飞船可以乘坐四人,已经进行了16次试验飞行。 自从八年前,美国最后一艘航天飞机退役,美国就没有飞船可以前往国际空间站。美国政府的政策是,让民间公司(波音和 SpaceX)的飞船承担飞行任务,但是由于这些飞船一直没有造好,美国宇航员都是乘坐俄罗斯飞船前往国际空间站,每个座位需要向俄国支付8200万美元。 2、有感觉的假肢 最近,瑞典开展了假肢连接神经手术,这是世界第一例。医生为一名手截肢患者安装了假肢,里面的电极连接到前臂神经和肌肉,以提取信号控制假肢,并提供触觉。这使它成为历史上第一个临床的,可以灵巧控制和有感觉的假手。 传统的假手依靠放置在皮肤上的电极来从残肢肌肉中提取控制信号,仅允许几个大的运动(打开和关闭手掌)。通过在肌肉中植入电极,可以获得更丰富,更可靠的信息。这名患者一共植入了16个电极,以便新型假手进行更灵巧的控制。新型假手还能提供有限的感觉反馈。目前,该技术只能用于上肢,还不能用于下肢。 3、手机辐射 德国的一个手机实验室,测试手机辐射。辐射量最大的手机,几乎都是中国产的。该实验室认为低于0.60瓦/千克的辐射量的手机,可以接受。下图是辐射量最少的手机。 4、树莓派商店 树莓派在总部英国剑桥开设了一家专卖店,除了各种型号的树莓派以外,还提供纪念品和一些使用树莓派制作的作品。由于树莓派本身最贵的型号是35美元,估计这家商店的价格会非常亲民。 5、世界最长寿的野生鸟类 太平洋中途岛上的一只信天翁,是已知的世界最长寿的野生鸟类,已经68岁了。2018年11月29日,人们在岛上的巢穴里又看到了她,很快她生了一只鸟蛋,2019年2月初,小鸟孵化出来了。 这只信天翁是1956年,生物学家钱德勒·罗宾斯(Chandler Robbins)首先发现的,当时她刚刚发育成熟。信天翁每年只产一个鸟蛋,已知她迄今生下了至少31只雏鸟。 6、智能猫窝 百度公众号消息,百度大脑一位工程师晚兮,为流浪猫搭建的全球首个AI智能猫窝。目前,AI智能猫窝已经在小区里迎来了第一批猫咪入住。 流浪猫只需要"刷脸"就能进入猫窝,它能准确识别174种不同种类的猫咪,保证每一只猫咪自由出入。考虑到夜猫子们昼伏夜出的习性,采用了高清夜视智能摄像头,就算伸手不见五指的晚上,门禁系统也能照常为流浪猫们开门。入口处的摄像头还能识别出流浪猫是否患病,在第一时间通知志愿者,进行有效救助。同时,通过训练流浪猫打耳标图片,还能识别猫咪是否绝育。新风系统会实时监测和分析猫窝内的氧气、二氧化碳等气体浓度,时刻保持猫窝内的空气清新。 7、俄罗斯断开互联网 俄罗斯政府打算通过一部新的法律,要求俄罗斯互联网服务商确保,即使外国侵略者断开互联网网关,俄罗斯的网络也能继续运行。该法律草案于2018年12月在俄罗斯议会提出,其中还要求俄罗斯电信公司将所有互联网流量,重新路由到俄罗斯电信监管机构批准的交换机。 为了测试该法案是否可行,俄罗斯将进行一次测试,暂时断开外部互联网,测试网络流量可以全部留在俄罗斯国内,而不是在国际上进行路由。确切的测试日期尚未公布,但计划在2019年4月1日之前进行。 8、养羊除草 美国佛罗里达州的太阳能电厂,为了除去太阳能板下面的杂草,租了一群绵羊,让羊去把草吃干净。据说,这种方法的成本是传统方法的四分之一,比起化学除草,对环境更友好。该公司还在 Facebook 播出这些绵羊的实时视频。 9、一句话新闻 Linux 内核5.0版发布。 印度尼西亚与挪威达成协议,只要减少砍伐热带雨林,挪威政府就会向印尼政府支付奖金,总额10亿美元。印尼拥有世界第三大的热带雨林。 USB 3.2 标准即将发布,传输速率 20Gb/s。现行 USB 3.0 标准的传输速率为 5Gb/s。 Emoji 最新版本的更新,新增了一滴血的形象,代表月经。 教程 1、如何成为一个优秀工程师(英文) 作者谈了自己在 Stripe 公司担任 SRE (系统可靠性)工程师的经历。 2、计算机如何实现除法(英文) 对于计算机来说,加法和减法比乘法容易实现,而乘法又比除法容易实现。 3、从 Google Analytics 迁移到 Fathom(英文) 如何自己架设开源的 Fathom 服务,统计网站访问情况。 4、贝佐斯的秘密是如何泄漏的(英文) 亚马逊公司老板贝佐斯的婚外情,被媒体披露,让他陷入了麻烦。媒体如何得知贝佐斯的秘密呢?这篇文章认为,原因是黑客进入了他女友的邮箱,因为该邮箱的密码早就泄漏了。 5、如何计算月相(英文) 地球看到的月亮形状是不一样的,本文通过可视化图形,解释如何通过三角函数计算月相。 6、扼杀应用(英文) 马丁·福勒认为重写重要系统的较好做法,是逐步扼杀它,而不是一次性取代。 7、Chrome 的隐藏插件 Chrome 浏览器启动的时候,会加载一些系统插件,不会在插件页显示。这里介绍如何查看这些隐藏插件。 8、JPG 和 JPG2000 格式(英文) JPG2000 图像格式的介绍,也解释了 JPG 和 PNG 格式。 9、条形码如何工作?(英文) 怎么解读条形码,本文还给出了 Python 的扫码实现。 10、Java 开发人员调查结果 2018(英文) 一份针对全世界 Java 开发者的调查统计,有不少有趣的结果。上图是 IDE 的选择。 工具 1、revery 一个构建跨平台桌面应用的框架,跟 Flutter 的思路有点像,也是内置了自己的控件,保证了跨平台一致的体验。它使用 Reason 语言编写,使用 React + Redux。 2、MazeSolverGenerator 一个在 <canvas> 元素上绘制和解决迷宫的 JavaScript 库。 3、x-spreadsheet 一个基于 Canvas 的 JS 电子表格库。 4、Sane 一种配置文件格式,基于对 Yaml 和 Toml 格式的改进。 5、operationRecord 浏览器操作录屏工具,提供 Web 管理后台。(@asdjgfr 投稿) 6、Linux Crontab 生成器 通过 Web 界面生成 Crontab 配置。(@DoctorLai 投稿) 7、react-meme-generator 图片上加文字的在线工具,支持摄像头,可以制作表情包。(@ lijinke666 投稿) 8、algorithm-visualizer 一个直观的算法可视化工具,你可以自由选择自己想学习的算法,每个算法它都清晰描绘了其原理和运作过程。(@nivance 投稿) 9、api-document 一个 Java Spring 项目的文档处理器,可以自动生成文档。(@liuanxin 投稿) 10、xs 语言 国人开发的编程语言,目的是提高读写效率,减轻记忆语法负担。(@kulics 投稿) 11、双拼输入法练习 在线练习双拼输入法的网站,漂亮的键位图,支持多种双拼方案。这里还有一个同类网站。(@pad0van 投稿) 资源 1、Statistics Done Wrong 一本介绍统计学常见错误的书籍,可以在线阅读。 2、WOWA 一个收集免费音乐的网站,可以下载用来制作视频的背景音乐。该网站的目标是成为免费音乐的 Unsplash。 3、React 教程 一个入门教程,需要下载到本地运行。通过一个个练习和演示,帮助读者完成开发实际的 React 应用。 4、黑客工具课程 麻省理工学院的入门课程,介绍 Linux 系统使用者需要掌握的各种基本工具,适合刚入门的初级用户。 5、数据结构可视化 该网站收集各种数据结构,并将它们用可视化的形式表现出来。 6、计算机图形学教程(英文) 从数学基础开始教起的图形学教程,包含 C++ 源码。 7、GitHub Courses GitHub 官方的课程中心,教你如何使用该网站的一些功能。 8、人大代表的可视化 第十三届全国人民代表大会的代表数据可视化。(@jdk137 投稿) 文摘 1、订阅模式不适合报纸 现在,很多新闻机构、博客和播客,都采用订阅模式(subscription)获取收入。用户支付订阅费,换取每个月阅读网站的内容。 这种模式表面上看,对内容提供商很有意义。因为广告模式现在几乎赚不到钱,单单是谷歌和 Facebook 两家公司,就获取了美国60%以上的在线广告收入。订阅模型可以提供稳定的收入流,不依赖于流量。理论上,这可以激励更好的内容,因为内容提供商不必追逐点击了。 但是,这种模式对报纸的作用是两面刃。最适合订阅的是那些值得用户付费的东西,最好是在其他任何地方无法获得的东西。这种情况下,用户会愿意付钱。报纸的问题在于,它的作用是让人们知道一些他们必须知道的事情,报纸是大众媒体,必须有广泛的读者,才有意义。订阅模式消除了报纸的大众媒体属性,会让报纸变得没有意义。 订阅模式的第二个问题是,人们不会订阅所有的东西。你不能指望,人们订阅各种报纸,订了《纽约时报》,再去订《华盛顿邮报》,还有 Netflix、Hulu、HBO、ESPN 等等。用户一年能够订阅的服务是有限的,对于报社来说,怎么才能确保在那个拥挤的领域,分得一份羹呢?所以,订阅模式对整个行业并没有好处,用户订阅了一家媒体,势必就要排挤其他媒体。 2、订阅模式让我困扰 我为一些服务支付月费,比如 Netflix、亚马逊、有线电视、电子邮件、备份存储、软件、音乐、健身房会员......。但是,我的生活是"不定期"的,没法知道什么时候会去用这些服务。有些服务我很少使用,为它们支付月费,对我来说很不划算。 结婚时,我订阅了 Photoshop CC 为妻子制作一些图像效果。我就使用过一次,然后被困在一年的合约中,我忘记了到期时间,结果自动续约了另一年。我支付了2年的费用(约200英镑),但是只使用了一次。现在2年到了,我再想用就没法用了。 我有一个 IDE,每年使用3-4次,但我必须支付月费,并且保证至少购买满一年。在那之后,你所保存的东西,就没法用它打开了。 越来越多的服务正在转向这种模式,对于像我这样经常使用的人来说,没有替代模式。但是我也不想每周、每月、甚至每年都使用同样的东西。 我不介意这个模式用于某些我经常使用的东西。但是,我希望有另一种模式,我乐意为某些软件支付少量费用,因为我的使用量很少。一旦支付了费用,我就可以无限期地(在合理范围内)保留和使用我的文件。 对于内容服务来说,我觉得 Twitch / youtube / patreon 的订阅模式才是未来。你向平台支付月费,然后可以收看所有想看的内容。而不是订阅某几家报纸(你不关心上面90%的内容)。 新奇 1、芬兰语没有拼写检查 从来没有软件提供芬兰语的拼写检查。因为芬兰语单词的拼写变化实在太多,下面这些都是"狗"的正确拼写: koirasi, koirani, koiransa, koiramme, koiranne, koiraani, koiraasi, koiraansa, koiraamme, koiraanne, koirassani, koirassasi, koirassansa, koirassamme, koirassanne, koirastani, koirastasi, koirastansa, koirastamme, koirastanne, koirallani, koirallasi, koirallansa, koirallamme, koirallanne, koiranani, koiranasi, koiranansa, koiranamme, koirananne, koirakseni, koiraksesi, koiraksensa, koiraksemme, koiraksenne, koirattani, koirattasi, koirattansa, koirattamme, koirattanne, koirineni, koirinesi, koirinensa, koirinemme, koirinenne, koirakaan, koirankaan, koiraakaan, koirassakaan, koirastakaan, koiraankaan, koirallakaan, koiraltakaan, koirallekaan, koiranakaan, koiraksikaan, koirattakaan, koirineenkaan, koirinkaan, koirako, koiranko, koiraako, koirassako, koirastako, koiraanko, koirallako, koiraltako, koiralleko, koiranako, koiraksiko, koirattako, koirineenko, koirinko, koirasikaan, koiranikaan, koiransakaan, koirammekaan, koirannekaan, koiraanikaan, koiraasikaan, koiraansakaan, koiraammekaan, koiraannekaan, koirassanikaan, koirassasikaan, koirassansakaan, koirassammekaan, koirassannekaan, koirastanikaan, koirastasikaan, koirastansakaan, koirastammekaan, koirastannekaan, koirallanikaan, koirallasikaan, koirallansakaan, koirallammekaan, koirallannekaan, koirananikaan, koiranasikaan, koiranansakaan, koiranammekaan, koiranannekaan, koiraksenikaan, koiraksesikaan, koiraksensakaan, koiraksemmekaan, koiraksennekaan, koirattanikaan, koirattasikaan, koirattansakaan, koirattammekaan, koirattannekaan, koirinenikaan, koirinesikaan, koirinensakaan, koirinemmekaan, koirinennekaan, koirasiko, koiraniko, koiransako, koirammeko, koiranneko, koiraaniko, koiraasiko, koiraansako, koiraammeko, koiraanneko, koirassaniko, koirassasiko, koirassansako, koirassammeko, koirassanneko, koirastaniko, koirastasiko, koirastansako, koirastammeko, koirastanneko, koirallaniko, koirallasiko, koirallansako, koirallammeko, koirallanneko, koirananiko, koiranasiko, koiranansako, koiranammeko, koirananneko, koirakseniko, koiraksesiko, koiraksensako, koiraksemmeko, koiraksenneko, koirattaniko, koirattasiko, koirattansako, koirattammeko, koirattanneko, koirineniko, koirinesiko, koirinensako, koirinemmeko, koirinenneko, koirasikaanko, koiranikaanko, koiransakaanko, koirammekaanko, koirannekaanko, koiraanikaanko, koiraasikaanko, koiraansakaanko, koiraammekaanko, koiraannekaanko, koirassanikaanko, koirassasikaanko, koirassansakaanko, koirassammekaanko, koirassannekaanko, koirastanikaanko, koirastasikaanko, koirastansakaanko, koirastammekaanko, koirastannekaanko, koirallanikaanko, koirallasikaanko, koirallansakaanko, koirallammekaanko, koirallannekaanko, koirananikaanko, koiranasikaanko, koiranansakaanko, koiranammekaanko, koiranannekaanko, koiraksenikaanko, koiraksesikaanko, koiraksensakaanko, koiraksemmekaanko, koiraksennekaanko, koirattanikaanko, koirattasikaanko, koirattansakaanko, koirattammekaanko, koirattannekaanko, koirinenikaanko, koirinesikaanko, koirinensakaanko, koirinemmekaanko, koirinennekaanko, koirasikokaan, koiranikokaan, koiransakokaan, koirammekokaan, koirannekokaan, koiraanikokaan, koiraasikokaan, koiraansakokaan, koiraammekokaan, koiraannekokaan, koirassanikokaan, koirassasikokaan, koirassansakokaan, koirassammekokaan, koirassannekokaan, koirastanikokaan, koirastasikokaan, koirastansakokaan, koirastammekokaan, koirastannekokaan, koirallanikokaan, koirallasikokaan, koirallansakokaan, koirallammekokaan, koirallannekokaan, koirananikokaan, koiranasikokaan, koiranansakokaan, koiranammekokaan, koiranannekokaan, koiraksenikokaan, koiraksesikokaan, koiraksensakokaan, koiraksemmekokaan, koiraksennekokaan, koirattanikokaan, koirattasikokaan, koirattansakokaan, koirattammekokaan, koirattannekokaan, koirinenikokaan, koirinesikokaan, koirinensakokaan, koirinemmekokaan, koirinennekokaan 本周图片 1、推特总部 推特总部所在的旧金山 Art Deco 大楼,建于1937年,原来是一个家具市场。 下图是1937年建成时的大楼门厅。 推特目前租赁了这栋楼的三个楼层。下图在街角边可以看到推特的标志。 2、青金石:比金更珍贵的蓝色 欧洲最早的蓝色颜料,是从青金石提炼的。这种石头很少,导致蓝色是一种非常珍贵的颜色,只有一些重要的画作才可以使用这种颜色。直到1826年,人们才找到人工合成这种颜色的方法。 本周金句 1、 最好的教育是有趣的,学起来像娱乐。 -- David Perell 2、 人是沟通的动物。他不仅依赖于食物,也同样依赖于新闻、信息和娱乐。 -- 科幻小说家 阿瑟·C·克拉克 3、 特斯拉公司的真正目标,是大规模生产一种实惠的电动汽车,让大众使用。马斯克(特斯拉的老板)想要拯救世界,只生产富人才会购买的电动豪华跑车,不会阻止气候变暖,但是让每个人都使用电动汽车,就有可能做到。 特斯拉的使命是让人类从化石能源转为太阳能。 --《特斯拉放弃奢侈车型的背后》 4、 什么叫知识密集型企业?就是这家企业的大部分支出是工资。 -- 某网络财经节目 5、 当代社会让死亡变得不容易注意到。现在,大多数死亡发生在医院和养老院,而过去常常发生在家中,年轻人的死亡也比以前少见。当代人甚至连屠宰动物都很少看到,而直接吃处理好的食品。总之,大多数人对死亡没有第一手经验,死亡变成了一件无关的事情。 -- HN 读者留言 欢迎订阅 这个专栏每周五发布,同步更新在我的个人网站、微信公众号和语雀。 微信搜索"阮一峰的网络日志"或者扫描二维码,即可订阅。 (完) 文档信息 版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证) 发表日期: 2019年3月 8日


每周分享第 46 期

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


敏捷开发入门教程

敏捷开发(agile development)是非常流行的软件开发方法。据统计,2018年90%的软件开发采用敏捷开发。...