OmniAICreator/Qiita-1.07M huggingface dataset:
【Chrome/Arc】フルサイズスクリーンショットを撮る方法・ノードごとのスクリーンショットを撮る方法

# はじめに
ChromeやArcでのフルサイズスクリーンショットの方法を共有したいと思います。windows・Macそれぞれに画面スクリーンショットや範囲選択スクリーンショットはできると思いますが、webページ丸ごとのスクリーンショットを撮りたい時はありませんか？
PDFなら`command + P`やfile→プリントなど簡単にでき、それをpngに変えればいいじゃないかという人もいると思いますが、素早くpngが欲しい時もあるはずです！

# フルサイズスクリーンショットを撮る方法
次のたった3ステップで撮影することが可能です。
慣れたら5秒入らずで撮影できます!
**1. 開発者モード開く**
    `option + command + i`や`右クリック+検証`で開発者モード開きます。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3748983/cb27c609-2e77-36ea-4d33-088fa8a397e9.png)

**2. 実行コマンドを開く**
    `shift + command + p`で実行コマンドを開きます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3748983/4fc95e6a-bdb9-a604-9f7a-b1b21d628c4c.png)
**3. フルスクリーンショットを撮る**
    フル と入力すると　
    一番上を押す or Enter でスクショ完了
    
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3748983/c7dbbdd6-43fa-78ca-2226-810dd6c47f36.png)

## コマンドが動かない場合
右クリックで開発者モードを開き、図1の歯車マークから設定画面を開きます。そして、図2のショートカットを開き、その中から図3のコマンドを探します。あとは自分の自由に書き換えてok

他にも開発に役立つ色々なショットカットがあるみたいなのでぜひ使ってみてください！！
| 図1 | ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3748983/b887607b-4c28-ddbb-72ee-a4603c8d89c4.png) |
|:-:|:-:|
| 図2  | ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3748983/27535a89-af25-d4b6-b914-00b1411e77de.png)  |
| 図3  | ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3748983/853c0a55-dcb9-cfbf-d2de-ccb0c2333fcf.png)  |

# 応用編
なんとスクリーンショットはフルスクリーンショット、画面 or 選択範囲以外にも、任意のタグ（bodyやdivなど）ごとに取れるようです！！さっそく手順を見てみましょう！！

1. 開発者モードを開く
    これに関してはもう説明は入りませんね
    右クリック + 検証 or `option + command + i`
    
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3748983/894215c3-d4dd-a541-52a4-3483a200cab9.png)

1. 要素を開く
    デフォルトで要素が開かれているはずですが、開発者モードの上部で要素が開かれているか確認していください
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3748983/1cf28757-e719-d57c-078b-91e35a7913c8.png)

1. タグを選択
    タグを選択します。要素ないの任意のタグを選択するとweb画面上の選択されたタグの範囲が水色になるはずです。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3748983/e44320b1-9287-0f77-ccde-5684b31fc340.png)

1. スクリーンショットを撮る
    3の状態のまま右クリックを押すとメニューバーが出てきます。そこから、`ノードのスクリーンショットをキャプチャ`を選択するとスクリーンショット完了です！ダウンロードにスクリーンショットが保存されているはずです

    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3748983/5722c524-3d75-9f04-9e59-0f7c0f8ee051.png)

    撮影したスクショ
    ![qiita.com_bearl27_items_fd02c0f959112d2690b6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3748983/a165b475-e6c4-0585-25f2-4bd317aca9a4.png)
MRTKのButtonの関数とアイコンをスクリプトで変更する

初心者がちょっと躓いて解決したメモです


MRTKのToolboxから追加できるボタンに色々変更を加えたいときは［ButtonConfigHelper］クラスを使うと便利

## やる事

スクリプトでまずモジュールをインポート
```
using Microsoft.MixedReality.Toolkit.UI;
```

変数を定義して
```
private ButtonConfigHelper _buttonMRTK;
```
Start()やAwake()でコンポーネントを取得
```
_buttonMRTK = GetComponent<ButtonConfigHelper>();
```

### delegateでボタンを押したときの関数を割り当てるには
ButtonConfigHelperクラスにある［OnClick.AddListener(関数名)］を使う
UnityEngine.UIのボタンとの違いは、１文字目が大文字になってる事
(UnityEngine.UIのボタンはonClick.AddListener(関数名))でdelegate出来る

```
_buttonMRTK.OnClick.AddListener(OnClick);
```
### アイコン直下のテキストを動的に変更するには
![grafik.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3855192/d7860081-4238-38bd-543a-c03c5732ac77.png)
ButtonConfigHelperのMainLabelTextに変更を加える
```
_buttonMRTK.MainLabelText = "String"
```

### アイコンを動的に変更するには
マイクのON/OFF状態を示す_isActive変数
パネルにマイクの入力ON/OFFを切り替えるボタンを設置してる。
ON/OFFになってるのかわかりやすくするために、クリックしたらアイコンが切り替わるようにする
![grafik.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3855192/93314d4b-6f85-2277-3d37-625e82220d13.png) ![grafik.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3855192/15575a70-9044-482b-8fe6-48422a2e2647.png)

まずアイコンを表示するために、Button Config Helperコンポーネントを確認する
すると、Icon Setにアイコンのリストがまとまったもの(IconSet)が紐づけられている


![grafik.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3855192/b4f7768e-f106-ae04-be53-116b59813824.png)
(IconSet)をインスペクターで確認すると、4種類のアイコン型があるのが確認できる
![grafik.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3855192/e420b200-5aba-e5e3-668e-0145c22bf598.png)
Quad, Sprite, Fontそして Charの型が存在する

今回自分の画像はQuadなので、SetQuadIconByName関数を用いてアイコン画像を指定します
Sprite, Font, CharならSetQuadIconByNameのQuadをそれぞれの型に変えます。
SetQuadIconByName関数にはアイコン名前を入力します

以下のコードでは_isActive変数にマイクがON/OFFになってるかを判定し、ONなら
![grafik.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3855192/15575a70-9044-482b-8fe6-48422a2e2647.png)
OFFなら赤いナナメ線の入ったものをアイコンとして表示します
```
_buttonMRTK.SetQuadIconByName(_isActive ? "EnableMicrophone" : "DisableMicrophone");
```
BigQueryでカンマ区切り文字列項目の中の値が重複してたら抽出しない方法

# はじめに

BigQueryの項目で区切り文字のある値が入った項目を
SPLITで配列にする方法は有名ですね。こんな感じの。

```sql
WITH id_table AS (
   SELECT '111,112,113' AS ids
)
SELECT
    SPLIT(ids, ',') AS id
FROM
    id_table
```

この記事はこれの小さな応用編です。


# やりたいこと

以下のようにidsの中で値ダブりがあった場合のレコードは除外して出力したい

```yaml
record1:
  name: 'aaaa'
  ids : '111,112,113'
record2:
  name: 'bbbb'
  ids : '111,112,111,113'

# record1だけを出力

record1:
  name: 'aaaa'
  ids : '111,112,113'

```

# 方法


```sql
WITH dummy_table AS (
    SELECT
      'aaaa' AS name
      ,'111,112,113' AS ids
    UNION ALL
    SELECT
      'bbbb' AS name
      ,'111,112,111,113' AS ids
), ids_table AS (
    SELECT
        SPLIT(ids, ',') AS id_array
        ,*
    FROM
        dummy_table
)
SELECT
  * except(id_array)
FROM
  ids_table
WHERE
    ARRAY_LENGTH(ARRAY( SELECT DISTINCT id FROM UNNEST(id_array) AS id))
    = 
    ARRAY_LENGTH(ARRAY( SELECT id FROM UNNEST(id_array) AS id));
```


1. SPLITで,区切りの項目を配列にします
2. UNNESTで縦持ちにします
3. 比較する片方はDISTINCTをかけて、重複行を排除します ※ここがポイント
4. 両辺を配列(ARRAY)として、配列の長さ(ARRAY_LENGTH)を出します
5. 重複の値がない場合は、両辺値が一致してTRUEになりますが、重複する値が存在する場合はFALSEとなり除外されます

プログラミング言語で配列長さ比較して云々はしたことあったのですが、
BigQueryでそれっぽいことして除外できないか模索したら、この形に辿り着きました。

ちなみに

WHERE句の部分、これでも同じことができます。

```sql
WHERE
   ( SELECT COUNT(DISTINCT id) FROM UNNEST(id_array) AS id)
    = 
   ( SELECT COUNT(id) FROM UNNEST(id_array) AS id);
```

こっちの方がクエリ書き慣れてる方はわかりやすいかもしれないですね。

# おわり

良いお年を。
RTCP

>フィードバックや同期、ユーザー・インタフェースを処理している。これは`メディア・サンプルを送信`しない。

### 状況によりデータ・レートを調節する
>第一の機能は、`遅延や遅延の変動またはジッター、帯域、輻輳、その他のネットワーク特性を送信元にフィードバックするのに利用可能`である。この情報は、ネットワーク状態が良いときに符号化プロセスがデータ・レートを`増加`させたり、（より増加を向上させる）、ネットワークに障害がある際、データ・レートを`削減`するのに利用できる。連続的なフィードバックを提供することができる。

### 状況により符号化アルゴリズムも変更する
>ペイロード・タイプ・フィールドが現在のパケットにどの符号化アルゴリズムが利用されているかを宛先に通知するため、`要求に応じて符号化を変化させる`ことが可能になっている。

### フィードバックを送ることにより問題が起こるので送信レートを下げる
>フィードバックの機能を提供するにはとの問題点は、`RTCPレポートが全ての参加者に送信される`ことである。大きいグループのマルチキャスト・アプリケーションでは、`RTCPによって使用される帯域は急激に大きくなる`だろう。この問題を防ぐために、RTCP送信者は、`メディアの帯域の一定の割合を合計で超えないようにレポートの送信レートを下げる`。

