OmniAICreator/Qiita-1.07M huggingface dataset:
VSCodeの拡張機能のAndroid iOS  Emulatorを動かす

### はじめに
Android Studioでよくね？って思われる方が多いと思う。実際その通りだと思うが、他の拡張機能との
関連でVSCodeを使いたかったため、こちらの拡張機能を使った。


### VSCodeの以下の拡張機能を使う
https://marketplace.visualstudio.com/items?itemName=DiemasMichiels.emulate


### まずやること
Andorid Studioをいれて、エミュレータをダウンロードする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1859803/326cbe19-fe4a-f65f-a5ef-2b6b26d4973d.png)

### パスを設定に追加する
拡張機能の歯車マークを押下すると以下の画面が表示される。
OSに応じたエミュレータのパスを入れると動く。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1859803/dd9c6147-d48d-b4c7-429f-cd388d6ce3ba.png)

デフォルトのエミュレータのパスは以下の通り。
```   
    Default: "emulator.emulatorPath": "~/Library/Android/sdk/emulator"
    Mac: "emulator.emulatorPathMac": "~/Library/Android/sdk/emulator"
    Linux: "emulator.emulatorPathLinux": "~/Android/Sdk/emulator"     
    Windows: "emulator.emulatorPathWindows":
      "<yourAndroidHome>\\Sdk\\emulator"
      or
      "C:\\Users\\<yourUsername>\\AppData\\Local\\Android\\Sdk\\emulator"

```
Power Automate Deaktopがクリックしたいボタンを認識しないときの対処

# 自動クリックしない

「Power Automate Deaktop」を使っていると、ボタンを認識しないことがあります。
ボタンの場所を指定するのですが、実行すると「見つかりません」とエラーが出るのです。
すべてのケースに通用するかわかりませんが、その対処方法例です。

例えば、「Yahoo!ファイナンスの銘柄検索。

https://finance.yahoo.co.jp/

検索キーワードを入力することまでは自動化できましたが、検索ボタンをクリックしてくれません。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1143963/9b52bffa-124a-d055-81ff-b64ebbad3f7b.png)


# ボタンアクションを試用

「Webページのボタンを押す」アクションから

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1143963/85087690-5e8b-6333-4ef8-20021e4761c0.png)

「UI要素の追加」で検索ボタンを指定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1143963/c03498e8-e812-c598-0be3-dae2eeeaf827.png)


# ボタンが見つからない

実行し、以下の例では証券コードを自動入力しています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1143963/e39b7591-3ea6-9422-64ab-ef4ae3371727.png)

ところが、以下のように「ボタンが見つからない」というエラーが出ます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1143963/c3cb7067-66a9-3baa-e66d-213b7f787b36.png)

>: Microsoft.Flow.RPA.Desktop.Modules.SDK.ActionException: セレクター div[Id="search"] > form[Class="_1_cwYCqq f6V2IZAK"] > button[Class="UYGPpBky _38OMHuV3"][Type="submit"] を含むボタンが見つかりません


「Webページのリンクをクリックする」アクションでボタンをクリックするように設定しても同様にエラーが出ます。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1143963/84675bbb-10ce-53f2-73f1-a9dc1bb3909c.png)


# {Return}で動いた

この場合、ボタンでなく他のタブなどをクリックするようにしても、エラーが出ました。
検索窓の中からカーソルが出てないと認識されていると仮定し、使ったのが「キーの送信」アクションです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1143963/0b11b390-6f8d-c563-6db2-0d2a6845bec9.png)

~~~
{Return}
~~~

「{Return}　= enterキーを押す」というアクションを送ることで、検索を実行することができました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1143963/d6edb840-c09b-a3b1-0506-fc4ab389341c.png)

※「7261」は「マツダ」の証券コードです。

**了**
ffmpeg-pythonで動画にメタデータを追加する

pythonでffmpegを操作したい場合、ffmpeg-pythonを使うと思います。

`ffmpeg.output()`にはffmpegのオプションを渡すことができます。そこで、ffmpeg-pythonで動画にメタデータを追加するには、`ffmpeg.output()`に引数名`metadata`で`"key=value"`の文字列の形式でメタデータを渡します。

```python
ffmpeg
    .input(input_video_path)
    .output(output_video_path, metadata="title=New Title")
    .run()
```

`ffmpeg.output()`は可変長引数を取るので、複数のメタデータを設定したい場合はその分だけ引数を設定します。
```python
ffmpeg
    .input(input_video_path)
    .output(output_video_path, metadata="title=New Title", metadata="title=New Artist", metadata="album=New Album")
    .run()
```

辞書型の引数を展開することもできます。
```python
ffmpeg
    .input(input_video_path)
    .output(output_video_path, **{"metadata": "title=New Title", "metadata": "artist=New Artist", "metadata": "album=New Album"})
    .run()
```

辞書型の引数を変数で保持しておきたい場合は少し工夫が必要です。キーをそのまま`metadata`にすると、キーが重複して上書きされてしまうためです。

キーをユニークにするためには、`metadata:g:0`のようにグローバルオプション`g`を付けて、更にその後にユニークなインデックスを振るようにします。グローバルオプション`g`を付けるとメタデータがファイル全体に適用されますが、メタデータはデフォルトでグローバルになっており、グローバルオプションを明示的に付けても省略した場合と同じ動作になるため、このようにしても無害です。また、グローバルオプションの後のインデックスは無視されます。
なお、グローバルオプションを付けずにインデックスだけを振って`metadata:0`とするとエラーになります。

```python
metadata_dict = {"metadata:g:0": "title=New Title", "metadata:g:1": "artist=New Artist", "metadata:g:2": "album=New Album"}

ffmpeg
    .input(input_video_path)
    .output(output_video_path, **metadata_dict)
    .run()
```


このハックを使うと、次のように別のファイルからメタデータをコピーすることもできます。
```python
tags = ffmpeg.probe(input_video_path)["format"]["tags"]

metadata_dict = {}
for i, key in enumerate(tags):
    metadata_dict[f"metadata:g:{i}"] = f"{key}={tags[key]}"

ffmpeg
    .input(input_video_path)
    .output(output_video_path, **metadata_dict)
    .run()
```

## 参考
https://github.com/kkroening/ffmpeg-python/issues/112
第21回 レイヤ3 IPアドレッシング

論理アドレス
---
物理アドレスは単なるユニークなビット列
でしかないのに対し、論理アドレスは階層
型でそのアドレス自体に意味がある。

「何処の」「誰か」がわかることと、ネッ
トワーク管理者によってつけられることが
特徴として挙がる。

論理アドレスはNICにつくのではなく、各
デバイスのネットワークとの接続点ごとに
つける。

例えば、NICが故障したからといって、MA
Cアドレスが変わっても、論理アドレスは
変わらない。また、NICが二つPCに搭載さ
れていれば、論理アドレスは2つ存在する
ことになる。

「何処の」「「誰か」は階層的に判断する
ことができる。上図であれば、PC1は「ネ
ットワークA1のネットワークA1aの1番」と
なる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2602995/d1a7970d-d5f8-6be4-d476-76ef86c16d9f.png)


またプロトコルごとに論理アドレスの体型
が違う。代表例は下記のようなものがある。
<table>
<tr>
<th>プロトコル</td>
<th>アドレスの例</td>
</tr>
<tr>
<td>IP (TCP/IP)</td>
<td>192.168.100.125</td>
</tr>
<tr>
<td>IPX (IPX/SPX)</td>
<td>4d.0060.3e86.e220</td>
</tr>
<tr>
<td>DDP (AppleTalk)</td>
<td>151.10</td>
</tr>
</table>

[Table21-01:レイヤ3アドレスの例]


何処の、誰？
---
どのプロトコルにせよ、論理アドレスは「
所属するネットワークの番号＋ホストの番
号」(=「何処の」＋「誰か」)という形にな
っている。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2602995/f174f20f-2a6c-dc93-c764-7ae2b3ea2d4f.png)


ネットワーク番号は接続されているネット
ワークでユニークである必要がある。逆に
接続していないネットワークであればネッ
トワーク番号は同じでも問題ない。


IPアドレスとは
---
 IPアドレス(論理アドレス)は32ビット。
IPで使われるアドレスを指す。
<table>
<tr>
<th>ネットワーク番号</th>
<th>ホスト番号</th>
</tr>
<tr>
<td>1010110000000101</td>
<td>0010001000001011</td>
</tr>
</table>

[Figure21-06:IPアドレスの意味]
どこまでのビットがネットワーク番号で、
どこまでがホスト番号かはそのクラスによ
って決まる。8文字ごとにオクテットとい
う区切りがある。
<table>
<tr>
<td>10101100</td>
<td>00000101</td>
<td>00100010</td>
<td>00001011</td>
</tr>
<tr>
<td>172</td>
<td>5</td>
<td>34</td>
<td>11</td>
</tr>
</table>

[Figure21-05:IPアドレス（10進数）]

参照URL：
<a href="http://www5e.biglobe.ne.jp/~aji/3min/">3分間ネットワーキング</a>
第20回レイヤ３ インターネット・プロトコル

IP
---
レイヤ3といえばIPである。TCP/IPは現在、
インターネットで使用されているプロトコ
ルだが、レイヤ3ではそのIPを受け持つ。
※TCP/IPは「TCP」「IP」の複数のプロトコ
ルから成り立っている。

TCP/IP以外のプロトコルとしては、IPX/SPX
とAppleTalkがある。


レイヤ3プロトコル
---
レイヤ3プロトコルはパケットの転送を受
け持つ。順序としては、下記の通り。

・論理アドレスの決定をする。
↓
・論理アドレスで宛先の特定を行う
↓
・経路を設定する

※実際の転送はベストエフォートになる事
前に「送りますよ」「いいですよ」という
連絡なしで送る。またの名を「コネクショ
ン・レス型通信」


