OmniAICreator/Qiita-1.07M huggingface dataset:
Microsoft Wordの数式をQiita記事用のTeX形式に変更する話

## はじめに
秋葉原ロボット部の理論グループでは、勉強会に関する内容の記事をQiitaのAdvent Calendarにまとめています。

https://qiita.com/advent-calendar/2024/akbrobot_theory

　原稿作成時には、使い慣れたMicrosoftのWord上の「記号と特殊文字」内の「数式」を用いて数式を作成しています。
　完成した原稿の内容をそのままQiitaの編集画面にコピー・ペーストするだけでは、数式が表示されません。
 　締め切りの厳しい状況では、Wordで表示される数式のキャプチャー画像を貼り付けることにより、締め切りに間に合わせています。
  　投稿されたAdvent Calandarの記事は、公開後、冊子体の形で頒布されます。 
　冊子体用原稿に編集する際には、数式のレイアウトをするためにTeX形式での表記に修正することとなります。
　Texの書式を睨みながら修正するのを回避するために、Wordファイルを色々触ってみたところ、不完全ながら、Word上の数式をQiitaのmath書式に変換することができました。

## Wordの数式からQiitaのmath形式への変換
　ここでは、「一次元人の世界を理解するための接続係数の使い方を妄想してみた」内の式を例に説明します。

https://qiita.com/kazueda/items/df180a8ae0116b2aba3c

　Word上の数式をクリックすると、Window上部のタブに「数式」が表示されます。
 　「数式」をクリックすると、「変換」の部分に「LaTex」ボタンが表示されます。
　この「LaTeX」をクリックしたのち、右隣の「変換」をクリックします。
　どのように変換するのかが選択できるので、「現在‐行形式」をクリックすることで、数式がLaTex形式に変換されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/693019/ce4a70c3-3618-08d4-cc10-f656e89bf8bc.png)

　
　変換後の文字列と、math形式を使ったときの表示を示します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/693019/ed3c86c8-f57c-7ab9-e9a0-de29aa7a81a4.png)
  上記の数式を「行形式」に変換すると、以下の文字列となります。

e_p=\frac{\partial\\mathbf{mathbit}{\mathbf{x}}}{\partial 
p}=\left(\begin{matrix}1\\0\\\end{matrix}\right),\ \ e_q=\frac{\partial\\mathbf{mathbit}
{\mathbf{x}}}{\partial q}=\left(\begin{matrix}0\\1\\\end{matrix}\right)

　この文字列を「\```math」と「\```」の間に記載すると以下の表示になります。
```math
e_p=\frac{\partial\mathbit{x}}{\partial p}=\left(\begin{matrix}1\\0\\\end{matrix}\right),\ \ e_q=\frac{\partial\mathbit{x}}{\partial q}=\left(\begin{matrix}0\\1\\\end{matrix}\right)
 ```
　 太字の斜体の部分が反映されず「\\mathbit」と表示されています。「mathbit」の部分を「symbfit」に置き換えることで、太字の斜体を表現することができます。
  ```math
e_p=\frac{\partial\symbfit{x}}{\partial p}=\left(\begin{matrix}1\\0\\\end{matrix}\right),  \ \ e_q=\frac{\partial\symbfit{x}}{\partial q}=\left(\begin{matrix}0\\1\\\end{matrix}\right)
 ```
 ## おわりに
 　数式を含むWordファイルから、TeX形式の数式を含むWordファイルへの変換について説明しました。
　実際に使用する場合は、「変換」の際に「すべて-行形式」を選択すると、すべての数式の変換が行われます。その後、太字の斜体の部分を一括置換で修正します。Qiitaでエラーの出ないTeX形式の数式の含まれた原稿が作成できるかと思います。
PowershellでもSudoが使えるぞ！

# PowershellでもSudoが使える
```
PS C:\> sudo
このコンピューターでは Sudo が無効になっています。有効にするには、 に移動しますDeveloper Settings page設定アプリの
```
Powershellで```sudo```を入力するとちょっと翻訳がおかしいですが、
sudoが無効であると出ると思います。
<a href="ms-settings:developers">開発者向けの設定</a>画面に行くと、「sudoの有効化」があるのでそれをONにするとsudoが使えます！

# おわりに
最後まで読んでいただきありがとうございます。
構造化ログは運用に優しい

運用においてログを出力しておく事は、障害発生時の調査の手がかりにもなることから非常に重要です。
しかし、だたメッセージを出しておくだけでは調査をスムーズに進める事は難しいでしょう。

例えば、APIでユーザー情報を取得しようとした際にエラーが発生した時のログのパターンとしては以下のようなものが考えられます。
```:サンプル1
2024/01/01 10:00:00 [INFO] 5237e551-5f01-4154-9664-a73abc600025: 処理開始
2024/01/01 10:00:01 [INFO] 5237e551-5f01-4154-9664-a73abc600025: ユーザー情報取得 https://hoge.com/v1/users/1
2024/01/01 10:00:03 [ERROR] 5237e551-5f01-4154-9664-a73abc600025: ユーザー情報取得の取得に失敗
2024/01/01 10:00:03 [ERROR] 5237e551-5f01-4154-9664-a73abc600025: ユーザーID: 1
```
これだけであれば、APIでユーザーIDが1のデータを取得しようとしたときにエラーが発生したんだなと言うのがすぐ分かります。

しかし、以下の場合はどうでしょう？
```:サンプル2
2024/01/01 10:00:00 [INFO] 4e626ed2-7fb4-45d4-bb6c-d3fa3d334be6: 処理開始
2024/01/01 10:00:00 [INFO] 5237e551-5f01-4154-9664-a73abc600025: 処理開始
2024/01/01 10:00:01 [INFO] 4e626ed2-7fb4-45d4-bb6c-d3fa3d334be6: ユーザー一覧取得 https://hoge.com/v1/users
2024/01/01 10:00:01 [INFO] 5237e551-5f01-4154-9664-a73abc600025: ユーザー情報取得 https://hoge.com/v1/users/1
2024/01/01 10:00:01 [INFO] f4518c68-b68d-4c65-98db-e61b1096d36f: 処理開始
2024/01/01 10:00:02 [INFO] 4e626ed2-7fb4-45d4-bb6c-d3fa3d334be6: ユーザー一覧取得に成功 https://hoge.com/v1/users
2024/01/01 10:00:03 [ERROR] 5237e551-5f01-4154-9664-a73abc600025: ユーザー情報取得の取得に失敗
2024/01/01 10:00:03 [INFO] 3eaa36b6-70e8-43b6-adc0-4f8faea55441: 処理開始
2024/01/01 10:00:03 [ERROR] 5237e551-5f01-4154-9664-a73abc600025: ユーザーID: 1
```
この場合、ぱっと見てどのリクエストがエラーになったのか分かり難いのでは無いでしょうか？

多くのバッチ処理のようにシングルスレッドで動く処理であればサンプル1のように出力されますが、Webサービスのようにマルチスレッドで動く処理はサンプル2のように出力されてしまいます。
サンプルなので出力数は少ないですが、実際の運用環境などではもっと多くのログが出力されるのではないでしょうか？

このようなログ出力では障害発生時の原因特定をスムーズに進める事は出来ません。

そこでオススメしたいのが構造化ログです。

構造化ログはログを構造化することにより分析を行いやすくなります。
そして、人が見ても分かりやすい出力になります。
一言で構造化と言っても色々な形式がありますが、JSON形式にすることが一般的です。

エラー発生時の出力は、以下のようにすることが考えられます。
```:サンプル3
{
    "date": "2024/01/01",
    "time": "10:00:00",
    "type": "INFO",
    "id": "5237e551-5f01-4154-9664-a73abc600025",
    "message": "ユーザー情報取得の取得に失敗",
    "request': {
        uri": "https://hoge.com/v1/users/1"
    }
}
```
どうでしょうか？
分かりやすいと思いませんか？

もちろん、サンプル1,2で示したエラーログにもuriを情報として載せることは可能です。
```:サンプル4
2024/01/01 10:00:03 [ERROR] 5237e551-5f01-4154-9664-a73abc600025: uri: "https://hoge.com/v1/users/1" ユーザーID: 1
```
しかし、サンプル3に比べて見にくいのではないのでしょうか？
さらに、ヘッダーやボディなどを出力したくなったらどうですか？

例えばヘッダーを出力する場合、構造化ログでは以下のような出力にすることが出来ます。
```:サンプル5
{
    "date": "2024/01/01",
    "time": "10:00:03",
    "type": "INFO",
    "id": "5237e551-5f01-4154-9664-a73abc600025",
    "message": "ユーザー情報取得の取得に失敗",
    "request": {
        "method": "GET",
        "uri": "https://hoge.com/v1/users/1",
        "header": {
            "Content-Type": [
                "application/json"
            ]
        }
    }
}
```
このように構造化ログにすることで多くの情報を分かりやすく出力することが可能となります。

構造化ログを行うことでデータ量が増え、クラウドサービスを利用しているとコストが増えるなどのデメリットも存在します。
しかし、エラー発生時にエラー原因となっている情報を効果的に出力することが可能になるなどデメリットを補って余りあるメリットも存在するので、是非構造化ログにチャレンジしてみて下さい。
AWS Certified Solutions Architect (AWS-SAA) 試験の学習方法

皆さん、こんにちは。王と申します。7月に **AWS-CCP**（821点）試験に合格し、その後、**SAA**試験に向けた準備を開始しました。そして12月16日に833点で合格しました。今回は、私の学習経験や感想をシェアしたいと思います。

---

## 1. CCPとSAAの違いと共通点  
**CCP**はアーキテクチャの基礎的な知識を問う試験で、ほとんどのAWSサービスの基本的な役割を理解することが求められます。しかし、実際の操作や応用については深く掘り下げられません。  

一方、**SAA**はさらに深い知識と実践的な能力が試されます。たとえば：  
- **データベース**の選定基準  
- **パブリックサブネット**と**プライベートサブネット**の違い  
- **セキュリティグループ**と**NACL**の違いと組み合わせ方  
- **S3**と**EFS**など、ストレージサービスの使い分け  

全体的に、SAAはより詳細で、AWSサービスをどのように組み合わせて使うか、また初歩的なアーキテクチャ設計の能力が問われる試験です。

---

## 2. 学習方法  
最も重要なのは **AWS公式のホワイトペーパー** です。これがAWSサービスの学習における基本的な資料となり、試験で問われるほとんどの内容がここに含まれています。公式ドキュメントをきちんと理解すれば、必ず合格できると思います。しかし、公式の表現は時に難解であるため、市販の第三者による講座を活用することをおすすめします。

### 使用した主な学習資料  
- **Udemy** の「**Stephane Maarek's Ultimate AWS Certified Solutions Architect Associate 2025**」  
  - このコースは実践的で、動画とハンズオンを通じて学べる内容です。非常にわかりやすく、実務にも役立つ知識が得られました。

### 模擬試験について  
- **Udemy** の「**Practice Exams | AWS Certified Solutions Architect Associate**」  
  - 6セットの模擬試験があり、SAA試験に必要な知識やスキルを広範囲にカバーしています。ただし、実際の試験とは少し違う部分もありますが、学習の進捗を確認するためには十分役立ちます。  

- **Tutorials Dojo** のSAA模擬試験  
  - この模擬試験は内容が非常に充実しており、解説も丁寧です。ただし、英語のみで、難易度が高めなので、初めて挑戦する際は少し圧倒されるかもしれません。

---

## 3. 間違えた問題とノート作成  
私は**紙とペン**を使ってノートを取る方が好ましいと感じています。特に間違えた問題は重要で、  
- **間違えた問題をすべて見返し**、なぜその選択肢が間違いだったのか、正しい選択肢はなぜ正解なのかを深く理解することが大切です。  
- 重要な内容をノートにまとめ、毎日1時間を使って間違えた問題を重点的に復習することで、知識を確実に定着させました。

---

この方法を実践すれば、**AWS-SAA**試験でも良い結果が得られるはずです。ぜひ頑張ってください！
Microsoft Fabric での Python ノートブックエクスペリエンス

## はじめに

これまで、[Microsoft Fabric Spark ノートブックを効果的に使用する](https://qiita.com/ryoma-nagata/items/d66ea67ddbf0132595ab)などの記事で、リソースを無駄遣いせずにノートブックを使用する方法を案内してきましたが、 python を主に利用するデータサイエンティスト向けの新機能として、**Python ノートブック** なるものがプレビュー開始したので紹介します。

## 主な機能

>- ネイティブPythonサポート: ipywidget、マジックコマンドなど、箱から出してすぐに使用できるネイティブ機能とライブラリを備えたPythonのフルパワーをお楽しみください。
>- バージョンの柔軟性: 異なるPythonバージョンを簡単に切り替えることができます(最初はPython 3.11と3.10をサポートしています)。
>- リソース使用率の最適化: より小さな 2 仮想コア/16G メモリ コンピューティングにより、リソース使用率の向上を活用できる、リアルタイムのリソース使用率モニターを利用できます。
>- レイクハウスとリソースがネイティブに利用可能: Fabric Lakehouseの機能をシームレスに活用し、モジュール、ライブラリ、ファイルを保存するための組み込みのリソースフォルダを備えています。
>- T-SQL とプログラミングを混在させる:Data Warehouses はネイティブにサポートされており、notebookutils を使用して T-SQL ステートメントで Data Warehouse を簡単に読み書きできます。
優れたPythonインテリセンス:強力なPylanceがネイティブに統合され、よりスムーズなコーディング体験を提供します。
>- 一般的なライブラリがプリインストールされています。duckdb、polars、その他の人気のある3を使用してRDのPythonノートブックのパーティーライブラリを便利に。Semantic Link (SemPy) や NotebookUtils などの Fabric ユーティリティもネイティブにサポートされています。
>- カスタムセッション設定:ライブプールエクスペリエンスでは、5秒でセッションがデフォルトで有効になっていますが、%%configureを使用して、特定のハードウェア設定、マウントポイント、デフォルトのレイクハウスで独自のセッションをカスタマイズすることもできます。
>- ファブリックエコシステムとのシームレスな統合: 共有、CI / CD、スケジュール実行、データパイプライン統合、OrgAPP統合など、Fabricノートブックのすべての利点は、Pythonエクスペリエンスで利用できます。

引用：https://blog.fabric.microsoft.com/en-us/blog/python-notebook-public-preview?ft=All

ということで、大規模処理を目的とした spark ではなく、小規模なリソースから利用できる python の利用に最適化されたノートブック体験となっています。

docs: https://learn.microsoft.com/ja-jp/fabric/data-engineering/using-python-experience-on-notebook

## 使い方

### セットアップ

言語設定を変えるのみです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/1a03f5fc-c668-cb97-4226-1e0522f3dda9.png)

セルが pyspark から　python に変更されます。セルを実行すると数秒で python カーネルが起動します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/0899c383-6382-cb80-250c-3dd469b3b009.png)



### Delta Lake へのアクセス

コードスニペットのこちらを採用してみます。パスの取得は、[Microsoft Fabric OneLake を DuckDB で分析する](https://qiita.com/ryoma-nagata/items/c01a5abb33c3e8d684ba#%E6%89%8B%E9%A0%86) を参考に。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/38550cee-2327-1a23-b177-4565606f3117.png)

```python:python

