敗者復活戦に勝って、生き返った

近況 前回の雑談からもう2ヶ月以上も経ってしまいました。そろそろ自分の考えを整理する時が来たようです。前回は色々と感慨を述べたきり音沙汰がなかったので、少し急ぎすぎたかもしれません。その後の作業が追いつかなくなってしまいました。 また国慶節の季節がやってきました。やはり私の国慶節は「独身の日(ダブルイレブン)」のようなものです。以前所有していた3つのドメイン(52ecy.cn, moeins.cn, moeins.com)は、復活戦には勝ったものの、装備がなくなってしまいました。 そのため、ドメインを新規購入するしかありませんでした。同時にもブログを復旧させました。やはり自分でいじりたいのでしょう。博客园(cnblogs)に間借りするのは、どうも居心地が悪く感じます。 以前からずっと使っていたemlogですが、この機会に思い切ってシステムをWordPressに移行し、同時に新しいテーマに切り替えました。このテーマは专收爆米花さんが21年頃にリリースしたもので、当時locで見かけてすぐにstarを付け、私のGitHubで4年間眠っていましたlolimeow。当時はずっとemlogを使っていたので、いじるのが面倒だったのです。この機会に乗じて、徹底的にやろうと決め、データの移行やテーマの調整など、かなりの手間をかけました。 作者の方がずっとテーマの更新を積極的に進めてくれていたおかげで、使用中に大きな問題はありませんでした。しかし、私が以前使っていたシステムの機能がいくつか欠けていたので、私もこのテーマを更新し、元のリポジトリにプルリクエストを送りました。上に貼ったGitHubのリンクは私が更新した後のものです。 最も面倒だったデータ移行の部分ですが、ネットで長いこと探し回ってもexe版しか見つかりませんでした。exe版はなんとなく不安な感じがする上に、私は今Macを使っているので、直接実行することもできません。「ないなら自分で作ればいい」ということで、時間をかけて移行スクリプトを自作するしかありませんでした。GitHubのアドレスは記事の最後に載せてあります。emlogのデータをWordPressに完璧に移行できます。さすが俺! 画像はこれまで通り、一部はバックアップとして七牛云(Qiniu Cloud)に、もう一部は新浪图床(Sina Image Hosting)に保存しています。移行してみると、市場には私に適した使いやすい七牛云プラグインがなかったので、また自分で一つ作りました。 新ドメイン あまり気は進みませんでしたが、またドメインを変更するしかありませんでした。以前のドメインは他人の肥やしになってしまいました。萌音シリーズ:MoeKot.cn。「萌音ノート」「萌音カード」「萌音コミュニティ」「萌音ストア」などを含む萌音シリーズは、今後このドメインの下に置かれます。メインサイトシリーズ:MoeJue.cn。これは私のメインサイトで、ブログやシリーズに属さないプロジェクトなどがこのドメインの下に置かれます。 解説 Moe: 日本語の「萌え」の読み方で、ローマ字表記です。中国語では一般的に「萌」と訳されます。 Kot: 日本語の「声(こえ)」を意味する言葉で、ローマ字表記です。 Jue: 阿珏(A Jue)ちゃんの簡単な音訳です。 ブログ 私はとても昔を懐かしむ情に厚い人間なので、以前のブログもすべて残してあります。Xlog cnblogs emlog Blog 関連サイトのドメインも移行しましたが、すべてをリストアップするのはやめておきます。もちろん、一部のリンクが完全に置換されていない可能性もあります。 すべてのデータは元のままで、誰一人のデータも欠けていません。ブログの登録ユーザーのデータさえも一緒に移行したので、新しいシステムで直接ログインできます。パスワードも同じです。 ぜひstarを付けてください! 使い方もREADME.mdに書いておきました。何か問題があれば、直接issueを立ててください。 emlogからWordPressへの移行スクリプト 私のブログは間もなくTencent Cloud開発者コミュニティにも同期される予定です。皆さんのご参加をお待ちしています:https://cloud.tencent.com/developer/support-plan?invite_code=15kxzzid10tgx

2024年10月3日 · 1 分 · MoeJue

転生:ECサイトを構築する - 萌音ECサイトV1.0リリース

