Android Studio 最新最详细安装教程

一、安装说明 Android Studio(简称AS)是谷歌推出的一个Android集成开发工具,基于IntelliJ IDEA. 类似 Eclipse ADT,Android Studio 提供了集成的 Android 开发工具用于开发和调试。 AS能够在Linux、Windows、macOS上运行,支持Java、Kotlin、Flutter等语言开发。 在IDEA的基础上,Android Studio 提供: 基于Gradle的构建支持Android 专属的重构和快速修复提示工具以捕获性能、可用性、版本兼容性等问题支持ProGuard 和应用签名基于模板的向导来生成常用的 Android 应用设计和组件功能强大的布局编辑器,可以让你拖拉 UI 控件并进行效果预览 笔者使用AS进行Flutter开发。安装的详细教程(多图)如下。 二、下载与安装 读者可在官网或者Android Studio中文社区下载安装包: AS官网:developer.android.google.cn/studioAS中文社区:developer.android.google.cn/studio 笔者在官网下载,下载前需同意一个协议: 下载后双击安装包进入安装。 点击 Next 进入下一个界面。 选择要安装的组件,笔者全选,点击 Next 进行下一步。 选择安装目录,强烈建议不要安装在 C:\Program Files\ 等需要较高权限的目录下。笔者安装在 C:\Android\Android Studio\ 目录下。单击 Next 。 这一步选择开始菜单文件夹,可以不管直接单击 Install 进入下一步: 等待安装完成,单击 Next 。 单击 Finish 启动AS。 选择是否导入AS设置,选择不导入,单击 OK 。 显示未找到Android SDK,单击 Cancel 进入下一步。 继续单击 Next 。 选择安装类型。笔者选择 Custom ,这样可以自定义Android SDK 安装目录。选好后单击 Next 。

基于python的opencv图像形态学处理(图像腐蚀与膨胀操作以及礼帽与黑帽)

腐蚀与膨胀 图像的腐蚀与膨胀互为逆向操作,通常用于处理二值图像(黑白图,以黑色为底面背景),因此需要先进行二值化处理,腐蚀和膨胀通俗的理解就是,在指定大小的卷积核内,如果该卷积核内全为黑色或全为白色,则该卷积核内像素值不变,但若是既有黑色又有白色,即在图像边缘处,那么膨胀操作则会将该卷积核内所有白色像素点都赋值变为黑色,以此将图像向内腐蚀掉一圈,而膨胀操作则相反,会将卷积核内的黑色像素点赋值成2白色,以此让图像膨胀一圈。 膨胀与腐蚀的函数介绍 kernel = np.ones((3,3),uint8):定义要处理的卷积核大小和卷积核的类型。 erosion = cv2.erode(img_test3,kernel,iterations = 1):对图像进行膨胀操作,img_test是要进行处理的图像,kernel是通过上一个函数定义好的卷积核,而iterations则是腐蚀操作的循环次数(可以将卷积核设置为(1,1),然后不断调整循环次数来实现精细化的腐蚀,以达到更好的腐蚀效果)。 dilate_1 = cv2.dilate(img_test,kernel,iterations = 1):对图像进行膨胀操作,这里的参数跟上面的参数作用一样,只是改了函数名而已。(同样可以将卷积核设置为(1,1),不断改变循环次数,以达到更好的膨胀效果)。 应用:腐蚀操作一般用于消去图像中不需要的粘连部分,而膨胀操作则用于填充图像内的空白部分,同时也可以恢复图像由于进行腐蚀操作后缩小的面积,在下面的代码实例中会有体现。 代码实例 import cv2#导入包 import numpy as np import matplotlib.pyplot as plt img_test3 = cv2.imread("test3.png")#读入图像 cv2.imshow("test3",img_test3)#展示图片 cv2.waitKey(0) cv2.destroyAllWindows()#关闭窗口 kernel = np.ones((3,3),np.uint8)#设定处理的内核 erosion = cv2.erode(img_test3,kernel,iterations = 1)#腐蚀操作 cv2.imshow("erosion",erosion)#展示图片 cv2.waitKey(0) cv2.destroyAllWindows()#关闭窗口 pie = cv2.imread("pie.png") cv2.imshow("pie",pie) cv2.waitKey(0) cv2.destroyAllWindows() kernel = np.ones((30,30),np.uint8)#设定要处理的内核大小 erosion_1 = cv2.erode(pie,kernel,iterations = 1)#循环腐蚀1次 erosion_2 = cv2.erode(pie,kernel,iterations = 2)#循环腐蚀2次 erosion_3 = cv2.erode(pie,kernel,iterations = 3)#循环腐蚀3次 All = np.

无线WiFi模组技术,ESP32-S3物联网应用,家居生活智能化发展

随着无线产业从802.11g到下一代802.11n标准的演变,越来越多的产品开始采用功能强大的802.11n技术,因为它能提供更快更可靠的无线连接。 WiFi最主要的优势在于不需要布线,可以不受布线条件的限制,非常适合移动办公用户的需要,具有广阔市场前景。 什么是无线WiFi呢?WiFi俗称无线宽带,它的最大优点就是传输速度高,有效距离长,兼容性强,具有国际先进性的通讯方式。 ESP32-S3是一款集成2.4GHz Wi-Fi和Bluetooth5(LE)的MCU芯片,支持远距离模式。专为AIoT市场打造支持2.4GHz Wi-Fi和Bluetooth5(LE)强大的AI运算能力和安全加密机制。 WiFi技术能够应对家居控制和多媒体应用及各种在线服务的要求。不仅支持多个并发用户和设备,而且它的超强功能可保证服务质量,确保家庭中所有设备提供更佳用户体验,同时提供智能的内容管理和发布。 WiFi代表了“无线保真”,通过WiFi技术的运用,将中控产品成功在智能家居中使用。与普通家居相比,智能家居不仅具有传统的居住功能,提供舒适安全、高品位且宜人的家庭生活空间。 ESP32-S3搭载Xtensa®32位LX7双核处理器,主频高达240MHz,内置512KB SRAM(TCM),具有45个可编程GPIO管脚和丰富的通信接口。 ESP32-S3支持更大容量的高速Octal SPIflash和片外RAM,支持用户配置数据缓存与指令缓存。 随着人们生活水平的提高,家对大家来说已经不再仅仅是一个生活场所,而是修身养性,提高个人品味,体验高科技给日常生活带来的极品享受的场所。 ESP32-S3MCU增加了用于加速神经网络计算和信号处理等工作的向量指令。开发者们通过ESP-DSP和ESP-NN库使用这些向量指令,可以实现高性能的图像识别、语音唤醒和识别等应用。 想象一下准备欣赏电视节目,说“看电视新闻联播”这句话的时候,电视打开了,频道调整到中央一台,窗帘拉上了,房间的光线逐渐调整到最适宜看电视的程度…… 或者,在回家的路上,自动为您提前打开空调,调整室内温度到合适程度,接通通风装置,调节好室内的光线,把预先准备好的食物用微波炉加热。这样,一回来就可以享受到舒适的环境,或许还有一杯热茶。 ESP32-S3拥有45个可编程GPIO以及SPI、I2S、I2C、PWM、RMT、ADC、UART、SD/MMC主机控制器和TWAITM控制器等常用外设接口。其中的14个GPIO可被配置为HMI交互的电容触摸输入端。 此外,ESP32-S3搭载了超低功耗协处理器(ULP),支持多种低功耗模式,广泛适用于各类低功耗应用场景。 未来智能家居的发展,已不再局限于控制家里的电器设备,更多的将是提供一种实时在线的服务。此时我们的无线触摸屏,将不再是一个简单的触摸控制台,而是一个集成了多种应用程序的多媒体服务中心。 由原来的被动静止结构转变为具有能动智慧的工具,提供全方位的信息交互功能,帮助家庭与外部保持信息交流畅通,优化人们的生活方式,帮助人们有效安排时间,增强家居生活的安全性,甚至为各种能源费用节约资金。 ESP32-S3为物联网设备提供了完善的安全机制和保护措施,防止各类恶意攻击和威胁。它支持基于AES-XTS算法的flash加密、基于RSA算法的安全启动、数字签名和HMAC。 ESP32-S3还新增了一个“世界控制器(WorldController)”模块,提供了两个互不干扰的执行环境,实现可信执行环境或权限分离机制。 智能家居需要能让用户更简便地来管理家庭设备,通过WiFi来控制家用设备,免去了大量遥控器所带来的烦恼,更可以执行场景操作,使多个设备形成联动,从而给用户带来最大程度的高效、便利、舒适与安全。

Windows11 拒绝访问压缩(zipped)文件夹

最近windows10被自动升级到windows11,使用的一个工具zip压缩包突然就无法解压了,提示: 拒绝访问压缩(zipped)文件夹,提取文件之前,必须更改这个压缩文件夹的权限。 我的尝试:更改了这个压缩包文件的属性中的各个用户权限,增加了所有权限。结果依然提示如下这个。 最终解决方法: 关闭windows defender对文件的监控。 步骤:点击“开始”(窗口标志)---点击“设置”---左侧菜单中的“隐私和安全性”--- 之后自己看着点,将病毒和威胁保护下面的文件监控之类的都关闭。

Doris Rollup物化视图及应用实践

