OmniAICreator/Qiita-1.07M huggingface dataset:
taskctf2022 Writeup

# はじめに
お誕生日に一人でCTF運営してる人がいるらしいですよ，task4233っていう人なんですけど．

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">始まりました！<br>今回は初心者向けのTutorialジャンルを用意しています。<br><br>CTF未経験の方も挑戦してみてはいかがでしょうか？<a href="https://t.co/szBlRELgFo">https://t.co/szBlRELgFo</a><a href="https://twitter.com/hashtag/taskctf?src=hash&amp;ref_src=twsrc%5Etfw">#taskctf</a> <a href="https://t.co/BDtoP2rFsV">pic.twitter.com/BDtoP2rFsV</a></p>&mdash; task4233 (@task4233) <a href="https://twitter.com/task4233/status/1598695067690369030?ref_src=twsrc%5Etfw">December 2, 2022</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

とても楽しそうなので，参加登録しました．**当日の朝11時まで完全に忘れていましたが．**
TutorialとOSINTだけ全完したので，今回はOSINTだけ書こうかな...

とりあえず，まずはですね...

**taskさん，お誕生日おめでとうございます！！**（フライング）

# OSINT
### welcome
ググろう！！終わり！！
検索すると，[2019年に参加された方のWriteup](https://qiita.com/kusano_k/items/a768cece0a2737cc9be1)が一番上に出てきたので，こちらからFlagを拝借．

`taskctf{let's_enj0y!}`

### ramen
こいつぁ飯テロ案件だ，どうしてCTF関係の皆さんって飯テロばっかりするんですかね．
まぁ，本州行ったときにご飯屋に困らなくてすごく助かるんですけど．

多分，みんなGoogle Lens使って解くと思うんですけど，**僕は逆張りで「麻婆豆腐　ラーメン」と検索して探します**．
そしたらありました，写真と超絶マッチする見た目の麻婆豆腐ラーメン．
**いや，もはや麻婆豆腐**．とても辛そうなお店の名前だった気がする．

`taskctf{蝋燭屋}` （確かこんな名前）

ちなみに，検索中にどうもスパム踏んでしまったらしく，変なソフトがダウンロードされました．
アンインストールしようと頑張ってる時に発覚したのが，これ．

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">しらん間に，セキュリティソフトの環境ぶっ壊してたわ．<br>ﾜﾊﾊﾊﾊﾊwwww</p>&mdash; ざきまつ (@santana_hammer) <a href="https://twitter.com/santana_hammer/status/1598922564931178496?ref_src=twsrc%5Etfw">December 3, 2022</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

セキュリティコンテスト中に，セキュリティソフトがぶっ壊れているのが発覚する．
**それが，taskctf**．素晴らしいです．

### kofun
taskさんは，どうも8/14に問題に使われた写真を投稿していたようです．

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">友達と古墳を20基程度回るなどした <a href="https://t.co/ZqE77AKNlY">pic.twitter.com/ZqE77AKNlY</a></p>&mdash; task4233 (@task4233) <a href="https://twitter.com/task4233/status/1558826656151654400?ref_src=twsrc%5Etfw">August 14, 2022</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

この発言と右の写真から，**千葉県内の古墳**であることが推測できました．
あとは，見た目的に石室の入口っぽいので，一致する古墳を写真で探します．

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/688041/02cb4b63-4289-b761-9811-8667c74e5c13.png)

履歴，古墳ばっかで草生えますね．

古墳について詳しくなっていってるはずの皆さんを横目に，Flagを発見．

``taskctf{上福田岩屋古墳}``

### douro
写真の見たときに，僕の直感が「この風景はカリフォルニアだ！！！！！」と言っていました．
最高に意味が分かりません．確信はないので，確信付けに取り掛かりました．

手前の "RIGHT TURN PERMITED WITHOUT STOPPING" の下に何やら張り紙...

**"BE ELECT John H.WITHERS Mary Aileen MATHEIS"**？
調べてみると，どうもカリフォルニア州の州議員選挙をやっている時だったようです．
つまり，ここはカリフォルニアということですね．よかったよかった．

そして，さらに奥には...**"CULVER P"**...？
P...P...Pizza...？わかりません．Park，Plazaの可能性もわんちゃん，ネコチャンはいません．

ググると**Culver Plaza**がヒット，Pizzaはありませんでした．
いい感じに，アーバイン・センター・ドライブがマッチします．
ベアー・パウ側の交差点近くの経度・緯度を入力して完了です．

``taskctf{33.693_-117.798}``

# おわりに
やはり，OSINTしか解けない私はGeoguesserを目指すべきですかね...

Robotsとfirst，ransomwareについては，Hintの箇所まで自力で行けていたのですがそこから先ができず．
もっと勉強が必要ですね，精進します．

ちなみに結果↓
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/688041/bb02aa84-82f7-265f-5708-cf12eb565ee4.png)

**来年も，開催お待ちしています！！！！**
TableDataGateway & RowDataGateway

![04.TableDataGateway & RowDataGateway.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/11525/eeac3eb6-fa11-473d-e608-fcbb987d18a0.png)

https://bliki-ja.github.io/pofeaa/TableDataGateway/

https://bliki-ja.github.io/pofeaa/RowDataGateway/

ここからは、ビジネスロジックをどのように書くかとは別の視点、データソースのアーキテクチャに関するパターンを扱います。

ビジネスロジックの記述、とくに Domain Model においては、データ(あるいはオブジェクト)の扱いと取得/同期方法の関心を、できるだけ分離するのが健全です。ほとんどのデータベース操作は、単純で冗長な SQL の組み立てになってきます。データが出入りするインターフェースを、ビジネスロジックから見たゲートウェイとするのです。

Table Data Gateway は、特定のテーブルとの単純な入出力を担います。責務範囲がひとつのテーブルに閉じるため、Table Module との依存関係がシンプルになります。データの操作は `find(id)` や `insert(data)` といったメソッドで担います。

```plantuml
class FooTableDataGateway {
    insert(data)
    find(id)
    update(id, data)
    delete(id)
}
```

データの形式に、固有のデータ型を設けるか、汎用的なレコードセット型のままにするかについては、どちらでもかまいません。データベースの具体的操作を隠蔽することにのみ着目してください。

Table Data Gateway だけで十分な場合、このオブジェクトは `update(id, data)` と `delete(id)` を持つこともあります。が、そうした、対応する行が明らかな更新や削除の操作は、Row Data Gateway に担わせることもできます。

Row Data Gateway は対応する行の主キーを知っており、ビジネスロジックで扱うデータを参照します (データ側に主キー値を持つこともありますが、わかりやすさのため、図ではゲートウェイに id 属性を持たせています)。改めてメソッド引数を取ることなく、この既知の知識を使って操作用の SQL を構築します。対応する行以外への操作を行わないものとすることで、責務範囲が明確になり、扱いやすくなります。

```plantuml
class FooRowDataGateway {
    id
    data
    update()
    delete()
}

FooRowDataGateway o- "1" FooData
```

Table Data Gateway のインスタンス数は、テーブルの数と一致します。Row Data Gateway のインスタンス数は、取得された行の数と一致します。Row Data Gateway の生成の知識を隠蔽するために、Table Data Gateway の find メソッドを Row Data Gateway のファクトリとすることも可能です。
ApeX Pro (DEX) 使い方

## 目次
- [ApeX Proとは](#apex-proとは)
- [使い方](#使い方)
    - [ウォレット接続](#ウォレット接続)
    - [入金](#入金)
    - [トレード](#トレード)
    - [出金](#出金)
- [まとめ](#まとめ)

## Apex Proとは
Trade to Earnで稼げる分散型取引所（DEX）です。

## ウォレット接続
まずはサイトにアクセスします。(https://apex.exchange)

「今すぐ取引」をクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197741/c261a586-9e17-8ce1-8389-8eb6d7422b7b.png)
「ウォレットを接続する」をクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197741/1dbe083c-85d9-809f-b2b3-bce3e4b6409c.png)
「MetaMask」を選択。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197741/b9989653-3ae1-e578-ec66-ad0303a25cc4.png)
「リクエストを送信する」をクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197741/cb178703-f95e-60a1-ebfc-6c233125461a.png)
「署名」をクリック。
※事前にChromeの拡張機能にMetaMaskをインストールしておく必要があります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197741/e310e998-9230-09a9-2886-1df6bd712016.png)
もう一度「署名」をクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197741/cfa7cae7-7d8b-c766-42a0-d4aea3bf950f.png)
これでApeXProの取引所にウォレット接続できた状態になります。

## 入金
まず最初にMetaMaskのウォレットに資金が入っていない人は
国内取引所とかでETHを購入してMetaMaskのウォレット宛に送金しましょう。

左下の「デポジット」をクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197741/2ee9e6be-c595-ec99-3c05-80f66f13b239.png)
送金する金額を入力して「デポジットを確認する」をクリック。
※自分はMetaMaskでETHをUSDCに変換してUSDCを用意しましたが、資産のところでETHを選択して入金することもできます。ETHを選択した場合は自動でUSDCに変換されてApeXProに入金されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197741/2dcbfe4c-3809-2d62-b3e7-8c17017a3ee9.png)
「確認」をクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197741/d15f4230-2c1f-619e-5dea-27c9d56f8569.png)
入金の進捗状況が右上の方に表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197741/843ecf91-defe-bc69-cde7-9c1d6f3fe510.png)
入金が完了するとダッシュボードの総資本に入金額が反映されます。

