Source Insight 4.0常用设置

1、删除某一个或多个无用的project(历史project) 用十六进制编辑器打开"我的文档\Source Insight 4.0\Projects\project_list.sidb"文件,找到你要删除的项目路径及名称字符串,用0替换相关位置的数据 2、删除所有历史project 直接删除"我的文档\Source Insight 4.0\Projects\project_list.sidb" 文件即可. 再重新打开Source Insight的【Open Project】对话框,里面只显示一个默认的“Base”工程,且同时重新生成PROJECTS.DB3文件。 注意:修改或删除project_list.sidb文件时,需要先关闭Source Insight 4.0 3、关闭 大括号自动缩进 在SourceInsight的“选项”菜单下,选择“File Type Options”项,打开如下的对话框: 勾掉“缩进开括号”和“缩进闭括号”即可关闭大括号自动缩进的功能。 4、解决 source insight 代码关联问题 source insight 工程使用时间一久会出现关联问题,需重建工程 菜单中选择Project -> Rebuild Project -> Re-Create the whole project from scratch 如果代码无法关联显示的问题,就只能重建一个新的工程。 5、source insight 4恢复默认界面和恢复上下文窗口 方法一:选择Context window 方法二: Rest Layout 方法三: 1. 先关闭Source Insight软件 2. 打开"我的文档\Source Insight 4.0\Settings"文件夹 3. 此文件夹里有"config_all.xml"和“layout.xml"文件,删除这两个文件。 6、单个文件出现中文乱码解决方法 中文编码有ANSI,unicode与utf-8不同编码 中文操作系统默认ansi编码,生成的txt文件默认为ansi编码unicode是国际通用编码utf-8编码是unicode编码在网络之间(主要是网页)传输时的一种“变通”和“桥梁”编码。utf-8在网络之间传输时可以节约数据量 只有选择正确的编码,才能解决中文乱码的问题。 【现象如图】: 【解决办法】: 菜单栏中【File】->【Reload As Encoding...】->【Chinese Simplified (GB18030)】->选择后,点击load,问题解决!!!

【昇思MindSpore】MindSpore安装体验

目录 MindSpore是什么? MindSpore的特点 MindSpore的安装 第一步、查看自己的Python版本 第二步、创建并进入Conda虚拟环境 第三步、正式安装MindSpore 最后一步、验证是否安装完成MindSpore MindSpore是什么? 首先我来做一个简要的讲述MindSpore,mindspore是一款开源的深度学习框架,就是可以用这个框架来编写程序实现一些AI功能。在这个月国内爆发式的出现了三款开源的深度学习框架,这三款框架分别是:清华大学的jittor,旷视科技的MegEngine,华为的mindspore。 MindSpore的特点 MindSpore Expression(ME):提供API,用于构建和训练神经网络。MindData(MD):数据加载、数据论证、数据转换等。MindInsight(MI):调试工具。对训练过程中的日志文件进行分析,可视化训练过程。MindArmour(MA):安全,可以保护训练和推理中数据的隐私。MindSpore Compiler(MC):高性能执行和自动区分的核心。如果在PyNative模式下运行,请逐个发出运算符。如果在图形模式下运行,请使用管道根据Python代码生成计算图,解析代码以生成抽象语法树(AST),然后构建ANF图。管道将去那里生成反向计算节点,并将其添加到ANF图中。然后进行一些优化(如内存重用、算子融合、常数消除等)。 MindSpore的安装 说明:本文详细介绍在操作系统为Windows64位、虚拟环境为Anaconda3、python版本为3.9.12的背景下,安装Mindspore1.8.1的步骤。 第一步、查看自己的Python版本 到终端执行以下命令 ,就可以查看自己的Python版本了 python 比如我的结果是 Python 3.9.12 (main, Apr 4 2022, 05:22:27) [MSC v.1916 64 bit (AMD64)] :: Anaconda, Inc. on win32 第二步、创建并进入Conda虚拟环境 你需要根据自己Python版本的不同创建对应的Conda虚拟环境并进入虚拟环境,比如我是Python3.9.12,我就要在终端执行以下的命令 conda create -c conda-forge -n mindspore_py39 -c conda-forge python=3.9.0 activate mindspore_py39 之后等它完成即可 第三步、正式安装MindSpore 首先最重要的一点是要处于Conda虚拟环境中,并且在终端执行如下命令安装最新版本的MindSpore 比如我要执行以下命令 conda install mindspore-cpu=1.8.1 -c mindspore -c conda-forge 特别注意的是安装过程中必须要时刻联网呀,最后就等待MindSpore安装完成就行了。 最后一步、验证是否安装完成MindSpore 在终端执行以下命令 python -c "import mindspore;mindspore.run_check()" 如果执行上面命令出现以下内容就说明你安装成功了

ls -l|grep ^-|wc -l 统计文件个数命令

ls -l|grep ^-|wc -l : 在Linux中的作用是查看当前目录下文件个数(不包含子目录中的文件),该命令中用管道 | 分为了三段,分别为: ls -l : 表示长列表输出该目录下文件信息(注: 这里的文件包含:目录、链接、设备文件等); grep ^-: 表示将长列表输出信息进行过滤,只保留一般文件(grep用于筛选前面管道传来的信息,筛选标准是"行首后紧跟着一个-符号",^代表行首)。 wc -l : 用于统计输出信息的行数,因查看命令与管道命令配合,已经过滤得只剩一般文件了,统计结果即为一般文件信息的行数,又因为一行信息对应一个文件,最终结果就得到文件的个数了。 扩展: 1) 查看某文件夹下文件的个数: # ls -l |grep "^-"|wc -l or # find ./dir -type f | wc -l 2) 查看某文件夹下文件的个数,包括子文件夹里的: # ls -lR | grep "^-" | wc -l 3) 查看某文件夹下文件夹的个数,包括子文件夹里的: # ls -lR | grep "^d" | wc -l

#ifdef __cplusplus 的作用

/** * file_name: if_def_test.h * */ #ifdef __cplusplus extern "C"{ #endif // c language N function doing int add(T t); #ifdef __cplusplus } #endif /** * file_name: if_def_test.cpp // if_def_test.c * */ #include "if_def_test.h" int add(T t) { return 0; } 作用: 在C语言开发中,经常会看到C的源文件中看到了extern "C"{ ,这是为了C++代码可以正确调用C代码。"__cplusplus"是一个宏定义,如果当前是C++的环境就会自动定义这个宏,(cplusplus即为C++的意思,很形象),作用是C代码被C++代码调用时,定义了"__cplusplus"宏,用** extern "C"{} **将C代码括起来,表明这是C代码,要按照C语言的规则去解读,而不是按照C++的规则去解析,这样就可以保证C++代码正确地调用C代码。C++是在C的基础上发展而来的,有些特性C++是没有的,比如:函数重载,故需指明这是C代码,否则就会出错。 何时会使用到: 在嵌入式开发中,一般底层和系统层都是使用C语言开发的,而上的应用层是C++开发。计算机是分层的体系结果,不同语言在不同的层次发挥各自的优势作用,其中C和C++是相邻的,C++存在调用C的函数。如果A是编写C代码的程序员,而A编写的代码可能会被C++调用,这就需要在文件的开头和结尾按照使用规范加上宏定义判断。如果不清楚C程序代码是否会被C++调用,则可全部加上该宏定义,并不会你的代码运行。

Python-爬虫(Scrapy爬虫框架,爬取豆瓣读书和评分)

文章目录 1.Scrapy注意点2. Scrapy爬取豆瓣读书和评分代码部分数据定义items.py爬虫部分spiders/book.py数据存储部分pipelines.py启动爬虫执行cmd命令 start.py 1.Scrapy注意点 Scrapy是爬虫框架。 它分为一下部分,其中引擎是核心 Scrapy Engine(引擎):负责spider、ltemPipeline、Downloader、Scheduler中间的通讯,信号、数据传递等。Scheduler(调度器):它负责接受引擎发送过来的Request请求,并按照一定的方式进行整理排列,入队,当引擎需要时,交还给引擎。默认使用16个线程爬取数据Downloader(下载器):负责下载Scrapy Engine(引擎)发送的所有Requests请求,并将其获取到的Responses交还给Scrapy Engine(引擎),由引擎交给spider来处理。Spider(爬虫):它负责处理所有Responses,从中分析提取数据,获取ltem字段需要的数据,并将需要跟进的URL提交给引擎,再次进入Scheduler(调度器)。ltem Pipeline(管道):它负责处理Spider中获取到的ltem,并进行后期处理(详细分析、过滤、存储等)的地方。(将爬虫爬取到的数据进行存储)Downloader Middlewares(下载中间件):一个可以自定义扩展下载功能的组件。Spider Middlewares (Spider中间件):一个可以自定扩展和操作引擎和spider中间通信的功能组件。 通过pip install scrapy在终端上下载这个爬虫框架。 注意:框架不能像包一样直接导入,需要生成框架结构,在这个结构上操作 启动框架: 首先在终端上进入到要生成项目的路径. 然后输入scrapy startproject 项目名启动框架 此时项目路径下会有一个框架生成的文件夹 之后生成爬虫文件命令如图: 先进入爬虫spiders文件夹中,输入scrapy genspider 爬虫文件名称 爬取网页的链接命令生成爬虫文件。这里以豆瓣读书为例 最后使用scrapy crawl +爬虫名(book)来启动爬虫,因为在终端不方便数据查询,所以一般会使用其他方式启动。 这里创建新文件运行这个命令 运行结果scrapy日志信息是红色输出,网页源码以白色输出。 2. Scrapy爬取豆瓣读书和评分 scrapy爬取基本流程如下: 设置爬虫基础参数 settings.py爬虫数据封装管道 设置爬虫基础参数 这里不遵守这个协议,否则爬取不到什么信息了。改成False 默认爬取的线程数,可以取消注释,并修改数目,默认16个线程。 爬取网页后暂停的时间数目,默认不暂停。 请求头,这里需要至少要修改成浏览器信息 设定保存优先级,数字越大,优先级越小。用于多种保存方式下,哪一种保存方式优先。 代码部分 数据定义items.py # Define here the models for your scraped items # # See documentation in: # https://docs.scrapy.org/en/latest/topics/items.html import scrapy # 封装数据 class TestscrapyItem(scrapy.

2022 阿里全球数学竞赛获奖名单公布,其中 00 后选手占了一半多,如何评价这一现象?

