首页 文章 精选 留言 我的

精选列表

搜索[首次公开募股],共10002篇文章
优秀的个人博客,低调大师

字节跳动张一鸣近年首次公开露面,称很多人才潜力没有被充分挖掘

10月10日,上海徐汇知春创新中心正式开业,该创新中心由字节跳动创始人张一鸣、上海交通大学ACM班创始人俞勇教授共同发起。作为民办非营利性机构,中心计划招聘对泛计算机和人工智能感兴趣的年轻人。 据了解,本次开业,张一鸣也来到了现场并发言,他提到,自己长期关注人才招聘和培养,注意到很多人才潜力没有被充分挖掘,他以机器学习模型中的过拟合(Overfit)现象作为类比,有的人才可能专业知识扎实,也有高精准的技能,但面对创新任务就不行了。 值得注意的是,余勇作为中国最早的计算机教育布道者,和他的学生林晨曦、戴文渊、胡哲人、李磊、李沐、陈天奇、王敏捷、张伟楠、郑曌等等,共同书写了无数段传奇故事。而这直接推动了此后中国计算机技术的发展,ACM班也在后来被冠以“人工智能CTO摇篮”的盛誉。

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

首次公开!单日600PB的计算力--阿里巴巴EB级大数据平台的进击

作者:阿里巴巴计算平台 高级技术专家 迎辉 MaxCompute作为阿里巴巴的主力计算平台,在2018年的双11中,再次不负众望,经受住了双11期间海量数据和高并发量的考验。为集团的各条业务线提供了强劲的计算力,不愧是为阿里巴巴历年双11输送超级计算力的核武器。 本文为大家介绍,MaxCompute基于多集群部署的几万台服务器,如何为集团急剧增长的业务提供护航和保障。 挑战 每年的双11之前,也是MaxCompute各种乾坤大挪移落定的时候,因为双11就是各种大折腾项目的自然deadline。在今年双11之前,一路向北迁移和在离线混部项目,将杭州集群除蚂蚁外整体迁移到张北,涉及了绝大部分的业务project、数据存储和计算任务,为今年双十一大数据计算服务的保障带来了挑战。 体量 现在MaxCompute包括在离线混部集群在内有几万台服务器,

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

rustms 首次开源发布

rustms 是一款以 rust 开发语言为后端,以 angular 为前端的前后端分离中后台系统模板,包括基础的模块功能:用户管理、菜单管理、部门管理、角色管理模块为基础。主要体现高性能后端+沉浸式用户体验,项目后端程序可以直接托管分离的前端页面,无需单独部署类似的nginx等服务 。 系统架构: 后端:开发语言 rust 1.60, 数据库 postgresql,使用cargo管理后端代码编译。 前端:框架基于 angular 的 devui (ng-devui-admin) 模板。 效果图:

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

为阻止 .org 域名管理权被私募股权公司收购,EFF 发起 SaveDotOrg 运动

据外媒报道,电子前沿基金会(EFF)及Creative Commons、Internet Archive等其他网络机构发起了SaveDotOrg的运动。通过这项运动组织者们希望Internet Society(以下简称ISOC)能够放弃将Public Interest Registry(简称PIR)出售给Ethos Capital的交易。Ethos Capital是位于撒哈拉以南非洲的最大的一家私人股权公司。 目前部分签名支持SaveDotOrg的公司: 这个由EFF牵头的运动组织表示,PIR的出售将影响全球依赖于.ORG顶级域名(TLD)的非政府组织。在PIR的交易中,可以看到未经ICANN或.ORG社区批准的.ORG注册费正在增加。EFF指出,许多非政府组织在资金问题上陷入困境,许多组织可能被迫支付更高的费用,或失去.ORG域名带来的合法性。 EFF担心,Ethos Capital可能会单方面实施Rights Protection Mechanisms(维权机制),而这会导致审查合法非营利性活动的结束。此外,新买家还可以根据违反适用法律的行为的指控增加暂停域名的程序,这在EFF看来是不应该实施的。 最后,EFF指出,ISOC曾在2002年提议将.ORG的管理权移交给PIR时承诺将利用ISOC扩展的全球网络的资源来推动政策和管理。而现在ISOC出售PIR的做法在EFF看来无疑是对近20年前所做出承诺的一种背叛。 来自:cnBeta

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

