OmniAICreator/Qiita-1.07M huggingface dataset:
サーバ機器などに挿しこむPCIeカードの種類について

Dellのエンタープライズ向けサーバ製品、PowerEdgeシリーズの中でR760xd2という型番がある。
様々なタイプを特徴を持ったサーバ機器がラインナップされているPowerEdgeシリーズにおいて、R760xd2はまずHDD SATAディスク(3.5インチ)を多く積める、という特徴を持つことで名が知られている。

通常、サーバ機器に内蔵する物理ディスクは3.5インチよりも2.5インチドライブの方を多くの本数を積めるような仕様になっている。
このR760xd2は例外的に2.5インチドライブはNVMeタイプが2本程度で、3.5インチドライブが最大24本も積める。

しかしR760xd2のユニークな特徴はそれだけでない。背面タイプの選択肢が非常に多い、という特徴も持っている。これは3.5インチドライブの件よりもそこまで知られていない印象がある。
どれだけ背面タイプの種類が多いか、簡単にざっと以下に一覧でまとめてみる。

- 4×3.5インチSAS/SATAまたは4×2.5インチNVMeドライブを搭載した3×PCIeロープロファイルスロット
- 1×CPUを搭載した2×PCIeロープロファイルスロットおよび4×3.5インチSAS/SATAドライブ
- 5×PCIeロープロファイルスロット
- 1×CPUを搭載した3×PCIeロープロファイルスロット
- 5×PCIeロープロファイルスロットおよび2×2.5インチNVMeドライブ
- 1×CPUを搭載した3×PCIeロープロファイルスロットおよび2×2.5インチNVMeドライブ
- 3×PCIeロープロファイルスロットおよび2×PCIe フルハイト/フルレングススロット
- 2×2.5インチNVMeドライブを搭載した2×PCIeロープロファイルスロットおよび2×PCIe×16フルハイト/フルレングススロット
- 4×E3.S NVMeドライブを搭載した5×PCIeロープロファイルスロット
- 4×E3.S NVMeドライブを搭載した2×PCIeロープロファイルスロットおよび2×PCIe×16フルハイト/フルレングススロット

こうして列挙してみると、何がどういう構造になっているのかわからない。
どういった用途でサーバを使うのか、を考えた際に拡張性や適切なPCIeカードの選択は必須になるため、ここの詳細を理解しておくことは重要である。

## PCIeスロットの種類

まずPCIeカードを挿しこむためのスロットについてである。

x1：1レーンのスロット。低帯域のデバイスで使われる。ネットワークカードなどが候補になる。
x4：4レーンのスロット。高速なネットワークカード、SSDの利用で候補になる。
x8：8レーンのスロット。高速ストレージなどの利用で候補になる。
x16：16レーンのスロット。GPUはこのレーンで利用される。

というように、レーンの数が多いほど性能の良い使い方ができる特性となっている。

## カードのサイズ

次はPCIeカードのサイズについて見ていきたい。

フルレングス：長さが312mmまでのカード。
ハーフレングス：長さが175.26mmまでのカード。近年はこのサイズが主流。
ロープロファイル：高さが64.41mmまでの小型カード。M1(長さ119.91mm)とMD2(長さ167.64mm)の2種類がある。
フルハイト：高さが107mmのカード。

これらのサイズのカードが背面に何種類、何個搭載できるのか、この組み合わせで背面の構造を選定していく。

## よく使われているPCIeカード

最後に実際にPowerEdgeサーバのスロットでよく利用されているPCIeカードについて見ていく。
1GBase-T ×2ポートはマザーボード(サーバ機器に最初の段階で挿入されている基板)でよく搭載されている。


サーバ機器の空きスロットに挿入されるものとして、まずネットワークカードからいくと10GBase-T ×2ポートが搭載されているPCIeカード、Intel製のX550-T2はよくユーザさんに使われている。長さと高さの関係はハーフレングス、フルハイトとなっている。
同じくネットワークカードで、10GbE(SFP＋) ×4ポートが搭載されたPCIeカード、こちらもIntel製でX710-DA4という型番、長さと高さの関係はハーフレングス、フルハイトとなっている。

高速ストレージであるBOSS-N1モジュールについてはどうだろうか。80mmのNVMe SSDをサポートしているこちらのカードもサイズはハーフレングス、フルハイトの関係となっていて、基本的にはハーフレングス、フルハイトのサイズで挿入されるPCIeカードを使う機会が多い傾向が見られる、ということもここで記述させていただいた。

## ひとりごと

人生でまだ花粉症になったことが一度もない。
周りで発症している人が多く、彼らを見ていると毎春はかなりシンドそうで、未発症の自分はラッキーだなと思うことがある。

ただ花粉症は遺伝も年齢も関係なく、突然発症するものらしく、いつ自分が発症するのかわからない怖さもある。
「今年こそ発症してしまうのか」とビクビクしながら毎春を迎えるのは、花粉症の辛さがわからない分、ある意味では発症済の人よりもキツいのではないか、とも思っている。

今年の春も一応は発症を免れたようです。
Power Automate の「Microsoft Entra ID を使用した HTTP」に権限を委任する方法メモ

### 1. 以下の公開情報より PowerShell と ManagePermissionGrant.ps1 ファイルをダウンロード
https://learn.microsoft.com/ja-jp/connectors/webcontentsv2/#%E3%82%B3%E3%83%8D%E3%82%AF%E3%82%BF%E3%81%8C%E3%82%B5%E3%82%A4%E3%83%B3%E3%82%A4%E3%83%B3%E3%81%97%E3%81%A6%E3%81%84%E3%82%8B%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC%E3%81%AE%E4%BB%A3%E3%82%8F%E3%82%8A%E3%81%AB%E5%8B%95%E4%BD%9C%E3%81%99%E3%82%8B%E3%81%93%E3%81%A8%E3%82%92%E8%A8%B1%E5%8F%AF%E3%81%99%E3%82%8B


### 2. PowerShell をインストール


### 3. PowerShell 画面上に ManagePermissionGrant.ps1 ファイルをドラッグ＆ドロップして実行

### 4. 表示されたダイアログで権限を選択
![スクリーンショット 2025-04-15 005348.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2629955/92bcc46c-fc24-43c5-a5e8-cdf792fff694.png)

### 5. 権限が委任されたことを確認
Microsoft Entra 管理センターの「エンタープライズ アプリケーション」で「PowerPlatform-webcontentsv2-Connector」を検索。
![スクリーンショット 2025-04-15 005627.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2629955/e551b8d4-e83c-4f7d-a06f-127e00faa99c.png)

### 6. Power Automate メーカーポータルの「接続」で、「HTTP With Microsoft Entra ID」の接続を新規作成
※ 上述の権限委任の作業を行ったアカウントで接続を作成する。

![スクリーンショット 2025-04-15 011604.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2629955/0643d1c4-4345-45e5-a76d-9f8d285547b4.png)

以降、Power Automate でこの「HTTP With Microsoft Entra ID」を使う
ブックマークでリンク取得

# ブックマークボタンでリンクポップアップ

## 設定方法

ブックマークの編集を開いて

<img width="50%" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61019/b1b10021-beca-4e74-9827-7d34769e1eea.png>


下のアドレスを入れる

:::note warn
注意
ソース文はそのまま改行しないでください
:::


```:ブックマークに入れるスクリプト文
javascript:prompt('',`■${document.title}   ${location.href}`);
```

<!--  旧ソースちょっと保存しておきます

```:ブックマークに入れるスクリプト文
javascript:(function(){function o(s){prompt('',s)}o('■'+document.title+'   '+location.href+'');})();
```
-->


## 使用画面

こんな感じでブックマークに「リンク取得」を作ります

<img width="70%" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61019/75490dbd-5d70-40b8-8835-a376b39be98c.png>

アドレスがほしいページで「リンク取得」を押すと

<img width="70%" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61019/cde6897b-63b0-4c79-a288-b60d642b27a0.png>

こんな感じでポップアップ画面でアドレスが出ますので
そのままコピーしちゃってください。
未経験エンジニアに必要なスキル

## エンジニア基礎力
### コンピュータサイエンスの基礎
○アルゴリズムとデータ構造・コンピュータの仕組み
アルゴリズムやデータ構造、そしてコンピュータの基本的な仕組みを理解しておくことは、どのプログラミング言語を使う場合でも非常に重要です。たとえば、処理を効率化するための考え方や、データの扱い方、メモリの使い方などは、言語が変わっても変わらない普遍的な知識です。こうした基礎がしっかり身についていれば、応用力やトラブル対応力も格段に高まります。



### 問題解決能力

問題が発生したときに、ただ対処するのではなく、その原因を深掘りして理解する力が求められます。どこに処理の無駄があるのか、どの部分が全体の足を引っ張っているのかを見極めることで、本質的な解決につながります。根本原因を正確に捉えたうえで、最も効果的な対処法を導き出せる能力は、エンジニアにとって非常に重要なスキルです。

### 自己学習能力
テクノロジーの進化が非常に早いIT業界では、数年前まで主流だった技術が、あっという間に使われなくなることも珍しくありません。現在持っているスキルだけに頼っていると、すぐに通用しなくなってしまうリスクがあります。そのため、常に情報収集を怠らず、新しい技術やツールに興味を持って学び続ける姿勢が重要です。特に未経験からエンジニアを目指す場合は、「学び続けること」自体が仕事の一部だという意識を持つことが大切です。

### コミュニケーション能力
エンジニアはチームで協力して開発を進めることが多く、時には技術に詳しくないメンバーにも内容を分かりやすく伝える力が求められます。円滑なコミュニケーションが、プロジェクト全体の品質や進行に大きく影響するためです。

