OmniAICreator/Qiita-1.07M huggingface dataset:
Binance Smart Chain における NFT マーケットとアプリケーション

![binance smart chain.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2944615/532a2e31-a80c-a99f-37c3-a12ff8ebaf80.png)


# Binance Smart Chain における NFT マーケットとアプリケーション
----------------
### 01 はじめに
----------------
非代替性トークン（**NFT**）は、ブロックチェーン技術の重要な革新の一つであり、デジタルアート、ゲームアイテム、仮想土地などのユニークな資産を分散型ネットワークで作成、取引、検証することを可能にしました。**Binance Smart Chain (BSC)** の台頭に伴い、ますます多くの開発者やクリエイターが BSC 上で NFT エコシステムを構築することを選んでいます。BSC は、低コスト、高性能、Ethereum Virtual Machine（EVM）との互換性といった利点を提供し、NFT プロジェクトにとって理想的なプラットフォームとなっています。本稿では、NFT の基本概念、BSC 上の NFT マーケット、BSC 上での NFT の作成とミント（発行）方法、および将来の応用可能性について考察します。
### 02 NFT とは何か？
----------------
**NFT**（Non-Fungible Token、非代替性トークン）は、ブロックチェーン技術を基盤としたデジタル資産であり、その特徴は代替不可能でユニークであることです。暗号通貨（ビットコインやイーサリアムなど）とは異なり、NFT は唯一無二であり、各 NFT は特定のデジタルコンテンツ（アート作品、仮想アイテム、コレクション品など）を表します。
NFT の特性には以下が含まれます：
- **唯一性**：各 NFT には固有の識別子があり、他のトークンと交換することはできません。
- **不可分性**：多くの NFT は分割できず、ビットコインのように小さな単位に分けることはできません。
- **ブロックチェーン上での検証**：NFT の所有権および取引履歴はブロックチェーン上に公開かつ透明に保存されており、誰でもその真贋や所有権を検証することが可能です。
NFT は、アート、ゲーム、仮想不動産、コレクションの分野で広く利用され、暗号経済において重要な役割を果たしつつあります。
### 03 BSC における NFT マーケット
----------------
NFT の急速な発展に伴い、Binance Smart Chain は NFT の作成と取引における主要なプラットフォームとなりました。Ethereum と比較して、BSC は取引コストが低く、取引確認速度が速いため、多くの開発者やユーザーを引き付けています。BSC 上には、いくつかの主要な NFT マーケットやプラットフォームが存在し、以下に代表的なものを紹介します：
1. **BakerySwap**
   
   **BakerySwap** は BSC 上で最も初期に展開された分散型取引所（DEX）の一つであり、同時に包括的な NFT マーケットでもあります。ユーザーは、このプラットフォームでトークンの取引を行うだけでなく、独自の NFT を作成して取引することができます。
2. **PancakeSwap**
   
   **PancakeSwap** は BSC 上で最大規模の DEX であり、NFT の作成と取引をサポートしています。ユーザーは、PancakeSwap で独自の NFT をミントし、マーケットで取引を行うことができます。
### 04 BSC 上での NFT の作成とミント
----------------
BSC 上で NFT を作成およびミントするプロセスは、Ethereum 上のプロセスと非常に類似していますが、取引コストが大幅に低いため、より経済的です。以下は、BSC 上で NFT を作成するための基本的なステップです：
1. **NFT の設計**：まず、デジタルアートやアイテムを準備し、NFT としてブロックチェーンに保存するためのデータを用意します。
2. **スマートコントラクトの作成**：Solidity を使用してスマートコントラクトを記述し、NFT のミント機能や取引機能を実装します。
3. **BSC 上でのミント**：スマートコントラクトを BSC 上にデプロイし、NFT をミントします。これにより、ユニークなトークンが生成され、ブロックチェーン上に記録されます。
### 05 結論
----------------
Binance Smart Chain は、NFT プロジェクトにとって理想的なプラットフォームであり、その低コスト、高性能、および Ethereum との互換性により、開発者やユーザーにとって魅力的です。BSC 上での NFT マーケットは今後も成長が期待されており、デジタルアート、ゲーム、仮想アイテムの分野でさらに多くの革新が見られるでしょう。
Binance Smart Chain のノードアーキテクチャとネットワーク設計

![binance smart chain.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2944615/15ec5089-0140-622f-57ae-2e68739a20ec.png)


# Binance Smart Chain のノードアーキテクチャとネットワーク設計
-------------------
### 01 はじめに
-------------------
ブロックチェーンの基盤は、その分散型アーキテクチャにあり、ノードの配置とネットワーク設計は、ブロックチェーンのセキュリティ、スケーラビリティ、およびパフォーマンスを保証するための重要な要素です。**Binance Smart Chain (BSC)** は効率的なブロックチェーンプラットフォームとして、分散型金融（DeFi）、スマートコントラクト、その他の分散型アプリケーション（DApps）をサポートするために、慎重に設計されたノードアーキテクチャとネットワークインフラに依存しています。本稿では、BSC のノードの種類、ネットワークアーキテクチャ、ノードの同期メカニズム、および効率的な BSC ノードのセットアップと維持方法について詳しく解説します。
### 02 Binance Smart Chain のノードの種類
-------------------
BSC ネットワーク内のノードは、それぞれ異なる役割を担い、協力してブロックチェーンの正常な動作を保証しています。主なノードの種類には以下が含まれます：
1. **バリデータノード（Validator Nodes）**  
   バリデータノードは BSC ネットワークの中心的な部分であり、ブロックの検証と生成を担当します。BSC が採用する **Proof of Staked Authority (PoSA)** コンセンサスメカニズムにより、バリデータノードは BNB をステーキングすることで、トランザクションの検証と新しいブロックの作成権を得ます。各バリデータノードは、事前に定められた順序でトランザクションを検証し、ブロックを生成します。ネットワークの分散化を確保するため、BSC ではバリデータノードを定期的にローテーションし、選ばれたノードだけが現在のラウンドのバリデータとして機能します。
2. **フルノード（Full Nodes）**  
   フルノードは BSC ブロックチェーンの完全なコピーを保持し、ブロックチェーンの同期やトランザクションの伝達に関与します。バリデータノードとは異なり、フルノードはブロックの検証や生成に直接関与しませんが、ネットワークデータの完全性とトランザクションの伝播において重要な役割を果たします。フルノードは他のノードのリクエストに応じて履歴データを提供することができます。
3. **ライトノード（Light Nodes）**  
   ライトノードは、ブロックチェーン全体の履歴データを保存せず、最小限のブロックヘッダ情報のみを保持します。これにより、ストレージの要求が減少し、主にモバイルウォレットやリソースの少ないデバイスで使用されます。ライトノードは、フルノードの完全なデータに依存してトランザクションの状態を検証します。
### 03 Binance Smart Chain のネットワーク設計
-------------------
BSC のネットワークアーキテクチャ設計は、高パフォーマンスと分散化のバランスを取ることを目的としています。BSC はブロックの生成と伝送を高速化するために、効率的なノード間通信メカニズムを導入しています。これにより、ネットワークのパフォーマンスが向上し、分散型アプリケーション（DApps）や DeFi などのアクティビティがスムーズに実行されます。
### 04 BSC ノードのセットアップとメンテナンス
-------------------
BSC ノードのセットアップとメンテナンスにはいくつかのステップがあります。ノードの種類に応じて、適切なハードウェア要件とソフトウェア設定を選択する必要があります。バリデータノードの場合、BNB をステーキングする必要があり、さらに定期的にネットワークアクティビティを監視して、ノードの正常な稼働を確認する必要があります。
1. **ノードのセットアップ**： BSC ノードをセットアップする際、必要なソフトウェアや依存関係をインストールし、ネットワークに接続して同期を開始します。
2. **ノードのメンテナンス**： 定期的にノードのパフォーマンスを監視し、必要に応じてネットワーク設定の調整を行います。
### 05 結論
-------------------
Binance Smart Chain のノードアーキテクチャとネットワーク設計は、ブロックチェーンのパフォーマンスと分散化の最適なバランスを提供します。効率的なバリデータノードとフルノードの協力により、BSC は DeFi や DApps のための高性能なプラットフォームを実現しています。ノードのセットアップとメンテナンスを適切に行うことで、ネットワークの健全性とパフォーマンスを維持し、BSC エコシステムの成長を支えることができます。
Go言語でSNMPのMIBファイルを読み込む方法

# はじめに

以前、Go言語からSNMPのアクセスをするプログラムの説明で

https://qiita.com/twsnmp/items/2986b696cced09820291

という記事を書きました。その余談に書いた、もっと人にやさしくする方法の解説です。
SNMPのMIBファイルをASN.1といフォーマットで定義します。
このファイルを読み込めるgosmiパッケージ

https://github.com/sleepinggenius2/gosmi

の紹介です。

# gosnmiのパース処理のサンプル

https://github.com/sleepinggenius2/gosmi/tree/master/cmd/parse
にMIBファイルを読み込むサンプルプログラムがあります。

