OmniAICreator/Qiita-1.07M huggingface dataset:
【Athena】マネコンでStatsticsとExplainが確認できるようになったので試してみた

# 背景・目的
AthenaでStatisticsとExplainがマネコんから確認できるようになったようです。詳細は、[こちら](https://aws.amazon.com/jp/about-aws/whats-new/2022/07/amazon-athena-visual-query-analysis-tuning-tools/)。
早速、試してみたいと思います。

# まとめ
- マネコンから、Statsitics、Explainが確認できるようになった。

# 実践
## 前提
以前、[【Athena】パーティションインデックスの効果を確認してみた](https://qiita.com/zumax/items/85c028e968e8368cd8b4)で使用した以下のデータと、テーブルを元に試してみます。

- データベース名は、part_db
- テーブル名は、test
- パーティション数、ファイル数は、89279件

## フルスキャン
以下のクエリを実行して、StatisticsとExplainを確認してみます。
```
select count(1) from part_db.test
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/715e9ea7-cf66-c6eb-658c-aaab34298b30.png)

### Statisticsの確認
クエリの統計タブをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/f19503c3-2385-1794-7c3c-09914a0f85e4.png)


1分43.8秒のうち、２７秒(26%)が計画、1分16秒（73%）が実行にかかっています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/400050c1-ee6d-3269-9f6a-e39730d2ca28.png)

### 実行の詳細を確認
実行の詳細をクリックします。ステージごとの時間がわかります。5分60秒、57分39秒と表示されているの何でしょう。実行時間と整合性が取れていません。謎ですね。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/1ce49d23-1cf3-6c1f-6e2c-2efa89ce9a15.png)

ステージをクリックすると詳細がわかります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/87ded43b-3ed5-f2d5-a76a-41e9b9834c69.png)

### Explainの確認
説明をクリックします。（日本語で表示していると、直感で分かりづらい。。）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/70c8c9f3-ce43-5a49-4640-cfb666258b46.png)

分散プランでは、上記で確認した「実行の詳細」と同じ内容が確認できます。（実行時間が表示されるかの違いですかね。）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/151c0ce2-d46f-2410-21a8-074e715ed3b9.png)

論理プランをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/980d94e1-0e37-b32e-e238-16dbbcf71128.png)

## パーティション(year,month,day)を指定
以下のクエリを実行して、StatisticsとExplainを確認してみます。想定では、パーティションインデックスが作成されているので、計画が短くなるはずです。
（実行時間は読み込む量が少ないので当然短い。）
```
select count(1) from part_db.test where year ='2022' and month = '01' and day ='01'
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/d27e8f8d-6ec0-1b3b-1710-1623a9818228.png)

### Statsticsの確認
実行時間903ミリ秒のうち、計画が342ミリ秒（38%）、実行が374ミリ秒（41%）でした。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/ed8bd48e-352c-6e2e-0c5f-b7d06e0f26c1.png)


# 考察
今まで、CLI等を利用して確認していたStasticsや実行プランがGUIで確認できるようになり、ボトルネックの確認が簡単になりました。


# 参考

https://aws.amazon.com/jp/about-aws/whats-new/2022/07/amazon-athena-visual-query-analysis-tuning-tools/

https://docs.aws.amazon.com/ja_jp/athena/latest/ug/query-plans.html

https://docs.aws.amazon.com/ja_jp/athena/latest/ug/query-stats.html

https://docs.aws.amazon.com/ja_jp/athena/latest/ug/athena-explain-statement-understanding.html

https://qiita.com/zumax/items/85c028e968e8368cd8b4
【unity】画面上のテキストをスクリプトで操作する

# はじめに
敵のHPやスコアのような、動的なテキストを画面上に表示したかったので、メモ。

# 内容
オブジェクトとして追加したText（TextMeshPro）の値をいじればよい。
例として、敵のHPを表示するコードを載せる。

```c#: テキストの値の編集
    // テキストエリア
    public TextMeshProUGUI hpText;

    void Update()
    {
        string dispTextArea = "";

        dispTextArea += String.Format(
            "{0}: {1}/{2}",
            objName,
            Math.Ceiling(hp),
            hpMax
            );

        // テキストエリアを画面にセット
        hpText.text = dispTextArea;
    }
```
`TextMeshProUGUI`型の変数に表示させたいTMPを割り当てる。
その後、TMPの`text`に、表示させたいテキストを代入する。

# 詳細
```c#:
        dispTextArea += String.Format(
            "{0}: {1}/{2}",
            objName,
            Math.Ceiling(hp),
            hpMax
            );
```
今回の例では、`String.Format([text], [value1], ...)`を用いている。

`[text]`の中で変更させたい部分に`{0}`や`{1}`をあらかじめ入力しておき、`String.Format()`にて`{0}`の部分に表示させたい値を引数で指定させてやると、その部分に値が表示される。

# まとめ
テキストを動的に変更させること自体は単純なので、今回は`String.Format()`を使用して実装してみた。
今後表示させたいテキストの量が増えた際の対応も今後考えてみることとする。

# 参考文献
- [UnityのTextMeshProを使ってみる](https://gametukurikata.com/ui/textmeshpro)
誤って展開したtarのファイルを一括削除するコマンドライン

# はじめに
Dockerのイメージファイルをダウンロードしてビルドするように言われたんですが，Dockerに詳しくないせいでイメージのtarファイルを不要に展開してしまい，他のファイルもある中で展開されたファイルだけを消すのに難儀したので，削除用に作ったコマンドを備忘録として残しておきます。

# 例
Dockerのイメージファイルを，それが置かれているディレクトリ上に展開した後，再び展開する前の状態に戻します。
前提として，tarが置かれているディレクトリには展開された`tar`とその中身以外にも色々ファイルが存在します。
Dockerイメージのレイヤー情報を格納しているディレクトリは名前がハッシュ値になっていることもあって，`ls`結果を`grep`して`xargs`に食わせる，みたいなことがやりにくそうですね。

```bash
$ ls
wordpress.tar ww www wwww ...
$ tar -xf wordpress.tar
$ ls
10313414698f0d9534f6385fb5d2756ef4377cf30f1e44711820b6af89b75f1b
259ef3fc24ff14247efd1da3731449ec6ab5aa10d356640cec980c52b8a8f43e
2909b2b6c2d0c1ecd9ba082bb938a32883d016e6900ca4981c9e81983d51e90b
...
manifest.json
repositories
wordpress.tar
ww
www
...
```

# コマンド
```
tar -tf <tar name> | awk -F'[/]' '{print $1}' | uniq | xargs rm -r
あるいは
tar -tf <tar name> | cut -d'/' -f1 | uniq | xargs rm -r
```
※tarが置かれているディレクトリで実行することを想定しています。
※※ユーザーがカレントディレクトリに対して読み書きの権限を持っていない場合は`rm`に`-f`オプションが必要です。

基本的には，展開元のtarの中身を`xargs`に渡すという考え方です。
`tar -t`の出力は以下のようになります。
```
$ tar -tf wordpress.tar
10313414698f0d9534f6385fb5d2756ef4377cf30f1e44711820b6af89b75f1b/
10313414698f0d9534f6385fb5d2756ef4377cf30f1e44711820b6af89b75f1b/VERSION
10313414698f0d9534f6385fb5d2756ef4377cf30f1e44711820b6af89b75f1b/json
10313414698f0d9534f6385fb5d2756ef4377cf30f1e44711820b6af89b75f1b/layer.tar
259ef3fc24ff14247efd1da3731449ec6ab5aa10d356640cec980c52b8a8f43e/
...
```
ディレクトリはディレクトリとしてまとめて削除するのが一番効率が良さそうなので，`awk`や`cut`で`/`を区切り文字とした第1フィールドを取得したのち，`uniq`で重複を取り除きます。
（余談：`dirname`コマンドが使えるかと思ったんですが，最上位に置かれているファイルに対して適用すると出力が`.`になってしまうためボツになりました。）

実行結果は以下のとおりです。
```
$ tar -tf wordpress.tar | cut -d'/' -f1 | uniq | xargs rm -r
$ ls
wordpress.tar  ww  www  wwww ...
```

# おわりに
`rm -r`がファイルもディレクトリも削除できる仕様で良かったです。
`tar -t`が表示するファイルの階層を指定できると尚良かったんですが，manを見た感じではなさそうでした。
もっといいやり方があれば教えてください。

最後までご覧頂きありがとうございました。
Blenderでシェイプキー名一覧を取得・一覧から空のシェイプキーを作成

キャラの表情パターンをモデリングする場合に
既存モデルに空のシェイプキーを作りたいという話があったので
特に記事にするほどでもないけどメモ程度に

# 既存モデルのシェイプキー一覧をクリップボードに

```py
import bpy
mesh = bpy.context.active_object.data
shapekey_names = mesh.shape_keys.key_blocks.keys()
# テキストをクリップボードに
bpy.context.window_manager.clipboard = str(shapekey_names)
```
トピックのまま
実行すると選択している（アクティブな）モデルにあるシェイプキーの名前の一覧を
テキストとしてクリップボードにコピーします
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151493/2eb010fb-0cc5-de19-84c0-fe8055b9f60c.png
)
こういったシェイプキーの場合

