图像压缩(4)《数字图像处理》第八章 8.3节 数字图像水印

图像压缩(3)《数字图像处理》第八章8.3节数字图像水印 一. 前言二.章节引言三.简单综述三.本章小结四.参考文献四. 小结 一. 前言 始于那本深蓝色的大块头,冈萨勒斯的《数字图像处理》,从此走上了图像信号处理的不归路,大神的书块头很大,应该是在2013还是2014年的样子,学校发的教材是纯外文的,当时网络还没这么发达,自己是查到在长沙有店里有这本书的汉译版,所以就赶紧联系了自己在中南的高中同学,帮忙拿下,随后直接快递到学校,第一眼看到这部大块头,心下只是徒生悲凉,因为喜欢保存教材,这本书便开始了和我走南闯北的日子,从北到南。 这次重新温故知新,是因为工作中需要涉及到图像压缩相关的知识,偶尔从书橱里翻出这本译本,正好第八章有图像压缩的内容,索性就直接拿过来啃一啃,算是好好复习一下。记得研究生时,正好有一门课是数字图像处理,彼时代课老师因为出国精进,所以委托自己已经毕业的同门大师兄前来代课,记得第一节课,师兄就说当时他研究生入学的时候,立志要把这本书啃下来,因为这本图像的开山之作,博大而精深,能把这本书全部拿下,在图像处理这个领域也基本上可以算是入了门了。想来又是寒来暑往几度春秋,师兄还在学校传道受业,自己也已经在职场摸爬滚打了五年了,今年有机会回一趟师门,一定和师兄好好叙叙旧。闲言少叙,本文的各章节中尽量从原文开始表述,同时也会加入自己多年来图像处理相关的理解与实用技巧,欢迎同学们一起学习交流。 二.章节引言 图像压缩是一种减少描绘一幅图像所需数据量的技术与科学 三.简单综述 三.本章小结 四.参考文献 四. 小结 水印这个在当前互联网各类视频图片类社交娱乐版块已经是非常稀松平常的一个应用技术了,不同平台都会在自身发布的图像或者视频中增加一个添加水印的功能,也是作为现代信息管理的一个约定俗成,本小节主要将图像水印的基本原理贴出来,暂时没用到相关的应用,也就不多说了。本书的图像压缩知识就贴图笔记到这里,也就是笼统简单的介绍了一下,后期可能会用到,这里做个笔记。每天学一个图像压缩小知识,大家一起来学习进步呀!

表示成两个数的平方和

题目描述 输入一个正整数N,找出所有满足x*x+y*y=N的正整数对x和y。 输入要求 输入一个正整数N 输出要求 输出这两个正整数x和y,满足x*x+y*y=N,输出要求x<=y。如果无解则不需要输出任何信息。 输入样例 50 输出样例 1 7 5 5 提示 当有多组输出时,按照x从小到大的顺序排列。 代码示例 #include<stdio.h> #include<math.h> int main() { int n,i,j; scanf("%d",&n); for(i=1;i<=sqrt(n/2);i++){ for(j=1;j<=n/2;j++) if((pow(i,2)+pow(j,2))==n){ printf("%d %d\n",i,j); } } return 0; }

centos通过nmcli设置静态ip及设置开机自动连接

一、Centos7连接wifi 静态IP 最小化安装Centos7时忘记设置联网,从没网到联网配置:输入ip addr命令查看联网信息(旧版本系统好像是ifconfig命令查看): 上面看不到IP地址,说明没网,一般无线网卡以w开头,如上图的wlp3s0,网络名称已实际为准,这里就使用wlp3s0; 打开无线网的驱动,运行命令: ip link set wlp3s0 up 运行没报错说明成功 连接网络,运行命令:wpa_supplicant -B -i wlp3s0 -c <(wpa_passphrase “wifi名称” “wifi密码”),例如: wpa_supplicant -B -i wlp3s0 -c <(wpa_passphrase "zyaj" "123456") 运行成功后,自动获取IP地址,运行命令:dhclient wlp3s0 查看网络状态: ip addr show wlp3s0 到此连接wifi完成,可以用命令:ping www.baidu.com测试连接,运行后会一直刷请求返回数据,可按ctrl+c终止。上述步骤只是临时连接,重启电脑后,又没有网络了。 二、下面介绍重启自连接 - 安装NetworkManager-wifi yum -y install NetworkManager-wifi debian系下:apt install -y netwok-manager 开启wifi nmcli r wifi on 测试(扫描信号) nmcli dev wifi 查看网络连接 nmcli connection 删除上图所有的TYPE=wifi的连接(根据UUID删除),例如: nmcli c delete d47530ea-2d02-4107-8a14-6bd89a0888b1 重新连接wifi,例如wifi名为ZYKJ,密码为123456的无线网 nmcli d wifi connect "

vscode单步调试如何深入底层代码

在对pytorch代码单步调试的时候发现进不到torch.nn的库代码中,经过查阅,发现是自己的配置文件有问题,毕竟vscode还是非常强大的 要让VSCode在调试中跳转至底层代码,只需要在launch.json中设置一个参数即可。 "justMyCode": false, 参考链接:VSCode 调试器 - 让 Step Into 进入底层代码 - 知乎 (zhihu.com)

内存四区的概念

1、栈区(stack) 由编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方法类似于数据结构中的栈。 2、堆区(heap) 一般由程序员分配释放,若程序员不释放,程序结构时可能由os回收。注意与数据结构中的堆是两回事,分配方式倒是类似于链表。 3、数据区 主要包括静态全局区和常量区,如果要站在汇编角度细分的话还可以分为很多小的区。 全局区(静态区)(static) 全局变量和静态变量的存储是放在一起的,初始化的全局变量和静态变量在一块区域,末初始化的全局变量和末初始化的静态变量在相邻的另一块区域。程序结束后有系统释放。 常量区 常量字符串就是放在这里的。程序结束后由系统释放。 4、代码区 存放函数体的二进制代码。

[工控CTF]2021工业信息安全技能大赛(江西站)-WP

文章目录 西门子S7协议文件分析异常流量分析应急恢复恶意app分析工控流量分析丢失的密码工业固件分析opc流量分析 西门子S7协议 查找西门子S7协议资料,发现是一个写操作,根据其报文格式,获拼接出回复报文 写demo3: 1200 写 入:output0=4 PC发出报文分析: (A[3]~A[4]=0x0024=36=读取报文总长度, A[12]A[13]=0x0008=序列号,A[16]A[17]=0x05=写入byte个数(1)+4 ,A[23]=0x02=写入方式为byte,A[24]~A[25]=0x0001=1=写入个数count; A[26]A[27]=0x0001=DB1(因为是output,所以DB块编号无所谓),A[28]=0x82=写入的数据类型为output,A[29]A[31]=0x000000=读取偏移量offset( bit为单位)A[32]~A[33]=0x0004=写入方式为byte , A[34]~A[35]=0x0008=1*8=写入byte的个数 ,A[36]= 写入数据) 03 00 00 24 02 F0 80 32 01 00 00 00 08 00 0E 00 05 05 01 12 0A 10 02 00 01 00 01 82 00 00 00 00 04 00 08 04 PLC回复报文分析: ( B[12]~B[13]=0x0565=序列号,最后一个B[14]=0xFF表示写入) 03 00 00 16 02 F0 80 32 03 00 00 00 08 00 02 00 01 00 00 05 01 FF 写报文:

Bugku CTF---where is flag

前言 Tokeii为什么是misc神?在谈论这个问题之前,我想先说说其他ctfer相较于Tokeii究竟差在了哪里…(编不下去了) 题目 hint:每个文件都不一样 解题步骤 一一打开各个文件,发现txt文件中都是空的。 但是hint提示每个文件都不一样,ctrl+A全选一下文件,发现每个txt的列数不一样。 编写Python脚本读取每一个txt文件的列数 #by :3tefanie丶zhou #time:2021/12/1 flag_list = [] for i in range(1,11): file_name = 'C:\\Users\\82093\Desktop\\file\\'+str(i)+'.txt' with open(file_name) as f: file_lenth = len(f.read()) flag_list.append(file_lenth) print(flag_list) run一下脚本,得到各个文件的列数 98117, 10310, 71171, 23110, 9748, 100481, 10103, 10097, 10797, 49125 观察得到数据,98117拆分为98,117 ascii码表对应的字符为,bu 而题目给出的flag格式为bugku{},由此思路逐渐清晰。只需要将上述数字进行合适的切片,再转成对应的字符拼接起来即可得到flag。 编写python脚本去获取flag。 #by :3tefanie丶zhou #time:2021/12/1 flag_str = '' for i in range(1,11): file_name = 'C:\\Users\\82093\Desktop\\file\\'+str(i)+'.txt' with open(file_name) as f: file_lenth = len(f.read()) flag_str +=str(file_lenth) flag_list = [] flag_len = len(flag_str) i = 0 while i<flag_len: if flag_str[i]=='1': flag_list.

赣网杯2021 CTF---Misc&Web&Crypto部分Writeup

