HFSS过孔建模

1.工具软件 1.1 过孔向导工具:Via Wizard3.1 1.2 ANSYS软件版本:2022 R1 2. 叠层信息 说明: 2.1 此叠层是一个实际PCB设计项目的叠层 2.2 叠层中DK值,是板厂根据自己的工艺及经验得到的值,跟板材的Datasheet是对不上的,个人认为在有板厂提供的叠层时,使用板厂的 2.3 DF是根据Datasheet中得出,或者是随意填上去的,这里单针对过孔仿真来说,个人认为这不是重要的,仿真过孔主要是评估其阻抗, 如果需要提取S参数,进行链路仿真,DF还是要根据实际值填入 3. 使用ViaWizard向导工具,填入参数 3.1 设置叠层"Stackup" 3.2 设置过孔焊盘参数 3.3 设置过孔位置 3.4 设置Options选项卡中的参数 4. 确认求解类型为"Terminal" 5. 修正差分线的空气间距 6. 以仿真Stub的影响为例,设置差分信号过孔背钻变量。可以根据需要仿真反焊盘、回流地孔位置、差分过孔间距的影响,设置参考如下 7. 建立差分对 8. 设置扫描参数 9.验证检查是否通过 10. 点击开始仿真 11. 参看仿真结果,参数根据需要填入 12. 增加Mark点,以便更好的观察 总结: 1. 过孔向导工具中的参数一定要正确,其直接影响后面的仿真结果 2. 进入HFSS后,一定要修改差分线对内的空隙间距 3. 如果要进行变量参数扫描,在其值一栏最好都用变量,否则结果中多条曲线,完全重叠在一起,这是不对的 4. 如果出现仿真结果不对,参数又设置都是正常时,可尝试将软件重新打开试试 5. 为了更为准确,可根据实际情况对过孔的介质填充进行选择

基于stm32的简单车牌识别原理

前言 车牌识别的目的是交通牌照识别系统,用于交通违法拍照,停车缴费等交通应用场景,车牌识别的流程可分为车牌定位和字符识别两个部分,传统的车牌定位算法常采用二值化分割加上边缘提取,然后进行目标晒选,常采用连线法和车牌宽高比确定真实车牌,定位到车牌位置后再进行OCR字符分割,为了高精度的车牌定位和字符识别,目前引入了深度学习算法进行精准识别和处理。但是,本文所要讲述的是一种基于stm32单片机的车牌识别实现,使用上述高级算法和复杂计算是不现实的,因此,总结出一套可行的,能简单进行车牌定位和字符分割识别的算法,供大家参考和学习。 1.车牌识别基本原理 本文讲述的是基于stm32单片机的车牌识别原理,包括车牌图像定位,字符分割,字符归一化处理,以及模板匹配等操作,当然如果芯片处理性能足够还可以加入旋转矫正,多车牌处理等,本文尽量采用最简单易懂的方法进行图像分割处理,同时加快处理速度。 首先,讲一讲网络上大部分stm32F103车牌识别的硬件和软件实现,硬件采用的是stm32f103rct6+OV7670&FIFO+16bit并口LCD屏;72M主频,不支持浮点运算等操作; 软件实现过程大致如下: (1)OV7670带FIFO摄像头图像采集,采用GPIO模拟摄像头时序,通过读取FIFO输出值将图像直接显示在LCD屏上 (2)LCD屏相当于一个图像缓存,同时也做显示,通过读取LCD屏上的像素值进行图像处理; (3)车牌定位处理,车牌定位常用二值化分割,腐蚀膨胀处理,连通域计算等操作,显然这些算法在stm32f1上实现是很困难的,且处理速度太慢,因此,采用RGB转HSV颜色空间变换和阈值选择进行车牌定位,然后将车牌定位区域进行二值化处理,不是蓝色车牌的部分就是字符区域; (4)车牌字符分割处理,字符分割先采用行统计加列统计的方式,确定每行和每列的有效像素和,进一步确定字符区域;然后进行横向统计分割,通过每一列的像素和阈值判断字符的分界线和个数; (5)车牌归一化处理,归一化处理先将每个字符提取出来,然后按照像素值进行横向和纵向压缩,最终处理成模板一样大小的字符;并在液晶屏上保存字符的数据; (6)模板匹配,将归一化之后的字符,与模板中的字符通过像素值一一比较,确定相似度最高的字符就是目标值; 上述方法简单有效,但是对于图像模糊,杂色较多以及光照条件不同的情况下,识别效果会很差。 2.基于stm32的车牌识别算法 2.1基本硬件 硬件采用stm32f407vet6(168M主频,192KB RAM)+OV7670无fifo+SPI-LCD(采用F407及以上具有DCMI数字摄像头接口的主芯片);处理速度和内存都比F103强太多,因此不用采用读取像素值的方式,甚至不用液晶屏显示也能进行识别处理。 2.2识别算法流程 将车牌识别分为四个步骤,分别是双HSV颜色阈值定位,车牌旋转矫正,字符分割和提取,以及最终的车牌字符识别,全部采用的是传统图像处理算法,适合单片机运行。 (1)基于双阈值HSV颜色空间的车牌定位 首先,我们的车牌区域是具有双阈值特性的,蓝牌车具有蓝底白字的特性,绿牌车具有绿底黑字的特性,这种特性使得基于颜色空间进行定位分割是非常方便的(虽然受环境光照影响可能阈值不太准确,但是这种方法是最简单且有效的),通过颜色阈值分割之后,再根据车牌长宽比进行真实车牌目标的定位。 (2)基于霍夫变换的车牌矫正 对于定位之后的车牌,再进行二值化处理和边界计算,可以得到车牌的边界线,根据霍夫变换寻找车牌边界上的最长线段,计算线段的偏转角度进行车牌旋转矫正,矫正之后的车牌区域再进行字符分割,能增加准确率。通过矫正之后,建议先将车牌图像进行归一化处理,即,将车牌区域进行剪裁和缩放到固定大小,便于后续处理。 (3)字符分割和提取 首先对二值化的车牌进行滤波处理,去除一些杂质,然后根据线段分割法,计算车牌水平和垂直方向投影的像素线段长度,可以分割出每个字符所在的区域,但是由于车牌的边缘固定件,车牌污渍的影响,此时需要做非字符区域去除,首先去除车牌固定件影响的区域,通过水平投影线计算车牌的上下界限,将车牌外部的边缘排除出去,然后进行局部边缘滤波,去除污渍,最后车牌部分分割,并提取出来进行下一步处理; 常用简单滤波方法有,中值滤波,局部均方差滤波,高斯滤波,盒子滤波,拉普拉斯边缘增强等等,边缘提取算法有sobel算子,pewrit算子,canny算子等,可在车牌字符区域处理过程中综合运用 (4)字符识别 将车牌部分字符提取出来后,先将字符做归一化处理,采用图像缩放算法进行字符大小调整到统一尺寸,然后做字符指纹图转换(将8bit转换成1bit,便于字符指纹比对),最后采用模板匹配算法计算目标字符与模板的相似度,这里可以采用逐一像素比对法,也可以采用余弦距离计算,最后将相似度最高的模板做标记,车牌的全部字符处理完成可得到最终的结果。 2.3 图像处理算法 以下讲述几种可用于车牌图像处理的算法,其中LAB颜色阈值处理可比HSV颜色阈值精准度更好一些,可做参考 (1)RGB转LAB颜色空间 直接查表法最快最简单,这里直接引用openmv中的算法,具体可以在openmv 的github上查看。 #define COLOR_RGB565_TO_R8(pixel) \ ({ \ __typeof__ (pixel) __pixel = (pixel); \ __pixel = (__pixel >> 8) & 0xF8; \ __pixel | (__pixel >> 5); \ }) #define COLOR_RGB565_TO_G8(pixel) \ ({ \ __typeof__ (pixel) __pixel = (pixel); \ __pixel = (__pixel >> 3) & 0xFC; \ __pixel | (__pixel >> 6); \ }) #define COLOR_RGB565_TO_B8(pixel) \ ({ \ __typeof__ (pixel) __pixel = (pixel); \ __pixel = (__pixel << 3) & 0xF8; \ __pixel | (__pixel >> 5); \ }) int8_t imlib_rgb565_to_l(uint16_t pixel) { float r_lin = xyz_table[COLOR_RGB565_TO_R8(pixel)]; float g_lin = xyz_table[COLOR_RGB565_TO_G8(pixel)]; float b_lin = xyz_table[COLOR_RGB565_TO_B8(pixel)]; float y = ((r_lin * 0.

