OmniAICreator/Qiita-1.07M huggingface dataset:
【Revit】「License Managerが機能してないか、正しくインストールされていません。」というエラーが出て、Revitが起動しないときの対処法

# 概要
Revitを起動すると、「License Managerが機能してないか、正しくインストールされていません。」というエラーが出てRevitが起動しない現象がありましたので、解消法を備忘録として残します。

# 現象
私はRevit2024で発生しました。発生した前日までは何事もなく起動していました。
Revit2019や2021もインストール済みでしたが、2024で発生後もこの2019と2021では発生せず、正常にログインできたままRevitが起動していたので、Revit2024のみ発生していたような形でした。

# 解消方法
[参考URL](#参考url)の中の記載にもありますが、「Autodesk Identity Manager」というアプリを再インストールしたら直りました。[こちらのURL](https://www.autodesk.com/jp/support/technical/article/caas/sfdcarticles/sfdcarticles/JPN/The-License-Manager-is-not-functioning-or-is-improperly-installed-Revit-will-shut-down-now-when-launching-Revit-2022-on-Windows-11.html?msockid=00b0950e0c1c6afb383580200dab6b62)からインストーラーをダウンロードできます。
記事を見るとRevit2020-2023は「Autodesk Single Sign On Component (AdSSO)」というものを、Revit2024は「Autodesk Identity Manager」を再インストールしたら良さそうでした。今回はRevit2024なので「Autodesk Identity Manager」のインストーラーをダウンロードしました。
ただそのままインストーラーを実行すると、「既にインストールされています」というメッセージが出てインストールできないため、一度、Windowsの設定等から「Autodesk Identity Manager」という名前のアプリをアンインストールしてから再インストールする必要があります。
ちなみにアンインストールをするとPCの再起動が必要という旨のメッセージが出ましたが、私はここでは再起動せず、そのまま「Autodesk Identity Manager」を再インストールしてからRevit2024を起動すると解消されていました。

# 参考URL
- [「License Manager が機能していないか、正しくインストールされていません。Windows 11 で Revit を起動すると、Revit今すぐシャットダウンします](https://www.autodesk.com/jp/support/technical/article/caas/sfdcarticles/sfdcarticles/JPN/The-License-Manager-is-not-functioning-or-is-improperly-installed-Revit-will-shut-down-now-when-launching-Revit-2022-on-Windows-11.html?msockid=00b0950e0c1c6afb383580200dab6b62)
- [「License Managerが機能してないか、正しくインストールされていません。」エラーでRevit2021が起動できない](https://forums.autodesk.com/t5/sabusukuripushon-insutoreshon-raisensu-guan-lian/license-managerga-ji-nengshitenaika-zhengshikuinsutorusareteimasen-eraderevit2021ga-qi-dongdekinai/td-p/10180710)
- [「ライセンス管理が機能していないか、正しくインストールされていません。1: コマンド実行エラー」が、2024 バージョン以降を起動すると発生する](https://www.autodesk.com/jp/support/technical/article/caas/sfdcarticles/sfdcarticles/JPN/The-License-manager-is-not-functioning-or-is-improperly-installed-AutoCAD-will-shut-down-now-ADLSDK-STATUS-AUTH-PENDING-1-command-execution-error-when-launching-AutoCAD-2024.html?msockid=00b0950e0c1c6afb383580200dab6b62)
- [ライセンス管理が機能していないか正しくインストールされていないと表示される](https://forums.autodesk.com/t5/autocad-ri-ben-yu/raisensu-guan-liga-ji-nengshiteinaika-zhengshikuinsutorusareteinaito-biao-shisareru/td-p/11608074)
ABAPディスパッチャ: SAPシステムの敏腕受付嬢👩‍💼✨

SAPシステムでは、たくさんの人が同時にアクセスし、様々な処理💻を行っていますよね。
例えば、経理の山田さん💰が請求書を作成したり🧾、営業の田中さん💼が受注処理をしたり🛒、人事の佐藤さん👩‍💼が給与計算をしたり…

皆様がSAPを快適に利用できるよう、それぞれの処理をスムーズに進めるために、 **ABAPディスパッチャ** という 😎 "敏腕受付嬢" 👩‍💼 が活躍しているのです！


### 👩‍💼 ABAPディスパッチャはどのような仕事をしているのでしょうか？🤔

ABAPディスパッチャは、 **SAPアプリケーションサーバー** 🏢 という大きなオフィスビルの中で、ユーザーからのリクエストを受け付け、適切な **ワークプロセス** に割り当てる役割を担っています。


🏢 **SAPアプリケーションサーバー** を "オフィスビル" 🏢 と考えてみましょう。
👨‍💻 **ユーザー** は "オフィスビルにやってくるお客様" 🚶‍♀️🚶
👨‍🍳 **ワークプロセス** は、お客様のリクエストを処理する "各部署" 🏢 (経理部💰、営業部💼、人事部👩‍💼など) のようなものです。

ABAPディスパッチャは、受付嬢👩‍💼として、オフィスビルにやってくるお客様🚶‍♀️🚶(リクエスト)を、適切な部署🏢(ワークプロセス)に案内する 💁‍♀️ 役割を担っているのです。

例えば、経理の山田さん💰が「請求書を作成したいのですが！🧾」とリクエストした場合、ABAPディスパッチャは、山田さんを "経理部" 🏢💰 に案内します。
営業の田中さん💼が「受注処理をしたいのですが！🛒」とリクエストした場合は、 "営業部" 🏢💼 に案内する、といった具合です。


### 🤔 ワークプロセスとはどのようなものなのでしょうか？ 🏢

ワークプロセスは、各部署🏢 のようなもので、それぞれ専門の処理を行うための作業スペース 🔨です。
経理部🏢💰では請求書作成処理🧾、営業部🏢💼では受注処理🛒、人事部🏢👩‍💼では給与計算💰など、それぞれの部署で専門の担当者が💻作業を行い、お客様のリクエストを処理します。


### 👩‍💼 ABAPディスパッチャの素晴らしいところ✨

ABAPディスパッチャのおかげで、SAPシステムは、快適に、そして安定して利用できるのです。

* **待ち時間なし⏰**: リクエストを適切なワークプロセスに割り当てることで、処理待ちの行列がなくなるため、皆様がストレスなく作業できます。
* **トラブルなし💪**: ワークプロセスへの負荷を分散することで、システムダウンを防いでくれるため、安心してSAPをご利用いただけます。
* **コスト削減💰**: リソースを効率的に使うことで、会社の経費削減にも貢献しています。


### 📝まとめ

ABAPディスパッチャは、SAPシステムの心臓部🫀です。ユーザーからのリクエストを適切に処理し、システム全体を効率的に稼働させることで、SAPシステムの安定稼働とパフォーマンス向上に貢献しています。

ABAPディスパッチャは、SAP Basis ⚙️ の中でも特に重要な要素の一つです。SAPシステム管理者👨‍🔧にとっては、システムを安定稼働させるために、ABAPディスパッチャを深く理解しておくことが重要です。
🤝SAPのデータ連携のヒーロー🦸！RFCゲートウェイをわかりやすく解説🎉


企業では、様々なシステム💻が稼働していますよね。🛒販売管理、📦在庫管理、💰会計システム…どれも重要な役割を担っていますが、これらのシステムが連携していないと、データの入力💻が重複してしまったり、情報共有が遅れてしまったり💦、非効率が生じてしまう場合がありますよね😱。

そこで活躍するのが 🥁 **RFCゲートウェイ** ✨です！ RFCゲートウェイは、SAPシステムと外部システム🤝の間で、データを安全に交換🛡️するための通信インターフェースです😲。

### 🔗RFCゲートウェイってどんな仕組み？🤔

例えば、あなたの会社がSAPを使っていて、新たにECサイト🛍️を構築したとします。ECサイトで受けた注文データ📝をSAPの販売管理システムに自動で取り込みたい！という場合に、RFCゲートウェイが橋渡し役🌉をしてくれるのです。

RFCゲートウェイは、**「Remote Function Call (リモートファンクションコール)」** 📞という技術を使って、SAPシステムからECサイトのシステムの機能を呼び出したり🔄、逆にECサイトからSAPの機能を呼び出したりすることができるのです💪。

### ⚙️RFCゲートウェイの機能🔧

RFCゲートウェイは、単にデータを送受信するだけでなく、以下のような機能も提供しています。

* **接続管理**:  ECサイトとSAPシステム間の接続🔌を確立・維持・切断します。まるで、電話の回線📞をつなぐオペレーターさん👩‍💼のように、接続を管理してくれるのです。
* **セキュリティ**:  データの盗聴👂や改ざん🙅を防ぐために、認証🔑や暗号化🔐などのセキュリティ対策を行います。セキュリティ面も安心ですね！
* **データ変換**:  ECサイトとSAPシステムでは、データ形式が異なる場合があります。RFCゲートウェイは、それぞれのシステムが理解できる形式にデータを変換します。まるで通訳者さん👨‍🏫のように、データの変換をしてくれるのです。
* **負荷分散**:  複数のSAPシステムに負荷を分散させることで、システム全体の処理能力🧠を向上させます。
* **エラー処理**:  通信エラー❌が発生した場合でも、適切な処理を行い、データの整合性を保ちます。


### 👍RFCゲートウェイのメリット✨

RFCゲートウェイを使うことで、企業は以下の様なメリットを得られます。

* **業務効率化**: システム間連携🤝によって、データの重複入力がなくなり、業務効率が向上します。
* **リアルタイムなデータ連携**:  ECサイトで注文が入ったら🛒、すぐにSAPシステムに反映されるため、迅速な対応が可能になります。
* **データの一元管理**:  データをまとめて管理📄することで、情報共有がスムーズになり、経営判断の精度向上に役立ちます。


### 🧱RFCゲートウェイの構成

RFCゲートウェイは、主に以下の要素で構成されています。

* **RFCライブラリ**: RFC通信を行うためのプログラム集📖です。
* **RFCデスティネーション**: 接続先のシステム情報（IPアドレス、ポート番号など）が書いてある住所録📇のようなものです。
* **ゲートウェイプログラム**:  RFC通信を処理するプログラム💻です。


### 🔧RFCゲートウェイの設定

RFCゲートウェイの設定は、SAPシステムのトランザクションコード `SMGW` で行います。


### 📝まとめ

RFCゲートウェイは、SAPシステムと外部システムを連携させるための重要なインターフェースです🤝。システム間連携によって、業務効率化🚀、リアルタイムなデータ連携⚡、データの一元管理📄など、多くのメリットをもたらします。

セキュリティ対策🛡️をしっかり行うことで、安全なデータ交換を実現し、企業のビジネスを支える重要な役割を担っています💪。
kintone開発をAIがアシスト!?今話題のREQXIGN AI for kintoneを触ってみた（議事録編）

# はじめに

こんにちは！サッカー選手から転身して現在は、kintoneの導入支援に取り組んでいる よしき です！

最近、AI技術の進化に伴い業務効率化のためのツールが続々と登場していますね。その中でも、kintone開発を支援する「REQXIGN AI for kintone」のベータ版が2024年11月5日にリリースされました。 
僕が所属しているノベルワークスが開発しているREQXIGNを早速試してみましたので、今回はその使用感や生成される議事録についてご紹介していきたいと思います！


# REQXIGN AI for kintoneとは？

REQXIGN AI for kintoneは、kintone開発に特化したAIサービスで、要件定義、設計、kintoneアプリの作成、カスタマイズ実装までをアシストしてくれるサービス。

https://www.reqxign.net/

### 主な機能

- **議事録作成**：打ち合わせの文字起こしデータから自動で要点を整理し構造化された議事録を作成　**👈今回試す機能**
- **要件定義支援**：AIがユーザーの要件を分析し適切なシステム要件を提案
- **設計支援**：システムの設計プロセスをAIがサポートし効率的な設計を実現
- **kintoneアプリ作成支援**：AIのサポートによりkintoneアプリの作成が容易になる
- **カスタマイズ開発支援**：AIがカスタマイズ開発を支援し開発効率を向上させる


# こんな人に読んでほしい！

- 会議や打ち合わせの議事録作成に時間がかかっている方
- kintoneを活用して業務効率化を図りたい方
- AI技術を業務に取り入れてみたい方
- テレワークやリモート会議が増え、議事録やタスクの管理に課題を感じている方

# 実際に打ち合わせ文字起こし文章から議事録を出力してみた

## 1. 文字起こしの準備

REQXIGN AI for kintoneを利用するには、事前に文字起こしのテキストデータを用意しておきます。会議を録音し、その音声ファイルを文字起こしサービスでテキストにします。

## 2. 自動要約機能で議事録を作成


文字起こしされたデータをREQXIGNにアップロードします。すると、要点を整理した議事録が自動で生成されます。具体的には、以下のような形で出力されます。

### 例）自動生成された議事録
![スクリーンショット 2025-01-30 9.08.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1256101/97973b2f-a25f-c3d4-1753-fc5053131054.png)


## 感想
すげぇ〜。正直、期待以上のクオリティで驚きました！
「システム開発に特化した議事録」という印象が強く、ただの要約ではなく、開発に必要な情報がしっかり整理されている点が素晴らしいです！

普通の議事録ならただ要約してくれればいい。しかし、この議事録は、システム開発ならではの観点が入っているように感じます。

### 特に良かったポイント

### 1.求められている機能がなにか
例えば、開発初期のミーティングで「こんな機能がほしい！」と盛り上がったものの、結局何が本当に必要なのか議論が散らかることってありますよね。
REQXIGNが自動で議事録を整理してくれることで、発言の中から本当に求められている機能要件を抜き出してくれる。開発の方向性がぶれにくくなると感じました！

### 2.決定事項の根拠
「この機能はリリース時には必要ない」「今回はシンプルな実装にして、後から拡張する」といった判断を会議で下すことはよくありますよね。でも、しばらく経つと「なんでこう決まったんだっけ？」と疑問に思うことも。

REQXIGNを通して議事録を作成してもらうと決定に至った発言を抽出して記録してくれるので「なぜこうなった？」の答えをすぐに確認できる。特に、関係者が多いプロジェクトでは、意思決定の背景が共有されているかどうかで開発のスムーズさが変わってきそうですね！


### 3.次回までの宿題はなにか
「前回までの宿題ってなんだっけ？」と打ち合わせ直前に大慌てすること、SEならよくありますよね。
このツールを使うと、誰がいつまでに何をするべきかが明確に整理されるので、「誰が何を担当していたか分からなくなった…」ということがなくなりそう！

# まとめ

REQXIGN AI for kintoneの議事録作成機能を試してみて、開発の進行をだいぶ効率化できそうだなぁと感じました。

特に、会議の内容をただ記録するだけでなく、システム開発に必要な要件整理やタスクの明確化ができる点が非常に便利でした。

SEとしては、次回のミーティングまでにやるべきことが整理され、決定事項の根拠までしっかり残るのは本当に助かります。

「議事録を取るのが面倒…」「前回の決定事項を見返したい…」「タスク管理をもっと楽にしたい…」という方には、ぜひ試してみてほしいツールです！

今後は他の機能についても試していきたいと思います。
以上、REQXIGN AI for kintoneを触ってみたレポート議事録編でした！
XMLHttpRequest送信したパラメータを、サーバーサイドのセッションに保存する

# はじめに
新規で担当したシステムに脆弱性が検出されたため、その対応策をまとめました。

## ◆不具合の内容
ユーザー機能を持つシステムにおいて、ユーザーIDのパラメータを変更してアクセスすると、ログイン中のユーザー以外の情報が表示される不具合が発生しました。

## ◆使用言語
JavaScript
PHP

## ◆改善策
ログイン時にユーザーIDのパラメータをセッションに保存し、他のページにアクセスした際にパラメータとの整合性をチェックすることで、意図しない情報が表示されないようにします。

## ◆手順
### 1.ログインボタンの押下時に、JavaScriptでPHPにリクエストを送信
ログインページにユーザーIDを入力するテキストボックスが用意されている前提で進めます。

```javascript:login.js
function login() {
    var userId = document.getElementById('userId');
    var data = 'userId=' + encodeURIComponent(userId.value);

    xhr = new XMLHttpRequest();
    xhr.open('POST', login.php , true);
    xhr.setRequestHeader( 'Content-Type', 'application/x-www-form-urlencoded' );
    xhr.send(data);
}
```

### 2.PHPでリクエストパラメータをセッションに保存
```php:login.php
<?php
// セッション開始
session_start();

// userIdがPOSTされていて、まだセッションにloginIdが設定されていない場合
if (!empty($_POST['userId']) && empty($_SESSION['loginId'])) {
    $_SESSION['loginId'] = $_POST['userId'];
    exit;
}
?>
```

### 3.保存したセッションIDとリクエストパラメータを照合
他のページへ遷移するボタンなどを押した際に、JavaScriptからPHPに新しいリクエストパラメータを送信します。
```javascript:userInfo.js
function userInfo() {
    var userId = document.getElementById('userId');
    var data = 'userId=' + encodeURIComponent(userId.value);

    xhr = new XMLHttpRequest();
    xhr.open('POST', login.php , true);
    xhr.onreadystatechange = function() {
        if (xhr.readyState == 4) {
            if (xhr.status == 200) {
                // PHPからのレスポンスを格納する
                var response = xhr.responseText;

                if ("ResultChk\n-3\n" == response) {
                    alert("ユーザー情報が一致しません。");
                    xhr.abort();
                    xhr.onreadystatechange = function() {};
                    xhr = null;

                    // 強制ログアウト処理
                    logout();
                    return;
                } else {
                    // 遷移後のページを表示する処理など
                }
            }
        }
    }
    xhr.setRequestHeader( 'Content-Type', 'application/x-www-form-urlencoded' );
    xhr.send(data);
}
```

### 4.リクエストパラメータとセッションに保存されたパラメータの照合
login.phpにリクエストパラメータとセッションパラメータの照合処理を追加します。
```php:login.php
<?php
// セッション開始
session_start();

// userIdがPOSTされていて、まだセッションにloginIdが設定されていない場合
if (!empty($_POST['userId']) && empty($_SESSION['loginId'])) {
    $_SESSION['loginId'] = $_POST['userId'];
    exit;
} else if (isset($_POST['userId']) && isset($_SESSION['loginId'])) {
    // 他ページ遷移時のパラメータを$editIdに代入
    $userId = $_POST['userId'];
    // ログイン時に保存したパラメータを$loginIdに代入
    $loginId = $_SESSION['loginId'];

    // userIdとセッションのIdが一致しなければエラー文を返却
    if ($userId !== $loginId) {
        echo "ResultChk\n-3\n";
        exit;
    }
}
?>
```
これで、JSからPHPへのパラメータ送信が実装でき、ログインIDとリクエストパラメータが一致しない場合にエラーを返却できるようになります。

## ◆まとめ
今回のシステムはCGI(Perl)による処理が含まれていましたが、CGIに関する知識が浅く、画面描画の仕組みを理解するのに一苦労でした。
もともとCGI経由でXHRを送信するコードはあったのですが、CGIを通してPHPのセッションに値を持たせる方法が見つからず、最終的にJavaScriptから直接PHPにリクエストを送信する処理を追加することにしました。

クライアントとサーバーの関係性やセッションについての理解が深まり、プログラミングの楽しさをより実感できました。
XMLHttpRequestについての知識は別の記事でまとめられたらいいなと思っています。
【備忘録】ChromeでUncaught (in promise) DOMException: The play() request was interrupted by a call to pause()を解決する方法

### 概要
Chromeでvideoタグを使用してネットワークカメラが保存した動画を再生させていたが、
chromeのアップデートが関係しているのか、動画側に問題があるのか、JSで操作できない動画が発生した。

### 原因
動画が再生されている状態でJSのPlay()を実行したことだと思われる。
問題がある動画と問題のない動画の違いをFFmpegで解析したところ、
メタデータのエンコーダーがGStreamer matroskamux version 「1.16.1」または「1.14.0」のものに原因がありそう。

### 備考
Chromeのバージョン：132.0.6834.111
動画のメタデータ(エンコーダー)：GStreamer matroskamux version 「1.16.1」または「1.14.0」
エラー文：Uncaught (in promise) DOMException: The play() request was interrupted by a call to pause()

### 修正前(再生できない動画があった)
　処理の流れ：video.currentTime = <任意の数値>　→　video.play();
```
【HTMLファイル】
<Video id="video" src="<動画のパス>"></video>

【JSファイル】
// Videoタグの情報を取得する
video = document.getElementById('video'); 

// 動画が再生可能になった時に実行する処理を指定する
video.addEventListener('canplaythrough', function () { event_canplaythrough() }, false);

// 動画を任意の箇所から再生する処理
function event_canplaythrough() {
  video.currentTime = <任意の数値> // 再生位置を指定する
  video.play();                   // 再生する
}
```


### 修正後(全ての動画を再生できるようになった)
処理の流れを変更した：video.play();　→　video.currentTime = <任意の数値>
```
【HTMLファイル】
<Video id="video" src="<動画のパス>"></video>

【JSファイル】
// Videoタグの情報を取得する
video = document.getElementById('video'); 

// 動画が再生可能になった時に実行する処理を指定する
video.addEventListener('canplaythrough', function () { event_canplaythrough() }, false);

// 動画を任意の箇所から再生する処理
function event_canplaythrough() {
    video.play();                   // 再生する
    video.currentTime = <任意の数値> // 再生位置を指定する
}
```
pgAdmin4のオートコンプリート機能を使う。

カラム名やテーブル名の候補を表示してくれる機能。

クエリエディタ上で`Ctrl + Space`キーを入力する。
テーブル名の候補を出したい場合は、From句の後にスキーマ名.を入力し`Ctrl + Space`キーを入力する。
forfilesを使用した、数字名のフォルダ検索

forfilesコマンドを使用して、あるフォルダ内にある数字名のフォルダのみをzip圧縮したいと考えております。

ひとまず以下コマンドで検索してみたのですが、うまく意図した検索結果が得られません。
数字名のフォルダの指定の個所が誤っていると思われるのですが、数字名フォルダを検索する方法をご教示いただきたく、よろしくお願いします。

階層（TESTFOLDER下は全てフォルダです）
D:\TESTFOLDER
  |_20250128
  |_20250129
  |_20250130
  |_MMM
  |_YYY

実行したコマンド①

forfiles /P "D:\TESTFOLDER" /M "[0-9]+" /C "cmd /c if @isdir==TRUE echo @path"
結果
エラー: 種類が "[0-9]+" のファイルが見つかりません。

実行したコマンド②
forfiles /P "D:\TESTFOLDER" /M "*" /C "cmd /c if @isdir==TRUE if @fname==[0-9]+ echo @path"
結果
検索しているようだが、何も表示されずにコマンド終了（@fnameでも@fileでも結果は同様）

実行したコマンド③
forfiles /P "D:\TESTFOLDER" /M "*" /C "cmd /c if @isdir==TRUE echo @path"
結果
TESTFOLDER下のフォルダがすべて表示される
  |_20250128
  |_20250129
  |_20250130
  |_MMM
  |_YYY

い
AWS EC2の可用性を向上！CloudWatch × Auto Recoveryの実践テクニック


## 学べること
:::note info
CloudWatchでEC2の自動復旧（Auto Recovery）を設定する方法
CPU負荷をかけてEC2の自動復旧を検証する手順
Auto Recoveryと再起動アクションの違いと使い分け
:::

## 記事に関連するサービス
### CloudWatch

※ 直接 EC2 の可用性を担保しているわけではないが、関連するので記載

- AWS 各サービスのメトリクスを収集し監視する。
    - 例 :  EC2インスタンスのCPU使用率が90%を超えたら異常判定する

### EC2AutoRecovery

- CloudWatchでEC2の状態が異常であればインスタンスの復旧が可能
    - 他にも 「停止,削除,再起動」ができる
- ハードウェア障害やネットワーク障害に強い
- 再起動では解決しない場合でも、自動復旧で別ホストに移行できる
- 手動介入なしで高可用性を確保できる

### AutoScalling

- 負荷状況に応じて 適切に EC2インスタンスの数を調整(スケール)する
- インスタンス数の設定は 3種類
    
    インスタンス数の調整は 最小と最大の間で行われる。
    
    - Minimum size(最小数)
    - Desired capasity (希望するキャパシティ)
    - Maximum size(最大数)

## EC2AutoRecoveryの自動再起動検証

### EC2の作成とSSH接続

- EC2 インスタンスを作成
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2737245/2abc8947-9a2d-b8e2-fae5-8755f4a775b4.png)

    
- 鍵ファイルに 実行権限を与え `ssh -i 鍵ファイル ec2-user@publicip` でsshする
- stressコマンドを yum install する
    
    `sudo yum install -y stress-ng`
    

### CloudWatchアラームの設定手順

- アラートを設定するEC2を選択 > 画面下部 の 「モニタリング」を選択
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2737245/3cdc5a76-dd35-a282-e7b0-38f6c69688fd.png)

    
- CPU使用率 (%) を 選択し、「メトリクスで表示」をクリック
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2737245/8d5d5063-343e-04d5-f937-6a1430c50744.png)

    
- 遷移先で 「🔔」をクリック
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2737245/b89b7c6e-03d0-43b5-622c-ce474e3e4b48.png)

    
- 統計を「最大」, 期間を「1分」, 条件を以下のように設定
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2737245/80bb8b7c-5f4e-a50d-82cf-43f9d92a6e82.png)

    
- 通知は「削除」で設定を削除し、「EC2アクション」よりアラーム状態での動作設定を行う
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2737245/d0742573-385e-5c0b-a0e3-2a1b37487b7d.png)

    

