第三方图像打标系统汇总

Labelbox labelbox是一款多功能数据标注工具,支持图像分割、图像分类、文本分类标注,操作方便、快捷、实用,应用广泛。(具体部署方法未知,国外服务器登录困难)https://github.com/Labelbox/LabelboxImageSegmentation ImageSegmentation是基于python的图像分割标注工具,操作方便实用。(智能扣图,不支持多边形)https://github.com/AKSHAYUBHAT/ImageSegmentationopensurfaces-segmentation-ui opensurfaces-segmentation-ui是基于python的图像分割标注工具,操作方便实用。(支持多边形,但不支持修改,也不支持删除点)https://github.com/seanbell/opensurfaces-segmentation-uilabelImgPlus labelImgPlus是labelImg的升级版,支持图像分割、图像分类、目标检测标注,操作方便,通用性极强,应用广泛。(又windows版本,支持多边形和画笔,但运行不了,需要进一步调试)https://github.com/lzx1413/labelImgPlusCVAT CVAT是用于计算机视觉的免费,在线,交互式视频和图像注释工具。我们的团队正在使用它来注释百万个具有不同属性的对象。(国外平台,支持矩形、多边形、折线、关键点,但似乎不支持加点)https://github.com/opencv/cvatVOTT 用于图像和视频资产的开源注释和标签工具。(可以直接安装,支持矩形,支持多边形,支持加载函数,但不支持带标注的数据导入)https://github.com/microsoft/VoTTcoco-annotator COCO Annotator是基于Web的图像注释工具,旨在多功能性和有效地标记图像以创建用于图像定位和目标检测的训练数据。(支持导入数据,修改,支持本地化部署,有一定的用户管理功能)https://github.com/jsbroks/coco-annotatordataset-annotator 用于注释图像数据集的工具。(可以在本地直接安装,但是无法上传带有标注的数据)GitHub - omenyayl/dataset-annotator: Scalable, cross-platform ion-electron app that allows the user to annotate an image dataset.imglab 一个基于Web的工具,用于标记对象的图像,可用于训练dlib或其他对象检测器。(只能导入图片,无法导入数据,且多边形成型后只能修改大小)https://github.com/NaturalIntelligence/imglabimagetagger 这是用于标记图像数据的协作在线工具。(支持多边形,支持矩形,支持团队协作,是否可导入带标签数据不确定)GitHub - bit-bots/imagetagger: An open source online platform for collaborative image labelingMedTagger 使用众包为医疗数据集添加注释的协作框架。https://github.com/medtagger/MedTaggermake-sense makesense.ai是可免费使用的在线标签照片工具。GitHub - SkalskiP/make-sense: Free to use online tool for labelling photos. https://makesense.ailost (重点关注) 在基于Web的环境中设计自己的智能图像注释流程。(后发现随机遗失数据问题)https://github.com/l3p-cv/lostvia 纯前端编写的免费数据标注平台(支持修改,支持多边形,支持带标注的数据,没有任何团队协作功能)https://github.com/ox-vgg/viaDataturks Dataturks支持ML项目的数据项的端到端标记,例如视频,图像(分类,分段和标签)和文本(PDF,Doc,Text等的全长文档注释。https://dataturks.com/pricing.php ---很长一段时间没有在csdn中写文章了,事实上后面自己学习过程中的大部分文档都是在语雀中完成的,基本都是自己写自己看。后续文章都会分享到自己的个人博客上,感兴趣的话可以关注一下。[个人博客地址](https://chenshaolang.gitee.io/personal-blog/)

R语言中连接数据库——Mongodb

R语言中连接数据库——Mongodb 文章目录 R语言中连接数据库——Mongodb一、项目环境二、mongolite 包安装三、mongolite 包的使用四、mongolite 包相关函数1、$aggregate2、$count3、$disconnect4、$distinct5、$drop6、$export7、$find8、$import9、$index10、$info11、$insert12、$iterate13、$mapreduce14、$remove15、$rename16、$replace17、$run18、$update 一、项目环境 开发工具:RStudioR:3.6.1相关包:mongolite 二、mongolite 包安装 # 方法一:直接通过CRAN进行安装 install.packages("mongolite") # 方法二:从github上安装 devtools::install_github("jeroen/mongolite") 三、mongolite 包的使用 library(mongolite) # 连接mongodb数据库 con <- mongo("mtcars", url = "mongodb://readwrite:test@mongo.opencpu.org:43942/jeroen_test") # collection:要连接的集合(数据表)的名称。默认为"test"。 # db:要连接的数据库的名称。默认为"test"。 # url:标准URI格式的MongoDB服务器的地址。 # verbose:如果TRUE,发出一些额外的输出 # options:其他连接选项,例如SSL密钥/证书。 # 如果数据表是空的,就自己插入一下 data(mtcars) con$insert(mtcars) [注]: 该url参数包含特殊的URI格式,该格式定义服务器地址和其他连接选项。格式如下: mongodb://[用户名:密码@]数据库地址[:端口号][,数据库地址2[:端口号2],...[/[数据库名称][?其他连接选项]] 具体的url格式可以参考 《Mongo连接字符串手册》 # mongolite的一些具体操作 # 直接输出连接成功后数据库的变量,会输出mongodb常见操作的公式,及使用方法 print(con) # <Mongo collection> 'mtcars' # $aggregate(pipeline = "{}", options = "{\"allowDiskUse\":true}", handler = NULL, pagesize = 1000, iterate = FALSE) # $count(query = "

manjaro踩坑记

manjaro踩坑记 Y_Wolf(2020.04.13) 一、项目环境 系统版本:majaro kde 19.0.2电脑型号:机械革命 S1 二、正文 0、关于制作系统盘 这里我是在windows10上使用rufus 制作的系统盘,在网上的教程基本都会让你使用dd模式写入。但是这个模式在新的版本中是没有的,因此如果你在制作后没有办法正常的安装系统,个人建议**安装旧版本的rufus使用dd模式写入**。 1、应用更新 在安装好系统之后,除了要给包管理器pacman换源之外(换源的时候,要看一下系统的时间,如果时间穿越了的话,换的源是无法使用的),还需要更新系统的相关程序。如果你是第一次使用Linux的话,个人建议能使用命令行进行更新就不要使用图形化工具。 [注]:不知道为什么在软件管理器中更新应用总是会爆出“提交事务失败: 无效或已损坏的软件包:” // manjaro 更新应用 sudo pacman -Syu [注]:而使用命令行进行运行则不会 majaro 其他常用更新命令 sudo pacman -Sc //清空并且下载新数据 sudo pacman-mirrors -gb testing -c China //更新源 sudo pacman-mirrors -c China -g //更新源 sudo pacman -Syu //更新 sudo pacman -Syy //更新源数据库 sudo pacman -Syyu //安装更新 [注]:建议在更新之前先去官网看一下,有个别程序需要单独特殊更新(不然可能会崩) 2、无法正常关机(冻屏) [注]:这个坑非常的奇怪,有时候有有时候没有。也不知道是哪里操作错误。 首先编辑/etc/default/grub文件,再该文件下查找GRUB_CMDLINE_LINUX=""一行,修改为: GRUB_CMDLINE_LINUX="reboot=efi" //第一个就完美解决 然后执行如下命令: sudo update-grub 来更新 /boot/grub/grub.cfg 文件。 [注]:更新完了之后,默认grub菜单的选择时间为10秒,可以按照自己的需求修改。 如果上边修改的/etc/default/grub文件,没有作用,可以继续尝试替换为下边的几种内容。 GRUB_CMDLINE_LINUX="reboot=bios" //我的本子经过测试只有这个能用 GRUB_CMDLINE_LINUX="

NetData 入门

NetData 入门 Y_Wolf(2020.05.06) 文章目录 NetData 入门一、项目环境二、NetData简介三、NetData安装方法一方法二 四、NetData的基本操作五、卸载NetData五、NetData的相关配置文件六、添加第三方扩展插件(NVIDIA-SMI)在这里插入图片描述七、多设备监控方法一方法二节点服务器 主服务器 八、报警器九、将监控数据存入后端十、 创建自定义监控界面 一、项目环境 系统:Ubuntu 18.04.3 LTS官方说明文档:https://learn.netdata.cloud/docs/agent 二、NetData简介 ​ NetData 是一个用于系统和应用的分布式实时性能和健康监控工具。它提供了对系统中实时发生的所有事情的全面检测。你可以在高度互动的 Web 仪表板中查看结果。使用 Netdata,你可以清楚地了解现在发生的事情,以及之前系统和应用中发生的事情。你无需成为专家即可在 Linux 系统中部署此工具。NetData 开箱即用,零配置、零依赖。只需安装它然后坐等,之后 NetData 将负责其余部分。 三、NetData安装 方法一 Netdata最简单的一种安装方式就是直接使用官方的脚本进行一键安装 bash <(curl -Ss https://my-netdata.io/kickstart-static64.sh) # Ubuntu的包管理器不确定有没有 sudo apt-get install netdata 当出现如下信息后,就代表安装成功了 ```bash ------------------------------------------------------------------------------- OK. NetData is installed and it is running (listening to *:19999). ------------------------------------------------------------------------------- INFO: Command line options changed. -pidfile, -nd and -ch are deprecated. If you use custom startup scripts, please run netdata -h to see the corresponding options and update your scripts.

chat gpt

#!/usr/bin/env python -- coding: utf-8 -- “”" @Author: Yue Wang @Contact: yuewangx@mit.edu @File: data.py @Time: 2018/10/13 6:21 PM “”" import math import os import sys import glob import h5py import numpy as np from torch.utils.data import Dataset import trimesh from saliency import drop_points import pyvista as pv def show_pl(pointclouds_pl_adv, special_index): pointclouds_pl_adv=pointclouds_pl_adv.squeeze() p = pv.Plotter() camera = pv.Camera() camera.position = (18,4,-20) camera.focal_point = (0,0,0) #p.add_mesh(pv.PolyData(pointclouds_pl_map), color="blue", point_size=10, render_points_as_spheres=True) for i in range(len(pointclouds_pl_adv)): p.

SPSS Modeler分析物流发货明细数据:K-MEANS(K均值)聚类和Apriori关联规则挖掘