```go
package main

import (
	"log"
	"os"

	"github.com/alecthomas/repr"
	"github.com/sleepinggenius2/gosmi/parser"
)

func main() {
	module, err := parser.ParseFile(os.Args[1])
	if err != nil {
		log.Fatalln(err)
	}
	_ = module
	repr.Println(module)
}
```

 だけで引数で指定したMIBファイルを読み込んで構造を表示できます。

 サンプルと同じディレクトリに`test.mib`というテスト用のファイルがあります。
 これでテストができます。

 
 # 実行例

 SNMPのMIBファイルRFC1213-MIBでテストすると

 ```terminal
$go run main.go RFC1213-MIB.txt
&parser.Module{
  Pos: Position{Filename: "RFC1213-MIB.txt", Offset: 0, Line: 1, Column: 1},
  Name: types.SmiIdentifier("RFC1213-MIB"),
  Body: parser.ModuleBody{
    Pos: Position{Filename: "RFC1213-MIB.txt", Offset: 35, Line: 3, Column: 1},
    Imports: []parser.Import{
      {
        Pos: Position{Filename: "RFC1213-MIB.txt", Offset: 51, Line: 4, Column: 9},
        Names: []types.SmiIdentifier{
          types.SmiIdentifier("mgmt"),
          types.SmiIdentifier("NetworkAddress"),
          types.SmiIdentifier("IpAddress"),
          types.SmiIdentifier("Counter"),
          types.SmiIdentifier("Gauge"),
          types.SmiIdentifier("TimeTicks"),
        },
        Module: types.SmiIdentifier("RFC1155-SMI"),
      },
      {
        Pos: Position{Filename: "RFC1213-MIB.txt", Offset: 163, Line: 7, Column: 9},
        Names: []types.SmiIdentifier{
          types.SmiIdentifier("OBJECT-TYPE"),
        },
        Module: types.SmiIdentifier("RFC-1212"),
      },
    },
|

```

のような感じの表示なります。

# 構造体を表示するパッケージ

構造体を表示するためには、

https://github.com/alecthomas/repr

というパッケージを使っています。

Pythonのrepr()という関数のGo言語版のようです。


# moduleの中の情報

moduleの中にMIBの定義を読み込めました。TWSNMPシリーズでは読み込んだMIBファイルから必要な情報を取り出して、

- MIBモジュールリスト
- MIBツリー
- MIBオブジェクトの説明
- オブジェクトの型

に使っています。

TWSNMP FKのMIB管理の画面

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3874862/0d34d783-8c27-a047-b093-e38c5e59c6ad.png)

で表示するMIBのモジュール名などです。

モジュールの名前は

```go
module.Name
```

です。

モジュールのOIDは

```go
 module.Body.Identity
```

に定義されています。

タイプの定義は

```go
 module.Body.Types
```

 の中に配列（スライス）で定義されています。

 MIBのオブジェクトは

```go
module.Body.Nodes
```

の中に配列（スライス）で定義されています。


ここから、うまく取り出してTWSNMPので使えるようにしています。
Binance Smart Chain 上の DeFi エコシステム

![binance smart chain.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2944615/4323f76f-1762-eb25-d2f5-44dfc08daa19.png)


# Binance Smart Chain 上の DeFi エコシステム
-------------------
### 01 はじめに
-------------------
分散型金融（**DeFi**）は、スマートコントラクトを使用して、仲介者なしで金融サービスを提供するという、ブロックチェーン技術の中で革命的な概念となっています。DeFi の普及に伴い、多くのブロックチェーンプラットフォームがこの新興分野をサポートし始めました。**Binance Smart Chain (BSC)** は、その低コスト、高効率、および Ethereum との互換性により、DeFi 開発者やユーザーにとって非常に人気のある選択肢となっています。本稿では、BSC 上の DeFi エコシステムについて、分散型取引所（DEX）、借入・貸付プロトコル、流動性マイニングなどを含めて詳しく説明します。
### 02 DeFi 概要
-------------------
**分散型金融（DeFi）** は、従来の金融仲介機関（銀行や取引所など）をスマートコントラクトで置き換えることで、ブロックチェーンを基盤とした金融サービスを提供します。DeFi を使用することで、ユーザーは完全に分散化された環境で、借入、取引、貯蓄、投資を行うことができ、中央集権的な機関に依存する必要がありません。
DeFi の主な利点は、透明性、信頼不要性、そしてグローバルなアクセス性にあります。すべての操作はスマートコントラクトによって自動的に実行され、ユーザーは情報の不透明性や操作のリスクを心配する必要がありません。また、DeFi は地理的な制約を受けず、世界中のユーザーが参加することができます。
### 03 Binance Smart Chain 上の DeFi のメリット
-------------------
Binance Smart Chain は、DeFi プロジェクトが発展するための理想的な環境を提供しています。他のブロックチェーンプラットフォームと比較して、BSC は DeFi 分野でいくつかの顕著な利点を持っています：
1. **低い取引手数料**：  
   DeFi の多くの操作は、頻繁なスマートコントラクトの呼び出しを必要としますが、Ethereum などのプラットフォームでは高額なガス料金が発生する可能性があります。BSC は、その **PoSA（Proof of Staked Authority）** コンセンサスメカニズムにより、ガス料金を大幅に削減し、ユーザーが低コストで頻繁な取引や操作を行えるようにします。
2. **効率的な取引処理速度**：  
   BSC のブロック時間は **3秒** であり、Ethereum の約 **13秒** よりもはるかに高速です。この迅速な取引確認は、特に分散型取引所（DEX）など、高頻度の取引が必要なシナリオにおいて重要です。
3. **Ethereum との互換性**：  
   BSC は Ethereum Virtual Machine (EVM) 互換性を持っているため、開発者は Ethereum 上で使用しているツールや言語をそのまま BSC 上で活用することができます。これにより、Ethereum で構築された DeFi プロジェクトを簡単に BSC に移植でき、コスト削減とパフォーマンスの向上を実現できます。
### 04 Binance Smart Chain 上の主な DeFi プロトコル
-------------------
1. **PancakeSwap**：  
   PancakeSwap は、BSC 上で最も人気のある分散型取引所（DEX）であり、ユーザーはトークンをスワップし、流動性提供者として報酬を得ることができます。PancakeSwap は、BSC の低い取引手数料と高い取引処理速度を活かして、効率的かつ経済的な取引体験を提供しています。
2. **Venus**：  
   Venus は BSC 上での分散型借入・貸付プロトコルであり、ユーザーは資産を担保にして他の資産を借りることができます。Venus は、DeFi の分野で競争力のある利率を提供し、ユーザーにとって柔軟な資産管理を可能にします。
3. **AutoFarm**：  
   AutoFarm は BSC 上のイールドファーミングアグリゲーターであり、ユーザーは最も収益性の高いイールドファーミングプールに自動的にアクセスできます。これにより、ユーザーは自分の投資のリターンを最大化することができます。
### 05 結論
-------------------
Binance Smart Chain は、DeFi エコシステムにおいて非常に重要な役割を果たしており、その低コスト、高効率、および Ethereum との互換性により、開発者とユーザーにとって魅力的なプラットフォームとなっています。BSC 上での DeFi プロジェクトは今後も成長が期待されており、分散型金融の未来に貢献しています。
M5NanoC6でカラーLED、Grove - Chainable RGB LEDで遊ぶ(P9813)

参考



![o_coq404.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/6badb1e6-5232-7112-60ca-748bcc606bd5.jpeg)


↓クリック


https://qiita.com/caa45040/items/0b72293684642472a327


↑クリック


x 過去ログを見よ!!

結果


![o_coq471.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/d80602f0-7d3b-78a2-ab1d-a6276bc770fe.jpeg)

![o_coq472.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/13a8a887-9e4d-5965-06cb-de5333b72b94.jpeg)

![o_coq473.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/b53efe42-d181-40b2-49d4-79dbe36596ee.jpeg)


プログラム


```c++


//Chainable_LED_M5NanoC6_1
//1個専用のカラーRGB LEDのライブラリ


//送信クロックの発生
void clk() {

  digitalWrite(1, LOW);//clk
  delay(20);                       // wait for a second
  digitalWrite(1, HIGH);//clk
  delay(20);                       // wait for a second

}//clk


//1バイトを送信する
void sendByte(int b) {

  for (int i = 0; i < 8; i++) {
    if ( (b & 0x80) == 0) {
      digitalWrite(2, LOW);//data
    } else {
      digitalWrite(2, HIGH);//data
    }//endif
    clk();
    b = b << 1;
  }//for i

}//sendByte


//1個のLED専用
void setColorRGB(int red, int green, int blue) {

  //開始
  sendByte(0);
  sendByte(0);
  sendByte(0);
  sendByte(0);

  //ここから
  int prefix = 0b11000000;
  if( (blue  & 0x80)==0 ) {prefix = prefix | 0b00100000;}
  if( (blue  & 0x40)==0 ) {prefix = prefix | 0b00010000;}

  if( (green & 0x80)==0 ) {prefix = prefix | 0b00001000;}
  if( (green & 0x40)==0 ) {prefix = prefix | 0b00000100;}

  if( (red   & 0x80)==0 ) {prefix = prefix | 0b00000010;}
  if( (red   & 0x40)==0 ) {prefix = prefix | 0b00000001;}
  sendByte(prefix);

  sendByte(blue);
  sendByte(green);
  sendByte(red);
  //ここまで

  //終了
  sendByte(0);
  sendByte(0);
  sendByte(0);
  sendByte(0);

}//setColorRGB


// the setup function runs once when you press reset or power the board
void setup() {
  //GPIOポートの初期化
  // initialize digital pin LED_BUILTIN as an output.
  pinMode(2, OUTPUT); //data
  pinMode(1, OUTPUT); //clk
}//setup


// the loop function runs over and over again forever
void loop() {

  //赤
  setColorRGB(0x55, 0x00, 0x00);
  delay(500);                       // wait for a second

  //緑
  setColorRGB(0x00, 0x55, 0x00);
  delay(500);                       // wait for a second

  //青
  setColorRGB(0x00, 0x00, 0x55);
  delay(500);                       // wait for a second
  
}//loop



```
JavaScript(.js)ファイルをAddressablesに登録したい