萌音シリーズのN+1番目のプロジェクトが来ましたね。これも実は数年間放置していたプロジェクトで、今回ようやく完成させることができました。 まずはプロジェクトアドレス: https://MoeKoe.cn なぜ私はプロジェクトを作り続けているのか? この質問はとても面白いですね。なぜ様々なプロジェクトを、しかもお金にならないものばかり作り続けているのか。私の以前のプロジェクトに触れたことのある方はご存知でしょうが、私はどんなプロジェクトも「自分が使う」という原則に基づいて制作しています。もちろん今回も例外ではありません。ずっと、どこかのプラットフォームで、持っているけれど使わず、捨てるには惜しい小物たちを売りたいと思っていました。同時に、面白くて楽しい製品を皆さんと共有したいとも思っています(将来的には私のIP製品も加わるかもしれません)。「最高の出来事や物を、最高のあなたと共有したい」という思いもありますし、「他人が持っているなら私も持つべきだ」という原則に基づいて、私も持たなければなりません。 もし私がただ小物を売りたいだけなら、なぜ直接淘宝や闲鱼のようなプラットフォームを使わないのでしょうか。一歩譲って、これらのプラットフォームを使わないとしても、既存のECシステムを自分で構築することもできます。今や市場には成熟していて使いやすいシステムが山ほどあります。なぜわざわざ自分で開発する必要があるのでしょうか? 一言で言えば、好きだからです。これは私の趣味で、創造することが好きで、面白いものやことをするのが好きなんです。私はただ生きているだけの凡人ではなく、すごくて面白い人間になりたい。もっと多くの面白い魂と出会いたい。「すごい」という私の定義は、技術がどれほど優れているか、お金をどれほど稼ぐかということではありません。挫折や困難に直面したときでも、笑顔で立ち向かい、楽観的であり続け、初心を忘れない人。そのような人を、私は「すごい人」と呼びたいのです。 新しいプロジェクトを発表する記事なのに、またしても口語体のブログになってしまいました、ハハハ。 プロジェクト紹介 最近何をしているか?ピンクで可愛らしいもの、つまり二次元少女萌え系スタイルの魔法少女ECサイトを作っています。 魔法少女のファンタジー世界へようこそ!二次元の無限の可能性を探る冒険の旅を始めましょう!これは二次元愛好家のために特別に作られたオンラインECサイトです。ここでは、最も輝く魔法のアイテム、最もキュートな変身コスチューム、そして豊富で多様な二次元関連商品を見つけることができます。可愛い萌えグッズに夢中な方も、クールなコレクターズアイテムがお好きな方も、二次元へのすべての愛と期待をここで満たすことができます! URLをクリックすると、目が覚めるような(ピンクの)感覚を覚えるでしょう。そうです、これこそ私が求めていたスタイルです。ピンクで可愛らしく、乙女心満載で、カワイイ感じ。これこそが私の個性を際立たせるのです。 技術スタック Vue.js3 Vite Pinia Axios Node.js Express Mysql Nginx フロントエンドとバックエンドの分離 MySQLスレッドプール Vue.jsのフルスタックは本当に素晴らしいですね。ネイティブで書く手間が省けます。現在、国際化プラグイン(i18n)はこのバージョンにはまだ搭載されていません。市販のUIライブラリがこのプロジェクトの私の位置付けや個性に直接合致しないため、既存のUIライブラリは使用せず、すべて自分で手書きしました。 紹介: 仮想通貨USDTに対応(ウォレットアドレスを入力するだけで、自動で着金を監視。外部プログラム不要。監視システムは新規注文があると自動起動し、30分間新規注文がないと自動休眠し、リソース消費を削減) Alipay対面決済に対応、即時着金、自動コールバック ユーザー登録、ログイン、ログアウト、パスワード変更、アバター変更、商品レビューに対応 商品管理、商品カテゴリ管理に対応 注文管理、注文決済、注文発送、物流追跡に対応 商品注文データ分析に対応 全サイトレスポンシブデザイン フロントエンドとバックエンドの分離 MySQLスレッドプール システムの基本情報設定 最初のバージョンでは、基本的な機能と必要な機能のみを追加しました。新機能は設計段階で既に考慮されており、データベースとコードには予約がされています(そのため、あるボタンをクリックしても反応がない場合でも心配しないでください。その背後にはまだコードがないだけです)。これらは将来のバージョンで追加される予定です。現在、ECサイトでは物理的な商品の発送形式で販売していますが、将来的には仮想商品の販売も追加し、基本的に萌音発券の機能をすべて統合する予定です。 このプロジェクトの命名は「shop」ではなく「mall」としました。そのため、将来的には単なる店舗ではなく、ショッピングモールになる可能性があります。 将来: マルチテナントモード。ユーザーが直接ECサイトへの出店を申請し、萌音ECサイトを利用して自身の製品を販売できるようにする 商品の多カテゴリ分類。製品のより詳細な仕様分類 より多くの決済方法。現在、作者は他の決済権限を持っていないため、2つのみ連携済み 仮想商品に対応。発券機能を統合する形となる 商品ポスター宣伝画像生成 メールシステム。あってもなくても良い通知機能に過ぎない 右下の多機能メニュー。下部の笑顔のキャラクターがスマートナビゲーションシステムになる 商品インターフェースのデータ表示を追加。データが一目でわかるように 多言語対応(i18n)。国際化の流れに乗り、世界へ SMSシステム。メールシステムと全く同じ Redisキャッシュ。本来はこのバージョンで追加する予定だったが、データの制御は現状でも問題ない ダークモード。これもトレンドに追随 ソースコードの入手方法? 阿珏酱に233RMB以上を寄付することでソースコードを入手できます。 以前に阿珏酱を支援してくださった方々(以前の支援総額が233に満たない場合は差額を補填する形で、233を超えている場合は1元を寄付して契約を再締結するだけで直接入手できます) こちらをクリックして某コミュニティ公式交流グループで阿珏酱を支援してください。個人のQQリンクを貼れないため、グループリンクを貼りました。グループに参加してグループ管理者に@メンションしてください。 なぜ商用版を設けないのか? なぜ商用版ではなく、寄付版なのか、その違いは何でしょうか?商用版となると、ライセンスシステムが必要になり、同時にソースコードが提供されない可能性もあり、技術サポートも必要で、さらに多くの完璧な機能が求められるでしょう。商用版のお金はプロジェクト自体に支払われるもので、作者とは利害関係、つまり商業契約のモデルであり、作者はそれ(人)に対して責任を負う必要があります。(私はこの感覚が特に好きではありません。これが私が稼げない理由かもしれませんね) 一方、寄付版は、作者本人への寄付であり、個人の意思、友人同士の約束のような契約モデルであり、作者はプロジェクト自体にのみ責任を負います。 もちろん、私が言葉遊びをしている、言葉の隙間を突いていると感じるかもしれません。だから、これは完全に寄付行為なのです。今回の寄付の敷居には少し商業的な雰囲気があるかもしれませんが、それは私と妻たちが生活のために稼がなければならないからです。 ヒント 寄付版ではVueフロントエンドのソースコード+コンパイル後の静的ファイル+Node.jsバックエンドのソースファイルを提供します。 すべての寄付版で入手できるのはソースファイルであり、暗号化や難読化はされていません。漏洩しないようお願いするとともに、ご自身の権利を守るためでもあります。 ソースコードの変更にはある程度の基本的なプログラミング知識が必要です。もしできない場合は、変更しないでください。 宝塔パネルのデプロイサービスを1回提供します。 ウェブサイトのインターフェースは少女萌え系スタイルに傾倒しており、一般的な製品には適さない可能性がありますのでご注意ください。 コードは複製可能であるため、契約締結後は撤回できません。何卒ご了承ください。 今回もこれまでと同様に、寄付版の形式でソースコードを入手できるようにしました。なぜ今回またソースコードの入手を開放したのでしょうか?以前の萌音コミュニティの影響が多少あるでしょう。萌音コミュニティは私が2ヶ月以上かけて丹念に書き上げたもので、ソースコードの寄付による入手は受け付けず、純粋に自分で運営していました。寄付を申し出た人たちは皆断りましたが、最終的には一度だけ寄付を受け取りました。結局、萌音コミュニティに申し訳ない気持ちになりました。自分の手で潰してしまい、もっと多くの人にその存在を知ってもらえなかったからです。では、なぜ直接オープンソースにしないのかというと、そうするとかえってこのプロジェクトに申し訳ないと感じるからです。誰もが簡単に手に入れられるものだと思われ、その価値が失われてしまうでしょう。直接オープンソースにはしませんが、プロジェクト関連のアーキテクチャや設計思想、一部のコードを公開し、皆さんの参考にしてもらい、学習の妨げにはならないようにします。 ...

2024年10月2日 · 1 分 · MoeJue