文章目录 前言MiscMisc1-decodemasterMisc2-lovemathMisc3-testcat WebWeb1-checkinWeb2-easypopWeb3-挖洞大师 CryptoCrypto1-signin 前言 如何评价2021赣(dai)网(lian)杯?,我的评价是"神仙打架,凡人遭殃"。 Misc Misc1-decodemaster 拿到题目打开word文件,发现是一串乱码,字体为Wingdings 2 修改字体,发现字体为黑体(不仅限于黑体,其他字体也可以,比如宋体,等线)的时候可以正常显示 我们可以发现是比较明显的字符替换,尝试使用凯撒密码,词频分析,维吉尼亚去解密密文,经过一个个尝试之后,一个在线维吉尼亚爆破密钥的网站上获取到明文。 在线维吉尼亚解密 爆破得到key:welcometogwb,以及密文 cipher:4%G#n+Wc?tpPU!b!Dv]RBfXx\ZP\n39iI+F;:SY,F!x9(B(3@E_(mwc7F2 进行base92解密得到 3KJ5e1uPn6D6ecMJWG8zkBSWHso39Qs9vfy8HB3VmmuEmVn 进行base58解密得到 flag{You_Are_Really_Decode_Master} Misc2-lovemath 下载文件,打开得到一串base32密文 LMUDGNZWFQQDGOBUGYZC4MBYGUUSYIBIGQ4DKLBAGQ4TKNZZFY4DSNJJFQQCQMRYFQQDEOJWGQXDGNZXFEWCAKBTHEYCYIBTHE4DQOBOGU3DOKJMEAUDEMRSFQQDEMRXGUZS4MJQHAUSYIBIGM4DQLBAGM4TMOBVFYZDGNJJFQQCQMRUFQQDENJVGYXDGNBWFEWCAKBSGA2CYIBSGA4TCNROGA4DQKJMEAUDINJMEA2DMOJYFY2TSMRJFQQCQOJMEAYTAMRWFYZDKMJJFQQCQNBSHAWCANBTG43DKLRRG43SSLBAFAZTGNBMEAZTIMJXGYXDGNJWFEWCAKBSGA2SYIBSGEYDCOBOGY4DGKJMEAUDEMJYFQQDEMRTGQ2C4MRRFEWCAKBWHEWCANZRGQ3C4MRUGUUSYIBIGM2DOLBAGM2TKMBTFYYTMNRJFQQCQNBXHEWCANBYHE3DOLRSGA4CSLBAFAZDCMZMEAZDCOBTGQXDENBUFEWCAKBSGI3SYIBSGMZDMMROHE2SSLBAFA2DMMBMEA2DOMBSHEXDSOBZFEWCAKBRGE4CYIBRGIYTINBOHAYTSKJMEAUDIOJRFQQDKMBRHEZC4MBTGUUSYIBIGQ2CYIBUGU4TMLRSG4USYIBIGI2DCLBAGI2DMOJQFY3DMOBJFQQCQNBXGYWCANBYGY3DCLRUGU3CSLBAFAYTQLBAGE4TINBOGQYTMKJMEAUDIMRXFQQDIMZWGY2C4MJZG4USYIBIGIYTILBAGIYTSMZWFY4DGOBJFQQCQMRXGQWCAMRYGA2TMLRVHA4CSLBAFAZDOMRMEAZDOOBVGMXDEKK5BJNSQOBVFQQDQMZUHAXDMMRRFEWCAKBTGQ3CYIBTGM3DMNJOGMZDEKJMEAUDCMBRFQQDSOJQGAXDONJJFQQCQMRYGYWCAMRXHA2DKLRTGU4CSLBAFA2DSMBMEA2DONRTGQXDGMZWFEWCAKBSGU3CYIBSGQ4TGNJOGE2TSKJMEAUDIOJZFQQDIOBVGA3S4NZYGMUSYIBIGM4DILBAGM3TGNJSFY2DMNRJFQQCQMZRGQWCAMZQGU3DCLRWGU2SSLBAFA2DOLBAGQ3DMMROGUYTKKJMEAUDENZZFQQDENZRGY3C4NZXGQUSYIBIGQ2DSLBAGQZTMNJWFY3TAMRJFQQCQNBRGUWCANBQGM2TQLRZGQYSSLBAFAZTGNJMEAZTENJZHAXDCNZTFEWCAKBUGQ2SYIBUGMZDMOJOG4ZTQKJMEAUDENJXFQQDENJQGMZS4NBXHEUSYIBIGU3CYIBVGUZTKLRVGMUSYIBIGQ4DILBAGQ3TANJTFYYCSLBAFAZDILBAGI2DGMJOGEZDGKJMEAUDINBXFQQDIMZUGYZS4MZTGIUSYIBIGI2TELBAGI2DKNBXFYZTKKJMEAUDENRZFQQDENRRHE3S4MBXGMUSYIBIGM3TKLBAGM3DINZYFY4DQNJJFQQCQNBWG4WCANBVGQYDILRRGUZSSLBAFAZDSOJMEAZDSMJQGYXDMNRRFEWCAKBUGEYCYIBTHE4DONBOG44DCKJMEAUDCMJRFQQDCMBYG4YC4MRTGIUSYIBIGE3DELBAGE2TQMJXFYZDCMRJFQQCQNBXGMWCANBVHE4DKLRTGQ4CSLBAFA2DEOBMEA2DCNRSGAXDKMRXFFOQUWZIGQ4DELBAGU4TGNRTFY2TSOJJFQQCQNBZGMWCANRQG4YTOLRWGEZCSLBAFAZDIMRMEAZDSOBUGIXDQMZWFEWCAKBUGAZSYIBUHE3DINJOGQ4TIKJMEAUDENJXFQQDGMJWHA3S4OBYGQUSYIBIGQYTQLBAGUYTIOJQFY3DKOJJFQQCQMZYGIWCANBXGA3DELRXHE2SSLBAFAYTOMRMEAZDCMRTGIXDKOJUFEWCAKBUGA4SYIBVGAZTQMZOGUZTOKJMEAUDGNZMEA2DMMRXFY2DCMJJFQQCQMJRGMWCAMJTHE3TKLRWGIZCSLBAFAZDQMZMEAZTIOBYGYXDKMBSFEWCAKBWGIWCANZXGAZC4MZWGMUSYIBIGQZTQLBAGUZTSNJRFYZDSNJJFQQCQOJVFQQDCMJXGYYS4MJUHAUSYIBIGE3DILBAGIYDENBYFYZDCNBJFQQCQMRXGAWCAMZTGI4DOLRRGIZSSLBAFA3DALBAG42DKNROGM3DKKJMEAUDQOJMEAYTCMBSGMXDMOBJFQQCQMJWGUWCAMRQGM3TCLRUGA2SSLBAFAZDEMRMEAZDOMZYGIXDAOBWFEWCAKBUGE3CYIBVGEZDINBOGA4TSKJMEAUDIMZTFQQDKMZTGM2S4NRUGYUSYIBIGQZDELBAGUYTSOBTFY3DQMZJFQQCQMRZFQQDGNRUGMXDEOJSFEWCAKBUGY3CYIBVG4ZTSNJOGA4DMKJMEAUDCMBZFQQDCMZUHAZS4MRQHAUSYIBIGIYDALBAGI2DMNZXFYYDONJJFQQCQMZXGEWCANBVG4YTALRXGEZCSLBAFAZTENJMEA2DAMBVGIXDKMJJLUFFWKBSGE2CYIBRGA2TSNROGUYDCKJMEAUDGMZYFQQDCNRWG4ZC4OBRG4USYIBIGM4DGLBAGE4DQNZYFY4TSNRJFQQCQMJZHAWCAOJYGEZS4MJRG4USYIBIGE2DSLBAG42DCMJOGE4CSLBAFA2DGOJMEAZDCNRSGEXDCMZZFEWCAKBRGIWCANRZHAXDENZUFEWCAKBTGAWCAMJVHAYC4MJQHEUSYIBIGQZDKLBAGIYDSMZVFYZTGMZJFQQCQMZXGIWCAMJYGMZTQLRYGY4SSLBAFA2TELBAGI3DKOBOGM2TGKJMEAUDEOBSFQQDCMZZGI4C4NJRGQUSYIBIGQZDCLBAGIYDONBQFY4TAOBJFQQCQMRUGIWCAMJRHE3DQLRTHAYSSLBAFAZDEMZMEAYTCMBTG4XDKMJZFEWCAKBUGYWCAMRTGY2C4MZWGEUSYIBIGMYTILBAGE2TIOJXFY2DIOBJFQQCQMRSGUWCAMJRGEZTKLRWGIUSYIBIGIYTALBAGEYDIMBQFY4TENZJFQQCQMJWHAWCAOBTGQZC4NJUGQUSYIBIGEYDILBAGUZDANROGYYDOKJMEAUDCNZVFQQDQNRYGUXDENRJFQQCQNBTG4WCAMRRGUZDGLRUG44CSLBAFA2TKLBAGI4DANJOGMYTCKJMEAUDIMJZFQQDEMBWGQZC4OJTGYUSYIBIG44SYIBTHE4DCLRRGEUSYIBIGQ3TGLBAGIZTEOBXFYZTKOJJFQQCQMRQG4WCAMJQGI2TGLRZGUZSSLBAFAZTOOJMEAYTQNRYGIXDCMJUFEWCAKBUHE4CYIBSGQ2TCMROGY4TSKK5BJNSQNBUGQWCAMRSGY4TOLRUHA2CSLBAFAZDAMJMEAYTAMZQGMXDSNRVFEWCAKBUGQZCYIBSGI2TSNBOHE4DKKJMEAUDENRYFQQDCMZXGIYC4NBWGMUSYIBIGIYTKLBAGEYTAMJYFYZTKOBJFQQCQNRUFQQDGMZRGYXDCMZWFEWCAKBZHEWCANJRGAYS4NJSG4USYIBIGEYTOLBAGYYDCOJOGQ3TMKJMEAUDIMRMEAZDCOJUFYZSSLBAFAZDGNJMEAYTEMBTG4XDGMZRFEWCAKBUGQ3SYIBSGI4DKMBOHE2TIKJMEAUDIOJRFQQDENJQHEZS4MRQGYUSYIBIGQYDALBAGIYDINJSFY3DSOJJFQQCQNBQHEWCAMRQHEYTCLRVGI3SSLBAFAZTAMZMEAYTKNJQGUXDKNJVFEWCAKBUGMYCYIBSGE4TQMZOGA2TGKJMEAUDCNRWFQQDQNJRHAXDIMZSFEWCAKBZGEWCANBWHEZS4MZRFEWCAKBRHE3SYIBRGAYDSOJOG43TEKJMEAUDCNBXFQQDONJUHEXDKMZZFEWCAKBRGE2SYIBVHEYTOLRVGI4CSLBAFAZTSMBMEAYTSOJUGIXDKNZJFQQCQMZZGYWCAMRQGI2TALRRGUUSYIBIGM4DMLBAGE4TOMZZFYZDQNJJFQQCQMJUGQWCANZTHE3C4NZVHAUSYIBIGE4DKLBAHE2DQOBOGA3TIKJMEAUDGMBYFQQDCNJXGYYS4MBXHEUSYIBIGI4TSLBAGE2TGMBRFYYTQMZJFQQCQNBVGMWCAMRTGE2TMLRYGY4SSLBAFAZTENRMEAYTMNRXHAXDIMZTFFOQUWZIGE2TOLBAGE3TSOJUFYYDEOJJFQQCQNBWGYWCANJTGIYTSLRXGEZSSLBAFAZDSOBMEAZTIMBWG4XDQNZWFEWCAKBTGM3CYIBTHA2DAMBOGE3TMKJMEAUDIMBUFQQDINRRGUZC4MJRGQUSYIBIGM2SYIBUGA4DKLRSGQ4SSLBAFAZTOMBMEA2DEMRXG4XDCMZJFQQCQNZUFQQDQNJTGEXDAOJZFEWCAKBTHAWCANBUGI3S4NBVHEUSYIBIGM2TMLBAGQYDMOBQFY4TAMRJFQQCQNBWGEWCANJSGY2DSLRVGQ4CSLBAFAYTAMZMEAYTCOBTG4XDGNJRFEWCAKBSHA3SYIBTGI4DCNBOGAYTCKJMEAUDCNJTFQQDCNZVGM3S4MJUG4USYIBIGEYDKLBAGEZDANRVFYZDENZJFQQCQMJWGUWCAMJYHEYDKLRYGMYSSLBAFAZTQMZMEA2DGNZVHAXDANRUFEWCAKBRGQWCAMJWHEYS4MRXG4USYIBIGE2DSLBAGE3TAOBRFY4DSOJJFQQCQNBYFQQDKNJWG4XDCMZVFEWCAKBWGAWCANRZGM2S4MZRG4USYIBIGE4DGLBAGIYDSNJYFYYDKMZJFQQCQNBSGUWCANBYGU2DMLRVGUZSSLBAFAYTENBMEAYTIMRTGEXDGMBZFEWCAKBRGU2CYIBRG43DKMJOGMYTKKJMEAUDGMBVFQQDGNBYGY2S4MBXG4USYIBIGIZDKLBAGI2TONBVFY3TSOBJFQQCQMRSFQQDENRQGMXDIMZWFEWCAKBSGYYCYIBSHE3TGNJOG43TSKJMEAUDENRYFQQDGMBWGQ4C4NBZGEUV2CS3FAZTKLBAGI4TEMJOGE4TGKJMEAUDONBMEA3DCMJZFY3DCNJJFQQCQMZWGYWCAMZQGA3DGLRYGUYSSLBAFA4DILBAGY4TGOJOGYYTCKJMEAUDINBVFQQDGNRVGQYS4NRUGQUSYIBIGI3DMLBAGIYTQNRUFY2TGNZJFQQCQNBUFQQDGNRVHEXDEMZJFQQCQMRRFQQDCNZXGMXDEMBTFEWCAKBSHAYSYIBSGMYDSNBOGM4TIKJMEAUDINBWFQQDGNRWGI2S4MJJFQQCQMJTGQWCAMJRGAZTSLRVHE4SSLBAFAZDENBMEAYTQNBRHEXDKOJXFEWCAKBRGI2SYIBRGAZTAMJOGI3TEKJMEAUDCOBXFQQDCNJTHA3C4MBZGIUSYIBIGI3SYIBSGI3DKLRRGQ2CSLBAFAZTQNBMEAZTCNJUGAXDOMJVFEWCAKBTGEZCYIBSGU3DGNROHA3TKKJMEAUDQMJMEA3DMOJTFY2DANBJFQQCQMRVGYWCAMRRGA2DGLRZGE2SSLBAFAZDOMRMEAZDEMZVGUXDGOBWFEWCAKBUGEZSYIBTGM4TCNZOGMZSSLBAFA2DMNRMEAZTQMRWGMXDENRSFEWCAKBRGAWCAOBXGEXDCNJJFQQCQMZSGIWCAMRWGQ2TKLRSGU2CSLBAFA2DSMJMEA2DAMZRGQXDAMJYFEWCAKBSHA2SYIBSGM2DEMROGIZTKKJMEAUDEOJZFQQDENBVGY4S4MZQGQUSYIBIGMYTILBAGI2TOOJZFY4TAMZJFQQCQNBXGIWCAMZYG42TMLRZGIYSSLBAFAZDANZMEAYTOMBSGUXDCMJZFFOQUWZIGE4CYIBRHEYDSLRQHEUSYIBIGQZDGLBAGQZTMMRWFYYTSNZJFQQCQNBUGMWCANBVGY4DMLRUGI4CSLBAFA2DGNBMEA2DINZVHEXDCNBYFEWCAKBSGI3SYIBSGM2DGNROG4YTMKJMEAUDCMRZFQQDCMZTGQZC4OJRGQUSYIBIGYWCANRXGMXDANJRFEWCAKBTGAWCAMZRGQ2S4MZYGIUSYIBIGE4DELBAGE4DQMBRFY4TAOJJFQQCQNJTFQQDKNJRGQXDGOJVFEWCAKBTHAWCAMZZGY4S4MZWGIUSYIBIGMYDMLBAGMYTKNZTFY4TOMJJFQQCQNBUHEWCANBWGMYDGLRSG4USYIBIGM2DELBAGM2TEOBRFY3DKNZJFQQCQMRQHAWCAMRRGQ3TSLRRGA3CSLBAFA2TQLBAGYYDEOJOGQ4TIKJMEAUDIMRWFQQDIMZZGMZS4MRQGMUSYIBIGMYSYIBTGI2DQLRSHA3CSLBAFA2DKNJMEA2DMOJSGEXDENRVFEWCAKBUGYWCANBXHEZS4MZXFEWCAKBWG4WCANRZGU3C4NJTGQUSYIBIGQZTMLBAGQ2DSNRUFY3DOMJJFQQCQMZVGIWCAMZWGMYTCLRRGE2SSLBAFAZTSLBAGQYDOMROGMZTEKJMEAUDIOBSFQQDIOJXGAZS4MZXHAUSYIBIGM3CYIBTG43DGLRSGA4CSLBAFA2DSMBMEA2TANJSGUXDONZVFEWCAKBUGA2CYIBUGE3DMNZOGUYTGKJMEAUDIMJRFQQDIMRTHA4S4NZSFEWCAKBYG4WCAOJQGE3C4MJSGQUV2CS3FA2DMNRMEA2DOMJRHEXDGNJXFEWCAKBSGM4CYIBSGQYDSMJOHE4SSLBAFAZTOOBMEAZTQMRTGEXDIMRVFEWCAKBTHE3SYIBUGAYTKMJOGY3DIKJMEAUDMMRMEA3DGMJVFYZTMMJJFQQCQMJWFQQDCNRWHEXDINBTFEWCAKBUHE2SYIBVGAYDIOBOGI2TKKJMEAUDENBYFQQDENJRGAYS4MZRGQUSYIBIHE3SYIBZHA2TALRUGE4CSLBAFA2DSNRMEA2TAMJUHEXDIOBWFEWCAKBSGUYCYIBSGUZTAMZOG43TGKJMEAUDENJUFQQDENJXGA4C4MJWGIUSYIBIGE2TCLBAGE2TGMBUFY2DONRJFQQCQMRZHAWCAMZQGE2TCLRUHEUSYIBIGM4SYIBTHE4TELRTGU4SSLBAFAZTAMJMEAZTANBVGUXDCMZRFEWCAKBUHA3SYIBUHEZDIMBOGY3TIKJMEAUDCMZXFQQDCMZYHEYC4NRRGQUSYIBIGE3TALBAGE3TEMRTFY3TANBJFQQCQMJSFQQDCMRWGUXDCMRZFEWCAKBTGA3CYIBTGA4TKOJOHE4DIKJMEAUDGMRUFQQDGMRXG43S4MRXGUUSYIBIGM2TILBAGM2TQMBYFYYTCOBJFQQCQMRVHEWCAMRWGIYTGLRVHE4SSLBAFA3DCLBAGYZDCNBOGA3DIKJMEAUDGMJVFQQDGMJYGY4S4NJXGQUSYIBIGQYTSLBAGQZDGNZTFY3TOOJJFQQCQMZWFQQDGNRYHEXDCNZSFEWCAKBVGYWCANJXGA4S4NBUGEUSYIBIGM2DOLBAGM2TCMBRFY2TOKK5BJNSQMJSHAWCAMJQGY3TGLRXGA3CSLBAFA2DCMBMEAZTIMBYGAXDCMJTFEWCAKBUGAYCYIBTGMZDKMBOGEYDSKJMEAUDIOJVFQQDIMJRGM2C4MZQGMUSYIBIGEYDELBAHA2TCNJOGIYTMKJMEAUDGOBYFQQDGMRSGUZS4NJXGUUSYIBIGQZDCLBAGM2DSOJSFYZTQNBJFQQCQMJSGYWCAMJQGUYDOLRWGEZCSLBAFA2DIOBMEAZTOMRTGMXDIMBSFEWCAKBSGMYCYIBRHEYTGOJOGY3DOKJMEAUDIMZSFQQDGNJZGA2S4NRVGYUSYIBIGM2DGLBAGI4DKMJZFY4DCOJJFQQCQMRSGQWCAMJYGY2DCLRUGM4SSLBAFAYTMLBAGEZTONZOGA3TQKJMEAUDOMBMEA2TQNJZFYZDKNBJFQQCQMJYHAWCAMJVGY2TGLRWHAUSYIBIGQYSYIBTGQ2TELRSGE3CSLBAFAZDMMRMEAZDCNZZGUXDSOBRFEWCAKBUGUZCYIBTG42TMNJOGYZDSKJMEAUDIOJWFQQDIMJSGE4C4OJXGQUSYIBIGQ4CYIBUGAZTGLRTGA4SSLBAFAYTSLBAGE3DENROGQ2TGKJMEAUDCNZZFQQDCNBZGA3C4NRVHAUSYIBIGQ4TALBAGQYDOMRQFY3DAMRJFQQCQMRZGMWCAMRUGM3DQLRYGQ4CSLBAFAYTOLBAGE2DMMBOGMYTOKJMEAUDGMJVFQQDENRRHE2S4MRZHEUSYIBIGM2TCLBAGI4TCOBSFY3DCMRJFQQCQMRRHEWCAMJYGIZDMLRYGQ2CSLBAFAYTSMRMEAYTKOJYGUXDIMBRFFOQUWZIGM3DMLBAGE3TMNZZFY4TSMZJFQQCQMZRGEWCAMJVGAZTSLRWG4ZCSLBAFAYTINBMEA3TAMRSFY2TQNZJFQQCQNJWFQQDENZZHAXDCNZXFEWCAKBUGAWCAMRQGMYC4MZSFEWCAKBYGYWCANBSGM4C4NRXG4USYIBIGM4TGLBAGE4DSNZUFY4DCNBJFQQCQNBQHEWCAMJZG42DELRYGI4CSLBAFAZDMNRMEAYTEOBXHAXDINRUFEWCAKBVGMWCAMRWGU2C4MJWHEUSYIBIGM2TMLBAGE3TCOJZFYYTQKJMEAUDEMZTFQQDCMJSHE2C4NRUFEWCAKBXGAWCAMZUG4YC4NJRGEUSYIBIHA4SYIBUGM4DELRTGYZSSLBAFA4DALBAGM4TKMBOG4YDKKJMEAUDGNZYFQQDCOBSGU2S4MRTG4USYIBIGEZTSLBAGY3TQMROG4YDOKJMEAUDCMRQFQQDKOBXGAXDKOJWFEWCAKBTGEWCAMJVHE4C4MJTGQUSYIBIGQ4TELBAGIZTOMRYFY3DGOBJFQQCQNBVGMWCAMRRHA2TMLRWGM3SSLBAFAZDCMBMEAYTAMJZGAXDCNJRFEWCAKBUG4WCAMRTGY3C4NBQGMUSYIBIGMYDMLBAGE2DOOJYFY3TQNJJFQQCQMRTGUWCAMJRGM4TALRXGIYSSLBAFAZDELBAGEYTMNROGEYTEKJMEAUDINZRFQQDEMRXGE4S4NBRGUUSYIBIGEYDQLBAGUZDSNBOGUYDEKJMEAUDIMJTFQQDCOJZGM3C4MBSGUUSYIBIGMZDSLBAGE2TSMBTFYYTAMZJLUFFWKBUGAYCYIBTHAYDMNJOGYYTGKJMEAUDIMBWFQQDGOBWGM2S4OJSGEUSYIBIGQZDMLBAGQYDKMZWFY2DKMRJFQQCQMRSHAWCAMRRG4ZDKLRTGAZSSLBAFA2DQNBMEA2DMMBUGYXDGOJVFEWCAKBSHE3SYIBSHAZDQMBOGU2DQKJMEAUDCNZWFQQDCNRXHA3C4MBUGYUSYIBIGMYTMLBAGMYDAOBVFY4DEMJJFQQCQMZVFQQDGMZZGAXDGOBUFEWCAKBTGE2SYIBSHE4TSMBOHE2CSLBAFA2DEMJMEA2DAMBWGAXDMNJYFEWCAKBUGQ4CYIBUGI3DENZOGAZDSKJMEAUDGOJWFQQDGNZWHA2S4MJZGEUSYIBIGQ2TQLBAGQZTKNZVFY4DCOBJFQQCQMZWGYWCAMZUHAZTMLRVHE2CSLBAFA2DONBMEA2DKMBZGUXDGMRUFEWCAKBUG43CYIBUGUZDQNZOGAYTOKJMEAUDGNRMEAZTIOBVFYZDINJJFQQCQNBXGMWCANBVGAYDALRUGUUSYIBIGIZCYIBSGE2TKLRUGEYSSLBAFA2DAOJMEAZTQOJSGAXDQMBUFEWCAKBTGYZCYIBTGQ2DKNJOGYZDOKJMEAUDCOJWFQQDCOBWHA2S4OJVGMUSYIBIGQ2TALBAGQZDQMJWFY2DEKJMEAUDQNRMEA4DEMZVFYZDMMZJFQQCQMRWGYWCAMRVGMZTKLRUGUZCSLBAFA2DENZMEA2DANRTGEXDINJZFEWCAKBUGIZSYIBUGAZDKMROGI2TIKJMEAUDCMJVFQQDCMBZHEYC4NJUHEUSYIBIGE4DALBAGE3TCNRVFY4DMOBJLUFFWKBTHE4SYIBTG44TONZOGAZDSKJMEAUDCNBRFQQDCMZUGY3S4MBVGYUSYIBIGQ4TCLBAGQ3DOMJWFY2DGNJJFQQCQMRTGYWCAMRSGQ4TCLRYG4ZSSLBAFA2DCNJMEAZTSNBZG4XDIMZYFEWCAKBSGM4SYIBSGI3TONROGEZDMKJMEAUDGNZYFQQDGNJZHAYS4OJVGMUSYIBIGQYDILBAGM4DINJSFYYTQNJJFQQCQMRQFQQDCOJXGEXDGMZTFEWCAKBTHEZCYIBTG4ZTCMROGE3TCKJMEAUDGNBYFQQDGMZRGMYS4NZQGUUSYIBIGY4CYIBWGUZTCLRVGIYSSLBAFAYTCNRMEAYTCMBZGEXDMOBXFEWCAKBSGQWCAMRTGUYS4MZXHAUSYIBIGM3TOLBAGM2TQOBWFY3TKMZJFQQCQMZVGIWCAMZTGUYTCLRSGY2SSLBAFAYTQNRMEAYTONZUGEXDIMBYFEWCAKBWGQWCANRRGUYS4MRXFEWCAKBSGM4CYIBSGI3DQMJOGMYDQKJMEAUDCNJWFQQDCNBYHEYS4NRUGUUSYIBIG43SYIBXGM4DMLRVGEUSYIBIGI3DILBAGI2TCNJRFYYTSMRJFQQCQMZRGEWCAMRZGYYTMLRYGMZSSLBAFA2DQMJMEA2DKNZWGYXDQNZXFEWCAKBSGI4SYIBSGE4DENROGEYTEKJMEAUDCMRUFQQDCMJYGUYS4NBVGQUSYIBIGIYDILBAGE4TINJSFYYDINRJFQQCQNZUFQQDOMJQGEXDIMBYFEWCAKBRGAYSYIBZGY3DMLRVG4ZSSLBAFAZDGLBAGIZDKNROGQ2DEKK5BJNSQNBWGIWCAMRSGI2TKLRVGY3SSLBAFA2DANBMEAYTSNBXGIXDSOBVFEWCAKBRGQ4CYIBXGE4DGLRXGMYSSLBAFAYTCNRMEA2TMNBXFYZTQNJJFQQCQNJUFQQDENRXGEXDGNJUFEWCAKBRGI4SYIBWGI3TCLRWGQZSSLBAFAZTSNRMEAYTSMBYHEXDAOJSFEWCAKBRGA2CYIBVGA3TCLRTGY2SSLBAFAZTKMJMEAYTMOJSHAXDKMBZFEWCAKBSGYZSYIBRGI3TANBOGQ4DQKJMEAUDEMZRFQQDCMJRGY3S4NRRGYUSYIBIGIYDGLBAHE4DENBOGI2DEKJMEAUDIMZTFQQDEMBYGY2S4MRUFEWCAKBTHAYCYIBRHAZTCOJOHA2DOKJMEAUDCOJMEA4TSMJOGMZTGKJMEAUDCNZQFQQDQMRTHEXDIMZYFEWCAKBWGEWCAMZQGA3S4MJYGMUSYIBIG43SYIBTG43TKLRTGQYSSLBAFAYTSMZMEA4TGNBTFY3TSNRJFQQCQMJWGAWCANZXGU4S4OBRHEUSYIBIGEYTGLBAGU2TAMZOHA2SSLBAFA2DKOJMEAZDEMJRGMXDCOJVFEWCAKBUG4ZCYIBSGI3TGNJOHE4DKKJMEAUDIOJXFQQDEMZZGM3S4MZVGQUSYIBIGEZDCLBAGU4DQNZOGU4DSKJMEAUDGNBWFQQDCNRWHA3S4OJVG4USYIBIGMZTELBAGE3DAMJWFYYDSMJJFQQCQNBWGEWCAMRSGIYDOLRTG42CSLBAFAYTINJMEA3TAMZZFY3DOKJMEAUDCMBRFQQDIOJSG4XDKMRWFFOQUWZIGM2TMLBAGM2TMOJVFY3TQMJJFQQCQMZSGMWCAMZSGM4TMLRTGEZCSLBAFA4TSLBAHE4TSNJOGYZTMKJMEAUDENZUFQQDENZUHE2S4NZXGYUSYIBIGI4DILBAGI4DIOJVFY2DENBJFQQCQMZXFQQDGNZZGUXDEOJSFEWCAKBRGE2CYIBRGE2DSNJOG43TEKJMEAUDGOBRFQQDGOBRHE2S4MRVGQUSYIBIGQYTKLBAGQYTKOJVFY3TOMZJFQQCQNBVFQQDINJZGUXDENZYFEWCAKBSGA2SYIBSGA2TSNROGIZTIKJMEAUDIMJYFQQDIMJYHE3C4NZUHEUSYIBIGI4DELBAGI4DEOJWFYYTMNRJFQQCQMRSHAWCAMRSHA4TMLRSGE2CSLBAFAZTGOBMEAZTGOBZGYXDCMRXFEWCAKBYGQWCAOBUHE2S4MZVGUUSYIBIGIZTOLBAGIZTOOJVFYZDEMRJFQQCQNBRGQWCANBRGQ4TKLRTGM2SSLBAFAZDINZMEAZDINZZGUXDGOBVFEWCAKBRGMZSYIBRGMZTSNJOGU4SSLBAFAYTONZMEAYTONZZGUXDSMRRFEWCAKBUHAYSYIBUHAYTSNJOGU4DOKJMEAUDGOJZFQQDGOJZHE2S4MZSHAUSYIBIGQZTKLBAGQZTKOJVFY4TOMZJFQQCQNBXGYWCANBXGY4TMLRTGAZCSLBAFAZTINZMEAZTINZZG4XDAOJRFEWCAKBXGUWCANZVHE2S4NZSFEWCAKBSGI2CYIBSGI2DSNJOGUYDEKJMEAUDIMBSFQQDIMBSHE3C4MRXGIUSYIBIGEZTSLBAGEZTSOJVFYZDQKK5BJNSQMZTGQWCAMRYGE3DCLRQGI2SSLBAFA3TILBAGYZTEMBOGI3TEKJMEAUDENBUFQQDEMBWGAYC4OBUGIUSYIBIHE2CYIBYGAYDALRXGA3CSLBAFAYTONBMEAYTINZSGAXDKOBXFEWCAKBZHEWCAOBUGIYC4MJQGQUSYIBIGQ4DILBAGQYDONRRFY2TGMJJFQQCQNBZGMWCANBRGUYTOLRYGY4SSLBAFA2DINZMEAZTONRVGIXDONRVFEWCAKBUHEWCANBSGIYC4NBRGIUSYIBIGQ4TSLBAGQZDAMRRFYZDIMJJFQQCQMRZHAWCAMRVGEZTOLRYGEUSYIBIG44SYIBWG42DALRTGYZCSLBAFAYTMOJMEAYTIMZQGEXDAMJVFEWCAKBUGM4SYIBTGY4TQMJOHEZTGKJMEAUDEMJWFQQDCOBSGQ4S4MJUGEUSYIBIGQ3TMLBAGQYDAOJQFYZDINZJFQQCQNBWGIWCAMZYHEYTGLRQGE2SSLBAFA2DCMZMEAZTINZZHAXDEMBUFEWCAKBUHAYCYIBUGA2DENBOGM2DEKJMEAUDIOJRFQQDIMJTGQ4S4MBVGUUSYIBIGE2TALBAGEZDOMBUFY3DIOBJFQQCQNBTGMWCAMZWGQ3TOLRTGI3CSLBAFAYTGLBAGEYTSNROGI3TEKJMEAUDIMBQFQQDGMZXGA2S4MZUGYUSYIBIGEYTILBAHE3DQMBOGU2TMKJMEAUDCMRXFQQDCMBXG4ZC4NBXGQUSYIBIGYZCYIBVGMYTELRRGQZSSLBAFAZDSNJMEAZDIOBYGQXDINRTFEWCAKBSGMYCYIBRHE2DENJOGI3TIKK5BJNSQOJVFQQDINZWGUXDEOJTFEWCAKBRGM4CYIBWHA3TELRUGMZCSLBAFA2DGMZMEAZDCMZSHAXDAMRYFEWCAKBUGMZCYIBSGEZDQMBOGE4DSKJMEAUDIMJYFQQDEMBVHEZC4NRUGIUSYIBIGM2DILBAGE3DSNRXFY3DAMJJFQQCQNRMEA2DANBOGAZTOKJMEAUDEOBQFQQDCMZYGMYC4NJWGYUSYIBIGE3TKLBAHA3DQNJOGYYDIKJMEAUDCMBXFQQDKMZVGMXDGOBVFEWCAKBUHA3SYIBSGM4TONJOGQ3TEKJMEAUDGMJRFQQDCNJTGQ4S4OBUG4USYIBIGQ3TGLBAGIZTEOBYFY4TAMRJFQQCQMJTG4WCANRYGIZS4NJTGEUSYIBIGQZDOLBAGIYTAMZTFYZTONJJFQQCQMJYGEWCAOBZHAYC4MJZGYUSYIBIGQ2TGLBAGIZDGMBYFY4DSMRJFQQCQNBRGEWCAMRQGI2DSLRTGQ2CSLBAFAZTEOBMEAYTMMJYGMXDQOJRFEWCAKBUGYZCYIBSGI3TKMBOGEYTGKJMEAUDIMBXFQQDEMBQGU2C4NZZGEUSYIBIGQ4DALBAGIZTMMZQFYZTEOBJFQQCQMZRFQQDCNRSHEXDENRJFQQCQMRWFQQDCMZYGQXDCNRVFEWCAKBRG4YCYIBYGQ2DALRYGM3CSLBAFAYTMMBMEA3TSNJQFY4DGKJMEAUDKOBMEAZDSNJSFYYTONRJFQQCQNBVGEWCAMRSGIYTALRSHAYSSLBAFA2DGLBAGIZDCNZOGQYTMKJMEAUDENJYFQQDCMRXGUZC4MJUGIUV2CS3FAZTKMZMEAZTMNBYGUXDEMBUFEWCAKBTGA2SYIBTGE2TIMBOG44DCKJMEAUDCMJXFQQDCMRRG43C4MBVGQUSYIBIGEZTALBAGEZTKMJVFYZTIOBJFQQCQMRVFQQDENZQGAXDEOJSFEWCAKBRGIYCYIBRGI2DQNJOHAYTSKJMEAUDIMZWFQQDINJQGM2S4MZUG4USYIBIGI2TILBAGI3DEOBXFY4TOOJJFQQCQMJWHAWCAMJXGQZDSLRTHEYSSLBAFA2DQNBMEA2DSOJXHEXDEOJVFEWCAKBSHAZSYIBSHEZDONBOHA3TQKJMEAUDCMJSFQQDCMJWGYYS4NJRGUUSYIBIGI4DKLBAGI4TIOBQFY2TGNBJFQQCQMJXGMWCAMJXHE2DILRWGY4SSLBAFAYTQOBMEAYTSNBYHEXDMMBXFEWCAKBTG4YSYIBTHAZTGOJOGQYTMKJMEAUDCMJQFQQDCMJUGU2S4NBUGEUSYIBIGQ4SYIBVGE3TELRUGM4CSLBAFAYTONRMEAYTQMRVGMXDMNBVFEWCAKBXGIWCANZVGQYS4NBVHAUSYIBIGIZSYIBSGQ4TILRSG4USYIBIGI3DELBAGI3TCMJRFY3DQMZJFQQCQOJVFQQDSOJRGAXDGNRWFEWCAKBRG42SYIBRHAYTKMBOGM4TOKJMEAUDCOBVFQQDCOJRHAYC4MZWGEUSYIBIGEZTGLBAGEZTQMRUFYYTCNJJFQQCQMRSHEWCAMRTG4YTELRTGMZCSLBAFAZDOLBAGI4TANROGM2TKKJMEAUDCMRZFQQDCMZUGEZC4OBXGUUSYIBIGM4DCLBAGM4TGNRZFYZTCOBJLUFA==== 进行base32解码,得到18组列表 [(376, 38462.085), (485, 49579.895), (28, 2964.377), (390, 39888.567), (222, 22753.108), (388, 39685.235), (24, 2556.346), (204, 20916.088), (45, 4698.592), (9, 1026.251), (428, 43765.177), (334, 34176.356), (205, 21018.683), (218, 22344.21), (69, 7146.245), (347, 35503.166), (479, 48967.208), (213, 21834.244), (227, 23262.95), (460, 47029.989), (118, 12144.819), (491, 50192.035), (44, 4596.27), (241, 24690.