- アラート名を好きに設定してアラートを作成する

### CPU負荷テストの実施と自動再起動結果確認

- sshでインスタンスへ接続
- 以下のコマンドで cpu使用率 70%の負荷をかける
    
    `stress-ng --cpu 1 --cpu-load 70`
    
     (t2.microはvcpu 1, 7割負荷をかける)
    
- 負荷がかかっていることをアラートのグラフより確認する
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2737245/77bc276e-634b-0d69-ce10-a60e117badaf.png)

    

- 自動で再起動される
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2737245/eefd3f92-3ec7-9638-d91f-2d82f610bb12.png)
    stressをかけていた ec2が再起動されてsshが追い出された
    アラート状態も解放された🎉
    

## おまけ 再起動アクション vs. 復旧アクション

|  | **復旧アクション** | **再起動アクション** |
| --- | --- | --- |
| **実行される動作** | インスタンスを新しいホストに移動 | OSレベルで再起動 |
| **影響** | ホスト障害に強い、インスタンスストアは消える | ホストは変わらない、問題が解決しない可能性あり |
| **使う場面** | ハードウェア障害、ネットワーク障害 | ソフトウェアの不具合、メモリリーク |
| **パブリックIP** | 変更なし（EIPがあれば） | 変更される可能性あり |
| **EBSボリューム** | 維持される | 維持される |
| **インスタンスストア** | **失われる** | 維持される |

