OmniAICreator/Qiita-1.07M huggingface dataset:
swift実践入門output　Chapter5 

#制御構文 
 条件分岐、繰り返し、遅延実行、パターンマッチ
プログラムの実行フローを制御する構文。制御フローの制御には条件分岐や繰り返しなどがあり、それを組み合わせ実行し自在に操る

###if 文　条件の成否による分岐

```chapter5.swift
let value = 5

if value <= 4 {
    print("valueは４以下")
}else {
    print("valueは５以上")
}
```

###if let文　値の有無による分岐
オプショナル型とは変数にnilの代入を許容するデータ型で、反対に非オプショナル型はnilを代入できません。オプショナル型の変数にはデータ型の最後に「?」か「!」をつけます。

```chapter5.swift
let optionalA = Optional(1)

if let a = optionalA {
    print("値は\(a)です")
}else {
    print("値は存在しません")
}

let optionalB = Optional("b")
let optionalC = Optional("c")

if let b = optionalB, let c = optionalC{
    print("値は\(b)と\(c)ですよ")
}else {
    print("ない")
}
```

###guardl文　条件不成立時に早期退出する分岐

guard文は、条件を満たさない場合の処理を記述する構文です。
条件を満たさない場合には、メソッドを終了したり、繰り返し処理を終了したり、スコープを抜けるための処理を書く必要がある。

guard文を使って条件を満たさない場合に処理を抜けるコード

```chapter5.swift
//guard 条件式　else {
//　　条件式がfalseの場合実行される文
//　　guard文が記述されているスコープ文に退出する必要がある
//}

func someFunction() {
    let value = -1
    
    guard value >= 0 else {
        print("0未満の値")
        return
    }
    print(value)
}
someFunction()
```

###guard文のスコープ外への退出の強制
```chapter5.swift
func printIfPositive(_ a: Int) {
    guard a > 0 else {
        return
    }
    print(a)
}
printIfPositive(6)
```
###guard文で宣言された変数や定数へのアクセス

guard let文とif letぶんの違いは
guard　let文で宣言された変数や定数は guard let文以降で利用可能という点

```chapter5.swift
func someFONCTION() {
    let a :Any = 3
    
    guard let int = a as? Int else {
        print("aはInt型ではありません")
        return
    }
    print("値はInt型の\(int)です")
}
someFONCTION()

func checkInt(num:Int) {
    guard num >= 0 else {
        print("マイナスです")
        return
    }
    print("プラスです")
}
 
checkInt(num:-10)
checkInt(num:10)
```

###switch文　複数のパターンマッチによる分岐
```chapter5.swift
let r = -1
switch  r {
case Int.min ..< 0:
    print("rは負の数")
    
case 1 ..< Int.max:
    print("rは正の数")
default:
    print("aは0")
}
```

###ケースの網羅性のチェック
```chapter5.swift
enum SomeEnum {
    case foo
    case bar
    case baz
}

let foo = SomeEnum.foo

switch foo {
case .foo:
    print(".foo")
    
case .bar:
    print(".bar")
    
case .baz:
    print(".baz")

}
```
###whereキーワード　　ケースにマッチする条件の追加
```chapter5.swift
let optionalP: Int? = 12

switch optionalP {
case .some(let a) where a > 10:
    print("10より大きい値\(a)が存在します")
default:
    print("値が存在しない、もしくは、10以下")
}

let g = 1

switch g {
case 1:
    print("実行される")
    break
    print("実行されない")
default:
    break
}
```
コーセラのマシンラーニング講義

コーセラで人気の機械学習の講義を受講して、重要なポイントをまとめていきたいと思います。
https://www.coursera.org/learn/machine-learning/home/welcome

# 教師あり学習
縦軸に家賃y、横軸に家の広さx、をプロットしたとき

# 仮説
h

```
hθ(x)=θ0+θ1x
```

xの値からyの値を予測する。
hは線形近似した関数。θ0は切片、θ1は傾きに相当する。

# コスト関数
J
学習データを仮説に当てはめてみて、どれだけ予測できているかを測る指標。
簡単に言えば、ズレの2乗を足し合わせて、データ個数で割ったもの。（ズレの平均値）

```
J=1/2mΣ(hx-y)^2
```

# 最急降下法
関数の傾きから、関数の最小値を連続的に探索していくアルゴリズム。

# Octaveで実行
Octaveをインストールし、コマンドラインでoctaveと入力すればOctaveのモードに入る。

```
octave:10> A=[1 2; 3 4; 5 6]
A =

   1   2
   3   4
   5   6

octave:13> who
Variables in the current scope:

A
```
whoで定義されてる変数が確認できる。

# プログラミング課題1
急に出題されるプログラミング課題。最初はどう実行するか戸惑うと思う。
ダウンロードされたZip（machine-learning-ex1.zip）の中の、説明PDFを読んで進めていく。
ただし、PDFの内容がけっこうヘビーなので、じっくり取り組む必要がある。

ざっくりと言えば、Octave環境で、ダウンロードしたZipを展開したディレクトリに移動し、ex1を実行すればいい。
そうすると、そのex1から各課題のファイルが順次読み込まれて実行される仕組みになっている。
まず最初は「warmUpExercise」から。
warmUpExercise.mを開き、YOUR CODE HEREの中に、A = eye(5);と追記し、ex1を実行する。

```
octave:41> ex1
Running warmUpExercise ... 
5x5 Identity Matrix: 
ans =

Diagonal Matrix

   1  0   0   0   0 
  0    1  0   0   0 
  0   0    1  0   0 
  0   0   0    1  0 
  0   0   0   0    1

Program paused. Press enter to continue.
```

通った！
次のplotDataもコードを書き写すだけだが、その次のcomputeCostがヘビー。
コスト関数Jを定義する。自分は下記のように書いた。

``` c++:computeCost.m
for i = 1:length(y)
    J=J+(X(i,:)*theta-y(i,:))^2;
end

J = J/(2*m);
```
この数式を実装したもの。
<img width="715" alt="Screen Shot 2020-06-06 at 13.17.04.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80263/2c77a49a-a51f-9e39-dce5-812a68c39feb.png">

そして、gradientDescent。最急降下法でθの最小値を見つける。

```c++:gradientDescent.m
tmp=zeros(2, 1);
for i = 1:m
    tmp(1)=tmp(1)+(X(i,:)*theta-y(i,:))*X(i,1);
    tmp(2)=tmp(2)+(X(i,:)*theta-y(i,:))*X(i,2);
end

theta=theta-(alpha*tmp/m);
```

この数式を実装したもの。今回はjは0,1の2つ。
<img width="823" alt="Screen Shot 2020-06-06 at 13.20.48.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80263/e67f1ec5-7938-4bed-fd67-af68161489be.png">

# プログラミング課題2
## 1: plotData.m
読み込んだサンプルデータをプロットするコードを書く。最初の問題なのでPDFの説明をそのままコピペするだけ。
Octaveのプロットに関する書式は覚えておくとよさそう。

```c++:plotData.m
% Find Indices of Positive and Negative Examples
pos = find(y==1); neg = find(y == 0);

% Plot Examples
plot(X(pos, 1), X(pos, 2), 'k+','LineWidth', 2, ...
     'MarkerSize', 7);
plot(X(neg, 1), X(neg, 2), 'ko', 'MarkerFaceColor', 'y', ...
    'MarkerSize', 7);
```
<img width="752" alt="Screen Shot 2020-07-30 at 11.52.11.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80263/2f2fd260-be96-e5d0-435d-1004749d45cf.png">


## 2: sigmoid.m
下記のシグモイド関数をコードで表現する。要素ごとの計算にしないとうまく動かない。
<img width="185" alt="Screen Shot 2020-07-30 at 12.34.38.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80263/b5c047a2-61b0-5913-c62b-4b568386c655.png">

```c++:sigmoid.m
g = 1./(1+e.^-z);
```

## 3: 
```c++:costFunction.m
for i = 1:m
    J = J+(-y(i,:).*log(sigmoid(theta'.*X(i,:)))-(1-y(i,:)).*log(1-sigmoid(theta'.*X(i,:))));
end
J = J./m;
J = J(:,1);
```
AIスピーカー/GoogleHomeで複数の質問の回答を集めてサーバにデータ保存する

# 実現したいこと
AIスピーカーとの対話で、サーバにデータ登録を行いたい。
具体的に今回は、下記の情報を集めて、バスを配車予約するサンプルを作成してみる。

- 日付（いつ乗りますか？）
- 時刻（何時に乗りますか？）
- 乗車場所（どこから乗りますか？）
- 降車場所（どこまで乗りますか？）
- 人数（何人で乗りますか？）

# プロジェクトを登録
まずは、下記ページから新規PJを登録する。
https://console.actions.google.com/

# ダイアログを登録する
次に下記のDialogflowサービスで、該当のプロジェクトの動作を作成していく。
https://dialogflow.cloud.google.com/

