草庐IT

巴延兴:从主导多个SIG组到OpenHarmony“代码贡献之星”,我是如何做到的?

openharmony 2023-03-28 原文

编者按:在 OpenHarmony 生态发展过程中,涌现了大批优秀的代码贡献者,本专题旨在表彰贡献、分享经验,文中内容来自嘉宾访谈,不代表 OpenHarmony 工作委员会观点。

 

巴延兴
深圳开鸿数字产业发展有限公司
资深OS框架开发工程师

 

开源软件(以下简称“开源”)于上世纪80年代应运而生,随后惠及全球。如今,开源技术支撑了 90% 以上的互联网产品,并已经深入到各行业的商业应用中。2021 年,我国首次将“开源”明确列入《中华人民共和国国民经济和社会发展第十四个五年规划和 2035 年远景目标纲要》。虽然我国开源建设起步相对较晚,但国家在战略层已经开始给予了开源的肯定和支持。目前,开源已成为全球软件技术和产业创新的主导模式。

 

作为开放原子开源基金会的白金捐赠人、OpenAtom OpenHarmony(以下简称“OpenHarmony”)B 类捐赠人,深开鸿核心技术团队完整地继承了前期 OpenHarmony 业务技术积累,以共建共治共享的开源精神,以成为智能物联网操作系统领军者为战略目标,基于 OpenHarmony 聚焦智能物联网操作系统(KaihongOS)的技术研发与持续创新。致力于构建多赢的物联网操作系统生态圈,持续拓宽行业边界,实现万物互联。

 

作为资深 OS 框架开发工程师,巴延兴负责整体技术规划、项目看护、成果交付以及与社区的沟通协调;辅助工具 SIG 的申请成立、SIG 的孵化以及毕业流程的推进工作。其中,辅助工具 SIG 包括 NAPI 框架生成工具、开机动画工具、IDL 转换工具等一系列工具。

 

他常说,在这个世上,没有从天而降的好运和奇迹,机会只留给有准备的人。巴延兴抓住机遇,全力拥抱开源时代,在开源软件的基础上,为企业提供安全、稳定的企业级开源软件,并将代码百分之百回馈给社区。十年如一日对工作极致负责的他,用专业汇聚能量,目前共计带领团队主导 4 个 SIG、参与 12 个 SIG 的代码贡献,累计向主干贡献代码 30W+ 行。

 

此次我们邀请了深开鸿巴延兴前来参加访谈,希望通过他的视角,带我们更加全面地了解深开鸿团队背后的故事。

 

Q=OpenHarmony A=巴延兴

 

Q1:可以介绍下自己以及所在开发团队吗?

 

大家好,我是巴延兴,是深圳开鸿数字产业发展有限公司资深OS框架开发工程师。从业以来,我一直深耕终端设备的研发领域,拥有十多年的移动系统开发经验,去年有幸加入深开鸿南京研发团队,希望为操作系统发展贡献绵薄之力。

 

深开鸿团队一方面承担着公司 KaihongOS(OpenHarmony 商业发行版之一)的研发任务,另一方面积极地、大颗粒地、全方位地面向 OpenHarmony 社区进行开源贡献。

 

Q2:作为开发领域技术达人,请问哪些原因让您决定参与OpenHarmony的社区贡献?

 

随着 5G 时代的到来,数字化升级、万物互联、人机物融合等需求越来越旺盛,“开源”首次被明确列入《中华人民共和国国民经济和社会发展第十四个五年规划和 2035 年远景目标纲要》。作为互通互联生态架构基座的操作系统,OpenHarmony 应运而生。

 

深开鸿技术团队从 OpenHarmony 开源项目成立伊始就与  OpenHarmony 工作组展开了深度合作,是业内首批对 OpenHarmony 在产业上的应用及赋能进行深入研究的公司。我认为未来的市场将出现移动端操作系统高速发展的窗口期,因此,当我得知有深开鸿这样一家以 OpenHarmony 为技术底座的操作系统发行版公司诞生的时候,我便毫不犹豫地加入了。

 

自参与 OpenHarmony 社区共建以来,我深度参与了代码共建的工作,结合多年来在系统内核、系统安全、网络通信、多媒体及 AI 等技术领域的积累,主导多个 SIG 组的形式持续向社区贡献高质量代码,不断夯实  OpenHarmony 的基础能力,加速推进 OpenHarmony 生态建设。

 

Q3:恭喜您获得2月代码贡献之星,非常了不起,可以说说您在社区具体做了哪些代码贡献,获得哪些成果吗?

 

去年 6 月,深开鸿开始参与 RISC-V SIG,从芯片适配开始,再到承接 Driver SIG 的音视频硬编解码 HDF 框架实现的任务。随着开源经验的积累,团队也汇聚了各领域的技术专家。因此,深开鸿在 2021 年 9 月份正式主导了第一个 SIG 组——AI 框架集成 SIG 组。

 

