自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(86)
  • 收藏
  • 关注

原创 Apache Hop实战:Windows平台MySL数据迁移的深度排错与性能调优

13 年后,我用 fetch-event-source 订阅大模型的“思维流”,用 OCR 解锁图片中的文字——前端,正在成为 AI 产品的第一道体验防线。'Authorization': `Bearer ${getToken()}`, // 从 Pinia 或 localStorage 获取。关键设计:状态分为 'idle' | 'parsing' | 'success' | 'failed',对应四个 UI 区块,避免用户困惑。message.error('翻译服务异常,请稍后重试');

2026-05-14 15:57:02 98

原创 CLI-Anything + Gear 最佳实践与踩坑修复沉淀

LZW通过为复杂数据构建简单索引来减少存储的数据量,这一点是朴素的哈希算法,当然,这一算法的发明者通过一套特殊的规则使得其他人可以直接通过索引数据反推出复杂数据,而在GIF中,则是GIF发明公司将他所规定的规则写好,编写GIF的人根据这一套规则构建数据,然后其他人直接使用套用了这一套规则的解码器解码,便能将数据还原成原来的样子。其中,最重要的就是图像数据了,其他的块用于规定这些图像数据应当如何呈现到我们眼中或是告知文件的开始结束,因此对于我们来说,其他块基本上都有固定模板,只有图像数据需要我们自己定义。

2026-05-14 15:51:55 64

原创 让 AI 代理拥有“专业技能包“:Microsoft Agent Skills

ax2.scatter(sales_2022, y_pos, s=120, color='#4C72B0', alpha=0.9, label='2022年', zorder=2, edgecolors='white', linewidth=2)进一步,我们还可以给哑铃图排序,按照增长由快到慢给各个品类排序,这样自然形成从"下降最显著"到"增长最显著"的连续谱,模式自动显现,无需刻意寻找。这样改造后,由上到下的哑铃,越来越短(也就是增长越来越慢),最底部的那个是负增长,用了红色来标注。

2026-05-14 15:40:48 314

原创 gitru:一个由 Rust 打造的零依赖 Git 提交信息校验工具

print(f"机器码 (Hex): {''.join(f'{x:02x}' for x in encoding)}")print(f"解密后的文本: {decrypted_text.decode()}")access:当前访问类型:UC_MEM_READ,UC_MEM_WRITE......第一个参数:捕获模式,规定什么时候触发hook,例如:读取内存,中断捕获......第二个参数:选择模式,例如:64位,32位,小端序......第二个参数:选择模式,例如:64位,32位,小端序......

2026-05-14 15:35:22 181

原创 在 Windows+WSL 上部署 OpenClaw AI员工的实践与踩坑

在实际使用中该控件主要用于整型或浮点的计数显示,与普通的LineEdit组件不同,该组件可以在前后增加特殊符号并提供了上下幅度的调整按钮,灵活性更强。接下来将用一个简单的案例展示如何使用 QSpinBox组件,该组件有两个版本:QSpinBox用于展示单精度浮点数,而QDoubleSpinBox() 则可以展示精度更高的数值,需要注意的是,该组件有两个特殊参数,当使用setPrefix() 时可以指定在前方加入特殊符号,而使用 setSuffix() 时则可以在后方追加特殊符号,我们就可以后方追加为例。

2026-05-13 12:06:35 164

原创 Note Calendar:Obsidian的智能日历插件,融合农历、节日与笔记管理

Session被销毁: ID=" + se.getSession().getId() + ", 时间=" + new java.util.Date() + "。Session被创建: ID=" + se.getSession().getId() + ", 时间=" + new java.util.Date());

2026-05-13 11:58:32 141

原创 WPF新手村教程(五)— 附魔教学(绑定)

set_target_properties(mypass2 PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS ON) #---->修改 项目名称。set(LLVM_DIR "D:/LLVM/llvm-project/build/lib/cmake/llvm")#---->修改 llvm cmake配置路径。target_pile_options(mypass2 PRIVATE /utf-8)#---->修改 项目名称,文件名。

2026-05-13 11:51:10 199

