- 博客(67)
- 收藏
- 关注
原创 Python 3.15 的 lazy import:给 CLI 工具把重依赖挪出启动路径
Python 3.15 落地 PEP 810 显式惰性导入。我把自己 CLI 工具里的 PIL、yaml 等重依赖改成 lazy import,讲清它到底推迟了什么、错误时机怎么变、以及怎么验证没改坏行为。
2026-11-09 06:02:58
7
原创 从零写一个 MCP stdio Server:用 Python 校验博客文章格式
自动发完博客,我想让 AI 客户端核对标题长度、tags 数和正文汉字数,可模型总是数不准。这篇记录只用标准库的 MCP stdio Server:两个只读工具、JSON-RPC 最小闭环和客户端配置,以及本地工具为何不走远程 HTTP。
2026-11-08 06:03:34
335
原创 STM32 官宣统一平台后:一层 BSP 隔离 F1 与 F4 的 GPIO 复用差异
把 F103 最小系统板的串口代码搬到 F407 板,编译零警告,PA9 却一直是低电平。这篇从复现讲起,说明 F1 的 AFIO 重映射与 F4 的 GPIOx_AFR 复用编号差在哪,以及我怎样用一层 BSP 头文件把差异隔离在编译期。
2026-11-07 06:02:32
285
1
原创 FastAPI 0.162 修了省略布尔表单字段的默认值:文件互传接口迁移复盘
把局域网文件互传页从 Flask 迁到 FastAPI 后,不勾「覆盖同名文件」的请求直接返回 422。这篇从浏览器不提交未选中 checkbox 讲起,说明 FastAPI 0.162.0 对省略布尔表单字段默认值处理的调整,以及我最后怎么用三态声明、显式传值和 TestClient 回归把行为钉住。
2026-11-06 06:02:48
132
原创 Python 列表被改了两次:浅拷贝与可变默认参数的连锁坑
批量发布脚本里三篇文章的标签越攒越多,改成浅拷贝后发现嵌套的 project 字段仍然是同一个对象。这篇从一次真实的串数据排查出发,讲清默认参数只求值一次、浅拷贝与深拷贝的边界,以及 None 哨兵和 default_factory 的正确写法。
2026-11-04 06:02:00
280
原创 51 单片机驱动四位数码管:动态扫描、限流电阻与消影的取舍
用 STC89C52 驱动四位共阳数码管时,面包板上正常、焊到洞洞板上却亮度不均、发烫、有残影。这篇把共阴共阳、扫描时序、限流电阻放段上还是位选上、消影顺序逐条拆开,给出可直接用的定时器扫描代码与选型表。
2026-11-03 06:01:57
397
原创 用 tkinter 写桌面小工具:grid 布局、线程通信与打包
桌面小工具看着简单,真写起来全是细节:布局在高 DPI 下错位、点一下按钮界面假死、打包成 exe 后图标和资源找不到。这篇以我的显卡切换工具为例,把 tkinter 的 grid 权重、queue 加 after 的线程通信、DPI 声明和 PyInstaller 资源路径讲清楚,代码可以直接抄。
2026-11-02 06:02:14
264
原创 Flask 做一个局域网文件互传页:扫码即传与文件名安全的处理
手机往电脑传照片、电脑往手机传文档,微信会压缩、数据线又要来回插。这篇记录我用 Flask 写的一个局域网互传页:同一 Wi-Fi 下扫码打开,上传下载都不装客户端。重点讲清 0.0.0.0 绑定、文件名清洗、令牌防护和 Werkzeug 阻塞这几处为什么这样写。
2026-11-01 06:01:58
143
原创 红外遥控 NEC 解码为什么必须用输入捕获:一次轮询丢码的排查
做离线遥控器时,主循环轮询红外接收头总是丢码。从 NEC 的 9ms 引导码与 560/1690us 位宽讲起,说清轮询为什么会被主循环阻塞打乱时间基准,再给出 TIM2 输入捕获的状态机、LSB 先发的字节倒序问题与长按重复码的处理。
2026-10-31 06:06:08
210
原创 EasyEDA PCB 快速设计Skills
本文介绍基于 EasyEDA API 的快速 PCB 设计工作流,涵盖坐标换算、层映射、图元调用等核心概念,提供从环境检查、建工程到板框绘制、逐层布线的标准化流程。重点强调单位转换(mm↔mil)、板框闭合必要性及金色效果实现(铜层+阻焊开窗),并通过脚本化操作提升效率,适用于六层板设计与图像描摹(如校徽)自动化,助力高效无错开发。
2026-10-30 21:21:50
746
原创 GitHub Actions 打包 Windows exe:中文编码与产物上传
md-workflow-manager 每次发版都要手动 PyInstaller 打包、改文件名、传 Release,漏一步就得重来。这篇记录我把它搬上 GitHub Actions 的过程:为什么必须用 windows-latest、中文日志为什么会乱码、PyInstaller 在 CI 里的路径差异,以及 upload-artifact v4 与 Release 的权限和重跑问题。
2026-10-30 06:03:50
499
原创 MySQL 给订单表加了索引反而更慢:回表、选择性与最左前缀
后台订单列表翻到后面几页明显变卡,我给 create_time 加了索引,结果更慢。这篇用 EXPLAIN 一步步拆开:二级索引为什么要回表、选择性低的列为什么会被优化器放弃、联合索引的顺序为什么决定成败,以及索引本身的写入代价。
2026-10-29 06:01:49
310
原创 FastAPI 同一个路由注册了两次:改了代码却不生效的排查
重构接口返回结构后,服务端代码明明改了,前端拿到的还是旧字段。重启、清缓存、删 __pycache__ 全试过都没用,最后发现同一个 path 在 app 和 Router 里各注册了一次,Starlette 只认先注册的那个。这篇讲清成因、定位方法和两道防线。
2026-10-28 06:01:53
220
原创 STM32 采集 NTC 温度抖动:RC 硬件滤波与软件滑动平均怎么选
恒温箱测温的小数位乱跳,从 ADC 原始值和量化误差查起,讲清 RC 低通的截止频率与建立时间怎么算、滑动平均和中值滤波的延迟代价,以及 STM32 上固定点实现和最终取舍。
2026-10-27 06:01:55
174
原创 SpringBoot 三层架构里 DTO 该放哪一层:从鸿蒙登录接口返回密码说起
给鸿蒙 App 写的 SpringBoot 后端,登录接口直接返回 User 实体,password 也一起回了客户端。这篇按三层拆开,讲清实体、DTO、VO 各该待在哪一层,校验注解为什么不能写在实体上。
2026-10-26 06:03:24
334
原创 AERO-6X 六轴机械臂数字孪生:关节联动、爆炸分层与实时剖面
从只能看结构的静态演示,到六轴关节可驱动、爆炸分层可调、外壳透视和实时剖面的数字孪生。记录 AERO-6X 在 Three.js 里的状态拆分、Group 层级、裁剪面与标注投影,以及把依赖本地化后双击即用的做法。
2026-10-25 10:15:13
263
原创 把 OpenMV 的识别结果接到网页上:串口转 WebSocket 的最小闭环
OpenMV 在本机识别色块,但想在浏览器里实时看到框。本文用 Python 搭一个串口转 WebSocket 的桥,讲清协议怎么定、慢客户端怎么丢帧、前端怎么画,以及端口占用等实际坑。
2026-10-25 06:01:54
245
原创 Three.js 单文件离线机械臂工作台:爆炸图、透明外壳与剖面
从结构教学演示的需求出发,用 Three.js 程序化生成六轴机械臂的 48 个零件,把爆炸图、透明外壳与 X/Y/Z 剖面统一到同一个状态机,再用 esbuild 内联 Three.js 和 CSS,打成一个断网也能双击运行的 HTML,并附上真实浏览器测试与离线验证方法。
2026-10-24 14:27:35
194
原创 STM32F103 定时器的三种用法:PWM 输出、输入捕获与编码器接口
从小车项目里三个定时器互相打架的现场出发,讲清 STM32F103 的 PWM、输入捕获和编码器模式在信号链上各自做了什么,HAL 配置怎么写,以及预装载、16 位回绕、引脚复用这些容易翻车的地方。
2026-10-24 09:26:00
254
原创 给 FastAPI 接大模型:超时、重试和 token 成本该怎么管
课堂答疑接口上线后频繁 504,模型账单却多扣了几笔。这篇拆开一次大模型调用链,讲清超时该分几层设、哪些错误才能重试、上下文和 max_tokens 如何放大成本,并给出一段可直接复用的 httpx 封装。
2026-10-23 06:01:40
332
原创 MySQL 索引为什么会让查询变慢:最左前缀、回表与选择性
订单列表加了索引却没变快,写入反而更慢。这篇从 InnoDB 的 B+ 树讲起,把最左前缀、回表和索引选择性串起来,解释索引何时帮倒忙,并给出能直接照着改的 SQL 与 EXPLAIN 检查方法。
2026-10-22 06:02:20
271
原创 2026年深度学习前沿技术全景解读:从大模型到具身智能
2026年深度学习前沿聚焦架构革新与智能落地:MoE与SSM突破算力瓶颈,超长上下文实现“全书理解”;多模态迈向原生统一,视觉、语音、视频深度融合;AI Agent具备自主规划与工具调用能力,多智能体协作成主流;高效微调与边缘部署推动模型普惠;视觉生成迈向可控、可编辑的三维世界;世界模型与具身智能结合,驱动机器人与自动驾驶实现物理世界的自主决策。技术核心从“能说”转向“能做”,迈向真实世界智能。
2026-10-21 19:59:13
1200
原创 Python 在定时任务里输出 emoji,UnicodeEncodeError 从哪来
一个 tkinter 工具在 Windows 计划任务里只留半截日志就退出,报错 UnicodeEncodeError: 'gbk' codec。本文从控制台编码、PEP 528 查到子进程解码,给出不靠 chcp 的修法。
2026-10-21 06:02:54
300
原创 STM32 的 I2C 卡死在 BUSY:从机按住 SDA 的成因与恢复时序
从一次 OLED 刷新卡死的现场出发,讲清 I2C 开漏总线为什么会停在 BUSY、从机为什么一直按住 SDA,以及用 9 个时钟脉冲加手动 STOP 恢复总线的完整代码与预防措施。
2026-10-20 06:02:03
162
原创 用 PyInstaller 把 Python 脚本打包成单文件 exe:图标、路径与中文目录的完整清单
把实验室用的 Python 小工具发给同学,源码和依赖都不想暴露,于是用 PyInstaller 打单文件 exe。这篇记录图标、控制台、资源路径、中文目录和杀毒误报的完整处理,附可直接抄的构建脚本与排查表。
2026-10-19 11:14:52
258
原创 用 FastAPI 写带权限的文件上传接口:路径穿越、类型校验与大小限制
从教师上传试卷的真实需求出发,拆解 FastAPI 上传接口的鉴权、文件名处理、流式大小限制与内容校验,给出可以直接照抄的实现和常见错误对照表。
2026-10-19 07:05:46
423
原创 用 tkinter 和 pyserial 给 STM32 写一个串口调试上位机
调试 STM32 时串口助手只能看文本,采样数据既不能筛选也不能存。这篇从零搭一个最小可用的上位机:读线程、自定义帧格式、tkinter 批量刷新,最后打成单文件 exe,代码可以直接抄。
2026-10-18 23:20:24
308
原创 STM32 的 ADC 采样什么时候必须上 DMA:三种配置的取舍
轮询单次转换、连续转换、连续+DMA 三种配置的差别,为什么多通道扫描几乎绕不开 DMA,以及环形缓冲加半传输中断的双缓冲写法。附我踩过的四个坑。
2026-10-17 15:38:22
194
原创 用 FastAPI 搭一个课堂情绪识别教学平台:MJPEG 推流、试卷导入和大模型答疑
摄像头画面怎么实时进浏览器、识别线程怎么不被数据库写操作拖住、扫描版试卷怎么靠大模型变成结构化题目。附我核对源码后确认还没修的 7 个问题。
2026-10-17 15:11:38
497
原创 C#接口和文件处理
接口使用interface关键字声明,它与类的声明类似。接口声明默认是 public 的。以上代码定义了接口 IMyInterface。通常接口命令以 I 字母开头,这个接口只有一个方法 MethodToImplement(),没有参数和返回值,当然我们可以按照需求设置参数和返回值。值得注意的是,该方法并没有具体的实现。接下来我们来实现以上接口:InterfaceImplementer.cs// 接口成员。
2024-08-14 12:30:35
1198
原创 C# 结构体和类
为了定义一个结构体,您必须使用 struct 语句。struct 语句为程序定义了一个带有多个成员的新的数据类型。/* 声明 Book1,类型为 Books *//* 声明 Book2,类型为 Books *//* book 1 详述 *//* book 2 详述 *//* 打印 Book1 信息 *//* 打印 Book2 信息 */当上面的代码被编译和执行时,它会产生下列结果:类的定义是以关键字class开始,后跟类的名称。
2024-08-14 12:30:19
1652
原创 C# 字符串的使用
在 C# 中,您可以使用字符数组来表示字符串,但是,更常见的做法是使用关键字来声明一个字符串变量。string 关键字是类的别名。
2024-08-13 17:38:09
1487
原创 C#数组的使用
声明数组变量并不是声明 number0、number1、...、number99 一个个单独的变量,而是声明一个就像 numbers 这样的变量,然后使用 numbers[0]、numbers[1]、...、numbers[99] 来表示一个个单独的变量。当您创建一个数组时,C# 编译器会根据数组类型隐式初始化每个数组元素为一个默认值。数组是用来存储数据的集合,通常认为数组是一个同一类型变量的集合。在前面的实例中,我们使用一个 for 循环来访问每个数组元素,您也可以使用一个。关键字来创建数组的实例。
2024-08-13 17:37:57
1349
原创 C#中的方法
当定义一个方法时,从根本上说是在声明它的结构的元素。:访问修饰符,这个决定了变量或方法对于另一个类的可见性。:返回类型,一个方法可以返回一个值。返回类型是方法返回的值的数据类型。如果方法不返回任何值,则返回类型为void。:方法名称,是一个唯一的标识符,且是大小写敏感的。它不能与类中声明的其他标识符相同。:参数列表,使用圆括号括起来,该参数是用来传递和接收方法的数据。参数列表是指方法的参数类型、顺序和数量。参数是可选的,也就是说,一个方法可能不包含参数。:方法主体,包含了完成任务所需的指令集。
2024-08-12 17:39:36
1605
原创 C# 程序结构
C# 是一个现代的、通用的、面向对象的编程语言,它是由微软(Microsoft)开发的,由 Ecma 和 ISO 核准认可的。它是由 Anders Hejlsberg 和他的团队在 .Net 框架开发期间开发的。C# 是专为公共语言基础结构(CLI)设计的。CLI 由可执行代码和运行时环境组成,允许在不同的计算机平台和体系结构上使用各种高级语言。
2024-08-12 09:00:00
1167
原创 SQL--事务
事务 是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系 统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。就比如: 张三给李四转账1000块钱,张三银行账户的钱减少1000,而李四银行账户的钱要增加 1000。这一组操作就必须在一个事务的范围内,要么都成功,要么都失败。
2024-02-08 08:00:00
959
1
原创 SQL--多表查询
1). 删除之前 emp, dept表的测试数据2). 执行如下脚本,创建emp表与dept表并插入测试数据-- 创建dept表,并插入数据name varchar(50) not null comment '部门名称') comment '部门表';VALUES (1, '研发部'),(2, '市场部'),(3, '财务部'),(4,'销售部'),(5, '总经办'),(6, '人事部');-- 创建emp表,并插入数据。
2024-02-07 10:41:01
4254
原创 SQL--函数
函数 是指一段可以直接被另一段程序调用的程序或代码。也就意味着,这一段程序或代码在MySQL中 已经给我们提供了,我们要做的就是在合适的业务场景调用对应的函数完成对应的业务需求即可。那 么,函数到底在哪儿使用呢?我们先来看两个场景:1). 在企业的OA或其他的人力系统中,经常会提供的有这样一个功能,每一个员工登录上来之后都能 够看到当前员工入职的天数。而在数据库中,存储的都是入职日期,如 2000-11-12,那如果快速计 算出天数呢?2). 在做报表这类的业务需求中,我们要展示出学员的分数等级分布。
2024-02-06 07:00:00
1118
空空如也
可以完成一下计算机网络的配置吗
2024-05-23
解决一下github贪吃蛇,小绿点显示不全的原因
2023-09-06
来活了!求优化一下,也可以多加一些关于字符串处理的函数(最好利用指针).
2023-05-17
能不能给我这个数组系统优化一下啊,谢谢你们啊
2023-05-07
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