## トレード
説明省略します。一般的なUIなので特に問題なくトレードできるかと。
トレードを行うと$BANAというトークンを獲得できます。(ざっくり言うと取引手数料の合計と建玉サイズ平均値が大きいと沢山貰える感じ）
これはUSDCに交換できたり保持しておいて$APEXというトークンに交換することも可能です。
$APEXを持っていると取引手数料の一部が報酬として貰えるっぽいです。
APIでの取引とかもできます。

## 出金
左下の「引き出し」をクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197741/6c7cd7f4-8953-ff6a-9bb0-65917c132a76.png)
出金する金額を入力して「引き出しを確認する」をクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197741/9a9daf01-694b-52a6-b7b4-714364c9dc69.png)
「引き出し」をクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197741/4dd9d1f5-273f-7b98-881f-3916ada88663.png)
数分待つとMetaMaskのウォレットのUSDCに出金された金額が反映されます。

## まとめ
個人的にApeXProはUIがシンプルでいいなと思いました。
あとトレードしてるだけでトークン貰えるので面白いなと思いました。
nanoVNA-Hのファームウェア更新

## nanoVNAとは
トラ技やRFワールドで特集されたりと特定の界隈では結構有名な安価なネットアナです。
nanoVNA-H以外にもH4だの名前は違うけど見た目が似てたりと亜種がたくさんあって把握しきれてません。
年末のAmazonのセールで目に入ったので衝動買いしました。コンデンサの反共振とか実装位置によるインピーダンスの変化がこれで見れたりできないかなと思ってます。
今回は遊ぶ前にファームウェアを最新に更新したいと思います。
## 事前準備
### 書き込みツールの入手
以下のURLからdfu-util-0.11-binaries.tar.xz(記事作成時の最新)をダウンロードして解凍します。書き込みには「dfu-utli.exe」を使います。
https://dfu-util.sourceforge.net/releases/
### ドライバーの変更
以下URLの「Download」より最新のファイルを入手する。
https://zadig.akeo.ie/
nanoVNAとPCをUSBで接続しnanoVNAの電源をON
ダウンロードした「zadig-2.7.exe」を起動し[Options]→[List All Devices]にチェック
<img width="400" alt="writefw" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/695279/f6c13e4f-f0dc-9ece-d72c-563f2ac8b85c.png">

以下図を参考に設定し[Replace Driver]をクリック
<img width="400" alt="writefw" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/695279/0418c831-ca2f-7498-8aec-265258fa7151.png">
#### 補足
ドライバーの変更をしなかった場合以下のエラーが出ました。
(この手順が必要と知らず最初は失敗)
<img width="400" alt="writefw" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/695279/98708099-5a5b-e243-405d-d3f959ae8735.png">

22/12/07追記：
ファームウェア更新が完了したらドライバーはデバイスマネージャーからアンインストールしてUSBケーブルを抜き差しする事
私の環境では上記手順を実施しないとPCソフト(NanoVNA Saver)が接続できませんでした。

### ファームウェアの入手
以下から最新のファームウェアを入手する
https://github.com/hugen79/NanoVNA-H/releases
#### NanoVNA-H用のbinが2つあるけど違いがわからん
NanoVNA-H用のbinはSI、MSという2種類の名前のbinがあります。
これは搭載されているクロックジェネレータに違いがあるそうです。
昨今の半導体不足でSi5331(シリコンラボ製)が入手困難となり(謎のメーカー製)MS5351の個体もあるようです。ファイル名のSI,MSはこの識別。
裏面のラベルにMSと書いてたらMS5351品らしいです。2022年購入の私のものは以下図の通りMS5351品でした。。
<img width="400" alt="writefw" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/695279/9d2ae679-3cae-70ae-ede0-76350658f764.png">
ということで私は「NanoVNA-H-MS_20220831.bin」をダウンロードしました。
これを書き込みツール「dfu-utli.exe」と同じディレクトリに格納して準備完了。
## 書き込み手順
nanoVNAとPCをUSBケーブルで接続しnanoVNAの電源をON
コマンドプロンプトで書き込みツールのディレクトリまで移動して
```
cd C:\dfu-util-0.11-binaries\win64
```
以下のコマンドを実行
「NanoVNA-H-MS_20220831.bin」は任意のファイル名に書き換えて下さい。
```
dfu-util.exe -d 0483:df11 -a 0 -s 0x08000000:leave -D NanoVNA-H-MS_20220831.bin
```

書き込み中.... 
以下の通り100%になったら完了です。
<img width="400" alt="writefw_end" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/695279/e6023bbb-e26a-c6e8-2311-9a830f74cef2.png">
AWS認定クラウドプラクティショナー合格に向けて Day9

