openEuler系统安装配置-docker安装-docker显卡环境安装
系统安装制作启动盘https://www.iplaysoft.com/ventoy.html安装系统1.启动待安装的电脑/服务器。修改启动选项,进入 U 盘启动 2.选择要安装的系统。选择通用安装 3.然后从https://docs.openeuler.org/zh/docs/22.03_LTS_SP3/docs/Installation/%E5%AE%89%E8%A3%85%E6%8C%87%E5%AF%BC.html 的“安装引导界面”开始来进行安装配置
配置网络
参考 https://docs.openeuler.org/zh/docs/22.03_LTS_SP3/docs/Administration/%E9%85%8D%E7%BD%AE%E7%BD%91%E7%BB%9C.html
1.查看可用设备nmcli dev status
2.配置动态 IPnmcli connection add type ethernet con-name 连接名称 ifname 接口名称
3.激活配置nmcli con up 连接名称
配置软件源1.编辑 vi /etc ...
使用 Node.js 开发 TCP 客户端并拆分连续消息包
使用 Node.js 开发 TCP 客户端并拆分连续消息包在网络编程中,TCP 是一种可靠的传输协议,它确保数据的完整性和顺序性。然而,在实际开发 TCP 客户端时,我们常常会遇到一个挑战:由于 TCP 是面向流的协议,接收到的数据可能并不总是按预期的消息边界到达,尤其是在高速数据传输时,多个消息包可能会连续到达。这时,我们需要自己处理数据的拆分和重组,以确保消息的完整性。
问题描述假设我们在开发一个 TCP 客户端,该客户端接收到的每条消息都有固定的起始标志符和结束标志符。当收到的数据流中包含多个连续的消息包时,我们需要将它们正确地拆分并处理。
解决方案为了解决这个问题,我们可以通过以下步骤来处理连续的消息包:
维护一个缓存区:使用一个缓存区来存储接收到的数据。这样即使消息包分成了多次接收,我们也可以将它们重组在一起。
检测起始标志符和结束标志符:在接收到的数据中查找起始标志符和结束标志符,并将完整的消息提取出来。
处理并移除已处理的消息:一旦我们找到了完整的消息,就可以处理它,并从缓存区中移除已经处理的部分。
下面是一个示例代码,展示了如何实现这些步骤:
12345678 ...
系统离线license验证的方法
为了解决系统私有化部署,完全离线的情况下,如何验证 license 的问题。 需要考虑以下几个方面:
系统需要支持离线验证,即在没有网络连接的情况下也能进行 license 验证。
需要保证 license 验证的准确性,防止被篡改或伪造。
需要考虑 license 的过期时间、使用次数等限制条件,并确保在离线情况下也能进行验证。
需要确保系统绑定在一台设备上,防止 license 被盗用。
1. 实现原理使用私钥签名,公钥验签的方式进行验证。在系统部署时,生成一个密钥对,使用私钥对信息签名。同时将公钥提供给用户,用于验证签名。用户在购买 license 时,使用私钥对 license 进行签名,并将签名后的 license 发送给用户。用户在安装 license 时,使用公钥对 license 进行验签,验证其有效性。签名的过程
对自定义信息+随机字符串(密钥)进行加密
使用私钥对加密后的信息进行签名
将密钥+加密信息长度+加密信息+签名作为 license
2. 具体实现 Nodejs 代码2.1 生成密钥对1234const NodeRSA = require(&qu ...
uniapp 的 Android 端获取照片的MD5
使用spark-md5这个包计算文件的 md5 值,但是在 Uniapp 安卓端没有 FileReader 这个方法。
可以利用 plus.io.FileReader 读取照片 base64 内容,然后再计算 md5
代码12345678910111213141516171819202122232425/** * 获取照片 md5 */function getMD5(path) { return new Promise((resolve, reject) => { plus.io.resolveLocalFileSystemURL(path, entry => { var fileReader = new plus.io.FileReader(); fileReader.readAsDataURL(entry); fileReader.onloadend = function (evt) { // base64图片,比如:data:image/jpeg;base64,/9j/4AAQ ...
strapi 从 controller 中上传文件
官网中关于上传文件的介绍只介绍了如何在前端上传文件,但是在后端上传文件的需求也是很常见的,比如在 controller 中上传文件。
上传文件在 controller 或 service 中上传文件,需要使用 strapi 的 service 中的 upload 方法,具体使用方法如下:
123456789101112131415161718192021import fse from "fs-extra";import path from "path";import os from "os";//需要把文件放到临时文件夹中const tmpWorkingDirectory = await fse.mkdtemp(path.join(os.tmpdir(), "strapi-upload-"));const fileName = Date.now() + ".jpg"; // 根据实际情况修改文件名const tmpFilePath = path.join(tmpWorkingDirect ...
如何使用 Python 抓取华为摄像头的抓拍图片
华为摄像头提供了抓拍图片的 API,但是返回的数据是 multipart 格式的,需要进行解析。本文将介绍如何使用 Python 抓取华为摄像头的抓拍图片。
获取抓拍图片首先,我们需要使用 HTTP Digest Authentication 认证方式,向华为摄像头的 API 发送 POST 请求,获取抓拍图片。以下是示例代码:
1234567891011121314import requestsimport jsonusername = '******' # 替换为实际的用户名password = '******' # 替换为实际的密码url = 'https://ip/SDCAPI/V1.0/Storage/Snapshot/SnapAction'uuid = "a234feaf-7751-99fa-72b1-9d8357e6d26f" # 替换为实际的 UUIDpayload = json.dumps({"UUID": uuid})headers = ...
使用Nodejs对Minio对象存储中图片压缩
利用 Minio 的通知功能,在有图片上传后,通知到 Nodejs 服务,压缩图片再上传
项目地址https://github.com/houxiaozhao/minio-compresses-images
主要使用的库
minio - Minio 的 Nodejs 客户端
sharp - 图片压缩库
koa - Nodejs 的 web 框架
bull - Nodejs 的队列库
流程
因为 sharp 的处理图片速度比较慢,所以使用了队列,将图片压缩的任务放到队列中,然后再从队列中取出任务,进行压缩。
主要压缩的代码1234567const minioClient = new minio.Client(config.minio);console.time(job.id + "流处理时间");const readable = await minioClient.getObject(bucket, key);const pipeline = sharp({ unlimited: true, sequentialRead: true }).j ...
Nodejs中Buffer和Stream互转
Stream to Buffer12345678function streamToBuffer(stream) { return new Promise((resolve, reject) => { let buffers = []; stream.on("error", reject); stream.on("data", (data) => buffers.push(data)); stream.on("end", () => resolve(Buffer.concat(buffers))); });}
Buffer to Stream1234567let Duplex = require("stream").Duplex;function bufferToStream(buffer) { let stream = new Duplex(); stream.push(buffer); stream.p ...
Hexo博客框架介绍和使用部署
官网介绍:快速、简介且高效的博客框架
基于 Node.js 的静态博客框架,可以方便的生成静态网页托管在 GitHub 上
特点
速度很快,上百个页面在几秒内完成渲染
一键部署,可以链接 github,一键部署到 github page
插件和可扩展
快速开始安装
安装 hexo 命令行工具
npm install hexo-cli -g
使用命令行工具初始化
hexo init blog
安装依赖
npm install
运行
hexo server
配置网站信息打开_config.yml
可以配置网站标题、作者、语言等。
新建一篇文章使用命令
hexo new <title>
然后在 source/_posts 目录下会生成一个 md 文档
生成静态网页hexo generate
会生成在 public 目录下,直接部署该目录到服务器或其他位置即可
也可以上传到 github 上,利用 github page 做一个免费的网站
创建一个仓库名字是.github.io
然后在 setting->pages 中设置
把静态网 ...
strapi介绍
官网介绍:开源的 Headless CMS,100% 的 javascript 和完全可定制化
CMS:内容管理系统,比如 WordPress
Headless CMS :无头 内容管理系统。内容仅通过 API 进行访问,而不需要内置前端。
可以用来创建网站,APP,API 等,可以用作后端系统管理内容,也可以配合 Vue、React 等前端技术结合使用。
即使不了解后端开发技术,也可以创建 API 接口
特点
使用一个命令就可以生成后端 restfull api 服务,除了 rest,甚至还支持 graphQL API
yarn create strapi-app my-project –quickstart
可以在内置的后端管理界面对数据库进行管理。添加表后自动生成对应增删改查接口
内置的权限系统,全部数据都由权限系统控制
插件化,内置基本插件:内容管理器,api 文档,媒体库,角色权限等
自定义 API,可以使用 JavaScript 自定义 API
支持多种数据库
快速开始安装需要有 node 环境,一句命令即可安装,
yarn create ...