2022 阿里全球数学竞赛获奖名单公布,其中 00 后选手占了一半多,如何评价这一现象? 【写在前面】 本届比赛共吸引55000余人报名,其中00后占比超4成,而在获奖的77人中,00后更是拿走了一半的奖项。“00后”作为新时代科研新势力,正在慢慢崛起;在数学领域,他们正逐步搭建起属于他们这个时代的“黄金一代”。对于这个现象,你有什么看法? 作者:Dylaaan 印象中,在今年早些时候,在学校的数学楼一楼看到了阿里巴巴数学竞赛的海报。可惜的是那段时间正在焦虑地准备升学,连初赛都没有参加(当然,如果是我自己参加的话,也是竞争不过现在获奖的大佬们的)。 作为场外热心观众,一直默默着关注这个比赛,今年阿里巴巴全球数学竞赛的结果终于出来啦,一起膜拜下获奖大佬吧~ 一、本次竞赛的获奖结果如何? 本次竞赛评出了四个金奖,分别由来自麻省理工学院的卢维潇、姚远,来自北京大学的陈泽坤,来自布朗大学的饶正昊获得。 对获奖巨神们的身世感到好奇,我稍微调查了一下,发现: 卢维潇同学是北大数院2016级本科生,在去年已经获得了银奖[1]; 陈泽坤同学是北大数院2019级直博生,有之前获得优秀奖的经历[2]; 饶正昊同学也曾经在北大数院学习,在2019年毕业[3]。 看完之后感慨,不愧是北大数院,真的培养了不少数学人才啊。 北大的学校代码为10001,而数院在北大的代码为1号。在这里可以插播一个小故事:1919年,北大实行“废科设系”,蔡元培校长在厘定各系秩序时说道,“治纯粹科学者,都要从数学入手,所以各系秩序,列数学系为第一系。”从而,北大数学系也被称为“第一系”[4]。 另外,本次竞赛榜单中值得一提的是,00后选手揽走了一半的奖项。根据官方数据,入围决赛的00后超过了入围总人数的40%;最终获奖的名单中,00后占据了超过一半。在获奖的名单中,年龄最小的仅有16岁。 二、如何看待00后在本次竞赛的成绩? 一方面,数学中不乏有年龄小,但是表现出数学天赋、获得数学竞赛奖项,甚至年纪轻轻就取得重要成就的数学家。 往过去看,有德国数学家、“数学王子”高斯(Gauss,1777-1855),年少时就天赋异禀,并在19岁时得到了正十七边形的尺规作图方法;法国数学家伽罗瓦(Galois,1811-1832)去世时年仅21岁,但却是现代数学中群论的创建者。 而在近代,华裔数学家陶哲轩(Terence Tao)13岁就获得IMO金牌,16岁大学毕业,21岁在普林斯顿大学博士毕业,24岁就被聘为教授。 从我个人的经历来看,我在高中参加数学竞赛培训时,就已经有初中生来旁听(甚至可能学得比大部分人都好)。只能说确实存在不少超级天才,这在数学的圈子里已经见怪不怪了。 另外一方面,00后也正在成为新时代的科研新势力。 在过去的报道中,“00后”仿佛还是未成年人、小孩子。但是随着时间的推移,00后们早已长大。在去年(2021年),第一批00后已经大学毕业,其中不少人通过保研和考研的方式,继续进入研究生阶段的学习,更有不少人选择硕博连读或者直博,在各个领域内继续深造。 HBNW2RN-">我自己也是00后(在01年出生),预计将于2023年本科毕业,在此之后将作为数学方向(准确地说,是概率方向)的直博生继续学习。 并不是所有的数学家都是百年一遇的天才,大多数在科研前线的奋斗者们也是普通人,只是对自己的方向有较浓厚的兴趣。相信再过几年,会有更多的00后出现在科研的前线,不断推进人类的历史进程。 三、这个比赛有哪些地方特别,为什么数学人都跃跃欲试? 最后,给“吃瓜群众”们科普一下阿里巴巴全球数学竞赛吧。 阿里巴巴全球数学竞赛 - 达摩院damo.alibaba.com/alibaba-global-mathematics-competition?lang=zh 这个比赛是线上进行、没有报名门槛的数学竞赛,目前已经举办了四届。往年的获奖者,有之前备受网友们关注的韦东奕;也有我的本科学校,西安交通大学的陶中恺学长,曾经是门门数学课满分、获得西交本科生最高荣誉“优秀学生标兵”的神。 仔细研究过,这个竞赛的决赛分为五个赛道,分别是代数与数论、几何与拓扑、分析与方程、应用与计算数学、组合与概率。考察的知识点都较为深入,接近现代数学,但是不少题都有现实的背景。就拿我比较熟悉的概率来说,今年初赛的第八题和快递有关。 考虑到随机游动的过程是一个鞅,在做题中需要用到Doob不等式,同时还用到了Kesten在1987年提出的结论。这对选手的知识积累和能力有一定的要求。 阿里巴巴全球数学竞赛还是一个不太一样的竞赛,在这里可以谈论一些比较知名(指的是我知道)的竞赛: 一种是注重解题、技巧性较强的竞赛,比如全国高中数学联合竞赛(简称为高联)、全国大学生数学竞赛(简称为CMC),用到的基础知识不多,基本不超出所学内容的大纲,但是对解题方法的要求很高,有时候一些“逆天”构造让人摸不着头脑; 另一种是对知识的广度和深度有要求的竞赛,例如丘成桐大学生数学竞赛(简称为丘赛),有分析与偏微分方程、几何与拓扑、代数与数论、应用与计算数学、概率与统计、数学物理六个方向,有点像阿里巴巴数学竞赛,但是题目通常偏向理论,没有应用背景,这是和阿里巴巴数学竞赛不一样的地方。 不管是哪一类竞赛,高联、CMC也好,丘赛、阿里巴巴数学竞赛也罢,其实都大大地鼓励了人们学习和研究数学。 在这里不要脸地举我自己的例子(虽然我不是什么数学家),我会选择继续在数学方向深造,最开始是因为在高中参加数学竞赛,发现了自己对数学的兴趣(相信不少人也是一样的)。 同时,就和最开始所说的一样,数学系是“第一系”,不管是什么样的自然科学,都离不开数学的发展。能看到阿里巴巴举办这样的数学竞赛,重视数学,并支持基础科研人才,作为数学人的我还是很开心的。 作者:朝暮 其实像现在这种没什么门槛的比赛,年轻一辈拿奖多的情况挺普遍的。 利益相关:某不知名985在读。 现在和以前不同,以前还多少存在因为信息差问题而没办法刷能力的情况。 但现在大家都知道竞赛这种事情很有用,功利一点说能够为自己打开更多的可能,理想化一点就是可以多学知识,感受学科的乐趣。所以和咱们以前比起来,现在的年轻人对于各种竞赛的热情是非常高的,也有自己的一套专门的参赛的路数。 我弟就是00后,正在上高中,前阵子和他聊天的时候才知道,他们每年会有各种各样的竞赛和选拔,大家的参与热情也很高。互联网时代的信息大爆炸下,大家都很快知道了自己最擅长和最喜欢什么,所以尽量希望不在其他方面浪费时间,并做出一些成就来协助自己。 某种意义上说,阿里为喜欢数学和对数学感兴趣的人都打开了一个窗口。 阿里的这个竞赛我也有参加,客观地说题目一开始难度并没有那么高,更加着重考察的是对知识的理解力和运用。不可否认题目的灵活性和趣味性都不错,不过对比很早就不做卷子的普通人,很多00后那都是浸淫过各种试卷的熟练工。不管是对出题人的反侦查能力还是对考试本身的熟练程度,都不是一个级别的。 无他,唯手熟尔。 总的来说,作为一个鼓励全民爱上数学的比赛,阿里的科普目的确实达到了,也为数学教育领域做出了一些贡献。希望之后还有这种专业性质的竞赛多多出现,不管是从什么层面来说,都挺好。数学作为一门经常被大家黑的学科,能吸引这么多人去研究,真让人开心。 偷偷说一下,其实今年我也参加了,但…完全就是半开玩笑性质参加的,结果没过多久就被刷了,无比惭愧。今天看完战况决定立一个Flag,好好准备明年再战! 作者:阿新 你说有没有一种可能参赛的基本上都是以00后为主,而且自古英雄出少年,这只是正常的现象。 上次被夸的还是90后,比如说疫情的时候第一批冲在前面的90后逆行者们。如果时光倒退10年,那么被称赞的可能是90后。 另外这种比赛参资格也仅仅局限于在校学生。初中生参赛几率不太大,知识储备尚不充足。顶多是高中生和大学生参加比赛。00后的年龄范围基本上是13岁到22岁之间。正常情况下13岁-15岁基本上是初中生,16岁算是开始读高中,除了一些上学过早的学生。一般18岁或者19岁就开始上大学了,22岁的年纪正常情况来看基本上是大三了。所以说现在的大学校园基本上是00后为主。 在获奖名单上我们也不难看出,获奖的基本上都是大学生为主。所以说基本上按道理来说就是针对大学生的一个竞赛,只是正好这个时间00后是占据大学的主力军。当然也有许多例外,在优秀获奖名单中我们还能够找到中学生的身影,这也是难能可贵的。 这种现象一点不奇怪,只是感叹时光的飞快,00后也将逐渐成为下一代人的主力军。00后将逐渐成为我们社会被赋予的期待和关注的对象。 作者:平凡 伯乐常有,而千里马不常有。不管是什么行业,或者说什么领域,想要有的突破性的进展,那么最后的落脚地就必然是人。 可以看到很多的行业,最高精尖的那伙儿人,可能不到两手之数,就以天才般的头脑,奠定了极其坚实的理论基础。 比如提出广义相对论的爱因斯坦,再比如计算机鼻祖冯诺伊曼,信息论的奠基人香农。 其最重要创举就在于一门理论的坚实基础,后人就可以踩在巨人的肩膀上进行再次开发,这也是从0到1的过程。 他们创造了1,而后人才可以在后面不断的扩充,100,100,10ˆN。 就拿计算机鼻祖冯诺依曼来说,他最出名的是对现代计算机基础机构的贡献,而其实他一生中发表的论文中,纯数和应数也有很多,同时他从小就有这惊人的记忆力和智力。 个体发展也类似,年少时候的根基很大程度上决定了未来的发展上限。 这也是为什么这次的阿里巴巴全球数学竞赛中出现了一半多的00后,有志不在年高,这真的不是吹的。 但是不是一个人年少时候拥有着天才般的头脑未来就一定会获得很高的科学成就?

记录个推推送设置华为角标失败的问题

背景 Flutter项目集成个推 场景 后台通过个推离线推送添加了角标数字,然后应用启动的时候需要清除,查看个推文档有一个方法设置角标数字. 具体方法: PushManager.getInstance().setHwBadgeNum(Context var1, int var2) 然而设置完以后角标不消失.然后按照华为开发者文档代码设置 Bundle extra = new Bundle(); extra.putString("package", "xxxxxx"); extra.putString("class", "yyyyyyy"); extra.putInt("badgenumber", i); context.getContentResolver().call(Uri.parse("content://com.huawei.android.launcher.settings/badge/"), "change_badge", null, extra); 依然不好使.但是自己写个新的demo,这样设置就好使.就是很纳闷了. 找了各种方案,各种试验,最终发现,调用了个推的设置方法后本地的方法设置也不好使了,把个推的方法注释,然后重启手机,再测试,本地方法好使了. 猜想 有可能跟手机型号也有关系,测试用的手机是华为mate,Android版本8.0,EMUI版本8.0,而且在flutter应用启动的时候还有报错信息,别的手机不会报错.

内存、cache和buffer的区别

Mem 行(第二行)是内存的使用情况。 Swap 行(第三行)是交换空间的使用情况。 total 列显示系统总的可用物理内存和交换空间大小。 used 列显示已经被使用的物理内存和交换空间。 free 列显示还有多少物理内存和交换空间可用使用。 shared 列显示被共享使用的物理内存大小。 buff/cache 列显示被 buffer 和 cache 使用的物理内存大小。 available 列显示还可以被应用程序使用的物理内存大小。 区别: 1、内存:是计算机的重要物理部件之一,也称内存储器和主存储器(eg:内存条),它用于暂时存放CPU中的运算数据,与硬盘等外部存储器交换的数据。它是外存与CPU进行沟通的桥梁,计算机中所有程序的运行都在内存中进行,内存性能的强弱影响计算机整体发挥的水平。只要计算机开始运行,操作系统就会把需要运算的数据从内存调到CPU中进行运算,当运算完成,CPU将结果传送出来。 2、cache:从内存读取与磁盘读取角度考虑,cache可以理解为操作系统为了更高的读取效率,更多的使用内存来缓存可能被再次访问的数据。经常被用在磁盘的i/o请求上,如果有多个进程都要访问某个文件,于是该文件便被做成cache以方便下次被访问,这样可提供系统性能。 3、buffer:是为了提高内存和硬盘(或其他I/O设备)之间的数据交换的速度而设计的。是由各种进程分配的,由进程和系统一起管理.被用在如输入队列等方面,一个简单的例子如某个进程要求有多个字段读入,在所有字段被读入完整之前,进程把先前读入的字段放在buffer中保存。 联系: 1、cache/buffer都是从内存衍生而来,cache负责高效读,buffer负责高效写;

【Android安全】Android中的应用沙箱和UID | Android多用户

Android中的应用沙箱和UID 参考: 《Android安全架构深究(美)NIKOLAY ELENKOV》 Linux 用户和用户组管理: https://www.runoob.com/linux/linux-user-manage.html Android系统多用户: https://blog.csdn.net/qq_14978113/article/details/94654401 1 Linux中的UID Linux系统是一个多用户的操作系统。任何一个物理用户,必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统。 一个用户不能访问其他用户的文件(除非有明确的授权)。 每个进程以启动它的用户UID和GID运行(例外情况是当可执行文件的SUID或SGID被设置时)。 也就是说,Linux中的UID主要是用来 区分不同物理用户和系统守护进程 的。 这里需要注意,在Linux系统中,一个UID可以被分配给某个通过shell执行命令的物理用户,也可以被分配给某个系统服务守护进程。这是因为,守护进程通常可以通过网络被访问, 每个守护进程使用专用的UID,可以降低守护进程被攻击后带来的损失。 2 Android中的UID 2.1 UID的作用 Android 最初是为智能手机设计的, 由于智能手机是私人设备, 所以不需要区分物理用户。所以 UID被用来区别应用程序。这构成了Android应用程序沙箱的基础。 在每个app的安装阶段, Android自动为每个app赋予一个专属的UID。该UID的值是恒定的。app执行时就在自身UID对应的进程内运行。 另外, 每个app都有一个只有它具有读写权限的私有数据目录。 因此, 安卓app是隔离的,包括进程级隔离(分别运行在各自的进程中) 和文件级隔离(具有私有的数据目录)。 系统服务和应用程序都在恒定的UID 下运行。例如,重启手机后,各服务/应用的UID不会发生变化。 2.2 UID与用户名 系统服务的UID从1000开始;1000是AID_SYSTEM,具有一些特殊权限应用程序的UID从10000开始;10000是AID_APP 在不支持多用户的Android中,UID对应的用户名是app_XXX,其中XXX是UID从AID_APP起的偏移。在支持多用户的Android中(Android 从4.2 开始真正支持多用户),UID对应的用户名是uY_aXXX,其中Y是当前物理用户的user ID,XXX是UID从AID_APP起的偏移。 例如,10037 UID对应的用户名可以是u0_a37,其中0是当前物理用户的user ID,37是10037-10000。Android的主用户(所谓“机主”)的user ID为0,之后添加的新用户的user ID从10开始递增。比如,新添加的第一个用户的user ID是10,第二个用户是11。 如下,添加新用户后,使用ps -A,能看到user ID为10的用户: 重启系统后,app的UID和用户名不变,如下面的com.oneplus.faceunlock: 2.3 UID的存储 app的UID会被写入/data/system/packages.list 例如对于com.oneplus.faceunlock: com.oneplus.faceunlock 10122 0 /data/user/0/com.oneplus.faceunlock default:privapp:targetSdkVersion=28 none 0 20390141 这里: 第一个字段com.oneplus.faceunlock是包名, 第二个字段10122是应用 UID ,

Redis介绍、安装、基础命令

目录 引言 一、关系数据库和非关系数据库 1.1、关系型数据库 1.2、非关系型数据库 1.3、关系型数据库与非关系型数据库区别 数据存储方式不同 扩展方式不同 对事务性的支持不同 非关系型数据库产生背景 二、Redis简介 2.1、Redis优点 2.2、Redis为什么这么快 三、Redis安装部署 修改配置文件 四、Redis命令工具 4.1、redis-cli命令行工具 4.2、redis-benchmark测试 基本的测试语法 发送并发连接和请求测试性能 测试数据包的性能 测试本机上Redis服务在进行set与lpush操作时的性能 4.3、Redis数据库常用命令 存放、获取数据 查看以()开头的键 删除数据 判断数据是否存在 重命名rename(覆盖) 对已有已有key进行重命名-renamenx(不覆盖) 查看当前数据库中key的数目-dbsize命令 type获取值类型 设置密码 删除密码 4.4、Redis多数据库常用命令 多数据库间切换 多数据库间移动数据 清楚数据库内数据 总结 引言 Redis基于内存运行的数据库,缓存是其最常应用的场景之一 Redis是非关系型数据库,是单进程模型 一、关系数据库和非关系数据库 1.1、关系型数据库 一个结构化的数据库,创建在关系模型(二维表格模型)基础上一般面向于记录主流的关系型数据库包括Oracle、MySQL、SQL Server、Microsoft Access、DB2等 以上数据库在使用的时候必须先建库建表设计表结构,然后存储数据的时候按表结构去存,如果数据于表结构不匹配就会存储失败 1.2、非关系型数据库 NoSQL(NoSQL=Not Only SQL),意思是“不仅仅是SQL”,是非关系型数据库的总称除了主流的关系型数据库外的数据库,都认为是非关系型主流的NoSQL数据库 有Redis、MongoDB、Hbase、CouhDB等 不需要预先建库建表定义数据存储表结构,每条记录可以有不同的数据类型和字段个数。(比如微信群聊天里的文字、图片、视频、音乐等) 1.3、关系型数据库与非关系型数据库区别 数据存储方式不同 关系型和非关系型数据库的主要差异是数据存储的方式。关系型数据天然就是表格式的,因此存储在数据表的行和列中。数据表可以彼此关联协作存储,也容易提取数据 与其相反,非关系型数据不适合存储在数据表的行和列中,而是大块组合在一起。非关系型数据通常存储在数据集中,就像文档、键值对或者图结构。你的数据及其特性是选择数据存储和提取方式的首要影响因素。 扩展方式不同 SQL和NoSQL数据库最大的差别可能是在扩展方式上,要支持日益增长的需求当然要扩展。要支持更多并发量,SQL数据库是纵向扩展,也就是说提高处理能力,使用速度更快的计算机,这样处理相同的数据集就更快了。因为数据存储在关系表中,操作的性能瓶颈困难涉及很多个表,这都需要通过提高计算机性能来克服,虽然SQL数据库有很大扩展空间,但最重可达会达到纵向扩展的上限 而NoSQL数据库是横向扩展的。因为非关系型数据库存储就是分布式的,NoSQL数据库的扩展可以通过给资源池添加更多普通的数据库服务器节点来分担负载。 对事务性的支持不同 如果数据操作需要搞事务性或者复杂数据数据查询需要控制执行计划,要么传统的SQQL数据库从性能和稳定性方面考虑是你的最佳选择。SQL数据库支持对事物原子性细粒度控制,并且易于回滚事务。 虽然NoSL数据库也可以使用事务操作,但稳定性方面没法和关系型数据库比较,所以它们真正闪亮的价值是在操作的扩展性和大数据量处理方面 非关系型数据库产生背景 可用于应对Web2.0纯动态网站类的三高问题 High performance----对数据库高并发读写需求High Storage----对海量数据高效存储与访问需求High Scalability &&High Availlability----对数据库高可扩展性与高可用性需求 关系型数据库和非关系型数据库都有各自的特点与应用场景,两者的紧密结合将会给Web2.

ENVI安装步骤和常见问题及解决办法(以ENVI5.3为例)

