OmniAICreator/Qiita-1.07M huggingface dataset:
PICOでOS作りはじました。

```C
#include <comelang.h>

#define TASK_MAX 2
#define STACK_SIZE 64

struct sContext
{
    uint32_t pc;
    uint32_t sp;
};

struct sContext gContext[TASK_MAX];
unsigned char gStack[TASK_MAX][STACK_SIZE];

int gNumTasks = 0;
int gCurrentTask = 0;

void init_task(void (*fun)())
{
    gContext[gNumTasks].pc = (uint32_t)fun;
    gContext[gNumTasks].sp = 0;
    
    gNumTasks++;
}

void task_yield() 
{ 
    uint32_t saved_pc; 

    asm volatile ( 
        "mov %0, lr  \n" 
        : "=r" (saved_pc) 
        : 
    ); 
    
printf("saved_pc %d\n", saved_pc);
   
    gContext[gCurrentTask].pc = saved_pc; 
     
    uint32_t saved_msp; 
     
    asm volatile ( 
        "mrs %0, msp\n" 
        : "=r"(saved_msp) 
        : 
    ); 
    
printf("saved_msp %d\n", saved_msp);
     
    gContext[gCurrentTask].sp = saved_msp; 
     
    gCurrentTask++;
    if(gCurrentTask >= TASK_MAX) { 
        gCurrentTask = 0; 
    } 
    uint32_t sp = (uint32_t)gContext[gCurrentTask].sp; 
    uint32_t pc = (uint32_t)gContext[gCurrentTask].pc; 
    
    if(sp == 0) {
        uint32_t stack_end = (uint32_t)gStack[gCurrentTask] + STACK_SIZE;
        gContext[gCurrentTask].sp = (uint32_t)stack_end;
        sp = gContext[gCurrentTask].sp;
    }
    
printf("new pc %d\n", pc);
printf("new sp %d\n", sp);
     
    asm volatile ( 
        "mov r0, %0\n" 
        "msr msp, r0\n" 
        : 
        : "r"(sp) 
        : "r0" 
    ); 
    asm volatile ( 
        "bx %0\n" 
        : 
        : "r"(pc)  // 入力オペランドでアドレスを指定 
    ); 
}

void task1()
{
    puts("TASK1");
    task_yield();
    puts("TASK1 END");
    task_yield();
    while(1) {
    }
}

void task2()
{
    puts("TASK2");
    task_yield();
    puts("TASK2 END");
    while(1) {
    }
}

int main() {
    stdio_init_all();
    sleep_ms(15000);
    
    init_task(task1);
    init_task(task2);
    
    uint32_t pc = gContext[gCurrentTask].pc;
    uint32_t stack_end = (uint32_t)gStack[gCurrentTask] + STACK_SIZE;
    uint32_t sp = (uint32_t)stack_end;
    
    asm volatile (
        "msr msp, %0\n"
        :
        : "r"(sp)
    );
    asm volatile (
        "bx %0\n"
        :
        : "r"(pc)
    );

    while (true) {
    }
    
    return 0;
}
```

comelang -s -pico main.cでmain.c.cが得られるのでmain.c.cをプロジェクトに加えてください。
また2、3年溶けますね。せいぜいやっていきます。
文系大学生がフルスタックデータサイエンティストになるための野望

現在文系大学一年生だがフルスタックデータサイエンティストになりたい。そのために3年生になるまでに、
❗️統計検定準一級取得とデータサイエンスに必要な線形代数、微積の勉強
❗️Numpy,Pandas,Matplotlibなどデータ分析ライブラリの習得
❗️Sk-learn,Tensorflow2,Keras,PyTorchなど機械学習ライブラリの習得
❗️SQL,NoSQLなどデータベース言語の習得
を行い、4年生になるまでに
❗️大規模データ処理とデータパイプライン構築
❗️クラウドスキルの基礎
❗️MLOpsとシステム設計
❗️データ可視化とプロジェクト実践
❗️NLPと強化学習
をやりたい。また両者で一貫してkaggleなどでインプットしたことをアウトプットしたい。
まだPython初心者、機械学習ミリ知らだけど野心はある。大学での勉強頑張るぞ！
2025/1/4主にITとかセキュリティの記事

りそな、安定接続可能に(1/1)
https://www.oanda.jp/lab-education/market_news/kn_2025010101000525/

りそな、安定接続可能に　昨年末から不具合(1/1)
https://topics.smt.docomo.ne.jp/article/kyodo_nor/business/kyodo_nor-2025010101000522?fm=latestnews
https://news.livedoor.com/article/detail/27873522/
https://www.chunichi.co.jp/article/1006813?rct=economics
https://topics.smt.docomo.ne.jp/article/kyodo_nor/business/kyodo_nor-2025010101000522?fm=topics&fm_topics_id=d1aa5361494dea13039a9d8ed6ca49e3
https://news.goo.ne.jp/article/kyodo_nor/business/kyodo_nor-2025010101000522.html

AI悪用のサイバー攻撃、日米で対策研究　非英語圏に対処(1/2)
https://www.nikkei.com/article/DGXZQOUA057A30V01C24A2000000/

d払いやgooに不具合、NTTドコモにサイバー攻撃　日航やりそなに続きDDoS被害か(1/2)
https://www.sankei.com/article/20250102-F74I7EGZ5NFWBJGPKVMFJGDC3A/

ＮＴＴドコモ、サイトで一時障害　サイバー攻撃が原因(1/2)
https://www2.yamagata-np.jp/news_core/index_pr.php?kate=Main&no=2025010201000320

ドコモのシステム障害復旧　「goo」などがサイバー攻撃によりアクセスしづらい状況に(1/2)
https://news.yahoo.co.jp/articles/903c480598ec2e9edf3ffa16284cea7e9b4a6e64?source=rss

年末から相次ぐサイバー攻撃、ＮＴＴドコモにも(1/2)
https://www.yomiuri.co.jp/economy/20250102-OYT1T50053/

NTTドコモ、DDoS攻撃で複数サービスに障害発生　回復した「d払い」の障害は無関係と公表(1/2)
https://news.yahoo.co.jp/articles/f9bc87a423653ecdf5a0eae73a3bd1dd6bdd9d73

ドコモ、ＤＤｏＳ攻撃で通販サイトの検索機能や「ｇｏｏ」など不具合…スマホ決済には影響なし(1/2)
https://www.yomiuri.co.jp/economy/20250102-OYT1T50021/

ドコモ、サイバー攻撃でサイト障害(1/2)
https://nordot.app/1247432511399493929?c=110564226228225532

ドコモもDDoS攻撃を受ける　gooやOCN、d払いなどに障害発生(1/2)
https://ascii.jp/elem/000/004/243/4243802/?rss

企業を狙うハッキング詐欺、要求に応じるべきか拒否するべきか？(1/1)
https://topics.smt.docomo.ne.jp/article/manegy/business/manegy-10662?fm=latestnews
https://topics.smt.docomo.ne.jp/article/manegy/business/manegy-10662?fm=latestnews&redirect=1

中国、米国のサイバーセキュリティの非難に反撃：「サイバーセキュリティを使って私たちを中傷するのをやめてください」(1/1)
https://motorcyclesports.net/ja/china-fires-back-at-u-s-cybersecurity-allegations-stop-using-cybersecurity-to-slander-us-ja/

【2025年最新】おすすめのAI議事録ツール12選！活用メリットや選び方も紹介(1/2)
https://xrcloud.jp/blog/articles/business/26973/

「インスタが乗っ取られました！」これまでの努力が水の泡になるアカウントの乗っ取りの実情とは(1/2)
https://yorozoonews.jp/article/15570352

AWS 上で稼働するワークロードを GDPR に準拠させるために AWS インフラ側対応に必要な情報をまとめてみた(1/2)
https://dev.classmethod.jp/articles/aws-gdpr-infra/

EDRを無力化する10種の最新手口(1/2)
https://xtech.nikkei.com/atcl/nxt/mag/nnw/18/111900071/121800062/

2024 年振り返り(12/31)
https://zenn.dev/shunsuke_suzuki/articles/look-back-on-2024

開発者コミュニティ運営してみて分かったこと(1/1)
https://zenn.dev/ame_x/articles/427f98b665e5c2

米国 ホワイトハウス バイデン＝ハリス政権は、米国のサプライチェーン強化に向けた進展を遂げている (2024.12.19)(1/2)
http://maruyama-mitsuhiko.cocolog-nifty.com/security/2025/01/post-5a38f1.html
第2回: 障害物を設置してみた！Genesisでリムル様の試練

# はじめに

こんにちは、しゅんです！  **重要事項:マジで遊んでるだけ**
前回はGenesisにリムル様を追加し、シンプルな動作確認を行いました。今回は壁を設置するだけな記事になります。

---

### 壁の設置とシミュレーションコード

```
/your_path/rimuru.obj
```
**適切なパスに置き換えすること**


壁をシーンに追加し、スライムの挙動をシミュレートします。

**コード：**
```python
# 壁を追加
scene.add_entity(
    morph=gs.morphs.Box(
        pos=(0.3, 0.3, 0.0),
        size=(0.1, 1.0, 0.15),
    ),
    material=gs.materials.Rigid(rho=1000, friction=0.5)
)
```