# 環境
- Unity 2022.3.4f1
- Addressables 1.21.21

# 状況
NPCユニットの挙動をスクリプトで記述できるようにしたかったので、~~サンプルが簡単そうだった~~[Jint](https://github.com/sebastienros/jint)（JavaScriptインタプリタ）を導入しました。
**が**、なぜか.jsファイルのみインスペクタにAddressablesのチェックボックスが現れません。Addressablesウィンドウにドラッグアンドドロップでも登録させてくれません。
TextAssetとして認識させる必要があるのか？と思い[ScriptedImporterを使用してTextAssetとして読み込んでも](https://qiita.com/RabitBox/items/90095efdcc77e266fab5)許してくれません。どうして……。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/497128/36eb6df7-09b9-b8e7-b9d6-fe88f30b2b1c.png)

しょうがないので大量のDebug.Logを抱えて原因究明の旅に出ました[^1]。
[^1]:拡張子を.txtやらなんやらに変えればいい話ではありますが、シンタックスハイライトなしでコードを書くのも苦痛なので

# 原因

```cs:AddressableAssetUtility.cs
// 99行目
static HashSet<string> excludedExtensions = new HashSet<string>(new string[] { ".cs", ".js", ".boo", ".exe", ".dll", ".meta", ".preset", ".asmdef" });
```

**名指しで弾かれてました。** 
隣に『.boo』も並んでいるので、おそらくはUnityScriptが使えたころの名残かな（詳しくは知りませんが……）。

# 解決策

[Addressablesパッケージを丸々コピーして1行だけ差し替えました](https://docs.unity3d.com/ja/2020.3/Manual/upm-embed.html)。
1行書き換えるために突如10MB弱跳ね上がったリポジトリサイズの変貌に涙を禁じ得ない。
Binance Smart Chain におけるクロスチェーンの相互運用性と Binance Bridge

![binance smart chain.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2944615/b8d63bc2-ca32-90db-a8f3-37c00e118f04.png)


# Binance Smart Chain におけるクロスチェーンの相互運用性と Binance Bridge
-------------------
### 01 はじめに
-------------------
ブロックチェーン技術の発展に伴い、各独立したブロックチェーンのエコシステムは繁栄してきました。しかし、これにより新たな課題が生まれました。それは、異なるブロックチェーン間での相互運用性をどのように実現するかという問題です。この問題を解決するために、**クロスチェーン技術**が登場しました。Binance Smart Chain（BSC）は、**Binance Bridge** を通じて強力なクロスチェーン機能を提供し、ユーザーが異なるブロックチェーンネットワーク間で自由に資産を転送できるようにしています。本稿では、クロスチェーンの概念、Binance Bridge の仕組み、Binance Bridge を使用した資産転送方法、およびクロスチェーンプロセスにおける課題とその解決策について詳しく説明します。
### 02 クロスチェーンの相互運用性とは？
-------------------
**クロスチェーンの相互運用性** とは、異なるブロックチェーンネットワーク間で資産やデータ、情報を相互にやり取りできることを指します。これにより、ユーザーは自分のデジタル資産（トークンや NFT など）をあるブロックチェーンから別のブロックチェーンに移動させることができ、中央集権的な仲介を介する必要はありません。この相互運用性により、ブロックチェーンの利用範囲が大幅に広がり、分散型金融（DeFi）やゲームなど、さまざまな分散型アプリケーションに対して柔軟な対応が可能になります。
クロスチェーンの核心的な目標は、ブロックチェーン間の「孤立化」を打破し、資産が異なるブロックチェーンエコシステムを跨いで流通できるようにすることです。たとえば、Ethereum 上に保有している ERC-20 トークンをクロスチェーン技術を使って Binance Smart Chain に移し、BSC 上の分散型アプリケーションや取引に参加することができます。
### 03 Binance Bridge の概要
-------------------
**Binance Bridge** は、異なるブロックチェーン間で資産を交換するためのクロスチェーンサービスプラットフォームです。ユーザーは Ethereum や Tron などのブロックチェーンから Binance Chain や Binance Smart Chain に、またはその逆に資産をクロスチェーンすることができます。Binance Bridge は、BTC、ETH、USDT などの主要なブロックチェーン資産をサポートしており、簡便で安全なクロスチェーン方法を提供します。
Binance Bridge の仕組みは、ユーザーが元のチェーン（例：Ethereum）で保有している資産をロックし、同等の価値を持つ BEP-20 トークンを対象のチェーン（例：BSC）で流通させることです。ユーザーが資産を元のチェーンに戻す際には、BEP-20 トークンは焼却され、元の資産が解放されます。
### 04 クロスチェーンの課題と解決策
-------------------
クロスチェーン技術は多くの利点を提供しますが、いくつかの課題もあります。
**1. セキュリティリスク：**  
クロスチェーンプロセスには、異なるブロックチェーン間での資産移動が関わるため、セキュリティ上のリスクが伴います。Binance Bridge では、資産がロックされている間に発生する潜在的な脅威に対処するための多層的なセキュリティ対策が導入されています。
**2. コンプライアンス問題：**  
各ブロックチェーンには異なる法的および規制上の要件が存在するため、クロスチェーンプロセスがこれらの要件を満たすようにする必要があります。Binance は、適用される規制に準拠しつつ、ユーザーが安全かつ合法的に資産を移動できるように努めています。
**3. スケーラビリティの制約：**  
クロスチェーン技術が広く普及するにつれて、スケーラビリティの問題が浮上しています。Binance Bridge は、トランザクションの効率を最大化するために、高速でスケーラブルなソリューションを提供しています。
### 05 結論
-------------------
クロスチェーン技術は、ブロックチェーンの相互運用性を実現し、分散型エコシステムの境界を拡張する重要な技術です。Binance Smart Chain の Binance Bridge は、ユーザーが簡単かつ安全に異なるチェーン間で資産を移動できる手段を提供しており、ブロックチェーン業界の未来において重要な役割を果たしています。
[用語]コンパイラ言語vsインタプリタ言語vsスクリプト言語vsLL言語

# コンパイラ言語とインタプリタ言語
基本的には、プログラミング言語は「コンパイラ言語」と「インタプリタ言語」の2つに大別できます。ただし、この分類は厳密に分けるというよりも、実行方式に基づく特徴を強調しているだけで、実際にはこれらが混在するハイブリッドな言語や実行方式が存在します。

### コンパイラ言語とインタプリタ言語の2分
- コンパイラ言語: プログラムを一度にすべて機械語（バイナリ）に変換し、その後実行する。例えば、CやC++ではコンパイルによって実行ファイルが生成され、それを実行する形になります。
- インタプリタ言語: プログラムを一行ずつその場で解釈（翻訳）し、実行していく。PythonやJavaScriptなどがこれに該当します。

### 実際にはハイブリッドな場合もある
多くの言語は、単純にコンパイラ言語かインタプリタ言語かだけで分けられないことが多いです。以下のような例も存在します。

- Java:
Javaはソースコードを一度「バイトコード」にコンパイルし、その後、バイトコードをJava仮想マシン（JVM）がインタプリタとして実行します。また、JVMはJIT（Just-In-Time）コンパイラという仕組みを使って、必要な部分を実行時にネイティブコードに変換するため、純粋なコンパイラ言語でもインタプリタ言語でもありません。

- Python:
Pythonも、まずソースコードを「バイトコード」にコンパイルし、その後にインタプリタがバイトコードを実行します。これは完全なインタプリタ言語というよりも、インタプリタで動作するが内部ではコンパイルも行われているハイブリッドな仕組みです。

- JIT（Just-In-Time）コンパイラ:
いくつかのインタプリタ言語では、JITコンパイラを使って実行中に効率化を図ります。これにより、実行時に部分的にコンパイルすることで、コンパイル言語のような高速な実行が可能です。例えば、JavaScriptのV8エンジンやJavaのJITはこれに該当します。

# インタプリタ言語≒スクリプト言語？？
インタプリタ言語とスクリプト言語は非常に似ている概念で、しばしば混同されがちですが、厳密には異なる側面を持っています。違いを明確にするため、それぞれの定義と特徴を詳しく説明します。

### 1. インタプリタ言語とは？
インタプリタ言語は、プログラムを一行ずつ逐次的に解釈し、実行するための言語です。インタプリタというプログラムが、ソースコードを直接実行していきます。この処理方法により、プログラム全体を一度にコンパイルせず、その場でコードを実行できます。

- インタプリタ言語の特徴:
ソースコードをそのままインタプリタが解釈して実行する。
実行速度はコンパイラ言語に比べて遅い（逐次解釈するため）。
エラーが発生するとその場で実行が止まる。
デバッグがしやすく、開発サイクルが短い。

- 例:
Python
Perl
Ruby

### 2. スクリプト言語とは？
スクリプト言語は、特定のタスクを自動化するために書かれた簡単なプログラムを指すことが多いです。主に、他のソフトウェアやシステムを制御・操作するために使用され、軽量かつ短期間で開発することを目的としています。

スクリプト言語は、実行方法としてはほとんどがインタプリタを使いますが、スクリプト言語の概念は「用途」に焦点を当てています。つまり、システムやアプリケーションの操作を簡単に記述できる小規模なプログラムを書くための言語というニュアンスがあります。

- スクリプト言語の特徴:
小規模なタスクや自動化処理を目的として使われることが多い。
インタプリタを使って実行されることが多いが、必ずしもインタプリタに限定されない。
複雑なアプリケーションの構築よりも、すばやい開発と簡単なタスクの実行が主な目的。

- 例:
JavaScript（ブラウザでの動的なページ操作）
Bash（UNIXシェルスクリプト）
PHP（Webサーバーサイドの簡単な処理）

### インタプリタ言語とスクリプト言語の違い
大きな違いは、インタプリタ言語はプログラムの「実行方式」に焦点を当てている点に対し、スクリプト言語が言語の「用途」や「使い方」に焦点を当てている点です。

- インタプリタ言語:
実行方法に着目（インタプリタによって一行ずつ実行される）。
インタプリタを用いて実行される言語全般を指す。

- スクリプト言語:
用途に着目（特定のタスクの自動化や補助的な役割で使用される）。
必ずしもインタプリタ言語とは限らないが、多くの場合はインタプリタを用いて実行される。

### 例を使った違いの理解
- JavaScriptはブラウザ内で動作し、Webページ上で特定の動作を自動化する「スクリプト言語」です。しかし、実行される際は、ブラウザのインタプリタがコードを解釈して動作させるため、インタプリタ言語としても見なされます。

- Pythonは典型的なインタプリタ言語です。Pythonで書かれたプログラムは、Pythonインタプリタが逐次的に読み込んで実行します。Pythonはまた、スクリプト言語としても使用されることが多く、特定のタスクの自動化や簡易なプログラムに使われます。

### まとめ
インタプリタ言語は「インタプリタによって実行される言語」を意味し、スクリプト言語は「タスクの自動化や特定の用途のために使われる言語」を指します。
両者はしばしば重なり合い、スクリプト言語の多くはインタプリタによって実行されますが、スクリプト言語の概念は「用途」に基づき、インタプリタ言語の概念は「実行方法」に基づいています。
BEP-20 トークン標準の詳細解説

![binance smart chain.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2944615/b3e43077-310e-e740-5dc3-a5d4a49a6597.png)



# BEP-20 トークン標準の詳細解説
-----------------------
#### 01 はじめに
-----------------------

暗号通貨の世界では、トークン標準は相互運用性と統一性を確保するために重要な役割を果たしています。**BEP-20** は、Binance Smart Chain (BSC) 上のトークン標準であり、開発者にとって、トークンの作成と管理を容易にする手段を提供します。これは、Ethereum の **ERC-20** 標準に類似しています。本稿では、BEP-20 標準の定義、ERC-20 との比較、トークンの作成プロセス、および BSC エコシステムにおける BEP-20 の応用について詳しく説明します。

### 02 BEP-20 とは？
-----------------------
**BEP-20** は、Binance Smart Chain 上のトークン標準であり、トークンの転送、承認、管理がどのように行われるかを規定するルールセットです。BEP-20 は、Ethereum 上の ERC-20 トークン標準との互換性を持つように設計されているため、開発者は Ethereum 上のアプリケーションを BSC に簡単に移植することができます。
BEP-20 は、分散型アプリケーション（DApp）開発者に、汎用的なトークン開発テンプレートを提供します。ステーブルコイン、ガバナンストークン、NFT トークンのネイティブ通貨など、さまざまなトークンが BEP-20 標準に従って設計できます。これにより、ユーザーと開発者は効率的で便利なトークン操作の体験を享受できます。

### 03 BEP-20 と ERC-20 の違い
-----------------------
BEP-20 と ERC-20 の構造とルールは非常に似ており、開発者は ERC-20 トークンを Ethereum から Binance Smart Chain に簡単に移植することができます。しかし、BEP-20 はいくつかの点で最適化されており、BSC の高性能と低コストの特性に適しています。
1. **トランザクションコスト**：  
   ERC-20 は Ethereum 上で動作し、トランザクションコスト（つまり、ガス料金）は通常高額です。特に、Ethereum ネットワークが混雑している場合、ガス代がさらに上昇します。一方、BEP-20 は Binance Smart Chain 上で動作しており、**Proof of Staked Authority (PoSA)** コンセンサスメカニズムにより、BSC のトランザクションコストは通常低く、ユーザーはトークンの転送などの操作時にコストを大幅に節約できます。
2. **互換性**：  
   BEP-20 は ERC-20 と互換性があるため、開発者は既存の Ethereum トークンを BSC 上で動作させることができます。これにより、Ethereum のインフラを利用しつつ、BSC の低コストと高速なトランザクション処理を享受できます。
   
### 04 BEP-20 トークンの作成方法
-----------------------
BEP-20 トークンの作成プロセスは、Ethereum の ERC-20 トークンの作成に類似しており、主に Solidity を使用してコントラクトを記述します。以下は、BEP-20 トークンを作成する基本的なステップです：
1. **コントラクトの作成**：  
   Solidity を使用して、トークンの総供給量、名前、シンボルなどの基本的なプロパティを定義します。これは、ERC-20 と非常に似た構造で記述されます。
   
2. **テストネットでのデプロイ**：  
   トークンが正しく機能するかを確認するため、BSC Testnet にデプロイし、テストを行います。
3. **Mainnet へのデプロイ**：  
   テストが完了したら、Mainnet にトークンをデプロイし、一般公開します。
   
### 05 結論
-----------------------
BEP-20 は、Ethereum の ERC-20 標準と互換性を持ちつつ、BSC の低トランザクションコストと高速な処理性能を活用するための重要なトークン標準です。この標準により、開発者は Binance Smart Chain 上で効率的かつスケーラブルなトークンエコシステムを構築することができます。
Output練習のためProjectEulerを解いてみる #3

Output練習のためProjectEulerを解いてみる第3問目です。
それでは解いていきます。
# #3 Largest Prime Factor
<p>The prime factors of $13195$ are $5, 7, 13$ and $29$.</p>
<p>What is the largest prime factor of the number $600851475143$?</p>

# 意訳
13195の素因数は5,7,13,29である。
600851475143の最も大きい素因数は何か？

# 方針
ある数の素因数を求めるということなので、1~Nまでの素数をエラトステネスの篩で求めてあげて、600851475143を素数で割って素因数を求めました。
# 解法1
```ProjectEuler_3.py
N = 600851475143
def divisor_generate(NUM):
    divisor = {n for n in range(2, NUM + 1)}
    for i in range(2, int(NUM**0.5)+1):
        for j in range(2*i, NUM+1, i):
            divisor.discard(j)
    return divisor

divisor = divisor_generate(int(N**0.5))
factor = []
for d in divisor:
    if N % d == 0:
        factor.append(d)
print(max(factor))

```
これを解くと4613732が得られる。
ここで使っているテクニックとして、集合の要素を削除するときに、discardを使うことでない数字が代入されてもエラーを起こさないようにしています。また、今回は素数で一回割れたらfactorに挿入する方法をとっているので、$600851475143 = a^2 \times b \times c^4 ...$という可能性もありましたが、求められているものは最も大きい素因数なので、あえて除外しました。
AIを活用しよう！


## おすすめのAI
プログラミングでエラーが起きたり、コード調べるときは、AIを使おう！！
おすすめは、GoogleのGeminiか、Open AIのChat GPTです。
https://gemini.google.com
https://chatgpt.com/

## AIへの説明の仕方
まず、エラーの理由を教えよう。教え方は簡単に
<br>「●●のライブラリを使っていて、●●●●でエラーが起きます。どうしたらよいですか？」
のように、人に聞くような感じでよいと思います。

実際に使った様子（gemini）
![スクリーンショット 2024-10-01 203627.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3897258/6a5580ac-2642-464c-2791-0e9a6c38796b.png)

このように、最近のAIはとても進化しているのでざっくりでもちゃんと答えてくれるので、検索しても出てこなかった人などはAIを時には使うのもいいかもしれません。

## 注意点
注意点としては、AIは、間違ったことを書いている場合もあるので、しっかりコードを見る必要があります。
自作スクリプトもパスを通すと便利だったので共有したい

# はじめに
定型作業を効率化させるために自分でスクリプトを作成する人は多いと思う。私もそうだ。ただ私は作成したスクリプトをデスクトップやドキュメントなど作った場所に放置していることが多かったため、以前作成したものがどこにあるのかわからなくなっていた。
そんなとき、ふと「自作スクリプト用のフォルダを作成し、そこにパスを通せば便利では」と思った。実際に試したところ、想像以上に便利だったためこの体験を共有するために今記事を書いた

# 概要
- 自作スクリプトを配置する用のフォルダを作成し、その中にスクリプトを保存する
- そのフォルダのパスを通す
- 作成したスクリプトは拡張子を付けないことで、コマンドと同じように実行できる

# 手順
#### 1. 自作スクリプト保存用のフォルダを作成
自作スクリプト保存用のフォルダを作成する。
作成場所や名前は自由に決める
今回はホームディレクトリに作成する
```sh
$ mkdir myscripts
```
#### 2. スクリプトの作成
##### 2.1 シェルスクリプトを作成する
汎用的にするには現在ディレクトリを参照すると良い
今回は現在ディレクトリのファイル名を1回ずつ出力するスクリプトを作成
```sh
$ touch filenames
```
```sh
#!/bin/bash
# filenames

for file in *; do
    if [ -f "$file" ]; then
        echo "$file"
    fi
done
```
##### 2.2 フォルダに保存
先ほど作成したフォルダに保存する
```
$ mv filenames ~/myscripts
```
##### 2.3 実行可能にする
作成したスクリプトを実行可能ファイルにする
```
$ chmod u+x ~/myscripts/filenames
```

##### 2.4 (閑話)実行確認
3でパスを通して実行するが、その前に作成したスクリプトが動作するか確認する
myscriptsフォルダに移動し、スクリプトを実行する
このフォルダには先ほど作成した`filenames`ファイル以外ないため、期待値は`filenames`と表示されることである

■期待値
`filenames`と表示される
```
$ cd ~/myscripts
$ ./filenames

filenames
```
期待値通り`filenames`と表示されたため、実行可能であると確認できた

#### 3. パスを通す
環境変数`PATH`に`myscripts`フォルダまでの絶対パスを登録する
1. `myscripts`フォルダに移動
2. 絶対パスを表示
3. パスを通す処理を`.bashrc`に追記
4. `.bashrc`の再読み込み
```sh
# 1. myscriptsフォルダに移動
$ cd ~/myscripts

# 2.フォルダまでの絶対パスを表示
$ pwd

# 3.パスに通す処理を.bashrcに追記
$ echo "export PATH=$PATH:{絶対パス}" >> ~/.bashrc 

# 4. .bashrcの再読み込み
$ bash
```

#### 4. 実行
他ディレクトリに移動し、filenamesが実行できるか確認する
パスを通すことに成功していた場合、`filenames`と入力するだけで、現在ディレクトリのファイル名が出力される
```sh
# ホームディレクトリに移動
$ cd 
# ファイルを作成(ファイルがない場合)
$ touch test.txt

# 実行
$ filenames
test.txt
```
パスが通っているため、他のコマンドのように実行できた

# この方法の利点
自作スクリプト用のフォルダを作成し、パスを通すことの利点は管理のしやすさにある
パスが通っているため、新たにスクリプトを作成したときは、実行可能にしてそのフォルダに保存するだけで`filenames`と同様に実行できる
また、使わなくなったスクリプトの削除もそのフォルダから削除するだけでよい
スクリプトの追加と削除の手順の少なく、すべてのスクリプトが1つのフォルダにあることで非常に管理が簡単になる

# あとがき
自作スクリプト用のフォルダを作成し、パスを通す方法と利点についてまとめた
思いついて実践したところ非常に便利だったので、もしよろしければ試してみてほしい
Linuxとは？　～シェル、ディストリビューション、お手軽に環境構築する方法を解説～

こんにちは！
元公務員エンジニア3年目のガッキーです！
3年目に突入してフロント・バックエンドのコーディングの基礎ができるようになってきて、
新たな作業領域を増やしたいと思って浮かんだのがインフラです。
今回はインフラでも基礎の基礎！

- Linuxがどのように構成されているのか？
- Dockerを使ってLinuxの環境構築をお手軽に作る方法！

解説していきたいと思います！


# Linuxとは？

OS（オペレーティングシステム）の一種です。
特にサーバーや開発環境で広く使用されています。




## OSとは？

ハードウェアとアプリケーションを結ぶもので
メモリ、ディスク管理やハードウェア（キーボード等）からの情報をアプリケーションに役割があります。
代表的なOSは、Windows、macOS、Linuxがあります。

さて、OSがどのような構成になっているか見ていきましょう！


## シェル

![エンジニアになる前から 継続していること！.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/671845/86fa043d-6ec1-b2fd-36d1-d2c4f64ba257.jpeg)


カーネルというOSの核となる部分を包んでいる殻で
ターミナル等のコマンドラインから入力されたコマンドをカーネルに渡すもの。
主なシェルの種類は以下です。

- Bash（Bourne Again Shell）
- Zsh（Z Shell）
- Dash


## カーネル

Linux OSの中核部分であり、ハードウェアとソフトウェアをつなぐ役割を担っています。
カーネルは、CPU、メモリ、ディスク、ネットワーク等を管理してします。



# Linuxディストリビューションとは？

Linuxの構成要素（カーネルやツールなど）をひとまとめにして、インストールすれば使える状態にしたパッケージで、主なディストリビューションは以下です。

- Ubuntu
- Red Hat
- CentOS
- Debian


# Dockerで手軽にLinux環境を構築する

ここからはDockerをつかって、
超簡単にLinuxコマンドが使える環境を構築する方法を解説します！

Dockerについては過去に解説しているのでご覧ください！

https://qiita.com/gaky1201/items/72232ec6ffa5b628ddac

# ubuntuのコンテナ起動


```cmd
docker run -it --name ubuntu_container ubuntu:latest
```

こちらのコマンドを入力するだけで簡単にLinuxのコンテナを構築することができます。
- `--name`オプションでコンテナ名に`ubuntu_container`を設定しています。
- `ubuntu:latest`でUbuntuの最新バージョンのイメージを使用します。

コンテナが構築されてattach（コンテナに接続してコマンド入力できる状態のこと）されます。

# コンテナの再起動

```cmd
docker start ubuntu_container
```

こちらで止まっているコンテナを再起動します。

```cmd
docker attach ubuntu_container
```

コンテナにattachしてlinuxコマンドが入力できる状態になります。

ちなみに画像のようにVSCodeやCursorからコンテナにattachできます！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/671845/9bc092b7-fb1a-16c7-45be-7259a9dd0c37.png)


# 確認方法

```bash
echo $SHELL

/bin/bash
```

`echo $SHELL`を入力するとUbuntuのデフォルトで設定されているシェルであるbashが表示されます！

# まとめ🖊️

ご覧いただきありがとうございました！
何か気になる点や、おかしな点ありましたらお気軽にコメントください！
Binance Smart Chain 上のスマートコントラクトの動作

![binance smart chain.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2944615/1876eaa5-a1d4-41d3-90e1-4027e6822b66.png)


# Binance Smart Chain 上のスマートコントラクトの動作
--------------------------
### 01 はじめに
--------------------------
スマートコントラクトは、ブロックチェーン技術の中核の一つとして、分散型アプリケーション（DApp）の発展を大きく促進しました。Binance Smart Chain（BSC）は、Ethereum Virtual Machine（EVM）互換性を持つため、多くの開発者がその上でスマートコントラクトの開発・展開を行っています。本稿では、スマートコントラクトの基本概念、BSC 上での特徴、および BSC 上でのスマートコントラクトの作成・管理方法について詳しく説明します。
### 02 スマートコントラクトとは？
--------------------------
**スマートコントラクト** とは、ブロックチェーン上で実行される自動化プログラムで、あらかじめ設定された契約条件を実行するものです。従来の契約とは異なり、スマートコントラクトはコードで記述され、一度ブロックチェーン上に展開されると改ざんすることができません。これは、合意された条件が満たされた場合、契約が自動的に実行されることを意味し、人為的な介入が不要です。スマートコントラクトの実行は公開されており、すべての参加者の利益を保護します。
例えば、暗号通貨の取引では、スマートコントラクトが売買の処理を自動化し、買い手が支払いを行ったとき、コントラクトは自動的に資産を買い手に移転します。この仕組みにより、分散型アプリケーションは効率的、安全かつ自動化された運用が可能です。
### 03 Binance Smart Chain 上のスマートコントラクトの特徴
--------------------------
BSC がサポートするスマートコントラクトの重要な特徴の一つは、Ethereum Virtual Machine（EVM）に完全対応していることです。これにより、開発者は Ethereum 上でのスマートコントラクトを容易に BSC に移行して動作させることができます。以下は BSC 上のスマートコントラクトの主要な特徴です：
**1. EVM 互換性：**  
Binance Smart Chain が多くの開発者に支持されている理由の一つは、EVM に完全対応しているためです。これは、Ethereum の開発者が新しいプログラミング言語やツールを学ぶ必要なく、BSC 上でスマートコントラクトを開発・運用できることを意味します。BSC は Solidity プログラミング言語をサポートしており、Ethereum 上の既存のコントラクトを容易に BSC に移行することが可能です。
**2. 低いトランザクションコスト：**  
BSC は Ethereum に比べて、トランザクション手数料が低いです。Ethereum ネットワークは時折、ネットワークの混雑により高額なガス料金が発生しますが、BSC の PoSA コンセンサスメカニズムは、ユーザーや開発者がスマートコントラクトを実行する際のコストを効果的に低減します。
**3. 高速なトランザクション処理：**  
BSC のコンセンサスメカニズムである PoSA（Proof of Staked Authority）は、より迅速なブロック生成とトランザクション処理を可能にします。これにより、スマートコントラクトの実行速度が大幅に向上し、ユーザーエクスペリエンスが最適化されます。
### 04 BSC 上でのスマートコントラクトの作成と管理
--------------------------
BSC 上でスマートコントラクトを作成するには、主に Solidity を使用してコントラクトを記述します。開発者は、Ethereum 上の開発プロセスに精通していれば、BSC でも同様の手順でコントラクトをデプロイおよび管理できます。
1. **開発ツールの選定**：BSC 上での開発には、Remix、Truffle、Hardhat などのツールがよく使われます。
2. **Solidity の使用**：BSC は Solidity をサポートしており、Ethereum 上で記述したコントラクトをそのまま BSC に移行して使用することが可能です。
3. **テストとデプロイ**：コントラクトのテストには、BSC Testnet や、ローカルの開発環境を使用します。テストが完了したら、Mainnet にコントラクトをデプロイすることができます。
### 05 結論
--------------------------
Binance Smart Chain は、Ethereum 互換性を持つことで、スマートコントラクトの開発・運用を容易にし、さらに低いトランザクションコストと高速な処理能力を提供します。これにより、開発者やユーザーは、より効率的でスケーラブルな分散型アプリケーションを構築することが可能となり、BSC のエコシステムの成長を支えています。
Word文書の行間隔が広すぎる

Office360のワードの行間隔は異常に広すぎると思うのですが、違和感を感じませんか。
添付はパソコンを起動した直後にワードを開き既定値のまま入力したものです。
![文書 1 - Word 2024_10_01 20_20_50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1946859/2c47b402-14eb-3543-7d7e-07db61e72595.png)

参考にこれはGoogle‘のドキュメントで入力したものです。
これは正常だと思います。
![無題のドキュメント - Google ドキュメント および他 1 ページ - 個人 - Microsoft​ Edge 2024_10_01 20_23_20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1946859/3623fec8-96d0-2a5f-0496-4f6349842b9b.png)
Binance Smart Chain のコンセンサスメカニズム


![binance smart chain.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2944615/7314ce2f-eaf5-ba25-f2b0-d62850325431.png)


# Binance Smart Chain のコンセンサスメカニズム
--------------------------
### 01 はじめに
--------------------------
ブロックチェーンの分野では、**コンセンサスメカニズム** は、ネットワークのセキュリティ、トランザクションの検証、そして分散化を確保するための中核的な要素です。異なるブロックチェーンプラットフォームは、セキュリティ、分散化、効率性のバランスを取るために異なるコンセンサスメカニズムを採用しています。Binance Smart Chain（BSC）は、**Proof of Staked Authority (PoSA)** という革新的なコンセンサスアルゴリズムを採用しており、これは**Proof of Stake (PoS)** と**Proof of Authority (PoA)** の利点を組み合わせたものです。本稿では、BSCのコンセンサスメカニズムの仕組みとその利点について詳しく解説します。
### 02 コンセンサスメカニズムとは？
--------------------------
コンセンサスメカニズムは、分散型ネットワークにおいて、参加者がトランザクションの有効性について合意に達するためのプロトコルです。コンセンサスメカニズムを通じて、ネットワーク内のノードはトランザクションを検証し、台帳の一貫性を確保することができます。分散化されたブロックチェーンネットワークでは、すべてのノードがブロックチェーンの状態について一致しなければ、データの改ざん防止および分散化の特性を保証することはできません。
一般的なコンセンサスメカニズムには、**Proof of Work (PoW)** と **Proof of Stake (PoS)** があります。Proof of Work は大量の計算能力を用いてマイナーが競争を行うのに対し、Proof of Stake はノードが暗号資産をステーキング（預け入れ）することで、検証に参加する権利を得る仕組みです。BSC の PoSA は、これらのメカニズムのさらなる改良版です。
### 03 Proof of Staked Authority (PoSA) とは？
--------------------------
Binance Smart Chain が導入した **Proof of Staked Authority (PoSA)** は、ステーキングと権威証明を組み合わせたコンセンサスメカニズムです。これは、選ばれたバリデーターが BNB（Binance Chain のネイティブトークン）をステーキングすることで、ブロックを検証し追加する権利を得る仕組みです。バリデーターは、ステーキング量と信用に基づいてコンセンサスに参加し、ネットワークの安全性と安定性を保証します。
PoSA の動作原理は、以下のステップに簡略化できます：
1. **ステーキングメカニズム**：バリデーターになるためには、一定量の BNB をステーキングすることが前提条件です。バリデーターはロックしたこの資産を通じて、ネットワークの信頼性を支える役割を果たします。
2. **ブロック生成**：バリデーターはラウンドロビン方式で選出され、順番にブロックを生成します。このプロセスはPoAメカニズムに基づいており、各バリデーターが一定の権威を持って行動します。
3. **トランザクションの検証**：ブロックに含まれるトランザクションは、バリデーターによって検証され、その後ネットワークに追加されます。
### 04 PoSA の利点
--------------------------
**1. 高速なトランザクション処理**: PoSA メカニズムは、バリデーターの小規模なグループによるブロック生成の効率化を図ることで、高速なトランザクション処理を可能にしています。
**2. エネルギー効率の向上**: PoW のような大量の計算能力を必要としないため、BSC の PoSA はよりエネルギー効率が高いです。これにより、環境への負荷を減らしながらも、高度なセキュリティとスループットを実現しています。
**3. 分散化とセキュリティのバランス**: PoSA メカニズムは、分散化とセキュリティのバランスを取るための効果的な手段です。バリデーターはステーキングされた資産を失うリスクを負いながら、ネットワークのセキュリティを維持します。
### 05 結論
--------------------------
Binance Smart Chain の **Proof of Staked Authority (PoSA)** は、従来のコンセンサスメカニズムの進化形として、効率的なトランザクション処理、高度なセキュリティ、そして分散化のバランスを提供します。この仕組みによって、BSC は分散型アプリケーション (dApps) のためのスケーラブルで強固な基盤を提供し、ブロックチェーン業界での競争力をさらに高めています。
UUIDを主キーにすると遅いのか？

今回は記事や動画で話題になっていたタイトルのことについてまとめて
知識の定着のために書いていきます！

## まずUUIDとは？

UUIDとは「Universally Unique Identifier（ユニバーサルユニークアイデンティファイア）」の略称です。
これは、コンピューターシステムでオブジェクトを一意に識別するために使用される特別な文字列です。

なぜUUIDが重要かというと、ウェブサイトのユーザーアカウントを管理する際、一意なIDを持っていることで、アカウントを追跡したり、データベース内での関連付けを確実にすることができるんです。

「d78e2e8b-1944-4a6a-b77c-1c9ab3a6cd9f」というようなランダムな文字列がUUIDです。
これは一意で、他のどんなデータでも同じになることはありません。
UUIDのv4がこれにあたります。UUIDはバージョンによってかなり違ってきます。

## UUIDは遅いのか？
結論、遅いみたい。だが大規模アプリではなければそこまで気にしなくても大丈夫なレベル。

## 性能面
こういう時に性能に影響がある
- 1テーブル数億レコード溜め込む場合
- 追加更新が秒間数百トランザクションある

## なぜ遅くなるのか？
- UUIDはシンプルに文字数が多い
- ランダムに並んでるからソートができない
Docker Desktop for Mac が起動しなくなった

Docker Desktop for Mac のバージョンを [4.30.0](https://docs.docker.com/desktop/release-notes/#4300) にあげたら Docker Desktop が起動しなくなった。

## 原因

- 当該バージョンから Docker Desktop の起動の際に子プロセスをシェルで起動するように変更されたようで、`~/.zprofile` に書かれた内容が実行されるようになった。
- 私の環境の .zprofile ではインタラクティブなプログラム (fzf) を起動していたので、キー入力がない状況ではいつまで経っても子プロセスが立ち上がらず Docker Desktop が起動しなくなった。

## 対処法

fzf を起動する前に if 文で `[[ "$(tty)" = "not a tty" ]]` をチェックした。
install netcdf on Rocky Linux 8.8

# TL;DR

* to avoid error, need "powertools"


# prepare

```
dnf install dnf-plugins-core
```

# install

```
dnf install --enablerepo=powertools netcdf-devel
```

Dependencies
```
Dependencies resolved.
==============================================================================================================================================
 Package                            Architecture                Version                                 Repository                       Size
==============================================================================================================================================
Installing:
 netcdf-devel                       x86_64                      4.7.0-3.el8                             epel                            121 k
Upgrading:
 libcurl                            x86_64                      7.61.1-34.el8_10.2                      baseos                          303 k
Installing dependencies:
 hdf                                x86_64                      4.2.14-5.el8                            epel                            651 k
 hdf5                               x86_64                      1.10.5-4.el8                            epel                            2.1 M
 hdf5-devel                         x86_64                      1.10.5-4.el8                            epel                            1.2 M
 libaec                             x86_64                      1.0.2-3.el8                             powertools                       38 k
 libaec-devel                       x86_64                      1.0.2-3.el8                             powertools                       10 k
 libcurl-devel                      x86_64                      7.61.1-34.el8_10.2                      baseos                          835 k
 netcdf                             x86_64                      4.7.0-3.el8                             epel                            645 k

Transaction Summary
==============================================================================================================================================
Install  8 Packages
Upgrade  1 Package
```

# c.f.

netcdfの依存パッケージとしてhdf5が入る。
そちらのためにpowertoolsが必要のようだ。jasper-develなんかも含まれている。

https://thelinuxcluster.com/2023/05/22/unable-to-install-hdf5-hdf5-devel-and-hdf5-static-on-rocky-linux-8-7/


# c.f. 2

powertoolsはRocky 9ではCRBになるようだ

https://qiita.com/koizumistr/items/f8e2eece3a4b5fb2fa03
What are some tips for maximizing the use of task timers?

Task timers are powerful tools for improving productivity and managing time effectively. Using them wisely can enhance focus, track progress, and complete tasks efficiently. Here are some practical tips to help you maximize the benefits of task timers in your daily routine.
1. Break Tasks into Smaller Segments
Breaking large tasks into smaller, manageable chunks makes them less overwhelming. Using a task timer, you can allocate specific time slots for each segment. This approach helps maintain focus and keeps you from feeling discouraged by the size of the task. 
2. Prioritize Your Tasks
Before starting your task timer, list your tasks by priority. By pairing task prioritization with a task timer, you ensure that important tasks receive the attention they deserve while avoiding distractions from lower-priority items.
3. Use the Pomodoro Technique
One of the most popular time management methods, the Pomodoro Technique, involves working for 25 minutes and taking a 5-minute break. After four rounds, take a longer break. This method helps prevent burnout while keeping you motivated. Task timers are ideal for implementing this technique, as they can track both work periods and breaks.
4. Set Clear Goals for Each Session
To make the most of each timed session, set specific goals for what you want to accomplish. This not only boosts productivity but also provides a sense of achievement. Clear goals paired with a task timer give your work structure and direction, helping you stay focused.
5. Avoid Multitasking
When using a task timer, focus on one task at a time. Multitasking reduces efficiency and can lead to mistakes. By dedicating your full attention to a single task during a set time frame, you’re more likely to complete it with higher quality.
6. Review Your Time Logs
Many task timers track how much time you spend on different tasks. Use this data to review your performance and identify areas where you may be losing time. This allows for continual improvement in managing your time more effectively.
7. Combine with Project Management Tools
Integrating your task timer with project management software can streamline your workflow. These tools allow you to align your tasks with broader project goals, helping to monitor progress and ensure deadlines are met.
Conclusion
Maximizing the use of task timers requires thoughtful planning, focus, and regular review. By following these tips, you can boost productivity, reduce distractions, and manage your time more effectively in both professional and personal settings.
実行時間を予測したい( 1敗 )

# 概要
データ量と実行時間から近似曲線を求め、データ量を増やした時の実行時間を予測できなか試したができなかった。
備忘録として投稿

# 背景
O(n)やO(n^2)などロジックによって処理時間が変化することは周知の事実である。では、具体的な実行時間を予測するためにはどのようにすればよいだろうか
どのプログラムもデータ量が増えれば実行時間は長くなる。すなわち、データ量と実行時間の結果があれば、よりデータ量を増やした時の実行時間を予測することができるのではないかと考え、実験をしてみることにした


# 準備1：前提処理の作成
実行時間を測定するためのロジックや、複数のデータ量を用意するための処理を作成する
#### 1. 共通ロジックの作成
以下の2つの満たすため、計算量が10√nとなるロジックを作成した
- データ量によって実行時間にある程度の差がでる
- 結果が曲線になる(実際のプログラムで線形になるとは考えにくいため)
```py
def baseLogic(n: int) -> tuple[int, float]:
    '''
    共通ロジック
    期待処理時間=n√n
    '''
    resultArray: list[int] = []
    sqrtN = int(math.sqrt(n))
    
    startTime = datetime.now()

    # 計算量10√n
    for _ in range(1, 10):
        for i in range(sqrtN):
            # 適当に負荷をかける
            if i % 10 == 0:
                resultArray.append(i*1)
            resultArray.append(i*1)

    endTime = datetime.now()
    diffTime = endTime - startTime

    # データ量と経過時間(sec)を返す
    return n, diffTime.total_seconds()
```


#### 2. データ量と実行時間のデータの取得
上の共通ロジックを複数のデータ量で実行
データ量と実行時間のプロットをとる
```py
def main():
    # サンプルサイズ；1から10万
    # 適当に間をあける
    Ns = [i for i in range(100000) if i % 100 == 0]
    # それぞれの実行時間を計測
    result: list[tuple[int, float]] = []
    for n in Ns:
        result.append(baseLogic(n))
```
結果をプロットしたらこんな感じ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3508744/e2b2b6af-504d-131c-4f7d-e54432965ff3.png)

# 準備2：近似処理の作成
生のデータを加工し、近似直線を作成する
近似直線からデータ量と実行時間の関係を表す式を求める
#### 1. 近似直線式
最終的に求める曲線の式を`y=ax^b`とし、その両辺の自然対数をとった式をもとめる
```
logy = blogx + loga
```
この式はlogyについて解いたlogxの一次式である
そのため、logy=Y,logx=Xとしたとき以下のように変形できる
```
Y = bX + loga
```
XとYに結果の自然対数をあてはめプロットする。
その後、logaとbの近似値を求める

#### 2. 曲線式を求める
bとlogaの結果から、`y=ax^b`のaとbを求める
aはe^logaで求まる
bはそのまま当てはめる

#### 3. コードの作成
近似直線からaとbを求め、近似曲線式を作成し期待値と実際の実行時間を測定する処理を追加した

```python
def main():
    # サンプルサイズ；1から10万
    Ns = [i for i in range(1, 100000) if i % 500 == 0]
    # それぞれの実行時間を計測
    result: list[tuple[int, float]] = []
    for n in Ns:
        result.append(baseLogic(n))

    x: list[int] = [] # データ量
    y: list[float] = [] # 実行時間
    for n, time in result:
        x.append(n)
        y.append(time)

    # 以降を追加==============================
    
    # 近似式を求める
    sqrtX = np.log(np.array(x))  # 自然対数を計算
    sqrtY = np.log(np.array(y))  # 自然対数を計算

    # 2D配列に変換
    sqrtX_reshaped = sqrtX.reshape(-1, 1)  # 特徴量を2D配列に変換
    sqrtY_reshaped = sqrtY.reshape(-1, 1)  # ターゲットを2D配列に変換

    # 線形回帰モデルの適合
    model = LinearRegression()
    model.fit(sqrtX_reshaped, sqrtY_reshaped)
    # 近似曲線y=ax^bのaとbを求める
    b = model.coef_
    loga = model.intercept_
    a = math.exp(loga)

    # データ量1億の実行時間期待値
    n = 1000000
    print(f"データ量１億の時の実行時間(sec)={a*(n**b)}")
    
    # 実際の処理時間
    _, execTime = baseLogic(n)
    print(execTime)
    
    # end以降を追加==============================
```

## 実施と結果
期待値はデータ量を1億の際の期待値と実際の実行時間に差がないこと
結果・・・
```
#期待値
0.00041778

# 実際の処理時間
0.000779
```

倍くらい違う。。。

何回やっても期待値と比べて実際の処理時間は2倍になりました。。。

## あとがき
実行時間の予測ができれば便利だと思い自分の知識のみで試したが失敗した。
しかし、当初の考えが間違っていたとわかったことは評価したい。
【React × Supabase × Chakra-ui × TypeScript】名刺アプリを作成しました

# はじめに
Web上で情報の表示ができる名刺アプリを今回Reactの勉強のため、開発したのでご紹介です。

# 作ったアプリ
|*名刺表示*    |*新規登録*                  |
|----------|--------------------------|
|<img width="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2835870/db0036db-2f88-670b-6cb1-e07bfe706eb5.gif">|<img width="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2835870/0273a319-8b0a-65ad-ba05-7ce11daa9ecc.gif">|

https://github.com/yuuki4135/bussiness-card-app

# 使った技術
* React
* vite
* Typescript
* Jest
* chakra-ui
* supabase
* react-hook-form
* react-router-dom
* firebase
* githubActions
* githubActionsでcron処理

# 工夫したところ、苦労したところ
* できるだけ共通ファイルをimportする形にして、コードの記載量を減らしたこと
typeをできるだけ一つのファイルとしたこと
カスタムフックを利用してsupabaseの通信を一つのファイルにまとめたこと
* DOMPurify.sanitaizeを利用して、自己紹介のフォームでいれることのできるタグを制限したこと
* 自動テストの書き方には苦労しました。。。awaitの付け忘れで処理を待てていなかったり、、DomPurify.sanitaizeのimportエラーがでたり

https://qiita.com/yuuki4135/items/17eef9ca5992cf9fac53

https://qiita.com/yuuki4135/items/41cbf7f995a5335505e6

# このアプリを通じて成長できたところ
* githubActionsでcron設定を行いバッチ処理ができることを初めて知れたこと
* Jestの書き方に徐々に慣れてきていること
* typescriptの書き方に慣れることができたこと
* カスタムフックの使い方が身についてきたこと

# おわりに
一番勉強になることはやはり、アプリを作ることだなと実感できました。
今回はJISOUのコミュニティで出されたアプリを作る際の仕様を課題に書いてあったので、それを自分で調べて実装していくことでいろいろなことを新しく学ぶことができました。
Jest・typescriptの型定義など徐々に慣れてきたので、今後はUI/UXの視点もしっかり考えながらアプリ開発を行いたいと思います


# JISOUのメンバー募集中
プログラミングコーチングJISOUではメンバーを募集しています。
日本一のアウトプットコミュニティでキャリアアップしませんか？
気になる方はぜひHPからお願いします:下向き指差し:
https://projisou.jp
Python3: GATT の Characteristic を調べる

事前に　bluetoothctl で ペアリングをしておく必要があります。

## プログラム

```py:get_services.py
#! /usr/bin/python

import asyncio
from bleak import BleakScanner, BleakClient

# 対象デバイスの MAC アドレスを設定
TARGET_MAC_ADDRESS = "2C:BC:BB:65:E8:5A"  # ここに対象デバイスの MAC アドレスを入力

# デバイスをスキャンして、接続後にサービスと characteristic を取得する関数
async def connect_and_list_characteristics():
    print(f"Scanning for device with MAC address: {TARGET_MAC_ADDRESS}")
    
    # BLE デバイスのスキャン
    devices = await BleakScanner.discover(return_adv=True)
    target_device = None
    
    # 指定した MAC アドレスに一致するデバイスを探す
    for device, adv_data in devices.values():
        if device.address == TARGET_MAC_ADDRESS:
            target_device = device
            print(f"Found device with MAC address: {device.address}")
            print(f"  Name: {device.name}")
            print(f"  RSSI: {adv_data.rssi}")
            print(f"  UUIDs: {adv_data.service_uuids}")
            break

    if target_device is None:
        print(f"No device found with MAC address: {TARGET_MAC_ADDRESS}")
        return
    
    # デバイスに接続して GATT サービスと characteristic の UUID を取得
    async with BleakClient(target_device) as client:
        print(f"Connected to {TARGET_MAC_ADDRESS}")
        
        # GATT サービスを取得
#        services = await client.get_services()
        services = client.services
        
        # サービスと characteristic の UUID を列挙
        for service in services:
            print(f"Service: {service.uuid}")
            for characteristic in service.characteristics:
                print(f"  Characteristic: {characteristic.uuid} - Properties: {characteristic.properties}")

if __name__ == "__main__":
    asyncio.run(connect_and_list_characteristics())
```

## 実行結果

```text
$ ./get_services.py 
Scanning for device with MAC address: 2C:BC:BB:65:E8:5A
Found device with MAC address: 2C:BC:BB:65:E8:5A
  Name: LV-HATR
  RSSI: -69
  UUIDs: ['7def8317-7300-4ee6-8849-46face74ca2a']
Connected to 2C:BC:BB:65:E8:5A
Service: 00001801-0000-1000-8000-00805f9b34fb
  Characteristic: 00002a05-0000-1000-8000-00805f9b34fb - Properties: ['indicate']
Service: 7def8317-7300-4ee6-8849-46face74ca2a
  Characteristic: 7def8317-7302-4ee6-8849-46face74ca2a - Properties: ['write']
  Characteristic: 7def8317-7301-4ee6-8849-46face74ca2a - Properties: ['read', 'notify']
```
昔作った自作サイトをリニューアルしたい

## はじめに

どうも、豆腐メンタルです。(いつもの挨拶)
最近ブログも学習も止まり気味だったので、そろそろ何か書こうと、学習しようと思い
重い腰を上げて学習を再開しようと思った次第です。

しかし、何かいい感じに練習できるものはないか?
基本的に学習はUdemyで講座を受けて、学習...という感じだったのですが
どちらかというとインプットに比重を置きすぎていて、アウトプットをできていたかというと
正直できてなかったと...

じゃあ、１からまたアプリを作るか~となれたらいいんですけど、まあ残念ながらズボラな自分はそこまで踏み切れないところあるので(開き直り)
「なんか学習したことをアウトプットできる場所ないかな〜」とPCで睨めっこしていた時に

**突如、電流が走る...!!**

「そういえば、就職活動の時に作っていた自作サイトあったな...あれを学習で使えないだろうか」と...

というわけで、思いつきで企画が始まりました。
今後、学習した内容をアウトプットする目的で過去に作った自作サイトを活用していきます。

学習した技術だったり、備忘録を残していければと思います。

## 使用技術(うろ覚え)

VScode(統合開発環境)

HTML&CSS
Ruby
JavaScript

Ruby on Rails

MySQL

## アプリ概要
イラスト投稿サイト。
ユーザー登録したユーザーが、自身で描いたイラストを投稿して、他のユーザーと交流できる。
オシャレな感じではなく、「ゆるさ」を目指したコンセプト。
大手イラストサイトは敷居が高いので、お絵描き初心者が気楽に交流を取ることが狙い。
「豆腐」にこだわっている

## 画面構成

### 一覧画面
ユーザーの投稿したイラストが一覧が表示される。
上のバーに「新規登録」「ログイン」があり、ユーザー認証されると表示が変わり
「ログアウト」「めにゅー」になる。
表示されたイラストをクリックすると、詳細画面に行く。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3020655/87b5c5b3-fcdf-f8a6-c4df-c8c9b41ec573.png)
「めにゅー」にカーソルを合わせると、「投稿する」「マイページ」と表示される

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3020655/8727b819-62fb-b5cb-12eb-7c0b0afa3e29.png)

