OmniAICreator/Qiita-1.07M huggingface dataset:
📝基本情報技術者試験(FE)~~💯「フォールトトレラントシステムと関連するシステムの概念」

システムの信頼性や性能を向上させるための構成として、フォールトトレラントシステム、デュアルシステム、デュプレックスシステム、負荷分散システム、並列処理システム、さらにコールドスタンバイシステム、ホットスタンバイシステム、マルチユーザシステム、マルチプロセッサシステムがあります。それぞれの特徴や違い、関係性を詳しく解説します。

## 1. フォールトトレラントシステム（Fault-Tolerant System）
**概要**  
フォールトトレラントシステムとは、**ハードウェアやソフトウェアの一部が故障しても、システム全体が正常に稼働し続けることを目的とした設計**のことです。

**特徴**  
- **冗長性を持つ構成**により、障害発生時にバックアップのコンポーネントが即座に引き継ぐ。
- **完全に無停止運用を実現**するため、リアルタイム性の高いシステムで利用される。
- **ミッション・クリティカルなシステム**（航空管制、金融取引、医療機器など）に適用される。

**代表的な技術**  
- **デュアルシステム**（同時に処理を実行し結果を照合）
- **ホットスタンバイ**（リアルタイムで同期し、即時フェイルオーバー）
- **エラーチェックと自動修復機能**（自己診断や冗長構成の活用）

## 2. デュアルシステム（Dual System）
**概要**  
デュアルシステムは、**2つの同じシステムが同時に同じ処理を行い、結果を比較する**方式です。

**特徴**  
- 2つのシステムが**並行して同じ処理を実行**し、出力結果を照合する。
- **結果が一致すれば正常**、不一致ならば**エラーが発生した可能性がある**。
- **高い信頼性が求められる場面**（航空管制、原子力発電、金融システムなど）で使用。

## 3. デュプレックスシステム（Duplex System）
**概要**  
デュプレックスシステムは、**メイン（主系）とバックアップ（待機系）の2つのシステムを用意し、メインが故障した場合にバックアップが動作する**方式です。

## 4. コールドスタンバイシステムとホットスタンバイシステム

### **コールドスタンバイシステム（Cold Standby System）**
- **通常はバックアップシステムが電源オフまたは休止状態**。
- メインシステムが故障した場合に、**手動または遅延ありでバックアップが起動**。

### **ホットスタンバイシステム（Hot Standby System）**
- **バックアップシステムが常時稼働し、メインと同期**。
- メインが故障した場合、**即座にバックアップが処理を引き継ぐ**。

## 5. 負荷分散システム（Load Balancing System）
**概要**  
負荷分散システムは、**複数のシステム（サーバなど）に処理を分散して負荷を均等化**する方式です。

## 6. 並列処理システム（Parallel Processing System）
**概要**  
並列処理システムは、**複数のプロセッサやコンピュータが協調して同時に処理を実行**する方式です。

## 7. マルチユーザシステムとマルチプロセッサシステム

### **マルチユーザシステム（Multi-User System）**
- **複数のユーザが同時に1つのシステムを利用できる構成**。
- OSのユーザ管理やスケジューリング機能によって制御。

### **マルチプロセッサシステム（Multi-Processor System）**
- **1つのシステムに複数のプロセッサを搭載し、並列処理を行う方式**。
- **CPUごとにタスクを分担し、処理の高速化が可能**。

---

## **まとめ（各システムの関係性）**

| システム種類 | 目的 | 構成 | 主な用途 |
|--------------|------|------|---------|
| **フォールトトレラントシステム** | 無停止運用 | 冗長構成、自己診断、自動修復 | 航空管制、金融、医療機器 |
| **デュアルシステム** | 高信頼性 | 2つの同じシステムが同時に稼働し、結果を比較 | 航空管制、金融、原子力発電 |
| **デュプレックスシステム** | 高可用性 | メイン＋バックアップ（待機） | 企業の基幹システム、クラウドサービス |
| **コールドスタンバイ** | 低コストの冗長性 | 通常は停止、故障時に起動 | 一般的なバックアップシステム |
| **ホットスタンバイ** | 高速な冗長性 | 常時同期、故障時に即時切り替え | 重要なリアルタイムシステム |
| **負荷分散システム** | 性能向上 | 複数のシステムに処理を分散 | Webサーバ、クラウド、データベース |
| **並列処理システム** | 高速処理 | 複数のプロセッサやノードが並列に処理 | スーパーコンピュータ、AI、科学計算 |
| **マルチユーザシステム** | 多人数利用 | 1つのシステムを複数ユーザが同時利用 | クラウド、サーバOS |
| **マルチプロセッサシステム** | 高性能 | 1台のシステムに複数のCPUを搭載 | AI、スーパーコンピュータ |

各システムの違いを理解し、適切な構成を選択することが重要です。

https://qiita.com/SMZPP/items/ac9ce8d1b398a7ee44e6
Agentforce API



