当前位置: 首页 > news >正文

“菜鸟”程序员逆袭:独立开发iOS音乐应用,年底参加Amazon DeepRacer 全球锦标赛

“致一年前的小木土:任务完成。”

6月30日,在获得2023 Amazon DeepRacer自动驾驶赛车企业总决赛中国区冠军三天后的深夜,杜键文发了这条朋友圈,并配上比赛现场的9张图。

“小木土”是杜键文的网名,取其姓氏,包括他的个人微信号、B站账号等。2022年7月,杜键文从暨南大学毕业后加入荔枝集团,一年后,他和荔枝“状元红”团队(注:状元红是水果荔枝的一个品种,参赛团队称呼)一起获得了 Amazon DeepRacer自动驾驶赛车企业总决赛冠军,并拿到Amazon DeepRacer 全球自动驾驶赛车锦标赛的入场券。今年11月底,杜键文将到美国拉斯维加斯,挑战世界顶尖高手。此前,他还开发出属于自己的第一款iOS音乐应用。

杜键文到Amazon DeepRacer 全球自动驾驶赛车锦标赛的入场券,年底前往拉斯维加斯挑战世界顶尖高手。

“一年前我有迷茫和憧憬,希望在技术道路上有收获、有成功。回想这一年的付出,做难而正确的事,并取得了小小的成绩。我想说这一年,没白过。”关于“任务完成”的说法,杜键文解释。

在工作写代码之余,这个28岁的广州技术小伙喜欢弹电子琴,撸猫,从小养了一条大黄狗,剪辑视频并上传到网络上与朋友分享,在公司年会上还作为导演执导晚会节目。

从一个初入职场的应届生到即将奔赴大洋彼岸参与全球大赛,让我们看看这个“资浅”程序员的杜键文这一年的“奇幻旅程”。

从总决赛冠军,到拉斯维加斯……

AWS DeepRacer 是亚马逊云科技推出的一个综合性学习系统,旨在结合强化学习探索自动化驾驶的模型算法,帮助开发者学习和实践强化学习。它包括以下部份:

控制台(图a):借助AWS的云服务、 AWS SageMaker 和 AWS RoboMaker 完成模型的训练与赛道仿真;

车辆(图b):1/18 比例的车辆,配备摄像头、电源传动系统以及用于对模型进行推理从而实现自动驾驶的Linux系统;

AWS DeepRacer League(图c):世界上首个全球自动赛车联赛,争夺奖品、荣耀和晋级冠军杯的机会;

图a:aws控制台用于训练、导出模型、仿真
 

图b:deepracer车辆
 

图c:全球各种deepracer联盟比赛
 

DeepRacer提供的仿真环境让用户可以在虚拟世界中进行实验和测试,以便更快地迭代和改进驾驶策略。用户可以使用强化学习算法来训练车辆在赛道上驾驶,通过奖励和惩罚来指导智能代理在各种情况下做出最佳决策,根据不同赛道,自定义奖励函数,调整神经网络训练的超参数以及赛车运行的速度和角度,从而在训练出模型后,可以让自己的赛车在虚拟跑道以及真实赛道上完成自动驾驶。

与AWS Deepracer的接触最早起于2021年。当时,荔枝的业务技术与产品负责人了解到这个机会,就在公司内的技术大群发帖,招募感兴趣的技术人员加入战队,并在当年的1024技术节举行了一场内部赛事。

2021年1024程序员日,荔枝内部赛,共有8支队伍进入决赛圈

最终获得冠军“CPP”战队成员蔡蔡等也成为了后续荔枝战队对外比赛的“引路人”,做了很多的技术指导和备战支持工作。

2022年7月,还是应届生的杜键文加入公司,在校时有接触过机器学习与深度学习的内容,看到在9月深圳举行的DeepRacer互联网行业南区预赛招募的消息,怀着兴趣报名参加了。

比赛分为线上和线下举行。在深圳的线下比赛,测试和比赛的顺序均由线上成绩确定,荔枝线上成绩第一,因此排在最后出场。不过现场也出现了一些小意外,杜键文回忆,“按照规则,每支队伍的测试时间10分钟,但前面队伍明显超时,轮到我们时勉强测试了两个模型,其余准备的8个模型均没有测试。不过,模型越多有时越难选择,最终我们选了训练了3小时的“testczs-cpp”,这也很大程度上受益于我们以前公司内部比赛学习积累。”最终获得分区赛冠军。