ARM 版 OpenEuler 22.03 部署 KubeSphere v3.4.0 不完全指南

作者:运维有术 前言 知识点 定级:入门级KubeKey 安装部署 ARM 版 KubeSphere 和 KubernetesARM 版 KubeSphere 和 Kubernetes 常见问题 实战服务器配置 (个人云上测试服务器) 主机名IPCPU内存系统盘数据盘用途ks-master-1172.16.33.1661650200KubeSphere/k8s-masterks-master-2172.16.33.2261650200KubeSphere/k8s-masterks-master-3172.16.33.2361650200KubeSphere/k8s-master合计101848150600+ 实战环境涉及软件版本信息 服务器芯片:Kunpeng-920 操作系统:openEuler 22.03 LTS SP2 aarch64 KubeSphere:v3.4.0 Kubernetes:v1.26.5 Containerd:1.6.4 KubeKey: v3.0.10 1. 本文简介 本文介绍了如何在 openEuler 22.03 LTS SP2 aarch64 架构服务器上部署 KubeSphere 和 Kubernetes 集群。我们将使用 KubeSphere 开发的 KubeKey 工具实现自动化部署,在三台服务器上实现高可用模式最小化部署 Kubernetes 集群和 KubeSphere。 KubeSphere 和 Kubernetes 在 ARM 架构 和 x86 架构的服务器上部署,最大的区别在于所有服务使用的容器镜像架构类型的不同,KubeSphere 开源版对于 ARM 架构的默认支持可以实现 KubeSphere-Core 功能,即可以实现最小化的 KubeSphere 和完整的 Kubernetes 集群的部署。当启用了 KubeSphere 可插拔组件时,会遇到个别组件部署失败的情况,需要我们手工替换官方或是第三方提供的 ARM 版镜像或是根据官方源码手工构建 ARM 版镜像。如果需要实现开箱即用及更多的技术支持,则需要购买企业版的 KubeSphere。

