开发者说:使用通义灵码,参与开源项目全程纪实

news2024/12/25 9:13:34

缘起 OceanBase。作为一个充满好奇心的 DBA,一直一来想探寻数据库的内部世界。开源为我们这些好奇的猫打开了一扇新世界的大门。OceanBase 作为分布式关系型数据库的排头兵,自然进入了我的优选名单。起初走进了 OceanBase[1]的世界逛了一圈,这对于一个没有 C++ 实战经验的小白来说简直要劝退了。

为寻找突破点联系到了 hnwyllmm(github 账号)大神,他建议有 DBA 背景的小伙伴可以从 obdiag 项目[2]入手。OceanBase Diagnostic Tool(obdiag)是一款专门为 OceanBase 打造的敏捷诊断工具,功能包括诊断信息收集、分析、巡检,可以在 OceanBase 集群不同的部署模式下(OCP,OBD 或用户根据文档手工部署)实现一键执行。obdiag 项目是 python 语言写的,比较容易上手。找到了切入点,那就走起打怪升级。

远程开发环境搭建

欲学剑法,先要找到“宝剑”。欲学游泳,先要找到“泳池”。欲学书法,先要找到“笔墨纸砚”。欲学开发,先要搭建起“开发环境”。obdiag 目前是运行在 Linux 环境中的,使用 windows 环境的我采用了远程开发方式,即把开发环境部署在虚拟机的 Centos 系统中,然后使用 VSCode 远程连接 Centos 进行开发。

1. 虚拟环境下搭建 Centos 系统

我使用的是 VMware workstation + Centos7.9 的系统环境。在 VMware workstation 中搭建 Centos 的文章有很多,这里附上一个详细文章,供参考(在VMware 中安装 CentOS7(超详细的图文教程)[3])。

2. Centos 系统下部署 obdiag 开发环境

obdiag 是基于 python 开发的,所以在编写代码前需要部署一个 python3.8 的编译环境,我是基于 miniconda 搭建的开发编译环境,简单易于维护。上参考文章(安装 conda 并搭建 python 环境(入门教程)[4])。

接下来登录自己的 github 账号。

