让狗写代码?用树莓派Pico和Claude Code打造乱码游戏
聊一个我最近特别想分享的项目。上家公司去年年中做组织调整我所在的整个业务小组被拿掉了缓冲期一个月。人一闲下来就容易想东想西试过刷简历、改作品集但到了第三周手就开始痒了。于是我做了一个和KPI一点关系都没有的东西训练我家那只金毛“小柴”用爪子去按一块软垫软垫连着树莓派Pico模拟USB键盘输出随机字符键盘事件又变成源源不断的乱码被一个用Claude Code写的pygame游戏吃掉——玩家需要在乱码里识别有效单词拼成指令闯关。整个项目做完后开源一个星期内收到两个PR还有人把游戏移植到浏览器在线能玩。这篇文章就从“为什么非得让狗写代码”说起把训练、硬件、编码错乱、AI辅助开发和开源工程化的过程完整复盘一遍给同样想做点“不正经但有意思”项目的朋友当块敲门砖。1. 被裁之后我为什么选择让狗去“写代码”1.1 失业第三周的决定说完全不慌是假的。前东家做海外社交平台我主要负责推荐系统的工程化落地说白了就是和一堆特征管道、AB实验框架、模型服务打交道。岗位被砍那天HR开了个十五分钟的会之后我的账号权限就陆续关了。那种“失控感”比裁员本身更难受——以前每天被deadline推着走突然什么deadline都没有了。那阵子我试过接外包、学新框架但都坚持不下去。后来回头想人失去掌控感的时候最需要的是用一件“完全由我说了算”的事情把自己拉回来。技术人最擅长的方式就是写代码但我不想再写什么“高并发稳定日志采集系统”了那会儿看到正经需求文档就想吐。我决定做一个完全没有商业价值、纯粹好玩的技术项目。正好那段时间Claude Code在程序员圈子里讨论度很高我也想认真测一下它在端到端项目里的表现。当时我给自己定了三个测试目标第一能不能让一只活生生的狗产生可靠的随机输入第二能不能把这些随机输入变成“乱码”并用于游戏素材第三AI能不能帮我完成绝大部分编码工作。这三个目标合到一起就有了这个项目。1.2 为什么是“狗敲键盘”而不是直接跑一个随机数发生器这个问题几乎每个看我项目的人都会问。要生成随机字符串一行random.choice(string.printable)就够了完全不需要训练狗。但我不想要那种“伪随机”我想要一个有真实生命参与的随机源。狗不懂Unicode不懂编码它按下的每个字符都不带任何语义预设这是一种相当纯粹的“噪音”。而我的游戏核心玩法正是让玩家在这种噪音里重新找回语义——从乱码堆里识别出有效单词。这个对抗关系本身就比“电脑随机出题、玩家答题”要有趣得多。另外还有一个很现实的原因技术项目能不能传播很大程度上取决于它有没有“故事感”。纯讲“我用Claude Code写了一个pygame小游戏”最多也就朋友圈几个赞。但“被裁工程师训练狗敲键盘、乱码变成游戏”这个故事天然带话题度。它会让不看技术的人也想点进来看一眼。1.3 项目三条主线的整体结构整个项目从零到开源用了三周我把它分成三条并行推进的主线主线解决的问题核心产物硬件输入让狗通过物理动作触发键盘事件Pico 电容触摸传感器 MicroPython固件乱码数据从真实编码错误和主动采样中获得游戏素材乱码采集脚本 Unicode白名单清洗游戏开发把乱码素材变成一个可玩的pygame游戏Claude Code生成的游戏主体三条线之间是流水线关系狗爪子按下软垫 → Pico模拟USB键盘发出字符 → 游戏进程读取键盘事件 → 乱码字符下落 → 玩家在游戏里识别单词。每一环都可以独立替换这为我后面调试了不少坑留了很大空间。2. 狗爪输入装置从零食训练到USB HID的全链路改造2.1 训练原则不强迫、正向强化、短时高频一说“训练狗敲键盘”很多人脑子里第一反应是马戏团那种鞭子和指令。我完全不是那个路线。我家小柴是只一岁多的金毛精力旺盛但脾气很好。我在动手之前专门查了正向训练的资料核心原则很简单不给任何负面惩罚用零食和声音标记强化正确行为每次训练时间控制在十分钟以内一天最多两次。这里我要特别强调一句如果你的狗对某个行为表现出明显抗拒立刻停止不要硬来。做一个好玩的项目的下限是不让动物遭罪。训练过程中狗才是真正的主导者我只不过是把零食和按键行为绑定而已。2.2 硬件选型为什么是Pico 电容触摸硬件方案我纠结过一阵。最初想直接用普通键盘把几个键帽改装成大按钮但狗爪子很难精准按到单个机械轴误触率会很高。后来改用“软垫 触摸传感器”的思路让狗只要把手掌放在指定区域就能触发对狗的精细动作要求低很多。最终选定的硬件清单如下树莓派Pico开发板几十块钱一块坏了不心疼MicroPython固件支持USB HID可以直接模拟键盘设备。TT电容触摸传感器模块三根线就能接灵敏度高狗爪子隔着硅胶垫也能触发。一块柔性硅胶垫我用的是餐垫改造的垫子比键盘软得多狗踩上去不会硌脚也不容易产生应激。若干杜邦线、USB-Type-C数据线、热缩管。接线逻辑非常简单传感器VCC接Pico的3.3VGND接GND信号输出接GP15。代码用MicroPython的usb_hid模块模拟USB键盘每次检测到触摸信号就发送一个随机可打印字符。为什么不用Arduino因为MicroPython环境下可以直接引用Adafruit的HID库改代码也方便接到电脑上就是个标准键盘设备任何操作系统都能识别。我当时的第一版固件只花了二十分钟就写完了。# 简化版固件逻辑检测触摸并随机输出一个Latin-1可打印字符 import board import digitalio import usb_hid import time import random from adafruit_hid.keyboard import Keyboard from adafruit_hid.keyboard_layout_us import KeyboardLayoutUS pad digitalio.DigitalInOut(board.GP15) pad.direction digitalio.Direction.INPUT pad.pull digitalio.Pull.UP VALID_RANGE list(range(0x20, 0x7F)) list(range(0xA1, 0xFF)) kbd Keyboard(usb_hid.devices) layout KeyboardLayoutUS(kbd) last_press 0.0 COOLDOWN_SECONDS 1.0 def send_random_char(): c chr(random.choice(VALID_RANGE)) layout.write(c) while True: if not pad.value and (time.monotonic() - last_press) COOLDOWN_SECONDS: send_random_char() last_press time.monotonic() time.sleep(0.01)这个版本有个细节值得注意VALID_RANGE我只取了Basic Latin和Latin-1 Supplement两个区块是为了保证输出的字符在pygame里能稳定渲染。完整版固件我会在文章第4章讲到怎么扩展白名单这里先留个伏笔。2.3 从“碰一下”到“摁一下”四步训练法硬件接通只是第一步真正的难点是让狗理解“我要你干什么”。我把训练拆成了四个阶段每阶段都要看到稳定表现再推进第一阶段让狗愿意接触垫子。把硅胶垫放在地板上狗好奇上来闻一下、爪子碰一下立刻按响clicker响片给零食。不需要任何口令重点是让狗把“碰垫子”和“好事发生”绑定。这个过程我花了两天每天两次、每次十分钟。第二阶段建立“按压”而不是“路过”。只有狗把爪子停留在垫子上超过0.5秒才给奖励。一开始它经常是一边跑一边踩过去我用一个带慢放的回放摄像头观察动作细节发现它前几次确实只是路过。后来我把零食放在稍远一些的位置它为了吃到零食会停下来、站定、下爪按压时长自然就变长了。第三阶段加入口令。在狗即将按压前说“按”等它完成动作后给奖励。这一步的目的是让它把声音指令、动作和结果串联起来。口令一定要简短、稳定不要一会儿说“按”、一会儿说“摁一下”。第四阶段抗干扰测试。在客厅里开着电视、有人走动的情况下发出指令观察它是否还能稳定完成。如果成功率达到80%以上就算训练完成。我记录了一组训练数据供参考训练天数触发次数误触次数无口令自行去按成功率第1天201240%第2天201050%第3天20670%第4天20385%第5天20195%实际到第五天狗听到口令后基本能稳定触发。这个结果比我预期的快得多金毛这种高社交性犬种配合度确实很高。2.4 硬件和训练中踩过的五个坑这个环节我不太想包装成“一次成功”因为中间确实翻车很多次。第一坑狗毛会导致电容触摸误触发。一开始我用的是普通自制触摸电路金毛掉毛太厉害毛絮飘到传感器表面就会触发信号。解决办法是把触摸区域用热缩管完全封装只露出硅胶垫上的一块“有效区域”并且调整了TT触摸模块的灵敏度阈值。第二坑线材被咬断。狗对裸露的电线有天然的探索欲望尤其是它会动的时候线跟着晃特别吸引注意力。我后来把所有接线处都用螺旋保护套包起来接头处点热熔胶固定。从那天起再没咬断过。第三坑HID报告里的不可打印字符。第一版固件我用了random.randint(0, 255)然后转成字符结果大量输出的是控制字符、换行符甚至直接触发系统快捷键。后来改成只从白名单采样问题就消失了。第四坑训练时间长了狗会疲。一次训练超过十五分钟小柴明显开始不耐烦表现为趴下、注意力涣散、响应变慢。后来严格控制在十分钟每天两次训练效果反而更稳定。第五坑音效会吓到狗。游戏测试时得分音效音量开得太大狗听到后整个身子一抖直接跑到房间角落连续两天不愿意靠近垫子。后来我把音箱放到另一个房间音量调到20%以下它才慢慢恢复。这点真的提醒我了测试任何东西都不要忽略了参与者的感受。3. 乱码不是错误是素材Unicode错位的收集与清洗3.1 乱码从哪来两个真实场景“乱码”在这个项目里有两层含义。第一层是软件层面真实发生的编码错乱第二层是我主动生成的“类乱码”字符。但不管哪一层它们的本质都是一件事字节序列和字符编码表不匹配。举例说一个经典场景是旧项目的服务器日志。推送服务早期用GBK保存用户昵称后来迁移到UTF-8日志分析脚本却还是按UTF-8读取结果原本的汉字被解析成了一段完全不可读的字符组合。有经验的中文开发者一眼就能认出“锟斤拷”“烫烫烫”这类标志性乱码它们本质上是GBK字节被错误地放进UTF-8解码器后得到的替代性输出。另一个场景是跨语言API接口。服务A用UTF-8编码字符串服务B如果用ISO-8859-1去解码中文会变成类似“中文”的一长串带波浪线字母这在欧洲开发者那边几乎是日常。无论是哪种情况对程序来说都是“一堆看似无意义但确实存在的字符”。3.2 主动制造乱码编码错位小实验我不想依赖别人的旧日志所以写了一个脚本主动制造乱码方便稳定地获得测试素材。原理就是用错误的编码对去解码正确的字节串origin 你好世界 gbk_bytes origin.encode(gbk) try: mangled gbk_bytes.decode(utf-8) except UnicodeDecodeError as e: mangled gbk_bytes.decode(utf-8, errorsreplace) print(repr(mangled))真实输出往往是几个“”加随机字符。如果在这个基础上多做几次“编码→错位解码→再编码→再错位解码”循环就能得到一长串看起来非常“异世界”的字符。这个过程在程序里就叫“乱码生成器”。不过有个细节必须说清楚errorsreplace产生的是Unicode替换符UFFFD一个黑底白色问号它在游戏里渲染出来很丑所以我后来做素材清洗时把它直接过滤掉了。3.3 乱码素材库的清洗流程找到乱码只是第一步真正苦的是把乱码变成“可用素材”。我写了一个tools/mangle_collector.py干了三件事扫描指定目录下的日志、CSV、源码缓存文件用chardet做编码探测把解码失败的行全部收集起来。对每个字符做Unicode区块分类过滤掉控制字符、代理区、未分配码位和替换符。输出一个JSON词库每个乱码字符附带它的Unicode码位、所属区块和原始上下文。清洗规则里最关键的是白名单区块。我最终只保留以下四个范围BLOCK_ALLOWLIST [ (0x0000, 0x007F), # Basic Latin (0x00A0, 0x00FF), # Latin-1 Supplement (0x2500, 0x257F), # Box Drawing (0x4E00, 0x9FFF), # CJK Unified Ideographs ]选这些区块是有理由的。Basic Latin和Latin-1 Supplement是乱码的高发区尤其带音符字母看起来很像咒语Box Drawing是网格线的集合天然适合做“像素墙”CJK统一表意文字里有大量生僻字和笔画密集的汉字视觉冲击力强做Boss名字非常合适。至于Emoji和其他符号区块我故意没放进去因为Emoji自带语义很容易让玩家分心破坏“从无意义里找意义”的核心体验。3.4 为什么乱码天然适合做游戏资产乱码最珍贵的地方在于它不是设计师有意做出来的因此带着一种不可复制的随机美感。用游戏设计的话说它就是“程序化素材”的极端版本。Box Drawing字符像建筑蓝图落在游戏背景里可以形成天然的网格墙体带重音符号的Latin字符像是某种失落语言适合做谜题的提示文字CJK生僻字笔画密到一定程度看起来就像“深渊语”用来做诅咒装备名再合适不过。我甚至试过直接用乱码命名字幕系统里的NPC名字效果比用手写weirdness精致得多——因为人脑对“刻意做的怪”会有熟悉感但对真正编码错乱产生的字符反而更容易产生“这背后是不是有什么秘密”的联想。这是项目核心体验的一部分乱码越是“真实”玩家越会相信游戏背后有一套未知的叙事。4. Claude Code帮我写的游戏逻辑三条血泪教训4.1 技术栈选择为什么是Python加pygame游戏部分我考虑过Web前端、Godot、Unity最后选了Python加pygame。理由很简单第一pygame生态成熟Claude Code对它的生成能力很强大量样板代码可以让AI直接产出的第二这个项目对性能不敏感——狗一秒最多按两下就算游戏跑出60帧也完全够用第三部署非常简单一台普通笔记本就能跑开源后别人复现成本低。如果你想要更好的视觉效果用Godot或Unity也完全成立那意味着项目会变成另一个体量。我的目标是小而完整pygame是最匹配的。4.2 第一屏代码Claude的10分钟原型我在终端里跑claude命令给它的第一轮需求是这样的写一个pygame游戏。窗口里持续下落Unicode乱码字符玩家用左右键控制底部一个字符去接住哪些藏在乱码里的有效英文单词。接错了屏幕乱码污染度上升接对了得分并且下落速度加快。要求游戏可以跑起来有开始界面、计分、游戏结束三态。大约十分钟后Claude就生成了一份完整的main.py包含pygame主循环、精灵下落、碰撞检测、计分UI和简单的开始/结束界面。我把它跑起来的第一个瞬间屏幕上的确开始下坠各种字符那种“一个想法变成屏幕上动态画面”的爽感和以前自己从零写代码完全不同。当然它生成的代码并不完美。pygame.Rect.colliderect碰撞逻辑用了最简单的矩形检测导致判定区域很大、游戏难度过低界面字体会用默认字体渲染不出CJK字符。但这些都属于“方向对、细节需要调”的问题比从白纸开始写要省太多时间了。4.3 核心玩法落地从乱码里“捞单词”原型跑通后我开始设计真正的玩法。游戏玩法分为两层第一层单词识别。下落物里混着两类字符一类是纯乱码一类是刻意混进去的有效英文单词。有效单词来自一份种子词库我按单词长度分为三档3字母、5字母、8字母分别对应简单、普通、困难难度。玩家需要快速从下落物里辨认出“DOG”“RUN”“BUG”“FIX”这类词并用方向键控制底部角色去接住它们。第二层指令组合。单单接单词不够有戏剧性。我在词库里放了一组“指令词”当玩家在一个关卡内集齐两个特定单词时会触发全局事件。比如先接到“HELLO”再接到“WORLD”触发全屏清场特效并加1000分先接到“BUG”再接到“FIX”屏幕乱码污染度清零。这组彩蛋设计让玩家从“识别单词”进阶到“探索词与词之间的关系”游戏深度立刻不一样了。Claude帮我把第二层的词匹配逻辑写了第一版我用一个matched_sequence队列去维护已得单词再对照指令表判断是否触发。这块逻辑不复杂但Claude写得比我预期要稳我基本只需要改边角参数。4.4 让代码真实可跑的三个硬骨头游戏原型是“能跑”但要做到“能发布”还有三个硬骨头必须啃掉。硬骨头一字体渲染成豆腐块。pygame默认字体对很多Unicode字符根本没字形屏幕上全是空心方块业内叫“tofu”。解决办法是引入系统字体做回退链Noto Sans Symbols 2负责Box Drawing和特殊符号Noto Sans CJK SC负责中文和生僻字Latin字符回退到系统默认字体。我封装了一个load_font_chain函数依次尝试多个字体路径找不到就跳过。硬骨头二随机采样概率分布不合理。直接在Unicode空间里暴力采样会产生大量不可见字符或未分配码位游戏演出效果会变成一堵会动的墙。我改成按区块加权采样Box Drawing区块权重最高因为它在视觉上最“像素”CJK区块权重其次用作特殊Boss词Latin-1辅以部分重音符号。这样乱码的视觉多样性大幅提升且不会出现空白。硬骨头三HID键盘事件拿不到Unicode字符。这里是最坑的。Pico模拟的是标准USB键盘它发送的其实是键码Keycode而不是字符本身。pygame在普通文本输入场景下event.unicode通常是可靠的但硬件键盘输出的非拉丁字符到了pygame里经常变成空字符串。我改成了直接维护一张“键码→乱码字符”映射表收到事件后从映射表里还原字符完全不依赖event.unicode。这张表其实就是第2章固件白名单的镜像两边保持一致才没有对不上。4.5 音效细节狗叫声采样音效方面我把小柴的叫声录了一段切出短促的“汪”音作为得分音效低沉一点的作为失误音效背景环境音则用白噪音加低频滤波处理模拟“在狗窝边打游戏”的氛围。这块虽然简单但让游戏的整体感好了非常多玩家反馈都说比默认的“嘟”声有记忆点。5. 开源上线一周仓库结构、社区反馈和后续计划5.1 仓库结构怎么排项目开源之前我把仓库整理了一遍。目录结构长这样garbage-or-gold/ ├── src/ │ ├── main.py # 游戏入口 │ ├── spawner.py # 乱码生成器与单词生成器 │ └── render.py # 字体回退链与渲染 ├── tools/ │ ├── mangle_collector.py # 乱码采集脚本 │ └── build_wordlist.py # 构建种子词库 ├── assets/ │ ├── fonts/ │ ├── sfx/ │ └── bark.wav ├── docs/ │ ├── dog-training.md # 训练手册 │ └── hardware.md # 硬件接线图 ├── LICENSE └── README.mddocs/hardware.md是在开源前熬夜补的里面除了接线图和固件代码还加了训练记录表和阶段目标。这个文件后来成了不少人复刻项目时最先打开的东西。5.2 README和许可证开源项目的第一印象许可证我选了MIT原因很简单我希望这个项目被随意拿去改、拿去玩不想加任何附加限制。MIT对作者也友好别人用你的代码出问题你不会被追责。README写了一晚上核心原则是三件事第一一张GIF动图五秒钟让人看懂这个游戏是什么第二一条命令跑起来pip install -r requirements.txt python src/main.py第三说清楚“这项目为什么叫这名字”也就是训练狗、乱码、游戏三者之间的故事。很多开源项目死因不在于代码差而在于别人打开仓库三十秒看不懂你在干什么README这种东西不能省。5.3 一周内收到的PR与issue开源之后一周实际反馈比我预期的热闹。有一个PR是深度改造派一个硬件玩家用KiCad画了完整的PCB工程把触摸软垫做成了独立的脚踩板走线合理、外壳能3D打印整个硬件方案结实了一个量级。这我完全没预料到因为我的接线图本质是“能用就行”他把它变成了“能卖”的级别。第二个PR是跨平台移植有人用Pyodide把游戏逻辑编译到了WebAssembly直接在浏览器里就能在线运行。这既证明了pygame代码的可移植性也说明我的游戏逻辑和渲染代码耦合度不算太高这是个好兆头。我后来把他在GitHub Pages上的在线版加进了README最显眼的位置。也有一个很有意思的issue有人在Windows上打开游戏CJK字符全变方块。排查发现是我在render.py里的字体回退链只写了macOS的字体路径Windows没有Noto Sans CJK SC.ttc需要额外配置或下载。我加了一个自动探测逻辑读取系统字体目录里的候选名单并在README里补充了Windows用户安装字体的说明。还有人直接提问“这游戏里的乱码到底是程序生成的还是狗真敲出来的”答案其实分两半训练时小柴按下触摸垫确实会触发真实键盘事件游戏也确实会接收它——但那只能产生“低频乱码”。为了让游戏在高频率下依然有素材下落乱码生成器在后台承担了主要生产任务狗的每次真实输入被当成一个“随机种子”混入后续生成序列里。这个混合机制是我最满意的设计之一狗的实时行为直接影响游戏而不是完全模拟。5.4 这个项目后面想怎么玩开源版本已经是完整可玩的但我的TODO列表里还躺着不少想法。首要是把“狗按下的时间间隔”做成关卡种子。狗每次按压的时间点天然不均匀这种不均匀性就是真实的随机性。用时间戳做种子每一关的地图都会独一无二玩家永远无法预判下一波乱码长什么样。其次是双人模式。狗在工作室里触发输入玩家在客厅大屏上接收两者之间通过网络同步。技术上不算难但需要处理延迟和重连逻辑目前还在设计阶段。第三是扩充乱码词库。当前词库以英文单词为主后续想把中文词、emoji、全角假名加进去并针对不同区块调整出现权重。字体回退链也得跟着扩展不然又会出现“渲染变成豆腐块”这类问题。最后我还在考虑用Claude Code把代码重构一遍把渲染、游戏逻辑、输入采集彻底解耦做成一个可以独立复用的“乱码竞技场”框架让别人也能很方便地往里面塞自己定义的字符集和玩法规则。最后说点实际的。做完这个项目我最强烈的感受是被裁员不是职业生涯的句号它反而给了我一个以前KPI体系里绝不会允许的“试错额度”。你不需要一个多严肃的动机才能做技术项目趣味本身就是很强的引擎。Claude Code确实帮我省掉了一半多的工作量但它最厉害的地方不是自动补全而是能把一个充满歧义的想法快速变成可运行原型让我有更多时间去调整难度曲线、陪狗训练而不是陷在脚手架里。再补一个小技巧整个项目里我最后悔的是没在一开始就写docs/hardware.md。如果你也想复刻一个带动物参与的技术项目一定记得先把训练记录和硬件接线图存好。回头补文档真的是最痛苦的事尤其是狗的行为数据我当时只记在纸上后来搬进Markdown的时候漏了两天的记录难度曲线调试就歪了一截。

