跟随,学习,进步

TEST

2019-06-19 10:49:19 haidong

TEST text

tags: Test


每周分享第 60 期

2019-06-14 02:22:31 阮一峰

这里记录过去一周,我看到的值得分享的东西,每周五发布。 欢迎投稿,或推荐你自己的项目,请前往 GitHub 的 ruanyf/weekly 提交 issue。 中国历史的第一课,总是教大家,我国很早就有人类活动,周口店发现的北京猿人已有20万年~70万年的历史。 因此,我从小就以为,所有的中国人都来自北京猿人。长大了,才知道不是这样,科学界的主流意见是,所有现代人都是智人,属于猿人的一个分支。也就是说,中国人跟北京猿人其实关系不大。 1987年,美国科学家根据 DNA 检查,提出了夏娃假说,认为现代人都来自一个20万年前的非洲女性,也就是说,人类起源于非洲。然后,大约在7万年前,人类开始走出非洲,逐渐分布到了世界各地。人类每到一地,就淘汰了当地的猿人。最终,其他猿人都灭绝了,智人成为了地球的主宰。 尼安德特人(上图)是欧洲的古人类,生活在40万年~4万年前,也被智人淘汰了。但是,2010年瑞典生物化学家斯万特·帕博发表论文,宣布测出了尼安德特人的 DNA,发现现代人类的 DNA 有1%~4%来自尼安德特人。也就是说,现代人的祖先跟尼安德特人有过杂交。 更惊人的是,他发现,中国人继承的尼安德特人基因,居然多于欧洲人,但是中国从未发现尼安德特人的踪迹。因此,只能推断,人类走出非洲以后,第一步来到中东,然后分别向东和向西迁移。向东迁移的过程中,与当地的尼安德特人不断有杂交,然后才来到中国。这就是中国人的起源。 我知道这些,是因为斯万特·帕博的自传《尼安德特人》中译本(下图)去年出版了。这本书值得一读,既可以了解科学家的人生和学术界的内幕,又可以学到很多人类进化的遗传知识,推荐给大家。本期周刊的《文摘》部分也摘录了这本书。 家庭保障规划 本期周刊很高兴得到了孙明展老师的支持。这里向大家介绍一下他正在举办的一个活动,提供家庭财务保障的咨询。 孙明展老师是广州中山大学统计系硕士,毕业后进入了保险行业,后来创办了"谱蓝"品牌,目前是中山大学金融系、统计系专业(兼职)硕士导师。进一步的情况,可以搜索"谱蓝"。 除了开公司,他还搞了一个公众号,名字就叫"孙明展",专门介绍家庭保障、儿童保险、儿童财商这方面的知识。 目前,已经有500多篇原创文章,介绍理财知识、保险案例分析等等,值得一看。 为了推广公众号,他这一次策划了一个"家庭保障规划咨询活动",免费提供保险理财咨询。 如果你被保险代理人坑过,心有余悸,或者对各种保单或险种感到很难懂,拿不定主意,再或者就是单纯想增加家庭财务保障,都可以参加这个活动。活动内容主要是,根据报名情况进行电话或网络沟通,了解家庭背景资料以后,回答保险理财咨询。 扫描关注下面的公众号,然后输入 "阮一峰 + 你的手机号码",就可以参加这个活动了。参加者都可以获赠一份价值800元的免费保障规划,包含对于家庭成员保障责任的综合评估。 资讯 1、重新设计购物小票 超市购物的时候,都会提供购物小票,列出购物的详细清单。这种小票通常非常简陋,Netflix 公司的数据可视化工程师 Susie Lu 尝试对它重新设计。她在小票的头部加上分类图(上图),并在每项物品的下方加上一个水平的柱状图,表示金额的大小(下图)。 2、光纤传导阳光 大楼深处的房间要得到自然光照明,往往非常困难。美国一家创业公司开发了光纤照明系统,在屋顶上架设集光器,收集阳光,然后通过光纤,将阳光导入室内,让地下室也能照到阳光。 3、照亮小镇的镜子 挪威南部的 Rjukan 小镇位于峡谷之中,每天只有很短的时间能够照到阳光,其他时候只能看着阳光找到两边的山上。 为了解决这个问题,一个企业家说服小镇的议会,出资在山上安装了三面巨大的镜子,每面镜子的面积是17平方米。可以在下午将阳光反射到小镇中央的广场。镜子建成的那一天,所有居民集中在广场上,等待阳光来临。 4、豌豆蛋白 很多创业公司正在开发"植物肉",使用植物蛋白制作传统的肉制品,这样有成本和环境上面的好处。下面的图片都不是真的肉,而是植物肉。 植物肉主要使用大豆蛋白制作,其中豌豆蛋白最接近肉制品的口味。预计到2025年,全球豌豆蛋白的销售量将翻两番,其中大部分增长都是植物肉带来的。因此,未来的豌豆种植预测会大幅上升。 5、SAT 考试增加"逆境分" 美国高中生都要参加 SAT 考试,考试成绩是大学招生的主要参考指标之一。近几年来,考试委员会越来越觉得,SAT 成绩不足以反映学生的努力,同样都是90分,穷人家的孩子获得这个成绩的难度,要大于富人家的孩子。因此,SAT 委员会正在试验,再给出一个"逆境分"(adversity score),反映该学生是否身处逆境。 这个指标通过15个因素计算得到,满分100分,最低1分。分数越低,表示处境越糟。如果你来自高收入家庭,有着受过良好教育的父母,那么你的"逆境分"就会比较高。平均得分是50分,表示处于社会的中间阶层。该指标已经在50所大学试行,以后可能会全面推广。 6、澳大利亚的滤水网 澳大利亚城市 Kwinana 最近在河道上游,安装了滤水网,过滤各种垃圾,尤其是塑料垃圾,保证河水的清澈。这个发明看上去非常简单,但是很有效。 下图是安装时的样子,以及装完垃圾的情景。 装满垃圾以后,只要换一下网,又可以重新使用了。该发明不仅可以用于河道,又可以用于山上的溪流。 7、云服务影响 3M 公司 3M 公司是位于美国明尼苏达州的一家著名的工业产品制造商,主要生产工业粘合剂、磨料、涂料等产品。最近,它的销售额开始下降。 公司将原因归咎于,越来越多的用户开始使用互联网云服务,正在用软件重构他们的业务,将生产和管理过程搬到网上,从而减少了对实体工业产品的需求。 8、一句话新闻 《自然》杂志报道,中国科学家研发了每秒钟4万亿帧的照相机,可以拍出光的运动轨迹。 华为公司还有海底电缆业务,铺设了第一条从非洲到南美洲的海底电缆。美国正在讨论,禁止华为参与铺设西方国家之间的海底电缆。 美国有300万人直到60岁,还没有还清学生贷款,总金额860亿美元,平均每人欠款将近3万美元。 特斯拉公司的 CEO 马斯克2018年的职务收入是23亿美元,创了有史以来 CEO 收入的最高记录。 文章 1、CSS 制作中国窗格(英文) 本文介绍如何使用 CSS 的 -webkit-box-reflect 属性,通过镜面反射制作中国窗格图案。 2、学习 Dart 语言的10个理由(英文) Dart 语言本来已经死掉了,就是因为 Flutter 这个非常有前景的业务绑定了它,所以又活过来了。说到底,还是业务重要。好的技术不一定能活,坏的技术不一定会死,取决于有没有业务。 3、非设计师需要知道的设计原则(英文) 如果你的团队没有专业设计师,那么这篇文章教你四个基本的设计原则。只要你遵循这四个原则,就会取得不错的效果。 4、Python 3 好在哪里?(英文) Python 3 是 Python 2 的全新升级版,有重大的改进。本文介绍 Python 3 到底增加了哪些功能。 5、2019 年的 PHP(英文) PHP 语言发展到今天,已经有了巨大改进,各方面的状况逐步让人感到满意。本文介绍 PHP 语言在2019年的最新状况,包括语法改进、性能提升、框架和模块体系等等。 6、清洁能源的下一步发展(英文) 比尔·盖茨谈,他眼中的接下来能源革命的三大发展领域,也是他的基金会重点投资方向:能量储存技术、碳捕获和核能技术、长距离的高压输电线路。 7、React 应用的 Docker 化(英文) 这篇教程一步步详细教你,如何将 React 应用打包成生产环境可用的 Docker 容器。 8、SOLID 原则:以 TypeScript 为例(英文) SOLID 原则是2004年 Robert C. Martin 提出的软件架构原则,创造更健壮、可维护的代码,包括5个小点。本文以 TypeScript 代码为例,介绍 SOLID 的含义。 9、我的透明创业实验(中文) 一个正在进行的创业实验,一年时间做10个小产品,看看能否达到每月被动收入1000美元的目标。(@timqian 投稿) 10、5G网速那么快,基站辐射会很大吗?(中文) 5G 通信使用比 4G 更高的频率,需要的能量更大,这对基站和手机的辐射有何影响。这篇文章给出了很好的分析。 软件 1、Darling Darling 的意思是 Darwin + Linux。它是一个转换层,允许在 Linux 直接运行 macOS 的二进制文件,前提是该应用不使用图形界面。 2、uppy 一个文件上传的 JS 库。 3、koken 一个搭建个人图片库网站的软件。 4、KeePass 一个管理密码的桌面软件。 5、NoScript 一个 Chrome 浏览器插件,可以指定关闭网页中的某一个 JS 脚本。 6、RandomJson 一个生成随机 JSON 数据的 Kotlin/Java 库。 7、ipfs-deploy 将静态网站发布到 IPFS 的命令行工具。 8、sonic 一个 Rust 语言写的搜索服务器,可以用作 Elasticsearch 的替代品。(@ifrontend-xyz 投稿) 9、Librian 根据准备好的背景图片和剧本,自动生成 Galgame 游戏图景的工具。(@RimoChan 投稿) 10、pastel 一个基于 React 和 Ink 的命令行应用开发框架。 11、utterances 将 GitHub 的 issue 当作评论系统,插入第三方网页的 JS 库。 12、Flutter4GitLab 一个 Flutter 实现的 GitLab 客户端,可以用作 Flutter 学习资源。(@stefanJi 投稿) 13、Open-Registry 开源的 JavaScript 模块管理服务,目标是取代 npm。它希望用社区捐款来运作,而不是将 JS 模块管理的重任交给一家盈利性公司。说实话不看好,话说 npm 以前也是非盈利性的,后来实在撑不下去,才成立了公司。 资源 1、Prob 140 加州大学伯克利分校的数据科学概率入门课程的教科书。 2、VS Code 能做到 该网站收集 VS Code 能够实现的各种高级功能教程,目前已经有36个。 3、如何 root 该页面收集各种安卓手机 Root 的方法。 4、数据科学项目 Python 实战 DigitalOcean 推出的免费电子书,介绍如何使用 Python 完成三个基本的机器学习项目:自动分类、识别手写数字、机器人构建。 5、如何使用 Python3 编程 DigitalOcean 推出的免费电子书,介绍 Python3 编程,针对新手。 6、i18ns.com 一个制作国际化应用的利器。该网站收集各种语言包,你输入中文,它返回各种语言包对这个词的翻译。(@2i18ns 投稿) 7、CTOLib 码库 该网站收集并分类开源项目和资源,每日更新。目前共有49959个收录,并归类到658个分类。(@ctolib 投稿) 文摘 1、《尼安德特人》 《尼安德特人》是瑞典生物化学家斯万特·帕博(Svante Pääbo) 的自传,中译本由浙江教育出版社出版。他是第一个尝试获取木乃伊的 DNA 的科学家,目前致力于测出尼安德特人的完整 DNA 图谱。 13岁时,妈妈带我去了埃及,自此我就迷上了那里的古老历史。大学时,我选修古埃及历史,连续两个夏天在斯德哥尔摩的地中海博物馆做志愿者。我或许会成为瑞典的一位古埃及学者,并在同一家博物馆工作。但是我发现,那里的人第二个夏天所做的事情与第一个夏天几乎一样。此外,他们在同一时间去同一家餐馆吃同样的饭菜,讨论同样的古埃及之谜和学术八卦。我开始意识到,对我而言,埃及古文物学这个领域发展太慢。这不是我想要的那种职业生活。我想经历更多的兴奋,想要与我所看到的周围世界有更多的关联。 于是,我选择乌普萨拉大学的医学院,攻读生物化学博士学位。但是,我仍无法完全摆脱对古埃及的迷恋。只要有时间,我就去埃及学研究所听课。虽然我热爱古埃及,但很难看到未来。我也喜欢分子生物学,它可以不断提升人类的福祉。我不知道应该选择哪一条人生道路。 一个新的想法逐渐浮现在我的脑海:能不能对古埃及木乃伊进行 DNA 测序呢?DNA 分子能否在木乃伊中留存下来呢?我们是否有可能通过研究古 DNA 序列,从而阐明古埃及人彼此之间以及与现今人类之间是否关联呢?如果可以做到,那么我们便可以回答埃及学研究中常规方法所无法回答的问题。 我遇到的第一个问题是 DNA 能否在死后的组织中长期存活。我推测,如果组织变得干燥,如古埃及木乃伊那样,那么 DNA 或许可以长期保存良好,因为降解 DNA 的酶需要水来激活。这是我需要测试的第一件事情。 1981年夏天,实验室没有太多人,我去超市买了一块小牛肝。为了模仿古埃及木乃伊,我决定将牛肝封存在实验室的烤箱中并加热到50℃,让其木乃伊化。第二天,怪味招致了许多闲言碎语,所幸随着脱水过程的进行,气味不再浓郁,于是也就没有腐烂的气味或埋怨的话传到教授那里。 几天之后,肝脏就坚硬干燥,并变成黑褐色,就像埃及木乃伊一样。我开始从中提取 DNA,大获成功。我获得的 DNA 是只有几百个核苷酸的短片段,不像从新鲜组织中提取的 DNA 那样有数千个核苷酸,不过依旧足够用于实验。我的想法得到了证实。认为 DNA 可以在一个死组织中存活至少几天或几周,这并不荒谬。但是,几千年呢?很明显,下一步便是在埃及木乃伊中尝试同样的方法。我需要从真的木乃伊身上,尝试获取 DNA。 2、华氏度的合理性 温度有两种表示方法:摄氏度和华氏度。 只要学过化学,就会知道摄氏度更好。因为它的定义很简单明确:0℃是水的冰点,100℃是沸点。华氏度的定义就显得复杂:特定的冷冻盐水溶液的温度为0℉,水的冰点为32℉,体温为96℉(未校正前)。显然,这个温度体系不那么直观。 但是,摄氏度是针对水的状态,对于表示日常天气,效果很不理想。我发现,使用负数表示不那么冷的温度,令人很烦,然后只要35℃,就是一个高温天了,这也不那么直觉。事实上,在化学实验室之外,我并不关心水的冰点和沸点,我更关心本周会有多热或多冷。摄氏度不是为了这个目的设计的,而华氏度恰恰是针对人的感觉设计的。 下面是华氏度的一些优点。 直观:0度就是极冷的天气,100度就是极热的天,这对人们来说很自然。 避免小数:预报气温的时候,摄氏度需要带上小数,华氏度都是整数。 避免负数:华氏度的0度足够冷,温度很少低于0度。 避免3位数字:华氏度很少出现高于100度的高温天气。 下面是波士顿和加利福尼亚州红木城一年的天气变化,可以看到,就在0度~100度之间变动。 图片 1、美国人的反应 只要表现不低于平均水平一个标准差,美国人就会说"This is awesome",不低于两个标准差会说"Pretty good"。 2、最后的白犀牛 2018年3月,世界上最后一头雄性的白犀牛在肯尼亚去世。目前还活着的两头白犀牛都是雌性,这宣告了这个物种注定灭绝。 犀牛角在中国、韩国及越南等国家都是珍贵药材,巨大的利益导致了盗猎猖獗。为了保护这些犀牛,肯尼亚政府派了武装警卫。这些警卫荷枪实弹,全天候巡逻佔地 360 平方公里的保护区。去年一场枪战中,就打死了三名偷猎者。 言论 1、 技术新闻和技术会议等地方,传播的都是行业的前瞻性观点,这些声音过于响亮,得到了最大的权重。但是,请不要忘记,世界仍然运行在 Excel、Java 8 和 Sharepoint 上面。 -- 《美国运行在 Java 8 上面》 2、 作为公司的首席 JavaScript 工程师,我总是让团队尽可能少写 JavaScript 。 -- 《保守的前端开发者》 3、 开发 Redis 之前,我从未一周七天,每天都在工作。我必须在 Redis 投入全部的时间,因为这个项目在以最快的速度发展,我需要的工作效率,大于我被迫每天工作所产生的生产力。 -- antirez,Redis 的发明者 4、 开发软件是一件很棒的事情,但绝不会像写一本能存活几个世纪的著作那样伟大,最终总是会有新的软件取代它。所以,有时我相信,我所做的一切最终都是徒劳的。 -- antirez,Redis 的发明者 5、 我在这个开源项目上投入多年,非常辛苦,但是我是做自己真正喜欢的事情,这给我带来了朋友、认可、金钱,所以我不想说这是一个糟糕的交易。 -- antirez,Redis 的发明者 回顾 去年的本周:《每周分享第 8 期》 订阅 这个专栏每周五发布,同步更新在我的个人网站、微信公众号和语雀。 微信搜索"阮一峰的网络日志"或者扫描二维码,即可订阅。 (完) 文档信息 版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证) 发表日期: 2019年6月14日


