OmniAICreator/Qiita-1.07M huggingface dataset:
Rocky Linux 9 の PostgeSQL/PostGIS 導入メモ

# 初めに

CentOS 後継ディストーションの候補になる Rocky Linux 9 に PostgreSQL　と PostGIS　をインストールした時のメモです。
すでに別の用途で使っていたものなので、手順に不足があるかもしれません。

# 導入手順

## 環境

```
$ cat  /etc/rocky-release
Rocky Linux release 9.0 (Blue Onyx)
$ cat  /etc/rocky-release-upstream 
Derived from Red Hat Enterprise Linux 9.0
```

## 準備

* お約束のアップデートとEPELの導入

```
$ sudo dnf install updade
$ sudo dnf install epel-release
```

## PostgreSQL

* リポジトリの導入

Redhat 9 系の　PostgreSQL　リポジトリを導入

```
$ dnf install -y 
https://download.postgresql.org/pub/repos/yum/reporpms/EL-9-x86_64/pgdg-redhat-repo-latest.noarch.rpm
```

*　 既存の PostgreSQL の無効化

```
$ sudo dnf -qy module disable postgresql
```

* postgresql 14 の導入

```
$ sudo dnf install postgresql14-server
```

* PostgreSQL データベースの初期化

```
$ sudo /usr/pgsql-14/bin/postgresql-14-setup initdb
```

* PostgreSQL　サーバ起動＆自動起動設定

```
$ sudo systemctl start postgresql-14
$ sudo systemctl enable postgresql-14
```

* PostgreSQL　サーバ起動確認

```
$ systemctl status postgresql-14.service
postgresql-14.service - PostgreSQL 14 database server
     Loaded: loaded (/usr/lib/systemd/system/postgresql-14.service; enabled; vendor preset: disabled)
     Active: active (running) since Mon 2022-10-03 10:41:09 JST; 10s ago
（以下略）
```

この後、必要なユーザの設定、データベースやテーブルを作成して利用

## PostGISの導入

* 必要なライブラリ群のインストール

```
$ dnf --enablerepo=crb install flexiblas-netlib64
$ dnf --enablerepo=crb install libqhull_r
```

* gdalの導入

```
$ dnf install gdal35
```

* PostGISの導入

必要に応じて適切なバージョンを選んでインストール

```
$ dnf install postgis33_14
```

この後、データベース操作にて、PostGIS拡張を読み込んで利用

# 参考

* https://computingforgeeks.com/install-postgresql-14-on-rocky-linux-9/
* https://rockylinux.pkgs.org/9/rockylinux-crb-x86_64/
PostgreSQLのpg_hba.confについて

# 概要
- クライアントの接続認証を設定するファイル
- hbaとは、host-based authentication（ホストベース認証）の略

# ファイルの場所
- $PGDATA（DBクラスタ）直下`$PGDATA/pg_hba.conf`

# フォーマット
- どの接続方法で、どのDBに対して、どのユーザ名を使って、どのIPアドレス（CIDR）から、どの認証方式を利用して接続を許可するのかを指定する
- `接続方法　DB　DBユーザ　IPアドレス（CIDR）　認証方式`
- デフォルトでいくつかの設定されている

## 接続方法
- `local`：Unix ドメインソケットを使用する場合に使用されるもので、Windows 環境の場合は使用しない。
- `host`：TCP/IP を使った接続を行う場合に使用する。 host を指定した場合はSSLまたは非 SSLでの接続を許可する。

## 認証方式
- `trust`：パスワードなしで常に接続を許可
- `reject`：常に接続を拒否
- `password`：パスワード認証。パスワードを平文で認証する
- `md5`：パスワード認証。ハッシュ化されたパスワードで認証する
- `scram-sha-256`：パスワード認証。最も安全とされている

# 認証順序
- 認証の設定は上から1行ずつ順番に判定が行われ、最初に一致した行のみが認証処理に使用される。
- どれも一致しない場合は、接続が拒否される
- 接続時の認証において、ある行の認証が選択されて認証に失敗した場合、それ以降の行は無視される。（それ以降の認証が判定されることはない）つまり接続が拒否される
- デフォルトでは、ローカルホストからの接続しか許可されていないので、リモートから接続できない
- デフォルトの設定をコメントアウトしてから独自の設定を追加することが多い印象


```:pg_hba.conf
# TYPE  DATABASE        USER          ADDRESS               METHOD

# IPv4 local connections:
# host    all             all           127.0.0.1/32          md5
# IPv6 local connections:
# host    all             all           ::1/128               md5
# Allow replication connections from localhost, by a user with the
# replication privilege.
# host    replication     all           127.0.0.1/32          md5
# host    replication     all           ::1/128               md5

host    mydb             postgres       127.0.0.1/32          md5
```
- デフォルトの設定をコメントアウトし、新たな設定を末尾に追加した
```shell:接続が許可される場合
$ psql -U postgres -d mydb
```
- 上記のコマンドでmydb（DB）に、postgres（DBユーザ）で接続する
- コマンド実行後は、パスワード入力待ちとなるため、postgres（DBユーザ）のパスワードを入力する。パスワードに問題がなければmydb（DB）に接続できる
- **※DBユーザのパスワードは、デフォルトでは設定されていない。そのため、パスワード認証が行えない。**
- DBユーザのパスワードは、ユーザ作成時、または後から設定することができる。

```shell:接続が拒否される場合
$ psql -U postgres -d postgres
```
- postgres（DB）についての認証をpg_hba.confに設定していないため、エラーとなり接続が拒否される

# 設定反映
- `$ pg_ctl reload`を指定することで変更内容が反映される
- つまり、再起動ではなく、再読み込み

# その他アクセス制限の設定（postgresql.conf）
- `listen_addresses`パラメータ（**設定の変更には再起動が必要**）
    - サーバー側の接続を受け付けるIPアドレスを設定するパラメータ
    - 接続先のホスト名、またはIPアドレスをカンマ区切りで指定する
    - デフォルトでは、`listen_addresses = localhost`
    - **接続元のアドレスを指定するパラメータではないことに注意。これは、pg_hba.confで設定するもの**
    - `listen_addresses = *`に変更して使用することが多い印象

```:デフォルト
#listen_addresses = 'localhost'
```
- デフォルトでは、クライアントからの接続はローカルホスト宛しか監視しないので、リモートホストからDBサーバのアドレス宛には接続できない
- そのため、以下のように値を変更する
```:変更後
listen_addresses = '*'
```
ワークフロールールのまとめ