spring_cloud_rce(CVE-2022-22947)漏洞复现

漏洞简介 Spring Cloud Gateway 提供了一个库,用于在 Spring WebFlux 之上构建 API 网关。 在 3.1.0 和 3.0.6 之前的版本中使用 Spring Cloud Gateway 的应用程序在启用、暴露和不安全的 Gateway Actuator 端点时容易受到代码注入攻击。远程攻击者可以发出恶意制作的请求,允许在远程主机上进行任意远程执行。 影响版本 Spring Cloud Gateway < 3.1.1 Spring Cloud Gateway < 3.0.7 Spring Cloud Gateway 其他已不再更新的版本 环境搭建 更新vulhub git pull 执行以下命令启动使用 Spring Cloud Gateway 3.1.0 的服务器 docker-compose up -d 漏洞复现 1.发送以下请求以添加包含恶意 SpEL 表达式的路由器 POST /actuator/gateway/routes/3tefanie HTTP/1.1 Host: your_ip:8080 Accept-Encoding: gzip, deflate Accept: */* Accept-Language: en User-Agent: Mozilla/5.0 (Windows NT 10.

【PPDet】使用PyCharm调试PaddleDection项目时,调试器一直显示“正在搜集数据”(collecting data)

1. 问题描述 今天在学习RT-DETR的代码,不过使用PyCharm调试代码时,调试器一直显示“正在搜集数据”(collecting data),等待很久之后,就会提示“超时无法显示”; 2. 解决方案:Gevent 兼容 操作路径:☰(主菜单) ⇒ 文件 ⇒ 设置 ⇒ 构建、执行、部署 ⇒ Python 调试器 ⇒ Gevent 兼容 3. 致谢 感谢【两条鲫鱼】的知乎博文:《使用pycharm debug pytorch项目时,一直显示collecting data》

Python不调包手绘圣诞树

黑白版 # 圣诞树层数 LAYER = 4 # 圣诞树宽度 width = LAYER * 4 + 6 # 圣诞树上身 for i in range(1, LAYER + 1): for j in range(3): print(('*' * ((j + i) * 4 - 2)).center(width)) # 圣诞树下身 for _ in range(LAYER - 1): print('||'.center(width)) 彩色版 def christmas_tree(layer): width = layer * 4 + 6 for i in range(1, layer + 1): for j in range(3): print('\033[92m%s\033[0m' % ('*' * ((j + i) * 4 - 2)).

Python等比数列

文章目录 等比数列等差数列斐波那契数列 等比数列 公比用q表示, q ≠ 0 q\ne0 q=0 n ∈ N ∗ n \in N^* n∈N∗ a 1 ≠ 0 a_1\ne0 a1​=0,等比数列中每一项都不等于0通项公式: a n = a 1 ⋅ q n − 1 a_n=a_1 \cdot q^{n-1} an​=a1​⋅qn−1等比数列求和: S n = n ⋅ a 1 ( q = 1 ) S_n = n \cdot a_1 (q=1) Sn​=n⋅a1​(q=1) S n = a 1 ( 1 − q n ) 1 − q ( q ≠ 1 ) S_n = \frac{a_1(1-q^n)}{1-q} (q\ne1) Sn​=1−qa1​(1−qn)​(q=1) def conditions(a1, q, n): assert a1 !

gpio_to_irq()函数

gpio_to_irq()函数是在Linux内核中用于将GPIO(通用输入/输出)转换为中断请求(IRQ)线的函数。这个函数的主要作用是对于那些可以生成中断信号的GPIO引脚,获取到与这个GPIO引脚相关联的中断号。这样在编写驱动时,可以使用这个中断号来调用request_irq()函数,以便注册相关的中断处理函数。函数的原型为:int gpio_to_irq(unsigned int gpio);其中,gpio为待转换的GPIO编号,返回值为与该GPIO关联的中断号。 当GPIO引脚收到信号(譬如从高电平变为低电平)时,GPIO会向处理器发出中断请求,通知处理器进行相应的处理。gpio_to_irq()函数就是完成GPIO编号到中断号的映射工作。 请注意,并非所有的GPIO引脚都具备生成中断的能力,具体情况需要参考硬件手册或者SoC的数据手册。如果某个GPIO引脚不支持中断,那么gpio_to_irq()函数会返回一个负值,表示出错。 struct gpio_desc * gpiod = gpio_to_desc(time_irq_gpio); int irq = gpiod_to_irq(gpiod); if (irq < 0) { printk("unable to get irq num\n"); return -1; } if(request_irq(irq, synctimer_irq, IRQF_TRIGGER_RISING, "synctimer_irq", NULL)) { printk(unable to request irq\n"); return -EINVAL; } 这段代码是在配置GPIO(通用输入/输出)引脚中断的过程中使用的。首先通过gpio_to_desc(time_irq_gpio);得到GPIO引脚的描述符gpiod。这个描述符代表了一个特定的GPIO。 然后通过函数gpiod_to_irq(gpiod);得到这个 gpiod 对应的中断号 irq。如果获取失败(也就是 irq < 0),它将打印一条错误信息并返回 -1。 如果成功获取到 irq,它将尝试注册一个中断处理程序synctimer_irq。request_irq()函数用于此目的,它将中断号irq,中断处理程序synctimer_irq,触发方式(这里是上升沿触发IRQF_TRIGGER_RISING),中断名字"synctimer_irq"和设备ID(这里是NULL,表示不关联任何特定设备)作为参数。如果中断处理程序注册失败,就会打印出错误信息并返回一个错误码-EINVAL。 总的来说,这段代码主要用于注册一个GPIO的中断处理程序,并对相关的错误情况进行处理。

sqlalchemy的部分函数合集

func.concat func.group_concat func.find_in_set func.sum func.left func.month func.round func.avg func.rpad func.ifnull func.replace func.date_format CONCAT 函数:将两个或多个字符串连接在一起。例如: SELECT CONCAT('Hello', ' ', 'World') AS result; 这将返回一个包含 result 列的结果集,其中每一行都是 ‘Hello World’。 GROUP_CONCAT 函数:将多个行中的值连接成一个字符串,并以逗号分隔。例如: SELECT GROUP_CONCAT(name) AS names FROM customers; 这将返回一个包含 names 列的结果集,其中每一行都是一个字符串,包含 customers 表中所有 name 值的逗号分隔列表。 FIND_IN_SET 函数:在逗号分隔的字符串列表中查找指定的值。例如: sql SELECT FIND_IN_SET('apple', 'apple,banana,orange') AS position; 这将返回一个包含 position 列的结果集,其中每一行都是 1,因为 ‘apple’ 在给定的逗号分隔列表中的第一个位置。 SUM 函数:计算数值列的总和。例如: SELECT SUM(quantity) AS total_quantity FROM orders; 这将返回一个包含 total_quantity 列的结果集,其中每一行都是 orders 表中 quantity 列的总和。

安装Anaconda时遇到的“too few arguments“问题

too few arguments: 检验安装时,出现的 usage: conda-scricy.py [-h] [-V] command ... conda-script.py:error: too few arguments 这种情况是由于参数不对,不代表Anaconda安装出现了问题,是由于conda命令后需要加上具体的命令,如: conda list //列出已安装的包 conda create --name myenv python=3.7 //创建一个python虚拟环境 conda activate myenv //激活一个环境 conda install package_name//安装一个包 conda env list //列出环境变量 conda update conda//更新conda 运行这些命令,就可以执行正确的conda命令.

恢复未保存或删除的 Word 文档的 5 种简单方法

没有什么比丢失您正在编写的文档并且知道无法恢复它更糟糕的了。 如果您经常使用 Word 文档,您可能知道中途丢失工作是多么痛苦。即使程序中打开了自动保存功能,有时也会出现问题,导致您只能使用空的 Word 文件。或者,有时可能会断电,导致 Word 系统崩溃...... 幸运的是,可以恢复未保存的 Word 文档。 无论您使用的是 Word 2019、Word 2016、Word 2013、Mac 还是其他选项。此外,如果您不小心删除了Word文档,您可以从回收站或借助数据恢复程序来恢复该文档。 我们将介绍以下内容: 我可以恢复未保存或删除的Word文档吗?如何在 MS Word 中打开自动恢复功能,每 5 分钟恢复一次未保存的文件在 Mac 上恢复未保存的 Word 文档的 3 种方法在 Windows 上恢复未保存或删除的 Word 文档的 3 种简单方法如何从 MS Word 中损坏的文件中恢复文本避免丢失重要 Word 文件和文档的 5 个提示 我可以恢复未保存或删除的Word文档吗? 您可能需要恢复 Word 文档的各种原因包括: 无意中删除硬盘上的文档。当您处理文档时应用程序崩溃。硬盘驱动器或存储设备受到损坏,导致文件损坏或丢失。病毒或恶意软件导致的数据丢失。 简而言之,无论您使用 Windows 还是 Mac,都可以采取一些步骤来恢复未保存的 Word 文件。 下面,我们将介绍所有方法。 但首先,您应该确保MS Word 中的自动恢复功能已打开。 就是这样。 1、直接从设备扫描恢复 Word 文档误删除了的话是可以自己恢复的,不过需要用到工具,然后还有能否恢复需要看数据有没有被二次覆盖,正常情况下电脑硬盘数据没有二次覆盖的话是可以通过工具恢复的,删除后就没有动过硬盘,这样基本上就不会被二次覆盖,那么恢复出来的可能性就非常大。 第一个方法不需要任何电脑知识,只需要用到数据恢复工具即可,具体如下: 奇客数据恢复: 支持1000+数据格式恢复免费下载软件扫描数据,支持文件、照片、视频、邮件、音频等1000+种文件的格式恢复更有电脑/笔记本、回收站、U盘、硬盘等各类存储设备数据丢失恢复https://www.geekersoft.cn/geekersoft-data-recovery.html具体恢复操作上来说: 先安装上软件之后就可以启动软件扫描电脑硬盘恢复Word文件了 之后扫描删除数据最开始存储的磁盘数据 最后可以预览与恢复 2、提供MS Word 自动恢复功能查找 Microsoft Word for Mac 包含自动恢复功能,可以帮助您恢复未保存的 Word 文件。

windows配置PointRCNN一系列问题——坑麻了(最终还是卡住了,未完成)

背景目标 最近在做项目,用到了PointRCNN模型,用于检测点云中的物体,github源码如下 https://github.com/sshaoshuai/PointRCNN 众所周知,这样的模型多半是跑在linux服务器上的,这个模型也不例外,但是我的项目运行在windows系统中,需要将这个模型集成进去,对于未来面对的无数bug虽说有了心里准备,但是就结果来看,准备依旧是不充分。。。 系列错误 所以先试着跑一跑呗,不幸中的万幸是学长之前接触过这方面的工作,并提供了我可以在ubuntu上跑通的该部分代码,我直接“拿来主义”,直接跑目录已经构建清晰的代码!!!噩梦开始啦! 先说结论:最终还是卡住了,未完成,之后打算乖乖在linux服务器跑吧,千万不要在windows上运行.sh格式脚本!!! 但是过程中解决bug的方式,诸位还是可以参考的~ Part I ‘CUDA_VISIBLE_DEVICES‘ 不是内部或外部命令,也不是可运行的程序或批处理文件 定位了一下,实在下图位置,CUDA_VISIBLE_DEVICES并不是系统变量导致问题的发生 遇到问题当然先浏览器->stackoverflow->github源码的问题区 谷歌浏览器很快找到了Solution,共有如下三种解决方案。 个人选择了第三种,当然了这里并不是CUDA_VISIBLE_DEVICES=0,要根据自己电脑的情况来看,如果是台式机当然就是0了,因为就那一块显卡,但是如果1是笔记本极有可能是集成显卡+独立显卡的搭配,我的就是笔记本,所以我这里要设置成CUDA_VISIBLE_DEVICES=1。 然后将代码修改一下,将CUDA_VISIBLE_DEVICES=0注释掉,大功告成! 虽然成功解决了问题,但这也是后面一个重要问题的根源所在。 Part II 解决完一个bug后神清气爽,继续下一个! ModuleNotFoundError: No module named ‘iou3d_cuda’ 显示了一个模块找不到,继续搜!这次谷歌服务器帮我定位到了github源码的问题区 从其中得知,在跑这个项目的时候,需要先行跑一下 这个脚本:build_and_install.sh,其实这在PointRCNN的github仓库中的环境配置要求中已经提到,我没有注意去读Readme,也算是“拿来主义”的弊端吧~ Part III 但是windows下如何去运行sh文件呢? 直接开搜!答案也很快得出,需要借助一下git!直接开始运行! Part IV 本以为可以顺利获得想要得到的结果,但是遇到了贼常见的一个问题,之前在pip安装包的时候对这个问题记忆犹新! error: Microsoft Visual C++ 14.0 or greater is required. Get it with “Microsoft C++ Build Tools”: https://visualstudio.microsoft.com 直接放一个我这次解决问题的方案链接,根据依稀的记忆对比,这个Solution更加丝滑,轻便。 Part V 这次的问题没有那么直观的报错,是根据各种蛛丝马迹推出来的问题到底是什么,并进行了解决,耗时极长!!! 问题结论:cuda突然无法控制gpu了!!! 这次的bug的显现是一个普通的报错,根据报错定位在这里,大概分析一下是arch_list为空!导致arch_list[-1] += '+PTX’会报错,这时隐隐约约觉得是GPU的配置问题,但是没有朝着cuda没有办法控制GPU的方向思考。 仅仅针对这个问题,我首先想到的是arch_list到底是什么?如果从if分支转到else分支,会发生什么?_arch_list = os.environ.get(‘TORCH_CUDA_ARCH_LIST’, None),所以搜的与此相关,最终千转轮回,寻找了许多的博客,最终得知print(torch.cuda.get_device_properties(torch.device(‘cuda’))),这条命令可以获取到匹配该GPU的arch信息,顺便又加了一个常用的命令:torch.cuda.is_available() 尝试后发现,第二行返回的是False,第三行甚至直接报错——没有可用的GPU!!! 之后询问浏览器这个问题,产生了千奇百怪的原因了: 1.有人说重启 2.有人说重新配置cuda cudann torch版本环境

图像压缩(2)《数字图像处理》第八章 8.1节 基础知识

图像压缩(1)《数字图像处理》第八章8.1节基础知识 一. 前言二.引言三.基础知识8.1.1 编码冗余8.1.2 空间冗余和时间冗余8.1.3 不相关的信息8.1.4图像信息的度量8.1.5保真度准则8.1.6 图像压缩模型8.1.7 图像格式、容器和压缩标准四. 小结 一. 前言 始于那本深蓝色的大块头,冈萨勒斯的《数字图像处理》,从此走上了图像信号处理的不归路,大神的书块头很大,应该是在2013还是2014年的样子,学校发的教材是纯外文的,当时网络还没这么发达,自己是查到在长沙有店里有这本书的汉译版,所以就赶紧联系了自己在中南的高中同学,帮忙拿下,随后直接快递到学校,第一眼看到这部大块头,心下只是徒生悲凉,因为喜欢保存教材,这本书便开始了和我走南闯北的日子,从北到南。 这次重新温故知新,是因为工作中需要涉及到图像压缩相关的知识,偶尔从书橱里翻出这本译本,正好第八章有图像压缩的内容,索性就直接拿过来啃一啃,算是好好复习一下。记得研究生时,正好有一门课是数字图像处理,彼时代课老师因为出国精进,所以委托自己已经毕业的同门大师兄前来代课,记得第一节课,师兄就说当时他研究生入学的时候,立志要把这本书啃下来,因为这本图像的开山之作,博大而精深,能把这本书全部拿下,在图像处理这个领域也基本上可以算是入了门了。想来又是寒来暑往几度春秋,师兄还在学校传道受业,自己也已经在职场摸爬滚打了五年了,今年有机会回一趟师门,一定和师兄好好叙叙旧。闲言少叙,本文的各章节中尽量从原文开始表述,同时也会加入自己多年来图像处理相关的理解与实用技巧,欢迎同学们一起学习交流。 二.引言 由此可知,图像压缩其实就是数据压缩的一种,由于互联网数字化的迅猛发展,大数据,云计算等等新技术层出不穷,如今我们每天产生的数据无计其数,其中有许多数据是没有价值的,只要保留其有价值的部分,将那些当前有价值或者未来可能有价值的数据进行备份存储,数据压缩也就由此产生了巨大的需求,因为数据的传输和存储都是需要媒介和信道的,而这些传输与存储的成本也就决定了,必定要舍弃一些无价值无意义的数据。 三.基础知识 本书的汉译版有些地方翻译得比较生硬,比如这一小节,涉及到《信息论》的相关基础知识,而信息论又涉及到一些数学的概率论相关的内容,这里如果大家有时间,可以扩展一下,去了解学习一下香农定律相关的知识,香农定理之于通信,等价于牛顿万有引力之于物理学,一点也不为过。 香农在二十世纪四十年代初奠定了通信的数字理论基础。同时香农三大定律是信息论的基础,虽然没有提出具体的编码实现方法,但是为通信信息的研究指明了方向。他的“信道容量定理”指出,可以找到这样一种技术,当数据传输速率不大于某个最大传输的速率时,通过它可以以任意小的错误概率传输信号。同时香农也给出了有噪声信道的最大传输速率与宽带的关系。 香农三大定理是信息论的基础理论,是存在性定理,虽然并没有提供具体的编码实现方法,但为通信信息的研究指明了方向。可变长无失真信源编码定理,采用无失真最佳信源编码可使得用于每个信源符号的编码位数尽可能地小,但它的极限是原始信源的熵值,但是超过了这一极限就不可能实现无失真的译码。有噪信道编码定理,是当信道的信息传输率不超过信道容量时,采用合适的信道编码方法,可以实现任意高的传输可靠性,但是若信息传输率超过了信道容量,就不可能实现可靠的传输。而保真度准则下的信源编码定理,或称有损信源编码定理,只要码长足够长,总可以找到一种信源编码,使编码后的信息传输率略大于率失真函数,而码的平均失真度不大于给定的允许失真度。 香农三大定律结合起来就构成了现代信息论的基础理论,三大理论之间相辅相成,相互联系,为现代通信数字理论的发展做出了巨大的贡献。 8.1.1 编码冗余 编码冗余在实际压缩编码时不可避免的存在,其中最主要的关键因素:数据本身和压缩比;因为数据的不可知性,对简单图像数据进行压缩时,可能可以采用非常简单的压缩编码方式,但在图像数据的某些纹理分布中,必须进行较为复杂的编码,才能尽可能的保证数据的误差最小,所以由此带来压缩编码的关键问题:有损编码与无损编码。根据不同的应用,需要设计不同的编码方式,不同的编码方式,也就势必带来不同的编码冗余。 8.1.2 空间冗余和时间冗余 这里稍微解释一下,时空间冗余主要是与数据相关的,单张图片主要就是空间的冗余,因为它存在各种各样不同的纹理分布,视频序列就可能会产生时间上的冗余,因为它与时间相关,不同的时刻不同帧的数据可能不同,可能变化较小,也可能变化较大。 8.1.3 不相关的信息 8.1.4图像信息的度量 8.1.5保真度准则 8.1.6 图像压缩模型 8.1.7 图像格式、容器和压缩标准 四. 小结 图像数据压缩的基础知识,也就是书中的第一节在这里简单作个笔记介绍,后续有机会再补充一些内容,后期可能会用到,这里做个笔记。每天学一个图像压缩小知识,大家一起来学习进步吧!

STM32:TTL串口调试

一.TTL串口概要 TTL只需要两个线就可以完成两个设备之间的双向通信,一个发送电平的I/O称之为TX,与另一个设备的接收I/O口RX相互连接。两设备之间还需要连接地线(GND),这样两设备就有相同的0V参考电势。 二.TTL串口调试 实现电脑通过STM32发送指令来控制红绿小灯的亮灭。 电脑输入"R0"红灯灭,"R1"红灯亮;"B0"蓝灯灭,"B1"蓝灯亮;"G0"绿灯灭,"G1"绿灯亮 注:案例使用STM32F103CT6芯片,KEYSKING教程的开发板套件。开发板接口图如下 在CubeIDE中,设计面板->属性分类->connectivity中有3个USART。 意思为:Universal Synchronous/Asynchronous Receiver & Transmitter 。 通用同步/异步收发器。其中TTL串口就用的是异步通信Asynchronous。因此可以也缩写成UART。 在设计面板中根据开发板说明找到串口TX,即PA2。设置串口通信,根据自身设置的属性在connectivity找到对应的USART并设置节点模式为异步。 我们可以在属性详情看到波特率(Baud Rate)为115200bits/s,意味着每秒可以发送 11520个字节。两个设备要相同的波特率才能正常通信。 因为字节长度(Word Length)有8个比特位bit,发送一个字节数据需要在字节开头和结尾分别增加一个起始位和停止位共10bit 其他属性校验位为NONE,停止位为1.保持默认即可。设置完成后可以在设计界面中看见另一个收/发串口也被默认复制成相同的配置了。同时根据开发板说明找到红绿蓝灯的接口,设置为GPIO_OUTPUT。保存生成新的代码: 其中示例关于: MX_USART2_UART_Init(); //是系统自动生成的代码,用来初始化UART的 HAL_UART_Receive(huart, pData, Size, Timeout) //UART接收数据,参数串口类型,接收数据的变量地址,接收数据的变量的字节大小,最大延迟时间 HAL_UART_Transmit(huart, pData, Size, Timeout) //UART发送数据 关键代码main函数: int main(void) { /* USER CODE BEGIN 1 */ /* USER CODE END 1 */ /* MCU Configuration--------------------------------------------------------*/ /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ HAL_Init(); /* USER CODE BEGIN Init */ /* USER CODE END Init */ /* Configure the system clock */ SystemClock_Config(); /* USER CODE BEGIN SysInit */ /* USER CODE END SysInit */ /* Initialize all configured peripherals */ MX_GPIO_Init(); MX_USART2_UART_Init(); /* USER CODE BEGIN 2 */ uint8_t recvDate[2]; /* USER CODE END 2 */ /* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) { HAL_UART_Receive(&huart2, recvDate, 2, HAL_MAX_DELAY); HAL_UART_Transmit(&huart2,recvDate,2, 100); GPIO_PinState pinstate= GPIO_PIN_RESET; if(recvDate[1] == '1'){ pinstate = GPIO_PIN_SET; } //我把红绿蓝的接口标签命名为了redLED,greenLED,blueLED if(recvDate[0] == 'R'){ HAL_GPIO_WritePin(redLED_GPIO_Port, redLED_Pin, pinstate); }else if(recvDate[0] == 'B'){ HAL_GPIO_WritePin(blueLED_GPIO_Port,blueLED_Pin, pinstate); }else if(recvDate[0] == 'G'){ HAL_GPIO_WritePin(greenLED_GPIO_Port,greenLED_Pin, pinstate); } /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ } /* USER CODE END 3 */ } 三.

