<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>王小明的杂物堆</title><description>乱七八糟就像我一样</description><link>https://imwzj.uk/</link><language>zh_CN</language><item><title>数字图像处理技术记录</title><link>https://imwzj.uk/posts/%E6%95%B0%E5%AD%97%E5%9B%BE%E5%83%8F%E5%A4%84%E7%90%86%E6%8A%80%E6%9C%AF%E8%AE%B0%E5%BD%95/</link><guid isPermaLink="true">https://imwzj.uk/posts/%E6%95%B0%E5%AD%97%E5%9B%BE%E5%83%8F%E5%A4%84%E7%90%86%E6%8A%80%E6%9C%AF%E8%AE%B0%E5%BD%95/</guid><description>晚上就要讲这个的 PPT 了，我还是啥也不知道</description><pubDate>Thu, 27 Nov 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;为了防止晚上的讲解太离谱，我准备再看看用到的相关技术（虽然有可能都轮不到我，那么多人都要讲哎！）。&lt;/p&gt;
&lt;h2&gt;LAB 色彩空间&lt;/h2&gt;
&lt;p&gt;LAB 代表明度、A、B。设计为感知均匀，意味着小的变化对应小的感知变化。其目标是模仿人类看和解释颜色的方法。&lt;/p&gt;
&lt;p&gt;L (亮度): 图像的亮度（0–100 范围，但在 OpenCV 中映射到 0–255）。
A (绿–红): 正值表示红色，负值表示绿色。
B (蓝–黄): 正值表示黄色，负值表示蓝色。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Ouzr0107/picx-images-hosting/raw/master/lab.2a5j0k3ruu.webp&quot; alt=&quot;LAB 色彩空间&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;高斯模糊&lt;/h2&gt;
&lt;p&gt;高斯模糊（英语：Gaussian Blur），也叫高斯平滑，是在Adobe Photoshop、GIMP以及Paint.NET等图像处理软件中广泛使用的处理效果，通常用它来减少图像噪声以及降低细节层次。&lt;/p&gt;
&lt;p&gt;高斯模糊是一种图像模糊滤波器，它用正态分布计算图像中每个像素的变换。N维空间正态分布方程为&lt;/p&gt;
&lt;p&gt;$$G(r)=\frac{1}{\sqrt{2\pi\sigma^{2}}{}^{N}}e^{-r^{2}/(2\sigma^{2})}$$&lt;/p&gt;
&lt;p&gt;在二维空间定义为&lt;/p&gt;
&lt;p&gt;$$G(u,v)=\frac{1}{2\pi\sigma^{2}}e^{-(u^{2}+v^{2})/(2\sigma^{2})}$$&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Ouzr0107/picx-images-hosting/raw/master/image.7eh7puirtm.png&quot; alt=&quot;正态分布图像&quot; /&gt;&lt;/p&gt;
&lt;p&gt;计算平均值的时候，我们只需要将&quot;中心点&quot;作为原点，其他点按照其在正态曲线上的位置，分配权重，就可以得到一个加权平均值。&lt;/p&gt;
&lt;p&gt;假定中心点的坐标是（0,0），那么距离它最近的8个点的坐标如下：&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Ouzr0107/picx-images-hosting/raw/master/bg2012111410.szdyto0x3.png&quot; alt=&quot;坐标&quot; /&gt;&lt;/p&gt;
&lt;p&gt;为了计算权重矩阵，需要自己设定σ模糊半径（指的就是你中心点与周围像素的距离取值后所确定的值）。我们来定σ=1.5，则模糊半径为1.5的权重矩阵如下：&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Ouzr0107/picx-images-hosting/raw/master/bg2012111411.73udwpcuqu.png&quot; alt=&quot;初始权重&quot; /&gt;&lt;/p&gt;
&lt;p&gt;为了完成权重矩阵的归一化，我们还需要对上面的各值进行除于他们的总值的计算，目的是让最终的图像通道的权重总值为1，不然使用总值大于1的卷积滤镜会让图像偏亮，小于1的卷积滤镜会让图像偏暗。这九个权重值的总和等于0.4787147，所以我们直接进行除法运算，得到以下的权重矩阵。
这个权重矩阵就是我们最终得到的高斯核！！即滤波器矩阵&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Ouzr0107/picx-images-hosting/raw/master/bg2012111412.wizwjh3mu.png&quot; alt=&quot;归一化&quot; /&gt;&lt;/p&gt;
&lt;p&gt;有了权重矩阵，就可以计算高斯模糊的值了。
假设现有9个像素点，灰度值（0-255）如下：&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Ouzr0107/picx-images-hosting/raw/master/bg2012111413.6m4c84c52l.png&quot; alt=&quot;灰度值&quot; /&gt;&lt;/p&gt;
&lt;p&gt;每个点乘以自己的权重值得到&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Ouzr0107/picx-images-hosting/raw/master/bg2012111416.102lu9a6cm.png&quot; alt=&quot;乘以权重&quot; /&gt;&lt;/p&gt;
&lt;p&gt;将这9个值加起来，就是中心点的高斯模糊的值。&lt;/p&gt;
&lt;p&gt;对所有点重复这个过程，就得到了高斯模糊后的图像。如果原图是彩色图片，可以对RGB三个通道分别做高斯模糊。&lt;/p&gt;
&lt;p&gt;参考&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.ruanyifeng.com/blog/2012/11/gaussian_blur.html&quot;&gt;高斯模糊的算法&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://zh.wikipedia.org/wiki/%E9%AB%98%E6%96%AF%E6%A8%A1%E7%B3%8A&quot;&gt;高斯模糊维基百科&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Canny 边缘检测&lt;/h2&gt;
&lt;p&gt;坎尼边缘检测算子是澳洲计算机科学家约翰·坎尼于1986年开发出来的一个多级边缘检测算法。更为重要的是坎尼创立了“边缘检测计算理论”（computational theory of edge detection）解释这项技术如何工作。&lt;/p&gt;
&lt;h3&gt;步骤&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;消除噪声：使用高斯平滑滤波器卷积降噪。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;计算梯度幅值和方向：可选用soble算子、Prewitt算子、Roberts模板等等。这样就可以得图像在x和y方向梯度。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;非极大值抑制：非极大值抑制是进行边缘检测的一个重要步骤，通俗意义上是指寻找像素点局部最大值。在每一点上，领域中心x与沿着其对应的梯度方向的两个像素相比，若中心像素为最大值，则保留，否则中心置0，这样可以抑制非极大值，保留局部梯度最大的点，以细化边缘。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;滞后阈值(Hysteresis thresholding)：滞后阈值需要两个阈值(高阈值和低阈值)。
在施加非极大值抑制之后，剩余的像素可以更准确地表示图像中的实际边缘。然而，仍然存在由于噪声和颜色变化引起的一些边缘像素。为了解决这些杂散响应，必须用弱梯度值过滤边缘像素，并保留具有高梯度值的边缘像素，可以通过选择高低阈值来实现。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;如果某一像素位置的幅值超过高阈值，该像素被保留为边缘像素。&lt;/li&gt;
&lt;li&gt;如果某一像素位置的幅值小于低阈值，该像素被排除。&lt;/li&gt;
&lt;li&gt;如果某一像素位置的幅值在两个阈值之间，则根据连通性来分类为边缘或者非边缘：该像素与确定为边缘的像素点邻接，则判定为边缘；否则为非边缘。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;参考：&lt;a href=&quot;https://blog.csdn.net/leonardohaig/article/details/122141568&quot;&gt;Canny边缘检测算法及实现&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;霍夫圆变换&lt;/h2&gt;
&lt;p&gt;霍夫梯度法的原理&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;估计圆心&lt;/li&gt;
&lt;/ul&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;把原图做一次 Canny 边缘检测，得到边缘检测的二值图。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;对原始图像执行一次 Sobel 算子，计算出所有像素的邻域梯度值。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;初始化圆心空间 N(a,b)，令所有的 N(a,b)=0。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;遍历 Canny 边缘二值图中的所有非零像素点，沿着梯度方向 ( 切线的垂直方向 )画线，将线段经过的所有累加器中的点 (a,b) 的 N(a,b)+=1。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Ouzr0107/picx-images-hosting/raw/master/1760131-20200220000459534-1166499045.73udwqzd6n.png&quot; alt=&quot;点累加&quot; /&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;统计排序 N(a,b)，得到可能的圆心（N(a,b) 越大，越有可能是圆心）。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Ouzr0107/picx-images-hosting/raw/master/1760131-20200220113249369-1235776308.2h8qw20tj2.png&quot; alt=&quot;统计排序&quot; /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;估计半径（针对某一个圆心 (a,b)）&lt;/li&gt;
&lt;/ul&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;计算 Canny 图中所有非 0 点距离圆心的距离。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;距离从小到大排序，根据阈值，选取合适的可能半径（比如 3 和 3.5 都被划为半径值 3 中）。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;初始化半径空间 r, N(r)=0。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;遍历 Canny 图中的非 0 点，N( 距离 )+=1。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;统计得到可能的半径值（N(r) 越大，说明这个距离值出现次数越多，越有可能是半径值）。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;参考：&lt;a href=&quot;https://www.cnblogs.com/bjxqmy/p/12333022.html&quot;&gt;opencv —— HoughCircles 霍夫圆变换原理及圆检测&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Sobel 算子&lt;/h2&gt;
&lt;p&gt;索伯算子（Sobel operator）是图像处理中的算子之一，有时又称为索伯-费尔德曼算子或索伯滤波器，在影像处理及电脑视觉领域中常被用来做边缘检测。&lt;/p&gt;
&lt;p&gt;该算子包含两组3x3的矩阵，分别为横向及纵向，将之与图像作平面卷积。如果以
${\displaystyle \mathbf {A} }$ 代表原始图像， ${\displaystyle \mathbf {G_{x}} }$ 及 ${\displaystyle \mathbf {G_{y}} }$ 分别代表经横向及纵向边缘检测的图像，其公式如下：&lt;/p&gt;
&lt;p&gt;$$
\mathbf{G}&lt;em&gt;{\mathbf{x}}=\left[\begin{array}{lll}{+1}&amp;amp;{0}&amp;amp;{-1}\
{+2}&amp;amp;{0}&amp;amp;{-2}\
{+1}&amp;amp;{0}&amp;amp;{-1}\end{array}\right]*\mathbf{A}\quad\mathrm{and}\quad\mathbf{G}&lt;/em&gt;{\mathbf{y}}=\left[\begin{array}{lll}{+1}&amp;amp;{+2}&amp;amp;{+1}\
{0}&amp;amp;{0}&amp;amp;{0}\
{-1}&amp;amp;{-2}&amp;amp;{-1}\end{array}\right]*\mathbf{A}
$$&lt;/p&gt;
&lt;p&gt;图像的每一个像素的横向及纵向梯度近似值可用以下的公式结合，来计算梯度的大小。&lt;/p&gt;
&lt;p&gt;$$\mathbf{G}=\sqrt{\mathbf{G_{x}}^{2}+\mathbf{G_{y}}^{2}}$$&lt;/p&gt;
&lt;p&gt;然后可用以下公式计算梯度方向。&lt;/p&gt;
&lt;p&gt;$$\mathbf{\Theta}=\arctan\biggl(\frac{\mathbf{G_{y}}}{\mathbf{G_{x}}}\biggr)$$&lt;/p&gt;
&lt;p&gt;以纵向边缘为例，如果角度
${\displaystyle \Theta }$ 等于零，即代表图像的纵向边缘右方较亮；若为 ${\displaystyle \pi }$ ，则左方较亮。&lt;/p&gt;
&lt;p&gt;参考：&lt;a href=&quot;https://zh.wikipedia.org/wiki/%E7%B4%A2%E4%BC%AF%E7%AE%97%E5%AD%90&quot;&gt;索伯算子 wiki&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;双边滤波&lt;/h2&gt;
&lt;p&gt;双边滤波（Bilateral filter）是一种非线性的滤波方法，是结合图像的空间邻近度和像素值相似度的一种折衷处理，同时考虑空域信息和灰度相似性，达到保边去噪的目的。具有简单、非迭代、局部的特点。&lt;/p&gt;
&lt;p&gt;双边滤波器的好处是可以做边缘保存（edge preserving），一般用高斯滤波去降噪，会较明显地模糊边缘，对于高频细节的保护效果并不明显。双边滤波器顾名思义比高斯滤波多了一个高斯方差sigma－d，它是基于空间分布的高斯滤波函数，所以在边缘附近，离的较远的像素不会太多影响到边缘上的像素值，这样就保证了边缘附近像素值的保存。但是由于保存了过多的高频信息，对于彩色图像里的高频噪声，双边滤波器不能够干净的滤掉，只能够对于低频信息进行较好的滤波。&lt;/p&gt;
&lt;p&gt;权重系数w(i,j,k,l)取决于空间域核d与值域核r的乘积：&lt;/p&gt;
&lt;p&gt;空间域核d,表示邻域内某点(k,l)与中心点(i,j)的欧式距离:&lt;/p&gt;
&lt;p&gt;$$\mathrm{d(i,j,k,l)=\exp(-\frac{(i-k)^{2}+(j-l)^{2}}{2\sigma_{d}^{2}})},$$&lt;/p&gt;
&lt;p&gt;值域核r,表示邻域内某点(k,l)的灰度值f(k,l)与中心点(i,j)灰度值f(i,j)的差的绝对值:&lt;/p&gt;
&lt;p&gt;$$\mathrm{r(i,j,k,l)=exp(-\frac{||f(i,j)-f(k,l)||^{2}}{2\sigma_{r}^{2}})},$$&lt;/p&gt;
&lt;p&gt;参考：&lt;a href=&quot;https://blog.csdn.net/leonardohaig/article/details/118058527&quot;&gt;双边滤波算法原理及代码介绍&lt;/a&gt;&lt;/p&gt;
</content:encoded></item><item><title>睡前小记（一）</title><link>https://imwzj.uk/posts/%E7%9D%A1%E5%89%8D%E5%B0%8F%E8%AE%B0%E4%B8%80/</link><guid isPermaLink="true">https://imwzj.uk/posts/%E7%9D%A1%E5%89%8D%E5%B0%8F%E8%AE%B0%E4%B8%80/</guid><description>突然想起这个博客用手机写也挺方便，那不如用睡前这点时间稍微写点，比乱刷 b 站要好一点点。</description><pubDate>Mon, 24 Nov 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;虽说是日常，但是第一个要讲的点却还是与叶敏超的课有关，我是不是有点毛病？&lt;/p&gt;
&lt;h2&gt;嫩&lt;/h2&gt;
&lt;p&gt;总的来说，我还是太嫩了。&lt;/p&gt;
&lt;p&gt;从技术上讲，虽然我写模型的确用到了 AI，但是从模型初版到最后的实现，已经修改过太多太多，留下的的确差不多只剩下几个名字了，没想到这都能被他问到，也是有够无语的。但是他问的层数的问题，虽然主观上我是能够回答的，但是我的确没有什么确切的证据，这也是我不能自信回答的原因。作为研究生，名字里有个“研”字，做东西就应该严谨一些，可惜我这次还是以毕设时候的心态，的确不该啊。其次，我的演示的确也很有问题。我这个人有时候就是太极端了，哪有 PPT 真一点文字说明都没有，全靠自己嘴讲，最后结果也不太行。虽然这也有他不怎么听，纯靠最后问问题时乱看的原因，但有必要的说明性文字对所有观看的人来说，也是有用的。吃一堑长一智吧！&lt;/p&gt;
&lt;p&gt;从心态上来将，虽然我这次在台下准备没有那么紧张（可能是因为不认真吧2333），但在台上讲话，思路还是跳来跳去的。一被问问题，就开始胡言乱语了，有的问题本不该如此草率地回答。明明这个学期这门课前，我已经上台过两次了，为什么还是没有正常的表现呢？怪伤心的，难道我不能靠多上台习惯吗😢。说不定我需要在台上深呼吸吧，哈哈……&lt;/p&gt;
&lt;h2&gt;忙&lt;/h2&gt;
&lt;p&gt;在我的常识里，如果感到空虚的话，忙碌会是比较有效的特效药。但我也经不起这么折磨的安排啊！那么多的论文和讲解，如果我要吃一堑长一智好好准备，那时间也不是很够啊！一想到下个学期课就会少一些，我就更着急了。焦虑的灵魂配上懒惰的身体，我这就是内耗圣体啊！我不想做一个只会倾吐苦水的人，但我的确没有什么比较好的疏解方式，总不能天天 ✈️ 吧！（那真成废人了）看电棍和 Bo 的歌曲虽然有一丢丢的用处，但感觉不够健康，因为里面的发泄，带有一部分的恶意，有种要是不找新的解决方案的话，就会变成一个粗俗的人的直觉。&lt;/p&gt;
&lt;p&gt;健身的话还得再想想，因为健身对我来说缺少一点娱乐性，太功利了，想要类似于骑车那种可以四处探索的小惊喜，只在室内，只会让我感到压抑。但话不能说死，说不定等我突然又身材焦虑了，就会考虑健身了。&lt;/p&gt;
&lt;h2&gt;尾&lt;/h2&gt;
&lt;p&gt;手机打字好麻烦啊，可是电脑打字又怕室友看到（你这发出来不就是要让别人看的吗），要是可以把自己挂在晾衣绳上晒就好了。&lt;/p&gt;
</content:encoded></item><item><title>Paper Burner X 使用贴士</title><link>https://imwzj.uk/posts/paper-burner-x-%E4%BD%BF%E7%94%A8%E8%B4%B4%E5%A3%AB/</link><guid isPermaLink="true">https://imwzj.uk/posts/paper-burner-x-%E4%BD%BF%E7%94%A8%E8%B4%B4%E5%A3%AB/</guid><description>这个开源工具的介绍里面教程放得乱七八糟的，有的甚至是我在代码库里搜索才找到的，感觉里面的 wiki 要快点完善了。</description><pubDate>Thu, 13 Nov 2025 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;网址&lt;/h2&gt;
&lt;p&gt;在线体验：&lt;a href=&quot;https://paperburner.viwoplus.site/&quot;&gt;https://paperburner.viwoplus.site/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;虽然仓库里面有前端部署的教程，但是毕竟是在 vercel 上，延迟比较大的同时，在使用过程中还会出现 AI 分析未响应的问题（我暂且认定是这里导致的问题），所以直接用作者已经搭好的网站即可。数据是放在浏览器本地的，所以只要不随便清理浏览器存储，应该不会出太大问题，更不用担心隐私的问题。（API Key 应该没有问题）&lt;/p&gt;
&lt;h2&gt;API 配置&lt;/h2&gt;
&lt;p&gt;需要在浏览器中配置以下 API 密钥（本地存储）：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;OCR 服务&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/opendatalab/MinerU&quot;&gt;MinerU&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://doc2x.noedgeai.com/&quot;&gt;Doc2X&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://mistral.ai/&quot;&gt;Mistral&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;翻译模型&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://deepseek.com/&quot;&gt;DeepSeek&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://makersuite.google.com/&quot;&gt;Google Gemini&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.anthropic.com/&quot;&gt;Anthropic Claude&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.aliyun.com/&quot;&gt;阿里通义千问&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.volcengine.com/&quot;&gt;火山引擎&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;自定义模型端点...&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;鉴于大家不是很熟悉 API 的申请，这里以 MinerU 和 DeepSeek 为例。&lt;/p&gt;
&lt;h3&gt;MinerU&lt;/h3&gt;
&lt;p&gt;该 API 作用于文档的 OCR 识别。&lt;/p&gt;
&lt;p&gt;首先，进入&lt;a href=&quot;https://mineru.net/apiManage/token&quot;&gt;该网址&lt;/a&gt;，登录过后左侧选择 API 申请，如实填写即可，过几分钟刷新网页就可以选择 API 管理。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Ouzr0107/picx-images-hosting/raw/master/%E5%9B%BE%E7%89%87.86u2nk56ze.webp&quot; alt=&quot;API 管理&quot; /&gt;&lt;/p&gt;
&lt;p&gt;选择创建 API Token，名字随便输即可。接着在 API Tokens 的操作这一栏复制，填入图示位置的 MinerU Token 中。Worker URL 可以填如图&lt;a href=&quot;https://pb-ocr-proxy.wangzhuo0107.workers.dev&quot;&gt;我的网址&lt;/a&gt;，反代应该无伤大雅。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Ouzr0107/picx-images-hosting/raw/master/%E5%9B%BE%E7%89%87.4n84xrg3pb.webp&quot; alt=&quot;MinerU 设置&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;DeepSeek&lt;/h2&gt;
&lt;p&gt;该 API 用于文档的翻译和分析。&lt;/p&gt;
&lt;p&gt;进入 &lt;a href=&quot;https://platform.deepseek.com/usage&quot;&gt;DeepSeek 开放平台&lt;/a&gt;，登录过后选择去充值，这里我充了 10 元，并进行了测试，一篇论文的处理翻译加上 5、6 个问题，消耗的 Token 大概是 0.2元，感觉还不错，如果有比较好的渠道的话，欢迎向我推荐，毕竟囊中羞涩捏。&lt;/p&gt;
&lt;p&gt;之后选择左侧的 API keys，同样创建 API key，但是请注意 &lt;strong&gt;API key 仅在创建时可见可复制，请妥善保存&lt;/strong&gt;。我的话是直接复制到微信的文件传输助手了，你也可以放到别的只有自己可以看到的地方，毕竟&lt;strong&gt;被发现&lt;/strong&gt;的话，会被用到&lt;strong&gt;破产&lt;/strong&gt;！&lt;/p&gt;
&lt;p&gt;接着就是在图示位置选择添加新 key 就 OK 啦。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Ouzr0107/picx-images-hosting/raw/master/%E5%9B%BE%E7%89%87.491p6x2po9.webp&quot; alt=&quot;DeepSeek 设置&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;工作台设置&lt;/h2&gt;
&lt;p&gt;如图设置（当然如果你是其他模型，就随你选啦）&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Ouzr0107/picx-images-hosting/raw/master/%E5%9B%BE%E7%89%87.9dddw79pv2.webp&quot; alt=&quot;工作台设置&quot; /&gt;&lt;/p&gt;
&lt;p&gt;术语库的话，没有就新建一个，这个只能自己慢慢完善了。&lt;/p&gt;
&lt;h2&gt;处理，启动&lt;/h2&gt;
&lt;p&gt;所有设置完，就可以把要处理的论文 pdf 拖入文件上传中，选择开始处理。客观来讲，这个的处理速度是有点慢的，特别是比较大的论文的话，是需要一点时间的。但是读论文这种事，一般人也不会很心急的吧？所以慢慢等就好喽！&lt;/p&gt;
&lt;h2&gt;开始阅读&lt;/h2&gt;
&lt;p&gt;处理完毕的文档你可以直接下载查看，也可以选择左侧的历史记录，选择自己需要的论文点击开始阅读。&lt;/p&gt;
&lt;p&gt;里面会跳弹窗让你选模式什么的，我记得自己好像输入的是 3，目前没感觉有啥区别。&lt;/p&gt;
&lt;p&gt;里面我比较喜欢的是分块对比，毕竟我用的翻译软件是沉浸式翻译，这种双语可看让我比较适应。右下角会有一个小机器人图标，点击以后可以对论文进行 AI 的分析，只能说比拖到其他模型的对话框稍微方便那么一点点。如果它提示分析的 API 没有配置，你就在该对话框的右上边，有个小齿轮，里面可以设置使用的模型，像之前翻译的 API 一样设置即可。&lt;/p&gt;
&lt;h2&gt;总结&lt;/h2&gt;
&lt;p&gt;总的来说，这个工具还比较稚嫩，不完善不合理的设计还有很多，如果你不喜欢国产的小绿鲸，或者是觉得效果一般般的话，用这个尝试也是不错的，毕竟你充值的 API 就算这里不用，也有大把的工具可以用到。如果对教程有疑问或者有什么描述的不清晰的地方，欢迎提问以及建议。💗&lt;/p&gt;
</content:encoded></item><item><title>课程分类模型技术记录</title><link>https://imwzj.uk/posts/%E8%AF%BE%E7%A8%8B%E5%88%86%E7%B1%BB%E6%A8%A1%E5%9E%8B%E6%8A%80%E6%9C%AF%E8%AE%B0%E5%BD%95/</link><guid isPermaLink="true">https://imwzj.uk/posts/%E8%AF%BE%E7%A8%8B%E5%88%86%E7%B1%BB%E6%A8%A1%E5%9E%8B%E6%8A%80%E6%9C%AF%E8%AE%B0%E5%BD%95/</guid><description>为课上ymc的提问做准备</description><pubDate>Thu, 13 Nov 2025 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;N-Gram 模型&lt;/h2&gt;
&lt;p&gt;N-Gram 是一种基于统计语言模型的算法。它的基本思想是将文本里面的内容按照字节进行大小为N的滑动窗口操作，形成了长度是 N 的字节片段序列。&lt;/p&gt;
&lt;p&gt;每一个字节片段称为 gram，对所有 gram 的出现频度进行统计，并且按照事先设定好的阈值进行过滤，形成关键 gram 列表，也就是这个文本的向量特征空间，列表中的每一种 gram 就是一个特征向量维度。&lt;/p&gt;
&lt;p&gt;该模型基于这样一种假设，第 N 个词的出现只与前面 N-1 个词相关，而与其它任何词都不相关，整句的概率就是各个词出现概率的乘积。这些概率可以通过直接从语料中统计 N 个词同时出现的次数得到。常用的是二元的 Bi-Gram 和三元的 Tri-Gram。&lt;/p&gt;
&lt;h3&gt;N-Gram模型用于评估语句是否合理&lt;/h3&gt;
&lt;p&gt;如果我们有一个由 m 个词组成的序列（或者说一个句子），我们希望算得概率，根据链式规则，可得&lt;/p&gt;
&lt;p&gt;$$
p { w _ { 1 }, w _ { 2 }, \dots, w _ { m, 1 } } = p { w _ { 1 } } * p { w _ { 2 } | w _ { 1 } } * p { w _ { 5 } | w _ { 1 }, w _ { 2 } }, \dots, p { w _ { m } | w _ { 1 }, \dots, w _ { m - 1 } }
$$&lt;/p&gt;
&lt;p&gt;这个概率显然并不好算，不妨利用马尔科夫链&lt;/p&gt;
&lt;p&gt;的假设，即当前这个词仅仅跟前面几个有限的词相关，因此也就不必追溯到最开始的那个词，这样便可以大幅缩减上述算式的长度。即&lt;/p&gt;
&lt;p&gt;$$
p ( w _ { 1 }, w _ { 2 }, \dots, w _ { m } ) = p ( w _ { i } | w _ { i - n + 1, \dots, w _ { i - 1 } } )
$$&lt;/p&gt;
&lt;p&gt;这个马尔科夫链的假设为什么好用？我想可能是在现实情况中，大家通过真实情况将n=1，2，3，....这些值都试过之后，得到的真实的效果和时间空间的开销权衡之后，发现能够使用。&lt;/p&gt;
&lt;h2&gt;tf-idf&lt;/h2&gt;
&lt;p&gt;tf-idf（英语：term frequency–inverse document frequency）是一种用于信息检索与文本挖掘的常用加权技术。tf-idf是一种统计方法，用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度。字词的重要性随着它在文件中出现的次数成正比增加，但同时会随着它在语料库中出现的频率成反比下降。tf-idf加权的各种形式常被搜索引擎应用，作为文件与用户查询之间相关程度的度量或评级。除了tf-idf以外，互联网上的搜索引擎还会使用基于链接分析的评级方法，以确定文件在搜索结果中出现的顺序。&lt;/p&gt;
&lt;p&gt;在一份给定的文件里，词频（term frequency，tf）指的是某一个给定的词语在该文件中出现的频率。这个数字是对词数（term count）的标准化，以防止它偏向长的文件。（同一个词语在长文件里可能会比短文件有更高的词数，而不管该词语重要与否。）对于在某一特定文件里的词语 $t_{i}$ 来说，它的重要性可表示为：&lt;/p&gt;
&lt;p&gt;$$
{tf_{i,j}} ={\frac {n_{i,j}}{\sum &lt;em&gt;{k}n&lt;/em&gt;{k,j}}}
$$&lt;/p&gt;
&lt;p&gt;以上式子中假设文件 $d_{j}$ 中共有k个词语，$n_{k,j}$ 是 $t_{k}$ 在文件 $d_{j}$ 中出现的次数。因此，分子 $n_{i,j}$ 就是该词在文件 $d_{j}$ 中的出现次数，而分母则是在文件 $d_{j}$ 中所有字词的出现次数之和。&lt;/p&gt;
&lt;p&gt;逆向文件频率（inverse document frequency，idf）是一个词语普遍重要性的度量。某一特定词语的 idf，可以由总文件数目除以包含该词语之文件的数目，再将得到的商取对数得到。通常，这个对数取以 10 为底（记为 $\lg$），如下所示：&lt;/p&gt;
&lt;p&gt;$$
\mathrm{idf}&lt;em&gt;{i} = \lg \frac{|D|}{|{j : t&lt;/em&gt;{i} \in d_{j}}|}
$$&lt;/p&gt;
&lt;p&gt;然而，根据不同的应用场景和领域，也有使用其他类型的对数，例如以 2 为底的对数（提供信息量的度量，以比特为单位）或自然对数（常用于自然语言处理和其他计算应用中）。选择哪种对数底数取决于特定情境的需求：
其中&lt;/p&gt;
&lt;p&gt;$|D|$：语料库中的文件总数&lt;/p&gt;
&lt;p&gt;$|{j : t_{i} \in d_{j}}|$：包含词语 $t_{i}$ 的文件数目（即 $n_{i,j} \neq 0$ 的文件数目）&lt;/p&gt;
&lt;p&gt;如果词语不在资料中，就导致分母为零，因此一般情况下使用 $1 + |{j : t_{i} \in d_{j}}|$&lt;/p&gt;
&lt;p&gt;然后&lt;/p&gt;
&lt;p&gt;$$
\mathrm{tfidf}&lt;em&gt;{i,j} = \mathrm{tf}&lt;/em&gt;{i,j} \times \mathrm{idf}_{i}
$$&lt;/p&gt;
&lt;p&gt;某一特定文件内的高词语频率，以及该词语在整个文件集合中的低文件频率，可以产生出高权重的 tf-idf。因此，tf-idf 倾向于过滤掉常见的词语，保留重要的词语。&lt;/p&gt;
&lt;h2&gt;TextCNN&lt;/h2&gt;
&lt;p&gt;TextCNN（Convolutional Neural Networks for Sentence Classification）是由 Yoon Kim 在 2014 年提出的一种基于卷积神经网络（CNN）的文本分类模型。 该模型借鉴了图像处理领域的 CNN 技术，将其应用于自然语言处理（NLP）中的句子级分类任务，如情感分析、主题分类等。它证明了简单的 CNN 架构在文本数据上也能取得优异性能，尤其是在预训练词向量（如 Word2Vec）的辅助下。&lt;/p&gt;
&lt;h3&gt;1. 背景与动机&lt;/h3&gt;
&lt;p&gt;传统文本分类方法（如基于词袋模型的逻辑回归或 SVM）往往忽略词序和上下文信息，导致在捕捉句子语义时表现有限。Yoon Kim 受图像 CNN 的启发，将文本视为“图像”：句子中的词序列可以看作一维“信号”，通过卷积操作提取 n-gram 特征（局部模式）。 TextCNN 的核心思想是使用多个不同大小的卷积核来捕捉不同长度的短语模式，从而实现高效的特征提取。该模型在 2014 年 EMNLP 会议上发表，并在多个基准数据集上超越了当时的状态艺术（state-of-the-art）模型。&lt;/p&gt;
&lt;h3&gt;2. 模型架构&lt;/h3&gt;
&lt;p&gt;TextCNN 的架构相对简单，由输入层、卷积层、池化层和输出层组成。以下是其详细结构：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;输入层（Embedding Layer）&lt;/strong&gt;：&lt;br /&gt;
输入是一个句子，由 m 个词组成，每个词用 d 维词向量表示（如使用预训练的 Google News Word2Vec，d=300）。这样，句子形成一个 m × d 的矩阵（类似于图像的 2D 矩阵）。如果句子长度不足 m，则用 padding 填充。 这允许模型处理变长句子。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;卷积层（Convolution Layer）&lt;/strong&gt;：&lt;br /&gt;
使用多个一维卷积核（filter）对输入矩阵进行卷积操作。每个卷积核的宽度固定为 d（词向量维度），高度（region size）不同，例如 3、4、5（对应捕捉 3-gram、4-gram、5-gram 特征）。对于每个高度 h 的卷积核，有多个（例如 100 个）并行使用，以生成丰富的特征图（feature maps）。&lt;br /&gt;
数学上，对于输入矩阵 x 的位置 i 到 i+h-1 的子矩阵，卷积操作为：&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;$$
c_i = f(w · x_{i:i+h-1} + b)
$$&lt;/p&gt;
&lt;p&gt;其中 w 是权重，b 是偏置，f 是激活函数（如 ReLU）。这会为每个卷积核生成一个长度为 m-h+1 的特征图。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;池化层（Pooling Layer）&lt;/strong&gt;：&lt;br /&gt;
对每个特征图进行 1-max pooling，即从每个特征图中提取最大值。这能捕捉最重要的特征，并使特征向量固定长度（无论句子多长）。如果有 k 个不同大小的卷积核组，每个组有 n 个核，则 pooling 后得到 k × n 维向量。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;输出层（Fully Connected Layer）&lt;/strong&gt;：&lt;br /&gt;
将所有 pooling 结果拼接成一个向量，传入 dropout 层（防止过拟合），然后通过全连接层和 softmax 进行分类。输出是类别的概率分布。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;5. 优点与局限性&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;优点&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;高效&lt;/strong&gt;：参数少，计算快，适合大规模数据。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;捕捉局部特征&lt;/strong&gt;：有效提取 n-gram 模式，而无需复杂结构如 RNN。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;易扩展&lt;/strong&gt;：可结合注意力机制（如 TextCNN with Attention）进一步提升。&lt;/li&gt;
&lt;li&gt;在情感分析、问题分类等任务上表现优异，在 7 个基准数据集中的 4 个上达到 SOTA。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;局限性&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;难以捕捉长距离依赖（依赖于卷积核大小）。&lt;/li&gt;
&lt;li&gt;对序列顺序敏感度不如 LSTM/Transformer。&lt;/li&gt;
&lt;li&gt;在短文本分类中表现好，但长文本需修改。&lt;/li&gt;
&lt;/ul&gt;
</content:encoded></item><item><title>工作总结（组会）</title><link>https://imwzj.uk/posts/%E5%B7%A5%E4%BD%9C%E6%80%BB%E7%BB%93%E7%BB%84%E4%BC%9A/</link><guid isPermaLink="true">https://imwzj.uk/posts/%E5%B7%A5%E4%BD%9C%E6%80%BB%E7%BB%93%E7%BB%84%E4%BC%9A/</guid><description>突然老师就说要开组会，摸鱼太多的我硬着头皮也得上了。</description><pubDate>Wed, 12 Nov 2025 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;方向&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;语音/呼吸音与生理信号的深度跨模态融合诊断&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;创新点借鉴：&lt;/p&gt;
&lt;p&gt;Speech &amp;amp; EGG Fusion： 融合两种声学相关信号（说话声和喉电图）。&lt;/p&gt;
&lt;p&gt;抑郁症 LLM 框架： 融合生理信号（多模态生理信号）与 LLMs。&lt;/p&gt;
&lt;p&gt;MFA-NRM： 融合图像和文本等跨模态特征。&lt;/p&gt;
&lt;p&gt;研究方向：&lt;/p&gt;
&lt;p&gt;语音-呼吸音-可穿戴生理数据融合模型： 收集说话声音特征（如音调变化、颤抖、气短导致的停顿）、异常呼吸音（如哮鸣音、啰音）和可穿戴设备采集的生理数据（如血氧、心率、呼吸频率）。&lt;/p&gt;
&lt;p&gt;设计一个跨模态注意力机制或统一潜在空间模型（如 VAE + Attention），将这些异构数据深度融合，用于早期、远程诊断慢性阻塞性肺病（COPD）、哮喘、或甚至监测肺部感染后的恢复情况。&lt;/p&gt;
&lt;p&gt;情况：虽然多模态融合比较热门，但是这种多模态的公开数据集不仅数量少，而且获取要与通讯作者联系后才有可能获取，不确定性过大，该方案基本不可行。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;利用 Mamba/Transformer 对呼吸序列进行长程时序建模&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;创新点借鉴：&lt;/p&gt;
&lt;p&gt;AFN-HearNet、LLM 相关论文： 使用 Transformer 捕获长程依赖。&lt;/p&gt;
&lt;p&gt;MUSF-GEM： 引入 Mamba 进行长序列建模。&lt;/p&gt;
&lt;p&gt;研究方向：&lt;/p&gt;
&lt;p&gt;呼吸事件的长序列分析： 肺部疾病的症状是时序性和间歇性的（例如夜间哮喘发作、咳嗽变异）。&lt;/p&gt;
&lt;p&gt;利用 Mamba (State Space Model) 或 Transformer 结构来分析数小时甚至数天的连续呼吸音或连续语音记录。这能帮助模型捕获细微的、慢性的时序变化，识别疾病发作前的早期预警模式，而不是仅基于单次短时采样。&lt;/p&gt;
&lt;p&gt;情况：存在利用这两个模型处理肺部相关疾病的论文，但是基本上是对CT扫描图片的处理，呼吸声作为长程时序（相对于咳嗽声），需要利用其出色的全局注意力机制，有效捕捉长距离依赖，而且Mamba在计算复杂问题时性能有更高的优势。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;基于语音的高保真重建与特征生成&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;创新点借鉴：&lt;/p&gt;
&lt;p&gt;抑郁症 LLM 框架： 利用 LLMs 进行高保真重建和高阶特征生成。&lt;/p&gt;
&lt;p&gt;DPCFN： 提取底层本质特征（潜藏的共享变量）。&lt;/p&gt;
&lt;p&gt;研究方向：&lt;/p&gt;
&lt;p&gt;降噪与病理语音特征的恢复： 采集到的患者语音或呼吸音通常包含环境噪声和采集设备噪声，或者因患者呼吸困难而导致语音中断、缺失。&lt;/p&gt;
&lt;p&gt;利用类似 LLMs/VAE 的生成模型，对嘈杂或不完整的语音信号进行高保真去噪和重建，恢复其原始病理声学特征。同时，从这些重建的信号中提取更具鲁棒性的“疾病本质”高阶特征如声带颤动模式、气流受限程度）。&lt;/p&gt;
&lt;p&gt;情况：在采集的过程中，医院嘈杂环境以及采集时患者呼吸或咳嗽时衣物摩擦等噪音，对处理声音的模型带来一定影响，如果实现的话，可以提高模型的鲁棒性。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;类别选择性细粒度声学特征识别&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;创新点借鉴：&lt;/p&gt;
&lt;p&gt;CFD-FIAF： 强调高频信息和细粒度特征，解决相似类别难以区分。&lt;/p&gt;
&lt;p&gt;CSFAFormer： 类别选择性特征聚合。&lt;/p&gt;
&lt;p&gt;研究方向：&lt;/p&gt;
&lt;p&gt;异常呼吸音的细微鉴别与定位： 不同的肺部疾病有相似的声学表现（例如，哮鸣音和干啰音有时难以区分，它们在频率上可能只存在细微差别）。&lt;/p&gt;
&lt;p&gt;开发专注于高频、细粒度声学特征的深度学习模块，对相似的异常肺音进行类别选择性增强和精确区分（例如，区分由大气道阻塞引起的哮鸣音，和由小气道病变引起的）。同时，利用边界增强技术（如 Laplacian-based Feature）来精确识别声音在时频图上的边界和形状。&lt;/p&gt;
&lt;p&gt;情况：对利用小波转换等方法得到的时频图进行进一步的解析，提升其对局部特征的提取能力，可与Mamba的序列任务结合，也算一种多模态？&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;语音分析的通道/设备自适应性&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;创新点借鉴：&lt;/p&gt;
&lt;p&gt;FGNet： 解决不同设备采集数据的通道数可变问题。&lt;/p&gt;
&lt;p&gt;研究方向：&lt;/p&gt;
&lt;p&gt;跨麦克风/设备的声音分析鲁棒性： 肺部疾病的语音采集可能来自智能手机、专业麦克风、智能音箱或可穿戴传感器。这些设备的声音采样率、麦克风类型和信噪比差异巨大（相当于“可变的通道/输入质量”）。&lt;/p&gt;
&lt;p&gt;设计一个设备自适应的语音特征提取框架，能够将来自不同采集设备的语音特征映射到统一、鲁棒的特征空间，确保远程诊断系统的泛化能力和实用性。&lt;/p&gt;
&lt;p&gt;情况：可用此方法对不同数据集的音频进行处理，提高可用数据量，提高模型的鲁棒性。&lt;/p&gt;
&lt;h2&gt;期刊&lt;/h2&gt;
&lt;p&gt;既然是目标的话，那就定的高一些（主要是2区及之后的论文看着也不是很舒服&lt;/p&gt;
&lt;p&gt;《Information Fusion》&lt;/p&gt;
&lt;p&gt;《Artificial Intelligence Review》&lt;/p&gt;
&lt;h2&gt;复现论文&lt;/h2&gt;
&lt;p&gt;Paulraj, M., 和M. Brindha. 《A Novel Voice Pathology Detection Technique through Deep Neural Networks Utilizing Speech and Electroglottographic Signals一种利用语音和电声门图信号通过深度神经网络进行的新型嗓音病理检测技术》. Biomedical Signal Processing and Control 112 (2026年2月): 108545. &lt;a href=&quot;https://doi.org/10.1016/j.bspc.2025.108545&quot;&gt;https://doi.org/10.1016/j.bspc.2025.108545&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Ouzr0107/picx-images-hosting/raw/master/%E5%9B%BE%E7%89%87.2oby5xirxq.webp&quot; alt=&quot;论文系统流程&quot; /&gt;&lt;/p&gt;
&lt;p&gt;改论文模型简单，我也很快找到了他所使用的数据集，本以为复现会很顺利。&lt;/p&gt;
&lt;p&gt;出现的问题：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;数据集格式不对。&lt;/li&gt;
&lt;li&gt;小波变换处理结果与论文不一致。&lt;/li&gt;
&lt;li&gt;源代码为 MATLAB 的。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;这种音频数据一般给的都是 wav 文件，结果我去官网下载的是 egg 和 nsp 这俩未知读取方式的文件，我通过询问 ai 等方式，把这些文件以二进制方式读取，采样率为标识的 50 kHz。但是我还是不确定，这样是否会对数据产生影响，毕竟无论是官网介绍，还是论文介绍以及代码，里面使用的都是 wav 格式的文件，而我没有获取成功。&lt;/p&gt;
&lt;p&gt;论文：
&lt;img src=&quot;https://github.com/Ouzr0107/picx-images-hosting/raw/master/%E5%9B%BE%E7%89%87.b9boq41mh.webp&quot; alt=&quot;论文生成图片&quot; /&gt;&lt;/p&gt;
&lt;p&gt;我实现的：
&lt;img src=&quot;https://github.com/Ouzr0107/picx-images-hosting/raw/master/%E5%9B%BE%E7%89%87.szdd5ftfp.webp&quot; alt=&quot;复现图片&quot; /&gt;&lt;/p&gt;
&lt;p&gt;只能芝士有点像，但不多。因为第三个问题，我不熟悉 MATLAB 的代码，所以我对这个实现问题没有什么解决的思路。而且我那时候感觉是论文读傻了，怎么会把生成的图片先下载到文件夹内，再对图片进行处理。这样不仅耗时耗力（我弄了好久，因为本身对图片就不是很满意），而且失真还很严重，导致最后效果坏得不行。&lt;/p&gt;
&lt;h2&gt;深度学习课程&lt;/h2&gt;
&lt;p&gt;之后我就去完成深度学习课程作业了，可恶的 YMC，什么把日期提前，导致我做的匆匆忙忙。（其实是拖延症导致的）&lt;/p&gt;
&lt;p&gt;具体架构：
&lt;img src=&quot;https://github.com/Ouzr0107/picx-images-hosting/raw/master/%E7%B3%BB%E7%BB%9F.drawio(3).4qrqtu32di.webp&quot; alt=&quot;系统架构&quot; /&gt;&lt;/p&gt;
&lt;p&gt;怎么说吧，练手是挺好的，为了不被他训，我还是看了一点点的内容。但是，里面注意力什么的还是有点困难，所以我在给他演示的 ppt 中已经简化了模型，希望这个星期讲的时候，不会被他刁难。&lt;/p&gt;
&lt;h2&gt;数据集寻找并处理&lt;/h2&gt;
&lt;p&gt;在方向中，我原本是想实现多模态的模型，但是这样的数据集实在是有点难找，我觉得 OK 的也只有之前那篇论文的，结果里面的格式还有这么大的问题，所以我开始只找呼吸声的比较完善的数据集。结果 kaggle 里面的确有不少好货（但是我其实先是通过问 AI 得到的数据集名称，然后再找到这上面也有），里面甚至有别人实验使用的代码，于是我就选了一篇六个月前看上去比较体面的代码进行学习。代码内容的确不错，不仅有原始文件的处理（把音频统一到最短的大约 7 秒），还有预处理（计算短时傅里叶变化的色谱图、梅尔频谱图等），以及为很多的参数进行相关性热图，通过随机森林分类查询各参数的重要程度。我看了以后受益匪浅，感觉这样比较规范，比我大海捞针科学得多。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Ouzr0107/picx-images-hosting/raw/master/%E5%9B%BE%E7%89%87.8adojsmyde.webp&quot; alt=&quot;相关性热图&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Ouzr0107/picx-images-hosting/raw/master/%E5%9B%BE%E7%89%87.13m76gmt9y.webp&quot; alt=&quot;重要性排序&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Ouzr0107/picx-images-hosting/raw/master/%E5%9B%BE%E7%89%87.3yevc40gyj.webp&quot; alt=&quot;梅尔频谱图&quot; /&gt;&lt;/p&gt;
&lt;p&gt;你就说，看到上面规范的图片，你不会感到一丝丝的安心吗?&lt;/p&gt;
&lt;h2&gt;可验证性&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Ouzr0107/picx-images-hosting/raw/master/%E5%9B%BE%E7%89%87.3d57pxy3sz.webp&quot; alt=&quot;特征注意力&quot; /&gt;&lt;/p&gt;
&lt;p&gt;HL前天晚上给的一篇论文，虽然这篇论文写的一般般，但是里面的 Grad-CAM 和 Eigen-CAM 为我不想钻研医学理论提供了比较好的工具。你就说他这个算不算一个有利证据？&lt;/p&gt;
&lt;h2&gt;感想&lt;/h2&gt;
&lt;p&gt;啊啊啊！总算把导师糊弄过去了，但是星期四早上还有另一个导师的组会，那个上面能讲啥啊？！&lt;/p&gt;
&lt;p&gt;并且，这篇文章作为拖更壹佰万年后的第一篇，应该也不赖吧，希望能偶尔更新一下。&lt;/p&gt;
</content:encoded></item><item><title>论文精读小记（二）</title><link>https://imwzj.uk/posts/%E8%AE%BA%E6%96%87%E7%B2%BE%E8%AF%BB%E5%B0%8F%E8%AE%B0%E4%BA%8C/</link><guid isPermaLink="true">https://imwzj.uk/posts/%E8%AE%BA%E6%96%87%E7%B2%BE%E8%AF%BB%E5%B0%8F%E8%AE%B0%E4%BA%8C/</guid><description>心碎了，综述也不是什么软柿子</description><pubDate>Tue, 17 Jun 2025 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;内容要求&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;文献主要内容&lt;/li&gt;
&lt;li&gt;基本的、关键的术语及含义&lt;/li&gt;
&lt;li&gt;体会&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;摘要翻译&lt;/h2&gt;
&lt;p&gt;精确且及时的疾病诊断对于制定有效的治疗决策和阻止疾病进展至关重要。生物医学信号为非侵入性诊断多种疾病提供了潜力，增强了预测临床结果和更有效规划治疗的能力。这些信号尤其在结合人工智能（AI）驱动的模型（如传统机器学习（ML）和深度学习（DL））时，引起了广泛关注，并展示了令人瞩目的成果。然而，深度学习模型作为医学数据分析的实际标准，面临着数据不足、分布不均和存储限制等挑战。为了缓解这些问题，迁移学习（TL）被用于将知识从一个领域迁移到相关领域，使模型能够通过小规模数据进行微调，同时确保在不同主体、数据集和会话等多样化情境下的适应性。本综述详细且系统地回顾了本十年中运用迁移学习模型在生物医学信号处理相关医疗应用中的研究。在引言部分，我们阐述了在疾病诊断和预测、脑机接口（BCI）等领域中应用迁移学习技术于生物医学信号的重要性。接下来的部分介绍了迁移学习策略。另一部分专门介绍了基于PRISMA方法从IEEE、Scopus、Web of Science和PubMed等参考数据库中检索和筛选文章的过程。在本综述中，我们分析了239篇Q1文章。使用迁移学习技术结合生物医学信号的综述文章在单独的部分进行了讨论。在本综述中，我们研究了利用迁移学习技术结合各种生物信号应用于不同场景的论文。之后，我们基于所回顾的文章讨论了该领域的关键挑战和未来方向，并以关键发现的总结结束研究。根据我们的研究，EEG信号在迁移学习方法中最为常用，特别是在脑机接口（BCI）应用中，其次是癫痫检测应用。此外，领域适应方法在生物医学信号中被广泛使用，以解决由于主体、设备、数据集和记录条件差异引起的数据分布变化。这些方法旨在对齐源域和目标域，使模型能够有效泛化到多样化的数据集。本研究提供了当前迁移学习方法的全面回顾，为选择适合特定应用的迁移学习技术提供了有益的见解，旨在解决现实世界中的数据稀缺、领域不匹配、实时处理和硬件资源限制等问题。&lt;/p&gt;
&lt;h2&gt;主要内容&lt;/h2&gt;
&lt;p&gt;介绍了生物医学信号（如EMG、ECG、EEG、PPG、EOG等）在医疗诊断、预测和治疗监测中的重要性。这些信号通过植入或表面传感器捕获，用于分析各种医疗状况。迁移学习被提出作为一种有效方法，以解决生物医学信号处理中的数据稀缺、个体差异和计算资源限制等问题。&lt;/p&gt;
</content:encoded></item><item><title>论文精读小记（一）</title><link>https://imwzj.uk/posts/%E8%AE%BA%E6%96%87%E7%B2%BE%E8%AF%BB%E5%B0%8F%E8%AE%B0%E4%B8%80/</link><guid isPermaLink="true">https://imwzj.uk/posts/%E8%AE%BA%E6%96%87%E7%B2%BE%E8%AF%BB%E5%B0%8F%E8%AE%B0%E4%B8%80/</guid><description>导师的要求，但是字好多好难啊啊啊啊！</description><pubDate>Sat, 31 May 2025 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;内容要求&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;文献主要内容&lt;/li&gt;
&lt;li&gt;基本的、关键的术语及含义&lt;/li&gt;
&lt;li&gt;体会&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;摘要翻译&lt;/h2&gt;
&lt;p&gt;基于脑电图的听觉注意力解码 (AAD) 旨在从听众的脑电信号中识别被注意到的说话者。现有数据集主要关注听觉刺激，忽略了现实世界的多模态输入。为此，构建了一个新的多模态 AAD 数据集 (MM-AAD) ，这是首个包含音频．视觉刺激的数据集。此外，先前研究大多提取单域特征，忽视了互补的时域和频域信息，这些信息在单次试验设置中表现良好，但在跨试验设置中表现不佳。因此，提出了一种称为基于 Mamba 的双分支并行网络(M-DBPNet) 的框架，有效融合了时域和频域特征。通过添加 Mamba ，时间序列信号中的时域特征被更好地提取。实验结果表明，Mamba 在单次试验设置中提升了解码性能且参数更少，并在跨试验设置中表现出强大的泛化能力。可视化分析表明，视觉刺激增强了诱发电位和颞叶、枕叶的激活，提升了听觉感知和解码性能。&lt;/p&gt;
&lt;h2&gt;主要内容&lt;/h2&gt;
&lt;p&gt;文章主要围绕基于脑电图（EEG）的听觉注意力解码（Auditory Attention Decoding, AAD）展开，提出了一个新的多模态数据集（MM-AAD）和一个基于Mamba的双分支并行网络（M-DBPNet），以解决现有AAD研究中缺乏多模态输入和单一域特征提取的局限性。&lt;/p&gt;
&lt;h2&gt;关键术语及含义&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;听觉注意力解码（Auditory Attention Decoding, AAD）&lt;/strong&gt;：通过分析听者的脑电图（EEG）信号，&lt;strong&gt;识别&lt;/strong&gt;其在多说话者环境中（如同“鸡尾酒会”场景）关注的&lt;strong&gt;特定说话者&lt;/strong&gt;。AAD在助听器和脑机接口等应用中有重要意义。AAD任务被定义为二分类问题，目标是判断受试者的注意力方向（左=0，右=1）。每个EEG数据段（通过滑动窗口生成）都有一个对应的真实标签（0或1），表示受试者关注的说话者方向。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;多模态AAD数据集（MM-AAD Dataset）&lt;/strong&gt;：首个包含视听刺激的EEG数据集，模拟现实世界的多模态场景，包含音频单独和视听两种实验条件，用于研究视听交互对听觉注意力的影响。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;脑电图（Electroencephalogram, EEG）&lt;/strong&gt;：通过头皮电极记录大脑电活动的技术，用于捕捉与听觉注意力相关的神经信号。大脑的听觉皮层（主要位于颞叶）在处理听觉刺激时会产生与注意力相关的神经活动。EEG信号能够捕捉这些活动，尤其是在时间和频率域的动态变化。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Mamba-based Dual Branch Parallel Network (M-DBPNet)&lt;/strong&gt;：一种基于Mamba的双分支并行神经网络，融合时域和频域特征，用于高效解码EEG信号中的听觉注意力方向。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Mamba&lt;/strong&gt;：一种线性时间序列建模模型，具有选择机制，能够过滤无关信息并无限期保留相关信息，适合处理EEG信号的时序特征。具有线性时间复杂度和选择性状态机制，特别适合处理高维、长序列的信号数据。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;时域特征（Temporal Domain Features）&lt;/strong&gt;：反映EEG信号随时间变化的动态特征，通常通过卷积神经网络（CNN）或变换器编码器提取。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;频域特征（Frequency Domain Features）&lt;/strong&gt;：反映EEG信号在不同频带（如delta、alpha、beta、theta、gamma）的静态特征，通常通过频谱分析或差分熵（DE）提取。&lt;strong&gt;神经科学可解释性&lt;/strong&gt;：频域特征与特定认知状态相关（如alpha抑制与注意力集中），为理解AAD的神经机制提供了依据。例如，文献验证了视听场景中gamma频带的增强（参考第10页，7.4.2节）。&lt;strong&gt;多模态适配&lt;/strong&gt;：在视听场景中，频域特征捕捉了视觉刺激引起的频带变化（如枕叶的gamma增强），与时域特征共同提升了解码性能（视听场景准确率高于音频单独2%-3%）（参考第7页，6.1.1节）。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;公共空间模式（Common Spatial Pattern, CSP）&lt;/strong&gt;：一种信号处理算法，用于增强EEG信号的信噪比，通过空间滤波提取与特定任务相关的特征。公共空间模式是一种基于信号协方差矩阵的空间滤波算法，最初设计用于二分类任务，旨在通过线性变换将多通道EEG信号投影到一个新的空间，最大化一类信号的方差（与任务相关的信号）并最小化另一类信号的方差（噪声或无关信号）。在AAD任务中，CSP用于增强与听者注意力方向（例如，关注左/右说话者）相关的EEG信号特征，抑制背景噪声和无关脑活动，从而提高解码准确率。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;单次试验（Within-trial）设置&lt;/strong&gt;：模型在单一受试者的单一试验数据上训练和测试，训练集和测试集来自同一试验，可能存在数据泄漏风险。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;跨试验（Cross-trial）设置&lt;/strong&gt;：模型在不同试验的数据上训练和测试，训练集和测试集来自不同试验，减少数据泄漏风险，提高泛化能力。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;对侧脑激活（Contralateral Brain Activation）&lt;/strong&gt;：指听觉注意力任务中，关注一侧（左/右）说话者时，对侧（右/左）脑半球（尤其是颞叶）表现出更强激活的现象。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;神经诱发响应（Evoked Responses）&lt;/strong&gt;：EEG信号对外部刺激（如听觉或视觉）的神经反应强度，视听场景中的响应通常强于单一音频场景。&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Mamba在AAD中的优势&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;高效处理长序列&lt;/strong&gt;：EEG信号采样率高（2048Hz），短时间窗口（例如1秒）包含大量采样点（2048点）。Mamba的线性复杂度 $ O(L) $ 使其能够高效处理这些长序列，而Transformer的二次复杂度 $ O(L^2) $ 会导致计算瓶颈。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;动态特征选择&lt;/strong&gt;：Mamba的选择性机制能够聚焦于与听觉注意力相关的EEG信号模式（如颞叶的对侧激活），抑制噪声和无关脑活动（如枕叶的视觉干扰），提高了特征提取的针对性。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;低参数量&lt;/strong&gt;：Mamba的参数量远低于传统Transformer，降低了模型的计算成本和内存需求，适合实时应用（如助听器或脑机接口）。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;长期依赖捕捉&lt;/strong&gt;：AAD任务需要捕捉EEG信号中的慢速神经动态（如与语音包络相关的响应，时间跨度可能达数百毫秒）。Mamba的隐状态机制能够有效建模这些长期依赖。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;与多模态场景的适配&lt;/strong&gt;：在文献的MM-AAD数据集中，视听场景的EEG信号包含复杂的时序模式（如听觉和视觉皮层的协同激活）。Mamba能够高效处理这些多模态信号的动态变化。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Mamba在文献中的性能贡献&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;准确率提升&lt;/strong&gt;：M-DBPNet在MM-AAD数据集上的准确率显著优于基线模型（SSF-CNN、MBSSFCC、DBPNet），例如在1秒窗口下，视听场景准确率为93.6%，音频单独场景为91.6%（参考第8页，Table 3）。Mamba模块通过高效的时序特征提取，增强了时域分支的表达能力，与频域分支的特征融合进一步提升了性能。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;低延迟解码&lt;/strong&gt;：Mamba支持短时间窗口（0.1秒）的解码，准确率仍高达90.9%（音频单独）和92.9%（视听），满足实时AAD应用需求（参考第8页，Table 3）。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;泛化能力&lt;/strong&gt;：在跨试验设置中，M-DBPNet的准确率（视听场景68.3%，音频单独64.4%）优于基线模型，表明Mamba增强了模型的泛化能力（参考第7页，6.1.2节）。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;计算效率&lt;/strong&gt;：Mamba的低参数量和线性复杂度使M-DBPNet的总参数量（0.88M-1.32M）远低于基线模型，适合资源受限的嵌入式设备（参考第9页，Table 5）。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;体会&lt;/h2&gt;
&lt;h3&gt;创新性与现实意义&lt;/h3&gt;
&lt;p&gt;这篇文献通过引入多模态（视听）数据集MM-AAD，填补了现有AAD研究中缺乏现实世界多模态场景的空白。现实生活中，人们的听觉注意力通常受到视觉信息的协同影响，因此MM-AAD数据集更接近真实场景，为AAD研究提供了宝贵资源。&lt;/p&gt;
&lt;p&gt;M-DBPNet模型通过融合时域和频域特征，结合Mamba模块，显著提高了解码准确性和泛化能力，尤其在跨试验设置下表现优异。这表明模型不仅在实验室环境中有效，还具有应用于实际场景（如助听器）的潜力。&lt;/p&gt;
&lt;h3&gt;科学启发&lt;/h3&gt;
&lt;p&gt;实验结果揭示了视听多模态刺激对大脑活动的影响，特别是在颞叶和枕叶的协同激活，以及对侧脑激活现象。这些发现深化了我们对大脑多感官处理机制的理解，强调了视觉信息在增强语音感知中的重要作用。&lt;/p&gt;
&lt;p&gt;Mamba模块的引入展示了线性时间序列建模在处理EEG信号中的优势，相比传统变换器模型，其参数量更少，计算效率更高，适合实时应用。&lt;/p&gt;
&lt;h3&gt;技术与方法的进步&lt;/h3&gt;
&lt;p&gt;M-DBPNet通过双分支结构有效融合时频特征，克服了单一域模型的局限性。文章对CSP算法的改进（在训练测试分割后应用CSP）避免了数据泄漏问题，提高了模型的公平性和可信度。&lt;/p&gt;
&lt;p&gt;低延迟解码（0.1秒至2秒窗口）的实现展示了模型在实时性上的潜力，这对助听器等设备的实际应用至关重要。&lt;/p&gt;
&lt;h3&gt;未来展望&lt;/h3&gt;
&lt;p&gt;文章指出的跨受试者研究是一个重要方向，因为个体差异可能影响模型的泛化能力。未来的研究可以探索如何在不同受试者间实现更鲁棒的模型。
进一步优化时频融合策略，可能结合更先进的深度学习技术（如自适应注意力机制），以提升解码性能。&lt;/p&gt;
&lt;p&gt;数据集的开放性（文章提到数据可按需提供）有助于推动AAD领域的合作与发展，但实际数据获取的便捷性仍需关注。&lt;/p&gt;
&lt;p&gt;总的来说，这篇文献在AAD研究中具有重要的理论和实践价值，通过多模态数据集和创新模型为听觉注意力解码提供了新视角，同时为神经科学与人工智能的交叉应用开辟了新的可能性。&lt;/p&gt;
</content:encoded></item><item><title>换个心情</title><link>https://imwzj.uk/posts/%E6%8D%A2%E4%B8%AA%E5%BF%83%E6%83%85/</link><guid isPermaLink="true">https://imwzj.uk/posts/%E6%8D%A2%E4%B8%AA%E5%BF%83%E6%83%85/</guid><description>来点负能量的废话</description><pubDate>Sun, 27 Apr 2025 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;换主题&lt;/h2&gt;
&lt;p&gt;熟悉这个博客的朋友都知道（什么路边一条无人在意的小博客），本博客换了一个新主题。主要原因不是别的，就是因为火狐竟然不支持原主题的动画特性，虽然博主也不是什么火狐脑残粉，但也受不了有人会看到一个又丑又卡的网页，所以咬咬牙就换了（这有什么好下决心的？）。还有就是收到鹰角网络 PV 的影响，开始喜欢比较好的平面设计，所以对很素的主题开始产生无趣的感觉了（也没见你新主题很有设计感啊？）。在翻主题的时候才发现有原主题有个国际化版本，直接黯然神伤，我之前那么辛苦地汉化修 bug 到底是在干什么，简直是无语了。在换主题之前还想着要不要把汉化的主题发布一下，幸好还没去弄，不然就真成🤡了。总之，近段时间博客在外观上应该不会有太大变化了，我也有点累了。&lt;/p&gt;
&lt;h2&gt;心累&lt;/h2&gt;
&lt;p&gt;我表示的累是一种心理状态，并不是我真的做了很复杂的事。最近的毕设真是一点也没动笔，一开始还以为是准备不够充分，无从下笔，现在才意识到是又进入那种郁闷的状态了。又焦急又没有推动完成进度，我的心情就像坐上了无尽的滑滑梯，只有一落千丈。啊啊！好想回家，但我又不是真的想回家。回家只是暂时的自我欺骗，因为我在家中的时候会放松到床上躺一天也无所谓，在学校会有一咪咪的自觉，但也没啥大用。此时此刻，寝室里只有我自己一个人，但实际上真的算一下，已经是空无一人，因为我空空如也，心如死灰。&lt;/p&gt;
&lt;h2&gt;我太难了&lt;/h2&gt;
</content:encoded></item><item><title>为童年写脚本</title><link>https://imwzj.uk/posts/%E6%B2%A1%E6%83%B3%E5%88%B0%E4%BC%9A%E4%B8%BA%E7%AB%A5%E5%B9%B4%E5%86%99%E8%84%9A%E6%9C%AC/</link><guid isPermaLink="true">https://imwzj.uk/posts/%E6%B2%A1%E6%83%B3%E5%88%B0%E4%BC%9A%E4%B8%BA%E7%AB%A5%E5%B9%B4%E5%86%99%E8%84%9A%E6%9C%AC/</guid><description>谁能想到现在的自己会为以前的自己写脚本呢？</description><pubDate>Sat, 19 Apr 2025 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;如果你是哈粉甜甜圈过来安装脚本的，请点击下面的按钮，并确认安装吧~&lt;/h2&gt;
&lt;p&gt;&amp;lt;a href=&quot;/哈粉自动钓鱼-1.3.user.js&quot; style=&quot;display: inline-block; padding: 12px 24px; background: linear-gradient(45deg, #4CAF50, #45a049); color: white; text-decoration: none; border-radius: 25px; font-size: 16px; font-weight: bold; cursor: pointer; transition: transform 0.2s, box-shadow 0.2s; box-shadow: 0 4px 15px rgba(0,0,0,0.2);&quot; onmouseover=&quot;this.style.transform=&apos;scale(1.05)&apos;; this.style.boxShadow=&apos;0 6px 20px rgba(0,0,0,0.3)&apos;;&quot; onmouseout=&quot;this.style.transform=&apos;scale(1)&apos;; this.style.boxShadow=&apos;0 4px 15px rgba(0,0,0,0.2)&apos;;&quot; target=&quot;_blank&quot;&amp;gt;点击安装脚本&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h2&gt;起因&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;@/assets/images/hotelPic.png&quot; alt=&quot;哈粉宾馆图片&quot; /&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;图片来自 ToTIIll ，房间为 [4人挂机]Fairy Tale Forest 。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;这个游戏真算起来我是从 2015 年开始玩的，用的还是家里的破台式（是真的烂，内存只有 0.5 GB，玩 flash 会卡顿的那种），所以游戏体验不是很好，所以我稍稍玩了一下就跑路了（甚至还在里面弄了个亏钱的银行，我现在都不记得咋想的了）。&lt;/p&gt;
&lt;p&gt;2018 的时候，大家都知道的疫情来了，我也在家里上网课。说实话，我不是那种自制力很好的人，所以就经常开小差，开着开着就回到哈粉宾馆了，并起了一个新号，叫瓯州人。在此期间，网络上社恐的我找到了一批志同道合的愿意一起疯疯癫癫的朋友，甚至有种这个游戏我可能会玩一辈子的想法 &lt;s&gt;（一休尼！）&lt;/s&gt;，但现实是我回到学校，渐渐地跟这个网络世界脱离，认识的人也在一次次的回归看看的过程中消失不见。我在宾馆中能熟聊的人并不多，就像现实中我可能认识一群人，但如果没有那几个好朋友，我大概也只会在角落里默默玩着手机吧……于是乎，我也渐渐的远离这个社区了。&lt;/p&gt;
&lt;p&gt;前几天，我又一时兴起，打开了哈粉宾馆，发现许多不认识的新事物，也意识到以前的 flash 版本大概是真的快消失了，html5 版本的快成为主流了。忘了提，这游戏的主要经济来源是挂机和参加各种活动以及小游戏，挂机是要每分钟移动或者说话的（之前经历过好几个版本，其中判断睡着踢出的条件各不相同，我还记得有个是人站在传送带上面就OK的时期，我跟纸袋头社长一起在一个无线型的传送带房间挂机，现在大概已经被拆了吧）。我这个咸鱼玩家习惯在做其他事情的时候挂着这个游戏，所以挂机是我主要的游戏币来源。其中，有一个钓鱼的挂机项目收益还蛮高的，附带一个名为海妖猎手的小活动。这个玩法在 flash 版本就已经存在了，官方也给过那种绑定窗口的自动输入软件，我也用过很久。但是自从使用 html5 重写了以后，这些软件就无法正常使用了，我也想着继续用 flash 端凑合凑合得了。于是自己写脚本这个想法直到前几天突发才实现。&lt;/p&gt;
&lt;h2&gt;过程&lt;/h2&gt;
&lt;p&gt;实话实说，这个脚本我主要是用 Grok 写的，自己慢慢提要求修些 bug 就完成了。实际代码中 Grok 写的注释也清楚明了，不需要我多加解释，总之这个全平台只要能安装脚本就能运行的钓鱼插件就这样诞生了。其中遇到过的问题无非是输入框无法找到、按键触发失灵等小问题，弄着弄着就没了。原本还想弄可移动吸附的功能的，结果 iframe 弄的好麻烦，遂放弃了，开摸！&lt;/p&gt;
&lt;p&gt;最终实现的样子如图：&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;@/assets/images/fishingJS.png&quot; alt=&quot;钓鱼脚本实图&quot; /&gt;&lt;/p&gt;
&lt;p&gt;还是有点粗糙的，如果想和游戏画面风格一致也不是不能做，只能说能用就行，我是实用主义 （目移）。&lt;/p&gt;
&lt;h2&gt;后续&lt;/h2&gt;
&lt;p&gt;目前还没有发游戏的论坛，公布之前还先和游戏的管理员沟通了一下，等之后的结果吧。没想到的事，他竟然问我是否熟悉 React ，让我突然意识到，&lt;strong&gt;现在的自己为童年的游戏写了脚本&lt;/strong&gt;。对已经工作的程序员来说，这可能是件小事吧，但对还在学校的我来说，这就像一种变相的“梦想成真”？我现在还记得小学作文题目是《我的梦想》，我写的是当程序员，所有人都能用我写的程序。虽然这个梦想现在还未实现，还十分遥远，但因为这个小小的经历，让我找回了被现实冲刷的已经遗忘的初心。&lt;/p&gt;
&lt;p&gt;如果看了这篇文章以后对这个游戏感兴趣，欢迎来&lt;a href=&quot;https://hf.bobba.cn/&quot;&gt;哈粉宾馆&lt;/a&gt;找我玩！&lt;s&gt;（如果邀请人填我就更好了）&lt;/s&gt;&lt;/p&gt;
</content:encoded></item><item><title>初步了解 AI</title><link>https://imwzj.uk/posts/%E5%88%9D%E6%AD%A5%E4%BA%86%E8%A7%A3_ai/</link><guid isPermaLink="true">https://imwzj.uk/posts/%E5%88%9D%E6%AD%A5%E4%BA%86%E8%A7%A3_ai/</guid><description>让 Grok DeeperSearch 的结果</description><pubDate>Wed, 02 Apr 2025 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;Key Points&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;人工智能（AI）的基本概念包括模拟人类智能的任务，如学习、推理和问题解决，研究表明这些系统可以感知环境并采取行动。&lt;/li&gt;
&lt;li&gt;AI 的内涵似乎是创造能够像人类一样思考和行动的智能系统，尤其是在特定任务上超越人类。&lt;/li&gt;
&lt;li&gt;常见的 AI 模型包括深度学习模型（如 CNN 和 Transformer）、大型语言模型（如 GPT-3）和计算机视觉模型（如 ResNet）。&lt;/li&gt;
&lt;li&gt;这些模型用于聊天机器人、自动驾驶、语音助手和推荐系统等场景。&lt;/li&gt;
&lt;li&gt;模型性能的评估依赖于任务类型，例如分类任务使用准确率，回归任务使用均方误差（MSE），而 NLP 任务可能使用 BLEU 分数。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;人工智能的基本概念&lt;/h2&gt;
&lt;p&gt;人工智能（AI）是一种技术，使计算机和机器能够模拟人类智能和解决问题能力。研究表明，AI 系统可以学习、推理、感知环境并采取行动以实现目标，例如语音识别或图像分类。&lt;/p&gt;
&lt;h2&gt;AI 的内涵&lt;/h2&gt;
&lt;p&gt;AI 的内涵似乎在于开发智能系统，这些系统能够模仿人类认知过程，并在特定领域（如语言理解或决策制定）超越人类能力。证据倾向于认为，AI 不仅仅是技术工具，而是对人类智能本质的探索。&lt;/p&gt;
&lt;h2&gt;常见的 AI 模型及其使用场景&lt;/h2&gt;
&lt;p&gt;常见的 AI 模型包括：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;深度学习模型&lt;/strong&gt;：如卷积神经网络（CNN）用于图像处理，循环神经网络（RNN）用于序列数据。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;大型语言模型&lt;/strong&gt;：如 GPT-3 和 BERT，用于文本生成和翻译。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;计算机视觉模型&lt;/strong&gt;：如 ResNet 和 YOLO，用于自动驾驶和医学影像。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这些模型的应用场景包括：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;NLP 模型用于聊天机器人和翻译服务。&lt;/li&gt;
&lt;li&gt;计算机视觉模型用于自动驾驶和面部识别。&lt;/li&gt;
&lt;li&gt;语音识别模型用于语音助手。&lt;/li&gt;
&lt;li&gt;推荐系统用于电子商务和流媒体服务。&lt;/li&gt;
&lt;li&gt;强化学习模型用于游戏 AI 和机器人控制。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;模型性能的评价&lt;/h2&gt;
&lt;p&gt;模型性能的评估因任务而异：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;分类任务：使用准确率、精确率和召回率。&lt;/li&gt;
&lt;li&gt;回归任务：使用均方误差（MSE）和平均绝对误差（MAE）。&lt;/li&gt;
&lt;li&gt;NLP 任务：使用 BLEU 分数（翻译）和 ROUGE（摘要）。&lt;/li&gt;
&lt;li&gt;计算机视觉任务：使用交并比（IoU）和平均精度均值（mAP）。&lt;/li&gt;
&lt;li&gt;强化学习：评估累积奖励和成功率。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;此外，还需考虑计算资源和可解释性等因素。&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;人工智能的基本概念、内涵、常见模型及其应用场景与性能评价详述&lt;/h2&gt;
&lt;h3&gt;引言&lt;/h3&gt;
&lt;p&gt;人工智能（AI）作为现代科技的重要领域，涵盖了从基础理论到实际应用的广泛内容。本文将详细探讨 AI 的基本概念、内涵、常见模型及其使用场景，并分析模型性能的评价方法，以期为读者提供全面的理解。&lt;/p&gt;
&lt;h3&gt;AI 的基本概念&lt;/h3&gt;
&lt;p&gt;AI 被定义为一种使计算机和机器能够模拟人类智能和解决问题能力的技术。根据 &lt;a href=&quot;https://www.ibm.com/cn-zh/topics/artificial-intelligence&quot;&gt;IBM - 什么是人工智能 (AI)?&lt;/a&gt;，AI 支持计算机学习、阅读、写作、创造和分析，执行原本需要人类智能的任务，如数字助理、自动驾驶和生成式 AI 工具（如 ChatGPT）。维基百科进一步指出，AI 是“智能主体（intelligent agent）的研究与设计”，这些主体可以观察环境并采取行动以达致目标 (&lt;a href=&quot;https://zh.wikipedia.org/zh-hans/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD&quot;&gt;维基百科 - 人工智能&lt;/a&gt;)。&lt;/p&gt;
&lt;p&gt;具体来说，AI 的基本概念包括：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;定义&lt;/strong&gt;：AI 是通过机器模拟人类智能的过程，涵盖学习、推理、问题解决、感知和语言理解。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;智能主体&lt;/strong&gt;：系统能够感知环境并采取行动以实现目标。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;学习与适应&lt;/strong&gt;：AI 系统通过数据训练改进性能，例如机器学习和深度学习。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;类型&lt;/strong&gt;：包括弱 AI（狭义 AI，如 Siri 和 IBM Watson）和强 AI（广义 AI，如理论上的通用 AI 和超 AI）。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;历史里程碑如 1956 年约翰·麦卡锡提出 AI 概念，1997 年 IBM Deep Blue 击败国际象棋冠军，以及 2016 年 DeepMind 的 AlphaGo 击败围棋冠军，均体现了 AI 的发展 (&lt;a href=&quot;https://www.ibm.com/cn-zh/topics/artificial-intelligence&quot;&gt;IBM - 什么是人工智能 (AI)?&lt;/a&gt;)。&lt;/p&gt;
&lt;h3&gt;AI 的内涵&lt;/h3&gt;
&lt;p&gt;AI 的内涵涉及其本质和范围，超越了简单的技术定义。根据 &lt;a href=&quot;https://www.thepaper.cn/newsDetail_forward_4258768&quot;&gt;澎湃新闻 - 李开复AI五讲&lt;/a&gt;，AI 有五种定义：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;让人类感到不可思议的计算机程序（如 AlphaGo）。&lt;/li&gt;
&lt;li&gt;类似人类思维方式的程序（如早期神经网络）。&lt;/li&gt;
&lt;li&gt;类似人类行为的程序（如 ELIZA 聊天程序）。&lt;/li&gt;
&lt;li&gt;能够学习的程序（如现代深度学习）。&lt;/li&gt;
&lt;li&gt;感知环境、合理行动并最大化收益的程序（Russell &amp;amp; Norvig 定义）。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;第五种定义被认为最全面，强调 AI 是智能代理的系统，能够观察环境并采取行动以实现目标。AI 的内涵还包括伦理和治理问题，如 IBM 强调的 &lt;a href=&quot;https://www.ibm.com/cn-zh/topics/ai-ethics&quot;&gt;AI 伦理&lt;/a&gt; 和 &lt;a href=&quot;https://www.ibm.com/cn-zh/topics/responsible-ai&quot;&gt;负责任 AI&lt;/a&gt;，反映了其对社会影响的深远意义。&lt;/p&gt;
&lt;h3&gt;常见 AI 模型及其使用场景&lt;/h3&gt;
&lt;p&gt;常见的 AI 模型涵盖多种类型，以下是详细分类及示例：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;模型类型&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;代表模型&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;描述&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;使用场景&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;深度学习模型&lt;/td&gt;
&lt;td&gt;CNN, RNN, Transformer&lt;/td&gt;
&lt;td&gt;模拟人脑认知，自动提取特征，处理图像、序列或语言数据&lt;/td&gt;
&lt;td&gt;图像处理、语音识别、自然语言处理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;大型语言模型（LLM）&lt;/td&gt;
&lt;td&gt;GPT-3, BERT, Llama&lt;/td&gt;
&lt;td&gt;基于 Transformer，处理大规模文本，生成人类可读内容&lt;/td&gt;
&lt;td&gt;聊天机器人、翻译、文本生成&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;计算机视觉模型&lt;/td&gt;
&lt;td&gt;ResNet, YOLO, EfficientNet&lt;/td&gt;
&lt;td&gt;专注于图像和视频分析，提取视觉信息&lt;/td&gt;
&lt;td&gt;自动驾驶、医学影像、面部识别&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;强化学习模型&lt;/td&gt;
&lt;td&gt;Q-learning, DQN&lt;/td&gt;
&lt;td&gt;通过试错学习，最大化累积奖励&lt;/td&gt;
&lt;td&gt;游戏 AI、机器人控制、资源管理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;传统机器学习模型&lt;/td&gt;
&lt;td&gt;决策树、随机森林、SVM&lt;/td&gt;
&lt;td&gt;基于统计和规则，处理分类和回归任务&lt;/td&gt;
&lt;td&gt;推荐系统、异常检测&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;这些模型的应用场景广泛：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;NLP 模型&lt;/strong&gt;：如 GPT-3 用于聊天机器人（如 Coze, &lt;a href=&quot;https://www.doubao.com/&quot;&gt;豆包&lt;/a&gt;），翻译服务（如 DeepL），情感分析（如企业客户反馈分析）。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;计算机视觉模型&lt;/strong&gt;：如 ResNet 用于自动驾驶（如 Tesla 视觉系统），YOLO 用于安防监控。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;语音识别模型&lt;/strong&gt;：如 DeepSpeech 用于语音助手（如 Siri），转录服务（如 Zoom 会议记录）。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;推荐系统&lt;/strong&gt;：如协同过滤用于电商推荐（如 Amazon），深度学习模型用于流媒体（如 Netflix）。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;强化学习模型&lt;/strong&gt;：如 DQN 用于游戏 AI（如 Atari 游戏），机器人控制（如 Boston Dynamics 机器人）。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;模型性能的评价&lt;/h3&gt;
&lt;p&gt;模型性能的评价方法因任务类型而异，以下是详细分类：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;任务类型&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;评价指标&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;描述&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;分类任务&lt;/td&gt;
&lt;td&gt;准确率、精确率、召回率、F1 分数&lt;/td&gt;
&lt;td&gt;衡量分类模型对类别预测的正确性&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;回归任务&lt;/td&gt;
&lt;td&gt;均方误差（MSE）、平均绝对误差（MAE）、R²&lt;/td&gt;
&lt;td&gt;评估连续值预测的误差和拟合度&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;NLP 任务&lt;/td&gt;
&lt;td&gt;BLEU 分数、ROUGE、困惑度&lt;/td&gt;
&lt;td&gt;评估翻译质量、摘要一致性和语言模型生成能力&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;计算机视觉任务&lt;/td&gt;
&lt;td&gt;交并比（IoU）、平均精度均值（mAP）&lt;/td&gt;
&lt;td&gt;评估对象检测和分割的准确性&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;强化学习&lt;/td&gt;
&lt;td&gt;累积奖励、成功率&lt;/td&gt;
&lt;td&gt;衡量决策过程的长期收益和任务完成率&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;此外，模型性能还需考虑以下因素：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;计算资源&lt;/strong&gt;：训练和推理所需的时间和硬件成本。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;可扩展性&lt;/strong&gt;：模型在大数据集上的表现。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;可解释性&lt;/strong&gt;：模型决策过程是否易于理解，特别是在金融和医疗领域。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;例如，IBM 提供 AI 解决方案（如 &lt;a href=&quot;https://www.ibm.com/cn-zh/products/watsonx-ai&quot;&gt;Watsonx.ai&lt;/a&gt;）帮助企业优化模型性能，强调微调和部署的效率。&lt;/p&gt;
&lt;h3&gt;结论&lt;/h3&gt;
&lt;p&gt;AI 的基本概念和内涵揭示了其作为智能系统核心的地位，常见模型如深度学习和大型语言模型在多个场景中发挥关键作用。性能评价需根据任务选择合适指标，并综合考虑资源和可解释性。这些内容为理解和应用 AI 提供了全面视角。&lt;/p&gt;
&lt;h3&gt;Key Citations&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.ibm.com/cn-zh/topics/artificial-intelligence&quot;&gt;IBM - 什么是人工智能 (AI)?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://zh.wikipedia.org/zh-hans/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD&quot;&gt;维基百科 - 人工智能&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.thepaper.cn/newsDetail_forward_4258768&quot;&gt;澎湃新闻 - 李开复AI五讲&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.cnblogs.com/tgzhu/p/18047168&quot;&gt;博客园 - 十大人工智能大模型技术介绍&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.csdn.net/qq_30776829/article/details/138141880&quot;&gt;CSDN - 全球AI大模型盘点&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content:encoded></item><item><title>C_的复健（4）</title><link>https://imwzj.uk/posts/c_%E7%9A%84%E5%A4%8D%E5%81%A54/</link><guid isPermaLink="true">https://imwzj.uk/posts/c_%E7%9A%84%E5%A4%8D%E5%81%A54/</guid><description>复试学习第四篇</description><pubDate>Thu, 27 Mar 2025 00:00:00 GMT</pubDate><content:encoded>&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;算数运算符发运算对象包含&lt;strong&gt;函数表达式&lt;/strong&gt;。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;自加和自减运算符的结合方向是&lt;strong&gt;自右至左&lt;/strong&gt;。（注：可以&lt;strong&gt;前缀&lt;/strong&gt;的都是）&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;格式字符&lt;/th&gt;
&lt;th&gt;意义&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;a, A&lt;/td&gt;
&lt;td&gt;以十六进制形式输出浮点数(C99 新增)。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;d&lt;/td&gt;
&lt;td&gt;以十进制形式输出带符号整数(正数不输出符号)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;o&lt;/td&gt;
&lt;td&gt;以八进制形式输出无符号整数(不输出前缀0)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;x,X&lt;/td&gt;
&lt;td&gt;以十六进制形式输出无符号整数(不输出前缀Ox)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;u&lt;/td&gt;
&lt;td&gt;以十进制形式输出无符号整数&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;f&lt;/td&gt;
&lt;td&gt;以小数形式输出单、双精度实数&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;e,E&lt;/td&gt;
&lt;td&gt;以指数形式输出单、双精度实数&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;g,G&lt;/td&gt;
&lt;td&gt;以%f或%e中较短的输出宽度输出单、双精度实数&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;c&lt;/td&gt;
&lt;td&gt;输出单个字符&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;s&lt;/td&gt;
&lt;td&gt;输出字符串&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;p&lt;/td&gt;
&lt;td&gt;输出指针地址&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;lu&lt;/td&gt;
&lt;td&gt;32位无符号整数&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;llu&lt;/td&gt;
&lt;td&gt;64位无符号整数&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;flags（标识）&lt;/th&gt;
&lt;th&gt;描述&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;td&gt;在给定的字段宽度内左对齐，默认是右对齐（参见 width 子说明符）。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;+&lt;/td&gt;
&lt;td&gt;强制在结果之前显示加号或减号（+ 或 -），即正数前面会显示 + 号。默认情况下，只有负数前面会显示一个 - 号。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;空格&lt;/td&gt;
&lt;td&gt;如果没有写入任何符号，则在该值前面插入一个空格。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;#&lt;/td&gt;
&lt;td&gt;与 o、x 或 X 说明符一起使用时，非零值前面会分别显示 0、0x 或 0X。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;与 e、E 和 f 一起使用时，会强制输出包含一个小数点，即使后边没有数字时也会显示小数点。默认情况下，如果后边没有数字时候，不会显示显示小数点。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;与 g 或 G 一起使用时，结果与使用 e 或 E 时相同，但是尾部的零不会被移除。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;在指定填充 padding 的数字左边放置零（0），而不是空格（参见 width 子说明符）。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;width（宽度）&lt;/th&gt;
&lt;th&gt;描述&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;(number)&lt;/td&gt;
&lt;td&gt;要输出的字符的最小数目。如果输出的值短于该数，结果会用空格填充。如果输出的值长于该数，结果不会被截断。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/li&gt;
&lt;/ul&gt;
</content:encoded></item><item><title>C_的复健（3）</title><link>https://imwzj.uk/posts/c_%E7%9A%84%E5%A4%8D%E5%81%A53/</link><guid isPermaLink="true">https://imwzj.uk/posts/c_%E7%9A%84%E5%A4%8D%E5%81%A53/</guid><description>复试学习第三篇</description><pubDate>Tue, 25 Mar 2025 00:00:00 GMT</pubDate><content:encoded>&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;C 语言程序是由&lt;strong&gt;函数&lt;/strong&gt;组成的。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;[]的优先级&lt;strong&gt;大于&lt;/strong&gt;*。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;单纯的 &lt;code&gt;char *s&lt;/code&gt; 只是&lt;strong&gt;空指针&lt;/strong&gt;，scanf 和 gets 都无法直接使用。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;char *s = &quot;123&quot;&lt;/code&gt; 所存为&lt;strong&gt;常量&lt;/strong&gt;，无法修改。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;#define 只是&lt;strong&gt;字符串替换&lt;/strong&gt;，不进行任何运算。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;变量的定义不允许使用连等式，变量的赋值允许使用连等式。例：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;int a=b=c=1;	//这种情况下编译出错

int a,b,c;
a=b=c=1;		//这是可以通过编译的，a,b,c的值都赋值为1
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;math.h 中的常用&lt;strong&gt;函数&lt;/strong&gt;和&lt;strong&gt;常量&lt;/strong&gt;：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;函数&lt;/th&gt;
&lt;th&gt;作用&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;double exp(double x)&lt;/td&gt;
&lt;td&gt;返回 e 的 x 次幂的值。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;double log(double x)&lt;/td&gt;
&lt;td&gt;返回 x 的自然对数（基数为 e 的对数）。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;double pow(double x, double y)&lt;/td&gt;
&lt;td&gt;返回 x 的 y 次幂。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;double sqrt(double x)&lt;/td&gt;
&lt;td&gt;返回 x 的平方根。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;double fabs(double x)&lt;/td&gt;
&lt;td&gt;返回 x 的绝对值。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;常量&lt;/th&gt;
&lt;th&gt;描述&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;M_PI&lt;/td&gt;
&lt;td&gt;圆周率 π&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;M_E&lt;/td&gt;
&lt;td&gt;自然对数的底数 e&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/li&gt;
&lt;/ul&gt;
</content:encoded></item><item><title>C_的复健（2）</title><link>https://imwzj.uk/posts/c_%E7%9A%84%E5%A4%8D%E5%81%A52/</link><guid isPermaLink="true">https://imwzj.uk/posts/c_%E7%9A%84%E5%A4%8D%E5%81%A52/</guid><description>复试学习第二篇</description><pubDate>Sat, 22 Mar 2025 00:00:00 GMT</pubDate><content:encoded>&lt;ul&gt;
&lt;li&gt;C 中没有 map, 字符串的创建为：&lt;code&gt;char str[] = &quot;hello&quot;;&lt;/code&gt;。字符串组的创建为：&lt;code&gt;char *str[] = {&quot;hello&quot;, &quot;world&quot;};&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;变量重名情况下，内部函数优先级&lt;strong&gt;大于&lt;/strong&gt;全局函数。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;FILE *fopen(const char *filename, const char *mode)&lt;/code&gt;。&lt;/li&gt;
&lt;/ul&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;模式&lt;/th&gt;
&lt;th&gt;描述&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&quot;r&quot;&lt;/td&gt;
&lt;td&gt;打开一个用于读取的文件。该文件必须存在。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&quot;w&quot;&lt;/td&gt;
&lt;td&gt;创建一个用于写入的空文件。如果文件名称与已存在的文件相同，则会删除已有文件的内容，文件被视为一个新的空文件。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&quot;a&quot;&lt;/td&gt;
&lt;td&gt;追加到一个文件。写操作向文件末尾追加数据。如果文件不存在，则创建文件。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&quot;r+&quot;&lt;/td&gt;
&lt;td&gt;打开一个用于更新的文件，可读取也可写入。该文件必须存在。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&quot;w+&quot;&lt;/td&gt;
&lt;td&gt;创建一个用于读写的空文件。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&quot;a+&quot;&lt;/td&gt;
&lt;td&gt;打开一个用于读取和追加的文件。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;int fgetc(FILE *stream)&lt;/code&gt; 从指定的流 stream 获取下一个&lt;strong&gt;字符&lt;/strong&gt;（一个无符号字符），并把位置标识符往前移动。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;int feof(FILE *stream)&lt;/code&gt; 测试给定流 stream 的&lt;strong&gt;文件结束标识符&lt;/strong&gt;。&lt;strong&gt;未到&lt;/strong&gt;文件结束标识符，返回&lt;strong&gt;非零值&lt;/strong&gt;。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;int fputc(int char, FILE *stream)&lt;/code&gt; 把参数 char 指定的字符（一个无符号字符）写入到指定的流 stream 中，并把位置标识符往前移动。&lt;/li&gt;
&lt;li&gt;ascii 重要位置表：&lt;/li&gt;
&lt;/ul&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;ASCII值&lt;/th&gt;
&lt;th&gt;控制字符&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;32&lt;/td&gt;
&lt;td&gt;Space&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;48&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;65&lt;/td&gt;
&lt;td&gt;A&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;97&lt;/td&gt;
&lt;td&gt;a&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;127&lt;/td&gt;
&lt;td&gt;DEL&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;ul&gt;
&lt;li&gt;ctype.h 中的有用函数：&lt;/li&gt;
&lt;/ul&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;函数&lt;/th&gt;
&lt;th&gt;描述&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;int isalnum(int c)&lt;/td&gt;
&lt;td&gt;该函数检查所传的字符是否是字母和数字。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;int isalpha(int c)&lt;/td&gt;
&lt;td&gt;该函数检查所传的字符是否是字母。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;int isdigit(int c)&lt;/td&gt;
&lt;td&gt;该函数检查所传的字符是否是十进制数字。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;int islower(int c)&lt;/td&gt;
&lt;td&gt;该函数检查所传的字符是否是小写字母。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;int ispunct(int c)&lt;/td&gt;
&lt;td&gt;该函数检查所传的字符是否是标点符号字符。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;int isspace(int c)&lt;/td&gt;
&lt;td&gt;该函数检查所传的字符是否是空白字符。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;int isupper(int c)&lt;/td&gt;
&lt;td&gt;该函数检查所传的字符是否是大写字母。&amp;lt;br&amp;gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;int isxdigit(int c)&lt;/td&gt;
&lt;td&gt;该函数检查所传的字符是否是十六进制数字。&amp;lt;br&amp;gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;ul&gt;
&lt;li&gt;阶乘等类似情况下，用&lt;strong&gt;浮点数除法&lt;/strong&gt;比&lt;strong&gt;乘法&lt;/strong&gt;更不容易&lt;strong&gt;溢出&lt;/strong&gt;。&lt;/li&gt;
&lt;/ul&gt;
</content:encoded></item><item><title>C_的复健（1）</title><link>https://imwzj.uk/posts/c_%E7%9A%84%E5%A4%8D%E5%81%A51/</link><guid isPermaLink="true">https://imwzj.uk/posts/c_%E7%9A%84%E5%A4%8D%E5%81%A51/</guid><description>复试学习第一篇</description><pubDate>Fri, 21 Mar 2025 00:00:00 GMT</pubDate><content:encoded>&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;整数常量可以是十进制、八进制或十六进制的常量。前缀指定基数：0x 或 0X 表示十六进制，&lt;strong&gt;0 表示八进制&lt;/strong&gt;，不带前缀则默认表示十进制。整数常量也可以带一个后缀，&lt;strong&gt;后缀是 U 和 L 的组合&lt;/strong&gt;，U 表示无符号整数（unsigned），L 表示长整数（long）。后缀可以是大写，也可以是小写，U 和 L 的顺序任意。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;static 的作用：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;隐藏&lt;/strong&gt;：static 可以用作函数和变量的前缀，对其它源文件&lt;strong&gt;隐藏&lt;/strong&gt;。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;持久&lt;/strong&gt;：存储在静态数据区的变量会在程序&lt;strong&gt;刚开始运行时&lt;/strong&gt;就完成初始化，也是&lt;strong&gt;唯一的一次初始化&lt;/strong&gt;。共有两种变量存储在静态存储区：&lt;strong&gt;全局变量&lt;/strong&gt;和 &lt;strong&gt;static 变量&lt;/strong&gt;，只不过和全局变量比起来，static 可以控制变量的&lt;strong&gt;可见范围&lt;/strong&gt;。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;初始 0&lt;/strong&gt;：在静态数据区，内存中所有的字节默认值都是 &lt;strong&gt;0x00&lt;/strong&gt;。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;执行程序时，可以从命令行传值给 C 程序。这些值被称为&lt;strong&gt;命令行参数&lt;/strong&gt;： &lt;code&gt;int main(int argc, char *argv[]);&lt;/code&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;argc (argument count)&lt;/strong&gt;: 表示命令行参数的数量，包括&lt;strong&gt;程序名本身&lt;/strong&gt;。因此，argc 至少为 1。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;argv (argument vector)&lt;/strong&gt;: 是一个指向&lt;strong&gt;字符串数组的指针&lt;/strong&gt;，其中每个字符串是一个命令行参数。数组的第一个元素（即 &lt;strong&gt;argv[0]&lt;/strong&gt;）通常是&lt;strong&gt;程序的名称&lt;/strong&gt;。接下来的元素是传递给程序的命令行参数。&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;typedef &lt;strong&gt;只是&lt;/strong&gt;为用户自定义的数据类型取一个新的名字。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;strcpy 同时复制&lt;strong&gt;末尾 &apos;\0&apos;&lt;/strong&gt; 。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;struct 结构如下：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;  struct tag {
      member-list
      member-list
      member-list  
      ...
  } variable-list ;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;用三种不同情况说明：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;//此声明声明了拥有3个成员的结构体，分别为整型的a，字符型的b和双精度的c
//同时又声明了结构体变量s1
//这个结构体并没有标明其标签
struct
{
    int a;
    char b;
    double c;
} s1;

//此声明声明了拥有3个成员的结构体，分别为整型的a，字符型的b和双精度的c
//结构体的标签被命名为SIMPLE,没有声明变量
struct SIMPLE
{
    int a;
    char b;
    double c;
};
//用SIMPLE标签的结构体，另外声明了变量t1、t2、t3
struct SIMPLE t1, t2[20], *t3;

//也可以用typedef创建新类型
typedef struct
{
    int a;
    char b;
    double c;
} Simple2;
//现在可以用Simple2作为类型声明新的结构体变量
Simple2 u1, u2[20], *u3;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;注：如若要引用自己，则应以以下格式：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;typedef struct tagNode
{
　char *pItem;
　struct tagNode *pNext;
} *pNode;
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;int strcmp(const char *str1, const char *str2)&lt;/code&gt; 返回的值分为三种情况：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;如果返回值小于 0，则表示 str1 小于 str2。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;如果返回值大于 0，则表示 str1 大于 str2。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;如果返回值等于 0，则表示 str1 等于 str2。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;总结，若两条字符串&lt;strong&gt;相等&lt;/strong&gt;，返回值为 &lt;strong&gt;0&lt;/strong&gt;。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
</content:encoded></item><item><title>电影推荐-布达佩斯大饭店</title><link>https://imwzj.uk/posts/%E7%94%B5%E5%BD%B1%E6%8E%A8%E8%8D%90-%E5%B8%83%E8%BE%BE%E4%BD%A9%E6%96%AF%E5%A4%A7%E9%A5%AD%E5%BA%97/</link><guid isPermaLink="true">https://imwzj.uk/posts/%E7%94%B5%E5%BD%B1%E6%8E%A8%E8%8D%90-%E5%B8%83%E8%BE%BE%E4%BD%A9%E6%96%AF%E5%A4%A7%E9%A5%AD%E5%BA%97/</guid><description>文艺风的电影，有点门槛</description><pubDate>Thu, 20 Mar 2025 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;影视&lt;/h2&gt;
&lt;h3&gt;《布达佩斯大饭店》&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;@/assets/images/p2183539003.webp&quot; alt=&quot;布海报&quot; /&gt;&lt;/p&gt;
&lt;h4&gt;剧情简介&lt;/h4&gt;
&lt;p&gt;故事要从一位无名作家（裘德·洛 Jude Law 饰）说起，为了专心创作，他来到了名为“布达佩斯”的饭店，在这里，作家遇见了饭店的主人穆斯塔法（F·莫里·亚伯拉罕 F. Murray Abraham 饰），穆斯塔法邀请作家共进晚餐，席间，他向作家讲述了这座饱经风雨的大饭店的前世今生。
饭店曾经的主人名叫古斯塔沃（拉尔夫·费因斯 Ralph Fiennes 饰），而年轻的穆斯塔法（托尼·雷沃罗利 Tony Revolori 饰）在当时不过是追随着他的一介小小门童。古斯塔沃为人正直，精明能干，在他的经营和组织之下，布达佩斯大饭店成为了当时首屈一指的度假胜地。古斯塔沃和年迈的D夫人（蒂尔达·斯文顿 Tilda Swinton 饰）情投意合，D夫人去世后，在遗嘱中将一副价值连城的名画留给了古斯塔沃，这一举动惹恼了她的儿子迪米特里（阿德里安·布洛迪 Adrien Brody 饰），布达佩斯大饭店和古斯塔沃的厄运就此拉开了帷幕。&lt;/p&gt;
&lt;h4&gt;个人评价&lt;/h4&gt;
&lt;p&gt;原本只是不想一个人看电影，结果最后来了一大帮人。但最幽默的是，电影过程中，好几个人都昏昏欲睡，可能这就是文艺片的门槛吧。&lt;/p&gt;
&lt;p&gt;剧情上，有一种古典小说的风味，没有非常抓人眼球的情节。一切都是淡淡的，流畅的，以他自己如小步舞曲般的节奏，一章章，一节节地把故事娓娓道来。对，的确是娓娓道来，故事的旁白虽然一直在变化，但其重要地位不言而喻，让整个故事充满一种雪夜中，长辈坐在火炉旁的摇椅上，跟你慢慢讲述以前亲历的故事一样。这个故事不必惊险刺激，吊人胃口，也不像摇篮曲，只是为了让你安然入眠，而是牵着你的手，一起体验某段时间，甚至是人生。&lt;/p&gt;
&lt;p&gt;画面上，从海报上就可以看出有一抹童话色彩。这个 14 年的电影应该是想要达到这种效果的，毕竟画幅的不断转变，色彩的鲜艳而梦幻，打造的回忆不像旧照片一样渐渐褪色，而是充满了热爱的熠熠生辉。在此基础上，镜头的使用又以长镜头为主，距离比较远，某些片段中仿佛一张画。可以说，如果仅仅为了电影的美术品味看，也是一种享受。很多时候，这部影片都会让我联想到《绣湖》，不单单是因为故事中都含有酒店的元素，还有配音和幽默上的“冷”的相似，那种和这个时代快节奏不相符的超脱，仿佛一个不那么美好的世外桃源，游戏关闭了，书本合上了，电影结束了，就不再念想了，像一条河，流过了，干涸了，留下了存在过的证明。&lt;/p&gt;
&lt;p&gt;总之，适合在一个空闲的下午，慢慢看。&lt;/p&gt;
</content:encoded></item><item><title>双影奇境，启动！</title><link>https://imwzj.uk/posts/%E5%8F%8C%E5%BD%B1%E5%A5%87%E5%A2%83%E5%90%AF%E5%8A%A8/</link><guid isPermaLink="true">https://imwzj.uk/posts/%E5%8F%8C%E5%BD%B1%E5%A5%87%E5%A2%83%E5%90%AF%E5%8A%A8/</guid><description>第一篇碎碎念，吐槽含量有点高2333</description><pubDate>Mon, 17 Mar 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;没想到在经历过有点让人无语的背叛后，还是有人和我玩双人游戏的。耶耶耶！要跟  JJY  &lt;s&gt;（JJY是位于日本的低频报时信号电台的呼号）&lt;/s&gt; 一起玩《双影奇境》，听好多 up 主说这游戏是真好玩，可以说没有 gta6 的话，包最佳年度游戏的。不知道在玩过前作《双人成行》的情况下，我又能否玩的尽兴。我现在还能回忆起之前玩的时候还没买现在这个游戏本，用的还是我弟的华为轻薄本（甚至我的 FF14 也是在这个笔记本上玩的），帧数是不高的，毕竟一个带亮机卡的轻薄本还能有多少性能释放呢？虽然说有点卡又有点糊，但玩的还是还开心的，我也不是什么游戏新手，基本没有卡过关，但手残还是蛮手残的。看来我还是多攒点钱，以防不时之需，和我弟的密室逃脱也得等等生活费了，不然我真的要每天吃盒饭了，555😢。&lt;/p&gt;
&lt;p&gt;&lt;s&gt;才不承认是因为买了太多东西和出去吃吃喝喝大手大脚才没钱买游戏&lt;/s&gt;&lt;/p&gt;
&lt;p&gt;这次的博客没有用到服务器，所以根本不用考虑在国内需要备案这种导致我上一个博客系统好久写不了字结果一直绑定不了域名看不了文章的原因。虽然说是 cloudflare ，毕竟是互联网巨头，不用梯子速度还是蛮快的，而且我是上传到 github 后自动部署，减少了蛮多工作量的。&lt;/p&gt;
&lt;p&gt;&lt;s&gt;更不承认是 hexo 的 deploy 一直出问题修不好才出此上策&lt;/s&gt;&lt;/p&gt;
&lt;p&gt;认识我的朋友应该可以看出这次域名是啥意思，后面的 .uk 纯粹是因为便宜（天哪！竟然只要 $4.82 ，而且之后续费也是这个价格），只能说能用就行，最重要的是保持博客的稳定更新，不是吗？不知道之后能不能等  YYS  ~~(益阳市)~~的博客弄好，然后我这里弄个友链，然后天天去骚扰他。我的评论区虽然不是很好用，那个 gif 经常加载不出来，真的是无语了，但可以匿名就小小地原谅一下好了。&lt;/p&gt;
&lt;p&gt;话不多，就这样吧。回见♥️~&lt;/p&gt;
</content:encoded></item><item><title>Expressive Code Example</title><link>https://imwzj.uk/posts/expressive-code/</link><guid isPermaLink="true">https://imwzj.uk/posts/expressive-code/</guid><description>How code blocks look in Markdown using Expressive Code.</description><pubDate>Wed, 10 Apr 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Here, we&apos;ll explore how code blocks look using &lt;a href=&quot;https://expressive-code.com/&quot;&gt;Expressive Code&lt;/a&gt;. The provided examples are based on the official documentation, which you can refer to for further details.&lt;/p&gt;
&lt;h2&gt;Expressive Code&lt;/h2&gt;
&lt;h3&gt;Syntax Highlighting&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://expressive-code.com/key-features/syntax-highlighting/&quot;&gt;Syntax Highlighting&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;Regular syntax highlighting&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;console.log(&apos;This code is syntax highlighted!&apos;)
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Rendering ANSI escape sequences&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;ANSI colors:
- Regular: [31mRed[0m [32mGreen[0m [33mYellow[0m [34mBlue[0m [35mMagenta[0m [36mCyan[0m
- Bold:    [1;31mRed[0m [1;32mGreen[0m [1;33mYellow[0m [1;34mBlue[0m [1;35mMagenta[0m [1;36mCyan[0m
- Dimmed:  [2;31mRed[0m [2;32mGreen[0m [2;33mYellow[0m [2;34mBlue[0m [2;35mMagenta[0m [2;36mCyan[0m

256 colors (showing colors 160-177):
[38;5;160m160 [38;5;161m161 [38;5;162m162 [38;5;163m163 [38;5;164m164 [38;5;165m165[0m
[38;5;166m166 [38;5;167m167 [38;5;168m168 [38;5;169m169 [38;5;170m170 [38;5;171m171[0m
[38;5;172m172 [38;5;173m173 [38;5;174m174 [38;5;175m175 [38;5;176m176 [38;5;177m177[0m

Full RGB colors:
[38;2;34;139;34mForestGreen - RGB(34, 139, 34)[0m

Text formatting: [1mBold[0m [2mDimmed[0m [3mItalic[0m [4mUnderline[0m
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Editor &amp;amp; Terminal Frames&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://expressive-code.com/key-features/frames/&quot;&gt;Editor &amp;amp; Terminal Frames&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;Code editor frames&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;console.log(&apos;Title attribute example&apos;)
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;!-- src/content/index.html --&amp;gt;
&amp;lt;div&amp;gt;File name comment example&amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Terminal frames&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;echo &quot;This terminal frame has no title&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;pre&gt;&lt;code&gt;Write-Output &quot;This one has a title!&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Overriding frame types&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;echo &quot;Look ma, no frame!&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;pre&gt;&lt;code&gt;# Without overriding, this would be a terminal frame
function Watch-Tail { Get-Content -Tail 20 -Wait $args }
New-Alias tail Watch-Tail
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Text &amp;amp; Line Markers&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://expressive-code.com/key-features/text-markers/&quot;&gt;Text &amp;amp; Line Markers&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;Marking full lines &amp;amp; line ranges&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;// Line 1 - targeted by line number
// Line 2
// Line 3
// Line 4 - targeted by line number
// Line 5
// Line 6
// Line 7 - targeted by range &quot;7-8&quot;
// Line 8 - targeted by range &quot;7-8&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Selecting line marker types (mark, ins, del)&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;function demo() {
  console.log(&apos;this line is marked as deleted&apos;)
  // This line and the next one are marked as inserted
  console.log(&apos;this is the second inserted line&apos;)

  return &apos;this line uses the neutral default marker type&apos;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Adding labels to line markers&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;// labeled-line-markers.jsx
&amp;lt;button
  role=&quot;button&quot;
  {...props}
  value={value}
  className={buttonClassName}
  disabled={disabled}
  active={active}
&amp;gt;
  {children &amp;amp;&amp;amp;
    !active &amp;amp;&amp;amp;
    (typeof children === &apos;string&apos; ? &amp;lt;span&amp;gt;{children}&amp;lt;/span&amp;gt; : children)}
&amp;lt;/button&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Adding long labels on their own lines&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;// labeled-line-markers.jsx
&amp;lt;button
  role=&quot;button&quot;
  {...props}

  value={value}
  className={buttonClassName}

  disabled={disabled}
  active={active}
&amp;gt;

  {children &amp;amp;&amp;amp;
    !active &amp;amp;&amp;amp;
    (typeof children === &apos;string&apos; ? &amp;lt;span&amp;gt;{children}&amp;lt;/span&amp;gt; : children)}
&amp;lt;/button&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Using diff-like syntax&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;+this line will be marked as inserted
-this line will be marked as deleted
this is a regular line
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;pre&gt;&lt;code&gt;--- a/README.md
+++ b/README.md
@@ -1,3 +1,4 @@
+this is an actual diff file
-all contents will remain unmodified
 no whitespace will be removed either
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Combining syntax highlighting with diff-like syntax&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;  function thisIsJavaScript() {
    // This entire block gets highlighted as JavaScript,
    // and we can still add diff markers to it!
-   console.log(&apos;Old code to be removed&apos;)
+   console.log(&apos;New and shiny code!&apos;)
  }
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Marking individual text inside lines&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;function demo() {
  // Mark any given text inside lines
  return &apos;Multiple matches of the given text are supported&apos;;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Regular expressions&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;console.log(&apos;The words yes and yep will be marked.&apos;)
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Escaping forward slashes&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;echo &quot;Test&quot; &amp;gt; /home/test.txt
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Selecting inline marker types (mark, ins, del)&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;function demo() {
  console.log(&apos;These are inserted and deleted marker types&apos;);
  // The return statement uses the default marker type
  return true;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Word Wrap&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://expressive-code.com/key-features/word-wrap/&quot;&gt;Word Wrap&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;Configuring word wrap per block&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;// Example with wrap
function getLongString() {
  return &apos;This is a very long string that will most probably not fit into the available space unless the container is extremely wide&apos;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;pre&gt;&lt;code&gt;// Example with wrap=false
function getLongString() {
  return &apos;This is a very long string that will most probably not fit into the available space unless the container is extremely wide&apos;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Configuring indentation of wrapped lines&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;// Example with preserveIndent (enabled by default)
function getLongString() {
  return &apos;This is a very long string that will most probably not fit into the available space unless the container is extremely wide&apos;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;pre&gt;&lt;code&gt;// Example with preserveIndent=false
function getLongString() {
  return &apos;This is a very long string that will most probably not fit into the available space unless the container is extremely wide&apos;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Collapsible Sections&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://expressive-code.com/plugins/collapsible-sections/&quot;&gt;Collapsible Sections&lt;/a&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;// All this boilerplate setup code will be collapsed
import { someBoilerplateEngine } from &apos;@example/some-boilerplate&apos;
import { evenMoreBoilerplate } from &apos;@example/even-more-boilerplate&apos;

const engine = someBoilerplateEngine(evenMoreBoilerplate())

// This part of the code will be visible by default
engine.doSomething(1, 2, 3, calcFn)

function calcFn() {
  // You can have multiple collapsed sections
  const a = 1
  const b = 2
  const c = a + b

  // This will remain visible
  console.log(`Calculation result: ${a} + ${b} = ${c}`)
  return c
}

// All this code until the end of the block will be collapsed again
engine.closeConnection()
engine.freeMemory()
engine.shutdown({ reason: &apos;End of example boilerplate code&apos; })
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Line Numbers&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://expressive-code.com/plugins/line-numbers/&quot;&gt;Line Numbers&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Displaying line numbers per block&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;// This code block will show line numbers
console.log(&apos;Greetings from line 2!&apos;)
console.log(&apos;I am on line 3&apos;)
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;pre&gt;&lt;code&gt;// Line numbers are disabled for this block
console.log(&apos;Hello?&apos;)
console.log(&apos;Sorry, do you know what line I am on?&apos;)
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Changing the starting line number&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;console.log(&apos;Greetings from line 5!&apos;)
console.log(&apos;I am on line 6&apos;)
&lt;/code&gt;&lt;/pre&gt;
</content:encoded></item></channel></rss>