シミュレーションのコード全体は以下：
```python
import numpy as np
import genesis as gs

# 初期化
gs.init(seed=0, precision='32', logging_level='debug')

# シーンの作成
scene = gs.Scene(
    sim_options=gs.options.SimOptions(
        substeps=10,
        gravity=(0, 0, -9.8),
    ),
    mpm_options=gs.options.MPMOptions(
        dt=5e-4,
        lower_bound=(-1.0, -1.0, -0.2),
        upper_bound=(1.0, 1.0, 1.0),
    ),
    viewer_options=gs.options.ViewerOptions(
        camera_pos=(1.5, 0, 0.8),
        camera_lookat=(0.0, 0.0, 0.0),
        camera_fov=40,
    )
)

# 地面を追加
scene.add_entity(
    morph=gs.morphs.Plane(),
    material=gs.materials.Rigid(
        rho=1000,
        friction=0.5
    )
)
# 壁を追加
scene.add_entity(
    morph=gs.morphs.Box(
        pos=(0.3, 0.3, 0.0),  # 壁の位置
        size=(0.1, 1.0, 0.15),  # 壁の大きさ（幅, 奥行き, 高さ）
    ),
    material=gs.materials.Rigid(
        rho=1000,  # 密度
        friction=0.5  # 摩擦係数
    )
)

# スライムを追加
slime = scene.add_entity(
    morph=gs.morphs.Mesh(
        file='your_path/rimuru.obj',
        pos=(0.0, 0.0, 0.2),  # スライムの初期位置
        scale=0.05,
        euler=(90, 0, 0),
    ),
    material=gs.materials.MPM.Muscle(
        E=1e4,
        nu=0.39,
        rho=800.,
        model='neohooken',
    )
)


# シーンを構築
scene.build()

# シミュレーションを実行
scene.reset()
# while True:
for i in range(1000):
    scene.step()
```

# 最後

なんとか壁作れた。階段も作りたかったが深夜でこれ以上頭使いたくなかったため、やめました。次回はjump機能です。それとわざとリムル様の座標と重ねて壁を降ろしたらリムル様が潰れた。。。悲しい
最後まで見てくれてありがとうございます。またよろしくお願いします。
第1回: 「転スラ」のリムル様をGenesisで設置！

### はじめに

こんにちは、しゅんです！ **重要事項:マジで遊んでるだけ**
今回は「転生したらスライムだった件」の「リムル」を超適当にBlenderで作成し、Genesisに取り込んでシミュレーションを試してみました。目標はリムルにジャンプや壁越えをさせること、そして将来的には強化学習で動きを洗練させることです。この記事では、シミュレーション準備と基本的なモデルの導入について紹介します。
前回の記事見てくれてありがとうございます。

https://qiita.com/syun88/items/a4e0c5ffddbafb0d14bb

---

### Blenderでリムルモデル作成

まずはBlenderで簡単にスライム形状を作成しました。あまり細かい調整はせず、動作確認が主目的なので、形がそれっぽければOKです。

エクスポート形式は`.obj`を使用。以下のパスに保存しました：

```
/your_path/rimuru.obj
```
**適切なパスに置き換えすること**

---

### Genesisのセットアップ

#### 必要な準備

Ubuntu 24.04環境でGenesisを動かす手順は前回の記事をご覧ください。また、以下の環境でテストしました：

- **GPU**: NVIDIA RTX 3080 (VRAM 8GB)
- **Genesis Version**: 最新
 