+ [REST API 経由で生成AIを使うには...](https://qiita.com/Keiji_otsubo/items/1b9e4aef4f62670113c1)

# 障害が発生

+ [Can not use Agentforce API currently](https://trailhead.salesforce.com/trailblazer-community/feed/0D5KX00000PWY6T)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/5287521b-f03b-4b33-9dd2-99576e4b2886.png)


# 404 error

+ [Agentforce API not working from Postman](https://trailhead.salesforce.com/trailblazer-community/feed/0D5KX000000VQHA)

:::note
In my case the issue was with the  IP Relaxation. Here's an screenshot of what I did:

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/7541b0e4-ce0f-4343-9f6d-afde3814af38.png)
:::
JavaScript（ES6〜）データ型とリテラル

## データ型
### プリミティブ型
真偽値や数値などの7種類の基本的な型のこと
- 真偽値（Boolean）: `true`または`false`のデータ型
- 数値（Number）: `53`や`3.14159`などの数値のデータ型
- 巨大な整数（BigInt）: ES2020から追加された`8105694254740461n`のような任意精度の整数を扱うデータ型
- 文字列（String）: `"JavaScript"`などの文字列のデータ型
- undefined: 値が未定義であることを意味するデータ型
- null: 変数が存在しないことを意味するデータ型
- シンボル（Symbol）: ES2015から追加された一意で変更不可能な値を持つデータ型

### オブジェクト型
複数のプリミティブ型の値やオブジェクトを含む集合
```javascript
const objectData = {
    name: "太郎",
    age: 25,
}
```

## リテラル
データ型の値を直接コード内に記述できるように構文として定義されているもの
- プリミティブ型の中で、リテラル表現を持っているもの
  - 真偽値
  - 数値
  - 文字列
  - null
- オブジェクトの中で、レテラル表現を持っているもの
  - オブジェクト
  - 配列
  - 正規表現 

### 真偽値リテラル
`true`、`false`と書くことで、真偽値として扱われるリテラル

### 数値リテラル
数字をそのまま書くことで、数値として扱われるリテラル

### 文字列リテラル
`" "`（ダブルクォート）または`' '`（シングルクォート）、` `` `(バッククォート)で囲まれた部分は、JavaScriptにおいて文字列として扱われるリテラル

### nullリテラル
`null`と書くことで、値が存在しないことを示すリテラル

### オブジェクトリテラル
`{}`を書くことでオブジェクトを作成できるリテラル
```javascript
const obj = {};
const obj = {
    key: "value"
}
```

### 配列リテラル
`[]`を書くことで、新しい配列を作成できるリテラル
```javascript
const emptyArray = [];
const array = [1, 2, 3, 4];
```

## まとめ
JavaScriptのデータ型には、真偽値、数値、文字列、null、undefined、BigInt、シンボルがあり、これらはプリミティブ型と呼ばれます。また、オブジェクト型は複数の値を持つことができ、リテラル表現を使って直接コードに値を記述できます。
【試験対策】不注意による情報漏えいとは？事例・原因・対策を解説！

✅ はじめに
情報漏えいの原因はサイバー攻撃だけではありません。
「人的ミス」 による情報漏えいも深刻な問題となっており、企業や組織の信用を損なうリスク があります。

応用情報技術者試験（午後）では、情報セキュリティの視点から「人的ミス」による情報漏えいが出題される可能性が高い ため、しっかり理解しておきましょう！

本記事では、
✅ 不注意による情報漏えいの概要
✅ どのような原因で発生するのか？
✅ 実際の事例と影響
✅ 具体的な対策方法
✅ 試験での出題ポイント
を解説します。

⸻

📌 不注意による情報漏えいとは？
🔹 概要
不注意による情報漏えい とは、従業員や関係者の ヒューマンエラー（人的ミス） によって発生する機密情報の漏えいのことです。

サイバー攻撃のような外部からの脅威ではなく、内部のミスや不適切な管理 によって情報が流出する点が特徴です。

🔹 どんな場面で発生する？
| 発生要因 | 具体例 |
|:-:|:-:|
| 誤操作  | メールの誤送信、添付ファイルのミス、SNSの誤投稿  |
| 不適切な管理  | USBメモリの紛失、紙の資料の放置、パスワードの使い回し|
| 意識不足  | 機密情報の持ち出し、廃棄ルールの不徹底、無断のデータ共有  |
| 内部者の過失  | 業務システムの誤設定、クラウドストレージの公開ミス  |

📌 情報漏えいの実際の事例
🔹 過去の情報漏えい事件
✅ 1. メールの誤送信による顧客情報漏えい
	•	内容:
ある企業が顧客への案内メールを送信する際、本来「Bcc（ブラインドカーボンコピー）」で送るべきところを誤って「To（宛先）」で送信。
	•	結果:
顧客のメールアドレスが全員に公開され、大きな問題に発展。

✅ 2. USBメモリの紛失による個人情報漏えい
	•	内容:
企業の社員が、業務データを保存したUSBメモリを外部に持ち出し、帰宅途中に紛失。
	•	結果:
顧客の個人情報が外部に流出するリスクが発生し、企業の信用が低下。

✅ 3. クラウド設定ミスによる情報公開
	•	内容:
企業のIT担当者がクラウドストレージを設定する際、本来「社内限定」にするべきファイルを**「インターネット公開」に誤設定**。
	•	結果:
機密情報が誰でも閲覧できる状態となり、競合他社に流出。

⸻

📌 具体的な対策方法
不注意による情報漏えいを防ぐには、個人レベルの対策と組織レベルの仕組み作りの両方 が必要です。

🔹 1. メールの誤送信対策
✅ Bccを使用する際のルールを徹底
	•	メールシステムにBcc自動チェック機能 を導入
	•	送信前に上長の承認を必須にする

✅ 誤送信防止システムの導入
	•	送信前に「確認画面」を表示する機能を活用
	•	送信予約機能 を使い、誤送信を防ぐ

🔹 2. USBメモリ・外部記憶装置の管理
✅ 原則としてUSBメモリの使用禁止
	•	企業ではクラウドストレージ（OneDrive, Google Drive）を活用
	•	持ち出しが必要な場合は「上長の許可制」にする

✅ 暗号化・パスワード設定を徹底
	•	万が一紛失しても第三者がデータを開けないようにする

🔹 3. 機密情報の管理ルール強化
✅ 廃棄ルールの徹底
	•	紙の資料はシュレッダー処理 して破棄
	•	古いHDDやUSBメモリは物理破壊 して廃棄

✅ アクセス権限を最小限に
	•	必要な人だけが情報にアクセスできるように制限

🔹 4. 社員教育・意識向上
✅ 定期的なセキュリティ研修の実施
	•	実際の情報漏えい事例を共有し、「自分も加害者になる可能性がある」 という意識を持たせる

✅ フィッシング詐欺やSNS投稿の注意喚起
	•	業務関連情報をSNSに投稿しないよう指導
	•	怪しいメールの見分け方を社内で共有

⸻

📌 試験での出題ポイント
✅ 記述問題の対策

試験では、「不注意による情報漏えいの原因・影響・対策」を説明できるかが問われます。
以下のような問題が出る可能性が高い ので、事前に練習しておきましょう。

Q1. 不注意による情報漏えいの事例を1つ挙げ、その発生原因と対策を説明せよ。

解答例:
事例: メールの誤送信による顧客情報の漏えい
発生原因: BccではなくToで送信してしまった
対策: 送信前の確認画面を表示する誤送信防止システムを導入する

Q2. 組織において不注意による情報漏えいを防ぐために重要な対策を2つ挙げ、それぞれの理由を説明せよ。

解答例:
	1.	USBメモリの持ち出し制限
	•	紛失による情報漏えいを防ぐため
	2.	定期的なセキュリティ研修の実施
	•	社員の意識を向上させ、ヒューマンエラーを減らすため

⸻
✅ まとめ
	•	不注意による情報漏えいは、サイバー攻撃ではなく「人的ミス」が原因
	•	メールの誤送信、USBメモリの紛失、クラウド設定ミスなどが主な原因
	•	対策は「メール誤送信防止」「USBメモリの管理」「アクセス権限の適正化」「社員教育」
	•	試験では「事例」「原因」「対策」をセットで理解し、記述問題に備える！
競プロ日記#25/03/23

# アルゴ式-[フラグがどれか立っているか](https://algo-method.com/tasks/1728pmHE)

- bitに対してmaskで表されたどこかのフラグが立っているか→andと読み換えられる

# アルゴ式-[差の最小値](https://algo-method.com/tasks/490) 
- 昇順にソートして左から順にK個の塊を取ってそのK個の最大値と最小値の差を全探索していく。
- 解法としては思いついたが確認問題に当たるため解答解説がなく、とりあえずそれで考え方が合っているかを確認する意味も含めて実装は生成AIに任せた
DatabricksサーバレスコンピュートでもExcelダウンロードがサポートされました

こちらの続報です。

https://qiita.com/taka_yayoi/items/5ec2244ec69e055c52d1

以下のアップデートです。

https://docs.databricks.com/aws/en/release-notes/product/2025/march#download-as-excel-is-now-supported-in-notebooks-connected-to-serverless-compute

> サーバレスコンピュートに接続したノートブックで、Excelファイルとして表形式のセルの結果をダウンロードできるようになりました。SQLウェアハウスに接続したノートブックでもExcelダウンロードはサポートされています。[結果のダウンロード](https://docs.databricks.com/aws/ja/notebooks/notebook-outputs#%E7%B5%90%E6%9E%9C%E3%81%AE%E3%83%80%E3%82%A6%E3%83%B3%E3%83%AD%E3%83%BC%E3%83%89)をご覧ください。

Excelダウンロード機能は、以前はSQLウェアハウスのみでサポートされていたのですが、ノートブック用サーバレスコンピュートでもサポートされました。

サーバレスコンピュートに接続します。

![Screenshot 2025-03-23 at 6.01.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/11f166eb-10a0-4a49-8fcb-4991b4361546.png)

```sql
SELECT * FROM samples.nyctaxi.trips LIMIT 10
```

ダウンロードメニューにExcelダウンロードのオプションが表示されます。

![Screenshot 2025-03-23 at 6.02.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/d27ef7d5-0d9b-4b92-9f56-ddea86ea569e.png)

![Screenshot 2025-03-23 at 6.03.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/a582fd2e-9027-4c5e-8f5b-d189243e71d3.png)

### はじめてのDatabricks

[はじめてのDatabricks](https://qiita.com/taka_yayoi/items/8dc72d083edb879a5e5d)

### Databricks無料トライアル

[Databricks無料トライアル](https://databricks.com/jp/try-databricks)
Kotlinで撮った画像を圧縮する

スマホで撮影した画像はサイズが大きく、そのまま扱うとアップロードの時に時間がかかったり、アップロードできなかったりします。なのでKotlinで画像を圧縮する方法をメモします。

`Bitmap.compress()` を利用すれば、簡単に画像を圧縮してファイルに保存できます。
qualityを値で画像をどの程度圧縮させるか決めます。圧縮させすぎると画像が潰れてしまうので、注意します。

```kotlin
button?.setOnClickListener {
    val intent = Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI)
    imagePickerLauncher.launch(intent)
}

private val imagePickerLauncher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
    if (result.resultCode == Activity.RESULT_OK) {
        val imageUri: Uri? = result.data?.data
        compressImage(this, it, 70)?.let { file ->
            Log.d("compressImage", "ファイルパス: ${file.absolutePath}")
        }
    }
}


private fun compressImage(context: Context, imageUri: Uri, quality: Int = 80): File? {
    return try {
        val inputStream = context.contentResolver.openInputStream(imageUri)
        val bitmap = BitmapFactory.decodeStream(inputStream)
        inputStream?.close()

        val outputFile = File(context.cacheDir, "compressed_image.jpg")
        val outputStream = FileOutputStream(outputFile)

        bitmap.compress(Bitmap.CompressFormat.JPEG, quality, outputStream)
        outputStream.flush()
        outputStream.close()

        outputFile
    } catch (e: Exception) {
        e.printStackTrace()
        null
    }
}
```
FFT による巡回畳み込み

# 目次

- [Cooley-Tukey FFT](https://qiita.com/maiueo/items/46ae20b09cc78d6184ff)
- FFT による巡回畳み込み **← 今回の話**
- [任意の配列長の高速フーリエ変換 (Bluestein's FFT)](https://qiita.com/maiueo/items/c11b20032d56a6ef6da8)

# 本題

配列長 $N$ の配列 $a$ と $b$ があったとき、その巡回畳み込み $c$ は

```math
\begin{aligned}
& c[n] =
  \sum_{m=0}^{N - 1}
    a[m] \cdot b[(n-m) \mod N] &
  & ( 0 \le n < N ) &
\end{aligned}
```

で定義される。  
そして、このときの $a, b, c$ は離散フーリエ変換 $\mathcal{F}$ を用いて以下が成り立つことが知られている。

```math
\mathcal{F}(c) = \mathcal{F}(a) \cdot \mathcal{F}(b)
```

証明:

```math
\begin{aligned}
& \mathcal{F}(c)[k] &=&
  \sum_{n=0}^{N-1}
    c[n]
    \exp\left(-2\pi i \frac{n k}{N}\right) & \\
& &=&
  \sum_{n=0}^{N-1}
    \left(
    \sum_{m=0}^{N - 1}
      a[m] \cdot b[(n-m) \mod N]
    \right)
    \exp\left(-2\pi i \frac{n k}{N}\right) & \\
& &=&
  \sum_{m=0}^{N-1}
    a[m]
    \sum_{n=0}^{N - 1}
      b[(n-m) \mod N]
    \exp\left(-2\pi i \frac{n k}{N}\right) & \\
& & & \downarrow l = n - m\ と置くと & \\
& &=&
  \sum_{m=0}^{N-1}
    a[m]
  \sum_{l=0}^{N - 1}
    b[l]
    \exp\left(-2\pi i \frac{(m+l) k}{N}\right) & \\
& &=&
  \sum_{m=0}^{N-1}
    a[m]
    \exp\left(-2\pi i \frac{m k}{N}\right)
  \sum_{l=0}^{N - 1}
    b[l]
    \exp\left(-2\pi i \frac{l k}{N}\right) & \\
& &=& \mathcal{F}(a)[k] \cdot \mathcal{F}(b)[k] &
\end{aligned}
```

これに FFT を利用すると巡回畳み込みを $O(N \log N)$ で計算できる。

```math
c[n] = \mathcal{F}^{-1}(\mathcal{F}(a) \cdot \mathcal{F}(b))[n]
```

ただし、Cooley-Tukey FFT では配列長が合成数になっている必要があった。  
そのため、配列長が素数などの場合は適当に長さを調整したい。  
計算結果は変えずに配列長を $N \rightarrow N'$ に伸ばした配列 $a', b'$ を作れるか考える。  
巡回畳み込みの定義をもう一度見返してみる。

```math
\begin{aligned}
& c[n] =
  \sum_{m=0}^{N - 1}
    a[m] \cdot b[(n-m) \mod N] &
  & ( 0 \le n < N ) & \\
\Rightarrow & c[n] =
  \sum_{m=0}^{N' - 1}
    a'[m] \cdot b'[(n-m) \mod N'] &
  & ( 0 \le n < N ) &
\end{aligned}
```


$a'$ は $a$ の末尾を $0$ で埋めると良さそうだが、 $b'$ はやや複雑である。  
$b'$ は $b'[n \mod N']\ (-N < n < N)$ の範囲が元々の計算に利用される。  
言い換えると $b'$ の末尾 $N-1$ 個と先頭 $N$ 個の範囲が利用されるため、この要素は変更せず中央に $0$ を追加することとなる。  
つまり $N'$ は最低でも $2N-1$ 以上にする必要があるということになる。

```math
\begin{aligned}
& a &= [&a_{0}&, &a_{1}&, &a_{2}&] \\
& b &= [&b_{0}&, &b_{1}&, &b_{2}&] \\
&&& \downarrow & \\
& a' &= [&a_{0}&, &a_{1}&, &a_{2}&, &0&, &...& &&&&, &0&] \\
& b' &= [&b_{0}&, &b_{1}&, &b_{2}&, &0&, &...&, &0&, &b_{1}&, &b_{2}&]
\end{aligned}
```

このような配置にすることで任意の配列長の巡回畳み込みを Cooley-Tukey FFT で行うことができる。

```math
c[n] = \mathcal{F}^{-1}(\mathcal{F}(a') \cdot \mathcal{F}(b'))[n]
```

# 参考

- [Convolution - Wikipedia](https://en.wikipedia.org/wiki/Convolution)
SecureBoot対応記録(進行中)(失敗中)

# 超絶わかりやすい資料
https://docs.oracle.com/en/operating-systems/oracle-linux/secure-boot/sboot-OverviewofSecureBoot.html#sb-overview

https://wiki.archlinux.jp/index.php/Unified_Extensible_Firmware_Interface/%E3%82%BB%E3%82%AD%E3%83%A5%E3%82%A2%E3%83%96%E3%83%BC%E3%83%88

# 前提
Kali Linux (SecureBoot非対応Linux)
ベアメタル
PCはUEFI対応済み
shim 15.8
Secure Bootしないときは正常に起動する

# SecureBootの流れ
1. shimx64.efiの起動
1. shimx64.efiがgrubx64.efiの署名を確認(shimがInsecure modeでないとき)
1. grubx64.efiの起動
1. カーネルの署名の確認(shimがInsecure modeでないとき)
1. vmlinuz(カーネル)のロード
1. カーネルモジュールの署名の確認(ロックダウンモード有効時)
1. カーネルモジュールのロード

# shimの用意
shim-signedパッケージをapt install。
インストール時にMicrosoftの署名付きのshimが```/usr/lib/shim/shimx64.efi.signed```にダウンロードされる。
この```shimx64.efi.signed```を```/boot/efi```以下に移し、ブートエントリに登録。
~~~
sudo mv /usr/lib/shim/shimx64.efi.signed /boot/efi/EFI/kali/shimx64.efi
~~~
~~~
sudo mv /usr/lib/shim/mmx64.efi.signed /boot/efi/EFI/kali/mmx64.efi
~~~
~~~
sudo efibootmgr -c -d /dev/sda1 -L "Shim FIrst stage bootloader" -l "\EFI\kali\shimx64.efi"
~~~

# shimにより検証されるGRUBとカーネルを署名し証明書をMOKに登録
署名に必要な秘密鍵と公開鍵の生成を行い、署名を行う。
そして、MOKへの公開鍵の登録を行う。
マシンの再起動でMOKへの登録を行う。
~~~
openssl req -newkey rsa:2048 -nodes -keyout MOK.key -new -x509 -sha256 -days 36500 -out MOK.crt
~~~
~~~
openssl x509 -outform DER -in MOK.crt -out MOK.cer
~~~
~~~
sudo sbsign --key MOK.key --cert MOK.crt --output /boot/vmlinuz-6.11.2-amd64 /boot/vmlinuz-6.11.2-amd64　
~~~
~~~
sudo sbsign --key MOK.key --cert MOK.crt --output /boot/efi/EFI/kali/grubx64.efi /boot/efi/EFI/kali/grubx64.efi
~~~
~~~
sudo mokutil --import MOK.cer
~~~
~~~
sudo mokutil --list-enrolled
~~~

# トラブル(未解決)
## 1つめ
ここでUEFIでSecure Bootを有効化すればgrubとカーネルまで起動するはずだが、grubすら起動しない。
shimの読み込み後、以下の表示が出る。現在もこのトラブルは解決していない。
shim15.8のshim.cの1212行目、1274行目のエラー。
~~~
Failed to load image: Security Policy Violation
start_image() returned Security Policy Violation

Verification failed: (0x1A) Security Violation
~~~
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4035914/5bee53bb-5b26-47a6-8730-76cfe7b60fee.png)

MOKの画面から証明書を登録したり、grubのハッシュ値を登録したりするも、grubが起動しないため、shimかMOKに問題がありそう。

https://github.com/rhboot/shim/tree/main

## 2つめ
mokutil --disable-validation(efi変数のMokSBに0を登録)後、GRUBは起動するがvmlinuzが読み込めない。
```error: you need to load kernel first```とGRUBのエラーが出るが、grub.cfgを見る限り、vmlinuxの読み込み後にinitialが読み込まれている。かつ、セキュアブートしていないときはこのエラーは発生しない。


https://github.com/lcp/mokutil/blob/a0e52a974e3ef222ee454bab76602afd7f4c0440/src/mokutil.c#L1393C9-L1393C19

## コメント
Ubuntu Linux MintはSecureBoot対応してた。UEFIでSecure Bootをオンにするだけ。


# 20250405追記
perror文しまくって、lib/variables.cのget_variable_attr関数の290行目付近のがNot Foundを返していることに端を発することが分かった。
~~~
RT->GetVariable((CHAR16 *)var, &owner, NULL, len, NULL);
~~~
【CSS】flex-grow と flex-shrink の違いと使い方まとめ

## はじめに

flex-grow と flex-shrinkの違いを記載しています。

### この記事では以下を整理します

1. flex-grow と flex-shrink の違い
1. デフォルト値と注意点
1. 効かせるために必要な前提（＝親要素が display: flex）

## flex-grow とは？
余白（スペースが余っている時） に対して、どれくらい伸びるか を決定するプロパティです。

親要素の幅が `400px` で、子要素がそれぞれ `100px` の初期幅を持っていたとします。

```css
.item1 { flex-grow: 1; }
.item2 { flex-grow: 1; }
.item3 { flex-grow: 2; }
```
このとき、3つの子要素の合計は `100px × 3 = 300px`。
親要素との間に `100px` の余白があります。

`flex-grow: 1 + 1 + 2 = 4` が合計比率なので、

`.item1 → 100px + (1/4 × 100px) = 125px`

`.item2 → 100px + (1/4 × 100px) = 125px`

`.item3 → 100px + (2/4 × 100px) = 150px`

となります。

## flex-shrink とは？
親要素が狭くなったときに、どれだけ縮むか を指定するプロパティです。

親要素の幅が `200px` しかなく、子要素が初期で `100px` ずつあるとき。
```css
.item1 { flex-shrink: 1; }
.item2 { flex-shrink: 1; }
.item3 { flex-shrink: 2; }
```

このとき、要素の合計は `200px`、親要素も `300px` なので`100px`負の余白が生まれます

`1 + 1 + 2 = 4` の比率なので、

`.item1` → `25px` 縮小して `75px`

`.item2` → `25px` 縮小して `75px`

`.item3` → `50px` 縮小して`50px`

## shrinkを 0 にすると？
```css
.item {
  flex-shrink: 0;
}
```
このようにすると、その要素は 絶対に縮まなくなります。
親要素が狭いと、はみ出す原因になります。

## 効かせるには display: flex が必須
```css
.parent {
  display: flex;
}

.child {
  flex-grow: 1;
}
```
親要素が flex でなければ、grow も shrink も機能しません。
Bulmaでモーダルダイアログ

閉じるまで他の要素を操作できないようにする、モーダルダイアログを実現する。

# 外見

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/330873/2ec606ff-32be-499a-a492-f586e78b7d3f.png)

# 実装


```html:index.html
<!DOCTYPE html>
<html lang="ja">
<head>
  <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bulma@1.0.3/css/bulma.min.css">
  <title>Modal Dialog</title>
</head>
<body>

<button class="js-modal-trigger" data-target="modal-js-example">
  Open JS example modal
</button>

<div id="modal-js-example" class="modal">
  <div class="modal-background"></div>
  <div class="modal-card">
    <header class="modal-card-head">
      <p class="modal-card-title">Modal title</p>
      <button class="delete" aria-label="close"></button>
    </header>
    <section class="modal-card-body">
      <!-- Content ... -->
    </section>
    <footer class="modal-card-foot">
      <div class="buttons">
        <button class="button is-success">Save changes</button>
        <button class="button">Cancel</button>
      </div>
    </footer>
  </div>
</div>

<script>
document.addEventListener('DOMContentLoaded', () => {
  // Functions to open and close a modal
  function openModal($el) {
    $el.classList.add('is-active');
  }

  function closeModal($el) {
    $el.classList.remove('is-active');
  }

  function closeAllModals() {
    (document.querySelectorAll('.modal') || []).forEach(($modal) => {
      closeModal($modal);
    });
  }

  // 指定されたクラス名の要素をクリックしたらopenModal()を呼び出すイベントを付与する
  (document.querySelectorAll('.js-modal-trigger') || []).forEach(($trigger) => {
    // js-modal-triggerのクラス名に対応するdata-targetの値を取得
    const modal = $trigger.dataset.target;
    // data-target="modal-js-example" -> id="modal-js-example"
    const $target = document.getElementById(modal);

    $trigger.addEventListener('click', () => {
      openModal($target);
    });
  });

  // 指定されたクラス名の要素をクリックしたらcloseModal()を呼び出すイベントを付与する
  (document.querySelectorAll('.modal-background, .modal-close, .modal-card-head .delete, .modal-card-foot .button') || []).forEach(($close) => {
    const $target = $close.closest('.modal');

    $close.addEventListener('click', () => {
      closeModal($target);
    });
  });

  // Add a keyboard event to close all modals
  document.addEventListener('keydown', (event) => {
    if(event.key === "Escape") {
      closeAllModals();
    }
  });
});
</script>
</body>
</html>
```

|クラス名|説明|
|---|---|
|modal|メインコンテナ|
|modal-background|モーダルを閉じるためのクリックターゲットとして機能する透明なオーバーレイ|
|modal-content|水平および垂直に中央揃えされたコンテナ。最大幅は640ピクセルで、任意のコンテンツ を含めることができます。|
|modal-close|右上隅にあるシンプルな十字|
|.modal-card-head .delete|モーダルヘッダー右上の十字|
|.modal-card-foot .button|モーダルフッダーのボタン|

https://bulma.io/documentation/components/modal/

https://segakuin.com/css/bulma/modal.html
フォームでよく使うBlade構文（@csrf, @method, old()）まとめ

# はじめに

Laravelでフォームを作成する際に、`@csrf` や `@method()`, `old()` などのBlade構文を頻繁に見かけます。  
最初のうちは「これ何だっけ？」と感じることが多かったので、**自分の備忘録として**まとめておきます。

# ① @csrf：フォームのセキュリティ対策

Laravelでは、フォーム送信時に **CSRF（クロスサイトリクエストフォージェリ）** を防ぐため、`@csrf` ディレクティブを使います。

```blade
<form action="/submit" method="POST">
    @csrf
    <input type="text" name="name">
    <button type="submit">送信</button>
</form>
```

- @csrfを入れることで、Laravelは**自動的にトークンを生成**し、検証してくれます。
- これを省略すると、**419エラー**  **(Page Expired)** が出るので注意。

# ②@method：HTMLで使えないHTTPメソッドを送信する

HTMLのフォームは GET と POST しかサポートしていません。
Laravelでは @method() を使うことで、PUT や DELETE などのメソッドを**擬似的に送信**できます。

```
<form action="/post/1" method="POST">
    @csrf
    @method('DELETE')
    <button type="submit">削除する</button>
</form>
```
- 上記は実際には POST ですが、Laravel側では DELETE として扱われます。

# ③old()：フォーム入力の再表示（バリデーションエラー対策）

バリデーションエラーでフォームが再表示されるとき、以前の入力値を保持したい場面があります。
そのときに便利なのが **old() ヘルパー**です。

```
<input type="text" name="name" value="{{ old('name', session('name')) }}">
```
- old('name') がなければ、session('name') の値を使うという書き方も可能です。

実際に使用するとこんな感じ
```
<form action="{{ route('posts.update', $post->id) }}" method="POST">
    @csrf
    @method('PUT')

    <input type="text" name="title" value="{{ old('title', $post->title) }}" required>
    <textarea name="body" required>{{ old('body', $post->body) }}</textarea>

    <button type="submit">更新</button>
</form>
```

# ⑤まとめ

- @csrf
→ フォーム送信のCSRF対策

- @method()
→ PUT/DELETEなどのHTTPメソッドを擬似送信

- old()
→ フォーム再表示時に入力値を保持

Laravelでフォームを扱う上で、これらは**基本中の基本。**
理解しておくことで、実務でもスムーズに開発できるようになります！
findOrFail() の使い方と find() との違い

# ① findOrFail() とは？
- **Eloquentモデル**で、主キー（通常は id）でレコードを取得するメソッド。
- 該当データがない場合、**例外** **(ModelNotFoundException)** を自動で投げる。

# ②基本的な使い方

```
$user = User::findOrFail($id);
```

- $id に一致するレコードを users テーブルから取得。
- データが存在しないと、自動で **404エラーページ** が表示される（Laravel標準）。

# ③find() との違い

- **find($id)**
→ nullを返す(処理は継続)

- **findOrFail($id)**
→ 例外をスロー
→ 自動で404エラー

# ④使い分けの考え方

- **find()を使う場面**
→ 「レコードがなくても処理を続けたい」とき
```
$user = User::find($id);
if ($user) {
    // ロジック実行
} else {
    // 自前でエラー表示や処理分岐
}
```

- **findOrFail() を使う場面**
→ 「レコードがなければ処理を止めたい」とき（特にコントローラー内で便利）
```
$user = User::findOrFail($id); // 存在しないと404
return view('users.show', compact('user'));
```

# ⑤エラーの種類とcatch例
- 例外クラス：Illuminate\Database\Eloquent\ModelNotFoundException

use Illuminate\Database\Eloquent\ModelNotFoundException;

```
try {
    $post = Post::findOrFail($id);
} catch (ModelNotFoundException $e) {
    abort(404, '指定された投稿が見つかりませんでした');
}

```

# ⑥ルーティングと連携する使い方（ルートモデルバインディング）

```
Route::get('/users/{user}', [UserController::class, 'show']);
```

```
public function show(User $user)
{
    // 自動的に findOrFail してくれる！
    return view('users.show', compact('user'));
}
```

# ⑦まとめ
- **findOrFail() は「レコードが存在しない」ことを前提に考えるべき場面で便利**
- バグを減らし、安全にコーディングしたい場合におすすめ
- find() との違いを明確に理解して、場面に応じて使い分けよう
scssでの条件分岐の書き方（:notや:hasについて）

## はじめに
scssでの条件分岐をさせるのに，`:not`や`:has`を使う方法があるので，具体例をベースに備忘録としてまとめてみます．

## :notでの分岐の例
以下では，ホバー時にカラーが青になり，ホバーで`disabled属性`がないときにカラーが赤になる．
```scss
.hoge {
  &:hover {
    color: blue;
  }

  &:hover:not(:disabled) {
    color: red;
  }
}
```

## :hasでの分岐の例
`:has`では子要素の状態を見て親要素のスタイルを変更できます．
以下では，data-invalidを持ち，disabledではないテキストエリアを，containerの子要素として持つときにcontainerの背景がグレーになります．
注意：このとき，data-invalidを持ち，disabledであるテキストエリアが子要素ありますが，背景はグレーになります．理由は，`:hasは内部の子要素に条件を満たすものが1つでもある場合にtrueとなるからです．`

```scss
.container {
  &:has(.textarea[data-invalid]:not(:disabled)) {
    background-color: gray;
  }
}
```

```html
<div class="container"> 
  <textarea class="textarea" data-invalid></textarea>  <!-- これによって適用される -->
  <textarea class="textarea" data-invalid disabled></textarea>  
</div>

```
インテル® Wireless-AC 9260のBluetoothがUbuntu22.04LTSでオンにならない

## WIFIは問題なく動くのになぜかBluetoothだけ動かない
Setting画面でNo Bluetooth Foundになってる。
Bluetooth系のサービスは問題なく動いている。
![eU30z.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/577522/98b55934-97ea-4145-aac2-b53193abcca9.png)

手動でファームウェアを最新に更新すると治った
1. 下記から最新のファームウェアをダウンロード
https://github.com/pop-os/linux-firmware/blob/master/iwlwifi-9260-th-b0-jf-b0-46.ucode
2. iwlwifi-9260-th-b0-jf-b0-46.ucode (20250323時点最新)を /lib/firmware に配置
    ```
    sudo cp iwlwifi-9260-th-b0-jf-b0-46.ucode /lib/firmware/
    ```     
3. ファームウェアを有効にする
    ```
    sudo modprobe -r iwlwifi
    sudo modprobe iwlwifi
    ```
 
4. 再起動
AWSが展開するCustomer Enablement & Other Support Serviceカテゴリのサービスの一覧

## はじめに
AWSが展開するCustomer Enablement & Other Support Serviceカテゴリのサービスの一覧についてまとめてみました。

## AWS Application Cost Profiler
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/387980/38c2cf3d-86e4-46a0-bd78-0b5d5c36a81b.png)
テナント（ユーザー、グループ、プロジェクト）ごとの利用コストが把握出来るレポートを提供するサービス。

## AWS Billing & Cost Management
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/387980/ec1ede05-708e-403f-bf35-91febeeb0698.png)
AWSの利用料金と請求金額を一覧化して表示するサービス。

## AWS IQ

組織とAWS認定の専門家を直接マッチングし、プロジェクト管理を行えるサービス。

## AWS Managed Entitlements in AWS License Manager
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/387980/dca4e086-aede-4a87-8daf-a2694cbc9be2.png)
AWS Marketplaceでライセンスを購入し、トラック出来るサービス

## AWS Marketplace
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/387980/fc231731-e29f-4094-acc5-29cfffe5f722.png)
カスタマイズされた仮想インスタンスイメージや商用プロダクト・ライセンスを含む、AWSで利用可能な様々なソフトウェアソリューションマーケット。

## AWS Pricing Caliculator
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/387980/10758ba9-1672-4f83-a57a-fde7aa70a0cf.png)
AWS料金をサービス単位で合計して見積もることが出来る簡易見積もりツール。

## AWS Professional Service in AWS Marketplace

サードパーティソフトウェアにおけるアセスメントや実装、サポート、トレーニングなどを検索・購入出来るサービス。

## AWS Support
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/387980/8dd99869-1e34-4112-8025-c544f018a46a.png)
AWSに関する全般的・技術的な問合せが行えるサポートサービス。

## AWS Training & Certification
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/387980/9aee49cb-476d-468d-ae95-ca61c3ed3761.png)
各AWSサービスのトレーニングや認定資格を申込、受講履歴、資格管理するサービス。




## おわりに
ここまで読んでいただきありがとうございます！

## 参考文献
・AWSの基本・仕組み・重要用語が全部わかる教科書 (見るだけ図解) 単行本（ソフトカバー） – 2022/8/23
川畑光平 (著), 菊地貴彰 (著), 真中俊輝 (著)
p.64
若手オフショアパートナーの台頭：革新的な新興企業が切り拓く未来

## 1. はじめに

近年、AI技術をはじめとするデジタルトランスフォーメーションが急速に進む中で、企業は新たな競争力を獲得するため、最新技術の活用に力を入れています。特に、オフショア開発においても、従来の長年の実績を持つ大手企業だけでなく、**若手で革新的な新興企業**が台頭し、柔軟性とスピードを武器に市場で存在感を示しています。

若いオフショア企業は、軽量な組織体制や最新のテクノロジーの積極導入により、迅速なプロジェクト展開やコストの最適化が可能です。さらに、顧客のニーズに柔軟に対応できる点も大きな魅力です。この記事では、若手オフショアパートナーの持つ強みとその活用例について詳しく解説し、その中で代表的な例としてバイナリテックを紹介します。

---

## 2. 若手オフショア企業の強み

### 2.1. 迅速な対応力と柔軟性

若い企業は、組織がスリムであるため、意思決定が早く、市場の変化に即応することが可能です。最新のAI技術や開発ツールをいち早く取り入れることで、短期間でプロジェクトを立ち上げ、迅速な成果を実現します。

### 2.2. コスト効率と投資対効果

新興企業は、初期投資を抑えながら効率的に運営するため、低コストでサービスを提供できます。これは、特に小規模から中規模のプロジェクトにおいて大きな利点となり、企業がリスクを最小限に抑えながらプロジェクトを進めるのに役立ちます。

### 2.3. 幅広い顧客層への柔軟な対応

大手企業が取引先を限定するのに対し、若手企業はスタートアップから大企業、さらには個人顧客まで、幅広い顧客ニーズに対応可能です。これにより、さまざまな規模のプロジェクトに柔軟に取り組むことができます。

---

## 3. 代表例としてのバイナリテック

ここで、若手オフショア企業の中でも一際注目すべき例として、**バイナリテック** をご紹介します。バイナリテックは、若くして革新的なアプローチと柔軟な体制で急成長しており、以下のような特徴を持っています。

### 3.1. バイナリテックの強み

- **若くエネルギッシュなチーム：**  
  常に最新技術をキャッチアップし、柔軟な発想で迅速な意思決定が可能です。

- **高品質なサービス提供：**  
  徹底したプロジェクト管理と品質管理により、短期間で高品質な成果物を納品します。

- **先進技術の積極導入：**  
  AgileやDevOpsなどの最新開発手法と自動化ツールを活用し、プロセスの最適化を実現します。

- **優れたコミュニケーション能力：**  
  日本のビジネス文化に精通し、円滑な日本語コミュニケーションでクライアントとの連携を強化しています。

*【実例】*  
ある大手日本企業がバイナリテックと連携し、製品需要予測アプリの開発プロジェクトを実施しました。バイナリテックは、短期間で予測モデルを構築し、定期的なミーティングと迅速なフィードバックにより、プロジェクトを予定より前倒しで完了。結果として、企業は市場戦略の最適化とリスク軽減に成功しました。

---

## 4. 若手オフショアパートナーを選ぶべきシーン

若手企業は、以下のようなシーンで特に効果を発揮します：

- **迅速なプロジェクト展開が必要な場合：**  
  内部にAI専門家がいない、または迅速な市場投入が求められるプロジェクトにおいて、若手企業のスピードと柔軟性が強みとなります。

- **コスト最適化が求められる場合：**  
  小規模から中規模のプロジェクトでは、初期投資のコスト管理が重要です。若手企業は、効率的な運営により、低コストで高品質なサービスを提供できます。

- **効果的なコミュニケーションが不可欠な場合：**  
  日本企業との文化的な相性や、迅速なフィードバックが必要なプロジェクトにおいて、若手企業は柔軟かつ円滑なコミュニケーションを実現します。

*具体例：*  
需要予測プロジェクトにおいて、バイナリテックはその迅速な対応と高い品質で、クライアントのリスクを最小限に抑え、業務プロセスの最適化に大きく貢献しました。

---

## 5. 結論

若手オフショアパートナーは、スピード、柔軟性、そして幅広い顧客対応力を持つ点で、大手企業との差を短期間で埋める可能性があります。バイナリテックはその代表例として、短期プロジェクトやコスト効率を重視する企業にとって、非常に魅力的な選択肢となります。

---

### 💬 **ぜひ皆さんの意見を聞かせてください！**
この記事が役に立ったと思ったら 「いいね」 や 「stock」 をお願いします！
また、あなたが現場で実践している疑問・意見があれば、ぜひコメント欄にご記入ください。
さらに、今後取り上げてほしいトピックのリクエストも大歓迎です！

皆さんと知識を共有し、より良い開発環境を築いていきましょう！
AWSが展開するQuantum Technologiesカテゴリのサービスの一覧

## はじめに
AWSが展開するQuantum Technologiesカテゴリのサービスの一覧についてまとめてみました。

## Amazon Braket
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/387980/2ab1df4a-4b3c-4de3-bf79-ca1d3395fbdd.png)
量子アルゴリズムの開発、量子コンピュータシミュレーションによるアルゴリズムテスト、実行を行うサービス。