荔枝状元红战队获得2022DeepRacer互联网行业南区赛冠军

2023年1月,海南三亚,2023DeepRacer互联网行业全国总决赛如期开战。这次比赛,赛前的准备相对大部份比赛队伍来讲,是非常充分的,购买了小车和赛道,杜键文作为队长也早早跟团队选定模型,并作了一系列的针对驾驶的训练,总结出许多有用的小技巧,比如调整偏左,然后加大最大正向速度等等。比赛前,使用这个模型可能跑了有将近200次了。

“我自己也有奇怪的习惯,比赛前不会很兴奋、频繁交流,倒喜欢一个人安静,仔细想问题。我觉得这次比较吃亏的一点是,没有去观摩别人的比赛只顾着自己搞小车。”杜键文在赛后的反思总结中提到。

2023DeepRacer互联网行业全国总决赛,状元红团队和其他战队合影留念
 

比赛后,杜键文写下这么一段话——

上场前虽然是紧张,但信心还是非常十足的。但测试环节意外频频,记得仅仅测试了没两三圈,撞了一下重连、跌了一下重连,然后反复重启连接、加载模型,一直没连上,10分钟测试时间最终就被耗尽……

第一轮的比赛,本来测试得挺好的,已经准备要正式比赛了,但当时手汗很多,一下子拿不稳小车摔了一下,又要重连,一直没连上,第一轮没有成绩……

这彻底把我弄懵了,之前的战术一下子打乱。虽然队友不断安慰增加自信,但我清楚,下一轮的压力相当大,小车不出故障、小车不出赛道、小车用激进战术。到了第二轮,正常测试了三圈,队友让我可以开始比赛了。我本还想熟悉下最优速度,但想到怎么也得有个成绩,又担心再发生故障,所以也就直接开始了。可能出于担心,出于紧张,没有考虑到电池的活跃性,加速时过于保守,也就没有展示出训练时最好的一面……

比赛前我对队友表现得太冷淡太严肃了,比赛后作为队长的我,不应再沉沦于已有的事实中,而是应该拥抱队友,表现出对他们的感谢,享受过程,接受最终的结果。

事后的多个瞬间,都会回想到比赛的那天。如果网络没那么多问题,如果第一轮正式比赛前没有手滑,如果我再调激进一点速度……但这不就是人生吗,到处充满着遗憾,环环相扣,不知当下的每一个选择会有什么样的因果,也只有作了选择才会后悔,但另一个我又提醒自己,会不会这样子就是目前最好的结果?我想这个归咎于运气吧,运气也是实力一部份。

一同现场参与的技术同事彭冬碧回忆,那次比赛获得亚军也不是很差的结果,杜键文对自己的操作有遗憾跟自责,我们就想着说,下一次总决赛去克服避免,然后精进成绩。

时间来到6月27日,2023 Amazon DeepRacer自动驾驶赛车企业总决赛在上海决出了最终结果,Cisco、德勤管理咨询、北京辛诺创新、神州泰岳、敦煌网、荔枝集团“状元红”战队等12支队伍的竞逐中,在两轮比赛中成绩遥遥领先,最终斩获桂冠。

夺冠后合影,奖品是4090显卡

战队成员陈泽森提到,回想在年初互联网行业的全国总决赛,团队在测试期间因为网络相关的原因,导致测试受阻,后选择保守策略拿到了第二名,“这一次的全国总决赛,我们弥补了遗憾”。

左:杜键文  右:陈泽森

“很高兴看到荔枝团队站上大赛舞台并从中脱颖而出,再次证明了我们年轻的技术人才群体不容小觑。” 荔枝集团技术负责人表示。

通往技术之路:一个爱动手爱记录的家伙

广州小伙杜键文从小就很爱玩玩具,基本电视上播啥动漫,有了周边玩具就一定会去买的那种。比如四驱车、乐高、铁甲小宝、弹珠警察、高达、变形金刚、爆旋陀螺……凡是动手的都爱捣弄,而且很专心很上头,一搞一天都乐此不疲。这项“技术”的形成,他归结于对玩具产生了痴迷的状态,达到“匠人”的状态,这在无形中锻炼自己的动手能力和创造能力。