[前回の記事です](https://qiita.com/syun88/items/a4e0c5ffddbafb0d14bb)



#### 基本的なシーンの構築

まずは地面にスライムを配置し、動作確認してみます。

**コード：**
```python
import numpy as np
import genesis as gs

# 初期化
gs.init(seed=0, precision='32', logging_level='debug')

# シーン作成
scene = gs.Scene(
    sim_options=gs.options.SimOptions(
        substeps=10,
        gravity=(0, 0, -9.8),
    ),
    mpm_options=gs.options.MPMOptions(
        dt=5e-4,
        lower_bound=(-1.0, -1.0, -0.2),
        upper_bound=(1.0, 1.0, 1.0),
    ),
    viewer_options=gs.options.ViewerOptions(
        camera_pos=(1.5, 0, 0.8),
        camera_lookat=(0.0, 0.0, 0.0),
        camera_fov=40,
    )
)

# 地面とスライムを追加
scene.add_entity(morph=gs.morphs.Plane(), material=gs.materials.Rigid(rho=1000, friction=0.5))
slime = scene.add_entity(
    morph=gs.morphs.Mesh(file='your_path/rimuru.obj', pos=(0.0, 0.0, 0.2), scale=0.05, euler=(90, 0, 0)),
    material=gs.materials.MPM.Muscle(E=1e4, nu=0.39, rho=1000., model='neohooken'),
)

# シミュレーション実行
scene.build()
scene.reset()
for i in range(1000):
    scene.step()
```

---

### 結果

シミュレーション内でスライムは物理エンジンによる影響を受け、地面に落ちました。形状も概ね保持されています。（嘘です...ちょっとスライムが謎過ぎて調節が何時間もかかった）次回は壁を設置して障害物の追加に挑戦します！
研究室の勉強会が活発すぎる件

# はじめに
今回は僕が所属している研究室の一部を紹介しようと思います．
僕は地方国立大のCS専攻なのですが，外部から見てもかなり活動的な研究室であることが最近発覚してきたのでその一部を切り取ってお届けしてみようと思いまうす．もし高校生で進学先を悩んでいる人や大学生でも研究室で迷っている人などがいれば，こういう研究室もあるんだな~と参考にしていただければ幸いです．

# 前提として
他大学の研究室事情に詳しいわけではないのですが，僕の研究室はかなり活動的だとは思います．CS専攻のコースが約70人いて，それが15程度の研究室に割り振られます．受け入れ人数は研究室によって違うのですが，うちは最大8人を毎年受け入れている状態です．B3，B4，M1，M2，Dで合計40人くらいいるうちの大学でも最大の馬鹿でか研究室になっています．地方国立なのでどうしても他大院や就職していく人も少なくない中でこの人数が常に入ってきて抜けていかない研究室というだけで魅力が伝わるのではないでしょうか．
また研究室配属は完全成績順なので，意欲の高い人たちがこぞって成績を取り，うちの研究室に入ってくるような状況になっています．自慢にはなりますが一応僕も正規に成績順で入りました．
ではなぜそこまで魅力があるのか，その理由の一つがこの勉強会だと思っています．大学はあくまで研究機関なのでその後のエンジニアとしての支援をする必要はありません．しかし，うちの研究室の教授は，あくまでプログラミングは金を稼ぐためのツールでしかないし，金を稼ぐための最も効率的なツールでもあるし，ただ技術を身に付けるだけではつまらない．今後エンジニアとして自分で食っていける学生を育成するって感じの現代的な考えの先生です．そのため勉強会を通して触ってみたい技術や身に付けたいスキルを自分で選べ，そのための環境は金を出してでも作ってやるって感じです．
僕らB3の代は興味のある技術，スキル，言語の要望を出し，先輩たちでそのスキルを所有している人がいれば即勉強会の日程と内容が確定します．レクチャー側の先輩たちにはもちろん報酬としてバイト代が支払われる仕組みになっています．こんな研究室なかなかないんではないでしょうか．
所属している身からしても毎日が楽しい刺激でいっぱいです．

# 実施済み・実施予定の勉強会
学部から博士課程まで在籍していて先輩たちだけでも30人近くいる研究室なので大抵の技術は誰かが使えます．
実際に実施された，あるいは実施予定の勉強会は以下の通りです．

Flask勉強会
Flutter勉強会
ChatGPT API勉強会
AWS勉強会
Docker/git勉強会
React/Vue勉強会
MediaPipe(姿勢検知)勉強会
YoLo(物体検知)勉強会
競技プログラミング勉強会
テスト駆動開発勉強会
ブロックチェーン勉強会

研究に必要な技術の勉強会もあれば，アプリ開発に必要な開発環境の知識，フロント・バックエンドの知識，インフラ周りの知識まで幅広くカバーしています．たぶん要望だせばもっと色々やってもらえるとは思います．

# 勉強会にこれだけ参加してみて
これだけ勉強会に参加してみて感じたのは，本当に技術に触れてみるまで興味関心が湧くかどうかは分からないということです．この勉強会は基本的に基礎事項を教えてもらう感じの勉強会なので，その技術を触れてその先を探求したいかを自分の中で考えるきっかけを与えて貰えてる感じです．これらを通して，バックエンドに興味が出てきたのは良い機会だったと思います．
今後会社に入っていけばもっと深い内容の勉強会やLT会も参加できるのかと思うとワクワクします．にしても研究室単位でこれだけ活発に勉強会をしているところはないですよね．

# 今後に向けてのメモです
### ➀Flask勉強会
バックエンド開発の基礎としてルーティングやHTTPメソッドを使ったCRUD処理を学びました．

### ②Flutter勉強会
ネイティブアプリ開発の基礎を学びました．

### ③ChatGPT API勉強会
ChatGPTのAPIを叩いて，WebAPIの基礎を学びました．特にプロンプトの送り方，user:assistantの考え方，Function Callingという返答精度を上げる機能などについて体系的に学びました．

### ④AWS勉強会
AWSの概要について学びました．これに関しては学んでどうこうというものではないので，存在をまず知るところからでした．

### ⑤Docker/git勉強会
これはシステム開発の基礎を学ぶって感じでした．ハンズオンだとコマンドいくつか打つくらいしかないので，わりと座学多めでした．

### ⑥React/Vue勉強会
これはまだです．

### ⑦MediaPipe(姿勢検知)勉強会
研究分野のための勉強会でした．顔認識とか座標取得とかハンズオンでやりました．

### ⑧YoLo(物体検知)勉強会
これはまだです．

### ⑨競技プログラミング勉強会
競プロがどういうものか，青色コーダーぐらいまでに何をすれば良いのか，おすすめサイト，お試しでコードを提出したりしました．大手やメガベンチャーに就職したいと考えているならコーディングテストは必須なので，競プロは勉強しといて得しかないと思います．

### ⑩テスト駆動開発勉強会
テスト駆動はなぜ必要なのか，テストを書いて，それを通るコードを書くまで実際に行いました．たしかDjangoのログイン関係のことだったと思います．

### ⑪ブロックチェーン勉強会
これはまだです．
24/1/3 読書記録 ~土台からしっかり学ぶソフトウェアテストのセオリー~

# 書籍
[土台からしっかり学ぶソフトウェアテストのセオリー](https://amzn.asia/d/hvYdYEd)

# 第4章 要求や仕様に基づくテスト技法

## 4-1. 同値分割
### 用語集 :pencil: 

 - 同値分割
     - 入力値の集合を同じグループでまとめ、各グループの代表値でテストを行う技法
 - 同値パーティション（同値クラス）
     - 同じ動作結果をもたらす入力値のグループ
 - 有効同値パーティション
     - テスト対象に受け入れられるグループ
 - 無効同値パーティション
     - テスト対象に受け入れを拒否されるグループ
 - 境界値分析
 - 状態遷移テスト
 - マトリクステスト
 - パステスト
 - ユースケーステスト
 - ユーセージベースドリーディング
 - デシジョンテーブルテスト
 - ペアワイズテスト
 - 直交表テスト

### 気付き / 学び:writing_hand_tone5: 


#### 同値分割の使い所

- 入力値を受け取るテスト対象
- 簡易的に確認したい時


#### 代表値の選び方
- テスト担当者に依存する部分があるため、選び方の観点は色々とある
    - ex) 使用上の境界値、0、負数、デフォルト値、中央値、最頻値
    - → 境界値分析でカバーできる

## 4-2. 境界値分析
### 用語集 :pencil: 

 - 境界値分析
     - 処理内容が変化する境界付近の値をテスト値に選択する技法
 - 状態遷移テスト
     - 
 - マトリクステスト
 - パステスト
 - ユースケーステスト
 - ユーセージベースドリーディング
 - デシジョンテーブルテスト
 - ペアワイズテスト
 - 直交表テスト

### 気付き / 学び:writing_hand_tone5: 

#### 境界値分析の使い所

- 入力値が順序づけられている要素であり、入力値全てのテストが困難の時

#### 境界値分析の注意点

- 入力値が小数点を受け入れる時
    - 有効数字が少数第何位までか？の確認を取るこ
【Go言語入門】-定義編-

## はじめに
今年からGoの基礎を勉強しているので備忘録的に残しておこうと思います。
今回は定義編になります。

## 環境構築
こちらの記事に記載しています。
https://qiita.com/karaagekun20/items/eb858835dc26811104af
エディターは一旦VSCodeを使用しています。

## フォーマット
以下のコマンドでコードをフォーマットすることができます。
```
gofmt -w  sample.go
```

## Hello world
```
package main

import "fmt"

func main() {

fmt.Println("Hello, World!")

}

// 出力結果
Hello, World!
```

## 変数
```
func main() {
	var i int = 1
	var s string = "text"
	var t bool = true
	fmt.Println(i, s, t)
}

// 出力結果
1 text true
```
省力系
```
func main() {
	var (
		i int    = 1
		s string = "text"
		t bool   = true
	)
	fmt.Println(i, s, t)
 }

 // 出力結果
1 text true
```
Short variable declaration（関数内のみで使用可能）
※varは関数外でも使用可能
また、型を明示的に宣言したい時はvarを使用

```
func main() {
	x := 1
	y := "Hello"
	fmt.Println(x, y)
 }

// 出力結果
1 Hello
```

## 定数
```
const X = 1

const (
	Name = "Taro"
	Age  = 18
)

func main() {

	fmt.Println(X, Name, Age)
 }

 // 出力結果
 1 Taro 18
```

## 配列
初期値なし
```
var array [2]int 
array[0] = 1
array[1] = 2

//　出力結果
[1 2]
````
初期値あり
````
var array []int = []int{1,2,3} 
array[2] = 0

//　出力結果
[1 2 0]
````

要素の追加
```
var array []int = []int{1,2,3} 
newArray := append(array, 100)

// 出力結果
[1 2 3 100]
````

## map
```
m := map[string]int{"first": 1000, "second": 2000}
fmt.Println(m)

// 出力結果
map[first:1000 second:2000]

fmt.Println(m["first"])
```

キーを指定
```
m := map[string]int{"first": 1000, "second": 2000}
fmt.Println(m["first"])

// 出力結果
1000

```

同じキーに違う値を入れる
```
m["second"] = 3000
fmt.Println(m)

// 出力結果
map[first:1000 second:3000]
```

新たなキーを追加
```
m["third"] = 4000
fmt.Println(m)

// 出力結果
map[first:1000 second:3000 third:4000]
```

## 関数
引数なし
```
func test() {
	fmt.Println("Hello")
}

func main() {
	test()
 }

 // 出力結果
 Hello
```
引数あり
```
func test(x int , y int) {
	fmt.Println(x + y)
}

func main() {
	test(1,2)
 }

 // 出力結果
 3
```

返り値あり
```
func test(x int , y int) int {
	return x + y
}

func main() {
	fmt.Println(test(10,10))
 }

 // 出力結果
 20
```
返り値が複数
```
func test(x int, y int) (int, int) {
	return x + y, x - y
}

func main() {
	fmt.Println(test(10, 10))
 }

 // 出力結果
 20 0
```

変数に関数を代入
```
func main() {
	f := func(){
		fmt.Println("Hello")
	   }
	f()
 }

 // 出力結果
 Hello
```

## 可変長変数
```
func test(param ...int) {
	fmt.Println(param)
}

func main() {
	test(10, 20)
    test(10, 20, 30)
 }

 // 出力結果
[10 20]
[10 20 30]
```

## クロージャー
```
func test() func() int {
	x := 0
	return func() int {
		x++
		return x
	}
}

func main() {
	counter := test()
	fmt.Println(counter())
	fmt.Println(counter())
	fmt.Println(counter())
 }

 // 出力結果
 1
 2
 3
```

## おわりに
まずは基礎的な部分をまとめてみました。
引き続き学んだことは残していきたいと思います。
Xavierの一様分布 (Xavier Uniform Initialization): ニューラルネットワークの学習安定化の鍵

# Xavierの一様分布 (Xavier Uniform Initialization): ニューラルネットワークの学習安定化の鍵

## 概要
ニューラルネットワークの初期化は、学習の効率や精度に大きく影響します。その中でも、"Xavierの一様分布（Xavier Uniform Initialization）"は、層間の重みを適切に初期化する手法として広く利用されています。本記事では、この手法の背景、理論的基盤、類似手法との比較、そして具体的な応用例を通じて、理解を深めたいと思います。

---

## 背景・歴史
Xavier（ザビエル）は、ニューラルネットワークの初期化手法「Xavier初期化」の名称で広く知られています。この名前は、この手法を提案した**Xavier Glorot（ザビエル・グロロ）**という研究者に由来します。
ニューラルネットワークのトレーニングにおいて、重みの初期値が適切でない場合、勾配消失や勾配爆発といった問題が発生し、学習が不安定になります。この問題を解決するために、2006年にXavier GlorotとYoshua Bengioが提案したのが「**Xavier初期化**」です。特に、Xavierの一様分布はその中でも一様分布に基づいた重みの初期化方法で、計算の安定性を重視しています。

以下の論文が元になっているようです（全然読んでないので間違えていたらすいません）
論文タイトル: Understanding the difficulty of training deep feedforward neural networks
リンク：https://proceedings.mlr.press/v9/glorot10a/glorot10a.pdf
著者: Xavier Glorot, Yoshua Bengio

---

## 定義と用語の位置づけ

### 全体集合
Xavierの一様分布は、ニューラルネットワークの**重み初期化手法**に分類されます。これは、深層学習や機械学習全般における最適化アルゴリズムの一部であり、勾配降下法と密接に関連しています。

### 部分集合
Xavier初期化には、以下の2種類があります:
- **Xavierの一様分布**: 重みを一様分布からサンプリングする。
- **Xavierの正規分布**: 重みを正規分布からサンプリングする。

この2つの手法は、ネットワーク構造や目的に応じて選択されます。

### 並列・類似用語
- **He初期化**: Xavier初期化の改良版で、ReLUなどの非対称な活性化関数に適しています。
- **LeCun初期化**: Xavier初期化の別バリエーションで、特にtanh活性化関数に最適化されています。

以下に各初期化手法の比較を示します:

| 用語         | 適用される活性化関数       | 初期化分布                     |
|--------------|---------------------------|---------------------------------|
| Xavier       | tanh, sigmoid             | 一様分布または正規分布          |
| He           | ReLU, Leaky ReLU          | 一様分布または正規分布          |
| LeCun        | tanh                     | 一様分布または正規分布          |

---

## 用語の具体例・応用例

### Xavierの一様分布の定義
Xavierの一様分布では、重み $W$ は以下の範囲からサンプリングされます:

$$
W \sim U\left[-\frac{\sqrt{6}}{\sqrt{n_{\text{in}} + n_{\text{out}}}}, \frac{\sqrt{6}}{\sqrt{n_{\text{in}} + n_{\text{out}}}}\right]
$$

ここで、
- $n_{\text{in}}$: 入力ノード数
- $n_{\text{out}}$: 出力ノード数

この式により、入力と出力のノード数を考慮したバランスの良い初期化が可能になります。

### 実装例 (Python)
以下は、TensorFlowを用いたXavierの一様分布の実装例です:

```python
import tensorflow as tf

# Xavier Uniform Initialization の適用
initializer = tf.keras.initializers.GlorotUniform()

# 例として、Dense層に適用
model = tf.keras.Sequential([
    tf.keras.layers.Dense(128, activation='relu', kernel_initializer=initializer),
    tf.keras.layers.Dense(10, activation='softmax', kernel_initializer=initializer)
])
```

この初期化により、層間の勾配の安定性が向上し、学習の効率が高まります。

### 応用例
1．画像分類: Convolutional Neural Networks (CNNs) の重み初期化に使用され、学習の収束を加速。
2．自然言語処理: RNNやTransformerモデルの学習を安定化。
3．音声認識: 入力特性の多様性が高いタスクでも勾配消失を抑制。

## 結論・まとめ
Xavierの一様分布は、層の入力および出力ノード数を考慮した重み初期化手法であり、ニューラルネットワークの勾配消失や勾配爆発の回避に効果的です。他の初期化手法と組み合わせることで、より特定の課題やモデルに適した初期化を選択することが可能です。

深層学習の実装において、初期化手法の理解はモデル性能を最大化する上で重要なステップです。この知識を活用して、より効率的なニューラルネットワーク設計を目指しましょう。
【AWS SAP】CAPABILITY_NAMED_IAMとは？

# CAPABILITY_NAMED_IAMとは？
**AWS CloudFormation** において IAM リソースを作成または更新するスタックをデプロイする際に使用される特別な権限オプションです。

## 背景と用途
IAM (Identity and Access Management) リソースには、IAM ロール、IAM ユーザー、IAM ポリシーなどがあります。これらのリソースを操作する際は慎重な権限設定が求められるため、CloudFormation はデフォルトで IAM リソースの作成を許可しません。

**CAPABILITY_NAMED_IAM** は、特定の名前が付いた IAM リソースを作成または変更する場合に必要な権限を明示的に許可するためのオプションです。スタック操作に際して、このオプションを使用することで、意図しないセキュリティ上のリスクを回避できます。

## 不要な場合
IAMリソースを一切作成・更新しないテンプレートの場合、このオプションは指定不要です。

例: S3バケットやEC2インスタンスだけを定義しているテンプレート

## 必要な場合
### 1. 名前付きの IAM リソースを作成・更新する場合
CloudFormation テンプレートで IAM リソースを作成し、そのリソースに 名前（RoleName, UserName, PolicyName など）を指定する場合 が該当します。

### 2. 既存の名前付き IAM リソースを更新する場合
テンプレート内で既存の IAM リソース（名前が指定されたもの）を更新する場合も、このフラグが必要です。

### 3. サービスが必要とするロールを明示的に作成する場合
特定のAWSサービス（例: Lambda, EC2, CodePipeline など）が動作するために IAM ロールが必要な場合、それを名前付きで定義するとフラグが必要になります。

## 類似の権限オプション
| 権限オプション                 | 必要な場合                                                                               | 例                                                                                     |
|----------------------------|---------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------|
| **CAPABILITY_IAM**        | 名前を指定しないIAMリソースを作成・更新する場合                                         | 自動生成されるIAMロールやポリシー                                                     |
| **CAPABILITY_NAMED_IAM**   | 名前付きのIAMリソースを作成・更新する場合                                               | 明示的に名前を指定したIAMロールやポリシー                                             |
| **CAPABILITY_AUTO_EXPAND** | マクロを含むテンプレートをデプロイする場合                                               | マクロやスタックセットを使用してテンプレートを動的に展開する場合                       |
【AWS SAP】AWS Service Catalogとは

# AWS Service Catalogとは
管理されたリソースのテンプレート化と提供を可能にするサービス

## 具体的に
AWS Service Catalogは、会社内でよく使うAWSの設定済みリソースを「カタログ」として管理し、社員が簡単に利用できるようにするサービスです。これにより、社員が勝手に違う設定でリソースを作成することを防ぎ、管理者が安全でコスト効率の良い環境を維持できます。

## 「カタログ」の実体は？
カタログの実体は、リソース構成を記述したCloudFormationテンプレート。

## 例
1. 管理者がよく使うリソース（例：EC2インスタンスやS3バケット）のテンプレートを作成し、「カタログ」に登録。
2. 社員はその「カタログ」から必要なリソースを選び、ボタンひとつで簡単に利用開始。
3. 管理者は、どのリソースがどれだけ使われているかを追跡可能。

これにより、以下が実現します。
- ルールの統一：全員が同じ基準でAWSリソースを使える
- ミスの防止：設定ミスや不要なリソース作成を防ぐ
- 効率アップ：社員がすぐに必要なリソースを使える

簡単に言うと、**AWSリソースの会社専用アプリストア**みたいなものです。
HerokuとFastAPIで簡単にWebアプリケーションをデプロイする方法


## はじめに

今回はHerokuとFastAPIを用いて簡単にWebアプリケーションをデプロイする方法を紹介します。

## この記事を読んで欲しい人
- サクッとサーバーレスでWebアプリケーションをデプロイしたい人
- FastAPIで作ったサービスを作ったことがある人

## サービスの特徴
Herokuは、アプリケーションの開発、デプロイ、運用を行うためのクラウドプラットフォームです。簡単なコマンド操作だけで、Webアプリケーションをデプロイすることができます。また、PHP以外にもPython、Ruby、Node.js、Java、Goなど、多くの言語に対応しています。
    
https://devcenter.heroku.com/

## サービスの導入方法

### Heroku CLIのインストール
まずはHerokuのアカウントを作成します。支払い方法まで登録しないとデプロイできないのでそこまで登録しておきましょう。次に、Heroku CLIをインストールします。Heroku CLIは、Herokuのコマンドラインインターフェースです。Heroku CLIを使うことで、Heroku上でアプリケーションの作成、デプロイ、運用を行うことができます。

https://devcenter.heroku.com/articles/heroku-cli

### FastAPIで簡単に動くアプリの作成
FastAPIは、PythonのWebフレームワークです。FastAPIを使うことで、簡単にWebアプリケーションを作成することができます。とりあえず、以下のコードをコピペして、`main.py`というファイル名で保存してください。

```python
from fastapi import FastAPI

app = FastAPI()

@app.get("/")
async def read_root():
    return {"Hello": "World"}
```

次に、Herokuへデプロイ時の設定ファイルを作成します。以下のコードをコピペして、`Procfile`というファイル名で保存してください。

```
web: uvicorn main:app --reload
```

### Herokuへのデプロイ
まず、Herokuにログインします。以下のコマンドを実行してください
```
heroku login
```
画面が遷移するので、ログインしてください。

次に、Herokuにアプリケーションを作成します。以下のコマンドを実行してください。
```
heroku create
```

作成されたアプリケーションにデプロイします。
herokuでは、デプロイするためにgitを使います。以下のコマンドを実行してください。
```
git push heroku
```

これで、HerokuにFastAPIのアプリケーションがデプロイされました。HerokuのURLにアクセスすると、`{"Hello": "World"}`と表示されるはずです。

## Herokuの動作を確認

### Herokuのダッシュボード
Herokuのダッシュボードにアクセスすると、デプロイされたアプリケーションの情報が表示されます。アプリケーションのステータスや、ログ、設定などを確認することができます。

https://dashboard.heroku.com/

### Herokuのコマンド
Heroku CLIを使うことで、Heroku上でアプリケーションの操作を行うことができます。以下のコマンドを実行することで、アプリケーションのステータスやログを確認することができます。

```
# アプリケーションのステータスを確認
heroku ps

# アプリケーションのログを確認
heroku logs --tail

# アプリケーションの再起動
heroku restart

# アプリケーション内でのコマンド実行（ここではlsを実行）
heroku run ls

# アプリケーションの停止
heroku ps:scale web=0
```

## おわりに
今回は、Herokuで使えるコマンドについて簡単に紹介しました。自分の使い慣れた言語でサクッとWebアプリケーションをデプロイしたいときには、Herokuが便利ですね。
Bootstrap.cssを特定の領域内部のみに適用し、その中にReactのコンポーネントを描画する方法(postCSSを利用)


## はじめに

既存のWebサイトにReactのコンポーネント(react bootstrap)を描画しようとしたところ、bootstrap.cssを読み込む必要があり画面全体のレイアウトが崩れてしまいました

そこで、Bootstrapのスタイルを特定の領域に限定するために、ルート要素にカスタムクラス（例: .bootstrap-scope）を追加し、スタイルをそのクラスの内部に限定するように`bootstrap.css`自体を変更します

具体的には、[postcss-prefixwrap](https://www.npmjs.com/package/postcss-prefixwrap)を利用して、全てのセレクタの前に`.bootstrap-scope`を追加するように設定します


bootstrapが`class="bootstrap-scope"`の内部にだけ、適用されるようになります
```html
<div class="bootstrap-scope">
  <!-- Bootstrapのスタイルが適用される領域 -->
  <button class="btn btn-primary">Bootstrap Button</button>
</div>
```

node.js環境であればpostCSSでcssファイルを変更可能ですが、今回はvite環境で設定します

### 1. postCSSのインストール

bootstrapとpostcss関連をインストールします

```
$ npm install bootstrap postcss postcss-prefixwrap
```

### 2. postcssの設定を`vite.config.ts`に追加する

通常は`postcss.config.js`に設定して、vite.config.tsでimportしますが、モジュール型の読み込み制限など問題が発生しやすいので、viteの設定ファイルに直接追記します

```ts:vite.config.ts
export default defineConfig({
  css: {
    postcss: {
        plugins: [
          // cssのセレクタの前に追加する(class="bootstrap-scope"配下のみbootstrapを適用させる)
          prefixWrap('.bootstrap-scope', { 
            whitelist: ['.*\\.css'] // 全てのcssを対象とする
          })
        ]
    }
  },
})
```

### 3. 変換を行うためbootstrapをcssファイル内でimportします

```css:scoped-bootstrap.css
@import "bootstrap/dist/css/bootstrap.min.css";
```

### 4. テスト用コンポーネントを作成して動作確認を行います

変換後のbootstrap(scoped-bootstrap.css)を読み込みます

```tsx:App.tsx
import './scoped-bootstrap.css';

const App = () => {
  return (
    <div>
      <div className="bootstrap-scope">
        <button className="btn btn-primary">Bootstrap Button</button>
        <div className="alert alert-success">Scoped Alert</div>
      </div>
      <div>
        <button className="btn btn-primary">Outside of Bootstrap Scope Button</button>
      </div>
    </div>
  );
};

export default App;

```

`bootstrap-scope`が指定されたタグ配下のみ、bootstrapが適用されていることが確認できました
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276579/8550bf0f-0dbc-9608-1839-4b601a91a37f.png)
朝のルーティンを整えよう！1日のスタートを快適にする方法

## はじめに  
朝の時間を有効に使うことで、その日1日をスムーズに過ごすことができます。しかし、忙しい毎日の中で朝の準備がバタバタしてしまう人も多いのではないでしょうか？この記事では、簡単に始められる朝のルーティンを紹介します。

---

## 1. 朝のルーティンを整えるメリット  
- **集中力が上がる**  
  朝の時間を落ち着いて過ごすことで、頭がクリアになり、集中力が高まります。  
- **時間に余裕が生まれる**  
  準備の時間を短縮できるため、忙しい朝でも余裕を持てます。  
- **1日の満足度が向上**  
  朝の過ごし方次第で、その日の気分が大きく変わります。

---

## 2. おすすめ朝のルーティン  

### (1) 起床後にコップ1杯の水を飲む  
寝ている間に体は水分不足になります。朝一番に水を飲むことで体を目覚めさせましょう。  

- **ポイント**: 常温の水がおすすめです。胃腸への負担が少なく、吸収しやすいです。  

### (2) 軽いストレッチをする  
体をほぐすことで血流が良くなり、眠気を解消できます。  

- **簡単なストレッチ例**:  
  - 首をゆっくり回す  
  - 肩を上下に動かしてリラックス  

### (3) 朝食を摂る  
朝食を摂ることでエネルギーを補給し、活動的な1日を始められます。  

- **おすすめ朝食メニュー**:  
  - ヨーグルトとフルーツ  
  - トーストとスクランブルエッグ  
  - 和食なら味噌汁とご飯  

### (4) 今日のスケジュールを確認する  
出発前にその日のスケジュールを確認しておくと、余裕を持って行動できます。  

- **ポイント**: スケジュール確認後にタスクの優先順位を決めると、効率的に仕事が進みます。  

### (5) 5分間の「静かな時間」を取る  
スマホやテレビを一旦オフにし、静かな時間を持つことで、心を落ち着けられます。  

---

## 3. ルーティンを続けるコツ  
- **無理のない範囲で始める**: いきなり多くの習慣を取り入れず、1つずつ増やしましょう。  
- **朝の準備を前日にしておく**: 服やカバンの準備を前日にしておくと、朝の負担が減ります。  
- **習慣化するためのご褒美を設定**: 1週間続けられたら、美味しいスイーツを食べるなど、小さなご褒美を用意しましょう。  

---

## 4. 具体的な朝のルーティンプラン例  
**6:30** 起床、コップ1杯の水を飲む  
**6:35** ストレッチ  
**6:45** 朝食  
**7:00** スケジュール確認  
**7:10** リラックスタイム  
**7:15** 出発準備  

---

## まとめ  
朝のルーティンを整えることで、心身ともに快適な1日をスタートできます。最初は小さな一歩から始めて、少しずつ自分に合ったルーティンを作っていきましょう！朝の時間を大切にすることで、毎日の生活がより充実します。  

ぜひ今日から新しい朝の習慣を取り入れてみてください！
ゲームプログラマのための設計：YAGNIとリファクタリング、KISS原則

[ゲームプログラマのための設計シリーズ](https://qiita.com/kobitnex/items/93397d985682c806884c)：原理・原則編の記事です。

# 概要
* YAGNIと、ゲーム制作における事情
* 設計におけるKISS原則とは

# 本文
## ゲーム開発とYAGNI

YAGNI(You Ain't Gonna Need It)とは、機能は必要になるまで追加しないという原則です。
プログラムにコードを追加すると
* 書くのに時間を費やす
* コードを読むために必要な時間が増える
* エンバグしてしまうかもしれない
* ビルドにかかる時間増大
* 場合によっては実行速度の低下

などいろいろなリスク・コストが発生します。必要な機能なら当然これらを飲むしかないわけですが、本当に必要になるかわからないような予測に対してこれらのコストを払うのは割に合わないよね、という経験則です。

これは機能そのものだけではなく、設計に対しても同じことが言えます。将来拡張するかもしれない・・・と思って今必要ないインターフェースをこしらえたり凝ったデザインパターンを適用して過剰設計に陥ってしまう経験は自分にもあります。かといって、いつかは設計（抽象化）を施さないとコートベースは徐々に混沌と化してしまうのです。一体いつ設計を改善（リファクタリング）するのが良いのでしょうか？

人によりいろいろ流儀があるとは思いますが、ゲーム開発においては
* __①機能追加が必要となったが、現状の設計ではそれがしにくい場合__ 
* __②アーキテクチャ上の境界なら、いつでも__ 

の二点が特に設計を重視すべきところで、必要ならリファクタリングを要するところかなと思っています。

①については、書籍「[リファクタリング 既存のコードを安全に改善する](https://www.amazon.co.jp/%E3%83%AA%E3%83%95%E3%82%A1%E3%82%AF%E3%82%BF%E3%83%AA%E3%83%B3%E3%82%B0-%E7%AC%AC2%E7%89%88-%E6%97%A2%E5%AD%98%E3%81%AE%E3%82%B3%E3%83%BC%E3%83%89%E3%82%92%E5%AE%89%E5%85%A8%E3%81%AB%E6%94%B9%E5%96%84%E3%81%99%E3%82%8B-OBJECT-TECHNOLOGY/dp/4274224546)」でもこう述べられています。変更を予期して設計するのではなく、必要になったタイミングで現状にとって適切な設計になるようリファクタリングを施すわけですね。「現状の設計だと、新機能を足そうと思うとコピペコードだらけになるなあ・・・」などと思ったときに、機能追加された世界に最適な設計を施します。
当然ですが、リファクタリングと機能追加はコミットをきっちり分けるのを忘れずに。

②は、ゲームプログラムをざっくり「キャラクターのAI」「物理挙動やコリジョン」「UI」「グラフィックス」「サウンド」「ゲームシステム（スコア計算とか、シーケンスの進行など）」くらいに分けた際の境界です。担当者が異なることも多く、それぞれの独立を保てないと作業もテストもし辛いです。ここは最初から時間をかけてでも設計に気を使うべきところでしょう。

___

世間ではほかにも様々な意見が展開されています。

* 将来の変更を予測して見極めよ
* 常に一定のコストをかけてリファクタリングを進めよ

などといった方針も挙げられていますが、特に新規ゲームの開発では仕様変更が激しく予測が非常に難しいこと、基本的にプログラマは開発中ずっと忙しいことからこれらの方針は向かないかな～と感じています。
もしリファクタリングのための期間を数日間設けてもいい！と言われたらそれはうれしいですが、結局その後の仕様追加で結局だんだんと歪みが蓄積してしまいますし、仕様が固まるころには時間もなくエンバグのリスクもあるのでリファクタリングどころではないでしょう。

## KISS原則

つまり必要な時が来るまでシンプルに保つ、つまりKISS原則（Keep It Simple Stupid、シンプルで愚鈍にする）に従うわけですが、設計における「シンプル」とは何でしょうか。自分は __「利用＆依存している状態と前提知識が少ないほどシンプルである」__ という風に捉えています。
明確に依存といえるライブラリなど他のプログラムの部位だけではなく、プログラミング言語の言語機能の利用も含めた意味で「利用＆依存」という言葉を用いています。どんな言語でも同じように書けるのであればそれは前提知識が少ない≒シンプルであると言えるのではないでしょうか。

| シンプル順 | 形態 | 備考 |
|:-:|:-:|:-:|
| 1 | 純粋関数 | 引数以外の依存なし。ほとんど言語機能依存なし |
| 2 | 純粋でないグローバル関数 | グローバル変数に依存。ほとんど言語機能依存なし|
| 3 | （既存の関数内にインラインでの記述）| ローカル変数に依存。言語機能依存なし |
| 4 | クラス（継承なし） | メンバ変数への依存。クラスという言語機能の利用 |
| 5 | インターフェース（継承） | クラス＆継承という言語機能の利用。継承の階層構造の知識を要求 |
| 6 | 有名なデザインパターンの利用 | 多くはクラスや継承という言語機能の利用。そのデザインパターンへの知識を要求 |
| 7 | それ以外のマイナーパターンやオレオレアーキテクチャ | 前提知識の持ちようすらなく困難 |

多少のコードの重複を許せばシンプル順を上げられるのであればそうする、くらいの気持ちで取り組むのがオススメです。
[Qiita] Git連携 - 基本

# 要約
- Qiitaの記事をGitHubレポジトリで管理する方法の備忘録
    - [Qiitaの記事をGitHubリポジトリで管理する方法](https://qiita.com/Qiita/items/32c79014509987541130)
- Qiita公式手順のハンズオン
- Node.jsを使用するためDevcontainerの構築をしたいが次回以降実施

# 手順
## Qiita
1. Qiitaのトークンを発行
    1. 設定 -> アプリケーション -> 個人用アクセストークンから「新しくトークンを発行する」を選択
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/733625/fdb8168b-31e3-d038-b484-1c248f640064.png)
    1. トークンの設定を入力
    アクセストークンの説明はGitHub用と判別可能な任意のテキストを入力
    スコープは「read_qiita」と「write_qiita」を選択
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/733625/c3c7cd7f-e111-f074-7cd0-622c24bb5fed.png)
    1. 発行されたトークンをコピー
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/733625/ebaab9a9-7064-3787-d96f-999bdd5ce241.png)

## GitHub
1. GitHubレポジトリの作成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/733625/a5e81f68-0cc1-a884-60a2-e72eaf33b7f7.png)
1. GitHub Actionsの設定
    1. Settings -> Secrets and variables -> Actions -> Secretsから「New repository secret」を選択
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/733625/b278a1ce-8571-b984-a40e-9e4a7a39cdbc.png)
    1. シークレットの設定
    NameにQIITA_TOKENを入力
    Secretに1-3で発行したトークンを入力
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/733625/55b23038-3871-bd57-eeee-e993db26a70a.png)
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/733625/2621e7c6-114a-1a15-e295-abba166d3740.png)