Web3.0とは何か?ブロックチェーンとの関係は?

また一つ、よくわからない言葉が出てきましたね-_-。以下に要点をまとめてみました。 web3.0とは何か Web 3.0(Web3)は、次世代のインターネットの発展方向であり、より分散化され、ユーザーがコントロールし、データが保護されるネットワーク環境を構築することを目指しています。これまでのWeb 1.0(静的なウェブページ)やWeb 2.0(動的でインタラクティブなウェブページやソーシャルメディア)とは異なり、Web 3.0の核心的な理念と技術には以下の側面が含まれます。 非中央集権化: ブロックチェーン技術:Web 3.0の核心はブロックチェーン技術であり、すべての取引やデータの変更を記録する分散型台帳を提供します。これは、データが単一の中央サーバーによって管理されるのではなく、複数のノードに分散されることを意味します。 分散型アプリケーション(DApps):これらのアプリケーションはブロックチェーンネットワーク上で実行され、中央集権的な管理者が存在しません。DAppsのユーザーは、仲介機関を介さずに直接取引や対話を行うことができます。 ユーザーコントロールとデータ保護: 自己主権型アイデンティティ:Web 3.0では、ユーザーは自身のデジタルアイデンティティとデータを完全にコントロールできます。暗号技術を通じて、ユーザーは誰が自分のデータにアクセスできるか、またそのデータをどのように使用するかを決定できます。 データ所有権:ユーザーのデータは分散型ネットワーク上に保存され、大手企業による集中管理ではなく、ユーザー自身がデータの所有権を持ちます。 スマートコントラクト: 自動実行プロトコル:スマートコントラクトは、ブロックチェーン上で実行される自動化されたプロトコルであり、特定の条件が満たされると自動的に実行されます。この技術は、金融取引、サプライチェーン管理、法的な契約など、さまざまなシーンで利用できます。 相互運用性:Web 3.0は、異なるブロックチェーンや分散型ネットワーク間の相互運用性を実現し、データや資産が異なるプラットフォーム間でシームレスに移動できるようにすることを目指しています。 トラストレスと透明性: トラストレスなメカニズム:Web 3.0はブロックチェーン技術を通じてトラストレスなメカニズムを実現します。つまり、参加者はお互いを信頼したり、第三者の仲介者に依存したりすることなく、安全な取引や対話を行うことができます。 透明性:すべての取引やデータの変更はブロックチェーン上に記録され、公開され透明であり、改ざん不可能です。これにより、信頼性とセキュリティが向上します。 Web 3.0の応用シーン 分散型金融(DeFi):スマートコントラクトとブロックチェーン技術を通じて、貸付、取引、投資などの仲介者を必要としない金融サービスを提供します。 デジタルアイデンティティ:ユーザーは自身のデジタルアイデンティティを作成・管理し、個人データのアクセスと使用をコントロールできます。 サプライチェーン管理:ブロックチェーン技術を通じて、サプライチェーンの透明性と追跡可能性を実現し、偽造や詐欺を防止します。 コンテンツ制作と配信:アーティスト、ミュージシャン、作家は、直接視聴者と対話し取引を行うことで、より公平な収益分配を得ることができます。 では、ブロックチェーンとは何か? ブロックチェーン技術は、分散型台帳技術(Distributed Ledger Technology, DLT)の一種であり、取引や情報を記録するための改ざん不可能で非中央集権的なデータベースです。ブロックチェーン技術の核心的な考え方は、非中央集権的な方法でデータの安全性、透明性、信頼性を実現することです。 ブロックチェーンの基本原理 ブロック(Block): ブロックは取引記録を含むデータパッケージです。各ブロックには複数の取引と、そのブロックを一位に識別するためのハッシュ値が含まれています。 ブロックには前のブロックのハッシュ値も含まれており、これによりすべてのブロックが鎖のようにつながり、ブロックチェーンを形成します。 チェーン(Chain): ブロックはハッシュ値によって相互に連結され、チェーン構造を形成します。各ブロックが前のブロックのハッシュ値を含むため、ブロックチェーン内のデータを改ざんすることは非常に困難です。 あるブロックのデータを変更しようとすると、そのブロックおよびそれに続くすべてのブロックのハッシュ値が変化するため、これらすべてのブロックのハッシュ値を再計算する必要があり、これはほぼ不可能です。 非中央集権化(Decentralization): ブロックチェーンネットワーク内のすべてのノード(コンピュータ)は、ブロックチェーンの完全なコピーを保持しており、これらのコピーはコンセンサスメカニズムによって一貫性が保たれています。 中央機関がブロックチェーンを管理・制御することはなく、データはすべてのノードによって共同で維持されます。 コンセンサスメカニズム(Consensus Mechanism): ブロックチェーンネットワークは、すべてのノードがブロックチェーンの状態について合意に達することを保証するためにコンセンサスメカニズムを使用します。一般的なコンセンサスメカニズムには、プルーフ・オブ・ワーク(Proof of Work, PoW)やプルーフ・オブ・ステーク(Proof of Stake, PoS)があります。 プルーフ・オブ・ワーク(PoW):マイナーが複雑な数学的問題を解くことで取引を検証し、ブロックチェーンに追加します。問題を解くには大量の計算能力が必要であり、これによりブロックチェーンのセキュリティが確保されます。 プルーフ・オブ・ステーク(PoS):バリデーターが保有する暗号資産の量やその他の要因に基づいて取引を検証し、それに応じた報酬を得ます。 暗号技術(Cryptography): ブロックチェーンは、データの安全性とプライバシーを確保するために暗号技術を使用します。各取引は公開鍵と秘密鍵を使用して署名・検証され、正当な所有者のみが取引を開始できるようにします。 ブロックチェーンのメリット セキュリティ: データは複数のノードに分散されているため、単一障害点がなく、攻撃者がデータを改ざんすることは困難です。各ブロックには前のブロックのハッシュ値が含まれており、一つのブロックを改ざんするにはチェーン全体を変更する必要があるため、コストが非常に高くなります。 透明性: ブロックチェーン上のすべての取引記録は公開されており、誰でも閲覧できます。取引記録は改ざん不可能であり、システムの透明性と信頼性を高めます。 非中央集権化: 中央管理機関が存在せず、すべてのノードが平等にネットワークの維持・管理に参加するため、単一の支配や権力の集中を防ぎます。 改ざん耐性: データが一度ブロックチェーンに書き込まれると、それを改ざんすることは非常に困難であり、データの完全性と真正性が保証されます。 ブロックチェーンの応用シーン 暗号資産(仮想通貨): ビットコイン(Bitcoin)は、最初で最も有名なブロックチェーンアプリケーションであり、非中央集権的な方法でピアツーピアの電子現金システムを実現します。 イーサリアム(Ethereum)は、暗号資産の取引だけでなく、スマートコントラクトの実行もサポートしており、ブロックチェーンの応用範囲を広げています。 サプライチェーン管理: ...

