<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>fly6022&#39;s Blog</title>
  
  
  <link href="https://blog.kuri.ink/atom.xml" rel="self"/>
  
  <link href="https://blog.kuri.ink/"/>
  <updated>2025-11-01T09:23:28.516Z</updated>
  <id>https://blog.kuri.ink/</id>
  
  <author>
    <name>fly6022</name>
    
  </author>
  
  <generator uri="https://hexo.io/">Hexo</generator>
  
  <entry>
    <title>树莓派：利用ddns-go配置DDNS实现IPv6公网域名访问</title>
    <link href="https://blog.kuri.ink/posts/%E6%A0%91%E8%8E%93%E6%B4%BE%EF%BC%9A%E5%88%A9%E7%94%A8ddns-go%E9%85%8D%E7%BD%AEDDNS%E5%AE%9E%E7%8E%B0IPv6%E5%85%AC%E7%BD%91%E5%9F%9F%E5%90%8D%E8%AE%BF%E9%97%AE/"/>
    <id>https://blog.kuri.ink/posts/%E6%A0%91%E8%8E%93%E6%B4%BE%EF%BC%9A%E5%88%A9%E7%94%A8ddns-go%E9%85%8D%E7%BD%AEDDNS%E5%AE%9E%E7%8E%B0IPv6%E5%85%AC%E7%BD%91%E5%9F%9F%E5%90%8D%E8%AE%BF%E9%97%AE/</id>
    <published>2025-08-29T11:19:36.000Z</published>
    <updated>2025-11-01T09:23:28.516Z</updated>
    
    <content type="html"><![CDATA[<p>本文章以树莓派为例，利用ddns-go配置DDNS实现IPv6公网域名访问。</p><span id="more"></span><h2 id="环境">环境</h2><p>设备：Raspberry Pi 4B（4GB RAM）</p><p>系统：Ubuntu 24.04.3 LTS（arm64）</p><h2 id="你还需要">你还需要</h2><ul class="lvl-0"><li class="lvl-2"><p>个人域名</p></li><li class="lvl-2"><p>支持IPv6的网络</p></li></ul><h2 id="安装Go环境">安装Go环境</h2><p>打开命令行，键入:</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><code class="hljs shell">sudo su<br>sudo add-apt-repository ppa:longsleep/golang-backports<br>apt update<br>apt-get install golang-go<br></code></pre></td></tr></table></figure><figure class="highlight vim"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs vim"><span class="hljs-keyword">go</span> <span class="hljs-keyword">version</span><br></code></pre></td></tr></table></figure><p>若返回信息为以下内容，则安装成功：</p><figure class="highlight apache"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs apache"><span class="hljs-attribute">go</span> version go <span class="hljs-number">1</span>.<span class="hljs-number">24</span>.<span class="hljs-number">6</span> linux/arm64<br></code></pre></td></tr></table></figure><p>到<code>/etc/apt/sources.list.d</code>修改go的list文件：</p><p><code>url</code>参数更改为<code>https://launchpad.proxy.ustclug.org/longsleep/golang-backports/ubuntu</code></p><p>配置GOPROXY代理：</p><figure class="highlight routeros"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs routeros">go env -w <span class="hljs-attribute">GO111MODULE</span>=on<br>go env -w <span class="hljs-attribute">GOPROXY</span>=https://goproxy.cn,direct<br></code></pre></td></tr></table></figure><h2 id="拷贝ddns-go源码">拷贝ddns-go源码</h2><figure class="highlight awk"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs awk">git clone https:<span class="hljs-regexp">//gi</span>thub.com<span class="hljs-regexp">/jeessy2/</span>ddns-go.git<br></code></pre></td></tr></table></figure><h2 id="编译ddns-go源码">编译ddns-go源码</h2><figure class="highlight vim"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs vim"><span class="hljs-keyword">cd</span> ddns-<span class="hljs-keyword">go</span><br><span class="hljs-keyword">go</span> build<br></code></pre></td></tr></table></figure><h2 id="配置ddns-go">配置ddns-go</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">./ddns-go<br></code></pre></td></tr></table></figure><p>在浏览器输入<code>localhost:9876</code>，进入后台。</p><div class="admonition warning"><p class="admonition-title">WARNING</p><p>ddns-go初始配置需要在5分钟之内完成，否则配置不能保存。</p></div><p>配置时，需要DNS平台的token，这里以Cloudflare为例进行配置。</p><p>在浏览器地址栏键入 <code>https://dash.cloudflare.com/profile/api-tokens</code>.</p><p><img data-fancybox="gallery" data-sizes="auto" data-src="https://imageurl.kuri.ink/images/posts/ddns/2.png" alt="img" class="lazyload"></p><p>点击&quot;创建令牌&quot;→“编辑区域DNS（使用模板）”</p><p><img data-fancybox="gallery" data-sizes="auto" data-src="https://imageurl.kuri.ink/images/posts/ddns/3.png" alt="img" class="lazyload"></p><p>配置后点击&quot;继续以显示摘要&quot;→创建令牌。</p><p>将生成的令牌粘贴到ddns-go后台中。</p><p><img data-fancybox="gallery" data-sizes="auto" data-src="https://imageurl.kuri.ink/images/posts/ddns/4.png" alt="img" class="lazyload"></p><p>在IPv6的“Domains”一栏中添加好自己的域名，保存即可。</p><p>等待5分钟左右，即可通过域名从公网访问内容。</p><h2 id="设置ddns-go开机自启动">设置ddns-go开机自启动</h2><p>以下两种方法选择其一即可：</p><h3 id="自带命令设置">自带命令设置</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">./ddns-go -s install<br></code></pre></td></tr></table></figure><h3 id="手动设置">手动设置</h3><p>新建服务文件：</p><figure class="highlight awk"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs awk">nano <span class="hljs-regexp">/etc/</span>systemd<span class="hljs-regexp">/system/</span>ddns-go.service<br></code></pre></td></tr></table></figure><p>向文件写入以下内容：</p><figure class="highlight ini"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br></pre></td><td class="code"><pre><code class="hljs ini"><span class="hljs-section">[Unit]</span><br><span class="hljs-attr">Description</span>=Simple and easy to use DDNS. Automatically update domain name resolution to public IP.<br><span class="hljs-attr">ConditionFileIsExecutable</span>=&#123;ddns-go路径&#125;<br><br><span class="hljs-attr">Requires</span>=network.target<br><span class="hljs-attr">After</span>=network-<span class="hljs-literal">on</span>line.target<br><br><span class="hljs-section">[Service]</span><br><span class="hljs-attr">StartLimitInterval</span>=<span class="hljs-number">5</span><br><span class="hljs-attr">StartLimitBurst</span>=<span class="hljs-number">10</span><br><span class="hljs-attr">ExecStart</span>=&#123;ddns-go路径&#125; <span class="hljs-string">&quot;-l&quot;</span> <span class="hljs-string">&quot;:9876&quot;</span> <span class="hljs-string">&quot;-f&quot;</span> <span class="hljs-string">&quot;300&quot;</span> <span class="hljs-string">&quot;-cacheTimes&quot;</span> <span class="hljs-string">&quot;5&quot;</span> <span class="hljs-string">&quot;-c&quot;</span> <span class="hljs-string">&quot;/root/.ddns_go_co&gt;</span><br><span class="hljs-string"></span><br><span class="hljs-string">Restart=always</span><br><span class="hljs-string"></span><br><span class="hljs-string">RestartSec=120</span><br><span class="hljs-string">EnvironmentFile=-/etc/sysconfig/ddns-go</span><br><span class="hljs-string"></span><br><span class="hljs-string">[Install]</span><br><span class="hljs-string">WantedBy=multi-user.target</span><br></code></pre></td></tr></table></figure><p>保存并关闭。</p><figure class="highlight nsis"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><code class="hljs nsis"><span class="hljs-comment"># 重载</span><br><span class="hljs-params">system</span>ctl daemon-reload<br><span class="hljs-comment"># 启动</span><br><span class="hljs-params">system</span>ctl start ddns-go.service<br><span class="hljs-comment"># 开机启动</span><br><span class="hljs-params">system</span>ctl enable ddns-go.service<br></code></pre></td></tr></table></figure><p>至此，已经完成树莓派的IPv6公网域名访问配置。</p>]]></content>
    
    
    <summary type="html">&lt;p&gt;本文章以树莓派为例，利用ddns-go配置DDNS实现IPv6公网域名访问。&lt;/p&gt;</summary>
    
    
    
    <category term="随便写写" scheme="https://blog.kuri.ink/categories/%E9%9A%8F%E4%BE%BF%E5%86%99%E5%86%99/"/>
    
    
    <category term="IPv6" scheme="https://blog.kuri.ink/tags/IPv6/"/>
    
    <category term="DDNS" scheme="https://blog.kuri.ink/tags/DDNS/"/>
    
    <category term="树莓派" scheme="https://blog.kuri.ink/tags/%E6%A0%91%E8%8E%93%E6%B4%BE/"/>
    
    <category term="ddns-go" scheme="https://blog.kuri.ink/tags/ddns-go/"/>
    
    <category term="内网穿透" scheme="https://blog.kuri.ink/tags/%E5%86%85%E7%BD%91%E7%A9%BF%E9%80%8F/"/>
    
    <category term="Cloudflare" scheme="https://blog.kuri.ink/tags/Cloudflare/"/>
    
  </entry>
  
  <entry>
    <title>Windows：通过TermsrvPatcher实现多账户同时远程登录</title>
    <link href="https://blog.kuri.ink/posts/Windows%EF%BC%9A%E9%80%9A%E8%BF%87TermsrvPatcher%E5%AE%9E%E7%8E%B0%E5%A4%9A%E8%B4%A6%E6%88%B7%E5%90%8C%E6%97%B6%E8%BF%9C%E7%A8%8B%E7%99%BB%E5%BD%95/"/>
    <id>https://blog.kuri.ink/posts/Windows%EF%BC%9A%E9%80%9A%E8%BF%87TermsrvPatcher%E5%AE%9E%E7%8E%B0%E5%A4%9A%E8%B4%A6%E6%88%B7%E5%90%8C%E6%97%B6%E8%BF%9C%E7%A8%8B%E7%99%BB%E5%BD%95/</id>
    <published>2025-08-17T08:36:00.000Z</published>
    <updated>2025-08-17T08:48:37.466Z</updated>
    
    <content type="html"><![CDATA[<p>TermsrvPatcher 是一个在 Github 上开源的项目，通过该项目可以实现非服务器版 Windows 系统多账户同时远程登录。</p><span id="more"></span><div class="admonition info"><p class="admonition-title">info</p><p>项目名称：TermsrvPatcher<br>项目地址：https://github.com/fabianosrc/TermsrvPatcher<br>项目作者：fabianosrc<br>开源协议：MIT</p></div><p>保存以下代码为<code>termsrvPatcher.ps1</code>文件，使用“PowerShell（管理员）”运行，重启计算机即可。(支持Windows 11 24H2系统)</p><figure class="highlight powershell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br><span class="line">102</span><br><span class="line">103</span><br><span class="line">104</span><br><span class="line">105</span><br><span class="line">106</span><br><span class="line">107</span><br><span class="line">108</span><br><span class="line">109</span><br><span class="line">110</span><br><span class="line">111</span><br><span class="line">112</span><br><span class="line">113</span><br><span class="line">114</span><br><span class="line">115</span><br><span class="line">116</span><br><span class="line">117</span><br><span class="line">118</span><br><span class="line">119</span><br><span class="line">120</span><br><span class="line">121</span><br><span class="line">122</span><br><span class="line">123</span><br><span class="line">124</span><br><span class="line">125</span><br><span class="line">126</span><br><span class="line">127</span><br><span class="line">128</span><br><span class="line">129</span><br><span class="line">130</span><br><span class="line">131</span><br><span class="line">132</span><br><span class="line">133</span><br><span class="line">134</span><br><span class="line">135</span><br><span class="line">136</span><br><span class="line">137</span><br><span class="line">138</span><br><span class="line">139</span><br><span class="line">140</span><br><span class="line">141</span><br><span class="line">142</span><br><span class="line">143</span><br><span class="line">144</span><br><span class="line">145</span><br><span class="line">146</span><br><span class="line">147</span><br><span class="line">148</span><br><span class="line">149</span><br><span class="line">150</span><br><span class="line">151</span><br><span class="line">152</span><br><span class="line">153</span><br><span class="line">154</span><br><span class="line">155</span><br><span class="line">156</span><br><span class="line">157</span><br><span class="line">158</span><br><span class="line">159</span><br><span class="line">160</span><br><span class="line">161</span><br><span class="line">162</span><br><span class="line">163</span><br><span class="line">164</span><br><span class="line">165</span><br><span class="line">166</span><br><span class="line">167</span><br><span class="line">168</span><br><span class="line">169</span><br><span class="line">170</span><br><span class="line">171</span><br><span class="line">172</span><br><span class="line">173</span><br><span class="line">174</span><br><span class="line">175</span><br><span class="line">176</span><br><span class="line">177</span><br><span class="line">178</span><br><span class="line">179</span><br><span class="line">180</span><br><span class="line">181</span><br><span class="line">182</span><br><span class="line">183</span><br><span class="line">184</span><br><span class="line">185</span><br><span class="line">186</span><br><span class="line">187</span><br><span class="line">188</span><br><span class="line">189</span><br><span class="line">190</span><br><span class="line">191</span><br><span class="line">192</span><br><span class="line">193</span><br><span class="line">194</span><br><span class="line">195</span><br><span class="line">196</span><br><span class="line">197</span><br><span class="line">198</span><br><span class="line">199</span><br><span class="line">200</span><br><span class="line">201</span><br><span class="line">202</span><br><span class="line">203</span><br><span class="line">204</span><br><span class="line">205</span><br><span class="line">206</span><br><span class="line">207</span><br><span class="line">208</span><br><span class="line">209</span><br><span class="line">210</span><br><span class="line">211</span><br><span class="line">212</span><br><span class="line">213</span><br><span class="line">214</span><br><span class="line">215</span><br><span class="line">216</span><br><span class="line">217</span><br><span class="line">218</span><br><span class="line">219</span><br><span class="line">220</span><br><span class="line">221</span><br><span class="line">222</span><br><span class="line">223</span><br><span class="line">224</span><br><span class="line">225</span><br><span class="line">226</span><br><span class="line">227</span><br><span class="line">228</span><br><span class="line">229</span><br><span class="line">230</span><br><span class="line">231</span><br><span class="line">232</span><br><span class="line">233</span><br><span class="line">234</span><br><span class="line">235</span><br><span class="line">236</span><br><span class="line">237</span><br><span class="line">238</span><br><span class="line">239</span><br><span class="line">240</span><br><span class="line">241</span><br><span class="line">242</span><br><span class="line">243</span><br><span class="line">244</span><br><span class="line">245</span><br><span class="line">246</span><br><span class="line">247</span><br><span class="line">248</span><br><span class="line">249</span><br><span class="line">250</span><br><span class="line">251</span><br><span class="line">252</span><br><span class="line">253</span><br><span class="line">254</span><br><span class="line">255</span><br><span class="line">256</span><br><span class="line">257</span><br><span class="line">258</span><br><span class="line">259</span><br><span class="line">260</span><br><span class="line">261</span><br><span class="line">262</span><br><span class="line">263</span><br><span class="line">264</span><br><span class="line">265</span><br><span class="line">266</span><br><span class="line">267</span><br><span class="line">268</span><br><span class="line">269</span><br><span class="line">270</span><br><span class="line">271</span><br><span class="line">272</span><br><span class="line">273</span><br><span class="line">274</span><br><span class="line">275</span><br><span class="line">276</span><br><span class="line">277</span><br><span class="line">278</span><br><span class="line">279</span><br><span class="line">280</span><br><span class="line">281</span><br><span class="line">282</span><br><span class="line">283</span><br><span class="line">284</span><br><span class="line">285</span><br><span class="line">286</span><br></pre></td><td class="code"><pre><code class="hljs powershell"><span class="hljs-comment">#Requires -Version 5.1</span><br> <br><span class="hljs-comment">&lt;#PSScriptInfo</span><br><span class="hljs-comment"> </span><br><span class="hljs-comment">.VERSION 1.0</span><br><span class="hljs-comment"> </span><br><span class="hljs-comment">.GUID 41543292-9400-41d5-8bb8-5fe43f167a03</span><br><span class="hljs-comment"> </span><br><span class="hljs-comment">.AUTHOR Fabiano Silva</span><br><span class="hljs-comment"> </span><br><span class="hljs-comment">.COPYRIGHT Copyright (c) Fabiano Silva</span><br><span class="hljs-comment"> </span><br><span class="hljs-comment">.TAGS Windows PowerShell Multiple RDP</span><br><span class="hljs-comment"> </span><br><span class="hljs-comment">.PROJECTURI https://github.com/fabianosrc/TermsrvPatcher</span><br><span class="hljs-comment"> </span><br><span class="hljs-comment">#&gt;</span><br> <br><span class="hljs-comment">&lt;#</span><br><span class="hljs-comment"><span class="hljs-doctag">.SYNOPSIS</span></span><br><span class="hljs-comment">    Patch termsrv.dll so that multiple remote users can open an RDP session on a non-Windows Server computer</span><br><span class="hljs-comment"><span class="hljs-doctag">.DESCRIPTION</span></span><br><span class="hljs-comment">    This script patches the termsrv.dll file to allow multiple simultaneous sessions via</span><br><span class="hljs-comment">    Remote Desktop Connection (RDP) on non-Windows Server computers</span><br><span class="hljs-comment"><span class="hljs-doctag">.LINK</span></span><br><span class="hljs-comment">    http://woshub.com/how-to-allow-multiple-rdp-sessions-in-windows-10</span><br><span class="hljs-comment">    https://www.mysysadmintips.com/windows/clients/545-multiple-rdp-remote-desktop-sessions-in-windows-10</span><br><span class="hljs-comment">#&gt;</span><br> <br><span class="hljs-comment"># Self-elevate the script so with a UAC prompt since this script needs to be run as an Administrator in order to function properly</span><br><span class="hljs-keyword">if</span> (<span class="hljs-operator">-Not</span> ([<span class="hljs-type">Security.Principal.WindowsPrincipal</span>][<span class="hljs-type">Security.Principal.WindowsIdentity</span>]::GetCurrent()).IsInRole([<span class="hljs-type">Security.Principal.WindowsBuiltInRole</span>]<span class="hljs-string">&#x27;Administrator&#x27;</span>)) &#123;<br>    <span class="hljs-keyword">switch</span> ((<span class="hljs-built_in">Get-Culture</span>).Name) &#123;<br>        <span class="hljs-string">&#x27;pt-BR&#x27;</span> &#123; <span class="hljs-built_in">Write-Host</span> <span class="hljs-string">&#x27;Você não executou este script como Administrador. Este script será executado automaticamente como Administrador.&#x27;</span> <span class="hljs-literal">-ForegroundColor</span> Green &#125;<br>        Default &#123; <span class="hljs-built_in">Write-Host</span> <span class="hljs-string">&#x27;You didn&#x27;</span><span class="hljs-string">&#x27;t run this script as an Administrator. This script will self elevate to run as an Administrator and continue.&#x27;</span> <span class="hljs-literal">-ForegroundColor</span> Green &#125;<br>    &#125;<br> <br>    <span class="hljs-built_in">Start-Sleep</span> <span class="hljs-literal">-Milliseconds</span> <span class="hljs-number">2500</span><br>    <span class="hljs-built_in">Start-Process</span> PowerShell.exe <span class="hljs-literal">-ArgumentList</span> (<span class="hljs-string">&quot;-NoProfile -ExecutionPolicy Bypass -File `&quot;&#123;0&#125;`&quot;&quot;</span> <span class="hljs-operator">-f</span> <span class="hljs-variable">$PSCommandPath</span>) <span class="hljs-literal">-Verb</span> RunAs<br>    <span class="hljs-keyword">Exit</span><br>&#125;<br> <br><span class="hljs-variable">$OSArchitecture</span> = (<span class="hljs-built_in">Get-CimInstance</span> <span class="hljs-literal">-ClassName</span> Win32_OperatingSystem).OSArchitecture<br> <br><span class="hljs-variable">$termsrvDllFile</span> = <span class="hljs-string">&quot;<span class="hljs-variable">$env:SystemRoot</span>\System32\termsrv.dll&quot;</span><br><span class="hljs-variable">$termsrvDllCopy</span> = <span class="hljs-string">&quot;<span class="hljs-variable">$env:SystemRoot</span>\System32\termsrv.dll.copy&quot;</span><br><span class="hljs-variable">$termsrvPatched</span> = <span class="hljs-string">&quot;<span class="hljs-variable">$env:SystemRoot</span>\System32\termsrv.dll.patched&quot;</span><br> <br><span class="hljs-variable">$patterns</span> = <span class="hljs-selector-tag">@</span>&#123;<br>    Pattern = [<span class="hljs-type">regex</span>]<span class="hljs-string">&#x27;39 81 3C 06 00 00 0F (?:[0-9A-F]&#123;2&#125; )&#123;4&#125;00&#x27;</span><br>    Win24H2 = [<span class="hljs-type">regex</span>]<span class="hljs-string">&#x27;8B 81 38 06 00 00 39 81 3C 06 00 00 75&#x27;</span><br>&#125;<br> <br><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">Get-OSInfo</span></span> &#123;<br>    <span class="hljs-variable">$OSInfo</span> = <span class="hljs-built_in">Get-ItemProperty</span> <span class="hljs-literal">-Path</span> <span class="hljs-string">&#x27;HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion&#x27;</span><br> <br>    [<span class="hljs-type">PSCustomObject</span>]<span class="hljs-selector-tag">@</span>&#123;<br>        CurrentBuild = <span class="hljs-variable">$OSInfo</span>.CurrentBuild<br>        BuildRevision = <span class="hljs-variable">$OSInfo</span>.UBR<br>        FullOSBuild = <span class="hljs-string">&quot;<span class="hljs-variable">$</span>(<span class="hljs-variable">$OSInfo</span>.CurrentBuild).<span class="hljs-variable">$</span>(<span class="hljs-variable">$OSInfo</span>.UBR)&quot;</span><br>        DisplayVersion = <span class="hljs-variable">$OSInfo</span>.DisplayVersion<br>        InstallationType = <span class="hljs-variable">$OSInfo</span>.InstallationType<br>    &#125;<br>&#125;<br> <br><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">Get-OSVersion</span></span> &#123;<br>    [<span class="hljs-type">version</span>]<span class="hljs-variable">$OSVersion</span> = [<span class="hljs-type">System.Environment</span>]::OSVersion.Version<br>    <span class="hljs-variable">$installationType</span> = (<span class="hljs-built_in">Get-OSInfo</span>).InstallationType<br> <br>    <span class="hljs-keyword">if</span> (<span class="hljs-variable">$OSVersion</span>.Major <span class="hljs-operator">-eq</span> <span class="hljs-number">6</span> <span class="hljs-operator">-and</span> <span class="hljs-variable">$OSVersion</span>.Minor <span class="hljs-operator">-eq</span> <span class="hljs-number">1</span>) &#123;<br>        <span class="hljs-keyword">return</span> <span class="hljs-string">&#x27;Windows 7&#x27;</span><br>    &#125; <span class="hljs-keyword">elseif</span> (<span class="hljs-variable">$OSVersion</span>.Major <span class="hljs-operator">-eq</span> <span class="hljs-number">10</span> <span class="hljs-operator">-and</span> <span class="hljs-variable">$OSVersion</span>.Build <span class="hljs-operator">-lt</span> <span class="hljs-number">22000</span> <span class="hljs-operator">-and</span> <span class="hljs-variable">$installationType</span> <span class="hljs-operator">-eq</span> <span class="hljs-string">&#x27;Client&#x27;</span>) &#123;<br>        <span class="hljs-keyword">return</span> <span class="hljs-string">&#x27;Windows 10&#x27;</span><br>    &#125; <span class="hljs-keyword">elseif</span> (<span class="hljs-variable">$OSVersion</span>.Major <span class="hljs-operator">-eq</span> <span class="hljs-number">10</span> <span class="hljs-operator">-and</span> <span class="hljs-variable">$OSVersion</span>.Build <span class="hljs-operator">-gt</span> <span class="hljs-number">22000</span>) &#123;<br>        <span class="hljs-keyword">return</span> <span class="hljs-string">&#x27;Windows 11&#x27;</span><br>    &#125; <span class="hljs-keyword">elseif</span> (<span class="hljs-variable">$OSVersion</span>.Major <span class="hljs-operator">-eq</span> <span class="hljs-number">10</span> <span class="hljs-operator">-and</span> <span class="hljs-variable">$OSVersion</span>.Build <span class="hljs-operator">-lt</span> <span class="hljs-number">22000</span> <span class="hljs-operator">-and</span> <span class="hljs-variable">$installationType</span> <span class="hljs-operator">-eq</span> <span class="hljs-string">&#x27;Server&#x27;</span>) &#123;<br>        <span class="hljs-keyword">return</span> <span class="hljs-string">&#x27;Windows Server 2016&#x27;</span><br>    &#125; <span class="hljs-keyword">elseif</span> (<span class="hljs-variable">$OSVersion</span>.Major <span class="hljs-operator">-eq</span> <span class="hljs-number">10</span> <span class="hljs-operator">-and</span> <span class="hljs-variable">$OSVersion</span>.Build <span class="hljs-operator">-eq</span> <span class="hljs-number">20348</span>) &#123;<br>        <span class="hljs-keyword">return</span> <span class="hljs-string">&#x27;Windows Server 2022&#x27;</span><br>    &#125; <span class="hljs-keyword">else</span> &#123;<br>        <span class="hljs-keyword">return</span> <span class="hljs-string">&#x27;Unsupported OS&#x27;</span><br>    &#125;<br>&#125;<br> <br><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">Update-Dll</span></span> &#123;<br>    <span class="hljs-function">[<span class="hljs-type">CmdletBinding</span>()]</span><br>    <span class="hljs-keyword">param</span> (<br>        [<span class="hljs-type">Parameter</span>(<span class="hljs-type">Mandatory</span>)]<br>        [<span class="hljs-type">regex</span>]<span class="hljs-variable">$InputPattern</span>,<br> <br>        [<span class="hljs-type">Parameter</span>(<span class="hljs-type">Mandatory</span>)]<br>        [<span class="hljs-built_in">string</span>]<span class="hljs-variable">$Replacement</span>,<br> <br>        [<span class="hljs-type">Parameter</span>(<span class="hljs-type">Mandatory</span>)]<br>        [<span class="hljs-built_in">string</span>]<span class="hljs-variable">$TermsrvDllAsText</span>,<br> <br>        [<span class="hljs-type">Parameter</span>(<span class="hljs-type">Mandatory</span>)]<br>        [<span class="hljs-built_in">string</span>]<span class="hljs-variable">$TermsrvDllAsFile</span>,<br> <br>        [<span class="hljs-type">Parameter</span>(<span class="hljs-type">Mandatory</span>)]<br>        [<span class="hljs-built_in">string</span>]<span class="hljs-variable">$TermsrvDllAsPatch</span>,<br> <br>        [<span class="hljs-type">Parameter</span>(<span class="hljs-type">Mandatory</span>)]<br>        [<span class="hljs-type">System.Security.AccessControl.FileSecurity</span>]<span class="hljs-variable">$TermsrvAclObject</span><br>    )<br> <br>    <span class="hljs-keyword">begin</span> &#123;<br>        <span class="hljs-variable">$match</span> = <span class="hljs-variable">$TermsrvDllAsText</span> <span class="hljs-operator">-match</span> <span class="hljs-variable">$InputPattern</span><br>        <span class="hljs-variable">$patch</span> = <span class="hljs-variable">$TermsrvDllAsText</span> <span class="hljs-operator">-match</span> <span class="hljs-variable">$Replacement</span><br>    &#125;<br> <br>    <span class="hljs-keyword">process</span> &#123;<br>        <span class="hljs-keyword">if</span> (<span class="hljs-variable">$match</span>) &#123;<br>            <span class="hljs-built_in">Write-Host</span> <span class="hljs-string">&quot;`nPattern matching!`n&quot;</span> <span class="hljs-literal">-ForegroundColor</span> Green<br> <br>            <span class="hljs-variable">$dllAsTextReplaced</span> = <span class="hljs-variable">$TermsrvDllAsText</span> <span class="hljs-operator">-replace</span> <span class="hljs-variable">$InputPattern</span>, <span class="hljs-variable">$Replacement</span><br> <br>            <span class="hljs-comment"># Use the replaced string to create a byte array again.</span><br>            [<span class="hljs-built_in">byte</span>[]] <span class="hljs-variable">$dllAsBytesReplaced</span> = <span class="hljs-operator">-split</span> <span class="hljs-variable">$dllAsTextReplaced</span> <span class="hljs-operator">-replace</span> <span class="hljs-string">&#x27;^&#x27;</span>, <span class="hljs-string">&#x27;0x&#x27;</span><br> <br>            <span class="hljs-comment"># Create termsrv.dll.patched from the byte array.</span><br>            [<span class="hljs-type">System.IO.File</span>]::WriteAllBytes(<span class="hljs-variable">$TermsrvDllAsPatch</span>, <span class="hljs-variable">$dllAsBytesReplaced</span>)<br> <br>            fc.exe /b <span class="hljs-variable">$TermsrvDllAsPatch</span> <span class="hljs-variable">$TermsrvDllAsFile</span><br>            <span class="hljs-comment">&lt;#</span><br><span class="hljs-comment">            <span class="hljs-doctag">.DESCRIPTION</span></span><br><span class="hljs-comment">                Compare patched and original DLL (/b: binary comparison) and displays the differences between them.</span><br><span class="hljs-comment">            <span class="hljs-doctag">.NOTES</span></span><br><span class="hljs-comment">                Expected output something like:</span><br><span class="hljs-comment"> </span><br><span class="hljs-comment">                00098BA2: B8 8B</span><br><span class="hljs-comment">                00098BA3: 00 99</span><br><span class="hljs-comment">                00098BA4: 01 30</span><br><span class="hljs-comment">                00098BA5: 00 03</span><br><span class="hljs-comment">                00098BA7: 89 00</span><br><span class="hljs-comment">                00098BA8: 81 8B</span><br><span class="hljs-comment">                00098BA9: 38 B1</span><br><span class="hljs-comment">                00098BAA: 06 34</span><br><span class="hljs-comment">                00098BAB: 00 03</span><br><span class="hljs-comment">                00098BAD: 90 00</span><br><span class="hljs-comment">            #&gt;</span><br> <br>            <span class="hljs-built_in">Start-Sleep</span> <span class="hljs-literal">-Milliseconds</span> <span class="hljs-number">1500</span><br> <br>            <span class="hljs-comment"># Overwrite original DLL with patched version:</span><br>            <span class="hljs-built_in">Copy-Item</span> <span class="hljs-literal">-Path</span> <span class="hljs-variable">$TermsrvDllAsPatch</span> <span class="hljs-literal">-Destination</span> <span class="hljs-variable">$TermsrvDllAsFile</span> <span class="hljs-literal">-Force</span><br>        &#125; <span class="hljs-keyword">elseif</span> (<span class="hljs-variable">$patch</span>) &#123;<br>            <span class="hljs-built_in">Write-Host</span> <span class="hljs-string">&quot;The file is already patched. No changes are needed.`n&quot;</span> <span class="hljs-literal">-ForegroundColor</span> Green<br>        &#125; <span class="hljs-keyword">else</span> &#123;<br>            <span class="hljs-built_in">Write-Host</span> <span class="hljs-string">&quot;The pattern was not found. Nothing will be changed.`n&quot;</span> <span class="hljs-literal">-ForegroundColor</span> Yellow<br>        &#125;<br> <br>        <span class="hljs-comment"># Restore original Access Control List (ACL):</span><br>        <span class="hljs-built_in">Set-Acl</span> <span class="hljs-literal">-Path</span> <span class="hljs-variable">$TermsrvDllAsFile</span> <span class="hljs-literal">-AclObject</span> <span class="hljs-variable">$TermsrvAclObject</span><br> <br>        <span class="hljs-comment"># Start services again...</span><br>        <span class="hljs-built_in">Start-Service</span> TermService <span class="hljs-literal">-PassThru</span><br>    &#125;<br>&#125;<br> <br><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">Stop-TermService</span></span> &#123;<br>    <span class="hljs-keyword">try</span> &#123;<br>        <span class="hljs-built_in">Stop-Service</span> <span class="hljs-literal">-Name</span> TermService <span class="hljs-literal">-Force</span> <span class="hljs-literal">-ErrorAction</span> Stop<br>    &#125; <span class="hljs-keyword">catch</span> &#123;<br>        <span class="hljs-built_in">Write-Warning</span> <span class="hljs-literal">-Message</span> <span class="hljs-variable">$_</span>.Exception.Message<br>        <span class="hljs-keyword">return</span><br>    &#125;<br> <br>    <span class="hljs-keyword">while</span> ((<span class="hljs-built_in">Get-Service</span> <span class="hljs-literal">-Name</span> TermService).Status <span class="hljs-operator">-ne</span> <span class="hljs-string">&#x27;Stopped&#x27;</span>) &#123;<br>        <span class="hljs-built_in">Start-Sleep</span> <span class="hljs-literal">-Milliseconds</span> <span class="hljs-number">500</span><br>    &#125;<br> <br>    <span class="hljs-built_in">Write-Host</span> <span class="hljs-string">&quot;`nThe Remote Desktop Services (TermService) has been stopped sucsessfully`n&quot;</span> <span class="hljs-literal">-ForegroundColor</span> Green<br>&#125;<br> <br><span class="hljs-built_in">Stop-TermService</span><br> <br><span class="hljs-comment"># Save Access Control List (ACL) of termsrv.dll file.</span><br><span class="hljs-variable">$termsrvDllAcl</span> = <span class="hljs-built_in">Get-Acl</span> <span class="hljs-literal">-Path</span> <span class="hljs-variable">$termsrvDllFile</span><br> <br><span class="hljs-built_in">Write-Host</span> <span class="hljs-string">&quot;Owner of termsrv.dll: <span class="hljs-variable">$</span>(<span class="hljs-variable">$termsrvDllAcl</span>.Owner)&quot;</span><br> <br><span class="hljs-comment"># Create a backup of the original termsrv.dll file.</span><br><span class="hljs-built_in">Copy-Item</span> <span class="hljs-literal">-Path</span> <span class="hljs-variable">$termsrvDllFile</span> <span class="hljs-literal">-Destination</span> <span class="hljs-variable">$termsrvDllCopy</span> <span class="hljs-literal">-Force</span><br> <br><span class="hljs-comment"># Take ownership of the DLL...</span><br>takeown.exe /F <span class="hljs-variable">$termsrvDllFile</span><br> <br><span class="hljs-comment"># Get Current logged in user (changed by .NET class, because in remote connection WMI Object cannot retrieve the user)</span><br><span class="hljs-variable">$currentUserName</span> = [<span class="hljs-type">System.Security.Principal.WindowsIdentity</span>]::GetCurrent().Name<br> <br><span class="hljs-comment"># Grant full control to the currently logged in user.</span><br>icacls.exe <span class="hljs-variable">$termsrvDllFile</span> /grant <span class="hljs-string">&quot;<span class="hljs-variable">$</span>(<span class="hljs-variable">$currentUserName</span>):F&quot;</span><br> <br><span class="hljs-comment"># Read termsrv.dll as byte array to modify bytes</span><br><span class="hljs-variable">$dllAsByte</span> = [<span class="hljs-type">System.IO.File</span>]::ReadAllBytes(<span class="hljs-variable">$termsrvDllFile</span>)<br> <br><span class="hljs-comment"># Convert the byte array to a string that represents each byte value as a hexadecimal value, separated by spaces</span><br><span class="hljs-variable">$dllAsText</span> = (<span class="hljs-variable">$dllAsByte</span> | <span class="hljs-built_in">ForEach-Object</span> &#123; <span class="hljs-variable">$_</span>.ToString(<span class="hljs-string">&#x27;X2&#x27;</span>) &#125;) <span class="hljs-operator">-join</span> <span class="hljs-string">&#x27; &#x27;</span><br> <br><span class="hljs-variable">$commonParams</span> = <span class="hljs-selector-tag">@</span>&#123;<br>    TermsrvDllAsText = <span class="hljs-variable">$dllAsText</span><br>    TermsrvDllAsFile = <span class="hljs-variable">$termsrvDllFile</span><br>    TermsrvDllAsPatch = <span class="hljs-variable">$termsrvPatched</span><br>    TermsrvAclObject = <span class="hljs-variable">$termsrvDllAcl</span><br>&#125;<br> <br><span class="hljs-keyword">switch</span> (<span class="hljs-built_in">Get-OSVersion</span>) &#123;<br>    <span class="hljs-string">&#x27;Windows 7&#x27;</span> &#123;<br>        <span class="hljs-keyword">if</span> (<span class="hljs-variable">$OSArchitecture</span> <span class="hljs-operator">-eq</span> <span class="hljs-string">&#x27;64-bit&#x27;</span>) &#123;<br>            <span class="hljs-keyword">switch</span> ((<span class="hljs-built_in">Get-OSInfo</span>).FullOSBuild) &#123;<br>                <span class="hljs-string">&#x27;7601.23964&#x27;</span> &#123;<br>                    <span class="hljs-variable">$dllAsTextReplaced</span> = <span class="hljs-variable">$dllAsText</span> <span class="hljs-operator">-replace</span> <span class="hljs-string">&#x27;8B 87 38 06 00 00 39 87 3C 06 00 00 0F 84 2F C3 00 00&#x27;</span>, <span class="hljs-string">&#x27;B8 00 01 00 00 90 89 87 38 06 00 00 90 90 90 90 90 90&#x27;</span> `<br>                    <span class="hljs-operator">-replace</span> <span class="hljs-string">&#x27;4C 24 60 BB 01 00 00 00&#x27;</span>, <span class="hljs-string">&#x27;4C 24 60 BB 00 00 00 00&#x27;</span> `<br>                    <span class="hljs-operator">-replace</span> <span class="hljs-string">&#x27;83 7C 24 50 00 74 18 48 8D&#x27;</span>, <span class="hljs-string">&#x27;83 7C 24 50 00 EB 18 48 8D&#x27;</span><br>                &#125;<br>                <span class="hljs-string">&#x27;7601.24546&#x27;</span> &#123;<br>                    <span class="hljs-variable">$dllAsTextReplaced</span> = <span class="hljs-variable">$dllAsText</span> <span class="hljs-operator">-replace</span> <span class="hljs-string">&#x27;8B 87 38 06 00 00 39 87 3C 06 00 00 0F 84 3E C4 00 00&#x27;</span>, <span class="hljs-string">&#x27;B8 00 01 00 00 90 89 87 38 06 00 00 90 90 90 90 90 90&#x27;</span> `<br>                    <span class="hljs-operator">-replace</span> <span class="hljs-string">&#x27;4C 24 60 BB 01 00 00 00&#x27;</span>, <span class="hljs-string">&#x27;4C 24 60 BB 00 00 00 00&#x27;</span> `<br>                    <span class="hljs-operator">-replace</span> <span class="hljs-string">&#x27;83 7C 24 50 00 74 43 48 8D&#x27;</span>, <span class="hljs-string">&#x27;83 7C 24 50 00 EB 18 48 8D&#x27;</span><br>                &#125;<br>                Default &#123;<br>                    <span class="hljs-variable">$dllAsTextReplaced</span> = <span class="hljs-variable">$dllAsText</span> <span class="hljs-operator">-replace</span> <span class="hljs-string">&#x27;8B 87 38 06 00 00 39 87 3C 06 00 00 0F 84 3E C4 00 00&#x27;</span>, <span class="hljs-string">&#x27;B8 00 01 00 00 90 89 87 38 06 00 00 90 90 90 90 90 90&#x27;</span> `<br>                    <span class="hljs-operator">-replace</span> <span class="hljs-string">&#x27;4C 24 60 BB 01 00 00 00&#x27;</span>, <span class="hljs-string">&#x27;4C 24 60 BB 00 00 00 00&#x27;</span> `<br>                    <span class="hljs-operator">-replace</span> <span class="hljs-string">&#x27;83 7C 24 50 00 74 43 48 8D&#x27;</span>, <span class="hljs-string">&#x27;83 7C 24 50 00 EB 18 48 8D&#x27;</span><br>                &#125;<br>            &#125;<br>        &#125;<br> <br>        <span class="hljs-comment"># Use the replaced string to create a byte array again.</span><br>        [<span class="hljs-built_in">byte</span>[]] <span class="hljs-variable">$dllAsBytesReplaced</span> = <span class="hljs-operator">-split</span> <span class="hljs-variable">$dllAsTextReplaced</span> <span class="hljs-operator">-replace</span> <span class="hljs-string">&#x27;^&#x27;</span>, <span class="hljs-string">&#x27;0x&#x27;</span><br> <br>        <span class="hljs-comment"># Create termsrv.dll.patched from the byte array.</span><br>        [<span class="hljs-type">System.IO.File</span>]::WriteAllBytes(<span class="hljs-variable">$termsrvPatched</span>, <span class="hljs-variable">$dllAsBytesReplaced</span>)<br> <br>        fc.exe /B <span class="hljs-variable">$termsrvPatched</span> <span class="hljs-variable">$termsrvDllFile</span><br>        <span class="hljs-comment">&lt;#</span><br><span class="hljs-comment">        <span class="hljs-doctag">.DESCRIPTION</span></span><br><span class="hljs-comment">            Compares termsrv.dll with tersrv.dll.patched and displays the differences between them.</span><br><span class="hljs-comment">        <span class="hljs-doctag">.NOTES</span></span><br><span class="hljs-comment">            Expected output something like:</span><br><span class="hljs-comment"> </span><br><span class="hljs-comment">            00098BA2: B8 8B</span><br><span class="hljs-comment">            00098BA3: 00 99</span><br><span class="hljs-comment">            00098BA4: 01 30</span><br><span class="hljs-comment">            00098BA5: 00 03</span><br><span class="hljs-comment">            00098BA7: 89 00</span><br><span class="hljs-comment">            00098BA8: 81 8B</span><br><span class="hljs-comment">            00098BA9: 38 B1</span><br><span class="hljs-comment">            00098BAA: 06 34</span><br><span class="hljs-comment">            00098BAB: 00 03</span><br><span class="hljs-comment">            00098BAD: 90 00</span><br><span class="hljs-comment">        #&gt;</span><br> <br>        <span class="hljs-built_in">Start-Sleep</span> <span class="hljs-literal">-Milliseconds</span> <span class="hljs-number">1500</span><br> <br>        <span class="hljs-comment"># Overwrite original DLL with patched version:</span><br>        <span class="hljs-built_in">Copy-Item</span> <span class="hljs-literal">-Path</span> <span class="hljs-variable">$termsrvPatched</span> <span class="hljs-literal">-Destination</span> <span class="hljs-variable">$termsrvDllFile</span> <span class="hljs-literal">-Force</span><br> <br>        <span class="hljs-comment"># Restore original Access Control List (ACL):</span><br>        <span class="hljs-built_in">Set-Acl</span> <span class="hljs-literal">-Path</span> <span class="hljs-variable">$termsrvDllFile</span> <span class="hljs-literal">-AclObject</span> <span class="hljs-variable">$termsrvDllAcl</span><br> <br>        <span class="hljs-built_in">Start-Sleep</span> <span class="hljs-literal">-Milliseconds</span> <span class="hljs-number">2500</span><br> <br>        <span class="hljs-comment"># Start services again...</span><br>        <span class="hljs-built_in">Start-Service</span> TermService <span class="hljs-literal">-PassThru</span><br>    &#125;<br>    <span class="hljs-string">&#x27;Windows 10&#x27;</span> &#123;<br>        <span class="hljs-built_in">Update-Dll</span> @commonParams <span class="hljs-literal">-InputPattern</span> <span class="hljs-variable">$patterns</span>.Pattern <span class="hljs-literal">-Replacement</span> <span class="hljs-string">&#x27;B8 00 01 00 00 89 81 38 06 00 00 90&#x27;</span><br>    &#125;<br>    <span class="hljs-string">&#x27;Windows 11&#x27;</span> &#123;<br>        <span class="hljs-keyword">if</span> ((<span class="hljs-built_in">Get-OSInfo</span>).DisplayVersion <span class="hljs-operator">-eq</span> <span class="hljs-string">&#x27;23H2&#x27;</span>) &#123;<br>            <span class="hljs-built_in">Update-Dll</span> @commonParams <span class="hljs-literal">-InputPattern</span> <span class="hljs-variable">$patterns</span>.Pattern <span class="hljs-literal">-Replacement</span> <span class="hljs-string">&#x27;B8 00 01 00 00 89 81 38 06 00 00 90&#x27;</span><br>        &#125; <span class="hljs-keyword">elseif</span> ((<span class="hljs-built_in">Get-OSInfo</span>).DisplayVersion <span class="hljs-operator">-eq</span> <span class="hljs-string">&#x27;24H2&#x27;</span>) &#123;<br>            <span class="hljs-built_in">Update-Dll</span> @commonParams <span class="hljs-literal">-InputPattern</span> <span class="hljs-variable">$patterns</span>.Win24H2 <span class="hljs-literal">-Replacement</span> <span class="hljs-string">&#x27;B8 00 01 00 00 89 81 38 06 00 00 90 EB&#x27;</span><br>        &#125;<br>    &#125;<br>    <span class="hljs-string">&#x27;Windows Server 2016&#x27;</span> &#123;<br>        <span class="hljs-built_in">Update-Dll</span> @commonParams <span class="hljs-literal">-InputPattern</span> <span class="hljs-variable">$patterns</span>.Pattern <span class="hljs-literal">-Replacement</span> <span class="hljs-string">&#x27;B8 00 01 00 00 89 81 38 06 00 00 90&#x27;</span><br>    &#125;<br>    <span class="hljs-string">&#x27;Windows Server 2022&#x27;</span> &#123;<br>        <span class="hljs-built_in">Update-Dll</span> @commonParams <span class="hljs-literal">-InputPattern</span> <span class="hljs-variable">$patterns</span>.Pattern <span class="hljs-literal">-Replacement</span> <span class="hljs-string">&#x27;B8 00 01 00 00 89 81 38 06 00 00 90&#x27;</span><br>    &#125;<br>    <span class="hljs-string">&#x27;Unsupported OS&#x27;</span> &#123;<br>        <span class="hljs-built_in">Write-Host</span> <span class="hljs-string">&#x27;Unable to get OS Version&#x27;</span><br>    &#125;<br>&#125;<br></code></pre></td></tr></table></figure>]]></content>
    
    
    <summary type="html">&lt;p&gt;TermsrvPatcher 是一个在 Github 上开源的项目，通过该项目可以实现非服务器版 Windows 系统多账户同时远程登录。&lt;/p&gt;</summary>
    
    
    
    <category term="随便写写" scheme="https://blog.kuri.ink/categories/%E9%9A%8F%E4%BE%BF%E5%86%99%E5%86%99/"/>
    
    
    <category term="Windows" scheme="https://blog.kuri.ink/tags/Windows/"/>
    
  </entry>
  
  <entry>
    <title>AI：RX590通过Ollama本地部署Deepseek-R1大模型</title>
    <link href="https://blog.kuri.ink/posts/AI%EF%BC%9AAMD%20RX590%E6%98%BE%E5%8D%A1%E9%80%9A%E8%BF%87Ollama%E6%9C%AC%E5%9C%B0%E9%83%A8%E7%BD%B2Deepseek%20R1%E5%A4%A7%E6%A8%A1%E5%9E%8B/"/>
    <id>https://blog.kuri.ink/posts/AI%EF%BC%9AAMD%20RX590%E6%98%BE%E5%8D%A1%E9%80%9A%E8%BF%87Ollama%E6%9C%AC%E5%9C%B0%E9%83%A8%E7%BD%B2Deepseek%20R1%E5%A4%A7%E6%A8%A1%E5%9E%8B/</id>
    <published>2025-02-05T02:24:00.000Z</published>
    <updated>2025-12-21T15:36:30.580Z</updated>
    
    <content type="html"><![CDATA[<p>Ollama 并不原生支持部分系列的 AMD 显卡，因此，想要通过 RX590 显卡运行大模型（LLM），需要手动进行修改配置。</p><span id="more"></span><h2 id="下载安装Ollama-for-AMD">下载安装Ollama-for-AMD</h2><p>首先前往Github下载Ollama-for-AMD：<a href="https://github.com/likelovewant/ollama-for-amd/releases/tag/v0.5.4">https://github.com/likelovewant/ollama-for-amd/releases/tag/v0.5.4</a>。</p><p>需要下载两个文件，一个是<code>ollama-windows-amd64-rocm5.7-v2.7z</code>，另一个是<code>OllamaSetup.exe</code>.</p><p><img data-fancybox="gallery" data-sizes="auto" data-src="https://imageurl.kuri.ink/images/posts/rx590-ollama-deepseek/01.png" alt="01" class="lazyload"></p><p>正常安装，Ollama会自动在后台运行，点击<code>Quit Ollama</code>退出程序.</p><p>解压第一个文件，覆盖Ollama安装目录：<code>C:\Users\&lt;用户名&gt;\AppData\Local\Programs\Ollama</code>。</p><p>重新打开Ollama.</p><p>在任务栏中右键Ollama图标，点击“View logs”。</p><p><img data-fancybox="gallery" data-sizes="auto" data-src="https://imageurl.kuri.ink/images/posts/rx590-ollama-deepseek/02.png" alt="02" class="lazyload"></p><p>此时会跳转到目录：<code>C:\Users\&lt;用户名&gt;\AppData\Local\Ollama</code></p><p><img data-fancybox="gallery" data-sizes="auto" data-src="https://imageurl.kuri.ink/images/posts/rx590-ollama-deepseek/03.png" alt="03" class="lazyload"></p><p>用文本编辑器打开“<code>server.log</code>”或“<code>server-1.log</code>”。</p><p><img data-fancybox="gallery" data-sizes="auto" data-src="https://imageurl.kuri.ink/images/posts/rx590-ollama-deepseek/04.png" alt="04" class="lazyload"></p><p>日志提示WARN：显卡<code>gpu type</code>为<code>gfx803</code>，且<code>ROCm</code>版本为<code>5.7</code>。</p><p>我们需要下载对应<code>gfx version</code>及<code>ROCm</code>的文件。</p><h2 id="配置ROCm（HIP-SDK）">配置ROCm（HIP SDK）</h2><p>首先下载ROCm的相关驱动，HIP SDK：<a href="https://www.amd.com/en/developer/resources/ROCm-hub/hip-sdk.html">https://www.amd.com/en/developer/resources/ROCm-hub/hip-sdk.html</a></p><p><img data-fancybox="gallery" data-sizes="auto" data-src="https://imageurl.kuri.ink/images/posts/rx590-ollama-deepseek/05.png" alt="05" class="lazyload"></p><p>找到对应操作系统版本<code>Windows 10 &amp; 11</code>，<code>ROCm</code>版本<code>5.7.x</code>的SDK，下载并安装。</p><h2 id="配置Rocmlibs">配置Rocmlibs</h2><p><img data-fancybox="gallery" data-sizes="auto" data-src="https://imageurl.kuri.ink/images/posts/rx590-ollama-deepseek/06.png" alt="06" class="lazyload"></p><p><img data-fancybox="gallery" data-sizes="auto" data-src="https://imageurl.kuri.ink/images/posts/rx590-ollama-deepseek/07.png" alt="07" class="lazyload"></p><p>显卡<code>gpu type</code>为<code>gfx803</code>，对应为<code>rocm.gfx803.optic.vega10.logic.hip.sdk.6.1.2.7z</code>。</p><p>下载完毕后解压。</p><p>打开目录：<code>C:\Users\&lt;用户名&gt;\AppData\Local\Programs\Ollama\lib\ollama\rocm</code></p><p>将解压后文件中的<code>hipblas.dll</code>替换本目录中的文件。</p><p>打开目录：<code>C:\Users\&lt;用户名&gt;\AppData\Local\Programs\Ollama\lib\ollama\rocm\rocblas</code></p><p><strong>删除该目录下的<code>library</code>文件夹。</strong></p><p>将解压后文件中的<code>library</code>复制到该目录。</p><p><strong>重启电脑</strong>。</p><h2 id="安装Deepseek">安装Deepseek</h2><p><img data-fancybox="gallery" data-sizes="auto" data-src="https://imageurl.kuri.ink/images/posts/rx590-ollama-deepseek/09.png" alt="09" class="lazyload"></p><p>打开Ollama官网模型目录：<a href="https://ollama.com/library/deepseek-r1">https://ollama.com/library/deepseek-r1</a></p><p>根据自身电脑配置选择对应参数（<code>x b</code>代表<code>10x 亿参数</code>，例如<code>14b</code>代表<code>140亿参数</code>）</p><p>例如，我们要安装14b的大模型。</p><p>在CMD中键入<code>ollama run deepseek-r1:14b</code></p><p>等待安装完毕即可。</p><p>或者，你也可以采用图形化界面与AI交互，例如使用<a href="https://chatboxai.app/zh">Chatbox</a>。</p><h2 id="检查">检查</h2><p><img data-fancybox="gallery" data-sizes="auto" data-src="https://imageurl.kuri.ink/images/posts/rx590-ollama-deepseek/08.png" alt="08" class="lazyload"></p><p>尝试与AI进行对话，例如输入“你好。”</p><p>打开任务管理器，发现GPU在工作，证明配置成功。</p><p><img data-fancybox="gallery" data-sizes="auto" data-src="https://imageurl.kuri.ink/images/posts/rx590-ollama-deepseek/10.png" alt="10" class="lazyload"></p><p><img data-fancybox="gallery" data-sizes="auto" data-src="https://imageurl.kuri.ink/images/posts/rx590-ollama-deepseek/11.png" alt="11" class="lazyload"></p>]]></content>
    
    
    <summary type="html">&lt;p&gt;Ollama 并不原生支持部分系列的 AMD 显卡，因此，想要通过 RX590 显卡运行大模型（LLM），需要手动进行修改配置。&lt;/p&gt;</summary>
    
    
    
    <category term="随便写写" scheme="https://blog.kuri.ink/categories/%E9%9A%8F%E4%BE%BF%E5%86%99%E5%86%99/"/>
    
    
    <category term="AI" scheme="https://blog.kuri.ink/tags/AI/"/>
    
    <category term="Deepseek" scheme="https://blog.kuri.ink/tags/Deepseek/"/>
    
    <category term="Ollama" scheme="https://blog.kuri.ink/tags/Ollama/"/>
    
    <category term="AMD" scheme="https://blog.kuri.ink/tags/AMD/"/>
    
    <category term="RX590" scheme="https://blog.kuri.ink/tags/RX590/"/>
    
    <category term="ROCm" scheme="https://blog.kuri.ink/tags/ROCm/"/>
    
  </entry>
  
  <entry>
    <title>HAM：业余无线电入门从考试到设台指南</title>
    <link href="https://blog.kuri.ink/posts/HAM%EF%BC%9A%E4%B8%9A%E4%BD%99%E6%97%A0%E7%BA%BF%E7%94%B5%E5%85%A5%E9%97%A8%E4%BB%8E%E8%80%83%E8%AF%95%E5%88%B0%E8%AE%BE%E5%8F%B0%E6%8C%87%E5%8D%97(%E4%B8%80)/"/>
    <id>https://blog.kuri.ink/posts/HAM%EF%BC%9A%E4%B8%9A%E4%BD%99%E6%97%A0%E7%BA%BF%E7%94%B5%E5%85%A5%E9%97%A8%E4%BB%8E%E8%80%83%E8%AF%95%E5%88%B0%E8%AE%BE%E5%8F%B0%E6%8C%87%E5%8D%97(%E4%B8%80)/</id>
    <published>2025-01-04T08:25:25.000Z</published>
    <updated>2025-08-09T09:40:02.602Z</updated>
    
    <content type="html"><![CDATA[<p>本文分别从业余无线电发展史及意义、考试须知、设台须知、法律法规、相关术语等方面进行介绍，既是一篇HAM新人的记录，也是对准备入坑HAM的指南。</p><p>DE BA4RKW VY 73!~✨</p><span id="more"></span><h2 id="业余无线电做什么？">业余无线电做什么？</h2><p>业余无线电（Amateur Radio），是一种供业余无线电爱好者进行<strong>相互通信、无线通讯技术实验、自我训练、个人娱乐、无线电运动、竞赛以及应急通信</strong>的一项使用无线电频率频谱的无线电业务。其中 “业余无线电爱好者” 指 “经正式批准的、对无线电技术有兴趣的人，其兴趣纯系个人爱好而不涉及谋取利润”。</p><p>早在1925年，国际业余无线电联盟（International Amateur Radio Union / IARU）在美国康涅狄格州的纽英顿成立，100年来，业余无线电技术与时俱进，不断地为人类社会进步发展贡献力量。</p><p>上世纪30年代，无线电技术已经传入我国，这一新兴的传播媒体和技术吸引了众多无线电爱好者的参与和欢迎。1931年，“九·一八”事变爆发，日本全面侵华战争开始，中国打响了东方反法西斯的第一枪，自1932年10月起，我国的业余无线电爱好者志愿组建中国业余无线电社（CAC），1937年10月，由朱其清先生牵头，在南京市正式组建业余无线电人员战时服务团（CARL），无线电爱好者们尽自己的力量，运用无线电技术，积极与国外反法西斯力量通联，同时侦查、干扰日军电台，为抗日战争的胜利起到了推动作用。</p><p>1940年5月5日，第一届全国空中年会在重庆市召开，我国的“业余无线电节”确立为每年的5月5日，农历五月初五是中华民族的传统节日“端午节”，这一天用来纪念爱国诗人屈原，另外，当人们相遇时，通常会握手致意，双手五指相扣，即为“5+5”，具有友好的含义。同时，在业余无线电通联结束时，通常会向对方报告“73”，表示对“对方美好的祝愿”。“5+5=7+3”，因此，选择5月5日作为业余无线电节，既反映了业余无线电“友好、互助”的精神，也蕴含着“爱国、进步”的精神。</p><p>2008年5月12日下午，里氏8.0级的汶川大地震发生，强震的破坏导致常规通信一度中断，地震发生后，四川成都、绵阳的无线电爱好者迅速动员，形成适应于应急救灾的组织体系和指挥系统，前往重灾区支援应急通信近百次，调动车辆数万台次，为救灾活动提供了顽强的通信保障。</p><p><img data-fancybox="gallery" data-sizes="auto" data-src="https://img.kechuang.org:81/r/280681?c=resource" alt="" class="lazyload"></p><h2 id="成为一名HAM需要具备的资质">成为一名HAM需要具备的资质</h2><h3 id="操作资质">操作资质</h3><ol><li class="lvl-3"><p>中国无线电协会业余电台操作证书</p></li></ol><h3 id="设台资质">设台资质</h3><ol><li class="lvl-3"><p>无线电台设备（手持/车载/固定）</p></li><li class="lvl-3"><p>中华人民共和国无线电台执照</p></li></ol><p><img data-fancybox="gallery" data-sizes="auto" data-src="https://imageurl.kuri.ink/images/posts/ham1/%E6%93%8D%E4%BD%9C%E8%AF%81%E4%B9%A6+%E6%89%A7%E7%85%A7%E5%AE%9E%E4%BE%8B.jpg" alt="" class="lazyload"></p><h2 id="如何准备考证">如何准备考证</h2><p>在成为一名合法的HAM之前，你需要通过由各地无线电管理局或监测站承办的业余无线电操作能力验证考试。与考驾照类似，初次接触业余无线电需要从A类考起（由初级到高级依次为：A -&gt; B -&gt; C）。考试题目均为客观题。在工信部新规<sup class="footnote-ref"><a href="#fn1" id="fnref1">[1]</a></sup>推行之前，考试举办时间和次数各地不同，需要关注所在地的工信局网站/微信公众号。以南京市为例，2024年共举办2次考试。</p><blockquote><p>根据工业和信息化部第67号令要求，2025年10月1日以后，业余无线电操作能力验证考核方法如下：</p><ol><li class="lvl-3"><p>A类共40题，其中单选题32题，多选题8题，答题时间40分钟，答对30题为合格。</p></li><li class="lvl-3"><p>B类共60题，其中单选题45题，多选题20题，答题时间60分钟，答对45题为合格。</p></li><li class="lvl-3"><p>C类共90题，其中单选题70题，多选题20题，答题时间90分钟，答对70题为合格。</p></li></ol><p>注：作答多选题时，<strong>必须与标准答案完全一致，多选、少选或错选均不得分。</strong></p></blockquote><h3 id="考试题库">考试题库</h3><div class="admonition warning"><p class="admonition-title">注意</p><p>请注意题库更新时间，下载并学习最新版本的题库，本条目内容仅供参考。注：2025年下半年考试极有可能启用新题库以及新考试规则，请留意。</p></div><div class="admonition warning"><p class="admonition-title">注意</p><p>2025年7月28日消息：CRAC已经更新业余无线电操作能力验证题库以及考核方法，即将于2025年10月1日起正式使用，可前往官方网站进行下载。</p></div><p>业余无线电操作能力验证考试各个等级题库均可以在 <a href="http://www.crac.org.cn/News/Detail?ID=d11def30d20d4d8fb12e08e7160e607d">CRAC官网-业余无线电台操作技术能力验证题库（2025年版）</a> 中下载。</p><h3 id="考试报名">考试报名</h3><p>考试一般在开考前2个星期由你所在地的工信局在微信公众号和官方网站上通知，在开考1个星期前组织考试报名。考试报名渠道一般有两个，均在线上：一个是<a href="https://sj.qq.com/appdetail/com.crirp.zhipu">智谱APP</a>，另一个是<a href="http://82.157.138.16:8091/CRAC/crac/login_student.html">CRAC官网的业余无线电台操作技术能力验证及信息管理系统</a>。</p><p>需要注意的是，一些热门城市，例如南京、上海等地，考试报名人数较多，同时可能会有一些附加报名条件，因此需要提前准备资料，以免在报名时耽误时间。</p><h4 id="报名材料">报名材料</h4><p>以下是A类考试需要准备的报名材料：</p><ol><li class="lvl-3"><p>本人电子证件照。</p><p>请提供6个月以内的彩色照片，jpg格式，正面，免冠，包含完整的头部，头部高度应在照片高度的1/2至4/5范围内，脸部必须清晰，照片高宽比为4:3左右，图像分辨率不低于400×300像素、不高于4500×3375像素。不得使用自拍照、生活照、艺术照。照片不得有白色外边框。</p></li><li class="lvl-3"><p>个人身份证正反面电子照片。</p><p>请提供彩色身份证件头像面和国徽面照片，无遮挡、扭曲、变形、反光，文字、头像清晰可辨，jpg格式，分辨率不低于1024×768像素、不高于4096×3072像素。</p></li></ol><h3 id="参加考试">参加考试</h3><p>报名成功后，需要在规定时间到考试地点参加考试，报名成功但不参加考试的，可能<strong>影响个人信用，导致限考或禁考</strong>。</p><p>答题完毕后，点击提交按钮，当场查看并确认成绩，成绩≥25分即为考试通过。</p><h3 id="考试合格等待领取操作证书">考试合格等待领取操作证书</h3><p>操作证书制证时间一般在14天左右，制证完毕后通过邮寄方式寄送到报名时填写的地点。</p><h2 id="准备设台">准备设台</h2><h3 id="购买无线电台">购买无线电台</h3><p>下面这款电台是我正在使用的：</p><h4 id="手持电台-泉盛UV-K6（￥169）">手持电台-泉盛UV-K6（￥169）</h4><p><img data-fancybox="gallery" data-sizes="auto" data-src="https://ba4rkw.kuri.ink/images/device.jpg" alt="" class="lazyload"></p><h3 id="准备设台资料">准备设台资料</h3><ol><li class="lvl-3"><p>无线电台设备铭牌照片（出厂时）</p></li><li class="lvl-3"><p>无线电台申请表</p></li><li class="lvl-3"><p>在设台地的居住证明（含学生证、身份证、户口本、居住证明等）</p></li></ol><h2 id="无线电常用术语">无线电常用术语</h2><h3 id="字母解释法">字母解释法</h3><p>字母解释法，又称码语。其在航空、航海以及业余无线电通信中被广泛使用，优点是降低通信过程中产生歧义的可能性。</p><table><thead><tr><th style="text-align:center">字母</th><th style="text-align:center">解释法</th><th style="text-align:center">电码</th><th style="text-align:center">字母</th><th style="text-align:center">解释法</th><th style="text-align:center">电码</th></tr></thead><tbody><tr><td style="text-align:center">A</td><td style="text-align:center">Alpha</td><td style="text-align:center">.-</td><td style="text-align:center">B</td><td style="text-align:center">Bravo</td><td style="text-align:center">-…</td></tr><tr><td style="text-align:center">C</td><td style="text-align:center">Charlie</td><td style="text-align:center">-.-.</td><td style="text-align:center">D</td><td style="text-align:center">Delta</td><td style="text-align:center">-..</td></tr><tr><td style="text-align:center">E</td><td style="text-align:center">Echo</td><td style="text-align:center">.</td><td style="text-align:center">F</td><td style="text-align:center">Foxtrot</td><td style="text-align:center">..-.</td></tr><tr><td style="text-align:center">G</td><td style="text-align:center">Golf</td><td style="text-align:center">--.</td><td style="text-align:center">H</td><td style="text-align:center">Hotel</td><td style="text-align:center">….</td></tr><tr><td style="text-align:center">I</td><td style="text-align:center">India</td><td style="text-align:center">..</td><td style="text-align:center">J</td><td style="text-align:center">Juliet</td><td style="text-align:center">.---</td></tr><tr><td style="text-align:center">K</td><td style="text-align:center">Kilo</td><td style="text-align:center">-.-</td><td style="text-align:center">L</td><td style="text-align:center">Lima</td><td style="text-align:center">.-..</td></tr><tr><td style="text-align:center">M</td><td style="text-align:center">Mike</td><td style="text-align:center">--</td><td style="text-align:center">N</td><td style="text-align:center">November</td><td style="text-align:center">-.</td></tr><tr><td style="text-align:center">O</td><td style="text-align:center">Oscar</td><td style="text-align:center">---</td><td style="text-align:center">P</td><td style="text-align:center">Papa</td><td style="text-align:center">.--.</td></tr><tr><td style="text-align:center">Q</td><td style="text-align:center">Quebec</td><td style="text-align:center">--.-</td><td style="text-align:center">R</td><td style="text-align:center">Romeo</td><td style="text-align:center">.-.</td></tr><tr><td style="text-align:center">S</td><td style="text-align:center">Sierra</td><td style="text-align:center">…</td><td style="text-align:center">T</td><td style="text-align:center">Tango</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">U</td><td style="text-align:center">Uniform</td><td style="text-align:center">.--</td><td style="text-align:center">V</td><td style="text-align:center">Victor</td><td style="text-align:center">…-</td></tr><tr><td style="text-align:center">W</td><td style="text-align:center">Whisky</td><td style="text-align:center">.--</td><td style="text-align:center">X</td><td style="text-align:center">X-ray</td><td style="text-align:center">-..-</td></tr><tr><td style="text-align:center">Y</td><td style="text-align:center">Yankee</td><td style="text-align:center">-.--</td><td style="text-align:center">Z</td><td style="text-align:center">Zulu</td><td style="text-align:center">--..</td></tr><tr><td style="text-align:center">1</td><td style="text-align:center">One</td><td style="text-align:center">.----</td><td style="text-align:center">2</td><td style="text-align:center">Two</td><td style="text-align:center">..---</td></tr><tr><td style="text-align:center">3</td><td style="text-align:center">Three</td><td style="text-align:center">…--</td><td style="text-align:center">4</td><td style="text-align:center">Four</td><td style="text-align:center">….-</td></tr><tr><td style="text-align:center">5</td><td style="text-align:center">Five</td><td style="text-align:center">…..</td><td style="text-align:center">6</td><td style="text-align:center">Six</td><td style="text-align:center">-….</td></tr><tr><td style="text-align:center">7</td><td style="text-align:center">Seven</td><td style="text-align:center">--…</td><td style="text-align:center">8</td><td style="text-align:center">Eight</td><td style="text-align:center">---..</td></tr><tr><td style="text-align:center">9</td><td style="text-align:center">Nine</td><td style="text-align:center">----.</td><td style="text-align:center">0</td><td style="text-align:center">Zero</td><td style="text-align:center">-----</td></tr></tbody></table><h3 id="Q简语">Q简语</h3><p>Q简语是一种标准化的三字母通信简略语，因短语开头字母均为“Q”而得名，用于简化业余无线电通信中传递常用的含义。</p><table><thead><tr><th style="text-align:center">简语</th><th style="text-align:center">问 句</th><th style="text-align:center">答句或报告</th></tr></thead><tbody><tr><td style="text-align:center">QRA</td><td style="text-align:center">你台的名称是什么？</td><td style="text-align:center">我台的名称是......。</td></tr><tr><td style="text-align:center">QRH</td><td style="text-align:center">我的频率稳定吗？</td><td style="text-align:center">你的频率不稳定。</td></tr><tr><td style="text-align:center">QRL</td><td style="text-align:center">你忙吗？</td><td style="text-align:center">我很忙，请不要打扰。</td></tr><tr><td style="text-align:center">QRP</td><td style="text-align:center">要降低发信机功率吗?</td><td style="text-align:center">请减低发信机功率。</td></tr><tr><td style="text-align:center">QRS</td><td style="text-align:center">要我发得慢一些吗?</td><td style="text-align:center">请发得慢一些(每分钟X字).</td></tr><tr><td style="text-align:center">QRT</td><td style="text-align:center">要我停止拍发吗？</td><td style="text-align:center">请停止拍发</td></tr><tr><td style="text-align:center">QRU</td><td style="text-align:center">你有什么发给我吗？</td><td style="text-align:center">我没有什么发给你。</td></tr><tr><td style="text-align:center">QRM</td><td style="text-align:center">你受到他台干扰吗？</td><td style="text-align:center">我受到X干扰(1.无 2.稍有 3.中等 4.严重 5.极端)</td></tr><tr><td style="text-align:center">QRN</td><td style="text-align:center">你受到天电干扰吗？</td><td style="text-align:center">我受到X天电干扰(1.无 2.稍有 3.中等 4.严重 5.极端)</td></tr><tr><td style="text-align:center">QRV</td><td style="text-align:center">你准备好了吗？</td><td style="text-align:center">我准备好了。</td></tr><tr><td style="text-align:center">QTH</td><td style="text-align:center">你的地理位置在...?</td><td style="text-align:center">我的地理位置在...</td></tr><tr><td style="text-align:center">QSB</td><td style="text-align:center">我的信号有衰落吗？</td><td style="text-align:center">你的信号有衰落。</td></tr><tr><td style="text-align:center">QSL</td><td style="text-align:center">你能确认联络吗？</td><td style="text-align:center">我现在确认联络。</td></tr><tr><td style="text-align:center">QSO</td><td style="text-align:center">你能与XX直接或接转通信吗?</td><td style="text-align:center">我能和XX直接或经接转通信.</td></tr><tr><td style="text-align:center">QRZ</td><td style="text-align:center">谁在叫我？</td><td style="text-align:center">XX正在(用..频率)呼叫你。</td></tr><tr><td style="text-align:center">QRX</td><td style="text-align:center">你什么时候在呼叫我？</td><td style="text-align:center">我将在X点种(用..频率)再呼叫您。</td></tr><tr><td style="text-align:center">QSA</td><td style="text-align:center">我的信号强度怎样？</td><td style="text-align:center">你的信号强度是:1.几乎收不到 2.弱 3.还好4.好5.很好.</td></tr><tr><td style="text-align:center">QSY</td><td style="text-align:center">要我改用别的频率拍发吗？</td><td style="text-align:center">请改用别的频率(用..频率)拍发。</td></tr></tbody></table><h2 id="尝试通联">尝试通联</h2><h2 id="进阶玩法">进阶玩法</h2><p>关于进阶的内容，本文章仅简要介绍，后期会推送具体介绍文章。</p><h3 id="制作和交换QSL卡片">制作和交换QSL卡片</h3><h3 id="尝试与卫星通联">尝试与卫星通联</h3><h3 id="到QRZ-com注册一个账号吧">到QRZ.com注册一个账号吧</h3><h3 id="APRS">APRS</h3><p>APRS，即自动位置回报系统（Automatic Packet Report System，简称APRS） 为业余无线电中的一个项目，结合业余无线电和全球卫星定位系统（GPS）以AFSK AX.25通讯模式达到即时位置传送的目的，可以实现短报文传输以及实时地理坐标的共享。</p><h2 id="社会责任">社会责任</h2><p>“体谅、忠诚、进取、友爱、适度、爱国”是国际业余无线电精神，1928年由Paul M.Segal, W9EEA提出。其含义为：</p><ul class="lvl-0"><li class="lvl-2"><p>体谅（Considerate）——绝对不故意在联络中妨碍他人的乐趣。</p></li><li class="lvl-2"><p>忠诚（Loyal）——对同好、俱乐部以及在国内外代表全国业余无线电爱好者的国家协会表示忠诚、鼓励与支持。</p></li><li class="lvl-2"><p>进取（Progressive）——掌握先进科学的知识，装备认真有效的电台，以及无可挑剔的操作。</p></li><li class="lvl-2"><p>友爱（Friendly）——应要求缓慢耐心的发送，对新手的友好指导和建议，善意的帮助合作，以及考虑别人的利益，这些是业余精神的证明。</p></li><li class="lvl-2"><p>适度（Balanced）——业余无线电是一种爱好，绝不因之妨碍对家庭、工作、学校、和社会所应尽的义务。</p></li><li class="lvl-2"><p>爱国（Patriotic）——电台和技术时刻准备服务于国家和社会。</p></li></ul><p>以上是每一位HAM都需要时刻遵守的精神。</p><h2 id="推荐阅读">推荐阅读</h2><ul class="lvl-0"><li class="lvl-2"><p><a href="https://m.bookschina.com/9492874.htm">《业余无线电通信》第六版</a>（童效勇（呼号 BA1AA）、陈方（呼号BA4RC）主持编写；人民邮电出版社出版）</p></li><li class="lvl-2"><p><a href="https://book.qidian.com/info/1025325277/">小说《我们生活在南京》</a>（2021年第32届银河科幻奖获奖作品）</p></li></ul><h2 id="参考文献">参考文献</h2><ol><li class="lvl-3"><p>中国业余无线电“五·五”节的由来：<a href="https://www.chinaham.cn/MMDVM/4.html">https://www.chinaham.cn/MMDVM/4.html</a></p></li></ol><p style="text-align: right">DE BA4RKW VY 73!<br>2025/1/4 写于 江苏南京<br>2025/4/12 完稿于 江苏南京<br>2025/7/27 修改于 河北唐山</p><hr class="footnotes-sep"><section class="footnotes"><ol class="footnotes-list"><li id="fn1" class="footnote-item"><p>工业和信息化部优化业余无线电管理　更好服务业余无线电爱好者：<a href="https://www.miit.gov.cn/zwgk/zcjd/art/2024/art_8413e1f3c63944eab2d8509af4f2d290.html">https://www.miit.gov.cn/zwgk/zcjd/art/2024/art_8413e1f3c63944eab2d8509af4f2d290.html</a> <a href="#fnref1" class="footnote-backref">↩︎</a></p></li></ol></section>]]></content>
    
    
    <summary type="html">&lt;p&gt;本文分别从业余无线电发展史及意义、考试须知、设台须知、法律法规、相关术语等方面进行介绍，既是一篇HAM新人的记录，也是对准备入坑HAM的指南。&lt;/p&gt;
&lt;p&gt;DE BA4RKW VY 73!~✨&lt;/p&gt;</summary>
    
    
    
    <category term="随便写写" scheme="https://blog.kuri.ink/categories/%E9%9A%8F%E4%BE%BF%E5%86%99%E5%86%99/"/>
    
    
    <category term="HAM" scheme="https://blog.kuri.ink/tags/HAM/"/>
    
    <category term="业余无线电" scheme="https://blog.kuri.ink/tags/%E4%B8%9A%E4%BD%99%E6%97%A0%E7%BA%BF%E7%94%B5/"/>
    
    <category term="UV-K6" scheme="https://blog.kuri.ink/tags/UV-K6/"/>
    
  </entry>
  
  <entry>
    <title>树莓派：配置config.txt实现超频及启用HDMI功能</title>
    <link href="https://blog.kuri.ink/posts/%E6%A0%91%E8%8E%93%E6%B4%BE%EF%BC%9A%E9%85%8D%E7%BD%AEconfig.txt%E5%AE%9E%E7%8E%B0%E8%B6%85%E9%A2%91%E5%8F%8A%E5%90%AF%E7%94%A8HDMI%E5%8A%9F%E8%83%BD/"/>
    <id>https://blog.kuri.ink/posts/%E6%A0%91%E8%8E%93%E6%B4%BE%EF%BC%9A%E9%85%8D%E7%BD%AEconfig.txt%E5%AE%9E%E7%8E%B0%E8%B6%85%E9%A2%91%E5%8F%8A%E5%90%AF%E7%94%A8HDMI%E5%8A%9F%E8%83%BD/</id>
    <published>2024-08-10T12:00:59.000Z</published>
    <updated>2025-07-15T13:31:35.744Z</updated>
    
    <content type="html"><![CDATA[<p>本文章以树莓派为例，通过配置 <code>config.txt</code>文件实现对树莓派CPU/GPU的超频并启用HDMI功能。</p><span id="more"></span><h2 id="环境">环境</h2><p>设备：Raspberry Pi 4B（4GB RAM）</p><p>系统：Ubuntu 22.04 LTS（arm64）</p><h2 id="你还需要">你还需要</h2><ul class="lvl-0"><li class="lvl-2"><p>Micro SD Card 读卡器</p></li></ul><h2 id="超频">超频</h2><div class="admonition warning"><p class="admonition-title">注意</p><ol><li><p>在配置<code>config.txt</code>之前，请对原文件进行备份，以免造成树莓派无法启动的后果。</p></li><li><p>超频会造成树莓派运行稳定性下降，请根据实际情况合理超频。</p></li><li><p>将<code>force_turbo</code>选项赋值为 <code>1</code>会使CPU强制在最大频率工作，可能会造成严重发热问题，同时会失去保修。</p></li></ol></div><p>将存储卡连接到电脑上，打开 <code>system-boot</code>文件夹，找到 <code>config.txt</code>文件。</p><p>在文件末尾新增一行，添加以下内容：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><code class="hljs plaintext">[pi4]<br>arm_boost=1<br>over_voltage=6<br>arm_freq=2000<br>gpu_freq=750<br>force_turbo=0<br></code></pre></td></tr></table></figure><p>以下内容摘自 <a href="https://pidoc.cn/docs/computers/config-txt#%E8%B6%85%E9%A2%91%E9%80%89%E9%A1%B9">树莓派文档</a> ：</p><table><thead><tr><th>选项</th><th>描述</th></tr></thead><tbody><tr><td>arm_freq</td><td>ARM CPU 频率（MHz）。</td></tr><tr><td>arm_boost</td><td>将 <code>arm_freq</code>提升至板卡类型和固件支持的最高频率。设置为 <code>1</code>时启用。</td></tr><tr><td>gpu_freq</td><td>同时设置 <code>core_freq</code>、<code>h264_freq</code>、<code>isp_freq</code>、<code>v3d_freq</code>和 <code>hevc_freq</code>。</td></tr><tr><td>core_freq</td><td>GPU 处理器内核的频率（MHz）。影响 CPU 性能，因为它驱动二级缓存和内存总线；二级缓存仅对树莓派 Zero/树莓派 Zero W/树莓派 1 有利；SDRAM 对树莓派2和树莓派3有微小的好处。有关在树莓派4上的使用，请参阅下面的章节。</td></tr><tr><td>h264_freq</td><td>硬件视频模块的频率（MHz）；可单独覆盖 <code>gpu_freq</code>设置。</td></tr><tr><td>isp_freq</td><td>图像传感器流水线模块的频率（MHz）；可单独覆盖 <code>gpu_freq</code>设置。</td></tr><tr><td>v3d_freq</td><td>3D 模块的频率（MHz）；可单独覆盖 <code>gpu_freq</code>设置。在树莓派5上，V3D 独立于 <code>core_freq</code>、<code>isp_freq</code>和 <code>hevc_freq</code>。</td></tr><tr><td>hevc_freq</td><td>高效视频编解码器块的频率（MHz）；可单独覆盖 gpu_freq 设置。仅适用于树莓派4。</td></tr><tr><td>sdram_freq</td><td>SDRAM 频率（MHz）。不支持 树莓派 4 或更新版本的 SDRAM 超频。</td></tr><tr><td>over_voltage</td><td>CPU/GPU内核电压上限。该值范围应为 [-16,8]，相当于 [0.95V,1.55V]（树莓派1 上为 [0.8,1.4V]），步长为 0.025V。换句话说，指定 -16 时，CPU/GPU 内核电压最大值为 0.95V（树莓派 1 为 0.8V）；指定 8 时，CPU/GPU 内核电压最大值为 1.55V（树莓派 1 为 1.4V）。有关默认值，请参见下表。只有指定 <code>force_turbo=1</code>时，才允许电压值超过 6：如果同时设置 <code>over_voltage_*</code>&gt;<code>0</code>，则会设置保修位。</td></tr><tr><td>over_voltage_sdram</td><td>同时设置 <code>over_voltage_sdram_c</code>、<code>over_voltage_sdram_i</code>和 <code>over_voltage_sdram_p</code>。</td></tr><tr><td>over_voltage_sdram_c</td><td>SDRAM 控制器电压调整。[-16,8]相当于 [0.8V,1.4V]，步长为 0.025V。不支持树莓派4或更高版本设备。</td></tr><tr><td>over_voltage_sdram_i</td><td>SDRAM I/O 电压调整。[-16,8] 相当于 [0.8V,1.4V]，步长为 0.025V。不支持树莓派4或更高版本设备。</td></tr><tr><td>over_voltage_sdram_p</td><td>SDRAM phy 电压调整。[-16,8] 相当于 [0.8V,1.4V]，步长为 0.025V。不支持树莓派4或更高版本设备。</td></tr><tr><td>force_turbo</td><td>即使 ARM 内核不忙时也强制执行超频模式频率。如果同时设置了 <code>over_voltage_*</code>，则启用此功能可能会设置保修位。</td></tr><tr><td>initial_turbo</td><td>在给定值（秒）或 cpufreq 设置频率之前，从启动开始启用<a href="https://forums.raspberrypi.com/viewtopic.php?f=29&amp;t=6201&amp;start=425">超频模式</a>。最大值为 <code>60</code>。</td></tr><tr><td>arm_freq_min</td><td>用于动态频率时钟的 <code>arm_freq</code>最小值。请注意，将该值降至默认值以下并不会显著降低功耗，目前也不支持该功能。</td></tr><tr><td>core_freq_min</td><td>用于动态频率时钟的 <code>core_freq</code>最小值。</td></tr><tr><td>gpu_freq_min</td><td>用于动态频率时钟的 <code>gpu_freq</code>最小值。</td></tr><tr><td>h264_freq_min</td><td>用于动态频率时钟的 <code>h264_freq</code>最小值。</td></tr><tr><td>isp_freq_min</td><td>用于动态频率时钟的 <code>isp_freq</code>最小值。</td></tr><tr><td>v3d_freq_min</td><td>用于动态频率时钟的 <code>v3d_freq</code>最小值。</td></tr><tr><td>hevc_freq_min</td><td>用于动态频率时钟的 <code>hevc_freq</code>最小值。</td></tr><tr><td>sdram_freq_min</td><td>用于动态频率时钟的 <code>sdram_freq</code>最小值。</td></tr><tr><td>over_voltage_min</td><td>用于动态频率时钟的 <code>over_voltage</code>。该值范围应为 [-16,8]，相当于 [0.8V,1.4V]，步长为 0.025V。换句话说，指定 -16 时，CPU/GPU 内核空闲电压为 0.8V，指定 8 时，最低电压为 1.4V。此设置在树莓派4和树莓派5上已被弃用。</td></tr><tr><td>over_voltage_delta</td><td>在 树莓派4和树莓派5上，over_voltage_delta 参数会在 DVFS 算法计算出的数值上添加以微伏为单位的偏移量。</td></tr><tr><td>temp_limit</td><td>过热保护。当 SoC 达到该值（摄氏度）时，该参数会将时钟和电压设置为默认值。超过 85 的值将被箝位在 85。</td></tr><tr><td>temp_soft_limit</td><td><strong>仅限 3A+/3B+</strong> 。CPU 速度节流控制。该值用于设置 CPU 时钟速度节流系统启动时的温度。在此温度下，时钟速度将从<a href="http://pan.baidu.com/s/1400MHz#undefined">1400MHz</a>降至<a href="http://pan.baidu.com/s/1200MHz#undefined">1200MHz</a>。默认值为 <code>60</code>，最大可升至 <code>70</code>，但可能导致不稳定。</td></tr></tbody></table><h2 id="HDMI配置">HDMI配置</h2><p>新增一行，添加下列内容（其中 <code>hdmi_group</code>和 <code>hdmi_mode</code>的值视具体情况而定）：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><code class="hljs plaintext">hdmi_group=1<br>hdmi_mode=16<br>hdmi_enable_4kp60=1<br>hdmi_force_hotplug=1<br>config_hdmi_boost=4<br></code></pre></td></tr></table></figure><p>将下列内容注释掉：</p><figure class="highlight 1c"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs 1c"><span class="hljs-meta"># dtoverlay=vc4-kms-v3d,cma-128</span><br></code></pre></td></tr></table></figure><p><code>hdmi_group</code>和 <code>hdmi_mode</code>的赋值详见 <a href="https://shumeipai.nxez.com/2013/08/31/custom-display-resolution-raspberry-pie.html">自定义树莓派的显示分辨率 - 树莓派实验室</a></p><h2 id="原版-config-txt">原版 <code>config.txt</code></h2><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br></pre></td><td class="code"><pre><code class="hljs plaintext">[all]<br>kernel=vmlinuz<br>cmdline=cmdline.txt<br>initramfs initrd.img followkernel<br><br>[pi4]<br>max_framebuffers=2<br>arm_boost=1<br><br>[all]<br># Enable the audio output, I2C and SPI interfaces on the GPIO header. As these<br># parameters related to the base device-tree they must appear *before* any<br># other dtoverlay= specification<br>dtparam=audio=on<br>dtparam=i2c_arm=on<br>dtparam=spi=on<br><br># Comment out the following line if the edges of the desktop appear outside<br># the edges of your display<br>disable_overscan=1<br><br># If you have issues with audio, you may try uncommenting the following line<br># which forces the HDMI output into HDMI mode instead of DVI (which doesn&#x27;t<br># support audio output)<br>#hdmi_drive=2<br><br># Enable the serial pins<br>enable_uart=1<br><br># Autoload overlays for any recognized cameras or displays that are attached<br># to the CSI/DSI ports. Please note this is for libcamera support, *not* for<br># the legacy camera stack<br>camera_auto_detect=1<br>display_auto_detect=1<br><br># Config settings specific to arm64<br>arm_64bit=1<br>dtoverlay=dwc2<br><br># Enable the KMS (&quot;full&quot; KMS) graphics overlay, leaving GPU memory as the<br># default (the kernel is in control of graphics memory with full KMS)<br>dtoverlay=vc4-kms-v3d<br>disable_fw_kms_setup=1<br><br>[pi3+]<br># Use a smaller contiguous memory area, specifically on the 3A+ to avoid an<br># OOM oops on boot. The 3B+ is also affected by this section, but it shouldn&#x27;t<br># cause any issues on that board<br>dtoverlay=vc4-kms-v3d,cma-128<br><br>[pi02]<br># The Zero 2W is another 512MB board which is occasionally affected by the same<br># OOM oops on boot.<br>dtoverlay=vc4-kms-v3d,cma-128<br><br>[all]<br><br>[cm4]<br># Enable the USB2 outputs on the IO board (assuming your CM4 is plugged into<br># such a board)<br>dtoverlay=dwc2,dr_mode=host<br><br>[all]<br><br></code></pre></td></tr></table></figure>]]></content>
    
    
    <summary type="html">&lt;p&gt;本文章以树莓派为例，通过配置 &lt;code&gt;config.txt&lt;/code&gt;文件实现对树莓派CPU/GPU的超频并启用HDMI功能。&lt;/p&gt;</summary>
    
    
    
    <category term="随便写写" scheme="https://blog.kuri.ink/categories/%E9%9A%8F%E4%BE%BF%E5%86%99%E5%86%99/"/>
    
    
    <category term="树莓派" scheme="https://blog.kuri.ink/tags/%E6%A0%91%E8%8E%93%E6%B4%BE/"/>
    
    <category term="配置文件" scheme="https://blog.kuri.ink/tags/%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6/"/>
    
    <category term="HDMI" scheme="https://blog.kuri.ink/tags/HDMI/"/>
    
    <category term="超频" scheme="https://blog.kuri.ink/tags/%E8%B6%85%E9%A2%91/"/>
    
  </entry>
  
  <entry>
    <title>IPv6：电信光猫IPv6网络配置</title>
    <link href="https://blog.kuri.ink/posts/IPv6%EF%BC%9A%E7%94%B5%E4%BF%A1%E5%85%89%E7%8C%ABIPv6%E7%BD%91%E7%BB%9C%E9%85%8D%E7%BD%AE/"/>
    <id>https://blog.kuri.ink/posts/IPv6%EF%BC%9A%E7%94%B5%E4%BF%A1%E5%85%89%E7%8C%ABIPv6%E7%BD%91%E7%BB%9C%E9%85%8D%E7%BD%AE/</id>
    <published>2024-07-16T12:19:00.000Z</published>
    <updated>2026-02-03T08:54:25.961Z</updated>
    
    <content type="html"><![CDATA[<p>本文章以 <code>天翼网关 4.0</code>（设备型号：<code>ZXHN F610GV9</code>）为例，实际演示电信光猫IPv6网络的配置。</p><span id="more"></span><h2 id="配置方法">配置方法</h2><p>打开浏览器，在地址栏键入光猫的局域网IP地址（我的是 <code>192.168.1.1</code>），进入光猫后台。</p><p><img data-fancybox="gallery" data-sizes="auto" data-src="https://imageurl.kuri.ink/images/posts/ipv6_dx/0.png" alt="img" class="lazyload"></p><p>输入管理员用户名及密码，用户名：<code>telecomadmin</code>，密码：<code>nE7jA%5m</code>。</p><p>点击导航栏中的“网络”→“网络设置”，选择连接名称及IP模式。</p><p><img data-fancybox="gallery" data-sizes="auto" data-src="https://imageurl.kuri.ink/images/posts/ipv6_dx/6.png" alt="img" class="lazyload"></p><p><img data-fancybox="gallery" data-sizes="auto" data-src="https://imageurl.kuri.ink/images/posts/ipv6_dx/7.png" alt="img" class="lazyload"></p><p><img data-fancybox="gallery" data-sizes="auto" data-src="https://imageurl.kuri.ink/images/posts/ipv6_dx/8.png" alt="img" class="lazyload"></p><p>将“IPv6”信息修改为下图所示并<strong>保存</strong>：</p><p><img data-fancybox="gallery" data-sizes="auto" data-src="https://imageurl.kuri.ink/images/posts/ipv6_dx/9.png" alt="img" class="lazyload"></p><blockquote><p>地址获取方式：AutoConfigured<br>获取前缀：是前缀获取方式：PrefixDelegration<br>DNS获取方式：DHCPv6</p></blockquote><p>回退到“用户侧管理”，点击“IPv6设置”，将本页设置修改为下图所示并保存。</p><p><img data-fancybox="gallery" data-sizes="auto" data-src="https://imageurl.kuri.ink/images/posts/ipv6_dx/2.png" alt="img" class="lazyload"></p><p><img data-fancybox="gallery" data-sizes="auto" data-src="https://imageurl.kuri.ink/images/posts/ipv6_dx/4.png" alt="img" class="lazyload"></p><p><img data-fancybox="gallery" data-sizes="auto" data-src="https://imageurl.kuri.ink/images/posts/ipv6_dx/5.png" alt="img" class="lazyload"></p><p>打开路由器后台，在IPv6相关设置下更改为“桥模式”。</p><p>重启光猫及路由器。</p><p>打开网页<a href="https://ipw.cn/">IPW.cn</a>，检查IPv6连接情况。</p><p>若为下图所示，证明配置成功</p><p><img data-fancybox="gallery" data-sizes="auto" data-src="https://imageurl.kuri.ink/images/posts/ipv6_dx/10.png" alt="img" class="lazyload"></p><h2 id="IPv6有什么好处">IPv6有什么好处</h2><h3 id="免去内网穿透的烦恼">免去内网穿透的烦恼</h3><p>每一个IPv6地址都是一个公网IP地址。这使得游戏联机、远程连接等更加便捷。</p><h3 id="实现真正意义上的P2P">实现真正意义上的P2P</h3><p>每一个IPv6地址对应一个设备，为点对点传输创造了条件。</p><h3 id="取之不尽用之不竭">取之不尽用之不竭</h3><p>IPv6的地址池足够巨大，甚至可以为地球上每一粒沙子都分配一个IPv6地址。</p>]]></content>
    
    
    <summary type="html">&lt;p&gt;本文章以 &lt;code&gt;天翼网关 4.0&lt;/code&gt;（设备型号：&lt;code&gt;ZXHN F610GV9&lt;/code&gt;）为例，实际演示电信光猫IPv6网络的配置。&lt;/p&gt;</summary>
    
    
    
    <category term="随便写写" scheme="https://blog.kuri.ink/categories/%E9%9A%8F%E4%BE%BF%E5%86%99%E5%86%99/"/>
    
    
    <category term="IPv6" scheme="https://blog.kuri.ink/tags/IPv6/"/>
    
    <category term="中国电信" scheme="https://blog.kuri.ink/tags/%E4%B8%AD%E5%9B%BD%E7%94%B5%E4%BF%A1/"/>
    
    <category term="网络" scheme="https://blog.kuri.ink/tags/%E7%BD%91%E7%BB%9C/"/>
    
  </entry>
  
  <entry>
    <title>Spyder：[WinError 126] 找不到指定的模块 错误的解决</title>
    <link href="https://blog.kuri.ink/posts/Spyder%EF%BC%9A[WinError%20126]%20%E6%89%BE%E4%B8%8D%E5%88%B0%E6%8C%87%E5%AE%9A%E7%9A%84%E6%A8%A1%E5%9D%97%20%E9%94%99%E8%AF%AF%E7%9A%84%E8%A7%A3%E5%86%B3/"/>
    <id>https://blog.kuri.ink/posts/Spyder%EF%BC%9A[WinError%20126]%20%E6%89%BE%E4%B8%8D%E5%88%B0%E6%8C%87%E5%AE%9A%E7%9A%84%E6%A8%A1%E5%9D%97%20%E9%94%99%E8%AF%AF%E7%9A%84%E8%A7%A3%E5%86%B3/</id>
    <published>2023-08-20T13:56:53.000Z</published>
    <updated>2025-07-15T13:31:35.744Z</updated>
    
    <content type="html"><![CDATA[<p>Spyder [WinError 126] 找不到指定的模块 错误的解决.</p><span id="more"></span><h2 id="问题分析">问题分析</h2><p>考虑为Python解释器路径有误，导致Spyder无法正确连接到Ipython内核。</p><h2 id="解决办法">解决办法</h2><h3 id="寻找系统Python解释器路径">寻找系统Python解释器路径</h3><p>在CMD中键入：</p><figure class="highlight applescript"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs applescript"><span class="hljs-keyword">where</span> python<br></code></pre></td></tr></table></figure><p>返回值即为 Python 解释器路径，将该路径复制到剪切板。</p><h3 id="配置自定义解释器">配置自定义解释器</h3><p>Spyder中依次找到：工具 --&gt; 偏好 --&gt; Python 解释器 --&gt; 使用下列 Python 解释器</p><p><img data-fancybox="gallery" data-sizes="auto" data-src="https://cdn.jsdelivr.net/gh/imageurl/fly6022@masterhttps://imageurl.kuri.ink/images/posts/spyder126/01.png" alt="01" class="lazyload"></p><p>将 Python 解释器路径 粘贴过来。</p><p>重启 Spyder</p><h3 id="安装依赖">安装依赖</h3><p>CMD中输入：</p><figure class="highlight abnf"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs abnf">pip install spyder-kernels<span class="hljs-operator">=</span><span class="hljs-operator">=</span><span class="hljs-number">2.0</span>.*<br></code></pre></td></tr></table></figure><p>重启 Spyder，即可解决问题。</p>]]></content>
    
    
    <summary type="html">&lt;p&gt;Spyder [WinError 126] 找不到指定的模块 错误的解决.&lt;/p&gt;</summary>
    
    
    
    <category term="编程开发" scheme="https://blog.kuri.ink/categories/%E7%BC%96%E7%A8%8B%E5%BC%80%E5%8F%91/"/>
    
    
    <category term="Spyder" scheme="https://blog.kuri.ink/tags/Spyder/"/>
    
    <category term="Python" scheme="https://blog.kuri.ink/tags/Python/"/>
    
  </entry>
  
  <entry>
    <title>记录一次 基于 Fiddler 工具的 Web 逆向分析</title>
    <link href="https://blog.kuri.ink/posts/%E8%AE%B0%E5%BD%95%E4%B8%80%E6%AC%A1%20%E5%9F%BA%E4%BA%8E%20Fiddler%20%E5%B7%A5%E5%85%B7%E7%9A%84%20Web%20%E9%80%86%E5%90%91%E5%88%86%E6%9E%90/"/>
    <id>https://blog.kuri.ink/posts/%E8%AE%B0%E5%BD%95%E4%B8%80%E6%AC%A1%20%E5%9F%BA%E4%BA%8E%20Fiddler%20%E5%B7%A5%E5%85%B7%E7%9A%84%20Web%20%E9%80%86%E5%90%91%E5%88%86%E6%9E%90/</id>
    <published>2023-07-31T15:06:59.000Z</published>
    <updated>2025-07-15T13:31:35.744Z</updated>
    
    <content type="html"><![CDATA[<p>本文章以 <a href="https://easylearn.baidu.com/edu-page/tiangong/questiondetail">百度题库: https://easylearn.baidu.com/edu-page/tiangong/questiondetail</a> 为例，采用 Fiddler 工具及 Python 语言实现 Web 逆向分析。</p><span id="more"></span><div class="admonition error"><p class="admonition-title">法律风险告知</p><p>本文仅用于编程及相关技术的学习交流及经验分享，请勿利用相关技术手段从事商业侵权以及其它违法犯罪活动！</p></div><h2 id="网页客户端操作逻辑">网页客户端操作逻辑</h2><p>该网站是学习类网站，主要功能是提供作业习题内容及相关解析，客户端的操作逻辑是：用户将题目输入到搜索框，之后点击“搜索试题”按钮，网页便重定向到对应的页面。与搜索引擎的操作逻辑类似。</p><p><img data-fancybox="gallery" data-sizes="auto" data-src="https://imageurl.kuri.ink/images/posts/fw1/02.png" alt="02" class="lazyload"></p><p>注意到，当按下“搜索试题”按钮后，URL后面多了键名为 <code>query</code>，键值为 <code>黄河小浪底水利枢纽是治理开发黄河的关键性工程。阅读材料回答问题。(14分) 材料</code>(编码后为：<code>%E9%BB%84%E6%B2%B3%E5%B0%8F%E6%B5%AA%E5%BA%95%E6%B0%B4%E5%88%A9%E6%9E%A2%E7%BA%BD%E6%98%AF%E6%B2%BB%E7%90%86%E5%BC%80%E5%8F%91%E9%BB%84%E6%B2%B3%E7%9A%84%E5%85%B3%E9%94%AE%E6%80%A7%E5%B7%A5%E7%A8%8B%E3%80%82%E9%98%85%E8%AF%BB%E6%9D%90%E6%96%99%E5%9B%9E%E7%AD%94%E9%97%AE%E9%A2%98%E3%80%82%2814%E5%88%86%29%20%E6%9D%90%E6%96%99</code>)的内容。</p><p><img data-fancybox="gallery" data-sizes="auto" data-src="https://imageurl.kuri.ink/images/posts/fw1/04.png" alt="04" class="lazyload"></p><p>点击任意一条信息，我们跳转到了一个新页面，这个页面有一些像 作业帮 的搜题界面。</p><p>此页面展示了习题的题目内容及解答步骤。</p><p>同时，URL也发生了变化，此处的URL为 <code>https://easylearn.baidu.com/edu-page/tiangong/questiondetail?id=1714572139188923485&amp;from=jySearch</code>。</p><p>注意到此处出现了一个新参数 <code>id</code>，它的值为 <code>1714572139188923485</code></p><h2 id="实现原理及逆向工程">实现原理及逆向工程</h2><p>为了弄清以上操作的实际原理，我们使用 Fiddler 工具，对刚才的全部过程进行记录，并且抓取部分请求片段进行分析。</p><p><img data-fancybox="gallery" data-sizes="auto" data-src="https://imageurl.kuri.ink/images/posts/fw1/03.png" alt="03" class="lazyload"></p><p>在刚才的请求操作中，以下请求片段引起了我们的注意：</p><figure class="highlight llvm"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs llvm">GET https://easylearn.baidu.com/edu-web/content/search?query<span class="hljs-operator">=</span><span class="hljs-variable">%E9</span><span class="hljs-variable">%BB</span><span class="hljs-variable">%84</span><span class="hljs-variable">%E6</span><span class="hljs-variable">%B2</span><span class="hljs-variable">%B3</span><span class="hljs-variable">%E5</span><span class="hljs-variable">%B0</span><span class="hljs-variable">%8</span>F<span class="hljs-variable">%E6</span><span class="hljs-variable">%B5</span><span class="hljs-variable">%AA</span><span class="hljs-variable">%E5</span><span class="hljs-variable">%BA</span><span class="hljs-variable">%95</span><span class="hljs-variable">%E6</span><span class="hljs-variable">%B0</span><span class="hljs-variable">%B4</span><span class="hljs-variable">%E5</span><span class="hljs-variable">%88</span><span class="hljs-variable">%A9</span><span class="hljs-variable">%E6</span><span class="hljs-variable">%9</span>E<span class="hljs-variable">%A2</span><span class="hljs-variable">%E7</span><span class="hljs-variable">%BA</span><span class="hljs-variable">%BD</span><span class="hljs-variable">%E6</span><span class="hljs-variable">%98</span><span class="hljs-variable">%AF</span><span class="hljs-variable">%E6</span><span class="hljs-variable">%B2</span><span class="hljs-variable">%BB</span><span class="hljs-variable">%E7</span><span class="hljs-variable">%90</span><span class="hljs-variable">%86</span><span class="hljs-variable">%E5</span><span class="hljs-variable">%BC</span><span class="hljs-variable">%80</span><span class="hljs-variable">%E5</span><span class="hljs-variable">%8</span>F<span class="hljs-variable">%91</span><span class="hljs-variable">%E9</span><span class="hljs-variable">%BB</span><span class="hljs-variable">%84</span><span class="hljs-variable">%E6</span><span class="hljs-variable">%B2</span><span class="hljs-variable">%B3</span><span class="hljs-variable">%E7</span><span class="hljs-variable">%9</span>A<span class="hljs-variable">%84</span><span class="hljs-variable">%E5</span><span class="hljs-variable">%85</span><span class="hljs-variable">%B3</span><span class="hljs-variable">%E9</span><span class="hljs-variable">%94</span><span class="hljs-variable">%AE</span><span class="hljs-variable">%E6</span><span class="hljs-variable">%80</span><span class="hljs-variable">%A7</span><span class="hljs-variable">%E5</span><span class="hljs-variable">%B7</span><span class="hljs-variable">%A5</span><span class="hljs-variable">%E7</span><span class="hljs-variable">%A8</span><span class="hljs-variable">%8</span>B<span class="hljs-variable">%E3</span><span class="hljs-variable">%80</span><span class="hljs-variable">%82</span><span class="hljs-variable">%E9</span><span class="hljs-variable">%98</span><span class="hljs-variable">%85</span><span class="hljs-variable">%E8</span><span class="hljs-variable">%AF</span><span class="hljs-variable">%BB</span><span class="hljs-variable">%E6</span><span class="hljs-variable">%9</span>D<span class="hljs-variable">%90</span><span class="hljs-variable">%E6</span><span class="hljs-variable">%96</span><span class="hljs-variable">%99</span><span class="hljs-variable">%E5</span><span class="hljs-variable">%9</span>B<span class="hljs-variable">%9</span>E<span class="hljs-variable">%E7</span><span class="hljs-variable">%AD</span><span class="hljs-variable">%94</span><span class="hljs-variable">%E9</span><span class="hljs-variable">%97</span><span class="hljs-variable">%AE</span><span class="hljs-variable">%E9</span><span class="hljs-variable">%A2</span><span class="hljs-variable">%98</span><span class="hljs-variable">%E3</span><span class="hljs-variable">%80</span><span class="hljs-variable">%82</span>(<span class="hljs-number">14</span><span class="hljs-variable">%E5</span><span class="hljs-variable">%88</span><span class="hljs-variable">%86</span>)+<span class="hljs-variable">%E6</span><span class="hljs-variable">%9</span>D<span class="hljs-variable">%90</span><span class="hljs-variable">%E6</span><span class="hljs-variable">%96</span><span class="hljs-variable">%99</span>&amp;<span class="hljs-keyword">type</span><span class="hljs-operator">=</span>&amp;page<span class="hljs-operator">=</span><span class="hljs-number">1</span>&amp;pageSize<span class="hljs-operator">=</span><span class="hljs-number">10</span>&amp;clientType<span class="hljs-operator">=</span>pc HTTP/<span class="hljs-number">1.1</span><br></code></pre></td></tr></table></figure><p>它将 <code>query</code>的值由客户端发送到了服务端。</p><p>服务端返回的数据是一段 <code>JSON</code>文本（实际内容较长，此处保留了一部分）：</p><figure class="highlight swift"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br></pre></td><td class="code"><pre><code class="hljs swift">&#123;<br>  <span class="hljs-string">&quot;errno&quot;</span>: <span class="hljs-number">0</span>,<br>  <span class="hljs-string">&quot;errmsg&quot;</span>: <span class="hljs-string">&quot;success&quot;</span>,<br>  <span class="hljs-string">&quot;data&quot;</span>: &#123;<br>    <span class="hljs-string">&quot;count&quot;</span>: <span class="hljs-number">50</span>,<br>    <span class="hljs-string">&quot;list&quot;</span>: [<br>      &#123;<br>        <span class="hljs-string">&quot;entityId&quot;</span>: <span class="hljs-string">&quot;1714572139188923485&quot;</span>,<br>        <span class="hljs-string">&quot;title&quot;</span>: <span class="hljs-string">&quot;&lt;div&gt;&lt;span class=<span class="hljs-subst">\&quot;</span>high-light<span class="hljs-subst">\&quot;</span>&gt;黄河小浪底水利枢纽是治理开发黄河&lt;/span&gt;的&lt;span class=<span class="hljs-subst">\&quot;</span>high-light<span class="hljs-subst">\&quot;</span>&gt;关键性工程&lt;/span&gt;。&lt;span class=<span class="hljs-subst">\&quot;</span>high-light<span class="hljs-subst">\&quot;</span>&gt;阅读材料回答问题&lt;/span&gt;。 &lt;span class=<span class="hljs-subst">\&quot;</span>high-light<span class="hljs-subst">\&quot;</span>&gt;材料&lt;/span&gt;一 图a为&lt;span class=<span class="hljs-subst">\&quot;</span>high-light<span class="hljs-subst">\&quot;</span>&gt;黄河&lt;/span&gt;水系图,图b为&lt;span class=<span class="hljs-subst">\&quot;</span>high-light<span class="hljs-subst">\&quot;</span>&gt;黄河&lt;/span&gt;流量与含沙量统计图...&lt;/div&gt;&quot;</span>,<br>        <span class="hljs-string">&quot;hotLevel&quot;</span>: <span class="hljs-number">100.3</span>,<br>        <span class="hljs-string">&quot;difficulty&quot;</span>: <span class="hljs-number">4</span>,<br>        <span class="hljs-string">&quot;sourceType&quot;</span>: <span class="hljs-string">&quot;question&quot;</span>,<br>        <span class="hljs-string">&quot;subject&quot;</span>: <span class="hljs-string">&quot;其他&quot;</span>,<br>        <span class="hljs-string">&quot;step&quot;</span>: <span class="hljs-string">&quot;其他&quot;</span>,<br>        <span class="hljs-string">&quot;knowPoint&quot;</span>: <span class="hljs-string">&quot;&quot;</span>,<br>        <span class="hljs-string">&quot;hasVideo&quot;</span>: <span class="hljs-literal">false</span>,<br>        <span class="hljs-string">&quot;hasDocument&quot;</span>: <span class="hljs-literal">true</span>,<br>        <span class="hljs-string">&quot;viewNum&quot;</span>: <span class="hljs-string">&quot;9.1w&quot;</span>,<br>        <span class="hljs-string">&quot;docPriority&quot;</span>: <span class="hljs-number">4</span><br>      &#125;,<br>      &#123;<br>        <span class="hljs-string">&quot;entityId&quot;</span>: <span class="hljs-string">&quot;1735129348683347666&quot;</span>,<br>        <span class="hljs-string">&quot;title&quot;</span>: <span class="hljs-string">&quot;&lt;div&gt;&lt;span class=<span class="hljs-subst">\&quot;</span>high-light<span class="hljs-subst">\&quot;</span>&gt;黄河小浪底水利枢纽是治理开发黄河&lt;/span&gt;的&lt;span class=<span class="hljs-subst">\&quot;</span>high-light<span class="hljs-subst">\&quot;</span>&gt;关键性工程&lt;/span&gt;。&lt;span class=<span class="hljs-subst">\&quot;</span>high-light<span class="hljs-subst">\&quot;</span>&gt;阅读材料回答问题&lt;/span&gt;。  &lt;span class=<span class="hljs-subst">\&quot;</span>high-light<span class="hljs-subst">\&quot;</span>&gt;材料&lt;/span&gt;一 图a为&lt;span class=<span class="hljs-subst">\&quot;</span>high-light<span class="hljs-subst">\&quot;</span>&gt;黄河&lt;/span&gt;水系图，图b为&lt;span class=<span class="hljs-subst">\&quot;</span>high-light<span class="hljs-subst">\&quot;</span>&gt;黄河&lt;/span&gt;流量与含沙量统计...&lt;/div&gt;&quot;</span>,<br>        <span class="hljs-string">&quot;hotLevel&quot;</span>: <span class="hljs-number">102</span>,<br>        <span class="hljs-string">&quot;difficulty&quot;</span>: <span class="hljs-number">2</span>,<br>        <span class="hljs-string">&quot;sourceType&quot;</span>: <span class="hljs-string">&quot;question&quot;</span>,<br>        <span class="hljs-string">&quot;subject&quot;</span>: <span class="hljs-string">&quot;地理&quot;</span>,<br>        <span class="hljs-string">&quot;step&quot;</span>: <span class="hljs-string">&quot;高中&quot;</span>,<br>        <span class="hljs-string">&quot;knowPoint&quot;</span>: <span class="hljs-string">&quot;&quot;</span>,<br>        <span class="hljs-string">&quot;hasVideo&quot;</span>: <span class="hljs-literal">false</span>,<br>        <span class="hljs-string">&quot;hasDocument&quot;</span>: <span class="hljs-literal">true</span>,<br>        <span class="hljs-string">&quot;viewNum&quot;</span>: <span class="hljs-string">&quot;4.9w&quot;</span>,<br>        <span class="hljs-string">&quot;docPriority&quot;</span>: <span class="hljs-number">4</span><br>      &#125;<br>    ]<br>  &#125;<br>&#125;<br></code></pre></td></tr></table></figure><p>不难发现，此处的 <code>entityId</code>键值与之前在 <code>URL</code>中看到的 <code>id</code>的键值是一致的，因此，我们猜测它们有一定的关系。</p><p><img data-fancybox="gallery" data-sizes="auto" data-src="https://imageurl.kuri.ink/images/posts/fw1/05.png" alt="05" class="lazyload"></p><p>同样的，我们发现了类似的请求片段：</p><figure class="highlight awk"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs awk">GET https:<span class="hljs-regexp">//</span>easylearn.baidu.com<span class="hljs-regexp">/edu-web-go/</span>shiti<span class="hljs-regexp">/basicinfo?id=1714572139188923485&amp;eqid=&amp;clientType=pc HTTP/</span><span class="hljs-number">1.1</span><br></code></pre></td></tr></table></figure><p>服务端返回的数据是一段 <code>JSON</code>文本：</p><figure class="highlight pgsql"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br></pre></td><td class="code"><pre><code class="hljs pgsql">&#123;<br>    &quot;errno&quot;:<span class="hljs-number">0</span>,<br>    &quot;errmsg&quot;:&quot;success&quot;,<br>    &quot;data&quot;:&#123;<br>        &quot;answer&quot;:[<br>            &#123;<br>                &quot;tag&quot;:&quot;解答&quot;,<br>                &quot;desc&quot;:&quot;&lt;div class=&quot;IILbHc&quot;&gt;&lt;div class=&quot;GSfhdv&quot; style=&quot;<span class="hljs-type">text</span>-indent:<span class="hljs-number">21.0</span>pt;&quot;&gt;成整正织该厂员人&lt;/div&gt;&lt;span&gt;&lt;div class=&quot;GSfhdv&quot; style=&quot;<span class="hljs-type">text</span>-indent:<span class="hljs-number">21.0</span>pt;&quot;&gt;成整正织该厂员人&lt;/div&gt;[答案]小浪底水利枢纽改变了海陆间水循环的地表径流环节和库区的水汽蒸发环节(2分);调节了下游河段河流流量的季节变化,减少了泥沙对下游河道的沉积,并对河口三角洲海陆变化产生的影响。(3分)&lt;/span&gt;&lt;div class=&quot;GSfhdv&quot; style=&quot;<span class="hljs-type">text</span>-indent:<span class="hljs-number">21.0</span>pt;&quot;&gt;成整正织该厂员人&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;GSfhdv&quot; style=&quot;<span class="hljs-type">text</span>-indent:<span class="hljs-number">21.0</span>pt;&quot;&gt;成整正织该厂员人&lt;/div&gt;&quot;<br>            &#125;<br>        ],<br>        &quot;choice&quot;:[<br><br>        ],<br>        &quot;collectNum&quot;:<span class="hljs-number">0</span>,<br>        &quot;difficulty&quot;:<span class="hljs-number">1</span>,<br>        &quot;first&quot;:<span class="hljs-keyword">false</span>,<br>        &quot;hotLevel&quot;:<span class="hljs-number">84.6</span>,<br>        &quot;id&quot;:&quot;1714572139188923485&quot;,<br>        &quot;isCollect&quot;:<span class="hljs-number">0</span>,<br>        &quot;isLike&quot;:<span class="hljs-number">0</span>,<br>        &quot;isShowAnswer&quot;:<span class="hljs-keyword">false</span>,<br>        &quot;isShowOcr&quot;:<span class="hljs-number">0</span>,<br>        &quot;knowList&quot;:[<br><br>        ],<br>        &quot;likeNum&quot;:<span class="hljs-number">0</span>,<br>        &quot;material&quot;:[<br><br>        ],<br>        &quot;ocrData&quot;:[<br><br>        ],<br>        &quot;query&quot;:&quot;&quot;,<br>        &quot;question&quot;:&quot;&lt;div class=&quot;DlYrCn&quot;&gt;&lt;div class=&quot;uhTjAb&quot; style=&quot;<span class="hljs-type">text</span>-indent:<span class="hljs-number">21.0</span>pt;&quot;&gt;身整作四值面准近圆&lt;/div&gt;&lt;span&gt;&lt;div class=&quot;uhTjAb&quot; style=&quot;<span class="hljs-type">text</span>-indent:<span class="hljs-number">21.0</span>pt;&quot;&gt;身整作四值面准近圆&lt;/div&gt;黄河小浪底水利枢纽是治理开发黄河的关键性工程。阅读材料回答问题。(14分)&lt;/span&gt;&lt;div class=&quot;uhTjAb&quot; style=&quot;<span class="hljs-type">text</span>-indent:<span class="hljs-number">21.0</span>pt;&quot;&gt;身整作四值面准近圆&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;uhTjAb&quot; style=&quot;<span class="hljs-type">text</span>-indent:<span class="hljs-number">21.0</span>pt;&quot;&gt;身整作四值面准近圆&lt;/div&gt;&lt;div class=&quot;DlYrCn&quot;&gt;&lt;div class=&quot;uhTjAb&quot; style=&quot;<span class="hljs-type">text</span>-indent:<span class="hljs-number">21.0</span>pt;&quot;&gt;身整作四值面准近圆&lt;/div&gt;&lt;span&gt;&lt;div class=&quot;uhTjAb&quot; style=&quot;<span class="hljs-type">text</span>-indent:<span class="hljs-number">21.0</span>pt;&quot;&gt;身整作四值面准近圆&lt;/div&gt;材料一  图A为黄河水系图,图B为黄河流量与含沙量统计图。&lt;/span&gt;&lt;div class=&quot;uhTjAb&quot; style=&quot;<span class="hljs-type">text</span>-indent:<span class="hljs-number">21.0</span>pt;&quot;&gt;身整作四值面准近圆&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;uhTjAb&quot; style=&quot;<span class="hljs-type">text</span>-indent:<span class="hljs-number">21.0</span>pt;&quot;&gt;身整作四值面准近圆&lt;/div&gt;&lt;div class=&quot;DlYrCn&quot;&gt;&lt;div class=&quot;uhTjAb&quot; style=&quot;<span class="hljs-type">text</span>-indent:<span class="hljs-number">21.0</span>pt;&quot;&gt;身整作四值面准近圆&lt;/div&gt;&lt;img class=&quot;img-max&quot; src=&quot;https://tiku-data.cdn.bcebos.com/originalpic/<span class="hljs-number">89</span>c12155f5ce077c1ba56d29ff103a25.jpg?auth_key=<span class="hljs-number">2320402241</span><span class="hljs-number">-0</span><span class="hljs-number">-0</span>-acd57f0481a5f474e595b0ed62498bc8&quot; style=&quot;width:<span class="hljs-number">588.00</span>px;height:<span class="hljs-number">209.00</span>px&quot;&gt;&lt;div class=&quot;uhTjAb&quot; style=&quot;<span class="hljs-type">text</span>-indent:<span class="hljs-number">21.0</span>pt;&quot;&gt;身整作四值面准近圆&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;uhTjAb&quot; style=&quot;<span class="hljs-type">text</span>-indent:<span class="hljs-number">21.0</span>pt;&quot;&gt;身整作四值面准近圆&lt;/div&gt;&lt;div class=&quot;DlYrCn&quot;&gt;&lt;div class=&quot;uhTjAb&quot; style=&quot;<span class="hljs-type">text</span>-indent:<span class="hljs-number">21.0</span>pt;&quot;&gt;身整作四值面准近圆&lt;/div&gt;&lt;span&gt;&lt;div class=&quot;uhTjAb&quot; style=&quot;<span class="hljs-type">text</span>-indent:<span class="hljs-number">21.0</span>pt;&quot;&gt;身整作四值面准近圆&lt;/div&gt;材料二  黄河小浪底水利枢纽位于黄河中游最后一段峡谷的出口处,以防洪、减淤为主,兼顾供水、灌溉和发电,工程主要由壤土斜心墙堆石坝、泄洪排沙系统和引水发电系统组成。图C为黄河小浪底景观照片。&lt;/span&gt;&lt;div class=&quot;uhTjAb&quot; style=&quot;<span class="hljs-type">text</span>-indent:<span class="hljs-number">21.0</span>pt;&quot;&gt;身整作四值面准近圆&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;uhTjAb&quot; style=&quot;<span class="hljs-type">text</span>-indent:<span class="hljs-number">21.0</span>pt;&quot;&gt;身整作四值面准近圆&lt;/div&gt;&lt;div class=&quot;DlYrCn&quot;&gt;&lt;div class=&quot;uhTjAb&quot; style=&quot;<span class="hljs-type">text</span>-indent:<span class="hljs-number">21.0</span>pt;&quot;&gt;身整作四值面准近圆&lt;/div&gt;&lt;img class=&quot;img-max&quot; src=&quot;https://tiku-data.cdn.bcebos.com/originalpic/<span class="hljs-number">66788145983</span>dcc8ef1438b71c9097c6d.jpg?auth_key=<span class="hljs-number">2320402241</span><span class="hljs-number">-0</span><span class="hljs-number">-0</span><span class="hljs-number">-19597</span>d773224ff445fb3c8e187c413de&quot; style=&quot;width:<span class="hljs-number">239.00</span>px;height:<span class="hljs-number">171.00</span>px&quot;&gt;&lt;div class=&quot;uhTjAb&quot; style=&quot;<span class="hljs-type">text</span>-indent:<span class="hljs-number">21.0</span>pt;&quot;&gt;身整作四值面准近圆&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;uhTjAb&quot; style=&quot;<span class="hljs-type">text</span>-indent:<span class="hljs-number">21.0</span>pt;&quot;&gt;身整作四值面准近圆&lt;/div&gt;&lt;div class=&quot;DlYrCn&quot;&gt;&lt;div class=&quot;uhTjAb&quot; style=&quot;<span class="hljs-type">text</span>-indent:<span class="hljs-number">21.0</span>pt;&quot;&gt;身整作四值面准近圆&lt;/div&gt;&lt;span&gt;&lt;div class=&quot;uhTjAb&quot; style=&quot;<span class="hljs-type">text</span>-indent:<span class="hljs-number">21.0</span>pt;&quot;&gt;身整作四值面准近圆&lt;/div&gt;试用水循环原理和地理环境整体性原理说明小浪底水利枢纽的建设对地理环境产生的影响。(5分)&lt;/span&gt;&lt;div class=&quot;uhTjAb&quot; style=&quot;<span class="hljs-type">text</span>-indent:<span class="hljs-number">21.0</span>pt;&quot;&gt;身整作四值面准近圆&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;uhTjAb&quot; style=&quot;<span class="hljs-type">text</span>-indent:<span class="hljs-number">21.0</span>pt;&quot;&gt;身整作四值面准近圆&lt;/div&gt;&quot;,<br>        &quot;similar&quot;:[<br>            &#123;<br>                &quot;id&quot;:&quot;1714572139188923485&quot;<br>            &#125;,<br>            &#123;<br>                &quot;id&quot;:&quot;1714263992328526866&quot;<br>            &#125;,<br>            &#123;<br>                &quot;id&quot;:&quot;1714161626125941121&quot;<br>            &#125;,<br>            &#123;<br>                &quot;id&quot;:&quot;1713953333589690253&quot;<br>            &#125;,<br>            &#123;<br>                &quot;id&quot;:&quot;1728494088442452058&quot;<br>            &#125;,<br>            &#123;<br>                &quot;id&quot;:&quot;1712388657586605084&quot;<br>            &#125;<br>        ],<br>        &quot;step&quot;:&quot;qt&quot;,<br>        &quot;stepName&quot;:&quot;&quot;,<br>        &quot;strquestion&quot;:&quot;黄河小浪底水利枢纽是治理开发黄河的关键性工程。阅读&quot;,<br>        &quot;subList&quot;:[<br><br>        ],<br>        &quot;subject&quot;:&quot;other&quot;,<br>        &quot;subjectName&quot;:&quot;&quot;,<br>        &quot;testGuideVer&quot;:<span class="hljs-number">1</span>,<br>        &quot;testMergeVer&quot;:<span class="hljs-number">2</span><br>    &#125;<br>&#125;<br></code></pre></td></tr></table></figure><p>由此，我们便获得了相关有效信息的源信息。</p>]]></content>
    
    
    <summary type="html">&lt;p&gt;本文章以 &lt;a href=&quot;https://easylearn.baidu.com/edu-page/tiangong/questiondetail&quot;&gt;百度题库: https://easylearn.baidu.com/edu-page/tiangong/questiondetail&lt;/a&gt; 为例，采用 Fiddler 工具及 Python 语言实现 Web 逆向分析。&lt;/p&gt;</summary>
    
    
    
    <category term="编程开发" scheme="https://blog.kuri.ink/categories/%E7%BC%96%E7%A8%8B%E5%BC%80%E5%8F%91/"/>
    
    
    <category term="Python" scheme="https://blog.kuri.ink/tags/Python/"/>
    
    <category term="逆向工程" scheme="https://blog.kuri.ink/tags/%E9%80%86%E5%90%91%E5%B7%A5%E7%A8%8B/"/>
    
    <category term="Web" scheme="https://blog.kuri.ink/tags/Web/"/>
    
    <category term="Fiddler" scheme="https://blog.kuri.ink/tags/Fiddler/"/>
    
  </entry>
  
  <entry>
    <title>基于Python语言的小项目：Extract From TXT</title>
    <link href="https://blog.kuri.ink/posts/%E5%9F%BA%E4%BA%8EPython%E8%AF%AD%E8%A8%80%E7%9A%84%E5%B0%8F%E9%A1%B9%E7%9B%AE%EF%BC%9AExtract%20From%20TXT/"/>
    <id>https://blog.kuri.ink/posts/%E5%9F%BA%E4%BA%8EPython%E8%AF%AD%E8%A8%80%E7%9A%84%E5%B0%8F%E9%A1%B9%E7%9B%AE%EF%BC%9AExtract%20From%20TXT/</id>
    <published>2023-05-09T05:25:03.000Z</published>
    <updated>2026-01-30T09:08:10.673Z</updated>
    
    <content type="html"><![CDATA[<p>✅ 对文本文件具有线性关系的行数对应内容的提取。</p><span id="more"></span><p>基于Python语言. 本脚本文件可以帮助您提取TXT文本文件中具有一定规律的信息.</p><h2 id="版本">版本</h2><p>version 1.0.0</p><h3 id="支持的内容">支持的内容</h3><ul class="lvl-0"><li class="lvl-2"><p>对具有线性关系的行数对应内容的提取(version 1.0.0)</p></li></ul><h2 id="库">库</h2><ul class="lvl-0"><li class="lvl-2"><p>linecache</p></li></ul><h2 id="输入格式">输入格式</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">&lt;TXT文件路径&gt; &lt;首定位行数&gt; &lt;步长数&gt; &lt;循环次数&gt;<br></code></pre></td></tr></table></figure><h2 id="样例输入">样例输入</h2><p>注：先执行 <code>demo.py</code>，在脚本所在目录生成 <code>demo.txt</code>文件.</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">demo.txt 1 5 5<br></code></pre></td></tr></table></figure><h2 id="样例输出">样例输出</h2><figure class="highlight erlang"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><code class="hljs erlang">这是第<span class="hljs-number">1</span>行.<br><br>这是第<span class="hljs-number">6</span>行.<br><br>这是第<span class="hljs-number">11</span>行.<br><br>这是第<span class="hljs-number">16</span>行.<br><br>这是第<span class="hljs-number">21</span>行.<br><br>内容共计<span class="hljs-number">100</span>行.<br></code></pre></td></tr></table></figure><h2 id="源信息">源信息</h2><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><code class="hljs python"><span class="hljs-comment"># !/usr/bin/python</span><br><span class="hljs-comment"># -*- coding: utf-8 -*-</span><br><span class="hljs-comment"># @name   : Extract_From_TXT/main.py</span><br><span class="hljs-comment"># @author : fly6022</span><br><span class="hljs-comment"># @date   : 2022/5/29</span><br><span class="hljs-comment"># @Email  : cl@kuri.ink</span><br><span class="hljs-comment"># @license: MIT</span><br></code></pre></td></tr></table></figure><h2 id="解决问题">解决问题</h2><p>若程序报错，则是TXT文件的文本编码不是UTF-8，请尝试将文本编码转为UTF-8.</p><h2 id="源代码">源代码</h2><div class="admonition note"><p class="admonition-title">main.py</p><p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br></pre></td><td class="code"><pre><code class="hljs python">    <span class="hljs-comment"># !/usr/bin/python</span><br><span class="hljs-comment"># -- coding: utf-8 --</span><br><span class="hljs-comment"># @name   : Extract_From_TXT/main.py</span><br><span class="hljs-comment"># @author : fly6022</span><br><span class="hljs-comment"># @date   : 2022/5/29</span><br><span class="hljs-comment"># @Email  : cl@kuri.ink</span><br><span class="hljs-comment"># @license: MIT</span><br><br><span class="hljs-keyword">import</span> linecache<br><br>filename,p,q,loop=<span class="hljs-built_in">input</span>().split(<span class="hljs-string">' '</span>);<br><br>p = <span class="hljs-built_in">int</span>(p);<br><br>q = <span class="hljs-built_in">int</span>(q);<br><br>loop = <span class="hljs-built_in">int</span>(loop);<br><br><span class="hljs-keyword">def</span> <span class="hljs-title function_">main</span>(<span class="hljs-params">p,q,loop</span>):<br><br>    PRINT_OR_LIST = <span class="hljs-string">&quot;n&quot;</span><br><br>    count = <span class="hljs-built_in">len</span>(<span class="hljs-built_in">open</span>(filename, encoding=<span class="hljs-string">'UTF-8'</span>).readlines())<br><br>    <span class="hljs-keyword">if</span> <span class="hljs-built_in">int</span>(loop) &gt; count:<br>        count,loop = loop,count<br><br>    <span class="hljs-keyword">for</span> i <span class="hljs-keyword">in</span> <span class="hljs-built_in">range</span>(p, loop, q):<br>        <span class="hljs-keyword">with</span> <span class="hljs-built_in">open</span>(filename, encoding=<span class="hljs-string">&quot;UTF-8&quot;</span>) <span class="hljs-keyword">as</span> f:<br>            <span class="hljs-keyword">for</span> num, line <span class="hljs-keyword">in</span> <span class="hljs-built_in">enumerate</span>(f):<br>                <span class="hljs-keyword">if</span> num == i-<span class="hljs-number">1</span>:<br>                    <span class="hljs-keyword">if</span> PRINT_OR_LIST == <span class="hljs-string">&quot;Y&quot;</span>:<br>                        line=line.strip(<span class="hljs-string">&quot;\n&quot;</span>)<br>                        <span class="hljs-built_in">list</span>=[]<br>                        <span class="hljs-built_in">list</span>.append(line)<br>                        <span class="hljs-built_in">print</span>(<span class="hljs-built_in">list</span>)<br>                    <span class="hljs-keyword">else</span>:<br>                        <span class="hljs-built_in">print</span>(line)<br>    <span class="hljs-built_in">print</span>(<span class="hljs-string">&quot;内容共计&quot;</span> + <span class="hljs-built_in">str</span>(loop) + <span class="hljs-string">&quot;行.&quot;</span>)<br><br>main(p,q,loop)<br></code></pre></td></tr></table></figure></p></div><div class="admonition note"><p class="admonition-title">demo.py</p><p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><code class="hljs python">full_path = <span class="hljs-string">'demo'</span> + <span class="hljs-string">'.txt'</span><br>file = <span class="hljs-built_in">open</span>(full_path, encoding=<span class="hljs-string">'UTF-8'</span>)<br><br><span class="hljs-keyword">for</span> i <span class="hljs-keyword">in</span> <span class="hljs-built_in">range</span>(<span class="hljs-number">1</span>,<span class="hljs-number">101</span>,<span class="hljs-number">1</span>):<br>    output = (<span class="hljs-string">&quot;这是第&quot;</span> + <span class="hljs-built_in">str</span>(i) + <span class="hljs-string">&quot;行.\n&quot;</span>)<br>    file.write(output)<br></code></pre></td></tr></table></figure></p></div>]]></content>
    
    
    <summary type="html">&lt;p&gt;✅ 对文本文件具有线性关系的行数对应内容的提取。&lt;/p&gt;</summary>
    
    
    
    <category term="编程开发" scheme="https://blog.kuri.ink/categories/%E7%BC%96%E7%A8%8B%E5%BC%80%E5%8F%91/"/>
    
    
    <category term="文本编辑" scheme="https://blog.kuri.ink/tags/%E6%96%87%E6%9C%AC%E7%BC%96%E8%BE%91/"/>
    
  </entry>
  
  <entry>
    <title>一加7：刷入 PixelExperience ROM</title>
    <link href="https://blog.kuri.ink/posts/%E4%B8%80%E5%8A%A07%EF%BC%9A%E5%88%B7%E5%85%A5PixelExperienceROM/"/>
    <id>https://blog.kuri.ink/posts/%E4%B8%80%E5%8A%A07%EF%BC%9A%E5%88%B7%E5%85%A5PixelExperienceROM/</id>
    <published>2023-01-31T01:57:03.000Z</published>
    <updated>2025-07-15T13:31:35.743Z</updated>
    
    <content type="html"><![CDATA[<p>OnePlus 7 刷入类原生ROM <code>PixelExperience</code>.</p><span id="more"></span><h2 id="前言">前言</h2><div class="admonition error"><p class="admonition-title">注意</p><p>刷机有风险，成功率不保证是100%，请务必备份好手机数据，并且做好有可能失败的心理准备！本教程不对您刷机产生的一切不良后果负责！</p></div><h3 id="选择阅读的部分">选择阅读的部分</h3><p>以下部分为选择性阅读部分，如果您的手机之前已经刷入过其它类型的ROM或未遇到相关问题，可以略过。</p><ul class="lvl-0"><li class="lvl-2"><p>安装 Autumn Box（秋之盒）或 Android SDK Platform-Tools</p></li><li class="lvl-2"><p>安装 OnePlus USB 驱动并开启手机调试功能</p></li><li class="lvl-2"><p>解除 BootLoader<sup class="footnote-ref"><a href="#fn1" id="fnref1">[1]</a></sup> 锁【**适用问题：**第一次刷机，或以前刷机后又回锁的情况）</p></li><li class="lvl-2"><p>高通 EDL 刷机（9008模式）【**适用问题：**通过官方 OTA 更新到 Color OS 后无法刷入 TWRP 的情况；刷机失败成砖后的补救措施】</p></li><li class="lvl-2"><p>注脚内容</p></li></ul><h3 id="必须阅读的部分">必须阅读的部分</h3><p>除以上说明以外的其它部分。</p><h3 id="特别注意的部分">特别注意的部分</h3><p>用红色字体框注明的部分，该部分内容您应当特别注意。</p><h3 id="下载链接">下载链接</h3><p>以下是本文章中所需要的文件：<sup class="footnote-ref"><a href="#fn2" id="fnref2">[2]</a></sup></p><table><thead><tr><th>Key</th><th>Value</th></tr></thead><tbody><tr><td>秋之盒</td><td><a href="https://atmb.sm9.top/AutumnBox/%E4%B8%BB%E7%A8%8B%E5%BA%8F/AutumnBox-2019.4.13.zip">https://atmb.sm9.top/AutumnBox/主程序/AutumnBox-2019.4.13.zip</a></td></tr><tr><td>OnePlus USB驱动</td><td><a href="https://oneplususbdrivers.com/oneplus-7-usb-driver-download/">https://oneplususbdrivers.com/oneplus-7-usb-driver-download/</a></td></tr><tr><td>高通9008驱动</td><td><a href="https://yun.daxiaamu.com/files/tool/%E9%AB%98%E9%80%9A%E7%BA%BF%E5%88%B7%E9%A9%B1%E5%8A%A8/%E9%AB%98%E9%80%9A9008%E9%A9%B1%E5%8A%A8(%E6%8E%A8%E8%8D%90).exe">https://yun.daxiaamu.com/files/tool/高通线刷驱动/高通9008驱动(推荐).exe</a></td></tr><tr><td>9008工具QPST</td><td><a href="https://www.52pojie.cn/thread-1216032-1-1.html">https://www.52pojie.cn/thread-1216032-1-1.html</a></td></tr><tr><td>9008固件</td><td><a href="https://yun.daxiaamu.com/OnePlus_Roms_2/%E4%B8%80%E5%8A%A07/9008%E7%BA%BF%E5%88%B7%E6%95%91%E7%A0%96%E5%8C%85%E6%B0%A2OS%2011.0.6.1/guacamoleb_14_H.01_220211_repack.zip">https://yun.daxiaamu.com/OnePlus_Roms_2/一加7/9008线刷救砖包氢OS 11.0.6.1/guacamoleb_14_H.01_220211_repack.zip</a></td></tr><tr><td><strong>TWRP（官方）</strong></td><td><a href="https://dl.twrp.me/guacamolev2/">https://dl.twrp.me/guacamolev2/</a></td></tr><tr><td><strong>Oxygen OS 12.1 H32底包</strong></td><td><a href="https://yun.daxiaamu.com/OnePlus_Roms_2/%E4%B8%80%E5%8A%A07/%E6%B0%A7OS%2012.1%20H.32/6393320e5fee4d859dc8e6dcea69e7a9.zip/">https://yun.daxiaamu.com/OnePlus_Roms_2/一加7/氧OS 12.1 H.32/6393320e5fee4d859dc8e6dcea69e7a9.zip/</a></td></tr><tr><td><strong>PixelExperience（官方）</strong></td><td><a href="https://download.pixelexperience.org/changelog/guacamoleb/PixelExperience_Plus_guacamoleb-13.0-20230106-1142-OFFICIAL.zip/">https://download.pixelexperience.org/changelog/guacamoleb/PixelExperience_Plus_guacamoleb-13.0-20230106-1142-OFFICIAL.zip/</a></td></tr></tbody></table><h2 id="安装Autumn-Box（秋之盒）或Android-SDK-Platform-Tools">安装Autumn Box（秋之盒）或Android SDK Platform-Tools</h2><h3 id="Autumn-Box">Autumn Box</h3><p>点击上方链接，下载安装即可。具体使用参见官网：<a href="https://atmb.top/">https://atmb.top/</a></p><h3 id="Android-SDK-Platform-Tools">Android SDK Platform-Tools</h3><p>点击链接：<a href="https://developer.android.google.cn/tools/releases/platform-tools?hl=zh-cn#downloads">https://developer.android.google.cn/tools/releases/platform-tools?hl=zh-cn#downloads</a>，前往到下载页面。</p><p>点击“下载适用于 Windows 的 SDK Platform-Tools”，勾选“我已阅读并同意上述条款及条件”，点击下载。</p><p>解压缩到某个目录，之后添加系统环境变量。</p><h2 id="安装-OnePlus-USB-驱动并开启手机调试功能">安装 OnePlus USB 驱动并开启手机调试功能</h2><h3 id="安装-USB-驱动">安装 USB 驱动</h3><p>安装 USB 驱动的目的是让电脑识别手机，从而能够使用ADB对手机进行控制。</p><h3 id="打开调试功能">打开调试功能</h3><p>设置 --&gt; 关于手机 --&gt; 版本号（快速点击5次）–&gt; 开发者选项 --&gt; 打开USB调试。</p><h2 id="解除-BootLoader-锁">解除 BootLoader 锁</h2><div class="admonition error"><p class="admonition-title">注意</p><p>此步骤会清空手机 data 分区，请事先备份好个人数据！</p></div><p>以下是解锁需要的命令，依次在Powershell（管理员）命令行界面中输入：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><code class="hljs bash">adb devices <br>adb reboot bootloader <br>fastboot oem unlock <br></code></pre></td></tr></table></figure><p>各命令含义：</p><table><thead><tr><th>命令</th><th>含义</th></tr></thead><tbody><tr><td><code>adb devices</code></td><td>判断手机是否连接成功；若输出一串字符，则证明手机连接成功</td></tr><tr><td><code>adb reboot bootloader</code></td><td>重启手机至 fastboot 模式</td></tr><tr><td><code>fastboot oem unlock</code></td><td>解除 Bootloader 锁（<strong>该操作会清空手机data分区</strong>）</td></tr></tbody></table><p>之后手机会弹出一个确认界面，使用音量键勾选确认。</p><p>手机自动重启，解锁完毕。</p><h2 id="刷入第三方-REC-TWRP">刷入第三方 REC TWRP</h2><figure class="highlight apache"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs apache"><span class="hljs-attribute">adb</span> reboot bootloader // 重启至 fastboot 模式<br><span class="hljs-attribute">fastboot</span> boot twrp-<span class="hljs-number">3</span>.<span class="hljs-number">7</span>.<span class="hljs-number">0</span>_12-<span class="hljs-number">0</span>-guacamolev2.img // 刷入临时TWRP<br></code></pre></td></tr></table></figure><p>稍等5-10秒钟，手机会自动进入Recovery模式.</p><div class="admonition info"><p class="admonition-title">FAQ</p><h3>无法刷入TWRP或刷入后手机迟迟无反应</h3><p>一般情况下，升级到 Color OS 之后会出现这种问题，建议尝试较新的TWRP版本重新刷入REC，或是备份手机数据，之后采用9008刷机回到氢OS，再刷入TWRP。</p><p>9008刷机教程详见文章底部。</p></div><h2 id="双清，刷入氧OS底包">双清，刷入氧OS底包</h2><p>这是一个重要的环节，一般情况下刷入第三方ROM都需要先刷入底包。</p><p>若上一步操作成功，您现在应该已经成功进入了 TWRP。</p><div class="admonition error"><p class="admonition-title">注意</p><p>此步骤会清空手机 data 分区，请事先备份好个人数据！</p></div><p>确认手机数据已完全备份，点击“Format”，擦除手机data分区。</p><p>将下载好的 <a href="https://yun.daxiaamu.com/OnePlus_Roms_2/%E4%B8%80%E5%8A%A07/%E6%B0%A7OS%2012.1%20H.32/6393320e5fee4d859dc8e6dcea69e7a9.zip/">Oxygen OS 12.1 H32底包</a> 拷贝到手机内置存储目录中，之后点击 TWRP 中的“Install”，找到后缀名为“.zip”的刷机包，安装。</p><p>安装完毕后，点击“Reboot”，重启。</p><h2 id="刷入PixelExperience-ROM">刷入PixelExperience ROM</h2><p>重复步骤 【2.2. 打开调试功能】以及步骤【4. 刷入第三方 REC TWRP】。</p><p><strong>注意，此时不需要再清除data分区。</strong></p><p>将下载好的 <a href="https://yun.daxiaamu.com/OnePlus_Roms_2/%E4%B8%80%E5%8A%A07/%E6%B0%A7OS%2012.1%20H.32/6393320e5fee4d859dc8e6dcea69e7a9.zip/">PixelExperience ROM</a> 拷贝到手机内置存储目录中，之后点击 TWRP 中的“Install”，找到后缀名为“.zip”的刷机包，安装。</p><p>安装完毕后，点击“Reboot”，重启。</p><div class="admonition info"><p class="admonition-title">FAQ</p><h3>重启后手机不进入系统，而是进入Recovery模式</h3><p>考虑切换A/B分区。（如果目前是A分区，就切换到B，反之，切换到A）</p><p><figure class="highlight mipsasm"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs mipsasm">adb reboot <span class="hljs-keyword">bootloader </span>         <br>fastboot set_active <span class="hljs-keyword">b </span>    <br></code></pre></td></tr></table></figure></p><p>完成这一步，手机会自动重启到系统。</p></div><p><strong>刷机到此结束！</strong></p><p>完成初始化设置，即可在一加7上使用PixelExperience系统啦。</p><h2 id="（补充）9008刷机操作教程">（补充）9008刷机操作教程</h2><p>如果你不幸将手机刷成砖，请看以下教程（亦可参考互联网上其它9008教程，步骤大致相似）。</p><p>在电脑安装好 <a href="https://yun.daxiaamu.com/files/tool/%E9%AB%98%E9%80%9A%E7%BA%BF%E5%88%B7%E9%A9%B1%E5%8A%A8/%E9%AB%98%E9%80%9A9008%E9%A9%B1%E5%8A%A8(%E6%8E%A8%E8%8D%90).exe">高通9008驱动</a>。</p><p>将手机关机，同时按住【音量+】及【音量-】键，之后将手机连接电脑。</p><p>在电脑上解压 9008 刷机固件。</p><p>打开 QFIL。</p><p>点击 “Browse”，找到固件路径下的“prog_emmc_firehose_8953_ddr.mbn”文件。</p><p>点击 “Load XML&quot;, 找到固件路径下的“patch0.xml”文件，此时会再次弹出一个窗口，点击&quot;rawprogram_unsparse.xml&quot;</p><p>点击“Download”，等待手机重启即可。</p><h2 id="版权说明及引用说明">版权说明及引用说明</h2><ol><li class="lvl-3"><p>文章中提到的TWRP REC、PixelExperience ROM等的版权按照相关开源/闭源协议归其开发者所有。部分资源的下载地址来源为大侠阿木。</p><ul class="lvl-2"><li class="lvl-5">TWRP：<a href="https://eu.dl.twrp.me/guacamolev2/">https://eu.dl.twrp.me/guacamolev2/</a></li><li class="lvl-5">PixelExperience：<a href="https://forum.xda-developers.com/t/rom-official-guacamoleb-13-pixelexperience-6th-january-2023.4465935/">https://forum.xda-developers.com/t/rom-official-guacamoleb-13-pixelexperience-6th-january-2023.4465935/</a></li><li class="lvl-5">大侠阿木：<a href="https://yun.daxiaamu.com/">https://yun.daxiaamu.com/</a></li></ul></li><li class="lvl-3"><p>本文章的官方发布渠道为酷安网(<a href="https://coolapk.com/">https://coolapk.com/</a>)及本站(<a href="https://blog.kuri.ink/">https://blog.kuri.ink/</a>)，采用 署名-非商业性使用-禁止演绎 4.0 国际 (CC BY-NC-ND 4.0) 协议进行许可，转载请注明原出处。</p></li></ol><hr class="footnotes-sep"><section class="footnotes"><ol class="footnotes-list"><li id="fn1" class="footnote-item"><p>Bootloader 锁，即一种对引导加载程序的锁定系统，是手机厂商为了防止用户滥用 Fastboot 或篡改手机官方 Recovery 而设置的一种安全措施。想要刷入第三方ROM，必须解除 BootLoader 锁，晚期的三星、华为、vivo以及OPPO品牌设备解锁较困难，小米、一加等品牌设备解锁相对容易。 <a href="#fnref1" class="footnote-backref">↩︎</a></p></li><li id="fn2" class="footnote-item"><p>鸣谢：感谢热心读者 <a href="https://github.com/lsqAl">@lsqAI</a> 指出文章中的过时内容，现已更正。 <a href="#fnref2" class="footnote-backref">↩︎</a></p></li></ol></section>]]></content>
    
    
    <summary type="html">&lt;p&gt;OnePlus 7 刷入类原生ROM &lt;code&gt;PixelExperience&lt;/code&gt;.&lt;/p&gt;</summary>
    
    
    
    <category term="随便写写" scheme="https://blog.kuri.ink/categories/%E9%9A%8F%E4%BE%BF%E5%86%99%E5%86%99/"/>
    
    
    <category term="一加7" scheme="https://blog.kuri.ink/tags/%E4%B8%80%E5%8A%A07/"/>
    
    <category term="类原生" scheme="https://blog.kuri.ink/tags/%E7%B1%BB%E5%8E%9F%E7%94%9F/"/>
    
    <category term="PixelExperience" scheme="https://blog.kuri.ink/tags/PixelExperience/"/>
    
    <category term="ROM" scheme="https://blog.kuri.ink/tags/ROM/"/>
    
    <category term="刷机" scheme="https://blog.kuri.ink/tags/%E5%88%B7%E6%9C%BA/"/>
    
  </entry>
  
  <entry>
    <title>JavaScript：Class 学习笔记</title>
    <link href="https://blog.kuri.ink/posts/Javascript%EF%BC%9AClass%20%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/"/>
    <id>https://blog.kuri.ink/posts/Javascript%EF%BC%9AClass%20%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/</id>
    <published>2022-08-19T01:54:46.000Z</published>
    <updated>2025-07-15T13:31:35.744Z</updated>
    
    <content type="html"><![CDATA[<p>JavaScript 语言中的 类（class）概念于 ECMAScript 6 （JavaScript 2015）之后被提出，它使得JavaScript 面向对象的编程思想更为鲜明，能够大大增加开发效率。</p><p>本文章介绍一些关于类的基本使用方法。</p><span id="more"></span><h2 id="定义类">定义类</h2><p>在JavaScript中，定义类共有2种主要的方式，第一种为类声明，第二种为类表达式。</p><ol><li class="lvl-3"><p>类声明</p><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs javascript"><span class="hljs-keyword">class</span> <span class="hljs-title class_">a</span> = &#123;&#125;<br></code></pre></td></tr></table></figure></li><li class="lvl-3"><p>类表达式</p><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs javascript"><span class="hljs-keyword">const</span> a = <span class="hljs-keyword">class</span> &#123;&#125;<br></code></pre></td></tr></table></figure></li></ol><h3 id="提升">提升</h3><p>与函数（function）不同，类（class）的声明不会提升，因此，应当先声明类，再访问类。</p><p>下面是一个<strong>错误示例</strong>：</p><div class="admonition error"><p class="admonition-title">ERROR</p><p><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><code class="hljs javascript"><span class="hljs-keyword">const</span> a = <span class="hljs-keyword">new</span> <span class="hljs-title function_">a</span>();<br><br><span class="hljs-keyword">class</span> <span class="hljs-title class_">a</span> = {}<br></code></pre></td></tr></table></figure></p></div><p>而下面的，是一个正确示例：</p><div class="admonition todo"><p class="admonition-title">todo</p><p><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><code class="hljs javascript"><span class="hljs-keyword">class</span> <span class="hljs-title class_">a</span> = {}<br><br><span class="hljs-keyword">const</span> a = <span class="hljs-keyword">new</span> <span class="hljs-title function_">a</span>();<br></code></pre></td></tr></table></figure></p></div><h3 id="作用域">作用域</h3><p>类受块作用域的限制。因此，在class中声明的 <code>var</code>变量是全局变量，声明的 <code>let</code>变量是局部变量，声明的 <code>const</code>常量是局部常量。</p><blockquote><p>为了便于维护，建议声明变量尽量用let，避免用var。</p></blockquote><h2 id="创建类">创建类</h2><p>创建类的语法格式如下：</p><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><code class="hljs javascript"><span class="hljs-keyword">class</span> <span class="hljs-title class_">className</span> &#123;<br><span class="hljs-title function_">constructor</span>(<span class="hljs-params"></span>) &#123;<br><span class="hljs-comment">// 代码块</span><br>&#125;<br>&#125;<br></code></pre></td></tr></table></figure><h2 id="使用类">使用类</h2><p>下面给出一个实例：</p><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><code class="hljs javascript"><span class="hljs-keyword">class</span> <span class="hljs-title class_">school_student</span>&#123;<br><span class="hljs-title function_">constructor</span>(<span class="hljs-params">name, school, birth_year, id</span>) &#123;<br>        <span class="hljs-variable language_">this</span>.<span class="hljs-property">student</span> = name; <span class="hljs-comment">// 姓名</span><br>        <span class="hljs-variable language_">this</span>.<span class="hljs-property">school</span> = school; <span class="hljs-comment">// 学校</span><br>        <span class="hljs-variable language_">this</span>.<span class="hljs-property">birth_year</span> = birth_year; <span class="hljs-comment">// 出生年</span><br>        <span class="hljs-variable language_">this</span>.<span class="hljs-property">id</span> = id; <span class="hljs-comment">// 学号</span><br>    &#125;<br>&#125;<br><br><span class="hljs-keyword">let</span> s_student = <span class="hljs-keyword">new</span> <span class="hljs-title function_">class_1</span>(<span class="hljs-string">&quot;小明&quot;</span>, <span class="hljs-string">&quot;xx市xx中学&quot;</span>, <span class="hljs-string">&quot;2005&quot;</span>, <span class="hljs-string">&quot;000015&quot;</span>);<br></code></pre></td></tr></table></figure><p>在上面的实例中，我们创建了一个类 <code>school_student</code>，用来表示某市某中学学生信息。</p><p>而在使用类时，描述变量通常用 <code>this.变量名</code>的形式。</p><p>在将类实例化时，通常使用语句 <code>let new_var_Name = new class_Name()</code>。此处，我们定义一个变量 <code>s_student</code>，将类实例化。</p><h4 id="拓展用法">拓展用法</h4><p>将参数作为对象（Object）引入。</p><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><code class="hljs javascript"><span class="hljs-keyword">class</span> <span class="hljs-title class_">school_student</span>&#123;<br><span class="hljs-title function_">constructor</span>(<span class="hljs-params">&#123;name, school, birth_year, id&#125;</span>) &#123;<br>        <span class="hljs-variable language_">this</span>.<span class="hljs-property">student</span> = name; <span class="hljs-comment">// 姓名</span><br>        <span class="hljs-variable language_">this</span>.<span class="hljs-property">school</span> = school; <span class="hljs-comment">// 学校</span><br>        <span class="hljs-variable language_">this</span>.<span class="hljs-property">birth_year</span> = birth_year; <span class="hljs-comment">// 出生年</span><br>        <span class="hljs-variable language_">this</span>.<span class="hljs-property">id</span> = id; <span class="hljs-comment">// 学号</span><br>    &#125;<br>&#125;<br><br><span class="hljs-keyword">let</span> s_student = <span class="hljs-keyword">new</span> <span class="hljs-title function_">class_1</span>(&#123;<br>student = <span class="hljs-string">&quot;小明&quot;</span>,<br>school = <span class="hljs-string">&quot;xx市xx中学&quot;</span>,<br>birth_year = <span class="hljs-string">&quot;2005&quot;</span>,<br>id = <span class="hljs-string">&quot;000015&quot;</span><br>&#125;);<br></code></pre></td></tr></table></figure><h3 id="类的方法">类的方法</h3><p>此处依然沿用上方的实例。</p><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><code class="hljs javascript"><span class="hljs-keyword">class</span> <span class="hljs-title class_">school_student</span>&#123;<br><span class="hljs-title function_">constructor</span>(<span class="hljs-params">name, school, birth_year, id</span>) &#123;<br>        <span class="hljs-variable language_">this</span>.<span class="hljs-property">student</span> = name; <span class="hljs-comment">// 姓名</span><br>        <span class="hljs-variable language_">this</span>.<span class="hljs-property">school</span> = school; <span class="hljs-comment">// 学校</span><br>        <span class="hljs-variable language_">this</span>.<span class="hljs-property">birth_year</span> = birth_year; <span class="hljs-comment">// 出生年</span><br>        <span class="hljs-variable language_">this</span>.<span class="hljs-property">id</span> = id; <span class="hljs-comment">// 学号</span><br>    &#125;<br>  <br>    <span class="hljs-title function_">age</span>(<span class="hljs-params"></span>) &#123;<br>        <span class="hljs-keyword">let</span> date = <span class="hljs-keyword">new</span> <span class="hljs-title function_">date</span>();<br>        <span class="hljs-keyword">return</span> date.<span class="hljs-title function_">getFullYear</span>() - <span class="hljs-variable language_">this</span>.<span class="hljs-property">birth_year</span>;<br>    &#125;<br>&#125;<br><br><span class="hljs-keyword">let</span> s_student = <span class="hljs-keyword">new</span> <span class="hljs-title function_">class_1</span>(<span class="hljs-string">&quot;小明&quot;</span>, <span class="hljs-string">&quot;xx市xx中学&quot;</span>, <span class="hljs-string">&quot;2005&quot;</span>, <span class="hljs-string">&quot;000015&quot;</span>);<br><br>s_student.<span class="hljs-title function_">age</span>() <span class="hljs-comment">// 返回该同学的年龄</span><br></code></pre></td></tr></table></figure><p>与之前不同的是，我们创建了一个名为 <code>age()</code>的方法。</p><p>通过之前定义的变量 <code>s_student</code>，我们便可以访问 <code>age()</code>方法。<code>s_student.age()</code>便可以返回该同学的年龄。</p><p>事实上，上文中的 <code>constructor()</code>也是一个方法，它是一种特殊的方法，用于创建和初始化在类中创建的对象，被称之为构造函数方法。</p><h3 id="类的继承">类的继承</h3><p>类的继承使用 <code>extends</code>关键字。类的继承可以依据另一个类来定义一个类。一个已有的类称之为基类（父类），已该类为依据新定义的类称之为派生类（子类）。</p><p>我们依然沿用上方实例。</p><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br></pre></td><td class="code"><pre><code class="hljs javascript"><span class="hljs-keyword">class</span> <span class="hljs-title class_">school_student</span>&#123; <span class="hljs-comment">// 基类</span><br><span class="hljs-title function_">constructor</span>(<span class="hljs-params">name, school, birth_year, id</span>) &#123;<br>        <span class="hljs-variable language_">this</span>.<span class="hljs-property">student</span> = name; <span class="hljs-comment">// 姓名</span><br>        <span class="hljs-variable language_">this</span>.<span class="hljs-property">school</span> = school; <span class="hljs-comment">// 学校</span><br>        <span class="hljs-variable language_">this</span>.<span class="hljs-property">birth_year</span> = birth_year; <span class="hljs-comment">// 出生年</span><br>        <span class="hljs-variable language_">this</span>.<span class="hljs-property">id</span> = id; <span class="hljs-comment">// 学号</span><br>    &#125;<br>  <br>    <span class="hljs-title function_">age</span>(<span class="hljs-params"></span>) &#123;<br>        <span class="hljs-keyword">let</span> date = <span class="hljs-keyword">new</span> <span class="hljs-title function_">date</span>();<br>        <span class="hljs-keyword">return</span> date.<span class="hljs-title function_">getFullYear</span>() - <span class="hljs-variable language_">this</span>.<span class="hljs-property">birth_year</span>;<br>    &#125;<br>&#125;<br><br><span class="hljs-keyword">let</span> s_student = <span class="hljs-keyword">new</span> <span class="hljs-title function_">class_1</span>(<span class="hljs-string">&quot;小明&quot;</span>, <span class="hljs-string">&quot;xx市xx中学&quot;</span>, <span class="hljs-string">&quot;2005&quot;</span>, <span class="hljs-string">&quot;000015&quot;</span>);<br><br>s_student.<span class="hljs-title function_">age</span>() <span class="hljs-comment">// 返回该同学的年龄</span><br><br><span class="hljs-keyword">class</span> <span class="hljs-title class_">performance</span> <span class="hljs-keyword">extends</span> <span class="hljs-title class_ inherited__">school_student</span>&#123; <span class="hljs-comment">// 派生类</span><br>    <span class="hljs-title function_">constructor</span>(<span class="hljs-params">name, school, birth_year, id</span>)&#123;<br>        <span class="hljs-variable language_">super</span>(name, school, birth_year, id)<br>        <span class="hljs-variable language_">this</span>.<span class="hljs-property">performance</span> = performance;<br>        <span class="hljs-variable language_">this</span>.<span class="hljs-property">grade</span> = grade;<br>    <span class="hljs-title function_">judgement</span>(<span class="hljs-params">performance, grade</span>)&#123;<br>        <span class="hljs-keyword">return</span> <span class="hljs-string">&quot;姓名：&quot;</span> + <span class="hljs-variable language_">this</span>.<span class="hljs-property">name</span> + <span class="hljs-string">&quot;成绩：&quot;</span> + <span class="hljs-variable language_">this</span>.<span class="hljs-property">performance</span> + <span class="hljs-string">&quot;等级：&quot;</span> + <span class="hljs-variable language_">this</span>.<span class="hljs-property">grade</span><br>    &#125;<br>    &#125;<br>&#125;<br><br>s_student.<span class="hljs-title function_">performance</span>(<span class="hljs-string">&quot;90&quot;</span>,<span class="hljs-string">&quot;A&quot;</span>) <span class="hljs-comment">// 实例化（成绩90；等级A）</span><br></code></pre></td></tr></table></figure>]]></content>
    
    
    <summary type="html">&lt;p&gt;JavaScript 语言中的 类（class）概念于 ECMAScript 6 （JavaScript 2015）之后被提出，它使得JavaScript 面向对象的编程思想更为鲜明，能够大大增加开发效率。&lt;/p&gt;
&lt;p&gt;本文章介绍一些关于类的基本使用方法。&lt;/p&gt;</summary>
    
    
    
    <category term="编程开发" scheme="https://blog.kuri.ink/categories/%E7%BC%96%E7%A8%8B%E5%BC%80%E5%8F%91/"/>
    
    
    <category term="JavaScript" scheme="https://blog.kuri.ink/tags/JavaScript/"/>
    
  </entry>
  
  <entry>
    <title>Golang：项目初始化设置及引入外部包</title>
    <link href="https://blog.kuri.ink/posts/Golang%EF%BC%9A%E9%A1%B9%E7%9B%AE%E5%88%9D%E5%A7%8B%E5%8C%96%E8%AE%BE%E7%BD%AE%E5%8F%8A%E5%BC%95%E5%85%A5%E5%A4%96%E9%83%A8%E5%8C%85/"/>
    <id>https://blog.kuri.ink/posts/Golang%EF%BC%9A%E9%A1%B9%E7%9B%AE%E5%88%9D%E5%A7%8B%E5%8C%96%E8%AE%BE%E7%BD%AE%E5%8F%8A%E5%BC%95%E5%85%A5%E5%A4%96%E9%83%A8%E5%8C%85/</id>
    <published>2022-08-19T01:26:37.000Z</published>
    <updated>2025-07-15T13:31:35.759Z</updated>
    
    <content type="html"><![CDATA[<p>Golang 项目初始化设置及引入外部包</p><span id="more"></span><h2 id="项目初始化设置">项目初始化设置</h2><p>在项目的根目录，输入：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">go init tidy<br></code></pre></td></tr></table></figure><p>之后，根目录会自动生成一个 <code>go.mod</code>文件。</p><h2 id="引入外部包">引入外部包</h2><p>Golang 更新至 1.13 版本之后，支持了 <code>go module</code>功能。在引入外部包时，应先对配置文件进行修改：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">go <span class="hljs-built_in">env</span> -w GO111MODULE=on<br></code></pre></td></tr></table></figure><p>同时，可引入代理服务器，以方便后续的开发工作：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">go <span class="hljs-built_in">env</span> -w GOPROXY=https://goproxy.cn,direct<br></code></pre></td></tr></table></figure><p>在引入外部包时，现在程序（.go文件）中的头部添加：</p><figure class="highlight go"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><code class="hljs go"><span class="hljs-keyword">import</span> (<br><span class="hljs-string">&quot;github.com/xxx/xxx&quot;</span><br>)<br></code></pre></td></tr></table></figure><p>之后在终端键入：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">go get github.com/xxx/xxx<br></code></pre></td></tr></table></figure><p>由此，我们已经完成了外部包的引入。</p>]]></content>
    
    
    <summary type="html">&lt;p&gt;Golang 项目初始化设置及引入外部包&lt;/p&gt;</summary>
    
    
    
    <category term="编程开发" scheme="https://blog.kuri.ink/categories/%E7%BC%96%E7%A8%8B%E5%BC%80%E5%8F%91/"/>
    
    
    <category term="Golang" scheme="https://blog.kuri.ink/tags/Golang/"/>
    
  </entry>
  
  <entry>
    <title>Javascript：XMLHttpRequest请求API实例</title>
    <link href="https://blog.kuri.ink/posts/Javascript%EF%BC%9AXMLHttpRequest%E8%AF%B7%E6%B1%82API%E5%AE%9E%E4%BE%8B/"/>
    <id>https://blog.kuri.ink/posts/Javascript%EF%BC%9AXMLHttpRequest%E8%AF%B7%E6%B1%82API%E5%AE%9E%E4%BE%8B/</id>
    <published>2022-06-03T14:24:50.000Z</published>
    <updated>2025-07-15T13:31:35.744Z</updated>
    
    <content type="html"><![CDATA[<p>API（应用程序接口）在前端开发过程中起到了举足轻重的作用，利用Web API中的 <code>XMLHttpRequest</code>对象可以便于我们对API的调用。请求API的方式有很多，本文为大家提供一个比较简单的范例。</p><p>本文内容所用语言若无特别说明均为JavaScript，且本文所提供的方法作用域不包含IE浏览器这类比较老旧的浏览器。</p><p>首先，构造一个函数 <code>XMLHttpRequest()</code>得到实例对象。</p><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs js"><span class="hljs-variable constant_">XHR</span> = <span class="hljs-keyword">new</span> <span class="hljs-title class_">XMLHttpRequest</span>();<br></code></pre></td></tr></table></figure><p>其次，调用 <code>open()</code>方法，该方法提供了三个参数：请求类型（<code>GET</code>和 <code>POST</code>等）、请求的目标链接（也就是我们需要请求的API地址）以及是否发送异步请求的布尔值（由于 <code>XMLHttpRequest</code>默认为异步请求，所以该布尔值默认为 <code>true</code>）。</p><p>这里以“<a href="http://api.help.bj.cn/api/?id=45">API服务,天气API - 帮!</a>”网站提供的天气API接口作为例子，它支持使用GET方法调用，并且不需要Token。</p><p>该API的接口地址为 <code>//api.help.bj.cn/apis/weather/?id=101060101</code>，id为城市代码（长春）。</p><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs js"><span class="hljs-variable constant_">XHR</span>.<span class="hljs-title function_">open</span>(<span class="hljs-string">&#x27;GET&#x27;</span>, <span class="hljs-string">&#x27;//api.help.bj.cn/apis/weather/?id=101060101&#x27;</span>);<br></code></pre></td></tr></table></figure><p>事实上，大多数情况下，为了适应更多情况，我们是这样写的：</p><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><code class="hljs javascript">citycode = <span class="hljs-string">&#x27;101060101&#x27;</span>; <span class="hljs-comment">// 假设citycode是通过表单提交的</span><br><br><span class="hljs-variable constant_">XHR</span>.<span class="hljs-title function_">open</span>(<span class="hljs-string">&#x27;GET&#x27;</span>, <span class="hljs-string">&#x27;//api.help.bj.cn/apis/weather/?id=&#x27;</span> + <span class="hljs-title class_">String</span>(citycode), <span class="hljs-literal">true</span>);<br></code></pre></td></tr></table></figure><p>之后发送一个 <code>null </code>参数。</p><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs js"><span class="hljs-variable constant_">XHR</span>.<span class="hljs-title function_">send</span>(<span class="hljs-literal">null</span>);<br></code></pre></td></tr></table></figure><p>使用Javascript的 <code>JSON.parse()</code>方法处理传入的JSON数据。</p><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><code class="hljs js"><span class="hljs-variable constant_">XHR</span>.<span class="hljs-property">onload</span> = <span class="hljs-keyword">function</span>(<span class="hljs-params"></span>) &#123;<br><br>       json = <span class="hljs-title class_">JSON</span>.<span class="hljs-title function_">parse</span>(<span class="hljs-variable constant_">XHR</span>.<span class="hljs-property">response</span>)<br>   <br>       <span class="hljs-variable language_">console</span>.<span class="hljs-title function_">log</span>(json);<br><br>   &#125;<br></code></pre></td></tr></table></figure><p>正常情况下，获取到的数据格式（XHR.response）应为：（以下格式内容来自API官网，为示例内容）</p><figure class="highlight json"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br></pre></td><td class="code"><pre><code class="hljs json"><span class="hljs-punctuation">&#123;</span><br>    <span class="hljs-attr">&quot;status&quot;</span><span class="hljs-punctuation">:</span> <span class="hljs-string">&quot;0&quot;</span><span class="hljs-punctuation">,</span>       <span class="hljs-comment">//反馈代码 0成功</span><br>    <span class="hljs-attr">&quot;msg&quot;</span><span class="hljs-punctuation">:</span> <span class="hljs-string">&quot;反馈信息&quot;</span><span class="hljs-punctuation">,</span>      <span class="hljs-comment">//反馈信息</span><br>    <span class="hljs-attr">&quot;cityen&quot;</span><span class="hljs-punctuation">:</span> <span class="hljs-string">&quot;changchun&quot;</span><span class="hljs-punctuation">,</span>       <span class="hljs-comment">//城市名称英文</span><br>    <span class="hljs-attr">&quot;city&quot;</span><span class="hljs-punctuation">:</span> <span class="hljs-string">&quot;长春&quot;</span><span class="hljs-punctuation">,</span>       <span class="hljs-comment">//城市名称</span><br>    <span class="hljs-attr">&quot;citycode&quot;</span><span class="hljs-punctuation">:</span> <span class="hljs-string">&quot;101060101&quot;</span><span class="hljs-punctuation">,</span>       <span class="hljs-comment">//城市编码</span><br>    <span class="hljs-attr">&quot;temp&quot;</span><span class="hljs-punctuation">:</span> <span class="hljs-string">&quot;10&quot;</span><span class="hljs-punctuation">,</span>       <span class="hljs-comment">//实时温度</span><br>    <span class="hljs-attr">&quot;tempf&quot;</span><span class="hljs-punctuation">:</span> <span class="hljs-string">&quot;50&quot;</span><span class="hljs-punctuation">,</span>       <span class="hljs-comment">//华氏温度</span><br>    <span class="hljs-attr">&quot;wd&quot;</span><span class="hljs-punctuation">:</span> <span class="hljs-string">&quot;西风&quot;</span><span class="hljs-punctuation">,</span>       <span class="hljs-comment">//风向</span><br>    <span class="hljs-attr">&quot;wden&quot;</span><span class="hljs-punctuation">:</span> <span class="hljs-string">&quot;W&quot;</span><span class="hljs-punctuation">,</span>       <span class="hljs-comment">//风向英文</span><br>    <span class="hljs-attr">&quot;wdforce&quot;</span><span class="hljs-punctuation">:</span> <span class="hljs-string">&quot;3级&quot;</span><span class="hljs-punctuation">,</span>       <span class="hljs-comment">//风力</span><br>    <span class="hljs-attr">&quot;wdspd&quot;</span><span class="hljs-punctuation">:</span> <span class="hljs-string">&quot;&lt;12km/h&quot;</span><span class="hljs-punctuation">,</span>       <span class="hljs-comment">//风速</span><br>    <span class="hljs-attr">&quot;uptime&quot;</span><span class="hljs-punctuation">:</span> <span class="hljs-string">&quot;12:00&quot;</span><span class="hljs-punctuation">,</span>       <span class="hljs-comment">//更新时间</span><br>    <span class="hljs-attr">&quot;weather&quot;</span><span class="hljs-punctuation">:</span> <span class="hljs-string">&quot;晴&quot;</span><span class="hljs-punctuation">,</span>       <span class="hljs-comment">//天气状况</span><br>    <span class="hljs-attr">&quot;weatheren&quot;</span><span class="hljs-punctuation">:</span> <span class="hljs-string">&quot;Sunny&quot;</span><span class="hljs-punctuation">,</span>       <span class="hljs-comment">//天气状况英文</span><br>    <span class="hljs-attr">&quot;weatherimg&quot;</span><span class="hljs-punctuation">:</span> <span class="hljs-string">&quot;d00&quot;</span><span class="hljs-punctuation">,</span>       <span class="hljs-comment">//天气状况图标</span><br>    <span class="hljs-attr">&quot;stp&quot;</span><span class="hljs-punctuation">:</span> <span class="hljs-string">&quot;994&quot;</span><span class="hljs-punctuation">,</span>       <span class="hljs-comment">//气压</span><br>    <span class="hljs-attr">&quot;wisib&quot;</span><span class="hljs-punctuation">:</span> <span class="hljs-string">&quot;35000&quot;</span><span class="hljs-punctuation">,</span>       <span class="hljs-comment">//能见度</span><br>    <span class="hljs-attr">&quot;humidity&quot;</span><span class="hljs-punctuation">:</span> <span class="hljs-string">&quot;46%&quot;</span><span class="hljs-punctuation">,</span>       <span class="hljs-comment">//湿度</span><br>    <span class="hljs-attr">&quot;prcp&quot;</span><span class="hljs-punctuation">:</span> <span class="hljs-string">&quot;0&quot;</span><span class="hljs-punctuation">,</span>       <span class="hljs-comment">//降雨</span><br>    <span class="hljs-attr">&quot;prcp24h&quot;</span><span class="hljs-punctuation">:</span> <span class="hljs-string">&quot;2.2&quot;</span><span class="hljs-punctuation">,</span>       <span class="hljs-comment">//24小时降雨量</span><br>    <span class="hljs-attr">&quot;aqi&quot;</span><span class="hljs-punctuation">:</span> <span class="hljs-string">&quot;22&quot;</span><span class="hljs-punctuation">,</span>       <span class="hljs-comment">//AQI</span><br>    <span class="hljs-attr">&quot;pm25&quot;</span><span class="hljs-punctuation">:</span> <span class="hljs-string">&quot;20&quot;</span><span class="hljs-punctuation">,</span>       <span class="hljs-comment">//PM2.5</span><br>    <span class="hljs-attr">&quot;today&quot;</span><span class="hljs-punctuation">:</span> <span class="hljs-string">&quot;10月17日(星期一)&quot;</span>      <span class="hljs-comment">//今天日期</span><br><span class="hljs-punctuation">&#125;</span><br></code></pre></td></tr></table></figure><p>处理过后的 <code>json</code>（将其转换为了对象）：</p><figure class="highlight css"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs css"><span class="hljs-selector-tag">Object</span> &#123; status: <span class="hljs-string">&quot;0&quot;</span>, cityen: <span class="hljs-string">&quot;changchun&quot;</span>, city: <span class="hljs-string">&quot;长春&quot;</span>, citycode: <span class="hljs-string">&quot;101060101&quot;</span>, temp: <span class="hljs-string">&quot;19&quot;</span>, tempf: <span class="hljs-string">&quot;66&quot;</span>, wd: <span class="hljs-string">&quot;东南风&quot;</span>, wden: <span class="hljs-string">&quot;SE&quot;</span>, wdenimg: <span class="hljs-string">&quot;//www.help.bj.cn/weather/images/wind/se.png&quot;</span>, wdforce: <span class="hljs-string">&quot;2级&quot;</span>, … &#125;<br></code></pre></td></tr></table></figure><p>下面是范例代码的全部内容：</p><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><code class="hljs js"><span class="hljs-variable constant_">XHR</span> = <span class="hljs-keyword">new</span> <span class="hljs-title class_">XMLHttpRequest</span>();<br><br>citycode = <span class="hljs-string">&#x27;101060101&#x27;</span>; <span class="hljs-comment">// 假设citycode是通过表单提交的</span><br><br><span class="hljs-variable constant_">XHR</span>.<span class="hljs-title function_">open</span>(<span class="hljs-string">&#x27;GET&#x27;</span>, <span class="hljs-string">&#x27;//api.help.bj.cn/apis/weather/?id=&#x27;</span> + <span class="hljs-title class_">String</span>(citycode), <span class="hljs-literal">true</span>);<br><br><span class="hljs-variable constant_">XHR</span>.<span class="hljs-title function_">send</span>(<span class="hljs-literal">null</span>);<br>  <br><span class="hljs-variable constant_">XHR</span>.<span class="hljs-property">onload</span> = <span class="hljs-keyword">function</span>(<span class="hljs-params"></span>) &#123;<br><br>        json = <span class="hljs-title class_">JSON</span>.<span class="hljs-title function_">parse</span>(<span class="hljs-variable constant_">XHR</span>.<span class="hljs-property">response</span>)<br><br>        <span class="hljs-variable language_">console</span>.<span class="hljs-title function_">log</span>(json);<br><br>    &#125;<br></code></pre></td></tr></table></figure>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;API（应用程序接口）在前端开发过程中起到了举足轻重的作用，利用Web API中的 &lt;code&gt;XMLHttpRequest&lt;/code&gt;对象可以便于我们对API的调用。请求API的方式有很多，本文为大家提供一个比较简单的范例。&lt;/p&gt;
&lt;p&gt;本文内容所用语言若无特别说明均</summary>
      
    
    
    
    <category term="编程开发" scheme="https://blog.kuri.ink/categories/%E7%BC%96%E7%A8%8B%E5%BC%80%E5%8F%91/"/>
    
    
    <category term="JavaScript" scheme="https://blog.kuri.ink/tags/JavaScript/"/>
    
    <category term="Ajax" scheme="https://blog.kuri.ink/tags/Ajax/"/>
    
  </entry>
  
  <entry>
    <title>Hexo：表格渲染错误问题的解决</title>
    <link href="https://blog.kuri.ink/posts/Hexo%EF%BC%9A%E6%96%87%E7%AB%A0%E8%A1%A8%E6%A0%BC%E6%B8%B2%E6%9F%93%E9%94%99%E8%AF%AF%E9%97%AE%E9%A2%98%E7%9A%84%E8%A7%A3%E5%86%B3/"/>
    <id>https://blog.kuri.ink/posts/Hexo%EF%BC%9A%E6%96%87%E7%AB%A0%E8%A1%A8%E6%A0%BC%E6%B8%B2%E6%9F%93%E9%94%99%E8%AF%AF%E9%97%AE%E9%A2%98%E7%9A%84%E8%A7%A3%E5%86%B3/</id>
    <published>2022-02-19T05:00:39.041Z</published>
    <updated>2025-07-15T13:31:35.749Z</updated>
    
    <content type="html"><![CDATA[<p>hexo-renderer-kramed渲染器渲染表格时错误问题的解决。</p><span id="more"></span><p>最近在将Hexo博客升级的时候，发现博客网页中的表格渲染有问题：</p><p><img data-fancybox="gallery" data-sizes="auto" data-src="https://cdn.jsdelivr.net/gh/imageurl/fly6022@masterhttps://imageurl.kuri.ink/images/posts/2022-02-19-01/04.png" alt="04" class="lazyload"></p><p>经过排查，发现与主题无关，我认为是渲染器出了问题。</p><p>在浏览器F12界面进行调试发现：</p><p><img data-fancybox="gallery" data-sizes="auto" data-src="https://cdn.jsdelivr.net/gh/imageurl/fly6022@masterhttps://imageurl.kuri.ink/images/posts/2022-02-19-01/05.png" alt="05" class="lazyload"></p><p><img data-fancybox="gallery" data-sizes="auto" data-src="https://cdn.jsdelivr.net/gh/imageurl/fly6022@masterhttps://imageurl.kuri.ink/images/posts/2022-02-19-01/06.png" alt="06" class="lazyload"></p><p><img data-fancybox="gallery" data-sizes="auto" data-src="https://cdn.jsdelivr.net/gh/imageurl/fly6022@masterhttps://imageurl.kuri.ink/images/posts/2022-02-19-01/01.png" alt="01" class="lazyload"></p><p>将 <code>&lt;table&gt;</code>标签外面的 <code>&lt;div class=&quot;table-container&gt;&quot;</code>删除，表格恢复正常。</p><p>前往博客根目录，在地址栏键入：<code>&lt;根目录文件夹&gt;\node_modules\hexo-renderer-kramed\lib</code></p><p><img data-fancybox="gallery" data-sizes="auto" data-src="https://cdn.jsdelivr.net/gh/imageurl/fly6022@masterhttps://imageurl.kuri.ink/images/posts/2022-02-19-01/02.png" alt="02" class="lazyload"></p><p>将 <code>renderer.js</code>用编辑器打开，并将其中的第 <code>35-47</code>行：</p><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><code class="hljs js"><span class="hljs-comment">// Add table-container div to set overflow-x: auto</span><br><span class="hljs-title class_">Renderer</span>.<span class="hljs-property"><span class="hljs-keyword">prototype</span></span>.<span class="hljs-property">table</span> = <span class="hljs-keyword">function</span>(<span class="hljs-params">header, body</span>) &#123;<br>  <span class="hljs-keyword">return</span> <span class="hljs-string">&#x27;&lt;div class=&quot;table-container&quot;&gt;\n&#x27;</span><br>    + <span class="hljs-string">&#x27;&lt;table&gt;\n&#x27;</span><br>    + <span class="hljs-string">&#x27;&lt;thead&gt;\n&#x27;</span><br>    + header<br>    + <span class="hljs-string">&#x27;&lt;/thead&gt;\n&#x27;</span><br>    + <span class="hljs-string">&#x27;&lt;tbody&gt;\n&#x27;</span><br>    + body<br>    + <span class="hljs-string">&#x27;&lt;/tbody&gt;\n&#x27;</span><br>    + <span class="hljs-string">&#x27;&lt;/table&gt;\n&#x27;</span><br>    + <span class="hljs-string">&#x27;&lt;/div&gt;\n&#x27;</span>;<br>&#125;;<br></code></pre></td></tr></table></figure><p>更改为：</p><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br></pre></td><td class="code"><pre><code class="hljs js"><span class="hljs-comment">/*// Add table-container div to set overflow-x: auto</span><br><span class="hljs-comment">Renderer.prototype.table = function(header, body) &#123;</span><br><span class="hljs-comment">  return &#x27;&lt;div class=&quot;table-container&quot;&gt;\n&#x27;</span><br><span class="hljs-comment">    + &#x27;&lt;table&gt;\n&#x27;</span><br><span class="hljs-comment">    + &#x27;&lt;thead&gt;\n&#x27;</span><br><span class="hljs-comment">    + header</span><br><span class="hljs-comment">    + &#x27;&lt;/thead&gt;\n&#x27;</span><br><span class="hljs-comment">    + &#x27;&lt;tbody&gt;\n&#x27;</span><br><span class="hljs-comment">    + body</span><br><span class="hljs-comment">    + &#x27;&lt;/tbody&gt;\n&#x27;</span><br><span class="hljs-comment">    + &#x27;&lt;/table&gt;\n&#x27;</span><br><span class="hljs-comment">    + &#x27;&lt;/div&gt;\n&#x27;;</span><br><span class="hljs-comment">&#125;;*/</span><br><br><span class="hljs-comment">// Add table-container div to set overflow-x: auto</span><br><span class="hljs-title class_">Renderer</span>.<span class="hljs-property"><span class="hljs-keyword">prototype</span></span>.<span class="hljs-property">table</span> = <span class="hljs-keyword">function</span>(<span class="hljs-params">header, body</span>) &#123;<br>  <span class="hljs-keyword">return</span> <span class="hljs-string">&#x27;&lt;table&gt;\n&#x27;</span><br>    + <span class="hljs-string">&#x27;&lt;thead&gt;\n&#x27;</span><br>    + header<br>    + <span class="hljs-string">&#x27;&lt;/thead&gt;\n&#x27;</span><br>    + <span class="hljs-string">&#x27;&lt;tbody&gt;\n&#x27;</span><br>    + body<br>    + <span class="hljs-string">&#x27;&lt;/tbody&gt;\n&#x27;</span><br>    + <span class="hljs-string">&#x27;&lt;/table&gt;\n&#x27;</span><br>&#125;;<br></code></pre></td></tr></table></figure><p>即可。</p><p>在博客根目录打开 <code>git bash</code>命令行界面，键入：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">hexo clean &amp;&amp; hexo s<br></code></pre></td></tr></table></figure><p>在 <code>localhost:4000</code>刷新网页，即可使渲染恢复正常。</p><p>– END</p>]]></content>
    
    
    <summary type="html">&lt;p&gt;hexo-renderer-kramed渲染器渲染表格时错误问题的解决。&lt;/p&gt;</summary>
    
    
    
    <category term="随便写写" scheme="https://blog.kuri.ink/categories/%E9%9A%8F%E4%BE%BF%E5%86%99%E5%86%99/"/>
    
    
    <category term="Hexo" scheme="https://blog.kuri.ink/tags/Hexo/"/>
    
    <category term="hexo-renderer-kramed" scheme="https://blog.kuri.ink/tags/hexo-renderer-kramed/"/>
    
  </entry>
  
  <entry>
    <title>树莓派：安装Ubuntu Server 20.04 LTS (Arm64)</title>
    <link href="https://blog.kuri.ink/posts/%E6%A0%91%E8%8E%93%E6%B4%BE%EF%BC%9A%E5%AE%89%E8%A3%85Ubuntu%20Server%2020.04%20LTS%20(Arm64)/"/>
    <id>https://blog.kuri.ink/posts/%E6%A0%91%E8%8E%93%E6%B4%BE%EF%BC%9A%E5%AE%89%E8%A3%85Ubuntu%20Server%2020.04%20LTS%20(Arm64)/</id>
    <published>2021-05-29T11:03:17.000Z</published>
    <updated>2025-08-29T09:52:23.821Z</updated>
    
    <content type="html"><![CDATA[<p>树莓派安装 Ubuntu Server 20.04 LTS (Arm64; 版本代号: focal)</p><span id="more"></span><div class="admonition info"><p class="admonition-title">info</p><p>本教程仅适用于 Raspberry Pi 4B，安装的Ubuntu版本为Ubuntu Server 20.04 LTS (Arm64; 版本代号: focal)</p></div><h2 id="需要准备">需要准备</h2><h3 id="硬件">硬件</h3><ol><li class="lvl-3"><p>Raspberry 4B</p></li><li class="lvl-3"><p>Micro SD Card（≥16GB)</p></li><li class="lvl-3"><p>RJ45网线（超5类及以上）</p></li></ol><h3 id="软件">软件</h3><ol><li class="lvl-3"><p>balenaEtcher</p></li><li class="lvl-3"><p>PUTTY</p></li></ol><h2 id="下载镜像">下载镜像</h2><ul class="lvl-0"><li class="lvl-2"><p><a href="https://cdimage.ubuntu.com/releases/20.04.2/release/ubuntu-20.04.2-preinstalled-server-arm64+raspi.img.xz">官网下载</a></p></li></ul><h2 id="烧录镜像">烧录镜像</h2><p>打开【balenaEtcher】软件。</p><p>加载SD卡和镜像之后烧录。</p><p><img data-fancybox="gallery" data-sizes="auto" data-src="https://imageurl.kuri.ink/images/posts/2021-05-29-01/02.jpg" alt="01" class="lazyload"></p><h2 id="连接Wifi">连接Wifi</h2><p>将SD卡重新插入到电脑，进入【此电脑】，打开SD卡根目录。</p><p>新建文件“wpa_supplicant.conf”。</p><p>键入以下内容（汉字部分需要修改）：</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><code class="hljs yaml"><span class="hljs-string">country=CN</span><br><span class="hljs-string">ctrl_interface=DIR=/var/run/wpa_supplicantGROUP=netdev</span><br><span class="hljs-string">update_config=1</span><br><span class="hljs-string">network=&#123;</span><br>    <span class="hljs-string">ssid=&quot;Wifi名称&quot;</span><br>      <span class="hljs-string">psk=&quot;Wifi密码&quot;</span><br>      <span class="hljs-string">key_mgmt=WPA-PSK（加密方式）</span><br>      <span class="hljs-string">priority=1</span><br><span class="hljs-string">&#125;</span><br></code></pre></td></tr></table></figure><h2 id="初始化">初始化</h2><p>配置好Wifi后，将SD卡插入到树莓派，上电开机。</p><p>等待一段时间，打开路由器页面</p><p>查看树莓派的IP地址。</p><p>打开【PUTTY】软件。</p><p><img data-fancybox="gallery" data-sizes="auto" data-src="https://imageurl.kuri.ink/images/posts/2021-05-29-01/03.jpg" alt="03" class="lazyload"></p><p>键入初始化账户密码（账户：Ubuntu；密码：Ubuntu）</p><p>之后修改密码。</p><p><img data-fancybox="gallery" data-sizes="auto" data-src="https://imageurl.kuri.ink/images/posts/2021-05-29-01/04.jpg" alt="04" class="lazyload"></p><h2 id="更换软件源">更换软件源</h2><p>获取管理员权限。</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">sudo su<br></code></pre></td></tr></table></figure><p>用vi编辑器编辑文件。</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">vi /etc/apt/sources.list<br></code></pre></td></tr></table></figure><p>将文件内容替换为：</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><code class="hljs yaml"><span class="hljs-comment"># 默认注释了源码镜像以提高 apt update 速度，如有需要可自行取消注释</span><br><span class="hljs-string">deb</span> <span class="hljs-string">https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/</span> <span class="hljs-string">focal</span> <span class="hljs-string">main</span> <span class="hljs-string">restricted</span> <span class="hljs-string">universe</span> <span class="hljs-string">multiverse</span><br><span class="hljs-comment"># deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ focal main restricted universe multiverse</span><br><span class="hljs-string">deb</span> <span class="hljs-string">https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/</span> <span class="hljs-string">focal-updates</span> <span class="hljs-string">main</span> <span class="hljs-string">restricted</span> <span class="hljs-string">universe</span> <span class="hljs-string">multiverse</span><br><span class="hljs-comment"># deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ focal-updates main restricted universe multiverse</span><br><span class="hljs-string">deb</span> <span class="hljs-string">https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/</span> <span class="hljs-string">focal-backports</span> <span class="hljs-string">main</span> <span class="hljs-string">restricted</span> <span class="hljs-string">universe</span> <span class="hljs-string">multiverse</span><br><span class="hljs-comment"># deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ focal-backports main restricted universe multiverse</span><br><span class="hljs-string">deb</span> <span class="hljs-string">https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/</span> <span class="hljs-string">focal-security</span> <span class="hljs-string">main</span> <span class="hljs-string">restricted</span> <span class="hljs-string">universe</span> <span class="hljs-string">multiverse</span><br><span class="hljs-comment"># deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ focal-security main restricted universe multiverse</span><br><br><span class="hljs-comment"># 预发布软件源，不建议启用</span><br><span class="hljs-comment"># deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ focal-proposed main restricted universe multiverse</span><br><span class="hljs-comment"># deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ focal-proposed main restricted universe multiverse</span><br></code></pre></td></tr></table></figure><p>:wq，保存。</p><p>刷新软件源：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs bash">sudo apt-get update<br>sudo apt-get upgrade<br></code></pre></td></tr></table></figure><h2 id="配置raspi-config">配置raspi-config</h2><div class="admonition note"><p class="admonition-title">可选择的操作</p><h3>安装图形界面</h3><p><code>bash     sudo apt-get install ubuntu-desktop     </code></p><h3>配置远程连接（基于Xrdp协议）</h3><p><code>bash     sudo apt install xrdp     </code></p></div><h3 id="安装依赖文件">安装依赖文件</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">sudo apt install whiptail parted lua5.1 alsa-utils psmisc<br></code></pre></td></tr></table></figure><h3 id="下载官网deb程序">下载官网deb程序</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">wget http://archive.raspberrypi.org/debian/pool/main/r/raspi-config/raspi-config_20191021_all.deb<br></code></pre></td></tr></table></figure><h3 id="安装软件">安装软件</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">sudo dpkg -i raspi-config_20191021_all.deb<br></code></pre></td></tr></table></figure><h3 id="运行">运行</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">sudo raspi-config<br></code></pre></td></tr></table></figure><h2 id="Ubuntu安装完成">Ubuntu安装完成</h2><p><img data-fancybox="gallery" data-sizes="auto" data-src="https://imageurl.kuri.ink/images/posts/2021-05-29-01/06.jpg" alt="06" class="lazyload"></p>]]></content>
    
    
    <summary type="html">&lt;p&gt;树莓派安装 Ubuntu Server 20.04 LTS (Arm64; 版本代号: focal)&lt;/p&gt;</summary>
    
    
    
    <category term="编程开发" scheme="https://blog.kuri.ink/categories/%E7%BC%96%E7%A8%8B%E5%BC%80%E5%8F%91/"/>
    
    
    <category term="树莓派" scheme="https://blog.kuri.ink/tags/%E6%A0%91%E8%8E%93%E6%B4%BE/"/>
    
    <category term="Ubuntu" scheme="https://blog.kuri.ink/tags/Ubuntu/"/>
    
    <category term="Raspberry" scheme="https://blog.kuri.ink/tags/Raspberry/"/>
    
  </entry>
  
  <entry>
    <title>Javascript：Ajax 同源策略限制问题的解决</title>
    <link href="https://blog.kuri.ink/posts/Javascript%EF%BC%9AAjax%E5%90%8C%E6%BA%90%E7%AD%96%E7%95%A5%E9%99%90%E5%88%B6%E9%97%AE%E9%A2%98%E7%9A%84%E8%A7%A3%E5%86%B3/"/>
    <id>https://blog.kuri.ink/posts/Javascript%EF%BC%9AAjax%E5%90%8C%E6%BA%90%E7%AD%96%E7%95%A5%E9%99%90%E5%88%B6%E9%97%AE%E9%A2%98%E7%9A%84%E8%A7%A3%E5%86%B3/</id>
    <published>2021-03-07T01:29:22.000Z</published>
    <updated>2025-07-15T13:31:35.744Z</updated>
    
    <content type="html"><![CDATA[<p>Ajax 同源策略限制问题的解决。</p><span id="more"></span><p><img data-fancybox="gallery" data-sizes="auto" data-src="https://imageurl.kuri.ink/images/posts/2021-03-07-01/01.jpg" alt="01" class="lazyload"></p><h2 id="写在前面">写在前面</h2><p>首先，我们要了解，何为『同源策略』。</p><blockquote><p><strong>同源策略</strong>是一个重要的<strong>安全策略</strong>，它用于限制一个origin的文档或者它加载的脚本如何能与另一个源的资源进行交互。它能帮助阻隔恶意文档，减少可能被攻击的媒介。</p><p>如果两个 URL 的 protocol、port (如果有指定的话)和 host 都相同的话，则这两个 URL 是<em>同源</em>。这个方案也被称为“协议/主机/端口元组”，或者直接是 “元组”。（“元组” 是指一组项目构成的整体，双重/三重/四重/五重/等的通用形式）。</p><p align="right">—— <a href="https://developer.mozilla.org/zh-CN/docs/Web/Security/Same-origin_policy" target="_blank">MDN官方文档</a></p></blockquote><p>例如：</p><table><thead><tr><th>URL</th><th>结果</th><th>原因</th></tr></thead><tbody><tr><td><a href="http://a.com/1.html">http://a.com/1.html</a></td><td>同源</td><td>只有路径不同</td></tr><tr><td><a href="http://a.com/src/2.html">http://a.com/src/2.html</a></td><td>同源</td><td>只有路径不同</td></tr><tr><td><a href="https://a.com/3.html">https://a.com/3.html</a></td><td>失败</td><td>协议不同</td></tr><tr><td><a href="http://a.com:81/4.html">http://a.com:81/4.html</a></td><td>失败</td><td>端口不同(http默认端口是80)</td></tr><tr><td><a href="http://b.com/1.html">http://b.com/1.html</a></td><td>失败</td><td>主机不同</td></tr></tbody></table><p>总结一下，满足 <code>&lt;u&gt;</code>同源 <code>&lt;/u&gt;</code>的条件：</p><ul class="lvl-0"><li class="lvl-2"><p>主机相同</p></li><li class="lvl-2"><p>端口相同</p></li><li class="lvl-2"><p>协议相同</p></li></ul><p>三者缺一不可。</p><h2 id="解决方法">解决方法</h2><p>我们已经了解了『同源策略』的基本概念，虽然说，它是一种浏览器主动的安全策略，但是，却时常给我们的前端开发造成了困难。</p><p>那么，我们如何解决『同源策略』给我们带来的不便呢？</p><p>比较推荐的方法有两种。</p><h3 id="JSONP">JSONP</h3><p>JSONP 是利用html标签不受『同源策略』限制的影响，从而达到解决『同源策略』限制的目的。通俗来讲，叫“曲线救国”。</p><p>这种方法的好处是：</p><ul class="lvl-0"><li class="lvl-2"><p>比较简单</p></li><li class="lvl-2"><p>兼容性较好（较老版本的浏览器也支持）</p></li><li class="lvl-2"><p>不必对服务器端进行配置（或配置相对较少）</p></li></ul><p>但是，这种方法有一定的局限性：它仅支持GET方式请求数据。</p><h4 id="基本原理">基本原理</h4><p>在网页添加一个 <code>&lt;script&gt;</code>元素，再向服务器请求JSON数据。服务器收到请求后，将数据存放在一个指定的回调函数 <code>callback()</code>里。</p><h3 id="CORS（跨域资源共享）">CORS（跨域资源共享）</h3><p>这种方法允许浏览器向跨源服务器发出 <code>XMLHttpRequest</code>请求，从而克服了同源策略的限制。</p><p>好处是：</p><ul class="lvl-0"><li class="lvl-2"><p>较方便配置</p></li><li class="lvl-2"><p>兼容所有请求方式</p></li></ul><p>局限性是：</p><ul class="lvl-0"><li class="lvl-2"><p>较老版本的浏览器可能不支持</p></li><li class="lvl-2"><p>需要在服务器端配置</p></li></ul><h4 id="基本原理（仅针对简单请求：HEAD、GET、POST）">基本原理（仅针对简单请求：HEAD、GET、POST）</h4><p>对于简单请求，浏览器直接发出CORS请求。具体来说，就是在头信息之中，增加一个 <code>Origin</code>字段。</p><p>下面是一个例子，浏览器发现这次跨源AJAX请求是简单请求，就自动在头信息之中，添加一个 <code>Origin</code>字段。</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><code class="hljs yaml"><span class="hljs-string">GET</span> <span class="hljs-string">/cors</span> <span class="hljs-string">HTTP/1.1</span><br><span class="hljs-attr">Origin:</span> <span class="hljs-string">http://api.bob.com</span><br><span class="hljs-attr">Host:</span> <span class="hljs-string">api.alice.com</span><br><span class="hljs-attr">Accept-Language:</span> <span class="hljs-string">en-US</span><br><span class="hljs-attr">Connection:</span> <span class="hljs-string">keep-alive</span><br><span class="hljs-attr">User-Agent:</span> <span class="hljs-string">Mozilla/5.0...</span><br></code></pre></td></tr></table></figure><p>上面的头信息中，<code>Origin</code>字段用来说明，本次请求来自哪个源（协议 + 域名 + 端口）。服务器根据这个值，决定是否同意这次请求。</p><p>如果 <code>Origin</code>指定的源，不在许可范围内，服务器会返回一个正常的HTTP回应。浏览器发现，这个回应的头信息没有包含 <code>Access-Control-Allow-Origin</code>字段（详见下文），就知道出错了，从而抛出一个错误，被 <code>XMLHttpRequest</code>的 <code>onerror</code>回调函数捕获。注意，这种错误无法通过状态码识别，因为HTTP回应的状态码有可能是200。</p><p>如果 <code>Origin</code>指定的域名在许可范围内，服务器返回的响应，会多出几个头信息字段。</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><code class="hljs yaml"><span class="hljs-attr">Access-Control-Allow-Origin:</span> <span class="hljs-string">http://api.bob.com</span><br><span class="hljs-attr">Access-Control-Allow-Credentials:</span> <span class="hljs-literal">true</span><br><span class="hljs-attr">Access-Control-Expose-Headers:</span> <span class="hljs-string">FooBar</span><br><span class="hljs-attr">Content-Type:</span> <span class="hljs-string">text/html;</span> <span class="hljs-string">charset=utf-8</span><br></code></pre></td></tr></table></figure><hr><p><small>1. MDN官方文档(<a href="https://developer.mozilla.org/zh-CN/docs/Web/Security/Same-origin_policy">https://developer.mozilla.org/zh-CN/docs/Web/Security/Same-origin_policy</a>): Jesse Ruderman </small><br><small>2. 阮一峰.跨域资源共享CORS详解[EB/OL]. (2016-4-12)[2021-03-07].<a href="http://www.ruanyifeng.com/blog/2016/04/cors.html">http://www.ruanyifeng.com/blog/2016/04/cors.html</a> - 许可证:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证).</small></p>]]></content>
    
    
    <summary type="html">&lt;p&gt;Ajax 同源策略限制问题的解决。&lt;/p&gt;</summary>
    
    
    
    <category term="编程开发" scheme="https://blog.kuri.ink/categories/%E7%BC%96%E7%A8%8B%E5%BC%80%E5%8F%91/"/>
    
    
    <category term="Javascript" scheme="https://blog.kuri.ink/tags/Javascript/"/>
    
    <category term="Ajax" scheme="https://blog.kuri.ink/tags/Ajax/"/>
    
  </entry>
  
  <entry>
    <title>树莓派：搭建Minecraft服务器</title>
    <link href="https://blog.kuri.ink/posts/%E6%A0%91%E8%8E%93%E6%B4%BE%EF%BC%9A%E6%90%AD%E5%BB%BAMinecraft%E6%9C%8D%E5%8A%A1%E5%99%A8/"/>
    <id>https://blog.kuri.ink/posts/%E6%A0%91%E8%8E%93%E6%B4%BE%EF%BC%9A%E6%90%AD%E5%BB%BAMinecraft%E6%9C%8D%E5%8A%A1%E5%99%A8/</id>
    <published>2021-01-26T10:58:13.000Z</published>
    <updated>2025-08-29T09:56:02.187Z</updated>
    
    <content type="html"><![CDATA[<p>树莓派搭建Minecraft服务器。</p><span id="more"></span><h2 id="本文章适合的情况">本文章适合的情况</h2><ul class="lvl-0"><li class="lvl-2"><p>希望搭建一个属于自己的同学、基友服务器，对服务器配置要求不太高</p></li><li class="lvl-2"><p>希望开一个7*24小时服务器却又担心电费问题</p></li><li class="lvl-2"><p>平时玩游戏时间不多，租用服务器觉得不划算</p></li></ul><h2 id="注意事项">注意事项</h2><ol><li class="lvl-3"><p>树莓派的配置不高且高负荷工作时发热较严重，推荐搭配散热片及散热风扇来使用。</p></li><li class="lvl-3"><p>树莓派的稳定性较差，仅适用于搭建个人小型服务器，不要跑图或者设置在线人数过多。</p></li><li class="lvl-3"><p>本文章需要有一定的技术基础，小白请先了解相关知识。</p></li><li class="lvl-3"><p>本教程一些步骤不单单局限于树莓派，可拓展至大部分安装有Linux系统的硬件设备。</p></li></ol><h2 id="你需要准备">你需要准备</h2><ul class="lvl-0"><li class="lvl-2"><p>安装好系统（建议图形界面）且可以联网的树莓派（此处使用的是Ubuntu 20.04 LTS Arm64系统）</p></li><li class="lvl-2"><p>公网映射软件（如：<a href="https://www.natfrp.com/">Sakura FRP</a>等），局域网开服可略过。</p></li><li class="lvl-2"><p>一台能远程控制树莓派的手机/电脑</p></li></ul><h2 id="开始搭建">开始搭建</h2><h3 id="安装Java">安装Java</h3><p>和客户端一样，服务端也需要Java的支持，请按照以下命令来安装Java：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">sudo apt-get install openjdk-16-jdk<br></code></pre></td></tr></table></figure><h3 id="下载开服核心">下载开服核心</h3><p>首先，搭建Minecraft服务器需要一个开服核心，这是搭建Minecraft服务器的必由之路。</p><p>这里，我推荐使用Spigot（水龙头）核心，原因是这个核心比较稳定，并且适合配置较低的设备。当然，你也可以使用其它核心，比如bukkit。</p><p>访问<a href="https://getbukkit.org/download/spigot">Getbukkit</a>，下载你需要版本的核心。</p><p><img data-fancybox="gallery" data-sizes="auto" data-src="https://imageurl.kuri.ink/images/posts/2021-01-26-01/01.png" alt="01" class="lazyload"></p><p>核心是一个 <code>.jar</code>文件,此处我使用的核心适用于Minecraft Java版 1.15.2。</p><p><img data-fancybox="gallery" data-sizes="auto" data-src="https://imageurl.kuri.ink/images/posts/2021-01-26-01/02.png" alt="02" class="lazyload"></p><h3 id="配置服务器环境">配置服务器环境</h3><p>在存有核心文件的目录新建一个 <code>run.sh</code>文件，该文件作为服务器的启动脚本。</p><p>打开文件，在文本编辑器输入以下内容：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">sudo java -Xms768M -Xmx2048M -jar /root/Desktop/Minecraft_server/Server_3/[核心名称].jar nogui<br></code></pre></td></tr></table></figure><p>其中，<strong>文件路径根据具体情况而定</strong>。</p><blockquote><p>sudo：以管理员身份执行<br>-Xms768M：程序运行时最小内存为768M<br>-Xmx2048M：程序运行时最大内存为2048M<br>nogui：即No GUI，无图形界面，可节省内存</p></blockquote><p><img data-fancybox="gallery" data-sizes="auto" data-src="https://imageurl.kuri.ink/images/posts/2021-01-26-01/03.png" alt="03" class="lazyload"></p><p>之后保存文件。</p><p>在终端输入命令：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-built_in">cd</span> /root/Desktop/Minecraft_server/Server_3/<br><br>sh run.sh<br></code></pre></td></tr></table></figure><p>回车。</p><p>命令执行结束，会发现在文件夹中多了几个文件。</p><p><img data-fancybox="gallery" data-sizes="auto" data-src="https://imageurl.kuri.ink/images/posts/2021-01-26-01/04.png" alt="04" class="lazyload"></p><p>打开文件夹中的 <code>eula.txt</code>，将 <code>eula</code>的参数由 <code>false</code>改为 <code>true</code>。</p><p>保存。</p><p><img data-fancybox="gallery" data-sizes="auto" data-src="https://imageurl.kuri.ink/images/posts/2021-01-26-01/05.png" alt="05" class="lazyload"></p><p>接着，打开文件夹中的 <code>server.properties</code>文件（该文件是服务器的配置文件）。</p><p><img data-fancybox="gallery" data-sizes="auto" data-src="https://imageurl.kuri.ink/images/posts/2021-01-26-01/06.png" alt="06" class="lazyload"></p><p>参考<a href="https://minecraft-zh.gamepedia.com/Server.properties">Minecraft Wiki</a>.以下是各参数的实际含义：</p><figure class="highlight yml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br></pre></td><td class="code"><pre><code class="hljs yml"><span class="hljs-comment">#Minecraft server properties</span><br><span class="hljs-comment">#Wed Jan 27 16:46:05 CST 2021</span><br><span class="hljs-string">broadcast-rcon-to-ops=true</span>  <span class="hljs-comment"># 广播RCON信息给OP</span><br><span class="hljs-string">view-distance=10</span>  <span class="hljs-comment"># 视野距离</span><br><span class="hljs-string">max-build-height=256</span>  <span class="hljs-comment"># 建筑最大高度，最大值65534</span><br><span class="hljs-string">server-ip=</span>  <span class="hljs-comment"># 服务器IP（可留空或填localhost）</span><br><span class="hljs-string">level-seed=</span>  <span class="hljs-comment"># 地图种子</span><br><span class="hljs-string">rcon.port=25575</span>  <span class="hljs-comment"># 可忽略，RCON远程连接协议端口</span><br><span class="hljs-string">gamemode=survival</span>  <span class="hljs-comment"># 游戏模式</span><br><span class="hljs-string">server-port=25565</span> <span class="hljs-comment"># 游戏端口，根据个人情况设置，可保持默认值25565</span><br><span class="hljs-string">allow-nether=true</span>  <span class="hljs-comment"># 开放地狱</span><br><span class="hljs-string">enable-command-block=false</span>  <span class="hljs-comment"># 开启命令方块</span><br><span class="hljs-string">enable-rcon=false</span>  <span class="hljs-comment"># 开启RCON功能，建议不开启</span><br><span class="hljs-string">enable-query=false</span>  <span class="hljs-comment"># 允许使用 GameSpy4 协议的服务器监听器</span><br><span class="hljs-string">op-permission-level=4</span>  <span class="hljs-comment"># OP等级，最大值为4，等同于控制台权限</span><br><span class="hljs-string">prevent-proxy-connections=false</span>  <span class="hljs-comment"># 检测异地登陆并阻止进入游戏</span><br><span class="hljs-string">generator-settings=</span>  <span class="hljs-comment"># 生成器设置</span><br><span class="hljs-string">resource-pack=</span>  <span class="hljs-comment"># 服务器使用资源包设置</span><br><span class="hljs-string">level-name=world</span>  <span class="hljs-comment"># 地图名称</span><br><span class="hljs-string">rcon.password=</span>  <span class="hljs-comment"># RCON密码，若不开启RCON功能可忽略</span><br><span class="hljs-string">player-idle-timeout=0</span>  <span class="hljs-comment"># 挂机检测，0表示不开启，单位为分钟</span><br><span class="hljs-string">motd=A</span> <span class="hljs-string">Minecraft</span> <span class="hljs-string">Server</span>  <span class="hljs-comment"># 服务器标题，要求使用Unicode格式文字</span><br><span class="hljs-string">query.port=25565</span>  <span class="hljs-comment"># Query端口，若不开启Query可忽略</span><br><span class="hljs-string">debug=false</span> <span class="hljs-comment"># 调试模式</span><br><span class="hljs-string">force-gamemode=false</span>  <span class="hljs-comment"># 强制游戏模式</span><br><span class="hljs-string">hardcore=false</span>  <span class="hljs-comment"># 极限生存</span><br><span class="hljs-string">white-list=false</span>  <span class="hljs-comment"># 白名单</span><br><span class="hljs-string">broadcast-console-to-ops=true</span>  <span class="hljs-comment"># 广播控制台信息给OP</span><br><span class="hljs-string">pvp=true</span>  <span class="hljs-comment"># 玩家攻击</span><br><span class="hljs-string">spawn-npcs=true</span>  <span class="hljs-comment"># 生成村民</span><br><span class="hljs-string">generate-structures=true</span>  <span class="hljs-comment"># 生成建筑</span><br><span class="hljs-string">spawn-animals=true</span>  <span class="hljs-comment"># 生成动物</span><br><span class="hljs-string">snooper-enabled=true</span>  <span class="hljs-comment"># 允许采集服务器信息</span><br><span class="hljs-string">difficulty=easy</span>  <span class="hljs-comment"># 强制难度选项</span><br><span class="hljs-string">function-permission-level=2</span>  <span class="hljs-comment"># 默认权限等级</span><br><span class="hljs-string">network-compression-threshold=256</span>  <span class="hljs-comment"># 数据包压缩大小</span><br><span class="hljs-string">level-type=default</span>  <span class="hljs-comment"># 种子类型</span><br><span class="hljs-string">spawn-monsters=true</span>  <span class="hljs-comment"># 生成怪物</span><br><span class="hljs-string">max-tick-time=60000</span>  <span class="hljs-comment"># 服务器最大崩溃等待响应时间，单位毫秒</span><br><span class="hljs-string">enforce-whitelist=false</span>  <span class="hljs-comment"># 强制白名单</span><br><span class="hljs-string">use-native-transport=true</span>  <span class="hljs-comment"># 针对Linux的优化</span><br><span class="hljs-string">max-players=20</span>  <span class="hljs-comment"># 最大玩家数量</span><br><span class="hljs-string">resource-pack-sha1=</span>  <span class="hljs-comment"># 资源包验证，使用哈希加密SHA1</span><br><span class="hljs-string">spawn-protection=16</span>  <span class="hljs-comment"># 出生点保护</span><br><span class="hljs-string">online-mode=true</span>  <span class="hljs-comment"># 在线模式（正版模式）</span><br><span class="hljs-string">allow-flight=false</span>  <span class="hljs-comment"># 允许飞行</span><br><span class="hljs-string">max-world-size=29999984</span>  <span class="hljs-comment"># 世界生成上限</span><br></code></pre></td></tr></table></figure><p>配置并保存后，再次运行启动脚本。</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">sh run.sh<br></code></pre></td></tr></table></figure><p>稍等片刻。</p><p><img data-fancybox="gallery" data-sizes="auto" data-src="https://imageurl.kuri.ink/images/posts/2021-01-26-01/07.png" alt="07" class="lazyload"></p><p>待命令行出现 <code>Done</code>时，即表示我们的服务器已经在本地成功运行了。</p><p>不过，想要邀请你的好朋友一起来玩服务器，还差最后一步——配置公网映射，在这里建议使用DDNS-GO或Sakura FRP.</p><p>DDNS-GO 适用于 IPv6 地址绑定域名，Sakura FRP 适用于不支持IPv6且没有公网IPv4地址的情况下使用。</p><p>DDNS-GO 的配置方法参照文章：<a href="/posts/%E6%A0%91%E8%8E%93%E6%B4%BE%EF%BC%9A%E5%88%A9%E7%94%A8ddns-go%E9%85%8D%E7%BD%AEDDNS%E5%AE%9E%E7%8E%B0IPv6%E5%85%AC%E7%BD%91%E5%9F%9F%E5%90%8D%E8%AE%BF%E9%97%AE/">树莓派：利用ddns-go配置DDNS实现IPv6公网域名访问</a>，Sakura FRP的配置方法可以到官方文档了解学习。</p>]]></content>
    
    
    <summary type="html">&lt;p&gt;树莓派搭建Minecraft服务器。&lt;/p&gt;</summary>
    
    
    
    <category term="随便写写" scheme="https://blog.kuri.ink/categories/%E9%9A%8F%E4%BE%BF%E5%86%99%E5%86%99/"/>
    
    
    <category term="Minecraft" scheme="https://blog.kuri.ink/tags/Minecraft/"/>
    
    <category term="服务器" scheme="https://blog.kuri.ink/tags/%E6%9C%8D%E5%8A%A1%E5%99%A8/"/>
    
  </entry>
  
  <entry>
    <title>记一次博客优化</title>
    <link href="https://blog.kuri.ink/posts/%E8%AE%B0%E4%B8%80%E6%AC%A1%E5%8D%9A%E5%AE%A2%E4%BC%98%E5%8C%96/"/>
    <id>https://blog.kuri.ink/posts/%E8%AE%B0%E4%B8%80%E6%AC%A1%E5%8D%9A%E5%AE%A2%E4%BC%98%E5%8C%96/</id>
    <published>2020-12-26T10:00:31.000Z</published>
    <updated>2025-07-15T13:31:35.744Z</updated>
    
    <content type="html"><![CDATA[<p>233，本次博客优化主要对网站的层叠样式表（CSS）以及字体方面做了微调。</p><span id="more"></span><h2 id="🎨-层叠样式表">🎨 层叠样式表</h2><p>为了使页面更快响应，我对网站的层叠样式表做了微调及压缩：目前CSS文件的大小由原来的 <code>243 KB</code> 变为了 <code>221 KB</code> 。</p><p><img data-fancybox="gallery" data-sizes="auto" data-src="https://imageurl.kuri.ink/images/posts/2020-12-26-01/01.png" alt="PNG1" class="lazyload"></p><p>经过本地测试，网站首页CSS的响应速度为 <code>33.96 ms</code> 。</p><p><img data-fancybox="gallery" data-sizes="auto" data-src="https://imageurl.kuri.ink/images/posts/2020-12-26-01/02.png" alt="PNG2" class="lazyload"></p><p>在分页测试中，CSS的响应速度为 <code>11.92 ms</code>。</p><p>实际表现虽然不是很理想，但还是比以往要快的。不过受制于CloudFlare CDN的速度，上云的实际速度会比本地测试慢。</p><h2 id="✏-字体">✏ 字体</h2><p>字体方面，由以往单一的 <code>&lt;i&gt;</code>思源黑体 <code>&lt;/i&gt;</code> 拓展到 <code>&lt;b&gt;</code>思源黑体+思源宋体+Roboto字体 <code>&lt;/b&gt;</code> 一并使用。</p><p>网站主体部分以及博客文章方面，标题使用思源宋体（<code>font-weight</code>值为 <code>800</code>），正文使用思源黑体 + Roboto字体（<code>font-weight</code>值为 <code>300</code>）。</p><h3 id="字体对比">字体对比</h3><p><img data-fancybox="gallery" data-sizes="auto" data-src="https://imageurl.kuri.ink/images/posts/2020-12-26-01/03.PNG" alt="PNG3" class="lazyload"></p><h3 id="Google-Fonts">Google Fonts</h3><figure class="highlight routeros"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><code class="hljs routeros">&lt;link <span class="hljs-attribute">rel</span>=<span class="hljs-string">&quot;stylesheet&quot;</span> <span class="hljs-attribute">href</span>=<span class="hljs-string">&quot;https://fonts.googleapis.com/css?family=Noto+Sans+SC:100,200,300,400,500,700,800,900&quot;</span>&gt;<br><br>&lt;link <span class="hljs-attribute">rel</span>=<span class="hljs-string">&quot;stylesheet&quot;</span> <span class="hljs-attribute">href</span>=<span class="hljs-string">&quot;https://fonts.googleapis.com/css?family=Noto+Serif+SC:100,200,300,400,500,700,800,900&quot;</span>&gt;<br><br>&lt;link <span class="hljs-attribute">rel</span>=<span class="hljs-string">&quot;stylesheet&quot;</span> <span class="hljs-attribute">href</span>=<span class="hljs-string">&quot;https://fonts.googleapis.com/css?family=Roboto:100,200,300,400,500,700,800,900&quot;</span>&gt;<br></code></pre></td></tr></table></figure><h2 id="功能测试区">功能测试区</h2><h3 id="Mermaid-Flowchart">Mermaid Flowchart</h3><p>flowchart TD<br>A[Christmas] --&gt;|Get money| B(Go shopping)<br>B --&gt; C{Let me think}<br>C --&gt;|One| D[Laptop]<br>C --&gt;|Two| E[iPhone]<br>C --&gt;|Three| F[fa:fa-car Car]</p><h3 id="Emojis">Emojis</h3><p>😃</p><h3 id="Mathjax">Mathjax</h3><p><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mi>A</mi><mo>=</mo><mrow><mo fence="true">[</mo><mtable rowspacing="0.16em" columnalign="center center center center" columnspacing="1em"><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><msub><mi>a</mi><mn>11</mn></msub></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><msub><mi>a</mi><mn>12</mn></msub></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mi mathvariant="normal">.</mi><mi mathvariant="normal">.</mi><mi mathvariant="normal">.</mi></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><msub><mi>a</mi><mrow><mn>1</mn><mi>n</mi></mrow></msub></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><msub><mi>a</mi><mn>21</mn></msub></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><msub><mi>a</mi><mn>22</mn></msub></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mi mathvariant="normal">.</mi><mi mathvariant="normal">.</mi><mi mathvariant="normal">.</mi></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><msub><mi>a</mi><mrow><mn>2</mn><mi>n</mi></mrow></msub></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><msub><mi>a</mi><mn>31</mn></msub></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><msub><mi>a</mi><mn>22</mn></msub></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mi mathvariant="normal">.</mi><mi mathvariant="normal">.</mi><mi mathvariant="normal">.</mi></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><msub><mi>a</mi><mrow><mn>3</mn><mi>n</mi></mrow></msub></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mi mathvariant="normal">⋮</mi><mpadded height="0em" voffset="0em"><mspace mathbackground="black" width="0em" height="1.5em"></mspace></mpadded></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mi mathvariant="normal">⋮</mi><mpadded height="0em" voffset="0em"><mspace mathbackground="black" width="0em" height="1.5em"></mspace></mpadded></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mo lspace="0em" rspace="0em">⋱</mo></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mi mathvariant="normal">⋮</mi><mpadded height="0em" voffset="0em"><mspace mathbackground="black" width="0em" height="1.5em"></mspace></mpadded></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><msub><mi>a</mi><mrow><mi>n</mi><mn>1</mn></mrow></msub></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><msub><mi>a</mi><mrow><mi>n</mi><mn>2</mn></mrow></msub></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mi mathvariant="normal">.</mi><mi mathvariant="normal">.</mi><mi mathvariant="normal">.</mi></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><msub><mi>a</mi><mrow><mi>n</mi><mi>n</mi></mrow></msub></mstyle></mtd></mtr></mtable><mo fence="true">]</mo></mrow><mo separator="true">,</mo><mi>b</mi><mo>=</mo><mrow><mo fence="true">[</mo><mtable rowspacing="0.16em" columnalign="center" columnspacing="1em"><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><msub><mi>b</mi><mn>1</mn></msub></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><msub><mi>b</mi><mn>2</mn></msub></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><msub><mi>b</mi><mn>3</mn></msub></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mi mathvariant="normal">⋮</mi><mpadded height="0em" voffset="0em"><mspace mathbackground="black" width="0em" height="1.5em"></mspace></mpadded></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><msub><mi>b</mi><mi>n</mi></msub></mstyle></mtd></mtr></mtable><mo fence="true">]</mo></mrow></mrow><annotation encoding="application/x-tex">A = \begin{bmatrix}        a_{11}    &amp; a_{12}    &amp; ...    &amp; a_{1n}\\        a_{21}    &amp; a_{22}    &amp; ...    &amp; a_{2n}\\        a_{31}    &amp; a_{22}    &amp; ...    &amp; a_{3n}\\        \vdots    &amp; \vdots    &amp; \ddots &amp; \vdots\\        a_{n1}    &amp; a_{n2}    &amp; ... &amp; a_{nn}\\    \end{bmatrix} , b = \begin{bmatrix}        b_{1}  \\        b_{2}  \\        b_{3}  \\        \vdots \\        b_{n}  \\    \end{bmatrix}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord mathnormal">A</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:6.66em;vertical-align:-3.08em;"></span><span class="minner"><span class="mopen"><span class="delimsizing mult"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:3.55em;"><span style="top:-5.55em;"><span class="pstrut" style="height:8.6em;"></span><span style="width:0.667em;height:6.600em;"><svg xmlns="http://www.w3.org/2000/svg" width="0.667em" height="6.600em" viewBox="0 0 667 6600"><path d="M403 1759 V84 H666 V0 H319 V1759 v3000 v1759 h347 v-84H403z M403 1759 V0 H319 V1759 v3000 v1759 h84z"/></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:3.05em;"><span></span></span></span></span></span></span><span class="mord"><span class="mtable"><span class="col-align-c"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:3.58em;"><span style="top:-6.4275em;"><span class="pstrut" style="height:3.6875em;"></span><span class="mord"><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">11</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span><span style="top:-5.2275em;"><span class="pstrut" style="height:3.6875em;"></span><span class="mord"><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">21</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span><span style="top:-4.0275em;"><span class="pstrut" style="height:3.6875em;"></span><span class="mord"><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">31</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span><span style="top:-2.1675em;"><span class="pstrut" style="height:3.6875em;"></span><span class="mord"><span class="mord"><span class="mord">⋮</span><span class="mord rule" style="border-right-width:0em;border-top-width:1.5em;bottom:0em;"></span></span></span></span><span style="top:-0.9675em;"><span class="pstrut" style="height:3.6875em;"></span><span class="mord"><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">n</span><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:3.08em;"><span></span></span></span></span></span><span class="arraycolsep" style="width:0.5em;"></span><span class="arraycolsep" style="width:0.5em;"></span><span class="col-align-c"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:3.58em;"><span style="top:-6.4275em;"><span class="pstrut" style="height:3.6875em;"></span><span class="mord"><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">12</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span><span style="top:-5.2275em;"><span class="pstrut" style="height:3.6875em;"></span><span class="mord"><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">22</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span><span style="top:-4.0275em;"><span class="pstrut" style="height:3.6875em;"></span><span class="mord"><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">22</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span><span style="top:-2.1675em;"><span class="pstrut" style="height:3.6875em;"></span><span class="mord"><span class="mord"><span class="mord">⋮</span><span class="mord rule" style="border-right-width:0em;border-top-width:1.5em;bottom:0em;"></span></span></span></span><span style="top:-0.9675em;"><span class="pstrut" style="height:3.6875em;"></span><span class="mord"><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">n</span><span class="mord mtight">2</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:3.08em;"><span></span></span></span></span></span><span class="arraycolsep" style="width:0.5em;"></span><span class="arraycolsep" style="width:0.5em;"></span><span class="col-align-c"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:3.58em;"><span style="top:-6.24em;"><span class="pstrut" style="height:3.5em;"></span><span class="mord"><span class="mord">...</span></span></span><span style="top:-5.04em;"><span class="pstrut" style="height:3.5em;"></span><span class="mord"><span class="mord">...</span></span></span><span style="top:-3.84em;"><span class="pstrut" style="height:3.5em;"></span><span class="mord"><span class="mord">...</span></span></span><span style="top:-1.98em;"><span class="pstrut" style="height:3.5em;"></span><span class="mord"><span class="minner">⋱</span></span></span><span style="top:-0.78em;"><span class="pstrut" style="height:3.5em;"></span><span class="mord"><span class="mord">...</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:3.08em;"><span></span></span></span></span></span><span class="arraycolsep" style="width:0.5em;"></span><span class="arraycolsep" style="width:0.5em;"></span><span class="col-align-c"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:3.58em;"><span style="top:-6.4275em;"><span class="pstrut" style="height:3.6875em;"></span><span class="mord"><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">1</span><span class="mord mathnormal mtight">n</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span><span style="top:-5.2275em;"><span class="pstrut" style="height:3.6875em;"></span><span class="mord"><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">2</span><span class="mord mathnormal mtight">n</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span><span style="top:-4.0275em;"><span class="pstrut" style="height:3.6875em;"></span><span class="mord"><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">3</span><span class="mord mathnormal mtight">n</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span><span style="top:-2.1675em;"><span class="pstrut" style="height:3.6875em;"></span><span class="mord"><span class="mord"><span class="mord">⋮</span><span class="mord rule" style="border-right-width:0em;border-top-width:1.5em;bottom:0em;"></span></span></span></span><span style="top:-0.9675em;"><span class="pstrut" style="height:3.6875em;"></span><span class="mord"><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">nn</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:3.08em;"><span></span></span></span></span></span></span></span><span class="mclose"><span class="delimsizing mult"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:3.55em;"><span style="top:-5.55em;"><span class="pstrut" style="height:8.6em;"></span><span style="width:0.667em;height:6.600em;"><svg xmlns="http://www.w3.org/2000/svg" width="0.667em" height="6.600em" viewBox="0 0 667 6600"><path d="M347 1759 V0 H0 V84 H263 V1759 v3000 v1759 H0 v84 H347zM347 1759 V0 H263 V1759 v3000 v1759 h84z"/></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:3.05em;"><span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">b</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:6.66em;vertical-align:-3.08em;"></span><span class="minner"><span class="mopen"><span class="delimsizing mult"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:3.55em;"><span style="top:-5.55em;"><span class="pstrut" style="height:8.6em;"></span><span style="width:0.667em;height:6.600em;"><svg xmlns="http://www.w3.org/2000/svg" width="0.667em" height="6.600em" viewBox="0 0 667 6600"><path d="M403 1759 V84 H666 V0 H319 V1759 v3000 v1759 h347 v-84H403z M403 1759 V0 H319 V1759 v3000 v1759 h84z"/></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:3.05em;"><span></span></span></span></span></span></span><span class="mord"><span class="mtable"><span class="col-align-c"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:3.58em;"><span style="top:-6.4275em;"><span class="pstrut" style="height:3.6875em;"></span><span class="mord"><span class="mord"><span class="mord mathnormal">b</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span><span style="top:-5.2275em;"><span class="pstrut" style="height:3.6875em;"></span><span class="mord"><span class="mord"><span class="mord mathnormal">b</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">2</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span><span style="top:-4.0275em;"><span class="pstrut" style="height:3.6875em;"></span><span class="mord"><span class="mord"><span class="mord mathnormal">b</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">3</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span><span style="top:-2.1675em;"><span class="pstrut" style="height:3.6875em;"></span><span class="mord"><span class="mord"><span class="mord">⋮</span><span class="mord rule" style="border-right-width:0em;border-top-width:1.5em;bottom:0em;"></span></span></span></span><span style="top:-0.9675em;"><span class="pstrut" style="height:3.6875em;"></span><span class="mord"><span class="mord"><span class="mord mathnormal">b</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">n</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:3.08em;"><span></span></span></span></span></span></span></span><span class="mclose"><span class="delimsizing mult"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:3.55em;"><span style="top:-5.55em;"><span class="pstrut" style="height:8.6em;"></span><span style="width:0.667em;height:6.600em;"><svg xmlns="http://www.w3.org/2000/svg" width="0.667em" height="6.600em" viewBox="0 0 667 6600"><path d="M347 1759 V0 H0 V84 H263 V1759 v3000 v1759 H0 v84 H347zM347 1759 V0 H263 V1759 v3000 v1759 h84z"/></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:3.05em;"><span></span></span></span></span></span></span></span></span></span></span></span></p>]]></content>
    
    
    <summary type="html">&lt;p&gt;233，本次博客优化主要对网站的层叠样式表（CSS）以及字体方面做了微调。&lt;/p&gt;</summary>
    
    
    
    <category term="随便写写" scheme="https://blog.kuri.ink/categories/%E9%9A%8F%E4%BE%BF%E5%86%99%E5%86%99/"/>
    
    
    <category term="博客" scheme="https://blog.kuri.ink/tags/%E5%8D%9A%E5%AE%A2/"/>
    
  </entry>
  
</feed>