## Qiita CLI
1. インストール
    1.  [qiita-cli](https://github.com/increments/qiita-cli)
        1.  ```npm install @qiita/qiita-cli --save-dev```
        ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/733625/f7c9ade2-ea0d-1478-cf5c-902276d1732f.png)


1. セットアップ
    1. ```npx qiita init```
    1. ```npx qiita login```
    ※恐らくログイン時にはGitHubとは別のトークンを入力するのがベストプラクティス。ここでは同一のトークンを入力
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/733625/1d786789-df04-810f-ba62-6b72bf2271f7.png)

## GitHubレポジトリと同期
1. リモートレポジトリの追加
    ```
    git init
    git add *
    git commit -m "first commit"
    git branch -M main
    git remote add origin [リポジトリのURL]
    ```
1. リモートレポジトリのPush
    ```git push -u origin main```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/733625/ffa3871d-fd19-f34f-015c-f8368ea628f6.png)
1. GitHubレポジトリ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/733625/80b3671d-9464-ff6a-9ab8-856d3ba309a2.png)

# 所感
- Qiita CLIは特に問題なかったが、以下のことからGitHubの操作方法でハマった。業務では漫然とGitを使用していたと反省。Gitを学びなおしたほうがいいかもしれない
    - 普段はAzure DevOpsのReposを使用しており、Repos上からレポジトリを作成->Cloneをしている
    - VSCode上からコミット・Pushをしており、コマンドラインの操作方法が不明だった