# 前回の内容
[AWS認定クラウドプラクティショナー合格に向けて Day8](https://qiita.com/Ayako_0224/private/2efd9e496b3e53c50aea)

# EC2とは
数分で利用可能となる従量課金で利用可能な仮想サーバー
- 起動・ノードの追加・削除・スペックの変更が数分で可能
- 汎用的なIntelアーキテクチャを採用
- 管理者権限で利用可能
- 豊富なOSサポート
- EC2の独自設定をAmazon Machine ImageにOS設定を作成し、保存・バックアップが可能

利用する単位をインスタンスと呼び、任意のアベイラビリティゾーンにインスタンスを立ち上げてサーバーとして利用する
## セッティング
### 1.AMIイメージの設定
AMI: インスタンス起動用のOSイメージ
OSセッティング方式を選択すること
以下から選ぶ
- AWS提供
- 3rd party
- 自作

### 2.インスタンスタイプを選択
CPU/メモリ/ストレージ/ネットワークキャパシティなどのサーバーリソースを選択する
リザーブドインスタンス(1年or3年契約)、スポットインスタンス(予備のコンピューティング容量を割引価格で利用)の購入方式を選択すると割引が適用される

- ハードウェア専有インスタンス
- Dedicated Host
- Bare Metal

### 3.ストレージを選択
#### インスタンスストア
EC2の一時的なデータを保持するのに使用
EC2の停止や終了と同時に削除される
#### Elastic Block Store
ネットワークで接続されたブロックレベルのストレージでEC2とは独立管理
別途料金が発生する

### 4.セキュリティグループを選択
インスタンスへのトラフィックのアクセス可否を設定するファイヤーウォール機能を提供

### 5.キーペアを設定
秘密鍵と公開鍵をマッチしてインスタンスにアクセスする

次の記事は➡︎[AWS認定クラウドプラクティショナー合格に向けて Day10](https://qiita.com/Ayako_0224/items/f99ae3b8a6ade17e7266)
結局WebSocketってなに？

## 背景
　YouTube Live Streaming APIを用いたライブ配信機能を実装する時に、WebSocket通信（Socket.IOというライブラリを使いました）を用いて実装したのですが、実装中に、

**「そもそもWebSocketとは？」**

と何回も原点回帰を繰り返しては、頭の中がかなり混乱していたので、その経験を踏まえて、WebSocketについて簡潔にまとめようと思い記事にしました。

## ズバリWebSocketとは？
　簡潔にいうと、Webアプリケーションを作成する際に使用される通信プロトコルです。
WebSocketを使用すると、**WebブラウザとWebサーバー間で双方向通信を行う**事ができ、ライブチャットやオンラインゲームなど、**リアルタイム性の高いアプリケーションを作成**することができます。

### 通信プロトコルってなんだっけ？
　通信プロトコルとは、**通信を行うための規則や手順**のことです。
通信する2つの端末間でデータをやり取りするために、どのような形式や方法でデータを送信するか、どのような順序でデータを受信するかなどを定めたもので、インターネットプロトコルやWebプロトコル、Bluetoothプロトコルなどが代表的な通信プロトコルです。

**インターネットプロトコルの例**
- TCP/IP（Transmission Control Protocol/Internet Protocol）
    - インターネットを構成するコンピューター同士がデータをやり取りするための基本的なプロトコル

**Webプロトコルの例**
- HTTP（Hypertext Transfer Protocol）
    - WebブラウザからWebサーバーへリクエストを送信し、データを送信するためのプロトコル
- HTTPS（Hypertext Transfer Protocol Secure）
    - HTTPプロトコルにセキュリティ機能が追加されたもので、通信内容の暗号化が可能
- FTP（File Transfer Protocol）
    - ファイルのアップロードやダウンロードを行うためのプロトコル
- WebSocket
    - WebブラウザとWebサーバー間で双方向通信を行うためのプロトコル
:::note warn
Webプロトコルはインターネットプロトコルの一つとも言えます
:::

### HTTPとWebSocketの違い
 HTTPとWebSocketの違いは、主に以下の2点です。

1. 通信方式の違い
　HTTPは、**通信が発生するたび**に、WebブラウザーからWebサーバーへリクエストを送信し、WebサーバーからWebブラウザーへ応答を返す通信方式です。
一方、WebSocketは一度接続した後、WebブラウザーとWebサーバー間で**常に接続が維持される**通信方式です。

2. 通信速度の違い
　HTTPは、通信が発生するたびに通信が行われるため、**通信速度が遅く**なります。
一方、WebSocketは、常に接続が維持されるので、通信が発生するたびに通信が行われる必要がなく、**通信速度が速く**なります。

## それで、WebSocketはどうやって使うの？
大体の処理では、次のような手順が考えられます。
1. WebブラウザでWebSocketに対応したAPIを使用して、WebSocketサーバーと接続
2. WebSocketサーバーとの接続が確立したら、クライアント側からWebSocketサーバーへメッセージを送信
3. WebSocketサーバーは、クライアントから送信されたメッセージを受信し、必要に応じて処理を行う
4. WebSocketサーバーから、クライアントに対して応答やデータを送信
5. クライアント側は、WebSocketサーバーから送信された応答やデータを受信し、必要に応じて処理を行う

つまり、WebSocketプロトコルを使用するには、**必然的にWebブラウザとWebサーバーの両方でWebSocketに対応している必要があり、且つWebSocketサーバーを用意する必要があります**。

### 実装例
WebブラウザーからWebSocket接続を行う

```js
const ws = new WebSocket("wss://example.com");
```
WebSocket接続が成功したときに実行する処理

```js
ws.onopen = () => {
  console.log("WebSocket connection established");
};
```
WebSocket接続が失敗したときに実行する処理

```js
ws.onerror = (error) => {
  console.log("WebSocket connection error: " + error);
};
```
WebSocket接続が切断されたときに実行する処理

```js
ws.onclose = () => {
  console.log("WebSocket connection closed");
};
```
データ送信

```js
ws.send("Hello, world!");
```
データ受信
```js
ws.onmessage = (message) => {
  console.log("Received message: " + message);
}
```

### WebSocketを使うときの便利なライブラリ
- Socket.IO（Node.js用）
- websocket-client（Python用）
- autobahn（Python用）
- WebSocket-Node（Node.js用）
- Python-WebSocket-Server（Python用）

## YouTube Live Streaming APIでなんでWebSocketが必要になった？
　単純に、WebSocketを用いることで**配信者と視聴者間でリアルタイムでコミュニケーションが可能になる**からです。

　実際には、WebSocket以外にもHTTPを使用することができます。
しかし、HTTPはリアルタイムな通信を実現するための技術ではないので、YouTube Live Streaming APIを用いてライブ配信を行う場合は、HTTPよりもWebSocketを使用することが推奨されています。

## これであなたもWebSocketマスター
これでWebSocketについて大分理解が深まったのではないでしょうか！
私も最初は、
「WebSocketって聞いたことあるけど、他の人から何？と聞かれると、確かに何だろう？」
という状態で、色んな記事を見れば見るほど、
「結局WebSocketってなんなんだ！」
と堂々巡りでした。
この記事で、少しでもWebSocketについての知識を深める助けになれれば幸いです。

ハッピーホリデー！メリークリスマス！🎄
HHKB修飾キーのチューニング

https://twitter.com/MxShun/status/1442698186213126144?s=20&t=Ktcftqca7FsH1jFpo7gAOw

「HHKB Professional HYBRID 日本語配列」デビューから１年 ――、
Windows のみでの利用だった私が、個人的事情で Windows と Mac の併用することになりました。

そのタイミングで、HHKB 修飾キー（Control、Shift、◇ 等の特殊キー）を見直しました。参考になれば幸いです。

### 個人的な制約

- Windows のショートカットキーを違和感なく Mac でも使える
- Mac キーボードの利用も想定（「キーマップ変更機能」はあえて使わない）

### チューニング手順

１．自分のよく使う Windows ショートカットキーを洗い出す
２．1.で洗い出したキーと対応する Mac、HHKB のキーを整理する
３．Windows、Mac、HHKB のキーが物理的に近いように設定する

### 私の最終解
#### DIP スイッチ

| DIP SW | 設定 |　機能 |
| --- | --- | --- |
| SW1 | **ON** | Macintosh モード |
| SW2 | OFF | デフォルト |
| SW3 | OFF | デフォルト |
| SW4 | OFF | デフォルト　|
| SW5 | OFF | デフォルト　|
| SW6 | **ON** |　省電力モードオフ |

#### Mac 修飾キー設定

| HHKB 上のキー | Windows 上のキー | Mac 上のキー(変更前) | Mac 上のキー(変更後) |
| --- | --- | --- | --- |
| Control | Ctrl | Control | Command |
| Opt Alt | Alt | Option | Command |
| ◇ | Windows キー | Command | Control |

#### よく使うショートカット整理

 ショートカット| Windows 上のキー | Mac 上のキー(修正前) | Mac 上のキー(変更後) |
| --- | --- | --- | --- |
| アクティブタブを順方向に切り替え | Ctrl + Tab | Control + Tab | Command + Tab |
| アクティブウインドウを順方向に切り替え | Alt + Tab | Command + Tab | Option + Tab |
| アドレスバー全選択 | Ctrl + L | Command + L | Control + L |
| アクティブタブを閉じる | Ctrl + W | Command + W | Control + W |
| アプリケーション終了 | Alt + F4 | Command + Q | Control + Q |
AWS認定クラウドプラクティショナー合格に向けて Day8

# 前回の内容
[AWS認定クラウドプラクティショナー合格に向けて Day7](https://qiita.com/Ayako_0224/private/e5042aef77dc5fec8f7d)

# サーバーとは
サービスを提供するソフトウェアとその機能が稼働しているコンピュータのこと
## サーバーソフトウェアとは
サーバーの役割と機能を提供する
- Linux
- Windows Server
- APACHE
- ORACLE

など
## サーバーのハードウェアとは
データセンターなどに設置されているものが代表格
PC/スマホでもソフトウェアをインストールすることでサーバーとしても機能させることが可能になる

# サーバーの役割
リクエスト/レスポンスの処理を実行してくれるもの
サーバーがアプリケーションサービスを提供する
## WEBサーバー
HTTPに対応しWEBページを表示させたりするサーバーのこと
- ソフトウェアによって起動
- HTMLに表示
- クライアントからのリクエストに対してレスポンスを返す

## アプリケーションサーバー
WEBサーバーより受け取った情報を処理するためのもの

## バッチサーバー
バッチ処理を行うためのサーバー
何かしらのまとまった処理を実行するためのスクリプトなどを動作させる
定期的に重たい処理を実行することが多いため、メインサーバーを切り離して用意することが多い

## データベースサーバー
リクエストに対して必要なデータをCRUDなどデータ管理を実行する
バックアップなどの管理も可能

## APIサーバー
URLにアクセスするとそのデータがJSON形式で閲覧できる
このように外部に提供するデータをAPIと呼び、APIのデータ供給機能を別サーバーで動かしている場合のサーバーのことを指す

## DNSサーバー
ドメイン名とIPアドレスと変換する仕組みを提供するサーバー

## メールサーバー
ネットワーク接続を通してメールの送受信を行うサーバーのこと
送信されたメールはメールサーバーを経由して届けられる

次の記事は➡︎[AWS認定クラウドプラクティショナー合格に向けて Day9](https://qiita.com/Ayako_0224/items/dc9afb65197a4f891693)
AWSでReactjsをS3にデプロイしてみた 

# AWSでReactjsをS3にデプロイしてみた 
## 前提条件
* ソース管理：Bitbucket
* クラウド環境：AWS
* 独自ドメインでのhttpｓ（SSL）

### 手順概要
1\. S3にバケットを作成する
2\. CloudFrontで作成したバケットを公開する
3\. Route53にドメインを設定する
4\. BitbucketでS3にコピーする設定を行う
5\. パイプラインで実行

#### 1\.S3にバケットを作成する

S3でパブリック・アクセスできるバケットを作成する。
#### バケット作成の設定
バケット名：任意のバケット名。できれば、独自ドメインのホスト名と同じにしたほうが運用しやすいです。
・オブジェクト所有者
●ACL有効
●オブジェクトライター
・このバケットのブロックパブリックアクセス設定
 チェックボックスをすべて外す

バケットを作成した後、プロパティを開く
・静的ウェブサイトホスティング
●有効
・ホスティング
●静的ウェブサイトをホストする
・インデックスドキュメント
index.html
・エラードキュメント - オプション
index.html
・リダイレクトルール – オプション
```
[
    {
        "Condition": {
            "HttpErrorCodeReturnedEquals": "403"
        },
        "Redirect": {
            "HostName": "ホスト名",
            "Protocol": "https"
        }
    }
]
```
保存する。

バケット設定のアクセス許可を開く
・バケットポリシーを設定
```
{
    "Version": "2008-10-17",
    "Id": "PublicRead",
    "Statement": [
        {
            "Sid": "1",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::バケット名/*"
        }
    ]
}
```
・CORS設定
```
[
    {
        "AllowedHeaders": [
            "*"
        ],
        "AllowedMethods": [
            "GET",
            "PUT",
            "POST",
            "DELETE",
            "HEAD"
        ],
        "AllowedOrigins": [
            "*"
        ],
        "ExposeHeaders": [
            "ETag",
            "x-amz-meta-custom-header"
        ],
        "MaxAgeSeconds": 3000
    }
]
```

#### 2\.CloudFrontで作成したバケットを公開する
ディストリビューションを作成する。
・オリジンドメイン
 S3で作成したバケットのホスト名を選択する
・名前
 ホスト名
・設定-カスタム SSL 証明書 - オプション
 ・事前に作成したSSL証明書を選択する。

#### 3\.Route53にドメインを設定する
レコードを作成する
シンプルルーティングでAレコードを作成する。
・レコードタイプ：Aレコード
・トラフィックのルーティング先
 「CloudFrontディストリビューション」を選択し、CloudFrontで作成したディストリビューションを選択する。

保存

#### 4\.BitbucketでS3にコピーする設定を行う
ルートにbitbucket-pipelines.ymlファイルがなければ作成する

bitbucket-pipelines.ymlの設定例
環境変数
AWS_ACCESS_KEY_ID：APIキー
AWS_SECRET_ACCESS_KEY：APIシークレットキー
AWS_DEFAULT_REGION：リージョン
```
pipelines:
  branches:
    sandbox1:
      - step:
          name: builds
          size: 2x
          script:
            - apt-get update && apt-get install -y unzip ssh gpg zlib1g-dev gnupg2 zip
            - cp .env.dev .env
            - npm install
            - npm run build
          artifacts:
            - build/**
      - step:
          name: Deploy to S3
          script:
            - pipe: atlassian/aws-s3-deploy:0.3.8
              variables:
                AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID}
                AWS_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY}
                AWS_DEFAULT_REGION: ${AWS_DEFAULT_REGION}
                S3_BUCKET: '{バケット名}'
                LOCAL_PATH: 'build'
                ACL: 'public-read'
```
コミットする。

#### 5\.Bitbucketのパイプラインで実行
・Run Pipelineでブランチを選択して、Pipeline(上記の例だとsandbox1)を選択して、Runボタンを押す。

問題なければ、S3のバケット上にbuildディレクトリ以下のファイルがデプロイされます。


以上//
Power Automate の Infinity

# はじめに

**Infinity ：無限大，無量**

この世に「**無限**」などというものが存在するか、それは誰にも実証ですることはできません。

しかし、Power Automate には確かに、**Infinity** は存在するのです。


# 注意

この記事は完全にネタです。
ご存じの通り、Power Automate の可能性は無限大ですが、今回はそういう話ではありません。
頭を空っぽにし、Power Automate はこんな動作をするのだなぁ、くらいに読んでいただければと思います。



# Infinity

早速のネタバレですが、Infinity は 数値がオーバーフローすると出現します。

Power Automate の Float（浮動小数点）型 の

最大値は
`` 1.7976931348623e+308 ``

最小値は
``-1.7976931348623e+308``

です。

これをオーバーフローさせたいので、
``±1e+295``
を足してみます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480768/359604b0-b969-5407-8171-70247030fd9a.png)

**Infinity!!**

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480768/6e7267d4-58a3-86e5-6843-6d32a2a01499.png)

ちなみに、上記がオーバーフローの際（きわ）なので、
±1e+294 ではオーバーフローしません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480768/49af3a3f-555c-9ef5-f23c-7007fa0e4c52.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480768/17c777d9-a9d6-0b0f-2fbd-9f9bca165159.png)


# Infinity

前述の通り float の最小値は、-1.7976931348623e+308 なので -1e+295 を ADD してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480768/a9321383-c93a-9a6f-dc37-5496c78605fb.png)


