OmniAICreator/Qiita-1.07M huggingface dataset:
TypeScript - カレンダー日付の妥当性確認

FullCalendarライブラリで日付の移動をするときに、2/31や4/31などカレンダー上存在しない日付であるかチェックをする関数をどうやって実装するか調べました。

参考：

https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Date/Date

■背景
・カレンダーの操作は、年・月・日がそれぞれ独立して操作できる状態。
・1/31の状態から月を１月進めて2/31へ移動したりすると、カレンダーの表示が３月になったりした。
・カレンダーのプログラムへ引数(年・月・日)を渡す前に、その値がカレンダーとして妥当性があるか判別をしたい。


■関数サンプル
```Typescript:sample1.ts
// 引数は、年・月・日の３つ
// 戻り値は、true:カレンダー日付として存在、false:カレンダー日付として存在しない
const isValidDate = (year: string | number, month: string | number, day: string | number) => {
  let result = false
  const checkDate = new Date(year + '/' + ('0' + month).slice(-2) + '/' + ('0' + day).slice(-2))
  // カレンダーの日付として妥当であるか確認
  if (('0' + (checkDate.getMonth() + 1).toString()).slice(-2) == ('0' + month).slice(-2)){
    result = true
  } else {
    result = false
  }
  return result
}
```
Dateオブジェクトを生成した場合、カレンダーに存在しないデータとならないことを利用しています。
例えば、Date('2023/02/29')で生成した場合、2月に29日が存在しないため、Dateオブジェクトとしては、3月１日(Wed Mar 01 2023 00:00:00 GMT+0900 (日本標準時))のデータとなります。
引数で渡した月の値とDateオブジェクトの月データが異なっていればカレンダーに存在しない月として判定しています。

■改善点
Dateオブジェクトを生成するときに「new Date('1/01/41')」とすると、2041/1/1(Tue Jan 01 2041 00:00:00 GMT+0900 (日本標準時))で生成されます。
1年1月41日と解釈すると、カレンダーの日付として存在しないため、関数の結果としては正しくありません。
それぞれの引数を正規表現で判定する方法も別途試してみたいと思いました。
SQLの実行結果を統合したいなら、UNION、UNIONALLが便利らしいよ

# はじめに
SQLのUNION使ってますか？
複数の実行結果を統合したいときに、それぞれエクセルにエクスポートして、列結合して...なんてやり方で無理やり統合したりしてませんよね？
今回はそんな愚かなやり方をしていて先輩に`UNION`を教えてもらった自分が、反省がてら簡単に`UNION`と`UINIONALL`についてまとめてみました。

# UNIONって何？
2つのSQLの実行結果を統合する構文のことです。
```sql
SELECT 列名1, 列名2 FROM テーブル1
UNION
SELECT 列名1, 列名2 FROM テーブル2;
```
このように書くことができます。
具体的に、実行結果がそれぞれ以下のようになるSQLがあったとします。

| id  | 好きな食べ物 |
| --- | ------------ |
| 1   | ラーメン     |
| 2   | パスタ       |
| 3   | うどん       |


| id  | 好きな食べ物 |
| --- | ------------ |
| 10   | カレー     |
| 20   | ハヤシライス       |
| 30   | ガパオライス       |

これを`UNION`で結合すると
| id  | 好きな食べ物 |
| --- | ------------ |
| 1   | ラーメン     |
| 2   | パスタ       |
| 3   | うどん       |
| 10   | カレー     |
| 20   | ハヤシライス  |
| 30   | ガパオライス|

となります。便利ですね。

# UNIONALLとはどう違うの？
**重複が削除されるかどうか**という違いがあります。
`UNION`を使用した場合重複結果が削除されるのに対し、`UNIONALL`では重複結果は削除されません。
例えば、以下のような実行結果を`UNION`で統合した場合

| id  | 好きな食べ物 |
| --- | ------------ |
| 1   | ラーメン     |
| 2   | パスタ       |

| id  | 好きな食べ物 |
| --- | ------------ |
| 1   | ラーメン     |
| 20   | ハヤシライス |

このように表示されます。
| id  | 好きな食べ物 |
| --- | ------------ |
| 1   | ラーメン     |
| 2   | パスタ       |
| 20   | ハヤシライス |

しかし、`UNIONALL`で統合した場合
| id  | 好きな食べ物 |
| --- | ------------ |
| 1   | ラーメン     |
| 2   | パスタ      |
| 1   | ラーメン     |
| 20   | ハヤシライス |

と表示されます。
重複削除を必要としない場合は、`UNIONALL`の方が高速なのでそちらを使うことをお勧めします。

# 終わりに
SQLには便利な構文が意外と沢山ありますね。そんな便利機能を教えてくれる先輩の存在はありがたい限りです。感謝の心を忘れてはいけません🙏
先輩曰く、`UNION`後の`ORDER BY`について調べてみても面白いとのことなので今度まとめてみます！（予定）
プログラムを書きたいけど作りたいものがない人へ

## Agenda
* はじめに
* 対象読者
* 競技プログラミング
* 機械学習コンペ
* 常設CTF
* Developer Roadmaps
* 一緒に働く仲間を募集中です！

## はじめに

7日目担当のO84です！

私は勉強始めたての時に **「プログラム書きたいけどまず何からやったらいいのかわからない！」** ってなってたので、
独学で同じ状況に陥った方向けにおすすめの課題をまとめました！

## 対象読者

プログラムを書く経験を積みたいが、作るもののアイデアが湧かなくて困ってる人向け

## 競技プログラミング