### 結局どっちを使う?

- NW障害 や インスタンスホスト障害など HW環境を変更して解決するようなアラート
    - 復旧アクション。
        - 永続化していないデータは引き継げないのでストレージの永続化が必須。
- ソフトウェア不具合 や リソース負荷 の OSレベルの再起動で解決する可能性のあるアラート
    - 再起動アクション

### 迷った時にこう考える

👉「基本的にハードウェアやネットワークの問題なら復旧、アプリやOSの問題なら再起動！」

👉「データが消えるリスクがあるなら、EBSやS3にちゃんと保存できる設計にしておこう！」
OCI Cloud Free Tier をもぎ取れ その22

# 概要
OCI Cloud Free Tierを取得してみた。
次のメールが来て、いきなり、終了した。
ログインすらできない。

# 終了メール


```
Your Oracle Cloud Free Trial has expired

DEAR CUSTOMER, 	
Your Oracle Cloud Free Trial promotion has ended on Wednesday, January 29, 2025 9:02 p.m. Coordinated Universal Time (UTC).	 

```

以上。
【備忘録】AXIS Network Cameraのレスポンスヘッダーから「X-Frame-Options：SAMEORIGIN」を削除する方法

### 概要
ブラウザでiframeタグを使用してネットワークカメラのリアルタイム映像を映していたが、
カメラ側のセキュリティレベルが高くなったことが原因で表示されない現象が発生した。

### 原因
HTTPレスポンスヘッダーに「X-Frame-Options：SAMEORIGIN」が追加されていた。

### 備考
ネットワークカメラ：「AXIS M1065-L Network Camera」
カメラフォームウェアバージョン：「9.80.2.4」

### 解決策
PostmanでAPIを利用して「X-Frame-Options：SAMEORIGIN」を削除した。
API実行後にカメラ再起動は必要がなかった。
```
【POST】
http://<カメラIPを入力>/axis-cgi/customhttpheader.cgi

【AuthType】
ダイジェスト認証（※ベーシック認証はNG）
・ユーザー：<ユーザーを入力>
・パスワード：<パスワードを入力>

【Body】
{
  "apiVersion": "1.0",
  "context": "OptionalContext",
  "method": "remove",
  "params": {
    "X-Frame-Options": "SAMEORIGIN"
  }
}
```

### 公式URL
https://developer.axis.com/vapix/network-video/custom-http-header-api#remove-a-custom-header
グリコのゲーム理論

