Skip to content

作者

novlan1

2026.07.08

openspec

2026-09-10

  1. Draft Proposal:起草变更提案

  2. Review & Align:审查与对齐,打磨规范和任务

  3. Implement Tasks:按任务清单实现代码和测试

  4. Archive & Update:归档并更新主规范

Vue3 [Boolean String] Props

2026-09-03

静态无冒号属性:

  1. [Boolean, String](Boolean 在前,开启布尔规则):只要写了属性(disabled / disabled=""),一律解析为true
  2. [String, Boolean](String 在前,关闭布尔规则):disabled=""得到空字符串"",写disabled也得到""

仅限不带:静态 attribute;:value动态绑定不受这套规则。

对照文档 4 种情况:

  • <MyComponent disabled /> + [Boolean, String]true
  • <MyComponent disabled="" /> + [Boolean, String]true
  • <MyComponent disabled /> + [String, Boolean]""
  • <MyComponent disabled="" /> + [String, Boolean]""

Stackblitz 中体验链接

Vue 官方文档

服务器启动 rabbitmq

2026-09-03

逐行解析这条 RabbitMQ 的 docker run 命令

bash
docker run -d --name rabbitmq \
  -p 127.0.0.1:5672:5672 \
  -p 127.0.0.1:15672:15672 \
  --restart unless-stopped \
  -e RABBITMQ_DEFAULT_USER=blog \
  -e RABBITMQ_DEFAULT_PASS=xxx \
  rabbitmq:3.13-alpine

\ 只是换行续行符,作用是把一条长命令拆成多行方便阅读,没有实际功能。


  1. docker run 核心命令:创建并启动一个新的docker容器。

  2. -d 全称 --detach后台守护进程运行。 容器启动后放到后台,不会占用当前ssh终端窗口;不加 -d 会直接把rabbitmq日志输出在前台,关掉ssh窗口容器就停止。

  3. --name rabbitmq 给这个容器起名字叫 rabbitmq。 后续操作可以直接用名字,不用容器ID:docker stop rabbitmq / docker logs rabbitmq

  4. -p 127.0.0.1:5672:5672 端口映射,格式:宿主机地址:宿主机端口:容器内端口

  • 容器内部rabbitmqAMQP协议端口是5672(业务程序收发消息用)
  • 127.0.0.1 = 宿主机回环地址 ✅ 含义:只允许这台服务器本机内部程序访问5672端口,外网其他机器完全连不上(正好是你想要的,禁止公网访问)
  1. -p 127.0.0.1:15672:15672 同样端口映射:
  • 15672 是 RabbitMQ Web管理后台端口
  • 同样绑定127.0.0.1只能在这台服务器内部浏览器/curl访问web后台,外部无法访问

端口映射规则小结:-p 宿主机IP:宿主机端口:容器端口 如果写 -p 5672:5672(不写127.0.0.1),会绑定到服务器所有网卡,公网就能访问。

  1. --restart unless-stopped 容器重启策略:
  • 只要不是手动执行docker stop把容器关掉,其他情况自动重启
    • 服务器重启 → 容器自动启动
    • rabbitmq进程崩溃异常退出 → 自动重启
  • 对比:
    • always:就算手动stop,宿主机重启也会起来
    • unless-stopped:最适合生产,推荐
  1. -e RABBITMQ_DEFAULT_USER=blog-e = --env 设置环境变量。 RabbitMQ启动时自动创建默认管理员账号,用户名:blog

镜像自带的环境变量,容器第一次启动生效,容器建好之后再改这个环境变量没用。

  1. -e RABBITMQ_DEFAULT_PASS=xxx 配套环境变量,设置上面blog账号的密码。

  2. rabbitmq:3.13-alpine 指定使用的镜像:

  • rabbitmq:镜像名
  • 3.13:rabbitmq版本号
  • alpine:基于alpine极简Linux,镜像体积小

⚠️注意:rabbitmq:3.13-alpine镜像默认不带web管理插件,容器启动成功后,你需要手动进容器执行:

bash
docker exec -it rabbitmq sh
rabbitmq-plugins enable rabbitmq_management

启用web后台,否则15672网页打不开。

Redis 设置密码和连接

