海康威视MV-CA060-11 GM工业相机首次安装与MVS客户端操作

文章目录 1.系统介绍1.1 相机 海康威视 MV-CA060-11 GM 黑白相机1.2 WOLOS工业相机镜头WL2808-6MP 600万像素定焦8mm原装1/1.8镜头1.3 软件介绍:机器视觉工业相机客户端MVS V3.2.1(Windows)1.4 主机与相机IP设置1.4.1 主机IP设置1.4.2 相机IP设置 1.5 打开相机进行测试 1.系统介绍 硬件整体预览 1.1 相机 海康威视 MV-CA060-11 GM 黑白相机 1.2 WOLOS工业相机镜头WL2808-6MP 600万像素定焦8mm原装1/1.8镜头 1.3 软件介绍:机器视觉工业相机客户端MVS V3.2.1(Windows) 下载链接:https://www.hikrobotics.com/service/soft.htm?type=1 1.4 主机与相机IP设置 将硬件按1.1节组装好,连上主机网口,接通电源 1.4.1 主机IP设置 1.4.2 相机IP设置 打开MVS客户端,找到相机,右键设置IP,修改为同一网段 1.5 打开相机进行测试

关于微软白板和微软商店不能使用的问题

我电脑上已经出现过两次这个问题,起初是发现微软白板不能使用,联系微软客服,搞了半天,试了各种办法也不行。后来发现跟微软商店有关,因为商店也没法用了。 一直以为是账号的问题。经过很久才发现是用了某VPN把网络代理改了导致的,其他的网页什么都能打开,就微软商店出问题了。 在控制面版-网络连接-Internet属性-局域网设置上把代理禁用,就好了。 看到网上这个问题的人很多,于是在这里记一笔,希望对大家有帮助。

使用Altium Designer软件如何导入3D模型 方法三 —— 自己用Altium Designer软件建立简单的模型

使用Altium Designer软件如何导入3D模型 方法三 —— 自己用Altium Designer软件建立简单的模型 使用Altium Designer软件导入3D模型已经进入最后一种方法了,这个方法是可以使用Altium Designer软件建设简单的模型。 一、用Altium Designer软件建立简单的模型 如图所示,我们需要建立以下LED规格书中的3D封装,开始建立我们自己的3D封装。 1.1、 常规操作,打开Altium Designer软件中的封装库文件,选中需要添加3D封装的元器件,点击Place 》3D Body ( 快捷键 P-B ),进入3D Body [mm] 对话框; 1.2、 按如图先选择 圆柱体Cylinder ,然后根据规格书中半径Radius改为0.8mm,高度Height改为1.1mm,点击Load from file ,进入Choose Model对话框 ; 1.3、 放入合适位置后,按如图所示选择调整栅格,或者快捷键Ctrl+Shift+G; 1.4、 点击Place 》3D Body ( 快捷键 P-B ),进入3D Body [mm] 对话框,进行正方体的设计,按如图选择挤压Extruded,全部高度Overall Height改为0.3mm,大小Size改为1.6mm和3.2mm,点击OK; 1.5、 放入合适的位置后,看一下3D效果,这只是大概的3D模型,不可能像专业软件一样这么接近实物,对于结构干涉确认确实绰绰有余; 1.6、 常规操作又来了,选中已更新好的封装,右击选中Update PCB With LED_S_1206,进入Component(s)Update Options对话框; 1.7、 点击OK ; 1.8、 PCB文件中的3D封装已经更新完成,如图所示。 总结: 至此使用Altium Designer软件导入3D模型的三种方法已经讲述完毕,感谢各位的阅读。

PHP微信上传图片素材41005错误