> ['Basis', 'test_Key 1', 'test_Key 2', 'test_Key 3', 'test_Key 4', 'test_Key 5']

といったテキストになります

# 空のシェイプキー作成
選択したメッシュオブジェクトに任意の名前で空のシェイプキーを作るスクリプトです
３行面の　[...]　の部分を上記の名前一覧でコピーしたテキストで置き換えることで　他と名前を揃えることができます
```py
import bpy
shapekey_names = ['Basis', 'test_Key 1', 'test_Key 2', 'test_Key 3', 'test_Key 4', 'test_Key 5']
obj = bpy.context.active_object
for key in shapekey_names:
    obj.shape_key_add(
 name= key )
```
Azure関連資格(AZ-xxx)のロードマップ(ラーニングパス？)資料へのたどり着き方

Azure関連の資格って、前提条件があったりロールベースでいろいろな種類の資格があったりで、自分がどれを取るのがいいのか、結構わからんな。。。
と思ったので、参考になる資料を探しました。

# 背景
・職場でAzureを触る機会に恵まれました（インフラ系の現場でお仕事しています）
・とりあえず資格取得を目標にお勉強することにしました
・が、Azure関連の資格体系がよくわかりませんでした

というわけで、ロードマップを探す旅に出ることにしました。:runner_tone1:

# 結論
見つかりました。:sunny:
#### Microsoft Azure training and certifications

https://query.prod.cms.rt.microsoft.com/cms/api/am/binary/RE4J5ea

※2022/07/20時点の情報です。

**＜良い点＞**
・役割ごとに、初級から上級までの流れが書かれている
・資格ごとに、勉強に使えるリソースが記載されており、かつリンクになっている

ただし、英語。:scream:


# たどり着き方
上に貼った**リンクURLが変わるかもしれない**懸念があること、
変なたどり方をしてないかを世間の方々に検証してもらえることも期待して、
**どのように見つけたか**(リンクをたどったか)、を残しておきます。

