@mlikiowa/nanaeo
Version:
Volantis nanaeo
202 lines (195 loc) • 43.4 kB
text/xml
<?xml version="1.0"?>
<rss version="2.0">
<channel>
<title>Village</title>
<link>https://10snow.com</link>
<description>It is a little blog~</description>
<language>zh-CN,en,default</language>
<pubDate>Sat, 30 Dec 2023 16:00:00 +0000</pubDate>
<lastBuildDate>Sat, 30 Dec 2023 16:00:00 +0000</lastBuildDate>
<category>DevLog</category>
<category>Gauss</category>
<category>SiteLog</category>
<category>HexoThemes</category>
<category>Hexo</category>
<item>
<guid isPermalink="true">https://10snow.com/2023/12/30/2023end/</guid>
<title>博客优化与压缩软件</title>
<link>https://10snow.com/2023/12/30/2023end/</link>
<category>DevLog</category>
<pubDate>Sat, 30 Dec 2023 16:00:00 +0000</pubDate>
<description><![CDATA[ <div class="story post-story"><h2 id="近况"><a href="#近况" class="headerlink" title="近况"></a>近况</h2><p>很久没更新博客了,我觉得回来水一篇,大家也不用担心我会跑路啦,博客域名已续了10年,别问钱哪里来的,问就是免费报销的啦~</p>
<p>说回来,很久没写文了并不是别的原因,就是因为没有收入没什么回报,仅仅为了写文章也没什么动力,如果为了赚流量的话为什么不去恰烂钱呢?所以与其这样,不如躺平了算了。不过最近在写项目,顺便空闲时间给博客直接改造升级一波,然后顺手也写了篇博文总结一下最近的情况</p>
</div><div class="story post-story"><h2 id="对于整个站点的优化"><a href="#对于整个站点的优化" class="headerlink" title="对于整个站点的优化"></a>对于整个站点的优化</h2><p>内部:<br>我把原来的sw.js切换成了官方的Service-Worker.js,官方的缓存策略真的很给力的!同时换了张4K背景图,格式为WEBP,由原来的vercel拉取githubpage镜像资源改为了vercel也同步生成。同时对老掉牙的Volantis版本升级到了5.8.x版本。</p>
<p>外部:英语字体换成了仿苏芙比字体,是不是看起来非常Cute呀?这个字体大家偷的时候注意一下哦,不要用于商用,它是仿的游戏人物手写体,而且是我从b站up那里”借”来的,很遗憾不支持中文呢~</p>
<p>虽然修改很少,但是Volantis爆改这样的配色这样的字体,你绝对没见过第二个!</p>
</div><div class="story post-story"><h2 id="开源项目-NuCat"><a href="#开源项目-NuCat" class="headerlink" title="开源项目 NuCat"></a>开源项目 NuCat</h2><p>刚刚不是说最近在做项目嘛?下面就是了</p>
</div><div class="story post-story"><h2 id="一切的源头"><a href="#一切的源头" class="headerlink" title="一切的源头"></a>一切的源头</h2><p>正在上网的我收到了WinRar让我付费还是看广告的两难选项,我肯定是一个都不会选的啦!那么眼下我只能找其它免费的压缩软件了。虽然有7zip、bandzip等很多优秀的产品,但是有没有想过bandzip也是付费的,而7zip的界面又过于复古。对于我这种既要又要的人来说,能不能有一个开源、免费、可以换皮肤、支持多语言、又不那么臃肿的压缩软件呢?也许有但是仍未被我发现,但是有没有可能我可以自己写呢?在这种原因驱动下,我开始了NuCat压缩软件的开发~</p>
</div><div class="story post-story"><h2 id="工具与环境"><a href="#工具与环境" class="headerlink" title="工具与环境"></a>工具与环境</h2><p>这个很好选,按照习惯我直接选择 CMAKE+MSVC+VSCODE。虽然是单平台开发,但是CMAKE可以很方便设置依赖、设置参数,同时可读性高;MSVC则是比较优秀的CPP编译器;VSCODE和VS开发CPP都还行,但是VS有时候容易抽风呢~</p>
</div><div class="story post-story"><h2 id="食材的选材"><a href="#食材的选材" class="headerlink" title="食材的选材"></a>食材的选材</h2><p>数据交换和数据储存肯定是Json格式啦,而对于界面和我的需求相呼应的选项肯定不是QT、WIN UI 2&#x2F;3 等等,这类不符合我喜新厌旧的习惯,而且本身我UI不是特别擅长。如果我有位朋友会写WEB,灵感不就来了吗?基于各种原因,Webview来展示界面就是最佳选项!</p>
<p>cpp上在win32可用的webview有很多,但cef、electron等等库都与我的小而美理念冲突,要小小的才可爱嘛~于是我们可以敲定webview2作为核心技术,但是在开发中对com等等不太熟悉呢,根据onebot我们得出一切皆可one,那么webview2作为可选引擎来进行封装的库肯定是有的,可以切换浏览器内核,接口操作上比webview2提供的api好用。</p>
<p>果然在我们的寻找中找到了webview&#x2F;webview这个项目,我将这个项目作为我们的webview。然后我们还剩一个问题就是解压压缩怎么办?涉及算法而且各种格式兼容过于麻烦,摆在我选择只有两条:调用7zip的命令行或者sdk。但是调7zip命令行需要安装7zip,使用sdk又如webview2一样接口难以操作,幸好我找到bit7z库提供了对7zip的动态库操作,这样我们就找到了我们所有需要的库啦!</p>
</div><div class="story post-story"><h2 id="编码的选择"><a href="#编码的选择" class="headerlink" title="编码的选择"></a>编码的选择</h2><p>一切都很规范,bit7z、yyjson、webview&#x2F;webview都是支持utf8的,但是存在一个问题,我是针对WinX64进行开发,采用UTF16或者ANSI调用才能正常调用接口,所以我们大部分采用UTF8,少部分WIN API进行UTF8转UTF16操作,按照规范执行~<br>内码:UTF8<br>外码:UTF16</p>
</div><div class="story post-story"><h2 id="开发体验"><a href="#开发体验" class="headerlink" title="开发体验"></a>开发体验</h2><ol>
<li><p>很久没有再次开发过WIN32窗口程序了,上次是N年前了,我已经很久没开发过了,本次可以说我是笨蛋了,因为WEBVIEW的com技术我没弄过,弄懂这个到放弃我直接换库了。还有就是无边框窗口保留阴影和窗口随意移动花费了很多时间,无边框会在上方有6px白边问题,主要是因为我想保留窗口阴影同时让它无边框,但是这样会存在6px非客户区。解决方法就是放弃阴影,然后用dwm api再绘出来,当然还有其它方案,比如自己用gdi绘阴影,但是确实只能说麻烦呢~</p>
</li>
<li><p>找罪受就来写这个,查资料没给我送走,webview&#x2F;webview虽然说好于webview2体验,但是它屏蔽了大量操作,连resize webview都做不到,没办法,我只能爆改它的代码了,体验非常的差呢~</p>
</li>
</ol>
</div><div class="story post-story"><h2 id="总结一下"><a href="#总结一下" class="headerlink" title="总结一下"></a>总结一下</h2><p>没事不要瞎折腾啦!对于写这个Nucat压缩软件就像赛博顶真一样,绕了好大一个弯路。其实WIN11预览版内置压缩软件、WIN10正式版都能解压ZIP、RAR等常见的格式,所以为什么要这么麻烦呢?大家静静等待就行,或者说不嫌弃7Zip丑,还是可以用用7zip的啦~</p>
</div><div class="story post-story"><h2 id="至-x2F-2024"><a href="#至-x2F-2024" class="headerlink" title="至&#x2F;2024"></a>至&#x2F;2024</h2><p>收回上面的话,至此讲点别的吧。马上将要到来的2024,大家元旦快乐。</p>
</div> ]]></description>
</item>
<item>
<guid isPermalink="true">https://10snow.com/2022/08/13/GaussWave/</guid>
<title>高斯滤波</title>
<link>https://10snow.com/2022/08/13/GaussWave/</link>
<category>DevLog</category>
<category>Gauss</category>
<pubDate>Sat, 13 Aug 2022 16:00:00 +0000</pubDate>
<description><![CDATA[ <p>高斯滤波的实现</p>
<span id="more"></span>
<div class="story post-story"><h2 id="本文提示"><a href="#本文提示" class="headerlink" title="本文提示"></a>本文提示</h2><p>本文提供了相关代码和算法仅为示例学习,并非标准案例,并且OpenCV提供了高斯滤波函数,如果遇到不明白的概念和地方可以参考引用文章理解,也可以尝试在搜索引擎上搜索相关概念和图片示例,由于本站资源原因,暂不提供图片。</p>
<p>tips: 本文为了方便仅是灰度图片处理<br>如果需要彩色图片应该尝试修改代码三种通道进行分别处理或其它方法。</p>
</div><div class="story post-story"><h2 id="概念理解-部分来自百科等"><a href="#概念理解-部分来自百科等" class="headerlink" title="概念理解(部分来自百科等)"></a>概念理解(部分来自百科等)</h2><h3 id="滤波"><a href="#滤波" class="headerlink" title="滤波"></a>滤波</h3><p>滤波就对图像像素点及其邻域点的灰度值按照一定的参数规则进行加权平均,可以有效滤去理想图像中叠加的高频噪声。常用的滤波有线性滤波、中值滤波、均值滤波、双边滤波、高斯滤波等。滤波有抑制噪声的作用,但这会使得图像边缘模糊。(摘自别的地方)</p>
<h3 id="低通滤波"><a href="#低通滤波" class="headerlink" title="低通滤波"></a>低通滤波</h3><p>低通滤波是一种过滤方式,规则为低频信号能正常通过,而超过设定临界值的高频信号则被阻隔、减弱,图像处理领域可用来模糊。</p>
<h3 id="高通滤波"><a href="#高通滤波" class="headerlink" title="高通滤波"></a>高通滤波</h3><p>高通滤波(high-pass filter) 是一种过滤方式,规则为高频信号能正常通过,而低于设定临界值的低频信号则被阻隔、减弱。但是阻隔、减弱的幅度则会依据不同的频率以及不同的滤波程序(目的)而改变,图像处理领域可用于锐化。</p>
<h3 id="高斯滤波"><a href="#高斯滤波" class="headerlink" title="高斯滤波"></a>高斯滤波</h3><p>高斯滤波是一种线性平滑滤波,适用于消除高斯噪声,广泛应用于图像处理的减噪过程,对处理呈现正态分布(高斯分布)的噪声(包括图像噪声)效果显著。<br>tips: 常用高斯模糊就是使用高斯滤波完成的, 高斯模糊是低通滤波的一种, 也就是滤波函数是低通高斯函数, 但是高斯滤波是指用高斯函数作为滤波函数, 至于是不是模糊,要看是高斯低通还是高斯高通, 低通就是模糊, 高通就是锐化。</p>
<h3 id="核算子、模板、结构都是一种"><a href="#核算子、模板、结构都是一种" class="headerlink" title="核算子、模板、结构都是一种"></a>核算子、模板、结构都是一种</h3><p>当我们进行图像处理时时,使用到的权用一个矩阵表示,可以利用该矩阵计算对应像素,同时我们叫这个矩阵为核算子、模板、结构。(示例见前提指明)<br>大小可小可大,并且一般为奇数,<br>Que:核大小为什么是都是类似3×3&#x2F;5×5 奇数呢?<br>其中一个原因是定位中心锚点,偶数是无法确定中心点的。</p>
<h3 id="滤波核"><a href="#滤波核" class="headerlink" title="滤波核"></a>滤波核</h3><p>当进行滤波时,里面是核的内容是权重并且可以用于处理像素,那么该核称为滤波核。<br>(通俗解释 专业解释 请查询资料)</p>
<h3 id="归一化"><a href="#归一化" class="headerlink" title="归一化"></a>归一化</h3><p>就是生成核或者说模板加起来的权不为一,这时候我们核内每一个值除以核内总值,就实现了归一化。</p>
<h3 id="卷积核"><a href="#卷积核" class="headerlink" title="卷积核"></a>卷积核</h3><p>如果一个核被用于卷积那么该核也可以被称为卷积核。(通俗解释 专业解释 请查询资料)</p>
<h3 id="高斯核"><a href="#高斯核" class="headerlink" title="高斯核"></a>高斯核</h3><p>那么高斯核固然就是高斯分布生成的核了</p>
</div><div class="story post-story"><h2 id="环境与依赖"><a href="#环境与依赖" class="headerlink" title="环境与依赖"></a>环境与依赖</h2><p>Python 本次使用的编程语言<br>OpenCV 跨平台计算机视觉库<br>Windows11 本文中代码运行系统</p>
<h3 id="OpenCv库安装"><a href="#OpenCv库安装" class="headerlink" title="OpenCv库安装"></a>OpenCv库安装</h3><p>(清华源 可自行切换)</p>
<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">pip install opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple opencv-python</span><br><span class="line">pip install opencv-contrib-python -i https://pypi.tuna.tsinghua.edu.cn/simple opencv-python</span><br></pre></td></tr></table></figure>
</div><div class="story post-story"><h2 id="举例"><a href="#举例" class="headerlink" title="举例"></a>举例</h2><p>最终滤波核示例 (提示:权请保证和为1 此处已经归一化 但并非真实情况)<br>0.1 0.1 0.2<br>0.1 0.1 0.1<br>0.1 0.1 0.1</p>
<p>为3×3网格坐标结构<br>该模板大小 3×3</p>
</div><div class="story post-story"><h2 id="算法过程"><a href="#算法过程" class="headerlink" title="算法过程"></a>算法过程</h2><h3 id="高斯滤波实现方法"><a href="#高斯滤波实现方法" class="headerlink" title="高斯滤波实现方法"></a>高斯滤波实现方法</h3><p>看完以上相信各位并没有很多理解,并不要紧,联系实际我们进一步进行<br>高斯滤波通常情况下有两种实现方式,一是用离散化窗口滑窗卷积, 另一种通过傅里叶变换,其中第一种毕竟常见,可能这时候有人又问了,这又是什么,别急,咱先慢慢来,离散化窗口滑窗卷积其实就是进行有限次的移动核运算区域的卷积运算,那么我们可以开始了。</p>
<h3 id="算法过程-1"><a href="#算法过程-1" class="headerlink" title="算法过程"></a>算法过程</h3><p>0.图像灰度处理 (为了方便)</p>
<ol>
<li>生成滤波核</li>
<li>进行卷积处理图像</li>
</ol>
<h3 id="生成滤波核"><a href="#生成滤波核" class="headerlink" title="生成滤波核"></a>生成滤波核</h3><p><img src="https://s2.loli.net/2022/08/14/4dgAQ2RCInSM8m6.gif" class="lazyload" data-srcset="https://s2.loli.net/2022/08/14/4dgAQ2RCInSM8m6.gif" srcset="data:image/gif;base64,R0lGODlhAQABAIAAAP///////yH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="CodeCogsEqn.gif"><br>(此处为一维高斯函数)</p>
<p>sigma 为标准差 图像平滑程度取决于该值<br>我们使用高斯函数进行生成对应滤波核<br>离中心点越远那么边缘值的权值越小,我们依照高斯二维函数就可以生成对应滤波核。<br>代码具体参考如下</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><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line">def GaussKernel(size,k,sigma):</span><br><span class="line"> _t = np.zeros((size,size),np.float32)</span><br><span class="line"> for i in range (size):</span><br><span class="line"> for j in range (size):</span><br><span class="line"> norm = math.pow(i-k,2) + pow(j-k,2)</span><br><span class="line"> _t[i,j] = math.exp(-norm/(2*math.pow(sigma,2)))/2*math.pi*pow(sigma,2)</span><br><span class="line"> sum = np.sum(_t)</span><br><span class="line"> kernel = _t/sum</span><br><span class="line"> return kernel</span><br></pre></td></tr></table></figure>
<h3 id="卷积生成"><a href="#卷积生成" class="headerlink" title="卷积生成"></a>卷积生成</h3><p>然后我们使用对应的滤波权值进行乘以像素值,就可以生成新值,但是滤波核仅3×3大小,我们在原图像每一个像素点运算一次,即可生成新的图形。<br>运算为: 每个像素点周围点 权×值 的和为中心点新值。</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><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><span class="line">def mygaussFilter(img_gray,kernel):</span><br><span class="line"> h,w = img_gray.shape</span><br><span class="line"> k_h,k_w = kernel.shape</span><br><span class="line"> for i in range(int(k_h/2),h-int(k_h/2)):</span><br><span class="line"> for j in range(int(k_h/2),w-int(k_h/2)):</span><br><span class="line"> sum = 0</span><br><span class="line"> for k in range(0,k_h):</span><br><span class="line"> for l in range(0,k_h):</span><br><span class="line"> sum += img_gray[i-int(k_h/2)+k,j-int(k_h/2)+l]*kernel[k,l]</span><br><span class="line"> img_gray[i,j] = sum</span><br><span class="line"> return img_gray</span><br></pre></td></tr></table></figure>
</div><div class="story post-story"><h2 id="样例代码"><a href="#样例代码" class="headerlink" title="样例代码"></a>样例代码</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></pre></td><td class="code"><pre><span class="line">import math</span><br><span class="line">import cv2</span><br><span class="line">import numpy as np</span><br><span class="line">def GaussKernel(size,k,sigma):</span><br><span class="line"> _t = np.zeros((size,size),np.float32)</span><br><span class="line"> for i in range (size):</span><br><span class="line"> for j in range (size):</span><br><span class="line"> norm = math.pow(i-k,2) + pow(j-k,2)</span><br><span class="line"> _t[i,j] = math.exp(-norm/(2*math.pow(sigma,2)))/2*math.pi*pow(sigma,2)</span><br><span class="line"> sum = np.sum(_t)</span><br><span class="line"> kernel = _t/sum</span><br><span class="line"> return kernel</span><br><span class="line"></span><br><span class="line">def mygaussFilter(img_gray,kernel):</span><br><span class="line"> h,w = img_gray.shape</span><br><span class="line"> k_h,k_w = kernel.shape</span><br><span class="line"> for i in range(int(k_h/2),h-int(k_h/2)):</span><br><span class="line"> for j in range(int(k_h/2),w-int(k_h/2)):</span><br><span class="line"> sum = 0</span><br><span class="line"> for k in range(0,k_h):</span><br><span class="line"> for l in range(0,k_h):</span><br><span class="line"> sum += img_gray[i-int(k_h/2)+k,j-int(k_h/2)+l]*kernel[k,l]</span><br><span class="line"> img_gray[i,j] = sum</span><br><span class="line"> return img_gray</span><br><span class="line"></span><br><span class="line">if __name__ == &#x27;__main__&#x27;:</span><br><span class="line"> img = cv2.imread(&quot;demo.jpg&quot;)</span><br><span class="line"> img_gray = cv2.cvtColor(img,cv2.COLOR_RGB2GRAY)</span><br><span class="line"> img_g = img_gray.copy()</span><br><span class="line"> k=1</span><br><span class="line"> size = 2*k+1</span><br><span class="line"> kernel = gausskernel(size,k,1.5)</span><br><span class="line"> print(kernel)</span><br><span class="line"> img_B,img_G,img_R = cv2.split(img)</span><br><span class="line"> img_gauss_B = mygaussFilter(img_B,kernel)</span><br><span class="line"> img_gauss_G = mygaussFilter(img_G,kernel)</span><br><span class="line"> img_gauss_R = mygaussFilter(img_R,kernel)</span><br><span class="line"> img_gauss = cv2.merge([img_gauss_B,img_gauss_G,img_gauss_R])</span><br><span class="line"> img_comp = np.hstack((img,img_gauss))</span><br><span class="line"> cv2.imshow(&quot;gauss&quot;,img_comp)</span><br><span class="line"> cv2.waitKey(0)</span><br></pre></td></tr></table></figure>
</div><div class="story post-story"><h2 id="直接OpenCV操作-非原理实现方案-使用封装方法"><a href="#直接OpenCV操作-非原理实现方案-使用封装方法" class="headerlink" title="直接OpenCV操作(非原理实现方案 使用封装方法)"></a>直接OpenCV操作(非原理实现方案 使用封装方法)</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></pre></td><td class="code"><pre><span class="line">import cv2</span><br><span class="line">Gn=cv2.imread(&quot;Gaussian_noise.jpg&quot;) </span><br><span class="line">Gf=cv2.GaussianBlur(Gn,(3,3),0,0)</span><br><span class="line">cv2.imshow(&quot;噪声图像&quot;,Gn)</span><br><span class="line">cv2.imshow(&quot;滤波图像&quot;,Gf)</span><br><span class="line">cv2.waitKey()</span><br><span class="line">cv2.destroyAllWindows()</span><br></pre></td></tr></table></figure>
</div><div class="story post-story"><h2 id="Que-边界点的处理"><a href="#Que-边界点的处理" class="headerlink" title="Que: 边界点的处理"></a>Que: 边界点的处理</h2><p>如果一个点处于边界,周边没有足够的点,怎么办?<br>一个变通方法,就是把已有的点拷贝到另一面的对应位置,模拟出完整的矩阵。<br>当然我们这里很简单,就是进行矩阵补零上去,用零进行模拟完整矩阵。</p>
</div><div class="story post-story"><h2 id="总结"><a href="#总结" class="headerlink" title="总结"></a>总结</h2><p>高斯滤波可以让图像高斯噪声降低,并且平滑图像,并且opencv等库已经提供封装,我们可以很快的使用</p>
</div><div class="story post-story"><h2 id="文章引用"><a href="#文章引用" class="headerlink" title="文章引用"></a>文章引用</h2><p>高斯滤波<br><a href="https://blog.csdn.net/weixin_51571728/article/details/121527964">https://blog.csdn.net/weixin_51571728/article/details/121527964</a><br>高斯滤波核<br><a href="https://blog.csdn.net/qqq777_/article/details/112800310">https://blog.csdn.net/qqq777_/article/details/112800310</a><br>有关线性滤波、滤波核的基本概念(概念理解)<br><a href="https://blog.csdn.net/weixin_42664622/article/details/103672899">https://blog.csdn.net/weixin_42664622/article/details/103672899</a><br>数字图像处理基础 — 高斯滤波<br><a href="https://zhuanlan.zhihu.com/p/82569305">https://zhuanlan.zhihu.com/p/82569305</a><br>图像滤波原理(不推荐)<br><a href="https://view.inews.qq.com/a/20220425A06HHF00">https://view.inews.qq.com/a/20220425A06HHF00</a></p>
</div><div class="story post-story"><h2 id="提示"><a href="#提示" class="headerlink" title="提示"></a>提示</h2><p>该文章并不准确,如果有错误请积极指出。</p>
</div> ]]></description>
</item>
<item>
<guid isPermalink="true">https://10snow.com/2022/08/04/NewBlog/</guid>
<title>新博客建好啦</title>
<link>https://10snow.com/2022/08/04/NewBlog/</link>
<category>SiteLog</category>
<category>HexoThemes</category>
<category>Hexo</category>
<pubDate>Thu, 04 Aug 2022 16:00:00 +0000</pubDate>
<description><![CDATA[ <p>Hi Hexo,I am Mlikiowa!<br>是全新的Hexo&#x2F;vlolantis博客,我又回来写博客了!</p>
<span id="more"></span>
<div class="timeline"><div class="timenode"><div class="meta"><p><p>2019.Previous</p>
</p></div><div class="body"><p>使用过Emlog Wordpress来搭建博客,使用过各种博客系统,体验不能说差,只能说没有。</p></div></div>
<div class="timenode"><div class="meta"><p><p>2019.Done</p>
</p></div><div class="body"><p>开始尝试在CSDN 简书平台发布自己的文章,但是后来因为咱不太喜欢平台限制,遂转入Typecho来搭建博客。</p></div></div>
<div class="timenode"><div class="meta"><p><p>2020.Done</p>
</p></div><div class="body"><p>一开始typecho小而美的感觉是很不错的体验,加上我正好会使用PHP,能自己搓插件,所以体验还不错。</p></div></div>
<div class="timenode"><div class="meta"><p><p>2021.Done</p>
</p></div><div class="body"><p>期间域名备案和准备高考,并搭建了一个运行在国内的typecho博客。</p></div></div>
<div class="timenode"><div class="meta"><p><p>2022.Done</p>
</p></div><div class="body"><p>上半年:因为没有空闲时间打理博客,备案因无法联系注销,后来意外将电脑中typecho的备份删除,故跑路。<br>下半年:借大佬之手找回了数据,但准备重新开始,于是依靠Hexo搭建了全新的博客,走上了白嫖之路。</p></div></div></div>
<div class="story post-story"><h2 id="回忆"><a href="#回忆" class="headerlink" title="回忆"></a>回忆</h2><ul>
<li><p><strong>事件前言:</strong> 大家好呀,这里是我的新博客哦!之前经历了一些小波折,现在我决定用 Hexo 重新开始啦,通过 serverless 和 GitHub Actions 实现自动化部署,感觉自己棒棒哒!</p>
</li>
<li><p><strong>备案历程:</strong> 之前一直用 Typecho 嘛,服务器和域名都在国内备了案。那时候高中学业比较忙,每天都在学习,没太多时间打理博客。结果错过了备案审核的电话,备案就失效啦,呜呜。而且当时写的博文质量也不太好,就暂时放弃了。后来在朋友的帮助下找回了数据,不过我还是决定重新开始。</p>
</li>
<li><p><strong>重启计划:</strong> 2022 年下半年毕业后,终于有时间重新经营博客啦。本来打算继续用 Typecho 的,但是用起来发现有些地方不太顺手,所以就决定换个博客系统。</p>
</li>
<li><p><strong>实际行动:</strong> 最终选择了 Hexo 作为新的博客系统。这样不仅成本比较低,而且还很稳定。最重要的是,这个方案可以很方便地在不同设备之间迁移使用,不用担心博客再次“跑路”啦。</p>
</li>
</ul>
<h3 id="博客运行环境"><a href="#博客运行环境" class="headerlink" title="博客运行环境"></a>博客运行环境</h3><div class="table"><table>
<thead>
<tr>
<th>Name</th>
<th>Content</th>
</tr>
</thead>
<tbody><tr>
<td>Blog</td>
<td>Hexo</td>
</tr>
<tr>
<td>Theme</td>
<td>volantis</td>
</tr>
<tr>
<td>platform</td>
<td>vercel&Github</td>
</tr>
<tr>
<td>domain</td>
<td>10snow.com</td>
</tr>
</tbody></table>
</div>
<ul>
<li><strong>小吐槽:</strong> 之前还想试试<code>hexo-theme-diaspora</code>这个主题呢,<br>这款博客是从 wp 移植到 hexo 的,介绍图超级好看,可惜作者没有再更新了,所以我只能选择其他主题啦。<br>所以我换成了 <strong>volantis</strong> 主题 (<code>npm -i hexo-theme-volantis</code> 可以轻松安装),个人感觉它的色调和布局都很好看,可玩性也很高。</li>
</ul>
</div><div class="story post-story"><h2 id="博客搭建"><a href="#博客搭建" class="headerlink" title="博客搭建"></a>博客搭建</h2><div class="tag link"><a class="link-card" title="本博客源码项目" href="https://github.com/MliKiowa/MliKiowa.github.io"><div class="left"><img src="https://q1.qlogo.cn/g?b=qq&nk=1627126029&s=100" class="lazyload" data-srcset="https://q1.qlogo.cn/g?b=qq&nk=1627126029&s=100" srcset="data:image/gif;base64,R0lGODlhAQABAIAAAP///////yH5BAEKAAEALAAAAAABAAEAAAICTAEAOw=="/></div><div class="right"><p class="text">本博客源码项目</p><p class="url">https://github.com/MliKiowa/MliKiowa.github.io</p></div></a></div>
<ul>
<li><p>我的博客通过使用 Github Action 等方式生成部署博文到 github page、Vercel 等服务商。<br>至于推送到 <code>cos/oss .etc storage bucket</code> 就算啦,感觉谁用谁亏钱(容易被打,好一点的情况也得宕机)。</p>
</li>
<li><p><strong>小提示:</strong> 使用多服务商涉及到 DNS 分流,像腾讯 DNSPod 这种解析服务要交钱升级才能用,有点难受,所以我考虑用动态 API 来切换 DNS 解析。</p>
</li>
<li><p><strong>小吐槽:</strong> 居然 <code>github workflow</code> 只有现成的 <code>deploy hugo site to githubpage workflow</code>,没有 Hexo 自动部署的脚本,于是我就照猫画虎地写了一个 Hexo 自动部署脚本,但是因为技术太菜,用这个 workflow 还得改半天。<br>正当我吐槽这么大的 GitHub 没人发布自动部署脚本的时候,我在 GitHub 上搜到了类似的 workflow,但是我代码都写完了,难受。</p>
</li>
</ul>
</div><div class="story post-story"><h2 id="迁移使用"><a href="#迁移使用" class="headerlink" title="迁移使用"></a>迁移使用</h2><ul>
<li>本博客可以通过以下脚本快速迁移,从云端 Github 下载源码,然后在本地编写博文,提交后直接使用 action 刷新博客。(这个方法已经失效了哦)</li>
<li><strong>Tips:</strong> 如果你有需要,也可以执行以下脚本建立新博客,可以轻松地在新设备上运行。<details ><summary> bash.sh </summary>
<div class='content'>
<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></pre></td><td class="code"><pre><span class="line">git clone https://github.com/MliKiowa/nanaeo</span><br><span class="line">cd MliKiowa.github.io</span><br><span class="line">npm install</span><br><span class="line">hexo g</span><br></pre></td></tr></table></figure>
</div>
</details></li>
</ul>
</div><div class="story post-story"><h2 id="博客内容"><a href="#博客内容" class="headerlink" title="博客内容"></a>博客内容</h2><div class="table"><table>
<thead>
<tr>
<th>Classification</th>
<th>Content</th>
</tr>
</thead>
<tbody><tr>
<td>Dev Exp</td>
<td>Free Developer</td>
</tr>
<tr>
<td>Site Log</td>
<td>Site Maintenance Log</td>
</tr>
<tr>
<td>Life Log</td>
<td>Record your life</td>
</tr>
</tbody></table>
</div>
<ul>
<li><strong>小提示:</strong> 内容主要以编程和生活为主,不会推荐资源,也不接受友链哦。</li>
</ul>
</div><div class="story post-story"><h2 id="期盼"><a href="#期盼" class="headerlink" title="期盼"></a>期盼</h2><ul>
<li><strong>域名问题:</strong> 原来的域名看起来有点憨憨的,还被<strong>朋友嘲笑了</strong>,所以觉得旧域名配不上我的新博客,就注册了一个更符合气质的新域名 10snow.com,寓意没有很特别啦,全凭感觉,可爱就对了嘛(歪头</li>
<li><strong>跑路问题:</strong> 折腾过好几次博客的我真的是太累了,所以这次博客能稳定 run 起来,我就不想再折腾新博客了。但是请允许我说一句,我正在努力成为年更博主!半年一更就是高产!</li>
<li><strong>内容布局:</strong> 还在摸索中,你现在看到的排版都是我正在尝试的,我很少用 Hexo,可以说是萌新一枚,但是我会慢慢完善的,应该没什么问题。</li>
<li><strong>图床问题:</strong> 这个问题我也不知道怎么解决,还是先摆烂吧,能不放图就不放图。</li>
</ul>
</div> ]]></description>
</item>
</channel>
</rss>