### RTCPレポートを聞いて推定し総数をメディア帯域は送信者に教えてもらう
>それぞれの参加者がメディア帯域と、参加者の総数を知る必要がある（メディア帯域は送信元に教えてもらい、参加者の総数は自分以外のRTCPレポートを聞いて推定する）。

https://bookplus.nikkei.com/atcl/catalog/23/03/16/00728/

### 感想
フィードバックの通信を行う分で帯域が大きくなってしまうのか
メディアサンプルとは？
セキュリティを勉強したいからウィルスを25個まとめてみた。

### 茶番
全国学生対抗戦に投稿する記事です。

どうも、こんにちは"勉強目的"でウィルスを作ってみることにした人です。
PCがラグすぎて泣いてたらPCが壊れました。データ飛びました。
ウィルス消えました。　動作早くなりました。
はい、以上でs((((((
(嘘なので心配しなくていいよ)

### 半平、三辺、本編です。
皆さん、PCを使っていますか?
webは、便利ですが悪用しようとする人物がいますね(?)
薬みたいなもんだなこれが。
ということで、ウィルスについてまとめてみた☆
### リスト

#### Emotet
レベルが高いやつらしくて、スパムメールで感染地域を増やす。

#### Ransomware
ファイルを暗号化したうえで人質にとって身代金要求のやつ。
支払いは、onionサイトでbitcoinがつかわれるばあいがおおい　

#### WannaCry
ランサムウェアの一つ
windowsの脆弱性を利用して増えた。

#### NotPetya
windowの脆弱性をつかって増える。
破壊目的が多い。

#### TrickBot
銀行情報を盗むトロイの木馬.

#### Dridex
銀行情報を狙うマルウェア.
フィッシングメールを中心に使って感染する。

#### conficker
 OSの脆弱性を使ってPCを感染させ、ボットネットを作成するワーム。

#### Zeus
"主"に銀行情報を盗むトロイの木馬

#### Sality 
ファイルを感染させ　バックドアを作るらしい

#### Mirai 
IoT嬉々を使ってDdosをかける　ボットネット
[ソースコードが公開されてる。](https://github.com/jgamblin/Mirai-Source-Code)
#### Sasser
 Windowsの脆弱性を利用するワームで、感染するとPCがクラッシュするらしい。

#### ILoveYou
メール型ウィルスで[添付ファイル](https://github.com/onx/ILOVEYOU)を開くと感染する。

#### Blaster
Windows XPの脆弱性を利用して拡散するワーム。

#### Stuxnet
イランの核施設をターゲットにしたサイバー攻撃に使われたウイルス。
やめてくれぇ。。。

#### keylogger
ユーザーのキー入力を監視し、情報を盗むマルウェア。
某I-Fだかには、搭載されてるらしい
フィルタリングサービスのソースにキーロガー見つけたことある。。。。。

#### Android Malware
Androidデバイスをターゲットにしたマルウェア。例えば、"Joker"など。

#### MacOS Malware
MacOSをターゲットにしたマルウェア。最近では「Silver Sparrow」などが見つかった。

#### FakeAV
偽のアンチウイルスソフトウェアを装い、ユーザーからお金を騙し取るマルウェア。
みんなも、ウィルスバスター使おうか

#### Fleeceware 
高額なサブスクリプションを騙し取るアプリやマルウェア。

#### Agent Tesla
パスワードとかを盗むマルウェア

#### Kovter
広告詐欺やクリックジャッキングを目的としたマルウェア。

#### BadRabbit
ランサムウェアで、ネットワーク経由(LUNとか？)で拡散します。

#### Ryuk
企業などをターゲットにして金銭を要求するらしい。
するなら、ブラック企業にしてくれ。。。。

#### Chimera
ランサムウェアで、暗号化に加え、データ漏洩をも脅迫材料に使うやつ。

#### QakBot 
銀行情報を狙ったマルウェアで、感染後にシステムを乗っ取る

### 終わり!

25個　多分　書きました。
メール経由が多いようなので注意しましょう!

みんなもウィルスに注意していいエンジニアライフを
アディオス!
FIS アクションに AWS Lambda がサポート

# 内容

- Lambda が新たに FIS と連携。これにより、開発者はコードを変更せずに、Lambda 関数に対して以下のような障害シナリオをシミュレーション可能

    - **遅延** aws:lambda:invocation-add-delay
    - **エラー** aws:lambda:invocation-error
    - **http統合の応答** aws:lambda:invocation-http-integration-response

これらの機能を活用することで、アプリケーションのパフォーマンスや回復性を向上させるためのテストが容易になります。

開発者はコードを変更せずにという点がポイントかと思います。

https://aws.amazon.com/jp/about-aws/whats-new/2024/10/aws-lambda-fault-injection-service-actions/


# やってみる

## Lambda関数を設定する

ドキュメント通りやってみます。

① S3 読み取りアクセスポリシーを Lambda 関数にアタッチする。

下記ドキュメントに記載の IAM ポリシーを作成し、Lambda の IAM ロールにアタッチします。

https://docs.aws.amazon.com/fis/latest/userguide/use-lambda-actions.html#lambda-prerequisites

② FIS 拡張機能をレイヤーとして関数にアタッチする。

`arn:aws:lambda:ap-northeast-1:339712942424:layer:aws-fis-extension-x86_64:9`

https://docs.aws.amazon.com/fis/latest/userguide/actions-lambda-extension-arns.html

③ `AWS_FIS_CONFIGURATION_LOCATION` 変数を `arn:aws:s3:::<S3バケット名>/FisConfigs/` に設定する。

④ `AWS_LAMBDA_EXEC_WRAPPER` 変数を `/opt/aws-fis/bootstrap` に設定する。


## 実験テンプレートを準備する

Fault Injection Service で実験テンプレートを作成します。

なお、今回は FIS アクションに AWS Lambda がサポートしたということがメインですので、FIS の細かい設定は省きます。過去に投稿している記事などもありますので参考にご覧下さい。

https://qiita.com/leomaro7/items/27219e1873695f637c07

Lamba のタイムアウト値を 3 秒にし、Startup delay milliseconds で 5 秒遅らせるようにしてみます。

![スクリーンショット 2024-12-12 20.08.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280929/f32c4c72-2f22-02e3-c926-001a92980aae.png)

また、実験レポート生成機能を追加されたというアップデートがあったので、ついでにこちらも試してみます。

https://aws.amazon.com/jp/about-aws/whats-new/2024/11/aws-fault-injection-service-experiment-reports/

![スクリーンショット 2024-12-13 20.31.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280929/f2566ab0-79bd-7a97-84ea-27deb5a52bab.png)

## テスト開始

準備が整いましたので実験開始です。

![スクリーンショット 2024-12-12 20.35.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280929/997b2d69-fb86-9fd3-e85e-c4e331224960.png)

「running」となったら、この間にリクエストを投げてみます。

```
(base) naata@naatanoMacBook-Air backup % 
curl -i -X POST https://XXX.execute-api.ap-northeast-1.amazonaws.com/Stage/ \
  -H "Content-Type: application/json" \
  -d '{"id": "123", "name": "Test Item"}'
HTTP/2 502 
content-type: application/json
content-length: 36
date: Thu, 12 Dec 2024 11:35:36 GMT
x-amz-apigw-id: CrST9GqPNjMELLw=
x-amzn-requestid: 3aeaf55d-be4a-4d56-b812-06ce6766ce70
x-amzn-errortype: InternalServerErrorException
x-cache: Error from cloudfront
via: 1.1 b95e72b30bcace3da0a33c6d9607f382.cloudfront.net (CloudFront)
x-amz-cf-pop: NRT20-P6
x-amz-cf-id: mIG5HYB4f-SgBuqBjUyxeCetGuvUcJrmkYoN0bRFI3YFOczX6YqnFg==

{"message": "Internal server error"}%  
```

コードを変更せず、意図的に障害を起こすことができました。

また、S3 にレポートも生成されていることが確認できました。

![スクリーンショット 2024-12-13 20.33.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280929/8776cade-2ac3-8c80-78d6-abbc3ec4e47c.png)

レポートの中身を確認しましたが、これだけ見て正直なところうーん、、、といったところが実際の感想です。

うん、なんか急に料金が高くなっているなと思ったら、レポートごとに 5 USD かかるのか。。。要注意。。。
【Laravel】リクエストルールの書き方に気をつけましょう

# はじめに
本記事をごらんいただきありがとうございます。東京でバックエンドエンジニアとして勤務してる大野です。今回初めてのアドベントカレンダー参加なのですが、自分のスタンスは変えず私のいつも通りの投稿をしていきます。
今回はLaravelでカスタムリクエストを記述する際の僕の**超凡ミス**をご紹介します。初心者だと陥るミスかもなので、僕と同じミスは踏まないように自戒の意をこめて記事に残します。（ぼくはこのミスで数時間無駄にしました）

# リクエストルールの記述
僕がやってしまったミスは以下のような記述です。
```php:app/ruquests/SomethingRequest.php
<?php

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;

class SomethingRequest extends FormRequest
{
    /**
     * Determine if the user is authorized to make this request.
     */
    public function authorize(): bool
    {
        return true;
    }

    /**
     * Get the validation rules that apply to the request.
     *
     * @return array<string, \Illuminate\Contracts\Validation\ValidationRule|array<mixed>|string>
     */
    public function rules(): array
    {
        return [
            'name' => ['required', 'unique:users, name'],
            
        ];
    }

    public function attributes()
    {
        return [
            'name' => '名前',
        ];
    }

    public function messages()
    {
        return [
            'name.required' => ':attributeは必須項目です。',
            'name.unique' => 'この:attributeはすでに存在します。'
         ];
    }
}
```

はい、普段Laravelやってる方なら気付きますよね。ここですね。
```
'name' => ['required', 'unique:users, name'],
```

`unique:users,`の後にスペース入っちゃってるんです。というか意図的に入れました。だってこっちの方が可読性上がるくないですか？:frowning2:笑
これやっちゃうと、nameにどんな値が入っていようがはじいちゃうんですよね。一生分からんって勢いでしたね当時は、、、今となればただの初心者あるあるの一つに過ぎませんでした。「バリデーションルールだけは間違ってないでしょ」って先入観がよくなかったです。あと、このご時世AIに聞けば一発でした。（お恥ずかしい）

# 終わり
皆さんはこんなミスしませんよね？でも、こうゆう**超凡ミス**って意外とやっちゃうのかな？とかも思ったので記事で共有させていただきました！僕の屍を超えていってください。
最後に、[こちら](https://qiita.com/oono_dev/items/bf647cb77b65764d14c5)の記事にて普段、僕がどのようなマインドでエンジニアリングしているか記載してます。よければ覗いてみてください！
本記事に間違い等があればご指摘いただけますと幸いです！
【初学者に向けて】Amazon Bedrockについて概略をメモ書き

## Amazon Bedrockとは
　Amazon Bedrockは、主要なAI企業が提供する高性能な基盤モデル（Foundation Model, FM）を、単一のAPIを通じて利用できるフルマネージドサービスです。一つのAPIの窓口を使って、複数の生成AIを利用する為のプラットフォームという形のようです。
このプラットフォーム上で、ユーザーは生成AIアプリケーションを迅速かつ安全に構築・展開可能とのこと。

https://aws.amazon.com/jp/bedrock/?gclid=Cj0KCQiA0--6BhCBARIsADYqyL_SBiZZW3HH1xRnIQwt0oLfqCZVS_spadNvU5HzxY0pRQKJe29BbuEaAtPmEALw_wcB&trk=38cc0cc4-7da9-4785-9231-aba910a719d1&sc_channel=ps&ef_id=Cj0KCQiA0--6BhCBARIsADYqyL_SBiZZW3HH1xRnIQwt0oLfqCZVS_spadNvU5HzxY0pRQKJe29BbuEaAtPmEALw_wcB:G:s&s_kwcid=AL!4422!3!692062154789!e!!g!!amazon%20bedrock!21048268290!157173580937


## 主な特徴

　多様な基盤モデルの選択: AI21 Labs、Anthropic、Cohere、Meta、Mistral AI、Stability AI、Amazonなどの企業が提供するFMを利用可能です。これにより、ユースケースに最適なモデルを選択できます。

モデルのカスタマイズ: 独自のデータを用いてFMをプライベートに微調整することで、特定のタスクや業界ニーズに適したモデルを構築できます。

検索拡張生成（RAG）の活用: 企業のデータソースから情報を取得し、モデルの応答を強化することで、より正確で関連性の高い出力を実現します。

エージェントの構築: エンタープライズシステムやデータソースと連携し、複数のタスクを自動的に計画・実行するエージェントを作成できます。

サーバーレス環境: インフラストラクチャの管理を必要とせず、AWSの他サービスとシームレスに統合できるため、生成AI機能を迅速にアプリケーションへ組み込むことが可能です。

## 利用可能な基盤モデル

　Amazon Bedrockでは、以下の基盤モデルが提供されています。

Amazon Titan: テキスト生成や画像生成、文章要約など、幅広い用途に対応する汎用モデルです。

AI21 Labs（Jurassic）: 複数の言語に対応した大規模言語モデルで、カスタマーサポートや文章要約などに適しています。

Anthropic（Claude）: 大量の情報を処理可能な汎用型モデルで、長文の要約やデータ分析に強みを持ちます。

Cohere（Command, Embed）: 検索拡張生成に特化した企業向けモデルで、AIアシスタントの構築に適しています。

Meta（Llama）: 高度な推論やテキスト要約、感情分析に優れ、コンテンツ作成や研究開発での活用が期待されます。

Mistral AI（Mistral）: 効率的に動作する大規模言語モデルで、コーディングの最適化やテキスト要約に適しています。
    
Stability AI（Stable Diffusion）: テキスト入力から高品質な画像を生成するモデルで、広告やプレゼン資料の作成に役立ちます。

### クラウドソリューション

2024年12月には、テキスト、画像、動画の生成・理解を支援する6つの新しいNovaモデルが追加され、200以上の言語に対応し、競合モデルと比較して75%のコスト削減を実現しています。

## 利用料金

　Amazon Bedrockの料金は、モデルの利用方法やカスタマイズ内容によって異なります。主に以下のプランが提供されています。

オンデマンド
使用量に応じた従量課金制で、入力および出力トークンの処理数に基づいて料金が発生します。

プロビジョンドスループット
特定のスループットを確保する時間ベースの契約プランで、大規模な推論ワークロードに適しています。

詳細な料金体系や具体的な料金例については、AWS公式ページをご参照ください。

## まとめ
　Amazon Bedrockは、多様な基盤モデルへのアクセスと柔軟なカスタマイズ機能を提供し、生成AIアプリケーションの開発・展開を大幅に簡素化します。これにより、企業は迅速かつ安全に生成AIを活用し、業務効率の向上や新たな価値創出を実現できます。
UnrialEngine5：プロトタイプへの道３

# 前回の続きをやっていきます
- まずは前回の振り返りを軽くおさらいします

## 前回の振り返り
- タイムラインノードの作成を終え、関連するlocationのノードに接続するための新しいノード「set Relative Location(MovingBorad)」を作成します
- タイムラインノードの設定を終えて、作成したブループリントをworldに設置して、試しに実行すると設置した床が動いていることが確認できたと思います

## 続きから、
- 設置したコーン（トゲ）の当たり判定に触れたときの処理を追加します
- 左のコンポーネントは「NeedleCollision」をクリックし、右の詳細からイベントの下階層の「On Component Begine Overlap」の＋をクリックするとしたのノードが出てきます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/310502/0388435f-f275-6b82-a1fc-135ea81427f9.png)
- このイベントノードをスタート地点として、ブループリントを組んでいきます

## リスタート処理を実装
- 当たり判定にプレイヤーが触れたらアクタを消す処理の実装
- Destroy Actor ノードを使う、On Component Begine Overlapの実行ピンをドラックし、Destroy Actorを選択する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/310502/f6e6c2e0-51ee-e01e-de53-8e5a994348de.png)
- On Component Begine Overlapの「Other Actor」をドラッグして、さっき作ったDestroyActorの「Target」に設置する
- これで当たったら消えるようになりました
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/310502/603e53cc-f7f6-4ffb-77d6-dc72e45b73cd.png)
- 続いて、当たったら数秒後にリスタートする処理を入れていきます
- 「Destroy Actor」の出力からドラッグして、Delayノードを作成して、「Duration」を2.0と設定します
- 次に新規ノードを右クリックからで「Get Game Mode」、「Get Player Controller」を作成し、DelayノードからCompletedをドラッグしてRestartPlayerを選択します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/310502/9a32f568-45a7-f9d3-35db-5bfeee354dc2.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/310502/08624f44-48fe-1883-9de1-bd4cd98767c4.png)
- 保存してコンパイルするのをおわすれずに、、
- 動く床のように作成したBPをドロップしてフィールドへ配置します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/310502/3cf44eb1-f0bb-586b-43ce-cc7c55af4f9c.png)
- これができたら実行して、キャラを操作して、トゲに当たったらリスタートすることが分かると思います
- このままでは、当たり判定に当たったものすべてが消えてしまいます。このため、その判定を付け加える
## 当たり判定の詳細
- BPの編集でOn Component Begine…ノードとDestroyActorの間にBranchのノードを付け足します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/310502/40f495bb-8097-d0fd-2464-638309d860c5.png)
- 人であるときに判定を実行するために、ブランチノードに条件を付けます。イメージはプレイヤーと等しい場合を条件に発生させます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/310502/49ab8157-ff47-43a7-5378-19c8c9eb6c57.png)
- 上の画像のようにノードを接続させます

- 今回はここまで！、ご覧いただきありがとうございました
- BPの編集おわって保存とコンパイルを忘れずに・・・
ゲーム『NO MORE KING』　CASIO 関数電卓 fx-5800P BASIC用　ソースコード

###

### 1. ゲーム説明
- **J**と**Q**と**K**の3枚のカードがあります
- ランダムに伏せられていますので１枚を選びます
- **K**を引かないことがゲームの目的です（No More King）
- **K**の場所を推理して１２３のキーを押すと、カードがオープンされます
- **K**を引かずに何回続けられるか⁉️
- 10回連続できればかなりすごいです。その場合の確率は(1/3)^10≒1.7%
　（自分の最高記録は13回です）
- このゲームは当方が発案したものです

![No More King - 1.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27292/fbc7b4fc-ac03-18d4-1be0-f0227c440003.jpeg)
ゲーム開始画面。？が伏せられたカードです。番号のキーを押して下さい

![No More King - 3.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27292/5c512ce8-8d28-9c2c-ba7c-08811d01c5e3.jpeg)
1番のカードを選んでオープン‼️**Jack**なのでセーフ。右下の数字はスコアです。なにかキーを押して次へ進みます

![No More King - 2.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27292/e913d373-11dc-6aa0-0abb-c662ad90e2ab.jpeg)
次は2番のカードを選びましたが、**King**でしたのでドボンです。ゲームオーバー泣


### 2. ソースコード　※fx-5800P BASIC用です
**注意:** ソースは可読性UPのため<font color=red>**字下げして//でコメントを書いていますが、いずれもCASIO　BASICではエラーになります**</font>ので、実際にご利用される際には除去して下さい。
- 配列（DimZ）を使わず行列（Mat）を使用しましたので、GetKeyのキーコードだけ差し替えればfx-9750GIIIやfx-CG50などでも動作可能だと思います（試していません）
- プログラムで使用する変数　
    - Mat A[2,3]：　[1,1-3]は札の管理。[2,1-3]は置き場の管理に使っています
    - X：札の乱数を格納 　　  Y：札置き場の乱数を格納 
    - K：キー入力判定用　　　L：入力されたキー値を格納
    - S：スコアの格納
    - I：ループ制御用



```
0→S           // スコア。Kingを引かなかった回数

While 1        // メイン（無限ループ）
	[[0,0,0][0,0,0]]→Mat A    // 行列A確保。[1,1-3]は札管理。[2,1−3]は置き場管理

	Do                             // 場札の取り出しと格納
		RanInt#(1,3)→X             // 手札乱数発生（1:J,2:Q,3:K）
		If Mat A[1,X]=0:Then       // 手札未使用（=0）なら使用済にする。使用済なら再Loop
			X→Mat A[1,X]
			Do
                RanInt#(1,3)→Y         // 場所の乱数発生
				If Mat A[2,Y]=0:Then   // 空き地なら札を格納、Loopを抜ける
					X→Mat A[2,Y]:Break:IfEnd
			LpWhile 1
		IfEnd
	LpWhile (Mat A[1,1]=0 Or Mat A[1,2]=0 Or Mat A[1,3]=0)   // 全札配り終わるまでLoop

	Locate 1,1,"<NO MORE KING>  "
	Locate 1,2,"[?] [?] [?] "
	Locate 1,3," 1   2   3       "    // スペース1個、3個、3個、6個
	Locate 1,4,"            (  )"      // スペース12個
	Locate 14,4,S

	Do:Getkey→K:LpWhile K<35 Or K>37  // BET待ち。1,2,3キーのみ有効
	K-34→L                            // キー値（1,2,3）をLに格納
	Locate L*2+(L-1)*2,4,"="         // 押したキー番号にマーキング
	
	For 1→I To 3       // 場札をすべてめくる
		Mat A[2,I]=1⇒Locate I*2+(I-1)*2,2,"J"
		Mat A[2,I]=2⇒Locate I*2+(I-1)*2,2,"Q"
		Mat A[2,I]=3⇒Locate I*2+(I-1)*2,2,"K"
	Next

	Locate 1,3,"  1   2   3    ▶r∠θ"    // ▶Eを表示　スペース1個、3個、3個、4個
	Locate 16,3,"E"
	
	If Mat A[2,L]=3:Then             // King引き。ドボンでBreak
		Locate L*2-1+(L-1)*2,4,"x=x" // 座標を算出してドボンマーク"x=x"表示
		Locate 1,1,"<U ARE THE KING>"
		Break
	Else
		S+1→S        //　JackまたはQueenならスコア＋１
		Locate 14,4,S
	IfEnd

	Do:Getkey→K:LpWhile Not(K)    // ポーズ。キー押せば継続
WhileEnd

Locate 12,2,">BYE<"
```
ChatGPT「Canvas」の新しいコード実行機能を使ってみた！

### はじめに

2024年12月5日から、OpenAIは「12 Days of OpenAI」という12日間続くイベントを始め、毎日新しいコンテンツや発表を公開しています。
2024年12月11日にChatGPTの「**Canvas」**機能の更新が発表されたので調べてみました！

### Canvasとは？

Canvasは、ChatGPTの新しい機能で、文章やコードの作成や編集をサポートしてくれるツールです。ChatGPTとのチャット画面と、作成中の文章やコードを並べて表示できるので、やり取りが整理され、作業がしやすくなります。

ユーザーとChatGPTが一緒に文章やコードを編集できます。文章にはコメントを付けたり、コードにはバグの修正提案を加えたりできます。

今回のアップデートで、コードをチャット内で実行ができるようになったが一番大きなポイントだと思います。あとは、今までは手動でCanvasを選択しないと利用できませんでした。このアップデートでChatGPT-4oがCanvasを使う必要があるかどうかを判断してくれます！

それに、有料ユーザーだけなく全てのユーザーが利用可能になりました！

### 実際に使ってみた！

![Screenshot 2024-12-13 at 19.15.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3778915/298ab95d-488e-24e5-681f-9296f379ddfe.png)

現在のChatGPT画面を開くと、「View Tools」というボタンが現れ、そこから手動で会話の流れでCanvasというツールを使ってほしいと指示できます。

![Screenshot 2024-12-13 at 19.44.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3778915/d620c318-92a8-4153-a035-2c21c27db138.png)

さらに、もし自分が書いた文章かコードをベースとして会話したい場合、チャット枠に貼れば、「Open in canvas」ボタンが現れ、それを押せばCanvasが開かれます。

![Screenshot 2024-12-13 at 19.49.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3778915/9274329b-ebd3-28e1-7031-39f2f9d73ced.png)

そこに入れた時点で、なんとChatGPT内でコードの実行ができます！「Run」を押せばコードが実行されます。（必要なライブラリーもインポートされているようです）

![Screenshot 2024-12-13 at 19.51.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3778915/698b2041-881f-b89e-aa87-125886ae08e2.png)

そこから、チャット枠でメッセージを送れば、それにそってコードを編集してくれます！

![Screenshot 2024-12-13 at 19.56.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3778915/fdf3395d-1be6-6f42-f052-d14481cf1ab3.png)


さらに、「コードレビュー」というボタンを押せば、ChatGPTが自動的にコードを見てコメントをくれます！

![Screenshot 2024-12-13 at 20.00.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3778915/6c593006-de7a-5793-f07d-0dad8589cbc0.png)

それで、ChatGPTがくれたコメントをもとに「Apply」でそのコメントの内容をもとに修正してもらえます！

![Screenshot 2024-12-13 at 20.02.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3778915/e260167f-7959-75d9-fb16-69888acf9ac3.png)

コードレビュー以外にも、デバッグ・バグ修正、多言語への変換（Port）など色々なツールがあります。

![Screenshot 2024-12-13 at 20.03.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3778915/333a2951-80ee-5ac6-0d9b-5769b38ade95.png)
![Screenshot 2024-12-13 at 20.03.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3778915/ae42aee9-63e6-812c-4fc1-e515b6c92b42.png)

### 結論
とても使いやすくて、スピーディーにコードデバッグや修正をしたい時に使えばいいかもしれません。ローカルで動かす前に、ChatGPT内で実行できるのもとても便利だと感じました。
現在はPythonコードしか実行できないようですが、これからはできるようになりそうですね！
AIやロボットによる自律的な価値交換の信頼性確保とNode-RED

### 自律システム時代における価値交換とその実現に向けた技術の役割

AIやロボットが急速に進化し、さまざまな分野で自律的な動作を行うようになる未来では、モノ同士が価値を交換する必要が出てきます。これにより、取引やリソースの交換が人間を介さずに自動で行われ、効率化や即時性が向上することが期待されています。しかし、この自動的な価値の交換が進む中で、いくつかの重要な課題が浮かび上がります。

#### 1. **モノ同士の価値交換の必要性**
自律システムが発展することで、単なる情報のやり取りにとどまらず、実際の「価値」— たとえばエネルギー、リソース、金融取引などがシステム間で交換されるようになります。たとえば、電気自動車が充電ステーションで自動的に電力を購入する、ロボットが部品を製造工場から調達し、その対価を支払うといったシナリオが現実のものとなるでしょう。これにより、人間が介在することなく、リソースやサービスの交換が効率化され、システム全体の運用が最適化されます。

#### 2. **価値の所有者は誰か？**
AIやロボットが取り扱う価値は、最終的には誰の所有物かという問題が発生します。現実には、その価値の移転や取引を決定するのは人間であり、AIやロボットが自律的に価値を扱う場合でも、あらかじめ人間がその範囲や条件を設定する必要があります。価値の移転が無条件に行われるわけではなく、所有者が設定した条件に基づいてのみ実行されるべきなのです。

#### 3. **条件成立の判断と外部データの信頼性**
AIやロボットが価値の移転を自動的に行う場合、その取引が適切な条件の下で行われているかを判断するのは誰の役割でしょうか。ここで外部から提供される「[オラクル](https://en.wikipedia.org/wiki/Blockchain_oracle)」データが重要になります。オラクルは、リアルタイムで条件が満たされたかどうかを検証し、その結果をAIやロボットにフィードバックする役割を果たします。しかし、オラクルが提供するデータの信頼性が欠けていると、誤った判断をAIやロボットが行う可能性があります。このため、外部データの信頼性を確保することが不可欠です。

#### 4. **ブロックチェーン技術の活用**
外部データの信頼性を担保する手段として、ブロックチェーン技術が有効です。ブロックチェーンは、取引やデータの履歴を透明かつ変更不可能な形で記録できるため、取引が正しく行われたかを後から検証する手段として活用できます。また、これらの記録を複数収集して照合することによって、取引の信頼性が向上し、AIやロボットによる価値の移転が正当であることを証明できます。

---

### 自律システムでの価値交換を実現するためのNode-REDとブロックチェーンの役割

自律システムでの価値交換を実現するためには、信頼性の高い外部データ、スムーズなデータフロー、そして正確な取引履歴の記録が必要です。ここでは、Node-REDとブロックチェーン技術がどのようにこれを支えるのか、具体的に解説します。

#### 1. **Node-REDによるデータ統合と管理の簡易化**
Node-REDは、異なるデータソースを簡単に統合し、AIやロボットが必要とする情報をリアルタイムで提供できます。外部からのセンサー情報やオラクルデータを集約し、それをスマートコントラクトや他のシステムに渡すフローを視覚的に簡単に構築可能です。これにより、外部データの正確な取得とその活用がシンプルに管理でき、システム間のデータのやり取りがスムーズになります。

#### 2. **スマートコントラクトのトリガー管理**
Node-REDは、スマートコントラクトが実行される条件を監視し、必要なデータが揃った場合に自動的に取引を実行させる役割を果たします。例えば、センサーが検知した条件に基づき、ロボットが自動で支払いを行うといった取引が実行されるようになります。ブロックチェーンと連携させることで、取引が正しく行われたことを後から検証できる仕組みが構築できます。

#### 3. **オラクルデータの処理と変換**
外部のオラクルから得たデータは、そのままブロックチェーンやAIシステムに適用できる形式ではないことがあります。Node-REDは、このデータを必要な形式に変換し、適切なシステムに送信することができます。また、複数のオラクルデータを照合し、信頼性を高める処理も可能です。これにより、システム間で交換されるデータが常に正確で信頼性のあるものとなります。

#### 4. **自律システム間のデータ連携**
AIやロボット、そしてIoTデバイスが自律的に価値を交換する場合、これらのシステム間のデータフローをスムーズに設計する必要があります。Node-REDのフローエディタは、異なるシステム同士の連携を視覚的に設計できるため、非常に効果的です。例えば、センサーが検知したデータをロボットの行動に反映させ、その結果として価値が交換されるようなシステムを簡単に構築できます。

---

### 結論

AIやロボットが自律的に価値を交換する未来の実現には、信頼性の高い外部データ、スムーズなデータフロー、そして正確な取引履歴の記録が不可欠です。Node-REDは、これらの要素を効率的に統合し、システム間の連携を視覚的に管理できる強力なツールです。また、ブロックチェーン技術と組み合わせることで、取引の透明性や信頼性を確保し、自律システム時代の価値交換を支えるインフラとして機能します。

これらの技術を活用することで、自律システム時代における価値交換はより信頼性高く、効率的に行われるようになり、私たちの生活をより便利で最適化されたものにしていくことでしょう。

--- 

このように、AIやロボットの自律的な価値交換を実現するためには、技術の進化とともに、システムの設計や管理における新しいアプローチが求められます。
別の AWS アカウントの暗号化済み RDS スナップショットから RDS を復元する

# はじまり
訳あって本番環境の RDS をステージング環境にクローンすることになったのですが、本番環境とステージング環境は AWS アカウントが分かれており「スナップショットの共有」が必要でした。

共有を行い、いざ復元をしようとしてみたところ……

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2696283/347a5060-63d5-3126-388e-2b0a964d2402.png)

> クロスアカウントで暗号化済みスナップショットから DB を復元することはできません。

と言われてしまい、怒り狂ってしまいました。


# 手順
https://repost.aws/ja/knowledge-center/share-encrypted-rds-snapshot-kms-key

https://www.youtube.com/watch?v=gFkguN0y_ho

正確にこれの解決策セクションの内容と同じ手順を辿ると復元できます。当時は気付かなかったのですが、操作を説明したビデオもありました。

「これを読んでください！　完」だと悲しいのでもう少し続けます。

## 踏んだ罠
書いてある通りの手順で作業すればよいことではあるので罠でも何でもないのですが踏んだものについてご紹介します。

### 未共有のカスタムキーで暗号化されたスナップショットはコピーできない


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2696283/8be84762-9797-720e-2365-82a06be04276.png)

> コピー元スナップショット KMS キー [ここに ARN] は存在しないか、有効になっていないか、アクセス権限がありません。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2696283/e6359d16-4959-a815-426b-48ae400b6d68.png)