杜键文还喜欢剪辑视频做记录,2013年,他尝试用iPad mini的cute cut应用制作了第一部有关纪念高中生活的视频,开启了视频剪辑之路。视频需要素材,杜键文为此开始爱好拍摄记录,家里的趣事、宿舍的聚餐、班里的活动、旅游的风景、大自然的绚丽,总用镜头记录那些难忘的瞬间。剪辑工具的使用大同小异,重要的是剪辑的思路,如何将声音、画面、文字巧妙结合,如何制作一个完整的、能引起共鸣的作品。十年里尝试了不少风格的剪辑,像班级毕业留念、恶搞、歌唱MV、怀念、采访、讲知识、会议、生活简片……

杜键文参加应届生培训

“自己在剪辑技术方面成长的同时,也感受到剪辑出一个用心的视频给他人带来的意义,因为我知道,这些在以后终将成为一个有价值的回忆。”

杜键文与程序员这个职业产生渊源在2017年。当时,他开发出属于自己的第一款iOS音乐应用,第一次体验到将技术应用到一个实物上,汇聚着自己所有的奇思妙想。他一个人兼任着产品、开发、设计、测试、市场等职务,很多东西都是从零开始,“我最大收获之一,是自己学会了图像设计,应用里的logo、图片、控件都经过大量的迭代更新、推倒重来,自己慢慢对图形构造、颜色的感受有见解,在艺术层面有一定的领悟,会知道什么是大家都会喜欢的样子。”

杜键文开发的音乐应用申请iOS上架
 

   不过,杜键文也坦言,那时候还未曾想过当程序员,他更享受的是开发过程遇到的乐趣。在这过程中技术慢慢在长进,主动地吸收并直接呈现出实用性和价值,这一正反馈的过程会促使自己不断进步。

技多不压身,杜键文喜欢往不同的领域找可能性,不局限仅专攻于某一领域。社会本就一个复杂的综合体,具备跨学科知识、多技能的本领会让自己有不同的解决方式和不同的思考角度。选择将iOS开发这项技术发展成职业,成为一名程序员,其中的一部份原因,是想紧跟社会技术潮流,知道互联网里流行着什么,如何通过技术来改变生活。

新人从写技术文档开始

杜键文在2021年参加了荔枝秋招,面试官单好强对杜键文说:我感觉你的气质很适合我们。

杜键文一下子也不知道要说什么,就笑了。

单好强,大前端组的前辈,后来也成为杜键文的导师(荔枝内部企业文化,带领新入职员工熟悉公司情况)他回忆,“键文性格内敛,讲话有条理,做了几个测试都比较仔细,对技术问题也感兴趣,当时就觉得他的综合素质蛮符合荔枝的校招标准。”

杜键文刚来时,部门给安排了任务目标,就是配合提高iOS开发和flutter开发能力,以降低开发、调试、维护的成本。领导有意识要求他去尝试写一些技术文档,为夯实技术理论,培养一些逻辑能力和对项目开发的经验总结。

杜键文一开始并不习惯做一些技术文档,就想着把一些具体的事情做好。不过,部门的一些老人就表示,写技术文档可以帮助团队完成当前的信息共享和长期的知识传承 ——对于个人而言,一方面可以节省时间 ,因为避免了回答重复问题,也便于检索过去的知识;另一方面可以塑造口碑,比如在某次部门会议中,就突然有个同事发消息说我的文档写的很好,对新接触这块业务的人帮助很大。

刚来的第一个季度,杜键文就完成了近10篇技术文档的撰写,包括技术入坑指南、开发过程的注意事项、提升iOS原生开发的工作效率等,“是较为'入门'的新手文档,但对我的技术思考是很有帮助的。我也相信,一份好的技术文档比起开发口述是不会有多余的理解成本的,甚至更低,因为对于很多信息,图片能比语言更好地表达。”

工作一周年时,他写下这样一段话,未来希望活成自己心目中程序员该有的样子:

  • 匠人精神,自己领域的事情需要比外行更清楚
  • 切忌不加思考进行复制粘贴
  • 一时弄懂的道理,要记录思路和实践,把别人讲明白才是真懂
  • 不一味埋头于开发,跳到更高层面,找寻背后的意义,说服自己
  • 用技术给别人带来改变,带来价值,带来感动

一位爱撸猫、爱剪辑的程序员,也是导演

工作之余,杜键文还喜欢拿着相机记录下身边有趣的画面。

