关于google:连续六天2020-Google-开发者大会官网集结

高兴回来了, 2020 谷歌开发者大会来了! 大会将于 11 月 16 日至 21 日在线上举办,SegmentFault 思否作为本次大会的单干媒体将对本次大会进行全程线上报道 14+产品线,50+精彩演讲,70+技术专家,间断六天科技盛会,每天线上多重互动惊喜! https://www.bilibili.com/vide...代码不止,精彩一直,马上关注“谷歌开发者服务号”,取得贴心大会揭示,不错过任何精彩霎时! 当初间隔大会开始还有 3 天工夫,快跟着谷歌开发者大会值日生提前 Get 大会精彩看点! 资深技术产品专家,解锁海量技术干货 首日大会主题演讲,带你全面理解谷歌赋能开发者的高效工具、翻新想法和社区反对。 接下来间断 5天,50 多场来自谷歌的演讲嘉宾和合作伙伴的精彩分享,从技术趋势到行业时机,从翻新工具到开发秘籍, 为你 360°全方位展现谷歌如何助力开发者发明更多美妙体验。 多元、平等与容纳,助力女性开发者发声 与今年一样,往年的开发者大会将继续关注开发者群体的开放性和多元化。以实际行动助力女性开发者发声和“被看见”,激励“她力量”继续爆发,独特摸索科技女性的有限可能。 点击查看更多 开发者社区活动,与搭档们一齐“嗨”享科技不止 谷歌始终助力开发者社区建设和技术学习,谷歌开发者大会就是开发者们相聚的大好时机。往年各地 GDG 社区也为开发者提供多样化的延展流动。点击当初报名加入基于开发者社区的流动吧!在社区互动过程中,还能通过首次公布的中文版 Codelabs 同步上手实际。 此外,你还能够在 SegmentFault 思否社区中找到更多精彩内容,快叫上气味相投的技术搭档,一起参加社区里热气腾腾的探讨吧! 浏览原文:http://developersummit.google...

November 13, 2020 · 1 min · jiezi

关于google:使用windowopen容易被谷歌浏览器拦截解决

应用的谷歌浏览器,应用window.open(),测试的时候,发现总是被拦挡,这这里记录下解决的办法。 当非用户触发的window.open()办法时,因为谷歌的平安机制,通常是会被拦挡的,除非人工勾销拦挡。比方上面两个例子:当用户没有间接收回window.open()申请的时候,不是间接调用,而是在回调函数里调用,则会被拦挡。 //不会被拦挡$('#btn').click(function () { window.open(url)});$('#btn').click(function () { $.ajax({ url: 'a/aa', success: function (url) { //会被拦挡 window.open(url); } })});解决方案 $('#btn').click(function () { //关上一个不被拦挡的新窗口 var newWindow = window.open(); $.ajax({ url: 'a/aa', success: function (url) { //批改新窗口的url newWindow.location.href = url; } })});网上找的办法 ,感激网友原文链接:https://blog.csdn.net/hongyua...

November 11, 2020 · 1 min · jiezi

关于google:小技巧Google搜索的10个小技巧部分适用于百度