## おわりに
ここまで読んでいただきありがとうございます！

## 参考文献
・AWSの基本・仕組み・重要用語が全部わかる教科書 (見るだけ図解) 単行本（ソフトカバー） – 2022/8/23
川畑光平 (著), 菊地貴彰 (著), 真中俊輝 (著)
p.64
AWSが展開する衛星カテゴリのサービスの一覧

## はじめに
AWSが展開する衛星カテゴリのサービスの一覧についてまとめてみました。

## Amazon Ground Station
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/387980/b4f22dcb-4f0b-4e07-bdb3-a412b86e7e39.png)
人工衛星のデータ受信に必要な地上局を提供し、衛星とデータ受信を行うサービス。






## おわりに
ここまで読んでいただきありがとうございます！

## 参考文献
・AWSの基本・仕組み・重要用語が全部わかる教科書 (見るだけ図解) 単行本（ソフトカバー） – 2022/8/23
川畑光平 (著), 菊地貴彰 (著), 真中俊輝 (著)
p.64
AWSが展開するロボット工学カテゴリのサービスの一覧

## はじめに
AWSが展開するロボット工学カテゴリのサービスの一覧についてまとめてみました。

## Amazon RoboMaker
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/387980/050a0800-b912-4215-b1f0-b660c4686db4.png)
オープンソースのロボットソフトウェアプラットフォーム「Robot Operating System(ROS)」を用いた開発をAWS上で実行するためのサービス。