然后跳转到 obdiag 仓库(https://github.com/oceanbase/obdiag)下,点击fork,这一步会将官方仓库代码克隆到自己的仓库下,今后提交代码将会基于这个克隆的代码仓库进行操作。

图片

日常的代码拉取和贡献流程大致如下。

图片

下载个人仓库的代码,按照下图在个人仓库找到 obdiag 仓库的 ssh 链接,并使用 git clone 命令下载到自己的虚拟环境中。

git clone git@github.com:owner_name/obdiag.git

图片

如上参考:代码贡献流程 (yuque.com)[5]

3. 使用 VSCode 搭建远程开发环境

我个人比较喜欢 VSCode IDE 工具,如下就介绍一下使用 VSCode 搭建远程开发环境。

首先下载并安装 VSCode 工具,图形化下一步默认安装即可。

下载链接:Visual Studio Code - Code Editing. Redefined[6]

安装 remote ssh 插件。

图片

添加远程服务器。

图片

输入要连接的服务器及用户名。

图片

选择一个 config 配置文件,默认第一个即可。

图片

如果已有该机器连接,可连接一个新窗口。

图片

打开 obdiag python 项目。

图片

安装 python 扩展。

图片

选择解析器并进入。
ctrl + shift + P 输入 python:select interpreter 选择解释器,这里选择 conda 创建的环境即可。

图片

这样就可以开心的在本地开发运行在远程虚拟机里的代码了,当然代码在真实的服务器上也是一样的流程。

主角登场

部署好 obdiag 开发环境后,该如何上手呢,我的答案是需求,可以通过项目的 issue 去寻找需求,也可以和社区的小伙伴沟通交流拿到需求。我的第一个 obdiag 项目需求是给 ssh_client 包写单元测试。但是拿到这个需求后,因为不熟悉项目,还是有点无从下手的感觉,但是现在有了开发好帮手,通义灵码的出现可以大大消解我们的无助感。

那如何使用通义灵码来帮助我们呢,使用 VSCode 的小伙伴只需要安装插件即可。

通义灵码安装教程:通义灵码安装教程-阿里云

1. 安装通义灵码

搜索通义灵码(TONGYI Lingma),找到通义灵码后点击安装。

图片

图片

重启 Visual Studio Code,重启成功后登录阿里云账号,即刻开启智能编码之旅。

2. 使用通义灵码写单元测试

图片

在安装完通义灵码插件后,在每个功能函数上都会多一个通义灵码的 logo,点击 logo 就会显示 4 个主要功能(代码解释、单元测试、代码优化、代码注释)。

我们点击单元测试,就会生成单元测试代码,我们将测试代码复制到测试目录下,就可以进行功能代码的测试验证了。

3. 使用通义灵码写注释

图片

同样,给代码生成注释,也是同样的流程,非常简单。

4. 使用心得

第一次生成的单测代码可能会报错,你可以把报错信息反馈给通义灵码,它会根据报错信息继续修正提供的单测代码。

当出现多次反复询问同一个问题都不能得到正确测试代码时,你可以耐心的将错误多反馈几次,它会根据错误信息一次一次修正答案。

你可以像和一位专家对话一样,不断的把自己的想法输入给通义灵码,然后根据它的回答,来修正自己的想法。

通义灵码给单测生成的注释也非常精准,可以节省大量对着字典翻译英文的时间,这个绝对会帮助到你的。

贡献代码

当给开源项目修改 bug 后,或者给开源项目贡献新特性后,可以通过提交 PR 的方式将代码提交给官方代码仓库。

首先在自己的开发环境中新建一个开发分支。

git checkout -b feature-name

提交代码到自己 fork 的仓库中。

git add .

git commit -m "add unittest for ssh_client"

git push origin feature-branch

此时在自己的 github 仓库会出现 Compare & pull request 按钮,点击它就可以提交 PR 了。

小结

通义灵码对于解决批量类、经验类等工作确实很有帮助,对于了解一个陌生的项目也非常得心应手,下次接触新项目时不妨尝试一下通义灵码,会带给你惊喜的。我借助通义灵码完成了 obdiag 项目的第一个 PR,成为了 obdiag 项目的 contributor,我知道通义灵码的能力还远没有发挥出来,今后继续探索,未来可期。

本文是作者 shuipin100-34561 参加 2024 天池云原生编程挑战赛的赛事感悟。

相关链接:

[1] OceanBase

https://github.com/oceanbase/oceanbase

[2] obdiag 项目

https://github.com/oceanbase/obdiag

[3] 在VMware 中安装 CentOS7(超详细的图文教程)

https://blog.csdn.net/wts563540/article/details/139699520

[4] 安装 conda 并搭建 python 环境(入门教程)

https://blog.csdn.net/Linshaodan520/article/details/138734234

[5] 代码贡献流程 (yuque.com)

https://oceanbase.yuque.com/org-wiki-obtech-vh7w9r/imzr6c/erw0dtl19g08hg3z

[6] Visual Studio Code - Code Editing. Redefined

https://code.visualstudio.com/

下载安装通义灵码:通义灵码_智能编码助手_AI编程-阿里云

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2132198.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

OpenAI 发布 o1 模型具备类似人类的推理能力,大模型已经达到人类博士水平了吗?

什么是OpenAI o1? OpenAI o1(后面简称o1)是OpenAI在2024.9.12号发布的最新大模型,主要针对的任务是复杂任务推理,比如竞赛难度的编程问题,奥赛难度的数学问题等。参考OpenAI原始介绍: https://openai.com…

学习笔记 - 知识图谱的符号表示方法

学习笔记 - 知识图谱的符号表示方法 说明: 首次发表日期:2024-09-13个人阅读学习并摘录成笔记 知识表示的相关名词定义 以下内容摘录自 Knowledge Graphs Applied 2.3小节,然后AI翻译人工润色。 实体(Entities)—表…

【CTF Web】BUUCTF BUU BURP COURSE 1 Writeup(X-Real-IP伪造+POST请求)

BUU BURP COURSE 1 1 点击启动靶机。 解法 用 hackbar 将 X-Forwarded-For 设为 127.0.0.1,无效。提示:只能本地访问。 将 Referer 设为 127.0.0.1,无效。提示:只能本地访问。 将 X-Real-IP 设为 127.0.0.1,成功&am…

快速开发与维护:探索 AndroidAnnotations

在移动应用开发的世界中,效率和可维护性是两个至关重要的要素。随着应用功能的不断增长和用户需求的不断变化,开发者们一直在寻找能够提高生产力的工具和框架。今天,我们将深入探讨一个能够帮助开发者实现快速开发和易于维护的框架——Androi…

Unity for Android使用蓝牙低功耗Bluetooth LE

Unity2021.3.35f1 插件&#xff1a;Bluetooth LE for iOS and Android v2.3.unitypackage 1、将插件资源包导入unity中 2.修改插件中的AndroidManifest文件 <?xml version"1.0" encoding"utf-8"?> <manifest xmlns:android"http://schem…

交叉编译Python3.8

1. 交叉编译python 工程组织&#xff1a;根目录设置为/home/a123/xxx/tools/4python 内容创作不易&#xff0c;对您有帮助的话&#xff0c;可以支持打赏一下下 配置脚本统一命名为conig_arm/pc_<package>.sh 交叉编译出的头文件以及动态库文件统一放在cross_compile_de…

“爱学术”期刊采编系统的设计与实现---附源码 76126

摘 要 随着互联网趋势的到来&#xff0c;各行各业都在考虑利用互联网将自己推广出去&#xff0c;最好方式就是建立自己的互联网系统&#xff0c;并对其进行维护和管理。在现实运用中&#xff0c;应用软件的工作规则和开发步骤&#xff0c;采用SpringBoot技术建设“爱学术”期刊…

【Qt】样式属性

样式属性 QSS 中的样式属性⾮常多, 不需要都记住. 核⼼原则还是⽤到了就去查. ⽂档的 Qt Style Sheets Reference 章节详细介绍了哪些控件可以设置属性, 每个控 件都能设置哪些属性等. 在样式属性中有一个“盒子模型需要重点介绍” 盒子模型 在⽂档的 Customizing Qt Widget…

Kubernetes从零到精通(10-服务Service)

Service简介 Deployment这种工作负载能管理我们应用Pod的副本数&#xff0c;并实现动态的创建和销毁&#xff0c;所以Pod本身是临时资源&#xff08;IP随时可能变化&#xff09;。现在如果某组Pod A需要访问另一组Pod B&#xff0c;A就需要在应用的配置参数里动态跟踪并更改B的…

java(1)数据类型,运算符,逻辑控制语句以及基本应用

目录 ​编辑 1.前言 2.正文 2.1数据类型与变量 2.1.1字面常量 2.1.2数据类型 2.1.3变量 2.1.3.1整型 2.1.3.2浮点型 2.1.3.3字符型 2.1.3.4布尔型 2.1.4类型转换与类型提升 2.1.4.1字符串的拼接 2.1.4.2整型转字符串 2.1.4.3字符串转整数 2.2运算符 2.2.1算术运…

【效果+教程】免费!实操用AI设计图标Logo,不仅省了设计费,还是副业新赛道!

Logo是一个品牌或公司的视觉标识 一个好的logo可以帮助消费者快速识别品牌&#xff0c;增强品牌的可见性和记忆度。 一个专业设计的logo能够提升品牌的可信度&#xff0c;给人一种专业和可靠的印象。 一个设计精美且富有意义的logo能够与消费者建立情感联系&#xff0c;增强…

10887辆 捷途旅行者8月再夺方盒子销冠

近日&#xff0c;8月汽车销量排行榜正式出炉。捷途旅行者年内第四次实现月销过万&#xff0c;以10887辆的优异成绩&#xff0c;持续领跑方盒子市场。作为名副其实的畅销车型&#xff0c;捷途旅行者自去年上市以来&#xff0c;不仅连续三个季度卫冕方盒子销量冠军&#xff0c;创…

C++类与对象(下)--最后的收尾

内部类 • 如果⼀个类定义在另⼀个类的内部&#xff0c;这个内部类就叫做内部类。内部类是⼀个独⽴的类&#xff0c;跟定义在 全局相⽐&#xff0c;他只是受外部类类域限制和访问限定符限制&#xff0c;所以外部类定义的对象中不包含内部类。 #include<iostream> using…

C++中string使用

目录 介绍 使用 迭代器&#xff08;Iterator&#xff09; begin&#xff0c;end rbegin&#xff0c;rend 容量&#xff08;Capacity&#xff09; size&#xff0c;length capacity empty clear resize reserve 元素访问&#xff08;Element access&#xff09; ope…

美国陆军发布下一代目标识别和感知倡议

文章目录 前言一、下一代目标识别与感知倡议的内容二、下一代目标识别与感知倡议重点关注领域(1)目标标记、跟踪和定位 (TTL)(2)侦察和监视 (R&S)(3)无人系统 (UMS)前言 2024年7月23日,美国陆军发布了下一代目标识别与感知倡议,希望工业界能够开发战场态势感知、侦…

LeetCode 692.前K个高频单词

LeetCode 692.前K个高频单词 C 思路&#x1f9d0;&#xff1a; 首先用map存储该字典&#xff0c;然后放进vector进行排序&#xff0c;注意sort的排序规则与我们想要的规则不一致&#xff0c;所以我们需要写一个伪函数来判断second(value值)&#xff0c;由于该题要求了稳定性&am…

Rider使用习惯

1.修改rider的快捷方式为VSCode样式的&#xff0c;修改设置方式 2.在项目中点击某个脚本文件&#xff0c;即在项目视图中选中这个文件&#xff0c;设置方式如下&#xff1a; 暂时先记录这么多&#xff0c;以后有零碎的随时记录

VUE,element-ui,优化tabs组件每次点击,所有子页面都重新渲染问题

1.在data中定义每个子组件相应的值&#xff0c;ture为加载&#xff0c;false为不加载。 2.在子组件中使用v-if来判断是否渲染当前页面 3.在函数中对子组件的值进行切换。 handleClick(){if(this.activeNamefirst){this.pageOne truethis.pageTwo false}else if(this.active…

通过 4EVERLAND 的终极 4EVER Boost 活动增强你的活动能力!

介绍 近日&#xff0c;4EVERLAND宣布启动最新、最激动人心的计划 — 4EVER Boost 活动&#xff01;4EVER Boost 活动旨在吸引更多社区成员加入并加速去中心化物理基础设施4EVER 网络的发展。用户可以参与节点质押、日常任务和 T4EVER/NFT 质押&#xff0c;以加快获得 $4EVER 积…

Spring Security认证与授权

1 Spring Security介绍 Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架。由于它是Spring生态系统中的一员&#xff0c;因此它伴随着整个Spring生态系统不断修正、升级&#xff0c;在spring boot项目中加入springsecurity更是…