首页 文章 精选 留言 我的

精选列表

搜索[算力],共10000篇文章
优秀的个人博客,低调大师

解放生产力,自动化生成vue组件文档

# 一、现状 Vue框架在前端开发中应用广泛,当一个多人开发的Vue项目经过长期维护之后往往会沉淀出很多的公共组件,这个时候经常会出现一个人 开发了一个组件而其他维护者或新接手的人却不知道这个组件是做什么的、该怎么用,还必须得再去翻看源码,或者压根就没注意到这个组件 的存在导致重复开发。这个时候就非常需要维护对应的组件文档来保障不同开发者之间良好的协作关系了。 **但是传统的手动维护文档又会带来新问题:** - 效率低,写文档是个费时费力的体力活,好不容易抽时间把组件开发完了回头还要写文档,想想都头大。 - 易出错,文档内容容易出现差错,可能与实际组件内容不一致。 - 不智能,组件更新迭代的同时,需要手动将变更同步到文档中,消耗时间还容易遗漏。 **而理想中的文档维护方式则是:** - 工作量小,能够结合Vue组件自动获取相关信息,减少从头开始写文档的工作量。 - 信息准确,组件的关键信息与组件内容一致,不出错。 - 智能同步,Vue组件迭代升级时,文档内容可以自动的同步更新,无需人工校验信息是否一致。 # 二、社区解决方案 ## 2.1 业务梳理 为了能实现上述理想效果,我搜索并研究了一下社区中的解决方案,目前Vue官方提供了Vue-press可以用于快速搭建Vue项目文档, 而且也已经有了可以自动从Vue组件中提取信息的库了。 但是已有的第三方库并不能完全满足需求,主要存在以下两个问题: > 信息不全面,一些重要内容无法获取例如不能处理v-model,不能解析属性的修饰符sync,不能获取methods中函数入参的详细信息等。 > > 比如下面的例子,value属性与input事件可以合起来构成一个v-model属性,但是这个信息在生成的文档中没有体现出来,要文档读者自行理解判断。而且生成的文档中没有展示是否支持sync。 ![](https://static001.geekbang.org/infoq/83/8378f232a5d5099718c35aeacaf63137.png) > 有较多的自定义标识,而且标识的命名过于个性化,对原有的代码侵入还是比较大的。例如下图中的代码,为了标记注释,需要在原有的 业务代码中额外添加"@vuese" "@arg"等标识,使得业务代码多出了一些业务无关内容。 ![](https://static001.geekbang.org/infoq/a6/a67f7eb2024734b06e9f582e3e5732c1.png) # 三、技术方案 针对以上文中提到的问题以及社区方案的不足,我们团队内沉淀出了一个小工具专门用于Vue组件信息获取并输出组件文档,大致效果如下: ![](https://static001.geekbang.org/infoq/6f/6fd0e52283b7f9aaa761575dc09ddb92.png) 上图中左边是一个常见的Vue单文件组件,右边是生成的文档。我们可以看到我们从组件中成功的提取到了以下一些信息: - 组件的名称。 - 组件的说明。 - props,slot,event,methods等。 - 组件的注释内容。 接下来我们将详细的讲解如何从组件中提取这些信息。 ## 3.1 Vue文件解析 既然是要从Vue组件中提取信息,那么首先的问题就是如何解析Vue组件。Vue官方开发了Vue-template-compiler库专门用于Vue解析, 这里我们也可以用同样的方式来处理。通过查阅文档可知Vue-template-compiler提供了一个parseComponent方法可以对原始的Vue文件进行处理。 ```java import { parseComponent } from 'Vue-template-compiler' const result = parseComponent(VueFileContent, [options]) ``` 处理后的结果如下,其中template和script分别对应Vue文件中的template和script的文本内容。 ```java export interface SFCDescriptor { template: SFCBlock | undefined; script: SFCBlock | undefined; styles: SFCBlock[]; customBlocks: SFCBlock[]; } ``` 当然仅仅是得到文本是不够的,还需要对文本进行更进一步的处理来获取更多的信息。得到script后,我们可以用babel把js编译成js的AST(抽象语法树),这个AST是一个普通的js对象,可以通过js进行遍历和读取 有了Ast之后我们就可以从中获取到我们想到详细的组件信息了。 ```java import { parse } from '@babel/parser'; const jsAst = parse(script, [options]); ``` 接着我们来看template,继续查找Vue-template-compiler的文档我们找到compile方法,compile是专门用于将template编译成AST的, 正好可以满足需求。 ```java import { compile } from 'Vue-template-compiler' const templateAst = compile(template, [options]); ``` 得到结果中的ast则为template的编译结果。 ```java export interface CompiledResult { ast: ASTElement, render: string, staticRenderFns: Array , errors: Array } ``` 通过第一步的文件解析工作,我们成功获取到了Vue的模板ast和script中的js的AST,下一步我们就可以从中获取我们想要的信息了。 ## 3.2 信息提取 根据是否需要约定,信息可以分为两种: > 一种是可以直接从Vue组件中获取,例如props、events等。 > 另一种是需要额外约定格式的,例如:组件的说明注释,props的属性说明等,这部分可以放到注释里,通过对注释进行解析获取。 为了方便的从ast中读取信息,这里先简单介绍一个工具@babel/traverse,这个库是babel官方提供的专门用于遍历js AST的。使用方式如下; ```java import traverse from '@babel/traverse' traverse(jsAst, options); ``` 通过在options中配置对应内容的回调函数,可以获得想要的ast节点。具体的使用可以参考[官方文档](https://babeljs.io/docs/en/babel-traverse) ### 3.2.1 可直接获取的信息 可以从代码中直接获取的信息可以有效的解决信息同步问题,无论代码怎么变动,文档的关键信息都可以自动同步,省去了人工校对的麻烦。 可以直接获取的信息有: - 组件属性props - 提供外部调用的方法methods - 事件events - 插槽slots 1、2都可以利用traverse在js AST上直接遍历名称为props和methods的对象节点获取。 事件的获取稍微麻烦一点,可以通过查找$emit函数来定位到事件的位置,而$emit函数可以在traverse中监听MemberExpress(复杂类型节点), 然后通过节点上的属性名是否是'$emit'判断是否是事件。如果是事件,那么在$emit父级中读取arguments字段, arguments的第一个元素就是事件名称,后面的元素为事件传参。 ```java this.$emit('event', arg); ``` ```java traverse(jsAst, { MemberExpression(Node) { // 判断是不是event if (Node.node.property.name === '$emit') { // 第一个元素是事件名称 const eventName = Node.parent.arguments[0]; } } }); ``` 在成功获取到Events后,那么结合Events和props,就可以进一步的判断出props中的两个特殊属性: > 是否存在v-model:查找props中是否存在value属性并且Events中是否存在input事件来确定。 > props的某个属性是否支持sync:判断Events的时间名中是否存在有update开头的事件,并且事件名称与属性名相同。 插槽slots的信息保存在上文的template的AST中,递归遍历template AST找到名为slots的节点,进而还可以在节点上查找到name。 ### 3.2.2 需要约定的信息 为什么除了可直接获取的组件信息之外,还会需要额外的约定一部分内容呢?其一是因为可直接获取的信息内容比较单薄,还不足以支撑起一个相对完善的组件文档;其二是我们日常开发组件时本身就会写很多的注释,如果能直接将部分注释提取出来放到文档中,可以大大降低文档维护的工作量; 整理一下可以约定的内容有以下几条: - 组件名称。 - 组件的整体介绍。 - props、Events、methods、slots文字说明。 - Methods标记和入参的详细说明。这些内容都可以放在注释中进行维护,之所以放在注释中进行维护是因为注释可以很容易从上文提到的js AST以及template AST中获取到, 在我们解析Vue组件信息的同时就可以把这部分针对性的说明一起解析到。 接下来我们着重讲解如何将提取注释和注释与被注释的内容是如何对应起来的。 js中的注释根据位置不同可以分为头部注释(leadingComments)和尾部注释(trailingComments),不同位置的注释会存放在对应的字段中, 代码展示如下: ```java // 头部注释export default {} // 尾部注释 ``` **解析结果** ```java const exportNode = { type: "ExportDefaultDeclaration", leadingComments: [{ type: 'CommentLine', value: '头部注释' }], trailingComments: [{ type: 'CommentLine', value: '尾部注释' }] } ``` 在同一个位置上,根据注释格式的不同又分为单行注释(CommentLine)和块级注释(CommentBlock),两种注释的区别会反应在注释节点的type字段中: ```java /** * 块级注释 */ // 单行注释 export default {} ``` **解析结果** ```java const exportNode = { type: "ExportDefaultDeclaration", leadingComments: [ { type: 'CommentBlock', value: '块级注释' }, { type: 'CommentLine', value: '单行注释' } ] } ``` 另外,从上面的解析结果我们也可以看到,注释节点是挂载在被注释的export节点里面的,这也解决我们上面提到的另一个问题:注释与被注释的关联关系怎么获取的--其实babel在编译代码的时候已经替我们做好了。 template查找注释与被注释内容的方法不同。template中注释节点与其他节点一样是作为dom节点存在的, 在遍历节点的时候通过判断isComment字段的值是否为true来确定是否是注释节点。而被注释的内容的位置在兄弟节点的后一位: ```java 被注释的节点 ``` **解析结果** ```java const templateAst = [ { isComment: true, text: "template的注释", type: 3 }, { tag: "slot", type: 1 } ] ``` 知道了如何处理注释内容,那么我们还可以利用注释做更多的事情。例如可以通过在methods的方法的注释中约定一个标记@public来区分是私有方法还是公共方法,如果更细节一点的话, 还可以参考另一个专门用于解析js注释的库js-doc的格式,对方法的入参进行更进一步的说明,丰富文档的内容。 我们只需要在获取到注释内容之后对文本进行切割读取即可,例如: ```java export default { methods: { /** * @public * @param {boolean} value 入参说明 */ show(value) {} } } ``` 当然了为了避免对代码侵入过多,我们还是需要尽量少的添加额外的标识。而入参说明采用了与js-doc相同的格式,主要还是因为这套方案 使用比较普遍,而且代码编辑器都自动支持方便编辑。 # 四、总结 编写组件文档是一个可以很好的提升项目内各个前端开发成员之间协作的事情,一份维护良好的文档会极大的改善开发体验。而如果能进一步的使用工具把维护文档的过程自动化的话,那开发的幸福感还能得到再次提升。 经过一系列的摸索和尝试,我们成功的找到了 自动化提取Vue组件信息的方案,大大减轻了维护Vue组件文档的工作量,提升了文档信息的准确度。具体实现上,先用vue-template-compiler对Vue文件进行处理,获得template的AST和js的AST,有了这两个AST后就可以去获取更加详细的信息了, 梳理一下到目前为止我们生成的文档里可以获取到的内容及获取方式: ![](https://static001.geekbang.org/infoq/49/49e846fd1da91640a987cbbaf50c111b.png) 至于获取到内容之后是以Markdown的形式输出还是json文件的形式输出,就取决于实际的开发情况了。 # 五、展望 这里我们所讨论的是直接从单个Vue文件去获取信息并输出,但是像很多第三方组件库里例如elementUI的文档,不仅有组件信息还有展示实例。如果一个组件库维护的相对完善的话,一个组件应该会有对应的测试用例,那么是否可以将组件的测试用例也提取出来, 实现组件文件中示例部分的自动提取呢?这也是值得研究的问题。 > 作者:vivo互联网前端团队-Feng Di

