OmniAICreator/Qiita-1.07M huggingface dataset:
CloudFront Lambda@Edge で新しい NodeJS ランタイムを利用する場合に Cannot find module 'aws-sdk' というエラーが発生する

# 問題

これまで NodeJS 14 ランタイムで利用していた Lambda@Edge のコードでは以下のように aws-sdk を利用するコードを書いていた。

```js
const aws = require("aws-sdk");
```

しかし、NodeJS 18 にランタイムを更新してデプロイすると、このコードがエラーになってしまったのでその原因と対処方法を調査した。

# 原因

NodeJS 18 ランタイムからは `require('aws-sck')` によって利用される AWS SDK v2 ではなく、新たに AWS SDK v3 がデフォルトで同梱されるようになり、v2 を意味する `require('aws-sck')` がデフォルトでは利用できなくなったため。

https://aws.amazon.com/jp/blogs/compute/node-js-18-x-runtime-now-available-in-aws-lambda/

v3 を利用する場合は、ドキュメントに従って適切なモジュールを利用することになる。

https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/introduction/

今回のケースでは v2 では以下のように利用していた。

```js
const aws = require("aws-sdk");
const ddb = new aws.DynamoDB.DocumentClient({
  apiVersion: "2012-08-10",
  region: "ap-northeast-1",
});
```

これを v3 に置き換えたい場合は、例えば以下のように修正して DynamoDBClient を利用するようにする。 v3 のドキュメントでは import を使う ES6 スタイルとなっているが、これまで通り `exports.handler = ...` として定義している場合は CommonJS スタイルとなるので、require を使ってコンテンツをインポートする。

```js
const { DynamoDBClient, GetItemCommand } = require("@aws-sdk/client-dynamodb");
const { unmarshall } = require("@aws-sdk/util-dynamodb");

const ddbClient = new DynamoDBClient({});
// v2 と違って、Key の中で指定する場合に型情報が必要になった。 以下は文字列の場合
const command = new GetItemCommand({
  TableName: TABLE_NAME,
  Key: {
    key: { S: "key..." },
  },
});

const res = await ddbClient.send(command);
// v2 と違って Item は　DynamoDB の特定データ形式で返されるので、
// v2 と同じように扱いたい場合は unmarshall する必要あり
const item = res.Item ? unmarshall(res.Item) : {};
```


# 参考

https://stackoverflow.com/questions/74792293/aws-lambda-cannot-find-module-aws-sdk-in-build-a-basic-web-application-tutoria

https://stackoverflow.com/questions/70849225/how-to-solve-cannot-use-import-statement-outside-a-module-in-aws-lambda-console
SwiftUIとFirebaseで共有型TodoListを作った話

# はじめに

みなさんいかがメリクリをお過ごしでしょうか！？
この記事は、N・S高等学校 Advent Calendar 2023の24日目です。
はじめまして、N中等部通学コースのKaitoでーす。
今回は、特に記事の内容思いつかなかったのでChatGPTに「アイデア欲しい」と言って「これ作れ」
と言われたのでLineのグループ見たいのを作ってそこにみんながTodoを足していく。アプリを
作るのと自分がアプリを作るときにやる工程をお見せします!

# 設計

アプリを作る前にどういうアプリにするのかを決めます。

まず言語やフレームワーク、クロスプラットフォームですが、
iOSアプリなので言語はSwiftを使います。そしてサーバーを経由してグループを共有するのでFirebaseを使います。
本当はP2P使いたかったんですが、金子勇さんぐらいの頭脳持ってないので無理です...

# デザイン

アプリデザインはFigmaを使っています。
であれこれやって下のようになります↓
![スクリーンショット 2023-11-09 21.31.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3617732/24058c3a-bc9c-84c3-8641-74bc14a7927e.png)

このデザインを元に作成をしていきます。
でここからは作業工程とか見せるのはめんどくさいので完成した物の動かしている映像を乗っけておきます。

# 実際の動き
![GIF.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3617732/f5436006-0340-13b1-62e8-a35f71301d83.gif)

左側
1.Signup
2.グループ作成
3.Todo追加
4.申請しているユーザーを承認するかしないか

右側
1.Signup
2.グループ申請
3.申請されたらグループに参加される

今回の共有型Todoの機能
・Todo追加、保存削除
・Todo共有

使用した言語、クロスプラットフォーム
・Swift
・Firebase
・FirebaseDatabase
・FirebaseAuthentication

# まとめ
今回はアイデア全く思いつかなかったのでw、ChatGPTに作れと言われたものを作りました。
コードややり方も全く載っけてないので参考になるかはわかりませんが、制作の手順ぐらいが参考になれば嬉しいです。
ではみなさん良いクリスマスをメリークリスマース🎅
Power BI workout - OneLake integration for semantic models

Power BI セマンティック モデルを OneLake にエクスポートできる。 Power BI セマンティック モデルもソースデータにすることができるということだ。

https://learn.microsoft.com/en-us/power-bi/enterprise/onelake-integration-overview

# 設定とか
**必要な環境:**
>- One or more import semantic models in a workspace on a Power BI Premium or Fabric capacity
>- Large semantic model storage format enabled for the model


**必要な設定:**
[Power BI セマンティック モデルの設定]
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193509/ba961611-b9a4-2d65-d7c9-186206496385.png)

[TMSL による設定]
Power BI セマンティック モデルの設定に取り込んで欲しいなと思うけど。
```powershell:PowerShell
$Workspace = '<Workspace_name>'
$SemanticModel = '<Semantic model name>'
$Server = "powerbi://api.powerbi.com/v1.0/myorg/$Workspace"
$Query = @"
{  
    "export": {  
      "layout": "delta",
      "type": "full",  
      "objects": [  
        {  
          "database": "$SemanticModel"  
        }  
      ]  
    }  
   }
"@

# $Workspace
# $Server
# $Query
Invoke-ASCmd -Server $Server -Query $Query -Credential (Get-Credential)
```
# 動作を確認
Lakehouse にショートカットを追加する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193509/e6187833-03fb-4ab7-e9f6-547edead83bc.png)
Power BI セマンティック モデルは OneLake にエクスポートされる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193509/483b39cc-5ceb-7de3-df58-9e0930bdea09.png)
設定が完了している Power BI セマンティック モデルを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193509/e54da322-e257-0b13-345b-e1af3885ef94.png)
エクスポートされた Power BI セマンティック モデルからテーブルを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193509/782108ce-6743-a6e1-6025-9d9b41c7b42d.png)
ショートカット名の編集も可能
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193509/4da0e1a2-25c4-fca3-9d84-a0d6c7cfcc7a.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193509/4593b506-c616-6e3e-380b-bf8b10ad0a02.png)
Power BI セマンティック モデルの Refresh 前後
parquet ファイル(データ本体)が差し替えられている。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193509/7862b9cd-1a22-25cd-bfea-c505c0e173a4.png)


# 思ったこと🙄
どんなことに使うかはこれから考える。

# その他
https://powerbi.connpass.com/

