OmniAICreator/Qiita-1.07M huggingface dataset:
NextUIのTooltipを使う上で1個詰まった。

# はじめに
みなさん、こんにちは **torihazi**です

現在、RailsとNext.js(NextUI)でXクローンを作っているのですが

作成する上でタイトルの件で少し詰まったのでそれを書き残そうかと思います

今作ってるやつ
![スクリーンショット 2024-10-18 13.42.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2567812/e59cd164-2edf-5084-359e-86c80d93deeb.png)

# 結論
NextUIのtooltipを使うときは複数要素を表示させようとすると表示されません。
条件分岐してやらないとダメです。

# どういうことか
最初、こんな感じでやろうとしてました。

```tsx
<Tooltip
  key={item.tooltip}
  placement="bottom"
  content={item.tooltip}
>
  {item.children}
  {item.icon && <IconButton>{item.icon}</IconButton>}
  {/* {item.children ||
    (item.icon && <IconButton>{item.icon}</IconButton>)} */}
</Tooltip>
```

これ、mapで回していたのでitemとなっていますが、回そうとしていたのはこんな奴ら。
iconかchildrenがどっちかしかないような子達を作って表示させようとしてました。

```tsx
export type inputIconItemType = {
  icon?: ReactNode;
  tooltip: string;
  children?: ReactNode;
};

export const inputIconItems: inputIconItemType[] = [
  {
    children: <InputFileButton icon={<Image size={18} />} name="images" />,
    tooltip: "Image",
  },
  {
    icon: <Videotape size={18} />,
    tooltip: "Gif",
  },
  {
    icon: <List size={18} />,
    tooltip: "Poll",
  },
  {
    icon: <Smile size={18} />,
    tooltip: "Emoji",
  },
  {
    icon: <Calendar size={18} />,
    tooltip: "Schedule",
  },
  {
    icon: <MapPin size={18} />,
    tooltip: "Geo",
  },
];
```

だから表示させる時もある意味条件分岐みたいな感じで必ず一個しか表示されないのではと思っていたのですが、結果は表示されませんでした。
このPostの隣に表示されるやつです。本家にもあるやつです。
![スクリーンショット 2024-10-18 13.47.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2567812/b98f568e-d99a-6a85-8370-fb37657a1b49.png)

そこでこうしたら表示されました。
ふーんという感じです。

```tsx
<Tooltip
key={item.tooltip}
placement="bottom"
content={item.tooltip}
>
{item.children ||
  (item.icon && <IconButton>{item.icon}</IconButton>)}
</Tooltip>
```

![スクリーンショット 2024-10-18 13.48.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2567812/769b9f38-c11f-dd40-e97a-464651beee55.png)

ちなみに画像のところだけはボタン押したら画像選択できるようにはしました。

プレビューとかはまだですけど、一旦いいでしょう。

# 終わりに
ドキュメント見た限りそんなこと書いてなさそうに見えましたけど、

ダメなのなら従うしかないですね。

あ、そういえば

NextUI、Inputのコンポーネントはありますが、type="file"がないらしいですね。

ちなみにこれも他の見ながら作りました。

作り方についてはまた今度。
`devise`を後から追加してみた

# 概要
* 既にテーブル users を作成していたため後から devise を導入する形で作業を進行しました
* 最初から作成する場合の記事が多かったですが既存の場合はどうなるのか気になったため実行

:::note info
【結論】後から導入する場合にも問題ない
* 既存のテーブルを削除して作り直す必要もない
:::

# 実際に行った手順
* 当然ではありますが[公式の手順書](https://github.com/heartcombo/devise#getting-started)を確認しながら作業を進行しました

```
bundle add devise
rails generate devise:install
```

### 肝心の既存のテーブルに関わってくる箇所
* ここでモデル名を指定するコマンドが登場します
```
rails generate devise MODEL
```
　
* 私の場合は既存の User モデルに devise の認証を追加したかったので次のようにしました
```
rails generate devise User
```

結果として以下のようになりました
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3518714/9b88c0f5-d066-ba38-adc8-51f4e5a81c06.png)

* 既存のモデルに対して**追記がされる**ため問題なく導入できました

# ところが `rails db:migrate` で詰まった
* この後生成されたマイグレーションファイルを `rails db:migrate` したところでエラーとなった

```:実際に表示されたエラー
PG::UniqueViolation: ERROR: duplicate key value violates unique constraint "index_users_on_email" DETAIL: Key (email)=() already exists.
```

## 確認した事・試したこと
* `email` というカラムが原因なのかと思いスキーマを確認した
    * そもそも既存のテーブルには `email` のカラムを作成していないので関係が無いと判断
* データベースを作り直したら直ったという旨が確認できたので `rails db:reset` を実行
    * しかし同じエラーが表示される

# 解決策

:::note warn
* なぜこれで解決できるのかが全く分かっていないため今後の課題とする
:::

* こちらにある通り、`tests/fixtures/users.yml` を編集したら、エラー無く `rails db:migrate` を実行できた

https://github.com/heartcombo/devise/issues/2594#issuecomment-70016135

## 以下、私の場合を示す
* `one`、`two`にそれぞれ値の異なる `email` カラムを追加した

```:tests/fixtures/users.yml
# Read about fixtures at https://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html

one:
  user_uid: MyString
  email: alice@example.com
  profile_image: MyString
  name: MyString
  gender: 1
  age: 1
  introduction: MyText

two:
  user_uid: MyString
  email: bob@example.com
  profile_image: MyString
  name: MyString
  gender: 1
  age: 1
  introduction: MyText
```

---
### 参考資料

https://github.com/heartcombo/devise#getting-started

https://zenn.dev/h_hana/articles/6dac69de42cbfe

https://github.com/heartcombo/devise/issues/2594#issuecomment-70016135
CPU によるファイン・チューニング

【開発と活用を推進するインテルの AI】
インテルはクラウドからデータセンター、エッジにおいて、あらゆる場所での AI 活用を目指す、ソフトウェアやハードウェアでの AI 開発、さらには AI ソリューションへの活用を動画で解説するWebサイトを公開しています。
https://www.intel.co.jp/content/www/jp/ja/artificial-intelligence/ai-development-and-utilization.html

＜AI 活用を動画で学ぶ＞
インテルのエキスパートたちが、ソフトウェアやハードウェア、AI ソリューションに関してのノウハウを動画で解説。今回ご紹介するのは、「ファイン・チューニング」。
学習済みのニューラルネットワーク・モデルの一部や全体を、独自データを追加して再度学習し直すことで、汎化性能を高める方法を紹介します。

タイトル：CPU によるファイン・チューニング
インテル® AMX とインテル® エクステンション・トランスフォーマーによる CPU ファイン・チューニング高速化

![図1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3490396/a48b588c-09e6-4450-af10-4eee474ae722.png)

ファイン・チューニングは、既存の大規模言語モデル (LLM) に、追加のデータセットを学習させることで、独自性や専門性の高い生成 AI を作成するテクニックです。動画では、インテル® Xeon® プロセッサーを利用したファイン・チューニングの方法とデモを紹介します。

https://www.intel.co.jp/content/www/jp/ja/artificial-intelligence/ai-development-and-utilization.html

是非この機会にAI Everywhere を実現するインテルのソリューションをご覧ください！
ACDLを提唱します。その11

# 概要
ACDLとは、アプリは、クラウド、大切なデータは、ローカルです。
アプリ作ったので、plunkerに上げてみた。

# 機能
markupで書いた文章をPDFにします。

# 写真

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18104/67055312-a476-1aec-f300-12e839218c74.png)


# サンプルコード

```
<!DOCTYPE html>
<html>
  <head>
    <link rel="stylesheet" href="style.css">
    <script src="//cdnjs.cloudflare.com/ajax/libs/marked/0.2.9/marked.min.js"></script>
    <script src="//cdnjs.cloudflare.com/ajax/libs/html2canvas/0.4.1/html2canvas.js"></script>
    <script src="//cdnjs.cloudflare.com/ajax/libs/jspdf/1.0.272/jspdf.debug.js"></script>
    <script src="//code.jquery.com/jquery-2.0.3.min.js"></script>
  </head>
  <body>
    <textarea id="src" rows='20' cols='70'>
<br><br>
#アプリ名　三択コンパイラー<br>
##アプリ概要
三択問題を、マウスでクリックするだけで、pythonソースコードを生成する、webアプリケーションである。
<br><br>
##アプリによって実現された事
守備範囲は、限定的だが、ソースコードは、自動生成される。
<br><br>
##アピールポイント1
QUBO、イジング模型を理解できなくとも、ソースが書ける。
逆にソースコードから、理解が期待できる。
<br><br>
##アピールポイント2
評価関数の展開に、sympyを利用した。
<br><br>
##アピールポイント3
webアプリケーションである。
<br><br>
##想定問題
「看護師、aさん、bさん、cさん、から２人を選べ。」<br><br>
「aさんとbさんは、気が合うので、同じ事をすると、気分が良い。
bさんとcさんは、軋轢があり、違うことがしたい。
みんなが、気持ち良くなる組み合わせを求めよ。」
<br><br>
##アプリのurl
https://embed.plnkr.co/plunk/2nOl0AYjrVAbLJsK
<br><br>
##関連Qiita
https://qiita.com/ohisama@github/items/2890cb3c5ea2b54e3ef7
https://qiita.com/ohisama@github/items/5954b7f5a79b3c401877
https://qiita.com/ohisama@github/items/1eb4d7c95836fe921485
https://qiita.com/ohisama@github/items/0c6ed7c9d4d0fb03f0c8
https://qiita.com/ohisama@github/items/8edc64afc90169e485b2
<br><br>
    </textarea>       
    <button onClick="make()">make</button>
    <div id="out"></div>
    <script type='text/javascript'>
$(document).ready(function() {    
  $(window).on("load", function() {
    var target = $("#out");
    target.html(marked($("#src").val()));
  });
});
function make() {
  var pdf = new jsPDF('p', 'pt', 'a4')
  pdf.addHTML(document.body, {
    pagesplit: true
  }, function() {
    pdf.save('slides.pdf');
  });
}
    </script>
  </body>
</html>




```

