顶级临阵磨枪(软考高级系统架构-0)
前趋图(Precedence Graph) 前趋图(Precedence Graph)是一种用于描述任务、事件或进程之间先后依赖关系的有向无环图(Directed Acyclic Graph,DAG)。 通常记作: G = (P, E) 其中: P:顶点集合(Vertex Set),表示进程、任务或事件 E:边集合(Edge Set),表示前驱约束关系 边一般表示为: E = {(p_i, p_j)} 表示进程 p_i 必须先执行完成,进程 p_j 才能开始执行,即: p_i ➡️ p_j 由于前趋图只描述“先后依赖关系”,因此图中不能出现环路,所以它属于有向无环图(DAG)。 在实际分析中,本质上就是按照“节点大小关系 + 箭头方向”记录每一条边的依赖关系。 PV 操作(Semaphore Operations) PV 操作是操作系统中用于实现进程同步与互斥的一种经典机制,其核心是信号量(Semaphore)。 信号量通常记作: S_i 其中: S:Semaphore(信号量) 下标 i:表示第 i 个信号量 PV 操作包括两种基本原语: P 操作(Proberen) P 操作来源于荷兰语 “Proberen”,含义为“测试”或“申请资源”。 执行逻辑: 对信号量 S 减 1 若结果小于 0,则当前进程阻塞等待 若结果大于等于 0,则继续执行 因此: 执行前需要进行 P 操作 表示“申请资源”或“进入临界区” 常写作: P(S_i) V 操作(Verhogen) V 操作来源于荷兰语 “Verhogen”,含义为“增加”或“释放资源”。 ...
用 OBS + MediaMTX 搭一个本地视频流给视觉程序用
开发目标检测、姿态识别这类视觉程序的时候,有个很烦的问题:你需要一个可控的、可重复的视频输入源。 对着真实的摄像头调试?光线一会变一个样,人走来走去的,画面完全不可控。用视频文件做输入吧,有些程序又只认摄像头设备或者RTSP地址,不认本地文件路径。 所以我需要一个东西,既能把视频文件"伪装"成一个实时的视频流,让下游程序当摄像头一样去读。又能快速接入各种我想要做出的画面或者 usb 摄像头来测试视频效果。 当然如果有更好的方案欢迎大家留言(鬼知道有没有人看得到我的文章) 其实 OBS 自带的 Virtual Camera 也能解决一部分问题,但我没怎么用过。 这次搭的链路长这样: 1 视频文件 → OBS 推流 → MediaMTX → RTSP → ffplay / OpenCV / 目标检测程序 MediaMTX 是什么 之前没见过 MediaMTX,一开始还以为是某种虚拟摄像头设备。不是。 MediaMTX 是一个本地流媒体中转服务器,用 Go 写的,一个二进制文件就能跑。它能把推过来的流转成 RTSP、RTMP、HLS、WebRTC、SRT 等各种协议的输出。也就是说你往里面塞一路流,下游不管你用什么协议来读,它都能接。 GitHub 地址:bluenviron/mediamtx,macOS arm64 直接下载解压就能用。 启动 MediaMTX 1 2 cd /Volumes/extStorage/rayEx/Downloads/mediamtx_v1.18.2_darwin_arm64 ./mediamtx gemini 最早叫我下载完之后直接刷机打开,启动的时候会报一条 warning:是因为双击启动的目录对不上,他找不到 yml,进入路径执行就没问题了 1 WAR configuration file not found (looked in .../rtsp-simple-server.yml, .../mediamtx.yml), using an empty configuration 默认配置已经把常用端口都打开了: 1 2 3 4 5 RTSP :8554 RTMP :1935 HLS :8888 WebRTC :8889 SRT :8890 本地调试足够用了,不用改 yml。后面需要鉴权、固定路径、改端口的时候再配。 ...
让 Claude Code 直接画 draw.io 图
昨天看到一篇 drawio-mcp 的文章,说 draw.io 官方开源了 MCP,可以让 AI 直接生成可编辑架构图。 真是天赐的礼物 目前我画图基本都是用 processon这个平台,因为他在线编辑,所以等于一次编辑,导出修改查看。但是可惜的是这种肯定是要收费的,所以一直想找个替代版,另外还有一个问题是,让 LLM 输出 ASCII 字符画的话 很难进行拖动框框和一些 线路的修改。 看了一眼,mcp GitHub - jgraph/drawio-mcp · GitHub,我似乎没有太多的 在线浏览之类的需求,首先我之前没怎么用过 drawio,我只有一个大概的概念。我找了一下他有 desktop 版本的,于是我下载了他的 desktop。然后仓库里面其实有一个 skills:drawio-mcp/skill-cli/drawio/SKILL.md at main · jgraph/drawio-mcp · GitHub 你可以直接叫 codex 或者 claude code去安装这个 skills 这个 drawio skill,本质上就是一份 Agent 指令。它会让 Claude Code 直接生成原生 .drawio 文件,也就是 draw.io 自己用的 mxGraphModel XML。 这点很关键。它不是先写 Mermaid,然后丢给某个服务转换;也不是生成一张死图。它写出来的就是 draw.io 能继续编辑的源文件。 用法也很直接,在 Claude Code 里喊 /drawio 就行: 1 2 3 /drawio create a flowchart for user login /drawio sequence diagram for API auth /drawio ER diagram for blog posts and tags 如果不指定格式,它就生成 .drawio 文件,然后尝试打开 draw.io。 ...
用 RTK 给 Claude Code 省点 token
Token 已成为新型货币!!! 那么省钱是第一要素,这里介绍一个好玩的东西:RTK(Rust Token Killer) 说能省 60-90% 的 token。是不是吹,试试就知道 RTK 是什么 简单说,RTK 是一个 CLI 代理,用 Rust 写的单文件二进制,零依赖。它做的事情就是卡在 AI 编程助手和 shell 命令之间,把命令的输出压缩过滤之后再返回给 AI。 举个例子,你让 Claude Code 跑一个 git status,正常情况下它会拿到完整的输出——每个文件的路径、状态、分支信息,全都一股脑塞进去,可能得 2000 个 token。但经过 RTK 过滤之后,真正有用的信息被提取出来,没用的噪音被砍掉,可能就 200 个 token 搞定了。 这就好比你朋友问你"今天中午吃了啥",你不用把整个食堂菜单念一遍,直接说"黄焖鸡"就行了。 看一下这个原理图就明白了: 它支持四种压缩策略:智能过滤(去掉注释、空行这些噪音)、分组聚合(把同类文件按目录归拢)、截断保留(只留关键上下文)、去重折叠(重复的日志行显示为计数)。 怎么使用 安装方式挺多的,Homebrew、cargo、curl 脚本、直接下二进制都行: 1 2 3 4 5 6 7 8 # Homebrew brew install rtk # 或者一键脚本 curl -fsSL https://rtk-ai.dev/install.sh | bash # 或者 cargo(注意要用 git 源,crates.io 上有个同名的 Rust Type Kit 别装错了) cargo install --git https://github.com/rtk-ai/rtk 装完跑一下 rtk --version 确认没问题。 ...
简易运维指北
为什么不叫指南,因为不配。这篇文章就记几个我自己运维的时候老是去搜的命令,写下来方便以后翻。三个方向:Docker、网络、进程。 不会讲 Docker 基础用法,也不讲怎么装。假设你跟我一样,知道 docker 是啥,但具体运维的时候老忘命令。 Docker 这玩意占了多少资源? 服务器上跑了十几个容器,有时候磁盘或者内存告警了,第一反应就是"到底谁在吃资源"。 磁盘占用: 1 2 # 所有容器的磁盘占用,大的排前面 docker system df -v 这个命令会显示镜像、容器、build cache 各占了多少空间。-v 是 verbose,会逐个列出每个镜像/容器的大小。 如果发现某个镜像版本占了巨大空间,docker image prune 可以清理悬空镜像(就是那种 <none>:<none> 的)。加上 -a 会清掉所有没被容器引用的镜像,慎用。 1 2 3 4 5 6 7 8 # 只清悬空镜像 docker image prune # 清所有没在用的镜像(慎) docker image prune -a # 全家桶:清容器、网络、镜像、build cache docker system prune -a 内存和 CPU 实时占用: 1 docker stats 实时刷新的,类似 top。按 CPU 或内存排序,一眼就能看出谁是大户。Ctrl+C 退出。 ...