#### 手順
1. [試験ページ](https://docs.microsoft.com/ja-jp/certifications/exams/az-104)からスタート

2. 試験ページの下の方にある「トレーニングおよび認定資格ガイド」をクリック　(画像引用元：[^1] )
![002.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2738321/7c6d88f3-3b4f-562a-1d53-ad3f5f1d4857.png)

3. PDFが開くので、目次(2ページ目)にある「Microsoft Azure」をクリック　(画像引用元：[^2] )
![003.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2738321/4e541d29-a828-945d-0261-1fc3577a8181.png)

4. 「Microsoft Azure training and certifications guide」をクリック　(画像引用元：[^2] )
![004.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2738321/f4635973-92f3-5540-5c2b-560ef1cd73c7.png)


5. 目的のPDFが開きました :tada: :tada: :tada:　　(画像引用元：[^3] )
![006.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2738321/f9abf140-275e-8f82-5059-4ddd083ebc43.png)


# 最後に
本記事は自分が3回同じ探しモノをしたので記事にまとめることにしたものですが、
同じ困りごとを抱えている同志の一助となれば幸いです。

 :star2::star2::star2:れっつえんじょい、あじゅーるらいふ :star2::star2::star2:

[^1]:https://docs.microsoft.com/ja-jp/certifications/exams/az-104
[^2]:https://query.prod.cms.rt.microsoft.com/cms/api/am/binary/RWtQJJ
[^3]:https://query.prod.cms.rt.microsoft.com/cms/api/am/binary/RE4J5ea
CRAアプリ＋Reactライブラリ開発

CRAアプリとReactライブラリを同時に開発したい
結論：アプリ側はyarn v2にするのが良さそう。


# ファイルプロトコルで参照
ローカルのライブラリをinstall

```
> yarn add file:../react-lib
```

```ruby:package.json
  "dependencies": {
    "react-lib": "file:../react-lib",
```


./node_modules/react-libにコピーされる。
ただし、ライブラリ側を修正を反映する場合は、
削除して入れ直す。

```
> rm -rf ./node_modules/react-lib
> yarn --check-files
```

./node_modules/react-lib
は更新されてるのにアプリに反映されないときがあった。
一回キャッシュクリーンしたらそれ以降反映されるようになった。
なんでだろう。。
```
> yarn cache clean
```

# yarn linkで簡略化

もっと簡略化するためにyarn linkを使う

ライブラリをシンボリック先にする
ライブラリフォルダ下で

```
> yarn link
```

CRAアプリフォルダ下で

```
yarn link react-lib
```

これで
./node_modules/react-lib
がシンボリックリンクで直接react-libを参照するようになる。

react-lib側を変更するだけで、
CRAアプリのDevServerに即時反映されるようになった。

なんかリンク先がpackage.jsonで管理されてないのが微妙かも。
色々やってみる。

https://yarnpkg.com/features/protocols

一回まっさらにして
```
> yarn unlink react-lib
> yarn remove react-lib

```
react-lib下で
```
> yarn unlink
```
これでリンク先も削除される

protocol linkでやってみる

```
> yarn add link:../react-lib
```

こうなった。
```package.json
  "dependencies": {
    "react-lib": "link:../react-lib",
```

これだとライブラリ側修正したら即時反映。
node_modules下が更新されているから
裏側でシンボリックリンク貼ってるのか。
package.jsonに管理されてるし、こっちの方が良いかも。

portalとの違いは何なのか。


```
> yarn remove react-lib
> yarn add portal:../react-lib
```

エラーになった。portalはyarn1にはないのか。

https://yarnpkg.com/features/protocols#why-is-the-link-protocol-recommended-over-aliases-for-path-mapping

linkはpackage.json見ないと書いてる。
resolutionsでライブラリが依存してるパッケージのバージョン指定したりそんなのは無理ということか。
package.jsonのmainとかは効いてるので、依存関係解決の時の話。
それを解決できるのがportalでこれはv2から登場。

なるほど。
そこで困ったのが、ライブラリ側でHooks使う時。
ブラウザでエラーになった。

`Warning: Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons:`
`1. You might have mismatching versions of React and the renderer (such as React DOM)`
`2. You might be breaking the Rules of Hooks`
`3. You might have more than one copy of React in the same app`
`See https://reactjs.org/link/invalid-hook-call for tips about how to debug and fix this problem.`

アプリとライブラリ別々にReact使ってるから3番に該当してエラーになったんだろう。

最初のfileプロトコルでも同じエラー。
キャッシュにコピーとしか書いてないから依存関係は見ないんだろう。

# yarn v2

portalを使うため、アプリ側をyarn v2にしてみる。
手順はこちら

https://qiita.com/pino2/items/d793d5146a0067e18285

v1のように

`yarn add portal:../react-lib`
だとエラーになった。
これで成功
```
> yarn add react-lib@portal:../react-lib
```

```package.json
  "dependencies": {
    "react-lib": "portal:../react-lib",
```

ライブラリを更新する度にDevServerに反映されるようになった。
ライブラリ側でHookも使えるようになった。
yarn v1でうまくやる方法は見つからず。

※CRAアプリ側 yarn2にしたら修正してDevServerに反映するときに以下のエラーが発生するようになってしまった。
`Failed to load config "react-app" to extend from`

https://github.com/eslint/eslint/issues/13283

どうもeslint-config-react-appのEslintのconfigが読み込めてないようだが
そもそもCRAのデフォルトのままで、依存関係直下になかったから本来この動きが正しいらしい。。

これで解決した。
```
> yarn add -D eslint eslint-config-react-app
```
不偏性と一致性をシミュレーションで理解する

統計学の勉強をしていて不偏性と一致性が理解できなかったので、Pythonでシミュレーションして理解してみました。
Pythonも統計学も初心者で勉強のために記事を書いており不適切なことを書いているかもしれないので鵜呑みにしないでください。


# 不偏性と一致性の違い
大雑把に言って不偏性は平均的に母集団のパラメータと偏りなく一致することを言います。
一致性は、一つの標本に含まれる要素の数を増やしていくと母集団のパラメータと一致することをいいます。

## 不偏性
θの推定量
```math
\hat{\theta_n} = h(X_1, X_2, ..., X_n)\\
```
h()は平均や分散などの統計量の関数を表す。

統計量の平均を取ると母集団のパラメータθに近づいていく。
```math
E(\hat{\theta_1}, \hat{\theta_2}, \hat{\theta_3}, ... , \hat{\theta_n})= \theta
```

## 一致性
任意の正の定数aに対して、n→∞としたとき推定量θ^が
```math
\hat{\theta_n} = h(X_1, X_2, ...,X_\infty)\\
P(| \hat{\theta_n} - \theta | < a) \longrightarrow 1
```
n→∞の時、θ^が小さな区間(θ-a, θ+a)の中に落ちる確率が1に近づいていくこと。

# シミュレーション
Pythonでシミュレーションをして不偏性と一致性を視覚的に理解したいと思います！

## 不偏性
```python
import numpy as np
import matplotlib
import matplotlib.pyplot as plt


np.random.seed(20)

eu = [] #不偏分散の期待値のリスト
es = [] #標本分散の期待値のリスト

uv = [] #不偏分散のリスト
sv = [] #標本分散のリスト

for n in range(1, 10000):
   samples = np.random.normal(10, 5, 10) #平均10、標準偏差5の正規乱数を10個生成生成

   uv.append(np.var(samples, ddof = 1))
   sv.append(np.var(samples, ddof = 0))

   eu.append(np.mean(uv))
   es.append(np.mean(sv))


plt.figure(figsize = (15, 10))
plt.axhline(25, ls = "--", color = "red", label ="True")

plt.plot(eu, color = "blue", linewidth = 0.5, label = "Unbiased variance") #Unbiased variance = 不偏分散
plt.plot(es, color = "green", linewidth = 0.5, label = "Sample variance") #Unbiased variance = 標本分散

plt.xlabel("Samples")
plt.ylabel("Variance")
plt.legend(loc = "higher right")
plt.show()

```
![不偏性.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1572114/3569fef6-dc95-4c19-1739-1ef979f75033.png)


不偏推定量である不偏分散（Unbiased variance）の方が母分散の25に近いですね！

## 一致性
```python
mean = []

for i in range(1,10000): #標本の要素の数を1から10000
    #平均10、標準偏差5の標本を生成。標本の要素の数は1から10000個に増えていく
    samples = np.random.normal(10, 5, i)
    
    mean.append(np.mean(samples))

plt.figure(figsize = (15, 10))
plt.axhline(10, ls = "--", color = "red", label ="True")
plt.plot(mean, color = "blue", linewidth = 0.5, label = "Sample mean") 

plt.xlabel("Samples")
plt.ylabel("Mean")
plt.legend(loc = "higher right")
plt.show()

```
![一致性.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1572114/4dcf6652-f9c0-e436-54b1-aa98a810e920.png)

一致推定量である標本平均が母平均に近づいていくことがわかりますね！
ちなみに、不偏分散のシミュレーションを見ると、不偏分散と標本分散も一致性を満たすので一定の値に収斂していくことがわかります。
【Python】ワイルドカードを使ってローカルファイル群を取得しよう

globモジュールを使ってローカルに存在するファイル群を取得する方法を記載します。

## globモジュールとは

Unixシェルが使用する規則に従って、指定されたパターンに合致するパス名をすべて見つけることができます。

## 使い方

まずglobをimportします。glob自体は最初から含まれているため、pipでインストールする必要はありません。

```python
import glob
```

.pdfと記載されたファイルを取得するには、以下のように記載します。

```python
import glob

glob.glob('*.pdf')
```

出力結果は以下です。

```python
['1.pdf', '3.pdf', '2.pdf']
```

.pdfとついたファイルが全て取得できました。
リスト型で取得されるため、1つずつ処理したい場合は、for文で処理する必要があります。

```python
import glob
files = glob.glob('*.pdf')
for file in files:
  print(file)
```

以下が出力されます。

```python
1.pdf
3.pdf
2.pdf
```

また、取得するパスは特に指定がなければ、カレントディレクトリから取得されます。

また、`*`のような特殊文字は`*`だけでなく、`?`なども使用できます。

## 公式ドキュメント
公式ドキュメントはリンクを貼っておきますので、詳細は以下リンクを参照するようお願いします。
[https://docs.python.org/ja/3/library/glob.html](https://docs.python.org/ja/3/library/glob.html)
【Xcode】シュミレーターAppleWatchの言語変更方法

# はじめに
https://qiita.com/SNQ-2001/items/c72bca5e8c1eefe9cd29

↑これの続きです。

今回はシュミレーターAppleWatchの言語の変更方法です。

# 現状
iPhone - 日本語
AppleWatch - 英語
![スクリーンショット 2022-07-22 23.35.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/faf2608e-0a7d-9b3b-101d-7f2830826562.png)

# 問題点
「5分前」と表示するところが「5 minutes ago」と表示されてしまってレイアウトが崩れています。
|✅日本語|❌英語|
|-|-|
|![twitter_FYFEpZfacAETTAa.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/e8db841f-1d8f-7227-8855-b9f7e9e02e50.png)|![スクリーンショット 2022-07-22 23.36.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/5e7ce4a2-27c8-8407-b4fb-3063eedbfc9e.png)|

# 解決方法
紐付いているiPhoneとAppleWatchをビルドします。
![スクリーンショット 2022-07-22 23.42.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/ebf526bc-60e9-f675-6c25-2a852fa0ac3d.png)
「Watch」を開きます。
![スクリーンショット 2022-07-23 12.16.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/89d5c673-1f69-c8eb-3d22-35ee07d3bb9e.png)
「一般」を選択します。
![スクリーンショット 2022-07-23 12.18.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/fb629c6e-48c0-7ebc-d01e-6287755dafb8.png)
「言語と地域」を選択します。
![スクリーンショット 2022-07-23 12.20.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/d4fca2f0-0c79-c3fc-6845-b2fa34db67a7.png)
言語が「English」になっています。
![スクリーンショット 2022-07-23 12.22.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/9e01d088-7a2a-7cd9-b5e5-a18c8c8884d8.png)
iPhoneと同じ設定にしたいので「カスタム」から「iPhoneを反映」に変更します。
![スクリーンショット 2022-07-23 12.23.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/49819b77-7078-7eb6-9c30-61e1814d822b.png)
「iPhoneを反映」を選択するとAppleWatchに「言語を設定中...」と表示されます。
![スクリーンショット 2022-07-23 12.24.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/7499535c-3e58-b1df-fbca-3d7d6737a722.png)
「言語を設定中...」の表示が消えれば日本語に変更完了です。
![スクリーンショット 2022-07-23 12.24.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/bb385e94-2bd3-67ba-a1d1-21d393a40aa2.png)

# おわり
シュミレーターの言語変更についての情報は１つも見つからなかったのでかなり苦戦しました。
同じことで困ってる人がこの記事を見つけられますように。
企業の技術ブログまとめ


- [twillio BLOG](https://www.twilio.com/blog/)
- [Discord Blog](https://blog.discord.com/)
- [Netflix TechBlog](https://netflixtechblog.com/)
- [DeNA Engineering - DeNAエンジニアのポータルサイト](https://engineer.dena.com/)
- [MicroAd Developers Blog](https://developers.microad.co.jp/
)
- [pixiv inside](https://inside.pixiv.blog/)
- [Cybozu Inside Out](https://blog.cybozu.io/
)
- [ZOZO Technologies TECH BLOG](https://techblog.zozo.com/)
- [レコチョクのエンジニアブログ](https://techblog.recochoku.jp/)
- [メルカリエンジニアリング](https://engineering.mercari.com/)
- [Eureka Engineering - Medium](https://medium.com/eureka-engineering)
- [つみきブログ](https://blog.tsumikiinc.com/)
- [CyberAgent Developers Blog | サイバーエージェント デベロッパーズブログ](https://developers.cyberagent.co.jp/blog/)
- [Google Developers Blog](https://developers.googleblog.com/)
- [DMM inside](https://inside.dmm.com/)
- [freee Developers Hub](https://developers.freee.co.jp/)
- [NTT Communications Engineers' Blog](https://engineers.ntt.com/)
- [Kaizen Platform 開発者ブログ](https://developer.kaizenplatform.com/)
- [CARTA TECH BLOG](https://techblog.cartaholdings.co.jp/)
- [paiza開発日誌](https://paiza.hatenablog.com/)
- [TVer Tech Blog](https://techblog.tver.co.jp/)
- [クックパッド開発者ブログ](https://techlife.cookpad.com/)
- [エクサウィザーズ Engineer Blog](https://techblog.exawizards.com/)
- [Hatena Developer Blog](https://developer.hatenastaff.com/)
- [KAI-YOU Lab.](https://kai-you-tech.hatenablog.com/)
- [エンジニアブログ | GMOインターネットグループ研究開発本部（次世代システム研究室）](https://recruit.gmo.jp/engineer/jisedai/blog/)
- [開発者向けブログ・イベント | GMO Developers](https://developers.gmo.jp/)
- [エンジニアブログ | GREE Engineering](https://labs.gree.jp/blog/)
- [TECH BLOG - トピックス - グリーエンターテインメント株式会社](https://gree-entertainment.com/topics/tech-blog/)
- [BASEプロダクトチームブログ](https://devblog.thebase.in/)
- [Stripe Blog: Engineering](https://stripe.com/blog/engineering)
- [Chatwork Creator's Note](https://creators-note.chatwork.com/)
- [クラスメソッド発「やってみた」系技術メディア | DevelopersIO](https://dev.classmethod.jp/)
- [KAYAC engineers' blog](https://techblog.kayac.com/)
- [フューチャー技術ブログ](https://future-architect.github.io/)
- [ヌーラボブログ | 株式会社ヌーラボ(Nulab inc.)](https://nulab.com/ja/blog/)
- [TechBlog – Nulab (Japanese)](https://nulab.com/ja/blog/categories/techblog/)
- [エンジニア | FreakOut Backyard](https://backyard.fout.co.jp/category/engineer/)
- [coincheck tech blog](https://tech.coincheck.blog/)
- [CINRA, Inc.](https://qiita.com/organizations/cinra)
- [Articles - dwango on GitHub](https://dwango.github.io/articles/)
- [hey Product Blog](https://tech.hey.jp/)
- [FANCOMI Ad-Tech Blog](https://tech-blog.fancs.com/)
- [Timee Product Team Blog](https://tech.timee.co.jp/)
- [CAMPFIRE 開発チーム｜note](https://note.com/campfire_dev/)
- [Makuake Tech note｜note](https://note.com/dev_makuake/)
- [every Engineering Blog](https://tech.every.tv)
- [開発｜Goodpatch Blog グッドパッチブログ](https://goodpatch.com/blog/tag/development)
- [TORANA TECH BLOG](https://tech.torana.co.jp/)
- [Sweatcoin Developer Blog](https://dev.sweatco.in/)
【MySQL学習】エラーログ

# はじめに
MySQLのエラーログについて学習したことを簡単にまとめます。

# 検証に使用した環境
DB：MySQL8.0

# エラーログとは
MySQL上で検知したエラーがロギングされます。
エラーログでは、サーバーの実行中に発生したエラーだけでなく、
起動・停止中も含み、エラー、警告、またノートなどの診断メッセージも出力されます。

# コンポーネント
エラーログでは、MySQLのコンポーネントアーキテクチャを使用しています。
そのため、コンポーネントを選択して任意の構成にすることができます。

コンポーネントには、以下の2つの種類から複数存在します。
・ログイベントのフィルタリングするコンポーネント（フィルタ）
・フィルタリング結果を書込むコンポーネント（シンク）

## フィルタ
エラーログイベントをフィルタリングをするコンポーネントです。
イベントフィールドを追加、削除または変更したり、イベント全体を削除して実現しています。
結果のイベントは、有効なコンポーネントのリスト内の次のログコンポーネントに渡されます。

## シンク
ログイベントの宛先 (ライター) です。 
通常、シンクはログイベントを特定の形式のログメッセージに処理し、ファイルやシステムログなどに書き込みます。
シンクは、パフォーマンススキーマのerror_logテーブルに書き込むこともできます。

## コンポーネントベースによるメリット
・ログイベントをフィルタし、ロギングする内容を絞れます
・複数のシンクコンポーネントを有効にし、複数のログに出力できます
・デフォルトのエラーログ形式も組込みフィルタとシンクコンポーネントを組み合せて実装されています
・シンクを変更、または追加して、JSON形式の出力が可能
・シンクを変更、または追加して、システムログにも出力できます

# システム変数
## log-error
ログファイルの出力先を指定します。
指定されていない場合、デフォルトはコンソールに出力されます。
また、ファイル名を指定しなかった場合、「host_name」.errとなります。

## log_error_services
有効にするコンポーネントを制御します。
変数には、セミコロンまたはカンマで区切りのリスト形式で複数のコンポーネントを指定することができます。
※サーバーはリストで指定した順番にコンポーネントを実行するため、コンポーネントの指定順は重要

## log_error_verbosity
冗長性フィルタリングといって、ロギングする内容を3段階で指定します。

設定値は1〜3を指定します。
1：	ERROR
2：	ERROR, WARNING
3：	ERROR, WARNING, INFORMATION

2以上を指定すると、安全でないステートメントに関するメッセージがロギングされ、
3を指定すると、接続の中断や、接続のアクセス拒否エラーもロギングされるようになります。
そのため、レプリケーションを使用している場合は2以上を設定することが推奨されています。

また、中には冗長性フィルタリングの対象外となるSYSTEMのメッセージもあり、「System」というラベルが付けられてロギングされます。
※シンクによって差異あり。

## log_error_suppression_list
WARNINGまたはINFORMATIONの優先度で発生したイベントで抑制したいもののエラーコードをリスト形式で指定します。 
これにより、よく出力されるが関心がない警告などの出力を抑制できます。
※優先度がERRORまたはSYSTEMのメッセージは抑制できません。

# デフォルトの構成
下記の通り、デフォルトではフィルタに「log_filter_internal」、シンクに「log_sink_internal」が指定されています。

```shell
mysql> SELECT @@GLOBAL.log_error_services;
+----------------------------------------+
| @@GLOBAL.log_error_services            |
+----------------------------------------+
| log_filter_internal; log_sink_internal |
+----------------------------------------+
1 row in set (0.01 sec)
```

# テーブル出力
MySQL8.0.22以降で、かつシンクにlog_sink_internal、log_sink_jsonを使用している場合、
パフォーマンススキーマのerror_logテーブルにもされます。

# 参考文献

https://dev.mysql.com/doc/refman/8.0/ja/error-log-configuration.html
非同期処理2022/UniRxの使い道

# 参考 2022年現在におけるUniRxの使いみち　

https://qiita.com/toRisouP/items/af7d32846ab99f493d92

# 非同期処理の手法
　→　async/awaitを使え。

async/await、Task　「なにかの処理を1回だけ待つ」
コルーチン
UniRx... イベント処理が強い、繰り返し実行することに強い。
UniTask(Unity)

# UniRx
１．イベント通知,入力イベントなど。
２．MVPパターンに使う
３．非同期処理はもう非推奨
４．MonoBehaviourのロジックを記述する

処理したあとN秒間はクールタイム。
わかりやすく言い換えるなら、「強攻撃を出したらクールタイムが長い。弱攻撃を出したらクールタイムが短い。クールタイム中は攻撃が一切できない」みたいなパターンです。



```
        private void Start()
        {
            // 毎フレーム実行
            this.UpdateAsObservable()
                // 攻撃ボタンが押されたら
                .Where(_ => Input.GetButtonDown("Attack"))
                // 処理を1回走らせたあと、1秒間クールタイム
                .ThrottleFirst(TimeSpan.FromSeconds(1))
                .Subscribe(_ => Action())
                .AddTo(this);
        }
```

５．Update()のスコープを分離する
```
        private void Start()
        {
            // Playerの位置に応じた処理
            this.UpdateAsObservable()
                .Subscribe(_ => CheckPosition())
                .AddTo(this);

            // Playerの体力に応じた処理
            this.UpdateAsObservable()
                .Subscribe(_ => CheckHealth())
                .AddTo(this);

            // 攻撃処理のチェックと移動処理
            this.UpdateAsObservable()
                .Subscribe(_ =>
                {
                    CheckAttack();
                    Move();
                })
                .AddTo(this);
        }
```
6.依存関係の整理に使う

7.スクリプトの実行順の調整に使う
「前のコンポーネントが終わったら次のコンポーネントが連鎖して実行される」という仕組みにします。

8.コレクションの変動を通知する
「配列や辞書の中身が変動した」ということを即時に検知してイベント処理を実行することが可能となります。
プロジェクト名を指定して同一のdocker-composeを複数実行する

別のディレクトリに全く同じdocker-compose.ymlを作る。

```db1/docker/docker-compose.yml
version: '3'
services:
  db:
    image: mysql:5.7
    environment:
      - TZ=Asia/Tokyo
      - MYSQL_ROOT_PASSWORD=pass
```

```db2/docker/docker-compose.yml
version: '3'
services:
  db:
    image: mysql:5.7
    environment:
      - TZ=Asia/Tokyo
      - MYSQL_ROOT_PASSWORD=pass
```

どちらも`docker-compose up -d`してみる。
```bash
$ docker-compose -f db1/docker/docker-compose.yml up -d
$ docker-compose -f db2/docker/docker-compose.yml up -d
```

結果、片方しかできない。。。
```bash
$ docker ps -a
CONTAINER ID   IMAGE       COMMAND                  CREATED          STATUS          PORTS                 NAMES
2e19e4d1b563   mysql:5.7   "docker-entrypoint.s…"   12 seconds ago   Up 11 seconds   3306/tcp, 33060/tcp   docker_db_1

$ docker network ls
NETWORK ID     NAME             DRIVER    SCOPE
0939fdcabc68   bridge           bridge    local
23355a969f2e   docker_default   bridge    local
7aeaad9a5939   host             host      local
860517d0c99a   none             null      local
```

プロジェクト名が同じだからっぽい。
※プロジェクト名のデフォルトは、docker-compose.ymlが配置されているディレクトリ名
https://docs.docker.com/compose/reference/#command-options-overview-and-help
```bash
Options:
  -p, --project-name NAME     Specify an alternate project name
                              (default: directory name)
```

そんなときは、プロジェクト名を指定するとよい。
```bash
$ docker-compose -f db1/docker/docker-compose.yml -p hoge up -d
$ docker-compose -f db2/docker/docker-compose.yml -p huga up -d
```

それぞれのコンテナとネットワークができる。
```bash
$ docker ps -a
CONTAINER ID   IMAGE       COMMAND                  CREATED         STATUS         PORTS                 NAMES
41cd33c92197   mysql:5.7   "docker-entrypoint.s…"   5 seconds ago   Up 3 seconds   3306/tcp, 33060/tcp   huga_db_1
4fe919e8927b   mysql:5.7   "docker-entrypoint.s…"   9 seconds ago   Up 8 seconds   3306/tcp, 33060/tcp   hoge_db_1

$ docker network ls
NETWORK ID     NAME           DRIVER    SCOPE
0939fdcabc68   bridge         bridge    local
6827e2fef271   hoge_default   bridge    local
7aeaad9a5939   host           host      local
37e534e7203b   huga_default   bridge    local
860517d0c99a   none           null      local
```

気をつけるのは、その後の操作にもプロジェクト名を指定する必要があること。
```bash
$ docker-compose -f db1/docker/docker-compose.yml -p hoge down -v
$ docker-compose -f db2/docker/docker-compose.yml -p huga down -v
```

公式ドキュメントにもそれっぽいことが書いてあります。
https://docs.docker.com/compose/compose-file/#the-compose-application-model

以上です。
さくらVPSにCentOS7をいれてapacheを起動したがつながらない

同じように悩む方がいるかもと思ったので、まとめます。
状況は題名の通りです。

## 【原因】
これはさくらVPSのもとからの設定に起因しています。
![スクリーンショット 2022-07-23 120014.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2708086/2fdf6583-9045-74d7-52df-c092189da915.png)
この「接続可能ポート」が、元々SSHのみしか許可されていません。
そのため、Apachで接続しようとしても、接続できません。（ポートが開かれていない、という状態でしょうか...）

## 【対処法】
![スクリーンショット 2022-07-23 120449.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2708086/ce568c6b-0575-21f2-8645-91df54bbe243.png)

パケットフィルター設定をクリックして、接続可能ポートを追加、をクリックします。
その中の「WEB」を選択し設定してください。
上記が出来て、かつApacheの設定がきちんとできていればテストページが出来ます。

## 【参考にしたもの】
https://teratail.com/questions/201643
こちらのページです。
Windows11へios-webkit-debug-proxyをインストールして、chrome://inspect/で iOS Safariデバッグする。

# はじめに
iOSデバイスで動作しない、Javascriptがある。Windows,MacOS,Androidの各デバイス、ブラウザでは動作するのに、iOSデバイスでのみChromeでもSafariでもだめだ。さて、デバッグしたいのだが・・・iPhoneのブラウザでデバッグ情報ってどこに出てくるの？

これが、ことの始まり。対応策としては、掲題の方法があるとのことで試してみた。

# セットアップ
セットアップ方法については、先達に従う。説明丸投げ。
https://zatta.link/web/debug-ios-safari-with-windows.html

執筆時点で64bitWindowsのPoweshellでの操作においては、64bit 1.8.8 がインストールされた。
```
PS C:\Users\microsoftaro> scoop install ios-webkit-debug-proxy
Installing 'ios-webkit-debug-proxy' (1.8.8) [64bit]
...
..
```

注意点としては、Windowsに npm がセットされていることが前提になっていること。
事前、または途中で nodejs および npm をインストールしませう。なんか、Windows版のnodejsインストール、nodejs本体だけじゃなくて、visualstudio-toolsとかpython3とかchocolatelyも一緒にインストールするみたい。数ギガバイトのディスク容量が必要。
https://qiita.com/taiponrock/items/9001ae194571feb63a5e

### iPhone 側の設定
iOS Safari の設定で、いちばん下の詳細メニューの中から、Webインスペクタを有効化する。メニューのなかに「リモートオートメーション」というのがあって気になったりする。

# 開始
iPhone（iOSデバイス）とWindowsPCをケーブル接続。信頼。Windows側にはiTunesなどは不要。
Windows の PSターミナル で次のコマンドを実行。
```
remotedebug_ios_webkit_adapter --port=9000
```
「Windowsセキュリティの重要な警告」とタイトルのついたウィンドウが開き、ファイアウォールのブロック設定をどうするか聞かれるが、ここは自己責任で「アクセスを許可」。編者の環境では、２つのウィンドウが出た。

### Chromeのデベロッパーツールの設定でiOSのSafariで開いたページを確認できるようにする

PCのChromeの開発者ツールの設定ページ（chrome://inspect/）へ移動し、Discover network targetsの項目のConfigureをクリック。開始にあたってPSターミナルで打ち込んだコマンドの最後の "--port="のうしろの数字と同じ数字をつかって、設定値を追加する。
```
localhost:9000
````
そのあと、そのChrome://inspect/のページはそのまま開いておく。

### iPhoneのSafariで閲覧しているページをPCのChromeデベロッパーツールでデバッグする

PCに接続したiPhoneでSafariを起動し、ターゲットのWEBページをブラウジングし・・・なにげにPCの chrome://inspect/ の下部の空白部分をクリックしたりしつつ少し待つと画面にページ名が表示される。その下の、inspect のところをクリックすると・・・

![スクリーンショット 2022-07-23 120139.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/699890/49ece2de-23f5-2965-a185-58f8d3ee8190.png)

別ウィンドウで、iPhone Safari画面のコピーが表示される。
Safariのコピーだけ、大写し。あくまでコピーであって、PC側からは操作できないみたい。

![スクリーンショット 2022-07-23 120358.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/699890/5924b544-6912-1f8f-7ea2-1ae1ce1e3190.png)

右側のように、見慣れたChromeのデバッグツールが表示されるのでそこを使う・・・ということだと思う。

# まとめ
iOSのSafariでのWebブラウジング動作について、デバッグ情報をWindowsにいくつかのフリーソフトをインストールすれば、Chromeで確認できるということがわかった。

Windows起動、iOSデバイス接続、ios-webkit-debug-proxy起動、Chrome://inspect/ へアクセス、という流れで覚えて使おう。
◇Windowsのバッチファイルでメッセージウインドウを表示

# ◇メッセージウインドウを表示
![WS000000.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/588934/173837f2-f654-f9b2-706a-544d301d8af3.jpeg)
入力待機をさせる場合に「はい／いいえ」など単純なものは下のようなウインドウを表示してマウス操作のみで完結させたい場合がありますよね。
ＰｏｗｅｒＳｈｅｌｌで実現できます。

## メッセージウィンドウで入力待機させる

```
powershell -Command "Add-Type -AssemblyName System.Windows.Forms;$result = [System.Windows.Forms.MessageBox]::Show(\"メッセージ文1`nメッセージ文2`nメッセージ文3\", 'タイトル', 'YesNoCancel', 'Asterisk');exit $result;"
echo 戻り値は %ERRORLEVEL% です
pause
```

メッセージ文 は、\” で括ると、「`n」で改行できます。
表示するボタン は、次の値を指定します。
どのボタンが押されたかは、実行サンプルのようにすると、バッチの %ERRORLEVEL% で取得できます。
指定する値で表示されるボタンと値の関係は、次のようになります。
（）内が %ERRORLEVEL% の値です。

〇表示するボタン
|コマンド|ボタン(ERRORLEVELの値)|
|:-|:-|
|AbortRetryIgnore| 中止（3） 再試行（4） 無視（5） |
|OK| OK（1） |
|OKCancel| OK（1） キャンセル（2） |
|RetryCancel| 再試行（4） キャンセル（2） |
|YesNo| はい（6） いいえ（7） |
|YesNoCancel| はい（6） いいえ（7） キャンセル（2） |

〇表示するアイコン
|表記|コマンド|
|:-|:-|
|青い〇内に「i」|Asterisk、Information|
|赤い〇内に「×」|Error、Hand、Stop|
|黄色い△内に「!」|Exclamation、Warning|
|青い〇内に「?」|Question|
|なし|None|


# おわりに

他にも「[⧉Windowsのバッチファイルのテクニックをご紹介します][]」にてご紹介させて頂いております。
お時間ありましたら覗いてみてください
お粗末様でした。

https://github.com/Aromatibus/

[⧉Windowsのバッチファイルのテクニックをご紹介します]: https://qiita.com/aromatibus/items/12fa4775f38c9889a686
Bootstrap(4.5)の概要ページで扱う用語について

## 始めに
Bootstrapで扱う内容が初心者の私には難しかったので整理してみました


https://getbootstrap.jp/docs/4.5/layout/overview/#containers

## まずは単語の意味

|単語|意味|
|:-:|:-:|
|レイアウト|物の配置・配列をすること。|
|コンポーネント|部品、成分、構成要素|
|オプション|一般には選択、選択権などを意味|
|コンテナ|入れ物、箱のこと|
|グリッド|格子（状のもの）、方眼（状のもの）、送電網、配管網|
|グリッドシステム|レイアウトを格子状に分解し配置するデザインする手法|
|フレキシブル|柔軟性があるさま|
|オブジェクト|物体|
|レスポンシブ|Webサイト表示を柔軟に調整し、見やすく最適な表示にすること|
|クラス|同様のものの一まとまり|
|ブレークポイント|端末の画面サイズによってデザインを切り替えるポイントのことコンピュータプログラムを実行する際に、開発者の指示で強制的に実行を一旦停止する箇所のこと。|
|width|幅|
|fluid|流体、流れる様に動く物体|

## 公式ページを翻訳？してみる

>概要(Overview)
レイアウトのコンポーネントやオプションには, コンテナ, グリッドシステム, フレキシブルオブジェクト, レスポンシブクラス が組み込まれています。

Bootstrapとは
情報の配置のための部品や、自分で好きなデザイン選ぶ方法として、物を入れる箱、柔軟に変形する箱、さまざまな端末に対応した表示ができる機能が備わっています。

>Containers
コンテナは基本のレイアウトで, グリッドシステムを使用する場合に必要です。
・固定幅のコンテナ(ブレークポイントで max-width が変わる)
・全幅のコンテナ(常に100%の幅)
から選択できます。 コンテナは入れ子にすることができますが, 多くのレイアウトは入れ子のコンテナは必要としません。
Bootstrapのコンテナは下記の3種類が用意されています。
.container は各ブレークポイントで max-width を設定します。
.container-fluid はすべてのブレークポイントで width:100% となります。
.container-{breakpoint} は指定されたブレークポイントまで width：100％ となります。

### コンテナ（箱）とは
配置において`コンテナ（箱）`が基本`要素`となります。格子状の配置をするときに必要です。
・`幅`が固定された箱（端末サイズが切り替わったときには設定された最大幅に段階的に変化します）
・どのような画面サイズでも常に設定された最大幅で表示される箱
箱の中に箱の様な配置もできるが、する必要性はない。

Bootstrapのコンテナは下記の3種類の箱が用意されています。

・.箱：あらかじめ想定される表示画面に対しての最大表示幅を設定して使う箱
・.箱ー流体：表示画面に対応して常にあらかじめ指定された１００％幅になる
・箱ー表示画面の幅の切り替えポイント：指定された切り替えポイントまで最大幅で表示

画面サイズに対して、箱がどのように振る舞うのか参考資料がある

https://getbootstrap.com/docs/4.5/examples/grid/#containers

https://skillhub.jp/courses/168/lessons/913
◇Windowsのバッチファイルで実行方法を判別して処理を分岐させる

# ◇実行方法を判別する
エクスプローラーまたはコマンドプロンプトからの起動を判別できると色々と応用が利きます。
開始時にウインドウタイトルを変更と終了処理の分岐のサンプルを掲載します。

2022/08/17
終了処理を最近、使っているものに書き換えました。

### 実行がエクスプローラーからかコマンドラインか判別するサンプル

```bat:EndProcessBranchStartupConditions.bat
@echo off


:: 遅延展開宣言 バグの原因になる場合があります;
setlocal enabledelayedexpansion


:: %ESC%でエスケープシーケンスを利用できるようにする;
for /f "tokens=1,2 delims=#" %%a in ('"prompt #$H#$E# & echo on & for %%b in (1) do rem"') do (set ESC=%%b)


:: エクスプローラーから起動されていた場合はタイトル宣言;
echo %cmdcmdline%|find /i "%~f0">NUL
if %ERRORLEVEL% equ 0 (title %~n0 %DATE% - %TIME%)


echo 起動テスト中


:: 終了処理を起動条件により分岐（エクスプローラーから起動されていた場合は選択処理）;
:EndProcess
echo %CMDCMDLINE%|find /i "%~f0">NUL
if "%ERRORLEVEL%" neq "0" (goto :eof)
choice /t 10 /c qa /d q /m "10秒待機します。即閉じる場合はQ、待機はAを押してください。"
if "%ERRORLEVEL%" equ "2" (
  echo %ESC%[1A%ESC%[2K%ESC%[1A
  pause
)
goto :eof
```
### 待機方法について
以下のようなすると待機時間やメッセージを変更、表示できます。

|待機方法|コマンド|
|:-|:-|
|キーが押されるまで待機します|[Pause][]|
|指定秒数待機します|[timeout][] /t 5 /nobreak|
|様々な形式で処理をできます<br>※サンプルを参考|[choice][] /t 10 /c qa /d q /m "10秒待機します。即閉じる場合はQ、待機はAを押してください。"|
|コマンドプロンプト状態で終了します|cmd /k|


### タイトルに開始時刻を入れる
[◇日時を好みのフォーマットで作成][]」を使って開始時間を入れても良いですね。

### メッセージウインドウやトーストを使うのもおすすめです。
[◇Windowsのバッチファイルでメッセージウインドウを表示][]
![WS000000.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/588934/173837f2-f654-f9b2-706a-544d301d8af3.jpeg)
[◇Windowsのバッチファイルでトーストを使って通知する][]
![Toast.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/588934/5a80e27e-ff14-5b64-f3f4-dea4b3ed7504.gif)


[PAUSE]: https://docs.microsoft.com/ja-jp/windows-server/administration/windows-commands/pause
[TIMEOUT]: https://docs.microsoft.com/ja-jp/windows-server/administration/windows-commands/timeout
[CHOICE]: https://docs.microsoft.com/ja-jp/windows-server/administration/windows-commands/choice
[◇日時を好みのフォーマットで作成]: https://qiita.com/aromatibus/items/da51080676937a46a2fa
[◇Windowsのバッチファイルでメッセージウインドウを表示]: https://qiita.com/aromatibus/items/c1e7b27a8ba1ed07982b
[◇Windowsのバッチファイルでトーストを使って通知する]: https://qiita.com/aromatibus/items/c3e25ec72a9bcaaf345c


# おわりに

他にも「[⧉Windowsのバッチファイルのテクニックをご紹介します][]」にてご紹介させて頂いております。
お時間ありましたら覗いてみてください
お粗末様でした。

https://github.com/Aromatibus/

[⧉Windowsのバッチファイルのテクニックをご紹介します]: https://qiita.com/aromatibus/items/12fa4775f38c9889a686
docker-composeで環境変数を使用する


docker-composeで環境変数を使用してみました。

```docker-compose.yml
version: '3'
services:
  db:
    image: mysql:5.7
    container_name: "mysql_${ENV_NAME:-default_name}"  #ここがポイント
    environment:
      - TZ=Asia/Tokyo
      - MYSQL_ROOT_PASSWORD=pass
```

ENV_NAME設定なしの場合
```
$ docker-compose up -d
$ docker-compose ps
       Name                    Command             State          Ports
------------------------------------------------------------------------------
mysql_default_name   docker-entrypoint.sh mysqld   Up      3306/tcp, 33060/tcp
```

ENV_NAME設定ありの場合
コンテナ名が変わりましたね。
```
$ export ENV_NAME=custom_name
$ docker-compose up -d
$ docker-compose ps
      Name                    Command             State          Ports
-----------------------------------------------------------------------------
mysql_custom_name   docker-entrypoint.sh mysqld   Up      3306/tcp, 33060/tcp
```

公式ドキュメントにも記載があります。
https://docs.docker.com/compose/compose-file/#interpolation

以上です。
Laravel 制約を設定したら name is too longのエラーが出た

# 概要

- laravelのマイグレーションファイルの記載で制約を設定したら「name is too long」のエラーが出てマイグレーションができなかったので解決方法をメモ的にまとめる。

# エラー内容

- エラー内容を下記に記載する。


    ```
    Syntax error or access violation: 1059 Identifier name 'XXXX_YYYY' is too long
    ```

- laravelは制約の名前をテーブル名を用いて自動生成している。
- テーブル名が長すぎると制約名が長くなりすぎる。そのためエラーが出ていた。

# 解決方法

- 下記のように制約設定時にメソッドチェーンでnameを指定する。

    ```PHP
    $table->foreign('XXXX_id')->references('id')->on('XXXXs')->name('hoge_fuga_piyo_id');
    ```
CentOS7 ローカルポートフォワーディングを検証してみた

### はじめに
VirtualBoxでローカルポートフォワーディングを検証したため、記事にまとめました。

infracollegeで学びました。
https://infracollege.vamdemicsystem.black/linux/

以下のサイトで構成を学びました。とても参考になりました。
https://qiita.com/mechamogera/items/b1bb9130273deb9426f5

### サーバ構成図
ローカル端末から、ローカルポートフォワーディングを使用して、内部ネットワークにあるwebサーバー(httpd)に接続する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2599002/088ee390-7f0f-ecbe-c8d7-211863353a55.png)

コマンドの意味
ssh root@192.168.0.2 -L 8080:10.0.1.1:80

ssh接続したいサーバー(踏み台サーバ)
192.168.0.2
-L ローカルという意味です。
8080 ローカル端末にマッピングするポート
接続先のipアドレス 10.0.1.1(webサーバー)
80 持ってきたいポート

### 前提条件
VirtualBoxでゲストOSを2台作成　OS CentOS7
https://qiita.com/gama1234/items/a04517d12512bd262161

webサーバーは、一時的にブリッチ接続にしてhttpdをインストールしました。

WSLはインストール済みです。 インストール方法は、以下のサイトを参考にしてください
https://qiita.com/gama1234/items/5828b2b2e4e9e1365711

### 検証の手順
#### ローカル端末からWSLを開く
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2599002/84a0d3e1-d153-813c-ea91-ba33ed2102b4.png)
#### firewalldサービスを停止する
ファイアーウォールは接続に影響が出るため、firewalldサービスを停止し、サーバーの再起動時に、firewalldサービスが自動起動しない設定にしました。

踏み台サーバー 192.168.0.2
```
※ローカル端末のWSLからssh接続しました。
$ ssh 192.168.0.2
$ sudo su -
# systemctl stop firewalld
# systemctl disable firewalld
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
```

Webサーバー 10.0.1.1
```
※踏み台サーバー 192.168.0.2からssh接続しました。
$ ssh 10.0.1.1
$ sudo su -
# systemctl stop firewalld
# systemctl disable firewalld
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
```
#### httpdサービスを起動する
Webサーバー 10.0.1.1
```
# systemctl start httpd
# systemctl enable httpd
```
#### ローカルポートフォワーディングをした
ローカル端末でWSLを開き、ローカルポートフォワーディングを実行しました。
```
$ ssh root@192.168.0.2 -L 8080:10.0.1.1:80
```
#### 各サーバのポートの状態を確認した
ローカルポートフォワーディングした後、netstatコマンドを使用して、
各サーバーのポートの接続状態を確認した。

netstatコマンドのオプション
-a 全てのアクティブなソケットを表示する
-n ホストやユーザーの名前解決を行わず数字のまま出力する

netstatコマンドについて、以下のサイトで勉強しました。
https://atmarkit.itmedia.co.jp/ait/articles/1412/10/news003.html#opt

WSL(ローカル端末)　
ローカル端末は8080ポートで待ち受けてます。
```
test@DESKTOP-0S2U0NI:~$ netstat -an  | grep 8080
tcp        0      0 127.0.0.1:8080          0.0.0.0:*               LISTEN
tcp6       0      0 ::1:8080                :::*                    LISTEN
```
踏み台サーバー 
ローカル端末から踏み台サーバーにssh接続しています。
```
[root@localhost ~]# netstat -an | grep ESTA*
tcp        0      0 192.168.0.2:22          192.168.0.14:52222      ESTABLISHED
[root@localhost ~]#
```
Webサーバー
踏み台サーバーからWebサーバーにssh接続しています。
```
[root@localhost ~]# netstat -an | grep ESTA*
tcp        0      0 10.0.1.1:22             10.0.1.2:57112          ESTABLISHED
```
#### WSL(ローカル端末)でhttpdのページが開くことを確認した
ローカル端末からGoogleサイトを開き、以下のURLを入力する。
```
http://localhost:8080/
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2599002/871786e0-eae0-6664-5bea-6fe4379889bd.png)
### まとめ
ローカルポートフォワーディングを使用すると、ローカル端末から踏み台サーバー経由で、
外と通信できないサーバーの指定したポートに、アクセス出来ることが分かりました。

ユースケースは、踏み台サーバー経由でサーバーに接続する時に使用されているのを見たことがあります。
この記事が参考になれば幸いです。
AWSをUiPathで動かしてみたい_第3話(AWSスコープに変数を入れる)

## はじめに

①この記事はUiPathブログ発信チャレンジ2022サマーの23日目の記事です。
続々とUiPath記事が登場しますので、ぜひ投稿&閲覧&LGTMをしてくださいね！
参加方法は以下のブログを参照ください。
https://note.com/shumpei_w/n/n19383ce5abb1

②今回紹介するUiPathの情報は以下の通りです。
■Community Edition 2022.4

③この内容は、2022/7時点の情報です。
(バージョンやライセンス等の事情で内容が変更になる可能性があります)

③AWS環境はご自身で用意頂くなどの対応をお願いします。

④この記事は一応連載(?)しています。
よろしければご覧ください。
第2話：https://qiita.com/saosao885/items/ac5478b771c77dc26642
第1話：https://qiita.com/saosao885/items/ad0cb508eed33d93fbaa

## 前回(第2回)のおさらい

前回は、AWSのスコープで設定が必要なプロパティについて説明していきました。
 <b>・アクセスキーとシークレットアクセスキー</b>
 <b>・IAMロール</b>

## どっちで接続してみようか？
AWSのスコープのプロパティでは接続に関する箇所が2つあります。
どちらを使うといいのでしょう？
　・IAMロール
　・アクセスキー

なおアクティビティを配置したばかりだと、下記エラーが出ます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/502614/44f4aced-ff6b-35c1-1d3d-7beca051e23f.png)
赤字のところをよく見ると、IAMロールでもアクセスキーのどちらかで良さそう...。
本記事では第2回の記事中にアクセスキーを作成する部分を紹介したので、アクセスキーで接続で設定してみましょう。
今回は以下の変数を設定します。
　・strAccessKey(String型)：アクセスキーID
　・strSecAccessPass(SecureString型)：シークレットアクセスキー
　・aaa(String型)：変数strSecAccessPassに入れる為のシークレットアクセスキー(仮置き)

※今回は検証なので変数パネルに直接既定値を書いていますが、運用時はConfig等の設定ファイルを用意して読み込んでから使用する等の対応をお願いします。(アクセスキーもデリケートなところなので...)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/502614/1d930a73-14f8-eb1c-0d76-9c8966d87185.png)

### String→SecureStringへの変換
変数aaaにシークレットアクセスキーを仮置きしていますが、変数strSecAccessPassに入れるにはSecureString型への変換が必要です。
String型→SecureString型への変換方法は
「<b>new System.Net.NetworkCredential("",変換する文字型の変数)).SecurePassword</b>」です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/502614/80450b7d-3c9d-8fc8-5e90-9a1f720ed87d.png)
※「(new System.Net.NetworkCredential(String.Empty,aaa)).SecurePassword」のように""の部分は「String.Empty」でもOKです。

## 変数を入れてみよう&リージョンも設定
それでは変数をプロパティに入れてみよう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/502614/3e1b3ec1-c0e1-db65-2a90-d508081f6fda.png)

よし、エラーは出なくなった。
あとは領域(リージョン)を設定しましょう。
今回は東京リージョンで設定するので、「ap-northeast-1」で設定します。
もちろん、変数に持たせてもOKです(変数はString型です)。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/502614/5cda7778-d701-3ca9-0878-0ecbdb196635.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/502614/bcadb6fd-9ee8-78b3-753b-3f0fc03f79ac.png)
おお、これでスコープの設定ができた！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/502614/f27b4812-9765-231e-1709-d6b0f015d4aa.png)

### ちなみに
東京でもいいけど、大阪で設定する場合は「ap-northeast-3」を設定します。
※ap-northeast-2はソウル(韓国)になります。

## 次回は(予定)
IAMかEC2か、まずは何か動かすぞ～
ということで、IAMとかEC2を急いで復習しますー！
最後までお読みいただきありがとうございました！
◇Windowsのバッチファイルで日時を好みのフォーマットで作成

# ◇日時を好みのフォーマットで作成
バッチファイルの中で日付や曜日、時刻を表示したい時がありますが自由なフォーマットにするのは案外難しいです。
次の方法なら見た目にもシンプルで自由度が高いのでお勧めです。
フォーマットの書式は

|内容|変数|
|:-|:-:|
|西暦|%%1|
|月|%%2|
|日|%%3|
|曜日|%%4|
|時|%%5|
|分|%%6|
|秒|%%7|
|ミリ秒|%%8|

上記を参考に
|表記|記述式|
|:-|:-|
|YYYY/MM/DD(Week) HH:MM:SS.MS|%%1/%%2/%%3(%%4) %%5:%%6:%%7.%%8|
|MM/DD HH:MM|%%2/%%3 %%5:%%6|

のように区切り文字を自由に指定して必要ないものは省けます。
次にサンプルを掲載します。

## 日時を好みのフォーマットで作成のサンプル

```bat:YMDHMS.bat
@echo off


:: 遅延展開宣言 バグの原因になる場合があります;
setlocal enabledelayedexpansion


:: 日時を好みのフォーマットで作成;
set WeekChar="Sun,Mon,Tue,Wed,Thu,Fri,Sat"
powershell.exe "exit (Get-Date).DayOfWeek"
set /a WEEKDAY=%ERRORLEVEL% + 1
for /f "tokens=%WEEKDAY% delims=," %%w in (%WeekChar%) do set WEEK=%%w
for /f "tokens=1-8 delims=/:. " %%1 in ("%date% %WEEK% %time: =0%") do set YMDHMS=%%1/%%2/%%3/(%%4) %%5:%%6:%%7.%%8
echo 今の日時は%YMDHMS%です。


:: 終了処理（エクスプローラーから起動されていた場合はPauseする）;
:EndProcess
echo %cmdcmdline%|find /i "%~f0">NUL
if %ERRORLEVEL% equ 0 Pause
goto :end
```

### Powershellを使いたくない場合はツェラーの公式が使えます。

```bat:Powershell.DayOfWeek
powershell.exe "exit (Get-Date).DayOfWeek"
```
の代わりに
```bat:Zeller's congruence
set /a YY=%DATE:~0,4%
set /a MM=%DATE:~5,2%
set /a DD=%DATE:~8,2%
if %MM% leq 2 (set /a YY=%YY% - 1 && set /a MM=%MM% + 12)
set /a WEEKDAY=((%YY% + %YY% / 4 - %YY% / 100 + %YY% / 400 + (13 * %MM% + 8) / 5 + %DD%) %% 7) + 1
```
に変更します。

### 環境に依存しにくい日時の取得

コメントの指摘をもとに考えてみました。
作成したファイルから日付と時刻を取得していますので秒は取得できません。
```
type NUL>$$$
for %%0 in ($$$) do for /f "tokens=1-5 delims=/: " %%1 in ("%%~t0") do set YMDHM=%%1/%%2/%%3 %%4:%%5
del $$$
echo %YMDHM%
```

# おわりに

他にも「[⧉Windowsのバッチファイルのテクニックをご紹介します][]」にてご紹介させて頂いております。
お時間ありましたら覗いてみてください
お粗末様でした。

https://github.com/Aromatibus/

[⧉Windowsのバッチファイルのテクニックをご紹介します]: https://qiita.com/aromatibus/items/12fa4775f38c9889a686
◇Windowsのバッチファイルで入力された値が数値か確認する

# ◇入力された値が数値か確認する
サンプルのみ掲載します。

<details><summary>入力された値が数値か確認するサンプル</summary>

```bat:NumCheck.bat
@echo off


:: 遅延展開宣言 バグの原因になる場合があります;
setlocal enabledelayedexpansion


:: 入力されたものが指定された範囲の数値かチェックする;
:InputNumeric
set NumMin=10
set NumMax=100
echo 数値を%NumMin%～%NumMax%の範囲で入力してください。
set /p Num=">"
:: 数値チェック;
call :IsInteger %%Num%%
if %ERRORLEVEL% neq 0 (
  echo 数値以外が含まれています。
  goto :InputNumeric
)
:: 指定サイズチェック; ifを重ねて AND を判定をしています。;
if %Num% geq %NumMin% if %Num% leq %NumMax% goto :InputNumericEnd
echo 入力する数値が指定可能な範囲外です。
echo.
goto :InputNumeric
:InputNumericEnd
echo.
echo 入力された数値は [%Num%] でした。


:: 終了処理（エクスプローラーから起動されていた場合はPauseする）;
:EndProcess
echo %cmdcmdline% | find /i "%~f0">NUL
if %ERRORLEVEL% equ 0 Pause
goto :end


:: 変数が数値かチェック;
:IsInteger
set X=%1
if "%X%" equ "" exit /b -1
if defined X set X=%X:0=%
if defined X set X=%X:1=%
if defined X set X=%X:2=%
if defined X set X=%X:3=%
if defined X set X=%X:4=%
if defined X set X=%X:5=%
if defined X set X=%X:6=%
if defined X set X=%X:7=%
if defined X set X=%X:8=%
if defined X set X=%X:9=%
if not defined X exit /b 0
exit /b -1
```
</details>


# おわりに

他にも「[⧉Windowsのバッチファイルのテクニックをご紹介します][]」にてご紹介させて頂いております。
お時間ありましたら覗いてみてください
お粗末様でした。

https://github.com/Aromatibus/

[⧉Windowsのバッチファイルのテクニックをご紹介します]: https://qiita.com/aromatibus/items/12fa4775f38c9889a686
AWS S3 ストレージクラスを料金含めて比較してみた！


## 概要

AWS S3のストレージクラスは、種類がたくさんあるので、どれ選んだらいいか迷うことも多いのではないでしょうか？
そこで各ストレージクラスの特徴と料金を一覧表にまとめてみました。
S3ストレージクラスの選定の材料にして頂ければ幸いです。

## 比較

|クラス名  |主な用途  |詳細  |料金(東京リージョン、 10GB/月あたり) |
| --- | --- | --- | --- |
| S3 標準 | アクセス頻度が高いデータ向け | 標準的なストレージクラス。<br>複数のアベイラビリティゾーン (AZ)に保存されるため、安全性が高い。  | 約15円 |
| S3 Intelligent-Tiering | アクセス頻度が高いデータと低いデータが混在 | アクセス頻度が時期によって変化する、もしくはアクセス頻度が高いデータと低いデータが混在している場合、自動的に最適化を行う。 | 約33円 |
| S3 標準 - IA | アクセス頻度が低いデータ向け | アクセス頻度が低いが、必要に応じてすぐ取り出す必要があるデータ向け。<br>複数のアベイラビリティゾーン (AZ)に保存されるため、安全性が高い。 | 約18円 |
| S3 1 zone - IA | アクセス頻度が低いデータ向け | アクセス頻度が低いが、必要に応じてすぐ取り出す必要があるデータ向け。<br>1つのアベイラビリティゾーン (AZ)に保存されるため、「S3標準- IA」と比べ安全性が低い。 | 約14円 |
| S3 Glacier Instant Retrieval | アーカイブ | 年1〜4回アクセスされる低頻度データ向け。<br>アーカイブ・ストレージの中で最速のアクセスが可能。 <br> 2021/11に新たに追加された。| 約8円 |
| S3 Glacier Flexible Retrieval<br>（旧 S3 Glacier) | アーカイブ | 年に1〜2回のアクセスされる低頻度データ向け。<br>取り出しに数時間までかかることがある。<br>バックアップや災害対策用途。 | 約7円 |
| S3 Glacier Deep Archive | アーカイブ | 年に1〜2回のアクセスされる低頻度データ向け。<br>取り出しに半日かかることがある。<br>法令要件を満たすため、〜10年以上の長期間の保管が前提のデータクラス。<br>規制が厳しい業界向き。 | 約3円 |

## 備考

- [Amazon S3 ストレージクラス](https://aws.amazon.com/jp/s3/storage-classes/)。
- 料金は、2022年7月時点、 [AWS料金見積もり](https://calculator.s3.amazonaws.com/index.html?lng=ja_JP)にて確認。
- 円ドルの交換レートは、1$ = 130円で換算。
Octave で中心化と標準化

# Octave で中心化と標準化

元データから平均値を引く（中心化 `center`），更に標準偏差で割る（標準化　`zscore`）を行う。

    usage:
    center(x)
    center(x, dim)
    
    z = zscore (x)
    z = zscore (x, opt)
    z = zscore (x, opt, dim)
    [z, mu, sigma] = zscore (…)
    
    opt=0(デフォルト) 不偏分散の平方根, opt=1 不偏ではない分散の平方根 を使う
    dim を指定するときには opt を明示的に指定しなければならない


## 中心化 `center()`


```matlab
x = [11, 12, 13, 14, 15]
center(x)
```

    x =
    
       11   12   13   14   15
    
    ans =
    
      -2  -1   0   1   2
    



```matlab
y = [11, 12, 13, 14, 15; 1, 2, 3, 4, 5; 21, 22, 23, 24, 25]
center(y) # dim = 1
```

    y =
    
       11   12   13   14   15
        1    2    3    4    5
       21   22   23   24   25
    
    ans =
    
        0    0    0    0    0
      -10  -10  -10  -10  -10
       10   10   10   10   10
    



```matlab
center(y, dim = 2)
```

    ans =
    
      -2  -1   0   1   2
      -2  -1   0   1   2
      -2  -1   0   1   2
    


## 標準化（正規化） `zscoer()`



```matlab
format short
zscore(x)
```

    ans =
    
      -1.2649  -0.6325        0   0.6325   1.2649
    



```matlab
zscore(y) # dim = 1
```

    ans =
    
       0   0   0   0   0
      -1  -1  -1  -1  -1
       1   1   1   1   1
    



```matlab
zscore(y, opt=0, dim = 2)
```

    ans =
    
      -1.2649  -0.6325        0   0.6325   1.2649
      -1.2649  -0.6325        0   0.6325   1.2649
      -1.2649  -0.6325        0   0.6325   1.2649
    



```matlab
zscore(y, opt=1, dim = 2)
```

    ans =
    
      -1.4142  -0.7071        0   0.7071   1.4142
      -1.4142  -0.7071        0   0.7071   1.4142
      -1.4142  -0.7071        0   0.7071   1.4142
    



```matlab
[z, mu, sigma] = zscore(y, opt=0, dim = 2)
```

    z =
    
      -1.2649  -0.6325        0   0.6325   1.2649
      -1.2649  -0.6325        0   0.6325   1.2649
      -1.2649  -0.6325        0   0.6325   1.2649
    
    mu =
    
       13
        3
       23
    
    sigma =
    
       1.5811
       1.5811
       1.5811