有朋从远方来,不亦乐乎?

我是羽衣甘蓝_Yurikale,你也可以叫我 Markchai。这里是我的个人博客,记录一些生活、学习和工作中的点滴。

ESP32-S3-RLCD-4.2 从零点亮:环境搭建与第一个例程

前阵子买了块微雪 ESP32-S3-RLCD-4.2,人生第一次正经玩 ESP32。从拆包装到屏幕亮起来,中间踩了一串坑。这篇就当给同样刚入门的自己留个记录,顺便给后来人排排雷。 这块板子是什么 简单说,就是一块带 4.2 寸反射式 LCD 的 ESP32-S3 开发板,核心是 ESP32-S3-WROOM-1-N16R8: 双核 Xtensa LX7 @ 240MHz 16MB Flash + 8MB PSRAM 4.2 寸 400 x 300 反射式屏幕,驱动芯片 ST7305,不需要背光(室内光就能看清,很像电子纸) 音频模块 ES8311 + ES7210(双麦克风) PCF85063 RTC、SHTC3 温湿度、TF 卡槽、USB Type-C 支持 18650 电池 官方文档在 docs.waveshare.net/wiki/ESP32-S3-RLCD-4.2,同时提供 Arduino 和 ESP-IDF 两条路线。新手闭眼选 Arduino。 第一步:确认电脑认出了板子 用 USB-C 线插上电脑,打开设备管理器,能看到两个设备: USB JTAG/serial debug unit USB 串行设备 (COM3) 硬件 ID 是 USB\VID_303A&PID_1001,也就是 ESP32-S3 的原生 USB 串口/JTAG。好消息是这块板不需要装 CP210x 或 CH340 驱动,Windows 直接就能用。 ...

2026年8月28日 · 2 分钟

矩阵引入

1. 从基底的角度看向量 对于一个向量 $(x, y)$,或者更严谨地, $\left[\begin{array}{c}x \\y\end{array}\right]$ ,在平面中相当于 $x$ 和 $y$ 分别与两个正交基底(标准基)相乘的和: $$ \left[\begin{array}{c}x \\y\end{array}\right] = x \left[\begin{array}{c}1\\0\end{array}\right] + y \left[\begin{array}{c}0\\1\end{array}\right] $$2. 线性变换 我们不是换基底, 我们做的是:基底不变(永远是标准基),但把整个向量按某种规则拉伸/旋转。 具体操作是: 标准基 $\left[\begin{array}{c}1\\0\end{array}\right]$ 被映射到了新位置 $\left[\begin{array}{c}a\\b\end{array}\right]$ 标准基 $\left[\begin{array}{c}0\\1\end{array}\right]$ 被映射到了新位置 $\left[\begin{array}{c}c\\d\end{array}\right]$ 那么,原来的向量 $\left[\begin{array}{c}x \\y\end{array}\right]$ 是由 $x$ 个 $\left[\begin{array}{c}1\\0\end{array}\right]$ 和 $y$ 个 $\left[\begin{array}{c}0\\1\end{array}\right]$ 拼成的。 经过这个变换后,它就变成由 $x$ 个 $\left[\begin{array}{c}a\\b\end{array}\right]$ 和 $y$ 个 $\left[\begin{array}{c}c\\d\end{array}\right]$ 拼成的新向量: $$ \left[\begin{array}{c} x' \\y'\end{array}\right] = x \left[\begin{array}{c}a\\b\end{array}\right] + y \left[\begin{array}{c}c\\d\end{array}\right] = \left[\begin{array}{c}a \cdot x + c \cdot y \\b \cdot x + d \cdot y \end{array}\right] $$注意我们在这里所做的操作是:把原向量在标准基下的系数 $x$ 和 $y$ 分别和新基底(其实是变换后的基)相乘,得到的向量用 $\left[\begin{array}{c}x' \\y'\end{array}\right]$ 表示。 ...

2026年8月14日 · 1 分钟

确界原理(2):测量法证明存在性

