ubuntu下安装和部署RAP2 1. 后台部署 1.1 安装mysql和redis $ sudo apt update $ sudo apt install mysql-server $ sudo apt install redis-server 1.2 安装pandoc 1.2.1 从pandoc release下载页面下载最新版本
$ wget https://github.com/jgm/pandoc/releases/download/3.1/pandoc-3.1-1-amd64.deb 1.2.2 安装
$ sudo dpkg -i pandoc-3.1-1-amd64.deb $ pandoc -v pandoc 3.1 Features: +server +lua Scripting engine: Lua 5.4 User data directory: /home/ubuntu/.local/share/pandoc Copyright (C) 2006-2023 John MacFarlane. Web: https://pandoc.org This is free software; see the source for copying conditions. There is no warranty, not even for merchantability or fitness for a particular purpose.
一、场景 方法A需要先执行,执行成功后返回结果,作为方法B的入参,然后执行方法B。
二、实现 解决地狱回调问题
const getProductTotal = async ()=>{ try { const num = await api.getProductsNum() const productsPrice = await api.getProductsPrice({num:num.data}) console.log('async await解决地狱回调:商品总价格=', productsPrice.data) }catch (err) { // axios封装方法中已经对异常消息进行弹出提示,此处无需再弹出消息提示 console.log('err',err) } }
一、目的 对Axios进行一下通用化的封装,目的是帮助简化代码和利于后期的更新维护。可以通用的配置如timeout、baseURL等抽取出来,对请求进行拦截处理等,方便后期管理。
二、步骤 1.准备工作(安装axios、element-plus) npm install axios npm install element-plus 2.请求配置(封装axios请求为request.js文件) 在src目录下新建utils文件夹,在utils文件夹下新建request.js文件
import axios from "axios" import { ElMessage } from 'element-plus' // 网络请求公共配置 const instance = axios.create({ // 超时时间 timeout:5000 }) // 请求拦截器 instance.interceptors.request.use( config =>{ // 处理post请求、添加token头等 return config }, error => { return Promise.reject(error) } ) // 响应拦截器 instance.interceptors.response.use( response =>{ if (response.status !== 200) { return Promise.reject(response); } // 当后台使用封装commonResult时进行统一异常信息打印 if (response.data.success !== undefined && response.
文章目录 一、压力测试关注点1、压力测试分为两种测试场景2、压测参数设置3、压测结果查看4、压测结果分析5、影响性能的主要参考因素 二、压测脚本的编写1、创建线程组2、配置元件3、取样器4、响应断言5、添加监听器6、执行测试测试计划,查看测试报告7、命令行执行测试计划,查看测试报告 参考地址: https://blog.csdn.net/weixin_45189665/article/details/125278218 一、压力测试关注点 1、压力测试分为两种测试场景 一种是单一接口进行压测;第二种是多个接口同时压测。压测时间,一般控制在10-15分钟。如果是疲劳测试,可以压一天或一周。
2、压测参数设置 1)线程数:用于设置并发数量,也就是多少个用户同时访问
2)Rame-Up Period(in seconds):控制每隔多少秒内发动并发
3)循环次数:用于设置线程组的循环次数
4)调度器:设置压测的持续时间、延时时间
5)运行网络:最好设置与服务器在同一网络,降低因网速问题导致的结果不准确。
3、压测结果查看 脚本运行完成后,可通过查看结果树和聚合报告结果来显示接口是否运行成功及压测结果参数,主要关注的参数有:
1)Samples:表示一共发出的请求数
2)Average:平均响应时间,单位ms
3)Error%:测试出现的错误请求数量百分比
4)Throughput:吞吐量,简称tps,表示服务器每秒处理的请求数,tps越高说明服务器处理能力越好
4、压测结果分析 1)压测结束,登陆相应的web服务器查看CPU等性能指标,进行数据的分析;
2)不断的增加并发数,加到tps达到一定值开始出现下降,这个值就是最大的tps;
3)不断增加并发数,达到一个值后,服务器不断出现请求超时,这个值就是最大的并发数;
4)确定允许错误率的范围,与当前的错误率进行比较;
5、影响性能的主要参考因素 数据库、应用程序、中间件、网络和操作系统等方面。
二、压测脚本的编写 1、创建线程组 1)测试计划右键–>添加–>线程(用户)–>线程组
2)设置线程数500
2、配置元件 1)线程组右键–>添加–>配置元件–>HTTP信息头管理器
2)配置信息头参数(具体参数配置哪些需参照接口文档)
3)线程组右键–>添加–>配置元件–>HTTP请求默认值
4)配置http请求默认值参数(协议、IP、端口号、内容编码等)
3、取样器 1)线程组右键–>添加–>取样器–>HTTP请求
2)接口参数配置(根据实际接口信息进行配置)
4、响应断言 1)HTTP请求右键–>添加–>断言–>响应断言
2)断言参数配置
5、添加监听器 1)线程组右键–>添加–>监听器–>查看结果树
2)线程组右键–>添加–>监听器–>聚合报告
6、执行测试测试计划,查看测试报告 7、命令行执行测试计划,查看测试报告 使用命令行模式运行JMeter脚本可以大大缩减所需要的系统资源,因此关闭JMeter,使用命令行来运行。
1)执行命令(如果不在当前目录下,则需要填写绝对路径,文件夹需要提前建好):
jmeter -n -t E:\Jmeter/testplan/EWSHOP.jmx -l E:\Jmeter/result/result.txt -e -o E:\Jmeter/webreport
说明:
testplan/test.jmx 为测试计划文件路径
testplan/result/result.txt 为测试结果文件路径
testplan/webreport 为web报告保存路径
-h:帮助
-n:表示 非GUI模式下运行Jmeter
一、图简单说明下各个目录都是干嘛的:
总体框架:一个vue-cli的项目结构如下,其中src文件夹是需要掌握的,所以本文也重点讲解其中的文件,至于其他相关文件,了解一下即可。
四、文件结构细分
1、build——[webpack配置]
build文件主要是webpack的配置,主要启动文件是dev-server.js,当我们输入npm run dev首先启动的就是dev-server.js,它会去检查node及npm版本,加载配置文件,启动服务。
2、config——[vue项目配置]
config文件主要是项目相关配置,我们常用的就是当端口冲突时配置监听端口,打包输出路径及命名等
3、node_modules——[依赖包]
node_modules里面是项目依赖包,其中包括很多基础依赖,自己也可以根据需要安装其他依赖。
安装方法为打开cmd,进入项目目录,输入npm install [依赖包名称],回车。
在两种情况下我们会自己去安装依赖:
(1)项目运行缺少该依赖包:例如项目加载外部css会用到的css-loader,路由跳转vue-loader等(安装方法示例:npm install css-loader)
(2)安装插件:如vux(基于WEUI的移动端组件库),vue-swiper(轮播插件)
注:有时会安装指定依赖版本,需在依赖包名称后加上版本号信息,如安装11.1.4版本的vue-loader,输入npm install vue-loader@11.1.4
4、src——[项目核心文件]
项目核心文件前面已经进行了简单的说明,接下来重点讲解main.js,App.vue及router的index.js
五、脚手架代码详解
我们看下创建后的项目目录里的主要文件:
1、index.html——[主页]
这个没什么好说的,就是一个简单的html页面,这里id='app',是为后面的设置vue作用域有关的。
index.html如其他html一样,但一般只定义一个空的根节点,在main.js里面定义的实例将挂载在根节点下,内容都通过vue组件来填充
2、文件:Hello.vue
说明:在*.vue文件,template标签里写html代码,且template直接子级只能有一个标签。style标签里写样式,script里面写js代码。
3、文件:App.vue——[根组件]
<template> <div id="app"> <img src="./assets/logo.png"> <router-view/> //这里是用来展示路由页面内容的,如果想用跳转就用<router-link to='xxx'></router-link> </div> </template> <script> export default { name: 'App' } </script> <style> #app { font-family: 'Avenir', Helvetica, Arial, sans-serif; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; text-align: center; color: #2c3e50; margin-top: 60px; } </style> 一个vue页面通常由三部分组成:模板(template)、js(script)、样式(style):
先给出我自己的一份Treap的代码——传送门
一、什么是 Treap T r e a p = T r e e + H e a p Treap=Tree+Heap Treap=Tree+Heap T r e a p Treap Treap是一种平衡树
T r e a p Treap Treap发音为[tri:p]
这个单词的构造选取了 T r e e Tree Tree(树)的前两个字符和 H e a p Heap Heap(堆)的后三个字符, T r e a p = T r e e + H e a p Treap=Tree+Heap Treap=Tree+Heap
顾名思义
T r e a p Treap Treap把 B S T BST BST和 H e a p Heap Heap结合了起来
发表时间:2021
论文地址:https://arxiv.org/abs/2106.05786v1
文章目录 摘要3 方法3.1 总体结构3.1.1 Inner-Patch Self-Attention Block3.1.2 Cross-Patch Self-Attention Block3.1.3 Cross Attention based Transformer 结论 摘要 使用图像patch来替换transformer中的word token所需要的计算量是巨大的。
在本论文中,我们在Transformer中提出了一种新的注意机制,称为交叉注意力。在图像patch内部而不是整张图像中捕获局部信息,在单通道特征图中的图像patch之间捕获全局信息。
两个操作都比Transformer中的标准自注意力有更少的计算量。通过在patch内和patch间交替应用注意力,我们实现了交叉注意力以更低的计算代价保持性能,构建了一个称为交叉注意力Transformer(CAT)的分层网络。
3 方法 3.1 总体结构 如图2(a),首先在patch嵌入层将输入图像缩小到 H 1 = H / P , W 1 = W / P H_1=H/P,W_1=W/P H1=H/P,W1=W/P,并将通道数提升到 C 1 C_1 C1。接下来是一些在不同尺度进行特征提取的CAT层。
经过上面的预处理,进入第一个stage。patch数量是 H 1 / N × W 1 / N H_1/N×W_1/N H1/N×W1/N,patch大小为 N × N × C 1 N×N×C_1 N×N×C1。stage1输出的特征图作为 F 1 F_1 F1。
第一步:Gitehub上点击右边的clone,复制你要克隆项目的URL
第二步:以管理员身份打开IDEA,file→new→project from version controller
第三步:把刚刚复制的URL粘贴到第一个输入框里,可以修改路径,放到自己想要的目录下,然后点击clone
第四步:耐心等待一下可能有点慢,成功克隆项目↓
接下来在IEDA上部署项目,以及安装依赖后正常运行的步骤,详见:(62条消息) GitHub克隆别人的项目部署到IDEA运行的步骤_两条鱼h的博客-CSDN博客
并不全,记录了一些流程和注意点。新项目建议直接用zio2!
首先,从1.0迁移到2.0,可以使用官方的scalefix规则完成一部分方法自动替换(迁移主要解决方法重命名,去掉Has)。
然后,添加依赖到plugins.sbt:addSbtPlugin("ch.epfl.scala" % "sbt-scalafix" % "<version>")
然后,执行迁移:sbt "scalafixEnable; scalafixAll github:zio/zio/Zio2Upgrade?sha=series/2.x",这会完成大部分关于方法名的重写。
比如:之前含有effect的方法被重写为带有attempt,带有M的被重写为带有ZIO。
不过仍有一些方法是被删除的没有修正,或者遗漏的一些方法没有被重写,需要自己手动改了,基本不需要什么大的改动,删除的方法可以在官方迁移文档中找到,实在找不到可以到discord频道询问。
接着更新zio办法到2.0.0即可。这里不用直接更新到最新版,这样可以保证迁移是最小改动,迁移后再升级即可。所有生态库也需要升级,如果有的生态库不支持,就暂时不能升级。
对于业务系统,当我们执行上述命令后,其实我们已经完成了大部分迁移。最后,我们应该尝试编译项目,修复剩余的编译错误。通常这步必会报错,因为由于2.0已经删除了Has、ZEnv、ZManaged,迁移规则也并不是完善的。
执行迁移命令后,Has被直接删掉了,代码看起来更清爽。
在删除ZManaged后,官方发现迁移工作可能非常庞大,后来出了个过渡方案,允许暂时不迁移ZManaged,但是需要导入一个中间包:"dev.zio" %% "zio-managed" % "<2.x version>"
zio2全部使用Scope,所以ZManaged本身不在核心库了。如果打算直接迁移,把ZManaged[Any, E, A]改成ZIO[Scope, E, A]即可。同时把resource.use(f)改成ZIO.scoped { resource.flatMap(f) }。
之前ZManaged的acquireRelease相关方法都已经在ZIO中,toManaged_也需要删掉,返回的R类型多出一个Scope,返回类型从ZManaged[R, E, A]变成ZIO[R with Scope, E, A](此时需要ZIO.scoped()才能使用)。
Clock、Console、Random、System这些基础Layer已经移动到顶级包下面,需要改导入语句。
个人认为变动最大的是Transducer:拿一个zio-redis解码器举例,它在1.0中是这么写:
final val decoder: Transducer[RedisError.ProtocolError, Byte, RespValue] = { import internal.State val processLine = Transducer .fold[String, State](State.Start)(_.inProgress)(_ feed _) .mapM { case State.Done(value) => IO.succeedNow(value) case State.Failed => IO.fail(RedisError.ProtocolError("Invalid data received.")) case other => IO.
一、问题 GitBash中使用vue create xxx创建项目,上下箭头无法使用
二、解决方案 使用winpty vue.cmd create xxx命令代替 vue create xxx 在gitbash 的/etc/bash.bashrc使用别名winpty vue.cmd代替vue 在文件最底部加上alias vue='winpty vue.cmd'
目录 前言
虚拟环境简介
虚拟环境依赖模块的安装
1、安装好Python环境
2、安装第三方库(虚拟环境库)
3、 安装第三方模块virtualenvwrapper-win
为虚拟环境配置环境变量
1、配置环境变量
2、点击环境变量
3、在系统变量中,点击新建
4、新建系统变量编辑
虚拟环境相关操作
1、新建虚拟环境
2、查看虚拟环境配置情况
3、退出虚拟环境
4、删除虚拟环境
补充:virtualenv创建虚拟环境
1、安装好Python
2、安装第三方模块virtualenv
3、创建虚拟环境
4、激活虚拟环境
5、退出虚拟环境
6、删除虚拟环境
前言 如果希望方便自定义虚拟环境的安装路径,且以后方便使用管理,按照文章顺序阅读、进行操作即可;这个步骤较为复杂。如果不介意虚拟环境安装在C盘下,为了快速上手使用,可以考虑直接跳到补充内容下,和前文是互相独立了,而且步骤简单。 虚拟环境简介 虚拟环境英文名是virtual environment,它是一个虚拟化,从电脑独立开辟出来的环境。通俗的来讲,虚拟环境就是借助虚拟机来把一部分内容独立出来,我们把这部分独立出来的东西称作“容器”,在这个容器中,我们可以只安装我们需要的依赖包,各个容器之间互相隔离,互不影响。
例如:我的电脑已经安装了Python3,我想使用Python2,就可以在虚拟环境中安装Python2,与电脑中的Python3不冲突。
虚拟环境依赖模块的安装 1、安装好Python环境 2、安装第三方库(虚拟环境库) Python的第三方库virtualenv能够帮助我们创建虚拟环境,安装命令如下:
pip install virtualenv PS:使用virtualenv中的命令来创建虚拟环境的话,会默认同时在C盘用户目录中也创建一个环境,会占用C盘内存(我的用户名是buting):
因此,我们优先选择下面这一种创建虚拟环境的方式。 3、 安装第三方模块virtualenvwrapper-win virtualenvwrapper-win是一个基于virtualenv开发的工具包。
安装命令如下(需要先安装virtualenv):
pip install virtualenvwrapper-win 为虚拟环境配置环境变量 1、配置环境变量 先打开高级系统设置(如果不知道在哪里的话,可以在搜索框里面搜索;还有设置里面,也会有查找设置的搜索框)
2、点击环境变量 3、在系统变量中,点击新建 4、新建系统变量 变量名设置为:WORKON_HOME,注意变量名一定要大写;
变量值为你想新建环境变量的目录路径,建议在D盘或者E盘新建一个用来作为虚拟环境的目录,这样空间比较充裕。
虚拟环境相关操作 1、新建虚拟环境 我在配置环境变量时写的变量值是:D:\env,所以我新建虚拟环境就会默认存储到D:\env;
新建虚拟环境的命令如下:
mkvirtualenv 例如:我想创建一个名为my_env的虚拟环境,我在cmd输入mkvirtualenv my_env即可(在cmd任意目录下输入都可以):
创建好虚拟环境my_env后,会自动跳转到my_env目录下,路径前面有(my_env):
而且系统会默认为新建的虚拟环境配置电脑中安装好的Python环境(只包括部分执行命令,没有相关第三方模块),当然我们也可以在新虚拟环境my_env中重新安装Python。
2、查看虚拟环境配置情况 在cmd中运行 workon或者lsvirtualenv即可查看当前的虚拟环境配置情况:
3、退出虚拟环境 deactivate 4、删除虚拟环境 rmvirtualenv 已经成功删除虚拟环境my_env。
一:关于ping的问题
1.虚拟机ping百度
2.windows下ping linux的ip地址
3.linux下ping windows
二:防火墙的问题
三:ssh服务
四:VM中的还原默认设置
还原后的更改设置
五:相关服务是否打开
六:卸载VM软件重装
一:关于ping的问题
1.虚拟机ping百度
在虚拟机中ping百度看能不能先ping通,如果虚拟机连接不上网络的话Xshell肯定是连接不上的。
解决办法:点击虚拟机中的编辑–>虚拟网络编辑器
从这两张图中我们可以看到netmask和gateway对应的值,然后 vi /etc/sysconfig/network-scripts/ifcfg-ens33(注意最后的这个-ens33可能有的人的网卡并不一样,有的人的网卡是eth0)
然后在这个文件中按照如下的样例更改wq保存
保存好以后再运行 service network restart重启下网络就可以了
2.windows下ping linux的ip地址
以上问题解决以后查看windows下能否ping通linux的ip地址
ping不通的话可以采用以下办法解决
控制面板–>网络和 Internet–>网络连接
选择VM8后按照如下进行配置,注意图里面的ip地址配置是这样的,在博客第一张图中右下角可以看到一个子网IP,假如我们的子网IP是192.168.10.0,里面IP地址就填写192.168.10.1,子网IP是192.168.20.0,里面IP地址就填写192.168.20.1
此时点击确定以后我们在点击一下VM8的禁用,点击完以后禁用再右键单击一下启用,这时再去ping下linux的主机IP就能通了(虽然有点sb的操作,但是我试过了貌似只有这样才可以,就像重启操作一样,其实在很多时候windows下ping不通linux我们都可以先禁用一下VM8然后在启用它基本上就解决了)
3.linux下ping windows
一般情况下linux都是能ping通windows的,如果ping不通的话可以搜索一下原因,这里我就不叙述了。
二:防火墙的问题
二:检查你虚拟机中防火墙是否关闭
CentOs6中
查看防火墙状态:service iptables status
关闭防火墙:service iptables stop
禁用防火墙:chkconfig iptables off
CentOs7中
查看防火墙状态:systemctl status firewalld.service
关闭防火墙:systemctl stop firewalld.service
禁用防火墙:systemctl disable firewalld.service
三:ssh服务
如果防火墙没问题的话检查ssh服务是否开启
查看ssh状态:service sshd status
正常情况下都是active的,如果显示dead的话需要手动开启一下(service sshd start),如果开启时报错说没有安装ssh服务请先移步点这里
四:VM中的还原默认设置
如果以上的操作都没问题的话Xshell还是连接不上我们的虚拟机,可以点VM中的 编辑–>虚拟网络编辑器–还原默认设置(这个方法也特别有效</>)
注意还原好以后我们主要看一下VM8的
1.简介 Django是一个免费、开源的Python web框架,解决了web开发的许多麻烦,使开发者可以专注于编写应用而无需重复造轮子。
网站:https://www.djangoproject.com/官方文档:https://docs.djangoproject.com/源代码:https://docs.djangoproject.com/ 2.安装 使用pip安装最新版本的Django:
pip install django 也可以手动指定版本:
pip install django==3.2 Django支持的Python版本见What Python version can I use with Django?
安装完成后,可以在命令行使用django-admin辅助工具:
$ django-admin --version 3.2.11 3.入门教程 官方教程介绍了如何创建一个简单的投票应用:Writing your first Django app
该应用由两部分组成:
一个公共站点,用户可以查看问题并投票。一个管理站点,管理员可以添加、修改和删除问题。 完整代码:https://github.com/ZZy979/DjangoTutorial
3.1 第1部分:创建项目和应用 3.1.1 创建项目 在命令行中执行以下命令:
django-admin startproject mysite 该命令创建了一个名为mysite的项目(project),目录结构如下:
mysite/ manage.py mysite/ __init__.py settings.py urls.py asgi.py wsgi.py 外层mysite目录:项目根目录,可以放在任何位置,也可以任意重命名。manage.py:Django命令行工具,详见django-admin and manage.py。内层mysite目录:项目的Python包,用于导入模块(例如mysite.urls)。mysite/__init__.py:空文件,告诉Python该目录是一个Python包。mysite/settings.py:设置/配置,详见Django settings。mysite/urls.py:URL声明,相当于网站的“目录”,详见URL dispatcher。mysite/asgi.py:ASGI web服务器的入口,详见How to deploy with ASGI。mysite/wsgi.py:WSGI web服务器的入口,详见How to deploy with WSGI。 在项目根目录下执行以下命令:
python manage.
SpringBoot父类下的所有子类 简要 今天在想为什么一些中间件我们只需要实现它指定的接口,这些中间件就会识别到我们自定义的类。。。比如SpringWeb中的WebMvcConfigurer? 其实这些中间件能识别我们的实现类是使用了反射原理;
那么在Spring项目中我们如何通过反射原理来实现指定类下面的子类呢?Spring提供了ClassPathScanningCandidateComponentProvider类,可以帮助我们从包路径中获取到所需的 BeanDefinition 集合,然后动态注册 BeanDefinition 到 BeanDefinitionRegistry,到达在容器中动态生成 Bean 的目的
主要函数
addIncludeFilter – 添加一个包含过滤器 addExcludeFilter – 添加一个排除过滤器 findCandidateComponents – 核心任务 : 从指定的某个包内扫描目标bean组件定义 resetFilters – 设置包含过滤器和排除过滤器为空 clearCache – 清除扫描过程中所记录的类的元数据信息缓存 具体实现:
ClassPathScanningCandidateComponentProvider provider = new ClassPathScanningCandidateComponentProvider(false); provider.addIncludeFilter(new AssignableTypeFilter(FaterInterface.class));//查找某个类的子类 Set<BeanDefinition> sonclass = provider.findCandidateComponents("com.");//扫描指定包并返回子类 for (BeanDefinition s : sonclass) { //可通过反射进行业务操作 Class<?> aClass = Class.forName(s.getBeanClassName()); } 例1 普通类实现父类下子类的创建,并注册到spring容器中;
配置类:
@Configuration @Slf4j public class CreateBeanAutoConfig { @Bean public void getSonClass() { ClassPathScanningCandidateComponentProvider provider = new ClassPathScanningCandidateComponentProvider(false); provider.
推荐阅读Seismic Unix官网安装文档:https://www.seismicrocks.com/seismicunix/seismicrocks_script_endianness-suswapbytes.pdf
2021 9.20更新----
安装环境:Macbook Air M1,Parallels desktop安装的Ubuntu 20.04 Arm64
1.在CWP官网下载Seismic Unix的压缩文件包cwp_su_all_44R23.tar:Nextcloud这一步需要翻墙,如果翻不了可以找我要。
2.在/home/user目录下创建su目录,将cwp_su_all_44R23.tar解压到该目录,可以直接解压,也可以用命令操作:
tar zxvf cwp_su_all_44R23.tar -C /home/user/su 3.预安装必要的软件包
sudo apt-get update sudo apt-get install build-essential sudo apt-get install libx11-dev sudo apt-get install libxt-dev sudo apt-get install freeglut3 sudo apt-get install freeglut3-dev sudo apt-get install libxmu-dev sudo apt-get install libxi-dev sudo apt-get install gfortran 4.设置环境变量
vim ~/.bashrc 在bashrc文件的末尾添加
export CWPROOT=/home/user/su export PATH=$PATH:/home/user/su/bin 保存退出后执行:
source ~/.bashrc 5.修改Makefile
进入src文件夹:cd /home/user/su/src
打开Makefile文件:vim Makefile
目录 新建工程修改芯片型号添加自己的文件将自己的文件添加Cmake项目——修改CMakeLists_template,txt烧录程序——编写.cfg文件编写.cfg文件 新建工程 打开你的Clion,点击新建工程
在左侧找到STM32CubeMX,点击后在上方选择工程所在位置。
比如我的工程要存放在ClionSTM32文件夹下面,我在其后面写上我的工程名即可
设置好后点击右下角的创建
将untitled换成你的新工程名
点击创建
等待工程创建之后,会弹出“选择面板配置文件”
这个选择跳过,如果有你所用的开发板型号,可以直接选择。
如果你用的是自己的开发板或者是淘宝购买的非ST官方的板子,都选择跳过。后面会自己创建cfg文件
然后在左侧找到.ioc文件,也就是CubeMX的文件,点击“通过STM32CubeMX打开”,随后在CubeMX上配置你的工程文件
需要注意的是,工程默认芯片型号是F030F4Px
所以打开CubeMX之后需要先修改芯片型号
修改芯片型号 更换芯片型号
搜索芯片型号,后面按照自己的工程要求配置即可,CubeMX工程配置这里不做过多讲解
配置好工程后,要按照Clion创建时的工程名字和路径填写
先修改名字路径,再选择IDE为“STM32CubeIDE”
配置完成后,点击右上角的“generate code”
生成之后点击close,不要点击另外两个“open***”
然后回到刚刚的Clion工程
左侧可以看到有Inc和Src两个目录
Src里放这.c源文件 Inc里放着.h头文件
如果要添加自己的文件,只能分别添加在Src和Inc目录中
添加自己的文件 若想添加自己的目录,可以按照下面的方法
先右键工程名,新建—目录,填写文件夹名称,比如“template”
当然你也可以在文件夹内进行操作
将你自己的文件放置在工程目录里,Clion也会自动识别
找到新建的目录,右键新建两个文件,分别命名为template.c和template.h
创建好后可以在左侧看见自己创建的文件夹,打开你新建的.c和,h文件
可以看见上方提示不属于任何项目
所以我们还需要将其添加进Cmake里
将自己的文件添加Cmake项目——修改CMakeLists_template,txt 打开左方的“CMakeLists.txt”,可以看见上方提示“此文件从模板自动生成!请勿更改”
所以我们不在此文件里修改,因为每次从CubeMX里generate code生成代码后,该文件都会重新生成,导致我们在此文件做的修改都会被删除
所以我们需要在模板文件中修改添加文件路径
打开左侧的“CMakeLists_template,txt”
打开后找到“include_directories(${includes})”和“file(GLOB_RECURSE SOURCES ${sources})”
大概在51行附近
在include_directories中加入.h头文件的地址
在file中加入.c源文件所在的文件夹名称
这是我刚刚新建文件的路径,
ClionSTM32是我用来存放工程的文件夹
untitled是工程名,也就是我的工程文件夹
template是刚刚新建用来存放我的功能文件.c .h的文件夹
如上图,将template的路径添加进去,如果你的路径有子目录的话,如我的Debug文件在USER文件夹下面,按照上面的格式填入进去即可,不同的文件中间以空格隔开
对于.c源文件只需要填入文件的第一级目录
而.h文件则需要填写至.h文件的最后一级目录
修改完成之后,需要在CubeMX中重新generate code以更新你的CMakeLists.txt
重新生成后等待CMake加载完成就可以发现上方的提示已经没有了
如果还有提示,可以按上图重修加载一下你的CMake
如果仍然有问题,建议再对照一下上一步然后CubeMX里重新generate code
大部分和CMake有关的问题都可以试着generate code一下看看
烧录程序——编写.cfg文件 右上角的三个绿色按键分别是编译、下载和调试
编写完代码之后就可以编译并烧录
点击编译后,出现上方的“构建 已完成”,即表示编译成功,程序没有报错
此段时间涉及日期和时间戳数据处理较多,转化频繁,总结日期、时间戳、日期字符串之前的转化如下:
引入必要时间相关库:
import time, datetime import dateutil.relativedelta 返回当前日期的元组(struct_time),含有9个元素的元组 now_time = time.time() # 返回时间戳,浮点秒数 my_struct = time.localtime(time.time()) print( my_struct) #输出 time.struct_time(tm_year=2023, tm_mon=3, tm_mday=3, tm_hour=16, tm_min=42, tm_sec=36, tm_wday=4, tm_yday=62, tm_isdst=0) 当前时间戳 my_timestamp = time.mktime(time.localtime(time.time())) print(my_timestamp) # 输出 1677832956.0 时间戳—>日期字符串 my_date_str = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(my_timestamp)) print(my_date_str) # 输出 '2023-03-03 16:42:36' 日期字符串—>日期datetime my_date = datetime.datetime.strptime(my_date_str, "%Y-%m-%d %H:%M:%S") print(my_date) # 输出 2023-03-03 16:42:36 时间戳—>日期datetime stamp_to_datatime = datetime.datetime.strptime(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(my_timestamp)),"%Y-%m-%d %H:%M:%S") print(stamp_to_datatime) # 输出 2023-03-03 16:42:36 日期datetime—>时间戳 my_timestamp_1 = int(time.
1、安装依赖软件 yum install bc binutils compat-libcap1 compat-libstdc++ dtrace-modules dtrace-modules-headers dtrace-modules-provider-headers dtrace-utils elfutils-libelf elfutils-libelf elfutils-libelf-devel fontconfig-devel elfutils-libelf-devel-static gcc gcc-c++ glibc glibc-common glibc-devel glibc-headers kernel-headers ksh libaio libaio-devel libgcc libgomp libstdc++ libstdc+±devel libdtrace-ctf-devel libX11 libXau libXi libXtst libXrender libXrender-devel libgcc librdmacm-devel libstdc++ libstdc+±devel libxcb make net-tools nfs-utils python python-configshell python-rtslib python-six smartmontools targetcli unzip vim sysstat unixODBC unixODBC-devel
离线安装命令 rpm -ivh *.rpm --force --nodeps 查看依赖包
rpm -qa bc binutils compat-libcap1 compat-libstdc++ dtrace-modules dtrace-modules-headers dtrace-modules-provider-headers dtrace-utils elfutils-libelf elfutils-libelf elfutils-libelf-devel fontconfig-devel elfutils-libelf-devel-static gcc gcc-c++ glibc glibc-common glibc-devel glibc-headers kernel-headers ksh libaio libaio-devel libgcc libgomp libstdc++ libstdc+±devel libdtrace-ctf-devel libX11 libXau libXi libXtst libXrender libXrender-devel libgcc librdmacm-devel libstdc++ libstdc+±devel libxcb make net-tools nfs-utils python python-configshell python-rtslib python-six smartmontools targetcli unzip vim sysstat unixODBC unixODBC-devel
1、确保MySql正在运行 2、右键点击Navicat中的MySql图标,选择连接属性,将密码换成重装MySql时设置的密码,点击‘确认’后双击图标即可连接
注册商户号,使用微信支付功能。
直接无脑设置v3密钥,然后配合wxjava这个包进行开发。结果试了很多遍,都报错。
最后才发现,我一直使用的v2验证方式,之前都没有设置过v2密钥。最后把v2密钥设置成和v3一样,重新试了一下,解决问题。
最后附上v2和v3区别
浏览器是网页的渲染着和执行者,为了安全,浏览器默认是不允许跨源请求的,即CORS跨域(跨域资源共享,Cross-Origin Resource Sharing)的,也就是说默认不允许从来自于A服务器上的页面中访问B服务器上的资源。(这里可以参考“同源”的概念)。
如果要想允许跨源访问,需要指示浏览器允许跨源访问,CORS约定中需要通过发送CORS标头(Access-Control-Allow-Origin:*)来达到目的。这个标头可以是web服务器在响应请求时发送,也可以嵌在html页面中。如果由web服务器发送,则不同的web服务器方法不一样,请查相应的web服务器配置方法,它的好处是会影响一批web页面。如果是嵌在html页面中,就在头部中嵌入<meta http-equiv="Access-Control-Allow-Origin" content="*">,只影响本页面。
很不幸的是即使这样,有时候会出现“原因:CORS 预检响应的 'Access-Control-Allow-Headers',不允许使用头 'content-type')”这样的错误。这是因为CORS跨域请求又分为简单请求和复杂请求,你的请求属于复杂请求了。请参考CORS跨域简单请求和复杂请求的定义。要么把你的请求简单化(大部分情况下是可以的),要么配置另一个CORS标头(Access-Control-Request-Header),那就更复杂了。
注意:标头是加在最终被访问资源处的,如果是第一段的情况,是加在B上,不是A上。浏览器的验证发生在B上的资源返回以后。
详细请参考:
前端网络基础 - 跨域xhr/fetch_xhr 跨域_伏城之外的博客-CSDN博客
先来看一段映射文件 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.lkd.dao.RegionDao"> <!-- 通用查询映射结果 --> <resultMap id="regionMap" type="com.lkd.entity.RegionEntity" autoMapping="true"> <id column="id" property="id" /> <result column="name" property="name" /> <result column="remark" property="remark" /> <association property="nodeCount" column="id" select="com.lkd.dao.NodeDao.selectCountByRegionId"></association> </resultMap> </mapper> resultMap标签的作用在这里就不多说了
我们来回顾一下association标签的作用: 配置关联对象的映射关系 , 一般与resultMap标签联合使用
怎么理解这句话呢?
association(一对一):映射到JavaBean的某个“复杂类型”属性,比如JavaBean类,即JavaBean,即JavaBean内部嵌套一个复杂数据类型(JavaBean)属性,这种情况就属于复杂类型的关联。但是需要注意:association仅处理一对一的关联关系。
而在这里,它并不是映射了一个复杂类型的属性,看下该xml文件所对应的实体类
@Data @TableName(value = "tb_region",autoResultMap = true,resultMap = "regionMap") public class RegionEntity { @TableId(value = "id",type = IdType.ASSIGN_ID) private Long id; private String name; private String remark; @TableField(exist = false)//表示并非该表字段 private Integer nodeCount; @TableField(exist = false) private List<NodeEntity> nodeList; } 很明显,一个普通的包装类
💌 所属专栏:【微信小程序开发教程】 😀 作 者:我是夜阑的狗🐶 🚀 个人简介:一个正在努力学技术的CV工程师,专注基础和实战分享 ,欢迎咨询!
💖 欢迎大家:这里是CSDN,我总结知识的地方,喜欢的话请三连,有问题请私信 😘 😘 😘
文章目录 前言一、网络数据请求1、小程序中网络数据请求的限制2、配置 request 合法域名3、发起 GET 请求4、发起 POST请求5、在页面刚加载时请求数据6、跳过 request 合法域名校验7、关于跨域和 Ajax 的说明 总结 前言 大家好,又见面了,我是夜阑的狗🐶,本文是专栏【微信小程序开发教程】专栏的第19篇文章;
今天开始学习微信小程序的第十天💖💖💖,开启新的征程,记录最美好的时刻🎉,每天进步一点点。
专栏地址:【微信小程序开发教程】, 此专栏是我是夜阑的狗微信小程序开发过程的总结,希望能够加深自己的印象,以及帮助到其他的小伙伴😉😉。
如果文章有什么需要改进的地方还请大佬不吝赐教👏👏。
一、网络数据请求 前面已经介绍完了页面配置,通过栗子学习了如何单独对页面进行配置。接下来就来讲解一下小程序的网络数据请求。话不多说,让我们原文再续,书接上回吧。
1、小程序中网络数据请求的限制 小程序官方出于安全性方面的考虑,对数据接口的请求做出了如下两个限制:
只能请求 HTTPS 类型的接口,无法请求 HTTP 类型接口;
如果要请求某个域名下的接口,必须将接口的域名添加到信任列表中;
比如通过微信开发者工具,请求百度API相关的接口,需要操作:
详细 --> 项目配置 --> 域名信息 --> request 合法域名
request 合法域名一开始默认是空的(未设置)。比如要用到百度API的接口,需要将百度API的域名(https://aip.baidubce.com)填写到 request 合法域名即可。当配置成功之后,就可以在自己的小程序中去请求这个域名下的所有接口。
2、配置 request 合法域名 前面大致了解到了如何配置域名,接下来用栗子来学习一下整个配置过程。这里以自己微信小程序为例,希望请求 https://www.escook.cn/ 域名下的接口,具体步骤为:
登录微信小程序管理后台 -> 开发 -> 开发设置 -> 服务器域名 -> 修改 request 合法域名
如图
针上以上问题的解决方法:
方案一:
你用的是这样的镜像:cn_windows_7_professional_vl_build_x64_dvd_x15-71029
换镜像源、换镜像源、换镜像源!
换成带sp1的iso镜像:cn_windows_7_enterprise_with_sp1_x64_dvd_u_677685.iso
方案二:找对应补丁包安装
下载补丁包:Microsoft Update Catalog
查看历史运行命令及时间
通常使用history来查看历史运行的命令,直接输入此命令,只会显示运行的命令,没有显示在什么时间运行的,如果要查看运行命令的时间,具体方法通过下面两步就可以显示:
1.export HISTTIMEFORMAT='%F %T '
2.history|grep start
stm32mp157开发板FS-MP1A是华清远见自主研发的一款高品质、高性价比的Linux+单片机二合一的嵌入式教学级开发板。开发板搭载ST的STM32MP157高性能微处理器,集成2个Cortex-A7核和1个Cortex-M4 核,A7核上可以跑Linux操作系统,M4核上可以跑FreeRTOS、RT-Thread等实时操作系统。开发板搭配仿真器、显示屏、摄像头、资源扩展板等丰富的扩展模块,可拓展物联网、人工智能等相关技术学习,还可以拓展丰富的项目实战,非常贴合企业当下开发需求,是一款嵌入式Linux入门进阶必备开发板!
可学习技术:嵌入式Linux应用/系统/驱动开发、ARM裸机开发、Qt界面编程、STM32单片机、FreeRTOS、人工智能机器视觉等。其中ARM Cortex-A7裸机开发课程是华清远见独有特色课程,可关注:https://www.bilibili.com/video/BV1Xe4y1i7vm/,持续更新中。
14个Linux+Qt综合项目案例,6个MP1A物联网拓展项目
公众号“华清远见在线实验室”,回复“mp157项目”,即可领取项目配套文档及源码。 Linux+Qt综合项目案例:华清远见stm32mp157开发板优势特色部分,包括音乐播放器、智慧家庭、智能工业电表、智能出行助手、智能猫眼、环境监测、智能安防、智能语音识别等10余个项目案例,涉及家居、医疗、农业多种应用方向,在案例中使用了多种物联网和嵌入式技术,包括OT开发、linux应用开发、linux驱动开发、物联网云端接入、MQTT协议、json字符串等知识点。
基于Linux+Qt的环境检测项目 项目功能介绍:
(1)设计有环境监测功能,通过温湿度、光照传感器实时采集环境温度、湿度、光照显示到 LCD 屏上。
(2)设计有设备控制功能,通过控制触摸屏来进行控制 3 个 LED 灯、风扇、蜂鸣器。
(3)设计智能检测功能,用户可以根据自己的需求修改智能检测的阈值,开启智能检测后,当环境达到阈值后会启动设备。比如设置温度阈值为 28 摄氏度,当环境温度达到 28 摄氏度时,会自动开启风扇。设置一级照明为 50lux,二级照明为 30lux,三级照明为 1lux,当光照强度小于 50lux 会开启一个 led 灯,小于 30lux 会开启 2 个 led 灯,当光照强度小于 1lux 时,3 个 led 灯会全部开启。
开发平台:
华清远见stm32mp157开发板豪华套餐(开发板+仿真器+五寸屏+摄像头+资源扩展板+tf卡+读卡器)
项目实战:
Qt 开发环境搭建 主机开发环境说明 1) 本文档主要介绍 linux 环境下的 Qt 程序开发;
2) 主机 Qt 版本为 5.14.1;
主机 Qt 环境搭建及使用 Qt Creator 安装 将 qt-creator-opensource-linux-x86_64-4.10.1.run(Qt 实验源码\工具软件) 复制到 ubuntu 主机中,可以采用共享文件夹的方式也可以使用 tfp方式将文 件存入家目录下的 Downloads 目录。我们需要在终端中赋予安装程序可执行的权限
messages 日志是核心系统日志文件。它包含了系统启动时的引导消息,以及系统运行时的其他状态消息。IO 错误、网络错误和其他系统错误都会记录到这个文件中。其他信息,比如某个人的身份切换为 root,也在这里列出。如果服务正在运行,比如 DHCP 服务器,您可以在 messages 文件中观察它的活动。通常,/var/log/messages 是您在做故障诊断时首先要查看的文件。
/var/log/messages文件中存放的就是系统的日志信息,当内核程序调试时,printk语句所产生的信息显示不出来的时候,就使用cat /var/log/messages文件的方法,查看所打印出的信息.
PS.要查看文件的最后几行,使用tai命令,tail /var/log/messages
————————————————
版权声明:本文为CSDN博主「让爱远行2015」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u011065164/article/details/75007758
打开message日志系统
高版本ubuntu系统默认没有 /var/log/messages,因为在 /etc/rsyslog.d/50-default.conf 文件中,将其注释掉了。如下图
所以需修改该配置文件,将注释放开。
然后重启rsyslog服务即可。
systemctl restart rsyslog.service 进入 /var/log/ 目录下就可以看到 messages 文件
作者:TASK_RUNNING
链接:https://www.jianshu.com/p/75d8da039815
来源:简书
目录
Rsyslog系统日志管理
一、常见的系统日志
二、日志管理程序
三、日志级别
四、日志配置
五、远程日志管理
六、日志轮转
Rsyslog系统日志管理
课程目标
了解日志的级别与作用
掌握 rsyslog 服务的本地日志和远程日志的管理
能够使用 logrotate 程序根据需求对日志进行轮转
一、常见的系统日志
日志格式:文本日志/二进制日志/数据库日志
默认的相关日志文件:
/var/log/boot.log 系统引导日志,记录开机启动信息
/var/log/dmesg 核心的启动日志
/var/log/message 系统的日志文件
/var/log/maillog 邮件服务的日志
/var/log/xferlog ftp服务的日志
/var/log/secure 网络连接及系统登录的安全信息
/var/log/cron 定时任务的日志
文章目录 Scala安装配置一、Scala简介1. 概述1.1 为什么要使用scala?1.2 Scala 发展历史1.3 Scala 和 Java 关系1.4 Scala 语言特点 2. Scala对比Java案例一案例二 二、开发环境安装1. 使用版本2. Scala执行流程3. 安装JDK4. 安装scala SDK4.1 下载Scala4.2 安装Scala 5. 测试是否安装成功6. 安装IDEA scala插件7. 新建项目 三、scala解释器1. 启动scala解释器2. 执行scala代码3. 退出解释器 四、HelloWorld 案例1. 创建 IDEA 项目工程1)打开 IDEA->点击左侧的 Flie->选择 New->选择 Project…2)创建一个 Maven 工程,并点击 next3)默认下,Maven 不支持 Scala 的开发,需要引入 Scala 框架。4)创建项目的源文件目录5)在 scala 包下,创建包 com.atguigu.chapter01 包名和 Hello 类名6)编写输出 Hello Scala 案例 2. 代码中语法的简单说明 五、关联 Scala 源码六、官方编程指南 Scala安装配置 一、Scala简介 1. 概述 Scala(斯嘎拉)这个名字来源于"Scalable Language(可伸缩的语言)",它是一门基于JVM的多范式编程语言,通俗的说:Scala是一种运行在JVM上的函数式的面向对象语言。之所以这样命名,是因为它的设计目标是:随着用户的需求一起成长。Scala可被广泛应用于各种编程任务, 从编写小型的脚本到构建巨型系统,它都能胜任。正因如此, Scala得以提供一些出众的特性, 例如: 它集成了面向对象编程和面向函数式编程的各种特性, 以及更高层的并发模型。
基础命令 AT&F 重置 AT 命令设置为出厂设置
AT&F
AT&W 存储当前设置到用户定义配置文件
AT&W[] 整型 0 配置文件编号。 用于存储当前的 AT 命令设置。
AT&W0
响应 ok
时间
AT+QLTS=2 //查询通过网络同步的最新时间计算出的当前本地时间
关闭程序:
AT+QPOWD
发送 AT+QPOWD 后,请勿执行任何其他 AT 命令。成功执行命令后,模块将输出消息 POWERED
DOWN,然后进入关机状态。为了避免数据丢失,建议在输出 URC POWERED DOWN 后等待 3 秒以断开
电源。若 65 秒后仍未收到 POWER DOWN,则必须强制断开电源。
查询本机电话
AT+CNUM
AT+QURCCFG=“urcport”,“uart1” //配置为串口上报URC
AT+CNMI=2,1,0,1,0 //配置新短信提示上报的URC为+CMTI: ,,其余配置看手册
拨打电话 AT^DSCI=1 开启呼叫状态信息提醒
ATD18772612940; 拨打电话
AT+QWTTS=1,0,2,“目前塔机处于锁机状态” 拨打电话插播语音
AT+CHUP 挂断语音电话(数据通话没有断)
响应
^DSCI: 1,0,2,0,18772612940,129 发起呼叫开始
^DSCI: 1,0,7,0,18772612940,129 呼叫响铃中
^DSCI: 1,0,3,0,18772612940,129 用户已接听
^DSCI: 1,0,6,0,18772612940,129 呼叫结束
html中进行设置 //不带参数 <nuxt-link to="/companyProfile#goQyjj" target='_blank' tag="a"></nuxt-link> <nuxt-link :to="{path:'/home'}" target='_blank'> <nuxt-link :to="{name:'/home'}" target='_blank'> //带参数 <nuxt-link :to="{ path: '/home/media',query:{category_id:1}}" target='_blank' tag="a"> js进行路由跳转 一、push:跳转到指定url路径,并想history栈中添加一个记录,点击后退会返回到上一个页面 //不带参数 this.$router.push({path:'/home/news'}); //带参数 this.$router.push({path:'/home/news',query:{news_id:news_id,visit_flag:1}}); this.$router.push({path:'/home/news',params:{news_id:news_id,visit_flag:1}}); //通过name跳转 openNew(name, id) { this.$router.push({ name: name, query: { id: id } }) }, 二、replace用法同push一样,跳转到指定url路径,但是history栈中不会有记录,点击返回会跳转到上上个页面 (就是直接替换了当前页面) this.$router.replace() 三、go向前或者向后跳转n个页面,n可为正整数或负整数 this.$router.go(n) 注意:query和params区别
query类似 get, 跳转之后页面 url后面会拼接参数,类似?id=1, 非重要性的可以这样传, 密码之类还是用params刷新页面id还在
params类似 post, 跳转之后页面 url后面不会拼接参数 , 但是刷新页面id 会消失
跳转到外部链接 indow.open(url,'_blank')
一.安装CUDA 切换显卡驱动,并通过NVIDIA-smi查看信息: 考虑到后面安装PyTorch,不建议使用最新的驱动,这样CUDA版本不会过高。
在英伟达官网下载CUDA,我的是11.8。 wget https://developer.download.nvidia.com/compute/cuda/11.8.0/local_installers/cuda_11.8.0_520.61.05_linux.run sudo sh cuda_11.8.0_520.61.05_linux.run 安装 如果在这一步报错Failed to verify gcc version. See log at /var/log/cuda-installer.log for details.解决方案为:
sudo sh cuda_11.8.0_520.61.05_linux --override 在下一个界面中,不要安装显卡驱动,选择安装即可。
Please make sure that - PATH includes /usr/local/cuda-11./bin - LD_LIBRARY_PATH includes /usr/local/cuda-11.8/lib64, or, add /usr/local/cuda-11.8/lib64 to /etc/ld.so.conf and run ldconfig as root 这个代码的路径很重要。
输入vim ~/.bashrc
在最后添加
export PATH="/usr/local/cuda-11.8/bin:$PATH" export LD_LIBRARY_PATH="/usr/local/cuda-11.8/lib64:$LD_LIBRARY_PATH" 保存之后出来
source ~/.bashrc 验证 nvcc -V 得到如上结果即可。
二.安装cuDNN 下载对应版本(我的是11.8)以deb为例 输入以下代码: wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-ubuntu2204.pin sudo mv cuda-ubuntu2204.
空待整理
今天写第一个Spring项目的时候,项目中的pom.xml突然出现了报红情况,父子项目都有:
尝试过清除缓存,修改jdk版本等等方法都没法解决
最后发现其实很简单:
我找到idea的Maven中的setting.xml的地址并打开:
打开发现是setting.xml中设置的映射有误,修改成正确映射之后就没事了
💌 所属专栏:【JavaScript随手笔记】 😀 作 者:我是夜阑的狗🐶 🚀 个人简介:一个正在努力学技术的CV工程师,专注基础和实战分享 ,欢迎咨询!
💖 欢迎大家:这里是CSDN,我总结知识的地方,喜欢的话请三连,有问题请私信 😘 😘 😘
文章目录 前言一、方法一:点击切换1.实现原理2.实现过程3.实现效果 二、方法二:定时切换1.实现原理2.实现过程3.实现效果 总结 前言 大家好,又见面了,我是夜阑的狗,本文是专栏 【JavaScript随手笔记】专栏的第3篇文章;
今天被丢了一个需求 😀 😀 😀,里面就需要实现轮播图,以前在学校时候实现过,但没做记录(博客),基本就模模糊糊的感觉,所以这次就把实现过程跟原理记录下来;
专栏地址:【JavaScript随手笔记】 , 此专栏是我是夜阑的狗对JS轮播图实现的总结,希望能够加深自己的印象,以及帮助到其他的小伙伴😉😉。
如果文章有什么需要改进的地方还请大佬不吝赐教👏👏。
一、方法一:点击切换 1.实现原理 基本上摸透了实现原理,实现起来难度就不会很大啦;
Step 1、创建一个对象来保存图片资源的路径和数量,如下: var albumImageList = { length: 3, //图片数量 1: {id: 1, uri: "images/BO_09.png"}, 2: {id: 2, uri: "images/HRbackground.png"}, 3: {id: 3, uri: "images/local_MUSIC_00010.png"} }; var albumImageCurrent = 1; // 当前图片选择序列号 其中length表示图片数量,{id: 1, uri: "images/BO_09.png"}表示当前图片位置和路径,其实不用id也可以的,读者可以进行优化。albumImageCurrent 变量后面切换图片的会用上。
Step 2、(📢 📢 📢 最重要的一步!!!)通过点击产生回调事件,这时候判断当前显示图片位置是否超过length,没有则会对象下标加1显示下一张图片,反之显示第一张图片。从而实现图片显示循环。Step 3、注册按钮事件,在回调函数中加入图片切换函数(可自己封装); 2.
Java中数字的应用 在java中经常会遇到比较大的数,甚至超过了long型,那么该如何处理这些“大数据”呢?在java中有两个类BigInteger和BigDecimal分别表示大整数类和大浮点数类,从原则上是可以表示“天文单位”一样大的数字咯,但有一个缺点就是比较费内存!
1、BigInteger 常用的方法有:
例:int a=1000
String A =“10000”
BigInteger b=BigInteger.valueOf(s);
BigInteger.valueOf(A) 将括号内的参数转换成指定的数据类型b.add(BigInteger b) 是将b大整数加起来b.subtract© 将c大整数相减,运用时前者减后者b.multiply(d) 将大整数相乘b.divide(d) 将大整数做除法,前者除后者b.remainder() 这个函数的作用是将大整数取余b.pow(exponent) 这个书次exponent 次方b.abs() 这个函数的作用是取绝对值b.mod() 这个函数的作用是对数进行取余b.compareTo() 用来比较两个大整数大小的 2、BigDecimal Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算。双精度浮点型变量double可以处理16位有效数,但在实际应用中,可能需要对更大或者更小的数进行运算和处理。一般情况下,对于那些不需要准确计算精度的数字,我们可以直接使用Float和Double处理,但是Double.valueOf(String) 和Float.valueOf(String)会丢失精度。所以开发中,如果我们需要精确计算的结果,则必须使用BigDecimal类来操作。
常用的方法有:
add(BigDecimal) BigDecimal对象中的值相加,返回BigDecimal对象subtract(BigDecimal) BigDecimal对象中的值相减,返回BigDecimal对象multiply(BigDecimal) BigDecimal对象中的值相乘,返回BigDecimal对象divide(BigDecimal) BigDecimal对象中的值相除,返回BigDecimal对象toString() 将BigDecimal对象中的值转换成字符串doubleValue() 将BigDecimal对象中的值转换成双精度数floatValue() 将BigDecimal对象中的值转换成单精度数longValue() 将BigDecimal对象中的值转换成长整数intValue() 将BigDecimal对象中的值转换成整数 3、Math 常用的方法有:
Math.sqrt() :计算平方根Math.cbrt() : 计算立方根Math.pow(a, b) : 计算a的b次方Math.max( , ) : 计算最大值Math.min( , ) : 计算最小值Math.abs( ) : 取绝对值Math.ceil(): 向上取整Math.floor() :向下取整Math.rint():四舍五入,返回double值。注意.5的时候会取偶数Math.round():四舍五入,float时返回int值,double时返回long值Math.random(): 取得一个[0, 1)范围内的随机数
背景 事情起因于一次生产的错误日志,日志的主要内容是sql执行超时,update product set num = num -1 where id=xx 这是一条根据索引更新商品表数据的sql语句,商品表product有1千多万数据,设置的数据库连接的读取超时时间是3秒,一般情况下,按照主键更新记录只需要10ms,那为什么会导致update超时呢?
查找真相 首先排除了偶尔的网络问题,因为我们发现这个根据主键更新记录超时的日志经常出现凌晨2点左右,而且经过最近5天的观察,其他时间段并没有这个超时错误日志,而且运维反馈这段时间内并没有网络的问题。
在排除了网络问题后,想到了是否是Mysql数据库负载的问题,查看数据库cpu使用率才10%,再次排除是数据库负载高的问题,答案开始变得迷茫起来
再经过前面几步的排除后,我们又重新回到了update product set num = num -1 where id=xx 这个sql本身的问题,如果数据库当时没有压力,但是执行时间又很久,那么数据库在执行这个sql时肯定在等待什么资源,一说到等待什么资源,我们立马想到了,这个根据主键更新记录需要获取到id=xx的主键索引的锁,会不会这个id=xx的锁被某个其他的长时间运行的事务持有而导致等待锁资源呢?
想到这一点之后,我们才想到查看一下数据库这个时间点的慢查询日志,突然一条根据时间字段更新记录的sql映入眼帘,
update product set buynum = 100 where update_time > xx 这条导致问题的update语句没有走索引的操作,会锁全表(也就是说会锁定所有的主键索引),而且耗时很长,所以真相也随之浮出水面,是因为有一条update的语句锁全表导致的另一条根据主键id来更新记录的update语句执行超时
总结 那我们知道事情的真相,也就是update语句不通过索引更新记录时会长时间的锁定全表,那么如何解决这个问题呢?
方法1: 尽量的减少update全表记录时锁全表的时长,比如分批执行,虽然还是会锁全表,但是因为锁全表的时间短,可以很快释放
方法2:使用mysql安全模式set sql_safe_updates = 1;
在这种模式下,update或者delete数据要么带上索引字段(目的是为了不锁全表,而只需要锁定特定的记录)要么加上limit限制更新记录的数量(目的是为了减少锁全表的时间)
其实最重要就是要意识到update操作可能会锁表,导致其他的update语句等待,进而级联引起雪崩效应
String 字符串的应用 1、String 字符串 , 引用类型。(基本类型的变量存储的是数据,引用类型的变量存储的是数据的地址)字符串对象。
字符常用的方法:
例如:String str = “string”;
str.length() 它返回字符串对象包含的字符数。str.cancat(string2) 连接两个字符串的方法:str.charAt(int index) 返回指定索引处的值。str.indexOf(int ch) 从前向后查找,第一次出现的字符串中的索引str.lastIndexOf(int ch) 从前向后查找,最后一次出现的字符串中的索引。str.substring(int beginIndex,int endIndex) 返回从起始位置(beginIndex)到目标位置(endIndex)之间的字符串,但不包含目标位置(endIndex)的字符str.startsWith(“string2”) 用于检测字符串是否以指定的前缀开始。str. endsWith(“string2”) 测试此字符串是否以指定的后缀结尾。str.trim() 用于删除字符串的头尾空白符。str.replace(" “,” ") 通过用 newChar 字符替换字符串中出现的所有 searchChar 字符,并返回替换后的新字符串。str. toCharArray() 将字符串转换为字符数组。str.split() 根据匹配给定的正则表达式来拆分字符串 2、StringBuffer String类是字符串常量,是不可更改的常量。而StringBuffer是字符串变量,它的对象是可以扩充和修改的。
例:
StringBuffer sb = new StringBuffer(“abc”);
常用的方法有:
sb.append(boolean b) 追加内容到当前StringBuffer对象的末尾sb.deleteCharAt(int index) 删除指定位置的字符,然后将剩余的内容形成新的字符串sb.delete(int start,int end) 删除指定区间以内的所有字符,包含start,不包含end索引值的区间。sb.insert(int offset, boolean b) StringBuffer对象中插入内容,然后形成新的字符串sb. reverse() 将StringBuffer对象中的内容反转,然后形成新的字符串setCharAt(int index, char ch) 修改对象中索引值为index位置的字符为新的字符sb.length 获取字符串长度substring(int start,int end ) 从start开始截取到end结束 3、StringBuilder sb.
罗技驱动Logitech G HUB一直卡在初始加载界面无法进入的问题 taskkill /im lghub.exe /f taskkill /im lghub_agent.exe /f taskkill /im lghub_updater.exe /f start "" "C:\Program Files\LGHUB\lghub_agent.exe" start "" "C:\Program Files\LGHUB\lghub_updater.exe" start "" "C:\Program Files\LGHUB\lghub.exe" 保存(ctrl+s)后,将文件后缀改为cmd。
1.Vue单文件组件 node_modules:依赖的node工具包目录 public: 一般用于存放一些静态资源文件,例如图片,视频,音频等资源文件。需要特别注意的是webpack在进行打包的时候,会将public中的所有静态资源原封不动的进行打包。 src 文件夹,就是指我们存放项目源代码的文件夹,程序员的工作主要在本文件夹内。 src下面的目录结构: assets:也是用于存放一些静态资源文件,与public中所不同的是,webpack在进行打包的时候,会将其认作为一个模块进行打包到js文件里面。 components: 一般用于存放非路由组件(还有全局组件)。 router:路由,此处配置项目路由。 store:状态管理。 views:路由页面组件 App.vue:是项目的主组件,页面的入口文件是整个项目的根组件,所有组件的后缀名均为·vue。 main.js是整个项目的入口文件。也是整个程序最开始执行的文件。 .browserslistrc:可以通过npx browserslist 命令来查询浏览器版本,在查询时会根据.browserslistrc描述的版本进行查询,并在控制台打印出浏览器版本 .gitignore:文件负责标记哪些目录或文件不需要上传到git babel.config.js:配置文件,用于兼容更多浏览器。 jsconfig.json:JavaScript 项目可以使用jsconfig.json文件来代替,它的作用几乎相同,但默认启用了一些与 JavaScript 相关的编译器标志。 package.json:项目的说明性文件,用于说明项目的名字,版本,所配置的依赖; README.MD:说明性的一个文件。 vue.config.js:是以一个可选的配置文件,如果项目中的根目录 (和 package.json 同级的) 中存在这个文件,那么它会被 @vue/cli-service 自动加载。也可以使用 package.json 中的 vue 字段,但是注意这种写法需要你严格遵照 JSON 的格式来写。 yarn.lock:为了跨机器安装得到一致的结果, Yarn 需要比你配置在 package.json 中的依赖列表更多的信息。 Yarn 需要准确存储每个安装的依赖是哪个版本。
为了做到这样, Yarn 使用一个你项目根目录里的 yarn.lock 文件。这可以媲美其他像 Bundler 或 Cargo 这样的包管理器的 lockfiles。它类似于 npm 的 npm-shrinkwrap.json, 然而他并不是有损的并且它能创建可重现的结果。
本文目录 一、Python的下载二、拓展库安装三、编写案例运行调试四、部分使用优化五、配置 Flask 环境总结:一些小技巧1、找到原来安装过的python路径位置 一、Python的下载 这里推荐使用国内源进行下载,国外源一般都比较慢。
跳转链接:https://registry.npmmirror.com/binary.html?path=python/
同时建议不要直接安装最新版本,因为最新版本容易出现一些插件的不支持等等情况。
在这里我选择的是3.11.1的版本。
选择下面的自定义安装,并且将 Add python to PATH 点击上,自动加入到环境变量中去,不需要我们再进行相关的配置。
同时建议安装在D盘,自建一个新的文件夹,不推荐安装在C盘的原因是,后期安装拓展的时候需要管理员权限才能写入,会比较麻烦。
安装好之后,通过cmd可以查到python的版本。这样就算安装好了。
二、拓展库安装 在安装Python的路径下,打开cmd。输入pip list即可查看有哪些拓展库。
然后根据自己想要的拓展库进行安装即可。
然后在Vscode中安装Python即可。
三、编写案例运行调试 我们新建一个文件,然后输入print(“hello”)进行相关测试。
会发现按照惯例输出了。
然后我们继续进行外部终端方式进行修改。如下图所示。
更改为外部终端显示之后,我们就可以进行外部终端的显示代码了。
四、部分使用优化 安装JetBrains插件,就可以象Idea背景那样了。
五、配置 Flask 环境 特别注意:不要安在C盘中,因为容易因为权限打不开Vscode。。。楼主已经踩坑了。
1.首先搭建虚拟环境,在windows命令行输入pip install virtualenv,安装虚拟环境,安装完以后可以使用virtualenv --version来查看虚拟环境是否搭建成功。
2.然后输入mkdir myproject创建你自己的文件夹。
3.输入cd myproject进入你的文件夹。
4.然后输入virtualenv venv,这时候myproject下会创建一个venv文件夹。
5.接着输入venv\scripts\activate来激活虚拟环境(要退出虚拟环境使用deactivate)
6.然后使用pip install Flask来安装Flask。
7.在虚拟环境下输入python以启动python解释器,输入import flask,若没有报错,则说明flask安装成功,之后就是编辑器环境的配置了。
8.用VScode打开刚刚创建的文件夹。
9.创建test.py文件,并点运行,添加配置,然后选择flask即可,把app.py改成test.py即可。
总结:一些小技巧 1、找到原来安装过的python路径位置 很多同学安装过python,但是忘记路径位置了。可以进行如下操作:
C语言中的static的作用有:1.修饰局部变量。2.修饰全局变量。3.修饰函数。
1.修饰局部变量。
如图:
当只用int 定义变量a时,此时程序运行结果为:
程序运行结果为10个2,这是为什么呢??
原因是此时的变量a为局部变量,当主函数中的while循环每调用一次test()的时候,变量a就会被创建,而调用结束时,此时a就会被销毁,当再一次循环调用test()的时候,a又会被创建并赋值为1,所以每次循环,a都会被重新创建一次,每次test()打印的结果都是2;
而利用static对局部变量修饰后:
再次运行程序:
此时运行的结果就是2~11;原因是static对变量a进行了修饰,将变量a的生命周期进行了延长,使a出了它的作用范围后并没有被销毁,如果没有static,每次调用test结束时a都会被销毁。
所以利用static修饰局部变量,可以延长其生命周期。
2.static修饰全局变量。
这是一般使用全局变量的方法,程序可以正常运行,运行结果为:2023
同一个工程下的另一个文件里用全局变量定义g_val,但此时程序会报错
这就需要我们在主函数所在的文件里用extern声明外部符号g_val;
此时程序就能正常运行;而当我们用static在add.c文件中修饰全局变量g_val时:
此时程序就会报错。那这是为什么呢??
首先我们讨论全局变量的特性。全局变量是可以在整个工程中使用的;全局变量是具有外部链接属性的,在其他源文件内部,只要适当的声明就可以使用;
而当static修饰全局变量时,全局变量的外部链接属性就变成了内部链接属性,就只能在自己所在的内部.c文件中使用了,其他.c内部文件内就不能使用了。
所以static修饰全局变量,是会将全局变量的外部链接属性变成内部链接属性的,影响了全局变量的作用域。
3.static修饰函数。
与修饰全局变量类似,当没用static修饰的时候
程序能够正常运行并打印;当static修饰Add函数时
此时程序报错;
原因和static修饰全局变量相同:
函数是具有外部链接属性的,当static修饰函数后,函数的外部链接属性就变成了内部链接属性;
被static修饰的函数只能在自己所在的.c文件中使用。最终相当于影响了作用域。
kubeadm 部署 Kubernetes 集群最关键的两个步骤,kubeadm init 和
kubeadm join。相信你一定会有这样的疑问:kubeadm 确实简单易用,可是我又该如何
定制我的集群组件参数呢?
比如,我要指定 kube-apiserver 的启动参数,该怎么办?
在这里,我强烈推荐你在使用 kubeadm init 部署 Master 节点时,使用下面这条指令:
1 $ kubeadm init --config kubeadm.yaml 这时,你就可以给 kubeadm 提供一个 YAML 文件(比如,kubeadm.yaml),它的内容
如下所示(我仅列举了主要部分):
1 apiVersion: kubeadm.k8s.io/v1alpha2 2 kind: MasterConfiguration 3 kubernetesVersion: v1.11.0 4 api: 5 advertiseAddress: 192.168.0.102 6 bindPort: 6443 7 ... 8 etcd: 9 local: 10 dataDir: /var/lib/etcd 11 image: "" 12 imageRepository: k8s.gcr.io 13 kubeProxy: 14 config: 15 bindAddress: 0.
清理C盘空间是电脑维护的重要步骤之一,C盘是Windows操作系统的核心部分,保存了许多重要的系统文件,因此空间不足会影响计算机的性能和稳定性。下面是一些清理C盘空间的方法分享。
一.清理c盘空间的方法 1、清理临时文件
在使用Windows系统时,会在计算机上生成许多临时文件,包括系统缓存、浏览器缓存、垃圾文件等。这些文件会占用大量的磁盘空间,所以定期清理这些临时文件是非常必要的。
2、删除不需要的程序
我们在使用计算机的过程中,安装了许多应用程序,但有些应用程序我们很少使用或者已经不需要了,却依然占据着硬盘空间。因此,删除不需要的程序可以腾出大量的空间。
3、清理回收站
在Windows系统中,删除文件时,文件并没有真正的被删除,而是被移到了回收站中。回收站中的文件也会占用硬盘空间,所以定期清空回收站也是释放C盘空间的有效方法。
4、使用磁盘清理工具
Windows系统自带了一个磁盘清理工具,可以帮助用户清理C盘上不需要的文件和文件夹。打开磁盘清理工具后,会提示你需要清理哪些文件和文件夹,例如下载文件、浏览器缓存等,根据提示进行操作即可。
5、使用c盘清理工具
使用第三方的c盘清理工具,如电脑修复精灵的c盘清理工具,它可以帮助用户快速识别和删除这些无用文件和垃圾文件,同时也可以卸载不需要的程序和组件,以释放更多的硬盘空间,也有一键搬家功能,能详细的看到你c盘当中有哪些文件和软件,方便你快速搬运c盘里的文件到别的地方去。
c盘清理软件_win7c盘满了变红怎么清理–电脑修复精灵
6、压缩文件
在电脑中存储大量的文件时,文件可能会占据大量的空间。将文件压缩成压缩包格式,可以减少文件占用的空间,并且方便传输和存储。
清理C盘空间是电脑维护中必不可少的一步。通过清理临时文件、删除不需要的程序、清理回收站、使用磁盘清理工具、压缩文件等方法,可以有效地释放硬盘空间,提高电脑性能和稳定性。因此,建议用户定期进行C盘清理,以保持电脑的良好运行状态。
二.预防电脑变卡 另外,以下几点也值得注意:
1、备份重要文件
在进行C盘清理之前,建议先备份重要的文件和数据,以免误删重要数据或文件,造成不必要的损失。
2、定期进行C盘清理
定期进行C盘清理可以避免C盘空间不足的问题,建议至少每个月进行一次清理。
3、使用外部存储设备
如果C盘空间不足,还可以使用外部存储设备,如USB闪存盘、移动硬盘等来存储文件,以减轻C盘的负担。
以上就是关于清理c盘空间的一些方法,希望本文能版关注到大家,如果想了解更多,欢迎继续关注小编哦。
1、什么是Airflow
Airflow 是一个 Airbnb 的 Workflow 开源项目,使用Python编写实现的任务管理、调度、监控工作流平台。Airflow 是基于DAG(有向无环图)的任务管理系统,可以简单理解为是高级版的crontab,但是它解决了crontab无法解决的任务依赖问题。与crontab相比Airflow可以方便查看任务的执行状况(执行是否成功、执行时间、执行依 赖等),可追踪任务历史执行情况,任务执行失败时可以收到邮件通知,查看错误日志。
2、Airflow与同类产品的对比 系统名称介绍 Apache Oozie
使用XML配置, Oozie任务的资源文件都必须存放在HDFS上. 配置不方便同时也只能用于Hadoop.
Linkedin Azkaban
web界面尤其很赞, 使用java properties文件维护任务依赖关系, 任务资源文件需要打包成zip, 部署不是很方便.
Airflow
具有自己的web任务管理界面,dag任务创建通过python代码,可以保证其灵活性和适应性
3、Airflow基础概念 (1)DAG:有向无环图(Directed Acyclic Graph),描述数据流的计算过程。
(2)Operators:DAG中一个Task要执行的任务,如:①BashOperator为执行一条bash命令;②EmailOperator用于发送邮件;③HTTPOperator用于发送HTTP请求;④PythonOperator用于调用任意的Python函数。
(3)Task:是DAG中的一个节点,是Operator的一个实例。
(4)Task Instance:记录Task的一次运行,Task Instance有自己的状态,包括:running、success、failed、 skipped、up for retry等。
(5)Trigger Rules:task的触发条件。
4 、Airflow安装 依赖:yum -y install python-devel libevent-devel mysql-devel mysqlclient
(1)安装airflow:pip install apache-airflow
(2)修改airflow对应的环境变量:export AIRFLOW_HOME=/usr/local/airflow
(3)执行airflow version,在/usr/local/airflow目录下生成配置文件
(4)修改默认数据库:修改/usr/local/airflow/airflow.cfg
[core]
executor = LocalExecutor
sql_alchemy_conn = mysql://airflow:123456@192.168.48.102:3306/airflow
(5)创建airflow用户,创建airflow数据库并给出所有权限给次用户:
create database airflow;
create user 'tairflow'@'%' identified by '123123';
1.src:
#编译安装 #编译安装 配置文件:Makefile 编译,安装命令:make #例:编译安装nginx。 下载源码 tar xf 解压 (撕,定位文件,用这两个就行了) tar -zxvf japan.tar.gz -C /tmp/ README ./configure --prefix=/path :有错就按照要求改 创建Makefile vi Makefile make:(实际上读Makefile) 编译 make install (make 打开makefile 找install ) #注意:编译环境、软件依赖、配置项 2.rpm:
#包(要自己管理) redhat packet manage #安装 rpm安装:一般i -i filename --prefix rpm升级: -Uvh (v 打印) -Fvh rpm卸载: (包名 qa出来的) -e PACKAGE_NAME #查询 rpm -qa : 查询已经安装的所有包 rpm -ql PACKAGE_NAME: 查询指定包安装后生成的文件列表 pm -qf /path/to/somefile: 查询文件是由哪个rpm包安装生成的 (逆向) #例子 (JAVA 安装后有些环境变量 -qa包(配合管道) , -ql(有啥文件) 有的释放有软连接,但是有的没有,要在 /etc/profile配置 (PATH) #((末行模式:!
我在上一家公司工作时用的东西比较老,编辑器用的是HBuilder X以及svn来进行版本管理,最近刚换的这家用的是webStorn和git工具需要去熟悉和磨合,下面我们学习一下开始正文吧!!
对于刚入职场的小白来说使用git这个版本管理工具无非就是:
拉取代码 => 更换分支(看公司情况) => 更新代码 => 二次开发 => Git上传 1.安装Git 这里是Git官网大家都认识英文就不多介绍,我们进到官网首页就点DownLoads然后就选择自己电脑对应的系统和位数进行下载即可,比如我的电脑是windows 64位我就下载红线标注的就好了。
安装就更加简单了,自己只需要配置安装的地址就一直next!
2.克隆版本库代码(拉取代码) 首先我们可以在自己电脑上新建一个空白文件夹存放代码并在cmd窗口选择自己新建的文件夹在执行一下命令就可拉取下来了
git clone + 仓库位置 拉取的代码就可以进行二次开发了很简单................
3.切换分支(看公司远程仓库情况来决定) 这里公司有要求分支的话需要切换一下对应的分支防止上传错远程仓库,切换分支在webStorm编辑器的右下角方向然后选择对应的分支即可.........
4.更新代码和上传代码至远程仓库 使用过webStorm编辑器的人都知道这个编辑器的右上角有三个这样子的图标,对应的用法如下:
第一个向下的蓝色箭头 等同于 Git => Update Project,第二个绿色打钩图标 等同于 Git => Commit,第三个向上的绿色箭头 等同于 Git => push, 如下图:
公司里面是多人进行项目开发,所以就需要我们及时Update Project代码,我们只要点击蓝色向下箭头或者是 Git => Update Project进行更新,更新好右下角会有提示弹窗
上传就是中间的绿色打钩图标或者是Git => Commit,点击以后就会出现这一样式的弹框我们需要注意的是有红色标记的地方!
标记1中有打红色√的是我们选中上传的代码,不需要上传的代码就不需要√选中标记2中写着 3 added 1 moditied就是三个新增文件一个更改文件所以提交前需要确认标记3是我们改进代码或者是更新代码的描述标记4中就是选中上传的代码新增或者是更改的地方 我们这四步都确认好了就可以点Commit了,它会提示我们一些警告和错误我们可以不管再点一次commit就好了,如下图:
这步完成后我们的代码并没有上传到远程仓库我们还需要最后一步就是点击最后的一个绿色的向上箭头图标或者是Git => push这才真正意义上完成Git上传!!!!
后续还会更新技术问题感兴趣的小伙伴可以关注或者私信交流交流!
目录: 1,猜拳游戏
2,俄罗斯方块
1,"猜拳游戏"
先用最基础的也是比较经典,猜拳游戏,源码如下:
import random b = random.randint(0,2) print(b) #b = int(b) a = input("输入你的数字:") a = int(a) if a > 3: print("数字错误") elif a == b : print("平手了") elif a > b : print("你输了") else: print("你赢了") pass 这个只要有一点Python基础的人,都看得懂。
2,"俄罗斯方块"
这个需要用到“pygame”模块,需要下载,这个安装并添加模块,pip就行了。
源码如下:
import sys import time import pygame from pygame.localsimport * import blocks SIZE =30 # 每个小方格大小 BLOCK_HEIGHT =25 # 游戏区高度 BLOCK_WIDTH =10 # 游戏区宽度 BORDER_WIDTH =4 # 游戏区边框宽度 BORDER_COLOR = (40, 40, 200)# 游戏区边框颜色 SCREEN_WIDTH = SIZE * (BLOCK_WIDTH +5)# 游戏屏幕的宽 SCREEN_HEIGHT = SIZE * BLOCK_HEIGHT# 游戏屏幕的高 BG_COLOR = (40, 40, 60)# 背景色 BLOCK_COLOR = (20, 128, 200) BLACK = (0, 0, 0) RED = (200, 30, 30)# GAME OVER 的字体颜色 # 画背景 def _draw_background(screen): # 填充背景色 screen.
一、校验数字的表达式 数字:^[0-9]*$
n位的数字:^\d{n}$
至少n位的数字:^\d{n,}$
m-n位的数字:^\d{m,n}$
零和非零开头的数字:^(0|1-9*)$
非零开头的最多带两位小数的数字:^(1-9*)+(.[0-9]{1,2})?$
带1-2位小数的正数或负数:^(-)?\d+(.\d{1,2})$
正数、负数、和小数:^(-|+)?\d+(.\d+)?$
有两位小数的正实数:^[0-9]+(.[0-9]{2})?$
有1~3位小数的正实数:^[0-9]+(.[0-9]{1,3})?$
非零的正整数:^[1-9]\d*$ 或 ^(1-9*){1,3}$ 或 ^+?1-9*$
非零的负整数:^-1-90-9"*$ 或 ^-[1-9]\d*$
非负整数:^\d+$ 或 ^[1-9]\d*|0$
非正整数:^-[1-9]\d*|0$ 或 ^((-\d+)|(0+))$
非负浮点数:^\d+(.\d+)?$ 或 ^[1-9]\d*.\d*|0.\d*[1-9]\d*|0?.0+|0$
非正浮点数:^((-\d+(.\d+)?)|(0+(.0+)?))$ 或 ^(-([1-9]\d*.\d*|0.\d*[1-9]\d*))|0?.0+|0$
正浮点数:^[1-9]\d*.\d*|0.\d*[1-9]\d*$ 或 ^(([0-9]+.[0-9]*1-9*)|([0-9]*1-9*.[0-9]+)|([0-9]*1-9*))$
负浮点数:^-([1-9]\d*.\d*|0.\d*[1-9]\d*)$ 或 ^(-(([0-9]+.[0-9]*1-9*)|([0-9]*1-9*.[0-9]+)|([0-9]*1-9*)))$
浮点数:^(-?\d+)(.\d+)?$ 或 ^-?([1-9]\d*.\d*|0.\d*[1-9]\d*|0?.0+|0)$
二、校验字符的表达式 汉字:^[\u4e00-\u9fa5]{0,}$
英文和数字:^[A-Za-z0-9]+$ 或 ^[A-Za-z0-9]{4,40}$
长度为3-20的所有字符:^.{3,20}$
由26个英文字母组成的字符串:^[A-Za-z]+$
由26个大写英文字母组成的字符串:^[A-Z]+$
由26个小写英文字母组成的字符串:^[a-z]+$
由数字和26个英文字母组成的字符串:^[A-Za-z0-9]+$
由数字、26个英文字母或者下划线组成的字符串:^\w+$ 或 ^\w{3,20}$
中文、英文、数字包括下划线:^[\u4E00-\u9FA5A-Za-z0-9_]+$
中文、英文、数字但不包括下划线等符号:^[\u4E00-\u9FA5A-Za-z0-9]+$ 或 ^[\u4E00-\u9FA5A-Za-z0-9]{2,20}$
可以输入含有^%&',;=?$"等字符:[^%&',;=?$\x22]+
禁止输入含有~的字符:[^~]+
三、特殊需求表达式 Email地址:^\w+([-+.]\w+)*@\w+([-.]\w+)*.\w+([-.]\w+)*$
域名:a-zA-Z0-9{0,62}(.a-zA-Z0-9{0,62})+.?
InternetURL:[a-zA-z]+://\s* 或 ^http://([\w-]+.)+[\w-]+(/[\w-./?%&=]*)?$
手机号码:^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\d{8}$
电话号码("XXX-XXXXXXX"、"XXXX-XXXXXXXX"、"XXX-XXXXXXX"、"XXX-XXXXXXXX"、"XXXXXXX"和"XXXXXXXX):^((\d{3,4}-)|\d{3.4}-)?\d{7,8}$
国内电话号码(0511-4405222、021-87888822):\d{3}-\d{8}|\d{4}-\d{7}
电话号码正则表达式(支持手机号码,3-4位区号,7-8位直播号码,1-4位分机号): ((\d{11})|^((\d{7,8})|(\d{4}|\d{3})-(\d{7,8})|(\d{4}|\d{3})-(\d{7,8})-(\d{4}|\d{3}|\d{2}|\d{1})|(\d{7,8})-(\d{4}|\d{3}|\d{2}|\d{1}))$)
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
使用Kalibr标定相机和IMU(ZED+px4)外参 前言一、Kalibr介绍二、CAM-IMU外参标定1.相机内参2.IMU噪声参数3.target(标定板参数)4.bag文件录制5.kalibr: cam-imu联合标定 三、运行单目+imu的VINS-Fusion 前言 本文仅使用kalibr中cam-imu的联合标定,关于camera内参默认已经知道了。主要会总结一些标定上的小经验,有不对的地方,希望网友可以指出。文章最后将使用标定的cam-imu外参在VINS-Fusion中进行验证
一、Kalibr介绍 Kalibr是ZTH大佬们开源的一个标定工具箱,可以进行相机内参标定,cam-imu外参标定、多imu、多相机标定等。在很多数据集中,都使用Kalibr来标定cam-imu的外参矩阵,具有很高的可信度,写论文,做实验,都用得上。
本文不涉及Kalibr的安装,各位可以根据官网自己安装,下面开始介绍cam-imu的标定细节和经验。
本文使用的设备是ZED相机和px4里内置的imu,进行左目相机和imu的外参标定。
二、CAM-IMU外参标定 标定一共需要3个yaml文件,分别是:
相机内参的zed_left_raw.yaml,imu噪声参数的px4_imu.yaml,标定板对应的april_7x5.yaml文件
下面会在相机内参、imu噪声、target部分分别介绍yaml文件中的内容。
注意这里的文件名可以根据自己习惯命名,不是固定的。
1.相机内参 关于相机内参的标定,用的比较多的有matlab的标定工具箱,Kalibr本身也支持多相机的内参标定,有需要可以看看Multiple camera calibration 部分。
关于ZED相机的内参,使用出厂标定的数据就好了,如果安装ZED的SDK时使用的是默认的安装路径,可以在/usr/local/zed/settings下面找到一个SN****.conf文件,根据你设置的相机分辨率去找对应的相机内参和畸变参数,我这里使用的是VGA模式,conf文件中
对应的内参和畸变参数如下:
根据我们获得的相机内参和畸变参数,创建一个zed_left_raw.yaml文件(文件名自己定),内容如下:
cam0: cam_overlaps: [] camera_model: pinhole #相机模型,kalibr也支持鱼眼模型 distortion_coeffs: [-0.173778, 0.0266126, 0.0010566, -0.000836547] #相机畸参数 distortion_model: radtan #畸变模型 intrinsics: [349.46, 349.46, 346.59, 181.41225] resolution: [672, 376] rostopic: /zed/zed_node/left_raw/image_raw_gray 注意一下,distortion_model和camera_model根据自己需要进行选择,Kalibr中Supported models中有介绍。
ZED相机是针孔模型,畸变参数是k1,k2,p1,p2,对应的distortion model是radial-tangential。
2.IMU噪声参数 注意:
我自己之前写过一篇关于IMU内参标定的文章,需要的小伙伴可以参看一下。
但是!!!!!我们其实用不上imu内参标定的数据,理由也在《IMU内参标定》这篇文章中介绍过了,想了解的同学,自己看看,欢迎评论区发表意见,如果想深入了解关于IMU噪声模型的同学,也可以看看我之前的文章。
虽然说imu内参标定的结果不重要,但是imu内参确实对cam-imu外参标定是有影响的,如何取值呢?是一个问题。
有多种选择的方法:
一种是参考公开数据集的做法,比如:EuRoC数据集(毕竟是他们自己家采的数据集),Kalibr在download中给了Euroc数据集在使用kalibr标定时用到的imu_adis16448.yaml文件,里面有标定时用的imu的噪声参数(连续噪声模型)。他们用的IMU型号是adls16448,在很多imu内参标定的工具里一般会用这款imu作为示例,比如mintar版本的imu_util中,下面可以对比一下Kalibr中用的imu噪声参数和imu内参标定得到的噪声参数的差别:
可以看到,Kalibr中用的imu噪声参数比imu内参标定得到的噪声参数要大10-15倍左右,理由看我之前的文章。所以我们的一种做法是使用静置imu标定的内参,然后放大10-15倍(倍数看效果,效果不行可以再放大一些)。第二种做法,使用VINS种imu噪声的默认参数,他们给的这个默认参数还是蛮好用的,或者在他们默认参数的基础上做一个微调。本文用的就是在VINS给的默认参数基础上做了点微调,具体的px4_imu.yaml文件的内容如下: rostopic: /mavros/imu/data update_rate: 195 #Hz accelerometer_noise_density: 0.1 #VINS默认 0.
HTML -------- -------- 超文本标记语言(英语:HyperText Markup Language,简称:HTML)是一种用于创建网页的标准标记语言。
您可以使用 HTML 来建立自己的 WEB 站点,HTML 运行在浏览器上,由浏览器来解析。
对于中文网页需要使用 <meta charset="utf-8"> 声明编码,否则会出现乱码。
<!DOCTYPE html> 声明为 HTML5 文档<html> 元素是 HTML 页面的根元素<head> 元素包含了文档的元(meta)数据,如 <meta charset="utf-8"> 定义网页编码格式为 utf-8。<title> 元素描述了文档的标题<body> 元素包含了可见的页面内容<h1> 元素定义一个大标题<p> 元素定义一个段落 HTML简介 HTML 是用来描述网页的一种语言。
HTML 指的是超文本标记语言: HyperText Markup LanguageHTML 不是一种编程语言,而是一种标记语言标记语言是一套标记标签 (markup tag)HTML 使用标记标签来描述网页HTML 文档包含了HTML 标签及文本内容HTML文档也叫做 web 页面 HTML标签 HTML 标记标签通常被称为 HTML 标签 (HTML tag)。
HTML 标签是由尖括号包围的关键词,比如 <html>HTML 标签通常是成对出现的,比如 <b> 和 </b>标签对中的第一个标签是开始标签,第二个标签是结束标签开始和结束标签也被称为开放标签和闭合标签 <标签>内容</标签>
<!DOCTYPE html> <html> <head> <meta charset="