## おわりに
ここまで読んでいただきありがとうございます！

## 参考文献
・AWSの基本・仕組み・重要用語が全部わかる教科書 (見るだけ図解) 単行本（ソフトカバー） – 2022/8/23
川畑光平 (著), 菊地貴彰 (著), 真中俊輝 (著)
p.64
AWSが展開する拡張現実(AR)とバーチャルリアリティ(VR)カテゴリのサービスの一覧

## はじめに
AWSが展開する拡張現実(AR)とバーチャルリアリティ(VR)カテゴリのサービスの一覧についてまとめてみました。

## Amazon Sumerian
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/387980/3fd98e41-47b4-4f7e-8a80-7c50614db37d.png)

Webブラウザ上でVR/ARコンテンツを作成・ビルド・起動するサービス。





## おわりに
ここまで読んでいただきありがとうございます！

## 参考文献
・AWSの基本・仕組み・重要用語が全部わかる教科書 (見るだけ図解) 単行本（ソフトカバー） – 2022/8/23
川畑光平 (著), 菊地貴彰 (著), 真中俊輝 (著)
p.64
AWSが展開するゲーム開発カテゴリのサービスの一覧

## はじめに
AWSが展開するゲーム開発カテゴリのサービスの一覧についてまとめてみました。

## Amazon GameLift
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/387980/81c61045-45fd-4b4a-97d0-8272de72c4e5.png)
マルチプレイヤーのオンラインゲームをホスティングするサービス。

