OmniAICreator/Qiita-1.07M huggingface dataset:
CVPR2022の枝刈り論文

# 概要

この記事では、[CVPR2022](https://cvpr2022.thecvf.com/)の枝刈り論文を紹介します。[^1]
[^1]: 画像や数式は論文から引用しています。


# Fire Together Wire Together: A Dynamic Pruning Approach with Self-Supervised Mask Prediction

https://arxiv.org/abs/2110.08232

概要：Dynamic Pruning (サンプル毎に、サブネットワークを切り替えて推論する) の手法
新規性：マスクをself-supervisedで学習できる方法を提案した。画像ではなく、クラスで使うチャネル（マスク）が変わっている。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2448931/2ed599ed-fc9b-6b0a-3620-2ea8ebf3eb51.png)
キモ：マスクのロス関数 BCEWithLogits。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2448931/f7e4bc59-9f2e-ea78-3071-57d666517159.png)
評価：VGG, ResNet, MobileNet, CIFAR, ImageNetで評価した。


# When to Prune? A Policy towards Early Structural Pruning

https://arxiv.org/abs/2110.12007

概要：Prune-aware-Training (PoT). 高速な枝刈り学習
研究機関：NVIDIA
新規性：学習の序盤に刈ることで、高速・高精度に学習できる。従来のTrain-Prune-Finetuneは2回学習が必要だし、Prune-at-initializationは精度が落ちる課題があった。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2448931/05c40d05-297d-551a-c60e-d44f8ec81e18.png)
キモ：学習してネットワークが代わらなくなったら(EPI$\sim 1$)1回だけ刈る。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2448931/5903e617-603f-3777-a176-71cb41522044.png)
$n_{(k, l)}$はニューロン数
評価：MobileNet, ResNet等で実験した。


# Interspace Pruning: Using Adaptive Filter Representations to Improve Training of Sparse CNNs

https://arxiv.org/abs/2203.07808

概要：枝刈り学習
新規性：枝刈り学習で、特徴をInterspace representationで表して学習することで表現力を上げる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2448931/5ca11354-1c25-790e-272b-e1a81fc14639.png)
キモ：特徴を、ある空間の線形結合でモデル化する。
評価：VGG, ResNet, CIFAR, ImageNetなどで評価した。
API実装案件での学び



## 概要
最近LaravelでAPI実装案件を一通り要件定義から一通り経験することが出来ましたので学びを振り返ろうと思います。（理解が間違っていたらご指摘ください。あと、自分用振り返り記事なので読みにくいかもですがご容赦ください。）
案件概要の詳細は省きますが、ある特殊な条件で仕様される単純なCRUD機能が使えるAPIの作成でした。

### リリースまではざっくりと下記の流れ
要件定義→キックオフ→設計書作成(API等)→実装→インフラ構築→リリース
何もかも初めての事だったので手探りで進めていきました。
仕様の自由度が高く自分でどの機能を実装するか決められたのですが、お客様に自分が考えた機能と仕様を説明する時に緊張した記憶があります。笑

## 案件を通して学んだ事一覧

- RESTful API
- JWT(認証) ACL（認可）
- クリーンアーキテクチャ
- AWSインフラ構築

上記項目についてこれからざっくり振り返ります。

## RESTful API

- API
- REST
- OpenAPI

### API
ある機能を公開しているソフトウェアとその機能を使いたいソフトウェアをつなげる窓口という理解です。
つまりソフトウェアにAPIという外部とやりとりする窓口を作り、その窓口を通して外部アプリと連携するとで便利な機能が仕様できる。という仕組み。

APIは開発者が好き勝手決めていいというものではなくRESTというお作法がある。
このお作法にそって作られたものがRESTful APIです。

### REST

>アドレス可能性(Addressability)
>提供する情報がURIを通して表現できること。全ての情報はURIで表現される一意なアドレスを持っていること。
>
>ステートレス性(Stateless)
>HTTPをベースにしたステートレスなクライアント/サーバプロトコルであること。セッション等の状態管理はせず、やり取りされる情報はそれ自体で完結して解釈できること。
>
>接続性(Connectability)
情報の内部に、別の情報や(その情報の別の)状態へのリンクを含めることができること。
>
>統一インターフェース(Uniform Interface)
>情報の操作(取得、作成、更新、削除)は全てHTTPメソッド(GET、POST、PUT、DELETE)を利用すること。

https://qiita.com/NagaokaKenichi/items/0647c30ef596cedf4bf2

上記記事より引用

### OpenAPI
RESTful APIを記述するためのフォーマットのことでJSONやyamlで書かれる。

https://qiita.com/teinen_qiita/items/e440ca7b1b52ec918f1b

### LaravelでのAPI実装
APIにJSONでリクエストを送り、JSONでレスポンスを返す仕様にした。
以下参考

https://www.twilio.com/blog/building-and-consuming-a-restful-api-in-laravel-php-jp

JSONで返す情報を加工したい場合はResourceを使う

https://readouble.com/laravel/8.x/ja/eloquent-resources.html


## JWT(認証) ACL（認可）

認証にはJWTを使用し、ACL（アクセスコントロール）にはLaravelの機能を使用

https://qiita.com/knaot0/items/8427918564400968bd2b

Laravel x JWT認証

https://jwt-auth.readthedocs.io/en/develop/

Laravel認可

https://readouble.com/laravel/8.x/ja/authorization.html

## クリーンアーキテクチャ
- アーキテクチャ設計のお話

アーキテクチャではクリーンアーキテクチャ(一部)を採用して実装しました。

https://qiita.com/nrslib/items/aa49d10dd2bcb3110f22

コントローラー(シングルアクション)←アクション←モデル（リポジトリ）
忠実に再現すると複雑になりすぎそうでしたので理解できる範囲で組み込んでみました。
シングルアクションコントローラー採用する事でAPIに対して一対一に対応できるので見通しが良くなったと思います。

## インフラ
- EC2
- Nginx
- RDS
- 証明書

特に冗長化が必要と言うわけでも、アクセスが多くなるわけでもないのでVPCにパブリックサブネットを作成てEC2インスタンスを一つ立てる、プライベートサブネットを作成してRDSを立てるという最小構成でした。
ただ使いたい時だけEC2やRDSを起動したいという要件がありましてその部分の調整が難しかったです。
使わない時はEC2インスタンスはAWSマネジメントコンソールで停止すれば良いのですが、RDSは一度停止しても７日後に自動起動してしまうので。Lambdaで定期的に停止させる関数作るか、Aurora Serverless使ってみるのが良さそう。

手順は@ntm718 さんの記事が分かりやすかったです。

https://qiita.com/ntm718/items/f896c8e4fb801777954b

証明書はLet’s Encryptを使用しました。

https://hirooooo-lab.com/development/install-lets-encrypt/

https://server-recipe.com/3345/

割と最近仕様が変わったみたいでコマンドが使えないものがあり詰まりまくりました。
課題として今回の要件では使用しない時はEC２インスタンスを停止するので証明書の自動更新が走らない事...
AWSの証明書発行サービスであるACMを使いロードバランサーとともにSSL設定出来たら楽そうだけどお金結構かかるんですよね。

以上がざっくりとした学びになります。最後まで見ていただきありがとうございました。
Splunk: Splunk入門(グラフ編 3/4) - 円グラフ


###### 実施環境： Splunk Cloud 8.2.2104.1

### 0. 概要

 Splunk で使用できるグラフについて、今回は円グラフを紹介します。
円グラフは、1つの円を項目毎に切り分けることで、各項目が全体のどれくらいを占めるかを表すグラフです。
項目毎の割合が見たい場合に有用です。

![スクリーンショット 2022-03-06 21.19.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/78c4e669-3445-4996-6eb7-c49ad704d0ba.png "概要")

### 1. SPL 文の組み方

今回、例とする SPL 文には以下を使用します。

```Splunk:Splunk
index="_internal" sourcetype="splunkd" source="*/metrics.log" group=queue
| stats sum(current_size) BY name
```

![スクリーンショット 2022-03-06 21.19.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/78c4e669-3445-4996-6eb7-c49ad704d0ba.png "円グラフ")

表としては2列の構成で、以下のように一番上のヘッダ行を除いて左の列が項目、右の列が値となるようにします。
 stats コマンドで関数フィールド1つ、 BY 句に項目を指定するとちょうどこの形になります。
値はグラフ内で自動的にパーセント形式に変換されて描画されるので、 SPL 文中でパーセント形式に変換する必要はありません。

| - | - |
| --- | --- |
| 項目 | 値 |
| 項目 | 値 |
| ... | ... |

### 2. 使用方法

円グラフは、 Splunk 視覚エフェクトの「 Pie Chart 」を選択することで使用できます。

![スクリーンショット 2022-03-06 21.29.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/69c5864c-8dd7-2a23-12e3-04ee0c7a149d.png "グラフ選択")

![スクリーンショット 2022-03-06 21.19.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/78c4e669-3445-4996-6eb7-c49ad704d0ba.png "Pie Chart")

### 3. 最低サイズ