相关新闻

MetaERP月结关账与总账会计分录:标准流程与实战排查

MetaERP月结关账与总账会计分录:标准流程与实战排查

做企业财务与ERP系统的实施这些年,每个月被问得最多的一句话就是:“这个月结怎么又没跑顺?”尤其到了总账关账环节,供应链、生产、固定资产、成本模块的单据全部往财务侧汇聚,稍微有一笔采购单没结算、一个工单没完工入…

2026/10/9 8:10:38 阅读更多 →
Compound Engineering 实战:用 TaoToken 统一 Key 让 Claude Code 与 Codex 的每次调试都沉淀为下次的资产

Compound Engineering 实战:用 TaoToken 统一 Key 让 Claude Code 与 Codex 的每次调试都沉淀为下次的资产

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 8:10:38 阅读更多 →
AMD Ross FPGA Agent 实战:用 Vivado Tcl 实现时序收敛自动化

AMD Ross FPGA Agent 实战:用 Vivado Tcl 实现时序收敛自动化

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 8:10:38 阅读更多 →

最新新闻

毕业论文Word排版避坑:从样式分节到自动更新域

毕业论文Word排版避坑:从样式分节到自动更新域

每年到三四月份,总有一批人被毕业论文的格式折腾到怀疑人生。我当年写硕士论文的时候,以为自己Word用得挺溜,结果光是把页眉页码调对就花了一个通宵,后来帮实验室的师弟师妹改论文,发现大家踩的坑基本一模一样&#xf…