这些杰出的提醒和技巧可像专业人士一样应用Google。 咱们通常会在须要寻找咱们想要的货色时应用Google搜寻(网站、电影、利用......任何货色)。此外,它还提供了一些暗藏的性能。 计时器和秒表假如,你须要为筹备好的演讲测量工夫,或者须要在专一的工作中劳动5分钟。只有Google stopwatch 或 timer 两种工具都提供全屏模式,如果你正在向观众应用投影仪屏幕,这将十分有用。 选色器只需应用Google color picker 或复制粘贴十六进制颜色代码(例如:-#0f9bff)即可取得色彩选择器工具,输出 rgb 50 50 80 之类的查问也能够实现雷同的目标。 仅齐全匹配当你输出一组词作为关键词时,Google的搜索算法会以一种奇妙的形式进行匹配,以便优先为你提供更多相干信息。然而在某些状况下,咱们只须要查找具备齐全匹配文本的内容,而不是让Google利用本人的匹配逻辑,通过用双引号将搜寻条件引起来,能够轻松实现此操作。 实用于百度等从搜寻中排除单词很显著,当你应用一组关键字时,Google会为你提供所有匹配的内容。但如果你不须要一些蕴含已知词的后果,你能够将这些后果从蕴含该已知词的预期后果中排除。上面的例子将显示后果中蕴含 Mercedes 但不蕴含已知词 Benz。 实用于百度等仅在指定域中搜寻个别的搜寻查问将可能从Google中的许多域中获取文档。如果须要,你能够搜寻一个非凡查问,该查问将仅带来属于特定域名的后果。只需在搜寻条件后面增加 site:<domain>。例如:site:.gov covid-19 实用于百度等单位转换工具你不须要独自的应用程序来转换标准单位,Google会帮忙你。只需输出你须要转换的内容,例如“6 inches to cm”或“Unit conversion”,而后输出值。 实用于百度等 货币转换这与单位转换工具十分类似,搜寻查问具备雷同的格局。例如:“5 usd to lkr”,或者在大多数状况下“5 usd”就足够了,因为Google晓得你的地位。 实用于百度等 我的IP地址是什么有人问你的ip地址要白名单?只有google“what is my ip”或者“my ip”就能够了。 世界时钟与生存在不同时区的人一起工作?那么,如果他们迅速询问“咱们能够在下午5点散会吗?”。如果你用“日本工夫下午5点”这样的查问进行搜寻,Google也会帮你解决这种状况,如下图所示。 在社交媒体上找人如果你须要在社交媒体上找到你的一个敌人,首先你须要去社交媒体平台,而后你可能进行搜寻。其实在Google的帮忙下,还有一个更快捷的办法。只需在敌人的用户名和Google后面应用@字符即可。 实用于百度 我感到好奇如果你搜寻“我感到好奇”,将会有令人诧异的问题和答案。此外,如果你按开展图标,将有很多乏味的游戏和其余有用的工具。 原文:https://medium.com/swlh作者:Shalitha Suranga

October 26, 2020 · 1 min · jiezi

关于google:国内注册google账号

google账号注册前言:筹备登google store更新一下juicessh,无奈更换手机号无奈验证登陆账号,各种找回都说“无奈证实该账号属于你”,间接再注册一个又通知“此手机号无奈用于验证”,真的是。。。好吧,换个办法注册 软件:qq邮箱注册:1.关上[qq邮箱]-[增加账户]-[Gmail] 2.点击左下的[创立账号] 3.输出各种账号信息 4.国家当然是大[中国] 5.输出手机号,期待验证实现就ok了

October 23, 2020 · 1 min · jiezi

关于google:美国司法部联合-11-个州对谷歌提起反垄断诉讼谷歌该诉讼存在严重缺陷

当地工夫周二,美国司法部联结 11 个州对谷歌提起了反垄断诉讼,称谷歌涉嫌利用其市场力量打击竞争对手,包含通过分销协定使其搜索引擎在手机和互联网浏览器上占据突出位置。 谷歌高级副总裁 Kent Walker 在其博客文章中指出美国司法部的诉讼存在重大缺点,反驳了这一指控,并称将全力做出辩护。 谷歌面临二十年来最大的反垄断诉讼这场诉讼侧重于搜寻和针对搜寻的广告,是近二十年来最大的一场反垄断案,与 1998 年针对微软的诉讼和 1974 年针对 AT&T 相当。 美国司法部的诉讼书中写道:“有数的广告商必须向谷歌领取搜寻广告的费用,美国消费者被迫承受谷歌的政策,个人隐私数据被应用。” 在明天早上的一次电话会议中,司法部官员强调了谷歌对搜寻市场的管制的规模和力量。他们提出“依据反垄断准则,谷歌的行为是非法的,必须予以禁止。” 谷歌领有或管制着搜寻分销渠道,约占美国一般搜寻查问的 80%。美国司法部技术高级顾问 Ryan Shores 说:“咱们正在要求法院突破谷歌在搜寻调配方面的控制力,以便可能放弃竞争和翻新。” 共和党参议员 Josh Hawley 指摘谷歌通过非法手段放弃市场影响力,并将这场诉讼称为“一代人中最重要的反垄断案。” 战斗刚刚开始,11 个州将陆续对谷歌提起诉讼针对谷歌的反垄断诉讼是在美国司法部和联邦贸易委员会开始对四家大型科技公司亚马逊、苹果、Facebook 和谷歌进行考察后进行的。 因为州总检察长正在对谷歌更宽泛的业务进行考察,因而可能还会有更多诉讼。预计以德克萨斯州为首的一组司法部长将在 11 月提起另一项针对数字广告的独自诉讼,而科罗拉多州的一组正在思考对谷歌进行更宽泛的诉讼。 美国司法部对谷歌提起诉讼的音讯传出后,其母公司股价上涨了 1%,伦敦 Mirabaud Securities 的技术媒体和电信钻研负责人 Neil Campling 市场上有人狐疑华盛顿国会议员是否真正采取行动。 其实七年前,美国联邦委员会就对谷歌进行了反垄断考察,过后的考察波及其搜寻性能,偏差于产品方面,但最终因为一些联邦委员会工作人员和律师的拥护达成了和解。 谷歌在海内也面临相似的法律挑战2019 年,欧盟就对谷歌处以了 17 亿美元的罚款,起因是其网站阻止其余竞争对手利用谷歌网站寻找广告商。 此前的 2018 年和 2017 年谷歌也被别离处以了 49 亿美元和 26 亿美元,别离是因为购物业务和阻止竞争对手应用其无线 Android 操作系统。 谷歌:美国司法部的诉讼存在“重大缺点” 对于被诉反垄断的音讯,谷歌也做出了回应称美国司法部的诉讼存在“重大缺点”,如果政府胜诉,用户将更难取得高级搜寻工具和价格合理的智能手机。 谷歌高级副总裁 Kent Walker 在其博文中写道:“美国反垄断法旨在促成翻新,帮忙消费者,而不是让竞争环境偏差某些特定的竞争对手,或者让人们更难取得他们想要的服务。” 针对美国司法部提出的无关分销协定的诉讼,谷歌示意,这些协定有助于补贴手机。依据这些协定,谷歌与 iPhone 制造商苹果公司等分销商分享搜寻广告支出。 ...

October 21, 2020 · 1 min · jiezi

关于google:谷歌宣布搜索引擎多个新-AI-功能听歌识曲-15-秒完成匹配

你有没有哼着一首歌却怎么也想不起歌名的状况?Google 公布了一些搜寻性能的更新,其中就有一个“听歌识曲”性能,当初用户能够通过哼唱 10 到 15 秒匹配到想找的歌曲了。 Google 称,其曾经通过人工智能和机器学习来改善用户体验,除了听歌识曲还更新了拼写和搜寻查问性能。 谷歌更新 AI 性能,提供多种搜寻反对Google 示意,听歌识曲性能目前在 iOS 上以英语提供,在 Android 上以大概 20 种语言提供,未来在两种平台上都会提供更多语言反对。 当初,用户能够通过点击 mic 图标并说:“这是什么歌”,对着手机向 Google 哼歌,机器学习算法将提供匹配的歌曲。 除了听歌识曲,谷歌更新的 AI 性能还涵盖了拼写和惯例的搜寻查问。包含应用深度神经网络的新拼写算法,Google 称该算法大大提高了其查问拼写错误的能力。 新的拼写算法能够帮忙了解拼写错误的单词的上下文,在 3 秒内找到正确的后果。同时,搜寻当初将为页面中的各个段落建设索引,以容许定位所搜寻文本块的特定地位。 神经网络也已被用于了解围绕趣味的子主题,Google 示意,当用户进行宽泛搜寻时,这将有助于提供更大的内容多样性。 举例来说,如果用户搜寻“家庭健身器材”,Google 会通过理解相干的副主题,比方器材的价格、品质或者占用空间等,在搜寻后果页面上显示更多内容,这项性能将在今年年底开始推出。 利用数据共享,搜寻后果更加多样化2018 年 Google 启动了 Data Commons Project,从美国人口普查局、劳工统计局和世界银行等机构收集数据,将这些数据投入使用,通过搜寻使信息更容易获取和应用。 比方,当你查问“芝加哥有多少人工作”这样的问题时,自然语言解决会将搜寻映射到 Data Commons 数十亿个数据点中的一个特定汇合,以一种可视化、易于了解的形式提供正确的数据。 Google 还指出,它的 BERT 语言了解零碎当初曾经被用于简直所有的英语查问,这有助于用户失去更高质量的问题后果。通过应用人工智能,它当初能够了解视频的深层语义,并自动识别关键点。不过,这个性能目前正在测试中,它将在视频中标记时刻。 图像查问可辨认 150 亿种事物Google 还发表了在学习和购物时应用 Google Lens 和加强事实的新办法。 通过拍摄照片或截图进行搜寻曾经可行,当初用户能够在 Google 利用或者 Android 上的 Chrome 点击并保留图片,而 Lens 会找到雷同或类似的我的项目,并提出设计办法。该性能行将在 iOS 上的 Google 利用中推出。 ...

October 16, 2020 · 1 min · jiezi

关于google:谷歌-Analytics-更新-4-项新功能借机器学习洞察更多关键数据

技术编辑:徐九丨公布自:思否编辑部 本周早些时候,Twilio 发表以 32 亿美元收买客户数据初创企业 Segment,彰显了品牌营销行业对于生产信息的饥渴水平。与此同时,搜寻巨头谷歌也发表了旗下 Google Analytics(谷歌剖析)服务的性能更新,以帮忙企业更好地理解客户 —— 尤其是与该公司的相干工具联合应用。 依据官方消息所示,Google Analytics 正在承受一项重大更新,其中蕴含 4 个新性能,旨在改善营销决策并取得更高的投资回报率。 “新” Google Analytics 中提供的 4 个要害性能是: 应用机器学习辨认趋势的更智能的洞察力与谷歌广告的更深层次整合以客户为核心的数据度量更细粒度的数据管制在一份申明中,谷歌援用了一项钻研,该钻研显示,营销人员目前很难取得客户的残缺信息,也很难从他们的数据中收集有用的见解。 谷歌对谷歌剖析的更新解决了这个问题,通过向营销人员提供他们须要的数据来进步投资回报率和制订长期打算: “为了帮忙你从市场营销中取得更好的长期投资回报率,咱们正在创立一个新的、更智能的谷歌剖析,它建设在咱们去年在 beta 版中推出的 App + Web 属性的根底上。它的外围是机器学习,能够主动显示有用的洞察力,让你齐全理解各种设施战争台上的客户。” 在介绍新性能的同时,谷歌测量、剖析与购买平台副总裁 Vidhya Srinivasan 还在博客文章中提到了寰球衰弱危机带来的一些品牌动态变化,并且心愿通过增加新性能来帮忙营销人员达成既定的指标。 实现这一愿景的其中一种办法,便是将剖析工具与机器学习性能交融到一起,以帮忙突出显示某些数据。对于平台营销人员来说,这点是相当重要的。 Srinivasan 补充道:“Google Analytics 以机器学习为核心,可能主动浮出实用的见解,并让您全面理解跨设施和平台的客户”。 换言之,营销人员可借助机器学习来拜访他们最关怀的那局部信息,比方哪些类型的客户最有可能选购、又有哪些类型的客户最有可能流式,进而制订相干策略来晋升转化率。 只需依照阐明进行操作,便可为营销人员提供一种办法来掂量其生命周期里每个客户、或一组客户的转化数据。 此外联合 Google 广告、YouTube、其它工具(比方 Gmail 和搜寻)、以及非谷歌渠道,新办法还可满足客户的长期营销需要。 最初,谷歌试图在无奈应用 Cookie 和其它追踪软件的状况下,借助相干模型来填补信息上的空白。以便在更严格的隐衷保障之下(比方欧洲 GDPR 和加州的 CCPA),对相干数据进行剖析和验证。

October 15, 2020 · 1 min · jiezi

关于google:科技巨头谷歌涉嫌垄断或被拆分为多家公司

来自外媒音讯,美国司法部和州检察官正在考察谷歌涉嫌违反反垄断的法行为,并且他们正在思考是否强制谷歌发售Chrome浏览器,及其局部利润丰富的广告业务。 有知情人士说,对于如何解决Google对价值1,623亿美元的寰球数字广告市场的管制的探讨仍在进行中,尚未做出最终决定。然而检察官要求广告技术专家,行业竞争对手和媒体发行商采取可能的措施来减弱Google的控制力。 美国司法部预计将在将来几周开始反垄断法律奋斗的筹备,这可能为几十年来第一次法院下令遣散一家美国公司铺平道路。毫无疑问强制销售将会对谷歌公司形成重大挫折。 如何遏制谷歌「垄断」在考察中,美国司法部和州总检察长已向谷歌「竞争对手」和其余第三方征求他们对谷歌应该发售哪些业务的认识。知情人士说,他们还询问是否有任何现有的竞争者不应该成为潜在的买家。律师们还询问,广告技术市场之外的谷歌的任何业务是否都应该被列为潜在的销售指标,毫无疑问其中一部分潜在买家会抉择谷歌的Chrome浏览器。 谷歌于2008年推出了该浏览器,当初Chrome在美国市场上占有最大的份额。竞争对手指摘这家搜寻巨头利用其对用户网络历史的拜访权限来辅助其广告业务。 Google示意将在将来解决这个问题,他们会在两年内逐渐淘汰其Chrome浏览器中应用第三方Cookie(浏览器用来跟踪对网站的拜访的小文件)来加强消费者隐衷。谷歌本人公布的数据表明,打消这些Cookie会使在显示在线广告的新闻媒体上的广告支出缩小多达62%,尽管其余浏览器(如Apple的Safari和Mozilla Foundation的Firefox)曾经进行了cookie,但事实证明谷歌的Chrome浏览器的损失会更大,数据显示在美国将近60%的台式机和37%的挪动设施都在应用它。 美国众议院司法委员会公布的一份反垄断报告显示:Chrome的市场份额使谷歌能够“无效地设定行业标准”,“谷歌基于广告的商业模式可能会引发无关谷歌抉择引入的规范是否最终旨在次要服务于谷歌利益的疑难。” “市场参与者放心,只管Google淘汰了其余数字广告公司所需的第三方Cookie,但谷歌依然能够依附整个生态系统收集数据。” 面对这个问题谷歌示意,正在与广告行业及其他行业单干,开发代替cookie的产品。例如新零碎Turtledove,该零碎中的广告拍卖将在浏览器内进行,而不是将数据发送到内部服务器。谷歌认为这将更好地爱护用户隐衷,因为这样一个人的数据永远不会来到他的计算机或电话。但广告行业对谷歌的态度示意狐疑。 谷歌对凋谢网络广告根底技术的管制能够追溯到2007年对DoubleClick的收买,DoubleClick是一家帮忙网站和广告客户投放在线广告的公司。联邦贸易委员会过后对该收购案进行了审查,并以4比1投票通过。 自收买DoubleClick以来,谷歌还挖走了其余广告技术公司,包含挪动广告公司Admob、广告拍卖商Invite Media以及广告买家平台AdMeld。这些交易帮忙谷歌创立了一套技术,涵盖了购买和销售在线展现广告的每个阶段。参加反垄断对话的人士示意,要求谷歌解除其中一些收买,或者在买方或卖方市场上发售其业务,都是正在探讨的可能性之一。 假如对谷歌进行拆分来自华盛顿邮报的作者Aram Zucker-Scharff曾对拆分谷歌进行了构想,偏心、可继续、合乎逻辑、为消费者服务四个准则口头,最终在构想中,谷歌被拆分为八大公司: Drive——业余服务部门该部门还将纳入谷歌的整个工具集——包含文档(Google Docs)、表格(Google Sheets)、在线编程工具(如Google Colaboratory)、环聊(Hangouts)、任何其余依然沉闷的聊天/会议应用程序,以及最重要的Gmail和日历。 NewsTube——媒体部门YouTube和Google News无从选择,将不得不向任何服务提供商凋谢其广告零碎,陈说技术要求,并与广告技术提供商单干,推动广告技术畛域整体转向更无效的视频聚焦技术。 NewsTube部门将是围绕新闻和相干媒体的多平台、多格局的聚合,实践上这是一种经营性业务。 搜寻产品将须要批改其解决新闻的形式,使其成为用户管制的RSS阅读器格调的产品,并向心愿提供编辑-聚合产品(editorial-aggregation-as-product ,EAaP)的组织凋谢其架构。如果搜寻部门心愿他们的新闻产品由Google News运作,能够,但其余公司,比方Flipboard和《纽约时报》,也应该能够参加搜寻部门的新闻聚合空间。聚合成为搜寻外部的竞争空间,搜寻部门将不得不制订清晰的规定,这可能会给其余EAaP供应商提供机会。此外,它还为不同类型的新闻聚合产品提供了机会。 游戏和钱——应用程序/交易部门Google Pay 搜寻、剖析、财经、翻译、金融和服务器——搜寻和工程服务部门没有服务器的翻新,搜寻(Google Search)引擎就无奈工作,因为好的搜寻老本十分高,须要大量的CPU和存储空间。出于隐衷和平安的起因,剖析(Google Analytics)须要与广告业务拆散,这里抉择了剖析而不是广告纳入该部门,是因为它们都应用雷同的逻辑——搜寻排名来收集数据,这是最天然的。翻译(Google Translate)在这里显然是适合的,了解网页的相关性须要翻译工具,以填补个性化差别。翻译和剖析也属于同一类,因为它们都波及到对网页的解析。没有搜寻,地图(Google Maps)将成为一个无用的产品,而没有地图,搜寻业务胜利的可能性将大大降低。财经(Google Finance)也是如此。 手机、Chromebook、Nest、Google Home和VR等设施——Android和硬件部门Chrome、AMP、Identity以及Labs——Chrome、X、主动驾驶汽车和其余产品部门,又称Chrome实验室AdX——广告交易部门该部门将包含所有谷歌目前的广告投标和交易产品,包含AdX,EDBA,GDN,DV360。这意味着治理招标、广告交易、了解用户数据……的所有技术。 Double Click——广告服务部门这个部门将为其余平台提供全副广告服务,包含当初的谷歌广告管理器(Google Ad Manager,又名DFP):AdMob、谷歌营销管理器和AdWords。 因为谷歌是寰球最大的搜寻企业,并且此次报告也指出「其在搜寻后果中优先展现本人的产品来打击竞争对手」。而且谷歌的安卓手机零碎,占据了寰球87%的市场份额。但把谷歌拆分绝对其余几家公司却更容易,次要是谷歌的一些业务不是很具备关联性,比方谷歌做得最好的谷歌地图、谷歌搜寻、安卓手机操作系统、谷歌领取,每家独自拆分进来都是很大的业务,每家独自拆分进来都不会有生存问题。这不像苹果公司,如果把苹果手机和AppStore拆散的话,那AppStore的生存就是个问题。所以对于谷歌公司的垄断考察相比其余几家科技巨头仿佛更为「严厉」,谷歌公司很有成为第一家被拆分的科技巨头。

October 12, 2020 · 1 min · jiezi

关于google:Google-承诺对-Android-12-进行改进给予程序开发者更多自由

9 月 28 日,Google 产品治理副总裁 Sameer Samat 公布博客称,听取开发人员反馈后对 Android API 和 Play 进行了更新。 反馈内容如下:反对开发人员抉择不同平台(挪动,PC和控制台)上的多个利用商店散发利用说明对于谁须要应用Google Play计费零碎以及谁不须要应用Google Play计费零碎的政策;确保平台上所有应用程序(包含第一方和第三方应用程序)的平等待遇;容许开发人员间接与客户建立联系并进行交换;反对翻新并采取进步用户应用体验的新技术。在新版的 Android 12 中,开发者能够抉择多个利用商店公布本身的应用程序,无论是第一方还是第三方应用程序都有平等的待遇,只有程序做得足够杰出,即便是Google的竞争对手,精选中也会对利用进行举荐。 对于 Google Play 的免费,Sameer Samat 示意:所有在Play程序中销售数字商品的开发人员都必须应用 Google Play 的计费零碎,当开发人员向客户收取下载其应用程序的费用或者发售应用程序内的数字商品时,依照肯定的购买比例收取领取服务费。 须要进行免费的内容包含但不限于: 商品(例如虚构货币、额定生命、额定游戏工夫、附加道具、角色和头像);订阅服务(例如健身、游戏、交友、教育、音乐、视频和其余内容订阅服务);利用性能或内容(例如利用的无广告版本或收费版本中未提供的新性能);以及云软件和服务(例如数据存储服务、企业办公软件和财务管理软件)。往年因为非凡起因,许多企业须要通过一些应用程序把业务线上化,Google 对于这类程序的免费问题回应道:在接下来的12个月中,这类业务无需恪守 Google Play 中的付款政策,但在明年将会从新评估状况,制订其付款政策。 开发人员与客户沟通的问题,Google 团体产品经理 Mrinalini Loew 在博客中进行了答复称,开发人员能够通过发送电子邮箱或者其余形式,间接与客户进行沟通,能够对用户提供优惠政策、间接为用户退款,并且能够通过其余利用商场平台为客户提供不同版本的应用程序、性能和定价模型。 Android 12 更新后,只有应用程序不会毁坏 Android 已采取的安全措施,其日后的应用、公布、发售都会更为自在,并且能依据开发者与用户的沟通自行调节,用户应用第三方应用程序也会更为不便。

September 29, 2020 · 1 min · jiezi

关于google:Docsify-如何添加-Google-analytics-或者其他的网站跟踪代码

心愿理解你的文档被拜访了多少次或者有如许受欢迎吗? 你可用在你的 Docsify 我的项目中增加 Google analytics 或者其余的网站跟踪代码。 找到你的 Docsify 文档中,找到 index.html 这个文件。 而后非常简单的将跟踪代码拷贝到最上面 之前就能够了。 而后将代码提交到 GitHub 的仓库中,如果你曾经设置到了 github page 的话,那么零碎会主动帮你部署。 提交后,你会看到上面的代码: https://github.com/cwiki-us-docs/spring-docs/blob/master/index.html 屏幕的截图如下: 例如,咱们拜访上面的文档:https://cwiki-us-docs.github.io/spring-docs/#/ 而后你能够对你生产的页面链接进行拜访,在拜访的同时,你能够到 Google analytics 页面中查看拜访的用户,以确定代码失效。 通过下面的设置,你就能够晓得你的内容被拜访了多少次。

September 26, 2020 · 1 min · jiezi

关于google:Google-为什么把几十亿行代码放在一个库

本文原文链接:ruanyifeng.com/blog/2016/07/google-monolithic-source-repository.html,如有侵权,则可删除。00 前言《ACM通信》有一篇论文《为什么 Google 要把几十亿行代码放在一个库?》,作者是谷歌基础设施小组的工程师。作者具体讲述了Google的代码为什么全副放在一个库外面。 01 概述谷歌最早应用 CVS 进行代码治理,1999年改为 Perforce。那时是一台 Perforce 主机,加上各种缓存机。 过后,全公司的代码就在一个仓库外面,起初始终沿用这种做法。因为规模一直增长,Perforce 曾经无奈满足需要,谷歌就开始应用本人开发的版本管理系统 Piper。 Piper 架设在谷歌本人的分布式数据库系统(以前叫 Bigtable,当初改名 Spanner)之上,散布在全世界10个数据中心,保障世界各地的谷歌员工都有良好的访问速度。 目前,这个代码仓库蕴含10亿个文件、3500万次提交记录,大小为86TB,用户达到几万人。工作日每秒有50万次申请,顶峰时80万次,大部分来自主动构建和测试零碎。 谷歌90%以上的代码,放在 Piper 外面。对于那些开源的、须要内部合作的我的项目,代码放在 Git,次要是 Android 我的项目和 Chrome 我的项目。Git 的特点是,所有历史记录都会复制到用户的本地机器,所以不适宜大型项目,必须拆分成更小的库。以 Android 为例,该我的项目一共蕴含800多个独立的仓库。 02 Piper 的设计2.1 构造整个仓库采纳树状构造。每个团队有本人的目录。目录门路就是代码的命名空间。每个目录都有负责人(owner),他负责批准该目录的文件变动。 2.2 权限管制Piper 反对文件级别的权限管制。99% 的代码对所有用户可见,只有少部分重要的配置文件和秘密的要害业务,设有拜访限度。 如果机密信息不小心放上了 Piper,文件能够被疾速革除。并且,所有的读写都有日志,管理员可能查到谁读过这个文件。 2.3 工作流Piper 的工作流(workflow)如下图。 开发者先创立文件的本地拷贝,这叫做”工作区”(workspace)。实现开发后,工作区的快照共享给其余开发者进行代码评审。只有通过了评审,代码能力合并到地方仓库。 2.4 客户端大多数开发者通过一个叫做 CitC 的客户端,拜访 Piper。开发者通过 CitC 浏览和同步 Piper 上的文件,然而编辑和批改是在本人工作区,外面只保留有变动的文件(一个工作区个别不超过10个文件)。CitC 带有云贮存机制,每个工作区就是云上的一个目录。通过代码评审当前,这些文件才从 Citc 合并进 Piper。 2.5 骨干开发Google 采纳”骨干开发”(trunk-based development)。代码个别提交到骨干的头部。这样保障了所有用户看到的都是同一份代码的最新版本。 “骨干开发”防止了合并分支时的麻烦。谷歌个别不采纳分支开发,分支只用来公布。大多数时候,公布分支是骨干某个时点的快照。当前的除错和性能加强,都是提交到骨干,必要时 cherry-pick 到公布分支。与骨干长期并行的开发分支,在谷歌极少见。 因为不采纳"分支开发",谷歌引入新性能,个别在代码中应用开关管制。这防止了另起一个分支,也使得通过配置切换性能变得容易,一旦新性能产生故障,很容易切换回旧性能。等到新性能稳固,再彻底删除旧代码。谷歌有相似A/B测试的路由算法,评估代码的体现,因为存在配置开关,这种测试很容易实现。 ...

September 9, 2020 · 1 min · jiezi

关于google:使用谷歌搜索引擎

谷歌——程序员必备工具。然而谷歌引擎被墙了,边疆是用不了的。 1.下载Ghelper:官网地址 2.增加扩大 把Ghelper文件夹拖过去,或者是增加已解压文件。之后就能顺利应用谷歌搜索引擎了。

August 17, 2020 · 1 min · jiezi

关于google:每年-45-亿美元Google-续签火狐默认搜索引擎-3-年

刚刚发表因疫情影响打算裁员 250 人的 Mozilla 将与 Google 续约 3 年,确保 Google 作为 Firefox(火狐)浏览器内默认搜索引擎至 2023 年。 续约的决定本来定于在往年 11 月左右发表,因为单方的合约将于今年年底到期。据估计,这笔交易的价值在每年 4 亿到 4.5 亿美元之间。 与谷歌单干占其全年收入 95%Mozilla 的大部分支出都来自 Google 之类的搜索引擎公司,包含俄罗斯的 Yandex 和中国的百度等等。这些公司向 Mozilla 付费,成为 Firefox 的默认搜索引擎。 Mozilla 的长期打算是从基于订阅的服务中建设本人的支出流,并缩小对 Google 搜寻交易的依赖。早在 2006 年,这两家公司就开始了单干,只在 2014 年到 2017 年之间中断了 3 年,过后 Mozilla 与雅虎签订了相似的协定。与 Google 的单干从来是 Mozilla 全年收入的重头戏,占其全年估算的 75% 至 95%。 裁员 250 人,敞开威逼治理平安团队上周,Mozilla 首席执行官 Mitchell Baker 在博客中公开写道:“新冠疫情极大地影响了咱们的支出,公司将专一于开发“人们喜爱并想要应用的产品,从新关注社区并确定新的支出起源。”据理解,往年 1 月,Mozilla 就曾经辞退了约 70 名员工。 ...

August 17, 2020 · 1 min · jiezi

关于google:谷歌新工具大幅度提升-Chrome-OS-上构建-Android-应用的效率

技术编辑:宗恩丨发自 思否编辑部 SegmentFault 思否报道丨公众号:SegmentFault 谷歌近日推出了一个新的网站ChromeOS.dev,旨在帮忙开发者在 ChromeOS(基于Linux)操作系统构建Android利用。通过更新,谷歌也让在Chromebook(谷歌推出的搭载ChromeOS的笔记本电脑)上构建和测试Android利用变得更加容易。 谷歌发言人通知咱们,新的ChromeOS.dev网站目前有英语和西班牙语版本,旨在「通过技术资源/教程、产品布告、代码样本等,帮忙开发者最大限度地进步他们在该平台上的能力」。正如谷歌在布告中所指出的那样,在上个季度,Chromebook的单位销量同比增长127%,而个别笔记本的销量只有40%。 为了帮忙Android开发者在Chromebook上实现所有的工作,谷歌当初在Chrome OS上提供了残缺的Android模拟器,开发者能够间接在Chromebook上测试利用。网站开发团队还使在Chrome OS(M81及更新版本)上部署利用变得更加容易。开发者当初能够间接部署和测试利用,而无需应用开发者模式或通过USB连贯设施。 除了这些以Android为核心的更新之外,谷歌还推出了一个小而受欢迎的Linux测试版更新,重点是终端。有了这个,Chrome OS上的Linux当初具备改良的终端,其中包含标签、快捷键、主题和从新设计的终端设置等。 Android Studio 也失去了一个小的更新,新的Primary/Detail流动模板当初更好地反对为Chromebook、平板电脑和可折叠设施等大屏幕设施构建利用。 传送门:https://chromeos.dev/en

August 13, 2020 · 1 min · jiezi

关于google:谷歌新工具大幅度提升-Chrome-OS-上构建-Android-应用的效率

技术编辑:宗恩丨发自 思否编辑部 SegmentFault 思否报道丨公众号:SegmentFault 谷歌近日推出了一个新的网站ChromeOS.dev,旨在帮忙开发者在 ChromeOS(基于Linux)操作系统构建Android利用。通过更新,谷歌也让在Chromebook(谷歌推出的搭载ChromeOS的笔记本电脑)上构建和测试Android利用变得更加容易。 谷歌发言人通知咱们,新的ChromeOS.dev网站目前有英语和西班牙语版本,旨在「通过技术资源/教程、产品布告、代码样本等,帮忙开发者最大限度地进步他们在该平台上的能力」。正如谷歌在布告中所指出的那样,在上个季度,Chromebook的单位销量同比增长127%,而个别笔记本的销量只有40%。 为了帮忙Android开发者在Chromebook上实现所有的工作,谷歌当初在Chrome OS上提供了残缺的Android模拟器,开发者能够间接在Chromebook上测试利用。网站开发团队还使在Chrome OS(M81及更新版本)上部署利用变得更加容易。开发者当初能够间接部署和测试利用,而无需应用开发者模式或通过USB连贯设施。 除了这些以Android为核心的更新之外,谷歌还推出了一个小而受欢迎的Linux测试版更新,重点是终端。有了这个,Chrome OS上的Linux当初具备改良的终端,其中包含标签、快捷键、主题和从新设计的终端设置等。 Android Studio 也失去了一个小的更新,新的Primary/Detail流动模板当初更好地反对为Chromebook、平板电脑和可折叠设施等大屏幕设施构建利用。 传送门:https://chromeos.dev/en

August 13, 2020 · 1 min · jiezi

关于google:谷歌将用全球安卓手机打造地震监测网中国除外

技术编辑:宗恩丨发自 思否编辑部 SegmentFault 思否报道丨公众号:SegmentFault 谷歌正在创立一个寰球范畴内的由安卓手机驱动的地震警报系统,该零碎的第一局部在近日推出。当你抉择退出这个打算时,你的安卓手机中的加速度计将成为检测地震算法的一个数据点。当检测到地震时手机将主动向可能受到地震影响的人收回正告。 之所以能实现如此巨大的打算有几点起因: 全世界范畴内领有数量惊人的安卓手机安卓手机具备加速度计「能够检测是否旋转」的性能,安卓零碎应用来自该传感器的数据来查看手机是否在晃动。并且科研人员设计了优良的大数据算法,谷歌能够应用贝叶斯过滤器和其余算法将这些数字转换为足够精确的地震数据,以收回正告警报。谷歌当初正分阶段推出该零碎。首先谷歌正与美国地质调查局和加州紧急服务办公室单干,向该州的安卓用户发送该机构的地震警报,不过现阶段的次要检测伎俩还是通过地震仪零碎。 谷歌打算的第二和第三阶段将改由安卓手机来驱动。在第二阶段,谷歌将依据其从Android手机上检测到的数据,在谷歌搜寻中显示本地化的地震后果。当你感觉到地震时你能够去谷歌搜寻上看你左近是否产生了地震。 最初阶段,谷歌将开始被动向寓居在没有基于地震仪的预警系统地区的人们发送地震预警。 将来谷歌心愿把地震检测零碎变成一个能够调用的API。那么苹果手机也能够自在应用它。而且其余智能设施也能够调用这个API。 比方能够主动敞开煤气阀门,关停医疗程序,关上消防站的门,终止飞机起飞。不过这样一个零碎的危险和保护老本都有些高,谷歌还必须付出大量致力对它进行调整。 尽管这个地震监测零碎能够在大部分安卓手机上工作,但离这项服务进入中国还有十分长的一段时间,因为中国的安卓手机并不能应用谷歌的服务....... 参考原文:https://www.theverge.com/2020...

August 12, 2020 · 1 min · jiezi

关于google:谷歌将用全球安卓手机打造地震监测网中国除外

技术编辑:宗恩丨发自 思否编辑部 SegmentFault 思否报道丨公众号:SegmentFault 谷歌正在创立一个寰球范畴内的由安卓手机驱动的地震警报系统,该零碎的第一局部在近日推出。当你抉择退出这个打算时,你的安卓手机中的加速度计将成为检测地震算法的一个数据点。当检测到地震时手机将主动向可能受到地震影响的人收回正告。 之所以能实现如此巨大的打算有几点起因: 全世界范畴内领有数量惊人的安卓手机安卓手机具备加速度计「能够检测是否旋转」的性能,安卓零碎应用来自该传感器的数据来查看手机是否在晃动。并且科研人员设计了优良的大数据算法,谷歌能够应用贝叶斯过滤器和其余算法将这些数字转换为足够精确的地震数据,以收回正告警报。谷歌当初正分阶段推出该零碎。首先谷歌正与美国地质调查局和加州紧急服务办公室单干,向该州的安卓用户发送该机构的地震警报,不过现阶段的次要检测伎俩还是通过地震仪零碎。 谷歌打算的第二和第三阶段将改由安卓手机来驱动。在第二阶段,谷歌将依据其从Android手机上检测到的数据,在谷歌搜寻中显示本地化的地震后果。当你感觉到地震时你能够去谷歌搜寻上看你左近是否产生了地震。 最初阶段,谷歌将开始被动向寓居在没有基于地震仪的预警系统地区的人们发送地震预警。 将来谷歌心愿把地震检测零碎变成一个能够调用的API。那么苹果手机也能够自在应用它。而且其余智能设施也能够调用这个API。 比方能够主动敞开煤气阀门,关停医疗程序,关上消防站的门,终止飞机起飞。不过这样一个零碎的危险和保护老本都有些高,谷歌还必须付出大量致力对它进行调整。 尽管这个地震监测零碎能够在大部分安卓手机上工作,但离这项服务进入中国还有十分长的一段时间,因为中国的安卓手机并不能应用谷歌的服务....... 参考原文:https://www.theverge.com/2020...

August 12, 2020 · 1 min · jiezi

关于google:谷歌将用全球安卓手机打造地震监测网中国除外

技术编辑:宗恩丨发自 思否编辑部 SegmentFault 思否报道丨公众号:SegmentFault 谷歌正在创立一个寰球范畴内的由安卓手机驱动的地震警报系统,该零碎的第一局部在近日推出。当你抉择退出这个打算时,你的安卓手机中的加速度计将成为检测地震算法的一个数据点。当检测到地震时手机将主动向可能受到地震影响的人收回正告。 之所以能实现如此巨大的打算有几点起因: 全世界范畴内领有数量惊人的安卓手机安卓手机具备加速度计「能够检测是否旋转」的性能,安卓零碎应用来自该传感器的数据来查看手机是否在晃动。并且科研人员设计了优良的大数据算法,谷歌能够应用贝叶斯过滤器和其余算法将这些数字转换为足够精确的地震数据,以收回正告警报。谷歌当初正分阶段推出该零碎。首先谷歌正与美国地质调查局和加州紧急服务办公室单干,向该州的安卓用户发送该机构的地震警报,不过现阶段的次要检测伎俩还是通过地震仪零碎。 谷歌打算的第二和第三阶段将改由安卓手机来驱动。在第二阶段,谷歌将依据其从Android手机上检测到的数据,在谷歌搜寻中显示本地化的地震后果。当你感觉到地震时你能够去谷歌搜寻上看你左近是否产生了地震。 最初阶段,谷歌将开始被动向寓居在没有基于地震仪的预警系统地区的人们发送地震预警。 将来谷歌心愿把地震检测零碎变成一个能够调用的API。那么苹果手机也能够自在应用它。而且其余智能设施也能够调用这个API。 比方能够主动敞开煤气阀门,关停医疗程序,关上消防站的门,终止飞机起飞。不过这样一个零碎的危险和保护老本都有些高,谷歌还必须付出大量致力对它进行调整。 尽管这个地震监测零碎能够在大部分安卓手机上工作,但离这项服务进入中国还有十分长的一段时间,因为中国的安卓手机并不能应用谷歌的服务....... 参考原文:https://www.theverge.com/2020...

August 12, 2020 · 1 min · jiezi

关于google:那些你用得上的镜像网站

国外的某些网站常常打不开或很慢,于是就有了做代理的镜像网站,举荐几个罕用的镜像网站,你可能用得上。 谷歌Google镜像就是一个代理拜访谷歌的网站,比方 http://ac.scmor.com/ http://scholar.hedasudi.com/ ,自从用谷歌当前搜寻效率快多了,倡议你看看我之前的总结那些你可能不晓得的搜寻奇技淫巧,不过镜像只能应用不能登录谷歌账号。 谷歌学术https://gfsoso.99lb.net/ https://cc.gufenxueshu.com/scholar/ https://www.gycc.com/?q=5g 搜寻5g的后果比照谷歌学术的后果https://scholar.google.com.hk... 维基百科维基百科的中文版万维百科,不过数据没有官网全 https://www.wanweibaike.com/ https://zh.wikipedia-mirror.o...:%E9%A6%96%E9%A1%B5维基百科还提供数据下载 https://dumps.wikimedia.org/z... GitHubGitHub有时候clone很慢,如果你有代理ip能够 alias gg='http_proxy=127.0.0.1:1087 https_proxy=127.0.0.1:1087',而后 gg git clone xxx GitHub镜像网站有 https://github.com.cnpmjs.org/ https://git.azurewebsites.net/ 谷歌商店https://pictureknow.com/#/ext... https://www.gugeapps.net/http://www.cnplugins.com/top https://www.crx4chrome.com/https://www.chromefor.com/ 对于Chrome扩大之前写过那些实用的 Chrome 扩大神器,装置Chrome扩大能够应用镜像商店下载crx文件而后手动装置,不过有些扩大可能没有及时同步。 油管最近李子柒很火,看看她在油管的视频吧,不过这个网站不反对中文搜索。 SCI-Hub做科研的人用得着 http://tool.yovisun.com/scihub/另外举荐一个Sci-Hub一键全文下载的Chrome扩大 ,地址 https://chrome.google.com/web... npmhttp://npm.taobao.org/ 这是一个残缺 npmjs.org 镜像,你能够用此代替官网版本(只读),同步频率目前为 10分钟 一次以保障尽量与官网服务同步。npm config set registry "https://registry.npm.taobao.org" golanggolang.org 打不开,你能够用https://golang.google.cn/dl/...://gomirrors.org/ 。 命令行代理有 https://goproxy.io/ https://goproxy.cn/ 命令行执行export GOPROXY=https://goproxy.io composerphp.net 中文镜像 http://php.p2hp.com/阿里云 Composer 全量镜像 https://developer.aliyun.com/... 能够通过prestissimo composer global require hirak/prestissimo 来治理composer镜像。 pypi清华大学开源软件镜像站 https://mirror.tuna.tsinghua.... 应用 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple some-package装置Python包 ...

July 28, 2020 · 1 min · jiezi

关于google:那些你用得上的镜像网站

国外的某些网站常常打不开或很慢,于是就有了做代理的镜像网站,举荐几个罕用的镜像网站,你可能用得上。 谷歌Google镜像就是一个代理拜访谷歌的网站,比方 http://ac.scmor.com/ http://scholar.hedasudi.com/ ,自从用谷歌当前搜寻效率快多了,倡议你看看我之前的总结那些你可能不晓得的搜寻奇技淫巧,不过镜像只能应用不能登录谷歌账号。 谷歌学术https://gfsoso.99lb.net/ https://cc.gufenxueshu.com/scholar/ https://www.gycc.com/?q=5g 搜寻5g的后果比照谷歌学术的后果https://scholar.google.com.hk... 维基百科维基百科的中文版万维百科,不过数据没有官网全 https://www.wanweibaike.com/ https://zh.wikipedia-mirror.o...:%E9%A6%96%E9%A1%B5维基百科还提供数据下载 https://dumps.wikimedia.org/z... GitHubGitHub有时候clone很慢,如果你有代理ip能够 alias gg='http_proxy=127.0.0.1:1087 https_proxy=127.0.0.1:1087',而后 gg git clone xxx GitHub镜像网站有 https://github.com.cnpmjs.org/ https://git.azurewebsites.net/ 谷歌商店https://pictureknow.com/#/ext... https://www.gugeapps.net/http://www.cnplugins.com/top https://www.crx4chrome.com/https://www.chromefor.com/ 对于Chrome扩大之前写过那些实用的 Chrome 扩大神器,装置Chrome扩大能够应用镜像商店下载crx文件而后手动装置,不过有些扩大可能没有及时同步。 油管最近李子柒很火,看看她在油管的视频吧,不过这个网站不反对中文搜索。 SCI-Hub做科研的人用得着 http://tool.yovisun.com/scihub/另外举荐一个Sci-Hub一键全文下载的Chrome扩大 ,地址 https://chrome.google.com/web... npmhttp://npm.taobao.org/ 这是一个残缺 npmjs.org 镜像,你能够用此代替官网版本(只读),同步频率目前为 10分钟 一次以保障尽量与官网服务同步。npm config set registry "https://registry.npm.taobao.org" golanggolang.org 打不开,你能够用https://golang.google.cn/dl/...://gomirrors.org/ 。 命令行代理有 https://goproxy.io/ https://goproxy.cn/ 命令行执行export GOPROXY=https://goproxy.io composerphp.net 中文镜像 http://php.p2hp.com/阿里云 Composer 全量镜像 https://developer.aliyun.com/... 能够通过prestissimo composer global require hirak/prestissimo 来治理composer镜像。 pypi清华大学开源软件镜像站 https://mirror.tuna.tsinghua.... 应用 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple some-package装置Python包 ...

July 28, 2020 · 1 min · jiezi

谷歌宣布建立-Open-Usage-Commons-组织托管-Istio-等重要开源项目

技术编辑:芒果果丨发自 思否编辑部SegmentFault 思否报道丨公众号:SegmentFault 近日,谷歌发表将成立一个名为 Open Usage Commons(OUC)的新组织,托管其三个重要开源我的项目商标 Angular、Gerrit 和 Istio。 只管目前 OUC 只涵盖三个谷歌我的项目,但其目标是为开源我的项目提供一个中立的、独立的我的项目商标。该组织还将帮助统一化测试,建设标记使用指南,并解决商标应用问题。 OUC 不会提供超出应用范畴的服务,如技术领导、社区治理、我的项目事件或我的项目营销。 将商标引入开源定义中谷歌开源总监兼 OUC 副主席 Chris DiBona 在承受采访时说:“咱们发表咱们是商标管理员,咱们将把商标引入凋谢源代码定义中。” 这对于治理开源定义的欧盟凋谢源代码促进会(OSI)来说是个新闻。OSI 总裁Josh Simmons 说: “当然,当人们明确地致力于放弃开源定义的兼容性时,OSI 总是很快乐。这意味着咱们仍在钻研中,因而 OSI 正在采取张望态度。” 很多人感觉谷歌建设新组织的办法有些令人费解。商标对于开源公司和组织来说始终都很重要。例如,红帽在 2004 年不得不明确指出,只管红帽反对任何人应用其凋谢源代码,但应用其注册商标“红帽”称说其产品的行为存在异议。正如红帽时任法律顾问兼秘书长 Mark Webbink 所说:“在开源经济中,红帽品牌及其服务才是有价值的。” 在另一个驰名的开源商标案例中,Mozilla在 2005 年注册了“ Firefox”商标,因为许多不良行为者通过将其蕴含在蕴含恶意软件的“Firefox” CD-ROM 中来歹意转售 Firefox。 尽管这个商标惹恼了其余开源组织,尤其是 Debian,但它达到了本人的目标。每个人都晓得,当你看到“ Firefox”或其商标标记时,它就是 Mozilla 的 Firefox。 因而,大多数开源我的项目注册了它们的商标,以 Mozilla 和红帽为例,这些品牌元素不蕴含在程序的源代码中。它只蕴含在二进制文件中。 谷歌为何移交 lstio 我的项目商标?话虽如此,开源规范和专利专家、顶级技术律师事务所 Gesmer Updegrove 的开创合伙人 Andrew“ Andy” Updegrove 认为,“对于肯定数量的用例来说,领有这样一个实体的确是有意义的。最显著的一个例子是一个未注册的 OSS 我的项目。一个无固定资产的集体不能无效地领有商标,所以除非他们批准一个繁多的所有者,否则就没有方法爱护项目名称。在许多状况下,一个成员领有一个我的项目商标,而且通常会导致上游问题。因而,只有有一个中立的所有者,就是一种社区利益,而不会超出这个范畴。” Updegrove 示意,注册商标通常是须要将我的项目置于基金会的保护伞之下,并恪守基金会规定的。 那么,谷歌为什么不让云计算基金会(CNCF)接管 lstio 呢? ...

July 10, 2020 · 1 min · jiezi

谷歌云使用英伟达-Ampere-A100-GPU今年年底商用

技术编辑:芒果果丨发自 思否编辑部SegmentFault 思否报道丨公众号:SegmentFault 英伟达发表其最新一代 Ampere A100 GPU 已在 Google Cloud 上提供。 Ampere A100 GPU 是英伟达上个月推出的最新 GPU 处理器,可负载宏大的人工智能工作和数据分析。谷歌方面示意,云服务将在今年年底之后向公众凋谢,具体价格尚未颁布。 Ampere A100 GPU 性能进步 20 倍英伟达推出 Ampere A100 GPU 时提到,它的性能比前代产品提到了 20 倍,该零碎的单精度性能最高为 19.5 TFLOPS,对于须要 TensorFloat 32 操作的 AI 和高性能计算应用程序,能够达到 156 TFLOPS。 Ampere A100 GPU 是英伟达有史以来最大的 7 纳米芯片,它领有 540 亿个晶体管,并提供翻新的性能,例如多实例 GPU,主动混合精度使 GPU 到 GPU 的间接带宽增加一倍,最快内存达到每秒 1.6 TB。此外,该加速器还具备 6912 个 CUDA 内核,并具备 40GB 的 HBM2 内存。 在形容 Ampere 架构时,英伟达示意其改良“可在任何规模上提供无可比拟的加速度。” 英伟达相干人士说:“科学家、钻研人员和工程师,就是咱们这个时代的达芬奇和爱因斯坦,他们正致力通过人工智能和高性能计算解决世界上最重要的迷信、工业和大数据挑战。与此同时,企业甚至整个行业都在寻求利用人工智能的力量,从大规模数据集中提取新的见解……英伟达 Tensor Core 技术为人工智能带来了惊人的速度晋升,将培训工夫从几周缩短到几小时,并提供了大规模的减速推理。” ...

July 10, 2020 · 1 min · jiezi

谷歌开源-Tsunami-漏洞扫描程序用于大型企业网络

技术编辑:芒果果丨发自 思否编辑部SegmentFault 思否报道丨公众号:SegmentFault 谷歌为大型企业网络开源了一种名为 Tsunami 的可扩大的网络扫描程序。该程序已于上个月在 GitHub 上开源,并在谷歌外部开始应用。 谷歌示意,Tsunami 由成千上万甚至数百万个与互联网连贯的零碎组成,可用于检测高严重性的破绽,并尽可能减少误报。 据理解,Tsunami 不会成为谷歌的正式品牌产品,而是由开源社区保护,相似于谷歌首次向公众提供的 Kubernetes(另一种谷歌外部工具)的形式。 Tsunami 如何运作目前,市场上曾经有数百种其余商业或凋谢源代码的破绽扫描器,但 Tsunami 的不同之处在于,谷歌在建设扫描程序时将眼光对准了像本人这样的大型公司。这包含管理网络的公司,这些网络包含成千上万的服务器、工作站、网络设备和连贯到互联网的物联网设施。 谷歌示意,其设计 Tsunami 的初衷是为了适应这些极其多样化和极其宏大的网络,而不须要为每种设施类型运行不同的扫描器。 Tsunami 由两个次要局部组成,顶部增加了可扩大的插件机制。 它的第一个组件是扫描器自身,或者说是侦察模块,该组建扫描公司网络中的凋谢端口。而后,它会测试每个端口,并尝试辨认每个端口上运行的确切协定和服务,以避免谬误标记端口和测试设施的谬误破绽。 谷歌示意,端口指纹识别模块基于行业测试的 nmap 网络映射引擎,但也应用了一些自定义代码。 第二个局部比较复杂。这一个基于第一个的后果运行。它获取每个设施及其公开的端口,抉择要测试的破绽列表,并运行良性开发以查看设施是否容易受到攻打。 破绽验证模块也是 Tsunami 如何通过插件扩大的办法,通过这种办法,平安团队能够增加新的攻打载体和破绽来查看他们的网络外部。 以后的 Tsunami 版本带有用于查看以下内容的插件: 裸露的敏感 UI:Jenkins、Jupyter 和 Hadoop Yarn 之类的应用程序 附带了 UI,这些 UI 容许用户调度工作负载或执行系统命令。如果这些零碎未经身份验证就裸露在网络上,则攻击者能够利用应用程序的性能来执行歹意命令。弱证书: Tsunami 应用其余开放源码工具,如 ncrack 来检测协定和工具(包含 SSH、 FTP、 RDP 和 MySQL)应用的弱明码。谷歌打算在将来几个月通过新的插件加强 Tsunami,以探测更宽泛的破绽。所有的插件都将通过第二个专门的 GitHub 存储库公布。 Tsunami 将用于大型网络,扫描重大破绽谷歌示意,扫描精度是 Tsunami 关注的次要因素,它的次要性能就是尽可能减少谬误的检测后果。Tsunami  将来的重点将是满足像本人这样的高端企业客户的指标,以及在这些类型的大型和多设施网络中扫描破绽。 这一点十分重要,因为破绽扫描程序运行在微小的网络中,在这些网络中,即便是最轻微的谬误后果也可能导致向成千盈百的设施发送不正确的补丁,可能导致设施解体和网络解体。不仅会节约有数的工作工夫,甚至可能给公司造成更大的损失。 此外,Tsunami 也将扩大到仅反对扫描高度重大的破绽威逼,而不是像大多数扫描程序侧重于扫描所有程序,这样做能够缩小平安团队的警报疲劳,确保重大破绽能被及时处理。

July 9, 2020 · 1 min · jiezi

谷歌浏览器曝安全信息泄露恶意软件可下载-3200-万个扩展项攻击用户

技术编辑:徐九丨发自 SegmentFault 思否 北京时间 6 月 18 日,来自加利福尼亚州桑尼维尔的威胁检测厂商 Awake Security 在媒体采访中表示,一款恶意软件可通过谷歌浏览器下载 3200 万个扩展程序来攻击用户,攻击的范围涉及电子邮件、工资单和其他敏感项。 迄今为止影响最广的恶意 Chrome 商店事件根据下载量,Awake 联合创始人兼首席科学家 Gary Golomb 表示,这是迄今为止影响最广的恶意 Chrome 商店事件。 对此,Google 拒绝讨论与以前的活动相比,此次最新的间谍软件造成的影响范围,以及为什么过去承诺会更紧密地监督产品,但为什么并没有通过自行检测删除恶意扩展程序。 Google 发言人 Scott Westover 在采访中告诉媒体:“当我们收到网上商店中违反我们政策的扩展程序的警报时,我们将采取行动并将结合这些事件的经验,以改进我们的自动化和手动分析系统。” 据悉,上个月谷歌公司已从谷歌网上应用商店中删除 70 多个恶意加载项。目前尚不清楚谁在分发该恶意软件。Awake 表示,开发人员在向 Google 提交扩展程序时提供了虚假的联系信息。 浏览器扩展乱象随着浏览器扩展安装数量的增加,随之潜在的风险也在增加。 很多用户觉得扩展程序都是安全的,但实际上,扩展程序可以读取设备上浏览器与后端服务器之间交换的所有数据,很多浏览器扩展有可能令用户处于加密劫持、勒索软件和其他恶意软件攻击风险之下。 去年,一项针对 12 万个 Chrome 扩展的调查显示,超过三分之一的谷歌 Chrome 扩展要求用户允许访问他们在任何网站上的所有数据。同一项调查还发现,Chrome 网上商店列出的 12 万个 Chrome 扩展中,大约 85% 没有列出隐私政策,这意味着没有具有法律约束力的文件来描述扩展开发者承诺如何处理用户数据。 其他的调查结果还包括,77% 的测试 Chrome 扩展没有列出支持站点,32% 的扩展使用了包含公开漏洞的第三方 JavaScript 库,9% 的扩展可以访问和读取 cookie 文件,其中一些用于身份验证操作。 据悉,在交易市场中恶意分子会从对维护扩展失去兴趣的开发人员那里购买扩展程序,并发起鱼叉式网络钓鱼攻击,劫持扩展开发人员的帐户,从而推送恶意代码。 由于这些扩展插件不仅被安装在个人设备上,也被安装在企业的员工设备上,因此它们可收集大量重要的企业信息,包括员工的工作情况、部分网页内容、API 密钥、私有原始代码、私有 LAN 架构、防火墙登录密码及经营内容等 ...

June 18, 2020 · 1 min · jiezi

谷歌或将在台南科技工业园兴建第二座在台数据中心

近日,隶属于 Alphabet 公司的投资机构科尔控股,被台湾经济事务部投资审议委员会批准,将 260 亿新台币用于向台湾当地企业特许投资顾问股份有限公司增加投资。 据台湾经济事务部投资审议委员会透露,这次增加的投资将主要用于维持企业日常运营与加强相关投资业务,以及扩建现有厂房,采购相关新设备,负担后期运营支出等等。 谷歌公司早前于今年 9 月称,计划在台湾地区追加投资,并在台南科技工业园建设其位于台湾地区的第二座数据中心。但谷歌公司当时并未公布具体的投资金额,因此这次增资被外界视为是在为其第二座数据中心作筹备。 早在 2012 年,谷歌公司就已经开始在台湾彰化县彰滨工业区斥资至少 6 亿美元建造了当时亚洲规模最大,占地 15 公顷,同时也是其位于台湾地区的第一座数据中心。该数据中心于 2013 年 12 月启用后至今,已通过后续追加投资扩建到了第四期。 此外,谷歌公司近年来持续在拓展台湾地区的业务,比如曾在2018年收购了部分 HTC 手机业务,为推广 Pixel 手机而加强了其在台湾地区的研发能力,设立新的人工智能智能研究机构,并计划于 2020 年底在台湾北部启用新的办公室。

November 4, 2019 · 1 min · jiezi

那些在国内还能使用的谷歌产品

前几天是谷歌成立21周年纪念日 https://www.google.com/doodle... ,感谢谷歌给互联网带来的便利。之前写过百度那些你可能不知道的百度产品 和腾讯那些你可能不知道的腾讯产品 ,正好再来说说谷歌,谷歌的所有产品 https://about.google/intl/zh-... 在这里有介绍,谷歌最好的产品自然是搜索了,可惜国内用不了(想上谷歌在公众号回复 谷歌 获取使用方法),尽管谷歌退出中国多年,但还是有不少服务能在国内继续使用,这里做个整理。 Chrome 浏览器我平常用的浏览器就是 Chrome 了,国内Chrome使用的是 google.cn域名(可惜不能用于搜索) https://www.google.cn/intl/zh... ,直接下载就好,强烈推荐你使用Chrome浏览器。 谷歌地图之前有域名 ditu.google.cn ,但现在上不去了 ,它会跳转到google.cn ,https://www.google.cn/maps 也会重定向到 google.cn ,但是电脑访问 http://www.google.cn//maps 居然还可以继续使用。 还有个更酷炫的谷歌地球https://earth.google.com/web/ ,可惜国内没法用。 谷歌翻译http://translate.google.cn/ 这个二级域名可以直接使用谷歌翻译。 谷歌开发者https://developers.google.cn/ 这是针对开发者使用的产品。https://developer.android.goo...安卓开发者应该很需要 https://developer.android.goo... golanggolang 是谷歌开发的一种语言,https://golang.google.cn/ 。文档也能打开https://golang.google.cn/doc/ ,当然使用go get 的时候推荐使用代理 https://goproxy.io/ https://goproxy.cn/ 谷歌广告https://ads.google.cn/intl/zh... 你应该经常能在网站上看到谷歌的广告,国内的公司也可以投放。 谷歌文档http://www.google.cn/docs/about/ 这个能打开,可惜点击后还是跳转到https://docs.google.com/docum... ,对应的国内可以使用腾讯文档。 谷歌 DNSGoogle Public DNS 是Google于2009年12月5日起提供的一个免费域名解析服务,具体看维基百科https://zh.wikipedia.org/wiki/Google_Public_DNS ping 8.8.8.8正在 Ping 8.8.8.8 具有 32 字节的数据:来自 8.8.8.8 的回复: 字节=32 时间=41ms TTL=52来自 8.8.8.8 的回复: 字节=32 时间=40ms TTL=52来自 8.8.8.8 的回复: 字节=32 时间=42ms TTL=52来自 8.8.8.8 的回复: 字节=32 时间=40ms TTL=528.8.8.8 的 Ping 统计信息: 数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),往返行程的估计时间(以毫秒为单位): 最短 = 40ms,最长 = 42ms,平均 = 40ms nslookup baidu.com 8.8.8.8服务器: dns.googleAddress: 8.8.8.8非权威应答:名称: baidu.comAddress: 39.156.69.79访问39.156.69.79 这个ip就可以直接访问百度。 ...

October 16, 2019 · 1 min · jiezi

分布式服务框架gRPC

什么是gRPCgRPC是Google开发的高性能、通用的开源RPC框架,其由Google主要面向移动应用开发并基于HTTP/2协议标准而设计,基于Protobuf(Protocol Buffers)序列化协议开发,且支持众多开发语言。在gRPC中一个客户端可以像使用本地对象那样直接调用位于不同机器上的服务端应用的方法(methods)。这让你能够更容易的构建分布式的应用和服务。和其他RPC系统类似,gRPC也是基于定义一个服务,指定服务可以被远程调用的方法以及他们的参数和返回类型。在服务端,实现服务的接口然后运行一个gRPC服务来处理可出端的请求。在客户端,客户端拥有一个存根(stub在某些语言中仅称为客户端),提供与服务器相同的方法。 ·gRPC客户端和服务器可以在各种环境中运行并相互通信,并且可以使用gRPC支持的任何语言编写。因此,例如,您可以使用Go,Python或Ruby的客户端轻松地用Java创建gRPC服务器。此外,最新的Google API的接口将拥有gRPC版本,可让您轻松地在应用程序中内置Google功能。 使用protocol buffer默认情况下,gRPC使用protocol buffer,用于序列化结构化数据(尽管它可以与其他数据格式(例如JSON)一起使用)。使用协议缓冲区的第一步是在proto文件中为要序列化的数据定义结构:proto文件扩展名为.proto的普通文本文件。protocol buffer数据被构造为消息,其中每个消息都是信息的逻辑记录,其中包含一系列称为字段的名称/值对。这是一个简单的示例: message Person { string name = 1; int32 id = 2; bool has_ponycopter = 3;}定义了数据结构后,就可以使用protocol buffer编译器protoc生成你所选语言的数据访问类。访问类为每个字段提供了简单的访问器(例如name())和set_name()),以及将整个结构序列化为原始字节或从原始字节中解析出整个结构的方法-例如,如果您选择的语言是C ++,则在上面的示例将生成一个名为Person的类。然后,您可以在应用程序中使用此类来填充,序列化和检索Person的protocol buffer消息。 除此之外你还要在.proto件中定义gRPC服务,并将RPC方法参数和返回类型指定为protocol buffer消息: // The greeter service definition.service Greeter { // Sends a greeting rpc SayHello (HelloRequest) returns (HelloReply) {}}// The request message containing the user's name.message HelloRequest { string name = 1;}// The response message containing the greetingsmessage HelloReply { string message = 1;}gRPC使用也是使用编译器protoc从proto文件生成代码,不过编译器要首先安装一个gRPC插件。使用gRPC插件,你可以获得生成的gRPC客户端和服务器代码,以及用于填充,序列化和检索消息类型的常规protocol buffer访问类代码。 ...

October 4, 2019 · 1 min · jiezi

谷歌大中华区新总裁陈俊廷首次公开亮相-GDD-2019

谷歌开发者大会(GDD)2019 正在进行中,这场为期两天的技术盛会,吸引了全球近五千人前来参与。在这次的大会上,谷歌为开发者带来了哪些新动态与惊喜?关键词:谷歌开发者大会 Flutter 1.9 Android 10备受关注的谷歌开发者大会(GDD),今天在上海世博中心隆重拉开大幕。偌大的主会场座无虚席,近五千名开发者齐聚上海,亲历了这场盛会的开启。 大会开幕前一个小时,会场已人山人海这是谷歌第四年在中国举办开发者大会,正如谷歌在今年 I/O 大会上所说的那样,它正在转变为「向更多人提供帮助」的公司。 近年来,谷歌陆续打造了一系列的生态,开发了更多的平台和应用,帮助开发者更好地成长。而今天的 GDD 大会,就是这样一个展示和推广的平台。 在上午的 Keynote 环节,10 位嘉宾先后登台,介绍了谷歌近期的一些成果,以及在技术上的更新动态,让我们一睹为快。 新任谷歌大中华区总裁登场在 KeyNote 主题演讲环节中,谷歌大中华区总裁陈俊廷(Stanley Chen)首先登场。 这是陈俊廷在今年 6 月担任该职位后(此前为石博盟担任),首次在公开大会中亮相。 陈俊廷在大会上宣布,Grow with Google 成长计划在中国正式推出他公布了谷歌的数据技术分享计划,已经让 80 多个国家及地区,超过 4300 万人从中受益。 陈俊廷还回顾了谷歌的近期的一些动作之后,宣布正式推出 Grow with Google 成长计划,向广大开发者们提供免费的课程学习计划。 这位担任谷歌大中华区总裁不久的陈俊廷,自 2011 年加入 Google 中国台湾,任台湾地区总经理一职。负责销售业务,职责涵盖大型企业客户、经销与线上业务。 毕业于国立台湾大学经济系的陈俊廷,在科技行业一路过关斩将在加入 Google 前,陈俊廷曾任职于苹果,担任中国台湾分公司业务协理和亚洲区校园业务主管。 陈俊廷已经工作了二十多年,看起来还是活力有精神,实际已经近 50 岁的他还曾在英特尔、爱立信等公司工作过。 陈俊廷的近年公开工作履历通过提供网上的共享平台,提供免费的课程,将谷歌的技术带给更多需要的人,帮助用户使用和体验谷歌的产品。 随后,谷歌的研发团队的主要负责人,带来了近期的一些重大更新。 KeyNote:Tensorflow 2.0作为近年来最受欢迎的机器学习框架,TensorFlow 自然不会缺席。美女工程师金安娜,以一口流利的中文,介绍了 TensorFlow 的整体情况。 金安娜曾多次参与谷歌在中国的活动,均以中文进行演讲她的分享聚焦在 TensorFlow 的一些应用案例,以及帮助开发者,企业用户,研究机构所解决的现实问题。 TensorFlow 已经建立了一个强大的用户群体。在全球有 4100 多万的下载量,而围绕 TensorFlow 构建的技术社区也在蓬勃发展。 ...