响应式图像教程

2019-06-10 10:26:12 阮一峰

网页在不同尺寸的设备上,都有良好的显示效果,叫做"响应式设计"(responsive web design)。 响应式设计的网页图像,就是"响应式图像"(responsive image)。 响应式图像的解决方案有很多,JavaScript 和 CSS 都可以实现。本文介绍最简单的、语义性最好的 HTML 方法,浏览器原生支持。 一、问题的由来 我们知道,标签用于插入网页图像,所有情况默认插入的都是同一张图像。 上面代码在桌面端和手机上,插入的都是图像文件foo.jpg。 这种处理方法固然简单,但是有三大弊端。 (1)体积 一般来说,桌面端显示的是大尺寸的图像,文件体积较大。手机的屏幕较小,只需要小尺寸的图像,可以节省带宽,加速网页渲染。 (2)像素密度 桌面显示器一般是单倍像素密度,而手机的显示屏往往是多倍像素密度,即多个像素合成为一个像素,称为 Retina 屏幕。图像文件很可能在桌面端很清晰,放到手机上会有点模糊,因为像素扩充了。 (3)视觉风格 桌面显示器的面积较大,图像可以容纳更多细节。手机的屏幕较小,许多细节是看不清的,需要突出重点。 上面两张图片,下方的手机图片经过裁剪以后,更突出图像重点,明显效果更好。 二、像素密度的选择:srcset属性 为了解决上一节的这些问题,HTML 语言提供了一套完整的解决方案。首先,标签引入了srcset属性。 srcset属性用来指定多张图像,适应不同像素密度的屏幕。它的值是一个逗号分隔的字符串,每个部分都是一张图像的 URL,后面接一个空格,然后是像素密度的描述符。请看下面的例子。 上面代码中,srcset属性给出了三个图像 URL,适应三种不同的像素密度。 图像 URL 后面的像素密度描述符,格式是像素密度倍数 + 字母x。1x表示单倍像素密度,可以省略。浏览器根据当前设备的像素密度,选择需要加载的图像。 如果srcset属性都不满足条件,那么就加载src属性指定的默认图像。 三、图像大小的选择:srcset属性 + sizes属性 像素密度的适配,只适合显示区域一样大小的图像。如果希望不同尺寸的屏幕,显示不同大小的图像,srcset属性就不够用了,必须搭配sizes属性。 第一步,srcset属性列出所有可用的图像。 上面代码中,srcset属性列出四张可用的图像,每张图像的 URL 后面是一个空格,再加上宽度描述符。 宽度描述符就是图像原始的宽度,加上字符w。上例的四种图片的原始宽度分别为160像素、320像素、640像素和1280像素。 第二步,sizes属性列出不同设备的图像显示宽度。 sizes属性的值是一个逗号分隔的字符串,除了最后一部分,前面每个部分都是一个放在括号里面的媒体查询表达式,后面是一个空格,再加上图像的显示宽度。 上面代码中,sizes属性给出了三种屏幕条件,以及对应的图像显示宽度。宽度不超过440像素的设备,图像显示宽度为100%;宽度441像素到900像素的设备,图像显示宽度为33%;宽度900像素以上的设备,图像显示宽度为254px。 第三步,浏览器根据当前设备的宽度,从sizes属性获得图像的显示宽度,然后从srcset属性找出最接近该宽度的图像,进行加载。 假定当前设备的屏幕宽度是480px,浏览器从sizes属性查询得到,图片的显示宽度是33vw(即33%),等于160px。srcset属性里面,正好有宽度等于160px的图片,于是加载foo-160.jpg。 注意,sizes属性必须与srcset属性搭配使用。单独使用sizes属性是无效的。 四、标签,标签 上面两节分别解决了像素密度和屏幕大小的适配,但是如果要同时适配不同像素密度、不同大小的屏幕,应该怎么办呢? 这时,就要用到标签。它是一个容器标签,内部使用,指定不同情况下加载的图像。 cat 上面代码中,标签内部有两个标签和一个标签。 标签的media属性给出媒体查询表达式,srcset属性就是标签的srcset属性,给出加载的图像文件。sizes属性其实这里也可以用,但由于有了media属性,就没有必要了。 浏览器按照标签出现的顺序,依次判断当前设备是否满足media属性的媒体查询表达式,如果满足就加载srcset属性指定的图片文件,并且不再执行后面的标签和标签。 标签是默认情况下加载的图像,用来满足上面所有都不匹配的情况。 上面例子中,设备宽度如果不超过500px,就加载竖屏的图像,否则加载横屏的图像。 下面给出一个例子,同时考虑屏幕尺寸和像素密度的适配。 Shopify Merchant, Corrine Anestopoulos 上面代码中,标签的media属性给出屏幕尺寸的适配条件,每个条件都用srcset属性,再给出两种像素密度的图像 URL。 五、标签的type属性 除了响应式图像,标签还可以用来选择不同格式的图像。比如,如果当前浏览器支持 Webp 格式,就加载这种格式的图像,否则加载 PNG 图像。 ACME Corp 上面代码中,标签的type属性给出图像的 MIME 类型,srcset是对应的图像 URL。 浏览器按照标签出现的顺序,依次检查是否支持type属性指定的图像格式,如果支持就加载图像,并且不再检查后面的标签了。上面例子中,图像加载优先顺序依次为 svg 格式、webp 格式和 png 格式。 六、参考链接 Responsive Images 101, Jason Grigsby Responsive images, MDN (完) 文档信息 版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证) 发表日期: 2019年6月10日