2026/10/9 11:53:00 阅读更多 →
监督干系人参与实战:从评估矩阵到避坑指南

监督干系人参与实战:从评估矩阵到避坑指南

做项目这么多年,我一直觉得“监督干系人参与”是个被严重低估的环节。很多项目经理把精力全砸在进度、成本、范围这些“硬指标”上,干系人管理做到识别和规划就停了,结果项目中期突然发现某个关键干系人态度转冷、需求文档被反复打回、评审会…

2026/10/9 11:53:00 阅读更多 →
软考高项120天备考:上班族三轮迭代法全攻略

软考高项120天备考:上班族三轮迭代法全攻略

每年报名软考高项(信息系统项目管理师)的人里,上班族占了很大比例。这个标题里的"120天备考规划"之所以常见,是因为它正好对应一次完整考试季的准备期:上半年从2月到5月底,下半年从7月到11月初&a…

2026/10/9 11:53:00 阅读更多 →
RabbitMQ消息延迟排查:业务代码未等风控结果,根因在链路与编排

RabbitMQ消息延迟排查:业务代码未等风控结果,根因在链路与编排

先说结论:这个标题描述的现象,本质上不是“业务代码没有做延迟处理”的问题,而是消息链路里某个环节的耗时没有反映到业务代码的执行路径上。我排过几次类似的问题,最后发现根因往往藏在 RabbitMQ 的消费机制、下游服务耗时抖动、…

