OmniAICreator/Qiita-1.07M huggingface dataset:
【ネットワーク】socketライブラリを使用したデータの送受信

# はじめに
こんにちは。アメリカで独学でエンジニアを目指している者です。
現在インターネットについて勉強していますが、そこで出てきたsocketライブラリを使用したデータの送受信についての記述があったので忘れないように記述しようと思いました

コンピュータ間の通信を実現するうえで、socketライブラリは非常に基本的かつ重要な役割を果たします。たとえば、WebブラウザでWebSocket APIなどを利用する場合でも、裏側ではソケットを使った通信の仕組みが動作しています。

ここでは、socketライブラリを利用する際の一連の手順（ソケットの生成、接続、データの送受信、切断）について、基本的な概念とともに詳しく説明します。

---

### ソケットの作成とファイルディスクリプタ

#### ソケット生成の基本

まず、通信に利用するソケットを作成するために、`socket()` システムコール（または対応するライブラリ関数）を呼び出します。この呼び出しは、指定した通信プロトコル（例：TCP/IP）に基づく新しいソケットを生成し、操作用のファイルディスクリプタ（整数値）を返します。

- **重要なポイント**: この返り値は接続先（リモート側）を表すものではなく、あくまで自分のプロセス内でソケットを参照・操作するためのハンドルです。

#### ファイルディスクリプタの役割

ファイルディスクリプタは、UNIX系OSで入出力操作に利用される識別子です。ソケットに対して行う読み書き（`read()`, `write()`, `send()`, `recv()` など）は、このファイルディスクリプタを通じて実行されます。どの接続に対する操作かを意識せず、同一プロセス内で一貫して管理できるようになる点が特徴です。

なお、UNIX系OSでは `socket()` を呼び出すとカーネル内部にソケットの情報（通信プロトコルやバッファ状態など）を格納するテーブルエントリが作成されます。返されるファイルディスクリプタは、このテーブルエントリを参照するためのインデックスとして機能します。したがって、`read()` や `write()` といったシステムコールでファイルディスクリプタを引数に指定すると、OSは内部テーブルを参照して「どのソケット」に対するI/Oかを判断できる仕組みです。

---

### 接続の確立とソケットの関連付け

#### `connect()` 関数の役割

クライアント側は、生成したソケットのファイルディスクリプタを用いて、`connect()` 関数を呼び出し、リモートのサーバー（IPアドレスやホスト名）およびポート番号を指定して接続を試みます。接続が確立されると、**同じファイルディスクリプタ**でリモートとの通信路が確立され、データ送受信に使用できるようになります。

- **補足**: `connect()` は内部的にソケットへリモート接続先の情報を紐付ける処理を行います。つまり、`socket()` の返り値そのものはリモートの識別子ではなく、あくまでローカル側の操作対象である点に注意してください。

---

### データの送受信

#### 送信処理

接続確立後のデータ送信には、主に `send()` 関数（あるいは `write()`）を使用します。

- **`send()` の特徴**
  - 引数として送信するデータのバッファ、サイズ、オプション（例：ブロッキング／ノンブロッキング指定）などを受け取る。
  - 一度の呼び出しで送信可能なデータ量が不足する場合、戻り値として送信済みのバイト数が返るため、必要に応じて再送処理を行う必要がある。

#### 受信処理

リモートからのデータ受信には、`recv()` 関数（あるいは `read()`）を利用します。

- **`recv()` の特徴**
  - 引数として受信用のバッファおよび受信可能なサイズを指定する。
  - 接続が切断された場合やエラーが発生した場合、エラーコードや 0 が返されるため、適切なエラーハンドリングが必要となる。

---

### 切断処理


通信が完了したら、`close()` 関数を呼び出してソケットを閉じます。これにより使用していたリソースが解放され、ネットワーク上の接続も終了します。

- **注意点**: TCP などの場合は、正常な切断（`FIN/ACK` シーケンスなど）を介して相手側にも接続終了が通知されます。

---

### まとめ

socketライブラリを用いたデータの送受信は、以下のステップで行われます。

1. **ソケット生成**:
   `socket()` によってローカルに新たなソケットが作成され、対応するファイルディスクリプタが返される。

2. **接続の確立**:
   `connect()` を使い、リモートのサーバー（IPアドレスやポート番号）を指定して接続を確立する。

3. **データの送受信**:
   - `send()`（または `write()`）を用いてデータを送信
   - `recv()`（または `read()`）を用いてデータを受信

4. **切断**:
   通信が完了したら `close()` でソケットを閉じ、接続を終了する。
AWSのアクセス制御ポリシーの読み方

# はじめに

こんにちは、開発部の一筒です！

AWS IAMポリシーやバケットポリシーは、AWSの認証とアクセス管理を行う重要な設定です。
ポリシーを正しく理解しないと、適切な権限設定ができず、セキュリティリスクが生じる可能性があります。
本記事では、IAMポリシーを含むAWSのアクセス制御ポリシーの基本的な読み方について解説します。


# ポリシーとは？

AWSのアクセス制御ポリシーは、AWSリソースへのアクセスを制御するためのJSON形式のドキュメントです。
IAMポリシー、S3バケットポリシーなどの種類があり、それぞれ異なるリソースに対して適用されます。

公式に詳しく紹介されています

https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/access_policies.html




ポリシーの主な構成要素は次のとおりです。


