OmniAICreator/Qiita-1.07M huggingface dataset:
【速報】Azure OpenAI Serviceで「Japan East」リージョンを選択できるようになったぞーーーー！！！！！

KDDIアジャイル開発センターのはしもと（仮名）です、突然の出来事でした。
お昼ごはんを食べながらSNSをパトロールしていたところ、

https://twitter.com/v2to4/status/1678607136920834048?s=20

https://twitter.com/hayaok3/status/1678628409650585600?s=20

へ？

## 待ってました

**Azure OpenAI Service が国内リージョンに上陸しました！！！！！！！**

:::note warn
こちらについて、記事執筆時点で、公式ウェブサイトやSNSアカウントでの正式なアナウンスは見当たりませんでした
そのため、記事内の確認内容に関しても、今後変更になる可能性があるのでご注意ください
https://learn.microsoft.com/en-us/azure/cognitive-services/openai/whats-new

:::

## 何が嬉しいか
思いつく範囲で、次のような点が挙げられます。

**レイテンシーの改善**
データセンターが利用者に近い地理的位置にあると、データの送受信にかかる時間が短縮されます。
これにより、Azure OpenAI Service を利用するアプリケーションやサービスのパフォーマンスが向上することが期待できます。

**データのプライバシー管理とコンプライアンス準拠**
データが日本国内で処理および保存されるため、日本国の法規制や、各企業のセキュリティポリシーに則ったシステム構築の実現可能性が高まります。
企業が自社内で持っているデータを活用するには、データの所在地は考慮すべき事項のひとつです。

**システム構成の簡素化**
既に国外のリージョンでシステムを運用している場合を除き、これまでは同サービスを利用するために、日本国外のリージョンを併用する必要がありました。
複数のリージョンにシステムがまたがることによる一番の懸念は、構成が複雑になることで認知負荷が増大し、管理が難しくなるという点でしょう。
また、リージョン間の通信によって追加のコストが発生したり、それにかかる時間は直接レイテンシーに上乗せされることになります。


## リソースの作成
早速管理画面からリソースを作ってみます！

「リージョン」横からプルダウンメニューを開くと・・・？

<img width="400px" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/463957/55aeca80-7c6d-21a2-3abb-8281ad755a9a.png">

<img width="400px" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/463957/2d7c7363-4121-0104-e7c1-b4077859bfe4.png">

<img width="400px" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/463957/a552f221-8d2f-2f43-7c71-c9b26d2d4f6d.png">

**あんらまァ〜〜〜〜〜〜〜〜〜〜〜〜〜！！！！！！！！！！🤗🤗🤗🤗🤗（恍惚）**

その他設定を入力し、「作成」を選択。少し待つと、

<img width="400px" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/463957/98cc6001-7551-b331-d784-d5c520cd7881.png">

**「場所：Japan East」**！！！！！これを待っていた！！！！！

対応しているモデルを確認するため、Azure OpenAI Studio に移動し、モデルのデプロイ設定画面に進みます。

<img width="400px" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/463957/a9afe51b-b4f2-b52a-bbfe-b2558eb746d9.png">

上記のとおり、現状 Japan Eastリージョンで選択可能なモデルは、
- **gpt-35-turbo**
- **gpt-35-turbo-16k**

のみのようです。

## その他調査内容

なお、確認時点（2023/07/11 15:23)では、Azure公式ドキュメントにも、Japan Eastリージョンに対応済みの旨の記載は見つかりませんでした（その他モデルも同様）

<img width="400px" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/463957/e0d02d62-35e6-3a9e-9bf8-9cd79d4ee272.png">

https://learn.microsoft.com/en-us/azure/cognitive-services/openai/concepts/models

## まとめ
いやあ、いきなりでしたね。待望の日本上陸。お待ちしておりました。
ありがとう Microsoft、ありがとう OpenAI。

国内リージョンでモデルのプロビジョニングが行えるようになることで、レイテンシーなどの性能面、既にAzure上にシステムを構築しているユーザーにとっては構成の簡略化、また企業での利用においては、国内に配置されたサーバーを利用する、またはデータが保管されるという点で大変需要が大きいのではないでしょうか。

GPT-3.5以外のモデルへの対応や料金体系などなど、ほかにも気になる点はありますが、続報を待ちたいと思います。
プロジェクトマネージャー合格体験記(になったらいいなと思う)

# はじめに

## この記事について

この記事はまだ合格体験記じゃないです（笑）。目的は
* 合格できるようにモチベーションを維持する
* 集めた情報のナレッジ化
としてます。

※ 2023-7-19 記事タイトル換えました。
## スペック

参考までに筆者のスペックを記載

* ITエンジニア歴は9年程
* 主にAWSのインフラを構築している人
* データベース知識はOracle Bronzeの資格を持っている程度（Silverは１回落ちて諦めた）
* SnowflakeとかAWSのEMRでデータを取り扱うことがちょこちょこあった

データベースの知識はこんなもんです。他IPAの取得資格は以下

* 応用情報
* 情報処理安全確保支援士
* ネットワークスペシャリスト

全部半年刻みでとっているので、ここにデータベーススペシャリストもいれたいと思っている。

が仕事の内容考えるとPMとった方が役立ちそうだなと思ったので切り替えた。

## 試験勉強

### 7月

* とりあえず[データベーススペシャリストドットコム](https://www.db-siken.com/dbkakomon.php)で過去問をやる。
* [うかる！データベーススペシャリスト](https://www.amazon.co.jp/%E6%83%85%E5%A0%B1%E5%87%A6%E7%90%86%E6%95%99%E7%A7%91%E6%9B%B8-%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9%E3%82%B9%E3%83%9A%E3%82%B7%E3%83%A3%E3%83%AA%E3%82%B9%E3%83%88-2022%E5%B9%B4%E7%89%88-IT%E3%81%AE%E3%83%97%E3%83%AD46/dp/4798174904)で試験傾向をつかむ。

これだけだとちょっと試験対策によりすぎているので教科書的なサイトから本を探す予定

※ちなみにAWSのANS-C01を並行して勉強しているので現状あんまり手つかずである。自分でもよくやると思っている。

### 現状

とりあえず、2023/07/11現在の状況を書いた~。随時更新する予定。
[React] スタートセッティング

# スタートセッティング
reactの開発環境設定です。

1. まずnode.jsをインストールします。
![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3509555/f18ef4d4-e017-fd47-ac63-3c7fe218f80c.png)

windowsなら左です。
![2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3509555/9ccb4c60-cae1-7b8e-6c88-c6a88dfd8148.png)

ダウンロードしたmisファイルを実行します。
![3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3509555/d8ab2ff3-fec0-7176-a69e-6d45ae66dbad.png)

全てをnextをクリックします。
![4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3509555/69413eb2-5abe-62c4-4496-0abb08674b43.png)

ダウンロードが完了したら、フォルダを作って
右クリック、ターミナルで開くをクリックします。
![5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3509555/b59fbad7-64b1-d6d8-95a7-56320130b465.png)

次のように入力します。
```terminal
npx create-react-app プロジェクト名
```
![6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3509555/27693c35-a77c-06cf-d629-35544d18f49e.png)

完了した画面です。
![7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3509555/55f82a8a-2758-af0f-b141-c18e1b42765e.png)
エラーが出る場合下のリンクを参考してください。
[npxエラー]( https://qiita.com/huraipan/items/6ddbe10bbcacab2df87f "npxエラー" )


vscodeでフォルダを開きます。
![16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3509555/b16c92cf-d6dc-d17a-51df-f94273d19e74.png)

開いたらターミナルを開けてください
![18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3509555/8ec603b9-2db4-6afb-d474-7ccab2a56458.png)

ターミナルで
```terminal
npm start
```
を入力してください。
![19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3509555/4cc7390a-4ffd-0e9c-0e7f-84d7664aa2b6.png)
npmが入力できないばあいは下のリンクを参考してください。
[npmエラー]( https://qiita.com/huraipan/items/07e1d40cc5ad9c1fb7aa "npmエラー" )

待てばこの画面が出ます。:ok_hand:
![20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3509555/702259e2-d217-e009-d2fa-be46515a1e07.png)
Docker containerの初期設定を確認する方法　"printenv"

![download.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/654025/6cf3f247-5f5e-a44e-14d4-da138def37f1.jpeg)


# Docker pull mysql

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/654025/96aea739-45c3-67a6-8427-a9fac3651340.png)

#  docker scout quickview mysql

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/654025/01c6f870-6785-0798-342f-7131f6275266.png)

# Docker run Mysql

```terminal:terminal
    
    docker run -d --name mysql-tutorial -p 3306:3306 -e MYSQL_ROOT_PASSWORD=password -e MYSQL_DATABASE=testDB -e MYSQL_USER=user -e MYSQL_PASSWORD=user mysql

```

# Docker ps
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/654025/a6d2bcb3-9434-3e37-0e55-c4d6a0813d65.png)

# Docker exec -it mysql-tutorial bash

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/654025/8e18978e-39ba-2d4e-3566-02d26bd11886.png)


# printenv

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/654025/3b1c4bd1-570e-798f-d9d1-8d10fdc60147.png)


# mysql -u root -p

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/654025/d1135384-53b7-8056-2996-cf214b8c7b78.png)

### printenvを使うと、初期設定の一覧を表示させることができます。
AWSIMで取得したdb3データのLiDAR点群を表示する方法