- [Power BI 勉強会 - connpass](https://powerbi.connpass.com/)
- [Power BI Desktop を使い始めるには](http://qiita.com/PowerBIxyz/items/6c4735cb5b5712e70981)
- [Excel で Power Query を使い始めるには](http://qiita.com/PowerBIxyz/items/52e563037b855a099ca9)
Reactの副作用（Side Effects）とは？

### Reactの副作用（Side Effects）とは？

Reactの副作用（Side effects）というのは、コンポーネントの主な仕事（表示をすること）以外に起こることです。例えば、小学生のあなたが絵を描いているとします。絵を描くのがあなたの「主な仕事」です。でも、絵を描きながら歌を歌うと、それは絵を描く「副作用」ですね。Reactでの副作用はそれと似ていて、データを取得したり、タイマーを設定したりすることです。これらは画面に何かを表示する直接の仕事ではないけれど、大切な作業なんです。

### ユーズステート（useState）とは？

ユーズステート（useState）は、Reactで使う特別なおまじないのようなものだよ。例えば、ビデオゲームでキャラクターが持っているコインの数を覚えておくには、どうしたらいいかな？「ユーズステート」を使うと、そのコインの数を覚えておいて、コインを拾ったら数を増やしたり、使ったら減らしたりできるんだ。

### ユーズエフェクト（useEffect）とは？

ユーズエフェクト（useEffect）は、ある特別なことが起きた時だけ、何か特別なことをするおまじないだよ。たとえば、お母さんが「宿題を終えたらゲームをしていいよ」と言ってくれたとするね。ここで「宿題を終える」というのが特別なことが起きた時、それに反応して「ゲームをする」という特別なことをするんだ。

### useContextとは？

useContextは、Reactの中で「共有スペース」のようなものだよ。学校でみんなが使えるクレヨンがある箱を想像してみて。どの子もその箱からクレヨンを取って絵を描いたり、違う色が必要になったら箱に戻したりできるよね。

### useRefとは？

useRefは、Reactで「永続的なマーカー」をつけるために使う特別なツールだよ。たとえば、あなたが図書館で読んでいる本にしおりを挟んでおくと、次にその本を開いた時にすぐにどこを読んでいたかわかるでしょ？ しおりは本の中で動かないから、いつでも同じ場所を示してくれる。

### useMemoとは？

useMemoは、Reactで「頭の中で考えたことを忘れないようにする」ために使うおまじないだよ。たとえば、あなたが算数のテストで難しい問題を解いたとして、その答えを次の問題を解く時にも使いたいと思うよね。その答えをノートにメモしておけば、何度も同じ計算をしなくても、いつでもその答えを見ることができる。

### useCallbackとは？

useCallbackは、特定の作業をするための手順を忘れないようにするおまじないだね。例えば、あなたが折り紙を折る手順を覚えていて、それを何度も同じように折りたい時、毎回折り方の本を見るのは大変だよね。だから、その手順を一度覚えてしまえば、次からは覚えた手順でサッと折り紙を折れるでしょ？
Mac 環境の .NET 8 で GA した Azure Functions を試してみた

.NET 8 と .NET 8 対応の Azure Functions が GA （一般提供開始） したので、さっそく試してみました。現時点では、.NET 6 の Azure Fnctions を使っていた自分からしたら、いろんなパラメータを .NET 8 用に追加する必要があって、少々面倒でした。

## Azure Functions Core Tools の最新バージョンを導入

brew でインストールしている `azure-functions-core-tools@4` は、まだ .NET 8 に対応していませんでした。そこで、GitHub から最新のビルドをダウンロードしてインストールする事にしました。

https://github.com/Azure/azure-functions-core-tools/releases

```zsh:zsh
% wget https://github.com/Azure/azure-functions-core-tools/releases/download/4.0.5455/Azure.Functions.Cli.osx-arm64.4.0.5455.zip

% unzip Azure.Functions.Cli.osx-arm64.4.0.5455.zip -d functools.4.0.5455

% export PATH=$HOME/functools.4.0.5455:$PATH

% chmod 755 $HOME/functools.4.0.5455/{func,gozip}

% func --version
4.0.5455
```

## ローカルで Azure Functions アプリを作成

```zsh:zsh
% dotnet --version
8.0.100

% func init mnrdn8 --worker-runtime dotnetIsolated --target-framework net8.0

% cd mnrdn8

% func new --name test --template 'Http Trigger' --authlevel anonymous

% func start
```

## 分離ワーカーの .NET 8 設定で Azure Functions 構築

```bash:bash
prefix=mnrdn8
region=japaneast

az group create \
  --name ${prefix}-rg \
  --location $region

az storage account create \
  --name ${prefix}stor \
  --resource-group ${prefix}-rg \
  --sku Standard_LRS

az functionapp create \
  --name ${prefix} \
  --resource-group ${prefix}-rg \
  --consumption-plan-location $region \
  --runtime dotnet-isolated \
  --runtime-version 8 \
  --functions-version 4 \
  --storage-account ${prefix}stor \
  --disable-app-insights \
  --https-only \
  --os-type Linux \
  --assign-identity
```

## アプリをデプロイして動作確認

```bash:bash
func azure functionapp publish ${prefix} --dotnet-version 8.0

curl https://${prefix}.azurewebsites.net/api/test

# curl のレスポンスコンテンツ
Welcome to Azure Functions!
```

## 検証が終わったら Azure Functions 環境を削除

```bash:bash
az group delete \
  --name ${prefix}-rg \
  --yes
```

## 参考

https://azure.microsoft.com/ja-jp/updates/ga-azure-functions-supports-net-8-in-the-isolated-worker-model/

https://learn.microsoft.com/ja-jp/azure/azure-functions/dotnet-isolated-process-guide
Pythonで「文字列を指定した長さにして左寄せ/中央揃え/右寄せを行う(ljust, center, rjust, zfill)」の動作を確認してみた

# 概要

Pythonで「文字列を指定した長さにして左寄せ/中央揃え/右寄せを行う(ljust, center, rjust, zfill)」の動作を確認してみました。以下のページを参考にしました。

https://www.javadrive.jp/python/string/index21.html

# 実装

以下のファイルを作成しました。
```sample.py
print("[" + "Apple".ljust(8) + "]")
print("[" + "Apple".center(8) + "]")
print("[" + "Apple".rjust(8) + "]")
print("")
print("Apple".ljust(8, "_"))
print("Apple".center(8, "p"))
print("Apple".rjust(8, "+"))
#print("Apple".rjust(8, "*+"))
print("")
print("Apple".ljust(3))
print("Apple".center(3))
print("Apple".rjust(3))
print("")
print("89".zfill(5))
print("abc".zfill(6))
print("-123".zfill(8))
print("+975".zfill(8))
print("")
print("12345".zfill(3))
```

以下のコマンドを実行しました。
```
$ python3 sample.py 
[Apple   ]
[ Apple  ]
[   Apple]

Apple___
pApplepp
+++Apple

Apple
Apple
Apple

00089
000abc
-0000123
+0000975

12345
```

# まとめ

何かの役に立てばと。
github projects を使って個人タスクを管理してみよう

この記事は [一分で読める小ネタのカレンダー | Advent Calendar 2023 - Qiita](https://qiita.com/advent-calendar/2023/raki) の１１日目

# github projects

- github projects はタスクトラッキングツールに分類される、主に issue の管理ツール（ドキュメント的には `tool for planning and tracking work on GitHub`）
- 以前書いた Trello のようにカード（issue）のライフサイクルを管理できると思ってよい
- Projects と Projects(classic) があって、classic は使い勝手がいまいちだった時代の名残りなので、今は普通に projects だけ知っていればおｋ

# 使う前

- リポジトリと同じように public と private が選べるので、とりあえず private を選択しておけば他人の邪魔にならない（publicにしないことで貢献できることもある。あとひょっとしたらデフォルトで常にプライベートになってるかも）
- NEW ボタンを押した初回のみテンプレートが選択できる。このタイミングを外すとテンプレートは選択できない（はず。。。）。が、ビューの設定がちょっと自動でされるだけなので、気にしなくても大丈夫 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/44420/8f341e04-bee6-f8ee-d4eb-d78d915c0be0.png)
- 自分ではいじらないけどどんなものか見たい人向けに[ぱぶりっくなぷろじぇくと](https://github.com/users/officel/projects/12/views/1)を作ったのでおいておく
- おすすめしている主な使い方には以下のようなものがある
    - タスク管理（普通）
    - 買い物メモ（タスクの言い換え）
    - コマンドメモ（よく使うコマンドのオプションやら使い方をコマンド毎に整理）
- 総じて自分のために役に立ちそうなこと、のために使うといい。結果として使い方や画面に慣れて、いつか業務にフィードバックされれば一石二鳥以上になる

本文はここまで。以下は時間外ｗ

# 機能いろいろ

projects にはいろいろ機能があるので使って覚えよう

## description panel

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/44420/b758cbf1-39b6-9b18-09cb-1ec239f5916a.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/44420/a041a7ea-ad00-0179-f4a4-6c04b6aabae8.png)

- projects の説明を表示するところ
- 何をするプロジェクトなのか、他へのリンク等々を記載しておくといい
- たまに他所のプロジェクトを覗いても何も書いてなかったりして。。。

## ワークフロー

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/44420/fc82a613-5a22-475f-349a-b06ff7d043ae.png)

- リポジトリに紐づけ、issue としてちゃんと使うと、ワークフローが活きてくる
- 古くなったissueを自動でアーカイブさせると新陳代謝が進むので、より活用できる（気がする）
- 有効にするには設定しないといけないとか、新しいワークフローが増えても気づかない（お知らせに気がついたことがない）のが偶に疵だったりしないこともない
- （正確には[projects Archives - The GitHub Blog](https://github.blog/changelog/label/projects/)があるので気づけよって話なんだけど埋もれちゃうんだよね）

## ビュー

- 見えてるのがビュー
- タブで増やせる（そういえばいくつまで作れるのか試してないな）
- 見え方を変更したら save しないと保存されないので注意
- ビューのロードマップは比較的新しいビューで、issue の日付ラベルと紐付けるとガントチャートができる。自動生成されるissueを業務で管理してて、生存期間を表示してみたらぞっとしたんでそっ閉じｗ



# projects 探訪

- OSS Projects や organizations の projects を覗いてみると、いろいろ発見があって楽しい
- [Projects · hashicorp](https://github.com/orgs/hashicorp/projects?query=is%3Aopen) あんまり活発じゃない
- [Milestones · Google Fonts](https://github.com/orgs/google/projects/4/views/4) オープンに個人用ビューがあるの珍しい。けどわかりやすい
- [Projects · aws](https://github.com/orgs/aws/projects) 企業のオープンなプロジェクトはもっと活用されていいと思うんだけど
- [Board · GitHub public roadmap](https://github.com/orgs/github/projects/4247) あんまり英語読まないのでアレだけど、Qに分けてロードマップが書かれているので、更新あるんだなーがなんとなく見える。ただそんなにちゃんと運用されてるわけでもないっぽい（既に終わってるっぽいのもそのまま置いてあるように見える）

# 改善依頼

- ここの projects 面白いぜとかあったら
- こんな活用方法があるぜとか
AWSの主要DB4選

# AWSの主要DB4選

Amazon Web Services (AWS) は、データベース管理のために様々なサービスを提供しています。これらのサービスは、それぞれ異なる特性と用途を持ち、さまざまなアプリケーションニーズに応えます。本記事では、Amazon Relational Database Service (RDS)、Amazon Aurora、およびAmazon DynamoDB、Redshiftの主要な違いと特徴について、初心者にも分かりやすく解説します。

## Amazon RDS

### マネージドリレーショナルデータベースサービス

Amazon RDSは、リレーショナルデータベースのセットアップ、運用、スケーリングを簡素化するマネージドサービスです。

#### 特徴

- **サポートされるデータベース**: MySQL、PostgreSQL、MariaDB、Oracle、SQL Serverなどの一般的なリレーショナルデータベースをサポートします。
- **管理の容易さ**: データベースのプロビジョニング、パッチ適用、バックアップ、リカバリーなどが自動化されています。
- **スケーラビリティ**: 需要に応じてコンピューティングリソースやストレージ容量を調整できます。

#### ユースケース

- トランザクション処理や複雑なクエリが必要なビジネスアプリケーション。
- 従来型のリレーショナルデータベースのクラウド移行。

## Amazon Aurora

### 高性能なリレーショナルデータベース

Amazon Auroraは、AWSが開発したMySQLとPostgreSQLと互換性のあるリレーショナルデータベースサービスです。

#### 特徴

- **高パフォーマンス**: MySQLやPostgreSQLよりも高速で、大規模な負荷に対応します。
- **耐久性と可用性**: 自動的にデータを複製し、障害から迅速に復旧します。
- **コスト効率**: 高性能ながら、標準的なMySQLやPostgreSQLサーバーよりもコストを抑えられます。

#### ユースケース

- 高トラフィックのウェブアプリケーションやSaaSアプリケーション。
- 大規模なエンタープライズレベルのデータベースシステム。

## Amazon DynamoDB

### フルマネージドNoSQLデータベース

Amazon DynamoDBは、高速で柔軟なNoSQLデータベースサービスです。

#### 特徴

- **スキーマレス**: データモデルはスキーマレスで、異なる種類のデータを簡単に格納できます。
- **高可用性**: データは自動的に複数のアベイラビリティーゾーンに分散されます。
- **オンデマンドスケーリング**: トラフィックの変動に基づき、自動的にスケールアップ・ダウンします。

#### ユースケース

- 高速な読み書きが必要なウェブスケールアプリケーション。
- IoT、モバイルアプリ、リアルタイムアナリティクスなどの大規模なデータセット。

## Amazon Redshift
### フルマネージドデータウェアハウスサービス
Amazon Redshiftは、大規模なデータセットの分析を可能にするフルマネージドのデータウェアハウスサービスです。

#### 特徴
- **高速クエリ実行**: 高度に最適化されたクエリエンジンを持ち、大量のデータに対して高速な分析を実行できます。
- **スケーラブル**: ストレージとコンピューティングリソースを簡単に追加・削減でき、負荷に合わせたスケーリングが可能です。
- **コスト効率**: ペイアズユーゴーの料金体系で、使用したリソースに対してのみ料金が発生します。

#### ユースケース
- ビジネスインテリジェンスツールを使用したビッグデータ分析。
- 大規模なデータセットからの洞察の抽出やレポート生成。

## まとめ

Amazon RDS、Aurora、DynamoDBは、それぞれ異なる特性を持ち、さまざまなデータベースニーズに対応しています。RDSは従来のリレーショナルデータベースの管理を簡素化し、Auroraは高性能なリレーショナルデータベースを提供し、DynamoDBは高速でスケーラブルなNoSQLソリューションを提供します。これらのサービスを適切に選択し活用することで、ビジネスアプリケーションのパフォーマンスと効率性を向上させることが可能です。AWSのデータベースサービスを理解し、適切なサービスを選択することは、クラウドベースのアプリケーション開発において非常に重要です。
Pyvista の Export  scene as HTML 機能を使う

Pyvista の Export  scene as HTML 機能を使うと、可視化した 3D データをほかの人に見せやすいので、簡単に紹介します。

# 以下のデモのテスト環境

* WIndows 11
* Pyvista 0.42.3
* Jupyterlab 4.0.2
* ipywidgets 8.1.1

* trame 3.3.0

# 概要

`Jupyter lab` 内で `Pyvista 0.42.3` を使って、`Plotter` による 3D 可視化を行ったとき、ツールバーの右端に、 ”Export  scene as HTML” というボタンがあります。(ドキュメントを見たところ 0.40 以降では存在していると推測します。)

この機能を使って生成した HTML をブラウザで開くと、 vtk.js を使って 3D オブジェクトを表示します。マウス操作で回転と拡大縮小ができるので、解析結果の可視化を人に渡して見せるのに使えます。つまり paraview や Python をインストールしていない人にも、3D のままのデータを見せることが簡単にできます。

Pyvista の example を使って作ったものを[ご覧ください](https://natsuwater.github.io/demo_pyvista3d/d-orbit.html)。(リンク先 GitHub pages の html ファイルは、マウス操作可能です) 

![d-orbit.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/38979/b8e616d1-003e-73ad-9dce-ec3e4cd35644.png)

# このファイルを作るためのコード

Pyvista の使い方がわかっていれば、HTML ファイル生成は、メニュー操作だけです。

以下のコードを Jupyter lab の中で実行します。

```python
import numpy as np

import pyvista as pv
from pyvista import examples

#%%
grid = examples.load_hydrogen_orbital(3, 2, 0)

#%%
eval_at = grid['real_wf'].max() * 0.1
contours = grid.contour(
    [eval_at],
    scalars=np.abs(grid['real_wf']),
    method='marching_cubes',
)
contours = contours.interpolate(grid)
contours.plot(
    smooth_shading=True,
    show_scalar_bar=False,
)
```

Jupyter lab 内に表示された図の上のメニューバーから、`Export  scene as HTML` を選ぶと、html 形式のファイルを保存できます。



`examples.load_hydrogen_orbital` の機能については、help で確認してください。

```
help(examples.load_hydrogen_orbital)
```

以上です。

# 追記 2024/4/19

## コードからもこの 3D scene を生成できます
* [`pyvista.plotter.export_html`](https://docs.pyvista.org/version/stable/api/plotting/_autosummary/pyvista.plotter.export_html) を呼び出します。
リンク先ドキュメントの例示コード:
```python
import pyvista as pv
from pyvista import examples

mesh = examples.load_uniform()
pl = pv.Plotter(shape=(1, 2))
_ = pl.add_mesh(
    mesh, scalars='Spatial Point Data', show_edges=True
)
pl.subplot(0, 1)
_ = pl.add_mesh(
    mesh, scalars='Spatial Cell Data', show_edges=True
)

pl.export_html('pv.html')  
```
## linux の場合
以下の２つの方法のいずれかで、Display がない環境 (ターミナル接続、リモートデスクトップ接続) でも export_html 機能を利用できます。
1) xvfb がインストールされていること（X11 の機能なので、たぶんインストールに管理者権限が必要）
2) vtk ライブラリーの代わりに vtk-osmesa を利用する。[^1] 

この場合、ターミナル接続で `pl.show()` を呼ぶとハングします。
Jupyter lab 内では OK に見えますが、この動作確認部分は Windows 環境での仮のチェック結果です。



```sh
pip install pyvista[all,trame]
pip uninstall vtk -y
pip install --extra-index-url https://wheels.vtk.org vtk-osmesa
```

[^1]: https://discourse.vtk.org/t/status-update-vtk-python-wheels/11212 

# 追記 2.  2024/11/19

vtk 9.4 から linux での Off screen 描画に vtk-osmesa は不要になったようです。[^2]
まだ手元での確認はしていません。

[^2]: https://discourse.vtk.org/t//14583
S3のストレージクラス8選

# S3のストレージクラス8選

Amazon Simple Storage Service (S3) は、様々なストレージクラスを提供しており、それぞれが異なるニーズに対応しています。ここでは、S3の主要なストレージクラス8種類を詳しく紹介し、その特徴とユースケースを解説します。

## S3 Standard

### 頻繁にアクセスされるデータ用

S3 Standardは、頻繁にアクセスされるデータ向けに設計されたストレージクラスです。

#### 特徴

- 最低3つのアベイラビリティーゾーンにデータを保存し、高可用性を提供します。
- ウェブサイト、コンテンツディストリビューション、データ分析など幅広いユースケースに使用できます。
- アクセス頻度の低いデータやアーカイブのストレージよりもコストが高いです。

#### ユースケース

- ウェブサイトのコンテンツ。
- オンラインで頻繁にアクセスされるデータベース。

## S3 Standard – 低頻度アクセス (S3 Standard – IA)

### アクセス頻度の低いデータに最適

S3 Standard – IAは、アクセス頻度が低いが、必要時にはすぐにアクセスできる高可用性が求められるデータに適しています。

#### 特徴

- S3 Standardに似ていますが、ストレージ料金が低く、取り出し料金が高いです。
- データは3か所以上のアベイラビリティーゾーンに保存され、S3 Standardと同等の可用性を提供します。

#### ユースケース

- 長期間のバックアップ。
- 定期的にアクセスするが、頻度が低いデータ。

## S3 1 ゾーン - 低頻度アクセス (S3 1 ゾーン - IA)

### 1つのアベイラビリティーゾーンにデータを保存

S3 1 ゾーン - IAは、データを1つのアベイラビリティーゾーンに保存します。

#### 特徴

- Amazon S3 Standard – IAよりも低いストレージ料金です。
- ストレージのコストを節約し、アベイラビリティーゾーンに障害が発生した場合にデータを簡単に復元できます。

#### ユースケース

- 低コストでのストレージが必要な場合。
- アベイラビリティーゾーンの障害に対してデータの復元計画がある場合。

## S3 Intelligent-Tiering

### アクセスパターンが変化するデータに最適

S3 Intelligent-Tieringは、オブジェクトのアクセスパターンに基づいて自動的に階層を移動します。

#### 特徴

- オブジェクトに30日間アクセスがない場合、S3 Standard-IAに自動的に移動します。
- アクセスがあると、S3 Standardに自動的に移動させます。

#### ユースケース

- アクセスパターンが不定期で予測不能なデータ。
- コスト効率を重視しながらも、必要に応じて迅速にアクセスしたいデータ。

## S3 Glacier

 Instant Retrieval

### 即時アクセスが必要なアーカイブ済みデータに適している

S3 Glacier Instant Retrievalは、即時にアクセスが必要なアーカイブデータ向けのストレージクラスです。

#### 特徴

- 数ミリ秒以内にオブジェクトを取得できます。
- S3 Standardと同等のパフォーマンスを提供します。

#### ユースケース

- 頻繁にはアクセスされないが、必要時には迅速なアクセスが必要なデータ。
- 長期保存が必要ながら、瞬時に取得する必要があるデータ。

## S3 Glacier Flexible Retrieval

### データアーカイブ用に設計された低コストのストレージ

S3 Glacier Flexible Retrievalは、低コストでデータアーカイブに適したストレージクラスです。

#### 特徴

- 数分から数時間以内にオブジェクトを取得可能です。
- データアーカイブに最適な低コストのストレージクラスです。

#### ユースケース

- 長期保存が必要で、すぐにアクセスする必要がないデータ。
- コストを重視するアーカイブやバックアップ。

## S3 Glacier Deep Archive

### アーカイブに最適な最も低コストのオブジェクトストレージクラス

S3 Glacier Deep Archiveは、アクセス頻度が非常に低いデータの長期保存に適したストレージクラスです。

#### 特徴

- オブジェクトを12時間以内に取得できます。
- AWSクラウドの中で最も低コストのストレージです。
- 地理的に分散した3つ以上のアベイラビリティーゾーンにレプリケートされ、保存されます。

#### ユースケース

- 年に1～2回程度のアクセス頻度のデータ。
- 法的、規制上の理由で長期保存が必要なデータ。

## S3 Outposts

### オンプレミス環境でのオブジェクトストレージ

S3 Outpostsは、AWS Outposts環境内でのオブジェクトストレージを提供します。

#### 特徴

- AWS Outpostsのデータの取得、保存、アクセスを簡単にします。
- オンプレミスアプリケーションの近くにデータを保持することが可能です。

#### ユースケース

- 厳しいパフォーマンスニーズやローカルデータレジデンシー要件を持つワークロード。
- オンプレミス環境でAWSのスケーラビリティと統合性を活用したい場合。

## まとめ

Amazon S3は、その多様なストレージクラスを通じて、さまざまなストレージ要件に対応します。それぞれのストレージクラスは特定のユースケースに最適化されており、コスト、パフォーマンス、アクセス頻度、耐久性などの異なる要因を考慮して選択することが重要です。AWSのS3ストレージクラスを理解し、適切に活用することで、データストレージの効率性とコスト効率を最大化することができます。
AWSの主要ストレージサービス4選

# AWSの主要ストレージサービス4選

Amazon Web Services（AWS）は、データストレージのニーズに応じて多様なサービスを提供しています。これらのサービスは、異なる特徴を持ち、様々なユースケースに適しています。ここでは、AWSの主要ストレージサービスであるインスタンスストアボリューム、EBS、S3、およびFESについて、それぞれの特徴とユースケースを解説します。さらに、オブジェクトストレージとブロックストレージの違いについても紹介します。

## インスタンスストアボリューム

### 高速な一時的データストレージ

インスタンスストアボリュームは、EC2インスタンスに物理的に接続された一時的なストレージです。

#### 特徴

- **高速アクセス**: ホストコンピュータに直接接続されているため、非常に高速なデータアクセスが可能です。
- **一時的**: インスタンスの停止や終了時にデータが失われます。
- **大量データ処理**: 一時的な作業データやキャッシュに最適です。

#### ユースケース

- データベースの高速キャッシュや一時的なビッグデータの処理など、高いI/Oパフォーマンスが必要な場合に適しています。

## EBS (Elastic Block Store)

### 柔軟なブロックストレージ

EBSは、EC2インスタンスに接続される持続的なブロックストレージサービスです。　手動スケーリング。アタッチするEC2と同じAZに存在するため別AZのEC2からは書き込みや読み込みが不可。

#### 特徴

- **持続性**: インスタンスの停止や終了後もデータが保持されます。
- **スナップショット機能**: データのバックアップと復元が簡単に行えます。
- **サイズとパフォーマンスの調整可能**: 需要に応じてストレージのサイズやIOPSを調整できます。

#### ユースケース

- 小さな編集が大量に行われる場合は EBS (Elastic Block Storage) を使用するのが最適なユースケースです。

## S3 (Simple Storage Service)

### 柔軟かつスケーラブルなオブジェクトストレージ

S3は、インターネット経由で利用できるオブジェクトベースのストレージサービスです。各オブジェクトにURLが付与されています。アクセス権の付与、マルチAZ、イレブンナインなどの特徴を持つサーバーレスサービスです。

#### 特徴

- **高いスケーラビリティ**: どんなサイズのデータでも保存でき、容量制限がありません。
- **セキュリティと耐久性**: データは複数の物理的な施設に分散して保存されます。
- **アクセス管理**: 詳細なアクセスコントロールと監視機能を提供します。

#### ユースケース

- ウェブサイトのコンテンツ、バックアップ、アーカイブ、ビッグデータのストレージなど、幅広い用途に適しています。

## FES (File Elastic Storage)

### クラウドベースのファイルストレージ

AWSのFESは、スケーラブルなファイルストレージサービスです。自動スケーリング。ダイレクトコネクトを用いてオンプレとの接続可能。

#### 特徴

- **共有アクセス**:

 複数のEC2インスタンスからの同時アクセスに対応しています。
- **簡単な拡張性**: 使用量に応じて自動的にスケールします。
- **NFSとの互換性**: 既存のNFSベースのアプリケーションと互換性があります。

#### ユースケース

- 共有ファイルシステムが必要なアプリケーション、例えばファイルサーバー、コンテンツ管理システムに適しています。

## オブジェクトストレージとブロックストレージの違い

### 異なるデータ管理方法

オブジェクトストレージ（例：S3）とブロックストレージ（例：EBS）は、データを管理する方法が異なります。

- **オブジェクトストレージ**: オブジェクトストレージではすべてのファイルが完全な個別のオブジェクトとして扱われます。これはドキュメント、画像、動画などオブジェクト全体がアップロードおよび消費されるファイルに最適です。しかしオブジェクトに変更が加えられるたびにファイル全体を再アップロードする必要があります。
- **ブロックストレージ**: ブロックストレージは、これらのファイルを小さなコンポーネントパーツやブロックに分割します。フィルムの 1 つのシーンに編集を行い変更を保存する場合、エンジンは変更される断片が存在するブロックのみを更新します。

## まとめ

AWSは、インスタンスストアボリューム、EBS、S3、FESといった多様なストレージオプションを提供しており、それぞれに独自の特徴とユースケースがあります。オブジェクトストレージとブロックストレージは、それぞれ異なるデータ保存のニーズに対応しており、適切なストレージタイプの選択が、アプリケーションのパフォーマンスとコスト効率に大きく影響します。AWSのストレージサービスを理解し、適切に活用することで、ビジネスの要件に合わせた効率的なデータ管理が可能になります。
ChatGPTの会話をCraftにショートカット保存する

ChatGPTとの会話をブックマーク保存や検索したくなることってなりますよね。現在、プラグインを使用しないとそのような機能はないので、自分で対応する必要があります。

今回は、ショートカットを使ってChatGPTの会話をCraftに保存する方法を紹介します。Craftに保存すると、後から内容を検索することが可能です。


<iframe width="560" height="400" src="https://www.youtube.com/embed/-o5eZ2525sE?si=e14Xl8Zr0wlIe0Zg" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>


## 前提条件

- Mac環境
- Craftインストール済み

## ショートカットの設定手順

1. [私が作成したShortcuts.appのショートカット](https://www.icloud.com/shortcuts/3feed0440a55419fa5dc199eb0069827)をダウンロードします。
2. ショートカットファイルを開いて、自分の環境や好みに合わせて変更します。必須の変更点は2つだけですが、他にもカスタマイズは可能です。

余談ですが、JavaScript for AutomatorというShortcuts.app上で動作するjsがあるのですが、Chromeからテキストをコピーする際のバグにより使用を断念しました。そのため、アクションが縦に長くなり、ファイルがちょっと読みづらくなっています。

### 1. Craftの保存先の指定


ファイルを開いたら、最後のアクションに注目してください。以下のように書かれています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2727397/b01b53ea-a5e6-c21d-6781-98e96bd1a371.png)

【Space】の部分をクリックし、自分のCraft環境のワークスペース＆フォルダを指定します。フォルダ指定を「毎回尋ねる」に設定すると、内容ごとにカテゴリ分けもできます。


### 2. ショートカットキーの指定


右サイドバー上部にある（ i ）ボタンをクリックし、「次で実行」に好みのショートカットキーを設定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2727397/b2bf8dab-3434-629c-6ae5-2ca94b5724a7.png)


### 使い方
* ChatGPTの会話履歴をクリップボードにコピー
* ショートカットを起動（自分は`cmd + shift + ctrl + G`に設定)

以上です。
あとは好みで読み進めて、色々とカスタマイズしてみて下さい。
## ノートのタイトルのカスタマイズ


このファイルのアクションで長々としていることは、新規作成したノートのタイトルを設定するためのものです。

具体的には、クリップボードにあるテキストを、テキスト中に「改行」「。」「！」のどれかが含まれる場合、そこで区切って、タイトルにします。また、タイトルが１００文字以上の場合、それを１００文字にカットします。

好みで区切る項目を増やしたい場合、例えば「、」で区切るとすると

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2727397/de24006c-774c-f5aa-2d26-1909f70678b9.png)
これらのアクションパターンに「、」を追加すれば良いです。

タイトルの最長を変更する場合は、以下の該当する部分の数値を変更します。例えば、100文字の制限を120文字に変更するには、100を120に変更します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2727397/e61b9b07-d127-1497-296d-23e3087d8187.png)


Shortcuts.appで様々なカスタマイズが可能です。これを機に、ぜひ試してみてください。

## 最後に
これのNotionバージョンも、需要があれば記事にしたいと思います。
ReactでサーバーへのHTTPリクエスト

## はじめに
Reactを使用してサーバーへHTTPリクエストを送る方法に関する備忘録です💁
初心者です😅
間違えてる部分多々あると思います。
もし見つけた場合、ツッコミいただけると助かります🙇


## 内容
LPを作成している際のお問い合わせフォームを作成しています。
お問い合わせフォームのシステムを構築しています。このシステムでは、ユーザーからの「お問い合わせ内容」を受け取り、それを自分宛てのメールとして送信します。

Reactはフロントエンド開発のためのJavaScriptライブラリのためサーバー側の機能を提供しておりません。

よって「Node.js」「Python」などを用いて作成するサーバーを構築する。

私は今回、Pythonにてサーバー構築を作成したが、そのサーバーに対してのアクションを学んだのでまとめました。


```jsx:Contact.js
const emailSend = () => {
    console.log('ただいま、メールを送信してます', user);

    fetch('http://localhost:5000/send-email', {
        method: 'POST',
        // HTTP リクエストのメソッド
        headers: {
            'Content-Type': 'application/json',
        },
        // サーバーへ送るファイルはJSONファイルであることを宣言
        body: JSON.stringify(user)
        // 送るデータをJSON形式に変換する
    })
    .then(response => response.json())
    .then(data => {
        // .thenは成功した時の処理を示す場合に使う。
        console.log('Success:', data);
    })
    .catch((error) => {
        // .catchは失敗の時の処理を示す場合に使う。
        console.error('Error:', error);
    });
}
```


```jsx:Contact.js
    fetch('http://localhost:5000/send-email', {
```
:::note info
「fetch」の押さえておくべき点🧠
* fetchは JavaScript におけるメソッドの一つ。ネットワークリクエストを送信し、リソース（通常はサーバーからのデータ）の取得を行うために使用。サーバーとのデータのやり取りに使用する。
* fetchは非同期操作を行うため、サーバーからの応答を待っている間にも、他のコードの実行も可能。
* fetch は Promise オブジェクトを返すことができるため非同期操作の成功時とエラー時の処理を .then() や .catch() などのメソッドでチェーンできる。
* fetch はHTTPリクエストを行うために使用され、様々なHTTPメソッド（GET、POST、PUT、DELETEなど）をサポートしている。
:::

:::note info
「('http://localhost:5000/send-email', 」のコードで押さえておくべき点🧠
* http://localhost:5000　このアドレスは開発してるサーバーに対して利用する。
* localhost : とは自身のコンピュータを指す特別なホスト名。
* :5000 : 今回、Flaskを利用してる開発。その場合に一般的には5000番ポートを使用する。
* /send-email : エンドポイント。サーバー上の特定のパスや機能にアクセスするために使われる。
* 開発が完了し外部サーバー（AWS、GCPなど）にデプロイした後はこのURLは変更する。
* デプロイした後のURLに”/send-email”を入れることで/send-emailに関連付けられた処理が実行される。
:::


```jsx:Contact.js
        method: 'POST',
        headers: {
            'Content-Type': 'application/json',
        },
        body: JSON.stringify(user)
    })
```


:::note info
押さえておくべき点🧠
* method: 'POST',　HTTP リクエストのメソッド。POSTは送信することを表してる。
* headers: {'Content-Type': 'application/json',},サーバーへ送るファイルはJSONファイルであることを宣言。
* body: JSON.stringify(user)送るデータをJSON形式に変換。
:::


```jsx:Contact.js
.then(response => response.json())
.then(data => {
 // .thenは成功した時の処理を示す場合に使う。
console.log('Success:', data);
})
.catch((error) => {
 // .catchは失敗の時の処理を示す場合に使う。
console.error('Error:', error);
});
```

:::note info
押さえておくべき点🧠
* .thenは成功した時の処理を示す場合に使う。
* response => response.json()はレスポンスできたJSONファイルをJavaScriptオブジェクトに変換する。
* dataはresponseによるデータ（サーバーからレスポンス）によるものを指す。
* .catchは失敗の時の処理を示す場合に使う。
:::
AWSのプロビジョニング&管理ツール5選

# AWSのプロビジョニング方法

Amazon Web Services（AWS）は、クラウドリソースのプロビジョニングと管理のために、さまざまなツールとサービスを提供しています。これらのツールとサービスは、ユーザーのニーズに応じて柔軟に利用でき、AWSのリソースを効率的に管理することが可能です。本記事では、AWSの主要なプロビジョニング方法であるマネジメントコンソール、AWS CLI、SDK、AWS Elastic Beanstalk、AWS CloudFormationの概要とそれぞれの特徴や違いについて解説します。

## マネジメントコンソール

### ウェブベースのユーザーインターフェース

マネジメントコンソールは、ウェブブラウザを通じてAWSリソースを操作するためのユーザーインターフェースです。

#### 特徴

- **直感的な操作**: 視覚的なインターフェースを通じて、リソースの作成、管理、監視が可能です。
- **アクセス容易性**: ウェブブラウザがあればどこからでもアクセス可能です。
- **初心者に優しい**: リソースの設定や管理を簡単に行うことができ、AWS初心者に適しています。

## AWS CLI

### コマンドラインインターフェース

AWS CLI（Command Line Interface）は、コマンドラインを通じてAWSリソースを操作するためのツールです。

#### 特徴

- **スクリプト化と自動化**: コマンドを使って作業の自動化やスクリプト作成が可能です。
- **柔軟性と詳細な制御**: 細かいオプション設定を通じて、高度なリソース管理が行えます。
- **開発者向け**: コマンドライン操作に慣れている開発者やシステム管理者に適しています。

## SDK

### ソフトウェア開発キット

AWS SDK（Software Development Kit）は、プログラミング言語に特化したライブラリを提供し、コード内からAWSサービスを利用できるようにします。

#### 特徴

- **言語固有のサポート**: Python、Java、JavaScript、.NETなど、複数のプログラミング言語で利用可能です。
- **API統合**: AWSのAPIと直接統合し、アプリケーションからAWSリソースを直接操作できます。
- **カスタムアプリケーション開発**: 独自のビジネスロジックと組み合わせた複雑なシナリオの実装に適しています。

## AWS Elastic Beanstalk

### アプリケーションデプロイメントと管理

AWS Elastic Beanstalkは、アプリケーションのデプロイメントと管理を簡素化するためのサービスです。

#### 特徴

- **容易なデプロイメント**: コードをアップロードするだけでアプリケーションがデプロイされます。
- **自動化されたリソース管理**: インスタンス、データベース、ロードバランサーなどが自動的に管理されます。
- **開発者向け**: アプリケーション開発に集中し、インフラストラクチャの管理をBeanstalkに任せたい場合に適しています。

## AWS CloudFormation



### インフラストラクチャのコード化

AWS CloudFormationは、AWSリソースをコードとして定義し、自動的にプロビジョニングするサービスです。

#### 特徴

- **インフラストラクチャのコード化**: テンプレートを使用してリソースを定義し、自動的にデプロイします。
- **再利用可能なテンプレート**: テンプレートを使って環境を再現し、一貫性を保ちます。
- **複雑なアーキテクチャの管理**: 大規模かつ複雑なアーキテクチャのデプロイメントに適しています。

## まとめ

AWSでは、マネジメントコンソール、AWS CLI、SDK、AWS Elastic Beanstalk、AWS CloudFormationといった多様なプロビジョニング方法を提供しています。これらのツールとサービスは、ユーザーのスキルセット、開発要件、管理スタイルに応じて選択されるべきです。マネジメントコンソールは直感的な操作性を提供し、AWS CLIとSDKは自動化とカスタマイズ性に優れ、Elastic BeanstalkとCloudFormationはアプリケーションとインフラの管理を効率化します。これらのサービスを適切に活用することで、AWSのリソース管理を効率的かつ効果的に行うことができます。
laravel10-React環境構築(メモ)

# laradockダウンロード

# コンテナ起動
> sudo docker compose up -d nginx postgres pgadmin

# bashログイン
> docker compose exec workspace bash

# laravel10 ダウンロード
> composer create-project laravel/laravel .

# Composerを使用して、Laravel Breezeパッケージをプロジェクト追加
> composer require laravel/breeze --dev

# Breezeパッケージをインストールし、Reactをフロントエンドフレームワークとして設定
> php artisan breeze:install react

# フロントサーバの起動に必要な初回のみ実行
nvm install 20.5.0
nvm use 20.5.0
npm install -g npm@10.2.2 
npm install

# フロントサーバの起動
npm run dev

# app.phpの編集

ダミーデータ作成のために、日本語化しておきます。

```
‘locale’ => ‘ja’,
‘fallback_locale’ => ‘ja’,
‘faker_locale’ => ‘ja_JP’,
```

# データベース情報の設定

```
DB_CONNECTION=pgsql
DB_HOST=postgres
DB_PORT=5432
DB_DATABASE=default
DB_USERNAME=default
DB_PASSWORD=secret

```

# vite.config.js

```js
import { defineConfig } from "vite";
import laravel from "laravel-vite-plugin";
import react from "@vitejs/plugin-react";

export default defineConfig({
    plugins: [
        laravel({
            input: "resources/js/app.jsx",
            refresh: true,
        }),
        react(),
    ],
    // 以下追加
    server: {
        host: true,
        hmr: {
            host: "localhost",
        },
    },
});

```
AWSで使えるコンピューティングシステム8選

# AWSで使えるコンピューティングシステム

Amazon Web Services（AWS）は、幅広いコンピューティングニーズに対応するため、多様なコンピューティングサービスを提供しています。これらのサービスは、異なるアーキテクチャや運用モデルを持ち、それぞれ特有の利点があります。本記事では、AWSの代表的なコンピューティングサービスであるEC2、Lambda、ECS、EKS、Fargate、Dedicated Hosts、Outpostsの違いと特徴について解説します。

## EC2 (Elastic Compute Cloud)

### 柔軟な仮想マシン

EC2は、AWS上で動作する仮想サーバー（インスタンス）を提供するサービスです。

#### 特徴

- **カスタマイズ性**: CPU、メモリ、ストレージなどのリソースを柔軟に選択できます。
- **オペレーティングシステムの選択**: Windows、Linuxなど、多様なOSを選択可能です。
- **スケーラビリティ**: オートスケーリングにより、需要に応じて自動的にスケールアウト・インします。

#### 利用シナリオ

- Webサーバーやデータベースなど、汎用的なサーバーが必要な場合。
- 完全な管理権限が必要な場合。

## Lambda

### サーバーレスコンピューティング

Lambdaは、サーバーの管理を意識せずにコードを実行できる、サーバーレスコンピューティングサービスです。

#### 特徴

- **サーバーレス**: サーバーのプロビジョニングや管理が不要です。
- **イベント駆動**: S3、DynamoDB、SNSなどのAWSサービスからのイベントに基づいて自動的にコードを実行します。
- **スケーラビリティ**: 高いスケーラビリティと可用性を提供します。

#### 利用シナリオ

- イベントに応答するバックエンド処理やデータ処理タスク。
- サーバー管理のオーバーヘッドを避けたい場合。

## ECS (Elastic Container Service)

### コンテナオーケストレーション

ECSは、Dockerコンテナをオーケストレーションするためのマネージドサービスです。

#### 特徴

- **コンテナ管理**: Dockerコンテナのデプロイメント、スケーリング、ロードバランシングを容易にします。
- **タスク定義**: コンテナの設定やリソース利用をタスク定義ファイルで指定します。
- **統合性**: AWSの他のサービスとの統合が容易です。

#### 利用シナリオ

- コンテナ化されたアプリケーションの管理と運用。
- マイクロサービスアーキテクチャの採用。

## EKS (Elastic Kubernetes Service)

### Kubernetesのマネージドサービス

EKSは、人気のコンテナオーケストレーションツールであるKubernetesのマネージド実行環境を提供します。

#### 特徴

- **Kubernetesスタンダード**: Kubernetesの標準APIとの互換性があります。
- **スケーラビリティ**: Kubernetesのポッドオ

ートスケーリング機能を利用できます。
- **セキュリティ**: AWSのセキュリティとアイデンティティサービスと統合されています。

#### 利用シナリオ

- Kubernetesベースのアプリケーションのデプロイメントとスケーリング。
- 大規模なマイクロサービスアーキテクチャの運用。

## Fargate

### サーバーレスコンテナ実行環境

Fargateは、サーバーのプロビジョニングを気にせずにコンテナを実行できるサービスです。

#### 特徴

- **インフラストラクチャの抽象化**: サーバーの管理やクラスタの設定が不要です。
- **容易なスケーリング**: 要求に応じてコンテナの数を自動的に調整します。
- **使いやすさ**: コンテナの仕様を指定するだけで実行できます。

#### 利用シナリオ

- サーバーレスの利便性を求めるコンテナ化アプリケーション。
- インフラストラクチャの管理コストを削減したい場合。

## AWS Dedicated Hosts

AWS Dedicated Hostsは、Amazon Web Services（AWS）が提供する物理サーバーの専用ホスティングサービスです。このサービスを利用することで、ユーザーはAWSのクラウド内において物理的なサーバーを専有することができます。Dedicated Hostsは、特定のライセンス要件を持つアプリケーションや、厳格なコンプライアンス基準に対応する必要がある場合に適しています。また、同じ物理サーバー上で複数のインスタンスを実行できるため、コスト効率の良いソリューションを提供します。ユーザーは、専用ホストの設定、管理、モニタリングを行うことができ、セキュリティとパフォーマンスの向上を図ることが可能です。Dedicated Hostsは、既存のサーバーバウンドソフトウェアライセンスをクラウドに持ち込む際にも有効です。

## AWS Outposts

AWS Outpostsは、Amazon Web Services（AWS）のクラウドインフラストラクチャとサービスを、ユーザーのオンプレミス環境に持ち込むサービスです。これにより、ローカルデータセンターでAWSのコンピューティング、ストレージ、データベースサービスを利用できるようになります。Outpostsは、AWSのクラウドと完全に互換性があり、ハイブリッドクラウド環境で一貫した体験を提供します。これにより、オンプレミスでのアプリケーションの運用やローカルデータ処理のニーズを満たしつつ、AWSのクラウドベースの管理、セキュリティ、スケーラビリティのメリットを享受できます。Outpostsは、レイテンシが重要なアプリケーションや、データレジデンシーの要件が厳しい場合に特に有用です。

## まとめ

AWSでは、EC2からサーバーレスのLambda、コンテナオーケストレーションのECSとEKS、そしてFargateまで、さまざまなコンピューティングニーズに対応するサービスを提供しています。これらのサービスは、アプリケーションの種類、アーキテクチャ、管理のしやすさなどに基づいて選択されるべきです。それぞれのサービスは特定のシナリオで最適な選択肢となり得ますが、プロジェクトの目的と要件を考慮して適切なコンピューティングリソースを選択することが重要です。
疎結合の重要性とSNS&SQS

# 疎結合の重要性とSNS&SQS

ソフトウェア開発において、疎結合（Loose Coupling）はシステムの柔軟性と拡張性を高める重要な概念です。特に、モノリシックアプリケーションとマイクロサービスアーキテクチャでは、そのアプローチの違いが顕著に現れます。Amazon Web Services（AWS）のSimple Queue Service（SQS）とSimple Notification Service（SNS）は、疎結合の原則を活用してシステムの効率と信頼性を高めるサービスです。本記事では、これらの概念とサービスについて詳しく解説します。

## モノリシックアプリケーションとマイクロサービス

### モノリシックアプリケーション

モノリシックアプリケーションは、ソフトウェアの全ての機能が単一の大きなコードベースで構築されたアーキテクチャです。

#### 特徴

- **統合されたコードベース**: すべての機能が一つのアプリケーション内に組み込まれています。
- **シンプルなデプロイメント**: 単一のアプリケーションとしてデプロイされ、管理が容易です。
- **スケーラビリティの限界**: 大きくなるにつれて管理が複雑になり、拡張性に限界があります。

### マイクロサービスアーキテクチャ

マイクロサービスアーキテクチャは、アプリケーションを小さな、独立したサービスの集合体として構築する方法です。

#### 特徴

- **疎結合**: 各サービスは独立しており、他のサービスとの依存性が少ないです。
- **拡張性と柔軟性**: 個々のサービスを独立してスケールアウト可能です。
- **複雑な管理**: 複数のサービスを管理する必要があります。

## AWSのSQSサービス

Simple Queue Service（SQS）は、AWSが提供するマネージド型のメッセージキューサービスです。

#### 機能

- **メッセージキューイング**: アプリケーション間でメッセージをキューに入れ、非同期処理を可能にします。
- **スケーラビリティ**: 大量のメッセージを効率的に処理できます。
- **信頼性と耐久性**: メッセージの配信を保証し、データの損失を防ぎます。

#### 利用シナリオ

- **分散システムの非同期処理**: 複数のコンポーネント間でタスクを非同期的に処理する際に利用します。
- **ロードバランシング**: 大量のリクエストを効率的に処理し、システムへの負荷を平準化します。

## AWSのSNSサービス

Simple Notification Service（SNS）は、AWSが提供するフルマネージド型のパブリッシュ/サブスクライブメッセージングサービスです。

#### 機能

- **パブリッシュ/サブスクライブモデル**:

 メッセージの発行者（パブリッシャー）と受信者（サブスクライバー）間でのメッセージングを実現します。
- **プッシュ通知**: Eメール、SMS、HTTPエンドポイントなどへの直接メッセージ配信を可能にします。

#### 利用シナリオ

- **イベント駆動型アプリケーション**: 特定のイベントや条件に基づいてメッセージを送信する際に使用します。
- **アラートと通知**: システムの監視やアラート通知に広く利用されます。

## まとめ

疎結合のアーキテクチャは、システムの柔軟性と拡張性を高める上で重要です。モノリシックアプリケーションとマイクロサービスの違いを理解することで、適切なアーキテクチャ戦略を立てることができます。また、AWSのSQSとSNSサービスは、疎結合アーキテクチャを実現し、システム間の効率的なコミュニケーションを可能にする強力なツールです。これらのサービスを活用することで、システムの可用性を高め、開発の複雑性を軽減し、ビジネスのニーズに迅速に対応することが可能になります。
ocp

https://www.opencompute.org/projects/storage

https://www.opencompute.org/wiki/Storage

https://www.opencompute.org/documents/nvme-cloud-ssd-specification-v1-0-3-pdf

https://www.opencompute.org/documents/datacenter-nvme-ssd-specification-v2-0r21-pdf

https://www.opencompute.org/documents/datacenter-nvme-ssd-specification-v2-5-pdf

https://draftable.com/compare/auPQtbTxDjRo

https://www.opencompute.org/documents/datacenter-nvme-ssd-specification-v2-6-2-pdf

https://146a55aca6f00848c565-a7635525d40ac1c70300198708936b4e.ssl.cf1.rackcdn.com/images/2686392520fb20191e5c334d8b8a35e51da858a0.pdf
rex0220 計算式プラグインの使い方をGPTsに学習させてみる（その１０）機能別に計算式を学習

[rex0220 計算式プラグインの使い方をGPTsに学習させてみる（その９）誤った計算式の訂正学習２](https://qiita.com/rex0220/items/65cab222ae1876906ec7)の続きです。

使用例の学習を続けてもなかなか終わりが見えません。
考え方を変えて、機能別に計算式を学習させてみます。

# 概要

いろいろ計算式の問合せを行うと、利用できない関数を応答する例や、対応する関数はあるのに計算式プラグインでは関数が無いなどの応答がよくある。
どうも関数の機能があまり学習されていないように思える。
実現したい機能に対して、対応する計算式はいくつかあるので、それらを学習させた方がよさそうだ。

# テーブルの集計関数の問題
「テーブル内数値1 の最大値と最小値を取得するには？」
単純に MAX 関数と MIN 関数で、取得できるが、応答では「直接的な最大値や最小値を返す関数は提供されていないため」となり、代替案が提案される。

![2023-11-18_01h43_02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100572/07d92cb8-eabc-a59d-339d-08d1f103c78a.png)

# MAX 関数の説明の問題

MAX 関数の説明内に、「テーブル内項目で最大値」とあるが、「テーブル内数値1 の最大値と最小値を取得するには？」の問いには対応できないようだ。

```
・ MAX 関数について
MAX：テーブル内項目で最大値。または指定された項目で最大値

MAX(テーブル内項目[,...])

ex:
MAX(数値T)
MAX(数値1,数値2,数値3)
MAX(1,2,3) -> 3
MAX(1,2,3,"10") -> 10
```

# 機能別に計算式を記述

テーブルの集計関数をまとめて、記述

```
・テーブル内数値1 の最大値と最小値などの集計
MAX(数値1)  // 数値1の最大値
MIN(数値1)  // 数値1の最小値
SUM(数値1)  // 数値1の合計
AVE(数値1)  // 数値1の平均
FIRST(数値1)  // 先頭の数値1
LAST(数値1)  // 最終の数値1
MAXIF(区分="有効", 数値1)  // 区分="有効"で、数値1の最大値
MINIF(区分="有効", 数値1)  // 区分="有効"で、数値1の最小値
SUMIF(区分="有効", 数値1)  // 区分="有効"で、数値1の合計
AVEIF(区分="有効", 数値1)  // 区分="有効"で、数値1の平均
FIRSTIF(区分="有効", 数値1)  // 区分="有効"で、先頭の数値1
LASTIF(区分="有効", 数値1)  // 区分="有効"で、最終の数値1

・テーブル行内の数値1, 数値2, 数値3 の最大値と最小値などの集計
TR_MAX(数値1, 数値2, 数値3)  // 数値1, 数値2, 数値3の最大値
TR_MIN(数値1, 数値2, 数値3)  // 数値1, 数値2, 数値3の最小値
TR_SUM(数値1, 数値2, 数値3)  // 数値1, 数値2, 数値3の合計
TR_AVE(数値1, 数値2, 数値3)  // 数値1, 数値2, 数値3の平均
```

# 機能別に計算式を学習後の応答
「テーブル内数値1 の最大値と最小値を取得するには？」

![2023-11-18_01h56_07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100572/201a3d4c-d343-0539-610c-dc3a74596fcb.png)

# 「テーブル内で、区分="受注"の金額の合計」の応答
応用として、学習した計算式例と少し変えて問合せしたが、正しく応答された。

![2023-11-18_01h57_51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100572/345b8d54-54b3-e6e4-2f8b-7891dea75ede.png)

# 「テーブル内で、区分="受注"の単価×数量の合計」の応答
さらに、単価×数量の金額計算に変えても問題なく応答される

![2023-11-18_02h02_11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100572/fd18ad3d-de93-d9a6-773b-a902b4dfbc5c.png)

# まとめ

関数別に機能を記述するより、機能別に対応する計算式をまとめて記述する方が学習効率がよさそうです。
Unity + VSCodeで名前空間が使えなくなった時の解決手順

# 問題
4年ぶりくらいにUnity開いたら名前空間呼べなくてコンポーネント情報すらもインテリジェンスしてくれませんでした。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283460/1ef92606-ae73-ff90-e0da-8781603af8b1.png)

# (多分)原因
Assembly-CSharp.csprojってのがVSCodeで読み取れなかったみたいです。
```
2023-11-18 01:00:32.199 [warning] プロジェクト ファイル 'D:\ProgramFile\Unity Hub\My project\Assembly-CSharp.csproj' はサポートされていない形式です (従来の .NET Framework プロジェクトなど)。C# Dev Kit で動作するには、新しい SDK スタイルに変換する必要があります。
2023-11-18 01:00:32.266 [error] プロジェクト 'D:\ProgramFile\Unity Hub\My project\Assembly-CSharp.csproj' を読み込めませんでした。One or more errors occurred. (このプロジェクトは C# Dev Kit ではサポートされていません。)
2023-11-18 01:00:32.268 [info] プロジェクト システムの初期化が終了しました。0 個のプロジェクトが読み込まれ、1 個が読み込めませんでした。

```
# 環境
* Unity：2021.3.11f1
* Visual Studio Code：1.84.2

# やったこと
1. .netの再インストール
2. unityにてVSのパッケージをインポート
3. VSCodeにて、Omnisharp: use Modern Netの設定

## 1. .netの再インストール(解決せず)
[.NET 7.0のダウンロード](https://dotnet.microsoft.com/ja-jp/download/dotnet/7.0)

最初、.net関連が読み込めないというエラーが表示されていたため、改めて入れなおしました。
ですが解決には至らず、、、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283460/ca9bbd2a-f945-72cf-1205-ad1d6e72f67c.png)

# 2. unityにてVSのパッケージをインポート
多分もとから入ってると思うのですが、20以上にバージョンアップしました。
これだけだと解決はしませんでした。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283460/e3d34850-f4ed-a6a8-537c-187137e8f4ae.png)

## 3. VSCodeにて、Dotnet: Prefer CSharp Extensionの設定(解決)
ctrl + ,で設定を開いてTrueにして、再読み込み。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283460/9c002353-2599-5d89-7fea-37781573fc89.png)

そしたらなんかいけた
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283460/994bfb92-97b2-4010-30d0-8c3c64d2aa7e.png)

## 総評
環境構築まわりで2日も掛るとは思わなかった。
プログラム書いてないで、環境構築とか設定ファイルの構造をある程度学んでからじゃないとダメそう()
~~(やる気があったらAssembly-CSharp.csprojについて調べてみます。)~~

## 参考サイト
* https://zenn.dev/nok_c7/articles/c9b59cf32134f2
* https://zenn.dev/nanbokku/articles/unity-vscode-environment
* https://qiita.com/owenc4a4/items/57d35030274566afd1f3
【matplotlib】random_walkでお絵描きしてみた

## はじめに
Pythonのmatplotlibを使用してドリッピングやマーブリングのような画像を出力します．
完全にお遊びです．
(GenerativeAIで画像生成できるってのに何やってんだか...)

## 動作環境情報
- Python 3.12.0
- matplotlib 3.8.1

## 手法
四方八方にランダムに動く線を重ねて重ねて描いてみます．

### ソースコード
```random_walk_paint.py
import numpy as np
from random import random
import matplotlib.pyplot as plt
from math import *

def random_walk(N):
    x, y = 0, 0

    x_list=[0]
    y_list=[0]
    for n in range(N):
        theta=2.0*pi*random()
        x = x+cos(theta)
        y = y+sin(theta)
        x_list.append (x)
        y_list.append(y)
    return x_list, y_list

n = 9
plt.rcParams["axes.prop_cycle"] = plt.cycler("color", plt.get_cmap("cool")(np.linspace(0,1,n)))

N = 50000
for i in range(50):
    sExec = "x" + str(i) + ", y" + str(i) + " = random_walk(N)"
    exec(sExec)
    sExecPlot = "plt.plot(x" + str(i) + ", y" + str(i) + ", alpha = 0.3)"
    exec(sExecPlot)

ax = plt.gca()
ax.axes.xaxis.set_visible(False)
ax.axes.yaxis.set_visible(False)
ax.spines['right'].set_visible(False)
ax.spines['top'].set_visible(False)
ax.spines['bottom'].set_visible(False)
ax.spines['left'].set_visible(False)

plt.xlim([-100,100])
plt.ylim([-100,100])
plt.show()
```
今回は20行のplt.get_cmap("xxx")の中身をいろんなカラーマップに変えてみます．
試したい方は以下を参考にカラーマップを変更してみてください．
![cmap.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3617469/b57bdbc1-c441-6c34-62c8-168dae2a0807.png)

## 結果
![a1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3617469/fc266ea5-344c-e313-c5eb-330fe1605eb6.png)
![a2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3617469/c302df1c-1997-e2a9-5b44-90d170fb2bac.png)
![a3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3617469/727bd377-6526-547d-81cb-998bd9e3b6e6.png)

## おわりに
なんかちょっといい感じ．
透過率（alpha）の値を変えるとテイスト変わるかも??　やってみてね．
Rails7.1の自動生成 Dockerfile から学ぶ entrypoint.sh の最適化

# Rails7.1でDockerfileの自動生成機能が追加された
しかし、この機能は開発環境様ではなく本番環境用のファイルなので
実際開発を行う際には手動でDockerfileを作成する必要がある

今まで利用してきて居た Dockerfile では entrypoint の記述を以下のようにして居た。

```Dockerfile
COPY entrypoint_dev.sh /usr/bin/
RUN chmod +x /usr/bin/entrypoint_dev.sh
ENTRYPOINT ["entrypoint_dev.sh"]
EXPOSE 8080

CMD ["rails", "server", "-p", "8080", "-b", "0.0.0.0"]
```

entrypoint.sh を専属で用意
ファイルをコピーし、実行権限を付与
そしてスクリプトファイルを ENTRYPOINT に指定して居ました。

## Rails7.1 での ENTRYPOINT の指定
今回自動生成されるようになった Dockerfile では以下のようになって居た。
恐らく これがプログラマー界隈の中では、当たり前で前から使われていた設定だと思うのですが
今回railsをアップデートして初めて知りました

```Dockerfile
# railsという名前の新しいユーザーアカウントを作成
RUN useradd rails --create-home --shell /bin/bash

# log、storage、tmpというディレクトリの所有者とグループをrailsに変更
RUN chown -R rails:rails db log storage tmp

# USER命令は、以降の命令やDockerコンテナの実行時に使用されるユーザーとグループを設定
USER rails:rails

# ENTRYPOINT命令はコンテナが起動する際に実行されるコマンドを指定。
ENTRYPOINT ["/rails/bin/docker-entrypoint"]
```

ChatGPTによるとこんなメリットがあるようです。
確かに非rootユーザーで実行されるのは良いですね、また標準化という点も素晴らしいと思います
他社に転職した際や他プロジェクトでも同様の構成で動作していると、過去の経験が生きます。

### セキュリティ
非rootユーザー（この場合はrailsユーザー）でアプリケーションを実行することで、セキュリティを強化します。これにより、権限の昇格攻撃などのリスクを軽減できます。

### 本番環境向け
自動生成されたDockerfileは、本番環境での使用を想定しています。そのため、パフォーマンス、セキュリティ、安定性に重点を置いた設定が含まれています。

### 標準化
Railsによって自動生成されることで、Dockerfileの構造が標準化され、Railsコミュニティ内での一貫性が保たれます。
Blenderで自作アバターを作ってVRChatに連れて行った (1. 概要)

## 概要
Blenderで自作アバターのモデリング、Unityで設定して、VRChat（以下VRCと書きます）にアップロードしてきたので、振り返りや反省のためにも一連の流れをまとめようと思います。

少しでも初めて自作アバターを作る方の助けになるように、出来る限り詳しく記載したいと思います。

## 私について
* Blenderの基本的な操作は出来る
* Unity使ったことない
* VRC始めたばかり

## 事前準備
* **Blender始めたばかりの人**
Youtubeの簡単なチュートリアル等で基本操作の練習をしておくと、モデリングがスムーズに行えると思います。
基本操作を学べるおすすめのチュートリアルを紹介します。
> * [【超入門】今からはじめるblender3.0 ~導入から画像出力まで~](https://www.youtube.com/watch?v=DsNZzUZPhw4)
> * [【Blender2.9】among usのキャラクターを作ろう！初心者向けチュートリアル](https://www.youtube.com/watch?v=EK5vLdjZR-A)
> * [【blender2.9】オールドファッションドーナツを簡単モデリング！【初心者向けチュートリアル】](https://www.youtube.com/watch?v=k4xYDolHTlA)

* **VRCを始めたばかりの人**
VRCでアバターをアップロードするには、トラストランクが New User 以上である必要があります。ランクを上げるには、次の行動をとれば良いようです。
> * VRChatで遊ぶ
> * フレンドを増やす

ただ、いきなり他のワールドに遊びに行くのはハードルが高いと思います。X（旧Twitter）で「VRC 初心者」のようなワードで検索すると、VRC初心者ツアーの募集がかかっていると思うので、そちらを利用させて頂くのが良さそうです。

## アバター作成のおおまかな流れ
### 1. Blenderでの作業
1. **アバターのデザインを決める**
作成するアバターの大まかなイメージを決めます。
2. **モデリング**
アバターの3Dモデルを作成します。
3. **リギング・スキニング**
ボーンを配置し割り当て、モデルが動くようにします。
4. **UV展開・テクスチャ作成**
作成したモデルのメッシュをUV展開して、テクスチャを作成・割り当てます。
5. **シェイプキー作成**
モデルの表情を作成します。
6. **エクスポート**
作成したモデルを、FBX形式のファイルとしてエクスポートします。
### 2. Unityでの作業
1. **環境構築**
使用するソフトやアセットを準備します。
2. **セットアップ**
VRCでの視点・リップシンク・表情・目の動きなどの設定や、テクスチャ・シェーダの設定、ボーンの設定と動きの確認などを行います。
3. **アップロード**
アバターの名前やサムネイルなどを設定して、実際にVRCにアップロードします。

## 注意
私自身、初めてのアバター制作だったので記事に間違っている部分があるかもしれません。ご了承ください。

## 終わりに
記事が長くなりそうなので、「Blenderでの作業」「Unityでの作業」で記事を分けます。
お手数ですが、次のリンクから参照してください。
<br/>

> [Blenderで自作アバターを作ってVRChatに連れて行った (2. Blender)](https://qiita.com/ksr03/items/5a7bb46a317a52060e46)
[Blenderで自作アバターを作ってVRChatに連れて行った (3. Unity)](https://qiita.com/ksr03/items/5397226a95d9dc215364)
Pythonがなくなったと思った話

## Pythonがない
```zsh
$ python -v
  zsh: command not found: python
```

だけど`pyenv versions`すると確かにsystemにPythonが入ってる。
```zsh
$ pyenv versions
  system
* 3.11.2 (set by /Users/username/.pyenv/version)
```
もしや…
```zsh
$ which python3
/usr/bin/python3
```
エイリアスを登録すればいい話だった。`~/.zshrc`に`alias python='python3'`を書き込んで解決。
```zsh
echo "alias python='python3'" >> ~/.zshrc
```
【最新】英語学習アプリ徹底比較！ランキング1位はやっぱりこれだった 🌟

色々な英語の勉強用アプリを使ってみたから、ランキングを述べたい。

ちな計画と今の状況はこんな感じ

# さいきょうのけいかく・改
TOEIC の勉強始める
↓
TOEIC 800 点行った
↓
英語を話せるように英会話と口語フレーズを勉強

↓　👈 今こ↑こ↓

日常英会話ならペラペラ！

# 6位
Wordbook

https://apps.apple.com/jp/app/id1398954789

👍
- TOEFL テスト英単語3800 が使えるから

👎
- 復習しにくい、復習リマインダーのような機能をつけて欲しい。紙ベースのほうがいいと思っちゃう

# 5位
オーディオブック

https://apps.apple.com/jp/app/id1357581573

👍
- TOEIC の公式問題集の音声が入っている。
- TOEFLテストボキャブラリー＋例文3900　が入っている
- 倍速モードがある。

👎
- 復習機能がない

# 4位
abceed

https://apps.apple.com/jp/app/id1060016132

👍
- TOEIC L&R TEST 出る単特急　金のフレーズが入っている
- 復習リマインダー機能がついているので、復習しやすい！

👎
- 広告がうざい（課金すればいい話だけどね）
- UIが煩雑で気が散る
- 
# 3位: Praktika 🥉
Praktika

https://apps.apple.com/jp/app/id1624701477

👍
- Chat GPT を使ったAI英会話なので、値段が安い
- 簡単な添削機能がついている
- 全部英語だし、難易度の高い会話を提供している

👎
- 英会話のテーマが日常的じゃないことも多い（自己分析してください、とか、文法の授業とか）
- まだバグがあったり、イマイチだなと思う機能も多い。ベータ版なので今後に期待。

# ちょっと一息。圏外ランキング

TANZAM

https://apps.apple.com/jp/app/id1554699067

👍
- TOEICの勉強としては、かなり丁寧に学べる

👎
- 初学者向け。難易度が低い


Santa

https://apps.apple.com/jp/app/id1148006701

👍
- AI講師に、TOEIC用の勉強を教われる
- iPad ならおすすめできるUI

👎
- iPhone のUIだと勉強しづらい
- 手取り足取り学ぶ感じなので、自分には合わなかった。自分はもっと、空いた穴を埋めていく感じの勉強方法を望んでいたので

Elsa Talk 

https://apps.apple.com/jp/app/id1083804886

👍
- やってて楽しい

👎
- 難易度が低い。身については行かない気がする。



# 2位: Real 英会話 🥈
Real 英会話

https://apps.apple.com/jp/app/id373563219

👍
- 日常英会話で使えるフレーズが数千個学べる
- 全てのフレーズに、シチュエーション音声が付いていて覚えやすい
- 復習機能がかなり使える、ちょうど忘れた頃に学べる
- スマホの音声入力で学べるので発音の勉強にもちょうど良い

👎
- 新規学習機能をもう少し改善してほしい。具体的には、1日に学習できる新フレーズの量をもっと多くしたい
- 古いスペックのスマホだと、音声認識時にスマホが落ちる。


# 1位: Speak 🏆
Speak

https://apps.apple.com/jp/app/id1286609883

👍
- AI英会話なので、いつでもできるし敷居が低い
- 日常で使えそうなシチュエーション（ホテルの予約や、友人との会話など）
- 添削機能が優秀

👎
- 上位モデルの課金にしないと、リミット制限がきつい。具体的には、1日あたり２英会話を毎日やる場合、上位モデルの課金（月4000円プラン）にしなくちゃいけない
- 英会話自体の難易度は低い（もう少し難しい話題でも良いかな）


# 検討中
LingoChamp

https://apps.apple.com/jp/app/id1460991582

AI 講師による英会話が可能。星評価が多いので検討してる

fondi

https://apps.apple.com/jp/app/id1479328028

外国人と気軽に話せるメタバース。盛り上がっているっぽいし、次はこれをやりたい

おしまい
EC2 Instance Savings Plansとリザーブドインスタンスの違い

# EC2 Instance Savings Plansとリザーブドインスタンスの違い

Amazon Web Services（AWS）には、長期的なコスト削減を目的としたEC2 Instance Savings Plansとリザーブドインスタンス（Reserved Instances、RI）という二つの異なる支払いオプションがあります。これらのオプションは、特定の条件下で大幅なコスト削減をもたらすことが可能ですが、それぞれに独自の特徴があります。ここでは、具体例を交えながら、両者の違いとその利用シナリオについて解説します。

## EC2 Instance Savings Plans

### 柔軟なコスト削減オプション

EC2 Instance Savings Plansは、特定のインスタンスファミリー内で、インスタンスタイプやサイズを柔軟に変更しながら、割引を享受することができるプランです。

#### 具体例

例えば、ある企業がm5インスタンスファミリーに対してSavings Planを購入したとします。その後、アプリケーションの需要に応じてm5.large、m5.xlarge、m5.2xlargeなど、同じファミリー内で異なるインスタンスタイプを使用しても、割引は適用され続けます。

#### 特徴

- **使用量に基づく割引**: コミットメントした使用量に基づいて割引が提供されます。
- **柔軟なインスタンス選択**: 特定のファミリー内でインスタンスタイプを自由に変更可能です。

## リザーブドインスタンス

### 予め確定したインスタンスに対する割引

リザーブドインスタンスは、特定のインスタンスタイプとリージョンに対して、1年または3年の期間で予約し、割引を受けることができるプランです。

#### 具体例

たとえば、企業が特定のプロジェクトに対してc5.largeインスタンスを北バージニアリージョンで1年間使用することが分かっている場合、c5.largeインスタンスのリザーブドインスタンスを購入することで、その期間のコストを削減できます。

#### 特徴

- **事前の確定**: インスタンスタイプとリージョンを事前に決定し、一定期間の使用を確定します。
- **大幅なコスト削減**: 長期的なコミットメントにより、顕著な割引を享受できます。

## EC2 Instance Savings Plansとリザーブドインスタンスの比較

### 適用シナリオと柔軟性

- **EC2 Instance Savings Plans**:
  - 需要が予測しにくいまたは変動するシナリオに適しています。
  - インスタンスの種類やサイズを頻繁に変更する必要がある場合に最適です。

- **リザーブドインスタンス**:
  - 需要が安定していて、特定のインスタンスタイプを長期間使用する場合に適しています。
  - 事前に使用計画が明確な場合に最適です。

## まとめ

EC2 Instance Savings Plansとリザーブドインスタンスは

、AWSのコスト削減戦略の重要な要素です。EC2 Instance Savings Plansは柔軟性に優れ、リザーブドインスタンスは予測可能な使用に対して顕著なコスト削減をもたらします。それぞれのビジネスニーズと使用パターンに応じて、最適なプランを選択することが重要です。適切な選択によって、長期的なコスト効率と運用の柔軟性を実現できます。