from deltalake import DeltaTable
table_path = "abfssパス" # replace with your table abfss path
storage_options = {"bearer_token": notebookutils.credentials.getToken("storage"), "use_fabric_endpoint": "true"}
dt = DeltaTable(table_path, storage_options=storage_options)
limited_data = dt.to_pyarrow_dataset().head(1000).to_pandas()
display(limited_data)

```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/379ba7d3-00b1-f42a-6bba-da3faa963fce.png)

Duck DB もビルトインされているため、すぐに利用可能です。delta_scanを使用して直接 duck db に読み取らせると、より大きなデータセットに対応可能

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/b6d1627c-7f4b-6df0-fc6f-a4e82f38b860.png)


### リソース確認

画面下部にセッション情報として以下のように表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/f69d2322-61f1-f889-87e4-e412a25fbb8c.png)

監視ハブではそこまで多くの情報はまだ表示されないようです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/d196636b-a7fe-e6c2-3be4-cca399af472b.png)
Emacs Lisp 超初心者がコマンドを作るぞ 〜Emacs Lisp 実行 基本のキ〜

# はじめに

超初心者ゆえ、 正確性よりも「こんな感じ」「あんな感じ」「これこれに似てる」という雰囲気で進みます。超初心者はメンタル豆腐ですので、それは違うそれはこうだとか怒らないで優しく優しく優しくご指摘願います。

Emacs Lisp をいじるにしても、まずはその実行ができないとどうにもなりません。EmacsでLispはどのように実行するのかを見ていきます。

# 手元で確かめるられるようにする

## Emacs Lisp の実行 == 評価 == eval
どうやれば Emacs Lisp を実行できるのでしょうか。 キーとなるキーワードは 「eval」 です。 Emacs で eval という単語が出てきたら、まずは Emacs Lispの実行(評価;eval)を疑ってください。

## まずは scratch バッファ

さて、 最初のうちは *scratch* バッファで遊ぶのが楽です。 
まずは *scratch* バッファに切り替えましょう(うっかり *scratch* バッファを削除した場合は、 Emacs を再起動すれば空っぽの状態で復活します)

たいへん重要な「注意」として、 *scratch* バッファの内容はセーブされないので気を付けてください(今回は必要な部分をファイルにセーブすることにします。下記「ファイル名を決める」を参照)

## lisp を 実行(評価;eval) する

lispを実行することを評価(eval)といいます。細かく言うと lisp式を評価してる訳なのですけど、まぁそういうことです。

*scratch* バッファに切り替えて:

````common_lisp
(buffer-name)
````

の後ろに続けて C-x C-e とすると、ミニバッファーに現在のバッファー名が表示されます。
そうです。今やあなたはlispを実行してのけたのです。実行方法はいろいろありますけど、これが基本のキです。
これは buffer-name という関数を実行したのです。 

次はたいへんありがちですけども

````common_lisp
(+ 3 5)
````
を実行してみましょう。そうですね、同様に C-x C-e します。
ミニバッファーに結果が出ます。

なんとなく分かってきたかと思うのですけど、Emacs Lispの基本は (関数 引数1 引数2 ... ) です。いや基本はリストだろとかそりゃそうなんですけど、コマンドを作るっていう面で見ると、真っ先に来るのが

(関数 引数1 引数2 ... )

です。別の言語風に言うと 関数(引数1 引数2 ... ) です。C言語なんかと違うのは、可変長引数がデフォルトであると言うことです。閉じカッコまで幾つでも引数を書いていいです。

関数を実行した結果はいろいろですけど、これまたC言語風に見ればオブジェクトへのポインタを一つ返すだけです。
そのオブジェクトの中身がアトムだったりコンスセルだったりする訳です。なお肝心のリストはコンスセルのリンクリストとして表されます。

次は少し意地悪をしてみましょう。上記の (+ 3 5) を (関数 引数1 引数2) としてではなく、リストそのものとして扱います。

````common_lisp
(quote (+ 3 5))
````

これを実行すると足し算の結果ではなくて (+ 3 5) と表示されます。ここでは + は関数ではなくて 要素の1つと見なされてます。
なお、ここでの quote は関数です。 (関数 引数1) 、 引数1の中身はリストというわけです。

quote は ' (引用符)で略せるので普通は略すようです。

````common_lisp
'(+ 3 5)
````

つまり、 (quote (+ 3 5) と '(+ 3 5) は等価です。 ' の方が括弧の数を減らせるしタイプ量も少ないので好まれますが、 quote の略記であると心のどこかにとどめておいてください。

このように (+ 3 5) は関数の実行であったものが '(+ 3 5) とすると(本来の)リストそのものとして扱われる、この変化自在なところがLispという代物です。



## ファイル名を決める

さて、 ここで、 遊んだ…じゃなくて作成した Emacs Lisp プログラムを保存するファイルを用意するとしましょう。

emacs lisp の拡張子は通常 .el です。
ファイル名に規則なんて特にないのですけど、今回は po-mode 用に previous msgid の ediff をするコマンドを書きたいので

po-ediff-previous-msgid.el

というファイル名にします。
このファイルを開くまたは初回作る C-x C-f po-ediff-previous-msgid.el

バッファ *scratch* で保存したい内容はこちらへコピペしてファイルを保存します。

# 対象ファイル・参考ファイル

ここで対象ファイル、参考ファイルを整理しておきましょう。

- po-modeが必要です。
- po-modeのソースファイル
- ediffのソースファイル
- po-ediff-previous-msgid.el
- サンプルの処理対象ファイル rev-list-options.po の抜粋です。動作確認は抜粋じゃ無い方でやってますが、たぶん今回作るコマンドに関しては結果は一緒です。

https://gist.github.com/kuma35/d65f98e908a3a7c8d1c3249cf0499c1c
コンピュータ・ネットワークの性能問題

### 種々な問題が噛み合わさる
>数百、数千のコンピュータが相互に接続されている環境では、不足の結果に陥る複雑な相互作用が起こり、原因不明の性能悪化がしばしば引き起こされる。

>ネットワーク性能を理解することは、科学というよりも技法の領域である。ネットワーク性能に関する実用的な理論はほとんどない。

### コンピュータの問題
>性能低下は、構造的なリソースの不均衡があるときにも起こる。例えばギガビットの通信回線がローエンドのパソコンに接続されている場合、貧弱なCPUは入力パケットに処理しきれず、パケットの一部はロスするだろう。取りこぼされたパケットは後で再送されるが、遅延が増し、帯域を消費し、性能を低下する。

#### ブロードキャストストームが起こりいっぱいになる。
>多くの場合、受信者は、親切に誤り通知を送り返す。誤ったセグメントが1000のマシンにブロードキャストされたら、何が起こるだろうか。各マシンは誤りメッセージを送り返し、ネットワーク中にブロードキャスト・ストーム(broadcast storm)が吹き荒れる。

#### 一度に押し寄せていっぱいになる
>電力障害後におこるものがある。電力が復旧したとき、すべてのマシンが同時にリブートを開始する。典型的なリブーどの手順の一つに、まずDHCPサーバーに自分の身元を聞きに行き、ファイル・サーバーからオペレーティング・システムのコピーを受け取るというやり方がある。データ・センターの何百ものマシンがこの作業を一度に行ったら、サーバーは負荷に耐えきれずにハングアップするだろう。

### ネットワーク性能の計測
>できるだけ多くのトラフィックをできるだけ速く送信することであった。（基本的にパイプを埋める)。しかしアクセス・ネットワークの速度が上がると、パイプを埋めるためにより多くのデータが必要にあり、ですと対象のサーバーとクライアントの間のネットワーク・ボトルネックが別の場所に移動するため、アクセス・リンクの速度の計測はより挑戦的な課題となる。

>さらに重要なことは、速度と体幹品質やアプリケーション性能との関係に対して、速度とネットワーク性能との関係が弱くなっていることである。

### アクセス・ネットワークのスループット測定
>一つは、複数のTCPコネクションを並列に使用して、アクセス・リンクの容量を埋める手法である。
...
>容量が大きいと予想されるコネクションは、より多数の並列コネクションを使ってテストするのである。

>ホームルーターから直接アクセス・ネットワークのスループット・テストを実行する方法であり、外部要因（クライアント・デバイス、ユーザーの無線ネットワークなどによる）がスループット・テストに影響を与える可能性を小さくできる。

>速度が向上し続けると、単一のコネクションから複数のインターネット宛先を並行して測定するなどの新たな手法が登場する可能性がある。これらは、特にサーバー側がネットワーク・スループットのボトルネックの原因となる場合に必要となる
### QoEの測定
>スループットが約500Mbpsを超えると、これらの要因はいずれもアクセス・リンクのスループットに依存するのではなく、ネットワークの他のプロパティ(遅延、ジッターなど)に依存する。
 そのため最新のネットワーク性能計測は、単純な速度テストから、ネットワーク・トラフィックの観察に基づいたユーザー体感の品質の推定に移行している。

>ユーザー体感品質は、ユーザーがそのサービスに満足しているかどうかによる。基準は、最終的には人間による判断であり、場合によっては、人間によるフィードバックが必要になる。

https://bookplus.nikkei.com/atcl/catalog/23/03/16/00728/
flaskを使って数当てゲームを作ろう

必要な準備
-
- Python
- VScode

また、同時にVScodeに「Python」の拡張機能をダウンロードしておくと便利です。

Flaskのインストール
-
Flaskを使用するために、Flaskをインストールします。ターミナルを起動し、以下のコマンドを実行します。
```
pip install Flask
```

次に、Flaskを使ってサーバー側のコードを作ります。app.pyという名前で以下のコードを作成します。
```
from flask import Flask, request, jsonify
import random