全文链接:http://tecdat.cn/?p=32633 物流发货明细数据在现代物流业中扮演着至关重要的角色(点击文末“阅读原文”获取完整代码数据)。 通过对这些数据进行挖掘和分析,我们可以发现隐含在背后的供应链运营规律和商业模式,从而指导企业在物流策略、成本管理和客户服务等方面做出更加科学和有效的决策。 相关视频 SPSS Modeler是一款功能强大、界面友好的数据挖掘和分析工具,可以帮助企业对物流发货明细数据进行深入和准确的挖掘分析,提高数据价值和运营效率。 本文将以SPSS Modeler帮助客户分析物流发货明细数据,介绍如何使用SPSS Modeler对物流发货明细数据进行聚类分析和关联规则挖掘,并分析得出有益的结论和建议,为企业的物流运营和发展提供参考与支持。 数据的预处理 本研究的数据是一组关于物流的发货明细,数据包括以下字段:项目、指令日期、始发省、始发市、目的省、目的市、收货人单位、品名、数量、签收时间、签收数量、拒收数量和拒收原因。 对数据进行预处理: (1)补充缺失值。对没有记录的数据缺失采用平均值法,以该字段的平均分数填充。 (2)规范化数据。运用最小-最大规范化方法对数据进行规范化处理,将数据映射到[0,1]区间,计算公式如下。 其中:ymax为该字段的最大值; ymin为该字段的最小值。 过程及结果分析 (1)读取数据 选择SPSS Modeler的Source-Excel-Data,在Data选项页中通过Import Files输入框选定Excel格式的成绩表文件,并点击Read Values 按钮,将所有数据读入,如图所示。 (2)K-Means 模型设置 选择SPSS Modeler的Modeling-K-means,将K-Means模型节点添加进数据流来,双击K-Means图标,在弹出的对话框中选择Model选项页,选项页中的参数解释如下: 1)Numbers of cluster:制定生成的聚类数目,这里设置为3. 2)Use Partitioned Data:如果用户定义了分割数据集,选择训练数据集作为建模数据集,并利用测试数据集对模型进行评价。 继续选择对话框中的Expert选项页,如图5所示,对该选项页中的参数做一下设置: Model选项:选择Expert模式,表示将进行高级模式的选择。 Stop on选项:选择custom选项修改迭代终止的条件: 1)Maximum iterations(最大迭代数):该选项允许在迭代制定次数后终止训练,这里设置为20. 2)Change tolerance(差异容忍度):该选项允许在一次迭代中质心之间的最大差异小于制定水平时终止训练。 (3)执行和输出 设置完成后,选中Execute 按钮,即可得到执行并观察到结果。点击VIEW选项卡,可以以图表的形式来显示模型的统计信息以及各个属性在各簇中的分布信息。 点击标题查阅往期内容 SPSS用K均值聚类KMEANS、决策树、逻辑回归和T检验研究通勤出行交通方式选择的影响因素调查数据分析 左右滑动查看更多 01 02 03 04 (4)聚类结果 结果表明:簇1和2中的签收数量较低,簇5中的签收数量一般,簇4中的签收数量最低,可见,大部分样本的签收数量处于中等水平;各变量在各簇中的显著程度均较大,表明不同聚类簇的签收数量的分化程度较高,差异显著。 簇1 簇2 簇3 簇4 簇5 从每个聚类簇的情况来看,签收数量最多的是第5个簇,该簇中的最多的始发地是广东深圳,签收数量达到了2833件,其次是上海,签收数量达到了1287。同时从结果可以看到四川成都的签收数量最低,说明物流的集中地集中在广东深圳上海等地。 关联规则挖掘 本文分别用Apriori算法对数据进行处理挖掘,具体结果如下所示。 (1)Apriori算法 虽然 Apriori 算法可以直接挖掘生成表中的交易数据集,但是为了关联挖掘其他算法的需要先把交易数据集转换成分析数据集,构建的数据流如图所示。 图 1 商品关联规则 Apriori 算法挖掘流图

链接生成二维码怎么弄?这些制作方法分享给大家

在现代社会中,链接生成二维码已经成为了一个非常实用的工具。通过将链接转换为二维码,我们可以将它们轻松地分享给朋友、家人或同事,而无需手动输入URL或复制粘贴。这使得信息的传播变得更加快捷和高效。例如,你正在计划一个聚会,并需要将聚会的详细信息分享给参与者,他们只需要扫描二维码,就可以轻松地访问聚会的详细信息,如时间、地点和其他重要的细节。具体怎么做的呢?给大家分享几种简单的制作方法,一起来学习下吧。 方法一:书单视频助手 这是一个在手机上编辑视频的操作工具,功能既丰富操作起来又很简单,其中就包含了能够链接生成二维码的功能,下面给大家演示一下具体是怎么做的,一起来看看吧。 1、首先,将软件在手机上打开,点击页面上的“制作二维码”,进入之后点击生成(编辑)二维码。 2、这里大家就可以选择“网址生成二维码”,然后将链接输入进去,点击“下一步”。 3、这样生成出来的二维码,我们可以编辑名称以及上传头像,二维码的样式也有很多种类可以选择,最后点击保存就可以使用啦。 方法二:Zxing 这是一个开源的二维码生成器,它可以将链接转换为二维码,以便于在移动设备上扫描。它支持多种编程语言,包括Java、C++和Python等。可以利用它的API来集成二维码生成功能到应用程序中,或者直接使用它的在线工具生成二维码。它还支持一些高级功能,比如自定义二维码的颜色和形状等。 方法三:Visualead 这是一款二维码生成工具,提供了链接生成二维码功能。可以将任何链接转换为一个二维码图像,只需将URL输入到链接生成器中,它将自动生成一个可下载和分享的QR码。同时,它还提供了多种QR码自定义设计,包括颜色、形状、图标、背景等。 方法四:QR Code Monkey 这是一个二维码生成器,它提供了一个快速、简便的方法来生成自定义的二维码,即可以将链接生成二维码,只需要输入所需转换的链接,选择二维码的大小和颜色,然后点击“生成二维码”按钮即可轻松创建二维码。还可以选择将二维码下载或分享到社交媒体平台。 以上就是给大家分享的几种链接生成二维码的方法啦,非常的简单方便,希望能够帮助到大家。

【测试报告】个人博客系统自动化测试报告

文章目录 项目背景项目功能测试计划功能测试测试用例执行测试的操作步骤 自动化测试设计的模块、自动化运行的结果、问题定位的结果自动化测试优点 项目背景 对于一个程序员来说,定期整理总结并写博客是不可或缺的步骤,不管是对近期新掌握的技术或者是遇到bug解决bug过程的记录等,都是非常有必要的。 目前的博客网站有很多,比如CSDN、掘金、博客园等。本人在整个学习的阶段也都会经常在上面发布文章和见解等,最近学了一些开发所需要的主流框架,因此以做项目代学,做出了一个简易版的个人博客系统。 项目功能 博客系统中最基本的用户管理、文章管理(增删改查等)都有涉及,此外在这个博客系统中不需要担心安全问题(因为用户密码采用了加盐加密处理,破解成本高,且在一些私人界面加入了拦截器等)、短时间内不需要重复登录(因为在redis中存储了用户的session信息并进行了持久化处理)、可以随时随地地更换自己喜欢的头像(因为上传的图片发送到服务器并使用Nginx存储起来,稍等一段时间后台刷新后即可看到换的头像)。 测试计划 功能测试 测试用例 测试的第一步永远都是测试用例的编写,这里对这个项目中的功能使用脑图进行测试用例的编写。 执行测试的操作步骤 登录页: (1)账号或密码为空: (2)账号或密码填写错误: (3)正确登录跳转到个人列表页: 个人列表页: (1)正常登录状态下: (2)未登录的状态下输入url - http://43.139.71.60:8081/myblog_list.html(跳转到登录页): 博客列表页: (1)在未登录的情况下(只有登录按钮): (2)在登录的状态下(有三个按钮选择): 博客详情页: (1)在未登录的情况下(只读): (2)在登录root账号下打开cxz的文章(只读): (3)在cxz账户下打开自己的文章(可删除、修改): 博客编辑页: (1)未登录的状态下(提示失败并跳转到登录页): (2)登录的状态下(提示成功并跳转到个人列表页): 自动化测试 重点还是自动化测试。编写自动化代码通常是需要根据编写的测试用例来进行的,但是由于时间关系,本自动化测试对部分主要功能进行编写,如分页、更换头像等没有在范围内,但是这些基本上都是类似的,这里就以部分为例。 设计的模块、自动化运行的结果、问题定位的结果 环境: 编译器:IDEA 2021.3.2 浏览器:Microsoft Edge 113.0.1774.57 驱动程序:msedgedriver.exe(具体在官网选择当前浏览器对应的版本的驱动即可) 自动化测试工具:selenium4 自动化测试框架:junit5 以上对应的依赖包: <!-- 自动化测试 --> <dependency> <groupId>org.seleniumhq.selenium</groupId> <artifactId>selenium-java</artifactId> <version>4.0.0</version> </dependency> <!-- 保存屏幕截图文件 --> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.6</version> </dependency> <!-- junit5 --> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter</artifactId> <version>5.8.2</version> <scope>test</scope> </dependency> <dependency> <groupId>org.

利用NURBS曲线进行点云曲面拟合算法

文章目录 介绍NURBS曲线C++实现思路代码实现读取点云数据对点云进行预处理创建曲面模型将曲面模型转换为NURBS曲面 完整代码opennurbs.h说明vs2019安装OpenNURBS库编译OpenNURBS库 介绍 点云拟合曲面算法是将点云数据拟合成一个二次或高次曲面模型的算法。这种算法主要用于三维模型重建、计算机视觉、机器人感知、医学图像处理等领域。 常见的点云拟合曲面算法包括: 最小二乘法(Least Squares Method):通过最小化点到曲面距离的平方和来拟合曲面模型。三角剖分算法(Triangulation-Based Method):将点云构建成三角网格,再拟合成曲面模型。隐式曲面算法(Implicit Surface Method):通过定义一个隐式函数来表示曲面,然后用点云数据来估计隐式函数的系数。基于贝叶斯学习的算法(Bayesian Learning-Based Method):利用贝叶斯学习方法来拟合曲面模型,可以处理噪声和不确定性。深度学习算法(Deep Learning-Based Method):通过深度学习算法来训练神经网络,实现点云到曲面的转换。 这些算法各有优缺点,选择合适的算法需要根据具体应用场景和要求。 NURBS曲线 Point cloud to NURBS是一种将点云数据拟合成NURBS曲面的软件,其点云拟合曲面算法是基于最小二乘法的。具体来说,该算法将点云数据视为一个离散的数据集,然后通过最小化点到曲面距离的平方和来拟合NURBS曲面模型,使得拟合曲面与原始点云数据的误差最小。该算法还可以通过调整参数来控制拟合曲面的精度和平滑度,以满足不同应用场景的需求。对于非常规形状的点云数据,该软件还提供了手动拟合曲面的功能,用户可以通过选取和编辑控制点来调整曲面模型,以达到更好的拟合效果。 C++实现思路 在C++中实现点云拟合曲面算法,可以使用最小二乘法来拟合曲面模型。具体步骤如下: 定义点云数据结构,包括点的坐标和法向量等信息。可以使用结构体或类来实现。 构建曲面模型,这里以二次曲面为例。二次曲面的一般式可以表示为: F ( x , y ) = A x 2 + B x y + C y 2 + D x + E y + F F(x,y) = Ax^{2} + Bxy + Cy^2 + Dx + Ey + F F(x,y)=Ax2+Bxy+Cy2+Dx+Ey+F 其中A、B、C、D、E、F为曲面的系数。 用最小二乘法来拟合曲面模型。最小二乘法的目标是最小化实际点云数据和拟合曲面之间的距离。具体来说,可以通过以下步骤来实现: a. 选取一组控制点作为曲面的控制网格,然后根据这些控制点生成曲面网格。