开源软件合规实践6:开源合规流程中的检查点及发布清单

2019-06-09 06:01:19 宋净超

这篇文章是 Recommended Open Source Compliance Practices for the Enterprise 电子书(可从 Linux Foundation 网站免费下载)的中文连载第六篇。 开源软件合规实践1:总体概述 开源软件合规实践2:成立开源审查委员会


开源软件合规实践5:开源法务支持

2019-06-09 03:13:19 宋净超

这篇文章是 Recommended Open Source Compliance Practices for the Enterprise 电子书(可从 Linux Foundation 网站免费下载)的中文连载第五篇。 开源软件合规实践1:总体概述 开源软件合规实践2:成立开源审查委员会


开源软件合规实践4:开源代码溯源

2019-06-09 02:23:19 宋净超

这篇文章是 Recommended Open Source Compliance Practices for the Enterprise 电子书(可从 Linux Foundation 网站免费下载)的中文连载第四篇。 开源软件合规实践1:总体概述 开源软件合规实践2:成立开源审查委员会


开源软件合规实践3:开源代码审查

2019-06-09 01:13:19 宋净超

这篇文章是 Recommended Open Source Compliance Practices for the Enterprise 电子书(可从 Linux Foundation 网站免费下载)的中文连载第三篇。 开源软件合规实践1:总体概述 开源软件合规实践2:成立开源审查委员会