- Node.jsを使用するため、Devcontainerとして使用したい。Devcontainerは数回使用したことがあるがいまいち理解していないので理解しながら設定する(ToDo: 1)
    - 主旨は環境を汚染したくないため
    - 元々PCにはNode.js v14がインストールされていた(使用していないが)
    - Qiita CLIのインストールに伴いv22をインストールし直した
- PCに設定されているGitの設定がAzure DevOps Repos用のため設定変更が必要。複数アカウントを使い分けられるように設定する必要がある(ToDo: 2)
    - 今回は面倒になったためユーザ情報をGitHub用に書き換えてしまった
対話型AIの信頼性を高める新提案：AFICEフレームワークの徹底解説

# 論文紹介: Aligning Large Language Models for Faithful Integrity Against Opposing Argument

## はじめに

対話型AIの分野では、LLMs（Large Language Models）の性能向上により、複雑な推論や議論に対応可能なシステムが実現しています。しかしながら、これらのモデルはまだ以下の課題を抱えています。

1. **誤情報への脆弱性**: ユーザーの誤った主張に影響されやすく、正確な応答を維持できないこと。
2. **自己矛盾**: 同一のテーマで異なる時間や文脈で矛盾した応答を行うこと。
3. **信頼性の欠如**: モデルの応答がどの程度信頼できるのかを測定する手段が限定されていること。