# はじめに

20 年以上前、 fj.sci.math というニュースグループに、グリコゲームをネタにしたゲーム理論の記事を投稿したことがありました。面白い題材なので Qiita の記事にまとめなおしたいと思います。

https://groups.google.com/g/fj.sci.math/c/2vhGKYILCFU/m/iWwqDJVD-CwJ

「グリコゲーム」というのは、ジャンケンをして勝ったら勝った手に応じた歩数を進んで、先にゴールできた方が勝ち、というあの遊びです。


# グリコゲームのルール

2 人でジャンケンをして勝ったら、勝った手の種類で以下の数だけ進むことができます。

グー　：グ,リ,コ（3 歩）
チョキ：チョ,コ,レ,イ,ト（5 歩）
パー　：パ,イ,ナ,ッ,プ,ル（6 歩）

ジャンケンを繰り返して、先にゴールした方が勝ちです。

チョキについては、「チ,ヨ,コ,レ,イ,ト」で 6 歩とするルールもありますが、ここでは 5 歩のルールを採用します。

# ゲーム理論で考える

2 人でグリコゲームを戦うときに最適な手の出し方について、
ゲーム理論の「 2 プレイヤーゼロ和ゲーム」として考えます。

a 君と b 君とが十分長い距離をグリコゲームでじゃんけんをしながら進みます。
1 回のじゃんけんで勝ったときの歩数を利得と考えると a 君の利得表は以下のようになります。

| a 君 \ b君 | グー | チョキ | パー | 
| ---------- | :--- | ------ | ---- | 
| グー       | 0    | 3      | -6   | 
| チョキ     | -3   | 0      | 5    | 
| パー       | 6    | -5     | 0    |

a 君の混合戦略のグー/チョキ/パーの確率を $ G, C, P $ 、
b 君の混合戦略のグー/チョキ/パーの確率を $ g, c, p $ とすれば、

このゼロ和ゲームの a君の期待利得は以下の式になります。

```math
G(3c-6p)+C(-3g+5p)+P(6g-5c) = 0
```

これに $ P=1-(G+C), p=1-(g+c) $ を代入して整理すると、

```math
(14G-5)c+(-14C+6)g-6G+5C = 0
```

これが、相手のあらゆる混合戦略に対して成り立つから、

```math
\begin{align}
14G-5=0 \\
-14C+6=0 \\
-6G+5C=0 \\
\end{align}
```

これらを解いて、

```math
\begin{align}
G = \frac{5}{14} \\
C = \frac{6}{14} \\
P = \frac{3}{14} \\
\end{align}
```

というわけで、グー : チョキ : パーを $ 5:6:3 $ の割合で出すのが
最も負けない混合戦略となります。

# ３すくみ構造における一般化

３すくみ構造の場合、それぞれの戦略で勝った場合の利得を
$ x,y,z $ とすれば、最適な混合戦略は $ y:z:x $ の比になるようです。

ちょっと計算。
プレイヤー 1 の混合戦略の確率を $ A, B, C $ 、
プレイヤー 2 の混合戦略の確率を $ a, b, c $ として
それぞれの戦略で勝った場合のプレイヤー 1 の利得を
$ x, y, z $ とすれば

【利得表】

| 1 ＼ 2 | $ a $ | $ b $ | $ c $ |
| ---------- | :--- | ------ | ---- | 
| $ A $ | $ 0 $ | $ x $ | $ -z $ |
| $ B $ | $ -x $ | $ 0 $ | $ y $ |
| $ C $ | $ z $ | $ -y $ | $ 0 $ |

```math
A(bx-cz)+B(-ax+cy)+C(az-by) = 0
```

$ C=1-(A+B), c=1-(a+b) $ を代入して整理して、

```math
(A(x+y+z)-y)b - (B(x+y+z)-z)a - Az+By = 0
```
これが全ての $ a, b $ について成り立つから、

```math
\begin{align}
A=\frac{y}{x+y+z} \\
B=\frac{z}{x+y+z} \\
C=\frac{x}{x+y+z} \\
\end{align}
```

というわけで、それぞれ $ x, y, z $ の利得が得られるジャンケンで
最適な混合戦略の比率は $ y : z : x $ となります。
ノーコードツールとしてのChatGPT4o　～spring bootで簡単なアプリに機能追加してもらった　その3～

2025/01/27～01/30の作業メモ

# ChatGPTで簡単なクイズアプリに機能追加してみた。

## 動作イメージ
![20250130_quizapp_02.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3562068/c0e1505f-4697-24dc-be94-98bbcaf1fa32.gif)

## 既知の問題
- サーバの時計と540分ずれ。UTC考慮必要だった
→2/1修正済。UTCじゃなくてGMTだった。

## 目的
- 自習用のクイズアプリで正解の選択肢のハイライトなど、使い勝手を良くする改修を行いたい。
- 引き続きChatGPTを活用して何か動くものを作りたい。

## 状況
- 前回で自習用のクイズアプリとしては基本的に困らないくらいにはなったが、色々機能改善したい。

https://qiita.com/kubo4ka/items/77cce04d3fc47ecea849

↑

https://qiita.com/kubo4ka/items/769923b14023df18489f

↑

https://qiita.com/kubo4ka/items/39bf9a35ab16a69bb229

## 制約
- コードは自分では書かない。提案されたものでDB含めて構築していく。
- 日々新しいチャットアプリやプラグインが出て開発環境の最適化は色々できそうとは思うけど、先ずはこのアプリは現状のまま、素のChatGPTにソースを提案してもらうというシンプルな流れで進めてみる。
- 今回の対応は7点。
  - １．正解の選択肢ハイライト
  - ２．クイズテーマの表示
  - ３．採点に進むボタン
  - ４．設問IDの表示
  - ５．問題数設定画面の入力欄調整
  - ６．ショートカット設定
  - ７．タイマー表示

- ソース

https://github.com/kubo-4ka/quizapp/tree/master

- デモ

https://quizapp-xzmf.onrender.com

- 会話履歴

https://chatgpt.com/share/679dd438-8a30-8008-8cc3-b7751bb860ae

## 今回のスムーズで感動した点
- 相変わらず、提案を速攻で出してもらえるので対応速度が一人で調べて進める場合と段違いに早いと思う。
- スタイル関係は「ダークテーマ」とか「良い感じに」とか、ふわっとした感じの依頼でも対応してくれるので助かるし凄いと思う。
- 一度の提案で完璧となるとは思わない方が良いが、発生したエラーや期待との乖離を伝えることで進めていける。

何か1/29辺りから、回答がやたらカラフルで絵文字使ったりと陽気な感じなった気がするが気のせい？

以上
【AWS】AWS-SCS資格試験

## 保有資格
・Java-Silver
・LPIC Level2
・AWS-SAA,SOA,DVA

## 使用した書籍やサイト
・Web問題集：CloudTech（永久会員）

https://kws-cloud-tech.com/

・書籍：AWS認定 セキュリティ-専門知識　改訂2版　要点整理から攻略する

https://www.amazon.co.jp/AWS%E8%AA%8D%E5%AE%9A-%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3-%E5%B0%82%E9%96%80%E7%9F%A5%E8%AD%98-%E6%94%B9%E8%A8%822%E7%89%88-%E8%A6%81%E7%82%B9%E6%95%B4%E7%90%86%E3%81%8B%E3%82%89%E6%94%BB%E7%95%A5%E3%81%99%E3%82%8B-%E4%B8%8A%E9%87%8E-%E5%8F%B2%E7%91%9B/dp/4839985103/ref=pd_lpo_d_sccl_1/356-0302245-2289874?pd_rd_w=qOdpE&content-id=amzn1.sym.855d8f70-df76-4181-80b0-56e48ae3bb9b&pf_rd_p=855d8f70-df76-4181-80b0-56e48ae3bb9b&pf_rd_r=2F9JQVZ7Y1PYSV8W9YVP&pd_rd_wg=c0yow&pd_rd_r=e89f14ec-9cb7-4f38-a6ac-46733a7e0f48&pd_rd_i=4839985103&psc=1

・AWS BlackBelt動画視聴（特にKMS、IAM、SSO）

https://www.youtube.com/@JPAmazonWebServices/playlists

・AWS Certified Security - Specialty Official Practice Question Set (SCS-C02 - Japanese)

https://explore.skillbuilder.aws/learn

## 受験までの期間
・約１か月半（１日：約３時間の勉強ペース）

## 試験までの流れ
１．CloudTechのAWS資格演習対策講座のSCSを10問単位で、1~100まで解いてみる。

２．100問解いたら、ブックマーク機能を使用し、間違えた問題を再度解く。

３．１と２の作業を全問題一周するまでやってみる。

４．AWS BlackBelt動画視聴（特にKMS、IAM、SSO）

５．書籍 にて、不明点を調査し、演習問題を解いてみる。

６．CloudTechの演習問題２周目
　（この付近で、10問の回答率が8割超えるようになってくる。）

７．peasonVUEで受験予約

８．AWS Certified Security - Specialty Official Practice Question Set (SCS-C02 - Japanese)を解く。

９．試験

## 受験してみての感想
　今まで受験してきたアソシエイト試験よりも問題文が長い印象を受けました。
 ですが、試験中は構成図を書いてみて、何を問われているのかをある程度、見定めることが出来ました。

問題内容に関しては、
・CloudTechの資格演習問題と似たような問題が数問出題されました。

・S3ボールトロックではなく、S3オブジェクトロックのコンプライアンスモードを解答させる問題が2問ほどありました。

・AWS Macieではなく、別の方法で回答させる問題が2問ほどありました。

・CloudHSMを解答させる問題は、1問も出題されなかったと思います。

・IAMやKMS、外部IdPとの認証方法、フォレンジック対策、アカウント保護、リソースの隔離方法を理解しておく必要があると感じました。

 以上、これから受験される方の参考になれれば幸いです。
