昌维的博客 — 记录 AI、系统与工程的实践笔记
正在加载首页内容
正在加载首页内容
共 25 篇文章
现在因为一些特殊用途,还需要用到旧版本的 Windows 系统,像是 Windows 10 早期版本、Windows Server 2016/2019 这些系统。
如何从家用光猫(I-040GW)的配置备份中还原出 PPPoE 明文密码:拿到已知明文、怎么用排除法缩小假设空间、怎么反推密钥、怎么验证,以及最后的安全评价。
如果你把前端仓库放在 D 盘,第一次运行 pnpm install 后打开资源管理器,很可能会在 D:\ 根目录看到一个名为 .pnpm-store 的隐藏文件夹。它体积不小,名字也令人困惑——这到底是病毒、误操作,还是 pnpm 的正常行为?本文从文件系统底层出发,解释 pnpm 内容寻址 store 的选址逻辑、hard link(硬链接)原理,以及 W...
这是 AI 系列的第三篇。前两篇分别聊了 AI 的发展脉络和机器学习基础,这篇换个问题:ChatGPT 这类模型到底是怎么被「训」出来的?为什么预训练完还不能直接上线,非要做 SFT 和 RLHF 对齐?最后我会用 fine-tuning-playground 在本地 GPU 上跑一遍 QLoRA 监督微调,让 Qwen3.5-4B 学会回答台师大的问题。...
本文面向已经会写一点 SystemVerilog,但几乎完全不了解内存芯片工作原理的读者。我们会从“为什么内存不能像寄存器一样直接读写”开始,一步步讲到 SDRAM(Synchronous Dynamic Random Access Memory,同步动态随机存取存储器)的内部结构、命令编码、初始化流程、刷新机制、读写时序,最后通过我写的开源项目 SDRAM...
React 的 Fiber、Lane、Scheduler、Suspense 这些机制,一开始就把人劝退了。所以我写了个迷你实现 ez-react,把「一段 JSX 怎么变成页面上的 DOM、setState 为什么会重新渲染、diff 到底在 diff 什么」压缩到能读懂、能调试的规模。这篇先从 React 的基本工作原理讲起,再逐段对照 ez-react...
上一篇把 AI 的发展脉络铺开了,这一篇开始动手:机器学习到底是什么,图像在计算机眼里怎么变成一串数字,矩阵、卷积和训练又是怎么回事。最后有一段完整的 PyTorch 代码,从零训练一个能认手写数字的网络。 只要有一点 Python 基础就够了,数学推导可以先放一边。
本文面向只学过基础 C 语言、还没有系统接触过网络通信的读者。我们会从 IP、端口、TCP、NAT、防火墙入站与出站这些最基本的概念讲起,再通过我写的 NATBypass 项目源码,完整拆解一个 TCP 端口转发与反向隧道工具是如何工作的。
从 PSK 到 WPA3,WiFi 的加密方案换了一代又一代,攻击手段也跟着迭代。这篇先把密码学里几个基础概念讲清楚,再顺着 WEP、WPA、WPA2、WPA3 的脉络看它们各自被什么问题击穿,最后用 aircrack-ng 和 hashcat 走一遍完整的破解流程。
AI 这个词喊了这么多年,可「智慧」到底指什么、人工智能又是从哪一步开始变得「像人」的?这篇先不急着推公式,而是把地图铺开:从图灵测试、感知机、反向传播,一路讲到 AlexNet、ResNet 与 Transformer,把这条发展脉络串成一条线。 如果看完想接着动手,可以读续篇《机器学习与 MNIST 手写数字识别入门》,那里会用 PyTorch 真的训一...
我在師大就讀期間,對校史一直有著濃厚的興趣。這篇文章整理了一些關於臺師大校史的冷知識和有趣的故事,算是為自己的大學生活留下一些記錄。
2026 年的 AI Coding早已成为日常开发流程的一部分。本文记录我在实际使用中的选型思路、省钱技巧,以及 OpenCode、提示词和 AGENTS.md 的一些实操经验——前半部分偏概念对比,后半部分是可以直接照着做的清单。 文内价格与配额信息参考 2026 年 6 月各厂商公开定价,具体价格请以官方页面为准。
五月初,我跟著 GDG on NTNU 到臺師大林口校區參訪資訊中心機房。 這篇記下幾個印象比較深的片段:冷氣只送進機櫃通道的節能設計、年均 PUE 低於 1.6 代表什麼,以及那些平常被「雲端」兩個字藏起來的實體設備,像是 KVM、NVR、APC InRow 和 UPS 電池櫃。
三月下旬,我在校園裡看到臺師大學生會選舉的海報。想起以前在臺科大參與學生自治的經驗,這次便也報名參選,第一次參加選委會辦的「候選人政見發表會」。 這篇記下當天的流程與規則:限時 5 分鐘的政見發表、Slido 匿名提問按讚決定順序,以及我覺得很像總統大選的 Q&A 計時;最後也談談我對投票率與學生自治參與度的一點觀察。
离职之后准备写一些随笔文章,放在 Gossip 这个分类下面,记录一些不太希望直接在 Twitter 等公开社交平台上发表的内容。 如果你会深挖到这里,可能你是一位对我比较感兴趣的朋友。谢谢你的关注,如果有什么话题想要聊聊也欢迎寄 Email 或者 Twitter 等私信联系我。
实习时收到一个反馈:天才计划页面某段文字的第一行像是「溢出」了。布局属性翻了一遍都没问题,后来才知道是浏览器处理全角标点换行的规则在作怪。这篇记下排查过程,以及 line-break 这个属性该怎么用。
把最新版 Intel SDM 和早年的 80386 datasheet 摆在一起对着读,偶尔会撞见几处不太一致的地方。这篇最短,只记三件小事:LAHF 指令在旧手册里的描述错误、within segment 与 intersegment 的用词变化,以及 JCXZ / JECXZ 说明中一个不常见的介词。
sleep() 在不同语言里由不同的库提供,可它本身究竟是怎么实现的?这篇从单片机的软件延时、硬件定时器延时之间的取舍讲起,再落到 ez-rtos 里基于 nowtick 和时基列表的实现,看看一个任务睡着的时候,CPU 是怎么被让出去给别的任务的。
上一章写完了任务切换器,但翻遍代码也没看到有人调用 PendSVHandler。这篇就来回答这个悬念:Cortex-M3 内核级的 SysTick 如何定时触发,为什么工业级 OS 不直接在 SysTick 里切换任务,而要再绕一层 PendSV 可悬起中断,以及「中断共振」是怎么被避开的。
一个 main() 函数只能顺序执行,那多个任务「同时」跑是怎么做到的?这篇拆开 ez-rtos 的任务切换器:为什么要先引入 idle 任务、Cortex-M3 的 MSP/PSP 双栈与中断自动压栈是怎么一回事,然后逐段读 PendSVHandler 的汇编,看清楚保存上下文、选下一个任务、恢复上下文这三步。
单片机上电之后,CPU 第一件事到底做了什么?这篇沿着 Cortex-M3 的启动流程走一遍:从内存 0x00000000 处的栈顶指针与 ResetHandler,看官方 startup 文件里的 ARM 伪指令、SystemInit 对时钟的配置,再到 main() 里 osinit() 与 osstart() 组成的那段 bootloader,顺便聊一...
《从零开始写一个操作系统》这个系列,我会用自己写的 ez-rtos 当案例,讲清楚一个操作系统到底是怎么跑起来的。第一篇先补齐背景:CPU、指令集、指令集架构、微架构、单片机分别指什么,为什么选 STM32F103 和 Cortex-M3 而不是 X86,最后把 Keil 5 的编译与仿真环境跑通,看到 GPIO 电平在仿真里跳动。
家里摆一台机架服务器当 NAS,最先受不了的往往是风扇噪音。这篇从「服务器为什么不能像家用 PC 那样在 BIOS 里调风扇」讲起,先把 BMC 与 IPMI 的分工理清楚,再一步步用网线和 ipmitool 连上 iDRAC,关闭自动控速、手动设定转速,最后附上我写的 C# GUI 小工具以及一组保守的转速参考值。
placeholder 与 focus是 前端开发中很容易被忽略的小地方。placeholder 这半篇讲它该怎么配色、Webkit 下为什么反而能被选中,以及怎么用伪元素把它禁掉;focus 这半篇从「浏览器的原生焦点样式为什么会被自己写的按钮样式弄丢」讲起,再介绍 :focus-visible 与它当年的 polyfill。
整理几个游戏里常见的「障眼法」:用 2D 图片冒充树木和火焰的 billboard、无限滚动的背景、拿法线贴图伪造凹凸、事先烘焙好的静态反光,以及手游里为了省性能而做的假抗锯齿。例子多半来自 CS:GO、绝地求生和王者荣耀。