详情观看官网: Roll up与查询 && 物化视图 Rollup 与查询 在 Doris 里 Rollup 作为一份聚合物化视图,其在查询中可以起到两个作用: 索引聚合数据(仅用于聚合模型,即aggregate key) 但是为了命中 Rollup 需要满足一定的条件,并且可以通过执行计划中 ScanNdoe 节点的 PreAggregation 的值来判断是否可以命中 Rollup,以及 Rollup 字段来判断命中的是哪一张 Rollup 表。 名词解释 Base:基表。 Rollup:一般指基于 Base 表创建的 Rollup 表,但在一些场景包括 Base 以及 Rollup 表。 索引 前面的查询实践中已经介绍过 Doris 的前缀索引,即 Doris 会把 Base/Rollup 表中的前 36 个字节(有 varchar 类型则可能导致前缀索引不满 36 个字节,varchar 会截断前缀索引,并且最多使用 varchar 的 20 个字节)在底层存储引擎单独生成一份排序的稀疏索引数据(数据也是排序的,用索引定位,然后在数据中做二分查找),然后在查询的时候会根据查询中的条件来匹配每个 Base/Rollup 的前缀索引,并且选择出匹配前缀索引最长的一个 Base/Rollup。 -----> 从左到右匹配 +----+----+----+----+----+----+ | c1 | c2 | c3 | c4 | c5 |.

操作系统怎么把文件放到docker容器里

操作系统怎么把文件放到docker容器里 完美拷贝本地文件到docker容器: (1)查找容器 docker ps -a (2)确定我们的容器名,并获取容器长ID docker inspect -f '{{.ID}}' store-dev (3) 拷贝本地文件到容器 docker cp 你的文件路径 容器长ID:docker容器路径 示例: 假设容器名为68b99,现在要将宿主机/var/backup/nginx.zip文件拷贝到容器里面的/cert路径下面 在宿主机上执行命令: docker cp /var/backup/nginx.zip 68b99:/cert 更多相关教程,请关注PHP中文网docker教程栏目。 以上就是怎么把文件放到docker容器里的详细内容,更多请关注php中文网其它相关文章!

HTTP协议的详细介绍

目录 一、何为HTTP协议 1.HTTP协议详细信息 2.HTTPS协议: 3.HTTP协议的特点 二、HTTP协议 请求方式 HTTP1. 0定义了三种请求方法: 1.GET 2.POST 3.HEAD HTTP1. 1 新增了五种请求方法: 1.OPTIONS 2.PUT 3.DELETE 4.TRACE 5.CONNECT 三、HTTP协议状态码 一、何为HTTP协议 所谓协议,就是指双方遵循的规范。 1.HTTP协议详细信息 HTTP协议,就是浏览器和服务器之间进行“沟通"的一种规范。我们在看空间,刷 微博...都是在使用http协议,当然,远远不止这些应用。HTTP协议是基于TCP/IP的应用层协议HTTP协议,即 超文本传输协议(Hypertext transfer protocol) 。是一种详细规定了浏览器和万维网(WWW =World Wide Web)服务器之间互相通信的规则,通过因特网传送万维网文档的数据传送协议。 HTTP是一个应用层协议,由请求和响应构成,是一个标准的客户端服务器模型。HTTP是一个无 状态的协议。 HTTP默认的端口号为80, HTTPS的端口号为443。 浏览网页是HTTP的主要应用,但是这并不代表HTTP就只能应用于网页的浏览。 HTTP是一种协议, 只要通信的双方都遵守这个协议,HTTP就能有用武之地。比如咱们常用的QQ,迅雷这些软件,都会使用HTTP协议(还包括其他的协议)。 2.HTTPS协议: HTTPS协议作为TCP/IP模型中应用层的协议也不例外。HTTP协议通常承载于TCP协议之上,有时也承载于TLS或SSL 协议层之上,这个时候,就成了我们常说的HTTPS。如下图:http是属于“应用层的协议",而且是基于TCP/IP协议的。 3.HTTP协议的特点 • 简单快速:客户向服务器请求服务时,只需传送请求方法和路径。由于HTTP协议简单,使得 HTTP服务器的程序规模小,因而通信速度很快。 • 灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。 • HTTP 0.9和1.0使用非持续连接:限制每次连接只处理一个请求,服务器处理完客户的请求,并收到客户的应答后,即断开连接。HTTP 1.1使用持续连接:不必为每个web对象创建一个新的连 接,一个连接可以传送多个对象,采用这种方式可以节省传输时间。 • 无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。 •支持B/S及C/S模式。 4.HTTP协议的工作流程 首先客户机与服务器需要建立连接。只要单击某个超级链接,HTTP的工作开始。建立连接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号,后边是MIME信息包括请求修饰符、客户机信息和可能的内容。服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、 一个成功或错误的代码,后边是MIME信息包括服务器信息、实体信息和可能的内容。客户端接收服务器所返回的信息通过浏览器显示在用户的显示屏上,然后客户机与服务器断开连接。 二、HTTP协议 请求方式 根据HTTP标准,HTTP请求可以使用多种请求方法。 HTTP1. 0定义了三种请求方法: 1.GET GET方法的作用在于获取资源。 2.POST POST方法的主要作用是执行操作。 3.

简易的计算器,实现两个数的加减乘除。