### 新規登録画面
イラストを投稿する画面
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3020655/8423cf05-92a7-e668-092c-cd48352bd6b4.png)

### 詳細,編集、削除画面
イラストの詳細画面。コメント機能がある。
Javascriptのajaxでシームレスにコメントが反映される(当時の自分、どうやって作った...)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3020655/a3be04bd-004e-dda2-eea9-90ceace283f1.png)

## マイページ
ログインしている状態で開ける。
ログインユーザーの投稿した過去のイラストを確認できる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3020655/f9eb9729-4f0a-7a38-5c8b-186d045a573d.png)



## 今後やりたいこと
優先度は番号若い順

1. HTML.CSSと共にうろ覚えなので、教材で復習しながらサイト全体のデザインをリファインしたい
2. Railsもうろ覚え。が、当時よりも頭は回るようになったので復讐も兼ねて学習
2. フレームワークは現在、Ruby on Railsを使っているがせっかくなので今学習しているJava Scriptを使ったフレームワークにリファクタリングしたい。
3. DBは現在MySQlだが、どうせなら別のDBを扱う予定。(苦手なので避けてたのは内緒)AWSとか使えれば...?

## 終わりに
ということなので、普段の学習記事の傍こちらのアウトプット記事も書いていこうと思います。
今回は、「昔の自分がどんなことをしようとしていたのか？」を思い出しながらの振り返るだけの記事となりましたが、この辺りで終わろうと思います。