Conda config 报错 An HTTP error occurred when trying to retrieve this URL

问题描述 Conda config 配置清华源错误 报错: An HTTP error occurred when trying to retrieve this URL. HTTP errors are often intermittent, and a simple retry will get you on your way. 原因分析: 在channels中有不能用的源或者添加错误的源,导致不能使用正确的源从而报错 解决方案: 通过查询列出channels列表并删除过期/错误的源即可 首先,通过conda config --set show_channel_urls yes得到conda config现在在使用/已添加的源(此时不会在Anaconda Prompt里显示列表)。其次,使用everything搜索.condarc文件使用文本编辑器(txt或notepad++)打开查找错误添加的源并删除即可解决问题 删除 Anaconda Prompt : conda config --remove channels https://xxxxxx.xxxx.xxxxxxx.xxx.xx/xxxxxxxx/xxxx/xxxx/从文本编辑器直接删除 以上两种方法均可以去除不能正确使用的源 参考链接 答主从清华镜像源官网得到的方法,不能解决的话可以移步查看

python代码写开心消消乐

♥️作者:小刘在C站 ♥️个人主页:小刘主页 ♥️每天分享云计算网络运维课堂笔记,努力不一定有回报,但一定会有收获加油!一起努力,共赴美好人生! ♥️夕阳下,是最美的绽放,树高千尺,落叶归根人生不易,人间真情 目录 一.python是什么 二.游戏代码效果呈现 三.主代码 四.cfg 五.README 一.python是什么 Python由荷兰数学和计算机科学研究学会的吉多·范罗苏姆于1990年代初设计,作为一门叫做ABC语言的替代品。 [1] Python提供了高效的高级数据结构,还能简单有效地面向对象编程。Python语法和动态类型,以及解释型语言的本质,使它成为多数平台上写脚本和快速开发应用的编程语言, [2] 随着版本的不断更新和语言新功能的添加,逐渐被用于独立的、大型项目的开发。 二.游戏代码效果呈现 三.主代码 ''' Function: 消消乐小游戏 源码基地:#959755565# ''' import os import sys import cfg import pygame from modules import * '''游戏主程序''' def main(): pygame.init() screen = pygame.display.set_mode(cfg.SCREENSIZE) pygame.display.set_caption('开心消消乐🎃') # 加载背景音乐 pygame.mixer.init() pygame.mixer.music.load(os.path.join(cfg.ROOTDIR, "resources/audios/bg.mp3")) pygame.mixer.music.set_volume(0.6) pygame.mixer.music.play(-1) # 加载音效 sounds = {} sounds['mismatch'] = pygame.mixer.Sound(os.path.join(cfg.ROOTDIR, 'resources/audios/badswap.wav')) sounds['match'] = [] for i in range(6): sounds['match'].append(pygame.mixer.Sound(os.path.join(cfg.ROOTDIR, 'resources/audios/match%s.wav' % i)))

【无标题】win11打开VMware虚拟机蓝屏解决

win11打开VMware虚拟机蓝屏解决 win11打开虚拟机蓝屏!!!解决方案:win11支持16.2以上版本,其他版本不兼容,可用文末的卸载工具卸载之前已安装版本(深度卸载),然后下载16.2以上版本VM安装win11装VM踩坑如下(装的VM15.5): win11打开虚拟机蓝屏原因排除原因深度卸载工具(VM时常卸不干净,可用以下工具下载) win11打开虚拟机蓝屏 ** !!!解决方案:win11支持16.2以上版本,其他版本不兼容,可用文末的卸载工具卸载之前已安装版本(深度卸载),然后下载16.2以上版本VM安装 ** win11装VM踩坑如下(装的VM15.5): VM版本与Device Guaid不兼容(尝试了注册表禁用Device Guaid。。无效);vmx86版本不匹配问题(参考后发现安装目录下没有vmx86文件,放弃);尝试开启虚拟机平台等Windows功能和禁用Hyper-V服务无效后,改装VM16.0,发现依旧蓝屏!!卸载重装16.2解决 win11打开虚拟机蓝屏原因排除 1、VMware虚拟机运行条件: CPU开启虚拟化(进入BIOS设置Intel virtual technology为Enabled); 启用和关闭windows功能(对话框)——>虚拟机平台(选项打对勾,默认没勾选)——>确定后重启——>再进应该就好了。 禁用Hyper-V服务 win+R输入services.msc,禁用H-V系列服务确保上述条件已全部设置,若虚拟机仍然报错,考虑版本兼容问题!!(基本上16是最好的选择,当然更高更好) 原因 win11支持16.2以上版本!!! 深度卸载工具(VM时常卸不干净,可用以下工具下载) WindowsInstallerCleanUp深度卸载工具 Uninstall Tool 10016(我习惯用这个)

MATLAB:马尔科夫矩阵

[m,n]=size(citylight); R=zeros([m,n]); M=mean(citylight); %等级划分 for i=1:n %年份 for j=1:m %城市 if citylight(j,i)<=0.5*M(i) R(j,i)=1; elseif citylight(j,i)>0.5*M(i) && citylight(j,i)<=M(i) R(j,i)=2; elseif citylight(j,i)>M(i) && citylight(j,i)<=2*M(i) R(j,i)=3; elseif citylight(j,i)>2*M(i) R(j,i)=4; end end end

MATLAB: 替换底色

%% 替换底色 % 读入证件照图像 img = imread("C:\Users\hqh\Desktop\屏幕截图 2023-05-30 233907.png"); % 将图像转换为RGB格式 img = im2double(img); if size(img,3) == 1 img = repmat(img,[1,1,3]); end % 计算图像的灰度图像 gray_img = rgb2gray(img); % 通过Otsu阈值法得到一个二值化的掩膜mask,用于分割出人像和背景 level = graythresh(gray_img); mask= imbinarize(gray_img, level); figure imshow(mask) %人脸+背景为1

MATLA:BA无标度网络博弈仿真代码

% BA无标度网络博弈仿真代码 clc; clear; close all; % 网络参数 N = 1000; % 节点数 mo = 2; % 新增连接数 m = 2; % 邻居数 p = m/N; % 新增连接概率 % 初始化网络 A = zeros(N); % 邻接矩阵 deg = zeros(1,N); % 节点度数 for i = 1:m+1 for j = i+1:m+1 A(i,j) = 1; A(j,i) = 1; deg(i) = deg(i)+1; deg(j) = deg(j)+1; end end

http前后端协议 传递数组

1、结论 前端和后端,get协议上有好多种办法,但是都不太好 推荐用post 2、GET协议下前后端传递举例 1、传递方式1: 时间范围筛选,开始时间和结束时间,需要保证顺序性 前段传参:[0]开始时间; [1]结束时间 dateYYMMDD[0]=20230530&dateYYMMDD[1]=20230603 后端接收:springboot框架 @RequestParam(value = "dateYYMMDD[0]", required = false) String startDate, @RequestParam(value = "dateYYMMDD[1]", required = false) String endDate 缺点:如果有很多个 多选下拉框,参数的个数不可控~~~ 2、传递方式2: 无需保证顺序性 前段传参 departmentArray=财务部,客服部; departmentArray=财务部& departmentArray=客服部 后端接收:springboot框架 @RequestParam(required = false) String[] departmentArray 3、其他传递方式: 需要前后端保证 协议 departmentArray=[财务部,客服部] departmentArray=财务部|客服部

docker安装及修改默认镜像下载路径和配置加速器

官方安装:Install Docker Engine on Ubuntu | Docker Documentation 镜像存储迁移:Ubuntu20.04修改docker镜像存储位置并进行数据迁移 - EastWood001 - 博客园 (cnblogs.com) 可用软链接方式迁移:修改Docker镜像存储目录,减轻系统盘负担 (qq.com) 下面内容可忽略了...... 安装docker sudo wget -qO- https://get.docker.com | sh wget: 下载工具 -q:输出不要太多 O-:标准输出,不要输出给文件 sh:管道输出给sh执行 将用户加入到docker组 sudo usermod -aG docker xiaoming xiaoming是我的系统的用户名。因docker的命令需要在root权限下执行,所以修改用户组,将用户xiaoming加入到docker组中,不用sudo,不用root用户,就可以执行docker命令。 修改默认路径和配置加速器 cd /etc/docker 进入文件夹:/etc/docker,查看是否有daemon.json文件,没有则vim daemon.json创建文件,内容为: { "graph":"你要挂载的数据盘路径", "registry-mirrors": ["https://registry.docker-cn.com"] } :wq 保存退出! 重启docker service docker restart 查看是否修改成功 sudo docker info

【C++】vector的使用