September 10, 2019 · 1 min · jiezi

谷歌数据泄露和解-隐瞒事件-7-个月-497-万人受害

9 月 10 日早间,据彭博报道,谷歌已就此前泄露近 50 万用户数据一事和用户达成和解,目前正在敲定条款。 根据公开报道,此次解决的应该是 2018 年 10 月爆出的 Google+ 用户数据泄露事件,该事件直接导致谷歌提前关闭了 Google+ 这一产品。 据了解,本次事件的内容和让 Facebook CEO 扎克伯格到国会听证会受审的“剑桥分析”一案很像,都是由于隐私条款漏洞,让用户数据可以被其他用户或 APP 随意调用,导致大规模泄露。 更严重的是,该问题早在 2015 年就已出现,直到 2018 年 3 月才被发现,而由于担心招致监管、审查并导致声誉受损,谷歌又拖延了 7 个月才报告问题。受害用户人数为 49.7 万人。 新闻来源:前瞻网

September 10, 2019 · 1 min · jiezi

Facebook-和谷歌面临新反垄断调查科技公司监管压力加剧

美国当地时间周五,据外媒报道,谷歌已经证实,接到美国司法部要求其提供之前反垄断调查相关记录的通知,这标志着这家科技巨头首次正式承认自己成为美国监管机构反竞争调查的对象。 在谷歌承认受到民事调查几周前,美国司法部官员曾表示,他们将对包括搜索在内的大型科技公司展开广泛审查。几天前,美国 30 多个州的总检察长宣布将对谷歌进行重大反垄断调查。 无独有偶,科技巨头 Facebook 近期也正面临着反垄断调查。 据外媒最新消息,Facebook 面临的反垄断麻烦正在扩大,美国多个州的检察长和司法部门将调查 Facebook 是否扼杀了市场竞争,并将用户置于危险境地。 而牵头调查的纽约总检察长詹姆斯则在推特网站上写道。“我将对 Facebook 发起一项调查,以确定他们的行为是危及消费者数据安全、降低了消费者选择权,以及是否提高了网络广告的价格。” 据悉,Facebook 和谷歌是美国和全世界两大网络广告巨头,两家公司垄断了美国一半的广告份额,全球市场的份额总和高达三分之二。 近期,美国科技公司面临的监管压力正越来越大。 新闻来源:雷锋网

September 8, 2019 · 1 min · jiezi

2019-Google-IO-大会面向Web开发人员的WebAssembly-下

特别说明这是一个由 simviso 团队对2019 Google I/O 大会中关于面向Web开发人员的WebAssembly相关话题进行翻译的文档,内容并非直译,其中有一些是译者自身的思考。Surma是Google公司WEB基础的贡献者,也是open web平台的开发倡导者。上一篇博文地址:面向Web开发人员的WebAssembly 2019 Google I/O 上 视频地址:面向Web开发人员的WebAssembly 2019 Google I/O 上视频地址:面向Web开发人员的WebAssembly 2019 Google I/O 下视频同时也获得了谷歌大佬Surma和Deepti的官方推特分享和点赞视频翻译文字版权归 simviso 所有 前言现在我们来谈谈WebAssembly的未来和即将到来的未来。欢迎Deepti上台发言。 谢谢,Surma。 Hi,各位,我叫Deepti。我是Chrome团队的软件工程师,我致力于标准化 WebAssembly 功能,并在V8中实现它们。 到目前为止,你在本演讲中所看到的大部分内容都已经在所有主要浏览器中落地实现了。也可以说这是MVP或者说是WebAssembly的最小可行性产品。(译者注:MVP(Minimum Viable Product –最简化可实性产品)是一种在创业团队中非常流行和实用的产品理念,旨在通过提供最小化可行产品获取用户反馈,并在这个最小化可行产品上持续快速迭代,直到产品到达一个相对稳定的阶段。) 并且,我们一直在努力增加功能,以确保我们越来越接近本地性能。这个MVP本身就是打破了Web平台的限制,可以在它之上运行的一整套新的应用程序。但这不是最终目标,社区组织和实现者正在努力实现很多令人兴奋的新功能。 WebAssembly多线程提案其中第一个就是WebAssembly 多线程提案。多线程提案引入了并行计算。具体的说,这意味着它引入了线程之间共享线性内存的概念,以及原子指令的语义。现在,为什么有必要这么做? 有许多用C或C ++编写的现有库使用了Pthreads(POSIX线程(POSIX threads)),它们可以编译成wasm,并且以多线程模式运行,允许不同线程并行处理相同的数据。除了启用新功能外,对于受益于多线程执行的应用程序,你会看到性能随着线程数的增加而增长。因此,这个线程提案是建立在Web平台中已经支持多线程的基础之上。Web 已经支持使用Web Workers来进行多线程执行,这刚好可以用来作为在WebAssembly中引入多线程执行的基础。 Web Workers的缺点是他们之间不能共享可变数据。反而,他们依赖消息传递,通过发送消息进行通信。因此它们通过消息传递进行通信。所以每一个WebAssembly线程都在一个Web Worker中运行。 但是它们共享了WebAssembly 内存允许他们处理相同的数据。使它们的运行速度接近于本地速度。 这里的共享线性内存建立在JS共享数组Buffer上。 因此,如果你看这幅图,发现它们每个线程都运行在一个Web Worker中,并且使用一样的线性存储实例化一个WebAssembly 实例。 这意味着这些线程实例的操作可以在共享内存上进行,但各自都有它们自己的独立执行堆栈。因此,用于创建WebAssembly 内存的API几乎保持不变。如果你看到图中第一行代码,你创建一个包含 shared 和 maximum 参数的WebAssembly 内存。这将在下面创建一个共享数组Buffer,其中 initial (初始)大小是由我们指定的,即一页内存。 因此,这些线程都在同一个内存上操作,我们怎么确保数据是一致的? 原子修改允许我们执行某种级别的同步。所以,当一个线程执行原子操作时,其他线程在它发生的瞬间会立即看到。但实际上完全同步的操作往往会阻塞一个线程,直到其他线程完成执行。 所以这个提案有一个互斥实现的例子,并且我介绍了如何通过JavaScript使用它。 如果你仔细观察,你会发现你在工作中所做的与在主线程上所做的之间所存在微妙的差异。 因此,在主线程上调用 tryLockMutex 方法,该方法尝试在给定address上添加一把互斥锁 。如果互斥锁锁定成功,则返回1,否则返回0。在工作线程上,它会在给定地址进行互斥锁的锁定,重试直到锁定成功。所以基本在Web上就是通过这样一种方式来构建的(线程模型)。 实际上你不能阻塞主线程。这是我们在使用线程过程中需要记住的,这很有用。那么该提案 现在处于一个什么状态?该提案一直在稳定推进中。 ...

September 7, 2019 · 1 min · jiezi

2019-Google-IO-大会面向Web开发人员的WebAssembly-上

特别说明这是一个由 simviso 团队对2019 Google I/O 大会中关于面向Web开发人员的WebAssembly相关话题进行翻译的文档,内容并非直译,其中有一些是译者自身的思考。Surma是Google公司WEB基础的贡献者,也是open web平台的开发倡导者。视频地址:面向Web开发人员的WebAssembly 2019 Google I/O 上视频同时也获得了谷歌大佬Surma的官方推特分享与点赞 视频翻译文字版权归 simviso 所有 本次参与翻译人员 前言我是Surma,我是open web平台的开发倡导者,在伦敦与谷歌的Chrome团队合作。今天很高兴可以跟大家谈一谈我最近发现的一个让我充满激情的东西,那就是WebAssembly。 你可能对它有所耳闻,如果你以后有什么问题的话,可以在 Twitter 上联系我。稍后我的同事,来自web工程团队的 Deepti 会分享一些关于WebAssembly未来的话题。 定义在我们开始讲之前,我想让大家一起看下这张图。 因为 WebAssembly 通常与 C++ 紧密相连,以至于很多人都认为它都是关于 C++ 的,事实上,WebAssembly 远不止于此。你可以在网上找到很多关于 C++ 和 Emscripten 的 demo。 这很有意义,因为 Emscripten 是一个令人惊叹的工具。但对Web开发人员而言,意识到WebAssembly不仅限于C++,这点很关键! WebAssembly 本身其实是一个非常有用的工具,你值得拥有!这就是我想在这次演讲中谈论的内容。 我想展示一些支持 WebAssembly 的其他语言,以此来让你在不学习新语言的情况下使用WebAssembly 。然后,就像我说的,Deepti 接下来将讨论 WebAssembly 的未来。 所以要确保每个人都知道或者希望在场的人都知道这个网站(WebAssembly官网),它上面解释了什么是 WebAssembly,它是一个基于堆栈的虚拟机。 如果你不知道什么是基于Web 堆栈的虚拟机,那也没有关系。 重要的是,你能意识到它是一个虚拟机, 意味着它不是一个实际存在的处理器,它的设计理念在于 我们可以很容易的将通用代码编译到真实的运行环境下可执行的代码,这就是所谓的可移植性。因此,对虚拟机而言,设计之初需要优先考虑可移植性。 因此,当你使用任意语言编写某些代码并将其编译到 WebAssembly 时,也就是说这些代码会被编译成虚拟机可执行的指令集,然后将这些指令存储到以二进制格式存储到.wasm文件中。 因为该虚拟机可以很轻易的根据对应平台下的处理器进行代码编译,所以.wasm文件可以在运行时被读取,此时我们这里运行的上下文极有可能是浏览器。 浏览器能将.wasm文件转换成当前机器可执行的机器码,并在浏览器上执行该代码。 在一开始,WebAssembly就是为了面向过程安全而设计的。你可以在裸机上运行该代码,但这并不意味着它是不安全的。 实际上我们已经在上次的Google I/O 大会上讨论过WebAssembly了。 作为一项技术,它以惊人的速度快速成长,并占据了一席之地。之前我们也讨论了一些大公司是如何使用WebAssembly来运行他们之前已经存在的一些产品,这些产品很可能是用C++来编写的。 ...

September 7, 2019 · 3 min · jiezi

谷歌宣布两个新的自然语言对话数据集

谷歌今日公布了两个名为 Coached Conversational Preference Elicitation(CCPE)以及 Taskmaster-1 的对话框数据集。这两个数据集均使用了绿野仙踪(Wizard-of-Oz)平台,模拟基于语言的数字助理,并在自动化系统的环境中保留口语对话的特征。 新闻来源:googleblog.com

September 7, 2019 · 1 min · jiezi

谷歌唯二的-11-级工程师清华-AI-研究院顾问委员他是程序员眼中神一样的人物

Jeff 的成长历程Jeff Dean 于 1968 年 7 月出生于夏威夷。他的父亲 Andy 是一名热带疾病研究员;母亲 Virginia Lee 是一位医学人类学家,会说六种语言。 为了好玩,Jeff 的父亲曾带着小 Jeff 一起设计了一台 IMSAI 8080 工具包电脑,他们在机器上进行焊补更新,掌握了机器的每个零件。 13岁时,他跳过了 8 年级最后三个月的课程,去索马里西部的一个难民营做义工。后来,在高中时,他开始为流行病学家编写了一个名为 Epi Info 的数据收集程序;这个工具后来成为野外工作的一个标准工具,最终以十几种语言分发了几十万份。 美国疾病控制与预防中心运营的一个网站“the Epi Info Story”上 Jeff Dean 高中毕业时的照片 Jeff 的博士期间主要研究编译器,这是一种将人类编写的代码转换成针对计算机优化的机器语言指令的软件。 谷歌的高级副总裁 Alan Eustace 说:“就性感程度而言,编译器相当无趣。但是另一方面,它会让你‘非常接近机器’。”可能受「编译器」的影响, Jeff 也变得「非常接近机器」,他的挚友 Sanjay 就曾说过:“在编写代码时,Jeff 会有一个模型,他几乎可以半自动化的思考所有细微的情况。” 我们都知道,谷歌的工程师是分级别的,从 1 级 到 10 级。 最底层的 1 级是 IT 支持人员;2 级是刚从大学毕业的学生;3 级通常拥有硕士学位;达到 4 级需要几年时间,或者一个博士学位;6 级工程师(前10%)的能力非常强,通常是项目主管;从 6 级升到 7 级需要很长时间的贡献记录; ...

August 21, 2019 · 2 min · jiezi

特朗普抨击谷歌操纵数百万张选票-谷歌予以否认

据外媒 CNET 报道,当地时间周一美国总统特朗普发推文称谷歌涉嫌在 2016 年大选中“操纵”数百万选民反对他,以支持希拉里·克林顿。而这家搜索巨头对这一说法。谷歌表示特朗普似乎指的是一份旧报告,声称它证明它为当时的民主党候选人希拉里·克林顿带来了至少 260 万张选票,但谷歌表示该报告“自发布以来已被揭穿 ”。 谷歌发言人周一在一份电子邮件声明中说:“我们从未对搜索结果进行重新排名或改变以操纵政治情绪。我们的目标是始终为人们提供高质量,相关信息的查询,而不考虑政治观点。” 特朗普在周一早些时候发布的一篇推文中称,“哇,报告刚出来!谷歌在 2016 年总统大选中操纵了 260 万到 1600 万张选票,以支持希拉里·克林顿。”他还认为:“谷歌应该被起诉。我的胜选优势比原先认为的还要大!” 这份原始报告(PDF)实际上于2017年6月最初由 Robert Epstein 在美国行为研究与技术研究所的网站上发表。Epstein 在 2019 年 6 月参议院司法机构小组委员会的证词中重申,他认为谷歌的搜索算法产生了“有偏见的搜索结果”,“这可能会影响到未做决定的选民,并给希拉里克林顿留下至少 260 万张选票。” 新闻原文:cnBeta.com

August 20, 2019 · 1 min · jiezi

Alphabet-的-DeepMind-损失在-2018-年飙升至57亿美元

根据英国公司大楼登记处周三提交的文件显示,负责创建人类级人工智能的谷歌人工智能公司 DeepMind 在2018年度过了昂贵的一年。其 2018 年的税前亏损额从 2017 年的 3.41 亿美元和 2016 年的 1.54 亿美元增长至 5.7 亿美元。 2018年,DeepMind 在约 700 名员工中花费了 4.83 亿美元(3.98亿英镑),而 2017 年则为2.43亿美元(2亿英镑)。其他重大成本包括技术基础设施和运营成本。此外,DeepMind 花费了1700万美元(1400万英镑)用于学术捐赠和赞助。 虽然 DeepMind 的亏损有所增加,但公司的收入也是如此。营业额在2018年几乎翻了一番,达到1.03亿英镑,高于 2017 年的 4800 万英镑。 Facebook 首席人工智能科学家 Yann LeCun 去年在接受采访时表示,他认为 DeepMind 尚未证明其对谷歌的价值,并补充说 DeepMind 过于孤立,不会对科技巨头产生重大影响。 新闻来源:Forbes

August 8, 2019 · 1 min · jiezi

谷歌学术影响力Top-publications排行榜201907

Google Scholar Top Publications 榜单从某种维度上反映了各大学术期刊和会议的影响力,以 h 指数(h-index)作为评判标准。h 指数是一个混合量化指标,可用于评估研究人员的学术产出数量与学术产出水平。 具体来说,该榜单采用的 h 指数包含两种:h5-index 和 h5-median,前者是指在过去整整 5 年中所发表文章的 h 指数,它是一个最大值,即 2014-2018 年间发表的 h 篇文章每篇至少都被引用过 h 次的最大值(例如,某杂志共发表 5 篇论文,分别被引用 18,10,6,3 和 2 次,那么这份杂志的 h 指数就是 3)。后者是指组成其 h5-index 的文章的被引用量的中位数。 本次的榜单中,《Nature》位列总榜第一,CVPR 上升到整个工程与计算机科学类第二位,总榜第十位。NeurIPS、ICLR、ICML 雄踞人工智能领域前三。 学术影响力总榜单 中文期刊榜单 工程与计算机科学 - 人工智能榜单 工程与计算机科学 - 计算机视觉与模式识别榜单 完整榜单地址:Google Scholar Top Publications

August 7, 2019 · 1 min · jiezi

美议员联名要求谷歌临时工外包工工作半年须转为正式工

据外媒最新消息,10名美国国会参议员呼吁谷歌公司采取“立即行动”,将越来越多的合同工在工作6个月后转为全职雇员。 此前,美国一家权威媒体5月份的一篇报道称,谷歌雇佣了12.1万名合同工和10.2万名全职员工。 美国议员这封信是写给谷歌首席执行官桑达尔·皮查伊的,信中说:“临时工和独立外包工的定义是短期和非核心工作,我们敦促谷歌停止滥用这些员工分类,平等对待所有谷歌员工。”议员们要求在星期五之前得到答复。 新闻链接:腾讯科技

August 7, 2019 · 1 min · jiezi

谷歌扩展高级保护计划-帮助用户免受恶意下载困扰

互联网浏览器的安全措施一直在进步,但别有用心的网站开发者也在绞尽脑汁地绕过限制,以传播恶意软件和其它有害的内容。其中最为常见的,莫过于伪造下载。无论实在文件分享往回走哪上发垃圾电子邮件,还是在网页中嵌入虚假的下载(实则为广告)等按钮,人们或多或少地都有过“一键获得全家桶”的危险经历。 有经验的 PC 用户,或许能够知晓如何分辨有风险的下载链接,但十次中也免不了一两次误判。 有鉴于此,谷歌决定扩展其“高级保护计划”(Advanced Protection Program)。其不仅使用双因素身份验证,还可借助其它安全措施来保护用户的上网安全。 举个例子,当你在浏览器中点击下载时,Chrome 会在每次扫描到恶意文件时都发出警告。同时,浏览器会分析本次下载是否为用户与网站交互的直接结果,以打击假冒下载按钮的嚣张气焰。 若 Chrome 认定该文件特别危险,甚至可以强硬地完全阻止下载,但目前尚不清楚该功能是否、以及何时向普通 Chrome 用户普及。 新闻来源:cnBeta.com

August 7, 2019 · 1 min · jiezi

Chrome-浏览器扩展神器油猴

我平常工作最常用的浏览器就是 Chrome 了,Google 出品,值得信赖,用 Chrome 就不得不提浏览器扩展了,有了各种 Chrome 扩展,可以让你浏览器网页更方便,工作更高效。 Chrome 扩展可以在 Google 应用商店下载 https://chrome.google.com/webstore/category/extensions?hl=zh-CN 这里可以搜索安装你喜欢的各种扩展。 比如我装了很多扩展。 扩展这么多,其中的油猴 Tampermonkey 是必须推荐的一个,它是扩展中的王者,最强大的浏览器扩展。 安装油猴扩展油猴是个Chrome扩展,网站 https://www.tampermonkey.net/ 可以直接在官网下载 https://chrome.google.com/web... 直接安装即可。 如果上不了Google,可以在国内第三方Chrome 插件网站https://www.crx4chrome.com/ http://chromecj.com/ http://www.cnplugins.com/ https://www.chromefor.com/ 等搜索下载。下载的是个 crx 文件,然后打开 Chrome 扩展chrome://extensions/,打开开发者模式,将下载的crx文件拖进去,如果出错提示程序包无效。将 crx 后缀改为 zip 再拖进去就能安装成功了,浏览器右上角可以看到图标。 脚本网站有了油猴扩展,还需要配上脚本。安装完扩展后点击图标,选择 获取新脚本会进入网站https://www.tampermonkey.net/scripts.php 这里可以获取脚本来源,有3个来源网站http://userscripts-mirror.org/https://openuserjs.org/ https://greasyfork.org/ 这里推荐 greasyfork ,因为它支持中文。 打开网站首页https://greasyfork.org/zh-CN 可以看到很多脚本。 安装脚本也很简单,找到需要的脚本,进入页面,点击安装,然后管理面板即可看到已安装的脚本。 下面推荐些实用的脚本,开始打开新世界的大门。 搜索去广告功能介绍:去掉百度、搜狗、谷歌搜索结果的重定向,回归为网站的原始网址---附带有去除百度的广告 包括百度顶部和底部的垃圾广告,脚本地址https://greasyfork.org/zh-CN/scripts/14178 安装脚本前搜索 浏览器 前面3个是广告 安装脚本后的效果,广告没有了,你还可以自定义设置。 知乎网页助手功能介绍:1、知乎站外链接直接跳转至目标网址;2、自动展开问题全部信息,同时展示所有回答;3、去除知乎网页中的广告;4、知乎网页中短视频下载;5、解除知乎复制限制-划词复制(鼠标左键划词自动添加到剪切板) 脚本地址 https://greasyfork.org/zh-CN/scripts/384172 比如这个周杰伦的视频回答 https://www.zhihu.com/questio...安装脚本前安装后视频可以直接下载了。 微博浮图功能介绍:微博浮图控件,鼠标移过小图弹出浮动大图的脚本。脚本地址https://greasyfork.org/zh-CN/scripts/4233安装脚本前需要点击小图才能看到大图安装后效果,不用点击鼠标移上去即可看到大图,其实不限制微博,其他网站的图片一样可以。 百度网盘直链下载助手功能介绍:免客户端一键获取百度网盘文件真实下载地址,支持使用IDM,迅雷等下载工具下载。安装后会在对应界面出现【下载助手】按钮, 配合多线程下载工具达到提速的效果。脚本地址 https://greasyfork.org/zh-CN/scripts/39504 安装后不用安装网盘客户端就可以直接下载文件。 全网VIP视频免费破解功能介绍:懒人专用,全网VIP视频免费破解去广告、全网音乐直接下载、百度网盘直接下载、知乎视频下载等多合一版。脚本地址https://greasyfork.org/zh-CN/scripts/370634 ...

July 14, 2019 · 1 min · jiezi

SRE和DevOps

前言在搜索SRE和DevOps相关概念的过程中偶然发现Google Cloud的Blog专门制作了这样一篇文章,国内虽然有不少翻译但并没有完全做到翻译术语中的“信,雅,达”,这里转载Google官方的文章和YouTube视频,同时也选择了网友精心翻译的文章并把视频搬运至bilibili也就是B站方便大家浏览,相信大家可以对SRE和DevOps有更深入的理解。 SRE vs. DevOps: competing standards or close friends?更新历史2019年06月25日 - 初稿 阅读原文 - https://wsgzao.github.io/post... 扩展阅读 SRE vs. DevOps: competing standards or close friends? - https://cloud.google.com/blog...DevOps 和 SRE - https://blog.alswl.com/2018/0... 英文原文SRE vs. DevOps: competing standards or close friends? Seth Vargo: Staff Developer AdvocateLiz Fong-Jones: Site Reliability EngineerMay 9, 2018 <iframe width="560" height="315" src="https://www.youtube.com/embed...; frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe> Site Reliability Engineering (SRE) and DevOps are two trending disciplines with quite a bit of overlap. In the past, some have called SRE a competing set of practices to DevOps. But we think they're not so different after all. ...

June 26, 2019 · 11 min · jiezi

GoogleGame-Builder不懂编程也能开发-3D-游戏

简评: 之前微软曾推出过「Kodu Game Lab」,它可以让完全没有编程经验的人通过简单的步骤打造属于自己的游戏。无独有偶,Google 最近在 Steam 也推出了类似的程序「Game Builder」,可以让使用者体会到「开发游戏跟玩游戏一样简单」的体验。「Game Builder」是来自内部孵化器 Area 120 的实验项目。如果你想制作一个第一人称多人游戏,却没有任何开发经验,也不会建立 3D 模组,这个程序就能帮到你了! 用户不必动手写一行代码,仅仅通过其内的视觉化程序编写系统,套用 if A then do B 的简单逻辑,就能够打造出一款运作正常的游戏。它就像《我的世界》一样,在「Game Builder」里头,有自建的材质物件供玩家自行打造场景,整个过程的目的就是希望玩家在开发游戏时也感觉像在玩游戏一样。 对于有一定编程经验的用户,「Game Builder」还内置了 JavaScript 开发环境,可以借此打造属于自己的卡片,并且几乎允许更改所有「Game Builder」中的预设内容。更方便的是,所有改动都无需花费时间编译,全都即时呈现。 「Game Builder」还有一个很酷的功能,那就是用户还可以开发多人游戏,甚至可以与朋友实时创建游戏。想学游戏开发,不如亲身体验一下试试,目前已在 Steam 上供玩家 免费下载 ????。 不论是「Kodu Game Lab」或「Game Builder」,都显示出「游戏」对于编程教育的重要性,类似的开发工具也会更加丰富和完善,大人和小朋友们也都更能体验到程序编写的乐趣, 原文链接: Create 3D games with friends, no experience required推荐阅读: Google 有个不为人知的面试渠道

June 25, 2019 · 1 min · jiezi

GitHub-最新-Android-热门开源项目公布