:::note info
KMS でカスタムキーを作るときに「別の AWS アカウント」を設定すると別アカウントでこのキーが利用可能になり、このキーで暗号化されたスナップショットをコピーできるようになります。
:::

ただし、共有先アカウントで KMS キーの一覧にこの共有されたキーが表示されることはありません。（なぜ？）

### 共有済みカスタムキーで暗号化され、共有されたスナップショットから「そのまま」復元することはできない

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2696283/347a5060-63d5-3126-388e-2b0a964d2402.png)
> クロスアカウントで暗号化済みスナップショットから DB を復元することはできません。

冒頭のこのエラーが返ってきます。
ターゲットアカウントからアクセス可能な KMS キーで暗号化されている場合であったとしてもクロスアカウントの暗号化済みスナップショットは復元できないようです。

:::note info
共有されたスナップショットをターゲットアカウントでコピーすると、ターゲットアカウント所有のスナップショットが生成されるので RDS を復元可能になります。
:::

# おわり
コピーしないと復元できない点、コピーすれば復元できる点が何だか直感的でなくイマイチだなあと感じます。
【ISUCON14】ISUCON14のアプリケーションマニュアルをどう読んだか

### 1. はじめに
去る2024年12月8日、ISUCON14に技術者仲間と二人で出場して11,834点でした(チーム名: オニコンブ)
分担は以下のような形です

    - パートナー: Repository運用、技術的検討、インプリ、計測、監視、分析、etc...
    - 私　　　　: 日本語　（インプリゼロ）