目录 一、先关闭所有的防火墙 Windows自带的关闭方法 二、安装步骤 三、安装出现的问题 资源链接: 一、先关闭所有的防火墙 Windows自带的关闭方法 打开控制面板,找到系统与安全,点击进去,找到Windowns Defesnder防火墙,点击启用或关闭Windows Defender防火墙,将自定义各类网络的设置的防火墙都关闭。 ​ ​ 关闭防火墙之后下一步(也是最重要的一步就是关闭电脑的实时扫描)打开电脑设置,找到Windows的更新与安全(win11的名称可能不同但总的就是windows安全中心所在的位置)打开windows防护中心,点击管理设置,之后打开关闭所有的按钮尤其是实时扫描。 ​ ​ ​ ​ ​​之后将所解压的安装包的文件夹添加到排除项。主要为ENVI(自己建的英文的名称文件夹)和Exells文件夹(安装路径时选择的文件夹) ​ 如果有其它杀毒软件的也和一样电脑自带的一样将实时扫描关闭。主要有以下4款: 联想电脑管家(打开防护)将防火墙关闭之后重复上述过程迈克菲将实时扫描关闭重复上述过程360关闭防火墙重复上述过程火狐安全防护关闭即可 二、安装步骤 首先找到下载(注意安装包的保存路径中过程中不能出现中文)的压缩包,右键解压之后得到ENVI5.3的安装包,之后找到*.exe文件右键以管理员身份运行,出现提取文件的界面,如下图所示。 ​ 提取完成之后点击next,其他的步骤默认。 ​ ​ ​ 在此步更改安装路径,ENVI5.3的文件夹尽量改为Exelis文件夹(以后便于找到文件和数据的位置)注ENVI高版本为Harris文件夹。下面几步默认。 ​ ​ ​ ​ ​ 下面会出现下列英文图标意思为运行许可文件,这时点击是,之后会出现许可证的选择,点击第二个从文件夹中选择,找到破解文件夹中的license,击确定之后,结束。 ​ ​ ​ ​ ​ 在跳出的文件中选择第二个稍后重启电脑(在这里可以重启也可以不重启但一般不需要。)点击结束完成安装。 ​ 在这里安装包已经安装完成,之后开始破解,找到破解文件夹打开之后将里面的IDL85复制,替换到安装路径的Exelis文件夹里面,完成替换完成安装和破解。 ​ ​ ​ 下面找到ENVI5.3,64启动一下能正常打开界面就完美。 ​ 三、安装出现的问题 licence和.dll同时被杀 解决办法重安装(目前还没办法修复。) 主要是安装时破解文件的licence的选择错误导致破解出现问题 ​ 2.dll被杀。 找到电脑或者其他杀毒软件的隔离区还原就行,最好的解决办法是关闭电脑的实时扫描。添加信任区或者排除项有一定效果。 ​ 3. 打开envi5=.3时出现Warning:JSON_PARSE:Invalid string,no closing“" 原因计算机中用户有.dll重名文件 解决办法打开计算机之后点击C盘找到用户,点击进去找到自己的计算机名将.dll文件夹删除。以后可能重启电脑之后还会存在,解决办法就是将ENVI的控制权由自己改为管理者。 右键属性,找到安全,高级设置,找到管理员点击确定。 ​ ​ ​ 资源链接: 百度云资源:

ubuntu20.04版本安装教程

ubuntu20.04版本安装教程 一:下载镜像 20.04下载地址:清华大学开源软件镜像站 | Tsinghua Open Source Mirror 官网:https://ubuntu.com/ 二:虚拟机配置 1、打开VMware,点击窗机新的虚拟机 2、自定义创建虚拟机 自定义虚拟机名称和存放位置 自定义核心数量和处理器数量 自定义内存,两边都可以调节 三:安装光盘 因为分辨率看不见按钮,通过命令行修改分辨率 按Ctrl+Alt+T,出现终端窗口,然后在终端窗口输入命令: xrandr -s 1280x800后回车(需要注意的是1280和800中间的x是字母x) 四:设置联网 查看ip ip a 确认VMvare连上网 如果没有连上网需要修改注册表 修改之前先导出备份,然后按照博主的方法修改即可 https://blog.csdn.net/jackphang/article/details/8939738?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-8939738-blog-40145297.pc_relevant_multi_platform_featuressortv2dupreplace&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-8939738-blog-40145297.pc_relevant_multi_platform_featuressortv2dupreplace&utm_relevant_index=2 配置本机的VMvare网络和虚拟机的ip在同一个网段 五:sudo apt-get update更新问题 无法发起与 cn.archive.ubuntu.com:80 (2001:67c:1562::18) 的连接 - connect (101: 网络不可达) 备份 cp /etc/apt/sources.list /etc/apt/sources.list.bak 替换 sudo sed -i 's/cn.archive.ubuntu.com/mirrors.aliyun.com/g' /etc/apt/sources.list sudo sed -i 's/security.ubuntu.com/mirrors.aliyun.com/g' /etc/apt/sources.list 替换完再执行sudo apt-get update即可 六:修改root用户密码 切入root用户 sudo -i 配置root密码 passwd root

华为ENSP之MPLS V Hub&Spoke架构

实验目的 MPLS VPN 的Hub&Spoke架构 实验过程 AS345内底层OSPF互通,使能MPLS LDP,35.45间建立MP-IBGP邻居13.24建立EBGP邻居.R5建立实例56子接口建立EBGP邻居,观察R1R2流量走向 1. R5配置配置举例 int g0/0/0 ip ad 192.168.56.5 24 int g0/0/2 ip ad 192.168.45.5 24 os en 1 ar 0 mpls mpls ldp int g0/0/1 ip ad 192.168.35.5 24 os en 1 ar 0 mpls mpls ldp int l0 ip ad 5.5.5.5 32 os en 1 ar 0 ospf 1 r 5.5.5.5 ar 0 OSPF底层互通 MPLS LSP IBGP邻居 sy bgp 345 rou 5.5.5.5

【快速幂】a的n次幂的算法

public static int QuickRow(int a, int n){ int ans = 1; if (n == 0){ return 1; } while (n>0){ if (n%2 == 0){ // n为偶数 ans *= a; n/=2; }else { // n为奇数 n--; ans *= a; } } return ans; } 时间复杂度为 O(log₂N), 与朴素的O(N)相比效率有了极大的提高。 算法思路 当n为偶数时, = ()当n为奇数时,让n - 1 变成偶数,加上 a ,再用偶数方法算 比如算 3的100次幂

Mybatis 代码生成器

MBG与Example GitHub - mybatis/generator: A code generator for MyBatis. 我们在项目中使用Mybatis的时候,针对需要操作的一张表,需要创建实体类、Mapper映射器、Mapper接口,里面又有很多的字段和方法的配置,这部分的工作是非常频繁的。而大部分时候我们对于表的基本操作都是相同的,比如根据主键查询、根据Map查询、单条插入、批量插入、根据主键删除等等等等。当我们的表很多的时候,意味着有大量的重复工作。 所以有没有一种办法,可以根据我们的表,自动生成实体类、Mapper映射器、Mapper接口、里面包含了我们需要用到的这些基本方法和SQL呢。 Mybatis也提供了一个代码生成器,叫做Mybatis Generator,建成MBG,是mybatis的一个插件。我们只需要修改一个配置文件,使用相关的jar包命令或者java代码就可以帮助我们生成实体类、映射器和接口文件。 MBG的配置文件里面有一个Example的开关,这个东西用来构造复杂的筛选条件的,换句话说就是根据我们的代码去生成where条件。 原理:在实体类中包含了两个继承关系的Criteria,用其中自动生成的方法来构建查询条件。把这个包含了Criteria的实体类作为参数传到查询参数中,在解析Mapper映射器的时候会转换成SQL条件。 添加配置文件 我们添加如下的配置文件 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN" "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd"> <generatorConfiguration> <!-- 数据库的驱动包路径 --> <classPathEntry location="C:\Users\dpb\.m2\repository\mysql\mysql- connectorjava\8.0.11\mysql-connector-java-8.0.11.jar" /> <context id="DB2Tables" targetRuntime="MyBatis3"> <!-- 去掉生成文件中的注释 --> <commentGenerator> <property name="suppressAllComments" value="true" /> </commentGenerator> <!-- 数据库链接URL、用户名、密码 --> <jdbcConnection driverClass="com.mysql.cj.jdbc.Driver" connectionURL="jdbc:mysql://localhost:3306/mybatisdb? characterEncoding=utf-8&amp;serverTimezone=UTC" userId="root" password="123456"> <property name="nullCatalogMeansCurrent" value="true" /> </jdbcConnection> <!-- <jdbcConnection driverClass="oracle.jdbc.driver.OracleDriver" connectionURL="jdbc:oracle:thin:@localhost:1521:XE" userId="car" password="car"> </jdbcConnection> --> <javaTypeResolver > <property name="

allegro如何将A板复制到B板中 (sub drawing功能的应用)

1、sub drawing功能类似其他软件(AD\PADS)复制粘贴功能,但在allegro中想从A板复制到B板,常规的复制粘贴就行不通了(在allegro中常规的复制粘贴只能在同一个PCB中使用)这就需要用到subdrawing功能了(如B板需要用A板的外框、定位孔、接插件位置等等需要将这些东西复制到B板上来,则可以通过调用subdrawing来实现) 2、先从APCB导出placement及sub-drawing,导出sub-drawing时注意Find选项处勾选要复制的东西,接着选择参考点或用命令X 0 0后进行保存即可创建subdrawing。 3、导入之前创建的placement和subdrawing 到B板中即可实现复制功能(将之前创建的subdrawing即.clp文件放到B板的文件夹中) 4、复用别人已布局和拉线后的module时,需将自己板内相同module部分删除然后在导入 此时导进来的module是带有网络属性的。

Cookie的概念及使用

目录 前言 一、什么是Cookie? 二、Cookie的作用 三、Cookie的工作原理 四、使用Cookie存储数据 1.创建Cookie对象 Cookie的常用方法 2.将Cookie对象写入响应 3.从请求中读取Cookie数据 五、Cookie禁用后sessionId如何传递 URL重写技术 六、Cookie的应用——实现自动登录 七、Cookie和Session的区别 相同点 不同点 由于一系列原因: 没有将Cookie和session融入到一块讲,这里给大家一个session的链接: (1条消息) Session的生命周期_千小半的博客-CSDN博客 前言 前面学习了session对象,服务器产生的sessionId会在响应的过程中返回到客户端保存,其实sessionId的是通过一个名为JSESSIONID的Cookie对象去保存然后发送给浏览器的。那么什么是Cookie呢?它又是如何存储数据的呢? 一、什么是Cookie? Cookie是由服务器端产生并发送给客户端浏览器的,浏览器会将发送过来的Cookie存储到某个文件中,随后再一次请求时,会自动带着存储的Cookie一并请求到服务器端(注意: Cookie虽然保存了sessionId,但它并不是JSP的内置对象,是需要实例化的)。 二、Cookie的作用 负责客户端和服务器端的文本传递,最终文本保存在浏览器。 三、Cookie的工作原理 浏览器发送第一次请求时,服务器会判断有没有Cookie,如果没有就创建Cookie,以名值对的形式将sessionId保存在Cookie中并响应,浏览器接收响应并把Cookie保存在客户端浏览器,当浏览器下一次发送请求时,request中会自动带着Cookie去发送到服务器端,服务器接收处理并再次响应。 Cookie保存的sessionId 四、使用Cookie存储数据 1.创建Cookie对象 Cookie newCookie=new Cookie(String name,String value); Cookie存储的数据类型是字符串 Cookie的常用方法 方法名称 说明void setMaxAge(int expiry) 设置Cookie的有效期,以秒为单位 : 当expiry 参数大于0时,表示Cookie的有效期 : 当expiry 参数等于0时,表示客户端删除该Cookie : 当expiry 参数小于0或者不设置时,表示Cookie关闭浏览器窗口后失效。 void setValue(String value)在Cookie创建后,对Cookie进行赋值String getName()获取Cookie的名称String getValue()获取Cookie的值int getMaxAge()获取Cookie的有效时间,以秒为单位 2.将Cookie对象写入响应 response.addCookie(newCookie); 写入响应Cookie才能被浏览器保存 3.从请求中读取Cookie数据 Cookie是使用name/value的形式保存的,它是一个数组,遍历数组时需要使用getName()方法来审查。 for (Cookie cookie : cookies) { if (cookie.

2022-04-18 了解 GeoJSON 格式

了解 GeoJSON 格式 什么是GeoJSONGeoJSON 格式FeatureCollectionfeature 参考文章 什么是GeoJSON GeoJSON是一种对各种地理数据结构进行编码的格式,基于Javascript对象表示法(JavaScript Object Notation, 简称JSON)的地理空间信息数据交换格式。GeoJSON对象可以表示几何、特征或者特征集合。GeoJSON支持下面几何类型:点、线、面、多点、多线、多面和几何集合。GeoJSON里的特征包含一个几何对象和其他属性,特征集合表示一系列特征。 格式与json相同,可以理解为以文本形式来表示不同地理空间,也就是GeoJSON所支持的几何类型(点、线、面、多点、多线、多面和几何集合)。 GeoJSON 可以转 shp格式,GeoTools提供封装方法,详情可自行查询。(GeoJSON --> .shp --> .nc) 获取GeoJSON方法: 手动绘制几何图形 中国版图范围选择器-alibaba 解析GeoJSON方法: GeoJSON Viewer & Validator GeoJSON 格式 FeatureCollection type表示当前层的类型,featureCollection(特征集合) 表示包含feature(空间有界实体)对象features表示所包含一个个feature对象 从最外层开始由type与features开始,表示当前层类型是FeatureCollection,内容在features结构体内,是一个feature集合;而features包含了一个个feature。 type能代表九种不同类型: 七种几何类型Point”、“ MultiPoint”、“ LineString”、“ MultiLineString”、“ Polygon”、“ MultiPolygon”和“ GeometryCollection”两种 “Feature”、“ FeatureCollection” feature type的值feature表示当前层是一个几何图形properties是当前层的信息,比如name = 上城区geometry的值 参考文章 GeoJson规范(RFC 7946)全文翻译 GeoJSON详解(带图) GeoJSON-百度百科 国外shp格式案例下载

win 10家庭版升专业版报错:0xC004F069在运行Microsoft Windows非核心版本的计算机上……

一、背景 在系统 设置>更新和安全 里更改产品秘钥进行升级时,报错: 无法在此设备上激活windows10,因为没有有效数字许可证或产品密钥。 后尝试 cmd 命令行 slmgr.vbs 方式安装证书,报错: 二、原因 获取的秘钥为专业版的激活秘钥,当系统为专业版,未激活状态时,可用该秘钥进行激活。若系统为家庭版,需要先升级到专业版,再用秘钥进行激活。 三、解决方式 1)断开网络。 2)转到设置>系统>关于>更改产品密钥或升级。 3)输入Windows 10 Pro通用的专业密钥。(这是不会激活的合法密钥,家庭升级专业版用) VK7JG-NPHTM-C97JM-9MPGT-3V66T 4)按开始,让它升级到10专业版。 5)完成该过程后,再次转到更改产品密钥,然后输入您的专业版许可证密钥。 6)联通网络,Windows应该会立即激活。

CSS中的BFC是什么?