作者: LeanCloud weakish 分享 2019 年 5 月 GitHub 上比较流行的 9 个和 Android 开发相关的开源项目,包括对话框、日历、矢量绘图组件,内存泄露检测库,Kotlin 的 linter、mock 库、依赖注入框架等。 LeakCanarysquare 开源的内存泄露检测库。 使用起来极为便捷,只需在 build.gradle 中引入依赖: dependencies { debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.0-alpha-2'}LeakCanary 会自动检测 debug build 中的内存泄露,并显示提示。无需修改代码,也不会影响正式发布版本。 GitHub 仓库:square/leakcanary Material Dialogs美观、可扩展的 Material Design 风格对话框。 Material Dialogs 采用模块化架构,核心模块(core)包含了核心功能和基本功能,文本输入框、文件选择器、色彩选择器、时间日期选择器、弹出表单等功能作为扩展模块提供,可单独引入。支持 AndroidX 生命周期组件。 GitHub 仓库:afollestad/material-dialogs CalendarView基于 RecyclerView 的日历库。 这个库借鉴了 iOS 的 [JTAppleCalendar],提供了比较齐全的日历视图所需特性,支持定制样式。 GitHub 仓库:kizitonwose/CalendarView KyrieVectorDrawable 和 AnimatedVectorDrawable 的超集。 VectorDrawable 提供了像素密度无关性——在任意设备上随意缩放而不损失画质。AnimatedVectorDrawable 在其基础上添加了动画特性。然而,它们有三大缺陷: 无法暂停和继续。无法在运行时动态创建。相比 web 上的 SVG,它们仅仅支持少量特性。Kyrie 提供了 KyrieDrawable 类,支持 VectorDrawable 和 AnimatedVectorDrawable 的所有特性,同时改进了上述缺陷。 ...

June 20, 2019 · 2 min · jiezi

关于-Google-公司的一些趣闻

简评: 很少有科技公司能像 Google 一样象征着这个数字时代,你知道 Google,但不一定知道以下这些有趣数据。这些来自 VizionOnline 的数据概述了不为人知的 Google 趣闻,分享给大家。几十年来,Google 不仅统治了搜索引擎领域(在国外),还不断涉足其它的科技领域 —— 其中包括机器人,AR 眼镜,无人机等。这些「不务正业」可能是这个搜索巨头最有意思的地方。  Google 名字的来源是「Googol」,指的是 10 的 100 次幂;平均每一天,Google 每秒都会有 63000 条搜索产生;在 2016 年一共产生了 1.2 万亿条搜索,并逐年增加;2017 年 Google 的广告收入约 944 亿美金;目前 Google 市值约 7390 亿美金,但 1999 年差点儿以 100 万美金的价格被出售;现在 Google 拥有 200 多家公司,自 2010 年起平均每周收购一家公司;Google 每年雇佣 200 只山羊为加州总部除草,鼓励员工带着宠物上班;Google 最初的名字是 BackRub,在主页上写着:“BackRub 是一个「网络爬虫」,可以用它在网络中穿梭。”???? 大家还可以查看下面的信息图 原文链接:20 Fascinating Google Facts and Stats推荐阅读:Google 有个不为人知的面试渠道

June 17, 2019 · 1 min · jiezi

让最新的-Android-Q-Beta-3-强制重启的-Project-Mainline到底是什么

一. 序最新的 Android 版本 Q,已经发布了 Android Q Beta 3,虽然没有正式发布,但是不少用户已经加入了测试计划,抢先体验 Android Q 的新功能。 近期不少体验用户反馈,自己的设备升级到 Beta 3 之后,会出现触不及防的强制重启。谷歌方面已经确认,是运行了 Project Mainline 这个在 Android Q 中新加入的功能导致。谷歌在确认的同时也表示,这些问题会在之后的测试版本中修复,不会出现在正式版中。 那什么是 Project Mainline(后文简称 P-M) 呢?它是干什么的?又解决了什么问题? 二. Project Mainline2.1 P-M 解决什么问题?Android 能有今天的发展,得益于它系统源码的开源,又正是因为它的开源,导致碎片化严重。以至于在谷歌高速迭代 Android 系统版本的过程中,不少用户在吐槽,Q 来了,O 还没用上呢。 而碎片化又会导致各种问题,例如安全,隐私等问题。往往在系统中暴露出来一个问题,Android 团队修复它,还需要等待漫长的时间,才能最终由厂商同步到用户端。 中间环节太多,必然导致更新的缓慢,往往一个安全更新要经过半年甚至一年才能最终被厂商升级到用户端,同时这些步骤中,还有一些是有时间重叠的。 上图表示了谷歌和芯片制造商以及手机厂商之间的更新时间,这各个阶段之间的任何重叠,都可能导致更新的失效。这就导致对于手机厂商而言,使用较旧的但是更稳定的 Android 版本,是更安全的做法。 为了解决这些问题,从 Android P 开始加入的 Project Treble 计划,它就是现在 Android Q 中 Project Mainline 的基础。通过 P-M 的支持,简化并加快了 Android 生态系统的升级更新。 ...

May 30, 2019 · 1 min · jiezi

谷歌发布的Translatotron是什么

背景介绍作为中国人,学好英语这件事从小学开始就让人苦恼,近些年随着AI的快速发展,语言差异是否会缩小甚至被消灭成了热门话题。在5月15日,谷歌AI在博客平台发出一篇文章,正式介绍了一款能保留原声的“同声传译”黑科技,消息一出,迅速席卷网络,为科技发烧友带来了更多曙光,下面,让我们来揭开这个叫做“Translatoron”的神秘面纱。 Translatotron的出现目前市面常用的语音翻译产品的翻译过程包含三个步骤,首先将语音转换为文字,再由机器将文字转换为目标语言文字,最后将目标语言的文字转化为语音(文字转语音全称Text-To-Speech,也叫TTS)。 而谷歌的Translatotron有很大不同,它通过某种手段实现了语音到语音的直接转译,避免了上述的三个步骤。除此之外,它还有一些其它的优势,比如更快的推理速度、更容易识别不需要翻译的名称及专业名词等,最牛的是它可以保留原说话人的声音特征,做到原声输出其它语言,幻想一下用自己的声音说出了连本人都听不懂的外语,是不是有点像《流浪地球》中的同声翻译,多刺激啊,在此向大刘致敬! Translatotron的原理其实端到端的语音翻译在2016年就出现了,当时研究者们发现用“序列到序列模型”来做“语音到文字”的翻译可行性很高,到了2017年,研究者们证明出它果然很吊,但是这还不够,Translatotron的出现又向大家证明了“序列到序列模型”不仅可以转文字,还可以不依赖任何中间文本,直接帮你转为语音。 上面部分的名词有些含糊不清,这里来解释一下,首先是端到端学习,英文名为end-to-end,它就像一个黑盒子,人们把数据丢进去后只关心结果是否与期望的结果一致,不关心中间的实现过程。这个黑盒子的实现原理是,当结果和期望的结果出现误差后,它会将误差反传回训练模型的每一环节,让它们根据误差来自我调节,直到结果与预期相符为止。 而序列到序列模型,英文为Sequence to Sequence,它是端到端理念的一种实现框架,最早出现于Bengio在2014年的论文,Bengio是蒙特利尔大学的教授,他与另外两位朋友被AI领域的人戏称为“加拿大黑手党”。 “序列到序列”模型的目的是“将一个领域(比如中文)的序列转化为另一个领域(比如英文)的序列”,它是通过联合两个循环神经网络(RNN)来实现的,而联合的这种结构又被叫做编码-解码(Encoder-Decoder)结构,结构的两端支持多种数据类型,比如文字、语音、图像、视频等,非常适用于机器翻译。 Translatotron正是利用了图像这种数据类型,它通过声谱图作为输入,再生成出目标语言的声谱图,然后通过一个叫做Vocoder的语音编解码器(用于分析和合成用于音频数据压缩,多路复用,语音加密,语音转换等的人类语音信号)将新生成的光谱图转换为时域波形(一种表达信号与时间关系的波浪形状)。另外,它还可以选择使用一个编码器在合成翻译语音中维护原来的语音特征。 这项研究是由谷歌大脑、谷歌翻译和谷歌语音团队共同完成的,由于目前的训练数量较少,Translatotron所展示出的翻译质量以及原声匹配度没有预想中那么好,但随着更多数据的训练相信会有非常光明的前景。感兴趣的同学可以去官方博客了解一下。 如果你愿意,让我来帮你关注那些可能不知道又想知道却想不到的知识。

May 18, 2019 · 1 min · jiezi

Google-Coral-Edge-TPU-USB加速棒上手体验

Edge AI是什么?它为何如此重要?传统意义上,AI解决方案需要强大的并行计算处理能力,长期以来,AI服务都是通过联网在线的云端基于服务器的计算来提供服务。但是具有实时性要求的AI解决方案需要在设备上进行计算 ,因此边缘人工智能(Edge AI)正在逐渐进入人们的视野。 虽然本质上AI计算可以使用基于GPU的设备,但这套设备成本高昂,并且搭配非常繁琐,比如对内存要求越来越高、能耗越来越大等。无论是从研究还是创新角度来讲,边缘人工智能推理都正在成为蓬勃发展的深度学习革命越来越重要的组成部分。 与此同时手持设备(比如手机、平板等)日益普及,每年都能卖掉几十亿台,手机已然成为日常使用最为频繁的设备,可以预测对移动AI计算的需求也正在稳步增加。 因此,移动处理器的开发已经变得越来越以人工智能为重点,这些处理器都具有用于机器学习的专用硬件,比如现在主流的手机CPU评测都会加上一项AI计算能力的跑分。 目前从消费应用到企业应用都遍布 AI 的身影。随着联网设备数量的爆发式增长,以及对隐私/机密、低延迟时间和带宽限制的需求,云端训练的 AI 模型需要在边缘运行的情况不断增加。Edge TPU 是 Google 专门为在边缘运行 AI 而打造的 ASIC,它体型小、能耗低,但性能出色,让您可以在边缘部署高精度 AI。从下图可以看出Edge TPU核心的面积仅有一美分的大概十分之一大小。 Edge TPU可以用来做什么?可以使用Edge TPU在移动设备上训练模型,但目前仅支持通过迁移学习在设备上重新训练的分类模型,这种训练方法是在Low-Shot Learning with Imprinted Weights这篇论文中提到的imprinted weight技术,此技术为实时系统创造了许多可能性。并且,据相关评测显示,Edge TPU是同类产品中计算速度最快的设备。 市面上已经有的其他AI边缘推理硬件虽然这是第一个Edge TPU,但这之前就已经有一些类似的AI专用硬件,例如: 英特尔基于MyriadVPU的神经计算棒,及Google Vision Kit。基于Cuda的NVIDIA Jetson TX2。 Coral Beta版TPU,也称张量处理单元(Tensor Processing Unit)主要供Google数据中心使用。对于普通用户,可以在Google云端平台(GCP)上使用,也可以使用Google Colab来使用免费版。 谷歌在2019年国际消费电子展(以及今年的TensorFlow开发峰会上)首次展示了他们的Edge TPU,然后于三月份发布了Coral Beta。 Beta版本包括开发板和USB加速器,以及用于生产目的的预览版PCI-E加速器和模块化系统(SOM)。 USB AcceleratorEdge TPU USB Accelerator与任何其他USB设备基本一样,跟英特尔的MyriadVPU的差不多,但功能更强大。接下来我们来一个开箱,并且稍微上手看看。 开箱 盒子中包含: 入门指南USB加速器Type C USB数据线入门指南入门指南介绍了安装步骤,你可以很快完成安装。包括模型文件在内的所有需要的文件可以随安装包一起在官网下载即可,安装过程并不需要TensorFlow或OpenCV这些依赖库。 提示:必须使用Python 3.5,否则将无法完成安装。还需要将install.sh文件最后一行 python3.5 setup.py develop - user改为python3 setup.py develop - user演示程序Coral Edge TPU API文档包括图像分类和目标检测的概述和演示程序。 ...

May 15, 2019 · 1 min · jiezi

从-React-Native-到-Flutter移动跨平台方案的真相

作者:LeanCloud 郑鹏 2018 年 12 月,Google 发布了 Flutter 1.0 正式版,似乎再次点燃了人们对移动跨平台开发的热情。上一次出现类似的情况,是在 15 年年初,Facebook 发布 React Native 的时候。四年不到的时间里,有两家大公司相继推出了自己的移动跨平台方案(当然还有 16 年的时候,微软收购了 Xamarin,不过没有前两个那么引人注目罢了),同时这些方案也受到了市场的追逐。这些现象,似乎预示着,跨平台开发才是移动开发的未来,或者说,跨平台开发才是一种更好的开发方式。 既然它是热点,那肯定有可以讨论的地方。不过,在说 React Native 和 Flutter 之前,我觉得要先谈一谈「跨平台开发」。 移动跨平台方案那什么是「跨平台开发」呢? 通常意义上来说,如果你想在 iOS 以及 Android 系统里,提供有相同内容的 App,那么使用 Apple 提供的构建工具,开发一个 App,然后上架到 AppStore,同时使用 Google 提供的构建工具,开发一个 App,然后上架到 Google Play。这两个 App 的实现,除了使用的工具不同之外,大部分业务逻辑是相同的。你可以发现,在这个过程中,产生了「重复」。 在重构时,如果项目里有大量的重复代码,或者重复逻辑,我们一般会将这些代码或逻辑以函数,模块或库的形式做封装,这个过程最大化的消除了重复的代码,最终达到简化项目的代码这一目的。 所以在我看来,「跨平台开发」也是基于这个思想而产生的,人们想要一套减少甚至不用写重复逻辑的解决方案,然后市场给予了人们期望的方案。跨平台方案的最大特点,可以用 Sun 当年在推广 Java 时,所使用的一句口号:”Write once, run anywhere” 作为总结。这一句话,也被如今的 React Native 以及 Flutter 引用或继承。 React NativeReact Native 是由 Facebook 所主导的跨平台方案,得益于 Javascript 以及 ReactJS 的流行,React Native 在推出时,便受到了大量的追捧。除了跨平台的特性,React Native 最大的特点就是,可以使用 Javascript 来构建移动应用,并且最终应用的表现形式,可以做到和使用原生开发套件开发的应用相差无几。 ...

May 13, 2019 · 2 min · jiezi

Whats-New-in-JavaScript

前几天 Google IO 上 V8 团队为我们分享了《What's New in JavaScript》主题,分享的语速很慢推荐大家可以都去听听就当锻炼下听力了。看完之后我整理了一个文字版帮助大家快速了解分享内容,嘉宾主要是分享了以下几点: JS 解析快了 2 倍async 执行快了 11 倍平均减少了 20% 的内存使用class fileds 可以直接在 class 中初始化变量不用写在 constructor 里私有变量前缀string.matchAll 用来做正则多次匹配numeric seperator 允许我们在写数字的时候使用 _ 作为分隔符提高可读性bigint 新的大数字类型支持Intl.NumberFormat 本地化格式化数字显示Array.prototype.flat(), Array.prototype.flatMap() 多层数组打平方法Object.entries() 和 Object.fromEntries() 快速对对象进行数组操作globalThis 无环境依赖的全局 this 支持Array.prototype.sort() 的排序结果稳定输出Intl.RelativeTimeFormat(), Intl.DateTimeFormat() 本地化显示时间Intl.ListFormat() 本地化显示多个名词列表Intl.locale() 提供某一本地化语言的各种常量查询顶级 await 无需写 async 的支持Promise.allSettled() 和 Promise.any() 的增加丰富 Promise 场景WeakRef 类型用来做部分变量弱引用减少内存泄露Async 执行比之前快了11倍开场就用 11x faster 数字把大家惊到了,也有很多同学好奇到底是怎么做到的。其实这个优化并不是最近做的,去年11月的时候 V8 团队就发了一篇文章 《Faster async functions and promises》,这里面就非常详尽的讲述了如何让 async/await 优化到这个速度的,其主要归功于以下三点: ...

May 11, 2019 · 3 min · jiezi

Material-Design-组件之-FloatingActionButton

Material Design 设计规范在 Google I/O 2014 推出,这种设计理念一经推出就受到广大开发者的喜爱,主要侧重于纸墨化创作和突出设计的实体感,使得设计更接近于真实世界,力求平滑、连续的交互方式与用户体验,这种设计规范更能促进 Android 生态系统的发展,为此,Google 提供了一系列的符合 Material Design 风格的控件,如 FloatingActionButton、Snackbar、TabLayout 等。虽然经常在开发中用到,但是没有做记录,打算从头开始记录一下这些组件的使用,今天说一下 CoordinatorLayout 和 FloatingActionButton 相关的知识。 CoordinatorLayoutCoordinatorLayout 是一个加强版的 FramLayout,意味着如果不加任何限制,在 CoordinatorLayout 里面的子 View 都会默认出现在左上角,CoordinatorLayout 有两个主要的使用方式: 作为应用的顶层布局作为与一个或多个子 View 交互的容器可为 CoordinatorLayout 里面的子 View 指定 Behavior,就在单个父布局中提供许多不同的交互效果,子 View 之间也可以相互交互,CoordinatorLayout 可以使用 CoordinatorLayout.DefaultBehavior 注解来指定子 View 的默认行为,总之,可以借助 CoordinatorLayout 实现不同的滚动效果。 FloatingActionButtonFloatingActionButton 是 Material Design 类型的按钮控件,一般表现是浮动在 UI 上层的圆形图标,有自己的 behavior 并可以设置锚点。 FloatingActionButton 有两种大小,分别是 normal(56dp) 和 mini(40dp) ,默认是 mini(40dp),其大小可以通过属性 fabSize 来指定需要的大小,当然也可以设置 fabSize 为 auto,系统会根据不同的屏幕选择合适的大小。 FloatingActionButton 间接继承 ImageView,可以使用如下方式在代码中设置图标: ...

May 11, 2019 · 2 min · jiezi

Flutter-15-发布正式成为全平台-UI-框架

一. 序在 Google I/O 2019 上,Dart 团队宣布推出新的 Flutter 稳定版本 1.5,这是 Flutter 迄今为止最大的一次版本发布。 伴随着 Flutter 1.5 的发布,同期也宣布发布 Flutter for Web 的 Preview 版本,正式开启了 Flutter 的全平台 UI 框架之路。 早在年初发布的 Flutter 2019 Roadmap 中,就有提到,会在今年支持移动设备之外的平台,对 Web 的支持,算是完成了一个新的里程碑吧。 二. Flutter for WebFlutter 之所以能够在移动平台上运行,主要是依赖的 Flutter Engine,就是 Flutter 所依赖的运行环境。这就导致在移动平台,只要你使用了 Flutter,哪怕只用混合开发的模式写了一个页面,这也将为你的 App 增大大约 4MB 的体积。 而 Flutter for Web,完全是一种全新的模式,它可以将 Dart 编写的现有 Flutter 代码,编译成可嵌入浏览器并部署到任何 Web 服务器的代码。 编译后的代码,完全是基于 HTML、CSS 和 JavaScript 这些标准的 Web 技术,所以它也不需要任何浏览器插件的支持。 ...

May 9, 2019 · 1 min · jiezi

jsPDF-实现-Google-云端硬盘只读-PDF-文件下载导出

背景https://www.savemyexams.co.uk 蜜汁刷题网站,会员简直就是在抢钱好不容易搞了个教师折扣,试卷资源还不能下载…本方法适用于 Google Drive 被设置为 Read Only 的 PDF 文件的下载导出 代码/* Via https://codingcat.codes/2019/01/09/download-view-protected-pdf-google-drive-js-code/ If the images are not complete, try zooming the page to get the full image. 1. Open Developer Tools on separate window and choose the Console tab 2. Paste the code below (and hit enter)*/let jspdf = document.createElement("script"); jspdf.onload = function () { let pdf = new jsPDF(); let elements = document.getElementsByTagName("img"); for (let i in elements) { let img = elements[i]; if (!/^blob:/.test(img.src)) { continue; } let can = document.createElement('canvas'); let con = can.getContext('2d'); can.width = img.width; can.height = img.height; con.drawImage(img, 0, 0); let imgData = can.toDataURL("image/jpeg", 1.0); pdf.addImage(imgData, 'JPEG', 0, 0); pdf.addPage(); } pdf.save(document.title.split('.pdf - ')[0]+".pdf");}; jspdf.src = 'https://cdn.bootcss.com/jspdf/1.5.3/jspdf.debug.js';document.body.appendChild(jspdf);↑ JavaScript 代码 ...

May 1, 2019 · 1 min · jiezi

通过goquery爬取知乎数据

goquery的使用因为毕设模仿知乎做了个网站,需要点数据,所以打算爬点知乎的数据,本来想通过python写个爬虫,但是发现go也有个挺好用的爬虫库——goquery,如果你学过前端,那你完全可以在半个小时之内用goquery写出一个爬虫 goquery类似jquery,它是jquery的go语言版本实现,使用它,可以很方便对HTML进行处理。 它可以通过HTML Element元素,也可以通过Id选择器,Class选择器,以及属性选择器去筛选数据 github:https://github.com/PuerkitoBio/goquery 以下是我爬取知乎数据的demo代码 package mainimport ( "fmt" "log" "net/http" "strconv" "strings" "github.com/PuerkitoBio/goquery" _ "github.com/go-sql-driver/mysql")func ExampleScrape() { for i := 321450693; i > 321450680; i-- { res, err := http.Get("https://www.zhihu.com/question/" + strconv.Itoa(i)) if err != nil || res.StatusCode != 200 { continue } doc, err := goquery.NewDocumentFromReader(res.Body) if err != nil { log.Fatal(err) } doc.Find(".QuestionHeader .QuestionHeader-content .QuestionHeader-main").Each(func(i int, s *goquery.Selection) { questionTitle := s.Find(".QuestionHeader-title").Text() questionContent := s.Find(".QuestionHeader-detail").Text() questionContent = questionContent[0 : len(questionContent)-12] fmt.Println("questionTitle:", questionTitle) fmt.Println("questionContent:", questionContent) }) doc.Find(".ContentItem-actions").Each(func(i int, s *goquery.Selection) { }) doc.Find(".ListShortcut .List .List-item ").Each(func(i int, s *goquery.Selection) { head_url, _ := s.Find("a img").Attr("src") author := s.Find(".AuthorInfo-head").Text() fmt.Println("head_url:", head_url) fmt.Println("author:", author) voters := s.Find(".Voters").Text() voters = strings.Split(voters, " ")[0] content := s.Find(".RichContent-inner").Text() //带标签的可以用Html() createTime := s.Find(".ContentItem-time").Text() createTime = strings.Split(createTime, " ")[1] commentCount := s.Find(".ContentItem-actions span").Text() fmt.Println("voters:", voters) fmt.Println("content:", content) fmt.Println("createTime:", createTime) fmt.Println("commentCount : ", commentCount) }) }}func main() { ExampleScrape()}

April 28, 2019 · 1 min · jiezi

Google面试问题指南使用Python删除重复出现的字符

来源 | 愿码(ChainDesk.CN)内容编辑愿码Slogan | 连接每个程序员的故事网站 | http://chaindesk.cn愿码愿景 | 打造全学科IT系统免费课程,助力小白用户、初级工程师0成本免费系统学习、低成本进阶,帮助BAT一线资深工程师成长并利用自身优势创造睡后收入。官方公众号 | 愿码 | 愿码服务号 | 区块链部落免费加入愿码全思维工程师社群 | 任一公众号回复“愿码”两个字获取入群二维码本文阅读时长:5min 当下,谷歌的面试时常被程序员提及。有时,面试能让我们发挥最好的一面,从而获得我们想要的职位。本文我们将讨论一个可能出现在Google面试中的经典问题。 愿码提示:如果您是编码老手,您可能已经知道如何解决这个问题!如果你经验较浅,那么你一定会从本文中受益。问题给定一个字符串作为输入,删除任何重复出现的字符,并返回新字符串。 正如我们从上面的例子中看到的那样,输出是“abc”,因为我们删除了第二个'a','b'和'c'。首先,让我们在Python 2.7中设置我们的功能。 def deleteReoccurringCharacters(string):为了解决这个问题,我们将使用一个名为HashSet的特定数据结构。 您可以将集合视为与数组类似,但有两个主要例外。 这是完全无序的它不能包含重复项因为它是无序的,我们还需要一个空字符串来存储我们按顺序添加到集合中的字符。这将是我们返回的字符串。我们来设置一下 def deleteReoccurringCharacters(string): seenCharacters = set() outputString = ''现在我们已经建立了我们需要的数据结构,让我们再来谈谈我们的算法。由于集合在内存中的工作方式,它的查找时间复杂度为0(1)。这意味着我们可以用它来检查我们是否已经访问过一个角色! 我们的算法遍历初始字符串中的所有字符并执行以下操作:第1步:检查角色是否已经在我们的设置中第2歩:如果它不在集合中,则将其添加到集合中并将其附加到字符串让我们看看代码中的内容 for char in string: if char not in seenCharacters: seenCharacters.add(char) outputString += char我们不必担心“else”情况,因为我们不需要处理重复出现的字符本身。现在剩下要做的就是返回outputString。这是完成的代码的样子: def deleteReoccurringCharacters(string): seenCharacters = set() outputString = '' for char in string: if char not in seenCharacters: seenCharacters.add(char) outputString += char return outputString如果这是一次面试,招聘人员会问你时间和空间的复杂性。我们来分析一下。 ...

April 25, 2019 · 1 min · jiezi

国外青少年最喜爱的聊天-app竟然是-Google-Docs

简评: 这还真不是标题党,Google Docs 的协作中内置了实时聊天的功能,也可以进行 comments,颇有种现代「传纸条」的既视感。其实国内的石墨文档、腾讯文档等协作工具也有类似的效果,本文很有意思,分享给大家。我们小时候,上课开小差时会给同学传纸条儿。现在的小孩子不得了了,他们使用 Google Docs(谷歌文档)。 「我们现在很少用实体本子了」,15 岁的 Skyler 这么说道。他和其他学生一样,更多是用网名来识别。随着越来越多的笔记本电脑进入中学课堂,教育工作者也开始使用 Google Docs 进行学生间的协作练习,可是,学生们对 Google Docs 的用法似乎……跑偏了? 和中国一样,手机和通讯软件是不允许在课堂上出现的,WhatsApp, Instagram 之类的都不行,于是出于教育目的使用的 Google Docs 就理所应当地被留了下来。 学生们会使用其内置的实时聊天功能,这个功能默认情况下不会打开,许多老师甚至都不知道它的存在。 或者,有些学生直接用「在线批注」的功能。他们会先拷贝一份课程文档,然后邀请朋友进入协作,随意「评论」某段话,接下来就可以在弹出的框框里留言沟通了。 当然,还有更简单的方式 —— 这些学生也可以直接创建一个共享文档,然后邀请朋友,你一言我一语地就开聊了。 聊天也有基本法,孩子们后来还制定了一些聊天规则,比如说用不同的字体区分不同的人。一些正规军还会将常用的 emoji 先贴在文档开头,想用就可以直接复制取用。 用 Google Docs 聊天不仅瞒过了老师,也欺骗了父母。每到晚上做作业的时候,父母以为你在电脑前认真开展一个项目,却不知道你其实用协作文档海聊。 不论是从前的传纸条,还是现在的 Google Docs 聊天,大多数聊天内容都很日常,甚至在旁人看起来是非常无聊的。不过,霸凌依然存在 —— 有些孩子会创建数字化的「烧书」(burn books) ,也有人会手误把自己小团体的群聊链接发错人。 除了 Google Docs 之外,任何能进行线上协作的工具都可以这么玩。office 365 也被拿来做类似用途,主要看教室里的大家能用什么,习惯用什么。 虽然 Google Docs 很可能是中学生最热门的聊天工具,但大多数青少年一旦上大学后就告别这种聊天方式,可能大学使用手机更自由了。 后记: 青少年用户一直是各社交应用的必争之地,Google+ 没做成功的社交反倒让自家的效率工具无心插柳成活了, 不知道两方的工程师们会不会哭笑不得。话说回来,Google Docs 的文档加密、https 全程加密和优秀的多人聊天群组协作功能,这三条已经足够让那些「专业社交工具」脸红了。原文链接: The Hottest Chat App for Teens Is … Google Docs推荐阅读: Google 团队效能研究 | 为什么雇用最聪明的人是远远不够的?欢迎关注微信号「极光开发者」 ...

April 23, 2019 · 1 min · jiezi

Google发布Anthos:Google背书,宣告多集群多云Kubernetes时代已来

今天, Google Cloud NEXT 2019大会召开,在这场规模三万人的盛会上,Google宣布推出Anthos作为多云服务新方案,提供跨云(目前仅支持AWS和Azure)管理Kubernetes集群。Anthos(前身为Cloud Service Platform)让用户可以跨环境构建和管理现代混合应用程序,用户可以在Anthos之上交付和管理容器、Kubernetes、微服务架构和Service Mesh等。据Google CEO Sundar Pichai在大会发布时的介绍,Google自身作为公有云提供商,产品Anthos平台甚至可以支持部分竞争对手的云,如目前支持AWS和Azure,但除这二者之外的其他公有云如阿里云、Oracle、IBM等的云都尚不支持。技术前瞻性和持续创新得到证明Anthos的发布,对Rancher来说是一则十足的好消息。在Google Anthos中,我们看到了它与Rancher的愿景的完美契合。因为Rancher始终相信Kubernetes将成为所有公有云和私有云都会提供的、标准化的基础架构,企业Kubernetes平台必须提供多集群、多云管理的功能。早在两年前,Rancher就预见到企业将需要跨不同的公有云和私有数据中心管理多个Kubernetes集群。正是怀着这种理念,我们构建了Rancher 2.0,它可以与所有Kubernetes集群协同工作,包括Google GKE、Amazon EKS、Azure AKS、华为云、阿里云、腾讯云等等,是业界第一个、也是目前唯一一个与所有主流公有云厂商完成官方合作及对接的Kubernetes平台。在过去的12个月里,已有成千上万的具有前瞻性思维的企业在生产环境中应用了Rancher 2.0。但是在初期,当我们向用户阐释Rancher能够管理多Kubernetes服务(如GKE、AKS、EKS等)的这一功能的优势时,有用户虽然对这一创新特性兴奋与好奇,却仍忍不住问我们,“管理多Kubernetes集群与服务?Rancher是对的吗?”如今,Google正式推出Anthos足以强力地证明,Rancher对多集群多云Kubernetes的坚信和前瞻性,是对的。Container和Kubernetes技术均正处于采用的早期阶段。我们相信创新的产品和服务是实现大规模采用的关键。我们喜欢Google Anthos和Google Cloud Run(同样是今天全新发布的)等新服务,同时也为Rancher团队开发的创新技术感到自豪。Rancher 2.0是业界第一个多集群、多云Kubernetes管理平台。除此之外,Rancher Labs的创新步伐从未放缓,如最近推出的轻量级Kubernetes发行版K3s、多Kubernetes集群网络框架Submariner、对单一应用程序跨多Kubernetes集群的部署与管理等等,都广受客户和用户称赞。Anthos:竞争者?推动者?那Google会成为Rancher的竞争对手吗?答案是否定的。首先,Rancher是一个开源的平台,而Anthos是一种云服务。我们甚至相信,Anthos的发布将毫无疑问加速Rancher被更大规模地采用。正如Google发布GKE而极大地帮助普及了Kubernetes技术一样,我们也相信Anthos将促进将多集群、多云Kubernetes管理带入更主流的阶段。其次,作为一个完全开源的Kubernetes管理平台,Rancher自身并非公有云提供商,因而一如既往的是所有公有云提供商、包括他们提供的托管Kubernetes服务的合作伙伴而非竞争对手。Rancher也才更能中立地提供对其他厂商Kubernetes服务的最一流支持。因为公有云厂商之间天然的竞争关系,我们很难想象AWS乐意致力于把运行在EKS上的应用无缝迁移到Google GKE或者其他云服务商提供的Kubernetes服务上,反之亦然。从世界范围内包含Google GKE、Amazon EKS、Azure AKS、华为云、阿里云、腾讯云以及正在加入Rancher合作伙伴列表的众多主流公有云与Rancher一直以来的紧密合作中可见,Rancher也始终是所有第三方公有云厂商普遍最为信任的统一管理平台。宠物与牛的故事听过那个云计算时代“宠物”与“牛”的故事吗?传统的物理机时代,物理机(及它所代表的计算资源)被工程师称为“宠物”,它们价格高昂,需要精心维护和保养。而在云计算时代,工程师可以把服务器当成牛,一头牛倒下没关系,只要放牧人活着就行,服务器价格便宜,就像一次性工具,即时它们倒下,一台设备上的任务也能转移到另一台,对公司业务不会造成任何影响。我们将公司及产品命名为“Rancher(放牧人)”,就是因为我们愿景中的未来里,企业可以自由选择并搭配着从他们喜欢的云提供商那里获得计算资源,而Rancher会开发一个软件平台来完美实现这种统一体验。随着Anthos的发布,我们相信整个行业又向实现这一愿景迈进了一步!本文基于Rancher Labs联合创始人及CEO梁胜所写博客删改编辑而成:https://rancher.com/blog/2019…

April 11, 2019 · 1 min · jiezi

Google Adsense付款方式添加西联付款

本文已同步到专业技术网站 www.sufaith.com, 该网站专注于前后端开发技术与经验分享, 包含Web开发、Nodejs、Python、Linux、IT资讯等板块.Google Adsense付款方式添加西联付款具体步骤:1.登陆Google Adsense后台控制面板, 点击【 付款 】菜单, 选择右侧的【 您如何获得付款 】 卡片, 点击 【 添加付款方式 】蓝色链接, 进入选择付款方式页面。2.选择 【 添加西联汇款账号 】。3.在弹出的西联汇款信息栏中输入收款人的姓氏和名字,需要填拼音,可大小写,建议大写;并勾选 【 本人在此确认,我拥有政府签发的身份证,该身份证上的姓名和以上姓名一致,我有权接收此付款 】单选框,然后点击【 保存 】按钮。4.添加完成后, 页面自动刷新, 显示您的西联付款信息。

April 2, 2019 · 1 min · jiezi

集群 | 孙悟空分身术

本文首发于我的公众号 cloud_dev,专注于干货分享,号内有大量书籍和视频资源,后台回复「1024」即可领取,欢迎大家关注,二维码文末可以扫。在孙悟空的七十二变中,我觉得最厉害的是分身能力,这也是他百试不得其爽的终极大招,每每都能打得妖怪摸不着北。集群,学名叫 Cluster,可以翻译为簇、聚类、集群等多种意思,不同的翻译,在技术世界里所表示的意思都不尽相同,但都有一个共同的指向,即群体。集群就是由一组计算机所组成的实体,通常作为一个整体向用户提供资源和服务。集群的研究和发展离不开人们对高性能计算的追求,像我们熟悉的向量机、对称多处理机、工作站、超级计算机等等都是对高性能计算追求下的产物。这些系统要么是提高 CPU 的主频和总线带宽来提高系统性能,要么是增加 CPU 个数和内存容量来提高性能,但这些手段对性能的提高都是有限的。有人做过实验,当 CPU 个数超过某一阈值时,系统的性能反而会变差。其主要的瓶颈就在于 CPU 访问内存的带宽并不能随着 CPU 个数的增加而有效增加。相反,集群系统的性能可扩展能力是线性增长的。我们可以简单通过增加机器数来增加集群的运算能力,相比购买高性能的大型计算机,同等运算能力下,我们可以获得更高的性价比。同时,系统的可靠性也得到了增强。历史早在七十年代计算机厂商和研究机构就开始了对集群系统的研究和开发,首先创造性发明集群的是 Seymour Cray(西摩·克雷)—— 超级计算机之父。Seymour 是一位美国工程师,在 1960 年代,CDC 公司开始涉足高性能计算领域,彼时还是大型机的天下,这些大型机设计非常复杂,生产周期漫长,价格还非常昂贵。于是,当时在 CDC 公司担任总设计师的 Seymour 就决心建造出一台他心目中的高性能计算机。Seymour 出于工程师的直觉,很快想到并行是提高计算机性能的有效方式。他使用廉价的方式来获得跟大型机一样的运算能力。他将多个普通的处理器连接起来,使它们能够协同工作,这就是高性能计算机的原型。后来,IBM、HP 等公司学习了 Seymour 的这套架构,高性能计算机开始迅速推广,逐步取代原有的大型机。高性能计算机为当时的登月计划等大型科研项目作出了非常重要的贡献。然后进入八十年代,在摩尔定律的指导下,CPU 频率不断提高,芯片不断降价,个人计算机强势崛起。苹果、微软等公司借助这股东风成为个人计算机时代的王者。随之而来的就是高性能计算机市场遭到了吞噬,被迫只能退守公司服务器市场。但很快,随着互联网的普及,高性能计算机又迎来新的一波热潮。互联网上用户量庞大,普通 PC 难以应付如此众多的网络请求,必须要依赖由高性能计算机组成的服务器集群。在 2000 年左右的网络泡沫时期,成就了很多像 Sun 这样的服务器生产商。如今,IT 行业向云计算冲击,诸如 Google、Apple、Amazon 等很巨头纷纷建立起了自己的数据中心。集群的规模在不断扩大,为海量的数据提高基础设施提供了支撑。根据不同的应用场景,集群也演变出多种形态,比如高性能集群、高可用集群、负载均衡集群等等。集群元素集群不是简单的硬件堆叠,而是硬件和软件的结合。从软件上说,集群至少需要:构建于 TCP/IP 协议上的通信软件,用于集群中节点之间的通信。一套中心管理软件,用于统一管理集群中节点的资源、任务和容错等等。这两点比较好理解,集群的规模往往是比较庞大的,对于管理员来说,需要随时能够知晓集群中各节点的业务正常与否,出问题了应该怎么保证业务能够不中断,遇到流量高峰和低谷的时候,又该怎么响应,这些操作如果纯靠人工来完成那必将很惨烈。依靠软件和网络来完成自动化的管理方式,可以将管理员解放出来。当然,以上说的两点是比较宽泛的,用户可以根据自身需求来部署不同的集群元素。一个比较经典的集群模型当属 Beowulf 集群,它通过一个节点统一将来自网络的请求分配给各个节点进行计算处理。集群与分布式集群与分布式像一对孪生兄弟,傻傻分不清楚。在我看来,它们之间没有特别明确的分界线,集群离不开分布式,分布式也需要集群。如果一定要做个区分,可以套用一个比喻来描述两者的区别:一家餐厅刚开业,由于成本限制招了一个厨师,慢慢地,餐厅生意越做越好,一个厨师已经很难应付过来,于是又招了一个,这两个厨师水平相当,都能做同样的事,两个厨师之间的关系就是集群。两厨师除了炒菜,还要负责洗菜、配菜等等的活,工作负荷已经严重超标,为了让厨师能专心炒菜,把菜做到极致,餐厅又招了配菜师来辅助厨师,厨师和配菜师之间的关系就是分布式。这个例子比较形象,在网站开发中也有类似的关系,两个全栈工程师之间就是集群的关系,前端工程师和后端工程师之间就属于分布式的关系。所以,一定要有区分的话就是:集群是一个业务部署在多个服务器上,而分布式是一个业务拆分成多个子业务部署在不同的服务器上。但在实际部署中,为了高性能,需要分布式部署,为了高可用,需要集群部署,这两者都是业务所必须的指标。所以,集群和分布式之间的关系是相互补充的。虚拟化随着虚拟化技术的发展,一台服务器可以虚拟出多个虚拟机,对外提供业务,这种方式大大提高了资源的利用率,集群的部署也逐步从物理机过渡到虚拟机,灵活性大大提高。但同时也带来了更多新的研究课题。虚拟化计算、虚拟化存储、虚拟化网络、虚拟化安全等等这些课题共同推动着云计算产业迈出一个又一个的台阶。数据中心数据中心是集中存放和运行服务器的地方,是规模最大的集群。随着云计算和大数据概念的风起云涌,Google、Amazon 等这些明星公司幕后的数据中心也开始走入大众的视野。数据中心要求有优秀的架构设计、电路设计、空间设计等等,还要有机制能够应对各种各样的意外,否则一点小小的失误,公司的股价恐怕就要跳水。地理位置的选择也是数据中心考虑的一个指标,随着绿色数据中心概念的兴起,越来越多人关注数据中心所带来的能源问题和环境问题,选择一个远离市区,并且能利用天然水源和气温的地方,将会为数据中心的建设节约大量的成本。Google 等大公司的数据中心就有意放在高纬度、高海拔的地区,以及有湖泊、河流流经地区,以享受天然的空调和冷却水。参考[1] 分布式与集群的区别是什么?[2] 数据中心网络架构演讲 [3] Linux 高性能计算集群[4] 高性能计算机传奇我的公众号 cloud_dev,号内有大量书籍和视频资源,后台回复「1024」即可领取,分享的内容包括但不限于云计算虚拟化、容器、OpenStack、K8S、雾计算、网络、工具、SDN、OVS、DPDK、Linux、Go、Python、C/C++编程技术等内容,欢迎大家关注。

March 28, 2019 · 1 min · jiezi

生命周期组件 Lifecycle 源码解析(一)

在上篇文章:Android 生命周期组件 Lifecycle 使用详解 中,我们讲了 Lifecycle 的简单使用,本篇我们来研究下它的源码。基础环境搭建首先,按照上篇文章所讲,快速搭建环境。添加 Lifecycle 轻量级依赖库: implementation “android.arch.lifecycle:runtime:1.1.1"添加support library 28.0.0的支持库(希望大家能先保持一致,因为不同版本的源码是有区别的,后面会将到):implementation ‘com.android.support:appcompat-v7:28.0.0’再添加个注解处理器相关的依赖,至于用处,后面会讲:annotationProcessor “android.arch.lifecycle:compiler:1.1.1"接下来创建实现了 LifecycleObserver 接口的 MyObserver 类:让我们的 Activity 继承自 AppCompatActivity,并在 onCreate() 方法中通过 getLifecycle().addObserver(new MyObserver())绑定 MyObserver :核心代码就一句, getLifecycle().addObserver(new MyObserver()),就能让我们创建的 MyObserver 类,拥有生命周期感知能力。我们知道,这里主要的对象就两个。一个是 getLifecycle() 方法返回来的 LifecycleRegistry 对象(继承自抽象类 Lifecycle),一个是我们创建的需要监听生命周期的类 MyObserver。那我们不禁要问:LifecycleRegistry 是如何感知到生命周期的?它又是如何把生命周期事件分发给 LifecycleObserver 的?我们先来解决第一个问题,LifecycleRegistry 是如何感知到生命周期的。LifecycleRegistry 是如何感知到生命周期的首先,我们Command/Ctrl + 鼠标左键跟踪 getLifecycle() 代码,发现它的具体实现是在 AppCompatActivity 的祖先类 SupportActivity 中,该类实现了 LifecycleOwner 接口。在 onSaveInstanceState() 方法中将 mLifecycleRegistry 的状态置为了 Lifecycle.State.CREATED,这点我们在前篇也讲到过。但从这我们还是看不到跟生命周期有关的东西。此时,我们发现在 onCreate() 方法中有这一行代码:ReportFragment.injectIfNeededIn(this);ReportFragment 是做什么的?点进去看:可以看到, ReportFragment 的 injectIfNeededIn(Activity activity)方法向 Activity 中添加了一个未设置布局的 Fragment :然后又在重写的生命周期事件中调用dispatch(Lifecycle.Event event)方法,来分发生命周期事件,这就是“生命周期感知能力”的来源。这种通过一个空的 Activity 或者 Fragment 来实现特定功能的技巧还是挺常见的,比如权限请求库 RxPermission ,以及 airbnb 开源的用于URL跳转的 DeepLinkDispatch(前者是使用空的 Fragment,后者使用的是空的 Activity)ReportFragment#dispatch(Lifecycle.Event event) 这里面,又调用了 LifecycleRegistry 的handleLifecycleEvent(event)方法。至此,就引入了第二个问题,事件是如何分发到 LifecycleObserver 的。事件是如何分发到 LifecycleObserver 的进入 LifecycleRegistry#handleLifecycleEvent(Lifecycle.Event event)方法,发现它又调用了 moveToState(State next) 方法:而在 sync() 方法中,根据 state 的状态,最终会调用到backwardPass(…)或者forwardPass(…):以 forwardPass(…) 为例:上图可以看到,通过 mObserverMap 最终获取到一个 ObserverWithState 类型的 observer 对象,并调用它的dispatchEvent进行事件分发: observer.dispatchEvent(lifecycleOwner, upEvent(observer.mState));ObserverWithState 又是个什么鬼?我们继续追踪,发现 ObserverWithState 是 LifecycleRegistry 的一个静态内部类。从名称上就能看出,该类封装了 Observer 对象和 State 对象(具体就是 State 和 GenericLifecycleObserver,GenericLifecycleObserver 是个接口,继承自 LifecycleObserver),在其 dispatchEvent 方法中,最终会回调 mLifecycleObserver 的 onStateChanged(…) 方法。追踪到这里,我们知道了,Lifecycle在监听到生命周期变化之后,最终会回调 GenericLifecycleObserver 的 onStateChanged() 方法。我们不由得疑惑,我们定义的 MyObserver 哪去了?没看到有调用我们定义的回调方法啊。它和 GenericLifecycleObserver 又有什么关系?我们看到,ObserverWithState 的构造函数里传进来了一个 LifecycleObserver 类型的 observer 对象,这个参数是从哪传进来的?继续追踪,发现追到了LifecycleRegistry#addObserver(LifecycleObserver observer)方法。而这个方法,就是我们在MainActivity#onCreate(…)方法中调用的: getLifecycle().addObserver(new MyObserver());到这里,总算跟我们的 MyObserver 关联上了。查看LifecycleRegistry#addObserver(LifecycleObserver observer)方法源码:这里面的核心代码就两行,一行是: ObserverWithState statefulObserver = new ObserverWithState(observer, initialState);这行代码,通过传进来的Observer对象,创建出 ObserverWithState 对象。还有一行是: ObserverWithState previous = mObserverMap.putIfAbsent(observer, statefulObserver);这行代码是将 LifecycleObserver 对象放入一个FastSafeIterableMap 中,以便进行迭代。接下来我们就进入 ObserverWithState 的构造方法中看看:在构造方法中,通过 Lifecycling.getCallback(observer)根据传进来的 observer ,构造了一个 GenericLifecycleObserver 类型的 mLifecycleObserver ,那秘密应该也就在这个方法里,继续跟进。这个方法的本质,其实就是根据传进来的一个LifecycleObserver 对象,构造出来一个 GenericLifecycleObserver 对象(目前有四个子类:FullLifecycleObserverAdapter、SingleGeneratedAdapterObserver、CompositeGeneratedAdaptersObserver、ReflectiveGenericLifecycleObserver),而最终构造出来的对象,就包含了我们创建的 LifecycleObserver 的所有信息,包括各种回调方法等。看到这里,就要提到文章开头要大家添加的一个注解处理器的依赖:annotationProcessor “android.arch.lifecycle:compiler:1.1.1"当我们通过注解的方式来自定义LifecycleObserver 的时候,按照传统方式,必定要通过反射来对注解进行解析,这样就会对性能造成影响。一方面,我们通过缓存,来避免每次都通过反射获取构造器。另一方面,又通过注解处理器,在编译时对那些被@OnLifecycleEvent注解标注的普通方法,进行预处理,生成以“类名_LifecycleAdapter”命名的类,将各种回调方法直接进行逻辑转换,避免反射,进而来提高性能。明白了这点,再看Lifecycling.getCallback(observer)方法就比较容易理解了。如果传进来的的参数 object 是 FullLifecycleObserver 类型,就把它构造成FullLifecycleObserverAdapter 对象,并返回如果传进来的的参数 object 是GenericLifecycleObserver类型,直接返回该对象如果1,2都不满足,就解析该类的的构造器的Type(该类是反射获取的,还是通过注解处理器生成的)。如果是通过注解处理器生成的类来调用回调函数,就返回一个SingleGeneratedAdapterObserver/CompositeGeneratedAdaptersObserver 对象如果以上条件都不满足,就通过反射来调用各回调函数。返回一个 ReflectiveGenericLifecycleObserver 对象现在我们在 app 目录下的 bulid.gradle 中添加上上面的注解处理器依赖,然后编译下项目,会发现在build目录下生成了对应的类:MyObserver_LifecycleAdapter.java点进去,看看生成的这个类的源码:可以看到,我们在 MyObserver 中通过@OnLifecycleEvent注解标注的那些方法,在这里都根据条件进行判断了,而非通过注解。这时候我们就能理清这个这个流程了,当添加了注解处理器之后,我们这里的Lifecycling.getCallback(observer)方法将会把我们的MyObserver对象构建成一个 SingleGeneratedAdapterObserver对象返回(因为这里只有一个构造器),之后的 mLifecycleObserver.onStateChanged(owner, event);其实调用的就是SingleGeneratedAdapterObserver的onStateChanged(owner, event)方法:这里面就可以看到,它调用了内部包裹的类的callMethods(…)方法,也就是我们上面提到的MyObserver_LifecycleAdapter的callMethonds(…)方法。到这里,就完成了 Lifecycle 源码的解析。通过反射获取注解信息这顺便提下通过注解的方式调用各回调方法的过程。主要相关类就是 ReflectiveGenericLifecycleObserver.java这里我们主要关注回调信息 CallbackInfo 的获取方式的代码: mInfo = ClassesInfoCache.sInstance.getInfo(mWrapped.getClass());因为反射的代价是比较大的,所以又通过 ClassesInfoCache.java这个单例类,为 ReflectiveGenericLifecycleObserver 类要调用的各种方法的相关信息进行了缓存。点进去看下它的 getInfo(…) 方法内部,是如何获取方法信息的。里面又调用了createInfo()方法:这里,就能看到对注解进行处理的代码了。到这,我们就算完成了继承自 AppCompactActivity 的情况下的源码解析,而继承自普通 Activity 这种情况下,原理是什么呢?鉴于篇幅,将放在下篇文章。欢迎关注我的公众号获取。 ...

March 5, 2019 · 2 min · jiezi

谷歌浏览器应用插件下载汇总

第一种方法(适用于从能科学上网到不能科学上网插件的搬迁)打开谷歌应用市场(该环境必须可以科学上网)找到自己想要下载的插件,如下:首先找到该应用的id(链接后面的一串英文就是id了),步骤如下:或者如果已经下载该插件的情况下,右击插件 -> 管理拓展程序 -> 也能找到id重点,打开http://chrome-extension-downl…,输入查找出来的id,点击下载即可…另一种方法:https://chrome.lanfanshu.cn/(不需要科学上网)https://www.crx4chrome.com/(不需要科学上网)

March 1, 2019 · 1 min · jiezi

图数据库项目DGraph的前世今生

本文由云+社区发表作者:ManishRai Jain作者:ManishRai Jain Dgraph Labs创始人版权声明:本文由腾讯云数据库产品团队整理,页面原始内容来自于db weekly英文官网,若转载请注明出处。翻译目的在于传递更多全球最新数据库领域相关信息,并不意味着腾讯云数据库产品团队赞同其观点或证实其内容的真实性。如果其他媒体、网站或其他任何形式的法律实体和个人使用,必须经过著作权人合法书面授权并自负全部法律责任。不得擅自使用腾讯云数据库团队的名义进行转载,或盗用腾讯云数据库团队名义发布信息。每当我向别人介绍自己,并解释我们在Dgraph Labs所建设的内容时,我经常被人问到是否在Facebook工作过,或者我现在所做的尝试是否受到FaceBook的启发。很多人都知道FaceBook为社交图数据库所做的努力,是因为他们发布了很多关于图数据库基础设施的文章。来自谷歌的Word仅限于提供知识图谱,但在这个项目之前,几乎没有人认为内部基础架构就可以实现这个服务。Google提供专门的系统来提供知识图谱服务。事实上,在谷歌工作的时候,我和我的团队对图数据库服务系统下了很大的赌注。远在2010年,我自己就至少做了两个比较激进的尝试去研究新的图数据库理论,来看看我们可以创造什么。Google需要构建一个新的图数据库服务系统,不仅可以处理知识图谱数据中的复杂关系,还可以处理所有访问结构化数据的搜索服务(OneBoxes)。该服务系统要具备遍历所有数据的能力,还要具备足够高的吞吐量和足够低的延时,这样就可以应用于海量的网络搜索查询。当时几乎没有可用的系统或者数据库能同时满足上面三个要求。现在我已经回答了谷歌为什么要构建图数据服务系统,剩下的篇幅我会向你们介绍,我们是如何一步一步,构建一个符合要求的图数据库系统来服务知识图谱和搜索引擎的。我是怎么知道这些的?先允许我快速的自我介绍一下,2006年到2013年,我在谷歌工作。最开始是作为一个实习生,后面在Web Search Infrastructure组作为一个软件工程师工作。2010年,Google收购了Metaweb,我的团队刚刚推出了Caffeine。我想做一些与众不同的事情,并开始与Metaweb人合作,穿梭在旧金山和山景之间。我当时的目标是弄清楚如何使用知识图谱来改进网络搜索。在我致力于研发图数据库之前,Google有一些项目。值得注意的是,Google在纽约办公室创建了一个名为Squared的项目,并且有一些关于知识卡片的讨论。这些是个人和小团队的零星努力。但那时候还没有形成一个既定的决策链,这也最终使我离开了谷歌。这个我们稍后再谈。Metaweb故事 如上所述,谷歌在2010年收购了Metaweb。Metaweb使用多种技术构建了一个高质量的知识图谱,包括爬取和解析维基百科,以及使用类似维基百科的众包策略通过Freebase运作。所有这些都是由他们内部构建的图形数据库驱动的,这个数据库名为Graphd ,一个图数据库程序(现已经GitHub上发布)。Graphd有一些非常典型的属性。像守护进程一样,它在一台服务器上运行,所有数据都在内存中。整个Freebase网站都用了Graphd。收购完成后,谷歌面临的挑战之一就是继续运行Freebase。Google构建了SSTable,然后是Bigtable,它们可以横向扩展到数百或数千台机器,共同服务于数PB的数据。而且它们使用Borg(一个集群管理工具,K8s的前身)分配机器,使用Stubby(gRPC出来)进行通信,通过Borg名称服务解析IP地址(BNS,baked into K8s),并将数据存储在Google文件系统(GFS,类似Hadoop FS)。进程可能会死亡,机器可能会崩溃,但系统还是会一直保持运行。正是基于这个环境,Graphd得以发扬光大,服务于在单个服务器上运行整个网站的数据库的想法与Google(包括我自己)最初的想法千差万别。Graphd需要64GB或更多内存才能运行。如果你在嘲笑这内存,请注意时间点,这是在2010年。大多数Google服务器的最大容量为32GB。事实上,Google必须购买具有足够大RAM的特殊机器来支持Graphd。GraphD的替代者关于如何移动和重写GraphD以分布式方式工作的想法被提出,但是他们不是存储键值对的数据库,人们只需要获取一大块数据,将其移动到另一个服务上,当访问对应的key,就可以提供服务了。图数据库需要保证有效的连接和遍历,这就需要我们使用特定的方式构建软件。在这些想法中,其中一个是使用名为MindMeld(IIRC)的项目。该项目可以通过网络硬件可以更快地访问来自另一台服务器的内存。据推算,这种访问方式正常的RPC更快,足以快速复制内存数据库所需的伪复制直接内存访问。这个想法并没有走得太远。另一个真正被采纳的想法是构建一个真正的图数据库服务系统。不仅可以取代Graphd for Freebase,还可以为将来的所有知识图谱工作服务。这被命名为Dgraph,一个分布式的图数据库服务系统,一个升级版的Graphd。不用感到疑惑,答案是肯定的。在Google内部,Dgraph Labs这家公司和开源项目Dgraph,就是这样被命名的。对于本博文的大部分内容,当我提到Dgraph时,我指的是Google内部的项目,而不是我们构建的开源项目。当然开源项目后面也会有更多介绍。Cerebro的故事:一个知识图谱引擎一个无意中造就的图数据库服务系统虽然那时是我已经意识到Dgraph在努力取代Graphd的路上,但我当时的目标是改进网络搜索的体验。我在Metaweb找到了一位研发工程师DH,他同时也是Cubed的创始人。正如我前面提到的,Google纽约的一些工程师已经建立了Google Squared。DH建立了一个类似的项目Cubed。虽然Squared这个项目最终烂尾了,但Cubed非常令人印象深刻。我开始考虑如何在Google上构建它。Google提供了一些小特性,帮助我更轻松的搞定整个构建过程。第一个特性是搜索,谷歌提供了一种方法,可以高度准确地判断哪些词是连在一起理解的。例如,当看到像[tom hanks movies]这样的短语时,它可以告诉你[tom]和[hanks]应该连起来。同样,看到[san francisco weather]就知道[san]和[francisco]连在一起表达一个意思。对于人类而言,这些都是显而易见的事情,然而对于机器来说,做到这一点很难。第二个特性是理解语法,当一个类似于[books by french authors]的搜索请求产生时,机器可以理解为[french authors]写的[books](即法国籍作者写的书)。但这个短语还可以被理解为写[french books]的[authors],即写法国书籍的作者。我使用斯坦福的词性(POS)标记器来更好地理解语法并构建一棵语法树。第三个特性是理解实体,[french]一词可以代表很多实体。它可以代表国家(地区),国籍(指法国人),菜肴(指法式食物)或法语。这里我可以使用另一个项目来获取单词或短语可以对应的实体列表。第四部分是了解实体之间的关系。现在我已经知道如何将单词连接成到短语,短语应该被以什么样的形式组织(即语法),以及它们可以对应的实体,我需要一种方法来找到这些实体之间的关系以创建机器解释。例如,一个查询说[books by french authors],然后POS告诉我们它代表[french authors]写的[books]。我们有[french]的几个实体,[authors]的几个实体,接下来算法需要确定它们的连接方式。他们可以通过出生地联系起来,即出生在法国的作者(但可能是英文写作),或者是法国国民的作者,或者说或写法语(但可能与法国这个国家无关)的作者,或者仅仅是喜欢法国美食的作家。基于搜索索引的图数据库系统为了确定实体是否需要以及如何连接,我需要一个图数据库系统。Graphd从未扩展到整个Google级别,而我擅长的是网络搜索。知识图谱元数据以三元组格式化,即每个事实由三个部分表示,主题S(实体),谓词P(关系)和对象O(另一个实体)。查询必须来自[S P]→[O],来自[P O]→[S],有时来自[S O]→[P]。我使用了Google的搜索索引系统,为每个三元组分配了一个Id,并构建了三个索引,分别为S,P和O.另外,索引允许附件,所以我附上了每个实体的类型信息(即演员,书,人等等)。我建立了这个图数据服务系统,但知道它存在连接深度问题(如下所述),并且不适合任何复杂的图数据查询。事实上,当Metaweb团队的某个人让我开放该系统给其他团队访问时,我坚持拒绝了。为了确定实体间的关系,我会遍历查询实体间的所有可能性。比如,[french]和[author]之间会产生的所有关系,从中选一部分结果出来,在判断[book]和这些结果之间产生的任何联系,以此类推不断推演。这会导致同一个短语会产生多个解释,比如[tom hanks movies]这个短语,它会产生如[汤姆汉克斯执导的电影]、[汤姆汉克斯主演的电影]、[汤姆汉克斯制作的电影]这样的解释,并自动过滤像[电影命名汤姆汉克斯]的解释。对于每个可能解释,图数据库系统将生成结果列表,包含图中的有效实体,并且还将返回其类型(存在于附件中)。使用起来非常强大,因为结果的类型允许过滤,排序或进一步扩展等功能。比如对于电影搜索结果,您可以按照发行年份,电影的长度(短片,长片),语言,获奖等等对电影进行分类。这个项目看起来很常智能,我们(DH作为知识图谱专家也参与了一部分)将它命名为Cerebro,之后X战警电影里出现了同名机器(脑波触发器)。Cerebro的运行经常会揭示一个人们最初没有探索过的非常有趣的事实。当运行像[美国总统]那样的查询时,Cerebro会明白总统是人类,而人类有身高。因此,它允许你按身高对总统进行分类,并表明亚伯拉罕林肯是美国最高的总统。它还可以允许人们按国籍查询总统,在这种情况下,它同时显示了美国和英国总统的名单,因为美国有一位英国国籍总统:乔治华盛顿。 (免责声明:基于当时KG状态的结果,不能保证这些结果的正确性。)超链接 vs 知识图谱Cerebro是有机会真正理解用户查询的含义的。利用图数据库的中的数据库,我们可以生成查询的机器解释,生成结果列表并理解结果以支持进一步探索。如前面介绍的,您可以对结果启动特定的过滤和排序操作,也可以进行对连接进行遍历来显示数据的连接关系。从[美国总统]到[他们去的学校],或者[他们所生的孩子]。 DH在另一个他称为Parallax的项目中证明了从一个结果列表跳转到另一个结果列表的能力。Cerebro令人非常印象深刻,Metaweb的领导层也支持它。即使是服务于其中的一部分的,Cerebro也具有令人满意的高性能和功能,我称之为知识引擎(从搜索引擎升级)。但是谷歌的领导没有知识图谱相关领域的。我的经理对此也并不感兴趣,在跟他沟通之后,我获得了将其展示给一位非常高级的搜索部门领导的机会。然而展示之后的回应令人沮丧。对于[法国作者的书籍]的演示,该领导向我展示了谷歌查询的搜索结果,其中显示了十个相关的超链接,他认为谷歌可以做同样的事情。此外,他们不想从网站上取走大量信息,也许会侵犯搜索者的隐私。如果你也认为这个高管说的有道理,不妨再想一想:当Google进行网络搜索时,它并不能真正理解查询。它会在正确的相对位置,页面的等级中查找正确的关键字,以及做诸如此类的事。它是一个非常复杂和极其复杂的系统,但它并不能真正理解查询或结果。用户需要自行从结果中读取,解析和提取他们需要的信息,并进一步搜索以将完整的结果列表放在一起。例如,对于[法国作者的书籍],首先需要将一个详尽的列表放在一起,内容多大单个网页可能都放不下。然后按出版年份对这些书籍进行排序,或者按出版社等进行过滤,所有这些操作都需要大量的链接跟踪,进一步搜索和人工聚合结果。 Cerebro有能力将所有用户过滤信息的步骤省除,让人机交互简单而完美。然而,这是当时典型的知识图谱方法。Google的管理层不确定知识图谱的效用,也不确定搜索引擎应该如何跟知识图谱结合起来。这个通过向用户提供网页链接而获得巨大成功的组织,难以轻易消化这种接近更知识的新方式。在与Google管理层对峙了一年后,我几乎丧失了继续的信心。此时谷歌上海办公室的一位经理向我伸出手,我于2011年6月将项目交给了他。他组建了一个由15名工程师组成的团队。我在上海呆了一个星期,将我建造和学到的东西转移给工程师。 DH也参与其中,他在这里长期指导团队。连接深度问题我为Cerebro构建的图数据库服务系统存在一个连接深度问题。当需要查询的先前部分的结果集来执行其后续部分时,一个连接就被建立了。典型的连接将涉及一些SELECT操作,即来自通用数据集的某些结果中的过滤器,然后使用这些结果来过滤数据集的另一部分。我将以一个例子来说明。比如说,你想知道 [people in SF who eat sushi](住在旧金山且吃寿司的人)。数据被人们分成两类:住在SF的人和吃寿司的人这两类信息。以上查询是单级连接。如果数据库外部的应用程序正在执行此操作,它将执行一个查询来执行第一步。然后执行多个查询(每个结果一个查询),找出每个人吃什么,只挑选吃寿司的人。第二步是出现扇出问题。如果第一步有一百万个结果(所有旧金山人口),那么第二步需要将每个结果放入查询中,检索他们的饮食习惯,然后通过过滤器过滤出符合条件的人。分布式系统工程师通常通过广播来解决这个问题。他们将结果分成很多批量任务,使用分片功能进行分割,并将查询任务分配到集群中的每个服务器。使用分布式会完成连接,但会导致查询延迟问题。分布式系统中的广播很糟糕。谷歌的Jeff Dean在他的“Achieving Rapid Response Times in Large Online Services” 演讲中最好地解释了这个问题。查询的总延迟总是大于最慢的那台机器的延迟。单个机器上的小问题就会导致延迟,每次查询涉及到海量的机器就会大大增加延迟的可能性。考虑一个服务器,其50%延迟为1ms,但99%延迟为1s(即百分之99的延迟都小于等于1s)。如果查询仅仅在一个服务器上处理,则只有1%的请求会占用一秒钟以上。但如果查询触及其中的100台服务器,则63%的请求将占用一秒钟以上。因此,执行一个查询的广播对于查询延迟是不利的。现在考虑是否需要进行两次,三次或更多次连接。对于实时OLTP场景来说,会变得太慢,延时超出人们的接受范围。大多数非原生图数据库都存在这种高扇出的广播问题,包括Janus图,Twitter的FlockDB和Facebook的TAO。分布式连接是一个难题。现有的单机图形数据库通过将通用数据集保持在一个机器(独立数据库)内,并且在不触及其他服务器的情况下进行所有连接操作,则可以避免这个问题,比如Neo4j。进入Dgraph:任意深度连接引擎在结束Cerebro之后,我有了构建图形服务系统的经验,参与了Dgraph项目,并成为该项目的三位技术主管之一。 Dgraph设计中涉及的概念是新颖的,解决了连接深度问题。Dgraph以一种特殊的方式对图形数据进行分片,其中每个连接都可以完全由一台机器执行,回到之前说的概念主题 - 谓词 - 对象(SPO),Dgraph的每个实例将保存与该实例中的每个谓词相对应的所有主题和对象。多个谓词将存储在实例上,每个谓词都以整体存储。这实际上允许了查询执行任意深度连接,同时避免扇出广播问题。比如查询[people in SF who eat sushi],会导致数据库内最多进行两次网络调用,无论集群规模大小。第一个调用会找到所有住在旧金山的人。第二个调用会发送这个人名单并与所有吃寿司的人求并集。我们还可以添加更多约束或扩展,每个步骤仍然会涉及最多一个网络调用。这引入了位于单个服务器上的非常大的谓词的问题,但是这个问题可以通过随着大小的增长在两个或更多个实例之间进一步分割谓词来解决。即使这样,整个集群中的单个谓词拆分也只是在最极端情况下的最坏行为,其中所有数据仅对应于一个谓词。在其他情况下,这种通过谓词对数据进行分片的技术表现都很好,可以在实际系统中实现更快的查询延迟。分片技术并不是Dgraph的唯一创新。Dgraph为所有对象分配了整数ID,并对其进行排序并存储在发布列表结构中,以便快速对这些发布列表求进行交叉计算。这些创新将在连接期间加快过滤速度,还可以用来查找公共引用等。这些想法里涉及到了Google的Web服务系统。通过Plasma项目统一所有OneBox谷歌的Dgraph不是一个数据库,而是一个服务系统,相当于谷歌的网络搜索服务系统。使用Dgraph还可以对实时更新做出反应。作为实时更新服务系统,它需要一个实时图形索引系统。我在Caffeine项目中积累了很多实时增量索引系统方面的经验。我发起一个项目,通过图数据索引系统来统一所有Google OneBox,其中包括天气,航班,事件新闻等。你可能不知道OneBox这个词,但你肯定已经看过了。 OneBox不同于其他搜索结果,是一个单独的显示框,在运行某些类型的查询时显示,Google可以在OneBox返回更丰富的信息。想了解一下OneBox,请尝试搜索[weather in sf]。在发起这个项目之前,每个OneBox由独立后端运行并由不同的团队维护。有一组很复杂的结构化数据,但每个OneBox之间没有共享数据。这样不仅在操作上保留了后端的大量的重复工作,而且每个Box之间缺乏知识共享也限制了Google可以响应的查询类型。举个例子,[events in SF]可以显示旧金山的事件新闻,[weather in SF]可以显示旧金山的天气。但如果[events in SF]这个OneBox了解到天气多雨并且知道用户需要查找的事件是在室内还是在室外,它就可以根据天气过滤(或至少排序)事件(在暴雨中,可能电影或交响乐等室内活动是最好的选择)。在Metaweb团队的帮助下,我们开始将所有这些数据转换为SPO格式并在一个系统下对其进行索引。我将系统命名为Plasma,一个基于图数据服务系统Dgraph的实时图形索引系统。管理混乱像Cerebro一样,Plasma项目资金不足,但仍在继续。最终,当管理层意识到OneBox团队即将迁移到这个项目时,他们需要负责知识图谱的“合适人选”。在那场“权利的游戏”中,我经历了三次管理层变化,但每次都没有对知识图谱有经验的人加入。在此次管理层洗牌期间,支持Spanner的管理层认为Dgraph过于复杂,Spanner是一个全球分布式的SQL数据库,需要GPS时钟来确保全局一致性。具有讽刺意味的是,这至今仍然令人难以置信。最终,Dgraph取消了,Plasma幸免于难,但由新的领导和新的团队来负责继续运营,并直接汇报给CEO。新团队对知识图谱缺乏了解,他们决定建立一个基于Google现有搜索索引的服务系统(就像我为Cerebro所做的那样)。我建议使用我已经为Cerebro建立的系统,但是被拒绝了。我将Plasma改造为一个爬取并可以扩展知识话题到若干层的系统,这样Google现有的搜索服务可以把结果当成Web文档来处理。他们称之为TS(名称缩写)。这种改造也意味着新的服务系统将无法进行任何深度连接。在很多公司,我都看到一个关于知识图谱的“决策诅咒”,是因为工程师们通常错误地认为“图数据服务是一个简单的问题,可以通过在另一个已有系统之上构建一个层来解决”。几个月之后,2013年5月,我离开谷歌,此时我已经为Dgraph / Plasma工作了两年。后记几年后,Web搜索基础设施团队被重命名为Web搜索和知识图形基础设施团队,我曾经向其演示Cerebro的领导开始重新领导知识图谱工作,大谈特谈他们打算如何用知识图谱取代超链接,并直接回应尽可能多的用户查询。当上海的Cerebro研发团队的即将将项目上线时,该项目从上海直接被拉到了谷歌纽约办公室。最终,它以Knowledge Strip的形式上线。如果你搜索[tom hanks movies],你会在搜索结果顶部看到它。自首次发布以来,它有一些迭代改进,但仍然不支持Cerebro提供的过滤和排序级别。在Dgraph工作的所有三位技术主管(包括我)最终都离开了谷歌。据我所知,其他两位领导现在正在微软和LinkedIn工作。当我作为高级软件工程师离开谷歌时,我确实获得了两次晋升,目前准备迎接第三次。小道消息,当前版本的TS实际上非常接近Cerebro的图形系统设计,主题,谓词和对象都有一个索引。因此,它将继续受到加入连接深度问题的困扰。此后,Plasma被重写并重命名,但仍然继续充当实时图形索引系统,支持TS。他们一起继续托管和提供Google的所有结构化数据,包括知识图谱。从很多地方都可以看出,Google无法进行深度连接。首先,我们仍然没有看到OneBoxes的各种数据反馈的结合:尽管天气和KG数据随时可用, [cities by most rain in asia] (亚洲下雨最多的城市)都、没有生成城市实体列表(相反,结果是来自网页的引用); [events in SF]无法根据天气进行过滤; [US presidents]的结果不能进一步分类,过滤或扩展到他们的孩子或他们就读的学校。我怀疑这也是停止使用Freebase的原因之一。搜索关注“腾讯云数据库TencentDB"官方微信,最新最热数据库前沿知识和手把手实战教程等你来约,更可在移动端一键管理数据库。Dgraph:凤凰磐涅离开谷歌两年后,我决定建立Dgraph。不在Google的日子里,我见证了很多与在内部研发图数据系统时的犹豫不决。图形空间有很多半生不熟的解决方案,特别是很多自定义解决方案,草率的将系统搭建在关系型或NoSQL数据库之上,或者作为多模型数据库的众多功能之一。如果存在一个本地单击解决方案,则会遇到可伸缩性问题。Dgraph团队花了三年的时间,不仅吸收了我自己之前的经验,而且还对系统设计进行了大量的原创型研究,建立了市场上无与伦比的图形数据库。因此,公司具备了强大,可扩展且高性能的解决方案,用来替代那些半生不熟的解决方案。此文已由腾讯云+社区在各渠道发布获取更多新鲜技术干货,可以关注我们腾讯云技术社区-云加社区官方号及知乎机构号 ...

February 28, 2019 · 1 min · jiezi

Google 团队效能研究 | 为什么雇用最聪明的人是远远不够的?

简评:Google 的一项团队效能研究结果,可能会让你重新认识如何建立一个优秀的团队。Google 的搜索业务可能最为人所知,但 Google 可不仅仅有搜索业务,它可能还是最擅于大数据研究的公司之一。除了研究互联网世界里的数据,Google 也积极地用软件工具研究自己公司内部的数据。它的一项有关于如何建立高效团队的研究,验证了中国的一句老话 —— 兄弟齐心,其利断金。一般来说,当项目需要招募团队成员时,都会在众多应聘者中选择某一方面能力最强或者最有经验的,总之是招收能找到的具有最好特定技能的人,这样才能提高团队工作效率。可是通过研究公司内部团队工作的相关数据,Google 发现一个团队成功与否主要取决于 5 个动态指标,而这些指标几乎都和人员能力无关(这也可能是因为能进谷歌的都已经是精英了)。5 个团队指标心理安全可靠性结构化和清晰度工作意义冲击力其中最首要的是心理安全,它会对其他四点产生巨大的影响。团队的心理安全,通俗来说,就是团队成员就像一个家庭里的成员,畅所欲言,敢于尝试,对于失败不会互相指责,齐心协力,等等。心理安全越高团队越能成功。可靠性无需多说。Google 确立的另一个优秀品质是结构和清晰度。员工需要清楚了解自己在团队中的角色,这样才能专注于当前的技术和业务目标。在一个文化与性格契合度越来越重要的世界里,对公司使命充满热情的人也能得到更高的满意度。除了找到有意义的工作之外,同时这个人也详细他做的事情是真实的,这就是 IMPACT 所在。????更详细的内容可以点进原文链接查看。原文链接:The Results of Google’s Team-Effectiveness Research Will Make You Rethink How You Build Teams

February 25, 2019 · 1 min · jiezi

解决 go get 下载安装 golang.org/x 相关包失败的问题

问题描述当我们使用 go get、go install、go mod 等命令时,会自动下载相应的包或依赖包。但由于众所周知的原因,类似于 golang.org/x/… 的包会出现下载失败的情况。如下所示:$ go get -u golang.org/x/sysgo get golang.org/x/sys: unrecognized import path “golang.org/x/sys” (https fetch: Get https://golang.org/x/sys?go-get=1: dial tcp 216.239.37.1:443: i/o timeout)解决方式那我们该如何解决问题呢?毕竟还要制造 bug 的嘛~手动下载我们常见的 golang.org/x/… 包,一般在 GitHub 上都有官方的镜像仓库对应。比如 golang.org/x/text 对应 github.com/golang/text。所以,我们可以手动下载或 clone 对应的 GitHub 仓库到指定的目录下。mkdir $GOPATH/src/golang.org/xcd $GOPATH/src/golang.org/xgit clone git@github.com:golang/text.gitrm -rf text/.git当如果需要指定版本的时候,该方法就无解了,因为 GitHub 上的镜像仓库多数都没有 tag。并且,手动嘛,程序员怎么能干呢,尤其是依赖的依赖,太多了。设置代理如果你有代理,那么可以设置对应的环境变量:export http_proxy=http://proxyAddress:portexport https_proxy=http://proxyAddress:port或者,直接用 all_proxy:export all_proxy=http://proxyAddress:portgo mod replace从 Go 1.11 版本开始,新增支持了 go modules 用于解决包依赖管理问题。该工具提供了 replace,就是为了解决包的别名问题,也能替我们解决 golang.org/x 无法下载的的问题。go module 被集成到原生的 go mod 命令中,但是如果你的代码库在 $GOPATH 中,module 功能是默认不会开启的,想要开启也非常简单,通过一个环境变量即可开启 export GO111MODULE=on。以下为参考示例:module example.com/hellorequire ( golang.org/x/text v0.3.0)replace ( golang.org/x/text => github.com/golang/text v0.3.0)类似的还有 glide、gopm 等这类第三方包管理工具,都不同方式的解决方案提供给我们。GOPROXY 环境变量终于到了本文的终极大杀器 —— GOPROXY。我们知道从 Go 1.11 版本开始,官方支持了 go module 包依赖管理工具。其实还新增了 GOPROXY 环境变量。如果设置了该变量,下载源代码时将会通过这个环境变量设置的代理地址,而不再是以前的直接从代码库下载。这无疑对我等无法科学上网的开发良民来说是最大的福音。更可喜的是,goproxy.io 这个开源项目帮我们实现好了我们想要的。该项目允许开发者一键构建自己的 GOPROXY 代理服务。同时,也提供了公用的代理服务 https://goproxy.io,我们只需设置该环境变量即可正常下载被墙的源码包了:export GOPROXY=https://goproxy.io也可以通过置空这个环境变量来关闭,export GOPROXY=。对于 Windows 用户,可以在 PowerShell 中设置:$env:GOPROXY = “https://goproxy.io"最后,我们当然推荐使用 GOPROXY 这个环境变量的解决方式,前提是 Go version >= 1.11。参考资料goproxy.io for Go modulesgoproxy.io感谢您的阅读,觉得内容不错,点个赞吧 ????原文地址: https://shockerli.net/post/go… ...

February 24, 2019 · 1 min · jiezi

帮谷歌推广Webp图片格式之:Webp的格式转换

参考谷歌官网:Webp: A new image format for the WebWebp是Google强推的新一代网络图片格式,特点就是:高质量压缩。能压缩多少呢?5MB的原图,不降低效果,转换成webp格式后大小是几百KB。100KB的图,转换后是9KB。虽然目前所有主流浏览器都支持这种图片格式,但不幸的是所有主流系统如Mac、Win等都还没有默认支持打开它的程序,更无法显示它的预览、缩略图。如果想查看,最简单的方法是把*.webp文件的打开方式设定为Chrome等浏览器,双击打开在浏览器中查看。还有很多时候我们需要对这种文件进行转换。Google提供了一组工具集合,叫libwebp,其中包括各种webp相关转换的命令:cwebp – 将其它图片转为webp格式图片 (不包括GIF)dwebp – 将webp格式图片转为其它格式图片vwebp – webp图片浏览器webpmux – WebP muxing toolgif2webp – 将GIF转换为webp图片下载安装参考官网:Downloading and Installing WebPUbuntu安装libweb库:$ sudo apt-get install webpMac安装libwebp库:$ brew install webp注意:Homebrew安装的webp并不包括上面所有的工具,而只有cwebp和dwebp。如果我们想要所有的工具,有两种方法:到官网找到自己OS对应版本的二进制包,直接运行使用自己编译最简单就是到官网下载列表里找到自己的OS对应版本的二进制包,下载下来解压缩直接使用。官方下载列表:https://storage.googleapis.co…比如我的系统是Mac 10.12,那么就找到libwebp-0.6.0-mac-10.12.tar.gz这个压缩包下载:cd /tmpwget https://storage.googleapis.com/downloads.webmproject.org/releases/webp/libwebp-0.6.0-mac-10.12.tar.gztar xvzf libwebp-*.tar.gzcd libweb-*然后在~/.zshrc或~/.bash_profile中的PATH环境变量中加入刚才二进制文件包中的bin目录,或者直接设置alias,即可开始像别的命令开始用了。如果没有自己所用系统的二进制包,那么就只能自己编译了。每种平台的编译方法不一样,需要按照官网方法一步一步安装。编译方法参考官方:Compiling the Utilities将各种图片转换为Webp格式参考:https://developers.google.com…目前输入格式支持:png, jpg$ cwebp INPUT.png -o OUTPUT.webp将Webp图片转换为其它格式图片参考:https://developers.google.com…$ dwebp INPUT.webp -o OUTPUT.png将GIF转换为Webp格式参考:https://developers.google.com…$ gif2webp INPUT.gif -o OUTPUT.webp浏览webp图片这个命令不是在命令行终端里浏览图片,而是在桌面上弹出一个GUI窗口显示图片,所以需要依赖本地电脑的GUI桌面。$ vwebp INPUT.webp

February 17, 2019 · 1 min · jiezi

来自Google资深工程师的API设计最佳实践

来自Google资深工程师Joshua Bloch的分享:API设计最佳实践为什么API设计如此重要?API是一个公司最重要的资产。为什么API的设计对程序员如此重要?API一旦发布,出于兼容性考虑,不能轻易地随心所欲进行修改,比如删除参数。从API的上帝 - 设计者的视角出发,有助于提高代码质量。一个优秀的API应该满足下列标准:易学易用,甚至是自描述的,不需文档也能让新手快速上手。不易造成误解。后续维护者易于理解,满足开闭原则 - 能够很容易进行扩展。如何设计一个好的API首先应该从收集需求出发。注意结合API实现的复杂度一起考虑。作为第一步,首先给出需求规格文档,一页即可:别指望你的API能让所有人满意。也不要指望发布后,它不会出任何错误——那是不可能的。API也应该遵循单一职责:如果你发觉很难根据你的API实现的功能给它取个合适的名字,这是一个不好的信号,很多时候说明你的API里面做了太多事情——试着把它们拆成多个API。信息封装 - 公有类尽量避免暴露公有字段出去,最大化信息隐藏API命名艺术 - API的名称也是一门语言。API和文档的关系合理使用继承和子类,不要滥用里氏替换原则采用fail fast 策略,尽可能早地抛出错误消息:API的数据都应该允许使用者通过字符串的方式访问慎用重载选用合适的API参数和返回类型API里的参数顺序也很有讲究避免冗长的参数列表,参数如果超过3个,使用者就需要通过阅读文档才能消费了。尽量返回不需要调用者进行异常处理的参数,比如空数组或集合,而不是nullAPI设计里的和异常处理相关的最佳实践API重构的最佳实践API设计和Thread-local相关的最佳实践要获取更多Jerry的原创文章,请关注公众号"汪子熙":

January 31, 2019 · 1 min · jiezi

从零开始学 Google(三) (终结篇)

本篇我们将学习逆向图片搜索和 Google 的高级搜索功能,同时,本篇也是该系列的完结篇。逆向图片搜索平时我们想要搜索图片,大都是在搜索主页切换到图片那个 Tab 项,然后输入图片的关键字,比如“ 美女 ”、“ 鸟 ”。何为逆向搜索呢?就是我们手里有一张图片(可以是本地的,也可以是已知的某个网络上的链接地址),反过来,想知道跟这张图片有关的信息。因为跟我们正常搜索图片的方式相反,所以称之为“ 图片逆向搜索 ”。之前去看完电影,在乘电梯回去下楼的时候有个阿姨掏出手机问我,有没有方法找到她屏保的那张图片的高清图,因为这张图片是她之前保存到手机上的,不太清晰。我就跟她讲回去试下在百度上搜“ 百度识图 ”或者在 Google 上搜索 “ 图片搜索 ”。还有次是朋友给我发了段会变色的鸟的视频,问我这是啥鸟,还真没法在他面前“无所不能”的装逼了。于是我把视频截图,放到 Google 中搜索,得到了如下的答案:可以看到,GIF 图中我点击的那一项,那就是这鸟的名字,“ Anna ”,再多浏览几条,就能知道它是一种蜂鸟 (hummingbird) ,它的名字叫 “ 安娜蜂鸟 ”,被称为是 “ 飞行的宝石 ”高级搜索如果你觉得前面几篇文章,讲的挺实用的,但是你不想增加记忆负担,那有没有其他方法呢?当然有,你可以使用 Google 的高级搜索功能,高级搜索又分为两类,分别是针对网站的高级搜索和针对图片的高级搜索.针对网站的高级搜索我们可以直接访问网页 https://www.google.com/advanced_search 进入高级搜索页,当然也可以在任意搜索结果页面,点击“设置 -> 高级搜索 ”这里我们可以看到,有各种选项可以填,填完后点击右下角“高级搜索”按钮即可。其实很多东西都是我们之前讲过的语法,只不过这里以一种更友好的方式展现出来了。其中你会注意到一栏有“字词出现的位置”,我们可以指定文字出现的位置,比如 标题、文本或者网址等,其实对应的语法就是“ intitle:”、“ intext: ”、“inurl:”等。如果想搜索标题中含有张三的结果,可以直接搜索“intitle:张三”,以此类推。针对图片的图片搜索直接打开网址 https://www.google.com/advanced_image_search 进入高级图片搜索主页面在这里我们可以根据图片的尺寸、宽高比以及文件格式进行搜索。其中我觉得比较重要的一点是“ 使用权限 ”这个条件,我们有时候需要在网上图片使用,或者用到个人网站,或者用到微信公众号,但很多图片都是有版权的,如果不加筛选的使用,很可能给自己惹上麻烦。这是后我们就可以搜索无版权图片来自由使用。好了,写到这里,这个 Google 搜索系列的文章也就到尾声了,希望能帮助到大家,使大家能更畅快的抵达目的地。想获取更多内容,可以关注我的公众号:或者直接加我的微信好友,一起交流,有趣的灵魂在等你:

January 30, 2019 · 1 min · jiezi

内涵福利 | 加速业务交付,从谷歌云上使用 Kubernetes 和 Istio 开始

许多企业机构正在把全部或部分 IT 业务迁移到云端,帮助企业更好的运营。不过这样的大规模迁移,在企业的实际操作中也有一定难度。不少企业保存在本地服务器的重要资源,并不支持直接迁移到云端。另外,从企业本地到云的迁移过程,也会受到政策的限制、安全性考虑和原先运营方式的约束。谷歌云致力于帮助用户把本地数据中心里的 IT 架构和资源,用更高效安全的方式迁移到云端。基于此目的,我们基于容器和微服务架构,开发了一系列的开源技术。下面的内容可以帮助您了解,我们有哪些方式可以帮助您的企业顺畅地迁移到云上。走向开放的云堆栈在 Google Cloud Next ‘18 大会里,发布了云服务平台(Cloud Services Platform ),这是一套基于 Google 开源技术的托管方案。在这个平台上,有容器化和基于微服务的应用架构工具,用户可以利用这些功能,迅速实现 IT 资源的迁移和应用创建。Cloud Services Platform 将容器编排工具 Kubernetes,以及服务管理平台 Istio 结合起来,在架构、安全性、可操作性上都给用户带来最好的体验。目标是提高云端工作效率和可靠性的同时,更适配业务的规模扩展。下面介绍一下如何通过 GKE 上的 Istio 来达到这一目标。搭建服务时优先考虑 Istio我们坚信帮助用户实践出最佳微服务架构,Istio 是一个关键工具。Istio 的优势在于它有更好的可见性和安全性,能让容器化任务更方便管理。借助Istio,我们把 Kubernetes 服务直接集成,并简化容器的生命周期管理,谷歌云也是最早提供这项功能的云服务之一。Istio 并不是单个基础架构组件,而是一种服务网格,能提供应用程序的管理和可视化服务。通过收集日志,监控和网络遥测的数据,用户可以来设置和执行自己业务上的策略。Istio 支持加密网络流量来提高安全性,同时能透明地分层到现有的分布式应用程序上,完成这一步时,用户无需在代码中嵌入任何客户端库。Istio 有个人身份验证,并可以和用户其他的服务关联起来。 mTLS (相互传输层安全协议)会被添加到服务通信中,确保所有信息将在传输过程中被加密。Istio 为每个服务提供身份标识,允许用户针对每个应用程序,执行单独的服务策略,同时提供唯一身份验证。 除此之外,因为 Istio 集成了 GCP 的原生监控工具 Stackdriver,你会从它的可视化界面功能中受益。这项集成将数据指标、日志和遥测发送到 Stackdriver,能让你监控 GKE 中每个服务的信息(包括流量,报错率和延迟等)。由于负载在本地和云端不同的环境中运行,容器化微服务或单片虚拟机等等,而 Istio 1.0 是帮助用户实现混合云管理的关键一步。通过使用 GKE 上的 Istio,能得到可见性、安全性和弹性更好的容器化应用程序,其中还包含一个超简单的插件,可与现有的程序一起来使用。在 GKE 中使用 IstioIstio 提供的服务级别视图和安全性,对于容器化微服务部署的分布式应用程序尤为重要,而 GKE 上的 Istio 允许您通过点击将 Istio 部署到 Kubernetes 集群。GKE 上的 Istio 适用于新的和现有的容器部署。它允许您增量更新功能,例如 Istio 安全性,能让你现有的部署得到保障。当新版本发布时,它还可以自动升级 Istio 的部署,以此来简化 Istio 生命周期管理。目前在 GKE 上的 Istio Beta 版本,是我们努力让 GKE 成为企业理想选择的最新成果。欢迎访问 Google Cloud Platform 控制台,使用 GKE 上的 Istio 。要了解更多信息,请访问 cloud.google.com/istio 或 GKE 上的 Istio 文档。优化 GKE 网络在今年早些时候,我们公布了许多关于 GKE 的新的网络功能,包括 VPC 原生集群,共享 VPC,原生容器负载均衡以及原生容器的网络服务,它们服务于 GKE 上的应用程序以及在谷歌云上的 Kubernetes。借助 VPC 原生集群,GKE 本身能支持许多 VPC 功能,比如扩展,IP 管理,安全检查和混合连接等等。共享 VPC 允许你将管理职责委派给集群管理员,同时确保那些关键的网络资源是由网络管理员来管理的。容器原生负载均衡允许你创建负载均衡时指定容器作为端点,以实现更好的负载均衡。网络服务能让你在容器工作中使用 Cloud Armor,Cloud CDN 和 Identity Aware Proxy。我们还公布了一些新功能,以简化容器部署的配置,包括一些后端和前端配置的增强功能。这些改进让很多操作和配置变得更简单,无论是网络资源的身份和访问管理,还是 CDN,Cloud Armor 或负载均衡的控制。改善了 GKE 的安全性GCP 借助软件供应链和运行时安全工具,帮助用户在构建和部署生命周期的每个阶段,保护容器环境。其中包括多个安全合作伙伴的工具集成,所有这些都建立在谷歌以安全性为中心的基础架构和实践的基础上。节点自动升级和私有集群 等新功能增加了 GKE 用户可用的安全选项。你可以在谷歌云的博客中找到《探索容器安全性:今年是关于安全性的一年》一文,阅读有关 GKE 中新安全功能的更多信息。通过 GCP Marketplace 发布 Kubernetes 应用程序企业通常在 IT 环境中与许多合作伙伴合作,无论是在云中还是在本地。六个月以前,我们在博客中发布了《通过 GCP Marketplace 实现 Kubernetes 应用程序交付》 一文。Kubernetes 应用程序不仅仅提供容器镜像;它们是集成了用于一键部署发布的 GKE 生产级别的解决方案,Kubernetes 应用程序将被完全视作应用程序来进行管理,从而简化资源管理。你还可以将 Kubernetes 应用程序,部署到非 GKE 的 Kubernetes 集群 —— 无论它们是在本地还是在云中 —— 从而轻松实现快速开发和多容器统一计费。在 GKE 中使用 Istio如果你使用了 Containers and Kubernetes,会很熟悉它们是如何优化基础架构资源,降低运营开销,以及提高应用程序可迁移性的。不过通过对 Kubernetes 进行标准化,你还为改进的服务管理、安全性以及跨云和本地的简化应用程序采购和部署奠定了基础。请在未来几个月继续关注有关 Kubernetes,微服务和云服务平台的更多信息。让谷歌云更好地支持你谷歌云团队将于今年与全国谷歌开发者社区更紧密的合作,希望能够为谷歌云用户提供更好的支持与服务,不仅将产出更多优质的文档、技术博客解决使用中遇到的问题,也将投入更多资源力量,与谷歌云的用户建立更直接的联系,面对面解决使用中的疑惑。我们真诚的希望,有更多的谷歌云用户和开发者们,能够参与进谷歌云的技术生态建设中来,让我们更加了解大家的需求,使用中遇到的问题,和其他想对我们说的话。扫描下图的二维码,或点击问卷链接,参与谷歌云团队的线上调查,获得第一手学习资料与技术资源,我们将抽取 10 位朋友,获得谷歌云正版周边,并有机会参与谷歌云团队的线下交流活动. ...

January 30, 2019 · 1 min · jiezi

从零开始学 Google(二)

上篇文章中我们学习了 Google 的一些初级使用。这一篇文章我将带大家学习它的更多好玩儿的、进阶的用法。(除非特别说明,以下均不包含双信号,加粗部分即为输入搜索框中的内容),本篇开启多图流量预警。搜索小技巧使用 “ $ ”,搜索特定价格比如我们搜索价格为400美元的相机 “camera $400”使用“ .. ”,搜索指定范围内的数字比如,搜索价格在 400~800 美元的相机 “camera $400..$800”(当然这类场景购物网站更擅长)使用“ filetype: ”,搜索指定类型的文件有时候我们需要在网上搜索指定类型的文件。如果你是现在刚好处于找工作时期,想搜下简历的模板下载下来,如果你直接搜“简历”,那么一定会有各种垃圾信息来干扰你。现在你可以直接搜索“程序员简历 filetype:docx”可以看到,在每一项的开头都有个【DOC】标记,来告诉我们这是个doc文档,这时候你点击任何一项,就会直接把这个文档下载下来。是不是很方便。以此类推,你可以下载其他格式的文件的(通过文件后缀来搜索),比如 PDF、xlsx(Excle文件)等等使用“ * ”,搜索通配符或未知字词在一些情况下,我们并不一定需要很精确的搜索,可能只是一个有点模糊的概念或者框架,这时候我们就可以使用“*”通配符来进行搜索,比如我想知道中国的城市的各种排行,也就是“城市之最”,这时候我就可以搜索“中国最 * 校园”,注意,星号前后有空格使用“ site: ”,在指定网站上搜索有时候我们只关注某些网站上的内容,那就需要把其他网站上面的内容给过滤掉。如果你是一个程序员,只想搜索在CSDN上发表的跟 Glide 有关的文章,那就可以搜索“Glide site:csdn.net”当然,如果你是个米粉,或许会搜索“小米8 site:jd.com”来获取在京东售卖的小米8的信息,而这并不会含有其他购物网站上的此商品信息。内置小工具这节我们聊点 Google 为我们提供的一些内置实用小工具,它能让我们的搜索变得有趣而高效。天气搜索框中直接搜索"天气",就会展示出来当前定位到的天气的温度走势图。当然你也可以手动指定要搜索的位置,比如“天气 北京”我们可以在这里面查看温度、降水概率、风力等,稍微留意可以发现,这里打开的其实是“ weather.com ”网站,在搜索结果中直接进行了预览,以下各工具也类似计算器搜索框中直接搜索"计算器",在搜索的出来的计算器页面就可以进行计算了。当然,我们也可以直接在搜索框中输入一些简单的算式,比如“ 100+200 ”,然后 Google 就会直接在上面的计算器中给出计算之后的结果.颜色选择器有时候我们写代码,需要查看设计给的某些颜色是否标注正确或者自己去取色,那么就可以使用这个工具。在搜索栏里直接搜索“颜色选择器”我们可以拖动颜色滑块儿,也可以直接手动输入颜色值,来选择颜色货币兑换我们可以直接输入要兑换的货币,如“美元兑换人民币”,当然也可以直接输入上我们需要进行转化的数值,比如“ 10 美元兑换人民币 ”可以看到,这里我们可以选择我们要兑换的货币,上面也会显示最近的汇率变化情况翻译我们直接搜索“ 翻译 ”,就会出现下面的搜索框,我们能方便的进行各种语言的转换,而不需要再进行安装翻译软件,特别效率。当然,我们也可以直接输入我们要翻译的语言,比如把“ hello ”这个单词翻译成汉语,我们就可以直接使用“ hello in chinese ”可以看到,当我们输入了 “in”这个单词之后,后面会自动对我们进行提示,我们选择要翻译的语言即可。根据数学公式绘制图形我们可以直接在浏览器中输入数学公式,直接查看该函数绘制出来的效果,挺厉害的,比如查看函数“cos(3x)+sin(x)”的图形当然,我们也可以在一个坐标中同时绘制多个函数,那么只需要用逗号把他们分割开就行,比如“cos(3x)+sin(x), cos(7x)+sin(x),x”好啦,这次就讲到这里。这节相对就比较轻松啦。下一篇将是本系列文章的最后一篇,将会讲一点跟图片有关的搜索技巧,以及高级搜索的使用,不要走开。也可以直接扫码关注我的公众号来关注最新消息:或者直接加我的微信好友,一起交流,有趣的灵魂在等你:

January 29, 2019 · 1 min · jiezi

vps 一键安装谷歌BBR加速

Google 开源了其 TCP BBR 拥塞控制算法,并提交到了 Linux 内核,从 4.9 开始,Linux 内核已经用上了该算法。部署了最新版内核,开启TCP BBR 加速的 VPS,网速可以提升几个数量级。使用root用户登录服务器,执行以下命令:wget –no-check-certificate https://github.com/teddysun/across/raw/master/bbr.sh && chmod +x bbr.sh && ./bbr.sh安装大概需要两分钟,安装完成后会提示是否重启服务器输入 y 重启服务器重启需要一般只要几秒钟重新连接服务器,验证是否成功安装最新内核并开启 BBR 加速,执行命令:uname -r内核版本显示为最新版就表示 成功了5 $ 服务器优化后 Youtube 可以达到 4K 画质..博客:Mr96.me-玖六先生的自留地

January 25, 2019 · 1 min · jiezi

从零开始学Google(一)

现如今,我们无无时无刻不在互联网上进行着搜索行为,我觉得搜索是一个人最重要的技能。所谓搜索,“就是在正确的地方使用正确的工具和正确的方法寻找正确的内容”。学会搜索,能极大的让我们从互联网上庞大信息中快速定位到对我们有用的信息,提高效率和准确率。在实际生活中,我发现很多人并不懂得搜索,这也是我下决心写作本文的初衷。这里我们使用最优秀的搜索引擎(没有之一)Google来学习搜索,其他搜索引擎也大同小异(比如那个说不怕“再赢”Google一次的**,咳咳…),PS:使用Google,目前来讲是需要科学上网。如果用不了,就先去铺路吧,这个话题就没法再发文说了。我们很多人在搜索的时候,往往不对信息进行提炼,而是直接整句话进行搜索,这是比较低级、原始的方法,比如有的人就直接搜“从国贸到四惠东该怎么走”,我们可以通过在Google和百度上进行搜索,来感受下谷歌的威力。可以看到,谷歌对自然语意做了很好的识别,准确的在第一条为我们展示出了地图预览,还有路线,而下面是百度的结果:孰优孰劣立见分晓。到这里你可能要问,Google那么厉害,以后就直接整句搜索,为啥说这样搜很低级?这次我们确实是搜到了很满意的效果,但这是因为它识别到了这是跟地理位置有关的,默认使用了内置的一些“工具”,后面我们还会具体介绍。而普通的搜索,都是通过将句子拆分成一个个分词来进行搜索,会过滤掉那些常用的“的”字或者“*”等符号,然后对剩余词语进行关键词搜索。所以我们搜索的时候应该自己提取出要搜索的关键词,比如“国贸”、“四惠东”、“路线”,然后再进行搜索“国贸 四惠东 路线”(注意,不包含引号“”,在这个例子中,如果直接搜索这三个关键词,反而没有整句搜效果好,这个不必太较真)。稍微初级一点的,知道用关键词进行搜索,他们采用的是空格来区分。接下来会讲解一些常用操作符。如果知道逻辑运算符的及比较容易理解,不过不知道也不影响,你也能很快学会。以下没有特殊说明的话,关键词外面的引号是不需要输入及搜索框的。而且Google是大小写不敏感的,QQ和qq搜索到的是同样的结果。常用逻辑运算符与运算,“ ”(空格)这是最常用的,它表示“与”的意思。当我们需要搜索结果包含两个或者两个以上的关键词的时候,我们可以直接使用空格来分割我们的关键字,比如“数码相机 选购”或运算,“ | ”“ | ”运算符表示逻辑“或”的意思,当然,你也可以用“OR”来搜索,二者完全等效,但是注意,这里的运算符都是大写的,小写的话,搜索引擎不会认为它是搜索运算符,下面其他运算符也是一样。格式为:“A|B”,“ | ”两边可以有空格也可以没有,Google会自动识别左右两个关键词。比如搜索尼康或者佳能的数码相机,“数码相机 尼康|佳能”非运算,“-”“-”运算符表示逻辑“非”操作,用来从搜索结果中排除指定信息。“A -B”表示搜索包含A内容,但是不包含B内容的网页。注意,这里“-”和“B”之间是没有空格的,如果用过命令行的可能比较容易理解,其实就是附加条件。比如“数码相机 -佳能”就表示搜索数码相机,但是不包括尼康这个品牌:可以看出,与直接搜索“数码相机”相比,搜索“数码相机 -佳能”的结果中排除了所有跟佳能有关的信息。完全匹配,““前面说过,当我们使用Google搜索的时候,它会对我们输入的内容进行分词操作,这也是它能对我们的整句话搜索的关键所在。但有时候我们想要的是绝对搜索,这是后我们就可以使用"“来把我们要搜索的关键词引起来,注意,这里是英文输入法下的双引号,而不是中文。比如直接搜索“最好看的电影”和搜索““最好看的电影””,搜索结果自己体会下:这个对于汉语其实影响还不是很严重。如果你是对英文进行搜索,那就尬的不行了,因为英语里是用空格来分割两个单词的,像这样,“we are the world”。如果我们平时用英文搜索,特别是程序员,会这种搜索帮助还是比较大的,别上来就整个贴log。标在社交媒体上搜索,“@”符我们可以直接使用@符号在指定的社交媒体上进行搜索,比如我挺喜欢舒淇的,那我想在Instagram上搜索舒淇,应该怎么做呢?只需要搜索“舒淇 @Instagram”即可。这里我们直接点开第一项,就可以进入她的Instagram主页了,她的网名是sqwhat,当然,如果知道网名的话搜索就更准确了哈哈,停下来欣赏下女神照片吧。当然,Twitter等等也是类似,只需要加上个@符号就行。其实类比下,我们经常用到的一些特殊符号也是有意义的,比如“#”,表示话题,我们就可以使用这个符号进行话题的搜索,比如“#metoo”,可以搜索下,这里就不再单独举例了。O__O “…好吧,这次就先写到这,我要去女神圈子转转去啦…本篇结语:PS: segmentfault排版比较费劲,想要更好的阅读体验,可以点击微信原文链接:https://mp.weixin.qq.com/s?__…也可以直接扫码关注我的公众号:或者直接加我的微信好友,一起交流,一起嗨:在接下来的文章里会分享更多关于Google使用的进阶技巧,欢迎关注哦,别走开,不然亏大发了,这才哪到哪。

January 19, 2019 · 1 min · jiezi

Flutter 2019 产品路线图正式公布

2019Flutter 1.0 的发布对我们来说是一个很重要的起点,长路漫漫,我们仍有很多工作要做。这里我们向大家公开我们的产品路线图(Roadmap)规划,一方面是保持开源项目的透明度,另一方面,开发者们也可以根据我们的工作优先级来制定更适合的工程方案。以下几点我们今年会着重关注:核心和基础易用性生态系统移动端之外的支持动态更新工具链我们的计划会根据大家的反馈以及新的市场变化来做调整,这份路线图里的内容不尽然是我们一定会完成的工作。如果你有任何反馈,我们鼓励你通过 Issuse,或者在我们的邮件群组等与我们保持联系。Flutter 是一个开源项目,我们鼓励你参与到我们当中来。版本发布使用 Flutter 的开发者们可以选择一个「频道」来「接收」我们的版本更新和变化,我们目前有四个频道:master、dev、beta 和 stable,质量和稳定性从前向后依次递增,发布速度当然也会是依次相对放缓。我们计划每个月发布一个 beta 频道的版本,这个发布通常会是在月初,全年会在 stable 频道发布四个较大的「正式」版本。在生产环境里,我们建议开发者们使用 stable 频发布的 Flutter 版本。如果你想了解更多关于我们的版本发布流程,可以查看 发布流程 这篇 Wiki。关注领域核心和基础我们的首要任务依然是为 Flutter 现有的核心和基础添砖加瓦:修复 Bug:Bug 修复的优先级主要是基于 Issue 下的互动数量,比如 GitHub 自带的一些针对 Issue 的表情互动,点赞等;性能调优:包括减少内存、引擎占用空间(包大小),提高帧率等。如果开发者们有特别的性能基准要求,可以通过 devicelab 测试数据给我们看一下;改进 Flutter 测试流程:以确保为开发者们提供稳定的版本构建不会出现版本回归;改进错误消息提醒:通过 Google 用户研究(User Research)团队的工作,使错误提醒更具备可操作性以及包含一些常见的解决方案;API 文档改进:特别是提供示例代码和图表等,让我们的 API 文档更易用。易用性为新晋使用 Flutter 的开发者清扫绊脚石,如:完善和满足希望使用混合工程(将 Flutter 集成到于现有的 Native 工程项目)的开发者们的需求,如提供新的插件模板和 Android 内嵌 API;更新 Flutter 官方文档以提供更详尽的文档和使用教程;在 Flutter 应用里管理 state 的最佳实践;更好的帮助 iOS 开发者:投入时间持续更新和维护我们的 Cupertino widgets;在非完整工具链和运行环境下更容易体验和使用 Flutter。生态系统在 Flutter 中生态系统意味着使用 Flutter 的开发者们可以便捷地完成任何他们想做的事情,甚至在 Flutter 框架不提供提供开箱即用支持的情况下也如此。我们花费了大量的精力在工具和基础设施建设的工作上,以支持围绕着核心 Flutter 技术而蓬勃发展的生态系统。Google 也会投入时间开发插件和工具来贡献这个生态。2019 年我们会特别关注的生态系统建设工作:更好的 C/C++ 库支持,包括从 Dart 到 C 或 C++ 之间的相互调用;推进官方开发 / 维护的 Packages(调用原生系统的插件和纯 Dart Package)达到与核心框架代码相同的质量和完整性;在 iOS 和 Android 上完成地图和 WebView 插件的开发;确保 Flutter 应用可以使用一些谷歌服务,比如应用内支付和 YouTube;提供本地推送通知和本地数据存储的支持。移动端之外的支持我们将继续把 Flutter 拓展到更多形态的终端,以实现我们的目标:构建一个便携 UI 工具包,在任何需要的地方画出每一帧像素。更好的支持键盘和鼠标的输入;完善可以让 Flutter 可以运行在 Web 平台的 Hummingbird 项目;继续尝试让 Flutter 运行在桌面级的平台之上(如 macOS 和 Windows)。动态更新Dart 语言平台为 Flutter 应用开发提供了热重载(Hot Reload)的特性,让开发者们无需重新部署就可以把代码推送到应用中去。Android 上的动态修复:让开发者直接将代码更新从服务器推送到 Android 应用里;动态载入:让应用里不常用的部分延迟加载。工具链继续投入精力支持 Visual Studio Code,Android Studio 和 IntelliJ,使它们能够作为开发 Flutter 的主力 IDE;增加对 Language Server Protocol 以及其他开放协议的支持;通过改进开发过程中的分析、调试体验,让开发者更简单地提高应用的整体质量和性能;持续提升模版的体验,让 Flutter 的上手开发既快又简单。里程碑及计划时间如果你对我们每个月将会发布什么感兴趣的话,你可以我们 GitHub 上的 milestones 页面查看。计划赶不上变化,我们的里程碑可能会因为某些 Issue 而被改变,所以我们不能保证每个里程碑的确定完成时间。欢迎对本文作出反馈。文/ Flutter 社区:(微信 ID:flutter-io)原始 Wiki 地址 https://github.com/flutter/fl… ...

January 18, 2019 · 1 min · jiezi

文档资源搜索小工具 - 支持PDF,DOC,PPT,XLS

最近做了一个文档搜索小工具,当然不是网盘搜索工具,这个工具支持四种文件格式搜索(pdf,doc,ppt,xls),你只需要在搜索框中输入你想要搜索资源的关键词,点击搜索按钮即可获取相关资源,点击下载按钮,就可以直接在线浏览和下载。随着搜索关键词次数的增多,可索引到的资源量就越大 。这个工具还有一个【手气不错】的小功能,点击【手气不错】按钮,就可以随机获取一定量的资源,喜欢探索未知资源的小伙伴可以来尝试一下哦。这个工具支持多种国家语言搜索,个人比较喜欢搜索中文和英文的资源。下面是这个工具的屏幕截图以及链接:更多信息Maning文档资源搜索工具

January 16, 2019 · 1 min · jiezi

Google 里的软件工程学

简评:原文作者 Fergus Henderson 在 Google 工作了 10 年以上,目前负责 Google 的 text-tospeech 工程小组。有很多书籍或文章会从 商业/管理 等非技术角度来讲 Google 是如何运作的,这篇文档则是从软件工程学的角度来讲 Google 是如何运作的。Google 的成功有很多原因,其中一个重要原因就是 Google 不断积累的、优秀的软件工程实践经验。本文的目的是梳理并简要介绍 Google 软件开发的核心流程,内容上主要分为软件开发 (Software development)、项目管理 (Project management) 和团队建设 (People management) 三个方面。原文目录▎软件开发源码仓库(The Source Repository)单一源代码仓库,除了核心配置和安全相关代码,任何工程师都可以访问任何代码,并可以根据需要修改所有开发都基于 master 分支,发布的时候才创建发布分枝代码的每个子树都有 owner,任何修改都需要 owner 批准Blaze 分布式构建系统(The Build System)构建和测试存储库中的任何软件通常非常简单和快捷开发人员只需要编写 BUILD 文件,并且每个构建系统仅依赖 BUILD 文件所声明的文件构建系统的优化:可靠,自动跟踪依赖关系,增量构建,缓存构建结果以便复用自动代码检查和测试代码审查(Code Review)完善的代码审查工具,如可视化的 Web 界面、电子邮件集成、自动展示测试或静态分析的结果每个变更都必须由至少另外一人审查,并将审查结果自动复制到项目维护者的邮件列表鼓励小的变更,大的变更可以拆分为一系列较小的变更测试(Testing)鼓励和广泛使用单元测试,Mocking 非常普遍广泛使用集成测试和回归测试自动测量测试覆盖率部署之前进行负载测试,显示关键的 metrics,比如延迟、错误率以及它们随请求速率的变化情况Bug 跟踪(Bug tracking)Google 使用名为 Buganizer 的 Bug 跟踪系统使用标签分类 bug每个 bug 都有一个默认的 assignee 和抄送邮件列表编程语言(Programming languages)鼓励使用 C++、Java、Python 或 Go之一,最小化不同编程语言的数量每种语言都有 Google 风格指南,还有一个公司范围内的可读性培训不同语言之前使用基于 Protocol Buffers 的 RPC 通信为所有语言提供通用的开发工具,比如代码签出、编辑、构建、测试、审查、bug 报告等调试和分析(Debugging and Profiling tools)在通用框架中提供调试和代码跟踪工具提供用于调试的网络接口检查 RPC 调用的时间、错误率和频率限制以及资源消耗、性能分析数据等发布(Release engineering)频繁发布(比如每周或每两周),自动化发布任务,提高工程师积极性,允许更多迭代以加快整体速度发布分支,将 master 的修改 cherry-pick 到发布分支发布到 staging 服务器,测试部分生产流量的副本发布到 canary 服务器,测试真实生产流量的一个子集最后逐步发布到所有服务器Launch approval任何用户可见的更改或重大的设计变更都需要工程团队之外的很多人员的审查和批准,以确保这些变更满足符合法律、隐私、安全、可靠性以及业务需求Google 内部的 Launch approval 工具会跟踪这些审查和批准Post-mortems任何重大的生产故障都需要写一份事后的总结文档,描述事件的原因、影响以及如何解决重点关注如何避免它们再次发生(而不是追究人员责任)频繁重写(Frequent rewrites)大部分软件每隔几年都会重写一次减少了累计复杂性有助于适应当前的最佳实践,鼓励新的想法也是一种团队成员之间传递 ownership 的方式这是 Google 保持敏捷和长期成功的关键▎项目管理20% 时间允许工程师将 20% 时间花在喜欢的任何项目上有助于新想法的原型开发和演示,提高员工积极性鼓励创新企业文化OKRs(Objectives and Key Results)个人和团队要明确记录目标并评估这些目标的进展情况,团队设置季度和年度目标建立关键结果来量化 OKR,用 OKR score 评估进展情况设置野心勃勃的 OKR 指标,即设置期望为目标的 65%OKR 是全公司透明的,是一种简化的沟通框架,使每个人都清晰了解公司的目标以及自己的位置项目审批(Project approval)Google 没有明确的项目审批流程,一般通过自下而上的方式进行公司重组(Corporate reorganizations)因项目取消而重组时工程师可以自由选择新的团队或角色在很大程度上,技术驱动公司应该进行频繁的重组以避免组织效率低下▎团队建设角色(Roles)技术角色与管理角色分开,项目由技术主管领导和决策,而经理负责管理技术主管,指导职业发展,并负责绩效评估。软件工程师研究科学家SRE产品经理项目经理工作环境(Facilities)Google 提供丰富的娱乐、运动和餐饮设施开放式办公鼓励沟通先进的视频会议设施方便不同团队的沟通培训(Training)新员工培训,每个新员工都有导师和伙伴(Buddy)「Codelabs」和丰富的培训课程也支持外部机构学习换岗(Transfers)鼓励在不同部门换岗,帮助公司内传播知识允许 12 个月内表现良好的员工更换项目鼓励临时性的参与其他项目绩效考核和奖励(Performance appraisal and rewards)鼓励「peer bonuses」和「kudos」明确详细的晋升过程,确保正确的人得到晋升匿名反馈调查评估经理的绩效▎小结本文简要介绍了在 Google 使用的重要软件工程的实践方法。Google 是一个庞大并且多元化的组织,有一些部门用的是不同的实践方法,但是这里描述的实践方法被 Google 大多数的团队所遵循。实践方法的详细内容请移步文末的英文原文链接。原文链接:Software Engineering at Google## 标题文字 ## ...

January 14, 2019 · 1 min · jiezi

第一个提出“云计算”概念的人

一般而言,提到一家公司,往往第一印象会是它的创始人,就像乔布斯之于苹果,马云之于阿里巴巴;但是提起号称本世界最伟大的互联网公司——谷歌,却是埃里克·施密特这个名字进入脑海。传奇经历出生于1955年的施密特,其生平经历堪称传奇,拥有普林斯顿大学电子工程师学士、加州伯克利分校计算机科学博士学位,在进入谷歌之前,曾在贝尔实验室(电话专利持有人创办的实验室,曾诞生过11位诺贝尔奖物理学奖得主)任职;将JAWA作为市场武器,帮助SUN公司高速发展,挽救Novell公司于即倒,扭亏为盈。在入职年轻的谷歌后,用短短两年的时间将这家仅200名员工的公司,迅速扩张到千人以上。在扩张过程中始终没有丢掉谷歌的信念,在大幅缩短产品开发周期的同时,始终保持着产品优质的水平。安卓系统也是在他执掌谷歌时期诞生的。与云计算提起云计算,就更不能不提施密特。在2006年8月9日的搜索引擎大会(SES San Jose 2006)上,他首次提出了“云计算”(Cloud Computing)的概念。在更早的1983年,太阳电脑(Sun Microsystems)就提出过“网络是电脑”,而太阳电脑就是上文我们讲到的施密特曾任职的那家公司。也许正是由于这样的渊源,施密特对云计算情有独钟,在解决前期发展问题,迅速成长起来以后,施密特就将云计算作为谷歌未来的发展重点(当然也可能是眼红隔壁AWS赚到的钱)。拥有几乎是世界上最优秀程序员的谷歌,未来谷歌能为云计算云计算行业提供的技术支持是可预见的。卸任2011年卸任谷歌CEO的施密特,发推称“(公司)终于不再需要日常的成人监督了”,这个扮演着监护人角色的CEO,似乎提前完成了自己的使命,尽管他离开了谷歌,但是这家可称伟大的公司,将永远打上他的烙印。

January 3, 2019 · 1 min · jiezi

Google Cloud 释放外网IP

Google Cloud 释放外网IP 来自Google Cloud 一年免费版的受益者近几日突然发现上推的时候,访问情况不稳,时断时续,而且出现了访问速度急速下降的问题,就比如说在推特看小视频,以前缓冲几乎是秒级别,现在就会卡顿顿的,看的不爽,自然心情也就不好。 Google Cloud 比 vultr 好一点的地方是服务器的IP可以单独配置,这样就可以既保留我服务器上的资源也可以同时避免被墙的尴尬。 第一步 在自己的 Compute Engine 中修改服务器的外网IP为 “空” 或者 “临时” ,目的是为了释放外网IP做准备。⬇点击修改按钮,进入修改模式⬇修改外部IP为“空”或“临时”⬇记得在底部点击保存按钮,这时外部IP是无占用状态第二步 释放外网IP⬇进入VPC网络 ⬇点击选中需要释放的IP,点击右上角“释放” 第三步 重新创建IP,回到第一步骤修改的状态,点击外部IP之后有一项是创建外部IP,创建即可。

December 24, 2018 · 1 min · jiezi

一篇文章让你了解Android各个版本的历程

2008年–至今Android 1.5(Cupcake纸杯蛋糕):智能虚拟键盘;使用widgets实现桌面个性化;在线文件夹(Live Folder)快速浏览在线数据;视频录制和分享;图片上传;更快的标准兼容浏览器;Voice search 语音搜索;立体声蓝牙和免提电话 Android 1.6(Donut甜甜圈):完全重新设计的Android Market,可以显示更多的屏幕截图;手势支持,可以让开发者生成针对某个应用程序的手势库;支持CDMA网络:中国电信的用户可以期待EVDO的Android手机了;TXT-2-Speech,支持了更多语言的发音,包括英语、法语、德语、意大利语等快速搜索框,可直接搜索括联系人,音乐,浏览历史,书签等手机内容;全新的拍照界面:新版相机程序启动速度快了39%,拍照间的延迟减少了28%;应用程序耗电查看:这下好了,哪个软件耗多少电,现在一见了然了;新增面向视觉或听觉困难人群的易用性插件;Linux内核升级到2.6.29;其他:支持更多的屏幕分辨率,如WVGA,QVGA等Android 2.0 (2.0~2.1 Eclair松饼(闪电泡芙)):由于文件结构的改动优化,使得整个操作流畅性得到了很大的提升;自带的Chrome Lite浏览器现在加入了对双击屏幕进行缩放的支持;加强了网络社交功能,比如Facebook好友整合至联系人功能;强化了语音识别的搜索控制。整个系统多处都支持语音控制,并拥有独立的控制面板;谷歌地图服务更新,加入了全新的导航系统,甚至比转业的导航软件更为先进;加入了原生微软Exchange邮件服务支持;提供了多个不同帐户,统一的邮件收件箱;只需双击就能上传图片至YouTube;优化了驾车时的体验,新的“Car Home”应用程序为各功能提供了易于操作的快捷链接,还能方便地使用语音控制功能,便于用户驾车时使用 Android 2.1可以同时绑定多个Google账号;无线控件里有了VPN设置;增加了连接到PC设置;增强了语言和声音的转换功能,并加入了文字到语音转换;全新的拨号界面,按键更大,更易于操作;更多桌面Widget;新的Google地图可以使用谷歌地图导航功能;新的浏览器版本,加强了稳定性和网页渲染能力;全局搜索功能加强;全新的Market程序,搜索更快布局更合理 Android 2.2(Froyo冻酸奶):全面支持Flash 10.1;应用程序自动升级,让升级更加人性化;支持应用程序安装在外置内存上;Linux内核将升级为最新的2.6.32版本,系统更加稳定;对系统性能进一步优化,让手机有更多的运行内存;增加了轨迹球LED指示灯变色这个新功能;增加了对3D性能的优化,3D性能更加强大;FM功能也将在新系统中得到全面支持 Android 2.3(2.3 Gingerbread姜饼)用户界面更美观;提升游戏体验;提升多媒体能力;增加官方进程管理;改善电源管理;NFC近场通信;全局下载管理;全新虚拟键盘;原生支持前置前置摄像头;SIP网络电话 Android3.0到3.1(3.0 Honeycomb 蜂巢):安卓3.0系统主要用于安卓的平板产品,画面动感,可操控性更强,代表有摩托罗拉的平板产品XOOM,3.1也已经发布,也主要用于平板产品。Android4.0(4.0 Ice CreamSandwich)1、单一系统Android 4.0将只提供一个版本,同时支持智能手机、平板电脑、电视等设备。2、一流的新UI3、开源此前Android 3.0曾一度宣布不采取开源措施,然而谷歌深知Android系统一大成功特性就是开源。平板上吃到的苦头势必在全新的Android 4.0上避免,用户为中心的刷机资源一定会让Android 4.0锦上添花。 Android5.01、android 5.0 Hello 5.05.0的版本号就能告诉我们,这是一个大的升级版本。2、基于Linux内核3.0Linux刚刚发布Linux 3.0内核没多久,后来又更新到了3.0.1 。3、通过Android Market购买音乐谷歌已经试水性质的推出了Google Music Beta ,允许上传2万首音乐到Google的云端服务器,自动创建播放列表在任何支持flash的设备上回放,我们有理由相信这种在Appstore影响下的数字视频、音频服务内容的提供也将会出现在Android上。4、多核处理器优化现在各厂商都在推双核的智能手机,实际的效果如何我们不予评说,但Android 4.0将特别为使用双核乃至多核处理器的手机进行专门的优化。5、运行速度比3.1提高1.8倍Google的人员只是这么一说,并没有提及这个性能具体体现在什么方面,因此我们不知道这是关于浏览器、GPU还是整体性能,只有等待。6、集成Google电视和Chrome OS的智能停放7、为OEM提供了官方的主题引擎有了这个引擎,便可通过Google的升级程序更新到这些第三方的主题。8、苹果游戏中心的一个真正的竞争者9、支持现有的智能手机据称现行所有运行Android 2.3的手机都有可能升级到4.0版本,这条消息是我喜闻乐见的,而Google官方的Nexus One和Nexus S将是第一批升级到4.0的手机。10、新的摄影技巧以及虚拟摄像机这将为开发者提供更丰富的摄像头控制API。android 6.0 锁屏下语音搜索用户可以直接在锁屏状态下进行语音搜索,虽然现在的一些安卓手机支持语音唤醒功能,但这些语音唤醒都是第三方厂商开发的,而此次的Android 6.0在系统层面加入锁屏下语音搜索,这无疑会在体验上有一个明显的提升。指纹识别说到指纹识别,很多用户都会觉得现在的中高端安卓手机都支持,但事实上这些安卓手机的指纹识别都是各个厂商自行开发的并没有系统底层的支持。Android 6.0则在系统层面加入指纹识别,能提供原生指纹识别API,这不但降低了厂商开发指纹识别模块的成本,最重要的是原生指纹识别将会大大提升安卓手机的指纹识别支付安全性。更完整的应用权限管理在此前的原生安卓系统中有应用通知管理功能,但更为深入的应用权限管理只能靠第三方应用实现。Android 6.0进一步强化应用权限管理,应用权限管理也成为系统级的功能,不过这对于那些权限管理软件来说并不是什么好消息。Doze电量管理Android 6.0自带Doze电量管理功能,在“Doze”模式下,手机会在一段时间未检测到移动时,让应用休眠清杀后台进程减少功耗,谷歌表示,当屏幕处于关闭状态,平均续航时间提高30%。Now on Tap功能Now on Tap功能是和Google搜索紧密结合的功能,它可以让谷歌从任何应用中进行搜索。例如,在微信中聊天的时候提到餐馆,那么就可以在不跳转的情况下进行谷歌搜索。App Links通过App Links功能,Android平台能够向网络服务器提出申请,自主识别链接内容。直接跳转到App客户端中,改善用户体验,有利于让用户在体验更完善的App客户端完成更多操作。此外,在Android 6.0谷歌还加入了Android Pay进一步强化移动支付,同时也是为了对抗Apple Pay。在发布会上谷歌表示Android 6.0将在下周开始推送,Nexus5/6/7/9以及Nexus Player将能够在第一时间得到升级。Android7.0分屏多任务进入后台多任务管理页面,然后按住其中一个卡片,然后向上拖动至顶部即可开启分屏多任务,支持上下分栏和左右分栏,允许拖动中间的分割线调整两个APP所占的比例。目前,安卓7.0开发者预览版支持全部第三方应用尝试分屏操作,但个别应用适配可能存在问题,分屏后可能导致界面显示不全等问题.全新下拉快捷开关页在安卓7.0中,下拉打开通知栏顶部即可显示5个用户常用的快捷开关,支持单击开关以及长按进入对应设置。如果继续下拉通知栏即可显示全部快捷开关,此外在快捷开关页右下角也会显示一个“编辑”按钮,点击之后即可自定义添加/删除快捷开关,或拖动进行排序。通知消息快捷回复安卓7.0加入了全新的API,支持第三方应用通知的快捷操作和回复,例如来电会以横幅方式在屏幕顶部出现,提供接听/挂断两个按钮;信息/社交类应用通知,还可以直接打开键盘,在输入栏里进行快捷回复。通知消息归拢安卓7.0会将同一应用的多条通知提示消息归拢为一项,点击该项即可展开此前的全部通知,允许用户对每个通知执行单独操作。夜间模式安卓7.0中重新加入了夜间深色主题模式,该功能依然需要在系统调谐器中开启,从顶部下划打开快捷设置页,然后长按其中的设置图标,齿轮旋转10秒钟左右即可提示已开启系统调谐器,之后用户在设置中即可找到“系统调谐器”设置项。点开其中的“色彩和外观”,即可找到夜间模式,开启后即可使用全局的深色主题模式,同时亮度和色彩也会进行一定的调整,该功能可以基于时间或地理位置自动开启。另外,系统调谐器中也提供了RGB红绿蓝三色调节滑动条,允许用户手动精细调节,例如减少蓝色或增加红色以提供类似护眼模式的效果。流量保护模式安卓7.0新增的流量保护模式不仅可以禁止应用在后台使用流量,还会进一步减少该应用在前台时的流量使用。其具体实现原理目前尚不清楚,推测其有可能使用了类似Chrome浏览器的数据压缩技术。此外,谷歌还扩展了ConnectivityManager API的能力,使得应用可以检测系统是否开启了流量保护模式,或者检测自己是否在白名单中。安卓7.0允许用户单独针对每个应用,选择是否开启数据保护模式。全新设置样式安卓7.0启用了全新的设置样式,首先每个分类下各个子项之间的分割线消失了,只保留分类之间的分割线。全新的设置菜单还提供了一个绿色的顶栏,允许用户通过后方的下拉箭头,快速设定勿扰模式等。除了勿扰模式外,顶栏菜单还可以显示诸多其他的设置状态,例如数据流量的使用情况,自动亮度是否开启等。谷歌也在安卓7.0的设置中加入了汉堡菜单,在二级设置界面中的左上角,你就会看到这个汉堡菜单,点击后即可看到所有设置项,方便用户快速跳转。改进的Doze休眠机制谷歌在安卓7.0中对Doze休眠机制做了进一步的优化,在此前的安卓6.0中,Doze深度休眠机制对于改善安卓的续航提供了巨大的作用。而在安卓7.0中,谷歌对Doze进行了更多的优化,休眠机制的使用规则和场景有所扩展,例如只要手动在后台删掉应用卡片,关屏后该应用就会被很快深度休眠。系统级电话黑名单功能安卓7.0将电话拦截功能变成了一个系统级功能。其它应用可以调用这个拦截名单,但只有个别应用可以写入,包括拨号应用、默认的短信应用等。被拦截号码将不会出现在来电记录中,也不会出现通知。另外用户也可以通过账户体系备份和恢复这个拦截名单,以便快速导入其它设备或账号。菜单键快速应用切换双击菜单键,就能自动切换到上一个应用。此外,如果你不停地点击菜单键的话,就会在所有应用中不间断地轮换,应用窗口会自动放大,顶部还会出现倒计时条,停止点击且倒计时结束后,当前应用会自动放大并返回到前台。Android8.0的正式版 Android Oreo(奥利奥)1.通知中心用户在通知界面可以发现顶部的快捷键有了更充裕的空间,并且根据网络大数据的用户使用频繁度调整了这几个快捷键的顺序;并且长按推送消息可以看到一个开关,操作它可以开启和关闭这个该应用的未来所有通知。2.设置菜单在新的AndroidO系统中,设置的界面有了大幅变化,主菜单的覆盖性变得更广,更多的功能将在子菜单中体现,并且在菜单界面中重新设计了很多图标。3.PinnedShortcuts安卓创造出了PinnedShortcuts功能,类似苹果的3DTouch,长按一个软件后可以弹出子菜单,然后就可以通过这个方式快捷的使用该应用的部分功能。4.图标形状新的系统中开发者可以使用不同的应用图标,比如圆角矩形或者圆形图标,不过所有的图标需要保证是同一个形状,不能有一个方一个圆这样“个性”的样式出现。5.后台限制AndroidO将进一步优化后台程序,减少应用在没完全退出后占用系统的资源,并且减少电量的消耗。6.安装限制新系统中用户可以在权限设置中添加安装限制功能,这样可以有效的避免带有中国特色的“全家桶”行为。7.TensorFlowLite这个新功能并不会直接体现在手机和系统中,它是谷歌的一项新技术,用来把人工智能在更多的软件上继续拓展,并提高工作处理的效率,让你的手机更“聪明”。8.分屏在AndroidO中,分屏画中画功能得到了强化,变得更加流畅,而且悬浮窗可以随意拖动位置,然后在主屏幕中继续工作9.NotificationDots在谷歌的Pixel手机上,安卓8还新加了通知功能Notification Dots,会标出用户的行程、信息等,有些通知还可以被设定为稍后提醒。此外长按某个应用图标现在可以显示一些信息,与iOS上的3D Touch类似,这项功能在安卓7.0上已经有所体现10.SmartTextSelection系统将会预测用户将使用某些电话或者其他选项出现在将会用到的应用中,举个例子就是如果邀请朋友来吃饭,系统会根据发送的地址来开启地图并且导航 。11.自动保存密码这个功能将会保存用户的部分帐号和密码,用于在网站或者应用中的快速登录,效率提升了不少 。12.GooglePlayProtect这个功能主要用于GooglePlay中,下载的应用和游戏将会经过它的排查,来看看是否是有害甚至携带病毒的应用,不过国内用户可能不能访问GooglePlay 。13.应用加速在AndroidO中,大部分应用的启动速度将会快上一倍,这个要归功于新系统的优化,使后台占用资源减少,并且对并发进程等问题的处理更加出色,也是个相当有用的功能 。14.字体优化AndroidO中谷歌还增加了对系统字体的更多支持,开发者可以自行更改字体样式,让用户有了更多字体的选择 。15.表情符号安卓8还带来了符合Unicode 10标准的表情符号,比原来新加超过60个表情符,这也是比较明显的改变之一AndroidP 9.0新功能包括:谷歌统一推送升级、深度集成Project Treble模式、更加封闭、原生支持通话录音等。1.全面屏的全面支持2.通知栏的多种通知3.多摄像头的更多画面4.GPS定位之外的WiFi定位5.网络还有神经网络6.Material Design迎来2.0时代新设计Android 9.0将会新增支持类似于iPhone X的刘海屏设计,具体体现为优化屏幕内容显示,能够让系统或者应用充分利用整块屏幕,尤其是两只“猫耳朵”位置。在Android 9.0系统当中,谷歌还会进一步将谷歌助手集成到应用中、进一步优化电池续航、支持多屏和可折叠屏等。新特性全局黑夜模式为具备Always-on display(屏幕常显)功能手机加入原生的天气支持。参考阅读https://blog.csdn.net/u012758…阅读更多面试官:请你介绍一下你的项目经验Android面试整理(附答案)亡羊补牢,面试时如果发现回答不好,该怎么办?Android快速启动——黑白屏最优解决方案 ...

December 20, 2018 · 1 min · jiezi

android沉浸式状态栏封装—教你玩出新花样

项目中我们有时候都要用的透明状态栏(这里也成沉浸式状态栏),今天介绍一个gyf-dev写的一个封装状态栏开源框架效果图如下:正文从Android4.4开始,才可以实现状态栏着色,并且从5.0开始系统更加完善了这一功能。之前写过关于一篇 关于activity状态栏的一些总结有关Activity样式 、状态栏透明、屏幕亮度问题应用场景及其总结说明这是状态栏 这是导航栏(有些手机没有导航栏) [](https://github.com/gyf-dev/Im…第一种方案: 可直接在主题中设置 getWindow().setBackgroundDrawable(null); //设置透明状态栏 ViewGroup contentFrameLayout = (ViewGroup) findViewById(Window.ID_ANDROID_CONTENT); View parentView = contentFrameLayout.getChildAt(0); if (parentView != null && Build.VERSION.SDK_INT >= 14) { parentView.setFitsSystemWindows(true); }或者也可以这样 :第二种方案:将布局延伸到状态栏来处理,这次我们使用android:fitsSystemWindows=”true”属性,不让布局延伸到状态栏,这时状态栏就是透明的,然后添加一个和状态栏高、宽相同的指定颜色View来覆盖被透明化的状态栏。我们一步步来实现。1、第一步还是先将状态栏透明化,方法同上。2、在布局文件中添加android:fitsSystemWindows=”true”属性:封装: ImmersionBar.with(this) .transparentStatusBar() //透明状态栏,不写默认透明色 .transparentNavigationBar() //透明导航栏,不写默认黑色(设置此方法,fullScreen()方法自动为true) .transparentBar() //透明状态栏和导航栏,不写默认状态栏为透明色,导航栏为黑色(设置此方法,fullScreen()方法自动为true) .statusBarColor(R.color.colorPrimary) //状态栏颜色,不写默认透明色 .navigationBarColor(R.color.colorPrimary) //导航栏颜色,不写默认黑色 .barColor(R.color.colorPrimary) //同时自定义状态栏和导航栏颜色,不写默认状态栏为透明色,导航栏为黑色 .statusBarAlpha(0.3f) //状态栏透明度,不写默认0.0f .navigationBarAlpha(0.4f) //导航栏透明度,不写默认0.0F .barAlpha(0.3f) //状态栏和导航栏透明度,不写默认0.0f .statusBarDarkFont(true) //状态栏字体是深色,不写默认为亮色 .flymeOSStatusBarFontColor(R.color.btn3) //修改flyme OS状态栏字体颜色 .fullScreen(true) //有导航栏的情况下,activity全屏显示,也就是activity最下面被导航栏覆盖,不写默认非全屏 .hideBar(BarHide.FLAG_HIDE_BAR) //隐藏状态栏或导航栏或两者,不写默认不隐藏 .addViewSupportTransformColor(toolbar) //设置支持view变色,可以添加多个view,不指定颜色,默认和状态栏同色,还有两个重载方法 .titleBar(view) //解决状态栏和布局重叠问题,任选其一 .statusBarView(view) //解决状态栏和布局重叠问题,任选其一 .fitsSystemWindows(true) //解决状态栏和布局重叠问题,任选其一,默认为false,当为true时一定要指定statusBarColor(),不然状态栏为透明色 .supportActionBar(true) //支持ActionBar使用 .statusBarColorTransform(R.color.orange) //状态栏变色后的颜色 .navigationBarColorTransform(R.color.orange) //导航栏变色后的颜色 .barColorTransform(R.color.orange) //状态栏和导航栏变色后的颜色 .removeSupportView(toolbar) //移除指定view支持 .removeSupportAllView() //移除全部view支持 .navigationBarEnable(true) //是否可以修改导航栏颜色,默认为true .navigationBarWithKitkatEnable(true) //是否可以修改安卓4.4和emui3.1手机导航栏颜色,默认为true .fixMarginAtBottom(true) //当xml里使用android:fitsSystemWindows=“true"属性时,解决4.4和emui3.1手机底部有时会出现多余空白的问题,默认为false,非必须 .addTag(“tag”) //给以上设置的参数打标记 .getTag(“tag”) //根据tag获得沉浸式参数 .reset() //重置所以沉浸式参数 .keyboardEnable(true) //解决软键盘与底部输入框冲突问题,默认为false,还有一个重载方法,可以指定软键盘mode .init(); //必须调用方可沉浸式使用方式第一步:基础用法(已经可以满足日常沉浸式)ImmersionBar.with(this).init();第二步在activity的onDestroy方法中执行ImmersionBar.with(this).destroy(); //不调用该方法,如果界面bar发生改变,在不关闭app的情况下,退出此界面再进入将记忆最后一次bar改变的状态建议建议在BaseActivity中初始化和销毁,可以参看demo中BaseActivitypublic class BaseActivity extends AppCompatActivity { private ImmersionBar mImmersionBar; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); mImmersionBar = ImmersionBar.with(this); mImmersionBar.init(); //所有子类都将继承这些相同的属性 } @Override protected void onDestroy() { super.onDestroy(); mImmersionBar.destroy(); //不调用该方法,如果界面bar发生改变,在不关闭app的情况下,退出此界面再进入将记忆最后一次bar改变的状态 } }如何 隐藏导航栏或状态栏 /** * 隐藏导航栏或状态栏 * * @param barHide the bar hide * @return the immersion bar */ public ImmersionBar hideBar(BarHide barHide) { mBarParams.barHide = barHide; if (Build.VERSION.SDK_INT == Build.VERSION_CODES.KITKAT || OSUtils.isEMUI3_1()) { if ((mBarParams.barHide == BarHide.FLAG_HIDE_NAVIGATION_BAR) || (mBarParams.barHide == BarHide.FLAG_HIDE_BAR)) { mBarParams.navigationBarColor = Color.TRANSPARENT; mBarParams.fullScreenTemp = true; } else { mBarParams.navigationBarColor = mBarParams.navigationBarColorTemp; mBarParams.fullScreenTemp = false; } } return this; }部分问题解决华为emui3.0或者3.1手机手动隐藏导航栏按钮时,导航栏背景未被隐藏的问题什么叫做手动隐藏,就是下图中标红的向下隐藏按钮 第一种解决方案,监听华为虚拟按钮,建议在baseActivity里使用 @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); immersionBar = ImmersionBar.with(this); immersionBar.init(); if (OSUtils.isEMUI3_1()) //解决华为emui3.0与3.1手机手动隐藏底部导航栏时,导航栏背景色未被隐藏的问题 getContentResolver().registerContentObserver(Settings.System.getUriFor (“navigationbar_is_min”), true, mNavigationStatusObserver); } private ContentObserver mNavigationStatusObserver = new ContentObserver(new Handler()) { @Override public void onChange(boolean selfChange) { int navigationBarIsMin = Settings.System.getInt(getContentResolver(), “navigationbar_is_min”, 0); if (navigationBarIsMin == 1) { //导航键隐藏了 immersionBar .transparentNavigationBar() .init(); } else { //导航键显示了 immersionBar .navigationBarColor(android.R.color.black) .fullScreen(false) .init(); } } };第二种解决方案,禁止对导航栏相关设置 ImmersionBar.with(this) .navigationBarEnable(false) //禁止对导航栏相关设置 //或者 // .navigationBarWithKitkatEnable(false) //禁止对4.4设备导航栏相关设置 .init();android 6.0 有导航栏效果项目地址:https://github.com/androidsta…gyf-dev的博客地址:https://github.com/gyf-dev/Im…博客地址:http://blog.csdn.net/androids…如果你觉得此文对您有所帮助,欢迎入群 QQ交流群 :232203809 微信公众号:终端研发部 ...

December 19, 2018 · 2 min · jiezi

Andrew Ng教你如何引领公司进入AI时代

摘要: 人工智能时代,企业转型遇到困难?看看Andrew Ng的建议吧!AI(人工智能)技术就像100年前的电力一样,正准备改变每个行业。从现在到2030年,它将创造约13万亿美元的GDP增长。虽然它已经在谷歌,阿里巴巴,微软等领先的科技公司中创造了巨大的价值,但其他许多价值创造浪潮将超越软件领域。这个人工智能转型手册借鉴了我领导谷歌大脑团队和百度AI团队的感悟,AI在使谷歌和百度成为优秀的科技公司。任何企业都可以关注此Playbook并成为一家强大的AI公司,尽管这些建议主要针对市值/估值从5亿美元到500亿美元的大型企业。下面是我建议用AI转换企业的步骤,我将在本文中解释:a) 执行试点项目以获得动力;b) 建立一个内部AI团队;c) 提供广泛的AI培训;d) 制定人工智能战略;e) 鼓励内部和外部沟通。1、执行试点项目以获得动力对于你的前几个AI项目而言,更重要的是成功而不是成为最有价值的AI项目。它们应该足够有意义,以便早期的成功将有助于你的公司熟悉AI,并说服公司其他人投资下一个的AI项目;另外这个项目不应该很小,以至于别人会认为它是微不足道的。重要的是让项目成功实施,这会让你的AI团队获得动力。前几个AI项目的建议特征:a) 理想情况下,新的或外部AI团队(可能对你的业务没有深入的领域知识)可以与你的内部团队(具有深厚的领域知识)合作,构建AI解决方案,在6-12个月内开始显示项目的价值。b) 该项目在技术上应该是可行的。太多的公司仍在使用当今的AI技术开展不可能的项目,所以在启动前,对项目进行尽职调查将增加你对其可行性的信心。c) 有明确定义和可衡量的目标,创造商业价值。当我领导谷歌大脑团队时,谷歌(更广泛地说,世界各地)的深度学习技术受到了极大的怀疑。为了帮助团队获得动力,我选择Google Speech团队作为我的第一个内部客户,我们与他们密切合作,使Google语音识别更加准确。语音识别在Google中是一个有意义的项目,但不是最重要的项目。例如,对公司的底线而言,将其应用于网络搜索或广告并不重要。但是通过使用深度学习僵尸做演讲内容的团队更加成功,而其他团队开始对我们充满信心,这使得Google Brain团队获得了动力。一旦其他团队开始看到Google Speech与Google Brain合作的成功,我们就能够获得更多的内部客户。谷歌大脑的第二个主要内部客户是谷歌地图,它使用深度学习来提高地图数据的质量。通过这两次合作成功,我开始与广告团队进行讨论。此过程是你可以在公司中使用的可重复模型。2、建立一个内部AI团队虽然拥有深厚技术专业AI的外包合作伙伴可以帮助你更快地获得初始动力,但从长远来看,构建一只内部AI团队执行某些项目会更有效率。另外,在公司内部保留一些项目,也可以建立更独特的竞争优势。首先是要从高级管理层获得支持来建立这个内部团队。类似的,在互联网兴起时,许多公司是聘请CIO进行互联网转型的。在人工智能时代,许多公司将形成一个可以帮助整个公司的转型的AI团队。如果他们拥有合适的技能,那么这个AI团队的管理者可以担任CTO,CIO或CDO(首席数据官)职务。它也可以由专门的CAIO(首席AI官员)领导复杂,AI部门的主要职责是:a) 建立AI系统以支持整个公司;b) 推动一系列跨职能项目,以支持与AI项目在不同的部门/业务部门运行,完成初始项目后,删除重复流程以持续提供一系列有价值的AI项目;c) 制定一致的标准;d) 开发对多个部门/业务部门有用的平台,该平台不太可能由个别部门开发。可以考虑与CTO/CIO/CDO合作开发统一的数据仓库标准。一般公司都是有多个业务部门向CEO报告。通过新的AI团队的组织架构,你可以将AI人才分散在不同的部门,以推动跨职能项目。这将会出现新的职位描述和新的团队组织。我现在以机器学习工程师,数据工程师,数据科学家和AI产品经理等角色组织我的团队,这与AI之前的时代不同。目前有AI正在经历人才战争,大多数公司都很难雇用斯坦福大学博士生。由于人才战在短期内基本上是零和,因此可以帮助你建立AI团队的合作伙伴将给你一个非凡的优势。但是,为现有团队提供培训也是在内部培养大量新人才的好方法。3、提供广泛的AI培训今天没有一家公司拥有足够的AI人才。虽然媒体关于高AI工资的报道被过度炒作,但AI人才也很难找到。幸运的是,随着数字内容的兴起,包括课程、电子书和YouTube视频等MOOC,培养员工使用AI等新技能比以往任何时候都更具成本效益。聪明的CLO(首席学习官)的工作应该是策划,而不是创建内容,然后建立流程以确保员工完成学习体验。十年前,内部员工培训意味着聘请顾问来办公室进行讲座,这种方式效率低下且投资回报率尚不清楚。相比之下,数字内容更实惠,也可为员工提供更个性化的体验。如果你有预算聘请顾问,那么在现场内容的基础上应该补充在线内容。事实上,聘请一些AI专家来提供现场讲座也可以激励员工学习AI技术。AI将改变许多工作内容,你应该给团队每个人提供他们在AI时代适应新角色所需的知识。咨询专家将为你的团队开发定制课程,教育计划可能如下所示:1、高级管理人员和业务负责人:(4小时培训)目标:让管理人员了解人工智能可以为企业做些什么,开始制定人工智能战略,做出适当的资源分配决策,并与支持有价值的人工智能项目的人工智能团队顺利协作。课程:a) 对AI的基本理解包括基本技术、数据以及AI可以做什么和不能做什么。b) 了解AI对公司战略的影响。c) 关于人工智能应用到相关行业或特定行业的案例研究。2、执行人工智能项目的部门领导:(12小时培训)目标:部门负责人应能够为人工智能项目设定方向,分配资源,监控和跟踪进度,并根据需要进行更正,以确保项目成功交付。课程:a) 对AI的基本业务理解包括基本技术,数据以及AI可以做什么和不能做什么。b) 对AI的基本技术理解,包括主要的算法类及其要求。c) 基本了解AI项目的工作流程和流程,AI团队中的角色和职责,以及AI团队的管理。3、AI工程师培训生:(⩾100小时培训) 目标:新培训的AI工程师应该能够收集数据,培训AI模型,并完成特定的AI项目。课程:a)深入了解机器学习和深度学习,基本了解AI工具。b)了解用于构建AI和数据系统的可用(开源和其他第三方)工具。c)能够实施AI团队的工作流程。d)此外:跟上不断发展的人工智能技术。4、制定人工智能战略人工智能战略将指导你的公司创造价值,同时建立护城河。一旦团队开始看到初始AI项目的成功并形成对AI的深入理解,你将能够确定AI可以创造最大价值的地方并将资源集中在这些区域上。一些高管认为制定人工智能战略应该是第一步。根据我的经验,大多数公司在获得人工智能的基本经验之前,无法写出完美的人工智能战略,这需要上述步骤1-3的支持。建立护城河的方式也随着人工智能而发展,以下是需要考虑的点:构建几个与基本战略大致相符的具有挑战性性的AI项目:AI使公司能够以新的方式建立独特的竞争优势。迈克尔关于商业战略的开创性著作表明,开展防御性业务的一种方法是建立几个与基本战略基本一致的挑战性的项目。因此,竞争对手难以同时复制所有这些项目。利用人工智能创造特定于你的行业领域的优势:我不建议在“通用”人工智能领域与谷歌、阿里等领先的科技公司竞争,反而我建议你成为某个行业领域的领先AI公司,开发独特的AI功能将允许你获得竞争优势。AI如何影响你公司的战略将视行业和具体情况。战略设计与“人性化的良性循环”正反馈循环一致:在许多行业中,我们将看到数据积累带来的垄断业务:例如,Google,百度,阿里等领先的网络搜索引擎拥有巨大的数据资产,可以显示用户在不同搜索查询后点击的链接。这些数据有助于公司构建更准确的搜索引擎产品(A),从而帮助他们获得更多用户(B),从而使他们拥有更多的用户数据(C),这种积极的反馈循环很难让竞争对手进入。数据是AI系统的关键。因此,许多伟大的AI公司也有一个复杂的数据战略。你的数据战略的关键要素可能包括:战略数据采集:可以使用从100个数据点到100000000个数据点(“大数据”)的任何地方构建有用的AI系统。但拥有更多数据一定不是坏事。AI团队正在竭尽全力的获取数据,具体的数据采集策略是针对特定行业和特定情况的。例如,谷歌和百度都有许多免费产品,这些产品没有盈利模式,但他们可以获取在其他地方产生价值的数据。统一数据仓库:如果你有50个不同的VP或部门控制下的50个不同的数据库,工程师或AI软件几乎不可能都可以访问这些数据。相反,请考虑集中化你的数据分为一个或少数数据仓库。数据价值的判断:自动拥有数TB的数据并不意味着AI团队就能够从该数据中获取价值。期待AI团队从大型数据集中神奇地创造价值是一个很有可能失败的事件,我看到过很多CEO过度投资或收购收集低价值数据的公司。通过在数据采集过程中尽早引入AI团队来避免这种错误,并让他们帮助你确定要获取和保存的数据类型的优先级。创建网络效应和平台优势:最后,AI也可被用于构建更传统的护城河。例如,具有网络效应的平台是高度防御性的业务。他们通常拥有一种自然的“赢家通吃”能力。如果人工智能允许你以比竞争对手更快的速度获得用户,那么它可以用于构建通过平台动态防御的护城河。更广泛地说,你还可以将AI用作低成本战略,高价值或其他业务战略的关键组成部分。5、鼓励内部和外部沟通AI会显著影响你的业务。如果它影响你的关键利益相关者,你应该运行通信程序以确保一致。以下是你应该为相关者考虑的内容:投资者关系:谷歌和阿里等领先的人工智能公司现在是更有价值的公司,部分原因在于他们的人工智能能力以及人工智能对其底线的影响。为贵公司的人工智能解释一份明确的价值创造论文,描述你不断增长的人工智能能力,最后有一个深思熟虑的人工智能战略,将有助于投资者适当地重视你的公司。政府关系:受强监管的行业(自动驾驶汽车,医疗保健),公司面临着保持合规的独特挑战。通过一个可信的,引人注目的人工智能故事,解释你的项目可以为行业或社会带来的价值和利益,是建立信任的重要一步。在你推出项目时,这应该与直接沟通和与监管机构的持续对话相结合。客户/用户教育:AI可能会为你的客户带来重大利益,因此请确保传播适当的营销和产品路线图消息。人才/招聘:由于人才的缺乏,强大的雇主品牌将对你吸引和留住这些人才的能力产生重大影响。AI工程师希望开展令人兴奋且有意义的项目,适度展示你最初成功的项目大有帮助。内部沟通:很多人对人工智能仍然知之甚少,因为被过度炒作,所以存在恐惧、不确定和怀疑。许多员工也担心他们的工作由人工智能取代,尽管这种差异因文化而异。清晰的内部沟通既可以解释人工智能,也可以解决员工的担忧,这将减少内部不愿意采用人工智能。历史对你的成功至关重要了解互联网如何改变行业对于驾驭人工智能的兴起是有用的。有许多企业在互联网崛起的过程中出现了一个错误,我希望在人工智能的兴起中可以避免这种错误。我们在互联网时代了解到:购物中心+网站≠互联网公司即使一个购物中心建立了一个网站并在网站上出售东西,这本身并没有将购物中心变成真正的互联网公司。真正的互联网公司的定义是:你公司原有的业务是否放在互联网上效率更高?(Have you organized your company to do the things that the internet lets you do really well?)例如,互联网公司普遍使用的A/B测试,我们定期推出两个版本的网站,并检测哪个更好。互联网公司甚至可能同时运行数百个实验,这对于实体购物中心来说很难。互联网公司也可以每周发布一种新产品,而购物中心每季度只能更新一次设计。互联网公司对产品经理和软件工程师等角色有独特的职位描述,这些职位具有独特的工作流程和流程,且可以协同工作。深度学习是人工智能发展最快的领域之一,它与互联网的兴起呈现出相似之处。今天,我们发现:互联网的公司+深度学习技术≠AI公司为了让你的公司在人工智能方面做得很好,你必须找到AI使你的公司变得更好的出路。(you will have to organize your company to do the things that AI lets you do really well.)为了让你的公司在人工智能方面表现出色,你必须:a) 系统地执行多个有价值的AI项目的资源:AI公司可以拥有外包或内部技术和人才,可以系统地执行多个AI项目,为业务带来直接价值。b) 对人工智能的充分理解:应该对人工智能有一般的了解,并采用适当的流程来系统地识别和选择有价值的人工智能项目。c) 战略方向:公司的战略大体上与人工智能未来的成功保持一致。AI转型计划可能需要2-3年,但你应该在6-12个月内看到初步的具体结果。通过投资人工智能转型,你将保持领先于竞争对手!本文作者:【方向】阅读原文本文为云栖社区原创内容,未经允许不得转载。

