<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>教程 on 阿珏酱のBlog</title>
    <link>https://zh.moejue.cn/ja/tags/%E6%95%99%E7%A8%8B/</link>
    <description>Recent content from 阿珏酱のBlog</description>
    <generator>Hugo</generator>
    <language>ja</language>
    
    <managingEditor>xxx@example.com (MoeJue)</managingEditor>
    <webMaster>xxx@example.com (MoeJue)</webMaster>
    
    <copyright>本ブログのすべての文書は、特に指定されていない限り、BY-NC-SAライセンスに従っています。引用の際は出典を明記してください！</copyright>
    
    <lastBuildDate>Sun, 06 Jul 2025 14:25:09 +0000</lastBuildDate>
    
    
    <atom:link href="https://zh.moejue.cn/ja/tags/%E6%95%99%E7%A8%8B/index.xml" rel="self" type="application/rss&#43;xml" />
    

    
    

    <item>
      <title>Web3.0ベースのブロックチェーン画像アップロード</title>
      <link>https://zh.moejue.cn/ja/posts/201/</link>
      <pubDate>Mon, 17 Jun 2024 12:57:43 &#43;0000</pubDate>
      <author>xxx@example.com (MoeJue)</author>
      <guid>https://zh.moejue.cn/ja/posts/201/</guid>
      <description>
        <![CDATA[<h1>Web3.0ベースのブロックチェーン画像アップロード</h1><p>著者: MoeJue(xxx@example.com)</p>
        
          <p>始める前に、まず基本的な概念を簡単に理解しましょう。以下のいくつかの点にまとめました。<a href="https://www.cnblogs.com/Ajue/p/18252827">Web3.0とは何か、ブロックチェーンとどのような関係があるのか？</a>（前回の記事がここで役立ちますね）</p>
<p>要件：PythonベースのWeb 3.0画像アップロードシステムを開発します。このシステムは、ユーザーが画像をアップロードし、その画像を分散型ネットワークに保存し、同時にトランザクション情報をブロックチェーンに記録することを可能にします。もともとは遊びで書いていたもので、ユーザー認証やファイル操作を統合した完全な管理システムにして、「画像アップロードサービスの最終的な解決策」にしようと考えたこともありましたが、実際にやってみるとあまり現実的ではないことに気づき、断念しました。しかし、私は昔から画像にこだわりがあるのです。</p>
<h3 id="ステップの概要">
<a class="header-anchor" href="#%e3%82%b9%e3%83%86%e3%83%83%e3%83%97%e3%81%ae%e6%a6%82%e8%a6%81"></a>
ステップの概要
</h3><ol>
<li><strong>環境設定</strong>：Pythonを使用して開発し、必要なPythonライブラリをインストールします。</li>
<li><strong>IPFS統合</strong>：画像をIPFSにアップロードし、画像のCID（Content Identifier）を取得します。</li>
<li><strong>ブロックチェーン統合</strong>：IPFSのCIDをブロックチェーンに記録します。</li>
<li><strong>Webインターフェース</strong>：Flaskを使用して、ユーザーが画像をアップロードできるWebインターフェースを作成します。</li>
</ol>
<h3 id="詳細なステップ">
<a class="header-anchor" href="#%e8%a9%b3%e7%b4%b0%e3%81%aa%e3%82%b9%e3%83%86%e3%83%83%e3%83%97"></a>
詳細なステップ
</h3><h4 id="1-環境設定">
<a class="header-anchor" href="#1-%e7%92%b0%e5%a2%83%e8%a8%ad%e5%ae%9a"></a>
1. 環境設定
</h4><p>必要なPythonライブラリをインストールします：</p>
<pre tabindex="0"><code>pip install flask web3 ipfshttpclient
</code></pre><h4 id="2-ipfs統合">
<a class="header-anchor" href="#2-ipfs%e7%b5%b1%e5%90%88"></a>
2. IPFS統合
</h4><p>IPFS（InterPlanetary File System）は、ピアツーピアのファイルストレージプロトコルです。<code>ipfshttpclient</code>ライブラリを使用してIPFSネットワークと対話できます。</p>
<p>まず、IPFSノードをインストールして実行していることを確認してください。まだIPFSをインストールしていない場合は、<a href="https://ipfs.io">IPFS公式サイト</a>でインストールガイドを見つけることができます。</p>
<p>以下は、画像をIPFSにアップロードするコード例です：</p>
<pre tabindex="0"><code>import ipfshttpclient

def upload_to_ipfs(file_path):
    client = ipfshttpclient.connect(&#39;/ip4/127.0.0.1/tcp/5001&#39;)
    res = client.add(file_path)
    return res[&#39;Hash&#39;]
</code></pre><h4 id="3-ブロックチェーン統合">
<a class="header-anchor" href="#3-%e3%83%96%e3%83%ad%e3%83%83%e3%82%af%e3%83%81%e3%82%a7%e3%83%bc%e3%83%b3%e7%b5%b1%e5%90%88"></a>
3. ブロックチェーン統合
</h4><p><code>web3.py</code>ライブラリを使用してIPFSのCIDをブロックチェーンに記録します。ここではイーサリアム（Ethereum）をサンプルブロックチェーンとして使用します。</p>
<p>以下は、IPFSのCIDを保存するための簡単なスマートコントラクトの例です：</p>
<pre tabindex="0"><code>pragma solidity ^0.8.0;

contract IPFSStorage {
    mapping(address =&gt; string[]) public userCIDs;

    function storeCID(string memory cid) public {
        userCIDs[msg.sender].push(cid);
    }

    function getCIDs() public view returns (string[] memory) {
        return userCIDs[msg.sender];
    }
}
</code></pre><p>このコントラクトをコンパイルしてデプロイした後、以下のPythonコードを使用してスマートコントラクトと対話します：</p>
        
        <hr><p>この記事は2024-06-17に<a href='https://zh.moejue.cn/'>阿珏酱のBlog</a>で公開され、最終更新日は2025-07-06です</p>]]>
      </description>
      
        <category>折腾代码</category>
      
    </item>
    
    

    <item>
      <title>Web3.0とは何か？ブロックチェーンとの関係は？</title>
      <link>https://zh.moejue.cn/ja/posts/202/</link>
      <pubDate>Mon, 17 Jun 2024 12:59:22 &#43;0000</pubDate>
      <author>xxx@example.com (MoeJue)</author>
      <guid>https://zh.moejue.cn/ja/posts/202/</guid>
      <description>
        <![CDATA[<h1>Web3.0とは何か？ブロックチェーンとの関係は？</h1><p>著者: MoeJue(xxx@example.com)</p>
        
          <p>また一つ、よくわからない言葉が出てきましたね-_-。以下に要点をまとめてみました。</p>
<h2 id="web30とは何か">
<a class="header-anchor" href="#web30%e3%81%a8%e3%81%af%e4%bd%95%e3%81%8b"></a>
web3.0とは何か
</h2><p>Web 3.0（Web3）は、次世代のインターネットの発展方向であり、より分散化され、ユーザーがコントロールし、データが保護されるネットワーク環境を構築することを目指しています。これまでのWeb 1.0（静的なウェブページ）やWeb 2.0（動的でインタラクティブなウェブページやソーシャルメディア）とは異なり、Web 3.0の核心的な理念と技術には以下の側面が含まれます。</p>
<h3 id="非中央集権化">
<a class="header-anchor" href="#%e9%9d%9e%e4%b8%ad%e5%a4%ae%e9%9b%86%e6%a8%a9%e5%8c%96"></a>
非中央集権化：
</h3><ul>
<li>ブロックチェーン技術：Web 3.0の核心はブロックチェーン技術であり、すべての取引やデータの変更を記録する分散型台帳を提供します。これは、データが単一の中央サーバーによって管理されるのではなく、複数のノードに分散されることを意味します。</li>
<li>分散型アプリケーション（DApps）：これらのアプリケーションはブロックチェーンネットワーク上で実行され、中央集権的な管理者が存在しません。DAppsのユーザーは、仲介機関を介さずに直接取引や対話を行うことができます。</li>
</ul>
<h3 id="ユーザーコントロールとデータ保護">
<a class="header-anchor" href="#%e3%83%a6%e3%83%bc%e3%82%b6%e3%83%bc%e3%82%b3%e3%83%b3%e3%83%88%e3%83%ad%e3%83%bc%e3%83%ab%e3%81%a8%e3%83%87%e3%83%bc%e3%82%bf%e4%bf%9d%e8%ad%b7"></a>
ユーザーコントロールとデータ保護：
</h3><ul>
<li>自己主権型アイデンティティ：Web 3.0では、ユーザーは自身のデジタルアイデンティティとデータを完全にコントロールできます。暗号技術を通じて、ユーザーは誰が自分のデータにアクセスできるか、またそのデータをどのように使用するかを決定できます。</li>
<li>データ所有権：ユーザーのデータは分散型ネットワーク上に保存され、大手企業による集中管理ではなく、ユーザー自身がデータの所有権を持ちます。</li>
</ul>
<h3 id="スマートコントラクト">
<a class="header-anchor" href="#%e3%82%b9%e3%83%9e%e3%83%bc%e3%83%88%e3%82%b3%e3%83%b3%e3%83%88%e3%83%a9%e3%82%af%e3%83%88"></a>
スマートコントラクト：
</h3><ul>
<li>自動実行プロトコル：スマートコントラクトは、ブロックチェーン上で実行される自動化されたプロトコルであり、特定の条件が満たされると自動的に実行されます。この技術は、金融取引、サプライチェーン管理、法的な契約など、さまざまなシーンで利用できます。</li>
<li>相互運用性：Web 3.0は、異なるブロックチェーンや分散型ネットワーク間の相互運用性を実現し、データや資産が異なるプラットフォーム間でシームレスに移動できるようにすることを目指しています。</li>
</ul>
<h3 id="トラストレスと透明性">
<a class="header-anchor" href="#%e3%83%88%e3%83%a9%e3%82%b9%e3%83%88%e3%83%ac%e3%82%b9%e3%81%a8%e9%80%8f%e6%98%8e%e6%80%a7"></a>
トラストレスと透明性：
</h3><ul>
<li>トラストレスなメカニズム：Web 3.0はブロックチェーン技術を通じてトラストレスなメカニズムを実現します。つまり、参加者はお互いを信頼したり、第三者の仲介者に依存したりすることなく、安全な取引や対話を行うことができます。</li>
<li>透明性：すべての取引やデータの変更はブロックチェーン上に記録され、公開され透明であり、改ざん不可能です。これにより、信頼性とセキュリティが向上します。</li>
</ul>
<h3 id="web-30の応用シーン">
<a class="header-anchor" href="#web-30%e3%81%ae%e5%bf%9c%e7%94%a8%e3%82%b7%e3%83%bc%e3%83%b3"></a>
Web 3.0の応用シーン
</h3><ol>
<li>分散型金融（DeFi）：スマートコントラクトとブロックチェーン技術を通じて、貸付、取引、投資などの仲介者を必要としない金融サービスを提供します。</li>
<li>デジタルアイデンティティ：ユーザーは自身のデジタルアイデンティティを作成・管理し、個人データのアクセスと使用をコントロールできます。</li>
<li>サプライチェーン管理：ブロックチェーン技術を通じて、サプライチェーンの透明性と追跡可能性を実現し、偽造や詐欺を防止します。</li>
<li>コンテンツ制作と配信：アーティスト、ミュージシャン、作家は、直接視聴者と対話し取引を行うことで、より公平な収益分配を得ることができます。</li>
</ol>
<h2 id="ではブロックチェーンとは何か">
<a class="header-anchor" href="#%e3%81%a7%e3%81%af%e3%83%96%e3%83%ad%e3%83%83%e3%82%af%e3%83%81%e3%82%a7%e3%83%bc%e3%83%b3%e3%81%a8%e3%81%af%e4%bd%95%e3%81%8b"></a>
では、ブロックチェーンとは何か？
</h2><p>ブロックチェーン技術は、分散型台帳技術（Distributed Ledger Technology, DLT）の一種であり、取引や情報を記録するための改ざん不可能で非中央集権的なデータベースです。ブロックチェーン技術の核心的な考え方は、非中央集権的な方法でデータの安全性、透明性、信頼性を実現することです。</p>
<h3 id="ブロックチェーンの基本原理">
<a class="header-anchor" href="#%e3%83%96%e3%83%ad%e3%83%83%e3%82%af%e3%83%81%e3%82%a7%e3%83%bc%e3%83%b3%e3%81%ae%e5%9f%ba%e6%9c%ac%e5%8e%9f%e7%90%86"></a>
ブロックチェーンの基本原理
</h3><ol>
<li>
<p>ブロック（Block）：</p>
<ul>
<li>ブロックは取引記録を含むデータパッケージです。各ブロックには複数の取引と、そのブロックを一位に識別するためのハッシュ値が含まれています。</li>
<li>ブロックには前のブロックのハッシュ値も含まれており、これによりすべてのブロックが鎖のようにつながり、ブロックチェーンを形成します。</li>
</ul>
</li>
<li>
<p>チェーン（Chain）：</p>
<ul>
<li>ブロックはハッシュ値によって相互に連結され、チェーン構造を形成します。各ブロックが前のブロックのハッシュ値を含むため、ブロックチェーン内のデータを改ざんすることは非常に困難です。</li>
<li>あるブロックのデータを変更しようとすると、そのブロックおよびそれに続くすべてのブロックのハッシュ値が変化するため、これらすべてのブロックのハッシュ値を再計算する必要があり、これはほぼ不可能です。</li>
</ul>
</li>
<li>
<p>非中央集権化（Decentralization）：</p>
<ul>
<li>ブロックチェーンネットワーク内のすべてのノード（コンピュータ）は、ブロックチェーンの完全なコピーを保持しており、これらのコピーはコンセンサスメカニズムによって一貫性が保たれています。</li>
<li>中央機関がブロックチェーンを管理・制御することはなく、データはすべてのノードによって共同で維持されます。</li>
</ul>
</li>
<li>
<p>コンセンサスメカニズム（Consensus Mechanism）：</p>
<ul>
<li>ブロックチェーンネットワークは、すべてのノードがブロックチェーンの状態について合意に達することを保証するためにコンセンサスメカニズムを使用します。一般的なコンセンサスメカニズムには、プルーフ・オブ・ワーク（Proof of Work, PoW）やプルーフ・オブ・ステーク（Proof of Stake, PoS）があります。</li>
<li>プルーフ・オブ・ワーク（PoW）：マイナーが複雑な数学的問題を解くことで取引を検証し、ブロックチェーンに追加します。問題を解くには大量の計算能力が必要であり、これによりブロックチェーンのセキュリティが確保されます。</li>
<li>プルーフ・オブ・ステーク（PoS）：バリデーターが保有する暗号資産の量やその他の要因に基づいて取引を検証し、それに応じた報酬を得ます。</li>
</ul>
</li>
<li>
<p>暗号技術（Cryptography）：</p>
        
        <hr><p>この記事は2024-06-17に<a href='https://zh.moejue.cn/'>阿珏酱のBlog</a>で公開され、最終更新日は2025-07-06です</p>]]>
      </description>
      
        <category>教程</category>
      
    </item>
    
    

    <item>
      <title>Git の簡単な使用手順</title>
      <link>https://zh.moejue.cn/ja/posts/64/</link>
      <pubDate>Tue, 03 Apr 2018 12:04:32 &#43;0000</pubDate>
      <author>xxx@example.com (MoeJue)</author>
      <guid>https://zh.moejue.cn/ja/posts/64/</guid>
      <description>
        <![CDATA[<h1>Git の簡単な使用手順</h1><p>著者: MoeJue(xxx@example.com)</p>
        
          <p>この記事では概念的な知識については詳しく説明しません。ただのメモです。これは単なるステップバイステップのガイドです。障害に遭遇した場合は、Google で調べてください。</p>
<ul>
<li>SSH を使用して Git と GitHub 間のバインドを完了します</li>
</ul>
<p>1\。 「SSHキー」を生成する</p>
<p>ssh-keygen-trsa</p>
<p>RSA アルゴリズムを指定してキーを生成すると、id_rsa と id_rsa.pub という 2 つのファイル、つまりキー id_rsa と公開キー id_rsa.pub が生成されます。これら 2 つのファイルについては、</p>
<p>2\。 SSHキーを追加する
github.com -&gt; 設定 -&gt; SSH と GPG -&gt; 新しい SSH キー
公開キー id_rsa.pub の内容をキーの場所に貼り付け (タイトルの内容を入力しなくても問題ありません)、[SSH キーの追加] をクリックします。</p>
<p>3\。バインドが成功したかどうかを確認する</p>
<p>ssh -T <a href="mailto:git@github.com">git@github.com</a></p>
<ul>
<li>ローカルプロジェクトをgithubにプッシュするコマンド</li>
</ul>
<p>(1) ディレクトリを開きます</p>
<p>CDデモ</p>
<p>(2) gitファイルを生成するためにバージョンライブラリを初期化する</p>
<p>gitの初期化</p>
<p>(3) 全ファイルをキャッシュ領域に追加</p>
<p>git add *</p>
<p>(4) 現在のワークスペースに変更を送信します。</p>
<p>git commit -m &ldquo;最初のコミット&rdquo;</p>
<p>(5) 倉庫をリモートサーバーに接続する</p>
<p>git Remote addorigin <server> (上記のウェアハウスのアドレスです)</p>
<p>(6) 追加したサーバーに変更をプッシュします</p>
        
        <hr><p>この記事は2018-04-03に<a href='https://zh.moejue.cn/'>阿珏酱のBlog</a>で公開され、最終更新日は2025-06-02です</p>]]>
      </description>
      
        <category>教程</category>
      
    </item>
    
    

    <item>
      <title>[ノート]Git常用コマンド大全</title>
      <link>https://zh.moejue.cn/ja/posts/57/</link>
      <pubDate>Sat, 16 Jun 2018 08:56:21 &#43;0000</pubDate>
      <author>xxx@example.com (MoeJue)</author>
      <guid>https://zh.moejue.cn/ja/posts/57/</guid>
      <description>
        <![CDATA[<h1>[ノート]Git常用コマンド大全</h1><p>著者: MoeJue(xxx@example.com)</p>
        
          <p>前回に引き続き、時間を見つけてGitの主要なコマンドをまとめました。非常に素晴らしい、高解像度（1759*3162）のチートシートを見つけました。</p>
<p>ファイルの表示、追加、コミット、削除、復元、変更のリセット</p>
<p>git help <command> # <command>のヘルプを表示</p>
<p>git show # 特定のコミットの内容を表示 git show $id</p>
<p>git co &ndash; <file> # ワークスペースの変更を破棄</p>
<p>git co . # ワークスペースの変更を破棄</p>
<p>git add <file> # 作業ファイルの変更をローカルのステージングエリアにコミット</p>
<p>git add . # 変更されたすべての作業ファイルをステージングエリアにコミット</p>
<p>git rm <file> # バージョン管理からファイルを削除</p>
<p>git rm <file> &ndash;cached # バージョン管理からファイルを削除するが、ファイル自体は削除しない</p>
<p>git reset <file> # ステージングエリアから作業ファイルに復元</p>
<p>git reset &ndash; . # ステージングエリアから作業ファイルに復元</p>
<p>git reset &ndash;hard # 直近のコミットの状態に戻す。つまり、前回のコミット以降のすべての変更を破棄</p>
<p>git ci <file> git ci . git ci -a # git add, git rm, git ciなどの操作を一度にまとめて実行　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　git ci -am &ldquo;some comments&rdquo;</p>
        
        <hr><p>この記事は2018-06-16に<a href='https://zh.moejue.cn/'>阿珏酱のBlog</a>で公開され、最終更新日は2025-06-02です</p>]]>
      </description>
      
        <category>折腾代码</category>
      
    </item>
    
    

    <item>
      <title>[メモ] Git よく使うコマンド大全（シーン別）</title>
      <link>https://zh.moejue.cn/ja/posts/264/</link>
      <pubDate>Mon, 02 Jun 2025 06:58:42 &#43;0000</pubDate>
      <author>xxx@example.com (MoeJue)</author>
      <guid>https://zh.moejue.cn/ja/posts/264/</guid>
      <description>
        <![CDATA[<h1>[メモ] Git よく使うコマンド大全（シーン別）</h1><p>著者: MoeJue(xxx@example.com)</p>
        
          <blockquote>
<p>日常の開発でよく使われるGitの操作をまとめたものです。カテゴリ別に整理されているため、すぐに使い始めたい方や、コマンドを確認したい時に役立ちます。</p>
</blockquote>
<hr>
<h2 id="-基本コマンド">
<a class="header-anchor" href="#-%e5%9f%ba%e6%9c%ac%e3%82%b3%e3%83%9e%e3%83%b3%e3%83%89"></a>
📦 基本コマンド
</h2><p>コマンド</p>
<p>役割</p>
<p><code>git init</code></p>
<p>Gitリポジトリを初期化します（<code>.git</code>フォルダを作成）。</p>
<p><code>git clone &lt;url&gt;</code></p>
<p>リモートリポジトリをローカルにクローンします。</p>
<p><code>git status</code></p>
<p>現在のワーキングディレクトリの状態（ファイルの変更、ステージングなど）を確認します。</p>
<p><code>git add &lt;file&gt;</code></p>
<p>ファイルをステージングエリアに追加します。</p>
<p><code>git commit -m &quot;message&quot;</code></p>
<p>ステージングエリアのファイルをローカルリポジトリにコミットし、コミットメッセージを追加します。</p>
<p><code>git log</code></p>
<p>コミット履歴を表示します。</p>
<hr>
<h2 id="-ブランチ管理">
<a class="header-anchor" href="#-%e3%83%96%e3%83%a9%e3%83%b3%e3%83%81%e7%ae%a1%e7%90%86"></a>
🌱 ブランチ管理
</h2><p>コマンド</p>
<p>役割</p>
<p><code>git branch</code></p>
<p>ローカルブランチの一覧を表示します。</p>
<p><code>git branch &lt;branch-name&gt;</code></p>
<p>新しいブランチを作成します。</p>
<p><code>git checkout &lt;branch-name&gt;</code></p>
<p>指定したブランチに切り替えます。</p>
<p><code>git switch &lt;branch-name&gt;</code></p>
<p>指定したブランチに切り替えます（推奨される新しいコマンド）。</p>
<p><code>git merge &lt;branch-name&gt;</code></p>
<p>指定したブランチを現在のブランチにマージします。</p>
<p><code>git branch -d &lt;branch-name&gt;</code></p>
<p>マージ済みのブランチを削除します。</p>
<p><code>git branch -D &lt;branch-name&gt;</code></p>
<p>ブランチを強制的に削除します。</p>
<hr>
<h2 id="-リモートリポジトリ操作">
<a class="header-anchor" href="#-%e3%83%aa%e3%83%a2%e3%83%bc%e3%83%88%e3%83%aa%e3%83%9d%e3%82%b8%e3%83%88%e3%83%aa%e6%93%8d%e4%bd%9c"></a>
🌍 リモートリポジトリ操作
</h2><p>コマンド</p>
<p>役割</p>
<p><code>git remote -v</code></p>
        
        <hr><p>この記事は2025-06-02に<a href='https://zh.moejue.cn/'>阿珏酱のBlog</a>で公開され、最終更新日は2025-06-02です</p>]]>
      </description>
      
        <category>教程</category>
      
    </item>
    
    

    <item>
      <title>敗者復活戦に勝って、生き返った</title>
      <link>https://zh.moejue.cn/ja/posts/206/</link>
      <pubDate>Thu, 03 Oct 2024 02:48:02 &#43;0000</pubDate>
      <author>xxx@example.com (MoeJue)</author>
      <guid>https://zh.moejue.cn/ja/posts/206/</guid>
      <description>
        <![CDATA[<h1>敗者復活戦に勝って、生き返った</h1><p>著者: MoeJue(xxx@example.com)</p>
        
          <h3 id="近況">
<a class="header-anchor" href="#%e8%bf%91%e6%b3%81"></a>
近況
</h3><p>前回の雑談からもう2ヶ月以上も経ってしまいました。そろそろ自分の考えを整理する時が来たようです。前回は色々と感慨を述べたきり音沙汰がなかったので、少し急ぎすぎたかもしれません。その後の作業が追いつかなくなってしまいました。</p>
<p>また国慶節の季節がやってきました。やはり私の国慶節は「独身の日（ダブルイレブン）」のようなものです。以前所有していた3つのドメイン（52ecy.cn, moeins.cn, moeins.com）は、復活戦には勝ったものの、装備がなくなってしまいました。</p>
<p>そのため、ドメインを新規購入するしかありませんでした。同時にもブログを復旧させました。やはり自分でいじりたいのでしょう。博客园（cnblogs）に間借りするのは、どうも居心地が悪く感じます。</p>
<p>以前からずっと使っていたemlogですが、この機会に思い切ってシステムをWordPressに移行し、同時に新しいテーマに切り替えました。このテーマは<a href="https://www.boxmoe.com/">专收爆米花</a>さんが21年頃にリリースしたもので、当時locで見かけてすぐにstarを付け、私のGitHubで4年間眠っていました<a href="https://github.com/iAJue/lolimeow">lolimeow</a>。当時はずっとemlogを使っていたので、いじるのが面倒だったのです。この機会に乗じて、徹底的にやろうと決め、データの移行やテーマの調整など、かなりの手間をかけました。</p>
<p>作者の方がずっとテーマの更新を積極的に進めてくれていたおかげで、使用中に大きな問題はありませんでした。しかし、私が以前使っていたシステムの機能がいくつか欠けていたので、私もこのテーマを更新し、元のリポジトリにプルリクエストを送りました。上に貼ったGitHubのリンクは私が更新した後のものです。<img src="https://gh-proxy.com/github.com/iAJue/MoeJueBlogPic/blob/master/Images/2024/10/03/78350c19ly8hu90no7xm8j20w414kdue.jpg" alt=""> 最も面倒だったデータ移行の部分ですが、ネットで長いこと探し回ってもexe版しか見つかりませんでした。exe版はなんとなく不安な感じがする上に、私は今Macを使っているので、直接実行することもできません。「ないなら自分で作ればいい」ということで、時間をかけて移行スクリプトを自作するしかありませんでした。GitHubのアドレスは記事の最後に載せてあります。emlogのデータをWordPressに完璧に移行できます。さすが俺！<img src="https://gh-proxy.com/github.com/iAJue/MoeJueBlogPic/blob/master/Images/2024/10/03/78350c19ly8hu86bsccndj21hc0u0gr1.jpg" alt=""></p>
<p>画像はこれまで通り、一部はバックアップとして七牛云（Qiniu Cloud）に、もう一部は新浪图床（Sina Image Hosting）に保存しています。移行してみると、市場には私に適した使いやすい七牛云プラグインがなかったので、また自分で一つ作りました。<img src="https://gh-proxy.com/github.com/iAJue/MoeJueBlogPic/blob/master/Images/2024/10/03/78350c19ly8hu8aervippj20z608i0ws.jpg" alt=""> <img src="https://gh-proxy.com/github.com/iAJue/MoeJueBlogPic/blob/master/Images/2024/10/03/78350c19ly8hu8aexj66gj20zw12yk01.jpg" alt=""></p>
<h3 id="新ドメイン">
<a class="header-anchor" href="#%e6%96%b0%e3%83%89%e3%83%a1%e3%82%a4%e3%83%b3"></a>
新ドメイン
</h3><p>あまり気は進みませんでしたが、またドメインを変更するしかありませんでした。以前のドメインは他人の肥やしになってしまいました。萌音シリーズ：MoeKot.cn。「萌音ノート」「萌音カード」「萌音コミュニティ」「萌音ストア」などを含む萌音シリーズは、今後このドメインの下に置かれます。メインサイトシリーズ：MoeJue.cn。これは私のメインサイトで、ブログやシリーズに属さないプロジェクトなどがこのドメインの下に置かれます。</p>
<h4 id="解説">
<a class="header-anchor" href="#%e8%a7%a3%e8%aa%ac"></a>
解説
</h4><p>Moe: 日本語の「萌え」の読み方で、ローマ字表記です。中国語では一般的に「萌」と訳されます。
Kot: 日本語の「声（こえ）」を意味する言葉で、ローマ字表記です。
Jue: 阿珏（A Jue）ちゃんの簡単な音訳です。</p>
<h3 id="ブログ">
<a class="header-anchor" href="#%e3%83%96%e3%83%ad%e3%82%b0"></a>
ブログ
</h3><p>私はとても昔を懐かしむ情に厚い人間なので、以前のブログもすべて残してあります。<a href="http://xlog.moejue.cn/">Xlog</a> <a href="https://www.cnblogs.com/Ajue">cnblogs</a> <a href="https://log.MoeJue.cn">emlog</a> <a href="https://blog.moejue.cn">Blog</a> 関連サイトのドメインも移行しましたが、すべてをリストアップするのはやめておきます。もちろん、一部のリンクが完全に置換されていない可能性もあります。</p>
<p>すべてのデータは元のままで、誰一人のデータも欠けていません。ブログの登録ユーザーのデータさえも一緒に移行したので、新しいシステムで直接ログインできます。パスワードも同じです。</p>
<h5 id="ぜひstarを付けてください">
<a class="header-anchor" href="#%e3%81%9c%e3%81%b2star%e3%82%92%e4%bb%98%e3%81%91%e3%81%a6%e3%81%8f%e3%81%a0%e3%81%95%e3%81%84"></a>
ぜひstarを付けてください！
</h5><p>使い方もREADME.mdに書いておきました。何か問題があれば、直接issueを立ててください。</p>
<h4 id="emlogからwordpressへの移行スクリプト">
<a class="header-anchor" href="#emlog%e3%81%8b%e3%82%89wordpress%e3%81%b8%e3%81%ae%e7%a7%bb%e8%a1%8c%e3%82%b9%e3%82%af%e3%83%aa%e3%83%97%e3%83%88"></a>
<a href="https://github.com/iAJue/migrate_emlog_to_wp">emlogからWordPressへの移行スクリプト</a>
</h4><p>私のブログは間もなくTencent Cloud開発者コミュニティにも同期される予定です。皆さんのご参加をお待ちしています：<a href="https://cloud.tencent.com/developer/support-plan?invite_code=15kxzzid10tgx">https://cloud.tencent.com/developer/support-plan?invite_code=15kxzzid10tgx</a></p>
        
        <hr><p>この記事は2024-10-03に<a href='https://zh.moejue.cn/'>阿珏酱のBlog</a>で公開され、最終更新日は2024-10-26です</p>]]>
      </description>
      
        <category>折腾代码</category>
      
    </item>
    
    

    <item>
      <title>Android APK インストール パッケージの AndroidManifest.xml ファイルを表示します。</title>
      <link>https://zh.moejue.cn/ja/posts/110/</link>
      <pubDate>Sun, 19 Apr 2020 09:15:54 &#43;0000</pubDate>
      <author>xxx@example.com (MoeJue)</author>
      <guid>https://zh.moejue.cn/ja/posts/110/</guid>
      <description>
        <![CDATA[<h1>Android APK インストール パッケージの AndroidManifest.xml ファイルを表示します。</h1><p>著者: MoeJue(xxx@example.com)</p>
        
          <p><strong>原因</strong>
先週、私は Android システムのファクトリープッシュ機能に取り組んでいました。一部のモデルは工場出荷時にオフラインにプッシュできないため、apk を解凍し、パッケージ化パラメータに問題があるかどうかを確認します。</p>
<p><strong>序文</strong>
Android 開発では、自分のアプリケーションから他のアプリケーションのインターフェイスにジャンプする必要がある場合がありますが、他のアプリケーションのパッケージ名とクラス名が分からないと、これを行うのは困難です。最も簡単な方法は、アプリケーションの apk ファイルをダウンロードし、拡張子を zip または rar に変更して、ファイルを解凍することです。解凍したファイルの中に AndroidManifest.xml ファイルがあるのですが、開いてみると文字化けしていて恥ずかしいです。どうすればいいですか？</p>
<p>AXMLPrinter2.jar は、一般的に使用される APK 逆コンパイル ツールです。これは主に、パッケージ名、バージョン番号、アイコン、その他の情報を含む apk ファイルを逆コンパイルするために使用されます。 AXMLPrinter2 を使用して androidmanifest.xml を逆コンパイルし、プレーン テキストで表示できます。</p>
<p><strong>使用方法</strong></p>
<ol>
<li>ダウンロードツール AXMLPrinter2.jar ツールのアドレス: <a href="https://code.google.com/archive/p/android4me/downloads">https://code.google.com/archive/p/android4me/downloads</a></li>
<li>表示する AndroidManfist.xml ファイルをツールと同じフォルダーにコピーします。</li>
<li>現在のフォルダーで DOS ウィンドウを開きます。</li>
<li>以下のコマンドを実行します。</li>
</ol>
<p>java -jar AXMLPrinter2.jar AndroidManifest.xml &raquo; AndroidManifest.txt</p>
<p>このコマンドを実行すると、フォルダー内にデコードされたファイルである AndroidManifest.txt ファイルが生成されます。</p>
<p>もちろん、実行後にエラーが発生するものもあります。「java」は内部コマンドでも外部コマンドでも、操作可能なプログラムやバッチ ファイルでもありません。<br>
これは、Java 環境がインストールされていないか、環境変数が設定されていないことが原因で発生します。</p>
<p><strong>JDK をインストールします</strong>
まず、JDK のインストールプロセスを確認してみましょう</p>
<p>1\。 JDKをダウンロードしてインストールします</p>
<p>JDK1.6、1.7、または 1.8 をダウンロードすることを選択できます。使いたいものをダウンロードしてください。
JDK をダウンロードするための公式 Web サイト <a href="https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html">https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html</a>
インストールは非常に簡単で、次のステップは簡単です。ここでは詳細には触れません。</p>
<p>2\。 JDK環境変数を構成する</p>
<p>(1) コンピュータの「マイ コンピュータ」を右クリックし、Win10 では「このコンピュータ」を選択し、「プロパティ」を選択し、システムの詳細設定を選択し、新しいインターフェースで「環境変数」を選択します。「システム変数」を編集するだけです。
<img src="https://gh-proxy.com/github.com/iAJue/MoeJueBlogPic/blob/master/Images/2020/04/19/0072Vf1ply1gdz8ohzbxnj30y10hz435.jpg" alt="">
(2) 「新規」をクリックして「JAVA_HOME」という名前の変数を追加します。変数の値は「C:\Program Files\Java\jdk1.8.0_60」です。この値は、インストールした JDK パスです。インストールした場所にそのアドレスを使用するだけです。
<img src="https://gh-proxy.com/github.com/iAJue/MoeJueBlogPic/blob/master/Images/2020/04/19/0072Vf1ply1gdz8ozylg5j30m20lldi6.jpg" alt="">「CLASSPATH」という名前の新しい変数を作成します。変数値は「.;%JAVA_HOME%/lib/dt.jar;%JAVA_HOME%/lib/tools.jar」です。必ず保存してください。 「.;」を見逃さないように注意してください。値にすべての記号を含める必要があります。</p>
        
        <hr><p>この記事は2020-04-19に<a href='https://zh.moejue.cn/'>阿珏酱のBlog</a>で公開され、最終更新日は2020-04-19です</p>]]>
      </description>
      
        <category>折腾代码</category>
      
    </item>
    
    

    <item>
      <title>支付宝対面決済連携</title>
      <link>https://zh.moejue.cn/ja/posts/107/</link>
      <pubDate>Sat, 04 Apr 2020 02:35:18 &#43;0000</pubDate>
      <author>xxx@example.com (MoeJue)</author>
      <guid>https://zh.moejue.cn/ja/posts/107/</guid>
      <description>
        <![CDATA[<h1>支付宝対面決済連携</h1><p>著者: MoeJue(xxx@example.com)</p>
        
          <p>当面付（対面支払い）は、その名の通り対面での支払いを指し、店舗がオフラインの消費シーンで迅速な集金を可能にするものです。当面付製品は、バーコード支払いとQRコード決済の2種類の支払い方法をサポートしています。
ここで連携するのはQRコード決済です。
QRコード決済とは、ユーザーがAlipayウォレットの「スキャン」機能を開き、店舗がレジのシーンで提示するQRコードをスキャンして支払いを行うモードを指します。このモードは、オフラインの実店舗での支払い、対面支払いなどのシナリオに適しています。ビジネスフローは以下の図の通りです。
<img src="https://gh-proxy.com/github.com/iAJue/MoeJueBlogPic/blob/master/Images/2020/04/04/0072Vf1ply1gciwmfk760j30kf071dfz.jpg" alt="">
当面付の契約は非常に簡単で、個人事業主/個人商店の契約が許可されています。そのため、この方法はオンラインのQRコード決済にも大量に利用されていますが、Alipayの関連規約に違反するため、一定のリスクがあります。技術交流として、この問題は一旦置いておきましょう。</p>
<p>技術連携としては、当面付製品を契約していなくても開発を進めることができます。
支払い機能は取引と資金に直接関わるため、開発者が支払い機能をデバッグしやすいように、オープンプラットフォームはサンドボックス環境（サンドボックス環境アカウントとサンドボックス版Alipayウォレットを含む）を用意しています。これにより、開発者はサンドボックス環境でデバッグできます。<a href="https://docs.open.alipay.com/200/105311">サンドボックスへの接続方法</a>と<a href="https://openhome.alipay.com/platform/appDaily.htm">サンドボックス環境への接続</a>をクリックして詳細を確認してください。
<img src="https://gh-proxy.com/github.com/iAJue/MoeJueBlogPic/blob/master/Images/2020/04/04/0072Vf1ply1gciwn0aa2ej30sq0ptwi3.jpg" alt="">
そのため、私の開発ではサンドボックス環境を使用しています。何しろ中にはたくさんのお金があるので、自由に使えますからね。
<img src="https://gh-proxy.com/github.com/iAJue/MoeJueBlogPic/blob/master/Images/2020/04/04/0072Vf1ply1gciwlx66oxj30cn0qo0tj.jpg" alt="">
まず、対応する開発言語のSDKをダウンロードします。ダウンロード：https://docs.open.alipay.com/194/105201/
QRコード決済ドキュメント：https://docs.open.alipay.com/194/106078/</p>
<p><strong>キーの設定</strong>
取引当事者（加盟店とAlipay）の身元とデータセキュリティを確保するため、開発者はインターフェースを呼び出す前に、双方のキーを設定し、取引データの双方検証を行う必要があります。
<a href="https://docs.open.alipay.com/291/105971">Alipayオープンプラットフォーム開発アシスタント</a>をダウンロードしてキーを生成してください。
キー生成後、開発者はオープンプラットフォーム開発者センターでキー設定を行う必要があります。設定完了後、Alipay公開鍵を取得できます。
<img src="https://gh-proxy.com/github.com/iAJue/MoeJueBlogPic/blob/master/Images/2020/04/04/0072Vf1ply1gciwnhq0ztj30u00lo0y6.jpg" alt="">
<strong>設計と連携</strong>
私の設計ではポーリング（後述）を使用する必要がないため、追加していません。
以下は私の業務における関連コードです。</p>
<pre><code>public function pay(){

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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


}
</code></pre>
<p>以上が当面付の事前注文コードです。
このSDKについては、どうしても文句を言いたいです。誰が書いたデモなのか、PHPの例にlotusphpフレームワークを導入していて、大量の不要なものが含まれており、私たち開発者が受け入れられるかどうかを全く考慮していません。
私も少し時間をかけてSDKを簡素化し、必要な部分だけを取り出して自分のフレームワークに組み込み、namespaceとオートロードを追加しました。
<img src="https://gh-proxy.com/github.com/iAJue/MoeJueBlogPic/blob/master/Images/2020/04/04/0072Vf1ply1gciwodh05dj30af0egdho.jpg" alt="">
QRコード決済には独自の機能があります&mdash;-非同期通知です。
これはオンライン決済で最も必要とされる機能でもあります。
レジが事前注文リクエストAPIを呼び出してQRコードを生成しユーザーに表示した後、ユーザーが携帯電話でQRコードをスキャンして支払いを行うと、Alipayは当該注文の変更情報を、加盟店が事前注文リクエストを呼び出した際に渡した非同期通知アドレス <code>notify_url</code> に沿って、POSTリクエストの形式で支払い結果をパラメータとして加盟店システムに通知します。
<img src="https://gh-proxy.com/github.com/iAJue/MoeJueBlogPic/blob/master/Images/2020/04/04/0072Vf1ply1gciwouog84j30o10cu768.jpg" alt="">
この非同期通知アドレスは、アプリケーション側で設定する必要があることを覚えておいてください。</p>
        
        <hr><p>この記事は2020-04-04に<a href='https://zh.moejue.cn/'>阿珏酱のBlog</a>で公開され、最終更新日は2020-04-04です</p>]]>
      </description>
      
        <category>折腾代码</category>
      
    </item>
    
    

    <item>
      <title>Discuz!フォーラム 個人スペースのCSSカスタマイズ</title>
      <link>https://zh.moejue.cn/ja/posts/109/</link>
      <pubDate>Tue, 24 Mar 2020 13:23:51 &#43;0000</pubDate>
      <author>xxx@example.com (MoeJue)</author>
      <guid>https://zh.moejue.cn/ja/posts/109/</guid>
      <description>
        <![CDATA[<h1>Discuz!フォーラム 個人スペースのCSSカスタマイズ</h1><p>著者: MoeJue(xxx@example.com)</p>
        
          <p>先日、暇だったのでDiscuzフォーラムの脆弱性を探してみたところ、本当に見つかりました。ついでにツールを作成し、勢いでこの記事を書いています。
以下が事の経緯です。
<img src="https://gh-proxy.com/github.com/iAJue/MoeJueBlogPic/blob/master/Images/2020/03/24/0072Vf1ply1gd4tebhwgwj309s0aojss.jpg" alt="">
この脆弱性はウェブサイトに大きな危害を与えるものではなく、個人スペースのCSSスタイルをカスタマイズできるだけで、サイトのデータに脅威を与えることはありませんので、ご安心ください。</p>
<p>このツールを使えば、Discuzの個人スペースのCSSスタイルをカスタマイズでき、個人スペースを豊かに美化し、単調さをなくすことができます。</p>
<ul>
<li>テストしたDiscuzのバージョンはX3.4です。他のバージョンはご自身でテストしてください。</li>
<li>全球主机交流论坛（管理人さん、お許しを）でのみテストしました。同じバージョンのDiscuzであれば理論上は共通で使えるはずです。</li>
<li>個人スペースが開設されていないフォーラムでは使用できません。</li>
<li>カスタムCSSは多すぎないようにし、失敗を避けるために一行に圧縮することをお勧めします。</li>
<li>プロトコルヘッダーは通常、変更する必要はありません。テキストボックスを設置したのは、主に拡張性を考慮したためです。</li>
<li>もしlocフォーラムで操作する場合、デフォルトで阿珏ちゃんをフォローし、友達に追加します。[#手動でニヤリ + 保身のための犬アイコン]</li>
</ul>
<p>本ソフトウェアはローカルでリクエストを送信するのみで、サーバーにデータをアップロードすることはありません。
ソフトウェアはパック（圧縮・暗号化）されているため、ウイルス対策ソフトが誤検知する可能性がありますが、安心してご使用ください<img src="https://gh-proxy.com/github.com/iAJue/MoeJueBlogPic/blob/master/Images/2020/03/24/0072Vf1ply1gd46ipbb1uj30jl0drac8.jpg" alt="">
<strong>Cookieの取得</strong></p>
<hr>
<ul>
<li>ブラウザで開発者ツール（F12）を開き、対象のウェブサイトにアクセスします。ログイン状態であればどのページでも構いません。開発者ツールで「Network」タブに切り替え、ページを更新（F5）します。現在のドメインのリクエストデータを見つけてクリックし、「Headers」タブの「Request Headers」にあるcookieを探します。皆さんが私の言っていることを理解できないだろうと思ったので、特別に図を用意しました。</li>
</ul>
<blockquote>
<p><img src="https://gh-proxy.com/github.com/iAJue/MoeJueBlogPic/blob/master/Images/2020/03/24/0072Vf1ply1gd47v5klf2j30iq0hhjw1.jpg" alt=""></p>
</blockquote>
<ul>
<li>2つ目の方法はより簡単で迅速ですが、どのcookieが必要か分かっている場合に適しています。下の図のように操作します。</li>
</ul>
<blockquote>
<p><img src="https://gh-proxy.com/github.com/iAJue/MoeJueBlogPic/blob/master/Images/2020/03/24/0072Vf1ply1gd47uobcsaj30nj0ammz9.jpg" alt=""></p>
</blockquote>
<p>1つ目の方法で使う開発者ツールは、以前のブログ記事でも使用しましたが、cookieの取得方法については説明していませんでした。やはり1つ目の方法をお勧めします。cookieは多くても問題ありませんが、少ないと動作しません。
<strong>免責事項</strong></p>
<hr>
<ol>
<li>
<p>本ソフトウェアは学習と交流のみを目的としています！</p>
</li>
<li>
<p>本ソフトウェアの作者は一切の責任を負いません！</p>
</li>
<li>
<p>本ソフトウェアを使用した場合、本規約に同意したものとみなします！</p>
</li>
</ol>
<p><strong>ダウンロード</strong></p>
<hr>
<p>以下のダウンロードスタイルは何年も使っていませんでしたが、今日ついに復活させました。
.down_link{background:url(&lsquo;<a href="https://www.52ecy.cn/content/uploadfile/201707/md-bg.jpeg%27">https://www.52ecy.cn/content/uploadfile/201707/md-bg.jpeg'</a>) 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: &ldquo;Open Sans&rdquo;,&ldquo;Hiragino Sans GB&rdquo;,&ldquo;Microsoft YaHei&rdquo;,&ldquo;WenQuanYi Micro Hei&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: &ldquo;Open Sans&rdquo;,&ldquo;Hiragino Sans GB&rdquo;,&ldquo;Microsoft YaHei&rdquo;,&ldquo;WenQuanYi Micro Hei&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: &ldquo;Open Sans&rdquo;,&ldquo;Hiragino Sans GB&rdquo;,&ldquo;Microsoft YaHei&rdquo;,&ldquo;WenQuanYi Micro Hei&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: &ldquo;Open Sans&rdquo;,&ldquo;Hiragino Sans GB&rdquo;,&ldquo;Microsoft YaHei&rdquo;,&ldquo;WenQuanYi Micro Hei&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: &ldquo;Open Sans&rdquo;,&ldquo;Hiragino Sans GB&rdquo;,&ldquo;Microsoft YaHei&rdquo;,&ldquo;WenQuanYi Micro Hei&rdquo;,Arial,Verdana,Tahoma,sans-serif; font-size: 14px; margin: -4px 20px 0 0; padding: 8px 30px;}</p>
        
        <hr><p>この記事は2020-03-24に<a href='https://zh.moejue.cn/'>阿珏酱のBlog</a>で公開され、最終更新日は2020-03-24です</p>]]>
      </description>
      
        <category>折腾代码</category>
      
    </item>
    
    

    <item>
      <title>フォームをスマートに送信するには</title>
      <link>https://zh.moejue.cn/ja/posts/91/</link>
      <pubDate>Mon, 06 May 2019 07:28:33 &#43;0000</pubDate>
      <author>xxx@example.com (MoeJue)</author>
      <guid>https://zh.moejue.cn/ja/posts/91/</guid>
      <description>
        <![CDATA[<h1>フォームをスマートに送信するには</h1><p>著者: MoeJue(xxx@example.com)</p>
        
          <p>これは非常に基本的なHTMLフォームの送信に関する問題ですが、非常に実用的なテクニックでもあります。
私の業務シーンは次のとおりです：
inputを動的に作成できるフォームです。下の図のように。
<img src="https://gh-proxy.com/github.com/iAJue/MoeJueBlogPic/blob/master/Images/2019/05/06/0072Vf1pgy1g1v9kcon30j30l007bdgd.jpg" alt="">
これは、inputのnameを固定値にできないことを意味します。さもなければ、間違いなく上書きされてしまいます。</p>
<p>1つ目は、従来の一般的な送信方法で、送信する各inputに一意のnameを付けます。</p>
<form id="form1" action="./index.php" method="get">
    <div class="form-control">
        <input type="text" name="name1" />
        <input type="text" name="num1" />
        <input type="text" name="img1" />
    </div>
    <br>
    <div class="form-control">
        <input type="text" name="name2" />
        <input type="text" name="num2" />
        <input type="text" name="img2" />
    </div>
    <br>
    <div class="form-control">
        <input type="text" name="name3" />
        <input type="text" name="num3" />
        <input type="text" name="img3" />
    </div>
    ......
  <input type="submit" value="Submit" />
</form>
<p>ブラウザが送信したデータをキャプチャした形式は次のようになります。
<img src="https://gh-proxy.com/github.com/iAJue/MoeJueBlogPic/blob/master/Images/2019/05/06/0072Vf1pgy1g1va4e7vtmj30bx04zdg1.jpg" alt="">
サーバー側で取得して出力するとこのようになり、バックエンドでのデータ処理には非常に不親切です。</p>
<p><img src="https://gh-proxy.com/github.com/iAJue/MoeJueBlogPic/blob/master/Images/2019/05/06/0072Vf1pgy1g1va3y1ep2j309805i0sk.jpg" alt=""></p>
<p>2つ目は、配列形式でのフォーム送信です。</p>
<form id="form1" action="./index.php" method="get">
    <div class="form-control">
        <input type="text" name="infos\[1\]\[name\]" />
        <input type="text" name="infos\[1\]\[num\]" />
        <input type="text" name="infos\[1\]\[img\]" />
    </div>
    <br>
    <div class="form-control">
        <input type="text" name="infos\[2\]\[name\]" />
        <input type="text" name="infos\[2\]\[num\]" />
        <input type="text" name="infos\[2\]\[img\]" />
    </div>
    <br>
    <div class="form-control">
        <input type="text" name="infos\[3\]\[name\]" />
        <input type="text" name="infos\[3\]\[num\]" />
        <input type="text" name="infos\[3\]\[img\]" />
    </div>
    ......
  <input type="submit" value="Submit" />
</form>
<p>ブラウザとバックエンドでの出力はそれぞれ次のようになります。
<img src="https://gh-proxy.com/github.com/iAJue/MoeJueBlogPic/blob/master/Images/2019/05/06/0072Vf1pgy1g1va7ioy7qj30cg0c3q2s.jpg" alt="">
<img src="https://gh-proxy.com/github.com/iAJue/MoeJueBlogPic/blob/master/Images/2019/05/06/0072Vf1pgy1g1va7js1u3j30bd04v74j.jpg" alt=""></p>
<p>よく見ると、送信されたnameの値が変化し、同じような？配列？になっていることがわかります。
バックエンドに送信すると、データが以前よりもずっと整理されていることがわかります。
ただし、ここで注意すべき点は、送信する配列のキーに引用符を使用する必要はないということです。さもなければ、引用符もキーの一部になってしまいます。</p>
<p>もちろん、実際の開発では、送信するグループの数（上記の1、2、3のような）が不確定で、フロントエンドで自由に追加できるという問題に遭遇することもあります。このような場合、どうやって配列を使ってこれらの内容を送信すればよいのでしょうか？
以下が私の業務での実際の解決策です<img src="https://gh-proxy.com/github.com/iAJue/MoeJueBlogPic/blob/master/Images/2019/05/06/0072Vf1pgy1g1v9o6jon8j316g0fwwh3.jpg" alt="">
このようにすれば、2次元配列のキーを自分で管理する必要がなくなり、ブラウザが自動的に生成してくれます。
<img src="https://gh-proxy.com/github.com/iAJue/MoeJueBlogPic/blob/master/Images/2019/05/06/0072Vf1pgy1g1v9o5uhnuj30a109igli.jpg" alt="">
バックエンドで受信したデータはこのようになり、非常に処理しやすくなります。
<img src="https://gh-proxy.com/github.com/iAJue/MoeJueBlogPic/blob/master/Images/2019/05/06/0072Vf1pgy1g1vaez0ltqj30730bya9y.jpg" alt="">
この方法は、不確定な数の関連データセットをまとめて送信する場合に適しています。
一件落着！〜</p>
        
        <hr><p>この記事は2019-05-06に<a href='https://zh.moejue.cn/'>阿珏酱のBlog</a>で公開され、最終更新日は2019-05-06です</p>]]>
      </description>
      
        <category>折腾代码</category>
      
    </item>
    
  </channel>
</rss>
