编程笔记

lifelong learning & practice makes perfect

背景

项目要求使用国密加密算法保障安全性,go和java需要通过接口互通,请求时使用sm4加密数据,sm2加密sm4秘钥,必将加密数据和加密后的sm4秘钥发送到第三方接口,
响应用相反的方式解密数据.
java 使用hutool里的工具函数实现,go使用”github.com/tjfoc/gmsm”实现.

阅读全文 »

channel

打开企业微信三方应用报错,提示如图,检查了服务商后台和后端代码里的各项配置都没错,域名也通过了
验证

channel

最后发现是前端oauth时跳转配置里的appid填错了

1
2
3
// 第三方应用需要在打开的网页里面携带用户的身份信息,第一步需要构造如下的链接来获取code:

https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect

参考文档:

部署Keycloak

使用dev模式启动,自定义配置可以放到conf下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
version: '3.9'
services:
keycloak:
image: quay.io/keycloak/keycloak:24.0.3
environment:
# KC_DB: mysql
# KC_DB_SCHEMA: keycloak
# KC_DB_USERNAME: kc
# KC_DB_PASSWORD: xxxxxx
# KC_DB_URL_HOST: xxx.xxx.xxx.xxx
KEYCLOAK_ADMIN: admin
KEYCLOAK_ADMIN_PASSWORD: admin
KC_PROXY: edge
KC_HOSTNAME_STRICT: false
KC_RUN_IN_CONTAINER: true
mem_limit: 500m
mem_reservation: 400m
command:
- start-dev
#- --optimized
container_name: keycloak
volumes:
- ./conf/:/opt/keycloak/conf
restart: always
ports:
- 8080:8080
阅读全文 »

使用YOLOV8训练自定义数据集,实现多目标检测

流程

  • 自定义标签
  • 数据标注
  • 训练
  • 验证

自定义标签

这里通过工具X-AnyLabeling进行标注,需要按照工具要求添加标签,这里我添加了2个标签,person和car如下

1
2
3
#新增 classes.txt,内容:
person
car
阅读全文 »

什么是 tailscale

Tailscale 是一个开源的 VPN 服务器,它允许用户使用自己的互联网连接来创建一个安全的、无备案的 VPN 网络。

direct vs relayed connection

直连和中继网络的区别,如果建立连接后不同终端间的网络延迟很大,可检查下是否使用了中继节点(relay),考虑使用direct connection优化延迟
经测试,relay模式延迟300ms左右情况下,改用direct模式延迟在10ms左右

1
2
3
4
5
6
7
# 查看当前节点,网络状态
tailscale status
# 如下是直连模式:direct connection
# xxxxx windows active; direct 27.xx.xxx.xxxx:xxxx, tx xxxxx rx 18832

# 使用ping 或 tailscale ping xxxx,查看延迟
ping xxx

relayed connection可能的优化:
在某个节点的防火墙放开UDP协议的41641端口

都没有公网ip的节点间延迟优化

偶尔使用还是ssh方便

ssh端口转发

上一级提到过,有公网ip的服务器可以通过开启UDP协议的41641端口建立direct connection,减少节点间的网络延迟,
在两台设备都没有公网固定ip的情况下,尝试在同样开启端口没有效果,延迟仍然很大(300~1000ms)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# 查看网络情况
tailscale netcheck (base)

Report:
* UDP: true
* IPv4: yes, 27.38.xxx.xxxx:xxxx
* IPv6: no, but OS has support
* MappingVariesByDestIP: true
* HairPinning: false
* PortMapping:
* Nearest DERP: San Francisco
* DERP latency:
- sfo: 175ms (San Francisco)
- lax: 175.9ms (Los Angeles)
- tok: 184.4ms (Tokyo)
- dfw: 192.6ms (Dallas)
- ord: 205.8ms (Chicago)
- tor: 218.1ms (Toronto)
- hkg: 220.6ms (Hong Kong)
- hnl: 222ms (Honolulu)
- nyc: 223.9ms (New York City)
- fra: 231.7ms (Frankfurt)
- sin: 238ms (Singapore)
- waw: 249.2ms (Warsaw)
- par: 254.3ms (Paris)
- ams: 257.3ms (Amsterdam)
- lhr: 265ms (London)
- mad: 271.1ms (Madrid)
- sao: 343ms (São Paulo)
- dbi: 350.9ms (Dubai)
- syd: 382.2ms (Sydney)
- jnb: 420.1ms (Johannesburg)
- nai: 464.5ms (Nairobi)
- blr: (Bangalore)
- sea: (Seattle)
- den: (Denver)
- mia: (Miami)

可以看到通过derp单程最短延迟在170ms+,roundtrip至少延迟300ms