ご閲覧ありがとうございました。
MacのUnityエディタでFirebaseを導入したアプリが動かない！DllNotFoundException: FirebaseCppApp-12_2_1エラーと実機テストでの解決法

# `DllNotFoundException: FirebaseCppApp-12_2_1`エラーと実機テストでの解決法


Firebaseを導入したUnityプロジェクトで、macOSのUnityエディタ上で `DllNotFoundException: FirebaseCppApp-12_2_1` というエラーが発生し、Firebase関連の機能が正しく動作しない問題に直面しました。しかし、Windows環境や実機でのテストでは正常に動作することが確認できたため、この問題の原因と解決方法を時系列に沿って解説します。

---

### 1. エラー発生：`DllNotFoundException: FirebaseCppApp-12_2_1`

macOSのUnityエディタでFirebaseを導入したプロジェクトを実行した際、以下のエラーメッセージが発生しました。

```
DllNotFoundException: FirebaseCppApp-12_2_1
```

このエラーは、FirebaseのネイティブライブラリがmacOS環境で正しく読み込まれず、Firebaseの機能が使用できない状態を引き起こしていました。

### 2. Windows環境での動作確認

問題の特定を進めるため、同じプロジェクトをWindows環境で実行しました。結果、Firebaseは問題なく動作し、エラーも発生しませんでした。これにより、問題がmacOS特有のものであることが明確になりました。

