跟随,学习,进步

每周分享第 46 期

2019-03-08 03:18:20 阮一峰

这里记录过去一周,我看到的值得分享的东西,每周五发布。 欢迎投稿,或推荐你自己的项目,请前往 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 一个在 元素上绘制和解决迷宫的 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 期

2019-03-08 03:18:20 阮一峰

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


#DevOps 的前世今生# 4. DevOps 的文化

2019-03-07 07:47:30 李强

虽然开发团队和运维团队使用的工具变了,然而事情却没有改变:我们仍然能看到”流程结合在一起,但工作目标仍然分离“的两个团队:运维团队仍然牢牢控制着环境,控制着上线标准和上线流程

tags: DevOps,软件工程


敏捷开发入门教程

2019-03-06 13:48:41 阮一峰

敏捷开发(agile development)是非常流行的软件开发方法。据统计,2018年90%的软件开发采用敏捷开发。 但是,到底什么是敏捷开发,能说清的人却不多。本文尝试用简洁易懂的语言,解释敏捷开发。 一、迭代开发 敏捷开发的核心是迭代开发(iterative development)。敏捷一定是采用迭代开发的方式。 那么什么是"迭代开发"呢?迭代的英文是 iterative,直译为"重复",迭代开发其实就是"重复开发"。 对于大型软件项目,传统的开发方式是采用一个大周期(比如一年)进行开发,整个过程就是一次"大开发";迭代开发的方式则不一样,它将开发过程拆分成多个小周期,即一次"大开发"变成多次"小开发",每次小开发都是同样的流程,所以看上去就好像重复在做同样的步骤。 举例来说,SpaceX 公司想造一个大推力火箭,将人类送到火星。但是,它不是一开始就造大火箭,而是先造一个最简陋的小火箭 Falcon 1。结果,第一次发射就爆炸了,直到第四次发射,才成功进入轨道。然后,开发了中型火箭 Falcon 9,九年中发射了70次。最后,才开发 Falcon 重型火箭。如果 SpaceX 不采用迭代开发,它可能直到现在还无法上天。 迭代开发将一个大任务,分解成多次连续的开发,本质就是逐步改进。开发者先快速发布一个有效但不完美的最简版本,然后不断迭代。每一次迭代都包含规划、设计、编码、测试、评估五个步骤,不断改进产品,添加新功能。通过频繁的发布,以及跟踪对前一次迭代的反馈,最终接近较完善的产品形态。 二、增量开发 迭代开发只是要求将开发分成多个迭代,并没有回答一个重要的问题:怎么划分迭代,哪个任务在这个迭代,哪个任务在下个迭代?这时,一般采用"增量开发"(incremental development)划分迭代。 所谓"增量开发",指的是软件的每个版本,都会新增一个用户可以感知的完整功能。也就是说,按照新增功能来划分迭代。 举例来说,房产公司开发一个10栋楼的小区。如果采用增量开发的模式,该公司第一个迭代就是交付一号楼,第二个迭代交付二号楼......每个迭代都是完成一栋完整的楼。而不是第一个迭代挖好10栋楼的地基,第二个迭代建好每栋楼的骨架,第三个迭代架设屋顶...... 增量开发加上迭代开发,才算真正的敏捷开发。 三、敏捷开发的好处 3.1 早期交付 敏捷开发的第一个好处,就是早期交付,从而大大降低成本。 还是以上一节的房产公司为例,如果按照传统的"瀑布开发模式",先挖10栋楼的地基、再盖骨架、然后架设屋顶,每个阶段都等到前一个阶段完成后开始,可能需要两年才能一次性交付10栋楼。也就是说,如果不考虑预售,该项目必须等到两年后才能回款。 敏捷开发是六个月后交付一号楼,后面每两个月交付一栋楼。因此,半年就能回款10%,后面每个月都会有现金流,资金压力就大大减轻了。 3.2 降低风险 敏捷开发的第二个好处是,及时了解市场需求,降低产品不适用的风险。 请想一想,哪一种情况损失比较小:10栋楼都造好以后,才发现卖不出去,还是造好第一栋楼,就发现卖不出去,从而改进或停建后面9栋楼? 对于软件项目来说,先有一个原型产品,了解市场的接受程度,往往是项目成功的关键。有一本书叫做《梦断代码》,副标题就是"20+个程序员,三年时间,4732个bug,100+万美元,最后失败的故事",这就是没有采用敏捷开发的结果。相反的,Instagram 最初是一个地理位置打卡 App,后来发现用户不怎么在乎地理位置,更喜欢上传照片,就改做照片上传软件,结果成了独角兽。 由于敏捷开发可以不断试错,找出对业务最重要的功能,然后通过迭代,调整软件方向。相比传统方式,大大增加了产品成功的可能性。如果市场需求不确定,或者你对该领域不熟悉,那么敏捷开发几乎是唯一可行的应对方式。 四、如何进行每一次迭代 虽然敏捷开发将软件开发分成多个迭代,但是也要求,每次迭代都是一个完整的软件开发周期,必须按照软件工程的方法论,进行正规的流程管理。 具体来说,每次迭代都必须依次完成以下五个步骤。 需求分析(requirements analysis) 设计(design) 编码(coding) 测试(testing) 部署和评估(deployment / evaluation) 每个迭代大约持续2~6周。 五、敏捷开发的价值观 《敏捷软件开发宣言》里面提到四个价值观。 程序员的主观能动性,以及程序员之间的互动,优于既定流程和工具。 软件能够运行,优于详尽的文档。 跟客户的密切协作,优于合同和谈判。 能够响应变化,优于遵循计划。 六、十二条原则 该宣言还提出十二条敏捷开发的原则。 通过早期和持续交付有价值的软件,实现客户满意度。 欢迎不断变化的需求,即使是在项目开发的后期。要善于利用需求变更,帮助客户获得竞争优势。 不断交付可用的软件,周期通常是几周,越短越好。 项目过程中,业务人员与开发人员必须在一起工作。 项目必须围绕那些有内在动力的个人而建立,他们应该受到信任。 面对面交谈是最好的沟通方式。 可用性是衡量进度的主要指标。 提倡可持续的开发,保持稳定的进展速度。 不断关注技术是否优秀,设计是否良好。 简单性至关重要,尽最大可能减少不必要的工作。 最好的架构、要求和设计,来自团队内部自发的认识。 团队要定期反思如何更有效,并相应地进行调整。 七、参考链接 Iterative development: the secret to great product launches, Pavlo Zinchenko Agile software development, Wikipedia (完) 文档信息 版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证) 发表日期: 2019年3月 6日