このような背景を踏まえ、本論文では「AFICE（Alignment for Faithful Integrity with Confidence Estimation）」という新しいフレームワークを提案しています。本記事では、論文の内容を詳しく解説し、この研究がどのように上記の課題を解決するのかを探ります。

---

## 論文情報

- **タイトル**: Aligning Large Language Models for Faithful Integrity Against Opposing Argument
- **リンク**: [arXiv:2501.01336v1](https://arxiv.org/abs/2501.01336)
- **発表日**: 2025年1月2日
- **著者**: Yong Zhao, Yang Deng, See-Kiong Ng, Tat-Seng Chua

---

## 背景と目的

### 現実世界の課題
例えば、法律分野や医療分野での応答生成タスクでは、モデルが誤情報を提供するリスクが指摘されています。このような場面では、モデルが一貫して正確で信頼できる情報を提供できることが不可欠です。しかし、従来の手法では次のような限界がありました。

1. **忠実性の欠如**: モデルが正しい立場を維持できず、ユーザーの誤った主張に引き込まれる。
2. **自己修正の不足**: モデルが誤りを指摘されても適切に修正できない。

これらの課題に対し、AFICEフレームワークは「モデルの忠実性を測定し、一貫性のある応答を生成する」ことを目指しています。

---

## AFICEフレームワークの詳細

AFICEは、以下の主要コンポーネントで構成されています。

### 1. Bilateral Confidence Estimation（BCE）

#### 概要
BCEは、モデルの応答信頼度を定量化する手法です。具体的には、以下の要素を利用して信頼度を評価します。

- **累積確率比（Cumulative Probability Ratio）**: モデルの予測確率を使用して信頼度を計算。
- **セマンティックエントロピー（Semantic Entropy）**: 応答が文脈とどの程度一致しているかを測定。

#### 数式
BCEの信頼度は以下の数式で表されます。

$$
Confidence(q, a) = \rho(q, a)^\gamma \cdot e^{-\alpha \cdot SE(q)}
$$

ここで：
- $\rho(q, a)$ は累積確率比。
- $\gamma$ は調整パラメータ。
- $\alpha$ はエントロピーの影響を調整する係数。
- $SE(q)$ は質問 $q$ に対するセマンティックエントロピー。

### 2. Direct Preference Optimization（DPO）

#### 概要
DPOは、信頼度に基づいて応答を優先順位付けし、モデルを最適化する手法です。この手法により、モデルは次のような応答スタイルを学習します。

1. 一貫性のある応答生成。
2. ユーザーの修正を受け入れる柔軟性。
3. 応答の適切な譲歩や否定のバランス。

---

## 実験の概要と結果

### データセット
以下のベンチマークを使用してAFICEの性能を検証しました。

1. **Mathematics**: GSM8K（数学的推論タスク）
2. **Commonsense**: StrategyQA、CommonsenseQA 2.0
3. **Generic**: BIG-Bench-Hardの9つのタスク

### 評価指標
- **AUROC（Area Under the Receiver Operating Characteristic）**: 応答信頼度の正確性を評価。
- **ECE（Expected Calibration Error）**: モデルの信頼性と応答精度の整合性を評価。

### 実験結果
以下は、AFICEフレームワークの結果を示す比較表です。

| 手法               | Mathematics | Commonsense | Generic | 平均精度 |
|--------------------|-------------|-------------|---------|----------|
| **ベースライン**   | 53.7%       | 57.7%       | 51.4%   | 54.3%    |
| **AFICE**          | **62.3%**   | **61.9%**   | **67.2%** | **63.8%** |

#### 結果の解釈
AFICEフレームワークは、ベースライン手法に比べて一貫して高い性能を示しました。特に、数学的推論と常識推論において顕著な改善が見られました。

---

## 議論

### 賛成意見
- **革新性**: 応答信頼度を定量化するBCEは、従来の手法に比べて正確かつ直感的。
- **応用可能性**: 医療や法律分野におけるモデル応答の品質向上に寄与する可能性が高い。

### 反対意見
- **計算コスト**: 高度な信頼度推定には多くの計算リソースが必要。
- **汎用性の課題**: 大規模モデルや新しいタスクへの適用可能性にはさらなる検証が必要。

---

## 今後の展望

本研究の結果は、LLMsが直面する課題に対する重要な解決策を提示しました。しかし、以下の課題が残されています。

1. **効率化**: フレームワークの計算コストを削減する方法。
2. **拡張性**: 他の分野（教育、金融など）への応用可能性の検証。
3. **大規模モデルでの検証**: GPT-4やGeminiのような大規模モデルでの適用。

---

## 結論

AFICEフレームワークは、LLMsの信頼性と一貫性を向上させる重要な貢献を果たしました。この研究は、今後の対話型AI開発における基盤となる可能性を秘めています。

この記事が、研究や実務に役立つことを願っています。ご質問やコメントがありましたら、ぜひお寄せください。
FastAPIでSPAのルーティングに対応させる

# どういうことか

`index.html`とstaticファイルが同じ階層にあり、かつSPAである場合のルーティングに少々手こずったのでメモしておく。

どうしてこうなったかというと、使用しているプラグインの問題でビルドの出力先を変更できなかったのだ。

### ディレクトリ構造

```text
├── front
│   └── ... # Vueの開発環境
├── static
│   ├── assets
│   │   ├── index-C1jF7hUS.css
│   │   └── index-PL200lct.js
│   ├── index.html
│   ├── manifest.webmanifest  <-こいつらが問題
│   ├── pwa-512x512.png       <-こいつらが問題
│   ├── registerSW.js         <-こいつらが問題
│   ├── sw.js                 <-こいつらが問題
│   ├── workbox-0225851e.js   <-こいつらが問題
│   └── ...
└── main.py # FastAPIサーバーファイル
```

# 結論

```python
from fastapi import FastAPI, Request
from fastapi.staticfiles import StaticFiles
from fastapi.exceptions import HTTPException
from fastapi.templating import Jinja2Templates

app = FastAPI()

@app.get("/api/hello")
def hello():
    return {"message": "Hello World"}

@app.get("/api/goodbye")
def goodbye():
    return {"message": "Goodbye!"}

app.mount("/", StaticFiles(directory="static"), name="static")
templates = Jinja2Templates(directory="static")
@app.exception_handler(404)
def spa(request: Request, _: HTTPException):
    return templates.TemplateResponse(request=request, name="index.html")
```

## 解説

1. `/api`など、routeに登録されているか確認
1. `static`フォルダの中に存在するか確認
1. 上記のどれにも当てはまらなければ、`index.html`を返却

このようにすることで、バックエンド側でリソースが見つかればそれを返し、見つからなければSPAにルーティングを投げる、という処理を実装することができる。
【AWS SAP】Route53のルーティングポリシー表

# Route53のルーティングポリシー表
| ルーティングポリシー       | 一言    | 概要                                                                 | 利用例                                                                                                     |
|----------------------------|---------|----------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------|
| シンプルルーティング       | 基本     | 単一のリソースにトラフィックを送る基本的なルーティング。             | 小規模なウェブサイトやアプリケーションで、特定のEC2インスタンスにトラフィックを送る場合など。              |
| フェイルオーバールーティング | 障害時   | プライマリリソースが利用できない場合にセカンダリリソースに切り替える。 | プライマリのウェブサーバが障害発生時にバックアップサーバを利用する場合。                                  |
| 加重ルーティング           | 比率     | 各リソースに特定の比率でトラフィックを分散する。                     | A/Bテストや、複数のリソース間でトラフィックを割合に応じて分散する場合。                                    |
| レイテンシールーティング   | 早い     | 最も低いレイテンシーのリソースにトラフィックを送る。                  | グローバルユーザーが最も近いリージョンのリソースを利用できるようにする場合。                              |
| 地理的ルーティング         | 地域     | ユーザーの地理的位置に基づいてリソースを選択。                       | 日本のユーザーを東京リージョン、米国のユーザーを北バージニアリージョンに誘導する場合。                    |
| 地理プロキシルーティング   | 柔軟     | IPアドレスに基づいて地理的に最適なリソースを選択。                   | IPアドレス範囲を考慮しながら特定のエリア向けサービスを提供する場合。                                      |
| 複数値回答ルーティング     | 負荷分散 | 複数のリソースのうち、ランダムに選ばれた値を返す。                   | 高可用性を目的として複数のリソースを設定し、ランダムに返却することで負荷分散を行う場合。                  |

## 補足

1. **シンプルルーティング**  
   他のポリシーを使わない場合のデフォルトで、最も基本的なルーティング方式です。トラフィックを特定のリソースに集約します。

2. **フェイルオーバールーティング**  
   Route53のヘルスチェックと連携して動作します。プライマリリソースがダウンしたと判断された場合、セカンダリリソースに自動的にトラフィックを転送します。

3. **加重ルーティング**  
   各エンドポイントに割り当てる「重み」を設定します。例えば、エンドポイントAに70%、エンドポイントBに30%と設定可能です。

4. **レイテンシールーティング**  
   ユーザーとAWSリージョン間のレイテンシーを計測し、最速の応答時間を持つリソースにトラフィックを送ります。

5. **地理的ルーティング**  
   地域ごとの法規制やサービスのカスタマイズに適しています。

6. **地理プロキシルーティング**  
   IPアドレスベースでトラフィックを制御し、地理的な制約を超えて柔軟なルーティングが可能です。

7. **複数値回答ルーティング**  
   高可用性と負荷分散を目的とした設定で、ユーザーが利用可能な複数のリソースのいずれかをランダムに返します。
アメダスの気温・湿度をもとに室内想定湿度を求めて TC001 に表示させよう

## 水蒸気量と飽和水蒸気量から想定湿度を求める
気象庁の観測では従来、湿度（相対湿度）は気象台や特別地域観測所のみで測定されていたが、近年は気温を観測するアメダスで湿度計の設置が進んでいる。
今回はこの湿度情報の使い方を考えてみる。

冬場の室内はとかく乾燥しがちだが、外気をそのまま室内の暖かい環境に持ってきた場合、どの位の湿度になるかは水蒸気量（絶対湿度と呼ばれることもある）から求めることができる。

水蒸気量は当該気温における飽和水蒸気量と湿度から求めることができるが、以下のサイトにその式が掲載されている。

https://www.processsensing.co.jp/blog/blog4_calculate_humidity/

もし20℃の室内に気温5.6℃・湿度84%の空気を持ってきた時、その湿度は
```math
室内の湿度 = \frac{外気の水蒸気量}{20℃の飽和水蒸気量} \times 100 
= \frac{5.6℃の飽和水蒸気量 \times \frac{湿度84\%}{100}}{20℃の飽和水蒸気量}  \times 100 \approx \frac{7.08 \times \frac{84}{100}}{17.31}  \times 100 \approx 34\%
```
となる。

この想定湿度を Node-RED で計算し、 TC001 に表示させることとする。

## JavaScript はべき乗の表記に注意
フロー図と calculate フローは以下の通り。
![roomhum1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3943774/0c0e5657-8ef9-0509-e832-b61e7433e344.png)

```javascript: calculate
var amedas_array = msg.payload;
var point = "44132"; //東京
var room_temp = 20; //室温20℃を想定
var temp = amedas_array[point].temp[0];
var humidity = amedas_array[point].humidity[0];
var swv_room = 217 * ( 6.1078 * 10 ** ( 7.5 * room_temp / ( room_temp + 237.3 ) ) ) / ( room_temp + 273.15 )
var wv_temp = 217 * ( 6.1078 * 10 ** ( 7.5 * temp / ( temp + 237.3 ) ) ) / ( temp + 273.15 ) * humidity / 100
var room_hum = Math.floor(wv_temp / swv_room * 100)
temp = temp.toFixed(1) + 'C';
humidity = humidity + '%';
room_hum = room_hum + '%';
msg.payload = [{ "text": temp, "icon": "tokyo" }, { "text": humidity, "icon": "tokyo" }, { "text": room_hum, "icon": "20deg" }];
return msg;
```
JavaScript の場合、べき乗表現は `^` ではなく `**` になるので注意が必要である。
それ以外はそのまま前述サイトの式を入れてやればよい。
room_temp の値を実態に合わせ変更することで、任意の室温の想定湿度を表示することができる。
Node-RED に気温計のデータを自動入力できるのであれば、その値を代入するとよいだろう。

:::note warn
水の飽和水蒸気量を使っているため、外気温が0℃未満や降雪時の水蒸気量算出は正確性が保証できない。
:::

![roomhum2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3943774/25b4d35c-f96a-9e3b-606c-4fcc3a182035.png)
![roomhum3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3943774/945dca5b-713b-5814-5c84-a3ed51368a2c.png)
![roomhum4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3943774/315ab266-481e-6d90-f85c-2b2aa523797f.png)
【AWS SAP】インターネットを経由せずにEC2からS3への安全なアクセス方法

# 概要
AWSのEC2を使ってアプリケーションを動かしており、そのアプリケーションがS3（クラウドストレージ）にファイルを保存する必要があります。

条件は以下の通り。

## 条件
1. **パブリックインターネットを使わないこと**  
   - インターネットを経由せず、AWS内のプライベートネットワークだけでデータをやり取りする。
　
2. **特定のS3バケットだけにアクセス制限**  
   - アプリケーションが使えるS3バケットを限定し、それ以外にはアクセスさせない。

## 解決方法
この条件を満たすために、以下の手順を実行する必要があります。

1. **VPCエンドポイントを作成する**  
   - VPCエンドポイントを使うと、インターネットを経由せずにS3と通信できます。
　
2. **エンドポイントポリシーを設定する**  
   - このポリシーで、どのS3バケットにアクセスを許可するかを指定します。
　
3. **IAMロールを設定する**  
   - EC2にIAMロールを割り当て、S3へのアクセスを管理します。
　
4. **S3バケットポリシーを設定する**  
   - バケット側でもアクセス制御を行い、指定された条件以外のアクセスを拒否します。

## ポイント
- AWSの「プライベートネットワークを使う仕組み（VPCエンドポイント）」を利用することで、セキュリティを高めています。
- 「誰がどのS3バケットにアクセスできるか」を、複数の仕組み（IAMロール、ポリシー）で厳密に管理します。

## フロー図
フロー図で表すと以下になります。

```mermaid
sequenceDiagram
    participant IAM as IAM サービス
    participant EC2 as EC2 インスタンス
    participant VPC as VPC エンドポイント
    participant S3 as S3 バケット
    participant Policy as バケットポリシー

    IAM->>EC2: IAM ロールの割り当て
    EC2->>VPC: VPC エンドポイント経由でS3への接続
    VPC->>S3: 特定のS3バケットへのリクエスト
    S3->>Policy: バケットポリシーでVPCエンドポイントからのアクセスを確認
    Policy-->>S3: アクセス許可または拒否を返却
    S3-->>VPC: 許可されたデータのレスポンス
    VPC-->>EC2: S3からのレスポンスを返却

    note over EC2, VPC: EC2からのアクセスはIAMロールとVPCエンドポイントに制限
    note over S3, Policy: バケットポリシーがアクセス元をVPCエンドポイントに限定
```
ViGiL3D: 言語多様性を活かした次世代3Dビジュアルグラウンディングの挑戦

# ViGiL3D: 言語的多様性を考慮した3Dビジュアルグラウンディングの新しい基準

近年、3Dビジュアルグラウンディング（3DVG）は、ロボット工学、拡張現実（AR）、ビジュアル質問応答（VQA）など、多くの応用分野で注目されています。本記事では、この分野に新たな基準を提示する「ViGiL3D: A Linguistically Diverse Dataset for 3D Visual Grounding」という研究を紹介します。この研究は、現行のデータセットの課題を克服し、3DVGモデルの性能を多様な視点から評価するための画期的な診断データセットを提案しています。

---

## 論文情報

- **タイトル**: ViGiL3D: A Linguistically Diverse Dataset for 3D Visual Grounding  
- **リンク**: [https://arxiv.org/abs/2501.01366](https://arxiv.org/abs/2501.01366)  
- **発表日**: 2025年1月2日  
- **著者**: Austin T. Wang, ZeMing Gong, Angel X. Chang  

---

## 背景と目的

### 3Dビジュアルグラウンディングの概要と重要性

3Dビジュアルグラウンディングは、自然言語の記述をもとに3D空間内の特定の物体を特定するタスクです。この技術は、2D画像を対象とする従来のビジュアルグラウンディングよりも複雑であり、より現実的なシナリオに対応可能です。

例えば：
- **家庭用ロボット**: 「テーブルの左側にある青い椅子を持ってきて」といった指示への対応。
- **建築設計とインテリアデザイン**: 3Dシーン内の特定のオブジェクトの効率的な検索。
- **拡張現実（AR）**: 仮想オブジェクトと現実世界のシームレスな統合。

しかし、3DVGは技術的にもデータ的にも多くの課題を抱えています。

### 現行の課題

1. **言語的多様性の欠如**:
   - 既存データセット（例: ScanRefer, Nr3D）はシンプルな記述に偏りがあり、否定文や複雑な関係性を含むプロンプトを十分にカバーしていません。

2. **モデル評価の制限**:
   - 現行モデルは、訓練データの分布を超えた新しい言語パターンに対して性能が著しく低下します。

3. **データセットの規模不足**:
   - ScanReferやNr3Dは700シーン程度であり、より多様な環境をカバーするには不十分です。

### ViGiL3Dの提案

この背景を受けて、ViGiL3Dは以下を目標に構築されました：
1. 言語的多様性を反映したデータセットの提供。  
2. モデルの弱点を診断的に評価する手法の確立。  
3. 実世界での応用可能性を高めるモデル設計の支援。

---

## ViGiL3Dの構成と特徴

### データセットの構造

1. **シーン数とプロンプト数**:
   - ScanNetおよびScanNet++を基盤に、35のシーンを選択し、350のプロンプトを収録。

2. **言語パターンの多様性**:
   - **否定文**: 「緑色ではない椅子を探して」というような文。
   - **関係性**: 「テーブルの右側にある最も背の高い椅子」。
   - **属性記述**: 「金属製で四角い形のオブジェクト」。

3. **プロンプトの構成例**:
   - **シンプルな記述**: 「窓の近くにある青い椅子」。
   - **複雑な記述**: 「中央のテーブルに置かれた赤いボールの隣にある、本棚の一番上の緑の箱」。

### データセットの意義

- ViGiL3Dは、従来のデータセットでは評価できなかった言語的多様性をカバーし、3DVGモデルの真の性能を明らかにします。
- モデルが特定の言語パターンにどのように対応するかを診断し、改善のためのデータを提供します。

---

## 実験結果と考察

### 評価モデル

以下のモデルが評価対象となりました：
1. **CLIPベースモデル**: OpenScene, LERF  
2. **LLMベースモデル**: ZSVG3D, LLM-Grounder  
3. **専用3DVGモデル**: 3D-VisTA, 3D-GRAND, PQ3D  

### 結果の概要

1. **全モデルの性能低下**:
   - ViGiL3Dのプロンプトに対し、F1スコアが平均15%以上低下。特に否定文や複雑な関係性に対する精度が低い。

2. **モデル間の比較**:
   - **ZSVG3D**: 複雑な関係性には強いが、属性記述には弱い。
   - **3D-GRAND**: 否定文に対して他モデルよりも高い精度を示す。

3. **具体的な数値**:
   - 例: PQ3DのF1スコアはScanReferで84.2%だったが、ViGiL3Dでは59.8%に低下。

---

## 今後の課題と展望

### 研究の限界

1. **データセットの規模**:
   - 現在の350プロンプトでは、多様なシナリオを十分にカバーしていません。
2. **多言語対応の欠如**:
   - 英語以外の言語を対象にしたデータセット構築が必要。

### 将来的な方向性

1. **応用分野の拡大**:
   - ViGiL3Dのアプローチは、ロボティクス、AR、VQAなどの分野での革新を促進します。
2. **モデルの汎用性向上**:
   - 言語と視覚の統合をさらに進め、実世界での汎用性を高める研究が期待されます。

---

この記事が皆さんの研究に役立つことを願っています。質問やフィードバックはお気軽にお寄せください！
PHP memcachedをインストールする

PHP 8.4の環境に、memcachedをインストールする方法。
libmemcachedは、古いバージョンのソースのため新しいgccでは、ワーニングが多々表示されるのと、一部コンパイルエラーが発生するためパッチを適用します。


### 1.libmemcachedのインストール
```
cd /usr/local/src
mkdir memcached
cd memcached
wget https://launchpad.net/libmemcached/1.0/1.0.18/+download/libmemcached-1.0.18.tar.gz
tar xvzf libmemcached-1.0.18.tar.gz
cd libmemcached-1.0.18
make
make install
```
```
#パッチをダウンロードする
#https://github.com/gentoo/gentoo/blob/master/dev-libs/libmemcached/files/libmemcached-1.0.18-gcc7.patch
をダウンロードする
このファイルを、/usr/local/src/memcachedに配置する
```
```
#パッチがない場合
cat > /usr/local/src/memcached/libmemcached-1.0.18-gcc7.patch << EOF
gcc-7 fails the build as:
  clients/memflush.cc: In function 'int main(int, char**)':
  clients/memflush.cc:42:22: error: ISO C++ forbids comparison between pointer and integer [-fpermissive]
   if (opt_servers == false)
                      ^~~~~

opt_servers is declated as 'static char *opt_servers= NULL;'
diff --git a/clients/memflush.cc b/clients/memflush.cc
index 8bd0dbf..7641b88 100644
--- a/clients/memflush.cc
+++ b/clients/memflush.cc
@@ -39,7 +39,7 @@ int main(int argc, char *argv[])
 {
   options_parse(argc, argv);
 
-  if (opt_servers == false)
+  if (!opt_servers)
   {
     char *temp;
 
@@ -48,7 +48,7 @@ int main(int argc, char *argv[])
       opt_servers= strdup(temp);
     }
 
-    if (opt_servers == false)
+    if (!opt_servers)
     {
       std::cerr << "No Servers provided" << std::endl;
       exit(EXIT_FAILURE);
EOF
```
パッチを適用する
```
cd /usr/local/src/memcached/libmemcached-1.0.18
patch -p1 < ../libmemcached-1.0.18-gcc7.patch
```
ビルド+インストールする
```
make
make install
```

### 2.memcachedのインストール
```
cd /usr/local/src
wget https://pecl.php.net/get/memcached-3.3.0.tgz
tar xvzf memcached-3.3.0.tgz
cd memcached-3.3.0
/usr/local/bin/phpize
./configure
make
make install
```
「/usr/local/lib/php/extensions/no-debug-zts-20240924/」に「memcached.so」が配置される。


### 3.memcacheをインストール
```
cd /usr/local/src
wget https://pecl.php.net/get/memcache-8.2.tgz
tar xvzf memcache-8.2.tgz
cd memcache-8.2
/usr/local/bin/phpize
./configure
make
make install
```
「/usr/local/lib/php/extensions/no-debug-zts-20240924/」に「memcache.so」が配置される。

php.iniを編集する
```
vi /usr/local/lib/php.ini
---
extension=memcached.so
extension=memcache.so
---
複数視覚エンコーダの統合でビデオ理解を革新：MERVの詳細解説

# Unifying Specialized Visual Encoders for Video Language Models

今回は、最新の研究成果である「Unifying Specialized Visual Encoders for Video Language Models」という論文をご紹介します。この研究は、単一の視覚エンコーダに依存していた従来のビデオ大規模言語モデル（VideoLLMs）の限界を克服し、複数の視覚エンコーダを統合することで、映像理解の精度と汎用性を大幅に向上させる革新的な手法を提案しています。

---

## 論文情報

- **タイトル**: Unifying Specialized Visual Encoders for Video Language Models
- **リンク**: [arXiv:2501.01426v1](https://arxiv.org/abs/2501.01426v1)
- **発表日**: 2025年1月2日
- **著者**: Jihoon Chung, Tyler Zhu, Max Gonzalez Saez-Diez, Juan Carlos Niebles, Honglu Zhou, Olga Russakovsky
- **DOI**: 未記載

---

## 背景と目的

### ビデオ大規模言語モデル（VideoLLMs）の進化
大規模言語モデル（LLMs）は、画像やビデオを自然言語で理解・生成する能力を持つことで、幅広い分野で応用が進んでいます。特に、ビデオLLMsは以下のような応用例を持ちます：
- ビデオ要約やキャプション生成
- 映像質問応答（Video QA）
- ビデオ内の行動や物体の認識

従来のVideoLLMs（例: Video-LLaVAやSeViLA）は、単一の視覚エンコーダを使用するアプローチを採用していました。しかし、この手法には以下のような制約がありました：
1. **視覚情報の限界**: 各エンコーダには得意分野があるものの、それ以外のタスクでは性能が劣る。
2. **統合の非効率性**: 言語空間と視覚空間の整合性を保つために、大規模な学習や調整が必要。

本研究では、これらの課題を解決するために「MERV（Multi-Encoder Representation of Videos）」という新しいアーキテクチャを提案します。

### 提案手法の意義
MERVの核心は、複数の視覚エンコーダ（DINOv2, ViViT, SigLIP, LanguageBind）の特性を統合し、スパチオ・テンポラルな調整を行うことで、タスク間の汎用性と性能を両立する点にあります。このアプローチにより、個別エンコーダの限界を克服しつつ、計算コストを最小化することが可能になります。

---

## 研究の焦点

### 使用エンコーダとその役割
1. **DINOv2**:
   - 特徴: ローカルからグローバルなオブジェクトの相関を学習。
   - 強み: 静的なシーンや物体認識に優れる。
   - 弱み: 言語との整合性が弱い。

2. **ViViT**:
   - 特徴: 時系列情報を重視した映像のフレーム間依存関係を学習。
   - 強み: 動作認識や長期的な時系列解析に優れる。
   - 弱み: 言語空間との接続が限定的。

3. **SigLIP**:
   - 特徴: 画像と言語の関連性を学習するコントラストモデル。
   - 強み: 視覚と言語の関連を理解し、セマンティクスを捉える。
   - 弱み: 細部の視覚情報には不向き。

4. **LanguageBind**:
   - 特徴: マルチモーダルな学習（ビデオ、言語、赤外線など）。
   - 強み: 高次元のセマンティクスを理解。
   - 弱み: 時系列解析には劣る。

---

## 実験の概要と結果

### 実験設定
- **データセット**: MSVD-QA, MSRVTT-QA, ActivityNet-QA, Perception Testなどのベンチマーク。
- **評価指標**: 精度（Accuracy）とスコア（Score）。

### 結果の詳細
1. **精度向上**:
   - **ActivityNet-QA**: Video-LLaVA（47.08%）を上回り、50.87%を達成。
   - **Perception Test**: SeViLA（46.2%）に対し、48.4%の精度を記録。
   - **Something-Something v2**: 時系列タスクでViViTの強みを活用。

2. **計算効率**:
   - 並列処理により、エンコーダの増加による負荷を最小限に抑制。
   - 訓練時間を43%短縮（Video-LLaVAと比較）。

### 重要な洞察
- **複数エンコーダの補完性**:
   - 各エンコーダの特性を統合することで、単一エンコーダの限界を克服。
   - 例: DINOv2の静的シーン認識とViViTの動作認識の補完。

- **スパチオ・テンポラルな調整の効果**:
   - 特徴の空間・時間整合性を高めることで、ビデオ理解の精度を向上。

---

## 理論と応用の展望

### 実務への応用可能性
1. **監視カメラの映像解析**:
   - 異常検知や行動認識の精度向上。
2. **教育コンテンツの自動生成**:
   - ビデオ要約やインタラクティブなQAシステム。
3. **医療分野**:
   - 動作解析や患者モニタリングにおける精度向上。

### 今後の課題と展望
- **エンコーダの選択基準**:
   - 異なるタスクに最適化されたエンコーダの追加可能性。
- **他モダリティへの拡張**:
   - 音声やセンサーデータを統合する可能性。
- **計算コスト削減**:
   - より効率的なアーキテクチャの設計。

---

この記事が、皆さんの研究や実務に役立つことを願っています。ご質問やフィードバックがありましたら、コメント欄にお寄せください。