在这过程中,我参与了需求分析、架构设计、代码框架搭建以及代码评审、入库等研发全流程;基于 RockChip Toybrick 3568x 实现了 HDF 框架开发;基于瑞芯微的 MPP 框架提供的 MppBuffer、MppBufferGroup 以及 packet 和 frame 相关的组件和接口,结合 Buffer 队列,共享内存等机制,实现了硬件编解码流程,并完成了相关的编解码演示程序和单元测试程序;基于 HJSUnit 测试框架,使用 JavaScript 语言编写 JS 全组件属性、样式、事件、方法等测试脚本;以上相关代码都已合入主干。

 

伴随研发团队规模逐渐扩大,团队能力逐渐提升,可参与主导或共建的技术领域也越来越多——辅助工具、软总线、多媒体、内核等项目都有深开鸿团队的身影,慢慢呈现了“遍地开花”的趋势,也看到我们的成果帮助了更多的开发者,真正感受到了生态的繁荣。

 

到目前为止,深开鸿主导了 4 个 SIG,参与共建的 SIG 有 12 个,尤其是内核、软总线、HDF、ArkUI 等根技术领域都有深度参与,累计向主干贡献代码 30W+ 行。

 

Q4:可以请您给我们分享一下,在整个开发的过程中,您和您的团队遇到过哪些技术上或其他方面的难题?这些难题又是如何被逐一解决的?从中总结了哪些经验呢?

 

我们在内核开发过程中遇到不少难题,比如内核支持的单板种类有限、Hi3861 开发板内核固化、编译环境搭建复杂等问题都加剧了进入内核研发的难度。面对这些困难,我们在探索过程中也摸索出了一套方法。

 

首先,我们利用仿真技术解决单板有限的问题,其次利用 Q/A 的方式将每一步都记录下来,输出技术文档,夯实每一步的脚印。对新技术保持一颗好奇心是每一个内核开发人员必备的素养,这样的心态促使我们不断攻坚克难。

 

目前内核开发工作还处于初级阶段,取得了初步的成果,但我们还会继续进行研发投入,在这过程中,不仅能提高我们自身的技术能力,而且还能增强公司的技术储备,促成良性循环。

 

Q5:加入OpenHarmony生态以来,深开鸿在社区的开源贡献方面取得了不小的成果,您认为“秘诀”都有哪些呢?

 

如果非要说有什么“秘诀”的话,那就是深开鸿始终坚持从开源中来,到开源中去的开源理念,结合 OpenHarmony 系统特性以及行业应用对操作系统的需求,推出具备行业共性的 KaihongOS 商业发行版,在满足客户需求的同时,也将沉淀下来的技术能力及行业实践回馈给社区。

 

除了主干代码贡献,我们在三方库、知识体系工作组、兼容性工作组、基础服务、开发板等方向也同时发力,多维度地、多层次地进行开源贡献。同时,我们的贡献也得到了社区的认可,深开鸿已正式成为兼容性工作组的第一家扩展成员的单位。

 

Q6:您最想吐槽OpenHarmony哪些方面?对未来的OpenHarmony有什么期望?

 

OpenHarmony 目前处在起步阶段,很多事物尚未成熟,比如系统能力还有待增强;应用生态不够丰富;开发文档不够齐全,开发者入门门槛高等问题都亟待解决,这就需要有更多的技术精英、行业大咖参与 OpenHarmony 社区共建。至于对未来的期望,自然是希望它能够蓬勃发展,向当今主流的开源生态看齐甚至超越。

 

Q7:未来深开鸿还会做哪些事情?朝哪个方向努力?

 

作为 OpenHarmony 开源项目的共建单位之一,深开鸿有责任、有义务、更有能力持续完善 OpenHarmony 的技术能力、不断以创新技术加速开源生态建设的布局。从产业生态角度来看,丰富且有活力的生态也将推动 OpenHarmony 的持续提升、优化、完善,最终反哺产业生态,形成一个良性的、有机的循环。

 

因此,我们会一如既往地推进 KaihongOS 在各个行业的商业落地,为千行百业赋能的同时,将沉淀、提炼出来的技术能力再贡献给 OpenHarmony 社区,真正践行从开源中来到开源中去的理念,这就是深开鸿在未来要做的事情,要努力的方向。

 

Q8:有什么想对其他企业和开发者说的话吗?

 

作为一名普通的工程技术人员,有幸遇到这样的一个时代,更有幸能够亲身参与这个时代的伟大变革。机会留给有准备的人,我会竭尽所能去拥抱这样的时代,把握时代赋予的机会。

 

个人的力量是渺小的,在这里我呼吁更多的有识之士、志同道合者参与到 OpenHarmony 生态的共建,大家一起携起手来,推动它的繁荣与发展!

 

 