他拍猫,暨大校园里猫多,有橘猫、狸花猫、三花,躺着、跑着、要吃的。他都拍,记录下来,配上欢快激情的音乐。

他拍狗,一只名叫"欢记”的狗2007年来到家里,就开始记录,2021年,13岁的欢记不辞而别,杜键文将所有影像资料剪辑成五分钟多的短片发在了b站上,还写了一篇文章缅怀欢记。

2016年除夕,杜键文和家里的小狗欢记合影
 

缅怀欢记的文字片段(源于微信公众号“老杜讲节气”)
 

2023年初,通过报名和选拔,杜键文和十几位同事组团参与了年会表演,从道具的设计、选取和制作,演出人员的职能出场设计、排练等等,事无巨细,全程参与。经过一个多月时间,《荔枝秀》顺利地出现在观众面前。

杜键文手绘的出场示意图1
 

杜键文手绘的出场示意图之一
 

年会结束一周后,杜键文也将这段记录剪辑成视频,感慨程序员的生活也可以这么丰富多彩。“我们的队伍包含了业务技术、政务、内容、产品、研发以及泛娱乐板块的小伙伴,经过这段时间的合作,认识到一群可爱的人,更好地融入进荔枝。

从拍视频,写公众号,发b站视频,到参与指导公司年会节目,再到AWS舞台,这就是职场新人杜键文一年多来走过的路,回想起来,也与技术成长是一样的,从业务基础,到demo,到项目实战,到自学深研,从量变到质变。

杜键文获得前往拉斯维加斯参赛的通知

获得总决赛冠军后,杜键文也收到了前往美国参赛的通知,这在荔枝推进全球化大背景下体现着包容开放学习的心态,“AWS DeepRacer类似比赛让机器学习不再遥远,帮助鼓励并拥抱创新,同时也提供在AI和机器学习技能的机会。荔枝也愿意继续加大对技术人才的培养,帮助技术团队持续精进,并走向全球。”

几次外界大赛的经历,杜键文也深知外部世界的变化之快,“技术交流带来更多的想法,技术的更新迭代也远超个体的想象,停滞不前可能就意味着被甩在身后。”

同样的感受在公司内部也不在不断传导。外部世界总是在变化的,这几年,和未来的10年,只会挑战越来越多;技术总是在进步的,跟不上很快会被淘汰。今年随着ChatGPT一夜之间改变全球,很多人在惶恐会不会失业,很多公司也在惶恐自己还有没有存在的价值;用户总是在变化的,一代又一代人在成长,每一代人的喜好都不太一样。

现在,有着更大的舞台等着,作为新人逐渐走向成熟的程序员杜键文的下一个任务又是什么呢?他说他会继续去尝试可能性。一想到自己还能有变化的可能,就让人热血澎湃。

相关文章:

“菜鸟”程序员逆袭:独立开发iOS音乐应用,年底参加Amazon DeepRacer 全球锦标赛

“致一年前的小木土:任务完成。” 6月30日,在获得2023 Amazon DeepRacer自动驾驶赛车企业总决赛中国区冠军三天后的深夜,杜键文发了这条朋友圈,并配上比赛现场的9张图。 “小木土”是杜键文的网名,取其姓氏&#xff…...

nginx测试rewrite

nginx测试rewrite last :相当于 Apache 里的(L)标记,表示完成rewrite 匹配; break: 本条规则匹配完成后,终止匹配,不再匹配后面的规则。 # 其中last 和 break 用来实现 URL 重写时,浏览器地址栏URL 地址不变 redirect: 返回 302 …...

qt 多语言版本 QLinguist使用方法

在使用qt开发一款软件时,可能需要考虑显示文本中英文等多语言版本。可以使用qt语言家的方式实现。 步骤: 1、代码中给控件设置文本时,记得带上QObject::tr() 2、工程pro文件中加入 TRANSLATIONS demo2_en.ts 3、Qt creator点击“工具”—“外…...

postgresql14-用户与角色(二)

介绍 查看 SELECT rolname FROM pg_roles;postgres是系统初始化时默认创建的角色,为超级管理员。 \duList of rolesRole name | Attributes | Member of ------------------------------------------------------…...

Django结合Celery进行异步调用