## サーバリクエストを行う
今回はWebhookという機能を利用して、自分のサーバへ、ユーザの回答を送信する仕組みにする。
Dialogflowのfulfilmentから、webhookのURLに自分のサーバの処理したいプログラムを指定する。
<img width="614" alt="Screen Shot 2020-06-23 at 21.14.23.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80263/187058f7-7025-ef01-a2c3-88f9eaab0550.png">


サーバ側はPHPであれば例えば下記のようにJSON形式のパラメータを受け取ることができる。

```php:sample.php
// パラメータの受け取り
$update_response = file_get_contents("php://input");
$update          = json_decode($update_response, true);
echo $update["queryResult"]["parameters"]["hour"]
```

## Contextを引き回す
何も考えずに会話を実装すると、1会話ごとに過去の回答を忘れてしまうため、Context（文脈/前後関係）機能を用いて、過去の回答を引き継いでいくようにする。

## 対話の実装
DialogflowのIntentsで、本体となる対話機能を作成する。
<img width="949" alt="Screen Shot 2020-06-23 at 20.54.49.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80263/03fa5651-a3a3-03c7-4ee8-522262044856.png">
### ①：コンテキストを登録する
一連の対話には、同一のContextを指定する。ここでは「mob-rev」とした。

### ②：トリガーとなるフレーズを登録する
ここではユーザが「○○時」という形式で回答した際に、動作するようにした。
また、hourの部分をダブルクリックし、パラメータとして取得できるようにデータ形式を登録する。
ここでは数値ということで「@sys.number」を指定した。

### ③：アクションの指定
この"アクション"はサーバ側で受け取った際に、どのIntentからの回答かを区別するために使われる。
ここでは「getHour」とした。

```php:sample.php
if($update["queryResult"]["action"] == "getHour"){
   // この回答の場合に実行したい処理
}
```

### ④：パラメータの指定
サーバ側で受け取るパラメータを指定する。
今回のケースでは、ユーザの「〇〇時」という回答から、〇〇の部分をhourというパラメータで受け取るように指定している。

```php:sample.php
$hour       = $update["queryResult"]["parameters"]["hour"];
$speech_txt = $hour . "時ですね。";
```

### ⑤：webhookの有効化
これを有効化することで、指定したサーバURLにリクエストが飛ぶ。

# デバッグする
【Android】adb shell でエミュレーターの SQLite にアクセスする方法

## はじめに

Android 開発で SQLite の中身を確認したいとき、データをローカルに持ってきて DB Browser for SQLite を使う方法もありますが、何度も確認したいときにこれをやるのは少々手間になります。

CLI で DB の中身をササッと確認する方法を調べたのでメモしておきたいと思います。

## 1. エミュレーターの起動

起動させるエミュレーターは Google Play が実装されていないものを選びます。

市販の端末や Google Play が実装されているエミュレーターを使用すると、権限の問題で sqlite3 コマンドが実行できません。

Google Play が実装されているエミュレーターに `adb shell` で入り、`sqlite3` コマンドを叩いても `not found` となります。

```
$ sqlite3
$ /system/bin/sh: sqlite3: not found
```

Play Store にマークがついていないエミュレーターを選択してください（私はここでハマりました...）。

![スクリーンショット 2020-11-15 20.28.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/238891/b14ff5dd-32fc-5cbb-bbbb-e2e227d02aae.png)

参考:
https://teratail.com/questions/186703https://teratail.com/questions/186703
https://developer.android.com/studio/run/managing-avds?hl=ja#system-image

## 2. シェルの起動

プロジェクトのディレクトリに移動して以下のコマンドを叩くと、エミュレーターに対してシェルを実行できる状態になります。

```
$ cd /path/to/project
$ adb shell
```

## 3. 内部ストレージに移動

 sqlite ファイルは端末内の以下のディレクトリに保存されています。

```
/data/data/パッケージ名/databases/
```

`adb shell` を実行した段階ではこのディレクトリへのアクセス権限がないため、次のコマンドを叩いて権限を取得します（`com.example.packagename` の部分は自分のパッケージ名に置き換えてください。）。

```
$ run-as com.example.packagename
```

すると `/data/data/パッケージ名/` まで自動的に移動され、`databases` ディレクトリにもアクセスできるようになります。

## 4. SQLite の実行

最後に以下のコマンドで SQLite が立ち上がるかと思います（`my_database` は自分のデータベース名に置き換えてください）。

```
$ sqlite3 databases/my_database
SQLite version 3.22.0 2018-12-19 01:30:22
Enter ".help" for usage hints.
sqlite> 
```

これで好きなように SQLite コマンドを叩くことができます！
Splunk DLTK : XGBoost + SHAPのサンプルコードを実行してみる


# はじめに

前回の[記事]()では DLTKに含まれるXGBoostのサンプルコードを実行してみました。今回は前回に続いて もうひとつのサンプルコードであるXGBoost+SHAPを実行しながら、どう使うのかを見ていきたいと思います。

**SHAPとは？**

今回SHAPについてこちらの記事を参考にさせていただきました。
https://qiita.com/shin_mura/items/cde01198552eda9146b7

機械学習などはよくブラックボックスでどうしてこのような結果になったかはわからない。と言われますが最近ではこのブラックボックスを説明できるようにする動きも活発で、このShapもその一つです。予測したモデルの中でどの特徴量がどのくらい影響したのかを可視化することで、説明できるようにしております。

# DLTKのサンプルコードをみてみる

最初はライブラリーのインポートです。今回はxgboostとshap が入ってますね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/392303/0ecad548-f0eb-de58-bfab-7f5cd8df2e21.png)

### Stage1: データを取り込み
DLTKではデータの取り込みはSplunkからになるため、notebookにあるSPLをSplunkで実行します。 サンプルデータは diabetes.csv で、身体情報から糖尿病を予測するモデルを作るみたいですね。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/392303/32fde7bf-7e19-4d47-a333-0f2dfa247f69.png)

ちなみにSplunkで実行した結果は以下の通りです。(注: mode=stageが抜けているので、以下のように追加して実行してください）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/392303/1d17fd03-c0e0-c075-7569-a310b582bef9.png)

### Stege2:初期化
特になにもしていないですね。おそらく次の学習stageでまとめて書いていると思われます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/392303/8a5f6aa7-24d7-03e0-71d1-e79c8a36d2dc.png)

### Stage3: モデルの学習(fit)
取得したデータから目的変数と説明変数をセットして、SPLの実行時にオプションとして learning_rateがあればそれをセットします。次に xgboostのモデルを学習します。今回は分類なので xgboostアルゴリズムですね。

その次にあるmodel['shap_values']・・・の箇所で、先ほど学習したモデル(xgboost)を shapにセットしリターン

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/392303/a0b71263-8737-465c-8c82-a9ac1e3eb166.png)

### Stage4: 適用(apply)
最初のplot_to_base64では、作成されたグラフ図を保存する関数です。Splunkのダッシュボードでplot図を表示する際に利用されます。

applyの関数部分では、学習済みのモデルを使って、適用が始まります。
モデルを使って予測した結果を result に入れてリターンしますが、その間に shap+matplotlibを使って図を説明図を完成させます。plot図の種類はオプションとして引数で指定できて、サンプルコードだと violinとなってました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/392303/dc09503e-f7a1-e555-1223-c1678f8af30f.png)

それぞれのオプションを変更したときの結果を表示させてみます。

plot=violin

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/392303/e980fee7-78e0-2e99-8b42-0fa52718ed82.png)

plot=layered_violin
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/392303/8eae6dfd-675c-dec5-4649-1d30198195c6.png)

plot=bar
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/392303/64371731-abf4-3368-a533-2be7a89cdb3d.png)


### その他Stage
その他のコードはこんな感じです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/392303/99bdb745-d5a7-c230-23ac-6fa280ec2cb1.png)

# ダッシュボードでの実行

DLTKではサンプルコードだけでなく、サンプルのダッシュボードも用意されております。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/392303/5faf4a8b-2da3-3f57-9178-d79a256b68bc.png)

こんな感じで、オプションの learning_rateやplot図も選択できるようにっております。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/392303/5aef945b-7691-8365-f124-372e1cd90f26.png)

サイコーです。

# まとめ

plot図をダッシュボードに組み込む方法など非常に参考になりました。
Ubuntu 20.04.1 LTSでのWake on Lan設定

参考にした記事が自分の環境と合わなかったので今後の為にメモ書き

1：BIOS設定
・WoLを有効にする

2：OS設定
・ethtoolをインストールする

```
$ sudo apt install ethtool
```

・ifconfigでNIC名を確認
・WoLの状態を確認

```
$ sudo ethtool enp2s0 | grep Wake-on:
	Supports Wake-on: pumbg
	Wake-on: d
```
無効化されている場合は Wake-on: d となる

・有効化する

```
$ sudo ethtool -s enp2s0 wol g
```

・再確認

```
$ sudo ethtool enp2s0 | grep Wake-on:
	Supports Wake-on: pumbg
	Wake-on: g
```
Wake-on: g となっていることを確認
コマンドでWoLを有効化したが、再起動すると元に戻るので自動実行の設定をする

3：自動実行設定

