<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>折腾 on MoeJue&#39;s Blog</title>
    <link>https://en.moejue.cn/ja/tags/%E6%8A%98%E8%85%BE/</link>
    <description>Recent content in 折腾 on MoeJue&#39;s Blog</description>
    <generator>Hugo -- 0.151.2</generator>
    <language>ja</language>
    <lastBuildDate>Sun, 02 Nov 2025 10:12:27 +0000</lastBuildDate>
    <atom:link href="https://en.moejue.cn/ja/tags/%E6%8A%98%E8%85%BE/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>阿珏のBlog の国際化への道</title>
      <link>https://en.moejue.cn/ja/posts/291/</link>
      <pubDate>Sun, 02 Nov 2025 10:12:27 +0000</pubDate>
      <guid>https://en.moejue.cn/ja/posts/291/</guid>
      <description>&lt;p&gt;最近、個人ブログに「大改修」を施しました。
単一言語バージョンから&lt;strong&gt;多言語サイト&lt;/strong&gt;（簡体字中国語、繁体字中国語、英語、日本語）にアップグレードし、
その全プロセスを自動化しました。💪&lt;/p&gt;
&lt;p&gt;主な内容は以下の通りです。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;メインサイトの記事を自動同期&lt;/li&gt;
&lt;li&gt;コンテンツを自動AI翻訳&lt;/li&gt;
&lt;li&gt;多言語サイトの自動構築とデプロイ&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&#34;なぜ-hugo-を選んだのか&#34;&gt;なぜ Hugo を選んだのか？&lt;/h2&gt;
&lt;p&gt;それは、その自信に満ちたスローガンがあったからです。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“The world’s fastest framework for building websites.”&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;—— この一言で、これに決めました 😆。&lt;/p&gt;
&lt;p&gt;しかし、私は「一つのテーマで多言語を切り替える」という伝統的な方法ではなく、
&lt;strong&gt;各言語に独立したテーマ&lt;/strong&gt;を持たせることにしました。
これにより、各言語バージョンが独自のデザインとレイアウトスタイルを保持し、
真に「文化的なローカライゼーション」を実現できます。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;設計目標と制約-&#34;&gt;設計目標と制約 🎯&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;言語&lt;/strong&gt;: 簡体字中国語、繁体字中国語、英語、日本語をサポートし、将来的に拡張可能。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;テーマ&lt;/strong&gt;: 各言語に最適な Hugo テーマを使用し、無理に再利用しない。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;コンテンツ同期&lt;/strong&gt;: 全言語で一つのコンテンツリポジトリを共有し、必要に応じて翻訳。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;デプロイ戦略&lt;/strong&gt;: 各言語を独立して構築・公開し、異なるブランチやドメインにデプロイ可能。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;カスタムページ&lt;/strong&gt;: 「友だちリンク」、「書斎」、「アーカイブ」などのページは、多言語で一貫した体験を維持する。&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&#34;多言語設定戦略-&#34;&gt;多言語設定戦略 🧩&lt;/h2&gt;
&lt;p&gt;各言語用に個別の設定ファイルを用意しました。
&lt;code&gt;config/&amp;lt;lang&amp;gt;.toml&lt;/code&gt; で、主に以下の役割を担います。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;テーマの指定（例: &lt;code&gt;theme = &amp;quot;PaperMod&amp;quot;&lt;/code&gt;）。&lt;/li&gt;
&lt;li&gt;その言語固有の &lt;code&gt;title&lt;/code&gt; / &lt;code&gt;description&lt;/code&gt; / &lt;code&gt;keywords&lt;/code&gt; の定義。&lt;/li&gt;
&lt;li&gt;異なるテーマのナビゲーション構造に合わせるためのメニュー設定 &lt;code&gt;[[params.menu]]&lt;/code&gt; の上書き。&lt;/li&gt;
&lt;li&gt;全体的な視覚的一貫性を保証するためのカスタムスタイルの注入。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;この構造は非常に明確で、将来的にさらに多くの言語バージョンを拡張するのにも便利です。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;github-actions-自動デプロイマトリックス-&#34;&gt;GitHub Actions 自動デプロイマトリックス ⚙️&lt;/h2&gt;
&lt;p&gt;CI/CD 部分は完全に GitHub Actions に任せています。
&lt;code&gt;.github/workflows/hugo.yml&lt;/code&gt; では、&lt;strong&gt;マトリックスビルド&lt;/strong&gt;を使用し、
各言語を独立して構築・公開しています。&lt;/p&gt;</description>
    </item>
    <item>
      <title># ポータブルモニターを自作する方法</title>
      <link>https://en.moejue.cn/ja/posts/255/</link>
      <pubDate>Sun, 13 Apr 2025 05:55:01 +0000</pubDate>
      <guid>https://en.moejue.cn/ja/posts/255/</guid>
      <description>&lt;h3 id=&#34;ポータブルディスプレイを自作する方法&#34;&gt;ポータブルディスプレイを自作する方法&lt;/h3&gt;
&lt;h3 id=&#34;はじめに&#34;&gt;はじめに&lt;/h3&gt;
&lt;p&gt;家には古いノートパソコンが1台あります。バッテリーはもうダメですが、他の部品はまだ正常に動作します。しかし、技術の進化は非常に速く、このノートパソコンはウェブサイトを閲覧する以外に、ほとんど使い道がありません。捨てるのはもったいないし、売っても大した値段にはなりません。そこで、これをポータブルディスプレイに改造することにしました。そうすれば、ノートパソコンやデスクトップPCに接続して、ゲームをしたり動画を見たりと、もう一働きさせることができます。ちなみに、ハードディスクはすでにポータブルハードディスクに改造済みです。&lt;/p&gt;
&lt;h3 id=&#34;材料の準備&#34;&gt;材料の準備&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;廃棄するディスプレイ&lt;/li&gt;
&lt;li&gt;LEDスクリーン駆動ボード&lt;/li&gt;
&lt;li&gt;スクリーンケーブル&lt;/li&gt;
&lt;li&gt;キーパッド&lt;/li&gt;
&lt;li&gt;インバーターボード&lt;/li&gt;
&lt;li&gt;電源 (12V 5A)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt=&#34;IMG_20250404_142914_04_13_2025&#34; loading=&#34;lazy&#34; src=&#34;https://gh-proxy.com/github.com/iAJue/MoeJueBlogPic/blob/master/Images/2025/04/13/IMG_20250404_142914_04_13_2025.jpg&#34;&gt;&lt;/p&gt;
&lt;p&gt;主な材料はこれだけです。通販サイトですぐに購入でき、価格も高くありません。電源は父のネックマッサージャーから直接取り外したもので、また一つ節約できました。&lt;/p&gt;
&lt;h3 id=&#34;改造プロセス&#34;&gt;改造プロセス&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;ノートパソコンのディスプレイを分解し、スクリーンを取り出します。 &lt;img alt=&#34;IMG_20250404_142647_04_13_2025&#34; loading=&#34;lazy&#34; src=&#34;https://gh-proxy.com/github.com/iAJue/MoeJueBlogPic/blob/master/Images/2025/04/13/IMG_20250404_142647_04_13_2025.jpg&#34;&gt; &lt;img alt=&#34;IMG_20250404_142641_04_13_2025&#34; loading=&#34;lazy&#34; src=&#34;https://gh-proxy.com/github.com/iAJue/MoeJueBlogPic/blob/master/Images/2025/04/13/IMG_20250404_142641_04_13_2025.jpg&#34;&gt; もしお使いのスクリーンに対応する駆動ボードがわからない場合は、スクリーンの裏にある型番などの情報を写真に撮って販売店に送れば、それに合った駆動ボードを推薦してくれます。もちろん、電子回路に詳しい方なら、自分で回路図を設計して駆動ボードを自作することもできます。&lt;/li&gt;
&lt;li&gt;配線し、ホットボンドで固定します。 &lt;img alt=&#34;IMG_20250404_155901_04_13_2025&#34; loading=&#34;lazy&#34; src=&#34;https://gh-proxy.com/github.com/iAJue/MoeJueBlogPic/blob/master/Images/2025/04/13/IMG_20250404_155901_04_13_2025.jpg&#34;&gt; ps: ホットボンドは貧乏人の3Dプリンターですね。&lt;/li&gt;
&lt;li&gt;電源を入れてテストします。 &lt;img alt=&#34;IMG_20250404_150154_04_13_2025&#34; loading=&#34;lazy&#34; src=&#34;https://gh-proxy.com/github.com/iAJue/MoeJueBlogPic/blob/master/Images/2025/04/13/IMG_20250404_150154_04_13_2025.jpg&#34;&gt; 私は手間を省くため、販売店に予め対応するファームウェアを書き込んでもらいました。&lt;/li&gt;
&lt;li&gt;信号を入力します。 &lt;img alt=&#34;IMG_20250404_151208_04_13_2025&#34; loading=&#34;lazy&#34; src=&#34;https://gh-proxy.com/github.com/iAJue/MoeJueBlogPic/blob/master/Images/2025/04/13/IMG_20250404_151208_04_13_2025.jpg&#34;&gt;&lt;/li&gt;
&lt;li&gt;キーパッドの機能調整をテストします。 &lt;img alt=&#34;IMG_20250404_151318_04_13_2025&#34; loading=&#34;lazy&#34; src=&#34;https://gh-proxy.com/github.com/iAJue/MoeJueBlogPic/blob/master/Images/2025/04/13/IMG_20250404_151318_04_13_2025.jpg&#34;&gt;&lt;/li&gt;
&lt;li&gt;段ボールでケースを作ります。 &lt;img alt=&#34;IMG_20250404_173602_04_13_2025&#34; loading=&#34;lazy&#34; src=&#34;https://gh-proxy.com/github.com/iAJue/MoeJueBlogPic/blob/master/Images/2025/04/13/IMG_20250404_173602_04_13_2025.jpg&#34;&gt; どうやら私には廃材の段ボールでケースを作る才能がそこそこあるようです。見た目が悪すぎるのが心配で、壁紙シールを貼ってみました。家に3Dプリンターがある方は、直接ケースを設計してプリントすれば、もっと見栄えが良くなるでしょう。&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;完成品&#34;&gt;完成品：&lt;/h3&gt;
&lt;p&gt;&lt;img alt=&#34;IMG_20250413_104214_04_13_2025&#34; loading=&#34;lazy&#34; src=&#34;https://gh-proxy.com/github.com/iAJue/MoeJueBlogPic/blob/master/Images/2025/04/13/IMG_20250413_104214_04_13_2025.jpg&#34;&gt; 前面はホットボンドで接着したせいで、ちょっと見るに堪えない状態になってしまいました。&lt;/p&gt;</description>
    </item>
    <item>
      <title>オープンソースでシンプルかつスタイリッシュな、酷狗のサードパーティ製クライアント V1.0.0 Beta</title>
      <link>https://en.moejue.cn/ja/posts/225/</link>
      <pubDate>Sun, 03 Nov 2024 12:48:04 +0000</pubDate>
      <guid>https://en.moejue.cn/ja/posts/225/</guid>
      <description>&lt;p&gt;&lt;img alt=&#34;Logo&#34; loading=&#34;lazy&#34; src=&#34;https://github.com/iAJue/MoeKoeMusic/raw/main/images/logo.png&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;moekoe-music&#34;&gt;MoeKoe Music&lt;/h2&gt;
&lt;p&gt;オープンソースでシンプル、見た目も美しいKuGouのサードパーティクライアント&lt;br&gt;
&lt;a href=&#34;https://github.com/iAJue/MoeKoeMusic/&#34;&gt;&lt;strong&gt;🌎 GitHubリポジトリ&lt;/strong&gt;&lt;/a&gt;  |  &lt;a href=&#34;https://github.com/iAJue/MoeKoeMusic/releases&#34;&gt;&lt;strong&gt;📦️ インストーラーをダウンロード&lt;/strong&gt;&lt;/a&gt;  |  &lt;a href=&#34;https://MoeJue.cn&#34;&gt;&lt;strong&gt;💬 ブログを訪問&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;images&#34; loading=&#34;lazy&#34; src=&#34;https://github.com/iAJue/MoeKoeMusic/raw/main/images/5.png&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;はじめに&#34;&gt;はじめに&lt;/h2&gt;
&lt;p&gt;10年ほど前、ウェブ版QQを使っていた頃からKuGou Musicを使い始めました（もう10年来のファンです）。なので、この数年で集めた曲はすべてそこにあります。その後、NetEase Cloud MusicやQQ Musicも試してみましたが、KuGouのプレイリストをインポートしようとしても、結果は芳しくありませんでした。私が聴くのは主に日本のアニメのOPで、多くの曲が見つかりませんでした。&lt;/p&gt;
&lt;p&gt;結局、KuGouに戻ってきました。しかし、Mac版のKuGouは時々再生できないことがありました。インターフェースはシンプルですが、それはそれで良い点です。ネットユーザーの勧めで、今はKuGouの&lt;a href=&#34;https://t1.kugou.com/d2tBza3CSV2&#34;&gt;コンセプト版&lt;/a&gt;で音楽を聴いています。これは市場で数少ない、VIP曲を無料で聴ける音楽プレイヤーで、強くお勧めします。&lt;/p&gt;
&lt;p&gt;私の自己紹介ページで、特に日本のアニメのOPを聴くのが大好きだと書きました。それをどう証明するか？（以前のウェブ版プレイリストも長年放置されていました）そうだ、自分で音楽プレイヤーを開発しよう、と。&lt;/p&gt;
&lt;h2 id=&#34;-特徴&#34;&gt;✨ 特徴&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;✅ Vue.js ファミリーを使用して開発&lt;/li&gt;
&lt;li&gt;🔴 KuGouアカウントでのログイン（QRコード/携帯電話/アカウントでのログイン）&lt;/li&gt;
&lt;li&gt;📃 歌詞表示をサポート&lt;/li&gt;
&lt;li&gt;📻 毎日のおすすめ曲&lt;/li&gt;
&lt;li&gt;🚫🤝 ソーシャル機能一切なし&lt;/li&gt;
&lt;li&gt;🔗 公式サーバーに直接接続、サードパーティAPIは一切使用しません&lt;/li&gt;
&lt;li&gt;✔️ 毎日VIPを自動で受け取り、ログインするだけでVIPに&lt;/li&gt;
&lt;li&gt;🎨 テーマカラーの切り替え&lt;/li&gt;
&lt;li&gt;👋 起動時の挨拶メッセージ&lt;/li&gt;
&lt;li&gt;⚙️ マルチプラットフォーム対応&lt;/li&gt;
&lt;li&gt;🛠 さらに多くの機能を開発中&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;todo-list&#34;&gt;Todo List&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;[ ] 📺 MV再生をサポート&lt;/li&gt;
&lt;li&gt;[ ] 🌚 Light/Dark Modeの自動切り替え&lt;/li&gt;
&lt;li&gt;[ ] 👆 Touch Barをサポート&lt;/li&gt;
&lt;li&gt;[ ] 🖥️ PWAをサポート、Chrome/Edgeのアドレスバー右側の ➕ をクリックしてPCにインストール可能&lt;/li&gt;
&lt;li&gt;[ ] 🟥 Last.fm Scrobbleをサポート&lt;/li&gt;
&lt;li&gt;[ ] 🎧 Mprisをサポート&lt;/li&gt;
&lt;li&gt;[ ] ⌨️ カスタムショートカットキーとグローバルショートカットキー&lt;/li&gt;
&lt;li&gt;[ ] 🤟 多言語対応&lt;/li&gt;
&lt;li&gt;[ ] 📻 デスクトップ歌詞&lt;/li&gt;
&lt;li&gt;[ ] ⚙️ システムアーキテクチャの最適化&lt;/li&gt;
&lt;li&gt;[ ] 🎶 曲、プレイリスト/お気に入り、削除&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;-インストール&#34;&gt;📦️ インストール&lt;/h2&gt;
&lt;p&gt;本プロジェクトの &lt;a href=&#34;https://github.com/iAJue/MoeKoeMusic/releases&#34;&gt;Releases&lt;/a&gt; ページにアクセスしてインストーラーをダウンロードしてください。&lt;/p&gt;</description>
    </item>
    <item>
      <title>転生：ECサイトを構築する - 萌音ECサイトV1.0リリース</title>
      <link>https://en.moejue.cn/ja/posts/203/</link>
      <pubDate>Wed, 02 Oct 2024 06:17:50 +0000</pubDate>
      <guid>https://en.moejue.cn/ja/posts/203/</guid>
      <description>&lt;p&gt;萌音シリーズのN+1番目のプロジェクトが来ましたね。これも実は数年間放置していたプロジェクトで、今回ようやく完成させることができました。&lt;/p&gt;
&lt;h5 id=&#34;まずはプロジェクトアドレス-httpsmoekoecn&#34;&gt;まずはプロジェクトアドレス: &lt;a href=&#34;https://MoeKoe.cn&#34;&gt;https://MoeKoe.cn&lt;/a&gt;&lt;/h5&gt;
&lt;h4 id=&#34;なぜ私はプロジェクトを作り続けているのか&#34;&gt;なぜ私はプロジェクトを作り続けているのか？&lt;/h4&gt;
&lt;p&gt;この質問はとても面白いですね。なぜ様々なプロジェクトを、しかもお金にならないものばかり作り続けているのか。私の以前のプロジェクトに触れたことのある方はご存知でしょうが、私はどんなプロジェクトも「自分が使う」という原則に基づいて制作しています。もちろん今回も例外ではありません。ずっと、どこかのプラットフォームで、持っているけれど使わず、捨てるには惜しい小物たちを売りたいと思っていました。同時に、面白くて楽しい製品を皆さんと共有したいとも思っています（将来的には私のIP製品も加わるかもしれません）。「最高の出来事や物を、最高のあなたと共有したい」という思いもありますし、「他人が持っているなら私も持つべきだ」という原則に基づいて、私も持たなければなりません。&lt;/p&gt;
&lt;p&gt;もし私がただ小物を売りたいだけなら、なぜ直接淘宝や闲鱼のようなプラットフォームを使わないのでしょうか。一歩譲って、これらのプラットフォームを使わないとしても、既存のECシステムを自分で構築することもできます。今や市場には成熟していて使いやすいシステムが山ほどあります。なぜわざわざ自分で開発する必要があるのでしょうか？&lt;/p&gt;
&lt;p&gt;一言で言えば、好きだからです。これは私の趣味で、創造することが好きで、面白いものやことをするのが好きなんです。私はただ生きているだけの凡人ではなく、すごくて面白い人間になりたい。もっと多くの面白い魂と出会いたい。「すごい」という私の定義は、技術がどれほど優れているか、お金をどれほど稼ぐかということではありません。挫折や困難に直面したときでも、笑顔で立ち向かい、楽観的であり続け、初心を忘れない人。そのような人を、私は「すごい人」と呼びたいのです。&lt;/p&gt;
&lt;p&gt;新しいプロジェクトを発表する記事なのに、またしても口語体のブログになってしまいました、ハハハ。&lt;/p&gt;
&lt;h3 id=&#34;プロジェクト紹介&#34;&gt;プロジェクト紹介&lt;/h3&gt;
&lt;p&gt;最近何をしているか？ピンクで可愛らしいもの、つまり二次元少女萌え系スタイルの魔法少女ECサイトを作っています。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;魔法少女のファンタジー世界へようこそ！二次元の無限の可能性を探る冒険の旅を始めましょう！これは二次元愛好家のために特別に作られたオンラインECサイトです。ここでは、最も輝く魔法のアイテム、最もキュートな変身コスチューム、そして豊富で多様な二次元関連商品を見つけることができます。可愛い萌えグッズに夢中な方も、クールなコレクターズアイテムがお好きな方も、二次元へのすべての愛と期待をここで満たすことができます！&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;URLをクリックすると、目が覚めるような（ピンクの）感覚を覚えるでしょう。そうです、これこそ私が求めていたスタイルです。ピンクで可愛らしく、乙女心満載で、カワイイ感じ。これこそが私の個性を際立たせるのです。&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn/large/78350c19ly8hu80pi6l1vj22bm1g2kjp.jpg&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;技術スタック&#34;&gt;技術スタック&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Vue.js3&lt;/li&gt;
&lt;li&gt;Vite&lt;/li&gt;
&lt;li&gt;Pinia&lt;/li&gt;
&lt;li&gt;Axios&lt;/li&gt;
&lt;li&gt;Node.js&lt;/li&gt;
&lt;li&gt;Express&lt;/li&gt;
&lt;li&gt;Mysql&lt;/li&gt;
&lt;li&gt;Nginx&lt;/li&gt;
&lt;li&gt;フロントエンドとバックエンドの分離&lt;/li&gt;
&lt;li&gt;MySQLスレッドプール&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Vue.jsのフルスタックは本当に素晴らしいですね。ネイティブで書く手間が省けます。現在、国際化プラグイン（i18n）はこのバージョンにはまだ搭載されていません。市販のUIライブラリがこのプロジェクトの私の位置付けや個性に直接合致しないため、既存のUIライブラリは使用せず、すべて自分で手書きしました。&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn/large/78350c19ly8hu80vhmhh0j21ys1fqqv7.jpg&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;紹介&#34;&gt;紹介:&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;仮想通貨USDTに対応（ウォレットアドレスを入力するだけで、自動で着金を監視。外部プログラム不要。監視システムは新規注文があると自動起動し、30分間新規注文がないと自動休眠し、リソース消費を削減）&lt;/li&gt;
&lt;li&gt;Alipay対面決済に対応、即時着金、自動コールバック&lt;/li&gt;
&lt;li&gt;ユーザー登録、ログイン、ログアウト、パスワード変更、アバター変更、商品レビューに対応&lt;/li&gt;
&lt;li&gt;商品管理、商品カテゴリ管理に対応&lt;/li&gt;
&lt;li&gt;注文管理、注文決済、注文発送、物流追跡に対応&lt;/li&gt;
&lt;li&gt;商品注文データ分析に対応&lt;/li&gt;
&lt;li&gt;全サイトレスポンシブデザイン&lt;/li&gt;
&lt;li&gt;フロントエンドとバックエンドの分離&lt;/li&gt;
&lt;li&gt;MySQLスレッドプール&lt;/li&gt;
&lt;li&gt;システムの基本情報設定&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn/large/78350c19ly8hu80ywg8ntj21y21f2x6p.jpg&#34;&gt;&lt;/p&gt;
&lt;p&gt;最初のバージョンでは、基本的な機能と必要な機能のみを追加しました。新機能は設計段階で既に考慮されており、データベースとコードには予約がされています（そのため、あるボタンをクリックしても反応がない場合でも心配しないでください。その背後にはまだコードがないだけです）。これらは将来のバージョンで追加される予定です。現在、ECサイトでは物理的な商品の発送形式で販売していますが、将来的には仮想商品の販売も追加し、基本的に&lt;a href=&#34;https://pay.MoeKoe.cn&#34;&gt;萌音発券&lt;/a&gt;の機能をすべて統合する予定です。&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn/large/78350c19ly8hu80ynckudj21lc1fs7wh.jpg&#34;&gt;&lt;/p&gt;
&lt;p&gt;このプロジェクトの命名は「shop」ではなく「mall」としました。そのため、将来的には単なる店舗ではなく、ショッピングモールになる可能性があります。&lt;/p&gt;
&lt;h3 id=&#34;将来&#34;&gt;将来:&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;マルチテナントモード。ユーザーが直接ECサイトへの出店を申請し、萌音ECサイトを利用して自身の製品を販売できるようにする&lt;/li&gt;
&lt;li&gt;商品の多カテゴリ分類。製品のより詳細な仕様分類&lt;/li&gt;
&lt;li&gt;より多くの決済方法。現在、作者は他の決済権限を持っていないため、2つのみ連携済み&lt;/li&gt;
&lt;li&gt;仮想商品に対応。発券機能を統合する形となる&lt;/li&gt;
&lt;li&gt;商品ポスター宣伝画像生成&lt;/li&gt;
&lt;li&gt;メールシステム。あってもなくても良い通知機能に過ぎない&lt;/li&gt;
&lt;li&gt;右下の多機能メニュー。下部の笑顔のキャラクターがスマートナビゲーションシステムになる&lt;/li&gt;
&lt;li&gt;商品インターフェースのデータ表示を追加。データが一目でわかるように&lt;/li&gt;
&lt;li&gt;多言語対応（i18n）。国際化の流れに乗り、世界へ&lt;/li&gt;
&lt;li&gt;SMSシステム。メールシステムと全く同じ&lt;/li&gt;
&lt;li&gt;Redisキャッシュ。本来はこのバージョンで追加する予定だったが、データの制御は現状でも問題ない&lt;/li&gt;
&lt;li&gt;ダークモード。これもトレンドに追随&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn/large/78350c19ly8hu80wkxv32j21wq1f2e81.jpg&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;ソースコードの入手方法&#34;&gt;ソースコードの入手方法？&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;阿珏酱に233RMB以上を寄付することでソースコードを入手できます。&lt;/li&gt;
&lt;li&gt;以前に阿珏酱を支援してくださった方々（以前の支援総額が233に満たない場合は差額を補填する形で、233を超えている場合は1元を寄付して契約を再締結するだけで直接入手できます）&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;こちらをクリックして&lt;a href=&#34;https://jq.qq.com/?_wv=1027&amp;amp;k=5cvR0GN&#34;&gt;某コミュニティ公式交流グループ&lt;/a&gt;で阿珏酱を支援してください。個人のQQリンクを貼れないため、グループリンクを貼りました。グループに参加してグループ管理者に@メンションしてください。&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn/large/78350c19ly8hu80y9po72j21ru1fi4qp.jpg&#34;&gt;&lt;/p&gt;
&lt;h4 id=&#34;なぜ商用版を設けないのか&#34;&gt;なぜ商用版を設けないのか？&lt;/h4&gt;
&lt;p&gt;なぜ商用版ではなく、寄付版なのか、その違いは何でしょうか？商用版となると、ライセンスシステムが必要になり、同時にソースコードが提供されない可能性もあり、技術サポートも必要で、さらに多くの完璧な機能が求められるでしょう。商用版のお金はプロジェクト自体に支払われるもので、作者とは利害関係、つまり商業契約のモデルであり、作者はそれ（人）に対して責任を負う必要があります。（私はこの感覚が特に好きではありません。これが私が稼げない理由かもしれませんね）&lt;/p&gt;
&lt;p&gt;一方、寄付版は、作者本人への寄付であり、個人の意思、友人同士の約束のような契約モデルであり、作者はプロジェクト自体にのみ責任を負います。&lt;/p&gt;
&lt;p&gt;もちろん、私が言葉遊びをしている、言葉の隙間を突いていると感じるかもしれません。だから、これは完全に寄付行為なのです。今回の寄付の敷居には少し商業的な雰囲気があるかもしれませんが、それは私と妻たちが生活のために稼がなければならないからです。&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn/large/78350c19ly8hu800yh27oj21t00t8kjl.jpg&#34;&gt;&lt;/p&gt;
&lt;h4 id=&#34;ヒント&#34;&gt;ヒント&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;寄付版ではVueフロントエンドのソースコード＋コンパイル後の静的ファイル＋Node.jsバックエンドのソースファイルを提供します。&lt;/li&gt;
&lt;li&gt;すべての寄付版で入手できるのはソースファイルであり、暗号化や難読化はされていません。漏洩しないようお願いするとともに、ご自身の権利を守るためでもあります。&lt;/li&gt;
&lt;li&gt;ソースコードの変更にはある程度の基本的なプログラミング知識が必要です。もしできない場合は、変更しないでください。&lt;/li&gt;
&lt;li&gt;宝塔パネルのデプロイサービスを1回提供します。&lt;/li&gt;
&lt;li&gt;ウェブサイトのインターフェースは少女萌え系スタイルに傾倒しており、一般的な製品には適さない可能性がありますのでご注意ください。&lt;/li&gt;
&lt;li&gt;コードは複製可能であるため、契約締結後は撤回できません。何卒ご了承ください。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn/large/78350c19ly8hu80wx88oyj21sc1g0kik.jpg&#34;&gt; 今回もこれまでと同様に、寄付版の形式でソースコードを入手できるようにしました。なぜ今回またソースコードの入手を開放したのでしょうか？以前の萌音コミュニティの影響が多少あるでしょう。萌音コミュニティは私が2ヶ月以上かけて丹念に書き上げたもので、ソースコードの寄付による入手は受け付けず、純粋に自分で運営していました。寄付を申し出た人たちは皆断りましたが、最終的には一度だけ寄付を受け取りました。結局、萌音コミュニティに申し訳ない気持ちになりました。自分の手で潰してしまい、もっと多くの人にその存在を知ってもらえなかったからです。では、なぜ直接オープンソースにしないのかというと、そうするとかえってこのプロジェクトに申し訳ないと感じるからです。誰もが簡単に手に入れられるものだと思われ、その価値が失われてしまうでしょう。直接オープンソースにはしませんが、プロジェクト関連のアーキテクチャや設計思想、一部のコードを公開し、皆さんの参考にしてもらい、学習の妨げにはならないようにします。&lt;/p&gt;</description>
    </item>
    <item>
      <title>ESP8266-NodeMCU開発ボードを使って、私のQQアバターを表示してみる。</title>
      <link>https://en.moejue.cn/ja/posts/200/</link>
      <pubDate>Sun, 16 Jun 2024 12:50:42 +0000</pubDate>
      <guid>https://en.moejue.cn/ja/posts/200/</guid>
      <description>&lt;p&gt;ええ、自分でESP8266開発ボードのファームウェアを書くと言っていた私が戻ってきました。20年前に約束した通り、今日、その願いを叶えに戻ってきました。&lt;a href=&#34;https://www.cnblogs.com/Ajue/p/18202561&#34;&gt;ESP8266串口WiFi模块 - WiFi杀手&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;今日はOLEDディスプレイも接続します。今回購入したのは4ピンのOLED（128*64）で、カラー表示には対応していません。&lt;/p&gt;
&lt;h3 id=&#34;nodemcu開発ボード&#34;&gt;NodeMCU開発ボード&lt;/h3&gt;
&lt;p&gt;NodeMCUはオープンソースのIoTハードウェア開発ボードです。WIFI機能をサポートし、Arduino開発ボードと非常に似た使用方法であるため、近年、世界中のメイカーたちからますます人気を集めています。NodeMCUのサイズはArduino Nanoに似ています。Arduinoチームによって開発されたものではありませんが、Arduino IDEを使用して開発することも可能です。&lt;/p&gt;
&lt;p&gt;あらゆるものがインターネットに接続されるIoTの基盤として、まずIoT制御ボードのコストが高すぎてはいけません。高価なIoT制御コンポーネントは、プロジェクトのコスト管理に不利であり、多くのメイカー愛好家が学習し使用する上でも不利です。この点において、NodeMCUはRaspberry PiやArduinoファミリーのIoTプラットフォームなどよりも優位性があります。&lt;/p&gt;
&lt;p&gt;注意深い方はすでにお気づきかもしれませんが、私の開発ボードはESP8266-NodeMCUと呼ばれています。しかし、他のウェブサイトや資料では、ESP8266と表記されたり、NodeMCUと表記されたりすることがあります。では、ESP8266とNodeMCUの間にはどのような関係があるのでしょうか？&lt;/p&gt;
&lt;p&gt;ESP8266はチップ（鉄製のケースに収められた四角いもの）であり、NodeMCUはESP8266チップを核とした開発ボードです。下の図に示す通りです。 &lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn/large/78350c19ly8hu4vo3lpljj21hc140n7w.jpg&#34;&gt; 小さなチップのピンをコンピューターに接続し、プログラムをアップロードするなどの操作を行うのは非常に困難であるため、ESP8266チップを中心とした様々な開発ボードが誕生しました。NodeMCUもこれらの開発ボードの一つです。&lt;/p&gt;
&lt;p&gt;NodeMCU開発ボード上の2列のピンヘッダーは、ESP8266チップのピンに接続されています。開発ボード上の2列のピンヘッダーがあれば、デュポン線を使ってチップのピンを実験回路に簡単に接続できます。NodeMCU開発ボードにはUSBポートと電圧変換回路も搭載されています。これらは私たちに大きな利便性を提供します。USBデータケーブル1本で、ESP8266への給電とプログラムのアップロードを簡単に実現できます。もちろん、NodeMCU開発ボードの回路機能はこれだけではありませんが、これ以上は深掘りしません。&lt;/p&gt;
&lt;h3 id=&#34;ドライバーのインストール&#34;&gt;ドライバーのインストール&lt;/h3&gt;
&lt;p&gt;以前にも開発ボードのドライバーインストールについては説明しましたが、十分詳細ではありませんでした。&lt;/p&gt;
&lt;p&gt;現在市販されているESP8266ドライバーには様々な種類があり、同じNodeMCU開発ボードであってもドライバーが異なる場合があります。現在主流なのはCH340とCP210Xのドライバーです。&lt;/p&gt;
&lt;p&gt;ドライバーのダウンロードは、チップメーカーの公式サイトから直接行ってください。 CP210X：&lt;a href=&#34;https://cn.silabs.com/developers/usb-to-uart-bridge-vcp-drivers&#34;&gt;https://cn.silabs.com/developers/usb-to-uart-bridge-vcp-drivers&lt;/a&gt; CH340C：&lt;a href=&#34;https://www.wch.cn/downloads/CH341SER_EXE.html&#34;&gt;https://www.wch.cn/downloads/CH341SER_EXE.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;ご自身のプラットフォームに適したドライバーインストーラーをダウンロードしてください。ご自身のシリアルチップのモデルがドライバーのサポート範囲内にあるか、よく確認する必要があります。&lt;/p&gt;
&lt;h3 id=&#34;自分の開発ボードに必要なドライバーを確認する方法&#34;&gt;自分の開発ボードに必要なドライバーを確認する方法&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;直接見る。下の図の縦長の黒い長方形がUSB-シリアル変換チップです。その上にチップのモデル名が記載されています。 &lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn/large/78350c19ly8hu4voc3xefj21hc140n7w.jpg&#34;&gt;&lt;/li&gt;
&lt;li&gt;購入した販売店に尋ねる。&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;ディスプレイのはんだ付け&#34;&gt;ディスプレイのはんだ付け&lt;/h3&gt;
&lt;p&gt;はんだ付けを間違えないでください。間違えるとチップが焼損します。OLEDの配線：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;GND - GND&lt;/li&gt;
&lt;li&gt;VCC - VCC&lt;/li&gt;
&lt;li&gt;SCL - GPIO5(D1)&lt;/li&gt;
&lt;li&gt;SDA - GPIO4(D2)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;はんだごて加熱中 &lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn/large/78350c19ly8hu4voij5a5j21hc1404dj.jpg&#34;&gt;&lt;/p&gt;
&lt;p&gt;以下がはんだ付け完了したものです。配線に注意してください。この順番であるとは限りません。名称を確認してください。 &lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn/large/78350c19ly8hu4voof65aj21hc140dqi.jpg&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;arduino-ideのインストール&#34;&gt;Arduino IDEのインストール&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Arduino IDEをダウンロード &lt;a href=&#34;https://www.arduino.cc/en/software&#34;&gt;https://www.arduino.cc/en/software&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;インストール。インストールまで私が教える必要がありますか？&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;設定。「ツール」-「ボード」-「ボードマネージャー」をクリックし、設定でボードアドレスを記述します：&lt;a href=&#34;http://arduino.esp8266.com/stable/package_esp8266com_index.json&#34;&gt;http://arduino.esp8266.com/stable/package_esp8266com_index.json&lt;/a&gt; その後、対応するサポートライブラリファイルが自動的にダウンロードされます。この間、ネットワークの安定性を確保する必要があります。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;開発ボードを選択: NodeMCU1.0(ESP-12EModule)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;ポートを選択: コンピューターのデバイスマネージャーで開発ボードのCOMポートを見つけます。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;arduinoコード&#34;&gt;Arduinoコード&lt;/h3&gt;
&lt;p&gt;時々、私が長々と説明するよりも、直接コードを見せる方が手っ取り早いと感じます。あなたもきっと、私の無駄話を聞くよりも直接コードを見たいと思っているでしょう。私も可能な限りコードにコメントを付けました（Arduinoコードの記述はC/C++言語の規範に従ってください）。&lt;/p&gt;
&lt;p&gt;以下の例では、WiFi接続にはライブラリを使用しています。初回接続時には、ESP8266が発信するWiFiに携帯電話で接続し、ネットワーク設定を行う必要があります。画面への書き出しにはライブラリを使用しており、中国語の直接書き出しをサポートしています。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;これは、WiFi接続と画面への画像表示の簡単な例です。&lt;/li&gt;
&lt;/ol&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#include &amp;lt;Adafruit_GFX.h&amp;gt;
#include &amp;lt;Adafruit_SSD1306.h&amp;gt;
#include &amp;lt;ESP8266WiFi.h&amp;gt;
#include &amp;lt;NTPClient.h&amp;gt;
#include &amp;lt;WiFiManager.h&amp;gt;
#include &amp;lt;U8g2lib.h&amp;gt;

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

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