* [yukicoder](https://yukicoder.me/)
* [paizaスキルチェック](https://paiza.jp/challenges/info)
* [AtCoder](https://atcoder.jp/)
* [AIZU ONLINE JUDGE](https://judge.u-aizu.ac.jp/onlinejudge/)

<details><summary>is 何</summary>

[競技プログラミングとは (wikipedia)](https://ja.wikipedia.org/wiki/%E7%AB%B6%E6%8A%80%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0)

</details>

<details><summary>期待できる効果</summary>

関数規模のプログラムを書く力が身に付きます。

また、難易度の高い問題では愚直な処理を書くと実行制限時間に間に合いません。
そのため、解く過程で処理を高速化する手法が身につきます。

</details>

## 機械学習コンペ

https://www.kaggle.com/competitions

https://www.aicrowd.com/

https://signate.jp/about

<details><summary>is 何</summary>

[Kaggle (wikipedia)](https://ja.wikipedia.org/wiki/Kaggle)

</details>

<details><summary>期待できる効果</summary>

機械学習の分野では、誰かが作った優秀なライブラリに頼る機会が多いため、
イイ感じのライブラリを探す、調べる、使いこなすスキルが身につきます。

あと賞金が出るコンペもあるので、ガチで取り組めばお金も入ってきます。

</details>

## 常設CTF

https://celtf.com/

https://www.hackthebox.com/

https://tryhackme.com/

https://cryptohack.org/

https://overthewire.org/wargames/

https://www.vulnhub.com/

https://pentesterlab.com/

https://www.root-me.org/

<details><summary>is 何</summary>

[CTF (wikipedia)](https://ja.wikipedia.org/wiki/%E3%82%AD%E3%83%A3%E3%83%97%E3%83%81%E3%83%A3%E3%83%BC%E3%83%BB%E3%82%B6%E3%83%BB%E3%83%95%E3%83%A9%E3%83%83%E3%82%B0#:~:text=%E3%81%AA%E3%81%A3%E3%81%A6%E3%81%84%E3%82%8B%E3%80%82-,%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3,-%5B%E7%B7%A8%E9%9B%86%5D)

</details>

<details><summary>期待できる効果</summary>

CTFでコードを書く機会はあまり無い(と思う)んですが、コードを取り巻く実行環境についての幅広い知見が得られるため、具体的な実装をイメージする際に役立つかと考え記載しました。

</details>

## Developer Roadmaps

https://roadmap.sh/

<details><summary>is 何</summary>

フロントエンドやバックエンド等の各分野で、その道のProを名乗りたくば知っておかなければならない知見がロードマップとしてまとめられているサイトです。

</details>

<details><summary>期待できる効果</summary>

この記事の趣旨からは少し離れますが、ある程度作りたいものが見えてきたらこのロードマップを参考に知見を蓄えることで、開発の全体像を意識して開発に挑めるかと。

</details>

## 一緒に働く仲間を募集中です！

リンクラフト株式会社では、組織拡大に伴い積極的な採用活動を行っています。
少しでも興味がある方はぜひご連絡ください。

▽会社ホームページ
https://lincraft.co.jp/

▽SNS
[X (旧Twitter)](https://twitter.com/lincraft_inc)
[Instagram](https://www.instagram.com/lincraft.inc/)
[Facebook](https://www.facebook.com/lincraft.inc/)

▽ご応募はこちらより
https://lincraft.co.jp/recruit

※カジュアル面談も受付中です。ご希望の方はHPのお問い合わせフォームよりご連絡ください。
初めてのdocker ＆Streamlit ＆　FastAPIで詰まった話　 (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused'))

## 備忘録なので一部省略しています。同じエラーになった方がいれば参考にしてください。

## ぶつかった問題
FastAPI,Streamlit,Dockerを使ってwebアプリを作成していました。

出来上がったのでターミナルで
 ```bash
docker compose up -d 
```
を実行してwebページのURLを見にいくと以下のエラーが

``` pythpn
ConnectionError: HTTPConnectionPool(host='backend', port=8080): Max retries exceeded with url: /select_genre (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0xffff5a656dd0>: Failed to establish a new connection: [Errno 111] Connection refused'))
```
今回は初めての連続だったため何が原因か分からず12時間解決に費やした。
結果ChatGPTに手を変え品を変え質問して、解決

## ChatGPTによる解決方法のご教授

あなたのDocker Composeファイルを確認しましたが、基本的にはバックエンド（`backend`サービス）がポート8080で、フロントエンド（`frontend`サービス）がポート8501で公開されているようです。`depends_on`セクションも使用されており、`frontend`サービスは`backend`サービスが起動してから起動するように指定されています。

これらの設定が正しくある場合、以下の手順で問題を解決できる可能性があります：

1. **サービスを再起動:**
   Docker Composeファイルを変更した場合や問題が発生している場合、サービスを再起動してみてください。

   ```bash
   docker-compose down
   docker-compose up --build
   ```

   これにより、古いコンテナが停止し、新しいコンテナがビルドされて実行されます。

2. **ネットワークの確認:**
   Docker Composeで作成されるデフォルトのネットワークに対して問題がある場合、ネットワークを再作成してみてください。

   ```bash
   docker-compose down
   docker-compose up --build --force-recreate
   ```

3. **フロントエンドのリクエスト先の修正:**
   フロントエンドのコードで、バックエンドに対するリクエストのホスト名を `backend` ではなく、バックエンドのコンテナが公開されているIPアドレスや `localhost` に変更してみてください。

   ```python
   response = requests.post("http://localhost:8080/select_genre", json={"selected_genre": selected_genre})
   ```

4. **ホストマシンのポートの解放:**
   他に何かがポート8080を使用していないか確認してください。他のアプリケーションが同じポートを使用している場合、ポートの解放が必要です。

これらの手順で問題が解決しない場合は、具体的なエラーメッセージや挙動がわかると、より具体的なアドバイスが可能です。それでも解決できない場合、Docker関連の問題やネットワーク設定の問題が考えられます。

## 結果
私の場合、サービスの再起動とネットワークの再作成でなんとかなりました。
今回はGitHub,Docker,Frontend,Backend全て初めての弱々機械学習エンジニの私が詰まった部分についてまとめさせていただきました。

次の被害者が出ないことを願います。
許すまじ　[Errno 111]


## PS
ただエラー文をChatGPTに投げると、Uvicornの起動コマンドを確認して！とかCompose の中身を確認して、などしか言ってくれませんでした。その辺りのミスがない場合はご紹介した方法を試してください。
Pythonで「if文を使った条件分岐」の動作を確認してみた

# 概要

Pythonで「if文を使った条件分岐」の動作を確認してみました。以下のページを参考にしました。

https://www.javadrive.jp/python/if/index1.html

# 実装

以下のファイルを作成しました。
```sample.py
old = 18
print("年齢は" + str(old) + "です。")
if old < 20:
    print("20歳未満の方はご利用できません。")
    print("またのご利用をお待ちしています。")
    
print("ありがとうございました。")

old = 24
print("年齢は" + str(old) + "です。")
if old < 20:
    print("20歳未満の方はご利用できません。")
    print("またのご利用をお待ちしています。")

print("ありがとうございました。")

old = 18
print("年齢は" + str(old) + "です。")
if old < 20:
    print("20歳未満の方はご利用できません。")
    print("またのご利用をお待ちしています。")
else:
    print("ご利用ありがとうございます。開始ボタンを押してください。")

old = 24
print("年齢は" + str(old) + "です。")
if old < 20:
    print("20歳未満の方はご利用できません。")
    print("またのご利用をお待ちしています。")
else:
    print("ご利用ありがとうございます。開始ボタンを押してください。")

postcode = "125-0062"
print("郵便番号は " + postcode + " です。")
if postcode == "140-0015":
    address = "東京都品川区西大井"
elif postcode == "102-0072":
    address = "東京都千代田区飯田橋"
elif postcode == "125-0062":
    address = "東京都葛飾区青戸"
else:
    address = "不明"

print("住所は " + address + " です。")

postcode = "102-0072"
print("郵便番号は " + postcode + " です。")
if postcode == "140-0015":
    address = "東京都品川区西大井"
elif postcode == "102-0072":
    address = "東京都千代田区飯田橋"
elif postcode == "125-0062":
    address = "東京都葛飾区青戸"
else:
    address = "不明"

print("住所は " + address + " です。")
```

以下のコマンドを実行しました。
```
$ python3 sample.py 
年齢は18です。
20歳未満の方はご利用できません。
またのご利用をお待ちしています。
ありがとうございました。
年齢は24です。
ありがとうございました。
年齢は18です。
20歳未満の方はご利用できません。
またのご利用をお待ちしています。
年齢は24です。
ご利用ありがとうございます。開始ボタンを押してください。
郵便番号は 125-0062 です。
住所は 東京都葛飾区青戸 です。
郵便番号は 102-0072 です。
住所は 東京都千代田区飯田橋 です。
```

# まとめ

何かの役に立てばと。
OutSystemsで座標を回転する

# はじめに
てきとうな2点を結んで直線にしたときに
直線が斜めになっていたり原点から離れていたりして困ることはありませんか？
OutSystemsを使って任意の2点(直線)を原点と(x,0)に戻す処理を作りたいと思います。

※ただし x>0とします。

# 計算方法
### 概要
1. 1点を原点に平行移動、もう1点も同様に平行移動
1. y=0と平行移動した2点からSinθ,Cosθを算出
1. 回転

詳しくは下で書きます。

### 1.点の平行移動
1. 任意の2点(a,b),(c,d)を選択
1. 原点に平行移動する点を(a,b)とし、2点ともx軸方向に-a,y軸方向に-bだけ平行移動

### 2.sinθとcosθの算出
平行移動した2点(0,0),(c-a,d-b)と(c-a,0)から三角比を使ってSinθ,Cosθ(符号あり)を算出

<details>
<summary>三角比</summary>

![さんかく3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3491280/e280d29a-59ee-eec6-6038-f7928abfdb78.png) <br>

Sinθ=γ/α, Cosθ=β/α

</details>

### 3.回転

θ回転する行列は

```math
\begin{pmatrix}
X \\
Y
\end{pmatrix}
=
\begin{pmatrix}
\cos\theta & -\sin\theta \\
\sin\theta & \cos\theta
\end{pmatrix}
\begin{pmatrix}
x\\
y
\end{pmatrix}
```

ですが、今回は平行移動させた2点を原点と(x,0)に戻すために**逆回転**(-θ回転)をしたいのでこちらを使います。

```math
\begin{pmatrix}
X \\
Y
\end{pmatrix}
=
\begin{pmatrix}
\cos\theta & \sin\theta \\
-\sin\theta & \cos\theta
\end{pmatrix}
\begin{pmatrix}
x\\
y
\end{pmatrix}
```

<details>
<summary>逆回転</summary>
<br>
逆回転は回転する角度がθから-θになるので

```math
\begin{pmatrix}
\cos(-\theta) & -\sin(-\theta) \\
\sin(-\theta) & \cos(-\theta)
\end{pmatrix}
=
\begin{pmatrix}
\cos\theta & \sin\theta \\
-\sin\theta & \cos\theta
\end{pmatrix}
```
となります。
<br>
</details>

これを前提として
1. 求めたSinθとCosθを逆回転行列に代入
1. 逆回転行列を使って計算して(X,Y)=(xCosθ+ySinθ,-xSinθ+yCosθ)を算出







# 実装
計算方法で説明した処理は、OutSystems内のアクションとして作成します。

・平行移動の処理：「ParallelMove」アクション
・SinθとCosθを算出する処理：「CosSin」アクション
・回転する処理：「RotateMove」アクション

作成した処理を下に貼ります。
<details>
<summary>それぞれの処理のinputとoutput</summary>
ParallelMove <br>
・input:任意の2点 <br>
・output:平行移動した点 <br>
<br>
CosSin <br>
・input:平行移動した2点 <br>
・output:SinθとCosθ <br>
<br>
RotateMove <br>
・input:平行移動した2点，SinθとCosθ <br>
・output:回転した2点<br>
<br>
</details>

![タイトルなし3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3491280/a285d276-ed50-4e55-0364-4499eeb6ebe4.png)



# 実行
2点入力して回転ボタンを押します。
![スクリーンショット 2023-11-30 105015.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3491280/ccbdef67-ca17-cfc7-fb96-fdcfdc50beea.png)


試しに4回入力してデータベースを覗いてみます。
![スクリーンショット 2023-12-25 172946.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3491280/87c735c9-a373-bfd3-0903-48f60a1bde3a.png)


4回とも2つの点が原点と(x,0)になっていることを確認できました。

<details>
<summary>簡単な説明</summary>
・PointX1,PointY1,PointX2,PointY2：座標 <br>
・RotateOriginX,RotateOriginY：回転後の原点 <br>
・RotateOtherX,RotateOtherY：回転後のもう1点 <br>
</details>


# さいごに
今回は2点(直線)でやりましたが他の図形にも応用できると思います。
Flutter on the Web の開発環境(ローカル)でHTTPS接続する方法

# flutterのversionをmaster(2023/11/29時点)にする

```zsh
flutter channel master
flutter upgrade

or

# fvm使っていれば
fvm use master
```

以下のコミットが含まれていれば実行時のオプションで証明書を指定することが可能になるようです。
https://github.com/flutter/flutter/commit/428bff1ddefce8850348ac75fd50ec947071d985

※おそらくversion3.17.0以降ならstableでも上記の対応が含まれているのでmasterでなくても問題なさそう、現時点(2023/11/29)だとstableが3.16.0なのでまだ入っていない

# オプションを指定して実行

```zsh
flutter run -d chrome --web-tls-cert-path="[Pathを指定]/tls.crt" --web-tls-cert-key-path="[Pathを指定]/tls.key"
```

# できた

![スクリーンショット 2023-11-29 15.54.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/70276/db0e255c-cb14-f9cc-7ea2-1a0750aa2198.png)


# おまけ

## launch.json

VSCodeで実行する場合はlaunch.jsonを使用すると思いますのでそちらの設定方法を念の為記載

```json
"args": [
  "--web-tls-cert-path=[Pathを指定]/tls.crt",
  "--web-tls-cert-key-path=[Pathを指定]/tls.key",
]
```

## domainを指定する方法

証明書設定するなら合わせて必要かと思うので

```zsh
flutter run -d chrome --web-hostname=sample.com
```


launch.jsonの場合

```
"args": [
  "--web-hostname=sample.com",
]
```
【Reactアプリ100本ノック】07 Weather

![Weather.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/810513/68be6656-200c-2c51-1be0-6468434b1b83.png)

# はじめに

<h3>こんにちは！！@Sicut_studyです！</h3>

https://qiita.com/Sicut_study/items/78910cd8d103b8d45a73

こちらの記事が嬉しいことに多くの方に見ていただきました。
そこで**React**が多くの初心者の方に注目されているんだなということを実感させられました。

私の記事では何度も言っている通り

<font color="red"><h4>最速で学ぶならとにかく何か作る</h4></font>

というのが大事になってきます。そこで **「Reactアプリ100本ノック」** というのに挑戦していこうかと思います。徐々に難易度を挙げていってどこまでお題を作りきれるかの腕試しでやっていただければと思います。

今回は外部APIを叩いて簡単な天気予報アプリを作っていきます！

# 前回のお題

https://qiita.com/Sicut_study/items/ccfc451360d3f22bde63

# Reactアプリ100本ノックルール

- 主要なライブラリやフレームワークはReactである必要がありますが、その他のツールやライブラリ（例: Redux, Next.js, Styled Componentsなど）を組み合わせて使用することは自由
- TypeScriptを利用する
- 要件をみたせばデザインなどは自由

# 07. Weather
|　　　　　　　　  　　　　　　　　   　　　　　　　　　　　　　　　　　　　　　|
|:-:|
|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/810513/bac13f22-ffb5-81fc-b204-7e5d0937e2ab.png)

## 問題

自分の住んでいる都道府県の天気予報を表示する

## 目的

外部APIからデータを取得して、アプリに統合する方法を学び、async/awaitを使用した非同期リクエストの処理を実践します

## 達成条件

- 指定された地域の天気予報を表示できる
- 天気の表示間隔は自由 (1日ごとや10分ごとなど)
- 最高気温/最低気温が表示されている
- イラストで天気がひと目でわかる (晴れなら晴れマークを表示)

## 実際に解いてみた

### 利用技術

- React
- TypeScript
- Vite
- Emotion
- 天気予報 API（livedoor 天気互換）

解答時間 : 1時間

はじめにYahooの天気APIを使っていたのですが、なぜかCORSエラーがでてしまい試行錯誤してもうまく情報取得ができなかったのでAPIを以下に変更しました

https://weather.tsukumijima.net/

その試行錯誤で多くの時間を使いました。
実装自体は10分くらいでできました

|　　　　　　　　  　　　　　　　　   　　　　　　　　　　　　　　　　　　　　　|
|:-:|
|![Peek 2023-11-18 11-08.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/810513/1f576c37-0dbd-477c-9dd6-f7c1e06f8e48.gif)

# 次のお題

https://qiita.com/Sicut_study/items/3bd13a266feade56a4d0

# おわりに

React100本ノックの記事を地道に上げていこうと思いますので、一緒に挑戦したい方は @Sicut_study をフォローいただけるととてもうれしく思います。
ここまで読んでいただけた方はぜひ**いいね**と**ストック**よろしくお願いします。

<h5>少し宣伝します🔥🔥🔥🔥🔥</h5>

これからエンジニアになろうとしている人を本気でコーチングして3か月の期間で立派なエンジニアにするようなチャレンジをしてみたいなと考えております。

もし、本気でエンジニアを目指してコーチングを受けてみたいという方がいれば、[Twitter](https://twitter.com/Sicut_study)に「プログラミング教えてほしいです」みたいなリプライ送っていただけたらなと思います！！

以上です。
今週もプログラミング頑張りましょう！

![bandicam 2023-10-04 20-58-54-525.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/810513/f41a0065-b23e-1895-da22-66bf0e48c5fb.jpeg)


# 参考

https://developer.yahoo.co.jp/webapi/map/openlocalplatform/v1/weather.html

https://weather.tsukumijima.net/
paloaltoの解析講座8：Wireshark

<!--
2023/11/21
-->
* paloalto解析講座の続き

https://unit42.paloaltonetworks.jp/wireshark-tutorial-decrypting-https-traffic/

## HTTPSの復号
* キーログファイルのサンプル
![screenshot 28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/160736/33ba0136-b2a2-b91f-a5ab-e8b5dfbe8a2e.png)
<br>

* キーログファイルの設定
`Edit` `Preferences` `Protocols` `TLS`
(Pre)-Master-Secret log filenname `Browse…`でキーログファイルを登録する。
![screenshot 19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/160736/53cad6f9-08d1-2ffc-a19d-d8d64857a7a2.png)
<br>

* 登録前は、TLSパケットの中身は見えない。
![screenshot 21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/160736/6d8339e1-d075-ce2c-9b52-364046461be7.png)
<br>

* キーログファイル登録後は、TLSパケットの中身が見える。
![screenshot 24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/160736/9c6e4526-94e5-bef1-bdfb-49d743127cd2.png)
<br>

* 以上です。

## キーログファイルの作り方（Windows）
~~~
setx SSLKEYLOGFILE C:\tls.txt
~~~

## キーログファイルの作り方（Kali Linux）
~~~
export SSLKEYLOGFILE=/home/kali/Desktop/tls.txt
~~~

## キーログファイルの設定
`Edit` `Preferences` `Protocols` `TLS`
(Pre)-Master-Secret log filenname `Browse…`でキーログファイルを登録する。

## 参考サイト

https://charlesreid1.com/wiki/MITM_Labs/Decrypting_HTTPS_Traffic_by_Obtaining_Browser_SSL_Session_Info

https://linux.how2shout.com/how-to-install-firefox-developer-edition-on-ubuntu-22-04-or-20-04/
AI Slack botと共に創り上げる、コラボレーションの新たな可能性

LIFULLではkeelaiという社内向けのAIアプリケーションが運用されています。詳しくは相原さんがクリエイターズブログで紹介しています。

https://www.lifull.blog/entry/2023/11/16/170000

keelaiはSlack上で動くAIチャットボットを含んだ "汎用AI(仮)" 技術スタックで、現在は社内外の情報検索の機能が主ですが、ゆくゆくは様々な機能が利用できるようにするつもりです。

ただ、「それなりの規模で使われている複数人が同時に利用できるチャットAI」というユースケースだけでも珍しい気がするし、有益なアイデアも含まれている気がします。今回は気軽なものも含め、よくあるユースケースを紹介してみます。

## 複数人で一緒にデバッグする

プログラマーがChatGPTを利用すると、まずエラーメッセージをChatGPTに読み込ませて、原因を推測させるようなユースケースを試すと思います。

自分たちのチームではシステムエラーのSlack通知に続けて、スレッドに続けてエラー内容や原因推測の対話をする習慣が生まれています。

![スクリーンショット 2023-11-29 16.59.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/127762/a9a0416b-c1ce-73bd-55d8-8b5e9b32fc6b.png)

こうしたチャットをオープンな場所でできることで、原因の当たりをつけた後に、そのまま上長や専門家との報告や相談も始められます。これは基本的に個人で使うChatGPT単体ではできない使い方だと思います。

余談ですが、将来はエラーログを見て、エラー原因の初期調査やコード提案まで行えるようにするつもりです。



## AIを交えてブレストする

複数人でのブレストに役立ちます。例えば仕事っぽくない例ですが、「お世話になった〇〇さんへの1万円くらいのプレゼントのアイデアを出して」とAIに聞いて、横から「いや、〇〇さんはお酒はダメだったからやめよう」とかでチャットの議論の中にAIを挟めます。


## AIの回答が誤ってる場合に人がサポートする

keelaiでは社内向けの[ChatGPT Retrieval Plugin](https://github.com/openai/chatgpt-retrieval-plugin)のforkが動いていて、社内のドキュメント情報を元にした回答もできます。ただ、もちろん間違った情報を回答してしまうこともあります。

もしSlackの公開チャンネルで使っていれば、keelaiの回答が間違っている場合でも、その分野に詳しい先輩から正しい回答が得られます。この目的で共通のkeelai用のチャンネルを用意しているチームもいくつか現れてきました。

また、社内ドキュメントの収集し、選別する仕組みも整備しつつあります。これを見ているLIFULL社員は、変な回答があったら #help-keeai のチャンネルで報告して頂けると助かります。


## AIに大げさに褒めさせる

他人を褒めたいけど、直接褒めるのはちょっと照れくさいことってあると思います。そういうとき、大げさなメッセージをAIを介して伝えることができます。

![スクリーンショット 2023-11-29 17.10.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/127762/55491dd2-050d-1030-3bc2-bfb9400156f5.png)

最近、本家ChatGPTと同じくDALLE3での画像生成にも対応したので、より方法が増えてます。さすがにもったいなくてやってませんが😅


## デモやサポートを行う

これは運営者視点の内容ですが、Slack上で利用者と一緒に使えるのはかなり楽です。

社内プロダクトの開発に携わっていると、新機能を搭載した後に社内向けの告知をすることになります。また、うまく動かなかったときに質問やサポートも受けています。

例えば営業の社員にpdfや画像ファイルを読み込む機能を社外向けの決算資料を例に試してもらっていたとき、次のようにうまくいかないケースがありました。

![スクリーンショット 2023-11-29 17.50.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/127762/5b34d27a-09c7-651a-5b3c-88dab08d75ba.png)

これはおそらくFunction Callingの機能判定で失敗していることが原因で、リトライさせれば（対症療法的には）解決できる内容でした。Slackという社内の共通ツールに乗っかったおかげで、連絡を受けてすぐにチャット上だけでサポートできることも多いです。

また、全社告知をした後に、そのスレッド上で使い方のデモをすることもできます。


## まとめ

今回は、社内のSlackとChatGPTを連携したことで生まれたユースケースをいくつかまとめてみました。

対話AIといえば個人ごとに使うものが今は主流だと思いますが、オープンなコミュニケーションが可能なSlack上のbotとして実装することで、チーム内外のコミュニケーションを促進する効果もあるような気がします。

もし社内のAI活用を進めている方がいたら参考にして頂けると嬉しいです。
2OS授業解説: 統計データ解析

# はじめに
この記事は, 同じ学科の2年生向けに書かれたものです.
掲載されているコードなどは, 2023年度の授業スライドに基づいています.

また, 授業後の復習以降, 全く手を加えていないため,
「もっと上手く書けるんじゃないの..?」等あるかと思いますが,
ご了承ください🙏



# リンク集
OS2年 第1回
・・・第2~5週(前編)です.

https://qiita.com/tusoscocoa/private/ee557343cf7a211f4881

OS2年 第2回
・・・第2~5週(後編)です.

https://qiita.com/tusoscocoa/private/9b239c6cb0b07ccb17e6

OS2年 第3回
・・・第6~8週(前編)です.

https://qiita.com/tusoscocoa/private/ba336760cb96681f180d

OS2年 第4回
・・・第6~8週(後編)です.

https://qiita.com/tusoscocoa/private/1d5a4376b496f5119c80

OS2年 第5回
・・・第9週です.

https://qiita.com/tusoscocoa/private/22b281c9816be9adb15a

(更新未定)
【メモ】PATHについて


# はじめに
macでプロジェクトを新規で立ちあげる際や途中でアサインされた際に、npmやyarnで必要なものをインストールしてコマンドを実行すると

```
hoge:command not found
```
に出くわすことがある。
そもそもインストールされていない場合を除いて、大体いつもPATHを通せば解決するのだが、パスの設定ってそんなに頻繁に触らないからすぐ忘れるしそもそも何が書いてあるのかわからない自分のためのメモ。

# PATHってなんだ
PATH（パス）は環境変数で設定できる変数のこと。
「PATHを通す」とは対象のアプリの場所をこの環境変数に設定すること。

環境変数はPCのいろんな情報を保存しておけるメモのようなもので、コマンドを実行する際にこの環境変数を参照して実行する。

本来、インストールしたアプリをコマンドで実行する時には、そのアプリが格納されている場所をフルパスで指定して実行する必要がある。

例えば「node」のバージョンを見たい時、nodeがある場所を指定して実行する必要がある。
```
/user/local/~nodeがある場所 -v
```

でも、これを毎回覚えるのは嫌なので、
環境変数に「nodeはここに入ってるよ」と保存しておくことで省略することができる。

環境変数にnodeの場所を記載しておくと、いつもの下記のようなコマンドが実行できるようになる。
```
node -v
```
macの場合、この環境変数は「.bash」と「.bash_profile」という2つのファイルで設定できる。
どちらも不可視ファイルになっていてuserフォルダの中に格納されている、

ちなみに不可視ファイルを表示させるにはfinderでuserフォルダを開いて「command」＋「shift」＋「.」すると表示される。
もしくはコマンドでuserディレクトリで下記コマンドを実行する。（macの場合）
```
defaults write com.apple.finder AppleShowAllFiles TRUE
killall Finder
```

## 「.bash」と「.bash_profile」
「.bash」と「.bash_profile」は謎に2つあるように見えるが、それぞれ実行されるタイミングが違う。

ターミナルを起動すると、.bash_profile→.bashの順番で読み込まれる。
.bash_profileが読み込まれるのはこの時だけで、.bashはコマンドを打つたびに読み込まれる。

なので環境変数など一回読み込めばいいものは.bash_profileに記載する。

現状の設定されているPATHはコマンドでも確認できる。
```
echo $PATH
```

## .bash_profileの書き方
つまり「PATHを通す」とは.bash_profileにPATHを追加するということ。
.bash_profileは「変数にパスを格納」して「export」することで使用できる。

```
PATH1="$HOME/.nodebrew/current/bin:$PATH"
PATH2="$HOME/opt/homebrew/bin:$PATH"

export PATH1 PATH2
```

### $HOME
$HOMEはデフォルトのユーザーのフォームディレクトリーのパス。
```
echo $HOME
/Users/hogehoge~
```

### export
exportは「exportコマンド」のことで.bash_profileが読み込まれたら実行される。

## .bash_profileを反映する
.bash_profileは保存して閉じただけでは反映されない。
sourceコマンドで実行することで反映される。（最初の方は忘れがち）
```
source ~/.bash_profile
```

以上！
最強のプロンプト ：ゴールシークプロンプトについて (ChatGPT)



## はじめに
ゴールシークプロンプトとは、AIがユーザーの曖昧な目標を具体化し、明確な指示を生成する新しいアプローチです。

主にChatGPTなどの大規模言語モデルで用いられています。

👉 ポイント: ゴールシークプロンプトは、曖昧な目標から明確な指示を生成するAIのアプローチです。

## 特徴
1. **曖昧なゴールでもOK**: AIがユーザーの曖昧な目標を明確化します。
2. **対話を通じた探求**: ユーザーはAIと対話しながらゴールを具体化できます。
3. **汎用性**: さまざまなシナリオや要件に適応可能です。


## 具体的なプロンプト

```
『あなたは、プロンプトエンジニアです。あなたの目標は、私のニーズに合わせて最高のプロンプトを作成することです。そのプロンプトは、ChatGPTで使用されるものです。

次のプロセスに従ってください。

1. まず最初に、何についてのプロンプトであるかを私に確認してください。私が質問の答えを提供するので、次のステップを経て、継続的な反復を通じて改善してください。

2. 私の入力に基づいて、3つのセクションを生成します

    1. 改訂されたプロンプト（書き直したプロンプトを提示してください。明確、簡潔で、簡単にあなたが理解できるものしてください）

    2. 提案（プロンプトを改善するために、プロンプトを含めるべき詳細について提案してください）

    3. 質問（プロンプトを改善するために必要な追加情報について、関連する質問をしてくだい）

3. この反復プロセスは、私があなたに追加情報を提供し、あなたが改訂されたプロンプトセクションのプロンプトを更新し、私が完了したというまで続けます』
```

## 実践例
例えば、「お金を効率的に稼ぐ方法」を知りたいとき、ゴールシークプロンプトを使うと、AIが以下のようなステップで問いを深め、具体的な答えを導き出します。
1. **質問**：「どのように稼ぎたいか」をユーザーに問いかけ。
2. **反復プロセス**：ユーザーの回答に基づいて、改訂された手順や提案、追加情報に関する質問を生成。
3. **精度の向上**：ユーザーとAIの対話を続けることで、より詳細かつ具体的な答えを得られます。
[re:Invent2023 ざっくre:Cap]Elevate your security investigations using generative AI

# はじめに
みなさんこんばんは！hiropyです。
今回はre:inventで参加したセッションを、英語できないマンなりにざっくり振り返っていこうと思います！

本記事では「Elevate your security investigations using generative AI」について記載していきます。

翻訳ミス、意図の取り違えがあるかもしれませんが、「こんなことしてたんだ」くらいでご参考にしていただけると幸いです。

# セッション概要
- タイトル：SEC244-NEW | [NEW LAUNCH] Elevate your security investigations using generative AI
- セッションタイプ：Breakout session
- レベル：200

セッションの概要は以下の通り。
> セキュリティ調査には、イベントタイプの解読や多様なデータソースのナビゲートなど、複雑なタスクが含まれることがよくあります。このセッションでは、セキュリティアナリストが調査プロセスを合理化する上でAmazon Detectiveを使用する利点を学ぶことができます。Detectiveがどのように難なく相関し、発見グループの結果を分析し、セキュリティアナリストに明確な洞察を提供しながら、複雑で大規模なデータを分析し、組織のセキュリティ調査を合理化する洞察に満ちたパターンをシームレスに明らかにするかをご覧ください。

アップデートされたAmazon Detectiveを活用することで、セキュリティに関する調査にどのようなベネフィットがあるかをお話しいただきました！


# セッション内容
## セキュリティの課題について
セキュリティの担保は昨今の問題であり、多くの人が議論を続けている。
正し、上がっているセキュリティの問題を全て解決しようとすると手が回らなくなってしまう。
また、AWS上で異常を検知する際のロギング（CloudTrail, VPC Flow Log）は膨大なデータが溜まる可能性があり、これらの分析や管理方法についても考える必要がある。

分析したとしても、必ずしも優先度の高い問題を解決できるとは限らない。

# Amazon Detective
さまざまなサービスのログを取り込み、統計分析と機械学習によりログを分析、グラフ化してくれるサービス。([参考](https://docs.aws.amazon.com/ja_jp/detective/latest/adminguide/what-is-detective.html))

今まで優先度をつけられていなかったセキュリティ上の問題点を可視化し、素早い問題解決につながる。

ログ分析の対象となるのは、以下のサービス。（間違っていたらすみません）
- VPC Flow Log
- CloudTrail
- GuardDuty

今までもDetectiveはあったが、今までは機械学習や統計分析を組み込んだグラフ化機能がなかった。

# 使い方
分析したい対象リソースを選択し、進めていくだけ

IAMベースの分析やAPIコールの確認、クラウド上の操作を調査する。
調査結果を可視化してくれるだけでなく、リソース同時の依存関係もグラフ化することが可能。


# その他
- Security Lakeとも統合することが可能。
- DNS攻撃や脆弱性検知を行うことも可能。
    - 脆弱性に関しては、結果はかなりテキストベースでの回答となる。


# 感想
- CloudTrailのログで優先順位をつけてインシデント調査するのが難しいのはその通りなので、とても便利だと思った
- サンドボックス環境に取り入れると、作業負荷がグッと減りそう

以上、皆様のご参考になれば幸いです！
OpsRamp Logsのカスタムアプリケーション検出の定義方法について

本記事では、OpsRamp Logsのカスタムアプリケーション検出の定義方法について説明します。

# 概要
OpsRamp Logsでは、OpsRamp Agentがインストールされているサーバ上で動作しているアプリケーションを検出する機能があり、OpsRamp社が提供されている定義があるアプリケーションについては自動で検出します。
提供されていない定義をユーザ側で定義することができます。

# 設定方法
カスタムアプリケーション検出定義は、Infrastructure > Logs 画面左上のハンバーガーマークのLog Configurationにアクセスし、APP DEFINITIONSのページから設定可能です。
![log-configuration.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2344939/b19d6c25-2313-7021-9e51-2e9ae39bb522.png)

![app-definition.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2344939/253d2c17-01c7-a7f7-f601-b51a4335e5f6.png)

「Environment」では、Linux・Windows・Kubernetesから対象システムを選択することができます。
「APP DEFINITION YAML」では、YAML形式で検出定義を設定します。
![app-configuration.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2344939/17d1f4ca-fbfe-1326-cb7a-8d83328b3db9.png)

サンプル検出定義の設定には、下記のような意味があります。
|項目||説明|
|:-|:-|:-|
|name|-|アプリケーション名の設定|
|version|-|検出定義のバージョンの設定|
|skip-app-role|-|アプリケーションロールを無視するかどうかの設定|
|instance-checks|service-check|サービス名からアプリケーションを検出する設定|
|instance-checks|process-check|プロセス名からアプリケーションを検出する設定|
|instance-checks|port-check|リッスンポートからアプリケーションを検出する設定|
|instance-checks|uri-check|URLからアプリケーションを検出する設定|
|instance-checks|command-check|コマンドからアプリケーションを検出する設定|
|instance-checks|path-check|パスからアプリケーションを検出する設定|
|mon-type|-|jmx経由でアプリケーションを監視しているかの設定|
|misc|jmx-port|jmxで監視している場合のjmxポートの設定|

- 設定例
プロセス名からアプリケーションを検出する設定例です。
``` yaml: custom-app-definition
- name: PyApp # name of the application and name which is sent in app role
  version: 1
  skip-app-role: false # set to true if app role needs to be ignored
  instance-checks:  
    process-check: # list of process names to look for detection of the app
      - app.py
```


---------------------------------------
[<img width = 250 height = 200 src = "https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2344939/111de30a-4d33-aa33-5c7d-83d9015093e6.png">](https://www.vistanet.jp/knowledge-base/)
『世界一流エンジニアの思考法』を読んでみて

# 本を読んでみました

株式会社マーズフラッグの小池です。

フロントエンドエンジニアとして在籍しておりまして、ちょうど1年くらいが経過しようとしてます。マーズでは主にMARS FINDERという自社製品のメンテナンスのほか、それに付随した新機能の実装を担当しています。

前回に引き続き、記事を書かせていただこうかなと思います。


# 『世界一流エンジニアの思考法』
![IMG_0260.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3583896/e6f73204-3565-b87a-f936-3cf3ff3ba77e.jpeg)

こちらの本を今回読んでみました。
最近本屋でふと目に止まって「一流のエンジニアって何考えてるんだろ〜」と思ったので、衝動買いをしました。笑

こちらの書籍を読んで、感じたことなどを書いていこうかなと思います。
(解釈などは自分なりのものですので、間違いもあるかと思いますが、温かい目で見てくれたら幸いです。)

## "Be Lazy(怠惰であれ)"の考え
この考えは優秀なエンジニアたちが実践している考え方らしいです。
これは単純に怠けるという意味ではなく、「いかに少ない労力で、アウトプットの価値を最大化するか」という意味です。

この考えに重要なポイントは
- 実現に向けた最低限の努力をする
- 無駄なことはしない
- 決められた時間内に解決する(会議での不明点は持ち帰らずにその場で解決する)

などがあり、結構正反対なことをしてしまっているところがあると感じました。
例えばコードを書いているときに「こんな機能も欲しいな〜」と思って横道に外れてしまうことがあり、本来の目的であったことが中途半端に終わることがしばしばあります、、、。

でもこの本を読んでみて
**自分のゴールが明白でないために起きてしまっている現象**であることがわかりました。
確実に優先順位をつけ、目標に向かって最短で進んでいく。その後アジャイル的に開発していくのがいいなと思いました。


## "Fail Fast(失敗を早くする)"の考え
エンジニアをやっていて最近、「本番で動かなくなったらどうしよう。」「このコード自信ないな〜」など、失敗を恐れてしまうことがしばしばあります。STG環境での動作確認やテストなどをしていますが、抜け漏れがあったり、そもそも自分が追加した機能の使い勝手やUI、その他ロジックなどに自信がない時があります。
ですが、この著書によると、**失敗などを早めにしてフィードバックをみんなからもらうことが重要**だということが書かれていました。

そもそもエンジニアの実装は新しい・まだ誰も実装してないものに挑戦しているので、未知の部分があるのはしょうがないです。しかし、その未知の部分を解決するには何度も検証を重ね、フィードバックをもらうことが重要だということです。
幸いにも私の周りには先輩のフロントエンドエンジニアがおり、その方々がわからないことを教えてくれたり、未知の部分の手助けをしてくれるので、こういう環境は大切にしつつ、自分も他の人にフィードバックができるように成長していけたらと思います。


## 生産性の上げ方
この著書を通して読んでいると生産性の高め方が書いてあるのですが、その根本にあるのは「**自分のタスク楽しんでいるか**」にあると思いました。
もっと細かくいうと、しんどい努力はやめて、できないことはエキスパートに頼り、"自分が無理なく、誰にも頼らずできることを増やしていく"ことが生産性の向上につながるということです。

この考え方は、
- 個人 : 自分が無理なくできることが増えると難しいことにfocusする時間を長くできる
- 組織 : チーム全体のレベルの向上 = 組織としての生産性の向上

という、短期的・長期的にもメリットがあります。

幸いにも私の上司やその他先輩方は、私のやりたいことを尊重してくれるので、毎日楽しく仕事ができています。その中で自分ではどうしようもないことは周りのできるエンジニアに即聞くようにしているので、頭の中でモヤモヤしたりすることは比較的少なく、自分ができることが少しずつ増えているところに達成感を覚えます。

自分はVueやTSなどを触り始めて1年くらいでわからないことが多いので、こういった壁にぶち当たってしんどくなる前に聞ける環境はありがたいです。

## わからないことを恥じない
これはエンジニアに限らず、全社会人に当てはまることだと思いました。
わからないことは自分で調べてから聞きにいくという姿勢はOKだと思うのですが、なぜそのようにしているかの理由の1つに、**こんな当たり前のことを聞いていいものなのか**という恥じらいがあります。

実際に自分で調べてわかることは調べてみるべきだと思っているのですが、会議やコードベースの説明をされているときに、周りのみんなが理解してるところがわからなかったりしたときに、「自分の質問で水を差すのも悪いな」と思い、その場では聞かないことがあったりします。でもこの著書を読んだことによって、実際に周りのエンジニアの方々は説明を嫌がらずに丁寧にしてくださるのに、自分の恥じらいだけで学ぶ機会を喪失しているのだと気づけました。

これは生産性というところにも繋がってくる問題で、**ここで自分がレベルアップすれば、今後チームに貢献できる**という考えを持っていけば自ずと質問も恥じらうことなくできますし、何より「まだまだ自分には伸び代があるんだ！！笑」という気軽な気持ちで聞けば、恥じらいも捨てられるのではないかと思いました。
また自分の単純な質問が、誰かの頭の整理に繋がったり、新しい問題点の発見に繋がったりすることもあると考えると自分の発言一つでより良いプロダクトができるかもしれないとも考えられます。

今後はリモート会議でも気軽に聞けるメンタルを作り、またそういった環境を作っていくことも視野に入れながらこの会社でエンジニアをしていきたいと思いました。

# 最後に
いろいろな有益情報が載っているこの著書はエンジニア・非エンジニア問わず読める本だと感じました。ここで私が示したこと以外に、チームでのリーダーの役割、脳の使い方、AI時代の生き方、などが掲載されていて、とても面白かったです。
また、読んでいると「当たり前じゃんか！」と思ったことが載っていましたが、ふと「自分はできているのだろうか。。。」と振り返る良い機会にもなりました。

私自身、この本に出会えたことは幸運で、一年の終わりに来年目指すべきこと、やるべきことがはっきりしました。
この著書に書かれているを大切にしながら、来年以降も**いい感じのエンジニア**になれるように頑張っていきたいと思います！
AutowareでOverTakeModule(追い越しモジュール)を作る！ Part.1

# 背景・概要

この記事は，[AI Challengeのシミュレーション大会](https://automotiveaichallenge.github.io/aichallenge2023-racing/index.html)に関連する記事です．この大会は，カーレース環境のシミュレーション上で順位を競うもので，基本的にAutowareを使って車両の制御プログラムを記述します．

この記事では，Autowareの[behavior_path_planner](https://autowarefoundation.github.io/autoware.universe/main/planning/behavior_path_planner/)にプログラム(module)を追加して前方車両を追い越すようなPathを作るといった内容になっています．

# 目的

本記事の目的は，前の車両をうまく追い越すようなPlanningをすることです．現在のAutowareでは[avoidance_module](https://autowarefoundation.github.io/autoware.universe/main/planning/behavior_path_planner/docs/behavior_path_planner_avoidance_design/)のような障害物を避けるmoduleは存在しますが，前方車両を積極的に追い越すようにPlanningするようにはなっていない(はず)です．

<iframe width="400" height="360" src="https://www.youtube.com/embed/VX1ipvPv9hs" title="behavior_path_planner" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>

しかし，レースにおいては前方車両を積極的に追い越して順位を上げなくてはなりません．レースにおける追い越し(Overtake)には，いくつかのルールが存在します．

https://motorsports-regulations.com/overtake

https://ja.wikipedia.org/wiki/%E3%82%AA%E3%83%BC%E3%83%90%E3%83%BC%E3%83%86%E3%82%A4%E3%82%AF

例えば，

- 繰り返し追い越しが起きないように，進路変更の回数制限
- コーナーへ進入するときには，並走する相手のために1台分以上のスペースを空ける必要がある
- 追い越し禁止区間が存在する場合がある

などです．また，レースなので，相手車両に追い越されないように出来るだけ相手車両の前に出ることも重要です．

ただ，これらすべてのコンセプトを実現するmoduleを作成することは難しいため，基本的な追い越しの機能のみを実装しようと思います．

# BehaviorPathPlanner

(以下の説明には誤りがある可能性が高いので，詳しくはDocumentやプログラムを直接参照してください)

https://autowarefoundation.github.io/autoware.universe/main/planning/behavior_path_planner/

上記のような目的を達成するためには，BehaviorPathPlannerのmoduleを作る必要があります．このmoduleでやるべきことのザックリとしたイメージは"ある程度決められたPathを障害物回避や車線変更などの要求に沿うように修正する"といったものです．


![shapes at 23-12-07 16.13.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/320782/5be2b12a-fdef-eb2c-ee2b-d3b838aaa0f3.png)

# 続き

https://qiita.com/yhisaki/private/441ecd57844176d9e6b6
ペアプロンプトエンジニアリングの勧め。効率的にプロンプトエンジニアリングを進めていく手法について

# はじめに
みなさんはプロンプトエンジニアリング、やっていますか？ChatGPTのAPI(OpenAI API)を使ったアプリ開発をするならば、バックエンドに配置するプロンプトの重要度はどんどん上がっていっていると思います。そこで今回は、このプロンプト開発を効率的に進めていく手法として、「*ペアプロンプトエンジニアリング*」を提唱いたします！
LLMを組み込んだアプリを開発しているすべての方の助けになればと思います。

### 注釈
ここで言う「プロンプトエンジニアリング」とは、AI（人工知能）から望ましい出力を得るために、指示や命令を設計、最適化するスキルのことです。ChatGPTなどの生成AIを使いこなすために注目されるようになりました。生成AIは、命令（プロンプト）の出し方によって、出力されるコンテンツの質が大きく異なるため、より適切なものを入力するスキルが求められています。[(引用元)](https://www.nri.com/jp/knowledge/glossary/lst/ha/prompt_engineering)

# ペアプロンプトエンジニアリングとは？
言葉通り二人(またはそれ以上の人数)でプロンプトの開発をしていく作業です。

### メリット
- プロンプトエンジニアリングの以外の知識を使って、顧客により良いアウトプットを届けられる
    - より顧客と関わってきたビジネスサイドの人とやると効率アップ！
- アイデア出し等、品質評価の難しいアウトプットに対しチーム内で合意が素早く取れる
- 複数人の視点でやることでアウトプットの違いに気づきやすくなる
    - いわゆる「品質向上するプロンプト」も、重ねていくと違いが分かりづらくなる
- 一人でやるより楽しい！
    - これも、特に違いが分かりづらくなってくる程伴走者の有り難みを感じます！
- 体系化していないが「なんとなくこう伝えるといい感じだな」という個人の感覚に蓄積された知識をシェアできる
- `ペアプロ`と略すと`ペアプログラミング`と同じニュアンスで単語を使える

### 特徴
- 顧客, 届ける相手のいるプロダクトでより力を発揮する
    - 〇〇ちゃんbot, AIゲームのような楽しめるプロダクトでも大きく価値を発揮しそう
    - もちろんビジネスとしてのアプリでも
- 「問題を解く」系のプロンプトの場合、エンジニアだけで十分な場合が多い
    - プロンプトエンジニアリング以外の知識がそこまで必要ない為

# やり方
- 開発環境と同じ制約のGUIを開く([OpenAI Playground](https://platform.openai.com/playground?mode=chat)等)
    - ChatGPTとAPIではアプトプットや制約が変わるため、より近い条件で
    - `Maximum Length`はデフォルトの256だと大抵足りないので、あげる
- オンラインなら画面共有して、いざプロンプトエンジニアリング！

## コツ
- 回答のランダム性を下げてプロンプトの評価に重点を置くため`Temperture`を下げる
    - 個人的にはブレスト系のアプリで`Temperture`を下げると、出てくるアイデアが地味になるような気がするため`Top-P`を下げている(諸説)
![スクリーンショット 2023-11-22 11.50.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/166306/5d3a09f9-bef1-95c5-8242-332da1a75ed6.png)
- こっちのアウトプットの方がいい！もっとこういう文体にしたい！等感想に近い内容でも積極的に発言する
    - 特に複数職種が参加している場合はどんどん発言しましょう！

# 最後に
この記事は、*ペアプロンプトエンジニアリング*という単語の起源主張することが目的です![スクリーンショット 2023-11-29 10.45.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/166306/d1050893-9cfa-8acd-7a81-bf140d0cae9d.png)
(唯一引っかかるのは僕の[Twitter](https://twitter.com/ryonatori1)です😁)
英語で命名なんてできない（できる）

# はじめに
こんにちは。Nekokaです。
突然ですがエンジニアのみなさん、英語を使って命名できますか？

**わたしはできません..**

でも、命名はエンジニアの宿命ですね。
さあ「英語を使わずに」メソッドの命名をしてみましょう！
## 1.命名したいメソッドの内容を日本語（母国語）で書き出してみる

例として
**「サーバーから飼い猫の健康状態のデータをダウンロード」しているメソッドに命名する**

こんなかんじで行きましょう。

<font color="MediumSpringGreen">ある東大の教授の研究によれば、人間が母語でない言語を使って知的な作業をすると一時的に思考力が低下するそうです。母国語で考えて、メソッドの処理内容を正しく言語化しましょう。</font>
## 2.ChatGPTに聞いてみる

英語ができないので、ChatGPTにお願いします。
![スクリーンショット 2023-11-29 16.03.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3036248/6f8b5016-278b-0c0a-d7d8-d08670a49e39.png)
（英語はできないけど命名にルールを指定することはできる）


この時点で、どれか１つ適当にセレクトして命名を終わらせてもOKと思います。

プロジェクトによっては"From Server"(サーバーから)は明らかなので不要かもしれませんね。

せっかくなのでもう少し掘り下げます。

![スクリーンショット 2023-11-29 16.02.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3036248/e484048d-ab3c-ad3b-ce6b-0f61dd71c336.png)
(語尾を「にゃ」にしてくれるやさしいChatGPT)

#### な、なるほど〜！


もう、英語ができないなんて言えないにゃ絶対、、、

# まとめ
私のような日本語脳の人間が英語で命名しようとすると、うっかり

`GetData`

などと付けてしまいます。IQ低すぎる。

英語学習の観点からも、このようにして業務に関連したことばの類語をまとめて覚えるのは、非常に効率が良いです。命名力、英語力と一石二鳥であります。

<font color="MediumSpringGreen">次回からはChatGPTに頼らなくても命名できちゃう..ってコト？！</font>

かもしれませんね。

それでは良い命名ライフを！
【Rancher Desktop】chownでPermission  deniedになる（＠Mac）

# はじめに

- 備忘録です
- **Macユーザー向けの説明です**


以下のような`volume`を利用するdocker-composeファイルを用意して、

```yaml:docker-compose.yaml
version: "3"
services:
  mysql:
    build: ./
    volumes:
      - ./db:/var/lib/mysql #ここにデータ永続化するためのファイルが入る。
    image: mysqlapp
    container_name: "mysql"
    platform: linux/x86_64    # M1 Mac用の設定
    environment:
      - MYSQL_ROOT_PASSWORD=password
    ports:
      - "127.0.0.1:3306:3306"
```

`docker-compose up`コマンドを実行すると、コンテナ起動中にPermission deninedエラーが起きてコンテナの起動に失敗する。

```
$ docker-compose up
:
(省略)
:
mysql  | 2023-11-29 04:39:28+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.30-1debian11 started.
mysql  | chown: changing ownership of '/var/lib/mysql/': Permission denied
mysql  | chown: changing ownership of '/var/lib/mysql/binlog.000034': Permission denied
mysql  | chown: changing ownership of '/var/lib/mysql/binlog.000033': Permission denied
mysql  | chown: changing ownership of '/var/lib/mysql/private_key.pem': Permission denied
mysql  | chown: changing ownership of '/var/lib/mysql/database': Permission denied
:
(省略)
:
```

# 対処法

Rancher DesktopのGithubの[Issue](https://github.com/rancher-sandbox/rancher-desktop/issues/1209#issuecomment-1370181132)にあるように、以下の設定を
`~/Library/Application\ Support/rancher-desktop/lima/_config/override.yaml`に記載すれば良い。
（Rancher Desktopインストール直後、`override.yaml`は存在しないので、作成する必要がある）

```yaml:override.yaml
mountType: 9p
mounts:
  - location: "~"
    9p:
      securityModel: mapped-xattr
      cache: "mmap"
```

**注意**（2024/7/23追記）
`override.yaml`を更新後はRancher Desktopを再起動すること！！
再起動しないと記載内容反映されないみたいです。（最近Rancher DesktopをFactory Resetして同じ問題に引っかかり、この対処をしたけど問題解決しなくて５分くらい悩んだ）
@changeイベントで発火しない

# はじめに
2023年7月より未経験でエンジニアとして働いています。
普段、laravel+vue3を使ったウェブアプリの制作を担当しています。
業務を行っていく中で学んだことを発信してきたいと思います。

# 参考記事
[HTMLElement: change イベント](https://developer.mozilla.org/ja/docs/Web/API/HTMLElement/change_event)

# 何をしたかったか？
![プレゼンテーション1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2666919/6c4fd7e2-0a18-ea99-26d2-2342146281e8.png)

vueでフロント側の実装をしている際に、とある箇所の背景色をカラーピッカーを使って、ユーザーの好きな色に変更できる様にしよう！と実装していた時のこと。

- ユーザーがカラーピッカーで色を選ぶと上のカラーコードも連動し変わる
- カラーコードを直接入力しても色の変更ができる

上記の状態で、カラーコードの値が変更されたタイミングで、背景色を変更する様にしたかった。
```vue
<div class="border-gray-300 ">
  <span class="text-sm">カラーコード</span>
  <input
    v-model="changeBackgroundColor"
    @change="onBackgroundColorCodeChanged"/>
</div>
<div class="ml-6">
  <span class="text-sm">色を選択→</span>
  <input
    v-model="changeBackgroundColor"
    type="color"
    @click="onBackgroundColorChanged" />
</div>
```
# 何が起きたのか？
カラーピッカーで色を変えた際に、自動でカラーコードが書き換わった時にはイベントが発火しなかった。

# 調べてみた
参照先より
> change イベントは \<input>, \<select>, \<textarea> 要素において、ユーザーが要素の値を変更したときに発行されます。 input イベントとは異なり、 change イベントは要素の値 (value) が変更されるたびに発生するとは限りません。

自分はinput内の値が変更されるたびにイベントが発火すると思い込んでいたため、うまく取得することができなかった。

# 結果
今回はユーザーがカラーコードを指定して色を決めることは少ないという判断となり、カラーコードのinputは不要という実装になったが、とても勉強になった。
参照用

'''

Sub RemoveSpacesFromFirstRowAndSpecificColumn()
    Dim ws As Worksheet
    Dim cell As Range
    Dim targetColumn As Integer

    For Each ws In ThisWorkbook.Worksheets
        ' 1行目の全てのセルに対してスペース削除
        For Each cell In ws.Range(ws.Cells(1, 1), ws.Cells(1, ws.Cells(1, ws.Columns.Count).End(xlToLeft).Column))
            cell.Value = Replace(cell.Value, " ", "")
            cell.Value = Replace(cell.Value, Chr(12288), "")
        Next cell

        ' "取引先名"列を見つける
        For i = 1 To ws.Cells(1, ws.Columns.Count).End(xlToLeft).Column
            If ws.Cells(1, i).Value = "取引先名" Then
                targetColumn = i
                Exit For
            End If
        Next i

        ' "取引先名"列の各セルに対してスペース削除
        If targetColumn > 0 Then
            For Each cell In ws.Range(ws.Cells(2, targetColumn), ws.Cells(ws.Rows.Count, targetColumn).End(xlUp))
                cell.Value = Replace(cell.Value, " ", "")
                cell.Value = Replace(cell.Value, Chr(12288), "")
            Next cell
        End If
    Next ws
End Sub

'''
3.パッケージインストール


**3.パッケージインストール**

WEBスクレイピングをするために必要なパッケージをインストールします。

・目次
3.1.Seleniumのインストール
3.2.pandasのインストール
3.3.ChromeDriverのインストール
3.4.ChromeDriverの更新、バージョン確認

<br>
<br>
<br>
<br>

**3.1.Selenium（セレニウム）のインストール**
Selenium：Web ブラウザの操作を自動化するためのフレームワーク

コマンドプロンプトにて以下コマンドを実行する。

```コマンドプロンプト.
>pip install selenium
```

<br>
<br>
<br>

**3.2.pandas（パンダス）のインストール**
pandas：データ解析ライブラリ

コマンドプロンプトにて以下コマンドを実行する。

```コマンドプロンプト.
>pip install pandas
```

<br>
<br>
<br>

**3.3.ChromeDriverのインストール**
ChromeDriver：chrome用のWebDriverで、テストの自動化を実現するためのオープンソースツール


114以前のバージョン
https://chromedriver.chromium.org/downloads

<br>

115以上のバージョン
https://googlechromelabs.github.io/chrome-for-testing/

<br>

119.0.6045.160について
2023/11/29現在、chromeの最新バージョンは　~~【119.0.6045.160】~~　になるが、
ChromeDriverの【119.0.6045.160】が公開されていない。

2023/12/1　追記
2023/11/29にchrome【119.0.6045.200】がリリース。


|バージョン |日付  |chrome  |ChromeDriver |
|--|--|--|--|
|119.0.6045.105  |2023/10/30  |<font color="DeepPink">リリース済</font>  |　<font color="DeepPink">リリース済</font>  |
|119.0.6045.160  |2023/11/14  |<font color="DeepPink">リリース済</font>  |　未リリース  |
|119.0.6045.200  |2023/11/29  |<font color="DeepPink">リリース済</font>  |　未リリース  |
|120.0.6099.62   |2023/12/5   |<font color="DeepPink">リリース済</font>   |　<font color="DeepPink">リリース済</font>   |
|120.0.6099.63   |2023/12/5   |<font color="DeepPink">リリース済</font>   |　未リリース  |
|120.0.6099.110   |2023/12/13   |<font color="DeepPink">リリース済</font>   |　<font color="DeepPink">リリース済</font>   |
|120.0.6099.130   |2023/12/20   |<font color="DeepPink">リリース済</font>   |　未リリース  |
|125.0.6422.141   |2024/5/30   |<font color="DeepPink">リリース済</font>   |　<font color="DeepPink">リリース済</font>  |

以下からchromeの【119.0.6045.105】をダウンロードすることができる。

<br>

ChromeDriver【119.0.6045.105】　（安定版の最新）

https://edgedl.me.gvt1.com/edgedl/chrome/chrome-for-testing/119.0.6045.105/win64/chromedriver-win64.zip


Chrome【119.0.6045.105】　（2023/10/30　に更新）

https://edgedl.me.gvt1.com/edgedl/chrome/chrome-for-testing/119.0.6045.105/win64/chrome-win64.zip

<br>
<br>
<br>

**3.4.ChromeDriverの更新、バージョン確認**

https://qiita.com/BubbleBubble/items/9736a1163a7ff35b1b5d


<br>
<br>
<br>

以上！
アクセスキーを使わずに、AWS CLIを利用する

実は、半年間くらい悩んでました。。。知っている人は当たり前なのかもしれないけど。

マネジメントコンソールからの操作だけだと、AWSの操作が煩雑だし、間違えやすいので
AWS CLIを利用することが多いです。
また、Visual Studio CodeからAWSを操作する場合も、AWS CLIを経由することになります。
Qiitaにも、AWS CLIを利用する方法が多数書かれていますが、ほとんどがアクセスキーを利用しています。
しかし、アクセスキーをつかった長期的な認証はベストプラクティスとはされておらず、
一時的な認証を利用することが推奨されています。
![2023-11-29-16-10-34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/187830/2b4a6693-8042-2aa5-7c3c-fc2037f95eee.png)
そこで、アクセスキーを使わずにマネジメントコンソールのCloudShell上で一時クレデンシャルを発行し、それを用いてAWS CLI等でアクセスする方法を提案します。

## 前提条件
AWS CLIはインストールされて、初期設定（aws configure）が終わっていること。
このときのAccess key ID、Secret access keyは、ブランクで構いません。

## 手順
### 1. Assume Roleするロールを作成する
ログインしたIAMのユーザーの権限はあまり大きな権限を持たせず、
必要な権限はAssume Roleするロールに付与することが推奨されています。
Assume Roleするロールを作成します。
例えば、ロールを新規作成し、以下のように設定します。
許可ポリシー
```json
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "*",
            "Resource": "*"
        }
    ]
}
```

信頼関係(IAMユーザーYYYYがAssume Roleできるようにする)
```json
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": [
                    "arn:aws:iam::xxxx:user/YYYY"
                ]
            },
            "Action": "sts:AssumeRole"
        }
    ]
}
```

### 2. CloudShellを起動する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/187830/84d81553-a001-220c-3278-945a3a7ced1c.png)

### 3. aws sts assume-roleコマンドを実行する
私は、CloudShellに下記のようなシェルスクリプトを作成しています。
ROLE_ARNに、1.で作成したロールのARNを設定してください。
SESSION_NAMEは、任意の文字列を設定してください。（ロールやユーザーを区別できるほうが良いですね）

```bash
#!/bin/bash

ROLE_ARN="arn:aws:iam::xxxx:role/yyyyy"
SESSION_NAME="AWSCLI"

# aws sts assume-role コマンドを実行
OUTPUT=$(aws sts assume-role --role-arn $ROLE_ARN --role-session-name $SESSION_NAME)

# 結果から各値を抽出
AWS_ACCESS_KEY_ID=$(echo "$OUTPUT" | jq -r '.Credentials.AccessKeyId')
AWS_SECRET_ACCESS_KEY=$(echo "$OUTPUT" | jq -r '.Credentials.SecretAccessKey')
AWS_SESSION_TOKEN=$(echo "$OUTPUT" | jq -r '.Credentials.SessionToken')

# 標準出力にcredentials形式で出力
echo "aws_access_key_id = $AWS_ACCESS_KEY_ID"
echo "aws_secret_access_key = $AWS_SECRET_ACCESS_KEY"
echo "aws_session_token = $AWS_SESSION_TOKEN"
```
### 4. CloudShellの出力をコピーする
下記のような出力が得られます。これをクリップボードにコピーします。
```
aws_access_key_id = XXXXXXXXXXXXXXXXXXXXX
aws_secret_access_key = YYYYYYYYYYYYYYYYYYYYYY
aws_session_token = ZZZZZZZZZZZZZZZ
```

### 5. .aws/credentialsファイルに貼り付ける
下記のファイルを開いて、4.でコピーした内容を[default]の下に貼り付けます。
```C:\Users\(ユーザーID)\.aws\credentials```

これで、AWS CLIを利用するときに、アクセスキーを利用せずに、
一時クレデンシャルを利用することができます。
有効期限は1時間です。1時間過ぎたら直ぐに切断されるということはなく
切断されるまでの間は、AWS CLIを利用することができます。

## おわりに
MFAを利用している場合も、特に手順に変わりはないです。
MakeとZapierの比較 ：ノーコードツール



MakeとZapierは、ビジネスや日常の作業を自動化するための強力なツールです。


どちらも「ノーコード」という手法を採用しており、プログラミングの知識がなくても使えるのが大きな魅力です。


## Makeとは？

Make（旧称Integromat）は、様々なアプリケーションを連携させて、作業の自動化を実現するツールです。


例えば、メールが届いたら自動でカレンダーに予定を追加したり、SNSの投稿を自動で行ったりすることができます。


## Zapierとは？

Zapierもまた、アプリケーション間の連携を可能にするツールです。Makeと同様に、メール、カレンダー、SNSなどの異なるサービスを組み合わせて自動化を行うことができます。


## MakeとZapierの料金プラン比較


### Makeの料金プラン

| プラン名     | 月額料金       | 実行回数  | インテグレーション数 |
|-------------|--------------|----------|------------------|
| 無料プラン   | 無料         | 月1,000回 | 2つ               |
| Coreプラン   | 月額9ドル    | 月10,000回| 5つ               |

👉 ポイント: Makeは無料プランで月1,000回の実行が可能で、Coreプランでは月10,000回まで実行できます。

### Zapierの料金プラン

| プラン名       | 月額料金       | タスク数      | パターン数 (Zap) |
|---------------|--------------|------------|----------------|
| Free          | 無料         | 月100タスク  | 5 Zaps          |
| Starter       | 月額2,691円  | 月750タスク | 20 Zaps         |
| Professional  | 月額6,595円  | 月2,000タスク| 無制限           |
| Team          | 月額40,242円 | 月500,000タスク| 無制限        |
| Company       | 月額80,618円 | 月1,000,000タスク| 無制限      |

👉 ポイント: Zapierは無料プランで月100タスクが可能で、有料プランではタスク数が大幅に増え、より多くのZapを設定できます。

これらの表から、MakeとZapierはそれぞれ異なる料金プランを提供しており、ニーズに応じて選択することが重要です。


### Makeの連携可能なツール

Makeは1,000以上のウェブサービスに対応しています。

- Google関連サービス（Gmail、Googleカレンダー、Googleスプレッドシートなど）
- Slack
- Dropbox
- Discord
- Trello
- SSHコマンドの発行
- CSVファイルの読み書き

### Zapierの連携可能なツール

Zapierは5,000以上のアプリケーションやウェブサービスとの連携が可能です。

- ビジネスチャットツール（Chatwork、Slackなど）
- 表計算ソフト（Googleスプレッドシート、Microsoft Excelなど）
- メールサービス（Gmailなど）
- タスク管理ツール（Trelloなど）
- SNSアプリ（Twitter、Facebook、Instagramなど）
- カレンダーツール（Googleカレンダーなど）
- メモツール（Evernote、OneNote、Googleドキュメントなど）
- ビデオ通話ツール（Zoomなど）
- 動画プラットフォーム（YouTubeなど）

Za
AWSの新サービス「Amazon Q」はAWSリソースを参照できるChatGPT？

# ■概要

AWSを運用するエンジニアにとっては期待のサービス「Amazon Q」が公開となりました！
端的に言うと、AWSのリソースを参照できるChatGPTというのが分かりやすいでしょうか？

以下公式の記事を参考に書いていきます！

> Amazon Q は、IT プロフェッショナルと開発者に AI を活用した生成支援を提供します (プレビュー)
> https://aws.amazon.com/blogs/aws/amazon-q-brings-generative-ai-powered-assistance-to-it-pros-and-developers-preview/

:::note warn
前提として、使用できるリージョンは米国東部 (バージニア北部) と米国西部 (オレゴン) のプレビューのみです！（2023/11/29現在）
:::

![サポートリージョン.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/954355/1989c50e-7077-e289-0832-962d395dffd3.png)

# ■Amazon Q の機能

今回発表（紹介？）されている項目は以下の7つのようです。

1. 会話型Q&A機能
2. Amazon EC2インスタンス選択の最適化
3. コンソールで直接トラブルシューティングとエラー解決
4. ネットワークのトラブルシューティング支援
5. IDEとの統合と会話機能
6. 機能開発能力
7. Amazon Q Code Transformationによるアプリケーションのアップグレード

今回は一番基本的な機能となるであろう「会話型Q&A機能」についてもう少し詳細に書いてみます。

# ■会話型 Q&A 機能

使用開始するには、画面右側の「Amazon Q アイコン」を選択する事で開始できます。

![アイコン.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/954355/dc23c932-4c14-a0c1-b61a-656b4907e49b.png)

↓

![アイコン2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/954355/e655f28c-4002-6d84-9c63-c4b34eaa47ed.png)

上記のように表示されました。
ブラウザ側で日本語に変換してみます。

![アイコン2日本語.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/954355/2a3e3f51-5db3-7dd1-dd32-874ae6abc320.png)

「AWSについて何でも聞いてください」の所に質問を入れれば、現状のリソースをもとに的確なアドバイスをもらえるというイメージですかね！
ちなみに他生成AIと同様に継続して会話をする事も可能になっています。

# ■何か聞いてみる

例文であった以下を聞いてみて、回答を確認しました。

What is the CLI command to list all the t3.micro instances in my account?
（アカウント内のすべてのt3.microインスタンスをリストアップするCLIコマンドは何ですか？）

![質問1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/954355/68b7954f-399c-e2a6-1092-3aefc8c26b4e.png)


コマンドdescribe-instancesを使用して、NameとValuesでフィルタリングすると良いと返ってきました。

AWSアカウント内のすべてのt3.microインスタンスを一覧表示するには、以下のAWS CLIコマンドを使用できます。
```
aws ec2 describe-instances --filters Name=instance-type,Values=t3.micro
```

# ■他の質問

その他以下の質問を投げてみました。

Why can't I reach my web server from the Internet?
（インターネットからウェブサーバーにアクセスできないのはなぜですか？）

![質問2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/954355/b45ec18c-0bfc-0de4-4e39-aa4d19df8729.png)

「AWS Q for Reachability Analyzer」を使用してくださいって事みたいです。
リンクを押下すると画面が切り替わりました。

![質問2_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/954355/683a6e91-429d-aba6-dab0-cea20421559c.png)

しかし、この処理中の状態で待ち続けても回答は返ってこず…
ネットワークに関する他の質問も投げてみましたが同じ状況でした…（聞き方が悪いのか…）

もう少し検証進めますが、今日はここまで。

# ■最後に
AWS内で発生しているエラーに関するトラブルシューティングに利用できそうで、時間のかかる手動ログのチェックや調査への活用もあるみたいですね。
後はインスタンスのEC2インスタンス選択の最適化を手伝ってくれるようなんですが、稼働リソースに関する質問とかも受けれるようになるんでしょうか？

今の所はプレビューですし、東京リージョンで使える日を楽しみにしたいと思いました。
簡単な内容になりましたが以上です！
ID by amoのアプリを閉じる挙動を再現

ID by amoにて新着通知を全て確認し終わると、「おわり！」「そっちでも楽しんでね」などのメッセージと共にアプリが終了する

https://scrapbox.io/files/6566b2e4698aa20023c35fd8.mov


これをSwiftでやるには任意の場所で以下を実行する
```Swift
UIControl().sendAction(#selector(URLSessionTask.suspend), to: UIApplication.shared, for: nil)
Timer.scheduledTimer(withTimeInterval: 0.2, repeats: false) { _ in
  exit(0)
}
 ```

> ホーム画面に戻る
```Swift
UIControl().sendAction(#selector(URLSessionTask.suspend), to: UIApplication.shared, for: nil)
```


`exit(0)`はCの標準ライブラリに存在する関数
　プログラムを正常終了させるもの

## 引用元
 [アプリ起動中に、コードによりホーム画面に戻る方法 #Swift - Qiita](https://qiita.com/p_x9/items/8c9332058a647b2ac312)

## Scrapbox版
 [ID by amoのアプリを閉じる挙動を再現](https://scrapbox.io/armtic/ID_by_amo%E3%81%AE%E3%82%A2%E3%83%97%E3%83%AA%E3%82%92%E9%96%89%E3%81%98%E3%82%8B%E6%8C%99%E5%8B%95%E3%82%92%E5%86%8D%E7%8F%BE)

## ChatGPTに質問してみた
https://chat.openai.com/share/a0083074-a786-4270-b4b4-d7ed4cb14da6
【Unity】Inspectorウィンドウから実行するスクリプト（カスタムエディタ）

Unityの開発補助ツールを作りたくて、
Inspectorウィンドウのクリックをトリガーに何かするものを作りました。


## 作ったもの
Inspectorで入力してOK押すと、コンソールに入力した文字が表示されます。

[![Image from Gyazo](https://i.gyazo.com/cce2a7a4b12001199d0d0026edade16f.png)](https://gyazo.com/cce2a7a4b12001199d0d0026edade16f)

## 方法

スクリプトを作成

ファイル名は大文字が良さそう。

```Hoge.cs

using UnityEngine;

public class Hoge : MonoBehaviour
{
    public string text; // Inspectorでユーザーが入力するところ

    public void onClick()
    {
        Debug.Log(text);
    }
}
```


Editorフォルダを作成し、
そこに以下のスクリプト（エディタースクリプトというらしい）を作成します。

```hogeEditor.cs
using UnityEngine;
using UnityEditor;

[CustomEditor(typeof(Hoge))]
public class hogeEditor : Editor
{
    public override void OnInspectorGUI()
    {
        Hoge hoge = (Hoge)target;

        // インターフェースの描画
        DrawDefaultInspector(); // 既存のインスペクターのフィールドを描画

        // OKボタン
        if (GUILayout.Button("OK"))
        {
            hoge.onClick(); // HogeのOnClickメソッドを呼び出す
        }
    }
}

```

　以上です。