敏捷开发入门教程

2019-03-06 13:48:41 阮一峰

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


#DevOps的前世今生# 3. DevOps 的目标和核心

2019-03-05 01:32:15 李强

在一个组织中,如果相关利益者的利益不一致,在既定流程的进行中一定会碰到诸多阻力。而在这一点上,首先做得就是把 Dev 和 Ops 的利益一致化,从而减少Ops对软件交付的阻力。

tags: DevOps


详解 Kubernetes Job 和 CronJob 的实现原理

2019-03-05 01:28:00 Draveness

之前介绍了 Kubernetes 中用于长期提供服务的 ReplicaSet、Deployment、StatefulSet 和 DaemonSet 等资源,但是作为一个容器编排引擎,任务和定时任务的支持是一个必须要支持的功能。


详解 Kubernetes DaemonSet 的实现原理

2019-03-01 14:30:00 Draveness

Deployment 是 Kubernetes 中用于处理无状态服务的资源,而 StatefulSet 是用于支持有状态服务的资源,这两种不同的资源从状态的角度对服务进行了划分,而 DaemonSet 从不同的维度解决了集群中的问题 — 如何同时在集群中的所有节点上提供基础服务和守护进程。


print不是函数

2019-03-01 09:59:47 Laruence

这个源自于一个看似很诡异的问题: if (print("1\n") && print("2\n") && print("3\n") && print("4\n")) { ; } 你期待这段代码输出什么呢?

tags: PHP应用,随笔,if,language constructs,PHP,print


每周分享第 45 期

2019-02-28 16:08:18 阮一峰