### ビジネス視点
❌新しく興味的だから使いたい
⭕️この技術を使うことでビジネスにどんな価値をもたらすかを考える

### AIの活用
○AIのアウトプットの危険性
AIにコーディングをしてもらったものをそのまま使う場合、以下の点に注意が必要です。
・ハレーション(誤情報)
・セキュリティホールの可能性
・パフォーマンスの問題

→これらを適切に評価し、必要な修正を加えられるスキルが必要になります

○プロンプトエンジニアリングも求められる

## 技術的最低ライン
### Git・GitHubを使いこなせる
ソースコードの変更履歴を管理したり、複数人での共同開発をスムーズに行うために欠かせないのがGitとGitHubです。Gitはローカルでのバージョン管理、GitHubはその共有・公開のためのプラットフォームとして活用されます。

### Docker
Dockerは、アプリケーションの実行環境を“コンテナ”という単位でまとめ、どの環境でも同じように動作させることができる技術です。開発環境の構築や本番環境への移行が簡単になるため、現代の開発では非常に重宝されています。

### SQL
SQL（Structured Query Language）は、データベースにアクセスしてデータを操作するための言語です。アプリケーションにおいてデータの取得・追加・更新・削除を行う際に使われ、実務では頻繁に使用されます。近年ビジネスサイドの人でも理解し始めているため、当たり前にしておく必要があります。

### Linuxコマンド
多くのサーバーで採用されているLinuxでは、コマンドラインを使ってファイルの操作やアプリケーションの実行を行います。基本的なコマンドを使いこなせるようになると、開発や運用の効率が大きく向上します。

### HTTPとその周辺技術
Webアプリケーションでは、クライアントとサーバーの間でデータのやりとりがHTTPという通信ルールを使って行われます。ステータスコードやAPIの仕組みなど、HTTPに関する知識はWeb開発を理解する上での基礎となります。

### HTML・CSS
HTMLはWebページの構造を作る言語、CSSはその見た目を整えるためのスタイルシート言語です。ユーザーに見える部分の開発にはこの2つの技術が欠かせません。

### サーバーサイド言語とWebアプリケーションフレームワーク
○PythonとFastAPI
Pythonで使えるFastAPIというフレームワークを使えば、高速かつ効率的にWeb APIやWebアプリケーションを開発することができます。

### JavaScript
JavaScriptは、Webページに動きやインタラクションを加えるためのプログラミング言語です。例えば、ボタンをクリックした時に内容が変わるといった動的な処理を実現するために使われます。
【Apache】初級備忘録

## 初めに
こんにちは、Apache初心者です。
Apacheを実際にさわっていく上で基本的なところをまとめました。
macOSです。

:::note alert
Apacheがどういったものなのかという内容は含みません。
:::

# 1. インストール
* インストール
```bash
brew install httpd
```
:::note warn
ApacheはmacOSで標準搭載されているが、標準のものは署名していないプログラムを起動しないようになっており、PHPのモジュールがひっかかってしまうため、brew版をinstallする。
:::

* 確認
```bash
httpd -v
```

# 2. 設定ファイル
* 設定ファイルの場所
`/usr/local/etc/httpd/httpd.conf`

## 設定ファイルで最低限知っておきたいとこ
* ポート
```conf:httpd.conf
Listen 80
```
* 公開するフォルダ
```conf:httpd.conf
DocumentRoot "/usr/local/var/www"
```

# 3. コマンド
## 3.1. 基本
`httpd`コマンドの-kでプロセスの管理をする。
特権ポート（例えば80番ポート）を使用する場合はsudoが必要。
### Apacheの起動
```bash
httpd -k start
```
アクセス先: http://localhost
### Apacheの停止
```bash
httpd -k stop
```

### Apacheの再起動
```bash
httpd -k restart
```

## 3.2. 設定ファイルのチェック
設定ファイルにシンタックスエラーがないか確認するコマンド。
再起動前に必ず確認する。
```bash
httpd -t
```

## 3.3. brew serviceをつかった場合

brew serviceコマンドで起動することで、サーバーを再起動した場合に自動的にApacheを起動してくれる。

:::note warn
いちいち起動する手間が減って便利だが、常にバックグラウンドで動かれてメモリやCPUリソースを使うので、ずっと起動しておく必要がなければhttpdコマンドを使う。
:::
### Apacheの起動
```bash
brew services start httpd
```

### Apacheの停止
```bash
brew services stop httpd
```

### Apacheの再起動
```bash
brew services restart httpd
```

### Apacheのステータス確認
```bash
brew services list
```

## 参考文献
* https://qiita.com/bezeklik/items/990bed2e7e529584fa57
* https://qiita.com/r1999/items/1ae5347ed6d0d468cc2c
* https://zenn.dev/megeton/articles/ba75098f1ba7d1
* https://weblabo.oscasierra.net/apache-macos-install-homebrew/
* https://study-infra.com/apache-setting-for-beginer/
【365日後にPredictive Master】大企業の平社員がAlteryx Weekly Challengeに挑む #001

## はじめに
こんにちは、積立お兄さんです。
大企業新卒３年目のAlteryx初心者です。
ひょんなことから「**365日後にPredictive Masterになる！**」という目標を掲げて、公式のWeekly Challengeにコツコツ挑戦しています。

この記事では、Alteryx歴3か月の平社員が、実務で生かせそうなノーコード分析力をどうやって身につけていくかを記録＆共有していきます。

- 目標：ETLツールを自在に使いこなせるようになる
- 対象読者：Alteryxを始めたばかりの方/Weekly Challengeの解説が欲しい方

---

## 今回のチャレンジ：Weekly Challenge #001