外部的公开简介

叶伟先生现任阿里软件研发中心总监,于复旦大学获计算机科学学士、硕士学位;93年获高级程序员,2000年被评为高级工程师。 叶伟先生有着15年软件开发经验,专长面向对象分析、设计,及 SaaS架构设计。《互联网时代的软件革命—SaaS架构设计》一书的主要作者。 曾担任金仕达卫宁的首席技术官、IBM中国的OO Architect、金蝶软件Lead Architect等职务;在SaaS、ERP、HIS领域领导开发了多个成功的商业产品。 本文转自DavyYew 51CTO博客,原文链接:http://blog.51cto.com/davyyew/241439 ,如需转载请自行联系原作者

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

Apidev 1.0.3 首次上线发布

APIDev是一个专注于API开发和管理的平台,旨在为开发者提供高效的API解决方案和工具。 无论你是经验丰富的资深开发者,还是初涉 API 领域的新手,APIDev 都能成为你不可或缺的得力助手,助力你在 API 开发与管理的道路上一路驰骋。 官网:https://apidev.cn 一、安装 1、Maven 依赖 在项目中的pom.xml文件添加以下Maven坐标: <dependency> <groupId>cn.apidev</groupId> <artifactId>apidev</artifactId> <version>1.0.3</version> </dependency> 2、创建数据库表:apidev_api MySQL: CREATETABLE`apidev_api`( `id`varchar(64)CHARACTERSETutf8COLLATEutf8_general_ciNOTNULLCOMMENT'主键', `action_key`varchar(500)CHARACTERSETutf8DEFAULTNULLCOMMENT'接口路径', `description`varchar(255)CHARACTERSETutf8DEFAULTNULLCOMMENT'接口描述', `controller`varchar(255)CHARACTERSETutf8DEFAULTNULLCOMMENT'控制器', `remark`varchar(255)CHARACTERSETutf8DEFAULTNULLCOMMENT'备注', `title`varchar(255)CHARACTERSETutf8DEFAULTNULLCOMMENT'接口标题', `request_url`varchar(500)CHARACTERSETutf8DEFAULTNULLCOMMENT'请求路径', `request_mode`varchar(50)CHARACTERSETutf8DEFAULTNULLCOMMENT'请求方式', `request_headers`varchar(2000)CHARACTERSETutf8DEFAULTNULLCOMMENT'请求Headers参数', `request_body_type`varchar(50)CHARACTERSETutf8DEFAULTNULLCOMMENT'请求的bodyType类型', `request_param`varchar(2000)CHARACTERSETutf8DEFAULTNULLCOMMENT'请求query参数', `request_param_explain`longtextCHARACTERSETutf8COMMENT'请求query参数说明', `request_path_explain`longtextCHARACTERSETutf8COMMENT'请求Path参数说明', `request_result`longtextCHARACTERSETutf8COMMENT'请求结果,保存最新记录', `request_body`longtextCHARACTERSETutf8COMMENT'请求body参数', `request_body_explain`longtextCHARACTERSETutf8COMMENT'请求body参数说明', `request_form_data`longtextCHARACTERSETutf8COMMENT'请求form-data的参数', `success_demo`longtextCHARACTERSETutf8COMMENT'请求成功返回示例', `success_demo_explain`longtextCHARACTERSETutf8COMMENT'请求成功返回示例参数说明', `failuer_demo`longtextCHARACTERSETutf8COMMENT'请求失败返回示例', `failuer_demo_explain`longtextCHARACTERSETutf8COMMENT'请求失败返回示例参数说明', `request_remark`varchar(255)CHARACTERSETutf8DEFAULTNULLCOMMENT'请求接口文档备注', `interface_status`varchar(50)CHARACTERSETutf8DEFAULTNULLCOMMENT'接口状态', `response_headers`longtextCHARACTERSETutf8COMMENT'响应头', `response_definition`longtextCHARACTERSETutf8COMMENT'响应定义', `response_demo`longtextCHARACTERSETutf8COMMENT'响应用例', `sort`intNULLDEFAULT1COMMENT'排序', `create_by`varchar(100)CHARACTERSETutf8DEFAULTNULLCOMMENT'创建人', `create_time`datetimeNULLDEFAULTNULLCOMMENT'创建时间', `update_by`varchar(100)CHARACTERSETutf8DEFAULTNULLCOMMENT'修改人', `update_time`datetimeNULLDEFAULTNULLCOMMENT'最新修改时间', `type`varchar(255)CHARACTERSETutf8DEFAULTNULLCOMMENT'menu:目录,api:接口,demo:用例,link:快捷请求', `parent_id`varchar(64)CHARACTERSETutf8DEFAULT'-1'COMMENT'父级id(1:是接口根目录,2:是快捷请求根目录)', `del`intNULLDEFAULT0COMMENT'0:恢复正常状态,1:标记已删除,显示在回收站,2:标记下级数据被删除,不显示回收站', `visible`intNULLDEFAULT1COMMENT'接口是否可见(0:不可见,1:可见)', `share_id`varchar(255)CHARACTERSETutf8DEFAULTNULLCOMMENT'分享id', `password`varchar(100)CHARACTERSETutf8DEFAULTNULLCOMMENT'访问密码', `expiret_time`dateNULLDEFAULTNULLCOMMENT'访问过期时间', PRIMARYKEY(`id`)USINGBTREE )ENGINE=InnoDBCHARACTERSET=utf8COMMENT='Apidev接口'ROW_FORMAT=DYNAMIC; 二、其他安装步骤 JFinal项目配置步骤,在JFinalConfig主配置类的对应方法配置代码如下: 1、配置APIDev路由: publicvoidconfigRoute(Routesme){ ... //添加Apidev前端路由 ApidevKit.configRoute(me); } 2、配置APIDev模板引擎: publicvoidconfigEngine(Engineme){ //配置APIDev模板资源目录,这行代码必须放在方法的最前面 ApidevKit.configEngine(me); ... } 3、onStart打印APIDev信息: publicvoidonStart(){ //打印APIDev配置想信息 ApidevKit.onStart(); } 4、在undertow.txt添加以下配置项: #处理类转换异常问题 undertow.hotSwapClassPrefix=cn.apidev #配置jar的资源目录 undertow.resourcePath=src/main/webapp,classpath:webapp 5、将您自己项目的前端文件由原来的src/main/webapp目录转移到src/main/resource目录下面,文件夹名称为webapp: src/main/resources -webapp 6、在项目数据库创建数据库表:apidev_api 7、可选配置项:在您项目的配置文件加上下面配置项即可: #1、Apidev路由配置,默认是/apidev apidev.actionKey=/apidev #2、生产环境可以关闭apidev服务 apidev.stop=true 8、启动项目: APIDev启动成功会打印出如下信息,访问路由:http://{项目地址}/apidev APIDevServerInfo: >Start:true >Version:1.0.3 >ActionKey:/apidev SpringBoot项目配置步骤: 1、 在启动类加上扫描目录:cn.apidev,Demo如下: @SpringBootApplication(scanBasePackages={"com.qinhailin","cn.apidev"}) @EnableTransactionManagement @EnableScheduling @Slf4j publicclassApidevApplicationextendsSpringBootServletInitializer{ publicstaticvoidmain(String[]args){ try{ SpringApplication.run(ApidevApplication.class,args); }catch(Throwablethrowable){ log.error("系统异常关闭",throwable); } } } 2、yml配置数据库信息:spring.datasource.url,spring.datasource.username,spring.datasource.password spring: datasource: url:jdbc:mysql://localhost:3306/apidev username:root password:root 3、正常启动SpringBoot项目,APIDev启动成功会打印出如下信息,访问路由:http://{项目地址}/apidev APIDevServerInfo: >Start:true >Version:1.0.3 >ActionKey:/apidev 4、可选配置项:需要在src/main/resource目录下创建apidev-config.txt文件,然后添加如下配置项: #1、Apidev路由配置,默认是/apidev apidev.actionKey=/apidev #2、生产环境可以关闭apidev服务 apidev.stop=true 三、界面效果图 1、APIDev管理首页,默认地址:http://localhost/apidev/ 暗黑主题 明亮主题 2、同步接口 3、目录管理页 目录接口管理页 新增目录 目录分享设置 4、接口管理页 接口调试界面 目录树功能菜单 响应示例 接口文档 接口说明信息 5、分享链接 复制链接 分享地址界面 导出文档 6、回收站

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