目录 1.什么是vector2.容量操作3.增删查改4.杨辉三角(使用vector开辟二维数组) 1.什么是vector vector就是一个动态顺序表,比起string,它不仅可以存储字符,还可以存储其他的内置类型以及自定义类型。 vector在使用时,通过类模板的实例化来改变其存储的元素类型: void test4() { vector<int> v1; vector<char> v2; vector<std::string> v3; std::string s("abc"); v1.push_back(1); v2.push_back('a'); v3.push_back(s); } 2.容量操作 2.1 reserve和resize 这两个函数在vector中与string中的作用是相同的 下面仅作演示: void test5() { vector<int> v1; cout << v1.capacity() << endl; v1.reserve(10); cout << v1.capacity() << endl; v1.resize(15, 3); cout << v1.capacity() << endl; for (auto e : v1) { cout << e << " "; } cout << endl; } size():获取数据个数 capacity():获取容量大小 empty():判断是否为空 3.增删查改 在vector中插入只有push_back和insert,没有append和+=。其中insert的用法与string中有些不同,参数pos的类型是迭代器类型,不能传下标。

静默安装oracle

oracle依赖环境包 一、创建用户属组 [root@localhost ~]# groupadd oinstall [root@localhost ~]# groupadd dba [root@localhost ~]# groupadd oper [root@localhost ~]# useradd -g oinstall -G dba,oper oracle [root@localhost ~]# passwd oracle #修改oracle用户密码 二、创建目录并赋予权限 [root@localhost ~]# mkdir /u01/ [root@localhost ~]# mkdir -p /u01/app/oracle/product/19.3.0/dbhome_1 [root@localhost ~]# mkdir -p /u01/app/oraInventory [root@localhost ~]# chown -R oracle:oinstall /u01/* [root@localhost ~]# chmod -R 775 /u01/* 三、解压oracle安装包 [root@localhost ~]# su oracle [oracle@localhost dbhome_1]# unzip LINUX.X64_193000_db_home.zip #解压oracle安装包到当前路径 四、配置limits限制参数 编辑limits.conf,加入下面几行代码 [root@localhost app]# vim /etc/security/limits.

开发环境搭建-stm32CubeIDE进行标准库开发

stm32CubeIDE介绍 https://www.stmcu.com.cn/ecosystem/Cube/STM32CubeIDE stm32CubeIDE下载 点击上面的链接,登录即可下载。 搭建demo工程 新建工作空间 创建一个工程 选择芯片-STM32F103C8T6 点击“Next” 点击“Finish ” 添加标准库到项目工程文件目录下 配置工程属性 按F5刷新工程文件,添加的效果如下: 添加标准库头文件路径,直接使用快捷键AlL+Enter调出配置界面,添加头文件路径 添加后如下: 注意:头文件如果是灰色,则说明添加失败。添加标准库的源文件到工程中 添加全局宏定义用于工程属性 删除重复的启动文件 删除的是除GCC编译器之外的启动文件修改内核文件 core_cm3.c文件 uint32_t __STREXB(uint8_t value, uint8_t *addr) { uint32_t result=0; //__ASM volatile ("strexb %0, %2, [%1]" : "=r" (result) : "r" (addr), "r" (value) ); __ASM volatile ("strexb %0, %2, [%1]" : "=&r" (result) : "r" (addr), "r" (value) ); return(result); } /** * @brief STR Exclusive (16 bit) * * @param value value to store * @param *addr address pointer * @return successful / failed * * Exclusive STR command for 16 bit values */ uint32_t __STREXH(uint16_t value, uint16_t *addr) { uint32_t result=0; //__ASM volatile ("

常见的场景优化方案:导出Excel大批量数据的优化过程