Golang 并发编程与 Context

2019-06-08 14:50:00 Draveness

Context 是 Golang 中非常有趣的设计,它与 Go 语言中的并发编程有着比较密切的关系,在其他语言中我们很难见到类似 Context 的东西,它不仅能够用来设置截止日期、同步『信号』还能用来传递请求相关的值。


开源软件合规实践2:成立开源审查委员会(OSRB)

2019-06-08 12:13:19 宋净超

这篇文章是 Recommended Open Source Compliance Practices for the Enterprise 电子书(可从 Linux Foundation 网站免费下载)的中文连载第二篇。 开源软件合规实践1:总体概述 开源软件合规实践2:成立开源审查委员会


开源软件合规实践1:总体概述

2019-06-08 10:13:19 宋净超

开源软件合规(Compliance)实践,从狭义上讲就是企业使用开源软件许可证(License)的合规。Recommended Open Source Compliance Practices for the Enterprise


每周分享第 59 期

2019-06-07 11:10:26 阮一峰

这里记录过去一周,我看到的值得分享的东西,每周五发布。 欢迎投稿,或推荐你自己的项目,请前往 GitHub 的 ruanyf/weekly 提交 issue。 (题图:浦东滨江,上海,2018年) 关于未来有很多预测,最新的一种预测是,未来你很难交朋友。 那种可以交流内心的朋友,未来会越来越少。理由是,人们的生活变动和活动范围越来越大,很难与他人持续的、深入的接触。 一项调查发现,美国人成年后的20年中,平均要搬家6次,每个地方就住三年多。刚刚与别人熟悉了以后,你就要离开了,除非刻意,以后就很难再见面了。一位教授感叹:"我的曾祖父一生的生活圈是40平方公里,就在小镇过完一生。祖父的生活圈是400平方公里,最远就去了城里。父亲是4,000平方公里,我自己是40,000平方公里,不仅生活在东海岸和西海岸,足迹遍布全世界。" 深厚的友谊不是一蹴而就的,需要多次接触和反复交流。但是由于生活圈子越来越大,变动越来越快,结交好朋友的难度正在不断加大。这么说吧,友谊是一个静态累积的过程,但是我们的生活正变得越来越动态。 事实上,25%的美国人一个好朋友也没有。 未来人与人的直接接触将极其稀少,大多数时候都是跟机器打交道。现在,付款和点餐就已经是自助式,不需要人类接触了。未来我们与他人接触将越来越多在网上,你大多数交到的朋友将是网友。 这意味着,为了一个健康的、有着丰富社交的生活,你需要多在网上展示自己、接触他人。对于那些互联网上沉默寡言的人,未来的人生将会非常孤独。 新闻 1、德国的电力卡车高速公路 重型卡车耗能大,燃油多,造成的污染也大,如果改用电动,需要太多电池,实际上不太可行。今年五月,德国开始尝试一种新的解决方案:在公路上方架设电线。 卡车经过改造后,顶部有一个向上的导电架,可以从电线上取电,从而变成电力驱动。卡车本身是混合动力,没有电线的地方,依然使用传统的柴油发动机。这种方案的一个好处是,由于不需要电池和充电设备,所以成本较低,缺点 是需要对现有公路进行改造,第一期已经完成了法兰克福机场到工业区的道路施工。 2、窗边读信的少女 《窗边读信的女孩》是一幅世界名画,完成于1657年~1659年,作者是荷兰著名画家维米尔(Vermeer)。收藏它的德累斯顿美术馆,进行 X 光扫描后发现,墙上原来有一副爱神丘比特的画像,居然被涂掉了。据信应该是作者本人涂掉的,因为几百年来,从来没有人提到过这件事。该美术馆正尝试去掉涂料,还原丘比特画像。 3、中国在亚马逊成功 亚马逊最近宣布,将退出中国的网上零售市场。这是亚马逊在中国的失败,但中国却在亚马逊成功。欧洲有一项新的法律,要求在线零售平台披露卖家的统计信息,因此亚马逊的欧洲各国分站披露了各自市场的前10000家大卖家的分布。结果,欧洲各国大卖家的最大来源,几乎都是中国。 比如,2018年英国亚马逊的大卖家,主要不是英国公司,而是中国公司,占到市场份额的40%(上图)。如果以公司家数衡量,英国亚马逊的中国卖家占到总家数的34%,德国亚马逊28%,法国亚马逊47%,意大利亚马逊45%,西班牙亚马逊52%。美国亚马逊不受该法律管辖,因此没有公布数据,但据估计中国卖家也能占到40%。 4、路灯植物 麻省理工学院的科学家创造出一种发光植物,希望以后用植物替代路灯。科学家将一种含有荧光素的酶,包装成纳米粒子,然后将这种纳米粒子注入植物的叶子,一旦荧光素氧化,就有一部分能量以光的形式释放出来,从而达到发光的效果。 这种粒子的照明效果,可以用来阅读书籍,大约持续4个小时。下一步,研究人员会设法提高光亮,不仅让它可以用作街道照明,还可以用作室内照明,甚至是台灯。 5、AirPods 耳环 AirPod 是现在最流行的无线耳机,特点就是完全没有耳机线。有人就发明了 AirPod 耳环,为它加上了线,可以把耳机挂在耳朵上,想听的时候就塞进耳朵,不想听就挂着,预订价是20美元。 有人说这样不好看,但是如果能够接受,有人整天耳朵塞着 AirPod,为什么不能接受,让它挂在耳朵下呢? 6、如果登月失败 1969年7月20日,阿波罗计划第一次将人类送上月球。整个计划的安排是,宇宙飞船先进入月球轨道,再发送登月舱,让两名宇航员登上月球。但是有一个风险点,就是登月完毕以后,登月舱需要从月球起飞,将宇航员送回宇宙飞船。没人知道月球起飞能否成功,因为无法测试。万一无法起飞,两名宇航员只能在月球表面等死,因为没有为这种情况设计任何救援计划。 美国政府完全了解这种风险,尼克松总统还为两名宇航员死在月球,事先准备了一份演讲稿。几十年以后,这份演讲稿才披露出来,里面的内容是:"命运已经决定,那些前往月球探索的人将会在月球上安息。这些勇敢的宇航员知道他们的获救没有希望,但他们也知道人类将从他们的牺牲中看到希望。对于每个在未来的夜晚仰望月球的人来说,会知道有人长眠在那里的某个角落。" 7、智能汤匙 帕金森症在老年人中越来越常见,单单在美国,就有1000万患者。这种疾病的特征是,患者的手会不停颤抖,导致吃饭很困难,因为手一抖,食物就会掉下来,必须有人喂。这对病人和家属都很痛苦,而且目前无药可治。 有人发明了一种智能汤匙,试图解决这个问题。这种汤匙可以判断手抖的频率和幅度,从而产生反向震动,抵消手的抖动,使得汤匙尽量平稳。它的售价接近200美元,并不便宜,但是销售量已经超过了1000个。 8、一句话新闻 美国国务院正式要求,所有申请美国签证者,都要提供过去五年使用过的社交媒体帐号。 SpaceX 公司为了实现"星链"计划,建立低轨道卫星宽带服务,5月15日通过一艘火箭发射了60颗卫星,成功完成"一箭六十星",每颗卫星的重量是227公斤。 W3C 宣布与 WHATWG 达成协议,HTML 和 DOM 标准都以 WHATWG 为准,也就是说以后只有一套 HTML 标准了。 苹果公司发布自己的第三方登陆服务,所有苹果商店上架的应用,只要提供第三方登陆,都强制要求接入该服务。 三星公司发明了一种技术,只用一张普通照片,就可以对人脸建模,生成各种表情的视频。(@wangweiX 投稿) 文章 1、如何评价 Erlang 语言之父 Joe Armstrong(中文) Joe Armstrong 是 Erlang 语言的发明人, 单单他的论文《面对软件错误构建可靠的分布式系统》就足以载入史册,他提出面向对象编程本质上不是并发的正确处理方法。 (@YongHaoWu 投稿) 2、SHA-256 哈希算法(英文) 一篇通俗教程,一步步解释了 SHA256 的计算方法,并有图例和 JavaScript 实现。(@xwu64 投稿) 3、你用不惯 RxJava,只因缺了这把钥匙(中文) 帮助读者理解 RxJava 操作符,并给出了一个示例项目。(@KunMinX 投稿) 4、前端框架的性能比较(中文) 本文将一个 App 用18个前端框架实现,然后比较它们的性能,翻译自英语原文。(@ahuigo 投稿) 5、如何将 gif 转成视频?(英文) GIF 动画格式有很多缺点,最大问题就是体积过大。本文教你如何将 GIF 转成视频,嵌入网页,并且兼顾 浏览器兼容问题。 6、什么是暗网(英文) 针对新人的暗网基本知识,不涉及技术细节。 7、十四亿人的口腹之欲,是如何被满足的?(中文) 本文翻译自剑桥大学博士在 Quora 的回答,中国如何使用农业科技,生产出足够便宜的农产品,满足14亿人的消费。(@arezl 投稿) 8、树莓派 GPIO 介绍(英文) 树莓派的功能扩展,往往都要通过板载的通用输入/输出模块 GPIO。本文介绍 GPIO 的基本知识。 9、JavaScript 开发者的 Vim 配置指南(英文) 本文详细介绍几个对于 JavaScript 开发非常有用的 Vim 插件。 10、从虚拟主机到 Kubernetes(英文) 一位后端架构工程师以自己的亲身经历,详细介绍公司基础架构的变化。 11、Dependabot 服务介绍(英文) 最近,GitHub 收购了 Dependabot,并将它的服务完全免费了。本文介绍如何使用这个非常好的依赖管理工具。 软件 1、MineTime 一个跨平台的桌面日历应用,具有人工智能的分析功能。 2、BasicCAT 一个计算机辅助翻译软件,特点是将文章分解成句子,然后判断新的句子与原有语料的相似程度,自动生成翻译。(@xulihang 投稿) 3、Fika Chrome 浏览器插件,可以将网页转成可以专心阅读的样式,内置四种主题。(@yueyericardo 投稿) 4、git_curate 项目的 Git 仓库有很多分支,你都忘记了哪些分支是有用的,导致不敢删除。这个工具可以显示每个分支的详细情况,以及是否已经合并了,帮助判断是否应该删除这个分支。 5、excelize 一个读写微软 Excel 文件的 Go 语言库。 6、Benchmarks Game 常用编程语言(27种)的两两性能对比,发现哪种语言最快。(@NeoTse 投稿) 7、Base web uber 公司开源的 React 组件库,风格比较简单干净。 8、Cedreo 一个 3D 的家居建模渲染软件,还可以生成平面图,免费注册使用。 9、Screen Record 一个浏览器里面的录屏工具,非常简单好用。 10、impression.js 监测网页元素是否出现在视口内的 JS 库,用于监测广告的曝光。(@vivaxy 投稿) 11、booster 滴滴推出的针对移动应用的质量优化工具包。(@johnsonlee 投稿) 12、halo 优秀的开源 Java 博客系统,国产软件,有良好的中文支持。(@ruibaby 投稿) 资源 1、龙猫学术导航 一个外文期刊检索与下载的网站,里面有很多资源链接。类似网站还有"大木虫学术导航"。(@Andrew5c 投稿) 2、MOOC 课程搜索引擎 该引擎可以搜索全世界的开放课程,目前包含1.2万门课程,里面也有中文课程。(@ketra21 投稿) 3、开放的招聘信息网站 一个开放式的张贴工程师招聘信息的网站,该网站本身也是代码开源。(@timqian 投稿) 4、awesome-uikit 该仓库收集前端各种JS框架,Web组件库和后台管理模板。(@jaywcjlove 投稿) 5、SAFE 这个项目在印度尼西亚婆罗州的热带雨林里面,放置了十几个录音设备,然后将每个小时录到的声音放到网上,让访问者听到每天不同时辰的大自然的声音。 6、任正非思想 该仓库收集了1994~2018年任正非400余篇讲话。这里是可下载的合集。(@wikiios 投稿) 7、Dork-Admin 这是一个中文仓库,盘点世界上比较重大的数据泄漏事件。(@No-Github 投稿) 图片 1、深圳电动出租车 深圳的2万辆出租车都是电动的,每天都要充电。下图是出租车停车场,司机等着电动车充电完毕。 2、Manolo 的绘画 阿根廷艺术家 Manolo Gamboa Naon 是色彩、构图和复杂性的大师。他的作品具有探索性和复杂的构图,好像软件生成的一样。 文摘 1、安卓设备极低的升级率 安卓 9.0 是2018年8月发布的,结果发布后81天,9.0的设备只占到0.1%。 安卓 8.0 Oreo 是2017年8月发布的,发布后431天,8.0的设备只有21.5%。7.0 Nougat 发布后的795天,低于7.0的设备依然占到50.3%。也就是说,有一半的安卓设备至少在2年内没有更新。 安卓设备不及时更新,用户就无法从系统的升级中受益。尽管谷歌多次尝试改善这种情况,但多年来情况一直在恶化。相当一部分安卓设备一旦出厂,就再也不会升级了,直到设备报废。 因此,安卓设备的特点就是,系统几乎不升级,或者升级的速度非常慢。谷歌正在加快新版本的发布,而老版本的比例却在不断上升。下表是各个版本的安卓,一年后的设备采用率。 影响系统升级的因素有三个:(1)制造商向设备发送更新包的速度,(2)制造商发布新系统设备的速度,(3)用户购买新设备的愿望。由于安卓平台本身的复杂性急剧增加,以及各个制造商在系统上又增加了自己的层,导致更新旧设备变得越来越困难。用户想要彻底升级,往往只有购买新设备,但是用户更换手机的速度也在放慢。 此外,除了手机和平板电脑,安卓设备还包括电视和车载系统,这类设备极少更新系统。 安卓厂商的快速变化,也有一定的影响。HTC、索尼和摩托罗拉都发布过很多安卓设备,随着这些公司的衰落,它们的设备就没有更新了。三星已经吞噬了许多较小公司的市场份额,这些小企业可能对基础操作系统的定制程度较低,而三星的系统定制程度较高,这也使得无法更快地发布系统更新。 总之,安卓的老版本将长期地困扰着厂商、消费者和开发者。 2、自行车日 1943年4月,瑞士生化学家阿尔伯特·霍夫曼在实验室工作时头晕目眩,感到非常不舒服,他觉得自己可能是某种化学品中毒了。三天后,病情不见好转,他决定使用一种新的物质麦角酰二乙胺(缩写 LSD),进行自我实验。这种物质是他在1938年首次合成的,当时认为具有兴奋剂的作用。 4月19日早上,他合成了0.5毫升的 LSD,将其溶解在10毫升水中,并在下午4点20分服用250微克(0.000025克),这是他认为可能会生效的最小剂量。 下午5点,他感到有点头晕,就决定骑自行车回家。途中,症状变得越来越强烈,后来他在1979年回忆道:"我很难描述,我的视野出现了波动,像一张扭曲的镜子,看到的东西都在游泳。"到家后,他立刻打电话给邻居,请邻居帮忙叫最近的医生。 这时,他的症状继续发展。"眩晕,视觉障碍,在场的人的面孔都像在做鬼脸。我的头部,身体和四肢都感觉很重,好像装满了金属;小腿痉挛,手冷,没有感觉;舌头上有金属味,干燥和收缩的喉咙,一种窒息的感觉。" 医生到达后,症状的高峰已经过去了。医生的笔记保留了下来,上面写道他被霍夫曼的"运动障碍和焦虑情绪"所震惊,但没有发现任何严重的问题。"客观地说,他心跳规律,脉搏稳定,呼吸平静。" 霍夫曼自己的感觉是,"现在,一点一点地,我开始享受前所未有的色彩和形状,在我闭着的眼睛后面持续存在。万花筒般的,奇妙的图像突然出现在我身上,交替,杂色,开放,然后以圆形和螺旋形闭合,在彩色喷泉中爆炸。" 第二天早上,他更是有一种奇妙的感觉。"我充满了幸福,仿佛开始了新的生活。世界仿佛是新生。"但是,当年的医生报告只是说,他醒来后"有点疲倦,感觉完全恢复了健康,但在医生的建议下,又躺在床上休息了一天"。 这是人类第一次发现迷幻药 LSD 的效果,由于霍夫曼当时在骑自行车,这一天就被叫为"自行车日"。每年4月19日,全世界都会举行"自行车日"纪念游行和派对。 言论 1、 React hooks 发布以后,同事们很想重写公司 App 的大部分代码,只是因为现在有了新的 API。 -- HN 读者留言 2、 2006年1月19日,新视野号宇宙飞船发射,飞向遥远的冥王星。经过三十亿英里的飞行,九年后的2015年7月14日11点49点,到达预定地点冥王星。这只比2006年的预测慢了1分钟,达到了99.99998%的准确度。 -- 《了不起的 NASA》 3、 对于强者来说,失败会激励他们。对于弱者来说,失败会使他们更加失败。 -- 罗伯特 T. 清崎,《富爸爸,穷爸爸》的作者 4、 生命是一个实验。实验越多,您对自己和世界的发现就越多。 -- 爱默生,19世纪美国著名作家 5、 ORM (对象-关系映射)对于简单的 CRUD 操作比较有用。但是,我宁愿不用 ORM,而是多花一点时间写 SQL 语句,这样可以节省我阅读 ORM 文档、优化查询、调试 ORM 的时间。 -- 《ORM,用还是不用》 回顾 去年的本周:《每周分享第 7 期》 订阅 这个专栏每周五发布,同步更新在我的个人网站、微信公众号和语雀。 微信搜索"阮一峰的网络日志"或者扫描二维码,即可订阅。 (完) 文档信息 版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证) 发表日期: 2019年6月 7日


