OmniAICreator/Qiita-1.07M huggingface dataset:
Python で物体認識AIのYOLOv8を試してみた！〜基礎編〜

# はじめに
今回、試したのは画像認識AIの中でも、物体を認識できるYOLOv8を試してみました。
今回は、基礎編と題して、githubのページに記載の、インストールから基本的な操作についてご紹介します。

# 環境
Windows10
Python3.11.8
GPU:NVIDIA Geforce RTX3060
VSCode

# 使用ライブラリー
pytorch 2.2.1+cu118
ultralytics 8.1.25
opencv-python 4.9.0.80

#YOLOv8のインストール:
githubの以下のページに記載の流れでインストールします。
前提条件としてはPython3.8以上でPyTorchは1.8以上が必要です。
PyTorchをインストールした後、以下のpipコマンドでYOLOv8をインストールします。
```
pip install ultralytics
```

https://github.com/ultralytics/ultralytics



# YouTubeでの解説：
上記のインストール方法から、サンプルプログラムの実行までをYoutubeで詳しく解説していますので、ぜひ、ご覧ください。

https://youtu.be/AfjFntuShjw

<iframe width="560" height="315" src="https://www.youtube.com/embed/AfjFntuShjw" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" loading="lazy" allowfullscreen></iframe>



# サンプルソース
以下のサイトではPythonでYOLOv8を使うサンプルプログラムが掲載されています。

https://docs.ultralytics.com/ja/usage/python/

YouTubeで紹介している１つ目の処理のプログラムソースです。

```Python:whisper0.py
from ultralytics import YOLO
from PIL import Image
import cv2

model = YOLO("yolov8s.pt")

# # from PIL
im1 = Image.open("sample1.jpg")
results = model.predict(source=im1, save=True)  # save plotted images
```

# 動画処理プログラム
Yotubeで紹介している、動画の物体認識プログラムです。
sampleというフォルダ内に、動画ファイルを保存して実行します。
```Python:whisper_excel.py
from ultralytics import YOLO
from PIL import Image
import cv2

model = YOLO("yolov8x.pt")

results = model.predict(source="sample", show=True,save=True) # Display preds. Accepts all YOLO predict arguments
```

# 最後に：
今回は、物体認識のYOLOv8のインストールと、基本的な使い方を紹介しました。
今後、プログラムで各種認識結果を受け取る方法も、ご紹介したいと思います。
Eloquentについて(controllerファイル)

基本！

> または ¬= または **!=**　　等しくない

今回はcontrollerファイルで使った！



### **「条件に合ったデータを取得する書き方」**

モデル名 : : where( ‘条件をつけるカラム’ , ‘条件’ ) －＞ get ( ) ;

例）Post : : where( ’user_id’ , auth ( ) -＞id ( )  ) -＞get ( ) ;

意味）’user_id’カラムが、ログインしているユーザーのid（auth ( ) -＞id ( )）と同じpostsデータを抽出する

### **「条件に合わないデータを取得する書き方」**

モデル名 : : where( ‘条件をつけるカラム’ ,  ‘ ! = ’ ,  ‘条件’ ) －＞ get ( ) ;

例）Post : : where( ’user_id’  ,  ‘ ! = ’ ,  auth ( ) ー＞id ( )  ) ー＞get ( ) ;

意味）’user_id’カラムが、ログインしているユーザーのid（auth ( ) -＞id ( )）に合わないpostsデータを抽出する



### **「主なメソッド一覧」**

| メソッド名 | どんなことができるのか |
| --- | --- |
| all() | 全てのレコードを取得する |
| get() | クエリに制約をつけた物を取得する |
| fresh() | Eloqunetインスタンスを再取得する |
| refresh() | データベースから新しいデータを使用して再ハイドレートする |
| chunk() | チャンクごとに受信するレコードの数を制限できる |
| cursor() | 単一のデータベースクエリのみを実行する時に使うメソッド |
| select() | 特定のカラムのみ取得する |
| addSelect() | 特定のカラムのみを取得したが、それに新しいカラムを追加する |
| find() | 主キーでモデルを取得する |
| first() | クエリの制約に一致する最初のモデルを取得 |
| firstWhere() | クエリの制約に一致する最初のモデルを取得する |
| findOr() | findOr()結果が見つからない場合は別のアクションを実行する |
| firstOr() | first()の結果が見つからない場合は別のアクションを実行 |
| findOrFail() | 結果が見つからない場合はModelNotFoundExceptionを投げる |
| firstOrCreate() | 取得するまたは存在しない場合は作成 |
| firstOrNew() | 取得するか、新しいインスタンスを作成 |
| save() | モデルに属性セットした後、データベースに保存する |
| create() | モデルを保存し、インスタンスを返す |
| isDirty() | モデル取得後にそのモデルの属性が変化したかを判定する |
| isClean() | モデル取得後にそのモデルの属性が変更されていないことを判定する |
| wasChanged() | リクエストサイクル内でモデル取得後に属性に変更が起きたのかを判別する |
| getOriginal() | モデルの元の属性を含む配列を返す |
| updateOrCreate() | 一致するモデルが存在しない場合は、新しいモデルを作成し永続化する |
| upsert() | 1つのクエリで複数のアップサートを実行する |
| delete() | モデルインスタンスの削除 |
| truncate() | モデル関連している全てのデータベースレコードを削除する |
| destroy() | 主キーによってモデルを削除する(配列、collectionも対応) |
| restore() | モデルを復元する |
| forceDelete() | データベースデーブルからソフトデリートされたモデルも完全に削除する |
| withTrashed() | ソフトデリートしたモデルの結果も含める |
| onlyTrashed() | ソフトデリートしたモデルのみを取得する |
| replicate() | 既存のモデルインスタンスを未保存コピーする |
| withoutGlobalScopes() | グローバススコープを削除 |
| is() | 2つのモデルが同じかどうか調べる |
| isNot() | 2つのモデルが違うことを調べる |
マネジメントコンソールで作成したリソースをTerraformに取り込み

マネジメントコンソールで手作成したAWSリソースがある場合、
Terraformの管理リソースとして取り込むことができます。
作成済リソースを後からIaC化したいときに便利です。

以下、EC2を例とした追加手順になります。

# 1.インスタンスIDを調べる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3690862/96dd6cb5-7171-ebcc-a4f2-a827a1aae237.png)

# 2.tfファイルにresourceブロックを追加