此时如果有一个公网ip的节点,可以尝试将它作为中继节点,将其他节点连接到它上,这样其他节点的网络延迟就会变小
例如使用ssh的端口转发,a,b是没有固定公网ip的节点,c是公网ip的节点,c和a,c和b之间均可以建立direct connection,延迟很
小在10ms左右
通过ssh本地端口转发将本地请求通过c转发到b,这样a和b就可以直连了,参考这篇文章

自建DERP节点

参考

参考

3D

ComfyUI,自定义节点

3d插件,ComfyUI

安装

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
conda create --name comfy -y python=3.11
conda activate comfy
python -m pip install --upgrade pip
conda install -c "nvidia/label/cuda-12.1.0" cuda-toolkit

# 安装ComfyUI
git clone https://github.com/comfyanonymous/ComfyUI.git
cd ComfyUI
pip install -r requirements.txt

# ComfyUI-3D-Pack
# Ubuntu下必须要有g++,不然会报错
# ERROR: Failed building wheel for torchmcubes
# Running setup.py clean for torchmcubes
# Failed to build torchmcubes
# ERROR: Could not build wheels for torchmcubes, which is required to install pyproject.toml-based projects
cd custom_nodes/ComfyUI-3D-Pack/
pip install -r requirements.txt
pip install -r requirements_post.txt

# 其他缺失的包
pip install numba
pip install xformers # pip3 install -U xformers --index-url https://download.pytorch.org/whl/cu121
# pip install simple_knn # 必须使用 ComfyUI-3D-Pack中的包,直接用pip安装的包不匹配用不了

https://github.com/MrForExample/ComfyUI-3D-Pack/issues/16

workflow

https://openart.ai/workflows/oliviosarikas/stable-zero123-tutorial-workflow/UNZqaUXTQBvBv1LyLYsK

参见错误

pytorch3d安装

1
2
3
4
5
6
7
#安装g++
sudo apt-get install g++
#安装make,cmake
sudo apt-get install make
sudo apt-get install cmake
#ninja
sudo apt install ninja-build

试了多次仍然无法安装成功,改用其他人编译好的wheels,参考pytorch3d,Issue

其他

基础

Stable Diffusion(稳定扩散)严格说来它是一个由几个组件(模型)构成的系统,而非单独的一个模型

关键概念: 模型,Prompt(CLIP Text Encode,提示词),KSampler(采样器),VAE(变分自动编码器(Variational Autoencoder))

Prompt+Latent(潜变量空间) -> KSampler -> VAE -> Image

ComfyUI

安装

1
2
3
4
5
6
7
8
git clone https://github.com/comfyanonymous/ComfyUI.git

cd ComfyUI

pip install -r requirements.txt

# 启动
python main.py

此时目录下还没有模型,需要下载模型到指定目录: ComfyUI/models/checkpoints

插件

ComfyUI Manager

在 custom_nodes 目录下,下载插件代码

1
2
cd custom_nodes
git clone https://github.com/ltdrdata/ComfyUI-Manager.git

workspace-manger

workflow 管理/切换插件

参考

模型下载

sd模型

1
axel https://civitai.com/models/112902/dreamshaper-xl

VSCode从V1.86起对部分服务器不兼容(remote ssh),出现类似报错

1
You are connected to an OS version that is unsupported by Visual Studio Code

原因可参考文档,从报错提示看,
大部分人遇到的情况是GLIBC版本过低,而VSCode要求版本>=2.28,这是vscode的依赖nodejs要求的

1
2
3
4
5
6
# 基本要求 kernel >= 4.18, glibc >=2.28, libstdc++ >= 3.4.25, Python 2.6 or 2.7, tar
# 可以通过如下命令查看glibc版本
ldd --ersion

# 查看libstdc++ 3.4.25 是否可用
strings /usr/lib64/libstdc++.so.6 | grep GLIBCXX

可以升级服务器版本或者降低VSCode版本来解决

老版本

VSCode支持Portable Mode,可以同时安装多个版本,多个版本建

下载链接

参与链接

活动连接

限制

需要账号是RDS首购才能拿到奖励,不清楚的可进钉钉群问,需要购买7天的Mysql套餐(54元)

奖励

限首购用户】前2000名完成阶段二的:【任务1-产品开通】、【任务2-动手实验】、【任务3-动手实验】,可获得价值200元的冬日暖心礼盒:100元电话充值卡+定制办公礼(保温杯、笔记本、签字笔),任务1开通的产品7天到期自动会释放,鼓励根据学习内容多进行产品体验实践,若用户提前手动释放,则视为放弃领奖资格(入群填写信息,活动结束后统一发放)

任务

任务1-产品开通

购买54这款即可,不需要做为何更改

购买54这款即可,不需要做为何更改

任务2/3-动手实验

按照实验手册一步步操作即可,官方会提供资源,页面上的浏览器有点卡顿需要耐心操作