# 成果物

https://embed.plnkr.co/plunk/oRVEFl2aSIrVHX8cqtmd


以上
Marpで業務用テンプレートスライド作成


業務用のプレゼンテーションスライドをMarpを使って作成できないかやってみました。

## きっかけ：RAGを見据えたアプローチ

私がMarpを使ってスライドを作ろうと思ったきっかけは、将来的なRAG（Retrieval-Augmented Generation）の導入を見据えてのことです。テキストデータとしてのMarkdownは、将来的にRAGシステムに統合しやすいのではないかと考えました。

プレゼンテーションスライドも例外ではありません。従来のパワーポイントなどのバイナリ形式よりも、Markdownベースのスライドの方が、将来的に情報の検索や再利用がしやすくなるのではないかと考えたのです。

### テンプレートデザイン設定

最初に直面した課題は、スライドデザインをスライドに組み込むことでした。フッターにロゴを表示する方法を探っていましたが、なかなか良い解決策が見つかりませんでした。

しかし、調査を進めるうちにMarpで背景画像を設定できることがわかりました。そこで、ロゴを含む背景画像を作成し、それをスライドの背景として使用することにしました。

以下が、背景画像を設定するためのCSSです：

```css
section {
  background-image: url('img/sample.png');
  background-size: contain;
  background-repeat: no-repeat;
  background-position: center;
}
```

サンプル画像として下記を作成し使用しました。
![sample.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2740465/db193ee8-35f5-e5c7-de1e-071cabc6ce73.png)

背景として設定して表示したものが下記になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2740465/f526b75a-4471-68d6-9166-5fb26b0b45a0.png)



### AIの活用

コードの書き方に関しては、AIアシスタントを活用しました。

※サンプルコード

```markdown
---
marp: true
---

<!-- _class: two-column -->
# 2列レイアウト

<div class="column">

## 左列
- 項目1
- 項目2
- 項目3

</div>

<div class="column">

## 右列
1. 番号付きリスト1
2. 番号付きリスト2
3. 番号付きリスト3

</div>

<style>
.two-column {
  display: grid;
  grid-template-columns: 50% 50%;
}
.column {
  padding: 0 10px;
}
</style>
```

## 苦労した点：左右分割レイアウトの課題

最も苦労したのは、スライドを左右に分割して表示する方法を見つけることでした。この点については、AIに相談してもHTML形式での記述方法しか提案されませんでした。

※サンプルコード

```html
<div style="display: flex;">
  <div style="flex: 1;">
    <!-- 左側のコンテンツ -->
  </div>
  <div style="flex: 1;">
    <!-- 右側のコンテンツ -->
  </div>
</div>
```

ちなみに上下分割はできるみたいです

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2740465/0c889ffe-1af9-c093-a255-29767c2893d3.png)

これに関してはそもそもhtmlはサポートされていないのか、marpではタグがそのまま表示されました。
また、Markdownの簡潔さを損ない、作成・編集時に特別な慣れが必要になります。
これは、チーム全体でテンプレートを使用する際の障害になる可能性があるのでできるとしてもなしかなという印象です。
orgファイルを更新すると出力ファイルも自動更新されるようにする (非同期エクスポート編)


Emacsのorg-modeには多様な文書形式 (PDF, OpenDocument, markdown, ePubなどなど) に対応した豊富なエクスポート機能があります。通常のエクスポートは手動で `org-export-dispatch` (`C-c C-e`) を起動しますが、ファイル更新のたびに手動でやるのは少しだけ面倒です。自動化できないかと思っていたら、すでに [@skkzsh](https://qiita.com/skkzsh) さんがやり方を公開してくれていました。

https://qiita.com/skkzsh/items/9bbcb8bcf02e32fe51d8

ただ、このやり方では、直接 `org-html-export-to-html` などのエクスポートコマンドを呼び出しており、フォアグラウンドで実行されます。バックグラウンドで非同期エクスポートをする場合には、少し工夫が必要です。以下のように、`org-export-async-start` を呼び出し、その中で非同期プロセスに個別のエクスポートコマンドを送るようにするとうまくいきます。

``` emacs-lisp: init.el
(add-hook 'org-mode-hook 
          (lambda ()
            (add-hook 'after-save-hook
                      (lambda ()
				         (when (file-exists-p (concat (file-name-sans-extension (buffer-file-name)) ".html"))
                            (org-export-async-start
                              (lambda (file)
                                (message "Exported to %s" file))
                                '(org-html-export-to-html))
                                nil)
                         (when (file-exists-p (concat (file-name-sans-extension (buffer-file-name)) ".pdf"))
                            (org-export-async-start
                              (lambda (file)
                                (message "Exported to %s" file))
                                  '(org-latex-export-to-pdf))
                                  nil)) 
	                  nil t)))
```

これで、orgファイルを更新すると自動的にバックグラウンドでエクスポートされるようになりました。
ACDLを提唱します。その10

# 概要
ACDLとは、アプリは、クラウド、大切なデータは、ローカルです。
アプリ作ったので、plunkerに上げてみた。

# 機能
Live2dキャラクターが文章を読み上げます。

# 写真

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18104/e22e9bbf-dca1-036a-8300-2dd336da4108.png)

# サンプルコード

```
<!doctype html>

<html>
  <head>
    <script src="https://cubism.live2d.com/sdk-web/cubismcore/live2dcubismcore.min.js"></script>
    <script src="https://cdn.jsdelivr.net/gh/dylanNew/live2d/webgl/Live2D/lib/live2d.min.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/pixi.js@6.5.2/dist/browser/pixi.min.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/pixi-live2d-display/dist/index.min.js"></script>
  </head>
  <body>
    <textarea id='src' rows='2' cols='50'>
      お掃除します。
    </textarea>
    <input id='btn' type='submit' value='run' onclick='run()'><br>
    <canvas id=canvas></canvas>
    <script type='text/javascript'>
const cubism4Model =
  "https://cdn.jsdelivr.net/gh/guansss/pixi-live2d-display/test/assets/haru/haru_greeter_t03.model3.json";
(async function main() {
  const app = new PIXI.Application({
    view: document.getElementById("canvas"),
    autoStart: true,
    resizeTo: window
  });
  const model2 = await PIXI.live2d.Live2DModel.from(cubism4Model);
  app.stage.addChild(model2);
  model2.scale.set(0.3);
})();
function run() {
  var src = document.getElementById("src");
  var msg = new SpeechSynthesisUtterance();
  msg.text = src.value;
  msg.lang = "ja-JP";
  msg.rate = 1.0;
  msg.pitch = 0.8;
  window.speechSynthesis.speak(msg);
}
  </script>
  </body>
</html>




```

# 成果物

https://embed.plnkr.co/plunk/1cW7KmtrxG0DyBeN

以上
Validation failed for a resource. SubscriptionIsOverQuotaForSkuの対処法

```
{"code":"InvalidTemplateDeployment","details":[{"code":"ValidationForResourceFailed","message":"Validation failed for a resource. Check 'Error.Details[0]' for more information.","details":[{"code":"SubscriptionIsOverQuotaForSku","message":"This region has quota of 0 instances for your subscription. Try selecting different region or SKU."}]}],"message":"テンプレート デプロイ 'Microsoft.Web-FunctionApp-Portal-9ae6c27b-95b9' は、検証プロシージャによって無効とされました。追跡 ID は 'ba6b99fd-ef43-4c7f-b03e-d4c58f1b12d6' です。詳細については、内部エラーを参照してください。"}
```
## 概要
上記のエラーが出た場合は、クォータ（使えるリソースの上限数みたいなもの）の上限値に引っかかったのが原因である。<br>
クォータはAzureで大量リソースを作ったりした際に、意図せず高額な請求が発生しないようにデフォルトで設定されている。<br>
よく出るエラーの１つではあるが、毎回対応方法を忘れるのでメモする。

## 対策
1. AzurePortalのサブスクリプションのページに行き、設定>「使用量+クォータ」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1612369/34eb6b5b-f4ed-d777-4e81-ace6ac2bed6f.png)
2. クォータの上限に引っかかっているリソースを見つけ、「調整」から上限値を変更する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1612369/43bc5bf6-a547-00fa-b7ab-db803af92407.png)
CSS 子要素の表示の優先度を指定する。orderプロパティについて