目录 Celery介绍 相关环境 相关配置 1、在proj/proj/目录下创建一个新的celery.py模块 定义 Celery 实例: 2、在proj/proj/__init__.py 模块中导入这个应用程序。 3、在各自模块中定义任务文件tasks.py 4、settings.py配置 服务启动 异步调用 Celery介绍 C…...

职场经验|项目管理发展方向有哪些?

很多人都知道项目管理行业发展前景比较好,但都不知道从哪下手?今天胖圆给大家分享一下,想要从事项目管理行业,有哪几种职业方向~ 1. 项目经理(Project Manager):负责项目的规划、执行和控制&am…...

Linux的shell(极其粗糙版)

Shell脚本: 脚本主要是为了业务,辅助人工,实现自动化运维 Shell:介于用户和内核之间,充当翻译官的作用,当用户执行相关的命令,shell会把指令二进制传给内核,内核处理完毕以后通过shell把内核的…...

没有英语要求的中国人大女王金融硕士有多香你可能还不知道

在当今全球化的世界中,英语已经成为了一种国际通用语言。对于许多学生来说,掌握英语是实现个人发展和职业成功的关键。尤其是在读研阶段,英语水平的要求更是不容忽视。但现实问题是我们没有相应的语言环境,直接导致的是大学的英语…...

低代码平台如何实现快速开发应用?

目录 一、低代码“快”在哪里? 下面分享低代码低代码平台实现快速开发的一些主要方式: 1.图形化编程: 2.预构建组件: 3.模板和插件: 4.自动化流程: 5.集成和扩展: 6.多端适配: 7.快速…...

iOS原生、Android 原生, flutter 三种方式给照片流添加文字(水印)