2024年6月17日 · 1 分 · MoeJue

Web3.0ベースのブロックチェーン画像アップロード

始める前に、まず基本的な概念を簡単に理解しましょう。以下のいくつかの点にまとめました。Web3.0とは何か、ブロックチェーンとどのような関係があるのか?(前回の記事がここで役立ちますね) 要件:PythonベースのWeb 3.0画像アップロードシステムを開発します。このシステムは、ユーザーが画像をアップロードし、その画像を分散型ネットワークに保存し、同時にトランザクション情報をブロックチェーンに記録することを可能にします。もともとは遊びで書いていたもので、ユーザー認証やファイル操作を統合した完全な管理システムにして、「画像アップロードサービスの最終的な解決策」にしようと考えたこともありましたが、実際にやってみるとあまり現実的ではないことに気づき、断念しました。しかし、私は昔から画像にこだわりがあるのです。 ステップの概要 環境設定:Pythonを使用して開発し、必要なPythonライブラリをインストールします。 IPFS統合:画像をIPFSにアップロードし、画像のCID(Content Identifier)を取得します。 ブロックチェーン統合:IPFSのCIDをブロックチェーンに記録します。 Webインターフェース:Flaskを使用して、ユーザーが画像をアップロードできるWebインターフェースを作成します。 詳細なステップ 1. 環境設定 必要なPythonライブラリをインストールします: pip install flask web3 ipfshttpclient 2. IPFS統合 IPFS(InterPlanetary File System)は、ピアツーピアのファイルストレージプロトコルです。ipfshttpclientライブラリを使用してIPFSネットワークと対話できます。 まず、IPFSノードをインストールして実行していることを確認してください。まだIPFSをインストールしていない場合は、IPFS公式サイトでインストールガイドを見つけることができます。 以下は、画像をIPFSにアップロードするコード例です: import ipfshttpclient def upload_to_ipfs(file_path): client = ipfshttpclient.connect('/ip4/127.0.0.1/tcp/5001') res = client.add(file_path) return res['Hash'] 3. ブロックチェーン統合 web3.pyライブラリを使用してIPFSのCIDをブロックチェーンに記録します。ここではイーサリアム(Ethereum)をサンプルブロックチェーンとして使用します。 以下は、IPFSのCIDを保存するための簡単なスマートコントラクトの例です: pragma solidity ^0.8.0; contract IPFSStorage { mapping(address => 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]; } } このコントラクトをコンパイルしてデプロイした後、以下のPythonコードを使用してスマートコントラクトと対話します: ...

2024年6月17日 · 2 分 · MoeJue

ESP8266-NodeMCU開発ボードを使って、私のQQアバターを表示してみる。

ええ、自分でESP8266開発ボードのファームウェアを書くと言っていた私が戻ってきました。20年前に約束した通り、今日、その願いを叶えに戻ってきました。ESP8266串口WiFi模块 - WiFi杀手 今日はOLEDディスプレイも接続します。今回購入したのは4ピンのOLED(128*64)で、カラー表示には対応していません。 NodeMCU開発ボード NodeMCUはオープンソースのIoTハードウェア開発ボードです。WIFI機能をサポートし、Arduino開発ボードと非常に似た使用方法であるため、近年、世界中のメイカーたちからますます人気を集めています。NodeMCUのサイズはArduino Nanoに似ています。Arduinoチームによって開発されたものではありませんが、Arduino IDEを使用して開発することも可能です。 あらゆるものがインターネットに接続されるIoTの基盤として、まずIoT制御ボードのコストが高すぎてはいけません。高価なIoT制御コンポーネントは、プロジェクトのコスト管理に不利であり、多くのメイカー愛好家が学習し使用する上でも不利です。この点において、NodeMCUはRaspberry PiやArduinoファミリーのIoTプラットフォームなどよりも優位性があります。 注意深い方はすでにお気づきかもしれませんが、私の開発ボードはESP8266-NodeMCUと呼ばれています。しかし、他のウェブサイトや資料では、ESP8266と表記されたり、NodeMCUと表記されたりすることがあります。では、ESP8266とNodeMCUの間にはどのような関係があるのでしょうか? ESP8266はチップ(鉄製のケースに収められた四角いもの)であり、NodeMCUはESP8266チップを核とした開発ボードです。下の図に示す通りです。 小さなチップのピンをコンピューターに接続し、プログラムをアップロードするなどの操作を行うのは非常に困難であるため、ESP8266チップを中心とした様々な開発ボードが誕生しました。NodeMCUもこれらの開発ボードの一つです。 NodeMCU開発ボード上の2列のピンヘッダーは、ESP8266チップのピンに接続されています。開発ボード上の2列のピンヘッダーがあれば、デュポン線を使ってチップのピンを実験回路に簡単に接続できます。NodeMCU開発ボードにはUSBポートと電圧変換回路も搭載されています。これらは私たちに大きな利便性を提供します。USBデータケーブル1本で、ESP8266への給電とプログラムのアップロードを簡単に実現できます。もちろん、NodeMCU開発ボードの回路機能はこれだけではありませんが、これ以上は深掘りしません。 ドライバーのインストール 以前にも開発ボードのドライバーインストールについては説明しましたが、十分詳細ではありませんでした。 現在市販されているESP8266ドライバーには様々な種類があり、同じNodeMCU開発ボードであってもドライバーが異なる場合があります。現在主流なのはCH340とCP210Xのドライバーです。 ドライバーのダウンロードは、チップメーカーの公式サイトから直接行ってください。 CP210X:https://cn.silabs.com/developers/usb-to-uart-bridge-vcp-drivers CH340C:https://www.wch.cn/downloads/CH341SER_EXE.html ご自身のプラットフォームに適したドライバーインストーラーをダウンロードしてください。ご自身のシリアルチップのモデルがドライバーのサポート範囲内にあるか、よく確認する必要があります。 自分の開発ボードに必要なドライバーを確認する方法 直接見る。下の図の縦長の黒い長方形がUSB-シリアル変換チップです。その上にチップのモデル名が記載されています。 購入した販売店に尋ねる。 ディスプレイのはんだ付け はんだ付けを間違えないでください。間違えるとチップが焼損します。OLEDの配線: GND - GND VCC - VCC SCL - GPIO5(D1) SDA - GPIO4(D2) はんだごて加熱中 以下がはんだ付け完了したものです。配線に注意してください。この順番であるとは限りません。名称を確認してください。 Arduino IDEのインストール Arduino IDEをダウンロード https://www.arduino.cc/en/software インストール。インストールまで私が教える必要がありますか? 設定。「ツール」-「ボード」-「ボードマネージャー」をクリックし、設定でボードアドレスを記述します:http://arduino.esp8266.com/stable/package_esp8266com_index.json その後、対応するサポートライブラリファイルが自動的にダウンロードされます。この間、ネットワークの安定性を確保する必要があります。 開発ボードを選択: NodeMCU1.0(ESP-12EModule) ポートを選択: コンピューターのデバイスマネージャーで開発ボードのCOMポートを見つけます。 Arduinoコード 時々、私が長々と説明するよりも、直接コードを見せる方が手っ取り早いと感じます。あなたもきっと、私の無駄話を聞くよりも直接コードを見たいと思っているでしょう。私も可能な限りコードにコメントを付けました(Arduinoコードの記述はC/C++言語の規範に従ってください)。 以下の例では、WiFi接続にはライブラリを使用しています。初回接続時には、ESP8266が発信するWiFiに携帯電話で接続し、ネットワーク設定を行う必要があります。画面への書き出しにはライブラリを使用しており、中国語の直接書き出しをサポートしています。 これは、WiFi接続と画面への画像表示の簡単な例です。 #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> #include <ESP8266WiFi.h> #include <NTPClient.h> #include <WiFiManager.h> #include <U8g2lib.h> #define SDA 4 // SDA引脚,默认gpio4(D2) #define SCL 5 // SCL引脚,默认gpio5(D1) Adafruit_SSD1306 oled(128, 64, &Wire,-1); //OLED 屏幕实例化 WiFiUDP ntpUDP; NTPClient timeClient(ntpUDP,"pool.ntp.org", 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,"正在连接WiFi....",0); WiFiManager wifiManager; wifiManager.autoConnect("ESP8266"); OLED_Showchin(1,27,"WiFi连接成功!",0); OLED_Showchin(1,41,"名称: " + WiFi.SSID(),0); OLED_Showchin(1,55,"IP: " + WiFi.localIP().toString(),1); // 获取时间 timeClient.begin(); u8g2.setFont(u8g2_font_wqy15_t_gb2312b); //字体大小 u8g2_font_wqy15_t_gb2312b OLED_Showchin(1,13,"宁小建",0); OLED_Showchin(1,27,"hhhhhhhhhhhh",0); OLED_Showchin(1,55,"大傻逼哈哈哈",1); timeClient.update(); OLED_Showchin(1,20,"当前北京时间: ",0); OLED_Showchin(1,41,timeClient.getFormattedTime(),1); delay(1000); OLED_img(); } // 重复执行程序 void loop() { // 更新时间 // timeClient.update(); // OLED_Showchin(1,27,"当前北京时间: ",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); //"SSD1306_SWITCHCAPVCC"表示显示器为OLED ,"0x3C"为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); //设置字体尺寸 (>=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(); } ...

