python整蛊游戏代码文件打包 打包成exe文件可以让python代码在没有python环境的条件下,依然能够运行,实在是码农们写追女朋友表白、情人节浪漫的必需品!
使用豆瓣镜像源下载: pyinstaller
有需要了解如何使用国内镜像的小伙伴可以滴滴到此:
国内镜像源详细使用教程!
https://blog.csdn.net/xtreallydance/article/details/112596963
在python终端或者cmd中输入此命令: pip install pyinstaller -i https://pypi.doubanio.com/simple/ --trusted-host pypi.doubanio.com pip 小夜斗是在cmd终端上下载的,成功的结果如图所示:
小夜斗学会的一个python整蛊游戏,就拿这个代码来实现打包,看能否直接使用,这个文件执行后会出现很多弹框,内容可以根据自己修改,代码执行结果如下所示: 开始打包: 首先cmd或者pycharm终端路径切换到你代码所在的文件夹目录 这是小夜斗代码文件放置的位置,接下来我们使用cmd终端切换到此位置:
L:\python package\python小项目\python整蛊小游 最终输入打包命令如下: Pyinstaller -F 随机弹框.py
打包后文件夹新增了一个dist文件夹和一些配置文件, 如图所示:
然后我们进入dist文件夹,会发现有一个exe可执行文件!
最后让我们执行它可以发现,真的可以成功运行! Pyinstaller -F 随机弹框.py # 执行exe文件时会出现cmd弹框
Pyinstaller -F -w 随机弹框.py # 执行exe文件时没有出现cmd弹框
Pyinstaller -F -w -i abc.ico 随机弹框.py # 没有弹框,exe文件的图标是abc.ico,需要你在该打包代码文件夹放置相应的图标,否则会报错!
好啦今天的分享就到这里啦,然后小夜斗就要滚去学习啦,see you!
下面是小夜斗的公众号, 喜欢的小伙伴可以关注一下哦!
在这个星球上,你很重要,请珍惜你的珍贵! ~~~夜斗小神社
路由协议通常分为内部网关协议(IGP:Interior Gateway Protocol)和外部网关协议(EGP:Exterior Gateway Protocol)两大类。一般来讲,IGP用于自治系统AS(Autonomous System)内部,EGP用于AS之间。当前使用版本是BGP-4(RFC4271)。BGP-4作为事实上的互联网外部路由协议标准,已被广泛应用于ISP(Internet Service Provider)之间。
BGP是一种动态路由协议,但它实际上不产生路由、不发现路由、不计算路由,其主要功能是完成最佳路由的选择并在BGP邻居之间进行最佳路由的传递。BGP选择了TCP作为传输协议,端口号为179
BGP支持无类域间路由CIDR(Classless Inter-Domain Routing),并且采用了触发增量更新方式,这大大减少了BGP在传播路由信息时所占用的带宽,特别适用于在互联网上传播大量的路由信息
BGP提供了丰富的路由属性(Attribute),通过对这些属性的操作和控制,BGP能够非常容易的实现丰富而灵活的路由策略。BGP还具有良好的扩展性,支持 Multicast、VPN、IPv6 等多种特性。
BGP邻居关系分为IBGP(Internal BGP)和 EBGP(External BGP)两种:当两台路由器位于同一AS时(AS编号相同),它们的邻居关系为IBGP 邻居关系;当两台BGP路由器位于不同的AS时(AS编号不同),它们的邻居关系为EBGP邻居关系。BGP没有自动建立邻居关系的能力,邻居关系必须通过手动配置来建立。
R1与R2属于同一个运营商网络 ,AS编号为100,R1与R2之间的邻居关系为IBGP邻居关系。R3属于另一个运营商网络,AS编号为200,R3与R2之间的邻居关系为EBGP邻居关系。路由器分别采用物理接口和Loopback接口来进行IBGP和EBGP邻居关系的建立
配置IBGP邻居。
在R1、R2上使用直连物理接口来配置IBGP邻居关系。为了实现链路冗余,R1与R2之间部署了两条链路,当其中一条链路出现故障,另一条物理链路可以提供连通性。
接口配置不赘述。
在R2上使用 display bgp peer 命令查看BGP邻居关系
可以看,R2现在有两个BGP邻居分别使用了R1的GE0/0/0和GE0/0/1接口地址来表示,AS编号为100,与R2自己的AS编号相同,因此R2与R1为IBGP邻居,当前邻居状态为 Established,表示邻居关系已经完全建立。
在R1上将Loopback 0接口地址通告到BGP进程中。
[R1]bgp 100
[R1-bgp]network 10.0.1.1 32
查看R2的BGP路由表。
可以看到R2的BGP路由表中包含了两条去往10.0.1.1/32的路由,下一跳分别为10.0.12.1,10.0.21.1,这是因为R1与R2之间建立了两个IBGP邻居关系,BGP路由实现了冗余。
BGP是运行在TCP之上的,如果能让R1的 Loopback 0 接口与R2的 Loopback 0 接口建立起TCP会话,并使用 Loopback 0 接口的IP地址来建立BGP邻居关系,则可以让R1和R2只维护一个BGP邻居关系即可。当R1与R2之间的一条链路出现故障时,TCP可以通告另外一条物理链路继续维持会话关系,这种方法在网络的稳定性方面和网络资源的节省上比直接使用物理接口来建立BGP邻居关系更具优势。
为了能使R1的 Loopback 0 接口与R2的 Loopback 0 接口建立起TCP会话,需要在R1和R2上配置能到达对方 Loopback 0 接口的静态路由。
[R1]ip route-static 10.0.2.2 32 10.0.12.2
[R1]ip route-static 10.0.2.2 32 10.
这是一篇关于C语言根据姓名拼音首字母排序的文章。
我想到写这篇文章,主要是因为我在学校期末课设做通讯录管理,我想做一个姓名拼音首字母排序,但是在网上找了好多都是些奇奇怪怪的方法,有用glib库里的,但是现在版本的Dev-C++并没有这个库。还有用一些神奇的函数取文字拼音首字母再排序的,这个方法我是没看懂也不确定是否是C语言的(因为那篇文章没有标明所用语言,里面还用了好多我没见过的指令)
后来,我在重新翻教材看案例时看到了strcmp,虽然教材上的案例是对英文单词进行排序,但是我也发现,当我们储存字符串时,储存名字时其实是把拼音字母存进去的,那我是否也可以用strcmp实现汉字的排序呢?
这是教材上的排序函数部分:
void sort(char *strings[],int n) { char *temp; int i,j; for(i=0;i<n-i;i++) { for(j=i+1;j<n;j++) { if(strcmp(strings[i],strings[j])>0) { temp=strings[i]; strings[i]=strings[j]; strings[j]=temp; } } } } 是不是发现这其实就是冒泡排序,没错,这就是用冒泡排序来排序字符,用strcmp来实现字符的先后顺序比较。然后再以跳板temp来实现两个字符串的交换。
但是我在运用到我的通讯录管理系统的时候却提示"error:assignment to expression with array type."这是赋值失败的提示,可能是类型不同或者其他什么原因导致的。在我多次尝试修改类型无果后,我决定用strcpy来交换字符串内容。
以下是优化后的教材代码:
void sort(char *strings[],int n) { char *temp; int i,j; for(i=0;i<n-i;i++) { for(j=i+1;j<n;j++) { if(strcmp(strings[i],strings[j])>0) { strcpy(temp,strings[i]); strcpy(strings[i],strings[j]); strcpy(strings[j],temp); } } } } 这样就解决了赋值失败的问题。
其实都是旧方法,都是学过的知识,但是重点就在于如何运用。
接下来奉上我的通讯录管理系统的完整代码:
#include<stdio.h> #include<string.h> #include<stdlib.h> typedef struct//定义结构体 { char name[20]; char phone[50]; char address[20]; int post; char mail[50]; }data; int n=0;//定义储存数量 data a[1000];//定义结构体数组 FILE*fp;//定义文件指针 void load(data*p)//读取文件函数 { int i; fp=fopen("
环境:linux服务器端已经安装好anaconda,配置好jupyter notebook等 问题描述 服务器命令行输入 jupyter notebook, 可正常启动,但是在本地浏览器输入 http://localhost:8888/ 无法打开页面
解决途径 1.生成jupyter notebook配置文件
jupyter notebook --generate-config 2.配置密码,打开ipython,输入以下命令:
from notebook.auth import passwd passwd() 输入自己想要的密码,而后会生成一个密码序列【后续没有用到】
3. 在服务器运行jupyter notebook
jupyter notebook --no-browser --port=8888 --ip=0.0.0.0 no-browser是指不在服务器上使用浏览器;port可以设置成任何空闲的端口号
4. 设置本地和服务器端口映射
在本地计算机上(win10系统), 将服务器端口映射到本地。使用cmd打开控制台,输入:
ssh username@server_ip -L127.0.0.1:8000:127.0.0.1:8888 username是服务器开设的用户名,server_ip是用户名密码,将本地的8000端口映射到服务器的8888端口【第三步中设置的端口号】,远程服务器登录需要密码的,在这一步以后会显示需要输入密码。
5. 在本地浏览器打开服务器上的Jupyter Notebook
在本地浏览器上输入http://127.0.0.1:8000,即第四步中映射的本地端口号, 输入第三步中设置的密码【非生成的密码序列】,顺利打开服务器上的Jupyter notebook。
参考博客:使用本地浏览器打开远程服务器上的Jupyter Notebook
作 者 信 息
刘莎莎1,朱 庆1,汤圣君2,丁雨淋1
(1.西南交通大学 地球科学与环境工程学院,四川 成都 611756;2.深圳大学 建筑与城市规划学院智慧城市研究院,广东 深圳 518061)
“ 【摘要】施工阶段是建筑生命周期的重要阶段,施工进度如果存在拖延会影响整个建筑工程项目的完成。传统的施工进度监测主要依靠人工方式进行实地检查记录,而项目施工现场的数据丰富,信息量大,只依靠人手工采集耗时耗力。因此提出一种室内三维点云与BIM集成的建筑施工进度监测方法。该方法首先通过BIM数据解析将BIM模型转化为三角网表达;其次手动选取BIM模型与三维点云间匹配点,采用最小二乘优化方法计算三维变换矩阵,实现两者的精确配准与融合;根据BIM组件语义进行门窗部件筛选并提取部件轮廓信息并填充均匀点云,最后采用三维点云变化检测方法对门窗部件的施工进度进行核查。以Revit数据与GeoSLAM系统采集的三维点云作为数据来源,对该方法进行了实验验证,实验结果显示该方法可实现建筑施工进度半自动核查。
【关键词】BIM;三维点云;数据配准;施工进度监测
【中图分类号】TU198+.6 【文献标识码】A 【文章编号】1672-1586(2019)05-0107-06
” 引文格式:刘莎莎,朱 庆,汤圣君,等. 室内三维点云与BIM集成的建筑施工进度监测方法[J].地理信息世界,2019,26(5):107-112.
正文
0 引 言
随着城市化进程的不断加快,建筑业得到了快速发展,为了满足社会的需求,建筑工程规模不断扩大,建筑结构形式也日益多样化,这使得依赖于传统手工方式的建筑施工进度监测方法越来越不适用,亟需寻求一种新的施工进度监测方法。
BIM技术因其信息完备性、信息关联性、信息一致性、可视化、协调性等特点,使得参与各方能实时了解项目现状,并且及时发现和解决问题,真正实现协同工作及信息共享,是实现建筑工程施工进度自动化监测的强大技术支撑。然而,建筑施工阶段是一个高度复杂的动态过程,施工现场数据种类繁多,信息量大,信息变化快,BIM模型往往容易脱离现场情况,如何更好地将BIM应用在建筑施工进度监测,就需要借助其他技术手段来进行辅助。如利用三维激光扫描和全景扫描技术获取施工现场的数据,来建立BIM模型和施工现场的纽带。
BIM可以提供精细的三维建筑模型,并与施工进度计划相结合得到建筑物计划进度的BIM模型,而激光扫描方式获取的点云数据可以反映建筑施工现场真实情况即建筑实际施工状态,通过两类数据的匹配分析可以检测出建筑施工过程进度的偏差。
研究一种点云数据与BIM集成的建筑施工进度监测方法不仅便于建筑工程管理者掌握施工情况,也对实现建筑全生命周期管理具有重要的现实意义。本文拟基于点云数据与BIM集成的方法,突破数据转换、关键建筑部件提取等技术难题,实现对建筑物施工过程中门窗等部件的进度监测。首先对本文的研究背景以及国内外研究现状进行了描述;并描述了点云与BIM集成的施工进度监测方法,该方法包括BIM数据解析与转换、三维点云与BIM数据配准、BIM部件参数提取与点云化和三维点云变化检测与施工进度核查四部分内容,基于该方法在BIM模型与三维点云数据的精确配准的基础上,可实现门窗部件施工进度核查;采用Revit模型与三维点云为数据基础,对本文提出的方法进行了实验验证;最后进行总结。
1 国内外研究现状
传统的施工进度监测主要依靠人工方式进行实地检查记录,而项目施工现场的数据丰富,信息量大,只依靠人手工采集耗时耗力。因此,许多研究学者和业界人员从现场数据采集技术下手,试图通过更高效的现场数据采集方法来提高施工进度监测效率。目前,对建筑物施工进度自动化监测的研究按照现场数据采集方式的不同主要分为以下三类:一是利用施工现场影像和视频数据,Saad和Hancher设计了一个多媒体系统Project Navigator,利用动态捕捉影像的方式跟踪项目进度同时记录下项目中经验总结以便分享后来接收的人员,该方法只是通过影像获取进度数据,无法从三维上判断工程施工情况;二是使用无线射频识别(Radio Frequency Identification,RFID)技术获取构件的进度信息,该方法要求构件本身附着有RFID标签,需要在建筑施工环境中进行硬件布设,成本和复杂性高;三是使用3D激光扫描技术来动态采集施工进度数据,Bosche提出基于改进的迭代最近点(Iterative Closest Point,ICP)算法,可以从3D激光扫描数据中有效识别出3D CAD建筑模型构件,用于自动化施工进度跟踪,该方法体现了利用三维点云数据实现建筑施工进度自动化监测的可行性。
随着BIM技术应用逐渐向建筑全生命周期的4个阶段(即规划阶段、设计阶段、施工阶段、运维阶段)发展,BIM在施工阶段的应用也在不断深化。Ali Murant Tanyer,Ghassan Aouad等人基于IFC标准设计开发了4D进度模拟软件,支持用户根据建立的4D BIM模型快速做出施工预算;Wang J等人将BIM和LiDAR技术动态结合,实现了建筑物施工现场数据实时采集和施工质量控制;Qu T等人融合了低空无人机倾斜摄影技术和BIM技术,通过模型比对来动态监控建筑工地进度;Tuttas S等则对比了手持摄影机、无人机摄影和起重臂固定相机3种信息采集方式重建的施工现场三维模型与BIM设计模型,来分析建筑工程施工实际状态与计划状态的差异。然而相比较国外成熟丰富的研究,国内对BIM在施工进度方面的相关研究就相对较少,且理论研究多于应用研究,应用研究也大多为模拟展示施工建造过程。李勇通过对进度复杂影响因素的概率统计分析,构建施工进度复杂因素的预测模型,提出了基于BIM技术的进度预测集成系统。但其注重于通过分析施工进度复杂影响因素,来对实际工程进度进行预测,并不能获得准确、实时的施工进度信息。
综上,针对现有的施工监测方法存在的不足,本文充分考虑BIM和点云数据各自的优势,提出一种室内三维点云与BIM集成的建筑施工进度监测方法,以实现对建筑物门窗等部件施工进度的快速、自动化监测。
2 点云数据与BIM集成的施工进度监测
施工进度监测可通过比较当前施工现场三维场景与施工前的设计模型之间的差异获得,其中当前施工现场三维场景可采用倾斜摄影测量或者激光扫描的方式获取,设计模型为BIM模型。
1)两种数据的配准融合是实现施工进度监测的前提条件。考虑到三维点云数据与BIM模型的几何表达存在显著不同,需要将原始BIM模型数据转换成可以读取顶点坐标信息的数据结构,进而选取BIM模型与三维点云中的同名点,采用最小二乘计算方法获取两种模型间的旋转与平移变换关系,该变换关系可用于BIM模型与三维点云的高精度配准。
2)经过数据配准后,BIM模型与点云数据位于同一坐标体系,可用于施工进度监测。
室内空间中,当前主要考虑门窗部件的施工进度监测:首先对BIM模型中门窗部件的参数与坐标信息进行提取并进行点云填充,将BIM模型门窗点云与实际三维点云进行变化检测,可获取到已构建及未构建门窗部件并进行标记。因此实现点云与BIM集成的施工进度监测包含BIM数据解析与转化、三维点云与BIM数据配准、BIM部件参数提取、三维点云变化监测与进度检查4个步骤。
2.1 BIM数据解析与转化
BIM模型通常采用体结构表示,不包含真实的地理坐标,需要将原始BIM模型数据转换成可以读取顶点坐标信息的数据格式,如三角网或者三维点云,一方面可用于BIM部件参数提取,另一方面可用于三维点云与BIM模型的配准融合。本文中采用典型BIM数据格式Revit格式,该模型包含了丰富的几何信息与语义信息,根据施工检查需要,在BIM数据解析过程中根据进度核查需要仅需保留部件的类型信息以及几何信息。具体包括Revit坐标系解析以及几何信息转换两个步骤。
2.1.1 Revit坐标系解析
Revit模型中存储的是各个对象间的相对位置关系,在涉及到几何和位置关系的二次开发时,多是进行族坐标系和模型坐标系间的坐标。
Revit里包含了4种坐标系:①模型坐标系:也称全局坐标系;②视图坐标系;③族坐标系:当族文件插入到模型中时,其中的几何体会产生本身在模型中的位置使其具有自己的坐标,因此为了得到族在全局坐标系中实际位置,就需要与模型坐标系进行坐标转换;④链接模型坐标系:通过共享坐标系来链接两个模型,需要进行坐标转换来获取链接模型在主体模型中的位置。
2.1.2 几何信息转换
在Revit中,RVT模型中的所有元素都存储在Document对象中,通过遍历Element便可以获取到整个RVT模型的几何信息,GeometryObject是所有几何类的基类,因此根据需求选择其派生类Solid、GeometryInstance来读取几何信息。具体流程如下:
1)根据语义信息筛选RVT模型需要输出的构件类别;
2 ) 获取每个E l e m e n t 所包含的几何图元(GeometryObject)。方法是针对每个构件类别分别构建过滤器,本文中过滤器主要包含墙面、地板、门、窗部件,遍历其所包含的所有Element对象,找到不为空的几何表示,即得到该Element对象的所有几何图元;
作者 @乔广东 本例主要为大家简略展示从原始点云数据到精准三维模型基本的过程。这组点云数据由Trimble TX8型地面三维激光扫描采集,数据采集过程中未获取影像信息,因此点云数据没有真彩色信息,但具备反射强度信息。原始点云视图效果如下:
点云数据导入RhinoPoints软件后,可进行多种显示模式设置,通过设定,能够得到更加适合人机交互的视觉效果,以便于绘图人员进行逆向三维建模操作。
以上为完成部分建筑物模型建立后的效果,逆向三维建模过程其实并不难,在调整好点云显示效果后,通过软件的点云切片工具,分别在顶视图、前视图、右视图中截取建模所需要的截面信息,然后参照截面中的点云数据,基于Rhino的线、面以及建模工具来完成三维模型的建立。以下是三个视图中点云截面的显示模式
通过以上方式切图后,根据所需要的截面,使用Rhino绘图工具,完成建筑物截面或轮廓的绘制,如下图所示:
线元素绘制完成后,通过Rhion的建模工具,基于事先提取的线元素完成大多数模型元素的建立。模型建立完成后,将点云数据恢复全部显示,即可得到模型与点云叠加要效果。
上图为点云灰度模式,简单的理解,可以认为像是黑白照片一样的效果。可以看出模型数据与点云紧密贴合,精细化模型能够较为精准的表达实际场景中该建筑物空间几何形态。模型与点云数据的紧密贴合得益于RhinoPoints所具备的精确点云捕捉功能,建模过程中,对捕捉功能的熟练应用,能够有效确保模型建立的效率和准确度。
当然,本篇中介绍的仅是最基本的基于点云建立三维模型的流程,在模型建立过程中还是有着丰富的细节需要建模人员关注的。需要了解更多相关内容,欢迎各位读者在本文下方给我们留言,相互交流经验。
Two_Arch2:改进的双档案多目标优化算法 参考文献
《Two_Arch2: An Improved Two-Archive Algorithm for Many-Objective Optimization, Handing Wang, Student Member , IEEE, Licheng Jiao, Senior Member , IEEE, and Xin Yao, Fellow, IEEE》
要点
多目标优化问题(ManyOPs)通常指的是具有三个以上目标的多目标问题(MOPs)。它们的大量目标在收敛性,多样性和复杂性方面给多目标进化算法(MOEA)带来了挑战。大多数现有的MOEA只能在这三个方面之一中表现良好。本文旨在同时针对这三个方面在ManyOPs上设计更加均衡的MOEA。在现有的MOEA中,双归档算法(Two_Arch)是一种低复杂度算法,具有两个分别关注收敛和多样性的档案。受Two_Arch思想的启发,为ManyOPs提出了一种显著改进的双档案算法(即Two_Arch2)。在Two_Arch2中,我们为两个档案分配了不同的选择原则(基于指标和基于帕累托的)。此外,我们为Two_Arch2中的ManyOP设计了一种新的基于Lp范数(p<1)的多样性维护方案。 一、介绍
在本文中,我们旨在设计一种针对ManyOP的MOEA,该MOEA在收敛性,多样性和复杂性方面都具有良好的性能,而无需事先进行任何参考点或其他手动设置。主要思想之一是在进化搜索过程中维护两个档案,其中每个档案分别促进收敛性(CA)和多样性(DA)。然而,原始的双档案算法(Two_Arch)在具有大量目标的ManyOP上效果不佳,尽管双档案的想法很有吸引力。我们对原始算法进行了实质性改进,并引入了两项主要创新,包括为两个档案分配不同的选择原则(CA是基于指标的,DA是基于Pareto的),设计了一个新的基于Lp范数(p <1)的多样性ManyOP的维护方案。这些新技术已被并入本文的新算法Two_Arch2中。
二、Two_Arch算法
A、基本流程
Two_Arch的流程图如图所示
Two_Arch使用非支配子代来更新CA和DA。将在CA或DA中占支配地位的非支配子代添加到CA,将在CA和DA两者都不占支配地位的非支配子代添加到DA。在此过程中,将删除CA,DA和非子代集合中的所有支配解。CA和DA更新的详细信息如算法1。
三、提议的新算法:Two_Arch2
A、主要思想
在Two_Arch2中,CA和DA的作用比Two_Arch更清晰。 CA旨在引导种群快速收敛到真实PF,而DA则旨在在高维度的目标空间中为种群增加更多的多样性。这就是为什么Two_Arch2在CA和DA之间进行交叉,但在繁殖过程中仅在CA上进行突变(交叉和突变在Two_Arch2中是独立的)。 CA和DA的大小分别固定,不再灵活。 CA和DA的子代的选择通过不同的方法相互独立。由于CA的多样性太差,我们将DA用作最终输出,这与Two_Arch中CA和DA的并集不同。
B、收敛性档案
在Two_Arch2中选择IBEA中的质量指标Iε+作为CA的选择原则。
在Two_Arch2中更新CA的步骤中,首先将子代添加到CA。然后,Two_Arch2根据适应性删除CA中的其他解。
C、多样性档案
ManyOP的多样性很难维持。 ManyOP的多样性是双重的。一方面,解应分布在整个高维目标空间中,以尽可能提供PF的信息。另一方面,当解被投影到低维目标空间时,解之间的差异应最大化。因此,DA是Two_Arch2中多样性的关键。
在DA中选择:在Two_Arch2中,DA的更新基于帕累托支配。这意味着只能将非支配解添加到DA。如果DA溢出,则会根据相似性删除额外的解,这是基于Pareto的MOEA的普遍思想。在我们的Two_Arch2中,我们采用了相反的想法,采用选择而不是删除。算法3中显示了溢出DA中选择的伪代码。当DA溢出时,首先选择边界解(具有最大或最小目标值的解)。然后,进入迭代过程,在每次迭代中将与所选解差异最大的解添加到DA。采用距离作为DA中的相似性度量,这与大多数多样性维护方法相同。众所周知,这种基于距离的多样性维护方法在ManyOPs上效果不佳。我们发现它们失败的原因是ManyOPs没有正确使用距离(欧氏距离或曼哈顿距离)。因此,我们需要选择合适的距离(基于Lp范数的距离)以改善ManyOP的多样性。 高维空间中的相似性:相关理论和实验证明,高维空间中的欧几里德距离(L2-范数)的意义较小。欧几里得距离降低了其在高维空间中的相似性索引性能。相反,曼哈顿距离(L1-范数)和分数距离(Lp-范数,p <1)在高维空间中表现更好。我们逐渐增加数据集的维数,并计算了最近邻居和最远邻居之间的差dmax- dmin。下图显示了基于Lp范数(p = 2,p = 1,p = 0.75,p = 0.5,p = 0.25和p = 0.1)的距离随距离增大的dmax- dmin结果。 在L2-范数下,dmax- dmin不会随维数增加。它以一个常数为界。而在所有其他情况下,dmax- dmin随尺寸的增加而增加。理论上证明,dmax- dmin对Dimension^(1 / p-1 / 2)的依赖性通常是不变的。这就是为什么L2范数在高维空间中被常数限制的原因。参数p越小,最远和最近的邻居之间的对比度越高。因此,在Two_Arch2中DA的更新步骤中,我们使用基于Lp范数的距离(p <1)而不是基于L2范数或基于L1范数的距离。对于具有不同目标数量的ManyOP,基于Lp范数(p <1)且具有固定p的距离可能并不适合所有情况。在Two_Arch2中将p设置为1 / m(m是目标数)。 扩展:Lp距离、L1范数、L2范数
展开全部
步骤如下62616964757a686964616fe58685e5aeb931333365666165
1、首先用sublime text2新建一个测试用的html页面。我这里就叫test.html
2、这个时候在网页中添加以个label标签和一个input框。
3、预览一下效果,我们可以知道默认的宽度是10
4、这里我们通过设置size的属性修改一下宽度。
5、再预览一下效果。是不是宽度减少了呢。
6、如果是简单改变宽度这就足够了,但是如果修改一下其他的东西。我们需要加上style属性
7、预览一下最终的效果。可以看到宽度和高度都改变了
扩展资料
超级文本标记语言文档制作不是很复杂,但功能强大,支持不同数据格式的文件镶入,这也是万维网(WWW)盛行的原因之一,其主要特点如下:
1、简易性:超级文本标记语言版本升级采用超集方式,从而更加灵活方便。
2、可扩展性:超级文本标记语言的广泛应用带来了加强功能,增加标识符等要求,超级文本标记语言采取子类元素的方式,为系统扩展带来保证。
3、平台无关性:虽然个人计算机大行其道,但使用MAC等其他机器的大有人在,超级文本标记语言可以使用在广泛的平台上,这也是万维网(WWW)盛行的另一个原因。
4、通用性:另外,HTML是网络的通用语言,一种简单、通用的全置标记语言。它允许网页制作人建立文本与图片相结合的复杂页面,这些页面可以被网上任何其他人浏览到,无论使用的是什么类型的电脑或浏览器。
编辑
它其实是文本,它需要浏览器的解释,它的编辑器大体可以分为三种,
1、基本文本、文档编辑软件,使用微软自带的记事本或写字板都可以编写,当然,如果你用WPS来编写,也可以。不过存盘时请使用.htm或.html作为扩展名,这样就方便浏览器认出直接解释执行了。
2、半所见即所得软件,
如:FCK-Editer、E-webediter等在线网页编辑器;
尤其推荐:Sublime Text代码编辑器(由Jon Skinner开发,Sublime Text 2收费但可以无限期试用)。
3、所见即所得软件,使用最广泛的编辑器,完全可以一点不懂HTML的知识就可以做出网页,如:
AMAYA(出品单位:万维网联盟);
FRONTPAGE(出品单位:微软);
Dreamweaver(出品单位:Adobe)。
4、所见即所得软件与半所见即所得的软件相比,开发速度更快,效率更高,且直观的表现更强。任何地方进行修改只需要刷新即可显示。缺点是生成的代码结构复杂,不利于大型网站的多人协作和精准定位等高级功能的实现。
PROTEL中,多层板走线时,怎样快速换层呀?比如从顶层到中间一层?
(不要告诉我按+或-号,这个我知道哟。)
用*键。效果等同+、-,但是只需要按一个键了。
还是不行呀
也就是象在POWER PCB中,我已走了一段,现在我要换在中间三层我就按L,再按3,最后回车的这个功能呀。
也就是象在POWER PCB中,我已走了一段,现在我要换在中间三层我就按L,再按3,最后回车的这个功能呀。
請問一下樓主你畫得是多少層板? 是二十層還是三十層?
小键盘上的‘*’键和‘+,—’键就可以了
小键盘的小米键 或者是自己定义!
呵呵
能换就好了
CTRL+SHIFT+滚轮
怎么不行呀
试了几次?
怎么不行呀
试了几次?
那个是在AD6.0中才提供的功能,如果你用的是99SE、DXP或2004之类的就不用费那神去试了!
9樓朋友真是好CTRL+SHIFT+滚轮,99SE/Ppwerpcb都不能用,還把這個命令寫出來?
这个是不是你自已在PROTEL 99SE中设置的?
都不对,如果是两层以上的板,换层时按+或-号,加孔。后不要移开鼠标,使其始终对准过孔中心,再按+或-号,就可随便按到哪一层了!
再试,垦定行了。
请各位大虾指教。
如果是Protel99se,按空格键。
小女子是新手来的,对PCB设计有浓厚兴趣,但一直画单层双层板,都没画过多层板,想提高提高,又不知道门路,哪位大虾指教下,真的很需要看看各位大哥大姐实例布线图,哪位如果有这样的实例可否发给我一份,
不胜感激!zgq@adsmart.com.cn callkonge__168@163.com QQ:262442818
搞得这么麻烦。就那边几层板,按按*键就行了。也不差在这种地方节省人力,
本身用+-两个键就可以了,不会用好多的时间,也可以在屏幕的下方状态栏中选择。至于小编的
想法有一个不是办法中的办法就是将1和3层设置为层对
用*键。
知了吧!
汉字“华”其实用在男孩名或者女孩名里都合适的,这是一个发音比较响亮的中性字,也有着非常不错的含义,但放在男女名字中的组合也是各不相同的,一起来看看怎么用“华”字来给男生取个好听好寓意的名字吧!
华字字典字义:
华:表示光辉、光彩、奢侈。上下结构,部首五行属水,数理五行属火。
1.光鲜光彩的:华贵、华丽、豪华。
2.精英:精华。
3.开花:春华秋实。
4.繁盛:荣华富贵。
5.奢侈:浮华、奢华。
6.敬辞,用于跟对方有关的事物:华翰(书信)、华诞(生日)、华居(住宅)。
用作人名寓指:才华横溢、社会精英、未来可期等。
好寓意好听的和华字最搭的男孩名:
华嵘 华宸 华威 华容 华扬 华融 华哲 华奇 华运 华飞 华翰 华光 华昆
华鸿 华振 华波 华成 华昊 华皓 华腾 华伟 华星 华辰 华茂 华博 华凯
华安 华力 华俊 华驰 华瑞 华彦 华诩 华翰 华炜 华振 华欷 华毓 华晰
华祥 华煦 华轩 华辉 华均 华越 华禹 华鹏 华抒 华言 华昊 华晖 华钦
华豫 华峪 华飞 华戎 华逸 华智 华澎 华锐 华涵 华宣 华懿 华宜 华宾
一个springcloud gateway工程demo,为了把应用注册到注册中心eureka,在gateway启动类添加注解 @EnableEurekaClient,同时pom文件中增加了配置
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency> 工程启动后,报错
Description:
Parameter 0 of method modifyRequestBodyGatewayFilterFactory in org.springframework.cloud.gateway.config.GatewayAutoConfiguration required a bean of type 'org.springframework.http.codec.ServerCodecConfigurer' that could not be found.
Action:
Consider defining a bean of type 'org.springframework.http.codec.ServerCodecConfigurer' in your configuration.
问题排查过程 搜了下,大多说的是gateway 和 spring-boot-starter-web 不兼容问题,示意排除web依赖
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-gateway</artifactId> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </exclusion> </exclusions> </dependency> 修改代码排除后,启动,依然报刚开始的错误。说明,问题的症结不在web依赖这里。
继续排查发现,问题的原因是gateway和eureka的依赖有冲突。
为了将服务注册到eureka注册中心,使用了注解 @EnableEurekaClient,故而引入依赖eureka-server,见文章开篇位置。
换个方式,使用注解 @EnableDiscoveryClient 将服务注册到注册中心,去掉eureka-server依赖,启动不报错。
再回到上面,去掉排除web的依赖,恢复到最初的gateway依赖
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-gateway</artifactId> </dependency> 启动不报错。由此证明,这里的报错场景主要是gateway和eureka-server依赖冲突导致,与web依赖无关。
@EnableEurekaClient和@EnableDiscoveryClient @EnableEurekaClient和@EnableDiscoveryClient 这两个注解都可以将服务注册到注册中心,他们有哪些区别呢?
关于本教程 本教程将深入讲解 Spring 简单而强大的事务管理功能,包括编程式事务和声明式事务。通过对本教程的学习,您将能够理解 Spring 事务管理的本质,并灵活运用之。
先决条件 本教程假定您已经掌握了 Java 基础知识,并对 Spring 有一定了解。您还需要具备基本的事务管理的知识,比如:事务的定义,隔离级别的概念,等等。本文将直接使用这些概念而不做详细解释。另外,您最好掌握数据库的基础知识,虽然这不是必须。
系统需求 要试验这份教程中的工具和示例,硬件配置需求为:至少带有 512MB 内存(推荐 1GB)的系统。需要安装以下软件:
Sun JDK 5.0 或更新版本或 IBM Developer Kit for the Java 5 platform 版本。Spring framework 2.5。本教程附带的示例代码已经在 Spring 2.5.6 上测试过。MySQL 5.0 或更新版本。 Spring 事务属性分析 事务管理对于企业应用而言至关重要。它保证了用户的每一次操作都是可靠的,即便出现了异常的访问情况,也不至于破坏后台数据的完整性。就像银行的自助取款机,通常都能正常为客户服务,但是也难免遇到操作过程中机器突然出故障的情况,此时,事务就必须确保出故障前对账户的操作不生效,就像用户刚才完全没有使用过取款机一样,以保证用户和银行的利益都不受损失。
在 Spring 中,事务是通过 TransactionDefinition 接口来定义的。该接口包含与事务属性有关的方法。具体如清单1所示:
清单 1. TransactionDefinition 接口中定义的主要方法
事务管理对于企业应用而言至关重要。它保证了用户的每一次操作都是可靠的,即便出现了异常的访问情况,也不至于破坏后台数据的完整性。就像银行的自助取款机,通常都能正常为客户服务,但是也难免遇到操作过程中机器突然出故障的情况,此时,事务就必须确保出故障前对账户的操作不生效,就像用户刚才完全没有使用过取款机一样,以保证用户和银行的利益都不受损失。 在 Spring 中,事务是通过 TransactionDefinition 接口来定义的。该接口包含与事务属性有关的方法。具体如清单1所示: 清单 1. TransactionDefinition 接口中定义的主要方法 也许你会奇怪,为什么接口只提供了获取属性的方法,而没有提供相关设置属性的方法。其实道理很简单,事务属性的设置完全是程序员控制的,因此程序员可以自定义任何设置属性的方法,而且保存属性的字段也没有任何要求。唯一的要求的是,Spring 进行事务操作的时候,通过调用以上接口提供的方法必须能够返回事务相关的属性取值。
事务隔离级别 隔离级别是指若干个并发的事务之间的隔离程度。TransactionDefinition 接口中定义了五个表示隔离级别的常量:
TransactionDefinition.ISOLATION_DEFAULT:这是默认值,表示使用底层数据库的默认隔离级别。对大部分数据库而言,通常这值就是TransactionDefinition.ISOLATION_READ_COMMITTED。TransactionDefinition.ISOLATION_READ_UNCOMMITTED:该隔离级别表示一个事务可以读取另一个事务修改但还没有提交的数据。该级别不能防止脏读和不可重复读,因此很少使用该隔离级别。TransactionDefinition.ISOLATION_READ_COMMITTED:该隔离级别表示一个事务只能读取另一个事务已经提交的数据。该级别可以防止脏读,这也是大多数情况下的推荐值。TransactionDefinition.ISOLATION_REPEATABLE_READ:该隔离级别表示一个事务在整个过程中可以多次重复执行某个查询,并且每次返回的记录都相同。即使在多次查询之间有新增的数据满足该查询,这些新增的记录也会被忽略。该级别可以防止脏读和不可重复读。TransactionDefinition.ISOLATION_SERIALIZABLE:所有的事务依次逐个执行,这样事务之间就完全不可能产生干扰,也就是说,该级别可以防止脏读、不可重复读以及幻读。但是这将严重影响程序的性能。通常情况下也不会用到该级别。 事务传播行为 所谓事务的传播行为是指,如果在开始当前事务之前,一个事务上下文已经存在,此时有若干选项可以指定一个事务性方法的执行行为。在TransactionDefinition定义中包括了如下几个表示传播行为的常量:
TransactionDefinition.PROPAGATION_REQUIRED:如果当前存在事务,则加入该事务;如果当前没有事务,则创建一个新的事务。TransactionDefinition.PROPAGATION_REQUIRES_NEW:创建一个新的事务,如果当前存在事务,则把当前事务挂起。
TransactionDefinition.PROPAGATION_SUPPORTS:如果当前存在事务,则加入该事务;如果当前没有事务,则以非事务的方式继续运行。TransactionDefinition.PROPAGATION_NOT_SUPPORTED:以非事务方式运行,如果当前存在事务,则把当前事务挂起。TransactionDefinition.PROPAGATION_NEVER:以非事务方式运行,如果当前存在事务,则抛出异常。TransactionDefinition.PROPAGATION_MANDATORY:如果当前存在事务,则加入该事务;如果当前没有事务,则抛出异常。TransactionDefinition.PROPAGATION_NESTED:如果当前存在事务,则创建一个事务作为当前事务的嵌套事务来运行;如果当前没有事务,则该取值等价于TransactionDefinition.PROPAGATION_REQUIRED。 这里需要指出的是,前面的六种事务传播行为是 Spring 从 EJB 中引入的,他们共享相同的概念。而 PROPAGATION_NESTED是 Spring 所特有的。以 PROPAGATION_NESTED 启动的事务内嵌于外部事务中(如果存在外部事务的话),此时,内嵌事务并不是一个独立的事务,它依赖于外部事务的存在,只有通过外部的事务提交,才能引起内部事务的提交,嵌套的子事务不能单独提交。如果熟悉 JDBC 中的保存点(SavePoint)的概念,那嵌套事务就很容易理解了,其实嵌套的子事务就是保存点的一个应用,一个事务中可以包括多个保存点,每一个嵌套子事务。另外,外部事务的回滚也会导致嵌套子事务的回滚。
为什么微信电脑版本调用非静默授权接口没有回调
已解决:授权url的参数需要按照字母顺序,(> 引用文本:由于授权操作安全等级较高,所以在发起授权请求时,微信会对授权链接做正则强匹配校验,如果链接的参数顺序不对,授权页面将无法正常访问)
正确格式例如:https://open.weixin.qq.com/connect/oauth2/authorize?appid=wxf0e81c3bee622d60&redirect_uri=http%3A%2F%2Fnba.bluewebgame.com%2Foauth_response.php&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect
欢迎关注我们,选择加"星标"或“置顶”
更多技术,第一时间送达
SSVEP信号中含有自发脑电和大量外界干扰信号,属于典型的非线性非平稳信号。传统的滤波方法通常不满足对非线性非平稳分析的条件,1998年黄鄂提出希尔伯特黄变换(HHT)方法,其中包含经验模式分解(EMD)和希尔伯特变换(HT)两部分。EMD可以将原始信号分解成为一系列固有模态函数(IMF) [1],IMF分量是具有时变频率的震荡函数,能够反映出非平稳信号的局部特征,用它对非线性非平稳的SSVEP信号进行分解比较合适。
EMD算法原理:
步骤1:
寻找信号全部极值点,通过三次样条曲线将局部极大值点连成上包络线,将局部极小值点连成下包络线。上、下包络线包含所有的数据点。
步骤2:
由上包络和下包络线的平均值 ,得出
若满足IMF的条件,则可认为是的第一个IMF分量。
步骤3:
若不符合IMF条件,则将作为原始数据,重复步骤1、步骤2,得到上、下包络的均值,通过计算是否适合IMF分量的必备条件,若不满足,重复如上两步次,直到满足前提下得到。第1个IMF表示如下:
步骤4:
将从信号中分离得到:
将作为原始信号重复上述三个步骤,循环次,得到第二个IMF分量直到第个IMF分量 ,则会得出:
步骤5:
当变成单调函数后,剩余的成为残余分量。所有IMF分量和残余分量之和为原始信号:
用EMD进行滤波的基本思想是将原信号进行EMD分解后,只选取与特征信号相关的部分对信号进行重构。如下图中a部分为原始信号,b部分为将原始信号进行EMD分解获得的6个IMF分量和1个残余分量,c部分为将分解获得的6个IMF分量和1个残余分量进行重构后的信号,可以看出SSVEP信号用EMD分解后,基本上包含了原有信号的全部信息。
图片来源于[1]
python实现EMD案例
# 导入工具库import numpy as npfrom PyEMD import EMD, Visualisation 构建信号
时间t: 为0到1s,采样频率为100Hz,S为合成信号
# 构建信号t = np.arange(0,1, 0.01)S = 2*np.sin(2*np.pi*15*t) +4*np.sin(2*np.pi*10*t)*np.sin(2*np.pi*t*0.1)+np.sin(2*np.pi*5*t) # 提取imfs和剩余信号resemd = EMD()emd.emd(S)imfs, res = emd.get_imfs_and_residue()# 绘制 IMFvis = Visualisation()vis.plot_imfs(imfs=imfs, residue=res, t=t, include_residue=True) # 绘制并显示所有提供的IMF的瞬时频率vis.plot_instant_freq(t, imfs=imfs)vis.show() 参考
[1] 基于稳态视觉诱发电位的脑-机接口系统研究
往期精彩
Python-EEG工具库MNE-Python详细安装与使用
MNE中文教程(1)-MNE中数据结构Raw及其用法简介
Python-EEG工具库MNE中文教程(2)-MNE中数据结构Epoch及其创建方法
Python-EEG工具库MNE中文教程(3)-MNE中数据结构Epoch及其用法简介
Python-EEG工具库MNE中文教程(4)-MNE中数据结构Evoked及其对象创建
Python-EEG工具库MNE中文教程(5)-机器学习算法随机森林判断睡眠类型
压缩包内容概览:
CAE有限元分析 ; CAM_NC零件加工 ; ~$下水道疏通机器人设计说明书 ; 二维工程图 ; 产品展示动画及爆炸 ; 市政下水道疏通机器人设计说明书 ; 渲染图 ; 疏通机器人预估成本 ; 零件及其装配 ; 小手臂座-算例 1 ; 有限元分析1 ; 有限元分析2 ; 有限元分析3 ; 有限元分析4 ; 有限元分析5 ; 有限元分析报表 ; A面NC代码 ; A面截图 ; B面NC代码 ; B面截图 ; 底盘 ; 总装配体 ; 机械臂 ; 置步电机 ; 脚的三视图 ; 连杆 ; 驱动臂座 ; 渲染10 ; 渲染11 ; 渲染12 ; 渲染9 ; 漫画图解 ; 总1 ; 总2 ; 总3 ; 总4 ; 14007_D俧aut ; 上臂 ; 上臂2 ; 传感器 ; 前爪固定座 ; 前脚趾 ; 前脚趾上螺栓 ; 前脚趾下螺栓 ; 双向电机座装配体 ; 后脚趾 ; 后脚趾上螺栓 ; 后脚趾下螺栓 ; 外壳 ; 大刀片 ; 大手臂2 ; 大手臂摆线减速机安装法兰 ; 大手臂摆线减速机手臂安装法兰 ; 大腿 ; 大腿固定栓 ; 大腿装配 ; 大臂外壳 ; 大钻底盘 ; 套筒 ; 小刀片 ; 小手臂关节轴承 ; 小手臂关节轴芯 ; 小手臂旋转后法兰 ; 小手臂旋转法兰 ; 小手臂旋转法兰轴承隔套 ; 小手臂旋转轴承法兰 ; 小手臂骨架油封 ; 小水枪 ; 小腿 ; 小钻底盘 ; 底盘上 ; 底盘下 ; 底盘旋转51315轴承 ; 底盘旋转涡轮轴 ; 底盘旋转涡轮轴上法兰16032轴承 ; 底盘旋转涡轮轴上法兰油封 ; 底盘旋转涡轮轴上法兰盖 ; 底盘旋转涡轮轴下法兰 ; 底盘旋转涡轮轴下法兰6215轴承 ; 底盘法兰盖 ; 底盘装配 ; 手腕6002轴承 ; 手腕61902轴承 ; 手腕61908轴承 ; 手腕电机齿轮连接轴 ; 手腕电机齿轮连接轴2 ; 手腕直齿1 ; 手腕直齿2 ; 手腕直齿3 ; 手腕直齿4 ; 手臂控制液压杆 ; 手臂控制液压杆套 ; 旋转臂电机 ; 水管接口上法兰盖 ; 水管接口法兰盖 ; 电机轴 ; 组合电机座 ; 置步电机轴 ; 脚趾连接件 ; 脚部装配 ; 腕部中心轴2 ; 腕部中心轴前端锁帽 ; 腕部电机齿轮箱 ; 腕部行星减速机 ; 腿部连接件 ; 轴承1 ; 连杆伺服电机 ; 连杆轴传动轴 ; 连杆轴承套 ; 连杆轴承盖 ; 里壳 ; 阻尼紧固 ; 非工作水管2
if语句简单来说,就是一个判断语句。电脑根据一个条件判断是否符合条件,最后输出结果。讲完了if的简单介绍,相信接下来大家会对if not有一个很好地理解了。接下来就开始我们今天对if not使用的学习吧。
if not 就是一个判断语句,not 表示非,写成这个样子可能就理解了:if not cond:
do_something()
意思就是如果 cond 为 “假值” (False,None,"" 等)时,执行分支里的语句。
如果学过别的语言,比如 C\C 等,上面的语句等价于:if !cond {
do_something();
}
举例:attrs = ((name, value) for name, value in future_class_attr.items() if not name.startswith('__'))
意思就是,如果name 这个字符串不是以 "__" (两个下划线) 开头(表示不是 private 的成员),就添加到生成器里。
拓展:
举例需求为,内容中不得出现 '招聘', '诚聘', '社招' 等关键字,符合条件的才打印出来。#!/usr/bin/env python
# -*- coding: gbk -*-
# -*- coding: utf_8 -*-
# Date: 2016/5/13
# Created by 独自等待
# 博客 http://www.waitalone.cn/
分类
数值
单位
分类
抗压强度设计
值
f
210
Mpa
抗压强度设计
值
f
直径
D
200
mm
直径
D
壁厚
t
6
mm
壁厚
t
轴压力
N
48.525
KN
轴压力
N
截面积
A
3654.96
mm
截面积
A
惯性矩
I
17211206.64
mm
惯性矩
I
回转半径
r
68.62215386
mm
回转半径
r
计算长度
l0
4100
mm
计算长度
l0
长细比
λ
59.74746885
长细比
λ
稳定系数
φ
0.883
稳定系数
φ
抗压承载力值
σ
15.03565015
抗压承载力值
σ
文章目录 接收用户参数判断用户参数流程控制if 语句for 语句while 语句 常用指令shell 编程注意事项shell 编程案例 接收用户参数 #!/bin/bash echo "当前脚本名称为$0" echo "总共有$#个参数,分别是$*" echo "第 1 个参数为$1,第 5 个为$5" $# 参数个数;$* 所有位置参数;$? 上一次命令执行返回值;$1 第一个位置参数
执行 sh example.sh one two three four five six, 输出:
当前脚本名称为 example.sh 总共有 6 个参数,分别是 one two three four five six 第 1 个参数为 one,第 5 个为 five 判断用户参数 Shell 脚本中的条件测试语法可以判断表达式是否成立,若条件成立则返回数字 0,否则便返回其他随机数值。例如,在创建文件之前,首先判断文件是否存在。
语法:[ Expression ] 注:括号两侧有空格
区别 shell 命令的返回值与输出值,返回值通过 $? 获取,而 var=echo hhh 是将输出结果赋值给 var 而不是返回值,管道命令也是如此。
统计一个字符串中的字母、数字、空格和其它字符的个数。
函数接口定义:
void fun(char s[],int b[]); 其中 s 和 b都是用户传入的参数。 函数fun统计字符串s中的字母、数字、空格和其它字符的个数,并将结果放在b数组中。
裁判测试程序样例:
#include "stdio.h" void fun(char s[],int b[]); int main () { char s1[80];int a[4]={0}; int k; gets(s1); fun(s1,a); for(k=0;k<4;k++) printf("%4d",a[k]); return 0; } /* 请在这里填写答案 */ 输入样例:
jfh h#$yf7y 输出样例:
7 1 1 2 #include<string.h> void fun(char s[],int b[]) { for(int i=0; i<strlen(s); i++) { if(s[i] >= '0' && s[i] <= '9') b[1]++; else if((s[i] >= 'a' && s[i] <= 'z') || (s[i] >= 'A' && s[i] <= 'Z')) b[0]++; else if(s[i] == ' ') b[2]++; else b[3]++; } }
今天在HoloLens上跑unity项目的时候,系统报错: 经过重装环境,检查配置,这个错误依然存在。 检查路径时发现,因安装时的路径问题,导致C盘的Windows Kits里没有对应的文件夹。 我们打开安装SDK的文件夹。
我安装的SDK位置在D盘,所以在运行时VisualStudio在C盘搜索不到这个10文件夹。我们把装有SDK的10文件夹复制过来。
复制到C盘的WindowsKits(或只复制所需文件夹,单独复制不影响运行)。
python爬虫: 查找自己浏览器的headers 谷歌浏览器中打开任意一个网页——比如打开百度:https://www.baidu.com/在网页中右键单击点击“检查”,出现如下页面。
点击最上方选项卡中的‘Network’选项,再按F5,在‘name’框中会出现一个或多个选项,点击任意选项,在右侧点击‘headers’选项,在最下方找到‘User-Agent:’,如下图
将User-Agent:粘贴到自己代码headers中即可: headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, likeGecko) Chrome/87.0.4280.88 Safari/537.36' }
wow工程做的不同的修理机器人有啥区别
废物处理机器人74A型 是60年代的工程机器人 110G是70年代的工程机器人 基维斯是80年代的工程机器人 74A和110G都只能 贩卖 和修理 基维斯除了以上功能外 工程可以用基维斯看银行 做基维斯 必须用3钟机器人 +泰坦精钢锭 其中就包括74A和110G
没有什么特别的不同,维修价格都是一样的废物处理机器人不能买东西战地修理机器人110G可以买施法材料,但都是70级的,比如80级的施法材料 虔诚蜡烛 就没有而基维斯是最全的,不仅可以买所有的施法材料和毒药,还可以访问自己的银行(此功能只限工程技能达到415)而且基维斯使用之后不会消失,只是1个小时CD,它存在时间是10分钟。还有一个是60年代的维修机器人。。。还是淘汰掉吧。。因此,推荐做基维斯就够用了
魔兽世界工程机器人图纸去哪弄
你说的是吉福斯吗?在北极打任何可以拆解的怪,然后拆尸体都有可能出。修理机器人74A型是在黑铁酒吧,到酒吧从右手出口出去,到一座桥(有火元素守卫),直接过去进入一间大房间(会发现很多矮人和石头人),靠右边的墙直走,有个小房间,里面有3个怪(其中一个是矮人BOSS。2个石头护卫),就在他后面地方。
战地修理机器人110G型这个图纸时在刀锋山的甘尔各分析师掉废料机器人组装包在风暴群山 发明者的图书馆,也就是那个奥杜亚进门附近骑鸟的侏儒掉落一个任务物品,做完了任务就学会了后三个是做吉福斯的必备品。
基维斯:风暴峭壁创世纪图书馆的骑鸟机器人战地修理机器人110G:刀锋山奥格瑞拉附近的甘尔葛工程师(貌似是这个名)修理机器人74A:黑石深渊,不想打去AH买吧垃圾回收机器人:同样是创世纪图书馆那七年的机器人打出的任务物品,做完任务可学
魔兽世界单机版机器人问题
总才对于未来人工智能机器人的预言:我认为人是有两大部分组成:一副躯体和七情六欲。因为拥有强大的欲望以及聪明的大脑,我们才能成为地球的霸主,我认为想要创造高度人工智能机器人就必须遵照这观点才能成功。
目录
1、平台
2、PCD文件读取
3、算法
4、测试代码及注释
5、测试结果
1、平台 PCL1.8.0+VS2015+Win10,具体配置可以参照链接:https://blog.csdn.net/weixin_36602742/article/details/112345693
2、PCD文件读取 可以参照链接:https://blog.csdn.net/weixin_36602742/article/details/112347622
3、算法 采用随机采样一致性分割算法,具体原理及介绍可以参考链接:https://blog.csdn.net/weixin_36602742/article/details/112526322
4、测试代码及注释 #include"stdafx.h" #include <iostream> #include <pcl/ModelCoefficients.h> #include <pcl/io/pcd_io.h> #include <pcl/point_types.h> #include <pcl/sample_consensus/method_types.h> #include <pcl/sample_consensus/model_types.h> #include <pcl/segmentation/sac_segmentation.h> int main(int argc, char** argv) { pcl::PointCloud<pcl::PointXYZ> cloud; //填充点云数据 cloud.width = 15; cloud.height = 1; cloud.points.resize(cloud.width * cloud.height); //生成数据 for (size_t i = 0; i < cloud.points.size(); ++i) { cloud.points[i].x = 1024 * rand() / (RAND_MAX + 1.0f); cloud.points[i].y = 1024 * rand() / (RAND_MAX + 1.
点击蓝字
关注我们
Excel表格是办公人员最常用的办公数据处理工具,Excel表格的基本操作也是新手们急于学习的。
1. 字体
在工具栏“开始”菜单栏,查找调整字体的工具框,在这个模块可以修改字体的类型、粗细、大小、颜色、是否带下划线等。
2. 对齐方式
打好字后,需要修改字体格式,在对齐工具栏中,可以快速其对齐方式。此外,合并居中是合并单元格。
3. 符号
假如要制作消费统计表,就需要输入“¥”这个符号,一个一个输入太麻烦,我们可以直接在数字框里查找货币标志,选择一批数据,批量添加就可以了。
4. 单元格
在单元格工具框中,点击行列→点击插入单元格或者删除单元格就可以了
5. 常用函数
如果需要求和,最简单的方法就是在工具框中查找求和,点击求和,然后选择其他函数就可以了。
6. 长数字的输入
输入较长的数字会自动变样,假如我输入身份证号,最后变成看不懂了,怎么办呢?其实只要更改数字种类就OK了。
7. 格式刷
举例7设置好后,就需要一个个修改,量少可以,量多的话就太浪费时间了。这时候就需要格式刷了,在工具栏“开始”中查找格式刷,点击格式刷,选择要复制的格式,然后选择要修改的单元格就OK了。
8. 制表
不会制表的人觉得制表很复杂,现在教你一个方法,一键制表。在工具栏中点击“插入”,点击图表,根据需要制表就可以了。
9. 快速复制粘贴
如果需要按数字顺序输入数字,一个个的输入非常麻烦,我们可以这样做,点击选中的单元格的右下角,光标变成+向下拖动,只能排序。
Hey~这里是律网工作坊
这里有很多认真的小编~
每天都会准时准点的更新推送~
这里不仅有你感兴趣的当下时事政治,热点新闻;助你一臂之力陪你不断进步成长的办公必备技巧、各种软件教程;还有别具一格的优质好文,只为温暖你,照亮你~小律愿用钢筋混凝土般强大的内心,永远守你陪伴你~一起成长!你准备好了嘛?
律网工作坊
学习 | 交流 | 分享
一、监控CPU空闲率 在添加主机时,由于已经链接了Template OS Linux by Zabbix agent模板(该模板还链接了Template Module Linux CPU by Zabbix agent等若干个其他模板),Template Module Linux CPU by Zabbix agent模板自带了许多监控项,其中包括CPU idle time 监控项,因此可以直接使用该监控项监控主机CPU空闲率数值,无需自定义监控项,只需要添加一个触发器(Trigger)来读取监控项触发告警即可。
注: zabbix自带模板中,有许多监控项可以直接利用起来,无需再单独创建监控项,使用时可先在已有模板中查找下可用的监控项。
1、使用自带模板中监控项
直接使用CPU idle time 监控项即可,可以在【配置】-【主机】,【agent_tengxunyun】的【监控项】中搜索到该监控项(在下图中可以看到该监控项链接了模板)
2、在已有模板中添加触发器(trigger)
这里在模板Template Module Linux CPU by Zabbix agent添加一个触发器。
点击【配置】-【模板】搜索模板Template Module Linux CPU by Zabbix agent,并进入【触发器】配置
这里说明一下配置参数
表达式/问题表现式:表示在5分钟内CPU平均空闲率如果高于80%,那么将触发问题 (这是便于测试)
添加表达式示例:
system.cpu.util[,idle]官方说明
注:这里修改了zabbix自带的模板(Template Module Linux CPU by Zabbix agent),为其添加了一个新的触发器,在实际使用中,要谨慎操作,因为链接了该模板的主机触发器都会被修改,因此实际使用中需要对这种操作进行评估。
3、测试一下
[root@tengxunyun ~]# cat /dev/urandom | gzip -9 > /dev/null 恢复 Ctrl + C就可以
之前写过两篇博客,可以参考:
此篇博客是对上述两篇博客的补充。
参考这篇博客:http://themkbytes.blogspot.kr/2012/05/pyqt-gui-freeze-while-loops.html
得出如下结论,主线程中如果有一些耗时的计算,界面会暂时失去响应,那么,在计算的过程中,可以调用下界面的processEvents方法,让整个程序继续执行,处于事件循环中。
代码主要如下:
耗时导致界面失去响应的代码:
import itertools ,string
x=1
file=open("file","w")
while x<=200:
it=itertools.product(string.printable,repeat=x)
for i in it:
ij="".join(i)
file.write("ij"+"\n")
x=x+1
file.close()
由于循环比较多,所以,导致界面失去响应,解决方案如下:
只需要在循环内部,加入:
gui=QtGui.Application.processEvents
gui()
改造后的代码:
x = 1
file = open("file","w")
gui()
while x<=200:
it=itertools.product(string.printable,repeat=x)
time.sleep(0.1)
gui()
for i in it:
ij="".join(i)
time.sleep(0.001)
gui()
file.write("ij"+"\n")
gui()
x = x+1
gui()
file.close()
gui()
这样子界面就不会卡顿了。
补充:PyQt采用moveToThread解决卡顿问题
首先是一个worker类,主要是负责处理任务的:
其中Worker.py定义了两个信号,一个是madeProgress信号,一个是完成信号finished
class Worker(QtCore.QObject):
madeProgress = QtCore.pyqtSignal([int])
finished = QtCore.pyqtSignal()
def __init__(self, cmdlist):
数据集 1)Drazy 数据集:红外,包含多种用于疲劳检测的数据,(有电极) 14*3*10min get
http://www.drozy.ulg.ac.be/
2)NTHU 驾驶员疲劳检测数据集
http://cv.cs.nthu.edu.tw/php/callforpaper/datasets/DDD/
3)Closed Eyes in the Wild (CEW)数据 眨眼数据
http://parnec.nuaa.edu.cn/xtan/data/ClosedEyeDatabases.html //失效
http://parnec.nuaa.edu.cn/_upload/tpl/02/db/731/template731/pages/xtan/ClosedEyeDatabases.html BioID http://www.voidcn.com/article/p-mrpbhzqt-cm.html
AR http://www2.ece.ohio-state.edu/~aleix/ARdatabase.html
CAS-PEAL 4)ZJU eyeblink database 眨眼与脑电波
https://blog.csdn.net/weixin_42298876/article/details/112041136?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_title-2&spm=1001.2101.3001.4242
http://www.cs.zju.edu.cn/gpan/database/db_blink.html //失效
Voluntary-Involuntary Eye-Blinks: https://drive.google.com/file/d/0By5iwWd39NblS2tRWmVTdmRzZUU/view?usp=sharing ×
EEG-eye state: https://archive.ics.uci.edu/ml/datasets/EEG+Eye+State ×
EEG-IO: http://gnan.ece.gatech.edu/eeg-eyeblinks/ ×
EEG-VV, EEG-VR: http://gnan.ece.gatech.edu/eeg-eyeblinks/ ×
5)YAWDD 打哈欠数据集 get
https://ieee-dataport.org/open-access/yawdd-yawning-detection-dataset#files
EAR(Eye Aspect Ratio,眼睛纵横比) 1)连续三帧EAR<0.2认为眨眼
清醒状态下眨眼频率10~20次/min,大于20的小快节奏眨眼判定疲劳
2)闭眼1s/2s以上 3)眼睛闭合时长增大
PERCLOS:单位时间内(1min/30s)闭眼一定比例(50/70/80% )时间占比
4) 积分投影特征图
睁眼时具有主峰波形,闭眼时无主峰波形
MAR(Mouth Aspect Ratio,嘴部纵横比) 连续三帧MAR>0.75认为张嘴/内轮廓阈值0.4
张嘴持续时间大于等于 2 秒,则认为打了一次哈欠 (总长6.
面向对象的三大特性: 封装:根据职责将属性或方法 封装 到一个抽象的类中继承:实现代码的重用,相同的代码不需要重复的编写多态:不同的对象调用相同的方法,产生不同的执行结果,增加代码的灵活度 1. 单继承 1.1 继承的概念、语法和特点 继承的概念:子类拥有父类的所有方法和属性
继承的语法 class 类名(父类名) pass 子类继承自父类,可以直接享受父类中已经封装好的方法,不需要再次开发子类中应该根据职责,封装子类特有的属性和方法 专业术语 Dog 类是 Animal 类的 子类, Animal 类是Dog 类的父类,Dog 类从 Animal 类 继承Dog 类是 Animal 类的 派生类, Animal 类是Dog 类的基类,Dog 类从 Animal 类 派生 继承的传递性 C类从B类继承,B类又从A类继承,那么C类就具有B类和A类的所有属性和方法子类 拥有 父类 以及 父类的父类 中封装的所有属性和方法 class Animal: def eat(self): print("Eat") def drink(self): print("Drink") def sleep(self): print("Sleep") class Dog(Animal): def bark(self): print("Wangwangwang") class Husky(Dog): def smile(self): print("Hahahahaha") # 创建一个对象 - Dog lovelydog = Dog() lovelydog.
I want to work here. 使用Labview读取Excel电子表格的数据?
1 你可以使用读取测量文件的Express VI从Excel电子数据表中将数值数据读取到LabVIEW中,整个过程由以下两个步骤组成:首先将你的Excel电子数据表另存为以Tab键分割的文本文件;然后,将*.txt文件重命名为*.lvm文件。使用读取测量文件的Express VI就可以将数值数据读取到LabVIEW中。
2 2.7.7
1.打开包含了基本的数值信息的Excel电子数据表。
2.将你的Excel电子数据表另存为以Tab键分割的文本文件。单击“确定”。需要注意的是,你保存的只是活动工作表的数值数据。
3.单击“是”。
4.关闭你的Excel文档。
5.导航到你先前保存Tab键分割文本文件的目录,对你的filename.txt右击,选择“重命名”,将你的文件以.lvm的后缀命名,即命名为filename.lvm
6.使用读取测量文件的Express VI,在配置窗口的文件名栏,选择filename.lvm,可以将你的数值电子数据表读取到LabVIEW中。导航到你先前保存Tab键分割文本文件的目录,对你的filename.txt右击,选择“重命名”,将你的文件以.lvm的后缀命名,即命名为filename.lvm。 (
* s1 I; O) m
3 LabVIEW的读取电子表格文件的VI不能直接读取.xls的文件,只能读取分割文本文件。如果你是通过人工在读取电子表格的VI输入数据(不是使用LabVIEW的写入电子表格文件的VI)来创建你的Excel电子数据表的话,该VI是无法很好地解读你的.xls文件的,而且将会向你的数组返回零值。你必须将你的excel文件保存为分割文本文件,才可以在你的LabVIEW中正确地的将该excel文件读取到你的数组中。这个过程你可以参考上面的例子。现在将该txt文件的路径输入到读取电子表格的文件路径节点,该VI会将正确的数据填写到你指定的数组中。如果你只需要第一列的数据,你可以将一个True值BOOL常量连接到“转置”接线端,则该VI“第一行”输出端将输出一个数组,该数组将保存有你所需要的第一列的数据。
E s W 本来无一物,何处惹尘埃 南山
学习编程语言想必大家都听说过“注解”这个词,任何一门编程语言都少不了注解,包含Python语言在内。那么你知道Python语言如何注解吗?Python注解的具体用法是什么?接下来我们一起来看看吧。
1. 单行注释
Python编程语言的单行注释常以#开头,单行注释可以作为单独的一行放在被注释代码行之上,也可以放在语句或者表达式之后。
实例:
# -*- coding: UTF-8 -*-
print ("hello world!"); #您好,世界
2. 多行注释
Python中多行注释使用三个单引号(’’’)或者三个双引号(”””)来标记,而实际上这是多行字符串的书写方式,并不是Python本身提倡的多行注释方法。
实例:
'''
这是多行注释,使用单引号。
这是多行注释,使用单引号。
'''
"""
这是多行注释,使用双引号。
这是多行注释,使用双引号。
"""
3. 编码注释
在进行Python开发时,需进行编码声明,如采用UTF-8编码,需在源码上方进行 # -*- coding: UTF-8 -*-
声明,从Python3开始,Python默认使用UTF-8编码,所以Python3.x的源文件不需要特殊声明UTF-8编码。
4. 平台注释
如果需要使Python程序运行在Windows平台上,需在Python文件的上方加上 #!/usr/bin/python 注释说明。
#coding=utf-8
importre#1. 写一个正则表达式,使其能同时识别下面所有的字符串:'bat','bit', 'but', 'hat', 'hit', 'hut'
s="bat ,bit ,but ,hat ,hit ,hut"
print re.findall(r'[bh][aiu]t',s)#2.匹配由单个空格分隔的任意单词对,也就是姓和名
s= "Han meimei, Li lei, Zhan san, Li si"
print re.findall(r'([A-Za-z]+) ([A-Za-z]+)',s)#3. 匹配由单个逗号和单个空白符分隔的任何单词和单个字母,如姓氏的首字母
s= "yu, Guan bei, Liu fei, Zhang"
print re.findall(r'([a-zA-Z]+),\s([a-zA-Z])',s)#4.匹配所有的有效的Python标识符集合
s= "_hello , python_1 , 2world , Pra_ni , @dfa_ , ewq*"
print re.findall(r'\b[a-zA-z_][\w]*(?!=\W)',s)#5. 根据美国街道地址格式,匹配街道地址。美国接到地址使用如下格式:1180 Bordeaux Drive。使你的正则表达式足够灵活,以支持多单词的街道名称,如3120 De la Cruz Boulevard
s= """street 1: 1180 Bordeaux Drive,"
street 1: 3120 De la Cruz Boulevard"
代码如下:
1 import random 2 3 n = 0 4 sum = 0 5 while n < 10: 6 num = random.randint(1, 100) 7 sum = sum + num 8 n += 1 9 print(num, end=",") 10 print() 11 print("10个数的和为:%d" % sum) 12 print("10个数的平均值为:%.2f" % (sum / 10)) 运行结python基础教程果:
人生苦短,我用python!
Graph-U-Nets(二)代码分析 Graph U-Nets通过Pytorch进行实现,开源代码Graph U-Nets,原论文链接Graph U-Nets
直接对作者的代码进行解读
class GraphUnet(nn.Module): def __init__(self, ks, in_dim, out_dim, dim, act, drop_p): """ :param ks: 表示pools层进行的节点采样率,数据类型为float型 """ super(GraphUnet, self).__init__() self.ks = ks # 创建底部的gcn self.bottom_gcn = GCN(dim, dim, act, drop_p) # 对应原文的encoder中的gcn self.down_gcns = nn.ModuleList() # 对应原文的decoder中的gcn self.up_gcns = nn.ModuleList() # 对应原文的encoder中的gPool self.pools = nn.ModuleList() # 对应原文的decoder中的gUnPool self.unpools = nn.ModuleList() # ks的长度表示了gUNets的深度 self.l_n = len(ks) # 构建l_n个子模块 for i in range(self.l_n): self.down_gcns.append(GCN(dim, dim, act, drop_p)) self.
fri是英文字母Friday的缩写,也就是星期五的意思,这是卡西欧手表用来表示时间的,例如星期一,它的英文字母是Monday,缩写形式是Mon;星期二,英文字母Tuesday的缩写为Tue;以此类推下去,都是每个星期的英文字母缩写形式。有时候表示的时间错误,就需要手动调整时间。
卡西欧手表hset是什么意思
hset是英文字母“Hour-set”的缩写,表示的是手表指针时间的调整,当手表显示出这个英文字母的时候也就是说明指手表已经进入设置界面模式,通常情况下,只有在调手表时间的时候会遇到这个字母,卡西欧手表的设置模式有三种,它们分别是秒表模式,闹铃模式,指针设定模式。在调节时间的时候,按住手表左上方的按钮,大概五秒钟之后,界面就会出现hset字母,之后就可以进行时间的调整。
卡西欧lt3是什么意思
卡西欧电子手表上出现了lt3,它有两个层面的意思,一是lt1,二是lt3。不过它们都表示的是手表的背光时间。lt1表示的背光时间是0.15s,lt3表示的背光时间是3s,卡西欧手表产自于日本,在1946年成立,在卡西欧手表发展的多年里,生产者始终秉承着认真严谨的工作准则,因此也促成卡西欧手表逐步走向世界。
卡西欧dst夏令时有必要开吗
在夏令时的时候卡西欧手表没有必要开,夏令时只是一种人文规定的时间制度,目的是为了节省能源,它是充分的利用夏天亮的比较早的一个现象,把日常的时间提前一个小时,也是为了让人们养成一个早睡早起的习惯,既减少了灯光照明的时间,又节约了很多能源。但是如果个人有着固定的工作和休息时间,就完全没有必要启用夏令时。
标题:卡西欧fri什么意思
如若转载,请注明出处:http://www.ikepu.com/xiaozhishi/335713.html
我把<localRepository>标签内容改了,后来再idea中更改配置的时候发现这里改不了。(虽然我不知道这里是干嘛的)
于是我就又把<localRepository>标签改回去了(它原本的内容是:/path/to/local/repo)。
但是还是报这个错,我又在pom.xml中添加了该段代码:
<pluginRepositories> <pluginRepository> <id>alimaven</id> <url>https://maven.aliyun.com/repository/public</url> </pluginRepository> </pluginRepositories> 添加完刷新。在这里刷新:
如果右侧没有maven的话在这里刷新:
总结:
1、改回<localRepository>
2、添加代码块
3、刷新
(当然有可能不用改回<localRepository>标签,但是我懒得试了)
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
RUST++ MOD
(以下在聊天框内输入)
基本命令
/share playername 【shares your doors with a player(共享你的门给一个玩家)】
/unshare playername 【unshares your doors with a player(解除对一个玩家的门共享)】
/help 【Shows commands(显示所有指令)】
/pm "playername" "message" 【private messages a player.(私聊一个玩家,名字必须写全)】
/r message here 【quick reply to last PM(快速回复上一个私聊你的玩家)】
/history 【Shows chat history, last 6 messages by default(显示前6个聊天内容)】
/players 【Shows online players(显示当前在线玩家)】
/location 【Shows the coordinates of the player(显示玩家的当前坐标)】
/ping 【shows latency between client and server(显示服务器的延迟)】
/starter 【gives a configurable starter kit(给予初始装备)】
随着汽车电子应用程序对处理器性能需求的不断提高,现代汽车电子系统中的电子控制单元(ECU)已升级为多核结构.
多核结构处理器 在系统级设计中,汽车电子应用程序由若干构件(SWC)组成. 每个构件实现了应用程序的某一特定功能. 若干构件通过相互协作共同实现应用程序的具体行为. 然而,在ECU设计中, 操作系统调度的对象却是任务(Task). 因此,在进行ECU配置时,须将构件内的可运行实体(Runnable entity)映射到具体任务中,以供操作系统调度执行,这个过程被称为"可运行实体到任务的映射"。
一种较为简单的映射方法是将每个可运行实体单独封装为一个任务, 简称方法1。 但是如此大量的任务会使得系统被频繁调度,增加系统的调度开销。
另一种较为实用的方法是将拥有相同周期的可运行实体映射为一个任务,简称方法2。然而,该方法忽略了可运行实体之间的依赖关系和数据通信,且缺乏在映射过程中对任务实时性的分析。在实际中,可运行实体到任务映射主要根据AUTOSAR标准中关于任务生成的规范,依靠软件工程师的丰富经验来手动完成. 目前的自动映射方法(如方法1和方法2)还不能很好地满足汽车电子系统对实时性的需求。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
有没有更优化更有效的方法来分配任务呢?思考研究一下:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
在AUTOSAR架构中, 汽车电子应用软件由构件(Software Component)组成. 构件的具体行为依靠可运行实体以及可运行实体之间的相互协作来实现. 通常情况下, 一个构件包含一个或多个可运行实体(Runnable Entity). 可运行实体是一段用于实现一个简单算法或某一特定功能的程序代码.
可运行实体之间的通信一般分为构件内部的通信和构件之间的通信. 位于同一构件的可运行实体可以共享构件内部的变量, 而位于不同构件之间的可运行实体则只能通过端口通信. 一般而言, 每个构件存在若干个端口(Port), 这些端口或用于数据通信, 或用于功能调用. 用于发送数据或提供服务的端口被称为P-Port,而用于接收数据或请求服务的端口被称为R-Port.
构件之间的通信关系 上图中有两个SWCs, c1 and c2. c1里面有3个runnables, c2里面有3个runables. 其中a和b分别为构件c1和c2的内部变量, r1和r2共享数据a, r4和r5共享数据b.
再举个ACC自动巡航的例子:
ACC: 自动巡航系统 Automotive adaptive cruise control system 汽车电子巡航控制系统主要由6个构件组成, 分别为传感器数据收集、目标对象选择、自由巡航控制、跟踪控制与加速仲裁、巡航控制与ACC状态机以及巡航控制和ACC车辆观测器. 根据这6个构件的功能和通信拓扑结构构建了39个可运行实体、3个触发关系、7个构件间的数据通信和23个构件内的共享数据,如上所示。
接下来就是正题了,如何把这些runnables分配到具体处理器可以调度的task里面去呢?
RTE触发事件呈现出周期性,但由于任务抢占、任务阻塞等原因而有着明显的抖动.因此,由这些RTE事件所触发的可运行实体也存在着明显的抖动, 即抖动会从以上一个可运行实体传递到下一个运行实体.
可运行实体的执行顺序 很容易理解:将不同周期的可运行实体映射到一个任务内,将会使任务被频繁调度.
a是正常触发执行,b为被阻塞后,会明显存在抖动现象。 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
我们的目标是: 减少抖动时间减少阻塞时间减少调度频繁度减少数据通信量 对于目标1
具有触发关系的任务将会被合并到一个任务中,从而消除触发调用带来的任务抖动。
对于目标2
将两个存在共享变量的可运行实体映射到一个任务中,那么这个共享变量就成为了任务的内部变量. 在任务内部,可运行实体顺序执行,从而避免了阻塞。
对于目标3
打开党内统计,这里比较慢,喝杯茶,等一下...... 这里很慢,要等......
用户名都是管理员,密码在问号那里点一下就看到了,输入密码,登录就可以进入系统了。 用户名都是管理员,密码在问号那里点一下就看到了,输入密码,登录就可以进入系统
恭喜你,现在已成功进入系统,可以接收基本信息数据和报表数据了。依次点击:数据交换-基本信息、基本信息接收,打开基本信息接收。 数据交换处接收基本信息
4.接收数据界面中,点“打开文件”导入下发的基本信息接收数据(提前放到好找的地方)。
点这个导入下发的基本信息接收数据
选中上级组织下发的基本信息数据(文件扩展名为.cxdw),打开即可导入基本信息数据。 选中上级组织下发的基本信息数据(文件扩展名为.cxdw),打开即可导入基本信息数据
确认下发的基本信息中的组织数据名称、数据 确认下发的基本信息中的组织数据名称、数据
选择接收的基本信息数据的组织。 选择接收的基本信息数据的组织
8.点击接收按钮,开始接收基本信息数据,这个时间根据数量和电脑速度,会等上不同的时间。
点击接收按钮,开始接收基本信息数据
9.同样,导入报表数据。
接收报表数据
打开文件找到报表数据准备接收
选中后缀为.cxd的报表数据文件,点击打开,接收数据
确认接收的报表数据信息,下一步开始接收
确认接收的党组织
通过查看党组织信息和党员信息,看数据接收是否正常。
文章目录 前言JWT简介CTFSHOW Web345CTFSHOW Web346前置知识开始做题 CTFSHOW Web347CTFSHOW Web348CTFSHOW Web349CTFSHOW Web350前置知识利用WP如何防御 前言 有些师傅向我咨询WP,索性就发了吧,其实早就写好了,只是懒,在github仓库里囤着,有人说我写错了,这样吧群主改题也不是我能控制的,我能做的就是简简单单分享,也不想重做这些题仅参考
JWT简介 可以看看我的Github总结给自己看的,Y4tacker
CTFSHOW Web345 首先打开题目,查看源码,接下来访问/admin被跳转回主页啥也没有发生
where is flag? <!-- /admin --> 当然知道这个板块是JWT,自然而然我们看一眼Cookie,发现名为auth的一个cookie为
eyJhbGciOiJOb25lIiwidHlwIjoiand0In0.W3sic3ViIjoidXNlciJ9XQ 通过base64解密或者去jwt.io解码也行,得到结果
{"alg":"None","typ":"jwt"}[{"sub":"user"}] 所以我们尝试把sub对应的键值修改
{"alg":"None","typ":"jwt"}[{"sub":"admin"}] 把前面部分和后面部分分别base64-encode
eyJhbGciOiJOb25lIiwidHlwIjoiand0In0 后面
W3sic3ViIjoiYWRtaW4ifV0= 把这两部分用点(.)拼接两部分并去掉等于号
eyJhbGciOiJOb25lIiwidHlwIjoiand0In0.W3sic3ViIjoiYWRtaW4ifV0 此时拿着这一串cookie去替换掉原来的值,之后访问/admin即可获取flag
CTFSHOW Web346 前置知识 JWT支持将算法设定为“None”。如果“alg”字段设为“ None”,那么签名会被置空,这样任何token都是有效的。
设定该功能的最初目的是为了方便调试。但是,若不在生产环境中关闭该功能,攻击者可以通过将alg字段设置为“None”来伪造他们想要的任何token,接着便可以使用伪造的token冒充任意用户登陆网站。
开始做题 首先拿到cookie
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJhZG1pbiIsImlhdCI6MTYwOTIzNjg3MCwiZXhwIjoxNjA5MjQ0MDcwLCJuYmYiOjE2MDkyMzY4NzAsInN1YiI6InVzZXIiLCJqdGkiOiI5NDNkMGIzMjM3ODA2NjU5ZDJlMjA1ZTQyYjMxOTQ5NCJ9.9TUQLyYKs97ceFhZQ4BzkAuug6nCgLoMAbLH88kSOwo 解码
{ "alg": "HS256", "typ": "JWT" } { "iss": "admin", "iat": 1609236870, "exp": 1609244070, "nbf": 1609236870, "sub": "user", "jti": "943d0b3237806659d2e205e42b319494" } 我们需要把sub字段改为admin
但是如果把签名算法改为none的化jwt.io那个网站就无法生成,这个时候可以使用python生成
import jwt # payload token_dict = { "
IE提示console未定义问题解决
参考文章:
(1)IE提示console未定义问题解决
(2)https://www.cnblogs.com/lyl6796910/p/3545221.html
备忘一下。
最近,还是项目的需要,需要从一个库导出数据,并且导入到另一个库中。使用的数据库为DB2.
网上有很多load和import命令的比较,这里我就说下本人使用过后的真实体验和效率比较。
使用load命令,首先要明白当前你要导入的库是否在本地。如果不在本地,就要使用 load client from ...命令,否则load from..即可。无论何时,我们应该优先选用load命令来完成导入数据,因为他的效率比import要高,而且高很多。
这里我谈下import命令。因为各种原因,只能使用import导入数据。
如果直接使用import from c:\data.ixf of ixf insert into table.你会发现速度很慢,到被导入的数据达到上千后,明显感觉的到。平均导入100条数据的时候为1分钟左右。
更好的解决办法是使用参数:compound (范围0-100)。
import from c:\data.ixf of ixf modifiry by compound=100 insert into table.平均导入100条数据的时间为1秒。导入效率提高100倍。当然,在导入的过程中你可以100条或1000条左右数据就自动提交一次,看数据量大小。一般控制在3万条以下提交一次适宜。如:import from c:\data.ixf of ixf commitcount 1000 modifiry by compound=100 insert into table
抖动,是我们在无人机航拍延时中几乎不可避免的。尽管无人机上使用的三轴云台可以有效的防止抖动,但产生的画面抖动是无法避免的。
能够实现“去抖动”效果的功能种类有很多,在不同的视频编辑软件中,有各式各样的增稳应用,目前用的最多的AE和PR了。
我们以PR为例,首先将视频素材拖入到轨道中,在“效果”中搜索“变形稳定器”,拖动“变形稳定器”到素材上,软件就会开始自动分析,如果视频素材较长的话分析稳定的时间就可能会长一些,耐心等待。
软件稳定画面的原理是什么? 变形稳定器去抖动应用首先是对视频片段中的主要动作进行逐帧的分析,这也是为什么前面的分析时间会这么长的原因。分析结束后,软件会知道哪些动作是片段中的正常动作,哪些是抖动的。随后,软件将正常的动作“锁住”。
画面中运动被稳定在画面里,那些抖动去哪里了呢?实际上我们只要缩小视频,就会发现视频实际上被稍微放大了。这是因为为了让画面中的稳定,而不断的变换调整画框去抵消抖动。所以,视频的边缘出了画框,不过这个缩放的程度我们几乎能难看出来。
总结一下:变形稳定器对视频进行了以下处理:
1、 分析并确定抖动部分;
2、 将画面中正常动作设为轴心点;
3、 围绕轴心点轻微移动、旋转画面;
4、 通过放大,弥补因为移动和旋转而产生的空白边缘;
拓展一下: 你还可以在效果空间中,找到变形稳定器,选择“子空间变形”。这种方法可以使画面的稳定调整更加有效。缺点就是可能会出现果冻效应。所以我们也可以选择“位置、缩放、旋转”。
放大画面的缺点是会损失一部分分辨率。所以有时候稳定后画面会有点虚,这个时候我们也可以选择帧处理中的“稳定,合成边缘”模式。
我们还能看到在“高级”界面的下的“更少裁切”,这个意思是如果裁切的更多,那就可以给软件更多的余地,让视频更加稳定流畅,但会减少画面,降低视频的分辨率。如果要保证分辨率,就不能过多的裁剪,这是寻求一个平衡的问题,需要自己把握。当然了,这些选项基本不需要手动调节,除非视频看起来画质下降明显或者稳定效果不理想的时候可以尝试去动这些参数。
以上就是本期的全部内容,希望对你有所帮助,期待创作出更多更好的航拍作品,我们下期再见。
1、刚进入dreamweaver点击新建下方的更多,然后选择空白页,页面类型选择html模板,布局选无就行了。
2、插入一个表格(菜单栏中选择插入,再找到表格),表格里的布局自己根据需要设置,在这里我设置为行数为5,列为1,表格宽度为1000像素。插入表格后,选中整个表格,选中后表框会加黑加粗,在下方设置为居中对齐。
3、在表格第一行插入图像(菜单栏中选择插入,再找到图像),第二行加入滚动字幕。第三行插入表格(方法同上),1行4列,表格宽度为百分之一百。插入表格之后,再选中第三行的表格,选中后表格边框会加黑加粗,在下方设置表格为居中对齐,宽度为20%。
4、第三行中选入一些文字,如首页,李白,杜甫,白居易。新建一个css文件,再建一个css,设置好类型中的颜色和背景中的颜色,加以区分。选中第三行,使用刚才新建的css,再新建一个css,表格的边框使用该css。
5、在第四行插入可编辑区域。点击确定,可编辑区域中的文字即EditRegion3可以去掉,换行可以扩大可编辑区域的面积。
6、在第五行插入可编辑区域,我还插入了一条水平线,并加上了版权。最后保存。此时模板已经建好。
7、新建,模板中的页,找到新建的模板,创建,保存为index.html(即网站的主页),再重新打开新建的模板,在可编辑区预报输入李白的资料,保存为http://libai.com,此时你会发现只有在可编辑区域才能输入内容,其他区域都是不可操作的,这就是模板的特点。同理,在新建两个作为杜甫和白居易的网页。
8、现在就差用超链接把上面做的几个网页连接起来了。在模板中选中首页,在下方html中的链接中输入首页的名称,即index.html,同理,选中李白,杜甫,白居易将他们连起来。超链接做好后在文字下方会多出一条横线。
9、做完了之后在index.html中打开可以看看做出的效果,点击图中的小地球图标就可进行查看。
Database:C:\Windows\Installer\2083d.ipi. Cannot open database file. System error -2147287035 解决:
给temp目录增加完全控制权限
cacls "%temp%" /t /e /c /g Users:F
准备工作: 确保eclipse正确配置了ndk开发环境;
第一步、新建一个安卓项目
第二步、添加一个ndk支持
第三步、在确认系统配置了ndk的环境变量情况下引入jni支持;
第四步、在jni文件夹下创建(.c、.h、Android.mk、Application.mk)等文件;
1、Application.mk文件解析
====== Application.mk ============ #默认,不做修改; APP_CFLAGS += -fexceptions #默认,不做修改; APP_STL := gnustl_static #应用程序平台 APP_PLATFORM := android-19 #APP_ABI := all 表示编译全平台的; #APP_ABI := armeabi,mips,x86 表示编译armeabi, mips和x86三个平台的; APP_ABI := armeabi armeabi-v7a 2、Android.mk文件解析
====== Android.mk ============ #这个mk文件标识了两个模块,一个是共享库so文件,一个是bin文件 #第一个模块编译的是共享的so库 # 这个基本上就是个固定的格式了,放在 Android.mk的一个个有效行,表示本文件的路径。 LOCAL_PATH := $(call my-dir) #清除之前定义的 LOCAL_XXX 变量,通常每个模块都要写一次。 include $(CLEAR_VARS) # 模块名,本例中 LOCAL_MODULE := util ,生成的共享库文件 libutil.so LOCAL_MODULE := util # 模块中的源文件列表 LOCAL_SRC_FILES := UninstalledObserver.c kesyPrint.c # 预先定义的宏定义,预编译时使用到。这里定义了 KE_DEBUG 宏 #KE_DEBUG :print log when it is defined LOCAL_CFLAGS += -DKE_DEBUG # 引用的链接库,和linux命令行一样, -L后接寻找库的目录, -l后接库的名称,本例中是log LOCAL_LDLIBS += -L$(SYSROOT)/usr/lib -llog # BUILD_SHARED_LIBRARY表示编译的是so共享库 # BUILD_STATIC_LIBRARY 编译静态库 # BUILD_EXECUTABLE 编译可执行文件 include $(BUILD_SHARED_LIBRARY) 2.
项目场景: 公司二代产品,window下远程登录Ubuntu调试linux程序,Ubuntu下交叉编译EC20平台下的程序
问题描述: 之前编译好好的,最近重新打开VS19 二代产品的工程编译,发现编译不了了,报莫名的错误,比如有些变量明明定义了,ctrl+左键可以调到定义的地方,但就是报错
原因分析: 代码没做什么修改,工程设置也没做修改,那么很可能就是Ubuntu下的环境变了。
用给EC20交叉编译时,会拷贝几个阿里云MQTT的静态库到系统LIB下,可能会有影响。
删除后
解决方案: 查看交叉编译的Makefile存在拷贝静态库到系统目录下的情况
找到这些静态库,删除
再在window下 VS201919重新生成解决方案
还是有错误出现
这个是有非法字符,把哪一行整行删除,确定要删除整行,重新输出
在官网上下载好哈录屏或者是OBS直播软件后,打开软件后,添加“显示器捕捉”,但一直黑屏,录制出来的视频文件只有声音,没有具体画面,今天小编给大家讲解如何解决这个问题。
Obs黑屏如下:
好哈录屏软件黑屏如下:
上面软件出现黑屏的原因有几种情况,我这里给大家讲解一下:
因为以上软件都是需要GPU加速支持,因为当你录制视频的时候,使用的是显卡上面的内存,显卡GPU 运算速度快,这样录制的时候才不会卡。
1.检查更新显卡驱动是否正常安装,如果用户不知道怎么检查,可以去网上下载"驱动精灵",一键检查。按到软件的提示,对驱动进行升级安装,安装完成后,最后把电脑重启一下,这样保证显卡驱动能正常使用
2.显卡驱动也安装了,但还是显示黑屏,这个时候你有可能是没有安装 DirectX ,你需要去微软官网下载DirectX 并且安装。下载地址在这里:DirectX End-User Runtime Web Installer 3.如果以上两步骤都还不行,好哈录屏或者OBS都提示"Failed to initialize video. Your GPU may not be supported, or your graphics drivers may need to be updated."
那你可以参考这个链接的教程:https://zhuanlan.zhihu.com/p/106848354?from_voters_page=true 以上步骤,小编都是亲测的,完全有效,已经解决了黑屏问题:
一、区别:
1)innerHTML:
从对象的起始位置到终止位置的全部内容,不包括Html标签。
2)outerHTML:
除了包含innerHTML的全部内容外, 还包含对象标签本身。
二、例子1:
<div id="test"> <span style="color:red">test1</span> test2 </div> 1)innerHTML的值是“<span style="color:red">test1</span> test2 ”
2)outerHTML的值是<div id="test"><span style="color:red">test1</span> test2</div>
三. 例子2:
<body> <div>aa</div> </body> 通过document.body.innerHTML获取到的内容是:<div>aa</div>
通过document.body.outerHTML获取到的内容是:<body><div>aa</div></body>
Δ 需要注意的是outerHTML属性只有IE浏览器才有,其它浏览器是不支持的
需求:如何修改subtitle.conf 配置文件下的label_number 的值和 cg_color的值 ?
思路:创建一个一样的模板文件,进行替换
代码:
public static void main(String args[]) { /** * 仅供本地测试使用 */ String filePath="/Users/电脑名称/Desktop/subtitle.conf";//目标路径 String templatePath="/Users/电脑名称/Desktop/subtitle.template";//模板路径 Map<String,String> updateMap=new HashMap<String,String>(); updateMap.put("position1","333");//替换内容 updateMap.put("position2","444");//替换内容 try { InputStream ins=new FileInputStream(templatePath); byte[] bytes= IOUtils.toByteArray(ins); String bufs=new String (bytes); updateContent(updateMap,bufs,filePath); } catch (IOException e) { e.printStackTrace(); } } public static void updateContent(Map<String,String> layouts, String bufs,String filePath){ try { Map<String,String> orig=new HashMap<String,String>(); orig.putAll(layouts); for (Map.Entry entry:orig.entrySet()){ bufs= StringUtils.replace(bufs,"#"+entry.getKey()+"#",entry.getValue().toString()); } IOUtils.write(bufs,new FileOutputStream(filePath));//修改的目标文件路径 } catch (IOException e) { e.
日期在数据分析中常常是极其重要的一个维度,今天整理了21个最常用的日期函数组合,分需~ 1、=TODAY() 计算当前的系统日期 2、=NOW() 计算当前系统日期和时间 3、= NOW()-TODAY() 计算当前是几点几分。 4、=YEAR(TODAY()) 计算当前日期的年份 5、=MONTH(TODAY()) 计算当前日期的月份 6、=DAY(TODAY()) 计算当前日期是几号。 7、=WEEKDAY(TODAY(),2) 计算今天是星期几。 8、=EDATE(TODAY(),1) 计算当前日期之后一个月的日期。 9、=EOMONTH(TODAY(),1) 计算下个月最后一天的日期。 10、=EOMONTH(TODAY(),0)-TODAY() 计算今天到本月底还有多少天。 11、="12-31"-"1-1"+1 计算今年有几天。 12、=TODAY()-"1-1"+1 计算今天是今年的第几天。 13、=WORKDAY(TODAY(),1) 计算下个工作日是哪天。 14、=EOMONTH(NOW(),0)-TODAY() 计算这个月还有几天。 15、=DAY(EOMONTH(NOW(),1)) 计算下个月有几天。 16、=WEEKNUM(NOW()) 计算今天是本年度的第几周。 17、=IF(COUNT(-"2-29"),"是","否") 计算今年是不是闰年。 18、=DATEDIF("2008-2-28",TODAY(),"m") 计算自2008年2月28日到今天有几个月。 19、=MONTH(MONTH(TODAY())*10) 计算今天属于第几季度 20、=COUPDAYBS(NOW(),"9999-1",4,1)+1 计算今天是本季度的第几天。 21、=COUPDAYS(NOW(),"9999-1",4,1) 计算当前季度有几天。