[まとめページに戻る](https://qiita.com/Keiji_otsubo/items/60afc2a8d211b6f7d89f)
[まとめN～Z](https://qiita.com/Keiji_otsubo/items/92f92bb9f668ca9688be)


+ [Workflow Rule Examples](https://qiita.com/Keiji_otsubo/items/479da520e66e0616b036)
+ [Migrate to Flowでのエラー](https://qiita.com/Keiji_otsubo/items/57e3a9718952423c4985)
+ [ユーザの参照項目が更新された時に起動するワークフロールールを設定する](https://qiita.com/Keiji_otsubo/items/0d286db8df0b13de2123)
+ [オムニチャネルを通じて割り当てられたレコードは、ワークフロールール、エスカレーションルール、トリガーなどの自動化をトリガーしません](https://qiita.com/Keiji_otsubo/items/63338e1c061405f275fa)
+ [ISCHANGED](https://qiita.com/Keiji_otsubo/items/99de13b6b72314720497)
+ [数式の制限](https://qiita.com/Keiji_otsubo/items/5b327a653b37194904ea)
【GitHub】今さら聞けないGitHubグループアカウント作成方法（組織）

## 概要
GitHubのグループアカウントは無料で作れます。

- GitHubのグループアカウント作成手順をまとめた
- 会社や団体などでグループアカウントを作成してリポジトリを共有したい場合に利用
- 組織アカウント/無料プランの作成

### 前提

- 個人アカウントが既にあること（作成手順は [こちら](https://qiita.com/c_tomioka/items/c27382daafdb1b2aac7b)）

## 手順

#### ❶ GitHubにサインインし、右上の「＋」ボタンから「New Organization」を選択
![スクリーンショット 2022-10-03 10.28.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/557654/e99011dc-8166-359c-9bc4-6b49ca2ef823.png)

#### ❷ 無料プランを選ぶ

左のやつを選択
![スクリーンショット 2022-10-03 10.28.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/557654/66fa9f7c-b5c9-2148-77f9-e3966f6ca505.png)

#### ❸ グループ基本情報を設定
![スクリーンショット 2022-10-03 10.50.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/557654/871f368b-c158-b585-d864-948fa3f7e955.png)

- グループアカウント名（URL、リポジトリのオーナー名などで使用）
- 主要な連絡先（後で変更可能）
- グループアカウントの所属先を選択
  - Personal account（個人アカウント）
  - business or institution（組織・機関/組織名の入力も必要）

#### ❹ 関係者のアカウントを招待
実は、この時点でアカウントは完成しています。

他に招待するアカウントがあれば、ユーザ名/メールアドレスを入力して招待通知を送れます。
誰も招待しなくてもOK。その場合でも、未入力のまま緑のボタンを押しましょう。

![スクリーンショット 2022-10-03 10.50.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/557654/0ca909fc-67f0-0d97-4fa7-db697e9d52b6.png)

#### ❺ 登録完了後のアンケートはテキトーに選んでOK
![スクリーンショット 2022-10-03 10.52.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/557654/9bb675dd-43e3-a5f7-e242-883d4075475d.png)

#### ❻ アカウントが完成

グループアカウント画面が表示されます。必ず右上の「Follow」を押しておきましょう。
![スクリーンショット 2022-10-03 10.53.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/557654/62f33e72-3270-b73d-4857-8b0334a4bf09.png)

グループアカウントのURLは `https://github.com/グループアカウント名` となります

#### グループアカウントをフォローすると
個人アカウントからアクセスできる様になります

設定画面から所属するグループアカウントを管理できます
![スクリーンショット 2022-10-03 10.54.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/557654/df6d16e4-873f-d34f-a3e0-d2076d3b9207.png)

すぐにダッシュボード切り替えができます
![スクリーンショット 2022-10-03 10.57.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/557654/b5b2db9e-0138-fbaf-6a30-1357e5af1c68.png)

あとは、アイコン画像を設定したりと活用しましょう！
【Tkinter】spinboxの使いかた

＜初めに＞
TkinterのGUIを最近よく製作するようになり
オプションを覚えるのが大変なので、今回はspinboxの忘備録を投稿します
誰かのメモ程度に役立てば!(^^)!

```
import tkinter as tk

spinbox = tk.Spinbox(frame_name, from_=0, to=120, increment=10, wrap=True, state="readonly")
```

＊frame_name
spinboxを設置するフレーム名

＊from_
spinboxの最小値

＊to
spinboxの最大値

＊increment
値の間隔

＊wrap
True →spinbox内が最小値の時に、繰り下がりボタンを押すと最大値になる
False →最小値の時に、繰り下がりボタンを押しても何も起きない。

＊state
spinboxに直接入力が出来ないようにする
※ユーザーによっては、明後日の数値を入れられる恐れを回避する

＜最後に＞
spinboxの最低限のオプションをメモしました…！
これ以外にも沢山オプションあるので、気になる方は調べてみて(*'ω'*)ｂ
Mononeについて

#### 1.はじめに
あらゆる場所で**機械**は活躍しています。しかし、機械は不具合を起こすことがあるため、その不具合をいち早く見つけることは重要です。
また機械が不具合を起こした時には、**異常音**(通常時とは異なる異常な音)を発することがあります。
そこで私たちは、機械が発する異常音を監視する**異常音検知ソリューションMonone**を提供しています。

#### 2.異常音を検知するには
異常音の聞き分けは誰にでもできるものではありません。**熟練の人**が耳で聞いて「あれ...?なんか違和感があるな」と感じる事で初めて見つかる異常も多く存在します。

え？異常音を聞き分けるのってそんな難しいの？
と思う人も少なく無いでしょう。確かに、明らかな異常音(音が明らかに大きくなっている等)であれば誰でも異常に気付けるでしょう。しかし、実際の異常音はそのようなものばかりではありません。
機械の異常音を聞き分けるためには、確かな経験と技術が必要なのです。
<img alt="hogehoge" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2704158/13cc9807-a384-b62c-9c63-f4aefc85cde4.png" width="{5%}">


#### 3.異常音検知の課題
では、熟練の人がやるような音の聞き分けは機械でできないのかと。
ぶっちゃけ、熟練の人が聞いて初めて分かるような異常音を機械が見分けることは簡単ではありません。
何が難しいのかというと、それは以下の2点です。

##### ①周辺ノイズ音が入ってしまう
Mononeのメインターゲットは発電所・製造現場などですが、このような場所は**周りがうるさいことが多い**んです。
マイクで音を取ろうにも周辺ノイズ音が多く紛れてしまい、正しい解析の邪魔になります。
じゃあ周波数フィルタで取り除けばいいじゃん！
しかし**どれが対象とする機械の音なのかがわからない**以上、安易に周波数フィルタでノイズ除去するというわけにもいきません。

##### ②異常音がそもそも取れないことが多い
正常音と異常音の判別を行う場合、教師データとしてどちらの音データも存在しているという状況は理想的です。しかし、現実では正常音のデータは取得できるが**異常音のデータが取得できない**ことが多々あります。~~ちなみに、機械を壊せば取得は可能です。~~
ということで、異常音のデータなしでどうにかするしかありません。


#### 4.Mononeの強み
異常音検知の課題は先に述べた通りですが、Mononeはあきらめません！

##### ①接触式マイクによる周辺ノイズ音の除去
周辺ノイズ音をが入るからといって安易に周波数フィルタにかけることは良くない...ならどうすればいいのか？
私たちの答えは接触式マイクです(下写真)。
![マイク単体.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2704158/f953c2d5-28b0-4512-6f2c-ff91bec9ba96.jpeg)
...これだけだとよくわかりませんね。こんな感じで使います。
![モーター接触.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2704158/fe1c6083-b191-587a-5d08-e03fbbef77b1.jpeg)
これがMononeのノイズ除去(物理)です。こうすれば周辺ノイズ音なんてそもそも入りませんよね。
これによってMononeでは機械が発する音のみを捉えることができます。

##### ②正常音のデータのみで作る異常音検知モデル
異常音のデータがないのにどうやって異常音を見分けるのか？
Mononeは、"そもそも異常音というのは**正常ではない音**"ということに着目し、対象の音が**正常音とはどれだけ違うものなのか**を調べることで異常音の判別を行っています。こうすれば異常音のデータがなくても異常音と正常音の判別が可能なんです。これへーって話ですよね。


#### 5.最後に
今後は音や機械学習について記事を投稿していきます!
コメントやリクエストがあればぜひよろしくお願いいたしますー
Laravel9 Missing required parameter for [Route: ○○] [URI: ○○] [Missing parameter: id].が出た時

# Laravl9にてMissing required parameter for [Route: ○○] [URI: ○○] [Missing parameter: id].が出た時

PHPのフレームワークLaravel9を利用していて、検索機能を作成時にエラーが出たので、エラーログをメモする。

```php:serch.blade.php
{!! Form::open(['url' => 'search', 'method' => 'get']) !!}
    <div class="form-floating mb-3"  style="width: 70%; margin: 2rem auto;">
        <input type="text" class="form-control" name="shop_salon_search" id="floatingInput" placeholder="name@example.com">
        <label for="floatingInput">Salon & Shop Search</label>
    </div>
    <div class="professional_search_body">
        <h1>Category</h1>
        <div class="body-list topic">
            <ul>
                @foreach ($kinds as $kind)
                <li><button type="submit" name="shop_salon_category" value="{{ $kind->name }}" class="btn btn-outline-danger">{{ $kind->name }}</button></li>
                @endforeach
            </ul>
        </div>
    </div>
    {!! Form::close() !!}
```
検索時にControllerに'search'という名前でデータを受け渡す。

Controllerで処理したものをsearch_result.blade.phpに渡す。
そこでの処理が以下のコードである。
```php:search.blade.php
@foreach ($posts as $post)
        <div class="topic-center">
        <a href="{{ route('salon_detail', ['id'=>$post->salon_id]) }}">
            <div class="topic-vertical">
                <div class="topic-outer">
                    <div class="topic-detail-top">
                        <img src="{{ asset('picture/salons/'.$post->salon_logo) }}" width="60%" alt="No image">
                        <div class="topic-detail-list">
                            @foreach ($post->categories as $category)
                            <p class="topic-detail-list-p-shop shop_list">{{ $category->name }}</p>
                            @endforeach
                        </div>
                    </div>
                </div>
                <p class="body-p2" style='margin: 1rem; font-size: 18px; font-family: Arial; padding: 0;'>{{ $post->salon_name }}</p>
            </div>
        </a>
        </div>
        <?php
         $count++;
        ?>
        @endforeach
```
ここの受け渡しでエラーがでた。
よくよく確認すると、データベースにないカラムを参照していた。
```php:search_reslut.blade.php
<a href="{{ route('salon_detail', ['id'=>$post->salon_id]) }}">
```
エラーではsalon_detailに渡すsalon_idがないよというエラーだった。データベースに保存していたカラム名はsalon_idではなく、idだったためエラーが出ていた。

つまり
```php:search_result.blade.php
<a href="{{ route('salon_detail', ['id'=>$post->id]) }}">
```
これでエラーがなくなった。
【GitHub】今さら聞けないGitHubアカウント作成方法（個人）

## 概要
- GitHubのアカウント作成手順をまとめた
- 個人アカウント/無料プランの作成

## 手順

#### GitHub にアクセス（`.co.jp` , `.com` どちらでもOK）し、右上の「Sign up（サインアップ）」を選択

ちなみに、どっちでもいい理由が知りたいマニアックな方は [こちらの記事](https://qiita.com/c_tomioka/items/ae330d44cfec9b6a1fca) を
![スクリーンショット 2022-10-03 10.19.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/557654/42ace012-5fc5-ae04-8583-300d08564556.png)

#### ❶ アカウント基本情報を設定
![スクリーンショット 2022-10-03 10.24.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/557654/67fef221-7e5b-4ef6-df69-7551d7767f6d.png)
- ユーザ名：英数字とハイフン（-）のみ使用可能
- パスワード：バリデーションチェックで、他のサイトで使用していることが検知されると使えない模様
- 最後のチェックボックスはメルマガなので不要

#### ❷ 登録したメールアドレスに検証コードが送られてくるので、それを入力する
![スクリーンショット 2022-10-03 10.24.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/557654/b14434b6-56b3-32ae-e0b4-69898fa1561c.png)

![スクリーンショット 2022-10-03 10.25.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/557654/651c82d3-b30c-6c69-b788-04dccf32cd95.png)

#### ❸ 登録完了後のアンケートはテキトーに選んでOK

「チーム規模はどれくらい？」「学生か教師ですか？」とか聞かれるので、適当に選んで Continue
![スクリーンショット 2022-10-03 10.26.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/557654/ce8a3c0b-d71f-1cf0-0572-e1fc2e3e7f7f.png)

下図のアンケートは何も選ばなくてもOK。最下部のボタンを押して進む
![スクリーンショット 2022-10-03 10.26.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/557654/cb1f652b-0834-3714-7f7f-219909ded52c.png)

#### ❹ プランは「無料プラン」を選択

フリープランと書いてある方のボタンをクリック
![スクリーンショット 2022-10-03 10.27.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/557654/662198fb-f109-2b4b-0dfd-95415531ef12.png)

#### ❺ アカウントが完成
![スクリーンショット 2022-10-03 10.27.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/557654/c43bc4c9-ba1c-a5f9-84cf-5ce1afd4a6e7.png)

あとは、自由に使いましょう

## 関連リンク

無料グループアカウントの作成方法

https://qiita.com/c_tomioka/items/a1344a8a0b6d2a507631
順序回路の作法 その8

# 概要
順序回路を理解する。
gtkwaveのvcdファイルを利用するため、調査。

# スクラッチでvcdファイルを書く。(メモ帳で書く)

```
$date
	Sun Oct 02 19:17:51 2022
$end
$version
	ohisama
$end
$timescale
	1s
$end
$scope module u $end
$var wire 1 ! a $end
$var wire 1 " b $end
$var wire 1 # c $end
$var wire 1 $ d $end
$upscope $end
$enddefinitions $end
#0
$dumpvars
0$
0#
x"
x!
$end
#1
1"
0!
1$
#2
0$
#3
1!
0"
1#
#4
0#
#5
```

# gtkwaveで表示。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18104/1553ffed-5cc1-4730-d9eb-366ddb567049.png)


以上。
順序回路の作法 その7

# 概要
順序回路を理解する。
真理値表をプリントする、インタープリタを説明する。

# 文法
コマンドは、make, init, nand, xor, and, or とoutの7個。
コマンドには引数がある。
コマンドと引数はスペース2個で区切る。

# make コマンド
make 3
3個の端子の真理値表を作る。

# init　コマンド
init 0 1
０から１の端子を初期化する。
以下の通り。

0	0
1	0
0	0
0	1
0   0

# nand　コマンド
nand 0 1 2
端子０と端子１の論理積の否を端子２に出力する。

# nor　コマンド
nor 0 1 2
端子０と端子１の論理和の否を端子２に出力する。

# and　コマンド
and 0 1 2
端子０と端子１の論理積を端子２に出力する。

# or　コマンド
or 0 1 2
端子０と端子１の論理和を端子２に出力する。

# xor　コマンド
xor 0 1 2
端子０と端子１の排他的論理和を端子２に出力する。

# out　コマンド
out 2 3
2から３を出力端子に宣言する。

# サンプルコード

```
make 4
in 0 1
nor 0 2 3
nor 1 3 2
out 2 3
```


# 成果物

https://plnkr.co/edit/Ul6n0852hMuVc7d8?preview

以上。
【GitHub】github.co.jpとgithub.comって何が違うの？（アカウント作成時）

## 概要
アカウント作成やサインイン時に「GitHub.co.jp」と「GitHub.com」って何が違うの？って思った人のための備忘録

## GitHub はドメインが複数ある
GitHubというサービスを利用しようとした時、検索結果に２つ出てきます

- github.co.jp
- github.com

![スクリーンショット 2022-10-03 11.02.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/557654/4769565d-2b43-c0d3-899b-94f4cc80822e.png)

**github.co.jp** はこんな画面です
![スクリーンショット 2022-10-03 10.19.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/557654/8ececdac-28a9-9904-2471-061b8facde14.png)

そして、**github.com** はこんな画面です
![スクリーンショット 2022-10-03 10.19.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/557654/db87de5a-d2cb-d963-46b2-5f7177d0b4ca.png)

アカウント作成しようと思った時、「どっちで作ったらいいのか？」と、一瞬戸惑う人もいたのではないでしょうか？

## 結論
どちらを使用しても、結局 **github.com** になります。
だから、気にしなくて大丈夫。👍

![スクリーンショット 2022-10-03 10.24.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/557654/5f36aca9-637a-3658-d1ff-c63aa59b2e39.png)
例：「サインアップ（登録）」をした場合の遷移先画面
settimeoutの引数に関して

setTimeoutの使い方で第三引数以降の意味を理解したのでメモ。
以下のような記述があった時

```
setTimeout(playAudio,500,fileName,divId)
```

1. 第一引数は実行される関数。playAudioが実行される関数
1. 第二引数は指定した時間後に実行する時間。msecで記述する。500msec後にplayAudioを実行する
1. 第三引数以降。playAudioに渡される引数。fileName,divIdが渡される。

誤っていたら指摘ください。
【RaspberryPi】ラズパイイメージをマウントしてみる

[こちら](https://downloads.raspberrypi.org/raspios_lite_armhf/images/) から好きなラズパイイメージをダウンロードします。

```bash
wget https://downloads.raspberrypi.org/raspios_lite_armhf/images/raspios_lite_armhf-2022-04-07/2022-04-04-raspios-bullseye-armhf-lite.img.xz
xz -dfkv 2022-04-04-raspios-bullseye-armhf-lite.img.xz
```


イメージをループバックデバイスに接続します。
ループバックデバイスはファイルをブロックデバイスのように扱うための機能で、イメージファイルをデバイスとして扱うことができます。
※ `/dev/loop4` のようなデバイスファイルにイメージを接続します。


```bash
# 
# https://kazmax.zpp.jp/cmd/l/losetup.8.html
# -f: 使用されていないループバックデバイスを自動選択
# -P: パーティション化されたループバックデバイスを作成
# --show: 設定後にデバイス名を表示 (-f とともに使用)
LODEV=$(losetup --show -f -P 2022-04-04-raspios-bullseye-armhf-lite.img)
echo $LODEV  # /dev/loop4
```


接続したループバックデバイスのパーティションテーブルを確認します。

```bash
fdisk -l $LODEV
```

ラズパイイメージには2つのパーティションが存在しています。
ファイルシステムが `W95 Fat32 (LBA)` (/dev/loop4p1) の方は `/boot` にマウントされるパーティション、 `Linux` (/dev/loop4p2) の方は `/` にマウントされるパーティションとなります。

```
ディスク /dev/loop4: 1.9 GiB, 2017460224 バイト, 3940352 セクタ
単位: セクタ (1 * 512 = 512 バイト)
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
ディスクラベルのタイプ: dos
ディスク識別子: 0x7d5a2870

デバイス     起動 開始位置 最後から  セクタ サイズ Id タイプ
/dev/loop4p1          8192   532479  524288   256M  c W95 FAT32 (LBA)
/dev/loop4p2        532480  3940351 3407872   1.6G 83 Linux
```

2つのパーティションをマウントします。

```bash
# マウントディレクトリ作成
mkdir -p /mnt/raspi/root /mnt/raspi/boot

# /dev/loop4p1 はファイルシステムをvfatに指定してマウント (/boot)
mount -t vfat -o loop ${LODEV}p1 /mnt/raspi/boot

# /dev/loop4p2 はファイルシステムをext4に指定してマウント (/)
mount -t ext4 -o loop ${LODEV}p2 /mnt/raspi/root


# 確認
ls /mnt/raspi/root
```

後片付け

```bash
# アンマウント
umount /mnt/raspi/root /mnt/raspi/boot

# ループバックデバイスを解除
losetup -d $LODEV
```
2022年10月何故かベストアンサーをつけてくれない質問

# トレイルヘッド

+ [The Suggestion custom object does not contain the correct set of custom fields. Tip: check for typos in the field names.](https://trailhead.salesforce.com/ja/trailblazer-community/feed/0D54S00000K0dSn)
+ [hellow please assist with automate the process however this is the error i am getting Unfortunately, there was a problem. Please try again. If the problem continues, get in touch with your administrator with the error ID shown here and any other related d](https://trailhead.salesforce.com/ja/trailblazer-community/feed/0D54S00000Je5GJ)
+ [Challenge not yet complete in data modeling Whoops, looks like there was a problem. Please try again.](https://trailhead.salesforce.com/ja/trailblazer-community/feed/0D54S00000JdhUA)
+ [The ‘Cylinder_Volume__c’ field in the Opportunity object doesn't have a valid formula error on advanced formula module](https://trailhead.salesforce.com/ja/trailblazer-community/feed/0D54S00000K0eXG)
+ [Can not get out of Control access to fields module?](https://trailhead.salesforce.com/ja/trailblazer-community/feed/0D54S00000Je7xe)
+ [オブジェクト ケースを選択してキューを作成することはできません](https://trailhead.salesforce.com/ja/trailblazer-community/feed/0D54S00000JeK7z)
+ [Hi, I got the following error message while trying to "Customize the Home Page" challenge : Ensure that you have selected the correct template. Can anyone please help me? Thanks... Alam](https://trailhead.salesforce.com/ja/trailblazer-community/feed/0D54S00000KevT3)


# 自分にベストアンサーをつける。何で？

+ [Error trying to connect Developer Edition org to Trailhead](https://trailhead.salesforce.com/ja/trailblazer-community/feed/0D54S00000K1LAL)

# 2度運営からマークするように言われているけど頑なに拒否ってるなぁ。　何故？

+ [Mapping](https://trailhead.salesforce.com/ja/trailblazer-community/feed/0D54S00000K1pm4)
sup要素とsub要素真似ぶ。

## subとsup

- sub要素は下付き文字
- sup要素は上付き文字


読み方は、
- sup
    SuperScriptの略語で **「スーパースクリプト」**　サップって呼んでしまいそう。
    ![3268636_s.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2854030/6d50ae9e-e570-6e2e-46e4-71d9dbac8998.jpeg)


- sub
    SubScriptの略語で **「サブスクリプト」**　サブ^^上下関係があるのか。
   ![24148402_s.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2854030/6eb2ca11-dfcd-0aff-8fa7-1dc49e08ff74.jpeg)

主に数式や化学式また特定の言語に使用されるようです。なお、数式のマークアップに適したMathMLという言語がありますが、GoogleChromeなどほとんどのブラウザでは使用できないようです:sweat:

>MDN　
https://developer.mozilla.org/ja/docs/Web/MathML


## subを書いてみた
``` html
<body>
    <ul>
        <li><ruby>H<sub>2</sub>O<rt>おとなの階段昇る</rt></ruby></li>
    </ul>
</body>
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2854030/82e7c08c-9f14-7f8f-0748-08113076f51f.png)


## supを書いてみた
``` html
<body>
    <ul>
        <li><ruby>x<sup>2</sup><rt>エックスニジョウ？ジジョウ？</rt></ruby></li>
    </ul>
</body>
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2854030/fb2ba920-bf62-bf4c-003a-a4e983f4ec08.png)


## おまけ
CSSでも指定できるんですよね～。

- html
``` html
<body>
    <ul>
        <li><ruby>H<span class="example1">2</span>O<rt>エイチ・ツーオー</rt></ruby></u></li>
        <li><ruby>x<span class="example2">2</span><rt>エックスニジョウ？ジジョウ？</rt></ruby></li>
    </ul>
</body>

```

―　CSS
``` css
@charset "Shift_JIS";

span.example1 {
    vertical-align: sub;
}

span.example2 {
    vertical-align: super;
}
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2854030/5a87894a-42a2-fdbb-d82b-307d0ec1e24c.png)
Netlifyでステージング環境へデプロイしたい

Netlify で本番環境とは別のステージング環境へデプロイする時の設定を、忘れないうちにメモとして残します。

## `Deploy contexts` は `Branches` に命名変更したっぽい

軽く検索してみると、 `Deploy contexts` という機能を紹介しているページをいくつか見かけるのですが、Netlify の設定項目を見渡しても、その機能を見つけることができません。

よくよく調べると、どうやら `Branches` という名前に変わっていることがわかりました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221845/bddbeebc-51cd-4e18-8178-74cd8c53b549.png)

## `Let me add individual branches` を選択する

`Branch deploys` という項目が、初期状態だと `None` になっていますが、これを `Let me add individual branches` に変更します。

これは `ブランチを個別に指定する` みたいな意味です。

そうすると、 `Additional branches` という入力欄が現れます。

## `Additional branches` にブランチ名を入力する

`Additional branches` にお好きなブランチ名を入力します。

図では `staging` と入力しています。

これは、 `staging` ブランチが更新されたら、デプロイするという意味です。

## ステージング環境のデプロイ先

本番環境の URL の先頭に `ブランチ名--` を付けたものが、デプロイ先になります。

#### 例:

| 環境             | デプロイ先                                  |
| ---------------- | ------------------------------------------- |
| 本番環境         | `xxxxxx-xxxxxx-xxxxxx.netlify.com`          |
| ステージング環境 | `staging--xxxxxx-xxxxxx-xxxxxx.netlify.com` |

# さいごに

本記事作成にあたり、以下のサイトを参考にさせていただきました。ありがとうございました！

- [netlify docs / Site deploys overview / Branches and deploys](https://docs.netlify.com/site-deploys/overview/?_gl=1%2ayoxsx1%2a_gcl_aw%2aR0NMLjE2NjQ3MTYwOTAuQ2p3S0NBanc3ZVNaQmhCOEVpd0E2MGtDVzVYczg5QWs1Y1oyUXRrV1A3bnd3Wm1XSTZ6STk3LTlUN1NNZ1FQcXMyQTBrU1N1SzBDbzZCb0NGdkVRQXZEX0J3RQ..&_ga=2.228060509.1948384398.1664717753-1144365119.1664717753#branches-and-deploys)
- [Netlify でステージング環境を用意する](https://blog.microcms.io/netlify-deploy-contexts/)
PHPStorm起動後のインデックス作成の制御

## 概要
インデックス作成のバックグラウンドタスクが重い。
インデックス作成対象からディレクトリごとに除外して起動時の動作のもっさり感を解消する。

## 手順
1. 左側のプロジェクトで除外したいディレクトリを右クリック
2. 「ディレクトリをマーク」→「除外」を選択
3. フォルダのアイコンが赤く変更される。

## 効果
再起動後、バックグラウンドタスクで実行されるインデックスの作成にかかる時間が短縮された。(体感で元の4割程度まで減少)

ファイル数が大量に存在するタイプのプロジェクトの場合、すべてのディレクトリに対してインデックスの作成を実行すると起動後の動作が遅すぎるので処理に直接影響しないような部分は除外してしまった方がいいかもしれません。

## 参考
https://pleiades.io/help/phpstorm/indexing.html#exclude
【Ruby】麻雀の点棒を値オブジェクトにしてみた🀄️

## はじめに
この記事は、麻雀大好きな新米エンジニアが見よう見まねで点棒(麻雀における通貨みたいなもの)を値オブジェクトにしてみたという記事です。暇つぶし程度に読んでもらえたら嬉しいです。
まず簡単に「そもそも値オブジェクトって？」という話をしてから、実際に自分が書いてみた麻雀の点棒オブジェクトを紹介したいと思います。
(※ **麻雀への知識がある前提で書かれた記事です**。何もわからないという方は、「値オブジェクトとは」の項目だけ読むことをお勧めします。)
## 値オブジェクトとは
値オブジェクトとは、**値をクラスとして表現する設計パターンのこと**です。
より詳しく言えば、アプリケーションで頻繁に使われる金額や日付、電話番号といった値をクラスとして扱い、**各値の正常性を初期化段階で担保しながら値そのものとその振る舞いをまとめて管理すること**です。

例えば金額を単なるint型の変数として扱った場合、金額用の変数に負の値が入力されてしまったり、「販売数」など別のint型を金額用の変数に加算してしまうといったミスが起こり得ますが、金額を値オブジェクト化することでこのようなミスを防ぐことができます。
また、税込計算メソッドなど値に持たせたい振る舞いを凝集度(*1)高く持つことができます。

上記のように何かと便利な値オブジェクトですが、実装する際には以下の特徴を実装しなくてはならない点に注意が必要です。
- **値が不変である**
- **交換可能**
- **値の等価性によって比較される**
### ※ 参考資料

- 『[アプリケーションサービスの凝集度を高めたい](https://qiita.com/nrslib/items/4ff4e3a3547bbd69f9f9)』(※1 凝集度について)
- 『[良いコード/悪いコードで学ぶ設計入門](https://www.amazon.co.jp/dp/4297127830)』(値オブジェクトについて)
- 『[ドメイン駆動設計入門](https://www.amazon.co.jp/dp/479815072X)』(値オブジェクトについて)

## 点棒オブジェクト
### サンプルコード
```ruby
# frozen_string_literal: true

#
# 点棒
#
class Counter
  include Comparable

  attr_reader :point

  # ゲーム開始時の点棒
  DEFAULT_POINT = 25000
  # 順位点処理として、4位3位2位がそれぞれ1位に対して支払う点棒(オカ)
  OKA_POINT = 5000
  # 順位点処理として、4位が1位に支払う点棒(ウマ)
  UMA_POINT1 = 30000
  # 順位点処理として、3位が2位に支払う点棒(ウマ)
  UMA_POINT2 = 10000

  def initialize(point = DEFAULT_POINT)
    # 最小の点棒が100点なので、100で割り切れない値は不正とする
    raise ArgumentError, '不正な点棒です' if point % 100 != 0

    @point = point
    freeze # 不変にする
  end

  # 値オブジェクトは不変なので、オブジェクトを交換する形で足し算を実装する
  def add(other)
    Counter.new(point + other.point)
  end

  # 引き算も同様
  def subtract(other)
    Counter.new(point - other.point)
  end

  # 値の等価性で比較する
  def <=>(other)
    point <=> other.point
  end

  # 着順に応じて順位点処理を行う
  def add_rank_point(rank)
    case rank
    when 1
      rank_point =  UMA_POINT1 + OKA_POINT * 3
    when 2
      rank_point =  UMA_POINT2 - OKA_POINT
    when 3
      rank_point = -UMA_POINT2 - OKA_POINT
    when 4
      rank_point = -UMA_POINT1 - OKA_POINT
    else
      raise ArgumentError, '不正な着順です'
    end
    Counter.new(point + rank_point)
  end
end
```
### サンプルコード詳細
### `attr_reader`
値を不変としたかったので、setterのみを定義する`attr_reader`で実装しています。
### `initialize`
麻雀の点棒は100の位までしか存在しないので100で割り切れない引数に対してエラーを吐くようにしました。金額オブジェクトなどを実装する際は、同様にinitialize内で負の値に対してバリデーションをかけるといいと思います。
また、不変にするために`freeze`をかけています。
### `<=>`
値の等価性で比較するために記述しています。
この記述がないと同値のオブジェクトであってもfalseと判定されてしまいます。
```ruby
Counter.new(100) == Counter.new(100)
#=> false

# <=>メソッド定義後
Counter.new(100) == Counter.new(100)
#=> true
```

### `add_rank_point`
着順に応じた順位点処理を記述しています。このように値そのものと値の振る舞いをまとめて記述出来ることが値オブジェクトのいい点です。
具体的な内容については特に見なくても大丈夫です。

## **感想**

実務で値オブジェクトを書く機会が今までなく、初めて書いたのですがなかなか面白かったです。もっとこうした方がいいという意見があれば是非コメントお願いします。
足し算と引き算をオブジェクトを受け取るシンプルな形で実装しましたが、麻雀は動く点数が翻数と符によって確定するので引数に翻数、符、供託を受け取って計算した方が点数の正当性は確保できたかもしれません。もし機会があればいつか書いてみます。
**Mリーグも開幕です！麻雀の熱上げていきましょう**🔥
商談と商談商品に関係するバリデーションルールの考察


+ [数式:商談ステージが終了したら、検証ルールで商談プロダクトをロックします](https://help.salesforce.com/s/articleView?id=000326315&type=1)
+ [数式:Validation rule on OpportunityLineItem (opportunity product)](https://salesforce.stackexchange.com/questions/200116/validation-rule-on-opportunitylineitem-opportunity-product)
+ [Apex Validation rule on OpportunityLineItem (opportunity product)](https://developer.salesforce.com/forums/?id=9060G000000MW23QAG)
+ [Can A Validation Rule on the Opportunity Use OpportunityLineItem as Criteria?](https://trailhead.salesforce.com/trailblazer-community/feed/0D54S00000Or3OI)

:::note
An Opportunity Validation Rule cannot refer to an Opportunity Line item because there could be 1 or 1000 Opportunity Line items. The Validation Rule would have no way to determine which record to validate against.

You could mark something on the Opportunity like a checkbox through automation if an Opportunity Line Item with Hardware in its name is added or removed from an Opportunity. You could then have your Validation refer to that Opportunity field.

It looks like you cannot reference the Opportunity Product Name in the Roll-Up criteria, so Flow is the better approach.

 つまたは 1000 の商談品目がある可能性があるため、商談検証ルールは商談品目を参照できません。検証ルールには、検証するレコードを決定する方法がありません。

 名前にハードウェアが含まれる商談品目が商談に追加または削除された場合、自動化によってチェックボックスのようなものを商談にマークできます。次に、検証でその Opportunity フィールドを参照させることができます。

ロールアップ条件で商談商品名を参照できないようです。そのため、フローの方が適切なアプローチです。
:::

+ [Validation rule for products](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V000077Bn3i)

# 非推奨項目？

+ [Validation rule on Opportunity](https://trailhead.salesforce.com/trailblazer-community/feed/0D5KX000000n9RD)

:::note
Just a head's up.  Salesforce recommends that you do NOT use the IsClosed or IsWon checkbox fields in Validation Rules

Tips for Writing Validation Rules 
https://help.salesforce.com/s/articleView?id=platform.fields_validation_rules_tips.htm&type=5
:::
ITインフラのコストを最適化したいのでFinOpsについて調べてみた

# はじめに
- 仕事柄、オンプレミス/クラウドに関わらずITインフラに関わる方々とお話をする機会が多くあります。
- 最近そのような方々のお話を聞いていると、ITインフラのコスト増加が課題となっているケースが多く、中には経営層から現場に対してITコストの改善を求められているといった声も聞こえてきます。
- 色々調べてみると、「**FinOps**（「Finance（財務）」と「DevOps」の造語）」という、主にクラウドコストを最適化するための考え方があることを知りました。
- 本記事では、「ITインフラのコストを最適化したい」シリーズの第一回として、FinOpsについてにまとめてみました。
- ちなみに、本記事は一見ポエミーな記事ですがシリーズの最後に実践編へと続いていくので**実はポエムではないです。（重要）**

# FinOpsとは
## FinOpsの定義：ビジネス価値を最大化するためのクラウド財務管理の規律と文化の実践
- [FinOps Fundationによる定義](https://www.finops.org/introduction/what-is-finops/)の原文はこちら。
    > "FinOps is an evolving cloud financial management discipline and cultural practice that enables organizations to get maximum business value by helping engineering, finance, technology and business teams to collaborate on data-driven spending decisions."
- 日本語に訳すとだいたいこんな感じになると思います。
    > FInOpsは、クラウド財務管理の規律と文化の実践です。エンジニアリング、財務、テクノロジー、ビジネスの各チームがデータ主導の支出決定を行うためのコラボレーションを支援することで組織がビジネス価値を最大化できるようにするものです。

## FinOpsが目指すこと：クラウドコストの説明責任を果たしながらコストを最適化
- FinOpsは、変動するクラウドコストに対して「誰がいつどれだけ使ったのか」「それが妥当なのか」という財務面での説明責任を明確にすることを目指すものです。
- また「品質」「コスト」「納期」のトレードオフを考慮しながら、クラウドコストの最適化を目指します。

## FinOpsの実践：「Inform（可視化）」、「Optimize（最適化）」、「Operate（実行）」3つのフェーズを繰り返す
- FinOpsは以下の3つのフェーズを繰り返すことで継続的に最適化をしていく営みです。
![FinOps Phases](https://www.finops.org/img/framework/phases.svg?5 "FinOps Phases")
引用元：[https://www.finops.org/framework/phases/](https://www.finops.org/framework/phases/)

### 1. Inform（可視化）：クラウドコストとその構造を可視化して理解する
- このフェーズは、主に以下の3つのステップで進めていきます。
    1. コストの割り当て（誰が何をどれくらい使っているか）を正確に把握
    1. 過去のコスト変動や将来の計画などから、今後のコストの変動の傾向を分析
    1. コストの妥当性を数値化してベンチマークを行い、ビジネスの指標と照らし合わせて妥当性を分析

### 2. Optimize（最適化）：最適化余地を探り改善目標を設定する
- 無駄が発生しているITリソースを特定して、無駄に対するコスト削減案と改善目標を検討します。
- コスト削減案は期待効果とリスクの関係性を考慮して複数用意したほうが良いです。

### 3. Operate（実行）：設定した改善目標を達成する打ち手を考えて実行する
- Optmizeフェーズで検討した対策を実行します。

# コスト削減≠コスト最適化
- FinOpsが何のためのものなのかがわかってきたところで、「コスト削減」と「コスト最適化」の違いについて考えてみます。 

### コスト削減
- 「コスト削減」は、文字通りコストが削減されることと捉えてよいと思います。
- つまり、例えば前年度や前月などの基準点からコストが増えているか減っているかにのみ注目するということです。

### コスト最適化
- 一方、「コスト最適化」は、ただコストを減らせばいいというものではないと考えます。
- 例えば、前年度からITインフラのコストが2倍になったとしても、アクティブユーザー数が倍増してシステム規模が2倍以上になっていれば、それは適切な投資と言えます。また、ITインフラのコストを2倍に増やして、サービスの品質と提供スピードが劇的に向上したりシステム運用の工数が激減することで、ビジネス上の競争優位性を獲得して業績を2倍以上に伸ばせたとしたらどうでしょう。
- 単純に、コストが増えているか減っているかではなく、無駄を排除してビジネス価値を最大化する投資を行うのがコスト最適化と言えそうです。

# まとめ
- FinOpsとは、**ビジネス価値を最大化するためのクラウド財務管理の規律と文化の実践**
- FinOpsは「**Inform（可視化）**」、「**Optimize（最適化）**」、「**Operate（実行）**」の3つのフェーズを繰り返す活動で、まずは**可視化**することが必須
- コスト最適化とは、単にコストを削減することではなく、**ビジネス価値を最大化するための支出を最適化**すること

# 次回予告
- FinOpsの最初のフェーズである「可視化」について考えていきます。
- 次回の記事は[こちら](https://qiita.com/seijitanabe/items/eedf0cc7ce7abcd6e5a5)


# 参考リンク
- 非営利団体「FinOps Foundation」によるFinOpsの紹介：[What is FinOps](https://www.finops.org/introduction/what-is-finops/)
- 上記内容を基にFinOpsについてわかりやすく解説してくれている記事：FinOpsの基本と実践（[第一回](https://www.itmedia.co.jp/enterprise/articles/2207/04/news007_2.html)、[第二回](https://www.itmedia.co.jp/enterprise/articles/2207/25/news013.html)、[第三回](https://www.itmedia.co.jp/enterprise/articles/2208/22/news012.html)、[第四回](https://www.itmedia.co.jp/enterprise/articles/2209/12/news009.html)）
ABC271と戦いたかった

# 主題

* **事前に言語環境を整備しよう**
* ぶっつけ本番はやめよう

## 本文

　前回のABC270では、pythonを使用して参加しました。そしてC問題を解いているとき、こう思いました。
　「これC++のほうが書きやすいかもしれん」
　そんなこともあって、今回はC++で参加しようと思い立ったABC271。
　しかし、自宅のPCにはpythonの環境しか入っていませんでした。
　まあ環境を作れば問題ないのですが、入っていないのに気づいたのが**開始30分前**。
　「コンパイルできないな？」ということに気づいて慌ててMinGWをインストールし始めるという大馬鹿行為をかましてしまいました。
　既定のコンパイラをg++ではなくcpp.exeにしてしまうという**致命的プレミ**（デバッカーがうまく働かなくなりました、なんで？）もあり、不完全燃焼のまま私のABC271は終わりを迎えたのでした。
　せめてC問題くらいは解きたかったな。。。

　次回はこうはいきませんよ！
Azure Fundamentals(AZ-900)：クラウドの概念について説明する「従量課金ベースモデル」

Microsoft Learnを用いたMicrosoft Azure Fundamentals(AZ-900)の試験内容をまとめる投稿です。
この投稿ではMicrosoft Learnで学ぶ内容をできるだけ簡潔にまとめております。
Azureの勉強を一から始める方の参考になれば幸いです。

## 今回の学習内容
**◆「従量課金ベースモデル」**
◇対応するMicrosoft Learn ラーニングパス
[Microsoft Azure の基礎: クラウドの概念について説明する](https://learn.microsoft.com/ja-jp/training/paths/microsoft-azure-fundamentals-describe-cloud-concepts/)
◇対応するモジュール
[従量課金ベース モデルについて説明する](https://learn.microsoft.com/ja-jp/training/modules/describe-cloud-compute/6-describe-consumption-based-model)

※前回の投稿は下記から確認できます。
[Azure Fundamentals(AZ-900)：クラウドの概念について説明する「クラウドモデル(実装モデル)」](https://qiita.com/fsd-jume/items/647aacf7147ece299fa1)

## 従量課金ベースモデル
**クラウドサービスは従量課金制となるため、使用するITリソース分だけ支払いを行う**

ITインフラで考慮すべき主な経費は下記の2通り
**◆資本的支出：Capital Expenditure(CAPEX)
資産の購入やメンテナンス費といった設備投資費用**
・例)ハードウェアの購入やネットワークの導入などの構築時に発生する費用

**◆運用費：Operating Expense(OPEX)
時間の経過とともに発生する継続的な費用**
・例)システムの保守作業に発生する費用やクラウドサービスの利用料
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2851723/f8b3467b-1d29-e424-ff76-3a2f2cbb3d24.png)


## 次の学習内容
**可用性と拡張性**

https://qiita.com/fsd-jume/items/3ff16444827addf2cfa2

## 学習内容をまとめたページの一覧

https://qiita.com/fsd-jume/items/e4ec76959adb547ac5e8
WSLを使った機械学習環境構築

# 目的

WSL2を使い機械学習のための環境を構築する．


# WSL2のインストール

最初に「Windowsの機能の有効化または無効化」より，「Linux用Windowsサブシステム」と「仮想マシンプラットフォーム」にチェックを入れる．一旦，再起動．

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189046/a8b1cbed-8cf6-0bf0-52b7-230d08ec69cc.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189046/50bf033d-de13-105f-f958-b5d476b5aa49.png)

Microsoft Storeより，Ubuntuを検索してインストールをクリック．
インストール終了後，起動をクリック．
この時エラーが発生する場合は，表示されているURLにアクセスし，最新版のカーネルをインストールする．

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189046/bc496c84-18bb-d026-c4ee-ac6ca55eae8d.png)

初回起動時は数分時間がかかる．
その後，作成するusernameの入力を求められるため，任意のユーザ名を設定し，次にパスワードの設定を求められるので，パスワードを入力(パスワードは入力しても表示されないので，注意)

# 必要なパッケージとpythonライブラリのインストール

- Python3
- pip3
- pandas
- TensorFlow2
- scikit-learn
- jupyter-notebook
- PyTorch


```
$ sudo su
# apt-get update
# apt-get upgrade
# apt-get install python3-pip
# pip3 install tensorflow
# pip3 install pandas
# pip3 install scikit-learn
# pip3 install notebook
# pip3 install torch
# exit
```
Share CRM Data with Your Partners > Use Site-Specific Sharing


+ [step #5, I do not see "Enable Customer User" in the drop down for my Contact "Jack Rogers". ](https://trailhead.salesforce.com/en/trailblazer-community/feed/0D54S00000K05ZV)


[アカウント オブジェクト レコードに「顧客ユーザーを有効にする」ボタンを追加する方法](https://salesforce.stackexchange.com/questions/200808/how-to-add-enable-customer-user-button-in-account-object-record)

取引先責任者と個人取引先のカスタマー ポータルを有効にするで概説されているように、個人取引先と取引先責任者を顧客ユーザーとして有効にすることができます。表示している取引先が、ビジネス取引先ではなく、個人取引先であることを確認してください。より一般的に言えば、ユーザーは人であり、組織ではありません。
ユーザにカスタムオブジェクトの編集を任せる？

画面からフィールドの追加ができるみたいです。

[Create custom fields with apex](https://salesforce.stackexchange.com/questions/56421/create-custom-fields-with-apex)


技術的な進化として、Salesforce はtooling API を使用してフィールドを非常に簡単に作成できるようにしました...

```
String objectapiname = 'Content_Item__c';//replace with your object name
String fieldapiname = 'Country_Name';//replace with your field name
String fieldlabel = 'Country_Name';//replace with your field label
String fielddescription = 'Country Name';//replace with your field label

HttpRequest requestinside = new HttpRequest();
requestinside.setHeader('Authorization', 'Bearer ' + UserInfo.getSessionID());
requestinside.setHeader('Content-Type', 'application/json');
requestinside.setEndpoint(URL.getSalesforceBaseUrl().toExternalForm()+'/services/data/v41.0/tooling/sobjects/CustomField/');
requestinside.setMethod('POST');
String fieldDef = '{"Metadata" : ';
String metadef = '"type" : "Text","description" : "'+fielddescription+'", "inlineHelpText" : "","precision" : null,"label" : "'+fieldlabel+'","length" : 255,"required" : false'
fieldDef += '{'+metadef+'},';
fieldDef += '"FullName" : "'+objectapiname+'.'+fieldapiname+'__c"}';
system.debug(fieldDef);
requestinside.setBody(fieldDef);
HTTPResponse res = http.send(requestinside);
System.debug(res.getBody());
```

使用例

```
MetadataUtility.generateTextField('Account', 'Type_x__c', 'Text Field created by apex', 'Type (apex)');
```
週休3日で働いてみた感想

一時期話題になった週休3日制度。世間ではどれくらい広まっているのでしょうか？
ふと「働き方改革でもしてみるか」という気持ちになったので、有給を多用して3ヶ月間限定で週休3日で過ごしてみました。
協力してくれたチームメンバーには感謝です。

## 実際のスケジュール

**祝日がない週は水曜に有給を取る**というルールのもとに休みは取っていきました。
実際のスケジュールがこちら↓↓
![有給.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/268830/5c121561-3e24-65ce-fbe9-434113b711b7.jpeg)

改めてみると圧巻の休みの量ですね。
8/15,16はお盆休みで、8/25,26は私用で休みを取りました。

土日以外の休みがない週は、お盆休みも加味すると年間37週(手で数えたので間違っているかもしれません)なので、有給がフルで支給されている場合は隔週での週休3日を通して実現可能です。

## 良かった点
### 自由な時間が増える
1日休みが増えることで、思っていた以上に自由な時間が増えた感が得られました。
この期間は普段出来てなかった勉強をしたり、お買い物に行ったり、ゲームをしたりしていました。

時間的ゆとりが増えたこともあってか、精神的にもゆとりが出たような気がしています。

ご家族がいらっしゃる方は、よりこの良さを感じれるのかもしれません。

### どこでも空いている
平日は、美容系のサロンでもショップでもどこでも空いています。
電車も時間をずらせばかなり空いているので、人混みが嫌いな私でもかなり快適に過ごすことができました。
混んでいないと他のお客さんのこととかをあまり考えなくていいのも良いポイントです。

### 仕事を頑張れる
水曜日に休みをとっていたおかげで、この3ヶ月連勤がかなり少なかったです。
月・木は昨日休みだったから頑張ろう、火・金は明日休みだから頑張ろうと思えるので、普段月-金で働いている時以上に仕事を頑張ろうと思えます。
いくら仕事が好きでも疲れてきたりすると連勤のストレスはかかるものです。
それが減るのはかなり楽だなと感じれました。

## 困った点
### 休みは自分が取りたい時に取るのが一番
最初は「週休3日最高！」というテンションでウキウキして休みをとっていたのですが、徐々に飽きてきて休みに何をするか考えるのが面倒になっていきました。
水曜に休みを取っていたので友人と休みが合うわけでもなく、一人で過ごすことがメインになるため、やることのレパートリーが枯渇します。勉強として仕事とは別のものを作っていると「仕事すれば良くね？」という気分になってくるのであまりお勧めしません。

せっかく定期的に休みを増やしていたので、何か今までやったことないことにチャレンジしてみても良かったなというのが反省です。

ただ、休みは旅行や帰省といった明確な目的がある時に取るのが一番だなと思いました。

### キャッチアップが大変
自分一人だけが週休3日で働いているので、他のチームメンバーのタスクは有給の日も前に進んでいきます。周りが協力してくれてるとはいえ、休んだ日の周りのメンバーのタスク状況を把握して仕事に入っていく作業は少なからず発生し、大変でした。
ペアプロやモブプロで作業が進行する場合は余計にこの課題を感じやすいと思います。

## 最後に
ここまでの頻度で休みは要らないなというのが正直な感想です。
隔週くらいで週3日休みがあるくらいが丁度いいのかなと感じました。

定期的に土日以外に休みがあるメリットは間違いなく感じることがきたので、最近仕事ばかりで生活に余裕が無くなっている方、有給休暇が余りがちな方は是非お試しください。
【Rails】HerokuからSlack APIにアクセスするとSSL_CTX_load_verify_file: system libというエラーが起きる場合の対処法

:::note info
2023-5-2追記
この記事の内容はslack-ruby-client 2.1.0を使うことで解決することを確認しました。
よってheroku-20にダウングレードする必要はありません。
:::

## 発生した問題
ローカルでは問題なく動いていたRailsアプリをHerokuにデプロイすると、Slack APIにアクセスするタイミングで以下のようなエラーが発生しました。

```
ActionView::Template::Error (SSL_CTX_load_verify_file: system lib):
    1: channels = slack_client.channels
```

このエラーが発生した環境は以下のとおりです。

- Ruby 3.1.2
- Rails 7.0.4
- slack-ruby-client 1.1.0
- heroku-22 stack

## 原因

下記のredditにほぼ同じ現象が載っていました。

[Having issues installing Ruby : ruby](https://www.reddit.com/r/ruby/comments/un9rn1/comment/ifqidwl/)

> Hey OP: I'm running into the same `SSL_CTX_load_verify_file: system lib` error using Ruby 3.1.2 and the Slack gem (`1.0.0`). I should also specify I'm seeing the error on Heroku, whereas local certs are loading as expected. Were you able to get this working?
>
> （略）
>
> Turns out, I've mitigated this by downgrading Heroku stack to 20. Stack 22 is built on Ubuntu 22.04, using OpenSSL 3.0.2, which is why I received this error. Thanks for your reply!

上のコメントにもあるとおり、Ruby 3.1.2とheroku-22 stackを使っているとこの問題が起きるようです。

![Screen Shot 2022-10-03 at 9.23.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/7465/a990864d-bdee-fdf9-ea50-2a0bf3b95dad.png)

## 対処法

redditには「heroku-20 stackなら動いた」とあるので、本来はあまり望ましくないですが、この問題が解決するまでheroku-20 stackを使うことにします。

```
heroku stack:set heroku-20 --app your-awesome-app
```

設定変更が終わったら何らかのコミットを行い、再デプロイしてください。
以下の例ではコードを変更せず、空のコミットを作成してherokuにpushしています。

```
git commit --allow-empty -m "downgrade stack"
git push heroku main
```

stackがheroku-20に戻っていれば正常にSlack APIにアクセスできるはずです。

![Screen Shot 2022-10-03 at 9.27.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/7465/f9fc9b80-3955-7e12-76e0-901823464c1d.png)
フローでフィールドを指定する時のエラー


このエラーなんですがね。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/b19d4432-48a3-2478-3e81-4dcb82b90d59.png)

Idを選択できてなかったようです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/b842f9be-ec46-4e78-f5f4-9b52fe494db5.png)

[Add a scheduled path to a flow: Flow: Review Opportunity with Account Owner Path Label: 3](https://trailhead.salesforce.com/en/trailblazer-community/feed/0D54S00000K0Usq)
govcの小ネタ: esxcliを操作する

# はじめに

通常、esxcliを使用してESXiに対し設定を行う場合は、SSH接続が必要です。RLogin等で一発でつなげるとはいえ少し手間です...

一方、[govc](https://github.com/vmware/govmomi/tree/master/govc)を使うとSSH接続無しでesxcliができるようなので試してみました。

# 使ってみる

ローカル環境から**vCenter**へリクエストします。対象のESXiは `-host` で指定します。

```bash
# esxcli system hostname get
$ govc host.esxcli -host 192.168.11.200 system hostname get
DomainName:
FullyQualifiedDomainName:  localhost
HostName:                  localhost

# esxcli vm process list
$ govc host.esxcli -host 192.168.11.200 vm process list
ConfigFile:   /vmfs/volumes/61ed56b7-88b01ccb-fbc7-a8a1597a9811/VMware vCenter Server/VMware vCenter Server.vmx
DisplayName:  VMware vCenter Server
ProcessID:    0
UUID:         56 4d 3b f6 37 9c f7 54-c1 6a 8a 7c e8 1c a7 c9
VMXCartelID:  266372
WorldID:      266373
```

`-host` でESXiを切り替えられるので、複数のESXiに一気に処理を流し込むこともできて便利です。 ~~家のvCenterはホストが1つしかないから検証できないけど~~

ちなみに、対象ESXiのSSHは無効になっていますが、esxcliが使えました。

![ssh_disabled.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/239887/a651c517-fc9b-ac07-234b-7ed5e9e6bb5f.png)

実装を見たところ接続には `RetrieveManagedMethodExecuter` というAPIが使われていて、このリクエストがesxcliの実行コマンドをラップしているようです。
（`internal` パッケージに入っていて、vSphere Web Services APIにも見当たらないので非公開APIでしょうか...？）

https://github.com/vmware/govmomi/blob/master/govc/host/esxcli/executor.go#L47

以上、govcからesxcliを実行する方法の紹介でした。
BrokenなLima VMを復旧する

## 概要

Lima VMを起動しようとしたらエラー。
何度か遭遇したものの、毎回復旧手順を忘れるので備忘録として記録しておきます。

## 現象

```bash
$ limactl start docker
INFO[0000] Using the existing instance "docker"         
FATA[0000] errors inspecting instance: [failed to get Info from "/Users/ogawatti/.lima/docker/ha.sock": Get "http://lima-hostagent/v1/info": dial unix /Users/ogawatti/.lima/docker/ha.sock: connect: connection refused] 
```

改めてステータスを確認、壊れているらしい。

```bash
$ limactl ls
WARN[0000] instance "docker" has errors                  errors="[failed to get Info from \"/Users/ogawatti/.lima/docker/ha.sock\": Get \"http://lima-hostagent/v1/info\": dial unix /Users/ogawatti/.lima/docker/ha.sock: connect: connection refused]"
NAME      STATUS    SSH            ARCH       CPUS    MEMORY    DISK      DIR
docker    Broken    127.0.0.1:0    aarch64    4       8GiB      100GiB    /Users/ogawatti/.lima/docker
```

## 対応

強制オプションでVMを停止する。

```bash
$ limactl stop -f docker
```

----

## 調査

復旧系のコマンドはなさそう。

```bash
$ limactl -h
...
Available Commands:
  completion    Generate the autocompletion script for the specified shell
  copy          Copy files between host and guest
  delete        Delete an instance of Lima.
  edit          Edit an instance of Lima
  factory-reset Factory reset an instance of Lima
  help          Help about any command
  info          Show diagnostic information
  list          List instances of Lima.
  prune         Prune garbage objects
  shell         Execute shell in Lima
  show-ssh      Show the ssh command line
  start         Start an instance of Lima
  stop          Stop an instance
  sudoers       Generate the content of the /etc/sudoers.d/lima file
  validate      Validate YAML files
...
```

マニュアルもない。

```bash
$ man limactl 
No manual entry for limactl
```

この状態だとVM削除もできない。

```bash
$ limactl delete docker
FATA[0000] failed to delete instance "docker": expected status "Stopped", got "Broken"
```

メッセージに従い、状態を停止にしようと試みる。

```bash
$ limactl stop docker
FATA[0000] expected status "Running", got "Broken" (maybe use `limactl stop -f`?) 
```

`-f` オプションがあることを知る(思い出す)。 `delete` にもあった。

```bash
$ limactl stop -h
Stop an instance

Usage:
  limactl stop INSTANCE [flags]

Flags:
  -f, --force   force stop the instance
  -h, --help    help for stop

Global Flags:
      --debug   debug mode
```

強制オプションでVMを停止する。

```bash
$ limactl stop -f docker
INFO[0000] The QEMU process seems already stopped       
INFO[0000] Sending SIGKILL to the host agent process 2910 
ERRO[0000] operation not permitted                      
INFO[0000] Removing *.pid *.sock under "/Users/ogawatti/.lima/docker" 
INFO[0000] Removing "/Users/ogawatti/.lima/docker/ga.sock" 
INFO[0000] Removing "/Users/ogawatti/.lima/docker/ha.pid" 
INFO[0000] Removing "/Users/ogawatti/.lima/docker/ha.sock" 
```

停止状態になる。

```
$ limactl ls
NAME      STATUS     SSH            ARCH       CPUS    MEMORY    DISK      DIR
docker    Stopped    127.0.0.1:0    aarch64    4       8GiB      100GiB    /Users/ogawatti/.lima/docker
```

以降、これまで通りに使える。
主成分分析で次元数/列を縮約する(SPSS Modeler データ加工逆引き7-13)

# 主成分分析で次元数/列を縮約する（PCA）

![スクリーンショット 2022-09-23 10.09.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/6dcb2f83-5a7b-5537-561c-457b1715d6c8.png)

## 1.想定される利用目的

・フィールド（列）が多い場合にいくつかにまとめ解釈しやすくする
・フィールド（列）が多い場合に後続の計算をシンプルにするために縮約する（特徴量抽出）

## 2.サンプルストリームのダウンロード

https://github.com/yoichiro0903n/blue/blob/main/pca.str?raw=true

## 3.サンプルストリームの説明

![スクリーンショット 2022-09-23 10.11.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/057b385b-cfc0-c1ef-c0e6-4f7a79ef0cbc.png)

a.入力するデータは以下の通りです。
![スクリーンショット 2022-09-23 10.14.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/4cf76f66-b9bc-259c-5c17-0865f6f3a9d8.png)

b.[データ型]ノードを編集します。[ロール]を全て[入力]に設定します。
![スクリーンショット 2022-09-23 10.15.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/0d047e14-c61d-f481-9dbe-fa6c82d27853.png)

c.[因子分析]ノードを編集します。[抽出方法]に[主成分分析]を選択します。
![スクリーンショット 2022-09-23 10.16.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/c62ba433-354f-89b3-51c5-0dfdaaaa8920.png)

[エキスパート]タブは以下のように設定します。
![スクリーンショット 2022-09-23 10.17.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/cd58bd7a-d68d-2d22-147d-2eb112b61952.png)

[因子分析]ノードを実行します。

d.[因子分析]モデルナゲットが生成します。[プレビュー]するとフィールドに6つの主成分が追加されています。

![スクリーンショット 2022-09-23 10.20.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/07bd1066-8463-ae77-5ad1-0994916bbce0.png)

モデル解釈は以下の記事を参照してください。

https://qiita.com/416nishimaki/items/8fa72c6b56bd717858ff

#### 注意事項

この手続きでは因子分析ではなく主成分分析を利用しています。

## 4.参考情報

#### 主成分分析による次元削減を扱った記事

https://www.ibm.com/blogs/solutions/jp-ja/modeler-tips-15/

#### SPSS Modeler ノードリファレンス目次

https://qiita.com/416nishimaki/private/503037195081d3323eee

#### SPSS Modeler 逆引きストリーム集（データ加工）

https://qiita.com/416nishimaki/private/4bf813e6cba84b2a1008
自分へのいましめリンク集

# はじめに

これまで出会ってきた記事で「よくわかるなぁ」と思うものの中で、自分への戒め(※1)として、**覚えておきたい、注意しないとな**、と思ったものをまとめてみます。

※1:いましめ
- 前もって注意すること。また、その言葉。
- 用心すること。警戒。


# Qiitaより
- どれもたくさんいいねがついている良記事です(感謝)。
- 自分を戒める、という思いと共に読み返すと、**新たな発見や自分ができていないこと** が見えてくるかもしれません。新人の方はもちろん、キャリアが長いからこそ、「凝り固まった考えを見直す」や「見えていなかったことを再発見する」ことができることがあるかもしれません。


https://qiita.com/shinkai_/items/63986290e987621a1188

https://qiita.com/shinkai_/items/c94791a1c4e0279417af

https://qiita.com/shimajiri/items/20b4679148e5e383c9d6

https://qiita.com/Cocot-RH/items/967ba54f2198789dbd13

https://qiita.com/zamis/items/703bfcea027a70c1cec6

https://qiita.com/sagae_twins_developper/items/399c233ea6b00c8f5734

https://qiita.com/HideBa/items/8c42816ab04c634426ac

https://qiita.com/rf_p/items/2480ad77c856e42b19b3


# 自分がそうなっていないのかを点検

- DXの阻害要因

https://japan.zdnet.com/image/l/storage/35160978/storage/2020/10/15/435933f082343330e7c15cd12106ad3d/1015_abeam_002.jpg

- ダメなベンダー

https://blogs.itmedia.co.jp/itsolutionjuku/2020/02/itsier.html

- 言い訳に「統計」を使わないこと

https://www.orangeitems.com/entry/2021/04/12/122817


# その他①

- 人生で関わってはいけない人

>・愚痴ばかり言う人
>・感情的にキレる人
>・相手の時間を奪う人
>・情報に振り回される人
>・高圧的な態度をとる人
>・意見を否定ばかりする人
>・できない言い訳ばかり探す人
>・自分と他人の境界線がない人
>・人生に関わる決断を押し付けてくる人


- 会議について：アウトプットがでない会議

https://logmi.jp/business/articles/327251

>①目的が明確でない会議
>②事前情報がない会議
>③当事者意識がない会議
>④意見が出ない会議
>⑤アクションで終わらない会議


# その他②

- 自分の中で「これよくわかる」と思う代表は、有名な"Chikirinの日記"です。印象に残っている２つをご紹介。自分がそうなっていないかを要チェックです。

https://chikirin.hatenablog.com/entry/20090101

>01. 年をとればとるほど、若い人をたたきたくなります。気をつけましょう。
>02. 何か詳しくなればなるほど、その分野での新しい動きやアイデアに否定的になります。気をつけましょう。
>03. 何かを得れば得るほど、それを得たのは自分の実力だと思い込みたくなります。気をつけましょう。
>04. 持つものが多くなればなるほど、人は動けなくなってしまいます。気をつけましょう。
>05. うまくいかないことが続けば続くほど、明日もきっと暗いに違いない、と思いたくなります。気をつけましょう。


https://chikirin.hatenablog.com/entry/2019/01/09/%E8%BF%B7%E6%83%91%E3%81%AA%E4%BA%BA%E3%82%A4%E3%83%AC%E3%83%96%E3%83%B3

>01. ちょっとしたことでキレて無茶な反撃をしてくる人
>02. 他人の命を利用することで、自暴自棄状態から脱しようとする人
>03. ゼロリスク信棒の人
>04. 必ず誰かの責任を問わずにはいられない人
>05. 自分は関係ないのに反対する人
>06. 正義感を振り回して自尊心を満足させる人
>07. 自分向けでないモノをわざわざ見に行ったあげく「役に立たない」と怒る人
>08. 全員ができるコト以外は言ってはならない、全員が買えるもの以外は買ってはいけないと言う人
>09. 援助を受ける人は、一切、人生を楽しんではならないと思っている人
>10. 有名人には何をしてもいい、客だから何を言ってもいい、と思ってる人
>11. 見知らぬ他人に勝手に期待して、勝手に絶望する人


# おまけ

- いましめではないですが、私はアラフォーですので、よくわかります。

https://www.okimhome.com/entry/2022/04/20/144415

- こちらもよくわかる系。めちゃくちゃ聞くし、私自身も言ってます。おっさんビジネス用語だということを意識しなければいけないのですね。

https://twitter.com/gongon_fg/status/1552208279711158279


# まとめ
- 自分自身に言い聞かせるという意味でまとめました。すばらしい考えや記事に感謝しながら謙虚に精進です。