# 最初に
今回はorderプロパティについて解説します。今現在自作ブログの制作にチャレンジしています。レスポンシブデザインを作る際に表示の順番が上手くできませんでした。
ここでorderプロパティを覚えて再チャレンジします。

# orderプロパティについて
orderプロパティはflex gridコンテナの2つで使うことができます。

```style.css

div{
    display:flex;
    display:grid ; /*両方に使える*/
}

```

## orderプロパティの記述のイメージ 

親要素にflexコンテナを指定し、子要素にorderプロパティを指定することで表示の順番を決めることができます。

``` style.css

div{
    display:flex;
    flex-wrap: wrap;
    justify-content: flex-end; /*親要素にflexプロパティを指定*/
}

.box1{
    order:1;
}

.box2{
    order:2;
}

.box3{
    order:3;
}

.box4{
    order:4;
}
```

# 実際に制作したコード

前回作ったflexコンテナのコードを一部流用します。
子要素を横並びに配置します。orderプロパティは負の整数から優先的に並びます。そのあとは0と正の整数に続きます。

```index.html
<!DOCTYPE html>
<html lang ="ja">
    <head>
        <meta charset="UTF-8">
        <link rel="stylesheet" href = "style.css">
    </head>

    <body>

            <div class="container_1">
                <div class="item_box box_1" >アイテム1</div>
                <div class="item_box box_2">アイテム2</div>
                <div class="item_box box_3">アイテム3</div>
                <div class="item_box box_4">アイテム4</div>
                <div class="item_box box_5">アイテム5</div>
                <div class="item_box box_6">アイテム6</div>


            </div>
        
    </body>

</html>

```

```style.css
.container_1{
    display: flex;
    flex-wrap: wrap;
    justify-content: flex-start;
    align-content: flex-start;
    height: auto;
    background-color: chartreuse;

}

.item_box{
    background-color: aqua;
    border-style: solid;
    border-color: black;
    border-width: 4px;
    margin: 15px;
    padding: 15px;

}

.box_1{
    order: 3;
}

.box_2{
    order: -2;
}

.box_3{
    order: 2;
}

.box_4{
    order: 0;
}

.box_5{
    order: 1;
}

.box_6{
    order: -1;
}
```

参考画像

![スクリーンショット (1359).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3909197/5498ff74-ae0e-4d07-d3ac-2123ce086a9a.png)
【ChatGPT＋DALL-E3】描画途中で、描画をやめてしまわれたときの対処方法を書きます。


　どうも、カーブミラーです。

　今回は、描画途中で、描画をやめてしまわれたときの対処方法を書きます。絶対の方法ではないため、参考までに、ということでお願いします。

:::note info
本記事は、ChatGPT（有料版）
＋DALL-E3で行なっております。
画像はありません。あしからず。
:::
　まずは、ニュース。

　ChatGPTのデスクトップアプリは、
　　Mac版のみがありました。

　ようやくWindows版が
　　登場してきました。

　ChatGPT Plus,、
　　Enterprise,、
　　　Team,、
　　　　そして Eduでの
　　　　　利用が可能に。

　ただし、
　　今回のこれは
　　　“初期バージョンのテスト”と
　　　　書かれていますので、
　　　　　β版なのかもしれません。

[木内翔大さんポスト](https://x.com/shota7180/status/1847044715906044262?t=k_xQx8KRnZCr3_p1eY1lJQ&s=19)

[OpenAI公式ポスト](https://x.com/OpenAI/status/1846957067204166113?t=t-hMVpJUw0RsHKzpVp7wXA&s=19)
***
　次です。

　ChatGPT 4o with canvasですが、
　　"Show changes"アイコンが
　　　登場しました。
![Screenshot_20241018-114918~2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3457238/c4f771ab-8d50-add6-7ed8-0617f3812c70.png)

　Canvasの
　　リフレッシュ機能に
　　　なります。

　これは
　　WindowsのF5の更新
　　　のようなものです。

　これまで
　　Canvasに修正を掛けても
　　　うまく反映されないことが
　　　　ありました。

　　その声が多かったようですね。
[OpenAI公式ポスト](https://x.com/OpenAI/status/1847016089202610235?t=SWXM03vPtknIQPFCQzzpHQ&s=19)

[OpenAI開発者ポスト](https://x.com/OpenAIDevs/status/1847016442165694616?t=6YhDYuptZ7uGbjf35eeokQ&s=19)
***
　次ですが、
　　X-Twitterの利用規約が
　　　変更されました。

　“ユーザーのコンテンツを
　　AIの学習に利用しうる”ことを明記。

　簡単に言うと、これは
　　“ユーザーのポストを
　　　学習に使う可能性があるよ”、
　　　　と言っています。

　ユーザーのみなさんは
　　戦々恐々として
　　　X-Twitterから
　　　　ほかのSNSへと
　　　　　脱出しようとしています。

　これからどうなることやら。

　私もどうすべきかを
　　考えています。
***
　さて、本題に入ります。

　今回は、
　　DALL-E3描画途中で、
　　　描画をやめられたときの
　　　　対処方法を書きます。

　　絶対の方法ではないため、
　　　参考までに、
　　　　ということでお願いします。

　私も何度も止められています。

　Message内容は
「画像の生成中に問題が発生しました」
「このリクエストがコンテンツポリシーに違反している」
　　のふたつがほとんどですね。

　“もう一度お試しください”を
　　繰り返せば、
　　　描画される可能性も
　　　　あるにはあります。

　問題は、
　　コンテンツポリシーです。

　これはChatGPT側ではなく、
　　DALL-E3側の判断で、
　　　どこが問題なのかを
　　　　ChatGPTに返しては
　　　　　くれません。

　そこで
　　描画指示のPromptを
　　　チェックして、
　　　　どこが引っ掛かるのかを
　　　　　特定しようと思います。

　Promptは、こちら。
```Text:コンテンツポリシーチェックPrompt
・与えたPromptを英訳してください。
・その英文に隠語などのコンテンツポリシーに引っかかる部分を探して、報告してください。
```

　完全にチェックできるわけでは
　　ありませんが、
　　　日本語ではわからない隠語も
　　　　調べてくれます。

　あとは
　　その部分を
　　　修正するなり削除するなりして
　　　　描画を指示してください。

　みなさんの
　　作品制作の糧に
　　　なれば、幸いです。

　今回は、ここまで。
Azure Virtual Network ManagerでIP管理

# はじめに
まだプレビューですがAzure Virtual Network ManagerでIPアドレス管理が出来るようになったので試してみます。

https://learn.microsoft.com/ja-jp/azure/virtual-network-manager/how-to-manage-ip-addresses-network-manager

# IPアドレスプールの作成
まずは、管理するIPアドレスのプールを作成します。

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/604991/4862e7ef-708e-6207-8ca9-190d4e59018b.png)


日本のリージョンはまだ使えないため、対応している米国東部を選択しています。
また、VNetと同じリージョンである必要があります。
![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/604991/96d9ff7f-f7f3-8416-94dc-f3588fbc0233.png)

IPレンジは複数登録できます。
![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/604991/13811da2-7e33-060a-2e58-f467bc7be625.png)

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/604991/4073ce61-2312-296f-9584-75d3290cfb4b.png)

作成できました。
![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/604991/d53ce709-f5ed-cdb6-3ab3-46eebbb27a24.png)


# プールの割り当て
## 既存VNet
既に存在しているVNetに割り当てられます。
VNetのアドレス空間がIPプールの範囲内に入っている必要があります。

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/604991/3b899dee-880d-34fb-fa6a-861513993117.png)

VNetを選択して割り当てます。
![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/604991/566cfdf0-d7d3-31ea-7bd9-64b75aac7125.png)

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/604991/91c2ae37-268b-1441-0f35-533567424e4a.png)

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/604991/97eed4f2-bd04-08a3-24a2-8779bd1e7e5a.png)



## 新規VNet
Vnet作成時にアドレス空間をIPプール範囲内の値に収めることができます。
ただし、IP範囲を好きなように指定できないため、大きい範囲、連続していない範囲（192.168.0.0と10.0.0.0等）でIPプールを作っていると思ったとおりのIPをアドレス空間にすることが出来ません。
新規VNet作成時にIPプールから割当てる場合は、アドレス空間の割当毎に子プールを作ると良さそうです。

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/604991/c421cf6c-55b7-6f9f-a191-7b637670580c.png)

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/604991/1664a1c0-5d40-d74d-e953-85fc0e8d6c95.png)

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/604991/e91b5d29-ceb6-4769-6b67-d74822c1f943.png)


## VNet以外
Azure VNet以外にもオンプレミスや別クラウドで使用するIPアドレスを登録してIPアドレスを管理することが可能です。

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/604991/c6ee3d26-7547-c0c0-8197-452624955847.png)

例えばAWSでこの範囲を利用していると想定した場合
![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/604991/0dafed8c-6e13-38dc-db50-091934c177b7.png)

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/604991/f4f7ae22-8321-67cc-088f-d61a96ff9969.png)


## 注意点
現状（2024年10月時点）では以下の挙動のため、注意が必要です。
私の環境だけで発生している可能性もありますが…。