**-Infinity!!**

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480768/7e097ecc-3b2d-76c1-1496-8f126b7bb336.png)

マイナスインフィニティ！
負の無限大！

# まとめ

くだらない、と言ってしまえばとそれまでですが、これもまた Power Automate の仕様を理解する一端となるのかなと思います。

現場からは以上です。
本郷キャンパスのすすめ

# 本郷キャンパスのすすめ

これは理物 Advent Calendar 2022の4日目の記事です．
12/1にその場のノリで即席で作られたアドカレのため，優秀な学科民をもってしても真面目な物理の事を書くには準備期間が短すぎる．~~そのための時間稼ぎです．~~
東京大学本郷キャンパスが主に立地の面でオタ活[^0]に恵まれていることについて語り，進路を悩んでいる前期教養学生や受験生の一助になることを期待しています．

## はじめに
東京大学では初めの2年間が前期教養課程として定められ，その間(厳密には2年の夏まで)駒場キャンパスで過ごすことになります．本郷キャンパスに移動できるのは早くて2年生の後半です． 
また，そのタイミングで本人の希望を基に振り分けられる学科によっては後期課程でも駒場キャンパスに通う事になります．**そのため特に数学をやりたいという方はあまり本郷キャンパスに縁がなく，ここで挙げるような恩恵を感じることは少ないかもしれません．** 悪しからず．

## 本題
さて，無事に本郷キャンパスに通うようになったとします． 
ここまで来るとオタ活し放題の日々が待っています．これを見るためにまずは東京大学の90分授業の授業日程を見てみましょう[^1]．

| 時限 | 開始時刻 | 終了時刻 |
|:-----------:|:------------:|:------------:|
| 1時限目       | 8:30        | 10:00   |
| 2時限目     | 10:25      | 11:55       |
| 3時限目     | 13:15        | 14:45         |
| 4時限目     | 15:10        | 16:40         |
| 5時限目     | 17:05      | 18:35      |

ここで注目すべきは昼休みが11:55~13:15と**80分間**もあることです．


さて，みなさんはオタク文化の街と言えばどこを思い浮かべるでしょうか？そうですね，秋葉原です．アニメイト，ゲーマーズなどをはじめとしたアニメ関連商品を取り扱う店が多く立ち並び，オタ活にはもってこいの場所です．

秋葉原と本郷キャンパスの位置関係は次のようになっています．
![akamon-akihabara.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3001027/5a43668e-77a4-c9d5-4ebc-4cb568f417bb.png)

https://www.google.co.jp/maps/dir/Akamon+Gate,+7+Chome-3+Hongo,+Bunkyo+City,+Tokyo+113-0033/Akihabara+Station,+1+Chome+Sotokanda,+Chiyoda+City,+Tokyo/@35.7045172,139.7622271,16z/data=!3m1!4b1!4m14!4m13!1m5!1m1!1s0x60188d63dffe90ad:0xcdce7d5389fe8711!2m2!1d139.7603537!2d35.7106228!1m5!1m1!1s0x60188ea7e2f93329:0x158f36257ff597b1!2m2!1d139.7730717!2d35.698383!3e2

本郷キャンパスと一口に言っても広いので赤門を基準にすると，秋葉原駅までは徒歩で30分もかからずに着くことができます．用があるような場所は大抵，秋葉原駅よりキャンパス側に固まっているので実際はこれより早く目的地に着けます．
徒歩の現実的な時間で着くのは交通費をなるべく抑えてオタ活費用に回したい学生には嬉しいところ．逆に，公共交通機関を使うのは徒歩より時間がかかるのでオススメしません．

 
往復の時間を差し引くと20分間は猶予があるので，事前に買うものさえ決めておけば**2限終了とともに秋葉原へ向かい買い物を済ませたのち，余裕を持って3限終了までに戻ってくる**，という芸当が可能です．すごい． 
特に自分が足を突っ込んでいる界隈[^2]では，ライブ先行のシリアルが付いたCDがフラゲ日の発売数時間後には店頭から消えるといった 怪奇現象 が起きるので，午後の空きコマに左右されず好きな日に秋葉原で買い物ができるのはとても強力なアドになります．

https://twitter.com/manmaru_hukuro/status/1518803428038029313?s=20&t=kLUFyXR-Qus7_fm5wALD9Q

...お昼を食べている余裕はないかもしれません．

## 最後に
ここまで授業が1コマ90分という仮定で話を展開しましたが，コロナ対策が緩和され授業時間が以前の105分に戻りつつあり，昼休みが30分削られて昼休みに秋葉原で買い物という上記のワザはもう使えなくなっています．悲しい．

**――そんなあなたに朗報です！！！**

東京大学理学部物理学科では，2週に1度，**週3日が午後休**になります！さらに演習の授業を自力で解くと割り切れば**全日午後休**も可能です！！


また，理由はわかりませんがオタクが多いことでも有名なこの学科．
学科同期と午後秋葉原に出向いて色々な店のグッズを見てあーだこーだ言いながら散策したり，少し遠出してお台場[^3]や原宿[^4]などへ聖地巡礼に出かけることが最高の息抜きになります．

この記事を読んだそこのあなた！ぜひ東京大学理学部物理学科に来ませんか？

[^0]:オタ活と一概に言っても，現場(ライブや接近イベ)に行く，コラボカフェに行く，グッズを買う，聖地巡礼をするなど多岐にわたりますが，聖地巡礼以外のほぼ全てをカバーできていると思っています．