途轍もなくヘボい仕事ぶりだったことに恐れおののいて、自身の貢献範囲があったのかの検証および言語化を行うべくこの記事を書きました
そんなもん貢献でも何でもねーはボゲェー　というコメントがありそうで今から怖いです

マジレスしておきますと
「ドキュメントを読め」はよく聞きますが「こう読め」はあんまり聞いたことねぇなあ、と考えており
今回ISUCON14のイケてた点がここならば何かの役に立つかも　と考えた次第です

### 2. 通読手順概要
題材は [ISUCON14 アプリケーションマニュアル](https://github.com/isucon/isucon14/blob/main/docs/ISURIDE.md) です
通読手順の概要を提示します　全6工程、最小4工程です

    (1)２回　通読する
    (2) 用語・定義にフォーカスする
    (3) 期待値・期待する内容にフォーカスする
    (4) 仕様・根源動作にフォーカスする
    (5) [optional] 文章を実地検証する
    (6) [optional] 適宜引用し議論を促進する
    
### 3. (1) ２回　通読する
- 途中のLinkから別文書に飛びたくなりますが、鋼の心でそれを堪えます
- あれ、さっき何て書いてあったっけ？と戻りたくなりますがそれも禁止
- 通読に集中し、尚且つ子細な部分で読み目を止めるのも我慢し、最初から最後まで２回読みます
    - おそらく、２回目はかなり手抜きして読みます、にんげんだもの
- これにより、どこに何のトピックが記されていたかが頭の中に残り、取り組み中に「ん？これは確かアプリケーションマニュアルのどこどこに書いてあったで？」という僥倖発生確率が高まります
### 4. (2) 用語と定義にフォーカスする
- 用語（今回であればライド、マッチング　など）および定義（Status list(MATCHING, ENROUTE, etc...)およびStatus transition など)に焦点を当て、読み下して半分くらいの理解を目指します
- 半分くらいというのは以下のようなレベルを指します
    - 「ライドと言われたら概ねこうなってこうなることだな」
    - 「シミュレーターには３種類あったな」