网络之以太网

以太网 Author:onceday date:2022年7月20日 1.引言 局域网是一种使用广播信道的数据链路层网络,以太网是其最典型的代表。 具有以下特点: 具有广播功能便于系统的扩展和逐渐演变提高了系统的可靠性、可用性。生存性。 以太网是一种共享介质的局域网技术,多个站点链接到同一个共享介质上,同一时间只能有一个站点发送数据,这种链路连接着多个终端,就是多路访问。 冲突域是连接到同一个导线的所有节点的集合:所有的节点都共享带宽,就会发生冲突,且一个节点发出的报文(无论是单播、组播、广播)其余节点都可以收到。 广播域:网络中能接收任一设备发出的广播帧的所有设备的集合。简单的说如果站点发出一个广播信号,所有能接收收到这个信号的设备范围称为一个广播域。传统的二层交换机所有端口都属于一个广播域。 以太网包含以下三种帧: 单播帧(unicast),一对一,收到帧的MAC地址与本站硬件地址相同。广播帧(broadcast),一对全体,发送给本局域网上所有站点的帧,地址全1。多播帧(multicast),一对多,发送给本局域网上一部分站点的帧。 以太网适配器借助集线器进行组网,有以下三种形式: 星形网,集线器在中间,其它设备都连上。环形网,设备连在一个圆上。总线网,所有设备连在一个线上,总线两端匹配电阻可吸收能量。 集线器工作在物理层,只是简单的转发比特,不进行碰撞检测。 以太网需要考虑如何共享信道,有以下两种大类: 静态划分信道,如FDMA、CDMA、TDMA。动态媒体接入控制,如随机接入和受控接入。 随机接入包含MA、CSMA、CSMA/CD、CSMA/CA。 受控接入包含预约、轮询、令牌传递。 信道划分协议代价高昂,不适合局域网使用。 轮询协议中要求其中一个结点为主节点,然后以循环的方式遍历整个网络,优点是提高了效率,缺点是引入了轮询时延,且主节点一旦故障,网络将失去瘫痪。 令牌传递协议,协议中没有主节点,一个令牌的特殊帧在节点之间以某种固定的次序进行交换。 随机接入协议,每个节点能以信道的全部速率进行发送,当碰撞时 ,每个节点反复的重发它的帧,直到改帧通过为止。最常用的有ALOHA协议(检测到冲突不会停止发送)和载波监听多点接入(CSMA)协议。 以太网使用的是CSMA/CD协议,但新的以太网由于引入了以太网交换机,已经不共享信道了,也就不要碰撞检测了。 2.以太网的标准 1982年的DIX Ethernet V2是第一个正式以太网标准。第一个是1983年IEEE 802委员会定义的IEEE 802.3标准。两者的帧有些许不同,但大致算兼容。 IEEE 802委员会曾把局域网的数据链路层拆分成逻辑链路控制LLC子层和媒体接入控制MAC子层。 但LLC子层逐渐已经被废弃了。对于这种结构,物理层的内容都放在MAC子层了,即MAC子层以下对LLC子层是完全透明的。 3.CSMA/CD 协议 最早的以太网把所有的站点连到一根总线上: 采用无连接的模式,不对帧编号,也不用确认。提供尽最大服务的交付,如果收到校验错误帧,就直接丢弃帧。同一时间只允许一台计算机发送数据。 以太网使用曼彻斯特编码,因而无需提供长度信息。 协议全称:载波监听多点接入/碰撞检测。 多点接入,说明这是总线型网络。载波监听,不停检测信道是否空闲。碰撞检测,边发送边监听,如果信号电压服务超过了门限值,可以认为总线上至少有两个站在发送数据。 电磁波在总线上以有限的速率传播,在1km电缆的传播时延约为5us。 将总线上单程端到端传播时延即为e。 那么A站点至少需要2e的时间知道自己数据与B站点发送的数据有无冲突。即A数据到达B站点时,B站点也发出了数据,然后到达A站点。 实际情况时,要按最坏的情况考虑 ,即最远的两个端点。 CSMA/CD协议不支持同时发送和接收,所以工作在双向交替通信(半双工通信)。 在A站点发送数据的到B站点前,即0-e时间内: B站可能发送数据,因为它检测到信道空闲。检测到A站数据后,B站停止发送数据。最迟2e时,A站知道B站也发了数据,此时已发送的数据无效。2e后,A站未检测到碰撞,则数据可以放心发送。 因此,0-2e这段时间也叫争用期(碰撞窗口)。 当检测到碰撞时,使用截断二进制指数退避算法确定重发时机: 规定基本争用期为2e。从离散集合[0,(2^k-1)]中随机选出一个整数,记录为r,重传推后的时间就是r*e。当重传次数不超过10次时,k=重传次数。超过10次重传,k=10。当重传到达16次时,还不能成功,就丢弃该帧,并向高层报告。 如果帧很短,发送时间小于2e,那么很有可能在发送完成后,发生碰撞,但又无法检测到,那么该帧就丢失了。 因此,以太网规定了一个最短帧长64字节。 对于10 Mbit/s以太网,发送512 bit需要51.2us,所以争用期可以固定为51.2us: 检测到碰撞就会停止发送,因此小于64字节的帧都是异常中止的无效帧,应丢弃。e=51.2/2=25.6us,则以太网端到端长度最大约为25.6us/5us*1km=5km。 因此,实用的以太网都能在争用期51.2us内检测到可能发生的碰撞。 此外还有强化碰撞信号,让其他用户能知道现在已经发生了碰撞。 一般发送32比特或48比特的人为干扰信号。 接收成功之后,还需等待一个帧间最小间隔9.6us(96bit),使刚接收到数据帧的站点的接收缓存来得及清理。 当总线式以太网的利用率达到30%时,就已经处于重载情况了,此时很多网络容量被碰撞消耗掉了。 CSMA/CD发送数据帧流程图: 4.以太网的MAC地址 OUI: Organizationally unique identifier,代表网络硬件制造商编号,他由IEEE统一分配

