OmniAICreator/Qiita-1.07M huggingface dataset:
高卒→ニート→フリーター→職業訓練→SESの教科書


こんちくわ。
崖っぷちのbekuokaです。

アウトプットの練習として、お恥ずかしいですが俺の人生の一部を共有します。
職業訓練以降でIT系な話をしますので、前半は軽く、自己紹介のようなものです。

※タイトルはふざけています。教科書のようなレベルの高いロードマップ等ではありません（笑）
※記事には一部ネガティブな表現を含みます。

# 1. ニート時代（18歳→19歳）
## 状況
・　高校卒業後、特にやりたいことがなく、1年間ニート生活。
・　毎日家にいて、ロードバイクを漕ぐことで体重は減少。
・　それ以外に特筆すべき活動はなく、本当に何もしていない時期。

## ポイント
・　ニート期間が長引くと就職がより難しくなるため、この期間は短くしたい。
・　まずは興味のある分野を見つけることが最優先。


# 2. フリーター時代（19歳→20歳）
## 状況
・　スーパーマーケットで品出しのアルバイト生活。
・　偶然見つけたProgateでプログラミングに興味を持ち、独学を開始。
・　独学の方法は主にインターネットの無料教材を利用。

## ポイント
・　○○入門とか、初心者用のものから始めると良い（当たり前だけど、最初の一冊は重要）


# 3. 職業訓練時代（20歳→21歳）
## 状況
・　IT系の職業訓練校（6か月）に入所し、プログラミングとかを学ぶ。
　└学ぶことは幅広く、内容（下記）もそれなりに難しかったです。
 
・　プログラミング（Java）
　└基本文法、ネットワーク通信、アンドロイドアプリなどを学ぶ授業がありました。
　└ラムダ式やストリームAPIとか、一部内容がJava Goldとかの範囲だった。（笑）

・　ネットワーク（TCP/IPとかの話）
　└ネットワークのざっくり全体像を学ぶ授業がありました。
　└Cisco機器を触ってのローカルネットワークの構築をしました。

## ポイント
・　ただ授業を受けているだけでは辛くなるので、自主学習もすること。
・　プログラミングに関しては、「こんなことが実現できるのか」と知ることだけでも十分。


# 4. SES時代（21歳→22歳）
## 状況
・　SES企業に就職し、研修（3か月）を受ける。
　└Java基本問題,JSP/ServletでWebアプリのコーディングを行いました。
　└Java SilverとOracle Bronze DBAを取得しました。

  ## ポイント
・　研修で扱う技術の資格を取っておきたい。研修もスムーズにいくので良い感じになる。
　└職業訓練で挫折しなければここでも大丈夫（企業の研修レベルによるので一概には言えませんが...）

 # 5. それから
 ## 状況
・　2年目
　└VBAとかPythonでRPAを担当しました。
　└Javaを教える機会があったため、Java Goldを取得しました。
 
・　３年目（現在）
　└PythonとかでRPAを担当しました。
　└この辺りでモチベーション低下、自分のキャリアに不安を感じるように...


# まとめ
・　少しずつでも独学を続けること
・　職業訓練を有効活用すること


これからIT業界を目指す人の参考になれば幸いです。

初のアウトプットに協力してくれたChat GPT スペシャルサンクス。
【C++】Visual Studioを用いてGoogleTestでコードカバレッジを確認する

## 1. 概要
GoogleTestを用いて単体試験など行った際に、コードカバレッジがどれくらい取れているか確認する方法を紹介します。

## 2. 手順
①Visual StudioでGoogleTestのプロジェクトを起動します。

②テスト対象のコードを記述
今回は以下のような、入力によって分岐するだけの処理を使います。
```c++
bool Coverage(int val) {
	switch (val) {
	case 0: {
		puts("0");
	}break;
	case 1: {
		puts("1");
	}break;
	case 2: {
		puts("2");
	}break;
	case 3: {
		puts("3");
	}break;
	case 4: {
		puts("4");
	}break;
	case 5: {
		puts("5");
	}break;
	case 6: {
		puts("6");
	}break;
	case 7: {
		puts("7");
	}break;
	case 8: {
		puts("8");
	}break;
	case 9: {
		puts("9");
	}break;
	default: {
		return false;
	}break;
	}

	return true;
}
```

③テストコードの記述
以下のテストコードで、カバレッジを確認してみます。
```c++
TEST(coverage, sample) {
	EXPECT_TRUE(Coverage(0));
	EXPECT_TRUE(Coverage(2));
	EXPECT_TRUE(Coverage(3));
	EXPECT_TRUE(Coverage(8));
}
```

④コードカバレッジの確認
「メニューバー->テスト->すべてのテストのコードカバレッジを分析」を選択します。
![スクリーンショット 2025-03-25 161408.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3809388/26f23b9b-9c50-4403-9a14-17cae9dde9f9.png)

出力タブに結果が表示されます。検索バーで対象の関数を検索すると、カバー済みの行数や未カバーの行数を確認できます。
![スクリーンショット 2025-03-25 162602.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3809388/3d9d34a1-59ef-4d83-a2a9-45fae0d845f1.png)

⑤色分け表示
出力タブにて「コードカバレッジの色分け表示」を選択します。
![スクリーンショット 2025-03-25 162653.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3809388/80c1db24-ffb0-4337-b251-4b89cc83dd79.png)

カバーされている行を目視で確認できます。
![スクリーンショット 2025-03-25 162748.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3809388/179aaf0c-bda7-4da8-b9f6-d15641e4fee7.png)
【実践編】今すぐ使える！AI技術の最先端プラットフォーム完全ガイド

## はじめに

近年、テクノロジーの急速な進歩により、人工知能（AI）は多くの分野で不可欠な要素となっています。本シリーズ「AI技術の革新シリーズ 総合ガイド：プラットフォームから実践への挑戦」は、先進の自動言語モデル、LangChain、RAG、Python、Rust、Next.js、そしてAWSなど、最新の技術を網羅しながら、実践的な知識と経験を共有することを目的としています。

このシリーズでは、以下のようなトピックを取り上げます。

- **最先端の自動言語モデルとMistral AI**  
  自動言語モデルの基本概念と、Mistral AIの特性や実用例について解説します。

- **RAG（Retrieval-Augmented Generation）の活用**  
  検索データと生成技術を組み合わせたRAGの概要と、その応用例（チャットボットや質問応答システムなど）について紹介します。

- **LangChainによるデータパイプライン構築**  
  LangChainを利用して、AIアプリケーションのためのデータ処理パイプラインを構築する方法を実例を交えて解説します。

- **PythonによるAIアプリケーション開発**  
  TensorFlow、PyTorch、Hugging Faceなど、Pythonのライブラリを活用したAIアプリケーションの構築手法を紹介します。

- **Rustを用いた高パフォーマンスなAIシステム**  
  Pythonと比較しながら、Rustの特性やその優位性、実際のユースケースを交えて解説します。

- **Next.jsによるフロントエンド開発とAI APIの統合**  
  モダンなWebアプリケーションフレームワークであるNext.jsを用いて、AI APIとの連携方法やユーザーインターフェースの実装方法を説明します。

- **AWS上でのAIアプリケーションの展開**  
  AWSの各種サービス（SageMaker、Lambda、API Gatewayなど）を利用して、AIアプリケーションを効率的に展開する方法と、そのメリットを解説します。

- **AWS LambdaとAPI Gatewayを使ったAPI構築**  
  AWS Lambdaを用いたサーバーレスアーキテクチャの活用と、API Gatewayを通じたAPI構築の実例を示します。

- **AWSでのコストとパフォーマンス最適化**  
  オートスケーリング、スポットインスタンス、キャッシュ戦略など、AWS上での運用コストとパフォーマンスを最適化するための実践的な手法を共有します。

- **PythonとRustの比較：AIアプリケーション開発における選択肢**  
  両言語の長所と短所、具体的な使用シーンを比較しながら、どのようなケースでどちらを選択すべきかを検討します。

- **未来のAI技術：最新トレンドと展望**  
  最新の技術動向、今後の展開、そして実際にAI技術を活用していく上でのアドバイスやリソースについて紹介します。

## シリーズの目的と対象読者

本シリーズは、エンジニア、開発者、そしてテクノロジーに興味を持つすべての方々に向けたものです。  
主な目的は以下の通りです：

- **専門的かつ実践的な知識の共有**  
  最新技術の背景、実装例、そして実際のプロジェクトでの経験を通じ、読者のスキルアップを支援します。

- **技術の統合と応用**  
  バックエンド（Python、Rust）からフロントエンド（Next.js）およびクラウド（AWS）まで、各技術がどのように連携し、総合的なAIシステムを実現するのかを解説します。

- **実践的なハンズオンガイド**  
  コードサンプル、デモ、ケーススタディを豊富に取り入れ、すぐに実装に移せる内容を提供します。

## これからの展開

今後の各記事では、以下のトピックに焦点を当て、具体的な手法や実践例を詳しく解説していきます：

