WORKS / 软件与实践

把想法,做成眼前的作品。

从 AI 工作台、文件管理,到设备交互、游戏和短片。这里展示作品实际使用的样子,也留下它们的设计与实现,方便继续了解或一起讨论。

聊聊合作

01 / 从界面认识作品

产品、工具与游戏

AI 工作台 /01

Weft

读到一段,就从这里提问。

在同一工作区管理订阅、阅读和收藏。配置翻译或 AI 对话服务后,可选中文章段落继续提问;阅读器、工具包和视频画布运行在同一模块化运行时上。

开源 · 开发预览

Weft RSS 阅读器,左侧订阅源,中间文章列表,右侧已打开的 GitHub Blog 文章
RSS 阅读器 · 订阅、文章阅读与收藏

RSS 阅读器 · 订阅、文章阅读与收藏

Weft RSS 阅读器,左侧订阅源,中间文章列表,右侧已打开的 GitHub Blog 文章

小屏可横向滑动查看细节 · Esc 关闭

更多界面:AI 阅读与视频画布
GitHub 当前版本附带的 Weft 阅读器截图:文章正文与 AI 翻译、对话并排展示
项目截图 · 文章选段、翻译与 AI 对话

项目截图 · 文章选段、翻译与 AI 对话

GitHub 当前版本附带的 Weft 阅读器截图:文章正文与 AI 翻译、对话并排展示

小屏可横向滑动查看细节 · Esc 关闭

Weft 视频画布开发界面,以分镜节点组织待生成的画面与视频
项目截图 · 视频画布的分镜节点与生成参数

项目截图 · 视频画布的分镜节点与生成参数

Weft 视频画布开发界面,以分镜节点组织待生成的画面与视频

小屏可横向滑动查看细节 · Esc 关闭

AI × 界面设计 /02

What to Pick Today

先比较候选界面,再决定是否采用。

这是一个界面比较实验:接入模型 API 后生成候选方案,可并排查看、试用,再决定是否应用到当前页面,也可回看旧版本。内置候选可用于体验流程。

开源 · 浏览器应用

What to Pick Today 并排比较两个番茄钟界面,其中一个标记为当前采用方案
方案比较 · 同一计时器的两个候选界面

方案比较 · 同一计时器的两个候选界面

What to Pick Today 并排比较两个番茄钟界面,其中一个标记为当前采用方案

小屏可横向滑动查看细节 · Esc 关闭

文件与存储 /03

RestoreWeave

按内容整理文件,需要时恢复原路径。

将不同来源的文件加入内容库,用标签、备注和搜索查找。相同内容只保存一份,各自的原始路径仍可恢复;恢复时会再次校验文件。

开源 · 本地文件管理

RestoreWeave 的真实文件库,按项目文档标签查看三份已导入的公开 README,右侧显示选中文件的校验状态与原文预览
内容库 · 项目文档、标签与原文预览

内容库 · 项目文档、标签与原文预览

RestoreWeave 的真实文件库,按项目文档标签查看三份已导入的公开 README,右侧显示选中文件的校验状态与原文预览

小屏可横向滑动查看细节 · Esc 关闭

硬件管理 × 跨端系统 /04

ManagementCloud

从移动端发送唤醒指令。

设备管理端维护设备与分组,移动端通过 Wake-on-LAN(WOL)发送电脑唤醒指令。配图展示管理界面和实拍的唤醒过程。

个人项目 · Go / Vue / Flutter

Vue 管理端界面,展示设备管理、分组、分享和定时任务入口;设备列表为空
管理端界面 · 设备与分组入口

管理端界面 · 设备与分组入口

Vue 管理端界面,展示设备管理、分组、分享和定时任务入口;设备列表为空