```
$ sudo sh -c "echo '#! /bin/sh
### BEGIN INIT INFO
# Provides:	wakeonlan
# Required-Start:
# Required-Stop:
# Should-Start:
# Default-Start:	2 3 4 5
# Default-Stop:
# Short-Description:	wakeonlan
### END INIT INFO
sudo ethtool -s enp2s0 wol g
exit' > /etc/init.d/wakeonlan"
```
※BEGIN INIT INFOのコメント欄は入れないと設定ができないので必ず入れる

```
sudo chmod +x /etc/init.d/wakeonlan
sudo update-rc.d wakeonlan defaults
```

・自動化設定が出来たか確認

```
$ ls -l /etc/rc*.d/*wakeonlan
lrwxrwxrwx 1 root root 19 11月 15 21:42 /etc/rc2.d/S01wakeonlan -> ../init.d/wakeonlan
lrwxrwxrwx 1 root root 19 11月 15 21:42 /etc/rc3.d/S01wakeonlan -> ../init.d/wakeonlan
lrwxrwxrwx 1 root root 19 11月 15 21:42 /etc/rc4.d/S01wakeonlan -> ../init.d/wakeonlan
lrwxrwxrwx 1 root root 19 11月 15 21:42 /etc/rc5.d/S01wakeonlan -> ../init.d/wakeonlan
```



ここまでできたら再起動して Wake-on: g になっていることが確認できたら完了
マジックパケットの送信に関しては、Windowsからなら「Wake On LAN for Windows Ver3.01」を
iOSからは「Wolow」というアプリを使用、詳細は割愛
Zabbixのログイン画面「Cannot start session.」

Zabbixのログイン画面が表示されない。

```:エラー
Cannot start session.
```

# sessionの所有者は？
[PHPのアップデートで`session`の所有者が変わる事象](https://higherhope.net/?p=3341)があるらしい。

```
 ll /var/lib/php/
合計 16
drwxrwx--- 2 root apache     6 10月 28 01:22 opcache
drwxr-xr-x 2 root root       6 10月 28 01:22 peclxml
drwxrwx--- 2 root apache 12288 10月 28 01:22 session
drwxrwx--- 2 root apache     6 10月 28 01:22 wsdlcache
```

nginxを使っているので、nginxユーザに変更してあげると解決

```
chown -R nginx:nginx /var/lib/php/
```
Railsのサーバーが起動できない時の対処法

# はじめに
初めまして。
私は未経験エンジニアとして転職するべく、１週間前にMacBookProを購入し、Progateで学習をしている者です。
早速ですが、Ruby on Railsの環境構築をする時に詰みました。

# rails s が起動しない
Progateに言われるがままAtom, Homebrew, rbenv, Railsをインストールし、後はローカルでサーバーを建てるだけ。
しかし、

```
rails s
```

と入力すると

```
Could not find gem 'rails (~> 6.0.3, >= 6.0.3.4)' in any of the gem sources listed in your Gemfile.
Run `bundle install` to install missing gems.
```

何のことやら。
とりあえず

```
bundle install
```

と入力しろと書いてあるので実行してみます。

```
An error occurred while installing bindex (0.8.1), and Bundler
cannot continue.
Make sure that `gem install bindex -v '0.8.1' --source 'https://rubygems.org/'`
succeeds before bundling.
```

初学者の心を折りに来ています。
Google先生に聞くこと数時間、

```
sudo gem install bindex -v '0.8.1'
```

これでパスワードを入力してインストールすれば良いみたいです。
さて、再度bundle installを実行すると、

```
An error occurred while installing msgpack (1.3.3), and Bundler
cannot continue.
Make sure that `gem install msgpack -v '1.3.3' --source 'https://rubygems.org/'`
succeeds before bundling.
```

またですか。
しかし、同じように

```
sudo gem install msgpack -v '1.3.3'
```

でインストールしていきます。
このあともbundle installを実行しては足りないものをインストールする作業を繰り返していき、最終的にはrails sが実行できるようになりました。
# おわりに
私のように出鼻をくじかれている方の助けになれば幸いです。
Hyper-vでVMがゾンビになったら

windowsのHyper-vでVmがゾンビになってしまった時の対処法（の一つ）を備忘録として書いておく。

# 現象（一例）

VMをつかったなんやらで立ち上げたり削除したりしようとしてこんなエラーが出る。

```
Exiting due to GUEST_FILE_IN_USE: 
remove C:\Users\hogehoge\.minikube\machines\minikube\minikube\Virtual Machines\7564XXXXXXXXXXX.vmcx: 
The process cannot access the file because it is being used by another process.
```


Hyper-vマネージャを確認するが、それらしきインスタンスはない。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/284794/d11cdd1b-d798-f4a6-da69-31f3fb704fff.png)


再起動したら直るか。。？（古典）

=> 治らない（なぜ？ わかる方いたら教えてください）


# 解決策（の一つ）

VMまわりをつかさどっている `vmms.exe` を再起動する。

（PowerShellは管理者であげましょう）

```
Get-Service vmms | Restart-Service
```

ただ、単に再起動しても同じゾンビプロセスが上がってしまう謎現象が発生したので、

```
Get-Service vmms
Running  vmms               Hyper-V Virtual Machine Management   

Stop-Service vmms
Stopped  vmms               Hyper-V Virtual Machine Management

(ここで問題のVMをどうにかする。ファイルを消すとかなんとか）

Start-Service vmms
```

=> 解決。


参考: http://woshub.com/how-to-stop-a-hung-virtual-machine-on-hyper-v-2016/
Vue-router基本まとめ　備忘録

#Vou-router

###  VueRouterとは
Webページのルーティングを実装してくれる公式のプラグイン。ユーザーが入力したパスに対してどのようなページ（コンポーネント）を渡すのかをVueRouterによって定義される。

### router-rink
- router-linkコンポーネントはナビゲーションとして使われる
- リンク先を'to'プロパティに指定
- デフォルトで\<router-link>は\<a>タグとして描画される

```
<p>
  <router-link to="/foo">Go to Foo</router-link>
  <router-link to="/Bar">Go to Bar</router-link>
</p>
```

### router-view

- ルートとマッチしたコンポーネントがここへ描画される

```
<router-view></router-view>
```

### Routerの設定
```
// 1. ルートコンポーネントを定義する
// 他のファイルからインポートすることもできます
const Foo = { template: '<div>foo</div>' }
const Bar = { template: '<div>bar</div>' }

// 2. ルートをいくつか定義する
// 各ルートは 1 つのコンポーネントとマッピングされる必要がある。
// このコンポーネントは実際の `Vue.extend()`、
// またはコンポーネントオプションのオブジェクトでも構わない
const routes = [
  { path: '/foo', component: Foo },
  { path: '/bar', component: Bar }
]

// 3. ルーターインスタンスを作成して、ルートオプションを渡す
const router = new VueRouter({
  routes // `routes: routes` の短縮表記
})

// 4. root となるインスタンスを作成してマウントする
// アプリケーション全体がルーターを認知できるように、
// ルーターをインジェクトすることを忘れない。
const app = new Vue({
  router
}).$mount('#app')

```
- モジュールシステムを使っている場合 (例: vue-cli 経由で)、Vue と VueRouter をインポートし、`Vue.use(VueRouter)` を呼び出す必要がある。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/602844/2a11880e-bdec-ec3e-5c25-d65575ee60e3.png)


### 動的ルートマッチング
- パターンを使って同じコンポーネントにルートをマップする必要がしばしばある。例えば、異なるユーザーIDを持つ場合など。これで /user/foo や /user/bar などの URL 両方とも同じルートにマッチする。

- 動的セグメントはコロン:を使って表される

```
const User = {
  template: '<div>User</div>'
}

const router = new VueRouter({
  routes: [
    // コロンで始まる動的セグメント
    { path: '/user/:id', component: User }
  ]
})
```

- ルートがマッチした時、動的セグメントの値は全てのコンポーネント内でthis.$router.paramsとして利用可能

```
const User = {
  template: '<div>User {{ $route.params.id }}</div>'
}
```
実際の画像:pathの値によって動的に変化する

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/602844/a65e8e97-8421-8ab0-cc76-690a20980883.png)

### パラメーター変更の検知

- ルートのパラメーターを使う際に特筆すべき点は、ユーザーが /user/foo から /user/bar へ遷移するときに同じコンポーネントインスタンスが再利用されるということ
- これはコンポーネントのライフサイクルフックが呼ばれないことを意味している
- 同じコンポーネントでパラメーター変更を検知するためには、 $route オブジェクトを watch する、またはbeforeRouteUpdateナビゲーションガードを使用

```
const User = {
  template: '...',
  watch: {
    $route (to, from) {
      // ルートの変更の検知...
    }
  }
}
```

```
const User = {
  template: '...',
  beforeRouteUpdate (to, from, next) {
    // ルート変更に反応する...
    // next() を呼び出すのを忘れないでください
  }
}
```

### すべてキャッチするルート/404 Not fountルート

通常のパラメータは、/ で区切られた url フラグメントの間にある文字だけにマッチする。何でも一致させたい場合は、アスタリスク(*)を使うことができる.