December 17, 2018 · 1 min · jiezi

Google/Baidu的搜索技巧

前言关于搜索问题答案的技能,据不知道从哪里来的调查结果显示,让人意外的是有四分之三的人都没能较好的利用网络搜索。在咨询丰富的互联网中,如何有效地搜索那可是快速寻找答案的关键技能啊;这里给您提供了一些有效利用Google/Baidu搜索的提示,助你快速搜获所需信息。如何Google/Baidu搜索你是否每次在Google/Baidu时都只是假如空格分隔关键字呢?相对这基本的搜索功能,合理利用搜索“操作符”,可以帮助你获得更加精确的搜索结果。Google搜索地址为“https://www.google.com”,Baidu搜索地址为“https://www.baidu.com”。site搜索搜索语法:site:url.com synonym “keywords” -excludeKey 2016..2018site:url.com表示只搜索某个网站的页面synonym表示同时搜索近义词“keywords”表示以整个短语作为搜索关键字,而不是拆开为每个词-excludeKey表示排除某个关键字2016..2018表示指定年份时间段内的搜索结果filetype搜索搜索语法:filetype:pdf keywords inititle:titleName of PHPfiletype:pdf指明只搜索类型为pdf的文档,也可以搜索doc、xls、jpg等所有类型的文档keywords是关键字搜索inititle:titleName是指明标题中包含指定关键词的搜索结果星号用来代替任意字符,即搜索任意字符+关键字的搜索结果Google/Baidu学术搜索对于很多在学术研究的多数项目中,只依靠简单的Google/Baidu搜索不能有效达到目的;可以借助使用Google/Baidu学术搜索,其专门用来搜索理论和学术著作的,就是你会在你的论文中引用的那种,其Google学术地址为“https://scholar.google.com”,Baidu学术地址为“http://xueshu.baidu.com”。author搜索搜索语法:author:name keywords “otherKeywords”author:name只表示搜索name发布的论文keywords就是普通的关键字搜索“otherKeywords”前面也说了,表示以整个短语作为搜索关键字,而不是拆开为每个词其他Google/Baidu搜索技巧其他的搜索技巧还有类似字词定义,数学计算,单位换算等,下面一一罗列。define字词定义快速查询字词定义,只要在你想了解的单词前面输入define即可,即define:keywords数学计算快速计算,别费力启动你的计算器软件了;只需要直接在Google/Baidu中输入数学算式就行了,算式可以包含+、-、、/和括号这些基本的算术功能。例如:(48)/2+18-1。单位换算方便的单位换算,只需要输入你想要换算的两种单位即可,例如:100磅=?公斤快捷键操作我相信很多互联网用户不知道可以使用“Ctrl + F”在本页内查找字符。(PS:快捷键的使用在Windows和Mac上略有不同,本文主要以Windows快捷键为例子说明。如果你使用的是Mac,多数情况用“Command”按钮代替“Ctrl”按钮即可。)在本页内查找关键字查找中最重要的快捷键,在你正在查看的任一文档或者页面中,按下“Ctrl + F”键,弹出搜索框后,输入你想查找的字符串,立刻所有对应的字符串都会高亮显示。放大或缩小页面有时候页面字体太小或者在线PDF文档勉强可以阅读,从而需要放大或者缩小页面的需求,你就可以使用“Ctrl + 加号+”或者“Ctrl + 减号-”来放大或者缩小当前页面。选址浏览器地址栏每次使用鼠标移动到地址栏是费神又费力,只要按下“Ctrl + L”或者“F6”,地址栏即可选中。切换标签页和程序在电脑上工作,随着每天工作的开展,运行的应用程序和打开的窗口越来越多,这个时候,可以使用快捷键帮助你在不同的窗口和应用程序间切换,减轻你的烦乱。切换标签页的快捷键为“Ctrl + Tab”,切换窗口快捷键为“Alt Tab”最后提示善用你的大脑、书籍。(PS:Google/Baidu搜索固然很给力,但绝不是搜索结果的唯一选择)学术搜索不要引用维基百科。(PS:维基百科是一个很适合入门的地方,但是很多资料缺乏来源引证)其他……

