Matter - 配置工厂数据(2)
部分关键名词参数简介
- PASE(Passcode-Authenticated Session Establishment): 基于密码认证的会话建立,用于在 Commissioning 的时候 Commissioner 与 Matter Deivce 之间建立安全信道,生成对称加密密钥用于 Commissioning 后续通信消息进行加、解密和完整性保护。
- Passcode(or Pincode): 密码或口令,用于在 Commissioning 的时候会话建立过程的输入参数之一。也是 QR 码中包含的一个重要信息。
- Discriminator: 鉴别码。Matter Device 在 Commissioning 时会进行蓝牙广播(Advertising),广播中包含该信息。Commissioner 通过鉴别码来识别入网设备,两者鉴别码一致才开始 Commissioning 流程。
- Spake2+: 密码认证的密钥交换算法,PASE 建立过程中使用的算法。Matter 规范里有详细的介绍。
- Verifier: 验证器,用于在 Commissioning 的时候 PASE 会话建立过程的输入参数之一。
- Iteration count: 迭代次数,用于在 Commissioning 的时候 PASE 会话建立过程的输入参数之一。
- Salt: 盐值,用于在 Commissioning 的时候 PASE 会话建立过程的输入参数之一。
工厂数据参数
工厂数据是在制造过程中写入非易失性存储器的一组设备参数,在设备启动初始化时读取。所有出厂数据参数均受到保护,不会被软件修改,并且固件数据参数集在设备的使用寿命期间必须保持不变,实施固件时,必须确保在设备固件更新 (DFU) 或恢复出厂设置期间不会重写或覆盖出厂数据参数。对于 nRF Connect 平台,出厂数据默认存储在芯片内部 flash 的单独分区中。这有助于通过应用硬件写保护来保证工厂数据的安全。Fprotect 是硬件闪存保护驱动程序,用它来确保内部闪存中的工厂数据分区写保护。
Key name | Full name | Length | Format | Conformance | Description |
---|---|---|---|---|---|
version | 出厂数据版本 | 2 B | uint16 | 强制 | 当前工厂数据集的版本。用户无法更改它,并且必须与设备端当前版本的 Factory Data Provider 保持一致。 |
sn | 序列号 | <1, 32> B | ASCII string | 强制 | 序列号参数定义制造设备的唯一编号。序列号的最大长度为 32 个字符。 |
vendor_id | 供应商ID | 2 B | uint16 | 强制 | CSA 为负责生产设备的组织分配的 ID |
product_id | 产品编号 | 2 B | uint16 | 强制 | 设备供应商分配的用于识别产品的唯一 ID。它默认为 CSA 分配的 ID,用于指定非生产或测试产品。 |
vendor_name | 供应商名称 | <1, 32> B | ASCII string | 强制 | 可读的供应商名称,提供一个简单的字符串 |
product_name | 产品名称 | <1, 32> B | ASCII string | 强制 | 可读的产品名称,提供一个简单的字符串 |
date | 生产日期 | 10 B | ISO 8601 | 强制 | 使用的日期格式为 ISO 8601,例如 YYYY-MM-DD |
hw_ver | 硬件版本 | 2 B | uint16 | 强制 | 值的含义和版本由供应商定义 |
hw_ver_str | 硬件版本字符串 | <1, 64> B | uint16 | 强制 | 值的含义和版本由供应商定义 |
rd_uid | 旋转设备唯一标识 | <16, 32> B | byte string | 强制 | 由随机生成的 128 位(或更长)八位字节字符串组成。在首次引入设备后,应防止该参数通过无线方式读取或写入,并在设备的使用寿命期间保持固定。使用工厂数据支持构建应用时,必须使用工厂数据分区中存储的实际长度来设置 CONFIG_CHIP_FACTORY_DATA_ROTATING_DEVICE_UID_MAX_LEN 。 |
dac_cert | 设备认证证书 | <1, 602> B | byte string | 强制 | 设备证明证书 (DAC) 和相应的私钥对于每个 Matter 设备都是唯一的。 DAC 用于设备认证过程以及对结构进行调试。 DAC 是符合 RFC 5280 中定义的 DER 编码 X.509v3 兼容证书。 |
dac_key | 设备认证密钥 | 68 B | byte string | 强制 | 与设备证明证书 (DAC) 关联的密钥。该密钥应该被加密,并且在生成并将其提供给工厂数据时应保证最大的安全性。 |
pai_cert | PAI 证书 | <1, 602> B | byte string | 强制 | Product Attestation Intermediate Certificate 产品认证机构证书,PAI 证书是 X.509 兼容的,并且以 DER(Distinguished Encoding Rules)格式编码,根据 RFC 5280 的定义。 |
spake2_it | Spake2+ 迭代次数 | 4 B | uint32 | 强制 | 在 SPAKE2+ 协议中,SPAKE2+ 迭代计数器(iteration counter)指的是在 SPAKE2+ 验证器生成过程中使用的 PBKDF2(密码基密钥导出函数,Password-Based Key Derivation Function 2)的迭代次数 |
spake2_salt | Spake2+ salt 值 | <32, 64> B | byte string | 强制 | SPAKE2+ 中的 salt 值是一个随机的数据片段,长度至少为 32 字节。它被用作单向函数的额外输入,该函数执行密码学操作。对于每个密码,都应随机生成一个新的盐值。 |
spake2_verifier | Spake2+ 验证器 | 97 B | byte string | 强制 | SPAKE2+ 验证器是使用 SPAKE2+ salt值、迭代计数器和密码生成的。 |
discriminator | BLE 配对识别器 | 2 B | uint16 | 强制 | discriminator 在 Matter 协议中是一个用于辅助设备发现和区分的关键字段,通过提供一个唯一的识别码,它帮助确保在设备配置和连接过程中的正确性和有效性 |
passcode | PASE 会话密码 | 4 B | uint32 | 可选 | 配对密码是一个27位的无符号整数,有效的配对密码值被限制在 0x0000001 到 0x5F5E0FE,有一些特定的数值不被视为有效的配对密码,这些包括所有的重复数字(如 11111111、22222222 等)、以及 12345678 和 87654321 这两个顺序性较强的数字序列。设备的组网(commissioning)过程中,配对密码用作拥有权的证明。当一个新设备被添加到网络中时,需要输入这个密码来验证操作者有权对设备进行配对和配置。 |
product_appearance | 产品外观 | 2 B | CBOR map | 可选 | 是用来描述产品可见外观的结构。这个字段以 CBOR(Concise Binary Object Representation,简洁二进制对象表示法)映射的形式提供,并且包含两个属性:finish(表面处理,1 字节)和 primary_color(主要颜色,1 字节)。 |
user | 用户数据 | variable, max 1024 B | CBOR map | 可选 | 用户数据(User Data)以 JSON 格式提供。这个参数是可选的,具体使用取决于设备制造商的用途。它作为一个 CBOR 映射类型从持久存储中提供,并应在用户应用程序中进行解析。需要注意的是,Matter 栈不使用这些用户数据。 |
connectedhomeip 目录下执行 python3 scripts/tools/nrfconnect/generate_nrfconnect_chip_factory_data.py -h,查看生成工厂数据需要提供的相关参数:
必需参数
--sn SN
: 设备的序列号,用于在 Matter 证书结构中识别序列号字段。序列号的最大长度为 20 字节。--vendor_id VENDOR_ID
: 提供供应商识别号(整数或十六进制)。--product_id PRODUCT_ID
: 提供产品识别号(整数或十六进制)。--vendor_name VENDOR_NAME
: 提供人类可读的供应商名称。--product_name PRODUCT_NAME
: 提供人类可读的产品名称。--date DATE
: 提供制造日期,使用 ISO 8601 格式,例如 YYYY-MM-DD。--hw_ver HW_VER
: 提供硬件版本(整数或十六进制格式)。--hw_ver_str HW_VER_STR
: 提供硬件版本的字符串表示形式。--spake2_it SPAKE2_IT
: 提供 Spake2+ 迭代次数(整数或十六进制)。--spake2_salt SPAKE2_SALT
: 提供 Spake2+ 盐值(Base64 字符串)。--discriminator DISCRIMINATOR
: 提供 BLE 配对鉴别码,一个与设置代码中同名字段相匹配的 12 位值。可选参数
--product_url PRODUCT_URL
: 提供指向产品特定网页的链接。--product_label PRODUCT_LABEL
: 提供人类可读的产品标签。--part_number PART_NUMBER
: 提供人类可读的产品编号。--chip_cert_path CHIP_CERT_PATH
: 生成 DAC 和 PAI 证书的路径。--dac_cert DAC_CERT
: 提供包含 DAC 证书的 .der 文件路径。--dac_key DAC_KEY
: 提供包含 DAC 密钥的 .der 文件路径。--generate_rd_uid
: 生成新的旋转设备唯一 ID。--pai_cert PAI_CERT
: 提供包含 PAI 证书的 .der 文件路径。--passcode PASSCODE
: 默认的 PASE 会话密码。--spake2_verifier SPAKE2_VERIFIER
: 提供 Spake2+ 验证器,而不是生成它。--enable_key ENABLE_KEY
: 启用键,用于触发制造商特定动作。--gen_cd
: 生成证书声明。--cd_type CD_TYPE
: 生成的认证声明类型:0 - 开发,1 - 临时,2 - 正式。--paa_cert PAA_CERT
: 提供用于生成 PAI 证书的产品认证机构证书路径。--paa_key PAA_KEY
: 提供用于生成 PAI 证书的产品认证机构密钥路径。--generate_onboarding
: 生成手册代码和 QR 码。--product_finish
: 提供产品的表面处理。--product_color
: 提供产品的颜色。
工厂数据配置
1、命令行:
例如,Python 脚本的最终调用可能类似于以下内容:
python3 scripts/tools/nrfconnect/generate_nrfconnect_chip_factory_data.py \
--sn "11223344556677889900" \
--vendor_id 65521 \
--product_id 32774 \
--vendor_name "Nordic Semiconductor ASA" \
--product_name "not-specified" \
--date "2022-02-02" \
--hw_ver 1 \
--hw_ver_str "prerelase" \
--dac_cert "credentials/development/attestation/Matter-Development-DAC-FFF1-8006-Cert.der" \
--dac_key "credentials/development/attestation/Matter-Development-DAC-FFF1-8006-Key.der" \
--pai_cert "credentials/development/attestation/Matter-Development-PAI-FFF1-noPID-Cert.der" \
--spake2_it 1000 \
--spake2_salt "U1BBS0UyUCBLZXkgU2FsdA==" \
--discriminator 0xF00 \
--generate_rd_uid \
--passcode 20202021 \
--product_finish "matte" \
--product_color "black" \
--out "build.json" \
--schema "scripts/tools/nrfconnect/nrfconnect_factory_data.schema"
--sn "11223344556677889900"
:设备的序列号。
--vendor_id 65521
:供应商标识号。
--product_id 32774
:产品标识号。
--vendor_name "Nordic Semiconductor ASA"
:供应商名称。
--product_name "not-specified"
:产品名称。
--date "2022-02-02"
:制造日期。
--hw_ver 1
:硬件版本。
--hw_ver_str "prerelase"
:硬件版本的字符串表示。
--dac_cert
和--dac_key
:DAC(Device Attestation Certificate)的证书和密钥文件的路径。
--pai_cert
:PAI(Product Attestation Identity)的证书文件路径。
--spake2_it 1000
:SPAKE2+ 迭代次数。
--spake2_salt "U1BBS0UyUCBLZXkgU2FsdA=="
:SPAKE2+ salt 的 base64 编码值。
--discriminator 0xF00
:BLE 配对鉴别码。
--generate_rd_uid
:生成旋转设备唯一标识符(RD UID)。
--passcode 20202021
:配对密码。
--product_finish "matte"
:产品的表面处理类型,这里是哑光(matte)。
--product_color "black"
:产品的颜色,这里是黑色。
--out "build.json"
:生成的工厂数据的输出路径。
--schema "scripts/tools/nrfconnect/nrfconnect_factory_data.schema"
:JSON 模式文件的路径,用于验证生成的工厂数据。
生成手动配对代码和 QR 码,首先需要安装 Matter 网络相关的 Python 依赖。通过以下命令来安装:
python -m pip install -r ./scripts/setup/requirements.nrfconnect.txt
在脚本的最终调用中添加 --generate_onboarding
参数,执行后在 --out 指定目录下生成:
- 最新工厂数据集的 JSON 文件。
- 包含生成的手动代码和QR码文本版本的测试文件
。
- PNG 格式的 QR 码图像。
使用目标 .json 文件生成 factory.hex、factory.bin 文件,移动至 matter libraries 根目录:
python3 scripts/tools/nrfconnect/nrfconnect_generate_partition.py -i build/zephyr/factory_data.json -o build/zephyr/factory_data --offset 0xfb000 --size 0x1000
python3 scripts/tools/nrfconnect/nrfconnect_generate_partition.py -i <path_to_JSON_file> -o <path_to_output> --offset <partition_address_in_memory> --size <partition_size>
- <path_to_JSON_file>:提供 .json 文件路径。
- <path_to_output>:提供输出路径。
- <partition_address_in_memory>:提供烧录到内部 flash 中的分区偏移地址。
- <partition_size>:提供分区大小。
使用 nrfjprog 工具烧录至芯片的工厂数据分区中:
nrfjprog --program factory_data.hex
使用 west 编译应用程序时,使能 CONFIG_CHIP_FACTORY_DATA、DCONFIG_CHIP_FACTORY_DATA_BUILD、DCONFIG_CHIP_FACTORY_DATA_MERGE_WITH_FIRMWARE,生成应用程序固件时同时生成工厂数据的 .hex、.bin 文件和 QR 码相关文件在 build/zephyr 路径(默认)中,同时合并固件,如:
west build -b nrf5340dk_nrf5340_cpuapp -- \
-DCONFIG_CHIP_FACTORY_DATA=y \
-DCONFIG_CHIP_FACTORY_DATA_BUILD=y \
-DCONFIG_CHIP_FACTORY_DATA_MERGE_WITH_FIRMWARE=y
添加禁用 DCONFIG_CHIP_FACTORY_DATA_USE_DEFAULT_CERTS=n,将自动生成新的CD、DAC、PAI 证书添加到工程数据中。
2、VS Code
新建 matter light_bulb 工程,使用默认工程配置文件 prj.conf ,默认打开 OTA、工厂数据配置生成等,nRF Kconfig GUI 下,Modules -> connectedhomeip -> ...更改相关配置。
参考:Configuring factory data for the nRF Connect examples
相关文章:
Matter - 配置工厂数据(2)
部分关键名词参数简介 PASE(Passcode-Authenticated Session Establishment): 基于密码认证的会话建立,用于在 Commissioning 的时候 Commissioner 与 Matter Deivce 之间建立安全信道,生成对称加密密钥用于 Commissioning 后续通信消息进行加、解密和完…...
版本控制背景知识
版本控制背景知识 本文是关于 Git 系列文章的导读,我们先介绍一下版本控制的背景知识。 什么是版本控制 版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。它将什么时候、什么人更改了文件的什么内容等信息如实记录下来…...
tensorflow报错: DNN library is no found
错误描述 如上图在执行程序的时候,会出现 DNN library is no found 的报错 解决办法 这个错误基本上说明你安装的 cudnn有问题,或者没有安装这个工具。 首先检测一下你是否安装了 cudnn 进入CUDA_HOME下,也就是进入你的cuda的驱动的安装目…...
DA14531-高级应用篇-用户如何开启OTA服务
文章目录 1. OTA相关文件2.OTA宏定义列表3.OTA主要函数接口4.OTA具体实施步骤5.总结1. OTA相关文件 1)app_suotar_task.c和app_suotar_task.h 2)app_suotar.c和app_suotar.h 2.OTA宏定义列表 宏定义注解CFG_PRF_SUOTAR用户开启SOTA功能BLE_SUOTA_RECEIVERSOTA功能服务CFG_S…...
国内镜像源配置方法(包括临时和永久方法)
国内镜像源: 阿里云 http://mirrors.aliyun.com/pypi/simple/中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/豆瓣 http://pypi.douban.com/simplePython官方 https://pypi.python.org/simple/v2ex http://pypi.v2ex.com/simple/中国科学院 http://pypi.mi…...
数据结构二叉树--堆(数据结构实现和堆排序的一种实现)
堆是一个数据结构 逻辑结构:完全二叉树(要求父节点大于孩子节点或者小于孩子节点) 存储结构:顺序存储 typedef int DataType; typedef struct Heap{DataType*data;int size;int capacity; }Heap;void InitHeap(Heap*pH) {asser…...
【Linux】 nohup命令使用
nohup命令 nohup是Linux和Unix系统中的一个命令,其作用是在终端退出时,让进程在后台继续运行。它的全称为“no hang up”,意为“不挂起”。nohup命令可以让你在退出终端或关闭SSH连接后继续运行命令。 nohup 命令,在默认情况下&…...
多维时序 | Matlab实现GRO-CNN-LSTM-Attention淘金算法优化卷积神经网络-长短期记忆网络结合注意力机制多变量时间序列预测
多维时序 | Matlab实现GRO-CNN-LSTM-Attention淘金算法优化卷积神经网络-长短期记忆网络结合注意力机制多变量时间序列预测 目录 多维时序 | Matlab实现GRO-CNN-LSTM-Attention淘金算法优化卷积神经网络-长短期记忆网络结合注意力机制多变量时间序列预测效果一览基本介绍程序设…...
SQL-DQL-基础查询
🎉欢迎您来到我的MySQL基础复习专栏 ☆* o(≧▽≦)o *☆哈喽~我是小小恶斯法克🍹 ✨博客主页:小小恶斯法克的博客 🎈该系列文章专栏:重拾MySQL 🍹文章作者技术和水平很有限,如果文中出现错误&am…...
Kubernetes (十三) 存储——持久卷-动静态分配
一. 简介 二. NFS持久化存储步骤(静态分配) 1. 集群外…...
order by之后的injection(sqllabs第四十六关)
order by相关注入知识 这一关的sql语句是利用的order by 根据输入的id不同数据排序不一样可以确定就是order by order by后面无法使用ubion注入(靠找不到) 可以利用后面的参数进行攻击 1)数字 没作用考虑布尔类型 rand和select ***都可以 …...
C++ 树与图的广度优先遍历 || 模版题 :图中点的层次
给定一个 n 个点 m 条边的有向图,图中可能存在重边和自环。 所有边的长度都是 1 ,点的编号为 1∼n 。 请你求出 1 号点到 n 号点的最短距离,如果从 1 号点无法走到 n 号点,输出 −1 。 输入格式 第一行包含两个整数 n 和 m 。 …...
k8s---pod控制器
pod控制器发的概念: 工作负载,workload用于管理pod的中间层,确保pod资源符合预期的状态。 预期状态: 1、副本数 2、容器重启策略 3、镜像拉取策略 pod出故障的出去等等 pod控制器的类型: 1、replicaset…...
2024.1.11力扣每日一题——构造有效字符串的最少插入数
2024.1.11 题目来源我的题解方法一 暴力模拟方法二 动态规划方法三 直接拼接方法四 计算组数 题目来源 力扣每日一题;题序:2645 我的题解 方法一 暴力模拟 直接模拟,根据题意可知 若是abc则不用插入,若是ab,ac,bc这需要 插入一…...
软件测试|如何使用Selenium处理隐藏元素
简介 我们在使用selenium进行web自动化测试时,有时候会遇到元素被隐藏,从而无法对元素进行操作,导致我们的用例报错的情况。当我们遇到元素被隐藏的情况时,需要先对隐藏的元素进行处理,才能继续进行我们的操作&#x…...
第三次面试总结 - 吉云集团 - 全栈开发
🧸欢迎来到dream_ready的博客,📜相信您对专栏 “本人真实面经” 很感兴趣o (ˉ▽ˉ;) 专栏 —— 本人真实面经,更多真实面试经验,中大厂面试总结等您挖掘 目录 总结(非详细) 面试内…...
buuctf-Misc 题目解答分解118-120
118.[INSHack2017]sanity 打开压缩包就是一个md 文件 typora 打开 发现flag INSA{Youre_sane_Good_for_you} 119.粽子的来历 解压压缩包 ,得到文件夹如下 用010 editor 打开 我是A.doc 这个有些可以 都改成FF 保存 然后再次打开 docx 文件就发现了屈原的诗 其他b…...
Hive数据定义(1)
hive数据定义是hive的基础知识,所包含的知识点有:数据仓库的创建、数据仓库的查询、数据仓库的修改、数据仓库的删除、表的创建、表的删除、内部表、外部表、分区表、桶表、表的修改、视图。本篇文章先介绍:数据仓库的创建、数据仓库的查询、…...
golang 反序列化出现json: cannot unmarshal string into Go value of type model.Phone
项目场景: 今天在项目公关的过程中,需要对interface{}类型进行转换为具体结构体 问题描述 很自然的用到了resultBytes, _ : json.Marshal(result),然后对resultBytes进行反序列化转换为对应的结构体err : json.Unmarshal(resultBytes, &…...
【闯关练习】—— 1400分(构造)
🌏博客主页:PH_modest的博客主页 🚩当前专栏:cf闯关练习 💌其他专栏: 🔴每日一题 🟡 C跬步积累 🟢 C语言跬步积累 🌈座右铭:广积粮,缓…...
Qt QProgressBar进度条控件
文章目录 1 属性和方法1.1 值1.2 方向1.3 外观1.4 信号和槽 2 实例2.1 布局2.2 代码实现 QProgressBar是进度条控件,进度条用来指示任务的完成情况 1 属性和方法 QProgressBar有很多属性,完整的可查看帮助文档。这里以QProgressBar为例,列出…...
【新】Unity Meta Quest MR 开发(一):Passthrough 透视配置
文章目录 📕教程说明📕配置透视的串流调试功能📕第一步:设置 OVRManager📕第二步:添加 OVRPassthroughLayer 脚本📕第三步:在场景中添加虚拟物体📕第四步:设置…...
快速排序【hoare版本】【挖坑法】【双指针法】(数据结构)
快速排序是Hoare于1962年提出的一种二叉树结构的交换排序方法,其基本思想为:任取待排序元素序列中 的某元素作为基准值,按照该排序码将待排序集合分割成两子序列,左子序列中所有元素均小于基准值,右子序列中所有元素均…...
class_5:在c++中一个类包含另一个类的对象叫做组合
#include <iostream> using namespace std;class Wheel{ public://成员数据string brand; //品牌int year; //年限//真正的成员函数void printWheelInfo(); //声明成员函数 };void Wheel::printWheelInfo() {cout<<"我的轮胎品牌是:"<…...
Linux - No space left on device
问题描述 No space left on device 原因分析 说明在服务器设备上的存储空间已经满了,不能再上传或者新建文件夹或者文件等。 解决方案 确认查看服务器系统的磁盘使用情况是否是真的已经没有剩余空间,复制下面命令在服务器上运行,然后发现如果…...
STC8H8K蓝牙智能巡线小车——2. 点亮左右转弯灯与危险报警灯
任务调用示例 RTX 51 TNY 可做多任务调度,API较为简单。 /* 接口API */// 创建任务 extern unsigned char os_create_task (unsigned char task_id); // 结束任务 extern unsigned char os_delete_task (unsigned char task_id);// 等待 extern unsig…...
【微信小程序独立开发 3】个人资料页面编写
这一节完成用户个人信息昵称的填写和获取 上节编写完成后的页面如下所示: 首先进行用户昵称编辑功能的编写,铲屎官昵称采用了navigator标签,当点击昵称时会自动跳转到昵称编辑页面。 首先输入昵称编辑界面的导航栏名称 {"usingCompone…...
Linux笔记:Linux中的文件系统权限
在Red Hat Enterprise Linux 或其他类似的Linux发行版中,全局umask设置通常在几个不同的系统级配置文件中定义。以下是一些可能设置umask的地方: (1)/etc/profile: 这是为系统上的所有用户设置全局环境变量和启动程序的地方。通…...
Android基于Matrix绘制PaintDrawable设置BitmapShader,以手指触点为中心显示原图的圆切图,Kotlin(4)
Android基于Matrix绘制PaintDrawable设置BitmapShader,以手指触点为中心显示原图的圆切图,Kotlin(4) 这篇 Android基于Matrix绘制PaintDrawable设置BitmapShader,以手指触点为中心显示原图像圆图,Kotlin&am…...
WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!
问题背景 当我们尝试通过SSH(Secure Shell)连接到远程服务器时,有时会遇到一个警告信息:“WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!”。这个消息表明SSH客户端检测到远程主机的身份(即其SSH密钥)…...
做网站公司青岛/app制作
其实用python的人应该都是不关注它性能的人,毕竟写python确实很愉快 PHP的核心维护者花了很多的心血却提高底层的解释器效率,为什么Python的维护者不去呢? 程序员都喜欢用数据说话,这里我用的python版本是Python 3.6.2(64位)&…...
网站开发php是什么意思/域名注册需要多少钱
一。CxImage类库简介 这只是翻译了CxImage开源项目主页上的部分简介及简单使用。 CxImage类库是一个优秀的图像操作类库。它可以快捷地存取、显示、转换各种图像。有的读者可能说,有那么多优秀的图形库,如OpenIL,FreeImage,PaintLib等等,它们…...
网站 运营 外包 每个月多少钱/网络营销是干嘛的
最近有朋友说,年底公司业务量增大,又拆分出来了很多微服务模块,对于微服务的管理、资源编排以及调度策略花费的精力成几何倍数的增长。看到微服务k8s的云原生架构貌似能解决这些问题,所以想问下。我把对他的回答整理了一下&#x…...
网站做下子压缩文件的链接/semir是什么意思
Association:处理单一的关联对象 处理单一属性的关联关系 property:注入给员工中哪个属性 select:发送哪一条sql语句 javaType:把sql语句查询出的结果集,封装给哪个类的对象(可以省略) column&a…...
ftp上传后没有网站/cdq百度指数
今天翻资料的时候,无意间发现了一个文件,是刚接触编程的时候用c写的一段程序,我称之为"图形打印机",想着把所有图形都打印出来,后来发现其实每种图形的代码都是一个思路,就不想做重复劳动了。今天…...
极路由wordpress/友链互换平台推荐
去年因《陈情令》成为新晋顶流的肖战,这半年多来真是热搜不断。近期又上了热搜了的他却令网友大吃一惊:前不久还是当红明星,怎么突然被全网黑了?而且连代言都一并被抵制?近日,关于“肖战粉丝举报Ao3”的事件…...