1. [**自動言語モデルとMistral AIの基礎と実践**](https://qiita.com/BNR-Long/items/7f5dbb5a730817e8b446)  
2. [**RAGによる検索と生成技術の融合**](https://qiita.com/BNR-Long/items/5862348bc8c7e096fbe0) 
3. [**LangChainを活用したデータパイプラインの構築**](https://qiita.com/BNR-Long/items/a92cc57ed66022e0f451)
4. [**PythonでのAIアプリケーション開発入門**](https://qiita.com/BNR-Long/items/96092145dca4031de6f0)
5. [**Rustで実現する高パフォーマンスなAIシステム**](https://qiita.com/BNR-Long/items/3314621ec2740d1c4123)  
6. [**Next.jsを用いたフロントエンドとAI APIの統合**](https://qiita.com/BNR-Long/items/c548be6285755da016e8)  
7. [**AWSによるAIアプリケーションの展開と運用**](https://qiita.com/BNR-Long/items/d9562b9ea464b4334386)  
8. [**AWS LambdaとAPI Gatewayで作るサーバーレスAI API**](https://qiita.com/BNR-Long/items/52076d28804fc0723039)
9. [**AWSでのコストとパフォーマンス最適化の実践例**](https://qiita.com/BNR-Long/items/2e70417e2609e8781020) 
10. [**PythonとRustの比較分析：どちらを選ぶべきか？**](https://qiita.com/BNR-Long/items/1d5e355975cb74526bc4)  
11. [**未来のAI技術とその展望**](https://qiita.com/BNR-Long/items/899d1276a412ad5d1520)

## 結びに

本シリーズ「AI技術の革新シリーズ 総合ガイド：プラットフォームから実践への挑戦」は、最新の技術知識と実践的なノウハウを共有することにより、皆様のプロジェクトやキャリアにおいて大きな助けとなることを目指しています。今後の記事もどうぞご期待ください。
スクレイピングでデータ収集を自動化！おすすめツール5選

# Webスクレイピングとは

Webスクレイピング（Web上のデータ抽出またはデータクローリングとも呼ばれる）は、インターネットからデータを抽出し、Web上の情報を構造化フォーマットに変換して保存・分析するWeb技術です。

Webスクレイピング技術は、Webクローラー（Webスクレイピングボット）を通じて実装されます。しかがって、プログラミングの知識のない人にとってはこの作業は難しいものです。幸いなことに、現在では多くのノンコードツールがWeb上のデータ抽出を自動化しています。

これらのツールのほとんどは、シンプルな操作で設定でき、それぞれ独自の特徴を持っています。クラウドベースのツールの場合、サーバーの設定なしにアカウントを作成してすぐに利用を開始できます。

## おすすめWebスクレイピングツール6選

### 1. Octoparse

![Octoparseサイト画像.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262932/e54d2ef8-adff-4302-b485-28bbbb6f6225.png)

**概要と特徴**

[Octopparse](https://www.octoparse.jp/)は、自動Webページ認識機能を備えたノンコードのクラウドベースWebスクレイピングツールです。プログラミングの知識がなくても、マウス操作だけでWeb クローラーを簡単に作成できます。抽出されたデータは、データベースやスプレッドシートに直接保存でき、手動でのコピー＆ペーストが不要になります。

Octopparseは、Google、Yahoo 、Amazon、マイナビ求人、Twitter/Xなど、多数のテンプレートを提供しており、ユーザーは対象URL、キーワードなどのパラメータを入力するだけでスクレイピングを実行できます。

クラウドプラットフォームとして、Octopparseは数百のクラウドサーバーによる24時間365日のデータ抽出をサポートし、スクレイピング中にブロックされるリスクを大幅に軽減します。コアツールに加えて、カスタマイズされたWebデータサービスも提供し、日本のユーザー向けに日本語サポートも充実しています。

**おすすめ対象**：プログラミングの知識や経験のない個人や企業で、オンラインデータリストを抽出する必要がある方。

### 2. Apify

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262932/02bdff3f-2829-468e-9861-7e0cab22a615.png)

**概要と特徴**

[Apify](https://apify.com/)は、クラウドベースのWebスクレイピングプラットフォームで、データ抽出のためのさまざまなソリューションを提供しています。Web上の情報を簡単に収集できるツールを提供していますが、使いこなすにはある程度の技術的知識が必要です。

プラットフォームには1000以上のWebサイト用テンプレートがあり、JavaScriptでレンダリングされたページも抽出可能です。ただし、無料プランには制限があり、本格的に利用するには有料プランへのアップグレードが必要です。

データ分析ツールとの統合や、多様なデータエクスポート形式（JSON、CSV）をサポートしていますが、複雑な抽出タスクには専門的な設定スキルが求められます。

**おすすめ対象**：ある程度の技術的背景を持つデータアナリストや、柔軟なスクレイピングソリューションを探している企業。

### 3. Browse.ai

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262932/1d60f49c-f34c-4345-a06d-dc5e2b39b6b1.png)

**概要と特徴**

[Browse.ai](https://www.browse.ai/)は、データ抽出を簡略化することを目的としたAIベースのWeb スクレイピングツールです。ユーザーフレンドリーなインターフェースを提供し、プログラミング知識がなくてもある程度のデータ抽出が可能です。

抽出プロセスをビデオのように録画して自動化できる点が特徴的ですが、複雑なWebサイトや動的なコンテンツの抽出には限界があります。無料プランでは機能が制限され、本格的な利用には有料プランが必要です。

AIによる要素識別機能はありますが、完全に正確というわけではなく、手動での調整が必要な場合もあります。

**おすすめ対象**：簡単なデータ抽出タスクを持つ個人や小規模チーム。

### 4. Bright Data

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262932/1db9b82b-2447-4364-8771-65ffba35b1c0.png)

**概要と特徴**

[Bright Data](https://brightdata.jp/)は、大規模なプロキシネットワークを持つデータ収集プラットフォームです。高度な機能を提供しますが、価格は比較的高額で、主に大企業や専門的なデータ収集チームに適しています。

複雑なWeb上のデータ抽出に対応し、多様なプロキシオプションを提供しますが、使用には専門的な知識が必要です。柔軟性は高いものの、初心者には難しいツールと言えるでしょう。

データの合法性と倫理性にも注意を払っており、各国の法規制に準拠したデータ収集方法を推奨しています。

**おすすめ対象**：大規模なデータ収集を必要とする企業や、高度なWeb データ抽出ソリューションを探している専門チーム。

### 5. LeapWork

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262932/b5709715-4e31-4759-86de-1e585df54a8d.png)

**概要と特徴**

[LeapWork](https://www.leapwork.com/)は、Web自動化とデータ抽出のためのノーコードプラットフォームです。ドラッグ&ドロップインターフェースにより、技術的スキルがない人でも比較的簡単に使用できます。

複数のWebアプリケーションにまたがる自動化シナリオを作成できますが、非常に複雑なタスクには向いていません。基本的なデータ抽出には適していますが、高度なカスタマイズには限界があります。

企業向けのツールではありますが、小規模チームや個人利用者にも適しています。

**おすすめ対象**：技術的スキルが限られているが、基本的なWeb自動化とデータ抽出を必要とするビジネスユーザー。

## まとめ

各Webスクレイピングツールには、それぞれ長所と短所があります。自分のニーズ、技術スキル、予算に最も適したツールを選択することが重要です。無料プランを試用し、実際の使用感を確認することをおすすめします。
Copilot StudioでDataverseリレーションを使う

こんにちは。

本日はCopilot StudioでDataverseのリレーションを利用した情報の検索ができるのか、動きを確認したいと思います。

Dataverse上にリレーションを張ったテーブルを用意します。
今回は注文を管理するテーブルと注文者の情報を管理するテーブルを扱います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/915932a6-7f87-41c8-a5ec-15ef219425ed.png)

Copilot Studioの概要ページで、ナレッジを追加します。
[ナレッジを追加]をクリック

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/c31dfa05-e89a-43b4-aecf-c7f909d14b24.png)

[Dataverse]をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/5f4475ce-6c12-439b-8927-ed2c7762d968.png)

リレーションを張った２つのテーブルを同時に選択して追加します。
[検索にキーワードを入れ検索]＞テーブルを選択＞[次へ]
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/eb3d948b-4ec2-469a-88b7-b4fc33cd2717.png)


::: note
ここでリレーションを張ったテーブルを別々に追加すると、うまくそのリレーションを識別してくれません。
同時に選択しましょう！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/10668663-04a0-4f6b-9476-0181b7f95f59.png)

:::

[次へ]をクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/5f619515-63da-4996-b8f0-856b79fef49a.png)

[追加]をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/42e75cb9-e30f-46d1-be9c-5e01ebbc74db.png)


隣のテストウィンドウで、動きを確認しましょう！
注文番号からそこに紐づく注文者の情報を聞いてみます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/048d2ffc-5a91-4a23-ac87-4a3fd0f83954.png)

そうすると、しっかりテーブルを横断して検索しに行くことができましたね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/152c63b8-45e6-4521-851f-a28b508f170e.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/c1c05194-6aea-4b79-a0cc-885ebdd0ba8b.png)
New Relic アップデート(2025年2月)

2025年2月のNew Relic のアップデートをまとめて紹介です！Amazon SQSを使った非同期処理の分散トレーシングの紐づけがより容易にできるようになりました！

## [APM] Amazon SQSを使った非同期処理のトレースの紐付けが容易に
Amazon SQSを使った非同期分散処理を行っているアプリで、簡単にトレースコンテキストを送信し、分散トレーシングで処理を可視化できるようになりました。非同期分散処理の中でどこにボトルネックやエラーが発生しているか、これまで以上に迅速に把握できるようになります。
![update202502-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3485441/ee122bfe-1db8-4e0b-922c-b4ae8e85d0b1.png)

## [APM] Javaアプリのログ収集をワンクリックで有効化/無効化
Java APMエージェントのログ収集設定をAPMのUI上で制御できるようになりました。APMエージェントが複数のホストにまたがる場合にも一括でアプリケーションの再起動や再デプロイメントが不要で設定変更が可能です。
![update202502-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3485441/dc3d836d-f565-439a-862e-ce278580fecf.png)

## [Logs] AWS ログと関連するAWS サービスの連携が強化
AWS サービスから取り込まれたログが、ログを出力した特定のAWS サービスに自動的に関連付けされるようになりました。AWS ログ転送統合を使用することで、追加の設定が不要でログと関連するAWS サービスが紐づけされ、調査で必要なログにすぐに辿り着くことができます。
![update202502-3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3485441/80050bfa-557e-4398-bf37-5e05f95c14de.png)

## [APM] DeepSeekの品質、パフォーマンス、コストを最適化
DeepSeekのモデルを利用した生成AIアプリケーションの重要な品質指標をAPMエージェントで観測できるようになりました。DeepSeekに対するリクエストとレスポンスを可視化することで、問題の根本原因を迅速に特定できるだけでなく、他の生成AIモデルとのパフォーマンスやコストの違いを評価して、最適なモデルを選定してコストを最適化することができます。
![update202502-4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3485441/59fb801b-0d6d-4158-8256-a7c7f3d8f021.png)

アップデートの詳細はこちらのブログでご確認ください。
↓↓↓↓↓↓
https://newrelic.com/jp/blog/nerdlog/new-relic-update-202502

- **2025年2月アップデート**
  - APM：Amazon SQSを使った非同期処理のトレースの紐付けが容易に
  - APM：Javaアプリのログ収集をワンクリックで有効化/無効化
  - Logs：AWS ログと関連するAWS サービスの連携が強化
  - APM：DeepSeekの品質、パフォーマンス、コストを最適化
医療における生成モデルと連合学習の最新研究：疾患軌跡から個別化医療まで~NAMヘルスケアレポート


医療分野における人工知能（AI）研究は、患者データの複雑さを理解し、より個別化された医療を実現するための新しい手法を次々と生み出しています。今回は、疾患軌跡のモデリング、多疾患共存の分析、そして異種臨床データセットにおける個別化連合学習に関する3つの先進的な研究を紹介します。これらの研究は、医療データの時間的変化や複雑な関係性を捉え、プライバシーを保護しながら機械学習モデルを改善する方法を提案しています。

## 1. 全身性強皮症における半教師あり生成モデルによる疾患軌跡の分析

著者: Cécile Trottet、Manuel Schürch、Ahmed Allam 他

### 研究の背景と目的

全身性強皮症（SSc）のような複雑な疾患は、時間とともに症状や臨床所見が変化する軌跡を描きます。この研究では、潜在的時間プロセスを使用した深層生成アプローチを提案し、SSc患者の疾患軌跡を包括的に分析することを目指しています。

研究チームは、観察された患者の疾患軌跡を解釈可能かつ包括的な方法で説明する基礎となる生成プロセスの時間的潜在表現を学習することを目的としています。これらの潜在的時間プロセスの解釈可能性を高めるために、確立された医学知識を使用して潜在空間を分離する半教師ありアプローチを開発しました。

### 研究の成果と意義

生成アプローチとSSCの異なる特性に関する医学的定義を組み合わせることで、疾患の新たな側面の発見を促進しています。学習された時間的潜在プロセスは、類似患者の発見やSSc患者軌跡の新しいサブタイプへのクラスタリングなど、さらなるデータ分析と臨床仮説検証に活用できることが示されています。

さらに、この方法により、不確実性の定量化を伴う多変量時系列のパーソナライズされたオンラインモニタリングと予測が可能になります。これは、SSCのような複雑な疾患の個別化医療において重要な進歩を表しています。

この研究の最も重要な点は、医学知識と機械学習を組み合わせることで、疾患の理解を深め、新たな知見を得る可能性を示していることです。特に、時間的な変化を考慮した疾患モデリングは、慢性疾患の管理と予測において非常に価値があります。

## 2. 混合型多疾患共存変分オートエンコーダ：多疾患共存分析のための深層生成モデル

著者: Woojung Kim、Paul A. Jenkins、Christopher Yau

### 研究の背景と目的

多疾患共存（複数の疾患が同時に存在する状態）の分析は、現代医療において重要な課題です。この論文では、混合型多疾患共存変分オートエンコーダ（M³VAE）という、多疾患共存分析の文脈における教師あり次元削減のために開発された深層確率的生成モデルを紹介しています。

このモデルは、この分野における純粋な教師あり手法や教師なし手法の限界を克服するために設計されています。M³VAEは、患者の生存結果を予測するために不可欠な混合型健康関連属性の潜在表現を特定することに焦点を当てています。

### 研究の成果と意義

M³VAEは、健康測定、人口統計の詳細、および（潜在的に打ち切られた）生存結果を含む複数のモダリティ（複数のタイプのデータ）を持つデータセットを統合します。M³VAEの重要な特徴は、クラスタリングパターンを示す潜在表現を再構築する能力であり、これにより疾患の共起における重要なパターンが明らかになります。

この機能は、健康結果を理解し予測するための洞察を提供します。M³VAEの有効性は、合成データと実世界の電子健康記録データの両方を用いた実験を通じて実証されており、将来の生存結果に関連する解釈可能な疾病グループを特定する能力を示しています。

この研究は、多疾患共存という複雑な医療課題に対して、機械学習を用いた新しいアプローチを提供しています。特に、混合型データを扱い、潜在表現を通じて疾患の関係性を明らかにする能力は、個別化医療と予後予測において重要な貢献となり得ます。

## 3. 異種臨床データセットにおける個別化連合学習の包括的視点

著者: Fatemeh Tavakoli、D. B. Emerson、Sana Ayromlou 他

### 研究の背景と目的

連合学習（FL）は、臨床環境での機械学習モデルのトレーニングと展開を頻繁に妨げるデータサイロを克服するための重要なアプローチとして、ますます認識されています。この研究は、臨床応用に特化したFL研究の成長する分野に、3つの重要な方向で貢献しています。

### 研究の成果と意義

まず、研究チームはFLambyベンチマークを拡張し、個別化FL手法の包括的評価を含め、元の結果よりも実質的なパフォーマンス向上を実証しています。

次に、実用的な設定を反映し、複数の比較ベースラインを提供するための、包括的なチェックポイントとFL評価フレームワークを提唱しています。これに向けて、FL実験をより単純で再現可能にすることを目指したオープンソースライブラリがリリースされています。

最後に、研究チームはPerFCLの重要なアブレーション（要素の一部を取り除いた解析）を提案しています。このアブレーションにより、FENDAのFL設定への自然な拡張が可能になります。FLambyベンチマークとGEMINIデータセットで実施された実験では、提案されたアプローチが異種の臨床データに対して堅牢であり、PerFCLを含む既存のグローバルおよび個別化FLテクニックをしばしば上回ることが示されています。

この研究は、医療データのプライバシーを保護しながら、異なる医療機関や臨床環境からのデータを活用して機械学習モデルを改善するという、現代医療AIにおける重要な課題に対処しています。特に、個別化連合学習は、患者集団の多様性を考慮しながら、各臨床環境に適応したモデルを提供するための重要なステップです。

## まとめ：医療AIにおける個別化と知識融合の進展

これら3つの研究は、医療AIが単なるデータ駆動のアプローチから、医学知識を統合し、患者の個別性や時間的変化を考慮するより洗練されたモデルへと進化していることを示しています：

1. **時間的変化の理解と予測**: Trottetらの研究は、全身性強皮症のような複雑な疾患における時間的変化を捉え、未来の軌跡を予測するための新しいアプローチを提供しています。

2. **多疾患共存の複雑な関係性の解明**: Kimらの研究は、複数の疾患が共存する場合の関係性を理解し、生存結果に関連する疾病パターンを特定するための生成モデルを提案しています。

3. **プライバシー保護と個別化の両立**: Tavakoliらの研究は、患者データのプライバシーを保護しながら、多様な臨床環境に適応した個別化モデルを構築するための連合学習アプローチを進化させています。

これらの研究は、医療AIが「一般的なモデル」から「個別化された理解と予測」へと移行していく重要な段階を示しています。医学知識と機械学習を融合させ、患者の多様性や疾患の複雑性を考慮することで、より実用的で効果的な医療支援システムの開発に貢献しています。
【Rust】借用されたスライスと借用されていないスライスの違い

## はじめに

Rustでスライスを操作する際、次の2つの書き方があります：

**借用されていないスライス（Unborrowed）**：
```rust
fn main() {
    let mut data = [1u32; 1];
    data[0..1].fill(0u32);
    println!("{}\n", data[0]);
}
```

**借用されたスライス（Borrowed）**：
```rust
fn main() {
    let mut data = [1u32; 1];
    let slice = &mut data[0..1];
    slice.fill(0u32);
    println!("{}\n", data[0]);
}
```

両者の違いは何でしょうか？結論から言うと：
- **パフォーマンス上の差はほとんどない**
- 借用パターンは複数の操作を行う場合に便利
- 両方とも正しい書き方

## パフォーマンスについて

これら2つのアプローチの間にパフォーマンス上の違いはほとんどないとされています。

このようなシンプルなケースでは、どちらの書き方を選んでもパフォーマンス上の違いを心配する必要はなさそうです。

## 使い分けの基準

どちらの書き方を選ぶかについては以下のような基準が考えられます：

### 借用されていないスライス（Unborrowed）が適している場合
- 1回だけの単純な操作
- コードをシンプルに保ちたい場合

```rust
// シンプルな1行の操作
data[start..end].fill(0);
```

### 借用されたスライス（Borrowed）が適している場合
- 同じスライスに対して複数の操作を行う場合
- スライスを関数に渡す場合

```rust
// 同じスライスに複数の操作
let slice = &mut data[start..end];
slice.fill(0);
// 他の操作...
```

## 関数に渡す場合

関数にデータを渡す場合については注意が必要です：

```rust
// 借用による関数呼び出し（変更が反映される）
fn fill_data<const N: usize>(data: &mut [u32; N]) {
    data.fill(0); 
}

fn main() {
    let mut data = [1u32; 1];
    fill_data(&mut data);
    println!("{}", data[0]);  // 0が出力される
}
```

これに対して、借用せずに値として渡すと：

```rust
// 値としての関数呼び出し（変更が反映されない）
fn fill_data<const N: usize>(mut data: [u32; N]) {
    data.fill(0); 
}

fn main() {
    let mut data = [1u32; 1];
    fill_data(data);
    println!("{}", data[0]);  // 1が出力される（変更が反映されない）
}
```

**2番目の例ではデータのコピーが作成され、そのコピーが変更される（そしてDropされる）ため、元のデータには影響しません。**

## スライスと参照の関係

Rustではスライス自体（`[T]`）はサイズが不定で、私たちが通常扱うのはスライスへの参照（`&[T]`や`&mut [T]`）です。これらの参照は位置と長さの情報を持つ「ファットポインタ」として実装されています。

:::note
ファットポインタ = 通常のポインタ（メモリアドレスへの参照）よりも多くの情報を保持するポインタ
:::

## まとめ

Redditでの議論から得られた情報をまとめると：

- 借用されたスライスと借用されていないスライスの間に、単純なケースではパフォーマンスの違いはほとんどない
- 関数にデータを渡す場合は、変更を反映させるために借用を使用する必要がある
- 複数の操作を行う場合は、明示的に借用する方が便利
- 単一の操作では、より簡潔な直接アクセス方式でも問題ない


## 参考資料

- [The Rust Programming Language - Understanding Ownership](https://doc.rust-lang.org/book/ch04-00-understanding-ownership.html)
- [r/rust - What is the difference between a borrowed and unborrowed slice?](https://www.reddit.com/r/rust/comments/1jj4rhm/what_is_the_difference_between_a_borrowed_and/)
箱庭でUnityを動かしてみる（9日目）

# 2025/03/25(8日目)実施内容
## フローチャートむずい
特に削除が...

### パターン
1
![flowdeletepatern.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3950972/b43019a7-6381-46e5-b255-e8ca1fc23574.png)

2
![flowdeletepatern2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3950972/36a97254-f468-4ed6-9ea0-07109c22f6d6.png)

3
![flowdeletepatern3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3950972/d5e6f4b9-31a6-4889-b6d7-71ea82f8e6af.png)

他にもパターンはあるけど...
- 終端ノードは削除しない
- 処理ノードを削除する場合はその前後のノードを再接続
- 判断ノードを削除する場合はその前のノードと，後ろのノードのうち1ノードに再接続し，もう一方のノードからそのパスが任意のノードで別のパスとマージするまでのすべてのノードを削除

パーっといけそうでいけなかったので，今日1日かけて実装する

-> 一応一通り実装できたが，いくつかのコンパイルエラーを修正する必要あり
次回はここから
ネットワーク入門：Dockerからはじめるクラウド×ネットワーク学習 〜Fargateへのステップアップ〜

## はじめに
クラウドやコンテナの技術を学ぶとき、「どこから手をつければいいのか分からない」と感じることはありませんか？

:::note warn
**個人の備忘録程度の走り書きとなっておりますが、温かい目で見守っていただければ幸いです。**
:::

本記事では、「**Docker → VPCなど → ECS on Fargate → 素のネットワーク**」という流れをベースに、技術的な学習のステップとその背景を整理してみます。

## 書こうと思ったきっかけ
インフラ学習に取り組む中で、「ECSやFargateを触ってはみたものの、裏側の仕組みがよくわからない」と感じることがありました。

抽象化されたクラウドサービスを理解するには、DockerやVPCといった基礎から丁寧に学び直すことが重要だと気づき、整理を兼ねてこの記事を書いています。

## ステップ1：まずはDockerから
### なぜDockerから？
Dockerは、アプリケーション実行環境を簡単にパッケージ化・移動・再現できるコンテナ技術の代表格です。

https://qiita.com/Sicut_study/items/4f301d000ecee98e78c9

クラウドサービス（特にAWS上のECSなど）も、内部ではDockerコンテナを使っています。

まずローカル環境でDockerを動かすことが、すべての出発点です。

### 学習ポイント
- Dockerfileの書き方（FROM, RUN, COPY, CMD など）
- docker build, docker run などの基本コマンド
- ポート公開（-pオプション）とボリュームマウント（-vオプション）
- docker-composeを使った複数コンテナの管理

### おすすめの学習方法
- 公式チュートリアル（Docker公式ドキュメント）
- 自分のポートフォリオアプリをDocker化してみる
- ローカル開発環境をDockerに置き換えてみる

## ステップ2：VPCやネットワーク基礎を理解する
### なぜVPC？
Dockerで動かしたコンテナをクラウドに持っていくと、そこにはネットワークの世界があります。

:::note warn
**AWSではVPC（Virtual Private Cloud）がその基盤です。**
:::

FargateやECSを使う際にも、ネットワークの設計がとても重要になります。

### 学習ポイント
- サブネット（Public / Private）の違い
- インターネットゲートウェイ、NATゲートウェイの役割
- セキュリティグループとネットワークACLの使い分け
- DNS、IPアドレスの基本

### おすすめの学習方法
- AWS Hands-on（VPCウィザードを使った構築）
- 「Cloud9」上で構築する小規模ネットワーク実験
- VPCを図で描いてみて構造を頭に入れる

## ステップ3：ECS on Fargateに触れる
### なぜECS on Fargate？
Fargateはサーバーレスなコンテナ実行基盤です。EC2のようなインスタンス管理が不要で、Dockerの知識とVPCの基礎があれば簡単にサービスを公開できます。

### 学習ポイント
- ECSクラスターとタスク定義の意味
- FargateとEC2起動タイプの違い
- サービスとしての永続運用とオートスケーリング
- IAMロール、ログ設定（CloudWatch）など

### おすすめの学習方法
- AWSの「ECS Workshop」（公式ハンズオン）
- 自作アプリをDocker化 → ECRにPush → ECSで起動
- VPC設定込みで、パブリックアクセス可能なWebアプリを作る

## ステップ4：素のネットワーク（Linuxネットワーク）にも目を向ける
### なぜ素のネットワーク？
Fargateなどのマネージドサービスに慣れてくると、「裏側でどうなっているの？」という疑問が湧いてきます。
実際のLinuxやオンプレ環境、またネットワークエンジニア的な視点に立つには、素のネットワークの知識が必要です。

### 学習ポイント
- Linuxのip aやip routeコマンド
- iptables / firewalld の基本
- NATやルーティングの仕組み
- DHCP, DNS, ARP, TCP/IPの基本プロトコル

### おすすめの学習方法
- 仮想マシン（VirtualBoxやVagrant）でLinux環境を構築
- Dockerコンテナ内のネットワーク設定を観察してみる
- TCPDumpなどを使ってパケットを見てみる

## まとめ
「クラウドってブラックボックスっぽくて怖い」と思っていた過去の自分に、この記事を届けたいと思いました。

:::note info
**基礎から丁寧に積み上げていけば、どんなに高度に見えるシステムも一歩ずつ理解できるようになります。**
:::

**今回の記事の内容が、どなたかの技術的な支えになれば幸いです！**
ラズパイで実用的なストリーミングプレイヤーを作る（構想編）

# 経緯
ひと昔前に流行ったラズパイオーディオで音楽を楽しんでいましたが、いまいちレスポンスが遅かったり、インターフェースが使いづらかったり、実用面での不満があった。
音質と実用面を考え、ストリーミングプレイヤーを構築したい。

# 対象読者
* 安くストリーミングプレイヤーを用意したい人
* ラズパイで遊びたい人

# 過去に試したものと不満点
いずれもレスポンスが悪く、mpdベースのインターフェースが使いづらかった

* OS: volumio（Rasp4）　＋　DAC:HAT
　音質△、レスポンス×、使い勝手×
 　NASをマウントする設定とすると、初期設定や起動順を気にするなどの面倒くささもある（余談だが、PCやNAS自体が古いと、さらに手間がある）
  電源ぶつ切りをしすぎるとSDカードが死にやすくなるので、電源操作は雑にしないことが意外とストレス。

* OS: lightmpd（Beaglebone)　＋　DAC:HAT
* OS: lightmpd (Beaglebone2台　なんちゃってネットワーク分離）
　音質〇、レスポンス×、使い勝手×
 　lightmpdは電源ぶつ切りができるが、mpd操作のレスポンスの遅さに耐えられなかった

# 環境構成（最終形）
ラズパイのOS・サーバープロセスをいかに軽くするかがポイント。

Qiita向けの話ではないので、軽く触れるだけにしますが、
ラズパイのHAT DACは下火、USB DACは成熟してラインナップも多い。

かたやストリーミングプレイヤーはまだまだといったところで、DACも兼ねるタイプは高価なことが多い。ラズパイのHATで用意する場合、ストリーミングプレイヤーとDACは用意できてもよいヘッドホンアンプまでは選択肢がほとんどない。（2025年時点）
だからラズパイで上流のストリーミングプレイヤーだけを作る、としました。

```mermaid
flowchart TB
subgraph "**最終構成**"
  A["`HW:SmartPhone
  SW:DLNA Controller、DLNA Server
  [Hi-Fi Cast]`"] --"WiFi"-->R["`HW:RaspberryPi
  OS:RaspianLite Headless
  SW:DLNA Renderer
  **[gmediarender]**`"]

  PC["`HW:Windows PC
  SW:DLNA Renderer
  [Audionet RC]`"]--WiFi-->R
  
  R--"USB Cable"-->D[HW:DAC]
  
  R--"LAN Cable"-->N["`HW:NAS
  SW:DLNA Server
  **[MinimServer]**`"]

  R--"WiFi"-->A
  
  D--"AnalogCable"--> H[Headphone]
end
```

# 用語説明と余談
DLNAとupnpは、ここでは同義として扱います。

* DLNA Controller：　操作する端末。ここに音楽ソースがなくてもよい。
Androidだと、Hi-Fi Castが使いやすい（広告はほんのちょっと出ます）。foobar2000は、Rendererの指定ができないので対象外。
PCだと、Auionet RCが使いやすい。（Audionetは高級オーディオメーカー）
いずれも無料。
* DLNA Server：　音楽ソースファイルの置き場。
NASがメインだが、起動が遅いのでSmartPhoneも用意。
私はSynologyのNASに、MinimServerを入れてます。
* DLNA Renderer: 音楽ファイルを再生するところ。
LifeKeeperのイベントメール通知設定

# 今回のネタ
LifeKeeperを導入したシステムで、LifeKeeperに関するイベントが発生した際、そのイベントをメールで送信するという機能があります。
備忘として、設定作業をまとめてみました。

## イベントメール通知設定とは？
設定したクラスタリソースやLifeKeeperのサービス、コミュニケーションパスなどのステータスが変わった際に、メール通知を行うことが可能です。

詳細については、以下SIOSさんのドキュメントをご確認ください。
[イベントメール通知について](https://docs.us.sios.com/spslinux/9.9.0/ja/topic/overview-of-lifekeeper-event-email-notification)

:::note warn
LifeKeeperのデフォルト設定では、イベントメール通知は無効状態です。
イベントメールを送りたい場合は、設定変更作業が必要です。
:::

## やらないといけないこと（OS側）
<details open><summary>mailxのインストール</summary>

```rb
インストールコマンド
sudo yum install mailx

インストールできているかの確認
rpm -qa | grep mailx
```
</details>

<details open><summary>メール設定</summary>

```rb
mailrcファイルの作成
vi ~/.mailrc

SMTPサーバの指定
set smtp=<サーバ情報>

Fromアドレスの指定
set from="ec2-user@example.com"
```
</details>

## やらないといけないこと（LifeKeeper側）
<details open><summary>LifeKeeperの設定ファイルの変更</summary>

**環境変数を追加することをお忘れなく！**

```rb
vi /etc/default/LifeKeeper

1.「LK_NOTIFY_ALIAS」の値を変更します。入力例は以下です。

LK_NOTIFY_ALIAS=
通知を行いません。

LK_NOTIFY_ALIAS=user1@domain1
domain1のuser1に通知を行います。

LK_NOTIFY_ALIAS=user1@domain1,user2@domain1
domain1のuser1、user2に通知を行います。

2. 「環境変数」を追加
# Default PATH for LifeKeeper command exception.
MAILRC=/root/.mailtc; export MAILRC
```
</details>

<details open><summary>LifeKeeperのサービス再起動</summary>

```rb
起動中のリソースを停止させないで、LifeKeeperのサービスのみの停止
/opt/LifeKeeper/bin/lkstop -f

LifeKeeperのサービス起動
/opt/LifeKeeper/bin/lkstart
```
</details>

## 今回分かったこと
LifeKeeperからmailコマンドを利用する際、/root/.mailrcは参照しないことが分かりました。
LifeKeeper起動時に、/root/.mailrcの環境変数を読み込ませないといけないので、環境変数の追加を忘れないようにしてください！

## 参考URL
↓ mailxの設定作業で参考にしました。
[SMTPサーバのメール送信テストにmailxコマンドを使う](https://dev.classmethod.jp/articles/using-mailx/)
SKE関連記事のまとめ

https://qiita.com/changkejun/items/da8e3d944879bd60a7a9

https://qiita.com/changkejun/items/52a786eaed1a1c6ac98b

https://qiita.com/changkejun/items/2f25030223b7d3f0091f

https://qiita.com/changkejun/items/6918a886d76132d98496

https://qiita.com/changkejun/items/51e0d436b6c917269b51

https://qiita.com/changkejun/items/6ebe7d24fd54feac5be3

https://qiita.com/changkejun/items/532e5a177782937d2842

https://qiita.com/changkejun/items/c3837e00fa42f0381795

https://qiita.com/changkejun/items/0cee4173eac17ce7cf98

https://qiita.com/changkejun/items/d36c8bbe3c74ceaaddb9


https://qiita.com/changkejun/items/a656091d345158e8871f

https://qiita.com/changkejun/items/e805eef2c8a2fe134d6f

https://qiita.com/onuma_s/items/2a136c2d24cb15382cf3
【ServiceNow】リストビューの参照制御をしてみよう。

前回の記事
---
https://qiita.com/masa3150/items/f8c856814df1cee1402e

はじめに
---
・リストビュー（例：問題のリストビュー）の表示制御を行いたいときに、
１つのやり方としてBusinessRuleを使用して表示制御をしたいと思います。
![スクリーンショット 2025-03-25 14.12.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3154654/27c752e2-0c80-4314-90c6-3529bdcfabcd.png)

作成方法
---
①フィルターナビゲータより「ビジネスルール」と入力し、「システム定義＞ビジネスルール」を選択する。
![スクリーンショット 2025-03-25 14.24.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3154654/c74d0051-b55e-4bd3-874b-dc017b719f1d.png)

②新規ボタンを押下する。
![スクリーンショット 2025-03-25 14.29.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3154654/6f6888b4-db94-4754-be06-0a9d95bea971.png)

※ビジネスルールなどの機能を作成する際には、言語を「English」に変更して作成すること。
![スクリーンショット 2025-03-25 14.33.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3154654/6ad8f4dd-c6a4-4d7e-bfd8-07ee3424c28e.png)

③以下を設定して送信ボタン（submit）を押下し、ビジネスルールを作成する。
・テーブル（table）「problem」、
・詳細（Advance）「true」、
・実行タイミング（when）を「before」、
・実行時期（run）を「Query」、
![スクリーンショット 2025-03-25 15.36.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3154654/c0bd7022-7ffe-47ff-bd03-c50792226b5e.png)

・ステータスが「クローズ済み」のレコードで参照制御するように構築する。
![スクリーンショット 2025-03-25 15.39.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3154654/39f62559-a8a3-4367-b299-6d6a08821bb3.png)


④ビジネスルールが作成されていることを確認する。
![スクリーンショット 2025-03-25 15.40.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3154654/d141fe99-a056-4ff4-ba28-53db9255fe1b.png)

⑤フィルターナビゲータより「problem」と入力し、「Problem＞All」を選択する。
![スクリーンショット 2025-03-25 15.46.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3154654/af0976a6-0ccb-472a-b58f-d74f7856b48c.png)

⑥③で作成したビジネスルールが機能していることを確認する
→ステータスが「クローズ済み」のレコードで参照制御していることを確認。
![スクリーンショット 2025-03-25 15.47.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3154654/b7cf832c-f3bc-47d3-a69d-91c8fe6e8659.png)


終わりに
---
今回はテーブルのリストビューを、ビジネスルールの実行タイミング「before」、実行時期「Query」を作成して参照制御を行いました。参照制御の方法の1つとして、理解していただけると幸いです。
Kaggleとは

## はじめに
　Kaggleについてまとめてみました。

## Kaggleとは
　Kaggleは、データサイエンティストや機械学習エンジニアのためのオンラインコミュニティである。Kaggleでは、常に複数のコンペが開催され、世界中の多くの参加者が機械学習モデルの性能を競い合っている。プログラミング言語の「Python」や「R」が実行出来る「Notebooks」という環境も提供されている。ソースコードの公開や議論も活発で、初学者から上級者までの全ての人が、機械学習を学ぶのに適したプラットフォームとなっている。

### Kaggleのコンペの概要
1. 企業などがデータと賞金を提供し、Kaggleにコンペの開催を依頼。Kaggleはコンペを開催する。
2. 参加者は、データを分析し予測結果をsubmit（提出）する。予測結果は自動的に採点されスコアが表示される。
3. コンペの期間中（期間は２～３ヵ月のコンペが多い）、参加者は何度も予測結果をsubmitしてスコアを確認出来る。
4. コンペ終了後、スコアに基づく順位がつき、上位者には賞金とメダルが付与される。
5. メダルを一定数獲得すると、上位の称号を獲得出来る。  

　コンペの参加者は自分でデータを用意する必要がなく、上位になると賞金がもらえ、下位であろうと罰則は一切ない。自分のsubmitが採点されて順位が表示されるのはネットゲームのように楽しく、少しでも順位を上げたいというモチベーションをもって機械学習を楽しく学ぶことが出来る。
　アカウント作成時は「Novice（初学者）」という称号だが、特定のコンペでメダルを獲得し一定の枚数集めると、Expert、Master、Grandmasterという上位の称号を獲得出来る。この称号も、コンペで上位を目指すモチベーションとなる。

### メダルと称号の獲得条件
　Kaggleのメダルの対象となるコンペで、上位に入るとメダルを獲得出来る。メダルを獲得出来る順位はコンペの参加チーム数に応じて変動する。

【参加チーム数とメダルが与えられる順位の関係】
 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/387980/6476092f-a423-4621-8d00-291af1c63e21.png)

　金メダルの条件にある「上位10チーム+0.2%」の0.2%というのは、500チームごとに金メダルが与えられるチーム数が1増えるという意味である。例えば、1000チーム参加のコンペでは上位12チーム、2000チーム参加のコンペでは上位14チームに金メダルが付与される。
　一定数のメダルを揃えると称号を獲得出来る。

【Competitions（コンペ）の各称号の獲得条件】
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/387980/5723a8b5-1023-4534-b923-ba5a3fc6d0d2.png)

　Contributorの条件は次の通りである。
・プロフィールへのbio（自己紹介）、居住地域、職業、所属組織の追加
・アカウントのSMS認証
・スクリプトの実行
・コンペでのsubmit
・NotebooksまたはDiscussionでのコメントとupvote（いいね）の実施

　Contributorになるためには、メダル獲得が必要ない。条件を満たすことで、すぐにでも称号獲得が可能である。
　そのため、最初に獲得を目指す称号は、Expertとなる。Expertの条件は、銅メダル以上のメダルを2枚獲得となっている。
　その次の称号は、Masterである。金メダルの獲得が条件に含まれる難易度の高い称号で、獲得者は世界でも1300人程度となっている。
　Kaggleの最高位の称号は、Grandmasterである。5枚の金メダルの獲得に加え、うち1枚は「ソロ」（個人）という、獲得がとても難しい称号となっている。この称号の獲得者は、世界でも170人程度である。
　ここでは、Competitionsの称号を説明したが、この他にもNotebooks、Discussion、Datasetsの称号がある。それぞれの概要は次の通りである。

・Notebooksの称号は、公開したNotebookへのupvote数に基づいて得られるメダルを、一定数集めることで獲得出来る。
・Discussionの称号は、投稿したコメントへのupvote数に基づいて得られるメダルを、一定数集めることで獲得出来る。
・Datasetsの称号は、公開したDatasetへのupvote数に基づいて得られるメダルを、一定数集めることで獲得出来る。

## Kaggle以外の機械学習コンペ
　Kaggle以外にも機械学習コンペを開催するプラットフォームはいくつか存在する。
　例えば「SIGNATE」は日本最大級のデータサイエンティストらのオンラインコミュニティである。国内の企業・官公庁・研究機関がコンペを開催している。サイト内の記述が日本語なので、Kaggleに比べて初学者の方も取り組みやすい側面がある。
　オンラインではなく、土日などに参加者が実際に会場などに集まって開催する形式のコンペも存在する。最近は多くの企業がこういった「オフラインコンペ」を開催しており、特に採用目的で学生が対象のイベントも目立っている。
　参加する機械学習コンペの選択肢として幅広く認知しておくと良い。


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

## 参考文献
・実践Data Scienceシリーズ PythonではじめるKaggleスタートブック 単行本 – ビッグブック, 2020/3/19
石原 祥太郎 (著), 村田 秀樹 (著)
p.13-15
・Kaggle Progression System
https://www.kaggle.com/progression(Accessed: 30 November 2019).
・https://www.currypurin.com/entry/2018/02/21/011316(Accessed: 30 November 2019).
・SIGNATE
https://signate.jp/ (Accessed: 30 November 2019).
個人的備忘録：Gitでローカルの変更をリポジトリに反映する方法について【コマンド紹介】

## はじめに

Gitを使ってローカルで編集したファイルを、リモートリポジトリ（たとえばGitHub）に反映させる手順をまとめます。

:::note info
**個人の備忘録程度の走り書きとなっておりますが、温かい目で見守っていただければ幸いです。**
:::

基本的な操作ですが、初心者にとってはエラーに遭遇することもあるため、正しいコマンドの順番と注意点を押さえておくことが大切です。

## 書こうと思ったきっかけ

実際にリポジトリへ `git push` を試みたところ、構文ミスでエラーが発生しました。その体験をもとに、正しい手順とポイントを整理しておきたいと思い、備忘録として記事にまとめました。

## 内容の説明

### ローカルの変更をリポジトリに反映する手順

```bash
# 変更されたファイルを確認（オプション）
git status

# 変更をステージに追加
git add .

# コミット（メッセージはわかりやすく）
git commit -m "編集内容を反映"

# リモートリポジトリにプッシュ
git push origin main
```

`main` の部分は、プロジェクトのブランチ名に応じて `master` や `develop` に読み替えてください。

### よくある間違いと対処法

以下のようなコマンドは間違いです：

```bash
git push origin main git@github.com:username/repo.git
```

これは、Gitの構文として正しくありません。`git push` のあとには、リモート名とブランチ名のみを指定します。

### リモートの確認方法

もしリモートURLが気になる場合は、以下で確認できます：

```bash
git remote -v
```

これで、`origin` に対してどのリモートURLが設定されているかを確認できます。

## まとめ

Gitでローカルの変更をリモートリポジトリに反映する基本手順は、

1. `git add .` でステージへ追加
2. `git commit -m "コメント"` で変更記録
3. `git push origin ブランチ名` で反映

の3ステップです。構文を間違えなければ簡単に使えるので、安心して活用してみてください！***エラーが出たときは、落ち着いて構文やブランチ名を見直すことがポイントです。***
BaseSettingsでCLI引数の衝突を回避


# 概要
複数のBaseSettingsサブクラスをインスタンス化するときの、CLI引数の衝突回避方法についてです。
結論としては、cli_ignore_unknown_args=Trueを与えるとよいです。

環境変数とCLI引数でオプション名が違うことに気づかなくて数時間解決にかかったのでメモを残します。

# 背景
pydantic-settingsのBaseSettingsは環境変数とCLI引数を同時に定義することができて便利です。
複数の箇所でBaseSettingsを使用していて、それらを両方インスタンス化する必要があるとき、CLI引数の衝突がおこることがあります。
つまり、一方には存在し、もう一方には存在しない環境変数やCLI引数があるとエラーになってしまいます。

一方に存在しないCLI引数を指定してインスタンス化させてみます。

```python
from pydantic import Field
from pydantic_settings import BaseSettings, SettingsConfigDict


class SettingsA(BaseSettings):
    name: str = Field(default="", description="名前")
    title: str = Field(default="", description="タイトル")

    model_config = SettingsConfigDict(
        env_file=None,
        case_sensitive=False,
        cli_parse_args=True,
        extra = "ignore"
    )


class SettingsB(BaseSettings):
    title: str = Field(default="", description="タイトル")

    model_config = SettingsConfigDict(
        env_file=None,
        case_sensitive=False,
        cli_parse_args=True,
        extra = "ignore"
    )


def test_settings_with_cli_args():
    """CLIからの引数でSettingsインスタンスを作成するテスト"""
    import sys

    # SettingsAのテスト
    sys.argv = [
        "script.py",
        "--name=test_user",
        "--title=test_title",
    ]

    settings_a = SettingsA()
    settings_b = SettingsB(
        title=settings_a.title,
    )


if __name__ == "__main__":
    test_settings_with_cli_args()
```

実行するとunrecognized argumentsでエラーになります。

```
usage: script.py [-h] [--title str]
script.py: error: unrecognized arguments: --name=test_user
```

一方でCLI引数ではなく環境変数を用いた場合にはエラーなく実行されます。

```Python
def test_settings_with_envs():
    """環境変数でSettingsインスタンスを作成するテスト"""
    import os

    # SettingsAのテスト1
    os.environ["NAME"] = "test_user"
    settings_a = SettingsA()
    settings_b = SettingsB(title = settings_a.title)


if __name__ == "__main__":
    # test_settings_with_cli_args() # エラー
    test_settings_with_envs()  # 成功
```

これはextra="ignore"を指定することで、不要な環境変数が無視されるためです。
一方で、extra="ignore"を指定してもCLI引数の衝突は無視できません。

# 解決方法

model_configでcli_ignore_unknown_args=Trueを指定すると引数の衝突を回避できます。

```Python
class SettingsB(BaseSettings):
    title: str = Field(default="", description="タイトル")

    model_config = SettingsConfigDict(
        env_file=None,
        case_sensitive=False,
        cli_parse_args=True,
        cli_ignore_unknown_args=True,  # 追記
        extra="ignore",
    )
```


# おわりに

オプション引数の存在に気づかず、model_config.cli_parse_argsのオーバーライドなどいろいろ検討して時間が過ぎてしまいました。
同じことでハマった方の参考になれば幸いです。
【EC2】Windowsサーバ初回構築時はnet user Administrator "新しいパスワード"を実行しよう

# 備忘録
EC2でWindowsサーバを立ち上げる機会は多くあると思いますが、パスワードは以下のように実行することで新しいパスワードを設定できます。
```
net user Administrator "新しいパスワード"
```

:::note warn
パスワードでログインできなくなった時に使えると思います。
:::
AWSのネットワーク入門

# VPCとSubnetの違い
![スクリーンショット 2025-03-24 233650.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3750795/133b428e-6751-4b08-a03a-ffcace1dfdc9.png)

## VPCとは
aws上に自由に作成することができる専用の仮想ネットワーク環境のこと。
## Subnetとは
VPC上にIPアドレス範囲を区切ったネットワーク空間のこと。

# グローバルIPアドレスとプライベートIPアドレスの違い
## グローバルIPアドレスとは
インターネット上で一意に割り振られるIPアドレスのこと。
これによりインターネットにインターネット上の他のデバイスと通信することができる。
## プライベートIPアドレスとは
ローカル環境上で一意に割り振られるIPアドレスのこと。
グローバルIPアドレスとは違いインターネットには直接通信できない。
プライベートIPアドレスのとれる範囲はRFC1918という規格で定められている。

![スクリーンショット 2025-03-25 122121.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3750795/17109331-70cb-40c6-910c-98676de6d2e6.png)
# CIDRとは
CIDRは、IPアドレスの割り当てとルーティングを効率化するための仕組みである。
## プライベートIPアドレスの管理
ローカル環境にネットワークが複数存在しているとき、そのネットワークごとにプライベートIPアドレスの範囲を決めるべきである。そうすることで、プライベートIPアドレスの管理がしやすくなる。

![スクリーンショット 2025-03-25 123648.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3750795/86c5b68e-d204-41b7-a158-dab6f9bcdcad.png)

## IPアドレスのネットワーク部とホスト部
ネットワーク部の範囲が広いとネットワークはたくさん作れるが1つのネットワーク内に少ししかIPアドレスを割り振れない.

ネットワーク部の範囲が狭いとネットワークを作れる数は少ないが、1つのネットワーク内に多くのIPアドレスを割り振れる。

### IPアドレスのネットワーク部とは
![スクリーンショット 2025-03-25 124124.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3750795/c7c798e9-6a88-4988-962d-61f86a2a4119.png)
どのネットワークかを特定するもの。
(いいかえればどのVPCかを特定するもの)
## IPアドレスのホスト部
![スクリーンショット 2025-03-25 124307.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3750795/582f38b0-dba2-45ee-98f8-f2450b4cd3b7.png)
ネットワーク内の機器を特定するもの。
## IPアドレスのサイダー表記
ネットワーク部とホスト部の範囲を表す記法のこと。
![スクリーンショット 2025-03-25 131826.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3750795/92d489d5-1b78-4ce3-92a7-77c57992d423.png)

上のIPアドレスは`/28`であるからネットワーク部が28bitあり、残りの4bitがホスト部であることがわかる。

![スクリーンショット 2025-03-25 132434.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3750795/7d1076ad-a62d-4a93-a99c-f66c9cbb53fd.png)
青がネットワーク部で緑がホスト部である。

![スクリーンショット 2025-03-25 132914.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3750795/73503770-134e-4a0d-abba-749944c26b2c.png)

# リージョンとは
どのawsの配置されている場所のサーバーを使うのかを指定することができるもの。
VPCを作るときにどのリージョンするかを選択できる。
現在の場所から近いリージョンは応答速度が速くなる。
(オレゴンが料金が安いからおすすめ)

# アベイラビリティゾーンとは
1つのリージョンの中にある複数のデータセンターのこと。
Subnetを作るときにどのアベイラビリティゾーンにするかを選択できる。

# パブリックサブネットとは
インターネットに直接アクセスできるサブネットのこと。

# プライベートサブネットとは
インターネットに直接アクセスできないサブネットのこと。

# ルートテーブルとは
ネットワークにおける通信の経路を決定するためのデータ構造のことである。
送信先には送信先のIPアドレスの範囲をかく。
ターゲットにはネットワーク通信の宛先となる場所をかく。
より細かい設定の方へ通信が接続される。
(0.0.0.0/0はすべての通信という意味)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3750795/a604dcc6-9314-4982-8ce6-0faf1b374aa7.png)

# インターネットゲートウェイとは
VPC内とインターネット間の通信をする仕組みのこと。
Subnetのpublicはインターネットゲートウェイの機能をもつ。

# セキュリティグループとは
VPC内のサーバなどに紐づけて通信を制御するための仮想ファイアウォールのこと。
## インバウンドルールとは
外から入ってくる通信に対して特定のIPアドレスやポートからのアクセスを許可または拒否するルールのこと。

(インバウンドルールを何も設定しなくともアウトバウンドの応答通信はインバウンドルールに適応されない。)
## アウトバウンドルールとは
中から外への通信に対して特定のIPアドレスやポートからのアクセスを許可または拒否するルールのこと。
用済みのDockerボリュームを選択して削除する方法

定期的に新規作成するコンテナの削除後、用済みになったボリュームが残ったままになって蓄積され容量を圧迫していたため、`docker volume prune -a`で使われていないボリュームを全て消すのではなく、このコンテナに関係するボリュームだけをまとめて削除する方法を調べた結果のメモです。

## 用済みボリュームを選択して削除する

今回の本題、用済みボリュームのうち対象となるものを選択してまとめて削除する方法です。
以下のように`--filter`オプションを利用します。`-a`オプションを付けないと匿名コンテナしか削除できません。

```
docker volume prune -a --filter "label=foo=bar"
```

`docker volume prune`でサポートされているフィルターは`label`フィルターのみで、上記のように`label=<key>=<value>`や`label=<key>`、`label!=<key>=<value>`といった形で使うことができます。ラベル以外には対応していないため、この方法を使う場合には、あらかじめ対象のボリュームに他のボリュームと区別可能なラベルを付与しておく必要があります。

## おまけ

### その他用済みオブジェクトの削除方法

#### イメージ

```
docker image prune
```

#### コンテナ

```
docker container prune
```

#### ネットワーク

```
docker network prune
```

#### ボリューム以外全て

```
docker system prune
```

#### ボリューム含めて全て

```
docker system prune --volumes
```

## 参考

[docker system prune](https://docs.docker.com/reference/cli/docker/system/prune/)
[docker volume prune](https://docs.docker.com/reference/cli/docker/volume/prune/)
UnityMCPとCorsorを連携させてUnityを動かしてみる

UnityMCPをCursorで利用するための手順を書いていきます。Unity関連のMCPは現状[MPCUnity](https://github.com/CoderGamester/mcp-unity)と[UnityMCP](https://github.com/Arodoid/UnityMCP)の二つあり、今回は後者を利用します。

UnityMCP は Unity エディタの機能を外部から操作できるようにするプラグインで、Cursor から Unity へ直接コマンドを送ることができます。

## UnityMCP の主要コンポーネント

1. **Unity プラグイン (UnityMCPPlugin)**
   * Unity エディタ内での接続状態確認用デバッグウィンドウ
   * リアルタイム通信用 WebSocket クライアント
   * C# コード実行エンジン
   * ログシステム
   * エディタ状態の追跡と保存

2. **MCP サーバー (unity-mcp-server)**
   * Unity エディタの機能を標準化されたツールで公開する TypeScript ベースのサーバー

## セットアップ手順

### 前提条件
* Unity 2022.3 以降
* Node.js 18 以降
* npm 9 以降

### 1. Unity プラグインのセットアップ

1. GitHub から [UnityMCP](https://github.com/Arodoid/UnityMCP) をダウンロード
2. ダウンロードしたファイルから `UnityMCPPlugin` フォルダを Unity プロジェクトの Assets ディレクトリにコピー

### 2. MCP サーバーのセットアップ

1. ターミナルまたはコマンドプロンプトを開き、ダウンロードした UnityMCP 内の `unity-mcp-server` ディレクトリに移動
2. 以下のコマンドを実行してセットアップを完了：

```
npm install
npm run build
```

### 3. Cursor での MCP 設定

1. Cursor を起動
2. ファイル > ユーザー設定 > Cursor Settings > MCP > Add New Global MCP server を選択
3. 以下の設定値を入力：

```json
{
  "mcpServers": {
    "unity-mcp-local": {
      "command": "cmd",
      "args": [
        "/c",
        "node",
        "以下のファイルまでのフルパス/UnityMCP-main/unity-mcp-server/build/index.js",
        "--config",
        "{}"
      ]
    }
  }
}
```

※ `以下のファイルまでのフルパス` の部分は、実際のファイルパスに置き換えてください。

4. Cursor を再起動
5. MCP Servers のリストで `unity-mcp-local` が緑色のチェックマークになっていることを確認
![スクリーンショット 2025-03-25 1143.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3674280/158a02e3-c429-4881-8f4f-db713160de9e.png)

### 4. Unity での Newtonsoft.Json パッケージのインストール

1. Unity を開く（この時点で Newtonsoft.Json の不足エラーが表示される可能性があります）
2. ウィンドウ > パッケージマネージャー を開く
3. 「+」ボタン > 名前で検索 > `com.unity.nuget.newtonsoft-json` を検索
4. インストールボタンをクリック
5. Unity を再起動

### 5. 接続確認

1. Unity のメニューバーから UnityMCP > Debug Window を開く
2. ウィンドウ内に緑色の文字で「Connected」と表示されていれば接続成功

## 注意点

* Cursor で UnityMCP を使用する場合、ReadMe に記載されている以下のサーバー起動手順は**実行しないでください**：

```
cd unity-mcp-server
node build/index.js
```

これは Claude デスクトップアプリ用の手順であり、Cursor では不要です。実行するとポートの衝突が発生し、Cursor から Unity への接続ができなくなります。
起動した場合はCtrl+Cで終了させてください。


* Cursor 側で正しくサーバーが起動していれば、上記のコマンドを実行してもサーバーの起動に失敗します。（ポートが既に使用中のため）

## 使い方

Cursorを開いてCtrl+Lでチャット欄を開いてAgentモードに切り替え、使用モデルをclaude-3.7-sonnetにしておきます。
![スクリーンショット 2025-03-25 142104.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3674280/a9ce4a75-b741-4133-b7ac-726709833a3d.png)
この状態でシーンの情報を取得したりシーンに何かしら変更が加えられるようになります。
KotlinでMapの操作をスマートに書く（＋／－演算子を使った簡潔な記法）

## はじめに

この記事では、KotlinにおけるMapの値追加・更新・削除をシンプルかつ簡潔に書く方法について解説します。
特に、Mapに対する「＋」や「－」演算子を用いたイミュータブルな書き方について、具体的な例を交えて紹介します。

## 📝 基本的な問題（よくある冗長なコード）

例えば、あるキーに対して値を更新したいとき、こんなコードを見たことがありませんか？  

```kotlin
// 値を更新する例（MutableMap利用）
val updatedMap = originalMap.toMutableMap().apply {
    put(key, newValue)
}
```

これは動作としては問題ありませんが、
毎回 toMutableMap() したり、apply で put を呼ぶのは冗長です。

## ✅ Kotlin的なスマートな記述法：「＋演算子」を使う方法

実は、Kotlinでは**Mapに対して演算子 ＋ を使った追加・更新が可能**です。

### ▶︎ 1つの要素を追加・更新する場合：

```kotlin
val updatedMap = originalMap + (key to newValue)
```

- シンプルで、意図が明確に伝わります
- 同じキーが存在すれば上書き、無ければ新規追加されます
- 元のoriginalMapは変更されません（イミュータブル）

#### 動作例：  
```kotlin
val original = mapOf("apple" to 1, "banana" to 2)
val updated = original + ("banana" to 3)

println(updated) // {apple=1, banana=3}  
```

上記のように、banana の値が上書きされました。


### ▶︎ 複数の要素を一度に追加・更新する場合：

複数のキーを同時に更新したいときは、mapOfを併用できます。

```kotlin
val updatedMap = originalMap + mapOf(
    key1 to value1,
    key2 to value2
)
```

こちらも非常にシンプルで読みやすくなります。

#### 動作例：

```kotlin
val original = mapOf("a" to 1, "b" to 2)
val updated = original + mapOf("b" to 99, "c" to 3)

println(updated) // {a=1, b=99, c=3}
```

複数のキーが一度に更新されていることが分かります。

⸻

## 🚩 キーの削除も演算子でできる：「－演算子」

値の削除には － 演算子を利用できます。

### ▶︎ 1つのキーを削除する場合：

```kotlin
val updatedMap = originalMap - key
```

#### 動作例：

```kotlin
val original = mapOf("apple" to 1, "banana" to 2, "orange" to 3)
val updated = original - "banana"

println(updated) // {apple=1, orange=3}
```

### ▶︎ 複数のキーを削除する場合：

複数削除する場合は、リストを渡せます。

```kotlin
val updatedMap = originalMap - listOf(key1, key2)
```

#### 動作例：

```kotlin
val original = mapOf("a" to 1, "b" to 2, "c" to 3)
val updated = original - listOf("a", "c")

println(updated) // {b=2}
```

非常に簡潔で読みやすいです。

## 📌 注意点（MutableMapに対しては？）

今回紹介した方法は、基本的にイミュータブルな操作です。
- 元のMapを変更したくない場合に最適
- 逆に、頻繁な書き換えが必要な場面ではパフォーマンスを考え、MutableMapを直接操作する方法が適することがあります

### MutableMapでの更新例：  

```kotlin
val mutableMap = originalMap.toMutableMap()
mutableMap[key] = newValue
```

この方法は高速ですが、副作用に注意が必要です。

## 🎯 まとめ
- Kotlinでは、+や-演算子を使うことで、Mapの追加・更新・削除を簡潔に書ける
- 同じキーは自動的に上書きされる
- イミュータブルな操作なので、意図せぬ副作用を防げる

ぜひ、簡潔で美しいコードのために活用してみてください！
Certified Argo Project Associate (CAPA)

## はじめに

CNCF主催の認定試験 **Certified Argo Project Associate (CAPA)** を受験し合格したので、受験記を記載します。同認定試験の受験を考えている方の参考になれば幸いです。

## 免責事項(Disclamer)

:::note warn
* 本投稿は受験当時の情報となります。受験を検討する際は最新の情報の確認をお願いします。
* 本投稿は個人の所感です。
    * 所属する企業や団体は関係ありません。
    * 情報の利用は自己責任でお願いします。
:::

## 試験概要

* Argoプロジェクトの関連プロダクト(ArgoCD, ArgoRollouts, ArgoWorkflows, ArgoEvents)についての認定試験です。
* 受験日：2024/10/31
* 試験形式
    * オンライン試験
    * 1回再受験可能
    * 多肢選択式
    * 試験時間90分
    * 試験言語は英語のみ提供
    * 100点満点中75点以上で合格

## カリキュラム全体の理解

* CNCFの[このページ](https://www.cncf.io/blog/2024/10/18/how-to-ace-the-certified-argo-project-associate-capa-exam/)が参考になりました。

## ArgoCD

### ArgoCDとは

* レポジトリ上にあるマニフェストを必ず正しい情報源(Single Source of Truth)と見なし、実環境をレポジトリのマニフェストに合わせるGitOpsを実現するツールです。
* 例えば、実環境を手動で変更した場合、ArgoCDによりマニフェストに従う形に自動で修正されます。
* これにより「今サーバの状態がどうなっているか誰もわからない！（秘伝のタレ問題）」という状態を防げ、いつでもレポジトリを見れば今の構成を知ることができます。

### 勉強方法

* 案件で使っていて概要は知っているところからのスタートです。
* 上記CNCFのページで紹介されているリンクを辿り、知らない部分を少しずつ理解を進めました。
* ArgoCDでのKustomizeの使い方は[このページ](https://blog.mosuke.tech/entry/2021/05/06/argocd-application/)がわかりやすかったです。
* カリキュラムに書かれていないが本番で聞かれたこと
    * ignoreDifferences(差分を無視させる)設定は聞かれるので、書き方など理解しておくとよいです
    * ApplicationSetリソースについても聞かれました

## ArgoRollouts

### ArgoRolloutsとは

* ブルーグリーンデプロイ、カナリアリリースを実現するツールです。
* 通常のk8sリソースであるDeploymentを少し拡張した、kind: Applicationというカスタムリソースで定義します。
* ブルーグリーンデプロイを構成すると、activeService(稼働系)とpreviewService(確認系)のReplicasetがデプロイされます。このPreviewで動作を確認し、動作が問題なければPreviewをActiveに昇格させることでリリースを行います。
* カナリアリリースを構成すると、stableService(稼働系)とcanaryService(カナリア系)のReplicasetがデプロイされます。このstableとcanaryに指定した割合(例 90:10等)で本番トラフィックを割り当てて、徐々に切り替えリリースを行うイメージです。

### 勉強方法

* 案件で使っていて概要は知っているところからのスタートです。
* 上記CNCFのページで紹介されているリンクを辿り、知らない部分を少しずつ理解を進めました。
* 以下は知らなかったので、案件の際に役立ちそうでした！
    * ApplicationリソースからDeployment等のリソースを参照させ、Pod定義は通常の通りDeployment、ブルーグリーンやカナリアに関する記述だけをApplicationリソースに書くことができる
        * https://mura-s.hatenadiary.jp/entry/2021/06/01/202741
    * 昇格の判定にAnalysisTemplateを使える
        * 例：Prometheusから取得したHTTPリクエストの成功率が95%以上の場合のみ、カナリアリリースのステップを進める
* カリキュラムに書かれていないが本番で聞かれたこと
    * カナリアデプロイで分析判定が失敗した場合、ブルーグリーンデプロイの昇格前分析で判定失敗した場合、ブルーグリーンデプロイの昇格後分析で判定失敗した場合、それぞれの挙動を把握しておくとよいです

## ArgoWorkflows

### ArgoWorkflowsとは

* kubernetesで動くワークフロー実行エンジンです。CICDも実装できます。
* AWSでいうとCode Pipelineのイメージでしょうか。

### 勉強方法

* 上記CNCFのページで紹介されているリンクを辿り、少しずつ理解を進めました。
* カリキュラムに書かれていないが本番で聞かれたこと
    * Workflowへのパラメータの渡し方（マニフェストでの渡し方、ファイルでの渡し方）

## ArgoEvents

### ArgoEventsとは

* 例えばS3へのファイル配置をトリガーとして別の領域にファイルをコピーするなど、イベントドリブンにアクションを実行するためのツールです。
* 実行するアクションは基本的にはkubernetesで実行するJob(kind: Job)となるユースケースが多いようです。

### 勉強方法

* 上記CNCFのページで紹介されているリンクを辿り、少しずつ理解を進めました。
* 概要理解に[こちらのページ](https://qiita.com/oguogura/items/f5bbf7409c283e0e2423)が役立ちました。
* ArgoEventは基本的にコンポーネントの役割の理解までしか聞かれなかったので、そこを重点理解しておくとよいです。ArgoEventは全体の中では出題の比重低め。
Certified GitOps Associate (CGOA)

## はじめに

CNCF主催の認定試験 **Certified GitOps Associate (CGOA)** を受験し合格したので、受験記を記載します。同認定試験の受験を考えている方の参考になれば幸いです。

## 免責事項(Disclamer)

:::note warn
* 本投稿は受験当時の情報となります。受験を検討する際は最新の情報の確認をお願いします。
* 本投稿は個人の所感です。
    * 所属する企業や団体は関係ありません。
    * 情報の利用は自己責任でお願いします。
:::

## 試験概要

* GitOpsの概念についての認定試験です。
* 受験日：2024/10/31
* 試験形式
    * オンライン試験
    * 1回再受験可能
    * 多肢選択式
    * 試験時間90分
    * 試験言語は英語のみ提供
    * 100点満点中75点以上で合格

## GitOpsとは

* レポジトリ上にあるマニフェストを必ず正しい情報源(Single Source of Truth)と見なし、実環境をレポジトリのマニフェストに合わせるような動作をGitOpsといいます。
* 例えば、実環境を手動で変更した場合、ArgoCDによりマニフェストに従う形に自動で修正されます。
* 「今サーバの状態がどうなっているか誰もわからない！（秘伝のタレ問題）」という状態を防げ、いつでもレポジトリを見れば今の構成を知ることができます

## 勉強方法

### 学習リソース

* この試験はGitOpsの概念を手を変え品を変え聞かれる試験です。
    * 例えば、「GitOps文脈での宣言的とは以下の説明のどれが該当するか」等
    * 認定のカリキュラムに沿って、概念を説明してくれているサイトがあったので参照しました。
    * https://github.com/otkd/CGOA-Study-Guide
* 練習問題を探したのですがよいものがなく、以下のサンプル問題を実施して感覚を掴みました。
    * https://www.vmexam.com/linux-foundation/linux-foundation-cgoa-certification-exam-sample-questions

## 受験してみての所感

* 問われる内容自体はGitOpsの概念を理解していれば簡単です。
* 今回の試験はGitOps関連の技術用語や概念を問われるので、きちんと英語を読む必要があったのが大変でした。
* 明らかに違う選択肢はあるものの、二択くらいできちんと答えを読んで吟味する必要があります。
* 問われていることの内容自体はさほど難しくないものの、GitOpsの用語を理解した上でGitOpsだと具体的にどう動くかをイメージしておく必要がありそうです。
    * 例：　「Q. GitのPull Automaticallyという原理は実際のシステムだとどのような動きになるか？」
    * 「A. Pull用のエージェントがState Store(Git等)から宣言的な設定をPullしてくる」
Prometheus Certified Associate (PCA)

## はじめに

CNCF主催の認定試験 **Prometheus Certified Associate (PCA)** を受験し合格したので、受験記を記載します。同認定試験の受験を考えている方の参考になれば幸いです。

## 免責事項(Disclamer)

:::note warn
* 本投稿は受験当時の情報となります。受験を検討する際は最新の情報の確認をお願いします。
* 本投稿は個人の所感です。
    * 所属する企業や団体は関係ありません。
    * 情報の利用は自己責任でお願いします。
:::

## 試験概要

* クラウドネイティブで活用されるメトリクスDB Prometheusについての認定試験です。
* 受験日：2024/10/28
* 試験形式
    * オンライン試験
    * 1回再受験可能
    * 多肢選択式
    * 試験時間90分
    * 試験言語は英語のみ提供
    * 100点満点中75点以上で合格

## Prometheusとは

* Prometheusとは
    * Googleが開発したメトリクスDBのこと
    * 最近のOSSにおけるデファクトのメトリクス出力=Prometheus形式
* メトリクスのみを扱うため軽量
* データ取得は対象毎のエクスポーターとして分離されて多数用意されており、PrometheusはエクスポーターからデータをPullする
* PromQLによる柔軟性の高いクエリ
* 可視化にはGrafanaが使われることが多い

## 勉強方法

### 学習リソース

* まずは体系的に学びたかったので、以下の本で勉強しました。割と新しめの本で、一通り学べてよかったです。（たまに例が分かりづらいところありましたが）
    * [Prometheus実践ガイド　クラウドネイティブな監視システムの構築](https://www.amazon.co.jp/Prometheus%E5%AE%9F%E8%B7%B5%E3%82%AC%E3%82%A4%E3%83%89-%E3%82%AF%E3%83%A9%E3%82%A6%E3%83%89%E3%83%8D%E3%82%A4%E3%83%86%E3%82%A3%E3%83%96%E3%81%AA%E7%9B%A3%E8%A6%96%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E3%81%AE%E6%A7%8B%E7%AF%89-%E4%BB%B2%E4%BA%80-%E6%8B%93%E9%A6%AC-ebook/dp/B0C1MDF14Y/ref=sr_1_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=3GKL4TO7Y3MRL&dib=eyJ2IjoiMSJ9.rL8iNNv3s5bXfegJqXLU3EwHYsatJcKz1RaJwwGBUktTDyyWO-m9H2uAgQNJ86dpxy0XMMphPb9QVa3kTIqTIA7kk-jCPtRTam9n3ONG3Dh9BaC_VBXvVAQd2zDsjbXWZUMIS4x6u5J6lEV2_3boIoKAYtCPrf6A7WxgLYw2yxAu1A-Jp5ycgQz29rF5pZx3Mluw1kNrOKTlIgmZtQ67DZsNRz4fhyFGFgowLZlzmOw.Nvzp6T2lV9tBAT9_sHEASChVIxpLfyeyeCohZkWQH-U&dib_tag=se&keywords=prometheus&qid=1728972248&s=digital-text&sprefix=prometheus%2Cdigital-text%2C198&sr=1-1)
* 練習問題
    * 公式の練習問題などは見つからなかったので、有志が公開している以下をやりました。
    * [Mock Exam](https://gist.github.com/luckylittle/68ea588d1242cff04765bbeddbed8fef)
    * 自分がわかっていないところを見つけるのに結構有用でした。

## 受験してみての所感

* Prometheusのコンポーネント、Pushgateway、プル型、などのPrometheusの基本については結構出ました
* Prometheusだけではなく、可観測性の概念に関する問題も出ます。
* PromQLに関する問題がやはり多くでるので、ここは重点的にやるとよいです。
    * インスタントベクトルの演算方法（ラベルを一致させる）、範囲ベクトルの集計方法（xxx_over_time())
    * ヒストグラムとサマリーの使い方
    * rate()とirate(）の違い
* AlterManagerに関する問題もでますが「こういうアラートはこの設定だとどこにルーティングされるか？」という問題がメインでした。