［ServiceNow］System Propertiesについて

※この記事はServiceNow初心者が学習用のために記載した記事です。内容について誤っている場合がございます。不足点などございましたらコメントいただけますと幸いです。

# 前提
- ServiceNowのシステムプロパティ
    - ServiceNowプラットフォームの動作や設定をカスタマイズするための設定項目のこと
    - これらのプロパティは、インスタンスの全体的な動作に影響を与えたり、特定の機能やモジュールを調整するために使用される
    - システムプロパティは、「System Properties」テーブルに格納される
    - 管理者が必要に応じて設定を変更することができる

# 「System Properties」テーブルのnameフィールドの命名規則
- ServiceNowのシステムプロパティは、ドット（.）で区切られた階層構造を持ち、各設定のカテゴリや目的が明確になるように設計されている

## 命名規則の基本構造
```
 <プレフィックス>.<カテゴリ>.<サブカテゴリ>.<設定名>
```
- プレフィックス → システム全体・プラグイン・カスタムアプリの識別
- カテゴリ → UI、セキュリティ、ワークフローなどの大分類
- サブカテゴリ → より細かい機能の分類
- 設定名 → 実際に制御する設定の名前

## 命名規則の詳細

### 1. プレフィックス
| プレフィックス | 説明 | 例 |
|--------------|------|----|
| **glide** | ServiceNowのコアプラットフォーム設定 | `glide.ui.polaris.experience` |
| **com.snc** | 標準プラグイン・モジュールの設定 | `com.snc.asset_management.enabled` |
| **sys** | システム管理関連の設定 | `sys_email.reply_separator` |
| **x_*** | スコープアプリ（カスタムアプリ）用 | `x_company.custom_setting` |
| **instance** | インスタンス全体のポリシー設定 | `instance.security.encryption_enabled` |
| **security** | セキュリティ関連の設定 | `security.login.failed_attempts` |
| **workflow** | ワークフローの設定 | `workflow.auto_publish` |
| **report** | レポート機能の設定 | `report.export.csv.limit` |

### 2. カテゴリ（機能ごとの分類）
| カテゴリ | 説明 | 例 |
|--------|------|----|
| **ui** | ユーザーインターフェース関連 | `glide.ui.polaris.experience` |
| **sys** | システム全体の設定 | `glide.sys.session_timeout` |
| **security** | セキュリティ設定 | `glide.security.csrf.enabled` |
| **user** | ユーザー管理関連 | `glide.user.role_assignment` |
| **email** | メール関連 | `sys_email.reply_separator` |
| **workflow** | ワークフローの設定 | `workflow.auto_publish` |
| **report** | レポート関連 | `report.export.csv.limit` |

### 3. サブカテゴリ（細かい分類）
| サブカテゴリ | 説明 | 例 |
|------------|------|----|
| **polaris** | Polaris UI（Next Experience UI）関連 | `glide.ui.polaris.experience` |
| **session** | セッション関連の設定 | `glide.sys.session_timeout` |
| **autocomplete** | オートコンプリート機能 | `glide.ui.autocomplete` |
| **csrf** | CSRF（クロスサイトリクエストフォージェリ）対策 | `glide.security.csrf.enabled` |
| **role_assignment** | ユーザーのロール設定 | `glide.user.role_assignment` |

### 4. 設定名（個別の設定項目）
| 設定名 | 説明 | 例 |
|------|------|----|
| **enabled** | 機能の有効/無効 | `com.snc.asset_management.enabled` |
| **timeout** | タイムアウト時間 | `glide.sys.session_timeout` |
| **experience** | エクスペリエンスの設定 | `glide.ui.polaris.experience` |
| **reply_separator** | メール返信の区切り | `sys_email.reply_separator` |

- ※すべてのプレフィックスにはすべてのカテゴリが存在するわけではない
Databricksノートブックのフォントサイズを変更できるようになりました

こちらのアップデートです。これも地味ですが嬉しい機能。老眼に優しい。

https://docs.databricks.com/ja/release-notes/product/2025/january.html#shortcut-to-adjust-font-size

**フォントを調整するためのショートカット**

> ノートブック、ファイルエディタ、SQLエディタでフォントサイズをクイックに調整するためにショートカットを使えるようになりました。Windows/Linuxでは`Alt +` と `Alt -`、MacOSでは`Opt +`と`Opt -`を使います。
>
> また、エディタのフォントサイズを制御するための開発者設定があります。**設定 > 開発者 > エディタのフォントサイズ**でフォントサイズを選択します。

ブラウザ全体のフォントサイズではなく、エディタのフォントサイズであるところがミソです。

実際に試したら、ショートカットについては以下の注意点がありました。

:::note
**ショートカットを使う際の注意**
- 英数字入力モードである必要があります。
- コマンドモードではなく、編集モードにしておく必要があります。
- Macで日本語キーボードの場合
    - 縮小: Option + `-`
    - 拡大: Option + `^`
:::

このように、ショートカットでエディタ内の文字サイズのみが変更されます。

![font_size.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/15630742-8c81-df4f-dcfe-c5b954c1d3d6.gif)

設定画面はこちらです。

![Screenshot 2025-01-30 at 8.24.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/2a894e0f-969a-1744-ce40-77aa60ca9686.png)

ご活用ください。

### はじめてのDatabricks