「 Pie Chart 」を使用した際のフォーマットには、「最低サイズ」という設定項目があります。
グラフが10以上の項目に分割される場合に、ここで指定した値以下の項目は「 other 」として省略されます。

![スクリーンショット 2022-03-06 21.20.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/4393f863-b309-1dd3-8d35-ec844108879f.png "最低サイズ")

以下の2つのグラフは、上が最低サイズが1%の時、下が10%の時のものです。
1%のときは表示されていた「 parsingqueue 」が10%では表示されなくなり、「 other 」の個数が12個から13個に増えているのがわかります。

![スクリーンショット 2022-03-06 21.20.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/fa0b4d1b-f2bc-17e8-89f6-4e570938b1b3.png "1%")

![スクリーンショット 2022-03-06 21.22.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/b0265157-1151-3177-b72e-799f2c046196.png "10%")

大きい項目がいくつかあってその他小さい項目が複数、というデータなら最低サイズは大きめにとるほうがわかりやすいです。
一方、同じくらいの項目がいくつもあるようなデータなら、最低サイズは小さめにとらないと「 other 」ばかりになってしまいます。
どのくらいのサイズを指定するのが適切かはデータによって異なるので、適切なサイズを色々探してみてください。

以上、円グラフの基本的な使い方について紹介しました。
次回は単一値グラフについて紹介します。

[戻る](https://qiita.com/frozencatpisces/items/fb8dcaf0094abe9e5bd3)
CVPR2022の量子化論文 (1)

# 概要

この記事では、[CVPR2022](https://cvpr2022.thecvf.com/)の量子化論文を紹介します。[^1]
[^1]: 画像や数式は論文から引用しています。


# Nonuniform-to-Uniform Quantization: Towards Accurate Quantization via Generalized Straight-Through Estimation

https://arxiv.org/abs/2111.14826

概要：G-STE. Nonuniform量子化をUniform量子化の枠組みでやる方法。
研究期間：Meta
新規性：Nonuniformは精度は良いがLUT(Look-up-table)計算で計算コストがかかる課題を解決する。
キモ：G-STEを挟んでQAT的に学習することで、推論計算ではUniformで扱えるようになる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2448931/9a24ca0a-a83f-c096-a33c-e7f181f835b8.png)
評価：ResNetやMobileNetで4bit推論で精度悪化しない。


# IntraQ: Learning Synthetic Images with Intra-Class Heterogeneity for Zero-Shot Network Quantization

https://arxiv.org/abs/2111.09136

概要：IntraQ. Zero-shot Quantization(学習時のデータが不要な量子化)の方法
新規性：Zero-shot Quantizationで、合成画像を使って量子化する方法で、クラス間で分布が遠くかつ多様な画像を作る方法
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2448931/18f42775-c8a5-1eeb-f6d6-ee08430abce1.png)
キモ：Soft Inception Lossで画像合成して蒸留付きロスでQATする
評価：ResNet, MobileNetで4~5bit量子化した。


# Training Quantised Neural Networks with STE Variants: the Additive Noise Annealing Algorithm

https://arxiv.org/abs/2203.11323

概要：STEの理論解析
新規性：種々のSTEを統一的に扱う方法を提案した。(階段関数の確率的正則化とみなせる)
キモ：上記から、STEを包含する方法としてANA(Adaptive Noise Anealing)を提案した。
評価：CIFAR-10, VGGに適用した。
Rust文字コード