原创 GitHub 悄悄起飞的开源项目,想让 AI 接管你的电脑

服务成功加锁后,启动后台守护线程,每隔锁过期时间的 1/3 (如 10 秒)检查锁是否仍被自身持有,若持有则延长锁的过期时间(重置为 30 秒),直到业务完成主动释放锁。哨兵将从节点切换为主节点,新主节点无该锁数据,其他服务可重新加锁,导致原锁失效,出现多个服务持有锁的情况。成因:锁 key 粒度太粗(如用“lock:stock”作为所有商品的库存锁),导致所有商品的库存操作都互斥,即使操作不同商品,也需排队等待锁释放,彻底丧失分布式系统的并发优势。③ 释放锁时自动同步清理所有节点锁数据,无需手动协调。

2026-05-13 11:45:06 206

原创 MindSpore 环境配置完全指南

随着协议的成熟,OData 逐渐步入标准化轨道,v4.0 版本正式通过 OASIS 联盟的标准化审核,并最终获得 ISO/IEC 的批准(ISO/IEC 20802-1:2016),确立了其在 RESTful API 领域的权威地位。服务端分页 ($skiptoken):与简单的偏移量分页($skip)不同,服务端分页利用 $skiptoken 返回一个不透明的令牌,该令牌通常对应数据库游标或上一次查询的最后一条记录的键值 12。因此,OData 推荐并实现了基于实体标签(ETag)的乐观并发控制。

2026-05-13 11:37:02 163

原创 在 Windows+WSL 上部署 OpenClaw AI员工的实践与踩坑

print(f"请求成功!状态码: {response.status_code}")print("响应内容前100个字符:", response.text[:100])print(f"请求失败!状态码: {response.status_code}")API交互: 与各种Web服务(如天气API、社交媒体API)进行通信,获取或提交数据。requests 是一个用于发送请求的 Python 库。轻松发送GET、POST、PUT、DELETE等请求。自动化测试: 自动化测试Web应用的接口功能。

2026-05-12 17:14:01 121

原创 Note Calendar:Obsidian的智能日历插件,融合农历、节日与笔记管理

在 DAD 中,Actor 不再只是并发模型,而是领域的最小自治单元。Mailbox 不是 AI Actor 的边界,也不承担语义职责。没有直接调用,没有结构耦合,只有被理解后的意图驱动执行。而是承认:在 AI 时代,系统必须先“理解”,再“执行”。在 DAD 中,领域的最小自治单元是 AI Actor。Agent 才是 AI Actor 的物理与逻辑边界。所有进入 Actor 的信息,必须先经过 Agent。Agent 是唯一的语义入口,也是唯一的语义出口。领域之间的耦合,从方法签名,转移成了消息结构。

2026-05-12 17:07:07 132

原创 WPF新手村教程(五)— 附魔教学(绑定)

当我们需要发起新的提案时,可以直接使用:/openspec:proposal 就可以触发该指令,此时 AI 就会根据 proposal.md 中所定义的规范,来创建一个新的变更提案。mands/openspec 这个目录定义了三个不同的命令,每个命令文件中所写的提示词,都是 AI 在执行该命令时需要参考的"规范"。你只需要理解这套规范的工作流程,就能与 AI 配合无间。当然,在有需要的时候,我们也可以修改 OpenSpec 初始化时所生成的一系列.md文件,直接变更规范,使其更加符合企业内的业务流程。

2026-05-12 17:01:12 225

原创 GitHub 悄悄起飞的开源项目,想让 AI 接管你的电脑

Apache SeaTunnel PMC Member 对这个提议提出一些疑问,比如这种集成属于哪一层级,对多引擎兼容性的考量,类型转换的准确性等,并根据社区设计规范,要求发起者提交一份正式的设计文档(Design Document)。目前,Apache SeaTunnel 中的许多非关系型连接器(如 Elasticsearch、向量数据库和数据湖引擎)要求用户在作业配置中显式定义完整的列 Schema。先来看看提交这个 Issue 的作者是为什么想到这个点子的,以及他初步的核心设计概念。

2026-05-12 16:55:04 220

原创 MindSpore 环境配置完全指南