错误信息:errcode":41005,“errmsg”:"media data missing hint 下面是微信给的接口信息:实际上我要传的参数就一个图片的绝对路径,一定要看好不是url而是绝对路径 报41005的错误大致就两个问题 参数错误:绝对路径不对,下方为我自己拼接的绝对路径 $media = dirname(dirname(__DIR__)).'/public/uploads/20200602/a.jpg; curl的写法问题:php5.5与php5.5以上的版本curl的写法也是不一样的 // 拼接绝对路径 D:/phpstudy_pro/WWW/tpdemo.top/public/uploads/20200602/a.jpg $media = dirname(dirname(__DIR__)).'/public/uploads/20200602/a.jpg; $token = "通过appid兑换的token"; $url = 'https://api.weixin.qq.com/cgi-bin/material/add_material?access_token='.$token.'&type=image'; $data = array( // php5.6版本以上 "media"=> new \CURLFile(realpath($media)), // php5.5版本 // "media"=> '@' . realpath ( $media ), ); // curl $ch = curl_init(); if (class_exists('\CURLFile')) { // php版本5.6以上 curl_setopt($ch, CURLOPT_SAFE_UPLOAD, true); } else { if (defined('CURLOPT_SAFE_UPLOAD')) { // php5.5版本 curl_setopt($ch, CURLOPT_SAFE_UPLOAD, false); } } curl_setopt_array( $ch, array( // 路径 CURLOPT_URL => $url, // 在http请求头中Referer的内容 CURLOPT_REFERER => $url, // TRUE 时将根据 Location: 重定向时,自动设置 header 中的Referer:信息 CURLOPT_AUTOREFERER => true, // 获取信息以字符串返回,不直接输出 CURLOPT_RETURNTRANSFER => true, // 检查公用域名 0-不检查 1-检查SSL证书是否存在公用域名 2-检查公用域名是否与主机名匹配 默认为2 CURLOPT_SSL_VERIFYHOST => 0, // 连接时间单位(秒) CURLOPT_CONNECTTIMEOUT => 0, // 允许 cURL 函数执行的最长秒数。 CURLOPT_TIMEOUT => 30, // 在HTTP请求中包含一个"

GWAS - plink介绍与安装(Mac)

此教程写给像博主一样的小白,欢迎各路大神批评指正 GWAS GWAS全称“全基因组关联分析”,使用统计模型找到与性状关联的位点,用于分子标记选择(MAS)或者基因定位。 简单来讲,就是找出基因中哪些序列变异(SNP)与疾病相关。即就是统计一个数,找出与表型最有显著性意义的那些基因(位点)。分析方法有:逻辑回归(表型数据为二元);线性回归(表型数据为连续性变量);表型数据正态分析(如果不是正态分布,需转换处理为正态分布)。 R包、plink和EMMAX都可以做GWAS,但是据说后两者做GWAS更快,更容易写出pipeline。以及实验室师兄师姐均采用plink,因此选择学习这个工具。 #plink介绍 PLINK是一个免费的开源全基因组关联分析工具集,在SNP数据统计,过滤,GWAS分析中都可以用得上,而且计算速度很快。直接去百度上搜索plink就可以很容易就找到plink官网(http://www.cog-genomics.org/plink2)功能大概有以下几种: 数据管理: SNP数据格式的转换,合并两个或多个文件,提取SNP子集,以二进制文件格式压缩数据等。质量控制的SNP数据统计: 计算丢失基因型率,等位基因,基因型频率,HWE测试,个体和个体对的近亲繁殖,IBS和IBD统计,LD区域计算等。GWAS关联分析Meta分析 #plink下载 官网现在更新呦plink1.9与plink2.0版本,可以根据自己需要下载,我选择的是1.9 stable版本。 plik下载方便,只要找到相应的系统的版本就可以进行下载了,下载链接地址为:http://www.cog-genomics.org/plink2/下载完解压即可立即使用。 此时在终端中直接输入plink不可行哦 电脑会告诉你没有plink这个命令-bash: plink: command not found 使用方法(mac版) 打开terminal,cd到解压到的文件夹(把plink拖入终端即可) 之后每次使用需要cd到此路径,输入./plink再输入参数,如: ./plink --help ./plink --vcf Arab.vcf --allow-extra-chr --maf 0.05 --recode --out Arab 若需要在终端中直接调用plink,则需要把plink写入全局路径 vim .bash_profile #然后按i键进入编辑模式,输入以下语句,其中路径为解压plink的文件夹路径 export PATH=/Users/limingzhu/Downloads/plink_mac_20200428:$PATH #输完后回车,按ESC :w #表示保存 :q #表示退出 source .bash_profile #更新即可 之后即可在终端中直接调用plink命令啦!!冲鸭!

使用Altium Designer软件如何导入3D模型 方法二 —— 网上下载已有的3D模型,然后导入封装库

使用Altium Designer软件如何导入3D模型 方法二 —— 网上下载已有的3D模型,然后导入封装库 上一篇博客讲述了使用Altium Designer软件导入3D模型的第一种方法,现在讲述一下第二种方法。在讲述之前,我先再重复一下这三种方法。 1、 请求结构工程师进行3D模型建模,然后保存STEP格式,我们导入封装库中; 2、 网上下载已有的3D模型,然后导入封装库; (注:推荐一个网站https://www.3dcontentcentral.cn/ ) 3、 自己用Altium Designer软件建立简单的模型。 一、从网上下载已有的3D模型 这里还要再重复一下,一个神奇的网站,可以得到大部分的3D封装,网址如下: 链接: https://www.3dcontentcentral.cn/. 下面讲述一下如何从这个网站下载封装,比如我们需要QFN-20封装。 1.1、 打开网址链接,搜索QFN,特殊的我只输入关键部分,因为这样可以找到更合适的,我们找到QFN-20封装,左击; 1.2、 根据如下图进行选项,一定要选择STEP格式的文件,点击下载 ; 1.3、 点击蓝色部分的QFN-20; 1.4、出现一个对话框,选好保存的位置之后,点击下载即可; 1.5、 打开文件保存的位置,解压后就能看到我们下载的文件; 二、将下载好的3D模型导入封装库 3D封装已经下载完成,现将下载好的3D模型导入到封装库中,这个操作在方法一中已经讲过,但是我还是在讲一遍,加深一下我的印象,也免得来回切换我上一个博客。 2.1、 打开PCB封装库文件,选中需要加载3D封装的元器件,点击 Place 》3D Body ( 快捷键 P-B ) ,进入3D Body [mm] 对话框 ; 2.2、 按如图先选择 Generic 3D Model ,然后点击Load from file ,进入Choose Model对话框 ; 2.3、 选择我们需要的STEP格式文件,点击打开,返回3D Body [mm] 对话框; 2.4、 点击OK,初步确定XYZ的位置与方向,随后调整XYZ方向的角度,直到确定3D的位置和方向合适; 2.5、 3D封装加入完成,如图所示,保存即可。 三、将更新的3D模型封装更新到PCB文件中 3.1、 选中已更新好的封装,右击选中Update PCB With QFN-20 3*3MM,进入Component(s)Update Options对话框;

Oracle百万级数据秒级插入

insert into IME.BM_MATERIEL_INFO select 'GD2GDH3QF3FM'||LPAD(rownum,5,0), 'per'||LPAD(rownum,5,0), 'Per'||LPAD(rownum,5,0), '60507713920d4dd8a62f2184c6d91399','','','','','','','','',1,'','','','','','','','','','','','','','','','','','','','','','','','','','fce419c57c6b422ab98223ae6f29e0ae','','','','','','','','','PLSQL',SYSDATE,'','',0,1,'','616118bb4b1240eda298caeb109715d7','','','','','','','','','','','','','','','','','','','','','','','','','','','','','' FROM xmltable('1 to 50000');

Vue axios,fetchjsonp数据请求

1 axios数据的请求 <template> <div id="axiosinfo"></div> </template> <script> //在组件里面使用可以直接引入 import Axios from "axios"; export default { name: "axiosinfo", mounted() { //async函数的异步 async function getaxios() { let user = await Axios.get("/getuser"); return user; } getaxios() .then(res => { console.log(res.data.result); }) .catch(err => { console.log(err); }) .finally(() => { console.log("最终执行"); }); //在main.js里面配置好axios 全局引入 /*this.$axios.get("/getuser").then((res)=>{ console.log(res.data.result) }).catch((err)=>{ console.log(err); });*/ } }; </script> 2 fetchjsonp数据的请求 <template> <div id="fetchinfo"> <p>fetchinfo</p> </div> </template> <script> //在当前组件里面使用fetchjspon直接引入 import FetchJspon from "

网站提示不安全,怎么解决?

Google Chrome浏览器对HTTP明文协议提出不信任政策,在Chrome56版本起,在登录界面使用HTTP协议直接在地址栏贴上“不安全”标识。到2017年的10月底Chrome 62稳定版,将不支持http的范围扩大,隐身模式下所有http页面被标记为“不安全”。 大数据时代,给人们的生活带来了极大的便利,足不出户就能买到自己喜欢的东西,使得越来越多的人访问在线购物网站,而网络攻击分子也在不断改进他们的技术。 他们常常会建立一个非常接近于购物网站的网站,然后诱导消费者访问他们的假冒网站,除非消费者仔细检查站点的URL,否则很容易被钓鱼网站攻击。 为了保护消费者的资金安全,谷歌等各大主流浏览器将所有未加密的HTTP页面标记为“不安全”,并提醒用户“不要在该网站输入任何敏感信息(如密码或卡号信息),因为攻击者可能会盗取这些信息”,从而帮助用户识别“不安全”的网站,提高用户安全防范意识。 如何解决网站的“不安全”标识 目前,解决网站的“不安全”标识的最佳解决方案就是:适应时代潮流及安全需要,将网站整体迁移到HTTPS。 与HTTP明文协议对比,HTTPS具备两大网络安全功能:加密以及身份验证。 加密:HTTPS传输协议可对客户端与服务器之间的传输数据进行加密,防止第三方的窃取、篡改、窥视等中间人攻击。 身份验证:客户端用户可通过HTTPS背后的SSL证书对服务器进行身份验证,辨别真假网站,避免掉入钓鱼网站的陷阱。 当然,这并不代表部署了SSL证书的网站就一定是安全的,它只是代表您在该网站输入的任何信息(卡号信息、登录信息等)都不会被第三方截取,由于域名型DV SSL证书不需要验证网站真实身份,很多钓鱼网站也获取了SSL证书来消除浏览器“不安全”的警告。 如果是企业型OV SSL证书,点击挂锁图标可以查看到公司单位名称等信息,如果是增强型EV SSL证书,可以直接在地址栏显示单位名称,可有效防范被钓鱼网站攻击,同时有助于提升企业形象,增加用户安全感。 然而,如果不部署SSL证书,浏览器提示“不安全”警告会给用户一个很好的警示,因为未加密的电子商务网站对消费者构成了广泛的风险,即使不是钓鱼网站,该未加密网站也没有能力保护用户的资料,那么就会导致用户流失。 那么网站如何将http切换成https? 1、申请SSL证书 网站要实现https加密,首先要申请SSL证书,申请SSL证书之前,需要制作CSR文件,可在我们沃通官网在线生成工具生成CSR文件,并妥善保存生成好的CSR和Key文件,然后将CSR提供给SSL证书供应商来申请SSL证书。 将CSR提交给CA,CA机构审核通过后才能颁发证书,对于DV SSL证书只需验证域名管理权限,一般10-30分钟即可颁发,OV SSL证书和EV SSL证书除了要验证域名管理权限外,还要严格审查网站真实身份,以证明申请单位是一个真实存在的合法实体,CA机构需要在人工核实后才能签发证书,一般需要3-5个工作日。 2、安装证书 在收到CA颁发的SSL证书后,可以将证书部署到服务器。 3、修改网站链接 SSL证书安装成功后,您的服务器就支持https了,这时要把网站上的全部链接修改成https的形式。 4、全站做301转向 网站链接整改以后,要做全站301跳转,这样可以让搜索引擎收录更快、更好的抓取新的链接来替换旧的链接,同时让新的链接更快的恢复权重与排名。 5、提交给百度站长平台做HTTPS验证 可以使用百度搜索资源平台提供的https认证功能进行认证,让百度更好的抓取、展现我们的https页面。

Loadrunner 内容验证检查

为什么要进行内容验证,在我们回放脚本的时候我们想知道点击某个按钮是不是跳转到对应的页面,页面有没有对应的标题,登录成功后页面有没有某段文字提示等,所以要进行内容检查 第一步 点击回放-选择运行时设置,选择internet协议中的首选项即perference勾选启动图像和文本检查 loadrunner12要先在工具-选项中设置启用缩略图 然后点击查看-快照,当点击缩略图上的其中一张图片,在快照上就会显示那张图片上的各种信息 然后点击右键添加文本检查 可以根据自己的具体情况匹配字符 点击确定后,脚本会生成一个查找函数 然后开始回放,回放成功后,结果会显示出来,我是迭代了5次 我按照这个函数名查找了一下

HCIA-BigData HDFS实验

第一次接触HDFS需要注意:在linux中使用hdfs时要把linux的文件系统和hdfs文件系统分开,两个文件系统容易搞混 1.查看命令使用说明 2.查看linux文件系统和hdfs文件系统的根目录 3.在HDFS文件系统上创建/test/test1目录 4.将本地文件test.txt放到HDFS指定目录/test/test1 5.将HDFS文件系统的/test/test1目录下的test.txt文件下载到本地的/test1目录下 6.从本地剪切粘贴到HDFS 7.显示文件内容 8.在文件末尾追加数据:将本地文件ttt.txt中的内容追加到hdfs的/test/test1/test.txt中 出现这个问题,原因是node03的DataNode坏掉了,hdfs需要三个节点写入,只要有一个失败就会失败,解决方法修改配置文件关闭三节点写入 或者 修复node03节点 9.更改文件所书权限 10.合并下载多个文件:注意下载后成一个文件 11.删除文件或者文件夹 12.统计文件系统的可用空间信息 13.统计文件夹的大小信息 14.统计一个指定目录下的文件数量

使用Altium Designer软件如何导入3D模型 方法一——结构工程师建模,我们导入封装库中

使用Altium Designer软件如何导入3D模型方法一 —— 结构工程师建模,我们导入封装库中 我们设计电路图除了布线和功能的实现外,还需要让结构工程师确认元器件是否干涉,特别是接口部分,所以我们的元器件封装需要有尽可能接近的3D模型,这篇文章主要讲述加入3D的模型的方法。我们获得3D模型一般有三种: 1、 请求结构工程师进行3D模型建模,然后保存STEP格式,我们导入封装库中; 2、 网上下载已有的3D模型,然后导入封装库; (注:推荐一个网站https://www.3dcontentcentral.cn/ ) 3、 自己用Altium Designer软件建立简单的模型。 一、请求结构工程师进行3D模型建模,然后我们导入封装库中 1.1、 我们请求结构工程师让其按照如下的图纸进行3D建模,结构工程师建模完成后,生成STEP格式的文件发给我们; 1.2、 打开AD软件,进入建立的封装库,点击PCB Library,找到对应的元器件封装,点击Place 》3D Body ( 快捷键 P-B ),进入3D Body [mm] 对话框; 1.3、 按如图先选择 Generic 3D Model ,然后点击Load from file ,进入Choose Model对话框 ; 1.4、 选择我们需要的STEP格式文件,点击打开,返回3D Body [mm] 对话框; 1.5、 点击OK,初步确定XYZ的位置与方向,随后调整XYZ方向的角度,直到确定3D的位置和方向合适; 1.6、 3D封装加入完成,如图所示,保存即可。 二、将更新的3D模型封装更新到PCB文件中 封装更新结束了,我们的任务还没有结束,此时我们的PCB文件还没有完成更新,如图所示。 2 .1、 选中已更新好的封装,右击选中Update PCB With plate spring -duplicate,进入Component(s)Update Options对话框; 2.2、 点击OK ; 2.3、 PCB文件中的3D封装已经更新完成,如图所示。

JS中展开操作符的应用

基本操作 这个就不写了 移除对象的属性 // 传入参数有待优化 const delProp = ({ Prop1, Prop2, ...rest }) => rest 属性排序 const sortProp = object => ({ Prop1: undefined, ...object }) 有值的情况添加该属性 更多操作有待研发 ...(Prop1 && { Prop1 })

永久短网址生成 可以永久使用的短链接推荐

一、使用场景 微博、短信、微信在推送信息的时候都有字符的数量限制,如果分享一个长网址,很容易就超出限制,发不出去。短网址服务可以把一个长网址变成短网址,方便在社交网络上传播。 二、需求 微信中链接过长容易被系统屏蔽,导致推送信息他人无法看到,或者是整个信息被收起来! 短信、微博中字符数超级严格一旦超过了规定的字符数。就会导致信息发送失败! 综上几个现在最长的场景,很显然,要尽可能的短的链接。因此在很多时候我们需要用到短网址! 三、使用工具推荐 短链接在线生成工具: ①、http://maiyurl.cn/ ②、http://dogdwz.cn/ 使用说明: 1、复制要缩短的网址。打开上述平台提供的缩短网址服务。网站提供新浪短链接(T.cn)/腾讯短链接(Url.cn)2种短链接格式!你可以缩短任何长网址,然后按Ctrl +C(Win)或命令+C(MAC)将其复制到剪贴板。 2、将要缩短的URL粘贴到缩短器字段中。把你的光标放在剪贴板的网站上,然后粘贴到复制的URL中。Ctrl +V(Win)命令+V(MAC)。点击“生成”按钮。所有更短的网站都有一个按钮旁边的URL字段,点击时,它会为您创建缩短的URL。您的新缩短的URL将被显示。自己保存好缩短的链接就可以了! API接口地址 ①、http://maiyurl.cn/yunapi.html ②、http://dogdwz.cn/api.html 使用说明: 将短网址api接口地址中 "http://www.baidu.com"换成需要缩短的网址,然后直接复制前往浏览器中打开即可。 PHP调用演示: $url = ‘http://www.baidu.com‘; $api_url = ‘http://www.qqdwz.cn/sina.php?url_long=http://www.baidu.com; $short_url = file_get_contents($api_url); echo $short_url; JAVA调用演示: public static void main(String path[]) throws Exception { URL u = new URL("http://www.qqdwz.cn/sina.php?url_long=http://www.baidu.com"); InputStream in = u.openStream(); ByteArrayOutputStream out = new ByteArrayOutputStream(); try { byte buf[] = new byte[1024]; int read = 0; while ((read = in .

JPA+H2内嵌数据库

开发个人项目的时候有时候会遇到,用数据库过于麻烦,这时候内嵌一个H2是一个不错的选择。 更何况H2提供管理控制台界面,可以直接执行Sql语句 项目里要内嵌H2的话需要引入H2的依赖 <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> <version>1.4.197</version> </dependency> 版本选择上是因为比较新的H2不会自动建库 这是能自动建库里的比较新的版本[不知道以后会不会回归这一特性] 用的是SpringBoot + Jpa的项目 yml配置如下 其中 /console 指的是项目路径/console 这个地址会变成H2的Web管理地址 当然也可以DataGrip去连接 但是一般来说没有必要 spring: datasource: url: jdbc:h2:tcp://0.0.0.0:9092/./rest platform: h2 username: sa password: rest driverClassName: org.h2.Driver jpa: database-platform: org.hibernate.dialect.H2Dialect hibernate: ddl-auto: update properties: hibernate: show_sql: false use_sql_comments: true format_sql: true h2: console: enabled: true path: /console settings: trace: false web-allow-others: true server: port: 5555 启动H2的话需要调用H2 tools包 直接正则读取配置文件application.yml里面数据源的配置 用H2生成一个数据库 然后JPA直接连接 代码如下 package com.binary.rest; import org.

“数据湖”:概念、特征、架构与案例

写在前面: 最近,数据湖的概念非常热,许多前线的同学都在讨论数据湖应该怎么建?阿里云有没有成熟的数据湖解决方案?阿里云的数据湖解决方案到底有没有实际落地的案例?怎么理解数据湖?数据湖和大数据平台有什么不同?头部的云计算玩家都各自推出了什么样的数据湖解决方案?带着这些问题,我们尝试写了这样一篇文章,希望能抛砖引玉,引起大家一些思考和共鸣。感谢南靖同学为本文编写了5.1节的案例,感谢西壁的review。 本文包括七个小节:1、什么是数据湖;2、数据湖的基本特征;3、数据湖基本架构;4、各厂商的数据湖解决方案;5、典型的数据湖应用场景;6、数据湖建设的基本过程;7、总结。受限于个人水平,谬误在所难免,欢迎同学们一起探讨,批评指正,不吝赐教。 一、什么是数据湖 数据湖是目前比较热的一个概念,许多企业都在构建或者计划构建自己的数据湖。但是在计划构建数据湖之前,搞清楚什么是数据湖,明确一个数据湖项目的基本组成,进而设计数据湖的基本架构,对于数据湖的构建至关重要。关于什么是数据湖,有如下定义。 Wikipedia是这样定义的: A data lake is a system or repository of data stored in its natural/raw format,[1] usually object blobs or files. A data lake is usually a single store of all enterprise data including raw copies of source system data and transformed data used for tasks such as reporting, visualization, advanced analytics and machine learning. A data lake can include structured data from relational databases (rows and columns), semi-structured data (CSV, logs, XML, JSON), unstructured data (emails, documents, PDFs) and binary data (images, audio, video).

Linux命令中没有某命令

找不到unzip命令 如果你如法使用unzip命令解压.zip文件,可能是你没有安装unzip软件,下面是安装unzip的步骤:先切换为root用户,然后输入”yum install zip"命令安装zip,提示输入时,请输入y,最后输入“yum install unzip"命令安装unzip,提示输入时,请输入y。 找不到rz命令 rz命令用于进行图形化的方式传输文件。当rz命令无效时,运行如下指令进行安装即可“yum install lrzsz -y”,在安装的过程中,会有交互,输入yes(或者y),在指令上加上参数: -y ,可以避免在安装的过程中输入参数。默认是:yes,安装完成后,当再次输入:rz 指令的时候,会弹出如下窗口(说明安装成功): 未找到wget命令 wget命令用来从指定的URL下载文件。wget非常稳定,它在带宽很窄的情况下和不稳定网络中有很强的适应性,如果是由于网络的原因下载失败,wget会不断的尝试,直到整个文件下载完毕。如果是服务器打断下载过程,它会再次联到服务器上从停止的地方继续下载。这对从那些限定了链接时间的服务器上下载大文件非常有用。我们可以使用root用户输入“yum install wget -y”命令来安装wget命令。

关闭虚拟机的防火墙

CentOS6 切换至root用户,然后输入“service iptables stop”命令即可关闭防火墙。 CentOS7 切换至root用户,先输入“systemctl stop firewalld”命令关闭防火墙,然后输入“systemctl disable firewalld”命令禁用防火墙即可。

推荐几款精美耐看的xshell配色方案

使用方法: 新建文本文档,然后拷贝下面的代码到文档里,保存为.xcs格式,最后将.xcs导入XShell配色方案即可。 配色方案对应的代码 ubuntu.xcs 这款配色方案是仿ubuntu的标准配色,精美,但是貌似看久了眼睛会有点辣眼睛哈! [ubuntu] text(bold)=ffffff magenta(bold)=ad7fa8 text=ffffff white(bold)=eeeeec green=4e9a06 red(bold)=ef2929 green(bold)=8ae234 black(bold)=555753 red=cc0000 blue=3465a4 black=000000 blue(bold)=729fcf yellow(bold)=fce94f cyan(bold)=34e2e2 yellow=c4a000 magenta=75507b background=300a24 white=d3d7cf cyan=06989a [Names] count=1 name0=ubuntu Solarized Dark.xcs 这款配色方案是我最喜欢的配色,护眼耐看,配合vim的Solarized Dark配色简直就是完美! [Solarized Dark] text=00ff40 cyan(bold)=93a1a1 text(bold)=839496 magenta=dd3682 green=859900 green(bold)=586e75 background=042028 cyan=2aa198 red(bold)=cb4b16 yellow=b58900 magenta(bold)=6c71c4 yellow(bold)=657b83 red=dc322f white=eee8d5 blue(bold)=839496 white(bold)=fdf6e3 black=002b36 blue=268bd2 black(bold)=073642 [Names] name0=Solarized Dark count=1 isayme.xcs 这款也是一款护眼主题,舒适耐看,值得长期使用! [isayme] text(bold)=eaeaea magenta(bold)=ff00ff text=ffffff white(bold)=eaeaea green=00c000 red(bold)=d20000 green(bold)=00ff00 black(bold)=808080 red=c00000 blue=113fcc black=000000 blue(bold)=0080ff yellow(bold)=ffff00 cyan(bold)=00ffff yellow=c0c000 magenta=c000c0 background=222222 white=c0c0c0 cyan=00c0c0 [Names] count=1 name0=isayme 导入到XShell的步骤

Linux环境下离线安装和配置nginx

Linux安装nginx 序言参考的文章:[Nginx安装与使用](https://www.cnblogs.com/skynet/p/4146083.html) 一、下载依赖包下载说明 二、解压三、安装nginx1、进入解压后的nginx的目录2、创建安装目录3、编译nginx的安装目录4、安装nginx 四、修改配置文件五、查看版本和检测1、查看版本2、检测 六、启动nginx七、遇到的坑1、nginx的版本2、下载依赖包3、编译nginx 八、补充nginx的相关命令1、停止nginx2、nginx重新加载 九、安装过程中可能遇到的问题 序言 由于测试环境的nginx是已经搭建完成的,把搭建完成的nginx打包后传到生产的主机上,在sbin目录下测试nginx,就会报错找不到路径,所以我决定自己重新安装,于是经过不断的踩坑和请教,诞生了这篇文章。 参考的文章:Nginx安装与使用 一、下载依赖包 nginx:http://nginx.org/en/download.html (版本:nginx-1.16.1 tar.gz) pcre:https://sourceforge.net/projects/pcre/files/pcre/8.41/(版本:pcre-8.41.tar.gz) zlib:http://www.zlib.net/(版本:zlib-1.2.11.tar.gz) oppenssl:https://www.openssl.org/source/(版本:openssl-1.1.1g.tar.gz) 下载说明 我之所以没有在生产中用yum或wget,是由于用不了,所以只能下载到本地后传到生产中。 1、下载zlib的位置: 2、下载openssl: 二、解压 tar -zxvf nginx-1.16.1.tar.gz tar -zxvf openssl-1.1.1g.tar.gz tar -zxvf pcre-8.41.tar.gz tar -zxvf zlib-1.2.11.tar.gz 三、安装nginx 1、进入解压后的nginx的目录 cd nginx-1.16.1 2、创建安装目录 由于我是安装在普通用户下的,所以需要创建安装目录。 建议:最好是安装在普通目录, 因为:我们这边的规定是:所有生产的nginx都必需在普通用户下编译和启停。 mkdir installs 3、编译nginx的安装目录 ./configure --prefix=/home/nginxsrv/nginx/nginx-1.16.1/installs --with-pcre=../pcre-8.41 --with-openssl=../openssl-1.1.1g --with-zlib=../zlib-1.2.11 4、安装nginx make && make install 四、修改配置文件 cp nginx.conf nginx.conf.bak.fanhf.202006021600.orig vim nginx.conf 先备份原来的,再将端口号80修改为8081 修改后的部分配置如下: server { listen 8081; server_name localhost; #charset koi8-r; #access_log logs/host.

java考试系统demo_在线考试_在线答题_考试系统

考试系统功能介绍:在线学习;在线考试;试卷管理;成绩查询;收藏题目;单选,多选,判断题目 添加,删除,修改,批量发布,批量撤销发布,批量导入(支持excel)等; 开发工具以及所用技术:ssm框架+eclispe+mysql+jdk1.8+tomcat7 系统部分截图: 单选管理: 多选管理: 判断管理: 在线学习: 在线考试: 可视化统计分析: 感兴趣的的同学私我相互交流。

Diamond书写FPGA代码

Dimond软件使用Verilog语言编写FPGA代码 新建工程 1.打开Diamond软件 2.然后选择创建工程 File->New->Project 3.新建文件夹选择该文件夹为工程路径(不可有中文) 之后一路next,结果如下: 编写源代码 1.右击impl1中的input Files->Add 如果是自己重新写代码,选择New File 如果是想要加入已经编写好了的代码,选择Existing File 以加入新文件为例 选择Verilog语言,文件名可任取(不可有中文,此处以与门为例) 之后根据verilog语言的语法规则编写相关的代码 module yumen ( input a,b, output s ); and(s,a,b); endmodule 编写测试代码 1.测试代码用于仿真 基本写法为 测试 模块的基本写法: `timescale 1ns/1ps,含义为:时延单位为1ns,时延精度为1ps。 module 测试模块名(); reg 输入信号名; … wire 输出信号名; … 实例引用设计模块; initial begin … //在这里添加激励(可以有多个这样的结构) end always begin … //在这里添加时钟信号 end initial begin … //在这里添加输出语句(在屏幕上显示仿真结果) end //diamond软件中需要例化相关的模块 如: yumen u1(…);//括号内需要写完所有的输入输出端口,无需加上input和output。 endmodule 与门测试代码: `timescale 1ns/1ns module yumenTest(); reg a, b; //输入为reg类型 wire s; //输出为wire类型 initial begin //激励 a=0;b=0; end initial begin #1 a=1;b=0; #1 a=1;b=1; #1 a=0;b=1; end yumen u1(a,b,s); //例化与门 endmodule 仿真 当测试代码和源代码编写完毕之后,可以进行仿真,但仿真前需要综合。

解决CentOS7中ens33中不显示IP问题

问题描述:新装的CentOS7系统,输入“ifconfig"命令显示不出ip地址 解决办法:切换为root用户,然后输入“vim /etc/sysconfig/network-scripts/ifcfg-ens33”命令,将“ifcfg-ens33”文件中的”ONBOOT=no"改为“ONBOOT=yes",最后输入”service network restart"命令即可。

爬虫中遇到登陆问题的解决方法

在爬取网页时,由于会遇到登录问题而被阻止,此时通过改变头部信息来解决此问题 以爬取京东商品页面为例 1、先登录京东账号 2、摁F12进入调试页面,然后刷新页面,在Network栏中的第一行会出现一个document文件 3、在那个文件上点右键,Copy→Copy as cURL(bash) 4、进入网站 https://curl.trillworks.com/# 将curl command转为Python requests如图 5、复制右侧的headers信息,放到代码中,并在get方法中添加headers = headers来修改 import requests url = "https://search.jd.com/Search?keyword=%E5%B1%B1%E5%9C%B0%E8%BD%A6&qrst=1&wq=%E5%B1%B1%E5%9C%B0%E8%BD%A6&stock=1&page=1&s=1&click=1" headers = { 'cookie': 'hf_time=1589015315632; shshshfpa=f971b69f-f0ff-c3a5-c0b6-5cdc66bb3ba9-1589015314; __jdu=1589015312018306045356; unpl=V2_ZzNsbUdeQRd9WhMAZ0xZDW8fF1xFV19Fd19GSCsdXwBuBEFeQVBCFmlJKFRzEVQZJkB8XkBeQQklTShUeBFVBGMzEVxBVl8UchRHVGoZWw5lBhleRWdDJXUJR1V6Gl4HbgYibXJXQSV0OEZQchFdBWMBEl5DV0oXdA9HUX8bWAJXVBBYElATFnIUEgZ%2BHEAAZ1YUQUtSFBFpDUFRfUoLAGVTEA9EZ0UT; __jda=122270672.1589015312018306045356.1589015312.1589015313.1591000469.2; __jdc=122270672; shshshfp=e60b23c677f56f7de454dd9e75dd9593; areaId=7; ipLoc-djd=7-446-451-0; shshshfpb=papRCtkjrYmQjx1z%208td4gw%3D%3D; wlfstk_smdl=ovi6wdn0id567r9dnz3n8eo5ja29vw5j; TrackID=1wnyJS9zQtA1Xz9kMKFtKggxuYI0d5lUrC_ySVCL0SkGlk-qsl0FskEQwaUnuLrlWw036wa1LEy5yuj8Jl48N559nTbhOrGcNPy0Y44FeMfk; pinId=pt-09zETHx8p0oVxsmXtTTSM5TY_oidA; pin=%E6%B2%89%E9%BB%98%E7%9A%84%E6%80%9D%E6%83%B3%E7%8A%AF; unick=%E6%B2%89%E9%BB%98%E7%9A%84%E6%80%9D%E6%83%B3%E7%8A%AF; ceshi3.com=000; _tp=NYrLbYIabKc8yOVdkCkHbs7ByvhIM3%2BOLTVEe3DHDIcRs2p4qg7bsDieKH4THslbeQW0ODro8nL0TU0I2temcg%3D%3D; _pst=%E6%B2%89%E9%BB%98%E7%9A%84%E6%80%9D%E6%83%B3%E7%8A%AF; __jdv=122270672|kong|t_1000023384_129805|zssc|48339cde-d499-4061-a3f1-a52486b22602-p_1999-pr_2383-at_129805|1591000496693; rkv=V0700; 3AB9D23F7A4B3C9B=NB2B47LNZTEFHGRNKWGM4PKE6H6NGEDPOHVY5GMC7TBTVHQITB7QQ2OL5ZFJMKVVY5FJMCLMSRRG2LSVEH3GV6PDRE; thor=B8CE64DE7AFCD9D5A2AD3B5D4F008F260F069EDC7DA977213C9CAF86AF2897F5DE867AE9EF30E9C96E72D36E9E743194FE1C72106AC4EDBA3BCF2DB7203C9AF2876BBDAF4FED245054B5284F459DB5A098AF8F7D3661D0B044D918AA44991B88F618EE16BB5A0ACDC14768B7EA13DC22BBCD30AD3F72A95F7D3503100973B942; qrsc=3; __jdb=122270672.9.1589015312018306045356|2.1591000469; shshshsID=b2bc0dae971b23dc87a3e49b9e2281f7_6_1591000797147', 'accept-encoding': 'gzip, deflate, br', 'accept-language': 'zh-CN,zh;q=0.9', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3314.0 Safari/537.36 SE 2.

Vue 事件车

1:非父子之间的事件车传值 在main.js之中定义一个新的对象 //非父组件之间的通信使用事件车 来源于new Vue() Vue.prototype.EmitEvent=new Vue(); 左: <template> <div id="menuchild"> 我是左端的子组件 <!-- 非父子之间的传递数据 --> <button @click="sendmsg">传递数据</button> </div> </template> <script> export default { name: "menuchild", methods: { sendmsg() { //发送数据发布自定义数据携带数据 this.EmitEvent.$emit("go-event", { name: "张三", age: 20 }); } }, mounted() { this.EmitEvent.$on("go-left", function(res) { console.log(res); }); } }; </script> 右: <template> <div id="contentinfo"> 我是右端的子组件 <button @click="sendto">发送左边的数据</button> </div> </template> <script> export default { name: "contentinfo", mounted() { //该组件渲染完成之后 自动监听自定义事件 //new Vue对象 this.

微信公众号调用config 接口,开启debug模式,常见错误及解决方法

调用config 接口的时候传入参数 debug: true 可以开启debug模式,页面会alert出错误信息。以下为常见错误及解决方法: 1、 invalid url domain当前页面所在域名与使用的appid没有绑定,请确认正确填写绑定的域名,仅支持80(http)和443(https)两个端口,因此不需要填写端口号(一个appid可以绑定三个有效域名)。 2、invalid signature签名错误。建议按如下顺序检查: 1、确认签名算法正确,可用http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=jsapisign 页面工具进行校验。 2、确认config中nonceStr(js中驼峰标准大写S), timestamp与用以签名中的对应noncestr, timestamp一致。 3、确认url是页面完整的url(请在当前页面alert(location.href.split(’#’)[0])确认),包括’http(s)😕/‘部分,以及’?‘后面的GET参数部分,但不包括’#'hash后面的部分。 4、确认 config 中的 appid 与用来获取 jsapi_ticket 的 appid 一致。 5、确保一定缓存access_token和jsapi_ticket。 6、确保你获取用来签名的url是动态获取的,动态页面可参见实例代码中php的实现方式。如果是html的静态页面在前端通过ajax将url传到后台签名,前端需要用js获取当前页面除去’#‘hash部分的链接(可用location.href.split(’#’)[0]获取,而且需要encodeURIComponent),因为页面一旦分享,微信客户端会在你的链接末尾加入其它参数,如果不是动态获取当前链接,将导致分享后的页面签名失败。 3、the permission value is offline verifying这个错误是因为config没有正确执行,或者是调用的JSAPI没有传入config的jsApiList参数中。建议按如下顺序检查: 1、确认config正确通过。 2、如果是在页面加载好时就调用了JSAPI,则必须写在wx.ready的回调中。 3、确认config的jsApiList参数包含了这个JSAPI。 4、permission denied该公众号没有权限使用这个JSAPI,或者是调用的JSAPI没有传入config的jsApiList参数中(部分接口需要认证之后才能使用)。 5、function not exist当前客户端版本不支持该接口,请升级到新版体验。 6、为什么6.0.1版本config:ok,但是6.0.2版本之后不ok(因为6.0.2版本之前没有做权限验证,所以config都是ok,但这并不意味着你config中的签名是OK的,请在6.0.2检验是否生成正确的签名以保证config在高版本中也ok。) 7、在iOS和Android都无法分享(请确认公众号已经认证,只有认证的公众号才具有分享相关接口权限,如果确实已经认证,则要检查监听接口是否在wx.ready回调函数中触发) 8、服务上线之后无法获取jsapi_ticket,自己测试时没问题。(因为access_token和jsapi_ticket必须要在自己的服务器缓存,否则上线后会触发频率限制。请确保一定对token和ticket做缓存以减少2次服务器请求,不仅可以避免触发频率限制,还加快你们自己的服务速度。目前为了方便测试提供了1w的获取量,超过阀值后,服务将不再可用,请确保在服务上线前一定全局缓存access_token和jsapi_ticket,两者有效期均为7200秒,否则一旦上线触发频率限制,服务将不再可用)。 9、uploadImage怎么传多图(目前只支持一次上传一张,多张图片需等前一张图片上传之后再调用该接口) 10、没法对本地选择的图片进行预览(chooseImage接口本身就支持预览,不需要额外支持) 11、通过a链接(例如先通过微信授权登录)跳转到b链接,invalid signature签名失败(后台生成签名的链接为使用jssdk的当前链接,也就是跳转后的b链接,请不要用微信登录的授权链接进行签名计算,后台签名的url一定是使用jssdk的当前页面的完整url除去’#'部分) 12、出现config:fail错误(这是由于传入的config参数不全导致,请确保传入正确的appId、timestamp、nonceStr、signature和需要使用的jsApiList) 13、如何把jsapi上传到微信的多媒体资源下载到自己的服务器(请参见文档中uploadVoice和uploadImage接口的备注说明) 14、Android通过jssdk上传到微信服务器,第三方再从微信下载到自己的服务器,会出现杂音(微信团队已经修复此问题,目前后台已优化上线) 15、绑定父级域名,是否其子域名也是可用的(是的,合法的子域名在绑定父域名之后是完全支持的) 16、在iOS微信6.1版本中,分享的图片外链不显示,只能显示公众号页面内链的图片或者微信服务器的图片,已在6.2中修复 17、是否需要对低版本自己做兼容(jssdk都是兼容低版本的,不需要第三方自己额外做更多工作,但有的接口是6.0.2新引入的,只有新版才可调用) 18、该公众号支付签名无效,无法发起该笔交易(请确保你使用的jweixin.js是官方线上版本,不仅可以减少用户流量,还有可能对某些bug进行修复,拷贝到第三方服务器中使用,官方将不对其出现的任何问题提供保障,具体支付签名算法可参考 JSSDK微信支付一栏) 19、目前Android微信客户端不支持pushState的H5新特性,所以使用pushState来实现web app的页面会导致签名失败,此问题已在Android6.2中修复 20、uploadImage在chooseImage的回调中有时候Android会不执行,Android6.2会解决此问题,若需支持低版本可以把调用uploadImage放在setTimeout中延迟100ms解决 21、require subscribe错误说明你没有订阅该测试号,该错误仅测试号会出现 22、getLocation返回的坐标在openLocation有偏差,因为getLocation返回的是gps坐标,openLocation打开的腾讯地图为火星坐标,需要第三方自己做转换,6.2版本开始已经支持直接获取火星坐标 23、查看公众号(未添加): "menuItem:addContact"不显示,目前仅有从公众号传播出去的链接才能显示,来源必须是公众号 24、ICP备案数据同步有一天延迟,所以请在第二日绑定 参考连接:JS-SDK说明文档:附录5-常见错误及解决方法

Vue 组件的挂载与父子组件的传值

1:将需要挂载的组件放置在component之中 2:全局挂载在main.js之中 import Vue from 'vue' import App from './App.vue' import getTime from './component/child/getTime' //全局注册 整个项目的组件都可以使用 //注册给整个vue 对象 //引入需要注册的全局组件 //在vue类的方法 component里面进行注册 Vue.component('v-times',getTime); Vue.component('v-times',{ template:"<div>{{msg}}</div>",//字符串的标签模板 data(){ //当前模板的数据 return { msg:"时间" } } }); new Vue({ el: '#app', render: h => h(App) }) 3:局部挂载至当前父组件之内 <script> //组件在谁里面使用 在谁里面注册 这种注册方式叫做局部注册 //局部注册只能在父组件里使用 import topTitle from "./component/systemtoptitle"; import leftMenu from "./component/systemleftmenu"; import rightContent from "./component/systemrightcontent"; //注册组件 //注册完成之后使用组件 export default { name: "app", components: { //注册 //常规写法键值写法 "

Python中字符串的方法之split

split() 方法可以实现将一个字符串按照指定的分隔符切分成多个子串,这些子串会被保存到列表中(不包含分隔符),作为方法的返回值反馈回来。该方法的基本语法格式如下: str.split(sep,maxsplit) 此方法中各部分参数的含义分别是: str:表示要进行分割的字符串; sep:用于指定分隔符,可以包含多个字符。此参数默认为 None,表示所有空字符,包括空格、换行符“\n”、制表符“\t”等。 maxsplit:可选参数,用于指定分割的次数,最后列表中子串的个数最多为 maxsplit+1。如果不指定或者指定为 -1,则表示分割次数没有限制。 在 split 方法中,如果不指定 sep 参数,那么也不能指定 maxsplit 参数。 l = "Name:Yuanzheng,Age:21".split(":") print(l) print("Age=" + l[2]) l = "Name:Yuanzheng,Age:21".split(":",maxsplit=1) print(l) Output: ['Name', 'Yuanzheng,Age', '21'] Age=21 ['Name', 'Yuanzheng,Age:21'] 需要注意的是此方法只能通过指定的某一个字符分割字符串,而要实现实现多符号分割的话,就要调用re模块中的split()函数

笔记本外接显示器之后扩展屏分辨率问题

VGA线损坏会影响屏幕分辨率 背景: 当笔记本电脑想扩展显示器(即双屏),需要外接另一台显示器。这时候就需要笔记本与外接显示器之间使用数据线连接,可以使用VGA(传输模拟信号)、DVI(传输数字信号)、HDMI(传输数字信号,同时还同时传输音频信号),需要根据自己的笔记本和显示器接口来判断可以使用哪种数据传输线。 本文:采用 VGA数据传输线来连接笔记本和外接显示器。 问题:当时用VGA线连接之后发现外接显示器显示图像比例失调。且调整分辨率时只有两个可选项。 可能原因: 1、显卡驱动是否更新(很早以前买显示器遇到过这个问题,需要更显笔记本显卡驱动) 2、VGA线损坏导致(这次遇到的问题)。 VGA、DVI、HDMI区别: https://jingyan.baidu.com/article/4dc408488241bec8d846f152.html 调整扩展显示器分辨率详细过程: 1、屏幕空白处右击,点击“显示设置”。 2、进入显示设置之后,点击"标识",就会在两台屏幕上看到各个显示器的标识,可以知道外接显示器是显示器1还是2 3、得知扩展显示器是2之后,点击画面中的显示器2就会变蓝,则以下就是对显示器2的设置了。 4、拉动滚动条到下面就会找到分辨率的设置,即可以选择扩展显示器的最佳分辨率。 问题: 使用损坏的VGA线时,分辨率只有两种选项,如下: 更换正常的VGA线之后,分辨率选项恢复正常,即可以选择最佳分辨率,如下:

2020 支付宝 上传应用公钥并获取支付宝公钥

本文讲解python对接支付宝网站支付的准备工作,以及为什么需要APPID、公钥及私钥 1、获取应用私钥及应用公钥 进入沙箱应用页 点击设置,选择公钥加签模式,然后下载支付宝密钥生成器 在支付宝密钥生成器中 选择密钥格式为 PKCS1(非JAVA适用) 然后点击 生成密钥 , 即可得到应用公钥 及应用私钥 2、获取支付宝公钥 这里我们需要复制 应用公钥到,网页的公钥字符这里,然后保存设置,即可得到我们的支付宝公钥 然后将支付宝公钥复制保存到本地 txt文件中 在应用公钥和支付宝公钥文件中,需要用-----BEGIN PUBLIC KEY-----包裹公钥-----END PUBLIC KEY----- 应用私钥则需要 -----BEGIN PUBLIC KEY-----包裹私钥-----END PUBLIC KEY----- 3、为什么需要APPID、公钥与私钥 APPID:应用审核通过后会生成应用唯一标识(APPID),要想对接支付宝支付接口就必须得有这个作为参数 为了保证我们网站跟支付宝接口对接,并且保证两者间数据不泄露,我们需要一个暗号,即公钥和私钥: 私钥:用于加密请求参数;公钥:用于解密通过 私钥加密后的 请求参数。 现在,我们有了应用公钥、应用私钥,支付宝公钥,那么我们一般的对接流程是: 当我们网站请求支付宝支付接口时,需要传递经过应用私钥加密后的参数 当支付宝收到网站发起的请求时,会使用应用公钥进行解密参数。(由于之前我们在得到支付宝公钥的过程中,需要自己的应用私钥上传到了支付宝,所以支付宝有我们的应用公钥。 当支付宝向我们网站 发送支付结果消息或其他请求时,会用支付宝私钥对请求参数进行加密 当我们网站接收到了支付宝信息时,可以使用支付宝公钥进行解密

HTML5、css3笔记整理复习

HTML5、css3笔记整理: 单纯的为了回忆一下HTML网页制作。 要制作html网页,只需将文件的后缀名改为name.html和name.css; css文件通过在html的头部标签里添加标签和css文件相关联,就可以将css样式作用于html文件。 由于文章过长,这里插入一个bilibiliCSS3的超链接 尝试制作HTML网页: HTML的基本格式:(大部分标签都是成对出现) <!DOCTYPE HTML> <head> <meta charset = "UTF-8/gb2312"> //文档语言为UTF-8或者gb2312 <title>Html Title Name</title> //网页名称 <link rel = "stylesheet" href = "css.address"> //连接css文件 </head> <body> //网页内容 </body> </HTML> 在万能的Visual Studio Code 中,html文件开头只需输入一个英文“!”按换行键则会出现除//link标签外的所有基础标签。 下面我们进行标签复习: 块标签(有宽、高):p,h1~h6,列表标签(ul无序列表、ol有序列表、dl自定序列表)li,dl,dd; 行标签(有宽无高):a,img,audio,video,span; 音频标签: <audio src = "地址" controls = "constrolls" autoplay/> 加上:muted属性,则为静音; 文件地址格式有:mps,ogg,wav等; controls 为播放器 视频标签: <video controls/> <source src = "地址"> 好像在html5版本中可以不用source标签直接在video标签里面加src地址。 表格:<table> <td> 我就不详细列了,现在基本没人用了,显得很low;(cellpacing单元格间隔,cellpading单元格填充) 表单:<form></form> <input = “……”>input 可以决定表单的很多样式,如下: text 文本 radio 单选框 checkbox 复选框 range 范围 data 日期 reset 重置按钮 rearch 搜索框 tel 电话 color 色板 button 普通按钮 img 图片按钮 select 下拉框 (option 下拉框的选项) texarea 多行文本域 number 数字 email 邮箱 表单提示信息: oninvalid = "

hackthebox - inception (考点:dompdf & apache配置& webdav & 3128 proxy &tftp & apt update 提权& ssh-key提权)

1 扫描 80进网页信息搜集, 3128是代理访问端口,要想到后面可能要利用这个设置代理,连接靶机不对外的端口等。 Not shown: 998 filtered ports PORT STATE SERVICE VERSION 80/tcp open http Apache httpd 2.4.18 |_http-server-header: Apache/2.4.18 (Ubuntu) |_http-title: Inception 3128/tcp open http-proxy Squid http proxy 3.5.12 |_http-server-header: squid/3.5.12 |_http-title: ERROR: The requested URL could not be retrieved 2 http信息搜集 dirbuster扫目录没有价值发现 邮箱那里想burp抓包也发现抓不了,什么鬼 看前端源码ctrl+u,不细看可能还不能发现可以下拉。。拉到最底部,有新目录提示 看version版本,搜漏洞 0.6.0 3 LFI漏洞 根据漏洞提示进行lfi。先试试经典的/etc/passwd http://10.10.10.67/dompdf/dompdf.php?input_file=php://filter/read=convert.base64-encode/resource=/etc/passwd 以及因为我们从nmap里扫出这个http服务器是apache,apache的配置文件lfi读取可以参考这个靶机kioptrix5,里面也给了参考网站查询这里 也就是/etc/apache2/sites-enabled/000-default.conf 但是我一连接,就是下载pdf,然后这个pdf打开后还不能滑动,只能看一部分加密内容。。什么鬼 所以查看内容,全部改用curl curl http://10.10.10.67/dompdf/dompdf.php?input_file=php://filter/read=convert.base64-encode/resource=/etc/passwd curl 10.10.10.67/dompdf/dompdf.php?input_file=php://filter/read=convert.base64-encode/resource=/etc/apache2/sites-enabled/000-default.conf 这下就在终端里显示出完整的加密码了,看着就是base,拉去解密,读出,可知有个 cobb用户 以及查apache那个,出现了webdav的配置目录和里面的密码。webdav网上科普也有很多,这篇靶机granny也有类似的工具利用 再继续查。拿到密码。解密 curl http://10.10.10.67/dompdf/dompdf.php?input_file=php://filter/read=convert.base64-encode/resource=/var/www/html/webdav_test_inception/webdav.passwd webdav_tester:babygurl69 4 webdav利用 然后参考granny那篇靶机的工具利用,进行put上传。随便put传张图片,可以读取看到,ok

python读写kepware数据

import sys sys.path.insert(0, "..") import logging from opcua import ua, Client from time import sleep if __name__ == "__main__": # from IPython import embed logging.basicConfig(level=logging.WARNING) client = Client("opc.tcp://192.168.136.206:49320") try: client.connect() sfc = client.get_node('ns=2;s=GK.SFC.sfcCode') a_start_trigger = client.get_node('ns=2;s=GK.A.start.trigger') a_start_success = client.get_node('ns=2;s=GK.A.start.success') a_report_trigger = client.get_node('ns=2;s=GK.A.report.trigger') a_report_success = client.get_node('ns=2;s=GK.A.report.success') a_verify_trigger = client.get_node('ns=2;s=GK.A.verify.trigger') a_verify_success = client.get_node('ns=2;s=GK.A.verify.success') a_transfer_trigger = client.get_node('ns=2;s=GK.A.transfer.trigger') a_transfer_success = client.get_node('ns=2;s=GK.A.transfer.success') while True: sleep(1) logging.warning('本次操作SFC:【' + str(sfc.get_value()) + '】') a_s_t = a_start_trigger.get_value() a_s_s = a_start_success.

vue/cli4 单元测试与覆盖率体系搭建

探索 vue-cli4 创建集成 mocha + chai 的项目中,如何写单元测试和查看单元测试覆盖率。 1、建立一个集成单元测试的项目 首先创建一个新的项目 vue-cli4-unit-mocha-chai-nyc: vue create vue-cli4-unit-mocha-chai-nyc # 选择手动配置 ? Please pick a preset: zcloud (router, vuex, less, babel, eslint, unit-jest) default (babel, eslint) ❯ Manually select features # 选择需要的功能 ? Please pick a preset: Manually select features ? Check the features needed for your project: ◉ Babel ◯ TypeScript ◯ Progressive Web App (PWA) Support ◉ Router ◉ Vuex ◉ CSS Pre-processors ◉ Linter / Formatter ◉ Unit Testing ❯◉ E2E Testing # 使用 history 模式 ?

ROS-读取pcd点云数据进行滤波并在Rviz中显示

环境: Ubuntu16.04 ROS Kinetic C++ 创建工作空间: cd Downloads/ROS mkdir -p PointCloudFilter_ws/src cd PointCloudFilter_ws/src catkin_init_workspace cd .. catkin_make 将该工作空间的setup文件路径放到Home路径下的.bashrc文件中: 创建功能包 cd src catkin_create_pkg pointcloudfilter_pkg pcl_conversions pcl_ros roscpp sensor_msgs 在功能包路径下的src文件夹中新建pointcloudfilter_.cpp文件,并输入下面的代码: #include <iostream> #include<ros/ros.h> #include<pcl_conversions/pcl_conversions.h> #include<sensor_msgs/PointCloud2.h> #include <pcl/io/io.h> #include <pcl/io/pcd_io.h> #include <pcl/point_types.h> #include <pcl/filters/passthrough.h> #include <pcl/filters/extract_indices.h> #include <pcl/filters/voxel_grid.h> #include <pcl/filters/crop_box.h> #include <pcl/visualization/cloud_viewer.h> int main(int argc,char **argv) { ros::init(argc, argv, "pointfilter"); ros::NodeHandle nh; ros::Publisher pcl_pub=nh.advertise<sensor_msgs::PointCloud2>("pointfilter_output",1); pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>); pcl::PCDReader reader; reader.read("/home/wyh/Downloads/ROS/pcdreadshow_ws/src/read_pcd/src/data/pcd/data_1/0000000001.pcd", *cloud); pcl::VoxelGrid<pcl::PointXYZ> vg; //滤波对象 pcl::PointCloud<pcl::PointXYZ>::Ptr cloudFiltered(new pcl::PointCloud<pcl::PointXYZ>);//创建保存体素滤波后的点对象cloudFiltered vg.

迁移学习的几种迁移方式

迁移学习是当前深度学习领域的一系列通用的解决方案,而不是一个具体的算法模型。Pre-training + fine-tuning(预训练+调参) 的迁移学习方式是现在深度学习中一个非常流行的迁移学习方式,尤其是以图像领域为代表,很多时候会选择预训练的 ImageNet对模型进行初始化。 在迁移学习中,有几个概念,domain(域)和task(任务) 、source(源) 和target(目标)需要理清楚。 - domain:一般指的是特征空间和概率分布 - task:包含标记空间和目标预测函数 - source和target:前者是用于训练模型的域/任务,后者是要用前者的模型对自己的数据进行预测/分类/聚类等机器学习任务的域/任务。 迁移学习的种类根据迁移的内容可以归纳为以下几种: -Instance-based TL(样本迁移):source domain数据不可以整个直接被用到target domain里,但是在source domain中还是找到一些可以重新被用到target domain中的数据。对它们调整权重,使它能与target domain中的数据 匹配之后可以进行迁移。 - Feature-representation-transfer(特征迁移):找到一些好的有代表性的特征,通过特征变换把source domain和target domain的特征变换到同样的空间,使得这个空间中source domain和target domain的数据具有相同的分 布。 - Parameter-transfer(参数/模型迁移):假设source tasks和target tasks之间共享一些参数,或者共享模型hyperparameters(超参数)的先验分布。这样把原来的模型迁移到新的domain时,也可以达到不错的精度。Pre-training + fine-tuning 的迁移学习方式就可以理解为是一种Parameter-transfer,这种方法也是最常用的迁移学习的应用。 在Pre-training + fine-tuning模式下的迁移学习过程中,常用的训练trick和调参方法总结有如下几点: - 把预训练模型当做特征提取器: TensorFlow或者Pytorch都有ImageNet上预训练好的模型,将最后一层全连接层(原始的是1000个类别或者更多)改成你自己的分类任务的种类进行输出,或者把最后一层直接去掉换成自己的分类器, 剩下的全部网络结构当做一个特征提取器。 -fine-tuning: 通常来说,直接把预训练模型来用效果不一定足够好,因此需要进行fine-tuning(微调)。fine-tuning需要冻结网络的前几层参数,只更新网络结构的后面几层和最后的全连接层,这样效果会更好。 -Learning rate: 在迁移学习的微调过程中一般不建议使用过大的学习率,通常来说1e-5是比较合适的选择。 迁移学习往往还和你的任务中的数据关系密切,可以考虑以下几种情况。 新的数据集较小,并且和pre-trained model所使用的训练数据集相似度较高: 由于数据集较小,在进行finetune存在overfit的风险,又由于数据集和原始数据集相似度较高,因此二者不论是local feature还是global feature都比较相 近,所以此时最佳的方法是把CNN网络当做特征提取器然后训练一个分类器进行分类新的数据集较大,并且和pre-trained model所使用的训练数据集相似度较高: 很明显,此时我们不用担心overfit(过拟合),因此对全部网络结构进行finetune是较好的。新的数据集较小,并且和pre-trained model所使用的训练数据集差异很大: 由于数据集较小,不适合进行finetune,由于数据集差异大,应该在单独训练网络结构中较高的层,前面几层local的就不用训练了,直接固定权值。在实际 中,这种问题下较好的解决方案一般是从网络的某层开始取出特征,然后训练SVM分类器。新的数据集较大,并且和pre-trained model所使用的训练数据集差异很大: 本来由于数据集较大,可以从头开始训练的,但是在实际中更偏向于训练整个pre-trained model的网络。

项目编程总结 2020-04月份~2020-05月份

springboot框架从0到1的搭建 连接到postgresql,mybatis 公司自有框架的前后端包,jar包冲突 打包步骤 idea intel的生疏到熟练快捷键的使用 zookeeper搭建 参照:https://www.cnblogs.com/zhangkaimin/p/10947553.html kafka搭建 kafka搭建需要先搭建zookeeper,还需要熟知一些kafka的命令 参照:https://www.cnblogs.com/zhangkaimin/p/10947553.html postgresql数据库的性能调优 表创建的时候字段大小合理化(现有的表结构varchar长度一般在255,实际用不到这么大) 查询列表语句中,对于查询字段尽量不用正则表达式,复杂的处理函数 查询结果字段精简,以用到的为准,越少响应时间越短 另外postgresql中的except关键字的使用(相当于oracle中的minus关键字) RestTemplate对接post/get请求 很好用,就是不支持https,如果需要支持,需要添加额外代码支持ssl校验 httpClient对接post/get请求 较为底层的http请求对接,推荐使用RestTemplate post请求返回json字符串转换为对象 alibaba的json,返回参数需要先转化为JSONObject,再使用JSONObject.toJavaObject转化为具体对象类 公司自有框架的使用 获取用户userCode 对接单点登录 xshell/xftp/linux系统(linux命令待深化) chmod 777 /opt/xxx rm -f xx.log mv xxx.log /opt/ mkdir xxx tcpdump抓包命令的使用+wireshark的分析使用 tcpdump 127.0.0.1 -w /opt/one.log 参照:https://www.cnblogs.com/ggjucheng/archive/2012/01/14/2322659.html

Altium Designer软件生成Gerber文件及CAM350进行检查

Altium Designer软件如何生成Gerber文件及CAM350进行检查 我们完成PCB板图的设计并交给供应商进行打样或是量产时,我们一般不会直接给供应商PCB源文件,那就需要生成gerber文件。今天就讲一讲如何生成gerber文件及用CAN350软件 进行检查。 一、生成gerber文件 1、 选择 File 》Fabrication Outputs 》Gerber Files ,进入Gerber Setup对话框; 2、 在General标签页中 选择 Millimeters和 4:4; 3、 在layers标签页中,Plot Layers选择All On,Mirror Layers选择All off; 5、 在Drill Drawing标签页中,Dill Drawing Plots 和 Drill Guide Plots 都选择plot all used drill pairs; 6、 在Apertures标签页中,选择Embedded apertures(RS274X); 7、在Advanced标签页中,按如图所示进行选项,选择好后,点击OK,gerber文件第一步完成; 8、 完成后会出现如下文件,——完整的文件还没结束哦。 二、生成钻孔文件 1、 gerber文件还需要有钻孔文件,选择 File 》 Fabrication Outputs 》NC Drill Files,进入NC Drill Setup对话框; 2、 按照下图进行选择,点击OK,进入Import Drill Data 对话框; 3、 选择Units,进入NC Drill Import Settings 对话框,按如图选择进行确认,如下图所示,然后选择OK; 4、 分别将生成的两份文件保存;

OVS DPDK--介绍(一)

DPDK简介 DPDK是X86平台报文快速处理的库和驱动的集合,不是网络协议栈,不提供二层,三层转发功能,不具备防火墙ACL功能,但通过DPDK可以轻松的开发出上述功能。 DPDK的优势在于,可以将用户态的数据,不经过内核直接转发到网卡,实现加速目的。主要架构如图所示: 传统的socket方式与DPDK对比: DPDK关键技术点: 使用大页缓存支持来提高内存访问效率。利用UIO支持,提供应用空间下驱动程序的支持,也就是说网卡驱动是运行在用户空间的,减小了报文在用户空间和应用空间的多次拷贝。利用LINUX亲和性支持,把控制面线程及各个数据面线程绑定到不同的CPU核,节省了线程在各个CPU核来回调度。LOCKLESS,提供无锁环形缓存管理,加快内存访问效率。收发包批处理 ,多个收发包集中到一个cache line,在内存池中实现,无需反复申请和释放。PMD驱动,用户态轮询驱动,可以减小上下文切换开销,方便实现虚拟机和主机零拷贝。 OVS+DPDK OpenvSwitch 以其丰富的功能,作为多层虚拟交换机,已经广泛应用于云环境中。Open vSwitch的主要功能是为物理机上的VM提供二层网络接入,和云环境中的其它物理交换机并行工作在Layer 2。 传统host ovs工作在内核态,与guest virtio的数据传输需要多次内核态和用户态的数据切换, 带来性能瓶颈。 Ovs+Dpdk和Ovs本身之间的区别可以由下图简单来表示: 在早期OVS的版本中,为缓解多级流表查表慢的问题,OVS在内核态采用Microflow Cache方法。Microflow Cache是基于Hash的精确匹配查表(O(1)),表项缓存了多级查表的结果,维护的是每条链接粒度的状态。Microflow Cache减少了报文进用户态查多级表的次数。一条流的首报文进入用户态查表后,后续的报文都会命中内核中的Microflow Cache,加快了查表速度。但是对于大量短流的网络环境来说,Microflow Cache命中率很低,导致大部分报文仍然需要到用户态进行多级流表查找,因此转发性能提升有限。 而后,为了解决Mircoflow Cache存在的问题,OVS采用Megaflow Cache代替了Mircoflow Cache。与Mircoflow Cache的精确Hash查表不同,Megaflow Cache支持带通配的查表,所以可减少报文至用户空间查表的次数。庾志辉的博客中当时分析的就是关于megaflow的数据结构和查表流程,相关内容不在此赘述,请看上文中的链接。但是,由于OVS采用元组空间搜索(下文介绍)实现Megaflow Cache的查找,所以平均查表次数为元组表的数量的一半。假设元组空间搜索的元组表链为m,那么平均查表开销为O(m/2)。Mircoflow Cache和Megaflow Cache查表开销对比为O(1)< O(m/2)。因此,Megaflow Cache相比于Mircoflow Cache,尽管减少了报文进用户空间查表的次数,但是增加了报文在内核态查表的次数。 为此,OVS当前版本采用Megaflow Cache+Microflow Cache的流Cache组织形式,仍保留了Microflow Cache作为一级Cache,即报文进入后首先查这一级Cache。只不过这个Microflow Cache含义与原来的Microflow Cache不同。原来的Microflow Cache是一个实际存在的精确Hash表,但是最新版本中的Microflow Cache不是一个表,而是一个索引值,指向的是最近一次查Megaflow Cache表项。那么报文的首次查表就不需要进行线性地链式搜索,可直接对应到其中一张Megaflow的元组表。这三个阶段的查表开销如表所示。 DPDK 高性能(user space) 网卡驱动、大页内存、无锁化结构设计,可以轻易实现万兆网卡线速的性能。ovs-dpdk使vm到vm和nic到vm的整个数据传输都工作在用户态,极大的提升了ovs的性能。 另外,ovs-dpdk 结合了DPDK和vhost-user技术的优势。vhost-user是一个用户态的vhost-backend程序,从虚拟机到host上实现了数据零拷贝(zero copy)。 原生ovs与ovs-dpdk比较 原生ovs数据流处理过程如下: 数据包到达网卡后,上传给Datapath;Datapath会检查缓存中的精确流表是否可以直接转发这个包,如果在缓存中没有找到记录,内核通过netlink发送一个upcall给用户空间的vswitchd;vswitchd检查数据库以查看数据包的目的端口在哪里。这里要操作openflow流表,需要和ovsdb以及ovs-ofctl交互;刷新内核态流表内容;Reinject给datapath,重发数据包;再次查询流表,获取数据包精确转发规则后,按规则转发 ovs-dpdk方式: 用户态进程直接接管网卡收发数据,采用“IO独占核”技术,即每个端口分配一个核专门用于数据收发,轮询式处理方式代替中断式处理,显著提高IO性能。 总结: 比较原生ovsovs-dpdkhost收发包通过host的linux内核访问网卡通过dpdk高速数据通道收发包内部交换在内核态datapath进行交换基于ovs,提供dpdk datapath的交换能力vm后端驱动使用vni,基于开源tap进行优化vhost-uservm前端驱动标准virtio设备标准virtio设备交换路径2个线程:物理网卡(中断机制)->转发线程->放到tap设备队列->vhost_net取包送给vcpu1个线程:物理网卡(DPDK DPM)->转发线程->送给vcpu 使用ovs-dpdk 硬件要求 网卡得支持DPDK,见:http://dpdk.org/doc/nics CPU得支持DPDK, 测试命令:cat /proc/cpuinfo |grep pdpe1gb

java调用C语言执行dll文件

这是一个很大的坑。在里面遨游了两天时间,很无语 注:.dll是运行在Windows环境的。想要在Linux环境运行就是.so文件(.so就是和.dll文件一样,只不过是适用的系统环境不一样而已) 业务: 我的业务是需要调用dll文件,返回一个json格式的结果。 我们有多个应用。其中有上位机应用服务是运行在Windows环境的。因此Linux环境上的那个应用需要调用dll的接口里面组装我我们自己的业务,然后接口里面通过http去请求上位机上的接口,来调用dll文件。 起初。这个上位机在eclipse上是可以直接调用dll文件去运行的。但是idea是无法运行的。 然后上位机这个打成jar包(dll文件放在和src同级、以及src\main\resources下,还有打成war),运行在本地,报了很多错。 类似于下面的。 各种百度说是什么环境变量里面配置, 什么把dll文件复制到C:\Windows\System32、jre\bin等等路径里面、eclipse上的配置等等各种试,还说是缺少什么dll文件让下载。将dll放在java.library.path包含的路径中。都不行。 认真分析一下,eclipse上能运行,肯定就是dll文件放的位置不对。不可能是缺少什么dll文件都不行。 一直的误区是:System.loadLibrary("dll文件名,没有后缀");扫描的事jar包内或者war内的。 所以一直在这里转圈圈。最后在打成jar包。在桌面创建一个文件夹,把jar包和所要用的dll文件都复制进入都是同级。结果测试就ok。感觉真滴很坑。 以上分享给大家。具体我也不太清楚我这个方法是否适用你,但是我目前是ok了。 有什么不足之处,还希望请教大家。 在eclipse上配置后调用执行正常,但是在idea中就不行。一共有三个类型的错,大概的意思都是下面这个截图中的报错 主要的方法是:将比如将一个jar包放在Windows环境的卓某一个文件夹中,那么把所有的dll文件复制进入,和这个jar同级目录。启动这个jar,就可以正常的调用了 public class Demo { public native int sum(int a,int b); public static void main(String[] args) { int a = 2; int b = 6; int c; Demo d = new Demo(); c = d.sum(a, b); } public int getSumAB(int a, int b){ Demo d = new Demo(); int sum = d.sum(a, b); return sum; } static { System.

队列的入队和出队

队列是一个特殊的线性表,队列简称为“对”。 队列的插入元素的操作称为“入队”或者“入队列”,删除元素的操作称为“出队”或者“出队列”。 那么,队列是如何插入元素和删除元素的呢。 队列有两种存储结构,一种是顺序排列,另一种是链式排列。 队列的元素存放的都是地址连续的单元。而队列的特征是“先进先出”,且队列的入队只允许队尾操作,rear增加一位。队头front不允许修改。队列的出队则相反,只允许队头操作,front增加一位,队尾rear不允许修改。所以为了避免“假溢出”这个问题我以顺序队列的循环队列为例来讲解。 队列的插入元素:队列的入队只在队列的队尾rear一端进行操作 如下图,e为要插入的元素,q为队列的长度。 首先要判断队列是否已经队满,还有没有空位置。而循环队列判断队满的条件为:rear的下一个元素是front。 所以用if判断当rear加1的值再除以队列最大空间值MaxSize的余数是否等于front的长度,相等则说明队满,不能插入元素。不相等则说明队列还有空位置,然后rear往下空一个位置,插入元素, 队列的删除元素:队列的出队只在队列的队首front这一端操作 如下图。首先产出一个e,这个e要接收被删除的元素。 然后判断队列是否为空,如果队列为空,就没有要删除的元素了。当队列的队头front与队尾rear的数值相等时,即队头与队尾指向同一个位置时,队列为空。 如果队列不为空,把front指向的元素取出来赋值给e,然后删除e,front指向往下一个位置。 注意在删除元素之前还要备份

使用CSS将文字显示在水平线中间

如何使用CSS将文字显示在水平线中间?下面本篇文章就来给大家介绍使用CSS实现文字显示在水平线中间效果的方法,希望对大家有所帮助。 CSS提供了在网页中间制作包含文字或图像的水平线以使其具有吸引力的功能,这可以通过使用简单的CSS属性来实现。 语法: h4:before, h4:after { content: ""; flex: 1 1; border-bottom: 2px solid #000; margin: auto; } 示例1:将文字显示在水平线中间 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <style> h4 { display: flex; flex-direction: row; } h4:before, h4:after { content: ""; flex: 1 1; border-bottom: 2px solid #000; margin: auto; } img { height: 100px; width: 100px; border-radius: 50%; } </style> </head> <body> <h4>HTML中文网</h4> </body> </html> 效果图: 示例2:将图像显示在水平线中间 <!DOCTYPE html> <html> <head> <meta charset="

PHP冒泡排序

冒泡排序 冒泡排序就是比较数组中相邻的两个元素,把较小的元素放到前面,以此类推直到遍历完所有元素 public function the_bubbling(){ $arr = array(3,6,7,1,9,2,5,4,8); for ($i = 0; $i< count($arr); $i++) { for ($j = $i+1; $j < count($arr); $j++) { if($arr[$i] > $arr[$j]) { $temporary = $arr[$i]; $arr[$i] = $arr[$j]; $arr[$j] = $temporary; } } } echo "<pre>"; var_dump($arr); }

HDFS、HBase、Hue等权限操作

HDFS文件ACL授权 1.集群开启acl权限,由参数dfs.namenode.acls.enabled控制 2.授权流程 ##切换为超级用户hdfs su hdfs ##授权之前,可查看库下有哪些用户已有权限,通过命令getfacl hadoop fs -getfacl $PATH ##如:hadoop fs -getfacl /user/hive/warehouse/dw_tmp.db ##acl授权,运行时间较长,可后台执行;执行完成后,通过上述getfacl命令进行验证 hadoop fs -setfacl -m -R user:$username:rwx $PATH ##如:hadoop fs -setfacl -m -R user:zhanghza:rwx /user/hive/warehouse/ploan_analyst.db HBase 授权 权限设置: Read(R) 允许读取权限 Write(W) 允许写入权限 Execute(X) 允许执行权限 Create(C) 允许建表、删表权限 Admin(A) 允许管理操作,如balance、split、snapshot ##随机进去任意一台regionserver,使用cli进行授权 hbase shell ##查看名称空间 hbase(main):001:0> list_namespace NAMESPACE default hbase kylin_ns kylin_pay risk 5 row(s) in 0.2270 seconds ##查看risk命名空间下用户的权限 hbase(main):002:0> user_permission '@risk' User Namespace,Table,Family,Qualifier:Permission jiuyunloan risk,,,: [Permission: actions=READ,WRITE,EXEC,CREATE,ADMIN] ##空间授权,并验证 hbase(main):007:0> grant 'risk_jiql','RWXC','@risk' hbase(main):008:0> user_permission '@risk' User Namespace,Table,Family,Qualifier:Permission jiuyunloan risk,,,: [Permission: actions=READ,WRITE,EXEC,CREATE,ADMIN] risk_jiql risk,,,: [Permission: actions=READ,WRITE,EXEC,CREATE] ##表只授权读,并验证 hbase(main):013:0> grant 'personal','R','risk:risk_phonelist' hbase(main):014:0> user_permission 'risk:risk_phonelist' User Namespace,Table,Family,Qualifier:Permission root risk,risk:risk_phonelist_info_by_userid,,: [Permission: actions=READ,WRITE,EXEC,CREATE,ADMIN] personal risk,risk:risk_phonelist,,: [Permission: actions=READ] Hue 授权 前言

android项目迁移到androidx

1.Android Studio自带可以把项目升级为Androidx 2. 在gradle.properties文件添加 android.useAndroidX=true android.enableJetifier=true 3.修改java类引用 import androidx.core.view.PagerAdapter; import androidx.viewpager.widget.PagerAdapter; import androidx.core.view.ViewPager; import androidx.viewpager.widget.ViewPager; import android.support.v7.view.ContextThemeWrapper; import androidx.appcompat.view.ContextThemeWrapper; 修改前import android.app.FragmentManager; 修改后 import androidx.fragment.app.FragmentManager; import androidx.core.app.FragmentPagerAdapter; import androidx.fragment.app.FragmentPagerAdapter; import androidx.core.app.Fragment; import androidx.fragment.app.Fragment; import androidx.core.app.FragmentActivity; import androidx.fragment.app.FragmentActivity; import androidx.core.app.FragmentStatePagerAdapter; import androidx.fragment.app.FragmentStatePagerAdapter; import android.support.v7.app.AppCompatActivity; import androidx.appcompat.app.AppCompatActivity; import androidx.core.app.FragmentTransaction; import androidx.fragment.app.FragmentTransaction; import android.support.v7.widget.Toolbar; import androidx.appcompat.widget.Toolbar; import android.support.v4.widget.SwipeRefreshLayout; import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; import androidx.core.widget.SwipeRefreshLayout.OnRefreshListener; import androidx.swiperefreshlayout.widget.SwipeRefreshLayou.OnRefreshListener; import android.support.v7.widget.RecyclerView; import androidx.recyclerview.widget.RecyclerView; import android.support.v7.widget.LinearLayoutManager; import androidx.recyclerview.widget.LinearLayoutManager; import android.

vue+element 中的table对列自定义排序

环境:vue+element :sortable="‘custom’" + @sort-change=“changeTableSort”> 对表格列自定义排序 <el-table :data="tableData" border style="width: 100%" v-loading="loading" @sort-change="changeTableSort"> <el-table-column label="编号" width="80"> <template slot-scope="scope">{{scope.$index + 1}}</template> </el-table-column> <el-table-column prop="model" label="型号" width="180" :sortable="'custom'"></el-table-column> <el-table-column prop="modelName" label="产品名称" width="180"></el-table-column> <el-table-column prop="description" label="描述"></el-table-column> <el-table-column prop="createTime" label="创建时间" :sortable="'custom'"></el-table-column> </el-table> methods: { //选择指定列进行排序 changeTableSort(column){ //对表格列进行排序逻辑 } }

信号的峰值功率、平均功率和峰均比PAR

峰值功率即是指以某种概率出现的肩峰的瞬态功率。通常概率取为0.01%。平均功率是系统输出的实际功率。在某个概率下峰值功率跟平均功率的比就称为在某个概率下的峰均比,如PAR=9.1@0.1%,各种概率下的峰均比就形成了CCDF曲线(互补累积分布函数)。在概率为0.01%处的PAR,一般称为CREST因子

e = 1 + 1/1!+1/ 2!+1/ 3!+…+1/n!(数列求和)

文章目录 引入分析代码测试 引入 求 e 的值:输入 1 个正整数 n,计算下式求出 e 的值(保留 2 位 小数),要求使用嵌套循环。试编写相应程序。 e = 1 + 1/1!+1/ 2!+1/ 3!+…+1/n! 分析 几乎都是使用循环做的,我们需要做的就是找规律: 这题有两层循环第一层是便利所有项,第二层循环是求阶层,内循环后需要在第一层循环中累加数列和 代码 #include <stdio.h> int main(){ /** 求 e 的值:输入 1 个正整数 n,计算下式求出 e 的值(保留 2 位 小数),要求使用嵌套循环。试编写相应程序。 e = 1 + 1/1!+1/ 2!+1/ 3!+…+1/n! */ int n; scanf("%d",&n); int i,j; //第一项独立出来 double e = 1.0,jc; for(i = 1; i <= n;i++){ jc = 1.0; //这个内循环就是求阶层的 for(j = 1; j <= i; j++){ jc*=j; } e+=1.

ubuntu18.04 卸载和重装cmake(uninstall and install cmake)

1. 卸载 cmake sudo apt remove --purge cmake hash -r 2 安装 cmake 两种方法snap或者源码安装 2.1 snap sudo snap install cmake --classic cmake --version #cmake version 3.17.2 2.2 source code sudo apt install build-essential libssl-dev wget https://github.com/Kitware/CMake/releases/download/v3.17.2/cmake-3.17.2.tar.gz tar -zxvf cmake-3.17.2.tar.gz cd cmake-3.17.2 ./bootstrap make sudo make install 3. reference 参考1