在 Linux 中查找最大和最小的文件和目录

Linux系统中的每个文件和目录都有一个相关的大小,通常用字节、千字节(KB)、兆字节(MB)、千兆字节(GB)等来衡量。虽然单个文件的大小相对简单,但目录的大小包括目录本身及其所有递归内容所消耗的总空间。 关键工具:du 和 find du(磁盘使用情况):此命令估计文件和目录空间使用情况。它遍历目录并聚合单个文件占用的空间,显示目录的累积大小。find:用于在指定目录下查找文件和目录,使用不同的选项来过滤和限制查找的结果,可以与其他命令协同,以根据各种条件(包括大小)精确定位文件和目录。 查找最大的目录和文件 假设磁盘空间不足,需要清理一些空间。识别大型目录是合乎逻辑的第一步。要查明特定位置中最大的目录和文件,然后再针对性的进行文件的清理。 查找最大的目录 du -sh /home/user/* | sort -rh | head -n 10 执行后,将看到目录中前 10 个最大的目录 命令解读: du -sh:du命令估计空间,标志-sh确保输出是人类可读的格式(-h),并且我们正在总结总大小(-s)sort -rh:对结果进行排序。-r标志确保反向排序(最大优先),-h确保像’ 2K ‘和’ 1M '这样的大小以逻辑方式排序。head -n 10:输出过滤,只显示前10个结果 查找最大的文件 find /home/user -type f -exec du -h {} + | sort -rh | head -n 10 该命令将列出 /home/user 目录下最大的10个文件。type - f 确保只查找文件,不包括目录。 查找最小的目录和文件 查找最小的目录 du -sh /home/user/* | sort -h | head -n 10 此命令类似于最大目录的对应命令,列出 /home/user 下最小的10个目录 ,但根据大小按升序排列。

NumPy和Pandas库的基本用法,用于数据处理和分析

当涉及到数据处理和分析时,NumPy和Pandas是两个非常常用的Python库。下面是它们的基本用法: NumPy(Numerical Python): 导入NumPy库:在代码中使用import numpy as np导入NumPy库。 创建NumPy数组:使用np.array()函数可以创建一个NumPy数组。例如,arr = np.array([1, 2, 3, 4, 5])创建一个包含整数的一维数组。 数组操作:NumPy提供了许多函数和方法来操作数组。例如,可以使用arr.shape获取数组的形状,arr.dtype获取数组的数据类型,arr.reshape()改变数组的形状,arr.mean()计算数组的平均值等。 数组索引和切片:可以使用索引和切片操作来访问和修改数组中的元素。例如,arr[0]访问数组的第一个元素,arr[1:3]获取数组的第二个和第三个元素。 数组运算:NumPy支持对数组进行各种数学和逻辑运算。例如,可以使用np.add()、np.subtract()、np.multiply()和np.divide()执行数组的加法、减法、乘法和除法。 Pandas: 导入Pandas库:在代码中使用import pandas as pd导入Pandas库。 创建数据结构:Pandas提供了两种主要的数据结构,即Series和DataFrame。Series是一个带有标签的一维数组,而DataFrame是由行和列组成的二维表格。 加载数据:使用pd.read_csv()、pd.read_excel()等函数可以从文件中加载数据为DataFrame对象。 数据观察:使用df.head()查看DataFrame的前几行,默认为前5行。使用df.tail()查看DataFrame的最后几行。使用df.shape获取DataFrame的形状。使用df.columns查看DataFrame的列标签。 数据选择和过滤:可以使用列标签或条件来选择和过滤DataFrame中的数据。例如,df[‘column_name’]选择特定列,df[‘column_name’] > 5选择满足条件的行。 数据操作:Pandas提供了各种方法来对数据进行操作,如排序、合并、分组、聚合和连接等。例如,df.sort_values()按照指定的列进行排序,df.groupby()按照指定的列进行分组聚合。 数据处理:Pandas提供了许多函数和方法来处理数据,如填充缺失值、删除重复值、处理异常值等。例如,df.fillna()填充缺失值,df.drop_duplicates()删除重复值,df.dropna()删除包含缺失值的行。 以上是NumPy和Pandas库的基本用法,用于数据处理和分析。这只是其中一小部分功能,它们提供了更多的功能和灵活性,可以满足各种数据处理和分析的需求。建议查阅官方文档和教程,以深入了解它们的完整功能和用法。

repo 常用命令汇总——202308

文章目录 1. 下载repo:2. 获取工程repo信息3. 下载代码4. 创建并切换本地分支5. repo forall6. repo upload7. repo list8. repo info9. repo help 1. 下载repo: 使用下面命令,具体版本号参考前面网页中显示的最新版本号。 curl http://git-repo.googlecode.com/files/repo-1.19 > ~/bin/repo 修改执行权限 chmod a+x ~/bin/repo 2. 获取工程repo信息 本地创建一个工程目录,并进去 以下命令下载指定分支(branch) repo init -u git://172.16.1.31/manifest.git (git地址) -b master repo init 作用 : 下载repo并克隆manifest Options: -u:指定一个URL,其连接到一个maniest仓库 -m:在manifest仓库中选择一个xml文件 -b:选择一个maniest仓库中的一个特殊的分支 命令repo init 要完成如下操作: Ø 完成repo工具的完整下载,执行的repo脚本只是引导程序 Ø 克隆清单库manifest.git (地址来自于-u 参数) Ø 克隆的清单库位于manifest.git中,克隆到本地.repo/manifests.清单.repo/manifest.xml只是符号链接,它指向.repo/manifests/default.xml Ø 如果manifests中有多个xml文件,repo init 可以任意选择其中一个,默认选择是default.xml 3. 下载代码 repo sync 更新代码到最新的版本 用于参照清单文件.repo/manifest.xml克隆并同步版本库。如果某个项目版本库尚不存在,则执行repo sync 命令相当于执行git clone,如果项目版本库已经存在,则相当于执行下面的两条指令:

python 常用快捷键汇总——202308

一、编辑(Editing) 行注释/取消行注释 Ctrl+/ 自动调整代码格式 Alt+Ctrl+L 快速查看文档 Ctrl+Q 剪切 Ctrl+X 复制 Ctrl+C 粘贴 Ctrl+V 选中 Ctrl+Alt+T 复制选定的行 Ctrl+D 删除选定的行 Ctrl+Y 整体右移(缩进)/左移(退格) Tab/Shift+Tab 选中代码移动 Alt+Shift+上下键 可以移动当前方法体,如果移动一行代码只能在代码体内移动 Ctrl+Shift+上下键 转换字母大小写 选中 + ctrl/command + shift + u 二、查找/替换(Search/Replace) 查找 Ctrl+F 替换 Ctrl+R 全局查找 Ctrl+Shift+F 全局替换 Ctrl+Shift+R 下一个 F3 三、运行(Running) 运行模式配置 Alt + Shift + F10 调试模式配置 Alt + Shift + F9 运行 Shift + F10 调试 Shift + F9 四、调试(Debugging) 断点开关 Ctrl + F8

【实用工具】CTF比赛 压缩包口令破解工具-ARCHPR

文章目录 软件简介软件下载软件使用1.页面展示2.操作提示3.功能演示 软件简介 ARCHPR是一款非常给力的压缩包口令破解工具,它可以帮助你轻松破解各种类型口令,例如纯数字口令、数字字母组合口令等,还包括但不限于明文、掩码、字典和暴力破解等模式。 软件下载 链接:https://pan.baidu.com/s/1Rr8Pdsr4tUNo_zRLEIY7cA?pwd=6666 提取码:6666 软件使用 1.页面展示 区域编号区域名称功能作用1文件加载区可以加载ZIP/RAR等加密文件并显示路径。2攻击类型区根据实际情况进行不同攻击类型选择,让破解更轻松。3配置区配置破解范围、长度或加载自定义字典等让破解更灵活。 2.操作提示 说明: 文中ARCHPR 为4.54版本,winrar为6.11评估版本,压缩包均为ZIP格式。 范围: 建议实行最小化原则,在不知道口令的前提下尽量少勾选范围选项,然后逐次增加破解范围。 长度: 猜测口令可能的长度,选择长度越长,破解时间越长。反之,时间就越短。 成功率: 1)口令必须在要在选择的范围内才能解出来,勾选越多,组合就越多,成功率上去了,但相对来说速度就会变慢。 2)成功率并不是100%。一是软件本身识别能力,比如有的压缩软件制作的压缩包甚至没法被识别,也就无法进行暴力破解了,这个和压缩软件以及此软件版本设计相关。二是算法问题,有的加密算法暂时没法进行算法逆向,所以没法破解。 3.功能演示 一般步骤:选择要破解的压缩包->选择攻击类型->选择范围->选择长度->开始 暴力破解演示 选择范围:数字和小写字母 长度:1-4进行暴力破解,成功恢复文件口令。 掩码攻击演示 已知口令部分内容,剩余部分未知,可用此攻击类型。 典型场景:身份证和手机号部分位数加密缺失,如131****1234 字典攻击 加载具体的口令字典进行暴力破解 典型场景:通过社会工程学获取到压缩包所属作者关联信息,如手机、QQ和生日等进行字符组合生成字典进行暴力破解。 在线社会工程学密码口令字典生成器:https://www.bugku.com/mima/ 明文攻击 指通过某种方式得知加密压缩包里面的某个文件内容,利用同一个ZIP压缩包里所有文件都使用同一个密钥来加密的特性,通过对比加密压缩包和不加密压缩包,最终找出加密压缩包的密钥并解锁其他加密文件。 典型场景:WEB安全中通过路径扫描获取到网站备份压缩包,内容被加密了。但是可以通过扫描网站获取到一些静态文件内容,这些静态文件属于网站文件的一部分,也是加密备份文件里面的内容。

Vue3 实现JS动态改变CSS样式

以颜色为例子 定义颜色变量 import { reactive } from 'vue'; // 可变的主题颜色 let chooseColor = reactive({ '--color': '#be2a27' }) CSS中使用 var() 函数引用颜色变量(这里是用elementPlus为例, 也可以改) :deep(.is-active) { color: var(--color); border-bottom: 2px solid var(--color); } 在html标签中绑定动态style <el-tabs v-model="activeName" type="card" class="demo-tabs" @tab-click="goTab" :style="chooseColor"> <el-tab-pane label="首页" name="home"></el-tab-pane> <el-tab-pane label="产品" name="product"></el-tab-pane> <el-tab-pane label="云易购" name="cloudShop"></el-tab-pane> </el-tabs> JS判断切换的tab, 来改变颜色变量的颜色 // 切换 tab 跳转页面, 变换颜色 const goTab = (tab, e) => { if (tab.paneName == '首页') { chooseColor['--color'] = '#d97817' } else { chooseColor['--color'] = '#be2a27' } }

关于Flink Checkpoint 参数详解

在工作中,使用到了flink的 Checkpoint 配置操作 遇到了个问题,业务逻辑是:使用flink流 处理数据后,放入kafka中, 但是在flink程序 kafka流消费时,发现只有100条的,现在有 > 100条数据进行消费, 查询问题后,发现flink 的 Checkpoint 配置含义,如下: 什么是 checkpoint 保存状态 Checkpoint 参数详解 StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); // 每 60s 做一次 checkpoint env.enableCheckpointing(60000); // 高级配置: // checkpoint 语义设置为 EXACTLY_ONCE,这是默认语义 env.getCheckpointConfig().setCheckpointingMode(CheckpointingMode.EXACTLY_ONCE); // 两次 checkpoint 的间隔时间至少为 1 s,默认是 0,立即进行下一次 checkpoint env.getCheckpointConfig().setMinPauseBetweenCheckpoints(1000); // checkpoint 必须在 60s 内结束,否则被丢弃,默认是 10 分钟 env.getCheckpointConfig().setCheckpointTimeout(60000); // 同一时间只能允许有一个 checkpoint env.getCheckpointConfig().setMaxConcurrentCheckpoints(1); // 最多允许 checkpoint 失败 3 次 env.getCheckpointConfig().setTolerableCheckpointFailureNumber(3); // 当 Flink 任务取消时,保留外部保存的 checkpoint 信息 env.

STM32使用printf的方法

工作需要,连接打印机,如果用printf 输出汉字会省力很多 方法一: //加入以下代码就不用选择使用微库 #if 1 #pragma import(__use_no_semihosting) struct __FILE { int handle; }; FILE __stdout; void _sys_exit(int x) { x = x; } int fputc(int ch, FILE *f) { while((USART1->SR&0X40)==0); USART1->DR = (u8) ch; return ch; } #endif 例子: int main(void) { uart_init(9600); printf("hellow"); } 方法二:使用微库,只需要定义fputc 在代码uart.c 中添加 如下代码 (目的是为了调用stdio库中的print 函数) #include "stdio.h"//里面包含printf int fputc(int ch, FILE *f) { while((USART1->SR&0X40)==0);//循环发送,直到发送完毕 USART1->DR = (u8) ch; return ch; }

工作流程引擎之flowable(集成springboot)

0、背景 现状:公司各部门业务系统有各自的工作流引擎,也有cross function的业务在不同系统或OA系统流转,没有统一的去规划布局统一的BPM解决方案,近期由于一个项目引发朝着整合统一的BPM方案,特了解一下市面上比较主流的开源和收费的工作流引擎。本文主要介绍开源的工作流引擎flowable. 1、开源工作流引擎比较 开源工作流引擎是一种用于管理和自动化业务流程的软件,它可以帮助用户实现业务流程的可视化设计、流程编排、任务调度、监控和优化等功能。本文将介绍几种常见的开源工作流引擎,并进行比较。目前市场上比较主流的开源流程引擎有:Activiti、Camunda、Flowable。 1.1、Activiti Activiti是一个轻量级的开源工作流引擎,采用Java语言开发,基于BPMN 2.0规范,支持嵌入式部署和分布式部署。Activiti提供了丰富的API和插件,支持与Java应用程序进行集成。它还提供了Web界面和REST API,可以方便地进行流程设计、部署、调度和监控。Activiti具有以下优点: 易用性和灵活性:Activiti提供了简单易用的流程设计器和API,支持多种流程模型和任务类型,可以满足不同场景和需求的使用。可伸缩性和性能:Activiti支持嵌入式和分布式部署,可以扩展集群规模以支持更大的业务流程和更高的并发量。此外,它还提供了优化和缓存机制,可以提高性能和响应速度。社区支持和生态系统:Activiti拥有庞大的社区和活跃的开发者,提供了丰富的插件和工具,可以扩展其功能和使用。例如,Activiti Explorer可以用于流程设计和管理,Camunda Modeler可以用于编辑BPMN模型,Flowable Task可以用于任务管理等。安全性和可靠性:Activiti提供了可靠的安全性控制,可以对数据进行访问控制和加密,以满足不同场景和需求的安全要求。它还提供了事务管理和错误处理机制,可以保证业务流程的可靠性和稳定性。 1.2、Camunda Camunda是一个强大的开源工作流引擎,采用Java语言开发,支持BPMN 2.0规范和CMMN规范。Camunda提供了丰富的API和插件,支持与Java应用程序进行集成。它还提供了Web界面和REST API,可以方便地进行流程设计、部署、调度和监控。Camunda具有以下优点: 功能丰富和灵活性:Camunda提供了丰富的功能和灵活的流程设计,支持多种流程模型和任务类型,可以满足不同场景和需求的使用。可伸缩性和性能:Camunda支持嵌入式和分布式部署,可以扩展集群规模以支持更大的业务流程和更高的并发量。此外,它还提供了优化和缓存机制,可以提高性能和响应速度。社区支持和生态系统:Camunda拥有庞大的社区和活跃的开发者,提供了丰富的插件和工具,可以扩展其功能和使用。例如,Camunda Modeler可以用于编辑BPMN模型,Camunda Cockpit可以用于任务管理和流程监控,Camunda Tasklist可以用于任务列表等。可扩展的架构和API:Camunda采用可扩展的架构和API,可以方便地进行集成和扩展。例如,它支持自定义流程引擎插件、外部任务处理器、表单引擎等。安全性和可靠性:Camunda提供了可靠的安全性控制,可以对数据进行访问控制和加密,以满足不同场景和需求的安全要求。它还提供了事务管理和错误处理机制,可以保证业务流程的可靠性和稳定性。 1.3、Flowable Flowable是一个开源的轻量级工作流引擎,基于Activiti 5.x版本开发,支持BPMN 2.0规范和CMMN规范。Flowable提供了丰富的API和插件,支持与Java应用程序进行集成。它还提供了Web界面和REST API,可以方便地进行流程设计、部署、调度和监控。Flowable具有以下优点: 易用性和灵活性:Flowable提供了简单易用的流程设计器和API,支持多种流程模型和任务类型,可以满足不同场景和需求的使用。可伸缩性和性能:Flowable支持嵌入式和分布式部署,可以扩展集群规模以支持更大的业务流程和更高的并发量。此外,它还提供了优化和缓存机制,可以提高性能和响应速度。社区支持和生态系统:Flowable拥有庞大的社区和活跃的开发者,提供了丰富的插件和工具,可以扩展其功能和使用。例如,Flowable Modeler可以用于流程设计和管理,Flowable Task可以用于任务管理和流程监控,Flowable Admin可以用于集群管理等。可扩展的架构和API:Flowable采用可扩展的架构和API,可以方便地进行集成和扩展。例如,它支持自定义流程引擎插件、外部任务处理器、表单引擎等。安全性和可靠性:Flowable提供了可靠的安全性控制,可以对数据进行访问控制和加密,以满足不同场景和需求的安全要求。它还提供了事务管理和错误处理机制,可以保证业务流程的可靠性和稳定性。 2、flowable安装 2.1、下载软件 Github链接,目前flowable已经更新到Flowable 7.0.0.M2版本了。 安装方式有很多,可以通过下载zip包也可以通过docker拉取镜像进行部署,本文采用zip的window环境部署。 下载安装包,我下载的是flowable-6.7.0版本,同时需要配合tomcat(选择的是apache-tomcat-9.0.79版本)服务进行部署,tomcat下载地址: 下载上面两个软件之后还需要配置flowale的配置数据存储,我选择的mysql数据库,当然他还支持其他数据库类型。mysql数据库是docker镜像运行的,这里不再赘述安装过程,可以看我往期docker mysql安装. 2.2、解压运行 分别解压tomcat和flowable: 把flowable-6.7.0\wars目录下的flowable-ui.war拷贝到apache-tomcat-9.0.79\webapps下面启动tomcat startup.bat 此时会解压war文件,同时会删除war文件,同时会生成新文件apache-tomcat-9.0.79\webapps\flowable-ui. 2.3、配置数据源 修改apache-tomcat-9.0.79\webapps\flowable-ui\WEB-INF\classes\flowable-default.properties 参考: server.port=8080 server.servlet.context-path=/flowable-ui spring.jmx.unique-names=true # This is needed to force use of JDK proxies instead of using CGLIB spring.aop.proxy-target-class=false spring.aop.auto=false spring.application.name=flowable-ui spring.banner.location=classpath:/org/flowable/spring/boot/flowable-banner.txt # The default domain for generating ObjectNames must be specified.

一文读懂clickhouse 的normal join和global join区别

文章目录 背景表定义SQL-1结果1 SQL-2结果2 思考Shuffle JoinBroadcast JoinColocate Join重看问题distributed_product_mode范围可能值 测试 总结 背景 同事问了我一个这样的问题,语义如下 表定义 定义两个分布式表 tablea 2 shard 1 replica user_id不是分区键 tableb 2 shard 1 replica user_id是分区键 SQL-1 select count(1) from tablea_all as ta join tableb_all as tb on ta.user_id=tb.user_id where ta.user_id=1 结果1 result is 1 SQL-2 select count(1) from tablea_all as ta global join tableb_all as tb on ta.user_id=tb.user_id where ta.user_id=1 两个SQL只是join 方式不一样而已 结果2 result is 2 结果竟然不一样??? 思考 在我之前的知识体系里,clickhouse 的join分成三种

cnocr安装和识别文字

cnocr 介绍 参考: cnocr: 极简的中文OCR Python包 https://cnocr.readthedocs.io/zh/latest/ cnocr 主要针对的是排版简单的印刷体文字图片,如截图图片,扫描件等。目前内置的文字检测和分行模块无法处理复杂的文字排版定位。如果要用于场景文字图片的识别,需要结合其他的场景文字检测引擎使用,例如文字检测引擎 cnstd。 目前使用的识别模型是crnn,识别准确度约为 98.7% 安装 pip install cnocr import cnocr # 创建 cnocr 对象 ocr = cnocr.CnOcr() # 读取图像文件 image_path = './pic/img_2.png' result = ocr.ocr(image_path) print(result) text = ' '.join([x['text'] for x in result]) 注意cnocr.CnOcr()可能报错网络失败, huggingface_hub.utils._errors.LocalEntryNotFoundError: Connection error, and we cannot find the requested files in the disk cache. Please try again or make sure your Internet connection is on. OR

CSS媒体查询的用法

媒体查询:根据设备显示器的特性(如视窗宽度、屏幕宽度、设备方向等)来设定不同的CSS样式,媒体查询由媒体类型和一个或多个检测媒体特性的条件表达式组成。 一、媒体查询的使用方法 1、外链式:在head标签的内部使用 link 标签引入外部css文件 <head> <link rel="stylesheet" media="(min-width: 1200px)" href="test.css" /> </head> min-width: 1200px 表示当视窗宽度大于等于1200px时,该样式生效。 2、内部方式:使用内部样式表,写在 style 标签里面 <style> @media (max-width: 1200px) { .test{ width: 800px; } } </style> max-width: 1200px 表示当视窗宽度小于等于1200px时,该样式生效。 二、媒体查询的语法 <style> @media mediaType and (mediaFeature ) { 选择器 { 属性名:属性值 } } // 多个媒体特性 @media mediaType and (mediaFeature ) and (mediaFeature ) { 选择器 { 属性名:属性值 } } </style> 1. mediaType - 媒体类型(默认all): all: 所有的多媒体设备print: 打印机或打印预览screen:电脑屏幕、平板电脑、智能手机等speech:屏幕阅读器等发声设备 示例:

QT学习笔记-开发环境编译Qt MySql数据库驱动与交叉编译Qt MySql数据库驱动

QT学习笔记-开发环境编译Qt MySql数据库驱动与交叉编译Qt MySql数据库驱动 0、背景1、基本环境2、开发环境编译Qt MySql数据库驱动2.1 依赖说明2.2 MySQL驱动编译过程 3、交叉编译Qt MySql数据库驱动3.1 依赖说明3.3.1 如何在交叉编译服务器上找到mysql.h及相关头文件3.3.2 如果在交叉编译服务器上获得目标系统(ARM版本)的libmysqlclient.so库 3.2 MySQL驱动交叉编译过程 4、把数据库驱动部署到目标系统中5、QT测试程序访问MySQL数据库5.1 关键代码5.2 执行结果 0、背景 如果需要在QT程序中实现与MySQL数据库的交互,那么必不可少的一环就是对Qt MySql数据库驱动的编译。 1、基本环境 操作系统:Windows10 专业版 64位 Qt版本:Qt 5.15.2 开发环境Qt安装路径:D:\Qt 交叉编译服务器:Ubuntu 18.4 交叉编译服务器Qt安装路径:/opt/Qt 目标芯片:rk3568 目标平台:arm64 Qt安装时需要勾选安装源码,否则是无法找到Qt的数据库驱动源码的。 2、开发环境编译Qt MySql数据库驱动 2.1 依赖说明 mysql.h及相关头文件libmysql.lib 因为在编译Qt MySql驱动源码是需要依赖libmysql.lib和mysql.h头文件,在开发环境中(Windows)我们可以通过安装MySql服务 开发环境中MySQL的安装说明: 版本:5.7 安装目录:C:\Program Files\MySQL\MySQL Server 5.7 libmysql.lib所在目录:C:\Program Files\MySQL\MySQL Server 5.7\lib mysql.h及相关头文件所在目录:C:\Program Files\MySQL\MySQL Server 5.7\include 2.2 MySQL驱动编译过程 1、驱动源码目录:D:\Qt\5.15.2\Src\qtbase\src\plugins\sqldrivers\mysql 2、在Windows的开始菜单中找到Qt5.15.2(MinGW 8.1.0 64-bit)命令行工具 3、切换到mysql驱动源码目录下:D:\Qt\5.15.2\Src\qtbase\src\plugins\sqldrivers\mysql,然后分别执行以下命令 qmake “INCLUDEPATH+=‘C:\Program Files\MySQL\MySQL Server 5.7\include’” “LIBS+=‘C:\Program Files\MySQL\MySQL Server 5.

Harbor 2.3.0 安装报错Cannot start service registry: failed to create task for container: failed to initi

Harbor 2.3.0 安装报错如下: 安装错误: [Step 5]: starting Harbor ... Creating network "harbor_harbor" with the default driver Creating harbor-log ... done Creating harbor-portal ... Creating harbor-db ... Creating registry ... error Creating harbor-portal ... error Creating registryctl ... ERROR: for registry Cannot start service registry: failed to create task for container: failed to initialize logging driver: Creating harbor-db ... error ERROR: for harbor-portal Cannot start service portal: failed to create task for container: failed to initialize logging driver: dial tcp [::1]:1514: connect: connection refused

Linux的目录

Linux 操作系统只有一颗文件树 以树根“/”为起点 主要目录: /boot:系统启动目录 : 存放的是启动Linux时的一些核心文件,包括一些链接文件及映像文件,保存与系统启动相关的文件。 /dev:Linux设备文件保存位置: 该目录存放的是Linux的外部设备,都是以文件的形式存在的。 /etc:该目录用来存放系统管理员所需要的配置文件和子目录的文件保存位置,一般只能由管理员进行修改,密码文件,网络配置信息,系统内所有采用默认安装方式的服务配置文件全部保存在该目录下 /home:普通用户的主目录(也称为家目录)。在创建用户时,每个用户要有一个默认登录和保存自己数据的位置就是主目录,所有普通用户的主目录都是在/home下建立一个和用户名相同的目录,为该用户分配一个空间,例如,用户user01的主目录就是/home/user01,这个目录主要用户存放个人用户有关的相关文件 /media:挂载目录,建议用来挂载媒体设备,如软盘光盘 /mnt:挂载目录,该目录是空的,建议用力挂载额外的设备,如U盘,移动硬盘和其他操作系统的分区 /opt:第三方安装的软件的保存位置,该目录用于放置和安装其他软件,手工安装的源码包软件都可以安装到该目录下。但建议将软件放到/user/local目录下,也就是说,/user/local目录也可以用来安装软件。 /proc:虚拟目录,是系统内存的映射,可用来直接访问该目录来获取系统信息。该目录中的数据并不保存在硬盘中,而是保存到内存中。该目录主要用于保存系统的内核,进程,外部设备状态和网络状态等。例如,/proc/cpuinfo 是保存CPU信息的,/proc/devices 是保存设备驱动的列表的,/proc/filesystems是保存文件列表的,/proc/net 是保存网络协议的。 /root: 系统管理员的主目录,普通用户的主目录在/home目录下,root用户的主目录在/目录下 /run: 用于存放自系统启动以来描述系统信息的文件 /srv:服务数据目录,一些系统服务启动之后,可以在该目录下保存所需要的数据 /tmp:临时目录。系统存放临时文件的目录,在该目录下,所有用户都可以访问和写入。建议该目录下不要保存重要数据,最好每次开机都把该目录清空 /usr:该目录用于存储系统软件资源,即应用程序和文件,用户要用到的程序和文件几乎存放咋该目录下,如命令,帮助文件等,当安装一个Linux发行版官方提供的软件包时,大多安装在该目录下。 /var:用于存放运行时需要改变数据的文件,也是某些大文件的溢出区,如各种服务的日志文件(系统启动日志等) /bin:存放系统基本的用户命令,基础系统所需要的命令位于该目录下,也是最小系统所需要的命令等,如ls、rm、cp等,普通用户和root用户都可以执行该目录下的文件,位于/bin下的命令在单用户模式下也可以执行。 /lib与/lib64:用于保存系统调用的函数库,包含最基本的共享库和内核模块,存放了用于启动系统和执行root文件系统的命令,如/bin/sbin的二进制文件的共享库,或者存放32位/64位(可使用file命令查看)文件。 /sbin:用于保存系统管理员,管理员用户权限可以执行

SpringBoot配置文件的读取(包括list、map类型)

前言 添加配置文件处理器的依赖,这样在编写配置文件的时候就会有提示了。 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <version>2.1.3.RELEASE</version> </dependency> 有了依赖,可以直接使用application.properties文件为我们工作了,这是Springboot的默认文件,它会通过其机制读取到上下文中,这样就可以引用它了 读取配置文件 在使用maven项目中,配置文件会放在resources根目录下。 我们的springBoot是用Maven搭建的,所以springBoot的默认配置文件和自定义的配置文件都放在此目录。 springBoot的 默认配置文件为 application.properties 或 application.yml,这里我们使用 application.properties。 首先在application.properties中添加我们要读取的数据。 server.port = 8081 custom.name = lonewalker custom.age = 18 第一种方式 我们可以通过@Value注解,这是Spring就有的,使用${...}占位符来读取配置在属性文件中的内容,既可以加在属性也可以加在方法上 import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; @Component public class User { @Value("${custom.name}") private String name; private Integer age; public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } @Value("${custom.age}") public void setAge(Integer age) { this.

【JAVA项目】计算机毕设基于web开发的宠物领养系统

精彩专栏推荐订阅:在 下方专栏👇🏻👇🏻👇🏻👇🏻 💖🔥作者主页:计算机毕设木哥🔥 💖 文章目录 **一、网页介绍****二、网页效果**2.1图片展示 **三、摘要**四、代码展示五、以下是页面设计的亮点: 一、网页介绍 本文介绍了WEB宠物领养系统旨在帮助流浪动物找到家。通过现代技术,用户可以浏览不同宠物的信息,提交领养申请后经过审核匹配合适的宠物系统。 二、网页效果 2.1图片展示 用户模块: 管理员模块: 三、摘要 本文介绍了一个基于WEB的宠物领养系统,旨在帮助流浪动物寻找合适的家庭。该系统通过现代技术,让用户浏览不同种类的可领养宠物信息,包括照片、性格描述和健康状况等。用户可以提交领养申请,经过审核后进行匹配和推荐。系统注重信息透明和用户安全,为宠物和领养者搭建了一个安全可靠的连接平台,促进了宠物领养的便捷过程。 四、代码展示 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.huang.dao.PetBlogMapper"> <resultMap id="PetBlogResultMap" type="com.huang.entity.PetBlog"> <id property="id" column="id"/> <result property="introduce" column="introduce"/> <result property="images" column="images"/> <result property="title" column="title"/> <result property="userId" column="userId"/> <association property="user" javaType="com.huang.entity.User"> <id property="id" column="id"/> <result property="username" column="username"/> <result property="password" column="password"/> <result property="email" column="email"/> <result property="sex" column="sex"/> <result property="name" column="name"/> <result property="

win11出现安全中心空白和IT管理员已限制对此应用的某些区域的访问

问题 windows安全中心服务被禁用 win+r 输入services.msc 找到windows安全中心服务查看是否被禁用,改为启动,不可以改动看第三条 打开设置,找到应用—windows安全中心–终止–修复–重置 重启如果还是不行看第四条 家庭版系统需要打开gpedit.msc–新建文件本 @echo off pushd "%~dp0" dir /b C:\Windows\servicing\Packages\Microsoft-Windows-GroupPolicy-ClientExtensions-Package~3*.mum >List.txt dir /b C:\Windows\servicing\Packages\Microsoft-Windows-GroupPolicy-ClientTools-Package~3*.mum >>List.txt for /f %%i in ('findstr /i . List.txt 2^>nul') do dism /online /norestart /add-package:"C:\Windows\servicing\Packages\%%i" pause 另存为cmd格式—双击运行 打开本地组策略编辑器 禁用–右键属性–选择已禁用—重启–不行看第八条 编辑注册表—win+r 修改值–start改为4/8—重启(卸载所有第三方杀毒软件如火绒、360) 计算机\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SecurityHealthService 无法修改start 找到上级目录services 选择administrators —选择高级–更改 高级–立即查找–找到adminnistrator–选择或者输入everyone确定–勾选两个替换容器对象 选择administrator(everyone)–勾选权限–确定—修改start值(2/4/8)—重启电脑 完成

如何在Ubuntu 18.04上安装PHP 7.4并搭建本地开发环境

引言 PHP是一种流行的服务器脚本语言,用于创建动态和交互式web页面。开始使用你选择的语言是学习编程的第一步。 本教程将指导您在Ubuntu上安装PHP 7.4,并通过命令行设置本地编程环境。您还将安装依赖管理器Composer,并通过运行脚本来测试您的安装。 前期准备 要完成本教程,您需要安装Ubuntu 18.04的本地或虚拟机,并具有管理权限和到该机器的互联网连接。您可以通过Ubuntu发布页面下载此操作系统。 第1步 设置PHP 7.4 你将在命令行中完成安装和设置,这是一种与计算机交互的非图形化方式。也就是说,你不需要点击按钮,而是需要输入文本,并通过文本从计算机接收反馈。 命令行,也称为shell或终端,可以帮助您修改和自动化您每天在计算机上执行的许多任务,是软件开发人员的一个重要工具。要学习许多终端命令,它们可以让你做更强大的事情。这篇介绍Linux终端的文章可以让你更好地适应终端。 在Ubuntu上,你可以通过点击屏幕左上角的Ubuntu图标,在搜索栏中输入terminal来找到Terminal应用程序。单击终端应用程序图标来打开它。或者,您可以同时按下键盘上的CTRL、ALT和T键来自动打开终端应用程序。 您需要避免依赖PHP的默认版本,因为默认版本可能会根据您运行代码的位置更改。您可能还希望安装一个不同的版本以匹配您正在使用的应用程序,或者升级到较新的版本,如PHP 8。 运行以下命令来更新apt-get本身,它确保你可以访问你想要安装的任何内容的最新版本: sudo apt-get update 接下来,安装software-properties-common,它可以管理额外的软件资源: sudo apt -y install software-properties-common -y标志将自动同意安装。如果不这样做,每次安装都会在终端窗口中收到一个提示。 接下来,安装ppa:ondrej/php仓库,它将提供所有版本的PHP: sudo add-apt-repository ppa:ondrej/php 最后,再次更新apt-get,让你的包管理器可以看到新列出的包: sudo apt-get update 现在您可以使用以下命令安装PHP 7.4了: sudo apt -y install php7.4 检查安装的版本: php -v 你看到类似下面的内容: OutputPHP 7.4.0beta4 (cli) (built: Aug 28 2019 11:41:49) ( NTS )ight (c) The PHP Group Zend Engine v3.4.0-dev, Copyright (c) Zend Technologies with Zend OPcache v7.

vue 报错

报错 npm install 报错:code ELIFECYCLE errno 1 This is probably not a problem with npm. There is Vue前端项目用npm install 报错:code ELIFECYCLE errno 1 This is probably not a problem with npm. There is

Proteus仿真-三极管,MOS管

如图所示 ,左为NMOS管用作下管,高电平导通点亮LED;右为PMOS管用作上管,低电平导通点亮LED。 如图所示 ,左为NPN型三极管高电平导通点亮LED;右为PNP型三极管低电平导通点亮LED。

C语言学习笔记 —— 转换函数

一、字符串与数值互转 1.1 字符串转数值 1.1.1 字符串转整型 atoi 头文件:#include<stdlib.h> 功能把字符串转换成整型数(忽略掉字符串左空格,直到遇上数字或正负符号才开始做转换,而再遇到非数字或字符串结束时(‘\0’)才结束转换)函数定义int atoi(const char *nptr)参数nptr:指向要转换的字符串返回返回转换后的整数值 用法: #include <stdlib.h> #include <stdio.h> int main(void) { int n; char *str = "12345.67"; n = atoi(str); printf("n=%d\n",n); return 0; } 输出:n = 12345 sscanf 1.1.2 字符串转长整型 atol 头文件:#include<stdlib.h> 功能把字符串转换成长整型数(忽略掉字符串左空格,直到遇上数字或正负符号才开始做转换,而再遇到非数字或字符串结束时(‘\0’)才结束转换)函数定义long atol(const char *nptr)参数nptr:指向要转换的字符串()返回返回转换后的长整数值 用法: #include <stdlib.h> #include <stdio.h> int main(void) { long l; char *str = "98765432"; l = atol(str); /* 原来为l = atol(str); */ printf("l = %ld\n", l); return(0); } 输出:l = 98765432 strtol