- スポーツでいえば、ルールを熟知しておくアプローチに近いと考えます
    - 何をどこまでやっていいか(どこからが違法か、NGか)のfoundamentalになります
- これにより、相手の単語からどのことを指しているかが明瞭になり、コミュニケーション効率が高まるはずです
### 5. (3) 期待値・期待する内容にフォーカスする
- アプリは何の期待を満たすために動くのか、その期待する内容や定量的値の落とし込みをします
- 今回でいえば以下のような内容をここで抽出・認識します
    - 「マッチングの成立」
    - 「乗客へのリーチと目的地移動をなるはや達成」
- これにより、改修内容の目的や嵩の張る改修の優先順位、実施決定がやりやすくなります
    - 期待を満たさないのなら、やらないという選択肢が採れるということです
### 6. (4) 仕様・根源動作にフォーカスする
- アプリはどのような設定値に従ってどう動いているかをこのマニュアルから読み取ります
- 今回でいえば以下のような内容をここで抽出・認識します
    - 「マッチング処理間隔が500msに設定されている」
    - 「距離はマンハッタン距離計算」
- 場合により、当日マニュアル側に記載されているベンチマーカーの動作、ベンチマーク内容を確認します
    - ベンチマーク点数がすべてであるから、要はベンチマーカーを顧客と見立てて仕事をすればよい
- 実際はこの段階で、コードリーディングをそこそこ行い、マニュアル上の仕様や定義はCodeのどの部分に当たるのかをある程度特定しています
    - DBテーブル一覧のここに、マニュアルのパラメータが何の名前で書いてある、などなど
- これにより、改修内容のJustificationが容易になるはずです
    - 対象パラメータをいじる価値があるorない
    - 改修後の予想挙動上仕様や動作の向上見込みがあるorない　など
### 7. (5) [optional] 文章を実地検証する
- オプショナルですが、提供されているシミュレータの動きがマニュアルのどこに当たり、本当にそう動いているのか・マニュアル上のこの記述は画面上どう動くのか　の確認と再認識をしました
- 仕様・根源動作時にフォーカスした内容のうち、実装上不明だった点もここでさらに踏み込んで確認しておきます
### 8. (6) [optional] 適宜引用し議論を促進する
- こちらもオプショナルですが、ここまで読み込んでおけば場に出された技術的提案や改修候補に対し、論理面の確からしさのレビューにおいて私見ではなくマニュアルやコードに記載された事実を利用できるはずです

### 9. おわりに
これで自分に実装力ついてくればそこそこ無双じゃん、と思いましたが
それを培うためのスタミナを神龍におねだりしなければならないな、とも思いました

お読みいただいた方のナニカの参考になれば幸甚です、以上になります
CasaOSで始めるおうちクラウド with GUI

## はじめに

我が家では初代Raspberry Piを簡易的NASとして使い、データのバックアップや共有を行っていました。