BroadCast Receiver(广播)详解

目录 静态广播 1.首先在这边创建广播接收器 2.在AndroidManifest.xml中写入静态接收名 3.在主方法把广播发送给静态广播接收者 4.在广播接收器里面接收广播 动态广播: 1.创建广播继承BroadcastReceiver 2.在主方法注册动态广播 3.发送给动态广播 4.反注册 BroadCast Receiver是四大组件之一,是一个全局的监听器 BroadCast Receiver有两大功能,广播发送者,广播接收者 BroadCast Receiver分为静态广播和动态动态广播 静态广播 1.首先在这边创建广播接收器 2.在AndroidManifest.xml中写入静态接收名 <receiver android:name=".MyStaiticReceiver" android:enabled="true" android:exported="true"> <intent-filter> <action android:name="wzk" /> </intent-filter> </receiver> 3.在主方法把广播发送给静态广播接收者 btn_sendstatic=findViewById(R.id.btn_sendstatic); btn_sendstatic.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { //发送广播给静态广播接收者 Intent intent=new Intent(); //在Android8.0以上就不支持静态广播了,需要加一个这个 intent.setPackage(getPackageName()); intent.setAction("wzk"); intent.putExtra("info","你好"); sendBroadcast(intent); } }); btn_sendstatic=findViewById(R.id.btn_sendstatic); btn_sendstatic.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { //发送广播给静态广播接收者 Intent intent=new Intent(); intent.setPackage(getPackageName()); intent.setAction("wzk"); intent.putExtra("info","你好"); sendBroadcast(intent); } }); 4.

python实战故障诊断之CWRU数据集(一):数据集初识

文章目录 1. 概述2. CWRU数据集简介2.1. 试验设施简介2.2. 试验数据简介 3. 轴承数据初步探索4. 轴承的故障特征频率探索 1. 概述 在完成了振动信号处理的基础篇与高级篇后,不少读者建议采用真实数据对各类振动信号算法进行剖析。经过几个月的搜集与积累,笔者决定从公开的凯斯西储大学(CWRU)轴承数据入手,以新南威尔士大学Robert B. Randall教授数十年多篇论文为切入点,继续与大家探索隐藏在振动信号中的奥秘。 本系列第一篇文章,是对CWRU数据集进行一个简介,同时为大家提供了相关数据的下载地址和数据初识。 2. CWRU数据集简介 基于振动信号的滚动轴承故障诊断经过多年的发展,已经成为一个较为成熟的领域,但目前相关研究人员仍在不断开发新的故障诊断算法,提升相关技术。而对于新的故障诊断算法,若没有公认的基准,很难合理有效地评估其性能。在过去的十年中,来自凯斯西储大学(CWRU)轴承数据中心的数据已经成为测试这些算法的参考标准。数据下载地址 2.1. 试验设施简介 凯斯西储大学(CWRU)轴承数据中心试验台的基本布局如图2.1所示。它由2马力伺服电机直驱,驱动轴尾部安装了测功仪,用于模拟负载。同时在驱动轴上还安装了扭矩测量装置(扭矩传感器与编码器),可将采集到的扭矩信息反馈给控制系统,从而调整测功仪的功率,进而控制负载。 图2.1 实验设施示意图 2.2. 试验数据简介 在测试中,使用电火花加工(EDM),在电机的驱动端和风扇端轴承(SKF深沟球轴承:6205-2RS JEM和6203-2RS JEM)上植入直径为0.007 - 0.028英寸(0.18 - 0.71 mm)的故障,故障分别被设置在滚动体、内圈和外圈上。每种故障轴承均被以同样的状态安装在试验台上,然后在0到3马力的电机负载下(大约电机转速为1797到1720 rpm)以恒速运行。 在每次测试中,测量驱动端轴承壳体(DE)垂直方向上的加速度,在一些测试中也测量风扇端轴承壳体(FE)和电机支撑底板(BA)垂直方向上的加速度。某些测试使用的采样率为12 kHz,其他测试使用的采样率为48 kHz。通过测试共计获得161组数据,各数据对应的具体工况如下图所示: 图2.2 数据集简介 3. 轴承数据初步探索 提取125DE数据,结果如图3.1(相关代码如下),信号时域部分较为平稳(信号峰度为3.04),但其频谱图中存在较多特征线谱,特别是在11-14 kHz波段。 图3.1 125DE信号 from scipy.io import loadmat import numpy as np from scipy import signal, fftpack, stats import matplotlib.pyplot as plt # 从.mat文件中解析数据 def get_data(source, fs): for i, key in enumerate(source.

(二)vsftpd服务配置多用户多目录权限

(二)vsftpd服务配置多用户多目录权限 1,安装vsftpd服务 # 关闭SELINUX sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config && setenforce 0 # 关闭防火墙 systemctl stop firewalld && systemctl disable firewalld # 时间同步 ntpdate 0.asia.pool.ntp.org # 安装服务 yum install vsftpd -y #此目录是配置文件目录 cd /etc/vsftpd/ && ls # 启动 systemctl start vsftpd # 开机自启 systemctl enable vsftpd 2,场景化 搭建应用部FTP服务器,要求: 每位员工拥有独立根目录在自己目录下可见应用部公共目录publish(只读)、其他部门共享目录share(读写)在自己目录下有独立的日志(工作日报)目录,可写、可删除权限,但目录本身员工不可删除禁锢虚拟用户的主目录,同时禁止访问除主目录之外的目录开启日志,记录登录、上传、下载、删除信息 目录规划 应用部共享目录:/home/vsftpuser/share(任何用户可删除可上传可下载) 应用部公共目录:/home/vsftpuser/publish (任何用户可下载,特殊用户可上传下载删除) 员工个人独立目录:/home/vsftpuser/app/{xxx} (只能当前用户才能上传下载删除) mkdir -p /home/vsftpuser/publish mkdir -p /home/vsftpuser/share mkdir -p /home/vsftpuser/app/zhangsan mkdir -p /home/vsftpuser/app/lisi 调整 vsftpd.conf 配置 vim /etc/vsftpd/vsftpd.

Kafka核心概念、优势、应用场景与基本架构

一、 Kafka介绍 Kafka是最初由Linkedin公司开发,是一个分布式、分区的、多副本的、多生产者、多订阅者,基于zookeeper协调的分布式日志系统(也可以当做MQ系统),常见可以用于web/nginx日志、访问日志,消息服务等等,Linkedin于2010年贡献给了Apache基金会并成为顶级开源项目。 主要应用场景是:日志收集系统和消息系统。 Kafka主要设计目标如下: 以时间复杂度为O(1)的方式提供消息持久化能力,即使对TB级以上数据也能保证常数时间的访问性能。高吞吐率。即使在非常廉价的商用机器上也能做到单机支持每秒100K条消息的传输。支持Kafka Server间的消息分区,及分布式消费,同时保证每个partition内的消息顺序传输。同时支持离线数据处理和实时数据处理。支持在线水平扩展 有两种主要的消息传递模式:点对点传递模式、发布-订阅模式。大部分的消息系统选用发布-订阅模式。Kafka就是一种发布-订阅模式。 对于消息中间件,消息分推拉两种模式。Kafka只有消息的拉取,没有推送,可以通过轮询实现消息的推送。 Kafka在一个或多个可以跨越多个数据中心的服务器上作为集群运行。Kafka集群中按照主题分类管理,一个主题可以有多个分区,一个分区可以有多个副本分区。每个记录由一个键,一个值和一个时间戳组成。 Kafka具有四个核心API: Producer API:允许应用程序将记录流发布到一个或多个Kafka主题。Consumer API:允许应用程序订阅一个或多个主题并处理为其生成的记录流。Streams API:允许应用程序充当流处理器,使用一个或多个主题的输入流,并生成一个或多 个输出主题的输出流,从而有效地将输入流转换为输出流。Connector API:允许构建和运行将Kafka主题连接到现有应用程序或数据系统的可重用生产者 或使用者。例如,关系数据库的连接器可能会捕获对表的所有更改。 二、Kafka优势 高吞吐量:单机每秒处理几十上百万的消息量。即使存储了许多TB的消息,它也保持稳定的性能。高性能:单节点支持上千个客户端,并保证零停机和零数据丢失。持久化数据存储:将消息持久化到磁盘。通过将数据持久化到硬盘以及replication防止数据丢失。 零拷贝顺序读,顺序写利用Linux的页缓存 分布式系统,易于向外扩展。所有的Producer、Broker和Consumer都会有多个,均为分布式 的。无需停机即可扩展机器。多个Producer、Consumer可能是不同的应用。可靠性 - Kafka是分布式,分区,复制和容错的。客户端状态维护:消息被处理的状态是在Consumer端维护,而不是由server端维护。当失败 时能自动平衡。支持online和offline的场景。支持多种客户端语言。Kafka支持Java、.NET、PHP、Python等多种语言。 三、 Kafka应用场景 日志收集:一个公司可以用Kafka可以收集各种服务的Log,通过Kafka以统一接口服务的方式开放给各种Consumer; 消息系统:解耦生产者和消费者、缓存消息等; 用户活动跟踪:Kafka经常被用来记录Web用户或者App用户的各种活动,如浏览网页、搜索、点击等活动,这些活动信息被各个服务器发布到Kafka的Topic中,然后消费者通过订阅这些Topic来做实时的监控分析,亦可保存到数据库; 运营指标:Kafka也经常用来记录运营监控数据。包括收集各种分布式应用的数据,生产各种操作的集中反馈,比如报警和报告; 流式处理:比如Spark Streaming和Storm。 四、基本架构 1、消息和批次 Kafka的数据单元称为消息。可以把消息看成是数据库里的一个“数据行”或一条“记录”。消息由字节数组组成。 消息有键,键也是一个字节数组。当消息以一种可控的方式写入不同的分区时,会用到键。 为了提高效率,消息被分批写入Kafka。批次就是一组消息,这些消息属于同一个主题和分区。 把消息分成批次可以减少网络开销。批次越大,单位时间内处理的消息就越多,单个消息的传输时间就越长。批次数据会被压缩,这样可以提升数据的传输和存储能力,但是需要更多的计算处理。 2、模式 消息模式(schema)有许多可用的选项,以便于理解。如JSON和XML,但是它们缺乏强类型处理能力。Kafka的许多开发者喜欢使用Apache Avro。Avro提供了一种紧凑的序列化格式,模式和消息体分开。当模式发生变化时,不需要重新生成代码,它还支持强类型和模式进化,其版本既向前兼容,也向后兼容。 数据格式的一致性对Kafka很重要,因为它消除了消息读写操作之间的耦合性。 3、主题和分区 Kafka的消息通过主题进行分类。主题可比是数据库的表或者文件系统里的文件夹。主题可以被分为若干分区,一个主题通过分区分布于Kafka集群中,提供了横向扩展的能力。 4、生产者和消费者 生产者创建消息。消费者消费消息。 一个消息被发布到一个特定的主题上。 生产者在默认情况下把消息均衡地分布到主题的所有分区上: 直接指定消息的分区根据消息的key散列取模得出分区轮询指定分区。 消费者通过偏移量来区分已经读过的消息,从而消费消息。 消费者是消费组的一部分。消费组保证每个分区只能被一个消费者使用,避免重复消费。 5、broker和集群 一个独立的Kafka服务器称为broker。broker接收来自生产者的消息,为消息设置偏移量,并提交消息到磁盘保存。broker为消费者提供服务,对读取分区的请求做出响应,返回已经提交到磁盘上的消息。单个broker可以轻松处理数千个分区以及每秒百万级的消息量。 每个集群都有一个broker是集群控制器(自动从集群的活跃成员中选举出来)。 控制器负责管理工作: 将分区分配给broker监控broker 集群中一个分区属于一个broker,该broker称为分区首领。 一个分区可以分配给多个broker,此时会发生分区复制。 分区的复制提供了消息冗余,高可用。副本分区不负责处理消息的读写。 五、核心概念 1、Producer 生产者创建消息。 该角色将消息发布到Kafka的topic中。broker接收到生产者发送的消息后,broker将该消息追加到当前用于追加数据的 segment 文件中。 一般情况下,一个消息会被发布到一个特定的主题上。 默认情况下通过轮询把消息均衡地分布到主题的所有分区上。在某些情况下,生产者会把消息直接写到指定的分区。这通常是通过消息键和分区器来实现的,分区器为键生成一个散列值,并将其映射到指定的分区上。这样可以保证包含同一个键的消息会被写到同一个分区上。生产者也可以使用自定义的分区器,根据不同的业务规则将消息映射到分区 2、Consumer 消费者读取消息。

SSH原理与使用

一、SSH介绍 SSH是Secure Shell Protocol的简写,用于加密两台计算机之间的通信,并且支持各种身份验证机制。SSH先对联机数据包通过加密技术进行加密处理,加密后在进行数据传输。确保了传递的数据安全。 SSH是安全的加密协议,用于远程连接linux服务器。SSH默认端口是22,安全协议版本SSHv2,除了2之外还有SSHv1(有漏洞)。SSH服务端主要包含两个服务功能SSH远程连接和SFTP服务。Linux SSH客户端包含ssh远程连接命令,以及远程拷贝scp命令等。 而SSH 的软件架构是服务器-客户端模式(Server - Client)。在这个架构中,SSH 软件分成两个部分:向服务器发出请求的部分,称为客户端(client),OpenSSH 的实现为 ssh;接收客户端发出的请求的部分,称为服务器(server),OpenSSH 的实现为 sshd。 二、SSH登录 1、基本用法 SSH主要用于远程登录。假定你要以用户名user,登录远程主机host,只要一条简单命令就可以了。 # user指的是你远程主机的名字,host指的是ip或者局域网的主机名 ssh user@host # 如果本地用户名与远程用户名一致,登录时可以省略用户名。 ssh host #SSH的默认端口是22,你的登录请求会送进远程主机的22端口。使用p参数,可以修改这个端口,注意端口开放。 ssh -p 2222 user@hostSSH 2、口令登录 SSH之所以能够保证安全,原因在于它采用了公钥加密。整个过程是这样的: 远程主机收到用户的登录请求,把自己的公钥发给用户。用户使用这个公钥,将登录密码加密后,发送回来。远程主机用自己的私钥,解密登录密码,如果密码正确,就同意用户登录。 这个过程本身是安全的,但是实施的时候存在一个风险:如果有人截获了登录请求,然后冒充远程主机,将伪造的公钥发给用户,那么用户很难辨别真伪。因为不像https协议,SSH协议的公钥是没有证书中心(CA)公证的,也就是说,都是自己签发的。可以设想,如果攻击者插在用户与远程主机之间(比如在公共的wifi区域),用伪造的公钥,获取用户的登录密码。再用这个密码登录远程主机,那么SSH的安全机制就荡然无存了。这种风险就是著名的"中间人攻击"(Man-in-the-middle attack)。 ssh user@host 第一次登录对方主机,系统会出现一个警告提示,意思是无法确认远程主机的真实性,只知道它的公钥指纹,问你还想继续连接吗?经过用户的考虑后接受,之后进行口令的输入,如果密码正确,就可以登录了。当远程主机的公钥被接受以后,它就会被保存在文件$HOME/.ssh/known_hosts之中。下次再连接这台主机,系统就会认出它的公钥已经保存在本地了,从而跳过警告部分,直接提示输入密码。 3、公钥登录 使用密码登录,每次都必须输入密码,非常麻烦。SSH还提供了公钥登录,可以省去输入密码的步骤。 所谓"公钥登录",原理很简单,就是用户将自己的公钥储存在远程主机上。登录的时候,远程主机会向用户发送一段随机字符串,用户用自己的私钥加密后,再发回来。远程主机用事先储存的公钥进行解密,如果成功,就证明用户是可信的,直接允许登录shell,不再要求密码。 这种方法要求用户必须提供自己的公钥。如果没有现成的,可以直接用ssh-keygen生成一个: #程序会询问一系列问题,然后生成密钥,默认rsa算法 ssh-keygen #通常做法是使用-t参数,指定密钥的加密算法 ssh-keygen -t dsa 执行ssh-keygen命令以后,会出现第一个问题,询问密钥保存的文件名,默认是~/.ssh/id_rsa文件,这个是私钥的文件名,对应的公钥文件~/.ssh/id_rsa.pub是自动生成的。用户的密钥一般都放在主目录的.ssh目录里面。生成密钥以后,公钥必须上传到服务器,才能使用公钥登录。 手动上传公钥 OpenSSH 规定,用户公钥保存在服务器的~/.ssh/authorized_keys文件。你要以哪个用户的身份登录到服务器,密钥就必须保存在该用户主目录的~/.ssh/authorized_keys文件。只要把公钥添加到这个文件之中,就相当于公钥上传到服务器了。每个公钥占据一行。如果该文件不存在,可以手动创建。 ssh-copy-id命令:自动上传公钥 OpenSSH 自带一个ssh-copy-id命令,可以自动将公钥拷贝到远程服务器的~/.ssh/authorized_keys文件。如果~/.ssh/authorized_keys文件不存在,ssh-copy-id命令会自动创建该文件。 #需要把工作目录切换到~/.ssh/下 ssh-copy-id -i id_rsa user@host 上面命令中,-i参数用来指定公钥文件,user是所要登录的账户名,host是服务器地址。如果省略用户名,默认为当前的本机用户名。执行完该命令,公钥就会拷贝到服务器。 #SSH 就会自动采用密钥登录,不再提示输入密码。 ssh user@host 从此ssh登录,为了安全性就不需要密码登录了,具体方法就是打开服务器 sshd 的配置文件/etc/ssh/sshd_config,将PasswordAuthentication这一项设为no,最后重启sshd。

0基础学MySQL数据库—从小白到大牛(18)Linux下MySQL的安装与使用

文章目录 进阶学习在Liunx安装MySQL1.卸载MySQL查看是否有MySQL开始卸载 2.安装MySQLMySQL的4大版本下载MySQL指定版本Linux系统下安装MySQL的几种方式Linux系统下安装软件的常用三种方式:方式1:rpm命令方式2:yum命令用yum安装MySQL8版本方式3:编译安装源码包 在Ubuntu安装安装MySQL APT配置包安装MySQL Server启动MySQL服务查看MySQL服务是否自启动 登录MySQL数据库卸载命令修改MySQL密码 3.MySQL登录关闭防火墙Linux下修改配置 4.MySQL8的密码强度评估4.1 MySQL不同版本设置密码4.2 MySQL不同版本设置密码MySQL8的安全策略修改安全策略4.3密码强度测试4.4 卸载插件、组件 进阶学习在Liunx安装MySQL 安装并启动好两台虚拟机: CentOS 7 掌握克隆虚拟机的操作 mac地址 主机名 vim /etc/hostname 修改i,退出Esc,然后:wq,表示保存并退出 修改完需要重启主机 reboot ip地址和UUID vim /etc/sysconfig/network-scripts/ifcfg-ens33 修改完需要网络重启 systemctl restart network 远程连接有 Xshell 和 Xftp 等访问CentOS系统的工具 通常要上传安装的软件放在opt文件夹下 CentOS6和CentOS7在MySQL的使用中的区别 防火墙:6是iptables,7是firewalld 启动服务的命令:6是service,7是systemctl 1.卸载MySQL 查看是否有MySQL 查看MySQL版本 mysqladmin --version ```sql 如果你是用rpm安装, 检查一下RPM PACKAGE: ```sql rpm -qa | grep -i mysql # -i 忽略大小写 不存在mysql-lib的版本: root@zzz-Latitude-3410:/# rpm -qa | grep -i mysql root@zzz-Latitude-3410:/# 开始卸载 关闭服务

全局事件的简单使用(vue-cli)

使用流程: 1.先在main.js中创建总线(中间者) new Vue({ render: h => h(App), beforeCreate() { Vue.prototype.$bus = this } }).$mount('#app') //$bus(可以任意命名) 2.接收数据的组件: methods:{ getson(data){ this.newObj=data; this.showList.unshift(this.newObj); }, }//自定义方法 mounted() { this.$bus.$on('submit',(data)=>{this.getson(data)}); this.$bus.$on('quit',this.quit) }, //销毁 beforeDestroy() { this.$bus.$off('submit') this.$bus.$off('quit')}, 在mounted(){}中定义事件 数据更新就会触发该生命钩子函数) this.$可以任取的名字.$on('标识名',(数据data)=>{this.getson(data)}); 使用箭头函数直接执行事件或者调用事件 3.发送数据的组件: methodes:{ submit1() { var d =new Date(); var obj = { cityNum: this.input1, city:this.input2, jingdu:this.jingdu, weidu:this.weidu, time:d.getFullYear()+'-0'+d.getMonth()+'-'+d.getDate()+' '+d.getHours()+'-'+d.getMinutes()+':'+d.getSeconds(), }; //这是个对象 this.$bus.$emit('submit',obj); this.$bus.$emit('quit','') // 调用方法数据可以为空 }, } 在methodes中的方法中调用中间者($bus) this.$bus.$emit('标识名',数据); 数据可以是对象和其他任意类型 

电脑设置定时关机的5种方法

转自:微点阅读 https://www.weidianyuedu.com (方法汇总于网络,仅供参考) 目录 ⊙如何用系统命令设置定时关机 ⊙两款定时关机软件,小而好用,功能强大 ⊙如何用任务计划程序设置 ⊙常用的电脑软件如何设置,包括360安全卫士、迅雷 1 定时关机设置方法 方法一:用系统命令设置 1.鼠标右击【开始菜单】选择【运行】或在键盘上按【Win+R】快捷键打开运行窗口。 2.输入shutdown -s -t 1200 后点击【确定】。 (说明:输入每个完整代码后别忘记打空格, -s表示关机, -t 表示多长时间后关机,以秒为单位。如果你需要将电脑设置10分钟后关机,把1200改为600即可 ) 3.如果想取消自动关机指令,只要在运行窗口中输入shutdown -a 点击【确定】。 4.指定时间关机的设置方法: “at”命令安排在特定日期和时间运行命令和程序 。 “23:00”处指定了运行命令的时间,格式为24小时制。 “shutdown”为系统内置的一个命令,我们可以配合它的参数对系统进行关机、重启等操作。 .例如:设置上午12点整自动关机: at 12:00 shutdown -s 5.如何取消? cmd中输入 at 空格 /delete (然后问你是否全清), 输入Y 回车如下图 6.如果你有兴趣的话,可以再看看其他命令,如下: shutdown -a 取消关机 shutdown -s 马上关机 shutdown -f 强行关闭应用程序 shutdown -m \\计算机名 控制远程计算机 shutdown -i 显示“远程关机”图形用户界面,但必须是Shutdown的第一个参数 shutdown -l 注销当前用户 shutdown -r 关机并重启 shutdown -s -t 100 设置100秒后自动关机 shutdown -h 休眠

QTextStream写文件中文乱码

QTextStream txtOutput( &file ); txtOutput.setGenerateByteOrderMark(true); txtOutput.setCodec(QTextCodec::codecForName("utf-8")); 加入后面两句即可!

Chrome 关闭同源安全模式,一秒解决所有跨域问题

1 window步骤: a. 新建一个chrome快捷方式,右键“属性”。 b. “快捷方式”选项卡里选择“目标”,添加 --args --disable-web-security --user-data-dir 2、mac步骤: open -n /Applications/Google\ Chrome.app/ --args --disable-web-security --ignore-certificate-errors --user-data-dir=/Users/${此处完成用户名}/MyChromeDevUserData/

flask+gunicorn+nginx部署流程

一、环境配置 1.1 python环境配置 ​​​1.1.1 python安装 1.1.2 flask安装 pip3 install flask 1.1.3 gunicorn安装 pip3 install gunicorn 1.2 nginx环境配置 1.2.1 nginx安装 二、部署案例 2.1 准备python flask项目 2.1.1 flsk文件 app.py from flask import Flask app = Flask(__name__) @app.route("/", methods=['GET']) def home(): ''' flask 测试内容 :return: ''' return "你好,三兑空空" if __name__ == '__main__': app.run() 2.1.2 wsgi文件 wsgi.py from app import app if __name__ == "__main__": app.run() 2.2 配置nginx配置文件 进入nginx配置目录并打开配置文件nginx.conf cd /etc/nginx/ vim nginx.conf 在80的server增加一个localtion---映射到127.0.0.1:8888

[Error 2] No such file or directory: 报错问题

问题描述 [Errno 2] No such file or directory FileNotFoundError: [Errno 2] No such file or directory: 原因分析: 绝对路径:从根目录为起点到某一个目录的路径,文件在硬盘上真正存在的路径 相对路径:相对于自己的目标文件位置 二者区别:绝对路径是实际存在于硬盘中的路径;相对路径是与自身相关的位置。 绝对路径优点:如果网页位置改变,里面的链接还是指向正确的URL;缺点:易被人盗取你网站内容。 相对路径的优点:容易移动内容,可以整个目录移动;缺点是容易被人大面积采集抄袭。 回到error,找不到文件的话,就把路径写完整,改为绝对路径 ———————————————— 原文链接:https://blog.csdn.net/m0_54721895/article/details/122849936 解决方案: os.path.join(path,i) def readexcel(path): for i in os.listdir(path): j=os.path.join(path, i) a=pd.read_csv(j,encoding="utf-8",on_bad_lines='skip') print(a['']==0) # with open(i,'r',encoding="utf-8")as ii: # read=csv.reader(ii) # for index,info in enumerate(read): # print(info[:]) # print(a.head(0)) # print(a[:5]) # print(a[0:5]) # print(a.tail(3)) # print([a['T']==1]) # print(b) # print(a[['']]) readexcel(r'D:\Flu副本')

Typora图片自动上传设置

1.参考内容 整体流程参考: Typora 如何上传图片? - 知乎 (zhihu.com) 安装smms插件准备工作参考: PicGo + smms 构建图床-CSDN博客 安装smms插件参考: Typora-PicGo-core-SMMS图床踩坑记-CSDN博客 smms插件下载 GitHub - xlzy520/picgo-plugin-smms-user: a plugin for picgo for SM.MS Node下载 下载 | Node.js 中文网 (nodejs.cn) Node下载后Python环境配置 设置Python环境变量-CSDN博客 2.Typaro图片自动上传设置 (1)打开偏好设置 打开Typora,文件 -> 偏好设置。记住以下四个编号代表的选项,后面以编号代替。 (2)安装PicGo-Core插件 点击①,选中PicGo-Core。点击②自动下载最新版插件。 (3)配置PicGo-Core 1)注册 smms 网站账号 smms官网:https://sm.ms/ 在smms官网注册一个账号。 账号:fenger9902 2)获取 Secret Token 注册完成后,登录账号,在右上角点击User -> Dashboard,进入个人界面。 生成自己的Secret Token。 3)修改 PicGo-Core 配置文件 点击③,打开配置文件。 在 { } 内粘贴以下代码。 "picBed": { "current": "smms-user", "uploader": "smms-user", "smms-user": { "