写出四个方法:加减乘除 利用循环+switch进行用户交互 传递需要操作的两个数 输出运行结果 /* 1.写出四个方法:加减乘除 2.利用循环+switch进行用户交互 3.传递需要操作的两个数 4.输出运行结果 */ public static void main(String[] args) { while (true) { Scanner scanner = new Scanner(System.in); System.out.println("请输入需要求解的式子:"); double a = scanner.nextDouble(); String c = scanner.next(); double b = scanner.nextDouble(); System.out.print("式子的结果为: "); switch (c) { case "+": System.out.println(a + "+" + b + "=" + add(a, b)); break; case "-": System.out.println(a + "-" + b + "=" + sub(a, b)); break; case "

c语言学习笔记(9)AT指令时经常用到 -c语言库函数

1:查找对应的字符串 char *p_data =null; //找到"+TEST_RXLORA" 这个首地址 p_data = strstr((const char *)re_data, "+TEST_RXLORA"); //查找十进制数值(int *)&lora_rssi[rssi_cnt]) if(sscanf(p_data, "+TEST_RXLORA:%d:", (int *)&lora_rssi[rssi_cnt])) 2: 字符串转十六进制 如:“112233” 0x11 0x22 0x33 static char *mem_strtoehx(const char *in_str, char *out_hex, int len) { int i,j; char ch; const char *p = in_str; for(i = 0, j = 0; i < len; p++, i++) { ch = *p; if (isdigit(ch)) ch -= '0'; else if (isxdigit(ch)) ch -= isupper(ch) ?

git 使用一点通 log 日志部分

名词解释: origin:远程仓库并默认以 “origin” 为简写 origin 仓库名称 master:分支名称 Git 基础 - 查看提交历史 1 git log git log 有许多选项可以帮助你搜寻你所要找的提交, 下面我们会介绍几个最常用的选项。 其中一个比较有用的选项是 -p 或 --patch ,它会显示每次提交所引入的差异(按 补丁 的格式输出)。 你也可以限制显示的日志条目数量,例如使用 -2 选项来只显示最近的两次提交: $ git log -p -2 想看到每次提交的简略统计信息,可以使用 --stat 选项: $ git log --stat 另一个非常有用的选项是 --pretty。 这个选项可以使用不同于默认格式的方式展示提交历史。 这个选项有一些内建的子选项供你使用。 比如 oneline 会将每个提交放在一行显示,在浏览大量的提交时非常有用。 另外还有 short,full 和 fuller 选项,它们展示信息的格式基本一致,但是详尽程度不一: $ git log --pretty=oneline 最有意思的是 format ,可以定制记录的显示格式。 这样的输出对后期提取分析格外有用——因为你知道输出的格式不会随着 Git 的更新而发生改变: $ git log --pretty=format:"%h - %an, %ar : %s"

远程服务器Pycharm报错:can′t get remote credentials for deployment server

在调用远程服务器上的python解释器时,各种网上介绍的配置都已经配好了,但是程序却无法运行,遇到 can’t get remote credentials for deployment server 的错误。试了很多网上的方法,都无法解决我的问题,可能造成这个错误的原因比较多吧。最终通过自己的尝试,解决了自己的问题。记录下来,仅供大家参考。 首先,选择 File -> Settings -> Project Interpreter ,点击选择解释器的向下箭头,选择 show all, 选中所使用的远程python解释器,点击右边的编辑按钮,如下图所示 可看到现在默认选择的是Deployment configuration, 将其修改为SSH Credential,填写相关设置后,点OK保存。然后程序就可以正常运行了。 造成这个错误的原因好像有很多,在其他方法不行的时候,可以试试这个办法。 参考文献 [1]参考

C++for循环——逢七过

用for循环实现逢七过 逢七过游戏:依次输出1~100直接的数,当数的个位或十位包含7、该数能整除7时输出“过”。 解题步骤: 首先借助循环找到1~100之间的数; 其次找到“过”的条件: 1:该数的个位或十位包含7 (对该数取模于10可以找到该数的个位; 对该数除10可以找到该数的十位。) 2:该数能整除7 (对该数取模于7等于0可以判断该数能整除7) 最后依次输出 总代码: #include<iostream> using namespace std; int main() { for (int i = 1; i <= 100; i++) { //7的整数倍;包含7都“过” if (i % 7 == 0 || i % 10 == 7 || i / 10 == 7) { cout << "过 "; } else{ cout << i <<" "; } //每输出5个数进行换行 if (i % 5 == 0) { cout <<'\t'<< endl; } } system("

小型企业网络设计与规划

《计算机网络》课程设计报告 1 前言 随着现代科学技术和互联网的迅猛发展,以计算机和通讯技术为基础的管理系统正处于高速发展的时期。同时,伴随着经济文化水平的显著提高,人们对生活质量的要求也在不断提升,对工作的环境以及要求也日益提高。一个园区内进行办公的人们之间需要相互的通信,同时在相互通信的过程中又能确保信息通畅与保密,于是对此园区的一个网络规划与设计应运而生。 本课题简要地讨论了企业网络规划设计中涉及到的网络技术、规划设计方法、等问题﹐为企业网络的规划、设计和升级改造等方面在技术及应用上提供参考,以使在建或规划中的园区网络具备较高的整体性能。通过eNSP模拟企业园区网中的接入交换机、汇聚交换机等网络设备,并在网络设备上采用VLAN虚拟局域网、MSTP多生成树协议、[1] LACP链路聚合和VLAN聚合等多种协议配置,使构建的网络不仅具有较高的通信可靠性,并且能够满足企业的多业务需求,时也要实现高利用率高可靠性,从一些闲置的设备中提高资源的利用率,不同的流量在不同的链路上传输,链路得到充分利用,实现[3] 流量的负载分担。 通过对园区网络的分析,从性能和价值上满足园区网络的需求﹐然后对企业园区网络进行划分vlan、设置管理域等配置,不断的优化企业的网络,从而达到企业安全、快速访问网络资源的目的。 2 园区网项目背景和需求分析 2.1项目背景 某公司因业务发展需要,在园区A申请了一栋楼作为公司总部,准备创建一张全新的园区网络,考虑到公司可持续发展,决定也在建立园区B建立分部,公司园区A总部设有研发部、市场部、行政部、信息中心、网络管理组和访客接待中心。而访客接待中心提供Wi-Fi服务供访客使用。公司园区B分部,设有销售部。为方便公司开展业务,需要自动获取公司DNS服务器IP地址。公司已经申请了一条互联网专线并配有一个公网IP,希望所有员工都能访问Internet。后期规划所有设备可由网络管理员进行远程管理。建立IPV4与IPV6的双栈网络。 2.2项目需求分析 1.总部园区A和园区B要求网络拓扑简单,维护方便,网络具有扩展性和冗余性。 2.总部园区A提供有线接入供员工办公使用,分别为市场部、研发部、行政部、信息中心、网络管理组。而访客接待中心提供Wi-Fi服务供访客使用,做到简单的网络流量管理,提供一定的安全性 3.园区A和园区B为方便员工获取DNS服务器IP地址,可以采用DHCP方式为该局域网自动分配IP及DNS地址。 4.园区A要求核心交换机具有冗余性,高可靠性,扩展性。配置资源服务器。 5.公司有两个公网IP,园区A和园区B各部门所有员工都有访问Internet的需求,可以在出口路由器上配置网络地址转换。 6.为方便网络管理员对设备进行远程管理,需要启用所有设备的SSH服务。 7.为了公司发展园区A和园区B之间还需要采用IPV4和IPV6的双栈技术。 8.园区A和园区B之间的IPV4通信采用VPN的方案。 3 项目设计规划 3.1 项目设计方案 3.1.1 公司内网设计 采用三层结构组网,接入层,核心层,出口层。[4].使用MSTP+VRRP实现网关冗余,流量的负载均衡。[5].开启DHCP功能,DHCP也做成冗余备份,防止单台设备故障,造成DHCP故障,提高网络的可靠性。核心层之间的交换机配置链路聚合,实现链路的冗余性。VRRP6和DHCPV6同理做成以上配置需求。将这些服务都放在三层核心交换机,这样可以减轻出口路由器的负担,因为出口路由器将要承载大量的路由。在三层核心交换机上,旁挂资源服务器,方便公司方员工访问和上传公司的内部资源;旁挂无线AC控制器,方便网络管理员维护无线网络,也为公司的后续发展提供扩展性。内网IPV4网络使用OSPFV2协议,联通内网,IPV6网络使用OSPFV3协议联通内网;[6].NAT出口网关设置,使用静态路由,用 Easy IP 直接使用接口的公网地址作为私网转换后访问公网的地址,不需要配置 NAT 地址池。分部园区B也是采用相同的组网方式。 3.1.2 园区A和园区B之间通信设计 由于运营商网络没有IPV6网络,因此园区A和园区B均采用了IPV4和IPV6的双栈设计,IPV4之间的通信配置为GRE over IPsec VPN;IPV6之间的通信设计为IPv6 over IPv4 GRE隧道。 3.1.3 项目拓扑设计 图3-1 网络拓扑图 3.2 子网划分及IP地址 3.2.1 子网划分 园区A: 设备名称 端口 链路类型 VLAN参数 LSW1 GE0/0/1 Trunk Allow pass: 11 to 16 GE0/0/2 Trunk Allow pass: 11 to 16

Hadoop高手之路--08--Sqoop数据迁移

Sqoop数据迁移 一、sqoop概述 1、简介 Sqoop是Apache的一款开源工具,Sqoop主要用于在Hadoop和关系数据库或大型机之间传输数据,可以使用Sqoop工具将数据从关系数据库管理系统导入(import)到Hadoop分布式文件系统中,或者将Hadoop中的数据转换导出(export)到关系数据库管理系统。 2、原理 二、sqoop的安装配置 1、下载 2、上传服务器 3、解压 4、配置 标准的apach项目文件 将模板配置文件拷贝一份 cp sqoop-env-template.sh sqoop-env.sh 修改配置文件 5.测试 bin/sqoop list-databases \ -connect jdbc:mysql://localhost:3306/ \ --username root \ --password root \ 出现错误,无驱动包 6、解决错误 需要上传MySQL的java驱动包 7、再次执行命令 bin/sqoop list-databases \ -connect jdbc:mysql://hadoop01:3306/ \ --username root \ --password Root123! \ 三、sqoop指令介绍 四、数据的导入 1、导入命令 bin/sqoop import \ -connect jdbc:mysql://hadoop01:3306/azkaban \ --username root \ --password Root123! \ --target-dir /azkaban/execution_logs \ --table execution_logs \ --num-mappers 1 2.启动hadoop 3.

CICD之 gitlab和gtilab runner

gitlab官网地址 官网文档地址 https://docs.gitlab.com/runner/install/docker.html 一。gitlab 1。gitlab安装 方式一:rpm包安装(centos) 1,下载rpm包 清华源软件镜像站https://mirrors.tuna.tsinghua.edu.cn/ linux命令wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ee/yum/el7/gitlab-ee-12.9.0-ee.0.el7.x86_64.rpm --no-check-certificate 或者windows电脑访问软件直接下载rpm包然后上传linux 2.运行rmp包 rpm -ivh gitlab-ce-12.9.0-ce.0.e17.x86_64.rpm 3.修改项目仓库存储地址 vim /etc/gitlab/gitlab.rb,搜索git_data_dirs,修改项目存储路径 gitlab-ctl reconfigure,使生效 4。启动 gitlab-ctl start //启动 gitlab-ctl status //查看状态 gitlab-ctl stop //停止 方式二:docker安装 1.gitlab文件夹下创建三个文件夹作为映射文件夹(容器卷) :config logs data 2,拉取镜像:docker pull gitlab/gitlab-ce 3.运行镜像 docker run -d --hostname 192.168.61.146 //有hostname,不然后面创建项目的克隆地址是随机的 -p 443:443 -p 80:80 -p 222:22 --name gitlab-ce --restart always -v /home/piaoransheng/gitlab/config:/etc/gitlab -v /home/piaoransheng/gitlab/logs:/var/log/gitlab -v /home/piaoransheng/gitlab/data:/var/opt/gitlab gitlab/gitlab-ce 4.修改项目仓库存储地址 vim /etc/gitlab/gitlab.rb,搜索git_data_dirs,修改项目存储路径 gitlab-ctl reconfigure,使生效 5.启动 docker start gitlab-ce //启动 docker stop gitlab-ce //停止下· docker rm gitlab-ce //删除 6.

Docker -- redmine项目管理工具(Redmine 是一个开源的, 基于Web的项目管理和缺陷跟踪工具. 它用日历和甘特图辅助项目及进度可视化显示. 同时它又支持多项目管理)

一、redmine项目管理工具 Redmine 是一个开源的, 基于Web的项目管理和缺陷跟踪工具. 它用日历和甘特图辅助项目及进度可视化显示. 同时它又支持多项目管理. Redmine是一个自由开放源码软件解决方案,它提供集成的项目管理功能, 问题跟踪,并为多个版本控制选项的支持. Redmine是一个有用的Scrum和敏捷的选择. 由于Redmine的设计受到Trac的较大影响,所以它们的软件包有很多相似的特征. Redmine建立在Ruby on Rails的框架之上, 他可以跨平台和数据库 。 二、Redmine安装 docker run -itd --hostname "jn-mysql" -p 10003:3306 \ --name "mysql" \ -v /root/docker_vol/mysql/data:/var/lib/mysql \ -v /root/docker_vol/mysql/conf:/etc/mysql/conf.d \ -v /etc/localtime:/etc/localtime:ro \ -e MYSQL_ROOT_PASSWORD=P@ssword \ -e TZ=Asia/Shanghai \ mysql docker run -itd --hostname "jn-redmine" -p 10006:3000 \ --name "redmine" \ -e REDMINE_DB_MYSQL=jn_mysql \ -e REDMINE_DB_USERNAME=redmine \ -e REDMINE_DB_PASSWORD=redmine \ -e REDMINE_SECRET_KEY_BASE=supersecretkey \ --link=mysql:jn_mysql \ -v /root/docker_vol/redmine/files:/usr/src/redmine/files \ -v /root/docker_vol/redmine/log:/usr/src/redmine/log \ -v /root/docker_vol/redmine/data:/home/redmine/data \ -v /root/docker_vol/redmine/plugins:/usr/src/redmine/plugins \ -v /root/docker_vol/redmine/config/configuration.

echarts中dataZoom来控制默认显示固定条数数据(可自定义)

先说需求,在开产品需求会时,让echarts的柱状图和折线图默认显示6条数据,其它的通过剩余拉动显示 将剩余的通过两边按钮拖动显示 局部代码 // 想显示成几条那么就把6改成几就可以了,resultarr是横坐标的长度(倒序排列) let resultarr = [] var start = resultarr.length - 6 var end = resultarr.length - 1 dataZoom: [ { show: true, type: 'slider', handleSize: 32, // 两边的按钮大小 startValue: start, // 重点在这 -- 开始的值 endValue: end // 重点在这 -- 结束的值 }, { // zoomLock: true, // 这个开启之后只能通过鼠标左右拉动,不能滚动显示 type: 'inside' } ], 全部代码 var option = { title: { left: 'center', text: data.title // 标题 }, tooltip: { trigger: 'axis', axisPointer: { type: 'shadow' } }, dataZoom: [ { show: true, type: 'slider', handleSize: 32, // 两边的按钮大小 startValue: start, // 重点在这 -- 开始的值 endValue: end // 重点在这 -- 结束的值 }, { // zoomLock: true, // 这个开启之后只能通过鼠标左右拉动,不能滚动显示 type: 'inside' } ], legend: { right: '8%' }, grid: { // 显示的容器 left: '3%', right: '4%', bottom: '6%', containLabel: true }, xAxis: { name: '物流商', type: 'category', offset: 7, data: resultarr // x轴要显示的内容-----就是这儿要根据显示的长度来自定义 // data: data.

IDEA坑爹的编译问题

Maven的本地命令行mvn clean install可以编译过去,但是IDEA的编译是各种编译不过去的问题 检查了以IDEA的MAVEN默认设置,并不是指向本地的MAVEN仓库,而是自己的默认值。

idea git log 面板

git log 面板 解释 cherry pick 参考这里 reset current branch to here 情形1:提交了多次错误的提交,想回滚到之前的某次提交。 情形2:合并了错误的分支,想回滚到合并之前。 状态: 修改前,修改后 add 前(蓝色),add 后(蓝色) soft 恢复到 add后,文件为蓝色,git status 显示文件都是绿色。 mixed 恢复到 修改后add前,文件蓝色,git status 显示红色 hard 恢复到修改前,git status 什么都不显示,暂存区被清空 --merge --keep 这两个选项的效果是保留修改的差异部分。 如果回退的内容与保留的修改存在冲突(有相同文件)则命令会失败.。 git reset --merge 保留 工作区和index之间的差异。 git reset --keep 保留工作区和HEAD之间的差异。 revert commit 同样是回滚到所选提交记录,但是会产生一个 commit,将所选 commit 的修改改到修改之前的状态 参考 idea如何使用【Revert Commit】 undo commit 恢复到 commit 之前的 暂存区,修改的文件已经 add 了 edit commit message 可以修改自己 commit的 message

Quartus II下载器件库

Quartus II下载器件库 1、在浏览器中输入网址 https://fpgasoftware.intel.com/18.1/?edition=standard&platform=windows, 或https://fpgasoftware.intel.com/ 进入如下图所示界面。 2、在版本类型和版本中输入Quartus II所对应的版本 3、输入完版本后,界面下方会出现对应的器件库,选择自己想要下载的器件库,点击后面的下载按钮,这里以下载“Arria II device support”为例。 4、点击“I Agree” 5、进入下图所示界面,点击“Sign In”(没有注册的要先注册)。 6、进入新界面后,重新选择版本类型和版本,并点击要下载的器件库,则开始下载。 7、可以在Quartus II安装目录下新建文件夹用来存放下载的器件库。 8、打开Device Installer来安装器件库 9、点击“Next” 10、选择存放器件库的路径,然后点击“Next” 11、勾选要安装的器件库,然后点击“Next” 12、点击“Next” 13、等待安装完成 14、安装完成,点击“Finish” 15、重启Quartus II软件,在Device里就能看见所安装的器件了。

【论文阅读】Recurrent Neural Network Regularization

本来是打算搜搜RNN或者LSTM的原文,结果arxiv上没搜到(求求,帮帮),然后就搜到知乎上一个回答: 心想完蛋,年份跨度比较远的论文读起来会不会很费劲啊。结果搜到LSTM的原论文了(论文链接:https://www.bioinf.jku.at/publications/older/2604.pdf),一看,30页还有好多看不懂的公式与图,就突发感慨:啊,有些知识还是看看二创的比较好,LSTM这种还是果断放弃吧,之后有时间找找比较好的博客之类的看,http://colah.github.io/posts/2015-08-Understanding-LSTMs/这个感觉就不错。 废话说多了。今天看的这个是《Recurrent Neural Network Regularization》,加上参考文献一共就8页,讲的是RNN及其变体怎么进行正则化以防止过拟合的方法。 论文地址:[1409.2329v5] Recurrent Neural Network Regularization (arxiv.org) 以下是正文: 这篇文章的主旨是:dropout最好只用在从当前时间步的输入到输出的连接上,而不应用在递归连接上(即与隐藏状态或者历史信息相关的计算)。 然后,恭喜你已经看完了整个文章。 引言 正则化最常用的一种方法是dropout,但是RNNs却不怎么适合应用dropout(可能是实验的结果),也是因此,RNNs只能使用小网络以避免过拟合,这很大程度上限制了RNN的能力。 这篇文章就是讲作者如何改造应用dropout的方式以帮助RNN从dropout中受益。 相关工作 这一节,作者引用了很多相关的工作的文献,很不巧,我一个都没看过。 关于为什么RNN不适合用dropout,有一个文献提到,RNN不适合dropout的原因是因为递归过程会放大噪声。 其他的文献就一点都不懂啦 正则化LSTM 作者首先贴心地带着我复习了一下RNN和LSTM的基础知识,之后开门见山地讲这篇文章的主要思想:dropout只应用在非递归连接上,用图展示就是: 虚线是应用dropout的连接,实线是不应用dropout的连接。作者下面给出的公式表明,dropout进行mask的对象是每一层的输入向量(有的论文里进行mask的对象是权值矩阵): 为什么这样呢?我理解作者的意思是:这样做,dropout引入的不确定性不会伤害到整个网络记住过去信息的能力,即关于记忆的部分不会被引入的不确定性影响。换句话说,可以看到,每一个过往的输入与当前的输出的连接都经过了L+1次dropout(L是层数),这个次数是固定的,且不随时间差的改变而改变。而标准的dropout扰乱了递归连接,使得LSTM更难学习存储长期信息。 实验 作者在四种领域里进行实验:language modeling、speech recognition、machine translation、image caption generation。结果的数据就不多赘述了,不过我对作者进行的实验有一些怀疑,因为作者设置的大LSTM与小LSTM的差别只是每一层的单元数不同,但是我想,正常的第一反应不应该是增加层数吗,毕竟相比更宽,更深才是深度学习的主流趋势吧。而且作者进行对比的实验的其他参数设置等没有做到对照实验要求的一致,不太明白为什么。 不过我看作者实验过程提到一句,大概意思是第一个minibatch的初始隐藏状态被初始化为0,此后的minibatch的初始隐藏状态都以上一个minibatch的最后一步的隐藏状态作为初始化。我没想过还能这样玩,学到了,以后可以试试。 总结 哦瓦力马苏,不写啦。 没啥不懂的地方,这篇文章读得特别顺,45分钟就读完了。 感谢作者!

Pandas中loc和iloc函数用法详解(源码+实例)

oc函数:通过行索引 "Index" 中的具体值来取行数据(如取"Index"为"A"的行) iloc函数:通过行号来取行数据(如取第二行的数据) 本文给出loc、iloc常见的五种用法,并附上详细代码。 1.利用loc、iloc提取行数据 import numpy as np import pandas as pd #创建一个Dataframe data=pd.DataFrame(np.arange(16).reshape(4,4),index=list('abcd'),columns=list('ABCD')) In[1]: data Out[1]: A B C D a 0 1 2 3 b 4 5 6 7 c 8 9 10 11 d 12 13 14 15 #取索引为'a'的行 In[2]: data.loc['a'] Out[2]: A 0 B 1 C 2 D 3 #取第一行数据,索引为'a'的行就是第一行,所以结果相同 In[3]: data.iloc[0] Out[3]: A 0 B 1 C 2 D 3 2. 利用loc、iloc提取列数据 In[4]:data.

springcloud 整合alibaba nacos步骤快速上手教学

springcloud 整合alibaba nacos (一、nacos注册中心) 1.导入nacos-discover依赖 <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> <version>2.1.4.RELEASE</version> </dependency> 在导入依赖的时候最好注明其版本号,以防止maven无法下载 注:springcloud在<spring-cloud.version>2021.0.0</spring-cloud.version>该版本时不支持nacos自带的负载均衡器ribbon,需要在nacos中祛除ribbon依赖 <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> <version>2.1.4.RELEASE</version> <exclusions> <exclusion> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-ribbon</artifactId> </exclusion> </exclusions> </dependency> 2.启动nacos服务 3.配置application.yml spring: cloud: nacos: discovery: server-addr: 127.0.0.1:8848 注:127.0.0.1:8848是nacos服务的地址,只填这个就行 application: name: 自己命名一个服务名 不命名的话在nacos里找不到 4.启动项目,记得要添加注解 @EnableDiscoveryClient 5.输入nacos地址 http://127.0.0.1:8848/nacos 即可在服务列表里看到咱们注册的服务了 (二、nacos配置中心) 1.添加nacos-config依赖 <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> <version>2.1.4.RELEASE</version> </dependency> 2.启动nacos服务 3.配置bootstrap.yml spring: application: name: 自己命名一个服务名 cloud: nacos: config: server-addr: 127.0.0.1:8848 namespace: 这个可不填,后续会讲到怎么用 4.启动项目 5.打开 http://127.0.0.1:8848/nacos 在配置列表中点击最右测的+号 Data ID可在项目启动时查看 如果没有这个提示需要导入bootstrap依赖 <dependency> <groupId>org.

ctf——pdf

题目: 解析:下载附件1,是一个PDF,打开后如图: 发现“只有”一张图片,但是当把图片移动后就会发现flag其实隐藏在图片下面: FLAG: flag{security_through_obscurity}

自启动失败的问题——自己的随笔

开机自启动,再/etc/rc.local中,添加运行的shell脚本test1.sh,第一次设置成功,没啥问题。 但是,当我想改为运行脚本test2.sh,遇到如下问题: 1.开机自启动,执行rc.local的过程中,死活找不到test2.sh!至今也不知道为啥找不到。 于是,为了探索问题所在,我在rc.local中,添加了一句touch test2.sh,用来新建一个test2.sh,奇怪的事情出现了——我居然找不到新建的test2.sh。 解决方法: 使用touch test2.sh手动在命令行创建。不要从外部windows系统创建再copy进来。 2.test.sh中,cd /home/xxx,报错,无法执行这个命令。 我有惊讶到了,这明明是最简单的命令了。也能出错,TMD。 参考代码,如下代码没问题。但不保证。 #!/bin/bash PWD=`dirname $0` cd $PWD cd ./uphead source /home/just01/anaconda3/bin/activate uphead nohup /home/just01/anaconda3/envs/uphead/bin/python head_up_down.py & CUDA_VISIBLE_DEVICES=1 nohup /home/just01/anaconda3/envs/uphead/bin/python head_up_down.py &

vim搜索高亮设置

高亮有两种方法 1)临时高亮 vim file文件 输入 :set hlsearch 2)永久高亮 vim ~/.vimrc 文件中添加set hlsearch 取消搜索高亮 :set nohlsearch 或者简写的:noh

【蓝桥嵌入式笔记】第一个工程 HAL_01_LED_TEST

一、ODR、BSRR、BRR寄存器 1.ODR 可读可写寄存器:既能控制管脚为高电平,也能控制管脚为低电平。 管脚对于位写1 GPIO管脚为高电平,写 0 为低电平。 2.BSRR 只写寄存器:既能控制管脚为高电平,也能控制管脚为低电平。 对寄存器高 16bit 写1 对应管脚为低电平,对寄存器低16bit写1对应管脚为高电平。写 0 无动作。 3.​​​​​​​BRR 只写寄存器:只能改变管脚状态为低电平,对寄存器 管脚对于位写 1 相应管脚会为低电平。写 0 无动作。 二、HAL库函数 1.void HAL_GPIO_TogglePin (GPIO_TypeDef * GPIOx, uint16_t GPIO_Pin) 翻转所选引脚的状态 void HAL_GPIO_TogglePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin) { /* Check the parameters */ assert_param(IS_GPIO_PIN(GPIO_Pin)); //检查参数是否有效 if ((GPIOx->ODR & GPIO_Pin) != 0x00u)//判断当前引脚状态与所选引脚位是否为0 { GPIOx->BRR = (uint32_t)GPIO_Pin; //如果为1,则通过BRR置0 } else { GPIOx->BSRR = (uint32_t)GPIO_Pin;//如果为0,则通过BSRR置1 } } ODR是引脚输出值,与所选引脚进行与操作,若当前状态为1,则通过BRR置0;若当前状态为0,则通过BSRR置1。 ​​​​​​​2.void HAL_GPIO_WritePin (GPIO_TypeDef * GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState) 将所选引脚置0或置1

简单几步,用Visual Studio写出并运行一个c程序

1.首先请确保安装了相应的IDE,作者使用的VS版本为最新(已目前文章发布时间为准)的2022版本,而版本只要不是太远古本方法通用。 2.创建一个新项目 打开VS,点击创建新项目 找到c++的空项目,点击使其创建 更换项目名称,点击右下角创建 3.运行一个c程序 光标定位在源文件,右键添加一个新建项 将扩展名 .cpp 改成 .c ,之后点击右下角添加 添加成功 点击左上角项目,属性 c/c++ —> 常规 —> SDL检查 —> 改成 ‘否’ 确定一下 写一个c程序并执行 本人也是菜鸡一枚,第一次写博客/wul,如有不足之处,还请各位看官多多包涵,指点在下。

SpringCould资料说明

第一部分:课前资料说明 博客地址:https://blog.csdn.net/maitian_2008 天翼云盘:https://cloud.189.cn/t/MFJVf23u22Un 访问码:tw3w (不限速) 百度网盘:https://pan.baidu.com/s/1uqizNjVidxsAwr_bUGpztg 提取码:geos (普通用户限速) 代码共享:https://gitee.com/JasonCN2008/ java开源项目:ruoyi.vip,renren.io 第二部分: 微服务架构最佳实践 课程目标: 1)了解微服务诞生的背景 2)了解SpringCloud微服务规范 3)掌握Spring Cloud Alibaba 解决方案中的核心组件的基础应用 4)掌握Spring Cloud Alibaba 解决方案下单点登陆系统的设计以及解决方案. 核心技能点: 1)基于Nacos 的服务注册、发现以及配置。 2)基于RestTemplate,Feign实现服务间的远程调用。 3)基于Ribbon实现服务调用时的负载均衡设计 4)基于Sentinel实现服务的限流,降级。 5)基于Spring Cloud Gateway实现API访问入口的统一管理。 6)基于Spring Security,JWT,Oauth2实现统一的单点登陆系统(SSO)。 授课文档及顺序: https://blog.csdn.net/maitian_2008/category_11190676.html 第三部分:Docker技术最佳实践 课程目标: 1)了解Docker诞生的背景 2)了解Docker技术的优势,劣势。 3)熟悉Docker的基本架构设计。 4)掌握Docker平台下的镜像,容器,数据卷等核心概念 5)掌握Docker环境下镜像的下载,查看,保存,导入,删除等基本操作 6)掌握Docker环境下容器的启动,进入,查看,停止,重启,日志查看等基本操作 7)掌握Docker平台下数据卷及目录挂载的意义,数据卷的创建,查看以及应用方式 8)掌握Docker平台下镜像的制作,Dockerfile的基本语法结构。 9)掌握Docker平台下常用的镜像的安装,例如mysql,redis,nginx,nacos等。 10)掌握Docker平台下容器互联方式的基本实现。 核心技能点: 1)docker 的安装,服务的启动,重启,停止,开机重启等基本指令的应用 2)docker 平台下镜像(image),容器,数据卷,网络等基本操作 3)docker 平台下常用服务(mysql,redis,nginx,nacos)的安装及基本应用。 授课文档及顺序: https://blog.csdn.net/maitian_2008/category_11285781.html?spm=1001.2014.3001.5482 第四部分:Redis技术最佳实践 课程目标: 1)了解redis诞生的背景 2)熟悉Redis数据库的基本特点 3)熟悉Redis的常用数据类型及基本指令的操作 4)掌握Java中操作Redis的核心API以及应用过程 5)掌握Redis在Java项目中的应用实践(例如投票系统,单点登陆系统等) 6)掌握Redis中持久化的目的,持久化的方式及各自的特点。 7)掌握Redis中的事务处理方式,常用指令的应用。 8)掌握Redis中的主从架构,哨兵机制,集群架构的设计及搭建过程。 核心技能点: 1)Redis在docker环境下安装,登陆,退出。

【论文阅读】Network In Network

俗话说得好,三十天打鱼二十九天晒网(误)。前几天觉着曼昆的那个《经济学原理》好好看就去看闲书去了。这几天突然心生愧疚就赶紧来弥补一下。 今天看的是Network In Network,是在读inception v1的论文时遇见的。 论文地址:https://arxiv.org/abs/1312.4400 以下是正文: 我觉着摘要就写得很明白了,这是摘要一部分的原文: “The conventional convolutional layer uses linear filters followed by a nonlinear activation function to scan the input. Instead, we build micro neural networks with more complex structures to abstract the data within the receptive field. We instantiate the micro neural network with a multilayer perceptron, which is a potent function approximator. The feature maps are obtained by sliding the micro networks over the input in a similar manner as CNN; they are then fed into the next layer.

C语言求阶乘

阶乘指从1乘以2乘以3乘以4一直乘到所要求的数。 例如所要求的数是4,则阶乘式是1×2×3×4,得到的积是24,24就是4的阶乘。 现在我们来求一下5的阶乘 我们只需要设置一个循环,,在设置一个变量为1,从1开始与变量相乘,相乘的结果再存入变量,将上面的步骤循环五次即可。 代码如下 #include<stdio.h> int main() { int i = 0; int sum = 1; for (i = 1; i <= 5; i++) { sum = sum * i; } printf("%d", sum); } 如果这里大家会求一个数的阶乘了,那大家可以再试一下如何求一到5的阶乘相加 我们可以先求1的阶乘,再求2的阶乘,再求3的阶乘,知道所有数的阶乘求完,再把这些求得的结果相加即可。 所以我们可以设置成一个循环,将上面的结果相加 代码如下: #include<stdio.h> //求一到五的阶乘相加 int main() { int a, b, sum=0, c = 1; for (a = 1; a <= 5; a++) { c=1; //求完一个数的阶乘时,要重新赋值为1 for (b = 1; b <= a; b++) { c = c * b; } sum = sum + c; //将每次求出阶乘的结果存入变量sum中 } printf("

MyBatis配置返回boolean类型值

MyBatis配置返回boolean类型值 在开发中,我们可能会遇到这样的需求:在对数据进行操作时,先判断有没有对应的记录,如果有,再进行操作。实现的方式有多种,如下方式采用mybatis实现。 Mapper方法 boolean existsOrder(@Param("orderNumber") String orderNumber); xml代码 <select id="existsOrder" parameterType="String" resultType="_boolean"> <![CDATA[ select count(`id`) from `order` where `order_number` = #{orderNumber} ]]> </select> 当SQL执行的结果是0,那么返回false;如果结果是非0,无论是正数还是负数(当然上述例子不会产生负数)都为true tip:这种方式存在局限性,请根据实际需求选择

python解决 InvocationException: GraphViz’s executables not found :个人总结的小经验

在进行机器学习算法中的决策树算法可视化的过程中,使用pydotplus可视化决策树过程中出现了报错,错误如下: 下面简单介绍引用该库我做的准备: 1. 下载并安装Graphviz,参考下面这条博客,感谢大佬分享。 (19条消息) pydotplus安装和基本入门_默的博客-CSDN博客_pydotplus安装 注意这里安装的时候会问你要不要把Graphviz加入到Path里面去,个人的建议是不要,因为可能会让电脑管家把这个操作识别为木马病毒从而阻止。我是一路按“下一步”安装完成之后自己手动在Path里加了环境变量 2. 在代码里面引用这两个库,代码如下: import pydotplus import os os.environ["PATH"] += os.pathsep + 'C:\Program Files\Graphviz\bin' //注意这里应该是你安装Graphviz的路径 3. 决策树模型参考: ​​​​​​(19条消息) 简单的python决策树案例_Cvjark的博客-CSDN博客_python决策树案例 4. 决策树可视化参考: scikit-learn决策树算法类库使用小结 - 刘建平Pinard - 博客园 (cnblogs.com) 大佬介绍了三种决策树可视化方法,非常详细 然后就开始报错,显示InvocationException: GraphViz’s executables not found,检查了很多遍环境变量也没有问题。后来发现自己犯了一个非常小白的错误(说出来感觉挺不好意思),希望能帮助到同样是小白的朋友! 错误一:Path的大小写。我的电脑环境变量里Path长这个样子(只有开头大写),但参考的博客里是全部大写PATH,所以要改成自己电脑环境变量里Path的大小写格式; 错误二:文件路径格式。我直接在文件夹复制了文件的路径,里面的斜杠是向左倾斜的“\”,但python里的路径斜杠要往右边倾斜!!!是“/”!!!并且要记得在bin后面也加上斜杠“/” 正确引用代码如下: import pydotplus import os os.environ["Path"] += os.pathsep + 'C:/Program Files/Graphviz/bin/' 希望能帮到大家!!!

React 状态管理: Recoil - Facebook 状态管理

React 状态管理: Recoil - Facebook 状态管理 文章目录 React 状态管理: Recoil - Facebook 状态管理Recoil 概念Recoil 示例0. RecoilRoot1. Atom 状态2. Selector 导出状态3. Async Selector 异步导出状态4. Atom Family 状态类5. Selector Family 导出状态类6. RecoilBridge: 跨 Root 通信小结 参考连接完整代码示例 Recoil 概念 第一次尝试 Recoil 让我非常惊艳,以前我都是用 redux 进行状态管理,但是多余的重新渲染总是让人不胜其扰,Recoil 可以说是彻底解决 redux 基于 Context API 进行状态管理的弊端,并借助了 React hooks 的优势,将状态更新推迟到一个个最接近底部的子节点上。 上一张图大家就能够感受到差异了(借用 Dave McCabe 大佬的图) 相当于是把每一个状态设计成一个单独的可订阅对象,然后使用 hooks 进行订阅最终状态更新就只会修改直接使用该状态的组件,同时避免了 Redux 将多个状态都堆放在同一个对象上造成使用同一个 Context 的组件触发多余的渲染 Recoil 示例 下面我们透过实际操作来体验一下 Recoil 的便捷 0. RecoilRoot 下面 1-5 的例子我们都统一使用单一个 RecoilRoot 作为全局作用域,不论是 atom 还是 selector 都是基于 RecoilRoot 来获取当前值,对于不同 RecoilRoot 则会产生不同的状态实例,切记。

mac中最简单的安装lightbgm

mac m1中最简单安装方法安装lightgbm 前言1.安装可能会遇到错误2.安装lightgbm3.安装成功 前言 我们这里只针对Mac用户,包括intel、m1。 windows用户、Linux用户参照官方文档。官方文档 也可以参照中文文档:中文文档链接 1.安装 在Mac上面安装lightgbm intel用户 /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)" m1用户 /bin/zsh -c "$(curl -fsSL https://gitee.com/huwei1024/HomebrewCN/raw/master/Homebrew.sh)" 无脑复制上面的代码,在Mac终端运行即可。(根据提示一直操作即可) 安装完了之后,输入 brew -v 可能会遇到错误 command not found : brew 这里的原因是m1芯片的包安装位置不是以前的**/usr/local/** 而是**/opt/homebrew/**,所以我们进行配置环境变量。 根据下面的步骤进行更改。 1.进入根目录 cd ~ 2.创建.zshrc文件,并进入文件(有就打开.zshrc,没有会进行创建) vi .zshrc 3.对文件内容进行编辑或添加这两行代码(按i进行添加内容) export PATH=/opt/homebrew/bin:$PATH export PATH=/opt/homebrew/sbin:$PATH 按esc键之后,进行按**:wq**,进行退出保存。生成环境变量。 source .zshrc 这个时候你再输入brew -v就成功看到版本了。 2.安装lightgbm 通过pip进行安装,这里要注意pip的版本,一定要保证版本不能太低。 pip install lightbrew pip更新 pip update 3.安装成功 在终端中输入 python 在python页面进行输入 import lightbrew 没有报错,安装成功

详细讲解半加器、全加器、四位全加器,并使用FPGA实现半加器、全加器

全加器、半加器都是在数电学习路上非常主要的部分,下面我将全加器和半加器做一个详细的解释。 半加器 半加器是指对输入的两个一位二进制数相加(A与B),输出一个结果位(SUM)和进位(C),没有进位的输入加法器电路,是一个实现一位二进制数的加法电路。 真值表 被加数A加数B和SUM进位C0000011010101101 逻辑表达式 根据上述的真值表,当A和B相同时SUM为0,否则为1;逻辑关系属于异或;当A和B同时为1时,C等于1,其余都为零,逻辑关系为与。 所以我们可以得到如下的逻辑表达式: 逻辑电路图 半加器Verilog代码实现 module half adder( input wire A, input wire B, output wire C, output wire sum ); //assign sum = (A == B) ? 0 : 1; //这两种方式都可以实现 assign sum = A^B; assign C= A&B; endmodule RTL视图验证 全加器 全加器是指对输入的两个二进制数相加(A与B)同时会输入一个低位传来的进位(Ci-1),得到和数(SUM)和进位(Ci);一位全加器可以处理低位进位,并输出本位加法进位。多个一位全加器进行级联可以得到多位全加器。常用二进制四位全加器74LS283。 真值表 逻辑表达式 由全加器的定义理解我们可以知道当Ai和Bi异或后再与Ci-1进行异或得到SUMi,结合真值表,我们可以知道当Ai、Bi、Ci-1只要有两个以上的1是进位Ci就等于1;所以只需要每两变量求与,结果再求或就可以满足要求。由此我们可以得到最常用的逻辑表达式: 由于两个半加器可以构成一个全加器,所以在这里进位Ci还可以表示为 逻辑电路图 根据逻辑表达式绘制两种逻辑电路图如下: 由两个半加器组成的全加器逻辑电路图 全加器Verilog代码实现 module full_adder( input wire A, input wire B, output wire C, output wire sum

coreldraw2022免费直装新版本免费无限制随意使用

今天给大家分享cdr这个软件,以及这个软件的一些快捷键,如果你从事设计行业,那么应该对coreldraw产品软件并不陌生吧,不过部分人嫌该软件安装起来有些麻烦,为此这里带来的是cdr2022直装版,所以现在来我这里就可以得到免费的链接, cdr2022软件介绍 这个版本和官方版一样是款专业强大,且功能丰富的平面设计软件,其中不仅为用户们提供了一体化的设计和布局方便新手快速上手,还广泛的兼容ai、psd、pdf、jpg、png、svg、dwg、tiff、heif等多种文件格式的支持,从而无论你是要制作图形,还是出版和图像文件格式在这里全部都支持,并最重要的是软件还至极告诉的技术的限制,支持win、mac、移动设备等多端的跨平台同步使用,从而即可让移动设计变得更加容易。 不仅如此,在本次全新的cdr2022与上一个版本相比,直接为用户们提供了更强大的性能和新增功能,就比如说协作,在该版本中不仅提供了更直观的新项目仪表板,可让用户实用起来更加的方便,还了增强评论泊坞窗,支持用户实时搜索查看评论,非常的便捷实用。另外呢,在该版本中还增加了渐进式图像编辑功能,利用它可直接用更少的步骤增强图像质量,而且还提供了HEIF 文件格式支持,以及带来了全新替换颜色工具,致力帮助用户可以更快更简单的制作出想要的作品。 新增功能 1、新的透视图 以透视图的方式绘制对象或插图场景,比以往更快,更轻松。从1、2或3点透视图中进行选择,在共享透视图平面上绘制或添加现有对象组,并在不丢失透视图的情况下自由移动和编辑对象。 2、新的灵活的设计空间 借助新的工作流程,您可以在控制时间内从构思到输出,这使您可以控制页面和资产。 (1)多页视图 在一个视图中查看、管理和编辑项目的所有数字资产,这是一个全新的创意乐园!流畅地在页面间移动对象,并排比较设计,自由地移动页面以按照您的意愿排列它们。 (2)多资产导出 完成设计后,创建自定义的页面和对象项目列表,一键导出! (3)符号工作流程增强 增强的“符号”工作流程可以让您在大型库中快速搜索符号,并在其他对象中更容易地识别符号,从而节省您的时间。 3、新的渐进式图像编辑 强大的新照片编辑功能可减轻您的工作负担,该功能专为以更少的步骤增强图像而设计。 (1)增强的颜色替换 试用令人印象深刻的全新替换颜色工具,以获得更快、更简单的完美照片。 (2)重新设想的调整工作流程 以 Corel PHOTO-PAINT 中完全转换的调整工作流程为例,在背景中非破坏性地实时应用关键图像调整 (3)HEIF 文件格式支持 享受对 iPhone 上使用的标准照片格式的支持 4、新的下一代合作 浪费的时间已经够多了!随着远程工作成为我们的新常态,与同事和客户保持联系。 (1)可以在共享的cdr设计文件中收集来自一个或多个贡献者的实时注释和注释。 (2)直观的新项目仪表板使存储,组织和共享云文件变得轻而易举。 (3)增强的评论泊坞窗简化了反馈过滤,并具有搜索审阅者评论的功能。 5、新的cdr无处不在 告别技术限制,打招呼,体验跨Windows,Mac,Web,iPad和其他移动设备的真正跨平台体验。凭借针对触摸优化的新用户体验,CorelDRAW.app扩展了移动设备和平板电脑上的功能,而新的iPad应用程序使旅途中的设计变得更加轻松。 2022CDR软件特色 1、易用 无论您是初始用户还是经验丰富的设计师,cdr 2021开始使用十分简便。了解此图形设计软件的基本信息或通过启动概览了解新增功能,并通过匹配工作流需求的工作区立即提高效率。以从高质内容和多样化产品内学习资源中获益,从而丰富项目内容。利用 Windows 10 多监视器查看新增功能和新增的 4K 显示屏支持功能。 2、工艺 通过cdr 2021高水准的直观功能,充分展现您的设计灵活性。通过增强的字体搜索和筛选功能,为任何项目快速查找字体。通过增强的“刻刀”工具提高工作效率,可帮助您沿任何路径切割矢量对象、文本和位图。使用 Corel PHOTO-PAINT 2021 中的“修复复制”工具精修照片,并在增强的“矫正图像”对话框中修正透视失真。 3、个性化 请在主页了解所有收藏工具!界面更新后,可根据需求调整设计空间并自定义图标大小、桌面和窗口边框颜色。借助于全新 Corel Font Manager 2021,可以了解并为您的项目管理字体;此外,还可以通过在应用程序内部购买应用程序、插件和宏,扩展创意工具集合。 4、愉悦 交付专业质量输出,将在任何介质上使人过目不忘:从与众不同的徽标和标志到引人注目的营销材料、Web 和社交媒体图形,应有尽有!凭借行业领先的文件格式兼容性和高级颜色管理工具,cdr 2021可提供所有项目类型所需的灵活性和精确度。了解充满活力和灵感的 CorelDRAW 用户社区,以对您的创意之旅提供协助。 安装教程 1、下载并进行解压即可获得cdr2022中文版; 2、双击“开始安装.exe”依提示进行安装,由于这是于一体的,因此在运行时会有软件提醒正在修改host等内容,允许即可; 3、接着在进行安装时,软件直接是内置了序列号的,进行下一步即可;

MTP手机端实现过程

上一篇基本把pc端连接mtp协议走的内核路径过了一遍,还有部分细节不完善,但整体流程还是走的usb驱动逻辑。这是后话。简而言之,pc在内核平没有专门为MTP设计什么东西。解析MTP协议的逻辑还是放在了用户态。通过D-bus连通usb驱动,对数据进行mtp协议解析。为了详细了解mtp具体做了什么,我从手机端研究了MTP在内核中的实现。 一、/dev/mtp_usb 真正意义上的MTP驱动位于手机一侧。注册了 /dev/mtp_usb字符设备。 read write 接口实现了控制命令的传输和写入。也就是说当有远端的文件请求是,手机端是通过这里发送给手机测用户态服务的。 void MtpServer::run() { // 将mFD赋值给fd,fd就是“/dev/mtp_usb”的句柄 int fd = mFD; while (1) { // 读取“/dev/mtp_usb” int ret = mRequest.read(fd); ... // 获取“MTP操作码” MtpOperationCode operation = mRequest.getOperationCode(); MtpTransactionID transaction = mRequest.getTransactionID(); ... // 在handleRequest()中,根据读取的指令作出相应的处理 if (handleRequest()) { ... } } ... } 二、文件数据的读取 为了在得到请求后顺利吧数据发送到远端PC上。手机端利用了启动的Mtp_server。 bool MtpServer::handleRequest() { undefined Mutex::Autolock autoLock(mMutex); MtpOperationCode operation = mRequest.getOperationCode(); MtpResponseCode response; mResponse.reset(); if (mSendObjectHandle != kInvalidObjectHandle && operation != MTP_OPERATION_SEND_OBJECT) {undefined mSendObjectHandle = kInvalidObjectHandle; } switch (operation) {undefined case MTP_OPERATION_GET_DEVICE_INFO: response = doGetDeviceInfo(); break; case MTP_OPERATION_OPEN_SESSION: response = doOpenSession(); break; case MTP_OPERATION_CLOSE_SESSION: response = doCloseSession(); break; .

curl: (60) Peer‘s Certificate issuer is not recognized

问题描述 新写了一个Https接口,由于是get请求,所以自己在浏览器上访问了下,是可以请求到的,以为没事了,没想到交付的时候,第三方通过curl请求,显示接口不可访问了,具体报错如下: 前言 网上几乎所有的教程都说是由于证书过期,或者缺少证书的原因。证书有问题确实会造成上述情况,但不是唯一的因素。 如果大家遇到了相同的问题,建议先看其他的博客确保把证书配置正确,在确保证书是绝对没有问题的情况下,在确保证书是绝对没有问题的情况下,在确保证书是绝对没有问题的情况下,可以再来看看是否和我相同的情况导致的。 问题原因 根本原因是客户端发起的是https请求,而服务端接收到的时候变成了http的请求。因为服务端根本不知道此次是https请求,自然不会返回自己的证书给客户端,所以客户端提示说证书可能丢失或过期了,即得到Peer's Certificate issuer is not recognized的提示信息。 问题发现 如何确定自己接手到的是http请求还是https请求呢,首先可以在接口代码中打印请求的协议,也可以在ngixn请求日志中打印。 我是在nginx中打印日志发现了这个问题。新写的接口请求逻辑是这样的。 客户端通过域名发起Https请求-->网关(进行域名解析映射至ip服务器)-->服务器nginx(得到请求后代理至最终服务)-->最终服务。 我们这里存在的问题是网关-->nginx这一步,我们的it人员把https协议映射成了http协议,因此出现了问题。 Https原理 发现这个问题是由于仔细阅读了https协议的过程及原理,然后进行了总结,一并发出来。 1、客户端发起请求,告诉服务端自己支持的hash算法(用来验证信息是否被篡改)和非对称加密算法(用来进行认证期间信息的加密); 2、服务端找到匹配支持的算法,将证书发送给客户端(证书中包含着非对称加密算法的公钥); 3、客户端拿到证书后,利用证书的公钥进行解密,验证证书的合法性,通过后拿到非对称加密的公钥; 4、客户端生成一串随机数密码,握手消息、握手消息取hash值,然后用随机数密码对(握手消息+握手消息hash值)进行加密得到加密握手消息,将随机数密码用公钥进行加密以及加密握手消息这两部分传输到服务端; 5、服务端利用私钥进行解密得到随机数密码,通过随机数密码解密客户端传输过来的加密握手消息,然后对握手消息取hash,判断hash是否一致(防止信息在传输过程中被篡改); 6、服务端生成握手消息,使用随机密码串加密(握手消息+握手消息hash值)传输给客户端。 7、客户端得到后利用加密字符串进行解密,判断是否hash一至。一致则说明信息传输过程中没有被篡改,,且加密字符串只被客户端、服务端所知晓,此后的信息传输使用加密字符串进行对称加密即可。 写在最后 未修改之前,使用postman测试接口,如果禁用了ssl认证,则接口可以访问成功;如果开启ssl认证,则接口访问失败。所以我推测,浏览器进行url访问的时候,可以自动切换成禁用ssl的方式请求接口,因此最开始我本地进行测试的时候才没有问题。 但是关于浏览器可以访问的根本原因我不是很清楚,大家如果知道的话请交流指教下。 以后还是乖乖的用postman测试接口吧。

nacos-2.0.3启动报错出现no datasource set的坑

在日常启动nacos-2.0.3的时候,经常会启动不成功,检查start.out可以看到no datasource set的异常,导致了nacos启动失败。 1.start.out文件中可以看到: ERROR Startup errors : No DataSource set at org.springframework.beans.factory.support.ConstructorResolver.createArgum。。。。 ERROR Nacos failed to start, please see /opt/nacos-2.0.3/logs/nacos.log for more details. 2.根据start.out的提示去查看nacos.log,可以看到如下异常信息 java.sql.SQLNonTransientConnectionException: Could not create connection to database server. Attempted reconnect 3 times. Giving up. at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:110) 3.在该节点(192.168.88.130)上使用mysql命令远程连接mysql服务器(192.168.88.129),发现还真连接不上,说是mysql服务器接入的连接太多了 root@server-2:~# mysql -h 192.168.88.129 -u root -p Enter password: ERROR 1129 (HY000): Host '192.168.88.130' is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts' 4.跑到mysql服务器(192.168.88.129)上去登录mysql,进行FLUSH HOSTS

浅析TMS320F28035的GPIO模块

目录 GPIO简介硬件电路软件代码总结 通用输入输出端口(General Purpose Input Output, GPIO)几乎是学习包括DSP,单片机在内的微处理器的第一步。GPIO的功能包括基本的输入,输出,也可以复用为其他外设功能。 GPIO简介 TMS320F28035具有45个GPIO引脚(不包括模拟输入输出引脚AIO),分为两大部分: Part A(0~31),Part B(32~44)。其中,每个引脚除了具备通用数字输入/输出功能外,还最多复用三个外设引脚功能,可以通过多路复用选择寄存器(GPxMUXn)进行配置。 GPIO的默认功能是通用数字输入/输出功能,在进行配置时,主要步骤如下: 引脚的方向:输入/输出,0(输入) 1(输出),通过GPBDIR进行配置。 引脚的电平:1(高电平),0(低电平),这个可选。 引脚的复用:基本输入输出功能 or 外设复用功能。 比如我们要使用某个GPIO引脚,周期性输出高低电平,从而闪烁LED灯。那么,我们需要进行如下配置GPIO: 方向:输出电平:周期性翻转电平复用:不进行复用,默认基本输入输出功能 硬件电路 可见,GPIO34引脚与LED的阴极相连,当GPIO34输出低电平时,LED亮; GPIO34输出高电平时,LED灭。 软件代码 一些初始化工作,包括系统配置,中断,看门狗等 InitSysCtrl(); // 初始化系统配置,关闭看门狗,开启外设时钟 DINT; // 关闭CPU级总中断:INTM(0:开启,1:关闭) InitPieCtrl(); // 初始化外设中断扩展配置 IER = 0x0000; // 关闭CPU级中断使能位 IFR = 0x0000; // 关闭CPU级中断标志位 InitPieVectTable(); // 初始化PIE向量表 配置GPIO34引脚为输出引脚,默认基本输入输出功能 由前面可知,34引脚输入Group B,所以需要使用与Group B相关的寄存器,如GPBMUX1、GPBDIR EALLOW; // 开锁 GpioCtrlRegs.GPBMUX1.bit.GPIO34 = 0; // GPIO34作为普通IO 0: GPIO GpioCtrlRegs.GPBDIR.bit.GPIO34 = 1; // GPIO34方向为输出 0: 输入 1: 输出 EDIS; // 上锁 主循环中实现电平的翻转,延时函数实现LED灯闪烁的效果 while(1) { // 延时1s DSP28x_usDelay(1000000); // 电平翻转 GpioDataRegs.

浅析DSP28035的看门狗模块

目录 背景工作原理结构与寄存器代码实验结果总结 背景 嵌入式系统通常会使用DSP来实现控制功能,比如开关电源的数字控制。试想如果DSP中程序出现Bug、崩溃、跑飞了怎么办?如果不及时处理,这对整个嵌入式系统的危害将是不可预料的。 这时,我们就需要DSP具有一种保护机制:检测程序是否正常运行,如果不正常,就要采取某种保护措施。 其实,不止DSP具有这种机制,大多数嵌入式系统的微处理器为了保证产品的可靠性,都具备这种功能。这种保护机制就是看门狗(Watch Dog)。 接下来就来聊聊TI 的TMS320F28035 芯片。 工作原理 鉴于程序跑飞时,CPU已经不再受控制了。那么,看门狗(Watch Dog)肯定是要独立于CPU模块的,而事实上也确实如此,并且看门狗的时钟信号也是通过晶振时钟进行预分频得到的。这就保证了看门狗可以完全不受CPU的影响。 当CPU死机、跑飞、或者运行到一个不明的程序陷阱时,看门狗能识别到这种状况,并产生中断或者复位信号。复位信号将CPU复位,使得CPU重新开始运行;中断信号使得CPU进入中断服务子程序,执行一系列操作。 那么,关键的问题来了:看门狗如何判断CPU是否跑飞了? 其实原理很简单,看门狗嘛,通俗点,从狗狗的角度来看,当主人每日按时给自己狗粮时,主人肯定没问题;但是,如果有一天主人突然没有给它喂饭了,那肯定出问题了啊。 看门狗机制就是如此,CPU要定期向看门狗发送特定信号,表示程序工作正常。具体来讲,看门狗内部有一个8位计数器WDCNTR,每个看门狗时钟周期都会进行加一增计数,当计数溢出时就产生中断或者复位信号;在计数溢出之前,若看门狗接收到CPU发送的特定信号后,就会把计数器清零,重新开始计数,也就不会产生复位或者中断。 CPU发送特定信号给看门狗的这种动作,也就是俗称的“喂狗”。只有定时有效地“喂狗”,才能保证看门狗不会错误地发送复位或中断指令。 结构与寄存器 看门狗模块的结构图如下: 上面提到了特定信号,定时有效地喂狗,那什么是特定信号?,何为定时?何为有效? 特定信号: 0x55+0xAA。 定时:在8位计数器溢出之前进行喂狗。 有效:当且仅当对WDKEY写入0x55 + 0xAA,才会清零计数器。 当计数器溢出时,根据工作模式,看门狗模块会产生复位信号或中断信号,该信号是一个有效电平为低电平,脉冲宽度为512个晶振时钟周期OSCCLK的脉冲信号,注意不是系统时钟信号SYSCLKOUT。 接下来,再看看与看门狗相关的寄存器。 SCSR: 系统控制状态寄存器。主要配置看门狗的模式,包括复位模式和中断模式 WDCNTR: 看门狗计数寄存器。8位计数器,(当外接10MHz晶振时,最大喂狗时间: 512 / 10 e 6 ∗ 255 ≈ 13 m s ) 512 / 10e^{6} * 255 \approx 13ms) 512/10e6∗255≈13ms)​​ WDKEY: 看门狗键值寄存器。写入0x55 + 0xAA 计数器复位。 WDCR: 看门狗控制寄存器,。WDDIS看门狗屏蔽位,WDPS看门狗时钟预分配位。写入0x0068,关闭看门狗;写入0x0028 开启看门狗,复位后自动使能看门狗(所以在初始化之前,通常先要关闭看门狗,等一切配置好以后,才开启看门狗) 注意:看门狗的时钟WDCLK是晶振(10MHz,具体视硬件而定)频率经过512分频得到,而不是主频SYSCLKOUT! 代码 #include "DSP28x_Project.h" // Device Header file and Examples Include File int flg_ServiceDog = 0; // 喂狗标志,这里选择不喂狗 long int loop_cnt = 0; // 主循环次数 long int wake_cnt = 0; // 看门狗中断次数 // 看门狗中断服务子函数 __interrupt void wakeint_isr(void) { wake_cnt++; // 允许ACK位,准备迎接下一个看门狗中断;看门狗属于 PIE group 1 PieCtrlRegs.

微信公众号-分享报错invalid url domain的解决方法

微信公众号开发-自定义分享报错显示“invalid url domain” 前端微信公众号中的wx.config中开启调试模式,前端弹出信息“errMsg:config:invalid url domain”,出现这种错误的原因可能是: 1、前端域名没有授权 部署微信前端页面的服务器的域名要在在公众平台授权。 下载一个txt文件进行验证,修改JS接口安全域名后,再次调用公众号的分享,即可弹出config:ok的消息 目前还有一个疑惑:使用H5写的微信公众号,重写了分享功能,页面上定义了分享按钮,点击分享按钮,只会弹出config:ok消息,并未弹出到分享的页面;但使用公众号右上角的三个小点进行分享,已重写了分享的方法。 疑问:使用H5页面写的公众号是否能点击页面按钮直接跳转到分享的页面呢???

python位运算(&、|、^、~、>>、<<)

位运算概览 符号描述运算规则&与两个位都为1时,结果才为1|或两个位都为0时,结果才为0^异或两个位相同为0,相异为1~取反0变1,1变0<<左移各二进位全部左移若干位,高位丢弃,低位补0>>右移各二进位全部右移若干位,对无符号数,高位补0,有符号数,各编译器处理方法不一样,有的补符号位(算术右移),有的补0(逻辑右移) 1.按位与运算符(&)# 定义:参加运算的两个数据,按二进制位进行"与"运算。 运算规则:0&0=0 0&1=0 1&0=0 1&1=1 总结:两位同时为1,结果才为1,否则结果为0。 例如:3&5 即 0000 0011& 0000 0101 = 0000 0001,因此 3&5 的值得1。 注意:负数按补码形式参加按位与运算。 与运算的用途: 1)清零 如果想将一个单元清零,即使其全部二进制位为0,只要与一个各位都为零的数值相与,结果为零。 2)取一个数的指定位 比如取数 X=1010 1110 的低4位,只需要另找一个数Y,令Y的低4位为1,其余位为0,即Y=0000 1111,然后将X与Y进行按位与运算(X&Y=0000 1110)即可得到X的指定位。 3)判断奇偶 只要根据最未位是0还是1来决定,为0就是偶数,为1就是奇数。因此可以用if ((a & 1) == 0)代替if (a % 2 == 0)来判断a是不是偶数。 2 按位或运算符(|) 定义:参加运算的两个对象,按二进制位进行"或"运算。 运算规则:0|0=0 0|1=1 1|0=1 1|1=1 总结:参加运算的两个对象只要有一个为1,其值为1。 例如:3|5即 0000 0011| 0000 0101 = 0000 0111,因此,3|5的值得7。 注意:负数按补码形式参加按位或运算。 或运算的用途: 1)常用来对一个数据的某些位设置为1 比如将数 X=1010 1110 的低4位设置为1,只需要另找一个数Y,令Y的低4位为1,其余位为0,即Y=0000 1111,然后将X与Y进行按位或运算(X|Y=1010 1111)即可得到。 3.异或运算符(^) 定义:参加运算的两个数据,按二进制位进行"

关于基于redis实现分布式锁之lua脚本优化所出现的bug

io.lettuce.core.RedisCommandExecutionException: ERR Error compiling script (new function): user_script:1: 'end' expected near 'elsereturn' //释放锁 String script = "if redis.call('get',KEYS[1]) == ARGV[1] " + "then " + "return redis.call('del',KEYS[1]) " + "else" + "return 0 " + "end"; this.redisTemplate.execute(new DefaultRedisScript<>(script), Arrays.asList("lock"), uuid); 在这里需要加入返回结果集类型,虽然不需要但是必须指定.否则会报错 this.redisTemplate.execute(new DefaultRedisScript<>(script,Boolean.class), Arrays.asList("lock"), uuid); 加入lua脚本后可以保证原子性和防误删

ETL、ELT、数据管道及其相关tool

一、定义 1. ETL E: Extraction raw data sources: T: transformation D: data loading popular ETL tools talendAWS GlueApache Airflow: scale for big datapandas 2. ELT 就是顺序变化了一下,先load再transform 因为big data的出现,ELT热起来了。 特点: 和 ETL的区别: 3. pipeline 特性 设计准则 batch or Streaming Data 准确性 VS 及时性 batch data 通常周期性执行(通过设置时间,数据量来触发process)operate on batches of data不需要最新的数据accuracy是第一位 应用场景: streaming data 应用场景: watching movies, listening to music or podcastssocial media feeds, sentiment analysisuser behavior, advertisingfrau detectionstock market tradingreal-time product pricingrecommender system 数据管道相关tools 以及 techmologies