2026-09-03

  1. 设置密码
  • 临时命令(重启失效):CONFIG SET requirepass "密码"CONFIG REWRITE写入配置持久化
  • 永久配置:编辑 /etc/redis.conf,取消注释 requirepass 你的密码,重启redis生效
  1. 客户端连接
  • redis-cli:每次执行都新建独立连接;进入交互终端可连续执行多条Redis命令
  • redis-cli -a mypassword:连接时直接带密码(长参数--auth;⚠️密码会暴露在进程列表,生产不推荐)
  • 安全写法:redis-cli 连上后,再执行 AUTH mypassword 认证
  1. 后台启动redis-server --daemonize yes:以守护进程后台启动,Mac、Linux都支持,Windows不支持;仅本次启动生效,不修改配置文件。

优雅停止:redis-cli shutdown

  1. 补充:Linux生产一般用systemctl start redis托管;Mac brew可brew services start redis

容器镜像与 docker compose 知识点

2026-09-02

通用叫法对照表

简称全称对应设备
amd64x86_64Intel/AMD CPU(云服务器、Intel Mac、台式机)
arm64aarch64Apple M 系列 Mac、树莓派、ARM 轻量服务器

怎么查看自己本机是什么架构

Linux 服务器(SSH 登录执行)

bash
uname -m
  • 输出 x86_64 → amd64 架构
  • 输出 aarch64 → arm64 架构

登录腾讯云容器镜像服务 Docker Registry

bash
docker login ccr.ccs.tencentyun.com --username=100002611076

从 Registry 拉取镜像

bash
docker pull ccr.ccs.tencentyun.com/ygw-agent/github-monitor:[tag]

其中 [tag] 请根据您需要拉取镜像的具体版本镜像替换,如 latest。更多命令说明,请参看官方文档:docker pull

向 Registry 中推送镜像

bash
docker tag [imageId] ccr.ccs.tencentyun.com/ygw-agent/github-monitor:[tag]
bash
docker push ccr.ccs.tencentyun.com/ygw-agent/github-monitor:[tag]

其中 [imageId] 请替换为您所要推送的实际镜像ID,或使用本地镜像的完整路径,[tag] 请替换为您期待的镜像版本。更多命令说明,请参看官方文档:docker tag, docker push

制品类型(重点解释)

OCI-Image-v1

1) OCI 是什么

OCI = Open Container Initiative(开放容器规范) 是 Docker、containerd、K8s 共同遵守的国际容器标准,由 Linux 基金会维护。

2) OCI-Image-v1 含义

  • OCI-Image:代表这是符合 OCI 标准的容器镜像,不是 Docker 私有的老式格式;
  • v1:OCI 镜像规范第 1 版本。

通俗理解

  1. 早期只有 Docker 自己的镜像格式,兼容性差;
  2. 后来行业统一制定 OCI 标准,现在所有云厂商(腾讯 TCR、阿里云 ACR、Harbor、Docker Hub)存储的镜像默认都是 OCI 格式;
  3. OCI-Image-v1 = 标准通用容器镜像,Docker、K8s、nerdctl、containerd 全都能完美解析运行,没有任何兼容性问题。

补充两种常见制品类型对照

  • OCI-Image-v1:普通容器镜像(你当前前端 Nginx 镜像)
  • OCI-Index:多架构镜像(同时包含 amd64+arm64,一个 Tag 自动适配不同 CPU)

docker compose up 同时存在 buildimage 两个字段时的规则

  1. 优先执行本地构建镜像
  2. 构建完成后,会给新构建出来的本地镜像打上 image 定义的标签
  3. 最后再用这个标签启动容器

举个直观例子

yaml
services:
  backend:
    image: ccr.ccs.tencentyun.com/xxx/backend:1.0.0
    build: ./backend

执行 docker compose up -d 完整流程:

  1. 进入 ./backend 目录,用 Dockerfile 本地 build 打包
  2. 自动给刚打包好的镜像打上 tag:ccr.ccs.tencentyun.com/xxx/backend:1.0.0
  3. 基于本地这个新镜像启动容器

关键坑点(对你现在场景非常重要)

  1. 它不会去远程仓库 pull 镜像 哪怕远程 TCR 仓库已经存在 1.0.0 版本,compose 也会无视远程,自己在服务器本地重新构建一版,覆盖本地同名镜像标签。
  2. 版本完全失控 服务器本地构建的镜像 ≠ 你本地推送到 TCR 的镜像,代码、产物不一致,极易出现线上 BUG。