Centos7 安装Nginx(rpm方法)

1.安装一个包---rpm -ivh 包地址 (到这里查看版本http://nginx.org/packages) 我这里是: rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm 2.查看当前安装的软件的信息---yum info yum info nginx 3.安装---yum install yum install nginx 4.修改配置 4.1打开配置文件 vim /etc/nginx/nginx.conf 4.2 修改配置 user nginx; 改成 user root; 4.3 添加自己的服务 我这里只添加一个80的http服务,关于配置文件会另外有文章讲解 server { listen 80; server_name localhost; location / { root html; index index.html index.htm; } } 5.验证文件是否正确 nginx -t 6.启动nginx服务 service nginx start 7.常用指令 service nginx start #启动 service nginx stop #停止 nginx -t #检测配置文件是否正确 nginx -s reload #重载配置文件

安装snownlp包过程出现Requirement already satisfied:及Read timed out.问题解决方法

遇到问题:最近在做一个情感分析聚类方面的项目,使用电脑中安装的 pycharm ,解释器为python 3.10 运行一个python文件时,出现了 ModuleNotFoundError: No module named 'snownlp' 的报错,需要安装 snownlp 库。 而当使用 win+R 快捷键打开 cmd,输入 pip install snownlp 命令时,却得到 Requirement already satisfied: snownlp in e:\anaconda\lib\site-packages\snownlp-0.12.3-py3.9.egg (0.12.3) 的提示,告诉我已经有 snownlp 存在于 e:\anaconda\lib\site-packages 路径中,但是我们在 pycharm 中运行 python 文件时还是缺少 snownlp 库。 分析原因,是因为已经存在的 snownlp 库是存在于 e:\anaconda\lib\site-packages 路径中,而我们使用的 python 解释器安装在 E:\python3.10.1 文件夹下,目前 E:\python3.10.1\Lib\site-packages 路径中是不存在 snownlp 库的,所以运行 python 文件会报错。所以我们需要将 snownlp 库安装在对应路径下,才可以正常运行该 python 文件。 解决方法:在 cmd 中使用 pip install --target=目标路径 工具包名字 的命令去安装所需要的库。例如,我使用 pip install --target=E:\python3.10.1\Lib\site-packages snownlp 这个命令去安装 snownlp 库,就可以成功安装。

集群聊天服务器:集群与分布式理论

前言 在聊天服务器项目中实现了集群,在这里根据该项目来讲解一下单机、集群与分布式理论。 文章目录 前言单机服务器集群服务器分布式系统 单机服务器 图示: 单机服务器的性能瓶颈: 所能承受的用户并发量受限于硬件资源,32位Linux最多支持两万并发量。运维困难,任意模块的修改都需要整个项目的重新编译、部署。系统中,有些模块属于CPU密集型,有些模块属于I/O密集型的。造成各模块对硬件资源的需求是不同的。 集群服务器 集群:每一台服务器独立运行一个工程的所有模块。 优点: 性能提升了,用户的并发量提升了;部署方式简单(扩充多台服务器)。 缺点: 项目代码还是需要重新编译,而且需要多次部署。后台管理模块用户本来就不多,所以根本不需要高并发,但却部署在了多台服务器上。 分布式系统 分布式:一个工程拆分了很多模块,每一个模块独立部署运行在一个服务器主机上,所有服务器协同工作共同提供服务,每一台服务器称作分布式的一个节点,根据节点的并发要求,对一个节点可以再做节点模块集群部署。 分布式系统解决了单机服务器的缺点: 解决了并发能力,而且如果想要在提升并发量的话,可针对性的改良,比如对如图所示的分布式结点1进行扩充多台服务器。运维方便,某个业务出现bug,只需要对相对应的结点进行重新编译、部署。有些业务属于CPU密集型,有些属于I/O密集型,可以将CPU密集型的业务部署在CPU性能强的机器上,其他资源可以相对弱一些;I/O密集型的业务部署在内存和磁盘性能强的机器上。这样的设计,系统和成本都得到了优化。 问题: 4. 大系统的软件模块该怎么划分?因为各模块可能会出现大量重复代码。 5. 各模块之间怎么访问?机器1上的模块怎么调用机器2上的模块的一个业务方法?机器1上的一个模块进程1怎么调用机器1上的模块进程2里面的一个业务方法呢? 如图:针对于这两个server之间的桥梁,就是需要实现的分布式网络通信框架。在后面的项目学习中会解决这些问题。

计算机基础-数据转换

二进制小数转十进制 实数部分: 小数部分: 十进制小数转二进制 乘2,直到小数部分为0,如果实数部分大于1还是取1,不为1取0. 实数部分的1取走之后就不在了 IEEE754小数存储方法(32 位 float 型的二进制存储) 在线计算验证:http://www.styb.cn/cms/ieee_754.php 举例: 先转2进制,再套用公式,最后排布二进制数