[^1]:学科によって微妙に違うので，[理学部授業時間](https://dl5s7ayfvssw3.cloudfront.net/WEB_info/p/pub/8359/%E3%80%90HP%E7%94%A8%E3%81%BE%E3%81%A8%E3%82%81%E3%80%912022%E7%90%86%E5%AD%A6%E9%83%A8%E6%99%82%E9%96%93%E5%89%B2%E8%A1%A8.pdf) (該当箇所は3ページ目)を参照しました．

[^2]:ラブライブ！のこと．

[^3]:『ラブライブ！虹ヶ咲学園スクールアイドル同好会』は東京お台場を舞台としています．キャラクターが通う「虹ヶ咲学園」の校舎はなんと東京ビッグサイト！最近ではりんかい線とのコラボが発表され，「国際展示場」駅内の一部駅名表示が「虹ヶ咲学園前」に期間限定で変わるということが話題となりました．とてもオススメのコンテンツです．

[^4]:『ラブライブ！スーパースター‼』は東京原宿を舞台に「結ヶ丘女子高等学校」に通う生徒がスクールアイドル活動を通じて「わたしを叶える物語」です．3rd Live Tourが昨日12/3(土)からから始まっています．こちらもオススメ．
M1チップMacbookをVenturaからMontereyへダウングレードした話（ブータブルインストーラ使用）

この記事はVoicy Advent Calendar 2022の3日目の記事です。

https://qiita.com/advent-calendar/2022/voicy

こんにちは、Voicyカンパニークリエイターのみのりー（@minorii_jp）です。
カンパニークリエイターは組織開発がメインの仕事ですが、Voicyには専任の情シスがいないため、PC関連の仕事を私が担っております。

先日新しいMacOS Venturaがリリースされましたが、弊社で導入しているセキュリティソフトがなかなかVenturaに対応してくれない中で、Venturaに間違えてアップデートしてしまったのでその際に踏んだ手順を残します。

また、今回は外付けHDDを使用してダウングレードを実施しました。
※ダウングレードの際はPCが文鎮化する可能性もありますので自己責任でお願いいたします。

# 使用したMacスペック
MacBook Air (M1, 2020)

# 事前準備
1. バックアップを取る
https://support.apple.com/ja-jp/mac-backup
1. 16GB以上の外付けHDDを用意する

# ダウングレード方法
### 手順1 外付けHDDをフォーマットする
1. 外付けハードドライブをMacに接続する。
1. スポットライトで「ディスクユーティリティ」アプリを開く。
1. サイドバーでドライブを選択し、ウィンドウ上部の「消去」ボタンをクリックする。![ディスクユーティリティ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/887239/c632ab1a-eb46-d04f-546c-b9bd0f539d9e.png)
1. ドライブの名前を「HDD」にする
1. 「フォーマット」のドロップダウンメニューから、「APFS」を選択する
1. 「消去」ボタンをクリックして、「完了」をクリックする

### 手順2 外付けHDDにMontereyをダウンロードする
1. 下記リンクより、AppleStoreに飛びMontereyをダウンロードする
[macappstores://apps.apple.com/jp/app/macos-monterey/id1576738294?mt=12](macappstores://apps.apple.com/jp/app/macos-monterey/id1576738294?mt=12)
1. 「ターミナル」アプリを開き、下記コマンドを入力して実行。
```sudo /Applications/Install\ macOS\ Monterey.app/Contents/Resources/createinstallmedia --volume /Volumes/HDD```
1. パスワードを入力して、もう一度Enterを押す。
1. ターミナルに「完了」と表示されたら、ターミナルを終了し、ハードディスクを取り出す。

### 手順3 初期化
この手順をちゃんとやらないと文鎮化する可能性があるので一つ一つ確認しながら行うこと。
1. Apple アイコンをクリックしてシステム終了する。
1. 電源ボタンを長押ししてMacを再起動する。
1. 「Machintosh HD」と「オプション」が表示されるので、「オプション」を選択（Machintosh HDは初期設定時の名前なので別名の可能性あり）
1. 「Machintosh HD」（初期設定時の名前なので別名の可能性あり）を選択し、上部の「消去」を選択
1. フォーマット「APFS」で消去ボタンを押す。
1. 「Macを消去して再起動」→「Macを消去」を押す


### 手順4 ブータブルインストーラで macOS をインストールする
1. 再起動後、言語選択画面で言語を選択
1. Macのアクティベートを求められるので、インターネットに接続し自動的にアクティベートされるのを待つ
1. 復旧ユーティリティに戻り、指示に従って、作成したブータブルドライブを使って指示に沿ってmacOS をインストールする。
1. 完！


# 最後に
約1ヶ月前に行った作業で色々と思い出しながら書きました、、
再度ダウングレードする機会に画像も撮影して再編集しよりわかりやすい記事にします！

株式会社Voicyでは一緒に働く仲間を募集しています。興味をお持ちいただいた方は、下記サイトをご覧ください。
https://hrmos.co/pages/voicy/jobs

明日のVoicyアドベントカレンダーは @voicysm さんの「登壇資料作成にslidevを使った話」です！お楽しみに！
https://qiita.com/advent-calendar/2022/voicy
ChatGPTはAI絵師についてどう思っているのか

この記事は [限界開発鯖 Advent Calendar 2022](https://qiita.com/advent-calendar/2022/approvers) - ~~5~~ 4日目の記事です。

このQiita記事は全てChatGPTが執筆しました。

# テーマ
本記事では、AI絵師についてどう思っているかについて紹介します。

# AI絵師とは
AI絵師とは、人工知能によるイラスト生成モデルです。AI絵師は、人間が描いたイラストをトレーニングデータとして用いてトレーニングされます。そのため、AI絵師は人間のようなイラストを生成することができます。

# イラスト生成モデルの紹介
現在、多くのイラスト生成モデルが開発されており、さまざまな用途で活用されています。例えば、「pix2pix」は写真からイラストを生成することができます。また、「SketchRNN」は手書きのイラストを元に、さらにイラストを生成することができます。

# AI絵師について
AI絵師は、人間が描いたイラストを元にトレーニングされます。そのため、AI絵師が生成するイラストは、人間が描いたイラストとよく似ています。また、AI絵師は、人間が描いたイラストを元にさらに新しいイラストを生成することができます。

# 私はAI絵師についてこう思っている
私は、AI絵師は人間が描いたイラストを元にトレーニングされるため、その絵は人間のようなイラストを生成することができます。また、AI絵師は人間が描いたイラストを元にさらに新しいイラストを生成することができるため、非常に面白いと思います。

# いかがでしたか？
本記事では、AI絵師についてどう思っているかを紹介しました。AI絵師は人間が描いたイラストを元にトレーニングされるため、その絵は人間のようなイラストを生成することができます。また、AI絵師は人間が描いたイラストを元にさらに新しいイラストを生成することができるため、非常に面白いと思います。

いかがでしたか？ AI絵師は、人工知能がもたらす新しい技術の面白さを感じられると思います。また、AI絵師が生成するイラストも非常に美しいと思いますので、是非試してみてください。

# ここからはChatGPTに代わり筆者が書いています

実際にプロンプトに入力した文としてはこんな感じです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/338279/8d182e12-8c0c-07f5-9951-be869934b8d2.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/338279/8ccd3b05-82f3-9176-329d-f10605d96e9a.png)

次に記事形式の回答ではなくChatGPTにAI絵師に対してどう思っているかを直接聞いてみました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/338279/bac90bf7-90f2-05ed-6a8e-ada7ea945737.png)

イラストを生成するという技術としては賛成的ですが、これを使って絵師を名乗る人に対しては否定的ですね。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/338279/da4020e7-3a7b-8298-81a2-4c0ea00e5455.png)

AIが仕事を奪うかどうかについては否定的ですね。ただ、今後さらに精度向上されたモデルが出てくることが考えられるので、これを信じ切ってしまうのも良くないです。あくまで一意見としてとらえてください。

ちなみにですが21日目の記事は1から書きます。


## 参考

[この記事はすべてAIが書いています。 @minorun365 ](https://qiita.com/minorun365/items/a830ba65158c7df688d6)
ExpressRouteの接続方法

●ExpressRouteの接続方法
３つのいずれかの接続モデルを使用して接続するが、日本では「Cloud Exchangeでの同一場所配置」または「任意の環境間ネットワーク」のいずれかの方法で接続ポイントに接続する。

※接続ポイントは「ExpressRouteの場所」や「ピアリングの場所」とも呼ばれる。

■ポイントツーポイントのイーサネット接続
オンプレミスネットワークから直接、ExpressRoute回線を使用してマイクロソフトネットワークおよびデータセンターへ接続する方法。日本では使用できない。

■Cloud Exchangeでの同一場所配置
L2サービスとも呼ばれる。接続ポイントに回線引き込み済みの接続プロバイダーと契約し、接続プロバイダーの局内に自社の機材を導入する方法。
オンプレミスネットワークから接続プロバイダーの局内までは任意のキャリアで接続する。
運用コストが高く、接続トラブルの際はユーザー自身で調査や対応が必要。

■任意の環境間ネットワーク
L3サービスとも呼ばれる。接続ポイントに回線引き込み済みの接続プロバイダーのWAN回線を利用。
マンダラチャートとは

### マンダラチャートとは
**マンダラチャート**は、曼荼羅模様のような 3x3 の正方形を 3x3、計 9x9 並べたチャートを埋めていくことで思考整理や目標設定に利用できるシートです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/488859/6be39627-4e1e-b9a0-e79e-173eef7592b0.png)

大谷翔平選手が高校生のころに「ドラ1 8球団」（＝8球団からドラフト1位指名を受ける）という目標を達成するために何をしなければいけないのか、何を達成しなければいけないのかを定義するのに活用したことでも有名ですね。
別名マンダラート、マンダラシートとも呼ばれています。

### 記入手順
マンダラチャートの基本的な記入方法は次の通りです。これが正しい、というやり方はないと思うので一つの方法として捉えていただければ。

１．**メインテーマ**となる達成したいこと、やりたいこと、なりたい姿を中央に記入します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/488859/460e4ebb-d4b5-027c-1461-d582468c5418.png)

２．メインテーマを達成するために成し得たい**サブテーマ**を周りの 8 マスに記入します。これで中央の 3x3 マスが埋まります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/488859/7ef935a3-7aff-4c3c-33ae-687ff7c65c6c.png)

３．サブテーマを回りの 3x3 マスの中央に転載します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/488859/ba0364fb-b876-ddf9-6a25-d06fb3dee36c.png)

４．サブテーマを達成するために成し得たいことを具体的に周りに記入します。これで 9x9 すべてのマスが埋まります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/488859/10542298-c61c-7dfb-fbf6-785021a7362b.png)

### 記入後
**誰か自分以外の人に見てもらいフィードバックしてもらう**ことをお勧めします。特に目標設定やキャリア設定に利用する場合は、上長と認識を合わせてしておくとよいでしょう。

理由は 4 つあります。

- 各マスの粒度や抽象度が揃う。
- ひいては目標を宣言することにもなるので、よい意味でプレッシャーとなる。
- （上長と擦り合わせることで）組織が求めているものとのギャップが軽減されやすくなる。
- （上長と擦り合わせることで）メインテーマ・サブテーマ達成のために根回しをしてもらえる（ことがある）。

私は、①上長と認識合わせ と ②親しい（他業種の）友人と書き合いフィードバックし合い をしました。
実際に見てもらったところ、「周りのマスはアクションレベルの具体性にした方が、より着手しやすく達成したか否かも判断しやすい」とのフィードバックを得られました。逆に、自分以外の人のマンダラチャートを見るのもとても参考になります。

### 振返り
あとは外側から一つずつ達成 → サブテーマ達成 → メインテーマ達成を目指すのみです。が、**1か月おきに振返る**ことをお勧めします。

というのも、**マンダラチャートは変更可能**なものだからです。（私個人の意見です。）

なにを達成できたか、なにを達成できなかったか、達成するために何をしたか、そのアクションは上手くいったか・改善すべきことはあったか、を考えます。達成したものは塗りつぶしたり、大きな丸を描いてもいいかもしれません。
もし仮にテーマの方向性が変わったら柔軟に変更します。無論、メインテーマやサブテーマを頻繁に変えるべきではありませんが、徹頭徹尾一つの方向性に縛られる必要はないということです。