set_target_properties(mypass2 PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS ON) #---->修改 项目名称。set(LLVM_DIR "D:/LLVM/llvm-project/build/lib/cmake/llvm")#---->修改 llvm cmake配置路径。target_pile_options(mypass2 PRIVATE /utf-8)#---->修改 项目名称,文件名。

2026-05-12 16:48:55 287

原创 在 Windows+WSL 上部署 OpenClaw AI员工的实践与踩坑

在实际使用中该控件主要用于整型或浮点的计数显示,与普通的LineEdit组件不同,该组件可以在前后增加特殊符号并提供了上下幅度的调整按钮,灵活性更强。接下来将用一个简单的案例展示如何使用 QSpinBox组件,该组件有两个版本:QSpinBox用于展示单精度浮点数,而QDoubleSpinBox() 则可以展示精度更高的数值,需要注意的是,该组件有两个特殊参数,当使用setPrefix() 时可以指定在前方加入特殊符号,而使用 setSuffix() 时则可以在后方追加特殊符号,我们就可以后方追加为例。

2026-05-11 15:10:53 141

原创 Note Calendar:Obsidian的智能日历插件,融合农历、节日与笔记管理

Session被销毁: ID=" + se.getSession().getId() + ", 时间=" + new java.util.Date() + "。Session被创建: ID=" + se.getSession().getId() + ", 时间=" + new java.util.Date());

2026-05-11 15:02:33 159

原创 WPF新手村教程(五)— 附魔教学(绑定)

set_target_properties(mypass2 PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS ON) #---->修改 项目名称。set(LLVM_DIR "D:/LLVM/llvm-project/build/lib/cmake/llvm")#---->修改 llvm cmake配置路径。target_pile_options(mypass2 PRIVATE /utf-8)#---->修改 项目名称,文件名。

2026-05-11 14:55:21 317

原创 GitHub 悄悄起飞的开源项目,想让 AI 接管你的电脑

服务成功加锁后,启动后台守护线程,每隔锁过期时间的 1/3 (如 10 秒)检查锁是否仍被自身持有,若持有则延长锁的过期时间(重置为 30 秒),直到业务完成主动释放锁。哨兵将从节点切换为主节点,新主节点无该锁数据,其他服务可重新加锁,导致原锁失效,出现多个服务持有锁的情况。成因:锁 key 粒度太粗(如用“lock:stock”作为所有商品的库存锁),导致所有商品的库存操作都互斥,即使操作不同商品,也需排队等待锁释放,彻底丧失分布式系统的并发优势。③ 释放锁时自动同步清理所有节点锁数据,无需手动协调。

2026-05-11 14:48:38 294

原创 MindSpore 环境配置完全指南

随着协议的成熟,OData 逐渐步入标准化轨道,v4.0 版本正式通过 OASIS 联盟的标准化审核,并最终获得 ISO/IEC 的批准(ISO/IEC 20802-1:2016),确立了其在 RESTful API 领域的权威地位。服务端分页 ($skiptoken):与简单的偏移量分页($skip)不同,服务端分页利用 $skiptoken 返回一个不透明的令牌,该令牌通常对应数据库游标或上一次查询的最后一条记录的键值 12。因此,OData 推荐并实现了基于实体标签(ETag)的乐观并发控制。

2026-05-11 14:40:20 318

原创 在 Windows+WSL 上部署 OpenClaw AI员工的实践与踩坑

在实际使用中该控件主要用于整型或浮点的计数显示,与普通的LineEdit组件不同,该组件可以在前后增加特殊符号并提供了上下幅度的调整按钮,灵活性更强。接下来将用一个简单的案例展示如何使用 QSpinBox组件,该组件有两个版本:QSpinBox用于展示单精度浮点数,而QDoubleSpinBox() 则可以展示精度更高的数值,需要注意的是,该组件有两个特殊参数,当使用setPrefix() 时可以指定在前方加入特殊符号,而使用 setSuffix() 时则可以在后方追加特殊符号,我们就可以后方追加为例。

2026-05-10 12:11:34 168

原创 Note Calendar:Obsidian的智能日历插件,融合农历、节日与笔记管理