两条命令行为差异

  1. docker compose up -d 同时有 build + image → 本地构建,不走远程拉取

  2. docker compose pull backend 只执行拉取操作时,只会读取 image 地址去拉远程镜像,不会触发 build 构建

最终给你的最佳实践

1) 生产部部署文件(服务器用)

彻底删掉 build: 整行,只保留 image,保证永远远程 TCR 已发布镜像

yaml
backend:
  image: ${TCR_REGISTRY}/${TCR_NAMESPACE}/github-monitor-backend:${BACKEND_TAG}
  # build: ./backend 删掉

2) 本地开发调试文件(可以分开)

新建 docker-compose.dev.yml,本地开发用,只在自己电脑运行:

yaml
# docker-compose.dev.yml 本地调试专用
backend:
  build: ./backend
  # image 可以注释掉

启动命令:

bash
docker compose -f docker-compose.dev.yml up --build

一句话总结:

  • 线上部署只留 image,删掉 build;本地调试单独配置带 build 的 compose 文件。

最大似然估计(MLE)流程

2026-09-02

  1. 先人为选定模型服从的概率分布(伯努利 / 高斯 / 多项式 / 混合高斯等);

  2. 写出该分布的概率表达式,里面带待求参数 w,\mu,\sigma,\alpha 等;

  3. 利用已知训练样本,构造「样本联合发生概率=似然函数」;

  4. 求一组参数,让这批真实训练数据出现的概率最大,这组参数就是最优解。

怎么看docker是否已经登录

2026-09-02

方式:查看凭据配置文件。docker 登录信息保存在配置文件,Linux/macOS:

cat ~/.docker/config.json
  • 文件内有 auth 字段,说明已经登录过对应仓库;
  • 如果只有 credsStore(凭据管理器),代表密码交给系统保管,不能直接看到明文 token,但说明执行过 login

Bash 必知

2026-09-02

看多少核

nproc 全称:number of processors 作用:输出当前系统可用的逻辑 CPU 核心数(云主机里直接对应你买的 2 核配额)

nproc
# 正常你这台机器会直接输出 2

查 IP

内网 IP(云服务器内网地址,主机内部网卡地址)

# 最简简写(推荐,主流系统都自带)
ip a

# 或者直接干净输出所有内网ip
hostname -I

云厂商控制台显示的内网 IP,就和这里的 inet 后面地址对上

✅ 2. 公网 IP(对外的 IP,别人访问你服务器用的,重点!)

需要服务器能联网:

curl ifconfig.me
# 备选(ifconfig.me访问不通时用)
curl shturl.cc/yb

这个结果就是云厂商分配给你这台机器的公网 IP,和控制台里的公网 IP 核对

新服务器

2026-09-02

  1. 安装 git、nginx、docker
  2. git 公钥填到网站上
  3. 部署 koa-blog-end/packages/bump-go,部署方式 cd deploy; ./deploy.sh

image-manager 服务部署

  1. 安装 node、nvm、pnpm、pm2
  2. 迁移 mysql 数据
  3. 部署 koa-blog-end/packages/server,部署方式 pnpm i; cd deploy; ./deploy.sh --restart

前端部署

  1. 本地 cd packages/web; npm run build; npm run deploy

login-notify 服务部署

  1. cd koa-blog-end/packages/server; pm2 start ecosystem.config.js --only login-notify

pm2 startup 和 pm2 save

# 第一步:先把你的项目 pm2 start 启动好
pm2 start app.js --name api

# 第二步:pm2 startup(生成开机服务,会输出sudo命令,复制执行)
pm2 startup
# 复制输出的sudo xxx那一条执行!

# 第三步:保存当前运行的项目列表
pm2 save

后续如果你新增 / 删除 / 重启了项目,一定要重新执行 pm2 save,不然重启服务器不会更新

git 安装

生成公钥

bash
ssh-keygen -t ed25519 -C "xxx@qq.com"

测试连通

bash
ssh -T git@github.com

docker 安装

  1. 安装yum工具
bash
yum install -y yum-utils
  1. 添加docker官方yum源(国内用阿里云镜像源)
bash
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
  1. 安装docker社区版(包含 docker、docker‑cli、buildx)