公开互撕!OpenAI 公开与马斯克 8 年邮件截图

OpenAI 今天在官网发布新闻稿,回应埃隆·马斯克起诉一事。 该文章由 Sam Altman、Greg Brockman、Ilya Sutskever等人共同署名。文章表示,OpenAI 打算驳回埃隆·马斯克的所有诉讼请求,并公布了一些高层和埃隆·马斯克的历史往来邮件作为证据。 以下为新闻稿原文翻译: OpenAI 的使命是确保 AGI 造福全人类,这意味着既要构建安全有益的 AGI,又要帮助人类创造收益。现在,我们将与大家分享我们在完成使命方面的心得,以及我们与埃隆之间关系的一些事实情况。 我们正打算驳回埃隆的所有诉讼请求。 我们意识到,构建 AGI 所需的资源远远超出我们最初的想象 埃隆说,我们应该布向 OpenAI 提供 10 亿美元的初始资金承诺。实际上,这家非营利组织总共从埃隆那里筹集了不到 4500 万美元,从其他捐赠者那里筹集了 9000 多万美元。 在 2015 年底创办 OpenAI 时,格雷格和萨姆最初计划筹集 1 亿美元。但是埃隆在一封电子邮件中表示“我们需要一个比 1 亿美元大得多的数字,以免让人听起来觉得毫无希望……我认为我们应该从 10 亿美元的资金承诺开始.如果其他人不提供的,我会承担。“ [1] 我们花了很多时间来设想通往 AGI 的合理路径。2017 年初,我们意识到构建 AGI 需要大量的计算。我们开始计算 AGI 可能需要多少计算量。我们都明白,要想成功完成使命,我们将需要更多的资金--这将达到每年数十亿美元,远远超出了我们任何人的想象,尤其是埃隆,他认为我们作为非营利组织无法筹集到这么多资金。 我们和埃隆都认识到,要获得这些资源,就必须建立一个营利实体。 在我们讨论营利性结构以推进使命时,埃隆希望我们与特斯拉合并,否则他需要获得全部的控制权。这之后埃隆离开了 OpenAI,他说需要有一个与谷歌/DeepMind 相对应的竞争对手,而他打算自己来做这件事。他同事表示,他会支持我们找到自己的道路。 2017 年底,我们和埃隆决定下一步的任务是创建一个营利实体。埃隆希望获得多数股权以及最初的董事会控制权,并担任首席执行官。在这些讨论中,他扣留了资金。Reid Hoffman填补了资金缺口,为我们支付了工资和运营费用。 我们无法就营利性公司的条款与埃隆达成一致,因为我们认为任何个人对 OpenAI 拥有绝对控制权都有悖于公司的使命。于是,他建议将 OpenAI 并入特斯拉。2018 年 2 月初,埃隆给我们转发了一封邮件,建议 OpenAI “依附于特斯拉,将其作为自己的资金来源“,并评论说 “完全正确……特斯拉是唯一一条甚至有望与谷歌相提并论的道路。即便如此,与谷歌抗衡的可能性也很小。但并不是零”。[2] 埃隆很快选择离开 OpenAI,他说我们的成功概率为 0,他计划在特斯拉内部建立一个 AGI团队与我们竞争。他在 2018 年 2 月底离开时告诉我们,他支持我们自己寻找筹集数十亿美元的道路。2018 年 12 月,埃隆给我们发邮件说:“即使筹集到几亿美元也不够。这需要每年筹集数十亿美元,否则就算了。“ [3] 我们通过构建可广泛使用的有益工具来推进我们的使命 我们通过开源等方式,使我们的技术能够广泛使用,从而提高人们的效率,改善他们的日常生活。 我们向大众提供了当今最强大的人工智能,包括每天有数亿人使用的免费版本。举个例子,阿尔巴尼亚正在使用 OpenAI 的工具将其加入欧盟的时间加快了 5.5 年;数字绿色公司正在帮助肯尼亚和印度提高农民收入,通过在 OpenAI 的基础上将农业推广服务的成本降低 100 倍;罗德岛州最大的医疗保健提供商 Lifespan 使用 GPT-4 将其手术同意书从大学阅读水平简化到六年级水平;而冰岛正在使用 GPT-4 保护越来越少人使用的冰岛语。 埃隆明白,这些工作并不意味着开源 AGI。正如伊利亚告诉埃隆的那样 “随着我们越来越接近AGI,开始降低开放程度是有意义的。OpenAI 中的 “开放 “是指人工智能建成后,每个人都应从人工智能的成果中受益,但不分享科学成果也完全没问题……",埃隆回答道: “是的”。[4] 对于埃隆的起诉,我们倍感遗憾。我们深深钦佩的一个人走到了这一步。他曾激励我们向更高的目标迈进,然后告诉我们会失败,建立了一个竞争对手团队,而当我们开始在没有他的情况下朝着 OpenAI 的使命取得有意义的进展时,他又将我们告上法庭。 我们专注于推进自己的使命,这还有很长的路要走。我们相信随着我们的产品越来越好,他们将更好地为每个人赋权。 以下为往来邮件翻译: [1] 发件人 埃隆-马斯克 收件人 格雷格-布罗克曼 抄送: Sam Altman Date: Sun, Nov 22, 2015 at 7:48 PM 主题: 通话后续 博客听起来不错,但要考虑到中立性和以青委会为中心。 我更倾向于将博客定位为更吸引普通大众--让大众支持我们取得成功有很大的价值--然后为招聘工作准备一个更长、更详细、更有内幕的版本,并在普通大众版本的末尾提供链接。 我们需要一个比 1 亿美元大得多的数字,以避免与谷歌或 Facebook 的支出相比显得毫无希望。我认为我们应该说,我们将从 10 亿美元的资金承诺开始。这是真的。其他人不提供的,我都会提供。 模板看起来还不错,除了默认转为归属现金红利外,还可以选择将其转为 YC 或 SpaceX(需要了解具体数额)的股票。 [2] 发件人 埃隆-马斯克 收件人 Ilya Sutskever 、Greg Brockman Date: 2018年2月1日 星期四 凌晨3:52 主题 Fwd: 今天的顶级人工智能机构 说得一点没错。我们或许希望如此,但在我看来,特斯拉是唯一能与谷歌抗衡的公司。即便如此,与谷歌抗衡的可能性也很小,但也不是零。 开始转发信息: 发件人: <> 致 埃隆-马斯克 <> 日期 太平洋标准时间 2018 年 1 月 31 日下午 11:54:30 主题 Re: 当今顶尖的人工智能机构 不幸的是,在人工智能的最前沿工作是昂贵的。除了 DeepMind,谷歌还有 Google Brain、Research 和 Cloud。还有 TensorFlow、TPU,它们拥有大约三分之一的研究成果(事实上,它们还举办自己的人工智能会议)。 我还强烈怀疑,要实现 AGI,计算能力将是必要的。如果历史趋势能够说明问题,那么人工智能的进步主要是由系统--计算、数据、基础设施--驱动的。我们今天使用的核心算法与上世纪 90 年代相比基本没有变化。不仅如此,任何发表在论文中的算法进展几乎都可以立即被重新实现和整合。反过来说,如果没有一定的规模,单靠算法的进步是没有生命力的。 在我看来,如今的 OpenAI 正在烧钱,其融资模式无法达到与谷歌(一家 8000 亿美元的公司)认真竞争的规模。如果你无法与谷歌认真竞争,却继续在开放环境中进行研究,那么你可能会让事情变得更糟,并 “免费 “帮助他们,因为他们很容易复制任何进步,并立即将其规模化。 以营利为目的的转型可能会随着时间的推移创造出更稳定的收入来源,而就目前的团队而言,很可能会带来大量投资。然而,从零开始打造产品会抢走人工智能研究的重点,而且需要很长时间,目前还不清楚一家公司能否 “赶上 “谷歌的规模,投资者也可能会在错误的方向上施加过多压力。我所能想到的最有希望的方案,正如我之前提到的,就是让 OpenAI 附属于特斯拉,将其作为自己的资金来源。我认为,依附于其他大型公司(如苹果、亚马逊),会因公司基因不兼容而失败。打个比方,特斯拉已经建造了火箭的 “第一级“,包括 Model 3 的整个供应链、车载电脑和持续的互联网连接。第二阶段 “将是基于大规模神经网络训练的完全自动驾驶解决方案,OpenAI 的专业技术可以大大帮助加快这一进程。在大约 2-3 年的时间里,我们就能推出功能完善的完全自动驾驶解决方案,销售大量汽车/卡车。如果我们真的做得很好,运输行业的规模足够大,我们可以将特斯拉的市值提高到 O(约 10 万美金),并利用这笔收入为适当规模的人工智能工作提供资金。 我看不到有任何其他公司有潜力在十年内达到可持续的谷歌规模资本。 [3] 发件人 埃隆-马斯克 收件人 Ilya Sutskever 、Greg Brockman 抄送: Sam Altman Date: Wed, Dec 26, 2018 at 12:07 PM 主题: 我觉得我应该重申 在执行和资源没有发生巨大变化的情况下,我对 OpenAI 与 DeepMind/Google 相关性的概率评估是 0%。而不是 1%。我希望不是这样。 即使筹集到几亿美元也不够。这需要每年立即筹集数十亿美元,否则就算了。 不幸的是,人类的未来掌握在【未透露名称】手中。 他们所做的远不止这些。 我真希望我错了。 埃隆 【4】 Fwd: 恭喜猎鹰 9 包含3 条信息 发件人 Elon Musk 收件人 Sam Altman、Ilya Sutskever、 Greg Brockman 日期 Sat, Jan 2, 2016 at 8:18 AM 主题 收件人: 恭喜猎鹰 9 号 开始转发消息: From:未透露姓名 To: 埃隆-马斯克 日期: 美国中部时间 2016 年 1 月 2 日上午 10:12:32 主题: 恭喜猎鹰 9 号 嗨,埃隆 祝你新年快乐, 首先祝贺猎鹰 9 号着陆,这是一项了不起的成就。现在是时候组建舰队了! 我看到你(还有萨姆和其他 OpenAI 人士)最近接受了很多采访,大肆宣扬人工智能开源的优点,但我想你应该意识到,这并不是某种能神奇地解决安全问题的灵丹妙药吧?有很多很好的论据可以说明,为什么你所采取的方法实际上是非常危险的,事实上可能会增加世界的风险。在这篇博文中,一些比较明显的观点得到了很好地阐述,我相信你已经看到了,但还有其他一些重要的考虑因素: http://slatestarcodex.com/2015/12/17/should-ai-be-open/ 我很想听听你对这些观点的反驳。 发件人 Ilya Sutskever 致 Elon Musk 、Sam Altman、 Greg Brockman 日期 Sat, Jan 2, 2016 at 9:06 AM 主题 Fwd: 恭喜猎鹰9号 这篇文章关注的是 “硬起飞 “ 如果发生 “硬起飞“,而安全的人工智能比不安全的人工智能更难构建,那么通过开放一切,我们就会让那些能够获得大量硬件的不法分子轻而易举地构建出不安全的人工智能,从而遭遇 “硬起飞”。 当我们越来越接近构建人工智能时,开始降低开放程度将变得更有意义。openAI 中的 “开放 “意味着,在人工智能建成后,每个人都应从人工智能的成果中获益,但不分享科学知识也是完全可以的(尽管在短期和中期内,为了招聘的目的,分享一切绝对是正确的策略)。 来自 埃隆-马斯克 收件人 Ilya Sutskever 日期 Sat, Jan 2, 2016 at 9:11 AM 主题 Fwd: 恭喜猎鹰9号 是的

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