* VNet割り当て後のアドレス空間の変更は不可能
    * アドレス空間の追加、IP数の変更、保存しても反映がされませんでした
* IP範囲を自分で指定できない
    * 指定出来るのがプールのみとなり、希望のIPアドレスを採番するのが難しいです

# おわりに
必ずIPプール内のIPアドレスを使用することになり、誤ったIP範囲を使う可能性が減りうまく使えれば便利なものですね。
MIRACO PLUS 3Dスキャナー：ウクレレのクリエイティブなDIY改造の旅

本ケーススタディでは、MIRACO PLUS 3Dスキャナーを使用して、普通のウクレレを創造的に改造し、最終的にユニークなテーブルランプに変身させる方法を紹介します。このプロセスでは、デジタル技術とアートデザインが密接に結びつき、従来の楽器改造に新たな可能性が切り開かれました。
![c173867bf88f59caa83ee9b006cbac8a.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3824290/b4ef7d8a-30a8-d310-20cf-7869a64fc963.png)


物語は、ありふれたウクレレの模型から始まります。MIRACO PLUS 3Dスキャナーを使用して、デザイナーは楽器の形状や細部を正確にキャプチャし、ボディの輪郭から弦の微妙なカーブまで、ウクレレの形状が高精度で再現されました。構造化光技術の応用により、データの正確性と完全性が確保され、その後のクリエイティブな改造に向けた信頼性の高い基盤が提供されました。
![0bdffefcf54414c6615b76efe38d02bc.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3824290/accbcf84-98c0-27ae-f69e-f45feae19f65.png)


スキャンが完了すると、モデルは3Dデザインソフトウェアにインポートされます。デジタルプラットフォーム上で、デザイナーは自由にウクレレの構造や機能を調整し、無限の創造力を発揮できます。今回の改造では、ウクレレに新しい命を吹き込み、テーブルランプとして再設計することにしました。デザインソフトウェア内で、ウクレレのサイズが微調整され、ボディ中央のサウンドホールが電球の支柱にデザインされ、ネック部分がランプの柱として延長されました。すべての変更がデジタルモデルでプレビューされ、最終製品が美観と実用性を兼ね備えていることを確認しました。
![9d9feed5f3c677380da44e1bfd9c7438.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3824290/58671c9c-b7bc-0b44-9480-d8663451ac32.png)


設計と調整を経て、最終的な製品であるテーブルランプは、驚くべき効果を発揮しました。ウクレレのボディはランプの主な装飾部分となり、シェードと柱の組み合わせがクリエイティブで独特な芸術的センスを生み出しました。このようなテーブルランプは、ただの家具アイテムではなく、個性的なスタイルに満ちた芸術作品です。
![42c6cf051b64e7b6fcdb0fb995658d1b.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3824290/96202dcf-5cb1-da2e-cba6-325826590d87.png)

このケースは、MIRACO PLUS 3Dスキャナーと3Dデザインソフトウェアを使用して、従来の楽器をパーソナライズし、新しい機能と外観を与える方法を示しています。3Dスキャン技術により、このようなクリエイティブな改造がより簡単で実現可能になり、デジタル空間でデザインの細部が完璧に表現され、デザイナーやクリエイターに無限の可能性が提供されます。

https://www.revopoint3d.jp/products/all-in-one-3d-scanner-miracoplus
New Relicのアラート通知をカスタマイズして状況把握を早めよう


New RelicでメールやSlackなどにアラート通知する際のタイトルにインシデントのコンテキストを含める方法をご紹介します。コンテキストが適切に含まれれば、問題の切り分けや優先度づけが早くなるので是非ご利用ください。

# はじめに
オブザーバビリティプラットフォームNew Relicでは、クラウドサービス含めたインフラからアプリケーション、ブラウザやモバイルなどのフロントサイドまでフルスタックでテレメトリーデータを収集し、問題の検知や原因の特定を早めることを可能にします。

問題を検知する方法の一つとしてアラート通知がありますが、通知されたアラートからいかに早く状況を把握できるかが問題の切り分けや早期解決には重要です。状況が把握できないような内容のアラートが通知されていてはそれを難しくしてしまいます。

New Relicでは、アラートする際の条件やアラート通知先、通知方法などを定義することができますが、***アラート通知の際のタイトルや本文にインシデント発生時の状況（コンテキスト）を柔軟に含めることができます***。コンテキストとは、例えばアラートの条件や、アラートの対象（アプリケーションやホスト）、重要度、その他任意のタグなどです。

コンテキストがうまくアラート通知に組み込めれば、問題の切り分けや優先度づけがしやすくなるでしょう。

![1slide.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/535230/eba3e69c-7312-ace3-ab8c-8126a91b6821.png)