IPヘッダ
---
IPは下記のようにカプセル化をする。
<table>
<tr>
<th>20～60バイト</th>
<th>0～65,515バイト</th>
</tr>
<tr>
<td>IPヘッダ</td>
<td>セグメント・データ</td>
</tr>
</table>

[Table20-01:IPパケット]
IPは上記のようにカプセル化を行う。
※IPはセグメントの先頭にIPヘッダをつける
だけ。フレームはヘッダとトレーラであった。
<table>
<tr>
<th>ﾋﾞｯﾄ数</th>
<th>名前</th>
<th>説明</th>
</tr>
<tr>
<td>4</td>
<td>バージョン</td>
<td>IPのバージョン</td>
</tr>
<tr>
<td>4</td>
<td>ヘッダ長</td>
<td>IPヘッダの長さ</td>
</tr>
<tr>
<td>8</td>
<td>サービスタイプ</td>
<td>上位プロトコルによって割り当てられた重要度</td>
</tr>
<tr>
<td>16</td>
<td>データ長</td>
<td>IPヘッダとセグメント・データを合わせた長さ</td>
</tr>
<tr>
<td>16</td>
<td>ID</td>
<td>大きいデータを分割した際につける識別番号</td>
</tr>
<tr>
<td>3</td>
<td>フラグ</td>
<td>分割する際に使用するフラグ</td>
</tr>
<tr>
<td>13</td>
<td>フラグメント・オフセット</td>
<td>分割を繋ぎあわせる時に使う</td>
</tr>
<tr>
<td>8</td>
<td>TTL</td>
<td>パケットの生存時間。無限ループを防ぐ</td>
</tr>
<tr>
<td>8</td>
<td>プロトコル</td>
<td>使用している上位プロトコルの番号</td>
</tr>
<tr>
<td>16</td>
<td>ヘッダ・チェックサム</td>
<td>IPヘッダのエラーチェック</td>
</tr>
<tr>
<td>32</td>
<td>送信元IPアドレス</td>
<td>送信元の論理アドレス</td>
</tr>
<tr>
<td>32</td>
<td>宛先IPアドレス</td>
<td>宛先の論理アドレス</td>
</tr>
<tr>
<td>0～</td>
<td>オプション</td>
<td>なくてもよい(最大40バイト)</td>
</tr>
<tr>
</table>

[Table20-02:IPヘッダ]
重要なことは、「送信元と宛先IPアドレス
がある」ということ。

参照URL：
<a href="http://www5e.biglobe.ne.jp/~aji/3min/">3分間ネットワーキング</a>
PyCharm実行構成のインタプリター設定ミスによるエラー

自分のようなど素人しかハマらない箇所かもしれませんが、うっかり他の人がハマった時の助けになるよう、記録しておきます。

# 発生したエラー
１３６ページ、PyCharmを通じてrunserverを実行しサーバーを起動する操作でエラー発生。

```
django.core.exceptions.ImproperlyConfigured: Error loading psycopg2 module: No module named 'psycopg2'
```

`psycopg2`がないという。確かに１０１ページでインストールしたのは`psycopg2-binary`だった。`psycopg2`を別途インストールしないといけないんだろうか？？？

# 顛末
PyCharm上でrunserverを登録する際、`pythonインタープリター`が仮想環境内のものになっていなかったことが原因だった。このpythonには`psycopg2-binary`がインストールされていないためエラーとなっていた。
![775FBD9E-EDFB-4465-9B1A-98D587A0ADDB.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/218039/b26d5699-50b0-3ce3-1486-01b3ecf87fd3.jpeg)
なおこの設定は同書117ページにて案内されているが、上手くできていなかった。
第19回 レイヤ3 概要

ネットワーク
---
コンピューターや各デバイスをメディアで相
互に接続した論理的なグループのことをネッ
トワークという。

具体例を出すと、A市B区C町1番地2丁目3番
に住んでいるのであれば、A市というネット
ワークが存在し、そこに属していることにな
る。

「A市」というネットワークや「B区」という
ネットワークが存在するが、レイヤ2はその
ネットワーク内での相互通信の方法であった
。レイヤ3はネットワーク間の相互通信の方
法となる。このような相互通信したネットワ
ークをインターネットワークという。


インターネットワーク
---
ネットワークを複数にする理由は、トラフ
ィックの制御がある。小規模のネットワー
クとすることで、制御しやすいようにして
いる。

その多数のネットワークを相互に接続する
インターネットワークを操作するのがレイ
ヤ3の機能。


論理アドレス
---
レイヤ2の物理アドレスの一つ、MACアド
レスはアドレスと実際の機器の場所が無
関係であることが欠点であった。

レイヤ3の論理アドレスは、何処の誰とい
う2つの情報から成り立つアドレス。これ
を階層型アドレッシングと呼ぶ。階層型
の利点は経路探索がしやすいということ。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2602995/f6e6f32d-1cf6-ef0c-58db-549ba56c5199.png)


上図でいえば、ネットワーク1に属するAと
いうPCの論理アドレスは「1のA」。ネット
ワーク2に属するXというPCの論理アドレス
は、「2のX」。


経路選択
---
インターネットワークは複数のネットワー
クが接続されている。宛先に届けるために
複数のネットワークを経由していく必要が
ある。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2602995/32222d21-a858-0b22-2293-6f6b52b41af1.png)


上図でいえば、MACアドレスだと「い」が
どこにあるのかという点から考える必要が
あるが、論理アドレスは、「い」が「Yの
い」であることを知っているため、容易に
検索することが可能。

 どうやって運ぶかが瞬時にわかり、ルータ
ーが「どうやって運ぶか」を考える。(リピ
ータ、ハブ、ブリッジ、スイッチの次のネ
ットワーキングデバイス)


ルーター
---
ルータは宛先への最適な経路を選択する能
力がある。具体的には、宛先への距離使用
するメディアの転送速度、トラフィック量
(混み具合)、信頼性などを考慮して最適な
ルートを探し出す。このように経路を探し
出すことをルーティングという。

一見、スイッチと機能性は酷似しているが
スイッチがMACアドレスに基づいてスイッ
チングを行うのに対し、ルーターは、レイ
ヤ3の論理アドレスに基づいてスイッチン
グを行う。

また、インターネットでの通信、ネットワ
ーク間の通信には、ルータが必要不可欠。
ルータなしではネットワーク間の通信はで
きない。

具体例を挙げると、下記のようなネットワ
ークAとネットワークBがあったとし、仲介
にハブを置いたとしても相互通信はできな
い。これはルールとして設定されていて不
可能。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2602995/89c6935f-1c08-833c-ff93-a95e1702a152.png)


参照URL：
<a href="http://www5e.biglobe.ne.jp/~aji/3min/">3分間ネットワーキング</a>
第18回 レイヤ2 スイッチ

スイッチとブリッジとハブ
---
スイッチの機能として、切り替え機能がある
。電車で置き換えるなら、切り替えポイント
のようなもので、切り替えられる列車がデー　
タ、レールがメディアもしくは回路となる。

これをスイッチングという。※ルータはスイ
ッチング機能とルーティング機能を保有して
いる。

スイッチはルータと同じ機能を持つが、レイ
ヤ2で動作するレイヤ2スイッチとなる。別名
マルチポートブリッジという。


スイッチの機能
---
スイッチもブリッジ同様、MACアドレスによ
ってフィルタリングを行う。異なる点として
マルチポートであること。ポートの密度の高
いスイッチはどのポートに送るかまで判断す
る。

下図でノードを右からA,B,Cとすると、例え
ばAがC宛てに送信した場合、フレームを受
け取ったポートの受信機とC宛てに送信する
ポートの送信機が接続される。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2602995/467f3856-1c80-7c3c-b74e-00278377e517.png)


ただし、下記のような場合は無効となる。ハ
ブが仲介しているから直接接続はできない。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2602995/1c5058ae-08dc-2347-19b0-95291268875e.png)


ストアアンドフォワード
---
宛先が同じ場合はどうなるか。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2602995/715c813c-fff3-dab5-dd4a-39c24a9925da.png)


宛先が同じ場合も、スイッチならば衝突しな
い。理由としては、スイッチの機能であるバ
ッファリングがある。これはスイッチ内にあ
るバッファメモリに一時保存して伝送路が空
くまで待つ。このようにバッファリングを行
う方式をストアアンドフォワード方式という。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2602995/8fba8f53-ef90-6fdb-5fe9-a183a2760b07.png)




全二重イーサネット
---
スイッチは、スイッチング機能によって、1対
1の通信を行う。さらにストアアンドフォワー
ド方式のため、衝突が発生しない。送信しな
がら受信が可能な方式、つまり全二重通信が
可能。

ただ上記にもあるとおり、伝送路にハブがあ
る場合は全二重通信はできない。ほかにもNIC
が対応していない場合はできない。


スイッチの利点
---
スイッチは、送る相手を限定することが可能。
かつ衝突が発生せず、衝突ドメインを区切る
ことが可能。

ブリッジと異なる点はポート1つ1つが衝突ドメ
インであること。1ポートにつき1デバイスしか
接続しない場合は、そのメディアを独占するこ　
とが可能。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2602995/55803be1-17fe-d006-f6f1-6f07d0a75fb8.png)


さらに、スイッチを使った全二重通信の場合
は、CSMA/CDアクセス制御を無視することが
可能。そもそも衝突を前提に作られた制御方
式のため、その制御方式の必要がない。

他にも、複数のデバイスを同時に送信するこ
とが可能。

スイッチの欠点は、フレーム読み取り時間分
だけ遅延してしまうこと、ブロードキャスト
を止めることができないことである。

参照URL：
<a href="http://www5e.biglobe.ne.jp/~aji/3min/">3分間ネットワーキング</a>
なぜ市場担当者、インフラエンジニアが質問しないのか