SOFAStack Cloud Native Workshop由蚂蚁金服主办

2019-06-05 02:03:54 宋净超

日期:2019年6月24日,星期一 时间:9:00 – 16:30 地点:上海世博中心 注册费:免费 注册地址:https://www.lfasiallc.co


HTTP Referer 教程

2019-06-04 01:17:12 阮一峰

HTTP 请求的头信息里面,Referer 是一个常见字段,提供访问来源的信息。 很多开发者知道这个字段,但是说不清它的具体细节。本文详细介绍该字段。 一、Referer 的含义 现实生活中,购买服务或加入会员的时候,往往要求提供信息:"你从哪里知道了我们?" 这叫做引荐人(referrer),谁引荐了你?对于公司来说,这是很有用的信息。 互联网也是一样,你不会无缘无故访问一个网页,总是有人告诉你,可以去那里看看。服务器也想知道,你的"引荐人"是谁? HTTP 协议在请求(request)的头信息里面,设计了一个Referer字段,给出"引荐网页"的 URL。 这个字段是可选的。客户端发送请求的时候,自主决定是否加上该字段。 很有趣的是,这个字段的拼写是错的。Referer的正确拼写是Referrer,但是写入标准的时候,不知为何,没人发现少了一个字母r。标准定案以后,只能将错就错,所有头信息的该字段都一律错误拼写成Referer。 二、Referer 的发生场景 浏览器向服务器请求资源的时候,Referer字段的逻辑是这样的,用户在地址栏输入网址,或者选中浏览器书签,就不发送Referer字段。 主要是以下三种场景,会发送Referer字段。 (1)用户点击网页上的链接。 (2)用户发送表单。 (3)网页加载静态资源,比如加载图片、脚本、样式。 上面这些场景,浏览器都会将当前网址作为Referer字段,放在 HTTP 请求的头信息发送。 浏览器的 JavaScript 引擎提供document.referrer属性,可以查看当前页面的引荐来源。注意,这里采用的是正确拼写。 三、Referer 的作用 Referer字段实际上告诉了服务器,用户在访问当前资源之前的位置。这往往可以用来用户跟踪。 一个典型的应用是,有些网站不允许图片外链,只有自家的网站才能显示图片,外部网站加载图片就会报错。它的实现就是基于Referer字段,如果该字段的网址是自家网址,就放行。 由于涉及隐私,很多时候不适合发送Referer字段。 这里举两个例子,都不适合暴露 URL。一个是功能 URL,即有的 URL 不要登录,可以访问,就能直接完成密码重置、邮件退订等功能。另一个是内网 URL,不希望外部用户知道内网有这样的地址。Referer字段很可能把这些 URL 暴露出去。 此外,还有一种特殊情况,需要定制Referer字段。比如社交网站上,用户在对话中提到某个网址。这时,不希望暴露用户所在的原始网址,但是可以暴露社交网站的域名,让对方知道,是我贡献了你的流量。 四、rel属性 由于上一节的原因,浏览器提供一系列手段,允许改变默认的Referer行为。 对于用户来说,可以改变浏览器本身的全局设置,也可以安装浏览器扩展。这里就不详细介绍了。 对于开发者来说,rel="noreferrer"属性是最简单的一种方法。