## Amazon GameSparks
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/387980/75200ce2-f73b-4d8d-999a-1142f2f6e0bf.png)
ゲームのバックエンド処理サーバを構築、実行、スケーリングするサービス。

## Amazon Lumberyard
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/387980/156ad6a4-f7a7-43c6-baa8-6c575a5a6c7a.png)
ハイクオリティな3Dゲームを実行するためのゲームエンジン。




## おわりに
ここまで読んでいただきありがとうございます！

## 参考文献
・AWSの基本・仕組み・重要用語が全部わかる教科書 (見るだけ図解) 単行本（ソフトカバー） – 2022/8/23
川畑光平 (著), 菊地貴彰 (著), 真中俊輝 (著)
p.63
DatadogとVueでログ監視

VueのログをDatadogに送信して監視するためのメモ

# 前回

https://qiita.com/kuangzhixitian3/items/feec1517b74343d54023

## 導入手順１ - Vueのプロジェクトに@datadog/browser-logsを入れて設定する

https://www.npmjs.com/package/@datadog/browser-logs

npm でインストールする

1. datadogLogs.init({　を main.tsに記載する
2. clientToken は Datadoの RUMで作成したプロジェクトから取得する
3. ログ出力処理を実装しする
4. 画面を動かしログをDatadogに送る


## 導入手順２ - Datadogでログ確認する

![タイトルなし.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3751407/85e2a3bb-a60a-47df-b3f8-2b548ed57d4b.png)

ログ確認できた。
ついでにエラーログを出力したVueプロジェクトの関数名・ファイル名も分かった
AWSが展開するブロックチェーンカテゴリのサービスの一覧

## はじめに
AWSが展開するブロックチェーンカテゴリのサービスの一覧についてまとめてみました。

## Amazon Managed Blockchain
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/387980/6957e7d9-23a2-4a0d-8bd9-dbb6dabf9de8.png)
オープンソースフレームワークHyperledger FabricやEthereumを使用したスケーラブルなブロックチェーンネットワークを構築するサービス。





## おわりに
ここまで読んでいただきありがとうございます！

## 参考文献
・AWSの基本・仕組み・重要用語が全部わかる教科書 (見るだけ図解) 単行本（ソフトカバー） – 2022/8/23
川畑光平 (著), 菊地貴彰 (著), 真中俊輝 (著)
p.63
AWSが展開するビジネスアプリケーションカテゴリのサービスの一覧

## はじめに
AWSが展開するビジネスアプリケーションカテゴリのサービスの一覧についてまとめてみました。

## ビジネスアプリケーションカテゴリ
　ビジネスで使用するコミュニケーションユーティリティツールやアプリケーション機能を提供するサービス群。

## Alexa for Business
 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/387980/f495237b-c58f-45ef-b340-2bac2f5fd0dc.png)