データに関する記事を書こう！

https://qiita.com/official-events/30be12dd14c0aad2c1c2

テーマ2『データに関する記事を書こう！』参加記事です。

502: Bad Gateway が何回連続して出るか。

https://qiita.com/kaizen_nagoya/items/a905790f273d910b6310

# インフラエンジニア

インフラエンジニアは知っているはず。

エラーが同じURLでなんども起きていることを。

なぜ、手を打たないかを考えて見る。

## 他にもいっぱいエラーが出てる。

他にもいっぱいエラーが出ていて、なおかつ、重要度の高いものがある。

重要度の低いものは放置遊戯。

## 重要度がつけられない。

出資者、広告主など重要度が高いものはごく少数である場合、
それ以外のものに重要度をつけずらいことがあるかもしれない。

どうでもいいものに重要度をつけるのは苦痛かもしれない。


## エラーを記録していない。

多すぎて、エラーを記録することが、エラーの原因となる場合はある。
綱渡り的な運用。インフラ屋は、人生の一度、二度は経験しているかも。

# 市場担当者

## 出資者、広告主しか目がいってない
市場担当者が、出資者、広告主しか目がいってないことがあるらしい。
自分の知り合いでそういう方はおみえにならない。

## 新しい市場に集中したい

現在の市場は、放置遊戯。
新しい市場の開拓に専念したいことはある。

現在の市場では黒字化が無理な場合に起こり得る。

## 専門家じゃない

市場担当になっても、専門家じゃなく、関係会社にも専門家がいない。

分析をしていけば、専門家にぶつかるはず。
分析していないと、専門家にぶつからないことがあるのかもしれない。

# 参考資料

インフラエンジニア　になるには

https://qiita.com/kaizen_nagoya/items/267c1cc8de8c058f3b2c

Wireshark インフラエンジニアの玉手箱

https://qiita.com/kaizen_nagoya/items/edc19705677f46ad461d

インフラエンジニアがSREを学ぶ点

https://qiita.com/kaizen_nagoya/items/a5abfa4e6cde308dc90e

「何もしていないのに壊れた」インフラエンジニアの対応例

https://qiita.com/kaizen_nagoya/items/49c58fa6f4278717d061

big data

https://qiita.com/kaizen_nagoya/items/0b6c40c857547ff300b6

データ技術の方向性

https://qiita.com/kaizen_nagoya/items/aaaa9e739ba1baf6528f

計算機・ソフトウェアが思うように動かなかった時にするとよい１０箇条。仮説（180）

https://qiita.com/kaizen_nagoya/items/3ba624e1d88b97d62d89

情報工学の専門家になるために読んで欲しい月刊「技術士」の記事435

https://qiita.com/kaizen_nagoya/items/29ea1465cc228de17ca6
第17回 レイヤ2 ブリッジ

レイヤ2 ネットワーク・デバイス
---
レイヤ2のネットワーク・デバイスはスイ
ッチとブリッジがある。これらは「とある
ルールにのっとって、データを通すかどう
かという制御を行う」機能を持つ。


ソースルートとトランスペアレント
---
ブリッジは、LANとLANをつなぐデバイス
、2つのLANの架け橋となっている。

ハブもLAN同士をつなぐが、あくまで増幅
や整形を行うだけで、これは1つのLANとみ
なされる。

また、ハブのような衝突ドメインを発生さ
せてしまうようなネットワークの区切りを
セグメントというが、2つのセグメントを
つなげるのがブリッジの役割。

ブリッジにも大きく4種類存在し、つなげ
るセグメントによって変わる。

◆ソースルート・ブリッジ
IEEE802.5（トークンリング）同士をつな
げるブリッジで、特殊な制御を行う。

他リング宛てのパケットを受け取ると、全
ルート探索パケットを使い、宛先までのす
べてのルートを探す。ルーティング情報と
して、表を持つらしい。
(どうやっている、、)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2602995/6a6ddf54-67ba-24b6-6408-b30b3f84dc6b.png)


◆トランスペアレント・ブリッジ
同じアクセス制御方式のセグメントを繋ぐ。
例として、イーサンネットとイーサネット。
FDDIとFDDI。


◆変換ブリッジ
トランスペアレント・ブリッジとは異なり、
違うアクセス制御方式のセグメントを繋ぐ。


◆エンキャプレス・ブリッジ
二つの同じ制御方式のセグメントをWANな
どを通して中継するためのブリッジ。

※今回はイーサネット同士をつなぐトランス
　ペアレントブリッジを学ぶ。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2602995/d3f55a00-a798-c9e1-b787-df8fd2a28298.png)


MACアドレス フィルタリング
---
ブリッジは、受け取ったフレームを分析し、
それを元に制御を行う。

ブリッジを通過できるかどうかをMACアドレ
スで判定。同じセグメントの場合は通過でき
ない。このようにフレームを通過させるかど
どうかを判断することをフィルタリングとい
う。

ブリッジはポート毎にアドレステーブルを持
っており、そのポートと接続しているデバイ
スを記憶する。

ポイントとしては、どのポートに宛先がある
かまでを知らないこと。止めるか通すかの2択
のみしか行動できない。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2602995/bc1c980b-c7f3-522d-d1e0-36a980db34a5.png)


ブリッジの利点
---
セグメント内の通信が外へ出ていかない、言
い換えると他のセグメント宛のデータがあま
り入り込まない。

自分のセグメント宛てのデータが外へ出てい
かないということは、ほかのセグメントから
見れば余計なデータがブリッジで止められて
こなくなる。つまりネットワーク全体の衝突
の可能性が減る。

さらに、JAM信号や衝突で壊れたデータもブ
リッジで止めることが可能。隣のセグメント
の衝突を気にしなくて済む。

だからこそ、セグメント内の通信効率を上げ
ることができる。


ブリッジの欠点と限界
---
ネットワーク全体に遅延を発生させることが
欠点である。ブリッジはフレームを読み取る
時間が必要となり、ハブに比べ10~30%ほど
遅くなる。

また、ブロードキャストを止めることもでき
ない。内側にあるかどうかだけしか判断でき
ないため、ブロードキャスト自体を止めるこ
とはできない。

参照URL：
<a href="http://www5e.biglobe.ne.jp/~aji/3min/">3分間ネットワーキング</a>
第16回 レイヤ2 IEEE802.5とFDDI

IEEE802.5とFDDI
---
IEEE802.5とFDDIは信号の流れが各デバイス
を順序よく回っていく形をとる。リング型
トロポジを使っているからであり、この方
式をトークンパッシングアクセス制御とい
う。

トークンパッシング
---
簡単に言うと、トークンと呼ばれるものが
来たときだけ送信できる権利を得ることが
できる方式。

トークンが来たときにトークンへデータを
渡し、運んでもらう。宛先に届けたら配送
ルートを一周して送信元へ戻る。

トークンは一つしかないため、衝突が起こ
らない。さらに相手が受信したかが必ず分
かる。

かなり堅固なアクセス制御方式であり、工
場のFAや銀行などのネットワークで使用さ
れる。

ただ、送信元が故障した場合は、データを
運んでから、戻る場所がないため、誰も送
信できなくなってしまう。

このようなことがないように監視するノー
ドを予め置いておく。


トークンリング/IEEE802.5
---
トークンパッシングアクセス制御を使うIEE
E802.5はイーサネットのように元の規格が存
在する。

トークンリングという規格で、IBMが作った
もの。トークンリングとIEEE802.5はさほど
差がない。

また、トークンリング/IEEE802.5はLANの仕
様として、トークンリング、同軸ケーブル
もしくはツイストペアケーブル、リング・
スター型トロポジを使う。

スター型だと中央にハブを設置するため、ト
ークンを順序よく回すのが困難と思うが、ト
ークンリング用の特殊なMSAUというハブを
使う。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2602995/69c76c0f-8f69-088c-1868-ffb3afcf2a78.png)


FDDI
---
トークン・パッシングアクセス制御方式の
LAN仕様が、FDDIである。これは二重リン
グ型トロポジ、光ファイバを使うことが特
徴。

光ファイバを使ったIEEE802.5のようなもの
で、データ通信速度が速い。(100Mpsで最長
20km)

また、二重リング型トロポジであることも
特徴の一つ。二重リングの内、1つは予備
であり、使う側をプライマリ・リング、予
備をセカンダリ・リングという。


これらのリングに接続されるのが、DASと
SAS。

DASは障害を検知して、セカンダリの使用
を決める監視役も務める。※DASは特別専
用の機器というわけではなく、PCでも代用
可能。

コンセントレータはハブを指していて、ハブ
の機能であるメディアの集線をする装置。複
数のSASと接続されていて、SASはプライマ
リ・リングとしか接続されない。

FDDIの特徴として、二重リングによる高い
信頼性。トークン・パッシングアクセス制
御方式であるため、確実に相手に届けるこ
とができる。かつ高データ転送速度。

参照URL：
<a href="http://www5e.biglobe.ne.jp/~aji/3min/">3分間ネットワーキング</a>
第15回 レイヤ2 イーサネットの拡張

イーサネット・おさらい
---
繋がっているすべてのノードへフレームを送
るブロードキャスト型で、CSMA/CDアクセス
制御方式によって確立している。

衝突が発生するケースとして、Aがフレーム
を送信し、受け取るはずのBがまだ届いてい
ないために、使っていないと判断し、同軸ケ
ーブル上に二つの信号が交差することによっ
て起こる。


半二重・前二重
---
イーサネットでは、通常、送信しか行わない
CSMA/CDアクセス制御方式により、送信か受
信かどちらか一方しか各ノードは行うことが
できない。これを半二重通信方式という。

これはイーサネットならではであり、同軸ケ
ーブルを使用しているからである。光ファイ
バやツイストペアケーブルであれば可能。