```
{
  // 全てにマッチします
  path: '*'
}
{
  // `/user-`から始まる任意のものにマッチします
  path: '/user-*'
}
```
- アスタリスク ルートを使用するときは、アスタリスク ルートが最後になるようにルートを正しく順序付けてる。
- { path: '*' }ルートは、通常クライアントサイドの404ページで使われる

### マッチングの優先度

しばしば同じURLで複数のルートがマッチすることがあります。そのようなケースではマッチングの優先度はルートの定義された順番によって決定されます。先に定義されたルートほど優先度が高くなります。

つまり、404のエラーページへのルートは最後におく
リモートブランチをうまくローカルにcheckoutできない？

<!-- はじめに -->
Aさんは、Bさんのpull requestをレビューするために、Bさんがリモートレポジトリにpushした`feature/B`ブランチを自分のローカルに持ってきたい。
けれども、わざわざ`git clone -b feature/B git@github.com:project-ab/git-sample.git`でレポジトリ全体をcloneしてくるのは時間がかかるし、避けたい。
<img width=600 src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/521914/c778c752-7583-8fed-9c10-5d2a45a27fa3.png">

<!-- リモートブランチをcheckoutしてみる -->
## リモートブランチをcheckoutしてみる
[gitでリモートブランチをローカルにcheckoutする](https://qiita.com/YusukeSuzuki@github/items/3bd5752783fd2c2f8805)を参考に、Aさんはリモートブランチ`origin/feature/B`をcheckoutしてみる[^1]が、うまくいかない。

```bash
MINGW64 ~/git-sample (main)
$ git checkout -b feature/B origin/feature/B

fatal: 'origin/feature/B' is not a commit and a branch 'feature/B' cannot be created from it
```

<!-- 追跡していないリモートブランチは、まずfetchしてくる必要がある -->
## 追跡していないリモートブランチは、まずfetchしてくる必要がある
原因は、リモートブランチ`origin/feature/B`をローカルで追跡できていないから。（下図だとリモート追跡ブランチは`origin/main`と`origin/feature/A`のみ）

```bash
$ git branch -a

  feature/A
* main
  remotes/origin/HEAD -> origin/main
  remotes/origin/feature/A
  remotes/origin/main
```

fetchしてからcheckoutするとうまくいく。

```bash
$ git fetch origin feature/B

remote: Enumerating objects: 4, done.
remote: Counting objects: 100% (4/4), done.
remote: Compressing objects: 100% (2/2), done.
Unpacking objects: 100% (3/3), 245 bytes | 30.00 KiB/s, done.
remote: Total 3 (delta 0), reused 3 (delta 0), pack-reused 0
From github.com:project-ab/git-sample
 * branch            feature/B  -> FETCH_HEAD
 * [new branch]      feature/B  -> origin/feature/B
```
```bash
$ git checkout -b feature/B origin/feature/B

Switched to a new branch 'feature/B'
Branch 'feature/B' set up to track remote branch 'feature/B' from 'origin'.
```

成功👍

<!-- もっと楽な方法 -->
## もっと楽な方法
リモートブランチを丸ごとすべて持ってくる。

```bash
$ git fetch

From github.com:project-ab/git-sample
 * [new branch]      feature/B  -> origin/feature/B
```

`git checkout -b feature/B origin/feature/B`の代わりに`git checkout feature/B`とするだけで、リモート追跡ブランチからローカルブランチ`feature/B`を作成し、そこへcheckoutしてくれる。

```bash
$ git checkout feature/B

Switched to a new branch 'feature/B'
Branch 'feature/B' set up to track remote branch 'feature/B' from 'origin'.
```

<!-- 参考になる記事 -->
## 参考になる記事
- [Git で「追跡ブランチ」って言うのやめましょう](https://qiita.com/uasi/items/69368c17c79e99aaddbf)
- [【Git】リモートからの取得とリモートへの反映で行っていること(fetch, pull, push)](https://qiita.com/forest1/items/db5ac003d310449743ca)
- [（Git公式）3.5 Git のブランチ機能 - リモートブランチ](https://git-scm.com/book/ja/v2/Git-%E3%81%AE%E3%83%96%E3%83%A9%E3%83%B3%E3%83%81%E6%A9%9F%E8%83%BD-%E3%83%AA%E3%83%A2%E3%83%BC%E3%83%88%E3%83%96%E3%83%A9%E3%83%B3%E3%83%81)

[^1]: checkoutは主にブランチ間を行き来するコマンドなので、「リモートブランチをcheckoutする」という表現は本来あまりよろしくない。正しくは、「リモートブランチの最新コミットをfetchしてきて、リモート追跡ブランチからローカルブランチを作成し、そこへcheckoutする」と表現すべきでしょうか。しかし[Atlassianの記事](https://www.atlassian.com/git/tutorials/using-branches/git-checkout)を見てみると、"checkout the remote branch"という表現があったり、ある程度この言い方は許容されているのかもしれません。
誰かのために

皆様、こんばんは
お久しぶりです。

有難いことに、
アルゴリズムの基礎を勉強させてもらい
色々な問題にチャレンジさせてもらっています。

問題を解くために自分の中のイメージを言語に落とすアプローチは
自由で大空を飛んでいるようです。目的地に最後まで辿り着く難しさが
何とも言えず、楽しいです。

今更ですが、自分はエンジニアではありません。
FAE と言われる、技術営業で、主に半導体(Power IC..DCDC convertor) の
技術サポートと営業活動を生業にしています。

実は過去に 8 年 FPGA の FAE もやってたので
プログラム言語も経験しており、評価ボードで検証することも
たまにやっています。

そんな FAE 歴は、はや 12,3 年。
あらゆる市場トラブルを体験し、日本のモノづくりの現実を見てきました。

そこで痛感した事。
**1.何よりも大切なのはコミュニケーション**
誰かに奉仕することで給料を貰う以上は、何を満たせば"奉仕"と
認めてもらえるのかはコミュニケーションがないと成り立ちません。

**2.逃げずに立ち向かった経験は自分のチカラになる**
困難はギフトです。毛根がストレスで 10% 壊死したら喜びましょう。
貴方の実力は格段に上がっている(笑)
誰かを救いたい気持ちを折らずに持ち続けられれば不思議と突破できます。

私は技術力とは何かを後輩に尋ねられたことがあります。
ふと、こんな風に答えました。
**"コミュニケーション力と思いやりじゃない？"**

すいません、話が逸れてしましました。
今、皆さんは誰のためにプログラムを書いていますか？

私は趣味で書いていますが、
色々なアプローチに出会うことで、
様々な需要に合わせた書き方があるのではないか
考えるようになりました。

かの有名な映画で描かれているように
人の心には光と闇が混在し、表裏一体です。
この取り扱いの難しいと思われがちな人の心ですが、
自分のためではなく、誰かのために神経を集中できると
とてつもない力を発揮するオーパーツでもあります。

私利私欲ではなく、誰かを想いながら書くと
不思議と他のアプローチや考え方が必要じゃないか
考えるようになります。

この積み重ねは大きな力になるのではないでしょうか。

ソフトの設計経験があるわけでは無いので見えてない現実は
多分にあると思いますが、人を想い、コミュニケーションを重んじた
設計者が織りなす技術は美しい結晶となって、いつまでも輝き続けると私は信じます。

私の拙い人生経験が誰かの役に立てば幸いです。
この記事をちょうど読んでいる貴方が内なる何かに苦しんでいるのであれば、
それは恐らく成長のサインかもしれません。

プライドやら欲望やら、全部吐き出して、
何をすべきなのか整理してみましょう。
きっと答えはあると思います。
Splunk DLTK :  XGBoost のサンプルを実行してみる


# はじめに

Splunk DLTK 3.2 に新たに追加された XGBoostのサンプルをみながら、使い方を学びたいと思います。

**XGBoostとは**

こちらの記事にXGBoostに関する詳しい解説がありましたので参考にさせていただきました。
https://qiita.com/triwave33/items/aad60f25485a4595b5c8

・勾配ブースト型の決定木である
・分類と回帰の両方で利用できる
・同類のアルゴリズムとして LightGBMが有名

# DLTKの Sampleコードを見てみる

DLTKの Notebookには以下の２つのサンプルブックが用意されています。
・xgboost_regressor.ipynb
・shap_xgboost.ipynb 

今回は１つ目のxgboost_regressor.ipynbを確認してみたいと思います。

## xgboost_regressor.ipynb

まずはライブラリのインポート. XGBRegressor をインポートしてます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/392303/5ae54e13-e88e-1eb2-a989-d79ccabf3cf9.png)


### Stage1: データの取り込み
DLTKではデータの取り込みはSplunkで実行されたデータを取り込みます。サンプルの実行SPLが書かれているので、Splunk側でこれを実行して戻ってきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/392303/d904dedf-222f-5fe5-0eae-ecee3d9c1d24.png)

ちなみに、Splunkでの実行結果はこちらです。ac_power (電圧？）　を他の特徴量 (total*) から予測するモデルを作るみたいですね。
**(ちなみにデフォルトのままだとエラーになるので、以下のスクリーンショットにあるように、mode=stage をSPLの中にいれてください）**

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/392303/351f6953-fd71-dfae-bd08-5f5114b3dbc7.png)

### Stage2: 初期化
シンプルに XGBRegressor インスタンスを呼び出しただけですね。オプションを追加する場合はこのタイミングがいいと思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/392303/0ed4fe11-c9d6-34d9-77f0-bdba167a4b19.png)

### Stage3: 学習(Fit)
ここもシンプルですね。最初に目的変数と説明変数を指定してfitしています。
ただし、uncommentされてますが、最初は comment outして、訓練データとテストデータを作って評価しながらチューニングした方がいいと思います。最終的に運用に入ったら再度 uncommentして全データを学習で利用できるようにします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/392303/ce9ea34f-70d6-802d-cf91-3337b59d8ef7.png)

### Stage4: 適用(Apply)
applyのために再度、説明変数をXとして設定します。
最終的な出力としては、予測した値のみがリターンされます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/392303/5f92f332-794e-4e52-0889-7d2fba217b5d.png)

実際にSplunkでapplyした結果はこんな感じで表示されます。一番右の列に予測結果が追加されているのがわかります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/392303/dfd2de44-553a-bfec-e316-fdc1f64c231b.png)