bash
yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin
  1. 启动docker并开机自启
bash
systemctl enable --now docker
  1. 验证是否装好
bash
docker -v

Step Tree Step Data

2026-09-02

[decryptWxData result] {
  stepInfoList: [
    { timestamp: 1785254400, step: 12356 },
    { timestamp: 1785340800, step: 13079 },
    { timestamp: 1785427200, step: 11336 },
    { timestamp: 1785513600, step: 16482 },
    { timestamp: 1785600000, step: 7795 },
    { timestamp: 1785686400, step: 10934 },
    { timestamp: 1785772800, step: 19662 },
    { timestamp: 1785859200, step: 9891 },
    { timestamp: 1785945600, step: 12665 },
    { timestamp: 1786032000, step: 19513 },
    { timestamp: 1786118400, step: 7008 },
    { timestamp: 1786204800, step: 13494 },
    { timestamp: 1786291200, step: 18749 },
    { timestamp: 1786377600, step: 20896 },
    { timestamp: 1786464000, step: 11225 },
    { timestamp: 1786550400, step: 12888 },
    { timestamp: 1786636800, step: 21479 },
    { timestamp: 1786723200, step: 5965 },
    { timestamp: 1786809600, step: 20256 },
    { timestamp: 1786896000, step: 16116 },
    { timestamp: 1786982400, step: 12201 },
    { timestamp: 1787068800, step: 19889 },
    { timestamp: 1787155200, step: 9794 },
    { timestamp: 1787241600, step: 12163 },
    { timestamp: 1787328000, step: 10518 },
    { timestamp: 1787414400, step: 18630 },
    { timestamp: 1787500800, step: 7023 },
    { timestamp: 1787587200, step: 7365 },
    { timestamp: 1787673600, step: 6854 },
    { timestamp: 1787760000, step: 5712 },
    { timestamp: 1787846400, step: 4257 }
  ],
  watermark: { timestamp: 1787900213, appid: 'wx4825739f58878bdc' }
}

Step Tree Release V1.0

2026-09-02

新增玩法:

1、核心养成循环:微信运动步数兑换虚拟粮食,喂养专属小树,见证 5 个成长阶段(种子→嫩芽→小树→繁茂→果树),每升一级解锁全新造型 2、18 枚勋章成就系统:覆盖步数累计、连续打卡、成长里程碑等维度,作为长期荣誉收集 3、7 种树种图鉴:叶色、干色、果形、冠形自由组合,多样化收集乐趣 4、阳光与连签:每日连签产出阳光倍率,用于解锁新树种 5、天气加成机制:清晨 /白天 / 黄昏 / 夜晚 4 时段喂食效果不同,引导健康作息 6、隐私保护:首次启动独立展示《隐私政策》,授权后才同步微信运动步数

Copy Selection as Markdown 快捷键

2026-09-02

在浏览器地址栏直接打开:

  • chrome://extensions/shortcuts

修改扩展 Copy Selection as Markdown 的快捷键

  • Mac:Command + Shift + E

HDMI、DP、USB-A

2026-08-24

VGA、DVI、HDMI(High Definition Multimedia Interface,高清多媒体接口)、 DP(DisplayPort,显示端口),显示器不同的接口,越来越好

主题与注释

2026-07-14

AI写代码多了后,看注释更重要了,AI每次都会变更注释。

主题切换

2026-07-14

command K,然后 command T,快速切换主题。这个“Atom One Dark Pro UI”还可以,注释看的清楚,也柔和点。

Publishing Director

2026-07-10

  • Publishing Director:发行总监(对外市场、渠道、投放)
  • Product Director:产品总监(游戏内容、玩法迭代)
  • Operations Director:运营总监(服务器、活动、玩家运维)

微信小游戏的游戏分类

2026-07-08

  1. 休闲类
  • 消除
  • 塔防
  • 益智
  • 教育
  • 养成
  • 模拟经营
  • 答题解谜
  1. 动作类
  • 跑酷
  • 体育
  • 音乐舞蹈
  • 射击
  • 动作角色扮演
  1. 竞技类
  • 竞速
  • 桌游
  • 对战
  • 弹射
  1. 棋牌类
  • 棋类
  • 牌类
  1. 角色类
  • 卡牌
  • 回合
  • 策略