AとBというノードがあったとし、UTPを例に
とると、8本4組の内、2本1組はA側の送信側
、B側の受信側に接続される。別の2本1組は
A側の受信側とB側の送信側に接続される。

また、残りの4本2組は実際は使われていない
。この状態だと、相手の送信と自分の送信は
同じ道を通ることはなく、つまりツイストペ
アならば衝突は発生しない。このように同時
に送信・受信が可能な方式を全二重通信とい
う。

ただ、AとBにハブやリピータを用いた場合は
異なる。ハブやリピータの内部はあくまで同
軸ケーブル同様、一方通行であるからだ。

※ただし、スイッチならば内部に衝突が発生し
ない仕組みを持っているため全二重通信が可
能。


Fast Ethernet/Gigabit Ethernet
---
※書くか悩む。

参照URL：
<a href="http://www5e.biglobe.ne.jp/~aji/3min/">3分間ネットワーキング</a>
第14回 レイヤ2  イーサネットと/IEEE802.3

イーサネットとIEEE802.3の関係
---
まず、イーサネットをXerox(ゼロックス社
が開発した規格)が開発。その後、intelや
DECが共同で規格を開発。DIX-Ethernetと
いう。

DIX-EthernetをIEEEが標準化したものが
IEEE802.3である。


イーサネットのフレーム構造
---
イーサネットは、LANの規格として、同軸
ケーブル、CSMA/CDアクセス制御方式、バ
ス型・スター型物理トロポジを使用する。

レイヤ2ではフレームを作成するが、レイヤ
3で作成されたパケットをカプセル化により
フレームにする。
<table>
<tr>
<td>8バイト</td>
<td>6バイト</td>
<td>6バイト</td>
<td>2バイト</td>
<td>46～1500バイト</td>
<td>4バイト</td>
</tr>
<tr>
<td>ﾌﾟﾘｱﾝﾌﾞﾙ</td>
<td>宛先MACｱﾄﾞﾚｽ</td>
<td>送信元MACｱﾄﾞﾚｽ</td>
<td>ﾌﾚｰﾑﾀｲﾌﾟ</td>
<td>パケット</td>
<td>FCS</td>
</tr>
</table>

[Table14-01:イーサネットフレーム]
赤部分がパケットの部分で、それ以外がイー
サネットによってフレームを作るときに付加
される情報となる。

プリアンプルが終わると、宛先MACアドレス
と送信元MACアドレスが始まる。

その後、タイプ、パケット、FCS(エラーチェ
ック用の情報)をつけ、フレームが完成される

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2602995/fe670105-218a-1487-b6dc-c9bda32223b2.png)


また、こちらはIEEE802.3とイーサネットの
違いだが、パケットの最大数が違う。


イーサネットの特徴
---
イーサネットでは、送信されたフレームは、
メディアを通り、全てのノードに送られる。
このような型をブロードキャスト型という。

送りたい相手を限定して送信するのではなく
、全員に送信することで送りたい相手にも送
ることができるという考え。


CSMA/CD
---
問題は誰かが送っている最中は他の人は送
信ができないこと。同軸ケーブルは伝送路
が1本しかないため、衝突が発生してしま
う。

そのため、イーサネットでは、「フレーム
送信＝メディアへアクセスする」際に、
CSMA/CDという制御方式を用いる。

```
◆CSMA/CD◆
・CS（キャリア検知）Career Sense
⇒他の人が発言していないか、誰かが話していたら
　終わるのを待つ。という検知。

・MA（多重アクセス）Multiple Access
⇒誰かが話終わったら、誰でも次に発言してよい。

・CD（衝突検出）Collision Detection
⇒発言したい人が同時にたまたま発言してしまった
　らいったん話すのを止め、少し待つ。
```

実際のイーサネットの流れは下記の通り。

```
※送信をする側の話
1,送信準備
イーサネットフレームを作成。衝突カウンタを0に
する。

2,CSMA
キャリア信号を検知する。なければ一定時間待っ
た後、送信開始。

3,CD
送信中に衝突したか検出。衝突していなければ終
了。衝突していた場合、フレームの送信を一旦中
止。JAM信号(故障・妨害の意味合い)を送信。

4,バックオフ
衝突カウンタをプラス1。衝突カウンタが16なら、
作成したフレームを破棄。送信中止。16未満なら
ランダムな時間待機後、2に戻る。


※受信する側の話
データを受信した場合（すべての人にデータは届く）
宛先MACアドレスと自分のMACアドレスを比較。
合っていれば受信、違えば破棄となる。 
```


ベストエフォート型配送
---
イーサネットはCSMA/CDというシンプルなア
クセス制御方式を行う。欠点としては、エラ
ーフレームを問答無用で破棄すること。

また、送信した側は破棄されたか確認できな
い。このような通信方法をベストエフォート
型配送という。

参照URL：
<a href="http://www5e.biglobe.ne.jp/~aji/3min/">3分間ネットワーキング</a>
Xcodeを外付けSSDに移動した

DockerやらAdobe関係で内蔵SSDが逼迫していて、OSのアップデートのたびに悩んでいたので、Xcodeを外付けSSDに移動したよ。

# 環境

Mac mini 2020 M1チップ
Monterey 12.3
外付けSSDはSATA接続のやつ

https://www.amazon.co.jp/gp/product/B077PPN5NN/ref=ppx_yo_dt_b_asin_title_o09_s00?ie=UTF8&psc=1

ドッキングステーションはこれ

https://www.amazon.co.jp/gp/product/B09FWYHGS4/ref=ppx_yo_dt_b_asin_title_o09_s00?ie=UTF8&th=1

安いけどスリープ時に何故か接続が切れてる時がある。

# まず、SSD をフォーマットした
とりあえずSSDをAPFS（MacOS拡張）にフォーマットした。
ネットを漁っているとOSの入っているディスク（起動ディスク）じゃないと起動しない説があったので、後々OSを入れられるようにこちらを選んだ。（起動ディスクである必要はなかった！）
フォーマットの方法はディスクユーティリティで該当のSSDを選べばできるよ。:relaxed:

`アプリケーション　＞　ユーティリティ　＞　ディスクユーティリティ`

# 試したこと
既にインストールされている（AppStoreでダウンロードした）Xcodeを外付けSSDに移して起動してみた。

Dockはぴょんぴょんしますが、何回か試してもダメでした。

## パスを通してみた。

```bash
sudo xcode-select --switch /Volumes/SSDのパス/Xcode.app
```

こちらもずっとくるくる状態でダメでした。

参考：

https://www.orzs.tech/install-xcode-in-external-storage/

うまくいく人もいるみたい。
SSDと繋ぐケーブルがしっかりしていれば大丈夫らしいので、インストール済みの方はまずこちらの方法を試すのもありです。
まだインストールしていない方はダウンロード＆インストールに30GB程度使うので初っ端から次の方法を試すといいと思います。

# うまく行った方法
Apple Developer　ページからダウンロードした。

https://developer.apple.com/download/all/

Apple IDでサインインを求められるのでサインインする。
`Develop > Downloads > More` でXcodeがダウンロードできる:relaxed:

![ 2022-03-23 23.26.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1487699/3aecd88f-f9b7-2cf3-6e71-ca06d1d87632.png)

![ 2022-03-23 23.26.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1487699/abb8391a-2694-afaa-bf1a-c4fe76668916.png)


![ 2022-03-23 23.09.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1487699/5afcf25e-7f16-0f94-bda9-628e08ce2e51.png)

![ 2022-03-23 23.21.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1487699/dec16b2a-73d4-a72b-1f99-867e2ae2e67b.png)

Xipファイルをダウンロード⇨外付けSSDに移して展開。

:::note warn
とんでもなく時間がかかります。（２〜３時間）
その間にスリープに入ってSSDの接続が切れるとエラーが出るのでスリープの時間を変更しておこう。
:::

初回起動時に **Install additional required components?** と出るので **Install** を押す。

起動できました！
エミュレーターも正常に動き、いまのところ特に困っていません。
わーい！
GCPのデータ監視・管理サービスまとめ