优秀的个人博客,低调大师

Babel 项目陷入财务困境,尤雨溪力挺负责人

Babel(又名 Babel.js)项目发布公告称陷入了财务困境——当前剩余的资金很快将被用完,因此 Babel 团队希望能收到捐款或厂商提供赞助,以帮助他们可以渡过艰难时期,并继续开发和维护 Babel。 据介绍,自2018年以来,Babel 一直在进行着一个资金实验:全职开发Babel 的工作能否持续?就目前的情况来看,答案是否定的。 虽然 Babel 是一个被数百万人使用的项目,每个月的下载量超过1.17 亿次,全球有成千上万的公司采用了它,并被集成到JavaScript 生态的各种框架中,例如 React、Next.js、Vue、Ember 和 Angular 等。此外还支持各种场景下的自定义插件和优化,例如 CSS-in-JS、GraphQL 或跨巨大代码库的本地化,但团队并没有因此而得到与付出相匹配的收入。 Babel 是一个 JavaScript 编译器,主要用于将采用 ECMAScript 2015+ 语法编写的代码转换为向后兼容的 JavaScript 语法,以便能够运行在当前和旧版本的浏览器或其他环境中。下面列出的是 Babel 能为你做的事情: 语法转换 通过 Polyfill 方式在目标环境中添加缺失的特性(通过第三方 polyfill 模块,例如core-js,实现) 源码转换 (codemods) 2020年期间,Babel 项目的主要赞助商退出资助,从而对项目资金状况产生负面影响,其团队中的一名开发者 Kai 不得不辞职,转而从事另一份全职工作。 Babel 现在的负责人 Henry 表示, 为了给维护者支付充分的资金,每年至少需要 $333,000,这个数字是他们目前取得的收入的 2 倍。因此,除了通过在Open Collective和GitHub Sponsors收到的捐款,他们希望可以寻找到更多的公司赞助商。毕竟与科技领域的投资相比,Babel 需求的资金似乎微不足道,不过却能对整个开源生态的健康和可持续性产生很大的影响。 事实上,Henry 发布捐款请求时受到了不少质疑,就连 Babel项目创始人(已离开项目)@sebmck也在推特进行了公开抨击,他表示团队没钱是因为负责人 Henry 从项目的资金中领取了 13.2 万美元年薪,然而过去一年却只提交过 7 次代码,并没有为项目实际工作过 (didn't actually work for on the project)。 对于@sebmck 的这番说法,Vue.js 作者尤雨溪反驳了回去,他表示"Working on a project"不仅仅只包含提交 commit,制定决策、管理团队、筹集资金,以及处理“我要为项目负责”的精神压力,这些都是为项目工作的内容。如果Henry 当初没有在@sebmck 离开项目的时候接管过来,Babel 早已死掉。实际上,Henry 也完全不需要这样做,他大可以找一份高薪的全职工作,但他还是选择了留下来,因为他认为这是正确的选择。 如果你希望为 Babel 捐款,可访问以下地址: https://github.com/sponsors/babel https://opencollective.com/babel

优秀的个人博客,低调大师

Chrome 力甩“耗电大户”称号,再推省电新功能

上个月,我们曾报道过“耗电大户”Chrome 浏览器正开启的一项实验性功能,即通过在标签页处于后台时关闭不必要的 JavaScript 计时器和跟踪器来减少能耗,测试预计此举将增加 28% 的电池寿命,相当于续航 2 小时。 谷歌没有停止在这一方面的探索。根据TheWindowsClub 的消息,Chrome 近日又推出了名为Battery-Savings(Meta Tag)的实验性功能。该功能旨在通过遵循用户的电脑电池设置,使站点向 Chrome 推荐合适的省电措施。 Chrome 希望以这样的方式降低 CPU 和电量的消耗,尤其是针对流量较为密集的视频或视频会议网站。另外,该功能计划减慢某些运行时间过长的 JavaScript 任务的运行速度,例如第三方广告设置或未加载内容的增量预渲染设置等。 从具体的实现上来讲,用户代理(User Agents)可以通过降低动画帧生成速率来实现帧速率的降低(allow-reduced-framerate),或者如果正在播放视频,则将动画帧速率与观察到的视频回放速率进行匹配。它通过将执行线程或进程放在一个小的核心而不是一个大的核心上,从而实现脚本速度的降低(allow-reduced-script-speed)。 完整的功能将包括以下几个方面: 允许站点指示首选模式的元标记(metatag) 媒体查询,使网站可以根据电池设置调整样式表 站点应遵循用户或操作系统的节电模式 User Agents 会遵循网站上的 meta 标记,除非它与用户或操作系统设置冲突 该功能预计随Chrome v86 或 v87 一起上线。届时,Chrome 消耗 CPU 和电量的情况或将得到大幅度改善。

优秀的个人博客,低调大师

国产统信UOS走向世界:俄罗斯、韩国、土耳其力挺

说起国产OS操作系统,统信软件旗下的统一操作系统UOS无疑是近期最为活跃的一个,软硬件适配越来越广泛,而且近期似乎悄然更名了,官方已经不再提及统一操作系统的说法,而是直接称为“统信UOS”。 统信UOS比较特殊的一点是它延续了中国团队研发的、已经很成熟的Deepin深度操作系统,这个发行版全球排名长期名列前10,支持多达33种语言,累计下载量超过8000万次,全球范围内有志愿者建立的100多个镜像站点。 同时,它的桌面环境也已广泛地被移植到其他国际主流Linux发行版本中,例如Arch、openSUSE、Ubuntu、Linux Mint、Manjaro、Anthon等等。 这种天然优势,也让统信UOS进入国际市场直接有路可循。统信软件官方宣布,近期已与土耳其、韩国、俄罗斯的六家Linux发行版团队开始对接,并着手合作。 据悉,在与各国Linux发行版团队的跨国视频会议中,双方最高管理层与主要部门的负责人均参与其中,互相介绍了各自的产品路线、技术特性、国内行业发展情况等,并就共同关注的政策、技术与产品等方面的问题广泛地交换了意见。 各团队一致表示,统信UOS目前的发展给了他们很好的参照,相信通过在政策、产品、技术等诸多方面的合作和对接中,将进一步促进各国操作系统产业的发展,进一步提高系统的能力。 另外值得关注的是,各国的操作系统都不约而同选择了Debian作为基础版本进行开发。 原因非常简单:某些Linux发行版由于受到企业的支持,在当前市场上占据优势地位,但是从供应链保障与国家安全的角度而言,这种发行版作为上游虽然省时省力,但却是将自己的手脚束缚在了美国公司或者其他外国企业的链条上。 Debian则真正属于开源社区,它的开放、透明与无国界是各国选择它最重要的原因。 目前,统信软件已与多国团队达成共识,发展基于Linux开源社区的操作系统,并且要加强各国联合,将走出去和引进来协调好,促使产品具有国际发展能力、软硬件生态的快速建立,使各国操作系统团队更好的服务于本国,同时回馈开源世界。

优秀的个人博客,低调大师

发力IOT、大数据,Apache RocketMQ 构建云时代的新生态

摘要 2018年9月1日,由阿里巴巴中间件举办的RocketMQ开发者沙龙在北京举行。这是RocketMQ今年举办的第二次大型线下技术交流活动,出席技术沙龙的嘉宾包括Apache RocketMQ创始人、OpenMessaging创始人冯嘉、滴滴出行消息团队负责人江海挺、Apache RocketMQ PMC 刘振东、杜恒以及其他commiter和contributor。嘉宾们详尽解读了RocketMQ的使用方式、概念模型、分布式事务等关键机制与原理,深入探讨了RocketMQ在大数据及IOT方面的生态布局、落地实践,并分享了在使用RocketMQ方面的经验以及从Kafka迁移到RocketMQ的具体方案。 Apache RocketMQ Contributor 丁磊和阿里巴巴高级技术专家林佳梁作为主持人开场致辞,介绍了开发者沙龙的日

优秀的个人博客,低调大师

聚焦安防监控,MS4024力助春节平安保障

春节刚过,人们还沉浸在春节欢乐气氛中。这欢乐的背后是许许多多坚守岗位的公安干警,为社会的平安默默守护。而新华三的创新产品,也在努力发挥自己的价值,默默地为平安春节提供助力保障。 除了公安人员的辛勤付出之外,IT技术正在安防保障工作中扮演越来越重要的角色。例如能给百姓带来安全感的监控系统,就可以帮助公安部门更全面高效的掌控各种治安状况,堪称警察叔叔们的“千里眼”。 如果说摄像头是监控系统的“眼睛”,那么监控交换机就是承载整个监控系统视频数据的“脊柱”,一款性能出众、稳定、易于部署的监控网络设备,对于警察叔叔们来说将“如虎添翼”。说到这里,有一款设备十分值得关注,那就是在专业IT网站中关村在线举办的2016年度科技产品大奖评选中,荣获了“优秀产品奖”的新华三MS4024监控交换机。 许多人对这款产品不甚了解,甚至对监控交换机这一品类也比较陌生。实际上,MS系列交换机是不折不扣的以太网交换机设备,而且它是新华三为IP 监控系统自主开发的专用产品。 MS系列监控交换机具备先进的硬件处理能力、丰富的通用业务功能及监控专用特性。其中,作为目前这一“家族”中有代表性的一位,MS4024提供了两个万兆上行光口,在带宽上充分满足监控网络的高要求,尤其是在当前高清监控视频越来越普遍的情况下,MS4024可以更好地保障视频流的通畅,让安防部门能够“一目了然”地掌控现场状况,也更利于各种安保工作的顺利开展。 从传统意义上来说,视频监控系统更偏向于工程应用,网络设备的技术复杂度对于酒店、商场等中小型用户是一个潜在的挑战。考虑到这一点,MS4024专用交换机具备“无管理”的特性,操作简便,即插即用,特别适合网络策略部署简单的高性能监控网络的建设需求,这对于监控系统的系统部署和后期维护都是“福音”。 MS4024还采用了全新的节能芯片以及创新的架构设计,也使得它成为了构建绿色、环保、节能的监控网络、物联网络的理想承载平台。此外,MS4024监控交换机还具有20%的硬件冗余,万兆性能设计,并拥有9KV的端口防雷能力,拥有多重安全防御,全面保护数据安全。 正因为如此之多的优点,MS4024深受好评就不难理解了。企业、商场、酒店、学校……,在安防监控的各种场景中,MS4024都能肩负起重任。借助MS4024的有力支撑,无处不在的监控系统为我们保障了一个平安祥和的春节假期。 本文出处:畅享网 本文来自云栖社区合作伙伴畅享网,了解相关信息可以关注vsharing.com网站。

优秀的个人博客,低调大师

2018年提升物联网影响力的6大趋势

【大咖・来了 第7期】10月24日晚8点观看《智能导购对话机器人实践》 在2016-2017年,物联网的发展趋势得到了广泛的接纳。在2018年,更多的想法和实际的复杂问题将被解决,并上升到其下一层实现。由于设备已经可以数字化表达,因此对它们进行监控变得更加容易,以便实时数据流更接近于相对和可靠。 这是一种快速的趋势,可以通过多年来预测的物联网趋势来实现。 1. 区块链和物联网的混合 区块链是2016年以来***的功能。基于区块链的加密数字货币的惊人胜利,使这项技术成为无缝交易的旗手,从而降低了成本,并消除了对中心数据源的信任。 区块链的工作原理是通过一种安全、加速和透明的模式来增强信任的参与。企业可以通过自动化编码的交易和更快的交易来获益。因此,物联网通道的实时数据可以在这样的交易中被利用,同时保护所有相关各方的隐私。对于物联网来说,安全仍然是首要挑战,而授权区块链的加密过程可以帮助解决。区块链提供了防止数据被盗的安全保障,而这正是物联网网络所需要的设备。 2. 风险资本家会变得更加自信 物联网具有不可否认的影响,并将继续吸引更多的风投投资高度创新的项目。它是少数几个对新兴市场和传统创业投资都有兴趣的市场之一。尽管明年的增长将受到严峻的考验,而真正的潜力尚未被发掘出来,但物联网企业将会比其他所有人都更受青睐。交通、零售、保险和矿业中约有28%的企业确信,向他们的服务模式添加物联网。 3. 愈加依赖大数据分析 物联网的核心是动态数据共享。大数据分析将有助于构建响应性的应用程序。将物联网数据通道与机器学习引擎结合起来,以获取需求分析见解,今年已经初具发展势头,并将在2018年迎来井喷。作为物联网服务供应商,企业必须将他们的创新引导到预测分析的基础上。 随后,对大数据技能的需求将上涨75%,并且在HR系统中使用数据已经开始小试牛刀。尽管大多数物联网服务提供商都强调了这类技术人才的短缺,但与研发密切相关的内部学习项目早已敲响了警钟。 4. 人工智能也将发挥作用 机器学习能力是最被认可的人工智能技术,它可以基于预测思维来计算数据,无需人工编程,也无需在物联网通道中触发实时任务。也就是说,通过从编程指令中激发实时提醒,物联网将会变得智能,捕捉从我们的日常习惯中获得的指令,并为我们执行手工任务。 苹果的“Siri”,甚至自动咖啡。这将使物联网从智能设备到装备齐全的智能家居实现飞跃。具有安全的事务环境的这些精确信息可以进行创新,以提高操作效率和提升客户参与度。 5. 设备将成为一个营销平台 由于将技术融入我们的日常生活中,我们更能接受,基于我们的状态自动推荐更新相关的品牌,在日常生活中,我们会追求更个性化的生活习惯客户数据在这里具有重要的意义,利用它进行个性化营销将继续增长。 我们提供的信息会立即将信息传递到各种营销平台上。例如,汽车服务运营商在他们访问你的驾驶数据后,提供了丰厚的折扣,而保险公司也分享了你的详细信息。 6. 连接设备的数量将会加倍 在过去5年里,物联网项目的快速普及催生了数十亿个互联设备。随着消费者继续沉迷于更多的电子产品,物联网将会爆发。联网设备的数量从2015年的数百万(4.9)增长到2016年的数十亿(6.1)。到2018年,这一比例将至少翻一番,到2021年将达到460亿英镑。 更多的物联网设备将进入这一渠道,比以往任何时候都要多。这是我们对电子产品的直接依赖,这就是我们的未来是如何形成的。 参见:约有三分之二的美国人使用与ios设备连接的设备。 这些趋势的粘合剂 他们的首要任务是窄带物联网(nb-物联网),这是一个低功耗的区域网络,足以满足物联网设备的需求——更小的带宽,更大的连接密度,更低的运营成本和持久的电池寿命。不要错过可穿戴设备,管理资产呈现出更高程度的个性化智能数据共享。 物联网并不止于此!以前人们怀疑过的一系列发明现在终于可以看到曙光了。

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册