:::note info
最新のアップデートの詳細はこちら
[New Relic アップデート一覧
](https://newrelic.com/jp/blog/nerdlog/new-relic-update  "New Relic アップデート一覧")
:::

# やってみよう
### アラートの定義
アラート条件を一つも定義していない場合はアラート条件を作成します。アラート作成や通知設定の方法自体は本記事では省略します。アラートの作り方については公式ドキュメントをご参照ください。

https://docs.newrelic.com/jp/docs/tutorial-create-alerts/create-new-relic-alerts/


### タイトルや本文にコンテキストを入れる
アラート条件（Alert Condition）の設定画面に「Customize Incidents from this condition」というセクションがありますが、ここでアラート通知時のタイトルや本文のカスタマイズができます。このアラート条件が発火した際に、ここで定義したタイトルや本文が利用されます。

![template.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/535230/79fc9de4-318f-d0eb-9cc4-06c1e6f29c75.png)


アラート通知の際のタイトルや本文にはテキストが入力可能ですが、ここに変数を入れることができます。***変数を定義しておくことで、インシデント発生時の状況（対象、Severity、メトリックの値など）に応じて動的に通知の内容が変えられる***という仕組みです。


例えばここでは、Title templateに以下のような設定をしています。***{{...}}で囲われた部分が変数***となっており、インシデント発生時の状況に応じて動的に変更されます。

```
{{conditionName}}:  {{entity.name}} - {{entity.type}} - {{priority}}
```

各属性の意味は以下の通りです。
<table>
  <thead>
    <tr>
      <th>属性名</th> <th>説明</th>
    </tr>
  </thead>
  <tr>
    <td>conditionName</td> <td>アラート条件名</td>
  </tr>
  <tr>
    <td>entity.name</td> <td>アラートの対象となるエンティティ（監視対象）</td>
  </tr>
  <tr>
    <td>entity.type</td> <td>エンティティの種類（アプリケーションやホストなど）</td>
  </tr>
  <tr>
    <td>priority</td> <td>インシデントのSeverity (warning/critical)</td>
  </tr>
</table>


その他にもタグやRunbookのURLなど、利用可能な変数はたくさんあります。どんな変数が使えるかは以下のドキュメントを参照してください。

https://docs.newrelic.com/jp/docs/alerts/create-alert/condition-details/incident-event-attributes/


### 確認してみよう
では、意図的にアラート条件が発火するような状況にして実際どのような通知がされるのかを確認してみます。
以下はアラートがSlack通知された際のスクリーンショットです。赤枠の通り、通知の際のタイトルが先ほどカスタマイズしたものになっているのが確認できます。

![slack-notification.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/535230/80e02c7a-f872-c264-1f3d-1f16678713ad.png)


アラート一覧画面で確認できるアラートも同様です。

![alerts.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/535230/4d533e18-65f2-492b-b3cb-0326f18063c3.png)

# まとめ
今回はNew Relicで通知するアラートのタイトルや本文をカスタマイズし、インシデントのコンテキスト情報を動的に加える方法をご紹介しました。より適切なコンテキストが加われば、通知を受けた際の問題の切り分けや優先度づけの第一歩が早まりますので是非ご活用ください。


:::note info
New Relic株式会社の[X(旧Twitter)](https://x.com/NewRelicJapan) や [Qiita OrganizationOrganization](https://qiita.com/organizations/newrelic)では、
新機能を含む活用方法を公開していますので、ぜひフォローをお願いします。
:::

:::note info
無料のアカウントで試してみよう！
[New Relic フリープランで始めるオブザーバビリティ！](https://qiita.com/ktst79/items/5ee74b34e6adb8a7a6fa)
:::
VLAN構築(ルータオンアスティック)をしてみた

## 簡単な自己紹介
はじめまして。Riv-riv24です。26卒のネットワークエンジニア志望をして就活中の者です。
Qiitaはとりあえずでアカウント作るだけ作っていただけでしたが、とりあえずネットワークエンジニア志望なら、ネットワーク構築内容のレポートとして活用しようということで、これからも記事を書いていこうと思います。
Qiitaというか人生で初めてブログを書く初心者なので、何卒温かい目で見てください。

## 【PC2台とルータ1台でルータオンアスティックの構築をしてみた】

![スクリーンショット 2024-10-18 103037.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3912519/f9a0bc42-60de-5e22-6460-c085f1f64d05.png)

タイトルにもある通り、VLAN間通信を可能にする構築を行いました。
扱った機器は以下に。

- PC2台
- Juniperルータ(SRX100)

PC1(192.168.10.254)
        ↓
fe-0/0/0
        ↓
fe-0/0/1
        ↓
PC2(192.168.20.254)

という感じになります。VLAN間の通信を可能にしようというものです。(画像のやつ分かりずらくてすみません…)

#### ※ VLAN設定項目に関して
(PC1 > fe-0/0/0) : VLAN10(192.168.10.1)
(PC2 > fe-0/0/1) : VLAN20(192.168.20.1)とします。

#### 条件
**・trunkモードを使用しない**
**・irb系のコマンドの使用はしない**
**・あくまでPC1とPC2の異なるVLAN領域の通信を可能にしたい**

という感じの条件を設定しつつ取り組みました。

## 結論 : ダメでした
PC間の通信出来なかった…。一応調べながらやったのですが、思ったことがあって…
「ルータオンアスティック系の情報って少なくね…？」って思いました。
(勿論、自分の調べ方が悪い可能性はある)


**参考にしたWebサイト一覧**
> https://www.infraexpert.com/study/vlanz8.html
> https://qiita.com/v_avenger/items/85a4db548dbe090141c5
> https://www.n-study.com/vlan-detail/intervlanrouting-overview/
> https://www.infraexpert.com/infra/junosw02.html
> https://www.juniper.net/documentation/jp/ja/software/junos/multicast-l2/topics/topic-map/bridging-and-vlans.html

とりあえず参考にしたサイト達です。次にコマンド載せます。

## Teratermで設定した内容
![スクリーンショット 2024-10-18 112225.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3912519/e1eb8933-389c-9a72-1b3f-4227dc1c0060.png)

## arpコマンド
![スクリーンショット 2024-10-18 112239.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3912519/23e6ed2b-491c-6557-016e-7fe246b1171a.png)

## ipconfig
![スクリーンショット 2024-10-18 112254.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3912519/be8d0f31-0f5d-2918-b481-b03e9ab341d4.png)

といった感じです。3日間かけて挑みましたが、一応状況としては【**fe-0/0/1までの通信まではいけた**】というのが現状報告です。その後の「fe-0/0/1 > PC2」の通信が飛ばないだったり、何故かコマンドプロンプトでping通信をした場合、【**fe-0/0/0のまでの通信すら弾かれる**】といった現象が起きてなんじゃこれって感じです。
(Teratermでは一応PC1からfe-0/0/1までの通信は通ったのですが、原因が正直分からないので色々とお調べ中です)

といった感じです。これ以降正直解決策が見当たらなかったのですが、一応解決出来たら追記しようかと思ってます。

## 何でこれやったの？
何故この実習を行ったかというと、**「学校でやった内容だが、通信が出来るところまで到達出来なかったから最後までやりたかった」** からですね。
一応学校ではCiscoを扱っているので、Ciscoを使ってやろうと思ったのですが、根本的な考え方自体はあまり変わらないと思っているので、今回はJuniperでやりました。JuniperとCiscoって明確な違いがごっそり変わるのって「ポリシー関係」「SRXシリーズにはルータとスイッチの両方の機能が備わってる(らしい？)」と考えていますが、それ以外にもなんか明確な違いってあるのですかね…？(違ってたら本当にごめんなさい。後細かい話とかあったら教えてくださるととても嬉しいです。)

後はそうですね…「これまず設計って合ってんのか…？」と脳裏によぎったりはします。正直自分の設計が正しいとは思ってないので、もし設計段階から間違えてたとしたら「まぁそういうこともある、次はこうならないようにしようか」って感じでポジティブシンキングします。色々バカしてるところあると思いますので、お助けがあれば幸いです。

## 終わりに
今回、VLAN間通信を可能にする構築をしようと試みましたが、通信出来なかったで終わりじゃなくて、色々試したりしようかとは思ってます。ネットワークエンジニアとしては本当にぺーぺーなんで色々教えてくださると幸いです。ブログも見にくいとか、不備があったりとかあるかと思います。それでも最後まで見てくださりありがとうございます。不定期ではありますが、これからもQiita更新していくと思います。
iOSDC Japan 2024 個人的に気になったセッションまとめ


# day 1

## Track A

## 座談会 「Strict ConcurrencyとSwift 6が開く新時代: 私たちはどう生きるか？」 by shiz

https://fortee.jp/iosdc-japan-2024/proposal/5e7b95a8-9a2e-47d5-87a7-545c46c38b25

文字起こし・メモ

- Concurrency を軸に座談会の内容
- アンケート：使っている 75%
- いいねと答えた人も、好感触
- 学習コストが高い、使い方難しそうとの意見
- データ競合についての概要
- Data Isolation(データ隔離)
- 静的隔離と動的隔離の２種類がある
    - 静的隔離の例： actor, @MainActor
    - 動的隔離の例：MainActor.run (１時的なやつ)
- 基本はActor,例外あり
- Swift Concurrencyはスレッドをブロックしない思想
- Mutex, Atomicが新しくできる、それを使える, ただしiOS18,Swift6
- よくわからないエラーに悩んでいたらデータレースの可能性がある
- Xcode16までに対応しなくてもいい(Swift5言語モードでも動くため)
- Swift5言語モードで Complete Strict Concurrencyにして警告消したらSwift6言語モードにすればいい
- 外側から始める、最上位モジュールから始める
- Data raceの主要な原因（ミュータブルなクラス）
    - 1. structにできないか考えるなど、ある
- グローバル変数の場合は、non-sendableの場合はかなりしんどい 

感想

- 隔離境界という用語について知れた
- isolationﾑｽﾞｶｼｲｰ
- マイグレーションガイドがある
- Sendableについて知りたくなった
- より安全なアプリにできるので対応した方が良さそう
- 詳しくはブログを見る
- 勉強資料もある

### iOS/iPadOSの多様な「ViewController」の徹底解説と実装例 by haseken

https://fortee.jp/iosdc-japan-2024/proposal/f8766f69-db90-44da-9853-58f682943b12

感想

- 過去のViewControllerを振り返ってくれて個人的にかなりありがたかった
    - iOS開発に携わり出したのが１年くらいのため
- 永久保存版

### 夢の声優体験！パーソナルボイスでゲームのキャラクターをあなたの声で喋らせる by 岡本 龍太郎

https://fortee.jp/iosdc-japan-2024/proposal/753db2ce-ca26-4bc8-868d-705e0d771705

感想

- パーソナルボイスについてうっすら知っていた
- 使ってみたかったが英語と中国語だけの様子
- デモアプリまで作って完成度も高く、すごい
- 日本語での対応が待ち遠しい

### プロジェクトで遭遇した奇妙で面白いバグたち by レイ

https://fortee.jp/iosdc-japan-2024/proposal/2095e853-8df7-4b25-aea3-61d6595a5124

文字起こし・メモ

- 絵文字によってレイアウトが崩れる
    - TextKit2に移行して治った
- 実機かつ、録画するとレイアウト崩れる
    - priory使おう
- AsyncImage
    - 他のライブラリを使おう。。

感想

- 自分が実務だとあまり触れてこない技術・ライブラリなので知見が深まった
- SwiftUI割と浸透してきてるんだなと思った

### なぜデフォルトが青色！？ Tint Colorの理由に迫る by akidon0000

https://fortee.jp/iosdc-japan-2024/proposal/1b7698c6-31fb-433f-ba71-66ab19c4f14d

感想

- 青色がデフォルトなの確かに不思議
- Appleのデザイン文化の歴史知れてありがたい
- 色覚特性への配慮でなっているという考察、確かになぁと思った
- 青色のデフォルトカラーをダサいみたいな印象でやめる微妙かもなと思った

### InputMethodKitとTCAを使ったmacOS上で動作するIMEの開発 by Tatsumi0000

https://fortee.jp/iosdc-japan-2024/proposal/8910998f-169e-4181-a65a-c176ae475362

感想

- IME作れるって凄い！
- 全く未知の領域だった
- アプリ名がTypoしてるw面白い（わざと）

### 数値を文字列に整形する際の落とし穴とその解決策 by glassfiber

https://fortee.jp/iosdc-japan-2024/proposal/115cdffa-15fe-4480-8f70-016c53cb6da8

感想

- 実際の業務の流れ沿ったようなLTですごく実践的でよかった
- 案件として、1%に満たない場合は、少数以下２位まで出したいなどよくあるなぁと思った
- case使わずに対応するなど、実装時の考えも見れて素敵
- テストまでやってていい感じ

## Track B

### リョムキャットのパーフェクトSwiftネーミング教室 by Ryomm

https://fortee.jp/iosdc-japan-2024/proposal/c3901357-0782-4fb5-89b8-cb48c473f066

感想

- API Design Guidlelinesをわかりやすく解説していた
- 名前付は重要なのでちゃんとやろう
- 会場が盛り上がっていて、LTというもの自体の参考になった

### TextFieldに"2"が入力できなくなったお話 by 大前 久基

https://fortee.jp/iosdc-japan-2024/proposal/d02328aa-c279-4faa-9d56-8ad5079903de

感想

- 話が上手で引き込まれた、衝撃のラスト、、、
- 実際にiOS開発だと意外なところの落とし穴というのが多いと個人的にも思うので、これもまたありがたい知見


## あとがき

気になったセッションと言いつつ、書きながら全部見ようと意気込んでたので全部のセッションを書くつもりが頓挫してた。。。
途中分を一旦放流し後でちゃんとみます。。
7日間でハッキングを始める本 - 7日目 -

# 本記事の目的

書籍「7日間でハッキングを始める本」の
Day7に出てきたコマンド・用語などの整理

基本的には前回までに出たものは割愛するが、本記事をDay5から書き始めた関係上Day4までのコマンドは既出でも書くことがある。

## Day6まで
- [Day5](https://qiita.com/akebono-san/items/7103ba63a983103da7c3)
- [Day6](https://qiita.com/akebono-san/items/a190a63db00eb4679388)

## コマンド・ツール

### smbclient
- smbに接続するためのコマンド
- 過去に使った記憶があるが、過去の記事で記述されていなかったためDay7に載せる

```bash
# <host名>で指定したホストの共有リソースを一覧表示
smbclient -L <host名>

# <user名>で指定したユーザーで接続
smbclient <host名> -U <user名>

# 例. blog.thmに対して、共有フォルダーの一覧を表示したのち、BillySMBという共有フォルダに接続する
smbclient -L //blog.thm
smbclient //blog.thm/BillySMB

# 接続したsmb共有フォルダ内で指定したファイルを取得する
get <file名>
```

### steghide
ステガノグラフィに関するツール
情報を埋め込んだり、埋め込まれた情報を取り出すことができる

```bash
# install (apt)
sudo apt install steghide

# <file名>で指定したファイルから埋め込まれたデータを取得
steghide extract -sf <file名>
```

### wpscan
WordPress専用のスキャン用ツール

```bash
# <url>に対してユーザー情報を探索する
wpscan --url <url> --enumerate u

# <url>の<usr名>に対してパスワード攻撃を行う
# <usr名>は,区切りで複数指定可能
# -P で辞書攻撃に使用するパスワードリストを指定する
# --password-attack で攻撃対象のページを指定する
# -t で並列スレッド数を指定する
wpscan --url <url> -U <usr名> -P <listファイル> --password-attack <page名> -t <thread数>
```

### msfconsole
Metasploitを起動するためのコマンド

### Exploit Database
脆弱性に関するPoCがたくさん載っているサイト
米国OffSec社が運営

### LinPEAS
ターゲットの初期侵入が終わったとに実行することで権限昇格できそうな設定ミスを見つけてくれるツール（Linux用）
PEASS-ngというツール群の一つで、Windows用にはWinPEAS、Mac用にはMacPEASがある

### ltrace
プログラムが実行中にライブラリ関数を呼び出す様子を追跡して表示するコマンド

```bash
# <command>についてltraceを実行
ltrace <command>
```

## セキュリティ攻撃関係の用語集

## その他の用語集
### ステガノグラフィ
あるデータを他のデータの中に隠す技術
電子透かしなどに使われている
リモートリポジトリでHTTP通信する際、ユーザー情報入力を省略する

GitLabにHTTPでアクセスする際、毎回ユーザー名とパスワードを入力する手間を省く方法はいくつかあります。ここでは、HTTP通信を使用しつつ認証情報の入力を省く方法の一部を説明します。

## Gitの認証情報をキャッシュに保存する
Gitには認証情報をキャッシュする仕組みがあり、一度入力した認証情報を一定時間保存することで、毎回の入力を省くことができます。以下のコマンドで認証情報をキャッシュに保存します。

```sh
git config --global credential.helper cache
```
この設定をすると、デフォルトでは15分間の間、認証情報がキャッシュされます。

キャッシュの有効期限を変更したい場合は、以下のようにして秒数を指定します。例えば、1時間キャッシュしたい場合は以下のコマンドを使用します。
```sh
git config --global credential.helper 'cache --timeout=3600'
```

## 認証情報を永久に保存する
キャッシュではなく、永久に認証情報を保存して毎回の入力を省きたい場合は、credential.helper を使って認証情報をローカルのファイルに保存することができます。

```sh
git config --global credential.helper store
```

## 個人アクセストークンの使用
GitLabで **個人アクセストークン（Personal Access Token）** を使う方法もあります。
個人アクセストークンはパスワードの代わりに使えるもので、セキュリティ的にもより推奨されます。

個人アクセストークンの作成手順
GitLabにログインし、プロフィールの設定ページに移動します。
**「Access Tokens（アクセストークン）」**のセクションで新しいトークンを作成します。
トークンには名前と有効期限を設定できます。
必要な権限（repo や read_repository など）を選びます。
Gitの認証情報に個人アクセストークンを保存
トークンを発行したら、Gitリポジトリへの認証情報としてこのトークンを使用します。例えば、次回Gitで認証情報を聞かれたとき、ユーザー名にはGitLabのユーザー名を使い、パスワードの代わりに発行されたトークンを入力します。その後、`credential.helper store`を使って保存することで、以降の認証情報入力を省略できます。

```sh
git config --global credential.helper store
```

## .netrcファイルを使う
.netrcファイルを使って、HTTP通信の際に認証情報を自動で提供することも可能です。

手順：
ホームディレクトリに.netrcファイルを作成します（~/.netrc）。
次のようにGitLabの情報を記述します。
```
machine gitlab.com
login your_username
password your_password_or_personal_access_token
machine: 接続先（例: gitlab.com）
login: GitLabのユーザー名
password: パスワードまたは個人アクセストークン
```

.netrcファイルはプレーンテキストで保存されるため、このファイルの権限を限定してセキュリティを保つことが重要です。

```sh
chmod 600 ~/.netrc
```
python x sentient で自動操作

ダメだな
延々同じ処理を繰り返して使い物にならない。


参考

https://qiita.com/sergicalsix/items/f44d133c699b11d88684

自動でブラウザ操作ができるらしいので使ってみた。

環境はwindows11

インスコ

```
pip install sentient
```

色々エラーが出たが、chatgptに聞いてなんとかインスコ完了。

# chromeで開く

管理モードで開かなくてもOK
ただし、スタートバーの常駐しているchromeも終了しておくこと。

行頭の「&」も必要ですからね

```
& "C:\Program Files\Google\Chrome\Application\chrome.exe" --remote-debugging-port=9222
```

# openai のキーを取得

https://openai.com/ja-JP/
からキーを取得

# コマンド入力してopenaiのapiキーを設定

```
setx OPENAI_API_KEY "sk-keykeykey"
```

# 実行ファイルを作成

```santienttest.py
from sentient import sentient
import asyncio

# カスタム指示とゴールを設定
custom_instructions = """
1. Google検索をせず、直接YouTubeで検索してください。
"""
custom_goal = "XXXの動画を再生してください。"  # XXXの部分を再生したい動画の内容に変更

# 非同期でSentientのinvokeメソッドを実行
result = asyncio.run(sentient.invoke(
    goal=custom_goal,
    task_instructions=custom_instructions,
    provider="openai",  # APIプロバイダーを指定
    model="gpt-4o-mini"))  # 使用するモデルを指定

# 実行結果を表示
print(result)
```

# 実行

```
python santienttest.py
```

これでyoutubeが再生される。
自分の場合はラルクの曲が再生された。

# 料金は？

Dashboard > Usage
で確認

今回の場合は 1円だった

![名称未設定-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/31338/373dc500-06a4-ea43-51b4-d5ae9a158fdc.png)
【エラー備忘録】UnityのXR Interaction Toolkit にてUIが反応しなかった

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2725406/f87f4645-3d3b-82b4-96b4-41ae23acdf1a.png)
XR Ray InteractorコンポーネントのMaxRayCastDistanceを100にすると反応しました
ただRayが届いてなかっただけでした
【エラー備忘録】UnityのPhoton Fusionのセッション参加ができなかった

## はじめに
某有名記事に従いUnityにてPhoton Fusionを使い始めたときセッションに参加することができませんでした。"基本のき"すぎて調べても記事が見つからなかったので備忘録として残しておきます。
## 経緯
このコードを実行したがセッションに参加できない。
```c#:GameLauncher.cs
using Fusion;
using UnityEngine;

public class GameLauncher : MonoBehaviour
{
    [SerializeField]
    private NetworkRunner networkRunnerPrefab;

    private NetworkRunner networkRunner;

    private async void Start() {
        // NetworkRunnerを生成する
        networkRunner = Instantiate(networkRunnerPrefab);
        // StartGameArgsに渡した設定で、セッションに参加する
        var result = await networkRunner.StartGame(new StartGameArgs {
            GameMode = GameMode.AutoHostOrClient,
            SceneManager = networkRunner.GetComponent<NetworkSceneManagerDefault>()
        });

        if (result.Ok)
        {
            Debug.Log("成功");
        }
        else
        {
            Debug.Log("失敗");
            Debug.Log(result.ErrorMessage);
            Debug.Log(result.ShutdownReason);
        }
    }
}
```

いきなり詰まったか…と思いログを見てみると

:::note alert
 Incompatible Configuration. Please upgrade to the latest Fusion SDK
:::

というエラーメッセージを発見

SDKをアップグレードしろとのことなので「見た感じ最新のSDKをダウンロードしたんだけどな…」と思いながら公式ページを調べてみる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2725406/2c9c969d-8dd4-d8d6-593f-0f7635c5df63.png)
Fusion1とFusion2があるのね…

Fusion2のSDKをページの案内に従ってインポートして先ほどのコードを実行してみると
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2725406/b42b6a85-7191-a941-103b-61ba669a8f56.png)
成功（やったね）
## SDKダウンロードページ
https://doc.photonengine.com/ja-jp/fusion/current/getting-started/sdk-download
Elasticsearchクラスタを一瞬で起動するstart localを使う

# はじめに
Elasticsearchはオープンソースですので、いつでもどこでも自由に機能を試すことができます。過去にもdocker composeで簡単に立ち上げる記事を記載してきました。
https://qiita.com/takeo-furukubo/items/c2f194679afadc06a4e9
これでも問題ないのですが、ElasticがGitHubに**Start Local**というリポジトリを作成しました。
https://github.com/elastic/start-local
これが非常に便利で、Elasticsearchクラスタをコマンド一発で立ち上げてくれます。
GitHubのREADMEを読めば何の問題もありませんが、ここでも解説をしておきます。

因みに似たようなものでelastic-packageというのもあります。これはIntegrationの開発などで使うことを想定していますが、中でやっていることはほぼ同じです。
ブログがありますのでこちらも参考にしてください。
https://qiita.com/daixque/items/819b03bfa19acd371af6

# 試した環境
Macbook Pro M3
Sonoma 14.7

docker composeを使いますので、インストールしておいてください。
勿論Linuxでも動きます。
WindowsだとWSLが必要です。

# ライセンス
Trialライセンスです。３０日間はすべての機能を使用できます。３０日過ぎるとBasicになります。

# 手順
## 起動
本当にコマンド一つです。
`curl -fsSL https://elastic.co/start-local | sh`
shの中を見るとわかりますが、やっていることは以下のことです。
- `elastic-start-local`というフォルダ名作成
- 環境の確認
- docker-compose.ymlの作成
- start/stop/uninstall用のshファイル作成
- コンテナ起動
- API key/passwordを含めた`.env`ファイル作成

HTTPSは使用されていません。
問題なく実行されると以下のようにパスワードとAPI Keyが表示されます。
パスワードはランダム作成なので以下のものは使えません（当たり前ですが）
```
🌐 Open your browser at http://localhost:5601

   Username: elastic
   Password: Y4cmdo3Q

🔌 Elasticsearch API endpoint: http://localhost:9200
🔑 API key: OE50MW1KSUJhYk5CMFp0TFRVLW86bkR1S1Y4MEJTbENtbGh2UFBvaUF6QQ==
```

起動するとコンテナが2つ立ち上がります。`elastic-start-local`フォルダに移って`docker compose ps`を実行すると以下のようになります。
```
elastic-start-local % docker compose ps
NAME               IMAGE                                                  COMMAND                   SERVICE         CREATED         STATUS                   PORTS
es-local-dev       docker.elastic.co/elasticsearch/elasticsearch:8.15.2   "/bin/tini -- /usr/l…"   elasticsearch   7 minutes ago   Up 7 minutes (healthy)   127.0.0.1:9200->9200/tcp, 9300/tcp
kibana-local-dev   docker.elastic.co/kibana/kibana:8.15.2                 "/bin/tini -- /usr/l…"   kibana          7 minutes ago   Up 7 minutes (healthy)   127.0.0.1:5601->5601/tcp
```

## アクセス
http://localhost:5601
でアクセスできます。
インストール実行時に表示されたパスワードでKibanaにログインできます。

## 停止
`./stop.sh`
で停止します。Docker Volumesは消去しませんのでデータは残ります。

## 再起動
`./start.sh`

## アンインストール
`./uninstall.sh`
Docker Volumesや`.env`,`docker-compose.yml`など全て消去します。
３０日経ってライセンスがBasicになってしまった場合は、一度全て消してしまえば再度Trialライセンスですべての機能を使用できます。（データは消えますが）

## 設定
`docker-compose.yml`に記載されているのでそれを変更します。
### メモリ
メモリはあるだけ使うので以下の部分で必要に応じて制限します。
```yaml
    ulimits:
      memlock:
        soft: -1
        hard: -1
```
### 機械学習用メモリ
機械学習で使用できるメモリ量は自動的に決まります
`      - xpack.ml.use_auto_machine_memory_percent=true`
こちらに記載があります。
https://www.elastic.co/guide/en/elasticsearch/reference/current/ml-settings.html
明示的にメモリ量の比率を決めたい場合は`xpack.ml.max_model_memory_limit`を設定します。

# まとめ
Elastic Cloudを使っていただくのが一番手っ取り早いのですが、手元で試してみたいという場合はstart-localが便利です。
是非お試しください。
AWS BatchのSubmitJobで「Reason The field 'parameters' is not supported」みたいなエラーが出るときの対処

AWS BatchのSubmitJobで「Reason The field 'parameters' is not supported」みたいなエラーが出ました。
ちょっと解決に時間がかかったのでメモしておきます。

## やりたかった事

- AWS Batchで決められた時間にS3のファイルを別の所に移動したい
- EventBridgeで定期実行する
- Lambdaは挟まないでSubmitJobしたい
- バッチの内部で日付取得し処理に使っているがジョブ失敗の時に備えて外部から日付パラメータを渡せるようにしたい

## EventBridgeの設定

AWS Batchのよくある定期実行系の記事ではLambdaを挟む方法がほとんどですが、
今回はEventBridgeスケジューラで直接SubmitJobしています

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/485573/bef46189-caf4-d9cd-b1f3-08141ba8f62b.png)

## 問題となった箇所

parametersの定義で以下のように<font color="Red">先頭小文字</font>にして登録しようとしていました。

```json
{
    "JobDefinition": "sample-batch",
    "JobName": "sample-batch",
    "JobQueue": "sample-job",
    "parameters": {
        "targetDate": "none"
    }
}
```
この状態だと以下のようなエラーが出ます。

:::note alert
Invalid RequestJson provided. Reason The field 'parameters' is not supported by api 'submitJob' for the service 'aws-sdk:batch'.
:::

## 解決法

下記参考URLにてCamelCaseで書くといけるとの情報で無事登録できました。

```
Parameters in Step Functions are expressed in CamelCase, even when the native service API is pascalCase.
```

```diff_json
{
    "JobDefinition": "sample-batch",
    "JobName": "sample-batch",
    "JobQueue": "sample-job",
-    "parameters": {
+    "Parameters": {
        "targetDate": "none"
    }
}
```

## 参考

[AWS Step cannot correctly invoke AWS Batch job with complex parameters](https://stackoverflow.com/questions/54085583/aws-step-cannot-correctly-invoke-aws-batch-job-with-complex-parameters)
CI/CDってなーに

この記事では`CI/CDの概要`について初心者でもわかりやすいように解説します。
CI/CDについて調べているときに`DevOps`とか初っ端なかまされて困惑して、結局CI/CDってなんのためにあって、何をする技術なのかわからなかった過去の自分が知りたかった内容を記事にしてみました。

## CI/CDは何のためにあるのか

この記事を読んでいる方の多くは、アプリ開発に取り組んでいる方々だと思います。
アプリケーションの開発はリリースがゴールではありませんね。リリース後も、ユーザーのフィードバックを受けて改善を続け、機能を追加したり、問題を修正したりすることが重要です。

ビジネス目線で見ると、市場のニーズに合わせてアプリ自体をアップデートする必要があります。ユーザーに最適な機能を求めて素早くPDCA サイクルを回していきます。PDCAサイクルを高速に回すには、`アップデートのスピード`を早める必要があると思います。
このスピード感がビジネスで勝ち抜いていくには必須になります。このスピードを上げるのがCI/CDです。

ソフトウェア開発には、ソフトウェアライフサイクルと言うものがあります。
![](https://storage.googleapis.com/zenn-user-upload/fa87cbf342fa-20241015.png)

ソフトウェアライフサイクルの`ビルド、テスト、リリースを自動化`し、アップデートのスピードを早くするのがCI/CDの目的です。
![](https://storage.googleapis.com/zenn-user-upload/d0fe4be750b0-20241015.png)
CI/CDは技術的なものではありますが、どちらかというとビジネスサイドの要望(PDCAサイクルを高速に回す)を叶える技術であるとも言えます。

ひとまず以下のようなざっくりとした認識で大丈夫です。
CI → バグがない状態を保つ検証の自動化
CD → デプロイ作業を自動化

## CI(継続的インテグレーション)とは

ソフトウェア開発は、ソフトウェアライフサイクルという開発プロセスを踏んでいきます。
そして、`ビルド、テスト、リリース`を自動化するのがCI/CDと先ほど説明しました。
そのうち、CIは`ビルド`と`テスト`を自動化するフェーズです。
![](https://storage.googleapis.com/zenn-user-upload/1c62cde5f88e-20241015.png)
ビルド、テストを噛み砕いていうと「コードの品質が十分であるか」と「バグ」の検証を行うことであると言えます。

特に頻繁に、この検証を行う必要があります。そうすることで早期にバグを発見修正ができ、結果的にトラブルシューティングに取られる時間が短縮します。
多くのプロジェクトではgit push、mergeするたびにこの検証を自動的に行っています。
頻繁に検証をすることで`常に動くコードが保証`されます。人間がこの検証作業を行うことはお勧めしません。
それは、PDCAサイクルが高速に回せなくなるからです。
そして、人間は忘れます。頻繁に検証すれば時間が取られるからです。
さらに検証のし忘れがあればバグの混入リスクが高くなります。
バグの含まれているアプリをリリースすれば、`ユーザー体験が低下`します。

検証は、コマンドを順番に実行するだけの繰り返し作業ですので`自動化`できます。
繰り返し作業は自動化に向いているため、機械に任せましょう。

このような検証環境が用意されていることで、新しい機能を追加することが億劫にならず、ビジネスサイドでの`挑戦と改善`が素早く行えます。

## CD(継続的デプロイメント)

CIはバグの混入リスクを減らし、`常に動くコードを保証するフェーズ`でした。

`CD`は、CIで動くことが保証されたコードを`ミスなくリリースを行うためのフェーズ`です。

![](https://storage.googleapis.com/zenn-user-upload/7f62b7655f0f-20241015.png)
デプロイ作業は複雑です。

デプロイ作業を手順書に書き起こして手動で行う場合、常にヒューマンエラーのリスクがつきまとうことになります。間違った手順でデプロイし、リリースすればユーザーは困惑してしまいます。

アップデートするごとにデプロイ作業は行われます。人間がやればいつかミスします。

こちらも自動化してデプロイミスのリスクを減らしましょう。

デプロイ作業を自動化することで安全にユーザーの元へサービスが届けられます。

## CI/CD と Github Actions

CI/CDを実現するプラットフォームは複数ありますが、代表的なのは`Github Actions`でしょう。
全ての作業をGithubで完結させると作業も捗るので個人的にもおすすめです。

## まとめ

このように開発だけでなく、開発と運用を一体として考えるのが`DevOps`です。

**ポイント**

* CI/CDはバグの検証を自動化し、動くコードを保証した上でサービスを無事にユーザの元へ届ける
* CI/CDで、時間短縮、フューマンエラーの低減、開発スピードの向上、サービスの質の向上が果たせる
→ビジネスサイドの仮説と検証が素早く行える

CI/CDはサービスをアップデートする可能性があるプロジェクトでは採用検討して欲しい技術であります。
OpenpyXLを使用してEXCEL図面を操作する

PythonでExcelシートを操作し、Web画面に表示するアプリの作成にはいくつかのステップが必要です。以下に基本的なプロセスを示す

### 1．環境セットアップ
ライブラリのインストール
```py
pip install openpyxl
pip install fastapi
pip install "uvicorn[standard]"
pip install tabura-py
```

### ２．EXCELファイルの読み込みと統一フォーマットの作成
openpyxlを使って、既存のEXCELファイルを読み込む。
各シートやブックを、統一されたフォーマットに変換するロジックを実装する。

### ３．図面画像の作成
openpyxlやtabura-pyを使用して、図面情報を取得し、画像やPDFとして保存。

### ４．Webアプリケーションの作成
FastAPIを使用してREST API を構築する。
APIエンドポイントを作成して、クライアントからのリクエストに応じてEXCELデータや図面画像を提供する。

### ５．Webフロントエンドの統合
必要に応じて、HTML、Javascript（ReactやVue）を使用してフロントエンドを作成する。
ユーザーがWebブラウザを通じて図面を表示できるようにする。

### ６．デプロイとテスト
アプリが完成したら、適切なサーバーにデプロイ、実際のデータでテストを実施する。

サンプルのFastAPIコード
```py
from fastapi import FastAPI, UploadFile, File
from fastapi.responses import HTMLResponse
import openpyxl
from openpyxl_image_loader import SheetImageLoader
import tabula

app = FastAPI()

@app.get("/")
async def read_root():
    return {"message": "Welcome to the Excel to Web app"}

@app.post("/upload-excel/")
async def create_upload_file(file: UploadFile = File(...)):
    # アップロードされたファイルを保存
    with open(f"{file.filename}", "wb") as buffer:
        shutil.copyfileobj(file.file, buffer)

    # openpyxlを使ってExcelファイルを処理
    # tabulaを使用してPDFを生成
    # 図面などの情報を抽出・統一フォーマットに変換

    return {"filename": file.filename}

# 他にも必要なエンドポイントを実装
```
※注意点としては、実際にアプリを構築する前に、既存のExcelシートのフォーマットを詳細に調査し、どのように統一するか計画を練ることが重要。
（利用者が必要としているデータ、どのようなデータ構造が最も便利かを理解するためのコミュニケーションが必要）

### ７．図面画像のWeb表示
前述の/upload-excel/ エンドポイントで変換した図面画像を、FastAPIを使用してクライアントに提供するためのエンドポイントを実装する。
静的ファイルとして保存された図面画像をWebページに埋め込むための処理を追加します。これには、StaticFilesをFastAPIに追加するか、図面画像をBase64エンコーディングしてHTMLに直接埋め込むといった方法がある。

```py
from fastapi import FastAPI, staticfiles

app.mount("/static", staticfiles.StaticFiles(directory="static"), name="static")
```
ここで"static"ディレクトリ内に画像ファイルやPDFを格納し、それらをWebブラウザで直接アクセス可能にする。


### ８．セキュリティの考慮
クライアントからアップロードされるEXCELファイルのセキュリティに注意し、不正なファイルがアップロードされるのを防ぐ。
※アプリケーションの認証機能などを検討する。

### ９．エラーハンドリング
ユーザーが予期せずフォーマットが異なるEXCELファイルをアップロードした場合のエラーハンドリングを実装する。
※わかりやすいフィードバックを提供して利便性を向上する。

### １０．データの可視化とインタラクティビティ
必要に応じて、図面データをさらに分析・可視化する機能を実装する。
（例：ユーザーが直接操作できるインタラクティブなインターフェースを開発）

### １１．ドキュメントとユーザーサポート
アプリケーションの使い方を説明するドキュメントを提供し、ユーザーが新しいシステムにスムーズに移行できるようにサポートする。
プロキシ環境でVSCodeでMSアカウントにサインインできない場合の処置

# TL;DR

`microsoft.useMsal`を有効にしてください。

# 対象環境

- プロキシを通してインターネットへ接続している
- VSCodeで設定同期や一部拡張機能利用のためMicrosoftアカウントへサインインしようとしてもできない。拡張機能のダウンロードはできるのになんで？
- 失敗した後「出力」→「Microsoft 認証」を確認すると以下のようなログが残っている

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/130200/445b6717-11b9-28af-84ef-7d11933325a0.png)

# どうやって？

お詳しい諸氏はお好みの方法でどうぞ。そうではない方は以下のように：

1. 左下の歯車ボタン
2. `設定`
3. `ユーザー`タブ
4. 検索ボックスに`usemsal`と入力
5. `Microsoft: Use Msal`が出る
6. `Microsoft 認証ライブラリ (MSAL) を使用して、Microsoft アカウントでサインインします。`にチェックマークを付ける（画像）
7. サインインをやり直す

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/130200/618e8911-8ebc-3a87-4e02-acc1cabaa345.png)

# なんで？

参考資料を見る限り通常のネットワークスタックを使って認証する場合、プロキシ対応が追い付いてない箇所っぽいです。  
MSALによる認証を用いた場合はMSALが別のネットワークスタックを使用することになり、そちらは対応できているので問題を回避できる模様。

# 参考資料

[Cannot sign in with microsoft for tunnel](https://github.com/microsoft/vscode/issues/229732#issuecomment-2374721359)
Azure VM Hibernationメモ

Azureの休止状態（Hibernation）機能は、仮想マシン（VM）のメモリ、ディスク、状態を保持したまま、一時的に停止し、後で再開できる機能です。これにより、アプリケーションやプロセスを再設定することなく、VMを停止してコストを節約することが可能です。

主なポイントは以下の通りです：

1. **VMの状態を保持**：仮想マシンを休止させると、メモリにあるデータや実行中のプロセス、開いているファイルが保存されます。再開時には、休止前の状態がそのまま復元されます。

2. **コスト効率の向上**：休止中は計算リソースに対しての料金は発生しませんが、保存されたメモリやディスクのストレージにはコストがかかります。

3. **対応しているVMサイズ**：すべてのAzure VMサイズが休止状態に対応しているわけではありません。主にDsv3シリーズやEsv3シリーズなど、一部のVMサイズで利用可能です。

4. **休止状態の利用シナリオ**：
   - **開発・テスト環境**：仮想マシンの起動と停止が頻繁に行われる開発やテスト環境に最適です。常に稼働させる必要がない場合に便利です。
   - **断続的なワークロード**：定常的な稼働が不要なバッチ処理やデータ分析ジョブなどに有用です。

5. **制限事項**：
   - Windowsや一部のLinuxディストリビューションなど、特定のオペレーティングシステムのみが休止状態をサポートしています。
   - VMの状態を保存・復元するため、停止・再起動に比べて時間がかかる場合があります。

休止状態を有効にしたい場合は、まず使用しているVMサイズとオペレーティングシステムが対応しているか確認し、必要な設定を行う必要があります。