## 環境
AWSIMでTIERⅣが用意してくれた西新宿の環境でdb3データを取得する。
[Japan_Tokyo_Nishishinjuku.unitypackage](https://github.com/tier4/AWSIM/releases/download/v1.0.0/Japan_Tokyo_Nishishinjuku.unitypackage)
注：ubuntu22.04にROS2 HumbleとAWSIMのインストールが必要
![Screenshot from 2023-07-11 12-19-05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3314139/ce59f77e-00bc-7137-478f-6ad2975e9b90.png)


## 手順
ここからは、西新宿で取得したdb3データのLiDAR点群を表示する方法を説明する。
## 1.Rvizの起動
以下のようにコマンドを入力し、db3データのLiDAR点群を確認するためのツールであるRvizを起動する。

```
$ rviz2
```
以下のような画面が起動する。
![Screenshot from 2023-07-11 13-53-58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3314139/a730fd7f-3394-f432-d316-2e5b47e4743c.png)

## 2.フレームIDの確認
最初にdb3データを動かしたあとに、`pointcloud_raw_ex`のフレームIDを`ros2 topic echo`で確認する。
```
$ ros2 play bag <db3-Filepath＞
$ ros2 topic echo /sensing/lidar/top/pointcloud_raw_ex
```
うまくいくと以下のようにフレームIDが表示される。
今回の場合だとフレームIDには`sensor_kit_base_link`と表示される。

```
...
header:
  stamp:
    sec: 
    nanosec: 
  frame_id: sensor_kit_base_link
height: 
width: 
...
```
## 3.Rvizでdb3データのLiDAR点群を確認する
Rviz起動後に左側の`Display`の`Fixed Frame`に「2.フレームIDの確認」で得られたフレームIDを入力する。
今回の場合なら`sensor_kit_base_link`と入力する。
![Screenshot from 2023-07-11 13-57-03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3314139/351dfe7c-0414-f10d-2d56-5d9a010658c3.png)
次に`Display`の下側にある`Add`ボタンをクリックする。
![Screenshot from 2023-07-11 14-01-46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3314139/51250b7b-4052-eba0-3b29-2145023c7fef.png)
`Add`ボタンをクリックすると以下のように`Create visualization`の画面が起動する。
![Screenshot from 2023-07-11 14-04-55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3314139/46c9520f-e5ca-65be-472c-fd17209c289f.png)
`Create visualization`の画面で`By topic`タブをクリックし、
さらに`/sensing/gess/lider/top/pointcloud_raw_ex`の`PointCloud2`をクリックする。
最後に`OK`をクリックする。
![Screenshot from 2023-07-11 14-05-52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3314139/7fdb9596-59bd-7f08-884d-b687ec48580f.png)
`Display`に`PointCloud2`が追加される。
![Screenshot from 2023-07-11 14-15-26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3314139/f5cc7359-940c-24ad-1636-bf72f227a6fb.png)
`PointCloud2`の`Topic`内にある`Reliability Policy`をデフォルトの`Reliable`から
`Best Effort`に変更する。
![Screenshot from 2023-07-11 14-16-27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3314139/1fe93d55-e78b-b1af-9f0f-7605bdcf224e.png)
最後にもう一度以下のようにコマンドを入力する。
```
$ ros2 play bag <db3-Filepath＞
```
Rviz内でdb3データのLiDAR点群がAWSIMで走行させたとおりに表示される。
![Screenshot from 2023-07-11 14-27-31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3314139/022230f0-48b4-954a-407c-489e0a1db41e.png)
クリップボードのパスをエクスプローラーで開くbatファイル

# TL;DR
```bat
for /f "usebackq" %%i in (`powershell get-clipboard`) do set CLIPPED_PATH=%%i
explorer %CLIPPED_PATH%
```

# 概要
タイトルの通りです。
メッセージで頻繁に飛んでくるパスを開くのが面倒だったので作りました。私はランチャーに登録して使っています。

**使い方**
CTRL + C 等を使ってクリップボードにコピーしたパスを、エクスプローラーで開きます。
ファイル名まで指定すると、拡張子に紐づいているソフトでファイルを開いてくれるようです。エクスプローラーの機能なのでしょうか。面倒なので調べてないですが、気が向いたら詳細を調べてみたいですね。
> 例 : "C:/Hoge/fuga.xlsx" というパスをコピーした状態で、上記batファイルを起動すると、エクセルでfuga.xlsxを開いてくれる



本当はワンライナーしたかったのですが、知識不足で無理でした。目的は1行で書くことではなかったので、別に良いのですが。

# ref
+ [Get-Clipboard - PowerShell - Microsoft Learn](https://learn.microsoft.com/ja-jp/powershell/module/microsoft.powershell.management/get-clipboard)
+ [for - so-zou.jp](https://so-zou.jp/software/tool/system/command-prompt/command/for.htm)
+ [意外と知られていないけど、知っていると便利な FOR コマンド - Web/DBプログラミング徹底解説](https://www.keicode.com/windows/for-command.php)
+ [.bat（バッチファイル）のforコマンド解説。 - Qiita](https://qiita.com/plcherrim/items/67be34bab1fdf3fb87f9)
Databricks on AWSで使用するS3バケット

改めて整理してみます。2023/7/11時点の内容です。

AWSでDatabricksをデプロイする際、お客様のS3バケットが必要となります。大きく分けて以下の3つのS3バケットが必要となります。

1. Databricksワークスペースの[ルートストレージ](https://docs.databricks.com/administration-guide/workspace/create-workspace-api.html#storage)
1. [Unity Catalogメタストア](https://docs.databricks.com/data-governance/unity-catalog/create-metastore.html)のストレージ
1. [外部ロケーションとストレージ資格情報](https://qiita.com/taka_yayoi/items/18fee92365eee58e0b94)で参照するストレージ

![Screenshot 2023-07-11 at 14.04.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/7e614bed-b700-245a-cc4a-9aff16fce8d7.png)

これ以外にクラスター(EC2)に付帯するEBSもありますが、ここでは説明を割愛します。

# Databricksワークスペースのルートストレージ

[DBFSルートボリューム](https://qiita.com/taka_yayoi/items/f15b50469b368907ec3b#dbfs%E3%83%AB%E3%83%BC%E3%83%88%E3%81%A8%E3%81%AF%E4%BD%95%E3%81%8B)、クラスターログ、ノートブックの改訂履歴、ジョブ実行結果などが格納されます。

このS3バケットは、複数のワークスペースで共有することができます。ワークスペースごとにS3バケットを作成する必要はありません。アカウントで複数ワークスペースでS3バケットを共有すると、S3バケットはワークスペースごとにパーティショニングされます。

DBFSはアクセスコントロールされないので、[プロダクション用途のデータは格納しないでください](https://qiita.com/taka_yayoi/items/406b639a9dcd43dbcc54)。テスト用データなどを格納するようにしてください。

# Unity Catalogメタストアのストレージ

Unity Catalogで管理されるテーブルのメタデータやデータが格納されます。

このS3バケットは**メタストア専用**です。他の用途では使用しないでください。

# 外部ロケーションとストレージ資格情報で参照するストレージ

上述した格納場所に当てはまらないケース、特にセキュリティ保護を講じてS3アクセスをコントロールしたい場合にはこちらのストレージを使用します。

https://qiita.com/taka_yayoi/items/18fee92365eee58e0b94

https://qiita.com/taka_yayoi/items/6bd7ed08eb80043085e2

### Databricksクイックスタートガイド

[Databricksクイックスタートガイド](https://www.amazon.co.jp/dp/B09V1YXFVQ/)


### Databricks無料トライアル

[Databricks無料トライアル](https://databricks.com/jp/try-databricks)
JavaScriptでCanvasを使用してグラフィックスを描画する方法

## HTMLでCanvasを作成する
最初に、HTMLファイル内にCanvas要素を作成します。Canvasは、幅と高さを持つ要素であり、JavaScriptコードによって描画された内容を表示します。

```html
<canvas id="myCanvas" width="500" height="300"></canvas>
```

## JavaScriptでCanvasを取得する
次に、JavaScriptコード内でCanvas要素を取得します。これには、`getElementById`メソッドを使用します。

```javascript
const canvas = document.getElementById("myCanvas");
const ctx = canvas.getContext("2d");
```

## 図形を描画する
Canvasの主な目的は、図形や画像を描画することです。以下に、いくつかの基本的な図形の描画方法を示します。

- 線を描画する:

```javascript
ctx.beginPath();
ctx.moveTo(50, 50);
ctx.lineTo(200, 50);
ctx.stroke();
```

- 四角形を描画する:

```javascript
ctx.fillRect(50, 50, 100, 100);
```

- 円を描画する:

```javascript
ctx.beginPath();
ctx.arc(150, 150, 50, 0, 2 * Math.PI);
ctx.stroke();
```

## スタイルと色の設定
Canvasに描画する図形のスタイルや色を設定することもできます。以下に、いくつかの例を示します。

- 線の色を設定する:

```javascript
ctx.strokeStyle = "red";
```

- 四角形の塗りつぶし色を設定する:

```javascript
ctx.fillStyle = "blue";
```

- 線の太さを設定する:

```javascript
ctx.lineWidth = 3;
```

## アニメーションの作成
Canvasを使用してアニメーションを作成することも可能です。以下に、基本的なアニメーションの作成方法を示します。

```javascript
function draw() {
  // Canvasをクリアする
  ctx.clearRect(0, 0, canvas.width, canvas.height);

  // アニメーションの描画コードをここに追加する

  // アニメーションの更新
  requestAnimationFrame(draw);
}

// アニメーションを開始する
draw();
```

## イベントの処理
Canvas上でのマウスのクリックやキーボードの入力などのイベントを処理することも可能です。以下に、マウスクリックイベントの例を示します。

```javascript
canvas.addEventListener("click", function(event) {
  const x = event.clientX - canvas.offsetLeft;
  const y = event.clientY - canvas.offsetTop;

  // マウスクリック位置での処理をここに追加する
});
```
Linuxコマンド忘却禄


参考URL
http://www.redout.net/data/command.html

```
cp -r A B
```
cpコマンドは、ファイルをコピーするためのコマンド
cp -r A B でディレクトリをコピーする
cpコマンドはディレクトリのコピーには適しているが、
大量のデータや階層構造の複雑なディレクトリの場合は、
rsyncコマンドなどを使用する
```
rsync [オプション] 同期元 [同期先]
```
AWSのS3のURLをLambdaで取得する（Python）署名付きじゃないやつ。

<h2>S3の画像URLをLabdaで取得したいだけ</h2>
やりがいことはAWSのS3に保存した画像URLをAWSのLambdaで取得してきて、そのURLをSNSやメールで投げたいだけ。<br><br>

なお筆者はS3の画像URLがどれなのかで一番つまずいた。

Amazon S3>バケット>localstable(任意の名前）>mumumu.png（任意の名前）の中にある【オブジェクトURL】がまさにそれである。

恐らくそれだろうという目星は筆者もすぐについた。

だがクリックしても下記のようなよく分からないエラーが出る。

```php:
<Error>
<Code>AccessDenied</Code>
<Message>Access Denied</Message>
<RequestId>M9DEV</RequestId>
<HostId>1ltHaEH/kZp5nol7r77C4xdwg0qt+Giq0quVh1HYsuJQvA==</HostId>
</Error>
```

S3+lambda+画像+取得などで検索すると署名付きURLの取得方法が書かれたものが大量にでてくるが、求めているのはそれではない。

単純に画像URLをLambdaで使いたいだけである。

<h2>オブジェクトURLを公開（有効）にする</h2>

【パケット】を選択
S3でパケットを選択し、自分で作ったパケットを選択：Amazon S3>バケット>localstable(任意）

【アクセス許可】を選択
オブジェクトやプロパティなどと書かれたタブのなかから

【ブロックパブリックアクセス (バケット設定)】を編集
　【パブリックアクセスをすべてブロック】からチェックを外す
　 すべてチェックされていないことを確認し【変更を保存】する　→　少し心配だか気にしたら負け

【パケットポリシー】（はじめは空欄）を編集
下記項目加筆する。

```php:
{
	"Version": "2012-10-17",
	"Statement": [
		{
			"Sid": "Statement1",
			"Effect": "Allow",
			"Principal": "*",
			"Action": "s3:GetObject",
			"Resource": "arn:aws:s3:::localstable(任意）/*"
		}
	]
}
```

Verionが古いと思ったが、2023年アマゾンが指定しているで不安かもしれないが問題なし。違うものは使えないらしい。

これで先程のAmazon S3>バケット>localstable(任意）>mumumu.png（任意）の中にあるオブジェクトURLが見れるようになったはずだ。



<h2>LambdaでのURLの記載方法</h2>

```php:
TextSendMessage(text='ht★tps://localstable.s3.ap-northeast-1.amazonaws.com/mumumu.png')
```
何に送るかで記載方法は変わってくるが、オブジェクトURLは丸ッとコピペして使えばいい。


ちなみに、パケットの中にURLが色々あって全てを表示したい場合などがあると思う。
その場合は下記のような記述でいいと思う。

まずファイル名(オブジェクト名)を取得する。

```php:
import boto3
s3 = boto3.client('s3')

def lambda_handler(event, context):
    response = s3.list_objects_v2(Bucket="バケット名を書く）")
    for object in response['Contents']: 
        print(object['Key'])
```

Contents,Keyは変更しないでバケット名だけ自分のものを使用


```
momomo.png
00009-190568967.png
00010-912531737.png
00014-912531741.png
00015-3060597289.png
00016-3060597290.png
```
こんな感じで返ってきているのでfor分の中をこんな感じ

```php:
for object in response['Contents']: 
        print('ht★tps://localstable（任意）.s3.ap-northeast-1.amazonaws.com/'+object['Key'])
    
```
で指定すればすべての値を受け取ることが可能


なお必要に応じてパケット名を取得する場合もあると思うので書いておく。参考にしてもらえればと思う

```php:
import boto3
s3 = boto3.client('s3')

def lambda_handler(event, context):
    response = s3.list_buckets()
    for bucket in response['Buckets']:
        print(bucket['Name'])
```

ファイルの内容を取得したい場合は
```php:
import boto3
s3 = boto3.client('s3')

body = s3.get_object(Bucket="バケット名を書く",Key="Objectの階層を書く")['Body'].read()
# バケット名がfruitsでバケットの直下にapple.jsonを置いている場合
# body = s3.get_object(Bucket="fruits",Key="apple.json")['Body'].read()
print(body.decode('utf-8'))
```

以上。

---
AWSのLambdaを使っていて思うのがLambda式で書こうものなら、説明が本当にややこしくなるな、なんてことをWeb開発未熟者の筆者は思うばかりである。
AWS・GCP・Azureのメリットとデメリットを徹底比較！

AWS・GCP・Azureのメリットとデメリットを徹底比較！私が選んだクラウドサービスは？

こんにちは、まりかです。今回は、私が仕事で使っているクラウドサービスについてお話ししたいと思います。

クラウドサービスとは、インターネットを通じてサーバーやストレージなどのITリソースを利用できるサービスのことです。クラウドサービスを使うと、自分でサーバーを用意したり管理したりする必要がなくなりますし、必要な分だけ利用できるのでコストも節約できます。

クラウドサービスにはさまざまな種類がありますが、今回はパブリッククラウドと呼ばれる、誰でも利用できるクラウドサービスの中から、世界的に有名な3つのサービスを比較してみたいと思います。

それが、以下の3つです。

– アマゾンウェブサービス（AWS）

– グーグルクラウドプラットフォーム（GCP）

– マイクロソフトのAzure

これらの3つのサービスは、それぞれにメリットとデメリットがあります。私はWebライターとして、これらのサービスをどう使い分けているのか、また私が選んだクラウドサービスはどれなのかをお伝えします。


AWS・GCP・Azureのメリットとデメリットを徹底比較！私が選んだクラウドサービスは？ 

https://maricablog.com/?p=887


Azure（アジュール）初心者向け解説と私の経験談：クラウドの海へ、一歩踏み出そう 

https://maricablog.com/?p=807


【体験から解説】クラウドコンピューティングの奇跡 – AWSが日本のビジネスを変革 

https://maricablog.com/?p=801
[React] ターミナルからWARNINGメッセージを削除

# ターミナルからWARNINGメッセージを削除

<br><br>
**react**でコードを書くときターミナルに**WARNING**メッセージがよくでます。
![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3509555/37b14392-72a0-c4a0-665d-1b39ea526e28.png)

<br><br>
そのようなメッセージは必要ですが、
簡単な作業やちょっと試してみるためにコードを書くときは邪魔に感じる時もあります。

実際の開発ではおすすめしませんが、上記の場合は書いてください。

```react
/* eslint-disable */
```
![2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3509555/c3449977-0340-24bb-fe17-6cbdc3856669.png)
これでWARNINGメッセージが出なくなりました。
Proxmox8 で時刻同期

## 参考

* https://souiunogaii.hatenablog.com/entry/proxmox7-4-vim-ntp

## 設定

/etc/systemd/timesyncd.conf

```go:/etc/systemd/timesyncd.conf
[Time]
NTP=ntp.jst.mfeed.ad.jp
FallbackNTP=ntp.nict.jp
```

```sh:同期
systemctl restart systemd-timesyncd
```
[React] npm command not found エラー

# npm command not found エラー
<br><br>

npm 関連命令語を実行しました。
```terminal
npm start
```
<br><br>


しかし次のような**エラー**メッセージが出ました。
この問題を解決するためにはいくつか**設定**をしなければならないです。
![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3509555/cc0f14fd-a645-bc59-4a0e-23d59bbf4811.png)


<br><br>
まず**環境変数編集**に入ります。
二つ目はダメです。
![10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3509555/ad8170ec-e777-dc88-6855-13e0eee14ac9.png)


![6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3509555/45dbce79-773d-cb57-6b25-6d5cc57049c7.png)


![3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3509555/5866e264-24e4-73b8-4f44-e127bf61420f.png)

<br><br>
自分のパソコン名前はCドライバーでユーザーに入ったら分かります。
```
C:\Users\自分のパソコン名前\AppData\Roaming\npm
```

![4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3509555/795a9556-b7e7-f936-30b1-128d69c41c7e.png)

![7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3509555/30ab3869-52b4-7678-e8a8-46929622f26b.png)
```
C:\Program Files\nodejs\
```
![8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3509555/5405ac63-1f9d-a425-40dd-dd56bda218ae.png)

これで解決できます！
[iPhone]１タップで固定ハッシュタグを埋め込んだXの投稿画面を表示する方法

※2023.12.09 Twitter→Xに表記変更

タイトルの件、きっとアプリとか調べたらあるのかも知らん。だけど調べてる時間がねぇ。
自分の持ってる知識だけでできないか。ということで作ってみました。

これを設定すると、ホーム画面にあるアイコンを１タップするだけで予め設定しておいたハッシュタグを埋め込んだ状態でXの投稿画面が立ち上がるようになります。自分で作っておいてなんですが、**めちゃくちゃ多用しています。**

<img width="400" alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110606/5e9b3298-7b4d-4c2e-6914-ff1c50e693ac.jpeg">

↑これが１タップで出せる。ハッシュタグはもちろん自分のものを設定可能。

# ●必要なもの

* X公式アプリ
* iPhone純正 ショートカットアプリ


# ●手順

1.ショートカットアプリを起動

2.＋マークを押して新規ショートカット作成画面を表示

3.「アクションを追加」ボタンを押して「Appおよびアクションを検索」のテキストボックスに「URL」と入れる

4.Safariのアイコンがある「URLを開く」を選択
<img width="400" alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110606/b310e259-7ac7-9be8-9e2f-c343b33f3861.jpeg">

5.「URLを開く」のURLのところをクリックして、以下を入力
```
https://x.com/intent/post?text=%23ハッシュタグを入力%20%23複数のときはこのように書く
```
ハッシュタグの前に「#」をつける必要はありません
これまでのTwitterでのAPI仕様と違って、ハッシュタグもテキストの１つとして扱われるので、%23=# でエスケープし、%20=半角空白で間をあけて複数ハッシュタグを付ける必要があります。
バリデーションは入ってないので禁止文字を使うとハッシュタグが千切れます(確認済)

6.名前とかアイコンを適当に変更(以下は参考）

<img width="400" alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110606/f262b8f6-fd9c-f193-f248-4a7f4d7c699d.png">

7.画面下にある共有ボタンを押す

8.「ホーム画面に追加」を押す
<img width="400" alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110606/6ff95430-987b-d269-86c3-6e9a2b8320f9.jpeg">

9.ショートカット名とかアイコンとか変えられるので適当に入力し、右上の「追加」ボタンを押す
<img width="400" alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110606/d1599623-ba67-8cc3-7aa4-b7d5aa6a23e2.png">

9. ホーム画面にショートカット起動用のアイコンができる
<img width="400" alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110606/b43fee52-136d-5364-b3da-1c58d9a6ddfb.png">

 
# ●実際の投稿画像

<img width="400" alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110606/a1f8d043-ccf3-3c6a-a423-7e57b42ab443.gif">


# ● Appendix

## PC使ってるなら固定できる

PCならChromeの拡張「BetterTweetDeck」使えば、Twitter公式ツール「TweetDeck」の投稿画面でハッシュタグを固定できます。（ただしUIを旧バージョンにロールバックしないといけないのでご注意ください）
タグの固定だけじゃなく、タブの幅変えたり色々できます。

↓記事を起こしました。

https://qiita.com/mamohacy/items/7510e7e09d8c59e07612


## タグを簡単に打つ別の方法

地味に辞書にハッシュタグを登録して、「た」とか打つと色々出てくるようにしてました。

<img width="400" alt="IMG_5127.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110606/749710d8-6401-b842-6452-75c076bc9a0d.jpeg">

これだけでも簡単になるといえばなるのだけど、

1. Twitterアプリ起動
2. 入力画面を出す
3. 文章を打つ
4. 「た」と打ってハッシュタグを選ぶ
5. 送信

という手順が必要になる。今回の方法を使えば1,2,4が全部すっとばせるので超便利。
JavaのOptional.or()とは

JavaのOptionalクラスの.or()メソッドは、Optionalが値を持っていない（つまり、Optional.empty()）場合に別のOptionalを返すメソッドです。

このメソッドにはSupplierを引数として渡します。

SupplierとはJava8で導入された関数型インターフェースで、引数を受け取らず何らかの値を返すメソッドget()を持つインターフェースです。

サンプル↓
```
Optional<String> optional = Optional.empty();

optional = optional.or(() -> Optional.of("サンプル"));
```

1行目ではoptionalは値を持っていません（Optional.empty()）。
そのため、or()メソッドが呼び出されると、渡されたSupplier（この場合は () -> Optional.of("alternative")）が呼び出され、その結果が新たなoptionalの値となります。
したがって、このコードの後ではoptionalは"サンプル"を値として持つことになります。

しかし、もし元のoptionalが値（たとえば"original"）を持っていた場合、or()メソッドはその値を変更せずに元のOptionalをそのまま返します。
つまり、Supplierは呼び出されません。
ETC：DSRC技術

各国の高速道路でETCを経験して最近日本のETCを通った時にふと思って調べました。

![ETC_gate-1000x667.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2934464/e53fb2ab-3e2e-6d4f-de6e-30020919ef7d.jpeg)

「ETCの基礎技術：DSRC」ってどういう仕組みなのか？

1. ETCは5.8 GHz帯のアクティブ方式DSRCによる無線通信を利用して通行車両の料金収受を行うシステムである。
2. DSRCの特徴として、アンテナの指向性と高精度なキャリアセンスにより、通信エリアを意図的に狭くコントロールしている。
3. DSRC通信プロトコルは、7層のOSI参照モデルの中で高速走行時での通信を考慮して第3-6層が存在せず、物理層・データリンク層・応用層の3層から構成。
![Screenshot 2023-07-11 121639.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2934464/b224b768-73c7-97e1-41b2-4c36f1ead09b.png)

https://www.arib.or.jp/kikaku/kikaku_tushin/desc/std-t75.html

4. ASK方式（On-Off Keying）でETCの運用を図っていることが分かった。
4. π/4シフトQPSK方式ではガソリンスタンドや駐車場などでのキャッシュレス決済、インターネット接続、物流管理などへの利用に期待され仕組みを多様化できるようにおもう。基準となる波形と、位相を90度、180度、270度ずらした計4つの正弦波を用い、それぞれを一つの値に対応付けることで一回の位相の変化で2ビットの値（00～11）を送ることができることから計算処理ミス回数が減るイメージがあって使いやすそうであるが。



規格でアメリカのIEEEが標準化することで信頼と情報が管理がしやすいように感じました。
現時点でわかるのはここまでです。また新たな情報が分かり次第（たぶん）追記します。
【ChatGPT無】複雑なプロンプトを処理するには

:::note info
本記事は、ChatGPT（無料版）で
行なっております。GPT4での確認
はできておりません。あしからず。
:::

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

　今回は、
　　プロンプトが複雑で、
　　　無料版では
　　　　処理しきれなくなった
　　　　　（不安定やエラーになる）
　　　　　　場合の回避方法です。

　簡単な話です。
　　DeepLなどで、
　　　英訳するのです。

　ChatGPTさんは、
　　アメリカンですから、
　　　無理に日本語で処理する
　　　　必要はないのです。
***
　これは、
　　よく言われている
　　　基本的なノウハウです。

　ですが、
　　今まで、
　　　そのメリットが
　　　　わかりませんでした。

　しかし、
　　プロンプトを作っていくと、
　　　複雑さが増していき、
　　　　無料版では
　　　　　処理できなくなる。

　しかも、
　　不安定さも
　　　増していく。

　これは、
　　自分なりの考えなのですが、
　　　これはトークンが
　　　　関係しており、
　　　　　英語だと、
　　　　　　ワードひとつが１トークン
　　　　　日本語だと、
　　　　　　ひと文字が１トークン
　　　　　　　場合によってはもっと。

　だから、
　　英語にする。

　メリットは、
　　処理できるようになる
　　　だけではありません。

　処理スピードが
　　早まります。

　内部で、
　　わざわざ、
　　　難しい日本語で
　　　　処理する必要が
　　　　　なくなるのですから
　　　　　　当然ですよね。

　そりゃ、
　　時間が掛かりますよね。
　　　当然だわ。
***
　英語圏の人が
　　日本語は
　　　難しい、とよく言います。

　まぁ、
　　ひらがな・カタカナ・漢字に
　　　英文字を使いこなす日本人。

　絵文字も
　　日本発祥。
　　　（発祥は意外と古い？）

　しかも、
　　漢字にいたっては、
　　　漢字使用国の中国にもない
　　　　字がある。

　逆輸入もされているとか。
　　すごいね、日本語。

　どうやら、世界最難度らしいですよ。
　　アメリカ国務省による
　　　「Language Difficulty Rankings」
　　　　で、カテゴリー5＋と判定。
　　　　　中国語や韓国語より
　　　　　　難しいらしい。

　文字種の多さも
　　さることながら、
　　　漢字の読み方や
　　　　オノマトペなんかが
　　　　　その拍車をかけている。

　まぁ、確かに、日本人でも
　　小鳥遊なんて読めんw
　　　九十九も読めんw
　　　　あっ、ツクモ電気、
　　　　　思い出した。

　ううむ、
　　こういう話、
　　　好きなので、
　　　　止まらないわ。

　ここでおしまい。
Reactでselectの初期値を可変にする方法

アプリ制作の中でselectの初期値をその日によって変えたいという要件が出てきました。
調べても良い情報が見つけられなかったのでChatGPTに聞いてみました。
それが以下のコードです。

```react
import { useEffect, useState } from 'react';

function App() {
  const [selected, setSelected] = useState('');

  useEffect(() => {
    // selectの初期値をorangeにしたい時
    setSelected('orange');
  }, []);

  // 選んだoptionを選択状態にする処理
  function handleChange(event) {
    setSelected(event.target.value);
  }

  return (
    <>
      <select name="fruits" value={selected} onChange={handleChange}>
        <option value="apple">Apple</option>
        <option value="orange">Orange</option>
        <option value="banana">Banana</option>
      </select>
    </>
  );
}

export default App;

```

## ざっくりとした仕組み
select要素にvalue属性を設定します。
option要素のvalueと同じものを設定するとそのoption要素が選択状態になります。

ただvalueを設定するのみだと初期値から変更できなくなってしまいます。
その為select要素にonChangeイベントを設定します。
onChangeでhandleChangeを実行しページ上で選択したoptionを選択状態にする処理を行います。

## useEffect内の処理について
useEffectの中で初期値に設定したいvalueを選びます。
今回は説明用に最小構成としているので無条件でorangeになっています。
例えば月曜日ならApple、火曜日ならBananaみたいな処理をここに書きます。

## さいごに
最初はChatGPTに言われるがまま書いて使いましたが後からしっかり仕組みを理解したいと思いこの記事を書きました。
optionにselected属性を設定するよりもこちらのほうがおすすめらしいです。
少しでも情報の足しになれば幸いです。
Tailwind CSSで変数内の文字列に改行を入れる

変数に入れた文字列を改行する方法について共有しておきたいと思います。

めちゃくちゃ簡単なので結論書きます。

```react:page.tsx
export default function Home() {
  const text = "これは一行目です。\nこれは二行目です。";
  return (
    <main className="flex min-h-screen flex-col items-center justify-between p-24">
      <div className="whitespace-pre-wrap">{text}</div>
    </main>
  );
}

```

これだけです。

ポイントは

1. 改行したい場所に改行コードの`\n`を入れる。
2. JSXでclassNameに`whitespace-pre-wrap`を追加する。

`whitespace: pre-wrap`はスペースや改行をブラウザに反映させるプロパティーです。
「あれ。今月AWS利用料高くね？あ。知らない間に無料利用枠超えてるわ・・・」とならないために

「勉強がてら<INS>無料枠内</INS>でEC2立ち上げてみよー」
「こんなサービスあるんだ！<INS>無料枠内</INS>でちょっと触ってみよー」

・・・1,2か月後:alarm_clock:

「ん？あれ？利用料かかってるーー:scream:」

そう。**現時点で無料枠の何%利用している**かを把握していないと、
知らない間に無料利用枠を超え💰がかかってしまう可能性があります！

本記事では、そうならないための回避策について(あたかも最新情報かのように)まとめてみました。

## 回避策①：使用状況アラートを使用する
個人的にはこの方法が手間がかからず<INS>オススメ</INS>です。

AWS無料利用枠の「使用状況アラート」を設定すると、
アカウント内の各サービス使用量が**無料利用枠の85%に達したよメール**を受け取ることができます！
<details><summary>実装方法</summary><div>
１．AWSマネコンの「請求ダッシュボード(Billing)」を開く

２．「請求設定」をクリック
３．アラート設定の「編集」をクリック
４．「AWS無料利用枠アラートを受信する」にチェックを入れる
　　※チェックを入れると[ルートユーザのEメール]宛に通知が届きます。
　　　その他のアドレスにも通知したい場合は、「Eメールアドレス(オプション)」に追加してください

５．「更新」をクリック
以上。これだけ。らくちん:heart_eyes:

:::note warn
自アカウントの請求設定がOrganizationsの親アカウントで管理されていると、
自アカウント側での設定変更できない場合があります。
:::

</div></details>

## 回避策②：マネコン上で使用状況を確認する
自動メール通知ではないですが、
請求コンソール上で無料利用枠の使用状況を確認することが可能です。

<details><summary>確認方法</summary><div>
１．AWSマネコンの「請求ダッシュボード(Billing)」を開く

２．「Free tier」をクリック
３．現在使用量と予測使用量(月末時点)を確認する
以上。これであとどれくらいかをパッと把握することができますね！
</div></details>

## (おまけ)：AWS Budgetsを使用する
AWS Budgetsを使用して無料枠を超えたときにアラート通知することもできます。
具体的な設定方法は下記を参照ください。
https://dev.classmethod.jp/articles/aws-budgets-tutorial/
Oracle Cloud Infrastructure Architect Associate 勉強メモ（DNS)

# DNS（ドメイン・ネーム・システム）とは
FQDN(Fully Qualified Domain Name）と呼ばれるドメイン名（人が読めるような形にしたIPアドレス）をすべて省略しないで書いたものをIPアドレスに変換するシステム。
手順としては
1. ドメイン名をフルサービス・リゾルバと呼ばれるドメイン名とIPアドレスの対応がわかるサーバーに問い合わせる。（このサーバーでは以前に問い合わせされたものがキャッシュとして残されている。）ここにあればIPアドレスが帰ってきて終わり。
1. 上記でIPアドレスがなかった場合。権威DNSにフルサービス・リゾルバから問い合わせる。
最初にルートDNSサーバー（どのTop Level Domain DNSサーバーがどのトップドメイン（.jp .comなど）を管理しているいるのかを知っているサーバー）に問い合わせ、Top Level Domain DNSサーバーを返す。そこからZoneファイルを照合し、IPアドレスまたはIPアドレスを持っている権威DNSサーバーを返す。これを繰り返す。

# OCIにおけるDNS管理
### DNSサービスコンポーネント
- Domain
インターネット全体の中で特定の場所やグループを識別するもの。
例：qiita.com
- Zone
権威DNSサーバーが管理する範囲。ZONEファイルのSOA（スタート・オブ・オーソリティレコード）でゾーンを定義する。
例：qiita.com
- Label
Zone名の前にピリオドで区切られて付けられ、サブドメイン（トップレベルドメイン以外のドメイン要素）を形成。
例：**www** .qiita.com
- Child Zone
階層構造のように別のDNSサーバーに情報を持たせる（委託する）Zone。独自のSANとNSレコードを持つ
- Resource Record
ドメイン名に関連付けられた情報。（Zoneファイルのそれぞれの行のこと）
- Delegation
DNSがホストされ管理されているネームサーバー(DNSサーバー)

### OCI DNSの機能
- **グローバル（クロスリージョン）** で一貫性があり、高パフォーマンス
- 最適化されたトランジット接続（他のASに対して接続すること）
- 停止および攻撃に対する高い耐性
- DNSの伝達時間１分未満

# プライベートDNS
DNSにはパブリックとプライベートがある。
- パブリックDNS
インターネット側から自分のZONEで管理しているコンピュータのURLを検索するときにIPアドレスを返すなど。
- プライベートDNS
外部に公開したくないものを登録。VCN内のドメイン解決（ドメイン名-IPアドレスの変換。)
オンプレミスとVCN間でDNSを相互に接続可能。

# DNSトラフィック管理
ステアリングポリシーを元にトラフィックを割り振れる。
顧客がルーティングポリシーを設定可能。
### ユースケース
- フェイルオーバー
稼働中のシステムで問題が生じてシステムやサーバーが停止してしまった際に、自動的に待機システムに切り替える仕組み。
プライマリとセカンダリで運用しており、プライマリがダウンした際にセカンダリにつなぐなど。
- クラウド移行
オンプレミスからクラウドに移行する場合に、DNSで少しづつ切り替えていく。
- 負荷分散
ロードバランシング
- ハイブリッド環境
オンプレミスとクラウドの両方で運営。トラフィックの一部をオンプレミスに流すなど。
- ワールドワイドの地理位置情報ステアリング
アクセスしてきたユーザーの場所から返すIPアドレスを変えるなど。
Londonからアクセスしてきた場合TokyoサーバーのIPアドレスを返すのではなく、近くのサーバーのIPアドレスにつなぐなど。
- カナリアテスト
一部のユーザにテストしてもらうやり方。
- ゼロレーティングサービス
一部のコンテンツを課金対象から除外するなどのパターン

### ステアリングポリシー
- ロードバランサ
トラフィックの分散
- フェイルオーバー
システムやサーバーが停止してしまった場合フェイルオーバー先に再ルーティング
- **ジオロケーション・ステアリング**
リクエストの送信元に基づき適切なレスポンスに動的にルーティング
- ASNステアリング
発信元のASN(自律システム番号)に基づきトラフィック要求をルーティング
- IP Prefix Steering
発信元のIPプレフィックスに基づきトラフィック要求をルーティング（カナリアテストなどに使用）
√(x2-2x+2)+√(x2-6x+13)の最小値「【面白い数学クイズ】この発想、天才すぎません？ 」をChatGPTとMathematicaとWolframAlphaとsympyでやってみたい。 

グラフがでます。

オリジナル(youtube) PASSLABO 様より

https://youtu.be/NuAuP1PrTug

上と同じです。大学入試数学問題集成＞テキスト
不明

(2023/07/20)
# xxxx ChatGPT で(できませんでした。) xxx
```
最小値を求めよ。√(x2-2x+2)+√(x2-6x+13)
```
# Mathematicaで
```
In:
Clear[x, f1]
Clear[x, f2]
Clear[x, f3]
f1[x_] := Sqrt[x^2 - 2*x + 2];
f2[x_] := Sqrt[x^2 - 6*x + 13];
f3[x_] := f1[x] + f2[x];
p1 = Plot[f1[x], {x, -10, 10}];
p2 = Plot[f2[x], {x, -10, 10}];
p3 = Plot[f3[x], {x, -10, 10}];
Show[p1, p2, p3]
FunctionDomain[f1[x], x]
FunctionDomain[f2[x], x]
FunctionDomain[f3[x], x]
FunctionRange[f1[x], x, y]
FunctionRange[f2[x], x, y]
FunctionRange[f3[x], x, y]

Out:
True
True
True
y >= 1
y >= 2
y >= Sqrt[13]
```
![0.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109698/472be241-495b-7c0a-d0a7-2533cf3cde77.png)

# WolframAlphaで
グラフがでます。

https://www.wolframalpha.com/input?i=%E2%88%9A%28x**2-2*x%2B2%29%2B%E2%88%9A%28x**2-6*x%2B13%29+%E6%9C%80%E5%B0%8F%E5%80%A4&lang=ja

# sympyで( PASSLABO 様の方法を参考に)
自作関数　Poly_Pointは、他の過去問で使える気がします。
格言?**「2次関数のルートは、2点間の距離かも。」**
(作図省略)
```python
from sympy import *
x=symbols('x',Real=True)
def Poly_Point(f):
    g=f**2
    a=-g.coeff(x, 1)/2
    return Point(a,sqrt(g.subs({x:a})) )
f1=sqrt(x**2-2*x+ 2)
f2=sqrt(x**2-6*x+13)
f =f1+f2
P=Point(x,0)
A=Poly_Point(f1) 
B=Poly_Point(f2) 
B=Point( B.x,B.y*(-1)*A.y/abs(A.y))
x_ans=(Line(A,B).intersection(Line(Point(0,0),Point(1,0))))[0].x
print("#",f.subs( {x:x_ans}) )
# sqrt(13)
```

# sympyで(sympy的?安易なやり方)
minimum関数で
```python
from sympy import *
x=symbols('x',Real=True)
f=sqrt(x**2-2*x+2)+sqrt(x**2-6*x+13)
print("#",minimum(f,x))
plot(f,0)
# sqrt(13)
```
微分で
```python
from sympy import *
x=symbols('x',Real=True)
f=sqrt(x**2-2*x+2)+sqrt(x**2-6*x+13)
print("#",f.subs({x:solve(diff(f))[0]}) )
# plot(f,0)
# sqrt(13)
```

![0png.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109698/8a568bc3-ec3f-53a6-5b29-7591b9ba66aa.png)

# sympyの実行環境
①私の環境は,pycharmです。
②よく聞くのは、Jupyterです。
③web上で、上記のソースを「SymPy Live shell」に、コピー貼り付けでもできました。
黒背景の右上に、マウスを移動すると、コピーマークが発生します。
???　タブレット環境で、コピー貼り付けが実行できませんでした。???

https://live.sympy.org/

# 参考
以下、いつもの?おすすめです。

https://qiita.com/mrrclb48z/items/75904cdc6e84ecef4d03#%E5%8F%82%E8%80%83wolframalpha-%E9%96%8B%E7%99%BA%E7%89%A9%E8%AA%9E
AWSのアウトプット頑張ってる方！Community Buildersに応募してみませんか？

クラウドが好きなみなさん！ AWSのCommunity Buildersってご存知でしょうか？

https://aws.amazon.com/jp/developer/community/community-builders/

AWSグローバルが提供しているプログラムで、ナレッジの共有やコミュニティ盛り上げに貢献しているAWSユーザーを「ビルダー」として認定し、新サービスのベータテストや海外ユーザーとの交流などの普段なかなか得られない機会を提供してくれるものです。

:::note info
2024/1/15 追記： 2024年上期の応募フォームもオープンしました！
https://pulse.aws/application/ZDVCOXKA
:::


# まさに今、応募受付中！ 7/13(木)まで

年間を通して定期的に追加のビルダー認定がされており、Twitter等のコミュニティで応募フォームがシェアされてきます。

https://twitter.com/awsdevelopers/status/1678466408429105152?s=20


# ビルダーになるメリットは？

- AWS Community Builders専用のSlackに招待され、世界中のAWSユーザーたちとカジュアルに情報交換や議論ができる
- リリース前のAWS新機能やロードマップ等の事前情報がもらえたり、ベータテストに参加できる
- AWSグローバルの開発チームに直接フィードバックをしたり、サービスに関する質問をしたりできる
- AWSクレジットやre:Invent割引クーポン等がもらえる

他にもたくさんあります！


# 私がBuildersになって実現できたこと

ごく一例ですがご紹介します。

- グローバルイベントでの登壇機会を得ることができました。Asia Pasific & Japanリージョン向けに「APJ Open Mic」というオンラインミートアップが毎月開催されるのですが、そこで英語で登壇するという初のチャレンジをすることができました。

https://twitter.com/minorun365/status/1660995994300092417?s=20

https://speakerdeck.com/minorun365/how-to-make-dr-ready-system-with-amazon-aurora-global-database

- DEVという海外版QiitaのようなブログプラットフォームにAWS Community Buildersとして参加し、英語でのAWSナレッジ発信にチャレンジしました。

https://dev.to/minorun365

- 日本のCommunity Buildersたちでアドベントカレンダーを立ち上げて、知見共有に取り組んだりしました。

https://adventar.org/calendars/7633

- 様々なAWSサービスのロードマップについてNDAミーティングに参加して話を聞いたり、開発中の新機能デモを見ながら直接フィードバックをする機会がちょいちょい得られています。めちゃワクワクします。



# いま日本にどれくらいビルダーがいるの？

AWSの公式ホームページにビルダー達が掲載されています。登録されているだけで、Japanは現在49名！

https://aws.amazon.com/jp/developer/community/community-builders/community-builders-directory/?cb-cards.sort-by=item.additionalFields.cbName&cb-cards.sort-order=asc&awsf.builder-category=*all&awsf.location=*all&awsf.year=*all&cb-cards.q=japan&cb-cards.q_operator=AND

所属会社によってはプレスリリース等で発表してくれていたりします。嬉しいですね！

https://home.saison.co.jp/company/news/aws-community-builders

https://cloudpack.jp/info/20220913-2.html

https://note.com/tver/n/n634d521f0d41



# どうすればBuilderになれるの？

応募フォームにエントリーし、自分の活動実績やアウトプット等を記入しましょう。英語ですが難しくないので翻訳ツール等を使えば問題なく書けるかなと思います。

https://t.co/meBVvGE3Ej

年に数回募集がありますが、直近の募集に乗り遅れてしまった方はウェイティングリストにメールアドレスを登録して楽しみに待ちましょう！

https://aws.amazon.com/jp/developer/community/community-builders/


# 私がCommunity Buildersに応募した際の実績参考

- AWSユーザーグループの運営（JAWS-UG SRE支部、JAWS DAYS 2022など）
- 社外向けの技術イベント登壇
- 社外向けの技術ブログ記事発信（Qiitaなど）

等々…


# 先輩ビルダーたちによるノウハウ紹介記事

JAWS-UGの榎本さんやAmplify Japan User Groupの池田さんもBuilders応募の奨励記事を書いてくださっています。こちらも是非ご覧ください！

https://dev.to/aws-builders/aws-community-builders-4fd3

https://zenn.dev/ikenyal/articles/0085a51b1f91fa

もし不明点や悩むところがあれば、私宛てでも大丈夫ですのでお気軽にご連絡ください！
[React] npxエラー

# npxエラー

<br><br>
**react**プロジェクトを作成する際に発生する**エラー**です。

```terminal
npx create-react-app project
```
<br><br>

**cmd**でreactプロジェクトを生成するコマンドを実行したとき、次のようなエラーが発生したらどうすればよいでしょうか
![6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3509555/19d37b19-3f8d-294b-2904-90b873d89377.png)

<br><br>

**エラー**が出たら、すぐにウィンドウを閉じずに**メッセージ**をよく読んでみることが重要です。
![14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3509555/83cc2d5b-c776-d92d-5b57-49153564f912.png)

<br><br>

現在、あの経路に**フォルダ**が見つからないようですね
![15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3509555/1149c0d4-5414-0090-6220-2547c708192d.png)

<br><br>


実際、パスに**npm**というフォルダがなかったので、直接追加してくれました。
ちなみに**AppData**というフォルダは非表示フォルダなので、非表示フォルダを解除すると見えます。
![21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3509555/f0562439-3168-c1dd-da57-f5dc862a36c0.png)
フォルダを追加してくれると、プロジェクトがうまく作成されました。
SPSS Modelerで固定長データ出力

SPSS Modelerには固定長データの入力ノードはありますが、固定長データ専用のエクスポートノードは用意されていません。「フラットファイル・エクスポート」をつかって固定長データを出力してみます。

* テスト環境
    * Modeler 18.5
    * Windows 11 64bit

#### サンプルスクリプトとデータ
https://github.com/hkwd/spsssample/tree/7973567cfa5acf401a6bb3367510251bcfaf710c/230711%E5%9B%BA%E5%AE%9A%E9%95%B7%E3%83%8E%E3%83%BC%E3%83%89

以下のデータを以下の定義で出力してみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/fe4e08ff-512b-ef1d-2e1b-6c192fce58b3.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/c49b3ec5-bb36-9587-4c78-29fe7842b9c1.png)

出力列をCLEM式で定義します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/f77a8b68-655b-2bf9-ca43-0a89b2402b96.png)

数値データであるIDは「0」を左3桁分パディングしています。AGEも同様です。
文字列データであるNAMEは半角空白で右5桁分パディングしています。DEPTも同様です。
パディングする文字は好きな文字を選べます。数値データでも半角空白でも構いませんし、全角空白などで埋めることも可能です。
なお、全角文字はShiftJISのバイト数ではなくて、文字数で指定する必要があります。

```
endstring(3, replicate(3,'0') >< to_string(ID)) 
 >< startstring( 5,NAME>< replicate(5,' '))
 >< endstring(2, replicate(2,'0') >< to_string(AGE)) 
 >< startstring( 3,DEPT>< replicate(3,' '))
```

「フィルターノード」で「出力」列のみを残しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/ee33a0a9-6f5a-8356-a761-ea7fc6d68b2c.png)

「フラットファイル・エクスポート」で「フィールド名を含める」のチェックをはずし、「シンボル値の引用符」を「なし」にします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/e54bf47d-68fc-b876-8685-9d4ab62e86ba.png)

以下のようなファイルが出力できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/e47e5e5e-a3f2-1d8d-607f-58b73d16745c.png)
セットアップメソッド

## セットアップメソッド

:::note
ソフトウェア開発において、**テストの前処理やテスト環境のセットアップを行うためのメソッド**
ユニットテストや結合テストなどの自動化テストで使用されることが多い
:::

##### テストケースの前に呼び出される特別なメソッド
**→テストケースが実行される前に必要な状態やリソースを準備するために使用**

## セットアップメソッドで行われること

### **テストデータの準備**

- テスト実行に必要なデータやオブジェクトをセットアップメソッドで生成または準備
→テストケースが必要なデータにアクセスできる

### **テスト環境のセットアップ**

- テストに必要な環境やリソース（データベース、ファイル、ネットワーク接続など）をセットアップメソッドで準備
→テストケースが正しく実行されるための環境が整えられる

### **オブジェクトの初期化**

- テスト対象のオブジェクトを生成し、必要な初期化をセットアップメソッドで行う
→テスト対象のオブジェクトがテストケースで正しく操作できる状態になる

## セットアップメソッドの定義例


**セットアップメソッドはテストフレームワークによって異なる命名規則やアノテーションに従って定義される**


EX)JUnit 

@Before アノテーションを使用してセットアップメソッドを定義

```java
import org.junit.Before;

public class MyTestClass {

    @Before
    public void setup() {
        // セットアップ処理を記述する
    }

    // テストケースや他のメソッド
}
```
:::note
セットアップメソッドは**テストの信頼性や再利用性を高める**ために重要な役割を果たす

テストの実行前に必要な準備をセットアップメソッドで一貫して行う
→テストの安定性を確保、テストコードの重複を避けれる
:::
SPSS固定長ファイルノードの定義をmodelerスクリプトで自動化

SPSS Modelerの固定長ファイルノードの定義はマウスも使って行えますが、大量の列がある場合にはスクリプトで自動化したいこともあると思います。

- テスト環境
    - Modeler 18.4
    - Windows 11 64bit
   
#### サンプルスクリプトとデータ
https://github.com/hkwd/spssmodelerscript/tree/ff80e45113c5f3bc182ff6ddac5fd104f1f34dfa/230711fixednodeAutosetting

以下の固定長ファイルの定義をmodelerスクリプトで自動化します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/bc59b62a-732a-ef7f-f27d-899fa080a585.png)

ストリームの[実行]タブのスクリプトの以下のスクリプトを入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/b33bdfbc-a01d-ef82-50d6-e1a4e6f9d3d4.png)

fixed_definitionで「フィールド」、「開始」位置、「長さ」を指定しています。

```python:fixnodeAutosetting.py
diagram = modeler.script.diagram()
fixedfile_node= diagram.findByID("id6NVWCHFAVQD")
fixed_definition = [
  ["ID", 1, 3],
  ["NAME", 4, 5],
  ["AGE", 9, 2],
  ["DEPT", 11, 3],
]
fixedfile_node.setPropertyValue("fields", fixed_definition)
```

実行すると以下のように定義されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/7aaadb75-f564-2b8b-e02b-b3033aa7654d.png)

正しく読めました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/9bc97257-d051-85d1-1b4f-ede3a9b6352d.png)
TermuxのProotから脱獄する

# なんでそんなことを？
prootにはどうしてもオーバーヘッドがあるし、prootのデスクトップの中でTermux本体のシェルにアクセスしたいときがあるからです。
え？みんなそういうことしない？

# やり方
まずはTermuxにproot仮想環境を作っておいてください。
それと、tmuxかscreenをインストールして、仮想ターミナルを起動しておいてください。
## Step 0
proot-distroを使ってる場合は飛ばして構いません。
もし、AndronixやAnLinuxを使っている場合は、以下のディレクトリ・ファイルをバインドするようにしてください。
```bash
/data
/system
/apex
/linkerconfig/ld.config.txt
```
これで、prootの中からでもTermuxのコマンドを実行できます。

## Step 1
proot内で新しいユーザーを作ります。
```bash:proot
adduser temrux
```
ユーザー名は適当にtermuxとしていますが、別になんでもいいです。
だたし、すでに一般ユーザーを使用している場合でも新しいユーザーを作ってください。
**このあとこのアカウントは半分ぶっ壊れます。**(一敗)
次に、Termux本体のシェルを開いて、TermuxのユーザーIDを調べます
```bash:termux
echo $UID
```
またprootにもどって、さっき作ったユーザーのIDを書き換えます。
ユーザーがtermuxで、IDが10318の場合はこのようなコマンドになります。
```bash:proot
usermod -o -u 10318 termux
```

## Step 2
screenを使っている場合、新しく作ったユーザーのホームディレクトリに`/data/data/com.termux/files/home/.screen`のリンクを作っておいてください。

tmuxの場合は、このコマンドを実行してみてください。
```bash:proot
sudo -u [先程のユーザー] /data/data/com.termux/files/usr/bin/tmux ls
```
screenの場合は、このコマンドを実行してみてください。
```bash:proot
sudo -u [先程のユーザー]　/data/data/com.termux/files/usr/bin/screen -ls
```

うまく行っていれば、最初に作ったセッションが出てくるはずです。
そのセッションにアタッチすれば、脱獄完了です。
```bash:proot
sudo -u [先程のユーザー]　/data/data/com.termux/files/usr/bin/tmux a
```
```bash:proot
sudo -u [先程のユーザー]　/data/data/com.termux/files/usr/bin/screen -a
```

## Step 3
別にこれはやらなくてもいいですが、そこそこ長いコマンドなのでエイリアスとかシェル関数とか作っておくと便利です。


# さいごに
初めての記事なので、気になるところがあったらどんどん言ってください。

# さっきやってわかったこと
この方法でTermuxのtmuxを起動すればprootの中で作ったtmuxセッションを開くことができた
screenはうまくいかなかったけど
den(warden)+Magento2のcronジョブを設定する方法

## はじめに
Magento2では、cronジョブを実行するためのコマンドとして `bin/magento cron:run` が用意されています。
また、`bin/magento cron:install` を使用して、cron:runを毎分実行するcronジョブを簡単に設定することができます。

Docker環境で作業している場合、イメージにcrontabの設定が含まれていないと、コンテナを起動するたびに `cron:install` を手動で実行する必要があります。(denでも同様です。)
これは手間ですので、crontabファイルをバインドマウントして、コンテナ起動時に自動的にcrontabが生成されるようにする方法があります。

以下に、denで環境構築したMagento2の場合の手順を示します。

## 設定手順
1.den環境の設定を上書きするために、`.warden/warden-env.yml` ファイルを作成します。

```yaml
# .warden/warden-env.yml

services:
  php-fpm:
    volumes:
      - ./.warden/crontab:/etc/crontabs/www-data
```

2.`crontab`ファイルを作成します。

```plaintext
# .warden/crontab

* * * * * /usr/local/bin/php /var/www/html/bin/magento cron:run 2>&1 | grep -v "Ran jobs by schedule" >> /var/www/html/var/log/magento.cron.log
```

3.`crontab`ファイルの所有者が`root`でないと実行されないため、ホスト側で設定しておきます。

```bash
sudo chown root .warden/crontab
```

上記の手順に従って、`den env up`コマンドを使用してコンテナを起動すると、毎分`cron:run`が自動的に実行されるようになります。

## おわりに
以上がden(warden)+Magento2のcronジョブを設定する方法です。
少しでも手間を減らして、快適な開発環境を目指しましょう！

---
Laravel10で[Class "Database\Factories\UserFactory" not found]が起こってSeederが実行できない

既存のLaravel6のアプリをLaravel10にアップグレードした後、以下のコマンドを実行すると、
```
php artisan db:seed
```
[Class "Database\Factories\UserFactory" not found]というエラーを吐かれてしまった。ここからGoogle検索でさまざまな記事や以下のドキュメントを参考にしてなんとか頑張っていたが、長時間解決できず。（ModelにHasFactory追加したりとか。）
https://readouble.com/laravel/10.x/ja/seeding.html

解決策としては、composer.jsonに以下の記述を追加すれば良いだけだった。
[変更前]
```
"autoload": {
        "psr-4": {
            "App\\": "app/"
        },
...
```
[変更後]
```
"autoload": {
        "psr-4": {
            "App\\": "app/",
            "Database\\Factories\\": "database/factories/",
            "Database\\Seeders\\": "database/seeds/"
        },
...
```

この内容な様々な記事に書いてあったので、これだけが原因なら一件落着だった。しかし私の一番の敗因はそこではなく、以下のコマンドを叩かなければいけませんでした。
```
composer dump-autoload 
```
このコマンドでファイルとかクラスとかのリストを再生成してくれるそうです。（あまり仕組みをわかっていません。）
私はこれで無事Seederを動かすことができました。

※記事を読んでいて思いましたが、PHPをあまり書いたことがない状態でLaravelを学んでしまったがためにこういうことに困るのではないかと思いました。言語から学ぶって大事ですね。
Saving 'xxxxx': Running 'Prettier - Code formatter' Formatter と表示されファイルが保存できない問題

# 解決したいこと
### 前提
- VSCode
- prettier の VSCode 拡張を使っている
- 保存時の自動フォーマットを有効にしている

### 現象
- ファイル保存時に下記のようなメッセージが出て保存出来ない。
  ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/474068/fbeb13c3-5fcb-7cee-fd22-e77893eed230.png)
   ```
   Saving 'xxxxx': Running 'Prettier - Code formatter' Formatter
   ```
- キャンセルを押すと一旦保存できるが、再度保存するときにはまた保存できなくなる
- VSCode を再起動すると最初は通常通り保存できるが、数十秒後には症状が再発する。

# 原因
同じ症状について、Issue が立っていました。
https://github.com/prettier/prettier-vscode/issues/2999

原因は VSCode の特定バージョンにおけるバグのようです。

# 解決方法
先程の Issue の[コメント](https://github.com/prettier/prettier-vscode/issues/2999#issuecomment-1544238974)によると、バージョン 1.76.2 にダウングレードすれば解消するとのことです。

また、同症状の[別 Issue ](https://github.com/microsoft/vscode/issues/184926) では、バージョン 1.80.0-insiders を適用することで解決したとのことです。

さて、私はここまでの手順を試しましたが、解決しませんでした。

最終的には 20 個ほどの不要な VSCode 拡張をアンインストールすることで症状が出なくなりました。

一気にアンインストールしてしまったので、はっきりとした原因は分かりませんが、特定のVSCode 拡張がこの症状を引き起こした可能性があります。
mac用safariでiCloud パスワード入力をoffする方法 

bitwardenや1password等のパスワード管理アプリを使用していると、safariをみるときに自動でicloudパスワード入力されたり、サジェストが被ったりして使いにくい。しかしChromじゃなくてsafariが使いたい理由がある...

![スクリーンショット 2023-07-11 9.43.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2876872/1aeaa876-75f7-5b96-4e44-3457e29a2e45.png)

そういう方は
safariの「設定」 > 「自動入力」 の「ユーザー名とパスワード」のとこのチェックを外せばおkです。快適になります♪( ´▽｀)
ネットワークスペシャリスト合格体験記

# 2ヶ月ぐらいでネットワークスペシャリスト合格した話

## はじめに

### スペック

まず自分のだいたいのスペックを列挙してみます。

* ITエンジニア歴は9年ぐらい
* 他の資格はこんな感じ
応用情報
情報処理安全確保支援士
AWS SAP
CCNA

### 動機

* AWSのネットワークのスペシャリストをとろうとおもったがそもそも基礎的なネットワークがよくわからん。体系的に勉強したいな。
* システムアーキテクトとりたかったが、さすがに期間的に論文対策はむりだなと思い、他の資格にした。

### 試験勉強時の状況

転職活動とか他の資格（IT系ではない）の勉強をしながらやっていたので今思うとわりと発狂ものだったと思う。現場の仕事も混沌を極めている時期だった。

### 合格証明

![スクリーンショット 2023-07-11 9.02.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/501815/06f8f4ba-a098-9082-ffa9-6211d169ae26.png)

絶対落ちていたと思ったので、びっくり嬉しかった！


## 試験勉強

### 2月ぐらい

* 受験を決める
* 午前の試験はみんな大好き[ネットワークスペシャリストドットコム](https://www.nw-siken.com/nwkakomon.php)をつかって空き時間にポチポチ。試験実施日までに2週ぐらいはした。
* 過去問PDFをダウンロードして、とりあえず問題文を読んで、よくわからない単語を調べる。
  * 去年の午後１ → 一昨年のの午後1 ・・・一番古い午後1の順番でひたすらやる
* 並行して[うかる!ネットワークスペシャリスト](https://shoeisha.co.jp/book/detail/9784798177571)を通読するようにする。

### ３月ぐらい

* なかなか頭にはいってこないので他の方法を模索しはじめ[まさるの勉強部屋](https://www.youtube.com/@masaru-study)というYouTubeチャンネルで動画で勉強しはじめる。(動画はコスパよくないかな〜と思ってたが、やはりよくわからないことの導入としてはよかった。マサルさんのチャンネルはパケットトレーサーを利用して、細かい動作検証をやってくれているので、個人的にはよかった。)
* あとは王道だが[ネスペの基礎力](https://gihyo.jp/book/2017/978-4-7741-8986-4)はよかった。(技術的な論はもちろんなんだが、著者コラムがモチベーション保つためによかったなぁと思う。心が折れたら一度読んでみてもいいと思う。)

### 4月ぐらい

* ここからは基本過去問主体で文章をつくる練習をする。私は論理的な文章を作るのは下手な方なので（箇条書き程度では思いつくのだが、いざ文章にしようとすると語彙を失う。）

## 受験当日

正直あんまり何かを準備した記憶がない。合格体験記とか対策本では時間配分しっかりしよう！って話はあったが、全然そういうのやってないし、なんなら時計も持っていかなかった・・・そんな人もいるんだなぐらいに思ってくれれば（笑）。

私の受験時は午後1が一番難しかったのではないかなというのが所感。（午後1が一番自信がなかったしね。）

## 自分が思う試験攻略のポイント

* 略語への抵抗感をなくす

BGPとIGMPとかプロトコル系は特に略語が抵抗感を強めてると思うので、プロトコル系はしっかりどんなプロトコルだっけを意識して覚えると試験時に問題読むときの抵抗感がなくなり、読む時間が短縮されると思います。

* 問から先に読む

具体的な問から読んだほうがよいです。これはどんな試験にも言えるのですが、何をこの後聞かれるかはわからないのに長文を読むのは結構な集中力をつかうと思います。なんなら具体的な問みるだけで答えられるものも中にはあるので。


結局はどれだけ、正確に早く文章を読めるかって話だと思います。私はそれに対しては精神的なアプローチで対策してることが多いですね。


## 合格発表

[IPA](https://www.ipa.go.jp/shiken/goukaku/happyobi.html)で発表されました。12時ぴったりにアクセスしたら激重で全然みれず。ドキドキがなかなか収まらなかった。IPAのサイトってオンプレなんですかね？合格発表の時はアドホックにスケールさせる仕組みとかあってもいいんじゃないかな〜とか思った。

## その後

今はAWSのANS-01の資格取得に向けて勉強中です。基礎的な知識があるとブラックベルトの動画を見ても、そういうもんか〜ではなく、バックエンドでどういう仕組みになっているかに目が向いて面白く感じますし、改めてその凄さがわかったりします。重ね重ね体系的な知識理解というのは大事だとなと思います。


## ちなみに

この時期に転職してたので、金銭的にはなんのメリットもないというところが少し悲しいとこです。それでも内的な動機づけだけで資格取得を目指し、合格できたというのは誇れることなんじゃないかな〜と思います。次はデータベーススペシャリスト目指してます。。。後ホント久々に投稿した。アウトプットをくせにしたい。
エンジニアのためのお手軽セルフブランディングのすゝめ

エンジニアの皆さま、セルフブランディングしてますか？
私はダメです。ダメなモロ([@moro_is](https://twitter.com/moro_is))です。

突然ですが**セルフブランディング、鬼むずくないですか？**
性格によるところも大きいと思うのですが、私はアホほど苦手です。

「こんにちは、モロです」と書くのさえ本当は避けたいくらいです。
多くの人にとって**ほぼ間違いなく無益な情報**なので。

以下では「じゃあなぜ書くのか」みたいなことを、セルフブランディングに絡めて書き連ねていきます。

# セルフブランディングはめちゃくちゃ大事

恐らく誰もが薄々、あるいはガッツリお気づきかと思うのですが、セルフブランディングはめちゃくちゃ大事です。

ネームバリューはお賃金に直結しますし、もし直接影響しなくても「引き寄せの法則」というものもあります。

:::note info
**引き寄せの法則とは？**
言葉の印象だと若干スピリチュアルな感じもしますが、ここでは例えば「猫が好き」だと話して回れば自然と同じ猫好きに遭遇する機会が増えて、猫仲間が増えれば当然猫を接種する機会も増えるよね、程度のお話です。
なお、[Wikipedia](https://ja.wikipedia.org/wiki/%E5%BC%95%E3%81%8D%E5%AF%84%E3%81%9B%E3%81%AE%E6%B3%95%E5%89%87)によると科学的な根拠はないそうですが、個人的には「(程度の差はあれ)それはそう」と思っています。
:::

セルフブランディングが成ればこの「話して回れば～」の規模が通常の数倍～数百倍にも膨らむでしょう。
全世界に数百万人の猫仲間ができたなら、一日一猫接種しても一生猫に困らない生活が手に入ります。

もちろん**猫派限定で発生する現象ではない**ため、犬派の方にも恩恵があります。

# ブランディングことはじめ

ブランディングといえば、もうそれだけで一職種確立されるくらいの超重要ポジション。
一朝一夕に身につけられるものではありませんし、付け焼き刃の知識で手を出せばそのままネガティブブランディングにも繋がりかねない諸刃の剣です(刃刃しい一文)。

一方、個人におけるセルフブランディングの場合、必ずしも金銭に繋げる必要がないこともあり、誤解を恐れずに言えば「友達100人できるかな」と実態はそう大きくは変わりません。

ずいぶんハードルが下がったように思えますが、私のような人間にはまだまだそびえ立つハードルに違いありません。友達100人いないので。

## まず名乗る

そこでまず取り組みたいのが「**名乗る**」。
冒頭の「こんにちは、モロです」のたった一文、これだけです。

「名前を認知される」というブランディングの本質中の本質でありながら、同時に人として最低限の礼節でもあろう名乗り。
奥ゆかしい日本人にもぴったりのセルフブランディングといえるのではないでしょうか。

一方、残念なことにそんな奥ゆかしい名乗りですら「情報のノイズ」として煙たがる向きもあります。

ただ、ブランディングを考えるに当たって**一番に配慮すべきは、少なからずあなたにも配慮してくれる相手**であるべきです。
名乗りすら受け付けてもらえないなら、お互いNot for meということだと割り切りましょう。

「割り切ってもいい」というのもセルフブランディングの強みかも知れません。

## 名乗った先は？

名乗ってしまいさえすれば、十中八九勝ったも同然です。
定型文的なお決まりの挨拶を挟むもよし、規則性のあるアイキャッチ画像を印象付けるもよし。
その先にもできることは数多くありますが、過度なブランディングは時として反感を買うものでもあります。

まずは臆さず名乗りを上げた自分を褒め称えながら、ゆっくり友達100人を目指しましょう。

ちなみに、「名乗らなくても別の場所にプロフィールあるしいらなくない？」という気もしますが、賢明なみなさまならご存知のはずです。

**本文中が一番CVRが高いことを**。

# さいごに

ここまで書いて「もしかして私が極端に自意識過剰なマイノリティで、普通はこんな葛藤に苛まれることなく、息をするように誰もがやってることなのでは」という気がしてきました。
何もわかりません。
まずは友達10人くらいを目指したいと思います。