# この記事はなに？
- Google Cloud認定資格の[Professional Data Engineer](https://cloud.google.com/certification/data-engineer?hl=ja)の勉強内容をまとめたものです。
- 一部、筆者の理解不足により誤った内容が書かれている可能性があります。
- 参考にしていただく際は必ず公式リファレンスも併せてご参照ください。
- また、`この内容を覚えれば資格に合格できる`と保証されたものではないことをご了承ください。

# Cloud Monitoring
## 特徴
- `レイテンシ`、`トラフィック`、`エラー`、`飽和度`の4つのゴールデンシグナルを監視することが推奨される。
    - レイテンシは、サービスがリクエストの処理にかける時間。
    - トラフィックは、サービスに対するリクエスト量。
    - エラーは、サービスが失敗する割合。
    - 飽和度は、サービスのリソースがフル使用にどれだけ近いかを示す尺度。
- GCPやAWSで利用しているサービスのリソースやパフォーマンスを監視できるサービス。
- ダッシュボードで、各種指標をグラフ化しモニタリングすることができる。
- アラートポリシーを設定することで、一定の条件にマッチした場合に通知を飛ばすことができる。

# Cloud Logging
## 特徴
- デフォルトでは`30日間`ログデータを保持する。
    - Cloud Audit Logsは`400日間`保持される。
    - GCSやBigQueryにエクスポートすることで、より長期的に保存することもできる。
- GCPやAWSで利用しているサービスのログデータの保存、検索、分析、アラート通知を行える。
- オンプレミスやハイブリッド環境でもログデータを収集できる。
- ログデータをCloud Pub/Subにメッセージとして配信し、Cloud Functionsを呼び出すことで独自の通知システムを作ることもできる。

## シンク
- ログを転送する方法を制御することができる。
- プロジェクト、アカウント、フォルダ組織レベルで設定可能。
    - そのリソースに含まれるシンクに従ってログを転送する。
    - 転送先は、Cloud Loggingバケット、GCS、BigQuery、Cloud Pub/Subのいずれか。

# Data Catalog
## 特徴
- フルマネージドのスケーラブルなメタデータ管理サービス。
- BigQuery、GCS、Cloud Pub/Subとのコネクタが用意されている。
- BigQueryでは、カラムに対してポリシータグを設定することで、カラム単位での権限設定を行うことができる。
第13回　レイヤ2　アドレッシング

アドレッシング
---
アドレス(住所)とは、デバイスを認識する記
号である。これを各デバイスにつけることに
より、誰にデータを送るかが決められる。

アドレスはユニーク、各々が独自のアドレス
を保有している。


2種類のアドレス
---
アドレスにも2種類あり、論理アドレスと物
理アドレスである。論理アドレスはレイヤ3
を物理アドレスはレイヤ2の役割を持つ。

レイヤ2の物理アドレスは、メディアに直接
接続されている誰に届けるかを識別するため
に使う。

レイヤ3の論理アドレスは、どのネットワー
クの誰に届けるかを識別するために使う。

論理アドレスは、同じ共有メディアに接続
されていない相手との通信に使用する。違
うLAN上にある相手との通信に使う。

イメージしやすいように例を出すと、A市
とB市というネットワークがあったとし、
aさんとbさんがいたとする。aさんからbさ
んへ物を届けたいとなった場合、郵便局G
を経由する必要がある。

物理アドレスとは、郵便局Gから見たbさん
のアドレス、論理アドレスとは、aさんから
見たbさんのアドレス。


MACアドレス
---
物理アドレスの内の一つである、MACアド
レスについて話す。

MACアドレスとは、NICにつけられたアドレ
スを指しており、これはNICが作られた瞬間
にアドレスが決定する。


MACアドレスの構造
---
MACアドレスは48ビット。人間が扱いやす
いよう16進数で12桁にしている。本来は48
個あり、先頭の24ビット、16進数でいう6桁
までをベンダコードという。

このベンダコードはNICを作ったベンダの番
号であり、IEEEが決定したコードである。

残りの24ビットは、ベンダ割り当てコード。
ここの部分は、各ベンダがそれぞれ任意に
つけたコードを指しており、製造番号に近
い。
<table>
<tr>
<th>ベンダコード</th>
<th>ベンダ割り当てコード</th>
</tr>
<tr>
<td>24ビット(2進数24桁)</td>
<td>24ビット(2進数24桁)</td>
</tr>
<tr>
<td>表示：16進数6桁</td>
<td>表示：16進数6桁</td>
</tr>
</table>
[Table13-01:MACアドレスの意味]
<table>
<tr>
<th>00-90-99</th>
<th>32-BA-FF</th>
</tr>
<tr>
<td>corega社のベンダコード</td>
<td>coreg社がつけた番号</td>
</tr>
</table>
[Table13-02:MACアドレスの例]


MACアドレスの欠点
---
MACアドレスの欠点として、アドレスと実
際の機器の場所が無関係なことである。

言い換えるなら、「山田太郎さん」という
名前はわかっていても、どこにいるかまで
はわからないようなもの。

参照URL：
<a href="http://www5e.biglobe.ne.jp/~aji/3min/">3分間ネットワーキング</a>
GCPのデータ暗号化サービスまとめ

# この記事はなに？
- Google Cloud認定資格の[Professional Data Engineer](https://cloud.google.com/certification/data-engineer?hl=ja)の勉強内容をまとめたものです。
- 一部、筆者の理解不足により誤った内容が書かれている可能性があります。
- 参考にしていただく際は必ず公式リファレンスも併せてご参照ください。
- また、`この内容を覚えれば資格に合格できる`と保証されたものではないことをご了承ください。

# Cloud Key Management Service
## 特徴
- GCP上のサービスはすべてデフォルトで暗号化されている。(Google Internal KMS)
    - データを暗号化する鍵を`DEK`(Data Encryption Keys)、DEKを暗号化する鍵を`KEK`(Key Encryption Keys)と呼ぶ。
    - デフォルトで暗号化されていることもあり、暗号鍵が膨大な数になってしまうため、直接DEKを管理するのではなく、用途ごとのレイヤーに分けた上で、KEKでDEKを管理する仕組みを採用している。
- 顧客管理鍵(CMEK)による暗号化は、Cloud KMSを利用して鍵を管理する。
- 顧客提供鍵(CSEK)による暗号化は、ユーザー自身が鍵を作成して管理する。

## 顧客管理鍵(CMEK)
- Cloud KMSを利用して、ユーザーがKEKを管理する手法。
- `Keyring`は、複数のKEKをまとめて管理する機能。
    - Keyringレベルで認可設定をすることができる。
- `Location`は、KEKを使用する場所の指定をする機能。
    - Keyringを作成する際に指定する。
    - 例えば、GCSでCMEKによる暗号化をする場合、GCSのリージョンがasia-northeast1なら、KeyringのLocationも同じにする必要がある。
- `Key(KEK)`は、DEKを暗号化するための鍵。
- `Version`は、KEKのバージョンを表す。
- 一度作成したKeyringやKeyは削除できない。
    - できるのはVersionのみ。
    - 24時間以内であればリストアできる。
- KEKは3種類ある。
    - `生成した鍵`は、Google側でKEKを生成し、Cloud KMSでユーザーが管理する方式。
    - `インポートした鍵`は、KEKをユーザーが生成し、Cloud KMSにインポートして管理する方式。
    - `外部で管理する鍵`は、Cloud External Key Managementを使用して、外部の鍵管理パートナーシステム上のKEKを使う方式。(あくまでCloud KMSを使うので、CMEKに含まれる？)


## 顧客提供鍵(CSEK)
- KEKをユーザーが生成して、ユーザーが管理する手法。
- GCS及びGCEで使用できる。
- 保存されるデータをDEKで暗号化し、DEKをCSEKで暗号化する。
自宅のNASにDocker環境を用意してスマートホーム化 #4

前回の記事はAlexaに喋らせるだけでしたが、今回はAlexaに仕事をしてもらいましょう。
これでいろんなことができるようになります。

# 必要なもの
* Alexa (たぶんなんでも大丈夫)
* NodeRED環境 ([NASの環境にNodeREDを構築しました](https://qiita.com/tosix13/items/7752b96d68941d8e3ea4))
* コンピュータのWake-on-LAN設定 (以降wol)

いきなり出ましたが、wolの準備をします。
細かい手順は記載しませんが、LANが繋がっているマシンは微弱な電流が通っているのでそれで起動できるってやつですね。
マザボによっては対応してなかったりしますが、チョー便利。

# 手順
1. [NodeREDで必要なライブラリをインストール](#noderedで必要なライブラリをインストール)
1. [wolの実行](#wolの実行)
1. [AlexaHomeSkillBridgeに登録しデバイスを追加](#alexahomeskillbridgeに登録しデバイスを追加)
1. [NodeREDに仮想デバイスからのフローを設定](#noderedに仮想デバイスからのフローを設定)

## NodeREDで必要なライブラリをインストール
\#3で紹介したライブラリはなくても動きます
* node-red-contrib-alexa-home-skill ver:0.1.19 (Alexaの仮想デバイス操作結果をトリガーに動作させます)
* node-red-node-wol ver:0.2.0 (実装してもいいですがMACアドレスとIP入れるだけにした方が楽なので入れます)

## wolの実行
まずはwolノードを用意してMACアドレス, Target Address(IPアドレス)を入れます(その他の項目はデフォルトのままでいいと思います)
ipconfigとかで見つけてください。
![wolノード.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/478155/64dad237-0136-f571-3a78-3b5b009d5da3.png)

あとは単純にinjectノードをつないであげるだけです。
メッセージの内容がなくてもwolが実行されます。
![wol_flow.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/478155/14c27f51-3e8a-dfb0-f8f5-293f4ab45a4f.png)

## AlexaHomeSkillBridgeに登録しデバイスを追加
一見怪しいサイトですが、[Alexa Home Skill Bridge](https://alexa-node-red.bm.hardill.me.uk/) に登録します。
そしてデバイスを追加します。
機能としてはONができればいいだけなのでこれだけです。
![device_config.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/478155/2c02127f-a41c-9481-33db-26aaee19dbc2.png)

すると、Alexaのアプリの方でも、このデバイスを仮想的なスイッチデバイスとして確認することができるようになります。

## NodeREDに仮想デバイスからのフローを設定
Alexa Homeノードの設定を開いて、Alexa Home Skill Bridgeのアカウントでログインします。
あとは単純にwolノードとフローをつないで完成です。
![alexahome_flow.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/478155/2ff6f4f1-61ab-a6ce-4f3f-8ad4423fb423.png)

PCがついているとわかりにくいので、試しにdebugノードにメッセージを吐くようなフローにしておいて、
「アレクサ、[デバイス名]をつけて」(**※ハマりポイントでした**)と言うと、デバッグウィンドウに出力してくれるでしょう。

※ Alexaアプリの方で、このデバイスの所属をリビングなどにしておくと、このまま呼び出せないんですね。
「アレクサ、リビングの[デバイス名]をつけて」と言う必要がありますのでご注意を。

これで、仮想デバイス名を声に出して伝えるだけであれこれやってくれるフローが作れてしまいます！

← PREV: [Alexaに色々喋らせる](https://qiita.com/tosix13/items/fca2ad53ab4123e72fe7)
第12回 レイヤ2 概要

レイヤ2の内容
---
レイヤ2はデータの伝送制御の機能を持つ。
具体的に言えば、フレームの伝送制御であ
る。フレームとは、カプセル化して、レイ
ヤ2の制御情報を付け加えたデータを指す。


LLC副層とMAC副層
---
LAN規格で最も有力な組織はIEEEである。
 
<table>
<tr>
<th>OSI参照モデル</th>
<th>IEEE</th>
</tr>
<tr>
<td rowspan=2>レイヤ２：データリンク層</td>
<td>論理リンク制御副層</td>
</tr>
<tr>
<td>メディアアクセス制御副層</td>
</tr>
<tr>
<td>レイヤ１：物理層</td>
<td>物理層</td>
</tr>
</table>
[Table12-01:IEEEのレイヤ1・2]

IEEEのLAN仕様は、さらに2つにレイヤ
2を分けている。論理リンク制御副層
(LLC)とメディアアクセス制御副層(MAC)。

LLC副層は実際の機器に依存しない部分
を取り決めている。具体例を出すと、エ
ラー制御や上位サービスの指定など。

MAC副層はメディアへの接続を取り決め
る。メディアアクセス制御を決める。メ
ディアアクセス制御とは、どのように、
共有メディアでデータを送信するかを決
めること。


LANの仕様
---
実際のLANの仕様は下記のよう。

<table>
<tr>
<th colspan=2>レイヤ</th>
<th colspan=4>LAN規格</th>
</tr>
<tr>
<td rowspan=2>レイヤ２</td>
<td>LLC副層</td>
<td rowspan=3>イーサネット</td>
<td colspan=3>IEEE802.2</td>
</tr>
<tr>
<td>MAC副層</td>
<td rowspan=2>IEEE802.3</td>
<td rowspan=2>IEEE802.5</td>
<td rowspan=2>FDDI</td>
</tr>
<tr>
<td colspan=2>レイヤ1</td>
</tr>
</table>

[Table12-02:LAN規格とレイヤ]
見てわかる通り、実際のLANの機器はレイ
ヤ1・2の両方の機能を持ち合わせることが
多い。

<table>
<tr>
<th>規格</th>
<th>メディア</th>
<th>ﾒﾃﾞｨｱ･ｱｸｾｽ制御方式</th>
<th>物理トポロジ</th>
</tr>
<tr>
<td>イーサネット</td>
<td>同軸・UTP・光ファイバ</td>
<td>CSMA/CD</td>
<td>バス・スター</td>
</tr>
<tr>
<td>IEEE802.3</td>
<td>同軸・UTP・光ファイバ</td>
<td>CSMA/CD</td>
<td>バス・スター</td>
</tr>
<tr>
<td>IEEE802.5</td>
<td>同軸・UTP</td>
<td>トークンパッシング</td>
<td>リング・スター</td>
</tr>
<tr>
<td>FDDI</td>
<td>光ファイバ</td>
<td>トークンパッシング</td>
<td>二重リング</td>
</tr>
</table>
[Table12-03:LAN規格]

LANの規格として、4つのものがあるが、こ
れらはメディアやメディアアクセス制御方式
物理トロポジが違う。

また、イーサネットとIEEE802.3はほぼ同一
ではあるが、LLC副層が違うことからフレー
ム化する際の制御情報が異なる。


レイヤ2でのカプセル化
---
レイヤ2でのカプセル化は、レイヤ3から渡さ
れたパケットをフレームにする。

また、副層ごとに制御情報も付加する。だか
らこそ、イーサネットとIEEE802.3は若干異
なる。

参照URL：
<a href="http://www5e.biglobe.ne.jp/~aji/3min/">3分間ネットワーキング</a>
【AWS環境構築メモ②】お名前.comで取得したドメインをRoute53に登録する

## 0.はじめに

お名前.comで取得したドメインをRoute53に登録します。

こちらも前回同様そんなに難しくないので、登録までは時間かかりませんが、
反映までに最大で72時間かかる場合があります。

![スクリーンショット 2022-03-24 14.57.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/891391/b5afc4df-d92b-5405-394d-2d8ffe39edbb.png)


## 1.前回のタスク

**[【AWS環境構築メモ①】お名前.comで独自ドメイン取得する](https://qiita.com/yuuichimizuta/items/d56608a21891e4bbc296)**

## 2.前提条件

- **AWSアカウント作成済み**
- **お名前.comでドメイン取得済み**

## 3.登録手順(サマリー)

|順番|手順|
|---|---|
|1|Route53のホストゾーン作成|
|2|NSレコードを確認|
|3|NSレコードの情報をお名前.comに登録する|
|4|反映の確認|

## 4.登録手順

### 1.Route53のホストゾーン作成

![スクリーンショット 2022-03-23 21.54.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/891391/ba69eeae-4dab-0d14-4fb3-e28a0710ee57.png)

- **[AWSコンソール](https://aws.amazon.com/jp/console/) にログインする**
- **サービスよりRoute 53を選択して、ダッシュボードのホストゾーンをクリックする**

![スクリーンショット 2022-03-23 21.54.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/891391/31c6b28b-06ec-e747-f21d-ae50c9d4d2b5.png)

- **ホストゾーンの作成をクリックする**

![スクリーンショット 2022-03-23 21.55.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/891391/1b7d55b2-f893-f219-d5e5-ca82293b70bf.png)

- **管理したいドメイン名を指定する。**
  - ドメイン名 : お名前.comで取得したドメイン名を入力
  - 説明 : 任意(入力なしでもOK)
  - Type : パブリックホストゾーンを指定

- **ホストゾーンの作成をクリックする**
ホストゾーンが作成されます

## 2.NSレコードを確認

![スクリーンショット 2022-03-23 21.55.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/891391/ff6349a9-db74-f856-5048-048fcd2ce5fb.png)

- **ホストゾーンにて、登録したドメイン名をクリックする**
- **レコードにて、表示されたNSレコードを確認**
(NSレコード4点とSOAレコード1点が表示される)
- **NSレコード４点をメモする。**

## 3.NSレコードの情報をお名前.comに登録する

![スクリーンショット 2022-03-23 21.55.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/891391/53f0923e-eab8-34a5-5d6c-0a95a250b919.png)

- **お名前.comにログインする**
- **TOPをクリックして、対象ドメインのネームサーバー[初期設定]をクリックする**
**<font color="Red">画像では[その他]となってますが、初期設定時は[初期設定]と表示されます。</font>**

![スクリーンショット 2022-03-23 21.56.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/891391/c243a7b9-bfbb-8819-d193-49292c4854dd.png)

- **対象ドメインの確認をする(間違いないか)**
- **2.ネームサーバーの選択で[その他のサービス]を選択**
- **ネームサーバーの入力フォームに、先程メモしたRoute53のNSレコード４点を入力する**
([.]は省いてもかまいません)
- **確認ボタンをクリックする**
- **設定の確認画面が表示されるので、対象ドメイン名とネームサーバー情報を確認して、OKをクリックする。**

<font color="Green">**「完了しました」とメッセージが表示されたら設定操作は完了**</font>

## 4.反映の確認

- **ネームサーバーがRoute53に切り替わっているかどうか確認する**
- **nslookupコマンドで確認できる**
<font color="Red">設定した4つの値が表示されれば成功</font>
- **反映には最大で72時間かかる場合があるので、時間が経ってから確認してみましょう。**

```
nslookup -type=NS [対象ドメイン]

Server:     192.168.0.1
Address:    192.168.0.1#53

Non-authoritative answer:
[対象ドメイン].com   nameserver = [ネームサーバー1]
[対象ドメイン].com   nameserver = [ネームサーバー2]
[対象ドメイン].com   nameserver = [ネームサーバー3]
[対象ドメイン].com   nameserver = [ネームサーバー4]

Authoritative answers can be found from:
```

## 5.最後に

これでRoute53に独自ドメインを登録できました。

**次回はVPCの設定をしていきます。**

**次回 :[【AWS環境構築メモ③】VPCを作成する](https://qiita.com/yuuichimizuta/items/cee204b9e2776056b863)**

## 6.参考

https://dev.classmethod.jp/articles/route53-domain-onamae/

https://tech-broccoli.life/articles/engineer/setting-onamae-domain-for-route53/

https://tech.hippo-lab.com/post-17700/
dockerコマンドメモ

# Dockerのコマンドメモ

* イメージの取得
    * `docker pull IMAGE`
* イメージからコンテナ作成
    * `docker create [OPTIONS] IMAGE名`
        * -h: host名
        * -name: コンテナ名
* コンテナ起動
    * `docker start [OPTIONS] コンテナ`

* イメージ取得＋コンテナ作成＋起動
    * `docker run [OPTIONS] コンテナ COMMAND`
        * 
* 起動しているコンテナに別pidで接続
    * `docker exec [OPTIONS] コンテナ名 コマンド`
    * docker exec -it COMTAINER /bin/bash
        * -it: /bin/bashと組み合わせると、shellが出てくる(お約束)
外部apiの非同期処理を、await/asyncを使って同期的に使えるようにする

#### この記事で書くこと
外部apiの非同期処理を、どうやったら同期的に扱えるようにできるか模索した結果の記録

#### この記事で書かないこと
await/asyncの説明

#### 外部apiを使用するイメージ

```.js
const externalApi = new ExternalApi();
const response = externalApi.execute(); // 非同期処理になる
if (response.status == 'Success') {
  // 何かresponseを使った処理をする
} else {
  // エラー処理ここで
}
// さらに呼び出すこともあるかもしれない
if (isSpecialCondition) {
  const response2 = externalApi.execute(); // 非同期処理になる
}
console.log(response, response2); // どうなる？

```
このような処理を書くときにどうやって書いたらいいか

```.js
async function callExternalApi() {
  try {
    const externalApi = new ExternalApi();
    const response = await externalApi.execute();
    if (response.status == 'Success') {
      // 何かresponseを使った処理をする
    }
    if (isSpecialCondition) {
      const response2 = await externalApi.execute();
    }
  } catch (err) {
    // error処理
  } finally {
    console.log(response, response2);
  }
}
```
のように書きたい。

#### そもそもExternalApi側が用意しているinterfaceを理解することから

```.js
// externalApi.execute(数字の配列の指定, 実行が終わったら結果を返して欲しい関数名の指定);
externalApi.execute([1,2], callbackMethodName);
```

externalApiはexecuteを呼ばれると、第一引数の配列を処理し、その結果をAPIを使用するこちら側の指定した関数名の引数に渡すというもの。


#### 試したこと

```.js
// await callAsyncTest1(numArray) される想定

// NG: 何の解決にもなっていない。
function callAsyncTest1() {
  return new Promise(resolve => {
    const externalApi = new ExternalApi();
    const response = externalApi.execute(numArray, double);
    if (response) {
      resolve();
    }
  });
}
function double(num) {
  num * 2
};


// OK: この方法で解決した。
function callAsyncTest2(numArray) {
  return new Promise(resolve, reject => {
    const double = (res) => {
      if (res.status === 'success') {
        resolve({doubleResult: res * 2, status: 'success'}); // 簡易的な例です。
      } else {
        reject('errorです');
      }
    }
    const externalApi = new ExternalApi();
    externalApi.execute(numArray, double);
  });
}
```

callback関数をPromiseの中に書くというのが浮かばずに解決するのに時間がかかりました。。
GCPのデータ転送サービスまとめ

# この記事はなに？
- Google Cloud認定資格の[Professional Data Engineer](https://cloud.google.com/certification/data-engineer?hl=ja)の勉強内容をまとめたものです。
- 一部、筆者の理解不足により誤った内容が書かれている可能性があります。
- 参考にしていただく際は必ず公式リファレンスも併せてご参照ください。
- また、`この内容を覚えれば資格に合格できる`と保証されたものではないことをご了承ください。

# Storage Transfer Service
## 特徴
- オンプレミスからGCPへのデータ転送や、AWSからGCPへのデータ転送を行うことができる。
    - 転送先はGCSのバケット。
    - GCSのバケットから、他のバケットへの転送も可能。
    - 転送するデータ量が10TB未満の場合、gsutilコマンドによる転送が推奨される。
- 1回限りの転送もできれば、スケジューリングによる定期実行も可能。


# Transfer Appliance
## 特徴
- Transfer Appliance自体は、大容量のストレージデバイスである。
- データをTrasfer Applianceにアップロードし、Googleアップロード施設に返送し、そこからGCSのバケットにアップロードされる。
- オンプレミスの大容量データ(10TB以上)を、1度に転送したい場合に使われる。


# BigQuery Data Transfer Service
## 特徴
- 設計されたスケジュールに基づき、BigQueryへのデータの読み込みを行う。
- データソースとしては、GCSの他にGoogle広告やYoutubeといったGoogle製品、AWSのS3やRedshiftとも連携できる。


# Cloud Pub/Sub
## 特徴
- 安全かつスケーラブルにデータをストリーミングできるメッセージキューサービス。
- メッセージを送信する`パブリッシャー`と、メッセージを受信する`サブスクライバー`によってデータ転送を実現する。
- パブリッシャーは`トピック`にメッセージを送信し、トピックから紐づく`サブスクリプション`にメッセージが渡され、サブスクライバーはサブスクリプションからメッセージを受信する。
- サブスクライバーはメッセージを受信したら、受信したことをCloud Pub/Subに返す。
    - サブスクライバーからの確認が取れない限り、Cloud Pub/Subはメッセージを再送し続ける。
- トピックは、`最大31日間`メッセージを保持することができる。
- サブスクリプションは、`最大7日間`メッセージを保持することができる。

## メッセージ
- 1つあたり10MBのサイズ上限がある。
- パブリッシャーは、メッセージを送信する際に`key-value形式`で属性を付与することができる。
    - サブスクライバーは、属性情報に沿ってメッセージの受信を制御することができる。
- サブスクライバーは、必ずしもパブリッシャーのメッセージ配信順にメッセージを受信するとは限らない。
    - トピックにメッセージを送信する際に、順序指定キーを設定することで、同一キーのメッセージを受信する際に、配信順に受信することができる。
    - 同一キーのメッセージを複数再配信する場合、最初の配信順に沿ってすべてのメッセージを受信する。
- Cloud Pub/Subは、`少なくとも1回`はサブスクリプションにメッセージを配信する。
    - ただし、保持期間を過ぎた場合は例外である。

## デッドレタートピック
- サブスクライバーからのメッセージ確認応答がない場合、メッセージの再配信を行う。
    - デフォルトではすぐに配信するが、`指数バックオフ`のポリシーを作成することで再送タイミングを制御することができる。
- 応答のないメッセージを、デッドレタートピックに転送することができる。
    - 転送されたメッセージは、Cloud Monitoringで監視できる。

## Apache Kafkaからの移行
- PubSub Kafkaコネクタを使用する。
    - 特定のメッセージを、Apache KafkaからCloud Pub/Subに転送することができる。
- 移行中及び移行後は、Cloud Monitoringで正常に移行できているかを観測する。
CentOS8のLogRotateの備忘録

CentOS8でのLogRotateの仕組みを整理してみた。

* サービスやデーモンで動作しているわけでなく、cronコマンドとcron.dailyとの組み合わせ。なのでサービスの再起動とか不要。
* 前回実行した時間が`/var/lib/logrotate/logrotate.status`に記録される。
* 毎日実行する時間は`/etc/anacrontab`にかかれている
* cronでなく、手動実行する場合、
    * `logrotate -fv /etc/logrotate.conf`
無料！AutomatorとFFmpegで大量の動画変換を自動化

複数の動画ファイルを、クリック一つで一括して変換する方法を解説します
Automatorを使うと、たくさんのファイルがあっても同じ操作を繰り返さず、まとめて変換を実行できるようになります。
Automatorは最初からOSに入ってるのでインストールは不要です


# FFmpegをインストール

まずFFmpegをインストールします。詳しくはこちらをご覧ください。

https://qiita.com/k6t4n/items/960d9bb4e61c55ab9bbc


# 変換する動画ファイルを準備

変換するファイルを1つのフォルダにまとめます。
![スクリーンショット 2022-03-29 0.07.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/588661/d2147bba-b169-269b-686e-b69a1cef96c6.png)

# ffmpegのパスを調べておく
ターミナルで`which ffmpeg`と入力してパスを調べておきます。
私の環境では`/opt/homebrew/bin/ffmpeg`でした。
![スクリーンショット 2024-07-06 1.14.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/588661/b19f475c-1e21-31ac-fd52-4d650466a5be.png)


# Automatorで変換を自動化する

Launchpadを開き「その他」の中から「Automator」をクリックします。
![スクリーンショット 2022-03-23 23.03.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/588661/7bfb97e0-4452-212b-d28d-c245e51841e4.png)


メニューバーから新規を選択する。
![スクリーンショット 2022-03-23 22.52.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/588661/5881dc83-3b00-d2e1-33ba-f8e6ecbfa28c.png)


書類の種類として［ワークフロー］を選択する。
![スクリーンショット 2024-07-06 1.28.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/588661/ab8b5400-f145-4f55-5fce-7c4c738c13c2.png)


［Finder項目の選択を求める］を追加して、タイプは[フォルダ]を選択
［シェルスクリプトを実行］を追加して[引数として]を選択します。
![スクリーンショット 2024-07-06 1.33.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/588661/91b7286f-2d98-8658-e9c6-d83d65a47e1a.png)


[シェルスクリプトを実行]に下記を入力します。
`/opt/homebrew/bin/ffmpeg`の部分は、各自の環境に合わせて変更してください。
```zsh
for f in $1/*
do
	/opt/homebrew/bin/ffmpeg -i "${f}" "${f%.*}.mp4"
done
```

# ワークフローを実行
作成したワークフローを実行して動画ファイルを変換します。

ウインドウ右上の[実行]ボタンをクリックします。
![スクリーンショット 2022-03-29 0.12.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/588661/f0a81339-1eb5-e9f0-5e5e-608805850cc7.png)


するとフォルダ選択ウインドウが出てくるので、先ほどの動画をまとめたフォルダを選択します。
![68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f3538383636312f37363361626434652d373866392d626538382d626361332d6634386362616631366466622e706e67.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/588661/d97d27ce-4e77-29d9-ccc5-9f5f95cdfff0.png)

しばらくするとフォルダ内の動画がすべて変換されます。

# 参考リンク

https://book.mynavi.jp/macfan/detail_summary/id=42064

https://qiita.com/mriho/items/b30b3a33e8d2e25e94a8

https://ameblo.jp/oyasai10/entry-12260380070.html

https://sussan-po.com/2019/12/15/ffmpeg-automator/
基本情報技術者試験対策　14日目

基本情報技術者試験勉強　14日目
-
この記事の目的
-
今年の5月に基本情報技術者試験を合格するために、過去問で間違えた箇所をただまとめる自分のための記事

プロフィール
-
・文系大学の３年生
・ITパスポートは保有
・ウェブアプリやサイト作成を個人で行ったことがある程度
・猫好き

今日の目標
-
最低10問計算問題を解く

間違えた箇所
-
①スケールメリット
生産量が多いほど、享受できる生産場の利点


②シナジー効果
それぞれの合計以上の効果を出す


③減価償却
定額法
毎年一定額を耐用年数にわたって費用化する

１年間の償却額　＝　初期購入　× 減価償却率
帳簿価格　＝　初期購入　ー　償却額


④磁気ディスクのアクセス時間の求め方
平均シーク時間　＋　平均回転待ち時間　＋　データの転送時間

平均シーク時間
磁気ディスクのヘッド（データを読み書きする部品）が、目的のデータが保存されている位置まで移動するのにかかる時間の平均

データの転送時間
目的のデータを読み出すのに要する時間
磁気ディスクの一回転に要する時間　× （１ブロックのバイト数　/　１トラック（１回転）のバイト数)

平均回転待ち時間（サーチタイム）
ヘッドの移動が完了した後、読み出すレコードの先頭が次期ヘッドの位置まで磁気ディスクが回転してくるのを待つ時間の平均
ディスクが一回転するのにかかる時間の半分

前提
回転速度5000回転/分、平均シーク時間20m秒、1トラックあたりの記憶容量15000 バイト、1ブロックあたりの記憶容量4000バイト

１、ディスクが一回転するのにかかる時間を求める
例　回転速度5000回転/分
一回転する時間　＝　60秒　/ 5000回転　＝　12ミリ秒

２、平均回転待ち時間を求める
一回転する時間の半分のため、
12m秒 / 2　＝　6m秒

３、データ転送時間を求める
磁気ディスクの一回転に要する時間　× （１ブロックのバイト数　/　１トラック（１回転）のバイト数)
12m秒　× （4000 / 15000)　＝　3.2m秒

４、平均シーク時間と平均回転待ち時間とデータ転送時間を足す
平均アクセス時間　＝　20　＋　6　＋　3.2　＝　29.2m秒

⑤直列接続と並列接続の稼働率計算
直列接続
R**2

並列接続
1 - (1 - R)**2

⑥SLAの条件に従い、計算
(マネジメント系/サービスマネジメント/サービスマネジメント)
１、1ヶ月のサービス時間を求める
1ヶ月のサービス時間　＝　1日のサービス時間　× 日数

２、停止時間の求め方
停止時間　＝　1ヶ月のサービス時間　× （１ー稼働率（可用性））

３、選択肢と比較して、停止時間内の最大時間を求める

振り返り
-
10問中5問正解で、まずまず。
次回も引き続き、計算問題に取り組んで、今週いっぱいは、計算問題に集中する。


>引用
基本情報技術者試験ドットコム
https://www.fe-siken.com
PostgreSQLを調査するときのメモ

# PostgreSQLでトラブル起きた時、何をするんだっけ？

何をするか毎回忘れてあたふたするので、備忘録として。

#### そもそもDBが何セッション許容しているか調べる時

```sql
SHOW max_connections;
```
```conf:postgresql.conf
max_connections = 100                   # (change requires restart)
```

#### 現在のセッションの接続数は？

```sql
SELECT COUNT(*) FROM pg_stat_activity;
```
セッションが一杯になっていないか確認できる。
その他にも色々調査できそう。

```sql
postgres=# \d pg_stat_activity;
 datid            | oid                      |           |          | 
 datname          | name                     |           |          | 
 pid              | integer                  |           |          | 
 usesysid         | oid                      |           |          | 
 usename          | name                     |           |          | 
 application_name | text                     |           |          | 
 client_addr      | inet                     |           |          | 
 client_hostname  | text                     |           |          | 
 client_port      | integer                  |           |          | 
 backend_start    | timestamp with time zone |           |          | 
 xact_start       | timestamp with time zone |           |          | 
 query_start      | timestamp with time zone |           |          | 
 state_change     | timestamp with time zone |           |          | 
 wait_event_type  | text                     |           |          | 
 wait_event       | text                     |           |          | 
 state            | text                     |           |          | 
 backend_xid      | xid                      |           |          | 
 backend_xmin     | xid                      |           |          | 
 query            | text                     |           |          | 
 backend_type     | text                     |           |          | 
```

以下でトランザクションの調査ができる

```sql
postgres=# select datname, usename, state, query from pg_stat_activity;
postgres=# select procpid, datname, client_addr from pg_stat_activity where datname = '{DB名}';
```

#### postgresql.conf変更した際に再起動必要か確認
```sql
postgres=# select name, setting, context from pg_settings;
```
fontawesome6をSCSSで使用する

# ファイルのダウンロード
fontawesomeのダウンロードページから``For The Web``の``Free For Web``からファイルをダウンロードする

https://fontawesome.com/download

![97a4cb094142c2c8405878a25067d634.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2599078/c1025034-07f0-f552-9ccd-5df54f3dfe13.png)

# ディレクトリ
ダウンロードしたファイルを解凍すると以下のようなディレクトリになっているかと思います。
```
fontawesome-free-6.1.1-web
├ css
├ js
├ less
├ metadata
├ scss
├ sprites
├ svgs
├ webfonts
└ LICENSE.txt
```
SCSSをよく読んでないのであれですが、恐らく使うファイルは``scss``と``webfont``ぐらいだと思いますがわからなければすべて自分のcssフォルダに移しまししょう。

今回は以下のように設置します。
```
css
├ fontawesome-free-6.1.1-web
│ ├ css
│ ├ js
│ ├ less
│ ├ metadata
│ ├ scss
│ ├ sprites
│ ├ svgs
│ ├ webfonts
│ └ LICENSE.txt
└ common.scss
```
# SCSS編集
```scss:common.scss
$fa-font-path: "./fontawesome-free-6.1.1-web/webfonts";
@import "./fontawesome-free-6.1.1-web/scss/fontawesome.scss";
@import "./fontawesome-free-6.1.1-web/scss/solid.scss";
@import "./fontawesome-free-6.1.1-web/scss/brands.scss";
```
common.scssに上記を記述してください。ファイルの設置個所が違う場合は読み込めるように書き直してください。
``$fa-font-path``は``fontawesome-free-6.1.1-web``の中の``webfonts``までのパスを書いてください。
``$fa-font-path``のパスが間違っている場合はページでアイコンの表示が``□``になっており、検証ツールのconsoleに
```
GET file:///C:/[使用しているパス]/fontawesome-free-6.1.1-web/webfonts/fa-brands-400.ttf net::ERR_FILE_NOT_FOUND
```
のようなエラーが出るのパスを正しく入力してください。
Docker mysqlコンテナで日本語入力できない

## 何が起きたか？
docker公式mysqlコンテナを使用していたのですが、添付画像のように
mysqlコンテナ内に入って、bashで日本語入力してエンターを押すと
入力した日本語が消える問題が発生しました。
![スクリーンショット 2022-03-23 22.45.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/668101/238acb63-08b2-7328-56f3-77622c887d05.png)

※半角英数字は入力、実行ともに出来る。

## 原因
原因としては下記参考URLにもありますが、
・databaseの文字コードが対応していない
・日本語環境を追加していない
の二つでした。

参考URL↓
https://teratail.com/questions/268253

## 解決方法
まず、docker-compose.ymlしか定義していない場合は、
db用のDockerfileを作成する必要があります。

下記が実際に解決したDokcerfile定義になります。
省力している箇所もありますが各プロジェクトに合わせて、
随時修正して下さい。

```docker-compose.yml
db:
    image: mysql:8.0
    container_name: sample
    ###### 省略 ######
    # 以下追加
    command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
    # ここまで
```

続いてDockerfile

```
FROM mysql:8.0

COPY my.cnf /etc/mysql/conf.d/my.cnf

# 日本語環境を追加
RUN apt-get update && apt-get install -y locales \
    && sed -i -e 's/# \(ja_JP.UTF-8\)/\1/' /etc/locale.gen \
    && locale-gen \
    && update-locale LANG=ja_JP.UTF-8
# ここまで

ENV LC_ALL ja_JP.UTF-8

ENV TZ Asia/Tokyo
ENV LANG=ja_JP.UTF-8

CMD ["mysqld"]

EXPOSE 3306
```

以上の設定でdocker公式mysqlコンテナでも、
日本語が扱えるようになっているはずです！

これでやっと日本語のinsertが実行できる。。。
今やDockerは必須スキルになりつつあるなぁ〜
VBoxManageのメモ


VirtualBox使う時、VBoxManageコマンドの利用メモ

## HostOnlyIFの一覧の表示

```
$ VBoxManage list -l hostonlyifs
```
## HostOnlyIFの追加・削除
```
#vboxnet1の削除
$ VBoxManage hostonlyif remove vboxnet1

#vboxnetの追加(追加となる数字は空いているのから順番に)
$ VBoxManage hostonlyif create
GCPのワークフローサービスまとめ

# この記事はなに？
- Google Cloud認定資格の[Professional Data Engineer](https://cloud.google.com/certification/data-engineer?hl=ja)の勉強内容をまとめたものです。
- 一部、筆者の理解不足により誤った内容が書かれている可能性があります。
- 参考にしていただく際は必ず公式リファレンスも併せてご参照ください。
- また、`この内容を覚えれば資格に合格できる`と保証されたものではないことをご了承ください。

# Cloud Composer
## 特徴
- Apache Airflowのフルマネージドなワークフローオーケストレーションサービス。
- クラウドとオンプレミスにまたがるワークフローの作成やスケジュール、モニタリングを行える。
- BigQuery、Datastore、GCS、Dataproc、Dataflow、Cloud Pub/Sub、AI Platformなど、各種GCPサービスとのE2Eの統合ができる。
- 必要に応じて手動実行も可能。

## ワークフロー
- データ分析においては、読み込み、変換、分析までの一連のタスクを、ワークフローとして表現することができる。
- ワークフローは、Pythonを用いた`DAG`(有向非巡回グラフ)によって定義される。
    - DAG内の単一の処理をタスクと呼ぶ。
    - タスクで処理を実行するものを`オペレータ`と呼ぶ。

## アーキテクチャ
- 顧客プロジェクトとテナントプロジェクトで、それぞれGCPサービスが起動している。
    - 顧客プロジェクトでは、GKEクラスタ、GCSバケット、Artifact Registryレポジトリが生成される。
    - テナントプロジェクトでは、Cloud SQLインスタンスが生成される。


## バージョン
- Cloud Composer1とCloud Composer2が存在する。
    - バッチ処理だけを行いたい場合は、Cloud Composer2を選ぶことでGKEのAutopilotモードによりコストを抑えることができる。