三个标签可以使用这个属性,一旦使用,该元素就不会发送Referer字段。 xxx 上面链接点击产生的 HTTP 请求,不会带有Referer字段。 注意,rel="noreferrer"采用的是正确的拼写。 五、Referrer Policy 的值 rel属性只能定制单个元素的Referer行为,而且选择比较少,只能发送或不发送。W3C 为此制定了更强大的 Referrer Policy。 Referrer Policy 可以设定8个值。 (1)no-referrer 不发送Referer字段。 (2)no-referrer-when-downgrade 如果从 HTTPS 网址链接到 HTTP 网址,不发送Referer字段,其他情况发送(包括 HTTP 网址链接到 HTTP 网址)。这是浏览器的默认行为。 (3)same-origin 链接到同源网址(协议+域名+端口 都相同)时发送,否则不发送。注意,https://foo.com链接到http://foo.com也属于跨域。 (4)origin Referer字段一律只发送源信息(协议+域名+端口),不管是否跨域。 (5)strict-origin 如果从 HTTPS 网址链接到 HTTP 网址,不发送Referer字段,其他情况只发送源信息。 (6)origin-when-cross-origin 同源时,发送完整的Referer字段,跨域时发送源信息。 (7)strict-origin-when-cross-origin 同源时,发送完整的Referer字段;跨域时,如果 HTTPS 网址链接到 HTTP 网址,不发送Referer字段,否则发送源信息。 (8)unsafe-url Referer字段包含源信息、路径和查询字符串,不包含锚点、用户名和密码。 六、Referrer Policy 的用法 Referrer Policy 有多种使用方法。 (1)HTTP 头信息 服务器发送网页的时候,通过 HTTP 头信息的Referrer-Policy告诉浏览器。 Referrer-Policy: origin (2)标签 也可以使用标签,在网页头部设置。 (3)referrerpolicy属性