| 要素 | 説明 | 
|:-----------|:------------:|
| Effect     | Allow（許可）または Deny（拒否）を指定          |
| Action     | 許可または拒否するAWSの操作（例: s3:PutObject）|
| Resource   | 操作を適用するAWSリソース（例: arn:aws:s3:::my-bucket/*）| 
| Condition  | 条件付きで権限を適用する場合に使用| 



詳しいアクションや条件はサービスによって違います
詳細は公式をご確認ください

https://docs.aws.amazon.com/ja_jp/service-authorization/latest/reference/reference_policies_actions-resources-contextkeys.html



# ポリシーの構造を読む
```
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "s3:PutObject",
      "Resource": "arn:aws:s3:::my-bucket/*",
      "Condition": {
        "StringEquals": {
          "aws:SourceIp": "192.168.1.1"
        }
      }
    }
  ]
}
```
* Effect が Allow なので、許可するルール
* Action で s3:PutObject（S3バケットへのオブジェクトアップロード）を許可
* Resource で my-bucket 内のすべてのオブジェクト（/*）を対象とする
* Condition で特定のIPアドレス (192.168.1.1) からのアクセスのみ許可


#### ポリシーの評価順序
1. 明示的な拒否 (Deny) が最優先
2. 明示的な許可 (Allow)
3. 暗黙的な拒否（デフォルトではすべての操作が拒否される）


#### ポリシーの競合時の動作

以下のようなAllowとDenyが一緒に入ってるポリシーの場合：
```
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Deny",
      "Action": "s3:DeleteObject",
      "Resource": "arn:aws:s3:::example-bucket/*"
    },
    {
      "Effect": "Allow",
      "Action": "s3:*",
      "Resource": "arn:aws:s3:::example-bucket/*"
    }
  ]
}
```
どのように動作するか？
* s3:* によって example-bucket のすべての操作が許可されるが…
* s3:DeleteObject については Deny されているので、削除はできない。
→ 明示的な Deny が優先されるため、削除操作は不可！
# 試験対策: ポリシーの問題例

Q. 次のポリシーをアタッチされたIAMユーザーが実行できる操作はどれか？
```
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": ["ec2:StartInstances", "ec2:StopInstances"],
      "Resource": "*"
    }
  ]
}
```
選択肢:
1. EC2インスタンスの作成 (ec2:RunInstances)
2. EC2インスタンスの開始 (ec2:StartInstances)
3. EC2インスタンスの削除 (ec2:TerminateInstances)
4. S3バケットの作成 (s3:CreateBucket)

解答:
◯ 2. EC2インスタンスの開始 (ec2:StartInstances) が正解。
◯ 3. EC2インスタンスの停止 (ec2:StopInstances) も許可されている。
×  1, 4 は許可されていないため不可。


# まとめ

* Effect の Allow / Deny の評価順序を把握する
* Action、Resource、Condition を適切に設定する
* AWS試験では、ポリシーの評価順序や動作を問う問題が多いため、試験対策を意識して学習する


アクセス制御ポリシーはセキュリティの根幹となる部分なので、試験だけでなく実務でもしっかり理解しておきましょう！


簡単ですがAWSのアクセス制御ポリシーについてご紹介させていただきました。 
少しでもご参考になれば幸いです:fish_cake:


はつかぜ株式会社では、IT学習や業務に役立つ情報を定期的にお届けしていきたいと思っています。
システム開発のお問い合わせ・ご相談はこちら 

https://www.hatsukaze.co.jp/inquire/
Teensy <-> ESP32間のMIDI通信

ESP32でBLE-MIDIを使い、Teensyに丸投げ、丸受けすることでTeensyをBLE-MIDIデバイスのように扱う。双方のデバイスでSerialをMIDIとして使えるように設定 (MIDI.begin()) した後で通信速度を上げている。

ESP32側
```cpp
BLEMIDI_CREATE_INSTANCE("TWV2000M", MIDI);
MIDI_CREATE_INSTANCE(HardwareSerial, Serial2, midiB);

void setup()
{
    midiB.begin();
    Serial2.begin (1500000, SERIAL_8N1, RXD2, TXD2);

    MIDI.begin();

    MIDI.setHandleNoteOn([](byte channel, byte note, byte velocity) {
        midiB.sendNoteOn (note, velocity, channel);
    });

    MIDI.setHandleNoteOff([](byte channel, byte note, byte velocity) {
        midiB.sendNoteOff (note, velocity, channel);
    });

    MIDI.setHandleControlChange ([](byte channel, byte number, byte value) {
        midiB.sendControlChange (number, value, channel);
    });

    MIDI.setHandleProgramChange ([](byte channel, byte number){
        midiB.sendProgramChange (number, channel);

    });

    MIDI.setHandleAfterTouchChannel ([](byte value, byte channel){
        midiB.sendAfterTouch(value, channel);
    });
}

void loop() {
  MIDI.read();
}
```

Teensy側
```cpp
MIDI_CREATE_INSTANCE(HardwareSerial, Serial4, midiB);

void setup()
{
    midiB.begin (MIDI_CHANNEL_OMNI);
    Serial4.begin (1500000);

    midiB.setHandleNoteOn (onNoteOn);
    midiB.setHandleNoteOff (onNoteOff);
    midiB.setHandleControlChange (onControlChange);
    midiB.setHandlePitchBend (onPitchBend);
    midiB.setHandleSystemExclusive (onSysex);
    midiB.setHandleProgramChange (onProgramChange);
}
```
より安全かつ正確に ahcd-go を削除

### 前書き
Python の標準ライブラリ に含まれている(xml.etree.ElementTree, csv, os) を使ってスプリクトを書いた方が簡単で、その後のデータの加工など使い勝手がいいので、綺麗にahcd-go並びに関連を削除したいと思いました。

### 環境
>iMac Retina 5k, 27-inch, 2017
macOS Ventura 13.7.4
MacBook Air (15インチ, M2, 2023)
MacOS:Sonoma14.5
#### 1. ahcd-go の削除
```sh
yourname@yournamenoiMac ~ % if [ -n "$(go env GOPATH)" ] && [ -d "$(go env GOPATH)/bin" ]; then
    rm -f "$(go env GOPATH)/bin/ahcd-go"
fi
```
##### 何も表示されなければ削除成功
```sh
yourname@yournamenoiMac ~ %command -v ahcd-go
```

##### GOPATH が空ならインストール場所を調査(空の時の誤削除を防止)
command -v ahcd-go の結果を見て個別に削除
```sh
yourname@yournamenoiMac ~ % if [ -z "$(go env GOPATH)" ]; then
    echo "GOPATH is empty. Checking installed location..."
    if command -v ahcd-go &>/dev/null; then
        echo "ahcd-go found at $(command -v ahcd-go). Deleting..."
        sudo rm -f "$(command -v ahcd-go)"
    else
        echo "ahcd-go is not installed."
    fi
fi
```
#### 2. ahcd-go のキャッシュや依存ファイルを削除
```sh
yourname@yournamenoiMac ~ % if [ -n "$(go env GOPATH)" ]; then
    rm -rf "$(go env GOPATH)/pkg/mod/github.com/your_repo/ahcd-go"
fi
```
#### 3. Go を削除（不要なら）
```sh
yourname@yournamenoiMac ~ % if command -v brew &>/dev/null; then
    brew uninstall go
else
    sudo rm -rf /usr/local/go
    if [ -n "$(go env GOPATH)" ]; then
        rm -rf "$(go env GOPATH)"
    fi
fi
```

#### 4. 環境変数を削除
sed の -i オプションで macOS / Linux 両対応
```sh
yourname@yournamenoiMac ~ % if command -v sed &>/dev/null; then
    if [[ "$OSTYPE" == "darwin"* ]]; then
        sed -i '' '/export PATH=.*go/d' ~/.zshrc ~/.bash_profile ~/.profile
        sed -i '' '/export GOPATH=/d' ~/.zshrc ~/.bash_profile ~/.profile
    else  # Linux (GNU sed)
        sed -i '/export PATH=.*go/d' ~/.zshrc ~/.bash_profile ~/.profile
        sed -i '/export GOPATH=/d' ~/.zshrc ~/.bash_profile ~/.profile
    fi
fi
```
#### 5. 設定を反映
```sh
yourname@yournamenoiMac ~ % [ -f ~/.zshrc ] && source ~/.zshrc
yourname@yournamenoiMac ~ % [ -f ~/.bash_profile ] && source ~/.bash_profile
yourname@yournamenoiMac ~ % [ -f ~/.profile ] && source ~/.profile
yourname@yournamenoiMac ~ % command -v go
```
##### 何も表示されなければ削除成功
```sh
yourname@yournamenoiMac ~ % 
```
ヘルスケアデータのXMLファイルをCSVファイルへ変換する（Go言語version）

### 環境
>iMac Retina 5k, 27-inch, 2017
macOS Ventura 13.7.4
MacBook Air (15インチ, M2, 2023)
MacOS:Sonoma14.5

### 前書き
>ヘルスケアで提供されるXMLデータをCSVファイルに変換する方法としては
・pythonスクリプトを作成して変換する
・Go言語のahcd-goで変換する
がありますが、今回はGo言語versionで試してみました。
<font color="blue"> 尚、タグに”Target”が指定されていない、確定申告関係のxmlファイルは変換できませんでした。</font>
確定申告に伴う証券会社や保険関係のxmlデータのcsvファイルへの変換については、pythonのスクリプトでできました。（下記関連サイトご参照）

#### pythonスクリプトとGo言語のahcd-goの違いは以下の通りです。

![_XMLファイルからCSVへ_2.pages.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634708/7d22b624-de96-4c64-a8d6-aa329c07af96.png)
by ChatGPT
### 事前準備手順
#### 1. Go をインストール（未インストールの場合）
```python
~% brew install go
```
#### 2. Go のバージョン確認（問題なければGOPATH設定不要） 
```python
~% go version  # 正しく表示されることを確認
```
#### 3. ahcd-go のインストール 
```python
~% cd ~  # ホームディレクトリに移動（rm -rf のリスクを軽減）
~% rm -rf ahcd-go  # 既存のディレクトリがあれば削除
~% git clone https://github.com/y-yu/ahcd-go.git
~% cd ahcd-go
```
#### 4. 依存関係を整理してビルド
```python
ahcd-go % go mod tidy  # 依存関係を整理
ahcd-go % go install  # $GOPATH/bin に ahcd-go をインストール
```
#### 5. ~/go/bin がなければ作成（通常は不要） 
(目で確認)
![スクリーンショット 2025-03-08 10.53.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634708/91049682-4786-4c9d-a980-ed5ca2630d61.png)
または
```python
 ~ % command -v ahcd-go
/Users/yourname/go/bin/ahcd-go
```
で確認できます。
```python
ahcd-go % mkdir -p ~/go/bin  # 念のため
```
#### 6. PATH を設定（必要なら）
```python
ahcd-go % export PATH=$HOME/go/bin:$PATH
ahcd-go % echo 'export PATH=$HOME/go/bin:$PATH' >> ~/.zshrc  # zsh の場合
ahcd-go % source ~/.zshrc
```
export PATH=$HOME/go/bin:$PATH は一時的な設定なので、再ログイン後も適用するため<font color="red"> ~/.zshrc</font> への追加が必要。
echo 'export PATH=$HOME/go/bin:$PATH' >><font color="red"> ~/.zshrc</font>
#### 7. 確認 
```python
ahcd-go % which ahcd-go  # ~/go/bin/ahcd-go が表示されるか確認
ahcd-go % ahcd-go --help  # ヘルプが表示されればOK
```
#### 8. hmlデータが保存してあるディレクトリで実行 
```python
ahcd-go %cd ../ 	# 一旦ホームディレクトリに戻ってからhmlデータが保存してあるディレクトリへ移動（直接でも問題はありません）
~% ahcd-go export.xml
```
私の場合のディレクトリ名：xml_ ahcd-go
ヘルスケアデータ名：export.xml
```python
iMac xml_ ahcd-go % ahcd-go export.xml
Done
```
ターミナルにDoneと表示されディレクトリにこんな形で出てきます。
![スクリーンショット 2025-03-04 10.31.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634708/a3965292-5692-474f-93c1-a7ff66c202d3.png)

#### 関連リンク
https://qiita.com/ti104110/items/1c4b4f726f85530139f3

https://qiita.com/ti104110/items/bc1647328870f7003a18
ヘルスケアのxmlデータをcsvに変換するpython3スクリプト

### 前書き
Python の標準ライブラリ に含まれている(xml.etree.ElementTree, csv, os) を使ってスプリクトを書いた方が簡単で、その後のデータの加工など使い勝手がいいことから、「ahcd-go」をやめて、pythonにしました。

### 環境
>iMac Retina 5k, 27-inch, 2017
macOS Ventura 13.7.4
MacBook Air (15インチ, M2, 2023)
MacOS:Sonoma14.5

### 実行結果
main.pyを実行
![05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634708/43ab89b3-2dc7-4659-9635-d34d90a09335.png)

exportDataディレクトリに、変換後のcsvができる
![06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634708/baf7d3a0-9f1e-49d0-a493-d81f977816d1.png)
あとは、通常の方法でdataframeなどで、加工する


#### python3スクリプト
```python
import os
import csv
import xml.etree.ElementTree as ET

# -----------------------------------------------------
xml_file = "export.xml"  # XMLファイルのパス
output_dir = "exportData"  # CSV出力フォルダ

# 必要なデータのマッピング
FILE_NAME_MAPPING = {
    "HKQuantityTypeIdentifierActiveEnergyBurned",
    "HKQuantityTypeIdentifierBasalEnergyBurned",
    "HKQuantityTypeIdentifierBodyFatPercentage",
    "HKQuantityTypeIdentifierBodyMass",
    "HKQuantityTypeIdentifierStepCount",
    "HKQuantityTypeIdentifierWalkingSpeed",
    "HKQuantityTypeIdentifierWalkingStepLength",
    "HKQuantityTypeIdentifierDistanceWalkingRunning"
}

# XML を解析
tree = ET.parse(xml_file)
root = tree.getroot()

# 出力フォルダの作成
os.makedirs(output_dir, exist_ok=True)

# 各データを適切なCSVに保存
for record in root.findall("Record"):
    record_type = record.get("type")
    if record_type not in FILE_NAME_MAPPING:
        continue  # 不要なデータはスキップ
    
    file_name = f"{record_type}.csv"
    file_path = os.path.join(output_dir, file_name)
    
    # 新規作成時にヘッダーを追加
    write_header = not os.path.exists(file_path) or os.stat(file_path).st_size == 0
    
    with open(file_path, mode="a", newline="", encoding="utf-8") as file:
        writer = csv.writer(file)
        if write_header:
            writer.writerow(["作成日", "Value", "StartDate", "EndDate"])
        
        # 取得するデータを書き込む
        writer.writerow([
            record.get("creationDate", ""),
            record.get("value", ""),
            record.get("startDate", ""),
            record.get("endDate", "")
        ])

print("XMLからCSVへの変換が完了しました。")
```

### <ご参考>iPhoneからヘルスケアの”xmlデータ”の取得方法
・「ヘルスケア」アプリを開きます。
・右上にある写真またはイニシャルをタップします。
・「すべてのヘルスケアデータを書き出す」をタップします。
![01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634708/da4a5772-d7bb-490b-b6bc-4b9d05d330be.png)

・「書き出す」をクリック
・「書き出したデータ」で好きなところにダウンロードする
![02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634708/9bcbad7a-9e20-41ea-a662-08ff2080c1e5.png)
・例：「ファイルに保存」からPCのFinderにダウンロード
（事前に保存するディレクトリを作っておくか決めておく）
![03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634708/27f865df-5858-4222-8fe5-ad5b4cb9344a.png)

![スクリーンショット 2025-03-10 10.51.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634708/4ad1c133-9d70-4c8a-8bdd-d9e017e80903.png)


以上です。
LLM（大規模言語モデル）におけるベイズ統計の活用



近年、GPTやBERTなどの大規模言語モデル（LLM）が急速に発展し、自然言語処理（NLP）の分野で広く活用されています。これらのモデルの構築や学習には、統計的手法が不可欠であり、特に**ベイズ統計**の考え方が多くの場面で活用されています。本記事では、LLMにおけるベイズ統計の応用例を詳しく解説します。

---

## 1. **LLMの学習におけるベイズ推定の役割**

LLMの学習では、膨大な量のデータからパラメータを推定する必要があります。このとき、**ベイズ推定（Bayesian Estimation）**が役立ちます。

### **1.1 ベイズ推定によるパラメータ最適化**
通常の機械学習では、最尤推定（Maximum Likelihood Estimation, MLE）を用いてモデルのパラメータを求めますが、**ベイズ推定を利用すると、事前分布を考慮した推定が可能**になります。

- **MLE（最尤推定）:** データのみに基づいてパラメータを推定する。
- **MAP（最大事後確率推定）:** ベイズの定理を用いて、事前知識を加味したパラメータ推定を行う。
  
MAP推定は、**事前分布を導入することで、過学習を抑制**し、安定したモデルを学習するのに有効です。

**応用例:**
- Transformerの学習時に、パラメータの事前分布を設定して、学習の安定性を向上させる。
- 言語モデルの事前知識として、確率的なバイアスを組み込む。

---

## 2. **事前分布と事後分布の活用**

### **2.1 LLMにおける事前分布の活用**
LLMは、学習する前に、ある程度の「知識」を持たせることができます。これを**事前分布（Prior Distribution）**とみなすことができます。

#### **（1）情報的事前分布の活用**
- **例:** LLMが医学分野のテキストを生成する際、医学論文データを事前知識として与える。
- **利点:** LLMの生成するテキストが、専門領域に適したものになる。

#### **（2）非情報的事前分布の活用**
- **例:** 一般的な対話型AIでは、特定の偏りを排除し、広範な知識を学習させるため、できるだけ均等な事前分布を使用する。
- **利点:** 幅広いタスクに対応できる汎用的なモデルの構築が可能。

### **2.2 事後分布とモデルの更新**
LLMは、新しいデータを取り込んで、出力を調整することができます。これは**事後分布（Posterior Distribution）**に相当します。

- **事前知識 + 入力データ = 事後分布としての新しいモデルの状態**
- **応用:**
  - 継続学習（Continual Learning）で、新しいデータを反映しながらモデルを更新。
  - ユーザーのフィードバックを取り入れて、個別最適化された対話システムを構築。

---

## 3. **LLMの不確実性推定とベイズ推定**

LLMの出力には、しばしば不確実性が伴います。**ベイズ的手法を用いることで、この不確実性を定量化し、より信頼性の高い出力を得ることができます。**

### **3.1 ベイズニューラルネットワーク（BNN）との統合**
- **BNN（Bayesian Neural Network）**を用いることで、各層のパラメータに確率分布を導入し、より頑健な推論が可能になる。
- **応用:**
  - LLMの生成するテキストの「確信度」を計算し、低信頼度の出力を警告する。
  - ファインチューニング時に、過学習を防ぐためにベイズ正則化を適用。

### **3.2 モデルのアンサンブルとベイズ統計**
- **LLMの異なるバージョンをアンサンブル（複数組み合わせて）推論する際、ベイズ統計を用いて最適な統合を行うことが可能。**
- **例:**
  - GPT-4、PaLM、Claudeなど複数のLLMの出力を統合し、最も信頼性の高い回答を選択。

---

## 4. **ベイズ最適化によるハイパーパラメータ調整**

LLMのトレーニングでは、**ハイパーパラメータの選択がモデル性能に大きく影響します。**

- **ベイズ最適化（Bayesian Optimization）**は、試行回数を減らしながら、最適なハイパーパラメータを探索する方法。
- **応用:**
  - Transformerの学習率やバッチサイズの最適化。
  - アーキテクチャ設計（レイヤー数、ヘッド数など）の自動最適化。

✅ **利点:**
- ランダムサーチより効率的に最適パラメータを発見できる。
- LLMの学習コストを削減できる。

---

## **まとめ**

| ベイズ統計の概念 | LLMでの応用例 |
|----------------|------------|
| **事前分布** | LLMの初期知識、専門分野の適用 |
| **事後分布** | 継続学習、ユーザー適応型AI |
| **ベイズ推定** | パラメータ最適化、過学習防止 |
| **ベイズ最適化** | ハイパーパラメータ調整、効率的な学習 |
| **不確実性推定** | AIの信頼度評価、テキスト出力の品質向上 |

LLMの開発・運用において、ベイズ統計は欠かせない技術の一つです。特に**事前分布と事後分布の適用、ベイズ推定による学習の安定化、ベイズ最適化によるモデル調整**など、多くの場面で活用されています。

今後のLLMの進化においても、ベイズ統計の応用がさらに拡大することが期待されます！
AWS DLTとJMeterを活用したプロキシ経由の負荷テスト手法

---
# はじめに

<!-- 挨拶文を入れてください -->
AWS DLT（Distributed Load Testing on AWS）は、AWS環境で大規模な負荷テストを実施できるサービスですが、プロキシを指定することはできません。  
そのため、**JMeter側でプロキシを設定し、DLTをプロキシ経由でターゲットにリクエストを送る方法**を解説します。

### この記事で分かること
- **JMeterのGUIでプロキシを設定する具体的な方法**
- **プロキシを経由したAWS DLTによる負荷テストの手法**

<!-- 挨拶文を入れてください -->


# 1. AWS環境の設計

筆者が作成した構成のイメージを簡単に示します。	
	
### 1.1 構成イメージ

本記事では、AWS DLTをクラウドフォーメーションを用いて新規VPCに展開し、プロキシを経由してダミーサーバに接続する構成を採用しています。

[AWS DLT (新規VPC)] ---> [プロキシ] ---> [ターゲット（ダミーサーバ）]
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4015405/4f4d9647-352d-46e7-9833-610a8a1305a6.png)


### 1.2 実施した設定

1. AWS DLTのクラウドフォーメーションを新規VPC内に展開  
2. NAT Gatewayを設定し、DLTがプロキシに接続可能な経路を構築  
3. プロキシのセキュリティグループを設定し、DLTのCIDRからのアクセスを許可  
4. ダミーサーバ側のセキュリティグループを設定し、プロキシからのリクエストを許可  
5. トランジットゲートウェイ（TGW）を経由し、プロキシの先にあるダミーサーバへ通信可能に  


# 2. JMeterの設定

JMeterにて負荷テストの基本設定を行った後、リクエスト確認をします。

### 2.1 JMeterのプロキシ設定  
AWS DLTではプロキシ設定ができないため、JMeterのプロキシ設定を活用して、リクエストをプロキシ経由で送信します。

#### スレッドグループの設定
- スレッド数：リクエスト群を送信する回数
- Ramp-up期間：徐々に負荷を増やす時間
- ループ回数：1スレッドで送信するリクエストの量


#### HTTPリクエストの設定
**Basicタブの設定**  
ダミーサーバをターゲットとした経路設定を行います。
- "Webサーバ"にて、プロトコルやサーバ名/IP、そしてポート番号を指定
- "HTTPリクエスト"にて、メソッドやパスを指定

**Advancedタブの設定（ここでプロキシを設定）**  
プロキシをターゲットとした経路設定を行います。
- "Proxy Server"にて、Schemeやサーバ名/IP、そしてポート番号を指定。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4015405/52bdc5c3-b6ca-4519-bd5d-2f2b45d9a8d5.png)



### 2.2 JMeterのリクエスト確認

JMeterのテストを実行する前に、JMeter単体でプロキシ経由のリクエストが正しく送信できるかを確認しておきます。


1. 「結果をツリーで表示」を追加し、JMeter単体で実行し、リクエストとレスポンスを確認
2. プロキシサーバのログをチェックし、JMeterからの通信が届いているか確認

💡 JMeter単体でのテストがうまくいかない場合は、AWS DLTに適用しても正しく動作しない可能性が高いです。まずはローカルでJMeterの動作を確認しましょう。


# 3. AWS DLTを使用した負荷テスト

### 3.1 JMeter定義ファイル（.jmx）の適用

作成した JMeterのテストプラン（.jmx） をAWS DLTにアップロードし、負荷テストを実行します。

### 3.2 DLTのパラメータ設定

AWS DLTの実行パラメータを適切に設定し、負荷試験を制御します。

| 設定項目 | 説明 |
| ------ | ------ |
| Task Count | 負荷テストの実行回数 |
| Concurrency | 一度に発行するリクエスト数 |
| Ramp UP | 徐々に負荷を増やす時間 |
| Hold For | 負荷をかけ続ける時間 |


JMeterで作成したテストプランがDLTで動作し、  
**⓵RUNNING状態がCOMPLETEに変わること**  
**⓶プロキシにアクセスが来ていること**  
を確認できればOKです。


# 4. まとめ

今回の記事では、AWS DLTでプロキシを指定できない問題に対して、JMeterのプロキシ設定で解決する方法を解説しました。  
まとめると、以下の3点がポイントになります。

1. **DLTを新規VPCに展開し、プロキシまでのネットワークを構築する**
2. **JMeterでプロキシを指定し、DLT経由でリクエストを送る**
3. **JMeter単体で事前に動作確認後、DLT環境でテストを実施する**

# 終わりに

<!-- 〆の挨拶文を入れてください -->
AWS DLTをプロキシ経由で利用する方法は事例が少ないため、今回の記事が同じ課題を抱えるエンジニアの役に立てば幸いです！
<!-- 〆の挨拶文を入れてください -->



---

<!-- 他社商標に関する記載を適宜修正してください -->

- AWS は、米国その他の諸国における Amazon.com, Inc. またはその関連会社の商標です。
- その他、記載されている会社名および商品・製品・サービス名は、各社の商標または登録商標です。
陰キャが初めてもくもく会・勉強会を開催した話

お久しぶりです、三日坊主系エンジニアの Xu です。

久々の更新になりますが、今日は技術の話ではなく、北千住で初めてもくもく会兼勉強会を開いたお話しをしようと思います。

3 月 8 日、世界では国際女性デーですが、日本ではごく一般な日です。
東京では雨雪が交差に降ってました。
そんな日に、陰キャの私ですが、人生で初めてもくもく会(兼勉強会)を開催してみました。

■ イベントサイト募集
https://connpass.com/event/346854/

## 開催に至った経緯
- 友人 3 人のうち、2 名がエンジニアだが、 Web 系の開発経験がなく、Git などをあまり使ったことないというので、情報交換の場を作りたかった
- 北千住周辺で開催されている勉強会がなかなかなく、自分で開催しちゃおうと(千住.dev さんなども検索でヒットしましたが、あいにくタイミングが合わず...)
- そもそも北千住周辺にエンジニアどれくらいいるの？みんな地方に行ってるか、横浜周辺で家族で住んでるか、一人で都心にいるかのイメージ

2 月 21 日から募集を開始し、 無事当日開催できました。
connpass から応募されたのは 6 人で、自分の友人 3 人が加わり、当日は 9 人参加、1 人欠席でした。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2466211/1a50926d-80aa-406e-be0a-5e1e43a274bf.png)
イベントの統計データ

募集の参加データから、開催日が近づくにつれて閲覧人数、参加表明率も上がっていくことが読み取れます。
実際に周りの人を誘う際も、遠すぎる日程はわからないと言われることが多いですよね？（僕が友達いないだけ？笑）

## 当日の様子
さて、ドキドキしながら開催しましたが、進行としては：
1. 最初に集まった 6 人で自己紹介
2. 40 分ほど[プレゼンテーション](https://github.com/pyxudev/KitasenjuDocs)をして
3. グループワークのテーマ「見積アプリを作ってみよう」を発表し、グループワークともくもくでテーブルを分けて作業開始
4. レンタル会議室終了 10 分前に片付けを開始して解散

### 参加者
- データ系エンジニア
- 新卒 2 年目のフルスタックエンジニア
- ネットワークエンジニア
- フリーランスのエンジニア
- ジェリーメーカーのクラウドエンジニア
- PM
- C# 開発エンジニア
- 別業界の未経験者

### 作業内容
[プレゼン](https://github.com/pyxudev/KitasenjuDocs)では初心者向けに主に IT 業界の全体像、IT システムの構成、開発の流れ的な話をしました。

もくもくテーブルでは、資格の勉強(CCNA 系)の方が多かった印象です。

### 雰囲気
皆さん話し合いながら進められたかなという感じです。
様々な業界・業務経験をしている方が多いので、共感したり、補足し合ったり、業界のネタトークもできて笑い声が飛び回りました。

もくもくできたかは把握しきれていないですが、今回のテーマとして、「助け合い・交流」は無事達成できたかと思います。
が、

### 反省点
1. プレゼンの内容が具体性を持たない
未経験者が理解できるようにという点を意識しすぎたがために、業界者にとっては物足りたい内容だったかもしれない
2. 演習などで Mac 環境の人を考慮できなかった
3. グループワークで未経験者がなかなか討論に参加できなかった
上流設計でアイディアや意見を言ってほしかったが、エンジニアの方がリードして進める形になり、なかなか発言ができない状況だった
4. グループワークで使用する技術を指定しなかったがために、かみ合わせがうまくいかず、結局一人で作ったほうが早いというフィードバックになってしまった。
その場の雰囲気が悪くならないように何とか進行させようとしたが、やはり自分がうまく誘導する必要があったと思います。
そういうのが苦手な陰キャなので、最初から使う技術を指定してしまったほうが平和な気がしました。
（せっかくの勉強する時間なので、「できないこと・わからないことを調べてできるようになる」を積極的にやっていくのが個人的な思想です。）
5. 誰も [Slack](https://join.slack.com/t/developers-r4h9602/shared_invite/zt-30j7yzsr9-O2lI9C47h~gC0k0uRhAAlQ) 参加してくれねー(笑)

### 補足
グループワークは結局今回では終わらず、各々作成して後程コンペという形式で発表していただこうかなと...
ともあれ、スペース予約から当日の鍵開けまで何もかもドキドキしながら進めましたが、無事に開催し、最後まで皆さん笑顔で解散できたので、用意した甲斐があったなと感じました。
来てくれた方には心から感謝しております。

## 次回の開催について
まだ次回はどのような形式で開催するか決めておりません。
なるはやで次も開催しようかなと思ってますが、私事で恐縮ですが、<b>4 月に結婚式</b>をすることになり、しばらく忙しくなりそうなどと...
なので、一旦ざっくりと 4 月後半を予定しております。

次回は Git の話をしようかなと思ってますので、北千住に来れそうな方はぜひ参加してください！
探索的データ分析における技術面接の準備


## **1. EDA（探索的データ分析）関連**
### **Summary Statistics（要約統計量）**
- **気をつける点**: 平均は外れ値に影響を受けやすい。分布が非対称な場合は中央値が適している。
- **知っておくべき点**: 四分位範囲（IQR）は外れ値検出にも使える。

### **Data Distribution（データ分布）**
- **気をつける点**: データの分布を確認せずに統計解析を進めると誤った結論を導く可能性がある。
- **知っておくべき点**: 正規分布でない場合、パラメトリックな手法が適用できないことがある。

### **Missing Data（欠損値）**
- **気をつける点**: 無視するとバイアスが発生する可能性がある。適切な補完手法を選ぶことが重要。
- **知っておくべき点**: 欠損パターン（MAR, MCAR, MNAR）を理解することで、適切な対応ができる。

### **Outliers（外れ値）**
- **気をつける点**: 機械的に削除すると重要な情報を失う可能性がある。
- **知っておくべき点**: 外れ値は異常値だけでなく、貴重な発見につながることもある。

### **Feature Engineering（特徴量エンジニアリング）**
- **気をつける点**: 過度な変換は解釈性を損なう場合がある。
- **知っておくべき点**: 適切なスケーリング（標準化 or 正規化）がモデルの性能向上につながる。

---

## **2. データ前処理関連**
### **Data Cleaning（データクリーニング）**
- **気をつける点**: クリーニングの基準が曖昧だと再現性がなくなる。
- **知っておくべき点**: クリーンなデータがモデルの性能に直結する。

### **Data Transformation（データ変換）**
- **気をつける点**: 過度な変換は解釈性を損なう可能性がある。
- **知っておくべき点**: 対数変換は指数的なデータに適している。

### **Feature Selection（特徴量選択）**
- **気をつける点**: 不適切な特徴選択は情報の損失につながる。
- **知っておくべき点**: PCAは解釈性を低下させるが、次元削減には有効。

---

## **3. 統計解析関連**
### **Descriptive Statistics（記述統計）**
- **気をつける点**: 数値だけを見てデータの全体像を誤解しないようにする。
- **知っておくべき点**: 分布の可視化と組み合わせるとより正確な洞察が得られる。

### **Inferential Statistics（推測統計）**
- **気をつける点**: p値が小さい＝因果関係があるわけではない。
- **知っておくべき点**: 信頼区間の解釈を誤ると結論を誤る。

---

## **4. 機械学習・モデリング関連**
### **Supervised Learning（教師あり学習）**
- **気をつける点**: 過学習を防ぐために正則化やデータ分割を適切に行う。
- **知っておくべき点**: バランスの取れたデータセットが重要。

### **Unsupervised Learning（教師なし学習）**
- **気をつける点**: クラスタリング結果の解釈が主観的になりがち。
- **知っておくべき点**: クラスター数の選択（Elbow法など）が重要。

---

## **5. データ可視化関連**
### **Matplotlib / Seaborn / Plotly**
- **気をつける点**: 誤った可視化は誤解を招く。
- **知っておくべき点**: 可視化にはストーリーテリングの要素も重要。

### **散布図（Scatter Plot）**
- **気をつける点**: 相関と因果関係を混同しないこと。
- **知っておくべき点**: トレンドラインを追加すると理解しやすい。

---

## **6. データベース・ビッグデータ関連**
### **SQL**
- **気をつける点**: 非正規化データはクエリのパフォーマンスに影響を与える。
- **知っておくべき点**: インデックスの最適化が重要。

### **データウェアハウス**
- **気をつける点**: 大量のデータを扱うため、適切なアーキテクチャ設計が必要。
- **知っておくべき点**: 分析用途に特化したデータ管理の考え方。

---

## **7. 深層学習（Deep Learning）関連**
### **ニューラルネットワーク**
- **気をつける点**: パラメータが多いため、適切なチューニングが必要。
- **知っておくべき点**: 過学習を防ぐためにドロップアウトなどを活用する。

### **勾配降下法（Gradient Descent）**
- **気をつける点**: 学習率が大きすぎると発散、小さすぎると収束が遅くなる。
- **知っておくべき点**: AdamやRMSPropなどの最適化手法も検討する。

### **転移学習（Transfer Learning）**
- **気をつける点**: 転移元のデータとターゲットデータの類似性を考慮する。
- **知っておくべき点**: 計算コストを削減しつつ高精度を実現できる。

---

## **8. AIの最新技術**
### **大規模言語モデル（LLM）**
- **気をつける点**: ハルシネーション（誤った情報生成）が発生する可能性がある。
- **知っておくべき点**: 学習データのバイアスが出力に影響を与える。

### **生成AI（Generative AI）**
- **気をつける点**: データの著作権問題や倫理的な課題がある。
- **知っておくべき点**: データの品質が出力に直結する。

### **強化学習（Reinforcement Learning, RL）**
- **気をつける点**: 実世界での応用には報酬設計が非常に重要。
- **知っておくべき点**: シミュレーション環境を適切に設定することが成功の鍵。

---

これで、各用語についての気をつける点と知っておくべき点を網羅しました。他に追加したい用語があれば教えてください！
Modifier沼から抜け出す！拡張関数を使った美しい整理術

Jetpack Composeを使っていると、ついついModifierが増えてしまい、コードがModifier沼に沈んでしまうことがあります。
今回は、そんなModifierをシンプルに整理するためのベストプラクティスを紹介します！

## Modifierを拡張関数にして再利用性を高める

頻繁に使うModifierの組み合わせを拡張関数としてまとめることで、コードがシンプルになり、再利用しやすくなります。

### サンプルコード

``` kotlin
fun Modifier.fancyCardStyle(): Modifier = this
    .fillMaxWidth()
    .padding(16.dp)
    .background(Color.LightGray)

@Composable
fun FancyCard(content: String) {
    Text(
        text = content,
        modifier = Modifier.fancyCardStyle()
    )
}
```

こうすることで、同じ装飾を複数の箇所で使う際にもコードの可読性が高まり、メンテナンスが容易になります。`clickable`や`selectable`などのインタラクション系のModifierは長くなりがちなので、特にそういう場合に役に立ちます。

## 条件付きのModifierも拡張関数でスッキリと

条件に応じてModifierを切り替える場合でも、拡張関数を利用すると分かりやすく記述できます。

``` kotlin
fun Modifier.optionalHighlight(condition: Boolean): Modifier =
    if (condition) this.border(2.dp, Color.Red) else this

// 使用例
Box(modifier = Modifier
    .fancyCardStyle()
    .optionalHighlight(highlightCondition)
) {
    // コンテンツ
}
```

## まとめ

- Modifierは拡張関数でまとめて整理する
- 条件付きModifierも拡張関数化して見通しを良くする

この整理術を使って、Modifier沼から華麗に抜け出しましょう！
家計簿アプリを作る＃１２

![スクリーンショット 2025-03-10 095402.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4012588/7a7907bf-45a2-457d-a4e7-2a7b893b6c6e.png)
ブラウザを確認すると反映されました。

![スクリーンショット 2025-03-10 095506.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4012588/acb9aaf2-832c-4938-b38f-b04a9a952ba7.png)
AppLayout.tsxの中に、Typographyがあるので、それを削除します。

![スクリーンショット 2025-03-10 095625.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4012588/7a308b82-abd6-4337-9c52-2e99d59d29d4.png)
Toolbarは、削除しなくて、大丈夫です。


![スクリーンショット 2025-03-10 095823.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4012588/92e042d2-05a9-4fdd-a3f3-858ca28def0d.png)
その下で、Home、Report、noMatchコンポーネントを呼び出したいので、Outletを追記します。

![スクリーンショット 2025-03-10 095907.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4012588/3a488b05-f091-405e-a1cf-4ff1d9fb5385.png)
ブラウザで確認すると、Home、Report、noMatchコンポーネントはすべて呼び出されているのが、確認できます。
UbuntuでSSHを使用してGitHubからリポジトリをプルする方法

# 1\. SSHキーの作成と設定
まず、GitHubに接続するためのSSHキーを作成し、GitHubアカウントに追加します。

#### 1\. SSHキーの生成:

```ruby:bash
ssh-keygen -t ed25519 -C "your_email@example.com"
```
生成されたキーのデフォルト保存先は `~/.ssh/id_ed25519` です。

#### 2\. SSHエージェントの起動とキーの追加:

```ruby:bash
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519
```
#### 3\. 公開鍵のコピー:

```ruby:bash
cat ~/.ssh/id_ed25519.pub
```
上記コマンドで表示された公開鍵をコピーします。

#### 4\. GitHubに公開鍵を追加:

- GitHubのウェブサイトにログインし、[SSH and GPG keys](https://github.com/settings/keys)の設定ページに移動します。
- "New SSH key" ボタンをクリックし、コピーした公開鍵を貼り付けて保存します。
# 2/. リポジトリのクローン
SSHキーを設定したら、リポジトリをクローンできます。

#### 1\. クローンURLの取得:

- GitHubでクローンしたいリポジトリのページに移動し、"Code" ボタンをクリックします。
- "SSH" タブを選択し、表示されたURLをコピーします (例:`git@github.com:username/repo.git`)。
#### 2\. リポジトリのクローン:

```ruby:bash
git clone git@github.com:username/repo.git
```
これで、SSHを使用してGitHubからリポジトリをクローンできます。
リバースエンジニアリング（逆コンパイル）を知っていますか？


## .NETアプリのコードは簡単に解析されてしまう？
近年、アプリケーションの**難読化**（コードをわかりにくく変換すること）の必要性は徐々に認知されてきています。しかし実行可能ファイル（exe）から元のソースコードが**簡単に逆コンパイルできてしまう**事実を、まだ多くの開発者が認識していません[^1]。

とくに.NETアプリの場合、コンパイル後のプログラムには**MSIL（中間言語）**が含まれており、このMSILにはクラス名やメソッド名など豊富なメタデータ（付加情報）が保持されています。そのため、フリーの解析ツールを使えば、誰でも**容易に実行ファイルからソースコードを再現**できてしまうのです。

## dnSpyを使った逆コンパイルのデモ
実際に、フリーの逆コンパイルツール「**dnSpy**」を用いて.NETアプリを解析してみましょう。.NET向けのサンプルアプリケーションをビルドし、dnSpyでexeファイルをドラッグ＆ドロップすると、プログラム内部のクラスやメソッドがツリー状に表示され、コードを閲覧できてしまいます。

以下の図は、サンプルアプリ内の`HelloWorldForm`クラスを展開し、メソッドのコードを表示させたものです。

（図1：dnSpyで.NETアプリを逆コンパイルし、コードを表示した例）
![b3adf9b6-aa3c-4ef2-9622-5ed2164c8cd2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4031922/340a42e9-be72-4d85-9914-7588d3bfea63.png)


図中では、`Converse`メソッドや`ConverseButton_Click`イベントハンドラが確認できます。コメントや余分な空行こそ削除されていますが、**変数名やメソッド名、文字列リテラル**は**オリジナルのソースコードと同じ**まま再現されています。そのため、仮に解析対象アプリの開発者でなくとも、復元されたソースコードから多くの手がかりを得ることができ、**プログラムの動作を容易に推測・解析できてしまいます**。

## 逆コンパイル対策は必須
以上のように、**.NETアプリの実行ファイルはそのままでは丸裸同然**です。無料で入手可能なツールを使えば、誰でも手元のexeからソースコードを複製して中身を調べたり改変したりできてしまいます。

逆コンパイルによる**知的財産の流出**や**脆弱性の露見**を防ぐためには、アプリ側で適切な対策を施す必要があります。特に、**難読化ツールの導入**は.NETアプリ開発者にとって必須の防御策と言えるでしょう。[^1]

[^1]: [.NETアプリの逆コンパイル対策、その具体的な方法とは？（難読化の実例付）](https://www.agtech.co.jp/blog/2021/05/reasons-to-protect-dotnet-application/)
パソコン入門：よく使う Chrome のキーボードショートカットを体系的にまとめてみた

## はじめに

Google Chrome をより快適に使うために、よく使われるキーボードショートカットを紹介します。これらを覚えておくと、作業効率が格段に向上します。

## まず、エンジニアにとって『時間』は命
エンジニアにとって、時間は最も重要なリソースです。多忙なスケジュールの中で、いかに効率よく作業を進めるかが常に求められます。

***パソコンの操作感やコマンド入力を素早く行うスキルは、すべての作業の基盤となる重要な能力だと考えています。***

:::note
以下の記事では、時間効率を向上させるためのさまざまな方法を紹介しています。**興味のある方は、ぜひ参考にしてみてください。**
:::

https://qiita.com/free-honda/items/e58b6750dba27107889f

https://qiita.com/free-honda/items/7419e88404abafdcd624

https://qiita.com/free-honda/items/269fa5e3c5f9db6898e2

https://qiita.com/free-honda/items/ae82ecf888352b839c5b

https://qiita.com/free-honda/items/cfc208c8ca93d36b29a4

## タブとウィンドウの操作
- **新しいタブを開く**：`Ctrl + T`
- **新しいウィンドウを開く**：`Ctrl + N`
- **シークレットウィンドウを開く**：`Ctrl + Shift + N`
- **現在のタブを閉じる**：`Ctrl + W`
- **現在のウィンドウを閉じる**：`Ctrl + Shift + W`
- **最後に閉じたタブを復元**：`Ctrl + Shift + T`
- **タブを切り替える**：`Ctrl + Tab`（右へ）、`Ctrl + Shift + Tab`（左へ）
- **特定のタブに移動**：`Ctrl + 数字キー (1～8)`（左から数えて指定したタブへ）、`Ctrl + 9`（最後のタブへ）

## ページの操作
- **ページをリロード（更新）**：`Ctrl + R`
- **キャッシュを無視してリロード**：`Ctrl + Shift + R`
- **ページをスクロール**：`Space`（下へ）、`Shift + Space`（上へ）
- **ページの一番上へ移動**：`Home`
- **ページの一番下へ移動**：`End`
- **ページを検索**：`Ctrl + F`
- **アドレスバーを選択**：`Ctrl + L`
- **閲覧履歴を開く**：`Ctrl + H`
- **ダウンロード履歴を開く**：`Ctrl + J`
- **ブックマークを開く**：`Ctrl + Shift + O`

## テキスト操作
- **コピー**：`Ctrl + C`
- **切り取り**：`Ctrl + X`
- **貼り付け**：`Ctrl + V`
- **すべて選択**：`Ctrl + A`
- **元に戻す**：`Ctrl + Z`
- **やり直し**：`Ctrl + Shift + Z`

## デベロッパーツール
- **デベロッパーツールを開く**：`Ctrl + Shift + I`
- **要素を検証**：`Ctrl + Shift + C`
- **JavaScript コンソールを開く**：`Ctrl + Shift + J`

これらのショートカットを活用すると、マウスを使わずに素早く操作でき、Chrome をより快適に使うことができます。

## まとめ

Google Chrome を快適に使うためのキーボードショートカットを紹介します。

:::note warn
**エンジニアにとって時間は重要なリソースであり、効率的な操作が求められます。**
:::

タブやウィンドウの管理、ページ操作、テキスト編集、デベロッパーツールの活用を習得することで作業効率が向上します。
OpenWrtの"NATループバック"とはなんぞや？

# 回答
ポートフォワーディングにおいて、WANからのアクセスを特定の機器にフォワードするようなケースでLANからも同じ規則で転送したい場合に容易に内部折り返し接続が実現できる機能。
WANとLANで2つ設定を書いたり内部/外部でIPを判定したりしなくても済む。

# こんな場合に
80/443ポートを公開しているDMZサーバがあり、OpenWrt配下のDMZエリアに置いているがそれをFQDNを利用してLANからも参照できるようにしたい。
しかし、通常の設定ではWANからのみDMZへフォワードされており、LANからのアクセスはOpenWrtの管理画面が表示されてしまう。
内部向けにDNSの向き先を変えたり、hostsを書くことも出来るが正直めんどくさい。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3314743/2dfabdf8-d0cf-4d91-be80-862482e61049.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3314743/2c4f9a22-5cf1-4408-be89-1cad3202320b.png)

# 設定方法
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3314743/b82bbe87-855a-4d18-bd36-6a6ff21d8741.png)

1. `NATループバックを有効にする`にチェックを入れる
1. `ループバック元IP`を選ぶ(基本的に内部IP)
1. `Reflection zones`(ループバックを許可するゾーン)を選ぶ

以上の設定を行うことで、内部からでもグローバルIPアドレスやFQDNで叩くとポートフォワード先にアクセスできるようになります
「Team Geek Googleのギークたちはいかにしてチームを作るのか」を読んで

今回は以下の本を読み終えたため、まとめと感想を記事にいたしました。ご興味を持たれた方は、お手に取って読んでみてください。

---
### 本の概要
#### タイトル
[「Team Geek Googleのギークたちはいかにしてチームを作るのか」](https://amzn.asia/d/fqYqNHq)

#### 内容
人間関係について技術本としてではなく、自己啓発本としての部類で、主に以下の2点で構成されています。
- 人間関係において大切なHRT
- HRTをベースにした仕事での対処法

---
### まとめ
#### HRT
本書ではHRTを特に重要視しており、こちらの三本柱を実行することにより、チームワークや人間関係が良好になると考えられています。

#### HRTとは
- Humility(謙虚)：常に自分を改善していくこと
- Respect(尊敬)：相手を1人の人間として扱い、能力や功績を称えること
- Trust(信頼)：自分以外は有能で正しいと信じること

#### Humility(謙虚)
仕事を進めるためにも意固地にならず、相手の意見もしっかり考慮しようということです。自分の方針に固執するような人がいるチームでは指揮や生産性が下がることが例として挙げられていました。また、謙虚になることにより、仕事や人間関係がスムーズにいくことが述べられていました。

#### Respect(尊敬)
相手を尊敬することは、1人の大人の人間として扱うことであるとまとめられていました。特にマネージャーはエンジニアにマイクロマネジャーを行い、子どものように扱っていることが多いことに問題提議がされていました。本書では、子どものように扱うのではなく、チームの要員として、エンジニア個々が力を発揮させるために支えることが大切だとしていました。

#### Trust(信頼)
信頼することの重要性や信頼により自身の仕事量を減らsetあり、善が善で返ってきたりすることが述べられていました。自分だけでコードを書けば早く終わる、ではなく、他の人にもその仕事を任せてみたりすること。他には、仕事場に来ないと生産性が下がると考えるのではなく、エンジニア自身の家での家事や仕事の生産性についてのお話を聞いてあげるなどが信頼性を築く鍵になるとしている。

---
### 感想
人間関係は所詮そんなものと諦めている部分が私にはあるので、最初はふーんと思いながら読んでおりましたが、話の展開の仕方がうまくて一貫して人間関係は「HRT」が大切なんだと学ぶ機会になりました。

本書の中で特に印象的な部分は「正しいことをして、解雇されるのを待とう。」という文章です。
正しいことを続けていれば、自分を適切に評価してくれるところは絶対あるよという意味だと私は捉えました。就活に失敗している身でしたので、大変刺さりましたね笑

お読みいただきありがとうございました🐹
私のまとめや感想からご興味を持たれた方は、ぜひ本書をお読みになってください！
Salesforce　AI資格学習の関係のまとめ








# 質問から...

+ [AI アソシエイトの模擬テストはありますか?](https://trailhead.salesforce.com/trailblazer-community/feed/0D5KX00000Kh88v)

:::note
質問への露出については、以下のリンクを試してみてください 

https://www.saasguru.co/salesforce-certified-ai-associate-exam-practice-questions/?srsltid=AfmBOooETHvvsfp-XtFczYf7528_cHDdMytIe4Iy28CONVYmfvwKyTcL

https://focusonforce.com/salesforce-ai-associate-certification-practice-quiz-and-sample-questions/
 

私の経験に基づくと、質問は Trailhead コンテンツに関連するため、Trailhead コンテンツは試験に十分です。 

この認定準備モジュールには、試験練習問題とフラッシュ カードが含まれています。 
https://trailhead.salesforce.com/content/learn/modules/cert-prep-salesforce-ai-associate
:::

+ [AI specialist or Agentforce](https://trailhead.salesforce.com/trailblazer-community/feed/0D5KX000000UhU9)

:::note
Please check this article. 

https://trailhead.salesforce.com/help?article=Salesforce-Certified-Agentforce-Specialist-FAQ
:::
ネットワーク入門：DHCPサーバーはどこ？MacBookのコマンドでネットワーク設定を確認してみた

## はじめに
DHCP（Dynamic Host Configuration Protocol）は、ネットワークに接続するデバイスにIPアドレスを自動で割り当てる仕組みです。
通常、IPアドレスは手動で設定することもできますが、DHCPを使うことで設定の手間を省き、ネットワーク管理をスムーズに行えます。

例えば、自宅のWi-Fiや企業のネットワークで、PCやスマホが自動的にインターネットに接続できるのは、DHCPのおかげです。

## DHCPの仕組み
DHCPはサーバーとクライアントの関係で動作します。

**デバイスがIPアドレスを要求（DHCP Discover）**
   - MacBookやスマホがネットワークに接続すると、DHCPサーバーに「IPアドレスをください！」とリクエストを送ります。

**DHCPサーバーがIPアドレスを提案（DHCP Offer）**
   - DHCPサーバーは、利用可能なIPアドレスを探して「このIPアドレスを使えますよ！」と提案します。

**デバイスがIPアドレスを受け入れる（DHCP Request）**
   - デバイスは提案されたIPアドレスを受け取り、使用することをサーバーに伝えます。

**サーバーが割り当てを確定（DHCP Acknowledge）**
   - DHCPサーバーが最終確認を行い、IPアドレスが正式に割り当てられます。

このようにして、ネットワーク接続がスムーズに行われます。

## MacBookでDHCPの状態を確認する方法

**現在のIPアドレスを確認**
以下のコマンドを実行すると、MacBookがWi-Fi（en0）で取得したIPアドレスが表示されます。
```bash
ipconfig getifaddr en0
```

**実際のターミナル画面**

![Screenshot 2025-03-10 at 9.12.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/0b5dfc3f-9ebe-4ed3-b681-a9b343f896d6.png)

**DHCPサーバーの情報を確認**
DHCPサーバーから受信したパケット情報を確認できます。
```bash
ipconfig getpacket en0
```

`server_identifier` に表示されるのがDHCPサーバーのIPアドレスです。

**実際のターミナル画面**

![Screenshot 2025-03-10 at 9.13.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/53ceda26-deff-4940-8e47-0a8eedd25860.png)

**ネットワークの詳細情報を確認**
現在の接続状況、DHCPの有効/無効、割り当てられたIPアドレスを確認できます。
```bash
networksetup -getinfo Wi-Fi
```

**実際のターミナル画面**

![Screenshot 2025-03-10 at 9.16.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/18cf7996-f943-4361-81ac-f2a0311dca5b.png)


**DHCPリースを更新する（IPアドレスを再取得）**
Wi-Fiの接続が不安定な場合などに、DHCPリースを更新して新しいIPアドレスを取得できます。
```bash
sudo ifconfig en0 down && sudo ifconfig en0 up
```
または、GUIで以下の手順で更新できます。

- 「システム設定」 → 「ネットワーク」
- 使用中のネットワーク（Wi-Fiや有線）を選択
- 「詳細...」→ 「TCP/IP」 → 「DHCPリースを更新」

## まとめ

- **DHCPとは？**
  - IPアドレスを自動で割り当てる仕組み
  - ネットワーク管理が簡単になる

- **MacBookでDHCPの状態を確認する方法**
  - **現在のIPアドレス** → `ipconfig getifaddr en0`
  - **DHCPサーバー情報** → `ipconfig getpacket en0`
  - **ネットワーク詳細** → `networksetup -getinfo Wi-Fi`
  - **DHCPリース更新** → `sudo ifconfig en0 down && sudo ifconfig en0 up`

ネットワークがうまく接続できないときや、IPアドレスを確認したいときに、ぜひ試してみてください。

## 参考文献

https://qiita.com/hirofumikubo/items/91f014eed5733857037f
Googleフォーム×Salesforceで見積の意向確認をフォーム化する方法 

## 1. 背景・課題

見積書を送付した後、顧客の意向確認が遅れると、契約までのリードタイムが長くなり、商談の進捗に影響を与えることがあります。従来のメールや電話での確認作業は手間がかかり、フォロー漏れのリスクも高くなります。

そこで、GoogleフォームとSalesforceを連携し、見積の意向確認を自動化する仕組みを構築します。

## 2. 解決策の全体像

本記事では、以下の流れでSalesforceとGoogleフォームを連携し、意向確認を効率化する方法を紹介します。

1. **Salesforceの商談オブジェクトにGoogleフォームのURLを生成するボタンを設置**
2. **商談IDをパラメーターに埋め込んだGoogleフォームURLを顧客に送付**
3. **顧客がGoogleフォームに回答すると、データがGoogleスプレッドシートに自動保存される**
4. **Salesforceのフローを使い、回答があったら商談フェーズを自動更新**
5. **一定期間未回答の顧客にはSalesforceフローでリマインドメールを送信**

## 3. Googleフォームの設計

### 3.1 フォームの項目

見積の意向確認を取るために、以下の項目をGoogleフォームに設定します。

- **会社名（必須）**
- **担当者名（必須）**
- **見積書番号（必須）**
- **商談ID（URLパラメーターで受け取る）**
- **見積内容の承認**
  - 「承認する」
  - 「修正を希望する」
- **修正希望がある場合のコメント欄（任意）**
- **送信ボタン**

### 3.2 フォームURLの生成

Salesforceの商談レコードに「意向確認フォーム生成」ボタンを設置し、商談IDをGoogleフォームのURLに埋め込んで送付します。

#### URLの例：
```text
https://docs.google.com/forms/d/e/XXXXXXXXXXXXXX/viewform?usp=pp_url&entry.1234567890=006XXXXXXXXXXXX
```
- `entry.1234567890` はGoogleフォームのフィールドID（商談IDを受け取る）

### 3.3 フォームの共有方法

- **Salesforceの商談レコードからボタンを押して自動生成**
- **メールにGoogleフォームのURLを挿入**
- **商談画面にフォームのリンクを表示し、状況を管理**

## 4. Googleスプレッドシートでのデータ管理

Googleフォームの回答はスプレッドシートに保存され、Salesforceとデータを連携します。
GoogleフォームからSalesforceにデータを送る方法はこちら

https://qiita.com/Lucy_kgsmec/items/f96a01ced2b8a6ee81ee


## 5. Salesforceフローでの自動化
以下のような応用が可能です。※ご要望があれば具体的なフローも紹介したいとおもいまｓ
- **商談IDをキーとしてSalesforceと紐づける**
- **回答データをSalesforceの商談オブジェクトに自動反映**
- **未回答者のリストを抽出し、リマインド対象を管理**

### 5.1(例)商談フェーズの自動更新

- Salesforceのフローを使い、Googleスプレッドシートからデータが登録されたら商談フェーズを自動更新
- **例：フェーズの変更**
  - 「提案中」 → 「見積確認済み」

### 5.2 未回答者へのリマインド

- **一定期間（例：3日）未回答の顧客をリストアップ**
- **Salesforceのフローでリマインドメールを自動送信**
- **リマインドを3回送った後、営業担当者に通知**

## 6. まとめ

- **GoogleフォームをSalesforceと連携させ、見積の意向確認を自動化！**
- **商談IDをパラメーターで渡すことで、データ管理が楽になる**
- **Salesforceフローを活用し、商談フェーズの更新やリマインドを自動化**
- **これにより、契約プロセスを短縮し、業務効率を向上！**
Docker Compose でマシン再起動時に自動でコンテナを立ち上げる設定

# 🐳 Docker Compose でマシン再起動時に自動でコンテナを立ち上げる設定

## 📋 概要

Docker Compose を使用して、マシン（ホスト）が再起動された際に、自動的にコンテナを立ち上げる方法を解説します。

---

## 🚦 再起動ポリシー (`restart` オプション)

`docker-compose.yml` の各サービスに `restart` オプションを設定することで、再起動ポリシーを制御できます。

```yaml
services:
  web:
    image: nginx
    restart: always  # 👈 これで自動再起動を設定
    ports:
      - "80:80"
```

### ✅ 主な `restart` ポリシーの種類

| ポリシー             | 説明                                                |
| ---------------- | ------------------------------------------------- |
| `no`             | 自動再起動しません（デフォルト設定）。                               |
| `always`         | コンテナが停止した場合、**常に再起動**します。また、ホストマシンが再起動した場合も起動します。 |
| `on-failure`     | コンテナが異常終了した場合に再起動します（正常終了コード以外の場合）。               |
| `unless-stopped` | `always` と似ていますが、手動で停止した場合は再起動しません。               |

---

## 🆚 `always` と `unless-stopped` の違い

- `always`: 手動で `docker stop` しても、ホスト再起動後に自動で再起動します。
- `unless-stopped`: 手動で `docker stop` した場合、ホスト再起動後も再開しません。

---

## 🛠 設定例: 複数サービスの自動起動

```yaml
version: '3.9'

services:
  app:
    image: my-app-image
    restart: always  # マシン再起動時に自動起動
    ports:
      - "8080:80"

  db:
    image: mysql
    restart: unless-stopped  # 停止したままにしたい場合
    environment:
      MYSQL_ROOT_PASSWORD: example
```

- `app` サービスは常に自動起動します。
- `db` サービスは、手動停止していなければ自動起動します。

---

## 💡 既存のコンテナに設定を適用する方法

### 1. `docker-compose.yml` を変更した場合

```bash
docker-compose down
docker-compose up -d
```

### 2. すでに動作中のコンテナに動的に設定を変更する場合

```bash
docker update --restart=always <コンテナ名>
```

---

## 🔍 再起動ポリシーの確認方法

```bash
docker inspect -f '{{.HostConfig.RestartPolicy.Name}}' <コンテナ名>
```

- `always` や `unless-stopped` になっていることを確認できます。

---

## ⚠️ Docker サービス自体も自動起動設定を確認

もしマシンが再起動された際に、Docker サービス自体が立ち上がらない場合、コンテナも自動起動しません。

### ✅ Linux で Docker サービスを自動起動に設定

```bash
sudo systemctl enable docker
```

- Docker サービスがシステム起動時に自動で開始されます。

---

## ✅ まとめ

- `docker-compose.yml` に `restart: always` や `restart: unless-stopped` を設定する。
- 既存のコンテナには `docker update --restart=always <コンテナ名>` で設定可能。
- Docker サービス自体も `systemctl enable docker` で自動起動設定する。

これで、マシン再起動後も Docker コンテナが自動的に立ち上がるようになります！
【AWS】StepFunctionsがVSCodeから作成しやすくなったらしい

# はじめに

別の記事で VSCode で Lambda 開発を効率化するといった内容を書きましたが、その記事を書いた次の日に VSCode 上で **StepFunctions（以後SFN）** の **WorkFlowStudio** が VSCode 上で利用できるようになったと発表されたので触ってみようかと思います！

アップデート情報：https://aws.amazon.com/about-aws/whats-new/2025/03/aws-step-functions-workflow-studio-vs-code-ide/

# Workflow Studio とは？

普段 StepFunctions を利用したことがない人からすると「Workflow Studio」って何か？というのがわからない方もいらっしゃるかと思いますので少しだけ説明します。

Workflow Studio は2021年ごろに発表された機能で、Step Functions のステートマシンを視覚的にドラッグ&ドロップで作成することができる機能です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4026620/b35dee79-665f-495e-86d3-c9cfb3c9af32.png)

え？そんなの当たり前にみんなそうやって作っている？
その通りです、この機能が発表されてからはほとんどの場合、この機能を使用してステートマシンを作成するのではないかと思います。

では、この機能が発表される前はどうやって作っていたと思いますか？
実は、ステートマシンには  **ASL（Amazon States Language）**  という独自のステートマシンを定義するための言語があります。
もちろん Workflow Studio も裏ではこれが作成されているのですが、以前はこれを直接書いてステートマシンを作成していました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4026620/ff194e60-32e1-4ead-9dab-c02b39df9d9c.png)

筆者もこの機能が発表される前にSFNを使用し、大変だった記憶があります。。

# VSCode で Workflow Studio を使おう！

さて、今回のアップデートで今までマネジメントコンソール上でしかできなかった Workflow Studio による開発が VSCode 上でも可能になったとのことなので早速試してみましょう！

:::note warn
AWS Toolkit for VSCode の導入が終わってない場合は導入してください。
:::

AWS Toolkit の Explorer から Step Functions を右クリックすると新規作成のメニューが出るのでクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4026620/b24de28e-c079-4fba-9999-846182113686.png)

テンプレートの選択を迫られるのでとりあえず`Hello world`を選んでおきます。
（白紙はないのか、、）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4026620/490bd6ab-ff13-4596-96f5-805d8f5f9bc2.png)

`YAML`か`JSON`か選択できるので、今回は`YAML`にしようと思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4026620/bb96991e-c90d-47d4-abb8-45b566202586.png)

クリックすると ASL が開かれました！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4026620/aa7db1e4-f38a-415c-b17b-18e830de541e.png)

ASL の一番上の部分にあるメニューが変わってます！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4026620/86c97719-c7ed-4c54-b41c-542b4ccd84b3.png)

さっそく「Open with Workflow Studio」をクリックしてみます！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4026620/0f4dba11-aa96-4ae8-a773-c8a2ed2482a5.png)

マネジメントコンソールと同じような画面が表示されました！
あとはマネジメントコンソールで操作するのと同じように開発を行い「Publish to Step Functions」をクリックすればよさそうです！

# 終わりに

今回はアップデートにより追加された VSCode 上での Workflow Studio を取り上げてみました。
AWS SAM などの IaC を使用してリソース展開をしている場合などに非常に役に立ちそうです！
（今まではマネジメントコンソール上で Workflow Studio で作ったステートマシンから ASL をコピーしてくるか、直接 ASL を記述するかだったと思います。）

素晴らしいアップデートですね！

# 弊社では一緒に働く仲間を募集中です！
現在、様々な職種を募集しております。
カジュアル面談も可能ですので、ご連絡お待ちしております！

募集内容等詳細は、是非採用サイトをご確認ください。
https://engineer.po-holdings.co.jp/
衛生管理者１種 受験メモ

# 受験経緯
今後管理側の理屈を理解するために、年齢も鑑みて理解しようと勉強を始めた。


# 教材
- テキスト       なんでも良い。２冊くらい中古で買いあさった。読みやすさ重視
- 過去問（１）   単問形式（非５択）の1500問のやつ。掲載年数が一番多い模様
- 過去問（２）   公論出版のやつ。ほとんどが公表問題（５年分）、分野によって薄かったり欠けているが分野別にまとまっている
- web           過去問.com。選択肢に取り消し線を入れたり、間違えた問題の履歴が出たり、とにかく素晴らしい出来（掲載数も10年ある）


# スケジュール
ポイント
「事業者証明書」　←会社によっては結構面倒かも、早めに！
「申し込み枠がすぐ埋まるので２ヶ月前に申し込みが必要」 

| 月    | 進捗                              | メモ         |
| --    | --                                | --          |
| 11月  | 他の試験終了、問題集を買う          | どれがいいか分からず買いあさることに                                            |
| 12月  | テキスト一通り読む                 | 内容がつまらないので時間がかかる、結果として大枠は分かっても細かい内容は覚えられず  |
| 1月   | （あまりできず）申し込みのみ        | 他のことでできず、申し込みしてからやる気が少し出た                               |
| 2月   | 過去問取り組み                     | 公論出版＋過去問.com　→　1500問　→　noteで新傾向対策                                               |
| 3月   | 試験本番                          | 多分大丈夫 |



# 受験メモ
- 公表で見なかった問題（記憶にあるやつ）
    - 防護要求係数の式（環境が悪くなれば高くなるはずなので簡単）
    - 衛生管理者数のやつ（鉛や一酸化炭素のガス30人で衛生工学管理者必要）
    - 放射線量（等価線量でなく、実効線量）

- メモ
    - 公表問題通りのものは10問あるか無いくらいだった
    - noteによってフォローできた問題が３～４問
    - 衛生管理者数の問題はマニアックなところを突いて来た（区分は細かく覚えること）
    - 会場の駐車場は１時間半前に埋まったので注意（土曜日開催だったのもあるかも）
    - 中国地方センターは分かりづらい場所なので早めに場所を見ておく（近くのコロナワールドで待機、昼食）
    - 飲み物はOK、途中でトイレの案内も可能、など柔軟な感じだった（試験時間が３時間だから？）


# 結果
合格（その会場の合格率は38%くらい）
tell me about Sofia Rodriguez contactが機能しない


# Enhance Agentforce to Act on Data with Conversational Language


+ [【未解決】Enhance Agentforce to Act on Data with Conversational Language: Sofia Rodriguez on Agentforce](https://trailhead.salesforce.com/trailblazer-community/feed/0D5KX00000KETpy0AH)


### There aren’t any guest event records. Create one and try this email type again

+ [【未解決】Cannot Click Verify step to earn 100 points](https://trailhead.salesforce.com/trailblazer-community/feed/0D5KX000000Vd7F)


+ [I got a clean pass on Get Started with Data Cloud. But when I get to the next segment there was no Sofia Rodrequez.  ](https://trailhead.salesforce.com/trailblazer-community/feed/0D5KX00000MYmZ1)


# didn't find any data about Sofia Rodriguez

+ [Estoy realizando la capacitación de AgentBlazer Champion. En el track Mejorar Agentforce para Actuar segun datos en lenguaje conversacional](https://trailhead.salesforce.com/trailblazer-community/feed/0D5KX000000V1if)
Google関係:トレイルヘッドGoogle Auth




#  Google Auth

+ [ソーシャルサインオンの設定が完了できません(Trailhead)](https://trailhead.salesforce.com/trailblazer-community/feed/0D5KX000000V8M8)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/a50ff242-ac07-4898-97ac-111f3c08cf73.png)

:::note
似たようなエラーの質問が参考になりませんか？ 

https://trailhead.salesforce.com/trailblazer-community/feed/0D54S00000QO400

https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007T4XlLSAV

>①頂いた1つ目のURLにありました「私のドメイン」の認証でGoogleを選択すること。 
②頂いた2つ目のURLにありましたApexコード10行目の"System Administrator"を"Partners"に変更すること 
以上、2点で解消致しました。
:::





+ [Set Up Social Sign-On](https://trailhead.salesforce.com/trailblazer-community/feed/0D54S00000QO400)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/26b35d85-ade8-a7cd-2777-2421d6ebd7ff.png)

:::note
Please check this video.

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

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

+ [【未解決】Stuck in Trailhead challenge: Set up Social Sign-On](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007AhJuB)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/28119f99-d25e-65f4-bd50-56c4613d5c60.png)

+ [Set up Social Sign-On](https://trailhead.salesforce.com/ja/trailblazer-community/feed/0D54V00007Dgakw)

:::note
Make sure to create a new Apex class with the name Module3RegistrationHandler and use the code provided in the repo https://github.com/salesforceidentity/IdentityTrail-Module3/blob/master/Module3RegistrationHandler.cls, and associate this class as the Registration Handler for the Google auth provider. 

必ずModule3RegistrationHandler という名前で新しい Apex クラスを作成し、リポジトリ https://github.com/salesforceidentity/IdentityTrail-Module3/blob/master/Module3RegistrationHandler.clsで提供されるコードを使用して、このクラスを 登録ハンドラ として関連付けます。 Google 認証プロバイダーの場合
:::
【AWS】各サービスのスコープ（グローバル・リージョン・AZ）を整理する

# はじめに
AWSには膨大な数のサービスがあり、適用範囲（スコープ）はそれぞれ異なります。一部のサービスはグローバルに提供され、一部はリージョン単位、またはアベイラビリティゾーン（AZ）ごとに提供されます。これを理解することで、適切なアーキテクチャ設計が可能になります。

https://aws.amazon.com/jp/about-aws/global-infrastructure/

この記事では、AWSの主要サービスについて以下のの観点から整理します。

- スコープ: グローバル・リージョン・AZ
- サービスモデル: IaaS、PaaS、SaaS
- 分類: コンピュート、ストレージ、ネットワーク、セキュリティ、データベース

# AWSのスコープについて

AWSのスコープは大きく以下の3つに分類されます。

## グローバル

グローバルスコープのサービスは、特定のリージョンに依存せず、AWS全体で一貫して利用できるものです。例えば、IAM や Route 53はグローバルスコープのサービスに該当します。

## リージョン

リージョンスコープのサービスは、AWSの特定のリージョン（例: 東京、バージニア北部など）ごとに提供されます。例えば、EC2 や RDS はリージョン単位で管理され、データは他のリージョンには自動的に共有されません。

2025年3月時点では、36のリージョンが利用できます。

## アベイラビリティゾーン（AZ）スコープ

アベイラビリティゾーン（AZ）スコープのサービスは、同じリージョン内の複数のデータセンターの単位で管理されます。例えば、EC2インスタンスやEBSボリュームは、特定のAZ内で動作し、可用性の向上のために複数のAZにまたがる構成が推奨されます。

2025年3月時点では、114のアベイラビリティゾーンが利用できます。

# AWSの主要サービス一覧

| スコープ   | サービス名 | 説明                                                      | サービスモデル | 分類              |
| --------- | --------- | --------------------------------------------------------- | ------------  | ---------------- |
| グローバル | IAM       | ユーザー、グループ、ロールの管理を行う認証・認可サービス       | SaaS          | セキュリティ      |
| グローバル | Route 53  | 可用性が高くスケーラブルなDNSサービス                        | SaaS          | ネットワーク      |
| リージョン | EC2       | 仮想マシンを提供し、柔軟なコンピューティング環境を実現         | IaaS          | コンピューティング |
| リージョン | S3        | 高い耐久性とスケーラビリティを持つオブジェクトストレージ       | SaaS          | ストレージ        |
| リージョン | RDS       | MySQL、PostgreSQLなどをマネージドで提供するDBサービス        | SaaS          | データベース       |
| リージョン | Lambda    | イベント駆動でコードを実行できるサーバーレスコンピューティング  | PaaS (FaaS)  | コンピューティング |
| リージョン | ELB       | 複数のEC2インスタンスへの負荷分散を提供                       | PaaS         | ネットワーク       |
| AZ        | EBS       | EC2にアタッチするブロックストレージ                          | IaaS          | ストレージ         |



# 参照
- [AWS グローバルインフラストラクチャ](https://aws.amazon.com/jp/about-aws/global-infrastructure/)
- [クラウド (クラウドサービス) とは？](https://aws.amazon.com/jp/cloud/)
- [コンピューティングとは](https://aws.amazon.com/jp/what-is/compute/)