小屏可横向滑动查看细节 · Esc 关闭

  1. 01 移动端操作

    原始实拍关键帧:平板客户端中的 WOL 启动电脑卡片与操作按钮
    WOL 唤醒入口

    WOL 唤醒入口

    原始实拍关键帧:平板客户端中的 WOL 启动电脑卡片与操作按钮

    小屏可横向滑动查看细节 · Esc 关闭

  2. 02 电脑亮屏

    同次原始实拍的后续关键帧:电脑显示器亮起,出现 Windows 锁屏
    Windows 锁屏亮起

    Windows 锁屏亮起

    同次原始实拍的后续关键帧:电脑显示器亮起,出现 Windows 锁屏

    小屏可横向滑动查看细节 · Esc 关闭

工程做法:设备怎样接进同一套系统

这是我为自己使用而写的设备平台。除了界面与唤醒操作,也做了连接管理、数据归属和定时任务这些基础工作。

设备连接
Go 连接层支持短连接、有界连接池,以及按设备 ID 查找的出站长连接。读写设置超时,连接注册表处理并发访问。
数据归属
业务查询在数据层带上归属条件,让设备和任务按所属用户筛选。
任务与恢复
定时任务写入持久存储,服务重启后恢复,并留下审计记录。
部署方式
用 go:embed 把前端资源放进 Go 程序,打包成一个可部署的二进制文件。

合作游戏 /05

ECHO · 回声庭园

三秒前的行动,成为新的踏点。

合作游戏项目:角色三秒前的行动会以 Echo 重现,玩家可借它继续前进。庭园、关卡和世界树将这一玩法融入环境叙事。

合作项目 · Godot

ECHO 回声庭园的世界树内境:粉紫色树冠、浅蓝树干与发光树根,树下水面映着星点
合作项目 · 世界树内境实机画面

合作项目 · 世界树内境实机画面

ECHO 回声庭园的世界树内境:粉紫色树冠、浅蓝树干与发光树根,树下水面映着星点

小屏可横向滑动查看细节 · Esc 关闭

更多场景与回声玩法
合作游戏的庭园实机画面:夜色浮岛、中央树、发光桥梁与关卡入口
合作项目 · 庭园实机画面

合作项目 · 庭园实机画面

合作游戏的庭园实机画面:夜色浮岛、中央树、发光桥梁与关卡入口

小屏可横向滑动查看细节 · Esc 关闭

合作游戏的回声回放关卡:角色站在用 Q 固定的空中 Echo 上,准备借力起跳
合作项目 · 固定 Echo,借力起跳

合作项目 · 固定 Echo,借力起跳

合作游戏的回声回放关卡:角色站在用 Q 固定的空中 Echo 上,准备借力起跳

小屏可横向滑动查看细节 · Esc 关闭

02 / 屏幕之外的实践

从相机里的画面, 到现实里的交互。

我也尝试把视觉识别接到设备控制里。这里展示手势采集样本,以及智慧农业赛项中的设备联动场景。

MediaPipe / 21 LANDMARKS

原始手势采集样本:张开手掌,叠加真实检测的手部关键点张开手掌
原始手势采集样本:手掌向下,叠加真实检测的手部关键点手掌向下
原始手势采集样本:拇指向上,叠加真实检测的手部关键点拇指向上
图像采集关键点手势分类控制指令

原始采集样本 · MediaPipe 关键点重新检测,可切换原图

让手势成为一种输入。

用 OpenCV 与 MediaPipe 读取手部关键点,训练手势分类模型,并探索与 Dobot 机械臂控制的连接。

OpenCV / MediaPipe / Python
智慧农业仓储赛项设备演示全景:双机械臂、传送带、上方相机与物料识别程序窗口同屏展示
赛项演示画面 · 相机采集 → 物料识别 → 机械臂分拣

赛项演示画面 · 相机采集 → 物料识别 → 机械臂分拣

智慧农业仓储赛项设备演示全景:双机械臂、传送带、上方相机与物料识别程序窗口同屏展示

小屏可横向滑动查看细节 · Esc 关闭

让识别进入设备流程。

围绕智慧农业仓储,接触相机采集、图像分类、称重和设备通信。从画面里的目标,到机械臂的抓取与分拣,把识别结果接进设备流程。