### まとめ
私はエンジニアとしてどうなりたいのか、人としてどうなりたいのか、と思い悩むことがあったのでマンダラチャートしてみました。自分のキャリアややりたいことの整理になったのでとてもよかったです。

みなさんもぜひ活用してみてください。
基本処理情報技術者試験　WEBサーバー

システム構成要素 » システムの構成　の分類の問題
WEBサーバとアプリケーションサーバを別の物理サーバーに分けるメリットについて問う問題でした。

答えとしては、負荷の低い静的コンテンツのリクエストはWEBサーバとで処理し、負荷の重い動的コンテンツについてはアプリケーションサーバで処理するして分担させる。
でした。

ではそもそもWEBサーバとアプリケーションサーバでは何が違うのかについてしらべようと考えました。
そのため、今回の記事は
「WEBサーバ　アプリケーションサーバー　比較」と検索して上から三つの記事をまとめたもんです。

以下の三つに分けて調べたことをまとめます。

・webサーバーとアプリケーションサーバの概要
・WEBサーバとアプリケーションサーバの種類
・あるサイトないサイトの違い


### webサーバーとアプリケーションサーバの概要
#### WEBサーバー
フロントエンドの言語で、ユーザーと直接やり取りを行います。WEBブラウザからのリクエストを受け付けて処理を行います。
「HTMLファイル」「動画」「画像」などの静的コンテンツを処理
#### アプリケーションサーバ
Java,Ruby,PHPなどの言語で、WEBサーバーからのリクエストを処理する。データベースとの処理を仲介します。

Webサーバから受け付けたリクエストをJavaやPHP、Rubyなどのプログラミング言語を実行して処理します。

### WEBサーバとアプリケーションサーバの種類
#### WEBサーバ
「Apache HTTP Server」や「nginx」

#### アプリケーションサーバ
Apache TomcatやNode、Puma、Unicorn
「商品の検索結果など、動的コンテンツ生成されたデータ」

### あるサイトないサイトの違い
従来の2階層のサーバでは、WEBサーバで要求のリクエストや情報処理をすべて行っていました。そのため、WEBサーバに負荷がかかりすぎてしまい、WEBサーバが停止したりするのが問題でした。

現在でのWEBサイトはネットショッピングや会員サイトなど大量のリクエストを処理することが多いです。その場合にサイトの利用者に高速でレスポンスを返すためにアプリケーションサーバを挟み込みます。
DBに書きこみや読み込みをする処理したり、アプリケーションサーバーのリクエストの振り分け利用して同時にプロセスを処理できるようになります。

よってアプリケーションサーバがない場合には、同時のアクセスに対して処理が遅かったり、Cookieなどを利用してデータを保存しないといけなくなります。

イメージ図
![webserver1.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2606732/a250c4a2-fc20-83bf-8efc-97e53559e08a.gif)

参考サイト
https://hnavi.co.jp/knowledge/blog/web-application-server/

https://www.infraexpert.com/info/server17.html
DoctrineとEloquent比較大全4: レコードを更新

day4の今日はday3で取得したBookレコードのタイトルを更新する（SQL的にはUPDATEする）方法を見ていきます。

## Doctrine

```php
<?php

declare(strict_types=1);

use App\Entity\Book;
use Doctrine\ORM\EntityManagerInterface;

require __DIR__.'/../vendor/autoload.php';

/** @var EntityManagerInterface $entityManager */
$entityManager = require __DIR__.'/bootstrap.php';

$book1 = $entityManager->getRepository(Book::class)->find(1);
$book1->setTitle('Symfony6 The Fast Track');

$entityManager->flush();
```
<https://github.com/77web/doctrine-vs-eloquent/blob/11bda766bcf88a1e54ac015a328c5ee9d02acb11/Doctrine/Usecase/update_one_record.php>

- day3の方法でBookエンティティのインスタンスを取得します。
- Bookエンティティのtitleプロパティの値を更新します。（setterを利用）
- Bookエンティティを取得するのに使ったEntityManagerの `flush()` メソッドを呼びます。

## Eloquent

```php
<?php

declare(strict_types=1);

use App\Models\Book;

require __DIR__.'/../vendor/autoload.php';

$book1 = Book::find(1);
$book1->title = 'Symfony6 The Fast Track';
$book1->save();
```
<https://github.com/77web/doctrine-vs-eloquent/blob/11bda766bcf88a1e54ac015a328c5ee9d02acb11/Eloquent/Usecase/update_one_record.php>

- day3 の方法でBookモデルのインスタンスを取得します。
- Bookインスタンスのtitleプロパティに新しい値（更新したい値）をセットします。
- Bookインスタンスの `save()` メソッドを呼びます。
そもそも「勉強」って・・・つらくね？

## はじめに：勉強、好きですか？

「エンジニアたるもの勉学に励むべき」という話を偉い方からよくされる若手の方も多いのではないでしょうか？

実際、私も人には言います。

でも、

私自身、勉強は嫌いです。

特に、学校の勉強スタイルの受け身の学習というのが本当に苦手でした。

## 「つらくない」勉強方法ってなんだろう

そもそも、なぜ勉強が「つらい」と思うのか。

それは

**自分の得意な学習スタイルに合っていない** 

からなのです。


> 余談になりますが、「勉強」と「学習」は違うらしい。


自分が得意な学習方法を取るとこが、「コスパの良い勉強方法」に繋がるのです。

## ポイント１：自分に合ったスタイルが存在する

私自身は、あまり動画で見るスタイルは得意ではありませんでした。
（今でも得意かどうかと言われると・・・なところがありますが）

概要説明などの動画は倍速で見れるのでまだなんとかなるのだが、
コーディング系の動画は本当に無理で・・・

「本の方が自分のペースで読めるから楽なんだが！！」

とつい思ってしまうことが多いです。

### 動画なら見れる人も見れない人もいる

ですが、多くの人は「動画なら見れる」と言っています。

これは特に年代に関係ないようで、「動画」というスタイルが自分に合っているかどうかがポイントなようです。

確かに、普段からNetflixやPrimeVideoなんて使ってないですし、
深夜アニメ視聴していたのも１０年前の話・・・

最近は動画で時間を潰すこと自体が苦痛になってしまったのかもしれません。

### どの方式ならイケるのか色々と試してみよう

勉強方法といっても、大きく何個かに分かれます。

1. 本を使ってマイペースに学習する
1. 動画を使って半分授業形式で進める
1. スクールなどを活用して完全に授業形式で進める

~~とはいえ、よくあるスクールも授業自体はなくて動画視聴スタイルのところが多いらしいですね。~~

大きく分けると、「能動的（自分から読みにいく）」パターンと「受動的（受け身で学習が進む）」パターンの２つに分かれます。

前者が得意な人は、本やネットを使ってコードを写経することでどんどん覚えていきます。
後者が得意な人は、動画の解説を聞いたり、実際に人に聞くことで覚えることができる人です。

日本の教育は基本的に後者なので、「動画はムリ！」という人は少数派なのかもしれません。

:::note info
動画か本か、はたまたネットか。自分に合っているスタイルを探すのが大事
:::

## ポイント２：興味がある分野ですか？

勉強をしていて一番辛いのが、「本当はやりたくないのに・・・」と思った時です。

勉強するにしても、やはり「自分の興味のある分野」である方が身につきやすいとされています。

「上司から言われたので勉強してみた」という人のほとんどはうまく身についていません。

それはなぜか？

「目の前にある情報をとりあえず丸暗記して終わらせよう」

と考えるからです。

本当に心から興味のある分野であれば、「ここはどうなんだろう？」「こうしてみたらどうなるのだろう？」
と言う探究心が湧くはずです。

~~好きな分野ですら探究心が湧かないようではエンジニアには向いていないかもしれません。~~

ITの分野に入ろうと思ったきっかけが何かしらあると思います。
一見して関連のなさそうな技術であっても将来的に活かせることはたびたび発生しますので、まずは

自分の興味がある分野はなんだろう？

と考えるところから始めてみてはいかがでしょうか。

:::note info
自分の興味のある（好きな分野）なら勉強も苦にはならない・・・はず！
:::

## ポイント３：「勉強する」と「知識をつける」の違い

実は、人によって「勉強している」と考える基準点が違うことがあります。

たとえば、「本を読む」ことが勉強に入るのか、それとも入らないのか？
みなさまはどちらだと思いますか？

### 小説を例にしてみる

たとえば、「小説を読むのが好き」という人がいたとして、その小説は「勉強」になっているのでしょうか。

一般の人から見れば「それは勉強ではない、趣味の読書の範疇だ」と言うでしょう。

ですが、小説家や編集者が小説を読んでいたら？

仕事、もしくは勉強の一環として新しい知識を身につけているわけなので、一種の「勉強」と言えます。

実際に、「新しい刺激を得るために本を読む」と言う方も多いことでしょう。

### これが「技術書」だったら？

これと同じ感覚で、小説ではなく技術書を目の前にしたとき、ITエンジニアのみんなはどう思いながらその本を読んでいるのでしょうか。

やはり、「勉強しなきゃ・・・」と思いながら本を開く人が多いことでしょう。

ですが、「新しい刺激が欲しいので技術書を読もう」と言う層が一定数存在します。

彼らは、小説家が小説を読むように「新しい知識を得る」ことを目的として本を読んでいます。
ぶっちゃけ、本を読むことを「勉強している」と思っていないでしょう。

### 動画でも同じことが言える

同様に、「動画ならなんとなく理解できる」と言う人がいます。

