最近在学习ROS系统,但在配置过程中遇到了种种问题,苦于找不到合适的教程,费了好大的力气才勉强配好了ROS。因此想着写一篇博客,来记录一下配置和学习ROS的过程,也希望方便他人,能够少走些弯路。
1、安装准备 Ubuntu的配置就不用多说了,本篇是在Ubuntu18.04上安装ROS Melodic版本。对于不同版本的ROS对应适用的Ubuntu版本也不尽相同,因此一定要先确定自己下载的是哪个版本的ROS。
1.1、配置Ubantu软件库 首先先打开Ubuntu中的软件和更新选项。先按图勾选选项,下载服务器建议选择清华或者中科大的。
1.2、设置软件源 (ps:由于大部分的人都是在虚拟机上安装的Ubantu,接下来的步骤所用的指令又都较长,为了方便复制粘贴和在输入指令时的准确性,可以先配置共享文件夹。这里推荐几个具体操作的链接,如果嫌配置太麻烦,也可以直接在ubuntu中打开本篇博客,进行指令的粘贴。)
共享文夹设置链接: https://www.shangyouw.cn/shezhi/arc20572.html
官方提供的软件源:
sudo sh -c ‘echo “deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main” > /etc/apt/sources.list.d/ros-latest.list’
此软件源据说下载的太慢了,容易出问题。因此推荐使用国内的。
国内镜像软件源
sudo sh -c ‘. /etc/lsb-release && echo “deb http://mirrors.ustc.edu.cn/ros/ubuntu/ $DISTRIB_CODENAME main” > /etc/apt/sources.list.d/ros-latest.list’
1.3、设置密钥 sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys F42ED6FBAB17C654
这密钥官网上是一直在更新的,但我感觉用着都一样。成功后会有这样的显示。这里的最后一行里的未改变应是其他的内容,我这是设置好了所以才是未改变。
前面这些基本上不会遇到很大的问题,如果没有成功多试几次就好了。最新密钥的获取在官方的网站上有,wiki百科的安装教程可以看看,但没必要全照着上面做。
安装教程网址: http://wiki.ros.org/melodic/Installation/Ubuntu
2、安装并配置ROS 2.1安装ROS sudo apt-get update
这一步一般来说不会有多大的问题,但如果在这个地方实在是出问题了。一定要先仔细先看看之前配的有没有问题,如果没问题,多试几次或者检查检查网络看看,基本就能解决了。
更新完后基本就是这样的情况,不要求一样,如果没有提示错误基本就是正确的。那就可以进行下一步。
依次输入下面的指令,安装ROS。
sudo apt-get install ros-melodic-desktop-full
sudo apt-get install ros-melodic-rqt*
2.2初始化rosdep 这一步的指令很简单,就两个指令。
sudo rosdep init
有时为了方便对比,尤其是多曲线对比,二维图又无法满足要求,那么可以考虑使用下图所示的三维叠加图。今天本文就如何使用Origin 9.1绘制下图进行简要说明。
1、对于上图可采用Origin 9.1中XYY轴3D waterfall图进行绘制。
本例中X轴的两个峰原本属于两个不同的类别,但绘制时我们将其组合在了一起。其中“1#峰”的数据在15-30行,而“2#峰”的数据在33行之后。列B、C、D各为一套含两个峰的数据。
2、选中全部数据,进入Plot下的3D XYY菜单,点击3D waterfall Z : Color Mapping。
3、完成上述操作后,Origin 9.1默认生成的图形如下。
4、双击曲线,弹出Plot Details菜单,进入右侧的Group选项卡。将Border Color和Area Fill Color的Increment设置为By One。点击Details后面的按钮弹出Increment Editor对话框,设置各曲线的颜色和填充色。
5、完成填充色设置后的效果图如下。
6、上图中的视角有些长,现在将其调短点。首先点击3D Rotation中的Tilt Up按钮将视角收短。
7、然后点击3D Rotation中的Decrease perspective工具将视角调正。
8、接下来双击曲线,弹出Plot Details菜单,进入右侧的Planes选项卡。将XY、YZ、ZX三个平面的背景色取消掉。
9、取消三个平面背景颜色后的效果图如下。
由于X轴上的两个峰分属于不同的类别,因此需要调整X轴的刻度线和标签。
10、双击X轴的刻度,弹出Axis Dialog对话框,左侧选择X Axis下的Scale。由于只有两个类别,因此打算用3个主刻度,起点、终点和中间点各一个。因此,将Major Ticks的Type设置为By Count,并将Count设置为3。由于第一个主刻度设置在坐标值的起点,因此将First Tick设置成与From一致。
11、完成后的效果图如下,X轴的刻度线是不是变过来了呢?
12、至于类别名称,可以用自定义标签来做。
也可通过工具栏中的Text Tool直接输入,并拖动到合适的位置即可。原有的坐标刻度值可以直接用鼠标选中,按Delete键删除即可。
更多相关阅读
import requests
from fake_useragent import UserAgent
import base64
from lxml import etree
from requests import RequestException
# fake_useragent使用
ua = UserAgent()
def download_page(url):
headers = {
'User-Agent': ua.random,
'Sec - Fetch - Mode': 'no-cors',
'Referer': 'https://piaofang.maoyan.com/?ver=normal'
}
try:
response = requests.get(url=url, headers=headers)
if response.status_code == 200:
return response.content
else:
print(response.status_code)
return None
except RequestException:
print(RequestException.args)
return None
def get_contents(html):
print(html)
def main():
url = 'https://piaofang.maoyan.com/?ver=normal'
html = download_page(url)
get_contents(html)
当需传统中国社会的“法制”意味着( )
字符字符作为转义字符GPS信号接收机,根据接收卫星的信号频率,可分为
串中地面点的平面位置可用哪些方式表示
使用时使用缓和曲线需要的主点定位中,下列正确的有哪些
特殊测量工作的基本内容是(_)。
当需测量学的分类,大致可分为(_)。
字符字符作为转义字符测量工作的程序是(_)。
串中测量学的任务是(_)。
使用时使用道路工程的定位是依据道路中心线上的桩点来完成的,道路中心线包括(_)。
蛔虫病和绦虫病不属于胃肠道感染疾病。( )
特殊测量控制桩点包括用于控制测量的(_)以及特大型桥隧控制桩等。
与流感病毒吸附有关的成分是( )
当需出血性结肠炎患者可有高热表现。( )
字符字符作为转义字符出血性结肠炎患者病后可获得持久免疫力。( )
串中细菌性痢疾无症状带菌者可以从事饮食业及保育工作。( )
肉毒毒素耐酸,使用时使用胃液中24小时不被破坏。( )
特殊肉毒中毒以胃肠道症状为主。( )
轮状病毒有7个血清组,其中,A组轮状病毒是世界范围内5岁以下儿童重症腹泻的首要病原体。( )
诺如病毒,是世界上引起急性病毒性胃肠炎爆发流行的主要病原体之一,可累及各个年龄组,发病以成人和大龄儿童多见。( )
来源:本文由名华慕课题库 通识课题库网原创撰写,欢迎分享本文,转载请保留出处和链接!
分享:
高德地图妲己语音包是一款王者荣耀中的妲己智能语音导航,使用小妲己语音系统你可以听到妲己声音的导航,就像在玩游戏体验一样,给你别样的感觉体验,喜欢小妲己的不要错过这款语音包,快来下载。
高德地图小妲己语音包部分内容:
主人,要加油哦!
我还需要一个语音来安慰我啊!?
怎么啦?
您的燃油不足
为了您的安全,妲己已帮您自动刹车
为什么你刚刚不说啊
妲己刚刚说过了
你刚刚怎么说的?
我你我问你了吗?
你说了吗?
主人,要加油哦!
主人,您的女友发来短信
高德地图小妲己语音包功能
采集数据及上线道路数据已覆盖全国所有城市,采集里程超过670万公里。
百度地图POI(地图兴趣点)国内数据更新530万个,其中新增380万。
室内图覆盖超过3,000座大型购物中心。智能景区伴游服务,已覆盖全国超过400个热门景区。
高德地图小妲己语音包特色:
1.语音识别ASR
2.利用语音元素的特征值比对,找出可能正确的匹配词汇。是定义内容的对照,而不是翻译。
3.是机率学的应用, 2012 年技术重大突破(DNN 深层神经网络)。每次辨识结果,返回信心度(confidence level)。
4.独创的抗噪声和远场技术独创的抗噪声和远场技术,在语音识别前处理声音信号,有效分离噪音和混响,极大提高在户外、市内、车内等复杂环境下的语音识别率。
5.独创的说话人识别和语音识别同步处理技术独创的说话人识别和语音识别同步处理技术,在语音识别的过程中,实时同步区分说话人,不仅提高系统效率,更能实现实时语音分析、说话人分析等功能。
6.高识别率和识别效率我方基于最先进的深度学习算法模型,可实现在确保高准确率的实时识别情况下,系统保持高识别效率,大大降低系统成本。
为什么需要策略梯度 基于值的强化学习方法一般是确定性的,给定一个状态就能计算出每种可能动作的奖励(确定值),但这种确定性的方法无法处理一些现实的问题,比如玩100把石头剪刀布的游戏,最好的解法是随机的使用石头、剪刀和布并尽量保证这三种手势出现的概率一样,因为任何一种手势的概率高于其他手势都会被对手注意到并使用相应的手势赢得游戏。
再比如,假设我们需要探索上图中的迷宫拿到钱袋。如果采用基于值的方法,在确定的状态下将得到确定的反馈,因此在使用这种方法决定灰色(状态)方格的下一步动作(左或右)是确定的,即总是向左或向右,而这可能会导致落入错误的循环中(左一白格和左二灰格)而无法拿到钱袋。也许有人要质疑这时的状态不应用一个方格,而是迷宫中的所有方格表示。但是考虑如果我们身处一个巨大的迷宫无法获得整个迷宫的布局信息,如果在相同的可感知的状态下总是做出固定的判断的话,仍然会导致在某个局部原地打转。事实上很多实际问题特别是对弈类问题都有类似的特征,即需要在貌似相同的状态下应用不同的动作,如棋类游戏的开局。
策略梯度正是为了解决上面的问题产生的,它的秘密武器就是“随机”。首先随机能提供非确定的结果,这种非确定的结果并不是完全的随意,而是服从某种概率分布的随机。策略梯度不计算奖励(reward),而是输出选择所有动作的概率分布,然后基于概率选择动作。 其训练的基本原理是通过反馈调整策略,具体来说就是在得到正向奖励时,增加相应的动作的概率;得到负向的奖励时,降低相应动作的概率。下面左图中的绿点表示获得正向奖励的动作,右图表示更新后的策略,可以发现产生正向奖励的区域的概率都增加了(离圆心的距离更近)。
下面我们来具体了解策略梯度算法。
基本概念 对象系统:策略梯度的学习对象,这个对象即可以是一个系统,比如汽车或一个游戏,也可以是一个对手,比如势头剪刀布的游戏对手或者一个职业围棋手。
Policy策略:表示在状态和参数条件下发生动作的概率。
Episode轮次:表示从起始状态开始使用某种策略产生动作与对象系统交互,直到某个终结状态结束。比如在围棋游戏中的一个轮次就是从棋盘中的第一个落子开始直到对弈分出胜负,或者自动驾驶的轮次指从汽车启动一直到顺利抵达指定的目的地,当然撞车或者开进水塘也是种不理想的终结状态。
Trajectory轨迹:表示在PG一个轮次的学习中,状态、动作和奖励的顺序排列。举个栗子:。由于策略产生的是非确定的动作,同一个策略在多个轮次可以产生多个不同的轨迹。
轮次奖励:表示在一个轮次中依次动作产生的奖励的总和。在实现中,对每个策略评估奖励期望时,会求多个轮次的平均值。
策略梯度的学习是一个策略的优化过程,最开始随机的生成一个策略,当然这个策略对对象系统一无所知,所以用这个策略产生的动作会从对象系统那里很可能会得到一个负面奖励。为了击败对手,我们需要逐渐的改变策略。策略梯度在一轮的学习中使用同一个策略直到该轮结束,通过梯度上升改变策略并开始下一轮学习,如此往复,直到轮次累计奖励收敛为止。
目标函数 根据上述策略梯度的基本原理,我们可以把它的目标形式化的描述为以下表达式:
这个函数表示策略在0到t步累计奖励的期望值。之所以是期望值,是因为每一步的奖励是根据策略(生成动作选择的概率分布)得到的奖励期望;而不是选择一个确定动作,得到确定的奖励。策略梯度的目标就是确定构成策略的参数,使得取得最大的期望值。即:
策略梯度算法中使用梯度上升来更新参数,根据数学期望的定义:
求导得:
这里进行不下去了,由于依赖于,无法直接求导,因此要使用一个小技巧。根据进行转换:
代入得:
这回求完了,根据期望的定义往回转换,得:
由于:
可得最终结果:
把期望用均值来近似:
折腾这么一大顿,终于求完了,这就是要优化的目标函数。即使你没太看懂,也能从这里大概做一个直观理解:奖励高时策略倾向于增加相应动作的概率,奖励低时就减小。策略梯度和传统的监督式学习的学习过程还是比较相似的:每轮次都由前向计算和反向传播构成,前向计算负责计算目标函数,反向传播负责更新算法的参数,依此进行多轮次的学习指导学习效果稳定收敛。唯一不同的是,监督式学习的目标函数相对直接,即目标值和真实值的差,这个差值通过一次前向反馈就能得到;而策略梯度的目标函数源自轮次内所有得到的奖励,并且需要进行一定的数学转换才能计算,另外由于用抽样模拟期望,也需要对同一套参数进行多次抽样来增加模拟的准确性。
应用实例 下面我们通过一个实例介绍如何应用PG解决具体问题:学习玩Atari PONG游戏。 PONG是一个模拟打乒乓球的游戏,玩家控制屏幕一侧的一小块平面模拟乒乓球拍上下移动来击球。如果迫使对方失球则己方一侧的得分加一,反之对方得分。使用策略梯度学习PONG游戏的基本思路是使用算法控制的一方与游戏控制的另一方进行对弈,通过观察游戏状态以及比分变化调整动作(向上或向下)的概率分布,使本方得分最大化。学习的过程可以写成以下代码:
policy = build_policy_model() game.start() while True: state = game.currentState() action, prob = policy.feedforward(state) reward = game.play(action) trajectory.append((state, prob, action, reward)) if game.terminated(): if count < SAMPLE_COUNT: trajectories.append(trajectrory) trojectroy = [] count += 1 break else: policy.backpropagation(trajectories) game.restart() trajectory = [] trajectories = [] count = 0 第 1 行构造一个策略模型并随机的初始化模型的参数。模型的功能是通过前向反馈由状态信息计算出所有动作的概率分布,例如(向上 90%,向下 10%),并选取概率最大的动作发给游戏作为指令。
大家晚上好!
今天和小伙伴分享三个Word制作双行表头的方法。
1、利用word双行合一功能
2、利用word的域代码功能
3、利用word表格工具制作
1
双行合一功能
说到制作word的双行表头,简单的表头,我们可以利用word自带的【双行合一】功能实现。
依次单击【开始】选项卡-在【段落】功能组-找到【中文版式】在下拉菜单列表找到【双行合一】命令,然后在弹出的【双行合一】对话框中的文本框中输入文字,单击确认。
在这里有一个地方需要我们注意,如果输入的错行文字字符数不相等,Word不会按照我们的意愿换行,而是按总字符数自动调整两行文字,效果如下图;
但友善的Word可以让我们插入空格来间隔字符,这样就可以将两行的单位名称分隔开来。
双行合一后如果字体太大(小),可以通过增大(减少)字号来调整。
2
Word域代码
一看见word的域功能,估计很多小伙伴们都表示拒绝。第一个想法肯定是域功能的都太难太麻烦,其实真相不是这样的。
我们可通过代码来完成输入,首先按【CTRL+F9】输入一个空域,然后输入EQ \a(某某市教育局,某某市文化局),按快捷键【Alt+F9】切换域代码,最后【F9】刷新。
太简单了,有没有?小伙伴们,赶紧学起来啊!
3
Word表格工具
很多时候实际需求双行表头制作比较复杂,我们可以利用Word的表格工具实现双行表头,而且利用表格工具创建的表头相对而言比较灵活。不仅仅可以制作双行表头,三行表头甚至更多都没有问题。
在Word中创建一个两行两列的表格,在表格中输入表头信息,将第二列合并为一个单元格,设置为居中,将所有单元格中的字号调整为合适的大小。最后,将整个表格的框线设置无框线,就大功告成啦!
4
操作视频
附上操作视频,小伙伴们,跟着视频一起操作吧
好啦今儿分享到这里,祝大家好运!
喜欢的同鞋请转发、点赞!
推荐阅读
1 . Word技巧达人推荐文章索引2 . 给你一份史上最全的Word 操作快捷键!3 . 收藏 | 表格原来可以这么用!4 . 将手动表格题注编号变成自动编号5 . 技巧 | 用表格定位封面信息在使用Word的过程中,你遇到过让人非常困惑的问题吗?欢迎留言分享哦!同时欢迎大家加入QQ群:Word办公技巧交流群435031885,一起交流,共同成长! 欢迎朋友们分享办公技巧,邮箱:wordjqdr@126.com
想要学习更多Word排版技巧,单击【
当画图时,如何将横坐标在显示时是从大到小显示啊,我写的程序中横坐标是从50000开始减小,直到0,但是作图出来横坐标却还是从小到大排列的,我把属性里横坐标翻转了一下可以了,请教一下有没有另外一种方法,就是添加一条语句就可以呢?我的程序如下:
g=9.8*3.28;
Vown=200*1852*3.28/3600;
Vint=200*1852*3.28/3600;
X=50000;
Y=0;
intheading =0.0001;
intbank =5;
psii=intheading*2*pi/360;
phii=intbank*2*pi/360;
R=abs(Vint*Vint/(g*tan(phii)));
psiidot=g*tan(phii)/Vint;
Xd=[];
Yd=[];
t1=20;
t2=30;
for t=0:0.1:t1
Xd=[Xd,X-Vint*t];
Yd=[Yd,0];
end
plot(Xd,Yd);
hold on;
grid on ;
for t=t1:0.1:t2;
Xd=[Xd,X-(Vint*t1+(Vint/psiidot)*(sin(psiidot*(t-t1)+psii)-sin(psii)))];
Yd=[Yd,Y+(Vint/psiidot)*(cos(psii)-cos(psiidot*(t-t1)+psii))];
end
plot(Xd,Yd);
hold on;
grid on ;
我想要的坐标示意图如下图
未命名.jpg
(31.62 KB, 下载次数: 0)
2010-1-8 16:54 上传
问题引入
max f(x, y)
s.t.
g(x,y) <= 0
几何解释
a. g(x ,y) <= 0为上图中z = 0平面中的圆,圆的边表示g(x, y) = 0,圆的内部表示g(x, y) < 0。
b. z = f(x, y)为上图中的曲面。
上述极值问题就是要求当点(x, y)落在圆内时(包括圆的边),f(x, y)的最大值。
1、 如果极值点在圆内,则显然有
f'(x, y) = 0
g(x, y) < 0
2、 如果极值点在圆边上,有拉格朗日乘子法我们知道
f’(x, y) + λg’(x ,y) = 0
g(x, y) = 0
如果是数学考试,我们直接求出上面两种情况的所有解(x, y),再带入f(x, y)计算,选取最大值即可。
对偶问题
稍微修改一下文章开头的极值问题,得到新的极值问题1
min f(x, y)
s.t.
g(x,y) <= 0
拉格朗日函数如下
F(x, y, λ) = f(x, y) + λg(x, y)
尝试MobaXterm从windows10宿主机去ssh连接我的Ubuntu步骤:
首先我Ubuntu网络连接模式是NAT模式
我先执行了下面的两条命令,确保ubuntu虚拟机安装了open ssh
sudo apt-get install openssh-client
sudo apt-get install openssh-server
然后执行下面的步骤:
1.查看Ubuntu的IP地址,首先下载net-tools: 执行sudo apt-get install net-tools
然后执行sudo ifconfig -a
我觉得应该是192.168.159.128
2.查看windows10的IP地址:CMD下执行ipconfig,就可以找到 本地IP地址(IPv4)
3.然后我Ubuntu里我去ping了宿主机IP,可以ping通:
4.我宿主机去ping Ubuntu虚拟机,ping不通。mobaXterm里也可以右键session去ping host
我按照https://www.cnblogs.com/zzgyq/p/8480674.html 的第五步去配置了VMnet8的IP地址就可以ping通了
windows10里设置,找到网络连接
选中VMnet8,右键属性,双击IPv4
然后做了如下配置,目的是 完成VMnet8的配置,与虚拟机IP地址处于同一局域网,可查看步骤1中虚拟机的IP地址详情
5.再去ping 虚拟机就可以ping通了。
6.通过MobaXterm去建立SSH连接; 如果是用密钥登录
密钥的使用:
在配置会话时,指定private key路径进行密钥登录。指定好你的id_rsa.pub
1 @NacosValue 自动刷新 环境依赖版本 <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.4.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <dependency> <groupId>com.alibaba.boot</groupId> <artifactId>nacos-config-spring-boot-starter</artifactId> <version>0.2.7</version> </dependency> @NacosPropertySource(dataId = "mydata", autoRefreshed = true) 同时 @NacosValue(value = "${my_ky}",autoRefreshed = true) 同时设置autoRefreshed = true 才能接受到nacos的push数据。 2 @Value 自动刷新 环境依赖版本 SpringCloud 是个大前提,不然还是考虑上面方式或者原生接入方案;
@NacosPropertySource(dataId = "mydata", autoRefreshed = true) 同时 @RefreshScope 方能接收到nacos的push数据。
3 小结 1 两种实现方式都是有点别扭
2 @NacosValue 对SPEL表达式支持不友好,例如List Map的注入需要注意和@Value的区别,如@Value("#{'${mydata}'.split(',')}") 支持自定义分隔符List,但是NacosValue不支持(不过可以使用默认的逗号分隔符)注入List 或者 []
3 参考 https://github.com/alibaba/spring-cloud-alibaba/issues/1474
TML5提供了一种离线应用缓存机制,使得网页应用可以离线使用,这种机制在移动端浏览器上支持度非常广,所有版本的android和ios浏览器都能很好的支持。我们可以放心的使用该特性来加速移动端页面的访问速度。
开启离线缓存的步骤也非常简单:
(1) 准备缓存清单文件(menifest text/cache-manifest),用于描述页面需要缓存的资源列表
(2) 在需要离线使用的页面中添加menifest属性,用于指定缓存清单文件的路径
让我们首先理解浏览器实现离线缓存的详细步骤,然后探讨使用离线缓存加速移动端网页访问速度的方案。
1. 下载/更新缓存的详细步骤
(1)当浏览器访问一个包含 manifest 特性的文档时,如果应用缓存不存在,浏览器会加载文档,然后获取所有在清单文件中列出的文件,生成应用缓存的第一个版本。
(2)对该文档的后续访问会使浏览器直接从应用缓存(而不是服务器)中加载文档与其他在清单文件中列出的资源。此外,浏览器还会向 window.applicationCache 对象发送一个 checking 事件,在遵循合适的 HTTP 缓存规则前提下,获取清单文件。
(3)如果当前缓存的清单副本是最新的,浏览器将向 applicationCache 对象发送一个 noupdate 事件,到此,更新过程结束。注意,如果你在服务器修改了任何缓存资源,同时也应该修改清单文件,这样浏览器才能知道它需要重新获取资源。
(4)如果清单文件已经改变,文件中列出的所有文件—也包括通过调用 applicationCache.add() 方法添加到缓存中的那些文件—会被获取并放到一个临时缓存中,遵循适当的 HTTP 缓存规则。对于每个加入到临时缓存中的文件,浏览器会向 applicationCache 对象发送一个 progress 事件。如果出现任何错误,浏览器会发送一个 error 事件,并暂停更新。
(5)一旦所有文件都获取成功,它们会自动移送到真正的离线缓存中,并向 applicationCache 对象发送一个 cached 事件。鉴于文档早已经被从缓存加载到浏览器中,所以更新后的文档不会重新渲染,直到页面重新加载(可以手动或通过程序).
以上只是一些详细步骤,具体也有一些值得注意的细节,比如menifest文件中列出的资源url必须和menifest本身使用同样的网络协议,如果menifest文件使用的是http协议,则列表中https协议的文件就会被忽略。总之,每当在使用Application Cache的过程中遇到奇怪的问题时,随时查阅W3C标准文档。
2.离线缓存事件流
浏览器在解析HTML文档的过程中,遇到HTML标记的menifest属性时,就立即在后台开启一个新的进程下载需要离线缓存的资源。在下载离线缓存的过程中,会在ApplicationCache上触发一系列事件。
关于离线缓存中要触发的事件,有一个很有趣的特性。从离线缓存W3C标准中,我们经常看到如下描述:'queue a post-load task to fire a simple event named (checking|noupdate|downloading)',每一个HTML文档都有一个离线缓存事件队列(queue),离线缓存下载过程中的事件都存放在这个队列里,用于在文档的onload事件触发后执行。也就是说,所有的ApplicationCache事件都在html的onload事件触发后才触发。
3.使用离线缓存加速移动端网页开发
上文提到过,Application Cache在移动端支持的很好,几乎所有的android浏览器和ios浏览器都能很好的支持。事实上使用Application Cache加速移动端网页访问速度是行业类普遍采用的优化方案,在包括新浪微博和QQ浏览器等大型产品中都有非常广泛的使用。但是在使用离线缓存时,我们需要留意一些问题。
(1).二次更新的问题
我们知道每次使用离线应用时,在有网络连接的情况下,浏览器都会逐字节的检查menifest文件是否有更新,而当menifest文件有更新时,就会重新下载menifest文件中列出的所有资源,资源下载成功后会触发updateready事件。这时离线应用本身并不会立即更新,而会在下次访问时才更新,这就是我们所说的二次更新。我们在开发web程序时,一般都是前端页面和后端接口同步更新,但是二次更新问题会导致页面更新不受控制,无法和后端接口同步更新,因此要做好后端接口的向前兼容,这迫使我们抛弃传统的web开发思路而采取native开发思路来管理离线应用。我们可以通过检测updateready事件,在新的缓存可用时通知用户更新。
window.addEventListener('load', function(e) {
window.applicationCache.addEventListener('updateready', function(e) {
//缓存更新完毕
多表查询: * 查询语法: select 列名列表 from 表名列表 where.... * 准备sql # 创建部门表 CREATE TABLE dept( id INT PRIMARY KEY AUTO_INCREMENT, NAME VARCHAR(20) ); INSERT INTO dept (NAME) VALUES ('开发部'),('市场部'),('财务部'); # 创建员工表 CREATE TABLE emp ( id INT PRIMARY KEY AUTO_INCREMENT, NAME VARCHAR(10), gender CHAR(1), -- 性别 salary DOUBLE, -- 工资 join_date DATE, -- 入职日期 dept_id INT, FOREIGN KEY (dept_id) REFERENCES dept(id) -- 外键,关联部门表(部门表的主键) ); INSERT INTO emp(NAME,gender,salary,join_date,dept_id) VALUES('孙悟空','男',7200,'2013-02-24',1); INSERT INTO emp(NAME,gender,salary,join_date,dept_id) VALUES('猪八戒','男',3600,'2010-12-02',2); INSERT INTO emp(NAME,gender,salary,join_date,dept_id) VALUES('唐僧','男',9000,'2008-08-08',2); INSERT INTO emp(NAME,gender,salary,join_date,dept_id) VALUES('白骨精','女',5000,'2015-10-07',3); INSERT INTO emp(NAME,gender,salary,join_date,dept_id) VALUES('蜘蛛精','女',4500,'2011-03-14',1); * 笛卡尔积: * 有两个集合A,B .
DQL:查询语句 1. 排序查询 * 语法:order by 子句 * order by 排序字段1 排序方式1 , 排序字段2 排序方式2... * 排序方式: * ASC:升序,默认的。 * DESC:降序。 * 注意: * 如果有多个排序条件,则当前边的条件值一样时,才会判断第二条件。 2. 聚合函数:将一列数据作为一个整体,进行纵向的计算。 1. count:计算个数 1. 一般选择非空的列:主键 2. count(*) 2. max:计算最大值 3. min:计算最小值 4. sum:计算和 5. avg:计算平均值 * 注意:聚合函数的计算,排除null值。 解决方案: 1. 选择不包含非空的列进行计算 2. IFNULL函数 3. 分组查询: 1. 语法:group by 分组字段; 2. 注意: 1. 分组之后查询的字段:分组字段、聚合函数 2. where 和 having 的区别? 1. where 在分组之前进行限定,如果不满足条件,则不参与分组。having在分组之后进行限定,如果不满足结果,则不会被查询出来 2. where 后不可以跟聚合函数,having可以进行聚合函数的判断。 -- 按照性别分组。分别查询男、女同学的平均分 SELECT sex , AVG(math) FROM student GROUP BY sex; -- 按照性别分组。分别查询男、女同学的平均分,人数 SELECT sex , AVG(math),COUNT(id) FROM student GROUP BY sex; -- 按照性别分组。分别查询男、女同学的平均分,人数 要求:分数低于70分的人,不参与分组 SELECT sex , AVG(math),COUNT(id) FROM student WHERE math > 70 GROUP BY sex; -- 按照性别分组。分别查询男、女同学的平均分,人数 要求:分数低于70分的人,不参与分组,分组之后。人数要大于2个人 SELECT sex , AVG(math),COUNT(id) FROM student WHERE math > 70 GROUP BY sex HAVING COUNT(id) > 2; SELECT sex , AVG(math),COUNT(id) 人数 FROM student WHERE math > 70 GROUP BY sex HAVING 人数 > 2; 4.
项目说明
数据集来自阿里天池:会员回购预测
目的是为了判断顾客是否会响应活动从而回购,也就是一个是否响应活动的二分类模型
数据说明
train&test
target:“0”代表不回购,“1”代表回购
transactions
代码
import pandas as pd import numpy as np from sklearn.model_selection import train_test_split from sklearn.linear_model import LogisticRegression from imblearn.over_sampling import SMOTE from sklearn.svm import SVC from sklearn.ensemble import GradientBoostingClassifier from sklearn.metrics import roc_auc_score, average_precision_score, confusion_matrix, classification_report # 读取数据 filename = r'C:\Users\liuhao\Desktop\新建文件夹\会员回购\train.csv' filename1 = r'C:\Users\liuhao\Desktop\新建文件夹\会员回购\test.csv' data = pd.read_csv(filename) data1 = pd.read_csv(filename1) train = data.copy() test = data1.copy() # 数据处理和特征构造 train['first_active_month'] = pd.to_datetime(train['first_active_month'],format='%Y-%m-%d') day = pd.
面试终败“高并发”,25天苦心钻研,居然整出一份并发宝典?都是“算法”惹的祸,字节三面处处坑,我的offer要凉了?春招指南之“性能调优”:MySQL+Tomcat+JVM,还怕面试官的轰炸? JCTree的介绍 JCTree是语法树元素的基类,包含一个重要的字段pos,该字段用于指明当前语法树节点(JCTree)在语法树中的位置,因此我们不能直接用new关键字来创建语法树节点,即使创建了也没有意义。此外,结合访问者模式,将数据结构与数据的处理进行解耦,部分源码如下:
1public abstract class JCTree implements Tree, Cloneable, DiagnosticPosition { 2 3 public int pos = -1; 4 5 ... 6 7 public abstract void accept(JCTree.Visitor visitor); 8 9 ...10} 我们可以看到JCTree是一个抽象类,这里重点介绍几个JCTree的子类
JCStatement:声明语法树节点,常见的子类如下 JCBlock:语句块语法树节点 JCReturn:return语句语法树节点 JCClassDecl:类定义语法树节点 JCVariableDecl:字段/变量定义语法树节点JCMethodDecl:方法定义语法树节点JCModifiers:访问标志语法树节点JCExpression:表达式语法树节点,常见的子类如下 JCAssign:赋值语句语法树节点 JCIdent:标识符语法树节点,可以是变量,类型,关键字等等 TreeMaker介绍 TreeMaker用于创建一系列的语法树节点,我们上面说了创建JCTree不能直接使用new关键字来创建,所以Java为我们提供了一个工具,就是TreeMaker,它会在创建时为我们创建的JCTree对象设置pos字段,所以必须使用上下文相关的TreeMaker对象来创建语法树节点。
具体的API介绍可以参照,TreeMakerAPI,接下来着重介绍一下常用的几个方法。
TreeMaker.Modifiers TreeMaker.Modifiers方法用于创建访问标志语法树节点(JCModifiers),源码如下
1public JCModifiers Modifiers(long flags) { 2 return Modifiers(flags, List.nil()); 3} 4 5public JCModifiers Modifiers(long flags, 6 List annotations) { 7 JCModifiers tree = new JCModifiers(flags, annotations); 8 boolean noFlags = (flags & (Flags.
第一章 函数式接口 1.1 概念 函数式接口在Java中是指:有且仅有一个抽象方法的接口。
函数式接口,即适用于函数式编程场景的接口。而Java中的函数式编程体现就是Lambda,所以函数式接口就是可以适用于Lambda使用的接口。只有确保接口中有且仅有一个抽象方法,Java中的Lambda才能顺利地进行推导。
备注:“语法糖”是指使用更加方便,但是原理不变的代码语法。例如在遍历集合时使用的for-each语法,其实底层的实现原理仍然是迭代器,这便是“语法糖”。从应用层面来讲,Java中的Lambda可以被当做是匿名内部类的“语法糖”,但是二者在原理上是不同的。
1.2 格式 只要确保接口中有且仅有一个抽象方法即可:
修饰符 interface 接口名称 { public abstract 返回值类型 方法名称(可选参数信息); // 其他非抽象方法内容 } 由于接口当中抽象方法的 public abstract 是可以省略的,所以定义一个函数式接口很简单:
public interface MyFunctionalInterface { void myMethod(); } 1.3 @FunctionalInterface注解 与 @Override 注解的作用类似,Java 8中专门为函数式接口引入了一个新的注解: @FunctionalInterface 。该注解可用于一个接口的定义上:
@FunctionalInterface public interface MyFunctionalInterface { void myMethod(); } 一旦使用该注解来定义接口,编译器将会强制检查该接口是否确实有且仅有一个抽象方法,否则将会报错。需要注意的是,即使不使用该注解,只要满足函数式接口的定义,这仍然是一个函数式接口,使用起来都一样。
1.4 自定义函数式接口 对于刚刚定义好的 MyFunctionalInterface 函数式接口,典型使用场景就是作为方法的参数:
public class Demo09FunctionalInterface { // 使用自定义的函数式接口作为方法参数 private static void doSomething(MyFunctionalInterface inter) { inter.myMethod(); // 调用自定义的函数式接口方法 } public static void main(String[] args) { // 调用使用函数式接口的方法 doSomething(() ‐> System.
问题:一直在用QRCODE,但之前没有包含汉字,这次把汉字就进去竟然会出现乱码,且同样的字比如“黑”这个字,直接输入“黑",手机扫描出来是乱码,但如果输入”货号:黑“,则能正常显示。
解决办法:编码问题所致,先对要编码的字符进行转换,转为utf-8,采用AnsiToUTF8即可。 function AnsiToUTF8(const S: AnsiString): UTF8String;
在学习网络技术STP中,会遇到根网桥、根端口、指定端口的判定;那么这些端口的判断依据是什么呢?判断过程是怎么样的呢? 下面由小编来简单说一下。
工具/原料 STP生成树协议技术原理
方法/步骤 概念:STP协议可应用于在网络中建立树形拓扑,避免网络中的环路;它是一种公开的协议适合所有厂商的网络设备,在配置上和体现功能强度上有所差别,但是在原理和应用效果是一致的。
STP端口状态:
Blocking(阻塞状态):二层端口为非指定端口,也不会参与数据帧的转发。
Listening(侦听状态):生成树会根据交换机所接收到的BPDU而判断出了这个端口应该参与数据帧的转发。
Learning(学习状态):这个二层端口准备参与数据帧的转发,并开始填写MAC表。在默认情况下,端口会在这种状态下停留15秒钟时间。
Forwarding(转发状态):这个二层端口已经成为了活动拓扑的一个组成部分,它会转发数据帧,并同时收发BPDU。
Disabled(禁用状态):这个二层端口不会参与生成树,也不会转发数据帧。
选择根网桥的依据,交换机之间选择网桥ID值最小的交换机作为网络中的根网桥。交换机优先级(缺省32768)和MAC地址构成网桥ID。
选择根端口(RP)的依据是:
1>根路径成本最低 (根据链路带宽大小来定的,链路带宽越大成本越低)2>直连的网桥ID最小 3>端口ID最小 (每个交换机的端口都有一个端口ID :0、1、2、3、4、5....)
非根桥上的指定端口(DP):
1>根路径成本最低2>端口所在的网桥的ID值较小3>端口ID值较小
STP协议不足:
1、拓扑收敛慢,当网络拓扑发生改变时,STP协议需要50-52秒的时间才能完成整个收敛过程;
2、不能提供负载均衡的功能。在网络中出现环路的时候,生成树协议就简单的将环路进行阻塞(Block),这样该链路就不能进行数据包的转发,造成网络传输链路资源的浪费。
注意事项 掌握STP协议的原理,多实战。
Creo 7.0发布以来,大家聊得最多的热点就是“多主体(多实体)”! Creo 7.0设计环境支持多主体(多实体),会在设计的效率、灵活性和可用性方面都有明显的提升。
多主体(多实体)可以怎么样......怎么样......!
多主体(多实体)可以怎么样......怎么样......!
多主体(多实体)可以怎么样......怎么样......!
功能选项卡中的主体指令:
多主体功能图标 浮动工具栏中的主体指令
多主体浮动工具栏 广泛的应用前景,让大家津津乐道,例如:
• 零件环境支持布尔运算
• 使用表示减料几何的主体
• 对作为设计工具的主体执行布尔和分割操作
• 针对几何主体的柔性建模功能
• 增材制造
• 创成式设计
• 模拟
• 注塑多材料零件
• 具有多主体概念的主模型方法
• 钣金件中的多实体应用
• 数据交换工作流
。。。。。。
如果我们把多实体应用到模具设计场景呢?
一个有趣的想法,多实体让我们可以使用零件分模,但是这方便吗?
其实思路很简单:
利用布尔运算完成参考零件的切除
创建分型面分割主体产生多实体,也就是我们需要的多个模具零件
。。。。。。
话不多说,看视频吧,我相信大家看完都会有自己的答案了!
知乎视频www.zhihu.com TomLee往期精彩文章推荐阅读: Creo7.0钣金设计教程之拉伸工具的分类 - TomLee的文章 - 知乎 https://zhuanlan.zhihu.com/p/182543923
Creo7.0钣金拉伸切口特征 ProE打开Creo7.0模型文件的方法视频教程 - TomLee的文章 - 知乎 https://zhuanlan.zhihu.com/p/179961339
ProE打开Creo模型文件的方法 Creo7.0 | Creo6.0钣金设计新功能大全教程 - TomLee的文章 - 知乎 https://zhuanlan.zhihu.com/p/178382392
Creo7.0 | Creo6.0钣金设计新功能全收录 Creo7.
使用vue使用脚手架引入bootstrap遇到Can’t resolve '…/fonts/glyphicons-halflings-regular.woff2问题,查看对应目录文件是存在的,所以不是缺失问题,应该是路径问题,css文件中的默认写法,只适用于传统的web服务器,在node这里不行了,所以我们打开bootstrap.css找到缺失的文件路径前面font的引用改一下,把 …/font改为 /font,也就是去掉前面的两点,再重新npn run dev,成功构建!
文章目录 前言二、使用步骤创建一个页面复制页面:粘贴页面保存页面并创建路由预览注册页面输入信息测试校验源代码 总结 前言 用guiplan快速制作一个注册页面,模拟用户数据并实现简单的校验等 提示:以下是本篇文章正文内容,下面案例可供参考
二、使用步骤 创建一个页面 创建一个注册页面,选择空页面模板即可
复制页面: 切换到做好的登录页面,然后选择这个最外层部分,也就是这个背景,按ctrl+c复制
粘贴页面 再切换到注册页面,然后按ctrl+v将登录页面粘贴进来,修改标题将系统登录改为系统注册
保存页面并创建路由 输入保存位置,并点击保存即可自动保存页面。如果没有启动服务点击右边的启动图标,来启动本地服务。
点击 文件->打开路由配置
点击一键插入路由,注册页面的路由即可配置完成
当然这里用的vite对@符号做了定义所以可以手动修改路由配置。@前面添加一个/ ,name值也可以改为中文“注册”
{ path: '/user/register', name: '注册', meta: { icon: 'md-funnel', title: 'user_register' }, component: () => import('/@/views/user/register.vue') }, 预览注册页面 右下角输入端口,这里是3000,点击打开预览并点击刷新。这里会自动打开当前3000端口的首页,首页顶部会显示整个路由链接,点击注册即可跳转到当前正在制作的注册页面
点击开启编辑模式按钮,系统会自动用红色边框选择当前所选的元素
按方向键移动选择元素,选择el-form元素,可以看到这里所创建的数据与绑定的方法
点击数据可以看到登录页面所用到的数据字段以即校验方法
再添加一个字段password2,并对password2自定义一个校验方法,代码如下
form: { username: '', password: '', password2:'' }, rules: { username: [ { required: true, message: '请输入用户名称', trigger: 'blur' }, { min: 1, max: 15, message: '用户名称必须大于1个字', trigger: 'blur' } ], password: [ { required: true, message: '请输入密码', trigger: 'blur' }, { min: 6, message: '密码长度必须大于6个字', trigger: 'blur' } ], password2: [ { required: true, message: '请再次输入密码', trigger: 'blur' }, { validator:(rule,value,callback)=>{ if(value&&value == this.
我做了一个简单的石头-布-剪刀程序,我需要在这个程序中添加一定的条件。。我必须让
用户不停地玩,直到用户或计算机连续赢了两次以上。我试图从中找出答案,但不幸地找不到。。在
首先我尝试了gameOver = False
playerScore = 0
computerScore = 0
并添加
^{pr2}$
并将playerScore+=1添加到if语句中。
但不起作用…
任何建议都会有所帮助,我们将不胜感激。。干杯!
这是我的代码。import random
import sys
def main():
player = input("Enter your choice in number (rock 1 / paper 2 / scissors 0) :")
if (player == 0):
player = "scissors"
elif (player == 1):
player = "rock"
elif (player == 2):
player = "paper"
else:
print("Invalid Input Quitting...")
sys.exit(0)
computer = random.randint(0,2)
if (computer == 0):
来源:微信公众号「编程学习基地」
个人比较喜欢这种格式化
QString str; str.sprintf("ID:%d",15); Qt Use asprintf(), arg() or QTextStream instead(代替).
QString str; str.asprintf("ID:%d",15); 其他
QString str = QString("ID:%1").arg(15);
展开全部
FileOutputStream很明显你是用的文件流返回32313133353236313431303231363533e4b893e5b19e31333366303733的
// 以byte流的方式打开文件 d:\1.gif
FileInputStream hFile = new FileInputStream(url); //得到文件大小
int i=hFile.available();
byte data[]=new byte[i]; //读数据
hFile.read(data); //得到向客户端输出二进制数据的对象
OutputStream toClient=response.getOutputStream(); //输出数据
toClient.write(data);
toClient.flush();
toClient.close();
hFile.close();
扩展资料:
如果是纯文本使用字符流,如果二进制文件,使用字节流。
如果只是得到信息,原样不动,不进行修改操作,例如文件上传和下载,这时就使用字节流。文件上传:在服务器端把浏览器端信息提取出来。文件下载:把服务器端内容写给浏览器端。
如果要操作的是自定义信息,这时使用字符流。
通过response获取的输出流它的真实类型是什么?
ServletOutputStream response.getOutputStream();
PrintWriter response.getWriter();
ServletOutputStream由于使用字节流多数是原样复制,所以使用write方法,而不是print方法。
PrintWriter:打印流,两个特点:1.可以设置自动刷新。2.可以将信息原样输出。
【实例简介】
threejs入门博客http://blog.csdn.net/u010588262/article/details/79570436的配套demo,演示地址:
https://www.hugeoyzy.top/threejs/src/demo1.html
https://www.hugeoyzy.top/threejs/src/demo2.html
【实例截图】
【核心代码】
threejsdemo
└── threejsdemo
├── src
│ ├── css
│ │ ├── base.css
│ │ ├── images
│ │ │ ├── ui-bg_flat_75_ffffff_40x100.png
│ │ │ ├── ui-bg_highlight-soft_75_cccccc_1x100.png
│ │ │ ├── ui-icons_222222_256x240.png
│ │ │ ├── ui-icons_454545_256x240.png
│ │ │ └── ui-icons_888888_256x240.png
│ │ ├── index.css
│ │ ├── info.css
│ │ └── jquery-ui.css
│ ├── demo1.html
│ ├── demo2.html
│ ├── fonts
│ │ ├── droid
点击这里查看上一期推送哦~
半平米工坊:软件Rhino | 曲面塑造zhuanlan.zhihu.com 上一篇推送我们完成了“鼠标”建模练习,在此过程中进行了激动人心的阶段式总复习。
今天我们将重新启航,学习山地地形、笔筒和三管混接的建模案例,接触到rhino的王牌命令——曲面流动!敲黑板啦,小童鞋记得要记好重点噢!
我们快开始吧!!!
案例学习 1山地地形建模
第一个例子我们学习的是山地地形建模,主要介绍两种方法。这个例子比较的是Patch和Drape命令在绘制地形时候的异同。
首先在TOP视图上运用控制点曲线命令大致模拟出一个等高线地形图,可以随意绘制。这里给出一个例子,如下图。
接着运用操作轴分别将其上移相等的距离,这里为了截图方便,我将间距设置为10。
方法一:核心为patch命令
在左侧建立曲面工具集里选择嵌面patch命令,全选所有等高线,保留弹出窗口的参数,一键生成地形,如下图。
我们可以观察到曲面与控制线(等高线)贴合得比较宽松,放手让软件计算,于是某些部分出现了本不应有的小突起。
这种情况太气人了!!但是我们仍有解决的办法。重新patch,调整弹出窗口的UV方向跨距数为20,如下图。
我们可以观察到曲面与控制线较之前贴合得更严密,情况好了很多。也就是说,运用嵌面patch命令生成地形时,我们需要将UV方向跨距数调整到合适的参数。
方法二:核心为Drape命令
首先,我们需要在建立曲面工具集里选择“以平面曲线建立曲面”,将所有的闭合等高线转换成封闭曲面,如下图。
接着,在建立曲面工具集里选择“在物件上产生布帘曲面” Drape命令。
转换到TOP视图,按住鼠标左键拉出一个矩形选框,把要作布帘的所有等高面框选进去。如下图。
地形瞬间生成,回到Perspective视图。
对没错,你看到的就是眼前这个阶梯蛋糕!!这也太丑了吧,和我想象的优美流动的山体严重不符啊!!
当然是有补救方法的,在Drape命令栏上方将间距调大,这里设置为5。重新进行布帘命令,如下图。
是不是有山体的样子了??
当然,如果不满意的话,可以打开控制点进行局部调整。
小结一下,Patch的优点在于曲面形状柔和,但缺点是曲面容易失控,需要后期切除部分。
而Drape 优点在于成面迅速,曲面形状易于掌控,但是缺点是易形成阶梯状曲面,需要调试或后期调整。
最后,有同学提出质疑,为什么我不能用放样Loft命令生成地形呢?
这个问题问得很好,说明前面的内容掌握不错,有自己的一番思考。放样命令实际上与控制点有关,我们运用控制点绘制曲线导致每层等高线的数量和走向都不一致,因此在这个例子里,我们并不能Loft。否则结果你们可以试试(奸笑)笔筒建模
笔筒涉及到的命令是unrollSrf和Flowalongsrf,即将接触的沿曲面流动命令,可是rhino的王牌命令噢!!接下来,我们就通过一个简单的例子,了解曲面流动的基础操作吧。
首先在体块工具里绘制一个圆柱体,将其炸开,我们需要得到其侧面展开面积。
我们对其侧表面运用unrollscf命令,得到展开矩形。我们需要在这个矩形面上绘制笔筒的花纹,并将平面的花纹覆盖在圆弧曲面上。
这里要明确一点,曲面流动一定会变形,除非用展开曲面的方法。而在所有展开曲面的方法中,UnRollSrf较为简单,它能展开单曲面(曲面的UV方向有一个方向的阶数是1)为平面。
听起来很复杂,但是实际上很简单,下面是我们的步骤图解。
运用直线工具在其一角绘制一条倾斜直线,并将其复制到另一角,如下图。
我们在两条直线之间建立均分曲线,建立一系列的过渡。这里我们输入的参数为10。
将所有的直线全选后,运用操作轴集体复制,向右移动一个单位,完成第一组花纹。
运用镜像工具,选取中线交点,复制出呈对称的第二组直线。同理,运用操作轴集体复制,向右移动一个单位,完成第二组花纹。
全选所有花纹直线,运用裁切工具依次把中间交接的地方删除。这里需要耐心一点哈~
观察下图可以看到,我们绘制的花纹超出了展开矩形面。这里需要注意的是,我们必须确保花纹全部在展开矩形面上,否则沿曲面流动一圈无法接上。
这时候我们可以使用单轴缩放scale1D命令,通过两点确定缩放轴,它可以让我们沿着一根轴线进行缩放。如下图。
重点来了。将展开矩形面先复制一份!将展开矩形面先复制一份!!重要的事情说两遍。全选所有花纹直线,切割展开矩形面。此时底面破坏,如果不事先复制一份,最后将无法将花纹沿曲面流动!!
将切割后的花纹面沿垂直方向挤出一段合适的距离。如下图。
用“沿着曲面流动”命令Flowalongsrf把花纹流动到圆柱体侧表面上。
选取要流动的物体花纹,确定后会出现选取基准面的选项,点击一下复制出来的原有平面而不是破碎平面,然后点击目标体圆柱侧面,流动成功。
删除原有表皮,笔筒制作完成。
3三管混接
三管混接涉及到的命令有弧形混接,混接曲面,Patch,Sweep2,loft。其中弧形混接和混接曲面是我们将要接触的新命令。
如果我们将其全选并使用pipe命令,我们会发现各个面是相互贯穿的,如下图,交接效果非常不理想。
因此,我们决定尝试使用新命令混接曲面进行快速封面。第一步是要原有的多段线炸开,分别使用pipe命令成管,并将它们分开相等的一段距离,如下图。
其次,在每个管的中点处建立两个垂直的相贯面,对其进行切割,把它们分成四分之一份,如下图。 每两个管对应的四分之一半弧使用混接曲面进行封面,保留弹出面板的参数。
将所有的面混接后,我们会发现一个问题,即最外侧和最里侧三管相交的地方实际并没有连接起来,反而看上去像是汇交于一个点,如下动图。
因此对于最外侧和最里侧整体封面的解决办法是,全选六条外边缘,然后进行Patch嵌面封面。将UV方向的跨距数修改为10,使其控制程度适中,操作如图。
但是,当我们放大观察时,会发现Patch后的面并不能与原有的混接曲面完美拟合。
这就涉及到我们之前讲解patch命令时所说的,patch封面其实是很随意的,会出现破面。但是,我们完全可以解决破面问题。
解决方法如下,保留patch封面的两个面,删去混接曲面,将三个管再移开一段相等的距离。
在曲线工具集里选择“弧形混接”,将缺失的弧线依次补上。如图。
接下来运用“双轨扫掠”sweep2命令,依次选取路径曲线和断面曲线,封面后如下图。
最后,运用loft放样命令将所有对应曲线接上即可,三管混接到这里就正式完成啦!
今天的推送就到这啦,回顾一下今天的内容,主要学习了山地地形、笔筒和三管混接的建模案例,接触到rhino的王牌命令——曲面流动!
希望大家看完这期的讲解凭借回忆打开rhino练习一下,有助于更好地消化吸收哈~
债见啦~
作者 / 小学弟
5G时代来的比想象中要快,许多城市已经开始普及5G,各大运营商也开始推出5G套餐,但是提到5G的组网模式相信还是很多人一知半解,网上也开始有着关于真假5G的谣言,同时NSA被宣布不再许可入网,这引起了更多不知情者的恐慌,也让“NSA是假5G”,“NSA以后不能用了”等等的谣言开始散播,下面我们就详细的说明这两种网络的区别为大家辟谣。
首先要说明的一点,网络上所说的NSA和SA都是真5G,两者的5G网络速度和使用体验并没有太大分别,虽然未来将会停止NSA组网方式的5G网络入网,但是已经入网使用的NSA完全可以继续使用,不会受到任何影响。然后再说一下NSA和SA的区别,NSA和SA都是5G现行组网的主要方式,我们可以称NSA为混合组网,SA为独立组网,简单来说,NSA是融合现有的4G基站以及网络架构部署5G网络,而SA是重新建立5G基站。
混合组网(NSA)和独立组网(SA)都是真5G网络,在使用体验上没有差别,唯一的区别可能就是建设速度,由于混合组网可以依托现有的4G基站,所以5G网络的普及和覆盖将会非常迅速,这也是目前全球首先的5G网络先行的普及方式,而独立组网则需要较为长久的时间去建设新的基站,这是打造一个完整的5G世界必要的漫长过程,因为独立组网可以实现5G的全部优势,但就目前而言,未来很长的一段时间都会是NSA混合组网先行,然后NSA混合组网与SA独立组网并存,最后在过渡到SA独立组网撑起5G网络。
有很多人担心以后NSA混合组网会不能用,这个问题完全不必要担心,NSA混合组网不会被淘汰,以后依旧可以使用5G网络,即使以后全部都是SA独立组网,这中间的过渡时间,也已经超过了一部手机的使用寿命,在那之前用户也一定已经更换了SA独立组网的5G手机。所以现在购买5G手机没有任何问题,不但不会被淘汰,其5G网络的使用体验将会非常不错。
5G普及之初,各大厂商发布的5G手机的定价都高上了天际,而最近发布的iQOO Pro 5G版却打破了5G高价的局面,iQOO Pro 5G版不到4000元的起售价确实让人们大吃一惊,这个价格甚至可能都比不上原先的一部4G旗舰手机,不仅如此iQOO Pro 5G版的配置全都是目前最顶级的,还有着一身的黑科技,这样的配置给到这样一个定价,不光是vivo品牌非常良心,也说明vivo技术的成熟与稳定,相信这部手机是目前更换5G手机的最佳选择。
前言 了解RGB三基色LED的原理和使用方法; 认识Arduino开源硬件开发平台中PMW输出控制的方法; 掌握Arduino通过C语言实现电路组建和信号控制的基本方法。 提示:以下是本篇文章正文内容,下面案例可供参考
一、实验基础知识 1.RGB三基色LED
三基色是指RGB三种颜色,R=Red,G=Green,B=Blue,通过这三种颜色不同比例的混合,可以显示任何颜色。全彩的 LED 屏幕就是通过这种单个的 RGB 灯珠集成在一起做成的,一个 LED 就是一个像素,这个像素可以通过程序控制显示任何颜色、任何灰度。在单片机中是通过 PWM 来实现调色功能,之前学习过 PWM 调光功能,使用 1 个单色 LED,主要功能是亮度变化,如果三种颜色都用 PWM 控制器亮度,就可以混合出不同的比例。看到的彩色图片一般也会用 RGB 格式表示,比如 24 位彩色,RGB 三种颜色各占 8 位,组成的格式是 RGB=888 格式。每种颜色都有 2 的 8 次方=256 个亮度等级,那么整个像素是可以显示 2 的 24 次方=16777216 种颜色,这就是一个像素可以实现的颜色,位数越高,颜色就分的越细。另外一种常用格式是 16 位,RGB=565 格式,一个像素可以显示 2 的 16 次方=65536种颜色,这种格式在单片机里面用的非常多,尤其是单片机控制的彩屏。还有一种格式是18 位,RGB=666 格式,一个像素显示的颜色数量是 2 的 18 次方=262144,以前常听说的 26万色就是说的这种格式。还是从最基本的说起,既然三基色灯是 3 种颜色灯的组合,那么控制部分也就变得非常明确,1 种颜色用 1 路 PWM,三种颜色就用三路 PWM,很幸运,UNO 有大于 3 路 PWM功能输出,所以还有剩余 PWM 来完成其他功能。下面是电路图和实物连接他。同样的 RGB也分共阳和共阴,LED 一共 4 个有效引脚,1 个公共端,另外 3 个是三种颜色的另外一端。
首先JDK1.7和1.8是不同的。
先说JDK1.7:
栈:基本类型的对象和类的引用变量,局部变量。
堆:对象,成员变量,字符串常量池
方法区:静态变量,类信息,运行时常量池
再说JDK1.8:
栈:基本类型的对象和类的引用变量,局部变量。
堆:对象,成员变量,静态变量,字符串常量池
方法区:类信息,运行时常量池
自我总结,如有问题,一起探讨。
一、背景 我们有一个项目接口压测,报文数据其中一个字段是视频加密后的字符串,很长很长,如果使用Jmeter,由于报文过长会导致Jmeter卡死,无法使用。
二、locust简介 1、定义
Locust是一款易于使用的分布式负载测试工具,完全基于事件,即一个locust节点也可以在一个进程中支持数千并发用户,不使用回调,通过gevent使用轻量级过程(即在自己的进程内运行)。
2、特点
①、不需要编写笨重的UI或者臃肿的XML代码,基于协程而不是回调,脚本编写简单易读;
②、有一个基于we简洁的HTML+JS的UI用户界面,可以实时显示相关的测试结果;
③、支持分布式测试,用户界面基于网络,因此具有跨平台且易于扩展的特点;
④、所有繁琐的I / O和协同程序都被委托给gevent,替代其他工具的局限性;
3、locust与jmeter的区别
工具 区别
jmeter 需要在UI界面上通过选择组件来“编写”脚本,模拟的负载是线程绑定的,意味着模拟的每个用户,都需要一个单独的线程。单台负载机可模拟的负载数有限
locust 通过编写简单易读的代码完成测试脚本,基于事件,同样配置下,单台负载机可模拟的负载数远超jmeter
PS:但locust的局限性在于,目前其本身对测试过程的监控和测试结果展示,不如jmeter全面和详细,需要进行二次开发才能满足需求越来越复杂的性能测试需要。
简而言之,locust可以通过python脚本规避直接使用大报文的弊端,完成压力测试。
三、使用 1、安装locust库
pip install locust即可
2、导入相关库
from locust import HttpUser, TaskSet, task
3、定义一个类,继承TaskSet用来写需要压测的接口详细信息,例如
on_start函数表示每个并发的用户执行时需要执行的操作,类似于unittest里的set_up函数,核心的发送请求还是post和get函数
4、定义一个类,继承HttpUser用来表示需要执行哪些接口任务和执行的host和port,例如
5、通过locust启动
locust -f locust_test.py --host=http://XXXX-idr-record-video.XXXXX.com" -P = 指定端口
其中 host的值为测试接口的host地址
6、访问http://localhost:8089/就可以进入locust页面,输入并发用户数和每秒生成用户数,点击开始即可开始压力测试
Statistics下可以看到聚合报告
Charts下可以看到RPS和响应时间
Failures下可以看到失败接口的错误类型和次数
Exceptions可以看到异常信息
Download Data可以下载相关数据,其中最后一个是测试报告,内容包含聚合报告和RPS和响应时间的图表
df -h # 红色框里面显示 总控磁盘大小 和 已使用 情况 ```
一维傅里叶变换:
https://zhuanlan.zhihu.com/p/19763358
离散的频谱图像,其中时域图像y=f(t),横轴是t,纵轴是y; 其对应的频域包括:振幅(体现在频域图像中:横坐标是频率,纵坐标是振幅),相位(体现在相位谱中:横坐标是频率,纵坐标是相位值)和频率。
傅里叶变换:
任意信号都可以由一组正弦曲线组合而成;对于连续周期信号,其对应的频谱是离散的,组合方式为(∑);对于非周期信号,可以认为其周期是无限大,其对应的频谱是连续的,组合方式为∫ 。
连续的傅里叶级数:
一维傅里叶变换公式:
t是时间,T是频率
傅里叶变换的理解:
傅里叶反变换的直观理解(频域到时域):
一维傅里叶变换的作用:
(1)信息传输中的滤波:低频信息变化缓慢,而高频信息变化迅速;针对信息传输中噪声的频率成分,进行滤波去除噪声
二维傅里叶变换:
关键:理解频率图像的含义
参考https://zhuanlan.zhihu.com/p/99605178?utm_source=qq
https://www.zhihu.com/question/22611929
(1)一维傅里叶变换是正弦信号的叠加,而二维傅里叶变换是正弦平面波的叠加。各个不同频率的正弦平面波,叠加后构成不同的灰度值。
(2)二维傅里叶变换公式的含义:
公式中,x,y是连续空间变量,u,v是连续频率变量。二维傅里叶变换将二维信号f(x,y)分解为若干个复平面波。若干个复平面波可以用二维频率域K-SPACE表示。
若干个复平面波,每个波包括:频率w,幅度A,相位,方向
二维傅里叶变换的作用:
频域滤波来去除指定频率的数据;中心低频贡献了图像的主体,周围高频提供图像的细节和边缘
小波变换: https://mp.weixin.qq.com/s/CRqhHIlYYRjYJ64PZZnUkQ http://users.rowan.edu/~polikar/WTtutorial.html pytorch实现傅里叶变换: https://mp.weixin.qq.com/s?__biz=MzI5MDUyMDIxNA==&mid=2247522066&idx=3&sn=12de5f3c0c15fbf957b9429373c9ce54&chksm=ec1c7aebdb6bf3fdb87a85b9508478b919ee5f8a927be7851dc525892ad10bfb4c9a61e051e4&scene=21#wechat_redirect 傅里叶变换,拉普拉斯变换和Z变换: https://mp.weixin.qq.com/s?__biz=MzI5MDUyMDIxNA==&mid=2247506911&idx=2&sn=b7ea282fefa7adf98ac443fff3ae33ab&chksm=ec1c3626db6bbf308198cc437d210943a982e63f49a2bd846cc29a3208a4721e75a25652b3b8&scene=21#wechat_redirect
Matlab有多种计算滑动平均的方法,仅学习filter函数的计算方法。
设原始数据为x,平均窗口设为a(a为正整数),那么无权重滑动平均后的数据y为:
windowSize = a;
y=filter(ones(1,windowSize)/windowSize,1,x);
Matlab: 利用filter函数求滑动平均
Matlab有多种计算滑动平均的方法,现介绍基于filter函数的计算方法。
设原始数据为x,平均窗口设为a(a为正整数),那么无权重滑动平均后的数据y为:
xinan_rain_mean_annual = xinan_rain_mean_annual';
x = xinan_rain_mean_annual;
windowSize = 5;
%y=filter(ones(1,windowSize)/windowSize,1,x);
y = smooth(x,5);
xx = 1982:2016;
plot(xx,x);
hold on
plot(xx,y);
昨天我们说了线段的两种计数方法,一种是数端点的方法,也叫打枪法,或者叫大炮发射法,另一种是分类法。而且我们着重推荐使用分类法。今天我们继续说说平面图形的计数问题。
今天这里着重说一下,长方形以及正方形的计数。
当一个图形是长方形,只是一层的话,相信这个都很简单,大家都知道他跟数线段其实是一样的道理,那么有几个基本的长方形,根据公式,就可以很快的算出来。
如果说是有多层的话,我们是怎么算呢?其实也是可以根据分类的原理,套用公式。比如说上图中横向有3个基本长方形,纵向也有3个基本长方形,我们如何算呢?
那我们算一下横向有3+2+1=6个,纵向其实是一样的3+2+1=6个,那么这个三行三列的图形中,总共就有:6×6=36个长方形。
我们再说一下全部由小正方形组成的平面图形,怎么数正方形个数?比如一个4行4列,每一小格都是正方形组成的平面图形,总共有多少个正方形?这种图形不按顺序不分类很容易数错。
由于这些格子全部是正方形,所以从1行1列,到4行4列全都是正方形。我们也是把它分按照分类。单独一格一格的;田字格的,就是2行2列的;3行3列的,以及4行4列的这四种正方形。
单独一格小正方形这种很简单,我们可以数一下横向有4个,纵向有4个。4×4=16个。
那么这种田字格的那有多少呢?我们可以数一下3×3=9个。九宫格的有多少个呢?有2×2=4个,4行4列的就只有最外面1个。
然后我们将这些全部加起来,算出来的总数就是整个图形中正方形的个数。
16+9+4+1=30个。
如果在旁边再加一列这样的小正方形,变成了4行5列的图形,总共会有多少个正方形呢?
4行5列
单格的:4×5=20(个)
田字格:3×4=12(个)
九宫格:2×3=6(个)
四行四列的:1×2=2(个)
这图形中有没有更大的正方形了?当然没有,图形本身才是4行5列,所以最大的就是4行4列的那2个正方形。
将这四种规格的正方形数量全部相加:20+12+6+2=40(个)
平面图形计数一定记得以某种顺序,比如上图中寻找隐藏在树中的10个人头,我们就是用从上到下,从左到右的顺序来找的。如果看到一个标一个,杂乱无章的,出错的机会远远大于数对的概率。
都说条条大道通罗马,每个人的方法可能不一样,欢迎大家在评论中留下你的好方法。
点击右上角关注我们,每天给您带来最新最潮的科技资讯,让您足不出户也知道科技圈大事!
在笔记本之前,大家普遍都使用台式电脑办公。笔记本电脑,特是轻薄便携的高性能笔记本电脑诞生后,不少人开始了笔记本办公的时代。不过,随着平板电脑体验越来越强,很多人都开始尝试用平板办公。毕竟,大部分平板电脑的机身更加轻薄小巧,加之价格优惠,如果平板能支持一定的日常办公任务,岂不是比天天背着笔记本电脑要爽得多?
理论上,这个是完全可以的。但是,现实是很骨感的。能真正在性能、功能上满足日常办公的平板并不多,能满足基本生态需求的更少。少,不等于没有。近日,华为MatePad Pro 5G开启预售,通过一段时间的体验,我发现,在华为MatePad Pro 5G上办公,不失为一个更轻薄便携的舒适之选。
全场景办公新体验·华为MatePad Pro 5G × WPS
首先,华为MatePad Pro 5G搭载了华为云电脑应用,你可以直接在平板电脑上进行 PC 级别的桌面办公体验,无论是文档编辑、图像处理、视频剪辑、云端编程等复杂操作,均可通过华为MatePad Pro 5G的云电脑轻松完成。
云电脑更多满足的是重度办公使用场景,而一般来说,办公室的 OL 们主要的办公场景还是 Word、Excel 和 PPT,附加的场景比如改改图这些。针对OL们的这些日常办公需求,华为MatePad Pro 5G预装了 WPS。在近日的更新中,针对平板类设备,WPS 12.5 版本又新增了画笔自由裁剪、智能人像抠图及墨迹批注三大全新的功能。用平板办公,体验将会进一步优化升级。
这篇文章就是通过华为MatePad Pro 5G 在 WPS 上写的,首先是常规的 Word 部分,由于华为MatePad Pro 5G配备了小尺寸的键盘,所以初次使用还是需要熟悉一下键位排列。整体的输入体验会比台式机自带的键盘差一些,但熟悉之后正常使用没有问题。如果有需要的话,你还可以自配一套键盘鼠标,毕竟日常携带商务轻薄本上班的我也是需要另外配键盘和鼠标进行输入的。
除了键盘外,华为MatePad Pro 5G 还配备了一根HUAWEI M-Pencil,可以配合进行输入,在单纯的码字过程中,有点类似于鼠标的存在。
整体来看,在常规码字部分,华为MatePad Pro 5G 结合 WPS 提供的还是很常规的体验。以平板的性能来看,码字、插图都不会出现卡顿情况。算是整体达到了及格线,使用上没啥问题,也没有什么特别突出的地方。
如果你对 Word 的需求不仅仅只是写稿,还涉及到稿件修改的话,华为MatePad Pro 5G能提供的体验就更多元化了。首先是改稿,常规的 Word 改稿需要用到审阅功能,加上文字的注释。这是键盘和鼠标操作下给的最优秀解决方案,而华为MatePad Pro 5G在键盘之外加入了HUAWEI M-Pencil ,这支笔的加入,给了 WPS 延伸更多功能的空间,比如华为MatePad Pro 5G搭载的WPS 就有专门的画笔板块。
画笔板块有自己的一些功能,区分智能画笔和普通画笔,普通画笔功能支持画笔涂鸦等基础操作。而智能画笔功能整体则更加丰富,提供了智能高亮、智能下划线等更多不同的功能。
新版本WPS加入了墨迹批注的功能,可以直接通过HUAWEI M-Pencil 手写输入批注内容,不需要再去频繁敲键盘,手写笔存在感更强,修改稿件也能更随心标注。除了文案可以加入批注外,还可以专门对图片加入批注,生动形象。
由于延时摄影拍摄题材众多,拍摄方法又区别于其他题材,通常都要花费比较长的时间,在拍摄过程中有说用手动模式的的,也有说用光圈优先的,在拍摄时用大光圈还是小光圈,快一点的快门速度还是慢一点的快门速度,网络上的各种说法有时会让拍摄者对延时拍摄时参数的设置不知所措,今天结合我们自己的实拍,来说说延时拍摄参数设置的一点看法。
拍摄延时大部分场合是使用M档手动模式拍摄的。因为使用M档手动模式拍摄能够由拍摄者自己来精准的控制曝光,这样可以保证所拍的前后画面明暗色调尽可能的保持一致。
但是M档手动模式的缺点是不适合拍摄前后变化太大的场景,比较典型的就是日转夜的拍摄,因为随着时间的推移,光线会越来越暗,使用M档手动模式把参数固定后,随着光线的减弱,很快就会让画面漆黑一片。
而使用光圈优先,只需确定一个光圈值,相机就会根据场景光线变化来自动调整快门速度。这样可保证画面有正常的曝光。
我们知道平时在拍摄视频时1秒钟的视频是由24-25张照片所组成,而拍摄延时往往都是1秒钟、几秒钟甚至更长的时间才会拍摄一张照片。要合成1秒钟的视频,拍摄延时就需要花更多的时间拍摄足够的照片。这也是延时摄影无法留住快速运动物体影像的原因。
使用高速快门可以把经过镜头的运动物体拍摄下来,但是拍摄第二张时运动物体早已离开画面,这样就形成不了连贯动作,但是使用过快的快门速度拍摄运动缓慢或者肉眼看不出运动变化的物体,往往拍摄多张后,拍摄主体仍然还是一样的状态看不出变化。这样合成的视频与观看静态的照片一样,缺乏动感。也就失去拍摄延时的意义。
而使用较慢的快门速度拍摄,运动物体往往会被拍成模糊的拖影,越慢这种效果越明显,而这种运动拖影恰恰是延时摄影里所需要的,以此来展现物体的运动轨迹。
综上所叙拍摄延时,快门速度调整的原则要遵循宜慢不宜快。由于拍摄视频标准快门速度设置是在1/60秒,这个速度拍摄出来的画面最接近人眼所观察到的效果。所以延时摄影的快门速度要设置不要高于1/60秒。
延时摄影对光圈的要求是不能使用太大的光圈,因为太大的光圈会导致相机进光量的增加,不利于快门速度的降低。
再一个因为拍摄延时很多都是大场景,拍摄大场景要求所拍画面清晰范围越大越好,所以需要选择具有大景深的小光圈来拍摄。
但是也不能使用太小的光圈,因为太小的光圈会严重影响画质。延时摄影的光圈设置一般维持在F8-F16之间就差不多了。
有很多教程说拍摄延时最好是将ISO固定下来,不过经过实拍,认为在可控的范围内,将ISO设为自动效果会更好一点。
具体做法是,预估拍摄时环境光比的变化情况,设定不怎么影响画质的一个ISO最低值与最高值,然后让相机根据环境变化在可控的范围内自动调整ISO来保证画面的正常曝光。不过ISO的设置也还是要遵循在条件允许的情况下越低越好,可以最大程度的保证画质。
最后再来说说白平衡色温的设置,由于拍摄延时都是需要长时间的拍摄,所以白平衡色温不能选择自动,避免所拍画面因为光线强弱明暗的原因出现前后不一致的色调。白平衡色温可以选择相机设定的固定色温也可以手动设置色温。
关于延时摄影的相机参数设置就讲到这里,如果对此有不了解的欢迎大家在评论区留言,共同讨论。
安卓获取imei 求教一下安卓的大佬。如何实现在打开apk时获取imei并赋值给textview。我这里打开apk就崩溃。是因为要给权限么?如果是的话怎么在启动apk时获取读取imei权限呢
亿晟基于Linux系统推出了一款人脸识别闸机门禁主板模组,该门禁主板模组被命名为Yface-19,可以实现人脸识别通行管理、测温、考勤等功能为一体。可搭配通道闸机、楼栋门禁等设备,主要应用于社区、工业园、写字楼、景区等场景中,搭配上软件硬件能高效不间断工作7*24小时。
模组参数
Yface-19采用了RV1109 双核 ARM Cortex-A7 处理器,1.2Tops NPU,搭载了Linux操作系统,支持H.264/H.265。
产品特点
1、Fast Boot 双系统架构 SDK开源开放
2、NPU MAC利用率提升20%以上,DDR带宽减少30%,网络模型架构支持更丰富,配套AI算法
3、2D+3D降噪,3F HDR>120dB,黑光全彩
4、1个HOST USB,1个OTG-USB,2个232串口、1个TTL串口,1个调试串口,GPIO/IIC接口,MIPI点屏接口,可以满足市场上各种外设的要求
5、完美兼容Yface系列版型,配套软件系统平台,系统平台可定制
6、Linux应用开放定制,开发工具齐全
配套软件
Eface人脸识别通行软件,专为该方案量身定制的一款软件,主要的核心功能有口罩识别、快捷人脸录入、体温检测、访客预约、闸机门禁管理、人脸考勤管理、陌生访客识别、问卷调查等。支持身份证、IC卡、人脸识别等方式通行,通行人员记录有迹可查。
人脸算法
基于视频流的动态人脸检测、跟踪,1:N识别算法,识别率>99.7%;动态双摄防伪,彻底解决照片、视频在各种载体上的欺骗;支持2万张人脸照片库、100W条识别记录;优化了大面积遮挡对人脸定位、识别、跟踪、活体等多个功能的影响,支持佩戴口罩仍可精准识别。
红外热成像体温筛查
支持无接触式红外热成像温度筛查,最佳体温检测距离0.5米,最远1米,测温精度≤±0.5℃,测温范围10℃~42℃,支持体温异常自动报警,秒级检测速度,考勤测温数据可实时导出。
方案配置表
com.mysql.jdbc.CommunicationsException: The last packet successfully received from the server was14400 seconds ago.The last packet sent successfully to the server was 14400seconds ago, which is longer than the server configured value of 'wait_timeout'. You should consider either expiring and/or testing connection validity before use in your application, increasing the server configured values for client timeouts, or using the Connector/J connection property 'autoReconnect=true' to avoid this problem. 今天遇到一个问题,就是在访问系统的时候爆出上面的错误,昨天还好好的,翻译上面的错误信息得知是因为连接超时导致,但是数据库端口正常开放,网络也通畅怎么会出现连接超时呢?通过百度才发现这个问题所在,借此记录一下以便自己后期遇到参考
首先说一下错误原因:mysql有两个变量(wait_time与interactive_timeout)wait_time(mysql服务关闭非交互式连接等待的时间秒数)interactive_timeout(服务器关闭交互式连接等待的时间秒数)MySQL连接时,服务器默认的“wait_timeout”是8小时,也就是说一个connection空闲超过8个小时,Mysql将自动断开该connection。connections如果空闲超过8小时,Mysql将其断开,而DBCP连接池并不知道该connection已经失效,如果这时有Client请求connection,DBCP将该失效的Connection提供给Client,将会造成异常。
什么是 交互式连接与非交互式连接呢?、
今天小店给大家推荐十二款超好看的开源字体
什么是开源字体? 开源字体亦用于商业用途
这类字体为负担不起/不愿购买商业字体的使用者提供免费的选择
在给国外客户或者
国内客户做的设计需求时候并且对象是面向
国外用户的情况下
开源英文字体
就十分有必要性
国外商业英文字体授权费不贵,中文贵(因为需要设计的字的数量不是一个级别,英文就26个字母和一些标点符号中文字体你懂的,所以字体设计成本天壤之别)
具体可以到Myfonts.com看流行和推荐的英文字体换算一下汇率就可以知道,有条件的可以购买
-般是时间是1年的授权费用
但其实如果设计产品或者网站是面向国外对象用户的时候盲目使用商业英文字体,就有可能引起字体版权纠纷
1.Krona One
2.AIfphabet
3.Baloo2
4.Cinzel
5.D-din
6.DM_Serif
7.ItaIiana
8.Rajdhani
9.Pacifico
10.Philosopher
11.Staatliches
12.Quantico
给懒人准备的
考虑到移动端浏览和篇幅关系,只能展示为1列等排列形式,当然,也给懒人们准备了字体整理术psd示例如下:
我们用字体等时候选图也是十分的重要,因为一般情况下我们需要字体进行图文搭配,字体使用场景敏锐感和预判需要我们去多看,多尝试。
最后送给大家一句话:
字体是设计之魂
下载地址
百度网盘下载
链接: https://pan.baidu.com/s/1OeKsLHBMJrTEllSWi71AEg 密码: 24kt
复制这段内容后打开百度网盘手机App,操作更方便哦
因为微信公共号,暂时不能点击外链,所以请复制到浏览器上面打开!
如果链接打不开,先检查链接是否复制完整;若链接无误建议换个浏览器打开
如果觉得文章有用,下面有一排“分享”“赞”“在看”的三连操作帮忙安排上吧,听说三连击的人,工资都涨到暴击了!
不规则图形的面积计算是组合图形里面的知识点,我们通常使用填补法或切割法(分割法),把不规则图形转化成我们学过的基本平面图形来计算。但是,有些不规则图形无法填补或切割,例如树叶的面积,就只能用估算的方法去解决了。 下面主要介绍这种面积 估算的方法。 面积估算有两种方法:1.数格子。2.画成近似基本图形。 数格子的方法适合用在格子不多的题目,如下图第1题。先数满格的有6格,再数不满格的有18格,一般把不满格的当半格来计算,18÷2=9,相当于拼成9格个满格,因此计算满格6+9=15格,就是15平方厘米。 画成近似基本图形来计算适合用在格数很多,图形很复杂的题目,如下图第3题。先用铅笔画出你觉得最接近的平面图形,标出计算该面积所需的数据。然后套公式计算。 上图第5-6应用题属于基本题型,必须过关。特别是知道梯形面积,求上、下底或高的任一个,用方程比较合适。第7题是变式题型,通过三角形的高作为公共桥梁,求出三角形ABC的面积。
上图填空第3小题比较抽象,需要有动手拼角的经验才便于理解。建议学会画图帮助解题。
点击上方蓝字关注我们
PCB是分层的,不同层有不同的作用,绘制PCB之前要了解分层。从侧面来看,分层的PCB有点像:
层的简介与显示
关于分层,有2个概念容易混淆:
1,2层板,4层板,6层板的层,指的是有几个信号层。两层板也叫双面板。
2,画图时AD软件下方的标签页,每个都表示一层
分层有很多,但是第一块电路板,只关注Top Layer (顶部信号层),Bottom Layer (底部信号层),Top overlay(顶部丝印层)Bottom overlay(底部丝印层),keep-out layer禁止布线层,multi-Layer (多层)Meachanical x某个机械层。其它有用的层,后续还会介绍。
Top Layer 简称红层,Bottom Layer 简称蓝层。
整理表格如下,方便理解和记忆。
英文解释Top顶Bottom底。放在底层的文字通常需要变为镜像(映射)。layer信号层,用于走线,代表有铜皮,铜能导电。overlay丝印,白色的字 ,没有电气属性keep-out layer禁止布线层,一般用作板子边界multi-Layer 多层,一般是通孔Meachanical x某个机械层,可能有标记、3D的作用,在一些情况下机械层1用作板框或螺丝孔。 为了避免多余的层影响PCB的观察与绘制,先关闭多余的层。按下快捷键“L”,如图,关闭多余的层。可以看到AD软件下方的标签页会“清爽”许多。
从图中也可以看出,第一块电路板由2个信号层,所以是个双层板。
分层以后还会详细讲解,此处这几个物体的分层有印象即可:
走线、铺铜都在信号层。
板子上的位号、版本号,日期,这些用油漆印刷的,在丝印层。
红层和蓝层之间是不直接连通的,如果需要连通红层和蓝层的线,要用到过孔。所以过孔既存在于红层又存在于蓝层,即过孔位于多层。
安装孔同样位于多层。
板框,或者说板子的边界位于机械层或禁止布线层。
《这就是中国》第63集:中国心胜 点个在看你最好看
前言 Sigmoid 函数(Logistic 函数)是神经网络中非常常用的激活函数,我们今天来深入了解一下 Sigmoid 函数。
函数形式 函数图像 代码实现 代码运行:Colab
import matplotlib.pyplot as plt import numpy as np import math x = np.linspace(-10, 10, 100) z = 1 / (1 + np.exp(-x)) plt.title("Sigmoid") plt.plot(x, z) plt.xlabel("x") plt.ylabel("Sigmoid(X)") plt.savefig("sigmoid.png") plt.show() plt.close() 性质及问题 函数值 S(x) 的值域为 (0, 1),常用于二分类问题,函数平滑,易于求导。但是作为激活函数,其计算量大,反向传播求误差梯度时,求导有除法,容易出现梯度消失的情况,在输入接近于正无穷或负无穷时,梯度趋近于 0,发生梯度弥散(随着网络层数的增加,使用反向传播算法计算梯度时,从输出层到最初几层,梯度消失的非常明显,造成整体损失函数对最初几层的权重的导数非常小,这样在使用梯度下降算法时,最初几层权重变化非常慢,甚至无法学习到有用的特征)。因为 Sigmoid 函数值大于 0,因此权重更新只能朝着一个方向更新,可能影响收敛速度。
总结 Sigmoid 函数是神经网络中一种非常常用的激活函数,被广泛应用于逻辑回归,在统计学,机器学习领域有其广泛应用。
原文首发自:RAIS
信号分类汇总:
确定信号和随机信号
连续信号和离散信号
周期信号和非周期信号
能量信号和功率信号
确定信号:可以用时间函数表示的信号。
随机信号:信号不能用确切的函数描述,只能知道其统计特性。
例子:
确定信号:
随机信号:
连续时间信号:连续时间范围内都有定义的信号,简称连续信号;若函数值也连续,则称为模拟信号。
离散时间信号:仅在一些离散的瞬间才有定义的信号,简称离散信号;当取值为规定数值时,则称为数字信号。
例子:
连续信号:值域连续。
连续信号:值域不连续。
周期信号:是定义在R上的,每隔一定时间T,按相同规律重复变化的信号。
非周期信号:不具有周期性的信号称为非周期信号。
两个连续信号周期性判断的方法:
若两个信号的周期之比为有理数,则为周期信号。若为无理数,则是非周期信号。
两个离散信号的周期性的判断方法:
如果 2 π / β 2\pi/\beta 2π/β是整数,正弦序列有周期,这个整数就是周期。
如果 2 π / β 2\pi/\beta 2π/β是有理数,正弦序列仍具有周期性,最小周期为使 2 π / β 2\pi/\beta 2π/β为整数的最小正整数。
如果 2 π / β 2\pi/\beta 2π/β是无理数,正弦序列为 非周期序列。
能量信号:信号的能量为有限值,功率为0;
功率信号:信号的功率为有限值,能量为正无穷;
结论:
(1)时限信号(仅在有限时间区间不为零)为能量信号;
(2)周期信号属于功率信号;
(3)非周期信号可能是能量信号,也可能是功率信号;
(4)有些信号既不是能量信号也不是功率信号;
老铁们大家好,我是你们的好朋友少白,最近找我学习数车编程的老铁们有点多,今天呢我就给大家来分享一组案例,希望能给大家带来一些帮助,
G71,G70 编程指令是数控车最常用,也是最方便的指令,一般零件的轮廓都可以用G71编程开粗程序,G70作为精加工程序,所以这两个指令也可以理解为兄弟指令。下面就举个简单的例子来解释下这两个指令的功能和用法
如上图是一个直径大于52mm的圆柱棒,要车削得到上图的零件。对于这样的零件手工编程用G71还是比较方便的。程序如下:
O00001:
G0 X99 Z99;
M3 S800 T0101;
G0 X60 Z2;
G71 U1.5 R0.5;
G71 P1 Q2 U0.5 W0.1 F150;
N1 G0 X0;
G1 Z0;
X18
X26 Z-8;
Z-18;
X38;
X42 Z-20;
Z-30;
X48;
G03 X53 Z-32 R2;
G1 Z-35;
N2 U1;
G0 X99 Z99 M05;
M0;
M03 S1400 T0101;
M08;
G0 X60 Z2;
G70 P1 Q2 F100;
G0 X99 Z99 M05;
M09
M30;
程序的详细解释如下:
G0 X99 Z99;——刀具的安全位置
记录一下出现的不可思议的bug
nvcc fatal : No input files specified; use option --help for more information
首先看看是否是大小写问题
是不是神bug
Java中CompareTo()方法:
1.对于单个字符,返还两个字符的asc码的差值。
如果参数字符串等于此字符串,则返回值 0; 如果此字符串小于字符串参数,则返回一个小于 0 的值; 如果此字符串大于字符串参数,则返回一个大于 0 的值。 String str1="a"; String str2="b"; System.out.println(str1.compareTo(str2)); ________________________________________ 结果:-1。 2.参与比较的两个字符串如果首字符相同,则比较下一个字符,直到有不同的为止,返回该不同的字符的asc码差值 。
String str1="aa"; String str2="ak"; System.out.println(str1.compareTo(str2)); _________________________________________ 结果:-10 3.两字符串长度不一,参与比较的两个字符串如果首字符相同,则比较下一个字符,直到有不同的为止,返回该不同的字符的asc码差值 。
String str5="ag"; String str6="dvwed"; System.out.println(str5.compareTo(str6)); ————————————————————————————————————————— 结果:-3 注意:int类型不可直接使用compareTo方法,需要使用String.ValueOf();方法转化为字符串之后进行比较。
-----------------------------------------------------2021.1.7/sun
随着发布会的临近,OPPO Reno 3系列的硬件参数被彻底曝光。虽然普通版和Pro版都支持双模5G网络,但是为了不同的定位,这2款手机在主要硬件配置上区别还是蛮大的。根据官方和工信部的消息,亓纪将两款手机的的硬件参数做了一个对比,通过一张图片分享给大家。
屏幕方面:标准版采用6.4英寸水滴屏,屏幕刷新率为60Hz。Pro版采用6.5英寸挖孔曲面屏,刷新率升级到90Hz,给用户带来更流畅的视觉体验。得益于曲面屏的优势,Pro版的三围更短更窄更轻薄,机身三围是159.4*72.4*7.7毫米,只有172克重。在目前已知的双模5G手机中,OPPO Reno 3系列应该是最轻薄的两款手机。
性能方面:Pro版采用了主频为2.4GHz的骁龙765G处理器,安兔兔跑分30万+,标准版采用联发科天玑1000L处理器,安兔兔跑分37W+。跑分标准版吊打Pro版,看来厂商对联发科处理器依旧保持慎重的态度。两款手机均支持双模5G网络,令人意外的是:标准版支持N41,N78和N79三个5G频段,Pro版仅支持N41和N78两个5G频段。
拍照方面:两款手机前置均为3200万像素摄像头,差距主要在后置四摄上:标准版采用6400万+800万+200万+200万四摄组合,主摄大概率为三星GW1,支持超级视频防抖Pro。Pro版采用4800万+1300万+800万+200万四摄组合,主摄应该是索尼IMX586,支持OIS光学防抖和超级视频防抖Pro。难道小米不仅全球首发索尼IMX686,还有一定的独占期?
其他方面:两款手机均内置4025毫安时电池,支持30W快充方案。标准版拥有月光白、月夜黑、蓝色星夜和日出印象这四种配色,支持石墨散热系统。Pro版拥有雾月白、月夜黑,日出印象和蓝色星夜这四款配色,支持更高级的立体液冷散热系统。
亓言纪语:
由于种种原因,OPPO Reno 3变成了一款定位中端的双模5G手机。这也是为什么这款新机主打轻薄机身,放弃了很多黑科技的主要原因。想要旗舰双模5G手机的小伙伴,可以期待一下2020年的OPPO Find X2。对于OPPO Reno 3系列大家觉得怎么样?
我是亓纪,以上就是亓纪的想法。码字原创不易,喜欢的记得关注亓纪的想法,也可以点赞,转发和评论。更多有趣的数码资讯等你来聊。
2021艺术统考结束后,统考合格线及成绩查询就成了大家关注的重点。之前成绩查询公布时间已经发过,今天,一起来预测一下2021的艺术类专业统考各模块合格线。。
首先,先看一下近3年安徽合格线情况
2018年安徽各模块统考合格线
模块一播音主持:统考合格线为117分【满分300】;
模块二广播电视编导:统考合格线为174分【满分300】;
模块三表演(体舞健美):统考合格线为210分【满分300】;
模块四舞蹈类:统考合格线为113分【满分200】;
模块五影视表演类:统考合格线为178分【满分300】;
模块六书法类:统考合格线为203分【满分300】;
模块七美术与设计学类:统考合格线为190分【满分375】;
模块八音乐:统考合格线为110分【满分210】。
2019年安徽各模块统考合格线
模块一播音主持:统考合格线为112分【满分300】;
模块二广播电视编导:统考合格线为157分【满分300】;
模块三表演(体舞健美):统考合格线为225分【满分300】;
模块四舞蹈类:统考合格线为105分【满分200】;
模块五影视表演类:统考合格线为182分【满分300】:
模块六书法类:统考合格线为211分【满分300】;
模块七美术与设计学类:统考合格线为178分【满分375】;
模块八音乐:统考合格线为111分【满分210】。
2020年安徽各模块统考合格线
模块一播音主持:统考合格线为120分【满分300】;
模块二广播电视编导:统考合格线为163分【满分300】;
模块三表演(体舞健美):统考合格线为219分【满分300】;
模块四舞蹈类:统考合格线为100分【满分200】;
模块五影视表演类:统考合格线为181分【满分300】:
模块六书法类:统考合格线为210分【满分300】;
模块七美术与设计学类:统考合格线为190分【满分375】;
模块八音乐:统考合格线为115分【满分210】。
2021年安徽统考各模块合格线预测
模块一:统考合格线为110分;
模块二:统考合格线为158分;
模块三:统考合格线为226分;
模块四:统考合格线为105分;
模块五:统考合格线为180分
模块六:统考合格线为213分;
模块七:统考合格线为190分。
模块八:统考合格线为113分。
以上仅供参考,以考试院发布为准。
- END - (部分内容来源网络 侵权联系删除)
●2021年安徽艺术专业统考各模块成绩查询时间
●安徽艺术类专业统考各模块本科批次2016-2020录取最低数据汇总(院校报名数计划数最低分等)
●2021对安徽校考招生的院校招生公告招生简章汇总(有更新)
●2021年各院校艺术类招生简章+最新招生方案汇总!已更新119所院校!速看!
●2021年安徽省艺术类专业校考院校报考信息招生简章汇总!速看!
●又有新增!!2021年已明确取消校考的院校及其专业汇总!(附官方原文)
●2021年继续组织校考的院校和专业名单汇总,附考试内容和分值!持续更新~
南京艺术学院关于2020年本科艺术类专业招生考试的公告
●上海戏剧学院2021年本科招生专业考试公告
●报考2021年安徽普通高校招生艺术专业统一考试模块八注意事项!
●南京艺术学院2020年本科招生各专业录取最低分及录取人数统计(附招生录取办法)
●中国传媒大学2021年艺术类本科招生简章!中传校考时间确定!
●重大调整:南京传媒学院2021年艺术类校考专业与各省级艺术类统考类别
●中央戏剧学院2021年本科招生专业考试公告 ●【最全汇总】有250多所院校承认艺术统考成绩!
●重磅!2021年高考官方模拟考时间确定! 连考3天, 统一改卷!
●安徽省2021年普通高等学校招生艺术专业考试简章
●安徽省2020年12月教育招生考试月历
●【模块七名师范画】2021年安徽艺术类统考模块七美术试题真题
●安徽2021年编导统考真题新鲜出炉!