```
resource "aws_instance" "test" {
  
}
```
・aws_instanceのresourceブロックを追加する
・中身は空でOK
# 3.terraform importコマンドで取り込み実行
```
terraform import aws_instance.test i-0305acd49344816e2
```
・terraform import <リソース名> <リソースID>
・＜リソース名＞は2で作成したresourceブロックの名前を指定する
・＜リソースID＞は1で確認したインスタンスID指定する

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3690862/39bb7cc9-a10c-499f-8de0-2882457ec7f3.png)
Import successful!が表示されれば成功
# 4.terraform state showコマンドで取り込み結果を確認
```
terraform state show aws_instance.test
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3690862/8407002e-fafb-ff1f-7184-e796f9acaa12.png)

# 5.resourceブロックを編集
```
resource "aws_instance" "test" {
  ami = "ami-0a211f4f633a3af5f"
  instance_type = "t2.micro"
}
```
・4.terraform state showコマンドで表示された値を設定

<br/>
これでterraformの管理対象として認識されるようになる。<br/>
以降はresourceを編集し、applyすることでリソース修正が可能に。

以上
laravelのpropsとは(初心者理解）

**親のデータを子に渡す仕組み。propsは子コンポーネントに書く！**

```jsx
<sensor-save-component
            ref="SaveDialog"
            :auth="this.auth"
            :const="this.const"
            :is_auth_site="is_auth_site"
            **:is_batch_process="is_batch_process"**
            @onListReload="onGetList"
        ></sensor-save-component>
        
         data: function () {
        return {
            is_batch_process : false,
```

**:is_batch_process="is_batch_process"**

子コンポーネントのpropsでデータを親から受け取る

```jsx
export default {
    props: {
        auth:{
            type: Object,
            default: null
        },
        const:{
            type: Object,
            default: null
        },
        is_auth_site:{
            type: Boolean,
            default: true
        },
        **is_batch_process: { 
            type: Boolean,
            default: false
        }**
    },
```

Vue.jsの**`props`**オプションは、親コンポーネントから子コンポーネントにデータを渡すために使用されます。

親コンポーネントは子コンポーネントを使用する際に、**`props`**オプションで定義されたプロパティを指定し、その値を渡すことができます。子コンポーネントでは、渡されたデータを**`props`**オプションで受け取り、コンポーネント内で使用することができます。

**`props`**を使用することで、コンポーネント間でデータを効果的にやり取りすることができます。これは、Vue.jsのコンポーネントベースのアーキテクチャにおいて非常に重要な機能であり、コンポーネントの再利用性や柔軟性を向上させます。

```
const
```

はJavaScriptの予約語であり、変数を宣言するためのキーワードです。このコードでの

```
const
```

はVue.jsのコンポーネントの

```
props
```

において、親コンポーネントから渡される定数を受け取るためのプロパティを定義しています。

この**`const`**プロパティは、親コンポーネントからデータを受け取るために書かれています。

Vue.jsのコンポーネントでは、**`props`**オプションを使用して親コンポーネントからデータを受け取ります。この場合、**`const`**は親コンポーネントから渡されるオブジェクトであり、子コンポーネント内で利用されることが期待されています。

**`props`**オプションで定義されたプロパティは、子コンポーネント内で使用されるデータとして利用されますが、コンポーネント内で定数や設定値を受け取る場合にも利用されます。そのため、この**`const`**プロパティは親コンポーネントからのデータ受け取り専用であると考えられます。

```jsx
mounted() {
    this.$nextTick(() => {
        // ビュー全体がレンダリングされた後にのみ実行されるコード
        //データ取得
        this.onGetList();

        // propsの値をコンソールで確認
        console.log('auth:', this.auth);
        console.log('const:', this.const);
    });
},
```
話しかけたら楽に判るから 値付け間違いないもん♥byいしかわ  version 0

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2617007/064ee6b5-a453-b9be-a46c-3d9871964a09.png)

HTMLとJavascriptでつくる
声を掛けたら それらしいのを返してくれるヤツ


## 下記課題解決のプロトアウト

お弁当や総菜など商品作ってラベル貼るときな
ラベル貼機にその商品の品番入力背なあかんねんけど
品番は紙の表になっとって見にくい探しにくいねん

品番多いねん 紛らわしいのもあんねん 表から探すのめんどいやん！
何ページもある表から探してって、その時間が無駄や！
しかも見間違いが多発すんねん！

と あつく かたる いしかわてんちょう

## 作りたい商品の名前を話したら 検索して表示してくれるのでけへんか？！

音声からそれらしい商品の候補を出しゃ、探しやすいやん
探す時間めっちゃ少なくなるやん！
間違え減るやん！楽できるやん！

と あつく かたる  いしかわてんちょう

## HTMLとJavascriptで書いてみたぞ
下記にcodepenのプロトタイプ置いておきます
ご査証ください
★ブラウザ GoogleChrome推奨 マイクへの許可しましょう
  上手く動作しない時はEDIT ON CODEPEN の所クリックしてcodepenのサイトに移動してつかってみて下しい
<p class="codepen" data-height="300" data-default-tab="js,result" data-slug-hash="qBwRxJR" data-preview="true" data-user="hvaxtmgw-the-solid" style="height: 300px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;">
  <span>See the Pen <a href="https://codepen.io/hvaxtmgw-the-solid/pen/qBwRxJR">
  Untitled</a> by さわやまこうじ (<a href="https://codepen.io/hvaxtmgw-the-solid">@hvaxtmgw-the-solid</a>)
  on <a href="https://codepen.io">CodePen</a>.</span>
</p>
<script async src="https://cpwebassets.codepen.io/assets/embed/ei.js"></script>

## 商品名修正追加
修正、追加はココっす 同じ感じで追加っ

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2617007/389b9c4b-c305-3297-213f-083a9488a248.png)

## 使った感じ
ひとますプロトタイプ完成や  店長どや？


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2617007/a100d6ad-d572-7482-48ff-fac7a5baf1a6.png)


## 今日はここまで！
とりま chatGPTありがと おつかれ！！

作り方 chatGPTに 質問

:::note info
俺はスーパーの総菜売り場で働いてるんだけど、商品名言ったら 品番返してくれるの作って
:::

と質問すると
APIとかバックエンドとか言ってくるので
**今のスマホってさ だいたい音声入力対応してるじゃん**
と思って

:::note info
codepenつかって簡単に作りたい
検索窓に音声入力されたテキストから商品台帳にある商品を
返すのをつくりたいんだよ
テキスト入力の所  音声入力ボタンをじっそうしたい
:::
とごねると

CodePenで簡単な商品検索デモを作る場合、全てのロジックをフロントエンドで処理する形になります。バックエンドのAPIを模擬するために、静的な商品データをJavaScript内に持たせ、検索クエリに基づいてこれをフィルタリングする方法を取ります。
ここでは、商品名を入力すると、その名前に基づいて商品を検索し、結果を表示する簡単なデモの作成方法を説明します。

と分かり合えた
[macApp] NSTextView にデフォルトのタブストップを設定する

# はじめに

`NSTextView`を使用して、簡易的なテキストビューアを作り活用しているが、なぜか タブコードが入ると、予期しない改行が発生する。
しかし、偶然に タブストップの未設定が原因と判明した。

今回は、`NSTextView`にデフォルトのタブストップを設定する方法をまとめておく。

# タブストップの設定方法

$\frac{1}{2}$インチごとにタブストップを設定するコードは以下の通り。
（1インチ = 72ピクセル）

```swift
let style = NSMutableParagraphStyle()
style.defaultTabInterval = 36.0 // 1/2 inch
style.tabStops = []
textView.defaultParagraphStyle = style
let attrs = [NSAttributedString.Key.paragraphStyle: style]
textView.typingAttributes = attrs
```

このコードを実行すると、個々のプロパティで設定したフォントや文字色は機能しなくなる。このため、タブストップを設定する場合は、これらの属性も同時に設定する必要がある。

## フォントと文字色も一緒に設定する

```swift
let style = NSMutableParagraphStyle()
style.defaultTabInterval = 36.0 // 1/2 inch
style.tabStops = []
textView.defaultParagraphStyle = style
let attrs = [NSAttributedString.Key.paragraphStyle: style, 
             NSAttributedString.Key.font: NSFont(name: "フォント名", size: フォントサイズ)!,
             NSAttributedString.Key.foregroundColor: NSColor.textColor]
textView.typingAttributes = attrs
```

（必要に応じて、背景色等、他の属性も一緒に設定する）


## タブストップを8文字分に設定する

等幅フォントを使用する場合は、タブストップをそのフォントサイズの8文字分とすると見栄えばよい。
その場合のコードは以下の通り。

```swift
let font = NSFont(name: "等幅フォント名", size: フォントサイズ)!
let attrString = NSAttributedString(string: "12345678", attributes: [NSAttributedString.Key.font: font])

let style = NSMutableParagraphStyle()
style.defaultTabInterval = attrString.size().width
style.tabStops = []
textView.defaultParagraphStyle = style
let attrs = [NSAttributedString.Key.paragraphStyle: style, 
             NSAttributedString.Key.font: font,
             NSAttributedString.Key.foregroundColor: NSColor.textColor]
textView.typingAttributes = attrs
```

# おわりに

何年か解決できなかったタブコードの改行問題が、偶然とはいえ、今回解決してよかった。
【ver14のNext.jsで動かす】『作って学ぶNext.js/React Webサイト構築』（随時更新予定）

# はじめに
初版の『作って学ぶNext.js/React Webサイト構築』をバージョン14のNext.jsで触ってみたらところどころうまくいかないところがあるのでメモ。

# P.56 カスタムAPPコンポーネントについて

## うまくいかないところ
書籍では「`pages`ディレクトリ直下に`_app.js`を作成する」とあるが、`pages`ディレクトリがない。
手動で`_app.js`を作っても各ページに反映しない。

## 解決策
`src/app`配下にある（はず）`layout.js`を以下のように修正する。
```js
import { Inter } from "next/font/google";
import "./globals.css";
import Layout from "components/layout";

const inter = Inter({ subsets: ["latin"] });

export const metadata = {
  title: "Create Next App",
  description: "Generated by create next app",
};

export default function RootLayout({ children }) {
  return (
    <html lang="en">
        <Layout>
          {children}
        </Layout>
    </html>
  );
}
```
全ページに適用したい`<Layout>`コンポーネントをもともと定義されてる`RootLayout`コンポーネントの中に定義してあげる形で対処できます。

## 参考
> 従来のNext.jsでは、pagesディレクトリ内に各ページのファイルがあり、アプリの共通設定は_documentや_appで指定されていました。一方、Next.js 13では、「app/layout.tsx」ファイルで全ページ共通のレイアウトを定義することが可能です。

https://udemy.benesse.co.jp/development/next-js13.html

# P.58 ページを増やす

## うまくいかないところ
`pages`ディレクトリがない。

## 解決策
`src/app`ディレクトリがある（はず）ので、`src/app`ディレクトリ内に作成したいURLと同じ名前のディレクトリを作成する（例：URLを`/about`にしたければ`about`ディレクトリ）。そして、作成したディレクトリの中に、`page.js`ファイルを作ってコンポーネントを作ってあげる。

:arrow_down: 例
```page.js
import Hero from "components/hero";

export default function About() {

    return (
        <>
            about
            <Hero />
        </>
    )
}
```
こうすることで、`/about`にアクセスするとページが表示されるはずです。

## 解説
従来のNext.jsのルータは`Pages Router`と言いますが、Next.js 13より`App Router`というルータが導入されました。
`App Router`は、`/app`配下のフォルダ階層に応じてリクエストパスとコンポーネントの対応関係が決まります[（参考：これからはじめるReact実践入門）](https://wings.msn.to/index.php/-/A-03/978-4-8156-1948-0/)。

# P.188 メタデータを追加する

## うまくいかないところ
`Head`コンポーネントを使って`title`タグを設定しても、ページに反映されない。

## 解決策
`const metadata`を`export`する。
```page.js
import Container from 'components/container';
…

// タイトルの設定
export const metadata = {
    title: "アバウト"
}

export default function About(){
    …
}
```

## 参考

https://nextjs.org/docs/app/building-your-application/optimizing/metadata
CodeWhisperer のターミナル統合がうまく動かない

## 事のきっかけ
なんとなくインストールしていたfigがどうもAWS入りした関係からCodeWhispererなるツールに統合されたとのこと。  
しつこく移行しろとポップアップが出てくるので、「２分で終わる」という甘い言葉を信じてインストールボタンを押したら、**案の定動かなくなった**ので解決方法をメモしておきます。


## どーもシェル向けのインストール処理が走ってないように思える。
通常Figが走っていると、　ターミナル内で`git`なりコマンドを書き始めるとそこからコードヒントが出てくるようになる。
ありがちなアクセシビリティの設定を見直してみたが、CodeWhispererがOFFになっていたのでONにしておく。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61912/4415d2c8-1fbd-94f4-a09d-b27625ec4327.png)

だがこれでも解決しない。トラブルシュート用の画面を出すと、次のような画面になる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61912/bdb7d806-0b75-2d1f-5d2f-23ad0f3d2f6b.png)

なるほど、ここでShell integrationsのInstallボタンを押せばええんやな？とクリックしても、なんの反応も無ければ当然事も解決しない。

では、後述されているcwコマンドは？ 安定のnotfoundである。とはいえ、なんとなくこのcwコマンドでシェルへのインストール作業が出来そうな予感があるのでちょっと見に行ってみましょう。

## cwコマンドでCLIから

パッケージの中身を確認してみます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61912/a4e489ba-0cc1-d986-5871-c46e6a9b2096.png)

ありますな。cwコマンドはこのappbundleの中にあるのが分かったので、ターミナルでこいつをコツきましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61912/b11174e7-a17f-36b2-827c-2668136e06ea.png)

わたしは面倒なので、MacOSフォルダをそのままターミナルにドラッグしてこのパスに移動したシェルを開きます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61912/687091f2-61af-9b65-8b2f-abbff3658f2d.png)

ここで`./cw　doctor`を実行すると、ログインしろと言われるので、`./cw　login`言われるがままに開くブラウザからAWS Builderのアカウントでログインをします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61912/af36df20-2614-51ea-e757-cbc3b8907701.png)

もう一度`./cw doctor`をすると、一通り環境チェックをしてご丁寧にどうすればいいかをちゃんと教えてくれます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61912/2d083054-e1a7-fd5b-fb16-b70207480ee6.png)

では言う通りに、`./cw integrations install dotfiles`を実行してみましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61912/80fb9e21-0666-464b-0f6f-d790ca917763.png)

あんだけdoctorでは派手なメッセージが出てきたのに、インストールではこの１行しか返してくれないのな。さみしい奴だ。

## 動作確認

シェルの新規セッションから適用されるので、⌘+Nで新しいターミナルを開いて、実際に動くかみてみましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61912/48de25e8-2934-bf3e-cc2d-afadec5e6e9a.png)
ちゃんと行けてますね。なんの代わり映えもないFigでみたそれです。
CodeWhispererという存在をそもそもこの件で知ったので、いろいろ試してみます。
【Discord Bot】Embed を送信する

- [はじめに](notion://www.notion.so/hosimi/8e0e08f48a634c7c8282b3f5beead632?v=88f4e87f4f5a4b05ba5f766eaf38f0a2&p=3aa6bf880ce54593adf8590996b45ecf&pm=c#%E3%81%AF%E3%81%98%E3%82%81%E3%81%AB)
    - [Embed とは](notion://www.notion.so/hosimi/8e0e08f48a634c7c8282b3f5beead632?v=88f4e87f4f5a4b05ba5f766eaf38f0a2&p=3aa6bf880ce54593adf8590996b45ecf&pm=c#embed-%E3%81%A8%E3%81%AF)
    - [コード](notion://www.notion.so/hosimi/8e0e08f48a634c7c8282b3f5beead632?v=88f4e87f4f5a4b05ba5f766eaf38f0a2&p=3aa6bf880ce54593adf8590996b45ecf&pm=c#%E3%82%B3%E3%83%BC%E3%83%89)
        - [解説](notion://www.notion.so/hosimi/8e0e08f48a634c7c8282b3f5beead632?v=88f4e87f4f5a4b05ba5f766eaf38f0a2&p=3aa6bf880ce54593adf8590996b45ecf&pm=c#%E8%A7%A3%E8%AA%AC)
        - [Embed のカスタマイズ](notion://www.notion.so/hosimi/8e0e08f48a634c7c8282b3f5beead632?v=88f4e87f4f5a4b05ba5f766eaf38f0a2&p=3aa6bf880ce54593adf8590996b45ecf&pm=c#embed-%E3%81%AE%E3%82%AB%E3%82%B9%E3%82%BF%E3%83%9E%E3%82%A4%E3%82%BA)
        - [Embed メッセージの送信](notion://www.notion.so/hosimi/8e0e08f48a634c7c8282b3f5beead632?v=88f4e87f4f5a4b05ba5f766eaf38f0a2&p=3aa6bf880ce54593adf8590996b45ecf&pm=c#embed-%E3%83%A1%E3%83%83%E3%82%BB%E3%83%BC%E3%82%B8%E3%81%AE%E9%80%81%E4%BF%A1)
    - [参考](notion://www.notion.so/hosimi/8e0e08f48a634c7c8282b3f5beead632?v=88f4e87f4f5a4b05ba5f766eaf38f0a2&p=3aa6bf880ce54593adf8590996b45ecf&pm=c#%E5%8F%82%E8%80%83)

## はじめに

Discord の Embed について、自分が使うときに調べたことをまとめておきます。

## Embed とは

Discord のメッセージにリッチな情報を埋め込みをつけることができる機能です。
通常、Python を使用して Discord ボットを開発する場合が多いですが、さまざまなプログラミング言語で Embed を送信できます。以下は Python を使用した例です。

## コード

```python
import discord
from discord.ext import commands

# ボットのトークンを設定
TOKEN = 'あなたのボットのトークン'

# ボットを作成
bot = commands.Bot(command_prefix='!')

# ボットが起動したときに実行されるイベント
@bot.event
async def on_ready():
    print(f'Logged in as {bot.user.name}')

# コマンドを定義してEmbedメッセージを送信する
@bot.command()
async def send_embed(ctx):
    # Embedを作成
    embed = discord.Embed(
        title='Embedのタイトル',
        description='Embedの説明',
        color=0x3498db  # 色を指定 (青色)
    )

    # 任意のフィールドを追加
    embed.add_field(name='フィールド1', value='値1', inline=False)
    embed.add_field(name='フィールド2', value='値2', inline=False)

    # 画像を追加（URLを指定）
    embed.set_image(url='<https://example.com/image.jpg>')

    # 送信者のアイコンを表示
    embed.set_author(name=ctx.author.display_name, icon_url=ctx.author.avatar_url)

    # Embedを送信
    await ctx.send(embed=embed)

# ボットを実行
bot.run(TOKEN)

```

### 解説

このコードの例では、Bot に `!send_embed` というコマンドを実行すると、Embed メッセージが送信されます。

### Embed のカスタマイズ

Embed メッセージをカスタマイズするために使用できるいくつかのメソッドとプロパティがあります。
上記の例では、タイトル、説明、色、サムネイル、フィールドなどがカスタマイズされています。
詳細なカスタマイズについては、公式ドキュメントなどを読み込んでみるといいです。

### Embed メッセージの送信

Embed メッセージを送信するには、ボットが接続しているサーバー内の適切なチャンネルに対して await ctx.send(embed=embed)を使用します。これにより、Embed が含まれたメッセージが送信されます。

## 参考

- [初心者に捧ぐ Discord の Embed 入門](https://qiita.com/hisuie08/items/5b63924156080694fc81)
zabbix設定とか

ディスクについて

pvsコマンド
    PFreeを参照


ディスク拡張
LVMの仮想ディスク拡張後
pvdisplayでPV Sizeを確認
pvsでFreeを確認

pvresize /dev/sdb

PV SizeとFree PEが増えたことを確認


ここまでだと論理ディスクは拡張されていない
-----------------------
想定は追加した
/dev/sdb
/dev/vg0-lv-0

確認コマンド
lsblk
lvdisplay

拡張コマンド
lvextend --resizefs -l +100%FREE /dev/vg0/lv-0
これだと全てがLV拡張に割り当てられてFree PEが0になる
TL;DR ニューラルネットワーク

# TL;DR-TL;DR
多次元に星空を一直線に二分して星を探す様なシステムです。

# パーセプトロン
ニューロンの発火と学習を数学的モデルとしたもの。
```math
\vec{w}=\left(
\begin{array}{ccccc}
w_{1}\\
\vdots\\
w_{n}\\
\end{array}
\right)
\quad,\quad
\vec{x}=\left(
\begin{array}{ccccc}
x_{1}\\
\vdots\\
x_{n}\\
\end{array}
\right)
\quad,\quad
\vec{z}=\vec{w^T}\vec{x}
```
```math
\Phi(\vec{z}) = \left\{
\begin{array}{ll}
1 & (\vec{z} \geq \theta) \\
-1 & (\vec{z} \lt \theta)
\end{array}
\right.
```

# 多層パーセプトロン
```math
a_j=\Sigma^D_{i=1}\vec{w_{ji}}\vec{x_i}+\vec{w_{j0}}
```
```math
a_j:活性,\quad w_{ji}:重みパラメータ,\quad w_{j0}:バイアスパラメータ
```
ここで非線形活性化関数$h(\cdot)$を考え、$z_j=h(a_j)$とする。
また、二項定理のベルヌーイ分布の指数標準形を考えて、
$h(\cdot)$を$\sigma(x)=\frac{1}{1+e^{-x}}$のシグモイド関数とする事が一般的である。
これらの事と、$y(\vec{x},\vec{w})=f(\Sigma^D_{j=1}\vec{w_{j}}\phi(\vec{x_j}))$を考えると、
バイアスパラメータは$x_0=1$とすると重みパラメータの集合の内に含められる事から、
```math
y_k(\vec{x},\vec{w})=\sigma(\Sigma^M_{j=0}\vec{w_{kj}^{(2)}}h(\Sigma^D_{i=0}\vec{w_{ji}^{(1)}}\vec{x_i}))
```
とし、これをニューラルネットワークの順伝播と解釈する事が出来る。

## 2クラス分類
$y_k(\vec{x},\vec{w})$の2クラス分類問題を考えて、$p(C_1|\vec{x})$とすると、
$p(C_2|\vec{x})=1-y_k(\vec{x},\vec{w})$なので、目標変数$t$より、
$p(t|\vec{x},\vec{w})=y_k(\vec{x},\vec{w})^t(1-y_k(\vec{x},\vec{w}))^{1-t}\quad(∵ベルヌーイ分布)$
ここで、$\vec{x}$の独立性と最尤推定から、負の対数尤度の最小化を考え、
$$ E(\vec{w})=-\Sigma^N_{n=1}(t_nln(y_n)+(1-t_n)ln(1-y_n))（交差エントロピー誤差関数） $$

## 多クラス分類
$t_k$∈｛$0,1$｝及び$y_k(\vec{x},\vec{w})=p(t_k=1|\vec{x})$及びクラスラベルの独立性を仮定すると、
$E(\vec{w})=-\Sigma^N_{n=1}\Sigma^K_{k=1}t_{nk}ln(y_k(\vec{x_n},\vec{w}))$となり、
$$ y_k(\vec{x},\vec{w})=\frac{exp(a_k(\vec{x},\vec{w}))}{\Sigma_jexp(a_j(\vec{x},\vec{w}))}\quad（ソフトマックス関数） $$
となり、$0<=y_k<=1,\quad\Sigma_ky_k=1$を満たす。

## 勾配降下法
```math
\vec{w^{\tau+1}}=w^{\tau}-\eta\Delta E(w^{\tau})
```
```math
\eta:学習率パラメータ
```
これによりニューラルネットワークを収束させ学習させる。

## 誤差逆伝播
つまり、$\frac{dy}{dx}=\frac{dy}{dz}\cdot\frac{dz}{
dx}$
ネットワークの全隠れ層の微分を、この微分の連鎖率を用いた逆伝播により逆順に計算して得るアルゴリズム。
最終層の出力と教師データとの誤差関数からの出力を最後の微分係数とした上で微分の連鎖率を適用し、最終層の勾配と掛け合わせる事で最終層の微分係数を得て、同様の事を更に一段前のネットワークへ逆伝播させてその隠れ層の微分係数を得て、教師データとネットワーク全層の微分係数をこの逆伝播により得る事で、この得られた微分係数列の勾配を用いた勾配降下法等により学習を収束させる。

## ミニバッチ学習
ニューラルネットワークの訓練データをN個に分割して学習するアルゴリズム。
その際、誤差関数をNで割る事により正規化する。

## サンプル
[NumPyによる実装コード](https://www.kaggle.com/code/cotcot/multi-class-machine-learning-via-numpy)
Salesforce認定アドミニストレーター過去問+時々解説　Q1 ~ Q10

## Q1. リードの取引開始をした場合, 更新される可能性があるレコードはどれ？

A 既存のカスタムオブジェクトレコード
B 既存の取引先責任者レコード
C 既存の商談レコード
D 既存の取引先レコード

解答: B, C, D

-- 取引の開始 公式ヘルプ --
リードを評価したら, 取引先責任者, 取引先, 商談に変換する. 

## Q2. ログインするユーザーを制限できる機能はどれ？

A ロール
B セキュリティ設定
C プロファイル

解答: C

解説: プロファイル内の「ログイン時間帯」と「ログインIPアドレスの制限」でログインを制限できる.

## Q3. 数式項目について正しい説明を2つ選択せよ.

A 数式項目は子オブジェクトの項目を参照できる
B 数式項目は親オブジェクトの項目を参照できる
C 数式項目はレコードの詳細ページでは参照のみである
D 数式項目は数式内でその項目自体を参照できる

解答: B, C

解説: Cについて, レコードの詳細で数式項目のフィールドにはえんぴつマークが出ていないことから参照のみということがわかる. 

-- 数式項目の基礎について --
https://mrhappyneet.com/sfdc-field-formula/

## Q4. ユーザーインターフェースで変更可能なものは？

A スペルチェックを有効にする
B フロート表示を有効にする
C 特定ユーザに対するchatterを有効にする
D 拡張リストビューを有効にする

解答: A, B, D

-- ユーザーインターフェース 公式ヘルプ --
https://help.salesforce.com/s/articleView?id=sf.customize_ui_settings.htm&type=5

-- フロート表示について --
https://savepo.com/how_to_using_froat_display

-- リストビューについて --
https://www.ccc.seraku.co.jp/service/columns/salesforce/02/93/

## Q5. レポートの条件付き強調表示が使用できるレポートの形式はどれ？

A サマリーレポート
B マトリックスレポート
C 結合レポート
D 表形式レポート

解答: A, B

-- 条件付き強調表示　公式ヘルプ --
https://help.salesforce.com/s/articleView?id=sf.reports_builder_highlighting.htm&type=5

## Q6. 管理者が商談フェーズごとに設定できる機能はどれ？

A 確度
B 商品ファミリ
C 種別
D グラフの色
E 目標値
F 売上予測分類

解答: A, C, D, F

解説: 種別は, その商談が「進行中」なのか「成立」したのか, などを設定するところ. 

## Q7. 割り当てルールを利用して, ケースの所有者に割り当てることができるのは, 次のうちどれ？

A 取引先の所有者
B 取引先チーム
C ユーザ
D ケースチーム

解答: C

解説: ケースの割り当てルールで指定できるのは「ユーザー」と「キュー」である. [ケースの割り当てルール]に「このルールが適用された時に, ケースに割り当てられるユーザーを指定してください。」というステップがあり, そこで「ユーザー」か「キュー」を選択できる.

## Q8. 動的ダッシュボードの説明で正しい内容はどれ？

A 基本データが更新されるとダッシュボードから自動的にメールが送信される
B 基本データが変更される度にダッシュボードも自動更新される
C ダッシュボードコンポーネントは、ダッシュボードが表示されるデバイスに基づいてサイズ調整される
D ダッシュボードは参照ユーザによって異なるデータが表示される

解答: D

解説: ダッシュボードは自動更新されるものではなく, 「更新」ボタンを押すことで更新がかかる. また, 閲覧ユーザーのデータアクセス権によってダッシュボードに表示されるデータが変わっていく.

## Q9. サポートエージェントが問い合わせやミーティングの詳細を素早く記録することができる機能はどれ？ 3つ選べ.

A 行動
B ケースコメント
C ケースチーム
D カスタム項目
E ケースフィード

解答: A, B, E

## Q10. Web-to-リードを適切な営業担当者に割り当てるためにリード割り当てルールを作成した. 割り当てルールを満たさない場合でも全リードに所有者を割り当てたいと考えている. システム管理者はどのようにすればいい？

A 未割り当てのリードを振り分ける入力規則を作成する
B 未割り当てのリードを振り分けるエスカレーションルールを作成する
C デフォルトのリード作成者を指定する
D デフォルトのリード所有者を指定する

解答: D

解説: 割り当てルールに当てはまらない場合は, デフォルトのリード所有者が自動的にリード所有者に設定される.
イーロン・マスク、ChatGPTのライバル「Grok」をオープンソース化する(海外記事翻訳)

![1f128d4f58ff1d1ffd782acd895644bc.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2849682/7096c174-8954-6e68-0328-da4bcc9146dd.png)

### 導入

2024年3月17日、Qurartzにて**Elon Musk just made his ChatGPT rival Grok open-source**　は投稿された。

以下Quartzのホームページ

https://qz.com


以下翻訳記事ページ

https://qz.com/elon-musk-xai-grok-open-source-openai-chatgpt-1851343578

## イーロン・マスク、ChatGPTのライバル「Grok」をオープンソース化する

### イーロンマスクは、OpenAIおよびそのCEOであるサム・アルトマンとの確執の中で、この動きを予告していた。彼は間近でOpenAIとマイクロソフトとのパートナーシップを巡って提訴している。

![1f128d4f58ff1d1ffd782acd895644bc.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2849682/7096c174-8954-6e68-0328-da4bcc9146dd.png)

イーロン・マスクは、日曜日に自身の新しいAI企業のチャットボット「Grok」を動かすコンピュータコードを公開した。これは、OpenAIおよびそのCEOであるサム・アルトマンとの継続的なライバル関係における最新の動きである。マスク氏の企業xAIは、日曜日に自社のウェブサイトでGrok-1をオープンソースのAIモデルとしてリリースした。同社は、「3140億のパラメータを持つMixture-of-Expertsモデル、Grok-1の重みとアーキテクチャを公開する」と述べている。

テスラおよびスペースXのCEOで、ソーシャルメディアサイトXも所有し、OpenAIの創設者でもあるイーロン・マスクは、ソーシャルメディア上の簡潔な一文でこのリリースを予告していた。先週の月曜日、イーロン・マスクはXで「今週、@xAIがGrokをオープンソース化する」と書いている。

https://twitter.com/elonmusk/status/1767108624038449405?ref_src=twsrc%5Etfw%7Ctwcamp%5Etweetembed%7Ctwterm%5E1767108624038449405%7Ctwgr%5Ec52d938029869761aaf1ed7bbcbe59eaf5f40b0a%7Ctwcon%5Es1_&ref_url=https%3A%2F%2Fqz.com%2Fembed%2Finset%2Fiframe%3Fid%3Dtwitter-1767108624038449405autosize%3D1



イーロン・マスクは先月末、OpenAIとアルトマンを提訴し、ChatGPTの開発者であるOpenAIとマイクロソフトの数年にわたる数十億ドル規模のパートナーシップが、利益よりも人類への貢献を優先するという創設時のコミットメントを裏切っていると主張した。この訴訟では、契約違反、信認義務違反、不公正な商慣行が主張されている。また、このビリオネアは、OpenAIに対し、その研究と技術を一般に公開するよう命じることを求めた。
イーロン・マスクの訴状には、「OpenAI, Inc.は、世界最大のテクノロジー企業であるマイクロソフトの事実上のクローズドソースの子会社に変貌を遂げた」と記されている。「新しい役員会の下で、同社は人類の利益のためではなく、マイクロソフトの利益を最大化するために、人工汎用知能(AGI)を開発しているだけでなく、実際に洗練させている」とも述べられている。
昨年7月、イーロン・マスクは自身のAI企業であるxAIを発表した。そして11月、Xで「選ばれたグループに向けて」最初のAI製品をリリースすると述べた。xAIは、マスク氏が所有する以前はTwitterとして知られていたソーシャルメディアサイトXとは独立しているが、同社のウェブサイトでは、XおよびマスクのEVメーカーであるテスラと密接に連携していくと述べられている。
イーロン・マスクが2015年にアルトマン氏と共に共同設立し、その後離脱したOpenAIは、今月初めにマスク氏の訴訟に対し、同氏がOpenAIに在籍していた際のメールのスクリーンショットを含むブログ記事で反応した。それらのメールは、マスク氏がOpenAIを営利企業にすることを支持し、グーグルのAIへの取り組みに対抗するためにテスラとの合併を推し進めていたことを示している。OpenAIは、その反応の中で、アルトマン氏と他の共同設立者であるグレッグ・ブロックマン氏が当初1億ドルの資金調達を計画していたのに対し、マスク氏は「絶望的に聞こえるのを避けるため」に10億ドルの資金提供からスタートしたがったと述べている。
OpenAIは、このブログ記事の中で、「イーロン・マスクはOpenAIを去り、Google/DeepMindに対抗する競合相手が必要であり、自分でそれを行うつもりだと言った」と述べている。また、「彼は、我々が独自の道を見つけることを支持すると言った」とも述べている。

https://openai.com/blog/openai-elon-musk

## XのPOSTまとめ

https://twitter.com/antonosika/status/1770034196326609046

https://twitter.com/cstanley/status/1769772630649745580

https://twitter.com/cb_doge/status/1769450660649480219


## 最後に

2024年3月17日、Grokはオープンソース化された。ああ、一昨日のことだ。これについては、イーロン・マスクとサム・アルトマンの確執がよく話題になるが、Grokについて意外と衝撃はあるかもしれない。これまで、オープンな言語モデルとしてMistral,Llamaなど知られていたが、上記のXのPOSTを見てもわかるようにオープンソースで一番性能がよさそう。パラメータ数がchatgpt3より大きく、chargpt4より小さいという。このレベルがオープンソースとして扱えることは、AIが及ぼす社会への影響は計り知れない。
ChatGPTが初めにリリースされてからここ数年、次々とAIの進化でニュースを賑わせているが、最近はClaud AI Opus 3,このオープンソースのGrokなど数段階レベルが上がっている気がする。AIに関してこ10年が一番面白いかもしれない。
Pythonで競艇のデータ分析をする

## 前段
下記のリンクで、データ分析に必要なデータを集めるとこから始めている。とりあえず、1年分集めてみた。30分弱くらいかかった。。
https://qiita.com/Carl_Jonson/items/68b744da4219197e29a5

## 準備
Pythonのデータ分析といえば、pandas。標準のライブラリじゃないので、事前にインストールをしておく必要あり。
```
pip install pandas
```

## 読み取るとこのコードを書く
別途記事書いたデータ収集方法だと、いびつなcsvになっちゃう模様。いろいろ対策入れつつ、pandasで読み出せるようにする。
```python
import pandas as pd

# テーブル化する情報を格納する配列を用意する、一緒にヘッダだけ入れる、たまにいびつだって怒られるので、予備で1行多く読み取っとく
maindat = [["nIndex", "場所", "日付", "題名", "第", "何日目", "空白列", "年月日", "dammy"]]
racedat = [["ParentnIndex", "rIndex", "空白列", "レース番号", "レース名", "距離", "天気", "風", "風向", "風速", "波", "波の高さ", "進入固定フラグ", "決まり手", "dammy"]]
playdat = [["ParentrIndex", "空白列", "着順", "艇", "登録番号", "指名", "モーター", "ボート", "展示タイム", "進入", "スタート", "タイム", "dammy"]]
oddsdat = [["ParentrIndex", "空白列", "賭け式", "的中番号", "配当", "人気", "人気順", "dammy"]]

# ファイル名を定義
export_maindat = "main.csv"
export_racedat = "race.csv"
export_playdat = "play.csv"
export_oddsdat = "odds.csv"

# pandasで、前回作った4つのデータを読みとる(namesで列を与えてやらんと、いびつで読み取れない、あとsjisになってたのでエンコードも指定、そしてnamesで指定した分の行を飛ばす)
df_main = pd.read_csv(export_maindat, names = maindat[0], encoding='shift_jis', skiprows=1)
df_race = pd.read_csv(export_racedat, names = racedat[0], encoding='shift_jis', skiprows=1)
df_play = pd.read_csv(export_playdat, names = playdat[0], encoding='shift_jis', skiprows=1)
df_odds = pd.read_csv(export_oddsdat, names = oddsdat[0], encoding='shift_jis', skiprows=1)
```

## イン逃げ率の確認
競艇はそのレース特性上、一番内側にいる艇が最も有利。なので一番内側の場所を取れる1号艇に基本的に人気が集まる。じゃあ、どれくらいイン逃げ率は高いのか？を調べてみる。
```python
# イン逃げ率を算出する

# とりあえず、元データ壊さないようにコピー
df = df_play

# 着順が01のもののみにフィルタ
df = df.query('着順 == "01"')

# 適当な変数にnを入れておく
zentaisuu = len(df)

# 進入が01のもののみにフィルタ
df = df.query('進入 == "1"')

# 適当な変数にnを入れておく
innige = len(df)

# 計算する
print(innige / zentaisuu)
```
結果、54%だった。なので、一番インに陣取る艇へ賭け続ければ、半分以上は勝てる計算になる。


## 現実逃避
全然話が変わる。データといえば正規化されたデータベース、データベースからデータ取り出すのはSQLと、当たり前のように思っていた。いまさらpandasのお作法を覚えるの面倒くせぇぇぇぇ。
続きは、ネタを思いついたり、やる気が出たら書きます。。
【スクラム】各種イベントのタイムボックス

スクラムではいくつかイベントがありますが、各イベントにかけていい時間（＝タイムボックス）が決まっています。
チームの状態などによって多少アレンジしても良いかと思いますが、目安にしてください。

# スプリントのタイムボックスごとの各イベントのタイムボックス
スプリントのタイムボックス（スプリントの期間）ごとに各イベントのタイムボックスをまとめます。
基本は1週間スプリントのタイムボックスを基準に、スプリント期間分の倍数を掛けるだけで算出できます。（デイリーだけは固定）

| イベント | 1週間 | 2週間 | 3週間 | 4週間 | スプリント全体における割合 |
|:-:|:-:|:-:|:-:|:-:|:-:|
| プランニング | 2時間 | 4時間 | 6時間 | 8時間 | 5% |
| デイリー | 15分 | 15分 | 15分 | 15分 | 3.125% |
| レビュー | 1時間 | 2時間 | 3時間 | 4時間 | 2.5% |
| レトロ | 45分 | 1時間30分 | 2時間15分 | 3時間 | 1.875% |
| リファインメント | 2〜4時間 | 4〜8時間 | 6〜12時間 | 8〜16時間 | 5〜10% |

計算すると、イベントにかけていい時間はスプリント全体の17.5〜22.5%ということになります。

# 所感 ※スクラムの実務経験がない個人の私見です
開発チームの人数によらずタイムボックスは上記の通りが目安とされますが、スクラムガイドにも「最大8時間」「4時間まで」といった記述になっているので、上記時間以内であればチームによってアレンジして良いと思います。

開発チームの人数が増えるとその分（線形比例ではないが）インクリメントもコミュニケーションコストも増えるので、イベントは長めに必要な気はします。
Scrape PrizePicks Sports Betting Props | prizepicks api

Scrape-Prizepicks-sports-betting-props-with-Actowiz-Solutions..jpg
Do you want to aggregate all props on Prizepicks into a readable CSV file?

Prizepicks offers more than 250 daily props in different category sports. Here, we will scrape the Prizepicks website using Python and Selenium and then store all the props in an organized document.

Modules Needed
1. Selenium: Selenium is a Python library that helps in task automation and works as a script on the website. Here, we are using Selenium to extract data from

2. Panda: It helps in organizing all the extracted data and then converting it into a CSV file.

3. Web Driver: Here, we are using ChromeDriver for Google Chrome.

How to Install?
How-to-Install.jpg How-to-Install-2.jpg
For this program to run, you will need Python 3. Download it from here:

After downloading, you will require an IDE to run and edit the code. Here, we are using Pycharm for this project.

Next, download Selenium using pip. On Windows, open cmd and then paste this code.

After the installation, the next step is to download the web driver for Selenium to automate the process. We are using ChromeDriver here. Download the correct version. You can check the version using Settings>>About Chrome.

Start with Coding Program
Start-with-Coding-Program.jpg Start-with-Coding-Program-2.jpg Start-with-Coding-Program-3.jpg Start-with-Coding-Program-4.jpg Start-with-Coding-Program-5.jpg Start-with-Coding-Program-6.jpg Start-with-Coding-Program-7.jpg Start-with-Coding-Program-8.jpg Start-with-Coding-Program-9.jpg
First, import all the necessary packages you require for this project.

The next step is to find the path of the web driver. ChromeDriver. Define it as a variable. Let’s start with PrizePicks scraping.

Now, define Selenium about what website you need to scrape.

On arriving on the website, try to remove all instruction pop-ups.

Now, we will generate a table for Sele3nium and notify it which sports we want to scrape. Here, we will scrape NBA props.

We are now starting the automated scraping procedure. This program will first go through the categories, save the props onto the ppPlayers table, and then repeat the same until all categories are over.

Now, convert the above ppTable into a pandas data frame and export it to CSV file format for more readability. To specify the location of your saved file, add a PATH for the CSV file.

You are all done. Run the Python file and wait for the result.

CTA: For more information, contact Actowiz Solutions now! You can also reach us for all your mobile app scraping and web scraping services requirements.

sources >> https://www.actowizsolutions.com/scrape-sports-betting-props-from-prizepicks.php
配列の要素を持つ配列オブジェクトを要素のみの配列オブジェクトに変換する

- data1.jsonをdata2.jsonにしたい
```data1.json
[
  { "name": "a", 
    "id": 1,
    "status": 
      [
        { "type": "b1", "code": "b2" },
        { "type": "c1", "code": "c2" }
      ]
  },
  { "name": "d",
    "id": 4,
    "status":
    [
      { "type": "e1", "code": "e2" },
      { "type": "f1", "code": "f2" }
    ]
  }
]
```
```data2.json
[
  { "name": "a",
    "id": 1,
    "type": "b1",
    "code": "b2"
  },
  { "name": "a",
    "id": 1,
    "type": "c1",
    "code": "c2"
  },
  { "name": "d",
    "id": 4,
    "type": "e1",
    "code": "e2"
  },
  { "name": "d",
    "id": 4,
    "type": "f1",
    "code": "f2"
  }
]
```
- forEach関数を２重で回して、用意した空の配列に入れる
```js
const data = "data1.json"
const formatData = computed(() => {
  const returnData: any[] = []
  data.value.results.forEach(d => {
    d.status?.forEach(dd => {
     returnData.push({
       name: d.name,
       id: d.id,
       type: dd.type,
       code: dd.type,
     })
    })
  })
  return returnData
})
```
上記処理でreturnDataがdata2.jsonになります。
気づいてしまえば簡単だけどちょっと悩んだので記事にしました。
ElixirのCRCパターン

# ElixirのCRCパターン

CRCは、Constructor、Reducer、Converterの頭文字を用いた略語。Bruce Tate 氏が Medium[^1]上でElixirのパイプラインを有効に使う例として紹介。また、Bruce A. Tate, et al.(2023) [^2] でも言及がある。関数型プログラミングでパイプが使えれば同じようなことができるものと思われる。Constructor、Reducer、Converterをパイプでつなぐ。コンストラクタは外部から受け取った形式を、プログラム内部で使いやすい形に変換、Reducerはデータ処理。Converterは外部に便利な形式にするというパターン。多数のReducerの連結に有効。Reducerは受け取るデータの型と受け渡すデータの型が同じで、型を変えない。

Evans[^3] でも、レシーバーと返り値が同じ型である「閉じた操作（_CLOSURE OF OPERATIONS_）」という設計プラクティスに言及がある。CRCパターンと同じことを言っていると思う。Evansは、他の概念に依存しなくてよいこと、凝集度が高まる点、精神的負荷が低いという点を指摘している。

Bruce Tate氏が紹介した例では、パイプラインの最初に42を与え、3つの関数を順に適用する。同じ関数を繰り返し使っている。同じ関数を繰り返し使うことができることもCRCのメリットであることを言っているのだと思う。

```elixir
42 |> add(1) |> add(1) |> add(-1) 
# 43
```

なお、CRCのRのReducerとは、Enum.reduce関数のことではない。一般に、最初の引数の型が返る関数を使うことでCRCパターンが実現できる。

`Enum.reduce(enumerable, acc, fun)`の返り値の型と同じ型を持つ `acc` は、一番目ではなく、二番目の引数である。カリー化後の関数や、引数の順番を変えた別の関数を定義することで、CRCパターンのReducerとして使うことができる。

##### `Enum.reduce`の型定義
```elixir
 @spec reduce(t(), acc(), (element(), acc() -> acc())) :: acc()
```

最初のCと最後のC（Constructorと、Converter）は、CRCパターンの外部から受け取った型（例えばバイナリ型（文字列型）など）をReducerに使いやすい型に変えたり、外部で使いやすい型に戻したりするというだけなので、それほど重要ではない、とおもう。

[^1]: https://redrapids.medium.com/learning-elixir-its-all-reduce-204d05f52ee7
[^2]: https://www.amazon.co.jp/exec/obidos/ASIN/1680508210
[^3]: https://www.amazon.co.jp/exec/obidos/ASIN/B00GRKD6XU
[PowerShell]ファイル内文字列検索、一致数出力スクリプト

こんにちは！れーあです。
今回のPowerShellスクリプトはファイル内特定文字列の検索と一致数をファイルに出力するというものです。

前回同様、課題はChatGPTに出してもらいました。

それではどうぞ。

## 前提情報
<b> スクリプト実行環境 </b>
```
PS C:\Users\user> $PSVersionTable.PSVersion

Major  Minor  Build  Revision
-----  -----  -----  --------
5      1      19041  4046
```

## スクリプト内容
今回のスクリプトは下記です。

<b> 処理内容： </b>
　検索対象文字列を入力して、その文字列が指定フォルダに
 　いくつ存在するか確認する。
　検索結果はファイル名ごとに行を分けてレポートとしてテキスト化する。

 
``` WordSearch_in_Log.ps1
# ログファイル格納フォルダ
$LogDir = "C:\Users\user\Desktop"

# 特定キーワード入力
$keyword = Read-Host "Please Search word"

# 検索結果用変数初期化
$TotalFilesProcessed = 0
$MaxMchCnt = 0
$FileWithMostMatchs = ""

# フォルダ内すべての.logファイル検索
$logFiles = Get-ChildItem -Path $LogDir -Filter "*.log"

foreach ($file in $logFiles) {
	# ファイル全行読み込み
	$lines = Get-Content $file.FullName

	# キーワードが含まれる行カウント
	$MchCnt = ($lines | Where-Object { $_ -match $keyword }).Count

	# レポート情報表示
	Write-Output "File: $($file.Name), Total Lines:$($lines.Count), Match Lines: $MchCnt"
	Add-Content -Path $LogDir\Summary_report.txt -Value "File: $($file.Name), Total Lines:$($lines.Count), Match Lines: $MchCnt"


	# サマリーレポート用の情報更新
	$TotalFilesProcessed++
	if ($MchCnt -gt $MaxMchCnt) {
		$MaxMchCnt = $MchCnt
		$FileWithMostMatchs = $file.Name
	}
}

# サマリレポート表示
Write-Output "Total Files Processed: $TotalFilesProcessed"
if ($FileWithMostMatchs -ne "") {
	Write-Output "File with most Matchs: $FileWithMostMatchs ($MaxMchCnt Matchs)"
	Add-Content -Path $LogDir\Summary_report.txt -Value "File with most Matchs: $FileWithMostMatchs ($MaxMchCnt Matchs)"
} else {
	Write-Output "No Matchs found"
	Add-Content -Path $LogDir\Summary_report.txt -Value "No Matchs found"
}
```
## 気になる箇所
基本的には使用しているコマンドレットはWirte-OutputやIf文などこれまで使用したもので構成されていますが、新出として「foreach文」が登場しています。

「＄file」は「＄logFiles」を配列として、その数だけ処理を繰り返します。
今回「＄logFiles」にはデスクトップ上に存在する.logファイル名がすべて入っています。つまり、「＄file」には配列上1つずつ.logファイル名入ることになります。

## 実際に動かしてみた
まず実行する前に、デスクトップ上に検証用として、
「test1.log」、「test2.log」、「test3.log」を作成します。
ファイルの内容は下記の通りです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2632150/523d4a36-aa22-b34c-ce49-b9f1d6a21c8f.png)
<br>

上記3ファイル中の「Error」という文字列を検索してみようと思います。
では、デスクトップ上から実際に実行してみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2632150/f3715206-c9d8-cbff-7403-b23f26136bde.png)
<br>

実行すると、検索文字列を聞かれますので、今回は「Error」と入力してエンターキーを押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2632150/af858548-e949-3319-a5ae-cfcfac143511.png)
<br>

実行した結果、デスクトップ上に「Summary_report.txt」が作成され、検索結果がファイル内容として記載されました。
「Error」という文字列が一番多かったのは、「test2.log」だったようです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2632150/1317b003-750a-e221-8d0d-814e5f382756.png)
<br>

## おわりに
ということで今回はファイルの文字列検索および一致した数をファイルに出力するスクリプトを作成しました。
「ファイル出力する」という動作をしていますが、編集すれば、特定の文字列を持つファイルに特定の同じ処理を実行するという風にできるため、処理としては簡単でも内容的にはいい勉強になりました。


## 参考
https://learn.microsoft.com/ja-jp/powershell/module/microsoft.powershell.core/about/about_foreach?view=powershell-5.1
JavaScriptからFlaskへのデータ送信ーajax通信400エラー

## 初めに
Flaskを用いて開発を行っており、JSからFlask側にajaxを使って情報を送ろうとした。
コードは下記通り
```
var fData = new FormData();
        fData.append(Data1, data1);
        fData.append(Data2, data2);
        fData = Object.fromEntries(fData.entries())
        $.ajax({
            url : 'URL',
            type : 'POST',
            data : JSON.stringify(fData),
            dataType : "json",
            processData : false,
            contentType : "application/json",
            async : false,
          })
        
```

app.py側はrequest.jsonで受け取る(一応)
```
data1 = request.json['Data1']
data2 = request.json['Data2']
```
とりあえずFromの形を作って、そこに情報を入れていき
Json形式でFlask側に送ってみた

## 問題
いくら改善しても400エラーが消えない…
400エラー：クライアントから送信されたリクエストに、何らかの原因で処理が完了できなかった状態

## 原因
CSRFへの対策のためにflask-WTFを使用していた為。
AjaxのPOSTリクエストにCSRFトークンを含める必要があるみたい。

## 解決方法
```
<meta name="csrf-token" content="{{ csrf_token() }}">".
```
上記タグをJSに挿入することで解決した。

## 参考元リンク
[Flask and Ajax Post HTTP 400 Bad Request Error](https://stackoverflow.com/questions/22854749/flask-and-ajax-post-http-400-bad-request-error)
【AWS】 リザーブドインスタンスの対象サービスを全部言えますか？

[公式ドキュメント](https://docs.aws.amazon.com/ja_jp/awsaccountbilling/latest/aboutv2/consolidatedbilling-other.html)を読んでいて、他にもあるんじゃないか？と思い、調査およびリスト化をしました。[1]
以下の AWS サービスを長期間にわたって安定して使用する場合は、コスト最適化を図るために購入を検討しましょう！

## いきなりまとめ

AWS でリザーブドインスタンスを提供しているサービスは 11 個ありました。（私調べ）
漏れや間違いがあったら教えてください。訂正します。

| リザーブドの種類       | AWS サービス                                              | 
| ---------------------- | --------------------------------------------------------- | 
| リザーブドインスタンス | EC2, RDS, OpenSearch Service                                | 
| リザーブドノード       | ElastiCache, Redshift, MemoryDB                             | 
| リザーブドキャパシティ | DynamoDB, CodeBuild, CloudFront | 
| その他   | Elemental MediaLive                                       | 

## 各サービスの公式ドキュメントへのリンク一覧

### リザーブドインスタンス
- EC2：[Reserved Instances](https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/ec2-reserved-instances.html)
- RDS：[Amazon RDS 向けリザーブド DB インスタンス](https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/USER_WorkingWithReservedDBInstances.html)
- OpenSearch Service：[Amazon OpenSearch Service のリザーブドインスタンス](https://docs.aws.amazon.com/ja_jp/opensearch-service/latest/developerguide/ri.html)


### リザーブドノード
- ElastiCache：[ElastiCache のリザーブドノード](https://docs.aws.amazon.com/ja_jp/AmazonElastiCache/latest/red-ug/CacheNodes.Reserved.html)
- Redshift：[Amazon Redshift リザーブドノードの購入](https://docs.aws.amazon.com/ja_jp/redshift/latest/mgmt/purchase-reserved-node-instance.html)
- MemoryDB：[MemoryDB のリザーブドノード](https://docs.aws.amazon.com/ja_jp/memorydb/latest/devguide/nodes.reservednodes.html)


### リザーブドキャパシティ

- DynamoDB：[読み取り/書き込みキャパシティモード](https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/HowItWorks.ReadWriteCapacityMode.html#HowItWorks.ProvisionedThroughput.Manual)
- CodeBuild：[AWS CodeBuild でのリザーブドキャパシティの操作](https://docs.aws.amazon.com/ja_jp/codebuild/latest/userguide/fleets.html)
- CloudFront：[料金 - Amazon CloudFront](https://aws.amazon.com/jp/cloudfront/pricing/)

※CloudFront リザーブドキャパシティは AWS との個別契約が必要です。

### その他
- Elemental MediaLive：[AWS Elemental MediaLive での予約処理](https://docs.aws.amazon.com/ja_jp/medialive/latest/ug/reservations.html)

このサービスを知っている方は多くないのでは？(私は知りませんでした)　サービス説明を[公式ドキュメント](https://docs.aws.amazon.com/ja_jp/medialive/latest/ug/what-is.html)から引用します。[2]

> AWS Elemental MediaLive はリアルタイムの動画サービスで、ブロードキャストおよびストリーミング配信用のライブ出力を簡単に作成できます。
>MediaLive ライブビデオコンテンツをある形式やパッケージから他の形式やパッケージに変換するために使用します。

- CloudFront ：[CloudFront Security Savings Bundle](https://docs.aws.amazon.com/ja_jp/AmazonCloudFront/latest/DeveloperGuide/savings-bundle.html)

リザーブドキャパシティとは別の様です。

## 関連事項

リザーブドインスタンス以外に Savings Plans でもコスト最適化が可能なので対象サービスを調査したところ、以下の 4 サービスのみでした。[3]

- Amazon EC2
- AWS Fargate
- AWS Lambda
- Amazon SageMaker


## 参考資料

[1] [特定のサービスの請求例 - AWS 請求](https://docs.aws.amazon.com/ja_jp/awsaccountbilling/latest/aboutv2/consolidatedbilling-other.html)
[2] [AWS Elemental MediaLive とは? - MediaLive](https://docs.aws.amazon.com/ja_jp/medialive/latest/ug/what-is.html)
[3] [サポート対象の サービスでの動作 - Savings Plans](https://docs.aws.amazon.com/ja_jp/savingsplans/latest/userguide/sp-services.html)
flutter_flavorizrとhome_widgetを併用した際の注意点

備忘録。

iOSのホームウィジェットがあるアプリケーションにflutter_flavorizrを適用すると多くのエラーが発生する。

# Flutter.h not found
https://github.com/AngeloAvv/flutter_flavorizr/issues/197
このIssueの通りで解決する。
具体的にはExtension（ウィジェット側）のBuildSettingsでRunner側の```Runner/Runner-Bridging-Header.h```を読もうとしているのが原因。
ウィジェットからしたら「Flutterねぇよ。」ということらしい。

# その他
flavorizrでExtensionを含むXcodeの多くの設定が書き換わっていることが問題なので、Extensionはバックアップしてもう一度作り直すと解決したりする。

### Signing & Capabilitiesの設定も要確認。

#### Bundle Identifierの設定を間違えないようにする。
例えば、
```com.example.app```、```com.example.app.dev```、```com.example.app.stg```がある場合、
ウィジェットのIdentifierは
```com.example.app.WidgetName```、```com.example.app.dev.WidgetName```、```com.example.app.stg.WidgetName```とする。
間違っても```com.example.app.WidgetName.dev```としないこと。

#### AppGroupは全てのConfigureでそれぞれ適用させる。
うっかり何か抜けていたりするとウィジェットが更新できなくて混乱するので注意。

今回の範囲ではplistやDerivedDataをいじる必要はほとんどなかった。
【kintone プラグイン】Hoku System 文字列検索コンテナ プラグイン

2024-04-15 使用しているプラグイン名を「どこどこ検索コンテナ」から「文字列検索コンテナ」に変更いたしました。
# はじめに

**文字列検索プラグイン**は、kintoneの一覧画面で、検索対象のフィールド名がわからなくても、アプリ内に登録されている文字列の検索を可能にするプラグインです。

**<font color="Green">画面起動時のAPI発行数ゼロ、一覧名が「（すべて）」の場合にもAPI発行数ゼロ発行ですのでAPI発行数が気になるユーザにはもってこいです！</font>**


:::note
検索対象フィールド：文字列一行、複数行、リッチテキスト
:::

**プラグイン 公式HP**
・[Hoku System 文字列検索コンテナ プラグイン](https://hoku-system.stores.jp/items/65d423e1e6c05c016b1cdea0)
・[Hoku System 文字列検索コンテナ プラグイン【体験版・無料】](https://hoku-system.stores.jp/items/65d6b73aa2eab20200c6ab2f)

# 本体 操作方法
すごい簡単！

**◆キーワードを入力して検索ボタンを押すだけ**
![Hoku System 文字列検索コンテナ プラグイン 文字列検索コンテナ](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3744766/4853d609-a936-bdec-2483-864d62621dc3.png)
一覧画面に検索コンテナが自動で表示される。
アプリ内の "文字列入力系のフィールド" が自動で検出される。

**◆検索対象のフィールドを自動でピックアップし表示**
![Hoku System 文字列検索コンテナ プラグイン フィールド名表示](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3744766/c690356c-1c54-920f-5999-093dbf62dcd0.png)
絞り込みの対象のフィールドが表示されているが、検索に含めたくないフィールドはクリックで選択設定＆解除できる。

**◆フィールド名の表示を非表示に**
![Hoku System 文字列検索コンテナ プラグイン フィールド名非表示](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3744766/b5392477-6640-d890-98ea-aac646059811.png)
フィールド名がお邪魔な時はフィールド選択エリアを閉じておくことができる。


# 設定方法
**◆設定画面 例**
![Hoku System 文字列検索コンテナプラグイン 設定画面 ](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3744766/4f71eef0-afaa-e64f-4b04-26d25f8eb582.png)



検索コンテナを使いたい一覧名をチェックして保存ボタンを押したら完了！

# 文字列検索 プラグインのまとめ
**機能**
・ kintone の一覧画面で、レコードを簡単に検索する事ができる。
・一覧画面に、検索コンテナが表示され、検索対象のフィールド名が表示される。
・検索コンテナは、一覧毎に表示・非表示を切り替える事が出来る。
・一覧の絞り込み条件を含めて検索が行われる。
**魅力**
・文字列の入力の可能性があるフィールドを自動でピックアップするので、どのフィールドに入力されているものかを意識しなくても検索できる。
・kintone の標準機能にある「絞り込み」と同じしくみで動作する。（検索結果の表示もkintoneの標準の絞り込み時と同じになる）
・画面起動時はもちろんの事、一覧名が「（すべて）」の時の文字列検索にはAPIが一回も使用されないので **<font color="Green">大人数で使用してもAPI発行数を気にする必要がない。</font>**

# さいごに
kintoneはくせがありますが、使い慣れると便利だと思います。
標準機能でできない事・煩わしい事はカスタマイズやプラグインでどうにかなる事が多々あります。

https://hoku-system.stores.jp/

皆様の毎日作業がよりスムーズに行われるよう願っています。
UnityのためのC#学習ノート

Unityでスクリプトを使うためにC#の学習をしてみることにしました

使用する教材はこちら
youtube　C#入門】Unityゲーム開発初心者のためのC#超基礎講座【ゲーム開発】
https://youtu.be/ONW2mg_n6Xw

そのほかにも同時進行でマイクロソフトの公式チュートリアルを学習中です
https://learn.microsoft.com/ja-jp/dotnet/csharp/

環境
win11
VSCode + gcc

現状

Java
JavaScript
Python
HTML5
CSS
などを基本的なことをかじっただけです
あとマークダウンの書き方も学ばないといけませんね:sweat_smile:
JavaのReservedCodeCacheSizeの最大値

# はじめに
Javaのコードキャッシュサイズは起動オプション -XX:ReservedCodeCacheSize で指定できる。
これの最大値は以下のドキュメントでは 2GB とある。
https://docs.oracle.com/javase/jp/8/docs/technotes/tools/unix/java.html

この値はマシンスペックや他のオプションによる影響を受けないのかソースコードで調べてみた。
結論から言うと 2GB 固定である。
以下の実機確認、ソースコードはJava11のもの。

# 実機確認
2GB(2048MB) を超えるとエラーになることがわかる。
```
lemon >> java -XX:ReservedCodeCacheSize=2048m hello
Hello, world.
lemon >> java -XX:ReservedCodeCacheSize=2049m hello
Invalid ReservedCodeCacheSize=2049M. Must be at most 2048M.
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.
```

# ソースコード
実機確認で出たメッセージから検索してみると以下で出していることがわかる。

```cpp:share/compiler/compilerDefinitions.cpp
bool CompilerConfig::check_args_consistency(bool status) {
  // Check lower bounds of the code cache
  // Template Interpreter code is approximately 3X larger in debug builds.
  uint min_code_cache_size = CodeCacheMinimumUseSpace DEBUG_ONLY(* 3);
.....
  } else if (ReservedCodeCacheSize > CODE_CACHE_SIZE_LIMIT) {
    // Code cache size larger than CODE_CACHE_SIZE_LIMIT is not supported.
    jio_fprintf(defaultStream::error_stream(),
                "Invalid ReservedCodeCacheSize=%dM. Must be at most %uM.\n", ReservedCodeCacheSize/M,
                CODE_CACHE_SIZE_LIMIT/M);
    status = false;
```

ReservedCodeCacheSize が CODE_CACHE_SIZE_LIMIT より大きい場合に本メッセージを出している。
CODE_CACHE_SIZE_LIMIT は以下で定義されている。
```java:share/utilities/globalDefinitions.hpp
// The maximum size of the code cache.  Can be overridden by targets.
#define CODE_CACHE_SIZE_LIMIT (2*G)
```
2Gで決め打ちされているのでマシンスペックや他のオプションによる影響を受けないことがわかる。
AWS勉強備忘録12 - スナップショット、AutoScaling

## スナップショットについて
AWSにおけるスナップショットは、EBSボリューム（Elastic Block Store）のデータを特定時点で保存するための完全なコピーです。

### 用途
データバックアップ、災害復旧、ボリュームの複製作成、アプリケーションのクローン作成など。

### 差分バックアップについて
初めてスナップショットを取る際はボリュームの全データが保存されます。2度目以降のスナップショットでは、前回のスナップショット以降に変更された部分（差分）のみが保存されます。もし最初のスナップショットを削除しても、2度目以降のスナップショットが利用不可能になることはありません。AWSは差分データの連鎖を管理し、任意のスナップショットから完全なデータを復元できるようにしています。これにより、ストレージの効率が良くなります。

### スナップショットの使い方
AWSマネジメントコンソールから、対象のEBSボリュームを選択しスナップショットを作成します。このスナップショットから新しいEBSボリュームを作成すると、新しいボリュームはスナップショット時点のデータのコピーになります。

### AMIの作成
スナップショットからAMI（Amazon Machine Image）を作成することで、そのAMIを使用して新しいEC2インスタンスを起動できます。AMIを作成した後は、新しいインスタンスの起動に使用したり、同じ設定やアプリケーションを持つインスタンスのクローニングに使ったりすることができます。

### スナップショットの自動化
AWSのデータサイクルマネージャを使用すると、スナップショットの作成と削除を自動化できます。これにより、定期的なバックアップや古いスナップショットの自動削除を簡単に設定できます。

### メリットとデメリット
- **メリット**: データ保護、災害復旧の簡易化、データやシステムのクローニングが容易。
- **デメリット**: スナップショットの取得中はI/Oパフォーマンスが若干低下する可能性がある。また、保存されるデータ量が増えるほどコストが増加する。

### スナップショットの保存先
- スナップショットはAmazon S3に保存されますが、これはAWSが自動的に管理するため、ユーザーが直接アクセスすることはありません。
- スナップショットはEBSボリュームのデータのバックアップであり、EC2インスタンスのブロックストレージの複製と考えることができます。これはS3内のオブジェクトデータの複製ではなく、EBSボリュームの内容を時点で固定したコピーとしてS3に保存されます。これにより、EBSボリュームの完全な状態を保持し、必要に応じてその時点の状態に復元することが可能です。
- S3はスナップショットの保存場所として利用されますが、通常のアプリケーションユーザーからは見えないようになっており、AWSのバックエンドで自動的に管理されます。
- AWSを使用しているユーザ個々人のDBに登録されているデータを複製するというわけではなく、EC2内のソフトウェアやOSを複製しておくということです

## AutoScalingについて

AutoScalingは、負荷の変動に応じて自動的にEC2インスタンスの数を調整するAWSのサービスです。このサービスの目的は、アプリケーションの需要が増加した際に迅速に計算リソースを増やし、需要が減少した際にはリソースを削減してコストを最適化することにあります。

AutoScalingを使用すると、最小限のインスタンス数を保ちつつ、最大限のパフォーマンスを確保することができます。また、AutoScalingは事前に定義された条件（CPU使用率、ネットワークトラフィックなどのメトリクス）に基づいて、自動的にインスタンスを追加または削除します。これにより、アプリケーションの可用性を高めると同時に、不要なインスタンスによるコストの増加を防ぐことができます。

AutoScalingは、ウェブアプリケーション、マイクロサービス、大規模な分散システムなど、様々なタイプのアプリケーションで利用されています。このサービスを活用することで、アプリケーションのスケーリングを自動化し、ユーザー体験の向上とコスト効率の良いインフラストラクチャ管理を実現できます。
ProxmoxのGUI上でノード非表示になってしまう問題（cloudflare access での接続時）


`Proxmox`を`cloudflare access`で外部公開しつつ自分だけアクセスできる状態にしようとしていたところ、ハマった箇所があったので備忘録として残します。

## ProxmoxのGUIにhttpでアクセスできるようにし、cloudflare access でSSL化する。
Qiitaの記事、「[proxmoxのWEB GUIをCloudflareを使って外からアクセスできるようにする](https://qiita.com/honahuku/items/5b7ef71d3b59c4649948)」を途中まで参考にしました。

`cloudflare access`と`Proxmox`の接続設定を完了し、いざアクセスしようとしたところ`Proxmox`のGUIにはログインできるがノードが表示されない問題が生じました。


## ハマった原因
結論として、`cloudflare access` の`アプリケーション`の`バインディングCokieを有効にする`の設定を`ON`にしていたことが原因でした。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3714573/6fa0b6b3-46c0-e07c-0c13-64f2b66bc374.png)

`OFF`にもどすと、無事にノードが表示されるようになりました！
　　

## 参考
<details><summary>私の環境では`/etc/nginx/nginx.conf`についてはこちらのように設定していました。</summary>

```conf:/etc/nginx/nginx.conf
events {
    worker_connections 1024;
}

http {
    server {
        listen 80;
        server_name localhost;

        location / {
            proxy_set_header Host $http_host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_set_header Cookie $http_cookie;
            proxy_pass https://localhost:8006;

            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";

            proxy_redirect off;
        }
    }
}
```
</details>