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

利用 deepin-IDE 的 AI 能力,我实现了文件加密扩展

经过多轮迭代,deepin 文件管理器(dde-file-manager)的扩展功能已经趋于稳定,看到越来越丰富的文管新功能,作为一名技术爱好者,也想自己动手写个插件扩展一下文管的功能。

我选择的开发工具是 deepin-IDE,原因有两个:一是 deepin-IDE 本身集成了文管的插件模板,对研发者而言只需要通过引导创建模板代码,然后在上面修修改改即可,不用再去阅读大量的文管源码;还有一个原因是 deepin-IDE 已经支持了较多的 AI 能力,包括注释添加、代码翻译、修复bug、解释代码、代码审查、生成单元测试和生成提交信息,正好借此机会看看能带来多少的效率提升。

首先说下结论,有模板 + AI的助力,整个开发过程体验下来还是非常顺畅,让我仅用不到两个小时的时间就把功能加上,接下来就分享给大家完整的开发过程。

Part 1  准备工作

首先通过应用商店,下载最新版本的 deepin-IDE :

启动 deepin-IDE,首先看到的是最近访问页面,点击下图中的按钮,在弹出的引导界面选择文管插件,随后按照向导一步一步的完成配置。

引导完成后在工程树可以看到插件模板的代码结构:

在这个模板里面有说明文档,按照指引将工程配置一遍,在编译后插件文件会自动安装到指定位置,文管检测到插件变化,提示用户进行更新:

为了测试插件是否安装成功,打开文管并选中某个文件右键,已经可以看到新增的右键菜单:

这些右键菜单都是插件模板已经实现的功能,我们要做的是修改这些代码,在这个过程中就可以体验 deepin-IDE 的 AI 辅助编程功能。需要注意的是,如果想要体验完整的 AI 功能,还需要做一个准备工作,就是登陆 AI 插件关联的网站:在 IDE 界面的消息界面,会弹出 AI 插件登陆提示:

点击登陆按钮,完成登陆后就可以使用全部的 AI 功能。到这里,所有的准备工作就算完成。

Part 2  解释功能

要新增加密功能,第一步应该在文管中添加右键菜单。找到对应的源文件,阅读代码并定位到如下的位置:

