813 Matching Annotations
  1. Sep 2021
    1. 【印象笔记剪藏插件🔗】(https://www.yinxiang.com/webclipper/)【Super Simple Highlighter - Chrome 网上应用店🔗】( https://chrome.google.com/webstore/detail/super-simple-highlighter/hhlhjgianpocpoppaiihmlpgcoehlhio)【Remarkerbe - Chrome 网上应用店🔗】(https://chrome.google.com/webstore/detail/remarkerbe/aklkmkchojnnjbmggchdeagdgcflfhnc)【Beanote - Note Taking on Web Pages - Chrome 网上应用店🔗】(https://chrome.google.com/webstore/detail/beanote-note-taking-on-we/nikccehomlnjkmgmhnieecolhgdafajb) 【Hypothesis官网链接🔗】(https://web.hypothes.is/)

      【印象笔记剪藏插件🔗】(https://www.yinxiang.com/webclipper/)

      【Super Simple Highlighter - Chrome 网上应用店🔗】( https://chrome.google.com/webstore/detail/super-simple-highlighter/hhlhjgianpocpoppaiihmlpgcoehlhio)

      【Remarkerbe - Chrome 网上应用店🔗】(https://chrome.google.com/webstore/detail/remarkerbe/aklkmkchojnnjbmggchdeagdgcflfhnc)

      【Beanote - Note Taking on Web Pages - Chrome 网上应用店🔗】(https://chrome.google.com/webstore/detail/beanote-note-taking-on-we/nikccehomlnjkmgmhnieecolhgdafajb)

      【Hypothesis官网链接🔗】(https://web.hypothes.is/)

    1. 启示录 更新图书信息或封面 作者:  [美] Marty Cagan 出版社: 华中科技大学出版社 副标题: 打造用户喜爱的产品 原作名: Inspired: How To Create Products Customers Love 译者: 七印部落 出版年: 2011-5

      启示录重点是启示,而非操作手册. 关于人,流程,和产品的启示, 虽然每一个领域的细节都有各自的问题,但是有一个大的宏观概念也很重要,这一点我其实一直都没有,产品经理的文章看了不少,但是最有价值的那几篇基本都是cagan写的. 与其关注产品经理这个角色问题,还不如关注做产品这件事情上. 而关注的最好方法其实就是定偶像, 目前的偶像肯定不是sujie,刘飞之类的产品经理网红,cagan显然要比产品经理手册的作者要更好一点. 有产品经验且在持续做产品经理教育的人太少了. 像三节课专注做教育,没有拿得出手的产品, 会做产品的呢又不写作或者写作零散. 所以还是cagan吧

      60m 启示(反常识点) epub 至少感觉得读3遍,所以第一遍可以快一点

    1. 对于绝大多数项目来说,在单文件组件和字符串模板中组件名称应该总是 PascalCase 的——但是在 DOM 模板中总是 kebab-case 的。

      1.字符串模板 字符串模板就是写在vue中的template中定义的模板,如.vue的单文件组件模板和定义组件时template属性值的模板。字符串模板不会在页面初始化参与页面的渲染,会被vue进行解析编译之后再被浏览器渲染,所以不受限于html结构和标签的命名。

      Vue.component('MyComponentA', { template: '<div MyId="123"><MyComponentB>hello, world</MyComponentB></div>' })

      <div id="app"> <MyComponentA></MyComponentA> </div> 2.dom模板(或者称为Html模板) dom模板就是写在html文件中,一打开就会被浏览器进行解析渲染的,所以要遵循html结构和标签的命名,否则浏览器不解析也就不能获取内容了。

      下面的例子不会被正确渲染, 会被解析成mycomponent,但是注册的vue的组件是MyComponent,因此无法渲染。

      <!DOCTYPE <html> <head> <meta charset="utf-8"> <title>Vue Component</title> </head> <body> <div id="app"> Hello Vue <MyComponent></MyComponent> </div> <script src="https://cdn.jsdelivr.net/npm/vue@2.5.16/dist/vue.js"></script> <script > //全局注册 Vue.component('MyComponent', { template: '<div>组件类容</div>' }); new Vue ({ el: '#app' }); </script> </body> </html>

  2. Aug 2021
    1. Pixlr,这是一款出色的照片编辑器,您可以免费使用,但也有付费版本可以为您提供更强大的功能。 Pixlr 是一个基于云的一体化创意套件。 Pixlr 最初是一个基于 AI 的在线照片编辑器,它允许用户直接在浏览器中免费编辑照片。但随着时间的推移,Pixlr 不断发展,引入了更强大的特性和功能,最终它成为了一个多合一的照片编辑和图形设计平台。

    Tags

    Annotators

    URL

    1. 这真的很正常,大部分人,包括我都经历过,可能有这么几种原因把工作当成主要甚至唯一代偿,工作顺利就开心,不顺利就不开心更重视外部激励回报(升职加薪/数据涨跌等),而不是内在喜欢这件事长期紧绷高压力/自我接纳低状态,职业无突破/遇阻,就像拉开的弹簧一直没松回来,铁人也会累感觉不到在做的事的意义/价值,提不起兴趣看不到成长/升值空间或希望

      工作倦怠可能的原因

    1. 真正的「天赋」是「兴趣」和「坚持」——你做这件事你会感兴趣,你会觉得有意思,能继续做下去,我觉得这就是天赋。

      .imp talent不是上帝给的,而是自己养成的。每个人应该都会有天赋,也就是每个人都有喜欢上某一个东西并养成习惯的机会。只不过很多并没有发现的了,或者那个有天赋的人自己不说,或者他自己也不太理解

    1. 文章开头回顾了 1930 年代,美国的谷物生产商 Kellogg 宣布,将 1500 名工人从 8 小时工作制转为 6 小时工作制,旨在给工人更多的休闲时间用于个人生活,同时,也将创造出新的工作岗位给更多人。这家公司认为,更短的班次将提升工作效率,同时带来社区整体购买力的上升。

      根据文章中的描述,这个变化带来了令人满意的影响。很多人重新开始享受家庭生活,培养个人兴趣爱好。但是,这并非社会分工的主流变化趋势。实际上,人们工作得越来越多,而这一点造成的影响是深远的。

      到 2005 年,人均家庭支出(按通货膨胀调整后的美元计算)是 1929 年的 12 倍,而用于耐用品——汽车和电器等大件物品——的人均支出是当年的 32 倍。同时,到 2000 年,有孩子的已婚夫妇平均每年比 1979 年多工作近 500 小时。根据美国联邦储备银行 2004 年和 2005 年的报告,超过 40% 的美国家庭花费超过他们的收入。平均每个家庭背负着 18,654 美元的债务,这还不包括住房抵押贷款债务,家庭债务与收入之比达到创纪录水平,在过去 20 年中几乎翻了一番。我们确实在疯狂地工作, 这样我们才能消耗机器所能生产的所有产品。 然而,我们可以工作和花费少得多,仍然生活相当舒适。到 1991 年,每小时劳动生产的商品和服务数量是 1948 年的两倍。到 2006 年,这一数字又上升了 30%。换句话说,如果我们作为一个社会,我们集体决定要通过我们 17 年前的生产和消费量,我们可以从标准的每周 40 小时削减到每天 5.3 小时,或者如果我们愿意回到 1948 年的水平,可以削减到每天 2.7 小时。1948 年,我们已经是地球上最富有的国家,世界上大多数国家还没有赶上我们当时所处的位置。

      在生产力已经如此之长的情况下,一部分人工作时间越长,就会带来另一部分人的工作时间减少。这一点在历史学家阿诺德·汤因比看来就是:「我们要么分享工作,要么照顾那些没有工作的人。」

      文章的后半部分转向讨论消费主义和精英政治之间的关联。精英政治家从未认为大众拥有过对消费和工作多少的选择权,而认为他们只是”production at work and as consumers at home“。Kellogg 的六小时工作制只可能存在于小范围的局部实验,但它确是反资本主义的——资本天生追求规模,也只有规模能够为资本带来可观的回报。

    1. 任何一款软件,之所以强大,无论是谷歌浏览器,还是微信,都是支持了很多的拓展应用。而微信小程序,就可以理解为微信的拓展程序。在这里,推荐两款不错的小程序。

      所以说微信的插件就是小程序咯,我一直还不知道原来这个微信的小程序这么猛的呀,是我一直没有发现这个好用的功能而已,这是我自己的失职呢。

    1. 1.1 选题数据库的基础设置在尝试了各种工具之后,我最终选择了 Notion 来做这件事

      .imp .*5 .ctk 选题库用notion是有道理的。我刚才脑子过了一下,用表单工具做选题不合适,因为他们没有打通文档和表格。

      notion是单向打通,也不够好。但是,双向打通感觉非常非常难,因为逻辑很难抓。比如写测评的文章应该怎么办的问题。能不能做基于数据库的创作呢?感觉很难,好像除了omnioutliner以外就没了呢。 有可能一些其他的一些专业写作工具可以把。这对我又是一个新领域了。但是他们能和csv文档打通么?感觉够呛

      .quiz 需要确定一下csv这个格式的逻辑了

    1. 其实他们并非学不会,而是对工具的使用产生了恐惧心理,总认为一款工具的学习过程是复杂且枯燥的。因此选择了最消极的方法对待这件事。

      .ctk 大多数还是恐惧驱动的。消除恐惧的方法难么?难。难在缺乏一个以身作则的人,用实际表现告诉大家,这个其实不难,你看我也会。

    2. 在线工具无需频繁下载更新安装包。 在线工具能提供网络服务,便于与其他设备同步。 在线工具能提供 API,便于与其他工具协作。 在线工具能通过全文翻译解决语言问题。 在线工具必须依赖于浏览器。 在线工具的设计中很少会设计右键操作。 在线工具很少能直接离线存储。 在线工具通常无法安装本地插件。 在线工具通常无法直接管理本地文件。 …… 这些功能点都是在经验中总结出来的,很少有哪一篇使用指南中,特意指出这些共性的功能。但往往正是由于很多初学者不了解这些基础的功能点,从而影响了他们对功能判断。比如寄希望于一款在线工具批量重命名本地文件,显然是不现实的。

      .ctk 很多新手不清楚的反而是那些老手们都说不清楚的常识问题。 真的让一些老手们来去写出来一些常识也很难,要么是没意愿,要么是没能力。真正害怕的其实是那些没能力的人,那些伪老手

    1. 这本杂志诞生于 2016 年,主创罗德里克·斯坦利 (Rod Stanley) 和理查德·特里 (Richard Turley) 分别从业界的著名杂志 Dazed & Confused 和《彭博商业周刊》“出走”,做出了这本主流之外的杂志。

      他们两个都谈及年轻时经历过的 90 年代,共同回忆起了激进的摄影师马修·史密斯 (Matthew Smith) 的作品——他从 1980 年代开始拍下了 5 万张集会、狂欢和抗议时的年轻人的照片。“他作品里的色彩、面庞和能量让人记忆犹新”、“他点明了‘年轻人就是要选择以反抗的方式生存’这件事”。而现在的这本杂志能让他们听到那个时代模糊的回响。

      是什么回响?

      “今天的很多事情让人觉得更虚无、暴力和不可预知;气候变化的幽灵让我感觉到小时候对核毁灭的恐惧”,特里说。2016 年特朗普当选美国总统让他觉得是时候重回反叛者身份了——他参加了各式的集会和抗议,最终决定在网页上写下他们的看法、记录抗议者的故事,并在 2017 年 4 月开始印刷纸质版的杂志。

      整个杂志的配色简单,有黑、白、灰色和一个显眼的亮色(橙、玫红),正文中需要突出的部分就用亮色整片标记,有些用马克笔手写的效果、还有些像墙壁上的涂鸦喷漆。黑色的刊头标题引出放射性的亮色线条,又连接到文章的标题上去,起到引导的作用。每期最夺人眼球的照片在版面中央占据五分之三的面积。

    1. 一个典型的极简主义方法论是 Project 333,意即 3 个月内保持 33 件衣物单品,包含所有的内衣、外套和配饰,并且能够满足工作、娱乐、 生活的需要。在 3 个月周期中衣柜中不会有其他东西。

  3. Jul 2021
  4. www.alexschweder.com www.alexschweder.com
    1. 2014年,他们带来了“社会关系建筑”系列的另一件作品“In Orbit”,这次,两个人把居住空间搬到了一个仿佛仓鼠跑轮的巨型轮状结构里。轮状轨道内侧附有6个生活站点,包括床、桌椅和柜子等等,轮子外部也有对应的设置,其中一个人住在轮子的顶部,另一个人则住在轮子里面,想完成日常生活,两个人就必须保持密切的配合和协助,以此类推,持续10天。

  5. www.alexschweder.com www.alexschweder.com
    1. “ReActor”的本体是一个微型长廊式建筑,长15米,依靠高5米的混凝土立柱保持稳定。当风吹过时,它会像风向标一样旋转,一旦居住者在里面走动,它就会开始倾斜。

      这间酷似长方形盒子的“小屋”,建在纽约城里的Art Omi艺术中心里的一座小山上,在表演的过程中,两位艺术家会时不时跟经过的游客聊聊它是如何建造的,以及做这件作品的意义。他俩说,这些对话在他们之前的作品的讨论中也经常出现,但在那次,有一个问题发生了变化:大家的疑惑从“你们怎么可能住在那里?”变成了“我们什么时候也能搬进去?”

  6. www.alexschweder.com www.alexschweder.com
    1. 2009年,Schweder和Shelley又基于二人之前探索的共居模式创作了另一个表演“Stability”,这也是他们的系列创作“社会关系建筑”(social relationship architecture)的第一件作品。

      顾名思义,“Stability”是一个可活动的结构,它可以像跷跷板一样移动。在无人居住时它是水平静止的,但当居住在其中的人们四处活动时,它的平衡也会被随之打破,很像我们生活中会看到的跷跷板。

      看起来是一个超高难度的生活实验,但是Schweder和Shelley竟然一起在这里生活了一周。为了处于一个相对稳定环境中,他们必须协调彼此的动作,而这又会影响到他们自己在其中的日常生活

    1. 我瞬间联想到自己最近写“事不过三”的状态——我感受到了一种阻碍感。这种阻碍感来自于,我对“坚持”这件事产生了怀疑,无论是内容方面,还是动力方面。

      我也有这样的难处,其实很难通过写作赚钱。

    1. A product is transformed from non-software to (entirely or mainly) software. Music compact discs become MP3’s and then streams. An alarm clock goes from a physical device on your bedside table to an app on your phone. A car goes from bent metal and glass, to software wrapped in bent metal and glass.The producers of these products are transformed from manufacturing or media or financial services companies to (entirely or mainly) software companies. Their core capability becomes creating and running software. This is, of course, a very different discipline and culture from what they used to do.As software redefines the product, and assuming a competitive market not protected by a monopoly position or regulatory capture, the nature of competition in the industry changes until the best software wins, which means the best software company wins. The best software company may be an incumbent or a startup, whoever makes the best software.
      1. 产品从非软件(彻底或击败)转变成软件。音乐光盘变成了 MP3,然后是流媒体。闹钟从摆在床头柜的实体装置变成了手机上的app。汽车从弯曲的金属件和玻璃变成了包裹在弯曲金属件和玻璃里面的软件。
      2. 这些产品的制造商从制造或媒体或金融服务公司(彻底或基本)变成了软件公司。它们的核心能力变成了开发和运行软件。当然,这是一种跟他们过去所做截然不同的学科和文化。
      3. 随着软件重新定义了产品,并假设竞争市场不受垄断地位或规制俘获的保护,行业竞争的性质会发生变化,直到最好的软件胜出,而这意味着最好的软件公司将获胜。最好的软件公司有可能是既有企业,也可能是初创公司,谁开发出最好的软件就是谁。
    1. 简单来说,SHEIN 是一个线上快时尚电商,在全球 220 个国家与地区售卖新潮服饰,除了把握住了当下潮流,更让人吃惊的是它的上新速度。以快时尚行业设计、打版、生产、上架的周期来看,主打长销基础款的优衣库是半年,主打流行款的 Zara 最快是 14 天,而 SHEIN 压缩到了 7 天。Zara 每年上新一万两千件,而 SHEIN 一周就可以到这个量。

    1. 还有些书,在当下就是看不进去,那就尊重内心真实的想法,先缓一缓,相信一定会有更合适的契机重新捡起来。 这样一来,在看书这件事上,心态就放松很多。而人在松弛状态下,做事情往往游刃有余,这也是为什么很多人的洗澡时刻往往是灵感爆发时刻。

      不设定目标的跑步,往往更加轻松。因为心态松弛。

      不过洗澡时灵感爆发主要是因为不用看手机,所以大脑有时间“随机漫步”。

    1. 美国马萨诸塞州塞勒姆小镇皮博迪埃塞克斯博物馆(Peabody Essex Museum)数字资源开放获取,藏品130余万件,包括大量中国清代外销工艺品。值得一提的是,还有一座耗资1亿美金完全从中国整体搬运过来的徽州古宅荫余堂。

    Tags

    Annotators

    URL

    1. 经过疫情的洗礼,未来的办公模式会是什么样?重返办公室?远程和办公室混合?还是完全远程?在过去的一年多里所有人都在争论这件事,而 Steven Sinofsky 给出了一个新的思考方式:疫情给大家了一个重新思考「完成工作的基本结构是什么」的机会,过去的大规模创新都不是单一因素的变化,而是对于所有影响因素的大规模重新思考。他认为办公模式是一个表现,真正值得思考的是公司的组织形式,组织形式的变化会带来新的寻求,办公室只是其中之一,「公司」是一个二战后的落后概念,而只有诞生于互联网和疫情时代之下的管理者可以带来新的变革,就像走下战场的士兵才知道我们需要什么样的军队一样。

    1. 重复的另一个好处还在于,让厌恶的事情不那么厌恶,让困难的事情不那么困难。如果你确定一件事情是好的习惯,就坚持把它培养成习惯

      将一件需要重复的事项养成习惯后,这件事情自己到底厌恶不厌恶、困难不困难都不重要了,反正自己会坚持去做了

  7. Jun 2021
    1. 第二部:将 CR 分组400 多个 CR 被记录下来并分成 3 组:- 低风险:比如换电脑之类的标准变革,这些被提前批准。- 中风险:由 CR 的提交人来负责并跟其它系统负责人沟通。运维只负责排期。这样下来运维团队只需要担心高风险项目。同时主人公将所有 change 时间表贴在墙上。当其他人发现凤凰项目即将在周五部署的时候,所有计划在周五部署的人都改变了主意,将时间提前或推迟,以避免和凤凰项目的冲突

      这个可以借鉴。 核心的不可调的时间是能够确定的,比如上线时间,调车时间,首件时间 短期可调的也都会有范围,比如到货时间,试车线时间等等。让运维关注真正关注的事情,大版本的顺利部署是核心中的核心

    2. 目标就是确保流水线上的上级环节向下级环节交付的 “产品” 质量越来越高,也越来越 "运维友好",我们的运维流水线可以一直畅快的朝着一个方向前进,而不必再回退至上一个环节甚至 N 个环节。

      imp. quiz. devops感觉还是为了整体软件产品价值生产前提下的开发运维一体化的方法论而已。 如果不涉及到开发呢?难道说是运维需要适配大多数行业产品的开发思路,做plm的最后一个环节,并能够逐步影响新产品设计开展反向循环,这就是核心思路了?不管可不可达,至少对于主机厂来讲这就是妄想,对于部件商倒是可行,但是要做到多种产品适配感觉难如登天诶? 规模化的和标准化的肯定是有问题的,但是背后如果是方法论打底,通过小型项目组做单件单场景的个性化精益转型又显不出来规模效应。所以运维服务化有前途么?商业价值如何显现呢?规模效应和马太效应哪里来呢?

    1. 外卖改变餐饮行业这件事,在各个国家都在发生。这篇文章写的是美国——当一家实体餐厅转到线上的时候,大家一般都会对菜单做一些更新,而其中的一个非常流行的做法,是在菜单里面加上鸡翅,因为它原料简单,制作方便,并且可以包装成各种不同的味道。2020年4月到2021年2月之间,美国餐厅的消费量减少了11%,但是鸡翅的销量增加了10%,好多城市鸡翅涨价,有可能要面临“鸡翅荒”了…… 和中国类似,美国也出现了很多“幽灵厨房”。它们并没有实体的店面,只有一间厨房。为了得到外卖平台算法的推荐,大家普遍会换着名字多申请一些虚拟店铺,比如姥姥家鸡翅店、舅舅家鸡翅店、三姨家鸡翅店,最后都是同一个地方制作的鸡翅。有了这种“餐厅矩阵”之后,还可以向外卖平台争取更好的条款。

    1. 这种策略我用了一辈子。 当年为了进新东方教书,要考 TOEFL 和 GRE,要背 20000 多个单词 —— 一听就是苦差事。刚开始我也觉得:“这哪儿是人干的事儿啊?!” 然后,我花了一个下午的时间琢磨:能不能给背单词这件事赋予一个重大的意义呢?很快我就想到了一个。考过 TOEFL 和 GRE,拿到高分,在新东方教书,据说年薪百万 —— 相当于一个单词 50 元,爽啊!我本来计划在开始阶段每天背 50 个单词,适应一段时间再加量,但在想到这一层时,我马上改变了主意 ——

  8. May 2021
    1. 一、拆书帮读书法很容易对知识理解不完整、或者天真地解释,盲目引申到经验,可能酿成大错

      缺乏批判性思维的看书就是这个感觉咯? 是牵强附会还是批判性思维的问题书中也提过。

      这些都是在本身缺乏系统假设的点上出发的,但是本身这本书就没有在讲道,只是在说学习之术。通过几个标签和定位,能够快速让看书这件事件本身产生价值。

      快是核心,产不产生价值这是其他人要考虑的问题了,茧房效应不是读书能解决的。感觉好多评论都夸大问题,过于批判了。

    1. Google Arts & Culture推出「Scan the World」计划,将全球超过1.8万件艺术品,扫描后上传到协作平台My Mini Factory,供大家下载打印。

      只要有3D打印机,就能将自己喜欢的艺术品打印成迷你版尺寸。目前已经扫描的作品,从埃及鱼造型陶器、刻有铭文的古代石碑、埃及法老半身像,到大卫像、沉思者等。

    1. Kubo是来自丹麦的无屏编程套件,主创团队来自乐高教育。它的编程卡片,完全从计算机编程的核心知识出发,程序、子程序、嵌套、循环等等知识都可以用编程卡片来拼接。和代码编程的语法知识衔接紧密。

      教学解决方案简单直接,而且根据场景主题可以自由的设计创意地图。它是无屏幕的,并且附上了大量精美的教案和任务卡,以及一些有趣的教程和入门指南。

      Kubo不依靠其他配件进行指令传输,而是将基于编程指令的卡片拼接在一起,进而创建指令和代码,由“机器人”去读取卡片程序,然后在场景地图上执行程序。在这样的设计下,孩子们通过拼图就可以创建一系列代码,在无形中锻炼自己的编程和计算思维。

    1. Cubetto是一个木制机器人,它可以通过冒险和动手游戏的方式,教给孩子们计算机编程的基础知识。与之配合的套件有编码块、控制板、地图等。其中,编码块代表你可以触摸和操作的编程语言,控制板是执行程序的开关,地图是可以辅助你的挑战工具。

      要制作高尔夫球场,首先需要将毛毡切成有趣的形状,并将它粘成一块波浪长条。随后在毛毡的一端,切一个比球稍大的孔,作为球的进洞之处。如果想增加一点难度,我们还可以在毛毡长条上设计一些障碍物。

      准备工作都完成之后,我们可以将Cubetto放在毛毡的另一端。利用Cubetto上的控制板,我们可以控制“球杆”向左或向右移动,想办法将球击打进洞。期间,孩子们可以通过对编码块的调整与设计,让球的路线发生变化,增加该项目的趣味性。

      Cubetto还可以被用来设计圣诞节面具、万圣节服装等一系列创意作品。它最大的特点是,可以在没有屏幕的情况下进行编码教学,提高学生参与度。它的主要作用在于帮助儿童进行协作游戏,锻炼他们的创造性思维。而且使用它的门槛也很低,零编程基础的孩子也可以很快上手。

    1. Obsidian 在 2020 年下释出 v0.9.8 版本(该版本增加了官方支持的第三方插件市场)同时 Notion 出现了北墙风波后,我开始在 Obsidian 上投入时间精力(趁着它还比较简单的时候入手,及时适应以后更新带来的笔记方法上的变化)。

      两个信息

      • 墙代表工况,工况变化,工具也得变
      • 第三方插件市场,带来的是自定义和自由配置的权利和可能。小到css插件关系到外观和体验,大到api接口和脚本的可配置。开放带来的是可能性,可能性等于可选择性
    1. Tag1 公布了采访 Linus Torvalds 的第二部分:开源开发和在美国的生活。

      Torvalds 说他是一个死心眼的人,与其他开源项目没什么互动,这是他在 30 年后仍然在维护内核的一个原因。Linux 以及 Git 的成功部分可能是幸运部分可能是时机合适,也就是在“在正确的时间正确的地点”做正确的事情。他说,维护一个庞大项目需要大量的工作,长时间维护一个项目并不好玩,但非常有意思,极具挑战性。不是每个人都想做这样的事情。 维护一个大开源项目的另一件重要事情是公开,你不能靠一个内部圈子秘密讨论后公开结果,你需要把一切都敞开。Linux 能够成功的另一个原因就是他并没有庞大计划,没有事情将会如何走向的高度期望,这让很多开发者很容易能参与进来,因为他对 Linux 怎么走是持开放立场的。开放的一个重要方面是诚实,你不想在背后玩政治,你可以不喜欢你合作的每一个人,他们也不需要喜欢你。最重要的事情是你们能信任彼此。信任真的非常重要。Torvalds 说沟通技能真的非常关键,他生活在记者家庭,父母是记者,祖辈还有一位是诗人,英语是他的第三语言,沟通对他而言不是难事,但对其他人来说因为个性或语言障碍沟通可能会成为一大问题。 很多人在做同一件事情很长时间之后会感到筋疲力尽或 burn out,Torvalds 也不例外,他感到受不了之后会抽身去读读书,以及度假潜水。他通常一年会去潜水数次(去年因疫情没去),而潜水的地方通常是没有网络的,他会中断外界沟通大约一周,然后精神抖擞的回来工作。 Torvalds 说他对 Linux 的未来没有任何长远计划,他不知道五年后的 Linux 会怎么样,更不知道三十年后怎么样,他最多知道几个月后会怎样。作为一名工程师,他对细节看得比什么都重要。细节真的是最重要的事情,如果你搞定了细节,那么一切就顺理成章。Torvalds 称,他有一个很自觉的观念是不为一家 Linux 公司工作,不是因为他认为商业兴趣是错误的,而是因为他希望被视为一个中立方,不被看作是一个竞争对手。他认为部分开源项目因为过于反商业化而搬起石头砸自己的脚。 Torvalds 一家是在 1997 年移居美国的,当时诺基亚是最大的手机制造商也是芬兰最大的公司,他对手机(还没有变成微型电脑的手机,只能打打电话)没什么兴趣,而美国有很多更令他感兴趣的地方,因此和妻子以及十个月大的女儿一同去了美国。美国现在是他的家,他也有点怀念芬兰一些好的地方。比如美国的教育系统是灾难,上好的学校需要搬到好的学区,上好的大学需要支付大量金钱,医保系统也是灾难,政治气候从略微奇怪变成非常可怕。但美国一个好的地方是气候比芬兰好多了。Torvalds 称美国的政治系统让他感到担忧,美国例外论和民族主义可悲又可怕,人们经常对一无所知的事情胡说八道。一位医生说美国的医保系统是全世界最好的,他从未生活在其他国家,他也是特朗普支持者。民族主义在全世界都存在,但美国的版本有点毒性。他居住的地方偏自由派,看不到多少特朗普或邦联旗帜。Torvalds 说他家里有两狗一猫。

    1. If you want to change how a system works, and move the system into a new steady state that’s closer to your goal, sequential effort won’t do much. What you need is parallel effort: you need several different things to happen, all at the same time, for the system to actually move in the direction that you want and stay there. 

      如果你想改变一个系统的工作方式,并使系统进入一个新的稳定状态,更接近你的目标,串行的努力不会有什么作用。你需要的是并行的努力:你需要几件不同的事情同时发生,让系统真正朝着你想要的方向发展并保持在那里。

    1. 线上电影史博物馆,网站总共也只有 1027 个页面,但对电影产业的上半辈子有着非常全面的记录。这里存了不少老电影胶片扫描件,你可以看到 1930 年好莱坞的电影海报,如何为电影胶片添加声音轨道,从 8mm 到 70mm IMAX 之间电影构图都经历了什么,好莱坞又是如何绞尽脑汁利用构图和画幅与电视机分庭抗礼的。

      「Development of Color Cinematography」栏目中,你可以找到电影史上几乎所有胶片上色技术,甚至还有原理解析,比我写的视频稿简洁明了多了。「鲜为人知的色彩处理」一部分,还记录了 20 种应用在早期电影中应用过,却未被推广的技术手段。

  9. Apr 2021
    1. Michael Heizer, 'City', (1970-ongoing)

      大地艺术先锋艺术家Michael Heizer从1970年就开始在内华达沙漠上创造的一座无人的城市,它孤独和神秘,因为在气候恶劣的沙漠深处,很少有人能到达。沟壑与丰碑穿插,像极了雕塑的建筑,从任何角度也无法轻易看到他的全貌。

      这件作品至今还在建筑,这几乎是世界上最庞大的艺术品之一,横跨1.25英里的土地。灵感来源于世界历史中那些建筑奇观,建筑和雕塑,艺术与自然,在这片沙漠上以一种神圣且浩瀚的方式化为了一体。

    1. 《西方旗帜》(Western Flag)描述了1901年、德克萨斯州“世界上第一个主要石油发现地”的遗迹,如今荒无人烟。这件视频作品,来自艺术家约翰·杰拉德(John Gerrard)。旗帜实际上是几条稀疏的黑烟流,在沙漠的风中像旗帜一样挥舞。黑烟流象征着导致全球变暖的一氧化碳。

    1. Kahoot!做的事听起来很简单,概括为一句话:帮助用户在其平台上创建测验和学习游戏,但要想把这件事情做成一门生意,还要认真打磨细节。Kahoot!能传授的经验只有“简单易用”和“个性化”这两个词。

    Tags

    Annotators

    URL

    1. 2014年,巴西艺术家 Cildo Meireles 在米兰举办了自己的个人回顾展。在展览的最后,有一片面积约三百多平方米的微型“海洋”——作品的名字就叫做“海(Marulho)”。

      踏上这片海域上方的栈道,你就会发现,这个蓝色的世界,其实是由17000本印有海面图案的小册子拼凑而成的海。栈道则跟真实的海景一样由木头制成,便于观众近距离欣赏。除此之外,房间里的录音则以各种各样的声音、用不同的语言重复着“水”这个词。

      作为一个以观点强烈的大型互动艺术出名的艺术家,Meireles 在这件装置中所表露出的情感和态度,却相对温和与模糊:身处其中的人们仿佛隔绝了喧嚣,只需要静静体验沉浸于纸张之海当中的感觉。

      这件特殊的展品,被艺术家本人刻意放置在了观展线路的结尾,或许这也是他多年以来的终极创作意图:并不是单纯地展示冲突,而是追求融合和多元。

    1. 2008年,英国艺术家 Roger Hiorns用另一种特殊材料颠覆了人们的想象:他在一个废弃了的房间里,注入了75000升硫酸铜溶液,创造了一个由蓝色晶体组成的海洋。

      这件名为“覆没(Seizure)”的作品,通过对建筑注入这种带有一定腐蚀性的材料,希望鼓励一种“与现代实用主义截然相反的、异类的、非理性”的美学。艺术家表示,他更喜欢这样的“失控”。

      晶体结成后,Hiorns选择了开放这件艺术品,允许人们直接步入其中参观,并不介意来往的游客对自己作品的损伤。他说,“如果一件作品足够‘独立’,不需要依赖任何其他的事物,那么它就是成功的,它们会以自己的方式存在。”

    1. 如果走到这件装置的背面,你会发现,汹涌的“海面”之下其实还卧着一条安睡的小狗。这只狗的出处,其实是德国文艺复兴时期的画家杜勒的作品“忧郁症(Melancholia)”。为了致敬这幅画,Rothschild 还在装置背面的墙上将画作展现了出来。

      这件海洋装置的精妙之处在于,每一个细节都值得推敲:海浪的褶皱仿佛可以流动,悬挂织物的细线发出闪闪微光,海浪下安睡的小狗栩栩如生,悬挂带来的倾斜感,似乎真的让人可以看到不平静的水面。

    1. 也就是说,唐彬森是非常严肃认真的投身于做饮料这件事,其实是懂这个行业的。

      元气森林的老板在创办元气森林之间就投资了许多类似的消费品企业,对消费品行业是有所了解的。

    1. tagLyst V4 新架构对于专业用户来说,最大的一个作用在于:为将来提供了更广泛的插件空间。 例如:一些用户拥有某领域的专用格式的文件(例如:CAD 绘图文件),这些文件并非所有的用户都会需要。通过插件,可以很好的提供针对性的预览或检索,甚至是某个行业的「一键自动化」操作。

      这个思路是对的,尤其是针对小企业。

      不可能做到100%都针对优化,而是选择性的

      而且选择了一个最适配的架构,能够保证可拓展性,而非一上来就带着封闭的原罪

    1. Nils-Udo于1938年出生于巴伐利亚的一个乡村,当六十年代他从巴黎返回家乡,看到当地自然环境所遭受的破坏后,他便停止了自己在工作室里的常规创作,转而进入林间,开始用自然材料进行艺术表达。

      在这个阶段的早期,艺术家的创作以树木种植为主要方向。但与传统的“种树”不一样的是,他经常将树木刻意以圆形或三角形等规则的几何样式呈现,仿佛在借大自然之手完成一件件有趣的恶作剧。

  10. Mar 2021
    1. 法国巴黎卢浮宫将其 48.2 万件收藏品数字化后发布到网上,供任何人免费浏览。馆长 Jean-Luc Martinez 表示他们已经为此准备了好多年,其目的旨在服务于公众和研究人员,可访问性是其使命的核心。在线数据库不仅包括公开展示的收藏品,还包括保存的收藏。

    1. 阿基.查维伦(Aki.Jarvinen)在《Computer games: Text, narrative and play》中把游戏的元素分为五大类。第一个是组件(Components),构建游戏中武器、人物、象征物等实体。第二个是步骤(Procedures),涉及到发布的任务以及玩家的目的和具体实现方式,决定战斗或建造等等一个个具体的行为。第三个是主题(Themes),是游戏中具有唯一性,承担语义宇宙的功能,主宰游戏文本的布局以及内容。第四种是界面(Interface),常以面板、UI 的形式存在,也包括游戏中常见的物品栏、玩家的血量、魔法值等概念。第五种则是算法(Algorithm),隐藏在画面后,但支配游戏世界的底层逻辑。这种独特的讲述技艺,需要设计师利用游玩的方式,同时利用大量传统的视听手段,去为玩家创造一种可进入并且临场化(Engaging)的体验。

    1. Duckietown是一个自动驾驶的研究和教育平台,由日本的丰田汽车赞助。从2016年开始,Duckietown在麻省理工学院开课,之后逐渐演变成一项全球计划,旨在实现AI和机器人教育。2018年之后,该项目由非营利性组织Duckietown基金会负责协调。

      Duckietown平台分为两部分,分别是Duckie Bots和Duckie Towns。前者是低成本的自动机器人,几乎完全由现成的零件制成;后者则是对城市环境的模拟,其中有用运动垫子和胶带制成的道路,以及机器人用作四处导航的标牌。通过添加交通信号灯和城楼,Duckietown可以转变为智慧城市。

      由于Duckietown的侧重点是以机器人为基础的自动驾驶,所以其中包含的教学资源大多都与城市交通、汽车行驶有关的。我们先从平台提供的硬件包说起。

      城市拓展包

      这套硬件包里,都是Duckietown的基本构建模块,用它们可以搭建出适合自动驾驶行为的城市交通道路。其中,包含9个黑色泡沫道路的互锁瓷砖,还有符合Duckietown标准的胶垫边框区域,用来放置交通标志。

      此外,拓展包中还有可以DIY的磁铁,能让使用者自主设置汽车行驶的直线和曲线道路。通过这些硬件,我们可以将组装好的路段锁定为不同的配置,从而获取不同的城市地形。不仅如此,使用这套工具,还能够在数分钟之内组装和拆卸搭建好的城镇。

      与之类似的还有“红绿灯城市包”,这套硬件也是用来扩展城市的基础设施的。除了提供现实交通信号的闪光灯,它还具有与Duckiebot相同的感测、内存和计算功能,因此我们完全可以用它来编程。

      在组装红绿灯的过程中,我们不仅能感受到亲手设计的乐趣,还可以了解Duckiebots提供的许多硬件组件,它们可以相互之间交替使用。还有红绿灯的切换设计,更是需要运用基础的编程知识。

      人工智能驾驶奥运工具包(AI-DO)

      Duckietown基金会每年都会在ICRA(国际机器人与自动化会议)上举办两次AI-DO,即“AI驾驶奥运会”。

      这套硬件包的工具就是配合这个竞赛的。它们基本都可以与Duckietown里的机器人相结合,解决车辆在交叉路口行驶时可能会遭遇的一些问题。

      一般来说,DuckieBots的机器人都是带有编码器的。例如其中一款名为“DB19”的机器人,就带有嵌入式车轮编码器的电机,以及一个新的电机支架。此外还有许多必备的零件和备件,用于构建、校准、初始化和操作DuckieBot。

      而这个“人工智能驾驶奥运工具包”,则可以根据机器人技术和AI的互动,来衡量智能车的具体性能。它包含几个解决实际问题的任务,分别是LF(车道跟踪)、LFV(车辆的行车跟踪)和交叉路口的行车跟踪(LFV-1)。在Duckietown模拟器中,我们可以思考相应的解决方案,将之实践于智能车的行驶。

      这些任务需要使用到2个机器人(DuckieBots),和一个城市导航包。要注意的是,完成这些任务不是一蹴而就的,需要我们反复地测试和优化。

      这个只有5岁的小黄鸭,居然开发了这么多有趣的人工智能项目!

    1. Duckietown是一个自动驾驶的研究和教育平台,由日本的丰田汽车赞助。从2016年开始,Duckietown在麻省理工学院开课,之后逐渐演变成一项全球计划,旨在实现AI和机器人教育。2018年之后,该项目由非营利性组织Duckietown基金会负责协调。

      Duckietown平台分为两部分,分别是Duckie Bots和Duckie Towns。前者是低成本的自动机器人,几乎完全由现成的零件制成;后者则是对城市环境的模拟,其中有用运动垫子和胶带制成的道路,以及机器人用作四处导航的标牌。通过添加交通信号灯和城楼,Duckietown可以转变为智慧城市。

      由于Duckietown的侧重点是以机器人为基础的自动驾驶,所以其中包含的教学资源大多都与城市交通、汽车行驶有关的。我们先从平台提供的硬件包说起。

      城市拓展包

      这套硬件包里,都是Duckietown的基本构建模块,用它们可以搭建出适合自动驾驶行为的城市交通道路。其中,包含9个黑色泡沫道路的互锁瓷砖,还有符合Duckietown标准的胶垫边框区域,用来放置交通标志。

      此外,拓展包中还有可以DIY的磁铁,能让使用者自主设置汽车行驶的直线和曲线道路。通过这些硬件,我们可以将组装好的路段锁定为不同的配置,从而获取不同的城市地形。不仅如此,使用这套工具,还能够在数分钟之内组装和拆卸搭建好的城镇。

      与之类似的还有“红绿灯城市包”,这套硬件也是用来扩展城市的基础设施的。除了提供现实交通信号的闪光灯,它还具有与Duckiebot相同的感测、内存和计算功能,因此我们完全可以用它来编程。

      在组装红绿灯的过程中,我们不仅能感受到亲手设计的乐趣,还可以了解Duckiebots提供的许多硬件组件,它们可以相互之间交替使用。还有红绿灯的切换设计,更是需要运用基础的编程知识。

      人工智能驾驶奥运工具包(AI-DO)

      Duckietown基金会每年都会在ICRA(国际机器人与自动化会议)上举办两次AI-DO,即“AI驾驶奥运会”。

      这套硬件包的工具就是配合这个竞赛的。它们基本都可以与Duckietown里的机器人相结合,解决车辆在交叉路口行驶时可能会遭遇的一些问题。

      一般来说,DuckieBots的机器人都是带有编码器的。例如其中一款名为“DB19”的机器人,就带有嵌入式车轮编码器的电机,以及一个新的电机支架。此外还有许多必备的零件和备件,用于构建、校准、初始化和操作DuckieBot。

      而这个“人工智能驾驶奥运工具包”,则可以根据机器人技术和AI的互动,来衡量智能车的具体性能。它包含几个解决实际问题的任务,分别是LF(车道跟踪)、LFV(车辆的行车跟踪)和交叉路口的行车跟踪(LFV-1)。在Duckietown模拟器中,我们可以思考相应的解决方案,将之实践于智能车的行驶。

      这些任务需要使用到2个机器人(DuckieBots),和一个城市导航包。要注意的是,完成这些任务不是一蹴而就的,需要我们反复地测试和优化。

      这个只有5岁的小黄鸭,居然开发了这么多有趣的人工智能项目!

    1. 忘掉清空信息收件箱这件事吧,它的边际效应递减非常明显,ROI (投入产出比)不高,做得太多反而并不划算

      收件箱不用清空。清空也可以佛系清空,贴上标签就归档不是不可以

      但是任务应该如何归档呢?道理感觉一样。但是归档有没有意义呢?算了,还是得回头看一下gtd的原理,尤其是有关想干但是不确定时间的任务类型

    1. 美国一位艺术收藏家 Pablo Rodriguez-Fraile 以 660 万美元的价格出售了手上的一件藏品,他去年 10 月购入这件藏品的价格只有 6.7 万美元,也就说不到半年价值就增长了近 100 倍。

      而这件藏品并非什么古玩名画,而是数字艺术家 Beeple 创作的一段视频,时长只有 10 秒,这大概也是史上单位时长价格最高的一个视频作品了。

      这个作品叫做《十字路口》( Crossroad ),视频里一个全身赤裸、有点像特朗普的「巨人」倒在路边的草丛里,身上被涂上各种口号的涂鸦,路过的行人完全无视这个庞然大物。

    1. 初代 Arsenal 已经获得了 10 万件的销售量,二代对单反和无反光镜相机的智能摄影助手进行了重大改进。

      Arsenal 2 采用了最新的传感器,可识别的场景从上一代的 17 种提升至 22 种。轻轻一按,就能让你的相机自动完成最佳参数设置,从而确保了单反相机的最佳的拍摄效果。

      通过神经网络计算,Arsenal 2 还能帮助你完成色彩调校。此外还支持丰富的拍摄功能,包括延时拍摄、全景拍摄、超长时间曝光、自动去除照片中多余的人物和物体等等。

    1. Visualization Toolkit (VTK)是开源自由软件用于3D计算机图形、图像处理和可视化。VTK包括C++类库和多个解释界面层有Tcl/Tk、Java和Python。VTK支持各种可视化算法:标量、矢量、张量、质地和体积的方法;以及高级的建模方法如:隐式建模、多边形网格平滑、还原、切割、仿形和狄洛尼三角剖分。VTK有一个广泛的信息可视化框架,有一套3D交互的小部件,支持并行处理,并在GUI工具包如Qt和Tk上集成了各种数据库。VTK跨平台。VTK也包括辅助支持用于3D交互组件,二维和三维标注,以及并行计算。VTK核心应用了C++工具包,需要用户通过结合各种对象到一个应用中来创建应用。系统也支持自动包装C++核到Python、Java、和Tcl,那么VTK应用也可以用这些语言来写。

      VTK广泛用于商业应用、研究和开发中,也是许多高级可视化应用的基础如:ParaView, VisIt, VisTrails, 3DSlicer, MayaVi, and OsiriX.

    Tags

    Annotators

    URL

    1. 一个来自加州大学伯克利分校的毕业生创客团队(已成立初创公司Dash Robotics)就推出了一款技术门槛不高但别具特色的DIY玩具:Kamigami。

      Kamigami是一款折纸类型的机器人小玩具,造型多变可爱,在引发孩子们的创造性的同时还能随便培养一样下一代创客。

      Kamigami是一个DIY套件,其中包含了激光切割的身体组件、电动机、收发器、电池、microUSB线和一个即插即用的控制板。

    1. 微软的 Windows 操作系统是最流行的个人电脑和服务器的操作系统,自2015年发布 Windows 10 以来,Windows 开启了大一统融合的过程。除了传统的台式机和笔记本,Windows 10 还运行在平板电脑、HoloLens 混合现实设备、Xbox 游戏机和各种嵌入式设备上,为用户提供了通用的应用程序架构和统一的生态环境。本书是关于 Windows 操作系统原理的权威专著,几位作者也是知名的微软技术专家,其中第二作者 Russinovich 先生还是微软 Azure 云计算部门的首席技术官。本书以最新的 Windows 10 和 Windows Server 2016 操作系统为例,详细论述了 Windows 的系统架构和核心组件,内容涵盖进程和作业、线程、内存管理、I/O 系统和安全模型。本书内容全面,讲解深刻,是 Windows 开发人员、系统管理员和操作系统爱好者极有价值的参考读物。

    1. 操作系统是一组实现用户与硬件、平台交互的核心程序,也是整个计算机系统的基石。本书第一作者 Tanenbaum 教授是操作系统领域的杰出专家和教育家,他为教学创造的微内核操作系统 MINIX,不仅启发了 Linux 内核的创作,还被英特尔公司采用作为处理器管理引擎的组件。作为一本操作系统的经典教材,本书的内容却相当“现代”:除了涵盖传统的进程与线程、内存管理、文件系统、I/O 系统、死锁和多处理机,还紧跟时代的发展,论述了近来流行的虚拟化、云平台和安全等方面的知识。此外,本书将理论和实践融为一体,以案例的方式详解了 UNIX、Linux、Android 和 Windows 8 等主流操作系统,帮助读者深刻理解操作系统设计与实现的指导原则。

    1. 本书由美国两院院士 Randal E. Bryant 与 Gordon Bell 奖得主 David R. O'Hallaron 两位大师合著,是计算机系统的最佳入门基础教材。本书第三版基于 x86-64 指令集架构,从程序员的视角深入浅出地将计算机组成原理、体系结构、编译器、操作系统、网络和并发编程等众多领域的知识有机地串联在一起。通过阅读本书,读者可以理解计算机系统各个组件的基本工作原理,为今后的学习、研究和工作打下坚实的基础。

    1. 作为一位曾经两次代表波兰参加威尼斯双年展的艺术家,Monika Sosnowska以她独特的作品风格闻名国际。受到二战后波兰共产主义失败的影响,Monika以往经常将楼梯,房间,走廊等建筑元素以混乱扭曲的破坏后状态呈现。

      2018年,Monika的作品风格开始转变。年初,Monika在豪瑟沃斯画廊呈现的几件作品并没有像以往一样可以一眼看出与停滞的建筑相关,而其中纠缠着的线条,假可乱真的马尾,倒立生长的植物显示Monika向极简主义过度的趋势。

      同年十月在科隆的展览“都市花朵”中,Monika延续了她上一次的极简主义风格,以水泥和金属为原材料,完成了一场以花卉为核心的系列作品展。创作的灵感,来源于Monika在孟加拉国旅行时对当地建筑的观察。她发现在那里,未完成的建筑散落在城市各处,远观是一片光秃秃的水泥,但走近后却会发现,里面却能容纳下当地稠密的人口,混乱且有活力。

      Monika的作品作品的隐喻着那些居住在其中的人,就像于水泥中生长出来丛丛植物。而看到这样一件拥有奇异生长力量的作品,对于我们每个人来说或许都也是一件值得开心的事情:因为它用一种简洁且强烈的对比告诉我们,生活的本质是也许是弯曲而非严整,我们应该做的是继续而非停滞。

    1. 在以男性为主的金属焊接爱好者圈子中,来自美国波特兰的女艺术家Lane Walkup的存在显得别具一格。她的作品也正如她的女性身份一样,充满了俏皮和可爱。

      星星,花朵,小猫,小狗等日常小物,被Lane以细铁丝的方式不拘小节地勾勒出来,远远的看去,就像是一幅孩子画出来的简笔画,让人忘记了以往印象中电焊作品的沉重感。

      Lane从前的主业是一位营养师,但是大学主修食品营养、有一定化学基础的她,一直都很喜欢玩金属焊接。她设计的作品也大多用于家居装饰这样的日常场景,比如壁画,悬挂物,摆饰等,但她也表示,希望自己不要局限于售卖一个单件物品,而是在人们居住的空间内置入一个可以融合整体的概念和想法。

      人的身体、五官、肖像等元素也是Lane经常使用的特殊创作语言,此外,她也会用线条呈现一些简单的家具——在干净的背景下,观者甚至分不出来眼前的景象,究竟是现实中被勾勒出的一幅画,还是图画中的事物变成了现实。

      包包,鞋子,手镯,耳环等装饰女性身体的物品也常常出现在Lane的作品中,它们也同Lane的其他作品一样,看起来既富有童趣,又样式特别。

    1. “别再去迪厅或酒吧了,最酷的方式当然是宅在家,让整个家都陪你一起蹦迪。”——如果要对这件名为House Party(居家派对)的艺术作品标上注脚,那这一定是最恰如其分的说明。

      House Party其实是一件音乐装置。其中的音乐混合了机械声与合成声,既带有怀旧情绪又充满未来质感。在这支关于它的短片中,你会惊讶地发现房间里的所有家具或摆件,落满灰尘的旧皮鞋,摆放整齐的杂志,衣架上勾着的皮衣,台灯的明黄色灯光,玻璃花瓶中的清水,甚至墙上照片中金门大桥的缆绳和桥身,无论是切实存在于现实空间中的,还是寄生于其他载体附件上的,只要是你肉眼可见的物体,都会随着音乐的节奏自由律动。

      不需要任何DJ,你的家就会自然而然变成午夜巅峰时刻的迪厅。在这一空间下,人们几乎不可能保持静止状态。毕竟如果你没有随着这个鼓点一起舞动起来,那只能说明你的感官大概是太不敏锐了。

    1. Disruptive Device(破坏性设备)是三联数码动态艺术作品——这样说起来可能很难懂,让我们换种方式——在这件作品中,人们可以通过操控手柄,来和电子屏幕中的虚拟动物互动。

      比如,当你转动曲柄轮时,屏幕上的手便会来回抚摸被困在这一方空间中的狗,随着转动速度的加快,狗会惊慌地跳开;同样,一对鸡也会因你猛然放下的“拳头”扇动翅膀四处逃窜;而原本安静栖息着的野鸭则会因为手掌的起伏或拨弄而犹豫地松松羽毛,摇晃脖颈,直到愈来愈强烈的干扰让它不得不振开双翅,飞离屏幕。

      当今的人类社会,似乎习惯性地将自然视为一种无限的资源,而对其予取予求,甚至以各种不可持续的方式扰乱生态系统。但艺术家希望通过Disruptive Device这一作品,将人类平日里对自然的干扰行为技术性地放大。这样一来,从这些超现实的镜头中,那群原本仅为娱乐而来的观赏者们也许会开始不自觉地思考,自己到底是在何种程度上扰乱了生态系统与自然秩序。

    1. 在北海道野付半岛的雪原上,一辆小车拉着东信康仁前往无人之境。这里被称为“世界的尽头”,枯萎的松树零散分布着,冬天泼水成冰。

      东信康仁将从世界各地收集来的鲜花插放到一起,搭成一个约 3.5 米高的立体花束。

      将大量的水浇洒在花束上,任水自然下滴。等待夜晚气温降到最低点时,水瞬间凝结成冰。巨大的花束像被嵌套进冰壳里,无数冰柱倾泻而下,时间也仿若静止在这一刻——鲜花盛开,又瞬间被冻结的魔幻时刻。

      这件装置作品《Frozen Flowers》从今年 2 月 11 日到 2 月 15 日展出了 4 天,不同时刻、不同天气呈现的状态都被记录下来。东信康仁在这件作品里试图探索鲜花的未知可能性,观察鲜花在极度严寒的情况下如何表达自己。

    1. 需要对 Expr 数据类型进行适当的修改,以使其具有更加泛化的表达能力

      此处并没有说明白为什么参数化能解决问题,为什么参数化了编译器就能自动完成这件事?

    1. 这篇文章从更宏观的层面解读了这个细分市场存在新机会的原因。

      如文章的标题所言,吃掉大象的方法是选择正确的原子概念。在这个市场中,大象就是 Adobe,这家具有数十年历史的公司一直专注于向创意工作者提供专业工具,产品丰富且不断升级。自 2013 年起,提供 Creative Cloud 的订阅服务,和微软一样,走向 SaaS + Cloud 的模式。

      Kwok 以图像创作工具为例,分析了为什么在 Photoshop + Illustrator 同时存在的市场,还会出现 Figma 和 Canva 的机会。

      选择正确的原子概念,就是通过重新组合产品中的元素来满足用户的新工作流程。Photoshop 的原子概念是像素,Illustrator 的原子概念是矢量图形,而 Canva 则是组件和模版。

  11. Feb 2021
    1. 28、文件管理 QTTabBar 是一款带资源管理器的插件,有了它,系统自带的资源管理器就像重获新生了一样。多标签页浏览功能可以用来管理文件,同时还有快捷预览功能,当鼠标移动到文件或者文件夹上时,会显示文件或者文件夹的预览。 奶酪推荐:QTTabBar 同类软件:Total Commander、Directory Opus、Q-Dir、FreeCommander、Clover

      第一次听这个软件,之前都是tc听的多

    1. TJBot 延续了手工社区的精神,它是一套 DIY 工具包,可让你建立由Waston驱动的可编程纸板机器人。该机器人由一块切割的纸板(可以是3D打印或者激光切割)、Raspberry Pi 和多种插件(包括一个RGB LED灯、一个麦克风、一个伺服电机和一个摄像头)构成。同时,TJ Bot还是一个开源项目,我们可在 Instructables.com 和 GitHub 上查看相关指导。IBM的团队已经提供了三个TJ Bot 启动指导,但他们希望所有人都能贡献出自己的DIY机器人装配指导。

    1. Google 推出开源设计平台 Material.io,为设计师提供丰富的资源、工具和灵感。

      Material.io 将 Material Design 的现有资源进行了集中,并为其打造了全新的视觉识别系统。在这个站点上,从工具到组件都实现了更好的交互,同时更加方便了官方发布新的视觉设计指引。

      Gallery:协作流程的简化

      在 Gallery 中,不同人员的设计工作流程被集中展现,以便团队成员清楚了解工作进度。从视觉设计到交互原型都可以轻松分享并和评论。整个流程简单便捷,同时设计作品得到了精美呈现和安全管理。

      Stage:交互运动的动态呈现

      由 Pixate 团队和 Form 团队共同打造的 Stage 工具将改变团队设计的工作方式,实现操作的实时交互。数字产品的设计的工作流程将变得动态、自主和系统化。

      Remixer:用户界面调试的实时互联

      从调色板到动画时间调整,Remixer 实现了在多种设备上对设计产品进行实时调整和完善。在运行过程中可对 iOS、Android 甚至是在多款设备以及网页界面上进行调整,修改参数。

    1. 动笔之前,我经历了两个非常有趣的阶段,第一阶段——我称之为「自我感动」——有点类似老师常说的「半瓶水响当当」,在我看了 List 上三分之二的书以后,有一种强烈的「顿悟」的感觉,好像之前心里纠结的部分都找到了源头和解决方案,并且迫不及待想要分享给别人。然而在我和一个两个三个朋友去聊所谓的感悟的时候,却又觉得怎么说都说不出我想要表达的东西,并且「越描越黑」,好像是「我依然在纠结并且不停在诉苦这件事」——不因为遣词造句,而是我不断试图把自己带入书中的内容去解释自己行为和心态的合理性,一种迫切的「我知道为什么了也知道该干什么了」自我表达。直到自己看完了整个书单,开始整体回溯并思考既有的事件、彼时的心态和书里的内容,也才进入了第二个阶段——「接纳」。 接纳是不要试图合理化自己的行为,以及不要在觉得自己犯错后迫切的想要解释。接纳就是接受真实的自己,一个优秀的自己,同时也是一个容易犯错的自己。

      从理性的了解情绪自救,到真正的全方位了解情绪自救

      从自我感动到接纳自己

      不管是对于情绪自救还是其他的知识和认知,都是这样一个过程

    1. 以申訴對象區分,中華電信 有548件,占比36.39%為最高;其次為台灣大哥大的279件,占比18.53%;第三為遠傳電信的262件,占比17.4 %;台灣之星則有228件,占比15.14%;最後是亞太電信的189件,占比12.55%。

      comparative

    2. 我用了二十幾年的中華,中華最後一個合約是公教499, 想續約488中華不給續,旁邊一個外電信來的不用証件直接申辦青春488,我已用了那麼久的中華叫我情以何堪!我每個月用量也沒 超過20M,贈送的180分鐘也從沒打過超過3成,中華真的對我這老客戶(0932)太好了!以至於我才有動力NP到其它電信, 並且找到319不限速吃到飽!算算如今中華488吃到飽也不是很划算!用了幾個月遠傳,之前中華訊號不好地方遠傳都很好用,目前 還找不到收訊差的地方!

      eval(irony) 滿多人提到中華對老客戶不友善,對新客戶的合約非常優惠。

    1. SmartWallit 是一个基于蓝牙 4.0 的钱包配件,卡片形状,可以卡在钱包中,通过与手机连接它可以实时提醒用户手机是否被遗忘、是否装在身上:当用户的钱包找不到时,点击手机专用 App,SmartWallit 便会发出响声,同理,找不到手机时,按下 SmartWallit 的唯一按钮,手机便会发出声音。

      SmartWallit 主要的用途在于防丢,它具备双向通讯功能,手机和钱包一旦超出通讯范围(25 米左右),两者都会发出 “滴滴” 的声音提醒用户另一件物品忘记携带。当确定手机安全,用户只需轻拍钱包两次,警报即可消失。

      除此之外,SmartWallit 集成了一个三轴加速度计、光线感应器和距离感应器,当用户打开钱包时,手机会推送一条 “钱包被打开” 的消息,地理位置、时间等相关信息也会自动发送到专用 App 中,帮助用户进行财务管理。

      SmartWallit 由玻璃、不锈钢和 ABS 材料制成,通过不锈钢配件的更换可以用于钥匙、信用卡的防丢器。

    1. Techmeme 是一个科技新闻聚合器,文章主要来自各大新闻站点和博客,跟 Google 一样,它分析新闻的重要程度,给予不同新闻不同的权重。这让实时掌握科技行业最新动态这件事变得更加简单。

    1. Linux系统有句slogan,叫做“everything is a file”,意思是说Linux系统的一切东西都可以当做文件来进行读写。比如说你外接了一个USB设备,这个设备被Linux系统识别后,就会被当做一个文件,你可以对它进行打开、读取、写入等像操作文件一般的操作。但是你我都知道这东西它其实不是一个文件,而是一个USB设备,那么我们对文件写入的话到底写入到哪儿了呢?这就是驱动的作用了,它负责把你写入的东西放到该放的地方,使这个USB设备按你的想法运转。
      1. 驱动程序的作用。
      2. 如果想学习 Linux内核驱动开发,应该买一块Linux系统开 发板,这样比较直观。 3课程: 韦东山 4.会接触到uboot的移植,Linux内核的移植,根文件系统的制作这三件套 5.系统移植好后,就可以进入到驱动的学习。 一般从字符设备驱动学起,例如 LED灯驱动,尝试安装与卸载,然后写复杂点的串口驱动,移植复杂点的,例如网卡驱动,LCD屏的驱动等等.

      接触到了内核,免不了学习内核调试技术(比如 中断子系统、内核休眠与内核定时器,异步通知,内核同步机制等)这里的知识相当复杂,初学者不宜入戏太深,不能急于求成,适合在漫长的岁月里慢慢体会它的巧妙之处。

      做个小项目

      至此 ,arm+Linux就告一段落了,这些学完就可以找到10K以上的嵌入式工程师的工作了。

    1. 神圣时间,很多著名的文学家、思想家、企业家都会设置自己的神圣时间,在这个时间段去写作、健身、冥想。在神圣时间里,要做的这件事「神圣不可侵犯」,任何其他事项,哪怕是工作、回复邮件这种事也不能抢占这个既定时间,严苛的专时专用。

      给最重要的事情,配上最神圣的资源,比如不被打扰的时间,比如精力充沛的时段

      这将是我的居心地,也是我的专属workspace

    2. 连续地自我挣扎,不断地自我否定,持续地自我挫败。这种挫败感往往不是:「我在某件事情上失败了」,更多的时候是:「明明100% 知道该怎么选择,却还在挣扎之后,挑了最差那个。

      不是不知道,而是忍不住。或者说在做决策的时候被感性牵制

  12. aiyprojects.withgoogle.com aiyprojects.withgoogle.com
    1. AIY全称是Artificial Intelligence Yourself,即动手创作你的人工智能。它是一个由Google在2017年启动的项目,目的就是让每个创客(Maker)都可以DIY自己的人工智能产品。

      在该项目的网站上,主要为孩子们提供了视觉套件和语音套件,协助他们去完成简单的智能产品。

    1. Engimake 团队通过多个 3D 打印部件让一块 Arduino QuadBoard、伺服电机、蓝牙模块、电缆和一些线组合成了一个 QuadBot 机器人。

      基于 Arduino 的开源套件,QuadBot 的各种电线都集成在电路板上,不必操心电线互相缠绕,电路板上还安装有电机支架、机载电池充电、智能 RGB LED、5V 和 3.3V 的外部调节传感器等,上手组装起来也是分分钟的事。

      QuadBot 跟很多的开源套件一样,能走路、跳舞、照明、跟随着你、避开障碍物和播放歌曲,但 QuadBot 的零部件都由 3D 打印制作,各个部件均能根据你自己的想法对它进行个性化的改装,使其成为一个与众不同的机器人,比如安装上激光头、炮台、照明灯等等。

      QuadBot 完全开源,图形化的编程能轻易上手操作,有编程基础的玩家也可以根据自己的喜好重新设定它的代码,来完成你想要的动作。

    1. 在商业、八卦杂志横行的华文杂志圈,《小日子》以标榜“在我们的城市展开小日子”成为台湾生活家的书架必备杂志。

      每期精选一件让生活美好的事物,邀请热爱这件事物的“资深生活家”担任客座编辑,如此烹调出来的“小日子”,份足、味美,地道的生活之味。

      “《小日子》堪称台湾现在的文青杂志经典。想当文艺青年必定得拜读,还得拿起 iphone 照一张在咖啡店在看《小日子》的合照。” 这是台湾友人对《小日子》最大的调侃,也是最好的恭维。

    1. Artificial intelligence has already changed the world in some pretty dramatic ways and will certainly do even more so in the future. But it’s a component technology. The transistor has changed the world. But saying, “How are transistors going to change the world?” is almost the wrong layer of abstraction—it’s like trying to understand a river by talking about H20. So artificial intelligence will participate meaningfully in causing technologies to become more intelligent and will shift how we try to deliver value to people. Less and less will technologies need to do what we want them to do through straightforward mechanical and structural solutions and more and more they’ll solve the problems through the increment of intelligence.

      人工智能已经以一些非常引人注目的方式改变了世界,在未来肯定会做的更好。但他是一种组件技术。晶体管已经改变了世界,但是说“晶体管会如何改变世界”几乎是错误的抽象层面,这就好比通过讨论H2O来理解一条河。所以AI将对科技智能化的提升起到重要的作用,同时也会改变我们给人们传递价值的方式。科技将越来越少地直接依靠机械化结构化的解决方式来完成我们交代的任务,而是越来越依靠智能的提升来解决问题。

    1. 用手去触摸,发出不同的声音,借着不同的按压力度,音乐就会有不同的表现,当你去滑动,声音变得有动感。

      Roli Blocks 的使用方法,通过一小块触摸板+一部手机,它为所有喜欢音乐的人打开了新的舞台。

      Roli Blocks 一共包含三个组件,最主要的部分是眼前这个小小的黑色方块,它是一块音乐触摸板,名叫 Lightpad Block,另外两个分别叫 Live Block 和 Loop Block。三者之间都可以通过磁力接口随意吸附组合,而且,如果你买了很多块,也都可以组合起来,就像乐高积木一样。

      Lightpad Block 的作用就是充当「音乐键盘」,它的大小和手掌差不多,尺寸 94×94×20mm,重量只有 250g。打开开关,连上手机后,你会发现上面有不同颜色的 LED 灯在 5×5 的网格中不规则点亮,每一个色块都代表着一个音阶。

      Live Block 是针对现场演奏而设计的功能性模块,除了可以将 Lightpad 切换成 Loop 触发模式,它还拥有两种和弦模式,方便创作更加丰富的旋律片段。

      Roli Blocks 体验:拿着这个小方块,开始你的表演吧

    1. IronBot 是一款面向 8-14 岁孩子的机器人学习套件。

      这个由中国团队研发出来的机器人套件,在众筹网站 indiegogo 上吸引了超过 25 个国家的卖家支持。

      一套组件,从入门到进阶,IronBot 可以拼出 4 个机器人出来,分别是:机械臂、云台、竞走机器人,还有人形机器人。

      IronBot 有意思的地方还在于,它可以让孩子们在手机上进行指令组合,还有图形化编程。

    1. ICT(情報通信産業)の本質はwinner-takes-all(勝者総取り)です。インターネットではGoogleやFacebook、Yahoo!が膨大なアクセスを獲得する一方で、個人が運営する大半のホームページは1日のアクセスが数十件からせいぜい数百件です。

      この位置取りをどうやってやるか?

    1. Koski是英国皇家艺术学院(RCA)毕业生瓦茨拉夫·姆林纳(Václav Mlynář)的毕业作品。

      Koski是一款棋盘游戏,组成部件包括几块类似层层叠(Jenga)的积木和一些与Tiddlywinks游戏中一模一样的塑料弹片。但这些组件包含了两个秘密。首先,它们是有磁性的,所以积木块可以叠起来,也可以像树木一样分支出去,塑料片则可以贴到任何表面上作为装饰;其次,这些塑料片由iPad追踪,后者可利用增强现实为场景添加一个小蓝人和诸多障碍,比如树木和瀑布等等。

    1. 这是一篇关于新闻报道的故事。马特•斯托佩拉(Matt Stopera)的原创帖子发表在BuzzFeed网站上,标题非常醒目,描述了这个四部分组成的帖子中发生的所有事情:“这个男人是谁,他的照片为什么出现在我的手机上?”副标题是“发生在我身上的这件奇怪事情”,本文在网络上迅速走红,完美诠释了BuzzFeed的模式。这个帖子综合了手机自拍照片、动图、Twitter快照、列表和部分文字,大多都是只有一句话的段落。(“巴厘岛!”“我要去中国。”)作文老师永远也不会理解本文的写作形式,但是其中充满了惊奇和欢乐,我读过的大部分报道都缺少这种特质。帖子讲述了一个中国男人的故事(更多是以橘子哥的外号知名),他不经意买到了斯托佩拉在纽约下东区失窃的手机,在他们的手机照片流交错时发生了怪事,然后整个互联网也加入了进来。

      不过,这是个巧妙的推荐,因为我基本上是在承认,我完全享受阅读斯托佩拉的文章,本文具有冰雪皇后(DQ)冰风暴冰淇淋的所有优点,品味起来美妙无穷,我实际上可没说我对此很嫉妒。我要说的是,我很羡慕克里斯•比姆(Chris Beam),他用敏感内敛、颇有人情味的笔调撰写了这篇报道。比姆是位了不起的作家,他去采访了斯托佩拉文章的主角橘子哥,发现了性格更复杂的主人公,生活在更复杂的环境中。但是比姆也没有达到预期的目的。我们并不知道,马特•斯托佩拉无所顾忌地利用了橘子哥或其他类似的事情。如果配合每篇帖子、文章、推文或其他新闻来看,这篇略显奇怪而完全真实的报道就会变得更有趣。——布莱恩特•乌尔施塔特(Bryant Urstadt)

    1. This is a story about a story. The original, by Matt Stopera, appeared on BuzzFeed, and its title describes, and evokes, all of what followed in a four-part meme gone wild: “Who Is This Man And Why Are His Photos Showing Up On My Phone?” Its subtitle, “This weird thing happened to me,” is the perfect distillation of the BuzzFeed mode. The story is an agglomeration of homemade phone photos, GIFs, Twitter snapshots, listicles, and some writing, too, much of it in one-sentence paragraphs. (“Bali!” “So I go to China.”) It has no form any writing teacher would ever understand, but it’s filled with the wonder and joy that’s missing from most everything else I read. It is the story of a man in China (he’s mostly known as Orange Man, or Orange Brother) who unwittingly acquired a phone that Stopera had lost on the Lower East Side in New York, and what happened when their photo streams crossed, and then the Internet got involved.But this is a crafty recommendation, because, while I am essentially admitting that I totally enjoyed Stopera’s story, which had all the style of a DQ Blizzard, and was just as tasty, I am not actually technically saying I am jealous of it. I am saying I am jealous of Chris Beam’s sensitive, restrained, human take on his story, which probably way fewer people read. Beam, who is a terrific writer, went to visit Orange Man, the subject of Stopera’s piece, and found a much more complicated person, in a much more complicated situation. But Beam doesn’t arrive at the expected place either. We don’t learn that Matt Stopera cynically used Orange Man or anything like that. It’s just an odd, totally real story that gets more interesting with every post, or article, or tweet, or whatever. —Bryant Urstadt

      这是一篇关于新闻报道的故事。马特•斯托佩拉(Matt Stopera)的原创帖子发表在BuzzFeed网站上,标题非常醒目,描述了这个四部分组成的帖子中发生的所有事情:“这个男人是谁,他的照片为什么出现在我的手机上?”副标题是“发生在我身上的这件奇怪事情”,本文在网络上迅速走红,完美诠释了BuzzFeed的模式。这个帖子综合了手机自拍照片、动图、Twitter快照、列表和部分文字,大多都是只有一句话的段落。(“巴厘岛!”“我要去中国。”)作文老师永远也不会理解本文的写作形式,但是其中充满了惊奇和欢乐,我读过的大部分报道都缺少这种特质。帖子讲述了一个中国男人的故事(更多是以橘子哥的外号知名),他不经意买到了斯托佩拉在纽约下东区失窃的手机,在他们的手机照片流交错时发生了怪事,然后整个互联网也加入了进来。

      不过,这是个巧妙的推荐,因为我基本上是在承认,我完全享受阅读斯托佩拉的文章,本文具有冰雪皇后(DQ)冰风暴冰淇淋的所有优点,品味起来美妙无穷,我实际上可没说我对此很嫉妒。我要说的是,我很羡慕克里斯•比姆(Chris Beam),他用敏感内敛、颇有人情味的笔调撰写了这篇报道。比姆是位了不起的作家,他去采访了斯托佩拉文章的主角橘子哥,发现了性格更复杂的主人公,生活在更复杂的环境中。但是比姆也没有达到预期的目的。我们并不知道,马特•斯托佩拉无所顾忌地利用了橘子哥或其他类似的事情。如果配合每篇帖子、文章、推文或其他新闻来看,这篇略显奇怪而完全真实的报道就会变得更有趣。——布莱恩特•乌尔施塔特(Bryant Urstadt)

    1. 孔子说“不占而已矣”,他有三个原则。

      第一个,如果相信占卜,就违背了伦理的立场。因为人应该凭良心,不应该问了结果再做事。 第二个,人应该只问耕耘,不问收获。你一占卜就是在问收获:这件事能赚钱我就做,不能赚钱我就不做。这基本上是不对的。 第三个,我们做人做事的动机要很纯正。一件事,还没有做,就先想到占卜。你的动机就不纯正了。

    2. 占卜是有条件的。

      第一,资讯不足,数据不全,才可以占卜。 第二,犹豫不定,想来想去拿不定主意时,可以占卜。 第三,每次占卜只问一件事。每事一卜,不能一次卜好几件事情,那样是得不到答案的。 第四,占卜要诚心诚意。诚心诚意不是迷信,一个人只有诚心诚意,才可以引发自己的第六感,否则引发不出来。

    1. 1959年2月份,一队苏联专业登山探险队员在乌拉尔山的迪亚特洛夫山口(Dyatlov Pass)失踪,后来找到的时候全部罹难。搜救人员先是找到了他们的帐篷,然后在帐篷以及不远处的松树之间发现了五具尸体。而另外四具尸体在两个月之后才从积雪里挖出来。

      当时的结论是,或许发生了雪崩。但是迪亚特洛夫山口的地形并不陡峭,附近也没有发生过雪崩的迹象。更诡异的是,这几个人当中,有好几个身上有明显的撞伤的痕迹,其中一个人应该是死于外伤,但附近又完全没有落石的痕迹。有五个人还穿着相当薄的衣服,是活活冻死的。

      于是这件事一直是一个谜。

    1. Inventing Y2K: Why Gen-Z Love the 2000s So Much

      独立杂志BRICKS Magazine曾发表过一篇名为《发明Y2K:为什么Z世代沉迷千禧风潮?》的文章。作者写道,“现如今,当我们在谷歌上搜索 ‘Y2K服装’,出现在你眼前的是ASOS、Topshop这些快时尚品牌。在Depop等电商购物平台,打着Y2K标签的商品更是高达上万件。Y2K似乎成了时尚产品的最好代言。”

    1. To understand the process of discovery—not so much what was discovered, but how it was discovered. Primary sources are best: the words of somebody who discovered something, as they were discovering it. The more examples I see, the more likely I'll be able to discover something tomorrow. To understand the process of failure. We learn a good deal from historical errors, not only from our own. It also helps to know that even the greatest minds are unable to grasp things that seem obvious to us. Leibniz spent much time working on combinatorics, and most of what he did was underwhelming and totally wrong. To celebrate the contributions of many cultures. There are many ways of thinking, many points of view, and many independent researchers. Fibonacci numbers were discovered in India long before Fibonacci. Catalan numbers were discovered in China, a hundred years before Catalan. Many uneducated people have discovered wonderful patterns in numbers, and I can share their joy of discovery. Telling historical stories is the best way to teach. It's much easier to understand something if you know the threads it is connected to. Give credit to Fibonacci, but also to Narayana in India. The complete story is of many separate individuals building a magnificent edifice with a series of small steps. To learn how to cope with life. How did other scientists grow up, make friends or enemies, manage their time, find mentors, mentor others, and serve their communities? Balance is important. To become more familiar with the world, and to know how science fits into the overall history of mankind. What was life like on different continents and in different epochs? The main difference between human beings and animals is that people learn from history.

      1.了解发现的过程ーー不是了解发现了什么,而是了解发现的过程。第一手资料是最好的:发现了什么东西的人在发现它的时候所说的话。我看到的例子越多,我明天就越有可能发现一些东西。

      2.了解失败的过程。我们从历史上的错误中可以学到很多东西,而不仅仅是我们自己的错误。这也有助于我们了解,即使是最伟大的头脑也无法理解对我们来说显而易见的事情。莱布尼茨花了很多时间研究组合学,但他所做的大部分工作都没有给人留下深刻印象,而且是完全错误的。

      3.庆祝多种文化的贡献。有许多思维方式、许多观点和许多独立的研究者。斐波那契数列早在斐波那契之前就在印度被发现了。加泰罗尼亚数字是在中国发现的,比加泰罗尼亚人早一百年。许多未受过教育的人已经发现了美妙的数字模式,我可以分享他们发现的快乐。

      4.讲述历史故事是最好的教学方法。如果你知道某件事情的线索,就会更容易理解它。这归功于斐波那契,也归功于印度的那拉雅那。完整的故事是许多独立的个体用一系列的小步骤建造了一座宏伟的大厦。

      5.学会如何应对生活。其他科学家是如何成长的,如何结交朋友或敌人,如何管理自己的时间,如何寻找良师益友,如何指导他人,如何服务于自己的社区?平衡很重要。

      6.更加熟悉这个世界,了解科学如何融入整个人类历史。不同大陆、不同时代的生活是怎样的?人与动物的主要区别是人以史为鉴。

    1. In particular, try to go deep on multiple things. (To varying degrees, I tried to go deep on languages, programming, writing, physics, math. Some of those stuck more than others.) One of the main things you should try to achieve by age 20 is some sense for which kinds of things you enjoy doing. This probably won't change a lot throughout your life and so you should try to discover the shape of that space as quickly as you can.

      特别是,要尝试在多个方面进行深入研究。(在不同程度上,我试图深入学习语言、编程、写作、物理、数学。其中有些比其他的更有坚持性)在20岁之前,你应该努力实现的主要目标之一就是了解自己喜欢做哪些事情。这在你的一生中可能不会有太大的变化,所以你应该尽可能快地发现这件事。

    1. For now, the Solid technology is still new and not ready for the masses. But the vision, if it works, could radically change the existing power dynamics of the Web. The system aims to give users a platform by which they can control access to the data and content they generate on the Web. This way, users can choose how that data gets used rather than, say, Facebook and Google doing with it as they please. Solid’s code and technology is open to all—anyone with access to the Internet can come into its chat room and start coding. “One person turns up every few days. Some of them have heard about the promise of Solid, and they are driven to turn the world upside down,” he says. Part of the draw is working with an icon. For a computer scientist, coding with Berners-Lee is like playing guitar with Keith Richards. But more than just working with the inventor of the Web, these coders come because they want to join the cause. These are digital idealists, subversives, revolutionaries, and anyone else who wants to fight the centralization of the Web. For his part, working on Solid brings Berners-Lee back to the Web’s early days: “It’s under the radar, but working on it in a way puts back some of the optimism and excitement that the ‘fake news’ takes out.”

      目前,Solid技术还是新技术,还没有为大众做好准备。但是,如果这一设想可行的话,它将从根本上改变现有的网络力量动态。该系统旨在为用户提供一个平台,用户可以通过该平台控制对他们在网上生成的数据和内容的访问。这样一来,用户可以选择如何使用这些数据,而不是像 Facebook 和谷歌那样随心所欲地使用这些数据。Solid的代码和技术是对所有人开放的——任何能够上网的人都可以进入它的聊天室并开始编码。"每隔几天就会有一个人出现。他们中的一些人听说过Solid的前景,他们被驱使着要颠覆这个世界。"他说。对于一个计算机科学家来说,与Berners-Lee一起编码就像与Keith Richards一起弹吉他一样。但这些编码员不仅仅是与万维网的发明者一起工作,他们来这里是因为他们想加入这个事业。这些人是数字理想主义者、颠覆者、革命者,以及其他任何想要对抗网络中心化的人。对Berners-Lee来说,在Solid上的工作让他回到了互联网的早期。"虽然还没有引起人们的注意,但在某种程度上,做这件事会让‘假新闻’带来的乐观和兴奋有所减退。"

    1. 这个小小的Chrome插件可以帮助你在网页中通过标题或单词匹配来查找标签页,并且通过 "Tab Nap"暂停未使用的标签页来提高性能。一切都可以通过键盘快捷键来控制。

    1. “The thing about human ingenuity is that when there’s a sharp need for something, it tends to crystallize in discovery,”

      "人类的聪明才智在于,当人们对某件事情有迫切的需求时,往往会在发现中具体化"。

  13. Jan 2021
    1. “People think focus means saying yes to the thing you’ve got to focus on. But that’s not what it means at all. It means saying no to the hundred other good ideas that there are. You have to pick carefully. I’m actually as proud of the things we haven’t done as the things I have done. Innovation is saying no to 1,000 things.”

      人们认为聚焦就是对你要聚焦的事情说「是」,但这根本不是聚焦的本质。它意味着对其它一百个好主意说「不」。你必须仔细挑选。对没有做过的事情和做过的事情,我感到同样自豪。创新就是对 1000 件事情说不。

    1. Financial systems today

      今天的金融系统:

      1. 私人科技巨头对移动革命的利用,和对闪电扩张的闭环支付垄断(主要是传统金融体系外)开展的轻度监管审查
      2. 由政府领导的联盟所生产的新一代银行间转账基础设施,以升级现有受监管系统内的传统技术
      3. 传统基础设施及法规与私营公司中间件相互碰撞,使 20 世纪 60 年代的技术(几乎)可用于 21 世纪的商业
    1. Zeplin是一款为设计师和开发者提供设计图交接与沟通的高效平台,核心功能为标注。设计师可通过插件(目前仅支持PS和sketch)将已完成的设计图直接导入到Zeplin中,无需手动标注,开发者在Zeplin查看设计图时可通过鼠标点击设计图 显示相应位置的尺寸、色值、文字大小等信息。

    1. 当网络公司努力为迎合个人喜好而调整其服务(包括新闻和搜索结果)时,会出现一种意外的危险结果:我们会深陷在困境中,不能得到能挑战或拓展我们世界观的信息。我们将这样的困境称之为“过滤气泡”(Filter Bubble)。

      技术人员试图提供解决问题的方案。其中最简单的工具之一是名为EscapeYourBubble的Chrome扩展功能,由纽约工程师兼企业家克里希纳·卡利南开发。

      以美国大选为例,这一插件会向你提问:共和党或民主党,哪个你想了解更多?你选择你的气泡以外的一方以后,每次访问Facebook时,扩展项会将进入你的信息流并且代表“另一方”观点的新闻文章覆盖掉。但由于卡利南自己手动选取内容,上述功能在实践中产生的效果相当具有主观性。

    1. 如果这件事发生在别人身上,你的角色是像所罗门一样给人出主意,你往往会表现出更多的智慧。但如果是发生在自己身上,那就是一怒之下迅速决定,所有智慧都不要谈了。P181

      所以好的方法是把自己抽象出来,再做分析,再做决定。抽象出来成为另一个人也好,另一时间维度上的自己也罢,,对抗的都是所罗门效应

    1. 1:基本的人生态度;2:人生与事业的格局;3:对工作的心态;4:跟他人合作的心态;5:沟通技巧;6:个人投资的常识和适合初学者的方法;7:科研的方法技巧;

      最好是更好的敌人世界上的很多事情,实本身很难一步到位。一些人无所作为不是因为不想做事,而是一根筋地追求最好,最后什么也得不到

      专业和业余很多时候,利用很贵的食材,做出一盘美味并不难,难的是将土豆丝这样的菜炒出好味道,让大家回味无穷。所以,真正一流的大师在任何小事情上都能体现一流水准的人。很多入会觉得,某件事情太简单,它体现不出自己的水平,这其实反倒是他们无法成为一流人的原因。

      抵制诱惑有回报的事情和造成上、受到仿害的事情常常没有交集。原因很简单,任何回报都不能白白得来,需要付出努力,甚至有些时候要逆着自己的欲

      成功是成功之母一个人如果做一件事失败了,虽然可以总结经验,吸取教训,但是第二次哪怕他离成功再近,都有可能在最后时刻功亏一。人只有成功过一次,才更容易成功第二次、第三次,因此失败不是成功之母,成功是

      成功之母

      上帝喜欢容人根据我的经验,我很多想顺便做的事情最后都是丢三落四,而万一眈误一点儿事情,可能损失很大,因此我宁可采用笨办法,并且让它成为我做事的原则

      做事时境界要高很多时候,那些诱惑量得如此美妙,你周围的人会渐放弃目标,接受它们。这就是考验人的定力的时候。人的境界高一点儿,多关注长远,少盯着眼前,才能走得更远。

    1. 变更包括以下4种:纠正措施、预防措施、缺陷补救、更新。①纠正措施。为使项目工作绩效重新与项目管理计划一致,而进行的有目的的活动。②预防措施。为确保项目工作的未来绩效符合项目管理计划,而进行的有目的的活动。③缺陷补救。为了修正不一致产品或产品组件的有目的的活动。④更新。对正式受控的项目文件或计划等进行的变更,以反映修改或增加的意见或内容。

      变更也分类型。不同的变更有不一样的目标和对应方法

    1. 支持 Mermaid 的编辑器印象笔记 Markdown 笔记有道云笔记(未实测,希望大家补充纠正)Typora (火箭君推荐)MWeb(未实测,希望大家补充纠正)VSCode + Mermaid 插件Atom + Mermaid 插件MermaidJS 官方网页版 编辑器 (后文有参考链接)

      还包括obsidian

    1. IPD分为需求管理、战略规划、产品规划、技术规划、技术开发和产品开发六大模块。需求管理关注客户需求及实现过程监控,需求管理流程包含:收集、分析、分发、实现、验证等五个阶段。战略规划制定公司的中长期产品开发战略和方向;产品规划制定公司的产品开发规划和产品版本路标。技术规划制定公司的关键核心零部件发展规划;技术管理流程包含:技术规划、预研、架构开发、技术与平台开发、部件重用及评价等五个阶段。技术开发负责提前准备关键的核心技术、核心部件,建设跨产品的共享组件( CBB)库;产品开发根据产品规划,依靠成熟的共享组件,快速、高质、高效的完成产品开发和上市。产品开发流程包含:概念、计划、开发、验证、发布、生命周期等六个阶段。

      产品经理视角。以我为主,以乙方为主,以解决方案本身为主。

  14. oldcbcreadingandwritingsupplementary.wordpress.com oldcbcreadingandwritingsupplementary.wordpress.com
    1. 逻辑属性和内置函数的定义。

      计算蕴含的定义。

      incluede的定义(这是一个计算蕴含)。

      notIncludes的定义(它是单调的)(由于采用了符号,它在实践中是可以计算的)

      implies不是可计算的,不是built-in的。(注意它是用substitution定义的)

      filter操作很实用。

      重复运用规则的结果 的定义。(结果中不包括被n3-entail的陈述)(后件中允许有空节点/存在量化)

      cwm的几个重要命令:--rule, --think, --filter

      support: 规则推断+ 逻辑蕴含

      conclusion: supports 闭包

  15. Dec 2020
    1. 外部系统和缓存、消息队列等基础组件的依赖。假设这些被依赖方突然发生了问题,我们系统的响应时间是:内部耗时+依赖方超时时间*重试次数。如果超时时间设置过长、重试过多,系统长时间不返回,可能会导致连接池被打满,系统死掉;如果超时时间设置过短,499错误会增多,系统的可用性会降低。

      测试

  16. Nov 2020
    1. 它的最大好处就是让电动汽车变成了模块化,其他汽车公司采购了这个底盘以后,上面怎么改装都可以,汽车、货车、卡车、公共汽车、越野车都可以用它。维修、更换组件和回收,会变得从未有过的容易。

      难点在于如何在不同的汽车厂商之间做适配

    1. 仅使用一个主题提供程序(无主题嵌套)。 样式表的名称以 Mui 开头(包含所有 Material-UI 组件)。 类名生成器的 disableGlobal 选项为 false(默认值)。

      Mui 开头的组件,不增加随机 ID,方便重写

  17. Oct 2020
    1. 我理解VUE的用法是:

      1. VUE实现组件(包括模板、数据绑定的定义)
      2. 网页结构里面放锚点,挂接VUE实现的组件。
      3. TODO,实现逻辑的位置还需要再理解。
    1. 此外,它还提供了一个代理入口 https://via.hypothes.is/,通过该入口访问网页后可以直接开始批注。

      使用 https://via.hypothes.is/ 时需要留意,如果浏览的网站有跨域安全措施,可能导致一些图片无法显示,比如这个少数派的页面,就会显示图片异常。不过插件是没有这个问题的。

    2. 然后,到指引页面找到「Hypothesis Bookmarklet」小书签按钮

      为啥我没找到小书签按钮?只有安装插件一种方式…

    3. 完成注册并登录后,点击页面右上角的齿轮图标,选择「Developer」,生成自己账号对应的 API token,留存备用。

      直接用插件不方便吗?

      在public分组里面可以看见其他人的标注,这简直就是第三方评论区嘛。

  18. Sep 2020
    1. 比如当前的位置是100px, 开始位置是0px。flip动画需要模拟从0px到100px的过程,但是当前位置已经是100px了,所以我们必须使用 translateX(0 - 100px), 模拟动画开始时的0px的位置。

      动画执行前的效果(测试插件)

    1. 我有时候会想,如果我脑子重启一下,忘掉百度的历史,把它看成「一家有着几亿用户,几百亿现金储备,10 年 AI 技术积累的创业公司,正在准备迎接下一个时代。」这是不是会有一些不同的感觉?

      我想,这样的想象确实是有些不切实际的,或者说有些过分天真与幼稚。如果只是涉及到一个人的思维蜕变和彻底反思,可能希望还会大一些。但是对于这样一个庞大而腐朽的组织,要能够将其蜕变,那基本是要载入史册的商业大事件,如格鲁夫之于Intel,乔布斯之于Apple。

      就目前的境况来看,Robin的自我反思和面对事实的勇气,或许都不够强硬。只是把自己的错误,包装于各种华丽之后。不是说不可能,而是从概率上讲,太小了。

      如果百度能够再次起死回生、成为AI技术领军的大公司,那必然是一件要载入商业史册的大事。而这件事要能做成,需要无数的割舍、变革、心血的投入。就目前的感觉来看,百度并无这样的巨大动力。它实在是像极了那只温水中的青蛙,在不够剧烈的危机意识和匮乏的负重之中,失去一起的人。

    1. Function 组件每次创建闭包函数的速度是非常快的,而且随着未来引擎的优化,这个时间进一步缩短,所以我们这里根本不需要担心函数闭包的问题。

      但是其他端 例如小程序就没办法 太依赖浏览器了

  19. Aug 2020
    1. So

      一些老师还讨论了在小组工作中经常出现的问题,以及当学生单独与机器人在一起时可能出现的问题

      另外,如果有一群学生在使用它,或者在机器人的帮助下,它能适应每个学生吗?比如说,我认为他们可以处于不同的层次。或者一个学生可以接管并非常控制,如果这是一个游戏,并且非常有统治力。在这种情况下,作为一名教师,我有可能进行干预,甚至把这件事解决掉。这是机器人能做的吗?因为这总是发生在小组工作中,他们是不同的,他们扮演不同的角色,然后能够确保它是最大限度地为每个参与者学习,这样不仅有一些好处(T6)。

      必须有人监督学生与机器人互动。把他们留在这个年纪,有点不可预测(T1)。

    Annotators

    1. 如果没登录,发帖界面的工具都是灰的。。搞得我以为我一堆插件、翻墙工具、cookies设置影响了它。。。

  20. Jul 2020
    1. Hooks allow you to reuse stateful logic without changing your component hierarchy

      并不是不需要该改变你的组件,而是不需要改变组件的层次结构

    1. 点评记录

      ? 班级筛选业务组件

      1. 修改班级下拉框逻辑 0.3h
      2. 修改班级名称列配置 0.2h
      3. 更新点评详情班级名称 0.2h
    2. 评价教师

      ?. 封装私下班级下拉筛选框业务组件?

      1. 高级筛选更新班级下拉框逻辑 0.3h
      2. 处理选中私下补课班级时的接口筛选条件 0.3h
      3. 更新table班级列设置 0.2h
      4. 接口联调 0.5h
    3. 私下补课考勤-待上课
      1. 接入调试私下补课班级排课数据后的checkin组件 0.4h
      2. 新增student-preview/private-makeup-table组件 0.4h
    4. 正常班级考勤
      1. 修改makeup-student-list组件添加剩余课时和请假/限制次数列 0.3h
      2. 修改wait-checkin组件底部按钮显示逻辑 0.3h
      3. 调试补课待确认学考勤操作 0.5h
    5. 安排/编辑补课弹窗
      1. 补课表单组件 makeup-form 0.4h

      1.1 选择课次组件 schedule-select 0.4

      1.1.1 班级课次选择组件 edu-class-schedule-select 1h

      1.1.2 教师课次选择组件 teacher-schedule-select 1.5h

      1. 接口对接 0.5h

      2. 联调 0.5h

  21. Jun 2020
  22. May 2020
    1. 但浏览器并没有小程序规范的组件与 API 可供使用,例如我们不能在浏览器上使用小程序的 view 组件和 getSystemInfo API。因此我们需要在 H5 端实现一套基于小程序规范的组件库和 API 库。
    1. But I think you also bring up a good point that a lot of people feel that the personal finance and budgeting app space is oversaturated. I don’t think that at all, because I feel that personal finance is a very personal thing. Everyone has their own way that they like to do things. I don't think that this is something where you’re going to find over 50% of people share the same budgeting philosophy. So I feel that if you have a preferred way of doing something, you could probably find a cohort out there that feels the same way.

      转述 Jen 的说法:记账是件很 personal 的事情,不同人的做法可能差异很大。所以即使已经有流行的记账软件,你的记账方式可能还是有一批人会喜欢。

  23. Apr 2020
    1. An ambient declaration introduces a variable into a TypeScriptscope, but has zero impact on the emitted JavaScript program.

      环境Declare将变量引入到TypeScript,不会生成JS代码。用它告诉TypeScript编译器其它组件会提供一个变量。

    Tags

    Annotators

    1. vim 启动时,会在所有 &rtp 目录下的 plugin/ 搜索 *.vim 文件,并加载所有 找到的脚本文件。需要注意的是在 plugin/ 子目录下的所有脚本也会自动加载。除 非你先在 vimrc 中用选项禁用加载插件这个行为。

      echo &rtp

    1. I'm a Redux maintainer and creator of Redux Toolkit. FWIW, nothing about making async calls with Redux changes with Redux Toolkit. You'd still use an async middleware (typically redux-thunk), fetch data, and dispatch actions with the results.

      Redux Toolkit作者说了,RTK并没有改变任何异步操作的调用。还是可以使用中间件(象redux-thunk)获取数据和分发结果动作。

    1. Taro 的组件编译后就是小程序的自定义组件,而小程序的自定义组件的初始化时是可以指定 data 来让组件拥有初始化数据的。开发者一般会在组件的 constructor 中设置一些初始化的 state,同时也可能会在 render 中处理 state 与 props 产生新的数据,在 Taro 中多出的这一次提前调用,就是为了收集组件的初始化数据,给自定义组件提前生成 data ,以保证组件初始化时能带有数据,让组件初次渲染正常。

      Taro在初始化时会多一次渲染过程,并且第一次调用会因数据没有还出错。这种情况也出现在我的策略井字棋项目中。

    1. 扩展名:React 组件使用.jsx扩展名;文件名:文件名使用帕斯卡命名。 例如: ReservationCard.jsx。引用命名:React 组件使用帕斯卡命名,引用实例采用驼峰命名

      React组件命名以大写字母开头。

  24. Mar 2020
    1. you can make the component a container component by wrapping it in a higher-order component returned by connect().

      从示例看出来,connect可以连接函数式组件,不仅仅是类组件。

    1. React Redux now offers a set of hook APIs as an alternative to the existing connect() Higher Order Component. These APIs allow you to subscribe to the Redux store and dispatch actions, without having to wrap your components in connect()

      React Redux提供的一些hook api可以用来替代connect高阶组件。用来订阅Redux Store和分发动作,而无需connect()

    1. 动态规划的核心思想避免重复计算在01背包问题中体现得淋漓尽致。第i件物品装入或者不装入而获得的最大价值完全可以由前面i-1件物品的最大价值决定,暴力枚举忽略了这个事实。

      避免重复计算, 一语道破.

    1. To do that, the react-redux library comes with 2 things: a component called Provider, and a function called connect.

      react-redux带来两样东西: 一个叫Provider的组件 一个叫connect的函数

    1. 答: 执业注册应由申请人通过所在机构向我会申请办理。具体程序如下:   (一)由机构资格管理员在我会从业人员管理平台中为申请人分配登录账号;   (二)申请人登录从业人员管理平台,填写执业证书申请表,并对所填信息的真实、有效性作出承诺,连同打印的书面申请表及身份证复印件、学历证明复印件、2寸彩色证件照一张等材料提交所在机构;   (三)机构资格管理员对执业证书申请表进行初审、复审,并对所审信息的真实、有效性作出承诺。书面申请表由所在机构保管备查。电子申请表提交至从业人员管理平台;   (四)从业人员管理平台将对提交的申请表进行自动审核,若未能通过自动审核,则由我会工作人员进行形式审核; (五)对于通过审核的申请,从业人员管理平台将自动生成电子版执业证书,并在协会网站公告。(申请注册保荐代表人将先进行公示后进入协会形式审核阶段)。 注册流程图(非保荐代表人) 注册流程图(保荐代表人)  

      a7

    2. 答: 与证券业从业人员管理相关的法规主要包括国家法律和行政法规4件、部门规章和规范性文件25件以及自律规则和行为规范30件。 相关法规体系如下图所示:      

      a2

  25. Feb 2020
    1. 韩国第一座金棕榈,凭什么颁给了他?

      “我了解到拿奖这件事很大程度上要靠运气。《寄生虫》不过是一部非常韩国的电影,外国人可能没办法百分之百完全理解”。

      读大学时,他考上了延世大学社会学系。不知是否因为父亲的缘故,在社会学所带来的理智之余,奉俊昊仍对这个世界有着一丝幻想与执念。

      处女作失利之后,奉俊昊蛰伏了整整5年。他并不着急表现自己,他在积攒能够打动人心的力量。直到2003年,他才献出自己的第二部电影,那就是大名鼎鼎的《杀人回忆》。

      “我们计算过要多久才能买下片中的那套豪宅,如果以现在韩国的人均收入来算的话,可能需要547年,这种无力的感觉和悲伤的情绪才是我想探讨的主题。”

      或许是因为出身社会学专业,奉俊昊对于电影有着更为深刻的理解。他的作品中兼具商业与艺术,在充满了隐喻的同时,又能给观众带来精彩的故事。

  26. Dec 2019
    1. The core PyTorch modules for building neural networks are located in torch.nn, which provides common neural network layers and other architectural components.

      建立神经网络的核心模块在torch.nn,它提供一般的神经网络层和其他组件.

  27. Oct 2019
  28. Sep 2019
    1. 信息系统分为硬件和软件。其中硬件包括网络设备、服务器和存储设备;软件包括系统软件和应用软件。

      LNMP=Linux(操作系统)+Nginx(中间件)+MySQL(数据库)+PHP(工具软件)

  29. Jul 2019
  30. Jun 2019
    1. An Introduction to Variational Autoencoders

      【导读】变分自编码器(VAE)是重要的生成式模型。与生成式对抗网络(GAN)类似,VAE也可以被用来生成逼真的图像和文本信息,但VAE的思想却与GAN有很大的区别。本文介绍Arxiv上的一篇93页VAE导论,该导论包含大量的公式推导和图示。

      近几年来,生成式对抗网络(GAN)吸引了大量科研人员和工程师的关注。然而除了GAN,变分自编码器(VAE)也是这几年较为火热的重要的生成式模型。与GAN的利用生成器和判别器进行对抗的思路不同,VAE的核心组件是自编码器和KL散度约束。

  31. Apr 2019
    1. 1.构建可持续演进的系统

      从做 AWS 的第一天开始,我们就清楚地认识到,我们在做的这套软件不是一劳永逸的。现在可以用的软件,一年之后很可能将不再适用。我们的预期是,随着(用户)数量级的增加一或两次,我们都需要重新检视和适当修改我们已有的架构,以便解决扩展性的问题。

      但是我们无法采取过去常用的通过检修停机进行系统升级的方式来实现上述目标,因为世界各地诸多业务都依赖着我们平台所提供的7 x 24 小时的可用性。因此,我们需要构建一个在引入新的软件构件时不会引起服务瘫痪的架构。Amazon 杰出的工程师 Marvin Theimer 有一次开玩笑说,Amazon S3 这项服务的持续演进用开飞机来形容最为贴切。我们最开始开的是一架单引擎的赛斯纳,一段时间后升级成一架波音 737,之后又换成了一支波音 747 小队,而现在更像是由空中巨无霸空客 A380 组成的一支大型机队。自始至终,我们一边通过空中加油确保飞机的正常飞行,一边在万米高空上将 AWS 的用户从一架旧飞机挪到另一架新的上面去。同时,AWS 的用户对此毫不知情。

      1. 预料到不可预料的情况

      故障是注定的;随着时间的流逝,一切终将归于失败:从路由器到硬盘,从操作系统到存储单元损坏的TCP数据包,从瞬时误差到永久失效,无论你用的是最高质量的硬件还是最低成本的组件,这都是理所当然的。

      在服务规模变得很大之后,这个问题愈加地凸显:举例来说,当Amazon S3 服务处理万亿级存储交易时,即使误差概率极小的事件也将成为现实。在设计和构建阶段,这些故障场景中的一部分事先会被考虑到,但更多的则是未知数。

      因此,我们需要构建的是将故障视为自然发生的系统,即使我们并不知道故障是什么。这个系统应该要做到,即使在“后院已经着火”的情况下依然可以继续运行。重要的是在不需要引起整个系统宕机的情况下就能管理好受影响的局部组件。对此,我们已经发展出一套控制故障发生影响范围的基本技能,以期系统的总体健康状态得以维持。

      1. 提供基元而非框架

      很快我们开始发现,用户大都喜欢在 AWS 提供的服务上持续构建和演进自己的业务系统。在摆脱了传统 IT 硬件和数据中心的束缚之后,他们开始以一种全新、有趣的、之前从未出现过的使用模式开发自己的系统。也正是因为如此,为了满足用户多样的需求,我们的架构需要保持高度的灵活性。

      关于这一点,最重要的机制之一就是,我们提供给用户的是一系列基元和工具,用户可以选择他们喜欢的方式来使用AWS云服务,而不是由我们提供一个大而全的统一的框架。这个机制给我们的用户带来了巨大的成功,甚至 AWS 自身后续的一些服务也用上了这套机制,就像我们的普通用户一样。

      同样重要的一点是,我们很难在用户还没开始使用一个服务之前,就准确预知到对用户而言该服务需要优先考虑的问题。这也是为什么所有的新服务最初都会以最小的功能集发布,然后借助用户的反馈,再对该服务进行后续的扩展。

      1. 自动化是关键

      开发一个需要持续维护的软件服务和开发一个最终交付给客户的软件有着巨大的差异,管理一个像 AWS 这种规模的系统,需要一种完全不同的观念,才能确保满足用户对可用性、性能以及可扩展性的要求。

      实现这个目标的一个主要的机制,就是避免容易产生误差的手工操作,尽可能地将管理工作自动化。为此,我们需要构建一套可以控制主要功能的管理 API。在这方面,我们同时也对自己的用户给予帮助。通过将应用分解成一个个独立的模块,每个模块都有自己的管理 API,你可以很方便地定义自动化规则来进行大规模的维护。判断自动化做的是不是到位,可以思考一下你是不是还需要使用SSH登陆到某台服务器进行运维操作?如果答案是 yes,说明你的自动化做得还不够好。

      1. API 定义要严谨,因为一旦上线就无法更改

      我们在 Amazon 零售项目中已经接受过类似的教训,但对于 AWS 这种以 API 为中心的服务,这个原则变得更加重要。一旦用户开始用我们的 API 开发他们的应用和系统,我们就不可能再对这些 API 进行变更了。因为 API 的任何改动都会影响到用户已有的项目。因此我们充分意识到,在 API 给到用户之前,我们只有一次将 API 做对的机会。

      1. 监控你的资源使用情况

      当你为一项服务确定计费模式的时候,请务必确保你有一份关于该服务的资源成本和运营的数据。对于边际成本很低的业务尤其如此。作为服务提供 商,AWS 需要对服务成本保持足够的敏感,以便我们能清楚地认识到我们是否承担得起某项服务,同时也能够定位到一些可以通过提高运营效率而进一步降低成本的地方,并借此降低服务价格,最终惠及用户。

      举一个例子,早期的时候,我们对于 Amazon S3 服务所用到的资源成本并不是很清晰。我们当时假定,存储和带宽应该是我们首要考虑的收费点;后来运行了一段时间之后,我们才意识到,请求数量跟存储与带宽同 等重要。如果某个用户有大量的小文件要存储,这种情况下,即使是百万量级的请求,都不会占用太多的存储和带宽资源。最终我们做了调整,将请求数量也纳入了计费模型,以便 AWS 在收支上可以保证这项服务的可持续性。

      1. 从头开始建立安全机制

      保护你的用户,这一点的优先级永远都应该排在第一位,在 AWS 也不例外。不光要从运营的角度,还要从工具和机制的角度保证这一点。对此,我们也将继续保持最高的支持与投入。我们很快就学到的一个经验就是,为了实现安 全的服务,我们需要在服务设计的最初阶段就抱有这种安全意识。安全团队的任务不是在一项服务实现完了之后才开始安全检查,相反地,安全团队的工作应该和开 发团队一道,贯穿于整个项目的生命周期,以确保项目的安全性。总之,涉及到安全的问题,没有任何妥协的余地。

      1. 数据加密是头等大事

      数据加密,是保证用户数据安全的重要机制。十年前,数据加密相关的工具和服务还不够完善,直到 AWS 刚开始运营的最初几年,我们才逐步积累了很多关于在服务中集成数据加密的最佳实践。

      Amazon S3 最初提供的,是服务器端的加密机制。当我们在数据中心移除带有用户数据的磁盘的时候,这些数据就无法被访问到了。但是后续上线的诸如 Amazon CloudHSM 和 Amazon Key 管理服务,均向用户提供了自定义加密密钥的机制,这样一来,AWS 就不需要替用户维护这些加密密钥了。

      现在,AWS 所有的新服务,在原型设计阶段就会考虑到对数据加密的支持。比如,在 Amazon Redshift 服务中,每一个数据块都通过一个随机的密钥进行加密,而这些随机密钥则由一个主密钥进行加密存储。用户可以自定义这个主密钥,这样也就保证了只有用户本人才能访问这些机密数据或敏感信息。

      数据加密在我们的业务中的优先级一直非常高。我们也会持续改进,让数据加密机制用起来更简单,最终,让用户能更好地保护自己的数据安全。

      1. 网络的重要性

      AWS的服务支撑了各种各样的负载场景。从高并发处理到视频转码,从高性能并行计算到海量的网络请求。这些不同的负载场景,对网络的要求也各不相同。

      关于数据中心的设计和运营,AWS 开发了一套独特的机制,这套机制提供了灵活的网络基础设施,以便满足任何用户的不同负载场景的需求。在这个过程中,我们也认识到,为了让用户达成自身的目 标,我们必须开发自己的网络解决方案。这样也能满足我们自身的一些定制化的需求,比如在保证高安全性的同时,通过网络来隔离用户的能力。

      AWS 自主开发的这套软硬件解决方案,也能给用户带来进一步的性能提升。关于这一点,有一个成功的例子,那就是虚拟机之间的网络通信。由于网络通信是一个共享的资源,在使用 AWS 自己定制的解决方案之前,用户时常会遇到网路拥堵的问题。最终,AWS 通过开发支持单个根 IO 虚拟化技术的 NIC,实现了给每个虚拟机虚拟出自己的 NIC 的解决方案。这一改动成倍地降低了网络延迟,同时提升了高达十倍的网络性能。

      1. 不设限,保持平台的中立与开放

      随着时间的推移,AWS 团队提供了越来越多的服务和功能,这也给我们的用户创造了一个广阔的开发平台。但是 AWS 远不止我们团队开发的这些功能与服务,一些合作伙伴基于 AWS 提供的服务进一步扩大和丰富了整个系统的生态。比如,我们的合作伙伴 Stripe 提供的支付服务得以让 Twilio 在 AWS 上支持电话业务。

      很多用户基于 AWS 本身的服务,开发出自己的产品,用于解决特定的垂直领域的问题。比如,飞利浦开发了用于健康数据管理的 Healthsuite 数字平台;Ohpen 则基于 AWS 开发出自己的零售银行平台;Eagle Genomics 开发了自己的计算平台用于基因处理等等,这样的例子不胜枚举。AWS 并不会限制我们的合作伙伴,规定他们什么可以做什么不可以做。“不设限”的原则释放了创新的动力,为意想不到的创新敞开了大门。

      感觉现在阿里云的发展思路跟那时的AWS思路一致了。

  32. Mar 2019
    1. Hypothesis可以直接对在线文档乃至本地文档进行标注[4],这是一大亮点。

      据说 Hypothesis 是开源的,这才心动选了它。事实上,出乎意料的好用,不用扩展也可以,

      https://via.hypothes.is

      就是说 Safari 也能用上,真正意义上的全平台支持!\n

      我很好奇的是,这个网页为什么能直接调出 Hypothesis,即便是没装插件,抑或是没跳到专有域名。是怎么做到的呢?说起来,实践才是让我好感蹭蹭长的原因。

      3.18 深夜,哈,我知道 Hypothesis 怎么换行了,跟 \(LaTex{}\) 一样回车单独空出一行来。

    1. Liner 是 chrome 浏览器上可以使用的一款拓展插件,使用 Liner 对网页文章进行标注就像拿着一支高亮笔在书上划线一样。使用一支高亮笔,我们首先会会拔开笔盖,对应在线标注工具开启标注模式。不同于一些标注插件Hypothesis、 Weava-highlighter 、Collamark 等,每次选中文字后都要点击一次才能标注,类似于拔盖-划线-拔盖-划线, Liner 开启标注模式后,可以连续标注直至退出或关闭页面。

      Liner 是我所找到的第二款潜在的可替代 collamark 的服务,差点就切换成它了。但考虑到其没有网页平台、只能在 app 上管理标注,这就没那么让人满意了。\n 先观望观望吧。\n 19.3.18 子夜,晴

    1. 2.2 End-to-End Methods

      在传统的task-oriented对话系统中,尽管有很多特定领域的人工定制,很难推广其他领域,更进一步的是pipeline的方法有两个局限。

      • 一个是信用分配问题,一个用户的反馈很难传播到上游每个组件中。
      • 另一个是问题流程的相互依赖。一个组件的输入依赖上一个组件的输出。一部分变动其他都得动。(这个真的是问题么?)

      这俩文章介绍来一种基于网络的end-to-end的可训练的task-oriented对话系统,方法是把对话系统学习看成从对话历史到回复响应的mapping,并用encoder-decoder模型来训练整个模型。不过这个系统是以有监督的方式训练的,不仅需要大量的训练数据,并且由于在训练数据中缺乏对对话控制的探索也不能找到一个鲁棒的好策略。

      • A network-based end-to-end trainable task-oriented di-alogue system
      • Learningend-to-end goal-oriented dialog.

      下文中,首次提出了一个联合训练dialogue state tracking和policy learning来优化得到更鲁棒的系统行为。

      • Towards end-to-end learn-ing for dialog state tracking and management us-ing deep reinforcement learning

      task-oriented系统经常需要query外部知识库,前面的系统是通过发出一个符号请求到知识库基于属性来获得条目。

    1. Figure 1 shows the framework of our SLU system, which consists of the context-dependent rules for entity-only queries and the context-independent model for querieswith IISPs. The entire system feeds the query to the rules first. If the rule-based compo‐nent returns null result, that means the query is judged to contain IISPs and the model-based component will continue to process it. Otherwise, it means the query is regardedas entity-only and the result of the rules is returned as the final output

      一个query首先经过基于规则的无明显意图词的判定过程,如果是空的话那就意味含有IISPs基于模型的组件会继续来处理,否则的话也就意味着query被看作是只有实体的,那么规则的结果就作为最终结果直接返回。

  33. Feb 2019
    1. Deep Learning on Small Datasets without Pre-Training using Cosine Loss

      在当代深度学习中,有两件事似乎无可争议:

      1. softmax激活后的分类交叉熵损失是分类的首选方法;
      2. 在小型数据集上从零开始训练CNN分类器效果不佳。在本文中作者证明,当处理小数据样本类时余弦损失函数比交叉上能够提供更好的性能。
  34. Jan 2019
    1. Regulating cryptocurrency without hindering innovation is a challenge for many governments. But Japan seems to be striking a pretty good balance. After the Coincheck incident, the FSA “studied very hard about cryptocurrency and cybersecurity” and wound up better informed than most consultants in the industry, says Oki Matsumoto, chairman and managing director of Monex, Coincheck’s new owner.

      <big>评:</big><br/><br/>中介是多余的,但是它促进了市场资本主义中社会和人的有机互惠,散发出人情味儿;去中介化的点对点模式是高效的,但却单一追求不信任个体间的速生联系,显得冰冷淡漠。在行业监管这件事上,日本政府也活学活用玩起了「去中介化」,甩掉了那帮以兜售智谋为生的顾问,直接参与到行业监管政策的制定和落实过程中。这本不是什么很有人情味的举动,但却因为一个较为开放的结果而受到了区块链从业者的一致好评。或许这将启发人们思考,什么是「合格」(qualified)的监管者?什么是「好」(enlightened)的监管者?怎样才能被 Oki Matsumoto 称为 “better informed”?

    1. According to Capital, customers can purchase Bitcoin for the sums of 50, 100 or 250 euros. The tobacco shop then provides a ticket with an alphanumeric code and a QR code, which can then be used to obtain the purchased bitcoins via Keplerk’s website. The magazine adds that Keplerk collects a 7 percent fee on each payment, 1.25 of which then goes to the tobacco shop.

      <big>评:</big><br/><br/> 大众获得加密货币的渠道越来越广,这是件好事吗?抛开「万事都有好坏两面」的哲学论断不谈,我们似乎没有理由认为这是件坏事——加密货币愈加普及和流行,愈加深入日常生活,从而间接影响到人们的思维观念。但值得关注的是,在这五花八门的渠道里,有多少被中心化的力量操控着?当比特币像烟草一样成为专营专卖的「商品」和重要的财政收入来源,当大头交易所托管了市面上流通的绝大部分数字资产,「去中心化」的理想可能又将化为一纸空谈。届时人们关心的不是「怎样构筑新的价值体系」,而是「怎样挣更多的钱抽更好的『烟』」。

  35. Dec 2018
    1. archetype是mvn内置的一个插件,create任务可以创建一个java项目骨架,DgroupId是软件包的名称,DartifactId是项目名,DarchetypeArtifactId是可用的mvn项目骨架
      • maven-archetype-archetype
      • maven-archetype-j2ee-simple
      • maven-archetype-mojo
      • maven-archetype-portlet
      • maven-archetype-profiles (currently under development)
      • maven-archetype-quickstart
      • maven-archetype-simple (currently under development)
      • maven-archetype-site
      • maven-archetype-site-simple
      • maven-archetype-webapp
  36. Nov 2018
    1. The primary constructor needs to have at least one parameter; All primary constructor parameters need to be marked as val or var; Data classes cannot be abstract, open, sealed or inner;

      三大件

    1. 2.3.4 Wordpress安装与配置

      互动性和学生自主操作的内容十分吸引人,同时这部分的内容对我们的之后的学习和工作都有很大的帮助。关于WordPress上的插件的使用和详细的网页制作希望老师能介绍一点,谢谢!

  37. Oct 2018
  38. yiddishkop.github.io yiddishkop.github.io
    1. 李宏毅 linear algebra lec6: Having solution or Not?

      Textbook: chapter 1.6

      \(Ax=b\)

      能否找到一个 x 使得 \(Ax=b\) 成立.

      • Linear combination
      • span

      有没有解这个问题非常重要:假设 Linear system 是一个电路,现在老板告诉你这个电路要输出 b 这么大的电流,你能不能找到合适的电压源or电流源,还是根本就找不到?

      关于“解”的名词定义

      consistent

      A system of linear equations is called consistent if it has one or more solutions。

      只要有解就叫做 consistent.

      inconsistent

      A system of linear equations is called inconsistent if its solution set is empty(no solution)

      没有解就叫做 inconsistent.

      如何确定“解”

      Naive 方法:线的交点

      把 system of linear equations 的方程都画成直线,如果他们有交点,那么就是有解,否则无解

      General 方法

      定义引入:Linear Combination

      Given a vector set \(\{u_1,u_2,...,u_k\}\)

      The linear combination of the vectors in the set: \(v=c_1u_1+c_2u_2+...+c_ku_k,\ c_1,c_2,...,c_k\ are\ scalars\ coefficients\ of\ linear\ combination\)

      linear combination is a vector.

      有了 Linear combination 的定义之后,我们再回一下 lec5 篇末讲解的关于 使用 column view of product of matrix and vector 所以我们可以得到的结论是:

      \(Ax\) 其本质就是一个 linear combination, 他是

      • 以 \(x\) 的每一位为 scalar coefficient of linear combination,
      • 以 columns of \(A\) as vectors 作为 vector set engaged in linear combination, 的一个 linear combination

      矩阵与向量的乘法就是对矩阵的列做线性组合

      对于 \(Ax=b\) 是否有解(x是变量)这件事,实际就是在问:b 是否是columns of A的所有可能的线性组合中的一种。

      从是否有解是否是线性组合

      如果两个向量不是平行的同时不是0向量,那么他们可以组合出二维空间中所有可能的向量(亦即,线性组合的所有可能性覆盖整个2D空间)。

      【判断题】:如上所说,如果非零非平行的两个向量的线性组合可以覆盖整个二维空间的话,那么非零非平行的三个向量的线性组合是否可以覆盖整个三维空间呢?

      【答案】:否

      引入 independent 向量

      在三维空间中对参与线性组合的向量不能仅仅给出【非零】【非平行】两个限制,还得加上一个【不在同一个二维平面】。试想,如果三个向量处在同一平面的话,那么不论如何线性组合都不可能与第三维有任何关系。

      引入 反之不反

      非零非平行 ===> 有解;有解 ==X==> 非零非平行。

      引入 span

      vector set 的所有可能的 linear combination (另一个vector set)就是这组 vector set 的 span。

      \(v = c_1u_1+c_2u_2+...+c_ku_k\)

      \(v\) 毫无疑问是一个向量。

      如果我们穷举所有可能的\(c_1,c_2,...,c_k\),他们所得到的向量的集合(vector set \(V\))就是\(x_1,x_2,...,x_k\)的span,同时,\(x_1,x_2,...,x_k\) 叫做 vector set \(V\) 的 generating set.

      引入 generating set

      \(if\ Vector\ set\ V=Span(S),\ then\ V\ is\ Span\ of\ S, also\ S\ is\ a\ generating\ set\ for\ V,\ or\ S\ generates\ V\)

      \(S\) 可以作为一种描述 \(V\) 特性的方法。为什么我们需要这种描述方法呢?因为 \(V\) 作为一个 span,他通常都非常非常的大(一般都是无穷多个),如果我们想要描述这种无穷大(“无穷”都意味着抽象)的向量的集合,最好的方法就是找到一个更具体(“有限”意味着具体)的可联想的“指标” --- generating set --- 这个向量集合是由什么样的向量集合生成的

      相同的向量集(span)可能由不同的向量集(generating set)产生:

      \(S_1=\begin{vmatrix} 1 \\ -1\end{vmatrix}\)

      \(S_2=\{\begin{vmatrix}1\\-1\end{vmatrix},\begin{vmatrix}-2\\2\end{vmatrix}\}\)

      产生的向量集是相同的。

      引入 span of standard vector

      standard vector 其实就是 one-hot encoding vector. 可以见下:

      \(e_1=\begin{vmatrix}1\\0\\0\end{vmatrix}, e_1=\begin{vmatrix}0\\1\\0\end{vmatrix}, e_1=\begin{vmatrix}0\\0\\1\end{vmatrix}\)

      \(span(e_1)=one\ R^1\ in\ R^3\), one axis in 3D-space \(span(e_1,e_2)=one\ R^2\ in\ R^3\), one 2D-space in 3D-space \(span(e_1,e_2,e_3)=R^3\), whole 3D-space.

      其实今天学的东西就是“换句话说”

      • \(Ax=b\) has solution or not?

      换句话说

      • is \(b\) the linear combination of columns of \(A\)?

      换句话说

      • is \(b\) in the \(span\) of the columns of \(A\)?
    1. 社會大眾不可以歧視同性戀,性要解放,所以要怎麼樣都可以,不必顧到別人的感受?

      不歧視,性要解放,要怎麼樣都可以。這三件事情都沒有直接的因果關係。 不歧視同性戀是態度的尊重,每個人有自己的選擇。 性解放是情感的表達不受權力的壓迫,性解放的基礎是在於尊重彼此的需求。 所以基於尊重下,反而是更尊重更多的他人,而非不在乎他人。

    1. Unsupervised Learning: Word Embedding

      why Word Embedding ?

      Word Embedding 是 Diemension Reduction 一个非常好,非常广为人知的应用。

      1-of-N Encoding 及其弊端

      apple = [1 0 0 0 0]

      bag = [0 1 0 0 0]

      cat = [0 0 1 0 0]

      dog = [0 0 0 1 0]

      elephant = [0 0 0 0 1]

      这个 N 就是这个世界上所有的单词的数量,或者你可以自己创建 vocabulary, 那么这个 N 就是 vocabulary 的 size.但是这样向量化的方式,太众生平等了原本有一定关系的单词,比如 cat 和 dog 都是动物,这根本无法从 [0 0 1 0 0] 和 [0 0 0 1 0] 中看出任何端倪。

      解决这件事情的一个方法是 Word Class

      Word Class 及其弊端

      先把所有的单词 cluster 成簇,然后用簇代替 1-of-N encoding 来表示单词。

      • cluster 1: dog, cat, bird;
      • cluster 2: ran, jumped, walk
      • cluster 3: flower, tree, apple

      虽然 Word Class 保留了单词的词性信息使得同类单词聚在一起,但是不同词性之间的关系依旧无法表达:名词 + 动词 + 名词/代词, 这种主谓宾的关系就没法用 Word Class 表示。

      这个问题可以通过 Word Embedding 来解决

      Word Embedding 把每个单词的 1-of-N encoding 向量都 project 到一个低维度空间中(Dimension Reduction),这个低维度空间就叫做 Embedding. 这样每个单词都是低维度空间中的一个点,我们希望:

      相同语义的单词,在该维度空间中也相互接近

      不但如此,当 Embedding 是二维空间(能够可视化)时,所有的点及其原本单词画在坐标图上之后,很容易就可以看到这个低维度的空间的每个维度(x,y轴)都带有具体的某种含义. 比如,dim-x 可能表示生物,dim-y 可能表示动作。

      How to find vector of Embedding space?

      为什么 autoencoder 无法做出 Word Embedding?

      Word Embedding 本质上是【非监督降维】,我们之前学习的方法最直接的就是使用 autoencoder, 但用在这里很显然是无效的。因为你的输入是 1-of-N encoding 向量,在这种向量表示下每个输入样本都是 independent 的,也就是单个样本之间没有任何关系 --- 毫无内在规律的样本,你怎么可能学出他们之间的关系呢?(ps, 本来无一物,何处惹尘埃。)

      你是什么,是由你的圈子(context)决定的

      我们的目的是让计算机理解单词的意思,这个完全不可能通过常规语言交流达此目的,所以需要曲径通幽,你只能通过其他方法来让计算机间接理解。最常用的间接的方法就是:understand word by its context.

      • 马英九 520 宣誓就职
      • 蔡英文 520 宣誓就职

      及其肯定不知道马英九和蔡英文到底是什么,但是只要他读了【含有‘马英九’和‘蔡英文’的】大量的文章,知道马英九和蔡英文的前后经常出现类似的文字(similar context),机器就可以推断出“马英九”和“蔡英文”是某种相关的东西。

      How to exploit the context?

      • count based
      • predition based

      count based

      这种方法最经典的做法叫做 Glove Vector https://nlp.stanford.edu/projects/glove/

      代价函数与 MF 和 LSA 的一模一样,使用 GD 就可以解,目标是找到越是经常共同出现在一篇文章的两个单词(num. of occur),越是具有相似的word vector(inner-product)

      这种【越是。。。越是。。。】的表达方式,就可以使用前一个“越是”的量作为后一个“越是”的目标去优化。

      越是 A,越是 B ===> \(L = \sum(A-B)^2\)

      if two words \(w_i\) and \(w_j\) frequently co-occur(occur in the same document), \(V(w_i)\) and \(V(w_j)\) would be close to each other.

      • \(V(wi)\) :word vector of word wi

      核心思想类似 MF 和 LSA:

      \(V(w_i) \cdot V(w_j) \Longleftrightarrow N_{i,j}\)

      \(L = \sum_{i,j}(V(w_i)\cdot V(w_j) - N_{i,j})^2\)

      find the word vector \(V(wi)\) and \(V(w)\), which can minimize the distance between inner product of thses two word vector and the number of times \(w_i\) and \(w_j\) occur in the same document.

      prediction based 做法

      prediction based 获取 word vector 是通过训练一个 单层NN 用 \(w_{i-1}\) 预测 \(w_i\) 单词的出现作为样本的数据和标签(\(x=w_{i-1}, y=w_i\)),选取第一层 Hiden layer 的输入作为 word vector.

      【注意】:上面不是刚说过 autoencoder 学不到任何东西么,那是因为 autoencoder 的input 和 output 都是单词 \(w_i\),亦即(\(x=w_i, y=w_i\)),但是这里 prediction-based NN 用的是下一个单词的 1-of-encoding 作为label.

      本质是用 cross-entropy 作为loss-fn训练一个 NN,这个 NN 的输入是某个单词的 1-of-encoding, 输出是 volcabulary-size 维度的(概率)向量--- 表示 volcabulary 中每个单词会被当做下一个单词的概率

      $$ Num.\ of\ volcabulary\ = 10w $$

      $$ \begin{vmatrix} 0 \\ 1 \\ 0 \\ 0 \\ 0 \\.\\.\\. \end{vmatrix}^{R^{10w}} \rightarrow NN \rightarrow \begin{vmatrix} 0.01 \\ 0.73 \\ 0.02 \\ 0.04 \\ 0.11 \\.\\.\\. \end{vmatrix}^{R^{10w}} $$

      • take out theinput of the neurons in 1st layer
      • use it to represent a word \(w\)
      • word vector, word embedding feature: \(V(w)\)

      训练好这个 prediction-based NN 之后,一个新的词汇进来就可以直接用这个词汇的 1-of-N encoding 乘以第一层隐含层的权重,就可以得到这个单词的 word vector.

      $$ x_i = 1-of-N\ encoding\ of\ word\ i $$

      $$ W = weight\ matrix\ of\ NN\ between\ input-layer\ and\ 1st-hidden-layer $$

      $$ WordVector_{x_i} = W^Tx_i $$

      prediction-based 背后原理

      【注意】虽然这里的例子不是单词,但意会一下即可。

      • 马英九 520 宣誓就职
      • 蔡英文 520 宣誓就职

      因为 “马英九” 和 “蔡英文” 后面跟的都是 “520宣誓就职”,所以用在 prediction-based NN 中

      • 马英九 520 宣誓就职 \((x='Mayingjing', y='520 swear the oath of office')\)
      • 蔡英文 520 宣誓就职 \((x='Caiyingwen', y='520 swear the oath of office')\)

      也就是说给 prediction-based NN 输入 马英九 or 蔡英文的时候 NN 会“努力”把两个不同的输入 project 到同一个输出上。那么之后的每一层都会做这件事情,所以我们可以使用第一层的输入来做为 word vector.

      更好的 prediction-based NN

      • 用前 10 个单词预测下一个

      一般情况下我们不会只用前一个单词去预测下一个单词(\(w_{i-1} \Rightarrow w_i\)),并抽取 1st layer's input 作为 word vector, 我们会使用前面至少10个词汇来预测下一个词汇(\([w_{i-10}, w_{i-9}, ..., w_{i-1}] \Rightarrow w_i\))

      • 前10个词汇的相同 1-of-N encoding 位应该使用相同的 w 权重

      如果使用不同的权重,(以前两个预测下一个为例)

      • “马英九宣誓就职时说xxxx”
      • “宣誓就职时马英九说xxxx”

      [w1:马英九] + [w2:宣誓就职时] => [w3:说xxxx]

      [w1:宣誓就职时] + [w2:马英九] => [w3:说xxxx]

      如果使用不同的权重,那么 [w1:马英九] + [w2:宣誓就职时] 和 [w1:宣誓就职时] + [w2:马英九] 就会产生不同的 word vector.

      具体过程描述如下:

      • |V| : volcabulary size, for 1-of-N encoding
      • |z| : word vector size, the dimension of embedding space

      • the length of \(x_{i-1}\) and \(x_{i-2}\) are both |V|.

      • the length of \(z\) is |z|
      • \(z = W_1x_{i-2} + W_2x_{i-1}\)
      • the weight matrix \(W_1\) and \(W_2\) are both |Z|*|V| matrix
      • \(W_1 = W_2 = W \rightarrow z = W(x_{i-2} + x_{i-1})\)
      • we get \(W\) after NN trained
      • a new word's vector is \(wordvector_{w_i} = W(1ofNencdoing_{w_i})\)

      实作时,我们如何保证权重共享呢 --- \(W_1 = W_2\)?

      How to make wi equal to wj?

      Given wi and wj the same initialization, and the same update per step.

      \(w_0 = w_0\)

      \(w_i \leftarrow w_i - \eta \frac{\partial C}{\partial w_i} - \eta \frac{\partial C}{\partial w_i}\)

      \(w_i \leftarrow w_i - \eta \frac{\partial C}{\partial w_i} - \eta \frac{\partial C}{\partial w_i}\)

      扩展 prediction-based 方法

      • Continuous bag of word(CBOW) model

      \([w_{i-1}, w_{i+1}] \Rightarrow w_i\)

      • Skip-gram

      \(w_i \Rightarrow [w_{i-1}, w_{i+1}]\)

      word embedding 用于关系推导和问题回答

      关系推导

      有了 word vector, 很多关系都可以数字化(向量化)

      • 包含关系
      • 因果关系
      • 等等

      两类词汇的 word vector 的差值之间存在某种平行和相似(相似三角形or多边形)性,可以据此产生很多应用。

      \(WordVector_{China} - WordVector_{Beijing} // WordVector_{Spain} - WordVector_{Madrid}\)

      for \(WordVector_{country} - WordVector_{capital}\), if a word A \(\in\) country, and word B \(\in\) capital of this country, then \(A_0 - B_0 // A_1 - B_1 // A_2 - B_2 // . ..\)

      问题回答

      问题回答也是这个思路---利用word vector差值是相互平行的

      \(V(Germany) - V(Berlin) // V(Italy) - V(Rome)\)

      \(vector = V(Berlin) + V(Italy) - V(Rome)\)

      \(find\ a\ word\ from\ corpus\ whose\ word\ vector\ closest\ with\ 'vector'\)

      中英文混合翻译

      学习 word embedding prediction-based NN 的网络原理(单层; 前后单词为一个样本;取第一层输入)可以实现更进一步的应用。

      先获取中文的 word vector, 然后获取英文的 word vector, (这之后开始使用 prediction-based NN 的原理)然后 learn 一个 NN 使得他能把相同意思的中英文 word vector 投影到某个 space 上的同一点,这之后提取这个网络的第一层 hidden layer 的输入权重,就可以用来转换其他的英文和中文单词到该 space 上,通过就近取意的方法获取该单词的意思。

      对图像做 word embedding

      这里也是学习 word embedding prediciton-based NN 的网络原理,他可以实现扩展型图像识别,一般的图像识别是只能识别数据集中已经存在的类别,而通过 word embedding 的这种模式,可以实现对图像数据集中不存在(但是在 word 数据集中存在)的类别也正确识别(而不是指鹿为马,如果image dataset 中原本没有 ‘鹿’ 的话,普通的图像识别会就近的选择最'像'的类别,也就是他只能在指定的类别中选最优的)。

      先通过大量阅读做 word vector, 然后训练一个 NN 输入为图片,输出为(与之前的 word vector)相同维度的 vector, 并且使得 NN 把与 word(eg, 'dog') 相同类型的image(eg, dog img) project 到该word 的 word vector 附近甚至同一点上。

      如此面对新来的图片比如 '鹿.img', 输入给这个 NN 他就会 project 到 word vector space 上的 “鹿” 周围的某一点上。

      对 document 做 embedding

      1. word sequences with different lengths -> the vector with the same length
      2. the vector representing the meaning of the word sequence

      如何把 document 变成一个 vector 呢?

      首先把 document 用 bag of word(a vector) 来表示,然后将其输入给一个 auto encoder , autoencoder 的 bottle-neck layer 就是这篇文章的 embedding vector。

      这里与使用 autoencoder 无法用来做 word embedding 的道理是一样的,只不过对于 word embedding 来说 autoencoder 面对的是完全相互 independent 的 1-of-N encoding, 其本身就无规律可言,所以 autoencoder 不可能学到任何东西,所以没有直接规律,就寻找间接规律 通过学习 context 来判断单词的语义。

      这里 autoencoder 面对的是 document(bag-of-word), bag of word 中包含的信息仅仅是单词的数量 (大概是这样的向量\([22, 1, 879, 53, 109, ....]\))不论 bag-of-word(for document) 还是 1-of-N encoding(for word) 都是语义缺乏的编码方式。所以想通过这种编码方式让NN萃取有价值的信息是不可能的。

      还是那个原则没有直接规律,就寻找间接规律

      • 1-of-N encoding, lack of words relationship, what we lack, what we use NN to predict, we discover(construct) some form of data-pair (x -> y) who can represent the "relationship" to train a NN , and the BY-PRODUCT is the weight of hiden layer --- a function(or call it matrix) who can project the word to word vector(a meaningful encoding)

      • bag-of-word encoding, lack of words ordering(another relationship), using (李宏毅老师没有明说,只列了 reference)

      white blood cells destroying an infection

      an infection destroying white blood cells

      they have same bag-of-words, but vary differentmeaning.

    2. 关于转导学习 和 归纳学习

      • 迁移学习 transfer learning
      • 转导学习 transductive learning
      • 归纳学习 inductive learning
      • 非监督学习 unsupervised learning
      • 自学习 self-taught learning
      • 多任务学习 multi-task learning

      其中,后五者其实都可以看做迁移学习的子类。

      转导学习与归纳学习的典型算法

      转导学习的典型算法是 KNN:

      1. 初始化 K(超参,自选) 个中心点。
      2. 新来的数据会将其直接用来计算与每个中心点的距离。
      3. 取所有距离中最小的距离所对应的中心点作为该新数据点的“簇”。
      4. 重新计算该簇(加入中心点的簇需重新计算)中心点。

      由上述过程可见:

      我们使用了 unlabeled data 作为测试集数据,并使用之决定新的中心点(新的分类簇)

      这就是课件中所说的:

      Transfuctive learning: unlabeled data is the testing data.

      归纳学习的典型算法是 Bayes:

      \(P(y|x) = \frac{P(x|y)P(y)}{P(x)=\sum^K_{i=1}{P(x|y_i)P(y_i)}}\)

      通过 count-based methodNaive Bayes 或者 Maximum Likelihood(详见 lec5 笔记)(

      \(P([1,3,9,0] | y_1)=P(1|y_1)P(3|y_1)P(9|y_1)P(0|y_1)\) ) 先计算出:

      \(P(x|y_1)P(y_1)\)

      \(P(x|y_2)P(y_2)\)

      \(P(x|y_3)P(y_3)\)

      ...

      然后就可以带入 Bayes 公式,就可以得到一个模型公式。

      \(P(y|x) = \frac{P(x|y)P(y)}{P(x)=\sum^K_{i=1}{P(x|y_i)P(y_i)}}\)

      由此可见,inductive 和 transductive 最大的不同就是,前者会得到一个通用的模型公式,而后者是没有模型公式可用的。新来的数据点对于 inductive learning 可以直接带入模型公式计算即可,而 transductive learning 每次有新点进来都需要重新跑一次整个计算过程。

      对于通用模型公式这件事,李宏毅老师 lec5-LogisticRegression and Generative Model 中提到:

      Bayes model 会脑补出数据集中没有的数据。

      这种脑补的能力会使得他具有一些推理能力,但同时也会犯一些显而易见的错误。

      而 transudctive learning 则是针对特定问题域的算法。

      转导学习与归纳学习的概率学背景

      在 inductive learning 中,学习器试图自行利用未标记示例,即整个学习过程不需人工干预,仅基于学习器自身对未标记示例进行利用。

      transductive learning 与 inductive learning 不同的是

      transfuctive learning 假定未标记示例就是测试例

      学习的目的就是在这些未标记示例上取得最佳泛化能力

      换句话说:我处理且只处理这些点

      inductive learning 考虑的是一个“开放世界”,即在进行学习时并不知道要预测的示例是什么,而直推学习考虑的则是一个“封闭世界”,在学习时已经知道了需要预测哪些示例。

      实际上,直推学习这一思路直接来源于统计学习理论[Vapnik],并被一些学者认为是统计学习理论对机器学习思想的最重要的贡献1。其出发点是不要通过解一个困难的问题来解决一个相对简单的问题。V. Vapnik认为,经典的归纳学习假设期望学得一个在整个示例分布上具有低错误率的决策函数,这实际上把问题复杂化了,因为在很多情况下,人们并不关心决策函数在整个示例分布上性能怎么样,而只是期望在给定的要预测的示例上达到最好的性能。后者比前者简单,因此,在学习过程中可以显式地考虑测试例从而更容易地达到目的。这一思想在机器学习界目前仍有争议

    3. 从 components-PCA 到 Autoencoder

      根据之前通过 SVD 矩阵分解得到的结论: u = w

      和公式:\(\hat{x} = \sum_{k=1}^Kc_kw^k \approx x-\bar{x}\)

      再结合线性代数的知识,我们可以得到,能让 reconstruction error 最小的 c 就是:

      \(c^k = (x-\bar{x})\cdot w^k\)

      结合这两个公式,我们就可以找到一个 Autoencoder 结构:

      1. \((x-\bar{x})\cdot w^k = c^k\)
      2. \(\sum_{k=1}^Kc^kw^k = \hat{x}\)

      $$ \begin{vmatrix} x_1 - \bar{x} \\ x_2 - \bar{x} \\ .\\.\\. \end{vmatrix} \Rightarrow \begin{vmatrix} c^1 \\ c^2 \end{vmatrix} \Rightarrow \begin{vmatrix} \bar{x_1} \\ \bar{x_2} \\ .\\.\\. \end{vmatrix} $$

      autoencoder 的缺点 --- 无法像 PCA 一样得到完美的数学解

      这样一个线性的 autoencoder 可以通过 Gradient Descent 来求解,但是 autoencoder 得到的解只能无限接近 PCA 通过 SVD 或者 拉格朗日乘数法的解,但不可能完全一致,因为 PCA 得到的 W 矩阵是一个列和列之间都相互垂直的矩阵,autoencoder 确实可以得到一个解,但无法保证参数矩阵 W 的列之间相互垂直

      autoencoder 的优点 --- 可以 deep,形成非线性函数,面对复杂问题更 power

      PCA 只能做压扁不能做拉直

      就像下面显示的这样,PCA 处理这类 manifold(卷曲面)的数据是无能为力的。他只能把数据都往某个方向压在一起。

      PCA - weaknees

      而 deep autoencoder 可以处理这类复杂的降维问题:

      PCA vs. autoencoder

      how many the principle components?

      你要把数据降到几维度,是你可以自己决定的,但是有没有什么比较好的数学依据来hint这件事情呢?

      常用的方法是:

      \(eigen\ ratio\ = \frac{\lambda_i}{\lambda_1 + \lambda_2 + \lambda_3 + \lambda_4 + \lambda_5 + \lambda_6}\)

      • \(\lambda\) : eigen value of Cov(x) matrix

      我们求解 PCA 的函数的时候给出的结论是:

      W 的列是 \(S=Cov(x)\) 的topmost K 个 eignen values 对应的 eigen vectors.

      eigen values 的物理意义是降维后的 z 空间中的数据集在这一维度的 variance。

      在决定 z 空间的维度之前,我们引入一个指标: eigen ratio,这个指标有什么用呢?他能帮助我们估算出前多少个 eigen vector 是比较合适的。

      假设我们预先希望降维到 6 dimension,那么我们就可以通过之前学到的方法得到 6 个 eigen vector 和 6 个 eigen value, 同时也可以得到 6 个 eigen ratio.

      通过这 6 个 eigen ratio 我们就可以看出谁提供的 variance 是非常小的(而我们的目标是找到最大 Variance(z))。eigen ration 太小表示映射之后的那个维度,所有的点都挤在一起了,他没什么区别度,也就是提供不了太多有用的信息。

      之前没有提过,component 的维度应该是与原始 x 样本的维度是一致的,因为你可以把 component 看成是原始维度的一种组合(笔画 <- 像素)。

      以宝可梦为例,说明: 如果把原本 6 个维度的宝可梦,降维到4维度,可以发现的是这个 4 个 componets 大概的物理意义是:

      1. 1st_component: 强度,对应的原始样本 6 维度都是正系数。
      2. 2nd_component: 防御力(牺牲速度),对应的原始样本中 'Def' 最高,'Speed' 最低(负值)
      3. 3rd_component: 特殊防御(牺牲攻击和生命值),对应的原始样本中 'Sp Def' 最高,'HP','Atk'最低(都是负值)
      4. 4th_component: 生命值(牺牲攻击力和防御力),对应的原始样本中的'HP'最高, 'Atk' 'Def' 最低(都是负值)

      从实际应用看 PCA 得到的 'component'

      'component' 不一定是 ‘部分’。

      • 对手写数字图片进行降维

      • 对人脸图片进行降维

      降维之后的数字和脸

      上面的图片所展示的似乎异于我们期望看到的啊!

      我们一直强调 component 似乎是一种部分与整体的感觉,而这里给出的图片似乎是一种图层的感觉 --- 每一张 'component' 给出的不是笔画和五官,而是完整的数字和脸的不同颜色or阴影。

      进一步分析 PCA 得到的 'component' --- 滤镜

      提出一种可能性:先看之前的公式,

      $$ img_9 = c_1w_1 + c_2w_2 + ... $$

      由于我们并没有限制,factor 系数的符号(factor 可正可负),所以他极有可能做的一件事情是,

      为了生成图片 数字9,我的第一个component可以比较复杂,比如图片数字8,给与其正的factor,第二个component可以是一个0,给与其正的factor,第三个component可以是一个 6,给与其负值的factor

      这样 img8 + img0 - img6 看上去就约等于 img9 了。

      如何能使得 component 就是‘部分’

      PCA 我们使用的分解是 SVD 或者 lagrange multiplier. 这种方法无法保证我得到的 component 和 其对应的 factor 都是正的。于是可以使用 NMF(non-negative matrix factorization)

      NMF:

      1. forcing all factors be non-negative
      2. forcing all components be non-negative

      李宏毅老师没有具体讲解这个方法,只列出索引:

      Algorithms for non-negative matrix factorization

      如下图, NMF 使用的 components 更像是 ‘部分’ 而不是 ‘滤镜’

      NMF on mnist

  39. Sep 2018
    1. Dimension Reduction 为什么可能是有用的?

      一,例子1 为什么 Dimension Reduction 可能是有用的,如下图示:

      Manifold

      如果我们用 3 dimension 的样本维度去描述他其实是非常浪费的,因为很明显他是卷曲在一起的,如果我们有办法把他展平,不同类型(不同颜色代表不同类型)就很容易区隔开,而展平之后我们只需要 2 dimension 的样本维度。所以根本不需要把这个问题放在 3d 中去考虑,2d 就可以了。

      Manifold and dimension reduction by various methods

      二,例子2

      在手写数字辨识的任务中,你或许根本用不到 28*28 的维度,比如数字 3 他可能有很多形态,但其实大部分都是旋转一下角度而已,所以对于辨识 3 这件事可能需要的维度仅仅是一个旋转角度而已(1维度)

      如何做 dimension reduction 呢?

      对数据降维就是找一个function

      \(f(x) \rightarrow x', dim(x) >> dim(x')\)

      一,方法1: feature selection (略)

      二,方法2:PCA

      基本原理

      PCA 的本质就是通过一个一次线性函数 \(W^Tx\)把高维度的数据样本转换为低维度的数据样本。就像 \(w^Tx\) 如果\(W^T\)矩阵只有一行,这个函数就是两个向量的内积 --- 结果是一个(一维)数值,如果 \(W^T\) 是一个矩阵,那么 \(W^T\) 有多少行最终内积结果就有多少维

      $$ R_W^{1*N} \cdot R_x^{N*1} = R_{x'}^{1*1} R_W^{2*N} \cdot R_x^{N*1} = R_{x'}^{2*1} ... $$

      \(f(x) \rightarrow x', dim(x) >> dim(x')\)

      \(z = Wx, to\ find\ 'W'\)

      找到优化问题 --- projection has max variance

      该如何找到 W 呢,从最简单的开始,我们假设 :

      • reduce x to 1 D vector z, means that 'z' is a digit
      • 'W' matrix only have ONE row
      • this row's L2 norm is equal to 1: \(||w^1||_2=1\).

      如此一来,'z' 就可以看做是 'x' 在 'w' 方向上的投影(内积的几何意义)

      所有的 x: \(x^1, x^2, x^3,...\) 都在 w 方向上做投影就得到了 z: \(z^1, z^2, z^3,...\) , 而我们要做的就是从:

      如何找到 W 变成 找到一个 x 的更好的投影方向

      we want the variance of \(z_1\) as large as possible.

      variance 在图像上的表现就是,投影之后的 z 的取值范围(值域)取值范围越大variance越大

      对于投影到一维空间,找到最佳的 w('w' is a row vector) 使得 x('x' is N dimension) 投影到该方向得到的 z ('z' is a digit)的 variance 是最大的, 用公式表示就是:

      \(find\ a\ w\ to\ maximize:\)

      \(Var(z_1) = \sum_{z_1}(z_1 - \bar{z_1})^2)\)

      \(with\ constaint\ :\ ||w_1||_2=1\)

      对于投影到二维(甚至多维)空间,我们要给每个后面的w一个限制就是: 后面的 w(n+1 th row) 要跟前面的所有 w({1~n} rows) 相互垂直, \(w_{n+1} \cdot \{w_{i}\}_{i=1}^n = 0\).

      整体来看就是:

      the 1st row of W should be:

      \(w_1 = argmax(Var(z_1) = \sum_{z_1}(z_1 - \bar{z_1})^2)\)

      \(constraint:\ ||w_1||_2=1\)

      the 2nd row of W should be:

      \(w_2 = argmax(Var(z_2) = \sum_{z_2}(z_2 - \bar{z_2})^2)\)

      \(constraint:\ ||w_2||_2=1, w_2 \cdot w_1 = 0\)

      the 3rd row of W should be:

      \(w_3 = argmax(Var(z_3) = \sum_{z_3}(z_3 - \bar{z_3})^2)\)

      \(constraint:\ ||w_3||_2=1, w_3 \cdot w_1 = 0, w_3 \cdot w_2 = 0\)

      .......

      then the W should be:

      $$ W = \begin{vmatrix} (w_1)T \\ (w_2)T \\ . \\ . \\ . \end{vmatrix}\quad $$

      这里 W 会是一个 Orthogonal matrix, 因为每一行的 norm 都等于1,并且行行之间相互垂直。

      求解这个带限制条件优化问题 ---- 拉格朗日乘数法

      Lagrange multiplier 可以把带限制条件的优化问题转换>为无限制优化问题: target - a(zero_form of >constraint1) - b(zero_form of constraint2)

      无限制的优化问题,就可以通过偏微分=0来找到最优解

      如果 W 矩阵只有一行

      $$ one\ x\ one\ z_1 \bar{z_1} = \sum{z_1} = \sum{w_1 \cdot x} = w_1 \cdot \sum x = w_1 \cdot \bar{x} Var(z_1) = \sum_{z_1}(z_1 - \bar{z_1})^2 = \sum_x(w_1 \cdot x - w_1 \cdot \bar{x})^2 = \sum_x(w_1 \cdot (x-\bar{x}))^2 $$

      对于 \(w \cdot (x - \bar{x})\), 他是两个向量的内积,对于这种内积的平方,要注意如下的惯用转换公式(值得记住)。

      $$ (a \cdot b)^2 = (a^Tb)^2 $$

      因为 \(a \cdot b\) 是内积,是一个数值,数值的平方无关乎顺序,所以可以写成:

      $$ (a^Tb)^2 = a^Tba^Tb $$

      因为 \(a \cdot b\) 是内积,是一个数值,数值的转置还是自身,所以可以写成:

      $$ (a^Tba^Tb = a^Tb(a^Tb)^T $$

      化简之后:

      $$ a^Tb(a^Tb)^T = a^Tbb^Ta $$

      所以之前 var 的式子可以化简为:

      $$ Var(z_1) = \sum_{z_1}(z_1 - \bar{z_1})^2 = \sum_x(w_1 \cdot x - w_1 \cdot \bar{x})^2 = \sum_x(w_1 \cdot (x-\bar{x}))^2 = \sum_x(w_1)^T(x-\bar{x})(x-\bar{x})^Tw_1 $$

      因为是对 x 来求和,所以 w 可以提出去:

      $$ Var(z_1) = \sum_{z_1}(z_1 - \bar{z_1})^2 = \sum_x(w_1 \cdot x - w_1 \cdot \bar{x})^2 = \sum_x(w_1 \cdot (x-\bar{x}))^2 = \sum_x(w_1)^T(x-\bar{x})(x-\bar{x})^Tw_1 = (w_1)^T(\sum_x(x-\bar{x})(x-\bar{x})^T)w_1 $$

      其中 \(\sum_x(x-\bar{x})(x-\bar{x})^T\) 是什么,这个是 x 向量(样本都是向量)的 covariance matrix. covariance 是对称且半正定对的, 也就是说所有的 eigenvalues 都是非负的

      $$ Var(z_1) = \sum_{z_1}(z_1 - \bar{z_1})^2 = \sum_x(w_1 \cdot x - w_1 \cdot \bar{x})^2 = \sum_x(w_1 \cdot (x-\bar{x}))^2 = \sum_x(w_1)^T(x-\bar{x})(x-\bar{x})^Tw_1 = (w_1)^T(\sum_x(x-\bar{x})(x-\bar{x})^T)w_1 = (w_1)^TCov(x)w_1 $$

      我们设 \(S = Cov(x)\) ,于是我们得到了一个新的优化问题:

      find w1 maximizing:

      \(w_1^T S w_1, with\ constraint\ ||w_1||_2 = 1, means\ w_1^Tw_1 = 1\)

      Lagrange multiplier is target - zero_form of constraints

      之前说明过 \(w_1\) 是 W 矩阵的第一个row,再次提醒下。

      \(g(w_1) =w_1^TSw_1 - \alpha(w_1^Tw_1 - 1)\)

      \(\frac{\partial g(w_1)}{\partial w_{11}} = 0\)

      \(\frac{\partial g(w_1)}{\partial w_{12}} = 0\)

      ....

      通过对 Lagrange 式子 \(g(w_1)\) 的微分为0来求最大最优的w,可以得到如下化简后的式子:

      \(Sw_1 - \alpha w_1 = 0\)

      \(Sw_1 = \alpha w_1\)

      这种形式我们就熟悉了,\(w_1\) 是 S 的 eigen vector

      但是这样的 w1 有很多,因为 S 的 eigen vector 有很多,所以 w1 的潜在选择也很多,哪一个是最好的选择呢?通过我们的优化目标来判断。

      \(w_1^TSw_1 = \alpha w_1^Tw_1 = \alpha\)

      而这里的 \(\alpha\) 是 eigen value,

      所以,因为我们要最大化的目标最后等于 alpha, 而 alpha 是 eigen value, 所以我们选择最大的 eigen value, 一个 eigen value 对应一个 eigen vector, 所以最优的 w1 就是最大的 eigen value 对应的那个 eigen vector.

      之前分析过, Find w2 的情况与 Find w1 略有不同,不同在优化问题的限制条件多出一个与之前所有的w都垂直,那么就是:

      \(Find\ w_2\ maximizing: w_2^TSw_2, w_2Tw_2=1, w_2^Tw_1=0\)

      按照 目标函数 - 系数*zero_form of 限制条件 的拉格朗日使用方法,可以得到如下无限制条件的优化问题:

      如果 W 矩阵有多行

      对于 W 矩阵有多行的情况,优化目标函数需要改变, 要增加限制条件,如果不加改变的话你得到的 wn 永远与 w1 一样,增加的这个限制条件是:后面的每个w都要与前面的所有w相互垂直 --- 内积为0

      \(Find\ w_2\ maximizing:\)

      $$ g(w_2) = w_2^TSw_2 - \alpha(w_2^Tw_2-1)-\beta(w_2^Tw_1-0) $$

      同样的通过微分等于0来求无限制条件的优化问题:

      \(\frac{\partial g(w_1)}{\partial w_{11}} = 0\)

      \(\frac{\partial g(w_1)}{\partial w_{12}} = 0\)

      化简上述结果可以得到:

      \(Sw_2 - \alpha w_2 - \beta w_1 = 0\)

      上述等式两边同时乘以 w1:

      \(w_1^TSw_2 - \alpha w_1^Tw_2 - \beta w_1^Tw_1 = 0\)

      \(w_1^TSw_2 - \alpha * 0 - \beta * 1 = 0\)

      因为 \(w_1^TSw_2\) 本身是一个 向量矩阵向量 的形式,他是一个数值,数值的转置还是自身:

      \(w_1^TSw_2 = (w_1STw_2)^T = w_2^TS^Tw_1\)

      因为 S 是 Covariance Matrix of x, 是对称的,所以 \(S^T=S\)

      \(w_2^TS^Tw_1= w_2^TSw_1\)

      使用 w1 的结论,\(Sw_1 = \lambda_1w_1\), 所以有

      \(w_2^TSw_1=\lambda_1w_2^Tw_1=0\)

      所以,综合起来看:

      \(w_1^TSw_2 - \alpha w_1^Tw_2 - \beta w_1^Tw_1 = 0\)

      \(w_1^TSw_2 - \alpha * 0 - \beta * 1 = 0\)

      \(0 - \alpha * 0 - \beta * 1 = 0\)

      所以:

      \(\beta=0\)

      所以:

      \(Sw_2 - \alpha w_2= 0\)

      \(Sw_2 = \alpha w_2\)

      由于 w2 也是 eigen vector, 同样有很多选择,与 w1 选择的依据一样,我们只能选择剩下最大的那个 eigenvalue of S 对应的 eigenvector

      so,结论是:

      $$ z = Wx $$

      $$ W = \begin{vmatrix} (w_1)T \\ (w_2)T \\ . \\ . \\ . \end{vmatrix}\quad $$

      $$ W = \begin{vmatrix} 1st\ largest\ eigenvalues'\ eigenvector\ of\ Cov(x) \\ 2nd\ largest\ eigenvalues'\ eigenvector\ of\ Cov(x) \\ 3rd\ largest\ eigenvalues'\ eigenvector\ of\ Cov(x) \\ ...\end{vmatrix} $$

      PCA 的副产品 --- 降维后数据点的各个维度互相垂直

      数据点的各个维度互相垂直

      用数学语言来表述就是

      数据点的协方差矩阵是一个 Diagonal matrix

      也就是

      数据点的各个维度之间没有 correlation

      这样有什么作用呢?

      一个很好的作用是,原来的 data 经过 PCA 之后输出的新的 data 可以接其他较为简单的(或是对数据点维度要求无 correlation 的)model ---> eg. Naive Bayes.

      如何证明呢?

      $$ Cov(z) = \sum(z - \bar{z})(z-\bar{z})^T $$

      这一项,可以可以展开合并后成为下面这种形式:

      $$ Cov(z) = \sum(z - \bar{z})(z-\bar{z})^T = WSW^T,\ \ S = Cov(x) $$

      $$ W^T=\begin{vmatrix} w_1 \\ .\\.\\.\\ w_k \end{vmatrix}^T= [w_1, ..., w_k] $$

      注意转置之前 w1 是 W矩阵的行向量,转置后,w1 是 W^T 的 列向量:

      $$ \begin{vmatrix} 1 & 2 & 3 & \rightarrow w_1\\ 4 & 5 & 6 & \rightarrow w_2 \\ 7 & 8 & 9 & \rightarrow w_3 \end{vmatrix}^T \rightarrow \begin{vmatrix} 1 & 4 & 7 \\ 2 & 5 & 8 \\ 3 & 6 & 9 \\ \downarrow & \downarrow & \downarrow \\ w_1 & w_2 & w_3 \end{vmatrix} $$

      $$ WSW^T = WS[w_1, ..., w_k] = W[Sw_1, ..., Sw_k] $$

      利用之前的结论:

      \(Sw_1 = \lambda_1 w_1\)

      $$ W[Sw_1, ..., Sw_k] = W[\lambda_1 w_1, ..., \lambda_k w_k] = [\lambda_1Ww_1, ..., \lmabda_kWw_k] = [\lambda_1e_1, ..., \lambda_ke_k] $$

      其中 \(e_i\) 是指第 \(i\) 位为 1, 其余位都为 0 的列向量。

      所以 \(Cov(z)\) 就是一个 Diagonal matrix.

      总结

      PCA 关键词:

      • linear function, projection
      • maximize Variance of z
      • Covariance Matrix of x
      • eigenvector of Covariance Matrix

      一个重要的结论需要记住: Covariance Matrix is a symmetric, positive-semidefinite matrix, so it has non-negative eigenvalues

      一个重要的技术:

      带限制条件优化

      --- Lagrange multiplier ---> 无限制条件优化

      --- partial dirivitive = 0 --->

      求解。

      一个重要的机器学习常识:

      数据点的各个维度互相垂直

      用数学语言来表述就是

      数据点的协方差矩阵是一个 Diagonal matrix

      也就是

      数据点的各个维度之间没有 correlation

    2. semi-supervised 经典假设-2:Smoothness Assumption

      半监督学习的第一个假设是 非黑即白,进阶版是未必非黑即白,也差不多,基于这个假设我们有了算法 self-training(hard-label) 和 entropy-based regularization。

      半监督学习的第二个知名假设是 近朱者赤,近墨者黑

      不精确的说法: Assumption: "similar" x has the same y.

      精确的说法:

      1. x is not uniform.
      2. if x1 and x2 are close in a high density region, y1 and y2 are the same.

      解释下上面这句话的意思:

      如果 x 的分布是不平均的,有些地方很集中,某些地方很分散。如果两个 x 样本,x1 x2 在一个高密度区域内很近的话,那么他们的标签应该一样。

      一言以蔽之,相近一个必须的前提是:这两个点必须经过一个稠密区间相连。 connected by high density region.

      形象一点该如何理解 稠密区间 呢?也就是一个样本和另一个样本之间存在连续的渐进变换的很多样本,那么就说明两者之间存在稠密区间。

      举例说明:

      1 <====> 11 <-------> 15

      1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ___, 15

      • <====> 表示这里有很多渐变的无标数据点
      • <-------> 表示这里几乎没有无标数据点
      • 只有 1 和 15 是带标数据,其他都是无标数据。

      我们如何判断无标数据 11 的标签?

      ‘1’ 和 ‘11’ 之间存在稠密区间,则两者的label应该是一样的。‘11’ 和 ‘15’ 之间不存在稠密区间。

      这招在文档分类中,作用颇大。Classify astronomy vs. Travel articles.我们做文档分类是基于文档的vocabulary是否存在较大重叠,但是由于人类使用的词汇是如此的多,不同的人对同一个意思会使用不同的词汇去表达,所以文档之间的单词重叠的非常少,这时候就可以借助high density region的假设,只要两个文档之间(一个带标一个无标)存在连续的渐变的很多文档,就可以判断两个数据点具有相同的标签。

      天文:文档1 = [asteroid, bright]

      _ :文档2 = [bright,comet]

      _ :文档3 = [comet,year]

      _ :文档4 = [year,zodiac]

      文档1 与 文档2 标签一致;

      文档2 与 文档3 标签一致;

      文档3 与 文档4 标签一致;

      所以 文档1 与 文档4 标签一致;

      平滑假设下的 smei-supervised 算法框架

      一,构建 pseudo 数据集阶段

      1. 获取 pseudo labels of unlabeled dataset by smoothness assumption and labeled dataset
      2. 将 pseudo label 当做真实 label, 完成数据集构建

      二,supervised learning 算法阶段

      1. function set
      2. loss function
      3. minimize (2) to get the best function from (1)

      一,构建 pseudo 数据集阶段

      平滑度假设下的 pseudo label 获取算法1:cluster and then label

      1. 首先不论带标还是不带标,都当做无标数据点做 clustering。
      2. 做完之后,看每个 cluster 中哪种label的数据点最多,这个 cluster 的所有点就属于这个label。

      注意:clustering then label, 这个方法未必会有用啊,只有在你可以把同一个类 cluster 在一起的时候才有可能有用,如果是图像分类并且用 pixel 做clustering,就非常苦难,基于像素的距离做 clustering 本身就不太可能把同一类 cluster 在一起(同一个 class 可能在像素级别很不像,比如数字识别中像‘1’的‘4’和像‘9’的‘4’;不同 class 可能像素级别很像‘1’和‘4’,‘9’和‘4’),这第一步误差就这么大(各种分类的数据点混在一起),第二步不论怎么搞都不可能有太好的准确率。

      所以,如果要用这个 cluster then label 算法的话,你的 cluster 要非常强,也就是第一步的准确率要足够高。一般使用 deep autoencoder 中间的 code 做 cluster,而不是像素。

      平滑度假设下的 pseudo label 获取算法2:graph-based approach

      cluster, then label 是一种比较直觉的做法,另一种做法是通过引入 graph structure 来做。用 graph structure 来表达 connected by a high density path 这件事

      数据集映射成一个 graph, 每个数据都是图中的一个点。你要做的就是定义并计算两两之间的 similarity,这个similarity就是 graph 中两点之间的边(连线)。

      构建graph之后:

      1. 相连 --- 同类
      2. 不连 --- 不同类

      但是 similarity 也就是 “边” 很多时候不是那么明显的可以定义出来。如果是网页分类,那么网页之间的连接可以看做是一种similarity(医疗的网页应该不会连接到游戏网页),这很直觉。论文分类,论文的索引也可以用在“边”。但更多时候,你需要自己去定义。

      算法2 该如何构图

      graph construction: 该如何构造一张图呢?

      一, define the similarity \(s(x_i, x_j)\) between xi and xj.

      (可以基于像素或者更高阶的方法是用 deep autoencoder 来做相似度),李宏毅教授推荐使用 RBF function 定义相似度:

      \(s(x_i, x_j) = exp(-\gamma||x_i - x_j||^2)\)

      如果想使用欧几里得距离衡量相似度,最好使用 RBF function 作为 similarity function. 为什么呢?因为RBF是一个衰减很快的函数,只要 xi xj 距离稍微远一点相似度就急剧下降。只有具备这种性质,你才能构造出较好的 cluster,他虽然不能保证同簇的相似度高,但至少可以保证不同簇的相似度一定较低(跨簇的距离更大一些的话)。

      二, add edge

      方法1: 可以使用 KNN 建立“边”,每个点都与相似度最近的 K 个点相连: \(|V_{x_i->[x_j]_{j=1}^K}| = argmax_{D'\subset{D}, |D'|=K}s(x_i, x_j)\)

      方法2: 可以使用 e-Neighborhood 方法建立“边”,所有与 xi 相似度大于 e 的数据点都与 xi 建立连接。

      三,edge weightedge

      可以带有权重,他可以与相似度成正比。

      graph-based approach 方法的核心精神标签传染: graph 中的带标节点会依据“边”来传递自己的“标”,而且会一直“传染”下去。

      graph-based approach 方法的核心缺点数据量必须够大: 基于图的传染机制,如果数据不够多,没收集到位,那么本来相连的图由于数据量不够就可能断连,一旦断连就没法传染了。

      二,supervised learning 算法阶段

      1. function set --- defined by DNN
      2. loss function --- defined below
      3. optimize: train DNN

      我们基于以下认知和观察,来定义 loss functin 用以衡量 DNN 训练出的模型的好坏:

      1. 是否可以直接使用 cross-entropy,不加任何“佐料”?

      2. pseudo labels 是在近朱者赤近墨者黑的假设下产生的,不管产生的算法是什么,他都可以看成是一个函数,这个函数是如此特殊他就像是ground truth function(监督学习下,我们不知道的那个f) 一样产生了我们以为真实的标签,所以,我们需要做的是去逼近这样的函数

      3. 我们能做的是,通过 loss function 来“诱导”优化器往这个特殊的函数去优化。

      4. 我们像产生 pseudo labels 的算法那样利用数据集 x 的距离模拟 density 来增加限制,但我们可以通过对标签来近似这种限制,我们可以看到同一个类的标签之间差距很小类和类之间的标签差距很大,但是(构造 pseudo label 时用到的边的weight)同类数据点的边的weight很大,而不同类的数据点的边的weight很小。我们设置两点之间的标签差值乘以两点之间的边的权重作为限制, 希望他不要太大,以此来近似同类标签数据是高密度的这件事,虽然这是一种普杀式的限制 --- 他同样会限制类间标签的差异,但是考虑不同类两点的边权重很小,相乘之后影响较少,这种方法还是可以接受的。

      \(S = \frac{1}{2}\sum_{i,j}w_{i,j}(y_i - y_j)^2\)

      这个值越小,说明越平滑。

      进一步化简这个公式,用矩阵的形式书写(引入 Graph Laplacian):

      把带标和无标的(预测)标签拼在一起,形成一个长向量: \(\vec{y} = [...y_i, ..., y_j...]^T\)

      \(S = \frac{1}{2}\sum_{i,j}w_{i,j}(y_i - y_j)^2 = \vec{y}^TL\vec{y}\)

      L: (R+U) * (R+U) matrix

      L 可以写成两个矩阵相减: \(L = D - W\)

      • W 是两两节点之间的“边”的权重矩阵
      • D 是把 W 矩阵每行值相加放在对角线上,其余设为0.形成的矩阵。

      现在把这个 smoothness 公式与loss-fn 统合起来,形成一个新的代价函数:

      \(L(\Theta) = \sum_{x^r}C(y^r, \hat{y}^r) + \lambdaS\)

      这个 \(\lambdaS\) 有点像是一个正则项,你不仅仅要调整data 让那些 label data 与真正的 label 越接近越好,同时还要做到你预测的标签(包括代标数据和无标数据)要足够平滑。

      在 DNN 中 smoothness 的计算不一定是在 output layer 哪里才计算,而是在任何隐含层都可以(就像 L2 正则项可以加载任何层一样,keras API)可以从某一层输出接触一个 embedding layer 保证这个 embedding layer 是 smooth 的即可, 也可以完全套用 L2 的模式 --- 在每一个隐含层都加入这个正则项,要求每一层的输出都是 smooth 的。

      J.Weston, F.Ratle, "Deep learning via semi-supervised embedding," ICML, 2008

      注意事项1: 两个 similarity

      上面的算法框架中出现过两次 similarity 公式:

      1. 第一次在产生 pseudo 数据集部分的 graph-based 算法中。
      2. 第二次在监督式方法训练部分的 定义 loss function 中。

      其中产生 pseudo 数据集部分,‘similarity’ 是 “similarity of x” --- 计算两个点之间的距离(eg,RBF function)以此作为是否连线两点的依据,而距离作为边的权重。

      而在训练模型的部分,‘similarity’ 是 ‘similarity of y’ 我们用 y 之间的距离不宜过大来近似 'similarity of x'

    3. 什么样的情形可以使用 CNN

      记忆: 小抠样

      记忆:small, regions, subsampling

      • 某些pattern远小于整张图片

      这个是说 filter 一般采取小于整张图片的形状

      • 同样的pattern出现在图片的不同位置

      这个是说 filter 会逐行逐列移动扫描整张图片

      • subsampling 没有什么影响

      这个是说 pooling 是切割图片为多块,每块只取一格(1 pixel)

      关于 subsampling

      这里的意思是说,对于 featuremap 如果池化层 size = 2*2 , maxpooling 会只去最大的一个值(averagePooling 会取平均,但也只是一个值)而忽略其他值。这件事情的物理意义是:featuremap 是由 filter 扫描整张图片得到的,某个pattern(pattern较大,stride较小时)可能被多次扫描到并体现在 featuremap 中类似于 \([0,1,2,5,2,1,0]\),直接丢弃这种长尾效应对判定该某个pattern的位置以及匹配程度是没有任何影响的,他完全可以被最大的那个 5 hold住。

      长尾效应的取舍

      围棋(连续型pattern) vs. 图像识别(离散型pattern)

      图像识别就是这种最大值可以完全hold位置以及匹配程度信息的任务。可是对于其他任务比如围棋,他的核心任务虽然也是识别某个模式,但长尾效应尾部是有作用的。

      在图像识别中被识别的模式是独立的或者叫离散的 --- 一个圆的是形状是眼睛,3/4个圆就不是眼睛了。在围棋中 \([0,1,2,5,2,1,0]\) 那些\(0,1,2\)对判断当前棋子所处的状态是有影响的,甚至他可能更重视长尾效应中的

      结论

      所以,对于是否使用 maxpooling 层要根据你的具体任务来做具体对待:

      • 当任务识别的pattern‘’比较离散”---目标仅仅是寻找和定位pattern,别无其他 适合加上 maxpooling,让模型更专注,也让模型参数更少。

      • 当任务识别的pattern“比较连续”---长尾效应之尾会影响任务目标 最好不加 maxpooling,这样模型可以保存更多现场信息,让结果更精确。

      像围棋这种任务,显然就不能使用纯粹的CNN(包含 maxpooling),所以 alpha-go 中没有使用 maxpooling.

    4. 从可视化某个filter or neuron的激活度到deepdream

      google 的 deepdream 的核心思想就是借用最大化某个filter or neuron.不同的是 deepdream 不是单纯“最大化某filter or neuron的输出”,而是针对某让该层神经元原本输出大的更大,原本输出小的更小。,亦即,

      CNN of deepdream exaggerates what it sees

      assume output of k-th hidden layer is

      \(output_k = [3.9, -1.5, 2.3, ...]\)

      正的扩大,负的缩小

      \([3.9\Uparrow, -1.5\Downarrow, 2.3\Uparrow, ...]\)

      成为

      \(output_k' = [10, -5, 8, ...]\)

      以其为目标,找到 \(x^\star\)

      \(x^\star = argmin_x(output_k - output_k')\)

      从 deepdream 到 deepstyle

      之前都是只考虑了输出这件事,不论是 filter or neuron 还是某一层 hidden layer 我们关注的都是输出。现在如果我们把filter 和 filter 之间的 correlation 纳入考虑范畴。就可以实现风格迁移,这就是 deepstyle 的核心思想。

      1. 一个训练好的 CNN,输入某张图片,获取某一层 hidden layer 的输出(取内容);

      2. 一个训练好的 CNN,输入某张图片,获取某一层 hidden layer 的correlation(取风格);

      目标是:找到一个 \(x\),他经过CNN得到的相同层 hidden layer 的内容像步骤1中的;风格像步骤2中的。

    5. 从逻辑斯回归到神经网络

      logistic regression 有非常严格的使用限制,线性可分。

      logistic regression 虽然可以理解为对分布的近似,但其本质仍然是一个直线分界线,因为他也是要求出 w 和 b,使用的函数集仍然是 wx+b = y , 也就是要求数据集必须是线性可分的

      如果遇到线性不可分的数据集,可以考虑采用特征转换。但如何做特征转换呢?

      一个很好的方法是cascading logistic regression models --- 把很多个 logistic regression 接起来,就可以做到这件事情。这个东西有点像是在解释 NN,以及为什么他可以做到自动化 feature transform, 然后做分类。

      李老师由此引入 "Neuron" 概念:

      每一个逻辑斯模型的输入可以是其他逻辑斯模型的输出。

      他们可以串在一起形成一个网络,这个网络就叫做神经网络。

  40. Jun 2018
    1. 当运行我们的测试套件时,可能会发生测试结果不确定,因为测试套件依赖于系统中特定的文件可访问或具有某些特定的值。

      When running our test suite it may happen that the test result is nondeterministic because of the test suite relying on a particular file in the system being accessible or having some specific value.

  41. May 2018
    1. 前面提到OpenStack项目的目录结构是按照功能划分的,而不是服务组件,因此并不是所有的目录都能有对应的组件

      *cmd:这是服务的启动脚本,即所有服务的main函数。看服务怎么初始化,就从这里开始。

      • db: 封装数据库访问,目前支持的driver为sqlalchemy。
      • conf:Nova的配置项声明都在这里。
      • locale: 本地化处理。
      • image: 封装Glance调用接口。
      • network: 封装网络服务接口,根据配置不同,可能调用nova-network或者neutron。
      • volume: 封装数据卷访问接口,通常是Cinder的client封装。
      • virt: 这是所有支持的hypervisor驱动,主流的如libvirt、xen等。
      • objects: 对象模型,封装了所有实体对象的CURD操作,相对以前直接调用db的model更安全,并且支持版本控制。
      • policies: policy校验实现。
      • tests: 单元测试和功能测试代码。
    1. AMQP 是应用层协议,它在 client 和 server 端引入了消息中间件,解耦了 client 和 server 端,支持大规模下的消息通信

      AMQP 引入了消息中间件

      从RPC角度来看,Client端要远程调用Server端的函数

      从AMQP角度来看,Client要发起请求,产生请求消息,所以是Producer,Server端需要获取消息消费,才能进行相应的处理,所以是Consumer

    1. 最后一种使用插件的方式,相当于Drivers加载和Extensions加载的结合。它允许在给定的entry points组名下有同名的entry point,这样,在给定entry points组名和entry point名的情况下,hook式加载会加载所有找到的插件。

      Hook式加载

    2. ExtensionManager和DriverManager略有不同,它不需要提前知道要加载哪个插件,它会加载所有找到的插件。          要想调用插件,需要使用map方法,需要传给map一个函数,这里就是format_data函数,针对每个扩展都会调用该函数。format_data函数有两个参数,分别是Extension实例和map的第二个参数da

      不需要知道插件的具体名字,指定namespace='xxxx',则会加载xxxx entry point group下的所有插件(扩展)

      要调用插件 ==> manager.map(func, args) ==> namespace中的每个插件都会调用该函数func ==> manager.map(func, args) return 一个序列,序列中的每个元素就是每个插件调用回调函数的返回值

    3. 在stevedore中,有三种使用插件的方式:Drivers、Hooks、Extensions
      1. Drivers:一个名字对应一个entry point

      2. Hooks:一个名字对应多个entry point

      3. Extensions:多个名字对应多个entry point

    1. 示例中显示了两个不同的entry points的命名空间,“ceilometer.compute.virt"和"ceilometer.hardware.inspectors",分别注册有3个和1个插件.每个插件都符合"名字=模块:可导入对象”的格式,在“ceilometer.compute.virt"命名空间里的libvirt插件,它的具体可载入的实现是ceilometer.compute.virt.libvirt.inspector模块中的LibvirtInspector类.
      ceilometer.compute.virt =   
          libvirt = ceilometer.compute.virt.libvirt.inspector:LibvirtInspector  
          hyperv = ceilometer.compute.virt.hyperv.inspector:HyperVInspector  
          vsphere = ceilometer.compute.virt.vmware.inspector:VsphereInspector  
      
      ceilometer.hardware.inspectors =  
          snmp = ceilometer.hardware.inspectors.snmp:SNMPInspector
      
      • ceilometer.compute.virt 和 ceilometer.hardware.inspectors是两个命名空间
      • ceilometer.compute.virt 有 libvirt,hyperv,vsphere 三个插件,ceilometer.hardware.inspectors 有 snmp 一个插件
      • 插件的具体可载入实现是每个插件等号后面的具体类
    1. If the “path_info” variable is used at the end of the URL, Routes moves everything preceding it into the “SCRIPT_NAME” environment variable. This is useful when delegating to another WSGI application that does its own routing: the subapplication will route on the remainder of the URL rather than the entire URL. You still need the ”:.*” requirement to capture the following URL components into the variable.

      如果在URL的末尾使用“path_info”变量,则Routes会将其前面的所有内容移动到“SCRIPT_NAME”环境变量中。

      当委派另一个WSGI应用程序执行自己的路由时,这非常有用:子应用程序将路由剩余的URL而不是整个URL。

      您仍需要“:.*” requirement 才能将以下URL组件捕获到变量中。

      map.connect(None, "/cards/{path_info:.*}",
          controller="main", action="cards")
      # Incoming URL "/cards/diamonds/4.png"
      => {"controller": "main", action: "cards", "path_info": "/diamonds/4.png"}
      # Second WSGI application sees:
      # SCRIPT_NAME="/cards"   
      # PATH_INFO="/diamonds/4.png"
      
  42. Apr 2018
  43. Mar 2018
    1. 改掉壞習慣的關鍵就在於,並非「只是不做某件事」,如果只是不做,但需求還存在,那人如何去控制自己的欲望呢? 所以應該是「用新的一件事情替代」,讓原本的需求與欲望,被新的選擇滿足,那舊的壞習慣自然就消失。
    1. If you want to be successful as a developer (or anything else in life), you need to be consistent.

      2个月时间学习设计模式,然后再看自定义控件。 我的学习的连续性受影响,往往跟自己大脑活跃有关。总是在找更适合自己的方向。实质并不存在所谓更好的方向。长期扑在一个目标上非常重要。这是一种非常重要的能力。之前我已经算是学习过很多东西的人了,但却一无所成。原因就是急于求成,总是转换方向。关于这点,我还没有很好地分析总结。目前的《算法设计与分析》执行得就很好。这才是非常正确的学习方法。斯科特·杨的方法从本质上就是错误的。那种策略学习方法适合短期突破。并不适合成为一个行业的专家。成为一个行业的专家,需要耐心的投入。在这点上,李笑来可以说是极端强大。他意识到耐心的重要性。我自己总结为在开放的世界中保持自律和专注,对我来说更加贴切。

    2. need

      这条建议非常重要。东西是学不完的。但是如果专注于自己工作中所用的知识,提升工作效率,再逐步扩展,则是非常行之有效的方法。对我而言,能把心神视讯做好,已经很不错了。理解网易云信就是一个很大的工作量。学习自定义控件和设计模式,这个项目足矣。

  44. Nov 2017
  45. Aug 2017
  46. Jul 2017
    1. 我们最终全部切换到了G1,16年双十一线上MetaQ集群采用的也是这一组参数,基本上GC时间能控制在20ms以内(一些超大的共享集群除外)。

      阿里在消息中间件中全部启用G1GC,从16年双十一就开始。这对G1GC是个不错的案例