在上一篇笔记中提到了用戴德金连续性公理证明确界原理,然而这节北大的公开课中提到了一种被称为“测量法”的证明方法,可以用直观的实数构造方法证明确界的存在性. 下面我们用下确界来举例,上确界的证明同理. 1. 用尺子量出下确界 想象我们在实数轴上有一把无限精度的尺子,我们要用这个尺子来“量”出下界. 为了简单,我们把需要求下确界的任意有下界非空 $E \subset \mathbb{R}$ 平移到其元素全在正轴上. 然后: 从 $0$ 开始数,$0$ 是下界吗?是;$1$ 是下界吗?是;$2$ 是下界吗?是;… $a_0 + 1$ 是下界吗?不是! 哦,$a_0$ 是下界,但 $a_0 + 1$ 是不下界. 好的,接下来,我们截取尺子中 $a_0$ ~ $a_0 + 1$ 这一段,放大. 继续数. $a_0.1$ 是下界吗?是;$a_0.2$ 是下界吗?是;… $a_0.a_1$ 是下界吗?是!$a_0.a_1 + \frac{1}{10}$ 是下界吗?不是! 现在 $a_0.a_1$ 是下界,但 $a_0.a_1 + \frac{1}{10}$ 不是下界了. 不要停,接下来继续截取尺子上 $a_0.a_1$ ~ $a_0.a_1 + \frac{1}{10}$ 的一小段,放大. 从 $a_0.a_11$, $a_0.a_12$, $a_0.a_13$ 一直数,直到找到 $a_0.a_1k$ 不是下界,然后令 $a_2 = k - 1$ 得到小数 $a_0.a_1a_2$ 是该精度下最后一个下界. ...

2026年8月2日 · 4 分钟

确界原理

本文是实数理论中确界原理的完整笔记,包含与戴德金连续性公理的等价性证明. 1. 有界集 $\exists E \subseteq \mathbb{R}$ 上界:不唯一,大于等于集合 $E$ 的最大值的任何数. $$ \exists L \in \mathbb{R}, \quad \text{s.t.} \forall x\in E, \quad x \leq L \iff E 有上界,L 为 E的一个上界。 $$ 下界同理. $$ \exists l \in \mathbb{R}, \quad \text{s.t.} \forall x\in E, \quad x \geq l \iff E 有下界,l 为 E的一个下界。 $$ $E$ 同时拥有上界和下界,称 $E$ 为有界集合: $$ \exists M \gt 0, \quad \text{s.t. } x\in E, \quad \left|x\right|\leq M \iff M \geq \text{max}\{\left| l\right|, \left| L\right|\} $$ 2. 确界 2.1 定义 上下界是不唯一的,确界就是恰好包住集合的上下界,相当于集合的上下边界. ...

2026年7月31日 · 3 分钟

BlockyLauncher —— 新一代模块化 Minecraft 启动器

Minecraft 启动器这块向来不缺选择:官启、HMCL、PCL、BakaXL,甚至美西螈启动器……那为什么还要自己写一个? 原因很简单——我想要一个真正模块化的启动器。不是那种"支持插件"但核心代码拧成一团的,而是从底层架构就允许每个功能被独立替换、独立扩展的。另外我也想用 .NET 10 + Avalonia UI 写点真正能用的东西,而不是整天写 CRUD(笑)。 于是就写了 BlockyLauncher。 整体架构 BlockyLauncher 分成五层: BlockyLauncher.Abstractions # 纯接口层 BlockyLauncher.PluginSDK # 插件开发 SDK BlockyLauncher.Framework # 框架核心实现 BlockyLauncher.Desktop # Avalonia 桌面入口 BlockyLauncher.Plugins.BuiltIn # 6 个内置插件 有趣的地方在于,「内置」插件其实走的是和第三方插件完全一样的加载通道。它们在 .csproj 里用 Private="false" ReferenceOutputAssembly="false" 引用,编译时不链接,运行时从 builtin/ 目录动态加载。也就是说,启动器的核心功能和第三方开发者将来写的一个插件,在框架眼里是没有区别的。其实这里是在致敬 Koishi。 这意味着什么? 这个这意味着启动器的核心跟 Minecraft 是完全解耦的!甚至创建 Minecraft 游戏实例、启动 Minecraft 游戏、管理 JVM 等等启动器的核心功能,都只是插件,只不过是预装的而已。你未来大可以写一个 Minecraft Server 启动器插件、Touhou 启动器插件,甚至 PS 主机游戏启动插件,并且可以将你自己的插件分发,其他人只需在“设置”里动动鼠标即可一键安装。 插件怎么工作 每个插件实现 IPlugin 接口的三个方法: public interface IPlugin { string Id { get; } Task InitializeAsync(IPluginContext context); Task OnServicesReadyAsync(IServiceProvider services); Task ShutdownAsync(); } InitializeAsync 里注册视图、服务、设置页面,这时候你只能用自己的东西 OnServicesReadyAsync 时所有服务都就位了,可以获取其他插件注册的服务来协作。 ShutdownAsync 收尸。 插件通过 IPluginContext 接触到框架提供的一切能力,包括但不限于注册导航页面、注册设置页面、发布/订阅事件、注册自己的服务给别人用。配合 manifest.json 描述元信息: ...