Amazon Echoの音声インタフェースAlexaをビジネスで利用するためのサービス。

## Amazon Chime
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/387980/cfefa36e-fb13-4c19-a7bf-292628b4c1e0.png)
音声・動画通話、チャット、画像共有が可能なオンラインWeb会議サービス。

## Amazon Connect
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/387980/7b73b8fa-6246-44af-a38c-a11df8ab21c5.png)
エンドユーザー向けのコールセンターを構築・運用するためのサービス。

## Amazon Honeycode
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/387980/4c75f180-4747-438c-81f2-3b17db9ff26c.png)
ノーコードでWeb・モバイルアプリケーションを作成可能なツール。

## Amazon Pinpoint
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/387980/3ced0d73-5d09-4a04-a7db-3f165c0cef86.png)
プッシュ通知、Eメール、SMSテキストメッセージ、または音声メッセージを送信するサービス。

## Amazon SES
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/387980/63c0f448-6d3b-48b4-9cc4-373f705cc8f0.png)
マーケティングメールや注文確認などの取引メール、ニュースレターなど様々なEメールを大量に送信出来るサービス。SESは「Simple Email Service」の略。

## Amazon WorkDocs
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/387980/1010076f-43a6-4f60-b44d-a1dc28515d2d.png)
WindowsおよびMacOSで使用可能なセキュアなストレージおよびファイル共有マネージドサービス。

## Amazon WorkMail
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/387980/6b1cc23c-de1f-4cbc-8938-ae85bbfc4eff.png)
企業向けEメールおよびカレンダーのマネージドサービス。



## おわりに
ここまで読んでいただきありがとうございます！

## 参考文献
・AWSの基本・仕組み・重要用語が全部わかる教科書 (見るだけ図解) 単行本（ソフトカバー） – 2022/8/23
川畑光平 (著), 菊地貴彰 (著), 真中俊輝 (著)
p.63
【Zod】JSONをZod Schemaに変換する方法

transformを使用するとJSONをZod Schemaに変換できます。


![screen-shot-10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342443/dcbac3de-f3fd-4284-8c08-dfd8934f644d.png)

https://transform.tools/json-to-zod

https://github.com/ritz078/transform
AIを使用してタスクを処理する事のダークサイド

♯♯♯AIはwhyを無くしてしまう
AIは非常に便利である。
便利であるが故に自分の力以上のタスクをこなしてしまう可能性がある。
それは良いことのように思える一方で、場合によっては悪い影響を与える。
それはwhyを考える機会を我々から奪うことだ。
これは何故このようになっているのか、私はどうすべきなのかそんなことを考える必要がなくなるため、能力が伸びない。すると我々のエンジニアとしての価値を上げることができない。
このAI全盛期時代でエンジニアとしての価値を上げるには生産性を追いすぎないことも重要なのかもしれない。
AWSが展開するエンドユーザーコンピューティングカテゴリのサービスの一覧

## はじめに
AWSが展開するエンドユーザーコンピューティングカテゴリのサービスの一覧についてまとめてみました。

## エンドユーザーコンピューティングカテゴリ
　AWSクラウドを使ったオフィス作業向けの仮想デスクトップサービス群。

## Amazon AppStream 2.0
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/387980/547d83d0-4cea-4cea-a571-fb144713f034.png)
デスクトップアプリケーションをブラウザ上で実行するアプリケーションストリーミングサービス。

## Amazon WAM
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/387980/1b37ac0e-0442-4b08-915e-911597c8d6ff.png)
WorkSpaces向けのアプリケーションをデプロイ・管理するサービス。WAMは「Workspaces Application Manager」の略。

## Amazon WorkLink
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/387980/2c3adffb-6176-48a6-a5fa-8db938b3de80.png)
モバイルから社内のWebサイトやWebアプリケーションに安全かつ簡単にアクセス出来るようにするサービス。

## Amazon Workspaces
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/387980/ecf8a9a9-7938-41ed-ad6c-f0da46ef458c.png)
VPC内に構築する、開発用途等で使用する仮想デスクトップサービス。

## Amazon Workspaces Web

Webブラウザを使って、Workspacesとして利用するサービス。

## NICE DCV
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/387980/a117f337-b360-49aa-a5c8-153b18e94e28.png)
ハイパフォーマンスコンピューティング向けのリモートアクセスソフトウェア。




## おわりに
ここまで読んでいただきありがとうございます！

## 参考文献
・AWSの基本・仕組み・重要用語が全部わかる教科書 (見るだけ図解) 単行本（ソフトカバー） – 2022/8/23
川畑光平 (著), 菊地貴彰 (著), 真中俊輝 (著)
p.62
モノイドと関数合成

～モナドを理解するための Hors-d'oeuvre として～

# モノイド
集合 $S$ と二項演算 $\cdot$ が以下の規則を満たす時、２つ組 $(S,\cdot)$ をモノイド (monoid) という

1. 左結合律: $^{\forall a,b,c\in S}\ [a\cdot b\cdot c=(a\cdot b)\cdot c]$
2. 右結合律: $^{\forall a,b,c\in S}\ [a\cdot b\cdot c=a\cdot (b\cdot c)]$
3. 左単位元: $^{\exists e,\forall x,y\in S}\ [e\cdot y = y]$
4. 右単位元: $^{\exists e,\forall x,y\in S}\ [x\cdot e = x]$

注: 式の左側に書いてあるちっこいのは述語論理の記号
- $\forall a\in S$: 集合 $S$ に属する任意の $a$ に対して右の式が成り立つ
- $\exists e,\forall a\in S$: 集合 $S$ に属する、ある $e$ を定めると、任意の $a$ に対して右の式が成り立つ


# 関数の合成とモノイド
モノイドの要件に使われた文字を関数らしく書き換えよう
関数の集合 $F$ と合成 $\circ$ は以下の規則を満たす

1. 左結合律: $^{\forall f,g,h\in F}\ [f\circ g\circ h=(f\circ g)\circ h]$
2. 右結合律: $^{\forall f,g,h\in F}\ [f\circ g\circ h=f\circ (g\circ h)]$
3. 左単位元: $^{\exists {\rm id}_左,\forall f,g\in F}\ [{\rm id}_左\circ g = g]$
4. 右単位元: $^{\exists {\rm id}_右,\forall f,g\in F}\ [f\circ {\rm id}_右 = f]$

ただし、ここで出てきている関数は合成可能なように型を合わせる必要がある
すなわち、以下のようになる
- $f:V\to W$
- $g:U\to V$
- $h:T\to U$
- ${\rm id}_左:V\to V$
- ${\rm id}_右:T\to T$
Run jupyter notebook in Container on Ubuntu22.04 on WSL2 on Windows11

Container内でjupyter notebookコマンドをたたいたが、host側でjupyterが開けなかった。


- 解決方法
下記のコマンドでpasswordを設定してから
```shell
jupyter notebook password
```
--allow-root optionをつけてjupyter notebookを起動する

```shell
jupyter notebook --port 8888 --ip=0.0.0.0 --allow-root
```
独学フリーランスエンジニアがディレクションについて学ぶ

独学でスキルを身につけ、フリーランスエンジニアとして現在はGogole apps scriptとTypescriptを書きながら別業種の仕事もしながらという日々を送っているのですが、エンジニア以外にもWeb制作をしている時にもディレクションの立ち位置に興味ないかと聞かれる場面がありました。
本当にやりたいこととしてはプログラムをカタカタ書き続けていくことなのでディレクションはそこから外れるのではないか？とも考えていたのですが、自分がお仕事をいただいている会社が成果を上げ、成長を続けていくことで自分にも仕事が回ってくるという基本的な概念（会社の成長＝自分の成長）の重要性みたいなものが腹落ちしてきたのでディレクションについても学習してみようと思いました。

# ディレクション：Direction
> ビジネスの場においては、プロジェクトの完遂や制作物の完成に向けて、品質を適切に管理しながらゴールに導くことや、その仕事
と言われます。

https://directscout.recruit.co.jp/contents/article/20433/?vos=rdscsdis01pmax_ac_4206470684_cm_21648892526_gp__cr__kw__dv_c_sl_&saf_src=google_x&saf_pt=&saf_kw=&saf_dv=&saf_cam=21648892526&saf_grp=&saf_ad=&account_id=4206470684&saf_acc=4206470684&saf_cam_tp=performance_max&gad_source=1&gclid=Cj0KCQjwytS-BhCKARIsAMGJyzqQdnSLBcr8HZCJOquhKG9DEumIuuzD6IOi014ZGI5gNKfmRvEK1kIaAk5hEALw_wcB

GASで書いていてもDirectionが度々出てくるので、自分なりの言葉に置き換えるとしたら**方向づけ**でしょうか。
会社が、あるいは会社の抱えるプロジェクトが正しい方向を向いて（その先に待っているクライアントが最大限満足できるような道筋に向かって）適切な期限とリソースを守り遂行されるために必要となるのがディレクションなのではないかと言語化してみました。

## ディレクションで必要となる能力は多岐にわたる
ディレクションという業務について調べると、度々顧客との折衝であったりコミュニケーションであったり、業務自体への理解であったりと幅広い知識やスキルが求められるように思います。
でも、それってどの仕事でも同じだよなあと思ったり。結局のところどの視点で顧客（この場合は会社にとっての顧客）が満足できるか考えることだよなと思いました。

例えばWeb制作をしている会社であれば、クライアントになるのはwebサイトが欲しい人となるわけですが実際にサイト制作しようと決まった時に、どんなサイトがなぜ必要になって、どういったデザインが適切でどう構築していくのか、それを誰がいつまでにやっていくのか道筋を立てていくのがディレクションなのではないかと。
（基本的すぎることかと思いますが自分で言語化するって大事ですよね）

