<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>折腾 on 阿珏酱のBlog</title>
    <link>https://zh.moejue.cn/tags/%E6%8A%98%E8%85%BE/</link>
    <description>Recent content from 阿珏酱のBlog</description>
    <generator>Hugo</generator>
    <language>zh-cn</language>
    
    <managingEditor>xxx@example.com (MoeJue)</managingEditor>
    <webMaster>xxx@example.com (MoeJue)</webMaster>
    
    <copyright>本博客所有文章除特别声明外，均采用 BY-NC-SA 许可协议。转载请注明出处！</copyright>
    
    <lastBuildDate>Sun, 02 Nov 2025 10:12:27 +0000</lastBuildDate>
    
    
    <atom:link href="https://zh.moejue.cn/tags/%E6%8A%98%E8%85%BE/index.xml" rel="self" type="application/rss&#43;xml" />
    

    
    

    <item>
      <title>阿珏のBlog 的国际化之路</title>
      <link>https://zh.moejue.cn/posts/291/</link>
      <pubDate>Sun, 02 Nov 2025 10:12:27 &#43;0000</pubDate>
      <author>xxx@example.com (MoeJue)</author>
      <guid>https://zh.moejue.cn/posts/291/</guid>
      <description>
        <![CDATA[<h1>阿珏のBlog 的国际化之路</h1><p>作者：MoeJue（xxx@example.com）</p>
        
          <p>最近，我给个人博客来了次“大动作”——<br>
从单语言版本升级到了 <strong>多语言站点</strong>（简体中文、繁体中文、英语、日语），<br>
并且全流程实现了自动化。💪</p>
<p>主要包括：</p>
<ul>
<li>自动同步主站文章</li>
<li>自动 AI 翻译内容</li>
<li>自动构建与部署多语言站点</li>
</ul>
<hr>
<h2 id="为什么选择-hugo">
<a class="header-anchor" href="#%e4%b8%ba%e4%bb%80%e4%b9%88%e9%80%89%e6%8b%a9-hugo"></a>
为什么选择 Hugo？
</h2><p>因为它那句自信的口号：</p>
<blockquote>
<p>“The world’s fastest framework for building websites.”</p>
</blockquote>
<p>—— 就这句话，我就决定是它了 😆。</p>
<p>不过我没有采用“一套主题多语言切换”的传统做法，<br>
而是让 <strong>每种语言都有独立主题</strong>。<br>
这样每个语言版本都能保留自己的美学与排版风格，<br>
真正做到“文化层面的本地化”。</p>
<hr>
<h2 id="设计目标与约束-">
<a class="header-anchor" href="#%e8%ae%be%e8%ae%a1%e7%9b%ae%e6%a0%87%e4%b8%8e%e7%ba%a6%e6%9d%9f-"></a>
设计目标与约束 🎯
</h2><ul>
<li><strong>语言</strong>：支持简中、繁中、英文、日文，未来还可扩展。</li>
<li><strong>主题</strong>：每种语言使用最合适的 Hugo 主题，而非强行复用。</li>
<li><strong>内容同步</strong>：所有语言共用一份内容仓库，按需翻译。</li>
<li><strong>部署策略</strong>：各语言独立构建与发布，可部署到不同分支或域名。</li>
<li><strong>定制页面</strong>：像“友链”、“书房”、“归档”等页面要在多语言下保持一致体验。</li>
</ul>
<hr>
<h2 id="多语言配置策略-">
<a class="header-anchor" href="#%e5%a4%9a%e8%af%ad%e8%a8%80%e9%85%8d%e7%bd%ae%e7%ad%96%e7%95%a5-"></a>
多语言配置策略 🧩
</h2><p>我为每个语言单独准备了一个配置文件：<br>
<code>config/&lt;lang&gt;.toml</code>，它们主要负责：</p>
<ol>
<li>指定主题（例如 <code>theme = &quot;PaperMod&quot;</code>）。</li>
<li>定义该语言特有的 <code>title</code> / <code>description</code> / <code>keywords</code>。</li>
<li>重写菜单配置 <code>[[params.menu]]</code>，以匹配不同主题的导航结构。</li>
<li>注入自定义样式，保证整体视觉一致。</li>
</ol>
<p>这种结构非常清晰，也方便未来扩展更多语言版本。</p>
<hr>
<h2 id="github-actions-自动部署矩阵-">
<a class="header-anchor" href="#github-actions-%e8%87%aa%e5%8a%a8%e9%83%a8%e7%bd%b2%e7%9f%a9%e9%98%b5-"></a>
GitHub Actions 自动部署矩阵 ⚙️
</h2><p>CI/CD 部分完全交给 GitHub Actions 来处理。<br>
在 <code>.github/workflows/hugo.yml</code> 中，我使用了 <strong>矩阵构建</strong>，<br>
为每种语言独立构建、发布：</p>
        
        <hr><p>本文2025-11-02首发于<a href='https://zh.moejue.cn/'>阿珏酱のBlog</a>，最后修改于2025-11-02</p>]]>
      </description>
      
        <category>折腾代码</category>
      
    </item>
    
    

    <item>
      <title>幻想领域图床使用帮助</title>
      <link>https://zh.moejue.cn/posts/63/</link>
      <pubDate>Mon, 19 Mar 2018 11:56:29 &#43;0000</pubDate>
      <author>xxx@example.com (MoeJue)</author>
      <guid>https://zh.moejue.cn/posts/63/</guid>
      <description>
        <![CDATA[<h1>幻想领域图床使用帮助</h1><p>作者：MoeJue（xxx@example.com）</p>
        
          <p>介于较多人在安装使用过程中遇到问题，所以还是得总结一下，如果还不能解决可以加群向万能的群友提问</p>
<h2 id="验证码不显示">
<a class="header-anchor" href="#%e9%aa%8c%e8%af%81%e7%a0%81%e4%b8%8d%e6%98%be%e7%a4%ba"></a>
验证码不显示
</h2><ol>
<li>查看服务器是否支持GD图形处理库</li>
<li>查看服务器WEB环境</li>
</ol>
<ul>
<li>Apache：如果你的程序是安装在二级目录下，修改程序根目录下的.htaccess文件</li>
</ul>
<p>&lt;IfModule mod_rewrite.c&gt;
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
Rewritebase /你的二级目录名/index.php
RewriteRule ^(.*)$ /你的二级目录名/index.php?/$1 [L]
</IfModule></p>
<ul>
<li>Nginx：找到配置文件nginx-conf，在location / 段中修改加入以下内容</li>
</ul>
<p>try_files $uri $uri/ /index.php?$query_string;</p>
<p>或者是这个</p>
<p>if (!-d $request_filename){
set $rule_0 1$rule_0;
}
if (!-f $request_filename){
set $rule_0 2$rule_0;
}
if ($rule_0 = &ldquo;21&rdquo;){
rewrite ^/(.*)$ /index.php?/$1 last;
}</p>
<ul>
<li>IIS伪静态同Apache一样</li>
<li>宝塔面板使用现成的thinkPHP的伪静态</li>
</ul>
<p><strong>邮件发送失败</strong></p>
<ol>
<li>先确定你的25端口是否被封禁，如果封掉，尝试让主机商启用(如果不启用就换服务器)</li>
<li>关掉注册验证或者等下个版本更新（注：改端口是没有用的，465端口需要ssl支持）</li>
</ol>
<h2 id="数据接口异常">
<a class="header-anchor" href="#%e6%95%b0%e6%8d%ae%e6%8e%a5%e5%8f%a3%e5%bc%82%e5%b8%b8"></a>
数据接口异常
</h2><ul>
<li>伪静态重定向失败，请参考上方的再做设置</li>
<li>如果是nginx服务器， 找到路径/framework/core/Framework.php第51行到第53行注释或者删除，具体代码如下(一般Apache服务器不会遇到这个问题，只有nginx的服务器才会)</li>
</ul>
<p>if ($path != &lsquo;&rsquo;) {
$path = strstr(trim($_SERVER[&lsquo;REQUEST_URI&rsquo;],&rsquo;/&rsquo;),$path);
}</p>
        
        <hr><p>本文2018-03-19首发于<a href='https://zh.moejue.cn/'>阿珏酱のBlog</a>，最后修改于2025-09-06</p>]]>
      </description>
      
        <category>教程</category>
      
    </item>
    
    

    <item>
      <title>如何手搓一个便携式显示器</title>
      <link>https://zh.moejue.cn/posts/255/</link>
      <pubDate>Sun, 13 Apr 2025 05:55:01 &#43;0000</pubDate>
      <author>xxx@example.com (MoeJue)</author>
      <guid>https://zh.moejue.cn/posts/255/</guid>
      <description>
        <![CDATA[<h1>如何手搓一个便携式显示器</h1><p>作者：MoeJue（xxx@example.com）</p>
        
          <h3 id="如何手搓一个便携式显示器">
<a class="header-anchor" href="#%e5%a6%82%e4%bd%95%e6%89%8b%e6%90%93%e4%b8%80%e4%b8%aa%e4%be%bf%e6%90%ba%e5%bc%8f%e6%98%be%e7%a4%ba%e5%99%a8"></a>
如何手搓一个便携式显示器
</h3><h3 id="前言">
<a class="header-anchor" href="#%e5%89%8d%e8%a8%80"></a>
前言
</h3><p>家里有一台老旧的笔记本电脑，除了电池不行了，其他部件都还能正常使用。然而，由于技术更新换代太快，这台笔记本除了浏览网页外，几乎没有其他用途。丢掉可惜，卖掉又不值钱。所以我决定将它改造成一个便携式显示器，这样就可以连接笔记本、台式机，玩游戏、看视频了，让它继续发挥余热。 顺便提一下，硬盘已经被我改造成了一个移动硬盘。</p>
<h3 id="材料准备">
<a class="header-anchor" href="#%e6%9d%90%e6%96%99%e5%87%86%e5%a4%87"></a>
材料准备
</h3><ul>
<li>废弃的显示器</li>
<li>LED屏驱动板</li>
<li>屏线</li>
<li>按键板</li>
<li>高压板</li>
<li>电源 (12V 5A)</li>
</ul>
<p><img src="https://gh-proxy.com/github.com/iAJue/MoeJueBlogPic/blob/master/Images/2025/04/13/IMG_20250404_142914_04_13_2025.jpg" alt="IMG_20250404_142914_04_13_2025"></p>
<p>主要材料就是这些了，直接上某宝就可以买到，价格也不贵。 电源还是从我爸颈部按摩器上直接才下来的，又省一笔。</p>
<h3 id="改造过程">
<a class="header-anchor" href="#%e6%94%b9%e9%80%a0%e8%bf%87%e7%a8%8b"></a>
改造过程
</h3><ol>
<li>拆开笔记本显示器，将屏幕取出来。 <img src="https://gh-proxy.com/github.com/iAJue/MoeJueBlogPic/blob/master/Images/2025/04/13/IMG_20250404_142647_04_13_2025.jpg" alt="IMG_20250404_142647_04_13_2025"> <img src="https://gh-proxy.com/github.com/iAJue/MoeJueBlogPic/blob/master/Images/2025/04/13/IMG_20250404_142641_04_13_2025.jpg" alt="IMG_20250404_142641_04_13_2025"> 如果你不知道你的屏幕所对应的驱动板，可以将屏幕后面的参数拍一张照片给商家，他们会根据你的参数给你推荐合适的驱动板。 当然如果你是电路大佬，也可以自己设计图纸打样手搓驱动板。</li>
<li>接线并用热熔胶固定 <img src="https://gh-proxy.com/github.com/iAJue/MoeJueBlogPic/blob/master/Images/2025/04/13/IMG_20250404_155901_04_13_2025.jpg" alt="IMG_20250404_155901_04_13_2025"> ps:热熔胶真是穷人的3D打印机</li>
<li>通电测试 <img src="https://gh-proxy.com/github.com/iAJue/MoeJueBlogPic/blob/master/Images/2025/04/13/IMG_20250404_150154_04_13_2025.jpg" alt="IMG_20250404_150154_04_13_2025"> 我这边为了图省事，已经让商家帮我装好了相应的驱动。</li>
<li>接入信号 <img src="https://gh-proxy.com/github.com/iAJue/MoeJueBlogPic/blob/master/Images/2025/04/13/IMG_20250404_151208_04_13_2025.jpg" alt="IMG_20250404_151208_04_13_2025"></li>
<li>测试按键板功能调节 <img src="https://gh-proxy.com/github.com/iAJue/MoeJueBlogPic/blob/master/Images/2025/04/13/IMG_20250404_151318_04_13_2025.jpg" alt="IMG_20250404_151318_04_13_2025"></li>
<li>使用瓦楞纸做一个外壳 <img src="https://gh-proxy.com/github.com/iAJue/MoeJueBlogPic/blob/master/Images/2025/04/13/IMG_20250404_173602_04_13_2025.jpg" alt="IMG_20250404_173602_04_13_2025"> 看来我用废纸皮做外壳的天赋还是不错的。怕太丑还贴了张壁纸上去。 家里有3D打印机的小伙伴直接设计外壳打印出来，效果会更好。</li>
</ol>
<h3 id="成品">
<a class="header-anchor" href="#%e6%88%90%e5%93%81"></a>
成品：
</h3><p><img src="https://gh-proxy.com/github.com/iAJue/MoeJueBlogPic/blob/master/Images/2025/04/13/IMG_20250413_104214_04_13_2025.jpg" alt="IMG_20250413_104214_04_13_2025"> 前面被热熔胶粘的有点惨不忍睹。</p>
        
        <hr><p>本文2025-04-13首发于<a href='https://zh.moejue.cn/'>阿珏酱のBlog</a>，最后修改于2025-04-13</p>]]>
      </description>
      
        <category>折腾代码</category>
      
    </item>
    
    

    <item>
      <title>用ESP8266-NodeMCU开发板显示一下我的QQ头像</title>
      <link>https://zh.moejue.cn/posts/200/</link>
      <pubDate>Sun, 16 Jun 2024 12:50:42 &#43;0000</pubDate>
      <author>xxx@example.com (MoeJue)</author>
      <guid>https://zh.moejue.cn/posts/200/</guid>
      <description>
        <![CDATA[<h1>用ESP8266-NodeMCU开发板显示一下我的QQ头像</h1><p>作者：MoeJue（xxx@example.com）</p>
        
          <p>诶，说好的自己写esp8266的开发板固件的我回来了。 20年说好的，今天回来还愿了 <a href="https://www.cnblogs.com/Ajue/p/18202561">ESP8266串口WiFi模块 - WiFi杀手</a></p>
<p>今天我们把OLED显示屏也接上，我此次买的是4脚的OLED(128*64)，不支持彩色显示的。</p>
<h3 id="nodemcu开发板">
<a class="header-anchor" href="#nodemcu%e5%bc%80%e5%8f%91%e6%9d%bf"></a>
NodeMCU开发板
</h3><p>NodeMCU是一个开源的IoT物联网硬件开发板，由于它支持WIFI功能且使用方法十分类似Arduino开发板，所以近些年获得了越来越多来自全世界的创客朋友们的青睐。NodeMCU尺寸与Arduino Nano类似。它并不是Arduino团队开发的，但是我们也可以使用Arduino IDE 对它进行开发。</p>
<p>作为万物互联的IoT基础，首先物联网控制板的成本不能过高。高昂的物联网控制元件不利于项目成本控制也不利于广大创客爱好者学习和使用它。在这一点上，NodeMCU比树莓派以及Arduino家族的IoT平台等更具优势。</p>
<p>细心的朋友可能已经发现了，这会我开发板叫做了ESP8266-NodeMCU。然而在其它的网站或资料中，有时是用ESP8266有时是用NodeMCU。那么ESP8266和NodeMCU之间是什么关系呢？</p>
<p>ESP8266是一块芯片（被铁壳子保住的方型的东西），而NodeMCU则是以ESP8266芯片为核心的开发板，如下图所示。 <img src="https://gh-proxy.com/github.com/iAJue/MoeJueBlogPic/blob/master/Images/2024/06/16/78350c19ly8hu4vo3lpljj21hc140n7w.jpg" alt=""> 要想对ESP8266芯片来进行实验操作是很困难的，因为我们很难将小小一枚芯片上的引脚与我们的电脑连接起来然后再进行上传程序等操作。于是便诞生了围绕ESP8266芯片的各种开发板。NodeMCU就是这些开发板中的一员。</p>
<p>NodeMCU开发板上的两排插针与ESP8266芯片的引脚相连。有了开发板上的两排插针，我们就可以很轻松的使用杜邦线将芯片的引脚接到实验电路中。NodeMCU开发板上还配有USB接口以及电压转换电路。这些为我们提供了很大的便利。我们只要用一根USB数据线就可以轻松的实现为ESP8266供电以及上传程序的操作。当然，NodeMCU开发板上的电路功能还不止这些，我就不再继续延伸下去了</p>
<h3 id="驱动的安装">
<a class="header-anchor" href="#%e9%a9%b1%e5%8a%a8%e7%9a%84%e5%ae%89%e8%a3%85"></a>
驱动的安装
</h3><p>虽然之前已经讲过开发板的驱动安装了，但是不够详细。</p>
<p>目前市面上的ESP8266驱动有多种，即使是同一块NodeMcu的开发板驱动也可能是不一样的。目前主流的是CH340和CP210X的驱动</p>
<p>驱动的下载请直接去芯片的制造商的官网下载即可 CP210X：<a href="https://cn.silabs.com/developers/usb-to-uart-bridge-vcp-drivers">https://cn.silabs.com/developers/usb-to-uart-bridge-vcp-drivers</a> CH340C：<a href="https://www.wch.cn/downloads/CH341SER_EXE.html">https://www.wch.cn/downloads/CH341SER_EXE.html</a></p>
<p>下载适合自己平台的驱动安装程序 需要看清楚自己的串口芯片型号是否在驱动程度的支持范围内</p>
<h3 id="如何查看自己的开发板需要什么驱动">
<a class="header-anchor" href="#%e5%a6%82%e4%bd%95%e6%9f%a5%e7%9c%8b%e8%87%aa%e5%b7%b1%e7%9a%84%e5%bc%80%e5%8f%91%e6%9d%bf%e9%9c%80%e8%a6%81%e4%bb%80%e4%b9%88%e9%a9%b1%e5%8a%a8"></a>
如何查看自己的开发板需要什么驱动
</h3><ol>
<li>直接看，下图中竖着的长方形黑条，那个就是USB转串口芯片。上面会写明芯片的型号名称 <img src="https://gh-proxy.com/github.com/iAJue/MoeJueBlogPic/blob/master/Images/2024/06/16/78350c19ly8hu4voc3xefj21hc140n7w.jpg" alt=""></li>
<li>问你买的商家</li>
</ol>
<h3 id="显示屏的焊接">
<a class="header-anchor" href="#%e6%98%be%e7%a4%ba%e5%b1%8f%e7%9a%84%e7%84%8a%e6%8e%a5"></a>
显示屏的焊接
</h3><p>不要焊接错了，不然会烧坏芯片的 OLED接线：</p>
<ul>
<li>GND - GND</li>
<li>VCC - VCC</li>
<li>SCL - GPIO5(D1)</li>
<li>SDA - GPIO4(D2)</li>
</ul>
<p>洛铁加热中 <img src="https://gh-proxy.com/github.com/iAJue/MoeJueBlogPic/blob/master/Images/2024/06/16/78350c19ly8hu4voij5a5j21hc1404dj.jpg" alt=""></p>
<p>下面就是焊接好的，注意接线，不一定是按我这个顺序的，要看名称 <img src="https://gh-proxy.com/github.com/iAJue/MoeJueBlogPic/blob/master/Images/2024/06/16/78350c19ly8hu4voof65aj21hc140dqi.jpg" alt=""></p>
<h3 id="arduino-ide的安装">
<a class="header-anchor" href="#arduino-ide%e7%9a%84%e5%ae%89%e8%a3%85"></a>
Arduino IDE的安装
</h3><ol>
<li>
<p>下载arduino IDE <a href="https://www.arduino.cc/en/software">https://www.arduino.cc/en/software</a></p>
</li>
<li>
<p>安装 安装还要我教？</p>
</li>
<li>
<p>配置 点击工具-开发板-开发板管理器,在设置中写上开发板地址：<a href="http://arduino.esp8266.com/stable/package_esp8266com_index.json">http://arduino.esp8266.com/stable/package_esp8266com_index.json</a> 之后就会自动下载相应的支持库文件了，期间需要保证网络的科学性</p>
</li>
<li>
<p>选择开发板 NodeMCU1.0(ESP-12EModule)</p>
</li>
<li>
<p>选择端口 在计算机的设备管理器中找到你的开发板的COM口</p>
</li>
</ol>
<h3 id="arduino代码">
<a class="header-anchor" href="#arduino%e4%bb%a3%e7%a0%81"></a>
Arduino代码
</h3><p>有时候我觉得我逼逼叨叨说一大堆还不如直接上代码来的直接，我觉得你肯定也是想直接看代码的而不是听我说一堆废话 我也尽可能在代码中注释了(编写arduino代码请遵循C/C++语言规范)</p>
<p>下列的例子中，连接WiFi使用的是库，首次连接需要使用手机连接ESP8266发送出来的WiFi先进行配网操作。写出屏幕使用的是库，支持中文直接写出</p>
<ol>
<li>这是一个简单的连接WiFi和屏幕显示图片的示例</li>
</ol>
<pre tabindex="0"><code>#include &lt;Adafruit_GFX.h&gt;
#include &lt;Adafruit_SSD1306.h&gt;
#include &lt;ESP8266WiFi.h&gt;
#include &lt;NTPClient.h&gt;
#include &lt;WiFiManager.h&gt;
#include &lt;U8g2lib.h&gt;

#define SDA 4  // SDA引脚，默认gpio4(D2)
#define SCL 5  // SCL引脚，默认gpio5(D1)

Adafruit_SSD1306 oled(128, 64, &amp;Wire,-1);   //OLED 屏幕实例化
WiFiUDP ntpUDP;

NTPClient timeClient(ntpUDP,&#34;pool.ntp.org&#34;, 8*3600, 60000);

U8G2_SSD1306_128X64_NONAME_F_SW_I2C u8g2(U8G2_R0, /*clock=*/SCL, /*data=*/SDA, /*reset=*/U8X8_PIN_NONE);           // 选择显示屏幕

// 只执行一次
void setup() {

  u8g2.begin();            // 初始化
  u8g2.enableUTF8Print();  // UTF8允许
  u8g2.setFont(u8g2_font_wqy12_t_gb2312b); //字体大小   u8g2_font_wqy15_t_gb2312b  

  // 初始化屏幕
  OLED_Init();

  OLED_Showchin(1,13,&#34;正在连接WiFi....&#34;,0);
  WiFiManager wifiManager;
  wifiManager.autoConnect(&#34;ESP8266&#34;);

  OLED_Showchin(1,27,&#34;WiFi连接成功！&#34;,0);
  OLED_Showchin(1,41,&#34;名称： &#34; + WiFi.SSID(),0);
  OLED_Showchin(1,55,&#34;IP: &#34; + WiFi.localIP().toString(),1);

  // 获取时间
  timeClient.begin();
  u8g2.setFont(u8g2_font_wqy15_t_gb2312b); //字体大小   u8g2_font_wqy15_t_gb2312b  

  OLED_Showchin(1,13,&#34;宁小建&#34;,0);
  OLED_Showchin(1,27,&#34;hhhhhhhhhhhh&#34;,0);
  OLED_Showchin(1,55,&#34;大傻逼哈哈哈&#34;,1);

  timeClient.update();
  OLED_Showchin(1,20,&#34;当前北京时间: &#34;,0);
  OLED_Showchin(1,41,timeClient.getFormattedTime(),1);
  delay(1000);
  OLED_img();
}

// 重复执行程序
void loop() {
  // 更新时间
  // timeClient.update();
  // OLED_Showchin(1,27,&#34;当前北京时间: &#34;,0);
  // OLED_Showchin(1,41,timeClient.getFormattedTime(),0);
}

// 打印输出到屏幕（支持中文）
void OLED_Showchin(uint8_t x, uint8_t y, String string, uint8_t boot) {
  u8g2.setCursor(x, y);  //设置显示坐标
  u8g2.print(string);  // 指定缓存区需要打印的字符串
  u8g2.sendBuffer();          // 将定位信息发送到缓冲区
  if(boot == 1){
    delay(1000);
    u8g2.clearBuffer();     // 清除缓存，其实初始化里有清除，循环时一定要加上
  }
}

// 屏幕初始化
void OLED_Init() {
  oled.begin(SSD1306_SWITCHCAPVCC, 0x3C);     //&#34;SSD1306_SWITCHCAPVCC&#34;表示显示器为OLED ,&#34;0x3C&#34;为OLED屏幕默认通信地址
  oled.setTextColor(WHITE);//开像素点发光
  oled.clearDisplay();//清屏
}

// 输出屏幕
void OLED_ShowString(uint8_t x, uint8_t y, uint8_t font_size, String string) {
  oled.setTextSize(font_size);    //设置字体尺寸 (&gt;=1)
  oled.setCursor(x, y);           //设置显示坐标
  oled.println(string);           //显示内容
  oled.display();                 //开启显示
}

// 绘画
void OLED_img() {
  //  图片数据
    const unsigned char gImage_1[518] = { 0X00,0X01,0X40,0X00,0X40,0X00,
  0X00,0X40,0X00,0X00,0X00,0X3E,0XF0,0X00,0X00,0X80,0X00,0X00,0X00,0X1F,0XE0,0X00,
  0X00,0X00,0X00,0X00,0X00,0X06,0XB0,0X00,0X01,0X00,0X00,0X00,0X00,0X03,0XF8,0X00,
  0X00,0X00,0X00,0X00,0X00,0X03,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0XDC,0X00,
  0X04,0X00,0X00,0X00,0X00,0X01,0XC0,0X00,0X0E,0X00,0X00,0X00,0X00,0X00,0X80,0X00,
  0X06,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0X00,0X00,0X00,0X10,0X00,0X00,0X00,
  0X08,0X00,0X00,0X00,0X0E,0X00,0X00,0X00,0X08,0X00,0X00,0X00,0X8F,0X00,0X00,0X00,
  0X00,0X00,0X02,0X02,0X47,0X00,0X00,0X00,0X00,0X00,0X01,0X10,0X63,0X80,0X00,0X00,
  0X00,0X00,0X01,0XC9,0X73,0XC0,0X00,0X00,0X00,0X00,0X00,0XE4,0X79,0XE0,0X00,0X00,
  0X00,0X02,0X00,0XFA,0XF9,0XE0,0X00,0X00,0X10,0X02,0X00,0X7D,0X8C,0XF0,0X00,0X00,
  0X10,0X03,0X01,0X7E,0X90,0XF1,0X80,0X00,0X10,0X01,0X20,0XFD,0X1C,0X7B,0XE0,0X00,
  0X00,0X01,0XA0,0X7D,0X03,0X7B,0X20,0X00,0X10,0X01,0XD8,0XFF,0X8B,0X7E,0X30,0X00,
  0X00,0X01,0XFC,0X7F,0X83,0XB6,0X10,0X00,0X00,0X00,0XF7,0XFF,0XC7,0XBE,0X10,0X00,
  0X00,0X01,0X8F,0XFF,0XE3,0XF6,0X10,0X00,0X01,0X01,0X4F,0XFF,0XFF,0XFF,0X10,0X00,
  0X00,0X01,0XCF,0XFF,0XFF,0XDF,0X10,0X00,0X00,0X01,0XC3,0XFF,0XFF,0XDF,0X70,0X00,
  0X01,0X03,0XE3,0XFF,0XFF,0XDF,0XE0,0X00,0X04,0X01,0XE7,0XFF,0XFF,0XDF,0XE4,0X00,
  0X07,0X00,0XFB,0XFF,0XFF,0XDF,0XC0,0X00,0X07,0X00,0XFB,0XFF,0XFF,0XFE,0X00,0X00,
  0X13,0X00,0X7F,0XFF,0XFF,0XFC,0X00,0X00,0X01,0X20,0X3F,0XFF,0XFF,0XFC,0X00,0X00,
  0X00,0X00,0X3F,0XFF,0XFF,0XF8,0X00,0X0B,0X00,0X00,0X1F,0XFE,0X0F,0XF8,0X00,0X1F,
  0X00,0X00,0X1F,0XF8,0X6F,0XF0,0X00,0XFF,0X00,0X00,0X1F,0XE1,0XFF,0XF0,0X05,0XFF,
  0X00,0X00,0X0F,0XF3,0XFF,0XE0,0X03,0XFF,0X00,0X40,0X0F,0XF7,0XFF,0XC0,0X07,0XFF,
  0X00,0X00,0X07,0XFF,0XFF,0X80,0X07,0XFF,0X08,0X00,0X07,0XFF,0XFF,0X00,0X0F,0XFF,
  0X00,0X00,0X23,0XFF,0XFE,0X00,0X0F,0XFF,0X00,0X08,0X60,0XFF,0XFE,0X00,0X0F,0XFF,
  0X00,0X40,0X20,0X3F,0XFE,0X00,0X1F,0XFF,0X00,0X00,0X10,0X0B,0XFF,0X80,0X1F,0XFF,
  0X00,0X00,0X40,0X00,0X3F,0X00,0X1F,0XFF,0X00,0X00,0X10,0X00,0X3F,0X00,0X1F,0XFF,
  0X20,0X00,0X02,0X00,0X3F,0X00,0X3F,0XFF,0X00,0X00,0X00,0X00,0X7F,0X80,0X3F,0XFF,
  0X00,0X00,0X00,0X10,0X7F,0X80,0X7F,0XFF,0X00,0X00,0X00,0X80,0X7F,0X80,0X7F,0XFF,
  0X10,0X00,0X00,0X00,0X7F,0X80,0XFF,0XFF,0X30,0X00,0X00,0X00,0X7F,0X80,0XFF,0XFF,
  0X10,0X10,0X00,0X00,0X7F,0XC1,0XFF,0XFF,0X00,0X00,0X00,0X00,0X7F,0XF3,0XFF,0XFF,
  0X00,0X00,0X01,0X00,0X3F,0XFF,0XFF,0XFF,0X00,0X00,0X00,0X04,0X3F,0XFF,0XFF,0XFF,
  0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X00,0X00,0X10,0X80,0X1F,0XFF,0XFF,0XFF,
  0X01,0X00,0X00,0X05,0X1F,0XFF,0XFF,0XFB,0X00,0X00,0X00,0X00,0X1F,0XF7,0XFF,0XFC,
  0X00,0X00,0X00,0X00,0X1F,0XFB,0XFF,0XFF,0X00,0X00,0X40,0X00,0X19,0XFF,0XFF,0XFF,
  };

  oled.clearDisplay();
  oled.drawBitmap(3, 1, gImage_1, 64, 64, WHITE);
  oled.display();
}
</code></pre><p><img src="https://gh-proxy.com/github.com/iAJue/MoeJueBlogPic/blob/master/Images/2024/06/16/78350c19ly8hu4vppewusj21hc140qb3.jpg" alt=""></p>
        
        <hr><p>本文2024-06-16首发于<a href='https://zh.moejue.cn/'>阿珏酱のBlog</a>，最后修改于2025-04-13</p>]]>
      </description>
      
        <category>折腾代码</category>
      
    </item>
    
    

    <item>
      <title>一款开源简洁高颜值的酷狗第三方客户端V1.0.0 Beta</title>
      <link>https://zh.moejue.cn/posts/225/</link>
      <pubDate>Sun, 03 Nov 2024 12:48:04 &#43;0000</pubDate>
      <author>xxx@example.com (MoeJue)</author>
      <guid>https://zh.moejue.cn/posts/225/</guid>
      <description>
        <![CDATA[<h1>一款开源简洁高颜值的酷狗第三方客户端V1.0.0 Beta</h1><p>作者：MoeJue（xxx@example.com）</p>
        
          <p><img src="https://github.com/iAJue/MoeKoeMusic/raw/main/images/logo.png" alt="Logo"></p>
<h2 id="moekoe-music">
<a class="header-anchor" href="#moekoe-music"></a>
MoeKoe Music
</h2><p>一款开源简洁高颜值的酷狗第三方客户端<br>
<a href="https://github.com/iAJue/MoeKoeMusic/"><strong>🌎 GitHub仓库</strong></a>  |  <a href="https://github.com/iAJue/MoeKoeMusic/releases"><strong>📦️ 下载安装包</strong></a>  |  <a href="https://MoeJue.cn"><strong>💬 访问博客</strong></a></p>
<p><img src="https://github.com/iAJue/MoeKoeMusic/raw/main/images/5.png" alt="images"></p>
<h2 id="前言">
<a class="header-anchor" href="#%e5%89%8d%e8%a8%80"></a>
前言
</h2><p>早在10年前后的样子,那会在用网页版QQ的时候我就已经开始使用酷狗音乐了(也是十来年的老粉了),所以这些年收藏的歌曲全部都在上面.后来我也尝试开始使用网易云或QQ音乐,也尝试把酷狗的歌单导入进去,但是效果都不尽人意.我听的大多是日漫OP,好多歌曲都没办法找到.</p>
<p>兜兜转转最后还是回到酷狗,但是在Mac端的酷狗,时常可能会出现不能播放的情况,虽说界面没什么功能,但也挺好的.在网友的安利下,我现在一直是在酷狗的<a href="https://t1.kugou.com/d2tBza3CSV2">概念版</a>上听歌,并且是市面上为数不多能免费听VIP歌曲的音乐播放软件了,力推.</p>
<p>我在我的个人介绍页面说我特别喜欢听歌,尤其是日漫OP.怎么证明呢?(之前我网页版歌单也年久失修了)那就自己开发一个音乐播放器.</p>
<h2 id="-特性">
<a class="header-anchor" href="#-%e7%89%b9%e6%80%a7"></a>
✨ 特性
</h2><ul>
<li>✅ 使用 Vue.js 全家桶开发</li>
<li>🔴 酷狗账号登录（扫码/手机/账号登录）</li>
<li>📃 支持歌词显示</li>
<li>📻 每日推荐歌曲</li>
<li>🚫🤝 无任何社交功能</li>
<li>🔗 官方服务器直连, 无任何第三方 API</li>
<li>✔️ 每日自动领取VIP, 登录就是VIP</li>
<li>🎨 主题色切换</li>
<li>👋 启动问候语</li>
<li>⚙️ 多平台支持</li>
<li>🛠 更多特性开发中</li>
</ul>
<h2 id="todo-list">
<a class="header-anchor" href="#todo-list"></a>
Todo List
</h2><ul>
<li>[ ] 📺 支持 MV 播放</li>
<li>[ ] 🌚 Light/Dark Mode 自动切换</li>
<li>[ ] 👆 支持 Touch Bar</li>
<li>[ ] 🖥️ 支持 PWA，可在 Chrome/Edge 里点击地址栏右边的 ➕ 安装到电脑</li>
<li>[ ] 🟥 支持 Last.fm Scrobble</li>
<li>[ ] 🎧 支持 Mpris</li>
<li>[ ] ⌨️ 自定义快捷键和全局快捷键</li>
<li>[ ] 🤟 多语言支持</li>
<li>[ ] 📻 桌面歌词</li>
<li>[ ] ⚙️ 系统架构优化</li>
<li>[ ] 🎶 歌曲、歌单/收藏、取消</li>
</ul>
<h2 id="-安装">
<a class="header-anchor" href="#-%e5%ae%89%e8%a3%85"></a>
📦️ 安装
</h2><p>访问本项目的 <a href="https://github.com/iAJue/MoeKoeMusic/releases">Releases</a> 页面下载安装包。</p>
        
        <hr><p>本文2024-11-03首发于<a href='https://zh.moejue.cn/'>阿珏酱のBlog</a>，最后修改于2024-11-04</p>]]>
      </description>
      
        <category>折腾代码</category>
      
    </item>
    
    

    <item>
      <title>重生之我要做商城 - 萌音商城V1.0上线</title>
      <link>https://zh.moejue.cn/posts/203/</link>
      <pubDate>Wed, 02 Oct 2024 06:17:50 &#43;0000</pubDate>
      <author>xxx@example.com (MoeJue)</author>
      <guid>https://zh.moejue.cn/posts/203/</guid>
      <description>
        <![CDATA[<h1>重生之我要做商城 - 萌音商城V1.0上线</h1><p>作者：MoeJue（xxx@example.com）</p>
        
          <p>萌音系列的第N+1个项目来了呢. 这其实又是一个鸽了好几年的项目了,这回总算能把坑填上了.</p>
<h5 id="先上项目地址-httpsmoekoecn">
<a class="header-anchor" href="#%e5%85%88%e4%b8%8a%e9%a1%b9%e7%9b%ae%e5%9c%b0%e5%9d%80-httpsmoekoecn"></a>
先上项目地址: <a href="https://MoeKoe.cn">https://MoeKoe.cn</a>
</h5><h4 id="我为什么一直在做项目">
<a class="header-anchor" href="#%e6%88%91%e4%b8%ba%e4%bb%80%e4%b9%88%e4%b8%80%e7%9b%b4%e5%9c%a8%e5%81%9a%e9%a1%b9%e7%9b%ae"></a>
我为什么一直在做项目?
</h4><p>这个问题就很有意思了,为什么一直在做各种项目,而且还是不挣钱的东西. 接触过我之前一些项目的小伙伴都知道我开发什么项目都是本着自己用的原则在创作的,当然这次也不例外. 一直我就想在某个平台卖卖我那些留着没用,丢了舍不得的小玩意,同时分享好玩有趣的产品给大家(未来可能还有我自己的IP产品). &ldquo;想把最美好的事和物分享给最美好的你&rdquo; 就算,本着&quot;别人有我也要有&quot;的原则,我也得有.</p>
<p>如果说我只是想卖点小玩意,我为何不直接上淘宝,闲鱼这样的平台呢,退一万步讲,就算不上这些平台,我也可以自己搭建一个现成的商城系统啊,现在市面上成熟好用的系统一抓一大把哦,为何还要自己开发呢?</p>
<p>一句话,因为我喜欢,这是我的爱好,我喜欢创造,喜欢做点有意思的东西,和事. 我想成为一个厉害而又有趣的人,而不是一个只会活着的普通人,我想认识更多有趣的灵魂. 厉害对于我的定义并不是说他技术有多厉害,赚钱有多厉害,而是一个人面对挫折和困苦的时候,依然能笑着面对,依然能保持乐观,不忘初心,这样的人,我愿称他为厉害的人.</p>
<p>明明是一个发布新项目的文章,又给我写成大白话博客了,哈哈哈.</p>
<h3 id="项目介绍">
<a class="header-anchor" href="#%e9%a1%b9%e7%9b%ae%e4%bb%8b%e7%bb%8d"></a>
项目介绍
</h3><p>最近在搞什么? 在搞粉嫩粉嫩的东西,一个二次元少女萌系风格的魔法少女商城.</p>
<blockquote>
<p>欢迎来到魔法少女的奇幻世界，开启探索二次元无限可能的冒险之旅！这是专为二次元爱好者量身打造的在线商城。在这里，你能找到最闪耀的魔法道具、最萌系的变身服饰，还有丰富多样的二次元周边商品。无论你钟情于可爱的萌物，还是酷炫的收藏品，这里都能满足你对二次元的所有热爱与期待！</p>
</blockquote>
<p>点开网址你会发现一个让你眼前一亮(粉)的感觉,没错,这就是我想要的风格,粉嫩粉嫩的,少女心爆棚,卡哇伊的感觉,这样才能突出我的个性. <img src="https://gh-proxy.com/github.com/iAJue/MoeJueBlogPic/blob/master/Images/2024/10/02/78350c19ly8hu80pi6l1vj22bm1g2kjp.jpg" alt=""></p>
<h3 id="技术栈">
<a class="header-anchor" href="#%e6%8a%80%e6%9c%af%e6%a0%88"></a>
技术栈
</h3><ul>
<li>Vue.js3</li>
<li>Vite</li>
<li>Pinia</li>
<li>Axios</li>
<li>Node.js</li>
<li>Express</li>
<li>Mysql</li>
<li>Nginx</li>
<li>前后端分离</li>
<li>MySQL线程池</li>
</ul>
<p>Vue.js全家桶真是太棒了,省去自己写原生的烦恼,目前国际化插件(i18n)这个版本还没有上,由于市面上的UI库并不直接符合我对这个项目的定位和我的个性,所以并没有使用现成的界面库,全靠自己手撸.</p>
<p><img src="https://gh-proxy.com/github.com/iAJue/MoeJueBlogPic/blob/master/Images/2024/10/02/78350c19ly8hu80vhmhh0j21ys1fqqv7.jpg" alt=""></p>
<h3 id="介绍">
<a class="header-anchor" href="#%e4%bb%8b%e7%bb%8d"></a>
介绍:
</h3><ul>
<li>支持虚拟币USDT(只需填写钱包地址,自动监控到到账,无须外置程序,监控系统有新订单自动启动,30分钟无新订单自动休眠,减少资源消耗)</li>
<li>支持支付宝当面付支付,即时到账,自动回调</li>
<li>支持用户注册,登录,登出,修改密码,修改头像,商品评论</li>
<li>支持商品管理,商品分类管理</li>
<li>支持订单管理,订单支付,订单发货,物流查询</li>
<li>支持商品订单数据分析</li>
<li>全站响应式布局</li>
<li>前后端分离</li>
<li>MySQL线程池</li>
<li>系统的基本信息设置</li>
</ul>
<p><img src="https://gh-proxy.com/github.com/iAJue/MoeJueBlogPic/blob/master/Images/2024/10/02/78350c19ly8hu80ywg8ntj21y21f2x6p.jpg" alt=""></p>
<p>第一个版本就只增加了基础和必要的功能,新功能在设计的时候就已经考虑到了,数据库和代码都做了预留(所以当你看到某一个按钮点击了没有反应的时候不要紧张,因为它后面根本就没有代码),会在未来的版本中进行添加. 目前商城售卖的是一种实物发货的形式,未来会加上虚拟商品的售卖,基本就是把<a href="https://pay.MoeKoe.cn">萌音发卡</a>的功能都直接给合并进来了.</p>
<p><img src="https://gh-proxy.com/github.com/iAJue/MoeJueBlogPic/blob/master/Images/2024/10/02/78350c19ly8hu80ynckudj21lc1fs7wh.jpg" alt=""></p>
<p>我对这个项目的命名是mall,而不是shop,所以之后它有可能会变成一个商场,而不只是一个商店.</p>
<h3 id="未来">
<a class="header-anchor" href="#%e6%9c%aa%e6%9d%a5"></a>
未来:
</h3><ul>
<li>多商户模式. 直接用户申请入驻商城成为商家,借助萌音商城进行售卖自己的产品</li>
<li>商品多产品分类. 产品更多的规格分类</li>
<li>更多的支付方式. 因为目前作者没有其他的支付权限,仅对接了两个</li>
<li>支持虚拟商品. 算是把发卡的功能给集成进来了</li>
<li>商品海报宣传图生成</li>
<li>邮件系统. 可有可无的通知功能而已</li>
<li>右下角的多功能菜单.下方的笑脸小人,会成为一个智能导航系统</li>
<li>增加商品界面数据显示.数据一目了然</li>
<li>多语言支持(i18n). 跟随国际化潮流,走向世界</li>
<li>短信系统. 跟邮件系统一毛一样</li>
<li>Redis缓存. 本来是准备在这个版本加上去的,不过数据的控制也还好</li>
<li>暗黑模式. 也是跟随潮流</li>
</ul>
<p><img src="https://gh-proxy.com/github.com/iAJue/MoeJueBlogPic/blob/master/Images/2024/10/02/78350c19ly8hu80wkxv32j21wq1f2e81.jpg" alt=""></p>
        
        <hr><p>本文2024-10-02首发于<a href='https://zh.moejue.cn/'>阿珏酱のBlog</a>，最后修改于2024-10-08</p>]]>
      </description>
      
        <category>折腾代码</category>
      
    </item>
    
    

    <item>
      <title>真 · 逃避现实</title>
      <link>https://zh.moejue.cn/posts/116/</link>
      <pubDate>Fri, 18 Sep 2020 06:17:34 &#43;0000</pubDate>
      <author>xxx@example.com (MoeJue)</author>
      <guid>https://zh.moejue.cn/posts/116/</guid>
      <description>
        <![CDATA[<h1>真 · 逃避现实</h1><p>作者：MoeJue（xxx@example.com）</p>
        
          <p>一直以来我都有一个想买vr设备的愿望，今天终于圆了<br>
在 @本群吉祥物 的推荐下，买了Oculus 品牌的VR一体机</p>
<p>开卡省钱卡- &gt; 领优惠券 -&gt; 充钱 -&gt; 下单 -&gt; 一气呵成 （心在流血）<br>
<img src="https://gh-proxy.com/github.com/iAJue/MoeJueBlogPic/blob/master/Images/2020/09/18/0072Vf1ply1gius6o43luj30im0im0w1.jpg" alt=""><br>
由于Oculus品牌没有进入中国市场等原因，所以我这也捆绑买了一个千兆的路由器<br>
到货就是两个大箱子<img src="https://gh-proxy.com/github.com/iAJue/MoeJueBlogPic/blob/master/Images/2020/09/18/0072Vf1ply1gius8qrdgbj31hc0u0gqr.jpg" alt=""><br>
一个是装着VR本体的，商家额外赠送了一个USB充电电池，SMARTOOOLS西班牙品牌，貌似还行<img src="https://gh-proxy.com/github.com/iAJue/MoeJueBlogPic/blob/master/Images/2020/09/18/0072Vf1ply1giusi2qqxej31hc0u0jwj.jpg" alt=""><br>
另外一个箱子则是我的千兆路由器和好几百一根的USB3.0 link线<br>
<img src="https://gh-proxy.com/github.com/iAJue/MoeJueBlogPic/blob/master/Images/2020/09/18/0072Vf1ply1giusm81bmtj31hc0u0dkw.jpg" alt=""><br>
长着跟个花生壳似的路由器<br>
<img src="https://gh-proxy.com/github.com/iAJue/MoeJueBlogPic/blob/master/Images/2020/09/18/0072Vf1ply1giusn2c05tj30u01hcafe.jpg" alt=""><br>
一堆看不懂的说明书，还是外置风扇(#哭笑)。由于这个路由器品牌也是国外的，三线插头是欧洲标准，国内的三孔插座还得接个转换器<br>
<img src="https://gh-proxy.com/github.com/iAJue/MoeJueBlogPic/blob/master/Images/2020/09/18/0072Vf1ply1giusn4g1sgj31hc0u0gql.jpg" alt=""><br>
外包装 - 反面，下面放着一些热门游戏推荐<br>
<img src="https://gh-proxy.com/github.com/iAJue/MoeJueBlogPic/blob/master/Images/2020/09/18/0072Vf1ply1giut1x3dwpj31hc0u0aet.jpg" alt=""><br>
正面，简约炫酷<br>
<img src="https://gh-proxy.com/github.com/iAJue/MoeJueBlogPic/blob/master/Images/2020/09/18/0072Vf1ply1giut2ajwujj30u01hctbt.jpg" alt=""><br>
包装里面的盒子，印着Oculus的logo<br>
<img src="https://gh-proxy.com/github.com/iAJue/MoeJueBlogPic/blob/master/Images/2020/09/18/0072Vf1ply1giut3pv2esj30u01hcdii.jpg" alt=""><br>
掀起盖子，哇塞<br>
Oculus Quest 六自由度VR，是目前市面上最强VR一体机<br>
<img src="https://gh-proxy.com/github.com/iAJue/MoeJueBlogPic/blob/master/Images/2020/09/18/0072Vf1ply1giut3ugoa8j30u01hcn20.jpg" alt=""><br>
官方有附带一对手柄电池，和设备基本操作说明书，和一本厚厚的详细到看不懂的说明书<br>
<img src="https://gh-proxy.com/github.com/iAJue/MoeJueBlogPic/blob/master/Images/2020/09/18/0072Vf1ply1giut3ykg0oj30u01hc0wf.jpg" alt=""><br>
<img src="https://gh-proxy.com/github.com/iAJue/MoeJueBlogPic/blob/master/Images/2020/09/18/0072Vf1ply1giut4b7xeoj30u01hcdk1.jpg" alt=""><br>
摆拍，主机+左右手柄<br>
<img src="https://gh-proxy.com/github.com/iAJue/MoeJueBlogPic/blob/master/Images/2020/09/18/0072Vf1ply1giut4ctdjuj31hc0u0wjh.jpg" alt=""><br>
接下来就是开机上手，下载我心心念念已久的Beat Saber、VRChat&hellip;&hellip;开启我的逃避现实之旅&hellip;&hellip;..<br>
<img src="https://gh-proxy.com/github.com/iAJue/MoeJueBlogPic/blob/master/Images/2020/09/18/0072Vf1ply1giut4iexgwj30mf0sgtcc.jpg" alt=""></p>
<p>后话：<br>
一般开箱我都不做测评，因为专业的测评需要专业的学术知识去支撑，还需要会说那些牛逼的术语。但是我不会，我也不想误导看我文章的人，一本正经的胡说八道。我仅仅只是说我想说的话<br>
让我在VRChat里等你们，之后有空的话我也会拍先我游玩的视频到小破站</p>
<p>如果有想进一步了解Oculus Quest的，我这边推荐一个专业的测评视频。<br>
Oculus Quest VR 让我们离「刀剑神域」「头号玩家」还有多远？<br>
<a href="https://www.youtube.com/watch?v=2z-QyogFp9o&amp;list=LL7N4D2xapjcfH_WEdH-Z0Tg&amp;index=13&amp;t=27s">https://www.youtube.com/watch?v=2z-QyogFp9o</a>   (如果能打开的话)</p>
        
        <hr><p>本文2020-09-18首发于<a href='https://zh.moejue.cn/'>阿珏酱のBlog</a>，最后修改于2020-09-18</p>]]>
      </description>
      
        <category>谈天说地</category>
      
    </item>
    
    

    <item>
      <title>Android查看apk安装包的AndroidManifest.xml文件</title>
      <link>https://zh.moejue.cn/posts/110/</link>
      <pubDate>Sun, 19 Apr 2020 09:15:54 &#43;0000</pubDate>
      <author>xxx@example.com (MoeJue)</author>
      <guid>https://zh.moejue.cn/posts/110/</guid>
      <description>
        <![CDATA[<h1>Android查看apk安装包的AndroidManifest.xml文件</h1><p>作者：MoeJue（xxx@example.com）</p>
        
          <p><strong>起因</strong><br>
上周在做安卓系统的厂家推送功能，某些机型无法离线厂推，所以准备解包apk看一下打包参数是否出问题。</p>
<p><strong>序言</strong><br>
在Android开发中，可能需要从我们自己的应用跳转到别的应用的界面，但是在不知道别的应用的包名以及类名的情况下，是很难做到这一点的，有个最简单的方法就是下载应用的apk文件，然后修改后缀名为zip或者rar,之后解压文件，在解压出来的文件中，就会有一个AndroidManifest.xml的文件，但是打开之后，可能是乱码，这就尴尬了，那怎么办呢？</p>
<p>AXMLPrinter2.jar是一款常用的apk反编译工具，主要用于反编译apk文件，包括包名、版本号和图标等信息，可以用AXMLPrinter2对androidmanifest.xml反编译进行明文查看。</p>
<p><strong>使用方法</strong><br>
1、 下载工具AXMLPrinter2.jar工具 地址：https://code.google.com/archive/p/android4me/downloads<br>
2、 将要查看的AndroidManfist.xml文件拷贝至与工具相同文件夹下<br>
3、 在当前文件夹打开DOS窗口<br>
4、 执行如下命令</p>
<p>java -jar AXMLPrinter2.jar AndroidManifest.xml &raquo; AndroidManifest.txt</p>
<p>执行完该命令后会在该文件夹生成AndroidManifest.txt文件，该文件便是解码后的文件。</p>
<p>当然，可能有些执行后就会报错 ：&lsquo;java&rsquo; 不是内部或外部命令，也不是可运行的程序 或批处理文件。<br>
这是因为没有安装Java环境或未配置环境变量导致的。</p>
<p><strong>安装JDK</strong><br>
首先先来回顾下安装JDK的过程</p>
<p>1. 下载JDK并安装</p>
<p>JDK1.6、1.7、1.8任君选择下载，想用哪个直接下载哪个吧<br>
官方网站下载JDK <a href="https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html">https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html</a><br>
安装很简单，无脑下一步操作就行了，这里不再赘述</p>
<p>2. 配置JDK环境变量</p>
<p>（1）右击电脑中的“我的电脑”，win10为“这台电脑”，选择“属性”，选择高级系统设置 ，在新界面中选择“环境变量”，我们只编辑“系统变量”就可以了<br>
<img src="https://gh-proxy.com/github.com/iAJue/MoeJueBlogPic/blob/master/Images/2020/04/19/0072Vf1ply1gdz8ohzbxnj30y10hz435.jpg" alt=""><br>
（2） 点击新建添加变量名为“JAVA_HOME”，变量值为“C:\Program Files\Java\jdk1.8.0_60”，这个值就是你安装的JDK路径，你安装到了哪里，就用那个地址就行<br>
<img src="https://gh-proxy.com/github.com/iAJue/MoeJueBlogPic/blob/master/Images/2020/04/19/0072Vf1ply1gdz8ozylg5j30m20lldi6.jpg" alt="">再新建一个变量名为“CLASSPATH”，变量值为“.;%JAVA_HOME%/lib/dt.jar;%JAVA_HOME%/lib/tools.jar”的变量，并确定保存，注意值内的“.;”不要漏掉，每一个符号都不能少</p>
<p>最关键的一步来了，找找有没有叫“path”的变量，大小写都行，没有则新建，有则直接点编辑<br>
如果已经有path这个变量了，那么里面一定保存了一些内容，我们不管它，为了更方便编辑，我们把其中的变量值先复制出来</p>
<p>然后将内容粘贴到文本编辑器中，在内容的最前面添加内容“%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;”，结果如下<br>
<img src="https://gh-proxy.com/github.com/iAJue/MoeJueBlogPic/blob/master/Images/2020/04/19/0072Vf1ply1gdz8py2u6ij30tm0jl77z.jpg" alt=""><br>
然后再把整个值复制后粘贴到之前编辑的变量值中，确定保存。</p>
<p>回顾一下上边的步骤，其中总共添加了三个值：<br>
JAVA_HOME：C:\Program Files\Java\jdk1.8.0_60<br>
CLASSPATH：.;%JAVA_HOME%/lib/dt.jar;%JAVA_HOME%/lib/tools.jar<br>
PATH：%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;</p>
<p>下面是验证安装是否成功</p>
<p>win+R打开运行，输入cmd后打开命令行<br>
输入“java”，正常会显示一大堆的操作提示<br>
输入“java -version” ,正常会显示你安装的java版本号信息<br>
输入“javac”，正常会显示javac的一些用法</p>
<p>完结撒花！</p>
        
        <hr><p>本文2020-04-19首发于<a href='https://zh.moejue.cn/'>阿珏酱のBlog</a>，最后修改于2020-04-19</p>]]>
      </description>
      
        <category>折腾代码</category>
      
    </item>
    
    

    <item>
      <title>支付宝当面付对接</title>
      <link>https://zh.moejue.cn/posts/107/</link>
      <pubDate>Sat, 04 Apr 2020 02:35:18 &#43;0000</pubDate>
      <author>xxx@example.com (MoeJue)</author>
      <guid>https://zh.moejue.cn/posts/107/</guid>
      <description>
        <![CDATA[<h1>支付宝当面付对接</h1><p>作者：MoeJue（xxx@example.com）</p>
        
          <p>当面付顾名思义，面对面付款，帮助商家在线下消费场景下实现快速收款；当面付产品支持条码支付和扫码支付两种付款方式。<br>
我们这里对接的就是扫码支付<br>
扫码支付，指用户打开支付宝钱包中的“扫一扫”功能，扫描商家展示在某收银场景下的二维码并进行支付的模式。该模式适用于线下实体店支付、面对面支付等场景。业务流程如下图所示：<br>
<img src="https://gh-proxy.com/github.com/iAJue/MoeJueBlogPic/blob/master/Images/2020/04/04/0072Vf1ply1gciwmfk760j30kf071dfz.jpg" alt=""><br>
由于当面付的签约非常简单，允许个体工商户/个人商户签约。所以该方式也被大量用于线上的扫码支付，由于该方式违反了支付宝的相关条款，有一定风险，咱作为技术交流，暂且先抛开这个问题。</p>
<p>作为技术对接，即使你没有签约当面付产品，也是可以进行开发的。<br>
支付能力直接涉及到交易与资金，为了方便开放者调试支付能力，开放平台已经准备好沙箱环境，包括沙箱环境账号和沙箱版支付宝钱包，这样开发者就可以在沙箱环境调试了。点击了解<a href="https://docs.open.alipay.com/200/105311">如何接入沙箱</a>并<a href="https://openhome.alipay.com/platform/appDaily.htm">接入沙箱环境</a>。<br>
<img src="https://gh-proxy.com/github.com/iAJue/MoeJueBlogPic/blob/master/Images/2020/04/04/0072Vf1ply1gciwn0aa2ej30sq0ptwi3.jpg" alt=""><br>
所以我这边开发使用的是沙箱环境，毕竟里面好多钱，随便用。<br>
<img src="https://gh-proxy.com/github.com/iAJue/MoeJueBlogPic/blob/master/Images/2020/04/04/0072Vf1ply1gciwlx66oxj30cn0qo0tj.jpg" alt=""><br>
首先先下载相应的开发语言的sdk 下载：https://docs.open.alipay.com/194/105201/<br>
扫码支付文档：https://docs.open.alipay.com/194/106078/</p>
<p><strong>配置密钥</strong><br>
为了保证交易双方（商户和支付宝）的身份和数据安全，开发者在调用接口前，需要配置双方密钥，对交易数据进行双方校验。<br>
下载<a href="https://docs.open.alipay.com/291/105971">支付宝开放平台开发助手</a>进行密钥生成。<br>
生成密钥后，开发者需要在开放平台开发者中心进行密钥配置，配置完成后可以获取支付宝公钥<br>
<img src="https://gh-proxy.com/github.com/iAJue/MoeJueBlogPic/blob/master/Images/2020/04/04/0072Vf1ply1gciwnhq0ztj30u00lo0y6.jpg" alt=""><br>
<strong>设计接入</strong><br>
由于我这边的设计不需要用到轮询(后面会说)，所以没有加上<br>
以下是我业务中的相关代码</p>
<pre><code>public function pay(){

    if (request()-&gt;isPost()) {
        
        // (必填) 商户网站订单系统中唯一订单号，64个字符以内，只能包含字母、数字、下划线，
        // 需保证商户系统端不能重复，建议通过数据库sequence生成，
        $uid = Session::get('sq.uid');
        $outTradeNo = order\_num() . $uid;

        // (必填) 订单标题，粗略描述用户的支付目的。如“xxx品牌xxx门店当面付扫码消费”
        $subject = '聚合平台用户积分充值';

        // (必填) 订单总金额，单位为元，不能超过1亿元
        // 如果同时传入了【打折金额】,【不可打折金额】,【订单总金额】三者,则必须满足如下条件:【订单总金额】=【打折金额】+【不可打折金额】
        $totalAmount = input('post.pay\_money/f');
        if($totalAmount &lt; 1){
            return \['status' =&gt; 1, 'msg' =&gt; '最低充值金额1元'\];
        }
        if($totalAmount &gt; 9999999){
            return \['status' =&gt; 1, 'msg' =&gt; '充值最大金额不能超过9999999元'\];
        }


        // (不推荐使用) 订单可打折金额，可以配合商家平台配置折扣活动，如果订单部分商品参与打折，可以将部分商品总价填写至此字段，默认全部商品可打折
        // 如果该值未传入,但传入了【订单总金额】,【不可打折金额】 则该值默认为【订单总金额】- 【不可打折金额】
        //String discountableAmount = &quot;1.00&quot;; //

        // (可选) 订单不可打折金额，可以配合商家平台配置折扣活动，如果酒水不参与打折，则将对应金额填写至此字段
        // 如果该值未传入,但传入了【订单总金额】,【打折金额】,则该值默认为【订单总金额】-【打折金额】
        // $undiscountableAmount = &quot;0.01&quot;;

        // 卖家支付宝账号ID，用于支持一个签约账号下支持打款到不同的收款账号，(打款到sellerId对应的支付宝账号)
        // 如果该字段为空，则默认为与支付宝签约的商户的PID，也就是appid对应的PID
        //$sellerId = &quot;&quot;;

        // 订单描述，可以对交易或商品进行一个详细地描述，比如填写&quot;购买商品2件共15.00元&quot;
        $body = &quot;聚合平台用户积分充值&quot; . $totalAmount . '元';

        //商户操作员编号，添加此参数可以为商户操作员做销售统计
        // $operatorId = &quot;&quot;;

        // (可选) 商户门店编号，通过门店号和商家后台可以配置精准到门店的折扣信息，详询支付宝技术支持
        // $storeId = &quot;&quot;;

        // 支付宝的店铺编号
        // $alipayStoreId= &quot;&quot;;

        // 业务扩展参数，目前可添加由支付宝分配的系统商编号(通过setSysServiceProviderId方法)，系统商开发使用,详情请咨询支付宝技术支持
        // $providerId = &quot;&quot;; //系统商pid,作为系统商返佣数据提取的依据
        // $extendParams = new ExtendParams();
        // $extendParams-&gt;setSysServiceProviderId($providerId);
        // $extendParamsArr = $extendParams-&gt;getExtendParams();

        // 支付超时，线下扫码交易定义为5分钟
        $timeExpress = &quot;5m&quot;;

        // 商品明细列表，需填写购买商品详细信息，
        // $goodsDetailList = array();

        // // 创建一个商品信息，参数含义分别为商品id（使用国标）、名称、单价（单位为分）、数量，如果需要添加商品类别，详见GoodsDetail
        // $goods1 = new GoodsDetail();
        // $goods1-&gt;setGoodsId(&quot;apple-01&quot;);
        // $goods1-&gt;setGoodsName(&quot;iphone&quot;);
        // $goods1-&gt;setPrice(3000);
        // $goods1-&gt;setQuantity(1);
        // //得到商品1明细数组
        // $goods1Arr = $goods1-&gt;getGoodsDetail();

        // // 继续创建并添加第一条商品信息，用户购买的产品为“xx牙刷”，单价为5.05元，购买了两件
        // $goods2 = new GoodsDetail();
        // $goods2-&gt;setGoodsId(&quot;apple-02&quot;);
        // $goods2-&gt;setGoodsName(&quot;ipad&quot;);
        // $goods2-&gt;setPrice(1000);
        // $goods2-&gt;setQuantity(1);
        // //得到商品1明细数组
        // $goods2Arr = $goods2-&gt;getGoodsDetail();

        // $goodsDetailList = array($goods1Arr,$goods2Arr);

        //第三方应用授权令牌,商户授权系统商开发模式下使用
        $appAuthToken = &quot;&quot;;//根据真实值填写

        // 创建请求builder，设置请求参数
        $qrPayRequestBuilder = new AlipayTradePrecreateContentBuilder();
        $qrPayRequestBuilder-&gt;setOutTradeNo($outTradeNo);
        $qrPayRequestBuilder-&gt;setTotalAmount($totalAmount);
        $qrPayRequestBuilder-&gt;setTimeExpress($timeExpress);
        $qrPayRequestBuilder-&gt;setSubject($subject);
        $qrPayRequestBuilder-&gt;setBody($body);
        // $qrPayRequestBuilder-&gt;setUndiscountableAmount($undiscountableAmount);
        // $qrPayRequestBuilder-&gt;setExtendParams($extendParamsArr);
        // $qrPayRequestBuilder-&gt;setGoodsDetailList($goodsDetailList);
        // $qrPayRequestBuilder-&gt;setStoreId($storeId);
        // $qrPayRequestBuilder-&gt;setOperatorId($operatorId);
        // $qrPayRequestBuilder-&gt;setAlipayStoreId($alipayStoreId);

        $qrPayRequestBuilder-&gt;setAppAuthToken($appAuthToken);


        // 调用qrPay方法获取当面付应答
        require ROOT\_PATH.'extend/f2fpay/config/config.php';
        $qrPay = new AlipayTradeService($config);
        $qrPayResult = $qrPay-&gt;qrPay($qrPayRequestBuilder);

        //  根据状态值进行业务处理
        switch ($qrPayResult-&gt;getTradeStatus()){
            case &quot;SUCCESS&quot;:
                $response = $qrPayResult-&gt;getResponse();

                Db::name('order')
                    -&gt;insert(\[
                        'uid' =&gt; $uid,
                        'pay\_id' =&gt; $outTradeNo,
                        'money' =&gt; $totalAmount,
                        'creat\_time' =&gt; time(),
                        'subject' =&gt; $subject
                    \]);

                return \['status' =&gt; 0, 'msg' =&gt; '支付宝创建订单二维码成功!!!&quot;','data' =&gt; \[
                    'qr\_code' =&gt; $response-&gt;qr\_code,
                    'outTradeNo' =&gt; $outTradeNo
                \]\];
                // $qrcode = $qrPay-&gt;create\_erweima($response-&gt;qr\_code);
                // echo $qrcode;
                // print\_r($response);
                break;
            case &quot;FAILED&quot;:
                return \['status' =&gt; 1, 'msg' =&gt; '支付宝创建订单二维码失败!!!&quot;'\];
                // if(!empty($qrPayResult-&gt;getResponse())){
                //     print\_r($qrPayResult-&gt;getResponse());
                // }
                break;
            case &quot;UNKNOWN&quot;:
                return \['status' =&gt; 1, 'msg' =&gt; '系统异常，状态未知!!!&quot;'\];
                // echo &quot;系统异常，状态未知!!!&quot;.&quot;&lt;br&gt;--------------------------&lt;br&gt;&quot;;
                // if(!empty($qrPayResult-&gt;getResponse())){
                //     print\_r($qrPayResult-&gt;getResponse());
                // }
                break;
            default:
                return \['status' =&gt; 1, 'msg' =&gt; '不支持的返回状态，创建订单二维码返回异常!!!'\];
                break;
        }
        return ;
    }


}
</code></pre>
<p>以上就是当面付预下单代码<br>
关于这个SDK，我非常有必要吐槽一下，哪个货写的demo，还在PHP例子里引入了个lotusphp框架，一大堆没有用的东西，完全没有考虑我们开发者能不能接受的了。<br>
我也是花了点时间，把SDK给精简了一下，只拿出我需要的部分，放入了我自己的框架中，加上了namespace，自动加载。<br>
<img src="https://gh-proxy.com/github.com/iAJue/MoeJueBlogPic/blob/master/Images/2020/04/04/0072Vf1ply1gciwodh05dj30af0egdho.jpg" alt=""><br>
扫码支付有一个独有的功能&mdash;-异步通知<br>
这个也正是线上支付最为需要的功能<br>
当收银台调用预下单请求 API 生成二维码展示给用户后，用户通过手机扫描二维码进行支付，支付宝会将该笔订单的变更信息，沿着商户调用预下单请求时所传入的异步通知地址 notify_url，通过 POST 请求的形式将支付结果作为参数通知到商户系统。<br>
<img src="https://gh-proxy.com/github.com/iAJue/MoeJueBlogPic/blob/master/Images/2020/04/04/0072Vf1ply1gciwouog84j30o10cu768.jpg" alt=""><br>
记住这个异步通知地址需要在应用那设置一下。</p>
        
        <hr><p>本文2020-04-04首发于<a href='https://zh.moejue.cn/'>阿珏酱のBlog</a>，最后修改于2020-04-04</p>]]>
      </description>
      
        <category>折腾代码</category>
      
    </item>
    
    

    <item>
      <title>ESP8266串口WiFi模块 - WiFi杀手</title>
      <link>https://zh.moejue.cn/posts/105/</link>
      <pubDate>Mon, 03 Feb 2020 06:59:55 &#43;0000</pubDate>
      <author>xxx@example.com (MoeJue)</author>
      <guid>https://zh.moejue.cn/posts/105/</guid>
      <description>
        <![CDATA[<h1>ESP8266串口WiFi模块 - WiFi杀手</h1><p>作者：MoeJue（xxx@example.com）</p>
        
          <p>前段时间买了个ESP8266，准备拿来耍耍。实际吃灰数月，然后就拖到了2020年<br>
ESP8266是一个WiFi物联网模块，实际应用很广，功能简单来讲就是：从wifi接收到数据，串口输出；从串口接收数据，wifi输出数据。</p>
<p>这玩意技术成熟，成本低廉，所以售价也就十几块钱的事<br>
<img src="https://gh-proxy.com/github.com/iAJue/MoeJueBlogPic/blob/master/Images/2020/02/03/0072Vf1ply1gbjav59u52j30p90alq42.jpg" alt=""><br>
开箱 我这里买的还是带OLED 液晶屏的套餐（给以后玩好玩的东西准备）<br>
<img src="https://gh-proxy.com/github.com/iAJue/MoeJueBlogPic/blob/master/Images/2020/02/03/0072Vf1ply1gbjb22mijhj310a0r741n.jpg" alt=""><br>
最经典的应该就是WiFi杀手了。所以咱就先刷一个WiFi杀手的固件玩玩<br>
固件：https://github.com/samdenty/Wi-PWN?wi-pwn=7.0<br>
原理是通过发送取消认证报文让客户端以为路由器需要让自己断开连接从而断开wifi，伪造路由器向客户端发送取消认证报文，使客户端主动断开wifi连接。并且支持自定义热点伪造（批量生成假Wi-Fi信号）。</p>
<p>使用能数据传输的数据线连接电脑，台式机尽量插到后面的口去<br>
插上后，Windows系统的电脑会自动安装驱动，如下图所示，记住这个COM<br>
<img src="https://gh-proxy.com/github.com/iAJue/MoeJueBlogPic/blob/master/Images/2020/02/03/0072Vf1ply1gbjb5v538uj308i0250st.jpg" alt=""><br>
还需要安装ch341ser驱动，USB转串口CH341/CH340的WINDOWS驱动程序安装包。按提示安装即可。这个需要另外下载</p>
<p>固件烧录<br>
我这里使用的是NodeMcu FIRMWARE PROGRAMMER烧录工具<br>
1、operation 这里的com端口选择之前看到的那个。或者在设备管理器中看你ESP8266开发板是插在哪个口<br>
<img src="https://gh-proxy.com/github.com/iAJue/MoeJueBlogPic/blob/master/Images/2020/02/03/0072Vf1ply1gbjbx2zsdgj30fw099q4f.jpg" alt=""><br>
2、config选择你的固件地址，其他默认不动<br>
<img src="https://gh-proxy.com/github.com/iAJue/MoeJueBlogPic/blob/master/Images/2020/02/03/0072Vf1ply1gbjbw32lcdj30fw099myz.jpg" alt=""><br>
3、Advanced - Baudrate 这个波特率看你开发板背面写的<br>
<img src="https://gh-proxy.com/github.com/iAJue/MoeJueBlogPic/blob/master/Images/2020/02/03/0072Vf1ply1gbjbw7qovhj30fw099dhg.jpg" alt=""><br>
如图所示，圈出来的那块<br>
<img src="https://gh-proxy.com/github.com/iAJue/MoeJueBlogPic/blob/master/Images/2020/02/03/0072Vf1ply1gbjc12jibpj30u4145n0l.jpg" alt=""><br>
配置好后点击 Flash(F)键开始烧录，这个过程可能有点久，慢慢等就是了</p>
<p>烧录完成后，插拔一次，烧录成功后应该就会出现一个名为 wi-pwn 的一个公开WiFi<br>
链接后浏览器打开这个后台，http://192.168.4.1/ 按引导操作即可。<br>
我这里演示一下批量伪造WiFi，点击Beacom开始工作<br>
<img src="https://gh-proxy.com/github.com/iAJue/MoeJueBlogPic/blob/master/Images/2020/02/03/0072Vf1ply1gbjcar7sraj317j0kf106.jpg" alt=""><br>
工作状态，运行中，蓝色指示灯闪烁常亮<br>
<img src="https://gh-proxy.com/github.com/iAJue/MoeJueBlogPic/blob/master/Images/2020/02/03/0072Vf1ply1gbjcavnorvj30ys1aegps.jpg" alt=""><br>
我不知道手机为什么搜索半天也就几个<br>
<img src="https://gh-proxy.com/github.com/iAJue/MoeJueBlogPic/blob/master/Images/2020/02/03/0072Vf1ply1gbjccbz1u2j30lp19vzm7.jpg" alt=""><br>
还有很多功能我就不一一试了<br>
总结：没什么好总结的，我也是第一次玩，把我玩的整个过程记录一下，分享经验。<br>
这次用的是别人写好的固件，下次就轮到我自己写个了&hellip;&hellip;&hellip;&hellip;..待</p>
        
        <hr><p>本文2020-02-03首发于<a href='https://zh.moejue.cn/'>阿珏酱のBlog</a>，最后修改于2020-02-03</p>]]>
      </description>
      
        <category>折腾代码</category>
      
    </item>
    
  </channel>
</rss>