大事なのは、**「自分にあった学習方法」** を選ぶことです。

- 本の方が自分のペースで進められる
- 動画なら耳も使うので頭に入りやすい
- 聞きながら進めたいのでスクールに通いたい

など、自分のスタイルに応じて学習方法を選ぶことが「つらくない」一歩です！

:::note info
自分に合ったスタイルなら苦にならないはず！！
:::

## 動画ならイケるかも！と思ったあなたへ捧げる動画たち

せっかくなので、Udemyで有用と思えた動画を紹介します。

特に、ITエンジニア向けのUdemyのコースは

- 言語やフレームワークに関するいわゆる「技術」系のコース
- マインドや働き方といった「自己啓発」系のコース

このふたつに分類されることでしょう。

今回は、だれでも使えるような（動画苦手マンだけど面白かったと思えた）動画を2本共有します。

~~ほかにもいっぱい買ってるけど視聴してないとは言えない~~

#### プログラミング 学習を失敗させない科学的な方法

https://www.udemy.com/course/programming-self-study/learn/lecture/19977558

#### 伝わる！引き出す！リモートワーク会議術【入門編】

https://www.udemy.com/course/maeda-remote/learn/lecture/20234064

## さいごに

「勉強しなきゃ・・・」と考えること自体がいちばんの苦痛だったりします。

「本を読め」
「動画を見ろ」

みたいなアドバイスをもらうと思いますが、自分にあった学習方法は人それぞれです。

勉強することの目的は「知識をつけるため」であるわけなので、

- 本を読む**だけ**
- 動画を視聴する**だけ**

と思える手段を選ぶようにしましょう。


**「知識をつける手段が勉強である必要はない」**

と考えることで、少しはハードルが下がるのではないでしょうか？
”Always Day One”の気持ちを持ち続けるために

株式会社ネイリーの澤田(@t2ya)です。
現職では取締役CTOとして個人とネイリストをつなぐ予約アプリ 「Nailie(ネイリー)」 に携わっています。

https://nailie.jp/

日本CTO協会には個人会員として参加させていただいています。

今回はAdvent Calenderの4回目、12/4分を担当させていただく機会を頂きましたので、日本CTO協会の掲げるバリューの”**Always Day One** / 常に初日の気持ちでいる”について私個人の考えを書いてみたいと思います。
こういったテーマなのでテクニカルな内容はあまり含まれませんのでご承知おき下さい。

最初に私の簡単な経歴になります。
* 新卒で分割前のNTTに入社、その後ヤフー株式会社に転職してこの２社では長く検索サービスに携わっていました。またそれぞれの会社で出戻りを入れるとそれぞれ９年弱の20年弱、社会人の多くを過ごし色々学ばせて頂きました。
* ここ数年はスタートアップを中心に活動しています。役割としてCTOを数社で担当させて頂きました。

# 振り返り
北海道で学生時代を過ごしていました。実は学生時代は修士論文で数値計算をするために簡単なプログラムを書いていたぐらいで全くプログラミングとは無縁の生活をしていました(PCは持っていましたが音楽制作にしか使っていませんでした)。

漠然と通信を仕事にしていきたいと思い通信会社に入社しましたが、実際に配属されたのはインターネットのサイトの検索サービスの担当でした。ここからWebエンジニアとしてのキャリアが始まりました。転職先の２社目も含め長くメインで検索系のサービスに携わる事になりました。

余談ですが、初期は開発に関しては今と変わらない感じでしたが、クラウドサービスは出てきたばかりでした。そのためデータセンターにラックを借りてサーバーやルーター等をラッキングしてサービスを提供していた記憶があります(いわゆるオンプレミス環境)。不調の時はデータセンターまで走っていって直接スイッチを押してreboot作業をした記憶もあります。

# Day Oneの連続
社会人になってから意識しなくても**Day One**の連続だっと思います。私個人としては、
* 東京での生活
* 初めての転職
* チームを持たせて頂きマネージメントをする事になった
* プロジェクトの責任者としてプロジェクトを推進する事になった
* 初めてCTOとなった時
* スタートアップにジョインして技術領域だけで無くVCさんとの交渉や色々な事をやっていた時

思い返すと意識せずとも新しい体験があったように思います。その中でも特に今に繋がっているのが、

* アメリカのパートナー企業のPM、エンジニアと協業する事でロジカルなプロジェクトの進め方を体験しながら学ぶことができた。
**→海外の方と一緒に仕事をするのに全く抵抗が無くなりました。**
* Web業界の中でも優秀な人材が多い会社の方々と長く協業し色々学ぶことがあった。
**→検索最大手の会社のメンバーの方々のロジカルな働き方が本当に参考になり学ぶ点が多かったです。**
* 海外で長期滞在し英語の環境の中で仕事をした。
**→流暢では無いですが英語を話す事に抵抗が無くなりました。**

です。本当にそういう機会に巡り会えたのはラッキーだと思うんですが自身の成長のきっかけになったと思っていますし感謝しています。

# 自身のブロッカーになるもの
結果的に現在長くWeb業界に携わる事になっているんですが、良い意味でも悪い意味でも慣れてしまっていきます。自身のブロッカーになるのは実は「経験」だと思っています。これは以下のパターンを認識しないと発生すると思います。

* 「経験」と「現在の能力、スキル」は全くの別物であることの認識
* 経験からくる無意識なバイアスを持ってしまっている場合

## 「経験」と「現在の能力、スキル」
過去の大きな成功体験は「次もこのパターンでいける！」「あの時はこうすれば大丈夫だったから」「理由はないけど成功するだろう」という思考が働くのですが、成功の再現は本当に難しいものです。
また、技術領域の進歩は実は思っているよりも早いと思います。
一例としてオンプレミスでの勝ちパターンは現在のクラウド主流の中ではそのまま適用はできませんし、実は便利な機能があるのにそれを知らずに無駄な作業をしてしまったりしているかもしれません。

「**Always Day One**」であると自身で強く意識して「学び直す気持ちを持つ(リスキリング)」が最近の自身の注力点になります。色々な分野の方に技術の壁打ちをしていただいたり、お話を聞くのも良いと思います。

## 経験からくる無意識なバイアス
経験がブロッカーになるのはこのケースが多いと思います。
「これは昔やっているから」「これはなんとなく知っているから」とあるものに対して知識を入れる、話をちゃんと聞く事を止めてしまう事があるかと思います。「なんと無く知っている」ものに対して、そこでそれ以上のアクションをしなければずっと「なんと無く知っている」ままで終わってしまいます。
また、今はこういった認識が増えていると思いますが「役職は上下では無くて役割」という点を意識してチームや会社をチームワークで進めて行く必要があります。
年齢や社歴や国籍等のバイアスも持つべきではありません。私個人としてここは強く意識をしています。

「**Always Day One**」の気持ちで、ちゃんと調べてみようですとか、詳しい人に聞いてみようというアクションをするのが重要だと思っています。
またチームメンバーや色々な方とお話をするときに可能な限り「過去の経験」よりも「これから目指す事、未来の事」をお話しするように意識しています。これまで何をやってきたかよりも、これから何をしていきたいかの方が本当に重要だと思います。

# 最近強く心がけている事
探究心を持つ事と「これってどうなんだろう」と思ったらそれを知るため・理解するために使う時間をスケジューラーにすぐに入れるようになりました。スケジュールに入れないとちゃんとやらない気がします。
実はこういった事が「**Always Day One**」の気持ちにつながって行くのではないかと思っています。

# 終わりに
この文章を書きながら自分自身の2022年の振り返りにもなったと思います。機会を頂きました日本CTO協会、Qiitaの皆様に感謝申し上げます。
また、読んでいただいた皆様大変ありがとうございました。少しでも「**Always Day One**」を考え自己改革のきっかけになれば幸いです。
自身もこの気持ちを忘れず挑戦を続けていきたいと思っています。

日本CTO協会のその他のバリューについての記事は12/1から12/3の記事とこれからの記事で更に出てきますのでぜひご覧いただければと思います。
* *Give First* / あなたの当たり前は誰かの学び
* *Think Big, Start Small* / 大きく考え、小さく一歩目を踏み出す
* *Fail Fast, Learn Fast* / 早く失敗し、早く学ぶ

最後までご覧頂きありがとうございました！良いクリスマスと年末、年始をお過ごし下さい！
RubyでUnicode文字列をもとに戻す方法

## 概要
RubyでUnicodeを普通の文字列に戻す

## 経緯
スクレイピングの方を実施していて、よし取得できた！と思ったらunicode形式のもので簡単に戻せるかなと思ったのですが少し苦戦したので次回以降同じことがあってもすぐ解決できるように記事にした。

## だめだったこと
通常のエンコード系メソッドはだめだった
```rb
"文字列".encode(Encoding::UTF_8)
```
とか

## 成功したコマンド
```rb
"文字列".gsub(/\\u([\da-fA-F]{4})/) { [$1].pack('H*').unpack('n*').pack('U*') }
```

例
```
\u3054\u3063\u3064\u3048\u3048\u672c\u8217 CIAL\u6a2a\u6d5c\u5e97
↓
ごっつええ本舗 CIAL横浜店
```

どなたかの役に立てば幸いです
Informatica Intelligent Cloud Services(IICS)でETL by駆け出しエンジニア