BFC就是符合一些特性的HTML标签 1、什么是BFC? BFC 块级格式化上下文 指一个独立的渲染区域,或者说是一个隔离的独立容器,可以理解为一个独立的封闭空间。无论如何不会影响到它的外面。 2、形成BFC的条件 浮动元素,float除none以外的值;绝对定位元素,position(absolute,fixed)display为以下之一的值:inline-block,table-cell,table-caption、flexoverflow除了visible以外的值(hidden,auto,scroll)body根元素 3、BFC的特性 内部的Box会在垂直方向上一个接一个的放置。垂直方向上的距离由margin决定bfc的区域不会与float的元素区域重叠计算bfc的高度时,浮动元素也参与计算bfc就是页面上的一个独立容器,容器里面的子元素不会影响外面元素。 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Title</title> <style> .main { background-color: #ddd; /*overflow: hidden;*/ } .main img{ width: 300px; /*float: left;*/ } .main h2{ /*overflow: hidden;*/ } </style> </head> <body> <h1>Css中的BFC,是什么?</h1> <div class="main"> <img src="https://www.baidu.com/img/PCtm_d9c8750bed0b3c7d089fa7d55720d6cf.png" alt=""> <!-- <h2>我是小方同学,正在学习前端</h2>--> </div> </body> </html> 给图片设置浮动:图片脱离了文档流 给父元素添加:overflow:hidden

简单使用示波器485通讯抓波形

串口通讯经常要用到示波器抓波形分析数据,很多人都熟悉232通讯抓波形,但是不清楚要怎么给485抓包,其实很简单 首先先准备一个120欧和一个33欧的电阻(没有阻值一样的可以使用阻值差不多的) 然后按下图接入到485通讯线上 然后将示波器的触发方式改为欠压 最后将示波器的两个探头分别接到两根485总线上,适当调节横纵幅值就可以得到想要的波形了 如图,是不是很简单呢 

在 SpringBoot 中使用 ThreadPoolTaskScheduler 实现定时任务

项目工程地址 简介 之前看道同事项目上面使用过 ThreadPoolTaskScheduler 作为定时任务,就简单的看了下没有整理文档,现在就深入研究下,整理下知识点。 ThreadPoolTaskScheduler 这个类是在 org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler 这个包中。 ThreadPoolTaskScheduler 是 spring taskSchedule 接口的实现,可以用来做定时任务使用。 ThreadPoolTaskScheduler 四个版本定时任务方法: schedule(Runnable task, Date stateTime),在指定时间执行一次定时任务 schedule(Runnable task, Trigger trigger),动态创建指定表达式cron的定时任务,threadPoolTaskScheduler.schedule(() -> {}, triggerContext -> newCronTrigger("").nextExecutionTime(triggerContext)); scheduleAtFixedRate,指定间隔时间执行一次任务,间隔时间为前一次执行开始到下次任务开始时间 scheduleWithFixedDelay,指定间隔时间执行一次任务,间隔时间为前一次任务完成到下一次开始时间 具体实现 说明 我们需要向 spring 容器中注入一个 ThreadPoolTaskScheduler 的 bean,用于调度定时任务,以及需要增加一个缓存用于存入当前执行任务的 scheduleFuture 对象,将 ScheduledFuture 对象缓存的原因是在于,为了方面于停止对应的任务。 我们点击 ThreadPoolTaskScheduler 类,看具体的源码的时候会发现有这么一段断码: 这里是表示初始化的线程池的大小为 1,也就是说线程调度器设置只有一个线程容量,如果存在多个任务被触发时,会等第一个任务执行完毕才会执行下一个任务。所以这里还是需要自己去定义线程的大小,避免因为默认的线程池导致出现奇奇怪怪的问题。 第一步 创建 ThreadPoolTaskScheduler Bean 以及 用于存放定时任务的 map @Configuration public class ScheduleConfig { // 用来存入线程执行情况, 方便于停止定时任务时使用 public static ConcurrentHashMap<String, ScheduledFuture> cache= new ConcurrentHashMap<String, ScheduledFuture>(); @Bean public ThreadPoolTaskScheduler threadPoolTaskScheduler(){ ThreadPoolTaskScheduler threadPoolTaskScheduler = new ThreadPoolTaskScheduler(); threadPoolTaskScheduler.

计算机学习心得

先看个小故事。 有一天我问我媳妇:你觉得操作系统复杂么? 我媳妇想都没想就来了一句:复杂! 我又问:为什么觉得操作系统复杂?或者操作系统复杂在哪里? 我媳妇眼睛转了两圈之后说:不知道! 我说:操作系统其实不复杂! 然后,我兴高采烈地给我媳妇讲起来了“搞技术也是有境界的,也讲究看山就是山,看山不是山,看山还是山”。 再然后,我看到了鄙视的眼神。 最后,故事结束。 PS:我媳妇本科是计算机专业,还正儿八经地干过几年软件测试,虽然这几年转行了,但也算是科班出身。 我大约是11年左右开始接触大数据领域的,当时带我入门的是一位来自百度的导师,除了经常自嘲自己是农民工,就念叨他那句话:搞技术,就得看源码。那个时候自己还太年轻,也没有问问具体怎么个看法,但就知道看源码是对的。 那会儿比较推崇谷歌的三驾马车,开源社区的就是 Hadoop 和 HBase,实习生有的是时间,打开官网把代码下载下来,然后就一个字:看! 最开始的时候确实不知道如何下手,我就在网上到处搜索源码分析之类的文章,稀里糊涂地看了一大堆之后,慢慢地还真摸到了路子。现在回想起在寝室边刷剧边看代码的日子,真爽啊! 代码看进去之后,马上就有一个很强烈的冲击: Java 原来是这样用的啊! Java 还可以这样用的啊! 反射、动态代理、多线程、IO,…,这些费劲巴拉学会的东西,真的是有用的! 真正体会到了,不是编程语言不行,而是我不行! 后来我琢磨出了一个自己的 What - How - Why - Create 理论: What:这个东西是干什么? How:这个东西是怎么实现的? Why:这个东西为什么这么实现? Create: 我能不能自己写一个新的? 大概过程就是从文件研究到字节,再从字节研究到位,把 Hadoop 和 HBase 的大部分代码翻了个遍,明显能感觉到自己的技术能力快速提升。 进入工作岗位之后,因为对源码熟悉,明白实现原理: 系统性能有瓶颈的时候,可以调整参数; 系统需要扩展功能的时候,可以写插件; 系统需要更换模块的时候,可以写模块; 整个系统不行了,带着团队,我们自己写一个! 现在回过头来想,看源码就是少林和尚挑水劈柴,日复一日地重复,看似枯燥无味,慢慢地就打下了基本功。 一开始的时候,Hadoop 就是 Hadoop;到看 HBase 的时候,发现这个地方和 Hadoop 差不多嘛;再看其它的时候,这不也是那么回事儿嘛。 嗯,搞技术真的是讲境界的。

基于opencv的c++图像处理(傅里叶变换)

前言 基于opencv的c++接口,实现傅里叶变换。 相关的opencv接口解析 CV_EXPORTS_W int getOptimalDFTSize(int vecsize); 函数 cv::getOptimalDFTSize 返回大于或等于 vecsize 的最小数 N,以便可以有效地处理大小为 N 的向量的 DFT。在当前的实现中 N= 2 p * 3 q * 5 r 对于某个整数 p, q, r。 如果 vecsize 太大(非常接近 INT_MAX ),该函数将返回一个负数。 虽然该函数不能直接用于估计 DCT 变换的最佳向量大小(因为当前的 DCT 实现只支持偶数大小的向量),但它可以很容易地处理为 getOptimalDFTSize((vecsize+1)/2)*2。 @param vecsize 向量大小。 CV_EXPORTS_W void copyMakeBorder(InputArray src, OutputArray dst, int top, int bottom, int left, int right, int borderType, const Scalar& value = Scalar() ); 该函数将源图像复制到目标图像的中间。 复制的源图像左侧、右侧、上方和下方的区域将填充外插像素。 这不是基于它的过滤函数所做的(它们即时推断像素),而是其他更复杂的函数(包括您自己的函数)可以用来简化图像边界处理。 @param src 源图像。

深度总结:软件设计七大原则

软件设计七大原则 软件设计原则是设计模式的基石。目的只有一个,降低对象之间的耦合,增加程序的可复用性、可扩展性、可维护性。 开闭原则 OCP 定义:软件实体对扩展开放,对修改关闭。 对扩展开发,意味着有新的需求或变化时,可以对现有代码进行扩展,以适应新的情况。 对修改关闭,意味着类一旦设计完成,就可以独立的工作,而不要对其进行任何的修改。 在面向对象设计中,我们通常通过继承和多态来实现OCP,即封装不变部分。 比如需求要实现2种状态的业务。 如果用if else来判断,那么后面加第三种状态,就还需要在此接口上增加else逻辑,不符合开闭原则。 用策略类实现,则定义策略接口,策略A和策略B为具体实现类,分别对应两种状态。假如下一次需求要实现第三种状态,那么直接定义一个StrategyC实现类就可满足。原有代码不变,符合开闭原则。 详情可点击:策略模式文章 里氏替换原则 LSP 定义:程序中的父类型都可以正确的被子类型替换。 程序中的对象可以在不改变程序正确性的前提下被它的子类所替换,即子类可以替换任何基类能够出现的地方,并且经过替换后,代码还能正确工作。 根据LSP的定义,如果在程序中出现使用instanceof、强制类型转换或者函数覆盖,很可能意味着是对LSP的破坏。 假设定义一个抽象禽类,有一个飞翔方法fly(), 我们就可以自由的继承禽类衍生出各种鸟儿,并调用其飞翔方法。如果鸵鸟加入禽类行列,继承禽类,但不会飞,那么飞翔方法fly()就显得多余。而且在所有禽类出现的地方,无法用鸵鸟替换(此时不满足正确业务逻辑)。违反了里氏替换原则。 经过反思,是设计问题,禽类和飞翔无必然联系,所以禽类不应该定义飞翔方法fly(),把禽类飞翔方法fly()抽离出去单独定义飞翔接口Flyable。 对于有飞翔能力的鸟儿继承禽类并实现飞翔接口。鸵鸟继承禽类,但不实现飞翔接口,是否是鸟儿取决于是否继承自禽类,能不能飞取决于是否实现飞翔接口。所有禽类出现的地方都可以用子类进行替换,所有飞翔接口出现的地方都可以被其替换为实现。 依赖倒置原则 DIP 定义:模块之间交互应该依赖抽象,而非实现。 DIP要求高层模块不应该依赖于底层模块,二者都应该依赖于抽象。抽象不应该依赖细节,细节应该依赖抽象。 比如某个人喂养小动物,如果依赖了具体的实现,则每新增一个动物,需要在Person内加一个对应的方法。违背了开闭原则,也不符合依赖倒置原则。 重新修改后,如下。新增一个Birds抽象类,具体的动物继承自父类Birds,Person中的方法参数依赖于抽象,而不是具体的实现。符合依赖倒置原则。 单一职责原则 SRP 定义:对任何类的修改只能有一个原因。换句话说,一个类只应该负责一项职责。 SRP要求每个软件模块职责要单一,衡量标准是模块是否只有一个被修改的原因。职责越单一,被修改的原因就越少,模块的内聚性就越高,被复用的可能性就越大,也更容易被理解。 举例员工类 Employee,开发工作变了,需要修改Employee类,测试工作变了需要修改Employee类,不符合单一职责原则,类的复杂性也高。 职责多,引起此类变化的原因也多。后续变更的风险就大。 后续需求变更,会造成职责的混乱,类结构的不稳定。 改造后,类的职责单一。开发者的职责就是“写代码”,那么对其进行的修改只有与“写代码”相关的一个原因(画类图也是为了指导代码落地),这样才能确保类职责的单一性原则。 同时,类与类之间虽有着明确的职责划分,但又一起合作完成任务,它们保持着一种“对立且统一”的辩证关系。 以责任链模式为例,每个处理者类职责清晰,只处理与自己职责相关的业务。 以员工类为例,拆分后,各个员工完成相应的职责,共同保障项目上线。 这种清晰的职责范围划分就是单一职责原则的最佳实践。符合单一职责原则的设计能使类具备高内聚性,让单个模块变得简单易懂,如此才能增强代码的可读性和可复用性。并提高系统的易维护性和易测试性。 上面的例子是类职责单一,那么微服务划分也同理,采用单一职责原则,每个服务负责一块业务。同一类业务的变更落在单个服务内变更。 接口隔离原则 ISP 定义:客户端对类的依赖基于最小接口,而不依赖不需要的接口。 接口隔离原则认为不能强迫用户去依赖那些他们不使用的接口。换句话说,使用多个专门的接口比使用单一的总接口要好。做接口拆分时,也要尽量满足单一职责原则。将外部依赖减到最少,降低模块间的耦合。 比如类A只需要使用方法1、方法3,类B只需要使用方法2、方法4,但在源代码层次上与所有方法形成依赖关系。这种依赖意味着我们对接口I的方法2修改,即使不会影响A所依赖的方法1、方法3的功能,也会导致它需要重新部署和编译。 改造后,类A不需要用到方法2、方法4,就可以选择不依赖它们。代码更加清晰,接口职责更加明确。 迪米特法则 LOD 定义:一个类对于其它类知道的越少越好。 迪米特法则也被称为最少知识原则,它提出一个模块对其他模块应该知之甚少,或者说模块之间应该彼此保持陌生,甚至意识不到对方的存在,以此最小化、简单化模块间的通信,并达到松耦合的目的。 反之,模块之间若存在过多的关联,那么一个很小的变动则可能会引发蝴蝶效应般的连锁反应,最终会波及大范围的系统变动。我们说,缺乏良好封装性的系统模块是违反迪米特法则的,牵一发动全身的设计使系统的扩展与维护变的举步维艰。 门面模式和中介者模式是迪米特法则极好的范例。 Tomcat中 RequestFacade类就使用了外观模式。RequestFacade是对Request类封装,屏蔽内部属性和方法,避免暴露。 合成复用原则 CRP 定义:优先使用合成/聚合,而不是类继承。 比如对象的继承关系是在编译时就定义好了,所以无法在运行时改变从父类继承的实现。子类的实现与它的父类有非常紧密的依赖关系,以至于父类实现中的任何变化必然会导致子类发生变化。当你需要复用子类时,如果继承下来的实现不适合解决新的问题,则父类必须重写或被其它更适合的类替换。这种依赖关系限制了灵活性并最终限制了复用性。 合成(组合)和聚合都是关联的特殊种类。 聚合表示一种弱的拥有关系,体现的是A对象可以包含B对象,但B对象不是A对象的一部分; 合成则是一种强大的“拥有”关系,体现了严格的部分和整体的关系,部分和整体的生命周期一样。 合成/聚合复用原则好处:优先使用对象的合成/聚合将有助于你保持每个类被封装,并被集中在单个任务上。这样类和类继承层次会保持较小规模。 举例:手机软件划分可分为QQ、微信等,按品牌划分可分为华为、小米等。如果同时考虑这两种分类,其组合就很多。往下继续扩展软件、手机品牌,都会新增许多子类。违背了开闭原则,也限制了复用性。 用聚合关系实现的类图:后面新增软件,手机品牌类不用变更代码。继承的层次也少了。 参考资料 刘韬:《秒懂设计模式》 张建飞:《代码精进之路:从码农到工匠》

基于串级PID的箱体自动恒温控制系统

目 录 引言 1 1 系统整体框架 2 1.1系统设计要求 2 1.2系统设计思路 2 1.3 驱动器方案介绍 3 1.3.1 PWM脉冲宽度调制原理介绍 3 1.3.2 PID自动控制算法介绍 3 1.3.3 Buck降压斩波电路介绍 5 1.3.4电流采样原理介绍 6 1.4 温度传感器介绍 8 1.5 本章小结 9 2 硬件设计 10 2.1 电源电路设计 10 2.1.1开关电源的工作特点 10 2.1.2系统电源电路 10 2.2 中央控制器电路 12 2.3 恒流源电路设计 13 2.3.1 PWM输出电路 14 2.3.2电流采样电路 15 2.3.3 Buck同步降压恒流源电路 16 2.4 传感器电路设计 17 2.4.1温度检测电路 17 2.5 按键输入电路设计 17 2.6 显示电路设计 18 2.7 本章小结 18

MyBatis注解——多对多

1、数据库建表语句 CREATE TABLE `user` ( `id` int(11) DEFAULT NULL, `username` varchar(50) DEFAULT NULL ); CREATE TABLE `role` ( `id` int(11) DEFAULT NULL, `rolename` varchar(50) DEFAULT NULL, `roledesc` varchar(50) DEFAULT NULL ); CREATE TABLE `sys_user_role` ( `id` int(11) DEFAULT NULL, `userid` int(11) DEFAULT NULL, `roleid` int(11) DEFAULT NULL ); 2、实体 public class UserInfo { private Integer id; private String username; private List<Role> roleList; public Integer getId() { return id; } public void setId(Integer id) { this.

QT_7(菜单栏、工具栏、状态栏、资源文件的添加)

菜单栏和工具栏 在此处进行代码演示(相关理论在代码处有注释): MainWindow.cpp #include "mainwindow.h" #include<QMenuBar> #include<QToolBar> #include<QPushButton> MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) { resize(600,400); //创建菜单栏 //菜单栏只有一个 QMenuBar *bar=menuBar(); //将菜单栏放入窗口中 setMenuBar(bar); //创建菜单,等号左半部分不要也行,就是它会产生返回值 QMenu *fileMenu= bar->addMenu("文件"); QMenu *file= bar->addMenu("编辑"); //创建菜单项,等号左半部分可以不要,为了下面工具栏的演示才加上的 QAction * newAction=fileMenu->addAction("新建"); fileMenu->addAction("编辑啥啊"); //添加分隔线 fileMenu->addSeparator(); //工具栏;工具栏可以有多个 QToolBar *toolbar=new QToolBar(this); addToolBar(Qt::LeftToolBarArea,toolbar); //后期设置,只允许左右停靠 toolbar->setAllowedAreas(Qt::LeftToolBarArea|Qt::RightToolBarArea); //设置浮动 toolbar->setFloatable(false); //设置移动(总开关,如果不能移动的话,那浮动也会失效) toolbar->setMovable(false); //工具栏中设置内容 //工具栏处的新建和菜单项中的新建功能是是共用的 toolbar->addAction(newAction); //添加分割线 toolbar->addSeparator(); //工具栏中添加一些控件 QPushButton *btn=new QPushButton("A",this); toolbar->addWidget(btn); } MainWindow::~MainWindow() { } 注: 在心间项目的时候要选择一个空文件夹,然后再选择父类的时候选择MainWindow那个,不然使用menubar会报错。 状态栏 在此处进行代码演示(相关理论在代码处有注释): MainWindow.cpp #include "mainwindow.h" #include<QMenuBar> #include<QToolBar> #include<QPushButton> #include<QLabel> #include<QStatusBar> #include<QDockWidget> #include<QTextEdit> MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) { resize(600,400); //创建菜单栏 //菜单栏只有一个 QMenuBar *bar=menuBar(); //将菜单栏放入窗口中 setMenuBar(bar); //创建菜单,等号左半部分不要也行,就是它会产生返回值 QMenu *fileMenu= bar->addMenu("

Python中的Counter类

在很多场景中经常会用到统计计数的需求,比如在实现 kNN 算法时统计 k 个标签值的个数,进而找出标签个数最多的标签值作为最终 kNN 算法的预测结果。Python内建的 collections 集合模块中的 Counter 类能够简洁、高效的实现统计计数。 Counter 是 dict 字典的子类,Counter 拥有类似字典的 key 键和 value 值,只不过 Counter 中的键为待计数的元素,而 value 值为对应元素出现的次数 count,为了方便介绍统一使用元素和 count 计数来表示。虽然 Counter 中的 count 表示的是计数,但是 Counter 允许 count 的值为 0 或者负值。 1. 实例化 Counter 类 如果要使用 Counter,必须要进行实例化,在实例化的同时可以为构造函数传入参数来指定不同类型的元素来源。 from collections import Counter # 实例化元素为空的 Counter 对象 a = Counter() # 从可迭代对象中实例化 Counter 对象 b = Counter('chenkc') # 从 mapping 中实例化 Counter 对象 c = Counter({'a':1, 'b':2, 'c':3}) # 从关键词参数中实例化 Counter 对象 d = Counter(a = 1, b = 2, c = 3) 实例化元素为空的 Counter 对象,之后可以通过为字典添加元素的方式为 Counter 对象添加元素。 from collections import Counter # 实例化元素为空的 Counter a = Counter() # 为 Counter 添加元素以及对应的 count 计数 a['a'] = 1 a['b'] = 2 a['c'] = 3 >>> print(a) Counter({'c': 3, 'b': 2, 'a': 1}) 从 string(字符为list列表的元素)、list 和 tuple 这些可迭代对象中获取元素。 from collections import Counter # 从可迭代对象中实例化 Counter b = Counter("

python修饰函数用法,结合mmcv中的Registry类说明

class Registry: def __init__(self, name, build_func=None, parent=None, scope=None): .... def register_module(self, name=None, force=False, module): .... def _register(module): .... return module return _register 当作为函数修饰符使用时 @Registry.register_module() #@表示作为修饰函数使用,因此调用函数内部的函数_register class Dataset(): .... 作用:#即将Dataset作为参数传入egistry.register_module()中的_register函数,定义注册操作。如何执行注册操作结合该博客看https://blog.csdn.net/qq_41368074/article/details/127077631

第五章 学习心理

第五章 学习心理 01 学习动机 02 学习迁移 03 学习策略 04 学习方式 05 问题解决 01 学习动机 一、学习动机概述 二、学习动机的分类 三、学习动机与效率的关系 四、学习动机理论 五、学习动机的培养与激发 一、学习动机概述 (一)学习动机的结构 了解 学习需要 + 学习期待 (二)学习动机的功能 单选 二、学习动机的分类 (一)学习动机的一般分类 单选 (二)奥苏贝尔成就动机的分类 单选 三、学习动机与效率的关系 单选、简答 【例】简述学习动机与学习效率之间的关系? 四、学习动机理论 单选 总结(学习动机) 02 学习迁移 一、学习迁移的定义 二、迁移的种类 三、学习的迁移理论 四、影响迁移的主要因素 五、促进学习迁移的教学 一、学习迁移的定义 单选 学习迁移也称训练迁移,是指一种学习对另一种学习的影响,或习得的经验对完成其他活动的影响,如通常所说的“举一反三”“触类旁通”。 二、迁移的种类 单选 三、学习的迁移理论 四、影响迁移的因素 【2018上简答】 五、促进学习迁移的教学 简答 总结(学习迁移) 03 学习策略 一、学习策略概述 二、学习策略的分类 三、学习策略训练的原则 二、学习策略的分类 单选 三、学习策略训练的原则 了解 总结(学习策略) 04 学习方式 一、知识的学习

用Python做一个无限弹窗

首先,我们需要对程序进行分析: 1,导入GUI库 2,死循环 3,跳出弹窗 理清了思路,我们一起来愉快地写代码吧! 第一步:导入GUI库 相信很多人都会自己导入吧,小编这里不在多噜嗦了,直接上代码: import easygui #导入GUI库 这里python版本是3.7.4,所以用easygui库,其余不都讲了。 第二部分:死循环,代码: while True: #代码块 第三部分:弹窗,这里跳多个GUI,代码如下: easygui.msgbox('Windows安全中心发现系统问题!') easygui.choicebox('是否为您修复?',choices=['是','否']) easygui.msgbox('正在为您修复......') easygui.msgbox('修复时发生未知错误!') easygui.choicebox('是否为您备份?',choices=['是','否']) easygui.msgbox('正在为您备份......') easygui.msgbox('备份时发生未知错误!') easygui.msgbox('Windows正在为您删除文件并处理错误信息......') easygui.msgbox('Windows删除成功!') easygui.msgbox('哈哈!骗你的!') 因为,我们需要循环这段代码,所以因加入缩进,更改后代码如下: while True: easygui.msgbox('Windows安全中心发现系统问题!') easygui.choicebox('是否为您修复?',choices=['是','否']) easygui.msgbox('正在为您修复......') easygui.msgbox('修复时发生未知错误!') easygui.choicebox('是否为您备份?',choices=['是','否']) easygui.msgbox('正在为您备份......') easygui.msgbox('备份时发生未知错误!') easygui.msgbox('Windows正在为您删除文件并处理错误信息......') easygui.msgbox('Windows删除成功!') easygui.msgbox('哈哈!骗你的!') 最后进入代码清单(注意:import easygui这行代码不要加入死循环!): import easygui while True: easygui.msgbox('Windows安全中心发现系统问题!') easygui.choicebox('是否为您修复?',choices=['是','否']) easygui.msgbox('正在为您修复......') easygui.msgbox('修复时发生未知错误!') easygui.choicebox('是否为您备份?',choices=['是','否']) easygui.msgbox('正在为您备份......') easygui.msgbox('备份时发生未知错误!') easygui.msgbox('Windows正在为您删除文件并处理错误信息......') easygui.msgbox('Windows删除成功!') easygui.msgbox('哈哈!骗你的!') 希望以上内容对您有所帮助,再见!

ONNX export failure: No module named ‘onnx‘

这个问题我看了半小时,都没找到答案。算了,先说问题,我的yolo可以成功把torchscript形式的模型转换,但是onnx不行。 报错如下: 然后我试着用 pip uninstall onnx 去卸载这个版本,换新的,当时居然出现这个!!!! 说我没有,我当时感到不妙。马上 pip install onnx 但是出现了如下错误:人都麻了!!! 好了,那怎么解决呢,如下就行: pip install onnx==1.7.0 居然是指定版本号,万万没想到。但是这个问题可能是直接pip的版本太高了,所以不行,嗯,只能这样解释。后续的模型也转换成功了。 如果你对模型部署有兴趣,可以看我的另外文章

MyBatis最佳实践

动态SQL语句 动态SQL是Mybatis的强大特性之一。如果使用过JDBC或其他类似的框架,就应该理解根据不同条件拼接SQL语句有多痛苦,例如拼接时要确保不能添加必要的空格,还要注意去掉列表最后一个列名的逗号。利用动态SQL,可以彻底摆脱这种痛苦。 使用动态SQL并非一件易事,但借助可用于任何SQL映射语句中的强大的动态SQL语言,Mybatis显著地提升了这一特性的易用性。 如果你之前用过 JSTL 或任何基于类 XML 语言的文本处理器,你对动态 SQL 元素可能会感觉似曾相 识。在 MyBatis 之前的版本中,需要花时间了解大量的元素。借助功能强大的基于 OGNL 的表达式, MyBatis 3 替换了之前的大部分元素,大大精简了元素种类,现在要学习的元素种类比原来的一半还要 少。 if choose (when, otherwise) trim (where, set) foreach if 需要判断的时候,条件写在test中 <select id="selectListIf" parameterType="user" resultMap="BaseResultMap" > select <include refid="baseSQL"></include> from t_user <where> <if test="id != null"> and id = #{id} </if> <if test="userName != null"> and user_name = #{userName} </if> </where> </select> choose 需要选择一个条件的时候 <!-- choose 的使用 --> <select id="selectListChoose" parameterType="user" resultMap="

ffmpeg播放器(二)音频解码与播放

音频解码和播放的前面准备工作和视频的格式差不多,创建两个线程分别解码和播放,这里统一只放代码了。 void AudioChannel::play() { //设置为播放状态 packets.setWork(1); frames.setWork(1); isPlaying = 1; //1 、解码 pthread_create(&pid_audio_decode, 0, audio_decode, this); //2、 播放 pthread_create(&pid_audio_play, 0, audio_play, this); } //声明并且实现 void *audio_decode(void *args) { AudioChannel *audioChannel = static_cast<AudioChannel *>(args); audioChannel->decode(); return 0; } void *audio_play(void *args) { AudioChannel *audioChannel = static_cast<AudioChannel *>(args); audioChannel->_play(); return 0; } 解码和视频完全一样: void AudioChannel::decode() { AVPacket *packet = 0; while (isPlaying) { //取出一个数据包 int ret = packets.pop(packet); if (!isPlaying) { break; } //取出失败 if (!

记录一次破解某加固APP的修改纪录

准备工具: MT管理器;模拟器;APP原包;balckdex32;apktool(需要java环境) 步骤: 1、模拟器安装APP原包。用mt管理器获取真实启动主activity名 依次点击com、wrapper.proxyapplication、wrapperproxyapplication 获取className如(com.xyz) 这步很重要。如果这段没有获取到怎么修改都会恢复到加固的数据。 2、apktool反编译APP原包, 在apktool目录cmd下执行 apktool d target.apk(这是原包的包名,要求包跟apktool.bat在一个目录)。成功完成后会在apktool目录下生成对应包名的文件夹如(com.abc) 3、balckdex32对程序脱壳 4、修改apktool下的com.abc下的AndroidManifest.xml里的MyWrapperProxyApplication修改成com.xyz <application android:allowBackup="false" android:appComponentFactory="androidx.core.app.CoreComponentFactory" android:extractNativeLibs="false" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:largeHeap="true" android:name="MyWrapperProxyApplication" android:supportsRtl="true" android:theme="@style/AppTheme" android:usesCleartextTraffic="true"> 5、mt管理器修改脱壳后的dex(路径在脱壳后有提示)。不详细记录了。根据需要改成什么样自己摸索代码。 6、将修改后的dex复制到com.abc 删除com.abc里原有的dex以及smali文件夹(这些是apktool反编译出来的) 7、重新打包成未加固的apk(生成文件在com.abc下的dist目录里) apktool b com.abc 8、mt管理器将新生成的apk签名、安装。

curl命令上传文件

curl -XPUT -H "Content-Type:video/mp4" -H "Date:Mon, 27 Sep 2022 14:00:00 GMT" -H "其他请求头" -v "http://要上传的地址/xxx.mp4" -T /home/xxx.mp4

MICCAI 2022 | UNeXt:第一个基于卷积和MLP的快速医学图像分割网络

点击下方卡片,关注“CVer”公众号 AI/CV重磅干货,第一时间送达 作者:Wildeur | 已授权转载(源:知乎)编辑:CVer https://zhuanlan.zhihu.com/p/491798644 UNeXt: MLP-based Rapid Medical Image Segmentation Network 论文:https://arxiv.org/abs/2203.04967 代码(基于PyTorch,已开源): https://github.com/jeya-maria-jose/UNeXt-pytorch 1. 摘要 UNet及其最新的扩展如TransUNet是近年来领先的医学图像分割方法。然而,由于这些网络参数多、计算复杂、使用速度慢,因此不能有效地用于即时应用中的快速图像分割。为此,我们提出了一种基于卷积多层感知器(MLP)的图像分割网络unext。我们设计了一种有效的UNeXt方法,即在前期采用卷积阶段和在后期采用MLP阶段。我们提出了一个标记化的MLP块,在该块中,我们有效地标记和投射卷积特征,并使用MLP来建模表示。 为了进一步提高性能,我们建议在输入mlp时shift输入的channel,以便专注于学习局部依赖性。在潜在空间中使用标记化的mlp减少了参数的数量和计算复杂度,同时能够产生更好的表示,以帮助分割。该网络还包括各级编码器和解码器之间的跳跃连接。测试结果表明,与目前最先进的医学图像分割架构相比,UNeXt的参数数量减少了72x,计算复杂度降低了68x,推理速度提高了10x,同时也获得了更好的分割性能。 2. 网络结构 2.1 网络设计: UNeXt是一个编码器-解码器体系结构,有两个阶段: 1) 卷积阶段 2) tokenized MLP阶段。 输入图像通过编码器,其中前3个块是卷积,下2个是tokenized MLP块。解码器有2个tokenized MLP块,后面跟着3个卷积块。每个编码器块减少特征分辨率2倍,每个解码器块增加特征分辨率2。跳跃连接也被应用在了编码器和解码器之间 作者减少了每个stage的通道数。 每个stage的通道数,对比标准的Unet: UNeXt:32 64 128 160 256 UNet:64 128 256 512 1024 在这里面就减少了很多的参数量 2.2 卷积阶段 有三个conv block,每个block都有一个卷积层(传统Unet是两个)、批量归一化层和ReLU激活。我们使用的内核大小为3×3, stride为1,padding为1。编码器的conv块使用带有池窗口2×2的max-pooling层,而解码器的conv块使用双线性插值层对特征图进行上采样。我们使用双线性插值而不是转置卷积,因为转置卷积基本上是可学习的上采样,会导致产生更多可学习的参数 2.3 Shifted MLP 在shifted MLP中,在tokenize之前,我们首先移动conv features通道的轴线。这有助于MLP只关注conv特征的某些位置,从而诱导块的位置。这里的直觉与Swin transformer类似,在swin中引入基于窗口的注意,以向完全全局的模型添加更多的局域性。由于Tokenized MLP块有2个mlp,我们在一个块中跨越宽度移动特征,在另一个块中跨越高度移动特征,就像轴向注意力中一样。我们对这些特征做了h个划分,并根据指定的轴通过j个位置移动它们。这有助于我们创建随机窗口,引入沿轴线的局部性。 Shift操作 图中灰色是特征块的位置,白色是移动之后的padding。 2.4 Tokenized MLP阶段 image-20220402001733482 在Tokenized MLP块中,我们首先shift features并将它们投射到token中。为了进行token化,我们首先使用3x3conv把特征投射到E维,其中E是embadding维度(token的数量),它是一个超参数。然后我们将这些token传递给一个shifted MLP(跨越width)。接下来,特征通过 DW-Conv传递。然后我们使用GELU激活层。然后,我们通过另一个shifted MLP(跨越height)传递特征,该mlp把特征的尺寸从H转换为了O。我们在这里使用一个残差连接,并将原始标记添加为残差。然后我们利用layer norm(LN),并将输出特征传递到下一个块。LN比BN更可取,因为它更有意义的是沿着token进行规范化,而不是在Tokenized MLP块的整个批处理中进行规范化。

基于STM32与ESP8266的太空人WiFi天气时钟(代码开源)

前言:本文为手把手教学ESP8266著名开源项目——太空人WiFi天气时钟,不同的是本次项目采用的是STM32作为MCU。两者开发过程中有因为各自芯片的特点(时钟频率,内存大小等),导致开发程序大不相同,很多地方需要特殊设计一下。而作者使用STM32开发的原因很简单,ESP8266虽然计算能力等方面优于STM32F1xx,但是弊端也很明显。其所具备的引脚和外设太少,扩展性一般(ESP32算是二者优点兼备)。加之网上ESP8266的太空人WiFi天气时钟已经开源的很完善了,所以尝试用STM32实现一下,也方便后续利用STM32拓展开发。(文末有代码开源!) 实验硬件:STM32F103ZET6;7针1.3寸TFT-LCD(240×240);ESP8266 硬件实物图: 效果图: 引脚连接: LCD显示引脚: VCC --> 3.3V GND --> GND CLK --> PA5 DIN --> PA7 RES --> PB0 DC --> PB1 CS --> PA4 ESP8266模块引脚: VCC --> 3.3V GND --> GND RX--> PB10 TX --> PB11 RST --> PB9 EN --> PB7 一、ESP8266简介与使用 1.1 ESP8266简介 ESP8266是一款超低功耗的UART-WiFi透传模块,拥有业内极富竞争力的封装尺寸和超低能耗技术,专为移动设备和物联网应用设计,可将用户的物理设备连接到Wi-Fi无线网络上,进行互联网或局域网通信,实现联网功能。 ESP8266是上海乐鑫信息科技(国产)设计的低功耗WiFi芯片,集成完整的TCP/IP协议栈和MCU(网上ESP8266型号很多,基本都具备联网功能,部分型号可以直接作为MCU使用)。而ESP8266模块是深圳安信可公司基于ESP8266芯片研发(增加必要外围电路、串口flash、板载天线等)的串口WiFi模块,成本低、使用简便、功能强大。 一般是模块固件损坏或者买回来里面可能被别人刷过固件需要擦除或者增加固件才用,作者的ESP8266是因为烧写了Arduino IDE的例程进去,不能识别AT指令,后来用不到了才想到刷回AT固件。刷固件有风险!!!(如果大家买的是ESP8266 nodeMCU可能就需要刷AT固件) 1.2 硬件与网络的桥梁——ESP8266 ESP8266模块和串口蓝牙JDY-31模块一样,串口WiFi模块也是扩展单片机功能的又一神器。小巧的 ESP8266 WiFi模块通过串口AT指令与单片机通讯,实现串口透传,非常好上手(部分型号ESP8266可以直接当MCU,无需再通过串口与其他MCU通讯)。 透传,又称透明传输,具体来说就是“输入即输出(如从WiFi模块串口输入的字符会透传到服务器端)”,数据不改变,不同协议之间的转换(如串口到WiFi、蓝牙等)由模块完成。使用者无需关心内部具体实现,因此模块对于使用者是“透明的”、似乎不存在的(因为可无视中间的实现原理)。一个高度封装的模块,应该隐藏内部实现细节,仅对外提供使用接口。 把硬件联网之后,就再也不是“玩单机”了。配合服务器端的Socket网络编程,可以玩许多东西。所以我觉得WiFi模块是连接软件(网络编程)与硬件(单片机)的桥梁,把所学的单片机(MCU)和Web知识联系起来了。 如今大火的物联网等概念都属于“智能硬件",ESP8266等模块的出现大大减少了网络开发的难度系数,也进一步促进了技术下放。而且,通过学习ESP8266/ESP32等模块,可以熟悉大量TCP/IP等网络协议,对后续Linux系统板网络开发也是极具意义的。 1.3 ESP8266使用——AT指令 AT指令最早在蓝牙模块上接触过,所谓AT指令实质上就是一些起控制作用的特殊字符串。模块可以通过AT指令控制搭配使用源代码API函数开发,总体开发速度快,难度较低。 说明:下面仅列举一些最常用的AT指令及用法,指令的详细参数及使用说明请参考官方文档:ESP8266 AT指令集。 基础AT指令 指令描述AT测试AT启动AT+RST重启模块AT+GMR查看版本信息 AT 是最常用的指令,用于测试模块能否正常接受指令。在sscom中向串口发送指令 AT ,若收到模块返回的 OK 则说明模块的AT指令可正常工作。发送 AT+GMR 可查看AT指令及SDK的版本号,一般最新版指令会增加一些新功能,可随时关注官方的更新。

异常的几种处理方式

目录 异常的声明 异常的处理 java虚拟机默认处理异常(默认处理方式) 手动处理异常的方式 异常的捕获 异常的声明 如果在某个方法中出现了编译时异常可以在当前方法上声明这个异常的类型,声明之后编译时异常就会消失 注意 异常的声明不能从根本上解决问题 声明一个编译时异常类型之后,系统不会在编译期间检查这段代码,但是在运行阶段,如果传入的数据不正确,也有可能出现错误情况 异常的声明只能处理编译时异常 异常的处理 java虚拟机默认处理异常(默认处理方式) step1-->如果在代码中某个方法内出现了错误情况,系统就会把这个错误发生的原因,发生异常的类型,发生的路径封装到异常对象中 step2-->如果当前方法中没有处理这个异常对象,就将异常往上抛,抛给调用该方法的方法 step3-->如果调用方法也没有处理异常,那么久一层层往上抛出,直到抛给main方法再抛给虚拟机 step4-->虚拟机将当前异常对象通过标准错误流,打印到控制台,并结束自己 手动处理异常的方式 try...catch try{ 可能出现错误的代码 }catch(异常类型 异常对象名){ 处理异常的方式 } step1-->先执行try中的代码,检测是否出现异常 step2-->如果try中的代码没有出现问题,try...catch直接结束,代码正常执行try...catch后面的代码 step3-->如果try中出现了异常,程序立即跳转到catch中查看出现异常所属类型和catch中声明的类型是否一样,如果一样,就捕获该异常按照指定的方式去处理异常,处理之后try...catch结束,程序继续运行 step4-->如果try中出现了catch中没有声明的异常类型,就不能捕获该异常,此时虚拟机来处理这个异常(默认处理方式) 注意事项 如果在某行代码中,出现了异常,立即去catch块中匹配异常类型,出现错误的代码后面的代码就不能执行了 try...catch...catch... try{ 可能出现错误的代码 }catch(异常类型1 对象名1){ 异常1的处理方式 }catch(异常类型2 对象名2){ 异常2的处理方式 }... step1-->先执行try中的代码,检测是否出现异常 step2-->如果出现了异常,就先和异常类型1匹配,如果能匹配上就执行异常1的处理方式,处理之后,直接结束整个try...catch语句,执行之外的代码 step3-->如果不能和异常类型1匹配,就继续和异常类型2匹配,如果能匹配上,就执行异常类型2的处理方式,之后结束整个try...catch语句,执行之外的代码 step4-->如果异常类型2不能匹配,依次类推,往后匹配 step5-->如果出现的异常,catch中的类型都不能匹配,虚拟机默认处理 注意事项 如果给定了多个catch语句去匹配多个异常类型,异常类型中存在子父类的关系,腹肌的异常类型不能1定义在子级异常类型前面 原因 如果父类异常定义在前面,后面定义的子类或者简介子类异常没有执行的机会,可以将父类异常类型定义在后面,如果前面的类型无法匹配,可以使用父类异常匹配 如果多个异常类型想要执行一种处理方式,可以使用 | 符号去定义类型(jdk1.7),可以使用多个 | 来定义多个异常类型,只要出现一种,都可以去捕获处理 try...catch...finally try{ 可能会发生错误的代码 }catch(异常类型 异常对象名){ 异常的处理方式 }finally{ 一定要执行的代码 } step1-->先执行try中的代码,检测是否出现异常 step2-->如果出现异常就先和异常类型匹配,如果能匹配上就执行异常的处理方式,处理之后结束整个try...catch语句,执行之外的代码 step3-->如果不能和异常类型,不结束整个try...catch,强制执行finally代码块中的代码,然后再结束 使用原因

dynamic_cast使用以及原理探究

dynamic_cast与原理 dynamic_cast运算符能够将基类的指针或引用安全的转换为派生类的指针或者引用。转换失败,返回空地址。 RTTI是运行阶段类型识别(Runtime Type Identification)的简称。是指程序在运行阶段确定对象的类型。 C++中可以进行运行时识别出变量等类型信息的还有typeid。 编译环境 Visual Studio 2022 / v143 / C++20 dynamic_cast用法 转换成功 如下B继承自A struct A { virtual ~A(){} }; struct B: A{}; A* a = new B; // 将指向子类的指针,转换为子类指针。 if (b = dynamic_cast<B*>(a)) { // do something... } 转换失败 A* a = new A; // 转换失败,b为空指针。 if (b = dynamic_cast<B*>(a)) { // do something... } ‍‍‍``` 原理探究 使用dynamic_cast转换的前提是A必须有虚函数,即虚函数表。dynamic_cast的关键就是虚函数表,因为B类有自己的虚函数表,A类也有自己的虚函数表,根据虚函数表的不同可以判断到底是属于哪个类。我们简单仿写一下。当然,我们只是尝试一下,不能用于实际,毕竟开销大且有局限性。 template<class T> int64_t* get_vptr_64(T* t) { int64_t* pvptr = reinterpret_cast<int64_t*>(t); // 对象的首地址,即虚函数表指针。 return reinterpret_cast<int64_t*>(*pvptr); // 对象的首地址存的内容就是虚表地址 } // 不支持 子类转父类 template<class T, class U> T* my_cast(U u) { // 如何不实例化对象的情况下获取类的虚函数表 ? T* t = new T(); if (get_vptr_64(u) == get_vptr_64(t)) { return reinterpret_cast<T*>(u); } return nullptr; } int main() { // 创建一个多态指针 A* b1 = new B; // 转换 // B* b2 = dynamic_cast<B*>(b1); if(B* b = my_cast<B>(b1)) { std::cout << "

Linux 下使用 C++ 实现的 Web 文件服务器

项目地址: Github:https://github.com/shangguanyongshi/WebFileServer 在学习完成《TCP/IP 网络编程》和《Linux高性能服务器编程》后,阅读了一些Web服务器的相关代码,自动动手使用 C++11 实现了这个 Linux 下简单 Web 文件服务器,通过浏览器发送 HTTP 请求管理服务器指定文件夹下的所有文件。主要功能包括: 以 HTML 页面形式返回该文件夹下的所有文件可以选择本地文件上传到服务器可以对列表中的文件文件执行下载操作可以删除服务器中的指定文件 HTML 的文件列表页面如下所示: 整体框架 使用 Reactor 事件处理模型,通过统一事件源,主线程使用 epoll 监听所有的事件,工作线程负责执行事件的逻辑处理预先创建线程池,当有事件发生时,加入线程池的工作队列中,使用随机选择算法选择线程池中的一个线程处理工作队列的事件使用 HTTP GET 方法获取文件列表,发起下载文件、删除文件的请求。使用 POST 方法向服务器上传文件服务端使用有限状态机对请求消息进行解析,根据解析结果执行操作后,向客户端发送页面、发送文件或发送重定向报文服务端使用 sendfile 函数实现零拷贝数据发送 功能展示 获取文件列表 上传文件 下载文件 删除文件 运行 build 项目sh ./build.sh 启动文件服务器./main 在浏览器端输入 服务端ip:端口号(端口号默认是8888)serverip:8888 拓展 由于时间匆忙,该项目仅仅完成了最基础的功能,但是该项目还有很多可以继续拓展的功能,这里简单列出,以后会继续完善: 现有程序中,运行日志直接输入到控制台,另设进程池实现日志服务(实现远程日志服务器) 增加用户注册登陆功能,根据登陆账户提供各自的文件服务 添加定时器定时处理非活动的连接 参考资料 《TCP/IP 网络编程》:https://book.douban.com/subject/25911735/《Linux高性能服务器编程》:https://book.douban.com/subject/24722611/TinyWebServer:https://github.com/qinguoyi/TinyWebServer

广州大学学生实验报告,进程控制与进程通信

广州大学学生实验报告 开课学院及实验室: 计算机科学与网络工程学院 电子楼418B 2022年9月 26日 学院 计算机科学与网络工程学院 年级/专业/班 计科 姓名 Great Macro 学号 实验课程名称 Unix/Linux 操作系统分析实验 成绩 实验项目名称 进程控制与进程通信 指导 老师 张*玲 实验一 进程控制与进程通信(2) 一、实验目的 1、了解什么是管道 2、熟悉UNIX/LINUX支持的管道通信方式 3、理解内核模块的编写和装载方法 二、实验内容 1、编写程序实现进程的管道通信。用系统调用pipe( )建立一管道,二个子进程P1和P2分别向管道各写一句话: Child 1 is sending a message! Child 2 is sending a message! 父进程从管道中读出二个来自子进程的信息并显示(要求先接收P1,后P2)。 2、编写一个HelloWorld内核模块,并进行装载和卸载操作 三、实验指导 (一)管道通信 1、什么是管道 UNIX系统在OS的发展上,最重要的贡献之一便是该系统首创了管道(pipe)。这也是UNIX系统的一大特色。 所谓管道,是指能够连接一个写进程和一个读进程的、并允许它们以生产者—消费者方式进行通信的一个共享文件,又称为pipe文件。由写进程从管道的写入端(句柄1)将数据写入管道,而读进程则从管道的读出端(句柄0)读出数据。 2、管道的类型: (1)有名管道 一个可以在文件系统中长期存在的、具有路径名的文件。用系统调用mknod( )建立。它克服无名管道使用上的局限性,可让更多的进程也能利用管道进行通信。因而其它进程可以知道它的存在,并能利用路径名来访问该文件。对有名管道的访问方式与访问其他文件一样,需先用open( )打开。 (2)无名管道 一个临时文件。利用pipe( )建立起来的无名文件(无路径名)。只用该系统调用所返回的文件描述符来标识该文件,故只有调用pipe( )的进程及其子孙进程才能识别此文件描述符,才能利用该文件(管道)进行通信。当这些进程不再使用此管道时,核心收回其索引结点。 二种管道的读写方式是相同的,本文只讲无名管道。 (3)pipe文件的建立 分配磁盘和内存索引结点、为读进程分配文件表项、为写进程分配文件表项、分配用户文件描述符 (4)读/写进程互斥 内核为地址设置一个读指针和一个写指针,按先进先出顺序读、写。 为使读、写进程互斥地访问pipe文件,需使各进程互斥地访问pipe文件索引结点中的直接地址项。因此,每次进程在访问pipe文件前,都需检查该索引文件是否已被上锁。若是,进程便睡眠等待,否则,将其上锁,进行读/写。操作结束后解锁,并唤醒因该索引结点上锁而睡眠的进程。 3、所涉及的系统调用 (1)pipe( )

npm run dev报错解决

此篇文章针对的是关于dev问题的报错 报错的问题如下图所示 Missing script: "dev" 这个问题主要是没有找到dev的位置在哪里。 问题发生的原因主要是我在创建一个文件夹后在次的在这个文件夹当中新建一个文件夹并且安装了webpack,那么你在npm init的时候进行安装package.json就会发现在两个文件夹当中都生成了package.json那么在路劲的寻找当中就会找不到。 那么如何解决这个问题,你应该进入到你所需要的目录路劲下进行运行,然后外层的packa.json就不会运行,那么就找到了这个路劲下的dev,就可以进行npm run dev 了 

不知例化结构时在verdi中查找例化的模块/信号

如果工程庞大 不知道例化结构时 如何利用search查找模块?? 方法一 find Signal/Instance/Instport 推荐使用该种方法在verdi 界面使用shift+A可以快速打开搜索界面,当然也可以通过菜单栏的Source->find Signal/Instance/Instport打开,在弹出的对话框中一般会选择"Search Full Scope" 否则只能在当前层次搜索。如下可以选择搜索Signal/Instance/Instport,支持通配符"*" 当然在source->还可以看到Find Scope和Find String怎么使用可以自行测试 方法二 在instance窗口ctrl+F 打开“Search/Filter” 在instance窗口 ctrl+F或右键 show Search/Filter 这种情况只能搜索instance 设置在Expanded Tree搜索 在search窗中或者Filter窗中输入例化名,*号为通配符,下图显示了搜索结果

使用python绘制标准心形线

#标准心形线r=sin(t)*sqrt(|cos(t)|)/(sin(t)+7/5)-2sin(t)+2 import math import numpy as np import matplotlib.pyplot as plt r=[] angle=[] for i in np.arange(0,101): x=2*math.pi/100*i angle.append(x) y=(math.sin(x)*math.sqrt(abs(math.cos(x))))/(math.sin(x)+7/5)-2*math.sin(x)+2 r.append(y) fig=plt.figure() ax1=fig.add_axes([0.1,0.1,0.8,0.8],projection='polar') ax1.set_rgrids(np.arange(2,2,1)) ax1.set_rlabel_position(90) ax1.plot(angle,r,'-r',linewidth=2.5)#lw=2.5 plt.savefig('heart1.png',dpi=600) plt.show()

使用python绘制笛卡尔心形线

#笛卡尔心形线,r=a(1-sinθ) import math import matplotlib.pyplot as plt import numpy as np r=[] angle=[] for i in np.arange(0,101): x=2*math.pi/100*i angle.append(x) r.append(1-math.sin(x)) fig=plt.figure() ax1=fig.add_axes([0.1,0.1,0.8,0.8],projection='polar') ax1.set_rgrids(np.arange(2,2,1)) ax1.set_rlabel_position(90) ax1.plot(angle,r,'-r',linewidth=2.5)#lw=2.5 plt.savefig('heart.png',dpi=600) plt.show()

纯micropython 1.54寸 墨水屏驱动 (1.5inch e-Paper V2)ssd1681

还记得去年这个时候因为能在树莓派上成功驱动一块屏幕激动不已,今年这个时候已经终于能自己搞驱动了。 这次的屏幕是1.54寸的墨水屏,屏幕这块我推荐大家直接买微雪的,不是打广告,而是确实业界大哥有保障,我手里这块是1.5inch e-Paper V2。 拿到以后参考了一下技术手册和官网的arduino代码,就直接开搞,其实更准确地说算是抄作业,并不是完全从头自己写的,但是驱动这玩意看多了都大同小异,先把技术手册中给的图拿来 照着抄就完了 自己p了个手表的UI,然后取模放进去试了试,效果还挺好,当然我只是初步跑了一下,没有做成驱动库的模式,也还没有研究局部刷新,先能跑起来再说,大家可以参考一下。效果如下,墨水瓶确实精致而且断电也会保持原状态,就是刷新慢一点。 最后还尝试网github上传了一下,不过弄得一知半解的,居然没有找到一个特别好的git教程,能把源码git下来不难,问题是真正作为项目的参与者,开发者,上传合并之类的操作我就有点蒙了。 参考代码: from machine import Pin,SoftSPI import utime busy_pin=Pin(17,Pin.IN) res_pin=Pin(16,Pin.OUT) dc_pin=Pin(15,Pin.OUT) cs_pin=Pin(14,Pin.OUT) sck_pin=Pin(13,Pin.OUT) sdi_pin=Pin(12,Pin.OUT) miso_pin=Pin(2,Pin.OUT) epaper=SoftSPI(baudrate=10000000,sck=sck_pin, mosi=sdi_pin,miso=miso_pin) # with open('MY_WATCH.pbm','rb') as f: # f.readline() # width,height=[int(v) for v in f.readline().split()] # uidata=bytearray(f.read()) # #print(uidata[23]) # #print(width,height) # f.close() # # print(len(uidata)) testdata=(0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF7,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X3F,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF7,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFC,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XF7,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X3F,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF7,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XF7,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X3F, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF7,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XF7,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFC,0X3F,0XBF,0XFF,0XDF,0XFF,0XFF,0XDF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF7,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X3F,0X3F,0XFF,0XCF,0XFF,0XFF, 0X9F,0XFF,0XFF,0XFF,0XFF,0XFF,0XF7,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFC,0X3F,0X3B,0XFD,0XCF,0XFF,0XFF,0X1F,0XFF,0XFF,0XFF,0XFF,0XFF,0XF7, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X3E,0X73,0XFC,0XE7, 0XFF,0XFC,0X1F,0XFF,0XFF,0XFF,0XFF,0XFF,0XF7,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFC,0X3E,0X77,0XFE,0XE7,0XFF,0XF8,0X9F,0XFF,0XFF,0X80,0X00, 0X00,0XF7,0XFF,0X7F,0XC0,0X00,0X3F,0XFF,0XFF,0XC0,0X00,0XFB,0XFF,0XFC,0X3E,0X77, 0XFE,0XE7,0XFF,0XF1,0X9E,0XFF,0XFF,0X80,0X00,0X00,0XF7,0XFF,0X1F,0XC0,0X00,0X7F, 0XFF,0XFF,0X80,0X00,0X78,0XFF,0XFC,0X3E,0X77,0X9E,0XE7,0XFF,0XF9,0X9C,0XFF,0XFF, 0XBF,0XFF,0XFE,0XF7,0XFF,0X0F,0X80,0X00,0XFF,0XFF,0XFF,0X00,0X00,0X38,0X7F,0XFC, 0X3E,0X77,0XFE,0XE7,0XFF,0XFC,0X98,0XFF,0XFF,0XBF,0X80,0X06,0XF7,0XFF,0X07,0X07, 0XFF,0XFF,0XFF,0XFE,0X0F,0XFC,0X18,0X3F,0XFC,0X3E,0X73,0XFC,0XE7,0XFF,0XFE,0X01, 0XFF,0XFF,0XBF,0X80,0X06,0XF7,0XFF,0X07,0X07,0XFF,0XFF,0XFF,0XFE,0X0F,0XFC,0X18, 0X3F,0XFC,0X3F,0X3B,0XFD,0XCF,0XFF,0XFE,0X03,0XFF,0XFE,0X3F,0X80,0X06,0XF7,0XFF, 0X07,0X0F,0XFF,0XFF,0XFF,0XFE,0X0F,0XFC,0X18,0X3F,0XFC,0X3F,0X3F,0XBF,0XCF,0XFF, 0XFF,0X0F,0XFF,0XFE,0X3F,0X80,0X06,0XF7,0XFF,0X07,0X07,0XFF,0XFF,0XFF,0XFE,0X0F, 0XFC,0X18,0X3F,0XFC,0X3F,0XBF,0X9F,0XDF,0XFF,0XFF,0X0F,0XFF,0XFE,0X3F,0X80,0X06, 0XF7,0XFF,0X07,0X80,0X00,0XFE,0X00,0X1E,0X0F,0XFC,0X18,0X3F,0XFC,0X3F,0XFF,0X9F, 0XFF,0XFF,0XFE,0X07,0XFF,0XFF,0X3F,0X80,0X06,0XF7,0XFF,0X07,0XC0,0X00,0X7E,0X00, 0X0E,0X0F,0XFC,0X18,0X3F,0XFC,0X3F,0XFF,0X9F,0XFF,0XFF,0XFC,0X03,0XFF,0XFF,0XBF, 0X80,0X06,0XF7,0XFF,0X07,0XC0,0X00,0X3F,0X00,0X0E,0X0F,0XFC,0X18,0X3F,0XFC,0X3F, 0XFF,0X1F,0XFF,0XFF,0XF8,0X83,0XFF,0XFF,0XBF,0XFF,0XFE,0XF7,0XFF,0X07,0XFF,0XFC, 0X3F,0X00,0X06,0X0F,0XFC,0X18,0X3F,0XFC,0X3F,0XFF,0X0F,0XFF,0XFF,0XF1,0X98,0XFF, 0XFF,0XBF,0XFF,0XFC,0XF7,0XFF,0X07,0XFF,0XFC,0X1F,0XFF,0XFE,0X0F,0XFC,0X18,0X3F, 0XFC,0X3F,0XFF,0X0F,0XFF,0XFF,0XF8,0X9C,0XFF,0XFF,0X80,0X00,0X00,0XF7,0XFF,0X07, 0XFF,0XFC,0X1F,0XFF,0XFE,0X0F,0XFC,0X18,0X3F,0XFC,0X3F,0XFF,0X0F,0XFF,0XFF,0XFC, 0X1E,0XFF,0XFF,0XFF,0XFF,0XFF,0XF7,0XFF,0X07,0XC0,0X00,0X1F,0XFF,0XFF,0X00,0X00, 0X38,0X3F,0XFC,0X3F,0XFE,0X0F,0XFF,0XFF,0XFE,0X1F,0XFF,0XFF,0XFF,0XFF,0XFF,0XF7, 0XFF,0X07,0X80,0X00,0X1F,0XFF,0XFF,0X80,0X00,0X78,0X3F,0XFC,0X3F,0XFE,0X07,0XFF, 0XFF,0XFF,0X1F,0XFF,0XFF,0XFF,0XFF,0XFF,0XF7,0XFF,0X07,0X00,0X00,0X1F,0XFF,0XFF, 0XC0,0X00,0XF8,0X3F,0XFC,0X3F,0XFE,0X07,0XFF,0XFF,0XFF,0X9F,0XFF,0XFF,0XFF,0XFF, 0XFF,0XF7,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X3F,0XFC, 0X07,0XFF,0XFF,0XFF,0XDF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF7,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X3F,0XFC,0X07,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XF7,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC, 0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF7,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XF7,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFC,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF7,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X3F,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF7,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFC,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XF7,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X3F,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF7,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XF7,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X3F, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF7,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XF7,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFC,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X3F,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFC,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X3F,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC, 0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFC,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X3F,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFC,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X3F,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X3F, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFC,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFC,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X3F,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFC,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X3F,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC, 0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X3F,0XFF,0XF0,0XFF,0X87,0X00,0X07, 0XC0,0X00,0X0F,0X80,0X0F,0X87,0X0E,0X0C,0X1F,0XFF,0X83,0XFC,0X0C,0X3F,0XFF,0X0F, 0XFF,0XFC,0X3F,0XFF,0XF0,0XFF,0X87,0X80,0X03,0XE0,0X00,0X1F,0X00,0X07,0X83,0X84, 0X1C,0X3F,0XFF,0XC1,0XF8,0X1C,0X1F,0XFE,0X0F,0XFF,0XFC,0X3F,0XFF,0XF0,0XFF,0X87, 0XC0,0X01,0XF0,0X00,0X3E,0X00,0X03,0XC3,0X80,0X18,0X3F,0XFF,0XE0,0X70,0X3C,0X0F, 0XFC,0X0F,0XFF,0XFC,0X3F,0XFF,0XF0,0XFF,0X87,0XFF,0XF0,0XFF,0X87,0XFC,0X3F,0XE1, 0XC1,0XC0,0X30,0X7F,0XFF,0XF0,0X20,0X7C,0X07,0XF8,0X0F,0XFF,0XFC,0X3F,0XFF,0XF0, 0XFF,0X87,0XFF,0XF0,0XFF,0X87,0XFC,0X3F,0XE1,0XE1,0XC0,0X70,0X7F,0XFF,0XF8,0X00, 0XFC,0X03,0XF0,0X0F,0XFF,0XFC,0X3F,0XFF,0XF0,0X00,0X07,0XFF,0XF0,0XFF,0X87,0XFC, 0X3F,0XE1,0XE0,0XE0,0X60,0XFF,0XFF,0XFC,0X01,0XFC,0X23,0XF1,0X0F,0XFF,0XFC,0X3F, 0XFF,0XF0,0X00,0X07,0XFF,0XF0,0XFF,0X87,0XFC,0X3F,0XE1,0XF0,0X60,0XE1,0XFF,0XFF, 0XFE,0X03,0XFC,0X21,0XE1,0X0F,0XFF,0XFC,0X3F,0XFF,0XF0,0X00,0X07,0XFF,0XF0,0XFF, 0X87,0XFC,0X00,0X01,0XF8,0X60,0XC1,0XFF,0XFF,0XFF,0X07,0XFC,0X30,0XC3,0X0F,0XFF, 0XFC,0X3F,0XFF,0XF0,0XFF,0X87,0XFF,0XF0,0XFF,0X87,0XFC,0X00,0X01,0XF8,0X20,0X43, 0XFF,0XFF,0XFF,0X0F,0XFC,0X38,0X07,0X0F,0XFF,0XFC,0X3F,0XFF,0XF0,0XFF,0X87,0XFF, 0XF0,0XFF,0X87,0XFC,0X00,0X01,0XFC,0X00,0X03,0XFF,0XFF,0XFF,0X0F,0XFC,0X3C,0X0F, 0X0F,0XFF,0XFC,0X3F,0XFF,0XF0,0XFF,0X87,0XFF,0XF0,0XFF,0X87,0XFC,0X3F,0XE1,0XFC, 0X00,0X07,0XFF,0XFF,0XFF,0X0F,0XFC,0X3C,0X0F,0X0F,0XFF,0XFC,0X3F,0XFF,0XF0,0XFF, 0X87,0X00,0X01,0XFF,0X87,0XFC,0X3F,0XE1,0XFE,0X04,0X07,0XFF,0XFF,0XFF,0X0F,0XFC, 0X3E,0X1F,0X0F,0XFF,0XFC,0X3F,0XFF,0XF0,0XFF,0X87,0X80,0X03,0XFF,0X87,0XFC,0X3F, 0XE1,0XFE,0X04,0X0F,0XFF,0XFF,0XFF,0X0F,0XFC,0X3F,0XFF,0X0F,0XFF,0XFC,0X3F,0XFF, 0XF0,0XFF,0X87,0XC0,0X07,0XFF,0X87,0XFC,0X3F,0XE1,0XFF,0X0E,0X0F,0XFF,0XFF,0XFF, 0X0F,0XFC,0X3F,0XFF,0X0F,0XFF,0XFC,0X3F,0XFF,0XFF,0XFF,0XE7,0XFF,0XFF,0XFF,0XC7, 0XFF,0XFF,0XF1,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X8F,0XFF,0XFF,0XFF,0X8F,0XFF,0XFC, 0X3F,0XFF,0XFF,0XFF,0XF7,0XFF,0XFF,0XFF,0XF7,0XFF,0XFF,0XFD,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XEF,0XFF,0XFF,0XFF,0XEF,0XFF,0XFC,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFC,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X3F,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFC,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X3F,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X3F, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFC,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFC,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X3F,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFC,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X3F,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC, 0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFC,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X3F,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X3F, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFC,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFC,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X3F,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFC,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X3F,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC, 0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFC,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X3F,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFC,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X3F,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X3F, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFC,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFC,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X3F,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFC,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X3F,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFE,0X00,0X7F, 0XFF,0XFF,0XE0,0X1F,0XFF,0XFF,0XFC,0X3F,0XFF,0XFF,0X80,0X00,0X00,0X1F,0XFC,0X00, 0X00,0X00,0XFF,0XFF,0XFF,0XFF,0XE0,0X00,0X0F,0XFF,0XFF,0XD0,0X07,0XFF,0XFF,0XFC, 0X3F,0XFF,0XFF,0X40,0X00,0X00,0X1F,0XFA,0X00,0X00,0X00,0XFF,0XFF,0XFF,0XFE,0XC0, 0X00,0X03,0XFF,0XFF,0X90,0X03,0XFF,0XFF,0XFC,0X3F,0XFF,0XFE,0X40,0X00,0X00,0X1F, 0XF2,0X00,0X00,0X00,0XFF,0XFF,0XFF,0XFE,0X80,0X00,0X01,0XFF,0XFF,0X10,0X00,0XFF, 0XFF,0XFC,0X3F,0XFF,0XFC,0X40,0X00,0X00,0X1F,0XE2,0X00,0X00,0X00,0XFF,0XFF,0XFF, 0XFD,0X00,0X00,0X00,0XFF,0XFF,0X10,0X00,0X7F,0XFF,0XFC,0X3F,0XFF,0XFC,0X40,0X00, 0X00,0X1F,0XE2,0X00,0X00,0X00,0XFF,0XFF,0XFF,0XFA,0X00,0X3E,0X00,0XFF,0XFF,0X10, 0X00,0X3F,0XFF,0XFC,0X3F,0XFF,0XFC,0X40,0X00,0X00,0X1F,0XE2,0X00,0X00,0X00,0XFF, 0XFF,0XFF,0XF6,0X00,0X7F,0X00,0X7F,0XFF,0X10,0X00,0X3F,0XFF,0XFC,0X3F,0XFF,0XFC, 0X7F,0XFF,0XE0,0X1F,0XE3,0XFF,0XFF,0X00,0XFF,0XFF,0XFF,0XE4,0X00,0X61,0X80,0X7F, 0XFF,0X10,0X00,0X3F,0XFF,0XFC,0X3F,0XFF,0XFC,0X7F,0XFF,0XE0,0X1F,0XE3,0XFF,0XFF, 0X00,0XFF,0XFF,0XFF,0XE4,0X00,0XC0,0X80,0X3F,0XFF,0X10,0X00,0X3F,0XFF,0XFC,0X3F, 0XFF,0XFC,0X00,0X00,0X20,0X1F,0XE0,0X00,0X01,0X00,0XFF,0XFF,0XFF,0XC7,0XFF,0X80, 0X80,0X3F,0XFF,0X10,0X0C,0X3F,0XFF,0XFC,0X3F,0XFF,0XFC,0X00,0X00,0X20,0X1F,0XE0, 0X00,0X01,0X00,0XFF,0XFF,0XFF,0XCF,0XFF,0XBC,0X40,0X3F,0XFF,0X10,0X0F,0X3F,0XFF, 0XFC,0X3F,0XFF,0XFC,0X00,0X00,0X20,0X1F,0XE0,0X00,0X01,0X00,0XFF,0XFF,0XFF,0XC0, 0X03,0XFE,0X40,0X1F,0XFF,0X10,0X0B,0XBF,0XFF,0XFC,0X3F,0XFF,0XFC,0X00,0X00,0X20, 0X1F,0XE0,0X00,0X01,0X00,0XFF,0XFF,0XFF,0XC0,0X38,0X07,0X40,0X1F,0XFF,0X10,0X08, 0XFF,0XFF,0XFC,0X3F,0XFF,0XFF,0XFF,0XFF,0X20,0X1F,0XFF,0XFF,0XF9,0X00,0XFF,0XFF, 0XFF,0X80,0X40,0X00,0XC0,0X1F,0XFF,0X10,0X08,0X7F,0XFF,0XFC,0X3F,0XFF,0XFF,0XFF, 0XFF,0XE0,0X1F,0XFF,0XFF,0XFF,0X00,0XFF,0XC0,0X1F,0X80,0X80,0X00,0X40,0X1F,0XFF, 0X10,0X08,0X3F,0XFF,0XFC,0X3F,0XFF,0XFF,0XFE,0X01,0XE0,0X1F,0XFF,0XF0,0X0F,0X00, 0XFF,0XA0,0X1F,0XFE,0X00,0X00,0X00,0X1F,0XFF,0X10,0X0C,0XFF,0XFF,0XFC,0X3F,0XFF, 0XFF,0XF0,0X00,0X20,0X1F,0XFF,0X80,0X01,0X00,0XFF,0X20,0X1F,0XFC,0X00,0X00,0X00, 0X1F,0XFF,0X10,0X0F,0XFF,0XFF,0XFC,0X3F,0XFF,0XFF,0XA0,0X00,0X00,0X1F,0XFD,0X00, 0X00,0X00,0XFE,0X20,0X1F,0XF8,0X00,0X7E,0X00,0X1F,0XFF,0X10,0X0F,0XFF,0XFF,0XFC, 0X3F,0XFF,0XFF,0X00,0X00,0X00,0X1F,0XF8,0X00,0X00,0X00,0XFE,0X20,0X1F,0XF4,0X00, 0XFF,0X00,0X1F,0XFF,0X10,0X0F,0XFF,0XFF,0XFC,0X3F,0XFF,0XFE,0X80,0X00,0X00,0X1F, 0XF4,0X00,0X00,0X00,0XFE,0X20,0X1F,0XE0,0X01,0X81,0X80,0X1F,0XFF,0X10,0X0F,0XFF, 0XFF,0XFC,0X3F,0XFF,0XFE,0X00,0X1F,0X00,0X1F,0XF0,0X00,0XF8,0X00,0XFE,0X3F,0XFF, 0XC8,0X03,0X00,0XC0,0X1F,0XFF,0X10,0X0F,0XFF,0XFF,0XFC,0X3F,0XFF,0XFD,0X00,0X7F, 0XC0,0X1F,0XE8,0X03,0XFE,0X00,0XFE,0X3F,0XFF,0XC8,0X02,0X00,0X40,0X1F,0XFF,0X10, 0X0F,0XFF,0XFF,0XFC,0X3F,0XFF,0XFA,0X00,0XE0,0XFF,0XFF,0XD0,0X07,0X07,0XFF,0XFE, 0X00,0X1F,0X88,0X02,0X00,0X40,0X1F,0XFF,0X10,0X0F,0XFF,0XFF,0XFC,0X3F,0XFF,0XF2, 0X00,0XC0,0X3F,0XFF,0X90,0X06,0X01,0XFF,0XFE,0X00,0X3F,0X88,0X03,0XF8,0X40,0X3F, 0XFF,0X10,0X0F,0XFF,0XFF,0XFC,0X3F,0XFF,0XE2,0X00,0X80,0X00,0X1F,0X10,0X04,0X00, 0X00,0XFE,0X00,0X7F,0X88,0X03,0XFC,0X40,0X3F,0XFF,0X10,0X0F,0XFF,0XFF,0XFC,0X3F, 0XFF,0XE2,0X00,0X80,0X00,0X3F,0X10,0X04,0X00,0X01,0XFE,0X00,0XFF,0X88,0X03,0XFC, 0XC0,0X3F,0XFF,0X10,0X0F,0XFF,0XFF,0XFC,0X3F,0XFF,0XE2,0X00,0XBE,0X7F,0XFF,0X10, 0X05,0XF3,0XFF,0XFF,0XFF,0XFF,0X88,0X01,0XFD,0X80,0X3F,0XFF,0XF0,0X0F,0XFF,0XFF, 0XFC,0X3F,0XFF,0XE2,0X00,0X7F,0XBF,0XFF,0X10,0X03,0XFD,0XFF,0XFF,0XFF,0XFF,0X8C, 0X00,0XFB,0X00,0X7F,0XFF,0XF0,0X0F,0XFF,0XFF,0XFC,0X3F,0XFF,0XE3,0X00,0X3F,0XC0, 0X0F,0X18,0X01,0XFE,0X00,0X7F,0XC0,0X1F,0X84,0X00,0X7E,0X00,0X7F,0XF8,0X00,0X00, 0X3F,0XFF,0XFC,0X3F,0XFF,0XE1,0X00,0X00,0X00,0X0F,0X08,0X00,0X00,0X00,0X7F,0XA0, 0X1F,0XC6,0X00,0X00,0X00,0XFF,0XF4,0X00,0X00,0X3F,0XFF,0XFC,0X3F,0XFF,0XE1,0X80, 0X00,0X00,0X1F,0X0C,0X00,0X00,0X00,0XFF,0X20,0X1F,0XC3,0X00,0X00,0X01,0XFF,0XE4, 0X00,0X00,0X3F,0XFF,0XFC,0X3F,0XFF,0XF0,0XC0,0X00,0X00,0X3F,0X86,0X00,0X00,0X01, 0XFE,0X20,0X1F,0XC1,0X80,0X00,0X03,0XFF,0XC4,0X00,0X00,0X3F,0XFF,0XFC,0X3F,0XFF, 0XF0,0X70,0X00,0X00,0XFF,0X83,0X80,0X00,0X07,0XFE,0X20,0X1F,0XE1,0XE0,0X00,0X0F, 0XFF,0XC4,0X00,0X00,0X3F,0XFF,0XFC,0X3F,0XFF,0XF8,0X3F,0X00,0X07,0X7F,0XC1,0XF8, 0X00,0X3B,0XFE,0X20,0X1F,0XE0,0X7C,0X00,0X7D,0XFF,0XC4,0X00,0X00,0X3F,0XFF,0XFC, 0X3F,0XFF,0XF8,0X0F,0XFF,0XFE,0XFF,0XC0,0X7F,0XFF,0XF7,0XFE,0X3F,0XFF,0XF0,0X1F, 0XFF,0XF3,0XFF,0XC7,0XFF,0XFF,0XFF,0XFF,0XFC,0X3F,0XFF,0XFC,0X00,0XFF,0XE1,0XFF, 0XE0,0X07,0XFF,0X0F,0XFE,0X3F,0XFF,0XF8,0X03,0XFF,0X8F,0XFF,0XC7,0XFF,0XFF,0XFF, 0XFF,0XFC,0X3F,0XFF,0XFF,0X00,0X00,0X07,0XFF,0XF8,0X00,0X00,0X3F,0XFE,0X00,0X1F, 0XFC,0X00,0X00,0X0F,0XFF,0XC0,0X00,0X00,0X3F,0XFF,0XFC,0X3F,0XFF,0XFF,0X80,0X00, 0X0F,0XFF,0XFC,0X00,0X00,0X7F,0XFE,0X00,0X3F,0XFE,0X00,0X00,0X3F,0XFF,0XC0,0X00, 0X00,0XFF,0XFF,0XFC,0X3F,0XFF,0XFF,0XE0,0X00,0X3F,0XFF,0XFF,0X00,0X01,0XFF,0XFE, 0X00,0X7F,0XFF,0X80,0X00,0X7F,0XFF,0XC0,0X00,0X01,0XFF,0XFF,0XFC,0X3F,0XFF,0XFF, 0XFC,0X01,0XFF,0XFF,0XFF,0XE0,0X0F,0XFF,0XFE,0X00,0XFF,0XFF,0XF0,0X03,0XFF,0XFF, 0XC0,0X00,0X03,0XFF,0XFF,0XFC,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X3F, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFC,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFC,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X3F,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFC,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X3F,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC, 0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFC,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X3F,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFC,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X3F,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X3F, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFC,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFC,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X3F,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFC,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X3F,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC, 0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFC,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X3F,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFC,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X3F,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00 ) #init def readbusy(): while busy_pin.

ensp华为防火墙及应用

华为模拟器(ensp) 华为 eNSP ,又称华为企业网络仿真平台,是华为提供的一款免费的网络仿真工具平台,主要是对企业网的路由器、交换机、防火墙、无线设备进行软件仿真,可以在没有真实设备的情况下也能够进行网络实验测试,学习网络技术。 华为防火墙(USG6000V)基础命令 防火墙默认管理账号:admin 防火墙默认管理密码:Admin@123 初始化密码,第一次登录需要修改密码特殊字符加大小写字母数字 system-view // 进入系统视图 [FW1] sysname FW1 // 给防火墙命名 [FW1] undo info-center enable // 关闭日志弹出功能 [FW1] quit language-mode Chinese // 将提示修改为中文 ,根据个人喜好 Change language mode, confirm? [Y/N] y 提示:改变语言模式成功. 开启Web管理界面: 默认防火墙console接口IP地址是192.168.0.1 system-view [FW1] web-manager enable // 开启图形管理界面 [FW1] interface GigabitEthernet 0/0/0 [FW1-GigabitEthernet0/0/0] ip address 192.168.0.1 24 // 给接口配置IP地址 [FW1-GigabitEthernet0/0/0] service-manage all permit // 放行该端口的请求 [FW1-GigabitEthernet0/0/0] display this 配置Console口登陆: system-view // 进入系统视图 [FW1] user-interface console 0 // 进入console0的用户配置接口