https://qiita.com/aRyoKuroda/items/f9fcbd41b2c91d96c040

ただ、いつ動かなくなるかわからん（という建前）ということで、ファンレスのシンクライアントPCを入手し後継機としました。ラズパイも今は高いですものね。

https://jp.fujitsu.com/platform/pc/product/futro/1505/s720/

かつ、今回ご紹介する **CasaOS** を導入し、心理的な管理コストの低減を狙っています。

## CasaOS とは？

CasaOSは、ご家庭で簡単にクラウド環境を構築できるソフトウェアです。OSと名はついていますが、Linux上で動作します。

https://casaos.io/

### 基本機能

インストールを行うと自動でサーバが立ち上がり、ブラウザから管理画面にアクセス可能となります。この管理画面ではアプリの導入や管理、メモリ使用率などの状態の確認などができ、またSSHターミナルやUSB HDDのマウント、簡易的なファイラー機能も搭載しているため、大体の管理はここでできてしまいます。

### NAS...だけではない

アプリ（ソフトウェア）は管理画面内のApp Storeから導入します。個人的に面白いと感じたのは、アプリはDocker形式で提供・導入される点です。App Storeからではなく直接Dockerイメージを導入する場合もGUIで設定ができるため、導入時のハードルや管理がとてもしやすくなっています。

App Storeでは、NAS用途のみならず、VPN、データベース、LLMなどのアプリも提供されていました。個人的にはLLMも興味があったのですが、シンクライアントPCでは流石に動かすのは難しかったようです。

## 実際に使用してみた

### Syncthing & Resilio Sync

ファイル同期＆共有。スマホやPCのデータを同期するために使用しています。

https://qiita.com/aRyoKuroda/items/2db71fe2d5677a2b543d

### Nextcloud

DropboxやGoogle Driveのようなオンラインストレージを構築できる。拡張性が非常に高い。

https://nextcloud.com/

### Jellyfin

音楽・動画・電子書籍などのメディアサーバ。

https://jellyfin.org/

### Memos

Twitterライクなメモアプリ。自分はObsidianに手を出してやらなくなってしまったクチなのですが、これなら続けられるかも？

https://www.usememos.com/

## 未来へ

クラウドで何でも済んでしまう時代ですが、あえて自分の手の届く範囲で環境を構築してみるのにも意義があると思います。ただこの手のものは、最初は頑張ってあれこれ導入してみるのですが、その後の管理がおざなりになったり、面倒になってしまうことが多いです(n=1)。今回はCasaOSを使ってその心理コストを下げるほか、新しい分野にも手を出しやすくなったという利点も感じることができました。
Optional型の目的とラップ/アンラップ

## Optional型とは
Optionalは、値が存在するかどうかを表す型。Swiftでは、安全性を担保するために、原則```nil```を許容しない。例外として、```nil```を許容する場合、Optional型を使う。

## 目的
安全性の向上。
「値が存在しない状態（```nil```)を明示的に扱える。そうすると、```nil```に関連するエラーがコンパイル時に検知できる。
コンパイル時にエラー検知することで、実行時エラー（例えば、値があると思ったが、実際はnilだった）を回避できる。

## 使い方
### ラップ
#### 値がない場合: nil
```swift
let noValue: Int? = nil
```

#### 値がある場合: .someまたは簡略表記
```swift
let someValue: Int? = .some(42)
let shorthandValue: Int? = 42
```

### アンラップ
### 1. 強制
```swift
let value: Int? = 42
print(value!) // 42
```
:::note info
補足
強制アンラップの多用には注意が必要。Swiftはプログラムのバグをコンパイル時に検出することで安全性を高める設計思想をもつ言語。そのため、強制アンラップの多用はその思想に反してエラー検知を実行時まで先延ばしにすることを意味する。
:::
### 2. オプショナルバインディング
#### ①if let 
```swift
let optionalValue: Int? = 42

print(type(of: optionalValue)) // Optional<Int>

if let unwrapped = optionalValue {
    print(type(of: unwrapped)) // Int
    print("アンラップされた値: \(unwrapped)")
} else {
    print("値は存在しません")
}
```
#### ②guard let
```swift
func printValue(_ value: Int?) {
    guard let unwrappedValue = value else {
        print("値は存在しません")
        return
    }
    print("値は存在します: \(unwrappedValue)")
}

let optionalValue: Int? = 42
printValue(optionalValue) // 値は存在します: 42

let nilValue: Int? = nil
printValue(nilValue) // 値は存在しません

```
### 3. デフォルト値を設定
```swift
let result = someValue ?? 0
```
### 4. オプショナルチェーン
下記のサンプルで、```user.address```に値が存在する場合、```city```にアクセス。一方、```user.address```が```nil```の場合、チェーンを中断し、```?.city```は実行されず、```nil```を返す。```nil```を返してもクラッシュしない理由は、オプショナルチェーンの仕様。
```swift
struct User {
    var name: String
    var address: Address?
}

struct Address {
    var city: String
    var postalCode: String
}

var user = User(name: "John", address: nil)
var cityName = user.address?.city //?.cityは実行されず、チェーンを中断。
print(cityName) // nil(クラッシュしない)

user.address = Address(city: "New York", postalCode: "10001")
cityName = user.address?.city 
print(cityName)// Optional("New York")
```

## 補足
```nil```、```Optional()```は、
下記Swiftの標準ライブラリに下記のEnum型が定義されているから使える。
```swift
enum Optional<Wrapped> {
    case none // nil
    case some // 値が存在する
}
```

 
```swift
let none = Optional<Int>.none 
print("none: \(String(describing: none))") //none: nil

let some = Optional<Int>.some(1)
print("some: \(String(describing: some))") //some: Optional(1)
```

参考：石川 洋資; 西山 勇世. ［増補改訂第3版］Swift実践入門 ── 直感的な文法と安全性を兼ね備えた言語 WEB+DB PRESS plus (p.123). 株式会社技術評論社. Kindle 版.  https://amzn.asia/d/i8oLYYp
窓際が挑むテスト並列化〜MySQLのデータベースは無限列車編〜

こんにちは！がちむちです。
最近昔の知り合いに「成長が留まるところを知らないな」と言われました。

もちろん体重の話で、技術力は全く変わってない窓際ムチムチエンジニアです。
皆さんは2024年いかがでしたか？

今年はありがたいことに、会社の福利厚生でGoogle Cloud Next '24に参加させていただきました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139761/5c8d381f-1ecb-c0a9-d874-9fb3287ba6c5.png)

ラスベガスで開催されたのですが、オーシャンズ11という映画でジョージ・クルーニーさんに痺れた私には、憧れの地に行くことができて本当に嬉しかったです。

帰りの飛行機では、いつかカジノディーラーに ~~巻き上げられた~~ 預けたチップを取り返しに行くと一筋の涙を流しました。

Recapイベントや開発合宿を行ったりとそこそこ ~~遊んだ~~ 外部発信やチームビルディングなど様々な活動を行えた2024年でした。

来年も張り切っていきたいです。

以下が今年の成果になります。
# 課題
あるAPIのシステムでシナリオテストが遅すぎてCI/CDで時間がかかってしまっていました。(1回のテストで10〜15分)
各テストは直列で動いていたのですが、並列で動かすとデータベースのデータがケースごとに影響してしまい、並列で動かすのは、難しい状態でした。

# 対応 データベースをケースごとに作る
MySQLはデータベースを無制限に作ることができるため、テストケースごとにデータベースを作成するようにしました。
> MySQL has no limit on the number of databases. The underlying file system may have a limit on the number of directories.

https://dev.mysql.com/doc/refman/8.4/en/database-count-limit.html

簡単な疑似コードは以下になります。
```test_sample.go
func newTestDB(name string) {
    db, _ := gorm.Open(mysql.Open("DB_DSN"))
	db.Exec("DROP DATABASE IF EXISTS " + name)
	db.Exec("CREATE DATABASE " + name)
	db.Exec("USE " + name)
	_ = filepath.Walk("DDLファイルのディレクトリのパス", func(path string, info os.FileInfo, err error) error {
		if !strings.HasSuffix(path, ".sql") {
			return nil
		}
		b, _ := os.ReadFile(path)
		db.Exec(string(b))
		return nil
	})
}

func setupTestServer(dbName string) {
    // APIサーバーのテストなので、サーバーを起動するときに、dbNameにつなぐようにする
    // 環境変数で接続するデータベースを設定できるようにしておき
    // 環境変数読み込んだ構造体の該当の変数をdbNameで上書きしてからサーバーを起動する
}

func TestXxxxx(t *testing.T) {
    t.Parallel()
    newTestDB("TestXxxxx")
    setupTestServer("TestXxxxx")

    // 実際のテスト
}

func TestYyyyy(t *testing.T) {
    t.Parallel()
    newTestDB("TestYyyyy")
    setupTestServer("TestYyyyy")

    // 実際のテスト
}
```
これによって10〜15分かかっていたテストが4〜6分になりました。
また、テストケースが増えれば時間が増えていましたが、並列実行できるようにしたので、ケースが増えても全体の時間はあまり伸びないようにすることができました。