[はじめてのDatabricks](https://qiita.com/taka_yayoi/items/8dc72d083edb879a5e5d)

### Databricks無料トライアル

[Databricks無料トライアル](https://databricks.com/jp/try-databricks)
UnrealForCesiumでCartographicPolygonの位置を固定する

以下の記事にあるようにCartographicPolygonを使って指定領域を非表示にしようとした場合に、緯度・経度を変更するとCartographicPolygonは追随して同じ領域を非表示にします（東京タワーを非表示にすると緯度・経度を変えてもCartographicPolygonは自動で移動して東京タワー部分が非表示にされたまま）。
このため、そのままだとUnrealEngineの同じ空間上にCartographicPolygonを表示し続けることができません（リンク先の用にUnrealEngineのレベル上で円を用意してその中に地形表示するような場合、緯度・経度が変わると非表示領域がずれる）。
これを無理やり固定できたのでその方法をメモしておきます。

https://qiita.com/mechamogera/items/21e2b15b028e9e230ae3

https://community.cesium.com/t/masking-out-cesium-map-with-polygon-that-is-not-anchored-to-the-map-globe/30427

# 試した環境

UE5.3.2
CesiumForUnrealプラグイン2.3.0

# やったこと

CesiumCartographicPolygonを継承したクラスのBeginPlayで以下のようにGeoreferenceのOnGeoreferenceUpdatedイベントにバインドして強制的に位置を戻してしまえば良いようです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/16768/0ef52f0c-80df-8b57-237d-55de4900cdbf.png)
個人的な備忘録：テーブルの作成・削除に関するSQL文の基本を記事としてアウトプットしてみた

## はじめに
この記事では、テーブルの基本的な作成方法と削除方法に関するSQL文を実際に検証しながら解説します。

:::note info
**これからSQLの基礎を学びたい方や、簡単に環境を構築して気軽に試したい方に向けた内容です。**
:::

また、本記事は個人的な備忘録としてまとめたものです。***その点をご理解いただければ幸いです。***

## 書こうと思ったきっかけ
私は、テーブル設計やSQLについて、技術書を読んで体系的に学んだわけではありません。

:::note warn
***とにかく手を動かし、試行錯誤しながら基礎を身につけてきました。***
:::

この経験を踏まえ、今回はSQLの基本的な部分を整理し、体系的に振り返りながら記事としてアウトプットしていきます。

## 事前準備
手軽にSQL文を試す方法として、今回は Docker Hub を活用し、SQLコマンドの技術検証を行います。

📌 **詳しい手順については、過去の記事にまとめていますので、こちらを参考にしてください。**

https://qiita.com/free-honda/items/222e17d909b4507b93c2#2-docker-hub%E3%81%AB%E3%83%AD%E3%82%B0%E3%82%A4%E3%83%B3

また、本記事では 事前にデータベースが作成されていることを前提 に進めていきます。***まだデータベースを作成していない方は、以下の記事を参考にしてください。***

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

## 実際にやってみた

### テーブルを作成するSQL文

```sql
CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    email VARCHAR(255) UNIQUE NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
```

**解説**
- `CREATE TABLE users` で、新しいテーブル `users` を作成します。
- `id INT AUTO_INCREMENT PRIMARY KEY` は、主キー（`id`）を `AUTO_INCREMENT`（自動で連番）に設定。
- `name VARCHAR(100) NOT NULL` は、100文字までの文字列を格納する `name` 列（`NULL` 不可）。
- `email VARCHAR(255) UNIQUE NOT NULL` は、メールアドレスを格納する `email` 列（重複不可）。
- `created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP` は、レコード作成時の日時を自動設定。

**実行結果**

```sql
mysql> CREATE TABLE users (
    ->     id INT AUTO_INCREMENT PRIMARY KEY,
    ->     name VARCHAR(100) NOT NULL,
    ->     email VARCHAR(255) UNIQUE NOT NULL,
    ->     created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
    -> );
Query OK, 0 rows affected (0.01 sec)

mysql> 
```

### テーブルを削除するSQL文

```sql
DROP TABLE users;
```

**テーブルが存在する場合のみ削除する方法**

削除前に テーブルが存在するかを確認し、安全に実行 する場合は、以下のSQLを使用できます。

```sql
DROP TABLE IF EXISTS users;
```

**解説**

- `DROP TABLE users` は、テーブル `users` を削除するSQLコマンド。
- **注意:** `DROP TABLE` を実行すると、そのテーブル内のすべてのデータが完全に削除され、元に戻せません。

**実行結果**

```sql
mysql> DROP TABLE IF EXISTS users;
Query OK, 0 rows affected (0.01 sec)

mysql> 
```

**補足**

- テーブルを作成・削除するには、適切な権限（`CREATE TABLE`、`DROP TABLE` 権限）が必要です。
- `DROP TABLE` を実行すると、テーブルのデータだけでなく、テーブル自体も完全に削除されます。


## まとめ
本記事では、データベース内で テーブルを作成・削除する基本的なSQL文 を紹介しました。

:::note warn
***SQLを学ぶ上で、CREATE や DROP の使い方を 正しく理解し、適切に使い分けることが重要 です。***
:::

今後も、基本的なSQLの知識を しっかりと定着 させていきたいと思います。
［ServiceNow］System Properties（sys_properties）について

※この記事はServiceNow初心者が学習用のために記載した記事です。内容について誤っている場合がございます。不足点などございましたらコメントいただけますと幸いです。

# System Propertiesとは？
システム全体の設定や動作を制御するプロパティ（設定値）を管理するテーブル

# 主な特徴
- 設定のカスタマイズ：プラットフォームの動作を変更できる
    - 例：UI、セキュリティ、パフォーマンス設定）
- キーと値のペアで構成される（name = 設定名、value = 設定値）
- 管理画面から変更可能（sys_properties.list で一覧表示）
- スクリプトやAPIで参照・変更できる

# 代表的なプロパティ例
- glide.ui.polaris.experience
    - Next Experience UI（Polaris）を有効化
- glide.sys.session_timeout
    - ユーザーセッションのタイムアウト時間設定
- glide.ui.autocomplete
    - 入力時のオートコンプリート機能のON/OFF

# 主要なフィールド
| フィールド名        | 説明                                      | 型        | データの例           |
|------------------|---------------------------------------|----------|-------------------|
| name           | プロパティの一意な識別名（キー）       | string   | glide.ui.polaris.experience |
| value         | プロパティの設定値（文字列、数値、ブール値など） | string、integer、boolean | true、10、"dark_mode" |
| type          | 値のデータ型（string、integer、boolean など） | string   | string、integer、boolean |
| description   | プロパティの説明（設定の意味や用途）   | string   | "Next Experience UI を有効化" |
| category      | プロパティが属するカテゴリ（UI、セキュリティなど） | string   | "UI"、"セキュリティ" |
| sys_id        | システムで管理される一意のID          | string   | "7b9f2a3c4d5e6f7b9a2e3c4d5e6f7b9a" |
| sys_created_on | 作成日時                               | datetime | "2025-01-30 12:34:56" |
| sys_created_by | 作成者                                | string   | "admin"            |
| sys_updated_on | 最終更新日時                           | datetime | "2025-01-30 14:20:00" |
| sys_updated_by | 最終更新者                            | string   | "admin"            |

# nameフィールド
- System Propertiesテーブル内で各プロパティを一意に識別するキー（設定名）である
- ポイント
    - システム内でユニークな値が設定される
    - 設定の種類を表す名前
        - 例：glide.ui.polaris.experience → Polaris UIの有効化
    - スクリプトや設定画面でプロパティを参照・変更する際に使用
- 命名規則の詳細は別の記事で記載する
将棋の有料記事に埋め込む画像を出力しようとしたら、CC（クリエイティブ・コモンズ）ライセンスについて考えるきっかけになった話

## 「よーし、記事のネタも準備できたし、shogipicで画像作って…ん？」
私がこれまで書いていた将棋の記事の構成は基本的に、局面の画像→手順→局面の画像→手順…のような感じで作っていて、同じような構成で有料の記事を書こうとしていました。

[過去記事の一例](https://note.com/tomot_shogi/n/nbeae83902928)

記事のテーマは決まって、早速[shogipic](https://shogipic.jp/)という将棋の局面図作成のサイトで画像を作ろうとしたときに、画面の左下に何やらライセンスらしきものが書いてあることに気が付きました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3124676/b39b2250-ba8e-758f-fc7e-892aaba80d0d.png)

## 「CC BY-NC 2.1って何だ？」
***Shogi Resource (muchonovski) / CC BY-NC 2.1***と記載されているので、おそらく将棋の駒や盤にこのライセンスが適用されているのだと思います。

私はJavascriptのフレームワークやPythonライブラリは適度に使っていたので、MITやApacheなどのOSSライセンスは馴染みがあるのですが、CCライセンスについてはあまり知りませんでした。
知らないまま商用利用してトラブルが発生するのは嫌なので、一旦CCライセンスの調査から始めることにしました。

### そもそもCC（クリエイティブ・コモンズ）ライセンスとは
>CCライセンスとはインターネット時代のための新しい著作権ルールで、作品を公開する作者が「この条件を守れば私の作品を自由に使って構いません。」という意思表示をするためのツールです。([クリエイティブ・コモンズ・ジャパンHPより](https://creativecommons.jp/licenses/))

今回私が出会ったライセンスは **CC BY-NC 2.1**でしたが、この中の-以下のアルファベット（NC）が守るべき条件を明示している部分です。

以下にCCライセンスの条件を列挙します。

- [CC BY](https://creativecommons.org/licenses/by/4.0/deed.ja)
原作者のクレジットを表示すればOK。
- [CC BY-SA](https://creativecommons.org/licenses/by-sa/4.0/deed.ja)
原作者のクレジット表示＋改変した場合はCC BY-SAライセンスで公開する必要あり。
- [CC BY-ND](https://creativecommons.org/licenses/by-nd/4.0/deed.ja)
原作者のクレジット表示＋改変しちゃいけない。
- [CC BY-NC](https://creativecommons.org/licenses/by-nc/4.0/deed.ja)
原作者のクレジット表示＋非営利目的ならOK。
- [CC BY-NC-SA](https://creativecommons.org/licenses/by-nc-sa/4.0/deed.ja)
原作者のクレジット表示＋非営利目的＋改変した場合はCC BY-NC-SAライセンスで公開する必要あり。
- [CC BY-NC-ND](https://creativecommons.org/licenses/by-nc-nd/4.0/deed.ja)
原作者のクレジット表示＋非営利目的＋改変しちゃいけない。

## 「商用利用は無理か…あれ、でもよく見たら…」
shogipicの編集画面は下記のようになっており、駒や盤がデザインされたものであることがわかります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3124676/a0f15299-af48-e63d-189d-209efbfbcaae.png)

しかし、編集画面から生成できる画像を確認すると、編集画面の盤駒ではなく、既存フォントを整列させたもののように見えなくもないです。
もし、画像内の盤駒がデザインされたものではなく、CC BY-NCライセンスの範囲外であれば、商用利用できる可能性があります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3124676/4a6885f5-3e59-6087-1ad6-a58a4681267d.png)

「muchonovski」というリソースのリンク先が無くなっているため、どこまでがライセンスの範囲であるかが分からないので、どうしてもshogipicを商用利用したい場合は、制作者に確認するのが安全だと思います。

私はshogipicにこだわりがあるわけでないので、ツール・盤駒どちらのライセンスも制限少なめな[ShogiHome](https://sunfish-shogi.github.io/shogihome/)で画像を出力することにしました。

## まとめ
とりとめもない話だったかもしれませんが、備忘録的にCCライセンスの一覧を作れたので、今後出会うCCライセンスに活かせれば良いかなと思っています。

また、当たり前だとは思いますが、ライセンス上不透明なことがある場合は、下記いずれかの対応が必要と考えます。
- そもそも使用せず、代替手段を調査・検討する
- どうしても使いたいときは制作者に問い合わせする
React学習帳　1冊目

## はじめに
まず第一に、この記事は再度の復習と記録による学習の定着を深めると共に、同じようにReactを学ぼうとする方々にとって役立つことを目的としたいと考えています。
筆者は一般的な大学生であり、htmlなどに関してはある程度─と言ってもまだまだ学習中の身です─は用いることが出来るものとします。

## そもそもReactとは何か
Reactとは単刀直入に言えばJavaScriptを最大限に有効活用するためのツールであると考えることが出来るでしょう。
「名探偵コナン」にとってのキック力増強シューズのように、既存の技術(JavaScript)に対して追加機能を与え、効率的な開発を実現する訳です。

この時重要になるのはコンポーネント、ネスト、Propsの3つが挙げられます。という訳で、今回はその知識を復習しながら書き連ねていくものとしましょう。

### コンポーネント
そもそもコンポーネントとはUIの部品として登録したものです。レゴブロックを組み合わせたものを保存し、いつでも呼び出せるようにしたものと言ってもいいでしょう。
```React:jsx
function Greet(){
 return <h1>Hello, World!</h1>;
}
```
これは即ち、「`<h1>`タグで『Hello, World!』」という部品を「`Greet`」タグで登録したという事になるでしょう。こう考えてみれば話は実に単純に思えるが、単純だからこそ大切です。

### ネスト
コンポーネントの中にコンポーネントを配置する、正しく巣(ネスト)です。
例えば、前述したGreetコンポーネントを含むコンポーネントを作ってみましょう。

```React:jsx
function Profile(){
 return(
  <div>
   <Greet />
   <p>〇〇大学1年 △△学部 山田太郎</p>
  </div>
 );
}
```
こうする事でGreetと< p>タグを含んだコンポーネントが誕生します。
つまり、記述の省略です。何度も使うようなものはコンポーネントで使い回せるのです。

:::note warn
警告
ここで覚えておくべきことは、コンポーネントの直下に入るのは一つのタグだけです。
複数の要素を入れるなら、コンポーネントの直下には`< >`や`<div>`で閉じましょう
:::

### Props
Props(プロパティ)はコンポーネントにおいて、親から子へとデータを渡す仕組みです。

```React:jsx
function Study({ text }){
 return <p>{text}</p>;
}

//使い方
<Study text="勉強大変！" />
```
このように、[text]というPropsを受け取ることで送信し、受け取らせることが出来る仕組みです。この時、Propsは読み取り専用であること、その為子コンポーネントでは変更しようとするとエラーが発生するため、[`usestate`]などを用いることを留意すべきでしょう。
個人的な備忘録：データベースの作成・削除に関するSQL文の基本を記事としてアウトプットしてみた

## はじめに
この記事では、データベースの基本的な作成方法と削除方法に関するSQL文を実際に検証しながら解説します。

:::note info
**これからSQLの基礎を学びたい方や、簡単に環境を構築して気軽に試したい方に向けた内容です。**
:::

また、本記事は個人的な備忘録としてまとめたものです。***その点をご理解いただければ幸いです。***

## 書こうと思ったきっかけ
私は、データベース設計やSQLについて、技術書を読んで体系的に学んだわけではありません。

:::note warn
***とにかく手を動かし、試行錯誤しながら基礎を身につけてきました。***
:::

この経験を踏まえ、今回はSQLの基本的な部分を整理し、体系的に振り返りながら記事としてアウトプットしていきます。

## 実際にやってみた
手軽にSQL文を試す方法として、今回は Docker Hub を活用 し、SQLコマンドの技術検証を行います。

***詳しい手順については、過去の記事でまとめていますので、こちらを参考にしてください。***

https://qiita.com/free-honda/items/222e17d909b4507b93c2#2-docker-hub%E3%81%AB%E3%83%AD%E3%82%B0%E3%82%A4%E3%83%B3

### データベースを作成するSQL文

```sql
CREATE DATABASE sample_db;
```

**実行結果**

```sql
mysql> CREATE DATABASE sample_db;
Query OK, 1 row affected (0.01 sec)

mysql>
```

**解説**
- `CREATE DATABASE` は新しいデータベースを作成するためのSQLコマンドです。
- `sample_db` は作成するデータベースの名前です（任意の名前を指定できます）。
- デフォルトでは、MySQLでは `utf8mb4` などの文字コードが設定されますが、明示的に指定することも可能です。

```sql
CREATE DATABASE sample_db CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
```

### データベースを削除するSQL文

```sql
DROP DATABASE sample_db;
```

**実行結果**

```sql
mysql> DROP DATABASE sample_db;
Query OK, 0 rows affected (0.01 sec)

mysql>
```

**解説**
- `DROP DATABASE` は指定したデータベースを完全に削除するSQLコマンドです。
- `sample_db` は削除するデータベースの名前です。
- **注意:** `DROP DATABASE` を実行すると、データベース内のすべてのテーブルやデータも削除されるため、慎重に使用してください。

`DROP DATABASE IF EXISTS sample_db;` は、データベース `sample_db` が存在する場合のみ削除するSQLコマンドです。

```sql
DROP DATABASE IF EXISTS sample_db;
```

**実行結果**

```sql
mysql> DROP DATABASE IF EXISTS sample_db;
Query OK, 0 rows affected (0.01 sec)

mysql> 
```

このコマンドを使うと、`sample_db` が存在しない場合でもエラーにならず処理が進みます。

### 補足
- データベースを作成・削除するには、適切な権限（`CREATE DATABASE`、`DROP DATABASE` 権限）が必要です。
- 作成したデータベースを使用する場合は、以下のコマンドで選択できます。

```sql
USE sample_db;
```

以上が、データベースの作成と削除に関する基本的なSQL文とその解説です！

## まとめ
最後までお読みいただき、ありがとうございました。***SQLやCRUDの処理については、ITスクールのハッカソンに参加し、実際に手を動かすことで、より実践的なスキルを身につけることができました。***

:::note warn
***データベースを設計する際は、`CREATE` と `DROP` の使い方を正しく理解し、適切に使い分けることが重要だと痛感しました。***
:::

***今後も、このような基本的な内容を丁寧にまとめ、知識を定着させていきたいと思います！***
【拡張機能】Google Chromeで使える自動タイプ(左右の矢印キーのみ)【習作】

# はじめに
拡張機能の習作として、左右の矢印キーを自動でタイプできる拡張機能を作りました。
漫画サイトでフリーハンドでスライドショーのようにページめくりできたらいいなと思ったのがきっかけです。ジャンプ＋などで試したところ上手く行きました。
[Plasmo](https://docs.plasmo.com/)というReactベースで拡張機能を作れるフレームワークを使いました。まだまだ練習中ですが、Reactに慣れていると比較的楽に開発がすすめられました。
もし良ければ使ってみてください。

# 拡張機能に追加する
- [zipファイル](https://drive.google.com/file/d/14TfPsHOjAAn5YRVrfHsU9eTyRmmLacW4/view?usp=sharing)をダウンロードして解凍する
- chrome://extensions/にアクセス
- デベロッパーモードにする
- パッケージ化されていない拡張機能を取り込むをクリック
- 解凍したフォルダを選択する
- すべての拡張機能の欄に「Jisaku
0.0.1」追加されるので、右下のスイッチを青にして有効にする
- アドレスバーの右にあるパズルのピースのようなアイコンをクリックしてポップアップを出す
![パズルのピースcapスクリーンショット (548).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2634870/970dbde1-e719-0276-6203-5b9e9007e916.png)

- 画鋲のようなアイコンをクリックして青(有効)にする

# 使い方
- アドレスバーの右側に追加されたアイコンをクリックしてポップアップを出す
![jisakuアイコンcapスクリーンショット (548).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2634870/fc2a65b4-76bb-901a-e129-256dfafc5170.png)
![ポップアップを出すcapスクリーンショット (543).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2634870/dcf42f9e-e423-7991-74b5-4f6d630f8454.png)

- オートでキーをクリックする間隔の秒数を設定(1～20秒)
![秒数設定capスクリーンショット (545).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2634870/39d80477-74e2-deed-4748-13d68d73203e.png)

- 右か左かを選択(デフォルトは左)
![左右選択capスクリーンショット (543).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2634870/56fe3ef1-2e28-9333-c5cf-cf753881181d.png)

- 開始ボタンをクリック(デフォルトは停止)
![開始ボタンを押すcapスクリーンショット (547).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2634870/f6edfa76-273c-441a-18a4-d6f8bb75f6e1.png)
- 止めたいときは停止ボタンを押す

# まとめ
今まで作ったWebアプリがツール系ばかりで拡張機能に向いているものが多かったので、それらの拡張機能版を作ってみようと思い、その先駆けとして今回の習作を作るに至りました。
ちなみに今までの奴は右にまとめてあります。 → [URL](https://homemade-apps.vercel.app/)
## 追記
ポップアップを開き秒数や状態をデフォルトのまま開始ボタンを押すと挙動がおかしくなるエラーが発生していたため修正しました。
Reactと違いlocalStorageに自動的に値が保存されないようで、思ったように動かせなかったのが今後の課題です。もしかしたら状態の選択はオプションページでやった方が良いのかもしれない...
M5StampS3でアナログジョイスティックのセンターを求める


x 過去ログを見よ!!!
x 自動整形をわすれた(めんどいのでそのまま)
x 3.1.1

いろいろ
M5StampS3が物凄い勢いで無くなっているが、なんかあるんか?(20250130)
有線(有線は、ラジコンとは、言わない)で制御するのがやっぱり多いな
いきなり、ラジコンは、飛ばしすぎ!!!(ももクロの歌みたい(なんのこと))
(有線は、まにゅびれーた?)

目的
電圧を100回計って平均を求める

結果
----

![Screenshot from 2025-01-30 05-09-49_original.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/08a99865-37b3-7496-0eda-c5690182fabd.jpeg)



![image_original (39).jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/92b639e4-0188-db8b-93b0-a5d30b7438e0.jpeg)



プログラム
----

```c++

//ser_analog_joystick_c_M5StampS3

#define G_X 13
#define G_Y 15

void setup() {
  // put your setup code here, to run once:

  //シリアルの初期化
  Serial.begin(9600);
  Serial.println("");
  //シリアルの待ちが0.5*9
  for (int i = 0; i < 9 ; i++) {
    delay(500);  //接続待ち
    Serial.print(".");
  }  //for
  Serial.println("");

  pinMode(G_X,ANALOG); //gpio init
  pinMode(G_Y,ANALOG); //gpio init

  float c_yl=0;
  float c_yr=0;

  float s; //input

for(int i=0;i<100;i++){
  //センサー入力する
  s = ((float)analogRead(G_X));  //センサーの値
  s = s * (3.3f / 4096.0f);  //  電圧こと
  c_yl = c_yl + s;
}
c_yl = c_yl / 100;

for(int i=0;i<100;i++){
  //センサー入力する
  s = (float)(analogRead(G_Y));  //センサーの値
  s = s * (3.3f / 4096.0f);  //  電圧こと
  c_yr = c_yr + s;
}
c_yr = c_yr / 100;

  //表示
  Serial.print(c_yl);
  Serial.print(",");
  Serial.print(c_yr);
  Serial.println("");

}

void loop() {
  // put your main code here, to run repeatedly:

  delay(300);  //ダミー 0.3秒待つ

}


```
Ubuntu 24.04 の DNS変更


Contabo の Ubuntu 24.04 LTS で名前解決ができなくて `apt update` 出来ないことがよく起こったため DNS に Google Public DNS を追加した。

## DNS 設定の編集

`50-cloud-init.yaml` の `50` の部分は環境によって異なる可能性があります。

```bash:bash
sudo vi /etc/netplan/50-cloud-init.yaml
```

Google Public DNS の `8.8.8.8` と `8.8.4.4` を追加する。

```diff_yaml:/etc/netplan/50-cloud-init.yaml
network:
  version: 2
  ethernets:
    eth0:
      match:
        macaddress: "00:50:56:57:dc:57"
      addresses:
      - "156.67.110.218/23"
      - "2400:d321:2238:8891:0000:0000:0000:0001/64"
      nameservers:
        addresses:
+       - 8.8.8.8
+       - 8.8.4.4
        - 62.72.40.51
        - 62.72.40.52
        - 2605:a141:5028::1:53
...
```

## 設定の適用

```bash:bash
sudo netplan apply
```

## 確認

追加した `8.8.8.8` と `8.8.4.4` があれば OK。
名前解決が出来るようになっているはず。

```plaintext
$ resolvectl status
Global
         Protocols: -LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported
  resolv.conf mode: stub

Link 2 (eth0)
    Current Scopes: DNS
         Protocols: +DefaultRoute -LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported
Current DNS Server: 8.8.4.4
       DNS Servers: 8.8.8.8 8.8.4.4 62.72.40.51 62.72.40.52 2605:a141:5028::1:53
```
今さら聞けない「ポインタ型」とは？

# 変数をポインタ型で宣言するのと普通に宣言するのとでは何が違うの？

# はじめに
ポインタ型は誰しもが習うはずですが、意外とそれを意識して開発することがない気がするので改めてまとめておきました。

# 目次
1. 具体的に何が違うか
1. 使用したら効果的な場面

# 具体的に何が違うか
## 通常の宣言
- 通常の宣言では**変数に値を格納します**。この場合、値のコピーが作成されるので変数同士の値は共有されず独立されています。例えば：
```go
var a int = 10
var b int = a
b = 20
```
これらはbはaと値を共有しているわけではなく、bはaをコピーしたものであり、それぞれは独立した関係にあります。
## ポインタ型の変数の宣言
- ポインタ型の宣言では**変数に値のメモリアドレスを格納します**。ポインタ型を用いると、異なる変数間でも参照しているメモリアドレスは同じなので実質的に同じメモリを持っていることになります。例えば：
```go
var a int = 10
var p *int = &a
*p = 20
```
ここでpはaと同じメモリアドレスを参照しています。つまりこのコードを実施すると*pが変更されるのでaの値と同じようになります。つまりaの値は20に変更されます。

## ポインタ型を使用すると何がいいか
- まずポインタ型は独立した変数宣言と違い、コピーを作成するわけではないので**効率的なメモリ使用を実現できます**。
- データの共有を行うので複数の場所で**同じメモリアドレスの値を使用したいけど変数名は変更したい**という場面で使用できます
# 使用したら効果的な場面
- ポインタ型を使用すると上記以外の理由でより効果的な場面をご紹介します。ずばりそれは**nil**を使用したい場面です。

## nilと通常の変数
通常の変数は初期化をされないと自動的にデフォルト値を持たされます。**整数なら0が文字列なら空文字""が持たされます**。これは変数そのものに値を持たさせるためです。例えば：
```go
var a int
fmt.Println(a) // 出力: 0
```
このように初期化されていない変数だと自動的にデフォルト値の0が割り当てられます。

## nilとポインタ型
ポインタ型で宣言した変数は初期化をされないとメモリアドレスが参照しているメモリがないということになります。**その場合、整数でも文字列でもnilが挿入されます**。例えば：
```go
var a *int
fmt.Println(&a) // 出力: nil
```
このように初期化されていないポインタ型の変数だと自動的にnilが割り当てられます。

## nilを利用する場面
- これまでに説明したnilの特性を使用すれば簡単にその変数の値が存在するかどうかをチェックできます。
```go
func process(p *int) {
    if p == nil {
        fmt.Println("パラメータがnilです")
    } else {
        fmt.Println("値:", *p)
    }
}
```
このように整数や文字列の値が存在するかどうかの判断に0や空文字を使用しなくてもnilを使えば明示的に値の存在の可否を判断できます。これはコードの可読性も向上させます。
DeepSeek情報無さすぎ…昔のChatGPTみたい…

# DeepSeek の開発者と研究内容についての調査

## 1. DeepSeek の開発元について
- DeepSeek は中国の AI 企業 **"DeepSeek AI"** によって開発されている。
- 公式サイト: [https://www.deepseek.com/](https://www.deepseek.com/)
- 開発チームの詳細情報は **ほとんど公開されていない**。
- **大手企業（Baidu, Tencent, Alibaba）の傘下ではなく、独立系スタートアップの可能性が高い**。

## 2. 開発チームの特徴
- **開発者の個人名は公開されていない**。
- **中国のAI研究者が関与していると推測**。
- ただし、政府支援のAIプロジェクトと関連があるかどうかは **不明（追加調査が必要）**。

## 3. 研究論文の有無
- 現時点で **DeepSeek AI の公式論文は見つかっていない**。
- しかし、以下の技術が関連している可能性あり：
  - **Sparse Attention**（スパース・アテンション）の研究（OpenAI, Google, FAIRが発表）
  - **Transformer の最適化技術**（Llama-2, Mistral-7B の影響を受けている可能性）
  - **中国の AI 研究機関の論文**（Tsinghua大学やCASとの関連を調査中）

## 4. 今後の調査ポイント
- **DeepSeek AI の開発者に関する情報を追跡（LinkedIn, Google Scholar などで検索）**
- **中国の AI カンファレンス（CCF, IJCAI）で発表された論文をチェック**
- **「DeepSeek AI + 論文」で定期的に検索をかける**
- **今後 DeepSeek AI から公式の技術論文が公開されるかどうかを確認**

## 5. まとめ
✅ **DeepSeek AI は独立系スタートアップの可能性が高いが、詳細は不透明。**  
✅ **開発者の名前や研究内容は公開されていない（今後の調査が必要）。**  
✅ **Sparse Attention や Transformer 最適化技術が影響していると推測。**  
✅ **研究論文が公開されたら、技術内容を分析する必要がある。**
ExpressRoute の接続モニターのコストの考え方

こんにちは、アーキテクトのやまぱんです。
補足コメントや質問、<font color="red">**いいね、拡散**</font>、是非お願いします🥺！
間違ってたら<font color="red">**優しく**</font>教えてください！


## モチベーション
ExpressRoute の接続モニターに関して調べていて、その中でコストについて調べたら結構難しかったのでメモ。

:::note 
ExpressRoute の接続モニターは、Azure 環境とオンプレミス環境間の接続性を監視するためのクラウドベースのネットワーク監視ソリューションです。 これにより、プライベート ピアリングおよび Microsoft ピアリング接続のネットワーク状態を継続的に監視し、潜在的な問題を早期に検出できます。 **Azure Monitor エージェント(古い方法では Log Analytics エージェント)** や **Log Analytics Workspace**、**Network Watcher** といった機能を利用します。
:::

詳細は以下
+ ExpressRoute の接続モニターの構成 - MS Learn
　執筆時時点では (古い方法である) Log Analytics エージェント を使うバージョンで記載されている
 
https://learn.microsoft.com/ja-jp/azure/expressroute/how-to-configure-connection-monitor?utm_source=chatgpt.com

+ 接続モニターで Azure Monitor エージェントを使用してネットワーク接続を監視する
 Azure Monitor エージェント を使うバージョンでの参考になる方法が記載されている

https://learn.microsoft.com/ja-jp/azure/network-watcher/azure-monitor-agent-with-connection-monitor


## コストを調べる
かかってくるコストは以下
+ Azure Monitor まわりのコスト ( Log Analytics Workspace のログ や 設定次第でアラート)

https://azure.microsoft.com/ja-jp/pricing/details/monitor/
 
+ ExpressRoute まわりのコスト

 https://azure.microsoft.com/ja-jp/pricing/details/expressroute/
 
+ Network Watcher - 接続モニター

https://azure.microsoft.com/ja-jp/pricing/details/network-watcher/

はい、これらのリンクを見ていくと、どうもよくわからないのが **Network Watcher - 接続モニター** のコストです。**よくわからん**！😱

## Network Watcher - 接続モニター のコスト

具体的には以下のように記載されています。 (*2025/01/30 時点の画面ショットです。)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/993129ef-7d5b-68db-3f6b-c44c3318fc2a.png)

ちなみに英語版です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/99271444-0c17-1c09-685c-d899b634cd1a.png)

:::note info 
先行して理解するためのヒントをお伝えしておくと、黄色ハイライト部分、日本語訳だと、「１か月あたり 10 **回** 」ですが、「１か月あたり10 **個**」 の方がしっくりきます。
:::



「テストごとに課金されるんだな～」
「ん、テストって何？」
「もしかして、 ``Azure`` - ``オンプレ`` 間の疎通確認のための **1つの TCP コネクションのこと**を 1テストって言ってる！？**めっちゃ高くない！？( ﾟДﾟ)**」

って普通なりますよね、私はなりました。

🧐 実は…「テスト」の意味はちょっと違う！


## 真相究明
結論から言うと以下。

+ テストは、[送信元エンドポイント]、[宛先エンドポイント]、[テスト構成] の**組み合わせ**のこと
+ テストは、監視データを取得する最小単位
* テストグループに追加されたすべての送信元、宛先、およびテスト組み合わせは、それぞれ個別のテストとしてカウントされる  

以下は、送信元と宛先がどのように組み合わされるかの例です。
以下の場合のテストグループ``TG1``を作った場合、組み合わせは ３×２×２ でテストの数は 12 となります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/7a96be21-e77f-7a09-493c-8d5c61a6ea6b.png)

なので、さっきの例だと、0-10 のテストは無料で、それを超えた 2 つが課金対象。
課金表を見ると、47.27円 × 2 で **100 円弱**となります。

参考 （上記の表も以下の URL より拝借しています)

+ 接続の監視の概要 - MS Learn

 https://learn.microsoft.com/ja-jp/azure/network-watcher/connection-monitor-overview#create-a-connection-monitor-1


## まとめ

✅ (ExpressRoute の) 接続モニターは「テスト」単位で課金される！
✅ テスト = [送信元] × [宛先] × [テスト構成] の組み合わせ
✅ 10テストまでは無料、それ以上は1テストごとに課金！


意外と?そんなに高くなかった って話でした！🎉
「(接続モニターの課金ページの) テストって何？」と気になってた人の モヤモヤが晴れますように！ ☀️

-----------------------------------------------------------
質問・コメント・いいね、拡散もお待ちしてます！🐼✨