app = Flask(__name__)
number_to_guess = random.randint(1, 100)

@app.route('/guess', methods=['POST'])
def guess_number():
    user_guess = request.json.get('guess')
    if user_guess < number_to_guess:
        return jsonify({"message": "もっと大きい数です。"}), 200
    elif user_guess > number_to_guess:
        return jsonify({"message": "もっと小さい数です。"}), 200
    else:
        return jsonify({"message": "おめでとうございます！正解です！"}), 200

if __name__ == '__main__':
    app.run(debug=True)
```
次に、クライエント側のコードを作ります。client.pyという名前でコードを作成します。
```
import requests

url = 'http://127.0.0.1:5000/guess'

while True:
    user_guess = int(input("1から100の間の数を予想してください: "))
    response = requests.post(url, json={'guess': user_guess})
    message = response.json().get('message')
    print(message)
    if "正解です" in message:
        break

```
ファイルの構造
-
ファイルの構造は以下のようになっています。
```
number_guessing_game/
├── app.py
└── client.py
```
プログラムを実行する
-
VScodeでapp.pyのファイルを開き、ターミナルを起動して以下のコマンドを実行します。
``` 
python app.py
```
次に、client.pyのファイルを開き、ターミナルで以下のコードを実行します。
```
python client.py
```


以上の手順で数当てゲームをプレイできます。1~100の範囲の数を予想して、打ち込み、送られてきたヒントをもとに正解の数を当てます。
PowerAutomateメールの送信 の差出人の設定方法

# 接続設定：差出人のメールを接続に設定する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/368087/4eb6aa79-ddd2-bd8a-8baa-f7156e37b089.png)

# メールの送信 (V2)の「マイコネクション」で差出人の接続を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/368087/ded6e359-5492-f96a-f222-9179d901a447.png)

# 実行のみのユーザーを選択し、「この接続 (xx@xx.co.jp) を使用する」を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/368087/f4bb0adb-cc7f-aff2-b3fd-980b280628d5.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/368087/8c25c442-6955-5a67-f279-deea90b37558.png)



# 参考サイト
https://note.com/_hana_chan_/n/n32b51b181dbe

https://artisan.jp.net/blog/organize-email-senders-in-the-power-app/
人生の盛夏：3つの国を渡って迷いだらけの道で自分の光を探す

## 序文
こんにちは。株式会社エアークローゼットに今年4月末入社して、PMOとして勤めている文と言います。この記事はエアークローゼットアドベントカレンダー2024の19日目の記事です。ここまで長年を渡って、28歳中国出身のもので、カナダで9年ぐらい暮らし、そしていま家族も一緒に連れて、日本に転職して、まだ新しい人生を始まっているという非常にイレギュラーな人生を送っています。そしてちょうど、2024の夏で、キャリアの盛夏も始まりました。
## みちのり
#### 大学時代：運命のルーレットの廻し始まり
カナダの籍ですが、中国を離れたのは高校卒業からです。
大学の専攻は「経営工学」でした。工学なので、朝から晩までずっと教室や図書館にいたうえ、カナダでは、1年のうち半年以上が冬であり、朝は明るくなるのが遅く、夜は暗くなるのが早いです。そこで「太陽が見えない」大学時代を過ごしましたね。主にオペレーション系の知識を学んだが、プログラミングに関する知識はあまり触ったことありませんでした。そのあと、中国のEVメーカー、半導体メーカー、日本の自動車部品メーカー、カナダのIT企業などいろんなところでインターンしてから経験を積んで、国それぞれの職場文化や生活を体験することができました。その中、日本でのインターンはすごく印象的。アニメのきかっけで日本語の勉強を始まったが、本気を出すのがそこからでした。
#### 大学院時代：縁を結ぶ
卒業はコロナと遭遇。何処にもいけない状態で、日本語も、VBA、Pythonなどの言語基礎も独学を始まり、日本の大学院に進学しようと決まりました。決定した後→日本語N1資格取得→進学まではまるで1年しか経ってませんでした。工学の反対側で、院生としてMBAを学んだ際にもプロマネをメインにして専念。日本の色々を味わうながら、楽しい2年間でした。
#### 人生の交差点：どんな生活を過ごしたい？
前職はカナダの建築会社でPMとして務めました。建築系では、外装工事、内装工事、屋根、ガーデンなどいろんなフェースがあるので、細部でズレが生じたら全体のスケジュールに大ズレが発生します。しかも、一年中の仕事は大体全部夏ごろに縛られているので、すごくハイプレッシャーで大変でした。そんな仕事がやっているのに、社内環境では標準化されている管理システムがありませんでした。そして、現場管理、通訳、オフェスワークなど一連の業務の中に一生懸命でERPシステムの実装まで改善策を出しつつ推進しましたが、自己開発ではなく、市販の既存商品を導入しました。そこで自分の「整えたい」気持ちと「整える」能力を気付き、「これを作った人はすごいな」も意識しまして、憧れていました。日本に恋しい感情もありつつ、日本に転職することを決まりました。
## 現在
最初エアクロに入社した際、まるで0基礎で、開発に関わる話全然できなく、頭が真っ白な状態だったが、上司と先輩たちは優しくてなんでも助けてくれました。小さい種の自分に沃土でした。いろんな失敗も味わいましたが、信じられないことに、今では自分でもGAS（Google Apps Script）を使って、日常のPMO業務や改善活動のためのコードを作成したり修正したりできるようになりました。まだ未熟ですが、まさに当時の憧れを生み出したから1年さえも経っていませんでした。初めて自分の手でコードを動かしたときの嬉しさは今までも心に残しています。これよりもっと先の未来には、さらに進化できるのはずじゃないですか、と信じています。
## まとめ
いま振り替えて見ると、不思議な旅だなーと思われるかもしれないが、意思決定をするときや、チャレンジを受け取るときは心の声にフォローしてやり続けるだけでした。やりたいことをやって、実現したいことを追いかけて、自分を信じていれば大丈夫！ということですね。このAIがげきはやで進化している時代で、さらにその力を貸して、想像力を持ちながらもっと多様な管理仕組み・システムを作ってみたいと思います。やはり野望がある人に対しても、その目標を実現するために、相応しい武器（ツイル）、仲間も不可欠です。その探し道は大変かもしれないが、もう少し頑張れば茨の中から一筋の光が見つかるんだ。
Webサービスを終了する時にやること

Webサービスは毎日たくさんの数生まれていますが、同様に終了するサービスも数多く存在します。
Webサービスを終了するプロジェクトにアサインされた時、何をするの？というのをこの記事ではざっくりと紹介します。

## やることを洗い出す

プロジェクトのスケジュールを決めるために、まず終わらせるために何が必要か洗い出します。
規約や法律を確認しつつ、工数もざっくり求めて何をいつまでにどのように進めていくのか、といったスケジュールも考えながら作っていくと良いでしょう。
すごく大まかにはどのサービスでも以下のようになることが多いでしょう。

- サービス終了対応
    - スケジュール作成
    - 告知
    - 終了ページの作成
    - 一部機能提供の終了
    - 終了ページを表示するようにする
- 内部でやること
    - データの取り扱いの決定・バックアップ
    - ソースコードやインフラの削除・撤去
    - 契約していたサービスの解約

## サービス終了対応

直接的に終了させていくために必要な作業です。
サービスの利用者にも見えるような作業が多いです。

### スケジュール作成

先ほど作成した工数とやることからスケジュールを作成します。
詳細なガントチャートで管理するようなスケジュールと、ユーザーに公開する外向けのスケジュールの２種類を作成します。
外向けのスケジュールは遅延しないように、余裕を持たせて作成するようにしましょう。

### 告知

ホームページやサービスに載せる告知を作成します。
告知方法を決めて、掲載する各箇所への告知文章を作成します。
コーポレートサイトなどに詳細を掲載し、それ以外は簡潔に終了を伝える文章とコーポレートサイトへのリンクを載せる、というパターンが多そうです。
また、告知以外の方法で終了をお伝えする必要のあるステークホルダーが存在する場合は、必要に応じて準備を行い連絡を行いましょう。

### 終了ページの作成

よくある`サービスは終了しました。ご利用ありがとうございました`という旨が書かれたあのページです。
必要であれば問い合わせ先や（存在すれば）後継サービスのリンクなども記載しましょう。
そんなに凝る必要は基本的に必要ないはずなので、簡素なページを用意してNSレコードを切り替えたら表示される状態にすると良いです。
AWSなら、S3にhtmlファイルを置いてCloudFront経由で配信する方法などがあるでしょうし、他のクラウドサービスでも似たような方法があると思うので、状況に応じて適切なインフラを用意しましょう。

### 一部機能提供の終了

サービスの種類などにもよりますが、新規登録など一部機能を提供終了する場合があります。
スケジュール作成時にどの機能をいつ提供終了するか決定し、それに沿って開発など必要な対応を行います。
この工程が必要ない場合もありそうですが、本当に不要かはきちんと確認しましょう。

### 終了ページを表示するようにする

サービス終了時間になったら、`終了ページの作成`で作成したページがサービスのドメインにアクセスすると表示されるようにしましょう。
SNSアカウントがあるならそちらで終了の報告なども行うと良いでしょう。

## 内部でやること

外部からは見えませんが、サービスを終了するためには必要な対応です。

### データの取り扱いの決定・バックアップ
MySQLに保存されるデータはもちろん、ログデータやユーザーがアップした画像データなど、サービス運用の中で作成されたデータは多数存在します。
これらのデータをいつまでどこにどのように保存するのか、規約や法律を参考に決定します。
各法律の最新の文章や改正予定などは必ず確認するようにしましょう。
現在保存されている場所から、別の場所に保存するための仕組みが必要な場合は適宜作成し、保存が終わったら撤去しましょう。
いつ消すかタイトルに記載したIssueを作成し、Slackでリマインダするようにしておくなどの工夫で消し忘れがないようにしましょう。

### ソースコードやインフラの削除・撤去

終了ページを構成する要素以外のリソース以外はデータのバックアップ終われば不要になるはずです。
サーバーや、データベースの削除などを行っていきましょう。
リポジトリ自体が不要になる場合はアーカイブなどで良いでしょうが、コードを消す必要がある場合は、漏れができるだけないように`git grep`コマンドなどをうまく活用しながら消していきましょう。

### 契約していたサービスの解約

サービスで利用していたSaaSやSNSのアカウントなどを削除します。
すぐに消さない場合は、いつ消すか決めてIssueなどに残しておきましょう。

## まとめ

今回は私の経験などをもとに、Webサービスの終了でやることをざっくりと紹介させていただきました。
利用規約と法律は解釈を間違えてないか何度も確認し、できるなら法務の方に相談しつつ進めていくと良いでしょう。
この記事の中身からは漏れてしまったものもあるので、「こういうのもあるよ」などコメントしていただければ幸いです。
データセンター運用チームのソフトウェア開発チームについて

# はじめに
この記事は さくらインターネット [Advent Calendar 2024](https://qiita.com/advent-calendar/2024/sakura) 23日目の記事です。

Qiitaでは初めまして、さくらインターネットの火星人、ジョーです。

本記事では、さくらインターネットの運用チームにもソフトウェア開発をするエンジニアリングチームが存在することと、そのチームで活動し、感じた個人意見を述べていきます。

なにか論理的に運用チームの組織論を語るわけではないので、ご注意ください。
さくらインターネットで単に”運用チーム”と言ってもたくさん該当する部署や職種がありますが、ここでは、顧客問い合わせを受けるようなサポートチームとデータセンターのサービス運用に関わる運用チームを指します。

# TL;TD
課題や困難は多いけれども、少なくとも運用チームで使う社内のソフトウェアは社内のエンジニアで作成と運用ができるメリットは大きいと感じました。

# 運用チームのソフトウェア開発チームができる前にあった課題
さくらインターネットのデータセンター運用の歴史は長く、そして、古く、今の状況ではメンテナンスできないツール、ソフトウェアが多く存在しておりました。データセンター運用や、サービスサポートの将来を考えると今と将来に渡って出てくる「やりたいこと」を「できる」に変えられる状況ではありませんでした。
この状況が好ましくないのは把握しつつも、対策としては個人レベルでの場当たり的な対応しか取れておらず、運用の組織がソフトウェア開発による運用の現場をサポートする活動を支援する体制がありませんでした。
そのため、業務フローで重要なツールがいつまでもメンテナンスされませんでした。メンテナンスされたとしても、チームとしての対応ではなく、個人での改修となり、そのメンテナンス者が異動などでいなくなってしまうと、その重要性にも関わらず、どうして動いているか把握できる人がいなくなってしまう状況でした。

# 運用チームによるエンジニアリング組織の結成
前述の課題を解決するために、運用チームの中で「ソフトウェアエンジニアリングチーム」略して「SEチーム」が結成されました。ただ、組織としては大きくなく、メンバーも限られた数名だけで。メンバースキルも、サービスチームほどあるわけではありませんでした。

# 運用チームにもエンジニアリング組織ができたことによる効果
当然、すぐに効果があったわけではありませんが、結成したことによる効果は徐々に出つつあります。
運用の現場で使われる重要なツールを見直すことは、運用フローの見直しにも繋がり、業務効率化が進みました。また、社員個人のエンジニアリングスキルアップの場としての価値も生まれつつあります。
また、顧客向けサービス開発へノウハウを転用することもありました。あくまで社内ソフトウェアであるため、そのソフトウェア開発プロジェクト運営に関しても挑戦的に行うことができ、我々の組織だったらどういったスタイルでやっていくのが良いかの検証することができました。

ただ、良いことばかりではありません。運用チームにおけるソフトウェア開発チームの存在意義は常に危ういものです。チームを導入したからと言って革命がおこるわけでもなく、サービスの社内フローの運用の改善が行われたからと言って劇的な売り上げに繋がるわけではありません。私は組織論に関して多くの知識を持ち合わせているわけではありませんが、おそらく無駄なチームと判断する場合があるのも想像できます。
また、チームができたといっても、なかなかメンバー全員がソフトウェア開発に専念できる体制が構築できているとは言えません。どうしてもメンバー不足から構成メンバーが他業務との兼務になってしまっております。また、個人のキャリアパスであったり、チームが目指す未来像をはっきりさせておかないとすぐ存在意義を失ったり、その他出てくる課題は多いです。

# まとめ
運用チームにもエンジニア組織が結成され、そのメンバーとして活動した中で見つけた課題や思ったことを述べてきました。一つはっきりと感じたことは、会社として、組織として、ソフトウェアの内製についての理解と努力が合って成り立つチームだと感じております。そして、この活動が活発になり、さくらインターネットのサービスを利用する方も、サービスを運用するメンバーも快適で自由に想像的な仕事ができるようになっていくことを願っております。
【GPTプロンプト講座基礎編③】プロンプトの応用的な使い方

# §プロンプトエンジニアリング基礎編③
※本記事は執筆にあたり生成AIツールを使用している箇所があります
※プロンプトの基礎部分は生成AIで作成し、具体例や体験談を自分の視点で補完しています

こんにちは。ゆずかきです。

前回は、具体的なプロンプト例を紹介しましたね。今回はその応用編として、特定の目的に合わせたプロンプトのカスタマイズ方法や、さらに高度な使い方について解説していきます。これを読めば、AIとの対話がさらに精度の高いものになるはずです！ぜひ最後までご覧いただけますと幸いです。

　
# §目的別プロンプトカスタマイズの基本

特定の目的に合わせたプロンプトを作成するには、以下のポイントを押さえることが重要です。

- **出力形式を指定する：結果が箇条書きなのか、文章形式なのかを明示します**
- **具体的な制約条件を追加する：「200文字以内」や「初心者向け」といった条件を付け加える**
- **文脈や前提条件を明確にする：AIが正確に応答するために背景情報を提供する**

では、具体例を交えながら解説していきましょう。

　
# §応用的なプロンプト例

- データ分析
AIをデータ分析に活用する際には、具体的な手順や出力形式を指示するのがポイントです。
具体例：
〇「次のデータセットの中から、売上が最も高い商品のトップ5を箇条書きで挙げてください。」
〇「この表の平均値、中央値、標準偏差を計算して、それぞれ簡単に説明してください。」
　
- クリエイティブな文章作成
高度な文章生成には、トーンやスタイルも指定します。
具体例：
〇「次のテーマについて、専門的なトーンで300字以内の紹介文を書いてください。」
〇「親しみやすい口調で、この商品の特徴を説明してください。」
　
- カスタマーサポート
顧客対応を想定したプロンプトでは、具体的なケースを設定すると良い結果が得られます。
具体例：
〇「次の製品の不具合に対して、ユーザーが理解しやすい解決策を箇条書きで提供してください。」
〇「クレーム対応メールの例文を、丁寧なトーンで作成してください。」
　
- 学術的な用途
学術論文や専門的なリサーチには、正確性が求められるため、出典や根拠を含めた回答を指示します。
具体例：
〇「地球温暖化の影響について、信頼性の高いデータを引用しながら解説してください。」
〇「次のトピックについて、最新の学術研究を参照しながらまとめてください。」
　

# §プロンプトの微調整と効果的な活用法

応用的なプロンプトでは、結果が自分の期待と異なることもあります。その場合は、以下の方法で改善を図ります。

- 結果を再確認し、どこが不足しているかを特定する
- プロンプトに補足情報を加え、AIが理解しやすいようにする
- 回答形式を変更し、より明確なアウトプットを求める

たとえば、「次の文章をより簡潔にしてください」というプロンプトで期待通りの結果が得られなかった場合、「この文章を100字以内で簡潔にまとめてください」と変更することで、より的確な回答を得られる可能性があります。
　
**AIにも人間と接するときと同じように、「間違っていたら丁寧に教えて軌道修正してあげる」という地道なことが、実はとっても大切ということですね。**

　
# §まとめ

今回は、応用的なプロンプトの使い方について具体例を用いながら解説しました。特定の目的に合わせてプロンプトをカスタマイズすることで、AIをさらに効果的に活用できるようになります。
　
**🔑 この記事のポイントまとめ**
**出力形式や制約条件を指定せよ → AIに明確なゴールを示すことがカギ。**
**文脈や背景情報を明示せよ → AIの理解を助け、適切な結果を引き出す。**
**応用的な活用法 → データ分析、クリエイティブ作成、カスタマー対応に役立つ。**
**プロンプトを微調整せよ → 結果が意図とズレたら補足情報や形式変更で改善する。**
**AIを「育てる」意識を持つこと → 丁寧に軌道修正しながら結果を最適化する。**
　
次回は、プロンプトエンジニアリングにおける注意点や、最適化を進めるための具体的なテクニックについてお話しする予定です。どうぞお楽しみに！

今回も、ご訪問いただきありがとうございました！
Tauriで、Nmapのデスクトップアプリを作成してみた

# GitHub
フロントエンドは、コンポーネント化せずに、すべてApp.tsxに直接書いています...
https://github.com/mniyk/nmap-gui

# Screen Shot
Port Scanは1～2分くらいかかります.
![nmap-gui.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/498946/5993e473-a004-70be-7711-2656b391f267.gif)

# Motive
この2つを満たす何かを作ってみたかったため
- Rustでデスクトップアプリを作成したかった
- ASM(Attack Surface Management)に関連したツールを作成したかった

# Use Case
保有するIPアドレスやホストで、管理されていないものが公開されていないかを確認する場面や、社内ネットワークの棚卸しを想定しました。

# Tech Stack
- Rust
- Tauri
- TypeScript
- React

# Difficulty
Nmapコマンドを実行する際に、Tauriのプラグインであるtauri_plugin_shellを使用しましたが、プラグインの使い方に躓きました.
go templateでYAMLファイルを生成すると出るエラーをデバッグする方法

# はじめに
go templateでyamlファイルを生成するときのエラーにヤキモキしませんか？
yamlももちろんエラーは出してくれます、くれますが自分は一発で見つけられません。例えば`}`が抜けてるなとかそれだけでもたまに異様にハマります。

普段あまりyamlを書かない他の言語を見ている人からするとそれくらいは流石に…と思う方もいるかもしれません。では実例を紹介します。

例えばkubernetesのdeployment.yamlとかを生成する場合について見ていきましょう。

```yaml:deployment.tpl.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: {{ .Values.appName }}
spec:
  replicas: {{ .Values.replicas }}
  selector:
    matchLabels:
      app: {{ .Values.appName }}
  template:
    metadata:
      labels:
        app: {{ .Values.appName }}
    spec:
      containers: 
{{ if .Values.enableSidecar }}
      - name: sidecar
        image: {{ .Values.sidecarImage }}
{{ end }}
      - name: main
        image: {{ .Values.mainImage }
```

ここに以下のような値を入れて展開します。

```yaml:value.yaml
appName: myapp
replicas: 3
enableSidecar: true
sidecarImage: "sidecar:1.0"
mainImage: "nginx:1.14.2"
```

おや、エラーが出ますね、見ましょう。
```console
Error: template: deployment.tpl.yaml:18: unexpected EOF in operand
```

18行目に出ていますね、単純に18行目をみると`        image: {{ .Values.sidecarImage }}`かな？となります。でもここは間違えてないです。

いやどこやねーん！と心で叫んでしまいます。

実際にエラーが生じているのは最後の行の`        image: {{ .Values.mainImage }`の`}`不足です。わからないですね。このような場合に関する対処を書いておきます。

# 対処法
## 理屈を理解して真面目に行数を見るのをやめる
まず初めに変えるべきは心持ちです。go templateで分岐をしているものをデバッグする際に真面目にエラー文と向き合ってはいけません。
これを知るだけで大分デバッグする時の焦る気持ちが変わります(個人の感想です)

これの原因はyamlがif分岐など動的にyamlファイルを生成することです。
エラーの出力は生成後のyamlファイルの行数であり、この行数が動的に変更されてしまうことが難読化させる一番の原因です。

この原因を踏まえて「これをすればデバッグ楽になるよ！」というほどの解決法はありませんが、何度か直面した身として幾つかの方法を提案しておきます。

## ヤマを張る
元も子もないことですみません、でも割と大事な気がしてます。
大概はインデント、`}`や`:`の不足です。とりあえず目grepして何もないことを確認しましょう。
これはちょっとした設定を付け加えたり追加作業には効果覿面です。

## 条件分岐等動的な部分を固定化してみる
真面目なデバッグ方法ですが、一時的にif文などの動的に生成される部分をコメントアウトします。

```yaml
# if文を一時的にコメントアウトして簡略化
containers: 
# {{ if .Values.enableSidecar }}
      - name: sidecar
        image: {{ .Values.sidecarImage }}