Android入门教程之Activity(生命周期,启动...)

Activity 是一个应用组件,用户可与其提供的屏幕进行交互,以执行拨打电话、拍摄照片、发送电子邮件或查看地图等操作。 每个 Activity 都会获得一个用于绘制其用户界面的窗口。窗口通常会充满屏幕,但也可小于屏幕并浮动在其他窗口之上。 Activity 1. Activity 的使用 我们新建的工程中带有一个基础 activity。 新建工程中,需要注意3个文件。 MainActivity.java 在src/main/java里,对应的包名目录下。activity_main.xml 在res/layout里。AndroidManifest.xml 在src/main里。这里叫做“清单文件”。 这3个文件分布在不同的地方。简单来说,java文件可以控制界面逻辑。 layout文件(这里指的是activity_main.xml)预设了UI如何摆放。 清单文件告诉系统,我这个app有哪些组件,申请了什么权限。 2. layout - 界面布局 新建的 layout 中,as 一般会默认给一个ConstraintLayout。比如 activity_main.xml。 activity_main.xml <?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <!-- 省略默认的TextView --> </androidx.constraintlayout.widget.ConstraintLayout> 这里为了用起来方便,我们把它换成LinearLayout 有的朋友会问,都2021年了,为什么不直接用 ConstraintLayout? 现在不做什么功能,先用LinearLayout,就是为了方便。 换成LinearLayout后,layout文件长这样。 换成LinearLayout后的activity_main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <!-- 省略默认的TextView --> </LinearLayout> 可以看到,标签的开头和结尾都换成了LinearLayout。其他地方暂时不修改。 as功能强大,非常便利。我们可以用鼠标选中标签开始的androidx...Layout,然后直接键盘输入LinearLayout的前几位字母。 as会自动弹出选择框,在里面双击选择LinearLayout或者回车选择,标签就替换完成了。 3. Java - 控制界面 layout文件设计的是界面的初始布局。它决定了初始界面上放着什么UI组件以及组件是怎么组织安排的。

