vue/cli 3版本 打包去掉soucemap文件

前言: 一般正常打包会出现下面的这么多文件,其实生产环境下我们不要的那个 js.map文件的,这次就遇到客户上传Map文件过大,必须去掉Map文件 解决办法: productionSourceMap: false; // 在vue.config.js文件中加上这个就可以了 截图:

matlab 读取tiff文件

1、matlab读取tiff文件 参考自matab文档 创建一个Tiff对象并从TIFF文件中读取数据 t = Tiff('peppers_RGB_tiled.tif','r'); imageData = read(t); 显示图像。 imshow(imageData); 2、rgb2ycbcr skimage.color.rgb2ycbcr 和matlab的rgb2ycbcr效果一样

GraphViz‘s executables not found报错解决方案

引用:https://blog.csdn.net/weixin_36407399/article/details/87890230 通过pip安装graphviz模块后,进行sklearn的决策树文档操作输出决策树模型结果时报错,报错内容为:GraphViz’s executables not found。 通过了解得知:graphviz是属于一个独立的软件,需要到官网下载安装包解压,将bin的路径添加到环境变量。 下载网址链接:https://graphviz.gitlab.io/_pages/Download/Download_windows.html 添加环境变量方法: 1、定位到高级系统设置: 2、定位‘环境变量’ 3、点击‘新建’,将bin的路径复制进去 将路径添加到环境变量后还是报错,于是在代码块运行以下语句,不在报错: 4、进行到这步,出现pdf格式无法识别 在pycharm的Terminal中运行 'dot -c'

[linux]redhat7.6 安装telnet

方法一:yum安装 配置yum 创建挂载目录 mkdir /mnt/cdrom 挂载镜像 mount -o loop -t iso9660 /rhel-server-7.6-x86_64-dvd.iso /mnt/cdrom/ 备份redhat.repo cd /etc/yum.repos.d/ cp redhat.repo redhat_bak.repo 编辑redhat7.repo文件 vim redhat7.repo [dvd] name=redhat7 baseurl=file:///mnt/cdrom/ gpgcheck=0 enabled=1 重新加载yum yum clean all yum makecache 查询是否安装telnet rpm -qa |grep telnet* 安装服务端: yum -y install telnet-server.x86_64 安装客户端: yum -y install telnet.x86_64 安装telnet守护进程: yum -y install xinetd.x86_64 安装后检查: rpm -qa |grep telnet* 启动telnet和守护进程: systemctl start telnet.socket systemctl start xinetd 设置xinetd自启动: systemctl enable telnet.socket

数字IC设计随笔之三(如何从fsdb波形中提取信号进行分析:python+matlab)

如何从fsdb波形中提取信号进行分析:python+matlab 在涉及ADC或DAC的芯片中,建立模拟电路的行为级模型进行仿真后,往往需要从fsdb波形文件中提取信号进行信号质量分析。 通过python执行命令将fsdb中的特定波形数据提取到report.txt文件中,再读取该文件至列表中,去除文件起始标志行,将文件中的有符号二进制数转换为10进制,以图形化的方式显示波形,既可以粗略查看仿真结果的正确性,又可以进行波形分析。 import os import pandas as pd import numpy as np import matlab.engine import bitvector os.system("fsdbreport tb.fsdb -w 24 -s /tb/u1/adc_data_reg\[23:0\] -o report.txt") f = open("report.txt","r") lines = f.readlines() f.close() data = lines[2:-1] bit_obj = bitvector.bitVector() for i in range(len(data)): a = data[i].split() vbin = bit_obj.new_Bin(33,a[1]) data[i] = vbin.to_Dec() x = np.arange(len(data)) y = np.array(data) eng = matlab.engine.start_matlab() X = matlab.double(x.tolist()) Y = matlab.double(y.tolist()) h=eng.sig_analyze(X,Y) os.system('pause') 上述脚本为处理Σ-ΔADC抽取滤波器输出信号的提取和显示,运行脚本后将会显示ADC转换码值,此时可以进一步调用MATLAB函数进行信噪比、有效位数等结果分析。

python 从两个列表获取相同的元素

从两个列表获取相同的元素 有两个列表list1=[11,22,33] list2[22,23,24] 获取相同内容的元素 # coding=utf-8 list1=[11,22,33] list2=[22,23,24] #遍历list1列表 for i in list1: #list2遍历 for j in list2: #当有相同数字时输出 if i==j: print(i)

海思mpp学习(4):mpp各模块介绍

1.简单介绍 mpp根据功能划分为很多模块,有:视频输入(VI)、视频处理(VPSS)、视频编码(VENC)、视频解码(VDEC)、视频输出(VO)、视频拼接(AVS)、音频输入(AI)、音频输出(AO)、音频编码(AENC)音频解码(ADEC)、区域管理(REGION)等模块。其中我们频繁会用到的模块有VI,VPSS,VENC,VDEC这几个模块。 关于每个模块的具体功能和使用,可以通过后面的例子边学习边了解,刚开始先简单了解即可。 2.系统绑定 MPP 提供系统绑定接口(HI_MPI_SYS_Bind),即通过数据接收者绑定数据源来建立两者之间的关联关系(只允许数据接收者绑定数据源)。绑定后,数据源生成的数据将自动发送给接收者。 3.VI和VPSS工作模式 VI 和 VPSS 各自的工作模式分为在线,离线,并行模式 模式说明: 模式VI_CAP 与 VI_PROCVI_PROC 与 VPSS在线模式VI_CAP 与 VI_PROC 之间在线数据流传输,此模式下 VI_CAP不会写出 RAW 数据到 DDR,而是直接把数据流送给VI_PROC。VI_PROC 与 VPSS 之间的在线数据流传输,在此模式下VI_PROC不会写出 YUV 数据到 DDR,而是直接把数据流送给 VPSS。离线模式VI_CAP 写出 RAW 数据到DDR,然后 VI_PROC 从 DDR读取 RAW 数据进行后处理。VI_PROC 写出 YUV 数据到DDR,然后 VPSS 从 DDR 读取YUV 数据进行后处理。并行模式当对接大数据量的时序,例如8K@30fps 时,需要 VI_CAP 与两个 VI_PROC 处于并行模式,VI_CAP 直接把一帧数据送给两个 VI_PROC 并行处理。当对接大数据量的时序,例如8K@30fps 时,需要 VI_CAP 与两个 VI_PROC 处于并行模式,同时两个 VPSS 也分别与VI_PROC 处于并行模式,VI_CAP 直接把一帧数据送给两个 VI_PROC 并行处理,再给VPSS 并行处理。 TODO 补充细节

海思mpp学习(3):视频缓存池-vb

1.说明 视频缓存池主要向媒体业务提供大块物理内存管理功能,必须在系统初始化之前配置公共视频缓存池。 2.示例代码 VB_CONFIG_S config; memset(&config, 0, sizeof(VB_CONFIG_S)); config.u32MaxPoolCnt = 1; HI_U64 blk_size = COMMON_GetPicBufferSize(1920,1080, PIXEL_FORMAT_YVU_SEMIPLANAR_420, DATA_BITWIDTH_8,COMPRESS_MODE_NONE, DEFAULT_ALIGN); config.astCommPool[0].u64BlkSize = blk_size; printf("blk size: %llu\n", config.astCommPool[0].u64BlkSize); config.astCommPool[0].u32BlkCnt = 3; // 设置公共视频缓存池属性 HI_S32 ret = HI_MPI_VB_SetConfig(&config); if(ret != HI_SUCCESS) { printf("HI_MPI_VB_SetConfig falied: %#x\n", ret); return; } // 初始化缓存池 ret = HI_MPI_VB_Init(); if(ret != HI_SUCCESS) { printf("HI_MPI_VB_Init falied: %#x\n", ret); return; } // mpp系统初始化 ret = HI_MPI_SYS_Init(); if(ret != HI_SUCCESS) { printf("HI_MPI_SYS_Init falied: %#x\n"

Form表单提交 get与post区别

Form表单提交 get与post区别 1.get是从服务器上获取数据,post是向服务器传送数据。 2.get是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到。post是通过HTTPpost机制, 将表单内各个字段与其内容放置在HTML HEADER内一起传送到ACTION属性所指的URL地址。用户看不到这个过程。 3.对于get方式,服务器端用Request.QueryString获取变量的值,对于post方式,服务器端用Request.Form获取提交的数据。 4.get传送的数据量较小,不能大于2KB。post传送的数据量较大,一般被默认为不受限制。但理论上,IIS4中最大量为80KB,IIS5中为100KB。 5.get安全性非常低,post安全性较高。