# {{ end }}
      - name: main
        image: {{ .Values.mainImage }
```

これをする利点は問題が絞れることです。
1. この状態でもエラーが出る場合
    この場合にもエラーが出る場合はyamlの構文ミスの可能性が高いです。
    この場合、yamlの構文チェックをします。
    これは例えばonline yaml parserなどにかけるとできます。
    他にもこの状態であればエラー出力の場所とファイル内の場所がずれなくなるため、デバッグが容易になります。

2. この状態でエラーが出なくなる場合
    これはgo templateで追加した動的生成の部分のミスの可能性が高いです。
    動的生成の場所と書き方はだいぶ限られているのでコメントアウトをずらしたりして地道に原因箇所を探してみましょう。
    

# 終わりに
私もたまにめっちゃハマって苦しみます。大概しょうもないミスです。
上記内容は正直クリティカルにデバッグを短縮することができるわけではありません、それでも行数がズレるということを理解するだけで大分自分はデバッグが気持ち楽になりました。
同じように苦しんでいる人が少しでも救われることを祈ってこの記事を締めたいと思います。
git error5

１　どちら側のエラーか勘違いしていた。
２　パスワードの入れ間違えと、Authentificationの変更。
３　最初実行したコマンドの影響

```sh
$ ./up.sh
Cloning into 'kaizen-nagoya'...
Username for 'https://huggingface.co': kaizen-nagoya
Password for 'https://kaizen-nagoya@huggingface.co': 
remote: Password authentication in git is no longer supported. You must use a user access token or an SSH key instead. See https://huggingface.co/blog/password-git-deprecation
fatal: Authentication failed for 'https://huggingface.co/kaizen-nagoya/kaizen-nagoya/'
cp: ./LoRA_template_20241127.jpynb: No such file or directory
warning: could not open directory 'Desktop/': Operation not permitted
warning: could not open directory '.Trash/': Operation not permitted
On branch master
Changes not staged for commit:
  (use "git add/rm <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	deleted:    ../../../anaconda-deep-1.tar

Untracked files:
  (use "git add <file>..." to include in what will be committed)
...

no changes added to commit (use "git add" and/or "git commit -a")
fatal: The current branch master has no upstream branch.
To push the current branch and set the remote as upstream, use

    git push --set-upstream origin master
```
Open Compliance Summit 参加レポート

## Open Compliance Summit 参加レポート

### Open Compliance Summit とは？

[Open Compliance Summit](https://events.linuxfoundation.org/open-compliance-summit/) は，Linux Foundationが主催するイベントで，例年 Open Source Summit Japan の直後に日本で開催されています。2024年は10月30日～31日の2日間で開催されました。参加者は120人超で過去最大規模の人数でした．
次回の日程も公表されていて、2025年は2025年12月11日～12日に東京で開催されます (https://events.linuxfoundation.org/open-compliance-summit-2025/)

本イベントはオープンソースソフトウェアのコンプライアンスやライセンス管理などに関する議論や情報交換を促進することを目的としています．最近では、セキュリティ関係、組織構築(OSPO)、SBOM、などの話題も豊富です。
イベントはLinux Foundationのメンバーか招待制(申込時に招待を受けられます)で、[チャタムハウスルール](https://ja.wikipedia.org/wiki/%E3%83%81%E3%83%A3%E3%82%BF%E3%83%A0%E3%83%8F%E3%82%A6%E3%82%B9%E3%83%AB%E3%83%BC%E3%83%AB)で開催されています。チャタムハウスルールというと、あまり聞き慣れない用語かもしれませんが、「会議に参加する人は誰でもディスカッションの情報を自由に使用できるとし、ただし特定のコメントをした人を明らかにすることはしない」ことで、自由で闊達な議論を促す・期待することができます。

### Open Compliance Summit 2024

イベントとしてはチャタムハウスルールですが，[プログラムは公開されています．](https://events.linuxfoundation.org/open-compliance-summit/program/schedule/)

2024年のKeynoteでは，「Global Compliance Trends」で最近のOSS Compliance関係の話題やトピックの紹介があり，「Compliance in Japan」では OpenChain JapanWG とSubGroupの活動紹介がされました．
「The Dark Ages of GPL Compliance 20 Years Ago」では，過去にGPL Violationsで，OSSコンプライアンス推進に取り組まれていた方が，ここ20年のさまざまなトピックを語ってくれました．
また富士通のKeynoteでは，富士通がISO/IEC 18974認証を取得したことが紹介されました．こちらはOpenChainプロジェクトの[Newsで紹介されています](https://openchainproject.org/news/2024/10/30/fujitsu-isoiec-18974-conformance)

Sessionでは，「Open Source as a Strategic Assert in M&A」と題したパネルディスカッションや，「Protecting Open Source and Companies' Intellectual Property Rights」，「Compliance and Integrity in the Software Supply Chain with Software Heritage」のような題目で，ライセンスコンプライアンスだけでなく，広く「Open Compliance」に関係する話題がありました．
「Compliance and Integrity in the Software Supply Chain with Software Heritage」はOpenChainのページで[スライドが公開されています](https://openchainproject.org/news/2024/11/05/software-heritage-ocs2024)

また，今回は全体を通して，SBOMやAI と OSS Compliance を関連させた話題も多く，最近のトピックとして各社や参加者の興味をひくキーワードになっていると感じました．

### 参加してみて
私は10年前くらいから継続してOpen Compliance Summitに参加していますが，今回も非常に盛況だったと思います．KeynoteやSessionを聞くだけでなく，コーヒーブレークやランチタイムに講演者や他の参加者と話をする時間があり，単なる参加者(聴講者)ではなく，ネットワーキングをしたり，プログラムにはない様々な情報を得られる場になっていると思います．(余談ですが，コーヒーブレークで話が盛り上がっている人が多すぎて，次のSessionが始まる際に 「次が始まるよ～．コーヒーブレークは終わりだよ～」と，イベント進行役でもあるShaneさんが，参加者のみなさんを毎回セッション会場に戻るのを促しているくらいでした)

Open Compliance Summit は，オープンソースソフトウェアのコンプライアンスやそれに関する話題に関する国際的イベントとしては最大級のイベントだと思います．このあたりの話題に関心がある方は，ぜひ，参加してみてください！
React　reduceについて

アプリ開発中躓いたreduceの基本的な使い方について共有させていただきます。

### reduceの基本的な使い方
計算で使用されるのが分かりやすい

```.jsx
  const [records, setRecords] = useState([
    { id: 1, title: "勉強の記録１", time: 1 },
    { id: 2, title: "勉強の記録２", time: 3 },
    { id: 3, title: "勉強の記録３", time: 5 },
  ]);

 const totalTime = records.reduce((acc, record) => {
    return acc + parseInt(record.time);
  }, 0);
// accには初期値、その後は計算結果の値が入ります
// recordには配列の数字が順に入ります。
```
下の表が理解しやすいです。

| 回数 | accの値 | recordの値 |返値|
|:-----------|------------:|:------------:|:----|
| 初回       | 0        | 1         |1|
| 1回目     | 1      | 3       |4|
| 2回目      | 4        | 5         |9|

# JISOUのメンバー募集中！
プログラミングコーチングJISOUでは、新たなメンバーを募集しています。
日本一のアウトプットコミュニティでキャリアアップしませんか？
興味のある方は、ぜひホームページをのぞいてみてください！
▼▼▼

https://projisou.jp
データベース設計 E-R図とデータモデルの表現

## はじめに

こんにちは！今日はE-R図（Entity-Relationship Diagram, 実体関連図）についてまとめます。E-R図は、データ中心アプローチにおける概念データモデルを可視化し、エンティティ（実体）とリレーションシップ（関係）を明確にします。これにより、データ構造や相互関係を理解しやすくなり、論理・物理データモデルへの移行や実装時のガイドとなります。

## 本文

### E-R図の基本

E-R図は、以下の基本要素からなります。

- **エンティティタイプ（実体型）**：データとして管理する物や概念。長方形で表記し、その中にエンティティタイプ名を記入します 
- **リレーションシップ（関連）**：エンティティタイプ同士の関係性を示します。線で結び、カーディナリティ（1対1、1対多、多対多など）を明示します

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634922/fade84dc-f7de-a55c-2443-42dcd078ce1e.png)

「顧客」エンティティと「受注」エンティティは、1人の顧客に対して複数の受注が紐づくため、1対多の関係を示します。

### カーディナリティと表記法

- **1対1（1:1）**：片方の主キーをもう一方で外部キーとして保持  
- **1対多（1:N）**：1側の主キーを多側で外部キーとして保持
- **多対多（M:N）**：直接テーブル同士を多対多に結ぶ関係は存在しないため、中間となる「関連エンティティ」を導入して1対多＋多対1に分解するケースが多い

存在必須性を表すため、必須の場合は「●（塗りつぶし）」、任意の場合は「○（空）」で表す記法もあります（記法はツールや手法による差異あり）

```
(必須)●----○(任意)
```

左側が必須、右側が任意であることを示します。

### 多対多リレーションシップと関連エンティティ

多対多関係は、関係モデルでは直接表現できません。そのため、多対多を解消するための関連エンティティを導入します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634922/87ab1bca-7f0d-3ddf-6aec-6fa8589d4434.png)


「商品」-「受注」の間に「商品受注明細」という中間エンティティを設けることで、多対多を1対多と多対1に分解します。

### UMLによる表記

オブジェクト指向開発で用いられるUML（クラス図）を用いる方法もあります。

- エンティティタイプをクラスとして表し、リレーションシップをクラス間の関連として描画
- カーディナリティは多重度で表し、`1`, `0..1`, `1..*`, `0..*`などを用います
- 多対多は`*..*`で表現し、必要に応じて関連クラス（中間クラス）を導入します

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634922/e570f81c-8335-35ba-9c95-adc7a25c1d0b.png)

### スーパータイプ・サブタイプ（汎化・特化）

E-R図では、汎化・特化関係（スーパータイプ・サブタイプ）を表すことができます。

- **スーパータイプ**：共通属性・共通主キーを持つ上位概念
- **サブタイプ**：スーパータイプを特定化（特化）した下位概念
- サブタイプ間に排他性（あるタプルは1つのサブタイプにしか属さない）や共存性（複数サブタイプに所属可能）を表すことが可能
- 完全・不完全サブタイプ：すべてのスーパータイプのタプルがサブタイプに存在する場合は完全、一部がどのサブタイプにも属さない場合は不完全。サブタイプが1つしかないスーパータイプは包含関係という

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634922/d180098f-310b-c5ed-6757-dcec12db98f2.png)

ここで△は汎化・特化を示す記号。  
実装時にはサブタイプごとにテーブルを分けたり、1つのテーブルでタイプ区分列を設けて管理するなど、状況によって様々です。

### 階層構造

同じエンティティ間で階層構造（親子関係）を表すことも可能です。  
たとえば「組織」エンティティ内で上位部門と下位部門が1対多の関係で表せます。  


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634922/e050da81-5d52-76f5-3242-31ed96272135.png)


組織テーブルには`親組織ID`カラムを持たせることで、ツリー構造を表現できます。

### 同じエンティティ間の複数リレーションシップ

同じ2つのエンティティ間に、複数の異なるリレーションシップが存在する場合も、E-R図上で複数の関係線を描くことで表現できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634922/1ab71350-64b5-d438-607c-6857d7c4edc0.png)

上司-部下関係と、メンター-メンティー関係など、同一エンティティ間で異なる意味の関係を2本のリレーションで表します。

## まとめ

今回は、E-R図を用いたデータモデルの表現方法を整理しました。

- E-R図でエンティティタイプとリレーションシップを明確にすることで、データ構造を直感的に理解可能になります
- カーディナリティ、関連エンティティ、スーパータイプ・サブタイプ、階層構造など、様々な概念を図示して問題を早期発見・解決できます
- UMLクラス図を用いる方法や実装時のテーブル分解など、実装フェーズへの橋渡しとしても有効です

E-R図の理解は、データベース設計やアプリケーション開発において重要です。
次世代のAIブラウザ Arc Browser (アークブラウザ) を使いこなす

# はじめに
こんにちは、HRBrainでバックエンドエンジニアをしている蔭山です。
今回はHRBrain AdventCalendar2024 20日目の記事です。

https://qiita.com/advent-calendar/2024/hrbrain

今回は最近使い始めた**Arc Browser**というブラウザがとても便利だったので、紹介も兼ねて記事を書くことにします。
# Arc Browserとは
[The Browser Company](https://thebrowser.company)という会社が開発している新しいブラウザです。Chromiumベースで作られておりChrome拡張機能も利用可能でありながら、Chromeとは大きく異なるUI、AIを取り入れた機能を多く持っています。

個人的にはOperaやVivaldiと同じような系統だと思っていたのですが、トラックパッドとの親和性が高く一味違うUIとなっていて使い勝手が良くハマッています。

https://arc.net

:::note info
本記事ではArc Browserの便利機能の紹介にとどめています。
ぜひ実際にインストールしてあなただけの使い方を探っていただけたら嬉しいです！
:::

# Arc Browserの便利機能

## AIによるTidy機能で自動整理
ArcにはデフォルトでAIによる整理機能が用意されています。
### ① 雑多に開かれたTabの自動整理

Tidyボタンを押すと、AIによって自動で分類と整理を行うことができます。
| 雑多に開かれたタブが → | Tidyによってドメイごとに整理された！ |
|:-:|:-:|
| ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2605179/2bb15015-92ca-bb8c-b771-95395145540e.png) |  ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2605179/4174f09f-a890-b40a-03c2-db8b392e4c68.png) |

### ② Pinned(ブックマーク)時にTabの長い名前を自動で要約

![qiita_bookmark_novf.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2605179/6df79739-c6f8-829d-9722-e065ce2f5e72.gif)

## Linkをポップアップウィンドウで開く
Slack等でリンクをクリックするとChromeであれば新しいタブが開くと思います。しかし、Arcでは「Keep」という機能でポップアップウィンドウとして開くことができます。

![qiita_popup_novf.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2605179/9738d78c-fef6-7494-577b-be8e7e01d324.gif)

ポップアップ後にブラウザで開くもよし、そのまま閉じるのもよし。

:::note info
さらに蔭山イチオシとして、ポップアップウィンドウは「戻る」ジェスチャーでそのまま閉じることができるため、
「ちょっとリンク先を見たかっただけ」なときの**タブ勝手に増えていく問題**を解決できます！
:::

![qiita_popup_2_novf.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2605179/2115fbb5-b655-737f-ab35-b5aecdb35846.gif)

## Finderを使わずにブラウザから直接ファイルをアップロードする
ブラウザに動画をローカルからアップロードする際、一々Finderを開いてアップロードするのって大変ですよね。

Arcではブラウザ内にファイルエクスプローラーが用意されているため、Finderを経由せずそのままドラッグ&ドロップでアップロードできます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2605179/7a703f8a-48f7-476b-e232-715b492c196e.png)


ミニ機能ですが何気に利用する機会も多く、蔭山も気に入っている機能です。

# 終わりに
今までVivaldiを使い続けてきた私ですが、ついにArcに乗り換えてしまいました。
AI機能をふんだんに取り入れたブラウザはここまで細かい部分に手が届くのかと驚いています。

最近、開発元から新たなAIネイティブブラウザ「Dia」の情報が出ており、こちらも非常に楽しみです。

https://japan.zdnet.com/article/35226860/

使えるものはどんどん使いこなして、快適なブラウジング生活を送っていきたいですね！

# 参考
https://arc.net

https://resources.arc.net/hc/en-us/articles/19335160678679-Arc-Max-Boost-Your-Browsing-with-AI

# PR
HRBrainではエンジニアの採用も積極的に行なっているので、良ければぜひ応募ください！
一緒にAIが描く便利な未来について語っていきましょう！

https://www.hrbrain.co.jp/recruit
キャリアブレイク中のライフスタイル見直し②　食事

健康を目的としたキャリアブレイク中のライフスタイル見直し。今日は、その中でも一番時間がかかる要素、食事です。

# 食事の準備
食事は1日3回食べます。睡眠よりも回数が多く、また準備や後片付けが面倒な作業です。でも、やらないと健康は維持できません。ここにどれぐらい時間を割くかは、ライフスタイルにおける大きな課題です。そして食材がないと食事が作れません。どのぐらいの頻度で買い物に行くかは、各家庭によって大きく違うかと思います。

# スーパーの頻度
うちは最寄りに大きなイオンがあります。基本的には殆どの買い物はここで済ませます。日曜日に行って、5日分ぐらいの食材を買ってくるのが基本です。たまに水曜日とかに買い足すこともあります。先ずはこのスタイルが最善かの検討をしました。

# 毎日行くか
まとめて買って何日か過ごすか、毎日行くか。理想的には毎日行くと思っていました。特に魚などはあまり日が置けないので、出来れば今日買ったものを今日料理する方が美味しいです。あと栄養的にもその日に買ったものが一番栄養素は高いようです。実際、しばらく最低限だけ買って、数日毎に行くスタイルにしたり、安い時はまとめて買ったり色々試してみました。

# 時間がかかる
でも、自然に元のスタイルに戻っていきました。やっぱり時間の使い方として、勉強時間を取りたい状態で毎日スーパーに行くのは結構シンドかったです。買い物時間も決めづらいのでスケジュールにしづらいのがよりハードルが上がります。毎日行くのは老人になってからにしようかなｗ。

# 食べる時間
食べる時間は、6時30分、12時、18時にしました。朝の読書が終わった後に食べて、そこから12時間以内に食事を取ることを少し意識しました。実際最近はこの時間になるとしっかりお腹が空いてくるようになって、呑みで19時とかになるとかなりお腹が空いていますｗ。何となく今までより健康的にお腹がすているように感じます。

# 栄養
栄養の時も書きましたが、食事は赤青黄は意識しています。特に朝ごはんはちゃんとこだわって用意しています。ただ栄養に関してはこれ以上はやっておらず、例えば我が家の食卓には海藻や豆が少ないですが、何度か意識して買ってみましたが、続きませんでした。この辺必要なものを一日で全部取るようにするのは結構ハードルが高い作業です。

# 飲み物
自分はカフェインを飲むと寝られるなくケースがたまにあるので、意識的にノンカフェインを多めに取っています。殆どが麦茶で、コーヒーは元々飲みません。紅茶は1日1杯飲むか飲まないかぐらいです。働いている時はお茶を1日2ℓ飲んでましたが、そこから比べると少し減りました。なるべくのどの渇きを感じないようには意識して飲んでいます。

# まとめ
はい。もう少し改善しているつもりでしたが、改めて文章にするとも、そこまで頑張って食事改善はしてないですね。。ただ、外食はかなり減っているので、それだけでも健康的な食事にはなっていると思います。あと時間も改善したので、体感的にも良くなっているようには思えています。栄養学の勉強もまだ途中なので、細かく意識はしていって、来年の健康診断などで、良い結果が出るように意識はしていこうと思います。しょくじｈちょっと長期戦かな。
git error4

なぜか、現在いるdirectoryから実行してくれない。cd . を足してみた。

```sh
$ cat up.sh
# git lfs install
cd .
git clone https://huggingface.co/kaizen-nagoya/kaizen-nagoya
cd kaizen-nagoya
cp ./LoRA_template_20241127.jpynb .
git add .
git commit -m "Add model"
git push

$ ./up.sh
fatal: destination path 'kaizen-nagoya' already exists and is not an empty directory.
cp: ./LoRA_template_20241127.jpynb: No such file or directory
warning: could not open directory 'Desktop/': Operation not permitted
warning: could not open directory '.Trash/': Operation not permitted
On branch master
Changes not staged for commit:
  (use "git add/rm <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	deleted:    ../../anaconda-deep-1.tar

Untracked files:
  (use "git add <file>..." to include in what will be committed)
...

no changes added to commit (use "git add" and/or "git commit -a")
fatal: The current branch master has no upstream branch.
To push the current branch and set the remote as upstream, use

    git push --set-upstream origin master
```

cdを絶対pathにしてみた。

```sh
$ cat up.sh
# git lfs install
cd /Users/ogawakiyoshi/llm
git clone https://huggingface.co/kaizen-nagoya/kaizen-nagoya
cd kaizen-nagoya
cp ./LoRA_template_20241127.jpynb .
git add .
git commit -m "Add model"
git push
$ ./up.sh
fatal: destination path 'kaizen-nagoya' already exists and is not an empty directory.
cp: ./LoRA_template_20241127.jpynb: No such file or directory
warning: could not open directory 'Desktop/': Operation not permitted
warning: could not open directory '.Trash/': Operation not permitted
On branch master
Changes not staged for commit:
  (use "git add/rm <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	deleted:    ../../anaconda-deep-1.tar

Untracked files:
  (use "git add <file>..." to include in what will be committed)
...
    git push --set-upstream origin master
```

ファイルがないみたいで、絶対Pathの場所にコピーしてみた。
    
```sh
$ ./up.sh
fatal: destination path 'kaizen-nagoya' already exists and is not an empty directory.
cp: ./LoRA_template_20241127.jpynb: No such file or directory
warning: could not open directory 'Desktop/': Operation not permitted
warning: could not open directory '.Trash/': Operation not permitted
On branch master
Changes not staged for commit:
  (use "git add/rm <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	deleted:    ../../anaconda-deep-1.tar

Untracked files:
  (use "git add <file>..." to include in what will be committed)
...
no changes added to commit (use "git add" and/or "git commit -a")
fatal: The current branch master has no upstream branch.
To push the current branch and set the remote as upstream, use

    git push --set-upstream origin master
```

# Ref

git error
https://qiita.com/kaizen_nagoya/items/d4b08ab5e13d7c4efde1

システムが落ちた。自分のPCからやろうとした。

git error2
https://qiita.com/kaizen_nagoya/items/0d6b32e9a20de6825c4a

フォルダが作ってなかった。ファイルをコピーしてなかった。

git error3
https://qiita.com/kaizen_nagoya/items/bb18c0cbad0c7d0671a3
ADF検定とDF検定の違いとADF検定の導出手順を分かりやすく解説！

### **はじめに**
時系列データを扱う際に重要なのが「データが定常か非定常か」を判断することです。データが定常でないと、回帰分析や予測の結果が信頼できなくなります。定常性を確認するための代表的な検定が **DF検定** と **ADF検定** です。本記事では、この2つの違いと、ADF検定の導出手順をステップバイステップで解説します。
※この記事は、ChatGPTの出力を基に作成しています。

---

### **1. ADF検定とDF検定の違い**

まず、DF検定とADF検定の共通点と違いを整理します。

#### **共通点**  
どちらも「データが**単位根**を持つかどうか」を検定し、**定常か非定常か**を確認します。  
- **定常**：データの平均やばらつきが時間とともに変わらない状態。  
- **非定常**：データの平均やばらつきが時間とともに変わる状態（例：インフレによる物価の上昇）。

#### **DF検定（ディッキー・フラー検定）**  
- シンプルなデータ向け。  
- 自己相関（データが前の値に影響されること）を考慮しない。

#### **ADF検定（拡張ディッキー・フラー検定）**  
- DF検定を拡張したもの。  
- **自己相関を考慮**し、より複雑なデータにも対応。  
- 過去のデータ（遅れ項）を追加して、自己相関の影響を除去する。

---

### **2. ADF検定の導出手順**

ADF検定は次のステップで実施します。

---

#### **ステップ 1：仮説の設定**
- **帰無仮説 $\ H_0 \$**：データは単位根を持ち、非定常である。  
- **対立仮説 $\ H_1 \$**：データは単位根を持たず、定常である。

---

#### **ステップ 2：モデルの設定**

ADF検定では、次の回帰モデルを使用します。

$\
\Delta y_t = \alpha + \beta t + \gamma y_{t-1} + \sum_{i=1}^p \delta_i \Delta y_{t-i} + \epsilon_t
\$

- $\ \Delta y_t \$：データの差分$\( y_t - y_{t-1} \)$  
- $\ \alpha \$：定数項  
- $\ \beta t \$：時間トレンド  
- $\ \gamma y_{t-1} \$：単位根の有無を調べる部分  
- \$ \sum_{i=1}^p \delta_i \Delta y_{t-i} \$：遅れ項（自己相関を除去）  
- \$ \epsilon_t \$：誤差項  

---

#### **ステップ 3：単位根検定の考え方**

- **単位根がある場合**：\$\gamma = 0\$ に近い（非定常）。  
- **単位根がない場合**：\$\gamma < 0\$（定常）。  

ADF検定では、\$\gamma\$ が統計的に0でない（負の値）かを検定します。

---

#### **ステップ 4：回帰分析の実施**

1. **差分を計算**：元のデータから1次差分 \$ \Delta y_t \$ を取る。  
2. **遅れ項を設定**：適切な遅れの数 \$ p \$ を選ぶ（AICやBICなどを用いる）。  
3. **OLS回帰**：上記モデルを最小二乗法（OLS）で推定し、係数 \$\gamma\$ を求める。  
4. **t統計量を計算**：\$\gamma\$ のt統計量を以下の式で計算します。

   \$
   t_{\gamma} = \frac{\hat{\gamma}}{\text{標準誤差}(\hat{\gamma})}
   \$

---

#### **ステップ 5：臨界値と比較**

1. **t統計量の算出**：ステップ4で計算した \$ t_{\gamma} \$ を使います。  
2. **臨界値表を参照**：ADF検定には専用の臨界値表があり、有意水準（1%, 5%, 10%）ごとに異なります。  
3. **判定**：
   - **\$ t_{\gamma} \$ が臨界値より小さい** → 帰無仮説を棄却 → **定常**。  
   - **\$ t_{\gamma} \$ が臨界値より大きい** → 帰無仮説を棄却できない → **非定常**。

---

#### **ステップ 6：結果の解釈**

- **帰無仮説を棄却**：データは単位根を持たず、定常である。  
- **帰無仮説を棄却できない**：データは単位根を持ち、非定常である。  

---

### **3. まとめ：ADF検定はDF検定のパワーアップ版！**

ADF検定はDF検定の拡張版であり、自己相関を考慮して複雑なデータに対応できる点が大きな違いです。導出手順では、データの差分を取って回帰分析を行い、t統計量を臨界値と比較することで定常性を検定します。

---

### **おわりに**
ADF検定は時系列分析において必須の手法です。単位根の有無を正確に判定することで、データの特性を理解し、適切なモデルを構築できます。定常性の確認が必要な場合は、ぜひADF検定を使ってみてください！
Amplify Gen2でドメイン制限付きGoogleログインを実装する方法

## はじめに

Webアプリケーションでは、特定のドメインのメールアドレスを持つユーザーのみにアクセスを制限したいケースが多くあります。本記事では、Amplify Gen2を使用して、ドメインを制限したGoogleログインの実装方法について解説します。

## 目次

1. 実装の概要
2. 認証設定の基本構成
3. ドメイン制限の実装
4. 環境変数の設定
5. 動作確認方法

## 1. 実装の概要

Amplify Gen2では、GoogleログインとPre Sign-upトリガーを組み合わせることで、特定のドメインのメールアドレスを持つユーザーのみにアクセスを制限することができます。

## 2. 認証設定の基本構成

まず、`auth/resource.ts`でGoogleログインの基本設定を行います。

```typescript:amplify/auth/resource.ts
import { defineAuth, secret } from '@aws-amplify/backend'
import { preSignUp } from './pre-sign-up/resource'

export const auth = defineAuth({
  loginWith: {
    email: true,
    externalProviders: {
      google: {
        clientId: secret('GOOGLE_CLIENT_ID'),
        clientSecret: secret('GOOGLE_CLIENT_SECRET'),
        scopes: ['email'],
        attributeMapping: {
          email: 'email',
        },
      },
      callbackUrls: ['http://localhost:3000/', 'https://your-domain.amplifyapp.com/'],
      logoutUrls: ['http://localhost:3000/', 'https://your-domain.amplifyapp.com/'],
    },
  },
  triggers: {
    preSignUp,
  },
})
```

ここでのポイント：
- `clientId`と`clientSecret`は環境変数として管理
- `scopes`で`email`を指定して、メールアドレスを取得
- `callbackUrls`と`logoutUrls`には適切なURLを設定

## 3. ドメイン制限の実装

`pre-sign-up/handler.ts`でドメイン制限のロジックを実装します：

```typescript:amplify/auth/pre-sign-up/handler.ts
import { env } from '$amplify/env/pre-sign-up'
import type { PreSignUpTriggerHandler } from 'aws-lambda'

export const handler: PreSignUpTriggerHandler = async (event) => {
  const email = event.request.userAttributes['email']

  if (
    !email.endsWith(env.ALLOW_DOMAIN_1) &&
    !email.endsWith(env.ALLOW_DOMAIN_2)
  ) {
    throw new Error('Invalid email domain')
  }

  return event
}
```

このハンドラーは：
- ユーザーのメールアドレスを取得
- 許可されたドメインかチェック
- 許可されていない場合はエラーをスロー

## 4. 環境変数の設定

`pre-sign-up/resource.ts`で環境変数を定義します：

```typescript:amplify/auth/pre-sign-up/resource.ts
import { defineFunction } from '@aws-amplify/backend'

export const preSignUp = defineFunction({
  name: 'pre-sign-up',
  environment: {
    ALLOW_DOMAIN_1: 'example.com',
    ALLOW_DOMAIN_2: 'example.co.jp',
  },
})
```

- 許可するドメインを環境変数として定義
- 複数のドメインを設定可能

## 5. 動作確認方法

実装後の動作確認ポイント

1. 許可されたドメインのメールアドレスでログインできることを確認
2. 許可されていないドメインではエラーが表示されることを確認
3. Googleログインのフローが正常に機能することを確認

## まとめ

Amplify Gen2を使用することで、以下のような特徴を持つドメイン制限付きGoogleログインを実装できます。

- 特定ドメインのユーザーのみにアクセスを制限
- 環境変数による柔軟な設定管理
- Pre Sign-upトリガーによる確実な制御

この実装により、セキュリティ要件に応じたユーザー認証を実現できます。

## 参考リンク

https://docs.amplify.aws/nextjs/build-a-backend/auth/concepts/external-identity-providers/

https://developers.google.com/identity/protocols/oauth2

https://zenn.dev/metalmental/articles/b702b83689b48a
Rspecのフィルター

>### Filtering
#### RSpec.configureへ渡されるブロックで定義した`before`,`after`そして`around`はフィルターとして使ってexampleかつ・またはgroupに特定のexampleを限定することができる
>before, after, and around hooks defined in the block passed to RSpec.configure can be constrained to specific examples and/or groups using metadata as a filter.
```rb
  RSpec.configure do |c|
    c.before(:example, :type => :model) do
    end
  end

  RSpec.describe "something", :type => :model do
  end
```
#### フィルタリングされた`:context`フックはメタデータの一致で個々のexampleへ適用されることに注意してください,実際にはすべてのexampleは一つのexampleを含むシングルトングループを持っている(ルビーのシングルトンクラスと類似している)
>Note that filtered :context hooks will still be applied to individual examples with matching metadata – in effect, every example has a singleton example group containing just the one example (analogous to Ruby’s singleton classes).

#### 唯一のシンボルを使って特定のメタデータも使うことができます
>You can also specify metadata using only symbols.

https://rspec.info/features/3-13/rspec-core/hooks/filtering/#:~:text=before%2C%20after,using%20only%20symbols
小さな学生が独学でプログラミングができるようになるまで

## プロフィール
小学６年生
何かの障害持ち
得意言語（C#,JS,CSS）

:::note warn
注意
HTMLは言語だと思っていないので入れてません。
CSSも言語じゃないっていう人もいるかもだけど
:::

## 始めたきっかけ（４年のころ）
もともとWixでサイト作ってたんですが、いろいろ問題起こして作れなくなったので、htmlで自分で作り始めたのがきっかけです。　そのころはCSS使えませんでした。

## ５年生のこと
#### 年表
・CSSをちょっと使えるようになった
・C#を始める
・Original Clockというアプリをつくる
・MY Widgetというアプリをつくる
・[U Software Group](https://usoftware-gr.github.io)を設立

CSSの使い方すら理解してなかった僕でしたが、作っていくにつれて、「枠付けたいな」、「角丸くしてえな」など思って、Googleで「html枠」って検索したのがCSSを使い始めたきっかけです。
当時のサイトは[http://khp.jp/dango/](http://khp.jp/dango/)です。　まあ、だいぶ変えたので過去のやつではありません。
５年の中間らへんの時に、C#のWinformsを始めました。
そして、Original Clockという、時計アプリを開発しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3897258/2a9a7210-83c2-0625-6571-aef29f95817e.png)
※現在も開発中です。もしよければダウンロードしていただくとうれしいです。
https://ku-daa.web.app/original_clock.html

:::note info
Winformsとは？
GUIアプリを作れるフレームワークです。
:::
## 6年生（2024/12/17までのこと）
#### 年表
・Original Clockをuptodownに公開！！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3897258/5981ad7d-dc02-b832-cdda-7887f191b7f4.png)

・[壁紙をダウンロードできるサイト](https://umaidango.github.io/kabegami/)を作った
・PHPで掲示板をつくる
・Original Audio Player公開
・CHIPI CHA!公開
・Fox Code Editor公開


## 振り返り
今年はいろいろなことに挑戦できたと思います。
Fox Code Editorがいろいろ大変でした。

なんかタイトルと脱線してるところや、抜ける部分が多いですがご容赦ください。
音を出すと MATLAB が落ちる！？ ～ 解決に2週間近く掛かった話

[<B>MATLAB/Simulink Advent Calendar 2024</B>](https://qiita.com/advent-calendar/2024/matlab)に参加しました。

カレンダー2の12/17分として追加しました。

・使用ツール
<dt>　MATLAB</dt>
<br>

<H4><a href="https://note.com/leftbank/n/n747f65b48964"</a> [<B>note</B>]にUpしました。</H4>