2024年6月16日 · 4 分 · MoeJue

申し訳ありません、戻ってきました!

それは月明かりもなく、風雨が激しく、何も見えない暗い夜でした。何か起こりそうな予感がしました。 「事故」とパンデミックの影響で、私は一時的に「植物状態」になり、二次元の世界に旅立つ寸前でしたが、幸いにも「救出」されました。この数年間、私を探してくれたメッセージも受け取れていません。まだ私を気にかけてくれている方々に感謝します。ありがとうございます。 悪いのは私ではなく、この運命づけられた世界なのです。 この数年間、私を探してくれた人々や出来事についても、私は全く知りません。QQやWeChatのメッセージも、長期間受け取れていません 何年も更新されていなかった私のアイコンが再び点灯したのを見て、多くの友人がどうしたのかと尋ねてきました。会ったことのないネット上の友人たちに、いや、友人という方が親しい呼び方かもしれませんね、感謝しています。あなたがたが私のことを覚えていてくれたことに、私はとても感動しています。 探し続けてくれたこと、三年 世界中を探してくれた 感動して言葉になりません。以下が本文です。 ブログについて ブログが初めて開設されたのは2016年6月9日です。もうすぐ8年になります。様々な困難の中でも、たくましく生き残ってきました。この間、たくさんの仲間と出会い、一緒に議論し、共に進歩し、共に成長してきました。だから、このブログをここで終わらせたくありません ブログのデータは元々七牛雲に自動バックアップされていましたが、今になって知ったのですが、何らかの理由で19年10月頃にバックアップが停止していました。「インターネットには記憶がある」と言われますが、「頭は断たれても血は流れても、データは失ってはならない」という精神で、数日間、広大なインターネットを探し回り、ついにブログのウェブサイトアーカイブを見つけました。私のブログの過去のバージョンはこちらからご覧いただけます archive (有名なウェブサイトアーカイブプロジェクトです) そこで、記事とコメントのデータをスクレイピングするPythonスクリプトを作成しました。スクレイピングした後、すでに誰かがバックアップしてくれていることに気づきました(私のブログは以前3年間、誰かにスポンサーしてもらっていました)。 ブログの移転 ブログを博客園に移転したのは、やむを得ない選択でした。 ブログの元のドメイン(52ecy.cn, moeins.cn, moeins.com)が期限切れ後に他人に取得されてしまい、交渉しても取り戻すことができませんでした。やむを得ず、一時的に博客園にブログを移転することにしました(将来的に自分で構築するかどうかは検討中です)。また、現在では自分のシステムをいじる時間がそれほどなく、博客園に置く方がより手間がかからず楽かもしれません。しかし、コメントはそれほど便利ではなく、投稿するにはログインが必要です。もちろん、何か問題があればグループで私にメンションしてください。 実は、18年末にはすでにテーマを変更したいと考えていました -> 今度こそ本当に延期します (私は本当に遅延癖があります、自分に感心します)。しかし、以前のemlogシステムには適切な既成テーマがなく、自分で移植するのが面倒だったので、ずっと延期していました。 以前のテーマは、見た目が良くなく、個性に欠け、ただ真面目なだけで、私の個性やスタイルに合わないと思っていたので、ずっと変えたいと思っていました。しかし、私の美的センスは素晴らしいのですが、私の美意識に合ったテーマを自分で一から書くとなると、少し難しいのです。 その後、博客園ユーザーの不忘编码さんのブログを偶然見て、博客園でもこのように自分で美化できることを知りました。「私のブログも失われたり、アクセスできなくなったりするのは嫌だ」という思いから、一時的に博客園に移行することを決めました。 ずっとこのような二次元風のテーマに変えたかったのです。現在、このブログの美化スタイルは、桜荘のペットな彼女のWordPressテーマSakuraをベースに、不忘编码さんが移植したものですが、バグや細部の問題が多く、さらに2日間かけて最適化しましたが、まだ多くのページが最適化されていません。後でゆっくりと進めていきます。(明日できることを、なぜ明日の自分に残しておかないのか?) 以前のemlogブログではHTMLのTinyMCEエディタ、しかも古いバージョンを使用していたため、生成される記事のHTMLコードは非常に混乱していました。そのため、博客園のmarkdown形式に移行した際に、多くのスタイル互換性の問題が発生しました。できる限り修正しましたが、すべての記事が正常に表示されることを保証することはできません。見つけたら、ゆっくりと修正していきます。 博客園は、自作ブログシステムのワンクリック移行機能をサポートしていないため、記事の公開時間やコメント情報を一緒に移行することはできませんでした。しかし、元の状態をそのまま残したいと思ったので、この記事にすべて書き込みました。プライベートコメントも非表示のままです。(自作ブログシステムの件は博客園チームともコミュニケーションを取りましたが、後期の開発で追加するとのことでした。彼らを困らせるつもりはありません。彼らも経営が苦しいようです。記事の公開にはCnblogのVScodeプラグインを使用しました。) 友情リンクも個別のページとして移行しましたが、多くのリンク先のウェブサイトがアクセスできなくなったり、すでにリンクを削除したりしていました。今は独立したドメインを持っていないので、友情リンクを申請するのも申し訳ない気持ちになります…。 以前のブログの画像はすべて新浪に保存されていましたが、いつか失われるのではないかと心配していました。そのため、普段は七牛雲と新浪の両方に保存していましたが、今ではすべて博客園に移行しました。 なぜブログを書くのか? これらのことがそんなに重要なのかと思う人もいるかもしれません。時々、何かを言いたい、何かを書きたいと思うのですが、誰も話を聞いてくれず、書く場所もなく、ただそのような場所が必要なのです。ブログをやっているのは、トラフィックやお金のためではなく、自分の小さな世界を作り、自分の小さなコミュニティで気ままに過ごしたいだけなのです。おそらく、この情熱があるからこそ、私はゆっくりと続けることができたのでしょう。しかし、事態は思い通りにはいかず、事故が起こってしまいました。 以前のブログ仲間の多くは、姿を消したか、更新をやめてしまいました。本当に残念です。彼らと知り合う前にそうなってしまいました。(特に月宅というやつ) @寒穹 というやつは私にこう言いました。「阿珏、ずいぶん経つのに、どうしてまだそんなに二次元なんだ?」 長年変わらないのは、私自身なのかもしれません。 まだ私を覚えていてくれて、私に良くしてくれる人がたくさんいることに、とても嬉しく、そして感謝しています。 こんなにたくさんの画像を投稿すべきではなかったかもしれません。失われたブログを偲んで、私の127(おそらくPCのストレージを指している)の中で永遠に生き続けます。 Pythonコード 移行に使用したPythonコードです。あまり役に立たないかもしれませんが、記録として、必要とする人の学習のために残しておきます。 コードを表示 ``` import os import re import time import requests from bs4 import BeautifulSoup from urllib.parse import urlparse, parse_qs # ファイルパスを指定 file_path = “C:\\Users\\Administrator\\Desktop\\blog\\content.txt” save_folder = “C:\\Users\\Administrator\\Desktop\\blog\\content\\” def save_to_file(data, file_name): try: file_path = os.path.join(save_folder, file_name + “.txt”) with open(file_path, ‘a’, encoding=‘utf-8’) as file: file.write(data) print(“データは正常にファイルに保存されました:”, file_path) except Exception as e: print(“ファイルの保存中にエラーが発生しました:”, e) def remove_html_tags(text): soup = BeautifulSoup(text, ‘html.parser’) return soup.get_text() def comment(html_content): comment_matches = re.findall(r’[\s\S]*?<img .*?inal=".*?202.*?/([^"]+)"/>[\s\S]*?<div ’ + ‘class=“comment-content”>(.*?)[\s\S]*?itle=".*?">(.*?)[\s\S]*?(.*?)’, html_content, re.DOTALL) article_comments = ’’ if comment_matches: i = 0 for comment_match in comment_matches: if ‘comment-children’ in comment_match[0]: i += 1 is_reply_comment = ‘>’ * i else: is_reply_comment = ‘>’ i = 1 # アバター サイズは40に制御 # gravatarアバターに対応 https://secure.gravatar.com/avatar/ if ‘gravatar.com’ in comment_match[1]: avatar_url = ‘![](’ + str(re.sub(r’(\?|&)s=\d+’, ‘\\1s=40’, str(comment_match[1]))) + ‘) ’ else: parsed_url = urlparse(comment_match[1]) query_params = parse_qs(parsed_url.query) dst_uin = query_params.get(‘dst_uin’, [‘1638211921’]) avatar_url = ‘![](’+‘https://q1.qlogo.cn/g?b=qq&nk='+str(dst_uin[0])+’&s=40’+’) ’ comment_content = comment_match[2].strip() nickname = comment_match[3].strip() comment_time = comment_match[4].strip() link_url = re.search(r'030.*?/(.*?)" .*? rel’, nickname) # コメントのmarkdown形式を構築 comment_content = is_reply_comment + comment_content.replace(’\n’, ‘>’) comment_content = comment_content.replace(’##このコメントはプライベートコメントです##’, ‘[#このコメントはプライベートコメントです#]’) # 絵文字画像を置換 soup = BeautifulSoup(comment_content, ‘html.parser’) for img in soup.find_all(‘img’): title_text = img.get(’title’, ‘’) img.replace_with(’[#’+title_text+’]’) comment_content = soup.get_text() # コメント投稿者のURLを保存 if link_url: nickname = ‘[’+remove_html_tags(nickname)+’]’ link_url = ‘(’ + link_url[1] + ‘) ’ else: link_url = ’’ nickname = remove_html_tags(nickname) + ’ ’ if i == 1: article_comments += ‘\n’ article_comments += is_reply_comment + avatar_url + nickname + link_url + comment_time + ‘\n’ + comment_content + ‘\n’ return article_comments else: return ’’ def process_article(url): print(“現在実行中===="+url) response = requests.get(url) if response.status_code == 200: html_content = response.text soup = BeautifulSoup(html_content, ‘html.parser’) article_title = soup.find(‘h1’, class_=‘article-title’) article_mate = soup.find(‘div’, class_=‘article-meta’) article_article = soup.find(‘article’, class_=‘article-content’) soup_content = BeautifulSoup(article_article.prettify(), ‘html.parser’) img_tags = soup_content.find_all(‘img’) pattern = r"https://web.*?_/” for img_tag in img_tags: if ‘data-original’ in img_tag.attrs: original_url = img_tag[‘data-original’] else: original_url = img_tag[‘src’] cleaned_url = re.sub(pattern, ‘’, original_url) new_url = ‘https://image.baidu.com/search/down?url=' + cleaned_url img_tag[‘src’] = new_url del img_tag[‘data-original’] article_comment = soup.find(‘div’, class_=‘article_comment_list’) data = “###### `このメッセージが表示されている場合、現在の記事は元のemlogブログシステムから移行されたものです。記事の公開時期が古すぎるため、構成や内容が完全でない場合があります。ご了承ください。`\n\n” + ‘###’ + article_title.text.strip()+’\n\n’+article_mate.text.strip().replace(’\n’, ‘’).replace(’\r’, ‘’).replace(’\t’, ‘’)+’\n’ + soup_content.prettify().replace(’’, ‘’).replace(’’, ‘’) save_to_file(data + ‘\n网友评论:\n\n’, article_title.text.strip()) data = comment(html_content) if not data: return save_to_file(data, article_title.text.strip()) if article_comment: comment_links = re.findall(r’<a\s+href="(.*?)nts"’, str(article_comment)) if comment_links: print(‘ページネーションコメントデータがあります’) for link in comment_links: url = link +“nts” print(url) response = requests.get(url) if response.status_code == 200: html_content = response.text data = comment(html_content) if not data: return save_to_file(data, article_title.text.strip()) print(“ページネーションコメントデータを書き込んでいます”) else: print(“Failed to retrieve the webpage.”) def main(): with open(file_path, ‘r’, encoding=‘utf-8’) as file: for line in file: segments = line.strip().split("—-") if len(segments) > 0: url = segments[0] process_article(url) else: print(“行にURLが見つかりませんでした。”) print(‘次の記事を開始します’) time.sleep(4) if __name__ == “__main__”: main() ```