效果图:三中代码实现的效果差不多 Swift:代码 import UIKitclass ImageWatermarking: NSObject {static func textToImage(drawText text: String, inImage initImage: UIImage, atPoint point: CGPoint) -> UIImage {let textColor = UIColor.whitelet textFont = UIFon…...

数据结构: 红黑树

目录 1.红黑树概念 2.红黑树性质 3.调整 1.如果p和u都是红色,将其都改为黑色即可,然后向上调整 2.如果p红(u黑/u不在),这时候左子树两红,于是给右子树一个红(旋转变色) 2.1右单旋 变色- …...

如何搭建开源ERP平台Odoo并实现公网远程访问?——“cpolar内网穿透”

文章目录 前言1. 下载安装Odoo:2. 实现公网访问Odoo本地系统:3. 固定域名访问Odoo本地系统 前言 Odoo是全球流行的开源企业管理套件,是一个一站式全功能ERP及电商平台。 开源性质:Odoo是一个开源的ERP软件,这意味着企…...

什么是马尔科夫随机场?

马尔科夫随机场,也称为马尔可夫网(Markov Network),是一种概率图模型,用于表示随机变量之间的依赖关系。它是由若干个随机变量组成的无向图,其中节点代表随机变量,边代表它们之间的相互作用或依…...

自然语言处理---huggingface平台使用指南

1 huggingface介绍 Huggingface总部位于纽约,是一家专注于自然语言处理、人工智能和分布式系统的创业公司。他们所提供的聊天机器人技术一直颇受欢迎,但更出名的是他们在NLP开源社区上的贡献。Huggingface一直致力于自然语言处理NLP技术的平民化(democr…...

修炼k8s+flink+hdfs+dlink(六:学习k8s-pod)

一:增(创建)。 直接进行创建。 kubectl run nginx --imagenginx使用yaml清单方式进行创建。 直接创建方式,并建立pod。 kubectl create deployment my-nginx-deployment --imagenginx:latest 先创建employment,不…...

ARM映像文件组成

引言 ARM编译器将各种源文件(汇编文件、C语言程序文件、C语言程序文件)编译生成ELF格式的目标文件(后缀为.o文件,以下将目标文件简称为.o文件),.o文件经过连接器,和C/C运行时库一起编译生成ELF格…...

redis怎么设计一个高性能hash表

问题 redis 怎么解决的hash冲突问题 ?redis 对于扩容rehash有什么优秀的设计? hash 目标是解决hash冲突,那什么是hash冲突呢? 实际上,一个最简单的 Hash 表就是一个数组,数组里的每个元素是一个哈希桶&…...

《软件方法》强化自测题-总纲(6)

DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集 按照业务建模、需求、分析、设计工作流考察,答案不直接给出,可访问自测链接或扫二维码自测,做到全对才能知道答案。 知识点见《软件方法》&#x…...

vue2中,下拉框多选和全选的实现

vue2中&#xff0c;下拉框多选和全选的实现 代码布局在methods: 中添加功能函数较为完整的一个整体代码&#xff1a; 如图所示点击全选即可完成下拉框中全部子项的全部的选中&#xff0c;同时取消全选即可全部取消选择。 代码布局 <div class"chos-box2"><…...

Android-Framework 默认音乐音量最大

代码位置&#xff1a;frameworks/base/services/core/java/com/android/server/audio/AudioService.java -712,6 712,9 public class AudioService extends IAudioService.Stub}} // force music max volume AudioSystem.DEFAULT_STREAM_VOLUME[AudioSystem.STREAM_MUSIC] MA…...

浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)

✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义&#xff08;Task Definition&…...

Python实现prophet 理论及参数优化

文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候&#xff0c;写过一篇简单实现&#xff0c;后期随着对该模型的深入研究&#xff0c;本次记录涉及到prophet 的公式以及参数调优&#xff0c;从公式可以更直观…...

DBAPI如何优雅的获取单条数据

API如何优雅的获取单条数据 案例一 对于查询类API&#xff0c;查询的是单条数据&#xff0c;比如根据主键ID查询用户信息&#xff0c;sql如下&#xff1a; select id, name, age from user where id #{id}API默认返回的数据格式是多条的&#xff0c;如下&#xff1a; {&qu…...

给网站添加live2d看板娘

给网站添加live2d看板娘 参考文献&#xff1a; stevenjoezhang/live2d-widget: 把萌萌哒的看板娘抱回家 (ノ≧∇≦)ノ | Live2D widget for web platformEikanya/Live2d-model: Live2d model collectionzenghongtu/live2d-model-assets 前言 网站环境如下&#xff0c;文章也主…...

抽象类和接口(全)

一、抽象类 1.概念&#xff1a;如果⼀个类中没有包含⾜够的信息来描绘⼀个具体的对象&#xff0c;这样的类就是抽象类。 像是没有实际⼯作的⽅法,我们可以把它设计成⼀个抽象⽅法&#xff0c;包含抽象⽅法的类我们称为抽象类。 2.语法 在Java中&#xff0c;⼀个类如果被 abs…...

Python网页自动化Selenium中文文档

1. 安装 1.1. 安装 Selenium Python bindings 提供了一个简单的API&#xff0c;让你使用Selenium WebDriver来编写功能/校验测试。 通过Selenium Python的API&#xff0c;你可以非常直观的使用Selenium WebDriver的所有功能。 Selenium Python bindings 使用非常简洁方便的A…...

数据结构:递归的种类(Types of Recursion)

目录 尾递归&#xff08;Tail Recursion&#xff09; 什么是 Loop&#xff08;循环&#xff09;&#xff1f; 复杂度分析 头递归&#xff08;Head Recursion&#xff09; 树形递归&#xff08;Tree Recursion&#xff09; 线性递归&#xff08;Linear Recursion&#xff09;…...

​​企业大模型服务合规指南:深度解析备案与登记制度​​

伴随AI技术的爆炸式发展&#xff0c;尤其是大模型&#xff08;LLM&#xff09;在各行各业的深度应用和整合&#xff0c;企业利用AI技术提升效率、创新服务的步伐不断加快。无论是像DeepSeek这样的前沿技术提供者&#xff0c;还是积极拥抱AI转型的传统企业&#xff0c;在面向公众…...

uni-app学习笔记三十五--扩展组件的安装和使用

由于内置组件不能满足日常开发需要&#xff0c;uniapp官方也提供了众多的扩展组件供我们使用。由于不是内置组件&#xff0c;需要安装才能使用。 一、安装扩展插件 安装方法&#xff1a; 1.访问uniapp官方文档组件部分&#xff1a;组件使用的入门教程 | uni-app官网 点击左侧…...

基于江科大stm32屏幕驱动,实现OLED多级菜单(动画效果),结构体链表实现(独创源码)

引言 在嵌入式系统中&#xff0c;用户界面的设计往往直接影响到用户体验。本文将以STM32微控制器和OLED显示屏为例&#xff0c;介绍如何实现一个多级菜单系统。该系统支持用户通过按键导航菜单&#xff0c;执行相应操作&#xff0c;并提供平滑的滚动动画效果。 本文设计了一个…...