Python / PyTorch / Dobot / Serial / TCP
早期探索个人工具与基础练习

连接校园网、读写文件、控制进程——这些小工具和实验,记录了我从基础代码走到系统开发的过程。

个人工具 · 两版实现

校园网认证

为自己连接校园网做过两版工具:先用 Go 写命令行,读取配置、解析登录页面并定时重登;再用 Flutter 与 Rust FFI 做客户端,读取重定向参数,复现 quickauth 登录流程。沿着同一个问题,从网络请求走到跨端界面。

Go / Flutter / Rust / FFI

work_dir · 跨语言练习

同一个二维码,多种实现

把二维码收发这个小课题,分别用 wxWidgets、Flutter、Rust + FLTK 和 C++ FFI 做一版;还试过 wxWidgets 进程管理小工具和配置驱动的转换 CLI。同样的功能换一套工具再做,接触不同的界面组件、语言边界与构建方式。

wxWidgets / Flutter / Rust + FLTK / C++ FFI / xmake / CLI

基础练习

C++ 基础与构建

写过大整数类,练习构造函数、运算符重载和模板入门;也整理 gcc/g++ 编译链接与 rpath 参数,再用 xmake、CMake 配置构建。

C++ / gcc / g++ / rpath / xmake / CMake

多次迭代

Go 后端骨架

围绕 JWT、Casbin 与 RBAC,反复整理管理端骨架,也接入过 WebSocket、独立 TCP 服务和 Swagger。ManagementCloud 的 Go 后端延续了这条实践线。

Go / JWT / Casbin / RBAC / WebSocket / TCP / Swagger

验证与加密练习

VerificationKeyService

历史练习项目,尝试实现 TOTP、RSA 签名、AES 加密、密钥管理和过期策略,用来熟悉相关概念与代码组织。

Go / Gin / TOTP / RSA / AES

个人练习

Excel 表格自动化

尝试把 Excel 解析、二维码生成和表单回填串起来,并做了桌面 GUI 与 HTTP 两种入口。需求边做边变,这段主要练习拆分接口和流程。

Go / fasthttp / Excel / QR code / GUI / HTTP

环境探索与排错

Android / Linux 环境探索

在 Termux、KernelSU 与 Zygisk 环境里尝试权限和模块集成,也折腾过 rclone 挂载与脚本。内容以环境探索、联调和排错为主。

Termux / KernelSU / Zygisk / rclone / scripts

基础练习

C++ 网络与并发

从 TCP 客户端和服务端开始,尝试多线程服务、future/async 异步任务,再用锁和条件变量协调线程。把书里的连接、等待与同步写成能运行的小程序,理解它们怎样配合。

C++ / Socket / Thread / Future / Mutex

个人底层探索

PVZ 内存修改器

围绕《植物大战僵尸》做内存实验:用 C++、x86 汇编和 Windows API 还原游戏函数调用,向游戏进程写入并执行代码,修改阳光数值。从界面上的一个数字,往下追到进程、内存与函数。

C++ / x86 ASM / Windows API
更多关于我

03 / 视觉与表达

换一种方式, 表达想法。

AI 辅助叙事短片 2:07

兴趣被看见,表达重新开始。

短片讲一个人重新找到兴趣、表达和学习动力的过程。画面从冷蓝色的房间转向电脑屏幕的暖光,随人物情绪变化。

播放器无法显示时,可在 B 站观看。

在 B 站打开原片

制作分工由我借助 AI 完成脚本、分镜、生成画面、声音与剪辑整合;真人出镜和拍摄素材来自团队成员。

04 / 公开项目 / 10