背景 团队目前在做一个用户数据看板(下面简称看板),基本覆盖用户的所有行为数据,并生成分析报表,用户行为由多个数据来源组成(餐饮、生活日用、充值消费、交通出行、通讯物流、交通出行、医疗保健、住房物业、运动健康...), 基于大量数据的组合、排序和统计。根据最新的统计报告,每天将近100W+的行为数据产生,所以这个数据基数是非常大的。 而这个数据中心,对接很多的业务团队,这些团队根据自己的需要,对某些维度进行筛选,然后直接从我们的中心上下载数据(excel)文档进行分析。所以下个几十万上百万行的数据是很常见的。 问题和解决方案 遇到的问题 目前遇到的主要问题是,随着行为能力逐渐的完善闭环,用户数据沉淀的也越来越多了,同时业务量的也在不断扩大。 业务团队有时候会下载超量的数据来进行分析,平台上的数据下载能力就显得尤为重要了。而我们的问题是下载效率太慢,10W的数据大约要5分钟以上才能下载下来,这显然有问题了。 解决步骤 代码是之前团队遗留的,原先功能没开放使用,没有数据量,所以没有发现问题。以下是原来的导出模块,原程序如下,我做了基本还原。 现在如何保证数据的高效导出是我们最重要的目标,这个也是业务团队最关心的。 1 /** 2 * 获取导出的Excel的文件流信息 3 * @param exportData 4 * @return 5 * @throws Exception 6 */ 7 private OutputStream getExportOutPutStream(List<UBehavDto> exportData) throws Exception { 8 JSONObject object = new JSONObject(); 9 List<ExcelCell[]> excelCells = new ArrayList<>(); 10 String[] headers = new String[] { "A字段","B字段","C字段","D","E","F","G","H","I","J","K","L", 11 "M","N","O","P","Q","R","S","T","U","V","W", 12 "X","Y","Z","AA","AB","AC","AD","AE字段","AF字段","AG字段" }; 13 ExcelCell[] headerRow = getHeaderRow(headers); 14 excelCells.add(headerRow); 15 String pattern = "

再一次,实现听歌自由

20年前,中国网民听歌是自由的,准确点说是听盗版歌的自由。 2002年11月,百度上线MP3搜索功能,几乎能搜索和下载到所有的歌曲。按相关的版权法规,百度未经授权使用他人资源牟利是违法的。当时互联网产业违法采集数据、传播盗版是家常便饭,版权管理形同虚设,百度顺势而为分了一块大蛋糕。盗版音乐砸了音乐人的饭碗,就如同盗版软件摧残软件从业者。最近十多年,政府对音像作品版权的管理日趋严格,这是一件利国利民的好事,一个行业兴盛的起点首先是从业者得到应有的报酬。 百度MP3搜索 今天,付费听音乐已经成为网民的共识。我常常使用网易云听音乐,这是一个好软件,只是没有周杰伦的歌,网易云官方解释是没有拿到周杰伦歌曲的版权。QQ音乐倒是有周杰伦歌曲,但是偶尔也会因版权问题下架其他歌手作品。同样,酷狗音乐、咪咕音乐也不能提供所有的歌曲。问题来了,如何在一个音乐APP上听到所有的我喜欢的歌,实现听歌自由呢?自建音乐服务器是唯一的路。 Navidrome 是一款开源音乐服务器,用于自建云端音乐播放器,兼容手机、桌面等多种客户端。Navidrome 资源占用率非常低,支持中文界面,可以播放任何音频格式,实在是码农+音乐爱好者的折腾利器。Navidrome 提供了 Demo 地址 demo.navidrome.org/app/ , 账号密码都是 demo。 首先准备可以远程访问的服务器,最好有独立的公网IP,硬件配置至少1核1G,预装CentOS或者Debian系统。有一个独立的域名更好,比如 music.test.com ,否则就要用 IP+端口号访问音乐服务器。 1 安装docker-compose 推荐使用 docker 安装 Navidrome ,首先安装 docker-compose : shell 复制代码 # 安装yum工具 yum install -y yum-utils # 设置源 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo # 安装docker yum install -y docker-ce # 启动doker服务 systemctl start docker # 安装docker-compose yum install docker-compose 2 安装Navidrome 编辑docker-compose.yml,内容如下: yaml 复制代码 version: "3" services: navidrome: image: deluan/navidrome:latest user: 0:0 ports: - "

IDEA 2020 超简单下载安装 使用教程,三步教你完成

长话短说,先下载安装包和相关工具 IDEA保姆下载安装教程:IDEA 2021.2.3 安装配置(超详细介绍及jdk安装配置环境变量)_小田资料库的博客-CSDN博客 JDK保姆下载安装教程: JDK8 下载安装 环境配置_jdk8 download后_小田资料库的博客-CSDN博客 百度网盘链接:https://pan.baidu.com/s/1fG69MwitgnvnIjfFYfkrKQ?pwd=g8rk 提取码:g8rk 按以上三步完成后即可

基于LSTM神经网络的股票预测(Python+pytorch)

👨‍🎓个人主页:研学社的博客 💥💥💞💞欢迎来到本博客❤️❤️💥💥a 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭:行百里者,半于九十。 📋📋📋本文目录如下:🎁🎁🎁 目录 💥1 概述 📚2 运行结果 🎉3 参考文献 🌈4 Python代码实现 💥1 概述 为了解决循环神经网络存在的梯度消失等问题,专家学者经过研究提出了长短期记忆(Long-Short Term Memory , LSTM )神经网络。 LSTM 神经网络从本质上来说是一种特殊的循环神经网络,能够用来处理长期依赖问题。经过大量的研究结论证明 LSTM 神经网络已经解决了循环神经网络无法解决的许多问题,在时间序列预测问题上获得了更进一步的成功 [54] 。 LSTM 神经网络增加了一个信息存储记忆单元,可以维持一个持续信息流,使得梯度不会消失或爆炸。同时构造了遗忘门(Forget Gate ),输入门( Input Gate ),输出门( Output Gate )分别对该记忆单元进行控制。这三个门就像滤波器一样,遗忘门控制记忆单元状态信息的舍弃与保留,输入门更新记忆单元状态,输出门控制 LSTM 单元输出。 LSTM 神经网络拥有着与循环神经网络相似的结构,不同之处在于它是通过内部的各个模块协同工作的[55] 。 LSTM 神经网络结构图如下。 LSTM 神经网络的优点主要表现在以下三方面: (1 )解决了循环神经网络存在的长期依赖问题,能够处理时间滞后很长的数据序列。如果在某个时刻下信息较为重要,那么它对应的遗忘门位置会一直保留在接近于 1 的数值。这样就可以让这个时刻的信息一直往下传递下去而不被丢失,这就是 LSTM 神经网络能够处理长序列的原因之一。 (2)收敛性好。遗忘门对上一时刻的记忆进行控制,再加上当前输入产生当前时刻的新记忆。“门”结构的加入,提供了控制网络中信息传递的工具,让 LSTM神经网络能够记忆较为长期的信息。因此,通过遗忘门便可以对先前记忆进行处理进而对网络的输出产生影响[56] 。 (3)不易发生梯度消失或爆炸。循环神经网络在基于时间的反向传播中存在激活函数导数的乘数,与之相比 LSTM 神经网络其相应导数不是以乘积的形式存在,而是通过累加的方式进行计算。这一改变使得梯度消失和爆炸问题获得解决,同时不易陷入局部最优。 📚2 运行结果 # 归一化,便与训练 train_data_numpy = np.array(train_data) train_mean = np.mean(train_data_numpy) train_std = np.

electron24整合vite4+vue3创建跨端桌面程序

基于Electron集成Vite4.x构建桌面端exe应用 electron24-vite4-vue3 运用最新版本electron结合vite4.x创建vue3桌面端应用程序。 // 版本信息 vite: ^4.3.2 vue: ^3.2.47 electron: ^24.4.0 electron-builder: ^23.6.0 创建vite+vue3项目 // 初始化项目 npm create vite@latest electron-vite4-vue3 // or yarn create vite electron-vite4-vue3 // or pnpm create vite electron-vite4-vue3 // 进入目录 cd electron-vite4-vue3 // 安装依赖 yarn install // 运行项目 yarn dev yarn dev 运行成功的项目如下: 安装Electron及依赖插件 // 安装electron yarn add -D electron // 安装electron-builder 用于打包可安装exe程序和绿色版免安装exe程序 yarn add -D electron-builder // 安装electron-devtools-installer 用于开发调试electron yarn add -D electron-devtools-installer // 构建electron应用程序的vite插件 yarn add -D vite-plugin-electron vite-plugin-electron 该插件集成了Vite和Electron,方便在渲染进程中使用Node API或者Electron API功能。

一文速览扩散模型优化过程:从DDPM到条件生成模型Stable Diffusion

文章目录 1、扩散模型简介 - Diffusion Model2、最简单的扩散模型 - DDPM前向加噪过程逆向去噪过程训练与推理流程模型优缺点 3、减少扩散模型的采样步骤 - DiffusionGAN分析高斯分布、采样步长Diffusion GAN 4、潜在扩散模型与条件生成模型 - Stable Diffusion感知图像压缩条件信息建模 参考资料 目前AIGC可以说是整个人工智能领域的当红炸子鸡,而Diffusion Model(扩散模型)正是目前各项图像生成式应用的主要架构。本人并不主要研究图像生成领域,不过由于项目需要也对其进行过一些调研,故写下这篇文章进行分享与记录。本文会从最简单的扩散模型开始讲起,然后根据原始模型存在的缺点介绍当前的一些改进方法,最后介绍一个经典的可用于条件生成的扩散模型Stable Diffusion。 1、扩散模型简介 - Diffusion Model 如下图所示,目前的图像生成式模型主要可以分为四类:① 首先是生成对抗网络GAN通过一种生成对抗式的方式进行学习,其生成器 G G G根据潜在空间的采样 z z z生成图像 x ′ x' x′,判别器 D D D则判断输入图像是真实图像 x x x还是生成图像 x ′ x' x′;② 变分自编码器VAE通过编码器学习图像分布 p ( x ) p(x) p(x)到先验分布 p ( z ) p(z) p(z)之间的转换,解码器学习 p ( z ) p(z) p(z)到 p ( x ) p(x) p(x)的转换关系,其在数学上可以被视为通过最大化ELBO进行优化;③ 标准化流模型则是通过构造一个可逆的变换,建立图像分布 p ( x ) p(x) p(x)与某个已知分布 p ( z ) p(z) p(z)的变换;④ 最后是扩散模型Diffusion Model,其通过逐步增加高斯噪声将其变为纯高斯噪声 z z z,再通过对 z z z逐步去噪生成新的图像。

解决多项目中的报错:BindingException:Invalid bound statement (not found)

目录 1. 情况描述2. 报错信息3. 解决方法 1. 情况描述 分析过程可以直接跳过,直接看解决方法 在只引入了一个xml目录时,程序运行正常,各个Mapper方法也可以正常调用,后续其它开发同志引入了其他包中的xml目录,导致调用Mapper的所有方法都报错,最后没找到原因也没解决,然后交给了我解决。 版本信息: <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.5.1</version> <relativePath/> </parent> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.5.1</version> </dependency> yml中原mybatis配置: mybatis: mapper-locations: classpath*:/mapper/**/*.xml 引入其它包后的配置: mybatis: mapper-locations: classpath*:/mapper/**/*.xml, classpath*:/xmls/**/*.xml mybatis-plus配置类: @Configuration public class MybatisPlusConfig { @Value("${mybatis-plus.mapper-locations}") private String mapperLocations; @Bean public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception { final MybatisSqlSessionFactoryBean sessionFactory = new MybatisSqlSessionFactoryBean(); sessionFactory.setDataSource(dataSource); sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(mapperLocations)); // 设置公共字段的拦截 GlobalConfig globalConfig = GlobalConfigUtils.defaults(); sessionFactory.setGlobalConfig(globalConfig); return sessionFactory.getObject(); } } 2. 报错信息 org.

Kepserver EX6配置opc ua服务端 以及客户端

一.Kepserver EX6下载 阿里云盘分享(下载不限速) 链接:KepServer EX6下载破解工具 二.Kepserver EX6安装 点击安装包=》选择“简体中文语言包”=》一直默认下一步就可以直到结束安装 下载包中有破解补丁的详细使用说明这里就不多做说明了 下面就是安装完成的运行界面: 三.Kepserver EX6 OPC UA 服务配置 1.打开opc ua 设置 右击ex图标=》点击OPC UA 配置 2.设置opc ua 连接配置 选中编辑 网络配置: 这里给了三种配置根据自己业务进行选择,端口一般默认,也可以自定义端口。 一种是Default(默认),通过本机的计算机名称连接 第二种通过外网的IP进行访问 第三种仅限于本机自己连接 配置安全策略: 默认无 opc ua 连接需要 选择“签名与加密” 最后点击确定就可以啦。 **注意:**更改之后需要重新初始化服务器 右击右下角“ex”图标 选“重新初始化” 证书 在java 项目运行后才会导入客户端证书 右击证书选择“信任” 开启OPC UA匿名登录 右击项目=》点击属性=》选择OPC UA=>启用选项 选择是 使用用户名跟密码访问 1.在用户管理中设置 点击设置=》用户管理 添加用户

Android系统启动流程概览

目录 第一节 Android系统启动流程init进程 第二节 init.rc 解析第三节 Zygote进程的启动过程3.1 AndroidRuntime.start 做了三件事:3.1.1 startVm:3.1.2 startReg:3.1.2.1 设置创建可访问Java的线程方法3.1.2.2 注册所有的JNI方法 3.1.3 callMain() 3.2 (Java世界开始)ZygoteInit.main() 第四节 SystemServer 启动流程第五节 其他小点5.1 什么情况下 Zygote 进程会重启呢?5.2 fork函数5.3 写时拷贝(copy-on-write)5.4 内核空间、用户空间5.5 epoll5.6 内核的异常级别 第一节 Android系统启动流程 Boot Rom —— Bootloader —— Linux Kernel —— init进程 —— Zygote进程(dalvik/ art)—— systemServer —— Apps init进程 init 进程是Linux系统中,用户空间启动的第一个进程。 创建并挂载一些文件目录启动属性服务解析 init.rc 配置文件,启动 Zygote 进程 挂载 seLinux 文件目录,创建seLinux,加载 安全策略 启动内核日志 启动属性系统,从文件读取属性 创建epoll 第二节 init.rc 解析 包含五种类型语句: Action(包含command)CommandsServices(将由 init进程 启动的服务)Options(服务的选项)Import (其他配置文件) Zygote服务 也在init.

Ubuntu无界面安装MATLAB 2021a

Ubuntu无界面安装MATLAB 2021a 文章目录 Ubuntu无界面安装MATLAB 2021a系统环境安装步骤1. iso文件挂载2. 创建激活配置文件3. 开始安装4. 破解并激活5. 取消iso挂载6. 将matlab添加到环境变量7. 命令测试 参考链接 系统环境 华为云服务器,可通过堡垒机访问Ubuntu 20.04操作终端:MobaXterm 安装步骤 准备好的安装文件包括: Matlab910R2021a_Lin64.iso和Crack文件夹,Crack文件夹里有4个文件:libmwlmgrimpl.so、license.lic、license_server.lic和license_standalone.lic,文件上传到服务器/opt/matlab路径下 安装前注意是否已经有java环境,可以通过java -version测试,如果没有则可以通过apt install default-jdk -y安装最新版jdk,或者通过apt install openjdk-11-jdk安装指定版本。 1. iso文件挂载 创建一个文件夹,用于挂载iso文件:mkdir /media/matlab创建一个文件夹,作为matlab的安装位置:mkdir /usr/local/matlab/2021a进行挂载:mount -o loop /opt/matlab/Matlab910R2021a_Lin64.iso /media/matlab 2. 创建激活配置文件 切换到配置文件路径:cd /usr/local/matlab/2021a创建配置文件:touch activate.ini添加文件内容:vim activate.ini isSilent=true activateCommand=activateOffline licenseFile=/opt/matlab/Crack/license_standalone.lic 使文件生效:source activate.ini 3. 开始安装 切换到安装文件路径:cd /media/matlab执行命令并等待:./install -mode silent -fileInstallationKey 09806-07443-53955-64350-21751-41297 -agreeToLicense yes -licensePath /opt/matlab/Crack/license_standalone.lic -destinationFolder /usr/local/matlab/2021a -activationPropertiesFile /usr/local/matlab/2021a/activate.ini 4. 破解并激活 复制破解文件:cp /opt/matlab/Crack/libmwlmgrimpl.so /usr/local/matlab/2021a/bin/glnxa64/matlab_startup_plugins/lmgrimpl、cp /opt/matlab/Crack/license.lic /usr/local/matlab/2021a/licenses运行激活命令:/usr/local/matlab/2021a/bin/activate_matlab.sh -propertiesFile /usr/local/matlab/2021a/activate.

数据结构——栈和队列

前言 栈和队列是两种不同的线性数据结构。这两种数据结构相比之前的基础数据结构顺序表和链表来说,特点更加突出,实用性也更强。而这两种数据结构的实现也建立在顺序表和链表的基础之上,建议先了解顺序表和链表的原理再学习栈和队列。 【顺序表解析】传送门:http://t.csdn.cn/TZ5mw。 【链表解析】传送门:http://t.csdn.cn/CRTmg。 1 栈 1.1 区分栈与栈区 可能有些同学在学习内存的时候听说过内存中的栈区。栈区与本文中讨论的栈是有本质区别的。栈区是内存中的一块区域,而栈是一种数据结构。 1.2 思路引入 不知道大家有没有去过超市,由于网上购物的兴起,我已经很久没有去过线下的超市了。记得小时候去超市的时候,由于要买的东西比较多,通常会推上一个购物车,这样一来我可以把挑选好的商品放入购物车中,等到结账时再拿出来。 到结账时,要把商品一件一件的放到收银台上,在这个过程中我们可以发现,我们通常都是先拿位于上方的商品,再拿下方的。这是因为上方商品压住了下方商品,导致我们难以先拿下方商品。而这些商品的相对位置其实与我们将其放入购物车的时间有关,越早放入购物车,商品就越位于下方。因此,后进入购物车的商品,通常先离开购物车,这就是栈的特点。 1.3 基本思路 栈(Stack)是一种线性数据结构,可以想象一下把购物车压缩成线状(竖直放置),每个高度上只能放一件商品,如下图。 通常,我们将最后一个元素的位置称为栈顶,第一个元素的位置称为栈底。如此一来,插入和删除元素都只能在栈顶进行,我们通常把栈的插入称为入栈,删除称为出栈。 其实与上图类似的图形,在学习基础数据结构时我们就见到过。我们将上图顺时针旋转90度可以得到以下图形。 这样看是不是清楚多了,这其实就是一个顺序表,而所谓的入栈和出栈其实就是顺序表的尾插和尾删。 1.4 栈的实现 栈的实现可以使用顺序表,也可以使用链表。这里我选用顺序表进行模拟实现。 1.4.1 接口 既然是通过顺序表来实现栈,那么模拟的结构也与顺序表相似,区别在于栈有唯一的插入和删除方式,也就没有头插,尾插,随机插入这类说法了。 由于在栈里只能操作栈顶元素,因此这里多了一个获取栈顶元素的功能,用来访问栈内元素。另外,在使用栈的时候,有时会以栈是否为空作为判断条件,因此多出一个判空功能。学习过顺序表后,下面的实现看上去就非常简单了。 #pragma once #include<stdio.h> #include<stdlib.h> #include<assert.h> #include<stdbool.h> #define MAX 100 //最大容量 #define STACKADD 2 //扩容容量 typedef int SDateType; typedef struct Stack { SDateType* data; int top; int capacity; }Stack; //初始化栈 void StackInit(Stack* ps); //判空 bool StackEmpty(Stack* ps); //入栈 void StackPush(Stack* ps, SDateType x); //出栈 void StackPop(Stack* ps); //获取栈顶元素 void StackGetTop(Stack* ps, SDateType* d); //销毁栈 void StackDestroy(Stack* ps); 1.

Visual Studio || Visual Studio Code 连接 SQL Server 和 mysql

使用Visua Studio链接本地SQL Server和服务器上的mysql。 软件版本: Visual Studio 2022;Visual Studio Code 2023;SQL Server 2019mysql8.0 一、软件准备二、连接SQL Server2.1 使用Visual Studio 连接SQL Server2.2 使用VS Code连接SQL Server 三、连接mysql四、常用sql语句4.1 常用语句4.2 代码示例 一、软件准备 开头写了软件版本,大家最好使用比较新的release版本。最低不要低于2019嘛,都2023年了,那些古老的软件版本可能不支持一些新特性,或者出现版本不匹配问题,而且使用插件来弥补版本落后问题往往很麻烦。 这些软件最大的也就几个G,最多10分钟就安装好了,而且有没有什么学习成本。工欲善其事,必先利其器,马上卸载你的古老IDE!!(除非你的公司有版本要求) 数据库: 直接官网下载SQL Server 的软件安装就好了;sqlserver我是在服务器安装的,就不多说了。下载好了之后,自己新建数据库和表,或者导入数据什么的,我的这个专栏也有一些入门文章,可以看看。 Visual Studio: 官网下载安装就可以。 安装的时候要选择工作负荷,就是你要用它开发什么,安装相关的依赖之类的。按你的要求选择就可以了,如果要连接数据库,把下面这个数据存储和处理选上: 没安装也没关系,安装完了之后,也可以继续安装你需要的工作负荷,使用这个Visual Studio installer安装就行了。 VS Code: 软件只有几百MB,vscode是个编辑器,通过安装各种插件来完成一些开发工作,他对插件的支持是极好的,因为它使用了Electron框架,这意味着通过VS Code构建的应用程序在更新它们时是精简和无缝的。此外,VS Code比Visual Studio快得多,不过在具体的领域上专业性肯定不如Visual Studio这些IDE。 安装完成后再安装SQL Server和mysql的插件就行了,以mysql为例(很多都是Visual Studio不支持的): 二、连接SQL Server 2.1 使用Visual Studio 连接SQL Server 首先确保你正确安装了SQL Server 软件并建立和数据库,这没什么好说的,比如: 接着在Visual Studio中新建数据库项目: 进去之后连接SQL Server,在工具选项下点击连接到数据库,选择SQL Server,然后选择相关数据库。 连接上: 点击视图,SQL Server对象资源管理器: 现在就可以进行相关操作了,在要操作的数据库上,右键,新建查询,编写sql语句,比如: 2.2 使用VS Code连接SQL Server 安装mssql插件:

PHP实战

PHP: 【PHP】 了解项目结构 Controller是控制层 View是视图层 从pulic’下面复制模板- 在view层创建admin文件夹,粘贴进去 在controller层创建Admin文件夹(注意大写),创建和模板相同名字的控制器。 如图所示 登录: Login.html 记得改路径 令牌使用 三步走:找到login.html 找到标签,添加{:token} 只需要在规则里面添加 token就可以了,名称都是一样的 '__token__' => ['token'] 数据的验证 在Application文件下创建和view同级的文件夹 validate 密码的验证 注意1,2,3三个地方: 规则写在: $rule里面,验证语句写在 $message里面,都是protected DB的操作 where Db::name('admin')->where('username',$params['username'])->findOrEmpty(); 判断用户名是否一致(用在登录验证) $userInfo = Db::name('admin')->where('username',$params['username'])->findOrEmpty(); Session的操作 session 写在登录判断成功语句之后 登录页面显示admin101 如图所示这么写: 因为静态文件写在 User/login.html里面 所以要去 controller层里面的User.php里面 写一个和 login.html同名的函数 加入下面这句话 $this->assign("customer","admin001"); get $username = Session::get("adminInfo")['username']; set $userAdmin = Session::get("adminInfo"); $this->assign("userAdmin", $userAdmin['username']); 搜索功能 在show_list.html里面找到 搜索函数 修改url的跳转地址(自定义) 在admin.php里面创建 dataSearch_user函数(静态页面自定义的函数) 书写搜索DB操作 还是在上面这个function里面 $map[] = ['username','=',$searchParams['username']]; $pageData = Db::name("

linux服务器上无法git clone和下载速度慢问题的解决

国内服务器访问HuggingFace下载相关模型时,速度很慢。 通过设置服务器中的网络端口配置下即可。 cd /etc vi resolv.conf resolv.conf文件里,写入文本 nameserver 114.114.114.114 nameserver 8.8.8.8 nameserver 8.8.4.4 search localdomain 访问主要是nameserver 8.8.8.8 起作用 保存文件后,重启网络配置 systemctl restart network

pytorch各种学习率衰减器

各种学习率衰减器 各类衰减器文档:【here】 指数衰减 torch.optim.lr_scheduler.ExponentialLR(optimizer, gamma=0.98) 一般将last_epoch 设置成-1,verbose设置成FALSE 学习率调整公式: 固定步长衰减 torch.optim.lr_scheduler.StepLR(optimizer, step_size=step_size, gamma=0.1) 参数: optimizer (Optimizer):的优化器; step_size(int):更新epoch; gamma(float):更新lr的乘法因子; last_epoch (int):默认-1 多步长衰减 torch.optim.lr_scheduler.MultiStepLR(optimizer,milestones=[20,50], gamma=0.8) 余弦退火衰减 torch.optim.lr_scheduler.CosineAnnealingLR(optimizer, T_max=60, eta_min=0) T_max为余弦函数的一个半周期 函数衰减 lambda1 = lambda i: 0.1 * i torch.optim.lr_scheduler.LambdaLR(optimizer, lr_lambda, last_epoch=-1, verbose=False) #lr = lr *lamda 自适应调整衰减 torch.optim.lr_scheduler.ReduceLROnPlateau(optimizer, mode='min', factor=0.1, patience=10, verbose=False, threshold=0.0001, threshold_mode='rel', cooldown=0, min_lr=0, eps=1e-08) warm up 先将学习率从很小的值逐渐上升,再用现有的学习率衰减器 预热余弦退火 torch.optim.lr_scheduler.CosineAnnealingWarmRestarts(optimizer, T_0=20, T_mult=2, eta_min=0.01) T_0和T_mult的不同设置的比较

今日前端小知识——判断数据类型的几种方法

判断数据类型的方法 typeofinstanceofconstructorObject.prototype.isPrototypeOf()Object.prototype.toString.call()(最推荐使用)补充知识点:instanceof 与 isPrototypeOf() 的区别 JavaScript 是一种弱类型或者说动态语言,在使用一个变量时无需提前声明变量的类型,在程序运行过程中,类型会被自动确定,这意味着可以使用同一个变量保存不同类型的数据。 JavaScript 中数据类型主要分为两种:基本数据类型和引用数据类型。基本数据类型包括 Number、Boolean、String、undefined、null、Symbol、BigInt,引用数据类型包括 Object、Function、Array、Date、Map、Set 等多种对象。实际开发中拿到一个数据可能需要先对数据的类型进行判断,这里总结了几种常用的方法以及对应的优缺点。 typeof typeof 操作符返回一个字符串,表示未经计算的操作数的类型。语法如下。 typeof operand / typeof(operand) typeof 能判断出以下 8 种类型:Number、Boolean、String、undefined、Symbol、BigInt、Object、Function。需要注意的几点: typeof null === ‘object’typeof NaN === ‘number’ 在 JavaScript 最初的实现中,JavaScript 中的值是由一个表示类型的标签和实际数据值表示的。对象的类型标签是 0。由于 null 代表的是空指针(大多数平台下值为 0x00),null 的类型标签是 0,typeof null 也因此返回 “object”。 typeof(1); // number typeof(1.3); // number typeof(NaN); // number typeof(true); // boolean typeof(''); // string typeof('hi'); // string typeof(`hhh`); // string // 已声明但未赋值的变量 let one; typeof(one); // undefined // 未声明的变量 typeof(none); // undefined typeof(undefined); // undefined typeof(13n); // bigint typeof(Symbol(13)); // symbol let obj = { name: 'ostuthere' } typeof(obj); // object let nowTime = new Date(); typeof(nowTime); // object let arr = [1, 2, 3]; typeof(arr); // object typeof(null); // object let func1 = function(){ console.

QGIS学习

目录 添加网络底图 导入SHP适量文件 查找相应河流 定位 Excel的csv 文件中的坐标导入QGIS 查询 添加网络底图 点击菜单栏中的“网络”,选择网上地图添加。 导入SHP适量文件 点击工具栏中的选项如下: 然后导入矢量图。 查找相应河流 打开矢量图,选择图层后,右键点击,选择“打开属性表” 然后选择“显示所有要素”,选中“字段过滤”,选择“name” 在底部name栏目,可以检索河流名,如“金沙江”,按键 enter,即可查询到。 然后在qgis系统中,这条河流即得到定位。 选择如下按键,即可展示这条河流的详细信息。 定位 左下角,输入经纬度,就可以定位。 经纬度地查询,可以参考经纬度查询 https://huiyan.baidu.com/github/tools/coord/ 輸入經緯度坐標,到csv文本中,然後這些點會在地圖中展現。 測距 选择高亮处的尺子符号,然后选择一点, 接着再选择一点。就可以测量两点的长度。在出现的方框中,会出现具体的数字。 Excel的csv 文件中的坐标导入QGIS 注意,需要输入横坐标字段(x字段)和纵坐标字段(y字段),Z字段可以暂时不用管。注意不要填错字段。 注意,导入红圈内的形式,才可以生成点。否则就是[ 0]这样的形式,在地图上不显示出来。 原因在于,导入地图的时候,是按照如下的格式填写的。如果有一处填写问题,导入的时候就可能产生问题。只有多试验几次,才能解决问题。 如果勾选了“度分秒格式坐标”,但是实际csv文件中并不是“度分秒格式坐标”,就会出现QGIS中坐标点不出现的情况。 所以,要检查是否勾选该栏目。 查询 打开矢量图中的属性表,可以看到列表信息,方便检索。

Linux中MySQL.tar.gz包的安装

前言 我们知道,在Linux中安装MySQL的方式有两种。一种是rpm包,一种是tar.gz包。 本文中详细记录tar.gz包的安装方式。 以 MySQL5.7为例 下载就不累述了。 注意 在安装新的MySQL之前,建议先删除系统中自带或遗留的mysql和mariadb。 查看 rpm -qa | grep mysql rpm -qa | grep mariadb 删除 rpm -e --nodeps 上面查出来的名字 全删除之后可以安装。 上传 找一个与系统文件不冲突的路径,将下载的tar.gz上传。如/opt/software。 解压并简化名称 tar -zxvf mysql-5.7.38-el7-x86_64.tar.gz mv mysql-5.7.38-el7-x86_64 mysql-5.7.38 编辑配置文件 里面的目录要根据你自己的改: /opt/software/mysql-5.7.38 改成你自己的实际解压目录。 #进入到support目录 cd mysql-5.7.38/support-files #编辑一个cnf配置文件 vim my_default.cnf #内容如下: [mysqld] sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES basedir = /opt/software/mysql-5.7.38 datadir = /opt/software/mysql-5.7.38/data port = 3306 socket = /tmp/mysql.sock character-set-server=utf8 log-error = /opt/software/mysql-5.7.38/data/mysqld.log pid-file = /opt/software/mysql-5.7.38/data/mysqld.pid cp my_default.cnf /etc/my.cnf 用户和权限 查看是否存在:(如果有内容输出就是存在的,可以跳过后面的创建。)

在移动硬盘上装Ubuntu

需要工具 U盘(作为系统启动器)大存储移动硬盘Ubuntu.iso 步骤 首先格式化移动硬盘 1.1 cmd :diskpark 1.2 diskpart: select disk X (选择你的移动硬盘) 1.3 diskpart: clean 1.4 在计算机磁盘管理新建简单卷装系统 2.1 使用USB writer 将.iso文件写入U盘 2.2 开机按F10(不同品牌的机器不同)进入BLOS,选择U盘启动 2.3 安装类型,选择移动硬盘,取文件类型Ext4,根结点“\”,设置你的密码 ,语言最好设置为英文。中文可能有很多意料之外的错装机准备 Terminal : sudo apt-get update sudo apt-get upgrade sudo ubuntu-drivers autoinstall (系统自行装显卡驱动,不要自己装,真的很麻烦,很容易出错,我一直用的系统自己装的,一直没问题)

MySQL安装教程(内含navicat)

1、进入MySQL官网下载对应的安装包 下载地址:MySQL :: Download MySQL Community Server 下载完成之后解压(找到bin文件夹所在的目录,后续需要) 2、打开电脑系统的环境变量,添加MySQL安装的bin目录的路径 环境变量进入方式:右击桌面此电脑--点击属性--点击高级系统设置--点击环境变量--添加bin目录的路径 如果后续还是提示报错,可以如下图所示,添加:C:\windows\system32 3、配置完环境变量后,打开文件夹,创建一个新的文件名后缀为.ini的my.ini空白文件,并在my.ini编辑如下信息并保存 [mysql] # 设置mysql客户端默认字符集 default-character-set=utf8 [mysqld] # 设置3306端口 port=3306 # 设置mysql的安装目录,一定要双斜杠\\来连接 basedir=D:\\software\\mysql\\mysql-8.0.33-winx64\\mysql-8.0.33-winx64 # 设置mysql数据库的数据的存放目录,一定要双斜杠\\来连接 datadir=D:\\software\\mysql\\mysql-8.0.33-winx64\\mysql-8.0.33-winx64\\data # 允许最大连接数 max_connections=200 # 允许连接失败的次数。 max_connect_errors=10 # 服务端使用的字符集默认为utf8 character-set-server=utf8 # 创建新表时将使用的默认存储引擎 default-storage-engine=INNODB 4、进入管理员命令行模式,对MySQL进行初始化 等待初始化完成data文件夹中会生成一个后缀名为.err的文件,里面存放了初始化登录MySQL的密码 5、在管理员命令行模式,输入mysqld --install 安装MySQL 6、在管理员命令行模式,输入 net start mysql 启动MySQL服务 7、管理员身份进入命令行输入:mysql -u root -p 然后输入密码 提示报错则继续输入:mysqld --console,然后第一个命令窗口不要关闭,在以管理员身份打开新的另一个命令窗口并输入:mysql -u root -p 然后输入密码即可开启 8、登录成功之后修改root用户密码:alter user 'root'@'localhost' identified with mysql_native_password by '新密码'; 9、mysql服务保持一直启动状态 管理员身份进入命令行输入:net start MySQL Autoplay

新版Mybatiusplus代码生成器

官网代码生成器(新) | MyBatis-Plus 目录 1.前置依赖 2.配置对应参数 2.1带注释版本 2.2对AutoGenerator的解释 2.3精简版 1.前置依赖 <!-- 代码生成器的依赖 --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-generator</artifactId> <version>3.5.1</version> </dependency> <!-- 代码生成器模板引擎依赖,必须加上--> <dependency> <groupId>org.apache.velocity</groupId> <artifactId>velocity-engine-core</artifactId> <version>2.3</version> </dependency> <!--mybatisplus的依赖--> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.5.2</version> </dependency> 配置maven插件 因为生成测myabtis.xml的配置文件会在java文件下,这时候扫描到就需要配置插件 <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> <resources> <resource> <directory>src/main/java</directory> <includes> <include>**/*.yml</include> <include>**/*.properties</include> <include>**/*.xml</include> </includes> <filtering>false</filtering> </resource> <resource> <directory>src/main/resources</directory> <includes> <include>**/*.yml</include> <include>**/*.properties</include> <include>**/*.xml</include> </includes> <filtering>false</filtering> </resource> </resources> </build> 2.配置对应参数 具体参数可以查看官网,这为使用使用我尝试过的 2.1带注释版本 //数据库配置 使用官网默认 DataSourceConfig dataSourceConfig = new DataSourceConfig.

图像处理-大津阈值法(最大类间方差法)

基本原理:以最佳阈值将图像的灰度直方图分割成两部分,使两类之间的方差取最大值,即分离性最大。此算法利用了最小二乘法原理。 大津阈值法(Otsu's thresholding)是一种常用的图像分割方法,也被称为最大类间方差法(maximum interclass variance method)。该方法通过自动选择一个阈值来将图像分成两个类别,以达到最大化两个类别之间的方差,从而实现图像的二值化分割。 以下是大津阈值法的步骤: 灰度化:将彩色图像转换为灰度图像,以便在单通道上进行处理。计算直方图:计算灰度图像的直方图,统计每个灰度级别的像素数量。归一化直方图:将直方图归一化,使得每个灰度级别的像素数量除以总像素数量,得到各个灰度级别的像素概率分布。计算类间方差:对于每个可能的阈值T(从0到最大灰度级别),计算分割后两个类别之间的方差。方差可通过以下公式计算: 类间方差 = w0 * w1 * (μ0 - μ1) ^ 2 其中,w0和w1分别为类别0和类别1的像素概率之和,μ0和μ1分别为类别0和类别1的平均灰度值。寻找最大类间方差:在所有可能的阈值T上,选择使类间方差最大的阈值作为最佳阈值。应用阈值:将原始图像根据最佳阈值进行二值化,像素灰度值大于阈值的设为一个类别,小于等于阈值的设为另一个类别。 通过以上步骤,大津阈值法可以自动选择最佳阈值,实现图像的自适应二值化分割。该方法适用于具有明显双峰分布的图像,其中两个峰表示不同的目标或背景。它被广泛应用于图像处理和计算机视觉中的各种任务,如目标检测、图像分析和特征提取等。 使得上式值最大时对应的k

STM32F103移植FreeRTOS

一,准备工作 准备一个STM32F103xxxx的基础工程,越简单的越好,能点灯的就行。准备FreeRTOS系统源码官网下载链接,没有的可以点击链接去官网下载。 二,FreeRTOS移植 在基础文件夹中新建一个FreeRTOS文件夹 在新建的FreeRTOS里添加FreeRTOS源码(没有的自己官网下载,上面有链接,这是需要添加的文件的文件目录FreeRTOSv9.0.0\FreeRTOS\Source把这里面的文件复制到我们工程文件里创建好的FreeRTOS文件夹里面 然后点击portable文件进入里面,只留下keil , MemMang , RVDS三个文件,其余全部删除 然后我们在工程里面把文件添加进去 FreeRTOS_PORTABLE文件里的port.c在RVDS文件夹下的ARM_CM3文件夹里面,heap_4.c在MemMang文件夹中。 有5个heep_x文件,这 5 个 c 文件是 五种不同的内存管理方法,这里就不多说,先点灯重要添加头文件路径 编译一下,会发现报错,这是因为缺少 FreeRTOSConfig.h 文件,我们可以自己在FreeRTOS_CORE文件里创建一个FreeRTOSConfig.h文件,然后把下面的程序粘贴进去(程序来源于正点原子) /* FreeRTOS V9.0.0 - Copyright (C) 2016 Real Time Engineers Ltd. All rights reserved VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION. This file is part of the FreeRTOS distribution. FreeRTOS is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License (version 2) as published by the Free Software Foundation >>>> AND MODIFIED BY <<<< the FreeRTOS exception.

C# winform 窗体控件跨线程访问

在写计算机网络课设的时候,遇到一个需求:建立的服务器需要一直监听来自某个端口的连接请求。一开始看到我想这不是很简单吗,正好刚刚学习了线程有关的知识,直接开个新线程挂在后台执行不就行了,抱着这样简单的想法,一堆错误接踵而至。 首先出现的问题就是窗体控件的跨线程访问,会出现这样的一个报错信息:System.InvalidOperationException:“线程间操作无效: 从不是创建控件“textBox1”的线程访问它。” 去找了找解决方案,其中最简单的是这样的一行代码: Control.CheckForIllegalCrossThreadCalls = false; 这行代码只需要加到需要进行控制的控件那里,就会让程序忽略线程的危险操作。 这样确实就解决了问题,但是这是一个全局的静态变量,如果在其他地方不小心修改了这一变量,每个控件就又会崩掉。所以,正统的解决方法应该是使用委托。 什么是委托?C#的委托类似于C++的函数指针,是一个可以批量执行函数的容器。我们知道这个问题是发生在跨线程访问中,那么我们如果让函数调用发生在创建这个控件的线程中,那么就不是跨线程访问,也就不存在这个问题了,因此我们使用this.invoke(delegrate)来使用委托。 来解释这种解决方法,我们设想一个简单的情景:我们需要在一个文本框中实时的更新当前时间,我们希望同时还可以在窗体中进行别的操作。 第一时间想到: private void Form1_Load(object sender, EventArgs e) { while(true) { string time = DateTime.Now.ToString(); textBox1.Text = time; Thread.Sleep(1000); } } 这个显然是错误的,甚至连窗口都跳不出来,更别提还可以在窗口中执行其他操作。因为这个while(true)循环堵死了这个窗体的加载,根本加载不出来,会一直停留在加载这个环节。 然后就应该想到使用新开线程来解决这个问题了: private void Form1_Load(object sender, EventArgs e) { // Control.CheckForIllegalCrossThreadCalls = false; // 如果加上上面这行代码,就可以运行了,但是只是忽略了线程安全性 Thread timeShower = new Thread(ShowTime); timeShower.IsBackground = true; timeShower.Start(); } private void ShowTime() { while(true) { string time = DateTime.Now.ToString(); textBox1.Text = time; } } 很可惜,线程的第一次使用报错了!跨线程访问了textbox控件,这不安全。

基于STM32等单片机的项目作品汇总

本篇记录下自己做的项目作品,作品有实物也有仿真,以实物居多,主要是以单片机为主,单片机有HC32,STM32,STC,51等,本人从事单片机行业5年,拥有丰富的经验。也涉及QT,LVGL,嵌入式,IPC等,如有需求,请私信。 一、STM32项目列表(实物) 项目名称功能文件001_基于STM32的一键报警系统一键紧急报警,短信设置电话,TTS真人发音,跌倒检测,电话短信通知。源代码,原理图,实物002_基于STM32的智能家居语音控制系统语音唤醒,控制,按键设置,自动模式和手动模式,光敏检测等源代码,原理图,实物003_基于STM32的阳台花卉管理检测系统OLED显示,按键设置, 自动浇水,APP实时检测及控制管理,蜂鸣器警报提示等 源代码,原理图,实物 004_基于STM32的智慧消防系统实时检测环境,烟雾,可燃气,空气质量,火焰等,按键和APP控制,声光报警,继电器联动,报警时联动继电器打开风扇,关闭电磁阀,OLED实时显示各个状态,报警时也显示报警信息,静音功能,按键封锁1分钟,APP蓝牙或WIFI源代码,原理图,实物005_基于STM32单片机的蓝牙智能手环计步,RTC时钟,体温测量,心率计血氧采集,OLED显示,按键设置,APP显示操作等源代码,原理图,实物(APP有源码)006_基于stm32的车位锁系统刷卡,人员检测,开锁,计费,按键修改,雨滴检测,短信通知(中英文)。源代码,原理图,实物007_基于单片机水体质量检测系统的设计水质检测,按键操作,LCD1602显示,超声波测距模块检测,APP远程控制管理源代码,原理图,实物008_基于STM32的智能教室管理系统rfid处理,人员检测管理,oled显示人员及座位信息,APP远程管理。源代码,原理图,实物009_基于STM32的图书馆光灯调节系统自动识别光照亮度,人员控制灯光亮度,按键调节,手动控制,LCD1602显示,WiFi远程检测及管理源代码,原理图,实物010_基于STM32的气象监测系统的设计 温度的检测,湿度检测,风速检测,风向检测,WIFI无线传输数据,屏幕显示等功能 源代码,原理图,实物011_基于STM32的RFID的餐卡管理系统刷卡管理,账号注册,注销,金额管理等源代码,原理图,实物012_基于STM32的室内环境监测系统一氧化碳,甲烷,天燃气等环境检测(蓝牙/WIFI实时检测)源代码,原理图,实物013_基于stm32单总线同时读取多个ds18b20单总线读多个DS18B20,按键修改阈值,报警功能,串口打印输出,远程显示源代码,原理图,实物014_基于STM32的跌倒检测系统 倾角传感器检测,GPS定位,短信通知 源代码,原理图,实物015_基于STM32的实验室综合管理与实现 温湿度采集,光照采集,环境PM2.5的检测,RFID识别统计人数,液晶显示,自动换气等,WIFI远程控制 源代码,原理图,实物016_基于stm32智能垃圾桶系统检测有人靠近,自动开盖,检测到垃圾满了,报警提示等功能(APP)源代码,原理图,实物017_基于STM32智能台灯坐资矫正系统按键控制,远程控制,亮度调节,语音控制,超声波测距,OLED显示等源代码,原理图,实物018_基于STM32的智慧农业系统oled显示,按键控制,温湿度检测,光照检测,自动水泵控制,APP远程控制源代码,原理图,实物019_基于大棚自动浇水补光控制系统oled显示,光敏,温湿度等环境检测,按键设置,自动补光,自动调节温度等功能,APP远程监控源代码,原理图,实物020_基于STM32的停车场系统RFID刷卡检测,车辆统计,车费计数,离场进场等,OLED显示。源代码,原理图,实物021_基于STM32单片机太阳能电池板追日光跟踪系统设计检测日光自动追踪,APP检测源代码,原理图,实物 二、STM32项目列表(仿真) 仿真软件8.13版本,低版本可能不能兼容。 项目名称功能文件001_基于STM32的信号发生器方波,正弦波,三角波,频率,幅度可设置源代码,仿真图,原理图002_基于STM32超声波小车循迹玻璃清洁机器人仿真超声波检测,按键控制方向,吸附,清洁功能源代码,仿真图003_基于STM32的电梯楼层控制系统LED指示,模拟电梯内外按键操作,实现功能源代码,仿真图 项目只记录了一部分,还有许多项目,后续慢慢完善。 承接各种定制设计,有需求的私信博主。

安克创新测试工程师校招一二面面经

作者:skrskr 内容来源:SSP面试笔记 在 SSP面试 看了很多面经,感谢前辈的分享,今天我也分享下面试题目: 投递简历之后先是过了一个笔试,然后就打电话通知了面试,给大家分享一下经验。 一面 1、自我介绍 2、项目介绍 3、追问项目细节 4、说下你对测试的了解 5、测试的方法 6、介绍下你之前怎么测试一个模块的 7、测试的流程 8、UI自动化了解吗 9、phython掌握情况 10、反问 二面 1、自我介绍 2、在校课程,成绩 3、项目介绍 参加过的项目详述 4、简历上的内容提问 5、怎么看到我们公司 6、为什么想做测试 7、个人优缺点 8、有没有其他offer 9、薪资期望 10、反问 应该就是这些了,其他记不太清了,希望对大家有帮助,许愿offer!

mysql错误码1045解决方案

用数据库连接工具访问提示 1045的错误码,在命令行输入mysql -u root –p,输入密码,经常出现下面的错误信息,相信该错误信息很多人在使用mysql时都遇到过。 ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES) 用的好好的怎么突然就有这个错了,下面是解决方案,后面会列举问题原因。 1、停止MySQL服务 # windows net stop mysql # linux service mysqld stop 2、修改配置文件,跳过验证 修改MySQL安装目录下的my.ini配置文件,使登录时跳过权限检查; #到mysql根目录找到mysql配置文件 vim my.ini #在my.ini,[mysqld]下添加一行,使其登录时跳过权限检查 skip_grant_tables 3、重启mysql服务,修改密码 启动MySQL服务,登录MySQL,此时提示输入密码,输入任意密码回车即可进入MySQL。 #登录mysql mysql -u root -p 然后通过SQL语句修改root用户的密码; #将数据库切换至mysql库 mysql> USE mysql; #修改密码 mysql> UPDATE user SET password=PASSWORD(‘newpasswd')WHERE user='root'; #刷新MySQL权限相关的表 mysql> flush privileges; mysql> exit; 4、重启服务 将my.ini文件中加入的跳过权限语句删除或加#号注释。 重启服务,使用修改后的密码登录即可。 5、问题分析 使用root用户登录MySQL,查看user表中的用户信息如下,可以发现host的字段分别为%和localhost。 mysql>select host,userfrom user; 我这里遇到的问题是%号的这条数据权限没了, 修改一下即可,不用强制修改密码,因为之前一直用的好好的, 如果你遇到这样的问题,希望能给你一点参考。