私が関わることが多いのは業務効率化やDX支援に関する領域になりますので、そういった部分でのディレクション業務としてどんなことが求められるのか考えてみます。

## DX支援や業務効率化を求めている際のディレクション業務
一番大事なのは問題点の評価のように感じます。これは普段身を置く医療系（リハビリ現場）でも常々考えていることですが、患者さんの状態を正しく把握、言語化できればどういった治療が適切か見えてくるのと同じなのでしょう。
つまり、顧客の現状として、何にリソースが割かれていて、どうなったら生産性を最大化できるのかということについて深掘りして言語化できれば自ずとやるべきことが見えてくるだろうと。
この辺はコンサルタントの仕事に重なるのかもしれませんが、より開発者寄りにみていくことでUI・UX観点から方向づけができるように思います。

問題点を正しく把握できれば、やるべきことが見えてくるのであとはそれを細分化してタスク化し、人的・時間的リソースを管理して進めていくということになりますので顧客との折衝が非常に重要だなと。
そして顧客も問題を漠然と抱えていることが大半になりますので、こちらからどういったことが可能なのかといった（金銭的な条件も加味した）提案ができるようになるといいんだろうなと見えてきました。



## まとめ
私が関わっている業務の本質として多いのは**業務効率化**になりますので、そういった領域でのディレクションとしては現状の問題点と、どういったフローになっていけば効率化が図れるかを理解しておくことから始まりそうです。
そうなると、クライアントの要望をヒアリングしてできることを列挙して実装していくという流れになりますので、つまりは工数・予算といった部分も言語化できておく必要があります（事前の準備、心構え、交渉材料として）。
あとは会社として持っているリソースを正しく把握しておく必要も出てきますね。ちょっとクリアになってきたように思います。ポエムライクな記事になりましたが何か参考になる部分があれば幸いです。
AI をあまり好きになれない理由を考えてみた

昨今、やたら AI という言葉を耳にしますね。
画像生成とか、ChatGPTとか、エンジニアの方でしたら Copilot とか Cline とか…
AI の進歩はすさまじく、現在いろいろなところで活用され始めています。

「AI を使っていない＝時代に取り残されている」

みたいな風潮にもなりつつあります。

自分も大学の研究室では AI を取り扱っており、そこら辺の人よりかは AI の知識はあると思っています。

でも実は僕、そんなに AI のこと好きではありません！

自分でも不思議です。なんとなく逆張りなのかな？:sunglasses: 食わず嫌いなのかな？:confounded:（でも研究室でかじってるしなぁ）とか思っていました。

でも、最近なんとなくその理由が分かってきた気がしましたので、今回はその理由を書いていこうと思います。

## 好きになれない理由

**結果が不確定・不安定だから**

上記に尽きると思います。

自分がプログラミングを好きな理由、それは「自分が書いたコードによってコンピュータが決まった動作を高速に **100% 正確に**行ってくれるから」かなと思っています。

しかし、「自分が書いたコード（プロンプト）によってコンピュータ（AI）が決まった動作を高速に **80% ぐらい正確に**行ってくれる」のは自分の好きなプログラミングの世界ではないなと。

そう思ったので AI を好きになれないんだなぁと思いました。

## AI は人間だと思ってみる[^1]

業務で AI コードレビューを導入することになりました。

一旦、仮運用してみて、いろいろな声が出てきました。

- ハルシネーションを起こす（誤った情報を指摘される）ことがある
- null チェックしてるのにしてないと言われたりする（差分のコードを見ただけじゃわからない部分とか）
- etc...

これを聞いて、ある方が「人間でも間違い起こすし勘違いするし、そんなもんじゃない？」と言いました。

たしかに！！！

AI をもう一人の架空の人物だと思えば、ちょっと知ったかぶりしたり、間違った情報を言ったり、差分だけ見てコードベース全体を見ずに指摘したりしても、別にいいよね。100% 正確である必要ないよね。

それよりかは、せっかくわざわざ（本物の）人間にレビューしてもらって手戻りが発生したりする可能性が少なくなっていいじゃん。

ふーん便利じゃん。

## AI の使い道

ということで、AI を一人の「人」と捉えることで、自分が納得できる AI の活用法が見えてきました。

- あるときはレビュアー（AI コードレビュー）
- あるときは助手（Copilot、副操縦士）
- あるときは相談相手（ChatGPT）
- あるときはプログラマー（AI コーディング）

## AI の使いたくない道

一方で、以下の使い方は自分は納得できません（AI が納得できる水準まで達していません）

- AI が直接ユーザーと接するサービス（AI チャットボット（企業の相談窓口みたいなやつ）、自動運転など）
    - 自分はコールセンターを作りたいわけではないです（AI を人と捉えるとチャットボットはいわゆるコールセンター）。運転手を作りたいわけでもないです（同じく自動運転は運転手）。
    - またどちらにせよ完璧なものが出来るとは言い難いです。
- AI だけで完結させようとするもの（全自動 HP 作成、画像・動画生成など）
　　- その成果物は AI という人が作ったものです。自分は作ったわけではなく、あくまでも発注者。
　　- きっとその成果物にはバグ・不自然な点がありますよ。

上記は、「自分がプログラマー」という**アイデンティティ**をなくしていることに他なりません。

## まとめ

自分が AI をあまり好きになれない理由

- 100% 正確な動作をしてくれないということは、自分の好きなプログラミングの世界ではないから

自分が納得する AI の活用法

- AI を人だと思い、自分の助手として自分をより引き立たせてくれる存在として使う

このように、AI という存在を認識することで、嫌悪感を感じることなく活用できそうだなと思います！

## さいごに

なんとなく AI 好きじゃないなぁみたいな人に見てもらえれば幸いです。（そんな人いるのかは知らないけど）

AI の根底には古典的機械学習、いわゆるデータ分析というものがあります。これは素晴らしいもので、古典的機械学習は確立された理論をもとに元データから推定を行い結果を導出します。

AI もやっていることは同じです。元データ（プロンプトや学習データ）から推定を行い結果を導出します。ただし、理論は不明です。というか理論自体を学習・訓練によって作らせるので、人間はそれを解読する役目をしています。

人間は リンゴが落ちる という結果から物理学という理論を導き出しました。
同じように、現在は AI が出す結果から何かしらの理論を導く というフェーズではないかなと思います。

いずれ、現在の AI が完全解読され、新・古典的機械学習 と呼ばれる日が来るのでしょうかw

そんな日を待ちながら、今は助手として AI を活用していきたいと思います。

別に AI（という人）の成果横取りしたって怒る AI 今のとこいないですからね。うまいこと給料増やしていきましょう（笑）

---
追記

別に、AI 使っている人がどうとか、AI 使ったプロダクト自体がよくないとかそういう話じゃないです。
もちろん、AI の研究者はものすごく尊敬しますし、自分も作ってみたい・解読してみたいとは思います。深層強化学習とか興味ある。
あくまでも、自分が AI を使うという点において、現状プロダクトに組み込むのはちょっと物足りないので活用に留めておきたいかもという話です。

[^1]: AI が「心」を持っているかとかそういう話ではないです。
Discord Botがなぜか二重起動している件

<!-- Discord Botがなぜか二重起動している件 -->

## はじめに

Discord Botを運用していたとき、なんかメッセージが2回送られているなと思って調べてみたら、なんとBotが二重起動していました。

二重起動していると、メッセージが2回送られてしまうだけでなく、YouTubeのAPIの利用回数が2倍になってしまうなど、いろいろと問題が発生してしまいます。

というわけで、なぜ二重起動しているのかを調査してみました。

## なぜ二重起動しているのか

原因が全く分からないので、とりあえずログを見てみることにしました。

``docker compose logs``で確認してみると、以下のようなものを見つけました。

```
bot-1  | 2025-03-11 23:49:19 INFO     discord.client logging in using static token
bot-1  | 2025-03-11 23:49:20 INFO     discord.gateway Shard ID None has connected to Gateway (Session ID: XXXXXX).
bot-1  | (botの名前) is ready!
(中略)
bot-1  | 2025-03-13 17:42:25 INFO     discord.gateway Shard ID None session has been invalidated.
bot-1  | 2025-03-13 17:42:31 INFO     discord.gateway Shard ID None has connected to Gateway (Session ID: YYYYYY).
bot-1  | (botの名前) is ready!
(後略)
```

``Shard ID None session has been invalidated.`` つまり、シェアされたIDが無効になったということです。

その後新しいセッションIDで再接続され、botが再起動している事がわかりました。

## 原因について

今のところ全くわからないです。通常ならセッションは定期的に更新されるので、おそらく更新の際に何らかのエラーが起きた、ということだと考えています。

Dockerで動かしているので、そのことも関係しているかもしれません。

## 対処法

二重起動していそうな挙動をしていたら、Dockerコンテナを``down``して再起動をすることが効果的だと思いました。定期的にログを見て、起動時の処理が2回以上行われているかを確認すると良いと思います。

できれば、ログを監視して、二重起動が発生した際に通知を送るような仕組みを作ると良いかもしれません。

## おわりに

今回は、Discord Botがなぜか二重起動している件について調査してみました。

原因はまだ詳しく分からず、対症療法しかできないので、今後もこういった事態が続くようなら本腰を入れて調査してみようと思いました。

それではまた。
WPFでウィンドウサイズに合わせてコントロールをリサイズするには

# Q.「ViewBoxがあるじゃん！」
A. あいつはGridの指定を無視して配置してきやがるので駄目です

# LayoutTransform最強！
以下のように対象のGridやCanvasにLayoutTransformを指定して、リサイズイベントで比率を計算してやると幸せになります
```xml
<Grid>
    <Grid.LayoutTransform>
        <ScaleTransform x:Name="Scale"/>
    </Grid.LayoutTransform>
</Grid>
```