项目与源码

  1. 01已开源 · 开发预览Weft把阅读、AI 对话和工具接进同一套工作台:核心处理模型接入和能力调用,其余功能以可替换模块扩展。Rust · WASM · Flutter · crates.io阅读源码
    设计与实现

    Weft 把模型协议和能力调度放在 Core,聊天、RSS 阅读器、AI 视频画布与多 Agent 编排则由可替换的 package 提供。packages/index.toml 统一记录 capability 与 package 的对应关系;package 分为 provider、foundation、product,运行方式包括 wasm、native、embedded 和 service。调用默认拒绝未授权操作,升级时检查权限增量,并在调用点门控 11 类权限。每个 package 的 Ed25519 签名覆盖名称、版本、SHA-512 和来源;工具失败时,Closed/Open/HalfOpen 熔断器控制是否继续调用。工具路由在本机 CPU 上用 ONNX INT8 计算余弦 top-k,不调用模型 token。RSS 阅读器先用 TF-IDF 画像筛出候选,再让 LLM 排序。weft-core 已发布到 crates.io,项目提供 Windows 安装包;macOS 和 Linux 尚未完成发行验证。

  2. 02已开源 · 实验项目codejev编辑代码前,先列出真实的 AST 候选。模型只返回候选 ID,改动组装与验证由宿主完成。Python · AST 候选枚举 · 选择器阅读源码
    设计与实现

    模型直接生成代码时,输出可能能运行、diff 也看似正常,错误仍要到执行时才会显现。CodeJev 改由宿主从 AST 枚举代码候选并分配 ID,模型只返回某个 ID 或 NONE;随后宿主按确定性步骤组装并验证。在这组只改变输出形式、使用同一模型的对照中,候选选择 5/5 成功,自由生成 0/5。另一次选择器对照中,350M 模型总是返回同一个 ID,本地 1.5B 模型为 2–3/4、Jev 为 4/4、DeepSeek 为 5/5。结果仅描述这些小样本实验。

  3. 03已开源 · 研究原型Lattice探索由个人节点保存消息的聊天方式:中心只提供地址/IP 信息,通信、存储与同步由分散节点承担。RUST · PERSONAL STORE · DAG · OLM阅读源码
    设计与实现

    把身份、地址发现和消息历史分开:信息交换服务只提供账号对应的地址/IP,用户可以选择真实 IP 或中继 IP;每个人运行或信任一个 Store,保存、验证并转发自己的消息。当前原型以 WebSocket + Protobuf 连接节点,用哈希 DAG 容纳并发与乱序;缺少父消息时先挂起,父消息到达后再提升。实现按 DAG 深度、本地接收时间与哈希排序,这不能保证不同 Store 得到相同的全序。签名包含父消息引用,1v1 Olm 已经过真实 Store 的密文往返测试;群状态、一致排序与新设备恢复规则仍在设计。自查修复过消息验签、ROOM_EVENT、设备注册和准入问题,但 REST 读接口与节点间 WebSocket 默认仍无鉴权、无 TLS,因此是研究原型,尚未产品化。实现以 AI 辅助为主,我负责方案取舍与验收。

    Lattice 的设计思路
  4. 04已开源 · pre-alphaRestoreWeave整理多来源文件时,RestoreWeave 按 SHA-256 和长度识别相同内容;写入前先预览计划,恢复时再核对文件。Go · TypeScript · SQLite · BGE 语义检索阅读源码
    设计与实现

    RestoreWeave 面向 NAS 和多来源文件,用整文件 SHA-256 与逻辑长度识别内容;字节相同的文件共用一份数据,同时保留各自文件名和原始路径。写入前先生成只读计划,列出文件数、逻辑大小、预计新增空间、重复内容和阻塞项,确认后才写入。导出与恢复时会重新核对路径、长度和 SHA-256;索引只负责定位,不能证明文件字节完整,索引或模型不可用时仍可按精确内容读取和恢复。搜索支持关键词、结构化条件、标签和备注;语义搜索需显式安装并检查本地 BGE 模型。这是尚未发行的 core preview,API 按 loopback 使用设计。

  5. 05已开源GlassBox为每位用户隔离 Agent 执行环境:默认移除容器权限、限制网络与本机端口映射,并回收闲置会话。Go · Python · React · Docker阅读源码
    设计与实现

    GlassBox 为每位用户隔离 Agent 执行环境,由 9 个应用服务组成。容器先移除全部 capability,再只加回运行所需项,并启用 no-new-privileges 和三层网络。Agent 端口只映射到 127.0.0.1 的临时端口;会话闲置 30 分钟后回收,孤儿容器按 label 清理。浏览器通过无头 Xvfb 与 Chromium CDP 观察,不传输整张桌面画面。

  6. 06已开源workflow-to-skill把目标和现有 CLI、MCP 或 HTTP 工具整理成可审查的 SKILL.md,由宿主按自己的权限和工具执行。Agent Skill · DSH · MCP阅读源码
    设计与实现

    workflow-to-skill 把目标和已有 CLI、MCP 或 HTTP 工具写成可审查的 SKILL.md,执行仍交给宿主已有的工具和运行环境。在 DeepSeek Harness 的真实持久会话中,已记录一次「生成 Skill—新会话复用—得到结果」流程;仓库保留对应的证据地图和用例记录。

  7. 07已开源Loom让 AI 从现有组件中选择,再由客户端按规则组装应用;探索更容易验证和收敛的开发方式。Python · TypeScript · fastembed · tree-sitter · MCP阅读源码
    设计与实现

    Loom 将想法拆成 auth、CRUD、表格等能力接口,从个人组件库检索现成代码,由 AI 选择,再由客户端确定性地组装成 T3 项目;客户端不调用 LLM。一次小规模实验中,4 个想法的组装版本都修到可编译,而从零生成的 4 个版本都在修复后越来越乱而停止;组装方案的 output token 约为从零生成的 1/18。实验只使用 deepseek-chat,样本较小,“收敛”仅指 tsc 零错误。loom-memory-mcp 已发布到 PyPI。

  8. 08已开源siftlineSiftline 用 Skill 规划研究问题与搜索范围,CLI 负责检索并返回带来源记录的结构化结果;判断留给调用方。Python · Agent Skill · CLI阅读源码
    设计与实现

    Siftline 将研究流程分成 Skill 和 CLI:Skill 设定要追踪的关系、搜索渠道、查询和停止条件;CLI 执行搜索,并返回带 provenance 的 schema 化 JSON 与机器可读账本。CLI 不做 LLM 推理、排序或结论判断,调用方据返回的材料自行评估。

  9. 09已开源plate-redact为行车记录仪视频遮挡车牌:合并多个检测结果,并在输出无法解释遮挡区域时标记 UNKNOWN、阻止发布。Python · OpenCV · 多引擎并集 · 可插拔适配器阅读源码
    设计与实现

    plate-redact 为行车记录仪视频遮挡车牌,可组合多个检测或识别引擎的结果;多检出可能多出色块,漏检则可能泄露车牌。系统根据车辆运动预测提前遮挡,并使用纯色填充。发布流程按 fail-closed 设计:冻结输入、取得排他 lease、原子发布,编码后再解码输出,并检查遮挡区域能否由车辆轨迹解释;无法解释的区域标为 UNKNOWN 并阻止发布(test_fail_closed.py 有 17 项检查)。仓库不含视频素材或权重,第三方引擎按需惰性加载。

  10. 10已开源 · v0.1.0-alphaModSpec管理 LSPosed 配置时,ModSpec 用可复用规则和 profile 配置手机;ADB 配对后先校验配置与漂移,再应用变更。Rust · Kotlin · LSPosed · DexKit · JS/Lua 脚本引擎阅读源码
    设计与实现

    ModSpec 用 .mspec.toml profile 描述配置,并以可复用的 .rule.toml 定义 Hook。PC 上的 Rust CLI 通过 ADB 与手机 Agent 配对;validate 检查配置,verify 检查设备漂移,通过后才应用变更。Hook 脚本引擎支持 Frida 风格的 before、after、replace 操作和结构化事件。运行需要 root 与 LSPosed,目前是开发者预览,尚未稳定发行。