这里记录过去一周,我看到的值得分享的东西,每周五发布。 欢迎投稿,或推荐你自己的项目,请前往 GitHub 的 ruanyf/weekly 提交 issue。 美国科幻小说大师阿西莫夫,写过一本回忆录《人生舞台》。他在里面提到,成名后,他的收入一年比一年高,完稿时的1990年是收入最高的一年。 很不幸,1992年他就去世了,享年72岁。据他的妻子说,那一年的收入比1990年还要高。也就是说,去世时,他达到了一生最高的年收入。我当时心想,这种收入模式真是太好了。老了以后,收入反而更多了,根本不用为养老发愁。 大多数人的收入模式恰恰相反:工作时达到收入的高峰,退休停止工作以后,收入就逐渐减少,人到老年,手头越来越紧。所以,大多数人为了养老,年轻时必须足够储蓄。要是年轻就背负了很多房贷和卡债,老了以后,往往会陷入困境。 为什么阿西莫夫老了还有大量收入,其他大多数人就没有呢?原因是普通人的收入,来自出卖自己的时间,老了不工作,自然就没收入了。但是,阿西莫夫的收入来自于他的书,这些著作一再重版,为他带来了一年比一年多的版税收入。再加上,他勤奋写作,每年都有新书问世,自然就收入高了。 这件事的启示就是,如果退休以后,还想有稳定的收入保障,最好的方式就是你必须拥有资产。在阿西莫夫的例子里,就是他拥有版权,版权就是一种产生收入的资产。其他类型的资产包括房产、专利、股权等等。总之,年轻时就必须明确,你的工作目标不完全是高收入,更重要的是必须积累资产。 新闻 1、密码只有创始人知道 加拿大加密货币交易所 QuadrigaCX 的创始人,30岁的杰拉德·科滕(Gerald Cotten),由于意外于2018年12月在印度突然去世。公司钱包的密钥只有他一个人知道。 现在公司无法打开钱包,大约1.9亿美元的客户资产无法转出,这意味客户的加密货币都会损失掉。 2、无人船只远航夏威夷 美国海军的研究部门2016年建造了一艘无人船只 Trimaran,长40米,没有任何船员,可以执行多种任务。最近,该船成功完成了加州圣地亚哥到夏威夷珍珠港的往返航行,跨越了半个太平洋。 无人船只的建造成本仅为载人船只的一小部分。这次航行帮助美国海军评估这项技术,下一步将从实验阶段转向高级任务测试。 3、快乐广场 快乐广场(Happy Place)是美国一家新成立的展览公司,在北美各大城市轮流布展,每个城市大约停留3个月左右。它的展览没有主题,就是提供布置得非常梦幻和美丽的场景,供参观者拍照,然后发到社交媒体上面。每人的门票价格是30美元左右,每个场景每次有45秒的独占拍照时间,据说相当受欢迎。 4、外星人飞船 Avi Loeb 是哈佛大学天文系主任。2017年底,夏威夷的天文学家偶然发现第一个已知的星际物体 Oumuamua,正在快速地穿越太阳系。由于移动速度太快,而且与太阳引力的方向相反,它只可能来自另一个星系。 其他天文学家都认为,它可能是数亿年前恒星爆发产生的小行星,或是冰彗星。但是,Avi Loeb 公开发表论文,提出它可能是外星人的飞船,因为它的运动轨迹,好像是有什么东西从后面推动它。如果是被太阳风吹动,就意味着它非常薄,不超过1毫米厚,好比一块长度为一公里的雪花,这几乎是不可能的。"虽然不能肯定绝对是外星人,但除了外星人,没法想出别的解释。" 这个观点受到广泛的质疑和攻击,但是 Avi Loeb 坚持自己的观点,并且到处宣传。谈到科学界认为他在胡说八道时,他说:"最糟糕的结果是我被免职,这将使我有更多的时间专注于科学。我的所有头衔,我都可以放弃。事实上,我可以回到自己的农场过日子。" 5、马桶座圈监控健康 人体健康的有些指标,需要随时随地的持续监控,定期记录健康信息。现有的设备都做不到这一点,比如智能手表能够搜集的健康信息,就非常有限。 纽约罗切斯特理工学院 (RIT)的一个团队,提出了一种新的方法:马桶座圈监控患者的心脏健康。患者坐上马桶的时候,马桶座里面的传感器就会跟踪血压、血氧水平和其他心脏数据,然后自动上传到服务器。如果程序发现患者的心脏健康状况正在恶化,就会提示要去看医生, 6、AR 眼镜 2019年的消费电子展 CES 传出消息,Facebook 和微软都提交了 AR 眼镜专利文件,朝着 AR 眼镜更小更好的方向努力。这两种眼镜都带有小型投影设备,可以在镜片上叠加图像,使得用户可以在当前场景上,看到一些文字信息,包括电子邮件、通知,以及其他的现实增强功能。 7、Safari 废除 Do not track 功能 当代浏览器都有一个 Do not track (不要追踪)的选项。一旦选中,浏览器会向网站发出一个请求,告诉网站不要追踪用户。但是,没有网站认真对待这个请求,而是继续追踪用户,因此苹果公司决定,最新的 Safari 浏览器将去除这个功能,另一方面,Safari 内置了智能阻止 Cookie 的功能,实际上使得 Do not track 变得多余了。 8、深度学习选衣服 有时,你出门前会花很多时间思考,今天到底穿什么衣服。美国一家创业公司正试图使用深度学习,解决这个问题,让计算机帮你选择穿什么衣服。它的思路是,从 Pinterest 里面上传的图片,找出目前的流行时尚,然后根据你的现有服装、以及出门的场合等因素,推荐搭配。这个系统的下一步目标,是为每个人设计最适合他/她的服装。 9、GitHub 年度报告 GitHub 发布年度报告,显示用户国别的前三位分别是美国、中国、印度。 比较厉害的是加拿大,只有3千万人口,可以排到第六位。 编程语言排行榜(根据 GitHub 仓库数量统计)中,最值得注意的是 TypeScript 从去年的第十名,跃升为第七名。另外,有点意外的是,PHP 其实一直非常流行,毫无衰退迹象。 10、一句话新闻 Spotify 如果发现免费用户使用了广告拦截器,现在会终止对该用户提供服务。你不看广告,就无法享受免费服务,除非付费。 加州宣布考虑取消洛杉矶到旧金山的高铁计划,原因是成本不断上升,完工遥遥无期。 澳大利亚法官判决,不得开采一个煤矿,因为是煤炭会释放温室气体。 Chrome OS 73 新增了 PDF 手动注释功能,以后应该也会加到 Chrome 浏览器。 关哥说险 我们这份周刊主要针对 IT 开发者和爱好者,大家都对风险比较关注,因此对保险产品有较高的需求,但是相对缺乏保险知识。有鉴于此,保险公众号 《关哥说险》 联系我,希望在周刊上推广一下自己。 该公众号的作者"关哥",其实是一个复旦毕业的东北妹子,在大陆和香港两地已经有十余年的银行和保险从业经验,从事过不少岗位,亲历过大量案例。她结合自己的经历,在公众号上向普通读者介绍,应该如何购买保险产品,以及购买时的注意事项。 比如,很多人不知道"犹豫期"和"等待期"是什么。简单说,"犹豫期"是你购买保险后可以反悔的时间,通常是签订合同后的10~15天之内。 "等待期"则是保险公司可以免赔的时间,通常是3个月到6个月。比如,购买了医疗险以后的第二个月,你就发病了,这种情况保险公司是不陪的,理由是购买保单时,你可能隐瞒了病情。 下面是她的一些保险箴言。 保险的本质是风险管理,你都不肯承认风险的存在,你怎么可能去做风险管理呢? 保险是射幸合同,本质就是不确定性、偶然性。 任何一种理财产品,都要从安全性、收益性、灵活性这三点来评估。 先确定自己担心的风险,再确定购买的种类,最后才是选产品。 不要用获利思维去评价一个止损工具。 《关哥说险》的文章目录可以看这里,里面有整理好的系列文章。对保险有兴趣的朋友,欢迎微信扫描下面的二维码订阅。 教程 1、Finally 代码块的解释(英文) 随着 JS 引入 async/await ,开发者不可避免地会更多使用 try/catch/finally ,本文解释 finally 代码块的一些容易混淆的点。 2、一段混淆过的 JS 脚本剖析(英文) 作者收到一封诈骗 Email,比较特别的是,它不是引诱用户点击链接,而是提供了一个网页附件,让用户打开,里面是一段混淆过的 JS 脚本。 3、apt 与 apt-get 的差异(英文) Debian 系统安装软件包有 apt 和 apt-get 两种命令,本文介绍了它们的异同。 4、TensorFlow.js 介绍(英文 PDF) 本文描述了TensorFlow.js 的设计、API 和实现,并重点介绍了一些使用实例。 5、编程语言都有中央包存储库吗?(英文) 许多语言都有中央软件包存储库,比如 npm、PyPI 和 CRAN。但是,每种编程语言都有这些吗?答案是只有39种语言有。 6、你应该记住的 DNS 地址(英文) 作者介绍了几个常用的 DNS 服务器地址,简单谈了它们之间的差异。 7、磁极的改变意味着什么?(英文) 最近,地球磁极的 N 极突然加速改变,这篇《国家地理》的报道详细介绍了背景知识。 8、Jsonnet 比 Yaml 更适合配置文件(英文) Jsonnet 是谷歌推出的 JSON 配置文件生成工具,基本上解决了 JSON 格式的所有痛点,比 Yaml 格式更优越。 9、为什么我们从 Go 转向 PHP?(英文) 作者谈了 PHP 过去三年的改进,以及为什么更适合架设他们的网站。 10、文件系统的过去,现在和未来(英文) 文件系统的历史回顾,介绍各种文件系列的来历和特点。 工具 1、FP-Glossary 一个 Chrome 浏览器插件,每次打开一个空白页,会显示一个函数式编程的概念。 2、香港地铁站的颜色 一个 CSS 颜色库,使用每一个香港地铁站的颜色命名 CSS 变量。 3、rbx 基于 CSS 框架 Bluma 的 React 组件库。 4、pagedraw 一个 UI 原型设计的桌面软件,可以输出 JSX 代码。 5、B4X Basic 语言开发工具,支持几乎所有平台,源码会被转译为对应平台的代码,比如Java、Objective-C、JavaScript。(@xulihang 投稿) 6、colorSpace 一个网页工具,可以去除图像里面的用户指定的颜色,对去除背景很有用。 7、archivarix 该工具可以用来从 Achive.org 的 Wayback Machine 里面,下载某个网站在指定日期的所有网页。 8、ExplainShell.com Bash 命令的可视化解释工具。遇到复杂的 Bash 命令,可以输入到这个网站,查看该命令的解释。(@weineel 投稿) 9、Project Showcase 该工具根据你的 GitHub 个人项目,自动生成一张个人介绍页面。(@lanffy 投稿) 10、rrweb 一个可以录制网页操作的 JS 库,不是录制成视频,而是将用户的每一个操作,录制成可复现的脚本。(@rolitter 投稿) 11、gitsome 一个 Git / GitHub 的命令行客户端,提供强大的自动补全功能。(@ChungZH 投稿) 资源 1、线性代数 美国本科生的线性代数教材,免费下载。 2、计算机科学的自学方案 本文对于计算机科学各门课程的自学,给出了一个完整的方案。 3、科技资讯的聚合网站 该网页聚合多个英文科技咨询网站的消息,一个地方就能看到所有资讯。(@shouldsimple 投稿) 4、Vim Adventure 通过游戏学习 Vim,看上去比较有趣。(@lenkenlau 投稿) 5、LeetCode Animation 使用动画的形式呈现解 LeetCode 题目的思路。(@nivance 投稿) 6、前端开发精选工具库 收集前端开发各方面的工具。(@xiaohesong 投稿) 7、笨办法学 Vimscript 开源的中级 Vim 教程,将 Vimscript 作为一门编程语言,帮助读者掌握。(@douchuan 投稿) 8、public-apis 这个仓库收集免费的 API,已经有100多个了。 9、Last-Statement-of-Death-Row 美国得州的政府网站,有该州死刑犯的遗言数据库。周刊读者编写了 Python 脚本,去抓取所有遗言,输出 CSV 文件。(@wansho 投稿) 文摘 1、通过拥有东西致富 小时候,我对于经济的最大误解是,人们通过高工资致富。实际上,虽然有一些例外(比如娱乐明星),高工资并不足以让你发财,福布斯富豪榜上,几乎没有人是领工资的。 真正富裕起来的人,都是通过拥有某种价值迅速增长的东西而致富。 这种价值迅速增长的东西,可以是股权、房地产、自然资源、知识产权或其他类似的东西。你需要拥有一些这样的东西来获取收入,而不能仅仅依靠出卖自己的时间换取收入,因为时间是一种线性资源。想要要多的收入,只能出卖更多的时间,这对你不利。 使你的东西的价值迅速增长,最好方法就是让大量的人想要你的东西。 2、新武器对第一次世界大战的影响 以下摘自斯科特·安德森的传记《阿拉伯的劳伦斯》。 1914年,第一次世界大战刚刚爆发的时候,大多数人都预测,这将是一场非常短暂的战争,因为19世纪的战争都很短暂。 但是,绝大多数人都忽略了一个关键的细节:过去的40年中,武器已经发生了翻天覆地的变化,关于武器的老观念都已经过时了。机枪、长射程炮弹、带刺铁丝网,这些新武器都已经诞生了。就是因为这个疏忽,这场战争将变成与大多数人的预期大相径庭的大屠杀。 欧洲列强之所以会疏忽,一个原因是,此前这些新式武器,几乎完全用来对付没有这些新式武器的人,特别是那些试图抵抗帝国主义侵略的非欧洲人。在这些情况下,新式武器使得欧洲人可以对落后民族实施一边倒的大屠杀,这是欧洲各个殖民帝国能够在19世纪下半叶在亚非迅速扩张的最重要原因。那些列强自身,还从来没有遭受这些新武器带来的伤害。 英国陆军大臣基钦纳勋爵,是少数对这场战争的残酷性有正确估计的人。他多次执行过这种一边倒的大屠杀,1898年在苏丹的恩图曼战役中,基钦纳用马克沁重机枪对付挥舞长矛冲锋的骑兵;仅仅一个上午的时间,英军就消灭了1万名敌人,己方仅有47名士兵阵亡。但如果敌人也有马克沁重机枪,会发生什么情况?基钦纳心知肚明。8月7日的内阁会议上,有些大臣认为战争只会持续几个月,甚至几周。他却预测说,战争会持续几年。他告诉同僚们:"到我国只剩最后100万人时,战争才会结束。" 这种话自然很少有人愿意去听,更不会有人去注意了。 随后的四年,欧洲变为一个屠场,约1000万军人和约600万平民死于这场战争。 本周图片 1、联邦调查局的衣物鉴定 很多时候,犯罪现场的线索就是一些监视录像。美国联邦调查局开发出了一套方法,判断某件衣物是否为监视录像里面的衣物。 1996年,华盛顿发生了一件银行抢劫案。警方后来抓了几个犯罪嫌疑人,从他们的衣橱里面一共搜到了27条牛仔裤。FBI 后来发表了一篇论文,介绍他们怎么根据监视录像,从27条牛仔裤里面找出犯罪时穿的那一条。 另一张照片是找出犯罪分子穿的那件格子衬衫。 2、乐器博物馆 意大利克雷莫纳,历史上是一个著名的小提琴制作城市。著名的斯特拉迪瓦里小提琴,就是在那里制作的。下图是当地的小提琴博物馆。 3、Windows 98 的图标 Windows 98 的图标非常经典,有坚实的边缘,柔和的色彩和易于识别的符号。 新奇 1、此人不存在 访问该网站会随机显示一张人像照片。这些人像都是 AI 生成的,并不是真实的人。 本周金句 1、 你不应该进入那种行业,做了两年的人可以和那些已经做了二十年的人,具有一样的工作效率。 -- 《如何成功》 2、 你的目标应该是,为你的现状 ---- 财产、销售额、影响力等等----添加一个零。我总希望,我的下一个工作,将使得职业生涯的其余部分,看起来只是这个工作的一个脚注。 -- 《如何成功》 3、 自信很重要。我认识的最成功的人,几乎都自信到妄想的地步。这是因为如果你不相信自己,就很难产生跟别人不一样的想法,而逆向的想法恰恰是创造大多数成功的地方。 -- 《如何成功》 4、 如果人体可以进行光合作用,那么合成的葡萄糖,只能满足我们所需能量的1%。如果要满足每天所需的约700克葡萄糖,我们需要有更大的皮肤,准确说大约160平方米左右,约为一个网球场的大小。 --《为什么人类不能进行光合作用》 5、 大多数人都高估了他们一天能做的事情,但低估了他们一年能做的事情。 -- 《关于"我没有足够的时间"》 欢迎订阅 这个专栏每周五发布,同步更新在我的个人网站、微信公众号和语雀。 微信搜索"阮一峰的网络日志"或者扫描二维码,即可订阅。 (完) 文档信息 版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证) 发表日期: 2019年3月 1日