# 没対応策 in-memoryデータベースを使う
最初対応として[go-mysql-server](https://github.com/dolthub/go-mysql-server)を使ってケースごとにデータベースを立ち上げてDDLを流して他のテストケースのデータが影響しないようにしました。

実際に修正をしてみるといくつかはうまく動いたのですが、関数のいくつかにMySQLと動きが違うケースあり全部はうまく動かなかったです。

PRやパッチを当てて回避しようと思いましたが、結合テストやe2eなどのテストで実環境と違う状態でテストするのは、こういった問題が今後も出てくると感じられたのでこの方法は断念しました。

※単体テストなどで利用するなどは、mockやこういったin-memoryサーバーを利用するのは、全然いい方法だと思います。

# 最後に
今回はDDLを同じレポジトリで管理していたため、新しくデータベース作ってDDLを流したらケース事に影響がない状況を作れるのではないかと思い実現できました。

MySQLに複数のデータベースをあまり作ったことはなかったのと、上限があると勝手に思っていたのですが、まさか無制限で作れる(リソースの上限による)とは知らなかったです。

今回はGoでしたが、他の言語でも同様の実装ができると思っています。

同様の課題を持っている方の参考になれば幸いです！
生成AIでスロークエリの原因を見つけて対処する方法

こんばんは、イオンネクストで主にデータ基盤やBIツール等の担当をしています神戸です。

データ環境を手軽に使えるようになって、エンジニアではないユーザ層も自分でデータ分析を行って業務に生かすことが日常の風景になってきました。

様々なSQLが作られると、関数が正しく使われていない等のクエリが実行されてデータベースの負荷が上がる等、データや基盤を保守する担当者の頭を悩ませる問題が出て来ます。
今回は、クエリ実行が終わらない、データベースの負荷が上がる原因になるスロークエリへの対処を、生成AIを使って原因を分析して対処する方法を紹介します。

この記事では、Azure SQL等マイクロソフト製のデータベースをデータ分析基盤として使っているケースを扱いますが、MySQLのexplain等、実行計画を取得できる環境であれば参考に出来ると思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3953066/e27b3ce1-e827-ed95-11b6-885eb6ac4868.png)

１．SQL Server Management Studioを起動して、実行計画を表示できる権限を実行アカウントに設定します。
２．分析したいクエリを記述し、赤枠をクリックすると実行計画の結果が画面下段に表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3953066/d7ca4996-081a-50b5-816f-b80eb7c2cf40.png)

３．実行結果は、Clustered Index Scanの結果が99％になっていて、ここに問題がありそうだと推定できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3953066/7948b3a9-3f41-ea23-634a-4f66e1c5015d.png)

４．実行結果を生成AIで分析するために、実行結果をXMLで取得します。実行結果を右クリックして表示されるメニューから、"Show Execution Plan XML"をクリックすると実行結果がXMLで表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3953066/e64b0685-76bc-2a40-dfa2-b695ea328c6b.png)
５．表示されたXMLをすべてコピーし、テキストに保存します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3953066/92ce4365-2e96-78a4-ef3a-005fa30b3334.png)

６．生成AIのサービス（ここではCopilot）を開いて、保存したテキストを添付し、図のようなプロンプトを書いてみます。役割を明示し、行って欲しいことを明確にして下さい。狙い通りの結果にならない場合は、クエリスコアを出してほしい、インデックスを補完するクエリを作成して欲しい等、要件を少しずつ掘り下げていきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3953066/a3143cca-7b7b-98dd-61b6-4ed38ecdfb7d.png)

７．プロンプトの内容により、図のような結果が表示されます。クエリコストが4237.65で、統計情報とクエリ自体には問題なく、クエリコストの大半をインデックスの問題が占めていると分かるので、生成AIの指示に従ってデータベースにインデックスの追加を行います。インデックスの追加を行う前に、生成されたクエリが正しいことを検証します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3953066/00cdd93a-ba5b-d7ab-8669-7691d5bd5962.png)

８．SQL Server Management Studioを起動して、生成されたクエリを実行します。下記のような結果が返ったら問題なく実行されています。

Commands completed successfully.
Completion time: 2024-12-04T17:45:45.5892748+09:00

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3953066/fa7c9fe6-9229-e109-c562-dedb4926a706.png)

９．２の手順を行って、インデックス追加後の実行結果を表示させます。実行結果を見ると、Index Seek（NonClustered）と表示され、効果的にインデックスを使用されたことがわかります。通常実行で30分でも処理が終わらないクエリの実行が数秒で終わり明確に効果を体感できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3953066/31b2775a-3642-64c8-ce0a-dcc0d8ec4a50.png)

１０。４～６の手順を実行し、９の結果をテキスト保存したXMLを生成AIに分析させてみます。結果を見るとクエリコストが4237.65から0.00336に激減し、クエリパフォーマンスを改善したことがわかります。
　今回はインデックスの追加を行いましたが、同じ手法で、結合条件や関数の使い方、フィルタ条件で性能の問題が出ている箇所を見つけることが出来、クエリの修正でもスロークエリの改善を行うことが出来ます。

　今回はスロークエリの原因を見つけるための実行計画の解析を生成AIに代行させて、スロークエリを素早く楽に改善する方法を紹介しました。
【競技プログラミング】AtCoder Beginner Contest 146_C問題

# 問題
https://atcoder.jp/contests/abc146/tasks/abc146_c

## 要約

1. 高橋くんは整数屋さんで整数を1つ買おうとしている。

2. 整数屋さんでは、1以上10^9以下の整数が売られている。

3. 整数Nを買うためには、A × N + B × d(N) 円が必要。
   ここで、d(N)はNの十進表記での桁数。

4. 高橋くんの所持金はX円。

5. 高橋くんが買うことのできる最も大きい整数を求める。

6. 買うことのできる整数が1つもない場合は0を出力する。

変数情報：
- N: 購入する整数（1 ≤ N ≤ 10^9）
- A: 整数の価格を計算するための係数
- B: 整数の桁数に関連する価格係数
- X: 高橋くんの所持金
- d(N): Nの十進表記での桁数