05、Python -- 爬取ts文件格式视频思路

目录 第一步:爬取一段5秒视频找url代码结果 第二步:下载整个视频的所有片段代码:结果: 第三步:合成视频安装模块代码:结果 简洁代码代码:结果: 最终代码简洁前代码简洁后代码 思路: 1、爬取视频,但是每次只能爬取一段5秒的视频。 2、一个视频有很多秒,所以需要爬取很多片段的视频 3、把所有爬取下来的片段视频合成导出。 4、最后再简洁代码 第一步:爬取一段5秒视频 找url 首先,找到需要爬取的视频,选择如图,找到对应的URL。 代码 然后最简单的四行爬取代码 结果 爬取的结果如图,里面视频只有5秒 第二步:下载整个视频的所有片段 代码: 结果: 把该视频所有片段都下载下来了 第三步:合成视频 安装模块 命令:pip install moviepy -i https://mirrors.aliyun.com/pypi/simple/ 代码: 结果 完整合成视频并下载下来 简洁代码 代码: 结果: 如图:每个视频只由4秒 最终代码 简洁前代码 这里我把原本存放视频的文件夹名由《视频》改成《视频片段》 所以这里的【视频】,后面写代码的时候也应该改成【视频片段】 # 导入模块 import requests number = 0 # 循环下载视频片段 while True: format_num = '{:05d}'.format(number) # f'' --> 用于在字符串中添加执行表达式 url = f'https://xxxxxxxxxx.{format_num}.ts?pkexxxxxxxxxxxxx' res = requests.get(url) # 遇到404,就跳出循环 if res.status_code == 404: break open(f'视频片段/{format_num}.

win11图标间距变大了怎么调整

win11图标间距变大了怎么调整 可以尝试以下两种方法解决: 方法一: 打开系统“设置”。打开左边的“显示屏”。降低缩放占比,即可调窄桌面文件的间隔。 方法二: 右键开始菜单打开“运行”。输入“regedit”回车键打开注册表文件。进到“计算机\HKEY_CURRENT_USER\Control Panel\Desktop\WindowMetrics”位置。打开“lconSpacing”和“IconVerticalSpacing”选项。将他的标值都改为“-1125”保存即可。

手写SDK的秘诀

目录 什么是SDK?使用SDK的好处?手写SDK经验总结易用性如何提高易用性?1、统一调用2、集中配置3、良好的命名 可理解性1、结构清晰2、统一风格3、编写注释4、说明文档 可扩展性轻量依赖自定义实现 高效稳定 写在最后 什么是SDK? SDK(Software Development Kit)即 软件开发工具包 ,就是帮助我们开发出软件的工具集合,除了代码之外,一般还要搭配文档、示例等。 一般 SDK 都是需要 引入 到项目中使用的。比如学 Java 的朋友最早接触的 JDK,就是用来开发 Java 软件的工具包,使用时需要编写 类似 import java.util.* 的语法来引入。此外,大部分的 SDK,都是需要通过人工或项目管理工具,将其文件下载到指定路径才能引入。 使用SDK的好处? 比如公司有许多系统都需要实现文件上传的功能 文件上传设计:https://mp.weixin.qq.com/s/3QXe4MSObJTP43M2gXWSlA 显然我们不需要给每个系统都去开发文件上传,而是只要有一个团队编写一套通用的文件上传SDK,然后让需要实现同样功能的系统去引入即可。可以大大提高开发效率。 因此,编写SDK也就是写一个功能、造一个轮子。好的轮子可以减少一些项目在相同功能上的差异,也可以省去每个系统都去开发同样功能的时间。至此,我们已经了解了什么是SDK,来看看如何写出优秀的SDK。 手写SDK经验总结 好的 SDK 应该具有简单易用、通俗易懂、便于扩展、高效稳定等特点。 易用性 在技术选型的时候一般选择简单易用的SDK,最好是几行代码就能轻松使用,而不是必须要读完很长的一份文档,再写个几十行代码才能生效。 如何提高易用性? 1、统一调用 将复杂的功能进行封装,对外提供统一的调用入口,尽量屏蔽一些实现细节,减少用户调用的流程和对参数的理解成本。 举个例子,下面是两种日期处理函数。用户不需要关心他们是如何实现的,只需要知道怎么用、传递哪些参数、得到哪些返回值就行了。 // 第 1 种:需要 new 对象 DateUtils dateUtils = new DateUtils(); dateUtils.setDate('2021-08-31'); Date date = dateUtils.parse(); // 第 2 种:直接调用 Date date = DateUtils.parse('2021-08-13'); 显然是第二种更加方便快捷一些。 2、集中配置 将复杂的参数配置化,不需要让用户到处写参数,而是通过一个配置文件统一管理。