Session被销毁: ID=" + se.getSession().getId() + ", 时间=" + new java.util.Date() + "。Session被创建: ID=" + se.getSession().getId() + ", 时间=" + new java.util.Date());

2026-05-10 12:03:53 165

原创 WPF新手村教程(五)— 附魔教学(绑定)

set_target_properties(mypass2 PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS ON) #---->修改 项目名称。set(LLVM_DIR "D:/LLVM/llvm-project/build/lib/cmake/llvm")#---->修改 llvm cmake配置路径。target_pile_options(mypass2 PRIVATE /utf-8)#---->修改 项目名称,文件名。

2026-05-10 11:55:58 146

原创 GitHub 悄悄起飞的开源项目,想让 AI 接管你的电脑

服务成功加锁后,启动后台守护线程,每隔锁过期时间的 1/3 (如 10 秒)检查锁是否仍被自身持有,若持有则延长锁的过期时间(重置为 30 秒),直到业务完成主动释放锁。哨兵将从节点切换为主节点,新主节点无该锁数据,其他服务可重新加锁,导致原锁失效,出现多个服务持有锁的情况。成因:锁 key 粒度太粗(如用“lock:stock”作为所有商品的库存锁),导致所有商品的库存操作都互斥,即使操作不同商品,也需排队等待锁释放,彻底丧失分布式系统的并发优势。③ 释放锁时自动同步清理所有节点锁数据,无需手动协调。

2026-05-10 11:46:45 221

原创 MindSpore 环境配置完全指南

随着协议的成熟,OData 逐渐步入标准化轨道,v4.0 版本正式通过 OASIS 联盟的标准化审核,并最终获得 ISO/IEC 的批准(ISO/IEC 20802-1:2016),确立了其在 RESTful API 领域的权威地位。服务端分页 ($skiptoken):与简单的偏移量分页($skip)不同,服务端分页利用 $skiptoken 返回一个不透明的令牌,该令牌通常对应数据库游标或上一次查询的最后一条记录的键值 12。因此,OData 推荐并实现了基于实体标签(ETag)的乐观并发控制。

2026-05-10 11:38:34 165

原创 在 Windows+WSL 上部署 OpenClaw AI员工的实践与踩坑

print(f"请求成功!状态码: {response.status_code}")print("响应内容前100个字符:", response.text[:100])print(f"请求失败!状态码: {response.status_code}")API交互: 与各种Web服务(如天气API、社交媒体API)进行通信,获取或提交数据。requests 是一个用于发送请求的 Python 库。轻松发送GET、POST、PUT、DELETE等请求。自动化测试: 自动化测试Web应用的接口功能。

2026-05-09 19:56:34 177

原创 Note Calendar:Obsidian的智能日历插件,融合农历、节日与笔记管理

在 DAD 中,Actor 不再只是并发模型,而是领域的最小自治单元。Mailbox 不是 AI Actor 的边界,也不承担语义职责。没有直接调用,没有结构耦合,只有被理解后的意图驱动执行。而是承认:在 AI 时代,系统必须先“理解”,再“执行”。在 DAD 中,领域的最小自治单元是 AI Actor。Agent 才是 AI Actor 的物理与逻辑边界。所有进入 Actor 的信息,必须先经过 Agent。Agent 是唯一的语义入口,也是唯一的语义出口。领域之间的耦合,从方法签名,转移成了消息结构。

2026-05-09 19:47:08 149

原创 WPF新手村教程(五)— 附魔教学(绑定)

当我们需要发起新的提案时,可以直接使用:/openspec:proposal 就可以触发该指令,此时 AI 就会根据 proposal.md 中所定义的规范,来创建一个新的变更提案。mands/openspec 这个目录定义了三个不同的命令,每个命令文件中所写的提示词,都是 AI 在执行该命令时需要参考的"规范"。你只需要理解这套规范的工作流程,就能与 AI 配合无间。当然,在有需要的时候,我们也可以修改 OpenSpec 初始化时所生成的一系列.md文件,直接变更规范,使其更加符合企业内的业务流程。

2026-05-09 19:37:06 220