```cs
private void OnSizeChanged(object sender, SizeChangedEventArgs e)
{
    // defaultWidthとdefaultHeightは各自で
    Scale.ScaleX = ActualWidth / defaultWidth;
    Scale.ScaleY = ActualHeight / defaultHeight;
}
```
Symbol REST API OpenAPI定義からMCPサーバを作る

SymbolのAPIはOpenAPI定義が用意されています。

- [Endpoints \- Symbol Developers](https://symbol.github.io/symbol-openapi/v1.0.4/)

前回はごく一部だけ手動で実装しましたが、今回は定義されているエンドポイントをZodのクライアントコードから動的にMCP Toolとして実装するコードを書きました。

これにより、個別に実装せずともすべてのAPIを呼び出せるようになりました。
また、定義が更新されても追従できて安心です。

なお、前回記事はこちら。

[MCPサーバの実装練習をSymbol API RESTサーバでしてみる \#ブロックチェーン \- Qiita](https://qiita.com/husqva_luna/items/84f50d739c3387473da0)


# 前提条件・知識

- Node.js 16以上（たぶん、20くらいだと安心）
- Claude Desktop β版


# コード

- [husqvaluna/symbol\-mcp\-server: Symbol MCP Server\. \(REST API tools\)](https://github.com/husqvaluna/symbol-mcp-server)


## Claude Desktop へのMCPサーバの設定

前回記事か、他の記事を参照してください。（手抜き）


# Claude Desktopでの動作

![スクリーンショット 2025-03-22 22.59.30_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3994773/4688a342-97ee-4b41-a083-76bd76151425.png)

![スクリーンショット 2025-03-22 22.59.44_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3994773/7ed89e59-b6ed-495f-bbc0-1624faca544a.png)

![スクリーンショット 2025-03-22 23.01.17_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3994773/f6ab4d7d-3fa3-44dd-9830-921ddcefd922.png)

![スクリーンショット 2025-03-22 23.01.29_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3994773/427fc5f0-8c44-48a4-b7f8-a557d5b069a4.png)

![スクリーンショット 2025-03-22 23.02.30_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3994773/92d12253-a9f5-4d63-b360-218d34ed78d6.png)

![スクリーンショット 2025-03-22 23.02.47_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3994773/9b07a53f-69b5-412e-a4e5-f26f3ae82c70.png)

![スクリーンショット 2025-03-22 23.03.01_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3994773/1e7e2c7c-1e79-4841-b56c-fa5882042b2c.png)

![スクリーンショット 2025-03-22 23.03.13_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3994773/00a0602d-dc55-4b8e-89bd-b02378d6128c.png)

すべてのAPIの呼び出しまでは試していません。

トランザクションの構築と発信も時間があれば実現してみたいところです。

ともあれ、せっかくなので遊んでみてほしいです。

なお、接続先ノードはハードコーディングで済ませてしまっているので、他のノードやメインネットのノードにつなぎたい場合は直接コードを書き換えてください。

- [symbol\-mcp\-server/src/symbol\-rest\-client\.ts at main · husqvaluna/symbol\-mcp\-server](https://github.com/husqvaluna/symbol-mcp-server/blob/main/src/symbol-rest-client.ts#L3653)




# まとめ

Claude DesktopのMCP機能はまだβ版であり、もっと便利に使いやすくも成っていくと思われます。

OpenAIは独自路線でOpenAI Agents SDKというものを開発しているようですし、一ヶ月一週間でちゃぶ台が返るAI周りなので、まだちょっと様子を見たほうがいいかなという気もします。

とはいえ、ある目的を達成しようとおもったら、なんらかの形で外部リソースを参照したり、アクセスする必要があるはずで、SEO関係でLLMS.txtが話題になるように、如何にAIフレンドリーなリソースやアクセス方法を提供するか、ということを今後は考えていく必要があるのかもしれませんね。
[学習メモ]機械学習をAWSで実装するまで①FlaskからS3に画像をアップロードする

こんばんは、座禅いぬです。
生成AIの話も楽しいんですが、普段は地道に業務アプリ書いたりデータ分析して業務改善を頑張っております。今週は画像ファイルを管理する作業していたのでその忘備録です。

::: note
先人がすでにいろいろな記事を書いてくれていますし、自分なりのアプローチとしてなるべく平易な単語使って説明をしてみたいと思います。
:::


### 大量に氾濫する画像をどうやって管理したらいい？
今取り組んでいるのは画像分類タスクです。私の職場では毎日たくさんの画像データが発生します。iPadのカメラや一眼レフカメラから、やたらでかい手術用顕微鏡や細菌を見る顕微鏡まで様々な機器で写真を毎日撮り続けています。めんどくさいのは、撮る機材も撮る人間も様々であるということです。

今まではそれを各機材ごとに保存していたのですが、機械学習させることも考えるようになったので、一元管理する仕組みを作ろうと考えるに至りました。そこで、今回はAWSのS3バケットを使って仕組みを構築してみました。

### S3バケットを使うメリット

では、なぜAWS S3を使うといいのか？を一般論ではなく自社のケースに当てはめて考えてみたいと思います。

1. __拡張性と管理のシンプルさがありがたい__
S3はほぼ無制限に容量を増やせるため、社内で増え続ける画像データに対応しやすいです。自社内でＨＤＤやサーバー立ててデータを管理するのはとてつもなくめんどいです。毎回AmazonのタイムセールのたびにHDD買い足すのはもううんざり。そもそも誰が管理するのか決めるだけで大変です。S3なら自動的に増やせるので、管理する手間が激減です。

2. __耐久性・可用性が高い__
S3は、データが失われるリスクを最小限に抑えられ、ハードディスクがぶっ飛んでつらい思いをする可能性がかなり下がります。でもそれ以上にありがたいのは様々なクライアントから同時に呼びだしたり、書き込みをする自由度が高くなることです。

3. __コスト効率の良さ__
サーバーによる情報管理の仕組みを格安で得られます。また、長期保存を目的としたサービス（Glacierなど）もあるので、例えば「保管義務があるから長期保存しておかないといけないけど、アクセスはたぶんしないな…」みたいな画像などを安価に保管できます。

4. __他のAWSサービスとの連携で安全に管理できる__
S3はAWS LambdaやSageMaker、EC2などと連携性が高いです。AWS内ですべて完結できれば、安全性も担保しやすいはず。画像分類や解析を行うときに、S3に画像を置いておけば仕組みを構築しやすいわけです。自動化も簡単。S3に新規画像がアップされたら自動的にLambdaを実行し、メタデータをデータベースに登録する…など色々できます。す。

### 実際にどうやって管理しているのか
現在のところ、以下のような方針でS3を使って画像を管理しています。

1. __画像保管方法の設計__
「どの機械、規格に紐付く画像なのか」を一目で把握できるように、フォルダを分割することが可能です。ファイルの格納ルールを明確化することで探しやすくできます。flaskだったらファイル名の命名ルールを決めるともっと管理しやすい。

2. __バージョン管理の活用__
バケットのバージョニングを有効にすることで、うっかり画像を上書きしたり削除しても、過去バージョンから復元できるようにしておくことができます。

3. __（応用編）Lifecycle管理__
これはちょっと応用的な話ですが、頻繁にアクセスされる画像は標準ストレージ（Standard）に置き、古い画像はIntelligent-TieringやGlacier Deep Archiveへ自動的に移動するようLifecycleポリシーを設定。必要なときは復元リクエストを送ることで取り出せるため、コストとアクセス性のバランスを調整できます。

### どうやって機械学習に活かす？
画像をS3で一元管理できるようになると、機械学習へ取り組みやすくなります。

1. __データセット作成が容易に__
バケットを横断して同じクラスラベルの画像をまとめる、撮影日ごとに画像を分割するなどの前処理が一箇所で済むようになります。メタデータを紐付けしておけば、ラベル付け作業もスムーズに行えます。
一つの場所に管理できるからこそ、「モデルの修正していて、撮影方法を変えることになった」などのいろいろな変更に対しても管理が行いやすいですね。

2. __ETLパイプラインとの連携__
AWS Glueや自前のスクリプトを組むことで、アップロードされた画像を定期的にスキャンし、必要なラベル付けやデータ変換（リサイズや圧縮など）を自動化できます。モデルの再学習や推論パイプラインへ素早くつなぐことが可能です。

3. __様々なAIサービスと組み合わせ__
Amazon Rekognitionで物体検出やOCRをかけたり、SageMakerで独自モデルを作り込んだりする場合も、元データがS3に集約されていれば読み取りやすく処理コストも抑えられます。
何がめんどくさいってGPUを使った作業を自動化するのはとっても大変なのですが、AWSで仕組みを作ればシンプルに設計・管理できます。

### 運用してみてわかったポイント
1. __アップロード・ダウンロードのエンドポイントを固定する__
セキュリティ上も大事な話で、エンドポイントを絞っておくことでデータの通り道がどこなのかクリアにしておくとよいです。

2. __ラベル付けのルール作り__
人間がどこまで手作業でラベルを付けるかを考えないといけないです。Flaskで設計する際に、どの機械からアクセスしたらどのようにラベル付けされるかまでしっかり作りこんでおくとミスが少なくて済みます。後で修正するのはとっても大変です。

3. __コストモニタリング__
大量の画像をアップロードすると、意外と保存コストや転送料がかさむことがあります。タグ付けやバケット単位でコストを監視し、月ごとに確認する運用を回すと安心です。

## まとめ
今回はAWS S3を使った画像管理の事例やメリットをご紹介しました。撮影機器や担当者がバラバラでも、一元管理することで「どこに何があるのか分からない」という混乱を防ぎ、機械学習のデータセット作成や分析作業もぐっとやりやすくなります。

画像が肥大化していく環境下ではクラウドの拡張性が非常にありがたいですし、すぐに別のAIサービスと連携できるのもAWSを使う大きな利点です。今後は機械学習パイプラインへの自動連携や画像の高度な検索機能、自動的に仕分けしてラベル付けする仕組みなどを強化していく予定なので、また何か進展があればブログにまとめたいと思います。

以上、今週やってたことの忘備録でした。次回は、実際SageMakerを動かすところまでやってみようと思います。
ここまで読んでくださり、ありがとうございました！