2024年6月16日 · 3 分 · MoeJue

2020年末のまとめ

年末の総括を書くべきかどうか、何を書くべきか、ずっと悩んでいた。 数日前、楊潔さんがゲームをしていて、“年末のまとめは書いたの?“と聞いてきた。 これがきっかけで、書かなければならないと決心した。 昨年の2020年は、流行り病のせいで、一年があっという間に過ぎてしまい、書き始める前にすべてが終わってしまったような気がした! また、まとめるべきことがあまりないような気がして、何から始めたらいいのかわからなかった。 18年の年末のまとめはこちら→お金持ちになれると思ったけど、なれなかった。 今年は例年のような素晴らしいコピーライティングができなかった。 記事アーカイブ 2020年から月刊ブロガーになりますが、変わらないのは毎日チェックしていることです。 ブログ ブログがオープンボックスブログとして息を吹き返し、私がオープンボックスUPマスターになった年のような気がするが、実際にはオープンボックスは2018年まで遡ることができ、それはすでにあった。つまり、私は2年前からオープンボックスをしていたことになる 他のタイプの記事もたくさん書いてきたとはいえ、1年間NEWで、まだ自分のためのモノをNEWにできていないのは、ちょっと空しい気がする! 人生 流行り病で仕事が滞り、あと数ヶ月は家にいることになったのも、虚しさを感じた理由の一つかもしれない。 後半は、もう意味のない残業はしたくないと、自分をほめて会社を辞めた。 2ヶ月間部屋を借り、2ヶ月間テイクアウトを食べ、2ヶ月間運転を習い、運転免許を取得して広東を離れた。 (この段落は波乱万丈の調子で読んでください) 2021 ここ数カ月、パスポートを取得するために入国管理局に行ったが、やはり流行のせいで、うまくいかなかった。 2021年は流行が緩和されて、パスポートを取得できるようになるといいな。 来年か再来年には海外に行こうと思っている。なぜかと聞かれたことがあるが、私の答えは “いつもの電車の旅とは逆で、見たことのない景色を見るため “だ。 人生の瞬間を記録し、旅にプレイバックを加えるためにGoProを手に入れる! 2020年は少し空虚な一年で、あまり何もできなかったけれど、新しい年は夢に向かって前進し、まだ始めていないことを少しずつ終わらせていこうと思う!