NTPClient timeClient(ntpUDP,&amp;#34;pool.ntp.org&amp;#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,&amp;#34;正在连接WiFi....&amp;#34;,0);
  WiFiManager wifiManager;
  wifiManager.autoConnect(&amp;#34;ESP8266&amp;#34;);

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

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

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

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

// 重复执行程序
void loop() {
  // 更新时间
  // timeClient.update();
  // OLED_Showchin(1,27,&amp;#34;当前北京时间: &amp;#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);     //&amp;#34;SSD1306_SWITCHCAPVCC&amp;#34;表示显示器为OLED ,&amp;#34;0x3C&amp;#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);    //设置字体尺寸 (&amp;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();
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn/large/78350c19ly8hu4vppewusj21hc140qb3.jpg&#34;&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>真の現実逃避</title>
      <link>https://en.moejue.cn/ja/posts/116/</link>
      <pubDate>Fri, 18 Sep 2020 06:17:34 +0000</pubDate>
      <guid>https://en.moejue.cn/ja/posts/116/</guid>
      <description>&lt;p&gt;ずっとVR機器が欲しいという願いがあったのですが、今日ついに叶いました。
@本群吉祥物 のおすすめで、OculusブランドのVR一体型ヘッドセットを購入しました。&lt;/p&gt;
&lt;p&gt;カードを開設して節約カードを入手 -&amp;gt; クーポンを取得 -&amp;gt; チャージ -&amp;gt; 注文 -&amp;gt; 一気に完了（心が痛む）
&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1ply1gius6o43luj30im0im0w1.jpg&#34;&gt;
Oculusブランドが中国市場に参入していないなどの理由で、ギガビットルーターもセットで購入しました。
届いたのは大きな箱が2つでした&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1ply1gius8qrdgbj31hc0u0gqr.jpg&#34;&gt;
1つはVR本体が入っていて、販売店からUSB充電バッテリーが追加でプレゼントされていました。SMARTOOOLSというスペインブランドで、なかなか良さそうです&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1ply1giusi2qqxej31hc0u0jwj.jpg&#34;&gt;
もう1つの箱には、ギガビットルーターと数百元もするUSB3.0リンクケーブルが入っていました。
&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1ply1giusm81bmtj31hc0u0dkw.jpg&#34;&gt;
ピーナッツの殻のような形をしたルーターです。
&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1ply1giusn2c05tj30u01hcafe.jpg&#34;&gt;
読めない説明書がたくさん、しかも外付けファン付き（#泣き笑い）。このルーターブランドも海外製なので、3ピンのプラグはヨーロッパ規格で、国内の3穴コンセントには変換アダプターが必要です。
&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1ply1giusn4g1sgj31hc0u0gql.jpg&#34;&gt;
外箱 - 裏面、下には人気ゲームのおすすめがいくつか載っています。
&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1ply1giut1x3dwpj31hc0u0aet.jpg&#34;&gt;
正面、シンプルでクールです。
&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1ply1giut2ajwujj30u01hctbt.jpg&#34;&gt;
パッケージの中の箱には、Oculusのロゴが印刷されています。
&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1ply1giut3pv2esj30u01hcdii.jpg&#34;&gt;
蓋を開けると、わぁ！
Oculus Quest 6DoF VR、現在市場で最も強力なVR一体型ヘッドセットです。
&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1ply1giut3ugoa8j30u01hcn20.jpg&#34;&gt;
公式にはコントローラー用の電池が1組、デバイスの基本的な操作説明書、そして分厚くて詳細すぎて読めない説明書が付属しています。
&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1ply1giut3ykg0oj30u01hc0wf.jpg&#34;&gt;
&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1ply1giut4b7xeoj30u01hcdk1.jpg&#34;&gt;
ポーズを決めて撮影、本体＋左右コントローラー。
&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1ply1giut4ctdjuj31hc0u0wjh.jpg&#34;&gt;
さて、電源を入れて使い始め、ずっと楽しみにしていたBeat Saber、VRChatなどをダウンロードして……現実逃避の旅を始めます……。
&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1ply1giut4iexgwj30mf0sgtcc.jpg&#34;&gt;&lt;/p&gt;
&lt;p&gt;後日談：
普段、開封レビューはしません。なぜなら、専門的なレビューには専門的な学術知識が必要で、すごい専門用語を使いこなす必要もあるからです。しかし、私にはそれができませんし、私の記事を読んだ人を、真面目な顔をしてデタラメを言うことで誤解させたくもありません。私はただ、言いたいことを言っているだけです。
VRChatで皆さんをお待ちしています。後で時間があれば、私が遊んでいる動画をBilibiliにもアップロードします。&lt;/p&gt;
&lt;p&gt;もしOculus Questについてさらに詳しく知りたい方がいれば、専門的なレビュー動画をおすすめします。
Oculus Quest VRは私たちを「ソードアート・オンライン」「レディ・プレイヤー1」からどれだけ近づけるのか？
&lt;a href=&#34;https://www.youtube.com/watch?v=2z-QyogFp9o&amp;amp;list=LL7N4D2xapjcfH_WEdH-Z0Tg&amp;amp;index=13&amp;amp;t=27s&#34;&gt;https://www.youtube.com/watch?v=2z-QyogFp9o&lt;/a&gt; (もし開けるなら)&lt;/p&gt;</description>
    </item>
    <item>
      <title>Android APK インストール パッケージの AndroidManifest.xml ファイルを表示します。</title>
      <link>https://en.moejue.cn/ja/posts/110/</link>
      <pubDate>Sun, 19 Apr 2020 09:15:54 +0000</pubDate>
      <guid>https://en.moejue.cn/ja/posts/110/</guid>
      <description>&lt;p&gt;&lt;strong&gt;原因&lt;/strong&gt;
先週、私は Android システムのファクトリープッシュ機能に取り組んでいました。一部のモデルは工場出荷時にオフラインにプッシュできないため、apk を解凍し、パッケージ化パラメータに問題があるかどうかを確認します。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;序文&lt;/strong&gt;
Android 開発では、自分のアプリケーションから他のアプリケーションのインターフェイスにジャンプする必要がある場合がありますが、他のアプリケーションのパッケージ名とクラス名が分からないと、これを行うのは困難です。最も簡単な方法は、アプリケーションの apk ファイルをダウンロードし、拡張子を zip または rar に変更して、ファイルを解凍することです。解凍したファイルの中に AndroidManifest.xml ファイルがあるのですが、開いてみると文字化けしていて恥ずかしいです。どうすればいいですか？&lt;/p&gt;
&lt;p&gt;AXMLPrinter2.jar は、一般的に使用される APK 逆コンパイル ツールです。これは主に、パッケージ名、バージョン番号、アイコン、その他の情報を含む apk ファイルを逆コンパイルするために使用されます。 AXMLPrinter2 を使用して androidmanifest.xml を逆コンパイルし、プレーン テキストで表示できます。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;使用方法&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;ダウンロードツール AXMLPrinter2.jar ツールのアドレス: &lt;a href=&#34;https://code.google.com/archive/p/android4me/downloads&#34;&gt;https://code.google.com/archive/p/android4me/downloads&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;表示する AndroidManfist.xml ファイルをツールと同じフォルダーにコピーします。&lt;/li&gt;
&lt;li&gt;現在のフォルダーで DOS ウィンドウを開きます。&lt;/li&gt;
&lt;li&gt;以下のコマンドを実行します。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;java -jar AXMLPrinter2.jar AndroidManifest.xml &amp;raquo; AndroidManifest.txt&lt;/p&gt;
&lt;p&gt;このコマンドを実行すると、フォルダー内にデコードされたファイルである AndroidManifest.txt ファイルが生成されます。&lt;/p&gt;
&lt;p&gt;もちろん、実行後にエラーが発生するものもあります。「java」は内部コマンドでも外部コマンドでも、操作可能なプログラムやバッチ ファイルでもありません。&lt;br&gt;
これは、Java 環境がインストールされていないか、環境変数が設定されていないことが原因で発生します。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;JDK をインストールします&lt;/strong&gt;
まず、JDK のインストールプロセスを確認してみましょう&lt;/p&gt;
&lt;p&gt;1\。 JDKをダウンロードしてインストールします&lt;/p&gt;
&lt;p&gt;JDK1.6、1.7、または 1.8 をダウンロードすることを選択できます。使いたいものをダウンロードしてください。
JDK をダウンロードするための公式 Web サイト &lt;a href=&#34;https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html&#34;&gt;https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html&lt;/a&gt;
インストールは非常に簡単で、次のステップは簡単です。ここでは詳細には触れません。&lt;/p&gt;
&lt;p&gt;2\。 JDK環境変数を構成する&lt;/p&gt;
&lt;p&gt;(1) コンピュータの「マイ コンピュータ」を右クリックし、Win10 では「このコンピュータ」を選択し、「プロパティ」を選択し、システムの詳細設定を選択し、新しいインターフェースで「環境変数」を選択します。「システム変数」を編集するだけです。
&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1ply1gdz8ohzbxnj30y10hz435.jpg&#34;&gt;
(2) 「新規」をクリックして「JAVA_HOME」という名前の変数を追加します。変数の値は「C:\Program Files\Java\jdk1.8.0_60」です。この値は、インストールした JDK パスです。インストールした場所にそのアドレスを使用するだけです。
&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1ply1gdz8ozylg5j30m20lldi6.jpg&#34;&gt;「CLASSPATH」という名前の新しい変数を作成します。変数値は「.;%JAVA_HOME%/lib/dt.jar;%JAVA_HOME%/lib/tools.jar」です。必ず保存してください。 「.;」を見逃さないように注意してください。値にすべての記号を含める必要があります。&lt;/p&gt;</description>
    </item>
    <item>
      <title>支付宝対面決済連携</title>
      <link>https://en.moejue.cn/ja/posts/107/</link>
      <pubDate>Sat, 04 Apr 2020 02:35:18 +0000</pubDate>
      <guid>https://en.moejue.cn/ja/posts/107/</guid>
      <description>&lt;p&gt;当面付（対面支払い）は、その名の通り対面での支払いを指し、店舗がオフラインの消費シーンで迅速な集金を可能にするものです。当面付製品は、バーコード支払いとQRコード決済の2種類の支払い方法をサポートしています。
ここで連携するのはQRコード決済です。
QRコード決済とは、ユーザーがAlipayウォレットの「スキャン」機能を開き、店舗がレジのシーンで提示するQRコードをスキャンして支払いを行うモードを指します。このモードは、オフラインの実店舗での支払い、対面支払いなどのシナリオに適しています。ビジネスフローは以下の図の通りです。
&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1ply1gciwmfk760j30kf071dfz.jpg&#34;&gt;
当面付の契約は非常に簡単で、個人事業主/個人商店の契約が許可されています。そのため、この方法はオンラインのQRコード決済にも大量に利用されていますが、Alipayの関連規約に違反するため、一定のリスクがあります。技術交流として、この問題は一旦置いておきましょう。&lt;/p&gt;
&lt;p&gt;技術連携としては、当面付製品を契約していなくても開発を進めることができます。
支払い機能は取引と資金に直接関わるため、開発者が支払い機能をデバッグしやすいように、オープンプラットフォームはサンドボックス環境（サンドボックス環境アカウントとサンドボックス版Alipayウォレットを含む）を用意しています。これにより、開発者はサンドボックス環境でデバッグできます。&lt;a href=&#34;https://docs.open.alipay.com/200/105311&#34;&gt;サンドボックスへの接続方法&lt;/a&gt;と&lt;a href=&#34;https://openhome.alipay.com/platform/appDaily.htm&#34;&gt;サンドボックス環境への接続&lt;/a&gt;をクリックして詳細を確認してください。
&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1ply1gciwn0aa2ej30sq0ptwi3.jpg&#34;&gt;
そのため、私の開発ではサンドボックス環境を使用しています。何しろ中にはたくさんのお金があるので、自由に使えますからね。
&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1ply1gciwlx66oxj30cn0qo0tj.jpg&#34;&gt;
まず、対応する開発言語のSDKをダウンロードします。ダウンロード：https://docs.open.alipay.com/194/105201/
QRコード決済ドキュメント：https://docs.open.alipay.com/194/106078/&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;キーの設定&lt;/strong&gt;
取引当事者（加盟店とAlipay）の身元とデータセキュリティを確保するため、開発者はインターフェースを呼び出す前に、双方のキーを設定し、取引データの双方検証を行う必要があります。
&lt;a href=&#34;https://docs.open.alipay.com/291/105971&#34;&gt;Alipayオープンプラットフォーム開発アシスタント&lt;/a&gt;をダウンロードしてキーを生成してください。
キー生成後、開発者はオープンプラットフォーム開発者センターでキー設定を行う必要があります。設定完了後、Alipay公開鍵を取得できます。
&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1ply1gciwnhq0ztj30u00lo0y6.jpg&#34;&gt;
&lt;strong&gt;設計と連携&lt;/strong&gt;
私の設計ではポーリング（後述）を使用する必要がないため、追加していません。
以下は私の業務における関連コードです。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;public function pay(){

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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


}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;以上が当面付の事前注文コードです。
このSDKについては、どうしても文句を言いたいです。誰が書いたデモなのか、PHPの例にlotusphpフレームワークを導入していて、大量の不要なものが含まれており、私たち開発者が受け入れられるかどうかを全く考慮していません。
私も少し時間をかけてSDKを簡素化し、必要な部分だけを取り出して自分のフレームワークに組み込み、namespaceとオートロードを追加しました。
&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1ply1gciwodh05dj30af0egdho.jpg&#34;&gt;
QRコード決済には独自の機能があります&amp;mdash;-非同期通知です。
これはオンライン決済で最も必要とされる機能でもあります。
レジが事前注文リクエストAPIを呼び出してQRコードを生成しユーザーに表示した後、ユーザーが携帯電話でQRコードをスキャンして支払いを行うと、Alipayは当該注文の変更情報を、加盟店が事前注文リクエストを呼び出した際に渡した非同期通知アドレス &lt;code&gt;notify_url&lt;/code&gt; に沿って、POSTリクエストの形式で支払い結果をパラメータとして加盟店システムに通知します。
&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1ply1gciwouog84j30o10cu768.jpg&#34;&gt;
この非同期通知アドレスは、アプリケーション側で設定する必要があることを覚えておいてください。&lt;/p&gt;</description>
    </item>
    <item>
      <title>ESP8266 シリアル WiFi モジュール - WiFi キラー</title>
      <link>https://en.moejue.cn/ja/posts/105/</link>
      <pubDate>Mon, 03 Feb 2020 06:59:55 +0000</pubDate>
      <guid>https://en.moejue.cn/ja/posts/105/</guid>
      <description>&lt;p&gt;私はしばらく前に ESP8266 を購入し、それで遊ぶつもりでした。実際には数カ月間停滞し、その後2020年まで延期された。
ESP8266 は、幅広い実用的なアプリケーションを備えた WiFi モノのインターネット モジュールです。簡単に言えば、その機能は次のとおりです。Wi-Fi からデータを受信し、シリアル ポート経由で出力します。シリアルポートからデータを受信し、Wi-Fi経由でデータを出力します。&lt;/p&gt;
&lt;p&gt;このものの技術は成熟しており、コストが低いため、価格はわずか数十元です。
&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1ply1gbjav59u52j30p90alq42.jpg&#34;&gt;
開封 ここで買ったのは有機EL液晶画面付きパッケージ（将来のお楽しみに備えて）
&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1ply1gbjb22mijhj310a0r741n.jpg&#34;&gt;
最も古典的なのは WiFi キラーです。それでは、まずお楽しみとして WiFi キラーのファームウェアをフラッシュしてみましょう。
ファームウェア: &lt;a href=&#34;https://github.com/samdenty/Wi-PWN?wi-pwn=7.0&#34;&gt;https://github.com/samdenty/Wi-PWN?wi-pwn=7.0&lt;/a&gt;
原理は、認証解除メッセージを送信して、ルーター自体を切断する必要があるとクライアントに認識させ、Wi-Fi から切断することです。偽造ルーターは認証解除メッセージをクライアントに送信し、クライアントが Wi-Fi から積極的に切断されるようにします。また、カスタム ホットスポット フォージェリ (偽の Wi-Fi 信号をバッチで生成する) もサポートしています。&lt;/p&gt;
&lt;p&gt;パソコンとの接続には、データ通信が可能なデータケーブルを使用してください。デスクトップ コンピュータを背面ポートに接続してみます。
接続後、Windows システム コンピュータは、下の図に示すように、ドライバを自動的にインストールします。この COM を覚えておいてください。
&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1ply1gbjb5v538uj308i0250st.jpg&#34;&gt;
また、ch341ser ドライバーと、USB 用の WINDOWS ドライバー インストール パッケージをシリアル ポート CH341/CH340 にインストールする必要があります。プロンプトに従ってインストールするだけです。これは別途ダウンロードする必要があります&lt;/p&gt;
&lt;p&gt;ファームウェアの書き込み
ここで使用するのは、NodeMcu FIRMWARE PROGRAMMER 書き込みツールです。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;ここの COM ポートとして、前に見たものを選択します。または、デバイス マネージャーで ESP8266 開発ボードがどのポートに接続されているかを確認してください。
&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1ply1gbjbx2zsdgj30fw099q4f.jpg&#34;&gt;&lt;/li&gt;
&lt;li&gt;config でファームウェア アドレスを選択し、その他はデフォルトで変更しないままにします。
&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1ply1gbjbw32lcdj30fw099myz.jpg&#34;&gt;&lt;/li&gt;
&lt;li&gt;詳細 - ボーレート ボーレートは、開発ボードの裏面に書かれている内容によって異なります。
&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1ply1gbjbw7qovhj30fw099dhg.jpg&#34;&gt;
写真の通り、丸で囲った部分が
&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1ply1gbjc12jibpj30u4145n0l.jpg&#34;&gt;
設定後、フラッシュ (F) キーをクリックして書き込みを開始します。このプロセスには時間がかかる場合がありますので、そのままお待ちください。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;書き込みが完了したら、一度抜き差ししてください。書き込みが成功すると、wi-pwn という名前のパブリック WiFi が表示されます。
リンク後、ブラウザーでこの背景 http://192.168.4.1/ が開き、ガイダンスに従ってください。&lt;br&gt;
ここで WiFi をバッチで偽造する方法を説明しましょう。 「Beacom」をクリックして作業を開始します。
&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1ply1gbjcar7sraj317j0kf106.jpg&#34;&gt;
動作ステータス、実行中、青色のインジケータライトが点滅して点灯したまま
&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1ply1gbjcavnorvj30ys1aegps.jpg&#34;&gt;
なぜ長い間携帯電話でいくつかしか検索できないのかわかりません。
&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1ply1gbjccbz1u2j30lp19vzm7.jpg&#34;&gt;
他にもたくさんの機能があるので、一つずつ試していくつもりはありません。
要約: 要約するものは何もありません。私も初めてのプレイです。プレイの全プロセスを記録し、私の経験を共有します。&lt;br&gt;
今回は他人が書いたファームウェアを使用しました。次回は私が自分で書く番です。&lt;/p&gt;</description>
    </item>
    <item>
      <title>美しすぎるAlibaba Cloud画像ホスティングツール</title>
      <link>https://en.moejue.cn/ja/posts/104/</link>
      <pubDate>Sun, 12 Jan 2020 08:42:16 +0000</pubDate>
      <guid>https://en.moejue.cn/ja/posts/104/</guid>
      <description>&lt;p&gt;一度サボると気持ちいい、ずっとサボればずっと気持ちいい。うっかりまた一ヶ月も更新をサボってしまい、元旦にさえ顔を出すこともなく、お恥ずかしい限りです。&lt;br&gt;
その埋め合わせとして、今日の週末にAlibaba画像アップローダーを一つ公開します。&lt;/p&gt;
&lt;p&gt;以前のプログラムは多くの方からインストールが難しいと言われましたが、今回のAlibaba画像アップローダーは非常にシンプルです。サーバーにアップロードしてアクセスするだけで利用でき、設定は一切不要。本当にこれだけです。（決して手抜きで何も書いていないわけではありません）&lt;br&gt;
インターフェースをご覧ください。とても美しいでしょう？&lt;br&gt;
&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1ply1gatvrtj7qwj30g00ohtdt.jpg&#34;&gt;&lt;br&gt;
非常にシンプルなため、今のところデモサイトはありません。もし設置が完了した方がいらっしゃれば、下部のコメント欄にご自身のアップローダーのURLを投稿して、他の方々の参考にしていただけると幸いです。&lt;br&gt;
&lt;a href=&#34;https://github.com/iAJue/Alibaba_pic&#34;&gt;プロジェクトページ&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;ここ数日で新しいロゴに変更しました。これもまた綺麗でしょう？（会社のPhotoshopの達人にお願いして作ってもらいました）&lt;br&gt;
&lt;a href=&#34;https://img.52ecy.cn&#34;&gt;幻想領域&lt;/a&gt;画像アップローダーも認証コードを導入しました。皆さん、不適切な画像をアップロードしないようにお願いしますね。&lt;/p&gt;
&lt;p&gt;最後に&lt;br&gt;
遅くなってしまいましたが、それでも言わせてください。皆様の新しい一年が、楽しく幸せなものでありますように！&lt;br&gt;
&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1ply1gatw2vof1hj31w32pf7wh.jpg&#34;&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>小愛スピーカー ユニバーサルリモコン版</title>
      <link>https://en.moejue.cn/ja/posts/102/</link>
      <pubDate>Wed, 20 Nov 2019 14:11:38 +0000</pubDate>
      <guid>https://en.moejue.cn/ja/posts/102/</guid>
      <description>&lt;p&gt;またしてもXiaomi製品です。今回開封するのは、Xiaomiスピーカーの万能リモコン版。従来の家電をあっという間にスマートホーム化させます。
開封。想像していたよりずっと小さいです。
&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1ply1g93pky0ndwj30u0140780.jpg&#34;&gt;
新発売のXiaomi AIスピーカーHDはかなり大きいですが、Xiaomiストアで抱えてみたことがあります(〃&amp;rsquo;▽&amp;rsquo;〃)
&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1ply1g93pkuzx1nj30u0140q6r.jpg&#34;&gt;
パッケージ内容：本体＋電源アダプター＋データケーブル＋取扱説明書
&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1ply1g93pkw08xhj31400u0gpu.jpg&#34;&gt;
下の周りにあるのは本物の穴です。最初は写真で見たとき、ただの模様だと思っていました。
&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1ply1g93pkvewhhj30u014042u.jpg&#34;&gt;
内部の中央には、円錐形のダブルピラミッドのようなものがあります。分かりやすく言うと、コマみたいな感じでしょうか。
&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1ply1g93pkxi1poj30u0140adl.jpg&#34;&gt;
マイクミュートボタン（上）は10秒長押しで工場出荷時設定にリセット、音量+/-ボタン（左右）、一時停止/再生ボタンは長押しで設定モードに入ります。
&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1ply1g93pkwkjapj30u014042x.jpg&#34;&gt;
次に、Mi AIスピーカーアプリをダウンロードして、一連の設定を行います。
&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1ply1g93pkx5wf6j30cn0qojrn.jpg&#34;&gt;
&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1ply1g93pkumgvtj30cn0qojrl.jpg&#34;&gt;
&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1ply1g93pktxq7nj30cn0qoaaf.jpg&#34;&gt;
QQ Musicが内蔵されていますが、管理はできず、QQ Music上で行う必要があります。
&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1ply1g93pkub4y6j30cn0qomxu.jpg&#34;&gt;
これで、遊べるようになります。&lt;/p&gt;
&lt;p&gt;お使いの小愛同学に「自爆モード起動」と言うと、新しいスキルをゲットできます（注意！！）&lt;/p&gt;
&lt;p&gt;また、一つ厄介な設定というかバグがあります。Bluetoothに接続して設定すると、ネットに繋がらなくなるのです。（意味不明？？）&lt;/p&gt;</description>
    </item>
    <item>
      <title>感熱ブルートゥースプリンター開発</title>
      <link>https://en.moejue.cn/ja/posts/100/</link>
      <pubDate>Tue, 05 Nov 2019 14:49:50 +0000</pubDate>
      <guid>https://en.moejue.cn/ja/posts/100/</guid>
      <description>&lt;p&gt;最近、レシート印刷の作業をしており、プロジェクトの要件としてiOSとAndroidの両方で実装する必要がありました。最初は全く分からず、インターネットで多くの資料を探し、たくさんの落とし穴にはまり、多くの記事を読みましたが、結果的にはうまくいきました。
Bluetoothプリンターは一般的に、レシート印刷とラベル印刷の2種類の印刷モードに分けられます。&lt;/p&gt;
&lt;p&gt;会社が購入した粗悪なプリンターには開発ドキュメントすらなく、多くの落とし穴にはまる羽目になりました。開発担当者に購入時に相談してくれればよかったのに。
現在、WeChatミニプログラムでBluetoothプリンターに接続する &lt;code&gt;wx.createBLEConnection&lt;/code&gt; は、iOSデバイスでは問題なく動作しますが、一部のAndroidスマートフォンでは異常が発生します（接続時にシステムペアリングボックスがポップアップ表示され、キャンセルをタップしても、ペアリングコードを入力して確定をタップしても、すぐに接続が切断されます。入力もキャンセルもしない場合、30秒以内にBluetoothプリンターから自動的に切断されます）。&lt;/p&gt;
&lt;p&gt;現在採用している方法は、AndroidとiOSそれぞれにBluetooth印刷コマンドのセットを作成することです。
&lt;strong&gt;IOS&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// ====================蓝牙操作==================  //初始化蓝牙模块
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;openBluetoothAdapter&lt;/span&gt;() {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;app&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;sysinfo&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;provider&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#75715e&#34;&gt;// 开启蓝牙
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;app&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;onBluetooth&lt;/span&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;setTimeout&lt;/span&gt;(() =&amp;gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;android_search&lt;/span&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        }, &lt;span style=&#34;color:#ae81ff&#34;&gt;2000&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;false&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;closeBluetoothAdapter&lt;/span&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;uni&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;openBluetoothAdapter&lt;/span&gt;({
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;success&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt;) =&amp;gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;console&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;初始化蓝牙模块: &amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;JSON&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;stringify&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt;));
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;startBluetoothDevicesDiscovery&lt;/span&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        },
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;fail&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt;) =&amp;gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;errCode&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;===&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;10001&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#a6e22e&#34;&gt;uni&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;onBluetoothAdapterStateChange&lt;/span&gt;((&lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt;) =&amp;gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    &lt;span style=&#34;color:#a6e22e&#34;&gt;console&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;监听蓝牙适配器状态变化事件&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;available&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;false&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                        &lt;span style=&#34;color:#a6e22e&#34;&gt;app&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;global_printing&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; {}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                        &lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;connected&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;false&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                        &lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;chs&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; []
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                        &lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;canWrite&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;false&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;available&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                        &lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;startBluetoothDevicesDiscovery&lt;/span&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                })
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;errCode&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#a6e22e&#34;&gt;app&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;alert&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;初始化蓝牙失败，错误码：&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;errCode&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;false&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;app&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;alert&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;errMsg&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    })
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;},
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;//获取本机蓝牙适配器状态
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;getBluetoothAdapterState&lt;/span&gt;() {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;uni&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getBluetoothAdapterState&lt;/span&gt;({
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;success&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt;) =&amp;gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;console&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;获取本机蓝牙适配器状态。&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;JSON&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;stringify&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;discovering&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;onBluetoothDeviceFound&lt;/span&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            } &lt;span style=&#34;color:#66d9ef&#34;&gt;else&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;available&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;startBluetoothDevicesDiscovery&lt;/span&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        },
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;fail&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt;) =&amp;gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;console&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;error:获取本机蓝牙适配器状态失败&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;JSON&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;stringify&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;setTimeout&lt;/span&gt;(() =&amp;gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getBluetoothAdapterState&lt;/span&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            }, &lt;span style=&#34;color:#ae81ff&#34;&gt;500&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    })
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;},
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;//开始搜寻附近的蓝牙外围设备
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;startBluetoothDevicesDiscovery&lt;/span&gt;() {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;console&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;discoveryStarted&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;discoveryStarted&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;console&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;开始搜索蓝牙设备&amp;#39;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;discoveryStarted&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;onBluetoothDeviceFound&lt;/span&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;setTimeout&lt;/span&gt;(() =&amp;gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;uni&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;startBluetoothDevicesDiscovery&lt;/span&gt;({
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;allowDuplicatesKey&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;success&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt;) =&amp;gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#a6e22e&#34;&gt;console&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;startBluetoothDevicesDiscovery success&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;JSON&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;stringify&lt;/span&gt;(
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    &lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            },
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;fail&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt;) =&amp;gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;errCode&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;10001&amp;#39;&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    &lt;span style=&#34;color:#a6e22e&#34;&gt;app&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;alert&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;当前蓝牙适配器不可用&amp;#39;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                } &lt;span style=&#34;color:#66d9ef&#34;&gt;else&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    &lt;span style=&#34;color:#a6e22e&#34;&gt;app&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;alert&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;搜索蓝牙失败,状态码：&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;errCode&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        })
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }, &lt;span style=&#34;color:#ae81ff&#34;&gt;500&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;},
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// 停止搜索
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;stopBluetoothDevicesDiscovery&lt;/span&gt;() {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;uni&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;stopBluetoothDevicesDiscovery&lt;/span&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;discoveryStarted&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;false&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;},
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;//寻找到新设备的事件的回调函数
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;onBluetoothDeviceFound&lt;/span&gt;() {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;console&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;寻找到新设备的事件的回调函数&amp;#39;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;uni&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;onBluetoothDeviceFound&lt;/span&gt;((&lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt;) =&amp;gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;console&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;devices&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;forEach&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;device&lt;/span&gt; =&amp;gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#f92672&#34;&gt;!&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;device&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;name&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;!&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;device&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;localName&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;foundDevices&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;devices&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;idx&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;inArray&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;foundDevices&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;deviceId&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;device&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;deviceId&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;idx&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;===&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;devices&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;push&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;device&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            } &lt;span style=&#34;color:#66d9ef&#34;&gt;else&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;devices&lt;/span&gt;[&lt;span style=&#34;color:#a6e22e&#34;&gt;idx&lt;/span&gt;] &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;device&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        })
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    })
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;},
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;//连接低功耗蓝牙设备
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;createBLEConnection&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;uni&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;showLoading&lt;/span&gt;({
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;title&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;设备连接中&amp;#39;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;mask&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    });
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;ds&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;currentTarget&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;dataset&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;deviceId&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;ds&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;deviceId&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;name&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;ds&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;name&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;app&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;sysinfo&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;provider&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;ds&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;pair&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;!==&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;android_search&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;deviceId&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        } &lt;span style=&#34;color:#66d9ef&#34;&gt;else&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;console&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;已配对&amp;#39;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;device&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;null&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;BAdapter&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;null&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;BluetoothAdapter&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;null&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;uuid&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;null&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;main&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;null&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;bluetoothSocket&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;null&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;mac_address&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;deviceId&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;main&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;plus&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;android&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;runtimeMainActivity&lt;/span&gt;();
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;BluetoothAdapter&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;plus&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;android&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;importClass&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;android.bluetooth.BluetoothAdapter&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;UUID&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;plus&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;android&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;importClass&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;java.util.UUID&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;uuid&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;UUID&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;fromString&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;00001101-0000-1000-8000-00805F9B34FB&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;BAdapter&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;BluetoothAdapter&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getDefaultAdapter&lt;/span&gt;();
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;device&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;BAdapter&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getRemoteDevice&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;mac_address&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;plus&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;android&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;importClass&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;device&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;bluetoothSocket&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;device&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;createInsecureRfcommSocketToServiceRecord&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;uuid&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;plus&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;android&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;importClass&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;bluetoothSocket&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#f92672&#34;&gt;!&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;bluetoothSocket&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;isConnected&lt;/span&gt;()) {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;console&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;检测到设备未连接，尝试连接....&amp;#39;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;bluetoothSocket&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;connect&lt;/span&gt;();
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;connected&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;name&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;name&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;deviceId&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;deviceId&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;canWrite&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;app&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;global_printing&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;name&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;deviceId&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;deviceId&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;app&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;saveData1&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;global_printing&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;app&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;global_printing&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;uni&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;hideLoading&lt;/span&gt;();
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;false&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;uni&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;createBLEConnection&lt;/span&gt;({
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;deviceId&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;success&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt;) =&amp;gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;connected&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;name&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;name&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;deviceId&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;deviceId&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;app&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;global_printing&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#a6e22e&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;name&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#a6e22e&#34;&gt;deviceId&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;deviceId&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;onBLEConnectionStateChange&lt;/span&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#75715e&#34;&gt;// 防止获取失败
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;setTimeout&lt;/span&gt;(() =&amp;gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getBLEDeviceServices&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;deviceId&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            }, &lt;span style=&#34;color:#ae81ff&#34;&gt;1000&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        },
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;fail&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt;) =&amp;gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;uni&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;hideLoading&lt;/span&gt;();
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;app&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Toast&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;设备连接失败&amp;#39;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;console&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;蓝牙连接失败:&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    })
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;stopBluetoothDevicesDiscovery&lt;/span&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;},
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;//获取蓝牙设备所有服务(service)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;getBLEDeviceServices&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;deviceId&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;uni&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getBLEDeviceServices&lt;/span&gt;({
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;deviceId&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;success&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt;) =&amp;gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;console&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;获取蓝牙服务成功：&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;JSON&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;stringify&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;services&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;length&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#a6e22e&#34;&gt;uni&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;hideLoading&lt;/span&gt;();
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#a6e22e&#34;&gt;app&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;alert&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;没有获取到蓝牙服务，无法打印001&amp;#39;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#a6e22e&#34;&gt;app&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;global_printing&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; {}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;false&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; (&lt;span style=&#34;color:#66d9ef&#34;&gt;let&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;; &lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;services&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;length&lt;/span&gt;; &lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;++&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;services&lt;/span&gt;[&lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt;].&lt;span style=&#34;color:#a6e22e&#34;&gt;isPrimary&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    &lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getBLEDeviceCharacteristics&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;deviceId&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;services&lt;/span&gt;[&lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt;].&lt;span style=&#34;color:#a6e22e&#34;&gt;uuid&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        },
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;fail&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt;) =&amp;gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;setTimeout&lt;/span&gt;(() =&amp;gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getBLEDeviceServices&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;deviceId&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            }, &lt;span style=&#34;color:#ae81ff&#34;&gt;500&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;console&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;获取蓝牙服务失败：&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;JSON&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;stringify&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    })
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;},
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;//获取蓝牙设备某个服务中所有特征值(characteristic)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;getBLEDeviceCharacteristics&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;deviceId&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;serviceId&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;console&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;获取蓝牙设备某个服务中所有特征值&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;deviceId&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;serviceId&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;uni&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getBLEDeviceCharacteristics&lt;/span&gt;({
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;deviceId&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;serviceId&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;success&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt;) =&amp;gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;console&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;获取蓝牙设备某个服务中所有特征值 success&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;JSON&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;stringify&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;uni&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;hideLoading&lt;/span&gt;();
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;characteristics&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;length&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#a6e22e&#34;&gt;app&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;alert&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;没有获取到蓝牙服务，无法打印002&amp;#39;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#a6e22e&#34;&gt;app&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;global_printing&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; {}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;false&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; (&lt;span style=&#34;color:#66d9ef&#34;&gt;let&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;; &lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;characteristics&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;length&lt;/span&gt;; &lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;++&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#66d9ef&#34;&gt;let&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;item&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;characteristics&lt;/span&gt;[&lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt;]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;item&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;properties&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;read&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    &lt;span style=&#34;color:#a6e22e&#34;&gt;uni&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;readBLECharacteristicValue&lt;/span&gt;({
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                        &lt;span style=&#34;color:#a6e22e&#34;&gt;deviceId&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                        &lt;span style=&#34;color:#a6e22e&#34;&gt;serviceId&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                        &lt;span style=&#34;color:#a6e22e&#34;&gt;characteristicId&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;item&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;uuid&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    })
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;item&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;properties&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;write&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    &lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;canWrite&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    &lt;span style=&#34;color:#a6e22e&#34;&gt;app&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;global_printing&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;_deviceId&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;deviceId&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    &lt;span style=&#34;color:#a6e22e&#34;&gt;app&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;global_printing&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;_serviceId&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;serviceId&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    &lt;span style=&#34;color:#a6e22e&#34;&gt;app&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;global_printing&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;_characteristicId&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;item&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;uuid&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    &lt;span style=&#34;color:#a6e22e&#34;&gt;app&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;saveData1&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;global_printing&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;app&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;global_printing&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    &lt;span style=&#34;color:#75715e&#34;&gt;//this.writeBLECharacteristicValue()
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;                }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;item&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;properties&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;notify&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;||&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;item&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;properties&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;indicate&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    &lt;span style=&#34;color:#a6e22e&#34;&gt;uni&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;notifyBLECharacteristicValueChange&lt;/span&gt;({
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                        &lt;span style=&#34;color:#a6e22e&#34;&gt;deviceId&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                        &lt;span style=&#34;color:#a6e22e&#34;&gt;serviceId&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                        &lt;span style=&#34;color:#a6e22e&#34;&gt;characteristicId&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;item&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;uuid&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                        &lt;span style=&#34;color:#a6e22e&#34;&gt;state&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    })
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        },
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;fail&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;console&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;error&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;获取特征值失败：&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    })
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;// 操作之前先监听，保证第一时间获取数据
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;uni&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;onBLECharacteristicValueChange&lt;/span&gt;((&lt;span style=&#34;color:#a6e22e&#34;&gt;characteristic&lt;/span&gt;) =&amp;gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;console&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;data&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;chs&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;idx&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;inArray&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;data&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;chs&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;uuid&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;characteristic&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;characteristicId&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;data&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; {}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;idx&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;===&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;chs&lt;/span&gt;[&lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;data&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;chs&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;length&lt;/span&gt;] &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#a6e22e&#34;&gt;uuid&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;characteristic&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;characteristicId&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#a6e22e&#34;&gt;value&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;ab2hex&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;characteristic&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;value&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        } &lt;span style=&#34;color:#66d9ef&#34;&gt;else&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;chs&lt;/span&gt;[&lt;span style=&#34;color:#a6e22e&#34;&gt;idx&lt;/span&gt;] &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#a6e22e&#34;&gt;uuid&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;characteristic&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;characteristicId&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#a6e22e&#34;&gt;value&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;ab2hex&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;characteristic&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;value&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    })
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;},
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;onBLEConnectionStateChange&lt;/span&gt;() {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;uni&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;onBLEConnectionStateChange&lt;/span&gt;((&lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt;) =&amp;gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#75715e&#34;&gt;// 该方法回调中可以用于处理连接意外断开等异常情况
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;console&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;`蓝牙连接状态改变device &lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;deviceId&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt; state has changed, connected: &lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;connected&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;connected&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;false&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;app&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;global_printing&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; {}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;connected&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;false&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;chs&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; []
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;canWrite&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;false&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    })
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;},
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;//断开与低功耗蓝牙设备的连接
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;closeBLEConnection&lt;/span&gt;() {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;app&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;global_printing&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; {}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;uni&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;closeBLEConnection&lt;/span&gt;({
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;deviceId&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;deviceId&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    })
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;connected&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;false&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;chs&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; []
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;canWrite&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;false&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;},
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;//关闭蓝牙模块
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;closeBluetoothAdapter&lt;/span&gt;() {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;app&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;global_printing&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; {}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;uni&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;closeBluetoothAdapter&lt;/span&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;discoveryStarted&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;false&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;},
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;//发送数据
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;sendStr&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;bufferstr&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;success&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;fail&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;that&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;uni&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;writeBLECharacteristicValue&lt;/span&gt;({
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;deviceId&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;app&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;global_printing&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;_deviceId&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;serviceId&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;app&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;global_printing&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;_serviceId&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;characteristicId&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;app&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;global_printing&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;_characteristicId&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;value&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;bufferstr&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;success&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;success&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;console&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;发送的数据：&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;bufferstr&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#75715e&#34;&gt;// console.log(&amp;#39;message发送成功&amp;#39;)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;        },
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;fail&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;fail&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;console&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;数据发送失败:&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;JSON&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;stringify&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        },
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;complete&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#75715e&#34;&gt;// console.log(&amp;#34;发送完成:&amp;#34; + JSON.stringify(res))
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;        }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    })
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;},
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;//遍历发送数据
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;printCode&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;arr&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;that&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;arr&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;length&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;sendStr&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;arr&lt;/span&gt;[&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;], &lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;success&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;arr&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;shift&lt;/span&gt;();
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;that&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;printCode&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;arr&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        }, &lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;error&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;app&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;alert&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;打印失败，错误码：&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;error&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;errCode&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;app&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;printing_status&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;false&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;console&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;error&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        });
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;false&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;setTimeout&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt;() {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;app&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;printing_status&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;false&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;console&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;打印结束&amp;#39;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }, &lt;span style=&#34;color:#ae81ff&#34;&gt;1000&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;},
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Android&lt;/strong&gt;
比較的シンプルで便利です。Native.jsを使用してNative Javaインターフェースチャネルを直接呼び出し、&lt;code&gt;plus.android&lt;/code&gt;を介してAndroidネイティブシステムAPIを呼び出します。
ネイティブAndroidドキュメント &lt;a href=&#34;https://developer.android.google.cn/reference/android/bluetooth/BluetoothAdapter?hl=en&#34;&gt;https://developer.android.google.cn/reference/android/bluetooth/BluetoothAdapter?hl=en&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>サボっていた主が、新版の三合一を持って帰ってきました。</title>
      <link>https://en.moejue.cn/ja/posts/15/</link>
      <pubDate>Sun, 04 Aug 2019 01:42:18 +0000</pubDate>
      <guid>https://en.moejue.cn/ja/posts/15/</guid>
      <description>&lt;p&gt;5月20日の告白以来、ハト主は行方不明の状態が続いていました&amp;hellip;&amp;hellip;.
&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1pgy1g5nlxy8to3j306o05b75f.jpg&#34;&gt;
何ヶ月ぶりか分かりませんが、三合一がまた更新されました。2ヶ月前にグループで立てた目標を、今日達成しました。間の2ヶ月間何をしていたかは聞かないでください-.-（大規模なハトの集会に参加するのに忙しかった）&lt;/p&gt;
&lt;h2 id=&#34;正文&#34;&gt;正文&lt;/h2&gt;
&lt;p&gt;ネットワーク認識が頻繁にダウンし、非常に不安定であるというフィードバックを多くの仲間から受けていたため、今回特別にローカル認識を更新しました。
1G以上のメモリを搭載したマシンへのインストールを推奨します。推奨構成は2コア2G、最適構成は16コア32Gです [#手動顔文字]&lt;/p&gt;
&lt;h4 id=&#34;v20&#34;&gt;v2.0&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;ローカルQRコード認識と生成を追加&lt;/li&gt;
&lt;li&gt;ネットワーク認識インターフェースを削除&lt;/li&gt;
&lt;li&gt;既知のバグを修正&lt;/li&gt;
&lt;li&gt;その他のいくつかの詳細な最適化&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;詳細な説明とインストールチュートリアルは、&lt;a href=&#34;https://www.52ecy.cn/post-88.html&#34;&gt;こちら&lt;/a&gt;をクリックして以前のバージョンをご覧ください。
新しいバージョンのウェブサイトはすべて古いバージョンのデータを保持しており、以前のユーザーの使用には影響せず、スポンサー版のデータとも同期されています。&lt;/p&gt;
&lt;h4 id=&#34;スポンサー版&#34;&gt;スポンサー版&lt;/h4&gt;
&lt;p&gt;旧バージョンの海賊版が横行していたため、新版の三合一にはスポンサー版が追加されました。
デモサイト：&lt;a href=&#34;https://qr.moeins.cn/&#34;&gt;https://qr.moeins.cn&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;スポンサー版の主な特徴：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;QRコードの認識と生成を最適化し、認識精度を大幅に向上させ、認識速度を高速化し、CPUとメモリを占有せず、より安定しています。&lt;/li&gt;
&lt;li&gt;21種類の三合一生成テンプレートを新規追加し、無限拡張をサポートします。追加チュートリアルは文末にあります。&lt;/li&gt;
&lt;li&gt;外部APIインターフェースを新規追加しました。このプログラムに限定されず、どのプログラムからでも呼び出し可能です。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;入手方法：
&lt;a href=&#34;https://pay.52ecy.cn/?cid=23&#34;&gt;こちら&lt;/a&gt;をクリックして18.88元以上をプロジェクトに寄付すると、決済コード三合一のスポンサー限定版を入手できます。ぜひお試しください！&lt;/p&gt;
&lt;p&gt;スポンサー版に関するいくつかの小さな説明（これまでは特に説明していませんでした）
これまでのところ、私のすべてのスポンサー版プロジェクトはドメインに縛られず、暗号化されておらず、自由に拡張でき、二次開発をサポートしており、スポンサー金額も低く設定されています。そのため、スポンサーしてくださった方々は、入手したソースコードを安易に共有しないようお願いいたします。これは作者への敬意であり、ご自身の権利の保護でもあります。売買関係ではないため、重大なバグがない限り、作者は不定期に更新するか、無期限に更新を延期する場合があります。小さな問題が発生した場合、作者が空いている時間であれば指導や修正を手伝う用意がありますが、大規模な新機能の追加といった場合には、協力を拒否するか、別途料金をいただく権利があります。&lt;/p&gt;
&lt;h4 id=&#34;スポンサー版テンプレート拡張チュートリアル&#34;&gt;スポンサー版テンプレート拡張チュートリアル&lt;/h4&gt;
&lt;p&gt;テンプレートの推奨サイズは：900*1200&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;テンプレート画像を&lt;code&gt;/public/static/images/template/&lt;/code&gt;テンプレートディレクトリに配置します。注意点として、中国語名を使用せず、jpg拡張子のみをサポートします。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;ルートディレクトリの&lt;code&gt;config.php&lt;/code&gt;にある&lt;code&gt;qr_template&lt;/code&gt;項目に関連データを以下のような形式で設定します。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-php&#34; data-lang=&#34;php&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;001&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&amp;gt;&lt;/span&gt; [
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;name&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;默认模板&amp;#39;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;data&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&amp;gt;&lt;/span&gt; [
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		&lt;span style=&#34;color:#ae81ff&#34;&gt;150&lt;/span&gt;,&lt;span style=&#34;color:#ae81ff&#34;&gt;200&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	],
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;title&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;size&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;20&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;]
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 id=&#34;パラメータ説明&#34;&gt;パラメータ説明&lt;/h4&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th style=&#34;text-align: left&#34;&gt;名称&lt;/th&gt;
          &lt;th style=&#34;text-align: left&#34;&gt;変数名&lt;/th&gt;
          &lt;th style=&#34;text-align: left&#34;&gt;必須&lt;/th&gt;
          &lt;th style=&#34;text-align: left&#34;&gt;型&lt;/th&gt;
          &lt;th style=&#34;text-align: left&#34;&gt;例&lt;/th&gt;
          &lt;th style=&#34;text-align: left&#34;&gt;説明&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;テンプレートID&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;なし&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;はい&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;int&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;001&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;テンプレートのファイル名。数字を推奨し、重複不可。&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;エイリアス&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;name&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;はい&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;string&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;デフォルトテンプレート&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;フロントエンドに表示されるテンプレートのエイリアス&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;X,Y&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;data&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;はい&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;array&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;[150,200]&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;QRコード生成の左上隅の開始X（横座標）、Y（縦座標）座標。負の値は不可で、テンプレートサイズより小さいこと。&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;テンプレートタイトル&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;title&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;いいえ&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;bool&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;false&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;テンプレートタイトルを有効にするかどうか。テンプレートがサポートしている場合（デフォルトテンプレートなど）に使用。空でも可。&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;サイズ&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;size&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;いいえ&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;int&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;20&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;QRコードの生成サイズ。デフォルトは20。空でも可。&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;はい、とても簡単です！
&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1pgy1g5nlv1bwkrj311d0llgts.jpg&#34;&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>ミニプログラムアーキテクチャ</title>
      <link>https://en.moejue.cn/ja/posts/92/</link>
      <pubDate>Fri, 17 May 2019 06:59:47 +0000</pubDate>
      <guid>https://en.moejue.cn/ja/posts/92/</guid>
      <description>&lt;p&gt;皆さんがミニプログラムをどのように書いているかは分かりませんが、数ヶ月前にWeChatミニプログラムを書いていた時、自分で考えたアーキテクチャ、あるいはフレームワークと呼べるものがあります。
WeChatネイティブのアーキテクチャは次のようになっています。&lt;/p&gt;
&lt;p&gt;├── app.js
├── app.json
├── app.wxss
├── pages
│   │── index
│   │   ├── index.wxml
│   │   ├── index.js
│   │   ├── index.json
│   │   └── index.wxss
│   └── logs
│       ├── logs.wxml
│       └── logs.js
└── utils&lt;/p&gt;
&lt;p&gt;なぜWeChatネイティブの書き方を使わないのか？
ミニプログラムはスマホアプリに似ていて、tabBarがありますよね。WeChat公式のtabBarはapp.jsonでグローバルに設定されます。一般的な開発では何の問題もありませんが、複雑なtabBarを実装する場合、公式のネイティブな方法では実現できず、動的に読み込むこともできません。例えば、ある動画アプリの中央にある撮影・録画機能のようなものです。
これは、公式が提供するtabBarを使えず、自作する必要があることを意味します。
最初の私のアプローチは、ネイティブの構造を維持しつつ、tabBarだけを自作するというものでした。そのため、ページのコードはすべて1つのファイルに書き、デフォルトで最初の画面を表示し、他は非表示にします。ページを切り替える際に、対応するページを表示し、他を非表示にして、データを動的にレンダリングします。しかし、これには問題がありました。小規模なプロジェクトなら大した問題はありませんが、大規模なプロジェクトでコード量が膨大になると、すべてを1つのファイルに書くのは後のメンテナンスが困難になります。そのため、この方法は最終的に却下されました。&lt;/p&gt;
&lt;p&gt;その後、ページの切り替え方法を（&lt;code&gt;wx.switchTab&lt;/code&gt;などを使った）画面遷移に変更し、異なるページのコードを別々のファイルに分けました。しかし、まだ問題がありました。切り替え時に画面がちらつくのです。ページを切り替えるたびに、まるで新しいウェブページを開くかのように、tabBarが再レンダリングされるため、ちらつきが発生します。これも却下です。&lt;/p&gt;
&lt;p&gt;そこで、現在の全く新しいアーキテクチャ方式が生まれました：
&lt;code&gt;/pages/index/&lt;/code&gt;以下のファイルをすべてエントリーファイル（JSエントリー、CSSエントリー、ビューエントリー）として定義します。異なるページのファイルは、管理しやすいように、やはり別の場所に置きます。新しく&lt;code&gt;template&lt;/code&gt;というフォルダを作成し、異なるページ間のコードを格納します。その構造は公式の単一ページの構造と同じです。
ルートディレクトリの&lt;code&gt;app.js&lt;/code&gt;はグローバル関数を格納するために使用し、他のページからは&lt;code&gt;getApp()&lt;/code&gt;で呼び出すだけです。
JSのエントリーファイル&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;app&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;getApp&lt;/span&gt;();
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;index_js&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;require&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;../../template/index/index.js&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;types_js&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;require&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;../../template/types/types.js&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Global_Data&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; [];
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Page&lt;/span&gt;({
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;data&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;active&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;show&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;index&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;types&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;false&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;course&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;false&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;user&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;false&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    },
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;onLoad&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;options&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;setData&lt;/span&gt;({
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;Global_Data&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;index_js&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getData&lt;/span&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        })
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    },
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;// 下部ナビゲーションの切り替え
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;tabbar_onChange&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;event&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;key&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;&amp;#39;&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;data&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;show&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;index&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;false&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;types&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;false&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;course&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;false&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;user&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;false&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        };
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;console&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;event&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;switch&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;event&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;detail&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;case&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#a6e22e&#34;&gt;key&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;index&amp;#39;&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#a6e22e&#34;&gt;Global_Data&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;index_js&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getData&lt;/span&gt;();
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#66d9ef&#34;&gt;break&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;case&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#a6e22e&#34;&gt;key&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;types&amp;#39;&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#a6e22e&#34;&gt;Global_Data&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;types_js&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getData&lt;/span&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#66d9ef&#34;&gt;break&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;case&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#a6e22e&#34;&gt;key&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;course&amp;#39;&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#a6e22e&#34;&gt;Global_Data&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;index_js&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getData&lt;/span&gt;();
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#66d9ef&#34;&gt;break&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;case&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#a6e22e&#34;&gt;key&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;user&amp;#39;&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#a6e22e&#34;&gt;Global_Data&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;index_js&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getData&lt;/span&gt;();
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#66d9ef&#34;&gt;break&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;data&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;show&lt;/span&gt;[&lt;span style=&#34;color:#a6e22e&#34;&gt;key&lt;/span&gt;] &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;console&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;Global_Data&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;setData&lt;/span&gt;({
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;show&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;data&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;show&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;Global_Data&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Global_Data&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        })
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    },
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;});
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;wxmlエントリーファイル&lt;/p&gt;</description>
    </item>
    <item>
      <title>よく使われる機能のクエリSQL</title>
      <link>https://en.moejue.cn/ja/posts/90/</link>
      <pubDate>Wed, 10 Apr 2019 09:33:11 +0000</pubDate>
      <guid>https://en.moejue.cn/ja/posts/90/</guid>
      <description>&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1pgy1g1xv7hy779j30d6097glr.jpg&#34;&gt; &lt;strong&gt;1、シーン：ある選手のランキングと、1つ上の順位の選手との票差をクエリする&lt;/strong&gt;&lt;br&gt;
方法2（重複を除外してソートし、自分より票の少ない数をクエリする）&lt;/p&gt;
&lt;p&gt;$temp = DB::fetch_first(&amp;ldquo;SELECT distinct total+jewel_vote+forge_vote  ,COUNT(*)+1 AS RANK FROM &amp;quot; . DB::table(&amp;lsquo;vote_competition&amp;rsquo;) .&amp;rdquo; WHERE total+jewel_vote+forge_vote&amp;gt;&amp;quot; . $competition[&amp;lsquo;all&amp;rsquo;] . &amp;quot; and aid={$aid} ORDER by forge_vote desc&amp;quot;);
$rank = $temp[&amp;lsquo;RANK&amp;rsquo;];
1つ上の順位の選手の票数を直接クエリすることはできない
if ($temp[&amp;rsquo;total+jewel_vote+forge_vote&amp;rsquo;]) {
//ここでクエリされるのは1位の選手との票差です
$up = $temp[&amp;rsquo;total+jewel_vote+forge_vote&amp;rsquo;]-$competition[&amp;lsquo;all&amp;rsquo;];
}&lt;/p&gt;
&lt;p&gt;方法1（変数を定義して累加ソート）&lt;/p&gt;
&lt;p&gt;$temp = DB::fetch_all(&amp;ldquo;SELECT a.cid,a.total,a.forge_vote,a.jewel_vote,(@rowNum:=@rowNum+1) AS rank FROM pre_vote_competition AS a, (SELECT (@rowNum :=0) ) b WHERE aid={$aid} ORDER BY (a.total+a.forge_vote+a.jewel_vote) DESC &amp;ldquo;);
foreach ($temp as $key =&amp;gt; $value) {
if ($value[&amp;lsquo;cid&amp;rsquo;] == $cid) {
//現在の自分のランキング
$rank = $value[&amp;lsquo;rank&amp;rsquo;];
if ($up) {
$up = $up - ($value[&amp;rsquo;total&amp;rsquo;] +  $value[&amp;lsquo;forge_vote&amp;rsquo;] + $value[&amp;lsquo;jewel_vote&amp;rsquo;]);
}
break;
}
//1つ上の順位の選手との票差
$up = $value[&amp;rsquo;total&amp;rsquo;] +  $value[&amp;lsquo;forge_vote&amp;rsquo;] + $value[&amp;lsquo;jewel_vote&amp;rsquo;];
}&lt;/p&gt;</description>
    </item>
    <item>
      <title>WeChat JSAPI 決済</title>
      <link>https://en.moejue.cn/ja/posts/89/</link>
      <pubDate>Sat, 30 Mar 2019 09:30:21 +0000</pubDate>
      <guid>https://en.moejue.cn/ja/posts/89/</guid>
      <description>&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1pgy1g1l3k211blj30ia04x74e.jpg&#34;&gt; 以前からWeChat関連の業務を行っていましたが、新しい技術ではないものの、これまで触れる機会がなく、いくつかの落とし穴にはまりました。そこで、時間を取って整理し、記録しておきます。
WeChat Payは全部で7種類あり、それぞれ：支払いコード決済、JSAPI決済、Native決済、APP決済、H5決済、ミニプログラム決済、顔認証決済です。
今回の業務で使用したのはWeChat JSAPI決済です。ユーザーがWeChatスキャン、公式アカウントのフォローなどの方法で販売者のH5ページに入り、&lt;strong&gt;WeChat内で&lt;/strong&gt;JSSDKを呼び出して支払いを完了します。&lt;/p&gt;
&lt;p&gt;ドキュメント：&lt;a href=&#34;https://pay.weixin.qq.com/wiki/doc/api/index.html&#34;&gt;https://pay.weixin.qq.com/wiki/doc/api/index.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;SDK：[https://pay.weixin.qq.com/wiki/doc/api/micropay.php?chapter=11_1&lt;/p&gt;
&lt;p&gt;](&lt;a href=&#34;https://pay.weixin.qq.com/wiki/doc/api/micropay.php?chapter=11_1%29JSAPI&#34;&gt;https://pay.weixin.qq.com/wiki/doc/api/micropay.php?chapter=11_1)JSAPI&lt;/a&gt;決済は、WeChat内のブラウザで開くことでWeChat Payを起動できます。効果は以下の図の通りです。
&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1pgy1g1l36yn1sej30p91hc40b.jpg&#34;&gt;
インターフェースコードを添付します。
コードではテンプレートエンジンを使用しています。
html：&lt;/p&gt;
&lt;div class=&#34;am-modal-bd&#34;&gt;
	&lt;img src=&#34;{$competition\[&#39;avatar&#39;\]}&#34; alt=&#34;&#34;&gt;&lt;br&gt;
	&lt;span style=&#34;font-size: 13px;color: #72c6ef&#34;&gt;{$competition\[&#39;username&#39;\]}&lt;/span&gt;&lt;br&gt;
	&lt;span id=&#34;tips&#34; style=&#34;font-size: 13px&#34;&gt;&lt;/span&gt;
  &lt;ul class=&#34;ul\_box&#34;&gt;
	&lt;li&gt;
		&lt;div&gt;&lt;/div&gt;
		&lt;div class=&#34;label\_box&#34;&gt;
			&lt;label&gt;
				&lt;input type=&#34;radio&#34; name=&#34;price&#34; value=&#34;{$prices\[0\]}&#34; checked=&#34;&#34;&gt;
				&lt;div class=&#34;active&#34;&gt;&lt;span class=&#34;am-icon-diamond&#34;&gt;&lt;/span&gt; {$prices\[0\]}钻&lt;/div&gt;
			&lt;/label&gt;
			&lt;label&gt;
				&lt;input type=&#34;radio&#34; name=&#34;price&#34; value=&#34;{$prices\[1\]}&#34;&gt;
				&lt;div&gt;&lt;span class=&#34;am-icon-diamond&#34;&gt;&lt;/span&gt; {$prices\[1\]}钻&lt;/div&gt;
			&lt;/label&gt;
			&lt;label&gt;
				&lt;input type=&#34;radio&#34; name=&#34;price&#34; value=&#34;{$prices\[2\]}&#34;&gt;
				&lt;div&gt;&lt;span class=&#34;am-icon-diamond&#34;&gt;&lt;/span&gt; {$prices\[2\]}钻&lt;/div&gt;
			&lt;/label&gt;
		&lt;/div&gt;
	&lt;/li&gt;
	&lt;li&gt;
		&lt;div&gt;&lt;/div&gt;
		&lt;div class=&#34;label\_box&#34;&gt;
			&lt;label&gt;
				&lt;input type=&#34;radio&#34; name=&#34;price&#34; value=&#34;{$prices\[3\]}&#34;&gt;
				&lt;div&gt;&lt;span class=&#34;am-icon-diamond&#34;&gt;&lt;/span&gt; {$prices\[3\]}钻&lt;/div&gt;
			&lt;/label&gt;
			&lt;label&gt;
				&lt;input type=&#34;radio&#34; name=&#34;price&#34; value=&#34;{$prices\[4\]}&#34;&gt;
				&lt;div&gt;&lt;span class=&#34;am-icon-diamond&#34;&gt;&lt;/span&gt; {$prices\[4\]}钻&lt;/div&gt;
			&lt;/label&gt;
			&lt;label&gt;
				&lt;input type=&#34;number&#34; name=&#34;price&#34; id=&#34;price&#34; class=&#34;input&#34; placeholder=&#34;自定义&#34;&gt;
			&lt;/label&gt;
		&lt;/div&gt;
	&lt;/li&gt;
  &lt;/ul&gt;
  &lt;span style=&#34;font-size: 13px&#34;&gt;注：1钻=1元，1钻={$activity\[&#39;offset&#39;\]}票&lt;/span&gt;&lt;br&gt;
  &lt;button type=&#34;button&#34; class=&#34;am-btn am-btn-primary  am-radius&#34; onclick=&#34;callpay()&#34; style=&#34;margin-top: 5px;&#34;&gt;立即微信支付&lt;/button&gt;
&lt;/div&gt;
&lt;p&gt;JavaScript：&lt;/p&gt;
&lt;p&gt;// 投票
var offset = {$activity[&amp;lsquo;offset&amp;rsquo;]};
$(&amp;rsquo;#tips&amp;rsquo;).html(&amp;lsquo;正在给{$competition[&amp;lsquo;code&amp;rsquo;]}号赠送{$prices[0]}钻=&amp;rsquo;+({$prices[0]}*offset)+&amp;lsquo;票&amp;rsquo;);
$(&amp;rsquo;#vote&amp;rsquo;).click(function(){
$.post(&amp;rsquo;/index/index/detailed.html?cid={$cid}&amp;amp;aid={$aid}&amp;rsquo;,{
formhash :&amp;rsquo;{FORMHASH}&amp;rsquo;,
submit:&amp;lsquo;1&amp;rsquo;,
type:1,
openid:&amp;rsquo;{$_G[&amp;lsquo;member&amp;rsquo;][&amp;lsquo;openid&amp;rsquo;]}&amp;rsquo;
},function(res){
alert(res.msg);
if (res.code == 0) {
$(&amp;rsquo;.box-1 span&amp;rsquo;).text(res.data.all);
$(&amp;rsquo;.box-2 span&amp;rsquo;).text(res.data.rank);
$(&amp;rsquo;.box-3 span&amp;rsquo;).text(res.data.up + &amp;lsquo;票&amp;rsquo;);
}
});
})
/* jQuery对象级别プラグイン拡張 */
$.fn.extend({
/* 単選框 */
hlRadio:function () {
var radioEl=$(this);
radioEl.click(function () {
var price = 0;
price = $(&amp;lsquo;input:radio:checked&amp;rsquo;).val();
$(&amp;rsquo;#price&amp;rsquo;).val(&amp;rsquo;&amp;rsquo;);
$(&amp;rsquo;#tips&amp;rsquo;).html(&amp;lsquo;正在给{$competition[&amp;lsquo;code&amp;rsquo;]}号赠送&amp;rsquo;+price+&amp;lsquo;钻=&amp;rsquo;+(price*offset)+&amp;lsquo;票&amp;rsquo;);
radioEl.siblings(&amp;ldquo;div&amp;rdquo;).removeClass(&amp;ldquo;active&amp;rdquo;);
$(this).siblings(&amp;ldquo;div&amp;rdquo;).addClass(&amp;ldquo;active&amp;rdquo;);
});
},
});
$(&amp;ldquo;input[name=&amp;lsquo;price&amp;rsquo;]&amp;rdquo;).hlRadio();
$(&amp;rsquo;#price&amp;rsquo;).bind(&amp;lsquo;input propertychange&amp;rsquo;, function(){
var price = 0;
price = $(&amp;rsquo;#price&amp;rsquo;).val();
$(&amp;rsquo;#tips&amp;rsquo;).html(&amp;lsquo;正在给{$competition[&amp;lsquo;code&amp;rsquo;]}号赠送&amp;rsquo;+price+&amp;lsquo;钻=&amp;rsquo;+(price*offset)+&amp;lsquo;票&amp;rsquo;);
})&lt;/p&gt;</description>
    </item>
    <item>
      <title>大金持ちになれると思ったが、そうはならなかった。</title>
      <link>https://en.moejue.cn/ja/posts/83/</link>
      <pubDate>Wed, 02 Jan 2019 11:05:50 +0000</pubDate>
      <guid>https://en.moejue.cn/ja/posts/83/</guid>
      <description>&lt;p&gt;2018年ももう終わりを迎えました&lt;br&gt;
大金持ちになるという願いは叶わず&lt;br&gt;
さらに悲惨なことに、年次大作を完成させなければなりません&lt;/p&gt;
&lt;p&gt;――年末総括&lt;/p&gt;
&lt;p&gt;そういえば、この世にはもともと年末総括なんてありませんでした&lt;br&gt;
KPIができてからというもの&lt;br&gt;
尽きることのない恨みつらみが生まれました&lt;/p&gt;
&lt;p&gt;以下、本文です&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.52ecy.cn/post-12.html&#34;&gt;記事アーカイブ&lt;/a&gt;では、すべての記事と投稿日時をはっきりと確認できます。2018年は毎月記事を投稿し、ほぼ毎日チェックしに来ていました。&lt;/p&gt;
&lt;h1 id=&#34;振り返り&#34;&gt;振り返り&lt;/h1&gt;
&lt;hr&gt;
&lt;ul&gt;
&lt;li&gt;1月：初めての自作ブログシステムを開発&lt;/li&gt;
&lt;li&gt;2月：初めてのフィギュア（嫁）を購入&lt;/li&gt;
&lt;li&gt;3月：幻想領域画像アップローダーの初版をリリース&lt;/li&gt;
&lt;li&gt;4月：幻想領域画像アップローダーの正式版を更新、emlogの新浪（Sina）プラグインを統合&lt;/li&gt;
&lt;li&gt;5月：萌音カード販売プラットフォームをローンチ&lt;/li&gt;
&lt;li&gt;6月：長らく放置していたプレイリストを修正&lt;/li&gt;
&lt;li&gt;7月：わー、萌音コミュニティが登場&lt;/li&gt;
&lt;li&gt;8月：三位一体決済コードをリリース&lt;/li&gt;
&lt;li&gt;9月：萌音映像サイトをローンチ&lt;/li&gt;
&lt;li&gt;10月：3回目のプログラマーの日（1024）を過ごす&lt;/li&gt;
&lt;li&gt;11月：Xiaomiのノートパソコンを購入＆萌音クラウドノートをリリース&lt;/li&gt;
&lt;li&gt;12月：遠くへ旅立ったが、二次元だけは諦められない&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&#34;2019年&#34;&gt;2019年&lt;/h1&gt;
&lt;hr&gt;
&lt;p&gt;2019年は、忙しく、学び、そして成長する一年になるでしょう。年始の抱負は裏切らず、今年は大小さまざまなプロジェクトを数多くこなし、多くのことを学びました。初めてのQQグループを作り、私を愛してくれる仲間たちと出会いました。&lt;/p&gt;
&lt;p&gt;今年もまたまたブログの定時投稿を忘れてしまいましたが、去年のような賢(厚)い(顔)で投稿時間を修正するようなことはもうしません。過ぎ去った時間は、畢竟戻ってこないのですから。&lt;br&gt;
この2ヶ月で学んだことは、萌音クラウドノートに記録しており、ブログには投稿していません。興味のある方はぜひご覧ください。一体何があったのか、以前は1、2ヶ月かけてプロジェクトを一つ生み出していましたが、今では週に一つ作り上げています。これはただの愚痴で、不満ではありません。&lt;br&gt;
去年の抱負は敬業福（去年来てくれた方ならご存知のはず）に書いたのですが、今年もそれを掲げようと思ったら、ソースコードが遥か彼方にあることに気づき、諦めました。まあ、ブログを一本投稿すればいいだけのことです。&lt;br&gt;
この2ヶ月で、C、C++、Java、node.jsにも入門し、discuzのプラグイン＆テンプレート、Baidu＆WeChatのミニプログラム、公式アカウントなどにも手を出しました&amp;hellip;&amp;hellip;&lt;br&gt;
2019年も引き続き頑張ります&amp;hellip;.&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1pgy1fysiqc2sndj30jf0eodgp.jpg&#34;&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>萌音影视 - オンライン動画アプリ</title>
      <link>https://en.moejue.cn/ja/posts/75/</link>
      <pubDate>Tue, 25 Sep 2018 07:41:02 +0000</pubDate>
      <guid>https://en.moejue.cn/ja/posts/75/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://www.52ecy.cn/&#34;&gt;ブログ&lt;/a&gt; | &lt;a href=&#34;https://www.moeins.cn/&#34;&gt;デモサイト&lt;/a&gt; | &lt;a href=&#34;http://shang.qq.com/wpa/qunwpa?idkey=618c7f3214a5c5ed06c9343a395371a8b27318e5190491bf7283fbf7468e35d7&#34;&gt;QQグループ&lt;/a&gt; | &lt;a href=&#34;https://github.com/178146582/moeins&#34;&gt;GitHub&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;洗練されたLaravelフレームワークと、全然可愛くないMeizi UIに基づいたオンライン動画アプリケーション&lt;/p&gt;
&lt;h4 id=&#34;作者より&#34;&gt;作者より&lt;/h4&gt;
&lt;p&gt;オンライン動画サイトはどこにでも溢れていますが、それは私が自分で一つ書くことを妨げるものではありません。こうすれば、後で自分でアニメを見るのも便利になりますし、結局、自分で手を動かしてこそ豊かになれるものです。さらに新しい知識も学べるのですから、なんと素晴らしいことでしょう。&lt;/p&gt;
&lt;p&gt;ページデザインは一部のウェブサイトを参考にしました。動画リソースはすべてインターネットからのものです。もし著作権侵害がありましたら、速やかにご連絡ください。&lt;/p&gt;
&lt;p&gt;一緒にあのうんざりする60秒広告を捨てましょう〜&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;データベースなし、バックエンドモードなし、設定ファイルは一つだけ(&lt;code&gt;config/web.php&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;広告なし、VIP解析をサポート、公式ソース、高速、多チャンネル、多カテゴリ&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To-do:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;ul&gt;
&lt;li&gt;独立したチャンネルホームページ&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;ul&gt;
&lt;li&gt;テレビ局ライブ配信&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;ul&gt;
&lt;li&gt;複数の解析インターフェース&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;ul&gt;
&lt;li&gt;追加予定&amp;hellip;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;スポンサー限定版&#34;&gt;スポンサー限定版&lt;/h4&gt;
&lt;p&gt;これはデュアルバージョンアプリケーションです。つまり、2つの異なるバージョンがあります。スポンサー版は通常版を最適化したもので、機能とパフォーマンスが大幅に向上し、実行速度が大幅に向上し、優先的な更新が維持されます。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;さて、問題です。スポンサー限定版はどのように入手できますか？&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/178146582/qr#author&#34;&gt;ここ&lt;/a&gt; または &lt;a href=&#34;https://pay.52ecy.cn/&#34;&gt;ここ&lt;/a&gt; でプロジェクトに58元以上を寄付することで入手できます。&lt;/p&gt;
&lt;p&gt;もちろん、もしプロジェクトがあなたのお役に立てたなら、またはあなたが必要とするなら、私たちを支援することを選択できます。たとえわずかな金額でも、それは愛です。&lt;/p&gt;
&lt;p&gt;オープンソースプロジェクトを書く人が利益のために書くことはないと思います。結局のところ、それはレンガ工場で一日レンガを運ぶよりも稼げないからです。&lt;/p&gt;
&lt;h2 id=&#34;インストール要件&#34;&gt;インストール要件&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;LNMP/AMP (PHP5.6+が必要)&lt;/li&gt;
&lt;li&gt;curl、OpenSSL拡張機能&lt;/li&gt;
&lt;li&gt;Composer&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;composerによるメインプログラムのインストール&#34;&gt;Composerによるメインプログラムのインストール&lt;/h2&gt;
&lt;h4 id=&#34;1-composerを使用してmoeinsをインストール&#34;&gt;1. Composerを使用してmoeinsをインストール&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ composer create-project a-jue/moeins 
&lt;/code&gt;&lt;/pre&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#依存ライブラリのインストール後、インストールスクリプトが自動的に実行されます
#以下のプロンプトが表示されたらインストール完了です

&amp;gt; Illuminate\Foundation\ComposerScripts::postInstall
&amp;gt; php artisan optimize
Generating optimized class loader
The compiled services file has been removed.
&amp;gt; php artisan key:generate
Application key [base64:Hx0I9UUQg7OyIz8lpDYG6Y/gW1uxS760ERdWfGG2jyQ=] set successfully. 
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;2-ディレクトリ権限&#34;&gt;2. ディレクトリ権限&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;public&lt;/code&gt;サブディレクトリを公開Webディレクトリとして設定します&lt;/p&gt;
&lt;h4 id=&#34;3-urlリライト&#34;&gt;3. URLリライト&lt;/h4&gt;
&lt;p&gt;Apacheサーバーの場合、プロジェクトディレクトリ内の&lt;code&gt;.htaccess&lt;/code&gt;にはすでにリライトルールが設定されています。必要に応じて適宜修正してください。Nginxサーバーの場合、以下は参考となる設定です：&lt;/p&gt;</description>
    </item>
    <item>
      <title>QQ、支付宝（アリペイ）、微信支付（WeChat）の3つの決済コードが1つに</title>
      <link>https://en.moejue.cn/ja/posts/73/</link>
      <pubDate>Fri, 24 Aug 2018 06:23:20 +0000</pubDate>
      <guid>https://en.moejue.cn/ja/posts/73/</guid>
      <description>&lt;h2 id=&#34;receive-the-money&#34;&gt;Receive the money&lt;/h2&gt;
&lt;p&gt;ラ受け取りは、アリペイ、ウィーチャット、QQキャッシュコードの3つの統合システムです。&lt;/p&gt;
&lt;p&gt;thinkPHP5.0 + MySQL + layuiで完成しました。&lt;/p&gt;
&lt;p&gt;デモサイト：&lt;a href=&#34;https://qr.52ecy.cn&#34;&gt;Paypal&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;プロジェクトアドレス: &lt;a href=&#34;https://github.com/178146582/qr&#34;&gt;GitHub&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;序文&#34;&gt;序文&lt;/h2&gt;
&lt;p&gt;チュートリアルも既成のコードも、インターネット上ではほとんどどこにでもある。&lt;/p&gt;
&lt;p&gt;QRコードのアップロード、QRコードの識別、3-in-one支払いコードの生成、プロセスサービスの完全なセットを含む&lt;code&gt;セット&lt;/code&gt;という言葉の具体化です。&lt;/p&gt;
&lt;p&gt;3 in 1の大部分は個人的な使用のためだけであり、お金ラのコレクションは、複数のユーザーに3 in 1のサービスを提供することができます。&lt;/p&gt;
&lt;p&gt;しかし、それは背景を持っていない、2つの主な理由があります：&lt;/p&gt;
&lt;p&gt;1.頻繁に表示したり、構成、構成、生涯使用を変更する必要はありません。&lt;/p&gt;
&lt;p&gt;2.著者の怠惰な癌の攻撃（また、インストールウィザードの不在を促した）&lt;/p&gt;
&lt;p&gt;3.あなたが本当にそれを必要とする場合は、後でそれについて話します&lt;/p&gt;
&lt;p&gt;コード自体は比較的軽量で、フレームワークを使っているためにサイズが大きくなっている。&lt;/p&gt;
&lt;p&gt;まあ、技術的な内容自体はなく、ほとんど使われない、人間の必要性に応じて書かれている、ちなみに、水水テキスト〜〜エスケープ（-）。&lt;/p&gt;
&lt;h2 id=&#34;原則&#34;&gt;原則&lt;/h2&gt;
&lt;p&gt;3つのコードが1つになった領収書、とても魔法のように聞こえるし、感じるが、実際には、原理は非常に簡単です！&lt;/p&gt;
&lt;p&gt;QRコードは、実際には一連の文字列を含む単なる画像である。アリペイであれWeChatの支払いコードであれ、基本的には支払いリンクを含むQRコードなのだ。つまり、アリペイの閲覧ページであればアリペイの決済リンクを、WeChatであればWeChatのリンクを&amp;hellip;&amp;hellip;という具合だ。&lt;/p&gt;
&lt;p&gt;そして、ここには「ユーザーエージェント」というナレッジポイントがあり、例えばウェブビューの大手メーカーは独自のUA情報を持っている：&lt;/p&gt;
&lt;p&gt;QQ: &lt;code&gt;MQQBrowser/6.2 TBS/043221 Safari/537.36 QQ/7.0.0.3135&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;WeChat: &lt;code&gt;MQQBrowser/6.2 TBS 043220 Safari/537.36 MicroMessenger/6.5.8.1060 NetType/4G Language/zh_CN&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Alipay: &lt;code&gt;UCBrowser/11.5.0.939 UCBS/2.10.1.6 Mobile Safari/537.36 AliApp(AP/10.0.15.051805) AlipayClient/10.0.15.051805 Language/zh-Hans&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;これでQQなのかWeChatなのかアリペイのスキャンなのか一目瞭然：&lt;/p&gt;
&lt;p&gt;ユーザーエージェント`にQQ/が含まれている。&lt;/p&gt;
&lt;p&gt;MicroMessengerを含む&lt;code&gt;User-Agent&lt;/code&gt;はWeChatです。&lt;/p&gt;
&lt;p&gt;User-Agent` には AlipayClient が含まれています。&lt;/p&gt;
&lt;p&gt;各ソフトウェアを区別できるので、URLを作成し、QRコード生成でURLをスキャンし、ブラウザのUAを判別して異なる決済コードを配信することができる。&lt;/p&gt;
&lt;p&gt;大まかには以下のような流れになる：&lt;/p&gt;
&lt;p&gt;クライアントがコードをスキャン → サーバが &lt;code&gt;User-Agent&lt;/code&gt; によってクライアントの種類を判別 → 異なる処理を返す&lt;/p&gt;
&lt;p&gt;これも注目に値する：&lt;/p&gt;
&lt;p&gt;QQ: httpsプロトコルは、QQを起こすことができない。&lt;/p&gt;
&lt;p&gt;アリペイ：httpsプロトコル、直接アリペイAPPを起動することができます。&lt;/p&gt;</description>
    </item>
    <item>
      <title>世界はこんなに広い、私が連れて行ってあげる 123</title>
      <link>https://en.moejue.cn/ja/posts/70/</link>
      <pubDate>Wed, 01 Aug 2018 06:09:21 +0000</pubDate>
      <guid>https://en.moejue.cn/ja/posts/70/</guid>
      <description>&lt;p&gt;賢い人にしかこの文章は見えないそうです。パスワードは記事タイトルの後ろにあります&lt;br&gt;
人生は短く、世界は広い。&lt;br&gt;
小飞机助手は、S*h·a·d·o·w·s·o·c·k·sをベースにしたVPNプロキシソフトウェアアシスタントです。複数のノードが内蔵されており、可用率は80%にも達します。ワンクリックでグレートファイアウォールを回避し、科学的なインターネットアクセスという目的を達成できます。&lt;br&gt;
&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1ply1ftu6v4ddnoj30an07q0u3.jpg&#34;&gt;&lt;/p&gt;
&lt;h4 id=&#34;免責事項&#34;&gt;&lt;strong&gt;免責事項&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;とある月のない嵐の夜、プログラマーである某ブロガーは、資料検索や学習のために頻繁にインターネットを利用する必要がありました。しかし、国内のBaiduでは英語の検索結果が不十分なため、Googleを使う必要があります。そして、中国大陸ではGoogleに直接アクセスできないため、やむを得ず「梯子」（VPNなどの迂回ツール）を使い、グレートファイアウォールを乗り越えるしかありませんでした。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;本ソフトウェアはフリーソフトです。無断で販売しないでください！&lt;/li&gt;
&lt;li&gt;本ソフトウェアは学習と交流のみを目的としています。違法な用途には使用しないでください。&lt;/li&gt;
&lt;li&gt;本ソフトウェアを使用したことによるいかなる行為も作者とは無関係であり、作者は一切の法的責任を負いません！&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1ply1ftu7wpigt9j30go0hngm6.jpg&#34;&gt;&lt;/p&gt;
&lt;h4 id=&#34;動作環境&#34;&gt;&lt;strong&gt;動作環境&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;.NET Framework 4.6.2 と Microsoft Visual C++ 2015 Redistributable (x86) のインストールが必要です。&lt;/p&gt;
&lt;h4 id=&#34;基本的な使い方&#34;&gt;&lt;strong&gt;基本的な使い方&lt;/strong&gt;&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;小飞机助手をダブルクリックして実行すると、内蔵のS·h·a·d·o·w·s·o·c·k·sが自動的に展開されます（ウイルス対策ソフトにご注意ください）。&lt;/li&gt;
&lt;li&gt;小飞机助手はデフォルトで高可用性モードを使用していますが、モードを切り替えたり、お好みのノードを選択したりすることもできます。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;システムプロキシを有効にする&lt;/code&gt; を選択して、システムプロキシを有効にします。ブラウザのプロキシプラグインを無効にするか、システムプロキシを使用するように設定してください。&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 id=&#34;サーバーの自由な切り替え&#34;&gt;&lt;strong&gt;サーバーの自由な切り替え&lt;/strong&gt;&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;負荷分散：サーバーをランダムに選択します。&lt;/li&gt;
&lt;li&gt;高可用性：遅延とパケットロス率に基づいてサーバーを自動的に選択します。&lt;/li&gt;
&lt;li&gt;累積パケットロス率：定期的なpingによって速度を測定し、選択します。この機能を使用するには、メニューの&lt;code&gt;可用性を統計&lt;/code&gt;を有効にしてください。&lt;/li&gt;
&lt;li&gt;IStrategyインターフェースを実装して切り替えルールをカスタマイズし、pull requestを送信することもできます。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;現在のノードが利用できない場合は、ご自身でノードの切り替えをお試しください。&lt;/p&gt;
&lt;p&gt;ウイルス対策ソフトがウイルスとして検出する可能性があります。信頼リストに追加してください。ご心配な場合は、仮想マシンで実行してください。&lt;br&gt;
Haboレポート：https://habo.qq.com/file/showdetail?pk=AD0GYV1oB2UIP1s9#pephoto .down_link{background:url(&amp;lsquo;&lt;a href=&#34;https://www.52ecy.cn/content/uploadfile/201707/md-bg.jpeg%27&#34;&gt;https://www.52ecy.cn/content/uploadfile/201707/md-bg.jpeg&#39;&lt;/a&gt;) no-repeat 100% 0% #fffdff; border: 1px solid #faf8fb; border-radius: 2px; color: #666; font-size: 14px; margin-bottom: 10px; padding: 5px 20px;}.downbtn{background: none repeat scroll 0 0 #1BA1E2; border: 0 none; border-radius: 2px; color: #FFFFFF; cursor: pointer; font-family: &amp;ldquo;Open Sans&amp;rdquo;,&amp;ldquo;Hiragino Sans GB&amp;rdquo;,&amp;ldquo;Microsoft YaHei&amp;rdquo;,&amp;ldquo;WenQuanYi Micro Hei&amp;rdquo;,Arial,Verdana,Tahoma,sans-serif; font-size: 14px; margin: -4px 20px 0 0; padding: 8px 30px;text-transform:none;text-decoration:none;} .downlink a{text-decoration:none;} .downlink a{text-decoration:none;font-size:15px;} .downlink a:link{color: #ffffff;} .downlink a:visited{color: #ffffff;} .downlink a:hover{color: #ffffff;} .downlink a:active{color: #ffffff;} .downbtn{background: none repeat scroll 0 0 #1BA1E2; border: 0 none; border-radius: 2px; color: #FFFFFF !important; cursor: pointer; font-family: &amp;ldquo;Open Sans&amp;rdquo;,&amp;ldquo;Hiragino Sans GB&amp;rdquo;,&amp;ldquo;Microsoft YaHei&amp;rdquo;,&amp;ldquo;WenQuanYi Micro Hei&amp;rdquo;,Arial,Verdana,Tahoma,sans-serif; font-size: 14px; margin: -4px 20px 0 0; padding: 8px 30px;} .yanshibtn{background: none repeat scroll 0 0 #d33431; border: 0 none; border-radius: 2px; color: #FFFFFF!important; cursor: pointer; font-family: &amp;ldquo;Open Sans&amp;rdquo;,&amp;ldquo;Hiragino Sans GB&amp;rdquo;,&amp;ldquo;Microsoft YaHei&amp;rdquo;,&amp;ldquo;WenQuanYi Micro Hei&amp;rdquo;,Arial,Verdana,Tahoma,sans-serif; font-size: 14px; margin: -4px 20px 0 0; padding: 8px 30px;text-transform:none;text-decoration:none;} .downbtn:hover,.yanshibtn:hover{background: none repeat scroll 0 0 #9B59B6; border: 0 none; border-radius: 2px; color: #FFFFFF!important; cursor: pointer; font-family: &amp;ldquo;Open Sans&amp;rdquo;,&amp;ldquo;Hiragino Sans GB&amp;rdquo;,&amp;ldquo;Microsoft YaHei&amp;rdquo;,&amp;ldquo;WenQuanYi Micro Hei&amp;rdquo;,Arial,Verdana,Tahoma,sans-serif; font-size: 14px; margin: -4px 20px 0 0; padding: 8px 30px;} .downbtn a:hover,.yanshibtn a:hover{background: none repeat scroll 0 0 #9B59B6; border: 0 none; border-radius: 2px; color: #FFFFFF; cursor: pointer; font-family: &amp;ldquo;Open Sans&amp;rdquo;,&amp;ldquo;Hiragino Sans GB&amp;rdquo;,&amp;ldquo;Microsoft YaHei&amp;rdquo;,&amp;ldquo;WenQuanYi Micro Hei&amp;rdquo;,Arial,Verdana,Tahoma,sans-serif; font-size: 14px; margin: -4px 20px 0 0; padding: 8px 30px;}&lt;/p&gt;</description>
    </item>
    <item>
      <title>Woothosting 6ドル/年 vps测评</title>
      <link>https://en.moejue.cn/ja/posts/69/</link>
      <pubDate>Sun, 22 Jul 2018 08:28:06 +0000</pubDate>
      <guid>https://en.moejue.cn/ja/posts/69/</guid>
      <description>&lt;p&gt;**Woothostingは2019年4月1日に買収されました、もう買わないでください(リンク切れ) **【テンセントのクラウドサーバーは安心・信頼・高性能、多彩な構成から選べます】(&lt;a href=&#34;https://cloud.tencent.com/redirect.php?redirect=1001&amp;amp;cps_key=%292aed6076dbae3172c0dc334fb67ec869&amp;amp;from=consol&#34;&gt;https://cloud.tencent.com/redirect.php?redirect=1001&amp;cps_key=)2aed6076dbae3172c0dc334fb67ec869&amp;from=consol&lt;/a&gt;e)
私は上記からサーバーを購入しましたので、ぜひウェーブをお勧めします。
ヨーグルトを構築するために年間3.99ドルを購入することもクールです（構築することはできませんああ私に来ることができます）
暖かいヒント：&lt;/p&gt;
&lt;p&gt;1.登録するQQメールボックスを使用しないでください。
2.サービスプロバイダは、米国、昼間の仕事の受注であり、彼らはその夜オフ、そう返信されません
3.マシン名は、サーバーを使用する場合は自動的に開かれます。他の名前は手動で開くことができます。&lt;/p&gt;
&lt;p&gt;VPS: OpenVZ&lt;/p&gt;
&lt;p&gt;CPU&lt;/p&gt;
&lt;p&gt;RAM&lt;/p&gt;
&lt;p&gt;ハードドライブ&lt;/p&gt;
&lt;p&gt;流量&lt;/p&gt;
&lt;p&gt;ポート&lt;/p&gt;
&lt;p&gt;年間支払額（クリックして購入）&lt;/p&gt;
&lt;p&gt;1&lt;/p&gt;
&lt;p&gt;96M&lt;/p&gt;
&lt;p&gt;5G&lt;/p&gt;
&lt;p&gt;250G&lt;/p&gt;
&lt;p&gt;100M&lt;/p&gt;
&lt;p&gt;[$3.99] (javascript:˶˙ᵕ˙˶)&lt;/p&gt;
&lt;p&gt;1&lt;/p&gt;
&lt;p&gt;192M&lt;/p&gt;
&lt;p&gt;10G&lt;/p&gt;
&lt;p&gt;1T&lt;/p&gt;
&lt;p&gt;100M&lt;/p&gt;
&lt;p&gt;[5本のナイフ] (javascript:￤)&lt;/p&gt;
&lt;p&gt;1&lt;/p&gt;
&lt;p&gt;0.5G&lt;/p&gt;
&lt;p&gt;15G&lt;/p&gt;
&lt;p&gt;1.5T&lt;/p&gt;
&lt;p&gt;100M&lt;/p&gt;
&lt;p&gt;[6本のナイフ] (javascript:⋈◍＞◡＜◍)。&lt;/p&gt;
&lt;p&gt;1&lt;/p&gt;
&lt;p&gt;1G&lt;/p&gt;
&lt;p&gt;20G&lt;/p&gt;
&lt;p&gt;2T&lt;/p&gt;
&lt;p&gt;100M&lt;/p&gt;
&lt;p&gt;[6本のナイフ] (javascript:˶˙ᵕ˙˶)&lt;/p&gt;
&lt;p&gt;1&lt;/p&gt;
&lt;p&gt;0.5G&lt;/p&gt;
&lt;p&gt;20G&lt;/p&gt;
&lt;p&gt;1.5T&lt;/p&gt;
&lt;p&gt;1000M&lt;/p&gt;
&lt;p&gt;[8本のナイフ] (javascript:⋈◍＞◡＜◍)。&lt;/p&gt;
&lt;p&gt;1&lt;/p&gt;
&lt;p&gt;1G&lt;/p&gt;
&lt;p&gt;25G&lt;/p&gt;
&lt;p&gt;2.5T&lt;/p&gt;
&lt;p&gt;100M&lt;/p&gt;
&lt;p&gt;[8本のナイフ】(javascript:⋈◍＞◡＜◍)。&lt;/p&gt;
&lt;p&gt;1&lt;/p&gt;
&lt;p&gt;1G&lt;/p&gt;
&lt;p&gt;30G&lt;/p&gt;
&lt;p&gt;2T&lt;/p&gt;
&lt;p&gt;100M&lt;/p&gt;
&lt;p&gt;[9ドル] (javascript:˶˙ᵕ˙˶)&lt;/p&gt;
&lt;p&gt;1&lt;/p&gt;
&lt;p&gt;1G&lt;/p&gt;
&lt;p&gt;40G&lt;/p&gt;
&lt;p&gt;3T&lt;/p&gt;
&lt;p&gt;100M&lt;/p&gt;
&lt;p&gt;[9ドル] (javascript:˶˙ᵕ˙˶)&lt;/p&gt;
&lt;p&gt;2&lt;/p&gt;
&lt;p&gt;1G&lt;/p&gt;
&lt;p&gt;25G&lt;/p&gt;
&lt;p&gt;3T&lt;/p&gt;
&lt;p&gt;100M&lt;/p&gt;
&lt;p&gt;[9ドル] (javascript:˶˙ᵕ˙˶)&lt;/p&gt;
&lt;p&gt;2&lt;/p&gt;
&lt;p&gt;1G&lt;/p&gt;</description>
    </item>
    <item>
      <title>萌音コミュニティがやってきたよ〜！わぁ！</title>
      <link>https://en.moejue.cn/ja/posts/27/</link>
      <pubDate>Sat, 07 Jul 2018 07:41:09 +0000</pubDate>
      <guid>https://en.moejue.cn/ja/posts/27/</guid>
      <description>&lt;p&gt;2ヶ月の情熱を込めた作品、萌音コミュニティがついに登場！
新世代のオープンな二次元交流コミュニティとして、画像、動画、音声、さらにはブラックテクノロジーなど、許可された範囲内で、ほぼあらゆるコンテンツを投稿できます&amp;hellip;&lt;/p&gt;
&lt;p&gt;幻想領域は去り、萌音コミュニティがやってきた！女装男子、BL、百合、えええっなロリ、緩♀交探し、哲♂学談義など、何でもあり！古来より赤と青はCP（カップル）になり、百合かBLのどちらかだ。さあ、私たちと契約しよう！&lt;/p&gt;
&lt;p&gt;萌音コミュニティは、超楽しいACGN二次元交流コミュニティ、愛と調和に満ちた二次元コミュニティです。新作アニメ、旧作アニメ、日本のアニメ画像、福利アニメ、MMDなど、ACGNリソースが何でも揃っています。みんなでツッコミを入れ、弾幕を流し、コスプレ仲間を見つけ、二次元オタクの日常を共有し、二次元の素晴らしい世界へ飛び込もう！
&lt;a href=&#34;https://www.moeins.com&#34;&gt;主站点 www.moeins.com&lt;/a&gt;
&lt;a href=&#34;https://www.moeins.cn/&#34;&gt;备用站点 www.moeins.cn&lt;/a&gt;
&lt;strong&gt;# このコミュニティを作った目的について&lt;/strong&gt;
実は特に目的はありません。ただ、自分だけの二次元コミュニティが欲しかったんです。そして、二次元好きの仲間たちがそこで他愛もないおしゃべりをするような場所を。例えば、「俺の嫁が可愛いか、お前の嫁が可愛いか」みたいなことを。そうして、このコミュニティは誕生しました。
萌音コミュニティが成功するかどうかは分かりませんが、私たちは心を込めて作り上げていきます。
どうせドメインの更新料が増えるだけですし、現在、&lt;a href=&#34;http://bbs.76fx.com/&#34;&gt;齐乐分享&lt;/a&gt;が提供するロサンゼルスのデータセンターでホスティングされています。ドメインの登録（备案）をしていないので。
&lt;strong&gt;# 萌音コミュニティの誕生は以下のプロジェクトに感謝します&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;thinkPHP&lt;/li&gt;
&lt;li&gt;layui&lt;/li&gt;
&lt;li&gt;fly&lt;/li&gt;
&lt;li&gt;Onedrive&lt;/li&gt;
&lt;li&gt;layuiCMS 2.0&lt;/li&gt;
&lt;li&gt;video.js&lt;/li&gt;
&lt;li&gt;jQuery&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;上記の偉大な方々に敬意を表します！&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;# 恒例の画像公開&lt;/strong&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1pgy1ft1g3egd90j317t0pv7cl.jpg&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1ply1ft1g290p9bj31gt0p4div.jpg&#34;&gt;
&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1ply1ft1g2952ddj314h0p6di9.jpg&#34;&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>投稿者は誰？</title>
      <link>https://en.moejue.cn/ja/posts/68/</link>
      <pubDate>Mon, 25 Jun 2018 07:53:09 +0000</pubDate>
      <guid>https://en.moejue.cn/ja/posts/68/</guid>
      <description>&lt;p&gt;私が最初にWeiboのクラウドストレージを二次元ランダムAPIの画像ストレージとして使用して以来、ネット上には多くの類似した二次元ランダムAPIが派生しました。私が知っているものの中からいくつかを選んでアクセスしてみたところ、多くの画像が非常によく見知ったものでした。しかも、画像リンクは私のデータベースでも見つかるのです。これって、私がアップロードしたものじゃないですか？
彼らは皆、私のものを収集しているのでしょうか？
もちろん、口頭だけでは証拠になりません。根拠が必要です。
そこで、私が知っている10個のAPIインターフェースを選びました。これらはすべてSina画像ホスティングに保存されている二次元APIです。サーバーに接続して一晩中収集したところ、約10万枚の画像を収集しました。重複や無効なものをフィルタリングした後、約1万枚が残りました。驚くべきことに、これは10個のインターフェースのデータが基本的に同じであることを示しています。
次に、プログラムを使ってリンクのアップロード者を分析したところ、この1万枚のうち75%の画像が幻想領域画像ホスティングからのものでした。
Sina画像アドレスからSinaユーザーを特定することは、もはや秘密ではありませんが。
&lt;a href=&#34;https://sandbox.runjs.cn/show/fx9b4hyv&#34;&gt;オンラインデモアドレス&lt;/a&gt; これはJSバージョンで、コードは右クリックで直接取得できます。
特定することで、API内の大量の画像が幻想領域画像ホスティングのWeiboアップロード、つまり私自身がアップロードしたものであることがわかります。それらのいわゆるAPIが私のものを盗用しているかどうかは、彼ら自身がよく知っているでしょう。
&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1pgy1fsnjxvkx9jj30fv08i0zn.jpg&#34;&gt;
原理の解明：
現在登録されているWeiboアカウントのUIDは非常に大きいため、アップロードされる画像は基本的に007で始まります。そのため、以下の画像は私がWeiboで適当に古いアカウントからコピーしてきたものです。
リンクは &lt;a href=&#34;https://wxt.sinaimg.cn/thumb300/9d0d09ably1fsn7m0jyzzj20m80cidgm.jpg&#34;&gt;https://wxt.sinaimg.cn/thumb300/9d0d09ably1fsn7m0jyzzj20m80cidgm.jpg&lt;/a&gt; の画像&lt;/p&gt;
&lt;p&gt;ファイル名 9d0d09ably1fsn7m0jyzzj20m80cidgm を抽出し、最初の8桁 9d0d09ab を16進数で変換すると 2634877355 になります。これがユーザーのUIDです。
そして、Weiboユーザーのホームページアドレス:https://weibo.com/u/+uid に連結します。
&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1pgy1fsni85dka6j30ik06wjrb.jpg&#34;&gt;&lt;/p&gt;
&lt;p&gt;もし &lt;a href=&#34;http://wx1.sinaimg.cn/mw690/0072Vf1pgy1foxkfv4t7bj31hc0u018w.jpg&#34;&gt;http://wx1.sinaimg.cn/mw690/0072Vf1pgy1foxkfv4t7bj31hc0u018w.jpg&lt;/a&gt; のような、005、006、007で始まるものが出現した場合は、62進数で変換します。
なぜこれが出現するかというと、8桁の16進数では保存しきれなくなったためだと思われます。
&lt;a href=&#34;https://weibo.com/u/6456124939&#34;&gt;https://weibo.com/u/6456124939&lt;/a&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1pgy1fsnkgpcq7pj30il06vjrb.jpg&#34;&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>ウェブパケットキャプチャ - 私のプレイリスト</title>
      <link>https://en.moejue.cn/ja/posts/31/</link>
      <pubDate>Tue, 05 Jun 2018 11:04:05 +0000</pubDate>
      <guid>https://en.moejue.cn/ja/posts/31/</guid>
      <description>&lt;p&gt;最近、多くの人のブログでウェブスクレイピング（パケットキャプチャ）のチュートリアルが公開されているのを見かけ、それが私の興(きょう)味(み)（かっこつけ）を刺激し、この記事が生まれました。&lt;/p&gt;
&lt;p&gt;ちょうど先日、&lt;a href=&#34;https://music.52ecy.cn/&#34;&gt;私のプレイリスト&lt;/a&gt;がKuGouのAPIとの連携が機能しなくなりました。この機会に修正し、ついでに画像付きのチュートリアルを作成することにしました。というわけで、KuGouを「メスを入れる（分析対象にする）」ことにします。&lt;/p&gt;
&lt;p&gt;パケットキャプチャの概念について&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;パケットキャプチャ（packet capture）とは、ネットワークで送受信されるデータパケットを傍受、再送信、編集、保存などの操作を行うことであり、ネットワークセキュリティのチェックにも使われます。また、データの傍受などにも頻繁に利用されます。&lt;/p&gt;
&lt;p&gt;——ゲイ百科より&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;ここで話すのは、ウェブページで送受信されるデータの傍受であり、再送信や編集など、ネットワークセキュリティに影響を与える操作は含みません。
実は&lt;a href=&#34;https://www.52ecy.cn/tag/%E6%8A%93%E5%8C%85&#34;&gt;パケットキャプチャ&lt;/a&gt;に関する記事は、2016年にはすでに複数公開していましたが、記事が古くなりメンテナンスされていないため、画像は失われたり、破損したり、順序がめちゃくちゃになっています。
ウェブ開発者、特にバックエンド開発者にとって、パケットキャプチャはあまり馴染みがないかもしれません。しかし、私はデスクトップアプリケーション開発出身なので、使うのはお手の物です。&lt;/p&gt;
&lt;p&gt;目的：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;KuGouの楽曲直リンクの解析 - 私のプレイリストの修正&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;対象サイト：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&#34;http://t.kugou.com/1md5hf5t8V2&#34;&gt;http://t.kugou.com/1md5hf5t8V2&lt;/a&gt; KuGouの私のプレイリスト共有短縮URL&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;使用ツール：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Google ChromeのF12キー（または Ctrl + Shift + I、または右クリック &amp;gt; 「検証」）開発者ツール&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;（注意：以下のチュートリアルは画像と合わせてご覧ください。見えにくい場合は右クリックで新しいウィンドウで画像を開いてください）
ここではモバイル版のページをキャプチャします。なぜならPC版ではプレイリスト全体が直接ソースコードに返されるため、解析が不便だからです。モバイル版ではJSONが返されます。
Preserve Log：ページ遷移後も以前のログを保持する機能
左上隅の携帯電話アイコン：現在のブラウジングインターフェースのUAをモバイルUAに切り替える
&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1pgy1fs0iyxmmr1j30nz0fl0u2.jpg&#34;&gt;
URLを入力してEnterキーを押しアクセスすると、ウェブページがリダイレクトされます。
&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1pgy1fs0iybcesaj314p0arn2j.jpg&#34;&gt;
ステータスコード302、リダイレクトアドレスを取得（必ず画像を確認してください。テキストの説明は簡略化されています）
&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1pgy1fs0iyb1qhdj30w00amjt6.jpg&#34;&gt;
パケットキャプチャはここまでで終了です。以下、分析を開始します：
確かなのは、KuGouサイトの音楽リンクは決して固定ではないということです。
これまでの経験からすると、これらはすべて疑わしいパラメータです。
&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1pgy1fs0j14h87ij30qr0bdmya.jpg&#34;&gt;
パケットキャプチャログを丹念に探すと、プレイリスト全体の取得方法である&lt;code&gt;list&lt;/code&gt;が見つかりました。そして、楽曲の基本情報も含まれています。
&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1pgy1fs0iybbzb2j312a0e8afo.jpg&#34;&gt;
&lt;code&gt;list&lt;/code&gt;リンクを分析すると、ここのパラメータは以前のものと非常によく似ていることが明らかです。
&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1pgy1fs0iyb4b7bj30q50adwel.jpg&#34;&gt;
次に、各楽曲のリンクを分析します。
楽曲の直リンクの有効期限はだいたい24時間程度で、無効になります。
引き続きパケットキャプチャログを確認します。
&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1pgy1fs0iyc2p8aj314a0ecn23.jpg&#34;&gt;
楽曲のハッシュ値を含めることで、楽曲の関連情報と直リンクを取得できます（ハッシュ値は前述の楽曲リストですでに返されています）。
&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1pgy1fs0iza7xskj30mg06h3yi.jpg&#34;&gt;&lt;/p&gt;
&lt;p&gt;まとめ：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;短縮URL -&amp;gt; ウェブリンクパラメータ -&amp;gt; プレイリストの取得 -&amp;gt; 楽曲の取得 （段階的に、前のステップで得られたパラメータを使って次のURLにアクセスします）&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;関連コードは自分で書いてくださいね&amp;hellip;.-。-
このようなチュートリアル性の高い記事を投稿するのは久しぶりです。
最後に一言、Google開発者ツールは本当にめちゃくちゃ便利！
ちょっとした記事を書いて、逃げる〜〜&lt;/p&gt;
&lt;p&gt;関連推奨記事
（1）&lt;a href=&#34;https://mkblog.cn/492/&#34;&gt;PHPを使ってBingの今日の画像をスクレイピングし、自分のものとして利用する&lt;/a&gt;.孟坤ブログ.
（2）&lt;a href=&#34;https://mkblog.cn/1273&#34;&gt;パケットキャプチャ入門（一）&lt;/a&gt;
関連コード
（1）&lt;a href=&#34;https://www.youngxj.cn/507.html&#34;&gt;KuGouプレイリストの楽曲情報取得インターフェースのソースコード&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>萌音全自動カード発行プラットフォーム、リリース</title>
      <link>https://en.moejue.cn/ja/posts/67/</link>
      <pubDate>Sat, 12 May 2018 10:52:02 +0000</pubDate>
      <guid>https://en.moejue.cn/ja/posts/67/</guid>
      <description>&lt;p&gt;萌音自動カード発行プラットフォーム（以下「萌音発券」）は、個人ユーザーに仮想商品のオンライン購入および全自動配送サービスを提供します。
開発の目的は、私自身にはあまり必要なく、市場には多くの類似製品がありますが、友人が欲しがっていたため、これが誕生しました。
可能な限りシンプルな原則で最も基本的な機能を実現したため、インターフェースは非常にミニマルで、将来の拡張も非常に簡単です。
&lt;a href=&#34;http://pay.52ecy.cn&#34;&gt;デモサイト&lt;/a&gt;  （サーバーは米国オレゴン州にあり、速度が少し遅いですが、デモンストレーション専用です）&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;資金は即時入金&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;第三者による持ち逃げを心配する必要はありません。資金は直接入金され、第三者を介しません。迅速な資金回収で、競合他社を凌駕します。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;複数ユーザー無制限&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;いかなるアカウント、ドメイン、CPUにも縛られず、完全に自由に利用でき、いつでも変更可能です。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;複数の支払い方法&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;WeChat Pay、Alipay、QQウォレット、Tenpay。PCとモバイルの両方に対応しています。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;非同期通知&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;同期＋非同期通知を採用しているため、支払い完了後にページが閉じられて注文が無効になる心配はありません。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;萌音発券のソースコードを入手するには？
現在、以下の方法でのみ提供しています：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;ブロガーの知人、友人、またはプロジェクトに貢献した方（萌音発券に限らず）&lt;/li&gt;
&lt;li&gt;優秀な幻想領域画像ホスティングユーザー&lt;/li&gt;
&lt;li&gt;プロジェクトに58元以上寄付することで入手できます。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;何かご質問があれば、デモサイト右上の「お問い合わせ」をクリックして、私と詳しく話し合ってみてください。&lt;strong&gt;よくある質問&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;1、萌音発券は何をするものですか、どんな用途がありますか？&lt;/p&gt;
&lt;p&gt;萌音発券は、プロフェッショナルな仮想カードコード自動配送サービスを提供します。&lt;/p&gt;
&lt;p&gt;2、萌音発券プラットフォームに登録して、加盟店になるにはどうすればよいですか？&lt;/p&gt;
&lt;p&gt;プロジェクトに58元以上寄付することで入手できます。&lt;/p&gt;
&lt;p&gt;3、注文/カードコードを照会するにはどうすればよいですか？&lt;/p&gt;
&lt;p&gt;プラットフォームの注文照会機能を通じて、注文時に記入した連絡先または注文番号を入力して照会してください。&lt;a href=&#34;http://pay.52ecy.cn/search.html&#34;&gt;こちらをクリックして照会&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;4、プラットフォームでは何を販売できますか？&lt;/p&gt;
&lt;p&gt;ゲーム内仮想通貨、アイテム、会員カード、ソフトウェア使用権など&lt;/p&gt;
&lt;p&gt;5、現在、御社のプラットフォームには何種類の支払い方法がありますか？&lt;/p&gt;
&lt;p&gt;現在、Alipay、WeChat、QQウォレットの3種類です。&lt;/p&gt;
&lt;p&gt;6、萌音発券加盟店の料金はどのように計算されますか？&lt;/p&gt;
&lt;p&gt;全額無料、手数料は一切かかりません。&lt;/p&gt;
&lt;p&gt;7、購入者はどのようにカードコード情報を取得しますか？&lt;/p&gt;
&lt;p&gt;商品購入ページで希望の商品を選択し、支払いチャネルを選択して支払いを完了すると、自動的に配送ページにリダイレクトされます。対応するカードコードが届かない場合は、注文番号を保存し、カードコード照会アドレスを開いてください： &lt;a href=&#34;http://pay.52ecy.cn/search.html&#34;&gt;こちらをクリック&lt;/a&gt; 注文時に記入した注文連絡先または注文番号を入力して照会してください。&lt;/p&gt;
&lt;p&gt;8、出金申請の最低金額はいくらですか？申請後、どのくらいの時間で入金されますか？&lt;/p&gt;
&lt;p&gt;萌音発券の金額はリアルタイムで入金され、第三者を介する必要はありません。&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1pgy1fr7mpdap67j30w80ejq3p.jpg&#34;&gt;
&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1pgy1fr7mpda3o7j30ow0n3wgj.jpg&#34;&gt;
&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1pgy1fr7mpdcon8j30w70f374u.jpg&#34;&gt;
&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1pgy1fr7mpdesjuj30vs0qgdhv.jpg&#34;&gt;
&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1pgy1fr7mpduxw8j30wn0lkgng.jpg&#34;&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>LinuxでのPHP環境のインストール</title>
      <link>https://en.moejue.cn/ja/posts/65/</link>
      <pubDate>Mon, 07 May 2018 06:52:32 +0000</pubDate>
      <guid>https://en.moejue.cn/ja/posts/65/</guid>
      <description>&lt;p&gt;学习环境：Centos 7.2 正式版&lt;/p&gt;
&lt;p&gt;# 更新源
yumアップデート&lt;/p&gt;
&lt;h1 id=&#34;安装-nginx&#34;&gt;安装 nginx&lt;/h1&gt;
&lt;p&gt;yum install nginx -y&lt;/p&gt;
&lt;h1 id=&#34;安装mysql&#34;&gt;安装mysql&lt;/h1&gt;
&lt;p&gt;wget &lt;a href=&#34;https://repo.mysql.com//mysql57-community-release-el7-11.noarch.rpm&#34;&gt;https://repo.mysql.com//mysql57-community-release-el7-11.noarch.rpm&lt;/a&gt;
yum localinstall mysql57-community-release-el7-11.noarch.rpm&lt;/p&gt;
&lt;h1 id=&#34;安装php72&#34;&gt;安装PHP7.2&lt;/h1&gt;
&lt;p&gt;rpm -Uvh &lt;a href=&#34;https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm&#34;&gt;https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm&lt;/a&gt;
rpm -Uvh &lt;a href=&#34;https://mirror.webtatic.com/yum/el7/webtatic-release.rpm&#34;&gt;https://mirror.webtatic.com/yum/el7/webtatic-release.rpm&lt;/a&gt;
yumアップデート
yum install -y php72w-cli php72w-common php72w-dba php72w-devel php72w-fpm php72w-gd php72w-imap php72w-mbstring php72w-mysql php72w-pdo php72w-pdo_dblib php72w-pear php72w-pecl-igbinary php72w-pecl-xdebug php72w-process php72w-xml php72w-xmlrpc php72w-opcache php72w-pecl-memcached php72w-pecl-mongodb php72w-pecl-redis&lt;/p&gt;
&lt;h1 id=&#34;启动服务&#34;&gt;启动服务&lt;/h1&gt;
&lt;p&gt;サービス nginx スタート
サービス mysql 開始
php-fmp サービス開始
/usr/sbin/php-fpm &amp;ndash;nodaemonize &amp;ndash;fpm-config /etc/php-fpm.conf &amp;gt; /dev/null 2&amp;gt;&amp;amp;1 &amp;amp;&lt;/p&gt;
&lt;h1 id=&#34;编辑配置文件&#34;&gt;编辑配置文件&lt;/h1&gt;
&lt;p&gt;vim /etc/nginx/nginx.conf
:q!#不保存退出
wq #保存退出&lt;/p&gt;</description>
    </item>
    <item>
      <title>幻想領域画像ホスティングシステム更新停止のお知らせ</title>
      <link>https://en.moejue.cn/ja/posts/56/</link>
      <pubDate>Mon, 30 Apr 2018 12:28:37 +0000</pubDate>
      <guid>https://en.moejue.cn/ja/posts/56/</guid>
      <description>&lt;p&gt;不完全な統計によると、軽量Sina画像ホスティングシステム「幻想領域」は、バージョン1.0のリリース（2018-03-08）から現在（2018-04-30）まで、累計インストール数は2000回を超え、さらに毎日数十件のペースで急増しています。そのうち、海賊版ユーザーは5%以下です（あなた方は恥を知りなさい）。この間、大小さまざまなウェブサイト、ブログ、フォーラム、ソフトウェア配布サイトなどで100回以上転載・公開されました。海賊版を広めるものも含め、さらには某プラットフォームで販売されることさえありました。&lt;/p&gt;
&lt;p&gt;幻想領域 非商業バージョン（永久無料、商用版なし）は、GPLライセンスおよび付属条項を遵守して公開されています。
もしあなたが私のGPLソフトウェアを使用し、改変した場合、あなたのソフトウェアもオープンソースにしなければなりません。さもなければ、私のソフトウェアを使用することはできません。
幻想領域をベースにしたすべての改変版または二次開発版は、オープンソースでなければなりません。関連条項を遵守しない場合は、使用を停止し、幻想領域に関連するすべてのものを削除してください。
一度GPL契約に違反しても、直接的な結果はないかもしれません。しかし、それはあなた方がこれから異なる方向、危険な方向へ進むことを意味します。どうかご理解いただき、自重してくださることを願います。&amp;mdash;-海賊版を作成し、広める人々へ
&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1pgy1fqp7dw64zlj30m80dwdgr.jpg&#34;&gt;
&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1pgy1fqp6xk8reoj30gn0gpaav.jpg&#34;&gt;
バージョン1.2.3の時点で、機能はかなり完成されており、バグもありません。軽量な画像ホスティングシステムとしては十分です。そもそもこのシステムは、自分自身が便利に使うためだけに開発したものです。つきましては、幻想領域の外部向け更新サービスを停止することを決定しました。今後は、交流グループ内の&lt;strong&gt;優秀な&lt;/strong&gt;幻想領域で構築された画像ホスティングシステムサイトにのみ更新を提供します。関連するプラグインインターフェースファイルは、グループ内で私に個人メッセージを送って請求することができます。
最後に、これまでの皆様のサポートとご関心に感謝いたします！グループ内で私の権利を守ってくれた方々にも感謝します！&lt;/p&gt;
&lt;p&gt;余談ですが、この記事は数日前に書き上げていました。公開すべきかどうかずっと悩んでいましたが、様々な理由から、やはり葛藤がありました。でも、せっかく書いたのだから公開することにしました。主な理由は、メンテナンスにあまり多くのエネルギーを割けないこと、そしてまた新しいプロジェクトを始めてしまったことです……続く&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;5月5日追記&lt;/strong&gt;
今日、友人から画像付きでフィードバックがありました。要するに、私の幻想領域がChevereto（海外の有名な画像ホスティングシステムで、国内でどれだけの人がこのクラック版を使っているかは知りませんが）を盗用しているという内容でした。主に以下の2つの問題について回答します。
&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1pgy1fr0i1um0psj30jj0bjt9b.jpg&#34;&gt;
あの代物？そんなもの、お前が書いてみろよ？幻想領域の最も中心的な機能は、画像をSina Cloud Storageにアップロードすることであり、ローカルアップロード機能は提供していません。Cheveretoにこの機能があるのか？100%盗用？何も理解していないくせに、どうしてそんなに無責任に非難できるんだ？
&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1pgy1fr0i1um2lsj30kf0axq3h.jpg&#34;&gt;
いわゆる幻想領域？インターフェースはどのプログラムを参考にしたって？幻想領域のトップページのインターフェースは、bootcss V3が提供するテンプレートを使用しています。参考にしたなどという話はどこから出てきたのですか？
&lt;a href=&#34;https://v3.bootcss.com/examples/cover/&#34;&gt;https://v3.bootcss.com/examples/cover/&lt;/a&gt; まず調べてからにしてください。むやみに他人を中傷しないでください。私は論争を起こしたくありません。これを見ても何も言わないでください。&lt;/p&gt;
&lt;p&gt;**6月24日追記
**今日、またグループのメンバーから@メンションがあり、画像が送られてきました。画像を見て判断してください。
同じプログラマーとして、そんなことをして良心が痛まないのか？だからお前はただの海賊版野郎だ。海賊版を広める者は、使う者よりもさらに悪質だ。お前の人間性も人格も、その行動と同じくらい汚らわしく、唾棄すべきものであることは想像に難くない。
&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1pgy1fsmkn4goqlj30ri0f574s.jpg&#34;&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>emlog Sina アップロードプラグイン &#43; API V1.1</title>
      <link>https://en.moejue.cn/ja/posts/7/</link>
      <pubDate>Sat, 21 Apr 2018 11:02:22 +0000</pubDate>
      <guid>https://en.moejue.cn/ja/posts/7/</guid>
      <description>&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1pgy1fqkhhzq5raj30zv0kf124.jpg&#34;&gt;&lt;br&gt;
emlog管理画面 記事作成用Sina画像アップロードプラグイン&lt;br&gt;
初めてemlogプラグインを作成しました。七牛クラウドストレージの書き方を参考にしました（そうです、管理画面にあるあれです）。二つを一緒に使うことをお勧めします。&lt;br&gt;
プラグインをダウンロードした後、解凍せずに直接emlogの管理画面にアップロードするだけです。（誰がこんなこと言ったんだ、出てこい、殴らないから）&lt;br&gt;
具体的な使用方法はプラグインの設定画面に記載されています。ダウンロードアドレスは記事の最後にあります。&lt;br&gt;
どなたかemlogの開発者アカウントをお持ちの親切な方、emlogアプリセンターへの提出を手伝っていただけませんか。&lt;/p&gt;
&lt;p&gt;注意： GitHubからダウンロードしたzip圧縮パッケージのファイル名には&lt;code&gt;-master&lt;/code&gt;が追加され、中のサブフォルダも同様です。アップロードするには&lt;code&gt;SinaUpload&lt;/code&gt;にリネームする必要があります。そうしないとemlogでエラーが発生します。&lt;/p&gt;
&lt;p&gt;このプラグインはemlogブログシステム専用です。他のブログシステムでは使用できません。&lt;br&gt;
以下は公開APIです。ご自身で他のシステムのプラグインを作成することができます。&lt;/p&gt;
&lt;h2 id=&#34;apiアドレス&#34;&gt;APIアドレス：&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://img.52ecy.cn/home/Interface&#34;&gt;https://img.52ecy.cn/home/Interface&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;リクエストパラメータ説明&#34;&gt;リクエストパラメータ説明：&lt;/h2&gt;
&lt;p&gt;名称&lt;/p&gt;
&lt;p&gt;説明&lt;/p&gt;
&lt;p&gt;username&lt;/p&gt;
&lt;p&gt;幻想領域のアカウント&lt;/p&gt;
&lt;p&gt;password&lt;/p&gt;
&lt;p&gt;幻想領域のパスワード&lt;/p&gt;
&lt;p&gt;multipart(任意)&lt;/p&gt;
&lt;p&gt;false/true、ローカルアップロードかリモートアップロードかを選択します。デフォルトはローカルアップロード(true)です。&lt;/p&gt;
&lt;p&gt;url(任意)&lt;/p&gt;
&lt;p&gt;転送が必要な画像のURL。multipartがfalseの場合、urlは必須です。&lt;/p&gt;
&lt;h2 id=&#34;標準jsonデータ返却&#34;&gt;標準JSONデータ返却&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;code&amp;#34;&lt;/span&gt;:&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;0000&amp;#34;&lt;/span&gt;,  &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#ステータスコード&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;msg&amp;#34;&lt;/span&gt;:&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;http://www.52ecy.cn/randbg.png&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#画像URL&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;成功した場合はステータスコード0000と画像URLを返します。失敗した場合はステータスコードと原因を返します。&lt;/p&gt;
&lt;p&gt;.down_link{background:url(&amp;lsquo;&lt;a href=&#34;https://www.52ecy.cn/content/uploadfile/201707/md-bg.jpeg%27&#34;&gt;https://www.52ecy.cn/content/uploadfile/201707/md-bg.jpeg&#39;&lt;/a&gt;) no-repeat 100% 0% #fffdff; border: 1px solid #faf8fb; border-radius: 2px; color: #666; font-size: 14px; margin-bottom: 10px; padding: 5px 20px;}.downbtn{background: none repeat scroll 0 0 #1BA1E2; border: 0 none; border-radius: 2px; color: #FFFFFF; cursor: pointer; font-family: &amp;ldquo;Open Sans&amp;rdquo;,&amp;ldquo;Hiragino Sans GB&amp;rdquo;,&amp;ldquo;Microsoft YaHei&amp;rdquo;,&amp;ldquo;WenQuanYi Micro Hei&amp;rdquo;,Arial,Verdana,Tahoma,sans-serif; font-size: 14px; margin: -4px 20px 0 0; padding: 8px 30px;text-transform:none;text-decoration:none;} .downlink a{text-decoration:none;} .downlink a{text-decoration:none;font-size:15px;} .downlink a:link{color: #ffffff;} .downlink a:visited{color: #ffffff;} .downlink a:hover{color: #ffffff;} .downlink a:active{color: #ffffff;} .downbtn{background: none repeat scroll 0 0 #1BA1E2; border: 0 none; border-radius: 2px; color: #FFFFFF !important; cursor: pointer; font-family: &amp;ldquo;Open Sans&amp;rdquo;,&amp;ldquo;Hiragino Sans GB&amp;rdquo;,&amp;ldquo;Microsoft YaHei&amp;rdquo;,&amp;ldquo;WenQuanYi Micro Hei&amp;rdquo;,Arial,Verdana,Tahoma,sans-serif; font-size: 14px; margin: -4px 20px 0 0; padding: 8px 30px;} .yanshibtn{background: none repeat scroll 0 0 #d33431; border: 0 none; border-radius: 2px; color: #FFFFFF!important; cursor: pointer; font-family: &amp;ldquo;Open Sans&amp;rdquo;,&amp;ldquo;Hiragino Sans GB&amp;rdquo;,&amp;ldquo;Microsoft YaHei&amp;rdquo;,&amp;ldquo;WenQuanYi Micro Hei&amp;rdquo;,Arial,Verdana,Tahoma,sans-serif; font-size: 14px; margin: -4px 20px 0 0; padding: 8px 30px;text-transform:none;text-decoration:none;} .downbtn:hover,.yanshibtn:hover{background: none repeat scroll 0 0 #9B59B6; border: 0 none; border-radius: 2px; color: #FFFFFF!important; cursor: pointer; font-family: &amp;ldquo;Open Sans&amp;rdquo;,&amp;ldquo;Hiragino Sans GB&amp;rdquo;,&amp;ldquo;Microsoft YaHei&amp;rdquo;,&amp;ldquo;WenQuanYi Micro Hei&amp;rdquo;,Arial,Verdana,Tahoma,sans-serif; font-size: 14px; margin: -4px 20px 0 0; padding: 8px 30px;} .downbtn a:hover,.yanshibtn a:hover{background: none repeat scroll 0 0 #9B59B6; border: 0 none; border-radius: 2px; color: #FFFFFF; cursor: pointer; font-family: &amp;ldquo;Open Sans&amp;rdquo;,&amp;ldquo;Hiragino Sans GB&amp;rdquo;,&amp;ldquo;Microsoft YaHei&amp;rdquo;,&amp;ldquo;WenQuanYi Micro Hei&amp;rdquo;,Arial,Verdana,Tahoma,sans-serif; font-size: 14px; margin: -4px 20px 0 0; padding: 8px 30px;}&lt;/p&gt;</description>
    </item>
    <item>
      <title>幻想領域画像ホスティングシステムV1.2正式版リリース</title>
      <link>https://en.moejue.cn/ja/posts/66/</link>
      <pubDate>Wed, 11 Apr 2018 11:40:25 +0000</pubDate>
      <guid>https://en.moejue.cn/ja/posts/66/</guid>
      <description>&lt;h1 id=&#34;幻想領域12&#34;&gt;幻想領域1.2&lt;/h1&gt;
&lt;p&gt;これは最終的なソリューションとして生まれたものではなく、開発の目的は単に自分自身の利便性を高めるためです。
&lt;a href=&#34;https://img.52ecy.cn/&#34;&gt;プロジェクトホームページ&lt;/a&gt;&lt;br&gt;
&lt;a href=&#34;https://github.com/178146582/Fantasy-field&#34;&gt;プロジェクトアドレス&lt;br&gt;
&lt;/a&gt;&lt;a href=&#34;https://www.52ecy.cn/post-68.html&#34;&gt;幻想領域V1.0&lt;/a&gt; ☜(詳細はこちらをクリック)&lt;/p&gt;
&lt;h1 id=&#34;ダウンロード&#34;&gt;ダウンロード&lt;/h1&gt;
&lt;p&gt;最新の正式版&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://codeload.github.com/178146582/Fantasy-field/zip/master&#34;&gt;今すぐダウンロード&lt;/a&gt;&lt;/p&gt;
&lt;h1 id=&#34;インストール&#34;&gt;インストール&lt;/h1&gt;
&lt;p&gt;幻想領域のソースコードを解凍し、ウェブサイトのルートディレクトリにアップロードする必要があります。ウェブサイトのドメインにアクセスすると、自動的にインストーラーにリダイレクトされますので、ウィザードの指示に従ってインストールしてください。リダイレクトされない場合は、手動で http://あなたのドメイン/install.php にアクセスしてインストールを行ってください。
初回インストールが成功した後、管理者バックエンドにログインして画像ホスティングの基本設定を行う必要があります。
バックエンドアドレス：http://あなたのドメイン/admin しかし皮肉なことに、ログインはフロントエンドで行う必要があります。&lt;/p&gt;
&lt;h4 id=&#34;動作環境&#34;&gt;動作環境&lt;/h4&gt;
&lt;p&gt;注意：幻想領域はバージョン1.0からPHPバージョン≥5.6のみをサポートしています。お使いのPHPバージョンを更新してください。
幻想領域はバージョン1.2から上書きインストール方式を採用します。つまり、過去のデータは保持されます。データを削除する必要がある場合は、手動で空にしてください。&lt;/p&gt;
&lt;h1 id=&#34;更新内容&#34;&gt;更新内容&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;探索インターフェース（最近、ランダム）の改善&lt;/li&gt;
&lt;li&gt;画像ホームページの追加&lt;/li&gt;
&lt;li&gt;HTML、BBcode、Markdownなどのコードをワンクリックで生成&lt;/li&gt;
&lt;li&gt;自動更新システムの追加（ただし、使用できるとは限りません）&lt;/li&gt;
&lt;li&gt;よりフレンドリーなアップロード進捗表示（ただし、正確ではありません）&lt;/li&gt;
&lt;li&gt;各種デフォルト設定をより合理的に変更&lt;/li&gt;
&lt;li&gt;システムの重大な脆弱性を修正（現行バージョンは必ず更新してください）&lt;/li&gt;
&lt;li&gt;登録関連の制限を追加&lt;/li&gt;
&lt;li&gt;互換性の向上、マルチプラットフォームでの実行、PHP7.0+をサポート&lt;/li&gt;
&lt;li&gt;既知のバグを修正&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1ply1fq8ylxd9ilj30ud0lzb29.jpg&#34;&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1ply1fq8ylvspsbj30tx0lqtrl.jpg&#34;&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>幻想領域 画像アップローダー ヘルプ</title>
      <link>https://en.moejue.cn/ja/posts/63/</link>
      <pubDate>Mon, 19 Mar 2018 11:56:29 +0000</pubDate>
      <guid>https://en.moejue.cn/ja/posts/63/</guid>
      <description>&lt;p&gt;インストールや使用中に問題が発生する方が多いため、ここにまとめます。それでも解決しない場合は、グループに参加して万能なメンバーに質問してください。&lt;/p&gt;
&lt;h2 id=&#34;認証コードが表示されない&#34;&gt;認証コードが表示されない&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;サーバーがGDグラフィックライブラリをサポートしているか確認してください。&lt;/li&gt;
&lt;li&gt;サーバーのWEB環境を確認してください。&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;Apache：プログラムがサブディレクトリにインストールされている場合、プログラムのルートディレクトリにある&lt;code&gt;.htaccess&lt;/code&gt;ファイルを変更してください。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;lt;IfModule mod_rewrite.c&amp;gt;
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
Rewritebase /あなたのサブディレクトリ名/index.php
RewriteRule ^(.*)$ /あなたのサブディレクトリ名/index.php?/$1 [L]
&lt;/IfModule&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Nginx：設定ファイル&lt;code&gt;nginx-conf&lt;/code&gt;を見つけ、&lt;code&gt;location /&lt;/code&gt;セクションに以下の内容を追加・変更してください。&lt;/li&gt;
&lt;/ul&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;try_files $uri $uri/ /index.php?$query_string;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;またはこちら&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;if (!-d $request_filename){
    set $rule_0 1$rule_0;
}
if (!-f $request_filename){
    set $rule_0 2$rule_0;
}
if ($rule_0 = &amp;#34;21&amp;#34;){
    rewrite ^/(.*)$ /index.php?/$1 last;
}
&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;IISのURLリライトはApacheと同様です。&lt;/li&gt;
&lt;li&gt;宝塔パネル（BT Panel）を使用している場合は、既存のthinkPHPのURLリライト設定を使用してください。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;メール送信の失敗&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;まず、ポート25がブロックされていないか確認してください。ブロックされている場合は、ホスティングプロバイダーに有効化を依頼してください（有効化できない場合はサーバーを変更してください）。&lt;/li&gt;
&lt;li&gt;登録時の認証をオフにするか、次のバージョンの更新をお待ちください（注：ポートの変更は無意味です。ポート465はSSLサポートが必要です）。&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;データインターフェースの異常&#34;&gt;データインターフェースの異常&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;URLリライトのリダイレクトに失敗しています。上記を参考にもう一度設定してください。&lt;/li&gt;
&lt;li&gt;Nginxサーバーの場合、&lt;code&gt;/framework/core/Framework.php&lt;/code&gt;の51行目から53行目をコメントアウトまたは削除してください。具体的なコードは以下の通りです（通常、この問題はApacheサーバーでは発生せず、Nginxサーバーでのみ発生します）。&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-php&#34; data-lang=&#34;php&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; ($path &lt;span style=&#34;color:#f92672&#34;&gt;!=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;&amp;#39;&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     $path &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;strstr&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;trim&lt;/span&gt;($_SERVER[&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;REQUEST_URI&amp;#39;&lt;/span&gt;],&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;/&amp;#39;&lt;/span&gt;),$path);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;画像のアップロード失敗&#34;&gt;画像のアップロード失敗&lt;/h2&gt;
&lt;p&gt;アップロード失敗時のヒント：アップロード中にちょっとした問題が発生しました。コントローラーを開いて原因を確認してください！&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;新浪（Sina）のアカウントとパスワードが正しいか確認してください。&lt;/li&gt;
&lt;li&gt;一度、手動でウェブ版の新浪微博（Sina Weibo）にログインしてください。&lt;/li&gt;
&lt;li&gt;新浪アカウントに微博を投稿する権限があるか確認してください。&lt;/li&gt;
&lt;li&gt;設定が成功した後は、新浪のいかなるプラットフォームにもログインしないでください（サブアカウントの使用を推奨します）。&lt;/li&gt;
&lt;li&gt;ここで新浪のサブアカウントを購入できます：&lt;a href=&#34;https://pay.52ecy.cn&#34;&gt;萌音发卡&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;アップロード画像のサイズ&#34;&gt;アップロード画像のサイズ&lt;/h2&gt;
&lt;p&gt;新浪の制限以外に、画像のアップロードはサーバーの設定にも依存します。&lt;/p&gt;</description>
    </item>
    <item>
      <title>軽量 新浪画像アップローダー 幻想領域1.0 リリース</title>
      <link>https://en.moejue.cn/ja/posts/61/</link>
      <pubDate>Thu, 08 Mar 2018 02:20:59 +0000</pubDate>
      <guid>https://en.moejue.cn/ja/posts/61/</guid>
      <description>&lt;h1 id=&#34;幻想領域&#34;&gt;幻想領域&lt;/h1&gt;
&lt;p&gt;やったー、ついに自分専用の画像アップローダーが手に入りました。
幻想領域は、PHP言語で開発された軽量なSina画像アップローダーシステムです。
その誕生は最終的な解決策ではなく、開発の目的は自分自身の利便性のためです。
&lt;a href=&#34;https://img.52ecy.cn/&#34;&gt;プロジェクトホームページ&lt;/a&gt;
&lt;a href=&#34;https://github.com/178146582/Fantasy-field&#34;&gt;プロジェクトアドレス&lt;/a&gt;&lt;/p&gt;
&lt;h1 id=&#34;システム紹介&#34;&gt;システム紹介&lt;/h1&gt;
&lt;p&gt;幻想領域では、画像アップローダーの画像はすべてSina Cloudにホストされており、各画像には複数の異なるレベルのサムネイルがあります。これが幻想領域の最大の特徴の一つです。
比較的完成されたユーザーシステムと管理者システムを備えています。管理者はバックエンドで完全な権限を持ち、ウェブサイトのすべての基本設定を行うことができます。
「マイギャラリー」には、ユーザーがアップロードしたすべての画像が一覧表示され、管理者はシステムがホストするすべての画像を閲覧できます。ここでは画像を削除、プレビュー、またはコピーできますが、削除しても本システムに表示されなくなるだけで、画像自体はSina上に残ることをご承知おきください。
「探索」は、フロントエンドでのユーザー画像プレビュー機能です。ここでは、必要なものを見つけることができます。不要な場合は、バックエンドで設定をオフにできます。
Sina画像アップローダーへのアップロードには要件がないわけではありません。ログイン認証が必要ですが、当システムは拡張機能に依存しない独立したSinaログインプログラムを備えており、認証コードも不要で、Cookieの有効期限が切れると自動的にログインします。これにより、あらゆる心配事を解消します。したがって、正常に使用するにはバックエンドでSinaアカウントのパスワードを設定する必要があります。&lt;/p&gt;
&lt;h1 id=&#34;ダウンロード&#34;&gt;ダウンロード&lt;/h1&gt;
&lt;p&gt;最新正式版&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://codeload.github.com/178146582/Fantasy-field/zip/master&#34;&gt;今すぐダウンロード&lt;/a&gt;&lt;/p&gt;
&lt;h1 id=&#34;インストール&#34;&gt;インストール&lt;/h1&gt;
&lt;p&gt;幻想領域のソースコードを解凍し、ウェブサイトのルートディレクトリにアップロードする必要があります。ウェブサイトのドメインにアクセスすると、自動的にインストールプログラムにリダイレクトされますので、ウィザードの指示に従ってインストールしてください。リダイレクトされない場合は、手動で http://あなたのドメイン/install.php にアクセスしてインストールしてください。
初回インストール成功後、画像アップローダーを使用するには、管理者バックエンドにログインして基本的な設定を行う必要があります。
バックエンドアドレス：http://あなたのドメイン/admin しかし皮肉なことに、フロントエンドでログインする必要があります。&lt;/p&gt;
&lt;h4 id=&#34;環境サポート&#34;&gt;環境サポート&lt;/h4&gt;
&lt;p&gt;ご注意ください、幻想領域はバージョン1.0以降、PHPバージョン5.6以上のみをサポートしています。PHPバージョンを更新してください。&lt;/p&gt;
&lt;h1 id=&#34;更新予告&#34;&gt;更新予告&lt;/h1&gt;
&lt;p&gt;フロントエンドの独立した画像プレビューインターフェース
ワンクリックでHTML、BBSなどのコードを生成
人気、検索、ランダム、カテゴリなどの機能
短縮URLシステムの統合
&amp;hellip;&amp;hellip;&amp;hellip;など
これらはすべて将来のバージョンでサポートされる予定です。
より良い提案や意見、またはバグのフィードバックがありましたら、ここにメッセージを残すか、admin@52ecy.cn までメールを送信してください。&lt;/p&gt;
&lt;h1 id=&#34;ライセンス-faq&#34;&gt;ライセンス FAQ&lt;/h1&gt;
&lt;p&gt;幻想領域の非商用バージョンは、GPLライセンスおよび関連条項に従ってリリースされており、以下の点にまとめられます。&lt;/p&gt;
&lt;h2 id=&#34;遵守事項&#34;&gt;遵守事項：&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;GPL V3ライセンスを、あなたが変更しオープンソース化したバージョンに含めること。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;与えられる権利&#34;&gt;与えられる権利：&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;幻想領域を自由にダウンロードして使用すること&lt;/li&gt;
&lt;li&gt;幻想領域を新しいオープンソースプロジェクトに含めること&lt;/li&gt;
&lt;li&gt;ソースコードを変更すること&lt;/li&gt;
&lt;li&gt;幻想領域の&lt;strong&gt;オリジナル版&lt;/strong&gt;を配布すること&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;禁止事項&#34;&gt;禁止事項：&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;商業目的で幻想領域を使用すること&lt;/li&gt;
&lt;li&gt;プログラムの著作権情報を削除または改ざんすること&lt;/li&gt;
&lt;li&gt;商業目的でオリジナル版または二次変更版を独占販売、販売すること&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&#34;画面プレビュー&#34;&gt;画面プレビュー&lt;/h1&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1pgy1fp4ju7716lj30lr0s8gmj.jpg&#34;&gt;
&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1pgy1fp4ju7bjjzj30kc09vglo.jpg&#34;&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1ply1fp4ju6keewj30zm0mpwge.jpg&#34;&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1pgy1fp4ju7fu8gj31200mpn0a.jpg&#34;&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1ply1fp4ju7rr0hj31200mp76q.jpg&#34;&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1ply1fp4jtxb9bsj31200mpq76&#34;&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1pgy1fp4ju6yg11j30xe0mp102.jpg&#34;&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>ランダム二次元画像API第二弾</title>
      <link>https://en.moejue.cn/ja/posts/60/</link>
      <pubDate>Sun, 04 Mar 2018 11:01:46 +0000</pubDate>
      <guid>https://en.moejue.cn/ja/posts/60/</guid>
      <description>&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1pgy1fqeqjtrbj1j30tn0lrhdt.jpg&#34;&gt;&lt;br&gt;
約3ヶ月ぶり、最初のランダム二次元画像APIの公開からかなりの時間が経ちました。&lt;br&gt;
第二弾API、突然の登場です。&lt;/p&gt;
&lt;h2 id=&#34;更新内容&#34;&gt;更新内容：&lt;/h2&gt;
&lt;p&gt;前バージョンと比較して、今回の画像は、背景画像やデスクトップ壁紙などにより適しています。&lt;br&gt;
前バージョンはまさに寄せ集めで、あらゆる種類の画像があり、ひどいものでした（私自身も使っていません）。今回のバージョンでは、時間をかけて一部の画像（1080P以上）を選別し、新浪雲にアップロードしました。&lt;br&gt;
真の意味でHTTPSをサポートし、画像はすべて新浪雲でホストされており、速度も向上しました。&lt;br&gt;
あらゆる意味でのパラメータ設定を削除しました。&lt;br&gt;
画像コンテンツはすべてアニメ・二次元画像です（全年齢向け（笑））。&lt;/p&gt;
&lt;h2 id=&#34;apiエンドポイント&#34;&gt;APIエンドポイント：&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://random.52ecy.cn/randbg.php&#34;&gt;https://random.52ecy.cn/randbg.php&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;はい、呼び出しはこれほど簡単です。直接アクセスするだけで利用できます。どうぞお試しください。&lt;br&gt;
&lt;a href=&#34;https://www.52ecy.cn/post-56.html&#34;&gt;以前の簡易版&lt;/a&gt;&lt;br&gt;
&lt;a href=&#34;https://random.52ecy.cn/&#34;&gt;プロジェクトホームページ&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;ランダムアニメ壁紙、毎日更新して、毎回違う画像を楽しめます。&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://random.52ecy.cn/&#34;&gt;&lt;br&gt;
&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>.htaccessを利用してサブドメインをサブディレクトリに紐付ける</title>
      <link>https://en.moejue.cn/ja/posts/58/</link>
      <pubDate>Mon, 22 Jan 2018 01:18:11 +0000</pubDate>
      <guid>https://en.moejue.cn/ja/posts/58/</guid>
      <description>&lt;p&gt;通常、1つの仮想ホストでは、ルートディレクトリにバインドできるドメインは1つだけです。
emlogを使用したことがある方なら、その静的リンク（パーマリンク）についてよくご存知のはずです。これは、.htaccessファイルを利用してウェブページをドメインリダイレクトする典型的な例です。
.htaccessを利用してドメインをサブディレクトリにバインドするには、前提として、お使いのホスティングサーバーがApacheのrewrite機能をサポートしている必要があります。そうでなければ.htaccessは使用できません。もしお使いのサーバーがLinuxサーバーであれば、通常はデフォルトで有効になっています。これにより、ドメインのサブディレクトリへのバインドや、1つのホスティングスペースで複数のサイトを運営することが可能になります。&lt;/p&gt;
&lt;p&gt;以下は、&lt;code&gt;link.52ecy.cn&lt;/code&gt; をサブディレクトリ &lt;code&gt;link&lt;/code&gt; にバインドする例の.htaccessコードです。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-apache&#34; data-lang=&#34;apache&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;IfModule&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;mod_rewrite.c&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;RewriteEngine &lt;span style=&#34;color:#66d9ef&#34;&gt;On&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;RewriteBase /  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# link.52ecy.cn をサブディレクトリ link にバインド&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;RewriteCond %{HTTP_HOST} ^link\.52ecy\.cn$ [NC]  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;RewriteCond %{REQUEST_URI} !^/link/  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;RewriteRule ^(.*)$ link/$1?Rewrite [L,QSA]  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 複数バインド可能。上の3行を繰り返し、ドメイン名とディレクトリ名を変更するだけです&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;/IfModule&amp;gt;&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;上記の手順を完了すると、サブドメインにアクセスできるようになるはずです。しかし、ブラウザで「メインドメイン + バインドしたディレクトリ」にアクセスしても表示されることに気づくでしょう。これは我々が望む動作ではありません。
次に、最後のステップを完了させます。バインドした各ディレクトリ（例えば&lt;code&gt;link&lt;/code&gt;ディレクトリ）にも、.htaccessファイルを追加します。
.htaccessのコードは以下の通りです。&lt;/p&gt;
&lt;p&gt;以下は、&lt;code&gt;music.xmgho.com&lt;/code&gt; をサブディレクトリ &lt;code&gt;music&lt;/code&gt; にバインドする例の.htaccessコードです。
これにより、ドメインのサブディレクトリへのバインドや、1つのホスティングスペースで複数のサイトを運営することが可能になります。これにより、ドメインのサブディレクトリへのバインドや、1つのホスティングスペースで複数のサイトを運営することが可能になります。これにより、ドメインのサブディレクトリへのバインドや、1つのホスティングスペースで複数のサイトを運営することが可能になります。これにより、ドメインのサブディレクトリへのバインドや、1つのホスティングスペースで複数のサイトを運営することが可能になります。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-apache&#34; data-lang=&#34;apache&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;IfModule&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;mod_rewrite.c&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;RewriteEngine &lt;span style=&#34;color:#66d9ef&#34;&gt;On&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;RewriteBase /  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# バインドしたドメインからのアクセスのみを許可&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;RewriteCond %{HTTP_HOST} !^link\.52ecy\.cn$ [NC]  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;RewriteRule (.*) http://link.52ecy.cn/$1 [L,R=301]  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# バインドしたディレクトリ内の同名ディレクトリの処理&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;RewriteCond %{REQUEST_URI} ^\&lt;span style=&#34;color:#e6db74&#34;&gt;/link&lt;/span&gt;\/ [NC]  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;RewriteCond %{QUERY_STRING} !^(.*)?Rewrite  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;RewriteRule ^(.*)$ /%{REQUEST_URI}/%{REQUEST_URI}/$1?Rewrite [L,QSA]  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;/IfModule&amp;gt;&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;結び：
私のサーバー自体がサブドメインのサブディレクトリへのバインドをサポートしているため、自分ではテストできませんでした。しかし、友人にAlibaba Cloud（阿里云）のホストでテストしてもらったところ、成功しました。ただし、Alibaba Cloudには数量制限があり、多数バインドするとルートディレクトリにリダイレクトされるようです。このことから、すべてのホスティングプロバイダーがこの方法をサポートしているわけではないようで、ご自身でテストして確認する必要があります。
最後に、最も重要な点は、ドメインが正しく名前解決されていなければ意味がないということです[苦笑～]&lt;/p&gt;</description>
    </item>
    <item>
      <title>あなたのブログにLive2D看板娘を設置しよう</title>
      <link>https://en.moejue.cn/ja/posts/2/</link>
      <pubDate>Sun, 24 Dec 2017 10:14:22 +0000</pubDate>
      <guid>https://en.moejue.cn/ja/posts/2/</guid>
      <description>&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1pgy1fqer4e0f8bj30nw0kkqos.jpg&#34;&gt;
先日、多くの人のブログでLive2Dの看板娘を見かけ、とても興味を持ちました！そこで、自分のブログにも追加するために、関連チュートリアルをいくつか調べました。&lt;/p&gt;
&lt;h2 id=&#34;はじめに&#34;&gt;はじめに&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;Live2Dは最先端の技術ではありません。その効果は、基本的な平行移動、回転、透明度、曲面変形などの操作によって実現されます。最終的な効果はテクスチャに大きく依存し、各動作は制作者による綿密な調整が必要です。これは膨大な時間と労力を要するプロセスであるため、質の良いモデルは多くなく、質の良いものは通常ゲーム内にあり、著作権で保護されているため、自由に使用することはできません。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;本記事で使用されているモデルは、&lt;a href=&#34;https://play.google.com/store/apps/details?id=com.sinsiroad.potionmaker&amp;amp;hl=zh_CN&#34; title=&#34;薬水制作师&#34;&gt;薬水制作师&lt;/a&gt;というモバイルゲームから解包されたものであり、著作権は公式に帰属します。（そうです、私もこのゲームを宣伝しに来ました）&lt;/p&gt;
&lt;h2 id=&#34;準備作業&#34;&gt;準備作業&lt;/h2&gt;
&lt;p&gt;「魚を与えるよりも、魚の釣り方を教える方が良い」とは言いますが、この魚は釣るのが難しいので、おとなしく小さな椅子に座って、釣られた魚を食べる側に回りましょう！
以下のコードは、私が&lt;a href=&#34;https://haremu.com/p/205&#34;&gt;後宫学长&lt;/a&gt;から堂々と盗んできた魚を調理したものです。&lt;/p&gt;
&lt;p&gt;まずは私の&lt;a href=&#34;https://github.com/178146582/live2d&#34; title=&#34;Github&#34;&gt;Github&lt;/a&gt;へ行き、私が再度整理したLive2Dのコード（二人の動作と初期の3種類のテクスチャを含む）をダウンロードしてください。やはり調理済みのものが美味しいですからね〜。&lt;/p&gt;
&lt;p&gt;ダウンロード後、コードを解凍してブログサイトのルートディレクトリに配置します。（ディレクトリの位置は自由に設定できます）&lt;/p&gt;
&lt;p&gt;そして、解凍したフォルダの名前を「live2d」に変更します。（名前は何でも構いませんが、見栄えが最も重要です）
（少女は盲目的に分析中）
&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1ply1fqer55sg1mj30sj0jkjyh.jpg&#34;&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1ply1fqerbwulp3j30sh0jkqa4.jpg&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;使用方法&#34;&gt;使用方法&lt;/h2&gt;
&lt;p&gt;それでは、食べ方を教えましょう、いや、本当に食べ始めるわけではありませんが。&lt;/p&gt;
&lt;p&gt;ブログのヘッダーファイル（header.php）でインターフェーススタイルを読み込むために、&lt;code&gt;head&lt;/code&gt;タグ内に以下のコードを挿入します。&lt;/p&gt;
&lt;link rel=&#34;stylesheet&#34; href=&#34;https://en.moejue.cn/live2d/css/live2d.css&#34; /&gt;
&lt;p&gt;ブログのフッターファイル（footer.php）でスクリプトを読み込むために、&lt;code&gt;body&lt;/code&gt;タグの終了前に以下のコードを挿入します。&lt;/p&gt;
&lt;script type=&#34;text/javascript&#34;&gt;
    var message\_Path = &#39;/live2d/&#39;
    var home\_Path = &#39;https://www.52ecy.cn/&#39;  
&lt;/script&gt;
&lt;script type=&#34;text/javascript&#34; src=&#34;https://en.moejue.cn/live2d/js/live2d.js&#34;&gt;&lt;/script&gt;
&lt;script type=&#34;text/javascript&#34; src=&#34;https://en.moejue.cn/live2d/js/message.js&#34;&gt;&lt;/script&gt;
&lt;script type=&#34;text/javascript&#34;&gt;
    loadlive2d(&#34;live2d&#34;, &#34;/live2d/model/tia/model.json&#34;);
&lt;/script&gt;
&lt;p&gt;上記のコードで絶対パスを使用する際に注意すべき問題があります。
私のブログ&lt;code&gt;www.52ecy.cn&lt;/code&gt;と&lt;code&gt;52ecy.cn&lt;/code&gt;はどちらもアクセス可能ですが、参照時に&lt;code&gt;www&lt;/code&gt;を使用すると、&lt;code&gt;www.52ecy.cn&lt;/code&gt;にアクセスする際には問題ありませんが、&lt;code&gt;52ecy.cn&lt;/code&gt;に直接アクセスすると、クロスドメイン問題（サブドメインが異なる場合もクロスドメインに該当）によりjsonが読み込めなくなり、看板娘が表示されなくなります。
以下のコードに変更できます（キャラクターの切り替えも、対応するフォルダ名に変更するだけで済みます）。&lt;/p&gt;
&lt;script type=&#34;text/javascript&#34;&gt;
    loadlive2d(&#34;live2d&#34;, &#34;&lt;?php echo &#39;http://&#39;.$\_SERVER\[&#39;HTTP\_HOST&#39;\].&#39;/&#39;; ?&gt;live2d/model/Pio/model.json&#34;);
&lt;/script&gt;
&lt;p&gt;適切なページ位置にLive2D看板娘の要素を挿入します。ページ下部に配置できます。&lt;/p&gt;
&lt;div id=&#34;landlord&#34;&gt;
    &lt;div class=&#34;message&#34; style=&#34;opacity:0&#34;&gt;&lt;/div&gt;
    &lt;canvas id=&#34;live2d&#34; width=&#34;280&#34; height=&#34;250&#34; class=&#34;live2d&#34;&gt;&lt;/canvas&gt;
&lt;/div&gt;
&lt;p&gt;マウスをページの特定の要素に置いたときに、Live2D看板娘にヒントを表示させたい場合は、&lt;code&gt;message.json&lt;/code&gt;ファイルを変更してください。&lt;/p&gt;
&lt;p&gt;{
&amp;ldquo;mouseover&amp;rdquo;: [
{
&amp;ldquo;selector&amp;rdquo;: &amp;ldquo;.container a[href^=&amp;lsquo;http&amp;rsquo;]&amp;rdquo;,  // ここをページ要素のタグ名に変更
&amp;ldquo;text&amp;rdquo;: [&amp;quot;{text}を見てみますか？&amp;quot;]  // ここを必要なヒントのテキストに変更
},
{
&amp;ldquo;selector&amp;rdquo;: &amp;ldquo;.navto-search&amp;rdquo;,
&amp;ldquo;text&amp;rdquo;: [&amp;ldquo;何かお探しですか、お手伝いしましょうか？&amp;rdquo;]
}
],
&amp;ldquo;click&amp;rdquo;: [  // ここはLive2D看板娘のタッチイベントのヒント
{
&amp;ldquo;selector&amp;rdquo;: &amp;ldquo;#landlord #live2d&amp;rdquo;,
&amp;ldquo;text&amp;rdquo;: [&amp;ldquo;触らないで！手をどけて〜〜&amp;rdquo;, &amp;ldquo;ほ…本当に恥知らず！&amp;rdquo;, &amp;ldquo;これ以上触ったら通報しますよ！⌇●﹏●⌇&amp;rdquo;, &amp;ldquo;110番ですか、ここに変態がずっと私を触っています(ó﹏ò｡)&amp;rdquo;]
}
]
}&lt;/p&gt;</description>
    </item>
    <item>
      <title>ランダム二次元画像API公開</title>
      <link>https://en.moejue.cn/ja/posts/52/</link>
      <pubDate>Wed, 06 Dec 2017 14:52:50 +0000</pubDate>
      <guid>https://en.moejue.cn/ja/posts/52/</guid>
      <description>&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1pgy1fqjcwlvnqzj30y40lnjzu.jpg&#34;&gt;&lt;br&gt;
&lt;a href=&#34;https://www.52ecy.cn/randbg&#34;&gt;ランダム二次元画像API公開 —— ランダムアニメ壁紙、毎日更新、毎回違う。&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;apiアドレス&#34;&gt;APIアドレス：&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.52ecy.cn/randbg/randbg.php&#34;&gt;https://www.52ecy.cn/randbg/randbg.php&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;リクエストパラメータの説明&#34;&gt;リクエストパラメータの説明：&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;名称&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;説明&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;type(オプション)&lt;/p&gt;
&lt;p&gt;json：標準のjsonデータ(画像アドレス)を返します&lt;br&gt;
302：画像アドレスにリダイレクトします(HTML画像挿入時に必ず使用してください)&lt;/p&gt;
&lt;p&gt;total(オプション)&lt;/p&gt;
&lt;p&gt;1-10 返される画像の数(jsonデータの場合のみ有効、最大10枚)&lt;/p&gt;
&lt;p&gt;style(オプション)&lt;/p&gt;
&lt;p&gt;1/2/3 返される画像のタイプ、&lt;br&gt;
1：webpサムネイル、&lt;br&gt;
2：jpgサムネイル、&lt;br&gt;
3：ウォーターマークなしのオリジナル画像、その他はすべてウォーターマーク付きのオリジナル画像&lt;/p&gt;
&lt;p&gt;https(オプション)&lt;/p&gt;
&lt;p&gt;true/false、返される画像アドレスがhttps形式であるかどうか(現在https証明書は未検証状態のため、httpの使用を推奨します)&lt;/p&gt;
&lt;h2 id=&#34;標準のjsonデータを返す&#34;&gt;標準のjsonデータを返す&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;total&amp;#34;&lt;/span&gt;:&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;1&amp;#34;&lt;/span&gt;,  &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#画像の数&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;img&amp;#34;&lt;/span&gt;:&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;http://www.52ecy.cn/randbg.png&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#画像アドレス&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;呼び出し例&#34;&gt;呼び出し例&lt;/h2&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;background: url(http://www.52ecy.cn/randbg/randbg.php?type=302&amp;amp;style=3) no-repeat center;
&lt;/code&gt;&lt;/pre&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-html&#34; data-lang=&#34;html&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;img&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;src&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;http://www.52ecy.cn/randbg/randbg.php?type=302&amp;amp;style=3&amp;#34;&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;ウェブサイトでの呼び出しは、ウェブページのHTMLタグの呼び出し、動的言語の読み込み、アプリ内ウェブページの読み込みなどを含みますが、これらに限定されません。&lt;/p&gt;
&lt;h2 id=&#34;利用制限&#34;&gt;利用制限&lt;/h2&gt;
&lt;p&gt;APIは公開されたばかりで、オープンベータ段階にあるため、インターフェースの呼び出しに制限は設けていません。将来的に不可抗力な要因が発生した場合、インターフェースに制限を設けたり、他の対策を講じたりする可能性がありますので、ご了承ください。&lt;/p&gt;
&lt;h2 id=&#34;著作権およびプライバシーに関する声明&#34;&gt;著作権およびプライバシーに関する声明&lt;/h2&gt;
&lt;p&gt;阿珏ブログの二次元画像ランダムAPIを使用すると、関連するウェブサイト、IP、呼び出し元、呼び出し回数、呼び出し時間、トラフィックなどのデータが記録される場合があります。本APIの使用は本規約に同意したものとみなされます。当サイトは阿珏ブログのランダム二次元画像APIに対する最終的な解釈権を有し、特定の状況下では、阿珏ブログがあなたのウェブサイトからの呼び出しを禁止する権利を有します。&lt;/p&gt;</description>
    </item>
    <item>
      <title>ミニマルブログV1.1が公開されました &#43; 新しいテーマセット</title>
      <link>https://en.moejue.cn/ja/posts/51/</link>
      <pubDate>Thu, 30 Nov 2017 09:50:53 +0000</pubDate>
      <guid>https://en.moejue.cn/ja/posts/51/</guid>
      <description>&lt;h4 id=&#34;2ヶ月ぶりにミニマリストブログシステムが初のアップデートを迎えましたそして全く新しいテーマをもたらします&#34;&gt;2ヶ月ぶりに、ミニマリストブログシステムが初のアップデートを迎えました。そして、全く新しいテーマをもたらします。&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;デフォルトテーマの関連バグを修正&lt;/li&gt;
&lt;li&gt;バックエンドの関連詳細を修正&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href=&#34;https://blog.52ecy.cn/?mr&#34;&gt;デフォルトテーマのプレビューはこちら&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://blog.52ecy.cn/?post=2&#34;&gt;ミニマリストブログ1.0バージョン&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;2345截图20171130165426.png&#34; loading=&#34;lazy&#34; src=&#34;https://blog.52ecy.cn/content/upload/dd8fc833fd4081b914c71bfabe90e383.png&#34;&gt;&lt;/p&gt;
&lt;h1 id=&#34;バックエンドのseo設定機能を改善しました&#34;&gt;バックエンドのSEO設定機能を改善しました&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;疑似静的URLに対応&lt;/li&gt;
&lt;li&gt;HTTPS強制アクセスを設定&lt;/li&gt;
&lt;li&gt;メタ情報の変更&lt;/li&gt;
&lt;li&gt;ブラウザでの記事タイトル表示方法&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt=&#34;2345截图20171130170102.png&#34; loading=&#34;lazy&#34; src=&#34;https://blog.52ecy.cn/content/upload/162f36fb4789bf17037cfe255e71162f.png&#34;&gt;&lt;/p&gt;
&lt;h1 id=&#34;さてここからが本番です&#34;&gt;さて、ここからが本番です&lt;/h1&gt;
&lt;h4 id=&#34;全く新しいテーマファイル仮称dimension-次元&#34;&gt;全く新しいテーマファイル、仮称：&lt;a href=&#34;https://blog.52ecy.cn/?post=4&#34;&gt;Dimension&lt;/a&gt; (次元)&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;全エフェクトテーマテンプレート&lt;/li&gt;
&lt;li&gt;コメントボックスに顔文字を追加&lt;/li&gt;
&lt;li&gt;サイドバーを削除&lt;/li&gt;
&lt;li&gt;スクロールでトップに戻る機能を追加&lt;/li&gt;
&lt;li&gt;そして様々なエフェクト、ご自身で発見してください&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt=&#34;2345截图20171130171112.png&#34; loading=&#34;lazy&#34; src=&#34;https://blog.52ecy.cn/content/upload/96483994ba1b2d33ac479461d841ae0f.png&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;カバー画像はラブライブ---μs石鹸ではありません-ラブライブテーマ&#34;&gt;カバー画像はラブライブ！ - μ&amp;rsquo;s、石鹸ではありません (ラブライブ！テーマ？)&lt;/h3&gt;
&lt;p&gt;&lt;img alt=&#34;2345截图20171130171855.png&#34; loading=&#34;lazy&#34; src=&#34;https://blog.52ecy.cn/content/upload/b0b49664b4728ba41a19c226b9c60ef8.png&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;記事のトップページ表示と記事の詳細ページはインスピレーションを失ったため実際は怠惰のためデフォルトテーマのスタイルを採用しました&#34;&gt;記事のトップページ表示と記事の詳細ページは、インスピレーションを失ったため（実際は怠惰のため）、デフォルトテーマのスタイルを採用しました。&lt;/h3&gt;
&lt;h4 id=&#34;ええとだいたいこんな感じです細かい問題は使用中に少しずつ修正していきます&#34;&gt;ええと、だいたいこんな感じです。細かい問題は使用中に少しずつ修正していきます~~&lt;/h4&gt;</description>
    </item>
    <item>
      <title>萌え二次元 - 図鑑クライアントリリース</title>
      <link>https://en.moejue.cn/ja/posts/46/</link>
      <pubDate>Thu, 12 Oct 2017 02:44:18 +0000</pubDate>
      <guid>https://en.moejue.cn/ja/posts/46/</guid>
      <description>&lt;p&gt;萌化二次元 - あなたの二次元を萌え化&lt;/p&gt;
&lt;p&gt;ソフトウェアサイズ：1.08MB ソフトウェア言語：簡体字中国語 ソフトウェアタイプ：オリジナルソフトウェア
ソフトウェアカテゴリ：二次元系 更新日時：2017-10-12
ソフトウェアライセンス：無料版 動作環境：XP/Win7/Win8/Win10&lt;/p&gt;
&lt;p&gt;ソフトウェア紹介
萌化二次元ソフトウェアは、私のギャラリーのクライアントバージョンです。 &lt;a href=&#34;http://www.52ecy.cn/gallery&#34;&gt;ポータル
&lt;/a&gt;ローカルへの画像ダウンロード、ワンクリックでの壁紙設定に対応しています。高画質・透かしなしの独自インターフェースを提供します。
ダウンロードの際は、「概要」のヒントにご注意ください。
当初は複数のナビゲーション、ログイン機能、開発者モードをサポートする設計でしたが、後に手間がかかることと、そこまで多くの機能が必要ないことから廃止されました。
&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1pgy1fqi9nkbe5kj30q70i2qay.jpg&#34;&gt;
.down_link{background:url(&amp;lsquo;&lt;a href=&#34;https://www.52ecy.cn/content/uploadfile/201707/md-bg.jpeg%27&#34;&gt;https://www.52ecy.cn/content/uploadfile/201707/md-bg.jpeg&#39;&lt;/a&gt;) no-repeat 100% 0% #fffdff; border: 1px solid #faf8fb; border-radius: 2px; color: #666; font-size: 14px; margin-bottom: 10px; padding: 5px 20px;}.downbtn{background: none repeat scroll 0 0 #1BA1E2; border: 0 none; border-radius: 2px; color: #FFFFFF; cursor: pointer; font-family: &amp;ldquo;Open Sans&amp;rdquo;,&amp;ldquo;Hiragino Sans GB&amp;rdquo;,&amp;ldquo;Microsoft YaHei&amp;rdquo;,&amp;ldquo;WenQuanYi Micro Hei&amp;rdquo;,Arial,Verdana,Tahoma,sans-serif; font-size: 14px; margin: -4px 20px 0 0; padding: 8px 30px;text-transform:none;text-decoration:none;} .downlink a{text-decoration:none;} .downlink a{text-decoration:none;font-size:15px;} .downlink a:link{color: #ffffff;} .downlink a:visited{color: #ffffff;} .downlink a:hover{color: #ffffff;} .downlink a:active{color: #ffffff;} .downbtn{background: none repeat scroll 0 0 #1BA1E2; border: 0 none; border-radius: 2px; color: #FFFFFF !important; cursor: pointer; font-family: &amp;ldquo;Open Sans&amp;rdquo;,&amp;ldquo;Hiragino Sans GB&amp;rdquo;,&amp;ldquo;Microsoft YaHei&amp;rdquo;,&amp;ldquo;WenQuanYi Micro Hei&amp;rdquo;,Arial,Verdana,Tahoma,sans-serif; font-size: 14px; margin: -4px 20px 0 0; padding: 8px 30px;} .yanshibtn{background: none repeat scroll 0 0 #d33431; border: 0 none; border-radius: 2px; color: #FFFFFF!important; cursor: pointer; font-family: &amp;ldquo;Open Sans&amp;rdquo;,&amp;ldquo;Hiragino Sans GB&amp;rdquo;,&amp;ldquo;Microsoft YaHei&amp;rdquo;,&amp;ldquo;WenQuanYi Micro Hei&amp;rdquo;,Arial,Verdana,Tahoma,sans-serif; font-size: 14px; margin: -4px 20px 0 0; padding: 8px 30px;text-transform:none;text-decoration:none;} .downbtn:hover,.yanshibtn:hover{background: none repeat scroll 0 0 #9B59B6; border: 0 none; border-radius: 2px; color: #FFFFFF!important; cursor: pointer; font-family: &amp;ldquo;Open Sans&amp;rdquo;,&amp;ldquo;Hiragino Sans GB&amp;rdquo;,&amp;ldquo;Microsoft YaHei&amp;rdquo;,&amp;ldquo;WenQuanYi Micro Hei&amp;rdquo;,Arial,Verdana,Tahoma,sans-serif; font-size: 14px; margin: -4px 20px 0 0; padding: 8px 30px;} .downbtn a:hover,.yanshibtn a:hover{background: none repeat scroll 0 0 #9B59B6; border: 0 none; border-radius: 2px; color: #FFFFFF; cursor: pointer; font-family: &amp;ldquo;Open Sans&amp;rdquo;,&amp;ldquo;Hiragino Sans GB&amp;rdquo;,&amp;ldquo;Microsoft YaHei&amp;rdquo;,&amp;ldquo;WenQuanYi Micro Hei&amp;rdquo;,Arial,Verdana,Tahoma,sans-serif; font-size: 14px; margin: -4px 20px 0 0; padding: 8px 30px;}&lt;/p&gt;</description>
    </item>
    <item>
      <title>シンプルブログシステム1.0バージョンが完成し、リリースされました。</title>
      <link>https://en.moejue.cn/ja/posts/45/</link>
      <pubDate>Sat, 30 Sep 2017 06:22:28 +0000</pubDate>
      <guid>https://en.moejue.cn/ja/posts/45/</guid>
      <description>&lt;ul&gt;
&lt;li&gt;はじめに&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;いつの間にか、最初の「亜子」のブログシステムからemlog、そして今自分で書いたシンプルなブログシステムまで、忙しくブログを構築して、もう1周年になります。&lt;/p&gt;
&lt;p&gt;自分の第一段階の目標も一段落ついたと言えるでしょう。&lt;/p&gt;
&lt;p&gt;非営利のウェブサイトとして、ただ普段、文章を書いたり、感情を表現したり、おしゃべりしたり、自慢したりする場所として、私はこれからも続けていきたいと思っています。どうせウェブサイトにかかる費用はそれほど大きくありませんから。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;紹介&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;シンプルブログ、それは「シンプルでありながら上品」という意味です。これはPHP言語とMySQLデータベースをベースにした、強力な個人ブログシステム(blog)です。迅速で安定しており、かつ非常にシンプルで快適なブログサービスを提供することを目指しています。インストールも使用も非常に簡単です。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;画面表示&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;管理画面のスタイルはemlog 6.0のレイアウトを模倣して設計されており、Bootstrapフロントエンド開発フレームワークを採用しています。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;シンプルブログ インストール画面&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt=&#34;简约博客安装程序.png&#34; loading=&#34;lazy&#34; src=&#34;https://blog.52ecy.cn/content/upload/f826a94934c6dcb7784b1e2c4a18de95.png&#34;&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;インストール完了&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt=&#34;提示信息.png&#34; loading=&#34;lazy&#34; src=&#34;https://blog.52ecy.cn/content/upload/8e9d4ad075e94b0eff092cccbec75658.png&#34;&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;管理画面トップ&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt=&#34;管理中心.png&#34; loading=&#34;lazy&#34; src=&#34;https://blog.52ecy.cn/content/upload/d9f67401696147740ea67c07b1c2890a.png&#34;&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;記事作成&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt=&#34;写文章.png&#34; loading=&#34;lazy&#34; src=&#34;https://blog.52ecy.cn/content/upload/1087dc1db9d979464f49001a206f47e2.png&#34;&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;記事管理&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt=&#34;文章.png&#34; loading=&#34;lazy&#34; src=&#34;https://blog.52ecy.cn/content/upload/ba8c6ab02ce0001b30ef4d8f2927b19d.png&#34;&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;タグ管理&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt=&#34;标签.png&#34; loading=&#34;lazy&#34; src=&#34;https://blog.52ecy.cn/content/upload/f03464c194170091d9449e8b50d8d5d9.png&#34;&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;カテゴリ管理&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt=&#34;分类.png&#34; loading=&#34;lazy&#34; src=&#34;https://blog.52ecy.cn/content/upload/f8801ddf7ef7d168c8b8eb5d00990c60.png&#34;&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;コメント管理&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt=&#34;评论.png&#34; loading=&#34;lazy&#34; src=&#34;https://blog.52ecy.cn/content/upload/5d2ed7ea9f8f8a03ab20766fd659bac7.png&#34;&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ナビゲーション管理&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt=&#34;导航.png&#34; loading=&#34;lazy&#34; src=&#34;https://blog.52ecy.cn/content/upload/9dbc8933065d25bd415f3b6e604ff8fc.png&#34;&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;外部リンク管理&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt=&#34;用户.png&#34; loading=&#34;lazy&#34; src=&#34;https://blog.52ecy.cn/content/upload/d385956a7b6ba405b830c4ef3cdfed9d.png&#34;&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ユーザー管理&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt=&#34;用户.png&#34; loading=&#34;lazy&#34; src=&#34;https://blog.52ecy.cn/content/upload/be4e494c5908313623d4e72a55f00948.png&#34;&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;テーマ設定&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt=&#34;主题.png&#34; loading=&#34;lazy&#34; src=&#34;https://blog.52ecy.cn/content/upload/ff3146092a45efbd61dcdf2b26a49945.png&#34;&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;システム設定&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt=&#34;设置.png&#34; loading=&#34;lazy&#34; src=&#34;https://blog.52ecy.cn/content/upload/5a5d5b1b5d7a325a25f147acee2278c5.png&#34;&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;個人設定&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt=&#34;个人设置.png&#34; loading=&#34;lazy&#34; src=&#34;https://blog.52ecy.cn/content/upload/953a83d16f54dc939e29e61d2e01e275.png&#34;&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;管理画面ログインページ&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt=&#34;登录.png&#34; loading=&#34;lazy&#34; src=&#34;https://blog.52ecy.cn/content/upload/712b77fc2fc6a0d325442758135908db.png&#34;&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;インストール後のデフォルトスタイル&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt=&#34;简约博客.png&#34; loading=&#34;lazy&#34; src=&#34;https://blog.52ecy.cn/content/upload/0ed2241d98f15f40f73b1c7af3f87a9a.png&#34;&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;モバイルページ、モバイル向けのスタイルは設計されておらず、デフォルトでこのようになります。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt=&#34;手机版.jpg&#34; loading=&#34;lazy&#34; src=&#34;https://blog.52ecy.cn/content/upload/1028e457a49bac2505c9c682f0a79976.png&#34;&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>私の研究室</title>
      <link>https://en.moejue.cn/ja/posts/18/</link>
      <pubDate>Tue, 22 Aug 2017 05:43:46 +0000</pubDate>
      <guid>https://en.moejue.cn/ja/posts/18/</guid>
      <description>&lt;p&gt;私のブログにいつも遊びに来てくれる方は、今日ナビゲーションバーに「ラボ」という新しい項目が追加されたことにお気づきでしょう。
よく達人たちのブログに「ラボ」という項目があるので、私も学習（と見せびらかし）のために作ってみました。
ここには、私が自分でいじくり回したものを置いていきます。&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.52ecy.cn/Comic&#34;&gt;私のアニメの道&lt;/a&gt; (廃止)&lt;/p&gt;
&lt;p&gt;これまで見てきたアニメとその感想を記録するためのものです。
2017年10月11日: このページは廃止することにしました。長い間更新しておらず、主な原因は面倒くさがりだからです。テキストやら画像やら、本当に手間がかかるし、時々画像のURLもリンク切れになります。時間がある時に、もっとシンプルなものを作り直そうと思います。&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://blog.52ecy.cn/&#34;&gt;シンプルブログシステム&lt;/a&gt; (完成済み)
先月、ブログを新しく書こうとつぶやいていました。もっとシンプルで、複雑な機能は必要ないもの、ということでこの「シンプルブログ」という名のブログシステムが誕生しました。
そして今月は全く手をつけていません。来月、時間があれば書くかも（実は面倒なだけですが）。
emlog 6.0のフロントエンドとバックエンドを模倣して作ったテンプレートです。見た目がすっきりしたフロントエンドのテンプレートを2セット作る予定で、大体のデザインはもう考えてありますが、あとは実装するだけです-。-
バックエンドの管理者アカウントとパスワードは両方とも&lt;code&gt;root&lt;/code&gt;です。
&lt;img loading=&#34;lazy&#34; src=&#34;https://blog.52ecy.cn/content/upload/0ed2241d98f15f40f73b1c7af3f87a9a.png&#34;&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>再帰とは何か？</title>
      <link>https://en.moejue.cn/ja/posts/42/</link>
      <pubDate>Wed, 09 Aug 2017 05:45:16 +0000</pubDate>
      <guid>https://en.moejue.cn/ja/posts/42/</guid>
      <description>&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1pgy1fqi9qqzftmj30hs0mwta7.jpg&#34;&gt;
画像はインターネットより&lt;/p&gt;
&lt;p&gt;最初、この文章を読むと、回りくどくて非常に分かりにくいと感じるでしょう。
実は、再帰を使って読むととても簡単になります：
再帰には終点（小さな鯉）が必要です。
再帰が終点に達するまで、関数は自身を繰り返し呼び出します。
明らかに、「私の小さな鯉」というフレーズを出力することが再帰の終了条件です。
これをコードで書くと、次のようになります：&lt;/p&gt;
&lt;p&gt;#include &amp;lt;stdio.h&amp;gt;
void Recursion(int depth){
printf(&amp;ldquo;抱着&amp;rdquo;);
if (!depth) printf(&amp;ldquo;我的小鲤鱼&amp;rdquo;);
else Recursion(&amp;ndash;depth);
printf(&amp;ldquo;的我&amp;rdquo;);
}
int main(){
printf(&amp;ldquo;吓得我抱起了\n&amp;rdquo;);
Recursion(2);
putchar(&amp;rsquo;\n&amp;rsquo;);
}&lt;/p&gt;
&lt;p&gt;私がこれまでに見つけた再帰の最も適切な例えは、辞書を引くことです。私たちが使う辞書自体が再帰的です。一つの単語を説明するために、より多くの単語が必要になります。ある単語を調べて、その説明の中にまだ分からない単語を見つけたとします。すると、あなたはその2番目の単語を調べ始めます。残念ながら、2番目の単語の説明にも分からない単語があり、3番目の単語を調べます。このように調べていき、完全に理解できる説明の単語にたどり着くまで続けます。その時点で再帰は終わりに達し、そこからあなたは後戻りを始め、以前に調べた各単語を一つずつ理解していき、最終的に、最初に調べた単語の意味を理解するのです。。。
&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1pgy1fqi9r8xnwyj30k009et8z.jpg&#34;&gt;
矢印はプログラムの実際の実行ステップを表しています。&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1pgy1fqi9rou9ucj30k00e8jt9.jpg&#34;&gt;
上の多くの回答を見ましたが、そのほとんどが再帰という現象を説明することに偏っており、なぜ再帰を使うのか、再帰の考え方とは一体何なのかについては説明されていません。先日ちょうど関連するものを読んだので、整理してみたいと思います。もし間違いがあれば、ご指摘いただけると幸いです。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;再帰とは何か？&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;1. 定義&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Wiki [1]:&lt;/strong&gt; &lt;strong&gt;Recursion&lt;/strong&gt; is the process of repeating items in a self-similar way.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;コンピュータ科学においては [2]:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;再帰&lt;/strong&gt;（英語：Recursion）、または&lt;strong&gt;遞迴&lt;/strong&gt;とも訳され、数学とコンピュータ科学において、関数の定義の中に関数自身を使用する方法を指します。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;英語のRecursionは語源的に分析すると「re- (再び)」+「curs- (来る、起こる)」であり、つまり繰り返し発生する、再び現れるという意味です。一方、対応する中国語の翻訳「递归」は、「递」（進む）＋「归」（帰る）という2つの意味を表しています。この2つの意味こそが、再帰という考え方の真髄です。この点から見ると、中国語の翻訳の方がかえって意味をよく表していると言えます。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2. ループとの違い&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;上記のWikiの定義だけを見ると、一般的に言われる無限ループと非常によく似ているように見えます。それらの違いは何でしょうか？&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;再帰は静中の動であり、行きと帰りがある。
ループは動静一如であり、行きっぱなしで帰りがない。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;例を挙げましょう。あなたに一本の鍵が与えられ、ドアの前に立っています。この鍵で何枚のドアを開けられるかと尋ねられます。&lt;/p&gt;
&lt;p&gt;再帰：あなたは目の前のドアを開け、部屋の中にもう一つのドアがあるのを見つけます（このドアは前に開けたドアと同じ大きさかもしれません（静）、あるいは少し小さいかもしれません（動））。あなたはそちらへ歩いていき、手の中の鍵でそれも開けられることに気づきます。ドアを押し開けると、中にはまた別のドアがあります。あなたは開け続けます。。。何度か繰り返した後、あるドアを開けると、そこには部屋があるだけで、もうドアはありません。あなたは来た道を戻り始めます。部屋を一つ戻るごとに、数を数えます。入り口まで戻ったとき、あなたはその鍵で一体何枚のドアを開けたのか答えることができます。&lt;/p&gt;
&lt;p&gt;ループ：あなたは目の前のドアを開け、部屋の中にもう一つのドアがあるのを見つけます（このドアは前に開けたドアと同じ大きさかもしれません（静）、あるいは少し小さいかもしれません（動））。あなたはそちらへ歩いていき、手の中の鍵でそれも開けられることに気づきます。ドアを押し開けると、中にはまた別のドアがあります（前のドアが同じなら、このドアも同じ。2番目のドアが1番目のドアより小さくなっていれば、このドアも2番目のドアより小さくなっている（動静一如、変化がないか、同じ変化をする））。あなたはこのドアを開け続けます。。。ずっとこのまま進んでいきます。入り口にいる人は、あなたが答えを教えに帰ってくるのを永遠に待つことになります。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;3. 再帰の考え方&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;再帰とは、進んで（递去）、帰ってくる（归来）ことです。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;具体的に言うと、なぜ「進む」ことができるのでしょうか？&lt;/strong&gt;
これは、再帰的な問題が、類似しているが少し異なる問題に対しても同じ解決策で答えられる必要があることを要求します（上記の例で言えば、一本の鍵で後続のドアの鍵も開けられること）。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;なぜ「帰る」ことができるのでしょうか？&lt;/strong&gt;
これは、これらの問題が絶えず大きいものから小さいものへ、近いものから遠いものへと進む過程で、終点、臨界点、ベースライン、つまりそれ以上小さく、遠くへ進む必要がなくなる点が存在し、その点から元の道を通って原点に戻ることを要求します。&lt;/p&gt;
&lt;p&gt;このブログ記事[3]の著者は次のようにまとめています：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;再帰の基本的な考え方は、&lt;strong&gt;規模の大きな問題を、規模の小さな類似した部分問題に変換して解決する&lt;/strong&gt;ことです。関数の実装において、大きな問題を解決する方法と小さな問題を解決する方法が同じであることが多いため、関数が自身を呼び出すという状況が生まれます。また、この問題解決関数は&lt;strong&gt;明確な終了条件を持たなければなりません&lt;/strong&gt;。そうでなければ、無限再帰が発生してしまいます。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;4. いつ再帰を使うべきか？&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>HTML5キャンバス - ボールの衝突</title>
      <link>https://en.moejue.cn/ja/posts/41/</link>
      <pubDate>Tue, 18 Jul 2017 09:17:31 +0000</pubDate>
      <guid>https://en.moejue.cn/ja/posts/41/</guid>
      <description>&lt;p&gt;HTML5は、World Wide Webのコア言語であり、標準汎用マークアップ言語を応用したハイパーテキストマークアップ言語（HTML）の5回目の大幅な改訂版です。&lt;br&gt;
1999年以降、HTML 4.01は大きく変化しました。今日では、HTML 4.01の一部の要素は廃止され、これらの要素はHTML5で削除または再定義されています。現代のインターネットアプリケーションをより良く扱うために、HTML5では多くの新しい要素と機能が追加されました。例えば、図形の描画、マルチメディアコンテンツ、より良いページ構造、より良いフォーム処理、そしてドラッグ＆ドロップ要素、ジオロケーション、ウェブアプリケーションキャッシュ、ストレージ、ウェブワーカーなどのいくつかのAPIが含まれます。&lt;/p&gt;
&lt;p&gt;タグ&lt;/p&gt;
&lt;p&gt;説明&lt;/p&gt;
&lt;canvas&gt;
&lt;p&gt;タグは、グラフやその他の画像などのグラフィックを定義します。このタグはJavaScriptの描画APIに基づいています。&lt;/p&gt;
&lt;p&gt;実行結果の表示：&lt;/p&gt;
&lt;p&gt;お使いのブラウザはHTML5をサポートしていません&lt;/p&gt;
&lt;p&gt;コード部分：&lt;/p&gt;
&lt;canvas id=&#34;my-canvas&#34; width=&#34;500px&#34; height=&#34;400px&#34; style=&#34;border:1px solid red&#34; &gt;
お使いのブラウザはHTML5をサポートしていません&lt;/canvas&gt;
&lt;script type=&#34;text/javascript&#34;&gt;
	// キャンバスオブジェクトを取得
	var my_canvas = document.getElementById(&#34;my-canvas&#34;);
	// 描画コンテキスト（ブラシ）を取得
	var my_huabi = my_canvas.getContext(&#34;2d&#34;);
	var x = 50;
	var y = 50;
	var r = 20;
	function deawBall(x,y){
		// ブラシの色を設定
		my_huabi.fillStyle = &#34;green&#34;;
		// 新しいパスを開始
		my_huabi.beginPath();
		// ボールを描画
		my_huabi.arc(x, y, r, 0, 2 * Math.PI);
		// パスを閉じる
		my_huabi.fill();
	}
	var fx_x = true;//fx_xがtrueの場合、x軸方向に移動
	var fx_y = true;//fx_yがtrueの場合、y軸方向に移動
	var speen = 1;
	// タイマー
	window.setInterval(&#34;moveBall()&#34;, 10);
	function moveBall(){
		// 現在のボールの移動方向を判断
		if(fx_x == true){
			x += speen;
			if(x &gt;= 500-r){
				// 下端に達したら、上向きに跳ね返る
				fx_x = false;
			}
		}else{
			x -= speen;
			if(x &lt;= 0+r){
				// 上端に達したら、下向きに跳ね返る
				fx_x = true;
			}
		}
		if(fx_y == true){
			y += speen;
			if(y &gt;= 400-r){
				// 左端に達したら、右向きに跳ね返る
				fx_y = false;
			}
		}else{
			y -= speen;
			if(y &lt;= 0+r){
				// 右端に達したら、左向きに跳ね返る
				fx_y = true;
			}
		}
		// キャンバスをクリアして再描画
		my_huabi.clearRect(0, 0, 500, 400);
		deawBall(x, y);
	}
&lt;/script&gt;
&lt;p&gt;// キャンバスオブジェクトを取得
var my_canvas = document.getElementById(&amp;ldquo;my-canvas&amp;rdquo;);
// 描画コンテキスト（ブラシ）を取得
var my_huabi = my_canvas.getContext(&amp;ldquo;2d&amp;rdquo;);
var x = 50;
var y = 50;
var r = 20;
function deawBall(x,y){
// ブラシの色を設定
my_huabi.fillStyle = &amp;ldquo;green&amp;rdquo;;
// 新しいパスを開始
my_huabi.beginPath();
// ボールを描画
my_huabi.arc(x, y, r, 0, 2 * Math.PI);
// パスを閉じる
my_huabi.fill();
}
var fx_x = true;//fx_xがtrueの場合、x軸方向に移動
var fx_y = true;//fx_yがtrueの場合、y軸方向に移動
var speen = 1;
// タイマー
window.setInterval(&amp;ldquo;moveBall()&amp;rdquo;, 10);
function moveBall(){
// 現在のボールの移動方向を判断
if(fx_x == true){
x += speen;
if(x &amp;gt;= 500-r){
// 下端に達したら、上向きに跳ね返る
fx_x = false;
}
}else{
x -= speen;
if(x &amp;lt;= 0+r){
// 上端に達したら、下向きに跳ね返る
fx_x = true;
}
}
if(fx_y == true){
y += speen;
if(y &amp;gt;= 400-r){
// 左端に達したら、右向きに跳ね返る
fx_y = false;
}
}else{
y -= speen;
if(y &amp;lt;= 0+r){
// 右端に達したら、左向きに跳ね返る
fx_y = true;
}
}
// キャンバスをクリアして再描画
my_huabi.clearRect(0, 0, 500, 400);
deawBall(x, y);
}&lt;/p&gt;</description>
    </item>
    <item>
      <title>全サイトHTTPS暗号化の旅を正式に開始</title>
      <link>https://en.moejue.cn/ja/posts/40/</link>
      <pubDate>Fri, 14 Jul 2017 08:24:36 +0000</pubDate>
      <guid>https://en.moejue.cn/ja/posts/40/</guid>
      <description>&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1pgy1fqi81mls9mj30j6085t8v.jpg&#34;&gt;
しばらくのクローズドベータテストを経て、ブログは正式に全サイトHTTPS化されました。
開設からもうすぐ1年になりますが、ずっとHTTPS化したいと思っていました。しかし、以前のホストはSSL証明書をサポートしていなかったため、どうすることもできませんでした。
最近、ホストの契約ももうすぐ切れるので、サポートのあるサーバーに乗り換えました。
以前から、ブログが時々アクセスできなくなるという声を聞いていたので、今回より良いサーバーにアップグレードして、速度や安定性がどうなったか気になります。
そして、emlogのバージョンもアップグレードしました。6.0.0のベータ版ですが、以前の5.Xバージョンのバックエンド管理画面よりもずっと見やすくなりました。UIライブラリには引き続きBootstrapを採用しています。
（注：下の画像はemlog 6.0.0ベータ版のバックエンド管理画面です。サードパーティ製テンプレートの設定画面はなくなっており、下の画像の右上にあるテンプレート管理は私が独自に追加したものです。）
&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1pgy1fqi82yp7p7j314d0k7jtz.jpg&#34;&gt;
2. マイクロブログがなくなりました
emlogがマイクロブログを導入した当初から、それは余計なお世話だと感じていました。非常に粗雑に作られていましたが、皆が慣れた頃に削除されたのは、少し残念です。。。
これはサードパーティ製のプラグインで実装することもできますが、必要とする人が自分で設定すればいいでしょう。。。私はあまりマイクロブログを投稿しません（怠惰なので）、なので削除しました。&lt;/p&gt;
&lt;p&gt;もちろん、全サイトHTTPS化を実現するのは非常に面倒です。なぜemlogをアップグレードしたのか？理由はここにあります。6.0.0以降のバージョンのみがHTTPSに完全対応しています。以前のバージョンを使用していたら、修正だらけになってしまうでしょう。。。
&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1pgy1fqi84hfa0kj306m00ujr6.jpg&#34;&gt;&lt;/p&gt;
&lt;p&gt;emlog以外にも、現在使用している大前端テンプレートもHTTPSをサポートしていません。&lt;/p&gt;
&lt;p&gt;実際、大前端がHTTPSをサポートしていない主な理由は、百度の共有機能です。記事ページで百度共有を使用すると、HTTPとHTTPSが混在し、かわいい緑色の鍵マークが消えてしまいます。&lt;/p&gt;
&lt;p&gt;「百度共有は現在までに2〜3年更新されていないと思われます。公式ウェブサイトのニュース更新は2012年のままです。これほど長期間更新されていないため、現在多くの百度系製品がHTTPS化されているにもかかわらず、百度共有は依然としてHTTPSをサポートしておらず、開発者にとっては非常に面倒です。ウェブサイトが全サイトHTTPS化されている場合、百度共有を使用するとロード問題が発生し、百度共有のコアJavaScriptがブロックされます。」&lt;/p&gt;
&lt;p&gt;ネットで探し回ったところ、すでにこの問題を解決した人がいることがわかりました。なので、私たちはそのまま「伸手党」（他人の成果をそのまま利用する人）になれば良いのです。
Githubアドレス：https://github.com/hrwhisper/baiduShare&lt;/p&gt;
&lt;ol start=&#34;3&#34;&gt;
&lt;li&gt;デフォルトテンプレートのモバイル版ページを削除しました（とにかく醜いので）。現在のテンプレートはレスポンシブなので、必要ありません。&lt;/li&gt;
&lt;/ol&gt;</description>
    </item>
    <item>
      <title>簡単なCSS3アバター回転と3D回転効果</title>
      <link>https://en.moejue.cn/ja/posts/39/</link>
      <pubDate>Mon, 10 Jul 2017 07:45:23 +0000</pubDate>
      <guid>https://en.moejue.cn/ja/posts/39/</guid>
      <description>&lt;p&gt;ウェブサイトのコメント欄で、コメント投稿者のアバターにマウスカーソルを合わせると360°回転するのをよく見かけます。&lt;/p&gt;
&lt;p&gt;まず効果を見てみましょう。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-css&#34; data-lang=&#34;css&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;tximg&lt;/span&gt;{ &lt;span style=&#34;color:#66d9ef&#34;&gt;height&lt;/span&gt;:&lt;span style=&#34;color:#ae81ff&#34;&gt;300&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;px&lt;/span&gt;; &lt;span style=&#34;color:#66d9ef&#34;&gt;border-radius&lt;/span&gt;:&lt;span style=&#34;color:#ae81ff&#34;&gt;50&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;%&lt;/span&gt;; &lt;span style=&#34;color:#66d9ef&#34;&gt;border&lt;/span&gt;:&lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;px&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;solid&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;green&lt;/span&gt;; &lt;span style=&#34;color:#75715e&#34;&gt;/*変化規則*/&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;transition&lt;/span&gt;:&lt;span style=&#34;color:#66d9ef&#34;&gt;all&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;s&lt;/span&gt;; } .&lt;span style=&#34;color:#a6e22e&#34;&gt;tximg&lt;/span&gt;:&lt;span style=&#34;color:#a6e22e&#34;&gt;hover&lt;/span&gt;{ &lt;span style=&#34;color:#75715e&#34;&gt;/* 変化動作 定義2d回転、パラメータは角度を記入 */&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;transform&lt;/span&gt;:rotate(&lt;span style=&#34;color:#ae81ff&#34;&gt;360&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;deg&lt;/span&gt;); }
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1pgy1fqjenq0ztrj30hs0hsmyu.jpg&#34;&gt;&lt;/p&gt;
&lt;p&gt;CSS部分&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-css&#34; data-lang=&#34;css&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;img&lt;/span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#66d9ef&#34;&gt;height&lt;/span&gt;:&lt;span style=&#34;color:#ae81ff&#34;&gt;300&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;px&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#66d9ef&#34;&gt;border-radius&lt;/span&gt;:&lt;span style=&#34;color:#ae81ff&#34;&gt;50&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;%&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#66d9ef&#34;&gt;border&lt;/span&gt;:&lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;px&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;solid&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;green&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#75715e&#34;&gt;/*変化規則*/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#66d9ef&#34;&gt;transition&lt;/span&gt;:&lt;span style=&#34;color:#66d9ef&#34;&gt;all&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;s&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;img&lt;/span&gt;:&lt;span style=&#34;color:#a6e22e&#34;&gt;hover&lt;/span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#75715e&#34;&gt;/*
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;		変化動作
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;		2D回転を定義し、パラメータに角度を記入
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;	*/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#66d9ef&#34;&gt;transform&lt;/span&gt;:rotate(&lt;span style=&#34;color:#ae81ff&#34;&gt;360&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;deg&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;HTML部分（非常にシンプルで、画像が1枚だけです）&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-html&#34; data-lang=&#34;html&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;img&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;src&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;http://www.52ecy.cn/log0.png&amp;#34;&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;3D回転効果（フロントエンドの表示スタイルがやはり競合しているようです -。-）&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-css&#34; data-lang=&#34;css&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;div&lt;/span&gt;{ &lt;span style=&#34;color:#66d9ef&#34;&gt;width&lt;/span&gt;:&lt;span style=&#34;color:#ae81ff&#34;&gt;300&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;px&lt;/span&gt;; &lt;span style=&#34;color:#66d9ef&#34;&gt;height&lt;/span&gt;:&lt;span style=&#34;color:#ae81ff&#34;&gt;300&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;px&lt;/span&gt;; &lt;span style=&#34;color:#66d9ef&#34;&gt;border&lt;/span&gt;:&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;px&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;solid&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;red&lt;/span&gt;; &lt;span style=&#34;color:#75715e&#34;&gt;/*3D効果を見たい場合は、動く要素の親要素にperspective属性を追加する必要があります*/&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;perspective&lt;/span&gt;:&lt;span style=&#34;color:#ae81ff&#34;&gt;300&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;px&lt;/span&gt;;&lt;span style=&#34;color:#75715e&#34;&gt;/*3D要素からビューまでの距離、通常は画像の高さと同じにすると最も効果的です*/&lt;/span&gt; } .&lt;span style=&#34;color:#a6e22e&#34;&gt;img&lt;/span&gt;{ &lt;span style=&#34;color:#66d9ef&#34;&gt;width&lt;/span&gt;:&lt;span style=&#34;color:#ae81ff&#34;&gt;300&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;px&lt;/span&gt;; &lt;span style=&#34;color:#66d9ef&#34;&gt;height&lt;/span&gt;:&lt;span style=&#34;color:#ae81ff&#34;&gt;300&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;px&lt;/span&gt;; &lt;span style=&#34;color:#66d9ef&#34;&gt;border&lt;/span&gt;:&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;px&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;solid&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;red&lt;/span&gt;; &lt;span style=&#34;color:#75715e&#34;&gt;/*変化規則*/&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;/*回転要素の原点位置を設定*/&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;transform-origin&lt;/span&gt;:&lt;span style=&#34;color:#66d9ef&#34;&gt;bottom&lt;/span&gt;; &lt;span style=&#34;color:#66d9ef&#34;&gt;transition&lt;/span&gt;:&lt;span style=&#34;color:#66d9ef&#34;&gt;all&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;s&lt;/span&gt;; } .&lt;span style=&#34;color:#a6e22e&#34;&gt;img&lt;/span&gt;:&lt;span style=&#34;color:#a6e22e&#34;&gt;hover&lt;/span&gt;{ &lt;span style=&#34;color:#75715e&#34;&gt;/*変化動作*/&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;transform&lt;/span&gt;:rotateX(&lt;span style=&#34;color:#ae81ff&#34;&gt;60&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;deg&lt;/span&gt;); }
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1pgy1fqjenq0ztrj30hs0hsmyu.jpg&#34;&gt;&lt;/p&gt;
&lt;p&gt;CSSコード&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-css&#34; data-lang=&#34;css&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;div&lt;/span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#66d9ef&#34;&gt;width&lt;/span&gt;:&lt;span style=&#34;color:#ae81ff&#34;&gt;300&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;px&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#66d9ef&#34;&gt;height&lt;/span&gt;:&lt;span style=&#34;color:#ae81ff&#34;&gt;300&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;px&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#66d9ef&#34;&gt;border&lt;/span&gt;:&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;px&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;solid&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;red&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#75715e&#34;&gt;/*3D効果を見たい場合は、動く要素の親要素にperspective属性を追加する必要があります*/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#66d9ef&#34;&gt;perspective&lt;/span&gt;:&lt;span style=&#34;color:#ae81ff&#34;&gt;300&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;px&lt;/span&gt;;&lt;span style=&#34;color:#75715e&#34;&gt;/*3D要素からビューまでの距離、通常は画像の高さと同じにすると最も効果的です*/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;img&lt;/span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#66d9ef&#34;&gt;width&lt;/span&gt;:&lt;span style=&#34;color:#ae81ff&#34;&gt;300&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;px&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#66d9ef&#34;&gt;height&lt;/span&gt;:&lt;span style=&#34;color:#ae81ff&#34;&gt;300&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;px&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#66d9ef&#34;&gt;border&lt;/span&gt;:&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;px&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;solid&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;red&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#75715e&#34;&gt;/*変化規則*/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#75715e&#34;&gt;/*回転要素の原点位置を設定*/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#66d9ef&#34;&gt;transform-origin&lt;/span&gt;:&lt;span style=&#34;color:#66d9ef&#34;&gt;bottom&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#66d9ef&#34;&gt;transition&lt;/span&gt;:&lt;span style=&#34;color:#66d9ef&#34;&gt;all&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;s&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;img&lt;/span&gt;:&lt;span style=&#34;color:#a6e22e&#34;&gt;hover&lt;/span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#75715e&#34;&gt;/*変化動作*/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#66d9ef&#34;&gt;transform&lt;/span&gt;:rotateX(&lt;span style=&#34;color:#ae81ff&#34;&gt;60&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;deg&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;HTMLコードの部分はアバター回転の部分と全く同じで、画像を1枚置くだけなので、ここでは省略します。&lt;/p&gt;
&lt;p&gt;効果画像を現在のページに直接挿入すると、現在のページのCSSスタイルと競合し、ページ全体が崩れてしまうため、効果画像のスタイルセレクタを変更しました。&lt;/p&gt;
&lt;p&gt;注意：IEモードでは動作しない可能性があります。&lt;/p&gt;</description>
    </item>
    <item>
      <title>CSS3でiPhoneを描く</title>
      <link>https://en.moejue.cn/ja/posts/29/</link>
      <pubDate>Mon, 03 Jul 2017 06:09:01 +0000</pubDate>
      <guid>https://en.moejue.cn/ja/posts/29/</guid>
      <description>&lt;p&gt;まずは完成イメージをご覧ください、お先にどうぞ。(これは決して画像ではありません。うん～、なんか変な言い方ですね～)&lt;/p&gt;
&lt;p&gt;iPhoneの何世代目か聞かないでください、私も知らないし、使ったこともないので、お察しください。&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1ply1fqi8i9h7fvj308j0fa747.jpg&#34;&gt;&lt;br&gt;
CSSスタイル部分&lt;/p&gt;
&lt;p&gt;#phone{
width:250px;
height:500px;
background-color:#2E2E2E;
border:10px solid #3B3B3B;
margin:100px auto;
border-radius:30px;/*设置div元素的圆角边框*/
}&lt;/p&gt;
&lt;p&gt;#camera{
width:8px;
height:8px;
background-color:#1A1A1A;
border-radius:50%;
border:2px solid #505050;
margin:10px auto;/*距离上边距10px 左右居中*/
}&lt;/p&gt;
&lt;p&gt;#receiver{
width:80px;
height:8px;
border:2px solid #505050;
margin:10px auto;
border-radius:10px;
background-color:#1A1A1A;
}&lt;/p&gt;
&lt;p&gt;#screen{
width:225px;
height:385px;
background-color:#0A0A0A;
border:3px solid #1C1C1C;
margin:10px auto;
}&lt;/p&gt;
&lt;p&gt;#btn{
width:40px;
height:40px;
background:#1A1A1A;
border-radius:50%; /*当宽高相同时，则为圆*/
margin:10px auto;
}&lt;/p&gt;
&lt;p&gt;/*:before 选择器在被选元素的内容前面插入内容。*/
#btn:before{
width:22px;
height:22px;
border:2px solid white;
border-radius:30%;
content:&amp;quot;&amp;quot;; /*即使插入的内容为空也需要写，否则不显示*/
display:inline-block;
margin-top:7px;
margin-left:7px;
}&lt;/p&gt;
&lt;p&gt;HTML部分&lt;/p&gt;
&lt;div id=&#34;phone&#34;&gt;
	&lt;div id=&#34;camera&#34;&gt;&lt;/div&gt;&lt;!-- 摄像头部分--&gt;
	&lt;div id=&#34;receiver&#34;&gt;&lt;/div&gt;&lt;!--听筒部分--&gt;
	&lt;div id=&#34;screen&#34;&gt;&lt;/div&gt;&lt;!--屏幕部分--&gt;
	&lt;div id=&#34;btn&#34;&gt;&lt;/div&gt;&lt;!--按钮部分--&gt;
&lt;/div&gt;
&lt;p&gt;後で少し機能を追加しました&lt;/p&gt;
&lt;p&gt;ホームボタンをクリックすると携帯の画面が点灯し、5秒後に再び画面が消えます&lt;/p&gt;</description>
    </item>
    <item>
      <title>お遊び - 友情リンク セルフ申請</title>
      <link>https://en.moejue.cn/ja/posts/36/</link>
      <pubDate>Thu, 01 Jun 2017 05:59:59 +0000</pubDate>
      <guid>https://en.moejue.cn/ja/posts/36/</guid>
      <description>&lt;p&gt;&lt;strong&gt;について&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;相互リンク自動申請は、PHP言語で開発された相互リンク自動承認追加システムです。&lt;/p&gt;
&lt;p&gt;Bootstrap UIライブラリのグリッドシステムでレイアウトしています。結局のところ、私はプロのフロントエンド開発者ではないので、これくらいできれば十分でしょう。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;機能紹介&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;このシステムは、理論上すべてのウェブサイトをサポートしています。HTTPS対応のウェブサイトもサポートしています。相互リンクはウェブサイトのトップページに設定する必要があります。URLリダイレクトや保護がされているウェブサイトは検出できません。トップレベルドメインの申請が承認された後、サブドメインは引き続き申請できません。背景画像は私の画像ライブラリから1000枚の中からランダムに表示されます。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;経緯&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;私の相互リンクの中に、あるブロガーがこのようにしているのを見かけました。相互リンクの自動承認追加は、一瞬でとても高度なものに感じられ、自分で承認する手間も省け、タイムリーに追加できる。それで、自分でも適当に作ってみたのです。&lt;/p&gt;
&lt;p&gt;ここでちょっと格好つけているだけです。ソースコードが必要な方はご連絡ください。&lt;/p&gt;
&lt;p&gt;もし間違っている点があれば、かかってこいよ！&lt;/p&gt;
&lt;p&gt;効果は以下の図の通りです。 &lt;a href=&#34;http://www.52ecy.cn/link.php&#34;&gt;友情链接申请地址&lt;/a&gt; &lt;a href=&#34;http://www.52ecy.cn/post-15.html&#34;&gt;友情链接申请须知&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1pgy1fqi8nttsdqj31980m5wko.jpg&#34;&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>各種言語のOEP大全</title>
      <link>https://en.moejue.cn/ja/posts/35/</link>
      <pubDate>Fri, 19 May 2017 03:08:23 +0000</pubDate>
      <guid>https://en.moejue.cn/ja/posts/35/</guid>
      <description>&lt;p&gt;&lt;strong&gt;普段OEPを照合するのは確かに面倒なので、まとめてみました。この記事で直接OEPを確認するか、&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;画像を右クリックしてローカルに保存してください。     クリックで拡大表示できます。&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;お役に立てましたら、ぜひコメントを残していってくださいね〜&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;VC6と易语言&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1pgy1fqi8qw5vw6j30f908vmy4.jpg&#34;&gt;&lt;br&gt;
Delphi7&lt;br&gt;
&lt;strong&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1ply1fqi8qwc0kxj30hf08u0u1.jpg&#34;&gt;&lt;/strong&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;VB5&lt;br&gt;
&lt;strong&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1ply1fqi8qw8khaj30f608qjsb.jpg&#34;&gt;&lt;/strong&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;VB6&lt;br&gt;
&lt;strong&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1pgy1fqi8qw0u4ej30f608qwfd.jpg&#34;&gt;&lt;/strong&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;BC++&lt;br&gt;
&lt;strong&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1pgy1fqi8qw68tpj30f608qgmc.jpg&#34;&gt;&lt;/strong&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;**VS2008Debug&lt;br&gt;
&lt;strong&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1pgy1fqi8qywq8zj30fx0da3zb.jpg&#34;&gt;&lt;/strong&gt;&lt;br&gt;
**&lt;/p&gt;
&lt;p&gt;**VS2008Release&lt;br&gt;
&lt;strong&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1pgy1fqi8qwwnntj30c907et93.jpg&#34;&gt;&lt;/strong&gt;&lt;br&gt;
**&lt;/p&gt;
&lt;p&gt;**VS2012-VS2015Debug&lt;br&gt;
&lt;strong&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1pgy1fqi8qxkwfgj30c00cx74x.jpg&#34;&gt;&lt;/strong&gt;&lt;br&gt;
**&lt;/p&gt;
&lt;p&gt;**VS2012-VS2015Release&lt;br&gt;
&lt;strong&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1pgy1fqi8qx0130j30bf07vdg9.jpg&#34;&gt;&lt;/strong&gt;&lt;br&gt;
**&lt;/p&gt;</description>
    </item>
    <item>
      <title>Emlogの最新コメント一覧でブログ主のコメント返信を非表示にする方法</title>
      <link>https://en.moejue.cn/ja/posts/32/</link>
      <pubDate>Sat, 06 May 2017 03:17:23 +0000</pubDate>
      <guid>https://en.moejue.cn/ja/posts/32/</guid>
      <description>&lt;p&gt;ブロガーは訪問者と頻繁に交流する必要がありますが、ブロガーの返信もコメントとして最新コメント欄に表示されます。これにより、ブロガーが一度に複数のコメントに返信すると、最新コメント欄が自分のコメントで埋め尽くされてしまい、あまり見栄えが良くありません。&lt;/p&gt;
&lt;p&gt;私が使用しているemlog5.3.1バージョンを例に説明します：&lt;/p&gt;
&lt;p&gt;&lt;code&gt;include/lib&lt;/code&gt;ディレクトリにある&lt;code&gt;cache.php&lt;/code&gt;ファイル（これはキャッシュ関数ファイルです）を開き、その中から以下のコードを見つけます：&lt;/p&gt;
&lt;p&gt;私の場合は179行目にあります。以下の通りです。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-php&#34; data-lang=&#34;php&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$query &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; $this&lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;db&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;query&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;SELECT * FROM &amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;DB_PREFIX&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;comment WHERE hide=&amp;#39;n&amp;#39; ORDER BY date DESC LIMIT 0, &lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;$index_comnum&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;これを次のように変更します：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-php&#34; data-lang=&#34;php&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$query &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; $this&lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;db&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;query&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;SELECT * FROM &amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;DB_PREFIX&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;comment WHERE hide=&amp;#39;n&amp;#39; AND poster!=&amp;#39;阿珏&amp;#39; ORDER BY date DESC LIMIT 0, &lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;$index_comnum&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;ヒント：これはSQL文を実行するPHPコードです。条件は、コメント投稿者のユーザー名がブロガーのユーザー名であるかどうかをチェックし、そうであればそのコメントを最新コメントリストに表示しないようにするものです。（メールアドレスやウェブサイトで &lt;code&gt;poster!=&#39;阿珏&#39;&lt;/code&gt; をチェックすることも可能ですが、私自身は返信する際にメールアドレスを入力しないため、ユーザー名でチェックするしかありません。もちろん、私になりすまさないでくださいね）&lt;/p&gt;
&lt;p&gt;最後にファイルを保存し、emlogの管理画面にログインしてキャッシュを更新し、ウェブページを再読み込みすれば、効果が確認できます。&lt;/p&gt;</description>
    </item>
    <item>
      <title>プログラマーの日常、ウイルス感染シリーズ</title>
      <link>https://en.moejue.cn/ja/posts/11/</link>
      <pubDate>Thu, 04 May 2017 05:30:48 +0000</pubDate>
      <guid>https://en.moejue.cn/ja/posts/11/</guid>
      <description>&lt;p&gt;&lt;code&gt;DropFileName = &amp;quot;svchost.exe&amp;quot;&lt;/code&gt; 問題解決策&lt;/p&gt;
&lt;p&gt;事の発端はこうです。友人がソースコードを送ってきて、見てほしいと言われました。不注意でその中にある&lt;code&gt;exe&lt;/code&gt;ファイルを誤ってクリックしてしまい、ネットワーク接続要求がポップアップ表示されたので、すぐに閉じました。その後、同じディレクトリにシステム音楽フォルダを装った&lt;code&gt;exe&lt;/code&gt;実行ファイルが追加されているのを発見しました。私は事態が良くないと感じましたが、確信は持てませんでした。その後、このフォルダ全体を削除しようとしたところ、「プログラムが使用中です」というメッセージが表示されました。&lt;/p&gt;
&lt;p&gt;私はそれをそのままにして、しばらく放置しました。その後の2、3時間で、PCの応答速度がますます遅くなり、物理メモリの使用量が急増していることに気づきました。そこでPCを再起動しました。&lt;/p&gt;
&lt;p&gt;その後、コードを書こうと思い、&lt;code&gt;html&lt;/code&gt;ファイルを開いたところ、大変な事態になっていることに気づきました。PC上のすべての&lt;code&gt;html&lt;/code&gt;ファイルに問題が発生していました（下図参照）。これで、ウイルスに感染したことが確実になりました。&lt;/p&gt;
&lt;p&gt;そしてすぐに、間髪入れずに再び&lt;code&gt;360&lt;/code&gt;をダウンロードし、PCのフルスキャンを実行しました（なぜ&lt;code&gt;360&lt;/code&gt;をダウンロードしたのかは聞かないでください）。長期間ノーガードで使っていたPCなので、一度や二度、このような事態になるのは避けられません。&lt;/p&gt;
&lt;p&gt;個別にテストしたところ、&lt;code&gt;360&lt;/code&gt;はウイルスコードのみを削除し、ファイル自体は削除しないことがわかりました。しかし、一番下でコメントアウトされた部分は削除されません。結局、手動で再度処理する必要がありました。処理しなくても大きな問題はありませんが、強迫性障害なので、ちょっと辛いです( ╯▽╰)&lt;/p&gt;
&lt;p&gt;コードの原理（作用）：
この&lt;code&gt;script&lt;/code&gt;コードは&lt;code&gt;vbs&lt;/code&gt;言語のウイルスです。このウイルスに感染すると、ローカルのすべての&lt;code&gt;html&lt;/code&gt;ドキュメントを開いたときに、このような文字列が表示されることに気づくでしょう。&lt;code&gt;html&lt;/code&gt;ドキュメントだけでなく、&lt;code&gt;dll&lt;/code&gt;ドキュメントも感染します。もちろん、この種のウイルスは過度に心配する必要はありません。なぜなら、ファイル破壊の役割を果たすだけで、プライバシーのアップロードやアカウントの乗っ取りなどの危険性はないからです。
このコードの大まかな意味は、&lt;code&gt;svchost.exe&lt;/code&gt;プロセスを見つけてデータを注入し、その後のバイナリコードを実行するというものです。このウイルスが他のウイルスと異なるのは、この&lt;code&gt;vbs&lt;/code&gt;ウイルスは感染力が非常に強いことです。&lt;code&gt;html&lt;/code&gt;ファイルが一度感染すると、ユーザーが&lt;code&gt;html&lt;/code&gt;ドキュメントを開くだけでウイルスが上記のコードを実行し、ローカルPC上のすべての&lt;code&gt;html&lt;/code&gt;ファイルと&lt;code&gt;dll&lt;/code&gt;ファイルに直接感染します。
確かに、&lt;code&gt;DLL&lt;/code&gt;ファイルも感染するため、一部のソフトウェアは正常に使用できますが、ウイルス対策ソフトはウイルスを検出します。また、多くの常用ソフトウェアを実行するとウイルスが検出されることに気づくでしょう。例えば、以前よく使っていた&lt;code&gt;迅雷&lt;/code&gt;や&lt;code&gt;酷狗&lt;/code&gt;などの常用ソフトウェアを再度開いたときに、ウイルスがあると表示されたのです。当時、私は非常に奇妙に感じました。&lt;code&gt;迅雷&lt;/code&gt;は公式サイトからダウンロードしたのに、なぜウイルスが検出されるのだろうか？ここでの理由は、&lt;code&gt;vbs&lt;/code&gt;ウイルスが&lt;code&gt;迅雷&lt;/code&gt;などのソフトウェアのインストールファイル内の&lt;code&gt;dll&lt;/code&gt;に感染したため、ウイルス対策ソフトが&lt;code&gt;vbs&lt;/code&gt;スクリプトウイルスという名称でウイルスを検出し続けるのです。
ヒント：記事中の画像は宇宙人に連れ去られました&lt;/p&gt;</description>
    </item>
    <item>
      <title>私の二次元オンラインギャラリー</title>
      <link>https://en.moejue.cn/ja/posts/10/</link>
      <pubDate>Wed, 03 May 2017 12:03:33 +0000</pubDate>
      <guid>https://en.moejue.cn/ja/posts/10/</guid>
      <description>&lt;p&gt;私のギャラリー - 二次元オンラインギャラリー&lt;/p&gt;
&lt;p&gt;しばらくの試行錯誤の末、ようやく完成しました。&lt;/p&gt;
&lt;p&gt;説明は不要！ベテランが発車します。さあ、乗り遅れないで。あ、ちなみに健全なサイトですよ&lt;/p&gt;
&lt;p&gt;ご注意：他の方がいる場所での閲覧はご遠慮ください。&lt;/p&gt;
&lt;p&gt;ご注意その2：F11キーでブラウザを全画面表示にすると、最高の体験が得られます。&lt;/p&gt;
&lt;p&gt;このページを作成した目的はいくつかあります：&lt;/p&gt;
&lt;p&gt;1.二次元文化を広め、普及させること。
2.良いものは共有すべきだから。
3.私がその世界を好きだから。
4.あなたより二次元の彼女の方が可愛いから。
5.上記は全部デタラメです。実は、自分が見やすいようにするためでした。&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;http://www.52ecy.cn/gallery&#34;&gt;☞☞ワープゲート&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&#34;投稿も可能です&#34;&gt;投稿も可能です。&lt;/h3&gt;
&lt;p&gt;1.二次元の画像または素材であること。スタイル、白黒、デフォルメ（Q版）、男女は問いません。
2.際どい部分の露出は禁止です。それでは美しさに欠けますし、何と言ってもうちは健全なサイトですから。
3.一回の投稿で50枚以上お願いします。
4.投稿する画像は、高画質でウォーターマーク（透かし）がないものに限ります。&lt;/p&gt;
&lt;p&gt;すべての画像は私が一枚一枚チェックしますよ^_^&lt;/p&gt;
&lt;p&gt;もし不適切な画像を見つけた場合は、ご連絡いただければ削除します。何千枚もの画像があると、たまに審査の目も疲れてしまいますので。その際は、画像のリンクを控えておくのをお忘れなく。&lt;/p&gt;
&lt;p&gt;この記事はギャラリーと共に長期的に更新され、該当カテゴリーのトップに固定されます。&lt;/p&gt;
&lt;p&gt;初回は「&lt;a href=&#34;http://http://www.52ecy.pw/post-2.html&#34;&gt;&lt;/a&gt;&lt;a href=&#34;http://www.52ecy.cn/post-2.html&#34; title=&#34;アニメを愛するのは、私たちが幸せを信じているから&#34;&gt;アニメを愛するのは、私たちが幸せを信じているから&lt;/a&gt;」という記事を含め、合計716枚の画像を追加しました。今後はアニメ作品ごとに特集を組んでいく予定です。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2017年5月20日&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;各シリーズの画像を1918枚更新しました。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2017年7月2日&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;様々な（萌え）女の子の画像を1099枚更新しました（かなり前の素材ですが、女の子ばかりでどうしようもなくて）。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2017年8月10日&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;数日間ギャラリーを閉鎖し、再度調整を行いました。幸いにも&lt;a href=&#34;http://sxyz.blog&#34;&gt;Akoさん&lt;/a&gt;に手伝ってもらえました。
サーバー上の画像のリネーム、ハッシュ値の比較を行い、重複していた画像を少しだけ削除しました。
ファイル名のキャッシュ機能を追加しました。今後の画像更新については、ここでは一つ一つ説明しません。
ページの表示スタイルを変更しました。（この部分は、今後もまたいじることになると思います）
画像を百数十枚更新しました。&lt;/p&gt;
&lt;p&gt;現在、サーバーには合計 5000枚以上 の画像があります&lt;/p&gt;</description>
    </item>
    <item>
      <title>ウェブサイトのバックエンドアドレスを公開することは非常に危険なことです</title>
      <link>https://en.moejue.cn/ja/posts/21/</link>
      <pubDate>Sun, 30 Apr 2017 07:48:47 +0000</pubDate>
      <guid>https://en.moejue.cn/ja/posts/21/</guid>
      <description>&lt;p&gt;ウェブサイトのバックエンドアドレスを公開することは非常に危険なことです。例えば、私のウェブサイトのバックエンドアドレスは次のとおりです。&lt;a href=&#34;http://52ecy.pw/admin/&#34;&gt;管理ログイン&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;インターネットは複雑な世界であり、各ウェブサイトの管理者は自分自身を守る方法を学ぶ必要があります。&lt;/p&gt;
&lt;p&gt;emlogのデフォルトのバックエンドパスはadminディレクトリであり、重要な情報がむき出しで公開されています。&lt;/p&gt;
&lt;p&gt;デフォルトのバックエンドパスを変更するには、3つのステップがあります。&lt;/p&gt;
&lt;p&gt;adminディレクトリを開き、globals.phpを見つけて、editplusなどのエディタで開きます。メモ帳で開いても構いませんが、結果は保証されません。&lt;/p&gt;
&lt;p&gt;フォルダ名をadminからxxxxなどの希望の名前に変更します。&lt;/p&gt;
&lt;p&gt;admin/globals.phpファイルを開きます。現在はxxxx/globals.phpになっているはずです。&lt;/p&gt;
&lt;p&gt;9行目のコードを編集します。&lt;/p&gt;
&lt;p&gt;define(&amp;lsquo;TEMPLATE_PATH&amp;rsquo;, EMLOG_ROOT.&amp;rsquo;/admin/views/&amp;rsquo;);&lt;/p&gt;
&lt;p&gt;adminを新しい名前xxxxに置き換えます。&lt;/p&gt;
&lt;p&gt;define(&amp;lsquo;TEMPLATE_PATH&amp;rsquo;, EMLOG_ROOT.&amp;rsquo;/xxxx/views/&amp;rsquo;);&lt;/p&gt;
&lt;p&gt;3番目のステップ、バックエンドログインをリフレッシュした後、ナビゲーション設定で「ログイン」を非表示にします。そうしないと、クリックすると404エラーが発生し、非常に煩わしいです。&lt;/p&gt;
&lt;h3 id=&#34;後遺症の解決策&#34;&gt;後遺症の解決策：&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;バックエンドパスを変更した後、微語の絵文字画像が表示されなくなります。解決策：&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;include/lib/function.base.phpを開き、以下を見つけます。&lt;/p&gt;
&lt;p&gt;$t = str_replace($data,&amp;rsquo;&lt;img title=&#34;&#39;.$data.&#39;&#34; src=&#34;&#39;.BLOG\_URL.&#39;admin/editor/plugins/emoticons/images/&#39;.$emos\[$data\].&#39;&#34;/&gt;&amp;rsquo;,$t);&lt;/p&gt;
&lt;p&gt;adminをxxxxに置き換えます。&lt;/p&gt;
&lt;p&gt;$t = str_replace($data,&amp;rsquo;&lt;img title=&#34;&#39;.$data.&#39;&#34; src=&#34;&#39;.BLOG\_URL.&#39;xxxx/editor/plugins/emoticons/images/&#39;.$emos\[$data\].&#39;&#34;/&gt;&amp;rsquo;,$t);&lt;/p&gt;
&lt;ol start=&#34;2&#34;&gt;
&lt;li&gt;バックエンドの個人設定で新しいアバターをアップロードしない場合、微語のアバターもフロントエンドに表示されなくなります。解決策：&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;t/index.phpを開き、以下を見つけます。&lt;/p&gt;
&lt;p&gt;$avatar = empty($user_cache[UID][&amp;lsquo;avatar&amp;rsquo;]) ? &amp;lsquo;../admin/views/images/avatar.jpg&amp;rsquo; : &amp;lsquo;../&amp;rsquo; . $user_cache[UID][&amp;lsquo;avatar&amp;rsquo;];&lt;/p&gt;
&lt;p&gt;adminをxxxxに置き換えます。&lt;/p&gt;
&lt;p&gt;$avatar = empty($user_cache[UID][&amp;lsquo;avatar&amp;rsquo;]) ? &amp;lsquo;../xxxx/views/images/avatar.jpg&amp;rsquo; : &amp;lsquo;../&amp;rsquo; . $user_cache[UID][&amp;lsquo;avatar&amp;rsquo;];&lt;/p&gt;
&lt;p&gt;次に、テンプレート内のt.php、つまりcontent/templates/テンプレート名/t.phpを開きます。&lt;/p&gt;
&lt;p&gt;BLOG_URL . &amp;lsquo;admin/views/images/avatar.jpg&amp;rsquo; :&lt;/p&gt;
&lt;p&gt;adminをxxxxに置き換えます。&lt;/p&gt;
&lt;p&gt;BLOG_URL . &amp;lsquo;xxxx/views/images/avatar.jpg&amp;rsquo; :&lt;/p&gt;
&lt;ol start=&#34;3&#34;&gt;
&lt;li&gt;テンプレートが破損した場合の「戻る」ボタンのリンクの問題を解決します。デフォルトのadminをクリックするとエラーが発生します。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;include/lib/view.phpを開き、以下を見つけます。&lt;/p&gt;
&lt;p&gt;emMsg(&amp;lsquo;現在のテンプレートは削除または破損しています。バックエンドにログインして別のテンプレートに変更してください。&amp;rsquo;, BLOG_URL . &amp;lsquo;admin/template.php&amp;rsquo;);&lt;/p&gt;
&lt;p&gt;adminをxxxxに置き換えます。&lt;/p&gt;
&lt;p&gt;emMsg(&amp;lsquo;現在のテンプレートは削除または破損しています。バックエンドにログインして別のテンプレートに変更してください。&amp;rsquo;, BLOG_URL . &amp;lsquo;xxxx/template.php&amp;rsquo;);&lt;/p&gt;
&lt;ol start=&#34;4&#34;&gt;
&lt;li&gt;記事リストページの編集ボタンのリンクの問題を解決します。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;テンプレートのmodule.phpファイルを開き、以下を見つけます。&lt;/p&gt;
&lt;p&gt;$editflg = ROLE == ROLE_ADMIN || $author == UID ? &amp;lsquo;&lt;a href=&#34;&#39;.BLOG\_URL.&#39;admin/write\_log.php?action=edit&amp;gid=&#39;.$logid.&#39;&#34; target=&#34;\_blank&#34;&gt;編集&lt;/a&gt;&amp;rsquo; : &amp;lsquo;&amp;rsquo;;&lt;/p&gt;</description>
    </item>
    <item>
      <title>ネットワークハイジャックのコードエラー</title>
      <link>https://en.moejue.cn/ja/posts/30/</link>
      <pubDate>Fri, 21 Apr 2017 03:05:56 +0000</pubDate>
      <guid>https://en.moejue.cn/ja/posts/30/</guid>
      <description>&lt;p&gt;昨晩、なぜかネットワークがダウンしてしまい、今朝復旧したので、作業を再開しました。&lt;/p&gt;
&lt;p&gt;HTMLの「瀑布流（ウォーターフォール）」レイアウトを書いていたのですが、今朝開いてみたら、あれ？昨日までちゃんと動いていたウォーターフォール効果はどこへ？[困惑の表情]&lt;/p&gt;
&lt;p&gt;乗っ取られた時
なんてひどい広告だ&lt;/p&gt;
&lt;p&gt;右下隅にポップアップが表示される確率は約1/10でした。Chrome Developer Toolsを通して見ると、元のウェブページがiframe内に配置され、Flash広告が挿入されていることがわかりました。&lt;/p&gt;
&lt;p&gt;ブラウザのアドレスバーを確認すると、正しいドメインのままでリダイレクトされていませんでした。これは、DNSハイジャックによってドメインが返すコンテンツがウェブサイトのページではなく、処理されたページになっていることを示しています。&lt;/p&gt;
&lt;p&gt;その後、コードをVPSにアップロードしてテストしてみたところ、問題ありませんでした。&lt;/p&gt;
&lt;p&gt;これにより、ISPによるDNSハイジャックと広告の挿入が確認され、返されるコンテンツがiframe内に配置されていることが判明しました。これにより、クロスサイト攻撃、キーロギング、HTTPS証明書の偽造など、一般的なフィッシングサイトよりも危険なリスクが生じる可能性があります。&lt;/p&gt;
&lt;p&gt;仕方なくDNSを変更するしかありませんでした。&lt;/p&gt;
&lt;p&gt;ようやく復旧しました。&lt;/p&gt;
&lt;p&gt;最後に、なぜ私のローカルファイルのHTMLコードまで乗っ取られたのかというと、Baiduの静的リソース公開ライブラリを呼び出していたため、返されるJavaScriptが正しい内容ではなかったからです。&lt;/p&gt;
&lt;p&gt;追記：この記事は1年前に公開されたため、画像は失われています。&lt;/p&gt;</description>
    </item>
    <item>
      <title>アクセスしたページは存在しません。</title>
      <link>https://en.moejue.cn/ja/posts/20/</link>
      <pubDate>Tue, 04 Apr 2017 10:37:13 +0000</pubDate>
      <guid>https://en.moejue.cn/ja/posts/20/</guid>
      <description>&lt;p&gt;萌え萌えな404ページを作ってみました&lt;/p&gt;
&lt;p&gt;まあ、bilibiliのパクリですけどね。&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;http://52ecy.cn/404&#34;&gt;http://52ecy.cn/404&lt;/a&gt;（テンプレートを変更してからは使っていません）&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1pgy1fqi9cnb851j30m708sab1.jpg&#34;&gt;&lt;/p&gt;
&lt;p&gt;とあるナビゲーションページです&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;http://XX.com/&#34;&gt;http://XX.com/&lt;/a&gt; （閉鎖しました）&lt;/p&gt;</description>
    </item>
    <item>
      <title>ブログをemlogに正式に切り替えました</title>
      <link>https://en.moejue.cn/ja/posts/1/</link>
      <pubDate>Sun, 02 Apr 2017 03:10:54 +0000</pubDate>
      <guid>https://en.moejue.cn/ja/posts/1/</guid>
      <description>&lt;p&gt;元のブログシステムが不完全だったなど様々な理由に加え、「多説」というコメントサービスが6月1日（こどもの日）に終了することになり、期限を突きつけられたため、ブログシステムの変更を余儀なくされました。もちろん、コメントシステムだけを交換することも考えましたが、よく考えてみるとそれは決して簡単なことではありませんでした。そこで、現在は誇りを持ってemlogシステムを使用しています。&lt;/p&gt;
&lt;p&gt;サイトのドメインも正式に以前の（z-z-d.pw）から現在の（52ecy.pw）に変更しました。ドメインの意味は「我愛異(二)次元」（二次元を愛してる）です。&lt;/p&gt;
&lt;p&gt;旧ドメインにアクセスすると、新しいドメインに直接リダイレクトされます。&lt;/p&gt;
&lt;p&gt;そして、データ移行作業が始まりました。&lt;/p&gt;
&lt;p&gt;4月2日&lt;/p&gt;
&lt;p&gt;ブログ記事のデータ移行と、期限切れ記事の削除を開始&amp;hellip;..&lt;/p&gt;
&lt;p&gt;4月3日&lt;/p&gt;
&lt;p&gt;もちろん、重要なコメントデータは失うわけにはいきません。「多説」のコメントをこのブログに移し、文字化けしたデータを修復&amp;hellip;..&lt;/p&gt;
&lt;p&gt;4月3日夜&lt;/p&gt;
&lt;p&gt;元のブログの&lt;a href=&#34;https://www.52ecy.cn/Music/&#34;&gt;私のプレイリスト&lt;/a&gt;を移植しました。この機能はとても気に入っています。&lt;/p&gt;
&lt;p&gt;私のプレイリストは酷狗（Kugou）の音楽をリアルタイムで同期しており、フローティングプレイヤーは網易雲音楽（NetEase Cloud Music）のもので、&lt;a href=&#34;http://www.52ecy.pw/%E6%88%91%E7%9A%84%E6%AD%8C%E5%8D%95-%E9%98%BF%E7%8F%8A%E7%9A%84%E5%8D%9A%E5%AE%A2.html&#34;&gt;私のプレイリスト&lt;/a&gt;のオープニングリストを同期しています。&lt;/p&gt;
&lt;p&gt;4月5日&lt;/p&gt;
&lt;p&gt;サイト全体でフローティング音楽プレイヤーを正式に導入しました。どこにいても音楽は止まりません。スマートフォンユーザーは、ブラウザをPCモードに設定しないとプレイヤーが表示されません。&lt;/p&gt;
&lt;p&gt;酷狗の音楽の一部を同期するのに少し時間がかかりました。おそらく網易（NetEase）側にこれらの音楽がなかったからでしょう。なにしろ、ほとんどが日本のアニメソングで、しかもあまりメジャーではないものばかりですから。多くの曲で解析失敗が発生し、プレイヤーが現在のテーマと互換性がないため、プレイヤー機能が失われています。やはり&lt;a href=&#34;https://www.52ecy.cn/Music/&#34;&gt;私のプレイリスト&lt;/a&gt;で聴くことをお勧めします。多くを語ると疲れますね。&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