有关巴延兴:从主导多个SIG组到OpenHarmony“代码贡献之星”,我是如何做到的?的更多相关文章

  1. ruby - 如何使用 Nokogiri 的 xpath 和 at_xpath 方法 - 2

    我正在学习如何使用Nokogiri,根据这段代码我遇到了一些问题:require'rubygems'require'mechanize'post_agent=WWW::Mechanize.newpost_page=post_agent.get('http://www.vbulletin.org/forum/showthread.php?t=230708')puts"\nabsolutepathwithtbodygivesnil"putspost_page.parser.xpath('/html/body/div/div/div/div/div/table/tbody/tr/td/div

  2. ruby - 如何从 ruby​​ 中的字符串运行任意对象方法? - 2

    总的来说,我对ruby​​还比较陌生,我正在为我正在创建的对象编写一些rspec测试用例。许多测试用例都非常基础,我只是想确保正确填充和返回值。我想知道是否有办法使用循环结构来执行此操作。不必为我要测试的每个方法都设置一个assertEquals。例如:describeitem,"TestingtheItem"doit"willhaveanullvaluetostart"doitem=Item.new#HereIcoulddotheitem.name.shouldbe_nil#thenIcoulddoitem.category.shouldbe_nilendend但我想要一些方法来使用

  3. python - 如何使用 Ruby 或 Python 创建一系列高音调和低音调的蜂鸣声? - 2

    关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。

  4. ruby-on-rails - Rails 3 中的多个路由文件 - 2

    Rails2.3可以选择随时使用RouteSet#add_configuration_file添加更多路由。是否可以在Rails3项目中做同样的事情? 最佳答案 在config/application.rb中:config.paths.config.routes在Rails3.2(也可能是Rails3.1)中,使用:config.paths["config/routes"] 关于ruby-on-rails-Rails3中的多个路由文件,我们在StackOverflow上找到一个类似的问题

  5. ruby-on-rails - 如何验证 update_all 是否实际在 Rails 中更新 - 2

    给定这段代码defcreate@upgrades=User.update_all(["role=?","upgraded"],:id=>params[:upgrade])redirect_toadmin_upgrades_path,:notice=>"Successfullyupgradeduser."end我如何在该操作中实际验证它们是否已保存或未重定向到适当的页面和消息? 最佳答案 在Rails3中,update_all不返回任何有意义的信息,除了已更新的记录数(这可能取决于您的DBMS是否返回该信息)。http://ar.ru

  6. ruby-on-rails - 'compass watch' 是如何工作的/它是如何与 rails 一起使用的 - 2

    我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t

  7. ruby-on-rails - 在 Ruby 中循环遍历多个数组 - 2

    我有多个ActiveRecord子类Item的实例数组,我需要根据最早的事件循环打印。在这种情况下,我需要打印付款和维护日期,如下所示:ItemAmaintenancerequiredin5daysItemBpaymentrequiredin6daysItemApaymentrequiredin7daysItemBmaintenancerequiredin8days我目前有两个查询,用于查找maintenance和payment项目(非排他性查询),并输出如下内容:paymentrequiredin...maintenancerequiredin...有什么方法可以改善上述(丑陋的)代

  8. ruby - 如何将脚本文件的末尾读取为数据文件(Perl 或任何其他语言) - 2

    我正在寻找执行以下操作的正确语法(在Perl、Shell或Ruby中):#variabletoaccessthedatalinesappendedasafileEND_OF_SCRIPT_MARKERrawdatastartshereanditcontinues. 最佳答案 Perl用__DATA__做这个:#!/usr/bin/perlusestrict;usewarnings;while(){print;}__DATA__Texttoprintgoeshere 关于ruby-如何将脚

  9. ruby - 如何在 buildr 项目中使用 Ruby 代码? - 2

    如何在buildr项目中使用Ruby?我在很多不同的项目中使用过Ruby、JRuby、Java和Clojure。我目前正在使用我的标准Ruby开发一个模拟应用程序,我想尝试使用Clojure后端(我确实喜欢功能代码)以及JRubygui和测试套件。我还可以看到在未来的不同项目中使用Scala作为后端。我想我要为我的项目尝试一下buildr(http://buildr.apache.org/),但我注意到buildr似乎没有设置为在项目中使用JRuby代码本身!这看起来有点傻,因为该工具旨在统一通用的JVM语言并且是在ruby中构建的。除了将输出的jar包含在一个独特的、仅限ruby​​

  10. ruby - 如何指定 Rack 处理程序 - 2

    Rackup通过Rack的默认处理程序成功运行任何Rack应用程序。例如:classRackAppdefcall(environment)['200',{'Content-Type'=>'text/html'},["Helloworld"]]endendrunRackApp.new但是当最后一行更改为使用Rack的内置CGI处理程序时,rackup给出“NoMethodErrorat/undefinedmethod`call'fornil:NilClass”:Rack::Handler::CGI.runRackApp.newRack的其他内置处理程序也提出了同样的反对意见。例如Rack

随机推荐