# 概要
[高効率言語Rust 書き方作り方](https://www.socym.co.jp/book/1351)のSection9に関して
シーザー暗号でPythonと比較している割に26足している理由が明記されてなかったので調べてみる

結論が見たい方は最後まで飛ばしてください
試行錯誤した経緯が書かれているだけなので...

# コード
本に書いているコードは書けないので簡単に説明

- Python
```Python
該当文字コード = (該当文字コード - 'A'の文字コード + Shift分の数値) % AからZまでの文字数26 + 'A'の文字コード
```

- Rust
```Rust
該当文字コード = (該当文字コード - 'A'の文字コード + Shift分の数値 + 26) % AからZまでの文字数26 + 'A'の文字コード
```

shiftする数値は3

# 不明点
何やら最初の括弧内で26を足す記述が増えている
本に記載通りのコードで記載した場合と26の記述だけなしで実行してみる
変換する文字はYOUTUBE

```
記載通り  : BRXWXEH. => YOUTUBE.
26記述なし: BRXWXEH. => ?OUTUBE.
```

最初のencryptはうまくいっている
26の記載がなければBからYへうまく変換できない


# 調査1 Rustの文字コード
Aの文字コード: 65
Zの文字コード: 90

全ての文字からAの文字コードを引き3つshiftした分の文字コードを記載する(code - codeA + shift)
- 暗号化
```
Y(89)===> ,   26なし:27,   26あり:53
O(79)===> ,   26なし:17,   26あり:43
U(85)===> ,   26なし:23,   26あり:49
T(84)===> ,   26なし:22,   26あり:48
U(85)===> ,   26なし:23,   26あり:49
B(66)===> ,   26なし:4,    26あり:30
E(69)===> ,   26なし:7,    26あり:33
```
- 復号化
```
B(66)===> ,   26なし:-2,   26あり:24
R(82)===> ,   26なし:14,   26あり:40
X(88)===> ,   26なし:20,   26あり:46
W(87)===> ,   26なし:19,   26あり:45
X(88)===> ,   26なし:20,   26あり:46
E(69)===> ,   26なし:1,    26あり:27
H(72)===> ,   26なし:4,    26あり:30
```

# 調査2 Pythonの文字コード
Aの文字コード: 65
Bの文字コード: 90
- 暗号化
```
Y(89)===>   26なし27,   26あり53
O(79)===>   26なし17,   26あり43
U(85)===>   26なし23,   26あり49
T(84)===>   26なし22,   26あり48
U(85)===>   26なし23,   26あり49
B(66)===>   26なし4,   26あり30
E(69)===>   26なし7,   26あり33
```
- 復号化
```
B(66)===>   26なし-2,   26あり24
R(82)===>   26なし14,   26あり40
X(88)===>   26なし20,   26あり46
W(87)===>   26なし19,   26あり45
X(88)===>   26なし20,   26あり46
E(69)===>   26なし1,   26あり27
H(72)===>   26なし4,   26あり30
```

# 調査3 文字コードから文字へ変換する
- Rust
暗号化(26あり)
```
文字コード66-->B
文字コード82-->R
文字コード88-->X
文字コード87-->W
文字コード88-->X
文字コード69-->E
文字コード72-->H
文字コード46-->.
```
復号化(26あり)
```
文字コード89-->Y
文字コード79-->O
文字コード85-->U
文字コード84-->T
文字コード85-->U
文字コード66-->B
文字コード69-->E
文字コード46-->.
```
暗号化(26なし)
```
文字コード66-->B
文字コード82-->R
文字コード88-->X
文字コード87-->W
文字コード88-->X
文字コード69-->E
文字コード72-->H
文字コード46-->.
```
復号化(26なし)
```
文字コード63-->?
文字コード79-->O
文字コード85-->U
文字コード84-->T
文字コード85-->U
文字コード66-->B
文字コード69-->E
文字コード46-->.
```
- Python
暗号化
```
文字コード66-->B
文字コード82-->R
文字コード88-->X
文字コード87-->W
文字コード88-->X
文字コード69-->E
文字コード72-->H
文字コード46-->.
```
復号化
```
文字コード89-->Y
文字コード79-->O
文字コード85-->U
文字コード84-->T
文字コード85-->U
文字コード66-->B
文字コード69-->E
文字コード46-->.
```

# 調査4 Bを入力にした際の復号化の挙動(26なし)
Python
```
(Bの文字コード66 - Aの文字コード65 + -3(暗号化が3なので復号化は-3)) % 26 + Aの文字コード
=(1 - 3) % 26 + 65
=-2 % 26 + 65
=24 + 65
=89
```

Rust
```
(Bの文字コード66 - Aの文字コード65 + -3(暗号化が3なので復号化は-3)) % 26 + Aの文字コード
=(1-3) % 26 + 65
=-2 + 65
=63
```

# 結論
PythonとRustでの計算の挙動が異なるため

# 参考
[ソフトウェアエンジニアによるIT技術、数学の備忘録](https://pebble8888.hatenablog.com/entry/2017/05/14/150514)
【Java/SpringBoot】messages.propertiesを参照して値を出力する

SpringBootの機能であるMessageSourceを利用してプロパティ値を参照する方法を記述します。

<h1>【view】</h1>

![【view】.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2665680/dd1593b3-090b-12f1-8caf-01cefe70d808.png)


<h1>【messages.propertiesの作成】</h1>

![【階層】.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2665680/e8d2d71a-aeec-3c59-7cd0-9975f39fd32c.png)
「resource」直下に「message.properties」を作成します。

![【property】コード.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2665680/736acf18-3966-6e07-5d7c-b83db110e608.png)
プロパティ値を作成して表示したい文字列(値)を記述します。
2行目では「{0}世界」とありますが、{0}部分は任意に設定する事ができます。
設定の仕方は【Controller】で説明しています。
※プロパティ値=abc,def部分
※viewでの表示部分HellowWorld,{0}世界

<h1>【Controller】</h1>

![【Java_Controller】.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2665680/e5eeb5e1-9d21-6ded-cb05-5d6dc553a788.png)

■16行目
Autowired機能を使用して「MessageSource」をインポートします。

■21,22行目
message.sourceを使用して値を代入します。
特に22行目では【messages.propertiesの作成】の「{0}世界」の値を任意で設定しています。
※new String[]{"こんにちは"}が該当部分です。

【追記】
propertyから文字エンコードの設定をUTF-8にしておきましょう。
文字化けにより「No message found under code for locale ja_jp」のエラーメッセージが
出ます。
機械学習用自作PCの構成例

# 概要

5月に機械学習用に自作PCを組みましたので、構成を紹介します。

# 方針

- 最近のディープラーニングモデルを動かせるようにする。
- AtCoderに快適に参加できるようにする。
- 値段は10万円台に抑えたい。そんなに高機能でなくても良い。
- 長く使える部品を選ぶ。

# 構成

## CPU

Intel Core i5 12400

https://www.intel.co.jp/content/www/jp/ja/products/sku/134586/intel-core-i512400-processor-18m-cache-up-to-4-40-ghz/specifications.html

Intel 12世代の評判が良いのと、研究用だとIntelが使われている印象なのでIntelを選びました。ディープラーニングだとGPU性能が重要なので、Core i7までは不要でCore i5で十分と判断しました。
Eコアが付いているCore i5 12600と迷いましたが、価格差があったので12400にしました。

CPUクーラーはCPU付属のリテールクーラーです。十分冷えます。


## マザーボード

MSI MAG H670 TOMAHAWK WIFI DDR4

https://kakaku.com/item/K0001418658/

以下の条件で絞りました。
- チップセットはミドルクラス（B660またはH670）
- フォームファクタはATX（拡張性が欲しいので）
- Wifi・USB2.0付き


## メモリ

Crucial DDR4 PC4-25600 16GB 2枚組

機械学習用には多いほうが安心だと思い、合計32GBにしています。
DDR5が高かったのでDDR4にしました。定格3200MHzで最安を選びました。


## SSD

WD Blue SN570 NVMe (500GB)

https://kakaku.com/item/K0001395858/

SATAでもM.2でも良かったのですが、同じくらいの値段ですし、M.2 SSDを使ってみたかったのでM.2にしました。
機械学習用データは別のHDDに入れるので、容量は500GBで足りると判断しました。定番を選びました。


## グラフィックボード

Palit NE63060T19K9-190AD (GeForce RTX 3060 Dual OC 12GB) 

https://kakaku.com/item/K0001363822/

ディープラーニング用で長く使えるように最新世代を選びたかったのと、安くてメモリが12GBと大きいので3060を選びました。12GBあれば、ディープラーニングモデルが大きくなっても安心だと思います。
3060の中で最安のPalitにしました。LHR版ですがディープラーニングでは問題ないと判断しました。


## 電源

玄人志向 KRPW-AK650W/88+ (650W)

https://www.kuroutoshikou.com/product/power/atx/krpw-ak650w_88_/

今回のCPUとグラフィックボードでは650Wが適切だと思います。650Wで80PLUS認証が付いているうち最安を選びました。


## ケース

NZXT H510 CA-H510B-W1

https://kakaku.com/item/K0001160503/

ATX対応の白いケースで、冷却できるようにある程度の大きさはありつつ大きすぎないものを選びました。


## ケースファン

InWin Sirius Extreme Pure (3個)

https://www.in-win.com/ja/cooling/ase120p

PCを光らせたくなったので取り付けました。音が出ない程度の回転数に設定していますが、十分そうです。
3個セットにすると、マザーボードがARGBに対応していなくても光らせられるコントローラが付いてきます。今回のマザーボードはARGBに対応していますが、Windowsは使いませんのでMSIのARGB制御ソフトが使えません。そこでこのコントローラを使って光らせます。


## OS

Ubuntu 22.04

NVIDIAのドライバを入れやすそうなUbuntuにしました。
[こちらの記事](https://qiita.com/kyad/items/cac575166e5bdf15bf19)で書いたように、Ubuntu 20.04ではマザーボードのWifiが使えませんでした。Ubuntu 22.04なら大丈夫です。


# 値段

以上の合計で15〜16万円程度です。

# 感想

以前は10年以上前のCore 2 Duo E8400とUbuntu 20.04を使っていましたが、AtCoder中のブラウジングに時間がかかり困っていました。
また、古いCPU・GPUではpipでインストールしたTensorFlowやPyTorchが動かなくて([参考記事](https://qiita.com/kyad/items/cd2deb0e2086d12e4bf3))困っていました。
新PCではこのような問題が無くなりましたし、静かになったので快適になりました。
unity c＃ クラスの中に自身のクラスを定義したい


# はじめに
クラスの中に自身のクラスを定義しようと思ったらエラーが起きたので
試行錯誤の末に発見したその解決策を紹介


## エラー例
```hoge.cs
public class hoge{
public hoge _hoge;
public string hage;
}
```
これをもし成功できたとしてunity のインスペクタなどで表示すれば
無限ループになってしまうことが容易に伺えます
※だからこそエラーが起きたと思われますが

### そこを強引に解決するために継承を利用します

継承についてよくわからない人は以下の記事を参照してください


## 解決策
```hoges.cs
public class hoges:hoge{
}

public class hoge{
public hoges _hoges;
public string hage;
}


```
定義したいクラスを継承した空クラスを別の場所に用意して
メインクラス内にそのクラス名を定義すれば無事解決します。

## 注意事項(インスペクタ上で変数を管理したいとき)
unityの場合はmonobehaviorを継承していないとインスペクタには表示されないので
各クラスの先頭にこれをつけることを忘れずに
```css
[System.Serializable]
```
そしてやはりメインクラスにはmonobehaviorを継承する必要があります

大規模なクラスの場合はこのような方法があることを頭の片隅に
おけばどこかの場面で使えるかもしれません



## 実際の自分の実用例
```interaction.cs

[System.Serializable]
public class interactionsuceess:interaction{


}

[System.Serializable]
public class interaction
{public interactionsuceess interactionsuceess;
}

using UnityEngine;
public class interactionenter : MonoBehaviour
{
public interaction firstinteraction; 
}
```
PowerAutomate: Microsoft365 関連の通知をTeams に集める

# 背景
業務上 Microsoft 365 を使っているので、Teams で通知を全部集めておくと便利。

ってことで、各種サービスの通知を一か所に集める方法をまとめ

# Yammer
新規スレッドのみを通知
※共有した場合に、内容が空なので、対処必要

https://qiita.com/baku2san/items/a9c0167b3a367a0138a0

# Teams
参加してない他のメンバーへ転送したいものを選んで通知

https://qiita.com/baku2san/items/f6cfd62ab95fa2e306d4

# Outlook
メール自体見なくなりがちなので、Teams に通知は大切
サイトやリストに対して権限が無くても、「通知」機能を使ってメールで受信する場合もこれ
あとは、RSS 受信も同様に可能
※RSS は専用のトリガー使った方が便利ですが、Data Loss Policy で使えない環境を想定

https://qiita.com/baku2san/items/d45daf503a3c604ae998

予定表の内容に従って、会議直前で通知を行うと、意外に便利

https://docs.microsoft.com/ja-jp/connectors/rss/#when-a-feed-item-is-published

# Lists
リストにアクセス出来るなら、直接仕掛けたほうが便利

https://qiita.com/baku2san/items/17092b10406a5a105e3b

# あとがき
RSS トリガーもあるけど、会社では使えないので省略
PowerAutomate: Lists 通知を Teams で受ける

# 背景
お知らせなんかを Lists に登録して公開してる場合、通知を設定すればメールで見られるけれど、Teams で受けたいよね。

アクセス権限によっては、通知されたメールにトリガーをしかけなきゃいけないので、そんな時は以下とかで。

https://qiita.com/baku2san/items/d45daf503a3c604ae998

# 結果イメージ
タイトル、本文、投稿者（登録:Author, 更新: Editor とは別途登録された User。) 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120072/641140b7-be22-5b44-21b0-4942961674f4.png)


# 概要
- [Lists 新規アイテム追加トリガー](#lists-新規アイテム追加トリガー)
- [展開内容生成](#展開内容生成)
    - DELVE 情報取得用に、投稿者ID取得
    - リンクの相対⇒絶対変換（ハイパーリンクが相対アドレスになっているとそのままだとリンク踏めないため）
- [Teams へ通知](#teams-へ通知)

## Lists 新規アイテム追加トリガー

[アイテムが作成されたとき](https://docs.microsoft.com/ja-jp/connectors/sharepointonline/#%E3%82%A2%E3%82%A4%E3%83%86%E3%83%A0%E3%81%8C%E4%BD%9C%E6%88%90%E3%81%95%E3%82%8C%E3%81%9F%E3%81%A8%E3%81%8D) を使ってトリガーしかけるだけ。
通知の場合、新規登録だけで大丈夫かな、と

> ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120072/97537d03-2548-6e9a-4061-a6b26bd3f3d8.png)

## 展開内容生成
### DELVE 情報取得用に、投稿者ID取得
DELVE 用にUser IDが欲しいが、付加されてきてないので、一意となる Email でユーザー検索して ID 取得
> ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120072/cbdf4819-622b-4e61-a176-109c6931d981.png)

```json: 検索したユーザーのID
@{first(outputs('Search_for_users_(V2)')?['body/value'])?['id']}
```
### リンクの相対⇒絶対変換
本文の中のリンクは、相対リンクとなっているので、正規表現置換用Office Scriptsで置換して修正
以下の例では普通の置換(Replace) で問題ないです。（必要なければ、Replaceで全然OK）

> ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120072/bfb9f933-2ff9-2c6d-7477-7edfd5bde586.png)

正規表現の例は以下とか

https://qiita.com/baku2san/items/3ee1cdcad96b45b49377

## Teams へ通知
投稿者情報は以下で

https://qiita.com/baku2san/items/613db0b4f07fca7a9c80

本文は、<code>\<blockquote></code>を使って展開

> ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120072/c97d93be-0998-65ee-ce77-042cdb3ec94d.png)

```json: 本文例
@{triggerOutputs()?['body/Title']}
<b></b><a href="">  </a> posted by <a href="https://jpn.delve.office.com/?u=@{outputs('Compose_OriginalAuthorID')}&v=work">@{triggerOutputs()?['body/OData__x6295__x7a3f__x8005_/DisplayName']}</a>

<blockquote>@{outputs('Run_script')?['body/result']}</blockquote>
```

# あとがき
OData 列名もいつの間にか動的コンテンツで簡単に取れるようになってきててほんと便利になってますね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120072/72f79877-bfbd-12bc-bb5e-00330d98c2d4.png)
【Java/SpringBoot】ドロップボックスの選択状態を保持する方法

ドロップボックスの選択状態を保持したまま画面を切り替える方法を
メモとして残します。
htmlのselectボックスを使用してアイテムの並び順を変更するのに役立ちます。

具体的にhtml,Controller,Service,Repositoryのコードを見ながら順番に記述します。
※コードのメモについてはポイントとなる行毎に記述していきます。

<h1>【view】</h1>
セレクトボックスの並び順をクリックするだけで「昇順」「降順」に切り替えれます。
itemListの中身を見える形にしています。

![view_昇順.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2665680/4b301121-4355-8baa-7170-b230b4313b47.png)


![view_降順.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2665680/e7dc5db7-832f-fbcf-84d1-48655a571d5f.png)




<h1>【html】</h1>

![【html】コード.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2665680/84527d03-f39d-9754-19f6-7f11f3417f86.png)

■10行目
今回はセレクトボックスを選択するだけで並び順が変わるように実装します。
セレクトボックスからパラメーターを送信するにはhtmlに「onChange」イベントを指定します。<br>
■12行目
オプションタグには「昇順」「降順」とテキストが表示されるように実装します。
サーバー側で並び順のテキスト(昇順、降順)とフラグ(1,2)をMapで紐づけを行っています。

※紐づけ方は下記【Service】を参照。
※ここで記述されている「sortList」の型はMap型です。

th:selectedを使用する事でセレクトボックスの選択状態を保持する事ができます。
ここでは「sort.key」がselectedValueと同値になった場合の選択が保持されます。
※selectedValueはControllerで設定します。

<h1>【Domain】</h1>

![【java_Domain】コード.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2665680/0d53bfb3-0279-bafa-3c16-1574d2991f6e.png)


<h1>【Controller】</h1>

![【java_Controller】コード.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2665680/a4e801db-17db-c8ea-1146-07cedef2d4b3.png)

■41行目,59行目
リクエストスコープを使ってselectedValueの値を決めます。

<h1>【Service】</h1>

![【java_Service】コード.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2665680/530bece2-91b1-b6a8-d322-cb1fa83c1c12.png)
■21行目
DBからアイテム情報を全件取得しています。

<h1>【Repository】</h1>

![【java_Repository】コード.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2665680/3e357cce-9a44-fb2c-8ffe-f27593b4a3fa.png)
Ubuntuにpyenvをインストールする

更新日：2022/10/16　（Ubuntu22.04追加）
　　　　2025/04/04　（WSL2でのパス設定追加）
記載日：2022/6/5
Ubuntuにpyenvをインストールする方法を記載します。

#### 目標
ubuntuにpyenvをインストールし、希望するバージョンのpythonコマンドを実行できるようにする。

#### 環境
OS : Ubuntu20.04、　Ubuntu22.04
gitインストール済

#### 作業
#### 0.pyenvライブラリのダウンロード
Terminalを開き、以下コマンドを実行。
（コマンド実行後、ホームディレクトリで”ll -a”コマンドを実行すると.pyenvが追加されていて、ダウンロードできていることが確認できる。）

~~~command
git clone https://github.com/pyenv/pyenv.git ~/.pyenv
~~~

pyenvコマンドを実行できるようにするためにパスの設定を行う。.bashrcファイルに記述追加するために、以下コマンドを実行する。
.bashrc以外に、.profileなどにもパス設定を追加したい方は追加する。
なおWSL2の場合、Windowsのpyenvパスを読みに行ってしまうことがある。この場合、後者の設定にすることでパスが通る

~~~command
# 一般のUbuntuの場合
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
echo 'command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(pyenv init -)"' >> ~/.bashrc

# WSL2のUbuntuの場合
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(pyenv init -)"' >> ~/.bashrc
~~~



変更内容を読み込ませる。

~~~command
source .bashrc
~~~

ターミナルで、以下コマンドを実行するとpyenvのバージョンが表示され、インストールできたのが確認できる

~~~command
pyenv --version
~~~


#### 1.pyenvでpythonをインストール
以下コマンドを実行し、インストールできるPythonバージョンを確認する。
~~~command
pyenv install -list
~~~

希望のバージョンをインストールする。
（私の場合はここでエラーが出た。下記”#2-エラー対応”を参照。）
~~~command
pyenv install 3.9.13
~~~

対象バージョンがインストールできたことを以下コマンドで確認。
~~~command
pyenv versions
~~~

グローバルでpythonコマンドを使えるようにする。
~~~command
pyenv global 3.9.13
~~~

最後にpythonコマンドが使えることを確認。
~~~command
python --version
~~~

#### 2.エラー対応
pyenv installコマンドを実行したときに３回エラーになった。

・ターミナルに”no acceptable C compiler found in $PATH”というエラー。
　gccをインストールすることで解決できるらしい。
~~~command
sudo apt-get install build-essential
~~~

・またエラー。ターミナルに記載されたLogファイルを確認すると、最後の方に”ZipImportError：zlib not available”というエラー。
　Zlibをインストール。
~~~command
sudo apt-get install zlib1g-dev
~~~

・またエラー。ターミナルに記載されたLogファイルを確認すると、最後の方に”The Python ssl extension was not compiled. Missing the OpenSSL lib?”というエラー。
　https://github.com/pyenv/pyenv/wiki/Common-build-problems に記載の対応をする。

①20.04、22.04の場合
~~~command
sudo apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev \
libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev \
xz-utils tk-dev libffi-dev liblzma-dev python-openssl git
~~~

②22.04で"python-openssl が見つかりません"と出る時があった。その時は以下で対応できた。
~~~command
sudo apt-get install make build-essential libssl-dev zlib1g-dev \
libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm \
libncursesw5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev
~~~

以上で無事にインストールできるようになった。

#### 参考にさせて頂いたサイト
・pyenvについて
https://github.com/pyenv/pyenv#installation
・エラー対応について
https://qiita.com/kenta_ojapi/items/6b19e0c05b268f3e74da
https://zenn.dev/moru3_48/articles/94d01b0ed2a91e
・WSL2でパスが通らない（pyenvコマンドが認識されない）件について
https://qiita.com/mare_ism/items/2c0c26ce0e0e2f0cca7c
Kafka Javaチュートリアル　-コンシューマー-

※Kafkaに関する情報は下記のURLから参照してください。
https://kafka.apache.org/intro

# 必要ライブラリ
- kafka-clients-3.2.0
- slf4j-api-1.7.36
- slf4j-simple-1.7.36

# 事前準備
- Kafkaの起動
下記のコマンドで立ち上げを行います。
`<kafka-home>/bin/zookeeper-server-start.sh 
<kafka-home>/config/zookeeper.properties`
- Kafka brokcerの起動
下記のコマンドで立ち上げを行います。
`<kafka-home>/bin/kafka-server-start.sh <kafka-home>/config/server.properties`

# Coding

1. Kafkaのプロパティを定義します。

		final Properties props = new Properties();
		props.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG,
				BOOTSTRAP_SERVERS);
		props.put(ConsumerConfig.GROUP_ID_CONFIG,
				"KafkaSimpleConsumer");
		props.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG,
				LongDeserializer.class.getName());
		props.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG,
				StringDeserializer.class.getName());

    1. `ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG`はKafkaのサーバ情報を記載します。
    1. `ConsumerConfig.GROUP_ID_CONFIG`はコンシュマーのグループIDを記載します。