2026年7月27日 · 2 分钟

Windows 装包神器 Chocolatey 安装指南

Chocolatey 是 Windows 上的包管理器,类似 Linux 的 apt 或 brew。有了它你就不用再跑去浏览器搜软件、找下载按钮、下一步下一步了,一行命令装完。 安装 准备工作 首先以管理员身份打开 PowerShell。 以防你不知道怎么以管理员身份运行:右键左下角开始菜单 → 终端。如果弹出 UAC 窗口,点"是"。 然后执行粘贴这一条命令: Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1')) 等它跑完,关掉这个 PowerShell 再重新打开一个。执行 choco -?,如果能看到一堆帮助信息就说明装好了。 验证 choco --version 换源(可选) 国内网络环境下,默认源可能很慢。换到中科大的镜像: choco source add -n=ustc -s=https://mirrors.ustc.edu.cn/chocolatey/ --priority=1 choco source remove -n=chocolatey 日常用法 搜软件: choco search firefox 安装: choco install firefox -y -y 的意思是自动确认,不加的话每一步都要你手动确认。 升级所有已装软件: choco upgrade all -y 卸载: choco uninstall firefox -y 一些用得上 choco 装的东西 choco install vscode -y # VS Code choco install 7zip -y # 解压 choco install everything -y # 文件搜索 choco install powertoys -y # 微软小工具集 choco install openssh -y # SSH 客户端 choco install nodejs-lts -y # Node.js choco install git -y # Git 大部分软件装完后需要重新打开终端才能用新加的环境变量。如果刚装完 choco 提示找不到命令,关掉终端重开就好。别问我怎么知道的 ...

2026年7月26日 · 1 分钟

最速 CodeX CLI + DeepSeek 安装方法

CodeX 是程序员的有力杀手,有了它哪怕你是美少女不懂编程的萌新,也能高效完成复杂项目的开发。CodeX CLI 是 CodeX 的命令行版本,更加适合新手,操作简单。本文将分享使用 DeepSeek API 的 CodeX 安装指南。学会了这个以后可以自己换成其他模型的 API。 安装教程 API 准备 首先打开 DeepSeek 开放平台,如果你还没有充值过,请先给 DeepSeek 充值。当充值完成,打开 “API keys” 页面,创建一个 API key,它长这样:sk-....。 以防你不知道 API 是什么意思:简单理解,就是服务提供者给你提供的一个接口,你可以用这个接口去享受服务(在这里就是大模型服务)。 安装 CC Switch CodeX 默认只支持 OpenAI 自己家的模型(没错就是 ChatGPT),但是,通过 CC Switc 这个工具,可以强制让他支持几乎所有的模型。 关于 CC Switch:CC 的意思是 Claude Code。没错,它一开始是为 CodeX 的竞品 Cluade Code(简称CC)设计的,用于强制 CC 使用自定义的模型。它的原理简单说就是将原本发往 OpenAI / Anthropic 自家模型的网络请求偷偷路由到你设定的模型提供商(正如这里的 DeepSeek)上,来帮助你省钱。 CC Switch 下载:Release 页面 对于网络不太好的 Windows 同学:CC-Switch-v3.18.0-Windows.msi,由 gh-proxy.com 代理 安装完毕后,先点击全屏。先点击顶部的 CodeX 图标,然后再点击右边的加号。 接下来,在新出现的页面往下滚动找到 DeepSeek,点击。 ...

2026年7月26日 · 1 分钟

双曲函数