2021年1月26日 · 1 分 · MoeJue

メリークリスマス 礼物

メリークリスマス メリークリスマス 私のクリスマスプレゼントです あっという間に2020年末を迎え、今年のハードウェアメーカーの相次ぐ勢力は、かつてのIntelの費用対効果戦争がIntel第10世代デスクトップクラスプロセッサの価格を上げないボリュームをリリースした後、Nvidia RTX3070が独自のコンシューマーグレードのフラッグシップグラフィックスカードの最後の世代を襲撃し、活気がないと良いことが言え、ハードウェアの性能の可能性を再生するために、優れたマザーボードも当然不可欠である。Asus TUF GAMINGゲーミングエージェントマザーボードは、しっかりとした素材、スタイリッシュなデザイン、手頃な価格で人気があり、今年、ミドルレンジ市場に位置づけられるようにリリースされたばかりのHeavy Gunnerシリーズは、より堅牢な電源構成、2.5G有線NIC、強化された装甲など、フラッグシップ製品から発展した新機能を誇りながら、価格は他のミドルレンジ製品と同じで、当然DIY愛好家の間で人気がある。DIY愛好家の間では当然人気のシリーズだ。 。 ステッカー …… TUOの後継機であるヘビーガンナーを継承したヘビーガンナーシリーズ。 ヘビーガンナーシリーズは、TUF GAMINGシリーズ本来のタフガイスタイルを継承し、ブラックとグリーンを基調としたボディに、TUF GAMING特殊部隊の通常スタイルであるイエローカラーのロゴをあしらい、高い認知度を誇ります。 マザーボードの外観は、大きな冷却アーマーにTUF GAMINGのロゴがプリントされ、ゲーミングの雰囲気が満載です。 TUF GAMINGロゴは大型のクーリングアーマーにプリントされています。 新しいLAG1200インターフェイスは第10世代以前のプロセッサーには対応していないが、それ以降の第11世代には対応しているようだ。 。 メモリスロットに関しては、ASUS TUF GAMING B460M-PRO Heavy Gunnerマザーボードは4つのDDR4メモリスロットを提供し、最大2933MHzの周波数で、ASUS独自のOptiMemメモリ最適化技術を搭載し、メモリのオーバークロック空間と安定性を大幅に向上させることができます。最大128GBのメモリをサポートする。ASUSはまた、このマザーボードの1 3と2 4の位置を異なる色でマークし、2本のRAMスティックを使用する際にメモリを挿入するようユーザーに促している。 MATXバージョンでは、ASUSは128GBメモリに対応しています。 MATX バージョンでは、ASUS TUF GAMING B460M-PRO Heavy Gunner マザーボードは、発熱がより深刻な電源とチップセットのサーマルアーマーに多数のつや消し表面処理を採用しています。このデザインは、マザーボードの熱を素早く奪うだけでなく、マザーボードに非常に強い洗練されたデザインとセンスをもたらします。 。 グラフィックスカードスロットに関しては、マザーボードは2つのPCIeロングスロットを提供します。そのうち1つは、グラフィックスカードの抜き差しによる偶発的な損傷を防ぐために金属製の装甲が装備されており、このスロットはX16モードなので、グラフィックスカードを1枚しか使用しないユーザーは、このスロットにグラフィックスカードを接続することをお勧めします。 マザーボードのI/Oも非常に簡単です。 ASUS TUF GAMING B460M-PROマザーボードのI/Oバッフルはマザーボードに統合されており、マザーボードを取り付ける際のバックプレーンの取り付けステップを減らし、マザーボードの一体感がより強くなっています。統合されたI/Oバッフルのデザインは、以前のASUSハイエンドマザーボードでしか見ることができませんでしたが、現在ではB460チップセットマザーボードにも配置され、取り付け漏れを防ぎ、またホコリや汚れの落下を防ぎます。このマザーボードは2つのUSB 2.0ポートを提供します。 このマザーボードは、2つのUSB 2.0ポート、4つのUSB 3.1Gen1ポート、HDMIポート、DPポートに加え、2.5Gbネットワークポートと5つの通常のオーディオポートを提供します。 があります。 SATAポートは3つ並んで6つあり、2つ目のスロットセットは水平に配置されているため、大型グラフィックスカードが長すぎてポートを塞いでしまうことはありません。 大型グラフィックスカードがポートを塞がないように、2番目のスロットは水平に配置されている。 最後に、オーディオに関して、このマザーボードは、出力108dB SNR、SNR103dBのRealtek S1200A高品質オーディオチップを使用しており、利用可能なサウンドカードチップの中でトップクラスとなっています。 箱の裏側のプレビュー ボックス裏面のプレビュー。 i5-10600kfの中国製ボックスには3年間の全国保証がついており、「K」という接尾辞がついているため、このCPUにはクーラーが付属しておらず、自分で購入する必要があることも側面からわかります。 。