form表单中get提交和post提交的区别

一、get和post定义 form元素的method属性用来指定发送form的http方法; 使用get时,form数据集被附加到form元素的action属性所指定的URL后面; 使用post时,form数据集被包装在请求的body中并被发送。 get是从服务器上获取数据,post是向服务器传送数据。 二、get和Post的区别 如果用get提交一个验证用户名和密码的form,一般认为是不安全的,因为用户名和密码将出现在URL上,进而出现在浏览器的历史记录中。 显然,在对安全性有要求的情况下,应该使用post。 三:最本质的区别 get是用来从服务器上获得数据,而post是用来向服务器上传递数据。get可以在URL后面看见所提交的数据,但是Post是不会看见的!get安全性非常低,post安全性较高。

高翔视觉SLAM十四讲学习笔记——第3讲刚体运动

第三章刚体运动 学习任务一、点,向量和坐标系向量的坐标内外积 二、坐标系间的欧氏变换三、齐次坐标和变换矩阵♥重点♥四、旋转向量和欧拉角4.1 旋转向量4.2 欧拉角4.3 四元数 五、四元数到旋转矩阵的转换 学习任务 理解三维空间的刚体运动描述方式:旋转矩阵、变换矩阵、四元数和欧拉角。掌握Eigen 库的矩阵、几何模块使用方法。 一、点,向量和坐标系 刚体:不光有位置,还有自身的姿态。相机也可以看成三维空间的刚体,位置是指相机在空间中的哪个地方,而姿态则是指相机的朝向。 向量的坐标 :确定一个坐标系,也就是一个线性空间的基,就可以谈论向量a 在这组基下的坐标 右手法则:给定x 和y 轴时,z 就可以通过右手(或左手)法则由x × y 定义出来(大部分程序默认右手法则) 内外积 内积:描述向量间投影关系 外积:描述三维及以上向量之间的旋转关系 外积的方向垂直于这两个向量,大小为|a||b|sin ⟨a,b⟩,是两个向量张成的四边形的有向面积。 如上图公式所示,可以把外积转换为a是一个反对称矩阵与向量b的乘积,用a^b来表示。 二、坐标系间的欧氏变换 描述两个坐标系之间的旋转关系,再加上平移,统称为坐标系之间的变换关系。在机器人的运动过程中,常见的做法是设定一个惯性坐标系,(或者叫世界坐标系),可以认为它是固定不动的。 欧氏变换:相机运动是一个刚体运动,它保证了同一个向量在各个坐标系下的长度和夹角都不会发生变化。 一个欧氏变换由一个旋转和一个平移两部分组成。 首先来考虑旋转。 们设某个单位正交基 (e1,e2,e3) 经过一次旋转,变成了(e1‘,e2’,e3‘),对于同一个向量a,它在两个坐标系下的坐标为[a1,a2,a3]T 和为[a1’,a2‘,a3’]T。根据坐标的定义: 转换一下: 矩阵R为两组基的内积,成为旋转矩阵,描述了旋转本身。也是一个行列式为1的正交矩阵(即逆为自身转置的矩阵)。 再考虑平移 1)欧氏空间的坐标变换关系描述: a’=Ra+t(R旋转矩阵,t为平移向量) 三、齐次坐标和变换矩阵♥重点♥ a’=Ra+t重写为: [ a ′ 1 ] \begin{bmatrix} a'\\ 1\end{bmatrix} [a′1​]= [ R t 0 1 ] \begin{bmatrix} R&t\\ 0&1\end{bmatrix} [R0​t1​] [ a 1 ] \begin{bmatrix} a\\ 1\end{bmatrix} [a1​]=T [ a 1 ] \begin{bmatrix} a\\ 1\end{bmatrix} [a1​]

内存泄漏和内存溢出区别与联系

一、什么是内存溢出和内存泄露 内存泄漏(memory leak):是指程序在申请内存后,无法释放已申请的内存空间,导致系统无法及时回收内存并且分配给其他进程使用。通常少次数的内存无法及时回收并不会到程序造成什么影响,但是如果在内存本身就比较少获取多次导致内存无法正常回收时,就会导致内存不够用,最终导致内存溢出。 2、内存溢出 (out of memory)::指程序申请内存时,没有足够的内存供申请者使用,导致数据无法正常存储到内存中。也就是说给你个int类型的存储数据大小的空间,但是却存储一个long类型的数据,这样就会导致内存溢出。 二、内存溢出和内存泄露的关系以及区别 1.关系:内存泄露最终会导致内存溢出,由于系统中的内存是有限的,如果过度占用资源而不及时释放,最后会导致内存不足,从而无法给所需要存储的数据提供足够的内存,从而导致内存溢出。导致内存溢出也可能是由于在给数据分配大小时没有根据实际要求分配,最后导致分配的内存无法满足数据的需求,从而导致内存溢出。 2.区别:内存泄露是由于GC无法及时或者无法识别可以回收的数据进行及时的回收,导致内存的浪费;内存溢出是由于数据所需要的内存无法得到满足,导致数据无法正常存储到内存中。内存泄露的多次表现就是会导致内存溢出。 注:本文参考了:https://blog.csdn.net/ruiruihahaha/article/details/70270574

canal实时同步中间件介绍及其配置

canal官网:https://www.gitmemory.com/alibaba/canal github:https://github.com/alibaba/canal/wiki/Canal-Kafka-RocketMQ-QuickStart 一、canal是什么 Canal是阿里巴巴集团提供的一个开源中间件,能够通过解析数据库的增量日志,提供增量数据的订阅和消费功能。canal 作为 MySQL binlog 增量获取和解析工具,可将变更记录投递到 MQ 系统中,比如 Kafka/RocketMQ,可以借助于 MQ 的多语言能力(目前只支持kafka/RocketMQ),当然也可丢到Elasticsearch中去 基于日志增量订阅和消费的业务包括 数据库镜像数据库实时备份索引构建和实时维护(拆分异构索引、倒排索引等)业务 cache 刷新带业务逻辑的增量数据处理 二、canal 工作原理 先理解MYSQL主从复制原理: MySQL master 将数据变更写入二进制日志( binary log, 其中记录叫做二进制日志事件binary log events,可以通过 show binlog events 进行查看)MySQL slave 将 master 的 binary log events 拷贝到它的中继日志(relay log)MySQL slave 重放 relay log 中事件,将数据变更反映它自己的数据 canal 工作原理: canal 模拟 MySQL slave 的交互协议,伪装自己为 MySQL slave ,向 MySQL master 发送dump 协议MySQL master 收到 dump 请求,开始推送 binary log 给 slave (即 canal )canal 解析 binary log 对象(原始为 byte 流) 三、canal配置安装 我这边是选择推送binlog到kafka,下边介绍安装配置

ClickHouse创建mysql数据库引擎报错【Code: 501】

使用clickhouse的数据库引擎mysql创建一个库用来同步mysql中的数据,命令如下: CREATE DATABASE mysql_db ENGINE = MySQL('localhost:3306','click_test','root','123456'); 结果报如下错误: CREATE DATABASE mysql_db ENGINE = MySQL('localhost:3306', 'click_test', 'root', '123456') Received exception from server (version 20.6.6): Code: 501. DB::Exception: Received from localhost:9000. DB::Exception: Cannot create MySQL database, because Poco::Exception. Code: 1000, e.code() = 2002, e.displayText() = mysqlxx::ConnectionFailed: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) ((nullptr):0), 解决办法: 连接clickhouse-server的时候,不要使用localhost,使用127.0.0.1代替: CREATE DATABASE mysql_db ENGINE = MySQL('127.0.0.1:3306','click_test','root','123456');

算法10--打印7行的菱形