每周分享第 45 期

2019-02-28 16:08:18 阮一峰

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


#DevOps的前世今生# 2. Dev和Ops矛盾缘何而来 ?

2019-02-28 01:53:42 李强

通过追溯 DevOps 活动产生的历史起源,我们发现了 DevOps 是敏捷思想从软件开发端(Dev)到系统维护端(Ops)的延伸。无论是 DevOpsDays 的创始人 Patrick Debois,还是同时期的 The Agile Admin。都想通过敏捷来改进传统的系统维护工作以及软件开发部门和系统维护部门的合作关系。但是,DevOps 的矛盾从何而来?这还要从 Dev 和 Ops 的起源开始讲起。

tags: DevOps


详解 Kubernetes StatefulSet 实现原理

2019-02-28 01:31:00 Draveness

在 Kubernetes 的世界中,ReplicaSet 和 Deployment 主要用于处理无状态的服务,无状态服务的需求往往非常简单并且轻量,每一个无状态节点存储的数据在重启之后就会被删除,虽然这种服务虽然常见,但是我们仍然需要有状态的服务来实现一些特殊的需求,StatefulSet 就是 Kubernetes 为了运行有状态服务引入的资源,例如 Zookeeper、Kafka 等。


#DevOps的前世今生# 1. DevOps编年史