原创 GitHub 悄悄起飞的开源项目,想让 AI 接管你的电脑

Apache SeaTunnel PMC Member 对这个提议提出一些疑问,比如这种集成属于哪一层级,对多引擎兼容性的考量,类型转换的准确性等,并根据社区设计规范,要求发起者提交一份正式的设计文档(Design Document)。目前,Apache SeaTunnel 中的许多非关系型连接器(如 Elasticsearch、向量数据库和数据湖引擎)要求用户在作业配置中显式定义完整的列 Schema。先来看看提交这个 Issue 的作者是为什么想到这个点子的,以及他初步的核心设计概念。

2026-05-09 19:31:00 153

原创 MindSpore 环境配置完全指南

set_target_properties(mypass2 PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS ON) #---->修改 项目名称。set(LLVM_DIR "D:/LLVM/llvm-project/build/lib/cmake/llvm")#---->修改 llvm cmake配置路径。target_pile_options(mypass2 PRIVATE /utf-8)#---->修改 项目名称,文件名。

2026-05-09 19:24:04 218

原创 用c语言手搓shellcode

虽然接触计算机有一段时间了,但是我的视野一直局限于一个较小的范围之内,往往只能看到于算法竞赛相关的内容,计算机各种文件在我看来十分复杂,认为构建他们并能达到目的是一件困难的事情,然而近期我观看了油管上Magicalbat大神的视频,发现其实它们的本质都惊人地简单:所有计算机文件,都是按特定规则组织的二进制数据,是人为规定好格式再由计算机解析,对于我们来说,只要根据规定格式进行编辑,就能够成功构建。写完这段代码,你可能会发现:生成WAV文件的过程,就是“按格式规范往文件里写二进制数据”的过程。

2026-05-08 21:51:33 264

原创 最小二乘问题详解:束平差原理与基础实现

printf("Q位状态:%s\n", is_q_flag_set()?"溢出(置1)" : "未溢出(置0)");优先使用 ARM GCC 内置函数(如__qadd),深入调试可通过汇编操作 Q 位,检测溢出需读取 APSR 的 Bit27;printf("32位饱和加法结果:%d(预期:2147483647)\n", res1);运算结果超出目标数据类型的数值范围(上限 / 下限) 时,结果被 “钳位” 到该类型的极值;

2026-05-08 21:43:26 188

原创 高光谱成像基础(九)光谱解混基础

ax2.scatter(sales_2022, y_pos, s=120, color='#4C72B0', alpha=0.9, label='2022年', zorder=2, edgecolors='white', linewidth=2)进一步,我们还可以给哑铃图排序,按照增长由快到慢给各个品类排序,这样自然形成从"下降最显著"到"增长最显著"的连续谱,模式自动显现,无需刻意寻找。这样改造后,由上到下的哑铃,越来越短(也就是增长越来越慢),最底部的那个是负增长,用了红色来标注。

2026-05-08 21:33:47 161

原创 lil_tea c++ style guide

其底层数据存储在对象存储中(S3、COS、OSS、ceph),在用户和对象存储层中加一个中间层,作为文件系统层,负责将文件系统与对象存储的操作进行翻译转换,从而实现POSIX兼容。在介绍之前,首先需要理清楚文件系统与对象存储的区别是什么,文件系统对接对象存储需要做哪些工作,之后才考虑性能的优化与可靠性的优化。对象存储的 FUSE 并不是完美的。操作接口:基于RESTful API(),主要操作是PUT(上传/覆盖),GET(下载),DELETE(删除),HEAD(获取元数据),不支持seek或部分写入。

2026-05-08 21:25:11 218

原创 MindSpore 环境配置完全指南

随着协议的成熟,OData 逐渐步入标准化轨道,v4.0 版本正式通过 OASIS 联盟的标准化审核,并最终获得 ISO/IEC 的批准(ISO/IEC 20802-1:2016),确立了其在 RESTful API 领域的权威地位。服务端分页 ($skiptoken):与简单的偏移量分页($skip)不同,服务端分页利用 $skiptoken 返回一个不透明的令牌,该令牌通常对应数据库游标或上一次查询的最后一条记录的键值 12。因此,OData 推荐并实现了基于实体标签(ETag)的乐观并发控制。