package ClassicQuestion; /**打印菱形 * 外层for循环determine菱形的行数*/ public class 打印菱形3 { public static void main(String[] args) { for (int i = 1; i <= 4; i++) { //先就打印7行的菱形.开始i等于1即打印第一行的图案,这些图案包括空格和* //先print空格 for (int j = 1; j <= 4-i; j++) { /*这个for循环打印每一行的空格,它会进行几次呢?会进行4次,因为i是从1到4的 每循环一次,会打印一行的空格,所以会打印四行空格*/ System.out.print(" "); } for (int k = 1; k <= 2*i-1; k++) { System.out.print("*"); } System.out.println(); } for (int i = 1; i <= 3; i++) { //打印菱形的下半部分 for (int j = 1; j <= i; j++) { System.

手机QQ空间装逼代码收集

使用方法:复制代码,可修改代码中汉字信息,发表说说之后,将会看到代码生成的效果。 (注:在电脑观看QQ空间可以看到源码) 效果图: 手表代码↓ [em]e10026[/em]{uin:5720,nick:Gold Vish,who:1} 相机代码↓ [em]e10022[/em] {uin:5720,nick:拍摄于07月22日,who:1} {uin:5720,nick:阿尔及利亚 天气:阴,who:1} 飞机代码↓ [em]e10020[/em]{uin:5720,nick:乘坐于巴西天马航空JJ8280航班(A舱),who:1} 认证代码↓ [em]e10023[/em]{uin:5720,nick:文字已通过英国军情六处,请勿泄露。,who:1} 手机型号代码↓ [em]e10005[/em]{uin:1314,nick:samsung S7,who:1} 打赏代码↓ [em]e10033[/em]{uin:123,nick: 打赏了你一个冰淇淋,who:1} [em]e10033[/em] 打赏了100000000000.00元红包 [em]e10011[/em] [em]e10033[/em]打赏了10元红包({uin:3,nick:查看详情}) 赞代码↓ {uin:0000,nick: 、李兰、张德凯、俞正兴、苍井空、王心瑶、张雅丽、马荣、王兴宁、刘延、刘奇秉、许亮、孙兰、孙子凯、李建邦、李潮、汪洋洋、张贤、范子龙、孟大柱、赵际、胡春兰、栗玉、郭金宝、韩正心 、杜林、赵洪、杨晶晶、王俊、陈昌荣、严琪琪、王心晨、沈跃、吉轩、张大平、向巴平、宋江、万湘、李宇春、马化腾 ,who:1}等13亿人觉得很赞 小东西,还挺别致(你可以用这些图标,自己编写一些代码哦)↓ 锁:[em]e10001[/em] 竖屏手机:[em]e10002[/em] 横屏手机:[em]e10003[/em] 电脑:[em]e10004[/em] 手机:[em]e10005[/em] 相册图标:[em]e10006[/em] 连接图标:[em]e10007[/em] 平板:[em]e10008[/em] 红大锁:[em]e10009[/em] 蜡烛:[em]e10010[/em] 红小锁:[em]e10011[/em] 玫瑰:[em]e10012[/em] 手表:[em]e10013[/em] 飞机:[em]e10014[/em] 奶嘴瓶:[em]e10015[/em] QQ音乐图标:[em]e10016[/em] 赞图标:[em]e10017[/em] 井号:[em]e10018[/em] 大奶嘴瓶:[em]e10019[/em] 小飞机:[em]e10020[/em] 定位图标:[em]e10021[/em] 相机图标:[em]e10022[/em] 相册图标:[em]e10023[/em] 宽手机:[em]e10024[/em] 手机:[em]e10025[/em] 手表:[em]e10026[/em] 电脑:[em]e10027[/em] 手机山寨:[em]e10028[/em] 返回图标:[em]e10029[/em] 点亮赞图标:[em]e10030[/em] 连接图标小:[em]e10031[/em] 地图标记:[em]e10032[/em] 红包小图标:[em]e10033[/em] 笔:[em]e10034[/em] @图标:[em]e10035[/em] 联系人图标:[em]e10036[/em] 赞加圆缺图标:[em]e10037[/em] 返回加圆缺图标:[em]e10038[/em] 红包图标2:[em]e10040[/em]

Java 浅拷贝性能比较

一、前言 实际开发中,经常会遇到对象拷贝的需求,本文就结合日常开发过程中,使用到的浅拷贝技术,进行性能比较,看看谁更强。 重要: 下面将会花大量篇幅,列出各种类型浅拷贝的代码,你可以直接拖到文章末尾,看性能对比结果。然后再根据你中意的对象回过头来看它的代码,避免疲劳。 源码链接:https://github.com/jitwxs/blog-sample/tree/master/SpringBoot/shallow_copy 首先创建一个用于拷贝的 Bean,如下所示: import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import org.apache.commons.lang3.RandomStringUtils; import org.apache.commons.lang3.RandomUtils; import java.util.Date; @Data @Builder public class User { private long id; private int age; private String name; private boolean isMale; private School school; private Date createDate; public static User mock() { return User.builder() .id(RandomUtils.nextLong()) .age(RandomUtils.nextInt()) .name(RandomStringUtils.randomAlphanumeric(5)) .isMale(RandomUtils.nextBoolean()) .school(new School(RandomStringUtils.randomAlphanumeric(5), RandomUtils.nextInt())) .createDate(new Date()) .build(); } } @AllArgsConstructor class School { private String name; private int code; } 然后编写一个模板类,给各个浅拷贝方法提供预热和耗时统计功能:

NMT评价指标-BLEU

前言 BLEU (其全称为Bilingual Evaluation Understudy), 其意思是双语评估替补。所谓Understudy (替补),意思是代替人进行翻译结果的评估。尽管这项指标是为翻译而发明的,但它可以用于评估一组自然语言处理任务生成的文本。 1. Bilingual Evaluation Understudy: BLEU 在自然语言处理中的机器翻译任务中, BLEU非常常见, 它是用于评估模型生成的句子(candidate)和实际句子(reference)的差异的指标. 它的取值范围在0.0到1.0之间, 如果两个句子完美匹配(perfect match), 那么BLEU是1.0, 反之, 如果两个句子完美不匹配(perfect mismatch), 那么BLEU为0.0. 虽然这个指标不够完美, 但是它有5个非常引人注目的好处(compelling benefits): 计算代价小, 快.容易理解.与语言无关(这意味着你可以使用全世界任意的语言来测试).与人类评价结果高度相关.被学术界和工业界广泛采用. BLEU值是2002年由IBM 科学家 Kishore Papineni在其论文[2]中提出的: “BLEU: a Method for Automatic Evaluation of Machine Translation“. BLEU方法的实现是分别计算candidate句和reference句的N-grams模型[3], 然后统计其匹配的个数来计算得到的. 显然, 这种比较方法, 是与语序无关的. 论文对匹配的 N-grams 计数进行了修改,以确保它考虑到reference文本中单词的出现,而非奖励生成大量合理翻译单词的候选结果。本文将其称为修正的 N-grams 精度。 此外, 有一种改进版的通过normalize N-grams的改进版BLEU. 其目的是提升对多个句子组成的块(block)提升翻译效果. 在实践中得到完美的分数是不太可能的,因为翻译结果必须与reference句完全匹配。甚至人工翻译都不可能做到这一点。而且, 由于不同的数据集reference句的质量和数量不同, 所以跨数据集计算BLEU值可能带来一些麻烦. 对机器翻译来说, 我们可以使用BLEU得分来评价其它的语言生成任务, 比如: 语言生成图像标题生成文本总结语音识别 2. 计算BLEU得分 Python自然语言工具包库: NLTK, 提供了BLEU得分计算的实现, 所以如果你只是像译者一样使用的话, 可以先不去了解其内部的实现.

EDA第一次课<1117电路图的绘制>

EDA第一次课<1117电路图的绘制> 电路图1117 我们把需要用到的元器件先列出来: PWR2.5*1GND*3RES2*4LED0*2VCC*1双刀双掷开关*1自制元器件(黄框框)*1 绘制1117 1.首先我们打开Altium designer,这个老师给的文件夹里面的DXP.exe文件 好的,然后我们现在创建一个PCB文件:点击file–new–project–PCBproject 接着我们在这个文件上右键点击,然后打开图纸(如图) 然后我们保存一下,快捷键ctrl+s或者Save as都可以 2.开始绘制 ps:我们所用的大部分元器件的库在右侧 libraries 栏中 所以我们点击 libraries,出现的第一个框是我们的器件库,第二个我们可以在相应的器件库里面查找所需要的的器件,点击右上角的place即可移动到图纸上,放足相应数量后,我们可以esc,取消放置或点击右键(如图) 接着我们点击上面栏中的place wire键,也就是用线连接起来 连接后如图 连接后我们发现vin vout这个器件没有,然后我们需要自己制作一个 右击pcb文件点击如图所示 这时候我们就相当于自己建了一个器件库,然后我们绘制元器件,以1117vin-vout为例: 然后运用图中所指的来画出vin-vout(如图) 保存 然后点击右边的libraries,点击栏中上面的Libraries,选中我们刚才保存的库如图 点击这个库,然后关闭,再从右边库栏中选择 点击加入即可 完成图如下 以上仅个人为学习总结,希望有不足之处欢迎指出

OJ 25 无重叠区间

给定一个区间的集合,找到需要移除区间的最小数量,使剩余区间互不重叠。 注意: 可以认为区间的终点总是大于它的起点。 区间 [1,2] 和 [2,3] 的边界相互“接触”,但没有相互重叠。 示例 1: 输入: [ [1,2], [2,3], [3,4], [1,3] ] 输出: 1 解释: 移除 [1,3] 后,剩下的区间没有重叠。 示例 2: 输入: [ [1,2], [1,2], [1,2] ] 输出: 2 解释: 你需要移除两个 [1,2] 来使剩下的区间没有重叠。 示例 3: 输入: [ [1,2], [2,3] ] 输出: 0 解释: 你不需要移除任何区间,因为它们已经是无重叠的了。 解题思路 将本体转换为找到最长的不重叠的区间的长度, 就可以使用类似 最长上升子序列 的解法了 每个区间的结束位置越靠前, 那么留给后面的空间也就越大, 那么后面的空间也就能放下更多的区间, 所以按照每个区间的结尾的位置进行排序, 区间结束位置越靠前, 区间本身越靠前 class Solution { public: int eraseOverlapIntervals(vector<vector<int>>& intervals) { int n=intervals.size(); if(n==0)return 0; sort(intervals.

达梦数据库入门

信创产业 信创的意义与新基建的前景这里省略一百万字。 安装 一、资源 中标麒麟7+DM8; 1、安装环境为:DM8-rh7(数据库包可至达梦官网www.dameng.com下载) 2、操作系统包为中标麒麟高级服务器操作系统软件V7.0, 3、推荐 二、GUI系统安装 1.安装中标麒麟系统:不要最小安装,勾选GUI界面。 2.进入root账户 3.启动网络并设置网络自启动 4.查看IP地址:ip addr 5.打开命令行终端 或 SSH登录root 三、GUI安装达梦数据库 1.创建DM8安装路径 [root@localhost mnt]# mkdir /dm8 2.创建DM8安装用户组dinstall和用户dmdba ,然后设置dmdba用户的密码 [root@localhost mnt]# groupadd dinstall [root@localhost mnt]# useradd -g dinstall dmdba [root@localhost mnt]# passwd dmdba 3.设置安装路径访问权限 [root@localhost mnt]# chown -R dmdba:dinstall /dm8 4.登录dmdba用户,设置环境变量,并使其生效 [root@localhost mnt]# su - dmdba [dmdba@localhost ~]$ vi ~/.bash_profile export PATH export DM_HOME=/dm8 export PATH=$PATH:$HOME/.local/bin:$HOME/bin:$DM_HOME/bin:$DM_HOME/tool [dmdba@localhost ~]$ source .bash_profile 5.切换到root用户,设置文件最大打开数目 [dmdba@localhost ~]$ su - root

CentOS 6 搭建DHCP 服务器

实验拓扑如下图所示: 1.制作本地yum源并检测可用,之后安装DHCP服务 安装成功! 2.给 Linux 服务器的 e0 口配置IP地址 3.编辑DHCP配置文件,并给jundong主机绑定IP地址 4.关闭防火墙,SELinux 5.客户端发起DHCP请求并获得IP地址 6.绑定IP地址成功!

C语言uint8_t的解释

一、C语言基本数据类型回顾 在C语言中有6种基本数据类型:short、int、long、float、double、char 1、数值类型 1)整型:short、int、long 2)浮点型:float、double 2、字符类型:char 二、typedef回顾 typedef用来定义关键字或标识符的别名,例如: typedef double wages; typedef wages salary; 三、uint8_t\uint_16_t\uint32_t\uint64_t 1、这些类型的来源:这些数据类型中都带有_t, _t 表示这些数据类型是通过typedef定义的,而不是新的数据类型。也就是说,它们其实是我们已知的类型的别名。 2、使用这些类型的原因:方便代码的维护。比如,在C中没有bool型,于是在一个软件中,一个程序员使用int,一个程序员使用short,会比较混乱。最好用一个typedef来定义一个统一的bool: typedef char bool; 在涉及到跨平台时,不同的平台会有不同的字长,所以利用预编译和typedef可以方便的维护代码。 3、这些类型的定义: 在C99标准中定义了这些数据类型,具体定义在:/usr/include/stdint.h ISO C99: 7.18 Integer types #ifndef __int8_t_defined define __int8_t_defined typedef signed char int8_t; typedef short int int16_t; typedef int int32_t; if __WORDSIZE == 64 typedef long int int64_t; else extension typedef long long int int64_t; endif #endif typedef unsigned char uint8_t; typedef unsigned short int uint16_t;

go 运行代码遇到的问题(同一个包,不同包 之间的引用报错)

1 相同的package,main中引用另外一个go文件的函数报错 如图所示main中引用process中的函数,go run mian.go 会报错如下所示 可以这样运行 go run process.go mian.go 可以避免这个报错, 且main可以正常启动起来 2 在不同的package中,但是在同一项目下,引用的运行也会报错 main.go中调用了model包中结构体 go run mai.go 也是会报错的 我的编译器是GoLang, 可以再项目的目录下执行go mod init xxx , 然后运行的配置改成directory 在运行可以成功 后续有问题持续记录。。。。。。

Android 普通应用升级,具备不可删除与系统权限

不可删除,已通过测试。 使得成为系统应用,将不可删除。请注意,成为系统应用不用删除属性,不代表具备可操作系统权限。同时,请确认AndroidManifest.xml 无错误,软件可运行不代表 xml 无错误。 解决方法:将 apk 放置于 /system/app 文件夹内。 步骤: adb root ... // 若出现 timeout 等待连接成功即可。 adb remount ...adb disable-verity // 出现 Use "adb disable-verity" to disable verity. 解决方案 ...adb reboot adb push *.apk /system/app ... adb push *.so /system/lib64 或 /system/lib //若apk具备依赖关系,可通过压缩软件打开知否存在lib文件夹查看。 adb shell cd /system/app chmod 777 *.apk // 具备可执行权限 reboot // 重启后,apk 会执行安装操作。若重新后未发现图标,说明未正确安装,可使用 adb install -r 进行安装,具备安装失败原因提示。 系统权限 ,已通过测试。 xml 中,manifes 添加 android:sharedUserId="android.uid.system"。 签名准备 准备文件:platform.

算法概念及基本特性

概念: 一个算法是若干规则所构成的有穷序列,每个规则规定了解决某特定问题所采取的动作。通俗来说:算法是对特定问题求解步骤的一种描述。 算法特性: 输入:有零个或多个外部变量作为算法的输入输出:算法至少产生一个量作为输出确定性:组成算法的的每条指令都是清晰,没有歧义的有限性:算法中每条指令的执行次数有限,指令执行的时间也是有限的。可行性:算法中每个步骤都可以精确地执行,而且人们用纸和笔做有穷次运算即可完成 注意: 程序 ≠ \neq ​=算法。程序是算法的具体体现,但程序可以不满足有限性。如死循环

数字IC设计随笔之二(VCS、DVE|Verdi单步调试)

VCS、DVE|Verdi单步调试 使用VCS+Verdi进行仿真时,需要在仿真文件中添加如下代码: initial begin $fsdbDumpfile("test.fsdb"); $fsdbDumpvars("+all"); end 编译仿真的基本方式是在命令行中输入: vcs -full64 -P $VERDI_LIB/novas.tab $VERDI_LIB/pli.a test.v ./simv 在上述命令中,编译的文件为test.v。当对一个包含文件较多的工程进行编译仿真时,VCS -f 选项支持从文件读取,在该文件flist中指定编译选项,下述为简单的示例: //===================verilog library extension=========== +libext+.v+.sv+.vlib //===================Top level file ===================== ./rtl_sim/tb.v +incdir+./src //===================Search path======================== -y ./src -y ./rtl_sim 当使用VCS+Verdi进行单步调试时,需要在VCS编译时增加-debug_all -lca -kdb选项予以支持,并且需要指定Verdi。 vcs -full64 -f flist -debug_all -lca -kdb \ -P $VERDI_LIB/novas.tab $VERDI_LIB/pli.a ./simv -gui=verdi 将上述命令写为bash或者makefile文件,运行后,将会在Verdi中打开,呈现如下界面,左下角为命令输入窗口,右上角为加载的代码,可以在其中加断点,在命令行输入run将按照断点处执行,同时可以进行单步运行,输入命令next。相关命令操作都可以在菜单simulation里面找到。 此外,进行调试时也可以选择vcs自带的工具dve。采用DVE进行单步调试时,与Verdi的主要区别在于波形文件格式不同,DVE产生波形文件为VPD,因此,在进行仿真时需要产生VPD波形而非FSDB。产生vpd文件的方式可以通过在仿真文件中添加: initial begin $vcdpluson; end 或者添加编译指令+vcs+vcdpluson,并设定vpd文件名:VPD_NAME = +vpdfile+top_test.vpd。 执行仿真后,可以设置断点,在命令行输入run即可执行,在断点处停下来,其它相关调试选项在DVE菜单Simulator中可见。

网络监控摄像头 rtsp 地址收集

3S rtsp://IP地址/cam1/h264 4XEM rtsp://IP地址/live.sdp A-MTK rtsp://IP地址/media/media.amp ABS rtsp://IP地址/mpeg4/1/media.amp Absolutron rtsp://IP地址/image.mpg ACTI 1. rtsp://192.168.0.100:7070/ 2. rtsp://192.168.0.100/ Acumen rtsp://IP地址/mpg4/rtsp.amp Airlink101 rtsp://IP地址/mpeg4 AirLive rtsp://IP地址/video.mp4 ALinking 1. rtsp://IP地址/cam1/mjpeg 2. rtsp://IP地址/cam1/mpeg4 3. rtsp://IP地址/cam1/h264 ALLIEDE rtsp://IP地址:555/0/1:1/main Asante rtsp://IP地址/cam1/mpeg4 Asoni 1. rtsp://IP地址/GetData.cgi 2. rtsp://IP地址/ Aviosys 1. rtsp://IP地址/mpeg4 2. rtsp://IP地址:8554/mpeg4 AVS Uriel: rtsp://IP地址/mpeg4 AVTech 1. rtsp://IP地址/live/mpeg4 2. rtsp://IP地址/live/h264 安迅士/AXIS rtsp://[username]:[password]@[ip]/axis-media/media.amp?[videocodec]&[resolution] 说明: username:用户名。例如admin password:密码。例如12345,如果没有网络验证可省略用户名密码部分以及@字符。 ip:为设备IP。例如192.168.0.108。 videocodec:支持MPEG、h.264等,可缺省。 resolution:分辨率,如resolution=1920x1080,若采用默认分辨率,可缺省此参数。 例如,请求某设备h264编码的1280x720的码流,URL如下: rtsp:// 192.168.200.202/axis-media/media.amp?videocodec=h264&resolution=1280x720 AXview rtsp://IP地址 Basler 1. rtsp://192.168.100.x/mpeg4 2. rtsp://IP地址/h264?multicast BiKal

selenium的text()方法获取不了标签文本的解决方法

selenium的text方法获取不了标签文本的解决方法 一、问题二、解决方法方法一方法二 三、拓展 一、问题 现象: 通过driver.find_element_by_xxx().text()获取的文本值为空 可能原因: 当前定位的元素可能被隐藏了,由于webdriver spec的定义,Selenium WebDriver 只会与可见元素交互,所以获取隐藏元素的文本总是会返回空字符串。 排查方法: 通过driver.find_element_by_xx().is_displayed() 确定元素是否被隐藏了,如果得到 false的结果.那就说明被隐藏了 二、解决方法 方法一 修改页面当前定位元素,或者当前元素父元素的CSS,使元素的is_displayed() 值为true. 方法二 is_displayed() 为false的元素,依然可以通过getAttribute()方法获取元素的属性.。 driver.find_element_by_xx(‘x’).get_attribute(‘attributeName’), 通过textContent, innerText, innerHTML等属性获 取。 innerHTML:会返回元素的内部 HTML, 包含所有的HTML标签。textContent 和 innerText: 只会得到文本内容,而不会包含 HTML 标签。 三、拓展 textContent 是 W3C 兼容的文字内容属性,但是 IE 不支持 innerText 不是 W3C DOM 的指定内容,FireFox不支持

JPA查关联对象为空、为null的 isNull isEmpty

CriteriaBuilder public class Test { @Autowired private ReceiptSourceRepository receiptSourceRepository; public void test() { Specification<ReceiptSource> spec= (Root<ReceiptSource> root, CriteriaQuery<?> query, CriteriaBuilder cb) -> { Predicate predicate = cb.conjunction(); predicate = cb.and(predicate,cb.isNull(root.get("accountsEntity"))); predicate = cb.and(predicate,cb.isEmpty(root.get("receiptsCostList"))); query.where(predicate); return query.getRestriction(); }; List<ReceiptSource> receiptSourceList = receiptSourceRepository.findAll(spec); } } package com.allqj.finance.business.receipts.repository; import com.allqj.finance.business.receipts.entity.ReceiptSource; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaSpecificationExecutor; @Repository public interface ReceiptSourceRepository extends JpaRepository<ReceiptSource,String>, JpaSpecificationExecutor<ReceiptSource> { } package com.allqj.finance.business.receipts.entity; import lombok.Getter; import lombok.Setter; import lombok.experimental.Accessors; import org.

永远不要忘记_永远不要说永远不在技术领域

永远不要忘记 “The difference between an interactive game and an interactive work of art is not just in the subject matter. It is also in the program and interface, which are important parts of the expression of a work.” “互动游戏和互动艺术品之间的区别不仅在于主题。 它也在程序和界面中,它们是作品表达的重要组成部分。” — Jim Campbell —吉姆·坎贝尔 As a part of my Creative Coding class, I read Delusions of Dialogue: Control and Choice in Interactive Art by Jim Campbell. The essay was published by the MIT Press in 2000.

allegro .brd文件转成AD .pcbdoc文件

allegro .brd文件转成AD .pcbdoc文件 1、将.brd文件生成.alg文件2、使用AD导入向导将.alg文件生成 .pcbdoc文件欢迎交流,欢迎转载,转载注明出处!! 由于PCB工程师或者硬件工程师使用的软件不同,经常需要在各种PCB绘制软件之间进行格式转化。这就很脑袋疼了⊙﹏⊙,由于我最习惯用的还是altium designer,allegro也会一点儿,不是很熟悉。所以研究了一下如何将allegro的.brd格式转换成.pcbdoc文件,找了很多资料,结果就是。。。。emmmm 我自己写了这篇博客,废话不多说,分享一下“任督二脉”打通的方法。 1、将.brd文件生成.alg文件 .brd是allegro的二进制格式文件,第一步我们需要将.brd文件转换成.alg文件。.alg文件是以ASCII码格式存储的文件。有些方法是直接将.brd文件导入AD,不过我经过屡败屡试、屡试屡败的尝试后,放弃了!因为.brd格式导入 与使用的allegro软件版本 和AD版本有关系~~~如果你的allegro版本很高(比如楼主用的是17.4)但是恰好AD版本不是最新的(比如AD17)就可能导致转换失败。 所以!!我们采用“曲线救国”的策略,先生成.alg文件~ ① 将AD的/system文件夹下的Allegro2Altium.bat文件及AllegroExportViews.txt 复制到与xxx.brd文件相同路径的文件下。 Allegro2Altium.bat文件及AllegroExportViews.txt位置如图: ②、使用文本编辑器(或者记事本)打开Allegro2Altium.bat,最开始文件内容如下: 注意!!重点来了:) 1、将extracta.exe %1中的 %1 改为XXX.brd 2、将AllegroASCII.txt %1.alg中的 %1 改为XXX 3、为了确保转换的万无一失,在extracta.exe之前加上cadence的安装路径,最终Allegro2Altium.bat变为: ③双击Allegro2Altium.bat运行,等待一小会儿,然后会生成.alg文件 2、使用AD导入向导将.alg文件生成 .pcbdoc文件 1、点击file→import wizard,选择Allegro Design Files,点击NEXT 2、添加刚才生成的.alg文件 3、转换过程 点击next,耐心等待生成.pcbdoc文件,看看结果,look!! 欢迎交流,欢迎转载,转载注明出处!!

Spark Streaming保存数据到HBase

本文主要讨论Spark Streaming保存计算结果数据到HBase的实现方案,包括Kerberos认证。 Spark版本:2.11-2.4.0-cdh6.3.2。 HBase版本:2.1.0-cdh6.3.2。 Spark保存数据到HBase,有两种方案: 方案一:使用HBase Client。方案二:使用Spark API。 每个方案有两种写法,一共四种写法,下面以一个示例进行说明,然后对主要部分进行拆解说明。 完整示例 示例场景:Spark Streaming消费Kafka,计算wordcount,将计算结果保存到HBase。计算结果的key作为rowkey的值,value作为cf:col的值。 示例完整代码: package com.example.spark; import org.apache.hadoop.hbase.client.*; import org.apache.hadoop.hbase.io.ImmutableBytesWritable; import org.apache.hadoop.hbase.mapred.TableOutputFormat; import org.apache.hadoop.hbase.util.Bytes; import org.apache.hadoop.mapred.JobConf; import org.apache.hadoop.security.UserGroupInformation; import org.apache.kafka.clients.consumer.ConsumerConfig; import org.apache.kafka.clients.consumer.ConsumerRecord; import org.apache.kafka.common.serialization.StringDeserializer; import org.apache.spark.SparkConf; import org.apache.spark.SparkFiles; import org.apache.spark.api.java.JavaPairRDD; import org.apache.spark.streaming.Durations; import org.apache.spark.streaming.api.java.JavaDStream; import org.apache.spark.streaming.api.java.JavaInputDStream; import org.apache.spark.streaming.api.java.JavaPairDStream; import org.apache.spark.streaming.api.java.JavaStreamingContext; import org.apache.spark.streaming.kafka010.*; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.Path; import org.apache.hadoop.hbase.HBaseConfiguration; import org.apache.hadoop.hbase.TableName; import scala.Tuple2; import java.io.IOException; import java.util.*; import java.util.regex.Pattern; /** * Consumes messages from one or more topics in Kafka and does wordcount, then save to HBase.

stm移植W5500官方库遇到spi读取IP地址等信息错误

这里写自定义目录标题 #前面略过按照官方文档移植 当设置完参数信息后再重新读取出来发现每个参数的第一个总是错的,然后找到他的读参数的函数,是这样的 // An highlighted block WIZCHIP.CS._select(); AddrSel |= (_W5500_SPI_READ_ | _W5500_SPI_VDM_OP_); if(!WIZCHIP.IF.SPI._read_burst || !WIZCHIP.IF.SPI._write_burst) // byte operation { WIZCHIP.IF.SPI._write_byte((AddrSel & 0x00FF0000) >> 16); WIZCHIP.IF.SPI._write_byte((AddrSel & 0x0000FF00) >> 8); WIZCHIP.IF.SPI._write_byte((AddrSel & 0x000000FF) >> 0); for(i = 0; i < len; i++) pBuf[i] = WIZCHIP.IF.SPI._read_byte(); } 在for循环里读到的第一个数总是错的; 一开始怀疑是写入参数时没写对,然后把寄存器地址往前偏移一位,发现参数写进去了,而且是对的,这样就把问题定位在spi读取函数上了。 我的spi读写函数是这样写的 void SPI1_Send_Byte(uint8_t dat) { while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET); SPI_I2S_SendData(SPI1,dat);//写1个字节数据 while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET); } uint8_t SPI1_Read_Byte(void) { while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);//等待数据寄存器空 SPI1->DR = 0x00; while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET);//等待数据寄存器空 return SPI_I2S_ReceiveData(SPI1);; } 再分析官方库调用我们的回调函数发现,他是先调用三次发送函数,然后调用读函数,在这之后的第一次读函数读到的数据总是错的,然后就想到会不会是spi的数据寄存器没有清空导致的。代码改成这样之后,果然一切正常了

JVM-内存溢出

1、堆内存溢出 堆内存中主要存放对象、数组等,只要不断地创建这些对象,并且保证GC Roots到对象之间有可达路径来避免垃圾收集回收机制清除这些对象,当这些对象所占空间超过最大堆容量时,就会产生OutOfMemoryError的异常。堆内存异常示例如下: 运行后会报异常,在堆栈信息中可以看到 java.lang.OutOfMemoryError: Java heap space 的信息,说明在堆内存空间产生内存溢出的异常。 新产生的对象最初分配在新生代,新生代满后会进行一次Minor GC,如果Minor GC后空间不足会把该对象和新生代满足条件的对象放入老年代,老年代空间不足时会进行Full GC,之后如果空间还不足以存放新对象则抛出OutOfMemoryError异常。常见原因:内存中加载的数据过多如一次从数据库中取出过多数据;集合对对象引用过多且使用完后没有清空;代码中存在死循环或循环产生过多重复对象;堆内存分配不合理;网络连接问题、数据库问题等。 2、虚拟机栈/本地方法栈溢出 (1)StackOverflowError:当线程请求的栈的深度大于虚拟机所允许的最大深度,则抛出StackOverflowError,简单理解就是虚拟机栈中的栈帧数量过多(一个线程嵌套调用的方法数量过多)时,就会抛出StackOverflowError异常。最常见的场景就是方法无限递归调用,如下: 上述代码执行后抛出:Exception in thread “Thread-0” java.lang.StackOverflowError的异常。 (2)OutOfMemoryError:如果虚拟机在扩展栈时无法申请到足够的内存空间,则抛出OutOfMemoryError。我们可以这样理解,虚拟机中可以供栈占用的空间≈可用物理内存 - 最大堆内存 - 最大方法区内存,比如一台机器内存为4G,系统和其他应用占用2G,虚拟机可用的物理内存为2G,最大堆内存为1G,最大方法区内存为512M,那可供栈占有的内存大约就是512M,假如我们设置每个线程栈的大小为1M,那虚拟机中最多可以创建512个线程,超过512个线程再创建就没有空间可以给栈了,就报OutOfMemoryError异常了。 栈上能够产生OutOfMemoryError的示例如下: 上述代码运行后会报异常,在堆栈信息中可以看到 java.lang.OutOfMemoryError: unable to create new native thread的信息,无法创建新的线程,说明是在扩展栈的时候产生的内存溢出异常。 总结:在线程较少的时候,某个线程请求深度过大,会报StackOverflow异常,解决这种问题可以适当加大栈的深度(增加栈空间大小),也就是把-Xss的值设置大一些,但一般情况下是代码问题的可能性较大;在虚拟机产生线程时,无法为该线程申请栈空间了,会报OutOfMemoryError异常,解决这种问题可以适当减小栈的深度,也就是把-Xss的值设置小一些,每个线程占用的空间小了,总空间一定就能容纳更多的线程,但是操作系统对一个进程的线程数有限制,经验值在3000~5000左右。在jdk1.5之前-Xss默认是256k,jdk1.5之后默认是1M,这个选项对系统硬性还是蛮大的,设置时要根据实际情况,谨慎操作。 3、方法区溢出 前面说到,方法区主要用于存储虚拟机加载的类信息、常量、静态变量,以及编译器编译后的代码等数据,所以方法区溢出的原因就是没有足够的内存来存放这些数据。 由于在jdk1.6之前字符串常量池是存在于方法区中的,所以基于jdk1.6之前的虚拟机,可以通过不断产生不一致的字符串(同时要保证和GC Roots之间保证有可达路径)来模拟方法区的OutOfMemoryError异常;但方法区还存储加载的类信息,所以基于jdk1.7的虚拟机,可以通过动态不断创建大量的类来模拟方法区溢出。 上述代码运行后会报“java.lang.OutOfMemoryError: PermGen space”的异常,说明是在方法区出现了内存溢出的错误。 4、本机直接内存溢出 本机直接内存(DirectMemory)并不是虚拟机运行时数据区的一部分,也不是Java虚拟机规范中定义的内存区域,但Java中用到NIO相关操作时(比如ByteBuffer的allocteDirect方法申请的是本机直接内存),也可能会出现内存溢出的异常。

Numpy的一些特殊用法汇总

我将会不断更新,。。。 numpy的两种扩充维度方法 使用None和np.newaxis在效果上是一样的 在1维度扩充 在0维度扩充 在0和1维度扩充

s3 中的版本控制 versioning

三种版本模式: unable:单一版本enable:多版本suspend:从当前版本起不再生成新版本 unable 模式是将版本号设为 null,下次添加新版本会覆盖这个 null 版本。 enable 模式是每次修改都生成一个新对象,并给一个新的版本号。 suspend 模式是在有版本号的对象上面生成一个新的 null 版本,每次修改都是在重写这个 null 版本的对象。 模式转换触发操作 unable -> enable:自动在每个生成一个带版本号的新对象。 enable -> suspend:自动在每个对象上生成一个版本号为 null 的对象。 delete 操作 unable:在 null 版本上标记一个 delete 的 marker。 enable:在版本之上加入一个新版本,标记一个 delete 的 marker。 suspend:在 null 版本上标记 delete 的 marker(这意味着这上面的修改全部会丢失,不再能访问到)。 物理删除:必须指定版本号。逻辑删除:只指定对象的 key,不指定版本号。即在有版本之上生成一个对象,或就在 null 版本对象上,加一个 delete marker。定期清理:当对象的一个版本的生存时间超过 retention 时,会加入到 delete queue 中,进行物理删除(这意味着即使一个对象超过了生存时间,也有一定的时长内这个对象没有删除) 访问老版本 必须指定版本号才能访问老版本,只用 key 不用版本号只能访问最新版本。当最新版本有 delete marker 时将返回“找不到对象”。 访问权限 每一个版本都可指定不同用户的不同访问权限,即每个用户只用 key 时访问到的是自己的修改的最后版本对象。

Fashion-MNIST数据集下载失败的解决办法

1)从网上或网盘下载好压缩包(有4个); 2)在 C:\Users\du\Datasets\FashionMNIST\FashionMNIST目录下新建文件夹raw和processed; 3)将下载好的压缩包放在文件夹raw下;(4个压缩包如下) 4)之后再执行如下代码,会跳过下载步骤,直接进行解压操作; mnist_train = torchvision.datasets.FashionMNIST(root='~/Datasets/FashionMNIST', train=True, download=True, transform=transforms.ToTensor()) mnist_test = torchvision.datasets.FashionMNIST(root='~/Datasets/FashionMNIST', train=False, download=True, transform=transforms.ToTensor())

IIS 漏洞工具解析

1. 概述通过学习文档内容。 熟悉并掌握 IIS 写入漏洞利用工具的利用方法,了解具体的功能内 容,亲自实践操作,并根据课程需求完成相关任务。 2. 工具功能说明 IIS 写入漏洞利用工具是由桂林老兵写的一款漏洞利用工具,专门针对 IIS 写入漏洞。 接下来我们具体介绍一下相关的使用。 2.1.第一部分 数据包格式 该功能模块默认的数据包传输方法有 7 种,分别是: OPTIONS 返回服务器的各种信息 PUT 生成上传文件数据包的。 POST 用来提交表单 MOVE 是改名数据包。 COPY 是复制数据包。 DELETE 是删除数据包。 PROPFIND 是生成返回有浏览目录权限的目录内容的数据包。 最后点提交数据包把生成的数据包提交到服务器。域名在此处填写被检测网站的主机名或者 IP 地址请求文件 此处自定义被上传文件名 2.2.第二部分 该处是 HTTP 请求信息的回显区域,用于显示数据的请求状态。 2.3.第三部分 该处是 HTTP 响应信息的回显区域,用于显示服务响应结果内容。 3. 工具使用说明 例如 www.pig.com 根目录有可写权限。 选择本地一文件/填上他的域名/输入上传后存放的文件相对路径/点 PUT 生成数据包提 交即可把文件传到服务器。  改名输入域名/要改的文件名/点 MOVE 生成数据包。提交数据包后即可将指定文件改为 /shell.asp  删除文件 输入域名/输入要删除的文件相对路径/点 DELETE 生成数据包。检查无误后 提交数据包。这个文件就被删除了。 4. 案例演示 接下来以一个演示案例来说明一下 IIS 写入漏洞利用工具。首先我们需要确认目标网站 确实存在 IIS 可写入的漏洞,这个可以通过 AWVS 或者其他的扫描器辅助进行漏洞识别。

Idea Java 快捷键整理

Ctrl + h:继承树;Alt + Insert :唤起生成构造方法,get/set方法等;Ctrl + o:弹出重写方法框;Ctrl + Shift + Enter:整理代码格式,补充语句结束符号(如;),换行;Ctrl + Shift + F10:运行代码;Ctrl + Shift + 上下箭头:向上/向下移动当前这行代码;Ctrl + d:向下复制当前行;Ctrl + x:删除当前行代码;Ctrl + Alt + t:选择代码后,使用该快捷键可以唤起循环(如while,do while),捕获异常(try catch)操作选择,选择后会插入surround with结构到代码中;Alt + Enter:鼠标放在报错的波浪线上,按此快捷键,①如果是需要抛出异常会出现添加"Add exception to method signatrue"或"Surround with try/catch";②如果是缺少xx类,则会自动导入类;Ctrl + Alt + m:选择代码,然后使用此快捷键可以将选中的代码抽取成一个方法;

python 爬虫-爬取小说网站-小白级

第一次编写爬虫网站。(感觉有点较凌乱) 各位大神,如果有更好的意见,欢迎指点建议。谢谢。 目前代码基本上能按照正常的思路扒取小说内容。 思路如下:首先进入小说网站首页---》然后选取要下载的系列----》然后开始下载当前系列的所有书本链接,并存放json----》然后读取json文件内的数据进行下载。 目前代码能够按照思路进行下载,但是下载速度太慢了 ,没有进行多线程下载(持续更新这部分功能)。 我反爬机制没做好,如果在同一个局域网,两台不同的电脑&不同的请求头,同时运行,会处罚到网站的反爬机制,导致页面返回出错。还需要优化。 在头文件处,添加浏览器本身的cookie信息,可以解决出错这个问题。 以下是效果图。 源码在文末。 #这是链接文件。 # -*- encoding=utf8 -*- #zj为章节的意思 from bs4 import BeautifulSoup import requests import json #存储书本链接文件 import pandas as pd #清洗数据,去掉重复的链接需要用到 import os #检查当前目录下是否有对应的文件需要用到 #导入这个urllib3 这个库是为了屏蔽报错信息 from requests.packages.urllib3.exceptions import InsecureRequestWarning html_base = 'http://www.qu.la/' HEADERS= { 'User-Agent':'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36', 'Referer': 'https://www.qu.la/book/68/', 'Host': 'www.qu.la', 'Cookie': '【这里添加自己的cookie信息】'} xl = {} xl_link = {} zj_list_links = [] #收集书本的所有链接 zj_list_html_dict = {} # total(int):小说总数 next_href:下一页的链接 storyinfo = {} # 收集小说的书名、作者、简介、等信息 over_mark = True over_mark1 = True over_mark_getlinks = True #下载正文 ,下载完成后打开下一章继续下载,直至到完成一本书的下载 def get_story(soup): #下载第几章 storyinfo["

谷歌firebase_我使用Google Firebase学到的东西

谷歌firebase When I first started my coding journey, I always here fellow programmers talk about how annoying Authentication and Authorization are. You can spend hours upon hours of time scratching your head and melting your brain and researching on Stack Overflow about it, and the end results are simply not as fancy and visible as some front end JavaScript codes and CSS styling. Thanks to third party Authentication services such as OAuth & Google Firebase, we don’t have to ever write our own authentication and authorization codes.

Keras学习笔记3——keras.layers

目录 0. 函数1. 全连接层2. 激活层3. Dropout层4. Flatten层5. Reshape层6. 卷积层Conv2DLocallyConnected2D 7. 池化层8. 循环层RNNSimpleRNNGRULSTMConvLSTM2DSimpleRNNCellGRUCellLSTMCellCuDNNGRUCuDNNLSTM 9. 嵌入层10. 融合层 MergeAddSubtractMultiplyAverageMaximumConcatenateDotaddsubtractmultiplyaveragemaximumconcatenatedot 11. 高级激活层 Advanced ActivationsReLUSoftmaxThresholdedReLULeakyReLUPReLUELU 12. 标准化层 NormalizationBatchNormalization 13. 噪声层 NoiseGaussianNoiseGaussianDropoutAlphaDropout 14. 层封装器 wrappersTimeDistributedBidirectional 15. 其他InputPermuteRepeatVectorLambdaActivityRegularizationMaskingSpatialDropout1DSpatialDropout2DSpatialDropout3D 参考: Keras入门简介 >>> import keras >>> dir(keras.layers) ['Activation', 'ActivityRegularization', 'Add', 'AlphaDropout', 'AtrousConvolution1D', 'AtrousConvolution2D', 'Average', 'AveragePooling1D', 'AveragePooling2D', 'AveragePooling3D', 'AvgPool1D', 'AvgPool2D', 'AvgPool3D', 'BatchNormalization', 'Bidirectional', 'Concatenate', 'Conv1D', 'Conv2D', 'Conv2DTranspose', 'Conv3D', 'Conv3DTranspose', 'ConvLSTM2D', 'ConvLSTM2DCell', 'ConvRecurrent2D', 'Convolution1D', 'Convolution2D', 'Convolution3D', 'Cropping1D', 'Cropping2D', 'Cropping3D', 'CuDNNGRU', 'CuDNNLSTM', 'Deconvolution2D', 'Deconvolution3D', 'Dense', 'DepthwiseConv2D', 'Dot', 'Dropout', 'ELU', 'Embedding', 'Flatten', 'GRU', 'GRUCell', 'GaussianDropout', 'GaussianNoise', 'GlobalAveragePooling1D', 'GlobalAveragePooling2D', 'GlobalAveragePooling3D', 'GlobalAvgPool1D', 'GlobalAvgPool2D', 'GlobalAvgPool3D', 'GlobalMaxPool1D', 'GlobalMaxPool2D', 'GlobalMaxPool3D', 'GlobalMaxPooling1D', 'GlobalMaxPooling2D', 'GlobalMaxPooling3D', 'Highway', 'Input', 'InputLayer', 'InputSpec', 'LSTM', 'LSTMCell', 'Lambda', 'Layer', 'LeakyReLU', 'LocallyConnected1D', 'LocallyConnected2D', 'Masking', 'MaxPool1D', 'MaxPool2D', 'MaxPool3D', 'MaxPooling1D', 'MaxPooling2D', 'MaxPooling3D', 'Maximum', 'MaxoutDense', 'Minimum', 'Multiply', 'PReLU', 'Permute', 'RNN', 'ReLU', 'Recurrent', 'RepeatVector', 'Reshape', 'SeparableConv1D', 'SeparableConv2D', 'SimpleRNN', 'SimpleRNNCell', 'Softmax', 'SpatialDropout1D', 'SpatialDropout2D', 'SpatialDropout3D', 'StackedRNNCells', 'Subtract', 'ThresholdedReLU', 'TimeDistributed', 'UpSampling1D', 'UpSampling2D', 'UpSampling3D', 'ZeroPadding1D', 'ZeroPadding2D', 'ZeroPadding3D', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__path__', '__spec__', 'absolute_import', 'add', 'advanced_activations', 'average', 'concatenate', 'convolutional', 'convolutional_recurrent', 'core', 'cudnn_recurrent', 'deserialize', 'deserialize_keras_object', 'dot', 'embeddings', 'local', 'maximum', 'merge', 'minimum', 'multiply', 'noise', 'normalization', 'pooling', 'recurrent', 'serialize', 'subtract', 'wrappers'] 0.

电商后台管理系统——首页内容定制

一 点睛 不同的打包环境下,首页内容可能会有所不同。我们可以通过插件的方式进行定制。 二 定制过程 1 修改vue.config.js,配置如下 module.exports = { chainWebpack: config => { // 发布模式 config.when(process.env.NODE_ENV === 'production', config => { config.entry('app').clear().add('./src/main-prod.js') config.set('externals', { // 如果在打包期间,发现import的一个包名为vue,就不会把这个包合并到文件中 // 而是去window全局查找 Vue 对象,并直接使用 vue: 'Vue', 'vue-router': 'VueRouter', axios: 'axios', lodash: '_', echarts: 'echarts', nprogress: 'NProgress', 'vue-quill-editor': 'VueQuillEditor' }) // 定制首页 config.plugin('html').tap(args => { args[0].isProd = true return args }) }) // 开发模式 config.when(process.env.NODE_ENV === 'development', config => { config.entry('app').clear().add('./src/main-dev.js') // 定制首页 config.

贪心算法之电影节

问题描述 大学生电影节在北大举办,这天,在北大各地放了很多部电影 给定每部电影的放映时间,区间重叠的电影不可能同时看(端点可以重合),问李雷最多可以看多少部电影。 输入 多组数据,每组数据开头是n(n<=100),表示共n场电影,接下来n行,每行两个整数(均小于1000),表示一场电影的放映区间,n=0表示数据结束 输出 对每组数据输出最多能看几部电影。 样例输入 12 1 3 3 4 0 7 3 8 15 19 15 20 10 15 8 18 6 12 5 10 4 14 2 9 0 样例输出 5 算法思想: 如果一部电影结束的越早,那看完这部电影之后,后面我们看的电影就越多,所以我们需要尽可能的选那种结束时间较早的电影。 贪心解法 将所有电影按结束时间从小到大排序,第一步选结束时间最早的那部电影。然后,每步都选和上一部选中的电影不冲突且结束时间最早的那部电影。 复杂度:O(nlogn) 证明: 替换法,假设用贪心法挑选的电影序列是 a1,a2,… 不用此法挑选的最长的电影序列为 b1,b2… 现可证明,对任意的I,bi均可以替换成ai 用S(x)表示x开始时间,E(x)表示x结束时间,则 1)b1可以替换成a1,因为E(a1)<=E(b1); 2)若可以找到ai满足E(ai)<=E(bi)且ai可以替换bi,则存在E(ai+1)<=E(bi+1) 证 因为E(ai)<=E(bi),且E(bi)<=S(bi+1) 则:且E(ai)<=S(bi+1) ai是所有的S(X)>=E(ai)的x中,E(x)最小的 S(bi+1)>=E(bi)>=E(ai),所以E(bi+1)>=E(ai+1) 因此用ai+1替换bi+1不会对后续造成影响,替换可行 代码实现 package mooc; import java.util.ArrayList; import java.util.Collections; import java.util.List; import org.junit.Test; public class test圣诞老人的礼物 { public class Candy implements Comparable<Candy>{ public int v; public int w; public Candy(int v, int w) { super(); this.

数字信号处理面试题_软件面试中需要注意的5个危险信号

数字信号处理面试题 A lot of the time, the employer is in a position of power during an interview. They set the agenda and questions, and they’re the ones on the home field. But that doesn’t mean everything is out of your control as a candidate. 在很多时候,雇主在面试中都处于权力位置。 他们设定了议程和问题,而这正是本国领域的问题。 但这并不意味着一切都变得候选人无法控制。 As the candidate, it’s within your right only to seek out companies worth working for. Often, you can learn a lot about the quality of the company, your job, and the team you would work on during the interview.

Keras学习笔记2——keras.models

目录 keras.models.Sequential()第一步,模型初始化第二步,模型编译compile 第三步,模型训练fit 第四步,模型评估evaluatepredict 其他函数train_on_batchtest_on_batchpredict_on_batchfit_generatorevaluate_generatorpredict_generatorget_layer 实例分析 keras.models.Model()使用Model构建模型的步骤:第一步 定义输入层第二步 模型初始化第三步 模型编译第四步 模型训练第五步 模型评估 模型的方法和属性model.summary()keras.utils.plot_model模型信息展示权重相关 Model 类继承 在 Keras 中有两类主要的模型:Sequential 顺序模型 和 使用函数式 API 的 Model 类模型。参考:Keras中文文档 keras.models.Sequential() 顺序模型 Sequential 采用多个网络层堆叠 第一步,模型初始化 from keras.models import Sequential from keras.layers import Dense 方式一:使用 .add() 逐层堆叠模型 # step1 :模型初始化 model = Sequential() # 使用 .add() 来堆叠模型,一层一层加入,构建所需的神经网络 # 模型需要知道它所期望的输入的尺寸,顺序模型中的第一层需要接收关于其输入尺寸的信息。 model.add(Dense(units=32, activation='relu', input_dim=784)) # 下面的层不需要输入尺寸的信息,可以自动地推断尺寸。 model.add(Dense(units=10, activation='softmax')) 方式二:使用 layer 的 list 直接创建模型 model = Sequential([ Dense(32, input_shape=(784,)), Activation('relu'), Dense(10), Activation('softmax'), ]) 传递一个 input_shape 参数给第一层,顺序模型中的第一层需要接收关于其输入尺寸的信息。它是一个表示尺寸的元组 (一个由整数或 None 组成的元组,其中 None 表示可能为任何正整数)。在 input_shape 中不包含数据的 batch 大小。如果你需要为你的输入指定一个固定的 batch 大小,你可以传递一个 batch_size 参数给一个层。如果你同时将 batch_size=32 和 input_shape=(6, 8) 传递给一个层,那么每一批输入的尺寸就为 (32,6,8)。某些 2D 层,例如 Dense,支持通过参数 input_dim 指定输入尺寸,input_dim=784 等价于input_shape=(784,) 第二步,模型编译 # step2:使用 .

react 打字机效果_React中的打字稿—如何添加

react 打字机效果 In this article, I will be showing you how to add typescript from your existing react application. 在本文中,我将向您展示如何从现有的React应用程序中添加打字稿。 If you are a software developer that started from strongly typed programming languages such as Java and C sharp, you might want to always have a type checking and see errors beforehand. Unlike without adding typescript, you only see the type errors after you’ve compiled and run the code.