# 既存投稿一覧ページへのリンク
[一覧ページ](https://qiita.com/o_chan_t/items/fc759695acfaef8df2cc)



# アプローチ

二分探索を用いて、高橋くんが購入可能な最大の整数を見つける。


# 解法手順

1. 入力値A, B, Xを受け取る。

2. 整数Nの価格を計算する関数functionを定義する。この関数は、A × N + B × d(N)を計算して返す。

3. 最小の整数1でも購入できない場合（X < function(1)）、0を出力して終了する。

4. 二分探索の初期範囲を設定する。左端（left）を1、右端（right）を10^20とする。

5. 二分探索を行う：
   a. 中間値（middle）を計算する。
   b. function(middle)がX以下なら、leftをmiddleに更新する。
   c. そうでなければ、rightをmiddleに更新する。
   d. left + 1 < rightの間、この過程を繰り返す。

6. 最終的なleftが10^9を超える場合、leftを10^9に設定する（問題の制約による）。

7. 得られたleftを出力する。これが購入可能な最大の整数となる。


# ACコード
```python:ac.py
def io_func():
    # 入力値A, B, Xを受け取る
    return map(int, input().split())

def function(n, A, B):
    # 整数Nの価格を計算する関数
    N_str = str(n)  # 整数nを文字列に変換
    d = len(N_str)  # 桁数を取得
    return A * n + B * d  # 価格を計算して返す

def solve(A, B, X):
    # 最小の整数1でも購入できない場合、0を出力して終了
    if X < function(1, A, B):
        return 0

    # 二分探索の初期範囲を設定
    left = 1
    right = 10**20

    # 二分探索を行う
    while left + 1 < right:
        middle = (left + right) // 2  # 中間値を計算
        
        if function(middle, A, B) <= X:
            left = middle  # leftをmiddleに更新
        else:
            right = middle  # rightをmiddleに更新

    # 最終的なleftが10^9を超える場合、10^9に設定
    if 10**9 < left:
        left = 10**9

    return left  # 購入可能な最大の整数を返す

if __name__=="__main__":
    # メイン処理
    A, B, X = io_func()  # 入力を受け取る
    result = solve(A, B, X)  # 解を求める
    print(result)  # 結果を出力

###
# A: 整数の値段の係数
# B: 整数の桁数の係数
# X: 高橋くんの所持金
# left: 二分探索の左端
# right: 二分探索の右端
# middle: 二分探索の中間値
# result: 購入可能な最大の整数

# 1. io_func関数: 標準入力から値を受け取る
# 2. function関数: 整数Nの価格を計算する
# 3. solve関数: 二分探索を用いて購入可能な最大の整数を求める
#    - 最小の整数1でも購入できない場合の処理
#    - 二分探索の初期範囲の設定
#    - 二分探索のループ処理
#    - 結果が10^9を超える場合の調整
# 4. メイン処理: 入力を受け取り、solve関数を呼び出し、結果を出力する
```



# 思考過程

問題の性質上、購入可能な整数には単調性があり（より小さい整数が購入可能なら、それ以下の整数も購入可能）、これが二分探索の適用を可能にしている。


# 計算量の概算

二分探索の計算量はO(log N)。


# その他周辺知識

## 価格計算

```python
return A * n + B * d
```

## 条件分岐

```python
if X < function(1, A, B):
    return 0
```

この部分は、最小の整数1でも購入できない場合を確認する。
`function(1, A, B)`で1の価格を計算し、それが所持金`X`より大きければ0を返す。

## 二分探索の初期設定

```python
left = 1
right = 10**20
```

二分探索の初期範囲を設定する。
`left`は1から、`right`は非常に大きな数（10の20乗）

## 二分探索のループ

```python
while left + 1 < right:
    middle = (left + right) // 2
```

`left + 1 < right`の間ループを続ける。
`middle`は`left`と`right`の中間値。

## 二分探索の条件分岐

```python
if function(middle, A, B) <= X:
    left = middle
else:
    right = middle
```

`middle`の価格が所持金以下なら`left`を更新し、そうでなければ`right`を更新する。
AIやロボットの社会実装と自律的な価値交換のためのNode-RED

## AIやロボットの社会実装と自律的な価値交換とは？
AIの台頭と機械やロボットとの融合によって、モノ同士が自律的に価値の交換を行う必要があります。理由は、以下のような点が挙げられます。

### 1. **効率性と即時対応の向上**  

自律システム同士がリアルタイムでやり取りを行うことにより、人間を介さずに最適なリソースの分配やサービスの提供が可能となります。例えば、自律走行車が燃料や充電ステーションで自動的にエネルギーを補充し、その対価を直接システム間で支払うような場面が考えられます。これにより、システム全体の運用効率が向上します。

### 2. **サプライチェーンの自律化**  

モノ同士が価値を交換することで、サプライチェーン全体が自律的に最適化されます。例えば、自律ドローンが商品を輸送する際、配送の途中で必要なリソースや情報を他のシステムと交換し、スムーズに最終目的地へ到達できるようにします。

### 3. **分散型エコシステムの確立**  

AIやロボットが関わる未来社会では、中央集権的なシステムではなく、分散型のネットワークが主流になる可能性があります。モノ同士が直接価値を交換できることで、中央の管理者が不要になり、より柔軟かつスケーラブルな経済システムが形成されます。これにより、障害や一部のシステムのダウンが全体に影響を与えにくくなります。

### 4. **マイクロエコノミーの拡大**  

モノやサービスの細分化によって、小さな単位での価値交換が可能となります。自律的な価値交換が実現することで、AIやロボットが微細な取引を行い、効率的に資源やサービスを共有できます。例えば、スマートシティにおけるエネルギー管理では、各家庭のデバイス同士がエネルギーを取引し、需要と供給をバランスよく調整します。

### 5. **自己維持的な経済モデル**  

モノ同士が価値を交換することで、AIやロボットが自己維持的な経済モデルを構築できるようになります。これは、自律型エージェントや機械が自身の維持に必要なリソースを得て、自らの運用コストをカバーできるようにするためです。これにより、AIやロボットは人間の介入なしに動作を続けられます。

このように、自律的に価値を交換することで、システム全体の効率性や持続可能性が高まり、未来の社会でのAIや機械、ロボットの役割がより大きくなっていくと考えられます。

## ブロックチェーンとNode-REDの重要性

AIや自律的なモノ同士が価値を交換する未来社会の実現において、ブロックチェーンとNode-REDが重要な役割を果たします。理由は以下の通りです。

### 1. **ブロックチェーンの重要性**
ブロックチェーンは、**分散型システム**や**信頼性の高いトランザクション**を実現するために非常に重要です。モノ同士が価値を交換する場合、それぞれの取引を信頼できる形で管理・記録する必要があり、ブロックチェーンはその役割を果たします。

#### **信頼性と透明性**
ブロックチェーンは分散型台帳技術に基づいており、取引やデータが全て公開され、改ざんが非常に困難です。これにより、AIや自律システム同士が行う取引の信頼性が保証されます。例えば、自律ドローンがエネルギー補充の際に支払う取引や、スマートデバイスがリソースをシェアする取引などが透明かつ安全に処理されます。

#### **スマートコントラクトによる自動化**
ブロックチェーンの上で動作するスマートコントラクトは、条件が満たされると自動的にトランザクションを実行するプログラムです。これにより、モノ同士の自律的な取引を効率的かつ信頼性高く実現できます。例えば、エネルギー取引や物品配送の支払いがスマートコントラクトによって自動的に処理されることで、人間の介入なしにシステムが円滑に動作します。

#### **価値のデジタル化とマイクロペイメント**
ブロックチェーンはデジタル通貨やトークン化された資産の交換を可能にします。これにより、モノやリソースの価値を細かくデジタル化し、AIや自律システム間でのマイクロペイメントが実現されます。自律車が少量の電力を受け取ったり、ドローンがピンポイントで部品を購入するような小さな取引でも、ブロックチェーン上で正確に行えます。

### 2. **Node-REDの重要性**
Node-REDは、**ローコード**でのワークフロー自動化やシステム間の連携を強力にサポートするツールです。ブロックチェーンや自律システム同士の統合において、Node-REDは効率的な開発と運用を実現します。

#### **データフローの容易な設計**
Node-REDは、様々なデバイスやシステム、APIをノードとして扱い、これらを簡単に接続できるため、自律システムやAI、IoTデバイス間のデータフローを視覚的に構築できます。自律的なモノ同士がやり取りするデータをスムーズに管理・統合し、シームレスな運用を支える役割を果たします。

#### **他システムとの簡単な統合**
ブロックチェーンを含むさまざまな技術と簡単に統合できる点もNode-REDの強みです。ブロックチェーンネットワークへのアクセスやスマートコントラクトのトリガー、AIシステムとの連携などをNode-REDを介して容易に実現できます。これにより、異なる技術スタック間での調整を効率的に行い、開発コストを抑えつつ、高度な自律システムを構築できます。

#### **リアルタイムのデータ処理**
自律システム同士の取引や価値交換には、リアルタイムのデータ処理が重要です。Node-REDは、リアルタイムでのデータ処理やイベント駆動型の動作を得意とするため、これらのモノ同士が状況に応じた動作を自動的に実行できるようになります。例えば、センサーからのデータをリアルタイムで受け取り、それに基づいて価値交換のトランザクションを実行するシステムの構築が可能です。

### まとめ
**ブロックチェーン**はモノ同士の価値交換の信頼性と自動化を担い、**Node-RED**はその上で動作するシステムの統合とワークフローの簡便な設計・実行を支えるツールです。これら二つの技術を組み合わせることで、自律的な取引・価値交換を実現する効率的かつ信頼性の高い社会が構築できると考えられます。
Zabbixのインターフェースタイプの違い

今までZabbixのホスト作成時に
無心でインターフェースタイプを「エージェント」にしていたのですが、ふと他のタイプとの違いが気になったのでまとめてみました。

少しでも参考になれば幸いです。

## そもそもZabbixにおけるインターフェースとは
Zabbixでは、様々な方法で監視対象のホストから情報を収集することができます。
その際、インターフェースと呼ばれるものが利用されます。
インターフェースは、Zabbixと監視対象の間の通信方法を定義するもので、それぞれのインターフェースには特徴と得意な監視対象があります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3935946/712449a7-2c0a-155d-ee09-1d2367e79c1c.png)



## タイプの違い
### エージェント
**概要**
Zabbixエージェントがインストールされたホストを監視する際に使用されます。
エージェントは、Zabbixサーバーからの要求に応じて、CPU使用率、メモリ使用率、ディスク使用率など、さまざまな情報を収集できます。

**特徴**
柔軟性が高く、非常に多くのアイテムを監視でき、カスタマイズ性も高いです。
OSレベルの情報を詳細に取得することができ、スクリプトの実行や、外部コマンドの実行も可能です。

**使用例:** サーバー、ワークステーション、仮想マシンなどの一般的なホストの監視
| インターフェース | 特徴 | 使用例 |
|:--------:|:------------|:------------:|
| エージェント| Zabbixエージェントがインストールされたホストを監視する際に使用される | サーバー、ワークステーション |
### SNMP
**概要**
Simple Network Management Protocolの略で、ネットワーク機器の監視に広く利用されるプロトコルです。SNMPエージェントが搭載されたネットワーク機器を監視する際に使用されます。

**特徴**
多くのネットワーク機器がSNMPに対応しており、標準的な方法で監視できます。
比較的シンプルなプロトコルで、設定も容易です。

**使用例:** ルーター、スイッチ、ネットワークプリンターなどのネットワーク機器の監視
| インターフェース | 特徴 | 使用例 |
|:--------:|:------------|:------------:|
| SNMP     | ネットワーク機器の監視に広く利用されるプロトコルで、SNMPエージェントが搭載されたネットワーク機器を監視する際に使用される| ネットワーク機器|

### JMX
**概要**
Java Management Extensionsの略で、Javaアプリケーションを監視する際に使用されます。
Javaアプリケーションに組み込まれたJMXエージェントを通じて、アプリケーションのパフォーマンスや状態を監視します。

**特徴**
Javaアプリケーションに特化: Javaアプリケーションの内部情報を詳細に取得できます。
複雑な監視: アプリケーション固有の指標を監視できます。

**使用例:** Javaで開発されたWebアプリケーション、ミドルウェアなどの監視
| インターフェース | 特徴 | 使用例 |
|:--------:|:------------|:------------:|
| JMX | Javaアプリに組み込まれたJMXエージェントを通じてJava アプリケーションのパフォーマンスや状態を監視する        | Java アプリケーション         |

### IPMI
**概要**
Intelligent Platform Management Interfaceの略で、サーバのハードウェア情報を監視する際に使用されます。IPMIインターフェースを搭載したサーバの温度、電圧、ファン速度などを監視できます。

**特徴**
ハードウェア監視: サーバのハードウェアの状態を詳細に監視できます。
リモート管理: サーバの電源のオンオフやリセットなどの操作も可能です。

**使用例:** サーバのハードウェア障害の早期検出、リモート管理
| インターフェース | 特徴 | 使用例 |
|:--------:|:------------|:------------:|
| IPMI| サーバのハードウェア情報を監視する際に使用される。IPMIインターフェースを搭載したサーバの温度、電圧、ファン速度などを監視できる。| サーバー |

## まとめ表
| インターフェース | 特徴 | 使用例 |
|:--------:|:------------|:------------:|
| エージェント| Zabbixエージェントがインストールされたホストを監視する際に使用される | サーバー、ワークステーション |
| SNMP     | ネットワーク機器の監視に広く利用されるプロトコルで、SNMPエージェントが搭載されたネットワーク機器を監視する際に使用される| ネットワーク機器|
| JMX | Javaアプリに組み込まれたJMXエージェントを通じてJava アプリケーションのパフォーマンスや状態を監視する        | Java アプリケーション         |
| IPMI| サーバのハードウェア情報を監視する際に使用される。IPMIインターフェースを搭載したサーバの温度、電圧、ファン速度などを監視できる。| サーバー |

思ったよりいっぱいあるんですね( ﾟДﾟ)