bool MyMenuPlugin::buildNormalMenu(DFMExtMenu *main, const std::string
¤tPath,
const std::string &focusPath, const
std::list&pathList,
bool onDesktop)
{
...
// 通过代理创建 action,此 action 在堆区分配,不自行释放将内存泄露!
auto rootAction { m_proxy->createAction() };rootAction->setText("角标管理");
// 通过代理创建 menu,此 menu 在堆区分配,不自行释放将内存泄露!
auto menu { m_proxy->createMenu() };
// 二级菜单在 Hover 中创建,以减少一级菜单显示的性能开销
rootAction->setMenu(menu);rootAction->registerHovered([this, pathList](DFMExtAction *action) {
if (!action->menu()->actions().empty())return;auto favoriteEmblemAct { m_proxy->createAction() };favoriteEmblemAct->setText("角标设置为favorite");favoriteEmblemAct->setIcon("emblem-favorite");favoriteEmblemAct->registerTriggered([this, pathList](DFMExtAction *,bool) {
std::for_each(pathList.begin(), pathList.end(), [this](conststd::string &path) {setEmblemIcon(path, "emblem-favorite");
});
});
...
return true;
}

代码注释很详细,添加的方法也很简单,只需要自己创建一个菜单和 Action,通过接口注册进去就可以了。具体的逻辑是写在 Action 的回调里面处理,用⼾触发菜单时会自动执行。

以上对代码的理解是基于个人的经验,在这种对代码不是很熟悉的场景下,正好可以试试 AI 的解释功能。

选中这段代码,右键点击解释代码选项,得到如下的结果:

着重看红色方框里面的内容,其中功能描述部分还是比较准确的,和个人的理解相近,除此之外 AI 还把函数的参数都解释了一遍,这比自己阅读代码得到的信息更多。

不过这个功能还是存在槽点,后面罗列出来的具体步骤还是有些繁杂,不如“show me the code”来的更加直接。

但换个场景想想,假设我正在翻看其它语言的代码,或者涉及到算法、shader 代码,解释功能的优势就体现出来了,就像文言文里面的白话注释,可以不用,但不能没有。

所以啊,在当前 AI 功能眼花缭乱的背景下,只有在合适的场景、合适的需求下去使用,才会得到事半功倍的效果。

Part 3  智能问答

理解到代码的大概意思,接下来就是手搓代码的过程。

第一步将模板中已有的代码进行修改,比如去掉多余的Action,修改菜单名字等,让其符合我的最终需求,效果如下:

有了界面,接下来就是添加加密和解密的逻辑。

对于不怎么使用加密工具的研发者来说,并不知道使用什么加密工具以及如何什么样的参数。在这个场景下,相信大部分的小伙伴已经不假思索的打开 ChatGPT 进行问答操作了。

不过这次是在 deepin-IDE 里面,我直接展开 deepin-IDE 左侧的问答界面进行查询,在进⾏了多番连续的问答后得到如下答案:

Part 4  代码补全

为了把加解密功能加进去,我在对应的类中添加了两个函数,分别用于加密和解密,然后开始输入代码,在敲完函数体回车后,就得到 deepin-IDE 的代码补全提示:

敲击快捷键 Ctrl+T 填入对应的代码,随后再次利用这个功能,便快速得到完整的函数代码:

以同样的方法,我把代码解密的函数代码也补充完成。

体验下来,补全的代码解决了我大约 90% 的工作量,不过并没有完全符合功能需求,原来的文件还遗留在本地。

我在靠后的位置先写上注释,说明需要删除原来的文件,随后轻点回车,不待我反应过来,补全内容已经直接呈现:

为了保持和之前一样的优雅,我愉快的按下了 Ctrl + T 快捷键。随后多次、重复的使用 AI 代码补全功能,将剩余的函数一一实现。

最后编译整个工程,然后随便找了个“README.md”文件试了试成果。这是文件里面原来的内容:

接下来进行加密操作:

1、右键该文件,选择加密选项。

2、在当前目录随即出现了一个新文件,名字后面加上了“encrypted”后缀,之前的文件也被删除。

3、打开该文件,可以看到里面的内容已经被加密,无法正常阅读。

如果仔细观察,还会发现文件图标的左下角多了一个爱心图标,表示这是一个加密文件。解密也是同样的操作,它会把文件名恢复为原来的名字,左下角的加密图标也会消失。

Part 5  单元测试

功能是完成了,但为了保证代码质量,单元测试也是不可缺少的一环。

在 deepin-IDE 里面也提供了这个功能,选中一段代码,让 AI 生成测试内容,看看效果如何:

这个工程没有使用任何测试框架,但 AI 还是把测试用例的大体结构搭建好了,和大多数 AI 辅助功能一样,还是需要自己动手修改。不过粗略估计,该功能大致可以节省 50% 左右的工作量。

Part 6  准备工作

为了完成开发闭环,接下来就需要把代码提交到仓库。

在常规的提交方式下,我们会根据经验总结修改的内容,形成提交信息。

在 deepin-IDE 里面,可以直接根据修改内容生成提交信息,甚至把总结的依据也罗列出来。右键点击 CodeGeeX > 生成git commits,如下图所示:

随后在智能问答界面,会输出提交信息和提交依据:

最后一句的总结可以说非常的准确,同时也节省了不少思考时间。

Part 7  审查代码

当然,如果害怕提交的 PR 被其他人暴力 Review,自己可以在本地进行预先审查。

具体可以通过 deepin-IDE自带的代码审查功能,方法还是通过选中代码和右键菜单触发,得到如下结果:

这里我选取的是加密函数的代码,总计有仅有12行,但 AI 功能给出的代码审查建议竟然多达10条之多,我一度怀疑自己的编码质量怎会降到如此程度,不过细细看来,AI 还是审查得过于严苛了。

建议研发人员将其作为参考信息,提取有用部分进行自查即可。

Part 8  总结

deepin-IDE 中的 AI 能力在持续不断的完善。而在本次的使用过程中,也用到了 deepin-IDE 提供的插件模板功能,较为明显的降低了从头开始写文管插件的难度,随着后面各类系统工具的集成,deepin-IDE 在开发效率上的提升也会越来越明显。

最后,十分感谢社区用户Mozart的投稿,也欢迎大家踊跃投稿,分享你的新发现和新玩法。

GitHub:GitHub - linuxdeepin/deepin-unioncode

官方网站:https://ide.deepin.org/zh

相关阅读:

(1)支持 deepin(深度)社区

(2)deepin 技术分享合集

内容来源:deepin(深度)社区

转载请注明出处

相关文章:

利用 deepin-IDE 的 AI 能力,我实现了文件加密扩展

经过多轮迭代,deepin 文件管理器(dde-file-manager)的扩展功能已经趋于稳定,看到越来越丰富的文管新功能,作为一名技术爱好者,也想自己动手写个插件扩展一下文管的功能。 我选择的开发工具是 deepin-IDE&a…...

JPA 基本查询(五)

JPA 查询Exists示例 JPA教程 - JPA 查询Exists示例 如果子查询返回任何行,则EXISTS条件返回true。 以下代码显示如何在JPQL中使用带有子查询的EXISTS运算符。 List l em.createQuery("SELECT e FROM Professor e WHERE EXISTS " "(SELECT p FROM …...

hiprint结合vue2项目实现静默打印详细使用步骤

代码地址是:vue-plugin-hiprint: hiprint for Vue2/Vue3 ⚡打印、打印设计、可视化设计器、报表设计、元素编辑、可视化打印编辑 本地安装包地址:electron-hiprint 发行版 - Gitee.com 1、先安装hipint安装包在本地 2、项目运行npm(socket.…...

项目报 OutOfMemoryError 、GC overhead limit exceeded 问题排查以及解决思路实战

项目报 OutOfMemoryError、GC overhead limit exceeded 问题排查以及解决思路实战 前言: 问题现象描述: 1,生产环境有个定时任务,没有初始化告警数据【告警数据量为1000多个】 2,其他定时任务执行正常 3,查…...

【计算机-显示屏灰阶测试】

硬计算机-显示屏灰阶测试 ■ 对比度■ 清晰度■ 灰度色阶(色带)■ 对比率■■ ■ 对比度 在一个性能良好的显示器上,您可观察到每种颜色的标尺都可分为从 1 至 32、大致上等宽但不同亮度的色带。即使是在刻度1处的色带也应该隐约可见。 一个…...

CSS系列(40)-- Container Queries详解

前端技术探索系列:CSS Container Queries详解 📦 致读者:探索组件响应式的艺术 👋 前端开发者们, 今天我们将深入探讨 CSS Container Queries,这个强大的组件级响应式特性。 基础概念 🚀 容…...

工作生活做事慢效率低原因及解决方案

时间和效率管理具体版(初阶)(一) 工作&生活做事慢效率低原因及解决方案 一、效率慢的原因(动物解析法(编者自创)) 打败你的可能是生活的小事 1.无头苍蝇无流程 做事之前没有想…...

各种数据库类型介绍

在软件开发和数据处理领域,数据库扮演着至关重要的角色。它们用于存储、检索和管理大量数据,是信息系统不可或缺的基础。以下是几种常用的数据库类型及其简要介绍: 1.关系型数据库(Relational Databases) 关系型数据库…...

了解智能运维

智能运维 (一)运维工作的转变 随着技术发展,运维工作从基础的搬机器、插网线、装系统等体力活儿,逐渐转变为更侧重服务器管理、代码管理、日志分析、监控告警、流量管理及故障排查等的脑力劳动。如今,运维人员拿到的…...

js实现仿windows文件名称排序

引言: 在JavaScript中,数组排序是一个常见的操作,但默认的Array.sort()方法只能进行简单的字符串比较。在处理复杂数据时,我们需要自定义排序函数来满足特定的需求。本文将通过一个具体的代码示例,解释如何实现一个仿w…...

基于Oauth2的SSO单点登录---前端

Vue-element-admin 是一个基于 Vue.js 和 Element UI 的后台管理系统框架,提供了丰富的组件和功能,可以帮助开发者快速搭建现代化的后台管理系统。 一、基本知识 (一)Vue-element-admin 的主要文件和目录 vue-element-admin/ |--…...

springboot 使用注解设置缓存时效

springboot 使用注解设置缓存时效 import org.apache.commons.lang3.StringUtils; import org.springframework.data.redis.cache.RedisCache; import org.springframework.data.redis.cache.RedisCacheConfiguration; import org.springframework.data.redis.cache.RedisCach…...

QGIS二次开发(地图符号库操作)

实习三 地图符号库操作 3.1 任务要求 基于QGIS,实现地图符号的设计/存储与显示;基于QGIS实现一个点、线、面shp矢量图层文件的显示。通过设置引用的符号,改变矢量图层的显示效果;可编辑地图的符号库汇中的点符号、线符号、面符号…...

线性代数行列式

目录 二阶与三阶行列式 二元线性方程组与二阶行列式 三阶行列式 全排列和对换 排列及其逆序数 对换 n阶行列式的定义 行列式的性质 二阶与三阶行列式 二元线性方程组与二阶行列式 若是采用消元法解x1、x2的话则得到以下式子 有二阶行列式的规律可得:分…...

Vision Transformer (ViT) 论文的第二句话

Vision Transformer (ViT) 论文的第二句话 flyfish 原句: “In vision, attention is either applied in conjunction with convolutional networks, or used to replace certain components of convolutional networks while keeping their overall structure in…...

Github 2024-12-27 Java开源项目日报Top10

根据Github Trendings的统计,今日(2024-12-27统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Java项目9Kotlin项目1C#项目1非开发语言项目1C++项目1《Hello 算法》:动画图解、一键运行的数据结构与算法教程 创建周期:476 天协议类型:Ot…...

气相色谱-质谱联用分析方法中的常用部件,分流平板更换

分流平板,是气相色谱-质谱联用分析方法中的一个常用部件,它可以实现气相色谱柱流与MS检测器流的分离和分流。常见的气质联用仪分流平板有很多种,如单层T型分流平板、双层T型分流平板、螺旋分流平板等等。 操作视频http://www.spcctech.com/v…...

centos7 免安装mysql5.7及配置(支持多个mysql)

一) 下载免安装包: mysql下载地址: https://dev.mysql.com/downloads/mysql/下载时,选择以前5.7版本: image 下载第一个TAR压缩包: image 二) 定义安装路径并解压安装包 1、假设需要把MySQL放到 /usr/local…...

Python的Pandas--Series的创建和实现

1.Series函数的格式: pandas.Series(data,index,dtype,name,copy) data:一组数据(ndarray类型、list、dict等类)或标量值 index:数据索引标签。如果不指定,默认为整数,从0开始 dtype&#x…...

OCR实践-问卷表格统计

前言 书接上文 OCR实践—PaddleOCROCR实践-Table-Transformer 本项目代码已开源 放在 Github上,欢迎参考使用,Star https://github.com/caibucai22/TableAnalysisTool 主要功能说明:对手动拍照的问卷图片进行统计分数(对应分数…...

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明:假设每台服务器已…...

接口测试中缓存处理策略

在接口测试中,缓存处理策略是一个关键环节,直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性,避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明: 一、缓存处理的核…...

React第五十七节 Router中RouterProvider使用详解及注意事项

前言 在 React Router v6.4 中&#xff0c;RouterProvider 是一个核心组件&#xff0c;用于提供基于数据路由&#xff08;data routers&#xff09;的新型路由方案。 它替代了传统的 <BrowserRouter>&#xff0c;支持更强大的数据加载和操作功能&#xff08;如 loader 和…...

如何在看板中体现优先级变化

在看板中有效体现优先级变化的关键措施包括&#xff1a;采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中&#xff0c;设置任务排序规则尤其重要&#xff0c;因为它让看板视觉上直观地体…...

如何将联系人从 iPhone 转移到 Android

从 iPhone 换到 Android 手机时&#xff0c;你可能需要保留重要的数据&#xff0c;例如通讯录。好在&#xff0c;将通讯录从 iPhone 转移到 Android 手机非常简单&#xff0c;你可以从本文中学习 6 种可靠的方法&#xff0c;确保随时保持连接&#xff0c;不错过任何信息。 第 1…...

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...

【HTTP三个基础问题】

面试官您好&#xff01;HTTP是超文本传输协议&#xff0c;是互联网上客户端和服务器之间传输超文本数据&#xff08;比如文字、图片、音频、视频等&#xff09;的核心协议&#xff0c;当前互联网应用最广泛的版本是HTTP1.1&#xff0c;它基于经典的C/S模型&#xff0c;也就是客…...

Fabric V2.5 通用溯源系统——增加图片上传与下载功能

fabric-trace项目在发布一年后,部署量已突破1000次,为支持更多场景,现新增支持图片信息上链,本文对图片上传、下载功能代码进行梳理,包含智能合约、后端、前端部分。 一、智能合约修改 为了增加图片信息上链溯源,需要对底层数据结构进行修改,在此对智能合约中的农产品数…...

【无标题】路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论

路径问题的革命性重构&#xff1a;基于二维拓扑收缩色动力学模型的零点隧穿理论 一、传统路径模型的根本缺陷 在经典正方形路径问题中&#xff08;图1&#xff09;&#xff1a; mermaid graph LR A((A)) --- B((B)) B --- C((C)) C --- D((D)) D --- A A -.- C[无直接路径] B -…...

站群服务器的应用场景都有哪些?

站群服务器主要是为了多个网站的托管和管理所设计的&#xff0c;可以通过集中管理和高效资源的分配&#xff0c;来支持多个独立的网站同时运行&#xff0c;让每一个网站都可以分配到独立的IP地址&#xff0c;避免出现IP关联的风险&#xff0c;用户还可以通过控制面板进行管理功…...