Python 实战 | 文本分析工具之HanLP入门

更多内容点击查看Python 实战 | 文本分析工具之HanLP入门 Python教学专栏,旨在为初学者提供系统、全面的Python编程学习体验。通过逐步讲解Python基础语言和编程逻辑,结合实操案例,让小白也能轻松搞懂Python! >>>点击此处查看往期Python教学内容 本文目录 一、前言 二、HanLP简介 三、安装HanLP 四、轻松使用HanLP 五、结束语 六、相关推荐 本文共6630个字,阅读大约需要17分钟,欢迎指正! Part1前言 上期文章我们介绍了文本分析中两个文本关键词提取的方法,并使用 Python 的第三方库 jieba 实现相应的功能。jieba 对于初学者是友好的、简单易上手,实际上除了 jieba,在自然语言处理开源界还有一些主流的工具也值得关注,比如 HanLP、NLTK、SnowNLP 等等,这些开源工具都有各自的特点,具体的性能对比可以参考一些开源测评。本文主要为大家介绍 HanLP 这个工具,一方面是 HanLP 的发展速度是比较迅猛的,对于想要研究或进行文本分析的学者,其无疑是一个很好的选择;另一个方面是得益于 Python 简洁的设计,使用 Python 调用 HanLP 可以节省时间,这也有助于入门 HanLP。 Part2 HanLP 简介 HanLP 是一个由中国开发者何晗(hankcs)于 2014 年开发的自然语言处理库,自发布之后,HanLP 不断更新迭代,进行了许多新功能和性能的优化,Github 上 Star 数量已超过 3w,其在主流自然语言工具包中非常受欢迎。HanLP 具有丰富的功能,可以进行一系列文本分析任务,比如词法分析(分词、词性标注、命名实体识别)、句法分析、文本分类/聚类、信息抽取、语义分析等等。发展至今,HanLP 已经衍生出了 1.x和 2.x 两大版本,本文介绍的是主打追求经典、稳定、高效的 1.x 版本,并且 1.x 版本内部的算法经过了学术界、工业界的考验,已有出版的配套书籍《自然语言处理入门》(作者就是 HanLP 库的开发者),感兴趣的读者可以深入学习。 由于这是第一篇介绍 HanLP 的文章,本文更加侧重以入门为主,主要介绍了在 Python 中安装并使用 HanLP1.x 的方法,以及如何获取 HanLP 的分词器进行分词,当然我们也会在后面的文章中介绍更多关于 HanLP 的功能。

shell实时记录磁盘读写超过指定大小的进程

目的 每秒采集所有进程的磁盘io数据,把读写超过10000kb的进程记录到文件 脚本 以下内容保存到/opt/pidstat.sh #!/bin/bash log_dir=/var/log/pidstat/ log_file=$log_dir`date +%Y%m%d`.log if [[ ! -d $log_dir ]]; then mkdir $log_dir fi for ((i=1;i<=60;i++)) do pidstat -d -l | tail -n +4 | awk '$5>10000||$6>10000{print strftime("%Y-%m-%d %H:%M:%S",systime())"> "$5"k\t"$6"k\t"$9}' >> $log_file sleep 1 done 配置crontab * * * * * /opt/pidstat.sh 主要命令解释 pidstat -d -l 查看每个进程的i/o情况,并显示命令详情 tail -n +4 不显示前4行(标题等信息) awk '$5>10||$6>10{print strftime("%Y-%m-%d %H:%M:%S",systime())"> "$5"k\t"$6"k\t"$9}' 如果第5列值大于100kb或第6列大于100kb,则打印内容 date +%Y%m%d.log 输出到文件名

Pytorch--3.使用CNN和LSTM对数据进行预测

这个系列前面的文章我们学会了使用全连接层来做简单的回归任务,但是在现实情况里,我们不仅需要做回归,可能还需要做预测工作。同时,我们的数据可能在时空上有着联系,但是简单的全连接层并不能满足我们的需求,所以我们在这篇文章里使用CNN和LSTM来对时间上有联系的数据来进行学习,同时来实现预测的功能。 1.数据集:使用的是kaggle上一个公开的气象数据集(CSV) 有需要的可以去kaggle下载,也可以在评论区留下mail,题主发送过去 2.导入我们所需要的库和完成前置工作 2.1导入相关的库 torch为人工智能的库,pandas用于数据读取,numpy为张量处理的库,matplotlib为画图库 import torch import pandas as pd import numpy as np import matplotlib.pyplot as plt import warnings import torch.nn as nn import torch.optim as optim import random 2.2设置相关配置 我们设置随机种子(方便代码的复现)和警告的忽律(防止出现太多警告看不到代码运行的效果) warnings.filterwarnings('ignore') torch.backends.cudnn.deterministic = True torch.backends.cudnn.benchmark = False torch.manual_seed(99) np.random.seed(99) random.seed(99) print ("随机种子") 2.3数据的读入 pd.read_csv里面的参数为相对位置,即代码和文件要在同一个文件夹下面。使用.head()函数来读一下数据的前几行,保证数据是存在的 train_data = pd.read_csv("LSTM-Multivariate_pollution.csv") train_data.head() 我们来看一下各个值的前2048个数据分布情况(方便挑选数据进行代码测试) 代码里面的pollution可以换成dew,temp等值(也就是上图里面的值),用于观看分布情况。 train_use = train_data["pollution"].values plt.plot([i for i in range(2048)], pollution[:2048]) pollution: dew: temp: 我们可以看到temp属性里面的数据整体呈现上升的趋势,所以我们使用属性为temp的值来进行学习和预测。 首先对数据进行归一化操作(因为值过大的话会导致神经网络损失不降低,同时神经网络难以达到收敛),我们使用minmax归一化后将其打印出来可以看到代码显示的效果 from sklearn.

Excel经验分享-单元格字符统计

Excel经验分享 如何在电子表选定范围内,统计任意字符出现的次数 根据日常统计需要,大概有三种情景: 情景一: 要查找的词完全占据一个单元格时, 直接使用函数:COUNTIF(range,criteria),即COUNTIF(查找范围,查找词), 示例:统计保卫人员“罗应光”本周内实际值班的次数,见下表: 操作方法: 选择任意空白单元格,在内输入: =countif(查找范围,“查找词”) */如果没有正常统计结果,把查找词换为对应单元格地址 情景二: 要查找的词是某一单元格内容的一部分且在一个单元格中只出现一次,也是使用COUNTIF函数,第二个参数是查找词加通配符,即COUNTIF(查找范围,“查找词+通配符”); 查找词+通配符的形式如:“上海南站”“上海北站”“上海东站”可以统一使用“上海*”来表示,查找词与通配符是顺序排列的,即“上海*”表示的字段是“上海”开头之后为任意字符的意思。 示例:统计所有姓王的人员值班总数 任然可以使用countif()函数操作,如下图 要注意的是,在我使用的office2013版的Excel2013中,在countif(range,criteria)函数的criteria参数位置直接输入需要查找或统计的字符是不会出结果的,只能输入字符所在的单元格地址,另外 “字符+通配符” 的形式提示函数错误。其他版本的excel是否有这个问题,不是很清楚。 纠正:字符的输入两边必须加“”号,应该是受数字类型的限制,之上的错误主要原因就是没有在字符串两边加“”,Excel里所有符号都应该是英文符号,不能使用中文符号。 情景三 要查找的词在一个单元格中出现多次,使用SUMPRODUCT函数,即SUMPRODUCT(LEN(查找范围)-LEN(SUBSTITUTE(查找范围,查找词,替换后的值)))。 其中主要用到的有三个函数,分别为 SUMPROUCT(array1,array2,array3…),具体用法参看后文SUMPRODUCT函数 SUBSTITUTE(),用新字符替换查找字符 LEN(),返回字符数 此用法灵活性比较高,关键是根据需要统计的字符,合理的选择“替换后的值”,最好使替换前和替换后字符相减后值为“1”,当然也可以选择最终统计完之后除以差值。 示例: SUMPRODUCT 函数 SUMPRODUCT函数返回相应范围或数组的个数之和。 默认操作是乘法,但也可以执行加减除运算。 本示例使用 SUMPRODUCT 返回给定项和大小的总销售额: SUMPRODUCT 匹配项 Y/大小 M 的所有实例并求和,因此对于此示例,21 加 41 等于 62。 语法 若要使用默认操作 (乘法) : =SUMPRODUCT (array1, [array2], [array3], …) SUMPRODUCT 函数语法具有下列参数: 参数说明array1 必需其相应元素需要进行相乘并求和的第一个数组参数。[array2], [array3],… 可选2 到 255 个数组参数,其相应元素需要进行相乘并求和。 执行其他算术运算 像往常一样使用 SUMPRODUCT,但请将分隔数组参数的逗号替换为所需的算术运算符 (*、/、+、-) 。 执行所有操作后,结果将像往常一样进行求和。 注意: 如果使用算术运算符,请考虑将数组参数括在括号中,并使用括号对数组参数进行分组以控制算术运算的顺序。

简单粗暴处理IDEA项目提示 Cannot resolve symbol ‘String‘错误

一、背景 由于要使用新的插件需要将IDEA开发工具升级为高版本,由2019升为2021版本,没有将之前IDEA版本卸载导致项目多处报错无法运行。 二、处理过程 第一步:IDEA打开项目后所有的String、Integer之类的JDK自带的类和maven引入的类都标红,鼠标放上去报错内容:setup JDK。 第二步:引入JDK继续报了另一个错误,还是所有的String、Integer之类的JDK自带的类标红,鼠标放上去之后显示:Cannot resolve symbol ‘String’ 各种尝试清除缓存、maven依赖重新导入…都不行 第三步:在控制面板卸载IDEA工具,找到IDEA安装目录(C盘用户目录)下面的idea文件夹删除干净,并卸载IDEA,之后重装IDEA。 第四步:见证奇迹时刻,IDEA工具安装成功,使用IDEA重新打开项目后显示正常。

STM32F103标准库 Keil 工程模板创建

STM32F103C8T6 标准库工程模板创建 下载库 可以根据自己 MCU 的型号去 STM32 官网下载相应的库,网址:STM32 官网标准库下载地址 STM32F103 库的下载地址如下:STM32F10x标准外设库 我使用最新版本 3.6.0,下载下来解压后是:STM32F10x_StdPeriph_Lib_V3.6.0 建立 Keil-MDK 模板工程 创建文件夹 创建一个模板工程的文件夹,如图: App: app 文件。主要的编程工作在这里展开。 Core: 存放 ARM 内核代码 Doc: 存放文档 Peripheral: 存放标准外设库源码 Project: 存放 Keil 工程文件 Start: 存放启动文件 User: 存放用户文件。main.c 文件在这里。 其中,Core、Peripheral、Start 文件夹下的文件全部从下载的标准库中复制,User 文件夹下处 main.c 外皆复制自下载的标准库。 复制标准库 复制内核源文件: 复制启动文件: 复制器件支持文件: 创建工程 打开Keil-MDK,在刚刚创建的 Project 文件夹下建立一个新的工程: 设计如下分组: 工程设置 从官网下载的标准外设库不支持armcc6编译器,所以设置为默认的armcc5编译器: Output 勾选 Hex: 添加预处理宏定义:USE_STDPERIPH_DRIVER STM32F10X_MD, 添加头文件路径 设置烧录工具: 编写 main.c #include <stm32f10x.h> /*默认系统时钟,可以大致精确到ms级延时*/ void delay_ms(uint16_t time) { u16 i=0; while (time--) { i=8000; while(i--) ; } } void LED_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); //启动GPIO的时钟 GPIO_InitStructure.

JS中数组的reduce方法

