<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>黑历史 on 映屿</title>
    <link>https://blog.verdant.ee/tags/%E9%BB%91%E5%8E%86%E5%8F%B2/</link>
    <description>Recent content in 黑历史 on 映屿</description>
    <generator>Hugo</generator>
    <language>zh-cn</language>
    
      <managingEditor>i@glowisle.me (五葉地錦)</managingEditor>
    
    
      <webMaster>i@glowisle.me (五葉地錦)</webMaster>
    
    
    
    <lastBuildDate>Sat, 27 Dec 2025 20:20:14 +0800</lastBuildDate>
    
    
    <atom:link href="http://blog.verdant.ee/tags/%E9%BB%91%E5%8E%86%E5%8F%B2/atom.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>多数时间可以被约分的一年</title>
      <link>https://blog.verdant.ee/posts/2025-annual-summary/</link>
      <pubDate>Sat, 27 Dec 2025 20:20:14 +0800</pubDate><author>i@glowisle.me (五葉地錦)</author>
      <guid>https://blog.verdant.ee/posts/2025-annual-summary/</guid>
      <description>&lt;p&gt;我平常没什么拍照片的习惯，手机相册里最多的就是截图，所以从相册里看看这一年都干了什么是没希望了，幸好今年上半年我很喜欢发朋友圈，可以看着朋友圈来写点东西。&lt;/p&gt;&#xA;&lt;p&gt;我在上半年的时候，真的很喜欢发朋友圈，每两条的间隔很少超过一周。不知从什么时候起，我开始思考为什么要发朋友圈，发朋友圈想得到什么、能得到什么、得到了什么，在那之后，我就很少发朋友圈了。&lt;/p&gt;&#xA;&lt;p&gt;朋友圈作为一个上不去下不来的社交媒体，既没有推特（我会叫它一辈子推特的，X这个名字真的太难听了）的信息传播速度，也没有豆瓣的独特氛围。最特殊的一点是，朋友圈的看客，基本都是亲戚、老师、同学、同事。仅仅四类看客，就可以让一个人打扮成四种形象。朋友圈里的自己，是自己想让别人认为的自己。&lt;/p&gt;&#xA;&lt;p&gt;我在这里敢下结论：「每条朋友圈都或多或少有表演性质。」&lt;/p&gt;&#xA;&lt;p&gt;除去这种看起来似乎有点肮脏的心理，也会有「分享」的成分。但「记录」不可能占大部分，因为一旦有了观众，就肯定会设想他们看到的反应了。如果只是为了记录，为什么要让别人看见？这种渴望被看见的心理，和写博客的心理有异曲同工之妙&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;。所以我想让别人看见的我是什么样子？&lt;/p&gt;&#xA;&lt;p&gt;还有一阵子我在朋友圈转发我写得狗屁不通的文章，那些不堪回首的往昔……&lt;/p&gt;&#xA;&lt;p&gt;这里我其实是在批判自己。倒不如说，我博客大部分可能有攻击性的文章，都是在批判过去的自己。往坏处想，过去的自己确实幼稚；往好处想，自己有不少进步。我相信大部分写博客的人，都不敢读自己以前的文章。&lt;/p&gt;&#xA;&lt;p&gt;扯远了。&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;疯狂看书的一年&#34;&gt;疯狂看书的一年&lt;/h2&gt;&#xA;&lt;p&gt;这一年我读了16 本书。有些书写了书评或读后感。&lt;/p&gt;&#xA;&lt;p&gt;&lt;figure class=&#34;image-caption&#34;&gt;&#xA;    &lt;img src=&#34;https://images.glowisle.me/9B23E959A9A98CD0BAF813C098E805A9.jpg&#34; alt=&#34;&#34;&gt;&#xA;    &lt;figcaption&gt;&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&lt;/p&gt;&#xA;&lt;p&gt;堆在一起看，还是挺壮观的。暑假我开始疯狂看书。起因是我妈买了一本莫言的《不被大风吹倒》，说实话这是我看过莫言的第一本书。&lt;/p&gt;&#xA;&lt;p&gt;通过看这本书，我发现看书好像很有意思，于是继续去我妈那里觅食，「借」来了东野圭吾的两本，又不知道从哪认识了尾崎红叶，就买了一本代表作。这本书是以「三岛由纪夫一口气读完并大呼有趣」作为噱头来卖的，三岛由纪夫这个名字听起来有点耳熟，好像是初一的时候老师告诫我们不要看日本文学，随口提到的，本着越不让看越想看的心理，我买了「很不三岛」的《潮骚》，再从短篇入手开始了解三岛的风格，之后看了《金阁寺》和《丰饶之海》前两部，就因为学校的事情越来越多，搁置了《晓寺》，这本书写得极其晦涩，其中大量的讲经环节，印象中有四五章都是主角读经书，作者以此来阐述哲学观点的情节，开学根本没办法沉下心看书，读得支离破碎的……&lt;/p&gt;&#xA;&lt;p&gt;在读三岛时，我也穿插阅读了三岛的传记和川端康成的代表作。暑假结束后的某个周末晚，我一口气读完了村上春树的处女作《且听风吟》，具体内容待我再读一遍写文章说说。总之，这本书是我最能投入进去的，既能引发思考，又让我沉醉于文字氛围的书，就像跟着主角真正活了一次。今年的阅读计划可能会以村上春树的作品为主。&lt;/p&gt;&#xA;&lt;p&gt;除了日本文学外，我看了《活着》以及《思考的乐趣》，我自认为是挺麻木的一个人，居然被余华可恶的质朴又冷峻的语言搞得四次流泪，甚至看电影都没有过这种经历。&lt;/p&gt;&#xA;&lt;p&gt;《思考的乐趣》这本书里，讲到了卡布列克常数，我觉得这非常适合用代码来解决，所以用C++ 写了一个&lt;a href=&#34;https://github.com/yingyu5658/kab/blob/main/main.cc&#34;&gt;程序&lt;/a&gt;，根据输入计算卡布列克常数，并输出计算次数。&lt;/p&gt;&#xA;&lt;p&gt;说实话，这是我第一次用C++编写程序，在用C++ 以前就觉得我不会喜欢它，实践证明了确实是这样。&lt;/p&gt;&#xA;&lt;p&gt;这一年最开心的时候就是暑假了，准确来说是七月份。我只有一门素描课要上，平时就坐公交跑图书馆看书。即使不外出，父母白天都去上班，弟弟也去了姥姥家，只有我，和我的猫。&lt;/p&gt;&#xA;&lt;p&gt;那个夏天雨很多，早晨六七点起床，天空是深蓝色的，如果下雨，那就拉来一把椅子坐，一边听着雨打在树叶和屋檐上的声音发呆。&lt;/p&gt;&#xA;&lt;p&gt;手机开着免打扰，只有想看的时候才会打开看看，谁也不能闯入我的生活，自己一个人怎么过都是惬意的。&lt;/p&gt;&#xA;&lt;h2 id=&#34;画画-vs-睡大觉&#34;&gt;画画 V.S. 睡大觉&lt;/h2&gt;&#xA;&lt;p&gt;上半年我极喜欢画画，几乎每个周末都要画，手绘板绘都有，而且总是发朋友圈，在那时候我画画的目标似乎就是为了发在朋友圈和QQ空间，获得点赞，我到底热爱的是画画，还是别人的认可？我画画的热情从此降下来了。&lt;/p&gt;&#xA;&lt;p&gt;学画的四五年，都是三天打鱼，两天晒网，此后更甚。某一天突然又想拾起来画笔，从落下第一笔开始就似乎就是想证明什么，比如我还会画。可是越想证明，越不能画好。之后的课也不大想去上了，以初三学业为由请假。&lt;/p&gt;&#xA;&lt;p&gt;不知道这算不算进步，我越来越不敢跟人说我学过画画，更不敢说自己会画画，这就像一个来面试的应届生说自己精通C++和Rust一样扯。&lt;/p&gt;&#xA;&lt;p&gt;对自己的标准在提高，水平又在持续下降，长期的眼高手低，甚至不敢再在纸上落笔了。&lt;/p&gt;&#xA;&lt;p&gt;过阵子，素描七级的证书就要到了。我知道那东西没什么用，我甚至有一种想把以前得的所有证书全都撕碎的念头。&lt;/p&gt;&#xA;&lt;p&gt;&lt;figure class=&#34;image-caption&#34;&gt;&#xA;    &lt;img src=&#34;https://images.glowisle.me/2025-12-27_21-15.png&#34; alt=&#34;这张图是我截止至目前最后一次画的东西，发了一条朋友圈配文「不如睡大觉」&#34;&gt;&#xA;    &lt;figcaption&gt;这张图是我截止至目前最后一次画的东西，发了一条朋友圈配文「不如睡大觉」&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;时间都去哪了&#34;&gt;时间都去哪了？&lt;/h2&gt;&#xA;&lt;p&gt;&lt;figure class=&#34;image-caption&#34;&gt;&#xA;    &lt;img src=&#34;https://images.glowisle.me/2025-12-27_20-47.png&#34; alt=&#34;2024年底的我&#34;&gt;&#xA;    &lt;figcaption&gt;2024年底的我&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;figure class=&#34;image-caption&#34;&gt;&#xA;    &lt;img src=&#34;https://images.glowisle.me/2025-12-27_20-49.png&#34; alt=&#34;2025年底的我&#34;&gt;&#xA;    &lt;figcaption&gt;2025年底的我&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&lt;/p&gt;&#xA;&lt;p&gt;我今天在某个群里说出了图二的话，随后就去朋友圈，找找有没有什么能拿来写的东西，惊奇地发现2024年我就有这样的感受。如果说真的怕死，现在还有点远，但「活着活着就活完了」这件事，按照目前我对时间的感受来说还是有可能的。&lt;/p&gt;&#xA;&lt;p&gt;人类的大脑是很神奇的造物，我忘了在哪看到过一篇文章，貌似是知乎日报的推送，讲过为什么有人觉得时间过得很快。&lt;/p&gt;&#xA;&lt;p&gt;原理大概就是大脑会合并存储相似重复的记忆以节省存储空间，比如上学。一个研究生可能会立马脱口而出和什么算法或数据结构很像，但是我现在的脑子里只有「约分」两个字。看起来很长的一段时间，越过越短，越过越短……就像剥洋葱一样，最后留下的就是自己认为该记住的。&lt;/p&gt;&#xA;&lt;h2 id=&#34;展望&#34;&gt;展望&lt;/h2&gt;&#xA;&lt;p&gt;按照写总结的套路，似乎都会有这个环节，设立几个目标，但是那种鼓气的话说出来未免太假了，大家这一年都是这么过来的，也没见去年定的目标实现了几个不是……&lt;/p&gt;&#xA;&lt;p&gt;按照规矩，还是给2026一点盼头吧！希望我能：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;把小说写出来&lt;/li&gt;&#xA;&lt;li&gt;数学物理分数飞升&lt;/li&gt;&#xA;&lt;li&gt;留在我们学校的高中部&lt;/li&gt;&#xA;&lt;li&gt;继续写下去&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;对了，我买了一个新的本子，我发现本子好像比Emacs的org-mode更符合我的使用场景，我会在2026年开始用那个本子代替org做规划，所以还是很期待2026年来的。&lt;/p&gt;&#xA;&lt;p&gt;我期待的2026年，这个看起来像遥远的未来的数字，本质上究竟是什么东西呢？只是地球又围着太阳转了一圈而已。也许沟口应该去把太阳烧了。&lt;/p&gt;&#xA;&lt;p&gt;最后，感谢你读完这篇文章，祝你新年快乐，以及接下来的一年少读到点LLM「润色」过的文章。&lt;/p&gt;&#xA;&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;&#xA;&lt;hr&gt;&#xA;&lt;ol&gt;&#xA;&lt;li id=&#34;fn:1&#34;&gt;&#xA;&lt;p&gt;我太强了，这也能扯回来……&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/div&gt;&#xA;</description>
    </item>
    <item>
      <title>剖析千行C语言文本编辑器Kilo的技术细节</title>
      <link>https://blog.verdant.ee/posts/kilo-analysis/</link>
      <pubDate>Sat, 06 Dec 2025 13:26:47 +0800</pubDate><author>i@glowisle.me (五葉地錦)</author>
      <guid>https://blog.verdant.ee/posts/kilo-analysis/</guid>
      <description>&lt;p&gt;今天上午学习了一下&lt;a href=&#34;https://github.com/antirez/kilo&#34;&gt;Kilo&lt;/a&gt;的源代码。我很早以前就对文本编辑器的实现方法感兴趣了。&lt;/p&gt;&#xA;&lt;p&gt;Kilo是一个很简易却不简陋的项目，清晰地展示了如何构建一个终端下的文本编辑器，它的目的不是真正让你学会去开发一个高标准高质量，能投入使用的文本编辑器，而是理解文本编辑器的核心骨架、理解一个看似庞大一团糟的问题的拆解思路。这是一个很好的起点。也过了一把爽玩C语言的瘾（虽然我并没有写几行代码）。&lt;/p&gt;&#xA;&lt;h2 id=&#34;程序分析&#34;&gt;程序分析&lt;/h2&gt;&#xA;&lt;p&gt;整个项目只有一个文件，一千三百行代码。我用了大概一个半小时梳理了程序的执行流程，手画了一个流程图。为了美观，我又用&lt;a href=&#34;https://www.glowisle.me/posts/%E7%AE%80%E5%8D%95%E4%BD%BF%E7%94%A8graphviz%E7%BB%98%E5%88%B6%E7%A8%8B%E5%BA%8F%E6%B5%81%E7%A8%8B%E5%9B%BE/&#34;&gt;Graphviz&lt;/a&gt;绘制了一个电子版：&lt;/p&gt;&#xA;&lt;p&gt;&lt;figure class=&#34;image-caption&#34;&gt;&#xA;    &lt;img src=&#34;https://images.glowisle.me/kilo-graph.png&#34; alt=&#34;程序流程图（大意）&#34;&gt;&#xA;    &lt;figcaption&gt;程序流程图（大意）&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&lt;/p&gt;&#xA;&lt;p&gt;这张图我省略了一些深的函数调用，但也能帮助我大体上掌握这个程序的执行流程。结合这张图与源码，我发现文本编辑器的核心功能——打开、编辑、保存，实现难度并不大，在C语言中容易踩坑的是缓冲区处理、文件读写这种老生常谈的内容。在这个程序中，调用最多、最重磅的部分是&lt;code&gt;initEditor&lt;/code&gt;这个函数，以及后续的高亮处理，尤其是前者在窗口尺寸计算、修改后的做法上花费了大功夫。其实和终端环境的交互才是最麻烦的点，它提供的封装和抽象并不多，有很多需要自己手动调试的地方，繁琐是显著特征。&lt;/p&gt;&#xA;&lt;h3 id=&#34;终端信号处理&#34;&gt;终端信号处理&lt;/h3&gt;&#xA;&lt;p&gt;我发现在终端程序里，需要快捷键的部分都是使用Raw mode和signal相关的函数组合实现的，在理解&lt;code&gt;signal&lt;/code&gt;这个函数和它的有关宏的概念时，耗费了比较长的时间。&lt;/p&gt;&#xA;&lt;p&gt;简单来说，signal用于处理用户在终端发出的信号，比如&lt;code&gt;SIGINT&lt;/code&gt;代表由&lt;code&gt;C-c&lt;/code&gt;产生的中断信号，&lt;code&gt;SIGIGN&lt;/code&gt;代表忽略信号，即接受到这个信号以后什么都不做，关于如何接受信号，就要说起&lt;code&gt;signal()&lt;/code&gt;这个函数。定义如下：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-c&#34; data-lang=&#34;c&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#dbbc7f&#34;&gt;void&lt;/span&gt; (&lt;span style=&#34;color:#7a8478&#34;&gt;*&lt;/span&gt;&lt;span style=&#34;color:#b2c98f&#34;&gt;signal&lt;/span&gt;(&lt;span style=&#34;color:#dbbc7f&#34;&gt;int&lt;/span&gt; sig, &lt;span style=&#34;color:#dbbc7f&#34;&gt;void&lt;/span&gt; (&lt;span style=&#34;color:#7a8478&#34;&gt;*&lt;/span&gt;func)(&lt;span style=&#34;color:#dbbc7f&#34;&gt;int&lt;/span&gt;)))(&lt;span style=&#34;color:#dbbc7f&#34;&gt;int&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;看起来非常复杂，说人话就是接受两个参数，第一个参数是int类型的&lt;code&gt;sig&lt;/code&gt;，是信号编号，比如&lt;code&gt;SIGINT&lt;/code&gt;，这是要接收的信号。第二个参数是一个函数指针，接受一个返回void，参数是int类型的信号处理函数，使用第二个函数中的函数对接受到的信号做处理。函数返回原来的信号处理函数（函数指针）。&lt;/p&gt;&#xA;&lt;p&gt;可以用typedef简化理解：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-c&#34; data-lang=&#34;c&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;// 定义信号处理函数的类型&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e67e80&#34;&gt;typedef&lt;/span&gt; &lt;span style=&#34;color:#b2c98f&#34;&gt;void&lt;/span&gt; (&lt;span style=&#34;color:#7a8478&#34;&gt;*&lt;/span&gt;&lt;span style=&#34;color:#dbbc7f&#34;&gt;sighandler_t&lt;/span&gt;)(&lt;span style=&#34;color:#dbbc7f&#34;&gt;int&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;// 用 typedef 重写 signal 声明&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#dbbc7f&#34;&gt;sighandler_t&lt;/span&gt; &lt;span style=&#34;color:#b2c98f&#34;&gt;signal&lt;/span&gt;(&lt;span style=&#34;color:#dbbc7f&#34;&gt;int&lt;/span&gt; sig, &lt;span style=&#34;color:#dbbc7f&#34;&gt;sighandler_t&lt;/span&gt; func);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;在Kilo中，&lt;code&gt;C-c&lt;/code&gt;是被忽略的，因为它非常容易导致丢失修改，可以这样实现：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-c&#34; data-lang=&#34;c&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#b2c98f&#34;&gt;signal&lt;/span&gt;(SIGINT, SIGIGN);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;不过，在Kilo的实现，是通过调用&lt;code&gt;editorReadKey()&lt;/code&gt;，从Raw Mode 中读取一个按键存入数组，用switch匹配按键对应的值再返回给调用方，调用方也通过switch，匹配对应的操作函数。而在&lt;code&gt;C-c&lt;/code&gt;的部分，则是直接break掉了。&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-c&#34; data-lang=&#34;c&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e67e80&#34;&gt;case&lt;/span&gt; &lt;span style=&#34;color:#e67e80&#34;&gt;CTRL_C&lt;/span&gt;: &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;/* Ctrl-c */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;/* We ignore ctrl-c, it can&amp;#39;t be so simple to lose the changes&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;         * to the edited file. */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#e67e80&#34;&gt;break&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;这种实现方法也有一定局限性，不同的终端模拟器可能发送不同的转义字符，硬编码转义字符会出现不适配的情况。并且使用&lt;code&gt;read()&lt;/code&gt;阻塞读取输入有性能瓶颈。&lt;/p&gt;&#xA;&lt;h3 id=&#34;精妙的数据结构与算法&#34;&gt;精妙的数据结构与算法&lt;/h3&gt;&#xA;&lt;p&gt;这个程序最有趣的地方在于清晰、通用的数据结构的设计，以&lt;code&gt;editorConfig&lt;/code&gt;为例：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-c&#34; data-lang=&#34;c&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e67e80&#34;&gt;struct&lt;/span&gt; editorConfig {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#dbbc7f&#34;&gt;int&lt;/span&gt; cx, cy;     &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;/* Cursor x and y position in characters */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#dbbc7f&#34;&gt;int&lt;/span&gt; rowoff;     &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;/* Offset of row displayed. */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#dbbc7f&#34;&gt;int&lt;/span&gt; coloff;     &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;/* Offset of column displayed. */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#dbbc7f&#34;&gt;int&lt;/span&gt; screenrows; &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;/* Number of rows that we can show */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#dbbc7f&#34;&gt;int&lt;/span&gt; screencols; &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;/* Number of cols that we can show */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#dbbc7f&#34;&gt;int&lt;/span&gt; numrows;    &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;/* Number of rows */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#dbbc7f&#34;&gt;int&lt;/span&gt; rawmode;    &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;/* Is terminal raw mode enabled? */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    erow &lt;span style=&#34;color:#7a8478&#34;&gt;*&lt;/span&gt;row;      &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;/* Rows */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#dbbc7f&#34;&gt;int&lt;/span&gt; dirty;      &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;/* File modified but not saved. */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#dbbc7f&#34;&gt;char&lt;/span&gt; &lt;span style=&#34;color:#7a8478&#34;&gt;*&lt;/span&gt;filename; &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;/* Currently open filename */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#dbbc7f&#34;&gt;char&lt;/span&gt; statusmsg[&lt;span style=&#34;color:#d699b6&#34;&gt;80&lt;/span&gt;];&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#dbbc7f&#34;&gt;time_t&lt;/span&gt; statusmsg_time;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e67e80&#34;&gt;struct&lt;/span&gt; editorSyntax &lt;span style=&#34;color:#7a8478&#34;&gt;*&lt;/span&gt;syntax; &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;/* Current syntax highlight, or NULL. */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;};&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;我们定义了一个&lt;code&gt;editorConfig&lt;/code&gt;类型的变量，它全局唯一，维护了程序的基本状态，包括行、列、滚动偏移、终端尺寸。让程序状态的流转非常清楚。这些内容都是一个文本编辑器需要关心的最核心内容：光标位置、视图偏移、数据和文件的状态等信息。&lt;/p&gt;&#xA;&lt;p&gt;通过这个结构体，能简单地获取程序当前的状态，或者为某项功能对状态作出修改，对一个新手来说还是挺拓宽思路的，至少我想不到怎么设计这些数据结构。&lt;/p&gt;&#xA;&lt;h3 id=&#34;数据与显示的分离&#34;&gt;数据与显示的分离&lt;/h3&gt;&#xA;&lt;p&gt;在&lt;code&gt;editorConfig&lt;/code&gt;中嵌套了一个&lt;code&gt;erow&lt;/code&gt;类型的变量，里面的东西也可以展开说说，定义如下：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-c&#34; data-lang=&#34;c&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e67e80&#34;&gt;typedef&lt;/span&gt; &lt;span style=&#34;color:#e67e80&#34;&gt;struct&lt;/span&gt; erow {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#dbbc7f&#34;&gt;int&lt;/span&gt; idx;           &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;/* Row index in the file, zero-based. */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#dbbc7f&#34;&gt;int&lt;/span&gt; size;          &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;/* Size of the row, excluding the null term. */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#dbbc7f&#34;&gt;int&lt;/span&gt; rsize;         &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;/* Size of the rendered row. */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#dbbc7f&#34;&gt;char&lt;/span&gt; &lt;span style=&#34;color:#7a8478&#34;&gt;*&lt;/span&gt;chars;       &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;/* Row content. */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#dbbc7f&#34;&gt;char&lt;/span&gt; &lt;span style=&#34;color:#7a8478&#34;&gt;*&lt;/span&gt;render;      &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;/* Row content &amp;#34;rendered&amp;#34; for screen (for TABs). */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#dbbc7f&#34;&gt;unsigned&lt;/span&gt; &lt;span style=&#34;color:#dbbc7f&#34;&gt;char&lt;/span&gt; &lt;span style=&#34;color:#7a8478&#34;&gt;*&lt;/span&gt;hl; &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;/* Syntax highlight type for each character in render.*/&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#dbbc7f&#34;&gt;int&lt;/span&gt; hl_oc;         &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;/* Row had open comment at end in last syntax highlight&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;                          check. */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;} erow;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;这里面有一个&lt;code&gt;render&lt;/code&gt;字段，在&lt;code&gt;editorUpdateRow()&lt;/code&gt;中，有这样的代码：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-c&#34; data-lang=&#34;c&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#dbbc7f&#34;&gt;unsigned&lt;/span&gt; &lt;span style=&#34;color:#dbbc7f&#34;&gt;int&lt;/span&gt; tabs &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#d699b6&#34;&gt;0&lt;/span&gt;, nonprint &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#d699b6&#34;&gt;0&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#dbbc7f&#34;&gt;int&lt;/span&gt; j, idx;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;/* Create a version of the row we can directly print on the screen,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;     * respecting tabs, substituting non printable characters with &amp;#39;?&amp;#39;. */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#b2c98f&#34;&gt;free&lt;/span&gt;(row&lt;span style=&#34;color:#7a8478&#34;&gt;-&amp;gt;&lt;/span&gt;render);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e67e80&#34;&gt;for&lt;/span&gt; (j &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#d699b6&#34;&gt;0&lt;/span&gt;; j &lt;span style=&#34;color:#7a8478&#34;&gt;&amp;lt;&lt;/span&gt; row&lt;span style=&#34;color:#7a8478&#34;&gt;-&amp;gt;&lt;/span&gt;size; j&lt;span style=&#34;color:#7a8478&#34;&gt;++&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#e67e80&#34;&gt;if&lt;/span&gt; (row&lt;span style=&#34;color:#7a8478&#34;&gt;-&amp;gt;&lt;/span&gt;chars[j] &lt;span style=&#34;color:#7a8478&#34;&gt;==&lt;/span&gt; TAB)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            tabs&lt;span style=&#34;color:#7a8478&#34;&gt;++&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#dbbc7f&#34;&gt;unsigned&lt;/span&gt; &lt;span style=&#34;color:#dbbc7f&#34;&gt;long&lt;/span&gt; &lt;span style=&#34;color:#dbbc7f&#34;&gt;long&lt;/span&gt; allocsize &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        (&lt;span style=&#34;color:#dbbc7f&#34;&gt;unsigned&lt;/span&gt; &lt;span style=&#34;color:#dbbc7f&#34;&gt;long&lt;/span&gt; &lt;span style=&#34;color:#dbbc7f&#34;&gt;long&lt;/span&gt;)row&lt;span style=&#34;color:#7a8478&#34;&gt;-&amp;gt;&lt;/span&gt;size &lt;span style=&#34;color:#7a8478&#34;&gt;+&lt;/span&gt; tabs &lt;span style=&#34;color:#7a8478&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color:#d699b6&#34;&gt;8&lt;/span&gt; &lt;span style=&#34;color:#7a8478&#34;&gt;+&lt;/span&gt; nonprint &lt;span style=&#34;color:#7a8478&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color:#d699b6&#34;&gt;9&lt;/span&gt; &lt;span style=&#34;color:#7a8478&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#d699b6&#34;&gt;1&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e67e80&#34;&gt;if&lt;/span&gt; (allocsize &lt;span style=&#34;color:#7a8478&#34;&gt;&amp;gt;&lt;/span&gt; UINT32_MAX) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#b2c98f&#34;&gt;printf&lt;/span&gt;(&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;Some line of the edited file is too long for kilo&lt;/span&gt;&lt;span style=&#34;color:#b2c98f&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#b2c98f&#34;&gt;exit&lt;/span&gt;(&lt;span style=&#34;color:#d699b6&#34;&gt;1&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;循环的if中使用的 &lt;code&gt;TAB&lt;/code&gt; 定义在KEY_ACTION枚举，值为9，在ASCII码中是&lt;code&gt;\t&lt;/code&gt;也就是水平制表符。代码在统计tab的数量。&lt;/p&gt;&#xA;&lt;p&gt;问题在于，一个&lt;code&gt;\t&lt;/code&gt;在内存中占1字节，但在屏幕显示的时候会占据八个字符的宽度，这里就体现出&lt;code&gt;render&lt;/code&gt;的作用了，如果一行有两个&lt;code&gt;\t&lt;/code&gt;，每个最多展开为八个空格，那么所需要计算的大小就是&lt;code&gt;2 * 8 + chars的大小&lt;/code&gt;：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-c&#34; data-lang=&#34;c&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(&lt;span style=&#34;color:#dbbc7f&#34;&gt;unsigned&lt;/span&gt; &lt;span style=&#34;color:#dbbc7f&#34;&gt;long&lt;/span&gt; &lt;span style=&#34;color:#dbbc7f&#34;&gt;long&lt;/span&gt;)row&lt;span style=&#34;color:#7a8478&#34;&gt;-&amp;gt;&lt;/span&gt;size &lt;span style=&#34;color:#7a8478&#34;&gt;+&lt;/span&gt; tabs &lt;span style=&#34;color:#7a8478&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color:#d699b6&#34;&gt;8&lt;/span&gt; &lt;span style=&#34;color:#7a8478&#34;&gt;+&lt;/span&gt; nonprint &lt;span style=&#34;color:#7a8478&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color:#d699b6&#34;&gt;9&lt;/span&gt; &lt;span style=&#34;color:#7a8478&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#d699b6&#34;&gt;1&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;那个恒为0的变量&lt;code&gt;nonprint&lt;/code&gt;可能是为将来打印不可见字符设计的。结尾的&lt;code&gt;+1&lt;/code&gt;为&lt;code&gt;&#39;\0&#39;&lt;/code&gt;预留。&lt;/p&gt;&#xA;&lt;p&gt;按照这个公式，给&lt;code&gt;render&lt;/code&gt;分配内存：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-c&#34; data-lang=&#34;c&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;row&lt;span style=&#34;color:#7a8478&#34;&gt;-&amp;gt;&lt;/span&gt;render &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#b2c98f&#34;&gt;malloc&lt;/span&gt;(row&lt;span style=&#34;color:#7a8478&#34;&gt;-&amp;gt;&lt;/span&gt;size &lt;span style=&#34;color:#7a8478&#34;&gt;+&lt;/span&gt; tabs &lt;span style=&#34;color:#7a8478&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color:#d699b6&#34;&gt;8&lt;/span&gt; &lt;span style=&#34;color:#7a8478&#34;&gt;+&lt;/span&gt; nonprint &lt;span style=&#34;color:#7a8478&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color:#d699b6&#34;&gt;9&lt;/span&gt; &lt;span style=&#34;color:#7a8478&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#d699b6&#34;&gt;1&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;随后，这些代码在非制表位填充空格：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-c&#34; data-lang=&#34;c&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;idx &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#d699b6&#34;&gt;0&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e67e80&#34;&gt;for&lt;/span&gt; (j &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#d699b6&#34;&gt;0&lt;/span&gt;; j &lt;span style=&#34;color:#7a8478&#34;&gt;&amp;lt;&lt;/span&gt; row&lt;span style=&#34;color:#7a8478&#34;&gt;-&amp;gt;&lt;/span&gt;size; j&lt;span style=&#34;color:#7a8478&#34;&gt;++&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#e67e80&#34;&gt;if&lt;/span&gt; (row&lt;span style=&#34;color:#7a8478&#34;&gt;-&amp;gt;&lt;/span&gt;chars[j] &lt;span style=&#34;color:#7a8478&#34;&gt;==&lt;/span&gt; TAB) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            row&lt;span style=&#34;color:#7a8478&#34;&gt;-&amp;gt;&lt;/span&gt;render[idx&lt;span style=&#34;color:#7a8478&#34;&gt;++&lt;/span&gt;] &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#39; &amp;#39;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#e67e80&#34;&gt;while&lt;/span&gt; ((idx &lt;span style=&#34;color:#7a8478&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#d699b6&#34;&gt;1&lt;/span&gt;) &lt;span style=&#34;color:#7a8478&#34;&gt;%&lt;/span&gt; &lt;span style=&#34;color:#d699b6&#34;&gt;8&lt;/span&gt; &lt;span style=&#34;color:#7a8478&#34;&gt;!=&lt;/span&gt; &lt;span style=&#34;color:#d699b6&#34;&gt;0&lt;/span&gt;) &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;// 在非制表位填充空格&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                row&lt;span style=&#34;color:#7a8478&#34;&gt;-&amp;gt;&lt;/span&gt;render[idx&lt;span style=&#34;color:#7a8478&#34;&gt;++&lt;/span&gt;] &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#39; &amp;#39;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        } &lt;span style=&#34;color:#e67e80&#34;&gt;else&lt;/span&gt; { &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;// 正常字符直接赋值&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            row&lt;span style=&#34;color:#7a8478&#34;&gt;-&amp;gt;&lt;/span&gt;render[idx&lt;span style=&#34;color:#7a8478&#34;&gt;++&lt;/span&gt;] &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; row&lt;span style=&#34;color:#7a8478&#34;&gt;-&amp;gt;&lt;/span&gt;chars[j];&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;row&lt;span style=&#34;color:#7a8478&#34;&gt;-&amp;gt;&lt;/span&gt;rsize &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; idx; &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;// 在循环结束的时候，idx等于写入字符总数&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;row&lt;span style=&#34;color:#7a8478&#34;&gt;-&lt;/span&gt;render[idx] &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#39;\0&amp;#39;&lt;/span&gt;; &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;//在字符末尾添加结束符&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;虽然有点绕，但设计还是非常巧妙的！&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h3 id=&#34;代码高亮&#34;&gt;代码高亮&lt;/h3&gt;&#xA;&lt;p&gt;源码中使用大量篇幅实现了代码高亮，定义了一些关键字：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-c&#34; data-lang=&#34;c&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#dbbc7f&#34;&gt;char&lt;/span&gt; &lt;span style=&#34;color:#7a8478&#34;&gt;*&lt;/span&gt;C_HL_extensions[] &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; {&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;.c&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;.h&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;.cpp&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;.hpp&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;.cc&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#d699b6&#34;&gt;NULL&lt;/span&gt;};&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#dbbc7f&#34;&gt;char&lt;/span&gt; &lt;span style=&#34;color:#7a8478&#34;&gt;*&lt;/span&gt;C_HL_keywords[] &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;/* C Keywords */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;auto&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;break&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;case&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;continue&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;default&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;do&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;else&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;enum&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;extern&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;for&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;goto&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;if&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;register&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;return&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;sizeof&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;static&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;struct&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;switch&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;typedef&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;union&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;volatile&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;while&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;NULL&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;/* C++ Keywords */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;alignas&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;alignof&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;and&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;and_eq&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;asm&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;bitand&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;bitor&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;class&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;compl&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;constexpr&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;const_cast&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;deltype&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;delete&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;dynamic_cast&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;explicit&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;export&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;false&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;friend&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;inline&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;mutable&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;namespace&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;new&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;noexcept&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;not&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;not_eq&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;nullptr&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;operator&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;or&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;or_eq&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;private&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;protected&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;public&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;reinterpret_cast&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;static_assert&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;static_cast&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;template&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;this&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;thread_local&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;throw&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;true&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;try&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;typeid&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;typename&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;virtual&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;xor&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;xor_eq&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;/* C types */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;int|&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;long|&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;double|&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;float|&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;char|&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;unsigned|&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;signed|&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;void|&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;short|&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;auto|&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;const|&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;bool|&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#d699b6&#34;&gt;NULL&lt;/span&gt;};&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;然后在具体实现&lt;code&gt;editorUpdateSyntax()&lt;/code&gt;中，简单粗暴地遍历字符匹配这些关键字。在一般的教学例子中这样实现是可以的，我认为在具体的工程中应当用词法分析、语法分析和字典树去匹配。更易于维护和拓展，也能适配复杂的嵌套。&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;p&gt;上述分析提到的缺点都可以作为优化方向，比如提供更简单操作接口，用词法分析技术或接入LSP服务器，为程序提供Lua接口来扩展插件……不过我相信在古老的纯C应用中，添加这些功能的繁琐程度和开发周期简直是灾难级别的。但是在处理快捷键上，使用&lt;code&gt;termcap&lt;/code&gt;库的难度应该小于修改代码高亮部分的难度。&lt;/p&gt;&#xA;&lt;p&gt;这个项目最值得学习的点是如何将抽象的功能和终端联系起来、如何设计合理的数据结构以及标准库的使用。是阐释「程序 = 数据结构 + 算法」的很好例子。不过我自己是想不到那些函数该什么时候用，没准还会手动实现标准库造好的轮子呢。&lt;/p&gt;&#xA;&lt;p&gt;学习的过程很好玩，从主函数开始探索整个程序，一段一段地跳转调用，A调用B，B调用C，C调用D，理解了逻辑后再把它们画成图，对感兴趣的部分深入研究，有一种前人用他的智慧抚平我大脑褶皱的感觉……读懂它，几乎就等于一只脚趾踩上了理解Vim / Nano等项目的大门吧。&lt;/p&gt;&#xA;&lt;p&gt;想自己重新实现一次，然后加入自己的优化，比如联动Lua / Zig甚至是Go来实现上层的功能，好玩好玩真好玩。&lt;/p&gt;&#xA;&lt;p&gt;头皮好痒，要长脑子了！&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;在查资料的过程中又发现了 &lt;a href=&#34;https://github.com/martanne/vis&#34;&gt;vis&lt;/a&gt; 和 &lt;a href=&#34;https://github.com/zyedidia/micro&#34;&gt;micro&lt;/a&gt;（它甚至是用Go写的），又有新玩具了！&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;</description>
    </item>
    <item>
      <title>那种虚伪的互动和友善，赶快把它撕破吧！</title>
      <link>https://blog.verdant.ee/posts/tear-hypocrisy-apart/</link>
      <pubDate>Thu, 04 Dec 2025 16:15:36 +0800</pubDate><author>i@glowisle.me (五葉地錦)</author>
      <guid>https://blog.verdant.ee/posts/tear-hypocrisy-apart/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;本文使用了一些带有攻击性的词汇，言论风格尖锐，介意者谨慎阅读。&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;本来想随便写写近期的事，写到网站最近的变化，写到了评论区的问题，越写越多，单独开一篇文章来说说吧。有时候觉得自己像个愤青一样，或者就是个愤青，整天喷天怼地的，应该平和点，不过实在不吐不快。&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;给评论区做减法&#34;&gt;给评论区做减法&lt;/h2&gt;&#xA;&lt;p&gt;最近我把评论系统换成了Giscus，原因很简单：我累了。&lt;/p&gt;&#xA;&lt;p&gt;关于评论系统，我想了很长时间。&lt;/p&gt;&#xA;&lt;p&gt;至少是在我的博客里，如果是议论类文章，基于事实或观点的讨论、延伸，或反驳。偏题跑题、没看完或没看懂文章就急于发表评论的情况并不少见。而且性子比较急的朋友直接看到了评论区，自己的重点也可能会被带跑偏，于是构成恶性循环……&lt;/p&gt;&#xA;&lt;p&gt;如果是记录类，分享见闻的文章，评论除了附和、赞同之类的评论，也难以找其它类型的评论，而且似乎也不会出现其他类型的评论。&lt;/p&gt;&#xA;&lt;p&gt;我不是要说教读者该如何写评论，其实是我并不擅长回应这种评论，或者可以说，我没有跟人闲唠嗑说家常和寒暄的能力。一些评论留下的话茬实在让人很难接上，但不回复又显得冷漠，这是一直以来让我困扰的问题。和社交沾边的事，不是热脸贴冷屁股，就是痛并快乐着，又在期待与不安中挣扎。&lt;/p&gt;&#xA;&lt;p&gt;七八月的时候我特意在评论区上方注了一行小字，具体原文不记得了，但我记得大意是：「&lt;strong&gt;我没回复是因为赞同，或者没什么可说的，而不是因为对你有意见&lt;/strong&gt;」。主题改来改去，换来换去，就忘了重新写上这行字了。这是为我不回复这一行为的辩解，也是为读者可能会受到的「冷落」所做的提前安慰。&lt;/p&gt;&#xA;&lt;p&gt;另一方面，维护Waline的外部CSS很麻烦，我也不想再修改CSS了。&lt;/p&gt;&#xA;&lt;p&gt;我在使用Waline的时候尝试给评论功能做减法，我移除了表情回复和正文插入表情的功能、移除了表情包，删除了点赞、头衔，隐藏了头像和IP。力求打造安静的浏览和讨论氛围，甚至有移除网址文本框的想法。出于对博客的理念不同，有些同样在写博客的人就是冲着这个框来的，他们可能就是非常享受与人社交的获得感，把博客作为社交名片。&lt;/p&gt;&#xA;&lt;p&gt;我觉得移除网址框可以减少为了自我营销而发送的评论，因为自己的博客沦为别人的推广场所的滋味很难受，也实在不知道怎么对待这些评论最为恰当。也想过关闭评论区。如果关闭评论区，可能会显得高冷，甚至是封闭。&lt;/p&gt;&#xA;&lt;h2 id=&#34;折中的方案&#34;&gt;折中的方案&lt;/h2&gt;&#xA;&lt;p&gt;转念一想，我怕的是什么？怕的是不知道如何接话。那么提高评论的「门槛」，让真正想要讨论的人评论，也许能解决问题。所以我换成了从前被我鄙视的Giscus。我当时觉得一定需要Github帐号才能评论是在一定程度上打消读者互动的积极性的，但现在才意识到了这是在&lt;strong&gt;放过自己&lt;/strong&gt;。说真的，我非常佩服那些能一直和人聊得来，接得上话的人，也很佩服从一篇干巴巴的日常分享，甚至只有几张图的文章里找出可以评论的点的人，这确实是一种社交能力。&lt;/p&gt;&#xA;&lt;p&gt;为了照顾没有Github或访问不方便的读者，我也放了一个邮件链接，可以点击发送邮件评论。由于使用场景，它多少会和「正式性」沾边，这也就间接提高了交流的质量。虽然我的博客并没有什么流量，但&lt;strong&gt;有效的交流，总比虚伪的敷衍强&lt;/strong&gt;。我知道那些评论可能出于友善，但是妥善处理它们对我真的很难。&lt;/p&gt;&#xA;&lt;p&gt;简单地来说，让说话更麻烦，是一种让说出来的话更有分量的方式。它会让说话的人经过深思熟虑，认真想想这些话到底值不值得我费这么大劲去说。&lt;/p&gt;&#xA;&lt;h2 id=&#34;为什么我认为新的做法更好&#34;&gt;为什么我认为新的做法更好&lt;/h2&gt;&#xA;&lt;p&gt;可能有人要批判我是「精英主义」，把Email和Giscus强行和高质量讨论绑定在一起，或者认为我说以前的讨论都是低质量，我要为自己辩解。&lt;/p&gt;&#xA;&lt;p&gt;首先，不是会用Github和Email的人都能写高质量的评论，而是这个方法在「倒逼」出正经的评论。&lt;/p&gt;&#xA;&lt;p&gt;Github和技术身份强关联，它代表作为开源社区的一员的你，对某篇文章的看法。如果说得更「敏感」点，为了维护网络上的形象，至少不应该写出冒犯性的话语或无理取闹的反驳。而邮件在其它场合下的使用就如上文所说，是带有一定正式性的，并且写邮件的「仪式感」也很容易让人认真对待这件事。至少需要安安静静坐下来，组织完整的语言表达看法，留有正式的署名和日期，长期可以留存 —— 这些都在间接促成一个或严谨或私密的正式的讨论环境。&lt;/p&gt;&#xA;&lt;p&gt;虽然这种做法可能会拦住内向但真诚或没有技术背景的读者，但也能拦住自我营销与应付不来的闲谈，我没有排斥喜爱轻松交流氛围的读者，这是不得已的取舍。而且博客不是论文期刊和政府文件，不是公示真理和规范的地方，这里是自我表达的地方，我在尽力打造理想中的秩序和风格。&lt;/p&gt;&#xA;&lt;p&gt;此方法也能防止某些幽默的匿名评论。虽然当年百度贴吧和知乎都有很多匿名神贴，匿名才能让他们大胆表达，但总有这么一小波的大胆，给人一种傲慢和轻视的感觉。&lt;/p&gt;&#xA;&lt;h2 id=&#34;林子不大也有各种鸟&#34;&gt;林子不大也有各种鸟&lt;/h2&gt;&#xA;&lt;p&gt;比如说&lt;a href=&#34;https://www.glowisle.me/posts/guilt/&#34;&gt;《罪恶感》&lt;/a&gt;这篇文章写得确实非常矫情，但有人匿名评论：&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&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;青春期&lt;/strong&gt;吧…&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;这位网友的评论在不在理，确实是在理的。但连留个邮箱的勇气都没有，匿名在&lt;strong&gt;个人&lt;/strong&gt;博客唱反调的行为，高高在上地想轻易解决慢性病，并把情绪都归结给青春期的傲慢的行为，属实让人忍俊不禁。&lt;/p&gt;&#xA;&lt;p&gt;虽然文章发出来了肯定会有被人喷的风险，但我当时还是忍着自己的痛苦和不安，让人轻飘飘地说得一文不值的愤怒，给出了一个回复：&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;文本解读能力的问题&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;经历和共情能力的问题&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;我尊重你这个没啥大事的看法，不强求共鸣。&lt;/p&gt;&#xA;&lt;p&gt;说得好，我同意了，玩去吧。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;现在再仔细想想，这种文章根本不可能有人从搜索引擎来，大概率是某个混博客圈子的人，大概率也写博客。英国女作家伊夫林·比阿特丽斯·霍尔说过：「虽然我不同意你的观点，但我誓死捍卫你说话的权利。」&lt;/p&gt;&#xA;&lt;p&gt;我今天说，虽然我不同意你的观点，但你唱反调连告诉我你是谁的胆子都没有，&lt;strong&gt;那你他妈的还是闭嘴吧！&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;如果你反对我，那就请你逻辑严密地写出几百字来批判我，即使是匿名我也会输得心服口服，在这种情况里匿名甚至可以促进大胆批判。而傲慢地写下反驳的话语却不敢署名的敢做不敢当的行为，我只能认为你是一个弱者，仗着个人博客对读者隐私的保护与自由的追求，输出轻浮的观点。&lt;/p&gt;&#xA;&lt;p&gt;当然，匿名评论不是一定没有优势，如上文所说可以促进大胆批评，但任何事情都能从不同角度思考出不同的结果，没有人能做到真正的公平和客观，我只是尽力在维护边界。&lt;/p&gt;&#xA;&lt;p&gt;在非匿名的评论中，有些人挂着自己的网站链接，写一句「学习了！」、「写得好！」，甚至连编程语言是哪个都没看清，指鹿为马地夸赞着，长期在各个博客的评论区混迹着。&lt;/p&gt;&#xA;&lt;p&gt;出于人情的默契，这类行为往往被默许。我相信这是中文博客圈的大家都看破不说破的问题。今天我就在这里，以一个和大多数博主比起来确实是小孩的年龄，指出皇帝完全就是光着屁股在大街上乱逛。&lt;/p&gt;&#xA;&lt;p&gt;我并不反对匿名评论和评论区，而是反对形式化的评论区，反对只是为了自己网站的外链的评论，&lt;strong&gt;反对形式化的、缺乏真诚的互动，而非反对社交本身&lt;/strong&gt;。评论区应当是能围绕文章展开讨论、甚至是反驳的地方，哪怕意见相左，只要是真诚的表达，任何博主都会愿意真诚回应。但当评论的形式大于其本身的作用时，就该好好思考一下它究竟有没有继续存在下去的意义，以及如何存在下去了。&lt;/p&gt;&#xA;&lt;p&gt;这种你唱我喝，看似牢固的关系，我在其它地方也有感受。&lt;/p&gt;&#xA;&lt;p&gt;大概在十月份，我退掉了很多在上一次&lt;a href=&#34;https://www.glowisle.me/posts/%E4%BF%A1%E6%81%AF%E8%8A%82%E9%A3%9F/&#34;&gt;信息节食&lt;/a&gt;行动时没有退掉的QQ群。虽然确实有几位群友在问我为什么退群了，但过了一段时间后，仅仅是少了一个人自言自语。该打游戏的还在打游戏，该上班的还在上班，该骂街的还在骂街。这很正常，但也很残酷，少了某个人，大家照样吃饭，中东那几个国家照样战乱不断，地球照样天天转。&lt;/p&gt;&#xA;&lt;p&gt;这种浅层的链接，只是披着一层友情之皮的无关紧要的感情。当然，这都是我的一家之言，你也可以认为我在社交上相当失败。&lt;/p&gt;&#xA;&lt;p&gt;我能理解那种单纯对文章表达欣赏，又期待被回访的复杂心理。我个人的做法是开启一个点赞按钮。如果赞同或欣赏文章，也许不发那些简单但带有善意的评论，按一下那个按钮也能表达认同的态度。关于期待回访的心情，如果不是真正读了你的文字，被你的灵魂打动，那种回访就是肤浅且客套的，也许回访者也是出于迫不得已的礼仪压力。&lt;/p&gt;&#xA;&lt;p&gt;所以无论是Q群聊天还是博客&lt;strong&gt;为了外链&lt;/strong&gt;的「互访」，为了自己和他人考虑，为了让自己不再苦恼于如何应对根本没有留下话茬的评论，为了让别人不再绞尽脑汁填写自己博客的链接，如果你也厌倦了廉价的温情，那就来吧，&lt;strong&gt;那种虚伪的互动和友善，赶快把它撕破吧！&lt;/strong&gt;&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>看《南京照相馆》</title>
      <link>https://blog.verdant.ee/posts/dead-to-rights/</link>
      <pubDate>Sun, 30 Nov 2025 20:36:51 +0800</pubDate><author>i@glowisle.me (五葉地錦)</author>
      <guid>https://blog.verdant.ee/posts/dead-to-rights/</guid>
      <description>&lt;p&gt;学校里每周一次的美术课在升入初三后，改为放电影，我在学校看完了一大半的《南京照相馆》，今天在家看完了剩余部分。&lt;/p&gt;&#xA;&lt;p&gt;先说结论，《南京照相馆》无疑是一部艺术水平、教育意义极高、角色塑造饱满、讽刺控诉手法辛辣的非常成功的电影。&lt;/p&gt;&#xA;&lt;h2 id=&#34;为什么南京照相馆更出彩&#34;&gt;为什么《南京照相馆》更出彩&lt;/h2&gt;&#xA;&lt;p&gt;《南京照相馆》比同类型影片更出彩的原因是，它以平民的视角，揭露了抗日战争时期日寇在南京城泯灭人性的暴行，让战争的残酷更能落地。电影没有以上帝视角带着必胜的信念，泛泛而谈战争，而是用平民百姓在战争中受到的伤害、屈辱、苦难、屠杀，把战时普通老百姓的无助和绝望展现给观众。这就让历史看得见、摸得着，感受得到。而且没有宏大的英雄主义叙事，没有无所不能的超人式的人物，而是聚焦在小人物的挣扎。&lt;/p&gt;&#xA;&lt;p&gt;其表现手法精湛之处数不胜数，举几个让我印象深刻的例子：&lt;/p&gt;&#xA;&lt;p&gt;&lt;figure class=&#34;image-caption&#34;&gt;&#xA;    &lt;img src=&#34;https://images.glowisle.me/anomono.webp&#34; alt=&#34;人与非人&#34;&gt;&#xA;    &lt;figcaption&gt;人与非人&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;figure class=&#34;image-caption&#34;&gt;&#xA;    &lt;img src=&#34;https://images.glowisle.me/2025-11-30_19-56.webp&#34; alt=&#34;「仁义礼智信」&#34;&gt;&#xA;    &lt;figcaption&gt;「仁义礼智信」&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;「保护那个人的生命，那是仁。」&lt;/p&gt;&#xA;&lt;p&gt;「在照相馆挂上了安全的牌子，那是义。」&lt;/p&gt;&#xA;&lt;p&gt;「向他们提供食物和药品，那是礼。」&lt;/p&gt;&#xA;&lt;p&gt;「借刀杀人，那是智。」&lt;/p&gt;&#xA;&lt;p&gt;「遵守诺言，给他们通行证，那是信。」&lt;/p&gt;&#xA;&lt;p&gt;「我的理解，没有错吧？」&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;那个军官一边用毛笔写着歪歪扭扭的汉字，一边自信地说着。每写一个字都穿插平民百姓被虐待凌辱杀害的镜头。&lt;/p&gt;&#xA;&lt;p&gt;仁义礼智信，一个也不沾。&lt;/p&gt;&#xA;&lt;p&gt;有一个小细节，图一的台词中，中英字幕的表述都是「那个人 / 那个男人」，而日语的台词中使用「もの」，意思是「物、东西」。这也回答了林毓秀问王广海的那个问题：「日本人会把我们当人看吗？」&lt;/p&gt;&#xA;&lt;p&gt;人性都泯灭了，如何理解人权？&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;p&gt;&lt;figure class=&#34;image-caption&#34;&gt;&#xA;    &lt;img src=&#34;https://images.glowisle.me/2025-11-30_21-48.webp&#34; alt=&#34;&#34;&gt;&#xA;    &lt;figcaption&gt;&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&lt;/p&gt;&#xA;&lt;p&gt;在电影结尾，苏柳昌对伊藤用日语说出的强有力的「私たちは友達じゃない。絶対。」（我们不是朋友，绝对不是。）把这条从苏给伊藤洗照片开始的虚伪的「朋友」暗线推向高潮。&lt;/p&gt;&#xA;&lt;p&gt;选用对方的语言，不是因为认可，而是确保对方能明确自己的态度。这句话不仅是对伊藤说的，也是说给今天的观众听的。它扯碎了美化或淡化历史的人给罪行扣上的面具，更是对当今日本的军国主义残余势力说的，振聋发聩。&lt;/p&gt;&#xA;&lt;p&gt;从角色塑造上，以王广海为例，能看到一条清晰的成长轨迹。&lt;/p&gt;&#xA;&lt;p&gt;在最初，王是一个麻木、圆滑、对日军抱有不切实际的期望且极尽谄媚的汉奸形象，经典言论是：「日本人主持南京，我们的好日子就来了。」&lt;/p&gt;&#xA;&lt;p&gt;但在拍照片时日军把婴儿（华华）摔死后、在现场亲眼目睹屠杀后，对日军的态度慢慢发生改变，在自己的妻子快要被日军羞辱后彻底觉醒反抗，但也死在了大梦初醒的恍惚时分，被伊藤枪杀。&lt;/p&gt;&#xA;&lt;p&gt;王广海和伊藤都是电影中层次感塑造非常好的角色，前者从麻木中觉醒人性和反抗精神，后者则一步步泯灭人性，显现出野蛮的本质，尽显侵华日军的虚伪、狡诈、残忍。&lt;/p&gt;&#xA;&lt;h2 id=&#34;应当这样落实爱国主义教育&#34;&gt;应当这样落实爱国主义教育&lt;/h2&gt;&#xA;&lt;p&gt;谈起抗日题材的影视作品，「爱国」是不得不说的一环。《南京照相馆》证明了，大家并不是讨厌以爱国为主旋律的电影，只是反感低水平的卖弄爱国情怀，以圈钱为目的烂片炒作和道德绑架。&lt;/p&gt;&#xA;&lt;p&gt;我作为一个学生，向来对所谓「爱国主义教育」嗤之以鼻，因为它是烈日炎炎下空洞枯燥的演讲，是手抄报，是观后感、读后感，是一项任务，一个形式，是考试的标准答案，是政治正确。如上的所谓「爱国主义教育」倒不如说成「形式主义驯服」和「仇恨教育」。&lt;/p&gt;&#xA;&lt;p&gt;而看了《南京照相馆》，切实体会到历史伤疤的疼痛和战争的残酷，是一种更高级更有效的教育，能让人更深刻认识到「国」是如何来的、为什么要爱国，以及和平的珍贵。&lt;/p&gt;&#xA;&lt;p&gt;当今中日关系形式紧张，由于最近国内的发展状况，反日情绪高涨，高市早苗屡次冒犯，反复在台湾问题上试探底线，在九三阅兵后，不少人对可能会发生的战争持乐观甚至戏谑轻敌的态度，而教员早就在抗日战争刚刚拉开帷幕时撰写《论持久战》批驳了速胜论和速亡论两种错误的观点，其精神内核在今天仍旧有指导意义，即使敌我实力差距悬殊，过度乐观和轻敌都不是好的信号。&lt;/p&gt;&#xA;&lt;p&gt;我们不仅要防日本军国主义复辟，更要防极端民族主义思潮的侵袭。针对日本平民的复仇思想，希望南京的惨剧在东京重演，也是不切实际且残忍的想法。应当正视并铭记历史而不是延续仇恨，关心身边为祖国做出贡献的底层人民和劳动者而不是空喊爱国口号。爱「国」这个抽象的符号，一定要落到具体的人。&lt;/p&gt;&#xA;&lt;p&gt;虽然这部电影在艺术上取得了成功，但在技术上仍有不足之处&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;、且结尾直接进入审判略显仓促，但总体来说是一部非常成功的电影，是一部很干净纯粹的电影，价值观导向正确、拍摄手法和思路水平高，反映真实的历史。它没有卖弄爱国情怀，也没有让侵略者怜悯的情节，而是用受害者的一腔悲愤和不屈为战争大背景下的小人物立碑作传。在惨烈的战争后，我们更应该珍爱和平，电影落幕后，窗外的安定与幸福就是最好的彩蛋。愿我们这一代人铭记历史，革命先烈安息，祖国繁荣昌盛，世界和平安定！&lt;/p&gt;&#xA;&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;&#xA;&lt;hr&gt;&#xA;&lt;ol&gt;&#xA;&lt;li id=&#34;fn:1&#34;&gt;&#xA;&lt;p&gt;1:22:26演员双手没有被捆至背后，在被杀害后手从身后挣扎开倒地；1:22:26伊藤翻开的抽屉中有左至右书写的简体字「档案袋」，下方有拼音「DANG AN DAI」。&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/div&gt;&#xA;</description>
    </item>
    <item>
      <title>从四年前的夏天说起。</title>
      <link>https://blog.verdant.ee/posts/%E4%BB%8E%E5%9B%9B%E5%B9%B4%E5%89%8D%E7%9A%84%E5%A4%8F%E5%A4%A9%E8%AF%B4%E8%B5%B7/</link>
      <pubDate>Sat, 15 Nov 2025 19:24:14 +0800</pubDate><author>i@glowisle.me (五葉地錦)</author>
      <guid>https://blog.verdant.ee/posts/%E4%BB%8E%E5%9B%9B%E5%B9%B4%E5%89%8D%E7%9A%84%E5%A4%8F%E5%A4%A9%E8%AF%B4%E8%B5%B7/</guid>
      <description>&lt;p&gt;那时候还不懂人事，记忆似乎还没有形成一条流畅的线性结构，只是几个简陋的画面拼凑。大概是在二零二一年，我开始学习素描。&lt;/p&gt;&#xA;&lt;p&gt;那时候机构就在家楼下，甚至从窗户就能望到那里落地窗后的人影，每周六下午两点，我带着电话手表去上课，明明就在小区里，到地方后还是要拍上一张自拍证明自己安全到达目的地。那里只有四五间教室，其它的教室都关着门，只有走廊尽头的那间时常开着。屋子里摆着一排笨重的木质画架，墙中央有一台挂壁电视，老师用一根HDMI线将自己的笔记本电脑和那台电视连接上，放着幻灯片。第一节课讲很基础的内容，比如坐姿、握笔方式。&lt;/p&gt;&#xA;&lt;p&gt;老师看起来像刚毕业不久的大学生。只记得有一段时间她变着花样扎头发，最近几个月剪成短发了。&lt;/p&gt;&#xA;&lt;p&gt;之后的一段时间，我每天都很盼望周六的素描课，源于什么呢？学习到新东西催生出的热情？还是三分钟热度的第一秒？无从得知。也许只是一种本能上的喜爱。我断断续续地学了两年，从基础的正方体、棱锥，到贯穿体，正十二面体、多种几何体组合，我画了两年的几何体。&lt;/p&gt;&#xA;&lt;p&gt;除了几何体外，有些节假日也会组织外出写生。&lt;/p&gt;&#xA;&lt;details&gt;&#xA;&lt;summary&gt;2022年劳动节 极其稚嫩的笔触&lt;/summary&gt;&#xA;&lt;img src=&#34;https://images.glowisle.me/7f3bee45f2840a22ed7749f338f21e47.jpg&#34;&gt;&#xA;&lt;/details&gt;&#xA;&lt;p&gt;写生，对线条的掌控能力远不如现在的三分之一的我，抱着画板坐在斑驳的树影里，画过远处的河湖楼房，画过近处的花草树木。每次地点都选在热闹的公园里僻静的角落，有一种偷偷摸摸的感觉。&lt;/p&gt;&#xA;&lt;p&gt;那两年我对画画的热情极高涨，有时间也有精力去练习。当时我的造型能力在同龄人中比较出众，因此还获得了美术老师，也是我们的副班主任的青睐，有相关的任务都会布置给我。&lt;/p&gt;&#xA;&lt;p&gt;我们在画了两年几何体之后开始学习简单的静物，从切面苹果开始。梨、洋葱、菠萝……能进嘴里的画了个遍后，开始画罐子杯子：陶瓷的罐子、不锈钢的壶、玻璃的酒瓶……&lt;/p&gt;&#xA;&lt;p&gt;无论是学画画，还是学跳舞、钢琴、吉他，考级都是必不可少却没什么实际用途的工作，至少素描是这样的。我先后考取了素描二级、三级、四级、六级和七级证书，积分入团制度的有关文件明确表示不可以用考级证书，显而易见地，也没有任何一场考试会因为你有考级证书而加分。而考试的内容和难度堪称儿戏，交完报名费，在培训机构考完寄走，过几个月证书就会被寄回来。我没有经历过一次失败，这就使我不禁怀疑成功的含金量。或许下一次我应该尝试只画到明暗关系就交卷，如果这样也能拿到证书的话，就能完美地证明这场考试是骗小孩的。&lt;/p&gt;&#xA;&lt;p&gt;但我还是一级一级地考下来了。&lt;/p&gt;&#xA;&lt;p&gt;这是让我在人前能稍微抬得起头的为数不多的资本。或者说，这可能是我的特长。在一个身高特矮、样貌特丑、脾气特怪、脑子特笨的人身上找到特长是一件多么不容易的事！这是我在积极的方面与众不同的地方！&lt;/p&gt;&#xA;&lt;p&gt;我感谢我的父母，没有阻止我踏上学习绘画这条路。我也感谢我的老师，如果没有她成熟且深刻的教育理念、方法和耐心，我绝对没有今天的技术。&lt;/p&gt;&#xA;&lt;p&gt;今天写下这篇文章，就是因为我发现我唯一的特长似乎要被磨灭了。&lt;/p&gt;&#xA;&lt;p&gt;素描是一切绘画的基础中的基础，如果没有素描经验，学习任何类别的绘画都是困难的，素描从思维上提供了几乎贯穿所有绘画类别的思考方式。在素描的基础之上，我开始发展板绘。以单色插画和漫画为主。&lt;/p&gt;&#xA;&lt;p&gt;练习了一段时间后，老师说我的水平可以接稿赚些零用钱。能凭手艺赚钱是非常了不起的，也需要极其成熟的技术。我曾经在网络上见到很多线条都画不稳，结构更是一团糟的所谓「画师」在社交媒体发表自己的画作，表示自己要接稿。而评论区清一色都是夸赞。点开那些人的主页，同样的画风、同样的问题。&lt;/p&gt;&#xA;&lt;p&gt;我不是好为人师的那种人，也知道自己是什么货色。但想也明白，这些一味的夸赞与被夸赞是不能促成进步的，因此他们才会一直停留在这样的水平。如果指出问题，不仅伤人家的心，也容易卷入骂战，恶臭缠身。这种小圈子自嗨的现象并不少见。在绘画教程视频的评论区能见到不少说「求评价」，但指出问题又怼人拉黑的。想获得夸赞，没有过硬的实力就是痴心妄想。我非常厌恶这种自以为是，只能听进去佞语的家伙。&lt;/p&gt;&#xA;&lt;p&gt;一分钟，五分钟，十分钟，三十分钟，一小时……&lt;/p&gt;&#xA;&lt;p&gt;周一，周二，周三，周四，周五，周六，周日，周一……&lt;/p&gt;&#xA;&lt;p&gt;时间、精力、活力，都被这一轮又一轮的循环绞杀了。我的水平在急速下降。近些天一直保持绘画，只是为了证明些什么，也许是证明我还有擅长的事。我却发现我画出的东西和我讨厌的那类人几乎属于同一个水平了。看不到进步不可怕，看见退步也不可怕，看见自己的水平退步到于自己曾经最讨厌的一类人几乎齐平，这才是最令人生理性反胃的。一种熟悉的自我厌恶感在纸上的墨水里汇聚成了一股，贯穿我的眉心。这几个月，成绩平平、身体虚弱、心力矫情又拧巴的我，最终画画这件事也变成了这样。&lt;/p&gt;&#xA;&lt;p&gt;热情的洪水决堤，淹没一切的行动力，溃散。&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>博客一周年：我的表达、自由与偏见 —— 当一个「反流行」写作者</title>
      <link>https://blog.verdant.ee/posts/first-blog-anniversary/</link>
      <pubDate>Sat, 08 Nov 2025 22:18:05 +0800</pubDate><author>i@glowisle.me (五葉地錦)</author>
      <guid>https://blog.verdant.ee/posts/first-blog-anniversary/</guid>
      <description>&lt;h2 id=&#34;搭建&#34;&gt;搭建&lt;/h2&gt;&#xA;&lt;h3 id=&#34;探索时期&#34;&gt;探索时期&lt;/h3&gt;&#xA;&lt;p&gt;在2023年9月16日，我在腾讯云注册了第一个域名，使用一台轻量服务器搭建了WordPress博客，但也仅限于此，我只是搭建好了服务，并没有在上面写点什么，只是觉得有一个自己的网站很酷，这并不能作为我开始写博客的准确日期。实际上在这之前，我就用 &lt;a href=&#34;https://kslabs.ru/&#34;&gt;Ksweb&lt;/a&gt; 尝试搭建过自己的网站，并且Typecho和WordPress都尝试过，但当时没有做内网穿透，所以也不能算作正式开始写博客。&lt;/p&gt;&#xA;&lt;p&gt;严格意义上讲，我是从2025年11月3日使用 &lt;a href=&#34;https://github.com/Meekdai/Gmeek/releases&#34;&gt;Gmeek&lt;/a&gt;正式搭建完第一个认真更新的博客，12月迁移到了Typecho，我当时发了一篇很短的文：&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;将会迁移到这里。我会把有价值的文章转过来 原因仅仅是gmeek有点太简陋了，虽然typecho也差不多，不过他可以折腾一下主题之类的，并且我每个月还多花出去九十大洋。但是总比gmeek逼格高点吧。 不得不说，Linux绝对是世界上最麻烦的玩意，解压下载文件都费劲。要不是Windows资源占用多我绝对不会去用这玩意。 这次可是孤军奋战，背后没有github服务器的靠山了。要是忘了续费服务器我会丢失所有的文章，又是一个负担和一个纠结的点&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;——&lt;a href=&#34;https://www.glowisle.me/posts/6/&#34;&gt;网站迁移&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;之后回看连我自己都忍不住吐槽自己的无知：&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;2025.8.24二编：Gmeek简直太符合博客的定位了，不花里胡哨，完全够用，有网就能写文章……&lt;/p&gt;&#xA;&lt;p&gt;Linux太好用了，目前Debian12养老中。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;现在发现，自己以前做了很多不明智的决定，比如放弃使用Gmeek……&lt;/p&gt;&#xA;&lt;p&gt;使用Typecho期间，我开始学习Java编程，早期有很多简陋的笔记文章充数，但那时候学习和写博客是一个&lt;strong&gt;相互促进&lt;/strong&gt;的过程，我相信很多技术博主能体会到我说的这一点。&lt;/p&gt;&#xA;&lt;h3 id=&#34;转型时期&#34;&gt;转型时期&lt;/h3&gt;&#xA;&lt;p&gt;在2025年3月3日，我&lt;a href=&#34;https://www.glowisle.me/posts/4/&#34;&gt; 从Typecho迁移到了Hexo&lt;/a&gt;，在这之后博客的内容开始聚焦于&lt;strong&gt;骂人&lt;/strong&gt;，对，就是骂人。骂老师，喷学校占用午休时间搞课桌舞，喷素质低下的同学等等，但只有情绪输出，写得很垃圾，大部分都删掉了。&lt;/p&gt;&#xA;&lt;p&gt;在25年5月份到8月份是更新频率最高的一段时间，主要围绕折腾Linux, C, 数据结构与算法，一些技术内容为主，少部分是非技术类内容。7 月份到8月份写了一些很矫情的散文以及自以为是的书评，还有根本站不住脚的议论类文章，满满的黑历史。&lt;/p&gt;&#xA;&lt;p&gt;其中，7 月7日我从Hexo转移到Hugo，我认为这是静态博客的最优选择了，高性能、易配置，如果一定要我挑出一个毛病，那也不是程序上的，而是中文文档的数量和质量略差，但无伤大雅，只要有翻译插件和基础的英语水平还是可以读得来英文文档的。&lt;/p&gt;&#xA;&lt;h2 id=&#34;所见和所感&#34;&gt;所见和所感&lt;/h2&gt;&#xA;&lt;p&gt;我加入了一些博客圈子，某些组织给我的印象并不是特别好——各种方面上。我最早加入的是&lt;a href=&#34;https://www.boyouquan.com/home&#34;&gt;博友圈&lt;/a&gt;，氛围很好，关于网站的Bug，维护者跟进非常积极，但我不常访问这个网站，它的随机博客功能总是有重复，没有什么新鲜感。&lt;/p&gt;&#xA;&lt;p&gt;另一个常访问的是&lt;a href=&#34;https://www.foreverblog.cn/go.html&#34;&gt;十年之约&lt;/a&gt;，主要是为虫洞功能，重复博客出现的次数很少。&lt;/p&gt;&#xA;&lt;p&gt;我这么做，一是为了看看别人都在写点什么，找点有意思的博客订阅，二是看看别人网站的样式都是怎么设计的。前者老生常谈，我觉得样式设计问题可以仔细聊一聊。&lt;/p&gt;&#xA;&lt;h3 id=&#34;某种意义上样式最重要&#34;&gt;某种意义上样式最重要&lt;/h3&gt;&#xA;&lt;p&gt;虽然博客确实应该最优先考虑内容质量，但是不能否认一个好的样式设计能更加分。而且在读者深度阅读前，先看到的是样式，这属于第一印象。每个人都有不同的审美倾向，但我个人不太喜欢的就是类似&lt;a href=&#34;https://github.com/anzhiyu-c/hexo-theme-anzhiyu&#34;&gt;安知鱼&lt;/a&gt;和&lt;a href=&#34;https://78.al/&#34;&gt;Joe&lt;/a&gt;臃肿的设计风格（没有说用这两个主题的博客不好的意思，不要打我！！！）。&lt;/p&gt;&#xA;&lt;p&gt;我的观点是，样式的设计始终是为内容服务的，而博客最主要的内容一定是文章，文章。所以一些组件就是非必要的，所谓 Less is more, 博客主题的设计应该始终放在博客的本质：「你想说什么」上，其他东西都是&lt;strong&gt;锦上添花&lt;/strong&gt;，但把握不好就会成&lt;strong&gt;画蛇添足&lt;/strong&gt;！&lt;/p&gt;&#xA;&lt;h4 id=&#34;非必要的组件&#34;&gt;非必要的组件&lt;/h4&gt;&#xA;&lt;p&gt;某个主题默认引用了大量外部资源，访问速度很不稳定，点进来需要看博主的大头照一分钟左右，难道这是什么展示开屏页面的手段吗？侧边栏还有公告、音乐、舔狗日记、最近回复等等，看上去一幅百家争鸣的场面。还有我最不理解的：Joe主题的&lt;strong&gt;人生倒计时&lt;/strong&gt;。这让一个有时间焦虑的人非常难受啊！&lt;/p&gt;&#xA;&lt;p&gt;以上所述，还不能算是拉低访问体验的，最让人难受的是&lt;strong&gt;封面图&lt;/strong&gt;。&lt;/p&gt;&#xA;&lt;p&gt;有一些博客主题，专门给封面图很多存在感，而加载速度又极其慢，加载完成后又是和文章内容关联不大的通用插画，甚至有些博客的文章封面图干脆用通一张，个人认为该约一下分了！&lt;/p&gt;&#xA;&lt;p&gt;其他的看板娘、背景特效、音乐播放器等不在此过多赘述，已经成一个梗了：&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;感觉你是那种博客一打开就bgm响个不停、樱花飘屏、瞅瞎眼看不清和背景色颜色一致的字体、鼠标屏蔽右键、顶部挂春节已经过时的灯笼、谷歌广告多余博客文章、底部20多个山寨备案号、加载5分钟才能出来的 猪腰子皮鞋 蕾丝小白袜 短裙 张开双臂拥抱的二次元幼女背景&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;我认为，&lt;strong&gt;个人作品集&lt;/strong&gt;和&lt;strong&gt;博客&lt;/strong&gt;是有本质上的区别的。而且放上一堆根本不是自己写的东西，并不会觉得有多自豪。&lt;/p&gt;&#xA;&lt;p&gt;一些热门的开源样式在一百个博客中应用的概率，就和你在火车站上喊上一嗓子张伟有一堆人答应的概率一样大。这里我要引用一个有些可悲的例子：考场作文怎样博阅卷人欢心？答案是打破他的审美疲劳。而寻求新鲜感的前提条件，也就是博客样式设计的基本理念是：&lt;strong&gt;服务于内容&lt;/strong&gt;、&lt;strong&gt;主次分明&lt;/strong&gt;、&lt;strong&gt;少即是多&lt;/strong&gt;。&lt;/p&gt;&#xA;&lt;p&gt;话又说回来了，写博客不是上班，自己玩得开心最重要，但样式的选择和设计，更多的是审美和价值理念的双重体现。&lt;/p&gt;&#xA;&lt;h2 id=&#34;为什么我还在写博客&#34;&gt;为什么我还在写博客&lt;/h2&gt;&#xA;&lt;p&gt;这个问题一直被文字或图文创作者所津津乐道，大概理由会扯到短视频、思考、阅读的对比，并把短视频踩得一无是处，把文字和书籍捧上天，认为为那是通向成功的唯一途径。虽然我不刷短视频，但我认为搞拉踩不是好的行为，如果短视频真的一无是处它就不会存在。但在这里谈论短视频的问题，不如单独写成一篇文章。&lt;/p&gt;&#xA;&lt;p&gt;我的理由是：自由和酷，以及习惯。&lt;/p&gt;&#xA;&lt;p&gt;酷这词并不能准确表达那种状态，也许更多的是归属感和安全感共同作用所产生的自豪，「我有一片能自言自语的天地」的幼稚的优越感吧。&lt;/p&gt;&#xA;&lt;p&gt;我讨厌平台的审查机制、推送算法和编辑方式。中文互联网的审查机制非常&lt;strong&gt;幽默&lt;/strong&gt;，如果你在 Bing 国内版搜「谈笑风生」，就会有一幅非常诡异的画面——《新京报：领导人的漫画形象》《求是网：毛泽东耐人寻味的生日宴》《新民网：追忆江泽民同志在上海的日子》……&lt;/p&gt;&#xA;&lt;p&gt;另外，在平台上，几乎不会有人关心「我」，创作始终是围绕观众喜爱来的，从中脱离出来想写什么就写什么，这也是自由的体现。&lt;/p&gt;&#xA;&lt;p&gt;关于习惯，我这人有个毛病就是，一写东西就收不住，状态好了就能写好多，也许是与我说话罗嗦有关。但如果不多写几个字，怎么能准确地描述事件的起因、经过、结果等必不可少的东西呢？我在发朋友圈说什么事的时候经常写一大段字，和其他朋友上下几张图片的画风完全不相称，自己都觉得有些尴尬。&lt;/p&gt;&#xA;&lt;p&gt;有人就不喜欢写字，也不喜欢看字，只喜欢图片和视频，我能理解这种心情，这只是习惯问题。我选择写博客，只是因为我认为比起坐在镜头前一边拉手风琴一边说话，又要关注打光和背景等前期工作，又要关注剪辑和配乐等后期工作，还是写字的成本更低。&lt;/p&gt;&#xA;&lt;h2 id=&#34;总结&#34;&gt;总结&lt;/h2&gt;&#xA;&lt;p&gt;写了这么长时间博客，其实一开始只是抱着玩玩的心态，后来变得越来越认真了。表达和写作能力有提升吗？我感觉不到，但看到别人写得文章很好，一种奇妙的胜负欲和攀比心就会促使我学习得更多更深，继续写下去，既然做了，就做到底，做得更好吧！&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>写在十一月的开头</title>
      <link>https://blog.verdant.ee/posts/beginning-of-november/</link>
      <pubDate>Sat, 01 Nov 2025 19:54:36 +0800</pubDate><author>i@glowisle.me (五葉地錦)</author>
      <guid>https://blog.verdant.ee/posts/beginning-of-november/</guid>
      <description>&lt;p&gt;十月的总结忘写了，原来现在已经十一月了吗！&lt;/p&gt;&#xA;&lt;p&gt;我在&lt;a href=&#34;https://www.glowisle.me/posts/beginning-of-september/&#34;&gt;九月总结&lt;/a&gt;的结尾，天真地以为开学后我也能保持那种心情或心态：&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;希望开学以后，依然能保持现在这种心态吧。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;事实证明，开学后的精神状态比较差，也没有动力写东西，重要的是，可写的事也不多，所以这篇就当流水帐，想到什么就写什么吧。&lt;/p&gt;&#xA;&lt;h2 id=&#34;新域名&#34;&gt;新域名&lt;/h2&gt;&#xA;&lt;p&gt;我至今位置用过几个域名，里面都包含&lt;code&gt;yingyu5658&lt;/code&gt;这个字眼，它的优点是很随意，不用花多少钱就能买到相应的域名，而它的缺点就是太随意了，容易和「英语」混淆，倒不如说实际上它就是英语的意思，因为这是我小时候玩游戏起 id 乱敲的。我不想再被别人叫「英语5658」了……&lt;/p&gt;&#xA;&lt;p&gt;远古时期，我的博客叫「yingyu5658的博客」、「yingyu5658&amp;rsquo;s Blog」、「yingyu5658的万事屋」，但后来发现那样实在是太烂大街且随意了，在这三者中，我最不明白为什么我曾经用了最后一个名字，这就像中二时期发的朋友圈一样羞耻，但是我好像没有中二时期，或者说中二时期是十岁以前。&lt;/p&gt;&#xA;&lt;p&gt;后来我强行给「yingyu」这个词安上了一个意义：「映屿」，当时的域名是&lt;code&gt;yingyu5658.me&lt;/code&gt;，也对应上了。这下我要佩服我自己了，胡邹能力还真不错，能拼凑出一个这么有画面感和美感的词，就沿用下来了了。但一直觉得&lt;code&gt;yingyu5658&lt;/code&gt;这个词太扎眼了，尤其是后面的无意义数字。大概在二十号，我整理 RSS 订阅源，发现大家的域名都真好看啊，于是就动了换域名的念头。&lt;/p&gt;&#xA;&lt;p&gt;首先域名一定要简短，毕竟是给访客的第一印象。博友圈的群友帮我想了个「inyu」，短是短，但还是太随意了，如果翻译成英文可能会更好，所以定下了以下几个翻译：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;HueIsle&lt;/li&gt;&#xA;&lt;li&gt;ShineIsle&lt;/li&gt;&#xA;&lt;li&gt;GlowIsle&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;首先是 Hue，这个单词更侧重于&lt;strong&gt;色彩、色调&lt;/strong&gt;的意味，重点在传达「映照出色彩」，主题不是「映」而是「色」，Pass.&lt;/p&gt;&#xA;&lt;p&gt;其次是 ShineIsle，太直白了，有一种强烈的向上的积极感，和风格不匹配，Pass.&lt;/p&gt;&#xA;&lt;p&gt;综上，Glow 这个词更合适，它的意思是**「柔和的光」**，呈现光泽、微光之意，比 Shine 温柔，比 Hue 恰当。&lt;/p&gt;&#xA;&lt;p&gt;后缀考虑过&lt;code&gt;.zone&lt;/code&gt;、&lt;code&gt;.me&lt;/code&gt;、&lt;code&gt;.com&lt;/code&gt;，最终还选择了&lt;code&gt;.me&lt;/code&gt;，更符合个人博客的定位。&lt;/p&gt;&#xA;&lt;p&gt;经过了一系列域名解析和重定向的折腾，终于算是顺利更换了，只是在搜索引擎的收录和排名上急不来，只能多提交 Sitemap 了。&lt;/p&gt;&#xA;&lt;h2 id=&#34;新主题&#34;&gt;新主题&lt;/h2&gt;&#xA;&lt;p&gt;之前使用自己搓的仿 Typecho 默认主题，主要是喜欢双栏布局和简介风格，但后来我仔细思考了一下，我的侧边栏或许是一个非常糟糕的设计。&lt;/p&gt;&#xA;&lt;p&gt;首先，我的站点并没有一套成体系的知识网络，所以分类的作用对读者来说并不大，不值得单独放在侧边栏。其次，&lt;strong&gt;最近文章&lt;/strong&gt;是侧边栏最大的败笔，用户动动鼠标就能看到新文章，为什么要用侧边栏的宝贵空间？&lt;/p&gt;&#xA;&lt;p&gt;我见到有一些博主喜欢把自己的介绍信息放在侧边栏，我也想尝试，直到我发现我并不会自我介绍，也很少拍照片，头像只能放 favicon 的图片，效果反而不如不放。而且我相信读者并不在意我是谁，而在意我想说什么。&lt;/p&gt;&#xA;&lt;p&gt;所以我之前的侧边栏非常多余。由于长期加需求改需求，CSS 代码膨胀到了两千多行，其中包含了许多无用代码，重构难度极大，只好弃坑！我也看腻那个主题了。&lt;/p&gt;&#xA;&lt;p&gt;我在寻找真正简介的单栏主题，比如 &lt;a href=&#34;https://themes.gohugo.com.cn/themes/typo/&#34;&gt;typo&lt;/a&gt; ，在尝试修改代码的时候，出现了一个非常诡异的问题：任何修改都不起作用。我随即想到是不是引入方式的问题？大概是git submodule导致的，但这个主题如果不如是引用，某些组件就无法渲染，只好作罢。&lt;/p&gt;&#xA;&lt;p&gt;最后选择了 &lt;a href=&#34;https://github.com/rokcso/hugo-bearneo/&#34;&gt;BearNeo&lt;/a&gt;，简单修改后投入了使用。它符合我对博客网站的思想理念 —— 简介、高效、主次分明。读者不是想来看我的大头照、樱花飘落、鼠标点击特效、背景图片、标签页离开特效、音乐播放器、各种网站的热搜和当地天气的。另一个方面，它很符合我目前理想中的博客的「质感」。&lt;/p&gt;&#xA;&lt;h2 id=&#34;新闻组&#34;&gt;新闻组&lt;/h2&gt;&#xA;&lt;p&gt;十月二十一日，我在新闻组发布了停止维护的通知。我实在没有时间精力和财力去维护新闻组。一开始本来抱着搭着玩玩的心态，在知乎、Emacs China 宣传了一两次，没想到还有那么多对互联网文物技术感兴趣的同志，一起参与新闻组里的话题，帖子快突破两百条了。&lt;/p&gt;&#xA;&lt;p&gt;现在在 Bing 搜索「新闻组」，往后翻一两页就能找到我在 Emacs China 发的帖子和博客里关于新闻组的文章，或许是由于近些年这个话题实在没有什么讨论，权重才会比较高吧。服务器里所有帖子都备份了下来，之后会重新启动，可能是几个月之后，也可能是几年之后……&lt;/p&gt;&#xA;&lt;h2 id=&#34;新座位&#34;&gt;新座位&lt;/h2&gt;&#xA;&lt;p&gt;在学校由于我的默默无闻，导致我看起来很像一个好学生，至少是老实的学生。常年坐在偏僻的角落。有两个同学不知道犯了什么错，班主任非常生气，把他们两个的座位调开，安排我坐到了其中一人的位置。那是倒数第三排。&lt;/p&gt;&#xA;&lt;p&gt;这并不是对我的惩罚，这应该是提拔。我前面的三个人，还有右边一组的四个人，都是年级前列，学霸中的学霸，学习氛围相当好。但很显然，我无法融入他们，无论是社交还是成绩。虽然他们对我很友好。我能感觉到我与他们之间有一种微妙的距离。&lt;/p&gt;&#xA;&lt;p&gt;他们越是完美，就越映照出我的瑕疵；越是强大，就越体现出我的弱小。哪怕他们身上有什么缺点或不良习惯，都可被视作一种风趣，而这种事发生在我身上，只能是&lt;strong&gt;毛病&lt;/strong&gt;。&lt;/p&gt;&#xA;&lt;p&gt;我前面的两位都是数学课代表，数学是我最不擅长的学科。那次跑操请假在教室自习，本以为会度过安静的三十分钟，但那两人给老师帮忙回来了，有正当理由不用去跑操。他们抱着一叠数学卷子在班里讨论。其中一个人是女生，她高兴时说的每一句话的尾音都会上扬并且拉长，用「嗲」这个字不至于，但确实类似。&lt;/p&gt;&#xA;&lt;p&gt;扎耳。&lt;/p&gt;&#xA;&lt;p&gt;这让我想起换座位前身后的那个女生，她似乎永远保持着开心的状态，即使遇到了困难或不公的事情，也只是用如唱歌一般动听的语调，脸上挂着自信的微笑而说出：「哎呀！我不行啦！」&lt;/p&gt;&#xA;&lt;p&gt;三个数学课代表都回来了，他们围在其中那个女生的桌子周围，也就是我的前桌讨论成绩。我只能低头写作业，因为我知道我和这群人没有任何共同话题可言，我不敢抬起头，他们也默契地就像班里不存在我这个人一样，自顾自地看大家的卷子。&lt;/p&gt;&#xA;&lt;p&gt;三个阳光开朗、文化体育成绩都优秀的人，其中任何一个人的智力和体力都是不敢想象的程度，这样的人就在我面前谈笑风生。&lt;/p&gt;&#xA;&lt;h2 id=&#34;最后&#34;&gt;最后&lt;/h2&gt;&#xA;&lt;p&gt;活下去吧！活着！像牲口一样活着！&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>Emacs，我又回来了！</title>
      <link>https://blog.verdant.ee/posts/emacs-i-am-back/</link>
      <pubDate>Sat, 01 Nov 2025 12:01:12 +0800</pubDate><author>i@glowisle.me (五葉地錦)</author>
      <guid>https://blog.verdant.ee/posts/emacs-i-am-back/</guid>
      <description>&lt;h2 id=&#34;前言&#34;&gt;前言&lt;/h2&gt;&#xA;&lt;p&gt;这大概已经是我第四次尝试入门 Emacs 了。&lt;/p&gt;&#xA;&lt;p&gt;前几次尝试过自己重新配置 Emacs、Spacemacs。自己配置简直是在堆屎山， Spacemacs 的机制搞不明白而且很卡，听说&lt;a href=&#34;https://github.com/doomemacs/doomemacs&#34;&gt;Doom Emacs&lt;/a&gt; 对 Vi/Vim 用户很友好，那就尝试一下吧！&lt;/p&gt;&#xA;&lt;p&gt;虽然我不能算是个老 Vimer，但是也深受 Vim 操作模式的荼毒，只想用 HJKL 走天下。之前也想玩 Obsidian 。但是&lt;strong&gt;它的 Vim mode 实在是太简陋了！！！&lt;/strong&gt; C-d不是向下翻页，而是把整行都删掉！&lt;/p&gt;&#xA;&lt;p&gt;不过手机上的 Ob 还是可以一用，比如 Banyan 插件，用来随时随地写一些碎碎念很方便。至于其他的功能，还是配 Emacs 更好玩吧。&lt;/p&gt;&#xA;&lt;h2 id=&#34;安装&#34;&gt;安装&lt;/h2&gt;&#xA;&lt;p&gt;根据官方仓库的文档，使用以下命令安装：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;git clone --depth &lt;span style=&#34;color:#d699b6&#34;&gt;1&lt;/span&gt; https://github.com/doomemacs/doomemacs ~/.config/emacs&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;~/.config/emacs/bin/doom install&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;速度比我想象中的要快得多，而且是交互式操作，感觉比 Spacemacs 友好一点？&lt;del&gt;这个脚本的输出有一股 Cargo 味……&lt;/del&gt;&lt;/p&gt;&#xA;&lt;p&gt;安装结束后给了一点提示：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;But before you doom yourself, here are some things you should know:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;1. Don&amp;#39;t forget to run &amp;#39;doom sync&amp;#39; and restart Emacs after modifying init.el or&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   packages.el in ~/.config/doom. This is never necessary for config.el.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;2. If something goes wrong, run `doom doctor` to diagnose common issues with&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   your environment, setup, and config.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;3. Use &amp;#39;doom upgrade&amp;#39; to update Doom. Doing it any other way will require&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   additional steps (see &amp;#39;doom help upgrade&amp;#39;).&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;4. Access Doom&amp;#39;s documentation from within Emacs via &amp;#39;SPC h d h&amp;#39; or &amp;#39;C-h d h&amp;#39;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   (or &amp;#39;M-x doom/help&amp;#39;).&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Have fun!&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;其中提到了一个叫&lt;strong&gt;doom&lt;/strong&gt;的命令，这是一个在&lt;code&gt;~/.emacs.d/bin/&lt;/code&gt;下的二进制文件，可以做个链接到&lt;code&gt;/usr/bin&lt;/code&gt;以便在任何地方使用。&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo ln -s ~/.emacs.d/bin/doom /usr/bin/doom&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;配置&#34;&gt;配置&lt;/h2&gt;&#xA;&lt;p&gt;启动时全屏：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-elisp&#34; data-lang=&#34;elisp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(add-hook &lt;span style=&#34;color:#e69875&#34;&gt;&amp;#39;window-setup-hook&lt;/span&gt; &lt;span style=&#34;color:#b2c98f&#34;&gt;#&amp;#39;&lt;/span&gt;toggle-frame-maximized)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;安装 &lt;a href=&#34;https://github.com/emacs-eaf/emacs-application-framework&#34;&gt;Eaf&lt;/a&gt; 插件：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;git clone --depth=1 -b master https://github.com/emacs-eaf/emacs-application-framework.git ~/.emacs.d/site-lisp/emacs-application-framework/&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;cd emacs-application-framework&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;chmod +x ./install-eaf.py&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;./install-eaf.py&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;用用看吧，后续有什么需求再折腾。&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>市井漫步</title>
      <link>https://blog.verdant.ee/posts/%E5%B8%82%E4%BA%95%E6%BC%AB%E6%AD%A5/</link>
      <pubDate>Sun, 26 Oct 2025 22:10:45 +0800</pubDate><author>i@glowisle.me (五葉地錦)</author>
      <guid>https://blog.verdant.ee/posts/%E5%B8%82%E4%BA%95%E6%BC%AB%E6%AD%A5/</guid>
      <description>&lt;p&gt;我很喜欢随便坐上一路公交车，一边听歌一边看窗外的风景，想在哪站下就在哪站下，想往哪走就往哪走。这是自己出去玩最经济实惠的方案。&lt;/p&gt;&#xA;&lt;p&gt;&lt;figure class=&#34;image-caption&#34;&gt;&#xA;    &lt;img src=&#34;https://images.glowisle.me/f55961ef18e32132749ef31800db09b9.webp&#34; alt=&#34;铁路&#34;&gt;&#xA;    &lt;figcaption&gt;铁路&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&lt;/p&gt;&#xA;&lt;p&gt;某地道入口上方的铁路，栏杆上锈迹斑斑，铁路边杂草丛生。&lt;/p&gt;&#xA;&lt;p&gt;&lt;figure class=&#34;image-caption&#34;&gt;&#xA;    &lt;img src=&#34;https://images.glowisle.me/3ef96c34d76444cef2ac47a02dd58f25.webp&#34; alt=&#34;禁止游泳&#34;&gt;&#xA;    &lt;figcaption&gt;禁止游泳&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&lt;/p&gt;&#xA;&lt;p&gt;海河边，禁止游泳的告示牌上，「禁止」两个字被磨掉了。牌子后面不远处就是穿着泳衣的大爷。大爷没有游泳，只是在跳水呢。这么冷的天，我穿得里三层外三层手都冻僵了，大爷只穿着一条内裤光脚站在岸边，应该是刚上来。&lt;/p&gt;&#xA;&lt;p&gt;&lt;figure class=&#34;image-caption&#34;&gt;&#xA;    &lt;img src=&#34;https://images.glowisle.me/435a03834fa38b75f3e768900bb19323.webp&#34; alt=&#34;海河&#34;&gt;&#xA;    &lt;figcaption&gt;海河&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&lt;/p&gt;&#xA;&lt;p&gt;正午阳光下的海河的阵阵波浪，把映进去的太阳的倒影打散了，耀眼的太阳分成无数片，又在水面炸裂了。细碎的太阳光从河水中央闪烁着飘来。星星点点的太阳光，没能到岸边就消散了，下一波又赶了上来，循环往复。水面上摇曳的楼影见证着这飞蛾扑火般的徒劳。&lt;/p&gt;&#xA;&lt;p&gt;&lt;figure class=&#34;image-caption&#34;&gt;&#xA;    &lt;img src=&#34;https://images.glowisle.me/27477b5958965540d87d473b121022cf.webp&#34; alt=&#34;我与地坛&#34;&gt;&#xA;    &lt;figcaption&gt;我与地坛&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&lt;/p&gt;&#xA;&lt;p&gt;回家的路上经过书店，没经住诱惑。进去逛了逛，买了一本《我与地坛》，收录了史铁生的很多文章，装帧精美排版舒适，甚至侧面书页还有手绘风格的图案，本来我看书就非常珍惜刚拆封的脆弱的完美无损状态，这下更甚……&lt;/p&gt;&#xA;&lt;p&gt;&lt;figure class=&#34;image-caption&#34;&gt;&#xA;    &lt;img src=&#34;https://images.glowisle.me/c6ba8c58738fdce7327132e85c5052e9.webp&#34; alt=&#34;花未眠&#34;&gt;&#xA;    &lt;figcaption&gt;花未眠&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&lt;/p&gt;&#xA;&lt;p&gt;在网上买的《花未眠》也到了，同样是散文集，看了几篇后感觉川端的散文造诣比不上小说，那些是真正的「散」文，不过，好像还是我这篇文章更散。&lt;/p&gt;&#xA;&lt;p&gt;&lt;figure class=&#34;image-caption&#34;&gt;&#xA;    &lt;img src=&#34;https://images.glowisle.me/f90f890d28b75bb84db6fc8ac21a0ec4.webp&#34; alt=&#34;晓寺&#34;&gt;&#xA;    &lt;figcaption&gt;晓寺&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&lt;/p&gt;&#xA;&lt;p&gt;读《晓寺》。快要放弃了，和前两部的风格转变太大，长句嵌套繁复，叙事节奏缓慢，大量景物描写和宗教哲学思辩，十分晦涩。如果把这本书和另一代表作《金阁寺》的语言做对比，《金阁寺》是恰到好处的精准，而《晓寺》则是华丽隆重的全感官盛宴。&lt;/p&gt;&#xA;&lt;p&gt;还没进入十一月，夜晚就已经有冬天独特的气味了，具体什么味说不上来，只是一闻，先前在冬天的回忆就全部涌上来了。&lt;/p&gt;</description>
    </item>
    <item>
      <title>韩愈《师说》</title>
      <link>https://blog.verdant.ee/posts/%E9%9F%A9%E6%84%88%E5%B8%88%E8%AF%B4/</link>
      <pubDate>Wed, 08 Oct 2025 20:32:04 +0800</pubDate><author>i@glowisle.me (五葉地錦)</author>
      <guid>https://blog.verdant.ee/posts/%E9%9F%A9%E6%84%88%E5%B8%88%E8%AF%B4/</guid>
      <description>&lt;p&gt;在视频&lt;a href=&#34;https://www.bilibili.com/video/BV1bQWPzqEwx/?share_source=copy_web&amp;amp;vd_source=237678275b58b6262a1c529cd96bdc59&#34;&gt;【“你这是学生思维”】 &lt;/a&gt;中，有一个评论引用了《师说》中的一句话：「是故无贵无贱，无长无少，道之所存，师之所存也。」记一篇原文及翻译。用白话翻译出来就很浅显，甚至是老生常谈的大道理，可能这就是文言文的距离之美和留白之美吧。&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;古之学者必有师。师者，所以传道受业解惑也。人非生而知之者，孰能无惑？惑而不从师，其为惑也，终不解矣。生乎吾前，其闻道也固先乎吾，吾从而师之；生乎吾后，其闻道也亦先乎吾，吾从而师之。&lt;strong&gt;吾师道也，夫庸知其年之先后生于吾乎？是故无贵无贱，无长无少，道之所存，师之所存也。&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;古代求学的人必定有老师。老师，是靠他来传授道理、教授学业、解答问题的。人不是一生下来就懂得知识的，谁能没有疑惑？有了疑惑而不跟从老师学习，那些成为疑难的问题，就始终不能解开。出生在我之前的人，他知道道理本来比我早，我跟从他学习，把他当作老师；出生在我之后的人，如果他得知道理也比我早，我也跟从他学习，把他当作老师。&lt;strong&gt;我是学习道理的，哪关心他的年龄比我大还比我小呢？因此无论地位高低，年龄大小，道理存在的地方，就是老师存在的地方。&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;嗟乎！师道之不传也久矣！欲人之无惑也难矣！古之圣人，其出人也远矣，犹且从师而问焉；今之众人，其下圣人也亦远矣，而耻学于师。是故圣益圣，愚益愚。圣人之所以为圣，愚人之所以为愚，其皆出于此乎？爱其子，择师而教之；于其身也，则耻师焉，惑矣。彼童子之师，授之书而习其句读者，非吾所谓传其道解其惑者也。句读之不知，惑之不解，或师焉，或不焉，小学而大遗，吾未见其明也。巫医乐师百工之人，不耻相师。士大夫之族，曰师曰弟子云者，则群聚而笑之。问之，则曰：“彼与彼年相若也，道相似也，位卑则足羞，官盛则近谀。”呜呼！师道之不复，可知矣。巫医乐师百工之人，君子不齿，今其智乃反不能及，其可怪也欤！&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;唉！古代从师学习的风尚不流传已经很久了！想要人没有疑惑也难了！古代的圣人，他们超出一般人很远，尚且要跟从老师请教了；现在的一般人。他们的才智低于圣人很远，却以向老师学习为耻。因此，圣人就更加声明，愚人就更加愚昧。圣人之所以能成为圣人，愚人之所以成为愚人，大概都是由于这个原因吧？（有些人）疼爱自己的孩子，就选择老师来教他；（但是）对于他自己，却以跟从老师学习为耻，这真是太糊涂了！那些儿童的老师，是教他们读书、学习断句的，不是我所说的那种传授道理、解答疑难的老师。（一方面）不通晓句读，（另一方面）不能解决疑惑，有的（指句读）向老师学习，有的（指疑惑）却不向老师学习，小的方面学习了。大的方面却丢弃了，我看不出这种人是明白事理的！巫师、医生、乐师和各种工匠这些人，不以互相学习为耻。而士大夫这类人，一听到有人称“老师”、称“弟子”等等，就许多人聚集在一起讥笑人家。问他们为什么讥笑，就说：“他和他年龄差不多，懂得的道理也差不多。（以）地位低（的人为师），就足以感到羞耻；（以）官职高（的人为师），就近乎谄媚了。”唉！古代从师的风尚不能恢复，从这里就可以知道了。巫师、医生、乐师和各种工匠这些人，是士大夫们所看不起的，现在他们的见识竟反而比不上这些人，这真是很奇怪啊！&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;圣人无常师。孔子师郯子、苌弘、师襄、老聃。郯子之徒，其贤不及孔子。孔子曰：三人行，则必有我师。是故弟子不必不如师，师不必贤于弟子，闻道有先后，术业有专攻，如是而已。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;圣人没有固定的老师。孔子曾以郯子、苌弘、师襄、老聃为师。郯子这些人，他们的贤能都比不上孔子。孔子说：&amp;ldquo;几个人一起走，其中就一定有可以做我老师的人。&amp;ldquo;因此学生不一定不如老师，老师也不一定比学生贤明，接受道理的时间有早有晚，学问技艺各有专长，不过是这样罢了。&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;李氏子蟠，年十七，好古文，六艺经传皆通习之，不拘于时，学于余。余嘉其能行古道，作《师说》以贻之。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;李家孩子名叫蟠的，今年十七岁，喜爱古文，六经的经文和传文都已广泛学习，不受当时（耻于从师）风气的拘束，向我求学。我赞许他能够遵行古人（从师）的正道，写了这篇《师说》来赠给他。&lt;/p&gt;</description>
    </item>
    <item>
      <title>《奔马》书评：刀刃突入腹部的瞬间，红日在眼睑内冉冉升起</title>
      <link>https://blog.verdant.ee/posts/honba-mishima-yukio/</link>
      <pubDate>Sun, 05 Oct 2025 11:35:41 +0800</pubDate><author>i@glowisle.me (五葉地錦)</author>
      <guid>https://blog.verdant.ee/posts/honba-mishima-yukio/</guid>
      <description>&lt;p&gt;今日凌晨读完了丰饶之海的第二卷：《奔马》，这是四部曲中最暴烈的一部。全书围绕着上一部的主人公松枝清显的转世 —— 饭沼勋的行动展开。讲述了一个阳刚强健的少年，因不忍政治腐败，天皇的实权丧失，忧国之心驱使他组织刺杀政府企业巨头，失败后，他雄心未泯，最终刺杀了藏原再切腹自尽的故事。重点展现了作者对武士道中「忠」与「勇」的极致追求。&lt;/p&gt;&#xA;&lt;p&gt;本部书与上一部《春雪》比起来，又是另一个极端。上一部的主人公松枝清显沉溺在幻想中，优柔寡断；而转生后的饭沼勋则成了一个行动者。如果说松枝清显是作者孱弱一面的投射，那么饭沼勋则是作者暴烈极端的一面和其政治诉求的投射。清显沉溺幻想的虚无，饭沼勋用行动对抗虚无。作者塑造了一个让人印象深刻的少年形象：冲动的、理想的、认知是非黑即白的、尖锐的少年形象。&lt;/p&gt;&#xA;&lt;p&gt;这股少年气是饭沼勋最闪耀的优点，也是他走向悲剧的重要原因之一。他受《神风连史话》的影响，组织成立了昭和神风连。而这是一个几乎注定失败的行为，其中贯穿全书的对自杀的理性规划与向往，让人不禁怀疑，他究竟是想要救国，还是想悲壮地自杀？&lt;/p&gt;&#xA;&lt;p&gt;对于这一部分的不理解，主要源于文化差异，在日本文化，以及武士道文化中，自杀不被认为是消极的、逃避性质的寻死，而是一种以肉体的毁灭与极度痛苦，验证其精神纯洁性（如忠心、承担失败、洗刷侮辱）的最高&lt;strong&gt;仪式&lt;/strong&gt;。&lt;strong&gt;死是一个手段，而不是目的。&lt;/strong&gt; 三岛一直有美化死亡、自杀的倾向，但在全书围绕展开的「日本精神」中，又是正常的。&lt;/p&gt;&#xA;&lt;p&gt;而勋对天皇的病态的执着敬仰，也要结合文化背景来理解。日本的天皇在第二次世界大战结束前，不单单是一个政治上的领袖，而是日本神话体系中最高权威神的人间体，他是一种&lt;strong&gt;纯粹的权威和信仰&lt;/strong&gt; ，这源于其宗教信仰上对民众思想的控制和洗脑。&lt;/p&gt;&#xA;&lt;p&gt;因此也就可以理解为什么勋对天皇有如此病态的情感。书中，勋自述了对天皇的忠义的认识：&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;“是。所谓忠义，对于我来说，就是手握滚烫的米饭做饭团，只顾一心一意做好饭团，献给陛下。其结果，要是陛下不饿，立即退了回来，或者说：‘这种难吃的东西，也敢呈献上来？’说着就把饭团砸到我的脸上。要是这样，我就会满脸粘着饭粒退下，怀着感动立即切腹。假如陛下饿了，高兴地吃了我的饭团，我也立即退下，怀着感动立即切腹。为什么呢？因为陛下吃了草莽小民做的饭团，这本来就罪该万死。要是做了饭团不献上来，一直捧在手上，又会怎样呢？饭团肯定会腐烂，这也不合忠义，我将此称作无勇之忠义。所谓有勇之忠义，就是冒死将一心一意做的饭团敬献上去。​”&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;那么，回到最初的问题，他究竟是想要救国，还是想要自杀？可以给出一个明确的回答：切腹是目的，也是手段。这是一个矛盾点。&lt;/p&gt;&#xA;&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;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;刀刃突入腹部的瞬间，红日在眼睑内冉冉升起。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;切腹时极度的肉体痛苦被转化为精神上的快感体验，举事是否成功，对饭沼勋来说已经不重要了，红日的最核心的象征就是&lt;strong&gt;天皇、日本国体、纯粹的日本民族精神&lt;/strong&gt;。这是勋毕生追求的终极信仰对象。&lt;/p&gt;&#xA;&lt;p&gt;但同样需要思考的是，勋的自杀，除了在他个人的精神意义上的高潮，对外在的世界，对国家的影响又如何呢？如此极端的行动，执着和病态，又有什么意义呢？杀死了藏原（或其他暗杀名单中的人），国家就真的复兴了吗？军国主义和天皇掌权的失败已经证明了其荒谬和不可行性。因此勋的自杀，以及藏原之死，都如同从奔腾的洪流中取走一滴水，在宏观历史进程中的影响微乎其微。&lt;/p&gt;&#xA;&lt;p&gt;饭沼勋的少年气，是对世界理想化、对动机单纯化、对结果美学化的自我陶醉的品质。他一生所追求的，正是这种「纯粹」。在勋眼中，现实世界已被污染，任何妥协或苟活都意味着对理想的背叛，是对「纯粹性」的玷污。只有通过&lt;strong&gt;壮烈的、仪式性的死亡&lt;/strong&gt;（尤其是切腹），才能&lt;strong&gt;保持精神的绝对纯洁&lt;/strong&gt;，避免被污浊的现实世界所腐蚀。死亡成为守卫纯粹精神的最后堡垒和唯一途径。所以从这个角度看作者本身，三岛的自杀并不能单纯定性为政治表演，也是一次知行合一的为美学殉教的实践。&lt;/p&gt;&#xA;&lt;p&gt;本书虽尽显武士道精神的极端、对个体生命的漠视，以及日本军国主义和天皇绝对权威下的偏执与疯狂，但其文学和美学上的暴烈和阳刚的价值不可忽视，作者将日本文化中最纤美的一面在上一部发展到极致再毁灭，又在本部书中将日本文化中最刚烈的一面推向巅峰再毁灭，由衷钦佩作者笔下波谲云诡的文字氛围，期待下一卷《晓寺》带来的震撼。&lt;/p&gt;</description>
    </item>
    <item>
      <title>个人博客凭什么为你提供价值？</title>
      <link>https://blog.verdant.ee/posts/the-value-of-blog/</link>
      <pubDate>Tue, 30 Sep 2025 22:25:35 +0800</pubDate><author>i@glowisle.me (五葉地錦)</author>
      <guid>https://blog.verdant.ee/posts/the-value-of-blog/</guid>
      <description>&lt;p&gt;今天我在网上冲浪的时候，看见了一个收录博客的网站。收录的所有网站都是手动整理而来，并且对所谓博客的「价值」颇有一番见解，断章取义地引用了一段&lt;a href=&#34;https://www.zhihu.com/question/19990156/answer/206653231&#34;&gt;知乎用户的回答&lt;/a&gt;。原问题是回应关于个人博客的前途的，其中对博客的价值作出了一些判断。以下是原回答：&lt;/p&gt;&#xA;&lt;details&gt;&#xA;&lt;summary&gt;点击查看详细内容&lt;/summary&gt;&#xA;&lt;p&gt;我想来分析一下为什么很多个人博客&lt;/p&gt;&#xA;&lt;p&gt;无疾而终，没“前途”。&lt;/p&gt;&#xA;&lt;h2 id=&#34;对博客价值的根本性认识错误&#34;&gt;对博客价值的根本性认识错误&lt;/h2&gt;&#xA;&lt;p&gt;以为个人博客是用来抒发“个人情感和认识”的，这是最常见的认识错误。这是我的博客，我写什么都可以，而且还假设自己写了东西别人就会来看。&lt;/p&gt;&#xA;&lt;p&gt;没人在乎你情绪化的感情抒发，这对他们没多少用处。&lt;/p&gt;&#xA;&lt;p&gt;个人博客更好的定义，是你以个人的名义发表对别人有价值的内容。所以个人博客内容创作的出发点不是让别人来关注自己，而是让自己为别人服务。&lt;/p&gt;&#xA;&lt;p&gt;用博客内容为别人服务并不复杂，比如你写偏文章，介绍最近哪个店东西打折，只要你能把时间，地点，主体对象，促销力度等信息介绍清楚，就是一篇很有价值的博文。因为它对不少人有实际价值。&lt;/p&gt;&#xA;&lt;p&gt;相反，你洋洋洒洒写一通美文，说得尽是些神神叨叨自怨自艾的个人情绪，除了你妈爱看以外，对别人没多少价值。你想开个博客靠抒发个人情感而不为别人的生活增值，却盘算着博客能有前途，这是无知，自以为是的痴人说梦。&lt;/p&gt;&#xA;&lt;h2 id=&#34;没有质量的更新&#34;&gt;没有质量的更新&lt;/h2&gt;&#xA;&lt;p&gt;很多个人博主的注意力，只有更新，不断更新，最好每天更新。只要能“保持更新”，就无所不用其极，完全失去内容建设。&lt;/p&gt;&#xA;&lt;p&gt;需要的耐心。写文章就是随便胡诌两句，不用心，还让读者“随便看看，不喜勿爱”，甚至复制黏贴，采集抄袭，玩的都是些下三滥的手段。却还指望博客能有前途，真是消化&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;。&lt;/p&gt;&#xA;&lt;p&gt;更新是重要的，但有比更新更重要的事。是“价值”。&lt;/p&gt;&#xA;&lt;p&gt;你写一篇优质的文章，哪怕是夏天室内防暑省电技巧大全，也会永远地存在于搜索引擎，会不断地有人访问，这篇文章会成为你的网站一个优质的lead。为你创造潜在的知名度，关注度，甚至带来物质利益。&lt;/p&gt;&#xA;&lt;p&gt;中国的博主相对国外的博主，最大的缺点就是没有耐心，没有耐心，什么都做不成。除非你相信一个个人博客可以短时间内成功，不用积累。&lt;/p&gt;&#xA;&lt;h2 id=&#34;不懂营销&#34;&gt;不懂营销&lt;/h2&gt;&#xA;&lt;p&gt;酒香也怕巷子深，况且你真有好酒，为什么不多做一点，让更多人知道你有好酒？&lt;/p&gt;&#xA;&lt;p&gt;太多博主以为自己写了东西，花了力气，回报自然回来。有的时候确实是这样，比如你写的东西正好是别人不怎么写的一个特别的领域，也就是说，竞争小，或者运气好，干脆就是一片蓝海。&lt;/p&gt;&#xA;&lt;p&gt;但这种机缘哪是人人都有？大部分人写的话题，都是很多人反复了不知道多少遍的，你写同一个主题的优势，无非是那是你自己独特的角度和构思，或者你的文字比别人用得好，讲故事有自己的风格，文章的结构超过他们，内容超过他们。&lt;/p&gt;&#xA;&lt;p&gt;但仅有这些是不够的。&lt;/p&gt;&#xA;&lt;p&gt;你得发现可能对你写的东西感兴趣的人群，把他们吸引过来，给他们一个机会理解你，也给你自己一个机会更好更快地走向成功。你得把营销看成一件正经事来做，不是让你去骗人，而是把好东西告诉需要知道的人。&lt;/p&gt;&#xA;&lt;p&gt;我举一个例子， 这是我自己的一个教别人学Javascript编程核心概念的小网站：&lt;a href=&#34;https://link.zhihu.com/?target=http%3A//itlr.cc&#34;&gt;http://itlr.cc&lt;/a&gt;。我确实花了一点时间去准备内容，主要是视频的，到目前卖了大概人民币4000块，几个月时间，其他收入加起来大概8000。这是不是很多钱，当然不是！&lt;/p&gt;&#xA;&lt;p&gt;我是不是在每天更新？没有，其实很久不更新了，但是微信上几乎每天都有人加。这网站有前途吗，有的，虽然谈不上大前途，但是发挥点工作外余热，自己也能学到东西。&lt;/p&gt;&#xA;&lt;p&gt;你也可以，但要用点心，真把它当件事情来做，要学习不骗人的营销。&lt;/p&gt;&#xA;&lt;p&gt;你会发现让一个网站有前途，是一件并不是很难的事。如果你没有耐心，是不会成功的。&lt;/p&gt;&#xA;&lt;/details&gt;&#xA;&lt;hr&gt;&#xA;&lt;p&gt;我今天挖一七年的坟，评判一下关于价值的观点。&lt;/p&gt;&#xA;&lt;h2 id=&#34;对博客价值的根本性认识错误-1&#34;&gt;对博客价值的根本性认识错误&lt;/h2&gt;&#xA;&lt;p&gt;我们来看看百度百科怎么描述「博客」：&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;许多博客专注在特定的课题上提供评论或新闻，其他则被作为个人性的日记。一个典型的博客结合了文字、图像、其他博客或网站的链接及其它与主题相关的媒体，能够让读者以互动的方式留下意见，是许多博客的重要要素。大部分的博客内容以文字为主，但仍有一些博客专注在艺术、摄影、视频、音乐、播客等各种主题&lt;/p&gt;&#xA;&lt;p&gt;……&lt;/p&gt;&#xA;&lt;p&gt;简言之，Blog就是以网络作为载体，简易迅速便捷地发布&lt;strong&gt;自己的心得&lt;/strong&gt;，及时有效轻松地与他人进行交流，再集丰富多彩的个性化展示于一体的综合性平台。&lt;/p&gt;&#xA;&lt;p&gt;……&lt;/p&gt;&#xA;&lt;p&gt;它可以是&lt;strong&gt;个人&lt;/strong&gt;纯粹的想法和心得，包括对时事新闻、国家大事的&lt;strong&gt;个人看法&lt;/strong&gt;，或者对一日三餐、服饰打扮的精心料理等&lt;/p&gt;&#xA;&lt;p&gt;它&lt;strong&gt;绝不仅仅&lt;/strong&gt;是纯粹个人思想的表达和日常琐事的记录，它所提供的内容可以用来进行交流&lt;strong&gt;和&lt;/strong&gt;为他人提供帮助，是可以包容整个互联网的，具有极高的共享精神和价值。&lt;/p&gt;&#xA;&lt;p&gt;……&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;日记、照片、诗歌、散文，甚至科幻小说的发表或张贴都有&lt;/strong&gt;。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;以此可以证明，博客的创作题材非常自由。&lt;/p&gt;&#xA;&lt;p&gt;再来看回答的观点：&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;个人博客更好的定义，是你以个人的名义发表对别人有价值的内容。所以个人博客内容创作的出发点不是让别人来关注自己，而是让自己为别人服务。&#xA;……&#xA;相反，你洋洋洒洒写一通美文，说得尽是些神神叨叨自怨自艾的个人情绪，除了你妈爱看以外，对别人没多少价值。你想开个博客靠抒发个人情感而不为别人的生活增值，却盘算着博客能有前途，这是无知，自以为是的痴人说梦。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&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;/p&gt;&#xA;&lt;p&gt;那么谁有权定义价值？流量数据？工具性？创作者的主体性？你定义的价值，是情感价值还是存在价值？既然其存在，为什么会无价值？&lt;/p&gt;&#xA;&lt;p&gt;按照博客导航站点的逻辑：「只收藏有价值的优秀博客」，其收录了以下这些情感类、个人生活类的博客，其观点就不攻自破了。&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.chener.net/archives/headacheinAugust/&#34;&gt;头痛一个月 - 小陈故事&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://bwskyer.com/bye-man-bye-memory.html&#34;&gt;别了，那些人，再见，那些记忆 - 生活的左上角&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;如果用知乎回答的观点：「谁想知道你头怎么样？谁想知道你跟虾米音乐有什么故事？&lt;strong&gt;除了你妈爱看以外，对别人没多少价值。&lt;/strong&gt;」&lt;/p&gt;&#xA;&lt;p&gt;这显然功利无情，完全背离了博客的初衷，将博客完全定义成为他人服务的工具，拒绝了自身需要的情感表达，否认了生活类以及情感类博客的意义，偏激不可取。&lt;/p&gt;&#xA;&lt;h2 id=&#34;情感类博客没有价值&#34;&gt;情感类博客没有价值？&lt;/h2&gt;&#xA;&lt;p&gt;只有实用价值才配被称作价值吗？显然不可能。&lt;/p&gt;&#xA;&lt;p&gt;所有人的声音都值得被听见，在博客这样一个如此纯粹的表达空间里，依然被所谓的价值捆绑，如果所谓的价值、前途就是「钱途」，那你大可去写那一种微信公众号——图文版抖音、吸引眼球博流量、话说一半的标题党、图文无关的封面党，并且在文章头部、正文里、结尾，甚至评论区都挂上广告，当「流量主」，稳定获取收益。&lt;/p&gt;&#xA;&lt;p&gt;写一篇实用性的文章帮助读者，是作者和读者的双向链接，而写情感类文章找到共鸣者，同样是双向链接，且比前者更牢固。这就好比你家厕所水管漏水，在外面找了一个修水管的工人，他干完活拿钱走人，过两天你会记得他吗？你只会记得你家厕所冲水真顺畅。这是实用价值。&lt;/p&gt;&#xA;&lt;p&gt;但如果当时你给他接了杯水，递了根烟，扯闲天的时候发现大家都是大老远从家跑过来，在外打拼的苦人，甚至有可能是老乡或同好，你们留了联系方式，卖命之余能一起抱怨身边的烂人烂事。共鸣共鸣，频率相同才有共鸣 —— 这就是情感共鸣带来的链接的牢固性，能让你觉得：「哦，原来不止我一个人这样。」这是情感价值。这也是除了「夏天室内防暑省电技巧大全」以外，有质量的更新。&lt;/p&gt;&#xA;&lt;p&gt;我从早期结构一盘散沙的各种文章，到如今结构极其松散的各种文章；从痛恨Linux，到向往Linux，到沉迷Linux，对各种事物理解的转变……改变不大，但那是自己坚实的脚印，看到自我成长，这是博客的自我价值。&lt;/p&gt;&#xA;&lt;p&gt;所以，不要被所谓的价值禁锢了，想写就写，不要不敢写。更不需要强行营销，重要的是保持博客的纯粹性。打这种功利主义者的脸，最好的方法就是&lt;strong&gt;坚持写下去，顽强地写下去&lt;/strong&gt;，写他们认为没有价值的东西，笔耕不辍，生生不息。&lt;/p&gt;&#xA;&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;&#xA;&lt;hr&gt;&#xA;&lt;ol&gt;&#xA;&lt;li id=&#34;fn:1&#34;&gt;&#xA;&lt;p&gt;未修改原文用词。可能是「笑话」。&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/div&gt;</description>
    </item>
    <item>
      <title>《春雪》书评：任何美梦都会有结束的时候，没有什么永恒的东西</title>
      <link>https://blog.verdant.ee/posts/spring-snow-mishima-yukio/</link>
      <pubDate>Sun, 28 Sep 2025 21:18:43 +0800</pubDate><author>i@glowisle.me (五葉地錦)</author>
      <guid>https://blog.verdant.ee/posts/spring-snow-mishima-yukio/</guid>
      <description>&lt;p&gt;于今日正式结束了三岛由纪夫的绝笔之作《丰饶之海》四部曲的第一卷 —— 《春雪》的阅读。刚开始读，它给我一种「很不三岛」的感觉，语言风格细腻柔美，甚至有几分古典韵味，对景物的描写细致入微，但处处洋溢着一丝哀愁，我还以为自己在阅读川端康成的作品。可以理解为三岛对恩师的致敬吧？&lt;/p&gt;&#xA;&lt;p&gt;故事围绕着松枝清显与绫仓聪子的爱情悲剧展开，互为对方青梅竹马的两人试探猜忌，始终没有发展。聪子始终深爱着清显，但清显一直维护着他的孤傲，给人一种非常「拧巴」的感觉。直到聪子与治典亲王订婚，清显才意识到自己的确深爱着聪子，于是一场短暂禁忌之恋开始，最终聪子怀孕，被迫堕胎后，面对皇室和家族的巨大压力，她削发为尼，遁入空门。清显相思成疾，因肺病夭折，令人哀惋。&lt;/p&gt;&#xA;&lt;p&gt;令我感受最深的，还是聪子这个角色的遭遇。被迫堕胎，清显和她爱情的结晶被彻底的物理意义上的抹除，也没有任何回头路留给聪子，她才走投无路做了尼姑，世俗已经没有任何可以让她留恋的东西了，而在事情刚刚发生的时候，松枝和绫仓两家还在商量如何瞒天过海，提出了一个佩戴假发参加纳彩的主意。&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;纳彩时要戴垂形假发，而平时要戴束形假发。人眼无处不在，聪子即使入浴也不可随意摘掉。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;人人心里都在描绘着聪子应该佩戴的假发，它比真发还要光洁、流丽，如射干果一般乌黑闪亮。它就是强加授予的王权。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;聪子已经不是一个有着自我的「人」，而是一个与家族兴衰荣誉直接绑定的「物」，家族一手操办着婚事，丝毫不考虑聪子的感受。而那讽刺的假发，便成了一具假面，聪子要时时刻刻戴着假面生活，完全压抑隐藏自己。但聪子真的得到解脱了吗？还是进入了另一层禁锢？&lt;/p&gt;&#xA;&lt;p&gt;而小说中纯粹的美的化身 —— 清显，又是纯粹的情绪的化身，感性的化身，他近乎自虐式回味着感情，反复咀嚼品尝痛苦，而且有着强烈的自我美化倾向，又极度渴望悲剧，而这种思想最终将他导向了毁灭，他是一个唯美主义的殉道者，他爱着的也许不是聪子，而是他心目中聪子的幻影，现实中的聪子只是幻想的承载和投射。&lt;/p&gt;&#xA;&lt;p&gt;另一个让我非常震撼，也钦佩的点是本书的名字：「春雪」、「春の雪」。春天落下的雪。不合时宜，短暂易逝，是对主角二人爱情的完美隐喻，同时也体现日本文学的风格：对短暂之美的细腻感受，哀而不伤，以及对不完美的接纳甚至美化，而本书确实是一本将唯美推向巅峰之作，也是将三岛心目中对柔弱纤美风格追求的毁灭之作。也对日本文学中力图传达的美学意识 —— 物哀 、幽玄 、侘寂三者融合达到巅峰，读完却怅然若失，如同自己亲身经历了一场凄美的爱情。&lt;/p&gt;&#xA;&lt;p&gt;而「春雪」与「丰饶之海」这两个词，都有一种虚无的意境美，想起「丰饶之海」这个词取自月球上的「丰富海」，并且作者解释有讽刺意味，是「干枯的谎言之海」，震撼之情难以言表，深入想想一种恐惧感袭上心头，又一股颤栗般的感动将它冲散，却余韵悠长。&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;任何美梦都会有结束的时候，没有什么永恒的东西。&lt;/p&gt;&#xA;&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>一文不值的疑云</title>
      <link>https://blog.verdant.ee/posts/the-unfounded-cloud/</link>
      <pubDate>Sat, 27 Sep 2025 13:15:25 +0800</pubDate><author>i@glowisle.me (五葉地錦)</author>
      <guid>https://blog.verdant.ee/posts/the-unfounded-cloud/</guid>
      <description>&lt;p&gt;周三，老师提醒我们，明天有一个测评，需要记住自己的身份证号。放学后又在班级群发了一条通知提醒，看来是很重要的事。&lt;/p&gt;&#xA;&lt;p&gt;转天上午的一个大课间，班主任要带我们去参加那个测评了，正当我准备起身去楼道里站队，老师跟我说：&lt;/p&gt;&#xA;&lt;p&gt;「你妈说你不参加，你在屋里待着就行了。」&lt;/p&gt;&#xA;&lt;p&gt;我有点懵了，旁边几个人围着我问为什么我不参加，我有什么心理问题吗？到这时候我才知道，原来是上面安排的心理测试。那些问题我只能回答不知道，我真的什么都不知道。那些问题凝成了厚厚的疑云悬挂在我胸口。庆幸和不安缠绕在那团云里。&lt;/p&gt;&#xA;&lt;p&gt;一方面，我庆幸于不用参加这种活动，可以自己一个人在教室里安安静静地，沉浸在自己的思绪里；另一方面，我不安于全班，甚至全校只有我一个人没有参加这个活动，以及，母亲为什么没有让我参加？难道我真有什么问题吗？种种猜想和预测占据了我的脑海，那些可恶的不安已经把所有原本打算考虑的问题，全部挤压出去了。&lt;/p&gt;&#xA;&lt;p&gt;我低着头，烦躁地翻动一本课外书，那书本劣质的墨水和纸张，导致翻开之后就有一股工业的恶臭弥漫开，又和我周身流露出来的不安的恶臭混合在一起。门外其他班级也站好队走了，吵闹终于结束了，楼道里如冬日般寂静，使我更能沉浸在不安里。&lt;/p&gt;&#xA;&lt;p&gt;是父母想到了什么，深思熟虑的结果，让我不参加吗？是他们的问题，还是我的问题呢？如果是他们的问题，他们为什么认为我不应该参加这次心理测试呢？如果是母亲的问题，难道她又诉诸玄学了？如果是我的问题，我到底需不需要参加这次测试？是因为他们觉得我心理有问题才不让我参加，还是因为他们断定我就是一个健康向上，热爱学习的好学生，才不让我参加那种活动？&lt;/p&gt;&#xA;&lt;p&gt;不安和沮丧之间需要一架精妙的桥梁，我的永不停歇思考和猜测，正是最贴合河水两岸缺口的桥，那条河流奔腾着绝望，在思考的独木桥上一不小心就会跌入河流，在绝望的冲刷下被河床的石头磕得头破血流。但这样的结果，说到底还是自己走独木桥的技艺不精。&lt;/p&gt;&#xA;&lt;p&gt;无尽的猜忌的折磨，像鬼打墙一样，必须有一个外人进来才能打破。第一个回来教室的人成了这个角色。我从初一开始就很讨厌他，他总是看着我的脸在偷笑，说我严肃的表情很滑稽，但那就是我最日常的表情，我不是故作严肃。只是每当我开始思考一些问题，最终感受都会导向痛苦，那表情只是大脑内痛苦的外在显现。他又看到了自己最喜欢的那个表情，摇着尾巴朝我跑过来，我坐在座位上，他用手搂住我的脖颈，用他的额头紧紧贴着我的额头，在我面前憋笑。他离我太近了，我能感受到他轻浮的吐息，和身上浅薄的气味。这就是肢体接触带来的几乎让我呕吐的感觉。我不理解为什么这个人每天都能那么开心，每天的精力和活力像用不完一样，以及为什么和很多女同学都有勾搭。他又问出我最想得到答案的那个问题：&lt;/p&gt;&#xA;&lt;p&gt;「你为什么没去？你有心理问题吗？」&lt;/p&gt;&#xA;&lt;p&gt;我只能尴尬地回应：我也不知道为什么。&lt;/p&gt;&#xA;&lt;p&gt;得不到答案，胸口这云就永远也不会消散，越是思考，想得出答案，那团云就越是厚重，越压得我喘不过气。我也无心听课和默写，化学默得一塌糊涂，重新默写的几道题也几乎全错，直到今天还没解决，我也无力去解决了。那个问题始终在我心头，到底为什么我不去？&lt;/p&gt;&#xA;&lt;p&gt;所有人都陆续回来了，开始上课后，我的思绪更没有寄存之地了，它就像一根点燃的火柴，马上就要烧到我的手，点燃全身了，火势已经不可控制，只有得到问题的答案才能扑灭这团火，但不放学找到母亲，永远也得不到这个问题的答案。我就这样被烈火反复舔舐着，一场凄美的自焚在教室里开始了，他只会慢慢烧焦我的皮肤，永远无法灼伤我的内脏，给我一个彻底的解脱。&lt;/p&gt;&#xA;&lt;p&gt;熬过了一节课，我就趴在桌子上继续想，我向来下课都喜欢趴在桌子上装睡，这样是最安全的方式，但我得不到答案。&lt;/p&gt;&#xA;&lt;p&gt;下午开始了运动会列队彩排。这种出狱即赴死般的囚犯的活动，在整齐的队列里喊着力量迸发的口号的活动，在我眼里一直有着悲戚色彩，但我又不能不参加。上次体育课训练，我发现我被围在队伍中间，队伍被围在学校篮球场中间，篮球场被围在学校高高的围墙中间。&lt;/p&gt;&#xA;&lt;p&gt;我们站在阴凉地。前面同学浓烈的体臭让我的眉头紧皱，但他的心地善良，看到我那样的表情，说：&lt;/p&gt;&#xA;&lt;p&gt;「怎么老愁眉苦脸的，多想想让自己开心的事吧。」&lt;/p&gt;&#xA;&lt;p&gt;让我难过的事，就在我眼前。无论是他的体臭，还是问题的答案，都近在咫尺，又远在天边。只要屏住呼吸就闻不到了，只要停止思考就不难过了。&lt;/p&gt;&#xA;&lt;p&gt;在初一的时候，好像没有节目，今年有三个同学组织了一个舞蹈节目，我们剩下的同学要手里拿着一把小扇子作为背景板配合她们的演出。我看着手里的折扇，再徐徐将它展开，大红背景色的扇面，一支白色的梅花占了三分之一，再展开就什么都没有了，只有一片红。这把扇子给人一种不调和的丑陋感。我这三年就像这把扇子，已经展开了三分之二，但在一支凄美的梅花之后，什么也没有。从侧面看这把扇子，褶皱跌宕起伏，其中一根扇骨还裂开了，扇子可以折起来再甩开，但这处裂痕永远也回不到先前的样子了。开扇的那一过程，如果不达到尽头，就绝对不可能停下来吧？&lt;/p&gt;&#xA;&lt;p&gt;我又沉浸在自己悲情的幻想里，感官被屏蔽了，等到队伍走起来，穿过操场围栏大门，从一片阴翳之中到阳光普照的操场，我瞬间以为自己在梦中，但热辣的阳光照得我皮肤刺痛，为什么这样都不会醒来呢？&lt;/p&gt;&#xA;&lt;p&gt;主席台上站着一个女生，手里拿着话筒，用尖细的声音读着学生提交上去的介绍词，最常出现的词汇就是青春、汗水、胜利&amp;hellip;&amp;hellip;我向来厌恶这种充满力量感的词，但我对这场运动会没有任何贡献，有什么资格评价呢？我跟着队伍行走完全交给下意识的本能，大脑完全沉浸在幻想中了。&lt;/p&gt;&#xA;&lt;p&gt;本能，真伟大啊，帮我暂时运行身体，应付那些琐事，好让我能沉浸在自己的思绪里，彩排结束回到教室的过程中，我看见了跑道上的地漏，我觉得那简直就是为了让扇子掉下去拿不上来而生的，如果我手里的扇子不存在，那么这里所有的地漏都没有了存在的意义。&lt;/p&gt;&#xA;&lt;p&gt;在猜忌的痛苦里熬过了剩下的几个小时，终于放学，给母亲发了条消息。&lt;/p&gt;&#xA;&lt;p&gt;「为什么不让我参加那个测评啊？」&lt;/p&gt;&#xA;&lt;p&gt;「你不参加的是心理测试的那个。」&lt;/p&gt;&#xA;&lt;p&gt;「为什么不参加？」&lt;/p&gt;&#xA;&lt;p&gt;「老师早晨说不参加的尽快私信，我以为可以不参加。我也以为没什么用，就想着赶紧告诉她。」&lt;/p&gt;&#xA;&lt;p&gt;我能说我的母亲愚蠢吗？我舍不得，我也不敢埋怨她。她早上确实非常忙碌，没有时间细看消息。但我如此复杂剧烈的情感，原因竟是母亲的「我以为」导致的，一切痛苦和挣扎都是徒劳吗？她也许察觉到了我的难过，就跟我说，之前参加的比赛，获奖证书到了，明天给我拿去。&lt;/p&gt;&#xA;&lt;p&gt;于是，本应该是荣誉的事，在此刻被彻底玷污了。&lt;/p&gt;</description>
    </item>
    <item>
      <title>研读《春雪》笔记三则</title>
      <link>https://blog.verdant.ee/posts/reading-haru-no-yuki-notes/</link>
      <pubDate>Mon, 22 Sep 2025 19:39:35 +0800</pubDate><author>i@glowisle.me (五葉地錦)</author>
      <guid>https://blog.verdant.ee/posts/reading-haru-no-yuki-notes/</guid>
      <description>&lt;h2 id=&#34;淫乱与优雅&#34;&gt;淫乱与优雅&lt;/h2&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;聪子仿佛在教导清显，让他明白真正的优雅是不会害怕任何的淫乱的。&#xA;—— 《春雪（上）》（一页文库） P175&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;这段话运用了两个抽象的概念：「优雅」和「淫乱」。&lt;/p&gt;&#xA;&lt;p&gt;清显和聪子的爱情发生在聪子被天皇许给亲王后，这使他们之间的爱情变成了一种对至高无上的光圈的冒犯，使他们认为自己的感情超凡脱俗。&lt;/p&gt;&#xA;&lt;p&gt;三岛的思想认为，美是至高无上且无可亵渎的，但只有犯禁才能体会到这种美，对清显而言，聪子的「美」本身是可获得的，所以并不能称之为真正的「美」，当他冒着风险，去触犯禁忌的时候，才感受到了真正的优雅和美，清显为皇后捧裾时失误趔趄，但皇后却回头对他嫣然一笑，也让他从此产生了「禁忌可触」的思想。&lt;/p&gt;&#xA;&lt;p&gt;「淫乱」并非字面含义，在情节中，两人的行为本质上是「通奸」。他们冒犯的是当时日本最神圣的禁忌 —— 天皇的权威。因此，这里的深层含义是「僭越」和「犯禁」。是一种对既定秩序、社会规范等禁锢的主动打破。&lt;/p&gt;&#xA;&lt;p&gt;三岛认为，唯美之物必然伴随着对禁忌的触碰和冒犯，真正的优雅带有一种逆反性和危险性。此淫乱价值中立，是一种强大的、原始的情感生命力和情感力量。通过冒犯最高禁忌，使得爱情达到了前所未有的高度、强度与纯度，从而体验到一种毁灭性的极致的美与优雅，这里是三岛美学思想的有力体现。&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;关于松枝清显的性格塑造&#34;&gt;关于松枝清显的性格塑造&lt;/h2&gt;&#xA;&lt;p&gt;清显堪称三岛由纪夫所追求的「美」的完美体现，他追求一种不涉入现实，由观念、感性甚至是梦幻构成的真正的「绝对之美」、「纯粹之美」。&lt;/p&gt;&#xA;&lt;p&gt;在三岛的美学谱系中，美本身常常与女性、柔美、易碎等特质关联。清显男性的肉体与女性化的气质构成了一种超越性别的微妙的中性美，更接近理想中的「纯粹」。而清显又是接受和感知美的天线，他能捕捉到最细致的情感涟漪，光影变化和氛围波动，由于这些东西都是易逝的、暂时的，这就使他比常人更接近「美」的本质。&lt;/p&gt;&#xA;&lt;p&gt;清显优柔寡断，他总是被推着走，不主动参与世界，是一个美的体验者与观察者，而非世俗的参与者，保持着精神世界的「纯粹性」。&lt;/p&gt;&#xA;&lt;p&gt;清显的阴柔极大强化了他的「易碎感」，三岛信奉的「夭折美学」，即最美的事物必须在极致的瞬间毁灭，才得永恒。阳光、富有生命力的英雄的毁灭是悲壮的，但一个精致、柔美、如梦似幻的少年的毁灭，带来的是凄美、心痛和无限的悲惋。他仿佛一开始就注定要破碎，他的死亡成为了美学上的必然。&lt;/p&gt;&#xA;&lt;p&gt;而从三岛由纪夫的身世来理解，他幼年在祖母的贵族式的教育下长大，身体有着类似清显的孱弱，但他又极度崇拜强健的体魄、阳刚的男子气概和行动力，以及探讨死亡与使命的，带有悲壮色彩的武士道精神，所以清显可以看作三岛将自身中敏感、文艺、阴柔的一面极致化并投射于外的过程，他通过清显这个角色，彻底地毫无保留地探讨了这种美的可能性，并最终让其毁灭，同样象征着私道在美学上完成了对自身柔美一面的告别与超越，把这种美推向极致最后摧毁的行为，呼应三岛的核心美学（哲学）思想，也能在后续的作品中偏向更阳刚、暴烈、行动性的美学。&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;巅峰即衰败起点--三岛由纪夫毁灭美学的核心宿命论&#34;&gt;巅峰即衰败起点 —— 三岛由纪夫毁灭美学的核心宿命论&lt;/h2&gt;&#xA;&lt;p&gt;任何具象之美，如青春、容颜、激情，在达到顶点的瞬间，必然开始不可逆的衰减。人对重复的体验也会麻木，如若清显于是聪子的爱情在禁忌中持续，终将沦为庸常，其「神圣性」会被日常消解。&lt;/p&gt;&#xA;&lt;p&gt;美本身是一种易被玷污的脆弱状态，时间、世俗、欲望都会侵蚀其纯粹性，如聪子若剩下清显的孩子，爱情的形而上的意义将被生物学事实瓦解。人为中止美衰败的进程，将其冻结在最饱满的状态，如将鲜花制成标本，是对「美」的最高保护和尊重。&lt;/p&gt;&#xA;&lt;p&gt;三岛认为，毁灭是获得美神性的唯一途径，肉体的消亡使美脱离物质的桎梏，从「有限」跃向「无限」。清显死后，他在聪子与本多的记忆中被抽象为「永恒的幻影」，不再受肉身衰老与情感变质的威胁。毁灭完成了美的形而上学转化，使其成为一个纯粹的符号。&lt;/p&gt;&#xA;&lt;p&gt;我在之前的文章《三岛由纪夫 —— 文化和时代背景塑造的矛盾体》中，简单地把三岛的切腹归为「荒谬的政治闹剧」，实在有失偏颇，仅仅结合一本由第三者撰写的传记来分析这个非常复杂的问题是不辩证的，理解三岛所追求的美学思想与哲学理念，才能为分析提供更客观、多元的视角。&lt;/p&gt;</description>
    </item>
    <item>
      <title>立场与观点</title>
      <link>https://blog.verdant.ee/posts/stand-and-thought/</link>
      <pubDate>Fri, 19 Sep 2025 20:49:24 +0800</pubDate><author>i@glowisle.me (五葉地錦)</author>
      <guid>https://blog.verdant.ee/posts/stand-and-thought/</guid>
      <description>&lt;p&gt;&lt;figure class=&#34;image-caption&#34;&gt;&#xA;    &lt;img src=&#34;https://images.glowisle.me/stand-and-thought-cover.webp&#34; alt=&#34;&#34;&gt;&#xA;    &lt;figcaption&gt;&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;最近我们班的英语老师崴脚了，有另一位老师来代课，一些同学对这位老师的评价极负面，我对这个现象很感兴趣，借此次机会来聊聊观点和立场的话题。&lt;/p&gt;&#xA;&lt;p&gt;首先，任何一门学科，学生都会因为各种原因，对它持有不同的看法。对于一位老师的评价，主观上除了自认为的「老师的水平」，还有一个很大的元素是老师教的学科。而学科有强势与弱势之分，人面对学科时的激励或挫折感受不同，自然会生出喜爱与厌恶的情绪。对于老师的评价也难免受到自己对科目情绪的影响。&lt;/p&gt;&#xA;&lt;p&gt;每次下课都能听到一些同学对老师授课水平的评价：「狗屎」、「又臭又长」，以及人身攻击，直接辱骂老师的。基本都是「我觉得」、「俺寻思」，然后继续追问支支吾吾，仔细观察就能发现，那些恶言相向者都是不擅长英语的，如Q同学每天上课都心不在焉，百无聊赖，成绩不理想归结于「老师教的太烂」。他们的立场，已经开始作用于「评价」了。&lt;/p&gt;&#xA;&lt;p&gt;这些评价可以分为两类，情绪与人身攻击。都是立场的作用。立场，在哲学和社会学中，常指由一个人的社会身份（如阶级、性别、种族）、生活经验所形成的特定视角和认知框架。但我更愿意用这种说法 —— 所站立的地方。站在不同的角度，也就是不同的立场看待问题就会有不同的结果。所以，在一个不擅长英语的人眼中，与英语有关的东西会让他回忆起痛苦，这种偏见的形成，直接导致了评价的方向，也生出了情绪。除学科偏见外，立场的构成也有其他原因，如对原老师的喜爱和留恋，甚至是从众心理等。&lt;/p&gt;&#xA;&lt;p&gt;以上所描述，既不能称之为评价，又不能称之为观点，而是一种因先天能力、后天影响、个人经历等复杂因素共同作用导致的，带有情绪的看法。观点则是基于事实、理性分析形成的判断。何为评价？评定其价值。价值一定是一个值，或者一个区间，不能是负无穷或正无穷，所以价值不能是「好」与「不好」的二元对立。历史学科强调的评价原则是：&lt;strong&gt;辩证、全面、客观、实事求是&lt;/strong&gt;。所以把一些相通的概念借鉴来并补充，如何评价一位老师？辩证、全面、客观、实事求是、&lt;strong&gt;区分观点与立场&lt;/strong&gt;。&lt;/p&gt;&#xA;&lt;p&gt;实事求是，即根据实证，求索真知；&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;所以从我们班级的客观情况来分析，由于皇亲国戚&lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt;居多和一些职场人情世故，我们班级的师资力量可以说是全年级数一数二，甚至还有高中部的老师曾来代课过，这也基本能说明来我们班代课的老师都不会差，再差也不会到「狗屎」的地步。也有一位在本校工作的老师背后推动优化我班的师资水平，所以这位代课老师的真正水平，已经有两个明显的因素发挥作用。&lt;/p&gt;&#xA;&lt;p&gt;从授课节奏上看，与原老师几乎无异。课文翻译、短语、语法内容以及习题的讲评，也都是深入浅出、鞭辟入里的。只是由于代课老师工作繁忙，还有其它年级的学生要带，默写等基础工作不抓，有同学无自主学习的习惯，所以抱怨「看不懂题了」。即使课堂氛围营造不足，互动方式与原老师不同，也不应下降到人身攻击。&lt;/p&gt;&#xA;&lt;p&gt;另外一个原因，也是由于宽松的管理风格，导致同学们的不适应，只好把情绪宣泄在最明显的一个点 —— 老师身上。说来说去，最后的问题还是落在了自己。&lt;/p&gt;&#xA;&lt;p&gt;明辨是非而非混淆观点立场，调整适应而非辱骂拉踩的能力，在追求统一进度、弱化个性思考的标准化教育环境里异常可贵。这种能力，都是以思考为前提的。班级里用情绪主导判断的行为，是微小的时代缩影，在信息爆炸的时代，操控流量的人们刻意煽动情绪、制造爆点，宣扬极端化的观点，给出片面的，断章取义的结果，抹杀了思考的过程，从而导致很多人懒得思考，放弃思考，「没想过」、「不关心」、「不知道」成为常态，娱乐致死的邪风越刮越猛，麻木愚钝的浪潮愈发澎湃，想和同学交流看法，最后的一份坚守也能被尖锐质问：&lt;/p&gt;&#xA;&lt;p&gt;「你想这个干嘛？」&lt;/p&gt;&#xA;&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;&#xA;&lt;hr&gt;&#xA;&lt;ol&gt;&#xA;&lt;li id=&#34;fn:1&#34;&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://baike.baidu.com/item/%E5%AE%9E%E4%BA%8B%E6%B1%82%E6%98%AF/36312&#34;&gt;实事求是 - 百度百科&lt;/a&gt;&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li id=&#34;fn:2&#34;&gt;&#xA;&lt;p&gt;指教师子女。&amp;#160;&lt;a href=&#34;#fnref:2&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/div&gt;</description>
    </item>
    <item>
      <title>摩擦起电</title>
      <link>https://blog.verdant.ee/posts/electrification-by-friction/</link>
      <pubDate>Fri, 12 Sep 2025 19:52:04 +0800</pubDate><author>i@glowisle.me (五葉地錦)</author>
      <guid>https://blog.verdant.ee/posts/electrification-by-friction/</guid>
      <description>&lt;p&gt;物理课讲电荷，一个实验用丝绸摩擦玻璃棒、毛皮摩擦橡胶棒，将其一放在底托上，另一个去靠近，根据吸附或排斥的现象，引出同种电荷互相排斥，异种电荷互相吸引的定律。&lt;/p&gt;&#xA;&lt;p&gt;老师在台上演示着，玻璃棒在丝绸上快速摩擦。&lt;/p&gt;&#xA;&lt;p&gt;在有些人眼中，这个用丝绸摩擦玻璃棒这一类动作，甚至所有的棍状物体本身，都是极其富有官能意义上的美感的。于是见到这类动作便露出意味深远的笑容。如果做这个动作的人，在他们心目中被痛恨、或具威严，那么这种笑容就会变成狂笑、浪荡地笑，但在课堂上要忍住，于是就可以看见这样一道风景 —— 或消瘦或臃肿的身躯捂着嘴低着头，眼睛眯成一条缝，身体一阵一阵地抽搐。&lt;/p&gt;&#xA;&lt;p&gt;而在他们眼中，能由自己做这个摩擦动作，体验至高无上的甘美的快乐 —— 引起他人注意的快乐，就成为了最伟大的目标。&lt;/p&gt;&#xA;&lt;p&gt;今天阴天，空气粘腻，这个实验很难做成，我想老师也不愿再忍受有些人猥琐的笑，就让感兴趣的同学上来给大家演示。那些人炸开了锅，离那快乐仅一步之遥。&lt;/p&gt;&#xA;&lt;p&gt;第一位同学抱着对知识强烈的好奇心与敬畏上去了，但他没有成功，于是第二次的机会变得更珍贵。&lt;/p&gt;&#xA;&lt;p&gt;在眼神传递与恶趣味的互相举荐中，小王自告奋勇，主动起身，大步走上前。他热衷于追求那快乐。激昂与邪魅交织在一起从他眼中闪过。&lt;/p&gt;&#xA;&lt;p&gt;他接过来玻璃棒，把丝绸裹在玻璃棒前端，把玻璃棒顶在身上，面向全班同学。那些人终于控制不住自己的笑声了。&lt;/p&gt;&#xA;&lt;p&gt;小王此刻握住的仅仅是玻璃棒和丝绸吗？听着耳边的笑声，握住了自豪，握住了与他人的联结，握住了自己的人生！自己是站在教室里吗？站在聚光灯下！&lt;/p&gt;&#xA;&lt;p&gt;实验在喧闹中开始，他上下运动着丝绸，快速摩擦着。他们终于看见自己津津乐道的那个动作。&lt;/p&gt;&#xA;&lt;p&gt;在实验中，小王的生命升华了，他的实质已经和班级里的同学异常遥远，不能再回到这个脱位的现实，只好暂时沉溺在自我中，感受「自然科学」的魅力。&lt;/p&gt;&#xA;&lt;p&gt;扭曲的笑声还在耳边回响，兴奋的余波还在心里荡漾。老师的一声呵斥把他拉回了这个已经不属于他的现实，那美好的幻想离他而去，但余味已经在他的脑海反复品尝起来。老师的那声呵斥应带来的羞耻感在他心中从来没存在过。&lt;/p&gt;&#xA;&lt;p&gt;欢声笑语里，小王看着周遭同学们的表情，看着他的朋友们的表情，看向他后座的女生，感受着课堂微妙的气氛。一种他所追求的前所未有的甘美流淌在心里。对小王来说，没有比这感觉更能使他陶醉于其中的了&amp;hellip;&amp;hellip;他细细地品尝着这股甘美，仿佛闭上眼睛就能看见五月灿烂盛开的鲜花&amp;hellip;&amp;hellip;小王靠着自己的行动吸引了人们的目光，但这目光里藏着什么，对他来说都不重要了。&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>罪恶感</title>
      <link>https://blog.verdant.ee/posts/guilt/</link>
      <pubDate>Mon, 08 Sep 2025 20:08:03 +0800</pubDate><author>i@glowisle.me (五葉地錦)</author>
      <guid>https://blog.verdant.ee/posts/guilt/</guid>
      <description>&lt;p&gt;每年的春秋，我都会被极其严重的过敏性鼻炎折磨。&lt;/p&gt;&#xA;&lt;p&gt;长期的睡眠不足，以及永无止境的其他方面的折磨，让我的记忆力和逻辑能力衰退；红肿流泪的眼睛，看周围的一切，唯一的区别只有颜色不同。现实与我从感官上隔绝开了。&lt;/p&gt;&#xA;&lt;p&gt;周日傍晚我给母亲发消息，说明天要请假，我快要死了，不能去上学了。晚上父亲拉着我去了趟医院。回来后得知已经请完假了。&lt;/p&gt;&#xA;&lt;p&gt;早晨五点多惊醒，意识到自己今天不用上学了，但已经醒了，再睡去就很难了，面朝哪个方向，只能听鼻子的，我躺在床上看着外边蒙蒙亮的天，一种难以名状的感觉 —— 我愿称之为罪恶感涌上心头。&lt;/p&gt;&#xA;&lt;p&gt;我确确实实地请假了，我确确实实地在早上七点多不能再入睡，起床了，我确确实实地头脑发昏，我确确实实地低烧了。一切都是那么正当，一切都是那么合理。但那股罪恶感始终在我心头萦绕。&lt;/p&gt;&#xA;&lt;p&gt;昨天去医院的时候我在手机上写下了这几段文字：&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;我于前往医院的路上，写下这些文字。如果再不倾诉，我将会在路上随机杀掉几个人，或者杀掉最令我痛恨的人，然后自杀。&lt;/p&gt;&#xA;&lt;p&gt;自入秋以来，过敏的痛苦如影随形地折磨着我，无论我身处何处。&lt;/p&gt;&#xA;&lt;p&gt;旁人看来，只是得了一个长期的感冒，我首先要杀死的就是这种人。视他人苦难如秋风，任它从耳边划过。在他看来这秋风习习，霜叶飘零，一派凄寂唯美；在我看来，这秋风是该被杀害、分解、扒皮饮血、敲骨吸髓的恶畜，是该被杀死的、是苦痛之源！&lt;/p&gt;&#xA;&lt;p&gt;自九月份以来这短短十七天，我所言次数最多的话语，除泄愤诅咒他人的污秽之语外，就是『我脸上的每一个洞都在漏水』。&lt;/p&gt;&#xA;&lt;p&gt;我脸上的每一个洞都在漏水！&lt;/p&gt;&#xA;&lt;p&gt;一天二十四小时，从何时开始算才是明天？十二点？日出？这个分解是极度模糊的。我看不到时间，我常常在深夜被最原始的，对死亡的恐惧、对窒息的恐惧惊醒。我床边没有任何能让我感知时间的设施，只能从脸上眼眵的覆盖程度，以及喉咙、眼球的疼痛程度，粗略判断现在是前半夜还是后半夜，然后在床上挣扎等待那恶畜放过我，让我入睡。&lt;/p&gt;&#xA;&lt;p&gt;六点在昏胀的头痛中，准时起床进行洗漱，脸上永远是黏黏糊糊的，有封住眼睛的眼眵、过敏淌出的眼泪、控制不住的鼻涕，伴有鼻孔撕裂般的疼痛、张嘴睡觉流出的口水。脸上永远是黏黏糊糊的，怎么清洗都如此。及时这样，也要在十分钟内洗漱完，冒着被呛死的风险洗脸，冒着被憋死的风险刷牙。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;那时还没定下来要请假，我被这种不确定性，或者说是不安感折磨着。终于如愿以偿请假，还不能在家里安心休息，反而继续被罪恶感折磨。&lt;/p&gt;&#xA;&lt;p&gt;随着年龄的增长，随着年级的增长，每一次请假的罪恶感都会增强。&lt;/p&gt;&#xA;&lt;p&gt;这种罪恶感来自我的同龄人们都在学校上课，我在家里睡大觉、看闲书。但这是理所应当的，我生病了。这不是理所应当的，我会落下很多进度。&lt;/p&gt;&#xA;&lt;p&gt;这种紧张的氛围从开学第一天就开始渲染了，那天召开了年级会，会议精神可以粗略概括为初三是决定人生的一年、这是人生的一个转折点。&lt;/p&gt;&#xA;&lt;p&gt;去你妈的吧。&lt;/p&gt;&#xA;&lt;p&gt;又谈起人生，说大话。比起什么腰缠万贯、名利双收、坐办公室吹空调、走上人生巅峰等狗屁，回首十四年，我突然觉得我今天得以存活在这个世界上都是巨大的奇迹。我的母亲没有早产，我出生的时候没有染上大病，我幼年没有被温泉淹死，我没有在那次摔死，我没有磕得头破血流、粉身碎骨，没有在某一时刻从那个完全是为人自杀而准备的教室的窗户跳下去，真是奇迹。&lt;/p&gt;&#xA;&lt;p&gt;每一次请假，我都感觉现实远远离我而去了。有时候它也会停下脚步等着我，但已经不是真正新鲜的现实了。我与今天上学的同学们是割裂的，我与在外上班的父母是割裂的，我与外边的世界是割裂的。我今天没去学校，但秋天恶心的阳光还是沐浴着校门口刻着校训的石头，从早晨睡到放学的那个人从来没醒过，教室空调后面的虫子依然在蠕动。时间依然在流动，现实依然在奔腾着离我而去。&lt;/p&gt;&#xA;&lt;p&gt;初秋的天空湛蓝的可怕，从夏天延续到现在的虫鸣清晰可闻。&lt;/p&gt;&#xA;&lt;p&gt;这太不真实了。&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>三岛由纪夫 —— 文化和时代背景塑造的矛盾体</title>
      <link>https://blog.verdant.ee/posts/yukio-mishima/</link>
      <pubDate>Sat, 06 Sep 2025 17:32:44 +0800</pubDate><author>i@glowisle.me (五葉地錦)</author>
      <guid>https://blog.verdant.ee/posts/yukio-mishima/</guid>
      <description>&lt;p&gt;&lt;figure class=&#34;image-caption&#34;&gt;&#xA;    &lt;img src=&#34;https://images.glowisle.me/mishima-yukio-cover.webp&#34; alt=&#34;&#34;&gt;&#xA;    &lt;figcaption&gt;&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&lt;/p&gt;&#xA;&lt;p&gt;三岛由纪夫，一个伟大的小说家、一个迷恋死亡的疯子、一个狂热的右翼分子。&lt;/p&gt;&#xA;&lt;p&gt;这个月四日，在《丰饶之海》四部曲后，我收到了这本由约翰·内森编撰的《三岛由纪夫传》。当时我的心情是无比激动的，因为我马上就要触摸到这位伟大作家的人生一角，一个鲜活而丰满的三岛即将展现在我眼前。&lt;/p&gt;&#xA;&lt;p&gt;今日九点至十六点，在之前阅读《金阁寺》、《潮骚》、《仲夏之死》等作品所催生出的崇拜感、以及对他人生的极度好奇心和窥探欲的驱使下，一口气读完了这本书。读完后，刚拿到书的那种激动荡然无存，取而代之的是一股怅然若失，一股意犹未尽&amp;hellip;&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;三岛由纪夫，本名平冈公威。其童年经历奠定了他情感丰富的内心，强势的祖母对他的控制欲使他受尽压抑，催生出一幅「假面性格」。为了减少母亲的焦虑，在母亲面前极力隐藏真情实感；为逃避现实的苦痛，投身于幻想和文学中；环境造就的早熟，让他在文学界崭露头角 —— 这是我个人对三岛童年时期的概括。他对鲜血、暴力等元素的追求和逃避现实的幻想，让我想起《金阁寺》中，沟口的心里活动：&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;倘使我是个结巴而寡言的暴君，那么家属们窥见我的脸色，就会终日战战兢兢地生活。我没有必要用明确而流畅的语言来使我的残暴正当化，因为只要我寡言就可以使一切残暴正当化。这样，我总乐于幻想把平日藐视我的教师和同学一个个地处以刑罚。我还乐于幻想我成为内心世界的国王，成为冷静观察的大艺术家。尽管我表面很贫穷，可精神世界却比谁都富有。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;此处的心里活动定是三岛童年时期的写照，也符合三岛自己所言：「我不会描写自己没见过的事物。」&lt;/p&gt;&#xA;&lt;p&gt;公威的祖母夏子对他的管控是极其病态的，从小只允许他与稍年长于他的女性玩耍，禁止一切带有危险性的或可能发出噪音的玩具出现，以及禁止公威出门，这一切都在潜移默化地塑造着他的「女性气质」。而童年时期异性过度的陪伴、对希腊古典美学的痴迷，也是影响三岛对男性健硕肉体的向往的重要因素。&lt;/p&gt;&#xA;&lt;p&gt;三岛的人生可以分为前中后期三个阶段。在出生及《假面的告白》发表前，可以作为前期，这个阶段他表现出文学方面的天赋。而同《告白》可认为是其半自传体作品的《镜子之家》，作为中期和后期的分界，《镜子之家》已经表现出令人不安的对死亡的美化和向往，为《忧国》等风格近似的作品奠定了基础。中期的《金阁寺》也是日本文学中浓厚艳丽的一笔。&lt;/p&gt;&#xA;&lt;p&gt;他是时代和文化背景造就的政治疯子，但无论哪个时期的三岛，在文学上所表现出的能力及建树，是绝对成功且伟大的。三岛是战后日本青年信仰崩塌影响的极端化，其童年家庭环境，以及当时三岛学习成绩优异，考试排名榜首，天皇亲自为他颁发银手表，都在为其后来的闹剧扇风点火。&lt;/p&gt;&#xA;&lt;p&gt;三岛自杀的真正原因众说纷纭，我认为这是多方因素共同影响造成的。文学界，三岛多次翘首盼望诺贝尔文学奖颁给自己，他太想要这个奖了，而导师川端康成先获诺奖，这或许让他感到绝望，在汽车里沮丧地说「他们未来十年也不可能颁奖给日本了」也可以作为此观点的有力证明。&lt;/p&gt;&#xA;&lt;p&gt;政治方面，三岛所崇尚的「武士精神」，和「为天皇赴死的光荣」高度重合。曾多次试图加入军队的经历可以看出他野心的流露，但日本战败、丧失军事主权的现实让他一度陷入绝望和挣扎中。所以他召集和他同样有野心的右翼军国主义残余，组织了私人武装，整日演练与假想敌，也就是可能危及天皇安全的左翼发动的暴乱的战斗。最终还是做起了日本右翼至今矢志不渝的修宪大梦&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;，发动兵变，最终上演切腹自尽的闹剧，实现了一直所幻想的「英雄式的死亡」，完成了一场荒诞的政治表演。除「盾会」活动外，三岛还发表了著名论著《文化防卫论》，其中观点可粗略概括为「天皇是日本文化的源头以及守护者」，体现其拥护天皇的思想。&lt;/p&gt;&#xA;&lt;p&gt;在文学方面，他无疑是非常成功的。华美的词藻几乎穷尽人类语言能够表达的全部，而政治方面，其在文学上流露出的对死亡的美化、迷恋、向往成为了三岛通向兵变之路的最后一块砖。我为如此杰出的文学家死得竟这样荒谬而感到惋惜！&lt;/p&gt;&#xA;&lt;p&gt;读完此书，曾经的一个完美、伟岸的三岛在我内心崩塌了，而一个更加丰满立体，具有多面性的三岛形象又在我内心被建立起来。优雅的、自律的、伟大的才子；极端的、荒谬的、病态的疯子&amp;hellip;&amp;hellip;三岛啊！你的生命被自己迸发的才华之火燃尽了吗！&lt;/p&gt;&#xA;&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;&#xA;&lt;hr&gt;&#xA;&lt;ol&gt;&#xA;&lt;li id=&#34;fn:1&#34;&gt;&#xA;&lt;p&gt;第九条【放弃战争，否认军备及交战权】&lt;br&gt;1．日本国民衷心谋求基于正义与秩序的国际和平，永远放弃以国权发动的战争、武力威胁或武力行使作为解决国际争端的手段。&lt;br&gt;&#xA;2．为达到前项目的，不保持陆海空军及其他战争力量。不承认国家的交战权 &lt;br&gt; ——&lt;a href=&#34;https://www.cn.emb-japan.go.jp/itpr_zh/kenpo_zh.html&#34;&gt;《日本国宪法（暂译）》&lt;/a&gt;&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/div&gt;&#xA;</description>
    </item>
    <item>
      <title>写在九月的开头</title>
      <link>https://blog.verdant.ee/posts/beginning-of-september/</link>
      <pubDate>Mon, 01 Sep 2025 16:35:23 +0800</pubDate><author>i@glowisle.me (五葉地錦)</author>
      <guid>https://blog.verdant.ee/posts/beginning-of-september/</guid>
      <description>&lt;p&gt;&lt;figure class=&#34;image-caption&#34;&gt;&#xA;    &lt;img src=&#34;https://images.glowisle.me/sep-start-cover.webp&#34; alt=&#34;&#34;&gt;&#xA;    &lt;figcaption&gt;&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&lt;/p&gt;&#xA;&lt;p&gt;又到了喜闻乐见的结算环节，其实这篇文章是想写给这个暑假的，但标题起作「暑假总结」，总感觉非常掉价。&lt;/p&gt;&#xA;&lt;p&gt;今天是九月一日，全国大部分省份都开学了，天津因上海合作组织峰会，延后开学，所以我今天才能在大下午，悠哉悠哉地坐在电脑前写总结。&lt;/p&gt;&#xA;&lt;h2 id=&#34;旅游&#34;&gt;旅游&lt;/h2&gt;&#xA;&lt;p&gt;这个暑假过得真的是非常的&lt;a href=&#34;https://www.yingyu5658.me/posts/%E5%AE%85/&#34;&gt;&lt;strong&gt;宅&lt;/strong&gt;&lt;/a&gt;，爸妈硬拉着我出去玩，我还写出了一篇&lt;a href=&#34;https://www.yingyu5658.me/posts/%E5%A4%8F%E6%97%A5%E6%AE%8B%E5%BD%B1/&#34;&gt;负能量满满的游感&lt;/a&gt;，可见对于这种耗费精力的事情有多抗拒。&lt;/p&gt;&#xA;&lt;p&gt;如果是去一些自然景观、有人文历史可探究的地方，我还是很提倡的，但花了小一千块去游乐场玩，不觉得多有收获。&lt;/p&gt;&#xA;&lt;p&gt;除了按时出去上素描课以外，我几乎很少再外出活动了。体育中考应该能靠在学校的锻炼拿点分吧。&lt;/p&gt;&#xA;&lt;p&gt;其实我也比较向往出去玩。尤其是看了&lt;a href=&#34;https://lhasa.icu/reading-log-2025-06-07/&#34;&gt;《二零二五 - 六七月读书随笔》&lt;/a&gt;这篇文章。但是我想自己一个人出去，或者和同学出去。总之，绝对不会想和家人一起，最后的结果一般都是谁也不开心，简直是负担。&lt;/p&gt;&#xA;&lt;h2 id=&#34;阅读&#34;&gt;阅读&lt;/h2&gt;&#xA;&lt;p&gt;这个暑假我一直在读日本文学。从我的 Obsidian 备份仓库的 git 提交里可以看到一开始计划的书单，大概是七月初：&lt;/p&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;📚书名&lt;/th&gt;&#xA;          &lt;th&gt;👨🏻‍🎓作者&lt;/th&gt;&#xA;          &lt;th&gt;🖊️字数（千字）&lt;/th&gt;&#xA;          &lt;th&gt;🔵状态&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;白夜行&lt;/td&gt;&#xA;          &lt;td&gt;【日】东野圭吾&lt;/td&gt;&#xA;          &lt;td&gt;474&lt;/td&gt;&#xA;          &lt;td&gt;已读完&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;金色夜叉&lt;/td&gt;&#xA;          &lt;td&gt;【日】尾崎红叶&lt;/td&gt;&#xA;          &lt;td&gt;277&lt;/td&gt;&#xA;          &lt;td&gt;已读完&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;解忧杂货店&lt;/td&gt;&#xA;          &lt;td&gt;【日】东野圭吾&lt;/td&gt;&#xA;          &lt;td&gt;218&lt;/td&gt;&#xA;          &lt;td&gt;未读完&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;我是猫&lt;/td&gt;&#xA;          &lt;td&gt;【日】夏目漱石&lt;/td&gt;&#xA;          &lt;td&gt;307&lt;/td&gt;&#xA;          &lt;td&gt;未读完&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;呼啸山庄&lt;/td&gt;&#xA;          &lt;td&gt;【英】艾米莉·勃朗特&lt;/td&gt;&#xA;          &lt;td&gt;325&lt;/td&gt;&#xA;          &lt;td&gt;未读完&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;堂吉诃德&lt;/td&gt;&#xA;          &lt;td&gt;【西】塞万提斯&lt;/td&gt;&#xA;          &lt;td&gt;826&lt;/td&gt;&#xA;          &lt;td&gt;未读完&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;窄门&lt;/td&gt;&#xA;          &lt;td&gt;【法】安德烈·纪德&lt;/td&gt;&#xA;          &lt;td&gt;66&lt;/td&gt;&#xA;          &lt;td&gt;未读完&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;百年孤独&lt;/td&gt;&#xA;          &lt;td&gt;【哥】加夫列尔·加西亚·马尔克斯&lt;/td&gt;&#xA;          &lt;td&gt;262&lt;/td&gt;&#xA;          &lt;td&gt;未读完&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;知道分子&lt;/td&gt;&#xA;          &lt;td&gt;【中】王朔&lt;/td&gt;&#xA;          &lt;td&gt;270&lt;/td&gt;&#xA;          &lt;td&gt;未读完&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;p&gt;但现在的状态是这样的：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-markdown&#34; data-lang=&#34;markdown&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#b2c98f;font-weight:bold&#34;&gt;## 七月&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e67e80&#34;&gt;- [x]&lt;/span&gt; 《白夜行》东野圭吾&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e67e80&#34;&gt;- [x]&lt;/span&gt; 《解忧杂货店》东野圭吾&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e67e80&#34;&gt;- [x]&lt;/span&gt; 《金色夜叉》尾崎红叶&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#b2c98f;font-weight:bold&#34;&gt;## 八月&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e67e80&#34;&gt;- [x]&lt;/span&gt; 《仲夏之死》三岛由纪夫&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e67e80&#34;&gt;- [x]&lt;/span&gt; 《潮骚》三岛由纪夫&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e67e80&#34;&gt;- [x]&lt;/span&gt; 《金阁寺》三岛由纪夫&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e67e80&#34;&gt;- [x]&lt;/span&gt; 《伊豆的舞女》川端康成&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#b2c98f;font-weight:bold&#34;&gt;## 九月&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e67e80&#34;&gt;- [ ]&lt;/span&gt; 《雪国》川端康成&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e67e80&#34;&gt;- [ ]&lt;/span&gt; 《罗生门》芥川龙之介&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e67e80&#34;&gt;- [ ]&lt;/span&gt; 《知道分子》王朔&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e67e80&#34;&gt;- [ ]&lt;/span&gt; 《活着》余华&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e67e80&#34;&gt;- [ ]&lt;/span&gt; 《生死疲劳》莫言&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;我承认，《百年孤独》现在对我来说实在是太难了。《雪国》，八月三十一日已经看了一半了，就先把它放到九月的书单里吧。&lt;/p&gt;&#xA;&lt;p&gt;《伊豆的舞女》有一篇&lt;a href=&#34;https://www.yingyu5658.me/posts/izu-no-odoriko/&#34;&gt;读后感&lt;/a&gt;，当时正好在电脑边读完了。有感而发，立刻写了一篇。实际上我不太擅长写这种类型的文字，算是文学评论吧。&lt;/p&gt;&#xA;&lt;p&gt;八月份读了整整三本三岛由纪夫的书，那本《仲夏之死》其实也是短篇小说集。我对三岛文字的印象就是&lt;strong&gt;相当地妖艳&lt;/strong&gt;。刻画人物心里的挣扎和思辩非常细致入微，简直到了变态的程度。他对行文节奏和结尾留白、以及意象的运用简直炉火纯青，用词也非常华丽但有分量，甚至让我读着读着浑身起鸡皮疙瘩，非常喜欢三岛由纪夫的文字。&lt;/p&gt;&#xA;&lt;p&gt;我在初读《金阁寺》时，有不解的地方，在读完后查阅了大量评论和解读，再回头去看里面的一些情节和描写才有了自己的一点粗浅的理解。为什么说三岛的文字妖艳呢，就是因为你越读，越会陷入角色的思考和情绪里；越不懂，越撩拨着你的心，去研究，体悟那种独特的风格。找时间一定要再看一遍。&lt;/p&gt;&#xA;&lt;p&gt;川端康成与之相比就是一种细腻柔和的美，这种切换让我有点不适应。三岛的叙述手法是一种标准的小说家的手法，讲故事的手法，但川端康成是在展示日常的细节碎片，用这种手法把读者一下子拉入到情节中，节奏比较缓慢，像流水一样，虽然潺潺流过，但把手指伸进去，能感受到水流湿滑的触感和阵阵沁人心脾的清凉。&lt;/p&gt;&#xA;&lt;p&gt;东野圭吾的两本书，《解忧杂货店》可以称得上是无聊的。关于《白夜行》，我对推理题材没有想象中的那么感兴趣，或者是没有读到合口味的书，只能说悬念环环相扣，但节奏比较拖沓，看得很心急。&lt;/p&gt;&#xA;&lt;p&gt;《金色夜叉》和《潮骚》又让我对爱情有了新的感受，前者权衡爱情和钱财，揭露批判拜金，后者则是纯洁美好的初恋，很「不三岛」的一本书。&lt;/p&gt;&#xA;&lt;p&gt;另外，在图书馆读了四十页的《喧哗与骚动》，为什么记得这么清楚是四十页？因为是真煎熬啊！太难读了！现在还不适合我，但早晚有一天我要带着更高的阅读能力和文学素养，征服这座高山。&lt;/p&gt;&#xA;&lt;p&gt;除了书，我也经常用博客圈子提供的随机访问网站，找几个博客读一读，有喜欢的就加入到RSS订阅。&lt;/p&gt;&#xA;&lt;h2 id=&#34;博客&#34;&gt;博客&lt;/h2&gt;&#xA;&lt;p&gt;暑假里我写了几万字，平均四五天更新一次。由于开学时的博客大部分都是在写学校遇见的烂人烂事，放假前还会担心，在家里闷着是不是没有什么东西可写？事实证明并不会。&lt;/p&gt;&#xA;&lt;p&gt;这两个月我换了不少主题，也自己写过一两个主题，最后还是没能用下去。挑来挑去，最后还是选择了以前用 Hexo 最喜欢的主题的 Hugo 移植版（不太清楚哪个博客程序的才是本家） —— &lt;a href=&#34;https://github.com/JokerQyou/maupassant-hugo/&#34;&gt;Maupassant&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;大刀阔斧地砍掉了很多功能，模仿 Typecho 的默认主题，添加了暗色模式，看起来舒服多了。我对目前的主题非常满意。&lt;/p&gt;&#xA;&lt;p&gt;对永久链接格式也进行了几轮改革：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;1.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;/post/技术/*      &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt;&amp;gt;    /post/tech/*&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;/post/随笔/*      &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt;&amp;gt;    /post/jottings/*&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;/post/读书/*      &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt;&amp;gt;    /post/readings/*&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;2.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;/post/tech/*      &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt;&amp;gt;    /posts/tech/*&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;/post/jottings/*  &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt;&amp;gt;    /posts/jottings/*&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;/post/readings/*  &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt;&amp;gt;    /posts/readings/*&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;3.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;/posts/tech/* &#x9;  &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt;&amp;gt;    /posts/*&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;/posts/jottings/* &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt;&amp;gt;    /posts/*&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;/posts/readings/* &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt;&amp;gt;    /posts/*&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;第一次为了去除又长又蠢的链接，把汉字改成了英文，第二次突然发现post是不是要用复数更恰当？又改了一次。第三次发现目录嵌套有点深，就把第一次改的分类名删掉了。&lt;/p&gt;&#xA;&lt;p&gt;真是想到什么就做什么啊。&lt;/p&gt;&#xA;&lt;p&gt;为了SEO权重考虑，废了很大力气调试&lt;code&gt;vercel.json&lt;/code&gt;的重定向，好在大部分页面都能正常跳转了，以前的水文我也不打算处理。&lt;/p&gt;&#xA;&lt;h2 id=&#34;画画&#34;&gt;画画&lt;/h2&gt;&#xA;&lt;p&gt;&lt;figure class=&#34;image-caption&#34;&gt;&#xA;    &lt;img src=&#34;https://images.glowisle.me/sep-start.webp&#34; alt=&#34;图&#34;&gt;&#xA;    &lt;figcaption&gt;图&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&lt;/p&gt;&#xA;&lt;p&gt;这是我临摹的在知乎上找到的一张图，来源已不可考。佩服那位大佬的能力，这种画面风格再给我十年我也达不到&amp;hellip;&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;&lt;figure class=&#34;image-caption&#34;&gt;&#xA;    &lt;img src=&#34;https://images.glowisle.me/sep-start-1.webp&#34; alt=&#34;图&#34;&gt;&#xA;    &lt;figcaption&gt;图&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&lt;/p&gt;&#xA;&lt;p&gt;这张来自我很喜欢的一个博客「&lt;a href=&#34;https://www.geedea.pro/&#34;&gt;極客死亡計劃&lt;/a&gt;」网站顶部的一张图。&lt;/p&gt;&#xA;&lt;p&gt;&lt;figure class=&#34;image-caption&#34;&gt;&#xA;    &lt;img src=&#34;https://images.glowisle.me/sep-start-2.webp&#34; alt=&#34;图&#34;&gt;&#xA;    &lt;figcaption&gt;图&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&lt;/p&gt;&#xA;&lt;p&gt;凭印象画出的&lt;a href=&#34;https://www.yingyu5658.me/posts/%E5%A4%8F%E6%97%A5%E6%AE%8B%E5%BD%B1/&#34;&gt;《夏日残影》&lt;/a&gt;结尾提到的那只鸟。&lt;/p&gt;&#xA;&lt;h2 id=&#34;最后&#34;&gt;最后&lt;/h2&gt;&#xA;&lt;p&gt;总结一下，不就是两个月都窝在家里看书画画吗！化学也没学，物理数学也没学&amp;hellip;&amp;hellip; 到现在为止连暑假作业都没完全写完。&lt;/p&gt;&#xA;&lt;p&gt;希望开学以后，依然能保持现在这种心态吧。&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;p&gt;封面图作者为Dan Black, 来自&lt;a href=&#34;https://unsplash.com/photos/brown-dried-leaf-on-brown-tree-branch-K7f1BKy41aE&#34;&gt;Unsplash&lt;/a&gt;&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>「我害怕死」</title>
      <link>https://blog.verdant.ee/posts/dissipation-of-consciousness-after-death/</link>
      <pubDate>Sat, 30 Aug 2025 21:31:26 +0800</pubDate><author>i@glowisle.me (五葉地錦)</author>
      <guid>https://blog.verdant.ee/posts/dissipation-of-consciousness-after-death/</guid>
      <description>&lt;p&gt;我十三岁那年和父母说，以后就不过生日了。&lt;/p&gt;&#xA;&lt;p&gt;那时候我惊奇地发现，每过一次生日，就代表那可怜的生命正式少了一年。又向终点迈出了蹒跚的一步。&lt;/p&gt;&#xA;&lt;p&gt;最近有一个朋友一直在和我聊他对死亡的恐惧，特别是对死亡后意识消散的恐惧。我能理解这种作为动物，对死亡最原始最本能的恐惧，被时间推着走向死亡的无力感。随着阅历的增加，出现对存在和死亡的思考是正常的。&lt;/p&gt;&#xA;&lt;p&gt;但我不是很能理解，小小年纪，九月份就上高中了，想这个干嘛？&lt;/p&gt;&#xA;&lt;p&gt;他的问题是：「既然人最后意识都要消散，为什么要去做那么多事情？」&lt;/p&gt;&#xA;&lt;p&gt;感觉他会提出这个问题，离某些危险的思想已经不远了。一定要在这个阶段性的迷茫中，阻止他向深渊滑落。&lt;/p&gt;&#xA;&lt;p&gt;我分析并提出了三点：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;太闲了，闲下来就容易想东想西，但不否认这种思想活动的积极意义，总比稀里糊涂过一辈子强。&lt;/li&gt;&#xA;&lt;li&gt;比较空虚，找不到意义或「价值感」。建议找一点喜欢的事多做做。&lt;/li&gt;&#xA;&lt;li&gt;是不是看了什么不该看的东西？看了什么理解不了的作品走火入魔了？&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;然后，他提出了一个有点噎住我的问题：&lt;/p&gt;&#xA;&lt;p&gt;「什么是有意义？」&lt;/p&gt;&#xA;&lt;p&gt;「意义是怎么定义的？」&lt;/p&gt;&#xA;&lt;p&gt;这个问题在之后的讨论中都没有得到让双方都信服的解答。我自己的观点是：&lt;strong&gt;让自己有「价值感」，就是有意义&lt;/strong&gt;。&lt;/p&gt;&#xA;&lt;p&gt;应第二点，就是找点喜欢的事。喜欢旅游就旅游，喜欢画画就画画等。但是这件事对他来说有难度，因为&lt;strong&gt;他根本不知道自己喜欢什么&lt;/strong&gt;。&lt;/p&gt;&#xA;&lt;p&gt;据回答，他的活动除上学外，就是玩两个固定的游戏，看一个视频软件，用社交软件聊天。&lt;/p&gt;&#xA;&lt;p&gt;我给他的建议是，读一读史铁生的文字，应该能从那里面找到一点答案。但是他对看书没什么兴趣，上学了也觉得没有时间看书。所以最后还是建议写作。把思考、观点、疑问全部写出来，让这些情绪有一个出口。&lt;/p&gt;&#xA;&lt;p&gt;但当时凌晨十二点，没有那个精力了，困得说话都有可能不通顺，只好作罢。当时延伸探讨了一些细节可以作为他文章的题材，但直到现在也不提起写东西的事，我也不便再追问，可能对写作兴趣也不大。&lt;/p&gt;&#xA;&lt;p&gt;但从讨论中也可以梳理出一些东西。&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;他：我害怕死&lt;/p&gt;&#xA;&lt;p&gt;我：你往深了想想，为什么害怕死？&lt;/p&gt;&#xA;&lt;p&gt;他：我害怕意识的消散&lt;/p&gt;&#xA;&lt;p&gt;我：为什么害怕意识的消散？&lt;/p&gt;&#xA;&lt;p&gt;他：不知道。为什么呢？&lt;/p&gt;&#xA;&lt;p&gt;他：因为人生太短了、太有限。&lt;/p&gt;&#xA;&lt;p&gt;我：你为什么会担忧人生的长度？你还有什么想做的事情吗？&lt;/p&gt;&#xA;&lt;p&gt;他：因为，我所有的一切消失得太快了，我想让他们一直在我身边，我想一直思考。我想一直拥有意识。&lt;/p&gt;&#xA;&lt;p&gt;我：他们里面，谁最重要，为什么那个人你觉得最重要？&lt;/p&gt;&#xA;&lt;p&gt;他：我的家人最重要。&lt;/p&gt;&#xA;&lt;p&gt;我：你拥有意识，想一直保持思考，思考什么？&lt;/p&gt;&#xA;&lt;p&gt;他：可能是基本的生命活动，说白了就是我想活着。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;我认为，他可能有濒死的经历，或者有对他打击很大的亲人去世事件。前者被否定了，但后者确实有，我们刚认识的时候，他家中有一位老人驾鹤西去，他非常伤心。那件事可能是思考死亡的启蒙，但他无法完全消化这种悲痛的情绪，或者缺乏引导，所以就成了一个创伤。所以这件事在我们讨论的时候就不太方便提。&lt;/p&gt;&#xA;&lt;p&gt;这种「怕死」和纠结，也有好的一面。起码不会做出某些过激行为，总体上人是比较稳定的。但这已经属于内耗而不属于思辩了，已经有强烈的恐惧甚至是焦虑情绪在里面，这样下去精力迟早要消耗殆尽。&lt;/p&gt;&#xA;&lt;p&gt;他可能缺失对生命的除必然走向死亡的额外感受，生命对他来说可能是一个泛泛抽象的概念。如此恐惧死亡，恐惧意识的消散，用人话讲就是「没活够」，这种情绪多数源于&lt;strong&gt;时间和生命如此真实，但自己却没有掌握住的空虚感&lt;/strong&gt;。所以我主张找点事做，把时间和生命从游戏和视频手中夺回来。进行长时间有深度的活动后，获得的成就感，就是意义所在。有意义感，就是存在的意义，就是「做那么多事的意义」。&lt;/p&gt;&#xA;&lt;p&gt;所以开头的问题，显然有一个错误，那就是：&lt;strong&gt;站在终点回头看&lt;/strong&gt;。&lt;/p&gt;&#xA;&lt;p&gt;我觉得，一个七八十岁的老人这么想是没有问题的，因为他们已经有了足够的阅历，支撑的起这种回望。但一个十五六岁的小伙子，这么想就会&lt;strong&gt;走火入魔&lt;/strong&gt;。当你试图站在终点回望，你就会发现大段大段的空白，无法找到真正可供观赏的，有价值东西，从而就会生出这种疑问，引发思辩。甚至由于当前的思想境界无法完成这样的思辩，引发无意义的&lt;strong&gt;内耗&lt;/strong&gt;。&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>文字所承载的东西能跨越时空</title>
      <link>https://blog.verdant.ee/posts/what-is-carried-by-words-can-transcend-time-and-space/</link>
      <pubDate>Fri, 29 Aug 2025 22:18:20 +0800</pubDate><author>i@glowisle.me (五葉地錦)</author>
      <guid>https://blog.verdant.ee/posts/what-is-carried-by-words-can-transcend-time-and-space/</guid>
      <description>&lt;h2 id=&#34;模糊&#34;&gt;模糊&lt;/h2&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;文字永远只是形式，而文字所承载的东西，才是可以跨越时空的存在。&lt;/p&gt;&#xA;&lt;p&gt;—— &lt;a href=&#34;https://onojyun.com/2025/08/13/%E7%88%B1%E7%9A%84%E6%88%90%E6%96%87%E8%AF%97/&#34;&gt;&lt;em&gt;爱的成文诗 | 莫比乌斯&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;跨越时空这个词，我第一次读来愣了一下。有一种「念天地之悠悠」，发觉自己渺小的感觉，但「独怆然而涕下」到不至于，因为我还没有那么有才华，到不了怀才不遇的悲怆。反而是一种模糊的，缓缓流动的感伤和无奈。&lt;/p&gt;&#xA;&lt;p&gt;不用说十四年，两个月前的记忆都是模糊的。我写的一篇类似日记的文章&lt;a href=&#34;https://www.yingyu5658.me/post/jottings/%E4%BA%BA%E7%94%9F%E4%B8%AD%E7%AC%AC%E4%B8%80%E6%AC%A1%E5%A4%A7%E8%80%83/&#34;&gt;《人生中第一次大考》&lt;/a&gt;记录了我在会考那一天发生的事。整篇都流露着一股淡淡的死感&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;，和现在的情感差异比较大，主要还是上学导致的。&lt;/p&gt;&#xA;&lt;p&gt;现在想想，那天发生的，只有几个画面和模糊的感觉，比如我在车里看到站在外面被太阳暴晒的同学、还有那天真的很热、考点教室很干净。都是不连贯的一幅一幅画面。不过还是要感谢当时的我，写下了那些文字，不然今天连可供回忆的素材都没有。我现我还记得《爱情公寓》里，有角色说过这样一句话，好像是曾小贤吧：&lt;/p&gt;&#xA;&lt;p&gt;「能证明我活过的就只有沙发上的屁股印了！」&lt;/p&gt;&#xA;&lt;p&gt;可惜，我房间里还没有沙发。但是我在网上无病呻吟了很多文字&lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt;，应该能保存一段时间，证明我活过。我以前也比较喜欢在朋友圈发点东西，但那些表述相对浅显。而且一旦有确切可预测的「观众」，就难以避免地带有夸张和表演情绪，但喜欢在朋友圈表演，也是自我的一个阶段。&lt;/p&gt;&#xA;&lt;details&gt;&#xA;&lt;summary&gt;&lt;s&gt;现在&lt;/s&gt;&lt;/summary&gt;&#xA;&lt;img src=&#34;https://images.glowisle.me/what-is-carried-by-words-can-transcend-time-and-space-wechat.webp&#34;&gt;&#xA;说真的，可能是我的社交圈子问题吧，我当初就不太应该加那么多人的微信。我感觉我的朋友圈里有不少不太正常的人。&#xA;&lt;/details&gt;&#xA;&lt;p&gt;虽然扫一扫在右上角的加号也能打开，但是我还是留下来了，因为我怕我手贱去点设置，打开朋友圈。虽然打开了也无妨，我已经完全把朋友圈这个功能封闭起来了，不看任何人的朋友圈，任何人不能看我的朋友圈。能减少很多看别人营造出来的完美生活的焦虑。&lt;/p&gt;&#xA;&lt;p&gt;我最后一次发朋友圈是在七月三日。近一年左右，我很喜欢发画。手绘，板绘，甚至是一些画得很垃圾的速写。还有一些博客的文章，我会把阴阳怪气，又或是直抒胸臆骂老师引起公愤行为的文章贴在朋友圈。也许没什么人看，但是看的人，应该会觉得出了一口气吧。&lt;/p&gt;&#xA;&lt;p&gt;现实中也有几个同学知道我的博客，有一位还在我当时证书到期的时候提醒过我，甚至跟我探讨过文章里的内容，也许他最近还在看我的博客。从之前网站出问题的时候他发现并提醒，可以推断出他大概是有看这个博客的习惯的。&lt;/p&gt;&#xA;&lt;h2 id=&#34;记录&#34;&gt;记录&lt;/h2&gt;&#xA;&lt;p&gt;一切记录都是有意义的。无论是朋友圈、说说，还是一篇日记，一篇长篇大论的文章，一切记录都是有意义的。&lt;/p&gt;&#xA;&lt;p&gt;我最近在构思博客一周年的总结文章，但还有两个月才算狭义上的一周年。但我前两天跟一位朋友复盘过我们的聊天记录，他所保存的最早的，有关「博客」这个关键词的聊天记录来自2023年9月10日，我当时搭建好了一个网站，邀请他来看看。但当时我还没有什么写作能力，搭建完了就搁置了。虽然现在也没有写作能力，但是起码能人模狗样的把话说出来。&lt;/p&gt;&#xA;&lt;p&gt;他把聊天记录转发过来的时候，我很震惊，因为23年9月，我刚刚升入初中。&lt;/p&gt;&#xA;&lt;p&gt;一切主观的记忆都是会随着时间的流逝，和自己的反复咀嚼、品味而被篡改的。关于23年9月搭建博客的记忆甚至没有模糊的过程，直接就被忘却了，需要提供一个锚点来回忆。我使用了那个域名作为「锚点」，那是一个国外托管网站的免费域名，于是我借着这个，回想起了一个模糊的，甚至是第三人称的画面，也有当时的感觉：对这件事一知半解，觉得有点难。&lt;/p&gt;&#xA;&lt;p&gt;那是唯一在我大脑中保存下来的回忆了。&lt;/p&gt;&#xA;&lt;p&gt;另一个让我震惊的事情是，我印象中我是在2024年11月，才开始了我认为能被称为博客的写作，但23年就有记录。当时我用的是Gmeek&lt;sup id=&#34;fnref:3&#34;&gt;&lt;a href=&#34;#fn:3&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;3&lt;/a&gt;&lt;/sup&gt;，把语文作业里写的自认为不错的小短文贴上去了，那篇文章还被老师表扬了，说是很有感染力。具体写的是什么已经无从考证，但是我印象中有一句话：「夕阳是太阳的尸体。」这种悲观甚至有点中二的看法，竟然会被老师表扬。于是这个事成为了我对「写博客」相关回忆的锚点。但很可惜的是，那篇文章已经因为几次博客搬家丢失。&lt;/p&gt;&#xA;&lt;p&gt;回看自己写的文字，是一个重视自我的过程。可能会从中看到这中二、偏激、幼稚、尴尬、羞耻，一旦有了这些情绪，那就证明自己是有进步的。我认为这也是文字的优越性。无论是什么样的自己，都有亲手记录下的价值。&lt;/p&gt;&#xA;&lt;p&gt;这也是证明「我是我」的一个手段。&lt;/p&gt;&#xA;&lt;p&gt;怎么才能证明我是我？是我的长相，还是我的穿衣风格，还是我的人际关系？&lt;/p&gt;&#xA;&lt;p&gt;我觉得是我写下的这些文字。&lt;/p&gt;&#xA;&lt;p&gt;无论是偏激的，还是幼稚的，都是当时自己意识的速写。脸可以被毁容，也可以整容；夏天穿短袖，冬天穿长袖；毕业了同学就几乎没任何联系。只有文字才能证明「我」的存在，它是一个人流动的意识和思想的直接抽象。比其它形式更入木三分。虽然根据开头所引用，文字只是形式，但它承载的飘渺却又厚重的东西，对每个人来说都是独一无二的，是一场与自己跨越时空的对话；而在别人看来，每一个字符都是作者精神的直接投射，能从一篇篇文章中拼凑出完整的形象。&lt;/p&gt;&#xA;&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;&#xA;&lt;hr&gt;&#xA;&lt;ol&gt;&#xA;&lt;li id=&#34;fn:1&#34;&gt;&#xA;&lt;p&gt;非医学意义。&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li id=&#34;fn:2&#34;&gt;&#xA;&lt;p&gt;目前已经在此博客唧唧歪歪了85173字。&amp;#160;&lt;a href=&#34;#fnref:2&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li id=&#34;fn:3&#34;&gt;&#xA;&lt;p&gt;Gmeek，一个完全基于 Github Pages、Github Issues 和 Github Actions 的个人博客模板。详见 &lt;a href=&#34;https://github.com/Meekdai/Gmeek&#34;&gt;https://github.com/Meekdai/Gmeek&lt;/a&gt;.&amp;#160;&lt;a href=&#34;#fnref:3&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/div&gt;&#xA;</description>
    </item>
    <item>
      <title>《伊豆的舞女》读后感</title>
      <link>https://blog.verdant.ee/posts/izu-no-odoriko/</link>
      <pubDate>Thu, 21 Aug 2025 20:37:54 +0800</pubDate><author>i@glowisle.me (五葉地錦)</author>
      <guid>https://blog.verdant.ee/posts/izu-no-odoriko/</guid>
      <description>&lt;p&gt;我读的这本《伊豆的舞女》是一页文库出品的川端康成短篇小说集，共选入十篇。依照顺序分别为：《伊豆的舞女》、《油》、《篝火》、《春景色》、《温泉旅馆》、《抒情歌》、《禽兽》、《母亲的初恋》、《朝云》、《「燕」号列车上的女孩》。还有作者自序和三岛由纪夫作的序。&lt;/p&gt;&#xA;&lt;p&gt;《伊豆的舞女》这一篇的内容是一位高中生为排遣心中难以言喻的苦闷，来到伊豆旅行，遇到江湖艺人，并对其中的舞女产生了恋慕之情。采用川端康成擅长，也是风格的日常碎片拼接的手法，用一件件小事体现出「我」对舞女的爱恋，一直到最后离别的过程。&lt;/p&gt;&#xA;&lt;p&gt;这篇故事从头到尾都流露着一股淡淡的阴郁和忧愁，而文章末尾写道的眼泪流尽后品尝到的「甘美的快乐」，我认为是文章的中心和精华，通过日常小事到离别，体现出日本文学中「物哀」的精髓，也就是对世间生命、感情无常的深度共情与审美升华。&lt;/p&gt;&#xA;&lt;p&gt;由对舞女的感情和离别，引申出一系列复杂的情感体验。途中，薰子一句“您真是好人啊”的纯真评价，让他首次感受到被接纳的温暖，脱离出孤儿身份的长期忧郁，结尾的泪水冲刷了长期积累的沉重的阴霾，代之以甘美的轻盈。与熏子因阶级、年龄差异注定无果的恋慕之情，本应导向沉重的痛苦，却被升华为短暂而珍贵的体验，是物哀美学的核心体现。&lt;/p&gt;&#xA;&lt;p&gt;话虽然是这么说，但我们尊重不同的观点，豆瓣上有些读者认为这个故事充满「男凝」，我表示不理解，拳师特有的观点吧。草木皆兵，一切都是父权社会男性对女性的压迫！她们看《温泉旅馆》，不会又觉得物化女性吧？&lt;/p&gt;&#xA;&lt;p&gt;其中《温泉旅馆》写当时社会底层女性奔波辗转的劳苦命运，《油》深入剖析「我」对丧失父母之爱情在油上的转移和投射，但这几个故事里我印象最深刻的是《朝云》，故事讲述了一个女子学校的学生对一位女性老师产生崇拜的唯美故事，说它是百合也不为过了。我在一个日语网站看到对这个故事有这样的评价，应该是出版商的标语之类的：&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;恋はあまりにも、幻影だった。&lt;/p&gt;&#xA;&lt;p&gt;日本文学史上、最も純潔なる青春少女小説！！&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;大意是：爱恋太过于幻影了。日本文学史上，最纯洁的青春少女小说！！&lt;/p&gt;&#xA;&lt;p&gt;恋这个字在日语中特指 恋爱之情、爱慕之心，尤其强调 情感萌动阶段的心动、憧憬或单相思，比中文“爱”更轻盈，带有青春期的纯粹性与虚幻感。这正是我喜欢这个故事的原因。作者把一颗懵懂的、纯粹的，对美好向往的心写活了，一个含蓄多思的少女形象跃然纸上。&lt;/p&gt;&#xA;&lt;p&gt;而纯洁，就在于没有到肉体层面，对美好的向往和肉欲是完全不同的两个方向，节选两段可以感受一下：&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&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;青春&lt;/strong&gt;吗？我也逐渐成为&lt;strong&gt;和她一样&lt;/strong&gt;的“姑娘”了，我心中充满&lt;strong&gt;喜悦&lt;/strong&gt;，一双眼睛&lt;strong&gt;贪婪地偷偷&lt;/strong&gt;瞅着她，同时又看看自己，在她的诱惑下，我迅速成熟了。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;尤其是最后一小段：贪婪、偷偷，这种色彩的词语在当前的语境下，能传达出一种热烈又真切的爱慕与向往，向往到什么程度呢？想「成为」爱慕的对象，这是对理想自我的精神投射，承载着自我认同的焦虑。&lt;/p&gt;&#xA;&lt;p&gt;能从节选片段中感受到川端康成的语言特点：细腻、情感丰富，善于用各种细节和心里描写塑造人物的真实的性格。细腻到像主人公，一个少女站在读者面前，摊开自己的日记，把各种大事小事无一例外地仔细展示给读者，就差亲口朗读了。&lt;/p&gt;&#xA;&lt;p&gt;而在毕业典礼上，菊井老师在逃避后又写下的「祝你幸福」，以及对幸福究竟是什么这个问题的解答更是耐人寻味，解读空间很大。&lt;/p&gt;&#xA;&lt;p&gt;「我不认为幸福是各种各样的。」&lt;/p&gt;&#xA;&lt;p&gt;真正的幸福究竟是什么样的？&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>阴云</title>
      <link>https://blog.verdant.ee/posts/overcast/</link>
      <pubDate>Wed, 20 Aug 2025 17:33:10 +0800</pubDate><author>i@glowisle.me (五葉地錦)</author>
      <guid>https://blog.verdant.ee/posts/overcast/</guid>
      <description>&lt;p&gt;八月变化无常的天气又使大地被一层阴霾笼罩，昨夜刚下了一场暴雨，空气弥漫着潮湿的腥臭。公交车站边有一个老妇领着一个四五岁的小女孩，她背着一个小书包。那老妇是她的奶奶。&lt;/p&gt;&#xA;&lt;p&gt;小女孩生性活泼好动，总是说个不停，跑个不停。她的书包上挂着一个金色吊坠，随着她的脚步一颠一颠的，即使在阴云下也能映出金光。她满怀好奇心地对这个世界角落的细节发问，燃起求知的欲火，被奶奶敷衍的回应无情浇灭，我看到一缕黑烟从那小女孩头上飘走了。&lt;/p&gt;&#xA;&lt;p&gt;我和她们在等的是同一路车。那两人坐在靠前的座位上，我正前方是一对母子，那人背着一个大包，不能直直坐在狭窄的座位里，只好斜靠在母亲的肩头。可能是出于疲惫，不久就睡去了。站在车门口的一群中年大妈七嘴八舌地谈论着好像是邻居的人物。&lt;/p&gt;&#xA;&lt;p&gt;过了一站，又一个老妇领着一个小男孩上车了，二人坐在我旁边的一列座位上。那小男孩约莫七八岁，上身穿着印有队名的足球队服，下身穿着短裤和长筒球袜，没有穿球鞋，是一双运动鞋。他身上流露着这一带的足球小子特有的野气。&lt;/p&gt;&#xA;&lt;p&gt;他一坐下来就吵嚷不停，不停地在座位上扭动。结结巴巴地，用跌宕起伏得如驼峰一样的语调，和家长无礼地争论以前到底有没有来过这里，卖弄着自己的个性。声音大到全车人都听得清清楚楚。&lt;/p&gt;&#xA;&lt;p&gt;「你自己看&amp;hellip;不不就&amp;hellip;知..知道了吗！」&lt;/p&gt;&#xA;&lt;p&gt;「你看吧，我就&amp;hellip;就说&amp;hellip;来&amp;hellip;来过呢！」&lt;/p&gt;&#xA;&lt;p&gt;他们两个人坐的座位，上一任主人是一对情侣，腻腻歪歪了几站就下车了。前面那人把脸深深埋进他母亲的怀中。我望着窗外，看着阴云下飞奔而过的楼房。车走走停停，人进进出出。下一站，就到目的地了吧，我想。&lt;/p&gt;&#xA;&lt;p&gt;我独自一人下了车，回头一望，那书包上吊坠反射的金光已模糊在迷乱的车流中了。&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>别吵了，大家一样烂</title>
      <link>https://blog.verdant.ee/posts/we-are-all-bull-shit/</link>
      <pubDate>Sun, 17 Aug 2025 14:54:06 +0800</pubDate><author>i@glowisle.me (五葉地錦)</author>
      <guid>https://blog.verdant.ee/posts/we-are-all-bull-shit/</guid>
      <description>&lt;p&gt;突然想起来之前刷到过的一张图，是一个看起来就&lt;strong&gt;和蔼可亲的&lt;/strong&gt;黄豆摊手，配文：「别吵了，大家一样烂」，手里是一圈国内主流的娱乐软件图标。大概有百度贴吧、B站、知乎、豆瓣、小红书等。&lt;/p&gt;&#xA;&lt;p&gt;不得不承认，大家确实烂，但各有各的程度和地方。就在前几个小时我还说，等我B站六级了就卸载。很快了。&lt;/p&gt;&#xA;&lt;p&gt;&lt;figure class=&#34;image-caption&#34;&gt;&#xA;    &lt;img src=&#34;https://images.glowisle.me/bilibili-exp.webp&#34; alt=&#34;&#34;&gt;&#xA;    &lt;figcaption&gt;&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;b站&#34;&gt;B站&lt;/h2&gt;&#xA;&lt;p&gt;至于为什么我有这个想法，现在还在用B站的人应该都知道，B站和妓院的唯一区别就是，你不能花钱买到肉体寻欢。但是你可以花钱买到擦边UP主的视频，并用以意淫。晚上她们就出没了。&lt;/p&gt;&#xA;&lt;p&gt;有些B站用户会有一种莫名的优越感，尤其是在一些刚刚从抖音、快手这种平台转到B站的，你可以见到他们一些二级号，说出「抵制B站快手化」此类的展现人类智商情商判断力下限的&lt;strong&gt;皈依者狂热&lt;/strong&gt;现象。这是一种寻求群体认同感所作出的举动。他们认为看B站，就比看短视频优越。大家都是在娱乐，况且真正的优质长视频UP主有几个有热度？大家还不都是点开那个短视频的按钮一直在刷？还是尽早找点事做，不要妄想用个软件就能走上人生巅峰了。&lt;/p&gt;&#xA;&lt;p&gt;但回归到标题：&lt;strong&gt;大家都一样烂&lt;/strong&gt;。&lt;/p&gt;&#xA;&lt;p&gt;我认为B站之所以烂，是因为有上文描述的幽默行为。这是评论区中的，弹幕更是看得想让人用头撞墙，比如书名号、并非、「相信咱妈」等，还有「有人吗」、「某年某月某日某时某分有人吗」、「跟我一起看的人举个手」。那个显示几个人在同时看的功能简直是这种弱智的温床。童厕名不虚传。&lt;/p&gt;&#xA;&lt;p&gt;话说回来，B站确实有不少优质的UP主，但比起用碎片时间学碎片知识，不如静下心来读一本书、一篇文章，或看一部电影。我没有在否定B站知识区优质长视频的价值，但要清楚，频繁的信息切换会阻断思维流，长时间积累就会导致无法深度思考。很多视频只是告诉了观众：「是什么」，而不探究「为什么」，中间很大一部分内容都被省略、简化、剔除了。这也是很多情况下，人们看问题只浮于现象、无脑开喷的原因之一。如果目标是深度研习，在B站找大课看会比所谓的科普短视频有益的多，当然，如果的目标是快速扫盲，看科普短视频无可厚非，问题的重点在于&lt;strong&gt;结合实际&lt;/strong&gt;。&lt;/p&gt;&#xA;&lt;h2 id=&#34;知乎&#34;&gt;知乎&lt;/h2&gt;&#xA;&lt;p&gt;最近我的新宠是知乎，谈起为什么我喜欢知乎，是因为它能满足我的好奇心，看文字比看视频省力一些。在一些离谱的问题下，会有短小精悍的回怼，比较有意思，在一个问题下，大家讨论的集中度和强度也很高，信息密度大。&lt;/p&gt;&#xA;&lt;p&gt;但知乎确实烂，盐选的垃圾小故事总是披着回答的外衣恶心人。不过除此之外，没感觉到环境多恶劣，都在友善的阴阳怪气。&lt;/p&gt;&#xA;&lt;h2 id=&#34;豆瓣&#34;&gt;豆瓣&lt;/h2&gt;&#xA;&lt;p&gt;我身边的一位朋友听说我刷豆瓣，非常震惊，他一向认为豆瓣和小红书是一个性质，是女拳大本营。在我这里就大错特错了，我可以放一张我豆瓣首页的截图证明。&lt;/p&gt;&#xA;&lt;details&gt;&#xA;&lt;summary&gt;展开&lt;/summary&gt;&#xA;&lt;img src=&#34;https://images.glowisle.me/douban.jpg&#34;&gt;&#xA;&lt;/details&gt;&#xA;&lt;p&gt;除了读书就是广告，没有见到过什么女拳或者吵架，环境非常好。可能是因为我一直拿它来看书评。虽然我有点讨厌我的班主任，但还是要举一个她曾经说过的例子。&lt;/p&gt;&#xA;&lt;p&gt;我们学校对行为规范的管控特别严格，谈恋爱这种事情更是不要想，她带过一个学生，之前跟他交谈中，他一直认为学校里谈恋爱的人非常多，满操场都是情侣。&lt;/p&gt;&#xA;&lt;p&gt;后来他受到那些所谓情侣的影响，也和班里一个女同学好上了，被班主任抓住，及时熄灭了火苗，但最后他还是坚称：「们学校谈恋爱的真的特别多！」&lt;/p&gt;&#xA;&lt;p&gt;其实本质上就是他个人想谈恋爱，才会去注意那些情侣。就像一个悲观的人，看夕阳都能觉得那是太阳的尸体，所以自己心里想得东西占比大。这在软件的个性化推荐里体现的就更淋漓尽致了。我的一位同学，对历史和时治有兴趣浓厚，尤其是中国现代史，尤其是「文化大革命时期」的历史。不过具体细节，应该是一问三不知的，他只是痴迷于国家对此言论管控严格，自己却用各种意象指代，那种微妙的刺激的叛逆快感，我愿意称之为&lt;strong&gt;政治露阴癖&lt;/strong&gt;。他经常给我转发一些时政历史之类的短视频，我呢，佩服他的分享欲、求知欲，但对这种狗屁话题根本不感兴趣，也不方便骂他，只好承受狂轰乱炸。&lt;/p&gt;&#xA;&lt;p&gt;从他给我转发的视频和他的言论看，应该是认为马上第三次世界大战就要开始了&amp;hellip;&amp;hellip;他非常热衷于发表各类偏激评论，却又自以为有主见、学识渊博，很喜欢一些宏大的议题，如民族、政府、国家等。在他经常聊天的那个群里，几个人都凑不出一份入团申请书，他在里面义愤填膺，慷慨激昂地批判国内外各大事，有趣。有网友调侃这类人：「暑假结束后，国际共运就要陷入低谷。」岂是精辟二字了得。&lt;/p&gt;&#xA;&lt;p&gt;正如刚刚举的例子，他就喜欢看时政历史，软件一直给他推送，又碰巧国外不太平，总以为要打仗，这两个例就很好的说明了，想成为什么，就会看到什么；越希望什么，就越会看到什么。&lt;/p&gt;&#xA;&lt;p&gt;大家一样烂，但这不全是平台的问题，一直抱怨平台环境差，多少是因为自己没有进入环境好的圈子，理解了这个概念，所有的平台只是交流的载体和形式的区别了。&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>夏日残影</title>
      <link>https://blog.verdant.ee/posts/%E5%A4%8F%E6%97%A5%E6%AE%8B%E5%BD%B1/</link>
      <pubDate>Thu, 14 Aug 2025 11:04:30 +0800</pubDate><author>i@glowisle.me (五葉地錦)</author>
      <guid>https://blog.verdant.ee/posts/%E5%A4%8F%E6%97%A5%E6%AE%8B%E5%BD%B1/</guid>
      <description>&lt;h2 id=&#34;一&#34;&gt;一&lt;/h2&gt;&#xA;&lt;p&gt;“请各位勇士们扣好胸前的安全带。”&lt;/p&gt;&#xA;&lt;p&gt;一个甜美的机械女声响起。那是跳楼机开始运行前例行朗读的温馨提示。&lt;/p&gt;&#xA;&lt;p&gt;我从来都对这种游乐园没兴趣，但还是被硬拉来了。我当然不会花钱，冒着危险体验所谓的刺激感。&lt;/p&gt;&#xA;&lt;p&gt;我们在一个静僻的拐角，弟弟被挖掘机铲土的项目吸引住了。八月醉人的阳光和聒噪的蝉鸣把周围一切事物都裹挟起来了，有时其他游乐项目的方向传来的尖叫刺痛着颅骨。我趴在租赁来的观光车上，望着眼前摆动的树影。&lt;/p&gt;&#xA;&lt;p&gt;透过树影，看到了一条河，那条弯弯的波光粼粼的水道两边只有两排木栏杆，上面贴着“禁止攀爬”的告示。我向来都一个怕水、怕河、怕海，所以和河湖海有关的旅游提议都被我坚决反对了。&lt;/p&gt;&#xA;&lt;p&gt;对于一个不会游泳的人来说，生与死之间隔着的，就是这一栏崎岖的木头吧？如果那个人站在了那栏杆旁，生与死就在一念之间吧？那一排木栅栏就是这一念幻化的实体吧？&lt;/p&gt;&#xA;&lt;p&gt;我感觉花钱体验濒死快感和溺在刺眼的阳光普照的，温暖的河水里区别并不大。但我再怎么争辩，在勇士眼中，也都是胆小者的狡辩了。我看到那澄澈的水面下有一条红鲤鱼。&lt;/p&gt;&#xA;&lt;p&gt;想得出神，被一阵化学试剂的刺鼻味道拉了回来，转头一看是母亲在往自己脸部喷不知道是什么东西。&lt;/p&gt;&#xA;&lt;p&gt;母亲的心情一直很高涨，她一直元气满满地对待每一件事，可能是因为有期待吧，她期待晚上九点钟开始的烟花表演。可以说，我们这次来，就是为了看烟花。&lt;/p&gt;&#xA;&lt;p&gt;母亲的情绪越高涨，我心头那一根根稻草就越发沉重。为了防晒，她捂得严严实实。墨镜帽子黑口罩，活脱脱一个女明星上街的阵仗。&lt;/p&gt;&#xA;&lt;p&gt;防晒措施越完备，我体内灌的铅就越多。我无法通过她的表情，揣测当前的局势究竟怎样。恐惧来源于未知，但我已经不怎么怕了。&lt;/p&gt;&#xA;&lt;p&gt;很长时间没见到弟弟，父母在暑假刚开始把他送到农村的姥姥家了，我渡过了安静、平和、美好的一个半月。今天就把他接回家了，图书馆是个逃避的好去处，如果弟弟一定要在家的话。&lt;/p&gt;&#xA;&lt;p&gt;他终于玩腻了那堆土，我终于不用被囚禁在影子里享受游客的尖叫声了。&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;二&#34;&gt;二&lt;/h2&gt;&#xA;&lt;p&gt;升空、翻腾，闪耀着。炽热的烟花冲破黑夜的阴冷和浮躁，飞上高空。&lt;/p&gt;&#xA;&lt;p&gt;但那都不是烟花最美的时候。烟花最美，最为人赞叹的那一瞬，一定是爆裂开来的那一瞬，随即就像欧律狄刻一样，湮灭在寂冷的夜空中了。&lt;/p&gt;&#xA;&lt;p&gt;舞台中央喷射出的八九道火舌贪婪地舔舐着上方烟花残余的硝烟，一股令人窒息的热浪扑面袭来。&lt;/p&gt;&#xA;&lt;p&gt;母亲很尽兴，带着满相册的照片上了回家的车，我也很尽兴。&lt;/p&gt;&#xA;&lt;p&gt;快到家时，后脖上突然传来一阵瘙痒。一抓，竟是一股树叶般的触感——软绵绵无力，又毛茸茸的触感，似乎要被团成一个球了。拿到眼前一看，是一只半死的蛾子，它右边的翅膀折断了，是乱飞，撞到我脖子上的吧。随手一丢，掉在挡把下了，被父亲来回挂挡折磨得奄奄一息。&lt;/p&gt;&#xA;&lt;p&gt;下了车，拿好东西准备上楼。我落脚太快，被咯了一下，正顾及脚趾传来的阵阵剧痛时，发现脚边有一个黑色的小身影。那是一只鸟。&lt;/p&gt;&#xA;&lt;p&gt;它立在楼梯的栏杆下边，还睁着眼。见人不跑，我断定它是死了，母亲呵斥我不许动“人家”，我当然没有那么缺德，只是看看。等父亲走上来了，我跟他说了这件事，他用脚碰了一下那只鸟，翅膀挣扎着扇动了一下，但没有飞走。&lt;/p&gt;&#xA;&lt;p&gt;楼道里昏暗的灯光一个劲儿地倾洒在这只鸟的身体，一片潦草的羽毛插在背上清晰可见。在那惨白灯光映衬下的无神的双眼更显呆滞和诡异，我又想起车上的那只蛾子。&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>秋天的第一声狗叫</title>
      <link>https://blog.verdant.ee/posts/%E7%A7%8B%E5%A4%A9%E7%9A%84%E7%AC%AC%E4%B8%80%E5%A3%B0%E7%8B%97%E5%8F%AB/</link>
      <pubDate>Mon, 11 Aug 2025 10:46:13 +0800</pubDate><author>i@glowisle.me (五葉地錦)</author>
      <guid>https://blog.verdant.ee/posts/%E7%A7%8B%E5%A4%A9%E7%9A%84%E7%AC%AC%E4%B8%80%E5%A3%B0%E7%8B%97%E5%8F%AB/</guid>
      <description>&lt;p&gt;老家很多人都养狗，几乎每家每户都有一两条狗。&lt;/p&gt;&#xA;&lt;p&gt;二零年的八月，不知道村口那条老黑狗发了什么癫，流着腥臭的口水就大叫起来，惹得人不安生。村里的老人们都说这叫狂犬病犯了。我还以为狗也染上新冠了。&lt;/p&gt;&#xA;&lt;p&gt;它这一叫，不仅惹得人不安生，惹得村里那群狗也不安生。家家的狗，无论大狗还是刚出生的小狗，听见这几嗓子嚎，自己也按捺不住了，扯着嗓子嚎叫。它们关在笼子里，锁在屋子里，哪知道外头这声叫有什么意思。毕竟是狗，有人的脑子，狗就该建立文明了，它们只会跟着叫。&lt;/p&gt;&#xA;&lt;p&gt;可能是出于动物骨子里对环境变化的敏感，村口的那条狗叫了。那其他的狗子是出于什么呢？&lt;/p&gt;&#xA;&lt;p&gt;之后的四年，每年它们都在八九月份发一次癫。这场群体性的癫狂，是什么引起的；狗叫声意味着什么，没有人知道。那群狗也不在意自己为什么叫，只要听到别的狗叫，自己也叫，就满足了。&lt;/p&gt;&#xA;&lt;p&gt;今年七号，狗子们又沸腾起来举行它们的“仪式”了。&lt;/p&gt;</description>
    </item>
    <item>
      <title>未命名</title>
      <link>https://blog.verdant.ee/posts/%E6%9C%AA%E5%91%BD%E5%90%8D/</link>
      <pubDate>Fri, 08 Aug 2025 15:36:41 +0800</pubDate><author>i@glowisle.me (五葉地錦)</author>
      <guid>https://blog.verdant.ee/posts/%E6%9C%AA%E5%91%BD%E5%90%8D/</guid>
      <description>&lt;p&gt;在家太闲，穿着一双比自己脚大的拖鞋，在两个屋子间踱步，想走到窗台边欣赏外面的云时，瞥见父母的结婚照。&lt;/p&gt;&#xA;&lt;p&gt;那张巨大的照片垂挂在床头正中间，仔细一看，歪了。这很危险，尤其平常睡在床中间的一般是一个不到五岁的儿童——我的弟弟，发消息通知家人照片歪了后，我踩上床仔细端详这张照片。&lt;/p&gt;&#xA;&lt;p&gt;小时候我一直非常害怕这张照片，尤其是之中的母亲，那邪魅的紫色眼影与眯成一条缝的眼，和夸张的惨白脸色互相映衬，展现出那代人低劣却朴实的修图水平之外，又添了不少令人毛骨悚然的气氛。有一段时间，这张大照片被拿下来，倒摆着靠在墙上，至于为什么又挂起来，已经不记得了，挂起来很长时间了。&lt;/p&gt;&#xA;&lt;p&gt;如今我又仔细观察起这张令我半夜做噩梦的照片，妆容诡异依旧。父母那时非常年轻，即使窗外透进的阴雨天独有的凄蓝色调的光影打在他们脸上，也丝毫不挡青春的男女散射出闪耀着金黄色的生气与活力。&lt;/p&gt;&#xA;&lt;p&gt;这真的是我的父母吗？我不由得想。&lt;/p&gt;&#xA;&lt;p&gt;父亲如今耳朵逐渐不好使，经常独自坐在客厅的桌子前吸烟，用了十几年的玻璃烟灰缸一次又一次盛满烟头。与之相呼应的，是他紧皱的眉头和深沉的目光。他到底在想什么？但每每和他交谈，就会收敛起那副令人一起沮丧的表情。&lt;/p&gt;&#xA;&lt;p&gt;照片中母亲的笑容，是我至今见过最真切、发自心底的、灿烂的笑容。父亲伸出布满青筋的手在身后环搂着母亲。母亲一头干练的短发下，是一对纯洁、闪着光的眸子。呲着与她灵魂同样洁白的两排牙，真切地笑着。很久不见母亲笑得如此幸福。&lt;/p&gt;&#xA;&lt;p&gt;虽然修图技术低劣，但照片中飘逸的、喷薄、溢出的幸福是最可贵且高洁的。&lt;/p&gt;&#xA;&lt;p&gt;如今我仍然害怕着这张照片。它太真了，伸手好像能触摸到父亲脸颊的温度，能触摸到母亲洁白如雪的肌肤，能感受到洋溢在空气中的幸福与爱。&lt;/p&gt;&#xA;&lt;p&gt;它又太假了，如今我只能看到熟悉又陌生的，养育我十余年的父母的沧桑。&lt;/p&gt;&#xA;&lt;p&gt;照片中的两个人真的是我的父母吗？&lt;/p&gt;</description>
    </item>
    <item>
      <title>最膈应不爱惜书的人</title>
      <link>https://blog.verdant.ee/posts/%E6%9C%80%E8%86%88%E5%BA%94%E4%B8%8D%E7%88%B1%E6%83%9C%E4%B9%A6%E7%9A%84%E4%BA%BA/</link>
      <pubDate>Wed, 06 Aug 2025 22:50:55 +0800</pubDate><author>i@glowisle.me (五葉地錦)</author>
      <guid>https://blog.verdant.ee/posts/%E6%9C%80%E8%86%88%E5%BA%94%E4%B8%8D%E7%88%B1%E6%83%9C%E4%B9%A6%E7%9A%84%E4%BA%BA/</guid>
      <description>&lt;p&gt;我最受不了的事之一就是我的书是别人看剩下的。&lt;/p&gt;&#xA;&lt;p&gt;&lt;figure class=&#34;image-caption&#34;&gt;&#xA;    &lt;img src=&#34;https://images.glowisle.me/zui-ge-ying-bu-ai-xi-shu-de-ren-0.webp&#34; alt=&#34;0&#34;&gt;&#xA;    &lt;figcaption&gt;0&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&lt;/p&gt;&#xA;&lt;p&gt;京东上买了一本书，十几块钱。真是贪图便宜了。一拿到手，看到顶部的塑封是开口的，我就有种不详的预感。&lt;/p&gt;&#xA;&lt;p&gt;我有一个习惯是读书的时候把封皮拿掉，方便携带，手感也好，更不用提文库本这种装帧，主要就是方便携带。但是我发现了：&lt;/p&gt;&#xA;&lt;p&gt;&lt;figure class=&#34;image-caption&#34;&gt;&#xA;    &lt;img src=&#34;https://images.glowisle.me/zui-ge-ying-bu-ai-xi-shu-de-ren-1.webp&#34; alt=&#34;&#34;&gt;&#xA;    &lt;figcaption&gt;&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&lt;/p&gt;&#xA;&lt;p&gt;上一个&lt;strong&gt;蠢货&lt;/strong&gt;竟然企图用胶棒把封皮粘在书脊上。&lt;/p&gt;&#xA;&lt;p&gt;看吧，反正我是来看书，又不是藏书。我看到了：&lt;/p&gt;&#xA;&lt;p&gt;&lt;figure class=&#34;image-caption&#34;&gt;&#xA;    &lt;img src=&#34;https://images.glowisle.me/zui-ge-ying-bu-ai-xi-shu-de-ren-2.webp&#34; alt=&#34;&#34;&gt;&#xA;    &lt;figcaption&gt;&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&lt;/p&gt;&#xA;&lt;p&gt;塑封被拆，我忍了；书脊被粘，我忍了；书是二手的，我忍了；可是正文里有笔迹，我忍不了。马上拿起手机，打开京东给店铺扣了百字差评，发新书很难吗？检查一下书的状态很难吗？为什么我要花新书的钱买别人看剩下的？真当这里是日本了，文库本看完就卖？对于上一个买家，爱惜书很难吗，最起码正常人不会用胶棒去粘封皮，还失败了吧？&lt;/p&gt;&#xA;&lt;p&gt;十几块钱的东西，难道我还要花时间和钱退换吗？把这本书退回去，这个店家指不定又发回去给谁了。&lt;/p&gt;&#xA;&lt;p&gt;为什么我这么气愤，因为我还买了两本书，是在另一个店铺。&lt;/p&gt;&#xA;&lt;p&gt;&lt;figure class=&#34;image-caption&#34;&gt;&#xA;    &lt;img src=&#34;https://images.glowisle.me/zui-ge-ying-bu-ai-xi-shu-de-ren-3.webp&#34; alt=&#34;3&#34;&gt;&#xA;    &lt;figcaption&gt;3&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;figure class=&#34;image-caption&#34;&gt;&#xA;    &lt;img src=&#34;https://images.glowisle.me/zui-ge-ying-bu-ai-xi-shu-de-ren-3.webp&#34; alt=&#34;4&#34;&gt;&#xA;    &lt;figcaption&gt;4&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&lt;/p&gt;&#xA;&lt;p&gt;什么东西我都能接受买到人退掉的，买二手的，唯独书不行，非常恶心！&lt;/p&gt;&#xA;&lt;p&gt;最膈应二手书！&lt;/p&gt;&#xA;&lt;p&gt;最膈应买到这种不爱惜书的人退掉的书！&lt;/p&gt;&#xA;&lt;p&gt;最膈应不爱惜书的人！&lt;/p&gt;</description>
    </item>
    <item>
      <title>别闲着没事自搜，黑历史啊</title>
      <link>https://blog.verdant.ee/posts/%E5%88%AB%E9%97%B2%E7%9D%80%E6%B2%A1%E4%BA%8B%E8%87%AA%E6%90%9C%E9%BB%91%E5%8E%86%E5%8F%B2%E5%95%8A/</link>
      <pubDate>Wed, 06 Aug 2025 10:07:38 +0800</pubDate><author>i@glowisle.me (五葉地錦)</author>
      <guid>https://blog.verdant.ee/posts/%E5%88%AB%E9%97%B2%E7%9D%80%E6%B2%A1%E4%BA%8B%E8%87%AA%E6%90%9C%E9%BB%91%E5%8E%86%E5%8F%B2%E5%95%8A/</guid>
      <description>&lt;h3 id=&#34;在bing自搜&#34;&gt;在Bing自搜&lt;/h3&gt;&#xA;&lt;p&gt;今天实在是太闲了，在bing搜了一下我自己的id，结果看到了早期刚建站时的各种黑历史。搜索引擎的缓存还没有消失，已经快一年了。甚至连最早用的第一个域名都挂在上面，但是那个域名现在已经易主了，现在是一个卖赌博机器的网站。估计站长看到有一个很蠢的中文页面还被搜索引擎收录也是很困惑。&lt;/p&gt;&#xA;&lt;p&gt;这么说来，我这一年的成长倒是挺多，证据就是看到这些东西就像看到自己四五年前发的朋友圈和QQ空间一样羞耻。可是前者能删，但搜索引擎也不是我家开的，只能保证不要经常更换域名和永久链接格式，等着搜索引擎自己移除了，以前分享自己Vim的配置，甚至传网盘，现在都想穿越回去给自己一巴掌。&lt;/p&gt;&#xA;&lt;h3 id=&#34;在bilibili自搜&#34;&gt;在BiliBili自搜&lt;/h3&gt;&#xA;&lt;p&gt;&lt;figure class=&#34;image-caption&#34;&gt;&#xA;    &lt;img src=&#34;https://images.glowisle.me/bilibili.webp&#34; alt=&#34;BiliBili&#34;&gt;&#xA;    &lt;figcaption&gt;BiliBili&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&lt;/p&gt;&#xA;&lt;p&gt;我能说什么，我只能呵呵呵。一群娼妓已经把这个网站占领了。在我关闭个性化推荐之前，满屏幕都是赛博妓女。乐器视频底下出奇多。但它们不如妓女，只要坐在镜头前，甚至不开摄像头，就会有人给这种人送钱，妓女起码付出了身体换取钱财，这种人就是典型的不劳而获。用赛博妓女这个词称呼都算侮辱了妓女。&lt;/p&gt;&#xA;&lt;h3 id=&#34;在google自搜&#34;&gt;在Google自搜&lt;/h3&gt;&#xA;&lt;p&gt;&lt;figure class=&#34;image-caption&#34;&gt;&#xA;    &lt;img src=&#34;https://images.glowisle.me/google.webp&#34; alt=&#34;Google&#34;&gt;&#xA;    &lt;figcaption&gt;Google&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&lt;/p&gt;&#xA;&lt;p&gt;比Bing收录的内容及时多了，起码不会到黑历史的程度。不过确确实实有一个真正意义上的黑历史，我承认当时的言论过于激进和轻浮了。但我会保持对跨性别群体的看法。&lt;/p&gt;&#xA;&lt;h3 id=&#34;在百度自搜&#34;&gt;在百度自搜&lt;/h3&gt;&#xA;&lt;p&gt;&lt;figure class=&#34;image-caption&#34;&gt;&#xA;    &lt;img src=&#34;https://images.glowisle.me/baidu.webp&#34; alt=&#34;Baidu&#34;&gt;&#xA;    &lt;figcaption&gt;Baidu&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&lt;/p&gt;&#xA;&lt;p&gt;很遗憾，只有指定&lt;code&gt;site:www.yingyu5658.me&lt;/code&gt;才能看到我的站点。&lt;/p&gt;&#xA;&lt;p&gt;&lt;figure class=&#34;image-caption&#34;&gt;&#xA;    &lt;img src=&#34;https://images.glowisle.me/baidu-2.webp&#34; alt=&#34;Baidu-2&#34;&gt;&#xA;    &lt;figcaption&gt;Baidu-2&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;在360自搜&#34;&gt;在360自搜&lt;/h3&gt;&#xA;&lt;p&gt;&lt;figure class=&#34;image-caption&#34;&gt;&#xA;    &lt;img src=&#34;https://images.glowisle.me/360.webp&#34; alt=&#34;360&#34;&gt;&#xA;    &lt;figcaption&gt;360&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&lt;/p&gt;&#xA;&lt;p&gt;搜&lt;code&gt;yingyu5658&lt;/code&gt;没有什么结果，但&lt;code&gt;映屿&lt;/code&gt;的权重甚至比那几个卖房的网页还高，在Bing上不是这样的。&lt;/p&gt;&#xA;&lt;h3 id=&#34;在yandex自搜&#34;&gt;在Yandex自搜&lt;/h3&gt;&#xA;&lt;p&gt;&lt;figure class=&#34;image-caption&#34;&gt;&#xA;    &lt;img src=&#34;https://images.glowisle.me/yandex.webp&#34; alt=&#34;Yandex&#34;&gt;&#xA;    &lt;figcaption&gt;Yandex&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&lt;/p&gt;&#xA;&lt;p&gt;Github页面比较靠前，前一阵子在Bing上几乎搜不到&lt;code&gt;yingyu5658.me&lt;/code&gt;这个域名，结果都是Github Pages。&lt;/p&gt;&#xA;&lt;p&gt;看似自搜，实际上是检测各大搜索引擎对自己网站的收录情况，现在国人用的最多的搜索引擎应该是Bing吧，对个人站算是比较友好了，甚至一年前的链接都不下，可能和我之前弃用服务器、更换域名的处理手法有关，但那时候真是什么都不懂，虽然现在也是。&lt;/p&gt;&#xA;&lt;p&gt;还有一些不知名的小网站收录了我以前写的技术文章，不过也都是老链接，hexo的链接。&lt;/p&gt;</description>
    </item>
    <item>
      <title>早睡早起的优点</title>
      <link>https://blog.verdant.ee/posts/%E6%97%A9%E7%9D%A1%E6%97%A9%E8%B5%B7%E7%9A%84%E4%BC%98%E7%82%B9/</link>
      <pubDate>Mon, 04 Aug 2025 08:52:02 +0800</pubDate><author>i@glowisle.me (五葉地錦)</author>
      <guid>https://blog.verdant.ee/posts/%E6%97%A9%E7%9D%A1%E6%97%A9%E8%B5%B7%E7%9A%84%E4%BC%98%E7%82%B9/</guid>
      <description>&lt;p&gt;&lt;strong&gt;浪费时间&lt;/strong&gt;。&lt;/p&gt;&#xA;&lt;p&gt;是的，早睡早起的优点就是可以让我更舒坦、安心地浪费时间。昨天晚上十点十分就睡了，定了一个七点钟的闹钟，准时响，准时起，分毫不差。&lt;/p&gt;&#xA;&lt;p&gt;醒来后十分钟以内比三点睡十二点起的的不同点就是非常清醒，没有那种昏昏沉沉的感觉。当然，这十分钟，我都在看手机，看着和我没多大关系的群，看着没有人@我的群。&lt;/p&gt;&#xA;&lt;p&gt;知乎上的回答有了回复，这个和我关系比较大。是昨天宣传新闻组的回复。从床上下来，打开电脑，在电脑开机时，日常显示出问题的时候，打开收手机，刷刷知乎，并提问考虑要不要换到Debian，起码稳定。&lt;/p&gt;&#xA;&lt;p&gt;在日常打开tty手动重启gdm后，终于可以正常登陆图形界面，打开Thunderbird看了一眼新闻组的消息，多了好几个人的帖子，其中还有一直活跃的老面孔的回复，一片蒸蒸日上的景象。截图发到那个和我没多大关系的群，感叹氛围不错，疑似是互联网现存的为数不多的，沟通建立在互相尊重的基础上的讨论平台，只是因为人少。三个小时后，这个群依然和我没关系，大家各聊各的。又打开粉色视频软件，看大家争吵print和cout到底哪个快、为什么Linux内核开发宁愿加入Rust也不让C++进入。&lt;/p&gt;&#xA;&lt;p&gt;在手机玩腻了后，我又抱起平板，在厕所里浪费了四十分钟。这就是早起床的好处。占着不拉，低头看电子产品也比舒舒服服在床上看书有吸引力。直到我出来，写这行字的时候，才九点出头七分钟。放在平常做完这一套活后，已经快吃中午饭了，虽然我不会吃中午饭。早睡早起后，时间很漫长。&lt;/p&gt;&#xA;&lt;p&gt;我还是会坚持健康作息的，我不想再让珍贵的八月像蝉一样短命了，毕竟我还要浪费，有大把的青春年华等待我去浪费。&lt;/p&gt;&#xA;&lt;p&gt;前天熬到六点多，撑不住睡了三个小时，为了昨天晚上可以在十点钟就上床，把时差掰回来。终于回国了，我现在是中国人，不再过黑白颠倒的生活了。&lt;/p&gt;&#xA;&lt;p&gt;黑白颠倒也不错，我更极端，因为觉得白天睡觉浪费时间，索性就不睡。从直立猿跨物种变成了熊猫，记忆力还不如熊猫，精神还不如猫。&lt;/p&gt;&#xA;&lt;p&gt;上次熬夜的记录是四点，那时七月，四点天就蒙蒙亮了，这次在五点才有差不多的亮度，可见夏日的生命力正在衰退，逐渐滑向死亡。&lt;/p&gt;&#xA;&lt;p&gt;最近正在考虑写一个Android上的新闻组客户端，NNTP协议看起来并不难，做到基础的通信，不会耗费太大功夫。但我不熟悉Android开发。只能尝试用Web套壳写了，比起HTML, CSS, JavaScript，我宁愿去写C。为什么C语言不能直接在Android上运行？哦，可以用Termux，好主意。我会让我内存泄漏得遍地都是的程序污染每一个人的设备的。&lt;/p&gt;</description>
    </item>
    <item>
      <title>从编译原理到物理原理剖析程序的编译与执行</title>
      <link>https://blog.verdant.ee/posts/%E4%BB%8E%E7%BC%96%E8%AF%91%E5%8E%9F%E7%90%86%E5%88%B0%E7%89%A9%E7%90%86%E5%8E%9F%E7%90%86%E5%89%96%E6%9E%90%E7%A8%8B%E5%BA%8F%E7%9A%84%E7%BC%96%E8%AF%91%E4%B8%8E%E6%89%A7%E8%A1%8C/</link>
      <pubDate>Tue, 29 Jul 2025 15:55:14 +0800</pubDate><author>i@glowisle.me (五葉地錦)</author>
      <guid>https://blog.verdant.ee/posts/%E4%BB%8E%E7%BC%96%E8%AF%91%E5%8E%9F%E7%90%86%E5%88%B0%E7%89%A9%E7%90%86%E5%8E%9F%E7%90%86%E5%89%96%E6%9E%90%E7%A8%8B%E5%BA%8F%E7%9A%84%E7%BC%96%E8%AF%91%E4%B8%8E%E6%89%A7%E8%A1%8C/</guid>
      <description>&lt;h2 id=&#34;编译过程&#34;&gt;编译过程&lt;/h2&gt;&#xA;&lt;p&gt;以C语言为例，编译成可执行文件一共要经历：&lt;strong&gt;预处理=&amp;gt;狭义编译=&amp;gt;汇编=&amp;gt;链接&lt;/strong&gt;，最终成为可执行文件。&lt;/p&gt;&#xA;&lt;h3 id=&#34;预处理&#34;&gt;预处理&lt;/h3&gt;&#xA;&lt;p&gt;输入源代码文件以及其包含的头文件，由预处理器执行展开宏定义、处理，条件编译指令、将包含的头文件直接插入到指令位置，删除注释。&lt;/p&gt;&#xA;&lt;p&gt;输出纯净的、宏已展开、注释已删除、头文件已包含的中间代码文件，通常为&lt;code&gt;.i&lt;/code&gt;。&lt;/p&gt;&#xA;&lt;p&gt;编写一个简单的程序：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-c&#34; data-lang=&#34;c&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e67e80&#34;&gt;#include&lt;/span&gt; &lt;span style=&#34;color:#e67e80;font-style:italic&#34;&gt;&amp;lt;stdio.h&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#e67e80&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e67e80&#34;&gt;#define STRING &amp;#34;Program&amp;#34;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#dbbc7f&#34;&gt;int&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#b2c98f&#34;&gt;main&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;// 打印一些内容&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#b2c98f&#34;&gt;printf&lt;/span&gt;(&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;Hello world!&lt;/span&gt;&lt;span style=&#34;color:#b2c98f&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#b2c98f&#34;&gt;printf&lt;/span&gt;(&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;%s&lt;/span&gt;&lt;span style=&#34;color:#b2c98f&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;&lt;/span&gt;, STRING);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e67e80&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#d699b6&#34;&gt;0&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;使用gcc的&lt;code&gt;-E&lt;/code&gt;选项生成中间代码：&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;gcc exam.c -E -o ./exam.i&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;他生成了非常长的代码&lt;/p&gt;&#xA;&lt;p&gt;可以验证预处理器是直接把头文件替换进来的。而代码中类似&lt;code&gt;# 5 &amp;quot;exam.c&amp;quot;&lt;/code&gt;的标记用于记录源代码的位置信息，便于调试器和错误诊断程序追踪代码位置。&lt;/p&gt;&#xA;&lt;h3 id=&#34;编译狭义编译&#34;&gt;编译（狭义编译）&lt;/h3&gt;&#xA;&lt;h4 id=&#34;词法分析&#34;&gt;词法分析&lt;/h4&gt;&#xA;&lt;p&gt;输入预处理后的源代码文件，有编译器执行词法分析，将字符流分解成有意义的词素（Token），例如：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-c&#34; data-lang=&#34;c&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#dbbc7f&#34;&gt;int&lt;/span&gt; sum &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; a &lt;span style=&#34;color:#7a8478&#34;&gt;+&lt;/span&gt; b;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;分解成&lt;code&gt;int&lt;/code&gt;, &lt;code&gt;sum&lt;/code&gt;, &lt;code&gt;=&lt;/code&gt;, &lt;code&gt;a&lt;/code&gt;, &lt;code&gt;+&lt;/code&gt;, &lt;code&gt;b&lt;/code&gt;等Token。&lt;/p&gt;&#xA;&lt;h4 id=&#34;语法分析&#34;&gt;语法分析&lt;/h4&gt;&#xA;&lt;p&gt;根据语言的语法规则，将Token序列组合成抽象语法树（Abstract Syntax Tree），简称AST，表达了代码的结构和层次关系。&lt;/p&gt;&#xA;&lt;h4 id=&#34;语义分析&#34;&gt;语义分析&lt;/h4&gt;&#xA;&lt;p&gt;检查程序的语义是否正确，例如变量是否声明、类型是否匹配等。&lt;/p&gt;&#xA;&lt;h4 id=&#34;中间代码生成&#34;&gt;中间代码生成&lt;/h4&gt;&#xA;&lt;p&gt;将AST转换成一种独立于CPU架构的中间表示形式（intermediate Representation），即IR。常见的IR有三地址码、LLVM IR、Java字节码等，为了优化和转移成多种目标机器码。&lt;/p&gt;&#xA;&lt;h4 id=&#34;优化&#34;&gt;优化&lt;/h4&gt;&#xA;&lt;p&gt;对IR进行处理，目的是在不改变程序行为的前提下，提高代码效率。包括：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;常量折叠：如计算&lt;code&gt;3 + 5&lt;/code&gt;为&lt;code&gt;8&lt;/code&gt;。&lt;/li&gt;&#xA;&lt;li&gt;死代码消除：移除永远不会执行到的代码。&lt;/li&gt;&#xA;&lt;li&gt;循环优化：如循环展开。&lt;/li&gt;&#xA;&lt;li&gt;函数内联。&lt;/li&gt;&#xA;&lt;li&gt;寄存器分配：决定哪些变量存储在高速的CPU寄存器中。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;输出优化后的中间代码。&lt;/p&gt;&#xA;&lt;h3 id=&#34;汇编&#34;&gt;汇编&lt;/h3&gt;&#xA;&lt;p&gt;输入IR，或直接由编译器生成的汇编代码。由汇编器&lt;code&gt;as&lt;/code&gt;执行。将汇编指令一对一地转换成特定CPU架构的机器操作指令。处理伪汇编指令，如定义数据段&lt;code&gt;.data&lt;/code&gt;，定义代码段&lt;code&gt;.text&lt;/code&gt;，分配存储空间&lt;code&gt;space&lt;/code&gt;等。最后解析符号、如函数名、变量名等，生成符号表。&lt;/p&gt;&#xA;&lt;p&gt;输出目标文件，如.o，.obj，包含机器指令、全局变量、静态变量的初始值等、符号表、重定位信息。&lt;/p&gt;&#xA;&lt;h3 id=&#34;链接&#34;&gt;链接&lt;/h3&gt;&#xA;&lt;p&gt;输入一个或多个.o文件夹+库文件（静态.a/.lib，动态.so/.dll）。由链接器进行符号解析、重定位、库处理，最输出可执行文件或库文件。&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;cpu如何识别指令&#34;&gt;CPU如何识别指令&lt;/h2&gt;&#xA;&lt;p&gt;CPU执行程序的循环称为Fetch-Decode-Execute Cycle（取指-译码-执行周期）。&lt;/p&gt;&#xA;&lt;h3 id=&#34;取指&#34;&gt;取指&lt;/h3&gt;&#xA;&lt;p&gt;CPU内部有一个寄存器叫程序计数器（Program Counter, PC），它保存着下一条要执行的指令的内存地址，CPU将PC中的地址发送到地址总线，内存控制器根据地址总线上的地址，找到对应的内存单元，将其存储的指令通过数据总线送回CPU。取回来的指令被放入指令寄存器IR。PC的值自动增加，指向下一条指令的地址。&lt;/p&gt;&#xA;&lt;h3 id=&#34;译码指令&#34;&gt;译码指令&lt;/h3&gt;&#xA;&lt;p&gt;CPU的控制单元读取IR中的指令，控制单元包含一指令译码器，译码器分析指令 操作码部分，操作码唯一表示CPU应该执行什么操作，如ADD MOV JMP等。&lt;/p&gt;&#xA;&lt;p&gt;根据操作码，译码器决定：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;操作的性质（算术、逻辑、数据传输、跳转等）。&lt;/li&gt;&#xA;&lt;li&gt;操作需要多少个操作数。&lt;/li&gt;&#xA;&lt;li&gt;操作数存放位置（寄存器、内部地址指令本身中的立即数）&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;译码器激活执行该操作所需要的CPU内部电路通路和控制信号，结果决定了下一个阶段（执行）需要做什么。&lt;/p&gt;&#xA;&lt;h3 id=&#34;执行指令&#34;&gt;执行指令&lt;/h3&gt;&#xA;&lt;p&gt;CPU的算术逻辑单元（Arithmetic Logic Unit, ALU）或去他功能单元（FPU MMU）根据译码器产生的控制信号执行实际操作。&lt;/p&gt;&#xA;&lt;p&gt;操作数可能从寄存器文件中读取，或者从内存中加载，ALU执行加减与或移位等操作，如果指令是JMP/CALL/RET/分支指令等跳转指令，可能会修改PC的值，从而改变下一条指令的位置。计算结果可能写回寄存器，或者通过数据总线写会内存。&lt;/p&gt;&#xA;&lt;p&gt;上述的操作循环以极高的速度（GHz级别）不断重复，构成了CPU运行程序基础。&lt;/p&gt;&#xA;&lt;h2 id=&#34;编译后的指令在物理层面上是什么&#34;&gt;编译后的指令在物理层面上是什么&lt;/h2&gt;&#xA;&lt;p&gt;答：&lt;strong&gt;内存中的电荷状态&lt;/strong&gt;。&lt;/p&gt;&#xA;&lt;p&gt;程序被操作系统加载到计算机的RAM中，RAM由无数的存储单元（通常是电容）组成，每一个单元可以存储一个bit的信息。&lt;/p&gt;&#xA;&lt;p&gt;高电平电荷（通常代表1）或低电平电荷（通常代表0）的状态，就表示一个二进制位。&lt;/p&gt;&#xA;&lt;p&gt;每条指令由多个bit组成。指令序列在RAM中是一系列连续存储单元的电荷状态。当CPU取指令时，PC寄存器的值，也就是一组触发器的电平状态被送到地址总线，也就是一组物理导线。&lt;/p&gt;&#xA;&lt;p&gt;地址总线上的电平信号激活内存控制器和特定的存储单元。&lt;/p&gt;&#xA;&lt;p&gt;被选中的内存单元的电荷状态被读出，转换为相应的电平信号，通过数据总线传回CPU。&lt;/p&gt;&#xA;&lt;p&gt;这些电平信号进入CPU的指令寄存器IR，也是一组触发器的电平状态。&lt;/p&gt;&#xA;&lt;p&gt;一组一组电平状态激活着CPU中的组件，从而执行指令。&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>无蝉鸣夏</title>
      <link>https://blog.verdant.ee/posts/%E6%97%A0%E8%9D%89%E9%B8%A3%E5%A4%8F/</link>
      <pubDate>Tue, 22 Jul 2025 20:56:08 +0800</pubDate><author>i@glowisle.me (五葉地錦)</author>
      <guid>https://blog.verdant.ee/posts/%E6%97%A0%E8%9D%89%E9%B8%A3%E5%A4%8F/</guid>
      <description>&lt;p&gt;学校里的海棠花谢了两次了，老师每次都会带着我们出去拍照。花确实很美，但我每次都恐于留下不堪的回忆，拍照时都远远躲去了。一天又一天地盼着的暑假到来了。十几天像流水奔去。&lt;/p&gt;&#xA;&lt;p&gt;总能见到一种人，每天因逝者如斯夫而悲鸣，在网上。慨叹时间太快，自己太空虚。每天抱着手机刷几个小时视频，看到比自己强的人，继续焦虑地刷视频。到了晚上，按照惯例把自己思维反刍的结果公布在群聊里。神奇的是，这种负能量满满的人，反而更有广阔的社交圈子。我的意思是，有很多喜欢安慰这种人的人。能量实在是高，保持自己的情绪不被影响（待研究）的同时，能去安慰别人。&lt;/p&gt;&#xA;&lt;p&gt;我个人当然是对这种负能量者敬而远之的，但实在是好奇那些安慰者是如何保持冷静和感性和那种人沟通。&lt;/p&gt;&#xA;&lt;p&gt;而有的人又不领这份人情，把别人投来的好心曲解成说教，真为那些安慰者愤怒。当然，他们不会愤怒，因为他们永远能保持冷静和感性。&lt;/p&gt;&#xA;&lt;p&gt;去年的七月二十二日我在想些什么呢？&lt;/p&gt;&#xA;&lt;p&gt;这个暑假格外寂静。蝉都跑去别的树上了，不愿意在我家门口浪费所生不多的生命。虽聒噪，但好歹也是盛夏元素，以前从来都没有对这个季节抱有那么大的关注。以后一定要移居南方，不为别的，起码在读书、画画时经常可以听到真真切切的雨声。耳机戴时间长了对耳朵也不好。&lt;/p&gt;&#xA;&lt;p&gt;父亲之前买来的虫叫了几周就死了，期末考试的作文我还拿他来凑过字数，现在被扔到了哪个垃圾桶、尸体碎成了几段都不知道了。好像是因为断掉一条腿，就不吃不喝，活生生饿死的，至于那条腿是怎么断的，也和尸体的去向形态一样无从得知。&lt;/p&gt;&#xA;&lt;p&gt;一次上课回来，在植被繁茂的小区，树上的蝉好像约定好了在某一时刻突然一起鸣叫，震耳欲聋。我好奇它们在哪，朝树上张望，什么也看不见，只闻蝉鸣震耳欲聋。&lt;/p&gt;&#xA;&lt;p&gt;暑假确实寂静，不闻蝉鸣，也没有狗叫纷扰，关闭朋友圈和QQ空间确实是一个正确的选择，少了焦虑，多了清净，薄如蝉翼的交情在屏蔽对方的那一刻彻底被撕碎了。&lt;/p&gt;&#xA;&lt;p&gt;开学又要回到聒噪的、持续高压的环境，多希望能一直保持这样的状态，不用接触各种类人生物，安静自在地呼吸，初三的放学时间延后到八点半，但愿能活下来。我会怀念一个人坐在房间里，借着阴雨天窗边映下来的蓝冷色调的光读书，听雨打在玻璃上的哒哒声的日子，和带着耳机，听着自己喜欢的歌，坐在公交车最后排，在去图书馆的路上欣赏风景的日子。&lt;/p&gt;&#xA;&lt;p&gt;这种生活和早上六七点背着沉重的书包，拖着疲惫的身体匆匆出门，在拥挤嘈杂的人群中感受冲天的死气和体臭一对比，顿觉窒息。&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>万能必胜沟通法</title>
      <link>https://blog.verdant.ee/posts/%E4%B8%87%E8%83%BD%E5%BF%85%E8%83%9C%E6%B2%9F%E9%80%9A%E6%B3%95/</link>
      <pubDate>Mon, 21 Jul 2025 19:04:43 +0800</pubDate><author>i@glowisle.me (五葉地錦)</author>
      <guid>https://blog.verdant.ee/posts/%E4%B8%87%E8%83%BD%E5%BF%85%E8%83%9C%E6%B2%9F%E9%80%9A%E6%B3%95/</guid>
      <description>&lt;p&gt;我有问题，你指出 ＝ 你在犟嘴。&lt;/p&gt;&#xA;&lt;p&gt;我要输出情绪：你在犟嘴。&lt;/p&gt;&#xA;&lt;p&gt;我不想解决问题 ＝ 你在犟嘴，并且我不理你。&lt;/p&gt;&#xA;&lt;p&gt;精神胜利大法万岁！&lt;/p&gt;&#xA;&lt;p&gt;不容置疑的皇权万岁！！&lt;/p&gt;&#xA;&lt;p&gt;至高无上的皇权万岁！！！&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>基于身边扩列者行为观察的结论</title>
      <link>https://blog.verdant.ee/posts/kuo-lie/</link>
      <pubDate>Sat, 12 Jul 2025 16:13:14 +0800</pubDate><author>i@glowisle.me (五葉地錦)</author>
      <guid>https://blog.verdant.ee/posts/kuo-lie/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;本文描绘的群体画像仅代表个人在社交媒体上所见，尤其是&lt;strong&gt;音游圈&lt;/strong&gt;的行为，不代表所有人。观点包含个人主观推测，谨慎甄别。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;我把朋友圈和QQ空间关闭的原因之一就是有很多扩列的。一直很不解，扩列的意义到底是什么？&lt;/p&gt;&#xA;&lt;p&gt;微信和QQ的扩列（在我的圈子里）堪称两个极端。微信的扩列：无自我介绍，无任何信息，甚至连小朋友们最喜欢玩的MBTI也不贴，直接就是一个二维码，旁边放一个前凸后翘大长腿的网图，文案是“➕”。&lt;/p&gt;&#xA;&lt;p&gt;而QQ的扩列是另一个极端。滑好几页的自我介绍。年龄、MBTI人格、玩什么游戏，玩到了什么成绩、看什么动漫、坐标（也就是所在省份）等等面面俱到。&lt;/p&gt;&#xA;&lt;p&gt;一些扩列条我甚至第一条都读不懂：“&lt;strong&gt;cn是他妈的什么？&lt;/strong&gt;”&lt;/p&gt;&#xA;&lt;p&gt;查了一下才知道，原来这是类似“圈名”的概念，类似的术语还有很多，但这又是另一个圈子的分支。&lt;/p&gt;&#xA;&lt;p&gt;点进精心装修得金碧辉煌的QQ空间，读着会员专属字体配色的尊贵文字，可以发现扩列行为大概可以分类两种：以兴趣为导向，寻找游戏玩伴等；缓解孤独感：纯粹交友。前者在筛选把控和精准匹配上很是下功夫。&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;p&gt;这个扩列这个圈子有一个很有意思的词：“雷”。据业内人士透露，雷就是指讨厌的事情，在扩列条上写明自己讨厌的事，防止踩雷，这在我看来是一种挺高明的做法，有概率避免被冒犯，但也无形中增加了交流负担，且易暴露关系的脆弱性。如果“雷”被踩直接炸，确实危险。&lt;/p&gt;&#xA;&lt;p&gt;什么雷、单删等条条框框，有些人极端夸张，甚至因为对方“单删”自己，直接把ta挂在空间，意图网暴。高强度活跃于空间/朋友圈也能说明ta们有着很强的分享欲。无论好事坏事，美事糗事，都要往朋友圈/空间发。此时，开头的问题有了答案。&lt;/p&gt;&#xA;&lt;p&gt;扩列的意义究竟是什么？&lt;/p&gt;&#xA;&lt;p&gt;我得出的结论之一是：&lt;strong&gt;建立自我价值感&lt;/strong&gt;。&lt;/p&gt;&#xA;&lt;p&gt;自我价值感包含自信、自爱和自尊三个递进层，最终发展为&lt;strong&gt;自尊&lt;/strong&gt;。在认知层面，是个体对自身才能，社会地位，声誉的评估。&lt;/p&gt;&#xA;&lt;p&gt;我所观察到的部分群体在扩列活动中，自我价值感的建立主要体现在自信层面，由空间互赞的行为，在主观上提升自己的声誉；在高强度活跃于圈子中渐渐积累地位。&lt;/p&gt;&#xA;&lt;p&gt;说说/朋友圈的赞数和评论量化了声誉和社会地位，这在自我价值感的建立中是起正向作用的。但极端者，表达欲会被扭曲，从“我想分享什么”，变成总在想“别人会喜欢我分享什么”的转变，标志着自我价值以内在感受和体验评估，变成了由外部反馈提供。彻底迷失在众人目光注视之下。&lt;/p&gt;&#xA;&lt;p&gt;结论之二是：&lt;strong&gt;获得新鲜感&lt;/strong&gt;。&lt;/p&gt;&#xA;&lt;p&gt;一块刚出锅的红薯和放了一下午的红薯口感肯定不同。持续交友，保持新鲜感。我也见过有人很喜欢社交媒体的红点，能营造出一种自己很受欢迎的氛围，而扩列就能做到这点：“新的好友申请”、“新消息”等。&lt;/p&gt;&#xA;&lt;p&gt;人与人之间的交际关系可以用图的结构来表示，扩列条的转发让一个节点的属性放射性地广播出去，跨更远的节点，建立链接。这张图几乎是不会断的，因为人的社交网络是不会断的，如果这个扩列条一直被转发，那么理论上就有可能走到互联网的每一个角落，从而产生持续性。如果人们停止转发，那自己就再发一条，请求好友们继续转发。&lt;/p&gt;&#xA;&lt;p&gt;然而这仅仅是理论上的设想，社交网络并非一张无限连接到全世界所有人的图，而是分裂成一小块一小块不同的图，各为一个圈，仅少数活跃在多个圈子的人可能链接着两个小图。所以信息的传递效率没有理论上那么恐怖，这也就为兴趣为导向的扩列提供了积极作用，至少可以在小圈子内传播，找到同好。&lt;/p&gt;&#xA;&lt;p&gt;扩列行为中普遍存在的一个现象是加了好友，几乎没有任何互动，我称之为“僵尸好友”。这是&lt;a href=&#34;https://baike.baidu.com/item/150%E5%AE%9A%E5%BE%8B/2112262&#34;&gt;邓巴数字&lt;/a&gt;的一个很好的验证。&lt;/p&gt;&#xA;&lt;p&gt;小圈子中个体的小圈子浓缩再浓缩，最后形成所谓的小团体，高强度互动，筛选把控和精准匹配此时已经达到最终目的。&lt;/p&gt;&#xA;&lt;p&gt;这也就是我得出的第三个结论：&lt;strong&gt;获得归属感&lt;/strong&gt;。&lt;/p&gt;&#xA;&lt;p&gt;包括MBTI、属性图等主观上容易被判断为贴标签的行为，也是在寻找归属感。&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>对博客主题的一点想法</title>
      <link>https://blog.verdant.ee/posts/%E5%AF%B9%E5%8D%9A%E5%AE%A2%E4%B8%BB%E9%A2%98%E7%9A%84%E4%B8%80%E7%82%B9%E6%83%B3%E6%B3%95/</link>
      <pubDate>Thu, 10 Jul 2025 21:12:51 +0800</pubDate><author>i@glowisle.me (五葉地錦)</author>
      <guid>https://blog.verdant.ee/posts/%E5%AF%B9%E5%8D%9A%E5%AE%A2%E4%B8%BB%E9%A2%98%E7%9A%84%E4%B8%80%E7%82%B9%E6%83%B3%E6%B3%95/</guid>
      <description>&lt;p&gt;简单回顾以下建站历程，博客的内容从“我是谁”转移到了&amp;quot;我想说什么&amp;quot;。从最早开始正式写博客的&lt;strong&gt;Gmeek&lt;/strong&gt;，到后来使用&lt;strong&gt;Typecho&lt;/strong&gt;，再到&lt;strong&gt;Hexo,Hugo&lt;/strong&gt;，这几个不同的时期是我对主题看法的不同阶段。&lt;/p&gt;&#xA;&lt;p&gt;Gmeek时期，没有概念，没看过几个人的博客，后来接触得多了，看了很多主题才意识到自己博客的主题有多简陋，换到Typecho，开始折腾主题，经历了一段不堪回首的时期。经典的一些元素：左下角挡字小人、底部音乐播放器、背景樱花飘落特效、点击特效，总之就是各种花里胡哨。文章，没有几篇，但是你可以在网页上找到任何你想找到的东西，除了文章。当时很喜欢Butterfly主题&lt;/p&gt;&#xA;&lt;p&gt;后来换到了Hexo，也有Butterfly，继续用。发现点二十个网站，三十个都是Butterfly，很尴尬，后来经过几经波折，换到了Maupassant，输出了几篇自认为有点内容的文章，主要还是有感而发，我写东西不在乎谁看了，谁怎么看。我只是享受编辑和发送的过程。有人说心情不好，就把让你不开心的事写在纸上然后团成球扔进垃圾桶。这样还是太浪费了，毕竟是自己亲笔写下的文字，另说浪费纸张也不好。&lt;/p&gt;&#xA;&lt;p&gt;在Hexo时期，我一直在寻找让读者弱化“我是谁”，专心聚焦与内容的主题。Maupassant就很好。后来转来Hugo，是看中了云风博客的那种千禧年的风格，不花哨，也不简陋。基于&lt;a href=&#34;http://jiaoyuan.org/&#34;&gt;JiaoYuan&lt;/a&gt;的移植后简单修改了以下配色之类，就正式投入使用。&lt;/p&gt;&#xA;&lt;p&gt;我认为，博客重在内容，想表达什么观点、想记录什么事件。毕竟Blog，Web Log，Log，日志，记录。除了记录，也可以是扩大自己声音的一个渠道，独立于平台，起码不会有&lt;strong&gt;跳墙的&lt;/strong&gt;删掉你辛辛苦苦打出来的一大段字。&lt;/p&gt;&#xA;&lt;p&gt;而把重心放到了“我是谁”的站点，应该算作“个人主页”，并非博客，用作于一些项目展示、网络名片也是很好的。&lt;/p&gt;&#xA;&lt;p&gt;而ta说“我是谁”，和自己观察“ta是谁“，是两种截然不同的感受。前者能迅速建立起一个停留于表层但具体的印象，而后者多出一种&lt;strong&gt;视奸&lt;/strong&gt;的快感。从字里行间里感受ta是什么人，虽然建立印象的周期长，但深入。值得。&lt;/p&gt;&#xA;&lt;p&gt;所以很多人博客的关于页面，我就当看个乐呵就过去了，仔细看每一篇文章，从ta的文字、观点、立场、价值观和认知来建立起ta的形象。有些人宏伟庄严，有些人冷漠麻木，有些人用平实朴素的语言记录，有些人用各种&lt;strong&gt;恶心到家的语气词和括号里补充的动作描写&lt;/strong&gt;，绞尽脑汁想怎么把自己表现得多可爱。想可爱，先从&lt;strong&gt;扮演人类&lt;/strong&gt;开始吧。这么在意别人怎么看自己，我替你感到疲惫。&lt;/p&gt;&#xA;&lt;p&gt;好吧，我承认我有点冒犯了，一些朋友看到标题是关于主题的点进来还躺枪，那对不起，我冒犯的就是你。&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>为什么我选择Github issues，而不是朋友圈</title>
      <link>https://blog.verdant.ee/posts/%E4%B8%BA%E4%BB%80%E4%B9%88%E6%88%91%E9%80%89%E6%8B%A9github-issues%E8%80%8C%E4%B8%8D%E6%98%AF%E6%9C%8B%E5%8F%8B%E5%9C%88/</link>
      <pubDate>Sat, 05 Jul 2025 09:09:48 +0000</pubDate><author>i@glowisle.me (五葉地錦)</author>
      <guid>https://blog.verdant.ee/posts/%E4%B8%BA%E4%BB%80%E4%B9%88%E6%88%91%E9%80%89%E6%8B%A9github-issues%E8%80%8C%E4%B8%8D%E6%98%AF%E6%9C%8B%E5%8F%8B%E5%9C%88/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;本页面内容来自&lt;a href=&#34;https://github.com/yingyu5658/Moments/edit/main/README.md&#34;&gt;Moments&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;概述&#34;&gt;概述&lt;/h2&gt;&#xA;&lt;p&gt;把GitHub issues当朋友圈发。&lt;/p&gt;&#xA;&lt;p&gt;我厌倦朋友圈浓重的装逼气味和虚假社交属性，打造一个纸糊的人设并不好玩，专门发出来某些东西给某人看也非常恶心，所以我选择逃避。&lt;/p&gt;&#xA;&lt;h2 id=&#34;为什么要用issues而不是朋友圈&#34;&gt;为什么要用issues，而不是朋友圈？&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;访问受限，门槛较高 &amp;amp;&amp;amp; 过滤傻逼&lt;/li&gt;&#xA;&lt;li&gt;有更方便管理的标签和查找&lt;/li&gt;&#xA;&lt;li&gt;易于二次开发&lt;/li&gt;&#xA;&lt;li&gt;Markdown格式写作&lt;/li&gt;&#xA;&lt;li&gt;清净，不用一点开就吃别人拉出来的屎&lt;/li&gt;&#xA;&lt;li&gt;能相对敞亮地说话&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;综上，使用issues是更好的。&lt;/p&gt;&#xA;&lt;h2 id=&#34;为什么叫moments&#34;&gt;为什么叫Moments？&lt;/h2&gt;&#xA;&lt;p&gt;这是微信英文界面对朋友圈的翻译，我觉得这个翻译像是十几年前微信朋友圈这个功能刚出来时做的。刹那、瞬间，重在记录，而现在朋友圈的发展越来越妖魔化，已经变成一些虚伪的人从各个角度试图营销自己的垃圾场，也变成了意义不明、只放一个二维码要求扩列的赛博妓院。朋友圈的内容总给人虚假感，因为微信是一个社交平台，和你的人设高度绑定，大部分人到死前都会经历毫无尊严的一段时光，想到这里，那些虚假的人设、别人的看法也就没那么重要了。&lt;/p&gt;&#xA;&lt;h2 id=&#34;个人原因&#34;&gt;个人原因&lt;/h2&gt;&#xA;&lt;p&gt;我从发布了第一条&lt;a href=&#34;https://www.yingyu5658.me/post/707697709/&#34;&gt;私密朋友圈&lt;/a&gt;开始，就一直在探索利用间隙碎片时间释放表达欲与分享欲的途径，，为了远离那些恶心的卖弄人设行为且能专心用私密朋友圈记录，我屏蔽了所有好友的朋友圈，但微信朋友圈不易于管理和查找，没一阵就被pass掉。&lt;/p&gt;&#xA;&lt;p&gt;除了朋友圈，我大部分释放前两种欲望的途径是和群里的网友聊天，但是随着&lt;a href=&#34;https://www.yingyu5658.me/post/2631380338/&#34;&gt;网络死亡计划&lt;/a&gt;对群聊的筛选，我活动的群聊变得很少，有些还留着的群是因为加的时间很长，但基本没人理我。后来&lt;a href=&#34;https://www.yingyu5658.me/post/3628666444/&#34;&gt;信息节食&lt;/a&gt;的实行，我也不会再浪费太多时间在群里吹水，总憋着容易溢出，于是Moments诞生了。&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>使用Javascript TSS和Highlights构建一个文本阅读器</title>
      <link>https://blog.verdant.ee/posts/%E7%94%A8javascript-tss%E5%92%8Chighlights%E6%9E%84%E5%BB%BA%E4%B8%80%E4%B8%AA%E5%8F%A5%E7%BA%A7%E6%96%87%E6%9C%AC%E9%98%85%E8%AF%BB%E5%99%A8/</link>
      <pubDate>Fri, 04 Jul 2025 10:46:53 +0000</pubDate><author>i@glowisle.me (五葉地錦)</author>
      <guid>https://blog.verdant.ee/posts/%E7%94%A8javascript-tss%E5%92%8Chighlights%E6%9E%84%E5%BB%BA%E4%B8%80%E4%B8%AA%E5%8F%A5%E7%BA%A7%E6%96%87%E6%9C%AC%E9%98%85%E8%AF%BB%E5%99%A8/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;原文：https://jsdev.space/tts-sentence-reader/&lt;/p&gt;&#xA;&lt;p&gt;翻译：Verdant&lt;a href=&#34;mailto:i@glowisle.me&#34;&gt;i@glowisle.me&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;&lt;figure class=&#34;image-caption&#34;&gt;&#xA;    &lt;img src=&#34;https://jsdev.space/.netlify/images?url=_astro%2Ftts-sentence-reader.hV9whx3I.png&amp;amp;w=800&amp;amp;h=800&#34; alt=&#34;&#34;&gt;&#xA;    &lt;figcaption&gt;&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&lt;/p&gt;&#xA;&lt;p&gt;在这篇文章中，我们将构建一个简单的Web工具来探究&lt;strong&gt;Text-toSpeech(TTS)&lt;strong&gt;在JavaScript中是如何工作的。我们也将深入研究&lt;/strong&gt;句子级高亮&lt;/strong&gt;的工作逻辑。这两项功能经常结合在一起使用，以走到浏览器中打造无障碍的动态阅读体验。&lt;/p&gt;&#xA;&lt;p&gt;步骤:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;学习在浏览器中,TTS是如何工作的&lt;/li&gt;&#xA;&lt;li&gt;探究动态高亮句子的实现方法&lt;/li&gt;&#xA;&lt;li&gt;用HTML, CSS, JavaScript构建一个小工具(&lt;a href=&#34;https://codepen.io/jsdevspace/pen/YPXRRjO&#34;&gt;Demo &amp;amp; Code&lt;/a&gt;)&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h2 id=&#34;-浏览器中的tts概述&#34;&gt;📢 浏览器中的TTS概述&lt;/h2&gt;&#xA;&lt;p&gt;JavaScript提供一个内置的API：&lt;a href=&#34;https://developer.mozilla.org/en-US/docs/Web/API/SpeechSynthesis&#34;&gt;&lt;code&gt;SpeechSynthesis&lt;/code&gt;&lt;/a&gt;，它允许我们使用系统中的可用嗓音去大声朗读问文字。&lt;/p&gt;&#xA;&lt;h3 id=&#34;核心对象&#34;&gt;核心对象:&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;speechSynthesis&lt;/code&gt; — 控制播放、暂停、恢复、停止&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;SpeechSynthesisUtterance&lt;/code&gt; — 作为TTS引擎的待播报文本&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;示例&#34;&gt;✨示例:&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-js&#34; data-lang=&#34;js&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e67e80&#34;&gt;const&lt;/span&gt; msg &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e67e80&#34;&gt;new&lt;/span&gt; SpeechSynthesisUtterance(&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;Hello, world!&amp;#34;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#d699b6&#34;&gt;window&lt;/span&gt;.speechSynthesis.speak(msg);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;-添加嗓音和配置&#34;&gt;⚙️ 添加嗓音和配置&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-js&#34; data-lang=&#34;js&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e67e80&#34;&gt;const&lt;/span&gt; utter &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e67e80&#34;&gt;new&lt;/span&gt; SpeechSynthesisUtterance(&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;This is a test&amp;#34;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e67e80&#34;&gt;const&lt;/span&gt; voices &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#d699b6&#34;&gt;window&lt;/span&gt;.speechSynthesis.getVoices();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;utter.voice &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; voices.find(v =&amp;gt; v.lang &lt;span style=&#34;color:#7a8478&#34;&gt;===&lt;/span&gt; &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#39;en-US&amp;#39;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;utter.rate &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#d699b6&#34;&gt;1.2&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;utter.pitch &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#d699b6&#34;&gt;1&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#d699b6&#34;&gt;window&lt;/span&gt;.speechSynthesis.speak(utter);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;你也可以追踪朗读的开始和结束：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-js&#34; data-lang=&#34;js&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;utter.onstart &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; () =&amp;gt; console.log(&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#39;Started speaking&amp;#39;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;utter.onend &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; () =&amp;gt; console.log(&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#39;Finished speaking&amp;#39;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;-句子高亮&#34;&gt;✍️ 句子高亮&lt;/h2&gt;&#xA;&lt;p&gt;展示给用户哪一个句子正在阅读，我们需要用CSS和JavaScript来高亮文本。&lt;/p&gt;&#xA;&lt;h3 id=&#34;示例-html&#34;&gt;示例 HTML:&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-html&#34; data-lang=&#34;html&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;lt;&lt;span style=&#34;color:#7a8478&#34;&gt;p&lt;/span&gt;&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &amp;lt;&lt;span style=&#34;color:#7a8478&#34;&gt;span&lt;/span&gt; &lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;class&lt;/span&gt;&lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;sentence&amp;#34;&lt;/span&gt;&amp;gt;First sentence.&amp;lt;/&lt;span style=&#34;color:#7a8478&#34;&gt;span&lt;/span&gt;&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &amp;lt;&lt;span style=&#34;color:#7a8478&#34;&gt;span&lt;/span&gt; &lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;class&lt;/span&gt;&lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;sentence&amp;#34;&lt;/span&gt;&amp;gt;Second sentence.&amp;lt;/&lt;span style=&#34;color:#7a8478&#34;&gt;span&lt;/span&gt;&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;lt;/&lt;span style=&#34;color:#7a8478&#34;&gt;p&lt;/span&gt;&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;处理高亮的css&#34;&gt;处理高亮的CSS:&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-css&#34; data-lang=&#34;css&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;.sentence.active {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e67e80&#34;&gt;background-color&lt;/span&gt;: &lt;span style=&#34;color:#e67e80&#34;&gt;yellow&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e67e80&#34;&gt;font-weight&lt;/span&gt;: &lt;span style=&#34;color:#e67e80&#34;&gt;bold&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;javascript高亮逻辑&#34;&gt;JavaScript高亮逻辑：&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-js&#34; data-lang=&#34;js&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e67e80&#34;&gt;function&lt;/span&gt; highlight(index) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#d699b6&#34;&gt;document&lt;/span&gt;.querySelectorAll(&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#39;.sentence&amp;#39;&lt;/span&gt;).forEach((el, i) =&amp;gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    el.classList.toggle(&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#39;active&amp;#39;&lt;/span&gt;, i &lt;span style=&#34;color:#7a8478&#34;&gt;===&lt;/span&gt; index);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  });&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h1 id=&#34;项目-使用tss和高亮的阅读器&#34;&gt;🚀项目: 使用TSS和高亮的阅读器&lt;/h1&gt;&#xA;&lt;p&gt;我们的程序将要：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;逐句朗读文本&lt;/li&gt;&#xA;&lt;li&gt;高亮朗读中的文本&lt;/li&gt;&#xA;&lt;li&gt;提供播放、暂停、恢复、停止&lt;/li&gt;&#xA;&lt;li&gt;让用户能选择嗓音&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;-html结构&#34;&gt;📄 HTML结构&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-html&#34; data-lang=&#34;html&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e67e80&#34;&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;lt;&lt;span style=&#34;color:#7a8478&#34;&gt;html&lt;/span&gt; &lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;lang&lt;/span&gt;&lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;en&amp;#34;&lt;/span&gt;&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;lt;&lt;span style=&#34;color:#7a8478&#34;&gt;head&lt;/span&gt;&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &amp;lt;&lt;span style=&#34;color:#7a8478&#34;&gt;meta&lt;/span&gt; &lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;charset&lt;/span&gt;&lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;UTF-8&amp;#34;&lt;/span&gt; /&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &amp;lt;&lt;span style=&#34;color:#7a8478&#34;&gt;meta&lt;/span&gt; &lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;viewport&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;content&lt;/span&gt;&lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;width=device-width, initial-scale=1.0&amp;#34;&lt;/span&gt; /&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &amp;lt;&lt;span style=&#34;color:#7a8478&#34;&gt;meta&lt;/span&gt; &lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;description&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;content&lt;/span&gt;&lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;Build an interactive sentence-level text-to-speech reader with highlight, playback controls, and local progress tracking using HTML and JavaScript.&amp;#34;&lt;/span&gt; /&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &amp;lt;&lt;span style=&#34;color:#7a8478&#34;&gt;title&lt;/span&gt;&amp;gt;Interactive TTS Article Reader&amp;lt;/&lt;span style=&#34;color:#7a8478&#34;&gt;title&lt;/span&gt;&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;lt;/&lt;span style=&#34;color:#7a8478&#34;&gt;head&lt;/span&gt;&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;lt;&lt;span style=&#34;color:#7a8478&#34;&gt;body&lt;/span&gt;&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &amp;lt;&lt;span style=&#34;color:#7a8478&#34;&gt;h1&lt;/span&gt;&amp;gt;Read Along TTS Demo&amp;lt;/&lt;span style=&#34;color:#7a8478&#34;&gt;h1&lt;/span&gt;&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &amp;lt;&lt;span style=&#34;color:#7a8478&#34;&gt;div&lt;/span&gt; &lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;class&lt;/span&gt;&lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;toolbar&amp;#34;&lt;/span&gt;&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &amp;lt;&lt;span style=&#34;color:#7a8478&#34;&gt;button&lt;/span&gt; &lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;id&lt;/span&gt;&lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&amp;gt;Play&amp;lt;/&lt;span style=&#34;color:#7a8478&#34;&gt;button&lt;/span&gt;&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &amp;lt;&lt;span style=&#34;color:#7a8478&#34;&gt;button&lt;/span&gt; &lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;id&lt;/span&gt;&lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;pause&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;disabled&lt;/span&gt;&amp;gt;Pause&amp;lt;/&lt;span style=&#34;color:#7a8478&#34;&gt;button&lt;/span&gt;&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &amp;lt;&lt;span style=&#34;color:#7a8478&#34;&gt;button&lt;/span&gt; &lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;id&lt;/span&gt;&lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;resume&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;disabled&lt;/span&gt;&amp;gt;Resume&amp;lt;/&lt;span style=&#34;color:#7a8478&#34;&gt;button&lt;/span&gt;&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &amp;lt;&lt;span style=&#34;color:#7a8478&#34;&gt;button&lt;/span&gt; &lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;id&lt;/span&gt;&lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;stop&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;disabled&lt;/span&gt;&amp;gt;Stop&amp;lt;/&lt;span style=&#34;color:#7a8478&#34;&gt;button&lt;/span&gt;&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &amp;lt;&lt;span style=&#34;color:#7a8478&#34;&gt;button&lt;/span&gt; &lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;id&lt;/span&gt;&lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;reset&amp;#34;&lt;/span&gt;&amp;gt;Reset&amp;lt;/&lt;span style=&#34;color:#7a8478&#34;&gt;button&lt;/span&gt;&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &amp;lt;&lt;span style=&#34;color:#7a8478&#34;&gt;select&lt;/span&gt; &lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;id&lt;/span&gt;&lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;voices&amp;#34;&lt;/span&gt;&amp;gt;&amp;lt;/&lt;span style=&#34;color:#7a8478&#34;&gt;select&lt;/span&gt;&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &amp;lt;/&lt;span style=&#34;color:#7a8478&#34;&gt;div&lt;/span&gt;&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &amp;lt;&lt;span style=&#34;color:#7a8478&#34;&gt;div&lt;/span&gt; &lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;class&lt;/span&gt;&lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;text-block&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;id&lt;/span&gt;&lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;reader&amp;#34;&lt;/span&gt;&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &amp;lt;&lt;span style=&#34;color:#7a8478&#34;&gt;span&lt;/span&gt; &lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;class&lt;/span&gt;&lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;line&amp;#34;&lt;/span&gt;&amp;gt;Learning to code is a never-ending journey.&amp;lt;/&lt;span style=&#34;color:#7a8478&#34;&gt;span&lt;/span&gt;&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &amp;lt;&lt;span style=&#34;color:#7a8478&#34;&gt;span&lt;/span&gt; &lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;class&lt;/span&gt;&lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;line&amp;#34;&lt;/span&gt;&amp;gt;Technologies evolve rapidly, requiring constant adaptation.&amp;lt;/&lt;span style=&#34;color:#7a8478&#34;&gt;span&lt;/span&gt;&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &amp;lt;&lt;span style=&#34;color:#7a8478&#34;&gt;span&lt;/span&gt; &lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;class&lt;/span&gt;&lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;line&amp;#34;&lt;/span&gt;&amp;gt;JavaScript, HTML, and CSS are essential tools for web development.&amp;lt;/&lt;span style=&#34;color:#7a8478&#34;&gt;span&lt;/span&gt;&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &amp;lt;&lt;span style=&#34;color:#7a8478&#34;&gt;span&lt;/span&gt; &lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;class&lt;/span&gt;&lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;line&amp;#34;&lt;/span&gt;&amp;gt;Frameworks like React and Vue enhance front-end capabilities.&amp;lt;/&lt;span style=&#34;color:#7a8478&#34;&gt;span&lt;/span&gt;&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &amp;lt;&lt;span style=&#34;color:#7a8478&#34;&gt;span&lt;/span&gt; &lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;class&lt;/span&gt;&lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;line&amp;#34;&lt;/span&gt;&amp;gt;Back-end skills with Node.js extend JavaScript to the server.&amp;lt;/&lt;span style=&#34;color:#7a8478&#34;&gt;span&lt;/span&gt;&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &amp;lt;/&lt;span style=&#34;color:#7a8478&#34;&gt;div&lt;/span&gt;&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &amp;lt;&lt;span style=&#34;color:#7a8478&#34;&gt;div&lt;/span&gt; &lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;class&lt;/span&gt;&lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;progress&amp;#34;&lt;/span&gt;&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &amp;lt;&lt;span style=&#34;color:#7a8478&#34;&gt;span&lt;/span&gt; &lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;id&lt;/span&gt;&lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;progressText&amp;#34;&lt;/span&gt;&amp;gt;0/0&amp;lt;/&lt;span style=&#34;color:#7a8478&#34;&gt;span&lt;/span&gt;&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &amp;lt;&lt;span style=&#34;color:#7a8478&#34;&gt;div&lt;/span&gt; &lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;class&lt;/span&gt;&lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;bar&amp;#34;&lt;/span&gt;&amp;gt;&amp;lt;&lt;span style=&#34;color:#7a8478&#34;&gt;div&lt;/span&gt; &lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;class&lt;/span&gt;&lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;bar-fill&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;id&lt;/span&gt;&lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;bar&amp;#34;&lt;/span&gt;&amp;gt;&amp;lt;/&lt;span style=&#34;color:#7a8478&#34;&gt;div&lt;/span&gt;&amp;gt;&amp;lt;/&lt;span style=&#34;color:#7a8478&#34;&gt;div&lt;/span&gt;&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &amp;lt;/&lt;span style=&#34;color:#7a8478&#34;&gt;div&lt;/span&gt;&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;lt;/&lt;span style=&#34;color:#7a8478&#34;&gt;body&lt;/span&gt;&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;lt;/&lt;span style=&#34;color:#7a8478&#34;&gt;html&lt;/span&gt;&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;-css-样式&#34;&gt;🎨 CSS 样式&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-css&#34; data-lang=&#34;css&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#7a8478&#34;&gt;body&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e67e80&#34;&gt;font-family&lt;/span&gt;: &lt;span style=&#34;color:#e67e80&#34;&gt;sans-serif&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e67e80&#34;&gt;margin&lt;/span&gt;: &lt;span style=&#34;color:#d699b6&#34;&gt;0&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e67e80&#34;&gt;padding&lt;/span&gt;: &lt;span style=&#34;color:#d699b6&#34;&gt;2&lt;/span&gt;&lt;span style=&#34;color:#dbbc7f&#34;&gt;rem&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e67e80&#34;&gt;background&lt;/span&gt;: &lt;span style=&#34;color:#d699b6&#34;&gt;#f0f4f8&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e67e80&#34;&gt;color&lt;/span&gt;: &lt;span style=&#34;color:#d699b6&#34;&gt;#333&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#7a8478&#34;&gt;h1&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e67e80&#34;&gt;text-align&lt;/span&gt;: &lt;span style=&#34;color:#e67e80&#34;&gt;center&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e67e80&#34;&gt;margin-bottom&lt;/span&gt;: &lt;span style=&#34;color:#d699b6&#34;&gt;2&lt;/span&gt;&lt;span style=&#34;color:#dbbc7f&#34;&gt;rem&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;.toolbar {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e67e80&#34;&gt;display&lt;/span&gt;: &lt;span style=&#34;color:#e67e80&#34;&gt;flex&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e67e80&#34;&gt;justify-content&lt;/span&gt;: &lt;span style=&#34;color:#e67e80&#34;&gt;center&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e67e80&#34;&gt;flex-wrap&lt;/span&gt;: &lt;span style=&#34;color:#e67e80&#34;&gt;wrap&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e67e80&#34;&gt;gap&lt;/span&gt;: &lt;span style=&#34;color:#d699b6&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#dbbc7f&#34;&gt;rem&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e67e80&#34;&gt;margin-bottom&lt;/span&gt;: &lt;span style=&#34;color:#d699b6&#34;&gt;2&lt;/span&gt;&lt;span style=&#34;color:#dbbc7f&#34;&gt;rem&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;.toolbar &lt;span style=&#34;color:#7a8478&#34;&gt;button&lt;/span&gt;&lt;span style=&#34;color:#7a8478&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;.toolbar &lt;span style=&#34;color:#7a8478&#34;&gt;select&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e67e80&#34;&gt;padding&lt;/span&gt;: &lt;span style=&#34;color:#d699b6&#34;&gt;0.6&lt;/span&gt;&lt;span style=&#34;color:#dbbc7f&#34;&gt;rem&lt;/span&gt; &lt;span style=&#34;color:#d699b6&#34;&gt;1.2&lt;/span&gt;&lt;span style=&#34;color:#dbbc7f&#34;&gt;rem&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e67e80&#34;&gt;border-radius&lt;/span&gt;: &lt;span style=&#34;color:#d699b6&#34;&gt;4&lt;/span&gt;&lt;span style=&#34;color:#dbbc7f&#34;&gt;px&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e67e80&#34;&gt;border&lt;/span&gt;: &lt;span style=&#34;color:#e67e80&#34;&gt;none&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e67e80&#34;&gt;font-size&lt;/span&gt;: &lt;span style=&#34;color:#d699b6&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#dbbc7f&#34;&gt;rem&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;.toolbar &lt;span style=&#34;color:#7a8478&#34;&gt;button&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e67e80&#34;&gt;background&lt;/span&gt;: &lt;span style=&#34;color:#d699b6&#34;&gt;#0077cc&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e67e80&#34;&gt;color&lt;/span&gt;: &lt;span style=&#34;color:#e67e80&#34;&gt;white&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e67e80&#34;&gt;cursor&lt;/span&gt;: &lt;span style=&#34;color:#e67e80&#34;&gt;pointer&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;.toolbar &lt;span style=&#34;color:#7a8478&#34;&gt;button&lt;/span&gt;:disabled {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e67e80&#34;&gt;background&lt;/span&gt;: &lt;span style=&#34;color:#d699b6&#34;&gt;#ccc&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e67e80&#34;&gt;cursor&lt;/span&gt;: &lt;span style=&#34;color:#e67e80&#34;&gt;not-allowed&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;.text-block {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e67e80&#34;&gt;background&lt;/span&gt;: &lt;span style=&#34;color:#e67e80&#34;&gt;white&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e67e80&#34;&gt;padding&lt;/span&gt;: &lt;span style=&#34;color:#d699b6&#34;&gt;1.5&lt;/span&gt;&lt;span style=&#34;color:#dbbc7f&#34;&gt;rem&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e67e80&#34;&gt;border-radius&lt;/span&gt;: &lt;span style=&#34;color:#d699b6&#34;&gt;6&lt;/span&gt;&lt;span style=&#34;color:#dbbc7f&#34;&gt;px&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e67e80&#34;&gt;box-shadow&lt;/span&gt;: &lt;span style=&#34;color:#d699b6&#34;&gt;0&lt;/span&gt; &lt;span style=&#34;color:#d699b6&#34;&gt;2&lt;/span&gt;&lt;span style=&#34;color:#dbbc7f&#34;&gt;px&lt;/span&gt; &lt;span style=&#34;color:#d699b6&#34;&gt;6&lt;/span&gt;&lt;span style=&#34;color:#dbbc7f&#34;&gt;px&lt;/span&gt; &lt;span style=&#34;color:#d699b6&#34;&gt;rgba&lt;/span&gt;(&lt;span style=&#34;color:#d699b6&#34;&gt;0&lt;/span&gt;, &lt;span style=&#34;color:#d699b6&#34;&gt;0&lt;/span&gt;, &lt;span style=&#34;color:#d699b6&#34;&gt;0&lt;/span&gt;, &lt;span style=&#34;color:#d699b6&#34;&gt;0.1&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;.line {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e67e80&#34;&gt;display&lt;/span&gt;: &lt;span style=&#34;color:#e67e80&#34;&gt;block&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e67e80&#34;&gt;margin-bottom&lt;/span&gt;: &lt;span style=&#34;color:#d699b6&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#dbbc7f&#34;&gt;rem&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e67e80&#34;&gt;cursor&lt;/span&gt;: &lt;span style=&#34;color:#e67e80&#34;&gt;pointer&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e67e80&#34;&gt;transition&lt;/span&gt;: &lt;span style=&#34;color:#e67e80&#34;&gt;background&lt;/span&gt; &lt;span style=&#34;color:#d699b6&#34;&gt;0.3&lt;/span&gt;&lt;span style=&#34;color:#dbbc7f&#34;&gt;s&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;.line:hover {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e67e80&#34;&gt;background&lt;/span&gt;: &lt;span style=&#34;color:#d699b6&#34;&gt;#f9f9f9&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;.line.active {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e67e80&#34;&gt;background&lt;/span&gt;: &lt;span style=&#34;color:#d699b6&#34;&gt;#fff3cd&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e67e80&#34;&gt;font-weight&lt;/span&gt;: &lt;span style=&#34;color:#e67e80&#34;&gt;bold&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;.progress {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e67e80&#34;&gt;text-align&lt;/span&gt;: &lt;span style=&#34;color:#e67e80&#34;&gt;center&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e67e80&#34;&gt;margin-top&lt;/span&gt;: &lt;span style=&#34;color:#d699b6&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#dbbc7f&#34;&gt;rem&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;.bar {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e67e80&#34;&gt;height&lt;/span&gt;: &lt;span style=&#34;color:#d699b6&#34;&gt;8&lt;/span&gt;&lt;span style=&#34;color:#dbbc7f&#34;&gt;px&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e67e80&#34;&gt;width&lt;/span&gt;: &lt;span style=&#34;color:#d699b6&#34;&gt;100&lt;/span&gt;&lt;span style=&#34;color:#dbbc7f&#34;&gt;%&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e67e80&#34;&gt;background&lt;/span&gt;: &lt;span style=&#34;color:#d699b6&#34;&gt;#eee&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e67e80&#34;&gt;border-radius&lt;/span&gt;: &lt;span style=&#34;color:#d699b6&#34;&gt;4&lt;/span&gt;&lt;span style=&#34;color:#dbbc7f&#34;&gt;px&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e67e80&#34;&gt;overflow&lt;/span&gt;: &lt;span style=&#34;color:#e67e80&#34;&gt;hidden&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;.bar-fill {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e67e80&#34;&gt;height&lt;/span&gt;: &lt;span style=&#34;color:#d699b6&#34;&gt;100&lt;/span&gt;&lt;span style=&#34;color:#dbbc7f&#34;&gt;%&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e67e80&#34;&gt;width&lt;/span&gt;: &lt;span style=&#34;color:#d699b6&#34;&gt;0&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e67e80&#34;&gt;background&lt;/span&gt;: &lt;span style=&#34;color:#d699b6&#34;&gt;linear-gradient&lt;/span&gt;(&lt;span style=&#34;color:#e67e80&#34;&gt;to&lt;/span&gt; &lt;span style=&#34;color:#e67e80&#34;&gt;right&lt;/span&gt;, &lt;span style=&#34;color:#d699b6&#34;&gt;#0077cc&lt;/span&gt;, &lt;span style=&#34;color:#d699b6&#34;&gt;#005fa3&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e67e80&#34;&gt;transition&lt;/span&gt;: &lt;span style=&#34;color:#e67e80&#34;&gt;width&lt;/span&gt; &lt;span style=&#34;color:#d699b6&#34;&gt;0.3&lt;/span&gt;&lt;span style=&#34;color:#dbbc7f&#34;&gt;s&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;-javascript逻辑&#34;&gt;💡 JavaScript逻辑&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-js&#34; data-lang=&#34;js&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e67e80&#34;&gt;const&lt;/span&gt; lines &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#d699b6&#34;&gt;document&lt;/span&gt;.querySelectorAll(&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#39;.line&amp;#39;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e67e80&#34;&gt;const&lt;/span&gt; playBtn &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#d699b6&#34;&gt;document&lt;/span&gt;.getElementById(&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#39;start&amp;#39;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e67e80&#34;&gt;const&lt;/span&gt; pauseBtn &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#d699b6&#34;&gt;document&lt;/span&gt;.getElementById(&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#39;pause&amp;#39;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e67e80&#34;&gt;const&lt;/span&gt; resumeBtn &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#d699b6&#34;&gt;document&lt;/span&gt;.getElementById(&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#39;resume&amp;#39;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e67e80&#34;&gt;const&lt;/span&gt; stopBtn &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#d699b6&#34;&gt;document&lt;/span&gt;.getElementById(&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#39;stop&amp;#39;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e67e80&#34;&gt;const&lt;/span&gt; resetBtn &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#d699b6&#34;&gt;document&lt;/span&gt;.getElementById(&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#39;reset&amp;#39;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e67e80&#34;&gt;const&lt;/span&gt; voiceSelect &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#d699b6&#34;&gt;document&lt;/span&gt;.getElementById(&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#39;voices&amp;#39;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e67e80&#34;&gt;const&lt;/span&gt; progressText &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#d699b6&#34;&gt;document&lt;/span&gt;.getElementById(&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#39;progressText&amp;#39;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e67e80&#34;&gt;const&lt;/span&gt; progressBar &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#d699b6&#34;&gt;document&lt;/span&gt;.getElementById(&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#39;bar&amp;#39;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e67e80&#34;&gt;const&lt;/span&gt; synth &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#d699b6&#34;&gt;window&lt;/span&gt;.speechSynthesis;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e67e80&#34;&gt;let&lt;/span&gt; voices &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; [];&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e67e80&#34;&gt;let&lt;/span&gt; currentIndex &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#d699b6&#34;&gt;0&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e67e80&#34;&gt;let&lt;/span&gt; currentUtterance &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e67e80&#34;&gt;null&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e67e80&#34;&gt;let&lt;/span&gt; isPaused &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e67e80&#34;&gt;false&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e67e80&#34;&gt;function&lt;/span&gt; populateVoices() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  voices &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; synth.getVoices();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  voiceSelect.innerHTML &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#39;&amp;#39;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  voices.forEach((voice, index) =&amp;gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e67e80&#34;&gt;const&lt;/span&gt; opt &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#d699b6&#34;&gt;document&lt;/span&gt;.createElement(&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#39;option&amp;#39;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    opt.value &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; index;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    opt.textContent &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#b2c98f&#34;&gt;`&lt;/span&gt;&lt;span style=&#34;color:#b2c98f&#34;&gt;${&lt;/span&gt;voice.name&lt;span style=&#34;color:#b2c98f&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#b2c98f&#34;&gt; (&lt;/span&gt;&lt;span style=&#34;color:#b2c98f&#34;&gt;${&lt;/span&gt;voice.lang&lt;span style=&#34;color:#b2c98f&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#b2c98f&#34;&gt;)`&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    voiceSelect.appendChild(opt);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  });&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;synth.onvoiceschanged &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; populateVoices;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;populateVoices();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e67e80&#34;&gt;function&lt;/span&gt; updateUI() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  progressText.textContent &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#b2c98f&#34;&gt;`&lt;/span&gt;&lt;span style=&#34;color:#b2c98f&#34;&gt;${&lt;/span&gt;currentIndex &lt;span style=&#34;color:#7a8478&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#d699b6&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#b2c98f&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#b2c98f&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#b2c98f&#34;&gt;${&lt;/span&gt;lines.length&lt;span style=&#34;color:#b2c98f&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#b2c98f&#34;&gt;`&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  progressBar.style.width &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#b2c98f&#34;&gt;`&lt;/span&gt;&lt;span style=&#34;color:#b2c98f&#34;&gt;${&lt;/span&gt;((currentIndex &lt;span style=&#34;color:#7a8478&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#d699b6&#34;&gt;1&lt;/span&gt;) &lt;span style=&#34;color:#7a8478&#34;&gt;/&lt;/span&gt; lines.length) &lt;span style=&#34;color:#7a8478&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color:#d699b6&#34;&gt;100&lt;/span&gt;&lt;span style=&#34;color:#b2c98f&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#b2c98f&#34;&gt;%`&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e67e80&#34;&gt;function&lt;/span&gt; highlightLine(index) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  lines.forEach((line, i) =&amp;gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    line.classList.toggle(&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#39;active&amp;#39;&lt;/span&gt;, i &lt;span style=&#34;color:#7a8478&#34;&gt;===&lt;/span&gt; index);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  });&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  lines[index]&lt;span style=&#34;color:#7a8478&#34;&gt;?&lt;/span&gt;.scrollIntoView({ behavior&lt;span style=&#34;color:#7a8478&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#39;smooth&amp;#39;&lt;/span&gt;, block&lt;span style=&#34;color:#7a8478&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#39;center&amp;#39;&lt;/span&gt; });&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e67e80&#34;&gt;function&lt;/span&gt; speakLine(index) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e67e80&#34;&gt;if&lt;/span&gt; (index &lt;span style=&#34;color:#7a8478&#34;&gt;&amp;gt;=&lt;/span&gt; lines.length) &lt;span style=&#34;color:#e67e80&#34;&gt;return&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e67e80&#34;&gt;const&lt;/span&gt; text &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; lines[index].textContent;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e67e80&#34;&gt;const&lt;/span&gt; utter &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e67e80&#34;&gt;new&lt;/span&gt; SpeechSynthesisUtterance(text);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e67e80&#34;&gt;const&lt;/span&gt; selected &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; voiceSelect.value;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e67e80&#34;&gt;if&lt;/span&gt; (voices[selected]) utter.voice &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; voices[selected];&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  utter.rate &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#d699b6&#34;&gt;1&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  utter.onstart &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; () =&amp;gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    highlightLine(index);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    playBtn.disabled &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e67e80&#34;&gt;true&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    pauseBtn.disabled &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e67e80&#34;&gt;false&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    resumeBtn.disabled &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e67e80&#34;&gt;true&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    stopBtn.disabled &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e67e80&#34;&gt;false&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  };&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  utter.onend &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; () =&amp;gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e67e80&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#7a8478&#34;&gt;!&lt;/span&gt;isPaused) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      currentIndex&lt;span style=&#34;color:#7a8478&#34;&gt;++&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#e67e80&#34;&gt;if&lt;/span&gt; (currentIndex &lt;span style=&#34;color:#7a8478&#34;&gt;&amp;lt;&lt;/span&gt; lines.length) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        speakLine(currentIndex);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      } &lt;span style=&#34;color:#e67e80&#34;&gt;else&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        resetControls();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  };&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  currentUtterance &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; utter;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  synth.speak(utter);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  updateUI();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e67e80&#34;&gt;function&lt;/span&gt; resetControls() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  playBtn.disabled &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e67e80&#34;&gt;false&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  pauseBtn.disabled &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e67e80&#34;&gt;true&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  resumeBtn.disabled &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e67e80&#34;&gt;true&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  stopBtn.disabled &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e67e80&#34;&gt;true&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;playBtn.onclick &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; () =&amp;gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  currentIndex &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#d699b6&#34;&gt;0&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  speakLine(currentIndex);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;};&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;pauseBtn.onclick &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; () =&amp;gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  synth.pause();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  isPaused &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e67e80&#34;&gt;true&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  pauseBtn.disabled &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e67e80&#34;&gt;true&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  resumeBtn.disabled &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e67e80&#34;&gt;false&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;};&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;resumeBtn.onclick &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; () =&amp;gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  synth.resume();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  isPaused &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e67e80&#34;&gt;false&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  pauseBtn.disabled &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e67e80&#34;&gt;false&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  resumeBtn.disabled &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e67e80&#34;&gt;true&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;};&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;stopBtn.onclick &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; () =&amp;gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  synth.cancel();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  resetControls();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;};&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;resetBtn.onclick &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; () =&amp;gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  synth.cancel();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  currentIndex &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#d699b6&#34;&gt;0&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  highlightLine(currentIndex);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  updateUI();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;};&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;lines.forEach((line, index) =&amp;gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  line.addEventListener(&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#39;click&amp;#39;&lt;/span&gt;, () =&amp;gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    synth.cancel();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    currentIndex &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; index;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    speakLine(currentIndex);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  });&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;});&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;updateUI();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;-它们如何工作&#34;&gt;✅ 它们如何工作&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;每一个句子都是&lt;code&gt;&amp;lt;span class=&amp;quot;sentence&amp;quot;&amp;gt;&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;我们迭代句子并使用&lt;code&gt;SpeechSynthesisUtterance&lt;/code&gt;大声朗读&lt;/li&gt;&#xA;&lt;li&gt;在朗读过程中，高亮正确的文本并滚动&lt;/li&gt;&#xA;&lt;li&gt;一个句子结束后，自动朗读下一个句子&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;-尾声&#34;&gt;🔚 尾声&lt;/h2&gt;&#xA;&lt;p&gt;阅读了本文，你理解了：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;浏览器TTS的运行原理&lt;/li&gt;&#xA;&lt;li&gt;如何实现动态高亮文本&lt;/li&gt;&#xA;&lt;li&gt;如何从零构建一个功能齐全的阅读界面&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;你可以扩展项目功能：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;在&lt;code&gt;localStorage&lt;/code&gt;保存阅读进度&lt;/li&gt;&#xA;&lt;li&gt;添加进度条&lt;/li&gt;&#xA;&lt;li&gt;加载外部文章或用户输入&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;</description>
    </item>
    <item>
      <title>信息节食</title>
      <link>https://blog.verdant.ee/posts/%E4%BF%A1%E6%81%AF%E8%8A%82%E9%A3%9F/</link>
      <pubDate>Thu, 03 Jul 2025 21:22:44 +0000</pubDate><author>i@glowisle.me (五葉地錦)</author>
      <guid>https://blog.verdant.ee/posts/%E4%BF%A1%E6%81%AF%E8%8A%82%E9%A3%9F/</guid>
      <description>&lt;h2 id=&#34;起因&#34;&gt;起因&lt;/h2&gt;&#xA;&lt;p&gt;信息节食这个概念，大概是我初一的时候在政治课本听说的。当时还不以为然，现在越来越觉得信息节食很重要。&lt;/p&gt;&#xA;&lt;h2 id=&#34;行动&#34;&gt;行动&lt;/h2&gt;&#xA;&lt;p&gt;我是个注意力比较涣散的人，可能是因为我常年熬夜等不健康的生活习惯，在家的时候注意力只能维持四十分钟左右，想持续一个小时的高效学习非常困难。其原因就在于我非常喜欢看QQ群，经过层层筛选后的QQ群是真正有共同话题的地方。问题就在于此，太有共同话题了，群友说的每一句话都能参与，这也就让我做一半事情就拿起手机看QQ，又是因为经过筛选，所以群很少，哪怕没有消息也要等上一会消息。长此以往，浪费时间还伤眼睛伤颈椎，而且极大部分消息都是娱乐，对提升自身完全没有帮助。所以我把QQ号退出了登录并在空间留下了邮箱，有重要且正经的事时，能高效交流。&lt;/p&gt;&#xA;&lt;p&gt;关于微信朋友圈，经过&lt;a href=&#34;https://www.yingyu5658.me/post/707697709/&#34;&gt;上一篇&lt;/a&gt;文章的思考后，我还是决定把它保留下来，对每个好友都设置了不看ta们，少看一些人虚假的合群、努力营造人设也清净，可以很好地自娱自乐了。这也是信息节食的一部分了。有什么想记录的，就发一条私密朋友圈，或者打开备忘录、Obsidian等能写字的地方记录下来，定期整理成文。&lt;/p&gt;&#xA;&lt;p&gt;我注销了N年前看的抖音、小红书、贴吧等账号，我知道那些平台上面也有优质内容，可查找、筛选、分辨太耗费精力了。幸好去年开始学习编程，就完全没有玩游戏的心思了，除了开一些游戏私服、制作插件以外没什么能让我重新打开游戏的理由。但今年暑假前有一个同学早就兴致勃勃地想和我联机Minecraft，盛情难却，不好推脱，但我实在对那游戏再提不起兴趣了。&lt;/p&gt;&#xA;&lt;p&gt;今天在学校时，我想过，如果我把这些信息全部切断，我该做点什么？其实信息节食的目的之一就包括少一些打扰我读书的声音，要做的事情之一就包括读书。说得笼统点，要做的事情就是阅读。我关注了一些公众号和博客，闲暇时间可以阅读公众号、博客、新闻，也可以听听播客。只是苦于每次想阅读公众号上的文章就要打开微信，看那些犯人的红点，听那些让人抓狂的消息提示音，所以我会寻找一种把信息聚合起来，像RSS那样。看腻了就继续磨练速写和琴技，总之有营养的事多了去。&lt;/p&gt;&#xA;&lt;p&gt;该去整理一下博客订阅列表了，不得不说，RSS真是伟大的发明。&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>宅</title>
      <link>https://blog.verdant.ee/posts/%E5%AE%85/</link>
      <pubDate>Mon, 30 Jun 2025 19:47:00 +0000</pubDate><author>i@glowisle.me (五葉地錦)</author>
      <guid>https://blog.verdant.ee/posts/%E5%AE%85/</guid>
      <description>&lt;p&gt;朋友上周几次约我出去打羽毛球，都被我婉拒了。那个周末刚刚考完期末，又是我最爱的阴雨天，很难不趁着大好时光不在家修养身心，而是冒着雨出去打羽毛球几个小时，大汗淋漓，虚弱疲惫地走回家，做什么事都提不起精神，睡觉也觉得浪费时间。在家里并没有什么很想干的事，我没有打游戏的习惯，很早之前就已经戒掉电子游戏。在家里的娱乐活动无非就是看书、听歌、画画、练琴，写代码折磨一下自己应该也能凑个数。我非常依赖在家里独处时的充电，只要远离人群的嘈杂即可。&lt;/p&gt;&#xA;&lt;p&gt;他们吐槽了一下我有点宅，只喜欢呆在家里，我无法反驳，确实是这样。没什么别的原因，单纯觉得家里安全，我是一个很怕死的人。今天去奶奶家拿饭，突然发现那里简直集齐了让我感到恐惧的所有元素。&lt;/p&gt;&#xA;&lt;p&gt;小区旁有一条铁轨，时常有火车呼啸而过，我对噪音极度敏感。走到楼栋前，左右两旁各两个楼道入口，正常人当然选择坐电梯，第二个让我感到恐惧的，幽闭的电梯。小时候奶奶为了保障我坐电梯的安全，会讲一些关于电梯的安全事故来吓唬我，虽然今天我已经知道了那些大部分都不是真的，而且电梯层层保护非常安全，但每次走到电梯里我都会死死盯着显示楼层的那块屏幕（虽然这并没有任何作用），生怕冲顶或坠落，命丧于电子棺材里。终于煎熬地乘完电梯，可以往家门走了。楼道前一个没有封窗的常年大开的窗户，狭窄的楼道里光是远远往下眺望就已经让人胆寒，但神奇的是有那么一两个瞬间，我竟然生出了跳下去的念头，我应该很怕死的。难以想象我童年的日子是怎么近乎每天都在这里度过的。&lt;/p&gt;&#xA;&lt;p&gt;同样地，我也抗拒旅游。也许是因为回忆起近些年旅游的滋味都不是很好。拖着个不懂事的弟弟，他总是会让所有人都不开心，大家不开心，我也没什么能开心的。冬天冷夏天热，景点人挤人，只有能量相当大的人才能感受到快乐吧。&lt;/p&gt;&#xA;&lt;p&gt;在朋友圈里看到一个亲戚发带着自家孩子出门去苏州旅游，我很佩服她。带着家人跨越小半个中国。其中有一张照片是她的孩子站在船上，身后就是一片水。这就是我恐惧的又一个元素，水。&lt;/p&gt;&#xA;&lt;p&gt;小时候泡温泉，失足滑落到大概高我两头的池子里，在水里扑腾了半分钟才出来，索性憋住一口气，当时我的身高是完全不足以控制自己的身体朝向的，最后抓住岸边的栏杆才保住小命。自那次以后，我对水的恐惧就开始伴随我到现在了，我也许一辈子都不会去苏州那种水乡或海边。&lt;/p&gt;&#xA;&lt;p&gt;每次出去旅游，甚至是上立交桥都会胡思乱想。比如车子突然失控从桥上坠落，家人走散，落水&amp;hellip;&amp;hellip;我无法继续写下去我的内心所想，这又会把我拉入恐惧。语文老师曾经读过我的某一篇文章后，评价道我是很典型的悲观主义者，无法反驳，确实典型。&lt;/p&gt;&#xA;&lt;p&gt;综上，我为了保命，保证精神不崩溃，会减少旅游等危险活动。&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>私密朋友圈</title>
      <link>https://blog.verdant.ee/posts/%E7%A7%81%E5%AF%86%E6%9C%8B%E5%8F%8B%E5%9C%88/</link>
      <pubDate>Sun, 29 Jun 2025 21:13:43 +0000</pubDate><author>i@glowisle.me (五葉地錦)</author>
      <guid>https://blog.verdant.ee/posts/%E7%A7%81%E5%AF%86%E6%9C%8B%E5%8F%8B%E5%9C%88/</guid>
      <description>&lt;p&gt;四天前，我发了自我的微信号注册以来，第一个私密朋友圈。九年了，从我五岁开始我就在用这个微信号，一个私密朋友圈都没有发过。&lt;/p&gt;&#xA;&lt;p&gt;那条朋友圈的内容是关于期末考试成绩的愿望，其实就是给自己定一个大概的目标分数。如果失败，设置成公开会很丢脸，虽然也不一定有人记得我。第一次发完后，我就猛然意识到，我发朋友圈，不是为了给谁看，立什么人设，装什么X，我只是享受那种表达和发送的感受。表达欲望谁都有，但发送的享受是从何而来的？&lt;/p&gt;&#xA;&lt;p&gt;我认为还是可以把它划分到表达的欲望中，发送这个动作，其实也是表达的一部分，而且也是相当重要的一部分，表达是一个需要多个参与者的活动，有内容输出者也有输入者，而发送才是真正的表达，把自己的想法输出给输入者。至于私密朋友圈中，输入者这个概念究竟是谁，我想是自己。发送这个动作实际上是一个思绪的出口，在发送之前的编辑过程只能被称为思考。出于自尊心，人际关系，把向外的表达欲内化，可以享受表达的乐趣，释放表达的欲望，同时也不必担心别人的看法如何。&lt;/p&gt;&#xA;&lt;p&gt;我想这种碎片化的输出是有益的，很多情绪之所以会扩大、升级，就是因为长期在内心积攒，而“流式处理”情绪，就可以有效避免溢出风险。我不愿意把自己的负面情绪过多带给别人，所以一般也不会跟别人聊天，若是说有效的排遣情绪的手段，只有睡觉和写作。但两者的时空要求都有些高，所以发一些尽自己可见的朋友圈表达真正想法或许是一个好方法。&lt;/p&gt;&#xA;&lt;p&gt;央视新闻公众号有一个“夜读”栏目，发表一些关于心理、情绪等方面疏导读者或起到治愈作用的文章。我观察到这类文章私密赞占比极高。&lt;/p&gt;&#xA;&lt;p&gt;&lt;figure class=&#34;image-caption&#34;&gt;&#xA;    &lt;img src=&#34;https://images.glowisle.me/image-20250629220254803.webp&#34; alt=&#34;夜读&#34;&gt;&#xA;    &lt;figcaption&gt;夜读&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&lt;/p&gt;&#xA;&lt;p&gt;这也许能说明一些人致力于隐藏自己真正的情绪感受，就怕无法找到情绪的出口，最后StackOverflow。&lt;/p&gt;</description>
    </item>
    <item>
      <title>这可能是最好的Hexo图片管理方案</title>
      <link>https://blog.verdant.ee/posts/%E8%BF%99%E5%8F%AF%E8%83%BD%E6%98%AF%E6%9C%80%E5%A5%BD%E7%9A%84hexo%E5%9B%BE%E7%89%87%E7%AE%A1%E7%90%86%E6%96%B9%E6%A1%88/</link>
      <pubDate>Sun, 29 Jun 2025 10:52:05 +0000</pubDate><author>i@glowisle.me (五葉地錦)</author>
      <guid>https://blog.verdant.ee/posts/%E8%BF%99%E5%8F%AF%E8%83%BD%E6%98%AF%E6%9C%80%E5%A5%BD%E7%9A%84hexo%E5%9B%BE%E7%89%87%E7%AE%A1%E7%90%86%E6%96%B9%E6%A1%88/</guid>
      <description>&lt;h2 id=&#34;前言&#34;&gt;前言&lt;/h2&gt;&#xA;&lt;p&gt;通常在Hexo博客中，我们管理图片资源都有以下两种方案：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;在&lt;code&gt;_post&lt;/code&gt;目录下新建文章同名文件夹&lt;/li&gt;&#xA;&lt;li&gt;在&lt;code&gt;source&lt;/code&gt;目录下新建images文件夹，存放所有图片&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;两种方法各有优劣，前者方便查找但污染目录，后者集中管理但维护成本高。所以就诞生出本文要介绍的方法——&lt;code&gt;images&lt;/code&gt;目录下新建文章同名目录&lt;/p&gt;&#xA;&lt;p&gt;这是一个折中的办法，既保留方法1的查找方便，又保留方法2的集中性。&lt;/p&gt;&#xA;&lt;h2 id=&#34;实现方法&#34;&gt;实现方法&lt;/h2&gt;&#xA;&lt;p&gt;&lt;strong&gt;创建脚本文件&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;在Hexo根目录的&lt;code&gt;scripts&lt;/code&gt;文件夹（若不存在则新建）下创建一个javascript脚本，我这里就命名为&lt;code&gt;auto-image-folder.js&lt;/code&gt;&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-js&#34; data-lang=&#34;js&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e67e80&#34;&gt;const&lt;/span&gt; fs &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; require(&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;fs&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e67e80&#34;&gt;const&lt;/span&gt; path &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; require(&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;path&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;hexo.on(&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;new&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e67e80&#34;&gt;function&lt;/span&gt;(data) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#e67e80&#34;&gt;const&lt;/span&gt; postName &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; path.basename(data.path, &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;.md&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#e67e80&#34;&gt;const&lt;/span&gt; imageDir &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; path.join(hexo.source_dir, &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;images&amp;#34;&lt;/span&gt;, postName)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#e67e80&#34;&gt;if&lt;/span&gt;(&lt;span style=&#34;color:#7a8478&#34;&gt;!&lt;/span&gt;fs.existsSync(imageDir)){&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                fs.mkdirSync(imageDir, {recusive&lt;span style=&#34;color:#7a8478&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e67e80&#34;&gt;true&lt;/span&gt;})&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;})&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;效果测试&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;hexo new &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;新文章&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;这时候就在images目录下新建了一个与文章同名的文件夹。&lt;/p&gt;&#xA;&lt;h2 id=&#34;编辑器设置优化&#34;&gt;编辑器设置优化&lt;/h2&gt;&#xA;&lt;h3 id=&#34;typora&#34;&gt;Typora&lt;/h3&gt;&#xA;&lt;p&gt;打开Typora → 偏好设置 → 图像&lt;/p&gt;&#xA;&lt;p&gt;设置：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;插入图片时：复制到指定路径&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;自定义路径：../source/images/${filename}/&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;勾选：优先使用相对路径&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;PS E:\blog&amp;gt; ls .\source\images\测试\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    目录: E:\blog\source\images\测试&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Mode                 LastWriteTime         Length Name&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;----                 -------------         ------ ----&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-a----         2025/6/29     11:14            229 image-20250629111411456.png&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;完成！&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>八下历史复习笔记</title>
      <link>https://blog.verdant.ee/posts/%E5%85%AB%E4%B8%8B%E5%8E%86%E5%8F%B2%E5%A4%8D%E4%B9%A0%E7%AC%94%E8%AE%B0/</link>
      <pubDate>Thu, 26 Jun 2025 19:17:46 +0000</pubDate><author>i@glowisle.me (五葉地錦)</author>
      <guid>https://blog.verdant.ee/posts/%E5%85%AB%E4%B8%8B%E5%8E%86%E5%8F%B2%E5%A4%8D%E4%B9%A0%E7%AC%94%E8%AE%B0/</guid>
      <description>&lt;ol&gt;&#xA;&lt;li&gt;临时宪法作用：《中国人民政治协商会议共同纲领》&lt;/li&gt;&#xA;&lt;li&gt;中国人民政治协商会议第一届全体会议确立的制度：中国共产党领导的多党合作和政治协商制度&lt;/li&gt;&#xA;&lt;li&gt;中国人民站立起来的标志：新中国成立&lt;/li&gt;&#xA;&lt;li&gt;中国半半社会结束的标志：新中国成立&lt;/li&gt;&#xA;&lt;li&gt;中国现代史开端：新中国成立&lt;/li&gt;&#xA;&lt;li&gt;祖国大陆统一，各族人民实现了大团结的标志：西藏和平解放&lt;/li&gt;&#xA;&lt;li&gt;抗美援朝目的：抗美援朝，保家卫国&lt;/li&gt;&#xA;&lt;li&gt;捍卫新中国安全，大大提高我国国际地位的事件：抗美援朝战争&lt;/li&gt;&#xA;&lt;li&gt;土地改革的依据：《中华人民共和国土地改革法》&lt;/li&gt;&#xA;&lt;li&gt;彻底摧毁我国存在2000多年的封建土地制度，消灭了地主阶级的标志：土地改革的完成&lt;/li&gt;&#xA;&lt;li&gt;新中国土改特点：采取保存富农经济，政治上中立富农的政策&lt;/li&gt;&#xA;&lt;li&gt;新中国成立后巩固政权的事件：西藏和平解放、抗美援朝、土地改革&lt;/li&gt;&#xA;&lt;li&gt;一五计划主要集中力量发展重工业&lt;/li&gt;&#xA;&lt;li&gt;使我国土地所有制从私有制变为公有制的事件是：三大改造的完成&lt;/li&gt;&#xA;&lt;li&gt;我国开始改变工业落后面貌，向社会主义工业化迈进的标志是：第一个五年计划的完成&lt;/li&gt;&#xA;&lt;li&gt;我国根本政治制度：人民代表大会制度&lt;/li&gt;&#xA;&lt;li&gt;人民代表大会制度确立的标志：第一届全国人民代表大会的召开&lt;/li&gt;&#xA;&lt;li&gt;我国第一部社会主义类型的、有史以来第一部真正反应人民利益的宪法：1954年《中华人民共和国宪法》&lt;/li&gt;&#xA;&lt;li&gt;我国社会主义改造的三个方面：农业、手工业、资本主义工商业&lt;/li&gt;&#xA;&lt;li&gt;我国社会主义改造的创举：赎买政策&lt;/li&gt;&#xA;&lt;li&gt;进入社会主义初级阶段的标志：三大改造的基本完成&lt;/li&gt;&#xA;&lt;li&gt;社会主义基本制度在我国建立起的标志：三大改造的完成&lt;/li&gt;&#xA;&lt;li&gt;三大改造实质：生产资料转变为社会主义公有制&lt;/li&gt;&#xA;&lt;li&gt;三年经济困难是指1956-1961年为克服经济困难提出的&lt;code&gt;调整、巩固、充实、提高&lt;/code&gt;的八字方针&lt;/li&gt;&#xA;&lt;li&gt;1958年，社会主义建设中出现的曲折和失误是：“大跃进”和人民公社化运动&lt;/li&gt;&#xA;&lt;li&gt;新中国成立后经历的最严重的挫折是：文化大革命&lt;/li&gt;&#xA;&lt;li&gt;文化大革命中最大冤案的受害者：刘少奇&lt;/li&gt;&#xA;&lt;li&gt;1967年6月，我国成功爆炸了第一颗氢弹&lt;/li&gt;&#xA;&lt;li&gt;1970年4月，我国成功发射了第一颗人造地球卫星&lt;/li&gt;&#xA;&lt;li&gt;1973年，我国在世界上首次培育成功强优势的籼型杂交水稻&lt;/li&gt;&#xA;&lt;li&gt;我国在社会主义建设火热年代涌现的英雄人物：王进喜、焦裕禄、雷锋&lt;/li&gt;&#xA;&lt;li&gt;中国共产党开辟的符合中国国情的道路是：中国特色社会主义道路&lt;/li&gt;&#xA;&lt;li&gt;新中国成立后一场深刻的思想解放运动是：真理标准问题大讨论&lt;/li&gt;&#xA;&lt;li&gt;新中国成立以来党的历史上具有深远意义的伟大转折是：中共十一届三中全会&lt;/li&gt;&#xA;&lt;li&gt;开启了改革开放和社会主义新时期的事件是：中共十一届三中全会的召开&lt;/li&gt;&#xA;&lt;li&gt;作出把党和国家工作中心转移到经济建设上来、实行改革开放的历史性决策的会议：中共十一届三中全会&lt;/li&gt;&#xA;&lt;li&gt;党和政府对农村实行的改革是：实行家庭联产承包责任制&lt;/li&gt;&#xA;&lt;li&gt;家庭联产承包责任制最早在安徽凤阳小岗村实行&lt;/li&gt;&#xA;&lt;li&gt;为农民致富和实现现代化开辟出的一条新道路是：发展农村乡镇企业&lt;/li&gt;&#xA;&lt;li&gt;城市经济体质改革的中心环节：增强企业活力&lt;/li&gt;&#xA;&lt;li&gt;提出要建立社会主义市场经济体质的会议：中共十四大&lt;/li&gt;&#xA;&lt;li&gt;我国经济特区的代表和对外开放的窗口：深圳&lt;/li&gt;&#xA;&lt;li&gt;1980开放的四个经济特区是：深圳、珠海、汕头、厦门&lt;/li&gt;&#xA;&lt;li&gt;对外开放的意义：引进外资技术、扩大对外影响、为改革开放探路&lt;/li&gt;&#xA;&lt;li&gt;我国对外开放的格局：经济特区&amp;ndash;沿海开放城市&amp;ndash;沿海经济开放区&amp;ndash;内地&lt;/li&gt;&#xA;&lt;li&gt;对外开放的特点：全方位、多层次、宽领域&lt;/li&gt;&#xA;&lt;li&gt;为我国参与经济全球化开辟了新途径的事件：中国加入世界贸易组织&lt;/li&gt;&#xA;&lt;li&gt;提出“建设有中国特色的社会主义”的会议是：中共十二大&lt;/li&gt;&#xA;&lt;li&gt;阐述了社会主义初级阶段的理论，明确概括了党在社会主义初级阶段的基本路线的会议是：中共十三大&lt;/li&gt;&#xA;&lt;li&gt;1992年进一步解放了人们的思想，推动改革开放和社会主义现代化建设进入新阶段的是：邓小平南方谈话&lt;/li&gt;&#xA;&lt;li&gt;我国改革开放和社会主义现代化的总设计师：邓小平&lt;/li&gt;&#xA;&lt;li&gt;马克思主义在中国发展的新阶段是：邓小平理论&lt;/li&gt;&#xA;&lt;li&gt;把邓小平理论确立为党的指导思想的会议是：中共十五大&lt;/li&gt;&#xA;&lt;li&gt;把江泽民三个代表重要思想确立为中国共产党指导思想的会议是：中共十六大&lt;/li&gt;&#xA;&lt;li&gt;把科学发展观确立为中国共产党的指导思想的会议是中共十八大&lt;/li&gt;&#xA;&lt;li&gt;习近平新时代中国特色社会主义思想被确立为中国共产党必须长期坚持的指导思想的会议是：中共十九大&lt;/li&gt;&#xA;&lt;li&gt;马克思主义中国化、时代化的新的飞跃是：习近平新时代中国特色社会主义思想&lt;/li&gt;&#xA;&lt;li&gt;为了实现中国梦，中国共产党实现的奋斗目标是：“两个一百年”奋斗目标&lt;/li&gt;&#xA;&lt;li&gt;中共十八届五中全会提出的新发展理念是：创新、协调、绿色、开放、共享&lt;/li&gt;&#xA;&lt;li&gt;宣布我国实现了第一个百年奋斗目标，全面建成小康社会的会议是：庆祝中国共产党成立100周年大会&lt;/li&gt;&#xA;&lt;li&gt;重点总结新时代党和国家取得的历史性成就，发生的历史性变革和积累的新鲜经验的会议是：中共十九届六中全会&lt;/li&gt;&#xA;&lt;li&gt;做出了统筹推进“五位一体”总体布局、协调推进“四个全面”战略布局全面部署的会议是：中共二十大&lt;/li&gt;&#xA;&lt;li&gt;为解决我国民族问题确立的基本政策和基本政治制度是：民族区域自治制度&lt;/li&gt;&#xA;&lt;li&gt;我国建立的第一个自治区：内蒙古自治区&lt;/li&gt;&#xA;&lt;li&gt;20世纪末，我国实行的为民族地区加快发展，创造了巨大的历史机遇的政策是：西部大开发&lt;/li&gt;&#xA;&lt;li&gt;邓小平从维护祖国和中华民族根本利益出发，提出的伟大构想是：“一国两制”伟大构想&lt;/li&gt;&#xA;&lt;li&gt;香港回归：1997.7.1&lt;/li&gt;&#xA;&lt;li&gt;澳门回归：1999.12.20&lt;/li&gt;&#xA;&lt;li&gt;中国人民洗雪了百年国耻，在完成祖国统一大业的道路上迈出的重要一步的标志是：香港、澳门的回归&lt;/li&gt;&#xA;&lt;li&gt;改革开放后对台基本方针：和平统一、一国两制&lt;/li&gt;&#xA;&lt;li&gt;海峡两岸近四十年的隔绝状态终于被打破，两岸关系发生了历史性变化的事件：台湾当局开始被迫调整“三不”政策&lt;/li&gt;&#xA;&lt;li&gt;标志海峡两岸关系的发展迈出历史性的重要一步的事件是：海基会与海协会达成九二共识&lt;/li&gt;&#xA;&lt;li&gt;九二共识的内涵：海峡两岸均坚持一个中国原则&lt;/li&gt;&#xA;&lt;li&gt;全面阐述了新时代解决台湾问题的总体方略的文件是：《台湾问题与新时代中国统一事业》白皮书&lt;/li&gt;&#xA;&lt;li&gt;中共二十大进一步强调实现两岸统一的最佳方式是：“和平统一、一国两制”方针&lt;/li&gt;&#xA;&lt;li&gt;中国人民解放军的第一支海军部队是：华东军区海军&lt;/li&gt;&#xA;&lt;li&gt;2012.9我国的第一艘航空母舰：辽宁舰&lt;/li&gt;&#xA;&lt;li&gt;中国战略威慑的核心力量：导弹部队&lt;/li&gt;&#xA;&lt;li&gt;2015年，第二炮兵部队更名为火箭军&lt;/li&gt;&#xA;&lt;li&gt;我国的五大军种：陆军、海军、空军、火箭军、战略支援部队&lt;/li&gt;&#xA;&lt;li&gt;五大战区：东部、南部、西部、中部战区&lt;/li&gt;&#xA;&lt;li&gt;形成的新格局：形成中央军委指导下的陆军、海军、空军、火箭军等军种，军事航天不对、网络空间部队、信息支援部队、通勤保障部队等兵种的新型兵种结构布局&lt;/li&gt;&#xA;&lt;li&gt;新中国成立后奉行的外交政策：独立自主的和平外交政策&lt;/li&gt;&#xA;&lt;li&gt;周恩来提出的处理国与国之间关系的基本准测：和平共处五项原则&lt;/li&gt;&#xA;&lt;li&gt;和平共处五项原则的内容：互相尊重主权和领土完整、互不侵犯、互不干涉内政、平等互利、和平共处&lt;/li&gt;&#xA;&lt;li&gt;1955年万隆会议召开的地点：印度尼西亚&lt;/li&gt;&#xA;&lt;li&gt;万隆会议地位：第一次没有西方殖民主义国家参加的亚非会议&lt;/li&gt;&#xA;&lt;li&gt;万隆会议上周恩来提出的外交方针：“求同存异”方针&lt;/li&gt;&#xA;&lt;li&gt;20世纪70年代，中国外交取得重大胜利的事件：中华人民共和国回复在联合国的合法席位&lt;/li&gt;&#xA;&lt;li&gt;中美关系开始走向正常化的标志是：中美双方签署并发表了《联合公报》&lt;/li&gt;&#xA;&lt;li&gt;中国特色大国外交全面推进，形成的外交布局是：全方位、多层次、立体化&lt;/li&gt;&#xA;&lt;li&gt;1989年成立的亚洲太平洋地区的经济合作机制，中国与1991年加入亚太经合组织&lt;/li&gt;&#xA;&lt;li&gt;我国成功发射的第一课人造地球卫星：东方红一号&lt;/li&gt;&#xA;&lt;li&gt;为两弹的研究做出突出贡献的科学家代表有：钱学森、邓稼先&lt;/li&gt;&#xA;&lt;li&gt;我国首位乘坐神舟五号载人飞船升入太空的宇航员是：杨利伟&lt;/li&gt;&#xA;&lt;li&gt;成功培育籼型杂交水稻，被称为杂交水稻之父的科学家是：袁隆平&lt;/li&gt;&#xA;&lt;li&gt;领导科研团队发现青蒿素，获得2015年诺贝尔生理学或医学奖的中国药学家是：屠呦呦&lt;/li&gt;&#xA;&lt;li&gt;2012年获得诺贝尔文学奖的中国作家：莫言&lt;/li&gt;&#xA;&lt;li&gt;1956年，毛泽东提出在科学文化工作中实行“百花齐放、百家争鸣”的方针&lt;/li&gt;&#xA;&lt;li&gt;新中国成立后，使我国人民衣食住行方面发生巨大变化的政策是：改革开放&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;</description>
    </item>
    <item>
      <title>人生中第一次大考</title>
      <link>https://blog.verdant.ee/posts/%E4%BA%BA%E7%94%9F%E4%B8%AD%E7%AC%AC%E4%B8%80%E6%AC%A1%E5%A4%A7%E8%80%83/</link>
      <pubDate>Mon, 23 Jun 2025 20:18:10 +0000</pubDate><author>i@glowisle.me (五葉地錦)</author>
      <guid>https://blog.verdant.ee/posts/%E4%BA%BA%E7%94%9F%E4%B8%AD%E7%AC%AC%E4%B8%80%E6%AC%A1%E5%A4%A7%E8%80%83/</guid>
      <description>&lt;p&gt;会考是我人生中经历的第一次大考，不难，考试前一两周也写了不下三四十套卷子。具体考试日期就在中考最后一天的下午。打这段字的时候，我正在开向考点的车上。&lt;/p&gt;&#xA;&lt;p&gt;考前两天我几乎没复习任何东西，对了一张地理卷子的答案，94/100，看着网上初一地理的课，做了些复习笔记。遗憾的是，那篇笔记我忘记了push到博客上，所以我才有时间在这里写字。那两天完全无心复习 。唯一留作业的历史和数学两科中，只有数学勉勉强强写了一张卷子，今天考完回来开始写作业吧。&lt;/p&gt;&#xA;&lt;p&gt;每次各种略微重要的考试前，总有一群大脑发育不完全的懒猪在朋友圈、QQ空间转各种迷信性质的图片。我也发了一个说说。&#xA;&lt;figure class=&#34;image-caption&#34;&gt;&#xA;    &lt;img src=&#34;https://images.glowisle.me/Pasted%20image%2020250623202023.webp&#34; alt=&#34;&#34;&gt;&#xA;    &lt;figcaption&gt;&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;我认为我说的非常有道理。&lt;/p&gt;&#xA;&lt;p&gt;有些生理意义上的头疼，前一晚做了些梦，很乱，没睡好。早上六点家里的幼畜例行吵闹，两个小时的睡眠空缺又让我的精神雪上加霜，起床后眼睛肿了，可能又碰到什么过敏物质。&lt;/p&gt;&#xA;&lt;p&gt;出发前去买矿泉水，为了节省时间，抬起脚跑了几步，突然发现自己已经很长时间没跑过了。平常在学校只有上学、放学、打饭、领卷子会起身，其余时间都是坐着，下课就睡觉。&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;p&gt;现在这段文字是从考点出来后写下的。&lt;/p&gt;&#xA;&lt;p&gt;考点学校比我念书的学校环境好多了，教室宽敞明亮，楼道也很干净，桌椅看起来都是新的。生物有一道种植大棚里二氧化碳发生器的作用的题，和一道肾单位尿液再吸收的题，前者超纲，后者没复习到。无论怎样，考完了。&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>会考地理复习笔记</title>
      <link>https://blog.verdant.ee/posts/%E4%BC%9A%E8%80%83%E5%9C%B0%E7%90%86%E5%A4%8D%E4%B9%A0%E7%AC%94%E8%AE%B0/</link>
      <pubDate>Sun, 22 Jun 2025 08:49:40 +0000</pubDate><author>i@glowisle.me (五葉地錦)</author>
      <guid>https://blog.verdant.ee/posts/%E4%BC%9A%E8%80%83%E5%9C%B0%E7%90%86%E5%A4%8D%E4%B9%A0%E7%AC%94%E8%AE%B0/</guid>
      <description>&lt;h2 id=&#34;地球公转自转与季节气候&#34;&gt;地球公转自转与季节气候&lt;/h2&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;东西半球分界线：20W 160E&lt;/li&gt;&#xA;&lt;li&gt;地球自转方向：自西向东&lt;/li&gt;&#xA;&lt;li&gt;南北半球季节相反&lt;/li&gt;&#xA;&lt;li&gt;夏至日太阳直射北回归线，北半球昼最长也最短，南半球昼最短夜最长，北极圈及其以北极昼，南极圈以其南极夜&lt;/li&gt;&#xA;&lt;li&gt;冬至日太阳直射南回归线，北半球昼最短夜最长，南半球昼最长夜最短，北极圈及其以北极夜，南极圈及其以南极昼&lt;/li&gt;&#xA;&lt;li&gt;春分秋分，太阳直射赤道，昼夜等长&#xA;&lt;figure class=&#34;image-caption&#34;&gt;&#xA;    &lt;img src=&#34;https://images.glowisle.me/Pasted%20image%2020250622085510.webp&#34; alt=&#34;地球公转示意图&#34;&gt;&#xA;    &lt;figcaption&gt;地球公转示意图&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&lt;/li&gt;&#xA;&lt;li&gt;根据各地获得太阳光照的多少，把地球表面分为五个带：&lt;strong&gt;热带、北温带、南温带、北寒带、南寒带&lt;/strong&gt;&#xA;&lt;figure class=&#34;image-caption&#34;&gt;&#xA;    &lt;img src=&#34;https://images.glowisle.me/Pasted%20image%2020250622085617.webp&#34; alt=&#34;&#34;&gt;&#xA;    &lt;figcaption&gt;&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h2 id=&#34;地图&#34;&gt;地图&lt;/h2&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;比例尺=图上距离/实地距离，指示表大多指向正北方向&lt;/li&gt;&#xA;&lt;li&gt;同一条等高线上的海拔相同；等高线越密集，坡度越陡；等高线越稀疏，坡度越缓。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;等高线上不同的山体部位&lt;/strong&gt;&#xA;&lt;figure class=&#34;image-caption&#34;&gt;&#xA;    &lt;img src=&#34;https://images.glowisle.me/Pasted%20image%2020250622085815.webp&#34; alt=&#34;山峰&#34;&gt;&#xA;    &lt;figcaption&gt;山峰&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;山峰：等高线闭合，数值从中间向四周递减&#xA;&lt;figure class=&#34;image-caption&#34;&gt;&#xA;    &lt;img src=&#34;https://images.glowisle.me/Pasted%20image%2020250622085858.webp&#34; alt=&#34;山脊&#34;&gt;&#xA;    &lt;figcaption&gt;山脊&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&lt;/li&gt;&#xA;&lt;li&gt;山脊：等高线的弯曲部分向低处突出&#xA;&lt;figure class=&#34;image-caption&#34;&gt;&#xA;    &lt;img src=&#34;https://images.glowisle.me/Pasted%20image%2020250622090016.webp&#34; alt=&#34;山谷&#34;&gt;&#xA;    &lt;figcaption&gt;山谷&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&lt;/li&gt;&#xA;&lt;li&gt;山谷：等高线的弯曲部分向高处突出，常形成河流&#xA;&lt;figure class=&#34;image-caption&#34;&gt;&#xA;    &lt;img src=&#34;https://images.glowisle.me/Pasted%20image%2020250622090117.webp&#34; alt=&#34;陡崖&#34;&gt;&#xA;    &lt;figcaption&gt;陡崖&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&lt;/li&gt;&#xA;&lt;li&gt;陡崖：等高线重叠，适合开展攀岩运动&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;陆地表面的地形类型&lt;/strong&gt;&#xA;1.高原：海拔在500米以上，面积较大，外围较陡，内部起伏较为缓和&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;大洲分界线&lt;/strong&gt;&#xA;&lt;figure class=&#34;image-caption&#34;&gt;&#xA;    &lt;img src=&#34;https://images.glowisle.me/Pasted%20image%2020250622090805.webp&#34; alt=&#34;&#34;&gt;&#xA;    &lt;figcaption&gt;&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;亚欧分界线：乌拉尔山脉、乌拉尔和、厉害、大高加索山脉、黑海、土耳其海峡&lt;/li&gt;&#xA;&lt;li&gt;亚非分界线：苏伊士运河&lt;/li&gt;&#xA;&lt;li&gt;北美南美分界线：巴拿马运河&lt;/li&gt;&#xA;&lt;li&gt;欧非分界线：直布罗陀海峡&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h3 id=&#34;板块构造学说&#34;&gt;板块构造学说&lt;/h3&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;板块内部地壳比较稳定；板块与板块交界的地带，地壳比较活跃，多火山地震&lt;/li&gt;&#xA;&lt;li&gt;在板块交界处，两个板块发生张烈，。常常形成裂谷或海洋；两个板块发生碰撞，在陆地常常形成山脉&#xA;&lt;figure class=&#34;image-caption&#34;&gt;&#xA;    &lt;img src=&#34;https://images.glowisle.me/Pasted%20image%2020250622091156.webp&#34; alt=&#34;六大板块分布示意图&#34;&gt;&#xA;    &lt;figcaption&gt;六大板块分布示意图&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&lt;/li&gt;&#xA;&lt;li&gt;世界上许多高大绵长的山脉主要分布在板块挤压碰撞的地带，如阿尔卑斯——喜马拉雅山系，科迪勒拉山系等&lt;/li&gt;&#xA;&lt;li&gt;世界上的火山和地震也集中分布在地壳比较活跃的板块交界地带，例如环太平洋地带和地中海——喜马拉雅地带&#xA;&lt;figure class=&#34;image-caption&#34;&gt;&#xA;    &lt;img src=&#34;https://images.glowisle.me/Pasted%20image%2020250622091407.webp&#34; alt=&#34;&#34;&gt;&#xA;    &lt;figcaption&gt;&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;</description>
    </item>
    <item>
      <title>Tmux配置记录</title>
      <link>https://blog.verdant.ee/posts/tmux%E9%85%8D%E7%BD%AE%E8%AE%B0%E5%BD%95/</link>
      <pubDate>Sat, 21 Jun 2025 14:19:36 +0000</pubDate><author>i@glowisle.me (五葉地錦)</author>
      <guid>https://blog.verdant.ee/posts/tmux%E9%85%8D%E7%BD%AE%E8%AE%B0%E5%BD%95/</guid>
      <description>&lt;p&gt;TMux 是终端复用神器，让你在一个终端窗口管理多个会话、窗口和窗格。&lt;/p&gt;&#xA;&lt;p&gt;基础操作：启动Tmux&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;tmux&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;所以我选择在&lt;code&gt;~/.bashrc&lt;/code&gt;里加上这句，每次打开终端都会自动进入tmux。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;需要掌握的概念&lt;/strong&gt;：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;会话（Session）：长期运行的终端环境。&lt;/li&gt;&#xA;&lt;li&gt;窗口（Window）：会话中的标签页。&lt;/li&gt;&#xA;&lt;li&gt;窗格（Pane）：窗口中的分屏。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;默认快捷键：&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;操作&lt;/th&gt;&#xA;          &lt;th&gt;快捷键&lt;/th&gt;&#xA;          &lt;th&gt;说明&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;strong&gt;会话管理&lt;/strong&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;脱离会话&lt;/td&gt;&#xA;          &lt;td&gt;&lt;code&gt;Ctrl+b d&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;后台运行会话&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;查看会话列表&lt;/td&gt;&#xA;          &lt;td&gt;&lt;code&gt;Ctrl+b s&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;方向键选择并进入&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;重命名当前会话&lt;/td&gt;&#xA;          &lt;td&gt;&lt;code&gt;Ctrl+b $&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;strong&gt;窗口管理&lt;/strong&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;新建窗口&lt;/td&gt;&#xA;          &lt;td&gt;&lt;code&gt;Ctrl+b c&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;关闭当前窗口&lt;/td&gt;&#xA;          &lt;td&gt;&lt;code&gt;Ctrl+b &amp;amp;&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;切换窗口&lt;/td&gt;&#xA;          &lt;td&gt;&lt;code&gt;Ctrl+b 0~9&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;切换到指定编号窗口&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;窗口列表&lt;/td&gt;&#xA;          &lt;td&gt;&lt;code&gt;Ctrl+b w&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;可视化选择窗口&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;strong&gt;窗格管理&lt;/strong&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;水平分割窗格&lt;/td&gt;&#xA;          &lt;td&gt;&lt;code&gt;Ctrl+b &amp;quot;&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;垂直分割窗格&lt;/td&gt;&#xA;          &lt;td&gt;&lt;code&gt;Ctrl+b %&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;切换窗格&lt;/td&gt;&#xA;          &lt;td&gt;&lt;code&gt;Ctrl+b 方向键&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;关闭当前窗格&lt;/td&gt;&#xA;          &lt;td&gt;&lt;code&gt;Ctrl+b x&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;最大化/恢复窗格&lt;/td&gt;&#xA;          &lt;td&gt;&lt;code&gt;Ctrl+b z&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;临时全屏当前窗格&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;p&gt;&lt;strong&gt;配置自定义（~/.tmux.conf）&lt;/strong&gt;：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;set-option -g default-shell /bin/bash   # 强制使用 Bash&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;set-option -g default-command /bin/bash # 确保新会话/Pane 也使用 Bash&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;unbind H   # 移除 H 的绑定&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;unbind L   # 移除 L 的绑定&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;# 启用鼠标支持&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;set -g mouse on&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;# 键&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;set -g prefix C-w&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;unbind C-b&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;bind -r Left previous-window     # 前缀键+←：左移窗口&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;bind -r Right next-window        # 前缀键+→：右移窗口&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;# 屏幕分割&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;bind v split-window -h # 前缀键+v垂直分割&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;bind -n C-Left resize-pane -L 5   # Ctrl+←：向左扩大窗格 5 单位&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;bind -n C-Right resize-pane -R 5  # Ctrl+→：向右扩大窗格 5 单位&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; ________________&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;lt; fuck you tmux! &amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; ----------------&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        \   ^__^&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;         \  (oo)\_______&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            (__)\       )\/\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                ||----w |&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                ||     ||&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>超市见闻</title>
      <link>https://blog.verdant.ee/posts/%E8%B6%85%E5%B8%82%E8%A7%81%E9%97%BB/</link>
      <pubDate>Fri, 20 Jun 2025 20:24:57 +0000</pubDate><author>i@glowisle.me (五葉地錦)</author>
      <guid>https://blog.verdant.ee/posts/%E8%B6%85%E5%B8%82%E8%A7%81%E9%97%BB/</guid>
      <description>&lt;p&gt;今天中考布置考场，只上半天课。下周一就是地生会考了，看完考场回来，已经接近一点，早点没吃，去便利店买点面包垫肚子，看到了两个其他学校的学生一人拿着一瓶酒，在台前结账。&lt;/p&gt;&#xA;&lt;p&gt;一开始我并不确定那是不是酒，但当机器冰冷的女声提示工作人员确认顾客是否成年，禁止向未成年人出售烟酒，再加之她们两个鬼鬼祟祟的表情，可以断定就是酒了。那两个人面容有些憔悴，脸上圈着黑眼圈，快三十度的天，依然穿着校服外套，敞开怀，驼着背。看起来跟我同龄。其中一个人尽力用只能让对方听到的声音说出：“吓死我了。”很显然，她失败了。但买酒成功了，别的失败对她讲都不重要了。事发时，我就在她们身后排队结账，这一切都被我完整地看在眼里。&lt;/p&gt;&#xA;&lt;p&gt;结账的小哥麻木地接过瓶子扫码，提醒付款，他好像已经习以为常了。《未成年人保护法》、《酒类流通管理办法》都明确规定禁止向未成年人出售烟酒，所谓上有政策，下有对策。这对策妙，无视法律和政策。&lt;/p&gt;&#xA;&lt;p&gt;我个人对烟酒一直没什么好印象，抽烟的学生都是不良；喝酒的大人耍酒疯很麻烦，不耍也很烦人；旁边有人抽烟难免被二手烟呛到，完全无法呼吸。消遣排解的方式有很多，偏偏选择伤害自己身心又对别人无益的那一个。&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>第三次世界大战</title>
      <link>https://blog.verdant.ee/posts/%E7%AC%AC%E4%B8%89%E6%AC%A1%E4%B8%96%E7%95%8C%E5%A4%A7%E6%88%98/</link>
      <pubDate>Thu, 19 Jun 2025 23:09:59 +0000</pubDate><author>i@glowisle.me (五葉地錦)</author>
      <guid>https://blog.verdant.ee/posts/%E7%AC%AC%E4%B8%89%E6%AC%A1%E4%B8%96%E7%95%8C%E5%A4%A7%E6%88%98/</guid>
      <description>&lt;p&gt;我始终坚信，也能深刻体会到一句话——林子大了什么鸟都有。&lt;/p&gt;&#xA;&lt;p&gt;最近两天伊以冲突闹得很大，工厂停运、百姓流亡，民不聊生，当地居民都处于恐慌和焦虑中。&lt;/p&gt;&#xA;&lt;p&gt;我不对局势做点评，也不站队有立场。我发现了身边有一些人，对战争非常感兴趣，甚至期盼战争。&lt;/p&gt;&#xA;&lt;p&gt;难以想象、不可理喻、不是人类，无法共情。我开始怀疑我自己的立场和价值观是不是有问题。&lt;/p&gt;&#xA;&lt;p&gt;印象很深的一句话：“第三次世界大战要开始了，太好了。”&lt;/p&gt;&#xA;&lt;p&gt;我说的明白点，打仗谁能好过？用你跟泌尿系统一次握手都没进行过的低能连接的大脑好好想想，打仗谁能好过？&lt;strong&gt;你是想被送到前线，给上头那帮老家伙们当棋子，当挡子弹的肉盾，还是想当送死的炮灰？&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;还是你觉得打仗就能变革，改变你社会蛀虫父母累赘的现状，还是觉得你FPS游戏经验丰富，上战场能大杀四方为国争光？别跪着求对方不要用钝刀割下自己的猪头都很强了。上了战场就祈求你看军事视频和意淫战争的经验有用吧。&lt;/p&gt;&#xA;&lt;p&gt;好日子过久了，忘却战争的残酷，战争被娱乐化，这种人就出现了。&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>高超的表达能力</title>
      <link>https://blog.verdant.ee/posts/%E9%AB%98%E8%B6%85%E7%9A%84%E8%A1%A8%E8%BE%BE%E8%83%BD%E5%8A%9B/</link>
      <pubDate>Thu, 19 Jun 2025 23:05:24 +0000</pubDate><author>i@glowisle.me (五葉地錦)</author>
      <guid>https://blog.verdant.ee/posts/%E9%AB%98%E8%B6%85%E7%9A%84%E8%A1%A8%E8%BE%BE%E8%83%BD%E5%8A%9B/</guid>
      <description>&lt;p&gt;“帮我拿个东西。”&lt;/p&gt;&#xA;&lt;p&gt;“拿什么东西？”&lt;/p&gt;&#xA;&lt;p&gt;“就是那个。”&lt;/p&gt;&#xA;&lt;p&gt;“在哪里？”&lt;/p&gt;&#xA;&lt;p&gt;“就在那里。”&lt;/p&gt;&#xA;&lt;p&gt;“到底在哪里？”&lt;/p&gt;&#xA;&lt;p&gt;“就是在那里！”&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>好文章</title>
      <link>https://blog.verdant.ee/posts/%E5%A5%BD%E6%96%87%E7%AB%A0/</link>
      <pubDate>Wed, 18 Jun 2025 21:53:51 +0000</pubDate><author>i@glowisle.me (五葉地錦)</author>
      <guid>https://blog.verdant.ee/posts/%E5%A5%BD%E6%96%87%E7%AB%A0/</guid>
      <description>&lt;h2 id=&#34;心灵小语&#34;&gt;心灵小语&lt;/h2&gt;&#xA;&lt;p&gt;我们的语文作业从初一开始就偶尔留一项叫“心灵小语“的作业，文风可以和博客比较相似。但毕竟是要给老师看的，措辞还是要严谨一点。前两天的语文课老师读了两篇文章，巧了，我最受不了这种文章————用力堆砌耀眼夺目的辞藻，如青春、奋斗、阳光、生活。这就是老师眼中的好文章，扮演一个老师喜欢的性格，讲写点能敲出回声的文字，点意林风格的俗套故事。&lt;/p&gt;&#xA;&lt;p&gt;对不起，这种耀眼的词汇会让我被燃烧成灰。&lt;/p&gt;&#xA;&lt;p&gt;我不是标榜我的文章写的多好，只是单纯厌恶这种堆辞藻、假大空。以我的水平五十步笑百步又如何，名为心灵小语，心灵敲出的回声比文字还大，老师美其名曰：”以文观人”，好好观吧，多观观吹口气就破的纸壳吧；多观观用图钉钉在脸上的真诚的笑吧；多观观炽热的可燃的木头削成的心灵吧。烧了都嫌&lt;strong&gt;恶臭&lt;/strong&gt;。&lt;/p&gt;&#xA;&lt;p&gt;活了十四年，我感受到的所谓的青春就是四五十个人挤在一个小屋子里研究一个这辈子也不会用到的式子的结果是什么。明明任何一个理科都非常有趣，但总是被迫去研究最没有意义的一个环节，痛苦又无奈。所以我痛恨代数，几何多在探究“为什么“而不是”是什么”。这才是数学让人有成就感的一环。&lt;/p&gt;&#xA;&lt;p&gt;现在明白了，大家很爱说上岸这个词，原来是从苦海游上来了。&lt;/p&gt;&#xA;&lt;p&gt;真他妈恶心，我的青春啊。&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>给比我岁数还大的电脑装Fedora</title>
      <link>https://blog.verdant.ee/posts/%E7%BB%99%E6%AF%94%E6%88%91%E5%B2%81%E6%95%B0%E8%BF%98%E5%A4%A7%E7%9A%84%E7%94%B5%E8%84%91%E8%A3%85fedora/</link>
      <pubDate>Fri, 13 Jun 2025 20:11:49 +0000</pubDate><author>i@glowisle.me (五葉地錦)</author>
      <guid>https://blog.verdant.ee/posts/%E7%BB%99%E6%AF%94%E6%88%91%E5%B2%81%E6%95%B0%E8%BF%98%E5%A4%A7%E7%9A%84%E7%94%B5%E8%84%91%E8%A3%85fedora/</guid>
      <description>&lt;h2 id=&#34;前言&#34;&gt;前言&lt;/h2&gt;&#xA;&lt;p&gt;&lt;figure class=&#34;image-caption&#34;&gt;&#xA;    &lt;img src=&#34;https://images.glowisle.me/ccb6ab92150b3314a3cb09eee8102a56.webp&#34; alt=&#34;&#34;&gt;&#xA;    &lt;figcaption&gt;&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&lt;/p&gt;&#xA;&lt;p&gt;印象中，这台电脑在我很小的时候就存在了，我爸的网盘里至今还有我当时用这台电脑播放江南Style，我在床上跳舞的视频。&lt;/p&gt;&#xA;&lt;p&gt;这台机子开Powershell都卡，更不用说日常使用。&lt;/p&gt;&#xA;&lt;p&gt;&lt;figure class=&#34;image-caption&#34;&gt;&#xA;    &lt;img src=&#34;https://images.glowisle.me/de5fce2eac7705b9df0d9a6e76ebf799.webp&#34; alt=&#34;&#34;&gt;&#xA;    &lt;figcaption&gt;&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;我甚至都不想在这台电脑上截图，当拍屏大师吧。&lt;/p&gt;&#xA;&lt;p&gt;听说Linux用户有个刻板印象就是，用着十几年前的笔记本，从来不用最新设备，那这不刚好吻合上了吗。&lt;/p&gt;&#xA;&lt;p&gt;诶&amp;hellip;&amp;hellip;等等，我&lt;a href=&#34;https://www.yingyu5658.me/post/3691550015/&#34;&gt;之前&lt;/a&gt;好像说过不折腾了？算了，反正Fedora没有Arch那么折腾（吧）。&lt;/p&gt;&#xA;&lt;h2 id=&#34;正文&#34;&gt;正文&lt;/h2&gt;&#xA;&lt;p&gt;&lt;figure class=&#34;image-caption&#34;&gt;&#xA;    &lt;img src=&#34;https://images.glowisle.me/Pasted%20image%2020250613202911.webp&#34; alt=&#34;&#34;&gt;&#xA;    &lt;figcaption&gt;&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&lt;/p&gt;&#xA;&lt;p&gt;镜像下好后，用Rufus拷到U盘。&lt;/p&gt;&#xA;&lt;p&gt;插到电脑上，额，先让我研究一下BIOS怎么进&amp;hellip;&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;&lt;figure class=&#34;image-caption&#34;&gt;&#xA;    &lt;img src=&#34;https://images.glowisle.me/25890eb0322bbe6620bd4edc0b9b9e9e.webp&#34; alt=&#34;&#34;&gt;&#xA;    &lt;figcaption&gt;&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;把#1改成刚刚做的启动盘。保存后重启。&lt;/p&gt;&#xA;&lt;p&gt;&lt;figure class=&#34;image-caption&#34;&gt;&#xA;    &lt;img src=&#34;https://images.glowisle.me/092ae6cfdd02bb72a2f02674392afdd6.webp&#34; alt=&#34;&#34;&gt;&#xA;    &lt;figcaption&gt;&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;哎，没想到第一难在这等着我呢。引导进不去。难道是我打开方式有问题？重新进BIOS，#1设置成UEFI巴拉巴拉试试。&lt;/p&gt;&#xA;&lt;p&gt;&lt;figure class=&#34;image-caption&#34;&gt;&#xA;    &lt;img src=&#34;https://images.glowisle.me/3c968f8512852e157f43355f88d53ed8.webp&#34; alt=&#34;&#34;&gt;&#xA;    &lt;figcaption&gt;&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;诶！成了，等一阵黑屏过后就弹Fedora Logo了。&lt;/p&gt;&#xA;&lt;p&gt;&lt;figure class=&#34;image-caption&#34;&gt;&#xA;    &lt;img src=&#34;https://images.glowisle.me/b6cec1104a907293109eb1f94eb175c8.webp&#34; alt=&#34;&#34;&gt;&#xA;    &lt;figcaption&gt;&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;直接端上来吧！不管三七二十八直接Install！&lt;/p&gt;&#xA;&lt;p&gt;整个安装过程还是很傻瓜式的，只要有小学英文基础点点点就好了。&lt;/p&gt;&#xA;&lt;p&gt;&lt;figure class=&#34;image-caption&#34;&gt;&#xA;    &lt;img src=&#34;https://images.glowisle.me/01b262c2846e87f4dcaa8726cbf2a347.webp&#34; alt=&#34;&#34;&gt;&#xA;    &lt;figcaption&gt;&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;虽然但是，这个简体中文怎么标的是新加坡。&lt;/p&gt;&#xA;&lt;p&gt;一顿等待后，进入系统让选择一下语言，连接个WIFI就算大功告成了。&lt;/p&gt;&#xA;&lt;p&gt;&lt;del&gt;本来以为能有什么好玩的，还真这么傻瓜啊。。。&lt;/del&gt;&lt;/p&gt;&#xA;&lt;p&gt;最后再来个经典的neofetch&#xA;&lt;figure class=&#34;image-caption&#34;&gt;&#xA;    &lt;img src=&#34;https://images.glowisle.me/34996156f7df6e00bd8f4a6139f9f3fb.webp&#34; alt=&#34;&#34;&gt;&#xA;    &lt;figcaption&gt;&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&lt;/p&gt;&#xA;&lt;p&gt;系统也装完了，文章也写完了，电影也下完了，爽！&#xA;&lt;figure class=&#34;image-caption&#34;&gt;&#xA;    &lt;img src=&#34;./Pasted%20image%2020250613211830.webp&#34; alt=&#34;&#34;&gt;&#xA;    &lt;figcaption&gt;&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>怪癖</title>
      <link>https://blog.verdant.ee/posts/%E6%80%AA%E7%99%96/</link>
      <pubDate>Thu, 12 Jun 2025 21:16:01 +0000</pubDate><author>i@glowisle.me (五葉地錦)</author>
      <guid>https://blog.verdant.ee/posts/%E6%80%AA%E7%99%96/</guid>
      <description>&lt;p&gt;我这人怪癖挺多的，屋子里不能拉开窗帘，我讨厌被别人看到；屋子里只留一盏台灯和电子设备的光，很有安全感；电脑桌面上不能有任何图标，我爱干净。&lt;/p&gt;&#xA;&lt;p&gt;屋子里静静的，只有空调运转和电脑硬盘读写的机械声。暖黄色的台灯灯光不会分散太多注意力，在学校喧闹一天后，这是最快的“回血”方法。很难想象那些住宿学校的学生是什么支撑着他们活下去，如果是我，我大概率会跳楼。我喜欢雨天，也跟这个有点关系，非常有安全感，非常舒适，望着天上的云，总有种熟悉的感觉，说不上来是什么，是在梦里，又或许是小时候见到过类似的场景，冷白色调的阴天光线总是有种熟悉感。&lt;/p&gt;&#xA;&lt;p&gt;我对噪音非常敏感，完全受不了人群的嘈杂声，那会让我筋疲力尽，除了睡的晚，这也是我在学校课间几乎睡满的原因。每天中午打饭时，百家争鸣百花齐放，没有一个人类，没有一个人类的行为，我正好坐在第一排，所有表演我都是最近距离的观众。光是看着折腾吵闹就已经让人筋疲力尽。&lt;/p&gt;&#xA;&lt;p&gt;手机常年静音勿扰，我极度厌恶手机的提示音，别人能动几下手指就简单地侵入我的生活，极度厌恶。把手机打开静音模式，是我自己在主动接受信息，只有在我想看的时候才能输入信息，而不是做一半事情就被突兀的响铃和震动打断。&lt;/p&gt;&#xA;&lt;p&gt;所有软件都是暗色模式，所有。如上文，我经常在灯光昏暗的环境下，刺眼的白光很不舒服，最极端的时间，手机、电脑、平板壁纸都是一张纯黑的图片，大道至简。但博客不同，内容风格不太适合暗色，我感觉纯技术博客更适合暗色，极客风吧。&lt;/p&gt;&#xA;&lt;p&gt;由于长期使用Vim，我也讨厌操作鼠标，甚至浏览器都装上了Vim插件，所有能用Vim模式的软件都在用Vim模式。&lt;/p&gt;&#xA;&lt;p&gt;高考最后一天，我们学校是考点，我在家休假。实在无聊，就去镜子前看自己，盯着看，镜子里的世界太真实了，哪一个才是真正的我？看得出神，感觉下一秒就能冲破镜框，搂到对方的后背。看着镜子里的自己，一种陌生感和恐惧感油然而生。我真的活着，我真的是我，镜子里这个人是谁？会不会他才是真正的我？&lt;/p&gt;&#xA;&lt;p&gt;又是一段东拼西扯的意识流文字。&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>网络死亡计划</title>
      <link>https://blog.verdant.ee/posts/%E7%BD%91%E7%BB%9C%E6%AD%BB%E4%BA%A1%E8%AE%A1%E5%88%92/</link>
      <pubDate>Wed, 11 Jun 2025 23:24:42 +0000</pubDate><author>i@glowisle.me (五葉地錦)</author>
      <guid>https://blog.verdant.ee/posts/%E7%BD%91%E7%BB%9C%E6%AD%BB%E4%BA%A1%E8%AE%A1%E5%88%92/</guid>
      <description>&lt;p&gt;最近要把生活重心和精力再往学业上分配更多，打算逐步减少社交软件的使用。因此产生了些许对自己在社交软件的某些群组上是否需要存在的焦虑。所以有了这个想法：&lt;strong&gt;在网络上死亡。&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;具体应该说是在社交软件上的死亡。为期两周，直到期末考试结束。&lt;/p&gt;&#xA;&lt;p&gt;反正也不会有几个人关注我的博客，那就随便说说吧。如果你疑惑为什么我长时间装死，那看到这篇文章也就解答了。&lt;/p&gt;&#xA;&lt;p&gt;一直感觉很多社交都是热脸贴冷屁股，浪费时间浪费精力。如果长达两周我没有在某个我曾经经常发言的群发言，而且也没有人主动找我，那也就意味着我在那个群不重要，对那群人不重要，不是一个圈子，无共同话题，也就没有留下去的意义。&lt;/p&gt;&#xA;&lt;p&gt;主要包括：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;停止发布朋友圈和QQ空间&lt;/li&gt;&#xA;&lt;li&gt;停止在所有非必要微信QQ群发言&lt;/li&gt;&#xA;&lt;li&gt;多学习，多写博客，多读书&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;如果这样过得很舒服，那可能会一直延续下去。我一直在寻找真正有意义的社交圈和社交方式，但至今为止，觉得最有效的能让自己没那么累的方式就是减少社交。&lt;/p&gt;&#xA;&lt;p&gt;今后会把大部分生活琐事记录和观点表达转移到博客而非朋友圈和QQ空间。后者总是被动接受信息，不一定能找到共鸣，而前者是主动选择文章阅读，而且博客的性质能让人组织起完整的语言，客观地记录和表达；在QQ空间和微信发表出来总是有一种为了给某人看或为了给某些人看的味道，有些不舒服，也影响言语措辞。我这人变得越来越怪。&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>我说过吗？</title>
      <link>https://blog.verdant.ee/posts/%E6%88%91%E8%AF%B4%E8%BF%87%E5%90%97/</link>
      <pubDate>Wed, 11 Jun 2025 23:11:50 +0000</pubDate><author>i@glowisle.me (五葉地錦)</author>
      <guid>https://blog.verdant.ee/posts/%E6%88%91%E8%AF%B4%E8%BF%87%E5%90%97/</guid>
      <description>&lt;p&gt;我见到了一个口齿不清又爱自言自语的人。&lt;/p&gt;&#xA;&lt;p&gt;“我说过这个吗？”&lt;/p&gt;&#xA;&lt;p&gt;“没说过啊？”&lt;/p&gt;&#xA;&lt;p&gt;“哦哦对的对的哦不对不对哦对的对的。”&lt;/p&gt;&#xA;&lt;p&gt;“我说过那个吗？”&lt;/p&gt;&#xA;&lt;p&gt;“没说过啊？”&lt;/p&gt;&#xA;&lt;p&gt;“这个不说了。”&lt;/p&gt;&#xA;&lt;p&gt;“那个也不说了！”&lt;/p&gt;&#xA;&lt;p&gt;“不对，哦哦对的对的，不对不对。”&lt;/p&gt;&#xA;&lt;p&gt;我真说了，我真没说，我真说了！！！&lt;/p&gt;&#xA;&lt;p&gt;对，对吗？&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>杂记#2025-06-06</title>
      <link>https://blog.verdant.ee/posts/%E6%9D%82%E8%AE%B0-2025-06-06/</link>
      <pubDate>Fri, 06 Jun 2025 23:19:56 +0000</pubDate><author>i@glowisle.me (五葉地錦)</author>
      <guid>https://blog.verdant.ee/posts/%E6%9D%82%E8%AE%B0-2025-06-06/</guid>
      <description>&lt;p&gt;纠结了很长时间，这篇文章命名的事。我是典型的选择困难，出于文章内容组织的形式，就把他命名为杂记了。不过应该也没什么人看，我就~~（梦）~~想到什么写什么了&lt;/p&gt;&#xA;&lt;h2 id=&#34;时间感慨&#34;&gt;时间感慨&lt;/h2&gt;&#xA;&lt;p&gt;今天就上半天学，下午高考布置考场了。一进门就看到教学楼处处拉着横幅，写着给高考考生加油助威的标语。睡眼惺忪的我一下子就惊醒了，高考？又来？下课，和同学聊天，我又想起来这茬，自言自语：“高考，又高考了&amp;hellip;&amp;hellip;”让人听见了，“高考就考呗和你有啥关系？”是啊，和我有什么关系，该和我有关系吗？高考过一阵子后就该中考了。再过一年，我也上中考考场了。&lt;/p&gt;&#xA;&lt;p&gt;今天是我初中三年，第二次，也是最后一次放高考假，初一的时候还什么也不懂，傻了吧唧地，快乐地就活了一年。一升入初二，第一个学期精神状态出奇的差。老师天天讲各种心灵鸡汤、各种教育学生，都放他妈狗屁。只有三年过得太快了这句话是真的。一直感觉自己刚升入初中啊，地生会考迫在眉睫了。&lt;/p&gt;&#xA;&lt;p&gt;端午假期回来的那天，升旗仪式改成了给初高三学生加油的什么仪式，实际上也就是校领导在上面讲讲万年一套的老话，学生在台下鼓鼓掌。可能是吧，初一是什么场面，已经忘了，但依稀记得，我当时很受鼓舞，觉得老师和上台讲话的同学吐出来的每一个字、每一个标点符号都是那么振奋人心。今年只有麻木感和危机感，回班后，班主任说，明年就该你们走那个状元门啦！围着我心的最后那块砖头也被一脚踢飞了。&lt;/p&gt;&#xA;&lt;p&gt;我对毕业不害怕，我甚至有点向往毕业。好像有人初中毕业哭得死去活来的，记得小学就有人这样了。可能我向来都是一个薄情的人，对于同学情这种事，没那么大牵挂，活的也舒心。网络也发达，能联系的自然会联系，没话说的也就不必强找话题，已经不是一路人了。顺其自然？顺其自然。真正让我害怕的是考试，我也没有特别想去的学校，也没有特别想学的专业。计算机？程序员？别操蛋来了，已经不是2020年了，普通人没高学历怎么卷。美术？那更是要饿死的了。没什么学习的动力，唯一的动力就是成绩不差暂且能在同学面前抬起头吧。我感兴趣的方向都有被AI替代的风险了。现在想这个确实为时过早，高中三年活下来才有资格想去哪里要饭。&lt;/p&gt;&#xA;&lt;p&gt;一写学校的事就难免重力展开啊&amp;hellip;&amp;hellip;&lt;/p&gt;&#xA;&lt;h2 id=&#34;夏&#34;&gt;夏&lt;/h2&gt;&#xA;&lt;p&gt;小时候非常喜欢夏天，现在平等地讨厌春秋，因为会犯鼻炎；一贯地憎恨冬天，太冷了。那只有夏天好了。&lt;/p&gt;&#xA;&lt;p&gt;夏天一直有一层回忆滤镜，今年要仔细感受一下。好好想想，童年夏天回忆有三：&lt;/p&gt;&#xA;&lt;p&gt;空调、冰棍、帆布毯。两样陆陆续续都回来了，唯独空调费劲，空调到底是因为热才开，还是因为“时候到了”才开？空调服务的对象是“时候”，还是人？&lt;/p&gt;&#xA;&lt;h2 id=&#34;工具迷恋&#34;&gt;工具迷恋&lt;/h2&gt;&#xA;&lt;p&gt;我承认，我真的没把时间花在刀刃上。经常浪费时间，在一个几百年前的软件上花大力气大时间，甚至废寝忘食，就为了实现一个已经由专业团队开发好的、开箱即用的、体验还更好的功能。美其名曰“极客精神”。我对极客精神没偏见，只是突然发觉，不应该把时间花费在这种事上。对，我就是在说Emacs和Vim。&lt;/p&gt;&#xA;&lt;p&gt;工具说到底还是为了做事的，先选简单的工具，把事情做得精湛，再谈优化工具。代码还写不明白，反到是一直迷恋在配置各种编辑器，白白浪费时间，作业也写不成，代码也写不成，最后配置出来了一块会爆炸的排泄物，一团矛盾。&lt;/p&gt;&#xA;&lt;p&gt;去年12月底，我开始知道了Vim这个东西，在折腾了一会被劝退后，发了条朋友圈吐槽。&lt;/p&gt;&#xA;&lt;p&gt;&lt;figure class=&#34;image-caption&#34;&gt;&#xA;    &lt;img src=&#34;https://images.glowisle.me/Pastedimage20250607121725.webp&#34; alt=&#34;&#34;&gt;&#xA;    &lt;figcaption&gt;&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&lt;/p&gt;&#xA;&lt;p&gt;但是不得不承认，Vim比Emacs好配多了。现在我的Vim起码到了能畅快写代码的程度。在这之前，一直都在断断续续地折腾Vim、终端、系统。真正写代码的时间没有三分之一。幸好在&lt;a href=&#34;http://www.yingyu5658.me/post/4108562128/&#34;&gt;玩腻Arch&lt;/a&gt;后及时悔悟，装回了Windows，虽然种种不适应，但用起来很方便，起码不会再像以前那样浪费时间了。&lt;/p&gt;&#xA;&lt;p&gt;感谢Windows，感谢微软&amp;hellip;&amp;hellip;否则我就要成为开机 =&amp;gt; 桌面炸了 =&amp;gt; 花两天修复桌面 =&amp;gt; 开机 =&amp;gt; 打开自己半透明+亚克力+二次元小人背景的终端 =&amp;gt; 输入neofetch欣赏半个小时桌面并截图发群里：“顺便说一下，我用的是Arch。”的那种人了。偶然间听到过一句话： “如果一块表时间是错的，那他走的每一秒都是错的；如果这块表停了，那它一天中至少有两次是对的。”挺有道理的。&lt;/p&gt;&#xA;&lt;p&gt;翻看了一下自己写的代码和以前的文章，发现自己的快速上手的能力较强，各项技术都有涉猎，知识面较广，但这样的结果就是哪样都不深。尤其是数据结构与算法接触非常少，写不出来什么干巴的代码，之后要改一改了，在数学和算法上深耕一下，也在C语言深耕。C语言一直是很让我向往的语言，运行几乎无开销、对硬件极致的控制能力，灵活、高效、结构紧凑。但他复杂易混淆的指针也多次劝退我这个初学者。这个精髓没领悟到，玩C语言就玩不到灵魂了。&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>Emacs配置记录 2——C/C++环境配置</title>
      <link>https://blog.verdant.ee/posts/emacs%E9%85%8D%E7%BD%AE%E8%AE%B0%E5%BD%95-2c-c++%E7%8E%AF%E5%A2%83%E9%85%8D%E7%BD%AE/</link>
      <pubDate>Wed, 04 Jun 2025 18:58:37 +0000</pubDate><author>i@glowisle.me (五葉地錦)</author>
      <guid>https://blog.verdant.ee/posts/emacs%E9%85%8D%E7%BD%AE%E8%AE%B0%E5%BD%95-2c-c++%E7%8E%AF%E5%A2%83%E9%85%8D%E7%BD%AE/</guid>
      <description>&lt;h2 id=&#34;前言&#34;&gt;前言&lt;/h2&gt;&#xA;&lt;p&gt;经过&lt;a href=&#34;&#34;&gt;上一篇&lt;/a&gt;的简单调教，Emacs已经勉强变成了一个温顺的文本编辑器，但是离写代码这个宏大的目标还是有一段距离的，今天来解决主要问题：代码补全。由于我要写一点简单的C代码，那么重点就先放到C/CPP环境搭建中。&lt;/p&gt;&#xA;&lt;p&gt;站在巨人的肩膀上，在Emacs中的代码补全使用巨硬的LSP协议。&lt;/p&gt;&#xA;&lt;h2 id=&#34;spacemacs&#34;&gt;Spacemacs&lt;/h2&gt;&#xA;&lt;p&gt;经过考虑，我还是决定使用Spacemacs，比起原版Emacs，它更适合新手，也更能快速投入开发。避免配置陷阱，过多把时间花在刀把上。唉，也就是说，昨天大部分都白干了。算了，生命的意义就在于折腾，怕折腾我也不会玩Emacs了。来吧！&lt;/p&gt;&#xA;&lt;p&gt;先来安装一下Spacemacs。&#xA;&lt;code&gt;git clone https://github.com/syl20bnr/spacemacs ~/.emacs.d&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;重启Emacs，让他下载一下自带的包。&lt;/p&gt;&#xA;&lt;p&gt;上次没清理干净Spacemacs，不知道存在哪的备份还在，算是免去了一些折腾吧。来看看现在的Emacs都配置了什么。&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-lisp&#34; data-lang=&#34;lisp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   dotspacemacs-configuration-layers&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   &lt;span style=&#34;color:#7a8478&#34;&gt;&amp;#39;&lt;/span&gt;(yaml&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     markdown&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     javascript&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     (auto-completion &lt;span style=&#34;color:#e69875&#34;&gt;:variables&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                      auto-completion-idle-delay &lt;span style=&#34;color:#d699b6&#34;&gt;0.01&lt;/span&gt;    &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;; 降低补全延迟&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                      auto-completion-minimum-prefix-length &lt;span style=&#34;color:#d699b6&#34;&gt;1&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     (prettier &lt;span style=&#34;color:#e69875&#34;&gt;:variables&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;               prettier-always-enable &lt;span style=&#34;color:#d699b6&#34;&gt;t&lt;/span&gt;)  &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;; 保存时自动格式化&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     (javascript &lt;span style=&#34;color:#e69875&#34;&gt;:variables&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                 javascript-backend &lt;span style=&#34;color:#e69875&#34;&gt;&amp;#39;lsp&lt;/span&gt;        &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;; 启用LSP后端&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                 javascript-fmt-tool &lt;span style=&#34;color:#e69875&#34;&gt;&amp;#39;prettier&lt;/span&gt;) &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;; 格式化工具选Prettier&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     (c-c++ &lt;span style=&#34;color:#e69875&#34;&gt;:variables&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            c-c++-backend &lt;span style=&#34;color:#e69875&#34;&gt;&amp;#39;lsp-clangd&lt;/span&gt;)         &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;; C/C++使用Clangd后端&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     (vue &lt;span style=&#34;color:#e69875&#34;&gt;:variables&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          vue-backend &lt;span style=&#34;color:#e69875&#34;&gt;&amp;#39;lsp&lt;/span&gt;)                    &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;; Vue使用LSP后端&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     (html)                                    &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;; HTML/CSS支持&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     (lsp)                                     &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;; 必须的LSP核心支持层&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     (auto-completion)                         &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;; 自动补全&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     (syntax-checking)                         &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;; 语法检查&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;;; ----------------------------------------------------------------&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;;; Example of useful layers you may want to use right away.&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;;; Uncomment some layer names and press `SPC f e R&amp;#39; (Vim style) or&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;;; `M-m f e R&amp;#39; (Emacs style) to install them.&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;;; ----------------------------------------------------------------&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;;; auto-completion&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;;; better-defaults&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     emacs-lisp&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     treemacs&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;;; git&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     helm&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     lsp&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;;; markdown&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     multiple-cursors&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;;; org&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;;; (shell :variables&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;;;        shell-default-height 30&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;;;        shell-default-position &amp;#39;bottom)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;;; spell-checking&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;;; syntax-checking&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;;; version-control&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     treemacs)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;emmm，还是有点有用的。比如C/C++这里，就启用了LSP。还有一些之前搞的前端配置。就是不知道为啥，JavaScript的补全不太好使。&lt;/p&gt;&#xA;&lt;h2 id=&#34;语法检查&#34;&gt;语法检查&lt;/h2&gt;&#xA;&lt;p&gt;语法检查，选择当前比较成熟的flycheck，在Spacemacs中对应&lt;code&gt;syntax-checking&lt;/code&gt;，在.spacemacs中的&lt;code&gt;dotspacemacs-configuration-layers&lt;/code&gt;写入&lt;code&gt;(configuration-layer/declare-layer &#39;syntax-checking)&lt;/code&gt;&#xA;该层会自动集成Flycheck及其常见语言的后端支持。&lt;/p&gt;&#xA;&lt;p&gt;C/C++要安装&lt;code&gt;clang-tidy&lt;/code&gt;或&lt;code&gt;cppcheck&lt;/code&gt;。&lt;/p&gt;&#xA;&lt;h3 id=&#34;进阶配置&#34;&gt;进阶配置&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-lisp&#34; data-lang=&#34;lisp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  (with-eval-after-load &lt;span style=&#34;color:#e69875&#34;&gt;&amp;#39;flycheck&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    (&lt;span style=&#34;color:#e67e80&#34;&gt;setq&lt;/span&gt; flycheck-check-syntax-automatically &lt;span style=&#34;color:#7a8478&#34;&gt;&amp;#39;&lt;/span&gt;(save mode-enabled) &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;;; 保存时检查&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          flycheck-display-errors-delay &lt;span style=&#34;color:#d699b6&#34;&gt;0.5&lt;/span&gt;                        &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;;; 错误显示延迟&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          flycheck-indication-mode &lt;span style=&#34;color:#e69875&#34;&gt;&amp;#39;right-fringe&lt;/span&gt;))                 &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;;; 错误标记位置&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;spacemacs-文件基本介绍&#34;&gt;&lt;a href=&#34;https://liuzhijun-source.github.io/spacemacs-14-days/#/Week01/Day05/day05_spacemacs%E7%9A%84%E8%BF%9B%E9%98%B6%E9%85%8D%E7%BD%AE_%E4%B8%8A?id=spacemacs-%e6%96%87%e4%bb%b6%e5%9f%ba%e6%9c%ac%e4%bb%8b%e7%bb%8d&#34;&gt;.spacemacs 文件基本介绍&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;.spacemacs 文件一般会自动生成在主目录下，这个文件是配置 Spacemacs 的入口，有关于 Spacemacs 本身的配置基本都能在里面进行修改，用户设置同样在这个文件中修改。&lt;/p&gt;&#xA;&lt;p&gt;.spacemacs 中，内容一般被分为以下几个部分，每个部分都封装在一个函数中：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;dotspacemacs/layers&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;在这里可以声明一些 layer，以及删除、增添一些包，在这里还可以调整 Spacemacs 加载时的一些行为&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;dotspacemacs/init&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Spacemacs 绝大部分的配置都位于此，你可以在此修改配置中可选的选项，但绝对不能将自己的用户配置代码添加在这里&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;dotspacemacs/user-init&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;这里的内容会在 Emacs 启动前开始加载，一般在这里设置你需要使用的 elpa 源，你应该尽量把用户配置放在 &lt;code&gt;dotspacemacs/user-config&lt;/code&gt; 中&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;dotspacemacs/user-config&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;在这里可以添加你的用户配置代码，你自己的定义的大部分配置一般都在这里完成&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;dotspacemacs/emacs-custom-settings&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Spacemacs 自己生成的配置，同样不建议自己去修改&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;摘自&lt;a href=&#34;https://liuzhijun-source.github.io/spacemacs-14-days/#/Week01/Day05/day05_spacemacs%E7%9A%84%E8%BF%9B%E9%98%B6%E9%85%8D%E7%BD%AE_%E4%B8%8A&#34;&gt;Spacemaccs 14 Days&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</description>
    </item>
    <item>
      <title>我还是放不下Emacs！</title>
      <link>https://blog.verdant.ee/posts/%E6%88%91%E8%BF%98%E6%98%AF%E6%94%BE%E4%B8%8D%E4%B8%8Bemacs/</link>
      <pubDate>Tue, 03 Jun 2025 20:07:15 +0000</pubDate><author>i@glowisle.me (五葉地錦)</author>
      <guid>https://blog.verdant.ee/posts/%E6%88%91%E8%BF%98%E6%98%AF%E6%94%BE%E4%B8%8D%E4%B8%8Bemacs/</guid>
      <description>&lt;h2 id=&#34;前言&#34;&gt;前言&lt;/h2&gt;&#xA;&lt;p&gt;难受，真难受呀。作为一个痴迷Vim的人，总是被Emacs的强大勾引，看见别人配的酷炫全能的Emacs就走不动路，脑子里想着“没事没事，我Vim轻量启动极快，Emacs这种重量级是比不上的”，自我安慰。实际上多想玩Emacs只有我自己知道&amp;hellip;&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;我之前也试过&lt;a href=&#34;https://www.yingyu5658.me/post/2193909713/&#34;&gt;配Emacs&lt;/a&gt;，但是Windows搞出来的不伦不类还很卡的东西太难受，用WSL尝试了一下Spacemacs，搞不明白那个层机制，也对ELisp这个语言不熟悉（说实话到现在Lua的一些东西我都不明白），而且之前的配置也一直想一口吃个大胖子，一天内就配到IDE的强大程度，经过几次失败和Vim配置经验后，我深知这是不可能的，除非在我使用Emacs后N周年的第N周目重新删干净再配，也许能做到。&lt;/p&gt;&#xA;&lt;p&gt;定个小目标吧，每天配一点点，成果起码要达到以下程度：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;能胜任前端、Nodejs的开发&lt;/li&gt;&#xA;&lt;li&gt;能胜任CPP/C的开发&lt;/li&gt;&#xA;&lt;li&gt;能使用EAF浏览网页&lt;/li&gt;&#xA;&lt;li&gt;有一点花里胡哨的小功能&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;其实我也挺想把博客迁移到Emacs，完全用org-mode来写，Hexo越来越慢。其实Hugo也不是不行，就是不太熟悉也不喜欢Go。看了&lt;a href=&#34;https://liujiacai.net/&#34;&gt;刘家财大佬的博客&lt;/a&gt;后感觉这个也太酷了，主题我也很喜欢，但是评论功能可能有点折腾，我对评论系统也有点不太在意。最难割舍的是现在用的这个主题&amp;hellip;&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;刘家财老师是这样说的&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;只不过遗憾的是，即使写了近 10 年的博客，有价值的评论少之又少，可能中文互联网内没多少人认真写技术评论吧。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;这点我确实认同，观察了一些博客的评论，真正讨论技术内容的没几个，大多都是在围观、附和。但是我的博客类型也不能算是纯技术博客，保持与读者的互动还是很有意思的。&lt;/p&gt;&#xA;&lt;p&gt;言归正传，我现在的Emacs在WSL里，装的是Spacemacs，能正常用eaf，但是写代码很难受，也没有补全，可以说现在它只能当一个浏览器用，我准备推翻重新配。&lt;/p&gt;&#xA;&lt;p&gt;那么，从现在开始，来配Emacs！！！&lt;/p&gt;&#xA;&lt;p&gt;&lt;figure class=&#34;image-caption&#34;&gt;&#xA;    &lt;img src=&#34;https://pavinberg.github.io/emacs-book/images/emacs-book/intro/learningCurve.jpg&#34; alt=&#34;各个编辑器学习曲线图&#34;&gt;&#xA;    &lt;figcaption&gt;各个编辑器学习曲线图&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;与过去挥手&#34;&gt;与过去挥手&lt;/h2&gt;&#xA;&lt;p&gt;在&lt;code&gt;rm -rf ~/.emacs.d&lt;/code&gt;后，那个不伦不类、上不去下不来的Emacs彻底成为了历史。重新输入Emacs，又看到熟悉又陌生的丑陋开屏页。&lt;/p&gt;&#xA;&lt;h2 id=&#34;小插曲&#34;&gt;小插曲&lt;/h2&gt;&#xA;&lt;p&gt;WSLg间歇性抽风，打不开GUI&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Display 10.255.255.254:0 unavailable, simulating -nw&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;打开管理员Powershell，运行&lt;code&gt;wsl --update&lt;/code&gt;&#xA;![[public/images/我还是放不下Emacs！/Pasted image 20250603210050.png]]&#xA;&lt;del&gt;我草，怎么这么慢？？&lt;/del&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;melpa配置&#34;&gt;MELPA配置&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-lisp&#34; data-lang=&#34;lisp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(&lt;span style=&#34;color:#b2c98f&#34;&gt;require&lt;/span&gt; &lt;span style=&#34;color:#e69875&#34;&gt;&amp;#39;package&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(add-to-list &lt;span style=&#34;color:#e69875&#34;&gt;&amp;#39;package-archives&lt;/span&gt; &lt;span style=&#34;color:#7a8478&#34;&gt;&amp;#39;&lt;/span&gt;(&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;melpa&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#7a8478&#34;&gt;.&lt;/span&gt; &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;https://melpa.org/packages/&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#d699b6&#34;&gt;t&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(package-initialize)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;切换中国镜像源&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-lisp&#34; data-lang=&#34;lisp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(&lt;span style=&#34;color:#b2c98f&#34;&gt;require&lt;/span&gt; &lt;span style=&#34;color:#e69875&#34;&gt;&amp;#39;package&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(&lt;span style=&#34;color:#e67e80&#34;&gt;setq&lt;/span&gt; package-archives &lt;span style=&#34;color:#7a8478&#34;&gt;&amp;#39;&lt;/span&gt;((&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;gnu&amp;#34;&lt;/span&gt;  &lt;span style=&#34;color:#7a8478&#34;&gt;.&lt;/span&gt; &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;http://mirrors.cloud.tencent.com/elpa/gnu/&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;             (&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;melpa&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#7a8478&#34;&gt;.&lt;/span&gt; &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;http://mirrors.cloud.tencent.com/elpa/melpa/&amp;#34;&lt;/span&gt;)))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(package-initialize)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;重启Emacs，输入&lt;code&gt;package-list-packages&lt;/code&gt;就可以查看所有插件。&lt;code&gt;package-install&lt;/code&gt;，回车输入插件名就可以安装对应插件。&#xA;默认情况下，插件会被安装到 &lt;code&gt;~/.emacs.d/elpa/&lt;/code&gt; 目录下。&lt;/p&gt;&#xA;&lt;h2 id=&#34;use-package&#34;&gt;use-package&lt;/h2&gt;&#xA;&lt;p&gt;输入&lt;code&gt;package-install&lt;/code&gt;，输入&lt;code&gt;use-package&lt;/code&gt;，回车安装，然后在init.el中写&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-lisp&#34; data-lang=&#34;lisp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(eval-when-compile&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#b2c98f&#34;&gt;require&lt;/span&gt; &lt;span style=&#34;color:#e69875&#34;&gt;&amp;#39;use-package&lt;/span&gt;))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;ivy&#34;&gt;ivy&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-lisp&#34; data-lang=&#34;lisp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(&lt;span style=&#34;color:#b2c98f&#34;&gt;use-package&lt;/span&gt; ivy&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#e69875&#34;&gt;:ensure&lt;/span&gt; &lt;span style=&#34;color:#d699b6&#34;&gt;t&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#e69875&#34;&gt;:init&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (ivy-mode &lt;span style=&#34;color:#d699b6&#34;&gt;1&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (counsel-mode &lt;span style=&#34;color:#d699b6&#34;&gt;1&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#e69875&#34;&gt;:config&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#e67e80&#34;&gt;setq&lt;/span&gt; ivy-use-virtual-buffers &lt;span style=&#34;color:#d699b6&#34;&gt;t&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#e67e80&#34;&gt;setq&lt;/span&gt; search-default-mode &lt;span style=&#34;color:#b2c98f&#34;&gt;#&amp;#39;&lt;/span&gt;char-fold-to-regexp)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#e67e80&#34;&gt;setq&lt;/span&gt; ivy-count-format &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;(%d/%d) &amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#e69875&#34;&gt;:bind&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; ((&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;C-s&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#7a8478&#34;&gt;.&lt;/span&gt; &lt;span style=&#34;color:#e69875&#34;&gt;&amp;#39;swiper&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  (&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;C-x b&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#7a8478&#34;&gt;.&lt;/span&gt; &lt;span style=&#34;color:#e69875&#34;&gt;&amp;#39;ivy-switch-buffer&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  (&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;C-c v&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#7a8478&#34;&gt;.&lt;/span&gt; &lt;span style=&#34;color:#e69875&#34;&gt;&amp;#39;ivy-push-view&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  (&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;C-c s&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#7a8478&#34;&gt;.&lt;/span&gt; &lt;span style=&#34;color:#e69875&#34;&gt;&amp;#39;ivy-switch-view&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  (&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;C-c V&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#7a8478&#34;&gt;.&lt;/span&gt; &lt;span style=&#34;color:#e69875&#34;&gt;&amp;#39;ivy-pop-view&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  (&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;C-x C-@&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#7a8478&#34;&gt;.&lt;/span&gt; &lt;span style=&#34;color:#e69875&#34;&gt;&amp;#39;counsel-mark-ring&lt;/span&gt;)&lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;; 在某些终端上 C-x C-SPC 会被映射为 C-x C-@，比如在 macOS 上，所以要手动设置&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  (&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;C-x C-SPC&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#7a8478&#34;&gt;.&lt;/span&gt; &lt;span style=&#34;color:#e69875&#34;&gt;&amp;#39;counsel-mark-ring&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e69875&#34;&gt;:map&lt;/span&gt; minibuffer-local-map&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  (&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;C-r&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#7a8478&#34;&gt;.&lt;/span&gt; counsel-minibuffer-history)))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;amx&#34;&gt;amx&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-lisp&#34; data-lang=&#34;lisp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(&lt;span style=&#34;color:#b2c98f&#34;&gt;use-package&lt;/span&gt; amx&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#e69875&#34;&gt;:ensure&lt;/span&gt; &lt;span style=&#34;color:#d699b6&#34;&gt;t&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#e69875&#34;&gt;:init&lt;/span&gt; (amx-mode))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;ace-window&#34;&gt;ace-window&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(use&lt;span style=&#34;color:#7a8478&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#e67e80&#34;&gt;package&lt;/span&gt; ace&lt;span style=&#34;color:#7a8478&#34;&gt;-&lt;/span&gt;window&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; :ensure t&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; :&lt;span style=&#34;color:#b2c98f&#34;&gt;bind&lt;/span&gt; ((&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;C-x o&amp;#34;&lt;/span&gt; . &amp;#39;ace&lt;span style=&#34;color:#7a8478&#34;&gt;-&lt;/span&gt;window)))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;mwim&#34;&gt;mwim&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-lisp&#34; data-lang=&#34;lisp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(&lt;span style=&#34;color:#b2c98f&#34;&gt;use-package&lt;/span&gt; mwim&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#e69875&#34;&gt;:ensure&lt;/span&gt; &lt;span style=&#34;color:#d699b6&#34;&gt;t&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#e69875&#34;&gt;:bind&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;C-a&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#7a8478&#34;&gt;.&lt;/span&gt; mwim-beginning-of-code-or-line)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;C-e&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#7a8478&#34;&gt;.&lt;/span&gt; mwim-end-of-code-or-line))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;undo-tree&#34;&gt;undo-tree&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-lisp&#34; data-lang=&#34;lisp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(&lt;span style=&#34;color:#b2c98f&#34;&gt;use-package&lt;/span&gt; undo-tree&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#e69875&#34;&gt;:ensure&lt;/span&gt; &lt;span style=&#34;color:#d699b6&#34;&gt;t&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#e69875&#34;&gt;:init&lt;/span&gt; (global-undo-tree-mode)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#e69875&#34;&gt;:custom&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (undo-tree-auto-save-history &lt;span style=&#34;color:#d699b6&#34;&gt;nil&lt;/span&gt;))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;smart-mode-line&#34;&gt;smart-mode-line&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-lisp&#34; data-lang=&#34;lisp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(&lt;span style=&#34;color:#b2c98f&#34;&gt;use-package&lt;/span&gt; smart-mode-line&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#e69875&#34;&gt;:ensure&lt;/span&gt; &lt;span style=&#34;color:#d699b6&#34;&gt;t&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#e69875&#34;&gt;:init&lt;/span&gt; (sml/setup))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;good-scroll&#34;&gt;good-scroll&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-lisp&#34; data-lang=&#34;lisp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(&lt;span style=&#34;color:#b2c98f&#34;&gt;use-package&lt;/span&gt; good-scroll&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#e69875&#34;&gt;:ensure&lt;/span&gt; &lt;span style=&#34;color:#d699b6&#34;&gt;t&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#e69875&#34;&gt;:if&lt;/span&gt; window-system     &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;; 在图形化界面时才使用这个插件&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#e69875&#34;&gt;:init&lt;/span&gt; (good-scroll-mode))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;今天就先到这里吧。&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>猫</title>
      <link>https://blog.verdant.ee/posts/%E7%8C%AB/</link>
      <pubDate>Sun, 01 Jun 2025 20:36:05 +0000</pubDate><author>i@glowisle.me (五葉地錦)</author>
      <guid>https://blog.verdant.ee/posts/%E7%8C%AB/</guid>
      <description>&lt;p&gt;六年前，曾短暂地拥有过一周的狗。只有一周。&lt;/p&gt;&#xA;&lt;p&gt;那个时候爸妈都出去上班，只留我和我奶奶在家。奶奶不喜欢小动物，不喜欢任何活物，包括我爸爸。据说她年轻时，经常把我爸爸送到邻居家照看，单纯因为不喜欢。同样地，她也不喜欢花草。爷爷养的茉莉花，颜色洁白，屋内也花香飘逸，死了。被奶奶用热水浇死的。&lt;/p&gt;&#xA;&lt;p&gt;奶奶不喜欢任何活物，同样地，她也不喜欢这只狗。不知道为什么，不去跟爸妈说，反而在我面前卖力。装心脏病、哭闹。我当时还小，哪懂什么真假，而且奶奶也是很重要的亲人，我很害怕再也见不到她。小孩子就是这么天真。印象最深刻的就是让我拍她胳膊，我又急又怕，手酸到没力气、颤抖也不敢停下来。&lt;/p&gt;&#xA;&lt;p&gt;多年后，奶奶再次提起这件事，轻描淡写的嬉笑着：“我当时是装的呀。”直到今天，奶奶的心脏依旧强有力而平稳地跳动着。我那些日子倒是被吓得快犯了心脏病。&lt;/p&gt;&#xA;&lt;p&gt;那七天，我度日如年。但仔细回想计算，只过了一周。小时候的时间怎么过都过不完。&lt;/p&gt;&#xA;&lt;p&gt;狗送走了。&lt;/p&gt;&#xA;&lt;p&gt;那天，爸爸开车送我们去到一个很远的地方，我坐在车上没有什么情绪。看着旁边笼子里的狗，没有什么情绪。想起这七天发生的所有事，没有什么情绪。不知道该有什么情绪，是该因伙伴被迫离自己而去感到悲痛欲绝，还是该因自己马上解脱而感到畅快轻松。我没有什么情绪。&lt;/p&gt;&#xA;&lt;p&gt;路程很远，时间很长，我和妈妈坐在车上，一句话没有说。&lt;/p&gt;&#xA;&lt;p&gt;到地方了，我还是麻木的。下车后，把笼子打开，牵出来那条狗，它的下一任主人接过栓绳后，它就再也与我没有任何关系。笼子没让对方拿走，说是留个念想。&lt;/p&gt;&#xA;&lt;p&gt;七天的感情没有多深，没有多深。交接完成后，妈妈和那个人有几句大人之间的寒暄，我没注意听，也听不懂。我没有什么情绪，没有什么记忆。&lt;/p&gt;&#xA;&lt;p&gt;回到车上，我坐在车上不知道该有什么情绪。看着旁边空空的笼子，没有什么情绪。解脱了，成功了。我和妈妈坐在车上，一句话没有说。&lt;/p&gt;&#xA;&lt;p&gt;下车后，妈妈的眼泪率先落下来，我最见不得别人哭，也跟着哭了。&lt;/p&gt;&#xA;&lt;p&gt;那一天，一个懵懂的儿童学会了珍惜，也学会了憎恨。&lt;/p&gt;&#xA;&lt;p&gt;妈妈给我看它的新主人发朋友圈，它生活在一个更大的房子里，有很多玩具，也有人跟它一起玩了。它很开心。我的眼泪又落了下来。时至今日，我的眼泪还是控制不住地流出来。七天的感情，没多深，没多深。&lt;/p&gt;&#xA;&lt;p&gt;送走狗后没多长时间，妈妈就不上班了。可能是发现了我每天的日子过得多精彩，也可能是她累了。总之，我不用再面对奶奶了。&lt;/p&gt;&#xA;&lt;p&gt;19年，印象中只有三件事。中华人民共和国成立七十周年、狗走了、猫来了。&lt;/p&gt;&#xA;&lt;p&gt;三个月后，亲戚开的猫舍送给我们一只小猫。蓝猫，通体灰色，没多好看。我一直很喜欢猫，丑也喜欢。&lt;/p&gt;&#xA;&lt;p&gt;当时酷爱发朋友圈，有点大事小事都要发个朋友圈记录一下，也留下来很多这只猫的照片和视频。我们给他起名叫四喜。已经忘了为什么叫四喜了。&lt;/p&gt;&#xA;&lt;p&gt;我学会了珍惜，非常珍惜这只猫，谁也不让摸，谁也不让碰。有一次厨房窗户没关好，四喜跑到窗户外的封窗框上，正扒着头往外试探。我二话不说，什么也没想就冲出去，踩着封窗框，把它抱了回来。那天我主动要求自己睡，在爬在枕头上哭了一整晚，我太害怕失去她了。&lt;/p&gt;&#xA;&lt;p&gt;时间过得越来越快，越来越快。&lt;/p&gt;&#xA;&lt;p&gt;六年了，六岁了，老了。我太害怕失去她了。今天收集了很多猫毛。我害怕失去她，更害怕她被遗忘，被遗忘就真的什么都没了。&lt;/p&gt;&#xA;&lt;p&gt;仔细回想，太对不起四喜了，最近两年都没怎么好好陪她。她倒是一直很想我，我不在时，爬在我的衣服上，被褥上。回来时，我走到哪跟到哪。睡觉了，爬在枕边，踹起手，睡倒了，就干脆肚皮也露出来。伏案时，趴在纸上，坐在电脑前，爬在鼠标垫上。四喜一直都沉默寡言，但当我一个月没回家，她见到我后也忍不住啼哭起来，一边用头猛蹭我的腿。一对眼眶里镶嵌着两颗晶莹剔透的琥珀，总是温柔地冲我慢慢眨眼。&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>Electron CommonJS require踩坑</title>
      <link>https://blog.verdant.ee/posts/electron-commonjs-require%E8%B8%A9%E5%9D%91/</link>
      <pubDate>Sat, 31 May 2025 09:07:36 +0800</pubDate><author>i@glowisle.me (五葉地錦)</author>
      <guid>https://blog.verdant.ee/posts/electron-commonjs-require%E8%B8%A9%E5%9D%91/</guid>
      <description>&lt;p&gt;最近在开发一个Electron项目，在导入类的时候有以下报错:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-gdscript3&#34; data-lang=&#34;gdscript3&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;node:internal&lt;span style=&#34;color:#7a8478&#34;&gt;/&lt;/span&gt;modules&lt;span style=&#34;color:#7a8478&#34;&gt;/&lt;/span&gt;cjs&lt;span style=&#34;color:#7a8478&#34;&gt;/&lt;/span&gt;loader:&lt;span style=&#34;color:#d699b6&#34;&gt;1411&lt;/span&gt; Uncaught Error: Cannot find module &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#39;./File&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Require stack:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#7a8478&#34;&gt;-&lt;/span&gt; E:\Develop\markdown&lt;span style=&#34;color:#7a8478&#34;&gt;-&lt;/span&gt;editor\src\html\index&lt;span style=&#34;color:#7a8478&#34;&gt;.&lt;/span&gt;html&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    at Module&lt;span style=&#34;color:#7a8478&#34;&gt;.&lt;/span&gt;_resolveFilename (node:internal&lt;span style=&#34;color:#7a8478&#34;&gt;/&lt;/span&gt;modules&lt;span style=&#34;color:#7a8478&#34;&gt;/&lt;/span&gt;cjs&lt;span style=&#34;color:#7a8478&#34;&gt;/&lt;/span&gt;loader:&lt;span style=&#34;color:#d699b6&#34;&gt;1408&lt;/span&gt;:&lt;span style=&#34;color:#d699b6&#34;&gt;15&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    at a&lt;span style=&#34;color:#7a8478&#34;&gt;.&lt;/span&gt;_resolveFilename (node:electron&lt;span style=&#34;color:#7a8478&#34;&gt;/&lt;/span&gt;js2c&lt;span style=&#34;color:#7a8478&#34;&gt;/&lt;/span&gt;renderer_init:&lt;span style=&#34;color:#d699b6&#34;&gt;2&lt;/span&gt;:&lt;span style=&#34;color:#d699b6&#34;&gt;2643&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    at defaultResolveImpl (node:internal&lt;span style=&#34;color:#7a8478&#34;&gt;/&lt;/span&gt;modules&lt;span style=&#34;color:#7a8478&#34;&gt;/&lt;/span&gt;cjs&lt;span style=&#34;color:#7a8478&#34;&gt;/&lt;/span&gt;loader:&lt;span style=&#34;color:#d699b6&#34;&gt;1064&lt;/span&gt;:&lt;span style=&#34;color:#d699b6&#34;&gt;19&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    at resolveForCJSWithHooks (node:internal&lt;span style=&#34;color:#7a8478&#34;&gt;/&lt;/span&gt;modules&lt;span style=&#34;color:#7a8478&#34;&gt;/&lt;/span&gt;cjs&lt;span style=&#34;color:#7a8478&#34;&gt;/&lt;/span&gt;loader:&lt;span style=&#34;color:#d699b6&#34;&gt;1069&lt;/span&gt;:&lt;span style=&#34;color:#d699b6&#34;&gt;22&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    at Module&lt;span style=&#34;color:#7a8478&#34;&gt;.&lt;/span&gt;_load (node:internal&lt;span style=&#34;color:#7a8478&#34;&gt;/&lt;/span&gt;modules&lt;span style=&#34;color:#7a8478&#34;&gt;/&lt;/span&gt;cjs&lt;span style=&#34;color:#7a8478&#34;&gt;/&lt;/span&gt;loader:&lt;span style=&#34;color:#d699b6&#34;&gt;1218&lt;/span&gt;:&lt;span style=&#34;color:#d699b6&#34;&gt;37&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    at c&lt;span style=&#34;color:#7a8478&#34;&gt;.&lt;/span&gt;_load (node:electron&lt;span style=&#34;color:#7a8478&#34;&gt;/&lt;/span&gt;js2c&lt;span style=&#34;color:#7a8478&#34;&gt;/&lt;/span&gt;node_init:&lt;span style=&#34;color:#d699b6&#34;&gt;2&lt;/span&gt;:&lt;span style=&#34;color:#d699b6&#34;&gt;17950&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    at s&lt;span style=&#34;color:#7a8478&#34;&gt;.&lt;/span&gt;_load (node:electron&lt;span style=&#34;color:#7a8478&#34;&gt;/&lt;/span&gt;js2c&lt;span style=&#34;color:#7a8478&#34;&gt;/&lt;/span&gt;renderer_init:&lt;span style=&#34;color:#d699b6&#34;&gt;2&lt;/span&gt;:&lt;span style=&#34;color:#d699b6&#34;&gt;31718&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    at TracingChannel&lt;span style=&#34;color:#7a8478&#34;&gt;.&lt;/span&gt;traceSync (node:diagnostics_channel:&lt;span style=&#34;color:#d699b6&#34;&gt;322&lt;/span&gt;:&lt;span style=&#34;color:#d699b6&#34;&gt;14&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    at wrapModuleLoad (node:internal&lt;span style=&#34;color:#7a8478&#34;&gt;/&lt;/span&gt;modules&lt;span style=&#34;color:#7a8478&#34;&gt;/&lt;/span&gt;cjs&lt;span style=&#34;color:#7a8478&#34;&gt;/&lt;/span&gt;loader:&lt;span style=&#34;color:#d699b6&#34;&gt;242&lt;/span&gt;:&lt;span style=&#34;color:#d699b6&#34;&gt;24&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    at Module&lt;span style=&#34;color:#7a8478&#34;&gt;.&lt;/span&gt;require (node:internal&lt;span style=&#34;color:#7a8478&#34;&gt;/&lt;/span&gt;modules&lt;span style=&#34;color:#7a8478&#34;&gt;/&lt;/span&gt;cjs&lt;span style=&#34;color:#7a8478&#34;&gt;/&lt;/span&gt;loader:&lt;span style=&#34;color:#d699b6&#34;&gt;1494&lt;/span&gt;:&lt;span style=&#34;color:#d699b6&#34;&gt;12&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;提示找不到模块。&lt;/p&gt;&#xA;&lt;p&gt;Electron中，使用require语句导入，都是默认从项目跟目录开始查找，所以要拼接完整路径。使用绝对路径也是不行的，在IDE里可以跳转，但是一运行就是找不到模块&#xA;&lt;code&gt;const File = require(&amp;quot;src/js/File&amp;quot;)&lt;/code&gt;&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-gdscript3&#34; data-lang=&#34;gdscript3&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Uncaught Error: Cannot find module &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#39;src/js/File&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Require stack:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#7a8478&#34;&gt;-&lt;/span&gt; E:\Develop\markdown&lt;span style=&#34;color:#7a8478&#34;&gt;-&lt;/span&gt;editor\src\html\index&lt;span style=&#34;color:#7a8478&#34;&gt;.&lt;/span&gt;html&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    at Module&lt;span style=&#34;color:#7a8478&#34;&gt;.&lt;/span&gt;_resolveFilename (node:internal&lt;span style=&#34;color:#7a8478&#34;&gt;/&lt;/span&gt;modules&lt;span style=&#34;color:#7a8478&#34;&gt;/&lt;/span&gt;cjs&lt;span style=&#34;color:#7a8478&#34;&gt;/&lt;/span&gt;loader:&lt;span style=&#34;color:#d699b6&#34;&gt;1408&lt;/span&gt;:&lt;span style=&#34;color:#d699b6&#34;&gt;15&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    at a&lt;span style=&#34;color:#7a8478&#34;&gt;.&lt;/span&gt;_resolveFilename (node:electron&lt;span style=&#34;color:#7a8478&#34;&gt;/&lt;/span&gt;js2c&lt;span style=&#34;color:#7a8478&#34;&gt;/&lt;/span&gt;renderer_init:&lt;span style=&#34;color:#d699b6&#34;&gt;2&lt;/span&gt;:&lt;span style=&#34;color:#d699b6&#34;&gt;2643&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    at defaultResolveImpl (node:internal&lt;span style=&#34;color:#7a8478&#34;&gt;/&lt;/span&gt;modules&lt;span style=&#34;color:#7a8478&#34;&gt;/&lt;/span&gt;cjs&lt;span style=&#34;color:#7a8478&#34;&gt;/&lt;/span&gt;loader:&lt;span style=&#34;color:#d699b6&#34;&gt;1064&lt;/span&gt;:&lt;span style=&#34;color:#d699b6&#34;&gt;19&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    at resolveForCJSWithHooks (node:internal&lt;span style=&#34;color:#7a8478&#34;&gt;/&lt;/span&gt;modules&lt;span style=&#34;color:#7a8478&#34;&gt;/&lt;/span&gt;cjs&lt;span style=&#34;color:#7a8478&#34;&gt;/&lt;/span&gt;loader:&lt;span style=&#34;color:#d699b6&#34;&gt;1069&lt;/span&gt;:&lt;span style=&#34;color:#d699b6&#34;&gt;22&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    at Module&lt;span style=&#34;color:#7a8478&#34;&gt;.&lt;/span&gt;_load (node:internal&lt;span style=&#34;color:#7a8478&#34;&gt;/&lt;/span&gt;modules&lt;span style=&#34;color:#7a8478&#34;&gt;/&lt;/span&gt;cjs&lt;span style=&#34;color:#7a8478&#34;&gt;/&lt;/span&gt;loader:&lt;span style=&#34;color:#d699b6&#34;&gt;1218&lt;/span&gt;:&lt;span style=&#34;color:#d699b6&#34;&gt;37&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    at c&lt;span style=&#34;color:#7a8478&#34;&gt;.&lt;/span&gt;_load (node:electron&lt;span style=&#34;color:#7a8478&#34;&gt;/&lt;/span&gt;js2c&lt;span style=&#34;color:#7a8478&#34;&gt;/&lt;/span&gt;node_init:&lt;span style=&#34;color:#d699b6&#34;&gt;2&lt;/span&gt;:&lt;span style=&#34;color:#d699b6&#34;&gt;17950&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    at s&lt;span style=&#34;color:#7a8478&#34;&gt;.&lt;/span&gt;_load (node:electron&lt;span style=&#34;color:#7a8478&#34;&gt;/&lt;/span&gt;js2c&lt;span style=&#34;color:#7a8478&#34;&gt;/&lt;/span&gt;renderer_init:&lt;span style=&#34;color:#d699b6&#34;&gt;2&lt;/span&gt;:&lt;span style=&#34;color:#d699b6&#34;&gt;31718&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    at TracingChannel&lt;span style=&#34;color:#7a8478&#34;&gt;.&lt;/span&gt;traceSync (node:diagnostics_channel:&lt;span style=&#34;color:#d699b6&#34;&gt;322&lt;/span&gt;:&lt;span style=&#34;color:#d699b6&#34;&gt;14&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    at wrapModuleLoad (node:internal&lt;span style=&#34;color:#7a8478&#34;&gt;/&lt;/span&gt;modules&lt;span style=&#34;color:#7a8478&#34;&gt;/&lt;/span&gt;cjs&lt;span style=&#34;color:#7a8478&#34;&gt;/&lt;/span&gt;loader:&lt;span style=&#34;color:#d699b6&#34;&gt;242&lt;/span&gt;:&lt;span style=&#34;color:#d699b6&#34;&gt;24&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    at Module&lt;span style=&#34;color:#7a8478&#34;&gt;.&lt;/span&gt;require (node:internal&lt;span style=&#34;color:#7a8478&#34;&gt;/&lt;/span&gt;modules&lt;span style=&#34;color:#7a8478&#34;&gt;/&lt;/span&gt;cjs&lt;span style=&#34;color:#7a8478&#34;&gt;/&lt;/span&gt;loader:&lt;span style=&#34;color:#d699b6&#34;&gt;1494&lt;/span&gt;:&lt;span style=&#34;color:#d699b6&#34;&gt;12&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;解决方法&#34;&gt;解决方法&lt;/h2&gt;&#xA;&lt;p&gt;使用path.join拼接完整路径&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-js&#34; data-lang=&#34;js&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e67e80&#34;&gt;const&lt;/span&gt; File &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; require(path.join(__dirname, &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;../js/File.js&amp;#34;&lt;/span&gt;));&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;经过测试，只能用这种方法导入，太怪了&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>面向对象与面向过程的本质区别</title>
      <link>https://blog.verdant.ee/posts/%E9%9D%A2%E5%90%91%E5%AF%B9%E8%B1%A1%E7%BC%96%E7%A8%8B%E4%B8%8E%E9%9D%A2%E5%90%91%E8%BF%87%E7%A8%8B%E7%BC%96%E7%A8%8B%E7%9A%84%E6%9C%AC%E8%B4%A8%E5%8C%BA%E5%88%AB/</link>
      <pubDate>Thu, 29 May 2025 21:21:36 +0000</pubDate><author>i@glowisle.me (五葉地錦)</author>
      <guid>https://blog.verdant.ee/posts/%E9%9D%A2%E5%90%91%E5%AF%B9%E8%B1%A1%E7%BC%96%E7%A8%8B%E4%B8%8E%E9%9D%A2%E5%90%91%E8%BF%87%E7%A8%8B%E7%BC%96%E7%A8%8B%E7%9A%84%E6%9C%AC%E8%B4%A8%E5%8C%BA%E5%88%AB/</guid>
      <description>&lt;p&gt;面向对象与面向过程这两种编程思想主要体现在一件事上：面向对象关心&lt;strong&gt;谁来做&lt;/strong&gt;，而面向过程关心&lt;strong&gt;做什么&lt;/strong&gt;。&lt;/p&gt;&#xA;&lt;p&gt;举个例子，如果我现在要开发一个五子棋小游戏，在面向对象的思想中，实现步骤应该是这样的。&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;有一个窗口对象，可以让我的游戏内容展示在里面&lt;/li&gt;&#xA;&lt;li&gt;创建棋盘对象&lt;/li&gt;&#xA;&lt;li&gt;初始化棋盘&lt;/li&gt;&#xA;&lt;li&gt;创建计分板对象&lt;/li&gt;&#xA;&lt;li&gt;初始化计分板&lt;/li&gt;&#xA;&lt;li&gt;玩家开始下棋，棋盘对象创建棋子对象，绘制出来&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;不难看出，面向对象就是在关心&lt;strong&gt;谁来做&lt;/strong&gt;，先关心哪个对象去做，再去研究这个对象要去&lt;strong&gt;怎么做&lt;/strong&gt;。抽象层级更高，但是符合人类的思维。从代码结构上来看，写面向对象更偏向在画一个树状图，一级一级划分谁要做什么事情，而面向过程更像一个线性的流程图，全程都在关心需要做什么事情。&lt;/p&gt;&#xA;&lt;p&gt;更官方地说，面向对象以算法和流程为核心，强调步骤拆解。而面向对象以与对象交互为核心，强调责任分配&lt;/p&gt;&#xA;&lt;p&gt;当然，写法在语言上就有所限定。C更适合面向过程，头文件的引用使用函数做事就意味着C很难实现面向对象的设计模式，当然有一些比较邪门的技巧，容易开枪把自己脚指头崩掉，比如&lt;code&gt;void*&lt;/code&gt;模拟泛型这种不在本文讨论范围。&lt;/p&gt;&#xA;&lt;p&gt;C缺乏类、继承等基础语法支持，但可以用结构体加函数指针简单模拟对象，但设计难度有所增加，调试难度更有所增加。面向过程更适合处理逻辑简单的任务或算法密集型任务，而面向对象更适合构建GUI应用等复杂系统。&lt;/p&gt;&#xA;&lt;p&gt;面向对象并非在所有情况下都是最优选择。还是需要依据开发项目的实际需求考量。&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>【数据结构与算法】哈希表</title>
      <link>https://blog.verdant.ee/posts/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E4%B8%8E%E7%AE%97%E6%B3%95%E5%93%88%E5%B8%8C%E8%A1%A8/</link>
      <pubDate>Wed, 28 May 2025 21:44:28 +0000</pubDate><author>i@glowisle.me (五葉地錦)</author>
      <guid>https://blog.verdant.ee/posts/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E4%B8%8E%E7%AE%97%E6%B3%95%E5%93%88%E5%B8%8C%E8%A1%A8/</guid>
      <description>&lt;p&gt;哈希表（Hash Table）是一种基于键（Key）直接访问数据的高效数据结构，其核心思想是通过哈希函数将键映射到数组的特定位置，从而实现平均时间复杂度为 O(1)O(1) 的插入、查找和删除操作。&lt;/p&gt;&#xA;&lt;h2 id=&#34;结构定义&#34;&gt;结构定义&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-c&#34; data-lang=&#34;c&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;// 哈希表节点&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e67e80&#34;&gt;typedef&lt;/span&gt; &lt;span style=&#34;color:#e67e80&#34;&gt;struct&lt;/span&gt; HashNode {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#dbbc7f&#34;&gt;int&lt;/span&gt; key;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#dbbc7f&#34;&gt;int&lt;/span&gt; value;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e67e80&#34;&gt;struct&lt;/span&gt; Hashcode&lt;span style=&#34;color:#7a8478&#34;&gt;*&lt;/span&gt; next;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;} HashNode;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;// 哈希表&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e67e80&#34;&gt;typedef&lt;/span&gt; &lt;span style=&#34;color:#e67e80&#34;&gt;struct&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#dbbc7f&#34;&gt;int&lt;/span&gt; size;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    HashNode&lt;span style=&#34;color:#7a8478&#34;&gt;**&lt;/span&gt; buckets;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;} HashTable;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;初始化&#34;&gt;初始化&lt;/h2&gt;&#xA;&lt;p&gt;创建HashTable结构体变量，进行初始化赋值，分配桶的内存。&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-c&#34; data-lang=&#34;c&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;// 初始化哈希表&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;HashTable &lt;span style=&#34;color:#7a8478&#34;&gt;*&lt;/span&gt;&lt;span style=&#34;color:#b2c98f&#34;&gt;creat_hash_table&lt;/span&gt;(&lt;span style=&#34;color:#dbbc7f&#34;&gt;int&lt;/span&gt; size)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    HashTable&lt;span style=&#34;color:#7a8478&#34;&gt;*&lt;/span&gt; table &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; (HashTable&lt;span style=&#34;color:#7a8478&#34;&gt;*&lt;/span&gt;)&lt;span style=&#34;color:#b2c98f&#34;&gt;malloc&lt;/span&gt;(&lt;span style=&#34;color:#e67e80&#34;&gt;sizeof&lt;/span&gt;(HashTable));&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    table&lt;span style=&#34;color:#7a8478&#34;&gt;-&amp;gt;&lt;/span&gt;size &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; size;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    table&lt;span style=&#34;color:#7a8478&#34;&gt;-&amp;gt;&lt;/span&gt;buckets &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; (HashNode&lt;span style=&#34;color:#7a8478&#34;&gt;**&lt;/span&gt;)&lt;span style=&#34;color:#b2c98f&#34;&gt;malloc&lt;/span&gt;(size &lt;span style=&#34;color:#7a8478&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color:#e67e80&#34;&gt;sizeof&lt;/span&gt;(HashNode&lt;span style=&#34;color:#7a8478&#34;&gt;*&lt;/span&gt;));&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e67e80&#34;&gt;for&lt;/span&gt;(&lt;span style=&#34;color:#dbbc7f&#34;&gt;int&lt;/span&gt; i &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#d699b6&#34;&gt;0&lt;/span&gt;; i &lt;span style=&#34;color:#7a8478&#34;&gt;&amp;lt;&lt;/span&gt; size; i&lt;span style=&#34;color:#7a8478&#34;&gt;++&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        table&lt;span style=&#34;color:#7a8478&#34;&gt;-&amp;gt;&lt;/span&gt;buckets[i] &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#d699b6&#34;&gt;NULL&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e67e80&#34;&gt;return&lt;/span&gt; table;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;哈希函数&#34;&gt;哈希函数&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-c&#34; data-lang=&#34;c&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;// 哈希函数&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#dbbc7f&#34;&gt;int&lt;/span&gt; &lt;span style=&#34;color:#b2c98f&#34;&gt;hash&lt;/span&gt;(&lt;span style=&#34;color:#dbbc7f&#34;&gt;int&lt;/span&gt; key, &lt;span style=&#34;color:#dbbc7f&#34;&gt;int&lt;/span&gt; size)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e67e80&#34;&gt;return&lt;/span&gt; key &lt;span style=&#34;color:#7a8478&#34;&gt;%&lt;/span&gt; size;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;通过简单取模运算获得哈希值&lt;/p&gt;&#xA;&lt;h2 id=&#34;插入&#34;&gt;插入&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-c&#34; data-lang=&#34;c&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;// 插入&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#dbbc7f&#34;&gt;void&lt;/span&gt; &lt;span style=&#34;color:#b2c98f&#34;&gt;insert&lt;/span&gt;(HashTable &lt;span style=&#34;color:#7a8478&#34;&gt;*&lt;/span&gt;table, &lt;span style=&#34;color:#dbbc7f&#34;&gt;int&lt;/span&gt; key, &lt;span style=&#34;color:#dbbc7f&#34;&gt;int&lt;/span&gt; value)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#dbbc7f&#34;&gt;int&lt;/span&gt; index &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#b2c98f&#34;&gt;hash&lt;/span&gt;(key, table&lt;span style=&#34;color:#7a8478&#34;&gt;-&amp;gt;&lt;/span&gt;size);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    HashNode &lt;span style=&#34;color:#7a8478&#34;&gt;*&lt;/span&gt;newNode &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; (HashNode &lt;span style=&#34;color:#7a8478&#34;&gt;*&lt;/span&gt;)&lt;span style=&#34;color:#b2c98f&#34;&gt;malloc&lt;/span&gt;(&lt;span style=&#34;color:#e67e80&#34;&gt;sizeof&lt;/span&gt;(HashNode));&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    newNode&lt;span style=&#34;color:#7a8478&#34;&gt;-&amp;gt;&lt;/span&gt;key &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; key;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    newNode&lt;span style=&#34;color:#7a8478&#34;&gt;-&amp;gt;&lt;/span&gt;value &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; value;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    newNode&lt;span style=&#34;color:#7a8478&#34;&gt;-&amp;gt;&lt;/span&gt;next &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#d699b6&#34;&gt;NULL&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;// 插入链表头部，避免遍历链表&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e67e80&#34;&gt;if&lt;/span&gt; (table&lt;span style=&#34;color:#7a8478&#34;&gt;-&amp;gt;&lt;/span&gt;buckets[index] &lt;span style=&#34;color:#7a8478&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#d699b6&#34;&gt;NULL&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        table&lt;span style=&#34;color:#7a8478&#34;&gt;-&amp;gt;&lt;/span&gt;buckets[index] &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; newNode;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e67e80&#34;&gt;else&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        newNode&lt;span style=&#34;color:#7a8478&#34;&gt;-&amp;gt;&lt;/span&gt;next &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; table&lt;span style=&#34;color:#7a8478&#34;&gt;-&amp;gt;&lt;/span&gt;buckets[index];&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        table&lt;span style=&#34;color:#7a8478&#34;&gt;-&amp;gt;&lt;/span&gt;buckets[index] &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; newNode;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;头插法无需遍历到尾部。&lt;/p&gt;&#xA;&lt;h2 id=&#34;查找&#34;&gt;查找&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-c&#34; data-lang=&#34;c&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;// 查找&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#dbbc7f&#34;&gt;int&lt;/span&gt; &lt;span style=&#34;color:#b2c98f&#34;&gt;search&lt;/span&gt;(HashTable &lt;span style=&#34;color:#7a8478&#34;&gt;*&lt;/span&gt;table, &lt;span style=&#34;color:#dbbc7f&#34;&gt;int&lt;/span&gt; key)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#dbbc7f&#34;&gt;int&lt;/span&gt; index &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#b2c98f&#34;&gt;hash&lt;/span&gt;(key, table&lt;span style=&#34;color:#7a8478&#34;&gt;-&amp;gt;&lt;/span&gt;size);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    HashNode &lt;span style=&#34;color:#7a8478&#34;&gt;*&lt;/span&gt;current &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; table&lt;span style=&#34;color:#7a8478&#34;&gt;-&amp;gt;&lt;/span&gt;buckets[index];&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e67e80&#34;&gt;while&lt;/span&gt; (current &lt;span style=&#34;color:#7a8478&#34;&gt;!=&lt;/span&gt; &lt;span style=&#34;color:#d699b6&#34;&gt;NULL&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#e67e80&#34;&gt;if&lt;/span&gt; (current&lt;span style=&#34;color:#7a8478&#34;&gt;-&amp;gt;&lt;/span&gt;key &lt;span style=&#34;color:#7a8478&#34;&gt;==&lt;/span&gt; key)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#e67e80&#34;&gt;return&lt;/span&gt; current&lt;span style=&#34;color:#7a8478&#34;&gt;-&amp;gt;&lt;/span&gt;value;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        current &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; current&lt;span style=&#34;color:#7a8478&#34;&gt;-&amp;gt;&lt;/span&gt;next;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e67e80&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#7a8478&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#d699b6&#34;&gt;1&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;删除&#34;&gt;删除&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-c&#34; data-lang=&#34;c&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#dbbc7f&#34;&gt;void&lt;/span&gt; &lt;span style=&#34;color:#b2c98f&#34;&gt;deleate&lt;/span&gt;(HashTable&lt;span style=&#34;color:#7a8478&#34;&gt;*&lt;/span&gt; table, &lt;span style=&#34;color:#dbbc7f&#34;&gt;int&lt;/span&gt; key)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#dbbc7f&#34;&gt;int&lt;/span&gt; index &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#b2c98f&#34;&gt;hash&lt;/span&gt;(key, table&lt;span style=&#34;color:#7a8478&#34;&gt;-&amp;gt;&lt;/span&gt;size);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;HashNode&lt;span style=&#34;color:#7a8478&#34;&gt;*&lt;/span&gt; current &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; table&lt;span style=&#34;color:#7a8478&#34;&gt;-&amp;gt;&lt;/span&gt;buckets[index];&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;HashNode&lt;span style=&#34;color:#7a8478&#34;&gt;*&lt;/span&gt; prev &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#d699b6&#34;&gt;NULL&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#e67e80&#34;&gt;while&lt;/span&gt;(current &lt;span style=&#34;color:#7a8478&#34;&gt;!=&lt;/span&gt; &lt;span style=&#34;color:#d699b6&#34;&gt;NULL&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;{&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#e67e80&#34;&gt;if&lt;/span&gt;(current&lt;span style=&#34;color:#7a8478&#34;&gt;-&amp;gt;&lt;/span&gt;key &lt;span style=&#34;color:#7a8478&#34;&gt;==&lt;/span&gt; key)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;{&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&#x9;&lt;span style=&#34;color:#e67e80&#34;&gt;if&lt;/span&gt;(prev &lt;span style=&#34;color:#7a8478&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#d699b6&#34;&gt;NULL&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&#x9;{&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&#x9;&#x9;table&lt;span style=&#34;color:#7a8478&#34;&gt;-&amp;gt;&lt;/span&gt;buckets[index] &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; current&lt;span style=&#34;color:#7a8478&#34;&gt;-&amp;gt;&lt;/span&gt;next;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&#x9;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&#x9;&lt;span style=&#34;color:#e67e80&#34;&gt;else&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&#x9;{&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&#x9;&#x9;prev&lt;span style=&#34;color:#7a8478&#34;&gt;-&amp;gt;&lt;/span&gt;next &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; current&lt;span style=&#34;color:#7a8478&#34;&gt;-&amp;gt;&lt;/span&gt;next;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&#x9;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&#x9;&lt;span style=&#34;color:#b2c98f&#34;&gt;free&lt;/span&gt;(current);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&#x9;&lt;span style=&#34;color:#e67e80&#34;&gt;return&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&#x9;prev &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; current;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&#x9;current &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; current&lt;span style=&#34;color:#7a8478&#34;&gt;-&amp;gt;&lt;/span&gt;next;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>感谢恩师夸奖</title>
      <link>https://blog.verdant.ee/posts/%E6%84%9F%E8%B0%A2%E6%81%A9%E5%B8%88%E5%A4%B8%E5%A5%96/</link>
      <pubDate>Wed, 28 May 2025 20:27:55 +0000</pubDate><author>i@glowisle.me (五葉地錦)</author>
      <guid>https://blog.verdant.ee/posts/%E6%84%9F%E8%B0%A2%E6%81%A9%E5%B8%88%E5%A4%B8%E5%A5%96/</guid>
      <description>&lt;p&gt;课上没能回答出某个问题，遂借势挖苦批评，其中几个句子记忆犹新：“你主意太正”、“成绩不上不下”、“回家不知道是研究问题了还是学习了”。&lt;/p&gt;&#xA;&lt;p&gt;感谢恩师夸奖。我就是主意正。&lt;/p&gt;&#xA;&lt;p&gt;我主意正，因为我是一个有血有肉，更有灵魂的活生生的人，我有思想，我主意正，人和猩猩在行为上的显著区别就是，人知道自己在做什么，因为人的脑子很好用。我不会被戴上项圈，又或是打磨成木偶任人操控。这是我作为活人，基本该有的。&lt;/p&gt;&#xA;&lt;p&gt;我不碌碌无为，不生活不平淡平庸。我既不会被你驯化，也没有成为推荐算法定时批量投喂的赛博牲畜，无休止地享受奶头乐，因为我主意正。&lt;/p&gt;&#xA;&lt;p&gt;我活着有我自己的目的和意义，我主意非常正。&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;p&gt;感谢恩师夸奖，我成绩确实不上不下。&lt;/p&gt;&#xA;&lt;p&gt;我成绩不上不下，但我至少有一颗健全健康的心。我还是不会戴上项圈，被驯化成跪坐在主人身旁吐舌头的狗。我成绩不上不下，但是我能保证有学上。上学，成绩固然重要，但最基本要保证是活着的，肉体活着，灵魂活着。我活着快乐，我活着有意义，我活着为我。&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;p&gt;感谢恩师夸奖，我回家就是在学习，研究问题。&lt;/p&gt;&#xA;&lt;p&gt;我不沉迷电子游戏，也不刷短视频。我有值得我付出的事情等着我去做，并且都小有了一番成就。我从来没有停止过学习，极度的求知欲和好奇心是我保证灵魂活下去的因素之一。课余生活从逻辑冷硬的计算机到感情喷薄的文学美术作品，再到观察披着人皮的地外物种。做什么都比死读书，读死书，读书死好。我能保证有学上，而且保证灵魂活着。&lt;/p&gt;&#xA;&lt;p&gt;因为主意正，成绩不上不下，回家学习，研究问题，我才真正的活着。永远不要试图驯化我，我永远也不会被驯化，永远不会成为谁。&lt;/p&gt;&#xA;&lt;p&gt;感谢恩师夸奖。&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>【数据结构与算法】众数、中位数</title>
      <link>https://blog.verdant.ee/posts/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E4%B8%8E%E7%AE%97%E6%B3%95%E4%BC%97%E6%95%B0%E4%B8%AD%E4%BD%8D%E6%95%B0/</link>
      <pubDate>Tue, 27 May 2025 19:41:53 +0000</pubDate><author>i@glowisle.me (五葉地錦)</author>
      <guid>https://blog.verdant.ee/posts/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E4%B8%8E%E7%AE%97%E6%B3%95%E4%BC%97%E6%95%B0%E4%B8%AD%E4%BD%8D%E6%95%B0/</guid>
      <description>&lt;p&gt;今天学这个东西的时候，看到这种线性的数据结构加上排序步骤，很难不想写个程序来跑跑。&lt;/p&gt;&#xA;&lt;p&gt;先来说说中位数，这个比较有思路。&lt;/p&gt;&#xA;&lt;h2 id=&#34;中位数&#34;&gt;中位数&lt;/h2&gt;&#xA;&lt;p&gt;具体的操作步骤应该是：&lt;strong&gt;排序 =&amp;gt; 获得数据元素个数n =&amp;gt; 是奇数 ? (n+1) / 2 : n / 2&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;那么排序就用之前学的冒泡排序，这种题目大概不会完全倒序给数据，编写sort函数：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-c&#34; data-lang=&#34;c&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#dbbc7f&#34;&gt;void&lt;/span&gt; &lt;span style=&#34;color:#b2c98f&#34;&gt;sort&lt;/span&gt;(&lt;span style=&#34;color:#dbbc7f&#34;&gt;int&lt;/span&gt; arr[], &lt;span style=&#34;color:#dbbc7f&#34;&gt;int&lt;/span&gt; n)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e67e80&#34;&gt;for&lt;/span&gt; (&lt;span style=&#34;color:#dbbc7f&#34;&gt;int&lt;/span&gt; i &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#d699b6&#34;&gt;0&lt;/span&gt;; i &lt;span style=&#34;color:#7a8478&#34;&gt;&amp;lt;&lt;/span&gt; n &lt;span style=&#34;color:#7a8478&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#d699b6&#34;&gt;1&lt;/span&gt;; i&lt;span style=&#34;color:#7a8478&#34;&gt;++&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e67e80&#34;&gt;for&lt;/span&gt; (&lt;span style=&#34;color:#dbbc7f&#34;&gt;int&lt;/span&gt; j &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#d699b6&#34;&gt;0&lt;/span&gt;; j &lt;span style=&#34;color:#7a8478&#34;&gt;&amp;lt;&lt;/span&gt; n &lt;span style=&#34;color:#7a8478&#34;&gt;-&lt;/span&gt; i &lt;span style=&#34;color:#7a8478&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#d699b6&#34;&gt;1&lt;/span&gt;; j&lt;span style=&#34;color:#7a8478&#34;&gt;++&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#e67e80&#34;&gt;if&lt;/span&gt; (arr[j] &lt;span style=&#34;color:#7a8478&#34;&gt;&amp;gt;&lt;/span&gt; arr[j &lt;span style=&#34;color:#7a8478&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#d699b6&#34;&gt;1&lt;/span&gt;]) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#dbbc7f&#34;&gt;int&lt;/span&gt; temp &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; arr[j];&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        arr[j] &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; arr[j &lt;span style=&#34;color:#7a8478&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#d699b6&#34;&gt;1&lt;/span&gt;];&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        arr[j &lt;span style=&#34;color:#7a8478&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#d699b6&#34;&gt;1&lt;/span&gt;] &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; temp;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;接下来是判断奇偶，奇偶的判断非常简单，对取模运算的值比对就可以，编写is_even函数，判断奇偶性。&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-c&#34; data-lang=&#34;c&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#dbbc7f&#34;&gt;int&lt;/span&gt; &lt;span style=&#34;color:#b2c98f&#34;&gt;is_even&lt;/span&gt;(&lt;span style=&#34;color:#dbbc7f&#34;&gt;int&lt;/span&gt; data)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e67e80&#34;&gt;if&lt;/span&gt; (data &lt;span style=&#34;color:#7a8478&#34;&gt;%&lt;/span&gt; &lt;span style=&#34;color:#d699b6&#34;&gt;2&lt;/span&gt; &lt;span style=&#34;color:#7a8478&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#d699b6&#34;&gt;0&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e67e80&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#d699b6&#34;&gt;true&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  } &lt;span style=&#34;color:#e67e80&#34;&gt;else&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e67e80&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#d699b6&#34;&gt;false&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;完成了奇偶判断，下一步就可以正式进行中位数的运算，编写get_median函数。&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-c&#34; data-lang=&#34;c&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#dbbc7f&#34;&gt;double&lt;/span&gt; &lt;span style=&#34;color:#b2c98f&#34;&gt;get_median&lt;/span&gt;(&lt;span style=&#34;color:#dbbc7f&#34;&gt;int&lt;/span&gt; arr[], &lt;span style=&#34;color:#dbbc7f&#34;&gt;int&lt;/span&gt; length)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;// 获取索引&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#dbbc7f&#34;&gt;double&lt;/span&gt; result &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#d699b6&#34;&gt;0&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#b2c98f&#34;&gt;sort&lt;/span&gt;(arr, length);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e67e80&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#b2c98f&#34;&gt;is_even&lt;/span&gt;(length)) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#dbbc7f&#34;&gt;int&lt;/span&gt; median_index_1 &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; arr[(length &lt;span style=&#34;color:#7a8478&#34;&gt;/&lt;/span&gt; &lt;span style=&#34;color:#d699b6&#34;&gt;2&lt;/span&gt;) &lt;span style=&#34;color:#7a8478&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#d699b6&#34;&gt;1&lt;/span&gt;];&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#dbbc7f&#34;&gt;int&lt;/span&gt; median_index_2 &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; arr[length &lt;span style=&#34;color:#7a8478&#34;&gt;/&lt;/span&gt; &lt;span style=&#34;color:#d699b6&#34;&gt;2&lt;/span&gt;];&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;// 计算数据&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    result &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; (median_index_1 &lt;span style=&#34;color:#7a8478&#34;&gt;+&lt;/span&gt; median_index_2) &lt;span style=&#34;color:#7a8478&#34;&gt;/&lt;/span&gt; &lt;span style=&#34;color:#d699b6&#34;&gt;2.0&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  } &lt;span style=&#34;color:#e67e80&#34;&gt;else&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    result &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; arr[length &lt;span style=&#34;color:#7a8478&#34;&gt;/&lt;/span&gt; &lt;span style=&#34;color:#d699b6&#34;&gt;2&lt;/span&gt;];&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e67e80&#34;&gt;return&lt;/span&gt; result;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;这个函数首先计算了中位数在数组的哪个索引，然后进行了计算。&lt;/p&gt;&#xA;&lt;h2 id=&#34;众数&#34;&gt;众数&lt;/h2&gt;&#xA;&lt;p&gt;众数（Mode）是指在&lt;a href=&#34;https://baike.baidu.com/item/%E7%BB%9F%E8%AE%A1%E5%88%86%E5%B8%83/8478867?fromModule=lemma_inlink&#34;&gt;统计分布&lt;/a&gt;上具有明显集中趋势点的&lt;a href=&#34;https://baike.baidu.com/item/%E6%95%B0%E5%80%BC/2013853?fromModule=lemma_inlink&#34;&gt;数值&lt;/a&gt;，代表&lt;a href=&#34;https://baike.baidu.com/item/%E6%95%B0%E6%8D%AE/33305?fromModule=lemma_inlink&#34;&gt;数据&lt;/a&gt;的一般水平。 也是一组数据中出现次数最多的数值，有时众数在一组数中有好几个。用M表示。&lt;/p&gt;&#xA;&lt;p&gt;那么，在程序中，想要计算一个值出现的次数并比对，可拆分为两步。&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;计算出每一个数据出现的次数&lt;/li&gt;&#xA;&lt;li&gt;结果排序比对&lt;/li&gt;&#xA;&lt;li&gt;找出最大值&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;我没学过什么高级的数据结构，就用这个复制数组的笨办法吧。&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-c&#34; data-lang=&#34;c&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#dbbc7f&#34;&gt;int&lt;/span&gt; &lt;span style=&#34;color:#b2c98f&#34;&gt;get_mode&lt;/span&gt;(&lt;span style=&#34;color:#dbbc7f&#34;&gt;int&lt;/span&gt; arr[], &lt;span style=&#34;color:#dbbc7f&#34;&gt;int&lt;/span&gt; length)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#dbbc7f&#34;&gt;int&lt;/span&gt; &lt;span style=&#34;color:#7a8478&#34;&gt;*&lt;/span&gt;copy_arr &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#b2c98f&#34;&gt;malloc&lt;/span&gt;(length &lt;span style=&#34;color:#7a8478&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color:#e67e80&#34;&gt;sizeof&lt;/span&gt;(&lt;span style=&#34;color:#dbbc7f&#34;&gt;int&lt;/span&gt;));&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#b2c98f&#34;&gt;memcpy&lt;/span&gt;(copy_arr, arr, length &lt;span style=&#34;color:#7a8478&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color:#e67e80&#34;&gt;sizeof&lt;/span&gt;(&lt;span style=&#34;color:#dbbc7f&#34;&gt;int&lt;/span&gt;));&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#b2c98f&#34;&gt;sort&lt;/span&gt;(copy_arr, length);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#dbbc7f&#34;&gt;int&lt;/span&gt; max_count &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#d699b6&#34;&gt;0&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#dbbc7f&#34;&gt;int&lt;/span&gt; current_count &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#d699b6&#34;&gt;1&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#dbbc7f&#34;&gt;int&lt;/span&gt; mode &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; copy_arr[&lt;span style=&#34;color:#d699b6&#34;&gt;0&lt;/span&gt;];&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e67e80&#34;&gt;for&lt;/span&gt; (&lt;span style=&#34;color:#dbbc7f&#34;&gt;int&lt;/span&gt; i &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#d699b6&#34;&gt;1&lt;/span&gt;; i &lt;span style=&#34;color:#7a8478&#34;&gt;&amp;lt;&lt;/span&gt; length; i&lt;span style=&#34;color:#7a8478&#34;&gt;++&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e67e80&#34;&gt;if&lt;/span&gt; (copy_arr[i] &lt;span style=&#34;color:#7a8478&#34;&gt;==&lt;/span&gt; copy_arr[i &lt;span style=&#34;color:#7a8478&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#d699b6&#34;&gt;1&lt;/span&gt;]) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      current_count&lt;span style=&#34;color:#7a8478&#34;&gt;++&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    } &lt;span style=&#34;color:#e67e80&#34;&gt;else&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#e67e80&#34;&gt;if&lt;/span&gt; (current_count &lt;span style=&#34;color:#7a8478&#34;&gt;&amp;gt;&lt;/span&gt; max_count) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        max_count &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; current_count;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        mode &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; copy_arr[i &lt;span style=&#34;color:#7a8478&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#d699b6&#34;&gt;1&lt;/span&gt;];&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      current_count &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#d699b6&#34;&gt;1&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e67e80&#34;&gt;if&lt;/span&gt; (current_count &lt;span style=&#34;color:#7a8478&#34;&gt;&amp;gt;&lt;/span&gt; max_count) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    mode &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; copy_arr[length &lt;span style=&#34;color:#7a8478&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#d699b6&#34;&gt;1&lt;/span&gt;];&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#b2c98f&#34;&gt;free&lt;/span&gt;(copy_arr);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e67e80&#34;&gt;return&lt;/span&gt; mode;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;这个函数干了以下几件事：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;复制数组&lt;/li&gt;&#xA;&lt;li&gt;排序复制好的数组&lt;/li&gt;&#xA;&lt;li&gt;对比数组元素，如果array[i] == array[i - 1]，出现次数+1&lt;/li&gt;&#xA;&lt;li&gt;如果遇到新元素，检查是否需要更新最大值&lt;/li&gt;&#xA;&lt;li&gt;动态更新众数值&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;测试跑一把，输出如下&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-c&#34; data-lang=&#34;c&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#dbbc7f&#34;&gt;int&lt;/span&gt; &lt;span style=&#34;color:#b2c98f&#34;&gt;main&lt;/span&gt;()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#dbbc7f&#34;&gt;int&lt;/span&gt; arr[] &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; {&lt;span style=&#34;color:#d699b6&#34;&gt;1&lt;/span&gt;, &lt;span style=&#34;color:#d699b6&#34;&gt;1&lt;/span&gt;, &lt;span style=&#34;color:#d699b6&#34;&gt;1&lt;/span&gt;, &lt;span style=&#34;color:#d699b6&#34;&gt;1&lt;/span&gt;, &lt;span style=&#34;color:#d699b6&#34;&gt;2&lt;/span&gt;, &lt;span style=&#34;color:#d699b6&#34;&gt;2&lt;/span&gt;, &lt;span style=&#34;color:#d699b6&#34;&gt;4&lt;/span&gt;, &lt;span style=&#34;color:#d699b6&#34;&gt;5&lt;/span&gt;, &lt;span style=&#34;color:#d699b6&#34;&gt;7&lt;/span&gt;, &lt;span style=&#34;color:#d699b6&#34;&gt;4&lt;/span&gt;, &lt;span style=&#34;color:#d699b6&#34;&gt;4&lt;/span&gt;, &lt;span style=&#34;color:#d699b6&#34;&gt;4&lt;/span&gt;, &lt;span style=&#34;color:#d699b6&#34;&gt;4&lt;/span&gt;, &lt;span style=&#34;color:#d699b6&#34;&gt;4&lt;/span&gt;, &lt;span style=&#34;color:#d699b6&#34;&gt;4&lt;/span&gt;, &lt;span style=&#34;color:#d699b6&#34;&gt;4&lt;/span&gt;, &lt;span style=&#34;color:#d699b6&#34;&gt;4&lt;/span&gt;, &lt;span style=&#34;color:#d699b6&#34;&gt;4&lt;/span&gt;, &lt;span style=&#34;color:#d699b6&#34;&gt;2&lt;/span&gt;};&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#dbbc7f&#34;&gt;int&lt;/span&gt; length &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e67e80&#34;&gt;sizeof&lt;/span&gt;(arr) &lt;span style=&#34;color:#7a8478&#34;&gt;/&lt;/span&gt; &lt;span style=&#34;color:#e67e80&#34;&gt;sizeof&lt;/span&gt;(arr[&lt;span style=&#34;color:#d699b6&#34;&gt;0&lt;/span&gt;]);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#dbbc7f&#34;&gt;int&lt;/span&gt; result &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#b2c98f&#34;&gt;get_mode&lt;/span&gt;(arr, length);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#b2c98f&#34;&gt;printf&lt;/span&gt;(&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;result = %d&lt;/span&gt;&lt;span style=&#34;color:#b2c98f&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;&lt;/span&gt;, result);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;result = 4&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;del&gt;这个办法实在是有点蠢，找时间仔细学学哈希表，应该能更快。&lt;/del&gt;&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>高效率的沟通绝不会从在吗开始</title>
      <link>https://blog.verdant.ee/posts/%E9%AB%98%E6%95%88%E7%8E%87%E7%9A%84%E6%B2%9F%E9%80%9A%E7%BB%9D%E4%B8%8D%E4%BC%9A%E4%BB%8E%E5%9C%A8%E5%90%97%E5%BC%80%E5%A7%8B/</link>
      <pubDate>Mon, 26 May 2025 18:55:29 +0000</pubDate><author>i@glowisle.me (五葉地錦)</author>
      <guid>https://blog.verdant.ee/posts/%E9%AB%98%E6%95%88%E7%8E%87%E7%9A%84%E6%B2%9F%E9%80%9A%E7%BB%9D%E4%B8%8D%E4%BC%9A%E4%BB%8E%E5%9C%A8%E5%90%97%E5%BC%80%E5%A7%8B/</guid>
      <description>&lt;p&gt;“在吗？”&lt;/p&gt;&#xA;&lt;p&gt;据考证，“在吗”发起聊天的起源，是QQ刚盛行的年代，大家都没有手机，升级普遍需要在电脑上挂QQ。&lt;strong&gt;为了确认在线的是不是本人而使用的&lt;/strong&gt;。&lt;/p&gt;&#xA;&lt;p&gt;那么，现在还真的需要这句话吗？&lt;/p&gt;&#xA;&lt;p&gt;在吗只对聊天的发起者有好处，从接受者的主观来讲，对接受者无益的请求，在回复了以后，也就难以推脱了，毕竟总不可能装死。一旦在吗这两个字被发送，一个关于对方意图的猜疑链就无穷无尽地延伸下去了。&lt;/p&gt;&#xA;&lt;p&gt;我向来都认为，网络上的沟通效率非常高，至少对于我个人来讲，是这样的。尤其是在邮箱等正式场合，迫于信息传播的时效性，只好组织起完整、官方、正式的语言，而不是东一句西一句，在信息的密度和聚合性上，是远远高于即时通讯软件的。&lt;/p&gt;&#xA;&lt;p&gt;网络的优势也在于，你需要面对的是一块会发光的砖头，而不是长相体态性格各异的复杂的人。这可比现实中自在太多了。在网上沟通，只需要有大脑可以组织语言，有手可以打字，这就足够了。在现实生活中的沟通，既要注意语气、神态，又要关心对方的心情。这点对于不同的人来说，沟通效率也是不同的。网络把人的某个方面几乎带到了同一个高度。人们可以完全出于理性，而不被对方的现实表现影响地思考，在这一点来看，网络可以做到非常高效的交流。&lt;/p&gt;&#xA;&lt;p&gt;“在吗”这两个字，无异于完全拉回到了现实面对面交流，当它被发送，信息的传递状态是阻塞的。如果是因有什么请求而发起聊天，发起者无法直接获得对方态度，接受者也不能直接明确对方意图，乃中华五千年文明之奇大败笔，让信息传播效率直接被打回原始社会。&lt;/p&gt;&#xA;&lt;p&gt;如果是为了解决问题而开始交流，那应当直击要害，保证效率。糙话讲：有话快说，有屁快放。理不糙，只有这样才能让你的问题快速解决，也能不浪费双方的时间。&lt;/p&gt;&#xA;&lt;p&gt;我的QQ好友里就有一位，堪称低效沟通的典范。有一次，他想问一下我曾经使用过的某个网站还有没有链接。他没有直接提出这个问题，而是在一分钟内给我发送了十五个相同的没有任何信息含量的GIF动图。那好吧，我不知道他的意图，我也只好回复一个不能传达任何情绪的动图。长达五分钟的沉默后，他终于开口问出了这个问题。在我从凌乱不堪的收藏夹里找出这个网址时，一分钟又过去了。&lt;/p&gt;&#xA;&lt;p&gt;讲这个例子，我想表达的是，如果在第一句话就抛出问题：“某某某网站你还有吗？”那会得到相当迅速且准确的答复，如果发送了十五个毫无意义的图，那只能白白浪费五分钟。&lt;/p&gt;&#xA;&lt;p&gt;最后，总结一下我这篇东拉西扯的短文，如果目的是解决问题，而不是聊聊天，这种无意义的模糊的文字是在耽误大家的时间。这种沟通方式并非冷漠，而是能解决问题的最直接办法。&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>【数据结构与算法】二叉树</title>
      <link>https://blog.verdant.ee/posts/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E4%B8%8E%E7%AE%97%E6%B3%95%E4%BA%8C%E5%8F%89%E6%A0%91/</link>
      <pubDate>Sun, 25 May 2025 18:46:37 +0000</pubDate><author>i@glowisle.me (五葉地錦)</author>
      <guid>https://blog.verdant.ee/posts/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E4%B8%8E%E7%AE%97%E6%B3%95%E4%BA%8C%E5%8F%89%E6%A0%91/</guid>
      <description>&lt;h2 id=&#34;定义&#34;&gt;定义&lt;/h2&gt;&#xA;&lt;p&gt;二叉树（binary tree）是指树中节点的度不大于2的有序树，它是一种最简单且最重要的树。二叉树的递归定义为：二叉树是一棵空树，或者是一棵由一个根节点和两棵互不相交的，分别称作根的左子树和右子树组成的非空树；左子树和右子树又同样都是二叉树。&lt;/p&gt;&#xA;&lt;h2 id=&#34;实现&#34;&gt;实现&lt;/h2&gt;&#xA;&lt;h3 id=&#34;结构定义&#34;&gt;结构定义&lt;/h3&gt;&#xA;&lt;p&gt;&lt;del&gt;尝试了一下C语言，各种指针乱指，各种bug，暂时放自己一马，跟自己和解一下用js写写吧。&lt;/del&gt;&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-js&#34; data-lang=&#34;js&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e67e80&#34;&gt;class&lt;/span&gt; TreeNode {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  constructor(data) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e67e80&#34;&gt;this&lt;/span&gt;.data &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; data;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e67e80&#34;&gt;this&lt;/span&gt;.left &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e67e80&#34;&gt;null&lt;/span&gt;;  &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;// 左节点&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e67e80&#34;&gt;this&lt;/span&gt;.right &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e67e80&#34;&gt;null&lt;/span&gt;; &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;// 右边节点&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;创建对象并绑定节点&#34;&gt;创建对象并绑定节点&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-js&#34; data-lang=&#34;js&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;// 手动绑定节点&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e67e80&#34;&gt;let&lt;/span&gt; root &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e67e80&#34;&gt;new&lt;/span&gt; TreeNode(&lt;span style=&#34;color:#d699b6&#34;&gt;1&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;root.left &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e67e80&#34;&gt;new&lt;/span&gt; TreeNode(&lt;span style=&#34;color:#d699b6&#34;&gt;2&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;root.right &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e67e80&#34;&gt;new&lt;/span&gt; TreeNode(&lt;span style=&#34;color:#d699b6&#34;&gt;3&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;root.left.left &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e67e80&#34;&gt;new&lt;/span&gt; TreeNode(&lt;span style=&#34;color:#d699b6&#34;&gt;4&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;root.right.right &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e67e80&#34;&gt;new&lt;/span&gt; TreeNode(&lt;span style=&#34;color:#d699b6&#34;&gt;5&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;此时树的结构：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      1&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     /  \&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     2   3&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   /  \   \&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  4    5   6&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;遍历二叉树&#34;&gt;遍历二叉树&lt;/h3&gt;&#xA;&lt;h4 id=&#34;前序遍历dfs&#34;&gt;前序遍历（DFS）&lt;/h4&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-js&#34; data-lang=&#34;js&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e67e80&#34;&gt;function&lt;/span&gt; preOrder(node) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e67e80&#34;&gt;if&lt;/span&gt;(node) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    console.log(node.data)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    preOrder(node.left)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    preOrder(node.right)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;这里用递归调用，遍历到左右元素&lt;/p&gt;&#xA;&lt;h4 id=&#34;层序遍历bfs&#34;&gt;层序遍历（BFS）&lt;/h4&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-js&#34; data-lang=&#34;js&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e67e80&#34;&gt;function&lt;/span&gt; levelOrder(root) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e67e80&#34;&gt;const&lt;/span&gt; queue &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; [];&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  queue.push(root);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e67e80&#34;&gt;while&lt;/span&gt; (queue.length) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e67e80&#34;&gt;const&lt;/span&gt; node &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; queue.shift();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    console.log(node.data);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e67e80&#34;&gt;if&lt;/span&gt; (node.left) queue.push(node.left);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e67e80&#34;&gt;if&lt;/span&gt; (node.right) queue.push(node.right);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>“我有厌蠢症”</title>
      <link>https://blog.verdant.ee/posts/%E6%88%91%E6%9C%89%E5%8E%8C%E8%A0%A2%E7%97%87/</link>
      <pubDate>Tue, 20 May 2025 19:48:56 +0000</pubDate><author>i@glowisle.me (五葉地錦)</author>
      <guid>https://blog.verdant.ee/posts/%E6%88%91%E6%9C%89%E5%8E%8C%E8%A0%A2%E7%97%87/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;2025.12.10: 这个文章的观点已经过时，其中包含偏激的、攻击性的话语，很多内容甚至现在的我都不认同。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;“厌蠢症”大概是迄今为止我听到的唯一一个能与近些年很火的一个心理测试——MBTI抗衡的。&lt;/p&gt;&#xA;&lt;p&gt;前两年MBTI这东西刚出来时，很多人争着抢着去做测试，把自己标签上的四个字母如数家珍，甚至为了维持人设，去扮演人格，倒反天罡。但不能否认，这个测试确实能在与陌生人的聊天中快速找到话题切入点，以两大种类属性人格为根，横向延伸出许多话题，建立起临时的友谊。过两天，结果就是空间互赞，再不联系。&lt;/p&gt;&#xA;&lt;p&gt;同时，这个测试也有一个点，当局者迷。即&lt;strong&gt;筛选&lt;/strong&gt;。&lt;/p&gt;&#xA;&lt;p&gt;筛选出分辨能力弱，花钱去做假测试的和不清楚真实的自己，喜欢给自己贴标签，经常把MBTI挂在嘴边的人。这两种人，说难听点，&lt;strong&gt;蠢&lt;/strong&gt;。&lt;/p&gt;&#xA;&lt;p&gt;用MBTI的例子来引出本文的核心观点：&lt;strong&gt;厌蠢症才是真的蠢&lt;/strong&gt;。&lt;/p&gt;&#xA;&lt;p&gt;不可否认地，高傲自大的人确实蠢。&lt;/p&gt;&#xA;&lt;p&gt;上次让我这么情绪复杂的还是一群没病硬装、拿疾病当挡箭牌的“抑郁症患者”。&lt;/p&gt;&#xA;&lt;p&gt;厌蠢症这三个字，完全是送命题，也筛选出智商和情商都达到“蠢”的标准的人。首先，当你说出这句话，就意味着你把自己当做了聪明人。带着狂妄、自大、轻浮、傲慢的“聪明人”。&lt;/p&gt;&#xA;&lt;p&gt;傲慢才是原罪。&lt;/p&gt;&#xA;&lt;p&gt;带着这份傲慢，厌蠢症发作，完全暴露自己最低智的一面，自诩聪明人。实际上蠢到极点还不自知。用人类的大脑仔细思考一下，这三个字是否写出来咬手、读出来扎嘴？用人类的大脑仔细思考一下，你是否有资格讨厌你所谓的“蠢”？用人类的大脑思考一下，你对聪明的定义，以及对自己的理解是什么样的？仔细思考一下，你能否在生活中完美无缺？你是否在每一场考试都拿到满分？你是否能照顾他人情绪，读懂空气氛围？&lt;/p&gt;&#xA;&lt;p&gt;他们思考出结果了吗？没有。厌蠢症患者无法思考。不具备人类的大脑，没有思考的能力。也不愿意去思考，只是一直傲慢自大下去，这才是真的蠢。&lt;/p&gt;&#xA;&lt;p&gt;再把这句愚蠢的话大声地说出来：“我有厌蠢症。”&lt;/p&gt;&#xA;&lt;p&gt;自己作何感想？他人作何感想？&lt;/p&gt;&#xA;&lt;p&gt;如果你愿意继续做你所谓的聪明人并继续厌蠢下去，那你只有高傲自大、狂妄轻浮，你是真的蠢。&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>这样的博客的意义是？</title>
      <link>https://blog.verdant.ee/posts/%E5%8D%9A%E5%AE%A2%E6%96%87%E7%AB%A0%E5%8A%A0%E5%AF%86%E7%A0%81%E7%9A%84%E6%84%8F%E4%B9%89%E6%98%AF/</link>
      <pubDate>Mon, 19 May 2025 21:53:10 +0000</pubDate><author>i@glowisle.me (五葉地錦)</author>
      <guid>https://blog.verdant.ee/posts/%E5%8D%9A%E5%AE%A2%E6%96%87%E7%AB%A0%E5%8A%A0%E5%AF%86%E7%A0%81%E7%9A%84%E6%84%8F%E4%B9%89%E6%98%AF/</guid>
      <description>&lt;h2 id=&#34;博客文章的密码&#34;&gt;博客文章的密码&lt;/h2&gt;&#xA;&lt;p&gt;博客文章加密码，意义何在？&lt;/p&gt;&#xA;&lt;p&gt;写博客的意义是？&lt;/p&gt;&#xA;&lt;p&gt;写博客的意义之一，不是放大自己的声音，表达自己的观点吗？&lt;/p&gt;&#xA;&lt;p&gt;这就要牵扯到你写博客的目的。如果你说，你写博客是为了取悦自己，那为什么要把文章发出来？取悦自己是真的吗？还是对自己网站没有流量的自我安慰？不允许他人看见，那我只能认为您财力精力都很强盛，有财力购买服务器、主题；有精力维护服务器、网站。为什么不写在备忘录里呢？&lt;/p&gt;&#xA;&lt;p&gt;发出来，不是为了被人看见？&lt;/p&gt;&#xA;&lt;p&gt;还是说，是在扮演什么角色、人设给什么人看？&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;p&gt;我个人一直十分痛恨各大平台的强制注册手段，复制代码要注册、展开文章要注册，打开评论区还要注册。所以在我一开始使用动态博客程序的时候，从来没想过有强迫读者注册才能评论。&lt;/p&gt;&#xA;&lt;p&gt;这个问题依然要归结到写博客的意义。如果你写博客，是为了变现，利用在各个博客的评论区乱尿增加的一点SEO权重带来的可怜流量，和不知道从哪里抄搬来的技术文章，连格式都不调一下就挂在网站上又或是分享一大堆所谓免费资源，引流关注微信公众号的，强迫注册，为了赚钱，不寒碜。吗？&lt;/p&gt;&#xA;&lt;p&gt;很他妈寒碜！&lt;/p&gt;&#xA;&lt;p&gt;读者吃着你搬来的别人拉的屎，又要被你骗去你自建的茅房，这钱就算拿到，也是脏的，好好掂量一下这钱里都有什么。&lt;/p&gt;&#xA;&lt;p&gt;如果是正常的博客，要强迫读者注册才可评论，查看文章，那更令人费解。技术文章下，读者遇到了问题，或想更近一步讨论；表达观点、分享日常的文章下，读者看到一个有趣的灵魂，一个，强迫注册，都无异于直接抹杀读者讨论的念头。输入邮箱或手机号，接收验证码、输入验证码，再登录。加之服务器地理位置、配置等原因导致的访问不畅，每一秒所做的每一个行为，都是在一丝丝抽离由文字与读者建立起的联系。&lt;/p&gt;&#xA;&lt;p&gt;最后，只能说上一句：&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;我写博客只为取悦自己。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</description>
    </item>
    <item>
      <title>【数据结构与算法】栈</title>
      <link>https://blog.verdant.ee/posts/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E4%B8%8E%E7%AE%97%E6%B3%95%E6%A0%88/</link>
      <pubDate>Sun, 11 May 2025 10:09:21 +0000</pubDate><author>i@glowisle.me (五葉地錦)</author>
      <guid>https://blog.verdant.ee/posts/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E4%B8%8E%E7%AE%97%E6%B3%95%E6%A0%88/</guid>
      <description>&lt;h2 id=&#34;基本概念&#34;&gt;基本概念&lt;/h2&gt;&#xA;&lt;p&gt;栈（Stack）是一种后进先出（LIFO）原则的线性数据结构。核心操作包括：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;压栈（Push）：将元素添加到栈顶&lt;/li&gt;&#xA;&lt;li&gt;出栈（Pop）：移除并返回栈顶元素&lt;/li&gt;&#xA;&lt;li&gt;查看栈顶（Check）获取但移除栈顶元素&lt;/li&gt;&#xA;&lt;li&gt;判空（is_empty）检查栈是否为空&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;结构定义&#34;&gt;结构定义&lt;/h2&gt;&#xA;&lt;p&gt;使用动态数组实现栈，包含三个核心属性：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-c&#34; data-lang=&#34;c&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e67e80&#34;&gt;typedef&lt;/span&gt; &lt;span style=&#34;color:#e67e80&#34;&gt;struct&lt;/span&gt; Stack {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#dbbc7f&#34;&gt;int&lt;/span&gt;&lt;span style=&#34;color:#7a8478&#34;&gt;*&lt;/span&gt; data; &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;// 存储元素的数组&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#dbbc7f&#34;&gt;int&lt;/span&gt; top;   &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;// 栈顶指针（当前元素位置）&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#dbbc7f&#34;&gt;int&lt;/span&gt; capacity; &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;// 栈的最大容量&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;data&lt;/code&gt;：动态分配的数组指针&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;top&lt;/code&gt;：初始值为-1，表示空栈，压栈时递增，出栈时递减&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;capacity&lt;/code&gt;：栈的容量上限&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;功能实现&#34;&gt;功能实现&lt;/h2&gt;&#xA;&lt;h3 id=&#34;初始化&#34;&gt;初始化&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-c&#34; data-lang=&#34;c&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;// 初始化栈&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#dbbc7f&#34;&gt;void&lt;/span&gt; &lt;span style=&#34;color:#b2c98f&#34;&gt;init_stack&lt;/span&gt;(Stack &lt;span style=&#34;color:#7a8478&#34;&gt;*&lt;/span&gt;s, &lt;span style=&#34;color:#dbbc7f&#34;&gt;int&lt;/span&gt; capacity) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;// 计算最大容量&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  s &lt;span style=&#34;color:#7a8478&#34;&gt;-&amp;gt;&lt;/span&gt; data &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; (&lt;span style=&#34;color:#dbbc7f&#34;&gt;int&lt;/span&gt;&lt;span style=&#34;color:#7a8478&#34;&gt;*&lt;/span&gt;)&lt;span style=&#34;color:#b2c98f&#34;&gt;malloc&lt;/span&gt;(&lt;span style=&#34;color:#e67e80&#34;&gt;sizeof&lt;/span&gt;(&lt;span style=&#34;color:#dbbc7f&#34;&gt;int&lt;/span&gt;) &lt;span style=&#34;color:#7a8478&#34;&gt;*&lt;/span&gt; capacity)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e67e80&#34;&gt;if&lt;/span&gt;(&lt;span style=&#34;color:#7a8478&#34;&gt;!&lt;/span&gt;s &lt;span style=&#34;color:#7a8478&#34;&gt;-&amp;gt;&lt;/span&gt; data) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#b2c98f&#34;&gt;printf&lt;/span&gt;(&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;内存分配失败！&lt;/span&gt;&lt;span style=&#34;color:#b2c98f&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#b2c98f&#34;&gt;exit&lt;/span&gt;(&lt;span style=&#34;color:#d699b6&#34;&gt;1&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;// 初始化栈顶为-1，表空&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  s &lt;span style=&#34;color:#7a8478&#34;&gt;-&amp;gt;&lt;/span&gt; top &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#7a8478&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#d699b6&#34;&gt;1&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;// 把当前计算的最大容量赋值给传进来的栈&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  s &lt;span style=&#34;color:#7a8478&#34;&gt;-&amp;gt;&lt;/span&gt; capacity &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; capacity;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;这个函数中进行了动态分配内存计算最大容量，初始化赋值和异常处理。&lt;/p&gt;&#xA;&lt;h3 id=&#34;压栈push&#34;&gt;压栈（Push）&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-c&#34; data-lang=&#34;c&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;// 压栈（Push）&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#dbbc7f&#34;&gt;void&lt;/span&gt; &lt;span style=&#34;color:#b2c98f&#34;&gt;push&lt;/span&gt;(Stack &lt;span style=&#34;color:#7a8478&#34;&gt;*&lt;/span&gt;s, &lt;span style=&#34;color:#dbbc7f&#34;&gt;int&lt;/span&gt; value) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e67e80&#34;&gt;if&lt;/span&gt; (s &lt;span style=&#34;color:#7a8478&#34;&gt;-&amp;gt;&lt;/span&gt; top &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; s &lt;span style=&#34;color:#7a8478&#34;&gt;-&amp;gt;&lt;/span&gt; capacity &lt;span style=&#34;color:#7a8478&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#d699b6&#34;&gt;1&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#b2c98f&#34;&gt;printf&lt;/span&gt;(&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;栈已满！&lt;/span&gt;&lt;span style=&#34;color:#b2c98f&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e67e80&#34;&gt;return&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  s &lt;span style=&#34;color:#7a8478&#34;&gt;-&amp;gt;&lt;/span&gt; data[&lt;span style=&#34;color:#7a8478&#34;&gt;++&lt;/span&gt;s&lt;span style=&#34;color:#7a8478&#34;&gt;-&amp;gt;&lt;/span&gt;top] &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; value;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;检查栈是否已满，先递增指针再存入数据&lt;/p&gt;&#xA;&lt;h3 id=&#34;出栈pop&#34;&gt;出栈（Pop）&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-c&#34; data-lang=&#34;c&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;// 出栈（Pop）&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#dbbc7f&#34;&gt;int&lt;/span&gt; &lt;span style=&#34;color:#b2c98f&#34;&gt;pop&lt;/span&gt;(Stack &lt;span style=&#34;color:#7a8478&#34;&gt;*&lt;/span&gt;s) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e67e80&#34;&gt;if&lt;/span&gt;(&lt;span style=&#34;color:#b2c98f&#34;&gt;is_empty&lt;/span&gt;(s)) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#b2c98f&#34;&gt;printf&lt;/span&gt;(&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;栈为空！&lt;/span&gt;&lt;span style=&#34;color:#b2c98f&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e67e80&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#7a8478&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#d699b6&#34;&gt;1&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e67e80&#34;&gt;return&lt;/span&gt; s&lt;span style=&#34;color:#7a8478&#34;&gt;-&amp;gt;&lt;/span&gt;data[s&lt;span style=&#34;color:#7a8478&#34;&gt;-&amp;gt;&lt;/span&gt;top&lt;span style=&#34;color:#7a8478&#34;&gt;--&lt;/span&gt;];&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;检查栈是否为空，返回当前栈顶元素后移动指针&lt;/p&gt;&#xA;&lt;h3 id=&#34;辅助功能&#34;&gt;辅助功能&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-c&#34; data-lang=&#34;c&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;// 判空&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#dbbc7f&#34;&gt;int&lt;/span&gt; &lt;span style=&#34;color:#b2c98f&#34;&gt;is_empty&lt;/span&gt;(Stack &lt;span style=&#34;color:#7a8478&#34;&gt;*&lt;/span&gt;s) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e67e80&#34;&gt;return&lt;/span&gt; s&lt;span style=&#34;color:#7a8478&#34;&gt;-&amp;gt;&lt;/span&gt; top &lt;span style=&#34;color:#7a8478&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#7a8478&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#d699b6&#34;&gt;1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;// 查看栈顶元素&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#dbbc7f&#34;&gt;int&lt;/span&gt; &lt;span style=&#34;color:#b2c98f&#34;&gt;peek&lt;/span&gt;(Stack &lt;span style=&#34;color:#7a8478&#34;&gt;*&lt;/span&gt;s) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e67e80&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#b2c98f&#34;&gt;is_empty&lt;/span&gt;(s) &lt;span style=&#34;color:#7a8478&#34;&gt;?&lt;/span&gt; &lt;span style=&#34;color:#7a8478&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#d699b6&#34;&gt;1&lt;/span&gt; &lt;span style=&#34;color:#7a8478&#34;&gt;:&lt;/span&gt; s&lt;span style=&#34;color:#7a8478&#34;&gt;-&amp;gt;&lt;/span&gt;data[s&lt;span style=&#34;color:#7a8478&#34;&gt;-&amp;gt;&lt;/span&gt;top];&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;// 销毁&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#dbbc7f&#34;&gt;void&lt;/span&gt; &lt;span style=&#34;color:#b2c98f&#34;&gt;destory_stack&lt;/span&gt;(Stack &lt;span style=&#34;color:#7a8478&#34;&gt;*&lt;/span&gt;S) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#b2c98f&#34;&gt;free&lt;/span&gt;(s&lt;span style=&#34;color:#7a8478&#34;&gt;-&amp;gt;&lt;/span&gt;data);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  s &lt;span style=&#34;color:#7a8478&#34;&gt;-&amp;gt;&lt;/span&gt; top &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#7a8478&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#d699b6&#34;&gt;1&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  s &lt;span style=&#34;color:#7a8478&#34;&gt;-&amp;gt;&lt;/span&gt; capacity &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#d699b6&#34;&gt;0&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>【数据结构与算法】冒泡排序</title>
      <link>https://blog.verdant.ee/posts/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E4%B8%8E%E7%AE%97%E6%B3%95%E5%86%92%E6%B3%A1%E6%8E%92%E5%BA%8F/</link>
      <pubDate>Sat, 10 May 2025 20:06:05 +0000</pubDate><author>i@glowisle.me (五葉地錦)</author>
      <guid>https://blog.verdant.ee/posts/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E4%B8%8E%E7%AE%97%E6%B3%95%E5%86%92%E6%B3%A1%E6%8E%92%E5%BA%8F/</guid>
      <description>&lt;h2 id=&#34;核心思想&#34;&gt;核心思想&lt;/h2&gt;&#xA;&lt;p&gt;通过相邻元素的两两比较，将较大的元素逐步“冒泡”到数组末尾，每轮排序确定一个最大元素的最终位置。&lt;/p&gt;&#xA;&lt;h2 id=&#34;代码实现&#34;&gt;代码实现&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-c&#34; data-lang=&#34;c&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#dbbc7f&#34;&gt;void&lt;/span&gt; &lt;span style=&#34;color:#b2c98f&#34;&gt;bubble_sort&lt;/span&gt;(&lt;span style=&#34;color:#dbbc7f&#34;&gt;int&lt;/span&gt; arr[], &lt;span style=&#34;color:#dbbc7f&#34;&gt;int&lt;/span&gt; n) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;// 最外层控制循环轮数 n-1轮&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e67e80&#34;&gt;for&lt;/span&gt; (&lt;span style=&#34;color:#dbbc7f&#34;&gt;int&lt;/span&gt; i &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#d699b6&#34;&gt;0&lt;/span&gt;; i &lt;span style=&#34;color:#7a8478&#34;&gt;&amp;lt;&lt;/span&gt; n &lt;span style=&#34;color:#7a8478&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#d699b6&#34;&gt;1&lt;/span&gt;; i&lt;span style=&#34;color:#7a8478&#34;&gt;++&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;// 内层循环处理相邻元素比较和交换&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e67e80&#34;&gt;for&lt;/span&gt;(&lt;span style=&#34;color:#dbbc7f&#34;&gt;int&lt;/span&gt; j &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#d699b6&#34;&gt;0&lt;/span&gt;; j &lt;span style=&#34;color:#7a8478&#34;&gt;&amp;lt;&lt;/span&gt; n&lt;span style=&#34;color:#7a8478&#34;&gt;-&lt;/span&gt;i&lt;span style=&#34;color:#7a8478&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#d699b6&#34;&gt;1&lt;/span&gt;; j&lt;span style=&#34;color:#7a8478&#34;&gt;++&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#e67e80&#34;&gt;if&lt;/span&gt; (arr[j] &lt;span style=&#34;color:#7a8478&#34;&gt;&amp;gt;&lt;/span&gt; arr[j&lt;span style=&#34;color:#7a8478&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#d699b6&#34;&gt;1&lt;/span&gt;]) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#dbbc7f&#34;&gt;int&lt;/span&gt; temp &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; arr[j];&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        arr[j] &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; arr[j&lt;span style=&#34;color:#7a8478&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#d699b6&#34;&gt;1&lt;/span&gt;];&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        arr[j&lt;span style=&#34;color:#7a8478&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#d699b6&#34;&gt;1&lt;/span&gt;] &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; temp;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;// 调用&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#dbbc7f&#34;&gt;void&lt;/span&gt; &lt;span style=&#34;color:#b2c98f&#34;&gt;print_array&lt;/span&gt;(&lt;span style=&#34;color:#dbbc7f&#34;&gt;int&lt;/span&gt; arr[], &lt;span style=&#34;color:#dbbc7f&#34;&gt;int&lt;/span&gt; size) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e67e80&#34;&gt;for&lt;/span&gt; (&lt;span style=&#34;color:#dbbc7f&#34;&gt;int&lt;/span&gt; i &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#d699b6&#34;&gt;0&lt;/span&gt;; i &lt;span style=&#34;color:#7a8478&#34;&gt;&amp;lt;&lt;/span&gt; size; i&lt;span style=&#34;color:#7a8478&#34;&gt;++&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#b2c98f&#34;&gt;printf&lt;/span&gt;(&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;%d,&amp;#34;&lt;/span&gt;, arr[i]);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#b2c98f&#34;&gt;printf&lt;/span&gt;(&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#b2c98f&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#dbbc7f&#34;&gt;int&lt;/span&gt; &lt;span style=&#34;color:#b2c98f&#34;&gt;main&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#dbbc7f&#34;&gt;int&lt;/span&gt; arr[] &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; {&lt;span style=&#34;color:#d699b6&#34;&gt;23&lt;/span&gt;, &lt;span style=&#34;color:#d699b6&#34;&gt;232&lt;/span&gt;, &lt;span style=&#34;color:#d699b6&#34;&gt;55&lt;/span&gt;, &lt;span style=&#34;color:#d699b6&#34;&gt;2&lt;/span&gt;, &lt;span style=&#34;color:#d699b6&#34;&gt;7&lt;/span&gt;, &lt;span style=&#34;color:#d699b6&#34;&gt;0&lt;/span&gt;, &lt;span style=&#34;color:#d699b6&#34;&gt;576&lt;/span&gt;, &lt;span style=&#34;color:#d699b6&#34;&gt;342&lt;/span&gt;};&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#dbbc7f&#34;&gt;int&lt;/span&gt; n &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e67e80&#34;&gt;sizeof&lt;/span&gt;(arr) &lt;span style=&#34;color:#7a8478&#34;&gt;/&lt;/span&gt; &lt;span style=&#34;color:#e67e80&#34;&gt;sizeof&lt;/span&gt;(arr[&lt;span style=&#34;color:#d699b6&#34;&gt;0&lt;/span&gt;]);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#b2c98f&#34;&gt;printf&lt;/span&gt;(&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;排序前：&amp;#34;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#b2c98f&#34;&gt;print_array&lt;/span&gt;(arr, n);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#b2c98f&#34;&gt;bubble_sort&lt;/span&gt;(arr, n);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#b2c98f&#34;&gt;printf&lt;/span&gt;(&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;排序后&amp;#34;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#b2c98f&#34;&gt;print_array&lt;/span&gt;(arr, n);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;原理分析&#34;&gt;原理分析&lt;/h2&gt;&#xA;&lt;h3 id=&#34;外层循环的-i--n---1&#34;&gt;外层循环的 i &amp;lt; n - 1&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;n个元素的数组最多需要n-1轮冒泡，如5元素数组需要4轮排序&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;数学依据&lt;/strong&gt;：每轮将一个最大值“沉底”，当完成n-1轮时，最后一个元素必然有序&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;示例验证：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;原始数组：[3, 1, 4, 2]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;第一轮：[1, 3, 2, 4] （确定最大值4）&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;第二轮：[1, 2, 3, 4]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;用文字解释上面的函数，原理就是在循环中对比数组第i个元素和i+1（即后一位）元素的大小，若i &amp;gt; i +1 则把两者交换位置，随着循环的进行，数组就会被排序。&lt;/p&gt;&#xA;&lt;h3 id=&#34;内层循环的-j--n---i---1&#34;&gt;内层循环的 j &amp;lt; n - i - 1&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;动态缩小范围：每轮结束后末尾i个元素已有序&lt;/li&gt;&#xA;&lt;li&gt;比较次数：第i轮需要比较(n-1)-i次相邻元素&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;想象一下数组的线性结构，实际上就是在计算排序后的一位的前一位，这样就不会处理已经排序好的元素，进入下一轮循环时可正常排序。&lt;/p&gt;&#xA;&lt;h3 id=&#34;数组长度n的计算机制&#34;&gt;数组长度n的计算机制&lt;/h3&gt;&#xA;&lt;p&gt;在main函数中，对于n的计算，采用了&lt;code&gt;sizeof(arr) / sizeof(arr[0])&lt;/code&gt;的方式。可以这么理解。&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-c&#34; data-lang=&#34;c&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#dbbc7f&#34;&gt;int&lt;/span&gt; arr[] &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; {&lt;span style=&#34;color:#d699b6&#34;&gt;6&lt;/span&gt;,&lt;span style=&#34;color:#d699b6&#34;&gt;4&lt;/span&gt;,&lt;span style=&#34;color:#d699b6&#34;&gt;8&lt;/span&gt;,&lt;span style=&#34;color:#d699b6&#34;&gt;2&lt;/span&gt;};&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;假设int占用4字节，计算整个数组的内存占用&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e67e80&#34;&gt;sizeof&lt;/span&gt;(arr) &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#d699b6&#34;&gt;5&lt;/span&gt; &lt;span style=&#34;color:#7a8478&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color:#d699b6&#34;&gt;4&lt;/span&gt; &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#d699b6&#34;&gt;20&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e67e80&#34;&gt;sizeof&lt;/span&gt;(arr[&lt;span style=&#34;color:#d699b6&#34;&gt;0&lt;/span&gt;]) &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#d699b6&#34;&gt;4&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;n &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#d699b6&#34;&gt;20&lt;/span&gt; &lt;span style=&#34;color:#7a8478&#34;&gt;/&lt;/span&gt; &lt;span style=&#34;color:#d699b6&#34;&gt;4&lt;/span&gt; &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#d699b6&#34;&gt;5&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;计算出数组的总占用，再除以单个占用，就可以得到元素个数了。&lt;/p&gt;&#xA;&lt;h3 id=&#34;参数n的作用&#34;&gt;参数n的作用&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;循环控制：确定外层循环次数n-1次&lt;/li&gt;&#xA;&lt;li&gt;边界保护，防止越界&lt;/li&gt;&#xA;&lt;li&gt;效率优化：避免无效比较，如j&amp;lt;n-i-1&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;最坏情况&#34;&gt;最坏情况&lt;/h2&gt;&#xA;&lt;p&gt;冒泡排序的最坏情况发生在&lt;strong&gt;输入数组完全逆序情况下&lt;/strong&gt;，此时算法需要进行最大次数的比较和交换操作，时间复杂度达到最高。&lt;/p&gt;&#xA;&lt;p&gt;当待排序数组的初始状态为完全逆序，如[5,4,3,2,1]，每一轮外层循环都要将当前为排序部分的最大元素冒泡到正确位置，而且每次比较都会发生交换，此时：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;比较次数&lt;/strong&gt;： 共需要进行*(n - 1) + (n - 2) + &amp;hellip;*（等差数列求和）。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;交换次数&lt;/strong&gt;： 每次比较均需要交换，总交换次数也为上式结果。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;</description>
    </item>
    <item>
      <title>x86-64汇编学习笔记</title>
      <link>https://blog.verdant.ee/posts/x86-64%E6%B1%87%E7%BC%96%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/</link>
      <pubDate>Tue, 29 Apr 2025 13:44:13 +0000</pubDate><author>i@glowisle.me (五葉地錦)</author>
      <guid>https://blog.verdant.ee/posts/x86-64%E6%B1%87%E7%BC%96%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/</guid>
      <description>&lt;h2 id=&#34;机器指令和机器语言&#34;&gt;机器指令和机器语言&lt;/h2&gt;&#xA;&lt;p&gt;机器指令，二进制数字，机器语言全局机器指令的集合，CPU通过执行一系列的机器指令完成计算工作。&lt;/p&gt;&#xA;&lt;p&gt;汇编语言就是为了代替机器指令，使人类能够更加简单地编写程序而诞生的。汇编语言就是机器码的助记符。&lt;/p&gt;&#xA;&lt;p&gt;编译器将汇编代码再编译为真正的机器码。&lt;/p&gt;&#xA;&lt;h2 id=&#34;内存与硬盘&#34;&gt;内存与硬盘&lt;/h2&gt;&#xA;&lt;p&gt;内存指内存条，即RAM，临时存储，读写快容量小。&lt;/p&gt;&#xA;&lt;p&gt;硬盘长期存储，读写慢但容量大。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;ROM并非硬盘&lt;/strong&gt;，ROM&lt;strong&gt;只读存储器&lt;/strong&gt;（Read Only Memory），其内容在写入后就不能更改。&lt;/p&gt;&#xA;&lt;h2 id=&#34;存储单元&#34;&gt;存储单元&lt;/h2&gt;&#xA;&lt;p&gt;物理内存被划分为很多个存储单元，一个存储单元能存储8bit内容，也就是1字节。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;内存的最小单元是字节，不是位。&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;1B = 8bit&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;1KB = 1024B&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;1MB = 1024KB&lt;/p&gt;&#xA;&lt;p&gt;&amp;hellip;&amp;hellip;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;每一个存储单元都有相应的编号，也就是内存地址。运行程序时，操作系统会把程序载入内存中，随后CPU读取和写入程序中的某些数据并执行代码。&lt;/p&gt;&#xA;&lt;p&gt;无论是读取还是写入、执行，这些都是需要通过CPU总线进行的。&lt;/p&gt;&#xA;&lt;p&gt;总线分为数据线、地址总线、控制总线&lt;/p&gt;&#xA;&lt;p&gt;简而言之，地址总线负责寻址，控制总线负责发出控制指令，如读写，数据总线负责各个组件之间的数据传输。&lt;/p&gt;&#xA;&lt;h2 id=&#34;cpu的寻址能力&#34;&gt;CPU的寻址能力&lt;/h2&gt;&#xA;&lt;p&gt;CPU的寻址能力是由地址总线的位数决定的。&lt;/p&gt;&#xA;&lt;p&gt;通常认为32位系统有32位的寻址能力，64位同理，但不绝对。&lt;/p&gt;&#xA;&lt;h2 id=&#34;虚拟内存&#34;&gt;虚拟内存&lt;/h2&gt;&#xA;&lt;p&gt;物理内存即真实存在的内存，虚拟内存是建立在页表的基础上，由操作系统实现的。&lt;/p&gt;&#xA;&lt;h2 id=&#34;寄存器&#34;&gt;寄存器&lt;/h2&gt;&#xA;&lt;p&gt;基本的程序执行寄存器分为以下四类&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;通用目的寄存器&lt;/li&gt;&#xA;&lt;li&gt;段寄存器&lt;/li&gt;&#xA;&lt;li&gt;标志寄存器&lt;/li&gt;&#xA;&lt;li&gt;指令指针寄存器&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h3 id=&#34;16位通用寄存器中的高位和低位&#34;&gt;16位通用寄存器中的高位和低位&lt;/h3&gt;&#xA;&lt;p&gt;16位通用寄存器中，ax,bx,cx,dx可以只使用其高8位或低8位。&lt;/p&gt;&#xA;&lt;p&gt;高8位用字符&lt;code&gt;h&lt;/code&gt;表示，低8位用字母&lt;code&gt;l&lt;/code&gt;表示。&lt;/p&gt;&#xA;&lt;h3 id=&#34;32位通用目的寄存器&#34;&gt;32位通用目的寄存器&lt;/h3&gt;&#xA;&lt;p&gt;将16位通用寄存器扩展到32位，就得到了以下寄存器。&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;EAX&lt;/li&gt;&#xA;&lt;li&gt;EBX&lt;/li&gt;&#xA;&lt;li&gt;EDX&lt;/li&gt;&#xA;&lt;li&gt;ESI&lt;/li&gt;&#xA;&lt;li&gt;EDI&lt;/li&gt;&#xA;&lt;li&gt;ESP&lt;/li&gt;&#xA;&lt;li&gt;EBP&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;64位通用目的寄存器&#34;&gt;64位通用目的寄存器&lt;/h3&gt;&#xA;&lt;p&gt;将32扩展到64位，就得到了以下寄存器&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;RAX&lt;/li&gt;&#xA;&lt;li&gt;RBX&lt;/li&gt;&#xA;&lt;li&gt;RCX&lt;/li&gt;&#xA;&lt;li&gt;RDX&lt;/li&gt;&#xA;&lt;li&gt;RSI&lt;/li&gt;&#xA;&lt;li&gt;RDI&lt;/li&gt;&#xA;&lt;li&gt;RSP&lt;/li&gt;&#xA;&lt;li&gt;RDP&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;R是通用前缀，取自单词Register。&lt;/p&gt;&#xA;&lt;p&gt;此外还有R8-R15。&lt;/p&gt;&#xA;&lt;h3 id=&#34;同名寄存器之间的关系&#34;&gt;同名寄存器之间的关系&lt;/h3&gt;&#xA;&lt;p&gt;同名寄存器之间并不是许多个相互独立的寄存器，而是共同属于一个寄存器。&lt;/p&gt;&#xA;&lt;p&gt;以RAX为例：&lt;/p&gt;&#xA;&lt;p&gt;RAX是整个64位寄存器，EAX指的是RAX的低32位，AX指的是RAX的0-15位。AH指的是RAX的8-15位，AL指的是RAX的0-7位。&lt;/p&gt;&#xA;&lt;p&gt;1 word = 2 byte&lt;/p&gt;&#xA;&lt;p&gt;1 double word = 4 byte&lt;/p&gt;&#xA;&lt;h2 id=&#34;段寄存器&#34;&gt;段寄存器&lt;/h2&gt;&#xA;&lt;p&gt;段寄存器CS、DS、SS、ES、FS、GS都保存着16位段选择子。用于标识内存中特定的段。&lt;/p&gt;&#xA;&lt;p&gt;CS指向代码段，SS指向栈段，DS、ES、FS、GS指向数据段。&lt;/p&gt;&#xA;&lt;p&gt;内存可以被分为不同的段，访问内存时通过段基址+偏移的方式来访问。&lt;/p&gt;&#xA;&lt;p&gt;注意：物理内存本身是连续的，并没有被分隔开，分段是CPU的寻址方式。&lt;/p&gt;&#xA;&lt;p&gt;到了64位，段的概念被进一步弱化。&lt;/p&gt;&#xA;&lt;p&gt;内存变成平坦模型，即无分段式内存。所有对内存的访问都在同一个地址空间内进行。&lt;/p&gt;&#xA;&lt;p&gt;此外，对于段的保护也被弱化，64位更强调对页的保护。&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;看来段寄存器没什么用了啊&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;段寄存器最初的存在目的是辅助寻址，在32位下基本不再用于寻址，而是用于保护，而64位中其保护作用进一步被削弱。&lt;/p&gt;&#xA;&lt;h2 id=&#34;标志寄存器&#34;&gt;标志寄存器&lt;/h2&gt;&#xA;&lt;p&gt;标准寄存器存储了机组标志，分别是状态标志、控制标志、系统标志。&lt;/p&gt;&#xA;&lt;p&gt;&lt;figure class=&#34;image-caption&#34;&gt;&#xA;    &lt;img src=&#34;https://images.glowisle.me/image-20250429142959416.webp&#34; alt=&#34;标志寄存器结构示意图&#34;&gt;&#xA;    &lt;figcaption&gt;标志寄存器结构示意图&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&lt;/p&gt;&#xA;&lt;p&gt;简单地来说，系统中的某些状态与指令的执行结果会存在这个寄存器当中。&lt;/p&gt;&#xA;&lt;p&gt;标志寄存器在32位和64位中分别叫&lt;strong&gt;EFLAGS&lt;/strong&gt;和&lt;strong&gt;RFLAGS&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;RFLAGS的高32位是保留为，低32位与EFLAGS相同。&lt;/p&gt;&#xA;&lt;h2 id=&#34;指令指针寄存器&#34;&gt;指令指针寄存器&lt;/h2&gt;&#xA;&lt;p&gt;简而言之，他存储的是CPU即将执行的下一条指令的地址，通常用ip/eip/rip替代  （16，32，64位）&lt;/p&gt;&#xA;&lt;h2 id=&#34;进制&#34;&gt;进制&lt;/h2&gt;&#xA;&lt;p&gt;简单来说，n进制就是逢n进一。计算机当中，除了10进制，还有2进制和6进制。&lt;/p&gt;&#xA;&lt;h2 id=&#34;小端序和大端序&#34;&gt;小端序和大端序&lt;/h2&gt;&#xA;&lt;p&gt;小端序是指低字节在低地址，高字节在高地址。&lt;/p&gt;&#xA;&lt;p&gt;优点：字节高低位与地址高低位序列相同。&lt;/p&gt;&#xA;&lt;p&gt;缺点：不符合人类阅读顺序。&lt;/p&gt;&#xA;&lt;p&gt;如：64 00 00 00&lt;/p&gt;&#xA;&lt;p&gt;大端序与之相反。&lt;/p&gt;&#xA;&lt;p&gt;如 00 00 00 64&lt;/p&gt;&#xA;&lt;h2 id=&#34;mov指令&#34;&gt;MOV指令&lt;/h2&gt;&#xA;&lt;p&gt;MOV取自英文单词move，移动。&lt;/p&gt;&#xA;&lt;p&gt;例：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;MOV RAX, RCX&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;意思是，把RCX寄存器的值赋值给RAX&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>WSL Arch Linux ZSH输入中文输入法乱码解决方法</title>
      <link>https://blog.verdant.ee/posts/wsl-arch-linux-zsh%E8%BE%93%E5%85%A5%E4%B8%AD%E6%96%87%E4%B9%B1%E7%A0%81%E8%A7%A3%E5%86%B3%E6%96%B9%E6%B3%95/</link>
      <pubDate>Tue, 29 Apr 2025 10:31:26 +0000</pubDate><author>i@glowisle.me (五葉地錦)</author>
      <guid>https://blog.verdant.ee/posts/wsl-arch-linux-zsh%E8%BE%93%E5%85%A5%E4%B8%AD%E6%96%87%E4%B9%B1%E7%A0%81%E8%A7%A3%E5%86%B3%E6%96%B9%E6%B3%95/</guid>
      <description>&lt;p&gt;没有进行配置的情况下输入中文，一般会显示&amp;lt;0xffffffff&amp;gt;，这是由于没有安装字体造成的。&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo pacman -S noto-fonts-cjk  &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;# 安装中文字体&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo vi /etc/locale.gen        &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;# 取消注释 zh_CN.UTF-8&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo locale-gen                &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;# 生成语言环境&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#d699b6&#34;&gt;echo&lt;/span&gt; &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;export LANG=zh_CN.UTF-8&amp;#34;&lt;/span&gt; &amp;gt;&amp;gt; ~/.zshrc  &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;# 设置默认中文环境&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#d699b6&#34;&gt;source&lt;/span&gt; ~/.zshrc&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;source后，再次尝试输入中文，无异常。&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>Emacs EAF插件打开浏览器只显示opening http://xxx.xxx的解决方法</title>
      <link>https://blog.verdant.ee/posts/emacs-eaf%E6%8F%92%E4%BB%B6%E6%89%93%E5%BC%80%E6%B5%8F%E8%A7%88%E5%99%A8%E5%8F%AA%E6%98%BE%E7%A4%BAopening-http-xxx-xxx%E7%9A%84%E8%A7%A3%E5%86%B3%E6%96%B9%E6%B3%95/</link>
      <pubDate>Tue, 29 Apr 2025 10:02:49 +0000</pubDate><author>i@glowisle.me (五葉地錦)</author>
      <guid>https://blog.verdant.ee/posts/emacs-eaf%E6%8F%92%E4%BB%B6%E6%89%93%E5%BC%80%E6%B5%8F%E8%A7%88%E5%99%A8%E5%8F%AA%E6%98%BE%E7%A4%BAopening-http-xxx-xxx%E7%9A%84%E8%A7%A3%E5%86%B3%E6%96%B9%E6%B3%95/</guid>
      <description>&lt;p&gt;检查是否安装全部依赖，如yay、pip等。我这里是由于没有安装pip导致的。&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;sudo pacman -S python-pip&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;安装好后，进入eaf安装目录&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;cd ~/.emacs.d/site-lisp/emacs-application-framework &amp;amp;&amp;amp; ./install-eaf.py&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;重新安装eaf。等待脚本运行完成，打开emacs，输入&lt;code&gt;M-x eaf-install-and-update&lt;/code&gt;，等待执行完成。&lt;/p&gt;&#xA;&lt;p&gt;重新输入&lt;code&gt;M-x eaf-open-browser&lt;/code&gt;，输入网址，即可正常访问网页。&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>隐居</title>
      <link>https://blog.verdant.ee/posts/%E9%9A%90%E5%B1%85/</link>
      <pubDate>Sat, 26 Apr 2025 18:42:46 +0000</pubDate><author>i@glowisle.me (五葉地錦)</author>
      <guid>https://blog.verdant.ee/posts/%E9%9A%90%E5%B1%85/</guid>
      <description>&lt;p&gt;此隐居非彼隐居。残酷的是，人是社会性动物，脱离了社会根本没法生存。既然无法与现实的是是非非一刀两断，那就至少让自己在网络世界耳根清净点。&lt;/p&gt;&#xA;&lt;p&gt;自从前几个月退坑音游后，基本就与游戏没了什么交际。周末空闲时间就听听歌，写写代码，画点画。五一假期也要开始认真练琴了。这么说来还颇有几分文气，琴棋书画几样都有沾点。远离音游圈子后，我的群也退得差不多，为数不多留下来的几个群都是最早进的，或者花了很大劲才进去的，虽然人还在群里，但是已经几乎和群友没什么共同话题了。那几个群里只有痴迷于段位的人们在争论某张图是g+还是d-，毫无意义。在视频平台曾经投稿的音游视频也都设置成了私密，之所以没有删掉有两点原因，一个是全删硬币大出血，另一个则是留个念想，好歹也陪伴了这么长时间，通过这类游戏交到了很多好朋友。&lt;/p&gt;&#xA;&lt;p&gt;与几乎所有人都保持着浅度的社交，非必要不再主动参与哪些圈子的活动。最极端的时候我的QQ只剩五个群，好友只有十几个，账号设置为不可搜索。现在回想起来那段时候是真清净自在。越来越趋近于隐居的状态，极力削弱自己在网络上的存在感。如果有人想接近或了解我，应该没什么途径，为数不多发表言论的地方只有博客和朋友之间的小群。化被动接受为主动寻找应该能免去不少怪人，毕竟主动寻找的在少数，林子大了什么鸟都有。&lt;/p&gt;&#xA;&lt;p&gt;自在，自在。&lt;/p&gt;&#xA;&lt;p&gt;多年之后的我再读起这些文字会有什么感想？是会感叹自己的超前还是悲哀自己的孤僻呢。&lt;/p&gt;&#xA;&lt;p&gt;文字这种古老的载体对于新现的图片、视频来说，最大的优势就是能很好地把心情亦或是观点表达出来。这也是我认为以记录为目的，Blog优于Plog和Vlog的原因。&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>Valine评论系统踩坑记录</title>
      <link>https://blog.verdant.ee/posts/valine%E8%AF%84%E8%AE%BA%E7%B3%BB%E7%BB%9F%E8%B8%A9%E5%9D%91%E8%AE%B0%E5%BD%95/</link>
      <pubDate>Wed, 23 Apr 2025 21:54:03 +0000</pubDate><author>i@glowisle.me (五葉地錦)</author>
      <guid>https://blog.verdant.ee/posts/valine%E8%AF%84%E8%AE%BA%E7%B3%BB%E7%BB%9F%E8%B8%A9%E5%9D%91%E8%AE%B0%E5%BD%95/</guid>
      <description>&lt;p&gt;我个人很早以前就惦记着换上这个评论系统，曾经使用Butterfly主题的时候就有折腾过Valine，当时是浏览器缓存策略和CORS跨域拦截的问题。网上能找到的教程都比较老，几年以前的情况不再适用于现在了，所以现在去折腾的话，大概率要踩非常多的坑。本文主要讲述我个人踩到的坑和解决方法。&lt;/p&gt;&#xA;&lt;p&gt;本文内容是我自己试错出来的，不要问为什么要这么做，我也不清楚，但是这么做可以正常使用！&lt;/p&gt;&#xA;&lt;p&gt;首先你要有一个自己的域名，不要用.github.io。LeanCloud中设置-域名绑定-API访问域名要绑定你自己的二级域。&lt;/p&gt;&#xA;&lt;p&gt;&lt;figure class=&#34;image-caption&#34;&gt;&#xA;    &lt;img src=&#34;https://images.glowisle.me/image-20250423220150404.webp&#34; alt=&#34;&#34;&gt;&#xA;    &lt;figcaption&gt;&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&lt;/p&gt;&#xA;&lt;p&gt;这里一定一定要做DNS解析，非常重要。&lt;/p&gt;&#xA;&lt;p&gt;然后就是安全中心里面的Web安全域名，LeanCloud默认放行localhost，但是127.0.0.1我这边测试是不行的，如果有需求要自己填写。Web安全域名要填写https、http两种协议保险。&lt;/p&gt;&#xA;&lt;p&gt;主题配置文件中，以我这个主题为例，serverURLs要填写自己的二级域名&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#7a8478&#34;&gt;serverURLs&lt;/span&gt;: https://comment.yingyu5658.me&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;一定要加协议头，否则将会在你的博客域名下构建请求，比如我的&lt;code&gt;www.yingyu5658.me/comment.yingyu5658.me/&lt;/code&gt;，这将导致报错。即使你使用国际版也要填写这一项！Leancloud请求不到。&lt;/p&gt;&#xA;&lt;p&gt;现在Valine的教程都有过时，遇到问题还需结合具体情况分析。我看LeanCloud的各种API结构变更还挺多的，太久远的教程就不建议看了。&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>攒钱目标达成？！</title>
      <link>https://blog.verdant.ee/posts/%E6%94%92%E9%92%B1%E7%9B%AE%E6%A0%87%E8%BE%BE%E6%88%90/</link>
      <pubDate>Sat, 19 Apr 2025 18:42:29 +0000</pubDate><author>i@glowisle.me (五葉地錦)</author>
      <guid>https://blog.verdant.ee/posts/%E6%94%92%E9%92%B1%E7%9B%AE%E6%A0%87%E8%BE%BE%E6%88%90/</guid>
      <description>&lt;p&gt;是的，攒钱目标达成。&lt;/p&gt;&#xA;&lt;p&gt;我在&lt;a href=&#34;https://www.yingyu5658.me/post/1557917560/&#34;&gt;之前的日志&lt;/a&gt;中写道：&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;每月收入280，可得出七月份大概可以完成目标。&lt;/p&gt;&#xA;&lt;p&gt;当然，这是最悲观的情况。也许有哪一天能发一笔横财呢。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;这下真发横财了。把一直没上的课外班退掉了。这个过程几经周折，机构老板老奸巨猾。一谈钱的事就转移话题，提出各种方案，就是为了不退全款。不过好在最后钱是拿回来了。加上我自己原本的积蓄，可以再安排个稍微能用的箱子&lt;/p&gt;&#xA;&lt;p&gt;&lt;figure class=&#34;image-caption&#34;&gt;&#xA;    &lt;img src=&#34;https://images.glowisle.me/image-20250420184838122.webp&#34; alt=&#34;image-20250420184838122&#34;&gt;&#xA;    &lt;figcaption&gt;image-20250420184838122&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&lt;/p&gt;&#xA;&lt;p&gt;琴到手的第一反应就是：“好沉。。。”&lt;/p&gt;&#xA;&lt;p&gt;真的很沉。每天为了攒钱，不吃早饭，经常饿得心慌。好在愿望终于实现了，好好练吧。有人和我说，学乐器很难，我不信。我坚信的是，学不会只是因为不够认真。我必须和他碰一碰。暂时先不要告诉任何人我正在学贝斯这件事吧，除非他们看到了这个网站、这篇文章。保持一段时间的神秘感。&lt;/p&gt;&#xA;&lt;p&gt;说起来，我喜欢贝斯这个乐器，没什么理由，也许这就是真正的一见钟情，低调沉稳的音色总是能抓住我的耳朵。我在某社交平台上的头像用了三年孤独摇滚里结束乐队的贝斯手山田凉。可能跟这个番剧也有关。不过最早贝斯给我留下深刻印象的还是《缝纫机乐队》，他们有一段演出最抓耳的就是贝斯。不知道我是有一副好耳机还是有两只好耳朵，贝斯和鼓在我听来总是特别的明显，有时我还会去特意听他们两者的节奏、律动，我评价一首歌好不好听，贝斯和鼓是否合我口味成了决定性因素。当然，自己的爱好在别人眼中是一文不值的，故曰知音难觅，又有多少人仔细去欣赏低音的律动呢？&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>从0开始搭建自己的终端开发环境</title>
      <link>https://blog.verdant.ee/posts/%E4%BB%8E0%E5%BC%80%E5%A7%8B%E6%90%AD%E5%BB%BA%E8%87%AA%E5%B7%B1%E7%9A%84%E7%BB%88%E7%AB%AF%E5%BC%80%E5%8F%91%E7%8E%AF%E5%A2%83/</link>
      <pubDate>Tue, 15 Apr 2025 21:15:24 +0000</pubDate><author>i@glowisle.me (五葉地錦)</author>
      <guid>https://blog.verdant.ee/posts/%E4%BB%8E0%E5%BC%80%E5%A7%8B%E6%90%AD%E5%BB%BA%E8%87%AA%E5%B7%B1%E7%9A%84%E7%BB%88%E7%AB%AF%E5%BC%80%E5%8F%91%E7%8E%AF%E5%A2%83/</guid>
      <description>&lt;p&gt;&lt;strong&gt;系统&lt;/strong&gt;：WSL Arch&lt;/p&gt;&#xA;&lt;h3 id=&#34;主折腾点&#34;&gt;主折腾点&lt;/h3&gt;&#xA;&lt;p&gt;&lt;strong&gt;代码编辑器&lt;/strong&gt;：Vim(Neovim)&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;终端体验优化&lt;/strong&gt;：tmux&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;文件管理器&lt;/strong&gt;：yazi&lt;/p&gt;&#xA;&lt;h2 id=&#34;代码编辑器neovim&#34;&gt;代码编辑器——Neovim&lt;/h2&gt;&#xA;&lt;h3 id=&#34;前言&#34;&gt;前言&lt;/h3&gt;&#xA;&lt;p&gt;Neovim和Vim相比，在性能和易用性上有很大的提升，在异步任务表现突出；使用更加现代的lua脚本配置，可读性更高。&lt;/p&gt;&#xA;&lt;h4 id=&#34;为什么不用lazyvim&#34;&gt;为什么不用Lazyvim？&lt;/h4&gt;&#xA;&lt;p&gt;答：我个人用了很长一段时间Lazyvim，虽然开箱即用，简单调试就可以使用，但是我并不能清除的理解他到底给我装了什么，我是否需要那些插件。感觉像在用别人的软件，而自己从头开始配置vim的掌控感是使用他人的配置文件无法比拟的，在配置的过程中也可以培养排错和程序调试能力，唯一的缺点就是略微耗费时间。&lt;/p&gt;&#xA;&lt;h3 id=&#34;安装&#34;&gt;安装&lt;/h3&gt;&#xA;&lt;p&gt;先滚一把系统保证软件包都是最新的&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;sudo pacman -Syyu&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;安装Neovim&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;sudo pacman -S neovim&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;这时候在终端输入&lt;code&gt;nvim&lt;/code&gt;就可以打开neovim了。![image-20250415212435171](E:/Blog/source/im&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;按&lt;code&gt;:q&lt;/code&gt;退出。&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;这个初始的界面非常简陋，我们先进行核心功能配置，后续在更改主题。&lt;/p&gt;&#xA;&lt;p&gt;nvim的用户级配置文件在&lt;code&gt;~/.config/nvim&lt;/code&gt;中。&lt;/p&gt;&#xA;&lt;h3 id=&#34;安装包管理器&#34;&gt;安装包管理器&lt;/h3&gt;&#xA;&lt;p&gt;我们选择Lazy作为包管理器，他和其他的包管理器相比起来，在懒加载、UI界面等方面有显著优势，可以减小配置复杂度。&lt;/p&gt;&#xA;&lt;p&gt;访问&lt;a href=&#34;https://lazy.folke.io/installation&#34;&gt;lazy.nvim官网&lt;/a&gt;，官方文档永远都是最好的教程。这里有一段代码&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-lua&#34; data-lang=&#34;lua&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;-- Bootstrap lazy.nvim&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e67e80&#34;&gt;local&lt;/span&gt; lazypath &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; vim.fn.stdpath(&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;data&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#7a8478&#34;&gt;..&lt;/span&gt; &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;/lazy/lazy.nvim&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e67e80&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#7a8478&#34;&gt;not&lt;/span&gt; (vim.uv &lt;span style=&#34;color:#7a8478&#34;&gt;or&lt;/span&gt; vim.loop).fs_stat(lazypath) &lt;span style=&#34;color:#e67e80&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e67e80&#34;&gt;local&lt;/span&gt; lazyrepo &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;https://github.com/folke/lazy.nvim.git&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e67e80&#34;&gt;local&lt;/span&gt; out &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; vim.fn.system({ &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;git&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;clone&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;--filter=blob:none&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;--branch=stable&amp;#34;&lt;/span&gt;, lazyrepo, lazypath })&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e67e80&#34;&gt;if&lt;/span&gt; vim.v.shell_error &lt;span style=&#34;color:#7a8478&#34;&gt;~=&lt;/span&gt; &lt;span style=&#34;color:#d699b6&#34;&gt;0&lt;/span&gt; &lt;span style=&#34;color:#e67e80&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    vim.api.nvim_echo({&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      { &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;Failed to clone lazy.nvim:&lt;/span&gt;&lt;span style=&#34;color:#b2c98f&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;ErrorMsg&amp;#34;&lt;/span&gt; },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      { out, &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;WarningMsg&amp;#34;&lt;/span&gt; },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      { &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#b2c98f&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#b2c98f&#34;&gt;Press any key to exit...&amp;#34;&lt;/span&gt; },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }, &lt;span style=&#34;color:#e67e80&#34;&gt;true&lt;/span&gt;, {})&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    vim.fn.getchar()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    os.exit(&lt;span style=&#34;color:#d699b6&#34;&gt;1&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e67e80&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e67e80&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;vim.opt.rtp:prepend(lazypath)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;-- Make sure to setup `mapleader` and `maplocalleader` before&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;-- loading lazy.nvim so that mappings are correct.&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;-- This is also a good place to setup other settings (vim.opt)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;vim.g.mapleader &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34; &amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;vim.g.maplocalleader &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#b2c98f&#34;&gt;\\&lt;/span&gt;&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;-- Setup lazy.nvim&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;require(&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;lazy&amp;#34;&lt;/span&gt;).setup({&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  spec &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;-- import your plugins&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    { import &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;plugins&amp;#34;&lt;/span&gt; },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;-- Configure any other settings here. See the documentation for more details.&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;-- colorscheme that will be used when installing plugins.&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  install &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; { colorscheme &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; { &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;habamax&amp;#34;&lt;/span&gt; } },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;-- automatically check for plugin updates&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  checker &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; { enabled &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e67e80&#34;&gt;true&lt;/span&gt; },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;})&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;这段代码主要在为Lazy包管理器初始化，所以按照官网的目录结构，我们在&lt;code&gt;~/.config/nvim/lua&lt;/code&gt;下新建一个config文件夹，把代码粘贴进去。&lt;/p&gt;&#xA;&lt;p&gt;注意到，代码中有一段是导入plugins这个模块，所以我们需要在&lt;code&gt;~/.config/nvim/lua&lt;/code&gt;下创建一个plugins文件夹&lt;/p&gt;&#xA;&lt;p&gt;然后在&lt;code&gt;~/.config/nvim/init.lua&lt;/code&gt;里粘贴这行代码&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-lua&#34; data-lang=&#34;lua&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;require(&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;config.lazy&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;init/lua&lt;/code&gt;是Neovim的初始化配置文件，程序会首先读取这个文件里的代码。&lt;/p&gt;&#xA;&lt;p&gt;这行代码是引入config/lazy这个文件，初始化Lazy，所以要放在第一行。&lt;/p&gt;&#xA;&lt;p&gt;那么经过这一番操作，Lazy安装好了，我们的目录结构应该如下：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;`-- nvim&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    `-- lua&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        `-- config&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            `-- lazy.lua&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;现在在终端输入&lt;code&gt;nvim&lt;/code&gt;启动Neovim，会发现有个报错&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;No specs found for module &amp;#34;plugins&amp;#34;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;查阅&lt;a href=&#34;https://github.com/folke/lazy.nvim/discussions/1875&#34;&gt;bug: No specs found for module &amp;ldquo;plugins&amp;rdquo; (Structured Setup) · folke/lazy.nvim · Discussion #1875&lt;/a&gt;可得，这个问题是由于我们还没有安装任何插件导致的，他不影响什么，但是很烦人。如果想要关掉，可以在plugins下新建一个lua文件，然后输入&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-lua&#34; data-lang=&#34;lua&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e67e80&#34;&gt;return&lt;/span&gt;{&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;这样就可以正常启动nvim不报错了。由此可见，Lazy安装插件是返回一张表，所以以后每次新建插件文件的时候都要填写以上内容。&lt;/p&gt;&#xA;&lt;h3 id=&#34;基础配置&#34;&gt;基础配置&lt;/h3&gt;&#xA;&lt;p&gt;在安装插件前，我们要先进行一些基础配置，让这个编辑器用的舒服一点。&lt;/p&gt;&#xA;&lt;p&gt;设置别名：``&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-lua&#34; data-lang=&#34;lua&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e67e80&#34;&gt;local&lt;/span&gt; opt &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; vim.opt&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;声明一个本地变量opt=vim.opt，简写提高效率。&lt;/p&gt;&#xA;&lt;p&gt;为什么要显示声明local？原因是lua脚本的所有变量默认都是全局变量，很怪对吧，我也觉得。&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-lua&#34; data-lang=&#34;lua&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;opt.relativenumber &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e67e80&#34;&gt;false&lt;/span&gt;&#x9;&lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;-- 禁用相对行号&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;opt.number &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e67e80&#34;&gt;true&lt;/span&gt;&#x9;&#x9;   &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;-- 启用绝对行号&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;vim.api.nvim_set_hl(&lt;span style=&#34;color:#d699b6&#34;&gt;0&lt;/span&gt;, &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;LineNr&amp;#34;&lt;/span&gt;, { fg &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;#FFD700&amp;#34;&lt;/span&gt; }) &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;-- 所有行号设为金色&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;相对行号可以更容易的数行数来达到&lt;code&gt;hjkl/d/v等 + 行数&lt;/code&gt;来快速进行文本编辑操作，但是我个人不太适应，就没开，后期可以通过修改按键配置来做到随时开关。&lt;/p&gt;&#xA;&lt;h3 id=&#34;安装插件&#34;&gt;安装插件&lt;/h3&gt;&#xA;&lt;h4 id=&#34;neo-tree&#34;&gt;neo-tree&lt;/h4&gt;&#xA;&lt;p&gt;neo-tree 编辑器的文件系统资源管理器。使用此插件，用户可以直观地浏览复杂的目录层次结构，快速打开文件进行读取或编辑，并执行基本的文件系统作。&lt;/p&gt;&#xA;&lt;p&gt;仓库：&lt;a href=&#34;https://github.com/nvim-neo-tree/neo-tree.nvim&#34;&gt;nvim-neo-tree/neo-tree.nvim: Neovim plugin to manage the file system and other tree like structures.&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;进入Plugins目录，新建一个文件名为nerdtree的lua脚本。先把上文提到的返回表写进去。&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-lua&#34; data-lang=&#34;lua&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;-- neo-tree.lua&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;-- 代码来自仓库README&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;nvim-neo-tree/neo-tree.nvim&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  branch &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;v3.x&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  dependencies &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;nvim-lua/plenary.nvim&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;nvim-tree/nvim-web-devicons&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;-- not strictly required, but recommended&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;MunifTanjim/nui.nvim&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;-- {&amp;#34;3rd/image.nvim&amp;#34;, opts = {}}, -- Optional image support in preview window: See `# Preview Mode` for more information&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  lazy &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e67e80&#34;&gt;false&lt;/span&gt;, &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;-- neo-tree will lazily load itself&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;---@module &amp;#34;neo-tree&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;---@type neotree.Config?&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  opts &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;-- fill any relevant options here&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;插件装好了发现，不知道怎么打开啊。这时候就需要我们自己动手改一个舒服点的键位。在&lt;code&gt;~/.config/nvim/lua/config&lt;/code&gt;中新建一个keymaps.lua，并在init.lua中引用&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-lua&#34; data-lang=&#34;lua&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;-- 习惯上，我喜欢把leader键映射到空格，敲起来顺手&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;-- 基础按键配置&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;vim.g.mapleader &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34; &amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e67e80&#34;&gt;local&lt;/span&gt; opt &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; { noremap &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e67e80&#34;&gt;true&lt;/span&gt;, slient &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e67e80&#34;&gt;true&lt;/span&gt; }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;-- 窗口切换更顺手，少按一个w&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;vim.keymap.set(&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;n&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;&amp;lt;C-h&amp;gt;&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;&amp;lt;C-w&amp;gt;h&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;vim.keymap.set(&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;n&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;&amp;lt;C-j&amp;gt;&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;&amp;lt;C-w&amp;gt;j&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;vim.keymap.set(&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;n&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;&amp;lt;C-k&amp;gt;&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;&amp;lt;C-w&amp;gt;k&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;vim.keymap.set(&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;n&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;&amp;lt;C-l&amp;gt;&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;&amp;lt;C-w&amp;gt;l&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;-- Neotree&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;vim.keymap.set(&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;n&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;&amp;lt;Leader&amp;gt;e&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;&amp;lt;cmd&amp;gt;Neotree toggle&amp;lt;CR&amp;gt;&amp;#34;&lt;/span&gt;, opts)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id=&#34;代码补全格式化检查&#34;&gt;代码补全、格式化、检查&lt;/h4&gt;&#xA;&lt;p&gt;要让vim看起来像一个正经的处理代码的文本编辑器，这些是必不可少的。&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-lua&#34; data-lang=&#34;lua&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;-- 文件路径：lua/plugins/code-edit.lua&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e67e80&#34;&gt;return&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;-- LSP 核心组件 (必须最先声明)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;neovim/nvim-lspconfig&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    dependencies &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;williamboman/mason.nvim&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;williamboman/mason-lspconfig.nvim&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    config &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e67e80&#34;&gt;function&lt;/span&gt;()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;-- 延迟加载 LSP 配置&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      vim.schedule(&lt;span style=&#34;color:#e67e80&#34;&gt;function&lt;/span&gt;()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#e67e80&#34;&gt;local&lt;/span&gt; lspconfig &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; require(&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;lspconfig&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#e67e80&#34;&gt;local&lt;/span&gt; mason &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; require(&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;mason&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#e67e80&#34;&gt;local&lt;/span&gt; mason_lspconfig &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; require(&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;mason-lspconfig&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;-- 通用 LSP 配置&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#e67e80&#34;&gt;local&lt;/span&gt; on_attach &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e67e80&#34;&gt;function&lt;/span&gt;(client, bufnr)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;-- 快捷键配置...&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#e67e80&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        mason.setup()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        mason_lspconfig.setup({&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          ensure_installed &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; { &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;tsserver&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;cssls&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;html&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;clangd&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;eslint&amp;#34;&lt;/span&gt; }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        })&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        mason_lspconfig.setup_handlers({&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#e67e80&#34;&gt;function&lt;/span&gt;(server_name)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            lspconfig[server_name].setup({&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;              on_attach &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; on_attach,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;              capabilities &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; require(&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;cmp_nvim_lsp&amp;#34;&lt;/span&gt;).default_capabilities(),&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;              &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;-- 各语言特殊配置...&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            })&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#e67e80&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        })&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#e67e80&#34;&gt;end&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e67e80&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;-- 自动补全引擎（需在 LSP 之后加载）&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;hrsh7th/nvim-cmp&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    dependencies &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;hrsh7th/cmp-nvim-lsp&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;L3MON4D3/LuaSnip&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    config &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e67e80&#34;&gt;function&lt;/span&gt;()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;-- cmp 配置...&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e67e80&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;-- 格式化工具&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;stevearc/conform.nvim&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    config &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e67e80&#34;&gt;function&lt;/span&gt;()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;-- conform 配置...&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e67e80&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;-- 语法高亮增强&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;nvim-treesitter/nvim-treesitter&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    build &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;:TSUpdate&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    config &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e67e80&#34;&gt;function&lt;/span&gt;()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;-- treesitter 配置...&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e67e80&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;代码编辑器的配置就告一段落了，真写规范的代码还是建议vscode（虽然有点偏离终端的主题了）。如果你爱折腾vim那当然也可以，工具自己用的趁手就是最好的。&lt;/p&gt;&#xA;&lt;h2 id=&#34;oh-my-zsh&#34;&gt;Oh-My-Zsh&lt;/h2&gt;&#xA;&lt;p&gt;Oh My Zsh 是基于 zsh 命令行的一个扩展工具集，提供了丰富的扩展功能。&lt;/p&gt;&#xA;&lt;h3 id=&#34;安装zsh&#34;&gt;安装&lt;strong&gt;ZSH&lt;/strong&gt;&lt;/h3&gt;&#xA;&lt;p&gt;&lt;code&gt;sudo pacman -S zsh&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;设置默认终端为zsh&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;chsh -s /bin/zsh&lt;/code&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;安装oh-my-zsh&#34;&gt;安装Oh-My-Zsh&lt;/h3&gt;&#xA;&lt;p&gt;国内镜像&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;sh -c &amp;quot;$(curl -fsSL https://gitee.com/pocmon/ohmyzsh/raw/master/tools/install.sh)&amp;quot;&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;我个人觉得这个主题就挺好的了，不多改动。&lt;/p&gt;&#xA;&lt;h4 id=&#34;插件安装&#34;&gt;插件安装&lt;/h4&gt;&#xA;&lt;h4 id=&#34;zsh--autosuggestions&#34;&gt;zsh -autosuggestions&lt;/h4&gt;&#xA;&lt;p&gt;预测命令&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;git clone https://github.moeyy.xyz/https://github.com/zsh-users/zsh-autosuggestions &lt;span style=&#34;color:#b2c98f&#34;&gt;${&lt;/span&gt;ZSH_CUSTOM&lt;span style=&#34;color:#e67e80&#34;&gt;:-&lt;/span&gt;~/.oh-my-zsh/custom&lt;span style=&#34;color:#b2c98f&#34;&gt;}&lt;/span&gt;/plugins/zsh-autosuggestions&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id=&#34;zsh-syntax-highlighting&#34;&gt;zsh-syntax-highlighting&lt;/h4&gt;&#xA;&lt;p&gt;语法检查，命令正确时为绿色，否则红色。&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;git clone https://github.moeyy.xyz/https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id=&#34;启用插件&#34;&gt;启用插件&lt;/h4&gt;&#xA;&lt;p&gt;&lt;code&gt;nvim ~/.zshrc&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;修改：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;plugins=(&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  git&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  zsh-autosuggestions&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  zsh-syntax-highlighting&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  )&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;重启终端即可启用。&lt;/p&gt;&#xA;&lt;h4 id=&#34;别名设置&#34;&gt;别名设置&lt;/h4&gt;&#xA;&lt;p&gt;别名可以更快地帮助我们启用命令&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;nvim ~/.zshrc&lt;/code&gt;&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;alias s=&amp;#34;neofetch&amp;#34;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;alias vim=&amp;#34;nvim&amp;#34;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;alias c=&amp;#34;clear&amp;#34;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;alias gcl = &amp;#34;git clone&amp;#34;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;这里根据我的习惯改了几个别名。&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>初折腾Emacs记录</title>
      <link>https://blog.verdant.ee/posts/%E5%88%9D%E6%8A%98%E8%85%BEemacs%E8%AE%B0%E5%BD%95/</link>
      <pubDate>Sun, 13 Apr 2025 12:15:33 +0000</pubDate><author>i@glowisle.me (五葉地錦)</author>
      <guid>https://blog.verdant.ee/posts/%E5%88%9D%E6%8A%98%E8%85%BEemacs%E8%AE%B0%E5%BD%95/</guid>
      <description>&lt;h2 id=&#34;基础配置&#34;&gt;基础配置&lt;/h2&gt;&#xA;&lt;p&gt;Windows下需要在软件顶部Toolbar的Options中随便更改一个选项，然后再点Save Options，这样就会再&lt;code&gt;C:\Users\Username\appdata\Roaming\&lt;/code&gt;下生成.emacs和.emacs.d/&lt;/p&gt;&#xA;&lt;p&gt;在emacs.d中新建一个文件&lt;code&gt;init.el&lt;/code&gt;，填写如下配置&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-lisp&#34; data-lang=&#34;lisp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;;;; init.el --- Load the full configuration -*- lexical-binding: t -*-&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;;;; Commentary:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;;; This file bootstraps the configuration, which is divided into&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;;; a number of other files.&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;;;; Code:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(&lt;span style=&#34;color:#e67e80&#34;&gt;let&lt;/span&gt; ((minver &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;25.1&amp;#34;&lt;/span&gt;))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#d699b6&#34;&gt;when&lt;/span&gt; (version&amp;lt; emacs-version minver)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  (&lt;span style=&#34;color:#dbbc7f&#34;&gt;error&lt;/span&gt; &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;Your Emacs is too old -- this config requires v%s or higher&amp;#34;&lt;/span&gt; minver)))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(&lt;span style=&#34;color:#d699b6&#34;&gt;when&lt;/span&gt; (version&amp;lt; emacs-version &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;26.1&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (message &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;Your Emacs is old, and some functionality in this config will be disabled. Please upgrade if possible.&amp;#34;&lt;/span&gt;))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(add-to-list &lt;span style=&#34;color:#e69875&#34;&gt;&amp;#39;load-path&lt;/span&gt; (expand-file-name &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;lisp&amp;#34;&lt;/span&gt; user-emacs-directory)) &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;; 设定源码加载路径&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;;; (require &amp;#39;init-benchmarking) ;; Measure startup time&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(defconst *spell-check-support-enabled* &lt;span style=&#34;color:#d699b6&#34;&gt;nil&lt;/span&gt;) &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;;; Enable with t if you prefer&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(defconst *is-a-mac* (&lt;span style=&#34;color:#b2c98f&#34;&gt;eq&lt;/span&gt; system-type &lt;span style=&#34;color:#e69875&#34;&gt;&amp;#39;darwin&lt;/span&gt;))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;;; Adjust garbage collection thresholds during startup, and thereafter&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(&lt;span style=&#34;color:#e67e80&#34;&gt;let&lt;/span&gt; ((normal-gc-cons-threshold (&lt;span style=&#34;color:#b2c98f&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color:#d699b6&#34;&gt;20&lt;/span&gt; &lt;span style=&#34;color:#d699b6&#34;&gt;1024&lt;/span&gt; &lt;span style=&#34;color:#d699b6&#34;&gt;1024&lt;/span&gt;))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   (init-gc-cons-threshold (&lt;span style=&#34;color:#b2c98f&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color:#d699b6&#34;&gt;128&lt;/span&gt; &lt;span style=&#34;color:#d699b6&#34;&gt;1024&lt;/span&gt; &lt;span style=&#34;color:#d699b6&#34;&gt;1024&lt;/span&gt;)))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#e67e80&#34;&gt;setq&lt;/span&gt; gc-cons-threshold init-gc-cons-threshold)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (add-hook &lt;span style=&#34;color:#e69875&#34;&gt;&amp;#39;emacs-startup-hook&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      (&lt;span style=&#34;color:#d699b6&#34;&gt;lambda&lt;/span&gt; () (&lt;span style=&#34;color:#e67e80&#34;&gt;setq&lt;/span&gt; gc-cons-threshold normal-gc-cons-threshold))))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;;; ==========================================================================================================&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;;; ===========================================日常使用配置===================================================&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;;; ==========================================================================================================&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(&lt;span style=&#34;color:#e67e80&#34;&gt;setq&lt;/span&gt; confirm-kill-emacs &lt;span style=&#34;color:#b2c98f&#34;&gt;#&amp;#39;yes-or-no-p&lt;/span&gt;)   &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;; 在关闭 Emacs 前询问是否确认关闭，防止误触&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(electric-pair-mode &lt;span style=&#34;color:#d699b6&#34;&gt;t&lt;/span&gt;)            &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;; 自动补全括号&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(add-hook &lt;span style=&#34;color:#e69875&#34;&gt;&amp;#39;prog-mode-hook&lt;/span&gt; &lt;span style=&#34;color:#b2c98f&#34;&gt;#&amp;#39;&lt;/span&gt;show-paren-mode) &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;; 编程模式下，光标在括号上时高亮另一个括号&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(column-number-mode &lt;span style=&#34;color:#d699b6&#34;&gt;t&lt;/span&gt;)            &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;; 在 Mode line 上显示列号&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(global-auto-revert-mode &lt;span style=&#34;color:#d699b6&#34;&gt;t&lt;/span&gt;)         &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;; 当另一程序修改了文件时，让 Emacs 及时刷新 Buffer&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(delete-selection-mode &lt;span style=&#34;color:#d699b6&#34;&gt;t&lt;/span&gt;)          &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;; 选中文本后输入文本会替换文本（更符合我们习惯了的其它编辑器的逻辑）&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(&lt;span style=&#34;color:#e67e80&#34;&gt;setq&lt;/span&gt; inhibit-startup-message &lt;span style=&#34;color:#d699b6&#34;&gt;t&lt;/span&gt;)       &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;; 关闭启动 Emacs 时的欢迎界面&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(&lt;span style=&#34;color:#e67e80&#34;&gt;setq&lt;/span&gt; make-backup-files &lt;span style=&#34;color:#d699b6&#34;&gt;nil&lt;/span&gt;)         &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;; 关闭文件自动备份&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(add-hook &lt;span style=&#34;color:#e69875&#34;&gt;&amp;#39;prog-mode-hook&lt;/span&gt; &lt;span style=&#34;color:#b2c98f&#34;&gt;#&amp;#39;&lt;/span&gt;hs-minor-mode)  &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;; 编程模式下，可以折叠代码块&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(global-display-line-numbers-mode &lt;span style=&#34;color:#d699b6&#34;&gt;1&lt;/span&gt;)     &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;; 在 Window 显示行号&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(tool-bar-mode &lt;span style=&#34;color:#d699b6&#34;&gt;-1&lt;/span&gt;)              &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;; （熟练后可选）关闭 Tool bar&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(&lt;span style=&#34;color:#d699b6&#34;&gt;when&lt;/span&gt; (display-graphic-p) (toggle-scroll-bar &lt;span style=&#34;color:#d699b6&#34;&gt;-1&lt;/span&gt;)) &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;; 图形界面时关闭滚动条&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(savehist-mode &lt;span style=&#34;color:#d699b6&#34;&gt;1&lt;/span&gt;)              &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;; （可选）打开 Buffer 历史记录保存&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(&lt;span style=&#34;color:#e67e80&#34;&gt;setq&lt;/span&gt; display-line-numbers-type &lt;span style=&#34;color:#e69875&#34;&gt;&amp;#39;relative&lt;/span&gt;)  &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;; （可选）显示相对行号&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(add-to-list &lt;span style=&#34;color:#e69875&#34;&gt;&amp;#39;default-frame-alist&lt;/span&gt; &lt;span style=&#34;color:#7a8478&#34;&gt;&amp;#39;&lt;/span&gt;(width &lt;span style=&#34;color:#7a8478&#34;&gt;.&lt;/span&gt; &lt;span style=&#34;color:#d699b6&#34;&gt;90&lt;/span&gt;)) &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;; （可选）设定启动图形界面时的初始 Frame 宽度（字符数）&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(add-to-list &lt;span style=&#34;color:#e69875&#34;&gt;&amp;#39;default-frame-alist&lt;/span&gt; &lt;span style=&#34;color:#7a8478&#34;&gt;&amp;#39;&lt;/span&gt;(height &lt;span style=&#34;color:#7a8478&#34;&gt;.&lt;/span&gt; &lt;span style=&#34;color:#d699b6&#34;&gt;55&lt;/span&gt;)) &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;; （可选）设定启动图形界面时的初始 Frame 高度（字符数）&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;;; ==========================================================================================================&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;;; ===========================================插件镜像配置===================================================&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;;; ==========================================================================================================&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;; 腾讯镜像&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(&lt;span style=&#34;color:#b2c98f&#34;&gt;require&lt;/span&gt; &lt;span style=&#34;color:#e69875&#34;&gt;&amp;#39;package&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(&lt;span style=&#34;color:#e67e80&#34;&gt;setq&lt;/span&gt; package-archives &lt;span style=&#34;color:#7a8478&#34;&gt;&amp;#39;&lt;/span&gt;((&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;gnu&amp;#34;&lt;/span&gt;  &lt;span style=&#34;color:#7a8478&#34;&gt;.&lt;/span&gt; &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;http://mirrors.cloud.tencent.com/elpa/gnu/&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;             (&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;melpa&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#7a8478&#34;&gt;.&lt;/span&gt; &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;http://mirrors.cloud.tencent.com/elpa/melpa/&amp;#34;&lt;/span&gt;)))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(package-initialize)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;;;; init.el ends here&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;基础的设置和插件镜像源就配置好了，此配置可完全复制照抄。&lt;/p&gt;&#xA;&lt;p&gt;重启Emacs，按下&lt;code&gt;M-x&lt;/code&gt;输入&lt;code&gt;package-list-packages&lt;/code&gt;即可查看仓库中的所有插件&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;在此列表界面下还可按下h显示帮助，按U检查所有已安装插件是否需要更新，如有就标注更新，按i标记想要安装，最后按下x就可更新。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;插件默认会被安装到&lt;code&gt;~/.emacs.d/elpa&lt;/code&gt;下，Windows同理。&lt;/p&gt;&#xA;&lt;p&gt;删除插件输入&lt;code&gt;package-delete&lt;/code&gt;，然后输入想删除的插件名即可。&lt;/p&gt;&#xA;&lt;h2 id=&#34;use-package&#34;&gt;use-package&lt;/h2&gt;&#xA;&lt;h3 id=&#34;安装&#34;&gt;安装&lt;/h3&gt;&#xA;&lt;p&gt;输入命令&lt;code&gt;package-install&lt;/code&gt;回车后输入use-package回车，然后在init.el的最上面写&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-lisp&#34; data-lang=&#34;lisp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(eval-when-compile&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#b2c98f&#34;&gt;require&lt;/span&gt; &lt;span style=&#34;color:#e69875&#34;&gt;&amp;#39;use-package&lt;/span&gt;))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;每次启动Emacs优先加载此插件&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>osu!APIv1请求示例</title>
      <link>https://blog.verdant.ee/posts/osu-apiv1%E8%AF%B7%E6%B1%82%E7%A4%BA%E4%BE%8B/</link>
      <pubDate>Fri, 11 Apr 2025 22:29:23 +0000</pubDate><author>i@glowisle.me (五葉地錦)</author>
      <guid>https://blog.verdant.ee/posts/osu-apiv1%E8%AF%B7%E6%B1%82%E7%A4%BA%E4%BE%8B/</guid>
      <description>&lt;h2 id=&#34;前言&#34;&gt;前言&lt;/h2&gt;&#xA;&lt;p&gt;本文章使用Nodejs环境做演示。请求用户数据。代码中的APIKEY要在&lt;a href=&#34;https://osu.ppy.sh/home/account/edit&#34;&gt;osu官网‬&lt;/a&gt;申请。&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-js&#34; data-lang=&#34;js&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e67e80&#34;&gt;const&lt;/span&gt; API_URL &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;osu.ppy.sh&amp;#34;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e67e80&#34;&gt;const&lt;/span&gt; init &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    k&lt;span style=&#34;color:#7a8478&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;YOUR_API_KEY&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    type&lt;span style=&#34;color:#7a8478&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;string&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    u&lt;span style=&#34;color:#7a8478&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;kyzzz5658&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;};&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e67e80&#34;&gt;const&lt;/span&gt; https &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; require(&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;https&amp;#34;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;// 将参数序列化为查询字符串&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e67e80&#34;&gt;const&lt;/span&gt; query &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e67e80&#34;&gt;new&lt;/span&gt; URLSearchParams(init);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e67e80&#34;&gt;const&lt;/span&gt; options &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    hostname&lt;span style=&#34;color:#7a8478&#34;&gt;:&lt;/span&gt; API_URL,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    method&lt;span style=&#34;color:#7a8478&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;GET&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    path&lt;span style=&#34;color:#7a8478&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#b2c98f&#34;&gt;`/api/get_user?&lt;/span&gt;&lt;span style=&#34;color:#b2c98f&#34;&gt;${&lt;/span&gt;query&lt;span style=&#34;color:#b2c98f&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#b2c98f&#34;&gt;`&lt;/span&gt; &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;// 附加参数&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;};&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e67e80&#34;&gt;const&lt;/span&gt; req &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; https.request(options, (res) =&amp;gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e67e80&#34;&gt;let&lt;/span&gt; data &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#39;&amp;#39;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    res.on(&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#39;data&amp;#39;&lt;/span&gt;, (chunk) =&amp;gt; data &lt;span style=&#34;color:#7a8478&#34;&gt;+=&lt;/span&gt; chunk);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    res.on(&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#39;end&amp;#39;&lt;/span&gt;, () =&amp;gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#e67e80&#34;&gt;try&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            console.log(JSON.parse(data[&lt;span style=&#34;color:#d699b6&#34;&gt;0&lt;/span&gt;].username));&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        } &lt;span style=&#34;color:#e67e80&#34;&gt;catch&lt;/span&gt; (e) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            console.error(&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#39;JSON 解析失败:&amp;#39;&lt;/span&gt;, e);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    });&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;});&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;// 错误处理&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;req.on(&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#39;error&amp;#39;&lt;/span&gt;, (err) =&amp;gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    console.error(&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#39;请求失败:&amp;#39;&lt;/span&gt;, err.code);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;});&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;输出：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    user_id: &amp;#39;33932276&amp;#39;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    username: &amp;#39;Kyzzz5658&amp;#39;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    join_date: &amp;#39;2023-06-24 08:48:13&amp;#39;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    count300: &amp;#39;2139&amp;#39;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    count100: &amp;#39;609&amp;#39;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    count50: &amp;#39;194&amp;#39;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    playcount: &amp;#39;44&amp;#39;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    ranked_score: &amp;#39;1917044&amp;#39;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    total_score: &amp;#39;3095639&amp;#39;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    pp_rank: &amp;#39;1968010&amp;#39;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    level: &amp;#39;8.0115&amp;#39;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    pp_raw: &amp;#39;43.5449&amp;#39;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    accuracy: &amp;#39;81.70417785644531&amp;#39;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    count_rank_ss: &amp;#39;0&amp;#39;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    count_rank_ssh: &amp;#39;0&amp;#39;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    count_rank_s: &amp;#39;0&amp;#39;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    count_rank_sh: &amp;#39;0&amp;#39;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    count_rank_a: &amp;#39;1&amp;#39;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    country: &amp;#39;CN&amp;#39;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    total_seconds_played: &amp;#39;2259&amp;#39;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    pp_country_rank: &amp;#39;38721&amp;#39;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    events: []&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;​&#x9;&lt;a href=&#34;https://github.com/ppy/osu-api/wiki&#34;&gt;首页 ·ppy/osu-api 维基&lt;/a&gt;&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>我的攒钱计划</title>
      <link>https://blog.verdant.ee/posts/%E6%88%91%E7%9A%84%E6%94%92%E9%92%B1%E8%AE%A1%E5%88%92/</link>
      <pubDate>Fri, 11 Apr 2025 20:13:20 +0000</pubDate><author>i@glowisle.me (五葉地錦)</author>
      <guid>https://blog.verdant.ee/posts/%E6%88%91%E7%9A%84%E6%94%92%E9%92%B1%E8%AE%A1%E5%88%92/</guid>
      <description>&lt;p&gt;一个小目标，初三前攒够两千块。&lt;/p&gt;&#xA;&lt;p&gt;实现难度是不大，已经有了八百多存款，微信里有一百多，一共900。每天早上父母会给我20元买早饭，省省，不吃了，每天稳定收入20。加上每月50 + 70的零花钱。&lt;/p&gt;&#xA;&lt;p&gt;粗略估算一下：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;现金：837.00&lt;/li&gt;&#xA;&lt;li&gt;微信：100.59&lt;/li&gt;&#xA;&lt;li&gt;支付宝：5.19&lt;/li&gt;&#xA;&lt;li&gt;共 &lt;strong&gt;944.78&lt;/strong&gt; 元&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;与目标差 &lt;strong&gt;1055.22&lt;/strong&gt; 。&lt;/p&gt;&#xA;&lt;p&gt;截止到今天（4月11日），这个月还剩 &lt;strong&gt;13&lt;/strong&gt; 个工作日。&lt;/p&gt;&#xA;&lt;p&gt;月底可获得 20 * 13 = 260。&lt;/p&gt;&#xA;&lt;p&gt;共 944.78 + 260.00 = 970.78。&lt;/p&gt;&#xA;&lt;p&gt;每月 120 零花钱&lt;/p&gt;&#xA;&lt;p&gt;共 970.78 + 120 = 1090.78&lt;/p&gt;&#xA;&lt;p&gt;与目标差 &lt;strong&gt;909.22&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;同理可得五月份月收入：&lt;strong&gt;560&lt;/strong&gt; 元，共计 &lt;strong&gt;1650.78&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;与目标相差 &lt;strong&gt;349.22&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;每月收入280，可得出七月份大概可以完成目标。&lt;/p&gt;&#xA;&lt;p&gt;当然，这是最悲观的情况。也许有哪一天能发一笔横财呢。&lt;/p&gt;&#xA;&lt;p&gt;2000块，攒攒总会有的。&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>把主力机系统换成Arch Linux是我这辈子做过的最蠢的决定</title>
      <link>https://blog.verdant.ee/posts/%E6%8A%8A%E4%B8%BB%E5%8A%9B%E6%9C%BA%E7%B3%BB%E7%BB%9F%E6%8D%A2%E6%88%90arch-linux%E6%98%AF%E6%88%91%E8%BF%99%E8%BE%88%E5%AD%90%E5%81%9A%E8%BF%87%E7%9A%84%E6%9C%80%E8%A0%A2%E7%9A%84%E5%86%B3%E5%AE%9A/</link>
      <pubDate>Sun, 06 Apr 2025 17:58:48 +0000</pubDate><author>i@glowisle.me (五葉地錦)</author>
      <guid>https://blog.verdant.ee/posts/%E6%8A%8A%E4%B8%BB%E5%8A%9B%E6%9C%BA%E7%B3%BB%E7%BB%9F%E6%8D%A2%E6%88%90arch-linux%E6%98%AF%E6%88%91%E8%BF%99%E8%BE%88%E5%AD%90%E5%81%9A%E8%BF%87%E7%9A%84%E6%9C%80%E8%A0%A2%E7%9A%84%E5%86%B3%E5%AE%9A/</guid>
      <description>&lt;h1 id=&#34;前言&#34;&gt;前言&lt;/h1&gt;&#xA;&lt;p&gt;先说结论。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;我是傻逼！&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;我是傻逼！！&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;我是傻逼！！！&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;本文将讲述&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;为什么我放弃了Arch&lt;/li&gt;&#xA;&lt;li&gt;为什么我放弃了Linux。&lt;/li&gt;&#xA;&lt;li&gt;什么人适合用Linux做主力系统&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;本文的所有观点仅仅代表个人观点，我纯菜。你问我为什么要选择Arch，而不是Ubuntu或者其他新手友好的发行版，我不知道，正如上文所说，我是傻逼！&lt;/p&gt;&#xA;&lt;h2 id=&#34;为什么我放弃了arch&#34;&gt;为什么我放弃了Arch&lt;/h2&gt;&#xA;&lt;p&gt;说到这个问题，就要先来谈谈为什么我要把Windows换成Linux。&lt;/p&gt;&#xA;&lt;p&gt;Linux这个系统对于我来说一直是神秘而美好的，至少在当时。我痴迷于命令行、终端、Vim这种工具。小时候也看过爸爸零几年买的《鸟哥的Linux私房菜》，给我当时幼小的心灵带来的极大的震撼。&lt;/p&gt;&#xA;&lt;p&gt;我当时也对Linux的目录结构非常新鲜，不分盘的设定感觉很好玩。&lt;/p&gt;&#xA;&lt;p&gt;我网站的服务器是Linux、身边的各种设备都有Linux的影子，这更加提高了我对Linux的向往程度。&lt;/p&gt;&#xA;&lt;p&gt;还有一个原因是，我当时正在用C语言写一个小工具，Windows下的gcc无法使用通配符&lt;code&gt;*&lt;/code&gt;，要想用只能去打开Git Bash或者MSYS2，这俩东西界面的丑陋程度相比就不用我多说了，我当时就是喜欢把精力浪费在不必要的地方上，Windows的那个终端被我“美化”得花里胡哨的，上面两者的界面当然入不了我的眼。&lt;/p&gt;&#xA;&lt;p&gt;为了解决这个问题，我开始使用WSL2，但仅仅停留在开始阶段。&lt;/p&gt;&#xA;&lt;p&gt;我这个系统不知道怎么回事，根本没办法用WSL2。&lt;/p&gt;&#xA;&lt;p&gt;全网都没有遇到这个问题的，那既然如此，重装系统吧。&lt;/p&gt;&#xA;&lt;p&gt;和系统相处就像谈恋爱，总有一段热恋期，过了这个时期后就冷淡了、矛盾也就浮出水面。刚装好的前几天，我的热情前所未有的高涨，学习各种命令、各种工具，当然少不了配置我最爱的Vim。那么说到Vim，归根结底是文本编辑器对吧，打字的软件，那么就要说说我用Linux的第一大困难——&lt;strong&gt;输入法配置难&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;输入法配置难&#34;&gt;输入法配置难&lt;/h3&gt;&#xA;&lt;p&gt;我是双拼用户，从小学六年级就开始用小鹤双拼打字了，这么长时间的习惯很难改，我也不想改。但是Linux上对双拼友好的输入法方案几乎没几个，我尝试过两个，Fcitx5 + 搜狗, Fcitx5 + Rime。&lt;/p&gt;&#xA;&lt;p&gt;这两个方案都大差不差，只是搜狗的可能略微智能一点，下载源什么的换成国内镜像，分分钟搞定下载问题。难就难在，我使用的终端不兼容Fcitx。&lt;/p&gt;&#xA;&lt;p&gt;没错，我用的就是Kitty。&lt;/p&gt;&#xA;&lt;p&gt;那么，肯定有人就想说，KDE自带的Console不能用吗？非得额外下载一个干什么？？&lt;/p&gt;&#xA;&lt;p&gt;我的答案就是：&lt;strong&gt;丑&lt;/strong&gt;。&lt;/p&gt;&#xA;&lt;p&gt;没错，就是因为Console丑。当然他也可以美化，但问题就在于，他的窗口圆角不彻底，而且把标签页显示关掉后，只能额外开一个窗口，占用屏幕空间。&lt;/p&gt;&#xA;&lt;p&gt;而Kitty就不同，窗口边框干净利落，看起来很舒服，而且配色看起来也比Konsole那高饱和度的方案舒服太多了。标签页不是类似于系统组件的那种形式，所以不会额外占窗口空间。&lt;/p&gt;&#xA;&lt;p&gt;虽然不兼容问题，在程序启动参数添加一条指定ibus接口的命令就解决了。&lt;/p&gt;&#xA;&lt;p&gt;你问我为什么非得要追求好看，闲的么？我当时可能会扣一大串字来回怼你，但是我现在觉得我错了，我认同你的观点，就是闲的。&lt;/p&gt;&#xA;&lt;p&gt;如开头所说，我是傻逼！&lt;/p&gt;&#xA;&lt;p&gt;配置各种东西就免不了使用Github下载，那么就由此引出了第二个问题，&lt;strong&gt;代理配置难&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;代理配置难&#34;&gt;代理配置难&lt;/h3&gt;&#xA;&lt;p&gt;我这边访问Github非常不稳定，有时候能丝滑裸连，有时候挂代理都难上。我先用了Steam++的Github加速服务，但是他会把Github的一些地址都重定向到localhost导致使用Git的某些功能如&lt;code&gt;git push&lt;/code&gt;异常。我又换到FastGithub，这东西很好用，但也有不稳定的时候，当他作为系统服务启动的时候，发生异常，想杀死他就变得十分困难，然后导致几乎所有Git功能都瘫痪，非常麻烦，&lt;code&gt;git clone&lt;/code&gt;都跑不下来。&lt;/p&gt;&#xA;&lt;h3 id=&#34;显卡驱动安装难&#34;&gt;显卡驱动安装难&lt;/h3&gt;&#xA;&lt;p&gt;Linux显卡驱动问题一直都是社区津津乐道的蛋疼问题，更蛋疼的是我的显卡还是英伟达的，你问我为什么用英伟达显卡还玩Linux，我不知道。正如开头所说，我是傻逼！&lt;/p&gt;&#xA;&lt;p&gt;显卡驱动的问题，我研究了一周左右，虽然最后还是成功了，但是离正常使用还有一段距离。也是有很多小问题，比如使用系统自带的截图会黑屏，用不了i3等窗口管理器等等。&lt;/p&gt;&#xA;&lt;p&gt;当初安装显卡驱动导致的问题包括但不限于：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;鼠标灵敏度异常&lt;/li&gt;&#xA;&lt;li&gt;显示比例异常&lt;/li&gt;&#xA;&lt;li&gt;画面撕裂&lt;/li&gt;&#xA;&lt;li&gt;系统炸了&lt;/li&gt;&#xA;&lt;li&gt;桌面炸了&lt;/li&gt;&#xA;&lt;li&gt;能进图形界面但是不能登录&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;嗯对就是这么离谱。当然经过我一番折腾还是达到了能用但体验不好的程度。&lt;/p&gt;&#xA;&lt;h3 id=&#34;安装软件难&#34;&gt;安装软件难&lt;/h3&gt;&#xA;&lt;p&gt;拿QQ举例，QQ官网的Linux安装包是.deb，如果我想安装，还是要经过一大通折腾，拼凑出来一个半成品QQ，而且最难受的是，每次他都会自动推送更新，我还更不了，还不能忽略版本，让我这个强迫症非常折磨。&lt;/p&gt;&#xA;&lt;h2 id=&#34;为什么我放弃了linux&#34;&gt;为什么我放弃了Linux&lt;/h2&gt;&#xA;&lt;p&gt;其实原本我是不打算放弃Linux的，因为我突然想玩星露谷物语了，就想着要不要装双系统，但是我装Arch根本没有经验，磁盘分区做的很烂，上面的一番折腾已经让我筋疲力尽，我不想再玩Arch，只想找一个开箱即用的Linux发行版。&lt;/p&gt;&#xA;&lt;p&gt;我的目光理所应当地投到了Ubuntu，这是我小时候体验的第一个Linux发行版，对我来说意义有点特殊，而且也属于开箱即用，所以Arch就光荣的升级为我的前任了。&lt;/p&gt;&#xA;&lt;p&gt;Windows系统的安装非常简单，只要一直下一步下一步下一步，然后等就行了。Ubuntu也差不多，但需要注意的一点是，有一个步骤让用户选择以怎样的方式安装Ubuntu，给了三个选项，一个是用Windows Boot Manager管理，一个是擦除磁盘，好像还有一个，没注意。&lt;/p&gt;&#xA;&lt;p&gt;我要装双系统，当然是选第一个选项，系统正常装上了，一切正常。下载软件，Neovim、VSCode、kitty。&lt;/p&gt;&#xA;&lt;p&gt;kitty&amp;hellip;&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;上文提到，Kitty不支持fcitx5，理论上这个问题还是可以像Arch时期那么解决，但是我当时没找到怎么给程序添加启动参数。跟着网上的教程折腾了半天系统配置文件后，我成功的又把系统玩炸了，进不去桌面。&lt;/p&gt;&#xA;&lt;p&gt;当时已经是晚上十点多了，当天上午刚出去踏青，走了一万一千步，对于我来说已经把这一个月的活动量都用完了，筋疲力尽。非常困倦的状态下，我打算重装Ubuntu，正式因为特别困，智商下降得厉害，在安装程序选择了第二个：擦除磁盘。&lt;/p&gt;&#xA;&lt;p&gt;我原本Windows系统的D盘擦干净装了个Ubuntu。&lt;/p&gt;&#xA;&lt;p&gt;&amp;hellip;&amp;hellip;&amp;hellip;.&lt;/p&gt;&#xA;&lt;p&gt;那就这样吧，也行，我试着在Windows里把C盘装的那个坏掉的Ubuntu删掉，但是Windows访问不了那块神秘区域。。。&lt;/p&gt;&#xA;&lt;p&gt;那行吧，重装系统。我格式化了C盘，删除了所有的分区，重装了Windows。在下载软件的时候猛地一惊。&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;我为什么现在不用WSL了呢？&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;这是个好问题，对吧，你问我为什么到这时候才想起来用WSL，我不知道，正如开头所说，我是傻逼！&lt;/p&gt;&#xA;&lt;p&gt;于是，我不再安装Ubuntu，执行wsl的安装命令，没有像上次使用Windows那样报错，报各种偏门错，报全网都找不到解决方法的错。&lt;/p&gt;&#xA;&lt;p&gt;此时我心中一万头曹尼玛奔腾，只有一句话想说：&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;我是傻逼！！！！！！&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;什么人适合用linux做主力系统&#34;&gt;什么人适合用Linux做主力系统&lt;/h2&gt;&#xA;&lt;p&gt;我个人认为，对Linux有刚需，如嵌入式、AI、机器学习这种领域，离开Linux干不了活的，我会推荐你用WSL，而不是主力Linux。我不建议任何人主力系统用Linux。。。。更不建议主力Linux发行版是Arch。&lt;/p&gt;&#xA;&lt;p&gt;WSL的好处太多了，最大的好处就是方便。&lt;/p&gt;&#xA;&lt;p&gt;当然，你爱折腾，对Linux有热情，有好奇心，完全可以把我这话当放屁。&lt;/p&gt;&#xA;&lt;h2 id=&#34;结语&#34;&gt;结语&lt;/h2&gt;&#xA;&lt;p&gt;&lt;strong&gt;我是傻逼！&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;我是傻逼！！&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;我是傻逼！！！&lt;/strong&gt;&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>上帝类是什么？该如何避免上帝类？</title>
      <link>https://blog.verdant.ee/posts/%E4%B8%8A%E5%B8%9D%E7%B1%BB%E6%98%AF%E4%BB%80%E4%B9%88%E8%AF%A5%E5%A6%82%E4%BD%95%E9%81%BF%E5%85%8D%E4%B8%8A%E5%B8%9D%E7%B1%BB/</link>
      <pubDate>Sun, 30 Mar 2025 10:47:35 +0000</pubDate><author>i@glowisle.me (五葉地錦)</author>
      <guid>https://blog.verdant.ee/posts/%E4%B8%8A%E5%B8%9D%E7%B1%BB%E6%98%AF%E4%BB%80%E4%B9%88%E8%AF%A5%E5%A6%82%E4%BD%95%E9%81%BF%E5%85%8D%E4%B8%8A%E5%B8%9D%E7%B1%BB/</guid>
      <description>&lt;h2 id=&#34;什么是上帝类&#34;&gt;什么是上帝类&lt;/h2&gt;&#xA;&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;/p&gt;&#xA;&lt;h2 id=&#34;上帝类是如何产生的&#34;&gt;上帝类是如何产生的&lt;/h2&gt;&#xA;&lt;p&gt;上帝类的产生，通常是由于需要快速实现功能而做出的妥协，长期积累就变成繁重的技术债务。或是缺乏规划经验，功能不断地被加到类中。依旧长期积累，上帝类产生了。&lt;/p&gt;&#xA;&lt;h2 id=&#34;上帝类的优缺点&#34;&gt;上帝类的优缺点&lt;/h2&gt;&#xA;&lt;p&gt;上帝类虽然在上文被冠以臃肿、难维护的帽子，但并不代表他没有优点，要辨证地看待。&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;优点：上帝类适用于一些较小的、逻辑简单的任务或工具类，逻辑不复杂，也不需要长时间维护，即拿即用。不用过多地考虑职责和颗粒度的划分，也能提高开发效率&lt;/li&gt;&#xA;&lt;li&gt;缺点：即上文中所提到的。臃肿、复杂、难以维护、测试麻烦、缺乏可读性、耦合度高，不可拓展同时违反SRP和OCP原则&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;上帝类的判定&#34;&gt;上帝类的判定&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;代码行数判定法：代码行数很多的有可能是上帝类，注意是有可能。如果是上帝类，应当进行适当重构&lt;/li&gt;&#xA;&lt;li&gt;依赖关系判定法：通过分析类的依赖关系来判定其是否与其他类高度关联，如果是，他有可能是上帝类。&lt;/li&gt;&#xA;&lt;li&gt;职责判定法：如果一个类承担了过多的职责，他该干的也干了，不该干的也干了，那么毫无疑问，他是上帝类。&lt;/li&gt;&#xA;&lt;li&gt;测试覆盖率判定法： 如果一个类难以单元测试，或覆盖率低或总是出现奇奇怪怪的不可预测的问题，那么他有可能是上帝类。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;如何避免上帝类&#34;&gt;如何避免上帝类&lt;/h2&gt;&#xA;&lt;p&gt;所以，要如何避免上帝类，这个问题的答案已经显而易见了。和上一段相反着做即可。遵守单一职责原则。规划好代码架构。比如，要处理一个压缩包解析和数据展示功能，首先就要拆分职责为不同的类。类中再去写相对应的函数。我们可以把这个功能拆分为解压、读取、展示信息三个类，类中分别编写相应的代码，这样就能做到避免上帝类的产生，从而提高代码的可维护性和可拓展性。&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>安装配置Rime输入法</title>
      <link>https://blog.verdant.ee/posts/%E5%AE%89%E8%A3%85%E9%85%8D%E7%BD%AErime%E8%BE%93%E5%85%A5%E6%B3%95/</link>
      <pubDate>Mon, 24 Mar 2025 20:37:38 +0000</pubDate><author>i@glowisle.me (五葉地錦)</author>
      <guid>https://blog.verdant.ee/posts/%E5%AE%89%E8%A3%85%E9%85%8D%E7%BD%AErime%E8%BE%93%E5%85%A5%E6%B3%95/</guid>
      <description>&lt;h1 id=&#34;前言&#34;&gt;前言&lt;/h1&gt;&#xA;&lt;p&gt;其实我有能用的fcitx5+搜狗输入法的方案，但奈何kitty终端有对这个输入法的兼容性问题，无法启用中文，又奈何kitty的界面多美观舒服，和Konsole比起来简直就不是一个时代的产物。&lt;/p&gt;&#xA;&lt;h1 id=&#34;安装ibus框架和rime输入法引擎&#34;&gt;安装Ibus框架和Rime输入法引擎&lt;/h1&gt;&#xA;&lt;p&gt;&lt;strong&gt;安装 IBus 和 Rime 组件&lt;/strong&gt;：&#xA;&lt;code&gt;sudo pacman -S ibus ibus-rime&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;安装 Rime 双拼方案：&lt;/strong&gt;&#xA;&lt;code&gt;sudo pacman -S rime-double-pinyin&lt;/code&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;配置-ibus-和-rime&#34;&gt;配置 IBus 和 Rime&lt;/h2&gt;&#xA;&lt;p&gt;&lt;strong&gt;设置环境变量&lt;/strong&gt;&#xA;在&lt;code&gt;~/.xprofile&lt;/code&gt;添加以下内容&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#d699b6&#34;&gt;export&lt;/span&gt; GTK_IM_MODULE&lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt;ibus &lt;span style=&#34;color:#d699b6&#34;&gt;export&lt;/span&gt; QT_IM_MODULE&lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt;ibus &lt;span style=&#34;color:#d699b6&#34;&gt;export&lt;/span&gt; XMODIFIERS&lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt;@im&lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt;ibus&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;重启系统或执行 &lt;code&gt;source ~/.xprofile&lt;/code&gt; 使配置生效&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;启动 IBus 并添加 Rime 输入源&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ibus-daemon -drx&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;右键点击系统托盘中的 IBus 图标，选择 &lt;strong&gt;Preferences&lt;/strong&gt; → &lt;strong&gt;Input Method&lt;/strong&gt; → &lt;strong&gt;Add&lt;/strong&gt;，选择 &lt;strong&gt;Chinese (Rime)&lt;/strong&gt;。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;配置双拼方案&lt;/strong&gt;&#xA;编辑 Rime 的配置文件 &lt;code&gt;~/.config/ibus/rime/default.custom.yaml&lt;/code&gt;：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;patch:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;schema_list:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;- schema: double_pinyin &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;# 自然码双拼&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;- schema: luna_pinyin &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;# 全拼备用&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;优化-rime-的智能联想与词库&#34;&gt;优化 Rime 的智能联想与词库&lt;/h2&gt;&#xA;&lt;p&gt;&lt;strong&gt;启用雾凇拼音方案（推荐）&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#d699b6&#34;&gt;cd&lt;/span&gt; ~/.config/ibus/rime&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;git clone https://github.com/iDvel/rime-ice.git&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;cp -r rime-ice/* .&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;安装小鹤双拼方案&#34;&gt;安装小鹤双拼方案&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;# 安装 plum 工具&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;curl -fsSL https://git.io/rime-install | bash -s -- double-pinyin flypy&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>Nodejs环境下控制台拼接字符串输出有undefind</title>
      <link>https://blog.verdant.ee/posts/nodejs%E7%8E%AF%E5%A2%83%E4%B8%8B%E6%8E%A7%E5%88%B6%E5%8F%B0%E6%8B%BC%E6%8E%A5%E5%AD%97%E7%AC%A6%E4%B8%B2%E8%BE%93%E5%87%BA%E6%9C%89undefind/</link>
      <pubDate>Sat, 22 Mar 2025 18:56:33 +0000</pubDate><author>i@glowisle.me (五葉地錦)</author>
      <guid>https://blog.verdant.ee/posts/nodejs%E7%8E%AF%E5%A2%83%E4%B8%8B%E6%8E%A7%E5%88%B6%E5%8F%B0%E6%8B%BC%E6%8E%A5%E5%AD%97%E7%AC%A6%E4%B8%B2%E8%BE%93%E5%87%BA%E6%9C%89undefind/</guid>
      <description>&lt;p&gt;今天在Nodejs环境下搓小工具，控制台输出拼接字符串时，发现有&lt;code&gt;undefind&lt;/code&gt;，代码如下：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e67e80&#34;&gt;const&lt;/span&gt; date &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e67e80&#34;&gt;new&lt;/span&gt; &lt;span style=&#34;color:#d699b6&#34;&gt;Date&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e67e80&#34;&gt;const&lt;/span&gt; year &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; date.getFullYear();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e67e80&#34;&gt;const&lt;/span&gt; month &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; date.getMonth();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e67e80&#34;&gt;const&lt;/span&gt; day &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; date.getDate();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e67e80&#34;&gt;const&lt;/span&gt; hour &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; date.getHours();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e67e80&#34;&gt;const&lt;/span&gt; minute &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; date.getMinutes();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e67e80&#34;&gt;const&lt;/span&gt; second &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; date.getSeconds();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e67e80&#34;&gt;const&lt;/span&gt; logTime &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#b2c98f&#34;&gt;`[&lt;/span&gt;&lt;span style=&#34;color:#b2c98f&#34;&gt;${&lt;/span&gt;year&lt;span style=&#34;color:#b2c98f&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#b2c98f&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#b2c98f&#34;&gt;${&lt;/span&gt;month&lt;span style=&#34;color:#b2c98f&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#b2c98f&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#b2c98f&#34;&gt;${&lt;/span&gt;day&lt;span style=&#34;color:#b2c98f&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#b2c98f&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#b2c98f&#34;&gt;${&lt;/span&gt;hour&lt;span style=&#34;color:#b2c98f&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#b2c98f&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#b2c98f&#34;&gt;${&lt;/span&gt;minute&lt;span style=&#34;color:#b2c98f&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#b2c98f&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#b2c98f&#34;&gt;${&lt;/span&gt;second&lt;span style=&#34;color:#b2c98f&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#b2c98f&#34;&gt;] `&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e67e80&#34;&gt;class&lt;/span&gt; GenerateLog {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e67e80&#34;&gt;static&lt;/span&gt; log() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    process.stdout.write(logTime);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;console.log(GenerateLog.log() &lt;span style=&#34;color:#7a8478&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;log output on the console&amp;#34;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;输出确是这样：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[2025-3-22 18:56:33] undefindlog output on the console&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;原因&#xA;：&lt;code&gt;GenerateLog.log()&lt;/code&gt;方法没有返回值，所以输出&lt;code&gt;undefind&lt;/code&gt;，解决方法如下：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;// 让log方法返回logTime&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e67e80&#34;&gt;class&lt;/span&gt; GenerateLog {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e67e80&#34;&gt;static&lt;/span&gt; log() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e67e80&#34;&gt;return&lt;/span&gt; logTime; &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;// 返回字符串&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;console.log(GenerateLog.log() &lt;span style=&#34;color:#7a8478&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;log output on the console&amp;#34;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;关键总结：&#xA;Javascript中，如果方法没有返回值，那么输出的就是&lt;code&gt;undefind&lt;/code&gt;&lt;/p&gt;&#xA;&lt;h4 id=&#34;扩展&#34;&gt;扩展&lt;/h4&gt;&#xA;&lt;p&gt;为什么 console.log() 本身会返回 undefined？&#xA;在 REPL 环境（如 Node.js 命令行或浏览器控制台）中，每条语句的执行结果会被隐式打印。由于 console.log() 函数本身没有返回值（即返回 undefined），因此会显示 undefined。但在脚本执行时，这一行为不会发生，因为脚本模式不自动打印返回值&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>Kitty终端美化记录</title>
      <link>https://blog.verdant.ee/posts/kitty%E7%BB%88%E7%AB%AF%E7%BE%8E%E5%8C%96%E8%AE%B0%E5%BD%95/</link>
      <pubDate>Sun, 09 Mar 2025 12:41:10 +0000</pubDate><author>i@glowisle.me (五葉地錦)</author>
      <guid>https://blog.verdant.ee/posts/kitty%E7%BB%88%E7%AB%AF%E7%BE%8E%E5%8C%96%E8%AE%B0%E5%BD%95/</guid>
      <description>&lt;p&gt;Kitty这个终端可谓是兼顾了性能与美观，虽然默认设置很简陋，但是经过一番折腾后也能变得很漂亮。&lt;/p&gt;&#xA;&lt;h2 id=&#34;选择配色&#34;&gt;选择配色&lt;/h2&gt;&#xA;&lt;p&gt;运行&lt;code&gt;kitty + kitten themes&lt;/code&gt;后会弹出一个选择配色的界面&#xA;&lt;figure class=&#34;image-caption&#34;&gt;&#xA;    &lt;img src=&#34;https://images.glowisle.me/Pasted%20image%2020250309124346.webp&#34; alt=&#34;&#34;&gt;&#xA;    &lt;figcaption&gt;&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;令我感到非常高兴的是，这个界面支持vim的hjkl键位，也可以用/来搜索。&#xA;选好后，回车按m，command + ^ + ,重载配置文件。&lt;/p&gt;&#xA;&lt;h2 id=&#34;配置字体&#34;&gt;配置字体&lt;/h2&gt;&#xA;&lt;p&gt;打开kitty的配置文件&lt;code&gt;nvim ~/.config/kitty/kitty.conf&lt;/code&gt;，把字号改到12&#xA;&lt;code&gt;font_size 12&lt;/code&gt;&#xA;输入&lt;code&gt;kitty list-fonts --psnames&lt;/code&gt;来列出系统安装好的所有等宽字体。&lt;/p&gt;&#xA;&lt;h2 id=&#34;设置窗口风格&#34;&gt;设置窗口风格&lt;/h2&gt;&#xA;&lt;p&gt;进入配置文件&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;#window&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;# 不显示窗口标题栏 保留窗口圆角&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;hide_window_decorations titlebar-only&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;# 边距&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;window_padding_width 5&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;# 不透明度&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;background_opacity   0.8&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;# 毛玻璃效果&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;background_blur      30&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;设置标签栏风格&#34;&gt;设置标签栏风格&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;#tab bar&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;tab_bar_edge          top&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;tab_bar_style         powerline&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;tab_powerline_style   slanted&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;安装终端文件管理器&#34;&gt;安装终端文件管理器&lt;/h2&gt;&#xA;&lt;p&gt;&lt;code&gt;yay -S yazi&lt;/code&gt;&#xA;推荐yazi的原因，就是能用vim快捷键啊！hjkl好文明！&#xA;而且它还能直接在终端预览图片&#xA;&lt;figure class=&#34;image-caption&#34;&gt;&#xA;    &lt;img src=&#34;https://images.glowisle.me/Pasted%20image%2020250309131507.webp&#34; alt=&#34;&#34;&gt;&#xA;    &lt;figcaption&gt;&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;最终效果预览&#34;&gt;最终效果预览&lt;/h2&gt;&#xA;&lt;p&gt;&lt;figure class=&#34;image-caption&#34;&gt;&#xA;    &lt;img src=&#34;https://images.glowisle.me/Pasted%20image%2020250309131145.webp&#34; alt=&#34;&#34;&gt;&#xA;    &lt;figcaption&gt;&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;figure class=&#34;image-caption&#34;&gt;&#xA;    &lt;img src=&#34;https://images.glowisle.me/Pasted%20image%2020250309131221.webp&#34; alt=&#34;&#34;&gt;&#xA;    &lt;figcaption&gt;&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>KDE桌面环境无法在Konsole切换中文输入法的解决方案</title>
      <link>https://blog.verdant.ee/posts/kde%E6%A1%8C%E9%9D%A2%E7%8E%AF%E5%A2%83%E6%97%A0%E6%B3%95%E5%9C%A8konsole%E5%88%87%E6%8D%A2%E4%B8%AD%E6%96%87%E8%BE%93%E5%85%A5%E6%B3%95%E7%9A%84%E8%A7%A3%E5%86%B3%E6%96%B9%E6%A1%88/</link>
      <pubDate>Sat, 08 Mar 2025 22:07:58 +0000</pubDate><author>i@glowisle.me (五葉地錦)</author>
      <guid>https://blog.verdant.ee/posts/kde%E6%A1%8C%E9%9D%A2%E7%8E%AF%E5%A2%83%E6%97%A0%E6%B3%95%E5%9C%A8konsole%E5%88%87%E6%8D%A2%E4%B8%AD%E6%96%87%E8%BE%93%E5%85%A5%E6%B3%95%E7%9A%84%E8%A7%A3%E5%86%B3%E6%96%B9%E6%A1%88/</guid>
      <description>&lt;h3 id=&#34;原因&#34;&gt;原因&lt;/h3&gt;&#xA;&lt;p&gt;KDE默认使用Wayland会话，而fcitx4不支持Wayland，需升级到fcitx5。若无法升级到fcitx5或升级后仍然无法切换中文输入法，&lt;strong&gt;安装fcitx-qt6&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo pacman -S fcitx-qt6&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;安装后执行&lt;code&gt;sudo reboot now&lt;/code&gt;进行重启，问题解决。&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>【无废话】全网最简单的Hexo+Obsidian图片解决方案</title>
      <link>https://blog.verdant.ee/posts/%E6%97%A0%E5%BA%9F%E8%AF%9D%E5%85%A8%E7%BD%91%E6%9C%80%E7%AE%80%E5%8D%95%E7%9A%84hexo+obsidian%E5%9B%BE%E7%89%87%E8%A7%A3%E5%86%B3%E6%96%B9%E6%A1%88/</link>
      <pubDate>Wed, 05 Mar 2025 21:17:42 +0000</pubDate><author>i@glowisle.me (五葉地錦)</author>
      <guid>https://blog.verdant.ee/posts/%E6%97%A0%E5%BA%9F%E8%AF%9D%E5%85%A8%E7%BD%91%E6%9C%80%E7%AE%80%E5%8D%95%E7%9A%84hexo+obsidian%E5%9B%BE%E7%89%87%E8%A7%A3%E5%86%B3%E6%96%B9%E6%A1%88/</guid>
      <description>&lt;p&gt;把Hexo博客根目录用黑曜石打开，如果已经打开了仓库&#xA;&lt;figure class=&#34;image-caption&#34;&gt;&#xA;    &lt;img src=&#34;https://images.glowisle.me/Pasted%20image%2020250305215423.webp&#34; alt=&#34;&#34;&gt;&#xA;    &lt;figcaption&gt;&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;在弹出的窗口中选第二个。&lt;/p&gt;&#xA;&lt;p&gt;在source目录下新建images文件夹用于存放图片&#xA;设置 =&amp;gt; 文件与链接 =&amp;gt; 附件默认存放路径：选择指定的附件文件夹。路径填写刚刚创建的image文件夹的相对路径&#xA;取消使用Wiki链接&#xA;注意。由于我的文件结构是这样的所以这么填写，要&lt;strong&gt;根据自己的文件结构填写相对路径&lt;/strong&gt;。&#xA;&lt;figure class=&#34;image-caption&#34;&gt;&#xA;    &lt;img src=&#34;https://images.glowisle.me/Pasted%20image%2020250305215642.webp&#34; alt=&#34;&#34;&gt;&#xA;    &lt;figcaption&gt;&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;搞定，同时可以在本地编辑环境和博客网站中显示。&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>【未解决】Windows WSL报错：Error: 0x80080005 ???????</title>
      <link>https://blog.verdant.ee/posts/%E6%9C%AA%E8%A7%A3%E5%86%B3windows-wsl%E6%8A%A5%E9%94%99error-0x80080005/</link>
      <pubDate>Tue, 04 Mar 2025 20:58:30 +0000</pubDate><author>i@glowisle.me (五葉地錦)</author>
      <guid>https://blog.verdant.ee/posts/%E6%9C%AA%E8%A7%A3%E5%86%B3windows-wsl%E6%8A%A5%E9%94%99error-0x80080005/</guid>
      <description>&lt;p&gt;设备环境：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;操作系统：Windows 10&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;安装系统：Arch Linux&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;错误日志：&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Installing, this may take a few minutes...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;WslRegisterDistribution failed with error: 0x80080005&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Error: 0x80080005 ???????&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Press any key to continue...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;网上有一篇&lt;a href=&#34;https://ask.csdn.net/questions/7625716&#34;&gt;文章&lt;/a&gt;提到这个错误，下面的评论回复以管理员权限运行命令提示符并执行&lt;code&gt;sc stop LxssManager&lt;/code&gt;和&lt;code&gt;sc start LxssManager&lt;/code&gt;&#xA;出现如下报错：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;C:\Windows\system32&amp;gt;sc stop LxssManager&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[SC] OpenService 失败 1060:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;指定的服务未安装。&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;顺藤摸瓜，在网上寻找&lt;code&gt;LxssManager&lt;/code&gt;这个服务要如何安装。&#xA;网上暂时还没有找到相关文章能够解决这个问题，但是CSDN的一篇文章引起了我的注意&#xA;&lt;a href=&#34;https://blog.csdn.net/renwudao24/article/details/52061906&#34;&gt;[SC] OpenService 失败：1060指定的服务未安装_[sc] openservice 失败 1060: 指定的服务未安装。-CSDN博客&lt;/a&gt;&#xA;文章中提到了“服务”，在开始菜单中搜索服务，进入应用找到了一个名为WSL Service的服务。点左上角启动。&#xA;提取关键信息：&lt;strong&gt;1058、被禁用、关联的设备没有启动&lt;/strong&gt;。&#xA;检查功能是否开启：按下 &lt;code&gt;Win+S&lt;/code&gt; 搜索 &lt;strong&gt;启用或关闭Windows功能&lt;/strong&gt;&#xA;勾选&lt;code&gt;适用于Linux的Windows子系统&lt;/code&gt;和&lt;code&gt;虚拟机平台&lt;/code&gt;这两项，点击确定&#xA;重启电脑。&#xA;回来以后，用管理员身份运行powershell，强制重置WSL服务，依次执行：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;wsl --shutdown&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;wsl --unregister Arch &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;# 替换为你的发行版名称&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;wsl --install -d Arch &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;# 重新注册发行版&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;如果提示内核缺失，在这里下&lt;a href=&#34;https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi&#34;&gt;https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;如果有以下输出：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;zcz  system32  ♥ 21:32  wsl --shutdown&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;此应用程序需要适用于 Linux 的 Windows 子系统可选组件。&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;通过运行安装它： wsl.exe --install --no-distribution&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;可能需要重新启动系统才能使更改生效。&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;错误代码: Wsl/WSL_E_WSL_OPTIONAL_COMPONENT_REQUIRED&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;两种可能：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;没有安装WSL服务&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;服务被禁用&lt;/strong&gt;&#xA;后者比较棘手，我们先做第一种尝试&#xA;&lt;strong&gt;强制安装WSL组件&lt;/strong&gt;&#xA;&lt;strong&gt;以管理员身份运行 PowerShell&lt;/strong&gt;，执行以下命令：&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;# 安装WSL核心组件（会自动启用虚拟化功能）&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;wsl --install&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;输出：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-gdscript3&#34; data-lang=&#34;gdscript3&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;zcz  system32  ♥ &lt;span style=&#34;color:#d699b6&#34;&gt;21&lt;/span&gt;:&lt;span style=&#34;color:#d699b6&#34;&gt;34&lt;/span&gt;  wsl &lt;span style=&#34;color:#7a8478&#34;&gt;--&lt;/span&gt;install&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;正在安装 Windows 可选组件: Microsoft&lt;span style=&#34;color:#7a8478&#34;&gt;-&lt;/span&gt;Windows&lt;span style=&#34;color:#7a8478&#34;&gt;-&lt;/span&gt;Subsystem&lt;span style=&#34;color:#7a8478&#34;&gt;-&lt;/span&gt;Linux&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Deployment &lt;span style=&#34;color:#e67e80&#34;&gt;Image&lt;/span&gt; Servicing &lt;span style=&#34;color:#7a8478&#34;&gt;and&lt;/span&gt; Management &lt;span style=&#34;color:#e67e80&#34;&gt;tool&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Version: &lt;span style=&#34;color:#d699b6&#34;&gt;10.0&lt;/span&gt;&lt;span style=&#34;color:#7a8478&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#d699b6&#34;&gt;19041.3636&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e67e80&#34;&gt;Image&lt;/span&gt; Version: &lt;span style=&#34;color:#d699b6&#34;&gt;10.0&lt;/span&gt;&lt;span style=&#34;color:#7a8478&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#d699b6&#34;&gt;19045.5487&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;启用一个或多个功能&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[&lt;span style=&#34;color:#7a8478&#34;&gt;==========================&lt;/span&gt;&lt;span style=&#34;color:#d699b6&#34;&gt;100.0&lt;/span&gt;&lt;span style=&#34;color:#7a8478&#34;&gt;%==========================&lt;/span&gt;]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;The operation completed successfully&lt;span style=&#34;color:#7a8478&#34;&gt;.&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;正在安装 Windows 可选组件: VirtualMachinePlatform&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Deployment &lt;span style=&#34;color:#e67e80&#34;&gt;Image&lt;/span&gt; Servicing &lt;span style=&#34;color:#7a8478&#34;&gt;and&lt;/span&gt; Management &lt;span style=&#34;color:#e67e80&#34;&gt;tool&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Version: &lt;span style=&#34;color:#d699b6&#34;&gt;10.0&lt;/span&gt;&lt;span style=&#34;color:#7a8478&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#d699b6&#34;&gt;19041.3636&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e67e80&#34;&gt;Image&lt;/span&gt; Version: &lt;span style=&#34;color:#d699b6&#34;&gt;10.0&lt;/span&gt;&lt;span style=&#34;color:#7a8478&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#d699b6&#34;&gt;19045.5487&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;启用一个或多个功能&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[&lt;span style=&#34;color:#7a8478&#34;&gt;==========================&lt;/span&gt;&lt;span style=&#34;color:#d699b6&#34;&gt;100.0&lt;/span&gt;&lt;span style=&#34;color:#7a8478&#34;&gt;%==========================&lt;/span&gt;]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;The operation completed successfully&lt;span style=&#34;color:#7a8478&#34;&gt;.&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;请求的操作成功。直到重新启动系统前更改将不会生效。&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;再次进行重启。&#xA;&lt;code&gt;Restart-Computer&lt;/code&gt;&#xA;开机加载界面显示：我们无法完成更新，正在撤销更改。。&#xA;尝试过的方法：进入安全模式，尝试重启更新，失败。&#xA;安全模式仍然失败，选择临时禁用WSL服务&#xA;管理员cmd执行&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-powershell&#34; data-lang=&#34;powershell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#d699b6&#34;&gt;sc &lt;/span&gt;config LxssManager start= disabled&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;shutdown /&lt;span style=&#34;color:#d699b6&#34;&gt;r &lt;/span&gt;/t &lt;span style=&#34;color:#d699b6&#34;&gt;0&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;输出：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;C:\Windows\system32&amp;gt;sc config LxssManager start= disabled&amp;amp;&amp;amp; shutdown /r /t 0&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[SC] OpenService 失败 1060:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;指定的服务未安装。&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;唉，老朋友，又见面了。只能祭出来我的终极大杀器。&lt;/p&gt;&#xA;&lt;h3 id=&#34;彻底重装wsl&#34;&gt;&lt;strong&gt;彻底重装WSL&lt;/strong&gt;&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-powershell&#34; data-lang=&#34;powershell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;# 卸载所有发行版&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;wsl --unregister *&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;# 删除残留配置&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#d699b6&#34;&gt;Remove-Item&lt;/span&gt; -Path &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;&lt;/span&gt;$env:USERPROFILE&lt;span style=&#34;color:#b2c98f&#34;&gt;\AppData\Local\Packages\*Linux*&amp;#34;&lt;/span&gt; -Recurse -Force&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;输出：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;zcz  system32  ♥ 22:04  # 卸载所有发行版&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; wsl --unregister *&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; # 删除残留配置&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; Remove-Item -Path &amp;#34;$env:USERPROFILE\AppData\Local\Packages\*Linux*&amp;#34; -Recurse -Force&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;正在注销。&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;此应用程序需要适用于 Linux 的 Windows 子系统可选组件。&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;通过运行安装它： wsl.exe --install --no-distribution&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;可能需要重新启动系统才能使更改生效。&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;错误代码: Wsl/WSL_E_WSL_OPTIONAL_COMPONENT_REQUIRED&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;输入&lt;code&gt;wsl.exe --install --no-distribution&lt;/code&gt;&#xA;输出：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-gdscript3&#34; data-lang=&#34;gdscript3&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;zcz  system32  ♥ &lt;span style=&#34;color:#d699b6&#34;&gt;22&lt;/span&gt;:&lt;span style=&#34;color:#d699b6&#34;&gt;09&lt;/span&gt;  wsl&lt;span style=&#34;color:#7a8478&#34;&gt;.&lt;/span&gt;exe &lt;span style=&#34;color:#7a8478&#34;&gt;--&lt;/span&gt;install &lt;span style=&#34;color:#7a8478&#34;&gt;--&lt;/span&gt;no&lt;span style=&#34;color:#7a8478&#34;&gt;-&lt;/span&gt;distribution&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;正在安装 Windows 可选组件: Microsoft&lt;span style=&#34;color:#7a8478&#34;&gt;-&lt;/span&gt;Windows&lt;span style=&#34;color:#7a8478&#34;&gt;-&lt;/span&gt;Subsystem&lt;span style=&#34;color:#7a8478&#34;&gt;-&lt;/span&gt;Linux&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Deployment &lt;span style=&#34;color:#e67e80&#34;&gt;Image&lt;/span&gt; Servicing &lt;span style=&#34;color:#7a8478&#34;&gt;and&lt;/span&gt; Management &lt;span style=&#34;color:#e67e80&#34;&gt;tool&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Version: &lt;span style=&#34;color:#d699b6&#34;&gt;10.0&lt;/span&gt;&lt;span style=&#34;color:#7a8478&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#d699b6&#34;&gt;19041.3636&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e67e80&#34;&gt;Image&lt;/span&gt; Version: &lt;span style=&#34;color:#d699b6&#34;&gt;10.0&lt;/span&gt;&lt;span style=&#34;color:#7a8478&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#d699b6&#34;&gt;19045.5487&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;启用一个或多个功能&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[&lt;span style=&#34;color:#7a8478&#34;&gt;==========================&lt;/span&gt;&lt;span style=&#34;color:#d699b6&#34;&gt;100.0&lt;/span&gt;&lt;span style=&#34;color:#7a8478&#34;&gt;%==========================&lt;/span&gt;]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;The operation completed successfully&lt;span style=&#34;color:#7a8478&#34;&gt;.&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;正在安装 Windows 可选组件: VirtualMachinePlatform&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Deployment &lt;span style=&#34;color:#e67e80&#34;&gt;Image&lt;/span&gt; Servicing &lt;span style=&#34;color:#7a8478&#34;&gt;and&lt;/span&gt; Management &lt;span style=&#34;color:#e67e80&#34;&gt;tool&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Version: &lt;span style=&#34;color:#d699b6&#34;&gt;10.0&lt;/span&gt;&lt;span style=&#34;color:#7a8478&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#d699b6&#34;&gt;19041.3636&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e67e80&#34;&gt;Image&lt;/span&gt; Version: &lt;span style=&#34;color:#d699b6&#34;&gt;10.0&lt;/span&gt;&lt;span style=&#34;color:#7a8478&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#d699b6&#34;&gt;19045.5487&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;启用一个或多个功能&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[&lt;span style=&#34;color:#7a8478&#34;&gt;==========================&lt;/span&gt;&lt;span style=&#34;color:#d699b6&#34;&gt;100.0&lt;/span&gt;&lt;span style=&#34;color:#7a8478&#34;&gt;%==========================&lt;/span&gt;]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;The operation completed successfully&lt;span style=&#34;color:#7a8478&#34;&gt;.&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;请求的操作成功。直到重新启动系统前更改将不会生效。&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;继续重启，显示“我们无法完成更新，正在撤销更改。”&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;以管理员身份打开CMD&lt;/strong&gt;：&#xA;按下 &lt;code&gt;Win+S&lt;/code&gt; → 输入 &lt;code&gt;cmd&lt;/code&gt; → 右键选择 &lt;strong&gt;“以管理员身份运行”&lt;/strong&gt;  &lt;strong&gt;执行以下命令（注意语法）&lt;/strong&gt;：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-cmd&#34; data-lang=&#34;cmd&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sc config LxssManager start= auto&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sc config vmcompute start= auto&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;net start LxssManager&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;net start vmcompute&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;仍然1085，管理员cmd执行&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;dism /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;dism /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;尝试重装WSL，出现&#xA;![[_posts\Windows-WSL报错：Error-0x80080005\Pasted image 20250304222548.png]]&lt;/p&gt;&#xA;&lt;p&gt;研究了一阵子，&lt;strong&gt;&lt;code&gt;vmcompute&lt;/code&gt;&lt;/strong&gt;（虚拟机核心服务）和 &lt;strong&gt;&lt;code&gt;LxssManager&lt;/code&gt;&lt;/strong&gt;（WSL管理服务）均未注册，导致WSL安装向导崩溃。&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-Powershell&#34; data-lang=&#34;Powershell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;# 以管理员身份运行&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;dism.exe /online /&lt;span style=&#34;color:#d699b6&#34;&gt;enable-feature&lt;/span&gt; /featurename:&lt;span style=&#34;color:#d699b6&#34;&gt;Microsoft-Windows&lt;/span&gt;-Subsystem-Linux /all /norestart&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;dism.exe /online /&lt;span style=&#34;color:#d699b6&#34;&gt;enable-feature&lt;/span&gt; /featurename:VirtualMachinePlatform /all /norestart&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;dism.exe /online /&lt;span style=&#34;color:#d699b6&#34;&gt;enable-feature&lt;/span&gt; /featurename:HypervisorPlatform /all /norestart&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;重启，“我们无法完成更新，正在撤销更改。”&#xA;。。。。。、、、、&#xA;尽力了。现在看来，是系统层面的硬伤了。可能行得通的有重装系统和保留文件重置系统两个选择。不过我还是会和这个问题死磕一下，我就不信我干不成这个事。明天还要苦逼上学，先睡了。&#xA;2025.3.4 22:57&lt;/p&gt;&#xA;&lt;p&gt;————————————————————————————&lt;/p&gt;&#xA;&lt;p&gt;2025.3.5&lt;/p&gt;&#xA;&lt;p&gt;尝试&lt;strong&gt;强制修复系统核心组件&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;# 以管理员身份运行 PowerShell&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sfc /scannow&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;DISM /Online /Cleanup-Image /RestoreHealth&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;重置 Windows Update 组件&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;# 管理员cmd执行 net stop wuauserv&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;net stop cryptSvc&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;net stop bits&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;net stop msiserver&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;rmdir C:\Windows\SoftwareDistribution /S /Q&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;net start wuauserv&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;net start cryptSvc&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;net start bits&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;net start msiserver&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;# 强制重建WSL核心服务&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sc create vmcompute binPath= &amp;#34;C:\Windows\System32\vmcompute.exe&amp;#34; start= auto type= kernel&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sc create LxssManager binPath= &amp;#34;C:\Windows\System32\lxss\LxssManager.dll&amp;#34; start= auto type= own&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;net start vmcompute&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;net start LxssManager&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;仍然无法启动。使用wsl偶遇神秘怪异bug拼尽全力无法战胜。我都已经浪费这么长时间来研究这个问题，为什么我不直接装个Linux系统呢。周末就把这傻卵系统换成Arch！&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>记录Typecho博客转移到Hexo</title>
      <link>https://blog.verdant.ee/posts/4/</link>
      <pubDate>Mon, 03 Mar 2025 15:40:00 +0800</pubDate><author>i@glowisle.me (五葉地錦)</author>
      <guid>https://blog.verdant.ee/posts/4/</guid>
      <description>&lt;h1 id=&#34;前言&#34;&gt;前言&lt;/h1&gt;&#xA;&lt;p&gt;折腾来折腾去，最后发现归宿还是静态博客，安全性高、性能开销小，用Github直接省去服务器费用还差不多永生。每年把域名钱交了就得了，图片的问题再想想办法，总能解决的。&#xA;&lt;del&gt;突然有一种为了躲避战乱带着一家人四处奔波的悲凉感&lt;/del&gt;&lt;/p&gt;&#xA;&lt;h1 id=&#34;分析&#34;&gt;分析&lt;/h1&gt;&#xA;&lt;p&gt;博客网站的内容，都可以拆分为以下几个点：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;文章&lt;/li&gt;&#xA;&lt;li&gt;评论&lt;/li&gt;&#xA;&lt;li&gt;文章插图&lt;/li&gt;&#xA;&lt;li&gt;网站贴图资源&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;先从最主要的文章开始，想想有没有什么可以用的。&#xA;gitee上有一个&lt;a href=&#34;https://gitcode.com/gh_mirrors/ty/Typecho-Plugin-Tp2MD&#34;&gt;插件&lt;/a&gt;，看起来好像有点用，折腾安装一下试试先。&lt;/p&gt;&#xA;&lt;h1 id=&#34;tp2md插件迁移文章&#34;&gt;Tp2MD插件迁移文章&lt;/h1&gt;&#xA;&lt;p&gt;远程登录服务器，把本地下号的zip传到服务器上并解压。&#xA;cd到插件目录&#xA;&lt;code&gt;/usr/share/nginx/html/usr/plugins&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;解压压缩包&#xA;&lt;code&gt;unzip Typecho-Plugin-Tp2MD-master.zip&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;重命名为插件的自述文件要求的名称&#xA;&lt;code&gt;mv Typecho-Plugin-Tp2MD-master Tp2MD&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;登录网站后台，启用插件。点击插件的设置，保存后按照教程访问。&#xA;这里提示&lt;code&gt;不能写入文件，请检查 cache 文件夹权限！&lt;/code&gt;，我们在插件目录设置一下权限&#xA;&lt;code&gt;sudo chmod -R 777 cache&lt;/code&gt;a&#xA;注意是这个插件目录下的cache！！&lt;/p&gt;&#xA;&lt;p&gt;提示导出成功，cd到这个目录，把文件压缩下载下来查看&#xA;可能是因为我有的文章点了多篇分类，导出文件夹有点问题，无所谓，后期再调，拿到了就行。至此，文章部分搞定！&lt;/p&gt;&#xA;&lt;h1 id=&#34;评论&#34;&gt;评论&lt;/h1&gt;&#xA;&lt;p&gt;评论这里，我折腾了两天，尝试尽了各种方案（Disqus Valine Waline Utterances Twikoo Atalk），最后还是选择了Giscus。我也知道这样读者没有github就没办法发评论，但是其他几种方案都会出现各种奇奇怪怪且无法解决的问题比如Cloudflare拦截、CORS出毛病、服务器被墙以及莫名其妙404、403。我真的尽力了。&lt;/p&gt;&#xA;&lt;h1 id=&#34;文章插图&#34;&gt;文章插图&lt;/h1&gt;&#xA;&lt;h2 id=&#34;转移图片文件&#34;&gt;转移图片文件&lt;/h2&gt;&#xA;&lt;p&gt;进入&lt;code&gt;/usr/uploads/&lt;/code&gt;，压缩下载图片&lt;/p&gt;&#xA;&lt;p&gt;重组Hexo图片目录：复制所有图片到Hexo的&lt;code&gt;source/images/&lt;/code&gt;目录。&lt;/p&gt;&#xA;&lt;p&gt;手动替换图片路径 ，注意，静态资源解析默认以source为根目录，所以直接写以source为根目录的绝对路径就行。&lt;/p&gt;&#xA;&lt;h1 id=&#34;部署到vercel加速访问&#34;&gt;部署到vercel加速访问&lt;/h1&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;注册vercel账号&lt;/li&gt;&#xA;&lt;li&gt;创建项目，关联仓库&lt;/li&gt;&#xA;&lt;li&gt;域名解析&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;2025.3.3，博客全部迁移完毕，粗略累计用时六天，一直没什么时间搞，耗时最长的还是在评论系统上的试错。&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>Java面向对象编程——多态、抽象类、接口</title>
      <link>https://blog.verdant.ee/posts/186/</link>
      <pubDate>Fri, 10 Jan 2025 15:05:00 +0000</pubDate><author>i@glowisle.me (五葉地錦)</author>
      <guid>https://blog.verdant.ee/posts/186/</guid>
      <description>&lt;h2 id=&#34;什么是多态&#34;&gt;什么是多态&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;在继承/实现情况下的一种现象，表现为：对象多态、行为多态。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;多态的前提&#34;&gt;多态的前提&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;有&lt;strong&gt;继承/实&lt;/strong&gt;现关系；存在父类引用子类对象；&lt;strong&gt;存在方法重写&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;h2 id=&#34;多态的注意事项&#34;&gt;多态的注意事项&lt;/h2&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;多态是对象、行为的多态，成员变量不体现多态。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;使用多态的好处&#34;&gt;使用多态的好处&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;在多态形式下，右边的对象是解耦合的，更便于拓展和维护。&lt;/li&gt;&#xA;&lt;li&gt;定义方法时，使用父类类型的形参，可以接收一切子类对象，扩展性更强、更便利。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;多态下产生的一个问题&#34;&gt;多态下产生的一个问题&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;多态下不能使用子类的独有功能。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;多态下的类型转换&#34;&gt;多态下的类型转换&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;自动类型转换：&lt;code&gt;父类 变量名 = new 子类();&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;强制类型转换： &lt;code&gt;子类 变量名 = (子类)父类变量&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;强制类型转换的注意事项&#34;&gt;强制类型转换的注意事项&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;存在继承/实现关系就可以在编译阶段进行强制类型转换，编译阶段不会报错。&lt;/li&gt;&#xA;&lt;li&gt;运行时，如果发现对象的真实类型与强转后的类型不同，就会报类型转换异常(ClassCastException)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h4 id=&#34;强转前java建议&#34;&gt;强转前，Java建议：&lt;/h4&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;使用instanceof关键字，判断当前对象的真是类型，再进行强制类型转换。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;final&#34;&gt;final&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;final关键字的中文是最终的意思，可以修饰类、方法、变量&#xA;&lt;ul&gt;&#xA;&lt;li&gt;修饰类：该类被称为最终类，特点是不能被继承了。&lt;/li&gt;&#xA;&lt;li&gt;修饰方法：该方法被称为最终方法，特点是不能被重写了。&lt;/li&gt;&#xA;&lt;li&gt;修饰变量：该变量只能被赋值一次。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;常量&#34;&gt;常量&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;使用了static final 修饰的成员变量就被称为常量；&lt;/li&gt;&#xA;&lt;li&gt;作用：通常用于记录系统的配置信息。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;注意：常量的命名规范：使用大写英文单词，多个单词使用下划线连接起来。&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;视同常量记录系统配置信息的优势执行原理&#34;&gt;视同常量记录系统配置信息的优势、执行原理&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;代码可读性更好、可维护性也更好。&lt;/li&gt;&#xA;&lt;li&gt;程序编译后，常量会被宏替换：出现常量的地方全部会被替换成其记住的字面量，这样可以保证使用常量和直接用字面量的性能是一样的。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;抽象类&#34;&gt;抽象类&lt;/h2&gt;&#xA;&lt;h3 id=&#34;什么是抽象类&#34;&gt;什么是抽象类&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Java中有个关键字叫abstract，他就是抽象的意思，可以用来修饰类、成员方法&lt;/li&gt;&#xA;&lt;li&gt;abstract修饰类，这个就是抽象类，修饰成员方法同理。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;抽象类的注意事项特点&#34;&gt;抽象类的注意事项、特点&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;抽象类中不一定有抽象方法，有抽象方法的类一定是抽象类。&lt;/li&gt;&#xA;&lt;li&gt;类该有的成员（成员变量、方法、构造器）抽象类都可以有。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;抽象类最主要的特点：&lt;/strong&gt; 抽象类不能创建对象，仅作为一种特殊的父类，让子类继承并实现。&lt;/li&gt;&#xA;&lt;li&gt;一个类继承抽象类，必须重写完抽象类的全部抽象方法，否则这个类也必须定义成抽象类。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;抽象类的使用场景和好处&#34;&gt;抽象类的使用场景和好处&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;父类知道每个子类都要做某个行为，但每个子类做的情况不一样，父类就定义成抽象方法，交给子类去重写实现，我们设计这样的抽象类，就是为了更好的支持多态。&lt;del&gt;爸爸画饼儿子烙饼&lt;/del&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;接口&#34;&gt;接口&lt;/h2&gt;&#xA;&lt;h3 id=&#34;接口概述&#34;&gt;接口概述&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Java提供了一个关键字interface，用这个关键字我们可以定义出一个特殊的结构：接口。&lt;/li&gt;&#xA;&lt;li&gt;注意：接口不能创建对象；接口是用来被类实现（implements）的，实现接口的类被称为实现类。&lt;/li&gt;&#xA;&lt;li&gt;一个类可以实现多个接口，实现类实现多个接口必须重写完全部接口的全部抽象方法，否则实现类需要定义成抽象类。&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
    <item>
      <title>Java面向对象编程——继承</title>
      <link>https://blog.verdant.ee/posts/185/</link>
      <pubDate>Fri, 10 Jan 2025 13:19:11 +0000</pubDate><author>i@glowisle.me (五葉地錦)</author>
      <guid>https://blog.verdant.ee/posts/185/</guid>
      <description>&lt;h2 id=&#34;什么是继承&#34;&gt;什么是继承&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Java中提供了一个关键字&lt;code&gt;extends&lt;/code&gt;，用这个关键字，可以让一个类和另一个类建立起父子关系。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;继承的特点&#34;&gt;继承的特点&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;子类能继承父类的非私有成员变量和成员方法。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;继承后对象的创建&#34;&gt;继承后对象的创建&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;子类的对象是由子类、父类共同完成的。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;继承相关的注意事项&#34;&gt;继承相关的注意事项&lt;/h2&gt;&#xA;&lt;h3 id=&#34;权限修饰符&#34;&gt;权限修饰符&lt;/h3&gt;&#xA;&lt;h4 id=&#34;什么是权限修饰符&#34;&gt;什么是权限修饰符？&lt;/h4&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;用来限制类中的成员（成员变量、成员方法、构造器、代码块&amp;hellip;）能够被访问的范围&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;权限修饰符有几种与各自的作用&#34;&gt;权限修饰符有几种与各自的作用&lt;/h3&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;修饰符&lt;/th&gt;&#xA;          &lt;th&gt;在本类中&lt;/th&gt;&#xA;          &lt;th&gt;同一个包下的其他类&lt;/th&gt;&#xA;          &lt;th&gt;任意包下的子类&lt;/th&gt;&#xA;          &lt;th&gt;任意包下的任意类&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;private&lt;/td&gt;&#xA;          &lt;td&gt;√&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;缺省&lt;/td&gt;&#xA;          &lt;td&gt;√&lt;/td&gt;&#xA;          &lt;td&gt;√&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;protected&lt;/td&gt;&#xA;          &lt;td&gt;√&lt;/td&gt;&#xA;          &lt;td&gt;√&lt;/td&gt;&#xA;          &lt;td&gt;√&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;public&lt;/td&gt;&#xA;          &lt;td&gt;√&lt;/td&gt;&#xA;          &lt;td&gt;√&lt;/td&gt;&#xA;          &lt;td&gt;√&lt;/td&gt;&#xA;          &lt;td&gt;√&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;provate &amp;lt; 缺省 &amp;lt; protected &amp;lt; public&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h2 id=&#34;单继承&#34;&gt;单继承&lt;/h2&gt;&#xA;&lt;p&gt;Java是&lt;strong&gt;继承&lt;/strong&gt;的，Java中的类&lt;strong&gt;不支持多继承&lt;/strong&gt;，但是支持&lt;strong&gt;多层继承&lt;/strong&gt;。&lt;/p&gt;&#xA;&lt;h2 id=&#34;object类&#34;&gt;Object类&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Ojbect类是所有Java类的父类，任何类都是Object的子类。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;方法重写&#34;&gt;方法重写&lt;/h2&gt;&#xA;&lt;h3 id=&#34;什么是方法重写&#34;&gt;什么是方法重写&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;当子类发现父类中的方法无法满足自己的需求时，&lt;strong&gt;子类可以重写一个方法名称、参数列表一样的方法&lt;/strong&gt;去覆盖父类的这个方法，这就是方法重写。&lt;/li&gt;&#xA;&lt;li&gt;注意：方法重写后，方法的访问遵循&lt;strong&gt;就近原则&lt;/strong&gt;。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;方法重写的注意事项&#34;&gt;方法重写的注意事项&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;重写时使用&lt;strong&gt;Override注解&lt;/strong&gt;，他可以指定Java编译器，检查我们方法重写的格式是否正确，代码可读性也会更好。&lt;/li&gt;&#xA;&lt;li&gt;子类重写父类方法时，访问权限必须大于或等于父类该方法的权限（&lt;strong&gt;public &amp;gt; protected &amp;gt; 缺省&lt;/strong&gt;）。&lt;/li&gt;&#xA;&lt;li&gt;重写的方法返回值类型，必须与被重写方法的返回值类型一样，或者范围更小。&lt;/li&gt;&#xA;&lt;li&gt;私有方法、静态方法不能被重写，如果重写会报错。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;方法重写在开发中的常见应用场景&#34;&gt;方法重写在开发中的常见应用场景&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;子类重写Object类的toString()方法，以便返回对象的内容。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;子类中访问其他成员的特点&#34;&gt;子类中访问其他成员的特点&lt;/h2&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;在子类方法中访问其他成员是按照就近原则的。&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;先子类局部范围找。&lt;/li&gt;&#xA;&lt;li&gt;然后子类成员范围找。&lt;/li&gt;&#xA;&lt;li&gt;然后父类成员找&lt;/li&gt;&#xA;&lt;li&gt;然后父类成员范围找，如果父类范围还没有找到则报错。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;如果子父类中，出现了重名的成员，会优先使用子类的，如果此时一定要在子类中使用父类的方法怎么办？&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;可以通过&lt;code&gt;super&lt;/code&gt;关键字，指定访问父类的成员：&lt;code&gt;super.父类成员变量/父类成员方法&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h2 id=&#34;子类构造器的特点&#34;&gt;子类构造器的特点&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;子类的全部构造器，都会先调用父类的构造器，再执行自己。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;子类构造器是如何实现调用父类构造器的&#34;&gt;子类构造器是如何实现调用父类构造器的：&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;默认情况下，子类全部构造器的第一行代码是&lt;code&gt;super();&lt;/code&gt;（写不写都有），他会调用父类的无参数构造器。&lt;/li&gt;&#xA;&lt;li&gt;如果父类没有无参数构造器，我们必须在子类构造器的第一行手写&lt;code&gt;super();&lt;/code&gt;，指定去调用父类的构造器。&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
    <item>
      <title>修复Geyser下基岩版玩家无法在地狱基岩层放置方块</title>
      <link>https://blog.verdant.ee/posts/184/</link>
      <pubDate>Wed, 08 Jan 2025 17:26:00 +0000</pubDate><author>i@glowisle.me (五葉地錦)</author>
      <guid>https://blog.verdant.ee/posts/184/</guid>
      <description>&lt;p&gt;在&lt;code&gt;plugins\Geyser-Spigot\config.yml&lt;/code&gt;中把第160行的&lt;code&gt;above-bedrock-nether-building: false&lt;/code&gt;改为&lt;code&gt;true&lt;/code&gt;，重启服务器，问题解决~&#xA;原理：geyser把下界翻译成了末地，会导致下界天空变成末地的样式，不过可以解决基岩版玩家在地狱基岩层的问题。&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>Spigot服务端控制台中文乱码解决方案</title>
      <link>https://blog.verdant.ee/posts/181/</link>
      <pubDate>Sat, 04 Jan 2025 08:35:00 +0000</pubDate><author>i@glowisle.me (五葉地錦)</author>
      <guid>https://blog.verdant.ee/posts/181/</guid>
      <description>&lt;ol&gt;&#xA;&lt;li&gt;把&lt;code&gt;-Dfile.encoding=UTF-8&lt;/code&gt;加在开服脚本文件的&lt;code&gt;-jar&lt;/code&gt;前即可。&lt;/li&gt;&#xA;&lt;li&gt;在启动脚本第一行加上&lt;code&gt;chcp 65001&lt;/code&gt;&#xA;我的启动脚本如下：&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;chcp &lt;span style=&#34;color:#d699b6&#34;&gt;65001&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;java -Dfile.encoding&lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt;UTF-8 -jar spigot-1.21.jar&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>String的注意事项</title>
      <link>https://blog.verdant.ee/posts/171/</link>
      <pubDate>Thu, 19 Dec 2024 22:28:15 +0000</pubDate><author>i@glowisle.me (五葉地錦)</author>
      <guid>https://blog.verdant.ee/posts/171/</guid>
      <description>&lt;h1 id=&#34;string的注意事项&#34;&gt;String的注意事项&lt;/h1&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;String对象的内容不可改变， 被称为不可变字符串对象。&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;ol start=&#34;2&#34;&gt;&#xA;&lt;li&gt;只要是以“&amp;hellip;”的方式写出的字符串，都会存储到字符串常量池，且相同的字符串只存储一份；&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;但通过new方式创建字符串对象，每new一次都会产生一个新的对象放在堆内存中。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h1 id=&#34;不可变字符串对象&#34;&gt;不可变字符串对象&lt;/h1&gt;&#xA;&lt;p&gt;不可变？它肯定可变啊，比如&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-java&#34; data-lang=&#34;java&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e67e80&#34;&gt;package&lt;/span&gt; string;  &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e67e80&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#e67e80&#34;&gt;class&lt;/span&gt; StringDemo3 {  &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e67e80&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#e67e80&#34;&gt;static&lt;/span&gt; &lt;span style=&#34;color:#dbbc7f&#34;&gt;void&lt;/span&gt; &lt;span style=&#34;color:#b2c98f&#34;&gt;main&lt;/span&gt;(String&lt;span style=&#34;color:#7a8478&#34;&gt;[]&lt;/span&gt; args) {  &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        String name &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;yingyu5658&amp;#34;&lt;/span&gt;;  &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        name &lt;span style=&#34;color:#7a8478&#34;&gt;+=&lt;/span&gt; &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;.me&amp;#34;&lt;/span&gt;;  &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        name &lt;span style=&#34;color:#7a8478&#34;&gt;+=&lt;/span&gt; &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;域名&amp;#34;&lt;/span&gt;;  &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        System.&lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;out&lt;/span&gt;.&lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;println&lt;/span&gt;(name);  &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }  &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;这时候把name打印出来不就是&lt;code&gt;yingyu5658.me域名&lt;/code&gt;了吗？&#xA;&lt;strong&gt;每次试图改变字符串对象实际上是新产生可字符串对象，变量每次都与指向了新的字符串对象，之前字符串对象的内容确实是没有改变的，因此说String的对象都是不可变的。&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;h1 id=&#34;第二点注意事项&#34;&gt;第二点注意事项&lt;/h1&gt;&#xA;&lt;p&gt;示例代码：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-java&#34; data-lang=&#34;java&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e67e80&#34;&gt;package&lt;/span&gt; string;  &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e67e80&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#e67e80&#34;&gt;class&lt;/span&gt; StringDemo3 {  &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e67e80&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#e67e80&#34;&gt;static&lt;/span&gt; &lt;span style=&#34;color:#dbbc7f&#34;&gt;void&lt;/span&gt; &lt;span style=&#34;color:#b2c98f&#34;&gt;main&lt;/span&gt;(String&lt;span style=&#34;color:#7a8478&#34;&gt;[]&lt;/span&gt; args) {  &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        String s1 &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;abc&amp;#34;&lt;/span&gt;;  &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        String s2 &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;abc&amp;#34;&lt;/span&gt;;  &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        System.&lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;out&lt;/span&gt;.&lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;println&lt;/span&gt;(s1 &lt;span style=&#34;color:#7a8478&#34;&gt;==&lt;/span&gt; s2);  &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;//true  &lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }  &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;这里使用双等来判断两个变量的地址是否相同，返回结果为&lt;code&gt;true&lt;/code&gt;,也就是说，地址是相同的。&#xA;原理：上文提到，双引号包裹住的字符串，会被保存到字符串常量池中，&lt;strong&gt;且相同的字符串只存储一份&lt;/strong&gt;。这里我们声明了两个内容为abc的String类型变量。Java是很聪明的，当我们把s2声明，它要存到字符串常量池时，看到内容一样，就不再存了，而是把&lt;strong&gt;s2也指向abc&lt;/strong&gt;，因此s1地址和s2地址是一样的。&lt;/p&gt;&#xA;&lt;h2 id=&#34;new&#34;&gt;new&lt;/h2&gt;&#xA;&lt;p&gt;示例代码：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-java&#34; data-lang=&#34;java&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e67e80&#34;&gt;package&lt;/span&gt; string;  &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e67e80&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#e67e80&#34;&gt;class&lt;/span&gt; StringDemo3 {  &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e67e80&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#e67e80&#34;&gt;static&lt;/span&gt; &lt;span style=&#34;color:#dbbc7f&#34;&gt;void&lt;/span&gt; &lt;span style=&#34;color:#b2c98f&#34;&gt;main&lt;/span&gt;(String&lt;span style=&#34;color:#7a8478&#34;&gt;[]&lt;/span&gt; args) {  &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#dbbc7f&#34;&gt;char&lt;/span&gt;&lt;span style=&#34;color:#7a8478&#34;&gt;[]&lt;/span&gt; chars &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; {&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#39;a&amp;#39;&lt;/span&gt;,&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#39;b&amp;#39;&lt;/span&gt;,&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#39;c&amp;#39;&lt;/span&gt;};  &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;       String a1 &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt;  &lt;span style=&#34;color:#e67e80&#34;&gt;new&lt;/span&gt; String(chars);  &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;       String a2 &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt;  &lt;span style=&#34;color:#e67e80&#34;&gt;new&lt;/span&gt; String(chars);  &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        System.&lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;out&lt;/span&gt;.&lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;println&lt;/span&gt;(a1 &lt;span style=&#34;color:#7a8478&#34;&gt;==&lt;/span&gt; a2);  &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;//false  &lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }  &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;上文提到，每new一次就会创建一个新的对象，所以此时再比较两者地址，返回false，是不同的。&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>面向对象编程总结</title>
      <link>https://blog.verdant.ee/posts/166/</link>
      <pubDate>Wed, 18 Dec 2024 16:30:00 +0000</pubDate><author>i@glowisle.me (五葉地錦)</author>
      <guid>https://blog.verdant.ee/posts/166/</guid>
      <description>&lt;p&gt;面向对象（oop）&lt;/p&gt;&#xA;&lt;h2 id=&#34;面向对象编程的思想面向拿或者找&#34;&gt;面向对象编程的思想：面向。拿或者找。&lt;/h2&gt;&#xA;&lt;p&gt;对象：东西&#xA;面向对象编程：拿东西过来编程&#xA;面向对象：把现实世界中的食物看成一个一个对象来解决问题的。（万物皆 对象）&#xA;面向对象的好处：代码更符合人类的思维习惯。编程更简单。看程序更容易理解（？）&lt;/p&gt;&#xA;&lt;h2 id=&#34;类对象&#34;&gt;类、对象：&lt;/h2&gt;&#xA;&lt;p&gt;类（设计图）：相同事物，共同特征的描述。&#xA;对象：对象是类的具体的实例。&#xA;对象 = 实例&#xA;在Java中必须先定义类，才能得到对象&lt;/p&gt;&#xA;&lt;h2 id=&#34;定义类来创建对象使用&#34;&gt;定义类来创建对象使用&lt;/h2&gt;&#xA;&lt;h3 id=&#34;定义类的格式&#34;&gt;定义类的格式&lt;/h3&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;成员变量（代表属性，一般是名词）：数据类型 名称;&lt;/li&gt;&#xA;&lt;li&gt;成员方法（代表行为，一般是动词）&lt;/li&gt;&#xA;&lt;li&gt;构造器（前面的区域以后再来探索吧）&lt;/li&gt;&#xA;&lt;li&gt;代码块（前面的区域以后再来探索吧）&lt;/li&gt;&#xA;&lt;li&gt;内部类（前面的区域以后再来探索吧）&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h3 id=&#34;类中具体怎么写&#34;&gt;类中具体怎么写：&lt;/h3&gt;&#xA;&lt;p&gt;一般名词定义成成员变量（属性）&#xA;&lt;code&gt;修饰符 数据类型 变量名称 = 初始值&lt;/code&gt;&#xA;成员变量不建议给初始值，它存在默认值。&lt;/p&gt;&#xA;&lt;h3 id=&#34;一般动词定义成方法行为&#34;&gt;一般动词定义成方法（行为）&lt;/h3&gt;&#xA;&lt;h4 id=&#34;创建对象&#34;&gt;创建对象&lt;/h4&gt;&#xA;&lt;p&gt;&lt;code&gt;类名 对象名 = new 构造器();&lt;/code&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;对象使用&#34;&gt;对象使用：&lt;/h3&gt;&#xA;&lt;p&gt;&lt;code&gt;对象名.成员变量&lt;/code&gt;&#xA;&lt;code&gt;对象名.成员方法&lt;/code&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;构造器&#34;&gt;构造器&lt;/h2&gt;&#xA;&lt;pre&gt;&lt;code&gt;&#x9;作用：&#xA;&#x9;&#x9;初始化一个累的对象并且返回这个类的地址。&#xA;&#x9;&#x9;详细格式：修饰符 类名(形参){...}&#xA;&#x9;&#x9;构造器的分类：&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;无参数构造器：初始化一个类的对象，里面的数据都是默认值，并返回地址。&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;有参数构造器：初始化一个类的对象，并返回地址，并且可以同时为对象赋值。&#xA;&#x9;&#x9;构造器如何调用：&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;类名 对象 = new 构造器;&#xA;&#x9;&#x9;注意：任何类写出来，自带无参数构造器&#xA;&#x9;&#x9;&#x9;   但是在这个类中定义了一个有参数构造器了，那么无参数构造器就消失了，此时如果还要使用无参数构造器，必须自己写一个。&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;h2 id=&#34;this关键字&#34;&gt;this关键字&lt;/h2&gt;&#xA;&lt;p&gt;作用：代表了当前对象的地址。可以访问当前对象的成员变量信息和成员方法&lt;/p&gt;&#xA;&lt;h3 id=&#34;具体应用场景&#34;&gt;具体应用场景&lt;/h3&gt;&#xA;&lt;p&gt;可以用在有参数构造器中&#xA;可以用在方法中&lt;/p&gt;&#xA;&lt;h2 id=&#34;封装&#34;&gt;封装&lt;/h2&gt;&#xA;&lt;p&gt;面向对象三大特征：封装、继承、多态。&#xA;封装的基本思想：决定属性和行为归属谁的问题。&lt;/p&gt;&#xA;&lt;h2 id=&#34;如何更好的封装&#34;&gt;如何更好的封装：&lt;/h2&gt;&#xA;&lt;p&gt;成员变量私有化，只能在本类访问。&lt;/p&gt;&#xA;&lt;h4 id=&#34;合理暴露&#34;&gt;合理暴露&lt;/h4&gt;&#xA;&lt;p&gt;提供成套的getter和setter方法暴露取值赋值。&lt;/p&gt;&#xA;&lt;h2 id=&#34;标准javabean&#34;&gt;标准JavaBean&lt;/h2&gt;&#xA;&lt;p&gt;JavaBean是什么：是实体类。&#xA;作用：创建对象，封装数据。&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>记录配置SSL证书</title>
      <link>https://blog.verdant.ee/posts/163/</link>
      <pubDate>Tue, 17 Dec 2024 11:46:07 +0000</pubDate><author>i@glowisle.me (五葉地錦)</author>
      <guid>https://blog.verdant.ee/posts/163/</guid>
      <description>&lt;p&gt;首先你要有一个SSL证书，建议在阿里云购买或者&lt;a href=&#34;https://developer.aliyun.com/article/1595201&#34;&gt;免费申请&lt;/a&gt;，具体过程阿里云这个页面讲的很详细，在此不过多赘述。&lt;/p&gt;&#xA;&lt;h1 id=&#34;配置证书&#34;&gt;配置证书&lt;/h1&gt;&#xA;&lt;p&gt;由于我的nginx安装了ssl模块，直接进入配置证书。&lt;/p&gt;&#xA;&lt;p&gt;解压下载好的证书，然后上传到服务器。位置自己方便找到即可&#xA;我放到了root/card&lt;/p&gt;&#xA;&lt;h1 id=&#34;配置nginxconf&#34;&gt;配置nginx.conf&lt;/h1&gt;&#xA;&lt;p&gt;进入nginx.conf，我的文件位置在&lt;code&gt;/etc/nginx/nginx.conf&lt;/code&gt;,有些可能在&lt;code&gt;/usr/local/nginx/conf&lt;/code&gt;&#xA;编辑模式，启动！&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;http {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    include       mime.types;  # 包含 MIME 类型定义&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    default_type  application/octet-stream;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    sendfile        on;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    keepalive_timeout  65;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    # HTTPS server block&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    server {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        # 监听443端口（HTTPS）&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        listen 443 ssl;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        # 【请修改】您的域名&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        server_name xxx;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        # 启用 SSL (注意: &amp;#34;ssl on;&amp;#34; 已被弃用，直接使用 &amp;#34;listen ... ssl;&amp;#34;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        ssl on;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        # 【请修改】SSL 证书的 PEM 文件路径&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        ssl_certificate  /root/card/www.xxxx.pem;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        # 【请修改】SSL 证书的 KEY 文件路径&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        ssl_certificate_key /root/card/www.xxxx.key;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        location / {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            # 【请修改】代理转发的目标地址和端口（例如公网IP和项目端口号）&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            proxy_pass  http://公网地址:项目端口号;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    # HTTP server block for redirecting to HTTPS&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    server {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        # 监听80端口（HTTP）&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        listen 80;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        # 【请修改】您的域名&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        server_name huiblog.top;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        # 将所有 HTTP 请求永久重定向到 HTTPS&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        rewrite ^(.*)$ https://$host$1 permanent;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h1 id=&#34;重新加载nginx&#34;&gt;重新加载Nginx&lt;/h1&gt;&#xA;&lt;p&gt;&lt;code&gt;sudo systemctl reload nginx&lt;/code&gt;&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>Typecho不要用阿里云系统镜像</title>
      <link>https://blog.verdant.ee/posts/156/</link>
      <pubDate>Sun, 15 Dec 2024 21:45:47 +0000</pubDate><author>i@glowisle.me (五葉地錦)</author>
      <guid>https://blog.verdant.ee/posts/156/</guid>
      <description>&lt;p&gt;不要用阿里云的系统镜像，那个是1.1版本的。。。很多插件都没办法正常用。。。比如这两个插件就会这样&lt;/p&gt;&#xA;&lt;p&gt;&lt;figure class=&#34;image-caption&#34;&gt;&#xA;    &lt;img src=&#34;https://images.glowisle.me/4097191903.webp&#34; alt=&#34;&#34;&gt;&#xA;    &lt;figcaption&gt;&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&lt;/p&gt;&#xA;&lt;p&gt;还有很多主题和插件都犯这样的毛病，在此不多提，我会想办法升级版本的（又挖了个坑）&lt;/p&gt;&#xA;&lt;p&gt;难受&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>Vim基础操作快速入门</title>
      <link>https://blog.verdant.ee/posts/147/</link>
      <pubDate>Fri, 13 Dec 2024 16:13:36 +0000</pubDate><author>i@glowisle.me (五葉地錦)</author>
      <guid>https://blog.verdant.ee/posts/147/</guid>
      <description>&lt;h1 id=&#34;前言&#34;&gt;前言&lt;/h1&gt;&#xA;&lt;p&gt;各种鼠标操作让我有点抓狂，vim或许是一个很适合我的东西，全键盘操作听起来就很方便快捷，除了上手难度有点高以外，vim看起来似乎没有任何的缺点。在下载安装好了vim后，我开始学习了快捷键。&lt;del&gt;然后我们就可以直接把鼠标扔了。&lt;/del&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;记住要先把输入法切换成英文模式&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;h1 id=&#34;普通模式&#34;&gt;普通模式&lt;/h1&gt;&#xA;&lt;h2 id=&#34;退出&#34;&gt;退出&lt;/h2&gt;&#xA;&lt;p&gt;很多人第一次用vim，最难受的事情绝对是不知道怎么退出。&#xA;退出：&lt;code&gt;:q!&lt;/code&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;移动光标&#34;&gt;移动光标&lt;/h2&gt;&#xA;&lt;p&gt;&lt;code&gt;h&lt;/code&gt; &lt;code&gt;j&lt;/code&gt; &lt;code&gt;k&lt;/code&gt; &lt;code&gt;l&lt;/code&gt; 这四个按键分别对应左 下 上 右&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;这个比较难适应，不过也比把手移动到右下方用箭头键舒服了&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h3 id=&#34;大范围移动&#34;&gt;大范围移动&lt;/h3&gt;&#xA;&lt;p&gt;行数 + &lt;code&gt;h&lt;/code&gt;/ &lt;code&gt;j&lt;/code&gt;/ &lt;code&gt;k&lt;/code&gt;/ &lt;code&gt;l&lt;/code&gt;&#xA;比如，想要向下移动三行，就是3&lt;code&gt;j&lt;/code&gt;，向左移动四格，就是3&lt;code&gt;h&lt;/code&gt;&#xA;&lt;code&gt;gg&lt;/code&gt; 跳转到文档的最上方&#xA;&lt;code&gt;G&lt;/code&gt; 跳转到文档的最下方&lt;/p&gt;&#xA;&lt;h3 id=&#34;按照单词跳转&#34;&gt;按照单词跳转&lt;/h3&gt;&#xA;&lt;p&gt;&lt;code&gt;w&lt;/code&gt;，也就是“word”的首字母。就可以跳转到下一个单词的开头。&#xA;&lt;code&gt;b&lt;/code&gt; beginning就跳转到前一个单词的开头&#xA;&lt;code&gt;f&lt;/code&gt; find 查找单词。比如要把光标移动到离你最近的b，就可以输入&lt;code&gt;fb&lt;/code&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;翻页&#34;&gt;翻页&lt;/h3&gt;&#xA;&lt;p&gt;&lt;code&gt;Ctrl + u&lt;/code&gt;向上翻页。u理解为up首字母。&#xA;&lt;code&gt;Ctrl + d&lt;/code&gt;向下翻页。d理解为down首字母。&lt;/p&gt;&#xA;&lt;h2 id=&#34;复制粘贴&#34;&gt;复制粘贴&lt;/h2&gt;&#xA;&lt;p&gt;在普通模式下，输入&lt;code&gt;y&lt;/code&gt; （yank），复制整个单词：&lt;code&gt;yaw&lt;/code&gt; “aw&amp;rsquo;“为&lt;del&gt;阿伟&lt;/del&gt; all word&#xA;&lt;code&gt;p&lt;/code&gt; 即paste，粘贴。&lt;/p&gt;&#xA;&lt;h2 id=&#34;删除&#34;&gt;删除&lt;/h2&gt;&#xA;&lt;p&gt;普通模式下，&lt;code&gt;d&lt;/code&gt; 也就是delete，直接删除当前行和下一行的内容&#xA;还可以跟上文的&lt;code&gt;hjkl&lt;/code&gt;结合起来，比如d8j就是向下删除八行&lt;/p&gt;&#xA;&lt;h2 id=&#34;撤销&#34;&gt;撤销&lt;/h2&gt;&#xA;&lt;p&gt;&lt;code&gt;u&lt;/code&gt; 也就是undo。&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;这些快捷键很灵活，都可以互相结合使用&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h1 id=&#34;输入模式&#34;&gt;输入模式&lt;/h1&gt;&#xA;&lt;h2 id=&#34;进入输入模式&#34;&gt;进入输入模式&lt;/h2&gt;&#xA;&lt;p&gt;在普通模式下，输入&lt;code&gt;i&lt;/code&gt; 也就是insert，就可以进入输入模式了。&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;code&gt;i&lt;/code&gt;是在当前光标的前一个字母开始输入。&lt;/li&gt;&#xA;&lt;li&gt;使用&lt;code&gt;a&lt;/code&gt;也就是append，就可以在当前光标之后输入。&lt;/li&gt;&#xA;&lt;li&gt;使用&lt;code&gt;I&lt;/code&gt;就会从这一行的开头进入输入模式。&lt;/li&gt;&#xA;&lt;li&gt;使用&lt;code&gt;A&lt;/code&gt;就会从这一行的末尾进入输入模式。&#xA;完成编辑后，使用&lt;code&gt;ESC&lt;/code&gt; 就可以退出编辑模式，回到普通模式了。&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h1 id=&#34;命令模式&#34;&gt;命令模式&lt;/h1&gt;&#xA;&lt;p&gt;在普通模式下输入&lt;code&gt;：&lt;/code&gt;就可以进入命令模式，按下&lt;code&gt;ESC&lt;/code&gt;就会退出命令模式。&#xA;在下方的命令行中，可以输入命令&#xA;&lt;code&gt;q&lt;/code&gt;也就是quit就可以退出&#xA;保存&lt;code&gt;w&lt;/code&gt;&#xA;保存并退出&lt;code&gt;wq&lt;/code&gt;&lt;/p&gt;&#xA;&lt;h1 id=&#34;可视模式&#34;&gt;可视模式&lt;/h1&gt;&#xA;&lt;p&gt;普通模式下按下&lt;code&gt;v&lt;/code&gt;就可以进入可视模式。&lt;/p&gt;&#xA;&lt;h1 id=&#34;配置文件&#34;&gt;配置文件&lt;/h1&gt;&#xA;&lt;p&gt;vim中修改键位，安装主题全都是用一个配置文件来完成的。&#xA;原版vim的配置文件叫做.vimrc&#xA;关于修改键位，我的看法是不要改，因为你适应之后上服务器就会很难受，什么都不适应。&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>Java面向对象编程快速入门</title>
      <link>https://blog.verdant.ee/posts/98/</link>
      <pubDate>Sun, 01 Dec 2024 13:05:00 +0000</pubDate><author>i@glowisle.me (五葉地錦)</author>
      <guid>https://blog.verdant.ee/posts/98/</guid>
      <description>&lt;h1 id=&#34;什么是面向对象编程&#34;&gt;什么是面向对象编程&lt;/h1&gt;&#xA;&lt;p&gt;通俗易懂的说，就是把一坨一坨的数据放到一起存储&#xA;比如要存储一个学生的语文成绩和数学成绩&#xA;新建一个类&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-java&#34; data-lang=&#34;java&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e67e80&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#e67e80&#34;&gt;class&lt;/span&gt; Student {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    String name;&lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;//名字&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#dbbc7f&#34;&gt;double&lt;/span&gt; chinese;&lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;//语文成绩&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#dbbc7f&#34;&gt;double&lt;/span&gt; math;&lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;//数学成绩&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e67e80&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#dbbc7f&#34;&gt;void&lt;/span&gt; &lt;span style=&#34;color:#b2c98f&#34;&gt;printTotalScore&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        System.&lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;out&lt;/span&gt;.&lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;println&lt;/span&gt;(name &lt;span style=&#34;color:#7a8478&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;的总成绩是&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#7a8478&#34;&gt;+&lt;/span&gt; (chinese &lt;span style=&#34;color:#7a8478&#34;&gt;+&lt;/span&gt; math));&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e67e80&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#dbbc7f&#34;&gt;void&lt;/span&gt; &lt;span style=&#34;color:#b2c98f&#34;&gt;printAverageScore&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        System.&lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;out&lt;/span&gt;.&lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;println&lt;/span&gt;(name &lt;span style=&#34;color:#7a8478&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;的平均成绩是&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#7a8478&#34;&gt;+&lt;/span&gt; (chinese &lt;span style=&#34;color:#7a8478&#34;&gt;+&lt;/span&gt; math) &lt;span style=&#34;color:#7a8478&#34;&gt;/&lt;/span&gt; 2.&lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;0&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;这样学生的模板就创建好了，但是这个模板还没有指向学生的每一个个体。我们可以再同一个包下再新建一个类。&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-java&#34; data-lang=&#34;java&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e67e80&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#e67e80&#34;&gt;class&lt;/span&gt; Test {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e67e80&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#e67e80&#34;&gt;static&lt;/span&gt; &lt;span style=&#34;color:#dbbc7f&#34;&gt;void&lt;/span&gt; &lt;span style=&#34;color:#b2c98f&#34;&gt;main&lt;/span&gt;(String&lt;span style=&#34;color:#7a8478&#34;&gt;[]&lt;/span&gt; args) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;//1.创建宇哥学生对象来封装学生a的数据&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        Student s1 &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e67e80&#34;&gt;new&lt;/span&gt; Student();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        s1.&lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;name&lt;/span&gt; &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;学生a&amp;#34;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        s1.&lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;chinese&lt;/span&gt; &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; 100;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        s1.&lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;math&lt;/span&gt; &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; 100;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        s1.&lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;printTotalScore&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        s1.&lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;printAverageScore&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;//2.再创建一个学生对象，封装学生b的数据&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        Student s2 &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e67e80&#34;&gt;new&lt;/span&gt; Student();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        s2.&lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;name&lt;/span&gt; &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;学生b&amp;#34;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        s2.&lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;chinese&lt;/span&gt; &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; 100;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        s2.&lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;math&lt;/span&gt; &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; 59;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        s2.&lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;printTotalScore&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        s2.&lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;printAverageScore&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;用以上代码新建一个学生类并且调用我们之前写好的功能&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;开发一个一个的对象，把数据交给对象，再用调用对象的方法来完成对数据的处理，这种方法叫&lt;strong&gt;面向对象编程&lt;/strong&gt;。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;</description>
    </item>
    <item>
      <title>Java方法的传参原理</title>
      <link>https://blog.verdant.ee/posts/95/</link>
      <pubDate>Sat, 30 Nov 2024 20:14:00 +0000</pubDate><author>i@glowisle.me (五葉地錦)</author>
      <guid>https://blog.verdant.ee/posts/95/</guid>
      <description>&lt;h2 id=&#34;java方法的参数传递机制-基本类型&#34;&gt;Java方法的参数传递机制-基本类型&lt;/h2&gt;&#xA;&lt;p&gt;值传递&lt;/p&gt;&#xA;&lt;h3 id=&#34;值传递是什么&#34;&gt;值传递是什么&lt;/h3&gt;&#xA;&lt;p&gt;在传输实参给方法的形参的时候，&lt;strong&gt;传输的是实参变量中存储的副本&lt;/strong&gt;&#xA;说人话，把实参里面的东西赋值了一部分扔了给形参&lt;/p&gt;&#xA;&lt;h2 id=&#34;值传递具体理解案例&#34;&gt;值传递具体理解案例&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-java&#34; data-lang=&#34;java&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e67e80&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#e67e80&#34;&gt;class&lt;/span&gt; prameter {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e67e80&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#e67e80&#34;&gt;static&lt;/span&gt; &lt;span style=&#34;color:#dbbc7f&#34;&gt;void&lt;/span&gt; &lt;span style=&#34;color:#b2c98f&#34;&gt;main&lt;/span&gt;(String&lt;span style=&#34;color:#7a8478&#34;&gt;[]&lt;/span&gt; args) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#dbbc7f&#34;&gt;int&lt;/span&gt; a &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; 10; &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;//定义一个int变量a赋值为10&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        change(a); &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;//调用change方法&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        System.&lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;out&lt;/span&gt;.&lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;println&lt;/span&gt;(&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;main&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#7a8478&#34;&gt;+&lt;/span&gt; a); &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;//打印mian a中的值&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;//这里开始写方法&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e67e80&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#e67e80&#34;&gt;static&lt;/span&gt; &lt;span style=&#34;color:#dbbc7f&#34;&gt;void&lt;/span&gt; &lt;span style=&#34;color:#b2c98f&#34;&gt;change&lt;/span&gt;(&lt;span style=&#34;color:#dbbc7f&#34;&gt;int&lt;/span&gt; a){&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        System.&lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;out&lt;/span&gt;.&lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;println&lt;/span&gt;(&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;change1&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#7a8478&#34;&gt;+&lt;/span&gt; a); &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;//打印方法中a的值&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        a &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; 20;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        System.&lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;out&lt;/span&gt;.&lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;println&lt;/span&gt;(&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;change2&amp;#34;&lt;/span&gt;a); &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;//打印赋值后a的值&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;我们运行以后，控制台输出的结果为&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;change1 10&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;change2 20&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;main 10&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;为什么main中打印的不是赋值后的20&#34;&gt;为什么main中打印的不是赋值后的20？&lt;/h2&gt;&#xA;&lt;p&gt;这就要提到刚才的概念：&lt;strong&gt;值传递&lt;/strong&gt;&#xA;我们定义了一个变量&lt;code&gt;a = 10；&lt;/code&gt;,在方法中&lt;code&gt;public static void change(int a)&lt;/code&gt;&#xA;由于&lt;strong&gt;值传递&lt;/strong&gt;，也就是把值复制了一分传给方法，所以我们方法里用的值永远都是刚刚定义的&lt;code&gt;int a = 10;&lt;/code&gt;，所以&lt;code&gt;change(a); = change(10);&lt;/code&gt;&#xA;我们后面再赋值，打印出来的结果还是10，除非你把变量定义的代码改了，否则方法里的值不会变。&lt;/p&gt;&#xA;&lt;h2 id=&#34;引用类型的参数传递&#34;&gt;引用类型的参数传递&lt;/h2&gt;&#xA;&lt;p&gt;引用类型的参数传递也满足值传递，但代码中会有不同的地方。&#xA;示例代码&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-java&#34; data-lang=&#34;java&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e67e80&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#e67e80&#34;&gt;static&lt;/span&gt; &lt;span style=&#34;color:#dbbc7f&#34;&gt;void&lt;/span&gt; &lt;span style=&#34;color:#b2c98f&#34;&gt;main&lt;/span&gt;(String&lt;span style=&#34;color:#7a8478&#34;&gt;[]&lt;/span&gt; args) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#dbbc7f&#34;&gt;int&lt;/span&gt;&lt;span style=&#34;color:#7a8478&#34;&gt;[]&lt;/span&gt; arrs &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e67e80&#34;&gt;new&lt;/span&gt; &lt;span style=&#34;color:#dbbc7f&#34;&gt;int&lt;/span&gt;&lt;span style=&#34;color:#7a8478&#34;&gt;[]&lt;/span&gt;{10,20,30};&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        change(arrs);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        System.&lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;out&lt;/span&gt;.&lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;println&lt;/span&gt;(&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;main&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#7a8478&#34;&gt;+&lt;/span&gt; arrs&lt;span style=&#34;color:#7a8478&#34;&gt;[&lt;/span&gt;1&lt;span style=&#34;color:#7a8478&#34;&gt;]&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e67e80&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#e67e80&#34;&gt;static&lt;/span&gt; &lt;span style=&#34;color:#dbbc7f&#34;&gt;void&lt;/span&gt; &lt;span style=&#34;color:#b2c98f&#34;&gt;change&lt;/span&gt;(&lt;span style=&#34;color:#dbbc7f&#34;&gt;int&lt;/span&gt;&lt;span style=&#34;color:#7a8478&#34;&gt;[]&lt;/span&gt; arrs) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        System.&lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;out&lt;/span&gt;.&lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;println&lt;/span&gt;(&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;方法内1&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#7a8478&#34;&gt;+&lt;/span&gt; arrs&lt;span style=&#34;color:#7a8478&#34;&gt;[&lt;/span&gt;1&lt;span style=&#34;color:#7a8478&#34;&gt;]&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        arrs&lt;span style=&#34;color:#7a8478&#34;&gt;[&lt;/span&gt;1&lt;span style=&#34;color:#7a8478&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; 222;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        System.&lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;out&lt;/span&gt;.&lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;println&lt;/span&gt;(&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;方法内2&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#7a8478&#34;&gt;+&lt;/span&gt; arrs&lt;span style=&#34;color:#7a8478&#34;&gt;[&lt;/span&gt;1&lt;span style=&#34;color:#7a8478&#34;&gt;]&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;结果：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;方法内1：20&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;方法内2：222&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;main：222&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;上一篇文章提到了栈内存的执行顺序，根据上一篇所讲，代码执行顺序如下:&#xA;1.先执行&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-java&#34; data-lang=&#34;java&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e67e80&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#e67e80&#34;&gt;static&lt;/span&gt; &lt;span style=&#34;color:#dbbc7f&#34;&gt;void&lt;/span&gt; &lt;span style=&#34;color:#b2c98f&#34;&gt;change&lt;/span&gt;(&lt;span style=&#34;color:#dbbc7f&#34;&gt;int&lt;/span&gt;&lt;span style=&#34;color:#7a8478&#34;&gt;[]&lt;/span&gt; arrs) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        System.&lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;out&lt;/span&gt;.&lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;println&lt;/span&gt;(&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;方法内1&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#7a8478&#34;&gt;+&lt;/span&gt; arrs&lt;span style=&#34;color:#7a8478&#34;&gt;[&lt;/span&gt;1&lt;span style=&#34;color:#7a8478&#34;&gt;]&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        arrs&lt;span style=&#34;color:#7a8478&#34;&gt;[&lt;/span&gt;1&lt;span style=&#34;color:#7a8478&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; 222;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        System.&lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;out&lt;/span&gt;.&lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;println&lt;/span&gt;(&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;方法内2&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#7a8478&#34;&gt;+&lt;/span&gt; arrs&lt;span style=&#34;color:#7a8478&#34;&gt;[&lt;/span&gt;1&lt;span style=&#34;color:#7a8478&#34;&gt;]&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;2.再回到main方法&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-java&#34; data-lang=&#34;java&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        System.&lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;out&lt;/span&gt;.&lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;println&lt;/span&gt;(&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;main&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#7a8478&#34;&gt;+&lt;/span&gt; arrs&lt;span style=&#34;color:#7a8478&#34;&gt;[&lt;/span&gt;1&lt;span style=&#34;color:#7a8478&#34;&gt;]&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;在1时进行打印，结果得到数组内第二个位置存储的20.&#xA;代码继续向下执行，第二个位置被赋值为222，此时再打印它，结果得到222.&#xA;这时候change方法执行完，它在栈内存中会被清除，然后回到main方法，由于刚才change方法中对arr[1]进行了赋值，所以我们再打印，结果得到的还是它赋值出来的222.&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>Java小程序之两数计算器</title>
      <link>https://blog.verdant.ee/posts/90/</link>
      <pubDate>Sat, 30 Nov 2024 18:51:07 +0000</pubDate><author>i@glowisle.me (五葉地錦)</author>
      <guid>https://blog.verdant.ee/posts/90/</guid>
      <description>&lt;p&gt;这个案例是我练习方法的使用时做的，应该能有更好的方式实现这个功能。&#xA;代码如下&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-java&#34; data-lang=&#34;java&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e67e80&#34;&gt;import&lt;/span&gt; org.w3c.dom.ls.LSOutput;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e67e80&#34;&gt;import&lt;/span&gt; java.util.Scanner;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e67e80&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#e67e80&#34;&gt;class&lt;/span&gt; Basic {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e67e80&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#e67e80&#34;&gt;static&lt;/span&gt; &lt;span style=&#34;color:#dbbc7f&#34;&gt;void&lt;/span&gt; &lt;span style=&#34;color:#b2c98f&#34;&gt;main&lt;/span&gt;(String&lt;span style=&#34;color:#7a8478&#34;&gt;[]&lt;/span&gt; args) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#e67e80&#34;&gt;for&lt;/span&gt; (; ; ) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            System.&lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;out&lt;/span&gt;.&lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;println&lt;/span&gt;(&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;欢迎使用！&amp;#34;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            System.&lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;out&lt;/span&gt;.&lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;println&lt;/span&gt;(&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;按键1 2 3 4分别为加 减 乘 除，输入后请回车&amp;#34;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            Scanner startSc &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e67e80&#34;&gt;new&lt;/span&gt; Scanner(System.&lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;in&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#dbbc7f&#34;&gt;int&lt;/span&gt; selectNumber &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; startSc.&lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;nextInt&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#e67e80&#34;&gt;if&lt;/span&gt;(selectNumber &lt;span style=&#34;color:#7a8478&#34;&gt;&amp;gt;&lt;/span&gt;4) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                System.&lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;out&lt;/span&gt;.&lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;println&lt;/span&gt;(&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;请输入正确的数字以选择！&amp;#34;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;//以下为加法&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#e67e80&#34;&gt;if&lt;/span&gt; (selectNumber &lt;span style=&#34;color:#7a8478&#34;&gt;==&lt;/span&gt; 1) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                System.&lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;out&lt;/span&gt;.&lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;println&lt;/span&gt;(&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;请输入您要计算的第一个数字&amp;#34;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                Scanner jiafaSc &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e67e80&#34;&gt;new&lt;/span&gt; Scanner(System.&lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;in&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#dbbc7f&#34;&gt;int&lt;/span&gt; jiafa1 &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; jiafaSc.&lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;nextInt&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                System.&lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;out&lt;/span&gt;.&lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;println&lt;/span&gt;(&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;请输入您要计算的第二个数字&amp;#34;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#dbbc7f&#34;&gt;int&lt;/span&gt; jiafa2 &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; jiafaSc.&lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;nextInt&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                jiafa(jiafa1, jiafa2);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;//以下为减法&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#e67e80&#34;&gt;if&lt;/span&gt; (selectNumber &lt;span style=&#34;color:#7a8478&#34;&gt;==&lt;/span&gt; 2) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                System.&lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;out&lt;/span&gt;.&lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;println&lt;/span&gt;(&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;请输入您要计算的第一个数字&amp;#34;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                Scanner jianfaSc &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e67e80&#34;&gt;new&lt;/span&gt; Scanner(System.&lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;in&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#dbbc7f&#34;&gt;int&lt;/span&gt; jianfa1 &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; jianfaSc.&lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;nextInt&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                System.&lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;out&lt;/span&gt;.&lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;println&lt;/span&gt;(&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;请输入您要计算的第二个数字&amp;#34;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#dbbc7f&#34;&gt;int&lt;/span&gt; jianfa2 &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; jianfaSc.&lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;nextInt&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                jianfa(jianfa1, jianfa2);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;//以下为乘法&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#e67e80&#34;&gt;if&lt;/span&gt; (selectNumber &lt;span style=&#34;color:#7a8478&#34;&gt;==&lt;/span&gt; 3) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                System.&lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;out&lt;/span&gt;.&lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;println&lt;/span&gt;(&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;请输入您要计算的第一个数字&amp;#34;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                Scanner chengfaSc &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e67e80&#34;&gt;new&lt;/span&gt; Scanner(System.&lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;in&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#dbbc7f&#34;&gt;int&lt;/span&gt; chengfa1 &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; chengfaSc.&lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;nextInt&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                System.&lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;out&lt;/span&gt;.&lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;println&lt;/span&gt;(&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;请输入您要计算的第二个数字&amp;#34;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#dbbc7f&#34;&gt;int&lt;/span&gt; chengfa2 &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; chengfaSc.&lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;nextInt&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                chengfa(chengfa1, chengfa2);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#e67e80&#34;&gt;if&lt;/span&gt; (selectNumber &lt;span style=&#34;color:#7a8478&#34;&gt;==&lt;/span&gt; 4) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                System.&lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;out&lt;/span&gt;.&lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;println&lt;/span&gt;(&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;请输入您要计算的第一个数字&amp;#34;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                Scanner chufaSc &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e67e80&#34;&gt;new&lt;/span&gt; Scanner(System.&lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;in&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#dbbc7f&#34;&gt;int&lt;/span&gt; chufa1 &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; chufaSc.&lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;nextInt&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                System.&lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;out&lt;/span&gt;.&lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;println&lt;/span&gt;(&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;请输入您要计算的第二个数字&amp;#34;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#dbbc7f&#34;&gt;int&lt;/span&gt; chufa2 &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; chufaSc.&lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;nextInt&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                chufa(chufa1, chufa2);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            System.&lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;out&lt;/span&gt;.&lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;println&lt;/span&gt;(&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;-----------------------------------------&amp;#34;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;//加减乘除各项功能的方法，上面直接调用&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e67e80&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#e67e80&#34;&gt;static&lt;/span&gt; &lt;span style=&#34;color:#dbbc7f&#34;&gt;int&lt;/span&gt; &lt;span style=&#34;color:#b2c98f&#34;&gt;jiafa&lt;/span&gt;(&lt;span style=&#34;color:#dbbc7f&#34;&gt;int&lt;/span&gt; a, &lt;span style=&#34;color:#dbbc7f&#34;&gt;int&lt;/span&gt; b) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#dbbc7f&#34;&gt;int&lt;/span&gt; jieguo &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; a &lt;span style=&#34;color:#7a8478&#34;&gt;+&lt;/span&gt; b;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        System.&lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;out&lt;/span&gt;.&lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;println&lt;/span&gt;(jieguo);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#e67e80&#34;&gt;return&lt;/span&gt; a &lt;span style=&#34;color:#7a8478&#34;&gt;+&lt;/span&gt; b;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e67e80&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#e67e80&#34;&gt;static&lt;/span&gt; &lt;span style=&#34;color:#dbbc7f&#34;&gt;int&lt;/span&gt; &lt;span style=&#34;color:#b2c98f&#34;&gt;jianfa&lt;/span&gt;(&lt;span style=&#34;color:#dbbc7f&#34;&gt;int&lt;/span&gt; a, &lt;span style=&#34;color:#dbbc7f&#34;&gt;int&lt;/span&gt; b) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#dbbc7f&#34;&gt;int&lt;/span&gt; jieguo &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; a &lt;span style=&#34;color:#7a8478&#34;&gt;-&lt;/span&gt; b;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        System.&lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;out&lt;/span&gt;.&lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;println&lt;/span&gt;(jieguo);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#e67e80&#34;&gt;return&lt;/span&gt; a &lt;span style=&#34;color:#7a8478&#34;&gt;-&lt;/span&gt; b;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e67e80&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#e67e80&#34;&gt;static&lt;/span&gt; &lt;span style=&#34;color:#dbbc7f&#34;&gt;int&lt;/span&gt; &lt;span style=&#34;color:#b2c98f&#34;&gt;chengfa&lt;/span&gt;(&lt;span style=&#34;color:#dbbc7f&#34;&gt;int&lt;/span&gt; a, &lt;span style=&#34;color:#dbbc7f&#34;&gt;int&lt;/span&gt; b) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#dbbc7f&#34;&gt;int&lt;/span&gt; jieguo &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; a &lt;span style=&#34;color:#7a8478&#34;&gt;*&lt;/span&gt; b;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        System.&lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;out&lt;/span&gt;.&lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;println&lt;/span&gt;(jieguo);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#e67e80&#34;&gt;return&lt;/span&gt; a &lt;span style=&#34;color:#7a8478&#34;&gt;*&lt;/span&gt; b;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e67e80&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#e67e80&#34;&gt;static&lt;/span&gt; &lt;span style=&#34;color:#dbbc7f&#34;&gt;int&lt;/span&gt; &lt;span style=&#34;color:#b2c98f&#34;&gt;chufa&lt;/span&gt;(&lt;span style=&#34;color:#dbbc7f&#34;&gt;int&lt;/span&gt; a, &lt;span style=&#34;color:#dbbc7f&#34;&gt;int&lt;/span&gt; b) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#dbbc7f&#34;&gt;int&lt;/span&gt; jieguo &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; a &lt;span style=&#34;color:#7a8478&#34;&gt;/&lt;/span&gt; b;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        System.&lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;out&lt;/span&gt;.&lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;println&lt;/span&gt;(jieguo);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#e67e80&#34;&gt;return&lt;/span&gt; a &lt;span style=&#34;color:#7a8478&#34;&gt;/&lt;/span&gt; b;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>Java方法的基本使用</title>
      <link>https://blog.verdant.ee/posts/89/</link>
      <pubDate>Fri, 29 Nov 2024 20:45:20 +0800</pubDate><author>i@glowisle.me (五葉地錦)</author>
      <guid>https://blog.verdant.ee/posts/89/</guid>
      <description>&lt;h1 id=&#34;方法是什么&#34;&gt;方法是什么&lt;/h1&gt;&#xA;&lt;p&gt;方法是一种语法结构，它可以把代码封装成一段功能，以便重复调用。&lt;/p&gt;&#xA;&lt;p&gt;方法的完整格式：&lt;/p&gt;&#xA;&lt;p&gt;例子：数字求和&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-java&#34; data-lang=&#34;java&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e67e80&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#e67e80&#34;&gt;static&lt;/span&gt;  &lt;span style=&#34;color:#dbbc7f&#34;&gt;int&lt;/span&gt; &lt;span style=&#34;color:#b2c98f&#34;&gt;sum&lt;/span&gt;(&lt;span style=&#34;color:#dbbc7f&#34;&gt;int&lt;/span&gt; a,&lt;span style=&#34;color:#dbbc7f&#34;&gt;int&lt;/span&gt; b){&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#dbbc7f&#34;&gt;int&lt;/span&gt; c &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; a &lt;span style=&#34;color:#7a8478&#34;&gt;+&lt;/span&gt; b;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#e67e80&#34;&gt;return&lt;/span&gt; c;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;方法的调用：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-java&#34; data-lang=&#34;java&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;       &lt;span style=&#34;color:#dbbc7f&#34;&gt;int&lt;/span&gt; rs&lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; sum(10,20);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;方法使用的注意点&#34;&gt;方法使用的注意点：&lt;/h2&gt;&#xA;&lt;p&gt;方法申明了具体的返回值类型，内部必须使用return返回对应类型的数据。&lt;/p&gt;&#xA;&lt;p&gt;形参列表可以有多个，甚至可没有；如果有多个形参，必须用英文逗号隔开，且不能给初始化值&lt;/p&gt;&#xA;&lt;h2 id=&#34;使用方法的好处&#34;&gt;使用方法的好处&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;提高代码的复用性，提高了开发效率&lt;/li&gt;&#xA;&lt;li&gt;让程序逻辑性更清晰&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;方法的其他定义形式&#34;&gt;方法的其他定义形式&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-java&#34; data-lang=&#34;java&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e67e80&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#e67e80&#34;&gt;static&lt;/span&gt; &lt;span style=&#34;color:#dbbc7f&#34;&gt;void&lt;/span&gt; &lt;span style=&#34;color:#b2c98f&#34;&gt;printHelloWorld&lt;/span&gt;(&lt;span style=&#34;color:#dbbc7f&#34;&gt;int&lt;/span&gt; n) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#e67e80&#34;&gt;for&lt;/span&gt; (&lt;span style=&#34;color:#dbbc7f&#34;&gt;int&lt;/span&gt; i &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; 1; i &lt;span style=&#34;color:#7a8478&#34;&gt;&amp;lt;=&lt;/span&gt;n; i&lt;span style=&#34;color:#7a8478&#34;&gt;++&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            System.&lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;out&lt;/span&gt;.&lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;println&lt;/span&gt;(&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;Hello World&amp;#34;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;//打印三行helloworld（使用方法）&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;&#xA;&lt;li&gt;如果方法不需要返回数据，返回类型必须申明成&lt;code&gt;void&lt;/code&gt;此时方法内部可以不使用return返回数据。&lt;/li&gt;&#xA;&lt;li&gt;方法如果不需要接收数据，则不需要定义形参，调用方法时也不可以传数据给方法了。&lt;/li&gt;&#xA;&lt;li&gt;没有参数，且没有返回类型（void）申明的方法，称为&lt;strong&gt;无参数、无返回值的方法&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;</description>
    </item>
    <item>
      <title>网站迁移</title>
      <link>https://blog.verdant.ee/posts/6/</link>
      <pubDate>Thu, 21 Nov 2024 22:59:00 +0000</pubDate><author>i@glowisle.me (五葉地錦)</author>
      <guid>https://blog.verdant.ee/posts/6/</guid>
      <description>&lt;p&gt;原网站&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;yingyu5658.github.io&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;将会迁移到这里。我会把有价值的文章转过来&#xA;原因仅仅是gmeek有点太简陋了，虽然typecho也差不多，不过他可以折腾一下主题之类的，并且我每个月还多花出去九十大洋。但是总比gmeek逼格高点吧。&#xA;不得不说，Linux绝对是世界上最麻烦的玩意，解压下载文件都费劲。要不是Windows资源占用多我绝对不会去用这玩意。&#xA;这次可是孤军奋战，背后没有github服务器的靠山了。要是忘了续费服务器我会丢失所有的文章，又是一个负担和一个纠结的点&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;2025.8.24二编：Gmeek简直太符合博客的定位了，不花里胡哨，完全够用，有网就能写文章&amp;hellip;&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;Linux太好用了，目前Debian12养老中。&lt;/p&gt;&#xA;&lt;p&gt;回看以前的自己实在是蠢。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</description>
    </item>
    <item>
      <title>我的4k进步史</title>
      <link>https://blog.verdant.ee/posts/4/</link>
      <pubDate>Wed, 13 Nov 2024 03:41:00 +0800</pubDate><author>i@glowisle.me (五葉地錦)</author>
      <guid>https://blog.verdant.ee/posts/4/</guid>
      <description>&lt;p&gt;截止到目前玩4k也有一年多了，整理一下我的进步历程，给迷茫中的各位一点参考&lt;/p&gt;&#xA;&lt;h1 id=&#34;常规段&#34;&gt;常规段&lt;/h1&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;2023.5.20 一个别人在和女人亲亲抱抱的日子，我孤身一人在玩4k并且pass掉0dan，开启了漫长的4k之路&amp;hellip;&amp;hellip;&lt;/li&gt;&#xA;&lt;li&gt;2023.6.4 Regular 1 pass&lt;/li&gt;&#xA;&lt;li&gt;2023.6.22 Regular 2 pass&lt;/li&gt;&#xA;&lt;li&gt;2023.6.25 Regular 3 pass&lt;/li&gt;&#xA;&lt;li&gt;2023.7.26 Regular 4 pass&lt;/li&gt;&#xA;&lt;li&gt;2023.8.22 Regular 5 pass&lt;/li&gt;&#xA;&lt;li&gt;2023.11.24 Regular 6 pass&lt;/li&gt;&#xA;&lt;li&gt;2023.11.24 Regular 7 pass&lt;/li&gt;&#xA;&lt;li&gt;2023.11.27 Regular 8 pass&lt;/li&gt;&#xA;&lt;li&gt;2023.11.28 Regular 9 pass&lt;/li&gt;&#xA;&lt;li&gt;2023.11.28 Regular 10pass 常规段毕业！！！&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h1 id=&#34;extra与字母段&#34;&gt;Extra与字母段&lt;/h1&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;2023.12.02 Extra-2 Jack pass（神秘4k常数9638）&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;貌似淡坑了一段时间&amp;hellip;&amp;hellip;..&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;2024.9.15 α Jack 96.21&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;（Ma侧c判与om的od9天差地别，故不写pass，成绩仅供参考。后文中不予注释）&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;2024.9.22 Extra-4 Jack pass (v2)&lt;/li&gt;&#xA;&lt;li&gt;2024.9.22 Extra-5 Jack pass (Sample)&lt;/li&gt;&#xA;&lt;li&gt;2024.9.28 Extra-3 Jack pass&lt;/li&gt;&#xA;&lt;li&gt;2024.9.30 β Jack 96.29&lt;/li&gt;&#xA;&lt;li&gt;2024.10.7 Extra-2 pass&lt;/li&gt;&#xA;&lt;li&gt;2024.10.14 Extra-3 Stream pass(v2)&lt;/li&gt;&#xA;&lt;li&gt;2024.10.19 Extra-4 Technical pass(v2)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;这玩意其实就是叠，要不我也过不掉&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;2024.10.19 γ Jack 96.33&lt;/li&gt;&#xA;&lt;li&gt;2024.11.18 Extra-5 Jack pass(v3)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;我认为此时叠力才算真正e5&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;未完待续&amp;hellip;&amp;hellip;.&lt;/p&gt;&#xA;</description>
    </item>
  </channel>
</rss>
