opendds编译开发(c#封装)
opendds是对DDS协议的开源实现,具体可以查阅官网。
我使用的是源码编译开发,博文只针对windows平台。
环境准备
环境安装
1.visual studio 2022,我是企业版,安装需要选择c++
2.Per下载安装,下载链接:https://strawberryperl.com/
源码
1.opendds源码
下载发布的版本。
下载:https://github.com/OpenDDS/OpenDDS
2.ACE源码
下载发布版本。看清楚说明,下对版本,我下载的ACE+TAO-8.0.2.zip
下载地址:https://github.com/DOCGroup/ACE_TAO/releases/tag/ACE%2BTAO-8_0_2
配置系统环境
以我的开发环境为例。
解压opendds源码,解压ace源码以后放在一起,也可以不放一起,弄清楚文件夹。
1.配置环境系统变量
ACE_ROOT :ace源码位置
MPC_ROOT :MPC位置,在ACE源码里面的MPC
TAO_ROOT : %ACE_ROOT%\TAO
DDS_ROOT :DDS源码位置
以为我为例分别是:
ACE_ROOT:E:\OpenDDS-3.31.0\ACE_wrappers
DDS_ROOT:E:\OpenDDS-3.31.0
TAO_ROOT:E:\OpenDDS-3.31.0\ACE_wrappers\TAO
MPC_ROOT:E:\OpenDDS-3.31.0\MPC
其中ACE_wrappers就是拷贝的ACE源码
2.Path变量
%ACE_ROOT%\lib
%ACE_ROOT%\bin
%DDS_ROOT%\lib
%DDS_ROOT%\bin
3.其它
如果你还在参考网上其它资料,可能需要添加一些其它路径,
Path变量中添加perl路径,例如:E:\strawberry-perl-5.40.0.1-64bit-portable\perl\bin
Path变量中添加编译器路径,例如:D:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Tools\MSVC\14.43.34808\bin\Hostx64\x64
生成opendds项目
这部分主要是编译opendds源码,生成依赖库。我推荐博文给大家参考。
Windows下的OpenDDS编译(超详细)-CSDN博客
OPenDDS程序 的 实现+运行-CSDN博客
最主要的官方文档:Building and Installing - OpenDDS 3.31.0
官方文档构建和安装一节。
编译ACE
1.配置修改
进入ACE源码里面,找到ace文件夹,在ace文件下添加文件config.h,输入内容:#include "ace/config-win32.h"。
2.编译
在ACE源码中找到ACE_wrappers_vs2022.sln,编译。
编译opendds
进入opendds源码文件夹,运行“configure.cmd”。双击即可。
正常情况下会生成DDS_no_tests.sln,编译。
所有编译的,都可以用vs2022打开.sln编译,也可以用命令行编译。
正常生成则opendds依赖库有了。
开发项目
这里主要是使用opendds库,opendds作为传输工具,在我们自己的项目中肯定是库,库就需要使用。这里以c#封装使用为例看看项目开发。
读懂官网文档是很重要的,其中“开始”一节演练了项目使用。
这里你需要简单立即idl数据结构定义,可以不管
tao_idl Messenger.idl
opendds_idl Messenger.idl
这部分是介绍idl的使用生成,就是中间件。
项目开始
准备文件
在你平时创建项目的位置,建立一个项目文件夹,名称:DllForOpendds。
在该文件夹下面再建立一个文件夹OpenddsWrappers。
在OpenddsWrappers里面建立2个文件,分别是DDSMessenger.idl,DDS.MPC。
其中DDSMessenger.idl的内容就和官网例子差不多,刚刚开始就一样也可以。
这是我的:
module DDSMessenger{@topicstruct Message {//来源string from;//主题string subject;@key long subject_id;//附属信息string text;//传输内容sequence <octet> content;//域IDlong domain_id;};
@topic
struct Heartbeat
{@key long use_id;long index;
};
};
官网例子里面分离了项目,一个订阅一个发布,这里是为了封装库我就不分开了,DDS.mpc文件就是为了用MPC工具构建项目的文件。里面的内容是:
project(*idl): dcps {// This project ensures the common components get built first.TypeSupport_Files {DDSMessenger.idl}custom_only = 1
}project(*OpenddsWrappers): dcpsexe_with_tcp {exename = OpenddsWrappersafter += *idlTypeSupport_Files {DDSMessenger.idl}Header_Files {OpenddsExport.hDataReaderListenerImpl.hOpenddsWarp.hPublisher.hSubscriber.hSubscriber.h}Source_Files {DataReaderListenerImpl.cppOpenddsExport.cpp}
}
有了这两个文件,就可以生成VC的项目了,在当前文件下,执行命令:
perl %ACE_ROOT%\MPC\mwc.pl -type vs2022,这样就生成了项目OpenddsWrappers.sln,
用vs2022打开项目,里面就是2个c++项目,当前还没有c#的项目,对DDS_OpenddsWrappers做一点修改。
1.
1.右键DDS_OpenddsWrappers,打开属性,“常规”中修改配置类型为dll
2.继续,“链接器”中输出文件修改文件后缀.dll
如图效果:
生成一下OpenddsWrappers解决方案,就会有一些DDSMessengerTypeSupportC.h等文件产生。
开发功能
1.opendds使用开发
在DDS_OpenddsWrappers项目中,添加方法,处理opendds传输,主要有:
1、创建工厂
2、创建域
3、创建主题
4、创建发布者
5、创建订阅者
6、创建写入器
7.创建监听器
8、创建读取器
我这里就不一一贴代码了,有点多还是。这里主要一个分点是,一个域可以有多个发布者,一个发布者可以有多个写入器,每个写入器都有一个主题。这里开发时可以根据自己需要,我是每一个主题绑定一个写入器或则读取器,一个域中有唯一一个发布者或者订阅者。
理论上一个域可以有多个发布者或订阅者,这里有什么影响目前我还不知道,暂时就一个发布者和订阅者吧。
开发完以上代码,就是封装导出方法了,提供给c#使用。
#pragma once
#ifdef MYLIB_EXPORTS
#define MYLIB_API __declspec(dllexport)
#else
#define MYLIB_API __declspec(dllimport)
#endif#include"publisher.h"
#include"Subscriber.h"
#include"OpenddsWarp.h"
extern "C" {MYLIB_API int Addition(int a, int b); MYLIB_API int Initopendds(int argc, char* argv[]);MYLIB_API int Createdomain(long id);MYLIB_API int PublishMsg(const char* topicname,const unsigned char* content,int lengh, int status, const char* from);MYLIB_API int PublishDomainMsg(long domainid, const char* topicname, const unsigned char* content, int lengh, int status, const char* from);MYLIB_API int SubscribeMsg(const char* topicname, void (*func)(const char* , unsigned char*,long,long, const char* ));MYLIB_API int SubscribeDomainMsg(long domainid, const char* topicname, void (*func)(const char*, unsigned char*,long ,long, const char*));
}
在项目上,加入预定义,然后编译。
2.添加c#项目DotNetForDDS,这是一个库,里面提供对c++导出的调用。
新建Wrappers类。
using System.Runtime.InteropServices;namespace DotNetForDDS
{public class Wrappers{/// <summary>/// 接收回调/// </summary>/// <param name="topic">主题</param>/// <param name="data">数据</param>/// <param name="datalen">数据长度</param>/// <param name="id">域ID</param>/// <param name="from">来源</param>[UnmanagedFunctionPointer(CallingConvention.Cdecl)]public delegate void FuncPtr(string topic, IntPtr data,long datalen,long id,string from);/// <summary>/// 测试函数/// </summary>/// <param name="a"></param>/// <param name="b"></param>/// <returns></returns>[DllImport("OpenddsWrappers.dll", CallingConvention = CallingConvention.Cdecl)]public static extern int Addition(int a, int b);/// <summary>/// 初始化,程序只调用一次/// </summary>/// <param name="argc"></param>/// <param name="agv"></param>/// <returns></returns>[DllImport("OpenddsWrappers.dll", CallingConvention = CallingConvention.Cdecl,CharSet =CharSet.Ansi)]public static extern int Initopendds(int argc, string[] agv);/// <summary>/// 创建域/// </summary>/// <param name="id">域ID</param>/// <returns></returns>[DllImport("OpenddsWrappers.dll", CallingConvention = CallingConvention.Cdecl)]public static extern int Createdomain(long id);/// <summary>/// 发布数据,在最新创建的域发布,一般程序中唯一域时/// </summary>/// <param name="topicname">主题</param>/// <param name="content">内容</param>/// <param name="len">内容长度</param>/// <param name="status">发布方式,0立即发布,1等待有订阅方初始化</param>/// <param name="from">标记发布源</param>/// <returns></returns>[DllImport("OpenddsWrappers.dll", CallingConvention = CallingConvention.Cdecl)]public static extern int PublishMsg(string topicname, byte[] content,int len, int status, string from);/// <summary>/// 指定域发布数据,没有域时会自动创建/// </summary>/// <param name="domainid">域ID</param>/// <param name="topicname">主题</param>/// <param name="content">内容</param>/// /// <param name="status">发布方式</param>/// <param name="from">标记源</param>/// <returns></returns>[DllImport("OpenddsWrappers.dll", CallingConvention = CallingConvention.Cdecl)]public static extern int PublishDomainMsg(long domainid, string topicname, byte[] content,int len, int status, string from);/// <summary>/// 订阅数据,最新创建域上订阅,一般一个域时/// </summary>/// <param name="topicname">主题</param>/// <param name="func">接收回调</param>[DllImport("OpenddsWrappers.dll", CallingConvention = CallingConvention.Cdecl)]public static extern void SubscribeMsg(string topicname, FuncPtr func);/// <summary>/// 指定域上订阅/// </summary>/// <param name="domainid">域ID</param>/// <param name="topicname">主题</param>/// <param name="func">接收回调</param>[DllImport("OpenddsWrappers.dll", CallingConvention = CallingConvention.Cdecl)]public static extern void SubscribeDomainMsg(long domainid, string topicname, FuncPtr func);}
}
这个调用库就完成了。
3.使用测试
添加c#控制台项目Test,引入DotNetForDDS性能,添加测试方法,验证订阅发布。
这里因为在同一个解决方案里面,可以通过c#直接调试到c++代码,具体可以网上搜索方法。
这里就不详细写了,有问题留言。测试效果:
当然这不完善,只是一个样例,目前是可以调用运行的,我还没有研究多线程的影响,内存释放这些,毕竟我对c++不熟悉。
相关文章:
opendds编译开发(c#封装)
opendds是对DDS协议的开源实现,具体可以查阅官网。 我使用的是源码编译开发,博文只针对windows平台。 环境准备 环境安装 1.visual studio 2022,我是企业版,安装需要选择c 2.Per下载安装,下载链接:https://strawberryperl.com…...
电子监管码预检剔除装置提示盒尺寸过短
问题:电子监管码预检剔除装置提示盒尺寸过短 现象:自动线监控程序报警提示“盒尺寸过短”。 原因:分盒设备拨盒的力度和距离、盒子在传送带的角度或传送带速度有所变化都会导致自动线出现“盒尺寸过短” 解决方法:根据传送带的速…...
【C++11特性】Lambda表达式(匿名函数)
一、函数对象 在C中,我们把所有能当作函数使用的对象当作函数对象。 一般来说,如果我们列出一个对象,而它的后面又跟有由花括号包裹的参数列表,就像fun(arg1, arg2, …),这个对象就被称为函数对象。函数对象大致可分为…...
【北京】昌平区某附小v3700存储双控故障维修案例
2025年4月22日,接到一位通过网络找到我们的北京老师求助,反馈该学校一台V3700存储的磁盘分区无法正常读取了,老师在机房检查时发现存储后面2个控制器均亮警告灯。急需修复该设备读取里面资料用于周末运动会所需。于是在网上找到我们协助进行排…...
汤晓鸥:计算机视觉的开拓者与AI产业化的先行者
名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 汤晓鸥:计算机视觉的开拓者与AI产业化的先行者 一、学术与创业之路 1. 从…...
MATLAB实现神经网络的OCR识别
使用说明: 运行要求: MATLAB R2020b 或更新版本已安装 Deep Learning Toolbox推荐使用GPU加速(训练时在代码开头添加 gpuDevice(1)) 代码特点: 使用MATLAB自带的MNIST手写数字数据集包含数据可视化、网络架构…...
车载软件架构 --- AUTOSAR的方法论
我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 钝感力的“钝”,不是木讷、迟钝,而是直面困境的韧劲和耐力,是面对外界噪音的通透淡然。 生活中有两种人,一种人格外在意别人的眼光;另一种人无论…...
Java 的创新与变革之路:从 JDK 7 到 JDK 23
Java 作为一种广泛应用的编程语言,其发展历程与 JDK(Java Development Kit)的演进紧密相连。自 JDK 7 起,Java 语言不断引入重大特性,持续重塑开发格局,推动性能、功能和开发体验的提升。本文将深入剖析 JD…...
LangChain、LlamaIndex、MCP、Spring AI、Ollama 和 DeepSeek 的定义、关系及典型架构设计
以下是 LangChain、LlamaIndex、MCP、Spring AI、Ollama 和 DeepSeek 的定义、关系及典型架构设计解析: 一、核心组件定义与功能 1. LangChain 定位:构建复杂 大语言模型(LLM)应用的通用框架。功能: 支持链式调用&am…...
Docker安装的mysql限制ip访问
1.问题背景 docker安装了mysql服务,服务器为Redhat9,我们希望通过防火墙规则直接限制访问的来源ip,只允许特定ip进行访问,其余ip需要被禁止。 2.排查过程 1.首先尝试了通过firewalld方式添加对应的防火墙规则, sud…...
怎么样才能在idea中写入spark程序
一、准备环境 1.安装Scala插件 专业版IDEA自带Scala插件,社区版需手动安装 确保插件版本与IDEA版本匹配 2.选择用哪个构建工具 sbt:适用于依赖管理简单、快速迭代的项目,需提前安装sbt工具24。 Maven:适合熟悉Java生态…...
MySQL的数据类型
目录 数据类型分类 数值类型 tinyint bit 编辑 小数(float) 小数(decimal) 字符串类型 char varchar 日期和时间类型 String类型 enum set find_ in_ set函数 我们今天来学习MySQL的数据分类。 数据类型分类 MySQL的字符型就是相当于字符串类型,所…...
Vue 中局部指令(directives)的用法详解
在 Vue.js 中,指令是一种特殊的属性,用于在 DOM 元素上绑定特殊行为。除了 Vue 内置的指令(如v-model、v-if),还可以自定义指令来封装可复用的功能。 什么是局部指令? 局部指令是在单个组件中定义和使用的…...
mac 基于Docker安装minio服务器
在 macOS 上基于 Docker 安装 MinIO 是一个高效且灵活的方案,尤其适合本地开发或测试环境。以下是详细的安装与配置步骤,结合了最佳实践和常见问题的解决方案: 一、安装 Docker Desktop 下载安装包 访问 Docker 官网,下载适用于 …...
Redis常用数据结构解析:从原理到实战应用
作为一名开发者,我深知Redis在缓存、队列等场景中的重要性。但要用好Redis,必须对其核心数据结构有透彻理解。本文将结合我的实践经验,详细讲解Redis五种最常用的数据结构及其典型应用场景,帮助你在开发中游刃有余。 一、String&…...
Druid监控sql导致的内存溢出
问题 druid监控sql在网页端显示,我的服务插入sql比较大,druid把执行过的sql保存在DruidDataSource类的成员变量JdbcDataSourceStat dataSourceStat; JdbcDataSourceStat类中的LinkedHashMap<String, JdbcSqlStat> sqlStatMap中&#…...
基于Python镜像创建docker镜像时pip install一直出现NewConnectionError的一种解决办法
用dockerfile创建docker镜像,在pip的时候一直是出现错误: 13.21 WARNING: Retrying (Retry(total4, connectNone, readNone, redirectNone, statusNone)) after connection broken by NewConnectionError(<pip._vendor.urllib3.connection.HTTPSConn…...
【机器学习】朴素贝叶斯
目录 一、朴素贝叶斯的算法原理 1.1 定义 1.2 贝叶斯定理 1.3 条件独立性假设 二、朴素贝叶斯算法的几种常见类型 2.1 高斯朴素贝叶斯 (Gaussian Naive Bayes) 【训练阶段】 - 从数据中学习模型参数 【预测阶段】 - 对新样本 Xnew 进行分类 2. 2 多项式朴素贝叶斯 (…...
服务器硬件老化导致性能下降的排查与优化
随着企业数字化转型的深入,服务器作为IT基础设施的核心载体,其稳定性与性能直接影响业务连续性。然而,硬件老化导致的性能衰减问题普遍存在且易被忽视。本报告通过系统性分析服务器硬件老化现象,提出多维度排查方法与优化方案&…...
学习记录:DAY19
Docker 部署与项目需求分析 前言 人总是本能地恐惧未知,令生活陷入到经验主义的循环之中。但我们终将面对。今天的目标是把 Docker 部署学完,然后对项目进行需求分析。 日程 下午 4:30:Docker 部署项目部分学完了,做下笔记。晚…...
机器学习中的数据转换:关键步骤与最佳实践
机器学习中的数据转换:关键步骤与最佳实践 摘要 :在机器学习领域,数据是模型的核心,而数据的转换是构建高效、准确模型的关键步骤之一。本文深入探讨了机器学习中数据转换的重要性、常见的数据类型及其转换方法,以及在…...
【C++教程】三目运算符
C的三目运算符(条件运算符)是一种简洁的条件表达式工具,其形式为 条件 ? 表达式1 : 表达式2。以下是对其用法的详细总结: 1. 基本用法 条件判断:若条件为真,返回表达式1的值;否则返回表达式2…...
鼠标获取坐标 vs 相机获取坐标
Cesium鼠标点击获取坐标 vs 相机视角获取坐标 鼠标点击获取坐标流程图 #mermaid-svg-WwyCUbcFQekWG97C {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-WwyCUbcFQekWG97C .error-icon{fill:#552222;}#mermaid-svg-W…...
HarmonyOS SDK助力鸿蒙版今日水印相机,真实地址防护再升级
今日水印相机是一款真实记录"工作"和"生活"的水印拍照APP。作为专业的可信影像服务平台,今日水印相机依托时间、地点、身份三重数字水印技术,为企业和个人提供考勤打卡、外勤巡检、生活美好时刻记录等场景的可信存证服务。 面对虚拟…...
数组滑动窗口单调栈单调队列trick集【leetcode hot100 c++速查!!!】
文章目录 栈经典模版题-括号最小栈字符串解码每日温度柱状图的最大矩形 堆数组中的第k个最大元素前k个高频元素数据流中的中位数 数组最大子数组和合并区间轮转数组除自身以外数组的乘积 我们尝试将这三类问题放在一个专题中进行讨论,是因为它们有很多公共的部分。 …...
半监督学习与强化学习的结合:新兴的智能训练模式
📌 友情提示: 本文内容由银河易创AI(https://ai.eaigx.com)创作平台的gpt-4o-mini模型生成,旨在提供技术参考与灵感启发。文中观点或代码示例需结合实际情况验证,建议读者通过官方文档或实践进一步确认其准…...
C++ 可调用实体 (详解 一站式)
目录 可调用实体 函数对象 函数指针 成员函数指针 空指针的使用(了解) 可调用实体 讲到调用这个词,我们首先能够想到普通函数和函数指针,在学习了类与对象的基础知识后,还增加了成员函数,那么它们都被…...
架构师与高级工程师:职业差异与进阶之路
“学而不思则罔,思而不学则殆。”——孔子 解释:该名言强调了学习和思考的结合,对应文章中工程师若想晋升为架构师,不能仅满足于对工具的学习,还要深入探究事物本质,培养深度思考能力,体现了思…...
声纹监测技术在新能源汽车的应用场景解析
新能源汽车声纹监测技术可应用于多个场景,以下是详细解析: 故障诊断 电机系统故障检测:新能源汽车的电机在运行过程中会发出特定的声音。通过声纹监测技术,采集电机运行时的声音信号并进行分析,能够及时发现电机轴承磨…...
About why docker application mode taskmanager not down in time
Tips: docker flink application mode 当任务完成或者jobmanager cancel,则taskmanager会因为flink集群机制继续保留监听等待jobmanager发送任务命令,当超过大约6 mins,taskmanager便会自动exited退出。...
2025-4-27-C++ 学习 数组(2)
数组 2025-4-27-C 学习 数组(2)P2550 [AHOI2001] 彩票摇奖题目描述输入格式输出格式输入输出样例 #1输入 #1输出 #1 说明/提示题解代码 P2615 [NOIP 2015 提高组] 神奇的幻方题目背景题目描述输入格式输出格式输入输出样例 #1输入 #1输出 #1 输入输出样例…...
timerfd定时器时间轮定时器
目录 一、timerfd定时器 二、timerfd定时器代码演示 三、时间轮定时器 一、timerfd定时器 timerfd是一种通过文件描述符管理定时器的机制 #include <sys/timerfd.h> int timerfd_create(int clockid, int flags); 作用:创建定时器的文件描述符 返回值&…...
什么是数据中心代理IP?有哪些用途?
在海外代理IP的选择中,数据中心代理IP是一个热门选项。这些代理服务器为用户分配了非ISP(互联网服务提供商)提供的IP地址,而是由第三方云服务提供商所提供的,通常位于数据中心内的服务器上,由托管和云公司所…...
机器学习分类模型性能评估:应对类别不平衡的策略与指标
在机器学习的世界里,模型们就像一群努力破案的侦探,而数据就是它们的“犯罪现场”。今天,咱们的主角——一个自命不凡的分类模型,接到了一个看似简单的任务:揪出那些患有罕见疾病的患者。这听起来是不是很容易…...
论文导读 - 基于边缘计算、集成学习与传感器集群的便携式电子鼻系统
基于边缘计算、集成学习与传感器集群的便携式电子鼻系统 原论文地址:https://www.sciencedirect.com/science/article/abs/pii/S0925400522015684 引用此论文(GB/T 7714-2015): WANG T, WU Y, ZHANG Y, et al. Portable electr…...
Molex莫仕连接器:增强高级驾驶辅助系统,打造更安全的汽车
随着对先进、高耗电量的系统的需求日益增长,电气化进程不断加速,汽车行业正处于一个十字路口。现代汽车面临着关键挑战,即满足不断增长的电力需求,特别是高级驾驶辅助系统(ADAS)等关键技术的需求。 由于现今的汽车比以往需要更多的…...
[密码学实战]SDF之密钥管理类函数(二)
[密码学实战]SDF之密钥管理类函数(二) 一、标准解读:GM/T 0018-2023核心要求 1.1 SDF接口定位 安全边界:硬件密码设备与应用系统间的标准交互层 功能范畴: #mermaid-svg-af5D1B1iHx3K8vSU {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16…...
多实例情况下,实例名较长dbca失败
dbca创建数据库,但是失败,提示ORA-01158 看来千锤百炼的dbca脚本还是菜,直觉上讲不应该mount上,看一下Action 本地已存在多个实例且名称前缀类似,下一步应该分析dbca日志和实例的alert.log 改为 一个简短的实例名就…...
模电——PN结
一、铺垫 这篇文章将会吊打一切、只会从电子、电场力的角度来阐述PN结为啥会形成、和变薄、变厚;不再考虑空穴这种东西;——提出空穴的人,真不是东西 我敢打赌,全网,我的说法不一定对,但是绝对是唯一可以…...
c++11 : 特殊类设计
目录 一 设计一个类:只能在堆上创建对象 二 设计一个类:只能在栈上创建对象 三 设计一个类:不能被拷贝 四 设计一个类:不能被继承 五 设计一个类: 只能创建一个对象(单例模式) 六 饿汉和懒汉模式的对比 一 设计一个类…...
算法笔记.kruskal算法求最小生成树
题目:(来源:AcWing) 给定一个 n 个点 m 条边的无向图,图中可能存在重边和自环,边权可能为负数。 求最小生成树的树边权重之和,如果最小生成树不存在则输出 impossible。 给定一张边带权的无向…...
量子算法调试:Grover算法搜索空间压缩过程可视化方案
一、Grover算法核心原理回顾 Grover算法通过以下两步迭代实现搜索空间压缩: Oracle操作(相位翻转) 标记目标状态: Uω∣x⟩={−∣x⟩x=ω∣x⟩x≠ωUω∣x⟩={−∣x⟩∣x⟩x=ωx=ω 扩散操作(振幅放大) 执行反转平均操作: D=2∣s⟩⟨s∣−ID=2∣s⟩⟨s∣−I 其…...
零基础搭建AI作曲工具:基于Magenta/TensorFlow的交互式音乐生成系统
引言:当AI遇见莫扎特 “音乐是流动的建筑”,当人工智能开始理解音符间的数学规律,音乐创作正经历着前所未有的范式变革。本文将手把手教你构建一套智能作曲系统,不仅能够生成古典钢琴小品,还能实现巴洛克与爵士风格的…...
springboot项目文件上传到服务器本机,返回访问地址
文件上传到服务器本机,然后给出访问地址: 具体如下: 1、添加必要的工具类依赖 <!-- 文件上传工具类 --><dependency><groupId>commons-fileupload</groupId><artifactId>commons-fileupload</artifactId>…...
mysql community 8.0.23升级到8.0.42再到8.4.5
近日生产服务器准备正式试运行,数据进入客户的专有网络,于是甲方派了人过来测漏洞,结果扫出一大堆。其间关于mysql的漏洞300多个,吓死人。给出的补丁地址,打开来看,全部是英文,可能是一些什么测…...
ubuntu安装docker,conda,tmux,btop,nvitop
在 Ubuntu 上安装 Docker Engine (使用华为云源) 1. 更新系统软件包 sudo apt update sudo apt upgrade -y2. 安装必要的依赖包 sudo apt install -y \ca-certificates \curl \gnupg \lsb-release \git \vim \wget3. 添加 Docker 的 GPG 密钥 (来自华为云镜像) # 创建用于存…...
大模型在肝硬化腹水风险预测及临床方案制定中的应用研究
目录 一、引言 1.1 研究背景与意义 1.2 研究目的与创新点 1.3 研究方法与数据来源 二、肝硬化及大模型相关理论基础 2.1 肝硬化概述 2.2 大模型技术原理 2.3 大模型在医疗领域的应用现状 三、大模型预测肝硬化腹水术前风险 3.1 术前风险因素分析 3.2 大模型预测术前…...
孙宇晨将出席迪拜Token2049 与特朗普次子共话加密未来
据官方消息,波场TRON创始人孙宇晨将出席5月1日在迪拜举办的Token2049峰会上,并与特朗普次子埃里克特朗普(Eric Trump)进行一场备受瞩目的炉边对话,出席对话的人士还包括特朗普家族支持的去中心化金融项目WLFI(World Liberty Financial)的联合创始人Zach Witkoff。这场对话不仅彰…...
深入理解同源策略与跨域资源共享(CORS)
深入理解同源策略与跨域资源共享(CORS) 前言 在当今的 Web 开发中,跨域资源请求已成为常见需求。然而,浏览器的同源策略(Same-Origin Policy)作为最基础的安全机制,限制了不同源之间的资源交互…...
Vue 生命周期钩子总结
Vue 生命周期钩子总结 Vue 组件的生命周期钩子允许在组件不同阶段执行自定义逻辑。以下是各阶段的钩子函数及其用途、触发时机和注意事项: 1. 生命周期阶段概览 Vue 组件的生命周期分为四个主要阶段: 创建(Creation)࿱…...