### その他のStage
それ以外は、モデルの保存やロードやサマリー出力が定義されてます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/392303/a52f6723-b695-e507-60a8-ae5d8631e6a9.png)

# サンプルダッシュボード

DLTKには、サンプルコードだけでなく、ダッシュボードサンプルも用意されております。
リアルタイムデータの場合、毎回ノートブックで確認するのは大変なので、このようにダッシュボードで確認できると便利ですよね。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/392303/062e3883-9f9a-d644-6f2d-69bd44666957.png)


#まとめ

これで、XGBoostが Splunkでも利用できるようになりました。シンプルで使いやすそうです。
次回は２つめのサンプルを解説していきたいと思います。
Linux シェル変数、環境変数

#【Linux シェル変数、環境変数】

##シェル変数

・シェルが持っている変数（人から入力を伝えるプログラム）
・現在進行中のシェルだけが有効な変数（子プロセス引き継ぎ不可）
・同一シェル内（1つのシェル内）のみ有効

##環境変数

・コンピューターが持っている変数
・シェルから実行したコマンドにも引き継がれる変数（子プロセス引き継ぎ可）
・同一コンピュータ内（同一ユーザ）のみ有効

###シェル変数で出来ることはシェル変数を使う。

シェル変数で出来ないことのみ環境変数を使う。
環境変数として定義された値は、シェル変数としても参照可能

##それぞれの変数で設定されている変数の一覧確認コマンド

・<strong>set</strong>　全てのシェル変数と環境変数を表示
・<strong>env</strong>　全ての環境変数を表示
・<strong>printenv</strong>　一部、または全ての環境変数表示
docker-composeでコンテナが立ち上がらない

>（余談）dockerを初めて触り、導入しました。

>初学者にはネットワーク基礎からの知識が必要になり、かなり苦戦しました。
>まず、docker導入にあたり、学習した書籍を紹介します。

>1. キタミ式イラストIT塾 基本情報技術者 令和02年 Kindle版
>2. ［試して理解］Linuxのしくみ ～実験と図解で学ぶOSとハードウェアの基礎知識 Kindle版
>3. Docker/Kubernetes 実践コンテナ開発入門 Kindle版
>4. （こちらはサイト）入門 Docker
>https://y-ohgi.com/introduction-docker/

##docker-composeでコンテナが立ち上がらない
コンテナ環境　
  -macOS catalina 10.15.7
  -Docker version 19.03.13
  -docker desktop version 2.4.0.0
rails+nginx+unicorn+mysql環境構築を試行錯誤で何度もコマンドを打っているうちにバックグラウンドに使っていないデータが溜まっていた事が原因でした。

special thanks>>
環境構築はこちらの記事を参考にしました。
https://qiita.com/E6YOteYPzmFGfOD/items/509dbabeb20bf2487283
https://qiita.com/AK4747471/items/39ddacfde6a235103277

打ったコマンド
 docker-compose build（イメージ作成）
 docker-compose up（コンテナ作成、実行）
 docker-compose down --volumes（コンテナ削除、docker外で指定した保存ファイルのデータも同時に削除）
docker desktopでイメージをアイコン選択で削除

##解決法
以下コマンドでは、可動していないものも含め全てのDockerイメージを削除します。
 docker stop $(docker ps -q)
 docker rm $(docker ps -aq)
 docker rmi $(docker images -q)
https://qiita.com/suzy1031/items/1b4e1d717b6052a02307
【jQuery~準備(読み込み)~】勉強メモ②

jQueryについて学習中。
ほぼ自分の勉強メモです。
過度な期待はしないでください。


jQueryの準備
-
- jQueryの読み込み