base64格式的图片字符串和图片文件相互转换的代码

在移动端上传图片的时候通常会将图片转换成base64格式的字符串提交,所以此时需要使用服务器端的程序进行转换成二进制的数据。如下PHP代码实现了图片文件和base64格式的图片字符串相互转换的方法,同时保证了图片字符串转图片文件时数据类型的问题,进行了简单的封装,使用时可根据实际情况进行修改。具体查看如下代码: class Img { /** @param $base64Str base64格式的图片字符串数据 @param $path 保存的文件路径和文件名(不用带扩展名 自动匹配) */ function base64ToImg($base64Str,$path){ $arr = explode(',',$base64Str); $bin = base64_decode($arr[1]); $ext = $this->getImgExt($bin);//获取真实扩展名 if($ext !== false){ file_put_contents($path . '.' . $ext,$bin); }else{ exit('图片格式非法'); } } /* 图片文件转base64格式的图片字符串 @param $img_file 图片路径和文件名 return 图片字符串 */ function imgToBase64($img_file){ $img_info = getimagesize($img_file); $img_src = "data:{$img_info['mime']};base64," . base64_encode(file_get_contents($img_file)); return $img_src; } /** 获取图片文件的扩展名 如果不是图片数据则返回false @param $bin 二进制图片数据流 return 图片扩展名 */ public function getImgExt($bin){ $bits = array( 'jpg' => "

VUE项目devServer.proxy(正向代理)匹配请求中的地址工作流程

在Vue项目的开发过程中,为了本地调试方便,通常会在vue.config.js 中配置 devServer。在devServer中配置proxy属性,可以将指向本地的请求(例如: http://localhost:8080/api/action) 代理到后端的开发服务器上(例如: http://localhost:8089/personal-management/action)。 如何理解正向代理:代理服务器代替客户端向服务器发起请求。隐藏客户端。 发起请求:代理服务器从客户端发出请求,向目标服务器发起请求。 响应数据:目标服务器响应请求,代理服务器接收请求,并转发给客户端。 日常使用的翻墙就是基于这个原理。 devServer: { /** 接口代理 */ proxy: { '/api': { target: 'http://localhost:8089/personal-management', changeOrigin: true,/** 是否允许跨域 */ ws: false,//是否启用websockets,用不到可设为false pathRewrite: {//对路径匹配到的字符串重写 "^/api": "", // 替换前缀'/api',即:请求到 http://localhost:8080/api/xxx 现在会被代理到请求 http://localhost:8089/personal-management/xxx, 例如 /api/user 现在会被代理到请求 http://localhost:8089/personal-management/user }, } } } 当浏览器发起一个请求后, 前端拿配置项中的地址去匹配请求中的地址,如果请求的地址中包含配置中的地址,则匹配成功,匹配成功后,会将匹配到的地址及其后面的地址拼到target的后面,向后端服务器发起跨域请求。 举个栗子: 浏览器发起请求:http://localhost:8080/api/user和配置项匹配成功后,将/api/user拼接到target的后面。现在,对 /api/user 的请求会将请求代理到 http://localhost:8089/personal-management/api/user如果后端接口中不包含/api,不希望传递/api,则需要重写请求路径 将浏览器发起的请求的请求URL中的 “/api” 替换为 “”此时对 http://localhost:8080/api/user 的请求,前端会将请求代理到 http://localhost:8089/personal-management/user

springboot+mybatis-plus+redis整合(附上脚手架完整代码)

首先新建一个springboot项目 next到这里的时候,我们可以选择用jdk几,还有就是Group,这个一般就是com.公司名字了,artifact就是项目名字。个人开发我还是喜欢用com.名字前缀哈。 到了这一步的话,如果对这个项目有什么别的需求,比如需要用到mybatis啥的可以勾相应的选项。其实就是idea自动帮咱导入相关的依赖。这里我们暂且啥也不勾。写过这么多的项目,咱们自己整合的依赖还是挺香的哈。 2:导入相关依赖 可能我比较懒,喜欢用mybatisplus,这些是整合mybatisplus需要的全部依赖,拿来即用哦。 <!--mybatis-plus和生成器依赖--> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.8</version> </dependency> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-generator</artifactId> <version>3.2.0</version> </dependency> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.0.5</version> </dependency> <dependency> <groupId>org.apache.velocity</groupId> <artifactId>velocity-engine-core</artifactId> <version>2.0</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.11</version> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>3.8.1</version> </dependency> <dependency> <groupId>org.codehaus.groovy</groupId> <artifactId>groovy</artifactId> <version>2.4.16</version> </dependency> <dependency> <groupId>org.codehaus.groovy</groupId> <artifactId>groovy-all</artifactId> <version>2.4.7</version> </dependency> <dependency> <groupId>io.swagger</groupId> <artifactId>swagger-annotations</artifactId> <version>1.5.20</version> </dependency> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-schema</artifactId> <version>2.9.2</version> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.8</version> </dependency> 导入运行springboot需要的依赖 <!--======================================springboot部分=========================--> <!-- log4j2 日志 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-log4j2</artifactId> </dependency> <!

关于在Vue中使用ref(此.$refs未定义 undefind)

vue的ref(this.$refs获取为undefined) 如果你获取到的总是空的,你注意一下: 1.你在哪里调用,和你调用的对象 试试在mounted()里面调用有效果没有 调用的对象是本来就存在的,还是需要数据渲染之后才会出现的,同理,在mounted()里面调用看看 2.调用对象是不是数组列表 我一开始设置ref在v-for列表上,直接获取this.$refs.name.style,永远是空的, 后来才发现,this.$refs.name是一个数组,无法通过 .style 获取样式, 只能遍历这个this.$refs.name数组,在this.$refs.name[index]上设置样式 // 6.14 更新,这个说法有点问题 但是像高度宽度,可以通过offsetHeight,等来获取。 3.调用对象是否和v-if结合使用 ref不是响应式的,所有的动态加载的模板更新它都无法相应的变化。 解决方案: 通过 1 2 3 setTimeout(() => { }, 0) 来得到数据 vue的$refs属性几个注意点 1.在vue中获取dom推荐使用$refs来获取 可是有时会出现 this.$refs.xxx 为undefined的情况。 场景1:在created()里使用 在这个生命周期中进行数据观测 ,属性和方法的运算,watch 事件回调。但是页面还没有挂载上去,没有e l 属 性 , t h i s . el 属性,this.el属性,this.refs无法调用dom。 解决办法:换成在mounted()里使用 场景2:父元素或当前元素使用了v-if或v-show 因为$refs不是响应式的,只在组件渲染完成后才会生效,在初始渲染的时候是不存在的。 因为是非响应式的,所有动态加载的模板更新它都无法相应的变化。 解决办法:可以通过setTimeout(()=>{…}, 0)来实现。 2.如果使用v-for 遍历加ref时可以使用 :,即 :ref ="variable" ,这样得到的是不同的ref。 1 2 3 4 5 <div v-for="(item,index) in arr" :key="

一套基于C#语言开发的LIMS实验室信息管理系统源码

实验室信息管理系统(LIMS)是指帮助实验室组织和管理实验数据的计算机软件系统,它将实验室操作有机地组织在一起,以满足实验室工作流程的所有要求。它能以不同的方式支持实验室的工作,从简单的过程(如样品采集和入库)到复杂的流程(如教据报告和实验结果分析),完全改变实验室的工作流程,使其变得更高效和精确。 LIMS系统是采用灵活的架构开发的,它实现了完全的集成,可以支持多种软件应用程序和技术,允许实验室以新的方式使用数据以及实施可追溯性和可持续性。 LIMS包括客户端,服务器和数据库组件,由数据库存储实验数据,服务器运行应用程序或服务,客户端用于人机交互。后端的数据库管理系统(RDBMS) 提供了实验室的基础信息,比如样品质量账户项目,仪器,家庭等。仪器和实验室技术的集成是LIMS的核心功能。这使实验室能够按照实验室的工作流程集成仪器接口和在线分析功能,以便自动将仪器测量结果插入到实验数据库。 LIMS系统也可以与其他体系结构集成,这使实验室能够将数据发布到外部客户端设备,同时更新内外部数据库。这样,它就可以将实验室中的数据发送到流在控制系统,在实验室中没有用过的样品多次使用,以及为参与供应链管理的实验提供全面的实验数据记录。 LIMS可以提高实验室管理效率,追踪实验进展,控制实验室主要流程,以及管理实验结果和实验报告。它还可以支持特定的行业标准,以及遵守工业定期审计的要求。 LIMS的典型应用场景在于实验室,包括学术研究中心和公司实验室,用于实验过程的跟踪,管理和结果分析。它们还可用于相关的行业,如制药,食品,医疗,环境,化学和生物技术等。 LIMS系统由不同类型的组件构成,包括样品管理,数据管理,实验管理,测试运行,精确性和可重复性,分析日志,统计分析和报表,以及处理,存储和存档全部实验结果等组件。由于LIMS实现了与实验室相关的数据,因此可以支持实验室的可追溯性和实验可重复性。 LIMS系统功能包括: 人员管理:人员基本信息/考核记录/工作记录; 仪器管理:仪器基本信息/仪器应检提醒/仪器期间核查提醒/仪器检定记录/仪器维修保养记录; 耗材管理:材料、试剂、标准品基本信息管理/出入库管理/最低库存量报警、有效期报警; 标准品管理:标准品基本信息记录、浓度、不确定度等、标准品使用情况记录,有效期提醒; 客户管理:文件电子存档、文档预览、文件版本修订; 文件管理:客户分类,供应商、委托客户等,委托客户可在业务登记时自动保存和更新,业务登记时可关键字直接调用客户信息; 资源统一管理:把人员、仪器、耗材进行有序管理,检测工作流程化,系统化,便于管理。 LIMS可以支持多元化的服务,以便实现较高的客户满意度,与现有的实验室系统相比,未集成到LIMS的实验室系统要大量的人力和时间,有时还需要技术支持,这会增加实验室的运行成本,LIMS可以帮助实验室降低操作成本,大大提高工作效率,缩短实验时间,提升实验室的工作质量和客户满意度。

AndroidStudio修改生成的apk名称

使用 AndrodiStudio 编译生成的apk ,如果没有改动,名称一般为 app-debug.apk 或者 app-release.apk ,多个工程都是这个名称的话,不方便辨认。 AndroidStudio 修改默认生成的 apk 名称,只需要修改 app 的 build.gradle 即可, 在 android{ } 中添加如下: android.applicationVariants.all { variant -> variant.outputs.all { //这里修改apk文件名 outputFileName = "ApkName_${variant.name}_v${variant.versionName}.apk" } } 示例中生成的apk名称为 ApkName_release_v1.0.apk 、 ApkName_debug_v1.0.apk 多渠道打包、添加时间点修改 static def releaseTime() { return new Date().format("yyyy_MM_dd_HH.mm", TimeZone.getTimeZone("GMT+8")) } android { .... applicationVariants.all { variant -> variant.outputs.all { outputFileName = "${variant.productFlavors[0].name}_v${variant.productFlavors[0].versionName}_${releaseTime()}.apk" } } } ${variant.productFlavors[0].name} 当前渠道名 ${variant.productFlavors[0].versionName} 当前版本名 ${releaseTime()} 当前时间 此示例生成 ApkName_v2.0_2020_07_03_16.38.apk

APK 加固之后二次签名的问题

JKS 转为 KeyStore keytool -importkeystore -srckeystore targe.jks -srcstoretype JKS -deststoretype PKCS12 -destkeystore target.p12 keytool -v -importkeystore -srckeystore targe.p12 -srcstoretype PKCS12 -destkeystore targe.keystore -deststoretype JKS // 加固之后的包重新签名 keytool -importkeystore -srckeystore /Users/alexander/Desktop/Work/Code/jacf009_jacfaqsc_android/app/jacf.jks -srcstoretype JKS -deststoretype PKCS12 -destkeystore jacf.p12 keytool -v -importkeystore -srckeystore /Users/alexander/Desktop/Work/Code/jacf009_jacfaqsc_android/app/jacf.p12 -srcstoretype PKCS12 -destkeystore jacf.keystore -deststoretype JKS // cd 到指定的目录下当前目录下去签名 目录为:cd /Users/alexander/Library/Android/sdk/build-tools/29.0.3 到这个目录下才能使用apksigner ./apksigner sign --ks jacf.keystore --ks-key-alias jingan --out jscf_signed.apk jacf_unsigned.apk 记得把对应的unsigned.apk 拷贝进去

Anaconda的python虚拟环境中安装cudatoolkit和cudnn加速tensorflow

1. 背景 由于本地安装了cuda 10.0, 但是现在需要在Anaconda中安装不同的python虚拟环境来安装tensorflow-gpu、对应的cudatoolkit、对应的cudnn来加速,下面是具体的演示流程 2. 安装 我这里以安装tensorflow-gpu==1.9.0为例,首先进入python的虚拟环境,source activate py37_tf 通过"conda search tensorflow-gpu", 可以看到有满足安装版本要求的tensorflow-gpu 然后使用清华源安装: pip install tensorflow-gpu==1.9.0 -i Simple Index 安装成功以后去网络上搜索"tensorflow和GPU的对应关系" 可以看到需要对应安装cudatoolkit==9.0, 我们在通过命令: "conda search cudatoolkit"来看一下是否有此cudatoolkit的安装包,输入"conda search cudatoolkit" 发现是有这个cudatoolkit 9.0的,于是执行: conda install cudatoolkit==9.0 安装成功cudatoolkit之后,需要再安装对应版本的cudnn, 于是通过conda search cudnn查看一下,发现也是有可以安装的版本 于是执行: conda install cudnn==7.3.1 则可以安装成功 上面的tensorflow-gpu、对应的cudatoolkit、对应的cudnn都安装好了之后,需要查看先tensorflow是否支持gpu加速,执行: import tensorflow as tf tf.test.is_gpu_available() 发现输出结果为True, 则到此支持GPU加速的tensorflow-gpu安装完毕。 参考链接: 【深度学习】不同虚拟环境安装不同Pytorch版本_不同环境安装不同pyorch_视觉闫小亘的博客-CSDN博客

微信小程序 echarts 画多个横向柱状图

然后是json { "usingComponents": { "ec-canvas": "../../common/ec-canvas/ec-canvas" }, "navigationBarTitleText": "主题活动" } ec-canvas获取方式 在链接里下载代码 然后copy ec-canvas文件夹到自己的项目 https://gitcode.net/mirrors/ecomfe/echarts-for-weixin?utm_source=csdn_github_accelerator&from_codechina=yeshttps://gitcode.net/mirrors/ecomfe/echarts-for-weixin?utm_source=csdn_github_accelerator&from_codechina=yes //js里引入echarts 在page上面 import * as echarts from '../../common/ec-canvas/echarts' Page({...}) getStatisticThemeActivitiesTrend(){ const that = this let oUserInfo = this.data.userInfo util.request(api.statisticThemeActivitiesTrend + oUserInfo.userId + '&startDate=' + that.data.startDate + '&endDate=' + that.data.endDate, '', 'get').then(res => { if (res.code == 200) { let odata = res.data this.setData({ info: odata }) if(!odata.themeList || odata.themeList.length == 0){ util.alert("暂无数据") return } //主要代码 odata.

安装PyCharm2023及配置Python3.8环境

一、Python3.8安装 1、文件下载 官方网址:Python Releases for Windows | Python.org(下载速度较慢) 下载Win10-Python3.8-64位可执行版本 2、Python安装 i、双击安装,同时勾选“添加Python3.8至路径”选项 ii、自定义安装设置 iii、点击“next” iv、更改安装路径(放在自己找得到的路径下),点击“安装” v、安装,安装完成后点击“close”结束。 3、查看是否安装成功 i、点击“开始”,“所有程序”,翻到“Python3.8”文件夹,若出现如下图则安装成功。 ii、“win+R“调出”运行“,输入”cmd“调出命令提示符,输入”python“,若显示Python版本信息则安装成功。 iii、可以在命令提示符cmd窗口,直接运行python命令 iv、也可以在IDLE中以单句指令或文件形式运行 注 IDLE:Integrated Development and Learning Environment,集成开发和学习环境 但是该 IDLE功能较少,而“PyCharm”、“Visual Studio Code”功能强大,因此更常用。 ① 单句指令 ② 文件形式 点击“File”,"New File"创建文件,输入指令,保存并运行。 运行效果 二、PyCharm社区版安装 1、文件下载 官方网址:Download PyCharm: Python IDE for Professional Developers by JetBrains PyCharm专业版收费,因此下载社区版 2、PyCharm社区版安装 i、双击安装至自定义路径 ii、根据需要进行选择(这里全选) iii、点击“Install” iv、安装中 v、安装完成 三、PyCharm中创建项目并运行 1、对PyCharm的中文、字体字号、界面风格等设置 详情请查看笔记“PyCharm初始设置步骤” 2、创建项目 i、点击“新建项目”,如创建过项目,则点击“打开”; ii、绑定系统解释器(初学者先不用虚拟环境) iii、选择“系统解释器”,“系统解释器”实为安装的Python3.8 iv、点击“确定”后界面如下 iv、点击“创建”后界面 v、若不习惯界面,可在“IDE和项目设置”进行切换 3、新建.py文件 i、右键项目,“新建”,“Python文件” ii、输入.py文件名称后,弹出Python编辑界面 iii、输入Python指令

使用Python调用ChatGPT API

使用Python调用ChatGPT API ChatGPT是一个基于OpenAI的GPT模型的聊天接口。它可以用于构建聊天机器人、智能助手等自然语言处理应用。本文将介绍如何使用Python调用ChatGPT的API,并展示一些示例代码。 特别注意 GPT会禁止国内IP访问,所以在运行代码的网络环境下必须是非大陆,实测过香港可以,有些国外的地区也是不支持的你想要的答案都在代码和注释里,很详细很清楚 准备工作 在开始之前,您需要完成以下准备工作: 注册OpenAI账号:访问OpenAI官方网站 openai.com,注册一个账号并登录。 创建API密钥:登录OpenAI后台,转到"API Keys"页面,在那里您可以创建一个新的API密钥。 安装OpenAI Python库:打开终端或命令提示符,运行以下命令安装OpenAI Python库: pip install openai 获取API密钥:在Python代码中,您需要将OpenAI账号的API密钥作为环境变量传递给OpenAI库。您可以在终端或命令提示符中运行以下命令设置环境变量: export OPENAI_API_KEY='your-api-key' 调用ChatGPT API 以下是一个使用Python调用ChatGPT API的示例代码: import openai # 设置API密钥 openai.api_key = 'your-api-key' # 调用ChatGPT API response = openai.Completion.create( model="gpt-3.5-turbo",# 还有其他模型如:gpt-3.5-turbo-16k(支持更大输入输出文本)、gpt-4(账号需要付款1美刀以上解锁)、gpt-4-32k(支持更大文本,一般用户无法使用) messages=[{ role: 'system', content: '你是一个数学老师',{ role: 'user', content: '你好,1+1等于几?' }],# role参数有三个选项system(系统设定,赋予gpt一个角色)、user(代表用户也就是你)、assistant(代表gpt),content就是文本内容了,需要联系上下文的话,把前面的历史对话都添加进入到这个数字里即可,这样GPT就能关联上下文了! temperature=0.8,# 取值在0-2,值越低回答越死板较为官方标准,值越高回答越随机,答案可能会很离谱荒谬 stream=false, # 是否采用流文本传输,false的话GPT会一次性把回复内容全部发给你,等待的时间会比较长,响应数据里面会包含输入tokens数和输出tokens数;true的话GPT就会一个一个字的回复给你,需要多次接收,搞起来稍微麻烦一点,这样也能实现像官网那样的打字回复效果,但是响应数据里面不会包含输入tokens数和输出tokens数,这样就需要你利用tiktoken这个库去实现自己计算tokens的消耗了。 ) # 输出响应 print(response.choices[0].text.strip()) # 若需长期使用chatgpt需要必备三样东西: #1. 魔法梯子 #2. 国外手机号接验证码注册 #3. 国外信用卡(这个最难) #如果不想这么麻烦的话,这里有一个国内镜像可长期免费使用:chatgpt.indexls.com 在上面的代码中,我们通过设置openai.api_key变量将API密钥传递给OpenAI库。然后,我们调用了openai.Completion.create函数来发送一个聊天请求。在这个请求中,我们指定了ChatGPT的模型引擎、聊天的提示、生成的最大令牌数等参数。最后,我们打印出API的响应结果。

【kubeadm的配置安装】

目录 一、环境准备二、所有节点安装docker三、部署K8S集群1、查看镜像2、初始化kubeadm方法一:1、修改配置文件2、在线拉取镜像3、初始化 master 方法二、 3、设定kubectl4、所有节点部署网络插件flannel 四、部署 Dashboard1、在 master01 节点上操作 master(2C/4G,cpu核心数要求大于2) 192.168.102.10 docker、kubeadm、kubelet、kubectl、flannel node01(2C/2G) 192.168.102.30 docker、kubeadm、kubelet、kubectl、flannel node02(2C/2G) 192.168.102.40 docker、kubeadm、kubelet、kubectl、flannel Harbor节点(hub.kgc.com) 192.168.102.50 docker、docker-compose、harbor-offline-v1.2.2 1、在所有节点上安装Docker和kubeadm 2、部署Kubernetes Master 3、部署容器网络插件 4、部署 Kubernetes Node,将节点加入Kubernetes集群中 5、部署 Dashboard Web 页面,可视化查看Kubernetes资源 6、部署 Harbor 私有仓库,存放镜像资源 一、环境准备 //所有节点,关闭防火墙规则,关闭selinux,关闭swap交换 systemctl stop firewalld systemctl disable firewalld setenforce 0 sed -i 's/enforcing/disabled/' /etc/selinux/config iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X swapoff -a #交换分区必须要关闭 sed -ri 's/.

echart折线图,调节折线点和y轴的间距(亲测可用)

options代码: options = { tooltip: { trigger: 'axis', //坐标轴触发,主要在柱状图,折线图等会使用类目轴的图表中使用。 }, xAxis: { type: 'category',//类目轴,适用于离散的类目数据,为该类型时必须通过 data 设置类目数据。 name: '日期',//坐标轴名称 boundaryGap: false, data: dataYearCountName, nameGap: 7,//坐标轴名称与轴线之间的距离。 axisTick: {//是否显示坐标轴刻度。 inside: true//坐标轴刻度是否朝内,默认朝外。 } }, yAxis: { type: 'value', name: '例数', splitLine: { show: false//是否显示分隔线。默认数值轴显示,类目轴不显示。 }, nameGap: 15, axisTick: { inside: true } }, series: [{ type: 'line',//线条 name: '例数',//系列名称,用于tooltip的显示 data: dataYearCountNum, symbol: 'circle',//标记的类型:圆圈 label: { show: true, position: 'top' }, itemStyle: { normal: { shadowBlur: 50,//文字块的背景阴影长度。 shadowColor: 'red',//文字块的背景阴影颜色。 color: 'red',//图形的颜色 lineStyle: { color: '#4d6dfd',//线的颜色 width: 1//线的宽度 } } } }], grid: { x: '0', //相当于距离左边效果:padding-left y: '15%', //相当于距离上边效果:padding-top bottom: '3%', containLabel: true } }; 调节前如图:

Stm32f103c8t6(proteus仿真)学习——8-1.输入捕获模式测量频率

目录 **一、proteus原理图绘制****二、代码的编写****1. IC.c文件****2. IC.h文件****3. PWM.c文件****4. PWM.h文件****5. main.c文件****6. 效果展示** **三、项目(代码+仿真)分享链接** 一、proteus原理图绘制 输入捕获模式测量频率,原理图如下 这里使用TIM3 CH1产生PWM信号,使用TIM2 CHI输入捕获PWM信号 对应引脚是 TIM3 CH1:PA6;TIM2 CH1:PA0 二、代码的编写 1. IC.c文件 此文件是用来配置输入捕获模式的 使用 TIM2 CH1:PA0 #include "IC.h" void IC_Init(void) //输入捕获初始化函数 { //GPIO的结构体定义,定义一个GPIO类型的结构体,名字为GPIO_InitStructure GPIO_InitTypeDef GPIO_InitStructure; //TIM_TimeBase的结构体定义,定义一个TIM_TimeBase类型的结构体,名字为TIM_TimeBaseInitStructure TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure; //TIM_IC的结构体定义,定义一个TIM_IC类型的结构体,名字为TIM_ICInitStructure TIM_ICInitTypeDef TIM_ICInitStructure; //开启定时器2的时钟,注意是APB1(GPIO的是APB2) RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); //开启GPIO的时钟,注意是APB2 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //输入捕获引脚的定义,TIM2 CH1 --> 对应 PA0 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //设置引脚为上拉模式 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; //PA0 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //引脚速度 GPIO_Init(GPIOA, &GPIO_InitStructure); //PA0 //选择定时器的内部时钟源 TIM2 TIM_InternalClockConfig(TIM2); //配置定时器时基单元:TIM_TimeBase //选择时钟分频,可以选择1分频、2分频和4分频 TIM_TimeBaseInitStructure.

利用Jackson封装常用的JsonUtil工具类

在实际开发中,我们对于 JSON 数据的处理,通常有这么几个第三方工具包可以使用: gson:谷歌的fastjson:阿里巴巴的jackson:美国FasterXML公司的,Spring框架默认用的 由于以前一直用习惯了阿里的 fastjson,最近突然改为 jackson ,不是太习惯,所以手写一个工具类,应付一下工作中常用的一些方法。 1. 引入依赖包 在 pom.xml 文件中加入以下依赖 <!-- 引入jackson依赖包--> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.14.2</version> </dependency> 2. 编写 JsonUtil 工具类 package com.yuhuofei.utils; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializationFeature; import com.fasterxml.jackson.databind.node.ArrayNode; import com.fasterxml.jackson.databind.node.ObjectNode; import lombok.extern.slf4j.Slf4j; import java.io.File; import java.io.IOException; import java.text.SimpleDateFormat; /** * @Description 由于习惯了用fastjson处理JSON数据,突然改成用jackson,有些不适应,所以打算用jackson封装出类似fastjson里的方法进行使用 * @ClassName JsonUtil * @Author yuhuofei * @Date 2023/8/19 14:36 * @Version 1.0 */ @Slf4j public class JsonUtil { private static ObjectMapper objectMapper = new ObjectMapper(); // 时间日期格式 private static final String STANDARD_FORMAT = "

Web安全之XXE漏洞

一、漏洞简介 1.1、XXE漏洞简介及产生原因 XXE漏洞简介 XXE(XML External Entity Injection),即 XML 外部实体注入漏洞,XXE 漏洞发生在应用程序解析 XML 输入时,没有禁止外部实体的加载,导致可加载恶意外部文件,造成文件读取、命令执行、内网端口扫描、攻击内网网站,发起 dos 攻击。 XXE 漏洞触发的点出现在系统可以上传 XML 文件的位置,应用程序对XML输入进行解析时,没有对上传的 XML 文件内容进行过滤,没有禁止加载外部实体,导致攻击者可以构造一个恶意的 XML 文件进行上传。 产生原因 有外部实体,将数据传入服务器,而且传入的格式是 XML 。如下: <!DOCTYPE message[<!ENTITY xxe SYSTEN "file:///etc/passwd">]> 服务器会将 XML 进行解析,解析后将内容最终显示到某一个地方,最终显示数据的地方能够被取到。 1.2、XML简介 XML 指可扩展标记语言(EXtensible Markup Language)。 XML 是一种很像 HTML 的标记语言。 XML 的设计宗旨是传输数据,而不是显示数据。 XML 标签没有被预定义。您需要自行定义标签。 XML 被设计为具有自我描述性。 1.3、XML和HTLM的区别 XML 被设计用来传输和存储数据。 HTML 被设计用来显示数据。 1.4、XML文档构建模块 XML文档结构包括XML声明、DTD文档类型定义(可选)、文档元素。 所有的 XML 文档(以及 HTML 文档)均由以下简单的构建模块构成:元素、属性、实体、PCDATA、CDATA 1.4.1、实体 实体是用来定义普通文本的变量。实体引用是对实体的引用。 实体又分为一般实体和参数实体。 (1)一般实体 一般实体的声明:<!ENTITY 实体名称 "实体内容"> 引用一般实体的方法:&实体名称;

Unity框架学习--场景切换管理器

活动场景 用脚本实例化的游戏对象都会生成在活动场景中。 哪个场景是活动场景,则当前的天空盒就会使用该场景的天空盒。 只能有一个场景是活动场景。 在Hierarchy右击一个场景,点击“Set Active Scene”可以手动把这个场景设置为活动场景。也可以使用SceneManager.SetActiveScene方法把一个加载了的场景设置为活动场景。 异步加载 AsyncOperation相关的代码应写在一个协同程序中。 AsyncOperation 对象名=SceneManager.LoadSceneAsync(string 场景名) 开启异步加载场景,并把异步加载的信息存储在AsyncOperation型对象中。 AsyncOperation型对象.allowSceneActivation 返回bool型,表示是否允许在场景加载完毕后立即激活该场景。 值为true表示一旦该场景异步加载完毕,则会立即激活该场景。 值为false表示即使加载场景完毕也不会激活该场景,直到用代码再次把这个变量的值改为true,才会激活该场景。 AsyncOperation型对象.progress 返回float型,范围是0-1。表示异步加载的进度,开始是0,完成时是1 注意:当AsyncOperation型变量.allowSceneActivation的值为false,这个参数的值最多会卡在0.9,直到AsyncOperation型变量.allowSceneActivation的值变为true,这个参数的值才会变为1 AsyncOperation型对象.isDone 返回bool型。表示该异步加载是否完成。如果完成,则值为true,如果未完成,则值为false。 当AsyncOperation型对象.progress的值为1时,此时这个变量的值才为true,但这样就会激活新的新场景,一般很难观测到AsyncOperation型对象.isDone是true AsyncOperation型对象.priority 返回int型,用于设置异步操作的优先级。 当有多个异步操作排队时,将优先执行更高优先级的异步操作。但如果异步操作在后台线程上启动, 则更改优先级没有任何效果。 AsyncOperation.completed 这个是一个有一个AsyncOperation型参数的Action事件。该AsyncOperation型参数存储了本次异步加载的信息。 当异步加载完成,也就是AsyncOperation型对象.isDone的值为true时,会执行一次这个事件。 LoadSceneManager 代码 using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.SceneManagement; using UnityEngine.Events; /// <summary> /// 切换场景的管理器 /// </summary> public class LoadSceneManager : SingletonPatternBase<LoadSceneManager> { /// <summary> /// 重新切换当前场景 /// </summary> public void LoadActiveScene() { SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex); } /// <summary> /// 切换到下一个场景,是否场景循环,最后一个场景切换是切换为第一个场景 /// </summary> public void LoadNextScene(bool isCyclical=false) { int buildIndex = SceneManager.

【C语言】作业 - 分支语句

【1】单选题 【题目名称】 关于 switch 说法不正确的是:( ) 【题目内容】 A. switct 语句中的 default 子句可以放在任意位置 B. switch 语句中 case 后的表达式只能是整形常量表达式 C. switch 语句中 case 子句必须在default子句之前 D. switch 语句中 case 表达式不要求顺序 【答案解析】 A:正确,可以放在任意位置,但是一般建议最好还是放在最后。 B:正确,case 语句后一般放整形结果的常量表达式或者枚举类型,枚举类型也可以看成是一个特殊的常量。 C:错误,没有规定 case 必须在 default 之前,一般 case 最好放在 default 之前。 D:正确,但一般还是按照次序来。 【2】单选题 【题目名称】 则 func(1) = ( ) 【题目内容】 A. 30 B. 20 C. 16 D. 0 【答案解析】 switch 的每个 case 之后如果没有加 break 语句,当前 case 执行结束后,会继续执行紧跟case 中的语句。 func(1) 可知,在调用 func 时形参 a 的值为 1,switch(a) <==> switch(1), case 1 被命中,因为该 switch 语句中所有分支下都没有增加 break 语句,因此会从上往下顺序执行,最后执行default 中语句返回。

Python:逢七拍腿游戏

场景模拟: 通过在 for 循环中使用 continue 语句实现计算拍腿次数,即计算从1到100(不包括100),一共有多少个尾数为7或7的倍数这样的游戏,代码如下: total = 99 # 记录拍腿次数的变量 for number in range(1, 100): # 创建一个从1到100(不包括)的循环 if number % 7 == 0: # 判断是否为7的倍数 continue # 继续下一次循环 else: string = str(number) # 将数值转换为字符串 if string.endswith('7'): # 判断是否以数字7结尾 continue # 继续下一次循环 total -= 1 # 可拍腿次数-1 print("从1数到99共拍腿", total, '次。') # 显示拍腿次数 说明:第3行代码实现的是:当所判断的数字是7的倍数时,会执行第4行的 continue 语句,跳过后面的减1操作,直接进入下一次循环;同理,第7行代码用于判断是否以数字7结尾,如果是,直接进入下一次循环

WPF --- 重写圆角DataGrid样式

引言 因要符合UI设计, 需要一个圆角的 DataGrid 样式,且需要一个更美观的滚动条,所以重写了一下微软 「WPF」 原生的 DataGrid 的样式,包含如下内容: 基础设置,一些基本背景色,字体颜色等。 滚动条样式。 实现圆角表格,重写表格的一些基础样式,例如 CellStyle ,RowStyle,RowHeaderStyle, ColumnHeaderStyle等。 代码 「具体样式代码如下」: <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:System="clr-namespace:System;assembly=mscorlib" xmlns:theme="clr-namespace:Microsoft.Windows.Themes;assembly=PresentationFramework.Classic"> <!--#region 基础设置--> <SolidColorBrush x:Key="DataGridBackground" Color="#DCE3EC" /> <SolidColorBrush x:Key="DataGridForeground" Color="#313F56" /> <System:Double x:Key="DataGridFontSize">22</System:Double> <SolidColorBrush x:Key="{x:Static DataGrid.FocusBorderBrushKey}" Color="#FF000000" /> <BooleanToVisibilityConverter x:Key="bool2VisibilityConverter" /> <Style x:Key="RowHeaderGripperStyle" TargetType="{x:Type Thumb}"> <Setter Property="Height" Value="8" /> <Setter Property="Background" Value="Transparent" /> <Setter Property="Cursor" Value="SizeNS" /> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type Thumb}"> <Border Padding="{TemplateBinding Padding}" Background="{TemplateBinding Background}" /> </ControlTemplate> </Setter.

类似吾爱论坛的网站有哪些?软件网站合集推荐

你是不是经常想要下载一些优秀的软件,但却苦于找不到合适的资源?你是不是受够了那些充斥着广告和恶意链接的网站,渴望一个干净、安全、丰富的软件平台?你是不是想要随时随地享受软件的便利,摆脱时间和空间的束缚?如果你的答案是肯定的,那么请继续往下看,我将为你推荐几个高质量的软件资源网站,让你的软件之旅更加轻松愉快。 1、48下载 48软件下载听起来像是一个很不错的网站,提供免费软件下载和资源分享。它的分类涵盖了电脑软件、电脑游戏、手机应用、手机游戏等,看起来资源丰富多样。最重要的是,这个网站致力于打造绿色分享平台,意味着用户可以放心下载软件,不用担心恶意软件的存在。这对于我们寻找高质量软件资源的需求来说是非常重要的 2、CAD下载 CAD下载是一个专注于提供免费软件下载和资源分享的网站。网站内提供了丰富的电脑软件、电脑游戏、手机应用、手机游戏以及与CAD相关的资源和教程。我们致力于打造一个绿色的分享平台,确保用户能够安全、便捷地获取到他们所需的软件和资源。目标是为用户提供一个干净、安全、丰富的下载平台,让他们能够轻松享受到优质的软件和资源。无论你是需要CAD软件还是其他类型的软件,CAD下载都会是你的理想选择。 3、黑龙软件下载 黑龙下载站是一个为用户提供软件下载的网站。在站内分享各种软件、补丁、游戏等相关版本的下载。我们以快速更新、无推广为特点,致力于向互联网用户提供优质、方便、安全的软件下载服务。无论您需要什么类型的软件,黑龙下载站都会为您提供最新版本的下载,并确保下载过程安全可靠。目标是让用户能够轻松获取所需软件,并享受到高质量的下载服务。 4、CC下载 CC软件下载是一个提供海量免费、安全无捆绑的软件下载平台。定期更新资源,整理用户需要的各种应用工具,让大家可以方便地找到所需的软件。无论是电脑上的应用还是手机上的APP,用户都可以在CC软件下载找到并下载。致力于为用户提供一个安全、快速、方便的软件下载服务,让大家能够随时随地找到并下载所需的应用工具。无论您是电脑用户还是手机用户,只需来到CC软件下载,即可轻松获取所需的应用。 5、PS4X下载 地平线是一家专注于提供安全、纯净、快速下载服务的软件及手机应用平台。拥有海量的资源,并对这些资源进行严格的安全检测和测试,确保用户下载的应用都是纯净无毒的。不断升级和更新软件资源,以提供精致的服务,让用户能够快捷、省心地下载所需的软件。无论您是需要电脑软件还是手机应用,地平线都能满足您的需求。目标是为用户提供一个安全、稳定、高效的下载平台,让您能够轻松获取所需的软件,享受到优质的下载体验。选择地平线,让您的下载之路更加顺畅和放心。 6、去下载 去下载是一家专注于提供海量软件下载服务的平台。对所有资源进行安全检测和测试,确保用户下载的应用是纯净无毒的。定期升级并不断更新用户所需的软件,以提供精致的服务。致力于让您的下载过程快捷、省心。无论您需要哪种类型的软件,去下载都能满足您的需求。我们的目标是为用户提供一个安全、可靠的下载平台,让您能够轻松获取所需的软件,并享受到高质量的下载服务。选择去下载,让您的下载体验更加便捷和放心。 7、魔兽下载 魔兽下载是一个提供安卓、Windows等系统攻略和教程的平台,不间断地更新游戏和软件应用的相关内容,24小时保持更新。发布最新的原创游戏攻略和软件教程评测,为用户提供全面的游戏软件应用下载服务。不论您是需要游戏攻略,还是软件教程,魔兽下载都能满足您的需求。致力于为用户提供高质量的游戏软件下载服务,让您能够轻松获取最新的游戏和软件应用,并获得相关攻略和教程的帮助。选择魔兽下载,让您的游戏和软件使用更加顺利和愉快。 总结 对于一些知名站点和工具,它们运营多年,经过了长时间的验证和用户使用,因此也是相对可信赖的。用户可以根据自己的需求,在官方网站或经过验证的知名站点上下载所需的软件。然而,仍然建议在下载之前查看用户评价和进行安全检测,以确保下载的软件是可信的。保持警惕和谨慎,选择安全可靠的下载渠道,能够有效降低风险并保护个人电脑的安全。

【win-server2012R2】无法启动此程序,因为计算机中丢失api-ms-win-crt-runtime-l1-1-0.dll。尝试重新安装该程序以解决此问题

安装程序时提示缺少dll 解决方案: 上传DirectX Repair后,运行,注意打开修复失败时启用调试模式 修复后报错如下: 思路:经过网上查找资料安装补丁KB2999226之前需要安装KB2919355,安装KB2919355之前必须安装补丁KB2919442,一层一层的。 步骤: 1、下载补丁KB2919442;KB2919355;KB2999226 请百度查找相关文件上自行下载补丁,这里也有链接: https://support.microsoft.com/en-us/help/2919442/march-2014-servicing-stack-update-for-windows-8-1-and-windows-server-2 https://support.microsoft.com/en-us/help/2919355/windows-rt-8-1-windows-8-1-windows-server-2012-r2-update-april-2014 https://support.microsoft.com/en-us/help/2999226/update-for-universal-c-runtime-in-windows 2、首先安装完成后KB2919442,立即重启生效 3、接下来安装KB2919355,立即重启生效 4、最后安装KB2999226,立即重启生效 最后再用DirectX Repair修复即可。

解决react+echarts的项目中There is a chart instance already initialized on the dom警告

转载来自消除There is a chart instance already initialized on the dom. React中使用echarts - 代码先锋网 使用echarts.getInstanceByDom获取之前可能创建过的实例,如果有则继续使用这个实例,否则创建 import * as echarts from 'echarts'; import { useEffect } from 'react' function EchartsCom(props: any) { let chartDom: any let myCharts: any const getEchartsData = (objs: any) => { //获取echarts中的数据 return { xAxis: { type: 'category', data: objs.xAxis }, yAxis: { type: 'value' }, series: [ { data: objs.series, type: 'line' } ] } } // 监听父组件中传递的数据变化 useEffect(() => { if (props?