$$\begin{aligned} &\text{双曲正弦}\quad\mathrm{sh}x=\frac{\mathrm{e}^{x}-\mathrm{e}^{-x}}{2}, &x\in (-\infty, +\infty) \\ &\text{双曲余弦}\quad\mathrm{ch}x=\frac{\mathrm{e}^{x}+\mathrm{e}^{-x}}{2}, &x\in (-\infty, +\infty) \\&\text{双曲正切}\quad\mathrm{th}x=\frac{\mathrm{sh}x}{\mathrm{ch}x}=\frac{\mathrm{e}^{x}-\mathrm{e}^{-x}}{\mathrm{e}^{x}+\mathrm{e}^{-x}}, &x\in (-\infty, +\infty) \end{aligned} $$1. 双曲正弦 $$ \sinh{x} = \frac{e^x - e^{-x}}{2}, x \in (-\infty, +\infty) $$ 正减负 奇函数. 单增. 当$x$ 的绝对值很大时, 它的图形在第一象限内接近于曲线 $y=\frac12\mathrm{e}^{x}$, 在第三象限内接近于曲线 $y=-\frac12\mathrm{e}^{-x}$ 2. 双曲余弦 $$ \cosh x = \frac{e^x + e^{-x}}{2}, x\in(-\infty,+\infty) $$ 正加负 偶函数. 先递减后递增. 当$x$ 的绝对值很大时, 它的图形在第一象限内接近于曲线 $y=\frac12\mathrm{e}^{x}$, 在第三象限内接近于曲线 $y=\frac12\mathrm{e}^{-x}$ 3. 双曲正切 $$ \tanh x = \frac{\sinh x}{\cosh x} $$ 跟三角函数一样上正下余. 奇函数. 单增. 有界:$[-1, 1]$ 5. 性质 5.1 “分配律” 对于 $\sinh$ ,类似 $\sin$ ; 对于 $cosh$,类似 $\cos$,但是展开后符号与括号内符号相同,即和三角函数的相反. $$\begin{aligned} &\mathrm{sh}(x+y)=\mathrm{sh}x \times \mathrm{ch}y+\mathrm{ch}x \times \mathrm{sh}y, \\&\mathrm{sh}(x-y)=\mathrm{sh}x\times \mathrm{ch}y-\mathrm{ch}x\times\mathrm{sh}y, \\&\mathrm{ch}(x+y)=\mathrm{ch}x\times\mathrm{ch}y+\mathrm{sh}x\times\mathrm{sh}y, \\&\mathrm{ch}(x-y)=\mathrm{ch}x\times\mathrm{ch}y-\mathrm{sh}x\times\mathrm{sh}y. \end{aligned} $$ 5.2 恒等式 注意到 ...

2026年7月26日 · 2 分钟

数列极限

1. 定义 若对任给的正数$\varepsilon$,总存在正整数$N$,使得当$n>N$时,有$\left|a_n-a \right|\lt\varepsilon$,则称数列$\{a_n\}$收敛于$a$记做$\lim_{n\rightarrow\infty}a_n=a$或$a_n\rightarrow a(n\rightarrow\infty)$ . 2. 证明方法 2.1 例题: $$ 设x_n=\frac n{2n+1},观察x_n的极限值,并证明之. $$ 判断: $$ \begin{aligned} &x_n = \frac{1}{2+\frac{1}{n}} \\ &当 n\rightarrow\infty时,\frac{1}{n}\rightarrow0 \\ \therefore &\lim_{n\rightarrow\infty}x_n = \frac{1}{2} \end{aligned} $$ 分析 $$ \begin{aligned} 先计算差值的绝对值: \left|\frac{n}{2n+1} - \frac{1}{2}\right| &=\left| \frac{-1}{4n+2} \right| \\ &=\frac{1}{4n+2} \\ \end{aligned} $$ $$ \begin{aligned} 根据定义,这个值必须小于任意给定的正数\varepsilon,即: \end{aligned} $$ $$ \begin{aligned} \frac{1}{4n+2}&\lt\varepsilon \\ 解得 n &\gt \frac{1}{4\varepsilon}-\frac{1}{2} \end{aligned} $$ $$ \begin{aligned} 所以取 N = \lfloor\frac{1}{4\varepsilon}-\frac{1}{2}\rfloor + 1 \end{aligned} $$ 3. 证明 ...

2026年7月26日 · 2 分钟

Hello World

终于搞好了呢(笑)。以后可以来水文章啦。

2026年7月26日 · 1 分钟