　-jQueryを使用するには、jQueryライブラリを読み込む必要がある。
　以下のリンク先にjQueryを読み込むための記述がある。
　[jQueryへのリンク](https://developers.google.com/speed/libraries/#jquery)

　リンク先のページをスクロールしていくとjQueryという見出しと、その下に3.x snippetという記述が
　あります。3.x snippetの下にscriptタグに囲まれた記述があるのでこの記述をコピーする。
　そして、コピーした記述を、`<head>`タグで下図のようにURLを読み込むことで、jQueryが使用出来る。

```.html
<head>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
</head>
```
<br>

- jQueryファイルの読み込み

　-jQueryは、.js形式のファイルにコードを書く。 JavaScriptファイル同様で
　HTMLファイルに、`<script src="ファイルのURL"></script>`と書くことで、
　jQueryのコードを記述するファイルが読み込まれる。

　`<script>`はCSSファイルの読み込みのように`<head>`タグの中にも書く事が出来るが、
　`</body>`の直前に書くことで、WEBページの表示速度をより早めることが出来る。

```.html
<body>
・・・省略

  <script>
    'use strict';
    ここにjQueryのコードを書く
  </script>
</body>
```
<br>

- jQueryの型

　-jQueryはHTMLの中身を操作する為、HTMLの読み込みが完了してからjQueryによる操作を開始する。
　その為、<b>readyイベントを使用し、$(document).ready()の中身に</b>jQueryの処理を書いていく。
　readyイベントは、概要、ページ構成を読み込んでから処理を開始する。
　つまり、HTMLの読み込みが完了してからjQueryが実行される。

```.js:××××.js
$(document).ready(function(){
  // この中にjQueryの処理を書く
});
```

　-この構文には省略形も用意されており、$(function(){ });と書くことも出来る。

```.js:××××.js
$(function(){
  // この中にjQueryの処理を書く
});
```


<br>
過去投稿記事
-
[【jQuery~書き方と各メソッド~】勉強メモ①](https://qiita.com/k-yasuhiro/items/dfe305ff337e6ac8b406)
サイト制作して、そのまま納品しようとしているあなた。ちょっと待って！！

先日は、WordPress案件を頂き、特に何も設定せずに納品しようとしたら
「管理画面はお客さんが触るから、触られたら困るやつは非表示にしよっか〜」
と言われテンパったのはわたしです。そもそも管理画面のメニューバーとかサイドバーって非表示にできるのか？

と思ったのですが調べると普通に記事が結構ありましたね。
今回は、僕の実案件での管理画面を使いながら説明していきます。

#STEP1 現状の管理画面
特に何も気にせずこれで納品しようとしたのですが、上記のようなことを言われ
確かに、WordPressを使ったことがない人だと迷ってしまうかもなぁ
っと思いましたね。プラグインを多く入れていると余計にかと思います。

![e2625c0adf2c0100fef24c92352352a5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592040/33513965-fb77-5dab-06a2-71d1b0426a7d.png)

#STEP2 functions.phpに制御する文を書こう。
調べて参考にした記事がこちらです。
https://wpdocs.osdn.jp/%E9%96%A2%E6%95%B0%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9/remove_menu_page
https://haniwaman.com/wp-menu-remove/
https://www.dataplan.jp/blog/wordpress/2754

※僕が実際に書いたコードは下記になります。

```functions.php
function remove_menus () {
  global $menu; // 左メニューのグローバル変数
  remove_menu_page( 'index.php' );                  // ダッシュボード
  remove_menu_page('edit-comments.php'); // コメントメニュー
  remove_menu_page('edit.php'); // 投稿
  remove_menu_page( 'upload.php' );                 // メディア
  remove_menu_page( 'edit-comments.php' );          // コメント
  remove_menu_page( 'themes.php' );                 // 外観
  remove_menu_page( 'plugins.php' );                // プラグイン
  remove_menu_page( 'users.php' );                  // ユーザー
  remove_menu_page( 'tools.php' );                  // ツール
  remove_menu_page( 'options-general.php' );        // 設定
  remove_menu_page( 'wpcf7' ); // Contact Form 7.
  remove_menu_page( 'ai1wm_export' ); // All-in-One WP Migration.

}
add_action('admin_menu', 'remove_menus', 99);

function remove_wp_nodes()
{
global $wp_admin_bar; // 上部ツールバーのグローバル変数

$wp_admin_bar->remove_node( 'comments' ); // コメント
}
add_action('admin_bar_menu', 'remove_wp_nodes', 99);

```

上記コードを追加後の管理画面はこちらです。ここまで非表示になっていればよっぽど迷うこともなくなるかなと思います。
![fe50d6fbb2f17bafc29433e8ee0ddf1d.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592040/594fbc21-62ab-9919-9239-af6f05e057ee.png)

#まとめ
お客様が更新しやすいように考えて管理画面を設置できるようになるといいですね！
この辺りの知識は乏しいので、もう少し知識をつけていきたいです。
VS2019 C#でCOM DLLを作ってみた

#はじめに
- [C#でCOM In-Process Server]
(https://qiita.com/EvilSpirit39/items/c959fc990d1660b77180)
- [VBAまたはVBSからCOM経由で使用できる.NETのライブラリの作成方法]
(https://qiita.com/mima_ita/items/efcd1a6ea86f09047984)

を参考にさせて頂きました。圧倒的感謝……！

#環境
- Windows 10 Home (64bit)
- Visual Studio Community 2019

#手順
##プロジェクトの作成
プロジェクト テンプレート：クラス ライブラリ (.NET Framework) [C#]
プロジェクト名：ClassLibrary1

`クラス ライブラリ (.NET Standard)`
とは別なので注意。

##インタフェースとクラスの作成

```Class1.cs
using System;
using System.Runtime.InteropServices;
using System.Windows.Forms;

namespace Sample
{
    [ComVisible(true)]
    [Guid("EC463B16-E298-478E-A836-44585A30F806")]
    [InterfaceType(ComInterfaceType.InterfaceIsDual)]
    public interface ITest
    {
        void Hello(string msg);
    }

    [ComVisible(true)]
    [Guid("A81D546F-6F4E-49E0-9A2B-A9DCC725C489")]
    [ProgId("Sample.Test")]
    [ClassInterface(ClassInterfaceType.None)]
    public class Test : ITest
    {
        public void Hello(string msg)
        {
            MessageBox.Show(msg, "Test");
        }
    }
}
```

Guid はツールから作成する。

MessageBox を使うのでプロジェクトにアセンブリ参照を追加する。
名前：System.Windows.Forms

##アセンブリに署名
プロジェクトのプロパティを開き、署名の「アセンブリに署名する」をチェックする。
キー ファイル：test

署名しなくともRegAsmで警告は出るが登録は可能。

##ビルド
ソリューション構成：Release
ソリューション プラットフォーム：Any CPU
ソリューションのビルド。

##レジストリに登録
管理者権限の PowerShell やコマンド プロンプトでレジストリに登録する。

`C:\Windows\Microsoft.NET\Framework64\v4.0.30319\RegAsm ClassLibrary1.dll /codebase`

`C:\Windows\Microsoft.NET\Framework64\v4.0.30319\RegAsm ClassLibrary1.dll /codebase /u`
で登録解除。

`/tlb`を付けるとCOM一覧に表示されるがC#からは利用できない模様。
dllを直接参照する手もある。

##テストプログラム

###JScript

```test.js
var test = new ActiveXObject("Sample.Test");
test.Hello("hello, JScript");
```

というファイルを用意しダブルクリックする。
クラスに定義した ProgID を指定。
Rで分散固定の場合の混合ガウスモデルの実装 (ギブスサンプリング)

# <font color="DarkSlateBlue">記事の目的</font>
分散固定の場合の混合ガウスモデルをRで実装します。
for文を極力使用せず、早く学習するようにしています。
参考: [ノンパラメトリックベイズ 点過程と統計的機械学習の数理](https://www.amazon.co.jp/%E3%83%8E%E3%83%B3%E3%83%91%E3%83%A9%E3%83%A1%E3%83%88%E3%83%AA%E3%83%83%E3%82%AF%E3%83%99%E3%82%A4%E3%82%BA-%E7%82%B9%E9%81%8E%E7%A8%8B%E3%81%A8%E7%B5%B1%E8%A8%88%E7%9A%84%E6%A9%9F%E6%A2%B0%E5%AD%A6%E7%BF%92%E3%81%AE%E6%95%B0%E7%90%86-%E6%A9%9F%E6%A2%B0%E5%AD%A6%E7%BF%92%E3%83%97%E3%83%AD%E3%83%95%E3%82%A7%E3%83%83%E3%82%B7%E3%83%A7%E3%83%8A%E3%83%AB%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA-%E4%BD%90%E8%97%A4-%E4%B8%80%E8%AA%A0/dp/4061529153)

# <font color="DarkSlateBlue">目次</font>

<table>
<tr><td><font color="DarkslateBlue">No.<td><font color="DarkslateBlue">目次
<tr><td><font color="DarkslateBlue">1</font><td><a href="#1-モデルの説明">モデルの説明</a>
<tr><td><font color="DarkslateBlue">2<td><a href="#2-データとライブラリ">データとライブラリ</a>
<tr><td><font color="DarkslateBlue">3<td><a href="#3-実装">実装</a>
<tr><td><font color="DarkslateBlue">4<td><a href="4-確認">確認</a>
</table>

# <font color="LimeGreen">1.</font> <font color="DarkSlateBlue">モデルの説明</font>

![IMG_0195.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/775500/2621060b-2d49-1476-743f-720c51923179.jpeg)


# <font color="LimeGreen">2.</font> <font color="DarkSlateBlue">データとライブラリ</font>
データirisを使います。

```R:
X <- iris[,1:4]
D <- ncol(X)
N <- nrow(X)
library(mvtnorm)
library(cluster)
```

# <font color="LimeGreen">3.</font> <font color="DarkSlateBlue">実装</font>
```R:
#(1)Kを求める
K <- 3
#(2)muを乱数で初期化
set.seed(100)
mu <- matrix(rep(apply(X,2,mean),each=K)+rnorm(K*D,0,0.2), nrow=K)
#(3)(ⅰ)(ⅱ)を繰り返す
max.iter <- 30
for(s in 1:max.iter){
  #(ⅰ)zのサンプリング
  tmp <- apply(mu, 1, function(x) dmvnorm(X, x, diag(D)))
  z <- apply(tmp, 1, function(x) which.max(rmultinom(1,3,x)))
  #(ⅱ)muのサンプリング
  n <- tapply(z, z, length)
  x.k <-  apply(X, 2, function(x) tapply(x, z, mean))
  mu <- t(apply(cbind(x.k, n), 1,
        function(x) rmvnorm(1, x[D+1]*x[1:(D)]/(x[D+1]+1), diag(D)/(x[D+1]+1))))
}
```

# <font color="LimeGreen">4.</font> <font color="DarkSlateBlue">確認</font>
左が正解で、右が実装の結果です。

```R:
par(mfrow=c(1,2))
clusplot(X, iris[,5], color=TRUE, shade=FALSE, labels=4, lines=0)
clusplot(X, z, color=TRUE, shade=FALSE, labels=4, lines=0)
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/775500/1d6f1b3c-182d-74bb-dda3-2c2a64e54abf.png)
log.Fatalはメッセージ出力後に終了ステータス1としてプログラムを終了しようとする

結論: APIを利用する場合はきちんとドキュメントを読みましょう(´・ω・`)

go言語の`log.Fatal`、`log.Fatalf`および`log.Fatalln`はメッセージ出力後に`os.Exit(1)`を発行し、プロセスを終了しようとします。たとえば以下のようなプログラムがあったとします。

```go:main.go
package main

import (
	"fmt"
	"log"
)

func main() {
	fmt.Println("BEFORE")

	log.Fatalln("FATAL")

	fmt.Println("AFTER")
}
```

これをビルドして実行すると、`FATAL`を出力した後に終了ステータス1でプログラムが終了してしまっていることがわかります (`AFTER`が出力されていない)

```
$ go build .
$
$ ./fataltest
BEFORE
2020/11/15 21:02:55 FATAL
$
$ echo $?
1
```

ほかのプログラミング言語やライブラリによってはログレベルとしてFATALを有しているものがあります。要するに`log.Fatal`系の関数を「FATALレベルのログを出力してくれるものなのか!」と思って使うと、思わぬバグを生む可能性があります--というかわたしは生みました (反省)

**参考**

- [GoDoc: Package log](https://golang.org/pkg/log/)
- 稼働確認環境: go version go1.15.1 linux/amd64
Xibファイルで作ったUIをViewに読み込む方法

AutoLayoutの制約をなるべく簡単にしたいですよね。
XibをViewに読み込むことでViewController内の制約をよりシンプルに！そして簡略化します。
#解説
まずは`sampleViewController.Xib`の中にViewを置きます。
![スクリーンショット 2020-11-14 12.09.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684645/9327c089-290e-055b-9670-ddf7b52bd70b.png)


このようにViewを置いたらSwiftファイルとViewのXibファイルを作成していきます。

Swiftファイル
![スクリーンショット 2020-11-14 11.55.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684645/2101fa12-0fba-f4b2-7d91-d5f1c23df636.png)
ViewのXibファイル
![スクリーンショット 2020-11-15 21.04.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684645/fe600397-0d33-08f9-28c0-3b67d5618d87.png)




ファイル名は同名にしましょう！！(今回はsampleHomeViewと命名)

`sampleHomeView.swift `にコードを書きます。こちらはコピペでOKです。

```swift:sampleHomeView.swift
import UIKit

class sampleHomeView: UIView {
    
    override init(frame: CGRect) {
        super.init(frame: frame)
        loadView()
    }
    
    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        loadView()
    }
    
    private func loadView() {
        let className = String(describing: type(of: self))
        let view: UIView = Bundle.main.loadNibNamed(className, owner: self, options: nil)?.first as? UIView ?? UIView()
        view.frame = bounds
        addSubview(view)
    }
}

```

このコードを書くことでFile's Ownerのクラス設定ができ、Viewに読み込めるようになります。
`sampleHomeView.Xib `のFile's Ownerを選択し、ClassをsampleHomeViewにします。
![スクリーンショット 2020-11-15 20.51.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684645/2982b880-3f9c-e0bf-3985-e93abb96f213.png)


そしたら`sampleHomeView.Xib `にUIパーツを置いていきます。(今回はButtonを配置します)
![スクリーンショット 2020-11-14 12.01.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684645/93cbe565-c755-a25d-35d6-9b5387f75640.png)


次に`sampleView.Xib`の設定をしていきます。
一番最初に置いたViewを選択して、CustomClassのClassをsampleHomeViewにします。
![スクリーンショット 2020-11-15 20.55.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684645/c8c7f173-294d-80d7-1f97-c65bb28cfe01.png)
これでXibをViewに読み込ませることができるようになりました。
しかし、この状態ではViewに読み込んでいることがわからないのでビルドしましょう！！
![スクリーンショット 2020-11-14 12.09.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684645/ab512081-41b7-96e2-0840-5c2e7b840d3c.png)

これで読み込ませることができましたね(^ ^)
こうすることにより、UIパーツのレイアウトを簡略化できそうです。
オフライン環境でVMware PowerCLIを使用する(メモ)

#概要
・概要
オフライン環境でVMware PowerCLIを使用する方法

#環境(動作を確認した環境)

|種別 |ソフトウェア|
|---- |-----------|
|OS|Window Server 2016|

#PowerCLIのダウンロード

以下URLからzipファイルのバイナリをダウンロード
※バージョンが12となっていますので、必要に応じて変更します。
※Powershell Galleyからダウンロードできますが、VMware codeの方はすべてのモジュールを一括してダウンロードできます。

https://code.vmware.com/web/tool/12.0.0/vmware-powercli

# Powershellのフォルダに配置
zipファイルを解凍し、Windowsの以下フォルダに配置する。

C:\Program Files\WindowsPowerShell\Modules
Rでk-means実装 (高速)


#<font color="DarkSlateBlue">記事の目的</font>
k-meansをRで実装します。
for文を極力使わず、実行速度を早くするように心がけました。
参考: [ノンパラメトリックベイズ 点過程と統計的機械学習の数理](https://www.amazon.co.jp/%E3%83%8E%E3%83%B3%E3%83%91%E3%83%A9%E3%83%A1%E3%83%88%E3%83%AA%E3%83%83%E3%82%AF%E3%83%99%E3%82%A4%E3%82%BA-%E7%82%B9%E9%81%8E%E7%A8%8B%E3%81%A8%E7%B5%B1%E8%A8%88%E7%9A%84%E6%A9%9F%E6%A2%B0%E5%AD%A6%E7%BF%92%E3%81%AE%E6%95%B0%E7%90%86-%E6%A9%9F%E6%A2%B0%E5%AD%A6%E7%BF%92%E3%83%97%E3%83%AD%E3%83%95%E3%82%A7%E3%83%83%E3%82%B7%E3%83%A7%E3%83%8A%E3%83%AB%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA-%E4%BD%90%E8%97%A4-%E4%B8%80%E8%AA%A0/dp/4061529153)

#<font color="DarkSlateBlue">目次</font>


<table>
<tr><td bgcolor=LimeGreen>No.<td bgcolor=LimeGreen>目次
<tr><td bgcolor=LimeGreen>1<td bgcolor=LimeGreen><font color=white><a href="#1-モデルの説明">モデルの説明</a>
<tr><td bgcolor=LimeGreen>2<td bgcolor=LimeGreen><font color=white><a href="#2-データ">データ</a>
<tr><td bgcolor=LimeGreen>3<td bgcolor=LimeGreen><font color=white><a href="#3-実装">実装</a>
<tr><td bgcolor=LimeGreen>4<td bgcolor=LimeGreen><font color=white><a href="#4-確認">確認</a>
</table>



# <font color="LimeGreen">1.</font> <font color="DarkSlateBlue">モデルの説明</font>

![IMG_0194.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/775500/8814358b-0918-26a2-8f03-034d18160ea9.jpeg)


# <font color="LimeGreen">2.</font> <font color="DarkSlateBlue">データ</font>
使用するデータはirisのデータセットです。


```{R}
X <- iris[,1:4]
D <- ncol(X)
N <- nrow(X)
```

# <font color="LimeGreen">3.</font> <font color="DarkSlateBlue">実装</font>
```{R}
#(1)Kを求める
K <- 3
#(2)muを乱数で初期化
set.seed(100)
mu <- matrix(rep(apply(X,2,mean),each=K)+rnorm(K*D,0,1), nrow=K)
#(3)(ⅰ)(ⅱ)を繰り返す
max.iter <- 30
for(s in 1:max.iter){
  #(i)各クラスタの平均との距離が最小のクラスに分類
  tmp <- apply(mu, 1, function(x) apply(t(t(X)-x)^2, 1, sum))
  z <- apply(tmp, 1, which.min)
  #(ⅱ)各クラスタの平均を求める
  mu <-  apply(X, 2, function(x) tapply(x, z, mean))
}
```

# <font color="LimeGreen">4.</font> <font color="DarkSlateBlue">確認</font>
左が正解で、右が実装後の結果です。

```{R}
library(cluster)
par(mfrow=c(1,2))
clusplot(X, iris[,5], color=TRUE, shade=FALSE, labels=4, lines=0)
clusplot(X, z, color=TRUE, shade=FALSE, labels=4, lines=0)
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/775500/fc283418-8ec5-e0f5-68af-f105763d22d2.png)
はじめてDockerを触ってみた

こんにちは。むんです:grinning:
次案件でDockerを使う事になったので、すこし触ってみました。
自分用の備忘録として書いてますが、この記事が少しでもはじめてDockerをさわる方の役に立てば嬉しいです！
記事の内容に関して間違いや、こうした方がいい等のアドバイス等ありましたら、気軽にコメントください:sunny:

では、はじめて参りましょう！

※前提
・使用PC：Mac

<h2>予備知識や関係することなど。</h2>
<p>下記記事ご参照ください。</p>
<ul>
<li><a>仮想化技術について(記事作成中)</a></li>
<li><a>コンテナ型仮想化技術って？(記事作成中)</a></li>
<li><a>よく使うDockerコマンド集(記事作成中)</a></li>
早めに書きます。。11月中には書きます。
</ul>


<h2>目次</h2>
<ul>
<li>Dockerって何？</li>
<li>Dockerインストール</li>
<li>イメージの取得、コンテナ起動</li>
</ul>

<h2>Dockerって何？</h2>
ざっくり言うと、元々あった仮想マシンの「重い」と言う問題を解決するために生まれたのがコンテナ型仮想化技術で、Dockerはコンテナ型仮想化技術の代表です。
（詳しいことは<a>こちらの記事（記事作成中）</a>をご参照ください）


<h2>インストールから起動まで</h2>
1.Dockerをインストールする
　インストール方法は公式ページに丁寧に記載されています。
　お使いのOSによってインストールするものは異なるので、下記公式ページからそれぞれ適したものをインストールして下さい。
　:point_right_tone1: <a href="https://www.docker.com/products/docker-desktop">Docker公式ページ</a>
　
2.バージョン確認をする
　インストールが完了したら、Docker, Docker composerのバージョンを確認してみましょう。
　コマンドプロンプトで、下記コマンドを打ち込みます。
　<code>docker -v</code>
　<code>docker composer -v</code>
![JPEGイメージ-9BA33E12401D-1.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183584/0f46e612-cf48-0d5c-d526-35d45c5f5dd6.jpeg)
　※Docker composerとは、複数のコンテナを操作する際に使うツールですが、今回は使用しません。
　
3.ターミナルよりコンテナを起動する
　コンテナの起動にはイメージが必要ですが、そのイメージは
「WEB上のDocker Hubから取得する方法」と「自分で作成する方法」があります。
今回は入門書編として、前者を説明していきます。
　
　インストール後、Dockerを開くと下記の様な画面が表示されます。
![Screen Shot 2020-11-10 at 4.25.38 PM.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183584/b91a45fb-410f-f534-6469-1f6c5fc4c1ac.png)

　※表示されているコマンドは、Docker Hubよりチュートリアル用のイメージを取得して、コンテナを起動する物です。
　今回は、チュートリアル用のコンテナではなく、ngixを起動してみましょう。
　下記コマンドをターミナルに打ち込み、Docker hubよりnginxのイメージを取得し、コンテナを起動します。
  <code>docker run --name some-nginx -d -p 8080:80 nginx</code>


　※既に起動してるプロセスのポートが被って怒られる場合は、既に起動してるプロセスを落とすか、コンテナを別のポートで起動しましょう。 

 　起動に成功すれば、下記の様にRUNNINGと表示されます。
![Screen Shot 2020-11-15 at 11.46.41 AM.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183584/c755bf5e-facc-5f0a-48aa-98b2ced4d342.png)


 Docker hubにはnginx以外にapacheなど他にも様々なイメージがあるので、試してみることをお勧めします！
　
4.コンテナが起動できているか、確認しましょう。
ブラウザから下記URLにアクセスします。
<code>http://localhost:8080</code>
※ポートは適宜読み替えて下さい。

下記の様な画面が出れば、コンテナ起動成功です！

![Screen Shot 2020-11-15 at 12.02.57 PM.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183584/05135533-28b8-a73d-2d9e-9c6fb95b565b.png)


<h2>まとめ</h2>
以上、Dockerインストールからコンテナ起動までまとめてみました。
いかがでしたでしょうか。
ご参考になれば嬉しいです！
【Rails】テーブルのカラム名の変更方法

#テーブルのカラム名の変更方法について

Railsでテーブルのカラム名の変更方法についてまとめました。
ステップとしては下記の通りです。

① migrationファイル作成
② migrationファイルの編集
③ データベースへ反映

今回は下記のようにカラム名を変更します。

変更前
`wheather`

変更後
`weather`


|モデル名|カラム名（変更前）|カラム名（変更後）|
|:-----:|:----------:|:-----------:|
|users  |  wheather  | weather     | 


##① migrationファイル作成
まずはカラム名を変更するためのmigrationファイルを作成します。

`$rails generate migration rename_【変更前のカラム名】_column_to_【モデル名（複数形）】`

今回は
`$rails generate migration rename_wheather_column_to_users`
と記述する。


##② migrationファイルの編集
`/db/migrate`に新しいファイルが作成されるので、`change`メソッドを追加し、そこに変更したいカラム名を記述する。

今回作成されたファイル：`20201115004326_rename_wheather_column_to_users.rb`
＊作成日によって数字の部分は変わります。


下記のように記述する。

```ruby:/db/migrate/20201115004326_rename_wheather_column_to_users.rb
class RenameWheatherColumnToUsers < ActiveRecord::Migration[6.0]
  def change
    rename_column :モデル名, :カラム名（変更前）, :カラム名（変更後）
  end
end
```


今回の場合は下記の通り記述。

```ruby:/db/migrate/20201115004326_rename_wheather_column_to_users.rb
class RenameWheatherColumnToUsers < ActiveRecord::Migration[6.0]
  def change
    rename_column :users, :wheather, :weather
  end
end
```

##③ データベースへ反映
最後に、データベースへ反映し、カラム名の変更は完了。
`$rails db:migrate`



以上です。
`weather`を`wheather`と書き間違えたばかりに、このような作業が発生してしまいました（笑）
皆様はくれぐれもスペルミスの無いようにお気をつけください☆
【基本編】Dockerを使ってみる 自己学習①

Dockerの学習中に、たくさんのコマンドが出てきたのでアウトプットしていきます。
##Docker Hubとは
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/605741/6664e7b4-7d70-c355-bbd5-b7c22b630557.png)
Docker imageが管理されているレジストリの名前(Git Hubみたいな感じ)。
Docker imageを管理するレジストリは他にもあるが、その一つがこの`Docker Hub`である。

##リポジトリーの共有
Git Hub同様、Docker Hubもリポジトリーで管理することが可能。
そのリポジトリー(image)をチームなど、様々な人と共有することで簡単に開発環境を整えられる。
Git Hubでいう、リモートリポジトリをローカルにクローンするイメージ。
##Docker Hubを使用するには
Docker Hubの[Webサイト](https://hub.docker.com/)から新規登録を行う。
ターミナルを開き、ログインを行う。

```
$ docker login 
```
```
Login Succeeded
```
と表示されれば、ログイン成功。
##リポジトリー(image)をローカル(Host)へPullする
Docker Hubで管理しているリポジトリーをローカルにプルする。

```
$ docker pull <imageの名前>
```
例えば、`testOS`がリポジトリ名であれば

```
$ docker pull testOS
```
これで、リポジトリのクローンがローカルに完成。
##コンテナを作成する
testOSが入ったコンテナで作業するために、`run`コマンドを実行する。

```
$ docker run -it testOS bash
```
これでコンテナを作成し、コンテナの中に入ることが出来る。
ここで一旦次のパートで情報を整理する。
##コンテナを作成する理由は？
先ほどDocker Hubから`testOS`というリポジトリー(image)をローカルにPullしました。
しかし、この時点ではローカル環境でtestOSを使うことは出来ません。

例えば、作成するアプリケーションの開発環境でtestOSが必要なので、testOSを使えるようにしたいとする。
そこで、testOSが含まれるコンテナを作成し、そのコンテナの中で作業することで、testOSが使えるようになる。
##コンテナから抜けるには
```
$ exit
```
このコマンドで、コンテナから抜けることが出来る。

##ローカルで管理しているコンテナの確認方法
```
$ docker ps -a
```
`-a`を付けないと、動いているコンテナしか表示されないので、全て表示するには`-a`が必要。
##ローカルで管理しているイメージの確認方法

```
$ docker images
```
##exitした後に、再度コンテナの中に入る方法
`run`した後に`exit`コマンドでコンテナから抜けると、コンテナは`exited`状態になる。
このままではコンテナが起動しておらず、中に入ることが出来ないので、再度立ち上げる。

```
$ docker restart
```
その後、`exec`コマンドで、再びコンテナに入るコマンドを打つ

```
$ docker exec -it <containerの名前>　bash 
```
##Docker imageに変更を保存する方法
開発環境で、RubyやPHP、Javascriptが必要になったとする。
一人がコンテナの中で、Ruby、PHP,Javascriptを扱えるように設定した。

他の人も同じ環境構築をするのは手間も時間もかかり大変。
→ 一人が設定したコンテナの作業環境をimage(リポジトリ)に保存し、提供すれば解決！

```
$ docker commit <container> <image>
```
このコマンドで、コンテナの変更内容をimageに保存する。

##Docoker Hubにimageをプッシュ前に、タグで名前を一致させる
予めDocker Hubでリポジトリを新規作成しておく。(ここではnew-repoとする)
名前が一致している必要があるので、タグを付ける。

```
$ docker tag old-repo:updated username/new-repo
```
old-repoが変更を加えたローカルのリポジトリで、タグが更新を表すupdated。
Docker Hubで新規作成した「new-repo」にusername/new-repoで名前を一致させる。

##Docoker Hubにimageをプッシュする
```
$ docker push username/new-repo
```
これでDocker Hubで管理しているリポジトリにプッシュが完了
プルすることで、変更が加えられたimage(リポジトリ)をローカルで扱えるようになる。

##imageの削除方法
```
$ docker rmi <image>
```
Big Sur に変更して postgresql エラーになるときの対処

Big Sur にアップデート後、`brew doctor`で出た Warning を直していたら色々と Upgrade されてしまい、`postgresql 12.3_4 -> 13.0`が行われました。

```
==> Upgrading postgresql 12.3_4 -> 13.0
==> Downloading https://homebrew.bintray.com/bottles/postgresql-13.0.big_sur.bot
==> Downloading from https://d29vzk4ow07wi7.cloudfront.net/d8d0d489637d4ef94217e
######################################################################## 100.0%
==> Pouring postgresql-13.0.big_sur.bottle.tar.gz
==> Caveats
To migrate existing data from a previous major version of PostgreSQL run:
  brew postgresql-upgrade-database
```
このまま、`rails s`すると、

![スクリーンショット 2020-11-15 20.22.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/293962/55670c55-8b1d-9b95-f1cc-73e36822fa7b.png)

```
PG::ConnectionBad
could not connect to server: No such file or directory Is the server running locally and accepting connections on Unix domain socket "/tmp/.s.PGSQL.5432"?
```
お馴染みのサーバ接続エラーです。

んん？？インストールしている部分をよく見ると`==> Caveats（警告事項）`書いてありますね！
PostgreSQLの以前のメジャーバージョンから既存のデータを移行するには、以下のように実行します。ですって😊


```
brew postgresql-upgrade-database
```
あとは、自分がかいた記事 🔽 を参照しながら、起動し直して解決しました❣️
[【Mac】Homebrew を使って PostgreSQL を動かす](https://qiita.com/yuppymam/items/fad4eec0c5b7d6c86517)