### 3. macOSのバージョンアップ

macOSのバージョンが原因かもしれないと考え、最新の「macOS Sonoma 14.7」にアップデートしました。しかし、アップデート後もエラーは解消されず、引き続きmacOSのUnityエディタでのみ問題が発生しました。

### 4. セキュリティ設定の確認

macOSのセキュリティ設定により、Firebaseのライブラリがブロックされている可能性があるため、「システム設定」→「プライバシーとセキュリティ」を確認しましたが、ブロックされている項目は表示されず、特定の設定による解決はできませんでした。

### 5. 実機テストによる確認

macOSのUnityエディタで問題が解決しなかったため、実機での動作を確認しました。iOSやAndroidデバイスにビルドしてテストしたところ、実機ではFirebaseが正常に動作することが確認されました。この結果から、macOSエディタ上での問題は実機には影響しないことが分かり、開発の方向性が明確になりました。

### 6. 結論: 実機で問題なし

最終的に、macOSのUnityエディタで発生する `DllNotFoundException: FirebaseCppApp-12_2_1` エラーは実機には影響せず、ビルドしたアプリケーションは実機で正しく動作することが確認されました。今後は、開発においてmacOSのエディタ問題に固執せず、実機でのテストを中心に進めることでFirebase機能を正常に活用できることが分かりました。

---

### 最後に

今回のエラーは、macOSのUnityエディタに特有の問題であり、根本的な解決には至っていません。しかし、実機での動作が確認できたため、とりあえず開発を進める上では問題ありません。macOSのUnityエディタでは引き続きエラーが発生する可能性がありますが、実機でのテストを重視しながら開発を進めることで、Firebaseを利用したアプリケーション開発は問題なく行えることが分かりました。今後、エディタ上での問題が解消されれば理想的ですが、現状では実機での動作確認が最も確実な解決策と言えます。