[ジャンルなしもくもく勉強会アドベントカレンダー](https://adventar.org/calendars/7743)3日目の記事です。
自分にとって初めてのQiita投稿となりました。

テーマはデータ分析基盤におけるETL処理です。

今回はETLを実行するために、
Informatica Intelligent Cloud Services(IICS)の
Cloud Data Integration(CDI) 
を使用しました。

やりたいこと：
Azure DataLake Storage gen2のテーブルを
Extract
→IICS内で少しTransform
→SnowflakeにLoad

結果：
失敗...
アドベントカレンダー担当日中に解決できず…

Snowflakeにテーブルのメタデータはロードできました。しかし、Snowflake上でテーブルの表示ができませんでした。

さて、結果に至るまでの過程を以下に記します。

前提条件
データソース：
Azure Data Lake Storage gen2(以下、ADLS)のサンプルデータ

ターゲット：
Snowflake

Transform内容：
・パラメータを使ってみた

前提条件
IICSのエディション：トライアル
Secure Agentは自分のPCにインストール
Snowflakeの環境：トライアル

CDIはGUIベースで操作できます。
左から送り手のADLS,Transformの部品,受け手のSnowflakeです。
矢印の方向に沿った順でデータが処理されていきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1081780/0e6a8b13-e659-5e9f-bf7e-2fc5ded9b385.png)

サンプルデータの中身はこちら
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1081780/846e7c11-ad2a-8159-9115-74d1f12861dc.png)

これに少しTransformをします。

どんなTransformかというと...
真ん中のtest_formulaという部品で定義します。
IDに対し、奇数のもののみ-をつけるという無意味なtransformです(苦笑)。練習なのでお許しください。
[ここで使っている言語はSQLに似ていますが、
IICS独自の記法](https://docs.informatica.com/ja_jp/data-integration/data-services/10-2/_transformation-language-reference_data-services_10-2_ditamap/GUID-423FC479-70AD-423D-8044-5A95BC61557D.html)もあるらしいです。詳細は公式ドキュメントをご参照ください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1081780/579abf94-e6b3-2ee0-8df0-1787edcae4bf.png)

お次に受け手のSnowflakeを設定しました。
今回はSnowflake側でテーブルは用意せず、
IICSからデータを送り込む際にテーブルを新規作成する設定にしました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1081780/b785cb4b-4c63-6a29-3a76-307dac50c7d0.png)

設定事項は他にもあるのですが、省略しています…
(アドベントカレンダーを23:59に投稿しそうになっている人の図)
これらの設定のもとで、いざ実行。
98行が処理されました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1081780/9babf4ad-dc3c-8639-5d7a-19240451746f.png)

Snowflake側はどうなっているでしょうか。

2回処理をしたため、196行になってますが、
テーブルは生成されたようです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1081780/6770c802-f4b2-424c-3f58-08d11fd79ff8.png)

しかしいざSELECT文を発行すると、
テーブルが存在しないか、アクセス権限がない
と言われてしまいました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1081780/66a09629-d486-3e75-ccb2-b602e3efaa00.png)

残念！

感想：
公式ドキュメントを読むだけでは
分からないつまづきの石があると分かりました。
解けたら更新します！
ラベルプリンタのネットワーク設定を管理する

今年は CloudFormation と Terraform に触れました。ツールの機能上、向き不向きはありますが、設定値をテキストで管理できることは強みです。

設定の向き不向き、もしくは好みの問題かもしれませんが、LAN 内におけるネットワーク機器の IP アドレスというのも煩雑になりがちではないでしょうか。
そんな問題を SATO 製ラベルプリンタに限って解決する Terraform のカスタムプロバイダを作りました。

https://github.com/karronoli/terraform-provider-sato

SATO 製のラベルプリンタは Terraform の実行ホストと同一のネットワークにいる必要があります。DHCP、もしくは静的 IP のどちらかに設定を適用できます。
↓の設定にある XXXXXX は MAC アドレスの末尾 3 オクテットで書くと識別子として使いやすいと思います。

```terraform
terraform {
  required_providers {

    sato = {
      version = "0.2"
      source = "karonori.com/personal/sato"
    }
  }
}

provider "sato" {}

// for DHCP
resource "sato_network" "pXXXXXX" {
  hardware_address = "00:19:98:XX:XX:XX"
  dhcp = true
  rarp = true
}

// for static IP
resource "sato_network" "pXXXXXX" {
  hardware_address = "0019.98XX.XXXX"
  dhcp = false
  rarp = false
  ip_address = "192.168.0.10"
  subnet_mask = "255.255.255.0"
  gateway_address = "192.168.0.1"
}
```

terraform apply の出力例です。ただし設定を変更してもラベルプリンタの電源を手動で入れ直さないと反映されません。

```console
$ terraform apply --auto-approve
module.sato.data.sato_networks.all: Reading...
module.sato.data.sato_networks.all: Read complete after 1s [id=1670078080]

Terraform used the selected providers to generate the following execution plan.
Resource actions are indicated with the following symbols:
  + create

Terraform will perform the following actions:

  # sato_network.pXXXXXX will be created
  + resource "sato_network" "pXXXXXX" {
      + dhcp             = false
      + gateway_address  = "192.168.0.1"
      + hardware_address = "00:19:98:XX:XX:XX"
      + id               = (known after apply)
      + ip_address       = "192.168.0.10"
      + last_updated     = (known after apply)
      + rarp             = false
      + subnet_mask      = "255.255.255.0"
    }

Plan: 1 to add, 0 to change, 0 to destroy.
sato_network.pXXXXXX: Creating...
sato_network.pXXXXXX: Creation complete after 1s [id=00:19:98:XX:XX:XX]

Apply complete! Resources: 1 added, 0 changed, 0 destroyed.
$
```

terraform import も動きます。

```console
$ terraform import sato_network.pffffff 00:19:98:XX:XX:XX
sato_network.pffffff: Importing from ID "00:19:98:XX:XX:XX"...
module.sato.data.sato_networks.all: Reading...
sato_network.pffffff: Import prepared!
  Prepared sato_network for import
sato_network.pffffff: Refreshing state... [id=00:19:98:XX:XX:XX]
module.sato.data.sato_networks.all: Read complete after 1s [id=1670077885]

Import successful!

The resources that were imported are shown above. These resources are now in
your Terraform state and will henceforth be managed by Terraform.

$
```

これで SATO 製ラベルプリンタがたくさんあってもネットワーク設定に困りませんね。
Datadog ぽすちゃ管理（CSPM）ってなんだ ~２~

# すごく進化した Datadog の CSPM で俺のクラウド管理ポータルの設定不備を全部検出してみる

[第１回は CSPM の役割を確認した](https://qiita.com/1Kano/items/0238371742c092708263)。ここでは Datadog での CSPM 初期設定を確認していく。

## ３．初期設定（Datadog CSPM）
前提として AWS, Azure は Datadog とのインテグレーションが完了していること。あと、今回検証したクラウドは AWS Security Hub やら Azure Security Senter やらは有効化していません。どうやら Datadog だけでかなりのセキュリティ対策のベストプラクティスを網羅できるようです。

### 手順１．監視対象とする AWS アカウントを選び CSPM を有効化する
[Security] > [Setup & Configuration]

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189936/88665bf6-2452-98c0-a87b-1dff8d854586.png)

なお AWS に Datadog インテグレーションした時の datadog 用IAMロールに ポリシー「Security Audit」の追加が必要です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189936/7d4d591e-2c01-d09a-0443-45b56359b309.png)


### 手順２．監視対象とする Azure アカウントを選び CSPM を有効化する
[Security] > [Setup & Configuration]

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189936/ec41409f-5814-fa57-ffcf-8daa163c1292.png)

### 手順３．ぱすちゃ管理のデータが集まるのを待つだけ

徐々にデータが集まってきます。スキャンされたリソースは 20 個と表示されているようです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189936/a3aabf8e-222c-06ba-8e89-e1c50cfdf767.png)

深夜１時を過ぎていたので、ひと晩待ちました。朝の集計ではスキャンされたリソースは 403 個でした。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189936/098d1ca2-55a0-07c6-cfbb-216fe3e9d69b.png)

## ４．検出したルールを読む（サマリー）

評価結果は「Evaluation Trend, 適合 397個、不適合 16個、合計 413個」。そして重要度は「Severity Trend, 致命的 5個、続く３段階で高12個、中398個、低3個、合計418個」5つほど数が合わないな...。クラウド別では「AWS 19個、Azure 381個、合計400個」のリソースのうち、不適合が「AWS 10個、Azure 6個」。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189936/0b907e39-3f05-4bf3-d3d3-154c221f3fa6.png)

ルール別には「CIS-AWSで不適合 11個」「CIS-Azureで不適合 10個」そしてなんと「SOC2では不適合 57個」なぜ50個以上もの不適合なのか該当ルールを見るとユーザーアクセス権における作成/削除などの操作ログひとつずつカウントされているようだ。例えば「ストレージアカウントが削除されたらログアラートが通知されるように設定すること」「仮想マシンが電源OFFされたらアラート通知されるように設定されていること」これで2個。このような操作ログがずらーっと不適合[FAIL]になっている。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189936/cae62676-3f1b-4dc4-9965-e992cebd9a86.png)

## ５．検出されたルールのサンプルを読む

クリティカルなルールが２つ該当している。これらを是正してみる。
- ひとつめは「S3 bucket is publicly accessible (via policy)」S3バケットをインターネットに公開するときは制限すること
- ふたつめが「SSH access is restricted from Internet」インターネットからSSHにアクセス制限すること

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189936/3b417782-b983-36bd-c11e-1a6007f98188.png)

## 一旦まとめ

Datadog の CSPM 初期設定について確認した。何か設定したっけ？ ［CSPM ENABLED］のトグルスイッチを有効にしただけだよね。こんなに簡単なら一度は試して自分のセキュリティ設定を確認することをお勧めします。とてもたくさんの指摘がされて面倒かもしれないけれど、クラウドサービスでのベストプラクティスを知るよい機会になると思う。

[次回は、指摘されたルールを是正してみます](https://qiita.com/1Kano/items/c27310c72310e4fe90cd)。