2020年12月25日 · 1 分 · MoeJue

ネット回線速度の速遅による違い

ネット速度の速遅による違いについて ネットワークの普及に伴い、ユーザーは応答速度の速遅をますます重視するようになっています。ウェブサイトが速ければ速いほど、ユーザーの定着率とコンバージョン率も高まります。 簡単に言えば、スピードアップが重要です!ウェブサイトの速度に影響を与える要因はたくさんあります。例えば…………………. 真面目な話は私のスタイルではありません。さて、私のパフォーマンスをご覧ください。 アイデアの起源: 最初は純粋なCSSで実装することを考えました。背景画像をbase64エンコードしてbackground-imageに直接配置すれば、背景画像がウェブページと一緒に読み込まれる効果が得られるだろうと。 ステップ1: まず、事前に準備した素材画像を処理し、水着と水着のスカートを脱がせます ステップ2: 新しいHTMLファイルを作成します ステップ3: 完了。。 すると問題が見つかりました。私の背景画像ファイルサイズが12MBに達していたため、エンコード後の文字列が大きすぎ、ウェブページの読み込みが重く遅くなり、まったくユーザー体験がありませんでした。 さらに、この方法で読み込まれた背景画像は突然表示され、唐突すぎて効果が良くありませんでした。 その後、変更しました: CSS+JavaScriptで実装することにしました。background-imageで背景画像を直接読み込むことで、徐々に表示される効果が得られ、背景画像の読み込みが完了した後、JSで動的に画像を挿入します。 window.onload = function(){ var img=new Image(); img.src=‘裸体.jpg’; if(img.width==0){ alert(‘图片加载失败’) }else{ document.getElementById(“泳衣”).style.backgroundImage=“url(泳衣.png)”; document.getElementById(“泳裙”).style.backgroundImage=“url(泳裙.png)”; } } 思わず一言漏らしました。「なんてひどいネットワークだ、遅すぎて人物画像の服すら読み込めないなんて!」

2020年11月7日 · 1 分 · MoeJue

今日はお祝いしましたか?

一は二を生み、二は四を生み、コードは万物を生み出す……プログラマーたちが創造した世界は、人類により多くの可能性をもたらしました。 年に一度の1024プログラマーの日がまたやってきました。毎年この時期はどんなに忙しくても、時間通りに記事を一本投稿するようにしています。 今年はオープンソースプロジェクトは特に書きませんでしたが、それでもたくさんのコードを書きました。繋ぎ合わせれば地球を二周できるほどです。 2020-1024=996?? 昨年、大きな話題となった996ですが、これはまさか、運命づけられていたのでしょうか。 今年は皆さんと分かち合えるような良いネタがあまりないようです。。 それなら、ACG指向プログラミングと行きましょう~~! 過去の記事も見てみましょう 2019年 1024プログラマーの日、最高のコーディングで、一番クールなエンジニアになろう 2018年 1024プログラマーの日おめでとう 2017年 1024プログラマーの日おめでとう 2016年 プログラマーの祭典1024!今日はお祝いしましたか〜 これはつまり、私のブログが5年間も私に寄り添ってくれたということです。この道のりを共に歩んでくれたあなたと私に感謝します!

2020年10月24日 · 1 分 · MoeJue