elementary OS 6 发布首次更新

8 月初,elementary OS 6 重大更新版本正式发布。官方表示截至 8 月底,elementary OS 6 的下载次数超过了 75000 次,并在上周提供了第一批修复和功能更新。 更新内容主要包括: App Center 提供了更多兼容的应用 如果没有搜索结果,App Center 会显示指向 Flathub 的链接 Online Accounts功能提供了更好的 IMAP 帐户支持 支持在 Online Accounts 中编辑帐户 邮件应用程序不再要求保存空草稿 Tasks应用程序现在已经是.deb类型应用 在 Setup 工具中可更方便地设置设备名称 支持在面板中选择显示/隐藏电池百分比 系统页面提供关于某些显卡芯片组的更多信息 除上述内容,新版本还修复了多项错误: 修复从睡眠状态恢复运行时导致的问题 修复在文件应用程序侧边栏重命名文件时出现的奇怪状况 修复系统不更新 GRUB 启动加载器,导致无法显示较新内核的问题 详细更新内容和升级教程查看发布公告。

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

Poco节点关系大公开!

👆对私有云感兴趣可以进入公众号回复“私有云”哦。 一、前言 在自动化测试的实践中,我们发现许多同学在使用Poco框架进行控件定位时,对于节点之间的关系理解不够深入。那么本周让我们来详细讲解Poco框架中的 child&children 、 offspring 、 sibling 和 parent 等节点关系定位方法。 二、Poco定位节点的关系分析 2.1 child&children 从字面上看,可以很明显知道 child 与 children 表示的就是获取该节点下的子节点。如果是需要获取多个子节点,需要通过for去循环提取,不通过循环获取的话,默认都是提取第一个节点,但顺序编号从0开始。 其中child可以携带参数,可以获取指定的子节点,如: poco("android.widget.FrameLayout").child("android.widget.LinearLayout") 但 children 是不能携带参数的,是可以直接获取所有的子节点,但可以根据返回的子节点顺序进行指定,默认返回的是提取的第一个节点(顺序编号从0开始)如: poco("android.widget.FrameLayout").children()[2] 2.2 offspring offspring 是获取该节点的子孙节点,若需要输出多个子孙节点,使用 for 循环去进行输出,默认输出为首个子孙节点。在使用过程中,如果不清楚自己所需节点的编号为多少,我们可以选择用 for 输出后,按照顺序编号进行选择使用。 poco("com.netease.cloudmusic:id/bannerContainer").offspring() 可以根据输出的顺序,结合下图,其中下述语句表达为“每日推荐”控件: poco("com.netease.cloudmusic:id/portal_rv").offspring()[10] 也可以在 offspring 括号内指定自己所需要的子孙节点,如: poco("com.netease.cloudmusic:id/portal_rv").offspring("com.netease.cloudmusic:id/portalTitle") 上述语句同样表示为“每日推荐”控件。这样有个好处就是,当有多个相同name的控件但存在不同name的上层节点时,可以很好地区分每个控件。 2.3 sibling siblings 表示获取当前节点的兄弟节点,即与当前节点处于同一层级的其他节点。若需要输出多个兄弟节点,使用 for 循环进行输出,默认输出为首个兄弟节点。 poco("com.netease.cloudmusic:id/biFl").sibling() 如下图,可以看到该节点下返回的兄弟节点与UI树相匹配: 同样, sibling 也是可以根据循环获取输出的顺序进行指定的,如: poco("com.netease.cloudmusic:id/biFl").sibling()[3] 2.4 parent 在poco中,parent表示获取当前节点的父节点。如果需要获取整个节点集合的父节点,需要找到节点集合的第一个节点。如果需要获取多层父节点,可以通过 .parent() 方法进行逐级获取。 例如,对于一个节点A,它的父节点是B,B的父节点是C,那么可以通过 A.parent().parent() 来获取到节点C。 poco("com.android.systemui:id/status_bar_contents").parent() 综上所述,如果需要获取该界面的所有节点,可以通过 .parent() 或 .children() 等方法互相结合来获取其他层级中的所有节点,然后再通过遍历筛选出除了当前节点外的其他节点。 在开源群内,有一些同学也问过如何统计UI树某层或某控件的个数,我们可以通过上述的节点关系,结合python已有的len()函数,或使用 for 循环累加的方式去获取的。如: #【利用子孙节点关系定位元素】统计输出热歌榜当前界面中歌曲数量num=len(poco("com.netease.cloudmusic:id/musicInfoList").offspring(nameMatches="com.*?songName")) print("当前界面有{}首歌".format(num))#【利用子节点关系定位元素】统计输出当前界面的热门节目单数量num=0for x in poco("CollectionView").child("UIA.Podcasts.ShelfItem.show"): print(x.child().child().get_name()) num+=1 三、Android上的案例 了解完Poco节点关系的具体用法后,我们可以尝试在日常跑测中使用节点关系,让我们来看一下在Android上的一个使用案例吧。 参考代码如下: 可以看到,我们通过节点关系可以获取到它的父节点、兄弟节点、子孙节点等,并可以对其进行点击、统计、输出信息等操作。 # -*- encoding=utf8 -*-__author__ = "Airtest"from airtest.core.api import *auto_setup(__file__)from poco.drivers.android.uiautomation import AndroidUiautomationPocopoco = AndroidUiautomationPoco(use_airtest_input=True, screenshot_each_action=False)#打开网易云音乐start_app("com.netease.cloudmusic")sleep(7.0)#【利用子孙节点关系寻找元素】通过输出子孙节点去查找“发现”按钮for i in poco("com.netease.cloudmusic:id/bottomNav").offspring(nameMatches="com.*?desc"): print(i.get_text())#【利用子孙节点关系以及空间顺序定位元素】点击"发现"按钮poco("com.netease.cloudmusic:id/bottomNav").offspring(nameMatches="com.*?desc")[1].click()sleep(1.0)#【通过兄弟节点关系定位元素】点击发现页中“精选”旁边的“排行榜”按键poco("精选").sibling()[1].click()sleep(1.0)#点击热歌榜poco(text="热歌榜").click()#【利用子孙节点关系寻找元素】输出热歌榜中每首歌的名字print("当前界面的热歌榜歌曲有:")for i in poco("com.netease.cloudmusic:id/musicInfoList").offspring(nameMatches="com.*?songName"): print(i.get_text()) #【利用子孙节点关系定位元素】统计输出热歌榜当前界面中歌曲数量num=len(poco("com.netease.cloudmusic:id/musicInfoList").offspring(nameMatches="com.*?songName")) print("当前界面有{}首歌".format(num)) #【利用子节点关系定位元素】输出目前播放器在播放的歌曲名print("下方为正在播放的歌曲:") now_song = poco("com.netease.cloudmusic:id/minibar_song_container").child().children() print(now_song.get_text()) 四、iOS上的案例 日常使用中可以发现,在iOS上获取对应的UI树控件比较困难,但是可以通过Poco节点关系的方法,更大程度地去寻找到自己想要获取的控件或ui树节点。 参考代码如下: # -*- encoding=utf8 -*-__author__ = "Airtest"from airtest.core.api import *auto_setup(__file__)from poco.drivers.ios import iosPocopoco = iosPoco()#打开播客apppoco("播客").click()#【利用子节点关系定位元素】输出该界面的信息,点击选择查看热门节目for i in poco("CollectionView").child(): print(i.get_name())#【利用子节点关系结合子孙节点关系定位元素】点击进入热门节目界面 poco("CollectionView").child("热门节目").offspring("查看全部").click()#【利用子节点关系定位元素】输出当前界面的热门节目单num=0print("当前热门节目单有:")for x in poco("CollectionView").child("UIA.Podcasts.ShelfItem.show"): print(x.child().child().get_name()) num+=1#【通过循环累计获取节点个数】输出当前界面的热门节目数量print("当前界面有{}个节目".format(num)) #【利用父节点关系结合子节点关系定位元素】点击播放键进入播放界面poco("MiniPlayerArtworkVisible").parent().child()[2].child()[0].click()#【利用兄弟节点关系定位元素】点击播放键进行播放poco("倒回,15秒钟").sibling()[1].click() 五、小结 本周我们介绍了Poco节点关系: 1、 child&children 获取子节点 2、 offspring 获取子孙节点 3、 sibling 获取兄弟节点 4、 parent 获取父节点 通过深入理解 child&children 、 offspring 、 sibling 和 parent 这些节点关系,我们能够更加精确和高效地定位到UI树中的各个节点。 如果同学们在使用Poco进行自动化测试的过程中,遇到了问题,或者有任何想要深入了解的知识点,欢迎在官方交流群里告诉我们或者提交issue,也欢迎大家投稿。后续我们会带来更多精彩的有关Poco专题内容,请大家持续关注我们,敬请期待哦! (猜你还想看 ) ▼ 如何用覆盖函数的方式,实现你自己的touch? 遇到时间控件怎么办?不要慌,教你轻松拿下 摸鱼小技巧来啦,速来围观 本文分享自微信公众号 - AirtestProject(AirtestProject)。 如有侵权,请联系 support@oschina.cn 删除。 本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

资源下载

更多资源
腾讯云软件源

腾讯云软件源

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

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

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

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

用户登录
用户注册