2026/10/9 11:53:00 阅读更多 →
医药信息管理系统数据库设计:从药房登记本到规范化SQL Schema

医药信息管理系统数据库设计:从药房登记本到规范化SQL Schema

简介:本资源是一套面向高校数据库课程设计实践的医药信息管理系统完整项目源码,适用于计算机、信息管理等专业学生完成课设任务或开展数据库综合实训。系统覆盖药品进销存全业务流程,包含基本信息管理、进货管理、库房管理、销售管理及财务统…

2026/10/9 11:53:00 阅读更多 →
ollama v0.30.11 升级全解析:Thinking 能力检测、Claude Code 与 OpenCode 自动安装、Windows Vulkan 修复与 MLX 推测解码实测

ollama v0.30.11 升级全解析:Thinking 能力检测、Claude Code 与 OpenCode 自动安装、Windows Vulkan 修复与 MLX 推测解码实测

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 11:51:59 阅读更多 →

日新闻

Java时间API实战:LocalDate、Date与ZonedDateTime的转换与避坑指南

Java时间API实战:LocalDate、Date与ZonedDateTime的转换与避坑指南

Java时间API这个话题,隔三差五就会在群里被翻出来讨论一次。上周还有个同事线上处理一个订单超时问题,排查到最后发现是ZonedDateTime序列化后时区丢了,用户在下单当天晚上看到的时间整整差了8个小时。这类问题几乎每个做Java开发的人都遇到过…

2026/10/9 0:00:49 阅读更多 →
EasyTier实践:从NAT穿透到子网代理的异地组网部署与排错

EasyTier实践:从NAT穿透到子网代理的异地组网部署与排错

前几个月我手头有好几台机器需要互相访问:办公室台式机、家里 NAS、还有一台云主机。如果只是偶尔传个文件倒还好,问题是工作场景经常要在几处环境之间来回切换,每次都先登录跳板机再层层代理,实在折腾。我先后试过端口映射、自建…

2026/10/9 0:00:49 阅读更多 →
AI Agent工程实战:从七要素到七个决策点的系统设计指南

AI Agent工程实战:从七要素到七个决策点的系统设计指南

AI Agent 这个词在过去一年里被反复提及,但真正动手搭过一套能跑起来的 Agent 系统的人都知道,从"知道它是什么"到"让它稳定干活"之间隔着一整套工程决策。我前后参与过几个 Agent 项目的落地,从最初用现成框架拼装&…

2026/10/9 0:01:50 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 15:26:32 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 15:26:40 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 10:11:06 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 21:13:17 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 15:26:17 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 6:17:20 阅读更多 →