我在土地里,你在白云间,携手只需抬头望眼和垂目依恋。
爱情就在字里行间和生活离断。
只要你不舍,我就不弃。
真希望我们的爱情里只有浪漫。
过往,我被自己的痴情压的好累。
迷迷蒙蒙,看你,却不清晰。
所以,我就一路莽撞,伤害了你,也伤了自己。
我心里有泪,我一生只想为你,流不尽的爱意,擦拭不断怜惜。
我回望时光,看到了你的倩影和伸出来的手,我想拥抱,已经拥有。
我的生命里不是没有你,只是我们早已经融为一体,却似没有了你。我错误了你的爱意。
我想抽打自己,但却怕伤害了你。那份情、那份意!
心中的压抑不再是压抑,心中的苦闷不再是苦闷,唯一爱才能拯救自己。
生活需要我们彼此惺惺相惜,成全自己,也成全了你。
唯有诗句才能表达我的心意。忘却好久的东西。
IDEA 全称IntelliJ IDEA,是用于java语言开发的集成环境(也可用于其他语言),IntelliJ在业界被公认为最好的java开发工具之一,尤其在智能代码助手、代码自动提示、重构、J2EE支持、Ant、JUnit、CVS整合、代码审查、 创新的GUI设计等方面的功能可以说是超常的。
可以说,IDEA是Java程序员必须要融会贯通的工具!今天就给大家分享这本清华大学出版的IDEA全解手册《IDEA入门与实战》!全书整整685页,全书以全面的知识体系和实战导向为特点。作者通过深入浅出的讲解,涵盖了IntelliJ IDEA的安装、更新、注册和卸载,基础配置和高级配置,以及通过IDEA创建Java项目、配置项目和模块等内容。重点在于通过实际项目示例,教授读者如何运用IDEA解决实际开发问题,将理论与实践相结合。
此外,资料中还强调高效开发技巧,教授一些IntelliJIDEA的高级功能和快捷操作,帮助读者提升开发效率。作为作者近十年Java开发经验的结晶,其中还分享了实际项目经验、技巧和最佳实践,为初学者提供宝贵的指导。综合而言,本子里旨在帮助初学者快速掌握IntelliJIDEA的使用技巧,从而在实际Java开发中更加熟练地运用该集成开发环境,提高开发效率和质量。
部分目录: 部分截图: 获取方式: 下方评论区留言或主动私信我,博主看到都会挨个回复到的!
进入Tomcat下的bin目录 切换到tomcat安装目录下的bin目录。
如不知安装目录,可以使用:
find / -name 'tomcat*' 查找。
进入bin目录,通过命令启动。
方法一:当前会话启动Tomcat (该方式是直接后台启动。当关闭linux会话窗口,tomcat服务也随之关闭。)
./startup.sh 方法二:当前会话启动Tomcat 带日志 (该方式启动,会显示日志,不能输入linux命令。当关闭linux会话窗口,tomcat服务也随之关闭。)
./catalina.sh 方法三:后台永久启动Tomcat (该方式启动,作为linux服务一直运行,当关闭linux会话窗口,不会停止tomcat服务)
nohup ./startup.sh & 查看tomcat日志文件 tomcat主目录下的logs目录,存放tomcat和项目的日志文件
tail -f catalina.out 查看Tomcat进程 ps -ef | grep 'tomcat' Kill进程 kill -9 进程号 查看Linux端口 使用ss命令查询指定的端口号
ss -tuln | grep '8080'
1.vue3没有this概念,我们需要要引入router
import router from '@/router'
2.打开新窗口
const { href } = router.resolve({
path: route,
query: { id: row.worksId, labelId: row.primaryLabel },
})
window.open(href, '_blank') //打开新的窗口
3.获取对应参数
const { id } = ctx.root.$route.query
学遥感的避免不了使用哨兵数据,毕竟10m的分辨率可以满足大部分的定量分析,同时也是最重要的一点,它免费!!!
但如果一幅一幅去下载影像实在是太慢了,特别是如果需要研究长时间序列的影像,那下载数据就成了最痛苦的环节了。所以这里给大家分享一下如何使用Python和IDM批量下载哨兵二号数据,当然欧空局的其他数据也可以下载。
这里说明一下,IDM下载的代码部分参考了一些博主的代码,但我找不到他们了(泪目)。如果有所冒犯,请联系作者删除。
一、注册账号 想要下载数据,你总归需要一个账号吧!欧空局官网,点击左上角login注册一个账号先。
二、制作兴趣区范围 我们在查找数据时一般都需要一个研究区,如一个省或者一个市,那么就需要研究区的矢量文件去限制我们查找数据的范围。这里需要使用一个导出GeoJSON的工具,先画出研究区再导出GeoJSON即可。
三、查找数据 欧空局发布过一个Python的包sentinelsat,大家有兴趣可以自己看看文档,通过这个包我们可以通过日期、云量、范围、卫星类型等查询我们需要的影像数据。
代码中的注释比较详细,所以我就不过多介绍了。
def Search_data(login, key, path_geojson, start_date, end_date, name, product_type, cloud, filepath): """ :param login: 欧空局账号,字符串类型 :param key: 欧空局密码,字符串类型 :param path_geojson: 兴趣区路径及文件名 :param start_date: 开始时间,字符串 :param end_date: 结束时间,字符串 :param name: 卫星名称 :param product_type: 卫星类型 :param cloud: 云量筛选,格式:(0,15) :param filepath: Url保存路径及文件名 :return: 返回存有下载链接的excel路径 """ api = SentinelAPI(login, key, 'https://scihub.copernicus.eu/dhus') # 登陆账号https://scihub.copernicus.eu/apihub/ footprint = geojson_to_wkt(read_geojson(path_geojson)) # 读取兴趣区,兴趣区由http://geojson.io导出 products = api.query(footprint, date=(start_date, end_date), # 搜索的日期范围 platformname=name, # 卫星平台名,Sentinel-2 producttype=product_type, # 产品数据等级,Sentinel-2: S2MSI2A,S2MSI1C,S2MS2Ap/Sentinel-1:SLC,GRD,OCN cloudcoverpercentage=cloud) # 云量百分比 # 搜索A、B双星的数据 row = 0 workbook_write = xlwt.
可以使用Python的geopy库来计算经纬度坐标之间的距离。如果尚未安装geopy库,可以使用以下命令来安装它:
pip install geopy 下面是一个Python函数,该函数接受两个经纬度坐标对,并计算它们之间的距离。
from geopy.distance import geodesic def calculate_distance(coord1, coord2): """ 计算两个经纬度坐标之间的距离 :param coord1: 第一个坐标,格式为 (纬度, 经度) :param coord2: 第二个坐标,格式为 (纬度, 经度) :return: 距离(单位:千米) """ distance = geodesic(coord1, coord2).kilometers return distance # 示例坐标 coordinate1 = (40.7128, -74.0060) # 纽约市的经纬度坐标 coordinate2 = (34.0522, -118.2437) # 洛杉矶的经纬度坐标 # 计算距离 distance = calculate_distance(coordinate1, coordinate2) distance 在上述代码中,导入了geopy库中的geodesic函数,然后定义了calculate_distance函数,该函数接受两个坐标对,并使用geodesic函数计算它们之间的距离(以千米为单位)。最后,我们提供了两个示例坐标,并计算它们之间的距离。
请注意,您需要根据您的具体需求提供正确的经纬度坐标对来计算距离。
如果这对您有所帮助,希望点赞支持一下作者! 😊
点击查看原文
软件下载
软件:Maple版本:2022
语言:简体中文
大小:2.81G
安装环境:Win11/Win10/Win8/Win7硬件要求:CPU@2.0GHz 内存@4G(或更高)下载通道①百度网盘丨64位下载链接:
https://pan.baidu.com/s/1HJIGZckvH59m5CzbbtRXRg
提取码:4567
软件介绍
Maple是一个通用型的商用计算机代数系统,让数学问题的分析、探索、可视化及求解变得更为简便。包含高级数学计算功能、可视化、专业应用领域等众多新功能,对于数学家、教育工作者、工程师和科学家非常有用。 安装步骤
1.鼠标右击【Maple2022(64bit)】压缩包(win11及以上系统需先点击“显示更多选项”)选择【解压到 Maple2022(64bit)】。
2.打开解压后的文件夹,鼠标右击【setup-windows】选择【以管理员身份运行】。
3.点击【OK】。
4.点击【Next】。
5.选择【I accept the……】,点击【Next】。
6.修改路径地址中的首字符C可更改安装位置(如:将C改为D软件将安装到D盘),点击【Next】。
7.点击【Next】。
8.点击【Next】。
9.取消勾选【enable……】和【check for……】,点击【Next】。
10.点击【Next】。
11.安装中……
12.取消勾选【Activate……】,点击【Finish】。
13.打开安装包解压后的【Maple2022(64bit)】文件夹,双击打开【Crack】文件夹。
14.鼠标右击【maple.dll】选择【复制】。
15.鼠标右击桌面【Maple 2022】图标选择【打开文件所在的位置】。
16.鼠标右击空白处选择【粘贴】。
17.点击【替换目标中的文件】。
18.回到步骤13打开的【Crack】文件夹,鼠标右击【license.dat】选择【复制】。
19.鼠标右击桌面【Maple 2022】图标选择【打开文件所在的位置】。
20.点击路径地址中的【Maple 2022】。
21.双击打开【license】文件夹。
22.鼠标右击选择【粘贴】。
23.双击【Maple 2022】图标启动软件。
24.安装成功!
---------------------------END--------------------------- 题外话 感兴趣的小伙伴,赠送全套Python学习资料,包含面试题、简历资料等具体看下方。
👉CSDN大礼包🎁:全网最全《Python学习资料》免费赠送🆓!(安全链接,放心点击)
一、Python所有方向的学习路线
Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照下面的知识点去找对应的学习资源,保证自己学得较为全面。
二、Python必备开发工具
工具都帮大家整理好了,安装就可直接上手!
三、最新Python学习笔记
当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。
四、Python视频合集
观看全面零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
五、实战案例
纸上得来终觉浅,要学会跟着视频一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
六、面试宝典
简历模板 👉CSDN大礼包🎁:全网最全《Python学习资料》免费赠送🆓!(安全链接,放心点击)
若有侵权,请联系删除
strip()函数是Python字符串方法之一,用于处理字符串的前导和尾随空白字符。它返回一个新字符串,该字符串是原始字符串去除前导和尾随空格(包括空格、制表符、换行符等)后的结果。
详细说明 def strip(self, chars=None, /): """ 返回一个去除前导和尾随字符的字符串副本。 :param chars: (可选)指定要去除的字符集合(字符串)。默认为None,表示去除所有空白字符。 :return: 返回去除前导和尾随字符后的字符串副本。 """ self:表示要操作的字符串对象。chars:是一个可选参数,用于指定要去除的字符集合。如果未提供此参数,默认会去除所有空白字符。 示例用法 # 基本用法 - 去除前导和尾随空格 text = " Hello, World! " result = text.strip() print(result) # 输出: "Hello, World!" # 指定要去除的字符集合 text = ">>>Python<<<" result = text.strip('><') # 去除前导和尾随的">"和"<" print(result) # 输出: "Python" 术语/函数解释 strip():字符串方法,用于去除前导和尾随空白字符。self:要操作的字符串对象。chars:可选参数,指定要去除的字符集合(字符串)。默认为None,表示去除所有空白字符。字符集合:一组字符,可以指定要去除的字符。在示例中,">“和”<"被指定为要去除的字符集合。返回值:strip()函数返回一个去除前导和尾随字符后的字符串副本。 如果这对您有所帮助,希望点赞支持一下作者! 😊
点击查看原文
list实体转List<Map<String, Object>>集合 List<Entity> a = new ArrayList<>(); String str = JSON.toJSONString(a); List<Map<String, Object>> map = JSONArray.parseObject(str, List.class); list排序 List<Map<String, String>> list = new ArrayList<>(); Map<String, String> a = new HashMap<>(); a.put("a","11111"); Map<String, String> b = new HashMap<>(); b.put("a","22222"); Map<String, String> c = new HashMap<>(); c.put("a","11111"); list.add(a); list.add(b); list.add(c); list = list.stream().sorted(Comparator.comparing(item -> item.toString())).collect(Collectors.toList()); /* // 另一种排序方法 Collections.sort(list, new Comparator<Map<String, String>>() { public int compare(Map<String, String> o1, Map<String, String> o2) { return new BigDecimal(o1.
什么是Go语言?
Go(又称 Golang)是 Google 的 Robert Griesemer,Rob Pike 及 Ken Thompson 开发的一种静态强类型、编译型语言。Go 语言语法与 C 相近,但功能上有:内存安全,GC(垃圾回收),结构形态及 CSP-style 并发计算。可以Linux、Mac、Windows。
Go语言的用途?
服务端开发:以前你使用C或者C++做的那些事情,用Go来做很合适,例如日志处理、文件系统、监控系统等;DevOps:运维生态中的Docker、K8s、prometheus、grafana、open-falcon等都是使用Go语言开发;网络编程:大量优秀的Web框架如Echo、Gin、Iris、beego等,而且Go内置的 net/http包十分的优秀;Paas云平台领域:Kubernetes和Docker Swarm等;分布式存储领域:etcd、Groupcache、TiDB、Cockroachdb、Influxdb等;区块链领域:区块链里面有两个明星项目以太坊和fabric都使用Go语言;容器虚拟化:大名鼎鼎的Docker就是使用Go语言实现的;爬虫及大数据:Go语言天生支持并发,所以十分适合编写分布式爬虫及大数据处理。 Go语言安装?
Go语言安装包官方下载地址:https://golang.org/dl/,如果打不开或下载太慢,换成中国区下载地址:https://golang.google.cn/dl/
注意:安装目录不可以有中文。然后配置系统环境变量,添加GOROOT,值为Go的安装目录,例如D:\Program Files\Go(安装时默认勾选安装)。然后可以在cmd里执行go version,如果出现类似输出:go version go1.19.1 windows/amd64,说明安装配置成功,接下来就可以进行开发运行Go程序了。
Go语言开发工具安装?
Go语言开发工具有:GoLand,VsCode,LiteIDE,Eclipse等。本篇介绍VsCode安装,因为VsCode使用广泛,可以开发编译多种语言。
VsCode官网地址:https://code.visualstudio.com/
点击下载VsCode稳定版即可,如果下载太慢,可以将下载链接中az764295.vo.msecnd.net替换成vscode.cdn.azure.cn,速度蹭蹭提上来。
VsCode界面改成中文显示?
在VsCode的扩展搜索框输入chinese,找到中文语言安装包,点击"install"进行安装,安装完成后点击"Change Language and Restart",VsCode重启后显示中文界面。
Vscode安装Go支持扩展:VsCode的扩展搜索框输入Go,找到Go扩展,点击"install"进行安装
VsCode编写第一个Go程序?
新建文件,选择Go语言,编写一个简单的Go程序,如下:
package main import "fmt" func main() { fmt.Println("Hello, World!") } 如果出现下面的错误提示,点击安装后还是报错,则需要代码,在VsCode终端输入以下两个命令:
$ go env -w GO111MODULE=on $ go env -w GOPROXY=https://goproxy.io,direct 如果提示一下提示,则在终端输入命令:go env -w GO111MODULE=auto
再次点击运行--以非调试模式运行,成功运行!
文章目录 一、构造函数分类1、构造函数分类简介2、构造函数分类代码分析无参构造函数有参构造函数拷贝构造函数 二、代码示例 - 三种类型构造函数定义与调用 一、构造函数分类 1、构造函数分类简介 C++ 构造函数可以分为以下几类 :
无参构造函数 : 最简单也是默认的构造函数 , 函数没有参数 , 如果创建一个对象 , 没有传入参数 , 调用的就是该类型的 构造函数 ;有参构造函数 : 带参数的 构造函数 , 创建 实例对象 时 , 为成员变量提供初始值 ;拷贝构造函数 : 拷贝现有 实例对象 , 并以此拷贝的副本为数据 创建一个新的 实例对象 , 相当于创建了一个现有实例对象的副本 , 参数中包含 一个 相同类型 实例对象 引用 ; 2、构造函数分类代码分析 定义成员变量 : 下面的简介示例中是以该成员变量为基础进行赋值的 ;
public: int m_age; char* m_name; 无参构造函数 无参构造函数 : 只负责为指针类型的成员变量分配内存 , 并赋值一个初始值 , 没有具体的赋值信息 , 该初始化只能为 成员变量 赋值一个默认值 ;
什么是线程? 线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。程序员可以通过它进行多处理器编程,你可以使用多线程对运算密集型任务提速。比如,如果一个线程完成一个任务要100毫秒,那么用十个线程完成改任务只需10毫秒。Java在语言层面对多线程提供了卓越的支持,它也是一个很好的卖点。欲了解更多详细信息请点击这里。
2) 线程和进程有什么区别? 线程是进程的子集,一个进程可以有很多线程,每条线程并行执行不同的任务。不同的进程使用不同的内存空间,而所有的线程共享一片相同的内存空间。别把它和栈内存搞混,每个线程都拥有单独的栈内存用来存储本地数据。更多详细信息请点击这里。
3) 如何在Java中实现线程? 在语言层面有两种方式。java.lang.Thread 类的实例就是一个线程但是它需要调用java.lang.Runnable接口来执行,由于线程类本身就是调用的Runnable接口所以你可以继承java.lang.Thread 类或者直接调用Runnable接口来重写run()方法实现线程。更多详细信息请点击这里.
4) 用Runnable还是Thread? 这个问题是上题的后续,大家都知道我们可以通过继承Thread类或者调用Runnable接口来实现线程,问题是,那个方法更好呢?什么情况下使用它?这个问题很容易回答,如果你知道Java不支持类的多重继承,但允许你调用多个接口。所以如果你要继承其他类,当然是调用Runnable接口好了。更多详细信息请点击这里。
6) Thread 类中的start() 和 run() 方法有什么区别? 这个问题经常被问到,但还是能从此区分出面试者对Java线程模型的理解程度。start()方法被用来启动新创建的线程,而且start()内部调用了run()方法,这和直接调用run()方法的效果不一样。当你调用run()方法的时候,只会是在原来的线程中调用,没有新的线程启动,start()方法才会启动新线程。更多讨论请点击这里
7) Java中Runnable和Callable有什么不同? Runnable和Callable都代表那些要在不同的线程中执行的任务。Runnable从JDK1.0开始就有了,Callable是在JDK1.5增加的。它们的主要区别是Callable的 call() 方法可以返回值和抛出异常,而Runnable的run()方法没有这些功能。Callable可以返回装载有计算结果的Future对象。我的博客有更详细的说明。
8) Java中CyclicBarrier 和 CountDownLatch有什么不同? CyclicBarrier 和 CountDownLatch 都可以用来让一组线程等待其它线程。与 CyclicBarrier 不同的是,CountdownLatch 不能重新使用。点此查看更多信息和示例代码。
9) Java内存模型是什么? Java内存模型规定和指引Java程序在不同的内存架构、CPU和操作系统间有确定性地行为。它在多线程的情况下尤其重要。Java内存模型对一个线程所做的变动能被其它线程可见提供了保证,它们之间是先行发生关系。这个关系定义了一些规则让程序员在并发编程时思路更清晰。比如,先行发生关系确保了:
线程内的代码能够按先后顺序执行,这被称为程序次序规则。对于同一个锁,一个解锁操作一定要发生在时间上后发生的另一个锁定操作之前,也叫做管程锁定规则。前一个对volatile的写操作在后一个volatile的读操作之前,也叫volatile变量规则。一个线程内的任何操作必需在这个线程的start()调用之后,也叫作线程启动规则。一个线程的所有操作都会在线程终止之前,线程终止规则。一个对象的终结操作必需在这个对象构造完成之后,也叫对象终结规则。可传递性 我强烈建议大家阅读《Java并发编程实践》第十六章来加深对Java内存模型的理解。
10) Java中的volatile 变量是什么? volatile是一个特殊的修饰符,只有成员变量才能使用它。在Java并发程序缺少同步类的情况下,多线程对成员变量的操作对其它线程是透明的。volatile变量可以保证下一个读取操作会在前一个写操作之后发生,就是上一题的volatile变量规则。点击这里查看更多volatile的相关内容。
11) 什么是线程安全?Vector是一个线程安全类吗? (详见这里) 如果你的代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码。如果每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全的。一个线程安全的计数器类的同一个实例对象在被多个线程使用的情况下也不会出现计算失误。很显然你可以将集合类分成两组,线程安全和非线程安全的。Vector 是用同步方法来实现线程安全的, 而和它相似的ArrayList不是线程安全的。
12) Java中什么是竞态条件? 举个例子说明。 竞态条件会导致程序在并发情况下出现一些bugs。多线程对一些资源的竞争的时候就会产生竞态条件,如果首先要执行的程序竞争失败排到后面执行了,那么整个程序就会出现一些不确定的bugs。这种bugs很难发现而且会重复出现,因为线程间的随机竞争。一个例子就是无序处理,详见答案。
13) Java中如何停止一个线程? Java提供了很丰富的API但没有为停止线程提供API。JDK 1.0本来有一些像stop(), suspend() 和 resume()的控制方法但是由于潜在的死锁威胁因此在后续的JDK版本中他们被弃用了,之后Java API的设计者就没有提供一个兼容且线程安全的方法来停止一个线程。当run() 或者 call() 方法执行完的时候线程会自动结束,如果要手动结束一个线程,你可以用volatile 布尔变量来退出run()方法的循环或者是取消任务来中断线程。点击这里查看示例代码。
14) 一个线程运行时发生异常会怎样? 这是我在一次面试中遇到的一个很***钻的Java面试题, 简单的说,如果异常没有被捕获该线程将会停止执行。Thread.
因为工作需要最近在做虚幻引擎5.1这方面的部署,简单记录一下最近学习的一点知识。
本文参考:虚幻引擎官网文档
UE5像素流送原理及多用户公网部署小白教程202211022220
一、像素流送介绍 像素流送就是在云端服务器上运行虚幻引擎应用程序,通过WebRTC将渲染的帧和音频流送到浏览器和移动设备。通过像素流送可将打包的虚幻引擎应用程序在桌面PC或云端服务器上运行,也可包含少量虚幻引擎中自带的网络服务。使用者通过任意现代网络浏览器进行连接(电脑版或移动版),并从虚幻引擎应用程序流送渲染的帧和音频。不需要使用者安装或下载其他内容。操作类似于从YouTube或Netflix下载一个视频,区别是使用者可使用键盘、鼠标、触控输入,甚至在播放器网页中创建的自定义HTML5UI来与应用程序进行交互。 二、针对组成项目流送系统的组件及其工作方式进行的高阶讲解 无论是针对电脑平台、移动操作系统或主机进行开发,使用者均会在一台设备上运行虚幻引擎应用程序。此设备既负责运行gameplay逻辑,又负责将游戏世界渲染到屏幕上。多人联网游戏可能会将gameplay逻辑的部分分布在应用程序的多个实例中,但每个个体实例仍然负责渲染其自身玩家的游戏世界。使用HTML5部署选项来创建一个可在网页浏览器中运行的项目版本时,游戏逻辑和渲染仍在每个使用者的网页浏览器中本地发生。利用像素流送可以在用户不可见的电脑上远程运行虚幻引擎应用程序。举例而言,这台电脑可以是机构中的一台实体电脑,也可以是云端服务提供的虚拟机。虚幻引擎将使用该电脑可用的资源(CPU、GPU、内存等)来运行游戏逻辑并渲染每一帧。它会不断将此渲染输出编码到一个媒体流送中,再通过一个轻量级的网页服务堆栈进行传递。用户即可在其他电脑和移动设备上运行的标准网页浏览器中查看直播流送。 图片来源于虚幻引擎官网
对于用户而言,这种体验就像是在YouTube或Netflix上观看视频流送,但有2点例外:
流送并非播放预先录制的视频片段,而是播放虚幻引擎实时生成的渲染帧和音频。用户可通过自己的浏览器对体验进行控制,将键盘、鼠标、触摸事件和播放器网页发出的自定义事件发送回虚幻引擎。 优点
使用像素流送系统有以下几个优点:
移动设备和轻量级网页浏览器能借此显示原本无法显示的高质量画面。其能借助拥有强大GPU的本地桌面应用程序中可用的渲染功能,以高分辨率显示复杂场景。用户无需提前下载大型可执行文件或内容文件,也不需要安装任何内容。用户需要下载的唯一内容便是播放的媒体流送。无需创建并发布多个单独的包即可支持多平台。针对Windows或Linux打包应用程序后,用户使用任意平台均可体验项目。用户可在任意支持WebRTC连接模型的主流浏览器(如Google Chrome和Mozilla Firefox)中,在电脑、iOS和Android平台观看流送。详情参见像素流送参考。像素流送系统所含的组件数极少,在本地网络中进行设置相对容易。然而,经验丰富的团队也完全可以将其用作基础来创建自定义云端平台,部署网页服务。像素流送使用WebRTC点对点通信框架,使用者和虚幻引擎应用程序之间的延迟很低。 架构
下图概括了简单像素流送设置的组件:
图片来源于虚幻引擎官网
组件
像素流送插件 - 此插件在虚幻引擎中运行。其使用H.264视频压缩对每个渲染帧的最终结果进行编码,将这些视频帧随游戏音频一同打包到媒体流送中,并通过直接点对点连接将该流送发送到一个或多个连线的浏览器上。信令和Web服务器- 信令和Web服务器负责交涉浏览器和像素流送插件之间的连接,将播放媒体流送的HTML和JavaScript环境提供给浏览器。 连接进程
启动所有像素流送组件时,在虚幻引擎中运行的像素流送插件首先将建立到信令和Web服务器的链接。客户端会连接到信令服务器,服务器将对客户端提供一个HTML页面,其中包含播放器控件和以JavaScript编写的控制代码。用户开始流送时,信令服务器将进行交涉,在客户端浏览器和虚幻引擎之间建立直接连接。(浏览器和虚幻引擎须了解相互的IP地址,此连接方能工作。如两者在同一网络中运行,通常它们可看到各自的IP地址。然而在两个端点之间运行的网络地址转换(NAT)服务可能对任意一方的外部可见IP地址进行修改。解决此问题的方法通常是是用STUN或TURN服务器,告知每个组件其自身的外部可见IP地址。欲知详情,请参阅创建主机和网络连接指南。客户端和虚幻引擎之间的连接建立后,像素流送插件便会直接开始将媒体流送到浏览器。来自客户端的输入由播放器页面的JavaScript环境直接发送回虚幻引擎中。即使媒体流送已经开始播放,信令和Web服务器仍会维持其与浏览器和虚幻引擎的连接,以便在必要时将用户从流送中移除,并处理浏览器造成的连接断开。
如需了解上述架构设置的详细说明,请参见像素流送入门。 三、虚幻引擎像素流送入门 采用以下步骤将虚幻引擎项目渲染输出从本地网络流送到浏览器和移动设备。
此页上的步骤图像展示流程中使用的项目 第三人称蓝图 模板构建。实际上该步骤可用于所有虚幻引擎项目。
先决条件
检查操作系统和硬件- 像素流送插件只能在运行Windows和Linux操作系统的电脑上编码视频,对电脑的GPU硬件还有一定要求。欲知详情,请查阅像素流送参考。安装node.js - 如果电脑上尚未安装 node.js,则需要下载并安装。打开网络端口- 必须打开本地网络上的以下端口进行通信:80、888。如需修改默认端口,请查阅像素流送参考。停止其他web服务器 - 如果电脑正在运行其他Web服务器,则将其停止。IP地址- 如果你希望通过网络测试像素流,你需要知悉电脑的IP地址。
不过,你可以先通过LAN或VPN测试像素流送。你可以使用 localhost 或 127.0.0.1 作为你的像素流IP地址。 如果尝试从不同网络的电脑或移动设备上进行连接,则你可能需要将信令服务器配置成使用STUN/TURN服务器。访问此像素流送参考页面了解操作方法。 1 - 准备虚幻引擎应用程序
在这个步骤中将为项目创建一个standalone可执行文件。
1.只有将项目作为打包应用程序运行时、或使用 Standalone Game 选项在虚幻引擎中启动时才能使用像素流送插件。
2.要使像素流送插件从应用程序中提取并流送音频,需要用一条特殊的命令行标签启动虚幻引擎:-AudioMixer。以下步骤将解释如何在两种情况下进行设置。
在虚幻编辑器中打开项目。
在虚幻编辑器的主菜单中选择 编辑(Edit) > 插件(Plugins)。
在 图像(Graphics) 下找到 像素流送(Pixel Streaming) 插件并勾选 启用(Enabled) 框。
一、ChatGPT介绍 一种预训练的对话式文本生成AI。其中Chat 包括输入端你发出的有效提问(Prompt)和输出端的智能参考答案。
特性:
(1)会表达:信息会通过理解,再被提炼为知识,然后由GPT为你表达。
(2)能推理:GPT3之后的模型泛化出思维链的能力。
二、更好的向ChatGpt提问 按照操作角度来拆分。分为前期准备、合理提问、获取最优回答。
1、前期准备 1-1、设置人设: 引导ChatGPT专注于解决某个领域的问题。
(1)一个会话一个人设:一个会话窗口设置一个人设。
(2)分享思考,共用人设:团队内多个人共用人设来训练TA。
(3) 保持人设不断片:固定“生成点”-点击“编辑”来提交新的指令,不断生成新的结果。
(4)备份和复用:借助第三方工具,来保存能够快捷调用的人设。或者设置暗号快速召唤。
1-2:参数化沟通配置: (1)功能指令:做什么(如:定义/learn用于学习)
(2)设置变量赋值:变量可以调整赋值(如:定义一个num,让其调整)
(3)设置默认值:用于容错(如:默认用中文讲解等)
(4)初始化和帮助:沟通和随时指引(设置配置如/help)
2、合理提问 2-1、预训练模型: 提供上下文数据,调教训练。把你的需求拆解成有条理的步骤(从主题到细节 这2个核心要素递进)。
(1)梳理拆分需求:明确需求,具体化拆分问题。
(2)提供背景信息:你想要解决什么领域、行业的课题?受众是谁?有没有相关的概念要交代?是否需要提供材料或数据?
(3)期望结果:完善细节约束,填充期望信息,让输出结果更准确。
2-2、提问5要素(主题+数量+细节+方式+格式) 提供上下文数据,调教训练,把你的需求拆解成有条理的步骤(从主题到细节 这2个核心要素递进)。
示例:
拟1份关于[GPT将彻底颠覆教育]的PPT大纲,受众是中国一线城市的高中老师,标题要润色得更加高级。简洁、有感染力的讲述风格,markdown格式,重点加粗。
2-3、提问方式 先试探,再逐步深入去补充,往往比单次输入的效果好很多。
2-4、提效方式 (1)止损:开头不符合预期时,不要浪费时间,直接停止,尤其是长输出任务。
(2)更多可能:重新生成结果,将不稳定性变成优势。
(3)优化:没必要新起会话,点一下迭代原prompt。
3、获取最优回答 3-1、重新生成: 将输出不稳定性变成优势。通过Regenerate response来抽盲盒。
3-2、编辑prompt: 生成的结果使用之后,点编辑prompt,生成新结果。
3-3、叠BUFF: 过反问ChatGPT,让其进一步优化答案。如:请提升质量,请进一步思考。
3-4、验证结果: 要有验证意识、要学会甄别、要用对领域 (如让它举真实案例)。
三、示例 例子:比如我是一名java开发工程师,我现在需要对某个框架进行快速了解。
我们把刚刚的prompt模板输入到ChatGPT中,并输入我想要快速熟悉的框架--camel。
由此,我们得到了我们想要的答案。
云计算(Cloud Computing)
通过网络访问可扩展、灵活的物理或虚拟共享资源,将计算资源(例如服务器、存储设备、数据库等)提供给用户,可按需自助获取或管理资源的集中式模式,云计算具备虚拟化,动态扩展和性价比高等特点。主要解决资源利用率不高,物理资源设备集中管理,高效使用的问题。
云计算提供以下几种服务模型:
IaaS基础设施即服务(Infrastructure as a Service)
将IT基础设施作为一种服务通过网络对外提供,并根据用户对资源的实际使用量或占用量进行计费的一种服务模式。基础设施服务包括服务器、存储、计算能力和网络等,用户可以通过租赁的形式进行使用。从使用模式的角度看,IaaS和传统的主机托管有些类似,但IaaS在服务灵活性、拓展性和成本等方面具有极强的优势。
IaaS服务一般分为公有云、私有云、混合云三类。
PaaS平台即服务(Platform as a Service)
在IaaS的基础上,提供了更高级别的服务,包括操作系统、开发工具和数据库等,将服务器平台或开发环境作为一种服务提供的商业模式。用户可通过购买PaaS服务,为生成、测试和部署软件应用程序提供一个环境,开发者只需要关注自己的业务逻辑,而不需要管理与控制云端基础设施(包含网络、服务器、操作系统或存储)。
SaaS软件即服务(Software as a Service)
将软件“拿来即用”的服务,企业既不用自建基础设施资源,也无需开发本地部署环境,更不必招聘IT人员,SaaS平台提供商会为企业搭建信息化所需要的所有网络基础设施及软件、硬件运作平台,并提供所有前期的实施、后期的维护等一系列服务。
雾计算(Fog Computing)
雾计算是一种分布式计算模式,它将计算、存储和网络资源移动到靠近数据源和终端设备的边缘位置,以提供更低的延迟和更好的用户体验。
与云计算不同,雾计算将计算资源和服务部署在接近数据源的边缘设备、边缘节点或边缘网关上,以处理实时数据和应用程序的需求。
雾计算可以在物联网(IoT)等场景中发挥关键作用,因为它能够实时处理和分析大量的传感器数据,并在边缘设备上提供低延迟的计算能力。
雾计算优势:
低延迟
将计算资源移动到边缘位置,可以减少数据在网络中的传输时间,从而降低应用程序的延迟。
数据隐私和安全
雾计算使得敏感数据可以在本地进行处理和存储,减少了将数据传输到云端的需求,从而提高了数据隐私和安全性。
离线支持
雾计算可以在边缘设备上进行计算,使得应用程序即使在没有网络连接的情况下也能够正常运行。
云计算和雾计算都是基于分布式和网络技术的计算模式,它们在不同的应用场景中提供了灵活、可扩展和高效的计算资源和服务。云计算主要侧重于集中管理和提供计算资源,雾计算聚焦于将计算资源移动到边缘位置,以满足实时和低延迟需求。
边缘计算(Edge Computing)
一种在物理上靠近数据源头的网络边缘检测,融合网络、计算、存储、应用核心能力的开放平台,就近提供边缘智能服务的计算模式。边缘计算是将从终端采集到的数据,直接在靠近数据产生的本地设备或网络中进行分析,无需再将数据传输至云端数据处理中心。
类似于雾计算,边缘计算将计算资源和服务部署在靠近数据源和设备的边缘位置,以提供低延迟和更高的数据处理速度。不同之处在于,边缘计算更加注重于设备附近的计算,将计算任务分布到边缘设备,如路由器、交换机、传感器等。
集群计算(Cluster Computing)
将多个计算节点组成的集群作为一个整体进行计算和处理任务。
集群计算通常用于高性能计算(High-Performance Computing,简称HPC)领域,运行大规模计算任务,通过并行计算和资源共享来提高计算性能。
分布式计算(Distributed Computing)
将计算任务分发到多个计算节点上进行并行处理的计算模式。
分布式计算旨在提高计算性能、可用性和容错性。常见的分布式计算系统包括Apache Hadoop、Apache Spark等。
超级计算(Supercomputing)
一种高性能计算模式,利用多个处理器和大量的计算资源来解决科学、工程和研究领域的复杂计算问题。超级计算机通常具备远超一般计算机的计算能力和存储容量。
边缘智能(Edge Intelligence)
结合了边缘计算和人工智能(Artificial Intelligence,简称AI)技术,将AI算法和模型部署在边缘设备上,以实现实时、智能的数据分析和决策。边缘智能可以在边缘设备上进行本地数据处理和推理,减少对云端的依赖。
结语
这些计算模式和概念在不同的应用领域和需求下发挥着重要作用,针对不同的场景和需求,选择适合的计算模式可以提高计算性能、降低延迟以及满足特定的数据处理需求。
欢迎关注微信公众号“我想我思”
今日话题:解决Linux中可以识别但无法连接Airpods问题 起因经过结果方式一方式二 起因经过 在根据“Linux启动黑屏卡住Logo登录界面无法进入系统的终极解决方式”博客解决掉gdm3以及lightdm图形界面之间冲突的问题后,准备设置打开蓝牙连接Airpods,首先发现搜索不到Airpods,其次搜索到了,发现一直在转圈无法连接。
倘若有人不会连接Airpods耳机操作,可以参考:
Ubuntu 22.04如何連接Apple Airpods Pro藍牙耳機並查看電量
设置 AirPods 搭配 Mac 和其他蓝牙设备使用
一句话概括就是:长按按键约5秒,至白灯亮起,即可利用蓝牙链接。
结果 方式一 1.编辑:
sudo gedit /etc/bluetooth/main.conf 设定ControllerMode = dual (将前面的#去掉)
2.重启蓝牙:
sudo /etc/init.d/bluetooth restart 3.点开Ubuntu中的蓝牙匹配。
PS:如果连接上了,没有声音。
进入「系统设置 System Settings」,然后找到「声音 Sound」。
在弹出的面板中,设定声音的输出设备为Airpods 即可。
如果还是不行,就把退出登录,再登进来。
因为 “设定ControllerMode = dual” 这个操作是需要这样做来激活的。
方式二 为了解决linux连接蓝牙耳机的时候,经常连不上的问题
1.在Ubuntu软件中下载Bluetooth Manager:
2.安装pulseaudio蓝牙模块:
sudo apt-get install pulseaudio-module-bluetooth 3.如果问题仍然存在则运行:
pactl load-module module-bluetooth-discover PS:
若发现第二次开机之后还是连不上,但运行上面第二条代码,再用bluetooth manager连。
补充:
倘若有人需要声音制作的程序可以私聊我,有:
<a-form-item label="来源1"> <a-select v-model:value="params.categorys" mode="tags" :maxTagCount="1" allowClear placeholder="请选择" class="categorySelect" :tokenSeparators="[',',' ','/',',']" //重点是这个进行切换 > <a-select-option v-for="(item, index) in categoryArr" :value="item.value" :key="index" > {{ item.label }} </a-select-option> </a-select> </a-form-item> data:{ params:{ categorys:[] }, categoryArr:[{ value:"1", label:'1', }] }
大多数情况下,我们可以直接右击任务栏选择任务管理器打开,但是有小伙伴反映win11中右击任务栏没有任务管理器,遇到这种问题该怎么解决呢,这里小编就给大家详细介绍一下win11右击 任务栏没有任务管理器的解决方法,有需要的小伙伴快来看看吧。
win11右击任务栏没有任务管理器的解决方法:
1、按下快捷键"win+x",在选项菜单中点击"运行"。
2、在运行对话框中输入"regedit"命令,回车键打开注册表编辑器。
3、进入新界面后,依次点击"HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionShellUpdatePackages"。
4、右击右侧空白处,"新建"一个"DWORD (32 位)值",将其命名为"UndockingDisabled"。
5、双击打开新建好的值,在小窗口中将数值数据改为"1",点击保存即可。
6、完成操作后,重新启动电脑,右击任务栏就会看见有任务管理器了。
KEGG信号通路富集分析 当我们手头有转录组测序后的差异分析数据后,想更进一步的去分析这些差异基因在信号通路富集情况,其中一种办法是使用KEGG网站进行信号通路富集分析。以下是基于KEGG信号通路富集分析的具体步骤。
1. 通过uniprot将Gene name转换为GeneID UniProt网站中的ID mapping具有强大的各类数据ID互相映射转换功能,支持多个数据库之间的互联互通和一次性多条数据ID的转换。因此,我们通过uniprot将原始数据种的Gene name转换为GeneID。
注:大多数比较古早的教程都是把Gene name转换为UniProt ID,但是最新版本(version 5 of KEGG Mapper)的KEGG的标识符已经不直接支持UniProt ID,而是KEDD ID或者GeneID。但是为什么不选KEGG ID是因为在ID mapping的过程中,KEGG ID缺失的情况要比GeneID缺失的情况更严重,因此为了保留更多的数据,我们选择了兼容性更好的GeneID。不过,KEGG也有自己映射工具Convert ID,有兴趣的可以自己尝试下。
1.1 ID mapping:数据导入 可以直接将原始数据的中的Gene name列直接复制进ID mapping的输入框。如果基因数量较多,可以将Gene
name列单独保存成单个文件,从load from text file出导入。From database选择第一个UniProt的子项“Gene Name”。To database则可默认选择UniProtKB,GeneID和 KEGG的ID可以通过UniProtKB链接的相关信息所得。最重要的是不要忘记填写物种信息,图中展示的为小鼠,不然需要在获得映射数据后再次将物种信息过滤一次。最后点击Map 15 IDs。
1.2 下载设置 确认输入的ID是Gene name,否则无法获得成功映射。上一步提交后,可获得UniProt任务列表,状态栏Status显示Completed后,点击下方链接预览ID映射的结果。
在结果预览页面中,点击Download。(数量较少也可以直接在该页面直接筛选目标信息)
下载Excel或者其他自己熟悉处理的数据文件格式。并注意选择外部链接(External links),其中就包含了我们需要的GeneID , KEGG。
输出内容除了默认6项外,在外部链接(External links)中的基因组注释(Genome annotation)勾选GeneID , KEGG。
注:如果当同时勾选GeneID , KEGG后无法成功下载,大概率是因为KEGG的ID不全无法生成下载链接。解决方法是只勾选GeneID。
1.3 ID mapping后数据处理 ID mapping生成的表格数据会存在大量的重复或者空缺值,这直接导致了ID mapping数据的数量前后并不能保持一致,需要根据自己情况进行删减或保留处理。
同一个基因条目重复,需要自己依据具体情况进行删减或保留处理。GeneID数据为空的删除。 2. KEGG通路富集搜索 使用KEGG Mapper 进行通路富集搜索。其中KEGG Mapper – Search (过去被称为 Search Pathway)是在用户数据集中搜索映射对象的传统工具。
(1)全部用英文编码,不要用中文
(2)偶数中文 或 结尾加英文的符号,如"."
(3)将文件编码进行一个手动(如记事本)转换,改成UTF-8格式
这个问题主要还是因为编译器决定的
一旦你为此增加了字符编码转换的代码,那么也意味着可移植性降低了
try-catch 是 JavaScript 处理错误的一种重要机制。try 块用来包含可能会出错的代码,catch 块用来处理 try 块中的错误。使用 try-catch 的主要目的是在代码出错时不会导致整个程序崩溃,可以让错误被妥善处理。一个典型的 try-catch 代码块如下:
try { // 可能出错的代码 } catch (error) { // 出错时的处理代码 } 当 try 块中的代码执行出错时,会触发 catch 块来捕获这个错误。catch 块会接收到一个 Error 对象,包含了错误的名称、消息和堆栈信息。我们可以通过这个 Error 对象来分析错误原因,也可以针对不同的错误进行不同处理。相比于没有错误处理导致程序崩溃的情况,使用 try-catch 可以让我们的程序在应对错误时更加健壮。它是 JavaScript 语言中非常重要的一个机制。掌握 try-catch 的使用可以大大提高我们开发应用的能力。 但是try-catch并不像表面上的这么简单,熟练的使用try-catch并不是一件简单的事情,下面就让我们来探索一下try-catch的特性。
让我们打开mozilla官网,搜索try-catch,看官网的第一句描述
来,让我们把重点用红圈圈起来
注意,是尝试的语句块,这点很重要,知道这一点才能真正的理解如何使用try-catch,下面给大家展开讲一讲。
<script> try { function error(params) { console.log(a); } } catch (error) { console.log('error', error); } error() </script> 代码如上,我写了一个try-catch语句,然后在try中创建了一个函数,输出一个并不存在的变量a,按理来说这里一定会报错的, 报错就会被catch接住,所以日志里的输出应该是这样
但是事实却是
为什么这里的错误没有被catch接住呢?
因为在try代码块中,仅仅是定义了一个函数error(),这个步骤不会产生错误。真正导致错误的代码是error()函数的调用,也就是试图读取变量a的操作。但是这个操作是在try代码块之外执行的。由于错误发生在try之外,所以不会被catch语句捕获。catch语句只能捕获在try代码块内发生的错误。对于try块外的错误,catch无法捕获到。
总结一下:
1. try块内只定义了函数,不会产生错误。
2. 真正的错误发生在try块外调用函数时。
报名注册链接:Intel® Edge Solutions Challenge
关于挑战赛 基于英特尔技术的制造边缘解决方案
开发重塑行业的解决方案和推动技术创新离不开生态系统的紧密合作。
英特尔一直是创新的中坚力量,
开发了重塑全球边缘和网络基础设施的卓越解决方案,
并加速了庞大合作伙伴社区的发展。 我们诚邀英特尔合作伙伴参加英特尔® 边缘解决方案挑战赛,
此活动旨在支持、奖励我们的生态系统合作伙伴开发、
部署基于英特尔® 架构和组件的优化解决方案。 本次挑战赛重在比拼参赛者开发制造应用技术的能力,包括两个类别: 控制优化和自主性,以及产品检测。
参赛者可以通过实时网络研讨会和一系列预先录制的培训与英特尔技术专家直接交流,
确保自己的解决方案充分满足挑战赛的技术要求。
初始高级支持将专门提供给在活动期间开发解决方案的合格团队,
也将在 2024 年的提交后加速阶段作为优胜者和决赛选手的权益。
权益和奖励 参赛标准 解决方案架构
充分利用英特尔® 技术。
包含一个或多个英特尔® CPU,及其他英特尔® 软件资产及指定内容。
边缘推理操作必须在英特尔® OpenVINO™ 工具套件分发版和/或其他英特尔® 软件或工具上运行。
解决方案的功能
解决方案如何在靠近边缘源头的位置收集、处理和分析数据?
解决方案如何收集和/或汇总边缘设备的数据并连接到数据中心或云? 如何实现边缘到云/数据中心的连接(如 WiFi、4G、5G 等?
解决方案如何管理、汇总和获取来自众多边缘设备的洞察以推动业务创新和转型?
解决方案交付
客户可以从单一来源采购所有产品内容。
Use Cases 产品检测 | 光学字符识别 工业成像传感器的应用。
您的解决方案由英特尔硬件和软件解决方案提供支持,可执行字符检测,
即检查、识别和/或确定工厂生产线上部件或产品上印制的字符,
从而帮助制造商更轻松地跟踪货物并提高成品率。 最低硬件要求
第 11 代英特尔® 奔腾、赛扬或凌动处理器,
面向智能摄像头或入门级视觉系统的英特尔® 酷睿™ i3 处理器 N 系列
推荐的英特尔硬件
第 12 代或第 13 代英特尔® 酷睿™ 处理器产品家族
此内容为原创,转载请注明出处。
环境:
Ubuntu 18.04
python 3.8.5
opencv 4.4
onnx 1.9.0
c++ onnxruntime 1.8.0
opencv的安装我就不讲了,网上的教程多得是,这里讲一下onnxruntime的环境布置。
onnxruntime 下载地址: https://github.com/microsoft/onnxruntime
一般来说,页面右侧都有一个已经准备好的release版本,直接拉过来用就行。也是同事提醒我的,不然我还看不到,我眼睛一向不太好使。
下载好后解压放到/usr/local/目录下面,当然也可以放在其他位置,但我习惯放这里了。我当时下载的是1.8.0的版本,当我写这篇博客的时候官方已经升级到1.8.1的版本。
下面我们进入正题:
第一步 训练maskrcnn获得pth模型。 这一步就不着重讲了,pytorch官方有案例,照搬过来用就行,连样本图片都给准备好了。
案例地址:https://pytorch.org/tutorials/intermediate/torchvision_tutorial.html
如果还搞不定的话,这里还有篇更详细的官方教程讲解:https://blog.csdn.net/u013685264/article/details/100564660
第二步 在python中将maskrcnn转换成onnx的模型。 这里需要注意一下,模型训练时如果图片的尺寸全都一致,就可以使用固定尺寸的模型转换。
但如果像prtorch官方案例那种,图片尺寸没有固定的话,就需要使用动态的模型转换了。
动态尺寸的模型转换:
import torchvision import onnxruntime as ort import numpy as np import onnx model = torchvision.models.detection.maskrcnn_resnet50_fpn(pretrained=False, num_classes=2) model.load_state_dict(torch.load('./output/model.pth')['model']) # 训练保存的pth模型 model.eval() data = torch.randn(1, 3, 1024, 1278) # (图片数量, 通道数, 高, 宽) 这个宽高值可以随意 input_names = ["image"] output_names = ['boxes', 'labels', 'scores', 'masks'] # dynamic_axes 代表哪个轴可以变动。例如输入的images中,图片数量、高、宽可以变动,即为0, 2, 3 torch.
1. 概述 本文主要分享 RequestRateLimiterGatewayFilterFactory 的代码实现。
Spring Cloud Gateway 提供了多种 GatewayFilterFactory 的实现,RequestRateLimiterGatewayFilterFactory 也是其中的一种。
通过 RequestRateLimiterGatewayFilterFactory ,可以创建 RequestRateLimiterGatewayFilter ( 实际是内部匿名类,为了表述方便,下面继续这么称呼 ) 。
RequestRateLimiterGatewayFilter 使用 Redis + Lua 实现分布式限流。而限流的粒度,例如 URL / 用户 / IP 等,通过 org.springframework.cloud.gateway.filter.ratelimit.KeyResolver 实现类决定。
2. 环境搭建 第一步,以 spring-cloud-gateway-sample 项目为基础,在 pom.xml 文件添加依赖库。
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis-reactive</artifactId> </dependency> 第二步,在 application.yml 配置一个 RouteDefinition 。
spring: cloud: gateway: routes: # ===================================== - id: default_path_to_httpbin uri: http://127.0.0.1:8081 order: 10000 predicates: - Path=/** filters: - RequestRateLimiter=10, 20, #{@principalNameKeyResolver} - RequestRateLimiter=10, 20, #{@principalNameKeyResolver} ,配置 RequestRateLimiterGatewayFilterFactory 。 默认情况下,基于令牌桶算法实现限流。第一个参数,burstCapacity ,令牌桶上限 。第二个参数,replenishRate ,令牌桶填充平均速率,单位:秒。第三个参数,keyResolver ,限流键解析器 Bean 对象名字,根据 #{@beanName} ,使用 SpEL 表达式,从 Spring 容器中获取 Bean 对象,详细参见 RouteDefinitionRouteLocator#getTuple(ArgumentHints, Map<String, String>, SpelExpressionParser, BeanFactory) 处的代码。另外,这里有一个 BUG :在 YAML 里,# 代表注释,所以第三个参数无法正确被读取,需要等待官方修复。如果比较着急使用,可以考虑将此处的 # 修改成 \# ,并修改部分相关代码以解决该 BUG 。 第三步,配置完成,启动 spring-cloud-gateway-sample 项目。
# F1 is normally reserved by the system for Help so we don't use it
#取消
alias Esc cancel
#查看属性
alias F1 show element
#测量
alias F2 Show Measure
#drc检查
alias F3 status
#镜像
alias F4 mirror
#颜色层图
alias F5 color192
#撤回上一个点
alias F6 oops
#显示和隐藏铺铜。没有边框
alias F7 'settoggle no_etch_shape_display;redraw'
#显示和隐藏铺铜 还有边框
alias F8 'settoggle no_shape_fill;redraw'
#格点设置
alias F9 define grid
#高亮选择
alias F10 hilight pick
#颜色设置
alias F11 Assign Color
以此博客文章纪念2023年度Microsoft MVP续任成功!
实例需求:根据A3单元格(黄色)的输入值动态复制第11行数据,并且在A列填充顺序编号,如下图所示。
如果A3单元格输入的数值小于当前已复制的行数,则清除多余数据行。如果A3单元格为0时,则仅保留序号1的行内容,和A3单元格为1时的效果相同,如下图所示。
根据单元格内容变化出发代码实现效果,通常使用工作表的Change事件,示例代码如下。
Private Sub Worksheet_Change(ByVal Target As Range) With Target If .CountLarge = 1 And .Cells(1).Address = "$A$3" And .Cells(1) <> "" Then Application.EnableEvents = False iQty = .Value If iQty > 1 Then Set rngData = [a11:X11] rngData.Copy With [a12].resize(iQty - 1, 1) .Select ActiveSheet.Paste .Formula = "=row()-10" .Formula = .Value End With End If If iQty = 0 Then iQty = 1 iLstRow = Cells(Rows.
基本概念 如果一个像素落在图像中某一个物体的边界上,那么它的邻域将成为一个灰度级变化的带。对这种变化最有用的两个特征是灰度的变化率和方向,它们分别以梯度向量的幅度和方向来表示。
边缘检测算子检查每一个像素的邻域并对灰度变化率进行量化,通常也包括方向的确定。有若干种方法可以使用,其中大多数是基于方向导数掩模求卷积的方法。
示例代码 I=180*ones(256,256); I(100:200,100:200) = 128; I(120:180,120:180) = 220; IedgeSobel = edge(I,'sobel');%sobel边缘算子分割 IedgeSobel_v = edge(I,'sobel','vertical');%垂直边缘算子分割 IedgeSobel_h = edge(I,'sobel','horizontal');%水平边缘算子分割 figure(1),imshow(uint8(I); figure(2),imshow(IedgeSobel); figure(3),imshow(IedgeSobel_v); figure(4),imshow(IedgeSobel_h); 效果图片
day-123-one-hundred-and-twenty-three-20230910-新电脑环境 要安装的软件 搜狗五笔输入法
下载后安装并登录 搜狗五笔输入法 帐号: 20230815帐号密码: 微信,并登录
翻墙工具,并登录
Easy World - 访问外网工具用帐号进行登录 EasyWorld访问外网工具 帐号: 20230815帐号密码: 把D盘合并到C盘,以后文件基本上都装C盘,防止软件有问题
win10电脑系统怎么给c盘扩容 安装谷歌浏览器并设置为默认浏览器。登录并进行同步
谷歌浏览器官方下载地址 谷歌 帐号: 20230815帐号密码: 安装公司内网通信工具,如RTX/钉钉/企业微信;
RTXC 个人工号: 姓名: 初始帐号密码: 20230815帐号密码: 安装git,并配置
Windows10下生成ssh密钥初步配置git常用git命令行 - 个人博客把ssh密钥配置到对应网站中,拿到公司的git仓库代码; git仓库网址: git帐号: 对应邮箱地址: git帐号密码: 安装VSCode,并登录
VSCode官方下载安装中文插件Chinese (Simplified) (简体中文) Language Pack for Visual登录VSCode帐号并同步,以便同步笔记本中的插件及设置,一般使用的是github帐号;要先登录github; github网站 帐号: git帐号密码: 安装nvm用来管理node
nvm的官方git仓库nvm安装与使用 - 安装包版本 - 推荐nvm 安装、卸载与使用 - 命令行版本 安装switchhosts,用于切换本机host。
switchhosts - 安装包下载中文首页把一些ip地址映射成想要的域名。 安装邮箱客户端foxmail或thundbird
foxmail - 2023最推荐的邮箱客户端 - 官方下载地址thunderbird - 邮箱客户端 - 官方下载地址 安装git图形化管理工具
目录
一、Docker常用命令
1 基础命令
2 镜像命令
2.1 docker images 查看本地主机的所有镜像
2.2 docker search 搜索镜像
2.3 docker pull 镜像名[:tag] 下载镜像
2.4 docker rmi 删除镜像
2.5 docker build 构建镜像
3 容器命令
3.1 如拉取一个centos镜像
3.2 运行容器
3.3 进入容器
3.4 退出容器
3.5 列出运行过的容器
3.6 删除容器
3.7 启动和停止容器
4 docker网络
4.1 查看docker网络列表
4.2 查看网络详细信息
5 docker挂载
5.1 查看volume网络列表
5.2 查看volume详细信息
二、dockerfile文件
1 规则
2 示例
3 使用-P和EXPOSE发布随机端口
三、docker compose
1 Compose常用命令
2 示例
一、Docker常用命令 1 基础命令 docker version #查看docker的版本信息 docker info #查看docker的系统信息,包括镜像和容器的数量 docker 命令 --help #帮助命令(可查看可选的参数) docker COMMAND --help 命令的帮助文档地址:docker | Docker Docs
1、Tomcat是Apache鼎力支持的Java Web应用服务器,由于它优秀的稳定性以及丰富的文档资料,广泛的使用人群,从而在开源领域受到最广泛的青睐。
2、Jboss作为Java EE应用服务器,它不但是Servlet容器,而且是EJB容器,从而受到企业级开发人员的欢迎,从而弥补了Tomcat只是一个Servlet容器的缺憾。
3、Resin也仅仅是一个Servlet容器,然而由于它优秀的运行速度,使得它在轻量级Java Web领域备受喜爱,特别是在互联网Web服务领域,众多知名公司都采用其作为他们的Java Web应用服务器,譬如163、ku6等。
在商用应用服务器里主要有:Weblogic、Websphere,其中Weblogic我也使用过很长一段时间,当时也只用其当Servlet容器,然而就在同等条件下,在性能及易用性等方面,要比Tomcat优秀很多。
4、glassfish是Sun公司推出的Java EE服务器,一个比较活跃的开源社区,不断的通过社区的反馈来提高其的可用性,经过glassfish v1、glassfish v2 到今天的glassfish v3,它已经走向成熟。Glassfish是一个免费、开放源代码的应用服务,它实现了Java EE 5,Java EE 5 平台包括了以下最新技术:EJB 3.0、JSF 1.2、Servlet 2.5、JSP 2.1、JAX-WS 2.0、JAXB 2.0、 Java Persistence 1.0、Common Annonations 1.0、StAX 1.0等。支持集群,通过内存中会话状态复制,增强了部署体系结构的可用性与可伸缩性,它对集群有着很好的支持,可以简单到通过添加机器,就可轻松的提高网站的带负载能力。在解析能力方面,它对html的吞吐能力与apache服务器不分上下,就是tomcat所不能比的,支持目录部署,热部署,解决了tomcat对热部署能力的缺陷。在版本方面做的更加人性化,有开发时用的简化版,专门用于部署web项目的版本,还要完全符合j2ee标准的版本。
WebLogic、WebSphere、JBOSS、Tomcat之间的区别 1、产品介绍: weblogic WebLogic是美国bea公司出品的一个application server确切的说是一个基于j2ee架构的中间件。BEA WebLogic是用于开发、集成、部署和管理大型分布式Web应用、网络应用和数据库应用的Java应用服务器。将Java的动态功能和Java Enterprise标准的安全性引入大型网络应用的开发、集成、部署和管理之中。
webSphere WebSphere是 IBM 的集成软件平台。它包含了编写、运行和监视全天候的工业强度的随需应变 Web 应用程序和跨平台、跨产品解决方案所需要的整个中间件基础设施,如服务器、服务和工具。WebSphere 提供了可靠、灵活和健壮的集成软件。
JBoss JBoss是一个管理EJB的容器和服务器,支持EJB 1.1、EJB 2.0和EJB3.0的规范。但JBoss核心服务不包括支持servlet/JSP的WEB容器,一般与Tomcat或Jetty绑定使用。2006年,Jboss公司被Redhat公司收购。
Tomcat Tomcat是Apache 软件基金会的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。由于有了Sun 的参与和支持,最新的Servlet 和JSP 规范总是能在Tomcat 中得到体现,Tomcat 5 支持最新的Servlet 2.4 和JSP 2.0 规范。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。
2、价位不同: JBoss与Tomcat的是免费的。
文章目录 前言一、SPI总线SPI总线概述SPI总线时序SPI总线传输模式SPI总线的优缺点 Linux SPI 框架软件架构初始化及退出流程注册spi控制器注销spi控制器 关键数据结构数据传输流程关键函数解析 实例分析:SPI 陀螺仪驱动修改设备树编写驱动程序 实例:瑞芯微 SPI 设备驱动总结 前言 实例部分分为几个部分:
1、正点原子 imx6ull 陀螺仪模块驱动,非常经典,基本满足所有 SPI 驱动开发;
2、瑞芯微官方 SPI 设备驱动例程;
由于文章长度,以下两个实战例子放在另一篇文章。
3、高通 DACx0501 (ADC)模块驱动;
4、高通 IDT8V97003 (无线发射接收器)模块驱动。
一、SPI总线 SPI总线概述 SPI,是英语Serial Peripheral interface的缩写,顾名思义就是串行外围设备接口。是Motorola首先在其MC68HCXX系列处理器上定义的。SPI接口主要应用在 EEPROM,FLASH,实时时钟,AD转换器,还有数字信号处理器和数字信号解码器之间。
SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,正是出于这种简单易用的特性,现在越来越多的芯片集成了这种通信协议。
SPI总线的构成及信号类型如图1-1所示:
MOSI – 主设备数据输出,从设备数据输入 对应MOSI master output slave input
MISO – 主设备数据输入,从设备数据输出 对应MISO master input slave output
CLK – 时钟信号,由主设备产生
nCS – 从设备使能信号,由主设备控制
SPI总线时序 SPI接口在Master控制下产生的从设备使能信号和时钟信号,两个双向移位寄存器按位传输进行数据交换,传输数据高位在前(MSB first),低位在后。如下图所示,在CLK的下降沿上数据改变,上升沿一位数据被存入移位寄存器。
在一个SPI时钟周期内,会完成如下操作:
(1)Master通过MOSI线发送1位数据,同时Slave通过MOSI线读取这1位数据;
(2)Slave通过MISO线发送1位数据,同时Master通过MISO线读取这1位数据。
Master和Slave各有一个移位寄存器,而且这两个移位寄存器连接成环状。依照CLK的变化,数据以MSB first的方式依次移出Master寄存器和Slave寄存器,并且依次移入Slave寄存器和Master寄存器。当寄存器中的内容全部移出时,相当于完成了两个寄存器内容的交换。如图所示:
SPI总线传输模式 SPI总线传输一共有4中模式,这4种模式分别由时钟极性(CPOL,Clock Polarity)和时钟相位(CPHA,Clock Phase)来定义,其中CPOL参数规定了SCK时钟信号空闲状态的电平,CPHA规定了数据是在SCK时钟的上升沿被采样还是下降沿被采样。这四种模式的时序图如下图所示:
1、YAML 是 JSON 的一个超集,也是一种方便配置层次结构数据的格式。只要将 SnakeYAML 库放到 classpath 下, Spring 应用就会自动支持 YAML,以作为 Properties 属性文件的替换。Spring boot 应用(spring-boot-starter) ,默认包含了 SnakeYAML 库。
@ConfigurationProperties + @Component 取值 1、使用 @ConfigurationProperties 注解,可以将 "application.yml" 配置文件中的键-值自动映射注入 Java Bean 中,Java bean 的属性必须提供 setter 方法才能注入值。
1)@ConfigurationProperties 可以标注在 类、接口、枚举、注解、方法上
2)所在的类需要是 Spring 组件(@Component ),因为只有是容器中的组件,容器才会为 @ConfigurationProperties 提供此注入功能。 3)prefix 属性:用于将配置文件中指定的 key 下的所有属性与本类属性进行一一映射注入值,如果配置文件中不存在此 key,则不会为POJO注入值。如 prefix="user"、prefix="app.user" 。
4)ignoreInvalidFields 属性:是否忽略无效的字段,默认为 false 表示不忽略。配置的属性值类型错误,无法强转的字段就是无效字段,比如 java bean 的属性类型是 Date,而 application.yml 中配置的值是 2020/12/35,则显然无法转为 Date 类型,此时如果此属性为 false,则启动报错,无法正常启动应用,为 true 时则会忽略注入。
5)如果配置文件中没有为 java bean 配置相应的属性值,则不会注入值,java bean 属性仍然使用自己的默认值,不会影响程序启动。 2、如下演示通过 yml 文件为 java bean 对象属性注入值,User 对象中关联 Dog 对象,先提供 java bean 如下,基本涵盖了 YAML 各种语法:
Jenkins系列文章 一、Jenkins安装配置
二、Jenkins部署springboot项目
三、Jenkins部署前端项目
四、Publish over ssh分发项目
五、Nginx代理Jenkins
在生产环境中,往往我们的Jenkins和应用会部署在不同的服务器上,这时我们就需要将构建好的项目分发到应用服务器上,并执行脚本进行项目部署,我们可以通过ssh 和 scp命令实现这个功能,但是这种方式不够规范简洁,所以Jenkins中为我们提供了Publish Over SSH插件更好的实现我们的需求。
1、安装插件 在Jenkins控制台中,Manage Jenkins >>> Manage Plugins >>> 可选插件,搜索Publish Over SSH进行安装。
2、系统配置 安装完插件后,我们在Manage Jenkins >>> Configure System ,配置ssh服务器信息。
在这里我们可以使用两种方式进行远程服务器连接配置,第一种是ssh密钥对、第二种是使用密码的方式,这里对两种方式方式都进行说明。
1)ssh密钥(推荐) (1)生成ssh密钥对 //在Jenkins服务器中使用root用户生成公钥和私钥 ssh-keygen -t rsa //查看密钥信息 cd /root/.ssh (2)配置公钥 将生成的公钥文件复制到应用服务器中/root/.ssh目录下,并更名为authorized_keys。
(3)配置服务器信息 在Jenkins控制台中,先指定ssh私钥位置,然后新增ssh server配置服务器ip、用户、端口等信息,然后点击test configuration 出现success表示配置成功。
2)密码方式 新增ssh server,然后配置服务器ip、用户等信息,点击高级,勾选Use password authentication, or use a different key,在Passphrase / Password填入对应用户的密码即可。
3、构建操作配置 以Freestyle项目为例,增加构建后操作配置,选择send build artifacts over ssh。
选择刚才配置的ssh server名称,填入基本信息,这里对Transfers中的几个属性进行说明
Transfer Set Source files:要发送的文件或文件夹的位置,这个地方的位置是相对路径(相对于当前项目),例如我当前的jenkisn项目路径是/var/lib/jenkins/workspace/fszl-web,我想发送dist文件夹到应用服务器上,那么直接填写 dist/ ,注意如果发送的是文件夹结尾一定要加/。
Vacation Adventures: Park Ranger 15 Collector‘s Edition(假期冒险:公园巡游者) mac是一款冒险游戏,让玩家扮演公园管理员,开展刺激的公园管护冒险。
作为游戏中的公园管理员,你将被派往各种美丽的国家公园,包括森林、湖泊和山脉等等,展开一系列任务和考验。
游戏采用收藏家版的形式,提供了额外的游戏内容和奖励。你将享受到独特的场景、难题和挑战,以及一些专属的游戏道具和奖励。
游戏的目标是探索景点、解决难题、收集物品并完成各种任务。你需要具备观察力、解谜能力和时间管理技巧,以便有效地管理公园并确保游客的安全和满意度。
游戏中还有各种难题和谜题需要解决,这其中可能涉及到修复设施、追踪野生动物、搜集重要文物等等。
通过完成任务和挑战,你将获得奖励和成就,可以解锁新的区域和关卡,以及个人化的游戏设置。
parkRanger15 CE mac游戏介绍
加入 Pinecreek Hills 著名的公园巡游者队,迎接又一个忙碌的季节!带领游客踏上激动人心的国家公园之旅,并在蓝水湖、切罗基河和新的创始人远足和自行车道上组织有趣的活动。无论是露营、徒步旅行、了解野生动物,还是探索洞穴、瀑布,甚至阿兹特克金字塔,在这款大气的隐藏物体游戏中总有一些有趣的事情可以做!
软件安装地址:假期冒险:公园巡游者 15 parkRanger15 CE for mac
Windows软件下载:Smart Game Booster(游戏优化加速工具)
WebView 常用于加载简单的 html 网页,如用户协议、电子说明书等。
在 android 8.0 系统上,普通应用使用 WebView 时,正常使用没问题。
如果是系统级应用,就会报错
java.lang.UnsupportedOperationException: For security reasons, WebView is not allowed in privileged processes 解决办法有:
1.使用 hookWebView() 方法欺骗系统;
2.修改源代码;
一.使用 hookWebView() 方法欺骗系统; 使用 hookWebView() 方法欺骗系统,然后在应用的 Application 的 onCreate() 里调用此方法。 /** * 给WebViewFactory sProviderInstance赋值,避免进行进程判断而抛出异常(系统应用不能使用WebView) */ @SuppressWarnings("unchecked") public static void hookWebView() { int sdkInt = Build.VERSION.SDK_INT; try { Class<?> factoryClass = Class.forName("android.webkit.WebViewFactory"); Field field = factoryClass.getDeclaredField("sProviderInstance"); field.setAccessible(true); Object sProviderInstance = field.get(null); if (sProviderInstance !
CDH安装 时钟对齐 systemctl enable ntpd systemctl start ntpd systemctl status ntpd 免密登录 ssh-keygen -t rsa ssh-copy-id node01 ssh-copy-id node02 ssh-copy-id node03 mysql安装 # mysql安装包下载 wget http://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.16-1.el7.x86_64.rpm-bundle.tar # 解压 tar -xvf mysql-5.7.16-1.el7.x86_64.rpm-bundle.tar # 安装 rpm -ivh mysql-community-common-5.7.16-1.el7.x86_64.rpm rpm -ivh mysql-community-libs-5.7.16-1.el7.x86_64.rpm rpm -ivh mysql-community-libs-compat-5.7.16-1.el7.x86_64.rpm rpm -ivh mysql-community-client-5.7.16-1.el7.x86_64.rpm rpm -ivh mysql-community-server-5.7.16-1.el7.x86_64.rpm # 启动服务 systemctl start mysqld # 查看初识密码 cat /var/log/mysqld.log | grep password # mysql登录 mysql -uroot -p # mysql数据初始化 create database cmf DEFAULT CHARSET utf8 COLLATE utf8_general_ci; create database amon DEFAULT CHARSET utf8 COLLATE utf8_general_ci; set global validate_password_length=4; set global validate_password_policy=0; grant all privileges on cmf.
Illustrator 2022 是一款专业的矢量图形编辑软件,用于创建精确、可缩放的插图、图标、徽标、线条艺术和复杂的艺术作品。illustrator 2022 for Mac 是用于跨媒体设计的行业标准矢量绘图环境。通过形状,颜色,效果和版式表达您的创造力。
Illustrator 2022 mac软件特点
现代化的用户界面:Illustrator 2022 采用了全新的用户界面,使用户更容易找到所需的工具和功能。
快速画笔:新增了更快、更流畅的画笔功能,让你能够更自由地绘制和编辑路径。
复制、黏贴选项的改进:现在,复制和黏贴对象时,可以选择只复制对象的外观、样式或者整个对象。
实时预览功能:当调整图形变换属性(如旋转、缩放和倾斜)时,实时预览功能让你能够立即看到变化效果。
更好的插图和矢量绘图工具:Illustrator 2022 增强了插图和矢量绘图工具的功能,包括新的路径简化选项、形状生成器和对称画笔工具。
云文档共享与协作:通过 Adobe Creative Cloud,你可以与他人共享和协作创建的图形设计文件,实现更高效的团队工作。
苹果:Illustrator 2022 for mac (AI 2022中文版) v26.4.1中文版
Win:Illustrator2022(AI 2022)
ClickCharts mac是一款轻量级思维导图软件,它可以帮助用户快速创建复杂的思维导图和流程图。它提供了一个直观的界面,可以轻松地添加、编辑和删除节点、连接线和标签,同时还支持拖放式的设计和多种样式和主题。
ClickCharts Mac特别版软件特色
编辑和自定义颜色,填充和描边
简单的编辑功能包括复制,粘贴,撤销等
从各种符号和线连接器样式中选择
创建UML(统一建模语言)标准可视化建模图
将流程图导出为其他图像文件格式
用于创建和打印大图的无缝片重叠
同时打开并编辑多个图表
填充和衬里的艺术风格的细节控制
苹果:ClickCharts for Mac(轻量级思维导图软件) 8.35中文版
Win:NCH ClickCharts Pro(轻量级思维导图软件)
工具包:https://down.52pojie.cn/Tools/Debuggers/
Cheat Engine 官网:https://www.cheatengine.org/
Cheat Engine v7.5 汉化:https://pan.aoe.top/Tools
这个教程全部是来自 Cheat Engine 软件的中的帮助教程
点击教程(64位):
欢迎使用 Cheat Engine 训练教程 (3.3)
本教程将尝试讲解在游戏中作弊的一些基本知识. 并帮助你熟悉 Cheat Engine 的使用方法 (简称为CE). 请按下面的步骤开始.
1:首先要打开 Cheat Engine (如果你还没有运行它的话).2:然后点击 "打开进程" 图标( 左上角那个 带有电脑的图标,且位于 "文件" 下方.).3:当进程列表窗口打开后请在列表中找到这个教程程序. 它类似于 "00001F98-Tutorial-x86_64.exe" or "0000047C-Tutorial-i386.exe". (前面的8位数字/字母可能会有差异.)4:如果你找到了这个进程就点击它,然后点击 "打开" 按钮。(现在暂时不要理会其它的按钮,如果你有兴趣的话,以后再研究它们.) 恭喜你! 如果以上步骤没什么意外的话,进程列表窗口将会消失并且在 Cheat Engine 主界面的上方会显示选择的进程名称. 好了,点击 "下一步" 按钮进入下一个步骤
步骤 2: 精确值扫描 要正式开始了!这次我们来修改游戏中的血量
看到窗口底部的生命值了吗?,每次点击 ‹打我› 按钮,生命值就会减少!
过关条件:将 生命值 数值修改为 1000 【提示】
尽管有各种不同的方法都能找到生命值的内存地址,但是我会告诉你最简单的那个方法:
首先,将 [扫描类型] 设置为「精确数值」接着,把 [数值类型] 设置为「4 字节」然后,在上方的输入框填入当前 生命值 的数值,并点击 ‹首次扫描› 等待扫描完毕,左边的列表会显示扫描结果。你可能会找到非常多的地址,而且你无法确认哪个才是真的。现在,可以点击 ‹打我› 按钮,让生命值发生变化,然后再次输入新的数值并点击「再次扫描」按钮。这样反复操作几次,直到你确定找到了真正的地址。(或者列表中只剩下一个地址)双击这个地址,它会出现在窗口下面的列表里,你还能看到它当前的数值,然后双击这个数值,(或者选中并按下回车键),把数值修改成 1000 如果操作正确,"
地形数据是我们在各种设计、研究中都经常使用的基础数据!之前我们分享过12.5米精度的DEM地形数据、30米精度的DEM地形数据(均可查看之前的文章获悉详情)。
本次给大家带来的是90米分辨率的DEM地形数据——STRM 90m高程数据!该数据是由美国太空总署(NASA)和国防部国家测绘局(NIMA)联合测量的。官网提供的原始数据为全球范围的数据,划分为1000多个网格。我们下载了涉及中国范围的网格,并拼接为一张图;然后按照国界范围提取出全国范围的数据,按照省界提取出全国各个省份的数据,按照市界提取出全国各个城市的数据,方便大家使用!
如果想要全国范围的数据,请按照文末的转发要求获取!以下为数据的详细介绍:
01 数据预览
全国范围的数据
首先我们先来看一下全国范围的数据,我们会提供两种数据:
①空间范围大于中国国界的tif格式数据
由于原始数据将全国范围划分为1000多个网格,我们将涉及中国区域的网络进行拼接,因此范围大于中国国界:
②空间范围等于中国国界的tif格式数据
对上述拼接网格而形成的大于国界范围的数据进行裁剪,我们借助于从数读城事公众号获取的行政区划数据,严格按照国界提取出全国范围的数据:
全省范围的数据 对于每个省份,我们会提供两大文件:
①全省范围的地形
我们以山东省为例来预览一下,我们同样依据山东全省范围边界对地形进行了裁剪,形成了和山东省边界范围一致的地形!
②省内各市的地形
我们以山东省为例,除了提供全省范围的地形,我们还提供了山东省16个地级市每个城市的地形,我们以潍坊市为例来看看:
02 数据详情
数据介绍:
SRTM(Shuttle Radar Topography Mission),由美国太空总署(NASA)和国家测绘局(NIMA)联合测量。2000年2月11日,美国发射的“奋进”号飞机上搭载SRTM系统,共计进行了222小时23分钟的数据采集工作,获取北纬60度至南纬60度之间总面积超过1.19亿平方公里的雷达影像数据,覆盖地球80%以上的陆地表面。SRTM系统获取的雷达影像的数据量约9.8万亿字节,经过两年多的数据处理,制成了数字地形高程模型(DEM),即现在的SRTM地形产品数据。此数据产品2003年开始公开发布,经历多修订,目前的数据修订版本为V4.1版本。SRTM地形数据按精度可以分为SRTM1和SRTM3,分别对应的分辨率精度为30米和90米数据(本次分享数据为90米分辨率的数据)。
地理坐标系:
GCS_WGS_1984
数据格式:
.tif格式
空间分辨率:
90m
官方下载链接:
http://srtm.csi.cgiar.org/srtmdata/
文末下方是我们的公众号名片,我们将定期介绍各类城市数据以及数据的可视化和分析技术,有关STRM 90米分辨率DEM地形数据,欢迎大家多多关注我们进行了解!
参考:
https://www.linuxprobe.com/basic-learning-08.html
Runtime:当前立即生效,重启后失效。
Permanent:当前不生效,重启后生效。
1.查看firewall服务状态 systemctl status firewalld 2、查看firewall的状态 firewall-cmd --state 3、开启、重启、关闭、firewalld.service服务 # 开启 systemctl start firewalld # 重启 systemctl restart firewalld # 关闭 systemctl stop firewalld 4、查看防火墙规则 firewall-cmd --list-all # 查看开放的端口 firewall-cmd --zone=public --list-ports 查询默认的区域名称 firewall-cmd --get-default-zone 5、查询、开放、关闭端口 # 查询端口是否开放 firewall-cmd --query-port=8080/tcp # 开放80端口 firewall-cmd --zone=public --permanent --add-port=80/tcp # 开放8080至8081端口 firewall-cmd --zone=public --add-port=8080-8081/tcp # 移除端口 firewall-cmd --zone=public --permanent --remove-port=80/tcp firewall-cmd --zone=public --permanent --remove-port=8080-8081/tcp #重启防火墙(修改配置后要重启防火墙) firewall-cmd --reload # 参数解释 1、firwall-cmd:是Linux提供的操作firewall的一个工具; 2、--permanent:表示设置为持久; --runtime:当前立即生效,重启后失效。 3、--add-port:标识添加的端口; #开机自启 systemctl enable firewalld.
在解决这个问题前,先说一下sql_mode是什么?它是一组mysql的语法校验规则,这个错误的原因基本就是你写的sql语句不符合ONLY_FULL_GROUP_BY规则,只需要设置一下sql_mode,在sql_mode中去掉ONLY_FULL_GROUP_BY这个规则。
我看了很多教程,步骤繁多,且不能解决问题,重启MySQL后sql_mode还是没变。我推荐大家都去改一下MySQL的配置,这样就能一劳永逸了。
在MySQL安装目录下,找到my.ini文件打开文件,设置sql_mode。
# 设置模式 [mysqld] sql_mode=ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER 复制上面的内容,保存文件,重启MySQL即可。
-- 查询当前sql_mode select @@global.sql_mode; 重启后可以使用上面的sql语句,看看sql_mode是不是你设置的,是的话就代表sql_mode设置成功了。
注意:[mysqld]一定不能省略,否则可能会不生效。
上文提到的sql_mode仅仅提供参考,这是我自己的配置,大家可以根据自己的需求配置不同的规则。其实,这个问题的解决就是去掉ONLY_FULL_GROUP_BY规则就行了。
如果大家想要多了解一些sql_mode,可以看看这篇文章mysql的sql_mode合理设置。
文章目录 引言一、安装依赖1.1 安装git1.2 克隆Autoware到本地1.3 自动安装相关依赖1.4 安装显卡驱动1.5 安装ROS2 Galactic1.6 安装ros2_dev_tools1.7 安装rmw_implementation1.8 安装pacmod1.9 安装autoware_core1.10 安装autoware universe dependencies1.11 安装pre_commit1.12 安装CUDA1.13 安装cuDNN and TensorRT 二、编译源码2.1 下载Universe代码库2.2 安装 Autoware ROS依赖包2.3 编译工作空间2.4 编译报错 三、 运行示例3.1 路径规划与车道跟随3.2 倒车入库3.3 添加行人与车辆3.4 交通灯识别仿真3.5 靠边停车3.5.1 平移停靠3.5.2 几何停靠3.5.3 后向停靠 3.6 路边起步3.6.1 平移起步3.6.2 几何起步与后向起步 3.7 变道3.8 禁停区 四、安装Awsim五、Autoware与Awsim联调 本文介绍Autoware.universe在Ubuntu20.04中的详细安装步骤,并测试一些Autoware.universe的基本功能,最后测试使用官方模拟器进行联调,本系列其他文章:
Autoware.universe部署02:高精Lanelet2地图的绘制
Autoware.universe部署03:与Carla(二进制版)联调
Autoware.universe部署04:universe传感器ROS2驱动
引言 本文介绍Autoware.universe在Ubuntu20.04中的详细安装步骤,基于ROS2 Galactic,其官方网站:Autoware Documentation
注意:左上角选择Galactic版本
最终运行效果:
一、安装依赖 在第3步自动安装依赖时,可以将ROS2 Galactic一并安装,也可以提前自己手动安装。
1.1 安装git sudo apt-get -y update sudo apt-get -y install git 1.
系列文章目录 【车载以太网测试从入门到精通】系列文章目录汇总
文章目录 系列文章目录前言一、主/从模式测试二、主/从模式配置三、Link-up/ Link-down时间四、低压通信范围测试五、高压通信范围测试 前言 车载以太网是一种用以太网连接车内电子单元的新型局域网技术。与普通的以太网使用4对非屏蔽双绞线(UTP)电缆不同,车载以太网在单对非屏蔽双绞线上可实现100Mbit/s甚至1Gbit/s的数据传输速率,同时还应满足汽车行业对高可靠性、低电磁辐射、低功耗、带宽分配、低延迟以及同步实时性等方面的要求。
车载以太网的物理层采用了博通公司的BroadR-Reach技术,BroadR-Reach的物理层(PHY)技术已经由单线对以太网联盟(One-pair Ethernet Alliance,OPEN)标准化,因此有时也称车载以太网为BroadR-Reach(BRR)或OABR(Open Alliance BroadR-Reach)。
本章节就主要介绍车载以太网物理层如何测试。
一、主/从模式测试 测试目的:验证车载以太网 PHY 的 Master/Slave 配置是否符合需求规范。
前置条件:DUT正常工作
测试步骤:
1、设置DUT供电电压 𝑉𝑏𝑎𝑡 为 𝑉𝑁𝑂𝑅𝑀𝐴𝐿;
2、DUT 上电,DUT 处于持续唤醒状态;
3、设置 Link Partner 为 Slave 模式;
4、读取 DUT 的 Link 状态,DUT Link 状态应符合需求规范为 Link Up/Link Down;
5、设置 Link Partner 为 Master 模式;
6、读取 DUT 的 Link 状态,DUT Link 状态应符合需求规范为Link Down/Link Up。
二、主/从模式配置 测试目的:验证车载 以太网PHY 是否可以配置 Master/Slave 模式。
前置条件:DUT正常工作
测试步骤:
1、设置DUT供电电压 𝑉𝑏𝑎𝑡 为 𝑉𝑁𝑂𝑅𝑀𝐴𝐿;
目录
概述
界面展示 & 前端代码(Vue)
后端实现(SpringBoot)
Maven依赖 下单接口(主要功能代码)
支付成功回调接口
测试(后端线上环境)
概述 本篇博文主要演示和说明网页扫码实现微信支付的功能。
Native支付?
Native支付是指商户系统按微信支付协议生成支付二维码,用户再用微信“扫一扫”完成支付的模式。
使用前提?
已注册成为微信商户,在微信商户平台开通"Native支付",获取API证书和API密匙等参数,如果对于注册微信商户有所疑惑,请看博文:http://t.csdn.cn/BCecm,博文有讲解从零到商户的注册过程要求说明。
主要流程概述
Native支付的流程很简单,主要为:
1.前端传入金额等参数。
2.后端拿着参数向微信服务器创建预支付订单,取回一个支付地址,传回前端。
3.前端拿着支付地址生成二维码,微信扫码完成支付。
界面展示 & 前端代码(Vue) 关于支付地址转为二维码
在此使用的是QRCode,使用方式很简单,导入,声明二维码放置节点元素,实例化QRCode生成二维码。具体使用方式看示例代码,或文档地址:
github地址
中文使用说明地址
js文件地址
输入金额,点击"捐助",调用后端接口获取支付地址,生成支付二维码。
<template> <div id="container"> <!-- 图片 --> <div id="imgJuan"></div> <!-- 表单 --> <div id="input_box"><input type="text" id="my_input" v-model="total" :placeholder="iptText"><button @click="payHandle">捐助</button></div> <!-- 占位 --> <div style="height: 10px;"></div> <!-- 二维码 --> <div id="qrcode" ref="qrCodeBox" v-show="showFlag"></div> </div> </template> <script setup> import { ref, onMounted, getCurrentInstance } from "
在做项目时,遇到视频流加载切换和分屏播放的问题。在这里简单记录一下:
实现效果:
一、获取视频流 (1)通过后台请求获得;
一般在通过 axios 请求,在onMounted 中获取数据;
(2)本地组装视频列表;
let root = [ { id: 1, label: "分屏画面", parentId: null } ]; let equpment = [ { name: "画面一", url: "https://dh5.cntv.myalicdn.com/asp/h5e/hls/main/0303000a/3/default/177cdd67413748f7ae3cbbbb07ae6481/main.m3u8?maxbr=2048&contentid=15120519184043" }, { name: "画面二", url: "https://dh5.cntv.myalicdn.com/asp/h5e/hls/main/0303000a/3/default/aa2c5c39961342809a3cbad11011d2c4/main.m3u8?maxbr=2048&contentid=15120519184043" }, { name: "画面三", url: "https://dh5.cntv.myalicdn.com/asp/h5e/hls/main/0303000a/3/default/51f949219dae487baa50137b2a1c67d5/main.m3u8?maxbr=2048&contentid=15120519184043" }, { name: "画面四", url: "https://dh5.cntv.myalicdn.com/asp/h5e/hls/main/0303000a/3/default/c06812c1aab74b268c79ed2df65386d2/main.m3u8?maxbr=2048&contentid=15120519184043" }, ] let newEqup = equpment.map((item: any, index: any) => ( { id: index + 2, label: item.name, url: item.url, parentId: 1, } )) let resList = [.
参考:https://blog.csdn.net/weixin_46522531/article/details/126292477
预计阅读+操作时间:5分钟
Mac电脑由于使用的是苹果自己的编译器,很多头文件不支持,像万能头就是其中的一员。万能头可以为我们节省很多时间,减少很多不必要的麻烦。本文将介绍通过修改文件使Mac电脑能够使用万能头。
第一步
打开访达
第二步
选择前往,点击前往文件夹
第三步
输入:
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include
并按下换行
第四步
选择c++
第五步
选择v1
第六步
有没有发现很多熟悉的朋友?
在该目录下创建文件夹,并将其命名为bits
第七步
创建文件名为stdc++.h,并将其放入bits文件夹 ,在文件内输入以下内容
// C++ includes used for precompiling -*- C++ -*- // Copyright (C) 2003-2014 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the // terms of the GNU General Public License as published by the // Free Software Foundation; either version 3, or (at your option) // any later version.
Windows 端 VS Code 远程连接服务器以及配置服务器上的 Jupyter Notebook 环境 一、VS Code 配置远程连接 1. Windows 下生成 ssh 密钥 打开命令提示符窗口。执行以下命令:
ssh-keygen 然后一直回车,最后会在 C 盘用户目录下生成一个.ssh文件夹,里面有一个公钥文件(扩展名为 .pub)和一个私钥文件。
2. 安装插件 Remote - SSH 插件安装位置设置可参考 Windows 10 下 VS Code 配置 C++ 开发环境(MinGW)插件安装那部分。
安装 “Remote - SSH” 插件,安装这个插件时,“Remote - SSH: Editing Configuration Files” 和 “Remote Explorer” 会被连带着安装。
安装插件后,按快捷键Crtl + Shift + P调出控制面板,选择 “Remote-SSH:Connect to Host…” 选项。
然后选择 “Add New SSH Host…” 选项。
然后根据自己的信息以图中格式配置C:\Users\username\.ssh\config文件。
保存并退出。
配置好之后就可以远程访问服务器了!
在服务器端的~/.ssh文件夹下(如果没有这个文件夹就手动创建)用 touch 命令新建一个文件authorized_keys,然后将公钥文件里的内容复制到此文件中,保存退出。
目录
一、图的基本操作 二、图的遍历 ①广度优先搜索
基本思想
BFS实现方法
BFS算法代码
BFS算法分析
BFS算法应用
②深度优先搜索 基本思想
DFS实现方法
DFS算法代码
DFS算法分析
DFS算法应用 三、遍历得到的生成树、生成森林相关问题 一、图的基本操作 //备注为图在邻接矩阵法和邻接表法下的时间复杂度,问题规模V为顶点数,E为边数。
邻接矩阵法的顶点表为一维数组,边表为二维数组存储。
邻接表法的顶点表为一维数组,边表为V个链表。
Adjacent(G,x,y) 判断图G是否存在边(x,y)或<x,y>。//邻接矩阵法为O(1),邻接表法为O(E)Neighbors(G,x) 列出图G中与顶点x邻接的边。//邻接矩阵法为O(V),邻接表法为O(E)InsertVex( &G, x ) 在图G中增添新顶点x。//邻接矩阵法为O(V),邻接表法为O(1)DeleteVex( &G, x ) 在图G中删除顶点x及其相关的弧。//邻接矩阵法为O() ,邻接表法需遍历整个邻接表找相关弧故为O(E)。 AddEdge( &G, x, y ) 若无向边(x,y)或有向边<x,y>不存在,则向图中添加该边。//邻接矩阵法为O(1),邻接表法即同单链表头插为O(1)。RemoveEdge( &G, x, y ) 若无向边(x,y)或有向边<x,y>存在,则在图中删除该边。//邻接矩阵法为O(1),邻接表法为O(E)。Get_edge_value(G,x,y) 获取图G无向边(x,y)或有向边<x,y>对应的权值。 //等同判断该边是否存在。Set_edge_value(G,x,y,v) 设置图G无向边(x,y)或有向边<x,y>的权值为v。//等同判断该边是否存在。//对于有向图G=(V,E),如果有弧<v,v’>,则称顶点V邻接到顶点V’,或顶点V’邻接自顶点VFirstNeighbor( G, x) 返回顶点x的第一个邻接顶点的顶点号。若顶点在G中没有邻接顶点,则返回-1。//邻接矩阵法为O(V),邻接表法为O(1)NextNeighbor( G, x, y ) 假设顶点y是顶点x的一个邻接顶点,返回除y外顶点x的下一个邻接点的顶点号,若y是x的最后一个邻接顶点,则返回-1。//邻接矩阵法为O(V),邻接表法为O(1) 二、图的遍历 图的遍历是指从图中某一个顶点出发,按某种搜索方法沿着图中的边对图中的所有顶点都访问一次且仅访问一次。
图的任一顶点都可能会和其余的顶点相邻接,所以在访问某个顶点后,可能沿着某条路径搜索又回到该顶点上。为避免同一顶点被访问多次,在遍历图的过程中,我们必须记下每个已经访问过的顶点,为此可以设置一个辅助数组visited[]来标记顶点是否被访问过。
图的遍历算法主要有两种:广度优先搜索和深度优先搜索。
①广度优先搜索 (Breadth-First-Search,BFS)类似于树的层序遍历算法。
基本思想 首先访问起始顶点v;然后依次访问v的未访问过的邻接顶点、,...,;然后依次访问、,...,的所有未被访问过的邻接顶点;再从依次从这些访问过的邻接顶点出发,访问它们的所有未被访问过的邻接顶点;依次类推,直到与V连通的所有顶点都被访问过为止。若此时图中尚有顶点未被访问,则选另图中一个未曾被访问过的顶点作为起始顶点,重复上述过程,直到图中所有顶点都被访问过为止。 BFS实现方法 找一个顶点的所有未访问过的邻接顶点我们用到这两个接口函数FirstNeighbor( G, x)、NextNeighbor( G, x, y ) 我们访问完、,.
日志文件 日志文件是用于记录系统操作事件的文件集合。
日志文件它具有处理历史数据、诊断问题的追踪以及理解系统的活动等重要的作用。
日志种类 调试日志 调试程序,或者做一些状态的输出,便于我们查询程序的运行状况。为了让我们能够更加灵活且方便的控制这些调试信息,我们肯定是需要更加专业的日志技术。我们平时在调试程序的过程中所使用的肯定就是专业开发工具自带的debug 功能,可以实时查看程序运行情况,不能够有效保存运行情况的信息。调试日志是能够更加方便的去“重现”这些问题。
系统日志 系统日志是用来记录系统中硬件、软件和系统相关问题的信息。同时还可以监视系统中发生的事件。用户可以通过它来检查错误发生的原因,或者寻找收到攻击是留下的痕迹。
系统日志包括系统日志、应用日志和安全日志这几种分类。
日志框架及作用 日志作用 控制日志输出的内容和格式。控制日志输出的位置。日志文件相关的优化,如异步操作、归档、压缩日志系统的维护面向接口开发-日志的门面 目前日志框架 日志门面:为了将各个服务框架中自带的日志进行统一门面处理,使用门面技术。
JCL (Jakarta Commons Logging)slf4j ( Simple Logging Facade for Java) 日志实现:
JUL--JDK自带的原生日志框架,不需要导入第三方依赖。在java.util.loggingLog4j--Apache开源项目,性能问题,Apache公司已经停止维护logback--与Log4j同一人开发,吸收Log4j优点,且可靠、通用,灵活,springboot2.0以后默认使用log4j2--利用logback优势特征,在log4j基础上改进为log4j2版本,springboot1.4以后支持log4j2,目前性能最好的日志框架 日志门面与日志实现区别:
日志框架技术:JUL、Log4j、log4j2、logback,用来记录日志信息日志门面技术:JCL、slf4j,用来解决 应用程序 在使用各种日志框架对应API时候导致的耦合性,因此提出一套门面技术,开发人员只需调用门面接口即可。 JUL(了解) 1、简介
全程Java Util Logging,它是java原生的日志框架,使用时不需要另外引用第三方的类库,相对其他的框架使用方便,学习简单,主要是使用在小型应用中。
2、组件及介绍
Logger:被称为记录器,应用程序通过获取Logger对象,抵用其API来发布日志信息。Logger通常被认为是访问日志系统的入口程序。Handler:处理器,每个Logger都会关联一个或者是一组 Handler,Logger 会将日志交给关联的Handler去做处理,由Handler 负责将日志做记录。Handler具体实现了日志的输出位置,比如可以输出到控制台或者是文件中等等。Filter:过滤器,根据需要定制哪些信息会被记录,哪些信息会被略过。Formatter:格式化组件,它负责对日志中的数据和信息进行转换和格式化,所以它决定了我们输出日志最终的形式。Level:日志的输出级别,每条日志消息都有一个关联的级别。我们根据输出级别的设置,用来展现最终所呈现的日志信息。根据不同的需求,去设置不同的级别。 3、入门代码
public class TestJUL { public static void main(String[] args) { /** * 日志入口程序 * Java.util.logging.Logger */ //Logger对象的创建方式,不能直接new对象 //取符对象的方法参数,需要引入当前类的全路径字符串(当前我们先这么用,以后根据包结构有Logger父子关系,以后详细介绍) Logger logger = Logger.getLogger("com.hweadee.logger.TestJUL"); /** * 日志输出的两种方式 */ // 方式一:使用info方法 logger.