- タイトル：[Weekly Challenge #001：範囲に結合] [LINK](https://community.alteryx.com/t5/%E3%82%A6%E3%82%A3%E3%82%AF%E3%83%AA%E3%83%81%E3%83%A3%E3%83%AC%E3%83%B3%E3%82%B8%E3%83%AA%E3%83%9D%E3%82%B8%E3%83%88%E3%83%AA/%E3%83%81%E3%83%A3%E3%83%AC%E3%83%B3%E3%82%B8-1-%E7%AF%84%E5%9B%B2%E3%81%AB%E7%B5%90%E5%90%88/td-p/390469)
- レベル感：中級者向け
- ゴール：結合の処理を行い、指定フォーマットで出力する
- 入力１
<img width="500" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/658349/28704913-8119-4573-b99c-705524a1b1cd.png
">
- 入力２
<img width="500" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/658349/efe7c571-00e0-4e89-b6e1-cbd368da1625.png
">
- 出力
<img width="250" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/658349/d640381e-b0e3-4e37-8b45-d399272aa0d7.png
">
---

## 解いた流れと使用ツール

### ワークフロー全体

<img width="800" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/658349/79c69a7c-fe18-4d19-8341-04445fa3068c.png
">

### 処理の手順と解説
1. 列分割ツール　：Range列を2列に分割する
1. セレクトツール：分割後の列をint型にする
1. 行生成ツール　：Rangeの最小値と最大値の間の数分、行を生成する
    1. 初期化式 [Range1]
    1. 条件式 postalNumber<=[Range2]
    1. ループ式 postalNumber+1
1. 結合ツール　　：新しく生成されたpostalNumber列とPostal Area列をキーにして、２つの入力を結合する
1. 集計ツール　　：Region, Sales Rep, Responderでグループ化し、カウントを行う

---

## 詰まったポイントとその解決

- **問題１：行生成ツールの使い方がシンプルにわからない**
→ プログラミングで言う、ループ処理（For文）のように扱うことができ。ループ変数について、条件式がTrueの間に行が生成される。式で計算に使用する値は、あらかじめセレクトツール等でintに変えておく必要がある。
1.初期化式の値をセット
2.条件式の間新しい行生成
3.ループ式で、ループ変数を更新していく
ここで、初期化式や条件式に列を指定することで、最小値から最大値にループ変数が変わったときに次のRangeの最小値、最大値を参照するように工夫している。
---

## 結果と出力確認
<img width="500" src="https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F658349%2F504c2581-c3fd-4387-b19d-42cf983feaa4.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=ee5ab3f6f40a4cc8be8665ba3538d3f3">

→正しい出力フォーマットで、指定要件を満たしていました！

---

## 今日の学び・振り返り

- **新しく覚えたツール：** 行生成ツール
- **工夫ポイント：** 行生成ツールの条件式の中で列名（いわば動的な変数）を用いることで、柔軟にループを一番下まで回すことができた
- **実務への応用：** RangeでExcelに記入されている事項があった場合、そのRangeの範囲分列を生成することができる。

---

## 次回予告
次は【Weekly Challenge #002】に挑戦予定！

---
## タグ
`Alteryx` `weekly Challenge` `データ分析` `Predictive Master` `365日チャレンジ` `ノーコード`
try! Swift iOSもくもくハッカソン　振り返り

# はじめに
try! Swift 最終日の翌日に開催された、学生向けもくもくハッカソンに参加してきました！

# 当日のスケジュール
11:00　運営各社LT
12:30　ランチ
13:30　開発開始
17:00　開発終了/成果発表/懇親会
19:00　完全終了

# 取り組んだこと
・個人開発アプリのフィードバック収集
・参加者との交流
コードは全く書かなかった気がしますが、色々な方と交流できたので大満足でした！

https://apps.apple.com/us/app/ぶんたん-for-英検/id6739174811

↑　色々な方に触っていただきました　↑

# 当日得た知見
## アプリUIの改善
### NG : 役割の違う二つのボタンを並列して表示

<p float="left">
  <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4013949/de23f882-0fa3-4529-9003-2f6a1e9fadf3.jpeg" width="98.5%" />
</p>
<p float="left">
  <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4013949/3a88414e-65f0-4921-9c0f-775df63c892a.jpeg" width="49%" />
  <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4013949/7236f6e5-8557-4e75-aa55-9658e25210f3.jpeg" width="49%" />
</p>

### 使用頻度を考えたボタン配置に（要修正）
<p float="left">
  <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4013949/a22f6297-ff45-4e56-bcc7-2b0600ae7c18.jpeg" width="98.5%" />
</p>


### その他
・文字サイズが小さい
・説明なしでわかるデザインにする　など

## 個人開発の色々
詳細は割愛しますが、
・アーキテクチャ
・A/B Testing
・リリース初期の伸ばし方
・収益化
などについてアドバイスをいただきました！

# さいごに
iOSエンジニアになりたい気持ちが一層強くなりました！
運営企業およびメンターの方々、交流してくださった方々、ありがとうございました！
来年も開催があれば参加したいと思います！！
CCライブラリでillustratorとXDを同期して爆速プロトタイプ開発

# はじめに
Adobe XDでアプリのプロトタイプを作る際、**自分で作ったデザイン使いてー** ってなったことありません？
また、プロトタイプ作成後にアイコンなどのデザインを変更して、プロトタイプ作り直しになることも多いですよね。
そこで、AdobeCC ライブラリを用いて、illustratorなどでのデザイン修正をXDに同期させる方法を紹介します。

# AdobeCCライブラリに保存

このようなデザインをillustratorで作っています。

![スクリーンショット 2025-04-14 23.20.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2823873/1da671d4-c87b-47b8-ab31-19429804e732.png)

まずは、AdobeCCライブラリのウィンドウを開きます。
`ウィンドウ / CCライブラリ` を選択します。

![スクリーンショット 2025-04-14 23.20.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2823873/85a7dadb-5eac-4d85-a5aa-39d405cf372d.png)

このような画面が出てきます。保存場所を決めたいので、`ライブラリ` を選んでおきましょう。他のライブラリ（フォルダのようなもの）を作成することもできます。

![スクリーンショット 2025-04-14 23.21.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2823873/89c61fba-34df-49ba-80cf-4f47b83ba99b.png)

次に、 `⌘+A` などでアートボードを全選択して、CCライブラリウィンドウにドラッグ&ドロップします。

![スクリーンショット 2025-04-14 23.20.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2823873/730e0237-2086-4dde-a253-6311cd22267b.png)

選択範囲がライブラリに保存されたら成功です。

![スクリーンショット 2025-04-14 23.21.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2823873/fda7e3b5-b19a-4a03-9d64-f72381b4ef67.png)

# XDで呼び出す

次に、AdobeXDを開き、右下のライブラリアイコンを選択します。

![スクリーンショット 2025-04-14 23.21.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2823873/66c7f537-37b1-4afa-930c-715e6dd3a4ee.png)

先ほどと同じ、CCライブラリウィンドウが表示されます。
アートボードを保存した、ライブラリを開きましょう。

![スクリーンショット 2025-04-14 23.21.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2823873/0b110282-4a5d-4760-a6f9-a9fdd220e7ec.png)

先ほど保存したデザインが表示されました！

![スクリーンショット 2025-04-14 23.21.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2823873/f8d602ec-4d8c-4ee5-bb20-3c997117719d.png)

これをドラッグ&ドロップすることで、プロトタイプ内で利用できます。

![スクリーンショット 2025-04-14 23.22.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2823873/0947c77d-120e-4ba6-b5ab-7a67c06b8371.png)

# illustratorで編集する

さて、このアイコンを編集してみます。
編集する際には、**ライブラリのアートワークをダブルクリックして開きます。**

![スクリーンショット 2025-04-14 23.21.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2823873/fda7e3b5-b19a-4a03-9d64-f72381b4ef67.png)

![スクリーンショット 2025-04-14 23.22.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2823873/2cf4cee5-8362-4008-94a5-9558ce52b37f.png)

この画面で編集し、保存しましょう。

![スクリーンショット 2025-04-14 23.23.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2823873/4cc7d53e-2efe-42af-ad41-4171b86c7b60.png)

保存の際に以下のようなアラートが表示されることもありますが、OKを押して良いです。

![スクリーンショット 2025-04-14 23.22.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2823873/3d5578e9-3fd3-4da5-823d-1d2b93eff27e.png)

XDを見てみると、変更が即座に反映されています！

![スクリーンショット 2025-04-14 23.23.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2823873/754adcba-6d45-4052-a687-3e1a43761161.png)

# まとめ
CCライブラリは、Adobe製品ならいろんな場所で使うことができます。
ぜひこの方法を応用してみてください！
Typescriptを動かす（[ERR_UNKNOWN_FILE_EXTENSION]: Unknown file extension ".ts" を解決）

# 今回の問題
ts-nodeを使用して以下のエラーが起きた。
TypeError [ERR_UNKNOWN_FILE_EXTENSION]: Unknown file extension ".ts"

これが原因で実行できない。

## 解決策
以下のコマンドでプロジェクトを作成する。

```
$ mkdir project 
$ npm install --save-dev typescript
$ npx tsc --init
$ npm i -D tsx
```

以下のコマンドで実行する
```
$ npx tsx index.ts
```

# 結果
色々なサイトで確認しましたが、ts-nodeなどを使用しても実現できませんでした。
結果的にこちらの手順に行き着きました。
原因の確認はできませんでしたので、今後確認したいと思います。
（知見のある方コメントお願いします。）
ご参考になればと思います。
初投稿と自己紹介

## 挨拶
初めましてすずきと申します。
Qiita初投稿になります。
エンジニアを初めて半年弱になります。
SES企業に勤めており、現在は初の現場で、社内外の先輩方に色々教えてもらいながらなんとか毎日生きている次第です。
これからよろしくお願いします！！！

## なぜQiitaを始めたのか
Qiitaを始めた理由は色々と「おいしい」と思ったからです。
・自分の学習したことのアウトプットの先として扱える。
・Markdownの学習ができる。
・自分のノート(備忘)として残しておける。
etc...

## 目標
目標はひとまず今年の10月までに下記の資格です。
・Java Gold(Java Silver取得済み)
・基本情報資格者試験(ITパスポート取得済み)

## 最後に
基本的には自学のアウトプット用に利用させていただくメモのような投稿が続くと思います。
拙いものばかり投稿するかと思いますがご意見やアドバイスを頂けますと幸いです。
改めてよろしくお願いします！！！！
KaliでVNCを設定する方法

# はじめに
こんにちは！高校生でプログラミング勉強中のCureSabaです。

今回はkaliでvncを設定したのですが少し手間取ったので記事に残します。
参考になれば光栄です！

# 手順
## tightvncserverの修正
kaliにはデフォルトでtightvncserverがインストールされているのですが、こいつは`tightvncserver: couldn't find "vncpasswd" on your PATH.`と出て何故か違う実行ファイルを読み込もうとするので直します

```bash
sudo sed -i 's/vncpasswd/tightvncpasswd/g' /usr/bin/tightvncserver
```
これで`vncpasswd`を`tightvncpasswd`に置き換えます

## VNCの修正
今VNCで開くと灰色の画面にバツ印が出るだけなので直します
### 一応バックアップ
```bash
cp ~/.vnc/xstartup ~/.vnc/xstartup.bak
```
### 編集
```bash
sudo nano ~/.vnc/xstartup
```
### 置換
`~/.vnc/xstartup`を下の通りに置換する
```text:~/.vnc/xstartup
#!/bin/sh

unset SESSION_MANAGER
unset DBUS_SESSION_BUS_ADDRESS
startxfce4 &

[ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup
[ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
xsetroot -solid grey
vncconfig -iconic &
```
### ufw設定
ufwに穴を開けておく(今回はディスプレイ1を使用する場合)
```bash
sudo ufw allow 5901
```
### 起動
下に従って起動

# tightvncserverの使い方
## 起動
ディスプレイ番号をセットしなければ勝手に１になる
ポートは5900+ディスプレイ番号
```bash
tightvncserver :ディスプレイ番号
```
## 停止
```bash
tightvncserver -kill :ディスプレイ番号
```
## 画面解像度変更
設定からは変更できないので実行前に変更する必要あり
px単位で指定
```bash
tightvncserver :ディスプレイ番号 -geometry 幅x高さ
```

## 任意のポートにする
```bash
tightvncserver :ディスプレイ番号 -rfbport ポート番号
```
# おまけ
## systemctl登録
VPS起動時に起動するようにsystemctl登録
```bash
sudo nano /etc/systemd/system/tightvncserver.service
```
```text:/etc/systemd/system/tightvncserver.service
[Unit]
Description=Tight VNC
After=syslog.target network.target

[Service]
Type=forking
User=ユーザー名
ExecStartPre=-/usr/bin/tightvncserver -kill :1 > /dev/null 2>&1
ExecStart=/usr/bin/tightvncserver :1 -geometry 1920x1080
ExecStop=/usr/bin/tightvncserver -kill :1

[Install]
WantedBy=multi-user.target
```
```bash
sudo systemctl daemon-reload
sudo systemctl enable tightvncserver.service
sudo systemctl start tightvncserver.service
```


# 終わりに
もし、この記事が役に立ったと思ったら、ぜひコメントやシェアをお願いします。また、質問や改善点などがあれば気軽にコメントしてください！

それでは、良いプログラミングライフを！
「LLM事前学習と圧縮の関係性」に関するブログ



## はじめに

大規模言語モデル（LLM）の事前学習と圧縮の関係性について、特にIlya Sutskeverの2023年の講義「An Observation on Generalization」に焦点を当てて解説します。この考え方は近年、GPT-4.5の事前学習に関する議論でも取り上げられており、AI研究の重要な概念となっています。

## 教師あり学習と教師なし学習の理論的違い

教師あり学習では理論が比較的発達しています。i.i.d.（独立同一分布）などの仮定の下で、訓練損失とモデルの複雑さを最小化することで、テストエラーの上限を予測できます。つまり、一定程度の汎化性能を予測することが可能です。

一方、教師なし学習では、そのような保証はまだ明確ではありません。2025年現在でも、教師なし学習の目的関数を最小化することが、どのようにして下流タスクのパフォーマンス向上に繋がるのかを完全に理解できていません。

## Sutskeverの仮説：教師なし学習 = 圧縮

Sutskeverは「教師なし学習 = 圧縮」という仮説を提案しました（この類似の議論は他の研究者からも提起されています）。

データセットXとYがあり、圧縮器Cがあるとします。圧縮されたデータのサイズを|C(data)|と表します。良い圧縮器は以下の条件を満たすべきです：

|C(concat(X, Y))| < |C(X)| + |C(Y)| + O(1)

これは、良い圧縮器がXとYの共有パターンを見つけ出すため、結合圧縮は個別の圧縮よりも短くなることを意味します。つまり、圧縮 = パターン抽出と考えられます。

多くのデータポイント間でパターンが共有されていれば、より良い圧縮が達成され、抽出された知識が有用になります。例えば、日本語(X)と英語(Y)のデータセットを圧縮すると、共有される言語構造や世界知識を活用できるかもしれません。

## コルモゴロフ複雑性との関係

コルモゴロフ複雑性K(X)は、Xを出力する最短のプログラムの長さです。これは理想的な圧縮を表します。計算可能なあらゆる圧縮器Cについて：

K(X) ≤ |C(X)| + K(C) + O(1)

また、条件付き複雑性は：

K(Y|X) ≤ |C(Y|X)| + K(C) + O(1)

そして結合複雑性は：

K(X, Y) ≤ K(X) + K(Y|X) + O(log K(X|Y))

Xをラベルなしデータ、Yを未知のラベルとすると、理想的にはK(X,Y)を最小化したいところです。しかしYは未知なので、その代わりにK(X)を最小化し、K(Y|X)を小さく保つことを目指します。つまり、Xをよく圧縮し、Yに適応できるようにするのです。

真のコルモゴロフ複雑性は計算不能ですが、ニューラルネットを「検索可能な圧縮器ファミリー」と考えることができます。最大尤度での訓練は、圧縮の最大化に対応します。

したがって、教師なし学習において「圧縮」を通じた訓練は、共有構造やパターンを抽出するのに役立ち、これが下流タスクに利益をもたらします—特にそのパターンがタスクと整合している場合に効果的です。

## 2025年の視点から見た現状の課題

「知能 = 圧縮」という考え方は2025年現在でも有効ですが、いくつかの問題点がより明確になっています：

1. **良い圧縮器を見つけることの難しさ**：TransformerとSGDの組み合わせは強力ですが、最適でもデータ効率が良いわけでもありません。

2. **意味のある表現の保証**：良い損失関数があっても、意味のある表現が保証されるわけではありません。コンピュータビジョンでは、再構成損失だけでは不十分で、対照損失や他の補助的な損失が必要になることがあります。これは最適化の難しさに起因している可能性があります。

3. **データ効率の重要性**：合成データ生成、蒸留、共同蒸留などがどのように良い圧縮を達成するのに役立つかをさらに理解する必要があります。データの希少性が増すにつれて、データ効率の重要性は増していきます。

4. **教師なし学習の目的の再検討**：より良い方法を見つけるためには、教師なし学習の目的を見直す必要があります。

## まとめ

LLMの事前学習と圧縮の関係性は、単に技術的な問題ではなく、人工知能の本質に迫る深い洞察を提供します。圧縮を通じてパターンを抽出し、それを様々なタスクに応用できるという考え方は、現代のAI研究の根幹を成しています。

今後の研究では、より効率的な圧縮方法の開発や、圧縮とタスクパフォーマンスの関係性をより明確に理解することが重要になるでしょう。これらの進展により、より効率的で汎用性の高いAIシステムの開発が期待されます。
冨井悠平Tips：Webエンジニアに最低限求められること

こんにちわ、冨井悠平です！

Webエンジニアとして働く上で、「最低限押さえておくべきこと」は数多くあります。ただし、全てを網羅するのは現実的ではありません。ここでは、どのようなレベルのプロジェクトであっても共通して求められる、Webエンジニアの基礎的なスキルとマインドセットについて解説します。

---

# 1. **HTML/CSS/JavaScriptの基本理解**

Webのフロントエンドを構築するためには、HTMLとCSS、JavaScriptの知識が欠かせません。特に以下のような要素は最低限習得すべきです。

- HTMLの構造化と意味付け（セマンティックHTML）
- CSSによるスタイリングとレスポンシブ対応（FlexboxやGrid）
- JavaScriptによるDOM操作や基本的なイベント処理

これらの知識がないと、UIを再現したり、簡単な動きをつけることもできません。

---

# 2. **バージョン管理（Git）の使用経験**

チーム開発はもちろん、個人開発においても**Gitは必須スキル**です。

- `clone`, `commit`, `push`, `pull`, `merge`, `rebase` などの基本操作
- GitHubを使ったプルリクエスト（Pull Request）の流れ
- コンフリクトの解消方法

バージョン管理ができないと、コードの管理や共同作業に大きな支障をきたします。

---

# 3. **APIの基本理解と利用**

Webシステムの多くは、外部との連携にAPIを利用しています。

- RESTful APIの基本的な構造（GET/POST/PUT/DELETE）
- JSON形式のレスポンスの扱い方
- FetchやAxiosなどのHTTPクライアントライブラリの使用

APIを使いこなすことで、Webサービスとしての機能を拡張することができます。

---

# 4. **セキュリティの意識**

最低限でも、以下のような脆弱性やリスクについて知っておくべきです。

- XSS（クロスサイトスクリプティング）
- CSRF（クロスサイトリクエストフォージェリ）
- SQLインジェクション
- パスワードのハッシュ化と認証処理

セキュリティを軽視すると、重大な事故や信頼失墜につながります。

---

# 5. **エラーの自己解決能力**

エンジニアにとって、**「調べる力」**は必須です。

- エラーメッセージの意味を読み解く
- Google検索を効果的に使う
- Stack Overflowや公式ドキュメントの活用
- ChatGPTなどAIツールの併用も有効

問題を他人任せにせず、自力で解決する姿勢が評価されます。

---

# 6. **コミュニケーション力**

技術力と同じくらい重要なのが**コミュニケーション能力**です。

- 課題や進捗を分かりやすく伝える
- チームメンバーと協力する
- クライアントと要件をすり合わせる

特にリモート環境では、文章による情報伝達力が大きな武器になります。

---

# まとめ

Webエンジニアに最低限求められることは、以下の6点です。

1. HTML/CSS/JavaScriptの基本スキル  
2. Gitによるバージョン管理の習得  
3. APIの利用経験  
4. セキュリティへの配慮  
5. 問題解決能力（調べる力）  
6. チームとの円滑なコミュニケーション  

これらを押さえておくことで、どんなプロジェクトにも貢献できる土台ができます。初学者はまずこれらの基礎をしっかり身につけ、中級者・上級者を目指すステップとしましょう。
httpで制限される機能をhttpで使用する方法

こんにちは。じゅに（[@Jyu210_engineer](https://x.com/Jyu210_engineer)）です。

前回は[HTTP通信でブラウザで制限される主な機能の一覧](https://qiita.com/Jyu2/items/8af24b47650c82e9cb50)という記事を書きました。

現状、Webに公開されていてhttpというアプリやサービスはほとんどないので、あまり気にする必要はないとは思いますが、オンプレで社内ネットワーク上でWebアプリを提供する場合には、httpで導入する例もまだあると思います。
社内ネットワークなのでセキュリティ的に担保されている（注意が必要な要素はもちろんある）という前提なので、構築が楽なhttpが選択されるのでしょう。

そこで、まだまだ一定のニーズがあると思われるhttpでのWebアプリの導入。
前回の記事で紹介した機能を使用しないのであれば問題ありませんが、機能の中にはカメラやマイク機能など比較的使用する可能性があります。
それらを使用しようと思うと社内ネットワークであろうが、httpsでアプリを公開する必要が出てきてしまいます。

httpsに使用としても自己署名証明書を使用すれば、証明書発行などの工数はかかるものの、比較的簡単に無料でhttpsで構築することは可能です。
しかし、それすらも煩わしい、すでにhttpという記載が色々な箇所にあるために修正が大変なので、httpで導入したいと考えたくなります。

そのため、今回はhttpで制限される機能をhttpで使用するための対処方法を紹介します。

## 対処方法
結論から言うと対処方法は1つしかありません。

それは、ブラウザ**特定のサイトを「セキュア（安全）」と見なすように設定できる開発者向けの設定**を有効にすることです。

この設定は以下のChromium系のブラウザで設定が可能となっています。
- Google Chrome
- Microsoft Edge
- Brave
- Vivaldi
- Opera

この中ではGoogle ChromeかMicrosoft Edgeが使用される機会が多いのではないでしょうか。

残念ながらFireFoxやSafariでは設定ができないので注意が必要です。

## 設定内容
ChromeとEdgeに絞ってですが、具体的な設定内容を書いていきます。

### Google Chrome
Chromeを起動し、アドレスバーに以下を入力します。

```chrome://flags/#unsafely-treat-insecure-origin-as-secure```

そうすると以下のような設定画面が開きます。

![スクリーンショット 2025-04-14 22.21.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4057059/d8441ec9-d708-4010-a94c-c915896a3a85.png)

```Insecure origins treated as secure```
の欄にセキュアとみなしたいhttpオリジン（```http://example.com:80```など）を入力し、「停止中」を「有効」に設定し、ブラウザを再起動すると設定完了です。
（httpオリジンはカンマ区切りで複数設定可能です）

![スクリーンショット 2025-04-14 22.26.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4057059/5a8a64b3-70d0-45e3-a17d-b0d34ce02813.png)

### Microsoft Edge
Edgeの場合もChromeとほぼ変わりません。

Edgeを起動してアドレスバーに以下を入力します。

```edge://flags/#unsafely-treat-insecure-origin-as-secure```

そうするとInsecure origins treated as secureの設定が出てくるので、セキュアとみなしたいhttpオリジンを入力、設定を有効化してEdgeを再起動すると設定完了です。

※手元にMacしかないのでEdgeの画像はありません・・・

## 注意事項
この設定を使用するにはいくつかの注意点があります。
- あくまで開発者向けの設定であること（商用利用はできなくはないですが、推奨されない）
- ブラウザの今後のアップデートで使用できなくなる可能性があること

大きくはこの2点ですね。
ブラウザのアップデートでいつ使用できなくなるかも分からないですし、開発者向けの機能になるので、お客様に導入となると避けたほうが無難だとは思いますが、一時的な処置としては有効かと思います。

## 補足：httpオリジン、httpsオリジンとは
オリジンとは「スキーム（プロトコル）」「ホスト（ドメイン）」「ポート番号」の3つのセットのことになります。
例えば```http://example.com:80```の場合は
- スキーム（プロトコル）：http
- ホスト（ドメイン）：example.com
- ポート番号：80

になります。
普通に言うとWebサイトやアプリのURLですね。

## 最後に
前回の[HTTP通信でブラウザで制限される主な機能の一覧](https://qiita.com/Jyu2/items/8af24b47650c82e9cb50)という記事から、その中でもhttpのままブラウザで制限される機能を使用する方法を調べてみました。

注意事項でも書きましたが、ブラウザのアップデートでいつまで使用できるか分からないことと、開発者向けの機能になるのでお客様導入となると、いくら閉じられた社内ネットワークとはいえ、httpsで導入するのが良いと思います。

ちなみに本当に開発向け（サーバーもクラアインとも自PC）ということであれば、設定せずともlocalhostであれば、機能制限はされないことも覚えておきましょう。
脆弱なアプリケーション(DVWA)をOCI(OracleLinux8.x)にデプロイする

# はじめに
* いくつかのサイトを参照して、DVWAをOracleLinuxにデプロイしようとしたのですが、
パッケージのバージョンなどに制約がありハマったため、手順を残します。
* 特に、OracleLinux 7.9 では PHP 8.x がインストールできず、最新のDVWAが利用できなかったため、OracleLinux 8.x で作り直すことに。。

* 以下の記事を参考にさせて頂いています。
　[脆弱なアプリケーション(DVWA)をOCIにデプロイする](https://qiita.com/Western24/items/92bc1b82d164d9be41f6)
# 1. OracleLinux 8.x 作成
OCI に Oracle Linux 8.x のコンピュートを作成します。
一般的な手順のため割愛します。

# 2.環境設定
DVWAのデプロイに必要なOSの設定を行います。

※以下、VMにOPCでログインして実施します。
OS設定を変更します。
```
#Fierwall無効
$ sudo systemctl stop firewalld
$ sudo systemctl disable firewalld

#SE Linux無効 
$ sudo setenforce 0
$ sudo vi /etc/selinux/config
-> SELINUX=disabledにする
```
必要なパッケージのインストールを行います。
```
#HTTP, PHPインストール
$ sudo dnf install httpd
$ sudo dnf install @php:8.2
$ sudo dnf install php-pdo php-mysqlnd php-gd
$ sudo dnf install @mysql:8.0

※以下でインストール可能なモジュールバージョンが分かります。
  $ sudo dnf module list php
  $ sudo dnf module list mysql

# httpd の起動
$ sudo systemctl start httpd
$ sudo systemctl enable  httpd

#DVWAダウンロード
$ cd /tmp
$ wget https://github.com/digininja/DVWA/archive/master.zip
$ unzip master.zip
$ sudo cp -R DVWA-master/ /var/www/html

#コンフィグ有効化
$ cd /var/www/html/DVWA-master/config
$ sudo mv config.inc.php.dist config.inc.php
```

MYSQLの設定を行います。
```
#MySQL起動
$ sudo systemctl start mysqld.service
$ sudo systemctl enable mysqld.service
$ sudo systemctl status mysqld.service

※ MYSQL 8.0 はパスワードが空で設定されます
   # cat /var/log/mysql/mysqld.log | grep password
     -> 空パスワードが設定されてる、と出力されている

例：
[root@ap1 /tmp]# cat /var/log/mysql/mysqld.log | grep password
2025-04-14T10:37:27.930317Z 6 [Warning] [MY-010453] [Server] root@localhost is created with an empty password ! Please consider switching off the --initialize-insecure option.
2025-04-14T10:37:28.081643Z 6 [Warning] [MY-013360] [Server] Plugin mysql_native_password reported: ''mysql_native_password' is deprecated and will be removed in a future release. Please use caching_sha2_password instead'


#以下でパスワードを設定する
$ mysql -u root
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH 'caching_sha2_password' BY '<password>';

$ mysql -u root -p
※パスワードでログインできることを確認
```
DVWAのDB接続設定を変更します。
```
$ sudo vi /var/www/html/DVWA-master/config/config.inc.php
※以下の2行を変更します。
$_DVWA[ 'db_user' ]     = getenv('DB_USER') ?: 'root';
$_DVWA[ 'db_password' ] = getenv('DB_PASSWORD') ?: '<password>';

※DB接続設定周りの内容は以下のようになります。
$_DVWA = array();
$_DVWA[ 'db_server' ]   = getenv('DB_SERVER') ?: '127.0.0.1';
$_DVWA[ 'db_database' ] = getenv('DB_DATABASE') ?: 'dvwa';
$_DVWA[ 'db_user' ]     = getenv('DB_USER') ?: 'root';
$_DVWA[ 'db_password' ] = getenv('DB_PASSWORD') ?: '<password>';
$_DVWA[ 'db_port']      = getenv('DB_PORT') ?: '3306';

```

# 3.DVWA セットアップ,ログイン確認
以上でDVWA起動のための準備は終わりです。
DVWAにアクセスすると、セットアップ画面が表示されます。
　http://VMのPublicIP/DVWA-master/setup.php

これ以降は以下の参考にさせて頂いた記事の通りのため、割愛します。
　[脆弱なアプリケーション(DVWA)をOCIにデプロイする](https://qiita.com/Western24/items/92bc1b82d164d9be41f6)
【Mermaid】矢印をアニメーション化する方法

## 矢印をアニメーション化する

以下のように記述すると矢印がアニメーション化されます。

```
flowchart TD
  A["Client"] r1@-->|Request| B["Ingress"]
  r1@{ animate: true }
```

![screen-recording-21.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342443/ad958212-26c6-4a3b-b657-ecaa3405bc3f.gif)

## アニメーションの速度を指定

アニメーションを遅くする場合には以下のように記述します。

```
flowchart TD
  A["Client"] r1@-->|Request| B["Ingress"]
  r1@{ animation: slow }
```

![screen-recording-20.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342443/5fd88113-2712-4ace-b59d-b0a7bc2fcf4f.gif)

アニメーションを速くするには以下のように記述します。

```
flowchart TD
  A["Client"] r1@-->|Request| B["Ingress"]
  r1@{ animation: fast }
```

![screen-recording-21.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342443/ad958212-26c6-4a3b-b657-ecaa3405bc3f.gif)

## 参考

https://mermaid.js.org/syntax/flowchart.html?#attaching-an-id-to-edges

https://mermaid.js.org/syntax/flowchart.html?#turning-an-animation-on
SSP（Single Security Point）という概念を知って絶望した話

「SSP」

これは正式な技術用語ではなく、おそらくセキュリティ界隈で生まれた造語だと思われます。  
意味としては、

> **「ここさえ破られなければ他が適当でもセキュリティは維持される」**

という“最後の砦”的な箇所を指します。

---

##  なぜ私はこれを知って絶望したのか

先日、とあるバグバウンティ調査に没頭していました。  
それなりに手応えがあり、PoC（概念実証）もあと一歩で通せる…
しかし全く通らず、情報を精査してもこれ以上どうしようもないと感じ、
泣く泣く「ここまで行ったけど私には無理でした。」と一応レポートしました。

この私の最後の1歩を止めたのが**SSP**でした。

---

##  PoCはピッキングだと思えばいい（完全に例え話）

私はピッキングの知識は一切ありません。  
ですがPoC（脆弱性の実証）は、**ドアが開くかを試す行為**だと思っています。

- ドアの外観から型番を調べる
　→ サービスやソフトウェアの調査
- 鍵の形状からメーカーを特定する
　→ CookieやJWTの形式を調べる
- ピッキングツールを使ってちまちま試す
　→ ペイロードを変えてアクティブ・リコン（能動調査）
- 鍵を壊さず静かに開ける方法を探す
　→ ステルスリコン（非破壊的・合法的な調査）

---

##  そして、チェーンが見える

苦心の末、ドアノブを回した瞬間、

> 姿を見せる**分厚いチェーン**や**変なバー**。 

 
開けたことで初めて存在に気づく。  
でも、それは**静かに外せない**。  

**その時点で詰み**。

そしてチェーンに気づいた瞬間、

「あっ…（そっ閉じ）」となるわけです(´;ω;｀)

---

##  今の私は少しだけ進化しました（多分）

SSPに気づかず突っ込んでいた頃よりは、  
「ここ、もしやチェーンあるんじゃ…？」って察知する力が少しだけついた気がします。

---

##  最後に

SSPという言葉に出会ったことで、  
私は「“詰み”が構造によって成立している」ことを知りました。

PoCが通らなかった理由は、努力不足でも技術不足でもなく、  
**“そこにチェーンが存在していた”から。**（と思いたい）

---

これを最初に知っていたら、  
もっと早く「そっ閉じ」できたのに……(´;ω;｀)

（※SSPは「Single Security Point」の略でおそらく非公式な表現です。）
C_TS452_2021 - SAP Certified Application Associate - SAP S/4HANA Sourcing and Procurement対策（25/100）

【25日目】
トピック3：調達プロセス（6/13）

≪問題25≫
以下のうち、購買発注を参照して在庫に入庫を転記するときにサポートされるアクションはどれですか。
（２つ選択）
▢分納発注数量を転記する。
▢入庫数量を複数の保管場所に分類する。
▢入庫数量に合わせて発注数量を調整する。
▢評価額を更新する。

≪解答≫
▢分納発注数量を転記する。
█入庫数量を複数の保管場所に分類する。
▢入庫数量に合わせて発注数量を調整する。
█評価額を更新する。

≪解説≫  
◆購買発注に基づいて商品が納入される際には、発注を参照して入庫を入力することが、関係するすべての部門にとって重要となります。入庫を記録すると、その購買発注に含まれる未処理の明細が自動的に表示されるため、すべての入庫情報の入力および確認がしやすくなります。
（1）1つの購買発注明細に対して、1回の操作で複数の入庫明細を入力することが可能です。たとえば、品目が複数のロットで納入された場合や、異なる保管場所に振り分けて納入される場合にも対応できます。
（2）購買発注に対する入庫を転記すると、該当する購買伝票明細の発注履歴が自動的に更新されます。これにより、購買担当者は未納分の特定が容易になります。
（3）倉庫や店舗に入庫が転記されると、納入品目および数量に関する情報を含む入出庫伝票が作成され、関連するプラントや保管場所の情報も記録されます。
（4）入庫が評価対象である場合には、会計伝票が自動的に作成され、品目の移動が財務会計上どのような影響を与えるかが記録されます。
[備忘録]includeについて

## はじめに
初めまして。独学で、プログラミングの学習を行っているえむしたと申します。
今回は、Djangoの```include```についての備忘録です
拙い記事ではありますが、読んでいただけると幸いです

## includeとは
簡単に言うと、<ins>URLパターンの再利用と整理を助ける関数</ins>である
といっても意味が分からなかったので、自分なりに深堀しました

```python:test_project/urls.py
from django.contrib import admin 
from django.urls import path, include #includeをインポート


urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('test.urls')), #'test.urls'のURLパターンを組み込む
]
```
```test_project/urls.py```は、プロジェクト全体のURLを管理する

```python:test/urls.py
from django.urls import path
from . import views

urlpatterns = [
    path('', views.home, name='home'), #'test_project/urls'からインポートされる
]
```
```test/urls.py```はプロジェクト内の各アプリのURLを管理する

これにより、```test_project/urls.py```はユーザー認証機能や、管理画面のURLなど、```test/urls.py```は単体アプリのURLをそれぞれの役割で管理できるようになる

最初は、分ける意味あるのか？と思いましたが、こうやって説明されると"整理"の意味が自分の中で理解できた気がします

まだまだ実践レベルの理解度ではありませんが、何となくすっきりした気がします

## まとめ
```include```は、それぞれの役割を持ったURLパターンを繋げられる関数である事がわかりました
まだまだ、奥は深いですね・・勉強がんばｒ
【ハッカソン参加者向け】VSCodeの拡張機能 Live Share が良さそうだった

## はじめに

こんにちは、RareTECHでメンターをしている ibaryobaryo です！
普段は福岡で開発業務をしながら、プログラミングスクールのメンターとしても活動しています。

今回は、RareTECHで実施しているハッカソンにおいて、学習者同士でのチーム開発時におすすめの VSCode 拡張機能を思い出したので、紹介したいと思います。

## Live Share とは

![CleanShot 2025-02-28 at 20.03.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3946459/e96ca3a4-d6b3-49c2-9554-bb633a728b35.png)

[Live Share](https://marketplace.visualstudio.com/items?itemName=MS-vsliveshare.vsliveshare)とは、Microsoft 社が提供する Visual Studio Code 用の拡張機能で、リアルタイムでの共同開発を可能にするコラボレーションツールです。
コードの共有や同時編集が可能で、リモートでもペアプロやレビューがスムーズに行えます。

## 使ってみよう！

### 今回の環境

- M1 Mac
- Visual Studio Code バージョン: 1.97.2

### 拡張機能をインストール

まずは VSCode のマーケットプレイスで「Live Share」と検索し、一番上に表示されるものをインストールします。

![CleanShot 2025-02-28 at 20.23.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3946459/504565a3-5e9e-4750-a4f3-917f423b626c.png)

インストール後は、サイドバーに専用のアイコンが表示されます。

![CleanShot 2025-02-28 at 20.25.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3946459/f3ae626c-33a1-4b28-a1a8-4e3582c64f6f.png)

### VSCodeにサインインする

Live Share を利用するには、事前にサインインが必要です。

![CleanShot 2025-02-28 at 20.28.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3946459/aa2c4ab8-7ef9-4b0e-942a-5e3645ea5492.png)

GitHub または Microsoft アカウントでサインインが可能ですが、今回は GitHub を選びました。
クリックするとブラウザが開き、サインイン後に準備が完了します。

### セッションを開始してみよう

「Share（Read-Only）」をクリックすると、セッションが開始され、以下のような画面が表示されます。

![CleanShot 2025-04-12 at 19.56.27@2x.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3946459/a4fe297a-2113-4ed7-9276-c5b3c1725fca.png)

「Invite participants...」をクリックすると、招待リンクが自動でコピーされます。
これを共同開発者に送信することで、同じセッションに参加してもらえます。

![CleanShot 2025-04-14 at 22.00.20.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3946459/57750a74-ccf6-4f86-b016-deea5f8e37f1.gif)

これでペアプロの環境が整いました！

## 活用シーン

メンターに技術相談をしたいとき、このリンクを共有することで、具体的なコードをすぐに見せながら相談できます。
今回は「Read-Only」で共有しましたが、「Read/Write」で共有すれば、相談しながらそのまま一緒にコード修正も可能です。

## まとめ

今回は VSCode の拡張機能【Live Share】を紹介しました。
実務で使う機会は少ないかもしれませんが、ハッカソンや学習の場面では非常に便利なツールです。
特にチーム開発に参加予定の方は、事前にインストールしておくと安心です！
notionに実行可能なコードを埋め込む

# はじめに
github.io に Python のプレイグラウンドをホストし、
そのページへのURLをnotionに埋め込みます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/263901/89b30906-42e5-4a62-9d47-51d09c313f85.png)

クエリパラメータとして渡されたgistのソースコードを初期値として表示します。
なので、リロードしてもソースコードの内容が空っぽになることはありません。

# 使い方

このURLを埋め込めば、冒頭のスクリーンショットと同じ結果になるはずです。
https://desktopgame.github.io/python-playground/?gist=dc4eb1bc28b33abfa9e961168b6718e4&file=gistfile1.txt

自分が書いたソースコードを埋め込みたい場合、public な gist をアップロードし、
その gist のIDとファイル名を代わりにパラメータとして渡してください。

# 他の方法はなかったのか？
replit という、オンラインのプログラミング環境があります。
wandbox とか codepen のようなもので、自分のPCに環境構築しなくてもコードを実行できる便利なものです。
しかももっと多くのプログラミング言語に対応しているようです。

そして、notionではこのサービスも埋め込むことができます。
なので最初はこれでよいと思ったのですが、実際埋め込んでみると私の想像とは違ったのです。

notion上ではコードの変更をできないほか、
実行しようとしたら replit のページに移動しなければいけません。
そしてなにより、replitは無料プランだと3つまでしかプロジェクトを保存できないようなのです。

# このプレイグラウンドの特徴
* 最初に述べた通り、パラメーターとしてgistIDを渡すと読み込んでくれる
    * gist API には制限があるので、内部的にはlocalStorageにキャッシュしています
* 読み込むgistにマジックコメントとしてパッケージ名を記述しておくと、起動時にインストールしてくれる
* Monacoではなく、Code Mirrorを使っているのでスマートフォンのブラウザでも動作する

# ちなみに
Observableというメモの中に実行可能なコードを書けるサービスもあるようです。
A2AとMCPはどこが違うの？


## はじめに
AI技術の進化に伴い、「Agent-to-Agent（A2A）」や「Method Calling Protocol（MCP）」といった言葉を耳にする機会が増えてきました。

本記事では、これらの用語の意味や違いを**具体例**を交えてわかりやすく解説していきます。

---

## Agent-to-Agent（A2A）とは？
**Agent-to-Agent（略称：A2A）** とは、複数の**AIアシスタント（エージェント）が互いに会話し、協力して問題を解決する仕組み**です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3929144/31963223-234f-4539-b9e1-ea6926c42e64.png)


日常生活に例えると、**チームのメンバーがそれぞれの専門知識を活かして協力し、仕事を完成させる**ようなイメージです。

### :bulb: 身近な例：レストランの予約をするとき
- **従来の方法：**  
  あなたが1つのAIアシスタントに「レストランを予約して」と指示すると、そのAIがすべての作業を単独で行います。

- **Agent-to-Agent方式の場合：**  
  複数のAIエージェントが役割分担し、チームとして協力します。
  1. 「調査担当」のAIが候補のレストランを探す  
  2. 「判断担当」のAIが候補を比較して最適なレストランを選ぶ  
  3. 「予約担当」のAIが実際に電話やWebサイトで予約手続きを行う  

これらのエージェントは互いに情報を交換し、連携しながらタスクを達成します

---

## Method Calling Protocol（MCP）とは？
**Method Calling Protocol（略称：MCP）** は、AIが**外部ツールやサービスと連携するための仕組み**です。

AIが特定のサービスを呼び出して利用するための「言語」や「手順」と考えると分かりやすいでしょう。

![_- visual selection.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3929144/6f0384cc-0818-40e7-8b72-ed85f63b4652.png)


### :bulb: 身近な例
- AIが天気予報サービスにアクセスして最新の情報を取得  
- AIがカレンダーアプリを操作し、予定を追加  
- AIがオンラインショップの商品を検索・注文  

これらはすべて、**MCP** を使ってAIが外部のサービスやツールを呼び出して操作しているイメージです。

---

## A2AとMCPの違いを比較
A2AとMCPは似ているように見えますが、以下の表のように重要な違いがあります。

| 項目 | A2A (Agent-to-Agent)                                     | MCP (Method Calling Protocol)                           |
|:----:|:---------------------------------------------------------:|:--------------------------------------------------------:|
| 連携する相手 | 他のAIエージェント（同じ知能を持つ仲間）                    | 外部ツール・サービス（特定の機能を持つ道具）               |
| コミュニケーション形式 | 自然な会話形式<br>「この情報をどう思う？」         | 命令と応答の形式<br>「この情報を取得して」　「結果はこれです」 |
| 自律性・判断力 | 各AIエージェントが　　　自律的に判断                          | 指示された内容を忠実に実行するのみ                         |
| 分かりやすい例え | 同僚とのチームワーク                                      | 道具や機械を使う作業                                       |

---

## 実際のケースで違いを理解する
具体的に、旅行計画を立てる場合を考えてみましょう。

### :airplane: MCPだけを使った場合
- AIが直接、航空券検索サービスを利用して最安値を調べる。  
- AIが直接、ホテル予約サービスで空室状況を確認する。  
- AIが直接、口コミサイトで評価を調べる。  

### :airplane: A2Aを使った場合
- **「航空券担当」AI** が航空券の候補を探す  
- **「ホテル担当」AI** が宿泊施設を探して提案  
- **「アクティビティ担当」AI** が現地の活動内容を調べて提案  
- **「コーディネート担当」AI** が各AIから情報を収集・整理し、最終提案を作成  

---

## 組み合わせると強力なA2AとMCP
実際には、A2AとMCPは**組み合わせて使用**されることが多いです。  
例として、**健康管理アプリ**を考えてみます。

1. 「食事分析AI」が **MCP** を使って栄養データベースから栄養情報を取得  
2. 「運動分析AI」が **MCP** を使ってフィットネストラッカーのデータを読み込む  
3. それらのAI同士が **A2A** で情報を共有し、総合的な健康アドバイスを提供  

このように、A2AとMCPを組み合わせることで、**より高度なAIサービス**を実現できます。

---

## まとめ
- **Agent-to-Agent（A2A）** とは、複数のAIエージェントが協力して問題解決を行う仕組み（チームワーク型）。  
- **Method Calling Protocol（MCP）** とは、AIが外部ツールやサービスを利用するための仕組み（道具利用型）。  
 
- 多くのAIシステムでは、A2AとMCPを**組み合わせて**複雑かつ高度なタスクを効率的に処理しています。  

A2AとMCPを理解することで今後AIサービスがどのように発展し、私たちの生活を便利にしてくれるのかが**見えてくる**と思います。
SWRの使い方

データフェッチのライブラリSWRの使い方です。

## 任意のタイミングでfetchする

`useSWR`は自動でfetchを行いますが、`useSWRMutation`の`trigger`を使用すると手動（任意のタイミング）でfetchを行うことができます。

以下の例だとボタンをクリックしたときにフェッチします。

```React
import useSWRMutation from "swr/mutation";

const fetcher = (url: string) => fetch(url).then((r) => r.json());

export default function Home() {
  const { data, trigger } = useSWRMutation(
    "http://localhost:3000/api/users",
    fetcher
  );

  return (
    <button onClick={trigger}>fetch</button>
  );
}

```

## 条件付きfetch

条件付きフェッチを使用すると特定の条件を満たしたときにfetchすることができます。
以下のようにすると、初期表示時はfetchせずにボタンをクリックしたタイミングでフェッチすることができます。


```React
import { useState } from "react";
import useSWR from "swr";

const fetcher = (url: string) => fetch(url).then((r) => r.json());

export default function Home() {
  const [isFetch, setIsFetch] = useState<boolean>(false);
  const { data, error, isLoading, mutate } = useSWR(
    isFetch ? "http://localhost:3000/api/users" : null,
    fetcher
  );

  return (
    <button
      onClick={() => {
        setIsFetch(true);
      }}
    >
      条件付きフェッチ
    </button>
  );
}
```

## 再検証（再fetch）

`mutate`を使用するとデータの再検証（再fetch）を行うことができます。

```React
import useSWR from "swr";

const fetcher = (url: string) => fetch(url).then((r) => r.json());

export default function Home() {
  const { data, error, isLoading, mutate } = useSWR(
    "http://localhost:3000/api/users",
    fetcher
  );

  return (
    <>
      <div>{data.name}</div>
      <button
        onClick={() => {
          // ユーザー情報更新処理実行

          mutate();
        }}
      >
        mutate
      </button>
    </>
  );
};
```

### 定期的に再検証

数秒おきなど、refreshIntervalを使用すると実現できます。

```React
"use client";
import { useEffect, useState } from "react";
import useSWR from "swr";

const fetcher = (url: string) => fetch(url).then((r) => r.json());

export default function Home() {
  const [status, setStatus] = useState(false);
  const { data } = useSWR("http://localhost:3100/api/users", fetcher, {
    refreshInterval: !status ? 5000 : 0,
  });

  useEffect(() => {
    if (data.status === "OK") {
      setStatus(true);
    }
  }, [data]);

  return <>〜省略〜</>;
}
```

上記の例では、5秒おき(5000ミリ秒)に再検証しています。
refreshIntervalは0を指定すると自動再検証がストップするので、再検証したレスポンスをもとに再検証を止めています。
Playwrightインストール時のエラー

公式通りに下記コマンドを実行
```
npm init playwright@latest
```

```
takuya@MacBook-Pro frontend % npm init playwright@latest

(省略)

Installing Playwright Test (npm install --save-dev @playwright/test)…
npm ERR! code EUNSUPPORTEDPROTOCOL
npm ERR! Unsupported URL Type "link:": link:./src/types
```

npmのバージョンが古いと起きるらしいので（pnpmばかり使っていた）、pnpmコマンドの方を実行
```
pnpm create playwright
```

成功した。OK！
```
✔ Success! Created a Playwright Test project
```
カスタムAppとTestFlight（外部テスター）の比較 for iOS

# カスタムAppとTestFlight（外部テスター）の比較（2025年4月現在）

## ⭐️早見表

| |カスタムApp | TestFlight|
|---|---|---|
|契約（年間費用） |	ADP（99ドル）、ABM |ADP（99ドル）|
| アプリ申請・審査| 	必要| 必要|
| リジェクトレベル|	普通 | 緩い|
| 配布方法| ①特定のURLをクリック| ①TestFlightアプリをインストール.<br>②特定のURL（パブリックリンク）をクリック|
|再審査のタイミング| バージョン毎|最初とストア公開時のみ<br>※バージョンアップ時に審査なし |
|アプリ有効期限 | 	なし|各ビルド90日間<br>（期限前に新しくビルドをアップロードする必要がある）<br>（利用者はPush通知をタップしてアップデートもしくは自動アップデートを有効にする必要がある） |
|ユーザー数上限 |	なし |10,000人 |
|推奨されている使用用途 |BtoB向けの自社サービス用のクライアントアプリ |PoCや検証のための開発で本番リリースの意図はないアプリ |
| 手続きに必要な期間| 	8 〜 10日 + リジェクトリスク|8 〜 10日 |
|参考 |[カスタムAppとは何か](https://www.micss.biz/2021/03/08/3427/) <br> [AppleDocs](https://developer.apple.com/jp/support/volume-purchase-and-custom-apps/) <br> [AppleDocs](https://developer.apple.com/help/app-store-connect/manage-your-apps-availability/set-distribution-methods)|[Qiita](https://qiita.com/haseken_dev/items/8c094b44c7e67836b74d#4-ios-13%E3%81%8B%E3%82%89%E3%81%AEtestflight%E4%BE%BF%E5%88%A9%E6%A9%9F%E8%83%BD) <br> [AppleDocs](https://testflight.apple.com/) |

## ⭐️事前準備
### カスタムAppの場合
Apple business Manager利用申請

### TestFlight（外部テスター）の場合
テスターデバイスにTestFlight アプリをインストール

### 両方共通
- D-U-N-S Numberの取得（最大5営業日）
- Apple Developerへの登録
- ADPへの登録（年間99ドル）（反映に48時間）
- プライバシーポリシーURL（WEBサイト・GitHubでも良い）

## ⭐️配布方法
### カスタムAppの場合
- App Store Connectで非公開でアプリを申請（1日以上）
- ABMでAppのライセンスを購入（無料）
- MDMもしくは招待コードで配布
- 端末側でインストール
   - 端末に通知が出るので表示に従いインストール

### TestFlight（外部テスター）の場合
- App Store Connect上のTestFlightからアプリを審査提出（1日以上）
- パブリックリンク https://testflight.apple.com/join/xxxxxxxxを取得・配布
- パブリックリンクから端末にインストール
   - テストに使用するiOSデバイスにTestFlightをインストールします。
   - デバイスで招待メールを開くか、パブリックリンクをタップします。
   - 招待メールからインストールする場合は、「TestFlightで表示」または「テストを開始」をタップして、テストしたいAppを「インストール」または「アップデート」します。
   - パブリックリンクからインストールする場合は、「インストール」または「アップデート」をタップします。

 

※TestFlightをインストールすると、自動アップデートを有効にするように促されます。有効にすると、利用可能な最新のビルドが自動的にインストールされるようになります。デバイスに新しいビルドがインストールされる度に、テスターに通知が届きます。

## 👍メリット
### カスタムApp
- MDMを使用しているのであれば、どの端末がインストールしているか確認しやすい

### TestFlight（外部テスター）
- ストア公開までは同一バージョンで何度もバイナリ更新が可能（公開までは審査が不要になる）
- 審査が緩い（Appleがテストする場所として用意しているため）
- クラッシュログやfeedbackを送りやすい、調査しやすい
- アップデート通知がやりやすい (Push通知が届く)

## ⚠️注意点
### カスタムApp
- 非公開Appから公開Appへの変更はできない。再レビューが必要
- バイナリ更新（バージョンアップ）のたびに審査が必要
- 正式版のアプリを配布する場ではあるので、テスト目的っぽいアプリを審査に出すとリジェクトされる可能性がある

### TestFlight（外部テスター）
- ビルド有効期限が90日間なので、90日経過する前に新しくビルドをアップロードする必要がある（更新時はテスターに通知が出る）
- ユーザー上限は10,000人
- パブリックリンクは外部へ漏れないようにする（誰でもインストールできてしまうため）
- TestFlightアプリをインストールしてからテストアプリインストールになるので、テスト開始までのユーザー操作が増える

### 両方共通
- D-U-N-S Number取得（5営業日）、ADP登録（48時間）で時間がかかる
- Appleの審査が必要（1日程度〜）

## ⭐️参考リンク
- [https://developer.apple.com/jp/programs/enroll/](https://developer.apple.com/jp/programs/enroll/)
- [https://developer.apple.com/jp/support/compare-memberships/](https://developer.apple.com/jp/app-store/app-privacy-details/#privacy-links)
- [https://developer.apple.com/jp/app-store/app-privacy-details/#privacy-links](https://developer.apple.com/jp/app-store/app-privacy-details/#privacy-links)
react-hook-formで初期値を設定する方法

react-hook-fromで初期値を設定する方法を3つご紹介します。

## defaultValues

1つ目はdefaultValuesを使う方法です。
この方法が一番一般的だと思います。

```react
import { useEffect } from 'react';
import { useForm, SubmitHandler } from 'react-hook-form';

type Inputs = {
  name: string;
};


const Sample = () => {
  const {
    register,
    handleSubmit,
    formState: { errors },
  } = useForm<Inputs>({
    defaultValues: { name: '田中太郎' }
  });

  const onSubmit: SubmitHandler<Inputs> = (data) => {
    console.log(data);
  };

  return (
      <form onSubmit={handleSubmit(onSubmit)}>
          <input
            {...register('name', {
            required: true,
            })}
          />
        <button type="submit">Submit</button>
      </form>
  );
}

export default Sample;
```

## setValue

```react
import { useEffect } from 'react';
import { useForm, SubmitHandler } from 'react-hook-form';

type Inputs = {
  name: string;
};


const Sample = () => {
  const {
    register,
    handleSubmit,
    setValue,
    formState: { errors },
  } = useForm<Inputs>();

  const onSubmit: SubmitHandler<Inputs> = (data) => {
    console.log(data);
  };

  useEffect(() => {
    setValue('name', '田中太郎')
  }, [])

  return (
      <form onSubmit={handleSubmit(onSubmit)}>
          <input
            {...register(`name`, {
            required: true,
            })}
          />
        <button type="submit">Submit</button>
      </form>
  );
}

export default Sample;
```

## reset

```
import { useEffect } from 'react';
import { useForm, SubmitHandler } from 'react-hook-form';

type Inputs = {
  name: string;
};


const Sample = () => {
  const {
    register,
    handleSubmit,
    reset,
    formState: { errors },
  } = useForm<Inputs>();

  const onSubmit: SubmitHandler<Inputs> = (data) => {
    console.log(data);
  };

  useEffect(() => {
    reset({ name: '田中太郎' })
  }, [])

  return (
      <form onSubmit={handleSubmit(onSubmit)}>
          <input
            {...register(`name`, {
            required: true,
            })}
          />
        <button type="submit">Submit</button>
      </form>
  );
}

export default Sample;
```

## SWRで取得した値を初期値に設定する方法

SWRなどでAPIから取得した値を初期値に設定したい場合もあると思いますが、その方法です。

```react
"use client";

import useSWR from "swr";
import { useForm, SubmitHandler } from "react-hook-form";

type Inputs = {
  id: number;
  name: string;
};

const Sample = () => {
  const fetcher = async (url: string): Promise<Inputs> => {
    const response = await fetch(url);
    return response.json();
  };

  const { data, error, isLoading } = useSWR<Inputs>(
    "http://localhost:3100/api/users/3",
    fetcher
  );

  const {
    register,
    handleSubmit,
    formState: { errors },
  } = useForm<Inputs>({
    defaultValues: {},
    values: data,
  });

  const onSubmit: SubmitHandler<Inputs> = (data) => {
    console.log(data);
  };

  return (
    <form onSubmit={handleSubmit(onSubmit)}>
      <input
        {...register("name", {
          required: true,
        })}
      />
      <button type="submit">Submit</button>
    </form>
  );
};

export default Sample;
```
OCI学習#6 ネットワークパスアナライザ#2

## 概要
VCN内にPublic Subnet、Private Subnetが存在しており、それぞれにVM01,VM02が配置されている。
この時、VM01からVM02へのSSH接続ができるかどうかをネットワークパスアナライザを使用して確認を行う。
![edu04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/510919/e2c6a900-5ee8-469a-b65e-72876187704b.png)

## 目的
OCI資格取得に向けた学習の一環として、単に知識を暗記するだけでなく、
実際にOCI環境に触れて実践的な経験を積むことで、将来の設計や構築の場面で
自信を持って対応できるスキルを習得する。

## OCI学習記事まとめ
Part1
1.[OCI学習#1 ネットワーク設定](https://qiita.com/nonZy/items/adbbf47646a28e59fe36)
予算設定、コンパートメント作成、VCN、IGW、ルート表、セキュリティリスト作成。
2.[OCI学習#2 インスタンス作成、接続](https://qiita.com/nonZy/items/b821d419c03ca7c7cd7c)
インスタンス作成、SSH接続
3.[OCI学習#3 Block Volume追加](https://qiita.com/nonZy/items/5053c853c77cfb68bc51)
Block Volumeの作成、アタッチ、OSでのパーティション設定、ファイルシステム作成、マウントまで
4.[OCI学習#4 Object設定、アクセス](https://qiita.com/nonZy/items/abb5717666d8f74eb690)
ObjectStorageにおいてのバケット作成、オブジェクトアップロード、オブジェクトへのアクセス
5.[OCI学習#5 ネットワークパスアナライザ](https://qiita.com/nonZy/items/641de2daca61af29e7df)
ネットワークパスアナライザの使用

## 実施手順
まず初めに、セキュリティリストにSSH許可設定が設定されていて接続OKの場合を確認。
### ネットワークパスアナライザ(SSH成功時)
1.[ネットワーキング]-[ネットワーク・コマンド・センター]-[ネットワーク・パス・アナライザ]をクリック
2.[パス分析の作成]をクリック
Public Subnet(10.0.0.1/24)からPrivate Subnet(10.0.1.1/24)へのSSH
![61.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/510919/85226ddc-bea2-4a39-8eac-2fda6b2b0cf1.png)
![62.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/510919/e7cdc95c-4131-480a-a765-f8488a71b58f.png)

確認結果
![63.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/510919/316738be-1a49-40f4-8bff-343b146fe0fb.png)

### セキュリティリストからport22許可削除
Private Subnet用のセキュリティリストから"10.0.0.0/16-port22"許可設定を削除。
![64.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/510919/8a4e41dd-4d63-4c81-bb60-0e58df382c88.png)
![65.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/510919/0422ae81-7dca-44b9-98ad-4714eb378b27.png)

### ネットワークパスアナライザ(SSH失敗時)
分析の作成は同一内容なので省略。

確認結果は下記。
![66.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/510919/4bdf1811-0bd9-473b-aef1-804b88f5caa5.png)

## まとめ
構成情報からOK/NGの判別が出来るのも凄いが、インスタンス建てなくても
付与予定のIPを指定して分析できるので便利。