2019-02-27 10:01:44 李强

Patrick意识到开发团队和运维团队的工作方式和思维方式有巨大的差异:开发团队和运维团队生活在两个不同的世界,而彼此又坚守着各自的利益,所以在这两者之间工作到处都是冲突。作为一个敏捷的簇拥者,他渐渐的明白如何在这种状况下改进自己的工作。

tags: 软件工程


谈谈我的“三观”

2019-02-26 08:02:07 陈皓

也许是人到了四十多了,敢写这么大的命题,我也醉了,不过,我还是想把我的想法记录下来,算是对我思考的一个snapshot,给未来的我看看,要么被未来的我打脸,要么... Read More Read More

tags: 杂项资源,Programmer,程序员


Istio知识图谱 v0.1 发布及 Istio Handbook 社区图书启动孵化

2019-02-26 06:09:04 Jimmy Song

2019年2月15日晚,我在朋友圈里发起了 Istio 知识图谱项目。 而后获得 ServiceMesher 社区成员的热烈响应,在此后的一周内陆续有151参与进来。 经过10天的孵化


详解 Kubernetes Deployment 的实现原理

2019-02-24 13:55:00 Draveness

如果你在生产环境中使用过 Kubernetes,那么相信你对 Deployment 一定不会陌生,Deployment 提供了一种对 Pod 和 ReplicaSet 的管理方式,每一个 Deployment 都对应集群中的一次部署,是非常常见的 Kubernetes 对象。


每周分享第 44 期

2019-02-22 02:26:40 阮一峰

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


Go 语言数组和切片的原理

2019-02-20 11:51:00 Draveness

数组和切片是 Go 语言中常见的数据结构,很多刚刚使用 Go 的开发者往往会混淆这两个概念,数组作为最常见的集合在编程语言中是非常重要的,除了数组之外,Go 语言引入了另一个概念 — 切片,切片与数组有一些类似,但是它们的不同之处导致使用上会产生巨大的差别。


ORM 实例教程

2019-02-18 21:29:06 阮一峰

一、概述 面向对象编程和关系型数据库,都是目前最流行的技术,但是它们的模型是不一样的。...