1.reduce方法的介绍 reduce()时归并类方法。 定义和用法 reduce() 方法接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值。 reduce() 可以作为一个高阶函数,用于函数的 compose。 注意: reduce() 对于空数组是不会执行回调函数的。 语法 array.reduce(function(total, currentValue, currentIndex, arr), initialValue) 1.1 reduce(fn,value): 1.1.1 第一个参数是一个函数,每次遍历都会调用的函数 fn(preview,current,index,arr){ // 第一个参数是前一个值 // 第二个参数是当前值 // 第三个参数是当前元素索引 // 第四个参数是引用的数组 } 1.1.2 第二个参数是:归并基础的初始值 2.reduce()方法一个参数和两个参数的区别 2.1 只传一个参数 let arr = [2 ,4 ,5,3,1] let result = arr.reduce((preview, current) => { return preview + current }) console.log(result) //15 上面的代码用于计算数组的总和。reduce方法之传入了匿名函数,函数只接收两个参数,分别是前一个值preview,当前值current。当reduce方法没有传入第二个参数时,第一次循环的前一个值为数组的第一项,当前值则为数组的第二项。。函数返回的是preview + current的结果会成为第二次循环preview的值,此时的当前值则为数组的第三项。后面的循环以此类推。 let arr = [2 ,4 ,5,3,1] let result = arr.reduce((preview, current) => { console.

spring cache (ehcache方式)

目录 前置pom: jar配置文件:ehcache.xmlapplication.yml MyEhCacheCacheConfiguration.java效果图禁用 MyEhCacheCacheConfiguration.java启用 MyEhCacheCacheConfiguration.java 前置 会演示springcache的使用方式 项目地址 前置配置 本篇文章是基于上篇文章进行: spring cache (默认方式) 强调: 在追踪源码的时候发现, 是通过注入ehCacheCacheManager进行文件的初始化, 当然解析xml文件也是该地方开始. 也就有了MyEhCacheCacheConfiguration,java方法. 大致思路同源码一致, 只是对获取的数据进行拦截, 增加部分数据, 进行一遍赋值操作 源码部分 spring cache (默认方式) 一致, 只是实现缓存的方式不一样 关键类: org.springframework.cache.Cache org.springframework.cache.interceptor.CacheInterceptor#invoke org.springframework.boot.autoconfigure.cache.CacheAutoConfiguration 实现类: org.springframework.cache.ehcache.EhCacheCache 相关缓存文章 spring cache (默认方式) spring cache (Redis方式) spring cache (ehcache方式) pom: jar <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-cache</artifactId> </dependency> <dependency> <groupId>net.sf.ehcache</groupId> <artifactId>ehcache</artifactId> </dependency> <dependency> <groupId>javax.cache</groupId> <artifactId>cache-api</artifactId> </dependency> <!-- 反射工具包 --> <dependency> <groupId>org.reflections</groupId> <artifactId>reflections</artifactId> <version>0.9.10</version> </dependency> 配置文件: ehcache.xml <?

定时任务使用指南

目录 定时任务常见的使用场景定时任务常见组件jdk自带的Timerjdk自带的ScheduledExecutorServicespringboot自带的定时任务Quartzquartz的体系结构springboot整合quartz Elastic Job(推荐)springboot整合elasticjob lite邮件预警(可选)web控制台的部署常见操作说明 xxl-jobweb控制台的部署编写定时任务策略说明 分批处理数据 定时任务常见的使用场景 指定时间点执行 铁路定时放票,美团定时发放优惠券、红包商品定时上下架(开售/结束),活动定时开始/结束定时推送营销信息修复历史数据 间隔指定时间自动执行 同步数据:从第三方拉取信息,同步到我们自己的库中,比如定时查询合作银行的转账进度、合作快递的物流进度。更新状态:超过三十分钟未支付自动取消订单,到期自动解冻账号。消息通知:扫描即将过期的优惠券,即将开始的车票、机票、电影票,通知用户;备份数据、统计账单流水、更新缓存检测节点心跳,确定节点状态、是否可用 定时任务常见组件 1、jdk自带的 java.util.Timer 使用简单、功能单一,对复杂任务、多任务并发执行支持差,适用于简单的单个任务,eg. 间隔指定时间清除本地缓存。 2、jdk自带的 java.util.concurrent.ScheduledExecutorService 支持线程池,对多任务支持好,适合执行多个单机任务。 3、springboot自带的Schedule 使用简单,与springboot无缝接入,适合用于springboot项目的简单单机任务。 4、Quartz 专业的定时任务框架,功能强大,使用略微麻烦,适合用于复杂的单机任务。 以上三个对分布式的支持都差,集群部署服务时容易出现多个节点重复执行定时任务的问题,通常只用于实现单机定时任务。可以自行实现分布式(eg.使用zk做分布式协调)、将任务状态持久化(db),但比较麻烦。 5、elastic-job(推荐) 当当网开源的弹性分布式任务调度框架,已成为apache ShardingSphere的子项目;功能丰富强大,提供web管理界面,新版界面使用 Vue + ElementUI 编写,漂亮美观,文档齐全,接入、使用都十分简便;但需要引入zk实现分布式协调,部署略微麻烦。 6、xxl-job 大众点评开源的弹性分布式任务调度框架,功能丰富强大,轻量,提供web管理界面,springboot + freemarker 界面一般,文档丰富,使用db持久化任务状态,无需额外引入组件。 elastic job、xxl-job 二者相比,不看github star的话,elastic job 的优势在于使用体验,管理界面比 xxl-job 漂亮、好用,接入也比 xxl-job 简便;xxl-job 的优势在于无需额外引入组件。如果项目本身要引入zk,更推荐使用 elastic-job lite实现分布式定时任务。 jdk自带的Timer 1、编写定时任务:继承抽象类TimerTask,实现run()方法 public class MyTask extends TimerTask { @Override public void run() { try { //... } catch (Exception e) { //必须catch异常 } } } 2、调度、执行

小知识(6) el-table表格选中行和回显行(vue3)

el-table表格选中行和回显行 官方文档说明 https://element-plus.org/zh-CN/component/table.html#table-%E6%96%B9%E6%B3%95 环境:vue3+element-plus 选中行selection <el-table ref="baseTableRef" row-key="id" border :selection="true" :reserve-selection="true" :data="dataList"> <el-table-column type="selection" width="55"></el-table-column> <el-table-column label="名称" prop="name" align="center" /> </el-table> 回显选中行 function init(){ nextTick(() => { let row = dataList[0]; // 行数据 proxy.$refs.baseTableRef.toggleRowSelection(row, true); }); } 拿到当前选中的行数据列表 proxy.$refs.baseScopeTableRef.getSelectionRows()

maestro使用

1、右下角 INTERACTIONS: (1)contact、clash: 在Maestro软件中,Interactions Contact/Clash是一种用于分析蛋白质结构中相互作用的工具。它可以帮助研究人员识别蛋白质中的原子之间的接触或冲突。 具体来说,Interactions Contact/Clash可以计算蛋白质分子中的原子对之间的距离,并将其归类为"contact"(接触)或"clash"(冲突)。当两个原子之间的距离小于其共价半径之和时,就会被视为"clash",表示它们的位置非常接近,可能会产生不利的相互作用。而当两个原子之间的距离大于其共价半径之和时,就会被视为"contact",表示它们的位置相对较远,可能会产生有益的相互作用。 ps: 两个原子之间的距离小于其共价半径之和表示它们的实际距离比两个原子的大小之和还要近。在化学中,原子通常被认为是硬球,其大小由其共价半径确定。当两个原子之间的距离小于这两个原子的共价半径之和时,它们被认为是非常接近的,可能会导致相互作用或冲突。 共价半径是指两个原子之间形成共价键时,原子核之间的平均距离。每种元素都有特定的共价半径值,这些值可以通过实验或计算得到。当两个原子之间的距离小于它们的共价半径之和时,它们之间的相互作用将变得不稳定,可能会发生排斥、冲突或不利的相互作用。 因此,在蛋白质结构中,当两个原子之间的距离小于它们的共价半径之和时,可能会出现空间上的重叠或冲突,这可能影响蛋白质的稳定性和功能。通过识别这些冲突,研究人员可以进行进一步的优化或修正,以改善蛋白质的结构和性能。 (2)pi interactions: 在Maestro软件中,"Interactions Pi Interaction"(π相互作用)是一种用于分析蛋白质结构中的π电子之间相互作用的工具。 π相互作用是指两个π电子系统之间的相互作用。π电子通常存在于含有双键或芳香环的分子中,它们以平行或近平行的方式堆积在一起,形成π电子云。这些π电子云之间的相互作用可以对分子的结构和性质产生重要影响。 pi-pi stacking 和 pi-cation: π-π堆积和π-阳离子相互作用是两种不同类型的非共价相互作用。 π-π堆积是指两个芳香环或含有共轭双键的分子之间π电子云的相互作用。这种相互作用通常发生在平行或近平行的芳香环或共轭双键之间,使它们靠近并形成稳定的堆积结构。π-π堆积是一种较弱的非共价相互作用,其能量通常在1-10 kcal/mol之间。 而π-阳离子相互作用是指一个含有正电荷的阳离子与一个含有π电子云的芳香环或共轭双键之间的相互作用。这种相互作用通常发生在阳离子与芳香环或共轭双键的垂直方向上,使它们靠近并形成稳定的相互作用。π-阳离子相互作用比π-π堆积更强,其能量通常在10-50 kcal/mol之间。 总体来说,π-π堆积和π-阳离子相互作用都是重要的非共价相互作用,对于蛋白质、核酸和其他生物大分子的结构和功能都有重要影响。 (3)non-covalent bonds: 在Maestro软件中,Interactions(相互作用)面板中的Non-Covalent Bonds(非共价键)是指分子中不涉及共享电子对的化学键。这些非共价键通常由电荷分布或电荷间相互作用引起,而不是由共用电子对形成的共价键引起。 Hydrogen bonds(氢键): 氢键是一种非共价相互作用,涉及一个氢原子与一个电负性较高的原子(如氮、氧或氟)之间的相互作用。氢键通常形成在分子中带有部分正电荷的氢原子与带有部分负电荷的电负性原子之间。氢键在生物分子的折叠、配体-受体结合等过程中起着重要的作用。 Halogen bonds(卤键): 卤键是一种类似于氢键的非共价相互作用,涉及一个卤素原子(如氯、溴或碘)与一个电负性较高的原子之间的相互作用。卤键通常形成在卤素原子的σ孤对电子与带有部分正电荷的原子之间的相互作用。卤键在药物设计和材料科学中具有重要的应用价值。 Salt bridges(盐桥): 盐桥是一种离子键相互作用,涉及一个带正电荷的离子与一个带负电荷的离子之间的相互作用。盐桥通常发生在两个离子之间的静电吸引力作用下,其中一个离子是酸性,另一个是碱性。盐桥在蛋白质结构中起着重要的作用,有助于稳定蛋白质的三维结构。 Aromatic H-bond(芳香氢键): 芳香氢键是一种特殊类型的氢键,涉及一个芳香环上的氢原子与另一个分子中的电负性原子之间的相互作用。芳香氢键通常形成在芳香环上的氢原子与带有部分负电荷的电负性原子之间的相互作用。芳香氢键在化学和生物领域中都具有重要的作用,对于分子的识别和结合具有特殊的影响。

轨迹数据能够提取哪些特征?

目录 轨迹轨迹的基本要素轨迹的特征提取核心代码参考文献 轨迹 物理学把物体运动所形成的时间和空间对象做成的集合称为轨迹,用以刻画物体运动的时空变化,轨迹具有时空特性,是一种时空数据,轨迹对象不同于常规地理对象,它不是一种地理实体,可以看作是一种物体随时间和空间表现得地理现象。在物联网如何如此发达的今天,我们人类各种各样的的设备无时无刻不在生成轨迹,如微信轨迹,跑步app记录轨迹,车载GPS设备记录,Carplay,Carlife等手机导航软件轨迹等,轨迹通常可以表示为有一些经纬度构成的时间序列 trace_time lng lat spd 0 2023-08-19 16:01:46 109.763576 40.690905 0.0 4 2023-08-19 16:02:45 109.763861 40.690694 7.4 5 2023-08-19 16:02:47 109.763883 40.690658 5.5 7 2023-08-19 16:03:17 109.763843 40.690825 0.0 64 2023-08-19 16:16:26 109.763728 40.690875 0.0 ... ... ... ... ... 897 2023-08-19 17:15:20 109.737185 40.633745 5.5 900 2023-08-19 17:15:24 109.737225 40.633810 7.4 902 2023-08-19 17:15:26 109.737240 40.633825 3.7 1000 2023-08-19 17:22:17 109.736219 40.634512 5.5 1001 2023-08-19 17:22:33 109.

python爬虫-某政府网站加速乐(简单版)实例小记

# -*- coding:utf-8 -*- # @Time : 2023/10/23 17:06 # @Author: 水兵没月 # @File : 哈哈哈哈.py # @Software: PyCharm #################### import random import requests # 代理 def get_proxy(proxy_type=random.choice([1,2,3,4,5])): url = "http://ZZZZZZZZZZZZZZZZZZ" url = "http://XXXXXXXXXXXXXXXX payload={ "proxy_type": proxy_type, "spider_type": 2, } response = requests.request("POST", url, data=payload) proxies = response.json()['msg'][0] return proxies # 记录 url = 'aHR0cDovL3N0aGp0LmppYW5nc3UuZ292LmNuL2NvbC9jb2w4MzU2OC9pbmRleC5odG1sP3VpZD0zNTEwODUmcGFnZU51bT0xMjE=' headers = { "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding": "gzip, deflate", "Accept-Language": "zh-CN,zh;q=0.9", "Cache-Control": "no-cache", "Connection": "keep-alive", "

EB配置MCAL全模块讲解【Autosar——2 MCU模块详解】

1.首先在了解MCU时钟,包括外部晶振,内部时钟。 常用的时钟由外部高速晶振PLL倍频后得到 各模块时钟由PLL PHI0分频后得到。 2.打开EB添加MCU模块,根据上述条件配置MCU时钟序列 ①选择Pre,方便后续MCU的初始化 ②配置MCU时钟 ③使能其他模块 3. 点开MCU时钟配置界面,选择外部高速晶振 在PLL界面,使能PLL,选择对应的倍频系数 使能PHI0,选择系数得到PHI0时钟 在该界面配置各模块的具体时钟 添加时钟Point,便于其他模块选择使用 (具体看以下时钟图)

IntelliJ IDEA中未安装lombok 插件导致使用@Slf4j注解的java类中log变量报红

问题描述: 系统重装,新下载的IDEA中下载了一个springboot项目,结果代码中使用注解@Slf4j的java类中,log变量统统报红。 报错原因: 因为@Slf4j这里使用了lombok 提供的注解的形式来帮助我们简化消除一些必须有但显得很臃肿的 java 代码。通过使用对应的注解,可以在编译源码的时候生成对应的方法,所以不会影响任何运行效率。 解决方法一,在线安装: 1、File → settings → Plugins, 然后点击“Browse repositories” 2、输入 lombok 搜索插件, 点install安装,安装完重启idea 解决方法二: 1、File → settings → Plugins, 然后点击“Install plugin from disk” 2、去官网下载对应IDEA版本的插件 下载地址: https://plugins.jetbrains.com/plugin/6317-lombok/versions. 3、选择本地提前下载好的 lombok 插件jar, 点 ok 安装,安装完重启idea 天下英雄出我辈,一入江湖岁月催 我是爱生活的「无间行者」,努力把实践过的解决方案分享给大家 一个赞、一个评论、一个关注,真的好开心,努力没有白费。

【java8】 Base64的两种实现方式

Base64的两种实现方式 JDK8的java.util.Base64 String e = java.util.Base64.getEncoder().encodeToString("你好".getBytes()); System.out.println("java.util.Base64===>编码后:" + e); String d = new String(java.util.Base64.getDecoder().decode(e)); System.out.println("java.util.Base64===>解码后:" + d); //输出 //java.util.Base64===>编码后:aGVsbG8gd29ybGQ= //java.util.Base64===>解码后:hello world apache-common的org.apache.commons.codec.binary.Base64 <dependency> <groupId>commons-codec</groupId> <artifactId>commons-codec</artifactId> <version>1.16.0</version> </dependency> String e2 = org.apache.commons.codec.binary.Base64.encodeBase64String("你好".getBytes()); System.out.println("org.apache.commons.codec.binary.Base64===>编码后:" + e2); String d2 = new String(org.apache.commons.codec.binary.Base64.decodeBase64(e2)); System.out.println("org.apache.commons.codec.binary.Base64===>解码后:" + d2); //输出 //org.apache.commons.codec.binary.Base64===>编码后:aGVsbG8gd29ybGQ= //org.apache.commons.codec.binary.Base64===>解码后:hello world 建议用JDK8自带的java.util.Base64,效率更高;

activiti7.0工作流,举个例子实现自定义任务监听和执行监听代码

public class MyListener implements TaskListener, ExecutionListener { // 实现任务监听TaskListener @Override public void notify(DelegateTask delegateTask) { log.info("自定义任务监听器执行"); String eventName = delegateTask.getEventName(); switch (eventName){ case EVENTNAME_CREATE: log.info("===create==="); create(delegateTask); break; case EVENTNAME_ASSIGNMENT: log.info("===assignment==="); assigment(delegateTask); break; case EVENTNAME_COMPLETE: log.info("===complete==="); complete(delegateTask); break; case EVENTNAME_DELETE: log.info("===delete==="); delete(delegateTask); break; default: break; } } public void create(DelegateTask delegateTask){} public void assigment(DelegateTask delegateTask){} // 任务监听完成事件 public void complete(DelegateTask delegateTask){ Integer operateFlag = (Integer)delegateTask.getVariableLocal("operateFlag"); log.info("operateFlag:{}",operateFlag); Workflow workflow = new Workflow(); workflow.

手把手教你从入门到精通C# Modbus通信

前言: 在工业通信领域,Modbus通信是一种使用非常广泛的通信协议,Modbus一般有三种,分别为ModbusRTU、ModbusASCII、ModbusTCP,其中ModbusRTU、ModbusASCII是应用于串行链路上的协议,通俗一点就是说它是走串口的,ModbusTCP通俗点说就是它是走网口的,作者在自动化领域耕耘多年,做过的Modbus项目无数,靠Modbus通信的兼职也赚过数万,毕竟让我徒手撸一个ModbusSlave这种Modbus调试工具对我而言也不在话下,比如上图你看到的Modbus调试助手就是我写的。古人云读万卷书不如行万里路,行万里路不如名师指路,所以入门最快的方法一定是找个前辈模仿他,年轻的时候一定要投资自己!买书、买课程学习都是你提升自己最快的方法,成为高手别无他法,努力学习+模仿高手,他日一定有所成就!一本书、一个课程几十块钱,但是在未来为你赚到的钱一定是这些成本的几十倍、几百倍、上千倍,甚至更多!如果你是一个普通人,没有强大的背景,一定要持续学习,持续学习是普通人逆袭唯一的方法!如果想精通Modbus编程,c#基础的语法知识必不可少,订阅我的专栏《C# Modbus通信从入门到精通》就送《C#本质论》、《C#图解教程》电子书。总之,只要跟我学了Modbus通信,一定能打变Modbus无敌手,如果我问你以下几个问题,你都能答上来,才算是一个高手,不然怎么轻松拿三十万+年薪,当然这些知识我都会在我的专栏《C# Modbus通信从入门到精通》中进行详细介绍。 问题1:Modbus总共有几种? 问题2:Modbus RTU是走串口还是网口? 问题3、Modbus RTU需要校验吗? 问题4、Modbus TCP需要校验吗? 问题5、Modbus支持哪些功能码?每一种功能码的具体含义是啥? 问题6、怎么解决ModbusRTU通信中多线程通信问题? 问题7、怎么解决ModbusTCP通信中掉线重连问题? 如果我问的上面几问题你不能全部掌握的话,我建议你还是来我的专栏《C# Modbus通信从入门到精通》系统学习一下吧! 本专栏将会详细对这三种协议如何在C#程序开发上的应用进行详细讲解,包含协议原理、报文格式、C#源码实现。 专栏刚推出就上了csdn热销榜,由此可见该专栏内容有多超值! 一、《C# Modbus通信从入门到精通》专栏文章目录 点击下面的文章链接即可转到该文章: 1、C# Modbus通信从入门到精通(1)——虚拟串口调试工具的使用 2、C# Modbus通信从入门到精通(2)——Modbus RTU协议原理 3、C# Modbus通信从入门到精通(3)——Modbus RTU(0x01功能码) 4、C# Modbus通信从入门到精通(4)——Modbus RTU(0x02功能码) 5、C# Modbus通信从入门到精通(5)——Modbus RTU(0x03功能码) 6、C# Modbus通信从入门到精通(6)——Modbus RTU(0x04功能码) 7、C# Modbus通信从入门到精通(7)——Modbus RTU(0x05功能码) 8、C# Modbus通信从入门到精通(8)——Modbus RTU(0x06功能码) 9、C# Modbus通信从入门到精通(9)——Modbus RTU(0x0F功能码) 10、C# Modbus通信从入门到精通(10)——Modbus RTU(0x10功能码) 11、C# Modbus通信从入门到精通(11)——调试软件Modbus Slave和Modbus Poll的使用 12、C# Modbus通信从入门到精通(12)——Modbus ASCII协议原理 13、C# Modbus通信从入门到精通(13)——Modbus ASCII(0x01功能码) 14、C# Modbus通信从入门到精通(14)——Modbus ASCII(0x02功能码) 15、C# Modbus通信从入门到精通(15)——Modbus ASCII(0x03功能码) 16、C# Modbus通信从入门到精通(16)——Modbus ASCII(0x04功能码)

完美适配图片自适应

图片自适应的几种方式 当我们在网页中使用图片时,经常会遇到需要将图片调整为适应容器大小的情况。这篇博客将介绍通过背景图和 <img> 标签的 object-fit 属性来实现图片自适应的几种方式。 背景图方式 1. cover 使用 background-size: cover; 可以让背景图完全覆盖容器,并保持其宽高比例。如果背景图的纵横比与容器不一致,可能会有部分背景图被裁剪掉。 以下是一个示例代码: <div class="container"> <div class="image" style="background-image: url('your-image-url');"></div> </div> <style> .container { width: 300px; height: 200px; } .image { width: 100%; height: 100%; background-size: cover; background-repeat: no-repeat; background-position: center center; } </style> 2. contain 使用 background-size: contain; 可以让背景图缩放以完全适应容器,并保持其宽高比例。背景图将在容器内居中显示,但如果容器的纵横比与背景图不一致,容器的某些部分可能会留白。 以下是一个示例代码: <div class="container"> <div class="image" style="background-image: url('your-image-url');"></div> </div> <style> .container { width: 300px; height: 200px; } .image { width: 100%; height: 100%; background-size: contain; background-repeat: no-repeat; background-position: center center; } </style> <img> 标签的 object-fit 属性 object-fit 属性定义了如何根据容器调整图片。以下是几种常见的 object-fit 值和它们的具体说明:

【通览一百个大模型】Baize(UCSD)

【通览一百个大模型】Baize(UCSD) 作者:王嘉宁,本文章内容为原创,仓库链接:https://github.com/wjn1996/LLMs-NLP-Algo 订阅专栏【大模型&NLP&算法】可获得博主多年积累的全部NLP、大模型和算法干货资料大礼包,近200篇论文,300份博主亲自撰写的markdown笔记,近100个大模型资料卡,助力NLP科研、学习和求职。 Baize大模型基本信息资料卡 序号大模型名称归属推出时间规模预训练语料评测基准模型与训练方法开源论文模型地址相关资料58BaizeUCSD2023-0513B不涉及预训练,不存在预训练语料。通过ChatGPT进行Self-Chat实现自动构建大量的多轮对话数据。Baize的训练结构如下图所示: 初始化一个种子数据集(Quora4 和 Stack Overflow5 的问题作为种子),并进行随机采样,根据采样的结果设计对应的提示模板后,交给ChatGPT进行自我对话,从而产生大量模拟人类的多轮对话数据,总共产生111.5k对话数据,花费约100美元。 训练过程中,基于LLaMA和LoRA进行参数有效性训练,得到Baize模型。输入序列为512,LoRA中的秩k为8。使用8位整数格式 (int8) 参数初始化LLaMA检查点。 对于7B、13B和30B模型,使用 Adam 优化器更新LoRA 参数,batch size为64,学习率为2e-4、1e-4和 5e-5。 可训练的LoRA参数在 NVIDIA A100-80GB GPU 上微调了1个 epoch。https://github.com/project-baize/baize-chatbothttps://arxiv.org/pdf/2304.01196.pdfhttps://huggingface.co/project-baize/baize-v2-13b https://huggingface.co/project-baize/baize-lora-30B白泽大模型介绍 一、核心要点 随着ChatGPT和GPT-4的提出,大模型展现了超出人类表现的能力,并在很多领域表现的很精彩;然而,现如今这些大模型均是黑盒模型,对研究和应用都带来了一定的阻碍。缺乏可获得的高质量的对话数据加剧了上述的问题和困难。为了解决这个问题,我们提出一种新颖的pipeline,利用chatgpt的能力自动生成一系列高质量的多轮对话语料。这些语料可以作为有价值的资源用于训练或评估对话模型在多轮对话中的表现。基于LLaMA在生成的多轮对话语料上训练,得到我们的Baize模型。我们继续提出一种自蒸馏式的对齐方法,进一步提升模型的效果。 二、方法 Self-Chat Self-Chat旨在完全利用chatgpt扮演对话角色生成对话数据。 给定一个seed,可以是一个问题,或者一个主题,配套一个模板,让chatgpt生成对话数据。 模板如下所示: 根据这个模板,给定一个seed,让chatgpt生成多轮对话数据,样例如下所示: 挑选Quora和Stack Overflow数据集作为seed,每个数据集中挑选55k个问题,最终获得了111.5k个多轮对话数据,花费约100美元. 另外为了提高模型的instruction-tuning能力,也引入了alpaca语料。 最终的多轮对话数据如下所示: 模型训练 在构造的对话数据集上,选择LLaMA-7B和LLaMA-13B模型进行参数有效性监督微调,对应的模型和数据如下表示: 参数有效性方法选择LoRA。 选择V1版本的对话数据,SFT后得到的模型是Baize-v1;选择v2版本的对话数据,SFT后得到的模型是Baize-v1.5;在Baize-v1.5基础上,进行对齐,得到Baize-v2模型。 模型训练时,在LLaMA的Transformer的每一层嵌入LoRA参数。 Self-Distillation with Feedback 在SFT阶段后,为了提升模型的对齐性能,提出自蒸馏方法。 首先在Quora数据集上,让SFT模型生成4个候选答案response。然后设计模板,让ChatGPT作为评估器对4个候选答案进行排序。模板如下所示: 因此,每个question可以得到ChatGPT认为最好的response。 在对齐阶段,选择Baize-v1.5模型,并额外插入新的LoRA参数,训练时,只选择最好的response进行优化训练。 实验细节 最大长度:512/1024 LoRA rank=8 量化感知训练:INT8量化训练 Adam优化器,batchsize=64,单机A100(80G); 学习率2e-4(7B)、1e-4(13B)和5e-5(30B); 推理阶段采用的prompt如下所示: 在prompt中,插入“The AI assistant consistently declines to engage with topics, questions, and instructions related to unethical, controversial, or sensitive is- sues.

论文解读:Large Language Models as Analogical Reasoners

一、动机 大模型在各种类型的NLP任务上均展现出惊艳的表现。基于CoT propmt能够更好地激发大模型解决复杂推理问题的能力,例如解决数学解题,可以让模型生成reasoning path。现有的经典的CoT方法有few-shot cot、zero-shot cot等。然后现有的cot面临两个核心挑战: 需要提供相关的exemplars作为指导;需要尽可能减少人工标注的成本; Zero-shot CoT避免了人工标注来引导推理,但是对于一些复杂的任务难以完成推理,例如code generation;而few-shot CoT则可以通过引入task相关的exemplar来让大模型生成相应的推理,但是此时则需要人工标注或挑选exemplar因此引发一个研究问题:如何能够同时兼顾两者的优势?本文提出一种“归纳学习”的提示方法。首先设计instruction让大模型生成出与当前问题比较相关的exemplars,并补全exemplars,最后让模型recall relevant problem and aolutions来解决当前的问题。 二、方法 本文关注problem-solving task。 给定一个问题 x x x,首先通过一个prompt method将问题映射到文本输入 ϕ ( x ) \phi(x) ϕ(x),任务目标是调用LLM解决这个问题并生成目标答案 y y y,生成的目标答案可以包含reasoning path r r r和答案 a a a。 本文则是关注在设计 ϕ \phi ϕ。 Self-Generated Exemplars **归纳提示学习(analogical prompting)**旨在模型在解决一个新的问题时,能够自发性地寻找相似的已有的知识。因此提出Self-Generated Exemplars方法,即让模型从在训练阶段掌握的problem-solving knowledge中生成出相关的问题和解决方法。 设计指令来达到这个目的: 基于这个instruction的一个实例如下所示: 大模型能够根据给定的instruciton,在对于一个新的问题 x x x时候,能够先生成出3个相关的且互不相同的problem并给出相应的解决方案,然后再对目标问题进行解决。 self-generated instruction的三个核心部分: 需要明确地让模型生成relevant切diverse exemplars。因为打磨学会偏向于重复地生成一些经典的问题,误导模型生成。 generate problems that are distinct from each other. single-pass & independent exemplar generation。实验发现single-pass效果最好: single-pass:本文提出的方法,一个instruction让模型生成3个exemplar;independent exemplar generation:让模型分别生成若干exemplar,然后采样3个exemplar之后再重新设计prompt让大模型进行生成。 exemplar number K K K:发现3~5最佳。 Self-generated Knowledge + Exemplars 对于像code-generation等复杂的任务,low-level exemplar generation不一定能过让模型很好地解决此类问题,因此本文提出一种high-level generation方法。通过设计如下指令来实现:

【C语言】斐波那契数列细讲

什么是斐波那契数列? 斐波那契数列(Fibonacci sequence),又称黄金分割数列,因数学家莱昂纳多·斐波那契斐波那契斐波那契(Leonardo Fibonacci)以兔子繁殖为例子而引入,故又称“兔子数列”,其数值为:1、1、2、3、5、8、13、21、34……在数学上 ​ 一.细讲数列: ​ 画的不好,大家凑合着看.大致的意思就是:前两位的和等于第3位 二.细讲运算方法: 递归计算: int fbnq(int n) { if (n <= 2) return 1; else return fbnq(n - 1) + fbnq(n - 2); } int main() { int n=0; int c=0; printf("输入数"); scanf("%d",&n); c=fbnq(n); printf("%d",c); return 0; } 但是递归在计算时,有一个致命的缺陷就是,数字大的时候需要非常大的工作量,会导致计算时间非常 的长,且都是重复的步骤。 迭代计算: 这个时候我们想到递归和迭代的区别,我在递归和迭代详解中详细的讲述了两者区别,当一个问题相当复杂,难以用递归实现时,此时迭代实现的简洁性便可以补偿它所带来的运行时开销 int fbnq(int n) { int a, b, c; a = 1; b = 1; c = 0; if (n <= 2) { return 1; } while (n > 2) { n--; c = a + b; a = b; b = c; } return c; } int main() { int n = 0; int c = 0; printf("

mysql如何查看所有用户

本人github 在 MySQL 中,你可以使用以下 SQL 查询来查看所有用户: SELECT User, Host FROM mysql.user; 这将列出 mysql.user 表中的所有用户及其关联的主机。 步骤: 登录到 MySQL: 打开 MySQL 命令行工具或使用其他方式(如 MySQL Workbench)登录到 MySQL。 执行查询: 在命令行中输入上面的 SQL 语句并执行。 注意: 你需要具有足够的权限来访问 mysql.user 表。如果你不是以 root 用户身份登录,你可能不能看到所有用户。 这是一个直接和简单的方式来查看所有 MySQL 用户。希望这对你有帮助!有其他问题,随时提问。

iPhone开发--Xcode15下载iOS 17.0.1 Simulator Runtime失败解决方案

爆句粗口,升级后公司网络下载iOS 17.0.1 Simulator Runtime一直出错,每次出错后都得重新开始下载,oh,f**k。上一次在在家里的网络升级成功。 解决办法一: 进入网址:https://developer.apple.com/download/all/ 之后找到iOS 17.0.1 Simulator Runtime,点击下载,这个通过浏览器下载。 之后在命令行运行下面的代码 xcode-select -s /Applications/Xcode.app xcodebuild -runFirstLaunch xcrun simctl runtime add "~/Downloads/iOS 17.0.1 Simulator Runtime.dmg" 解决办法二: 在命令行下,输入如下命令: xcodebuild -downloadPlatform iOS 虽然也会出错,但是比图形界面好一些。重新下载方面一些,只需要敲个回车。 参考: https://blog.csdn.net/qq_38094466/article/details/133132353