1. コンシューマーを生成します。

		final Consumer<String, String> consumer =
				new KafkaConsumer<>(props, new StringDeserializer(), new StringDeserializer());

1. 受け付けるTopicを設定します。

		List<String> topics = new ArrayList<>();

		topics.add(TOPIC);
		consumer.subscribe(topics);


1. イベントが発行がトリガーになるので、無限ループでイベントを待ち受けます。その際に上限リトライを設定します。


		final int giveUp = 100;   
		int noRecordsCount = 0;

		while (true) {

1. Kafkaからイベントを取得します。今回の取得間隔は１０００ミリ秒に設定します。

		final ConsumerRecords<String, String> consumerRecords =
				consumer.poll(Duration.ofMillis(1000));

1. 取得されたイベントをコンソールに出力します。

		consumerRecords.forEach(record -> {
			System.out.printf("Consumer Record:(%s, %s, %d, %s, %s)\n",
					record.key(), record.value(),
					record.partition(), record.offset(), record.topic());
		});

1. Kafkaサーバと同期を取ります。

		consumer.commitAsync();

1. これ以上、取得するイベントがない際には接続をクローズします。

		consumer.close();


# 参考
下記のレポジトリにソースコードを確認いただけます。
https://github.com/dlstjq7685/KafkaSimpleConsumerTuttorial

また、前の記事の[Kafka Javaチュートリアル　-プロデューサー-](https://qiita.com/dlstjq7685/items/9460d9d9519f748350c6)の続きになるので
合わせて見ていただければと思います。

ソースコードはkafkaのJavaDocの内容に沿って作成しております。
あくまで参考程度で書いたものですので、
その他の設定については別記事を参考にしてください。
CTF出場記録


筆者のCTFの出場記録です。

| Event                                                                                | Date    | Points | Ranking  |
| ------------------------------------------------------------------------------------ | ------- | ------ | -------- |
| [SECCON Beginners CTF 2021](https://score.beginners.azure.noc.seccon.jp/scoreboard/) | 2021/05 | 713    | 221/943  |
| [Hack-A-Sat 2 Qualifiers](https://ctftime.org/event/1365)                            | 2021/06 | 218    | 079/697  |
| [SECCON CTF 2021](https://ctftime.org/event/1458)                                    | 2021/12 | 217    | 345/506  |
| [Hack-A-Sat 3 Qualifiers](https://ctftime.org/event/1562)                            | 2022/05 | 223    | 076/470  |
| [SECCON Beginners CTF 2022](https://score.beginners.azure.noc.seccon.jp/scoreboard/) | 2022/06 | 440    | 194/886  |
| [Tenable Capture the Flag 2022](https://tenable.ctfd.io/scoreboard)                  | 2022/06 | 1600   | 147/1357 |
IntelliJとCLionの設定メモ

JetBrains製のIDEの設定は構成管理が難しいようにできており、いつも手動で追加しているので、忘れないようにメモしておく。必要になり次第追記する。

## タブ
* Advanced Settings > Editor Tabs > When navigating to a file, prefer selecting existing tab in inactive split pane: 無効にする

## 言語共通

* Scheme: Project (Stored in Project) から Default (Stored in IDE) に変更
* Editor > Inspections > Proofreading: 全て無効にする

## C

* Editor > General > Code Folding > C: 全て無効にする
* ruby/ruby 用
  * Editor > Code Style > C/C++ > Tab size: 8
  * Editor > General > Appearance > Show whitespaces > Leading: 有効化

## キーリマップ

* Keymap > Main Menu > Navigate > Go to Declaration or Usages: Alt+At
  * CなどではJump to Sourceより使いやすい

## TODO

* Search Everything 内で C-f, C-b が動かない
* gbでgit blameをサポートする
* M-fでクリップボードコピーができない
勤怠できない勤怠管理アプリを作った話

平成初期感のある勤怠管理のネタアプリを作りました。
雑ですがご査収ください↓↓

https://mgmgmogumi.github.io/kintai/

ソースコードは[こちら](https://github.com/mgmgmogumi/kintai)

## 公開設定
まず最初はビルド&デプロイ設定です。
静的サイトにするつもりだったので公開サーバーとしてGitHub Pagesを利用しました。

1. Vue-CLIを利用してプロジェクトを作成
1. `/docks`フォルダを作成して`vue.config.js`でビルド出力先へ指定
1. Githubにリポジトリを作成し、Pagesの設定で`/docks`を公開ディレクトリとして指定
1. ローカルでgitの接続作業
1. `npm run build`してgitコミット&プッシュ

以上で完了です。

## タイトル
<img width="200px" alt="タイトル" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/140953/9319dd55-39f8-f3a5-08b1-c7a985776add.png"> <img width="500px" alt="タイトル" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/140953/bae130e2-203c-c8a4-fd09-f4e4af6e225c.png">

フォントって奥が深いですね。
いつも開発ではフォントってよく使われるものを参考にして使っていたので、狙ってダサいフォントを探すのは結構新鮮で面白かったです。
以下のサイトを参考に、ポップ体やゴシック体を中心に探して設定しました。(Macは標準でポップ体入ってないらしい)

http://dekasu.net/fonts/

フォントはユーザの利用環境に左右されるので、本当はロゴとして画像にするのが確実で良さそう。

## 背景
<img width="500px" alt="背景" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/140953/984e531c-fd3b-9458-8797-e871452fc2c4.png">

背景リピートは鉄板ですね。
なんかこのよくわからない背景はミカンの断面図を並べて配置してちょっと透過っぽくしています。
素材はこちらからお借りしました。

https://icooon-mono.com/11370-%E3%82%AA%E3%83%AC%E3%83%B3%E3%82%B8%E6%96%AD%E9%9D%A2%E5%9B%B3%E3%81%AE%E3%82%A2%E3%82%A4%E3%82%B3%E3%83%B3/

## ボタンカラー
<img width="300px" alt="入口ボタン" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/140953/0868f27a-2e53-f643-ab64-f58a31029596.png"> <img width="300px" alt="出退社ボタン" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/140953/7a226553-fb91-b93a-4e8b-59a3826b9746.png">

このなんとも言えないカラーが素敵ですね。
3つとも微妙に色が違うのと、出社ボタンが右寄せなのがポイントです。

## 退社できないボタン
![退社できないボタン.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/140953/d9ef1653-77bc-a4e3-e294-345236ab01b4.gif)

退社したくてもできないブラック企業仕様のボタンです。
こちらの記事を参考に、jQuery→Vueに置き換えてちょっとアレンジ加えたりしました。
でもできればぬるっと逃げる感じにしたいなぁ

https://hainare.info/archives/306


## キリ番(未実装)

キリ番を実装したかったんですが、ここで静的サイトにした壁にぶつかりました。
訪問者数の値をどこかに保存したいけどAPI作るの面倒だしFirebase使う？GASでスプシ使う？とか色々考えましたがどれもまぁまぁ工数かかりそう。
なんなら100~1000くらいの範囲で数字ランダムに表示しようかな・・・と考えたり考えなかったり。
キリ番BBSは5chのリンクでも貼ろうかな。

## おわりに

https://yashiroazuki.blog.jp/archives/32949217.html

こちらが元ネタです。勝手に再現してみました。笑
ちなみに制作時間はトータルで4~5時間くらい？(仕事しろ)
プルリク大歓迎です！ぜひエンジニアの皆さんお待ちしています

おしまい！

## 過去作
https://qiita.com/mgmgmogumi/items/9c82828ce9542b5eaad6

https://qiita.com/mgmgmogumi/items/0c24bb6ea5d697de752c
CLionでリポジトリルート以外の場所にMakefileがある時の対処法

## 前提
> C/C++ are not officially supported in IntelliJ IDEA, but you can use CLion
> https://www.jetbrains.com/help/idea/discover-intellij-idea.html?s=full#IntelliJ-IDEA-editions

IntelliJやRubyMineはCを公式にサポートしていないため、JetBrains IDEで [ruby/ruby](https://github.com/ruby/ruby) を読み書きしたい場合はCLionを使う必要がある。

CLionでindexingをする際、何もビルドしていない状態ではinclude先が解決できなかったりそもそもまだ存在していなかったりするため、indexingを成功させるためにはビルドをしておかなければならない。

CLionはデフォルトではリポジトリルートディレクトリにMakefileがあることを期待するため、in-placeビルドでその場にMakefileを生成した場合はそれで問題なくindexingが完了する。

## 問題
様々な設定で複数のバイナリをビルドする場合、out-of-placeビルドを多用するため逆にin-placeビルドは使わなくなるが、そうするとCLionがデフォルトではMakefileを見つけられず、indexingが成功しなくなる。

かといってin-placeとout-of-placeビルドを併用すると、一方をビルドした時にもう一方のビルドが壊れてしまうという状況に遭遇したことがあり (詳細未確認)、そのworkaroundの信頼性はあまり高くなさそう。

## 対処法
* Settings > Build, Execution, Deployment > Makefile > Build directory

にout-of-placeのビルドディレクトリを指定する。そのディレクトリがビルド済みであれば、下のバーからBuildペインを開き ⟳ アイコン (Reload Makefile Project) を押すとindexingできるようになる。
【Rails】既存のテーブルにカラムを追加し、外部キーとして設定する


# テーブルと一緒にreference型のカラムを作成する時
せっかくなのでこちらも書いておきます。

Rails 6.0.4

・前提条件
Genreテーブルがある。

・やりたいこと
**Genreテーブルを紐づけた新しいテーブル(Movie)を用意したい**



①credit_cardモデルを作成
```
$ rails g model Movie
```
②作られたmigrationファイルを開き、以下のように編集する。

```db/migrate/20220404054303_create_movies.rb

class CreateMovies < ActiveRecord::Migration[5.2]
  def change
    create_table :movies do |t|
      t.string :title, null: false
      t.string :image, null: false
      t.integer :released_year, null: false
      t.references :genre, null: false, foreign_key: true
      t.timestamps
    end
  end
end
```

```t.references :genre, null: false, foreign_key: true``` の ```foreign_key: true``` が外部キーです。

マイグレーションの実行

```
$ rails db:migrate
```

# すでに作られているテーブルにreference型のカラムを追加するとき
・前提条件
movieテーブルとgenreテーブルがある

・やりたいこと
**Movieテーブルに genre_idを外部キーとして追加したい**

マイグレーションファイルの生成

```
$ rails g migration AddReferencesToMovies
```
作られたmigrationファイルを開き、編集する。

```db/migrate/20220605035059_add_references_to_movies.rb

class AddReferencesToMovies < ActiveRecord::Migration[5.2]
  def change
    add_reference :movies, :genre, null: false, foreign_key: true
  end
end
```
ターミナル
```
$ rails db:migrate
```
**(注意点)**
テーブルと一緒にreference型のカラムを作成する時は、```references```

後からreference型のカラムを追加する時は、```reference```

で記述する。



参考：https://qiita.com/krile136/items/0e824a6fb1d657bd3f97
https://k-koh.hatenablog.com/entry/2020/03/13/100517
Kafka Javaチュートリアル　-プロデューサー-

※Kafkaに関する情報は下記のURLから参照してください。
 https://kafka.apache.org/intro

# 必要ライブラリ
- kafka-clients-3.2.0
- slf4j-api-1.7.36
- slf4j-simple-1.7.36

# 事前準備
- Kafkaの起動
下記のコマンドで立ち上げを行います。
`<kafka-home>/bin/zookeeper-server-start.sh <kafka-home>/config/zookeeper.properties
`
- Kafka brokcerの起動
下記のコマンドで立ち上げを行います。
`<kafka-home>/bin/kafka-server-start.sh <kafka-home>/config/server.properties
`
 
# Coding
1. Kafkaのプロパティを定義します。

		final Properties props = new Properties();
		props.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG,
				BOOTSTRAP_SERVERS);
		props.put(ProducerConfig.TRANSACTIONAL_ID_CONFIG,
				"my-transactional-id");

    `ProducerConfig.BOOTSTRAP_SERVERS_CONFIG`には接続するKafkaサーバの[URL:PORT]を記載します。
    `ProducerConfig.TRANSACTIONAL_ID_CONFIG`にはトランザクションのIDを記載します。今回は任意の値で使います。

2. Producerを定義し、トランザクションを初期化します。

		Producer<String, String> producer = new KafkaProducer<>(props, new StringSerializer(), new StringSerializer());
		producer.initTransactions();

3. トランザクション処理を開始します。

		producer.beginTransaction();

4. Kafkaへイベントを送信します。

		producer.send(new ProducerRecord<>(TOPIC, Integer.toString(i), "Java Producer Pub"));
 
 今回の`TOPIC`、値については任意で設定し、行います。<br>
5. 4の処理が問題なく、終わったらコミット、接続をクローズします。

		 producer.commitTransaction();
		 producer.close();		


# 参考
下記のレポジトリにソースコードを確認いただけます。
https://github.com/dlstjq7685/KafkaSimpleProducerTuttorial

ソースコードはkafkaのJavaDocの内容に沿って作成しております。
あくまで参考程度で書いたものですので、
その他の設定については別記事を参考にしてください。
【JavaScript関数ドリル】初級編のuniq関数の実装アウトプット

## uniq関数の課題内容

_.uniq(array)関数を自分で実装する課題。
https://lodash.com/docs/4.17.15#uniq

「課題内容」/「解説動画」/「解答例」を確認したい場合は、以下リンク先のページを参照。

https://js-drills.com/blog/uniq/

## 課題に取り組む前の状態

- 前回includes関数を覚えたので、この課題については答えを見なくても実装できそうだと思った


## 課題に取り組んだ後の状態

- 実際に答えを見なくても実装できた


## uniq関数の実装コード（答えを見る前）
```javascript
function uniq(arr) {
    const newArr = [];
    for (let i = 0; i < arr.length; i++){
        if (!newArr.includes(arr[i])) {
            newArr.push(arr[i]);
        }
    }
    return newArr;
}

console.log(uniq([2, 1, 2]));
// => [ 2, 1 ]

console.log(uniq([2, 3, 1, 4, 2, 3, 4, 4]));
// => [ 2, 3, 1, 4 ]
```

## uniq関数の実装コード（解答例）

```javascript
function uniq(array) {
  const uniqArray = [];
  for(let i = 0; i < array.length; i++) {
    const value = array[i];
    if( !uniqArray.includes(value) ) {
      uniqArray.push( value );
    }
  }

  return uniqArray;
}

const numbers = [2, 1, 2];

console.log( uniq(numbers) );
// => [2, 1]

console.log( numbers );
// => [2, 1, 2]
```
Kali Linux2022.1 でハッキングラボをつくってみる9 無線LANへのハッキング7 wifiteを使ったWPSの解析

# はじめに
今回から、無線LANのWPAのパスワード解析を始めたいと思います。今回は、WPSを利用してのパスワード解析をやります。
「ハッキング・ラボのつくりかた」のP555-559を参考にして、検証しました。
この記事とそれに続く無線LANハッキングの検証記事は、wifiアダプタに問題が起きた（キャプチャできなくなった）ことから、後回しにしてきました。
VirtualBoxの仮想マシンの設定の「USB」の項目、「USBコントローラー」を「3.0(xHCI)」に設定したら、解決しました（一応）ので、無線LANハッキングの検証記事を再開します。

:::note alert
注意事項
記事で紹介されている行為を他人や団体、インフラなどの許可を得ずに行った場合、犯罪となる可能性が有ります。
あくまでも、記事の内容は情報セキュリティの学習です。読者様の所有・管理の機器、システムでのみ実行してください。
また、読者さまのシステムにトラブルが起きたとしても、私は責任を負いかねます。
:::
# WPAとWPS
WPAは、WEPの脆弱性を改善するために開発された後継の無線LAN暗号化方式。現在時点で、WPA、PA2、WPA3のバージョンが提供されている。
WPSは、簡単に機器を無線LAN（というよりもAP）に接続させるための仕組み。
機器備え付けボタンを押すタイプやPINコードを入力するタイプなどがある。PINコードは８桁と短く、乱数も不完全であるが故に、総当り攻撃で奪取される可能性がある。PINコードの奪取で、攻撃者は無線LANのパスワードも入手可能になる。
# 検証環境
| 項目 | 値 |
| :--: | :--: |
| SSID | test |
| 暗号化モード | WPA2-Mixed |
| パスワード | 87654321 |
| WPSのPIN | ルータのデフォルト値 |

:::note warn
同書での暗号化モードは、WPA-PSKであるが、当方のルーターの機能では、WPA-PSKはWPA機能が利用できなかった。`sudo wash -i wlan0`を実行した結果、自分のWPSの設定があるbssidは検出不可である。
![VirtualBox_kali-linux-2022.1-virtualbox-amd64 のリンククローン_05_06_2022_11_06_59_wash.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/535888/67d538e8-d356-a9ac-c74e-2d1c42ec91d6.png)
:::

KaliLinuxの無線アダプタはMonitorモードに設定しておく。
以下は、モードを確認するコマンド。
`iwconfig wlan0`
# ターゲットAPを探索する
```
sudo wash -i wlan0
```
"Lck"の項目が"No"になっていることを確認する。WPS機能はロックされていないので、解析可能を示す。一番下が、お目当てのAPである。
![VirtualBox_kali-linux-2022.1-virtualbox-amd64 のリンククローン_05_06_2022_12_16_41_wash2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/535888/8bb2d515-7668-dd91-7755-639a50124393.png)

# wifiteを実行する
```
sudo wifite
```
AP一覧が何回も表示されるので、いい具合になったら、Ctrl+Cでスキャンを止める。
"select target(s) (1-n) separated by commas, dashes or all:"という感じに聞かれたら、解析したいターゲットAPのNUMを入力して、解析を開始する。
![VirtualBox_kali-linux-2022.1-virtualbox-amd64 のリンククローン_05_06_2022_11_39_59_wifite1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/535888/d28ef181-5436-ed11-7f48-912ed7ac94c7.png)
非常に時間がかかっている。
![VirtualBox_kali-linux-2022.1-virtualbox-amd64 のリンククローン_05_06_2022_11_59_19_wifite2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/535888/a307f6d7-1587-86a2-53e5-8be0c5e65121.png)
結局、解析に失敗した。

# おわりに
解析失敗の原因は、おそらくルーターの設定が原因であろう。
参考にしたもの

https://ja.wikipedia.org/wiki/Wi-Fi_Protected_Access
【息抜き】プログラミング言語のロゴをまとめてみた

ロゴを眺めるのって楽しいですよね。
ということで、色々な言語のロゴをまとめてみました！


## Fortran
![fortran.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/362782/2be9fb06-ca84-c24e-c130-928f82117367.png)
【Since 1954〜】
世界初の高級プログラミング言語。科学技術計算に向いた手続き型プログラミング言語。


## HTML
![html-5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/362782/0be92d44-5365-316e-8ca6-4369a9782614.png)
【Since 1989〜】
「HyperText Markup Language」の略。


## Python
![python.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/362782/d02f4516-08e3-413d-6050-c684538c8d0a.png)
【Since 1991〜】
開発者が好んで見ていたイギリスのコメディ番組「Monty Python’s Flying Circus（空飛ぶモンティ・パイソン）」が名前の由来だそう。
ちなみに「Python」とは英語で「ニシキヘビ」という意味。


## Ruby
![ruby.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/362782/4dc92ee7-bf40-4f10-ae46-c88b47add934.png)
【since 1993〜】
名前の由来は、
プログラミング言語のPerl ... Pearl（真珠）と同じ発音
↓
Pearl（真珠）は6月の誕生石
↓
「Perlに続く」という意味で、7月の誕生石「ルビー」と名付けられたそう。


## CSS
![css-3_official.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/362782/e05a5b5c-b94c-74b4-6103-d757fe53d163.png)
【Since 1994〜】
「Cascading Style Sheets」の略。


## Java
![java.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/362782/c254d796-d61e-4a6f-f429-a61bb9d70e77.png)
【Since 1995〜】
名前の由来は諸説あるようです。
個人的には、「開発チームのメンバーがよく通っていたカフェのメニュー（java coffee）が元になった」という説が好きです。


## JavaScript
![javascript.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/362782/0650bc1d-2a00-9962-7dce-d1ba43f6587a.png)
【since 1995〜】
開発当初は「LiveScript」と呼ばれていたが、当時はJavaが大きな注目を浴びており、その人気にあやかろうと「JavaScript」という名前に変更されたとか。


## JSON
![json.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/362782/4bf5a9e8-422b-a2d1-53d0-25c2f5ac2298.png)
【since 2001〜】
「JavaScript Object Notation」の略。
JSONの形式自体は1996年頃から存在していたようだが、その形式が「JSON」と命名されたのは2001年。
JSONのロゴ、初めて見ました...


## Markdown
![markdown.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/362782/00ea8762-597e-fc4c-3bd8-98d3c17a7828.png)
【since 2004〜】
みんな大好きマークダウン。


## TypeScript
![typescript-icon.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/362782/cd20c432-92e4-9ebe-1188-e6f396e03fcc.png)
【since 2012〜】
JavaScriptでも大規模なアプリケーション開発をしやすくするために生まれた言語。
名前の由来は...不明です。


## Swift
![swift.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/362782/e6bd5ff2-ac3f-cb41-22c7-173c87b0f12b.png)
【since 2014〜】
「Swift」は日本語で「アマツバメ」。ロゴもツバメの形をしています。
この言語は『モダン』『安全』『高速』『インタラクティブ』の4つがキーワードとなっており、その『高速』の部分とツバメを掛けたのかもしれません。
Organization対抗戦　応援と事前準備のお勧め

【Qiita Engineer Festa 2022特別企画】Organization対抗戦に参加して限定プレゼントをゲットしよう！

https://blog.qiita.com/engineer-festa-2022-orgaznization/

残念ながら、自分では、QiitaのOrganizationに参加していません。

正確に言うと、Organizationからの招待はあったのですが、気が付いたのが１年後という状態。
メールは原則的に月1回読むようにしていました。
とは行っても、その時、契約してお金をいただいている相手からのメールの確認です。
それ以外のメールは、年に１度しかよんでおらず、こんな状態です。

それは、さておき、QiitaのOrganizationを拝見すると、過去のお取引先が何社かあります。

まず、それらの会社のメンバをfollowすることと、それらの会社のメンバのgithubをfollowすることにしました。

さらに、過去のご投稿を拝見することにしました。

これらのOrganizationが、この行事にご参加されているかどうかには関係なく。

# いただいている助言

最近かどうかはわかりませんが、
むやみやたらとfollowして、何をしたいIDかよくわからないIDが存在します。

みなさまの組織および個人のfollowerでご確認いただき、
もし、行事に参加されるようなら、事前にこれらのfollowerの方をブロックされてからをお勧めします。

これらの方が、何か、悪いことをされるという確率はそれほど高くないかもしれません。
梨花に冠を正さずという例えばあります。記事を書いていなかったり、なんの目的で参加されているかわからない方をfollowerにしたままで、記事を書かれる前にお考えいただけると幸いです。

こんなにfollow順番が似てるのってどういう現象＝偽識別子

https://qiita.com/kaizen_nagoya/items/ea0de85a2e5fbcbdd06e
CASBとは

# 何の略？
CASB（Cloud Access Security Broker）の略称。
企業や組織の従業員がクラウドサービスを利用する際のセキュリティを一括管理する役割を果たすソリューションの総称のこと。

例えば海外の顧客と気軽にコミュニケーションを取りたいと言う話になった際に、相手の国でよく使われているチャットアプリをダウンロードしたとします。チャットアプリもストアからダウンロードすれば一瞬で使えるようになるため、何の障壁もありません。ただ、実はこのチャットアプリがセキュリティ脆弱性があるものだったとしたら。。。。
と言う話になった時に、その会社のIT管理部門は何もすることができません。
こう言う問題を「シャドーIT」と言う。

このような感じでクラウドサービスはインターネットに繋がってさえいれば利用できるため、現代ではさまざまなアクセスが存在します。すべての経路を把握・管理することは従来のセキュリティシステムでは難しい部分がありましたが、CASBはそのような問題を解決することができるのです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2665477/5803f069-248c-0e23-c24d-536bc89df74a.png)
画像：[CASBとは何か？基本を解説【2021年版】](https://products.nvc.co.jp/forcepoint/blog/what-is-casb)


## シャドーITとなり得るサービス
1. クラウドメールサービス利用時
Gmailとか
2. クラウド翻訳サービス利用時
皆さんお世話になるDeepLとか
3. クラウドストレージサービス利用時
DropBoxとか
4. メッセンジャーアプリ、チャットサービス利用時  
WeChat,Line,WhatsAppとか

# 具体的に何ができる？？
概念の説明を聞くと「ふーん、なるほど（分かったつもり）」で終わってしまうので、具体的な出番について以下まとめてみます。


## 1. 可視化
社員が利用しているクラウドサービスの利用状況が一目で分かるようになる。
加えて、そのクラウドサービスがセキュリティ的に脅威があるかどうかまで表示してくれる。
社内のセキュリティ担当者は危険な信号にいち早く気づくことができる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2665477/12b86220-8b40-f5a8-1fd9-ec0bfe01ade7.png)
画像：[クラウドセキュリティの代表格、CASBのメリットと課題とは？](https://www.jbsvc.co.jp/useful/security/casb.html)


## 2. コンプライアンス（法令遵守）
上と似ているが、対象のクラウドサービスが法規制や業界標準など関連するコンプライアンス要件を満たしているかどうかが一目でわかる。
ここで気になるのが、「業界標準やコンプライアンス要件って自分達で調べて設定するの？」だと思いますが、それはもちろんベンダー側で調査済み。
Microsoft Defender for Cloud Appsの場合はMicrosoft社が調査してくれる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2665477/681ea975-ec1f-d870-4679-2e29bbac0d4d.png)
画像：[クラウドセキュリティの代表格、CASBのメリットと課題とは？](https://www.jbsvc.co.jp/useful/security/casb.html)


## 3. データセキュリティ（データ保護）
クラウドにアップロードされたファイルに機密情報や個人情報が含まれていないかをチェックする機能。
社外日のデータが含まれたものをアップロードした際は、社内の担当者にアラートがあがるようになっている。（どうやってアップロードされた1つ１つのファイルの中身に機密情報が含まれているかを判定しているのだろう。。。。？？？）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2665477/96d75388-b088-a8f9-fe09-1a7142130300.png)
画像：[クラウドセキュリティの代表格、CASBのメリットと課題とは？](https://www.jbsvc.co.jp/useful/security/casb.html)

## 4. 脅威への対策
クラウドサービスで異常な動作を検出する機能。
例えば、退職予定者が短時間に機密情報を大量にダウンロードしたりすると、管理者に通知が届く。ダウンロードされたファイルやユーザー・アプリケーションを特定し、アカウントの停止などを対処も可能。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2665477/ecc96599-7582-5db4-5823-0ccf0adfa009.png)
画像：[クラウドセキュリティの代表格、CASBのメリットと課題とは？](https://www.jbsvc.co.jp/useful/security/casb.html)


# 問題点（万能ではないよ）
「クラウドサービスに関連する異常動作の検知」ができるのであって、原因調査や分析等までは社内の担当者が行う必要がある。
例えば某クラウドサービスで、パスワードを何回も入力する動作が検知された場合。それがパスワード忘れによる複数入力であったとしても、CASB上に表示されているアラートでは判別ができない。個別に問い合わせて原因調査を行う必要がある。
筆者も特に疾しいことをした覚えがないのに、システム担当者から事情調査のメールが届いたことがある。（怖かった、、）多分こういう事情からなんだろうなと思う。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2665477/42e9c0b7-c07f-81d9-5355-991fafaa2e27.png)




# 主なベンダー
1. Netskope
1. Broadcom
1. Forcepoint
1. Lookout
1. Palo Alto Networks
1. Zscaler


# 参考
https://www.gate02.ne.jp/media/it/column_88/

https://www.jbsvc.co.jp/useful/security/casb.html
【JavaScript関数ドリル】初級編のwithout関数の実装アウトプット

## without関数の課題内容

-.without関数を自分で実装する課題。
https://lodash.com/docs/4.17.15#without

「課題内容」/「解説動画」/「解答例」を確認したい場合は、以下リンク先のページを参照。

https://js-drills.com/blog/without/

## 課題に取り組む前の状態

- 引数で、配列の後に複数の値が指定される場合の処理方法が分からない状態ながらもargumentsを使うのかもしれないと思った


## 課題に取り組んだ後の状態

- console.logでargumentsの仕組みを確認しながら実装
- 時間がかかった
- 解答例を見て、includes関数という便利なものがあることを確認

## without関数の実装コード（答えを見る前）
```javascript
function without(array, values) {
    const newArray = [...arguments[0]];
    let deletedNum = 0;

    for (let i = 0; i < arguments[0].length; i++) {
        for (let j = 1; j < arguments.length; j++) {
            if (arguments[0][i] === arguments[j]) {
                newArray.splice(i-deletedNum, 1);
                deletedNum++;
            }
        }
    }
    return newArray;
}

console.log(without([2, 1, 2, 3], 1, 2));
// => [ 3 ]

console.log(without([4, 5, 2, 1, 2, 4, 3, 5], 1, 5));
// => [ 4, 2, 2, 4, 3 ]
```

## without関数の実装コード（解答例）

```javascript
function without(array, ...values) {
  const newArray = [];
  for(let i = 0; i < array.length; i++) {
    const candidateToPush = array[i];
    // values : [1, 2]
    // array: [2, 1, 2, 3]
    // candidateToPush: 2, 1, 2, 3
    if( !values.includes(candidateToPush) ) {
      newArray.push(candidateToPush);
    }
  }

  return newArray;
}

console.log( without([2, 1, 2, 3], 1, 2) );
// => [3]
```
FreeBSD Countdown Calendar 2022記事を書き始める。

去年、初めて参加した。

FreeBSD Countdown  Calendar 2021

https://qiita.com/advent-calendar/2021/freebsd

過去の思い出しか書けず、手がうごかせなかった。

https://qiita.com/kaizen_nagoya/items/14fba711d42fd8b5db4c

ネットワーク ReferenceとしてのBSD

今度は、手を動かした記事にしたい。

今日から書き始めることにした。
一通り書き終わったら、何かをversion upして投稿記事にしたい。

BSDの集まりで、Advent Calenderを読む企画をやっていると知った。
これはまずい。ふだん言っていることと、やっていることが違うって暴露る。

勉強会(IT系)をすべて当たりにする方法。仮説（124）

https://qiita.com/kaizen_nagoya/items/9f001a79ab4162220406

去年の投稿に書いたように、BSDを利用しているのは通信規約の対向試験。
もし、docker上でBSDが動作させれたら、作業がすごく楽になる。

じゃ、今年はそれで行こう。

# docker and BSD
 
最近のFreeBSDコンテナ事情

https://qiita.com/YuheiTakagawa/items/9a13912330fcb3de8ab8

[FreeBSD jail]ホストと同じIPアドレスを持ったjailの作り方

https://qiita.com/alaif-net@github/items/7fa0cce8a575d145dfc9

FreeBSD に VirtualBox を入れて、ヘッドレスで VM を自動起動する

https://qiita.com/erukiti/items/6193aaeb2c6c9b9bef7e

VagrantでLAMP環境(FreeBSD8.4)を作る

https://qiita.com/yu_yonehara/items/1c14b463574917fc5f5c

Dockerを使うためにFreeBSDでbhyve(vm-bhyve)を使ってAlpine Linuxをインストール

https://qiita.com/psaxuww/items/9c194c87c8254ab15408


Docker on FreeBSD

https://scrapbox.io/BSD/Docker_on_FreeBSD

## Docker on FreeBSD

今、やりたいのは、Docker上でBSDを動かすこと。


auchida/freebsd

https://hub.docker.com/r/auchida/freebsd/


```macOS:bash
$ docker run -it  auchida/freebsd /bin/bash
Unable to find image 'auchida/freebsd:latest' locally
latest: Pulling from auchida/freebsd
46ceb380adc8: Pull complete 
c08ed286fb3c: Pull complete 
Digest: sha256:872871fb37a562de93fb0f0f0e55ce322312acfa325293b78ad9372f8c1099f9
Status: Downloaded newer image for auchida/freebsd:latest
docker: Error response from daemon: OCI runtime create failed: container_linux.go:349: starting container process caused "exec: \"/bin/bash\": stat /bin/bash: no such file or directory": unknown.
ERRO[0031] error waiting for container: context canceled 
```

おお、いつもubuntuを使っている手グセで、/bin/bashってやっちゃった。
bsdのshell って、どこにあって、なんだったっけ。

ここまでで15分。
ITサービスマネジメント

## ITサービスマネジメント
<b>利用者の視点でITサービスを効果的に提供できるように管理すること。
<font color = blue>ITIL</font>とはITサービスマネジメントに関するベストプラクティスを作成し、体系化さたもの
### サービスデスク
<b>ITサービスを利用する利用者とITサービスを提供する事業者との間の単一窓口
#### 種類
<b><font color = blue>中央サービスデスク</font>
<font color = blue>ローカルサービスデスク</font>
<font color = blue>バーチャルサービスデスク</font>
### インシデント管理
<b>迅速に正常なITサービスへ復旧させることを優先するプロセス。利用者への悪影響を最小限に抑える。
<font color = blue>インシデント</font>とは、利用者に対する正常なITサービスの妨げになる事象のこと。
障害をサービスデスクで解決できないときは専門知識や権限のあるスタッフに解決を委ねる。
これを<font color = blue>エスカレーション</font>という。
### サービス要求
<b>「パスワードを再発行・使用方法を教えてほしい」などの連絡を受けること。インシデントとは別。
サービス要求に応えることを<font color = blue>要求実現</font>という。
ここで、ITILに基づいた認証基準として整備された<font color = blue>JIS Q 20000</font>シリーズでは、インシデント管理とサービス要求をまとめて、<font color = blue>インシデント管理及びサービス要求管理</font>という。
### 問題解決
<b>インシデントの根本的な原因を突き止め、再発を防止して恒久的な解決策を提供するプロセス。
解決したものは「既知のエラー」として記録する。
### 変更管理
<b>インシデントの解決の既知ITサービスの変更が必要なとき、変更に伴う影響を検証・評価を行った上で、承認または却下の決定を行うプロセス。
### リリース管理
<b>変更管理で承認された変更を、適切な時期に本番環境に適用するプロセス。
### 構成管理
<b><font color = blue>CMDB</font>を使用して、ITサービスの提供に必要なIT資産を常に正しく把握し、最新状態に保つプロセス。
### サービスレベル管理
<b>利用者が要求するサービスレベルを満たしているかを評価するプロセス。事前に利用者とITサービスを提供する事業者とで、サービス品質に対するサービスレベルについて合意書を締結しておく。これを<font color = blue>サービスアグリーメント(SLA)</font>という。
また、SLAの事項が達成できるように、PDCAサイクルを実施し、継続的にITサービスの維持・向上を図るマネジメント活動を<font color = blue>サービスレベルマネジメント(SLM)</font>という。
### 可用性管理
<b>利用者がが利用したいとき、確実にITサービスが利用できるようにITサービスを構成する個々の機能の維持管理を行うプロセス。
### キャパシティ管理
<b>ITサービスに必要なネットワークやシステムなどの容量・能力を管理し、最適なコストで現在及び将来のシステムの安定を実現するプロセス。
## ファシリティマネジメント
<b>経営の視点から建物やIT関連設備などの保有・運用・維持管理などについて、常に監視し改善することで最適化していく経営活動。
落雷による過電圧の対策で<font color = blue>サージ保護デバイス</font>を介するなど。
### UPS
<b>電源の瞬断・停電時にシステムを終了させるのに必要な時間だけ電源供給することを目的とした装置。
「無停電電源装置」と呼ばれている。