2026-05-08 21:16:14 370

原创 用c语言手搓shellcode

虽然接触计算机有一段时间了,但是我的视野一直局限于一个较小的范围之内,往往只能看到于算法竞赛相关的内容,计算机各种文件在我看来十分复杂,认为构建他们并能达到目的是一件困难的事情,然而近期我观看了油管上Magicalbat大神的视频,发现其实它们的本质都惊人地简单:所有计算机文件,都是按特定规则组织的二进制数据,是人为规定好格式再由计算机解析,对于我们来说,只要根据规定格式进行编辑,就能够成功构建。写完这段代码,你可能会发现:生成WAV文件的过程,就是“按格式规范往文件里写二进制数据”的过程。

2026-05-07 18:06:06 155

原创 最小二乘问题详解:束平差原理与基础实现

printf("Q位状态:%s\n", is_q_flag_set()?"溢出(置1)" : "未溢出(置0)");优先使用 ARM GCC 内置函数(如__qadd),深入调试可通过汇编操作 Q 位,检测溢出需读取 APSR 的 Bit27;printf("32位饱和加法结果:%d(预期:2147483647)\n", res1);运算结果超出目标数据类型的数值范围(上限 / 下限) 时,结果被 “钳位” 到该类型的极值;

2026-05-07 17:59:08 186

原创 高光谱成像基础(九)光谱解混基础

ax2.scatter(sales_2022, y_pos, s=120, color='#4C72B0', alpha=0.9, label='2022年', zorder=2, edgecolors='white', linewidth=2)进一步,我们还可以给哑铃图排序,按照增长由快到慢给各个品类排序,这样自然形成从"下降最显著"到"增长最显著"的连续谱,模式自动显现,无需刻意寻找。这样改造后,由上到下的哑铃,越来越短(也就是增长越来越慢),最底部的那个是负增长,用了红色来标注。

2026-05-07 17:52:03 169

原创 lil_tea c++ style guide

其底层数据存储在对象存储中(S3、COS、OSS、ceph),在用户和对象存储层中加一个中间层,作为文件系统层,负责将文件系统与对象存储的操作进行翻译转换,从而实现POSIX兼容。在介绍之前,首先需要理清楚文件系统与对象存储的区别是什么,文件系统对接对象存储需要做哪些工作,之后才考虑性能的优化与可靠性的优化。对象存储的 FUSE 并不是完美的。操作接口:基于RESTful API(),主要操作是PUT(上传/覆盖),GET(下载),DELETE(删除),HEAD(获取元数据),不支持seek或部分写入。

2026-05-07 17:43:21 220

原创 MindSpore 环境配置完全指南

随着协议的成熟,OData 逐渐步入标准化轨道,v4.0 版本正式通过 OASIS 联盟的标准化审核,并最终获得 ISO/IEC 的批准(ISO/IEC 20802-1:2016),确立了其在 RESTful API 领域的权威地位。服务端分页 ($skiptoken):与简单的偏移量分页($skip)不同,服务端分页利用 $skiptoken 返回一个不透明的令牌,该令牌通常对应数据库游标或上一次查询的最后一条记录的键值 12。因此,OData 推荐并实现了基于实体标签(ETag)的乐观并发控制。

2026-05-07 17:34:42 220

原创 最小二乘问题详解:束平差原理与基础实现

参数TParam是泛型,这样可以直接使用DTO参数来查询,减少类型转化的开销。返回值TAccount也是泛型,这样就可以直接返回视图模型或者领域模型。In的参数名是可选和前面例子的Equal是一样的,默认字段名。参数和返回值类型还可以定义为泛型,可以做到更加灵活未诰手幸。参数直接使用Id(类型由Account简化为long)只有1个参数时支持化繁为简,支持直接传值做为参数值。只有In一个集合参数时支持直接传数组、集合或字典。单个参数无需封装,直接使用参数类型即可。这样可以节约定义只有一个属性的参数类。

2026-05-06 22:47:57 141

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除