September 28, 2018 · 1 min · jiezi

AndroidUtils:Android开发不得不收藏的Utils

作者:小小程序员jh链接:https://www.jianshu.com/p/eba…AndroidUtils Android开发不得不收藏的Utils之前写这篇文章主要是项目应用到的Utils,发现已经有一个更全面的开源库总结,所以还是非常震惊可以总结的这么全面,在此我准备重新梳理一遍~AndroidUtils:Android必备utilCode具体Demo使用参考开源github:AndroidUtilCode。本文只是稍微记录下方便自己查阅。Activity相关→ActivityUtils.javaApp相关→AppUtils.java状态栏相关→BarUtils.java清除相关→CleanUtils.java剪贴板相关→ClipboardUtils.java关闭相关→CloseUtils.java常量相关→ConstUtils.java转换相关→ConvertUtils.java崩溃相关→CrashUtils.java设备相关→DeviceUtils.java判空相关→EmptyUtils.java编码解码相关→EncodeUtils.java加密解密相关→EncryptUtils.javaencryptMD2, encryptMD2ToString : MD2加密encryptMD5, encryptMD5ToString : MD5加密encryptMD5File, encryptMD5File2String : MD5加密文件encryptSHA1, encryptSHA1ToString : SHA1加密encryptSHA224, encryptSHA224ToString : SHA224加密encryptSHA256, encryptSHA256ToString : SHA256加密encryptSHA384, encryptSHA384ToString : SHA384加密encryptSHA512, encryptSHA512ToString : SHA512加密encryptHmacMD5, encryptHmacMD5ToString : HmacMD5加密encryptHmacSHA1, encryptHmacSHA1ToString : HmacSHA1加密encryptHmacSHA224, encryptHmacSHA224ToString : HmacSHA224加密encryptHmacSHA256, encryptHmacSHA256ToString : HmacSHA256加密encryptHmacSHA384, encryptHmacSHA384ToString : HmacSHA384加密encryptHmacSHA512, encryptHmacSHA512ToString : HmacSHA512加密encryptDES, encryptDES2HexString, encryptDES2Base64 : DES加密decryptDES, decryptHexStringDES, decryptBase64DES : DES解密encrypt3DES, encrypt3DES2HexString, encrypt3DES2Base64: 3DES加密decrypt3DES, decryptHexString3DES, decryptBase64_3DES : 3DES解密encryptAES, encryptAES2HexString, encryptAES2Base64 : AES加密decryptAES, decryptHexStringAES, decryptBase64AES : AES解密文件相关→FileUtils.javagetFileByPath : 根据文件路径获取文件isFileExists : 判断文件是否存在rename : 重命名文件isDir : 判断是否是目录isFile : 判断是否是文件createOrExistsDir : 判断目录是否存在,不存在则判断是否创建成功createOrExistsFile : 判断文件是否存在,不存在则判断是否创建成功createFileByDeleteOldFile: 判断文件是否存在,存在则在创建之前删除copyDir : 复制目录copyFile : 复制文件moveDir : 移动目录moveFile : 移动文件deleteDir : 删除目录deleteFile : 删除文件listFilesInDir : 获取目录下所有文件listFilesInDir : 获取目录下所有文件包括子目录listFilesInDirWithFilter : 获取目录下所有后缀名为suffix的文件listFilesInDirWithFilter : 获取目录下所有后缀名为suffix的文件包括子目录listFilesInDirWithFilter : 获取目录下所有符合filter的文件listFilesInDirWithFilter : 获取目录下所有符合filter的文件包括子目录searchFileInDir : 获取目录下指定文件名的文件包括子目录writeFileFromIS : 将输入流写入文件writeFileFromString : 将字符串写入文件readFile2List : 指定编码按行读取文件到链表中readFile2String : 指定编码按行读取文件到字符串中readFile2Bytes : 读取文件到字符数组中getFileLastModified : 获取文件最后修改的毫秒时间戳getFileCharsetSimple : 简单获取文件编码格式getFileLines : 获取文件行数getDirSize : 获取目录大小getFileSize : 获取文件大小getDirLength : 获取目录长度getFileLength : 获取文件长度getFileMD5 : 获取文件的MD5校验码getFileMD5ToString : 获取文件的MD5校验码getDirName : 根据全路径获取最长目录getFileName : 根据全路径获取文件名getFileNameNoExtension : 根据全路径获取文件名不带拓展名getFileExtension : 根据全路径获取文件拓展名Handler相关→HandlerUtils.java防止内存泄露Handler(匿名内部类)持有外部类的引用图片相关→ImageUtils.javabitmap2Bytes, bytes2Bitmap : bitmap与byteArr互转drawable2Bitmap, bitmap2Drawable: drawable与bitmap互转drawable2Bytes, bytes2Drawable : drawable与byteArr互转getBitmap : 获取bitmapscale : 缩放图片clip : 裁剪图片skew : 倾斜图片rotate : 旋转图片getRotateDegree : 获取图片旋转角度toRound : 转为圆形图片toRoundCorner : 转为圆角图片fastBlur : 快速模糊renderScriptBlur : renderScript模糊图片stackBlur : stack模糊图片addFrame : 添加颜色边框addReflection : 添加倒影addTextWatermark : 添加文字水印addImageWatermark : 添加图片水印toAlpha : 转为alpha位图toGray : 转为灰度图片save : 保存图片isImage : 根据文件名判断文件是否为图片getImageType : 获取图片类型compressByScale : 按缩放压缩compressByQuality : 按质量压缩compressBySampleSize : 按采样大小压缩意图相关→IntentUtils.javagetInstallAppIntent : 获取安装App(支持6.0)的意图getUninstallAppIntent : 获取卸载App的意图getLaunchAppIntent : 获取打开App的意图getAppDetailsSettingsIntent: 获取App具体设置的意图getShareTextIntent : 获取分享文本的意图getShareImageIntent : 获取分享图片的意图getComponentIntent : 获取其他应用组件的意图getShutdownIntent : 获取关机的意图getCaptureIntent : 获取拍照的意图键盘相关→KeyboardUtils.javahideSoftInput : 动态隐藏软键盘clickBlankArea2HideSoftInput: 点击屏幕空白区域隐藏软键盘showSoftInput : 动态显示软键盘toggleSoftInput : 切换键盘显示与否状态定位相关→LocationUtils.javaisGpsEnabled : 判断Gps是否可用isLocationEnabled: 判断定位是否可用openGpsSettings : 打开Gps设置界面register : 注册unregister : 注销getAddress : 根据经纬度获取地理位置getCountryName : 根据经纬度获取所在国家getLocality : 根据经纬度获取所在地getStreet : 根据经纬度获取所在街道日志相关→LogUtils.javainit : 初始化函数getBuilder: 获取LogUtils建造者v : Verbose日志d : Debug日志i : Info日志w : Warn日志e : Error日志网络相关→NetworkUtils.javaopenWirelessSettings : 打开网络设置界面isConnected : 判断网络是否连接isAvailableByPing : 判断网络是否可用getDataEnabled : 判断移动数据是否打开setDataEnabled : 打开或关闭移动数据is4G : 判断网络是否是4GgetWifiEnabled : 判断wifi是否打开setWifiEnabled : 打开或关闭wifiisWifiConnected : 判断wifi是否连接状态isWifiAvailable : 判断wifi数据是否可用getNetworkOperatorName: 获取移动网络运营商名称getNetworkType : 获取当前网络类型getIPAddress : 获取IP地址getDomainAddress : 获取域名ip地址手机相关→PhoneUtils.javaisPhone : 判断设备是否是手机getIMEI : 获取IMEI码getIMSI : 获取IMSI码getPhoneType : 获取移动终端类型isSimCardReady : 判断sim卡是否准备好getSimOperatorName : 获取Sim卡运营商名称getSimOperatorByMnc: 获取Sim卡运营商名称getPhoneStatus : 获取手机状态信息dial : 跳至拨号界面call : 拨打phoneNumbersendSms : 跳至发送短信界面sendSmsSilent : 发送短信getAllContactInfo : 获取手机联系人getContactNum : 打开手机联系人界面点击联系人后便获取该号码getAllSMS : 获取手机短信并保存到xml中拼音相关→PinyinUtils.javaccs2Pinyin : 汉字转拼音ccs2Pinyin : 汉字转拼音getPinyinFirstLetter : 获取第一个汉字首字母getPinyinFirstLetters: 获取所有汉字的首字母getSurnamePinyin : 根据名字获取姓氏的拼音getSurnameFirstLetter: 根据名字获取姓氏的首字母进程相关→ProcessUtils.javagetForegroundProcessName : 获取前台线程包名killAllBackgroundProcesses: 杀死所有的后台服务进程killBackgroundProcesses : 杀死后台服务进程正则相关→RegexUtils.javaisMobileSimple : 验证手机号(简单)isMobileExact : 验证手机号(精确)isTel : 验证电话号码isIDCard15 : 验证身份证号码15位isIDCard18 : 验证身份证号码18位isEmail : 验证邮箱isURL : 验证URLisZh : 验证汉字isUsername : 验证用户名isDate : 验证yyyy-MM-dd格式的日期校验,已考虑平闰年isIP : 验证IP地址isMatch : 判断是否匹配正则getMatches : 获取正则匹配的部分getSplits : 获取正则匹配分组getReplaceFirst: 替换正则匹配的第一部分getReplaceAll : 替换所有正则匹配的部分屏幕相关→ScreenUtils.javagetScreenWidth : 获取屏幕的宽度(单位:px)getScreenHeight : 获取屏幕的高度(单位:px)setLandscape : 设置屏幕为横屏setPortrait : 设置屏幕为竖屏isLandscape : 判断是否横屏isPortrait : 判断是否竖屏getScreenRotation : 获取屏幕旋转角度captureWithStatusBar : 获取当前屏幕截图,包含状态栏captureWithoutStatusBar: 获取当前屏幕截图,不包含状态栏isScreenLock : 判断是否锁屏SD卡相关→SDCardUtils.javaisSDCardEnable: 判断SD卡是否可用getSDCardPath : 获取SD卡路径getDataPath : 获取SD卡Data路径getFreeSpace : 计算SD卡的剩余空间getSDCardInfo : 获取SD卡信息服务相关→ServiceUtils.javagetAllRunningService: 获取所有运行的服务startService : 启动服务stopService : 停止服务bindService : 绑定服务unbindService : 解绑服务isServiceRunning : 判断服务是否运行Shell相关→ShellUtils.javaexecCmd: 是否是在root下执行命令尺寸相关→SizeUtils.javadp2px, px2dp : dp与px转换sp2px, px2sp : sp与px转换applyDimension : 各种单位转换forceGetViewSize : 在onCreate中获取视图的尺寸measureView : 测量视图尺寸getMeasuredWidth : 获取测量视图宽度getMeasuredHeight: 获取测量视图高度Snackbar相关→SnackbarUtils.javashowShortSnackbar : 显示短时snackbarshowLongSnackbar : 显示长时snackbarshowIndefiniteSnackbar: 显示自定义时长snackbaraddView : 为SnackBar添加布局dismissSnackbar : 取消snackbar显示SpannableString相关工具类→SpannableStringUtils.javagetBuilder : 获取建造者setFlag : 设置标识setForegroundColor: 设置前景色setBackgroundColor: 设置背景色setQuoteColor : 设置引用线的颜色setLeadingMargin : 设置缩进setBullet : 设置列表标记setProportion : 设置字体比例setXProportion : 设置字体横向比例setStrikethrough : 设置删除线setUnderline : 设置下划线setSuperscript : 设置上标setSubscript : 设置下标setBold : 设置粗体setItalic : 设置斜体setBoldItalic : 设置粗斜体setFontFamily : 设置字体setAlign : 设置对齐setBitmap : 设置图片setDrawable : 设置图片setUri : 设置图片setResourceId : 设置图片setClickSpan : 设置点击事件setUrl : 设置超链接setBlur : 设置模糊append : 追加样式字符串create : 创建样式字符串SP相关→SPUtils.javaSPUtils : SPUtils构造函数putString : SP中写入String类型valuegetString : SP中读取StringputInt : SP中写入int类型valuegetInt : SP中读取intputLong : SP中写入long类型valuegetLong : SP中读取longputFloat : SP中写入float类型valuegetFloat : SP中读取floatputBoolean: SP中写入boolean类型valuegetBoolean: SP中读取booleangetAll : SP中获取所有键值对remove : SP中移除该keycontains : SP中是否存在该keyclear : SP中清除所有数据字符串相关→StringUtils.javaisEmpty : 判断字符串是否为null或长度为0isSpace : 判断字符串是否为null或全为空格equals : 判断两字符串是否相等equalsIgnoreCase: 判断两字符串忽略大小写是否相等null2Length0 : null转为长度为0的字符串length : 返回字符串长度upperFirstLetter: 首字母大写lowerFirstLetter: 首字母小写reverse : 反转字符串toDBC : 转化为半角字符toSBC : 转化为全角字符线程池相关→ThreadPoolUtils.javaThreadPoolUtils : ThreadPoolUtils构造函数execute : 在未来某个时间执行给定的命令execute : 在未来某个时间执行给定的命令链表shutDown : 待以前提交的任务执行完毕后关闭线程池shutDownNow : 试图停止所有正在执行的活动任务isShutDown : 判断线程池是否已关闭isTerminated : 关闭线程池后判断所有任务是否都已完成awaitTermination : 请求关闭、发生超时或者当前线程中断submit : 提交一个Callable任务用于执行submit : 提交一个Runnable任务用于执行invokeAll, invokeAny : 执行给定的任务schedule : 延迟执行Runnable命令schedule : 延迟执行Callable命令scheduleWithFixedRate : 延迟并循环执行命令scheduleWithFixedDelay: 延迟并以固定休息时间循环执行命令时间相关→TimeUtils.javamillis2String : 将时间戳转为时间字符串string2Millis : 将时间字符串转为时间戳string2Date : 将时间字符串转为Date类型date2String : 将Date类型转为时间字符串date2Millis : 将Date类型转为时间戳millis2Date : 将时间戳转为Date类型getTimeSpan : 获取两个时间差(单位:unit)getFitTimeSpan : 获取合适型两个时间差getNowTimeMills : 获取当前毫秒时间戳getNowTimeString : 获取当前时间字符串getNowTimeDate : 获取当前DategetTimeSpanByNow : 获取与当前时间的差(单位:unit)getFitTimeSpanByNow : 获取合适型与当前时间的差getFriendlyTimeSpanByNow: 获取友好型与当前时间的差isSameDay : 判断是否同一天isLeapYear : 判断是否闰年getWeek, getWeekIndex : 获取星期getWeekOfMonth : 获取月份中的第几周getWeekOfYear : 获取年份中的第几周getChineseZodiac : 获取生肖getZodiac : 获取星座吐司相关→ToastUtils.javainit : 吐司初始化showShortToastSafe: 安全地显示短时吐司showLongToastSafe : 安全地显示长时吐司showShortToast : 显示短时吐司showLongToast : 显示长时吐司cancelToast : 取消吐司显示压缩相关→ZipUtils.java→TestzipFiles : 批量压缩文件zipFile : 压缩文件unzipFiles : 批量解压文件unzipFile : 解压文件unzipFileByKeyword: 解压带有关键字的文件getFilesPath : 获取压缩文件中的文件路径链表getComments : 获取压缩文件中的注释链表getEntries : 获取压缩文件中的文件对象1.判断手机格式(正则表达式)public static Boolean isPhone(String str) { String regex = “^1[3|4|5|7|8]\d{9}$”; return match(regex, str); } private static boolean match(String regex, String str) { Pattern pattern = Pattern.compile(regex); Matcher matcher = pattern.matcher(str); return matcher.matches(); }//代码调用:2.dp-px;px-dp / * 根据手机的分辨率从 dp 的单位 转成为 px(像素) / public static int dip2px(Context context, float dpValue) { final float scale = context.getResources().getDisplayMetrics().density; return (int) (dpValue * scale + 0.5f); } /* * 根据手机的分辨率从 px(像素) 的单位 转成为 dp / public static int px2dip(Context context, float pxValue) { final float scale = context.getResources().getDisplayMetrics().density; return (int) (pxValue / scale + 0.5f);}3. 网络判断 2G - 3G - 4G -wifi/* * Created by ziyang on 16/12/14. * Version 1.0 /public class NetWorkHelper { /* * 没有网络 / public static final int NETWORKTYPE_INVALID = 0; /* * wap网络 / public static final int NETWORKTYPE_WAP = 1; /* * 2G网络 / public static final int NETWORKTYPE_2G = 2; /* * 3G和3G以上网络,或统称为快速网络 / public static final int NETWORKTYPE_3G = 3; /* * wifi网络 / public static final int NETWORKTYPE_WIFI = 4; private static boolean isFastMobileNetwork(Context context) { TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); switch (telephonyManager.getNetworkType()) { case TelephonyManager.NETWORK_TYPE_1xRTT: return false; // ~ 50-100 kbps case TelephonyManager.NETWORK_TYPE_CDMA: return false; // ~ 14-64 kbps case TelephonyManager.NETWORK_TYPE_EDGE: return false; // ~ 50-100 kbps case TelephonyManager.NETWORK_TYPE_EVDO_0: return true; // ~ 400-1000 kbps case TelephonyManager.NETWORK_TYPE_EVDO_A: return true; // ~ 600-1400 kbps case TelephonyManager.NETWORK_TYPE_GPRS: return false; // ~ 100 kbps case TelephonyManager.NETWORK_TYPE_HSDPA: return true; // ~ 2-14 Mbps case TelephonyManager.NETWORK_TYPE_HSPA: return true; // ~ 700-1700 kbps case TelephonyManager.NETWORK_TYPE_HSUPA: return true; // ~ 1-23 Mbps case TelephonyManager.NETWORK_TYPE_UMTS: return true; // ~ 400-7000 kbps case TelephonyManager.NETWORK_TYPE_EHRPD: return true; // ~ 1-2 Mbps case TelephonyManager.NETWORK_TYPE_EVDO_B: return true; // ~ 5 Mbps case TelephonyManager.NETWORK_TYPE_HSPAP: return true; // ~ 10-20 Mbps case TelephonyManager.NETWORK_TYPE_IDEN: return false; // ~25 kbps case TelephonyManager.NETWORK_TYPE_LTE: return true; // ~ 10+ Mbps case TelephonyManager.NETWORK_TYPE_UNKNOWN: return false; default: return false; } } /* * 获取网络状态,wifi,wap,2g,3g. * * @param context 上下文 * @return int 网络状态 {@link #NETWORKTYPE_2G},{@link #NETWORKTYPE_3G}, * {@link #NETWORKTYPE_INVALID},{@link #NETWORKTYPE_WAP} * <p>{@link #NETWORKTYPE_WIFI} / public static int getNetWorkType(Context context) { ConnectivityManager manager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo networkInfo = manager.getActiveNetworkInfo(); if (networkInfo != null && networkInfo.isConnected()) { String type = networkInfo.getTypeName(); if (type.equalsIgnoreCase(“WIFI”)) { return NETWORKTYPE_WIFI; } else if (type.equalsIgnoreCase(“MOBILE”)) { String proxyHost = android.net.Proxy.getDefaultHost(); return TextUtils.isEmpty(proxyHost) ? (isFastMobileNetwork(context) ? NETWORKTYPE_3G : NETWORKTYPE_2G) : NETWORKTYPE_WAP; } } else { return NETWORKTYPE_INVALID; } return NETWORKTYPE_INVALID; } public static boolean isNetWorkConn(Context context) { return getNetWorkType(context) != 0; }}4.LogUtils.java debug,release no log,当然可以添加更详细的比如添加时间,msg等等/* * LogUtils log工具类 * @author ziyang */public class LogUtils { public static boolean isDebug = BuildConfig.LOG_DEBUG; // 下面是传入自定义tag的函数 public static void i(String tag, String msg) { if (isDebug) Log.i(tag, msg); } public static void d(String tag, String msg) { if (isDebug) Log.i(tag, msg); } public static void e(String tag, String msg) { if (isDebug) Log.i(tag, msg); } public static void v(String tag, String msg) { if (isDebug) Log.i(tag, msg); }}//在app build.gradle配置 buildTypes { debug { buildConfigField “boolean”, “LOG_DEBUG”, “true” minifyEnabled false zipAlignEnabled true proguardFiles getDefaultProguardFile(‘proguard-android.txt’), ‘proguard-rules.pro’ //signingConfig signingConfigs.debug } release { buildConfigField “boolean”, “LOG_DEBUG”, “false” minifyEnabled false zipAlignEnabled true proguardFiles getDefaultProguardFile(‘proguard-android.txt’), ‘proguard-rules.pro’ } }5.MyToast.java当然可以拓展,时间控制,content内容控制等等public class MyToast extends Toast { private Toast mToast;public MyToast(Context context) { super(context);}public void showToast(String text, Context mContext) { if (mToast == null) { mToast = Toast.makeText(mContext, text, Toast.LENGTH_SHORT); } else { mToast.setText(text); mToast.setDuration(Toast.LENGTH_SHORT); } mToast.show();}public void cancelToast() { if (mToast != null) { mToast.cancel(); }}}阅读更多技术精华总结,说说我上半年都干了什么【Android】一次面试总结 ...

September 27, 2018 · 6 min · jiezi