OmniAICreator/Qiita-1.07M huggingface dataset:
プロセスアセスメントを受けて

プロセスアセスメントを受けて

知見

製品のプロファイルと人のプロファイルが一定の確度で、できていくと、プロセスのプロファイルの確度もよい。

いかに話が伝わっていないかがわかった。

わかっていなくても、ものができればよいことがわかった。

繰り返し、部分的な変更を繰り返す場合には、すこしづつわかっていった方がよい。

プロセスは未定義と定義するのがよい。仮説(67)

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

事業計画確率(project plan with probability)仮説(92) 統計と確率(6)

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


成功体験は語っても、成功体験に頼らないために。清水吉男・田中伸明・柏原一雄・佐々木 眞一。仮説（153）

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


NASAを超えるつもりがあれば読んでください。

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


 ＜この記事は個人の過去の経験に基づく個人の感想です。現在所属する組織、業務とは関係がありません。＞

# 文書履歴(document history)
ver. 0.01初稿　20230525
ver. 0.02 ありがとう追記　20230625

### 最後までおよみいただきありがとうございました。

いいね　💚、フォローをお願いします。

####  Thank you very much for reading to the last sentence.

Please press the like icon 💚　and follow me for your happy life.
はてブに投稿した記事のカテゴリを集計、自動で更新するgooglechartを設置したい(1.要求項目整理)

# やりたいこと

はてなブログのサイドバーに
投稿した記事のカテゴリを集計したグラフを設置するする。

1. 記事の数をカテゴリ毎に円グラフを表示してほしい
2. 記事を投稿or削除したら自動的にカテゴリ数を増減してほしい
3. サイドバーの表示を更新する際、いちいち集計処理をせずにgoogleスプレッドシートか何かに格納していた数値とラベルを使ってほしい
4. グラフ表示に使用するデータと使用しないデータを制御できるような仕組みがほしい

とりあえず最低限1,2の実現を目指す。3,4については余力があれば。

## 1.記事の数をカテゴリ毎に円グラフを表示させる

### 1-1.円グラフの表示について

はてなブログのデザイン設定のページ説明と、
この記事を参考に円グラフのサイドバーへの表示が可能なことはわかったので、
ブログからカテゴリを集計して数値を取得する手段を考える。
https://qiita.com/su8/items/534dd3654e6aac38a294

### 1-2.ブログからのカテゴリ数の取得

#### 1-2-1.googleスプレッドシートの数値を円グラフに利用させる

googleスプレッドシートからデータを引っ張ってきて表示する方法は見つかったので、
https://qiita.com/ksyunnnn/items/e45733b18a9f40f19d78
この記事のWebアプリケーションとして導入までそのまま真似する(勿論スプレッドシートのID等は変更する)

はてなブログのデザイン設定ページで

# あとがき

ブログを整備しようとして勢い余ってこんなことをしてみたけど、
Web系の技術についてとんと詳しくないので バッドプラティス等あれば適宜改善。

# 参考文献・資料

https://qiita.com/unotovive/items/b1cee04452a19ff7305e
Access/SQL 同じグループのうち最新の日付のレコードを取得する 

以下のデータのうち
・Typeでグループ分けしたものの中で、最新(MAX)のDateのレコードを取得する
・Dateが空白のものは無視する

テーブル1

| Name        | Model              |  Qty              |  Date             |
|:------------|:------------------|:------------------|:------------------|
| A           |AAA                | 1                 |2016/12/19         |
| A           |BBB                | 1                 |2016/12/19         |
| A           |BBB                | 1                 |2016/12/21         |
| A           |BBB                | 2                 |2018/10/29         |
| A           |CCC                | 2                 |2018/10/29         |
| A           |CCC                | 2                 |                   |　


※以下の３つになるように
↓


| Name        | Model             |  Qty              |  Date             |
|:------------|:------------------|:------------------|:------------------|
| A           |AAA                | 1                 |2016/12/19         |
| A           |BBB                | 2                 |2018/10/29         |
| A           |CCC                | 2                 |2018/10/29         |


```sql:qiita.rb

insert into テーブル2 (Name,Model,Number_of_Qty,Date) 
select n.Name,n.Model,n.Number_of_Qty,n.Date
FROM テーブル1 As n
INNER JOIN (SELECT Name,Model,MAX(Date) AS maxdate
FROM テーブル1 GROUP BY Name,Model) as s
ON n.Name = s.Name  AND n.Model= s.ModelAND n.Date = s.maxdate
GROUP BY n.Name, n.Model, n.Number_of_Qty,n.Date

```
Windows10標準機能 すぐ使えるスクリーン動画キャプチャ（スクリーン録画）

- Windowsキー「田ミ」を押しながら「G」キーを押下
- スクリーンの下に「ゲームバーダイアログ」が出てくる。
- 録画ボタンを押すだけ、録画が開始
- 動画の保存先は　ビデオ---> キャプチャ フォルダに
ラスボス系後輩ヒロインAIチャットボットを作りたい・寄り道クエスト〜Mathjax〜

線形代数および微分・正規分布をやるにあたり、Markdownで数式を書く必要性がでたのでそのあたりの設定をやります。
私が記事の執筆に使っているのはSublimeText3で、パッケージはOmniMarkupPreviewerです。書きながらリアルタイムでプレビューできて便利なやつ。

現在の設定はこう。

```
{
  "html_template_name": "github",
    "renderer_options-MarkdownRenderer": {
        "extensions": ["tables", "fenced_code", "codehilite"]
    },
    "mathjax_enabled": true
}
```

`mathjax_enabled` をtrueにすると、LaTexの記法が使えるようになります。

```math
F(x) = \int_{-\infty}^{x}f(\xi)d\xi 
     = \frac{1}{\sqrt{2 \pi} \sigma}
       \int_{-\infty}^{x}\exp\{-\frac{(\xi - m)^{2}}{2 \sigma^{2}}\}d\xi
```

とはいえこの記法自体が全くわからないのでやっていきましょう以下！

## Mathjax記法

### インライン表記

インラインで数式を書く場合、`$` と `$` で囲みます。

```
ここで $f(x) = 2x + 3$ とする。
```

ここで $f(x) = 2x + 3$ とする。

### ディスプレイ数式

ディスプレイ数式……。慣れない言葉。この場合、`\[` と `\]` で囲みます。

```
\[ y= x^4 + a x^3 + b x^2 + c x + d \]
```

```math
y= x^4 + a x^3 + b x^2 + c x + d 
```

### 数学の記法

|名前|記法|例|結果|
|---|---|---|---|
|上つき添字|^{添字}|`x^{2}`|$x^{2}$|
|下つき添字|_{添字}|`n_{i}`|$n_{i}$|
|分数|\frac{分子}{分母}|`\frac{1}{3}`|$\frac{1}{3}$|
|n乗根|\sqrt{引数}|`\sqrt{2}`|$\sqrt{2}$|

中括弧ごとプレースホルダ扱いで見てましたが、中括弧は中括弧として記述するものなんですねこれ。
ここまでなら割とサクッと覚えて書けそう。fracは聞き慣れないのでしばらく迷いそうですが……

### 主な数学記号  

#### 和: \sum

```
\sum_{k=0}^{n}{k}_{i}\
```
結果

```math
\sum_{k=0}^{n}{k}_{i}
```

うわっとなりますけどよくよく見れば上付添字 `^` と下付添字 `_` がぐちゃっとなってるだけなのでそんな難しくもないですね。脳内でエンコード/デコードするのに時間はかかりますが。あとsumの引数がわかりにくいか……。
sumの引数（上付添字と下付添え字）は前後逆でもいけました。この辺プログラムよりは柔軟なのかな。勘が掴めない。

#### 積分: \int
```
\int_{0}^{\infty}{f(x) dx}
```

```math
\int_{0}^{\infty}{f(x) dx}
```

intはintegerではなくintegralですね。そしてしれっと `\infty` が入ってきていますね。

#### 省略記号: \cdots

```
1, 2, \cdots, n
```

```math
1, 2, \cdots, n
```

これはいまいち恩恵を感じない。

### 行列

```
\left(  
\begin{array}{cc}
a & b \\
c & d
\end{array}
\right)
\left(
\begin{array}{c}
x \\
y
\end{array}
\right)
=
\left(
\begin{array}{l}
a x + b y\\
c x + d y
\end{array}
\right)
```

```math
  \left(  
  \begin{array}{cc}
  a & b \\
  c & d
  \end{array}
  \right)
  \left(
  \begin{array}{c}
  x \\
  y
  \end{array}
  \right)
  =
  \left(
  \begin{array}{l}
  a x + b y\\
  c x + d y
  \end{array}
  \right)
```

ぎゃー。これは正直もう数式としても意味がわかっていません。解説行きます。
行列は `\begin{array}{行列の書式}` で始まり、`\end{array}` で終わります。行列の書式に使われる文字は `l`(左揃え)、`c`(中央揃え)、`r`(右揃え)のみっつです。
各行の列の要素は `&` で区切り、`\\` を改行とします。最後の行には必要ありません。
`\left` と `\right` は何かと思ったら大きさの変わる括弧なのだそうです。へえ……？（もうちょっとわかりやすいメソッド名付けてほしい）

よくわかっていないとはいえ、線形代数やるなら行列は必要なので頑張ります。為せば成る、為さねば成らぬの気持ちです。

参考
[LaTeXの使い方 - 石原研究所](http://www.ishilab.net/~ishihara/LaTeX/index.html)
[MathJax サンプル - Qiita](https://qiita.com/xolmon/items/f581bf6e1dc5426c8853)

この記事はマークダウンで書いた後Qiita記法に直す謎の手間を加えて作成されました。
ラスボス系後輩ヒロインAIチャットボットを作りたい・Pythonの基礎⑤

[前回](https://qiita.com/perpouh/items/f978fdc829f0ed933aa8)の続きから行きます。
キングプロテアちゃんは土方さんが倒してくれました。出るんだな1ターン200万ダメージ……

## 名前空間とスコープ

Pythonにも名前空間というものがあります。が、ちょっと読んだ感じ特殊です。

```bash
>>> fluit = "orange"
>>> def test1():
...   print(fluit)
... 
>>> test1()
orange
```

はい。
で、

```bash
>>> def test2():
...   fluit = "strawberry"
...   print(fluit)
... 
>>> test2()
strawberry
>>> print(fluit)
orange
```

はい。この時点でちょっと「おや？」となりました。グローバル変数にアクセスできてるのかできてないのかどっち？という感じになります。
そんでこう。

```bash
>>> fluit = "orange"
>>> def test3():
...   print(fluit)
...   fluit="strawberry"
...   print(fluit)
... 
>>> test3()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 2, in test3
UnboundLocalError: local variable 'fluit' referenced before assignment
```

ええ……？
と思ったのですが、これを読み解くには以下の情報が必要です。

 - メソッドはグローバル変数を参照できます(test1)。
 - メソッドはグローバル変数を上書きできません(test2)。
 - メソッドはグローバル変数と同名のローカル変数を持つことができます(test2)。

ポイントはtest1の時点で、グローバル変数を暗黙的に呼んでいるというところです。
test3についても、メソッド一行目で暗黙的にグローバルのfluit変数が読み込まれています。
で、なぜか2行目でもグローバルの方を書き換えに行ってエラーが発生するということ　らしい　です（あやふや）。

できないならローカル変数作ったらええやんけと思うんですが、まあグローバル変数にアクセスするときは `global` つけようねということで収めるのがいいっぽい。

```bash
>>> fluit = "orange"
>>> def test3():
...   global fluit
...   print(fluit)
...   fluit="strawberry"
...   print(fluit)
... 
>>> test3()
orange
strawberry
```

ちょっとこの宣言（メソッド一行目）気に食わないけど、そもそもグローバル変数とローカル変数で名前がかぶるのがバッドプラクティスっぽいのでそのへんはアレでアレしましょう。んーでもなーthisとかselfに慣れちゃってるのでキモいっちゃキモい……。

## 名前の中の\_と\__

> 先頭と末尾が2個のアンダースコアになっている名前は、Pythonが使う変数として予約されている。（中略）このパターンが選ばれたのは、アプリケーションデベロッパーが自分の変数のためにこのような名前を選ぶことはまずないだろうと思われたからだ。

どうかな……（感想）

以前[サンプルでanswerというメソッドを扱った時](https://qiita.com/perpouh/items/74e21d76117594509cf6#%E4%B8%80%E4%BA%BA%E5%89%8D%E3%81%AE%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%81%A8%E3%81%97%E3%81%A6%E3%81%AE%E9%96%A2%E6%95%B0)、実はdocstringを書き込んでいました。

```python
def answer():
  '''
  これO'Railly本のサンプルそのままなんですけど名前がanswerで答えが42なのわらう。
  銀河ヒッチハイクガイドだ
  '''
  print(42)
```

これを前提に`answer.__doc__`を出力してやると、以下のようになります。

```bash
>>> answer.__doc__
"\n  これO'Railly本のサンプルそのままなんですけど名前がanswerで答えが42なのわらう。\n  銀河ヒッチハイクガイドだ\n  "
```

これどうなんだろうな、エラーログ出力くらいにしか使わない気がするのだけど。

## エラー処理とtry、except

> するか、しないかだ。お試しはない。  ――Yoda

Yodaってアレかしらスターウォーズ？　見ていないのでわからないですけど。

```
try:
  code
except Exception as name:
  code
```

の形式を取ります。べつだん奇矯でもないですね。
組み込み例外の一覧はドキュメントを見るのが早そう：[PythonDoc](https://docs.python.org/ja/3/library/exceptions.html)

### 独自例外クラス

Pythonでももちろん独自例外を実装することができます。

```
class OriginalException(Exception):
  pass
```

で、あとは

```
raise OriginalException(引数)
```

するだけ。クラス定義に括弧があるのは珍しいですね。括弧の中が親クラスということらしいです。
カンマで区切って複数指定することで多重継承もできるらしいですが、多重継承じたいにあんまり馴染みがないのでどうだろうか。Swiftとかも書くので慣れた方がいいのだろうとは思います。

[Pythonの多重継承の際の初期化とメゾットについて - Qiita](https://qiita.com/sey323/items/0d3217601b10708819ee)

まあこのへんはおいおいやっていきましょう。

で、次はNumPyに進む予定でしたが、ちらっと読んでみたところ、これ線形代数を先にやった方がいいのでは？となったので線形代数に行きます。私の数学の知識は数ⅡBで止まっています（微積とベクトルがギリ）。大丈夫だろうか。
php-master-changes 2019-03-07

今日は非標準の uint や ulong を使っている箇所の修正、.editorconfig の修正、ドキュメントの修正、MemorySanitizer のサポート追加、誤った memcmp() 利用の修正、循環参照 GC でのスタックオーバーフロー / SEGV の修正、実質的に ZPP の挙動テストとなっているだけの過剰なテストコードの削除があった！

# 2019-03-07
## petk: Remove legacy AC_CHECK_TYPE calls for uint and ulong
- https://github.com/php/php-src/commit/bebcdcc74573b015c22238dbc9b2698c88b7a601
- [7.4~]
- AC_CHECK_TYPE を 2 引数（非推奨）で uint / ulong に使っていた箇所の削除
- 非標準の uint や ulong を使っている箇所の修正

## petk: Update editorconfig
- https://github.com/php/php-src/commit/488544b3362ede214dec32439c54aaded4bf57d7
- [7.2~]
- .editorconfig の修正

## petk: Refactor README.md file
- https://github.com/php/php-src/commit/29573269562345e1a7a11b2ef5650d1a71682a3a
- [7.4~]
- README.md の改修
- 地味にロゴが付いた https://github.com/php/php-src/

## smalyshev: Add support for MemorySanitizer
- https://github.com/php/php-src/commit/749704cda3cdc52125d19163fbd126a788e8cd19
- [MemorySanitizer](https://clang.llvm.org/docs/MemorySanitizer.html) のサポートを追加

## smalyshev: Fix broken memcmp
- https://github.com/php/php-src/commit/0ef6c626859c365fcc89c27b4acd2c33454f98b4
- 誤った memcmp() 利用を修正

## smalyshev: Oops, forgot error parameter
- https://github.com/php/php-src/commit/7803cb32afbb932c5a56bf9071f7a3b4da35e250
- エラーメッセージ用の引数が足りなかったのを修正

## cmb69: Fix order
- https://github.com/php/php-src/commit/e8d313f36fef13173cafd62405e81fa02e7c5484
- README.RELEASE_PROCESS で、段取りの順序間違いを修正

## dstogov: Fixed bug [#77345](https://bugs.php.net/bug.php?id=77345) (Stack Overflow caused by circular reference in garbage collection)
- https://github.com/php/php-src/commit/5da591c529d3d6ec5e59664c4faa4bc12210fb94
- [7.3~]
- 循環参照 GC でのスタックオーバーフロー / SEGV の修正

## dstogov: ws
- https://github.com/php/php-src/commit/0a416b3d977c26c6e4a08004abdbc51037f872dc
- [7.3~]
- NEWS で、空白文字の足りなかった箇所に追加

## nikic: More zpp error/variation test removals
- https://github.com/php/php-src/commit/c8e10c6119081a7af98bf2103e30fdd6dc791666
- [7.4~]
- [昨日](https://qiita.com/sj-i/items/d6abe6c20bb0337de22a)に引き続き ZPP の実装をテストしているに過ぎないテストを削除
PHPの空配列をJSONの空オブジェクトとしてエンコードしたい時

突然ですが、次のような配列をJSONエンコードしたい場合どうしましょう。

```php
<?php

$json = ['hoge' => []];
```

簡単ですね。[json_encode](http://php.net/manual/en/function.json-encode.php)を使えば次のような結果になるでしょう。

```php
var_dump(json_encode($json));

// output:
// string(11) "{"hoge":[]}"
```

ただしこの際、空配列は`[]`として表現されています。これを空オブジェクトとして表現したい場合についてです。

# JSON Objectの[]と{}
そもそものJSON Objectの`[]`と`{}`についてです。[Difference between \{ and \[ when formatting JSON object - stack overflow](https://stackoverflow.com/questions/11045639/difference-between-and-when-formatting-json-object) にて解説がありますが、一見形が似ているこの２つは、もちろん異なるものです。

`[]`は、Arrayとしての扱いです。例えば次のようなJSON文字列は、Ford・BMW・Fiatという三要素を持った配列ということになります。

```json
[ "Ford", "BMW", "Fiat" ]
```
https://www.w3schools.com/js/js_json_arrays.asp

`{}`は、Objectとしての扱いです。例えば次のようなJSON文字列は、key-valueの組み合わせで表現されたオブジェクトということになります。

```json
{ "name":"John", "age":30, "car":null }
```
https://www.w3schools.com/js/js_json_objects.asp

# 空配列を空オブジェクトとしてエンコード
冒頭見たようなPHPの空配列を、JSONの空オブジェクトとしてエンコードする場合は、`JSON_FORCE_OBJECT`というオプションを用います。

http://php.net/manual/en/function.json-encode.php

```php
<?php

$json = ['hoge' => []];

var_dump(json_encode($json, JSON_FORCE_OBJECT));

// output:
// string(11) "{"hoge":{}}"
```

`{}`として表現することができました。

## JSON_FORCE_OBJECTの注意
[PHPの配列を安全にJSONシリアライズする](https://qiita.com/tadsan/items/0543729b6ac753297811)という記事にて言及していただいていますが、`JSON_FORCE_OBJECT`は中の要素も再帰的にオブジェクトになってしまうよう。例えば、次のような三階層の連想配列をJSONエンコードした場合こうなります。


```php
<?php

$json = ['hoge' => ['huga' => ['piyo' => 'aaa']]];

var_dump(json_encode($json, JSON_FORCE_OBJECT));

// output:
// string(32) "{"hoge":{"huga":{"piyo":"aaa"}}}"
```

場合によっては、そこまでしてほしくないんやということもありそうなので、用途に応じて使わないといけなそうですね。

以上。
ブランチの存在意義がわからなくならない為に

## そのブランチ何のためのものだっけ....?

ローカルの古いブランチ整理とかしている時に果たしてそれが消していいものかそうでないものなのかわからなくなった.....というかもうリリースは終わっているんだっけ。。。。？
プロジェクトメンバーにもブランチ整理する為に不要なブランチを教えるように伝えたが同じような反応.....

##### ってことでそのブランチが何の為に存在していたのか,そのブランチのリリースタイミングいつだったっけってわかる方法ないかなぁ

って調べてたら

gitのブランチに説明をつけることができるみたいなのでそのやり方をご紹介

### 説明追加方法
#### git branch --edit-description

```
$ git branch --edit-description {ブランチ名}
```

上記コマンド実行すると↓のようなテキストエディット画面が開くので好きなようにメモを書きましょう

```bash
# Please edit the description for the branch
#   feature/sugita_working_branch
# Lines starting with '#' will be stripped.
```

適当に入力↓

```bash
test
test

https://qiita.com

# Please edit the description for the branch
#   feature/sugita_working_branch
# Lines starting with '#' will be stripped.
```

### 確認方法
#### git config branch.{ブランチ名}.description

```bash
$ git config branch.{ブランチ名}.description
```

上記コマンドで↓のように先ほど入力したメモが表示される

```bash
$ git config branch.{ブランチ名}.description
test
test

https://qiita.com
```

#### 一個難点

*git config branch.{ブランチ名}.description* て入力するの面倒すぎるだろうぇぇぇぇ....

なのでエイリアスをつける

#### エイリアス

自分が作業する時にリポジトリ関わらず反映させたいので `~/.gitconfig` に登録する

ちなみにエイリアスの適応範囲は以下

|適応範囲|設定ファイル|
|:--:|:--:|
|リポジトリ|{リポジトリのディレクトリ}/.git/config|
|ユーザー|~/.gitconfig|
|システム全体|/etc/gitconfig|

```bash
[alias]
        show-branch-description = "!f(){ git config branch.$(git rev-parse --abbrev-ref ${1:-@}).description;};f"
```

これで↓のコマンドでメモを表示することができる

```bash
$ git show-branch-description {ブランチ名}
test
test

https://qiita.com
```

#### 活用方法としては

- 関連チケットのURL貼る
- リリースタイミング記載する
- プロジェクト名記載する

↑でだいぶわかりやすくなるかなと思います。

個人的にすごいわかりやすくなってよかった

#### おわり
boostのインストール(windows)

[こちら](https://qiita.com/Gaccho/items/7e78911d2c8093baf200)を参考に進めた。

##環境
* windows8.1(64bit)
* Visual Studio Community 2017
* cmake 3.9.0


##手順
1. [公式](https://www.boost.org/users/download/)から最新のソースをダウンロードする。
今回は`boost_1_69_0.zip`を使用した。
2. `.zip`を展開する。場所は適当。今回は`C/boost_1_69_0`に置いた。
3. **TypeScript**が必要なので、**visual studio インストーラ -> 変更 -> 個別のコンポーネント -> TypeScript 2.2 SDK**でインストールする。
4. 管理者権限で`PowerShell`を起動して、展開したフォルダに移動して、次を実行。

```language:PowerShell
./bootstrap.bat
```

>Building Boost.Build engine 
 Bootstrapping is done. To build, run:
     .\b2
 To adjust configuration, edit 'project-config.jam'.
 Further information:
     - Command line help:
     .\b2 --help 
     - Getting started guide:
     http://boost.org/more/getting_started/windows.html 
     - Boost.Build documentation:
     http://www.boost.org/build/doc/html/index.html


さらに次を実行。

```language:PowerShell
./b2 install --prefix="C:\local\boost_1_69_0" -j 4
```
筆者のマシンが４コアなので`-j 4`。
これで`C:\local\boost_1_69_0`にインストールされる。

* 本当は生成されるファイルの種類(x86とx64)でインストール先フォルダを分けたほうが良いのだと思う。上記は全部同じフォルダに入る。
* `./b2`のオプションに`runtime-link=static,shared`が入っていると失敗するようだったので、できるだけ簡単なコマンドで試した。これで良いのか分からないが、とりあえず動いたものをメモ。

##インストールされたことを確認
[こちら](https://qiita.com/Gaccho/items/7e78911d2c8093baf200)と同じように検証した。下記のソースコードも同じものを使用させて頂いた。

1. VisualStudio2017で新規に`win32コンソールアプリケーション`のプロジェクト作成
2. プロジェクトのプロパティから、**C/C++ ⇒ 全般 ⇒ 追加のインクルードディレクトリ**に`C:\local\boost_1_69_0\include\boost-1_69`を追加
3. **リンカー ⇒ 全般 ⇒ 追加のライブラリディレクトリ**に`C:\local\boost_1_69_0\lib`を追加

```cpp
#include <iostream>
#include <boost/version.hpp>

int main() {
    std::cout << "boostバージョン:" << BOOST_VERSION << std::endl;
    std::cout << "boostライブラリバージョン:" << BOOST_LIB_VERSION << std::endl;
    return 0;
}
```
>boostバージョン:106900
boostライブラリバージョン:1_69

```cpp
#include <iostream>
#include <boost/asio.hpp>

namespace asio = boost::asio;
using asio::ip::tcp;

int main()
{
    //宣言
    asio::io_service io_service;
    tcp::socket socket(io_service);
    boost::system::error_code error;

    //接続
    socket.connect(tcp::endpoint(asio::ip::address::from_string("192.168.0.1"), 31400), error);

    //エラーかどうかチェック
    if (error) std::cout << "未接続: " << error.message() << std::endl;
    else std::cout << "接続済み" << std::endl;
}
```
>未接続: 接続済みの呼び出し先が一定の時間を過ぎても正しく応答しなかったため、接続できませんでした。または接続済みのホストが応答しなかったため、確立された接続は失敗しました。

問題なくインストールされているようだ。
Railsチュートリアル第9章まで終わったので、ちょっとした感想など書いてみる

Railsチュートリアルが第9章まで終わった。

2月28日から始めたから、今日で8日目。

始めた日にこんな記事も書いた↓
[Railsチュートリアルに再挑戦する](https://qiita.com/RyuGotoo/items/aa2ff4a11b42805aa9f8)

時間は特に測ってないけど、ざっくり30時間くらいかかったかも。

この記事([Railsチュートリアルを完走するために色々と対策してみた](https://qiita.com/RyuGotoo/items/da0c60b401b9c2c4aced))にも書いたけど、今回は結構飛ばしながらやってる。

例えば演習。

演習は一切やってない。

記事にはtestもGitHubへのpushもやらないって書いたけど結局やってる。

前回挑戦したときはたしか4章あたりで挫折したけど、今回はもう9章まで終わってる。

普通に嬉しい。自分を褒めてあげたい。アイス買って帰ろう。チョコ系の。

ー　ー　ー　ー　ー　ー　ー　ー　ー　ー　ー

挫折してない理由を考えてみると、大きく2つある気がする。

- [Railsチュートリアル解説動画&質問サービスの教材](https://share-wis.com/courses/ruby-on-rails-tutorial-four-ver-five-one?utm_content=afc_zLujyQ7EWdJqCAjGtJPQ)を買った（約6万円）
- エンジニアになりたい欲が（前回より）強い

なんだかんだで、お金を使うってのはプレッシャーになっていい。

もちろん教材自体もわかりやすくて良いし質問サービスも超助かる。

エンジニアになりたい欲も重要。

今年で27になるからそろそろキャリア始めないとやばいっていう危機感もある。

ー　ー　ー　ー　ー　ー　ー　ー　ー　ー　ー

9章まで終わったけれど、まだ9章。

Railsチュートリアルは全14章だから、あと5章ある。

最後まで気を緩めず、完走する。

でも、あまり完璧主義にはならないように。

ざっくり理解したら次へ進む。

まずは1周。

2周目以降で理解度をあげていく。

よし、今日は10章までやっちゃおう。
Laravelの認証をユーザ名に変えたい, そして登録と再登録も消すやり方

毎回やること同じなので残しておく。

## 0. Auth追加
Laravelのインストールとかは、下準備しておいてください。

```bash
php artisan make:auth
php artisan migrate
```

## 1. Viewを編集
デフォルトのemailをnameに変更する

- `resources/views/auth/login.blade.php`


```php
<div class="form-group row">
    <label for="name" class="col-md-4 col-form-label text-md-right">{{ __('User ID') }}</label>

    <div class="col-md-6">
        <input id="name" type="text" class="form-control{{ $errors->has('name') ? ' is-invalid' : '' }}" name="name" value="{{ old('name') }}" required autofocus>

        @if ($errors->has('name'))
            <span class="invalid-feedback" role="alert">
                <strong>{{ $errors->first('name') }}</strong>
            </span>
        @endif
    </div>
</div>
```

## 2. Controllerを編集
function username()を追加する

- `app/Http/Controllers/Auth/LoginController.php`

```php
public function username()
{
    return 'name';
}
```

## 3. AuthのControllerをいじる
venderの中のlaravelの中の深い場所まで行く必要がある...汗。
そしてオプションで登録、再登録を行えるようになっているのでOFF(false)にするだけ

- `/Users/usu/workspace/Donan/Laravel/vendor/laravel/framework/src/Illuminate/Routing/Router.php`

```php
public function auth(array $options = [])
{
    // Authentication Routes...
    $this->get('login', 'Auth\LoginController@showLoginForm')->name('login');
    $this->post('login', 'Auth\LoginController@login');
    $this->post('logout', 'Auth\LoginController@logout')->name('logout');

    // Registration Routes...
    if ($options['register'] ?? false) { // ここ
        $this->get('register', 'Auth\RegisterController@showRegistrationForm')->name('register');
        $this->post('register', 'Auth\RegisterController@register');
    }

    // Password Reset Routes...
    if ($options['reset'] ?? false) { // ここ
        $this->resetPassword();
    }

    // Email Verification Routes...
    if ($options['verify'] ?? false) {
        $this->emailVerification();
    }
}
```
以上です。
これで完璧かな？
HTML -> NSAttributedString はメインスレッドで実行しよう

## HTML文字列をNSAttributedStringに変換する

iOS/macOS で装飾付きテキストを扱うことができる [NSAttributedString](https://developer.apple.com/documentation/foundation/nsattributedstring) はイニシャライザ [init(data:options:documentAttributes:)](https://developer.apple.com/documentation/foundation/nsattributedstring/1524613-init) により HTML テキストから変換することができます。下記がサンプルコードと結果です。

```swift:Swift
import Foundation
import UIKit

let htmlString = """
<html>
<body>
<p><strong>H</strong>ello, <strong>W</strong>orld!<p>
</body>
</html>
"""
let htmlData = htmlString.data(using: .utf8)!
let attributedText = try? NSAttributedString(data: htmlData,
                                             options: [.documentType: NSAttributedString.DocumentType.html],
                                             documentAttributes: nil)

```

結果
<img width="68" alt="result.png" src="https://qiita-image-store.s3.amazonaws.com/0/16508/f53d933c-b5f7-ce68-8ff3-51429310eea3.png">

## バックグラウンドスレッドでは実行してはいけない

このイニシャライザはバックグラウンドスレッドでは実行してはいけません。これは下記のように[ドキュメント](https://developer.apple.com/documentation/foundation/nsattributedstring/1524613-init)に記述されています。

> The HTML importer should not be called from a background thread (that is, the options dictionary includes documentType with a value of html). It will try to synchronize with the main thread, fail, and time out. Calling it from the main thread works (but can still time out if the HTML contains references to external resources, which should be avoided at all costs).

## バックグラウンドスレッドで実行するとどうなるか？

ほとんどのケースでは特に問題なく成功するように見えます。ただし、稀にアプリケーションはクラッシュしてしまいます。このクラッシュレポートを確認すると、WebKit に含まれる WebCore モジュールの中でクラッシュしていることがわかります。つまり変換には WebKit が使われているということですね。

NSAttributedString 自体は Foundation モジュールにありますが、このイニシャライザは UIKit/AppKit で追加されているものです。僕は Foundation のものだからと安易にバックグラウンドで処理してしまったがためにこのクラッシュに遭遇しました。他にも Foundation のクラスに対して UIKit/AppKit が生やしたメソッドはありますので、その場合は UIKit と同様に実行スレッドを注意しておいたほうが良いでしょう。

これは、Xcode 9 で追加された Main Thread Checker でも警告されませんし、この時発生する例外は Swift の do-catch ブロックでは捕捉することができないもの（未確認ですが NSException と思われます）なので発見が遅れてしまいました。
ランダムフォレストで競馬を予測する

こちらは[機械学習で地方競馬を予測する](https://qiita.com/gassann/items/a291188b8e3bc8f3d55c)の続編になります。
前回は予測にk-NNを使ったので、今回はランダムフォレストを使って予測してみました。

###ランダムフォレストとは
ランダムフォレストとは決定木をたくさん作り予測する方法です。分類問題なら各決定木の予測クラスの多数決をとり、回帰問題なら平均を予測値とします。

###バギングとはどう違うの？
複数の決定木を用いる手法にバギングというものがあります。
バギングはデータ集合から復元抽出を行いB組のデータ集合を作ります。
各データ集合に対してB個の決定木で学習させて予測します。
バギングでは各決定木の違いがデータの組み合わせによる違いだけなのに対して、ランダムフォレストではバギングに加えて各決定木で使用する特徴量を、ランダムに選択します。

###実装
では前回のデータに対して`scikit-learn`の`RandomForestClassifier()`を用いて実装します。

・n_estimators
決定木の個数を決めるのがこの`n_estimators`というパラメーターです。
k-NNので最適なパラメータを求めたのと同様に以下のように実装します。

```python
df = pd.read_csv(data_csv)
df = df.dropna(how="any")
train_X, test_X, train_y, test_y = train_test_split(
    df.loc[:,'velocity1':'dhweight'], df.result, test_size=0.2)
accuracy = []
n_estimators = np.arange(1,50)
for n in n_estimators:
    model =  RandomForestClassifier(n_estimators=n, random_state=42)
    model.fit(train_X, train_y)                 # モデル作成実行
    pred_y = model.predict(test_X)              # 予測実行
    accuracy.append(accuracy_score(test_y, pred_y)) # 精度格納
plt.plot(n_estimators, accuracy)
plt.show()
```
![Figure_1.png](https://qiita-image-store.s3.amazonaws.com/0/266477/edba05a3-fc49-d037-4d8c-048a09ec43fc.png)

決定木の数が10個の時が最もよい精度が出ています。
他にも調整する必要があるパラメータがいくつかあるのですが、取りあえず`n_estimators=10`、他はデフォルト値を使って予測してみます。

||掛け金|払戻金|回収率|
|---|---|---|---|---|
|ランダムフォレスト|3000円|2340円|78%|

うーん、微妙ですね。どうやら手法を変える前に特徴量抽出をしっかりする必要がありそうですね。
次回は主成分分析を行います！
Go + Revel + Intellijでのデバック方法

設定がややこしくてTry and errorでようやくできたのでメモ

# 環境
macOS High Sierra バージョン10.13.6
GO 1.12
revel 0.21.1
Intellij 

# 参考URL
公式のデバック方法：https://revel.github.io/manual/debug.html
stackoverflow：https://stackoverflow.com/questions/37944552/debugging-revel-with-intellij

# 手順
公式にも書いてありますが不明点があり、最終的にstackoverflowの回答がわかりやすかったです。
revelチュートリアルにあるmyappをデバックしてみます。

## revel runコマンドを実行。
```
$ revel run myapp
```
$GOPATH/src/myapp/app/tmp/main.go　が出来ているのを確認。これがIntellij上で動かすmainになります。

## Intellij設定
ここの設定が中々うまいこといかず最終的には下記となります

1. Run->Edit configuration選択。Go Buildを選択
2. 【Run kind】Fileを選択
3. 【Files:】先程の `$GOPATH$/src/myapp/app/tmp/main.go` を指定
4. 【Program arguments:】`-importPath myapp` を指定
5. 【Before launch: ...】 新規で`Run external tool`を作成
6. 【Program:】`$GOPATH$/bin/revel` を指定
7. 【Arguments:】 `build myapp myapp/app/tmp` を指定
8. 【Working directory:】`$GOPATH$/bin` を指定
<img width="1217" alt="スクリーンショット 2019-03-08 12.02.54.png" src="https://qiita-image-store.s3.amazonaws.com/0/21343/8c9a27ba-8449-ee7e-a182-b20fa8486365.png">




## デバック実行
これでソース中の任意の場所にブレークポイントを設定するとデバックすることが出来ます。

## 実際に何のコマンドが発行されているのか
```
$ revel build myapp myapp/app/tmp
$ /usr/local/Cellar/go/1.12/libexec/bin/go build -i -o /private/var/folders/ny/_vrlbwh57vb8m04kg0b384m8qsbg2d/T/___go_build_main_go /Users/XXXXX/go/src/myapp/app/tmp/main.go /private/var/folders/ny/_vrlbwh57vb8m04kg0b384m8qsbg2d/T/___go_build_main_go -importPath myapp
```
revevでビルド後にgoでビルドをしているので、手順１のソースコードを変更した後でrevel run を毎回手動で行う必要は無さそうです。
多分他のフレームワークでも同じ手順でいけそうな感じがします
VSCode＆Rubyでctagメソッドジャンプ導入

## VSCode＆Rubyでctagメソッドジャンプ導入
### 前提：Macでの導入
### ctag：
クラスの宣言元にジャンプするために必要なtagsファイル、それを作るのがctagsコマンド。


### gem:`ripper-tags`を導入
```
$ gem install ripper-tags
```


### ripper-tagsのFilePathを確認
```
$ which ripper-tags
=> ***  # 後程FilePathの指定のとき使う
```

あとは[vscode-ruby-ctags](https://marketplace.visualstudio.com/items?itemName=otoniel-isidoro.vscode-ruby-ctags)に従って、導入する。


### VSCodeのエディタ設定ファイルを修正
`Cmd + ,`： 設定画面を開く
右上 `{}`をクリック：`settings.json`を編集

```settings.json
"ctags": {
    "executePath": "/home/username/.rbenv/shims/ripper-tags",
    "options": "--tag-file=.tags --recursive --force --exclude=/assets/ --exclude=.bundle --exclude=.git/ --exclude=coverage/ --exclude=.arcanist-extensions/ --exclude=log/ --exclude=tmp/ --exclude=bin/",
    "fileName": ".tags"
}
```


### プロジェクトフォルダを開く


### コマンドプロンプト表示
`fn + F1`


### Generate file of ctag
```
$ CTAGS:Generate Ruby tags
```


### Generate Ctags

=> `Cmd + Option + g`
（※少し時間を要する）


### Search ctags with selection of the words

`Cmd + Option + t`


## その他
### ファイル名検索でvendor/bundle も検索対象にしたい
`Cmd + ,`
`{}`
下記の内容を追加

```settings.json
+    "search.useIgnoreFiles": false
```


## 参考：
[vscode-ruby-ctagsがうまく設定できない時](https://qiita.com/Mabuo_H/items/8bba62ad815982b94eba)
[Ctags - Wikipedia](https://ja.wikipedia.org/wiki/Ctags)
> Ctags（英: Ctags）はソース及びヘッダ内にある名前のインデックス（又はタグ）ファイルを生成するプログラム。様々なプログラミング言語に対応している。言語に依存するが、サブルーチン(関数)、変数、クラスのメンバ、マクロ等がインデックス化される。これらのタグによりテキストエディタなどのツールで高速かつ容易に定義を参照できる。相互参照ファイルを出力でき、また名前についての情報を人が読みやすい形で列挙した言語ファイルを生成することもできる。
Slack上からBitriseのワークフローを実行する

アプリ開発のCIサービスとして[Bitrise](https://www.bitrise.io/)を使っている際に
[Slack](https://slack.com/)のコマンドから指示を送ってワークフローの実行したいと思って調べていたのですが、
「Slack Bitrise」でググるとBitriseのCI結果をSlackへ通知する方法を解説した記事が多かったので備忘録的に残しておきます。
とはいえ[公式ドキュメント](https://devcenter.bitrise.io/webhooks/adding-a-slack-webhook/)に書いてあることをやっているだけなんですが。

デプロイしたりする他に使い方次第ではSlackから簡単に実行できるスクリプトとしても用途はあると思います。

## 前置き

Slackからの指示には[Outgoing Webhook](https://slack.com/apps/A0F7VRG6Q-outgoing-webhook)あるいは[Slash Commands](https://slack.com/apps/A0F82E8CA-slash-commands)のいずれも使えますが今回はSlash Commandsでやってみます。
おそらくOutgoing Webhookでも設定方法は大差ないと思うのでお好きな方を使って下さい

## 設定方法

1. Bitriseの`Code`タブを開いて、`INCOMING WEBHOOKS`の欄から`SETUP MANUALY`を選択し、プルダウンから`Slack`を選択します。
    - <img width="640" src="https://qiita-image-store.s3.amazonaws.com/0/129872/0dbe3929-bbcb-609f-9d4b-46fe6ab8b012.png">
1. 下部のURLをコピーしておいて下さい。
1. Slackの`App Directory`から[Slash Commands](https://slack.com/apps/A0F82E8CA-slash-commands)を開いて`Add Configuration`からコマンドを追加します。
    - <img width="640" src="https://qiita-image-store.s3.amazonaws.com/0/129872/837978a5-e009-468b-ede4-eae9e91abdd8.png">
1. あとは`Command`欄にトリガーにしたい任意の文字列を設定し、`URL`欄に先程のbitriseのIncoming webhook URLをセットすれば最低限の設定は完了です。
1. お好みでアイコンを変えたりオートコンプリートをつけておくと便利かもしれないです。

## 使い方

普通のSlash Commandsなので

```
/設定した文字列 branch:ブランチ名|workflow:ワークフロー名
```

で実行できるようになっているはずです。
branchとworkflowの指定は必須項目なので忘れないように指定して下さい。
他のオプションに関しては[公式ドキュメント](https://devcenter.bitrise.io/webhooks/adding-a-slack-webhook/)を参照して下さい

## 実行すると

こんな感じになります

![スクリーンショット 2019-03-08 11.39.02.png](https://qiita-image-store.s3.amazonaws.com/0/129872/2e99ad86-83ea-5734-f8ee-33243229ba40.png)
WindowsでDjangoを使う#1

#Djangoのインストール方法
今回の記事ではWindowsにDjangoをインストールする方法を書きました。

#前提
- Pythonダウンロード済み
    - まだの人は、以下URLからダウンロードしてインストールすればオッケー
    - Add Python 3.x to PATHを選択するように
    - https://python.org/downloads/
- Windows 7, 8, and 10（それ以外はテストされていないらしい）
- Pythonのバージョンは3.5以上なら問題ないはず

コマンドプロンプトで以下実行すると、バージョン確認できるよ
`python --version`

#virtualenvwrapperをインストールする
コマンドプロンプトで実行
virtualenvwrapperのインストール
`pip install virtualenvwrapper-win`

virtualenvの作成 myprojectは好きな名前でいい
`mkvirtualenv myproject`
`workon myproject`

#Djangoのインストール
`pip install django`
完了

（参考）
virtualenvから出る
`deactivate`

#参考記事
https://docs.djangoproject.com/en/2.1/howto/windows/
ユーザアカウントの一部情報(最終ログインやパスワード有効期限等)を一括で取得する

# ユーザアカウントの一部情報(最終ログインやパスワード有効期限等)を一括で取得する

パワーシェル初心者です
Linuxシェルスクリプト世界から転生してきましたので、よくわかってません
情報操作系は慣れない感じがします…

## 発端

ユーザの最終ログインとパスワード有効期限を調べたかったので
ちょっとスクリプト書いたので忘備録

## スクリプト

```最終ログオン日時とパスワード有効期限確認.ps1
$users = Get-WmiObject Win32_UserAccount

echo "------------------------------------------------"

foreach ($user in $users) {
    $user.Name
    net user $user.Name | Select-String "最終ログオン日時"
    net user $user.Name | Select-String "パスワード有効期間"
    echo "------------------------------------------------"
}
```

実行結果はこんな感じ

```
PS C:\Users\user_1\work> 最終ログオン日時とパスワード有効期限確認.ps1
------------------------------------------------
Administrator

最終ログオン日時                     2019/03/01 00:00:00
パスワード有効期間                   無期限
------------------------------------------------
DefaultAccount
最終ログオン日時                     なし
パスワード有効期間                   無期限
------------------------------------------------
Guest
最終ログオン日時                     なし
パスワード有効期間                   無期限
------------------------------------------------
user_1
最終ログオン日時                     2019/03/01 00:00:00
パスワード有効期間                   2019/05/01 00:00:00
------------------------------------------------
user_2
最終ログオン日時                     なし
パスワード有効期間                   2019/06/01 00:00:00
------------------------------------------------
```

スクリプトのSelect-String後の文字列を変更することで、
取得情報を変更ができます。
vi/vimおよびsudo vi/vimで日本語が文字化けする時の対処法

# 文字化けの解消法

#### 1. ~/.vimrcに設定を追記する（ファイルはなければ作成する）

```
$ sudo vi ~/.vimrc
```

```vim:~/.vimrc
set encoding=utf-8
set fileencodings=iso-2022-jp,euc-jp,sjis,utf-8
set fileformats=unix,dos,mac
```

#### 2. ~/.vimrcの設定を反映する

```
source ~/.vimrc
```

しかし、上記では```$ sudo vi(もしくはvim)```とした際には文字化けしてしまう可能性がある。
原因は、sudoした時に参照される.vimrcファイルは/root/.vimrcの方だから。
よって、```$ sudo vi```の時はこちらも変更する必要がある。

#### 3. /root/.vimrcにも設定を追記する（ファイルはなければ作成する）

```
$ sudo vi /root/.vimrc
```

```vim:~/.vimrc
set encoding=utf-8
set fileencodings=iso-2022-jp,euc-jp,sjis,utf-8
set fileformats=unix,dos,mac
```
確率ロボティクスの式変形の行間解説

https://github.com/nagiton/notes_probabilistic_robotics

(はてぶと同じ内容)

はじめました。

物理やってると死ぬほどやるのでもう訓練されてしまったんですが、行列の計算とか結構苦戦している人も多いようなので少しでも力になれれば。

上田先生が式追うならTeXで書いてくれると捗るとつぶやいていたのではてぶではなくgithubでtexソース公開しながらちくちく作ります。

 

ツッコミ、要望などお待ちしています。


3/10　「3.2.4　カルマンフィルタの数学的導出」
予測ステップの導出完了
vue routerで共通のメソッドを使いたい場合

# 回答
```
this.$router.app.{メソッド名}
```


# 例
```
new Vue({
  router: router,
  ,methods: {
    aaa: function() {
      return 'aaa'
    }
  },
})

// コンポーネントで呼ぶ
this.$router.app.aaa()

```

# 参考
https://router.vuejs.org/ja/api/#router-app
[基本情報技術者(FE)]2進数で元の値を桁数移動させたら何倍になるか

#はじめに
このページは、初心者エンジニアの僕が、基礎知識を養うために勉強したことを、共有する場です。
とりあえず、基本情報基礎の過去問を解きながら、勉強したことを解説していきます。
間違いや、ニュアンスが微妙なところもあるかもしれませんが、お気軽にご指摘を頂けると幸いです。
#今日の問題
```text:＜13年秋FE問2＞
2進数mの9倍の値を求める方法はどれか。ここでは、けた移動によって、溢れが生じることはないものとする。
1.　mを2ビット左にけた移動したものに、mを1ビット左にけた移動したものを加える。
2.　mを3ビット左にけた移動したものに、mを加える。
3.　mを3ビット左にけた移動する。
4.　mを9ビット左にけた移動する。
```
```text:正解
2.mを3ビット左にけた移動したものに、mを加える。
【解説】
```
[引用サイト](http://jibun.atmarkit.co.jp/scenter/ittrain/fe2009/105-003/105-003a.html)
#解説
##原則的な考え方
ポイントは、
**2進数は、左にnビット桁移動をすると、元の値の2^n倍となる。**
ということです。
(けた溢れが生じないとき、という注釈つきですが、ここでは割愛します。）

[参考サイト](http://jibun.atmarkit.co.jp/scenter/ittrain/fe2009/105-003/105-003a.html)
##今回の問題を解く手順
問題をもう一度見てみましょう。

```text:＜13年秋FE問2＞
2進数mの9倍の値を求める方法はどれか。(ここでは、けた移動によって、溢れが生じることはないものとする。)
```

そして、もう一度原則を思い出します。
**左にnビット桁移動をすると、元の値の2^n倍となる。**

今回の問題は、

 - 2進数を求める方法は、左に何桁移動したかが重要。
 - 元の値から移動した桁数をnとすると、元の値との関係は2^n倍となる。
 - 今回は場合は、移動した桁数は不明、元の値との関係は9倍となる。
 - じゃあ9倍って、言い換えると2の何乗倍？
 
という流れになります。

実際には、
m（元の値）に対して、9倍なので、
9m = 2^3m + 2m
となり、
**mを3桁左移動し、mを0桁左移動したものを加えるたら、mの9倍になる。**
ということになる。

[参考サイト](http://jibun.atmarkit.co.jp/scenter/ittrain/fe2009/105-003/105-003a.html)

##おまけ 2のべき（冪）で表現
何倍かは、2のべきの組み合わせで表現できます。
2    = 1
2^1  = 2
2^2  = 4
2^3  = 8
2^4  = 16
2^5  = 32
2^6  = 64
2^7  = 128
2^8  = 256
2^9  = 512
2^10 = 1024

９は、8 + 1　なので、
2^3 + 2で表現できます。

[引用サイト](https://ja.wikipedia.org/wiki/2%E3%81%AE%E5%86%AA)
##その他　この問題から学べること
ポイントをあげると、

 - 2進数を求める方法は、左に何桁移動したかが重要。
 - その移動した桁数nと元の値との関係は、2^n倍となる。

です。
 
#最後に
引き続き、IT知識の基礎固めで学んだことを共有しています！
よろしくお願いします。
Witty ESP8266 赤外線受光モジュール Tasmota化

※超初心者が書いた自分への備忘録です。

### IoT デバイス
- [Witty](https://www.instructables.com/id/Witty-Cloud-Module-Adapter-Board/) 

### 赤外線受光モジュール
- [PL-IRM1261-C438](http://akizukidenshi.com/download/PL-IRM1261-C438.pdf)   
- [TL1838](http://eeshop.unl.edu/pdf/VS1838-Infrared-Receiver-datasheet.pdf)  
- GPIO 14 に赤外線センサを接続（Vcc は 3.3v）
![IMG-0671.JPG](https://qiita-image-store.s3.amazonaws.com/0/366837/632d8404-469c-6e21-aad1-24a7b5062f1e.jpeg)

**[Arduino IDE を使って Tasmota を Mosquitto TLS + パスワード認証に対応するようビルドする。](https://qiita.com/beginnnnner/items/0b7017dd719e3579edc9)**   


# 初期設定
- http://ipアドレス/cn にアクセスする。
- Configure Module
![Witty_config.JPG](https://qiita-image-store.s3.amazonaws.com/0/366837/4f03c025-0c4d-4ae6-b670-8a51b68c1dcd.jpeg)
- Configure MQTT
![witty_mqtt.JPG](https://qiita-image-store.s3.amazonaws.com/0/366837/3ff9d817-cf00-1b2e-1173-b4072f791723.jpeg)

シリアルモニタで受信確認

```
4:31:35 MQT: tele/sonoff/RESULT = {"IrReceived":{"Protocol":"NEC","Bits":32,"Data":"6A95B04F"}}
04:31:36 MQT: tele/sonoff/RESULT = {"IrReceived":{"Protocol":"UNKNOWN","Bits":5,"Data":"1ED77CFB"}}
04:31:36 MQT: tele/sonoff/RESULT = {"IrReceived":{"Protocol":"NEC","Bits":32,"Data":"6A95708F"}}
04:31:37 MQT: tele/sonoff/RESULT = {"IrReceived":{"Protocol":"UNKNOWN","Bits":4,"Data":"FECB4122"}}
04:31:38 MQT: tele/sonoff/RESULT = {"IrReceived":{"Protocol":"NEC","Bits":32,"Data":"AF508F7"}}
04:31:39 MQT: tele/sonoff/RESULT = {"IrReceived":{"Protocol":"UNKNOWN","Bits":5,"Data":"9A6B044"}}
04:31:40 MQT: tele/sonoff/RESULT = {"IrReceived":{"Protocol":"UNKNOWN","Bits":3,"Data":"FDAC0153"}}
04:31:41 MQT: tele/sonoff/RESULT = {"IrReceived":{"Protocol":"UNKNOWN","Bits":5,"Data":"323149C6"}}
```
Node-RED でも受信できた。

ノイズがかなりひどい。
全て拾って発行するので対策を考えねば。
[iOS][Swift] UITableViewの位置（contentoffset）を変えずにリロード（reloadData）する

UITableViewにて、cellの内容を更新後、UITableViewの位置が変わってしまう場合、以下の方法が有効です。


```swift

fileprivate var heightDictionary: [Int : CGFloat] = [:]

override func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
    heightDictionary[indexPath.row] = cell.frame.size.height
}

override func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat {
    let height = heightDictionary[indexPath.row]
    return height ?? UITableViewAutomaticDimension
}
```
[参考](https://stackoverflow.com/a/46676973)
Ruby ｜配列内のハッシュを合体させる

**配列内にあるハッシュを合体させ、かつ同じキーのバリューの値を合算させるということをやってみました。**

Paizaをやっていたら今回のような状況になったので、備忘録として記事にしました。
もし参考になれば使ってみてください。

また、他にもいいやり方があるよー、ちょっと違いますよーって方がいればコメントしていただければと思います。

## 開発環境
Ruby 2.5.3

## やりたかったこと

配列内にあるハッシュ達を合体させ、配列ではなく一つのハッシュにしたかった。
**ただし、同じキーが重複している際は、バリューの数値を合算する**
イメージ的には下のような感じです。

```ruby
hash = [{a: 1},{b: 2},{b: 3},{c: 4}]

#何か処理をした結果
#=> {:a=>1, :b=>5, :c=>4}
```
きっとレベルの高い人は今回のような状況にならないのかもしれません。笑

## 完成形

ナンセンスなやり方かもしれませんが、一応求めていた結果になりました。

[2つのハッシュをマージする - Ruby Tips!](http://rubytips86.hatenablog.com/entry/2014/03/20/131901)
上の記事を参考にして、`inject`メソッドと併用してみました。

```ruby
hash = [{a: 1},{b: 2},{b: 3},{c: 4}]

merged_hash = hash.inject do |h1, h2|
  h1.merge(h2) do |key, oldval, newval|
    oldval + newval
  end
end

p merged_hash
#=> {:a=>1, :b=>5, :c=>4}
```

バリューを前後の2つの引数に分けて、取り出せるのは知りませんでした。

## 失敗例
自分でなんとかここまでは思いつき、うまくいくと思ったのですが、
一つのハッシュにはなるけど、合算ができず....

```ruby
hash = [{a: 1},{b: 2},{b: 3},{c: 4}]

merged_hash = hash.inject do |h1, h2|
    h1.merge(h2) 
end

p merged_hash
#=> {:a=>1, :b=>3, :c=>4}
# :b=>5 になって欲しかった...
```


## 使用したメソッドの参考例
今回使用したメソッドの通常の使用例をまとめてみました。

### `merge`メソッド

[Ruby 2.6.0 リファレンスマニュアル > Hash#merge](https://docs.ruby-lang.org/ja/2.6.0/method/Hash/i/merge.html)

ハッシュ同士を合体してくれるメソッド
合体する際に同じキーがある場合は、バリューの数値を合算してくれる。


```ruby
h1 = {a: 1, b: 2, c: 3, d: 4}
h2 = {e: 5, f: 6}
h3 = {a: 10, b: 20}

p h1.merge(h2)
# => {a: 1, b: 2, c: 3, d: 4, e: 5, f: 6}

p h1.merge(h3)
# => {a: 11, b: 22, c: 3, d: 4}
# 値が合算される
```

### `inject`メソッド

[Ruby 2.6.0 リファレンスマニュアル > Enumerable#inject](https://docs.ruby-lang.org/ja/2.6.0/method/Enumerable/i/inject.html)

配列を繰り返し処理する際に、前の要素と今の要素を条件に沿って処理してくれる。
今回の例は、足し算にしているので合計を算出してくれます。

```ruby
numbers = [1,2,3,4,5]

numbers.inject do |n, m|
    n + m
end

# or

numbers.inject(&:+)

# => 21
```

## Ruby 2.6 以降の書き方

色々とコメントをいただき、正しい情報を追記させていただきました。

[Class: Hash (Ruby 2.6.1)](http://ruby-doc.org/core-2.6.1/Hash.html#method-i-merge)
`Ruby 2.6`からは以下のような書き方も可能になったみたいです。
`inject`を使わなくてもマージかつ合算できるのは便利。
逆に言えば、`inject`と`merge`の組み合わせが定番だったからこそ、こうなったのかな？と。


```ruby
hash = [{a: 1}, {b: 2}, {b: 3}, {c: 4}]

{}.merge(*hash) { |_key, v1, v2| v1 + v2 }
#=> {:a=>1, :b=>5, :c=>4}

{}.merge(*hash)
#=> {:a=>1, :b=>3, :c=>4}
```
他にもコメント欄に別の書き方が記載されています。参考にしてください。

## さいごに

そもそもブロック内にまた別のブロックを作ることって実際ありなのかな？って一瞬思いましたが、他に何も思いつきませんでした。
もし、他にやり方があればぜひ教えていただきたいです。

読んでいただきありがとうございました！
Tomcatのサーバー起動に失敗した

<h2>【環境】</h2>
OS:Windows10
Eclipse:pleiades-4.8.0-java-win-32bit_20180923
サーバー:Tomcat 8.5


<h2>【問題】</h2>
ssj_ex07をコピーしssj_ex07-2を作成後、ssj_ex07の名前をssj_ex07-1に変更し、
実行しようとしたところ、Tomcatサーバーが起動しない


<h2>【考えられる原因】</h2>
1.tomcatのserver設定ファイルに過去消したプロジェクトのPathが残ってしまっている
2.ssj_ex07をコピーしssj_ex07-2を作成したことが良くない作業だった？


<h2>【行った対処】</h2>
1.Tomcatのserver.xmlファイル修正→変化なし

152行目 修正前

```xml:server.xml
<Context docBase="ssj_ex01" path="/ssj_ex01" reloadable="false" source="org.eclipse.jst.jee.server:ssj_ex01"/>
<Context docBase="ssj_ex04" path="/ssj_ex04" reloadable="false" source="org.eclipse.jst.jee.server:ssj_ex04"/>
<Context docBase="ssj_ex07-1" path="/ssj_ex07-1" reloadable="false" source="org.eclipse.jst.jee.server:ssj_ex07-1"/>
<Context docBase="ssj_ex07-2" path="/ssj_ex07" reloadable="false" source="org.eclipse.jst.jee.server:ssj_ex07-2">
</Context></Host>
```

修正後

```xml:server.xml
<Context docBase="ssj_ex01" path="/ssj_ex01" reloadable="false" source="org.eclipse.jst.jee.server:ssj_ex01"/>
<Context docBase="ssj_ex04" path="/ssj_ex04" reloadable="false" source="org.eclipse.jst.jee.server:ssj_ex04"/>
<Context docBase="ssj_ex07-1" path="/ssj_ex07-1" reloadable="false" source="org.eclipse.jst.jee.server:ssj_ex07-1"/>
<Context docBase="ssj_ex07-2" path="/ssj_ex07-2" reloadable="false" source="org.eclipse.jst.jee.server:ssj_ex07-2">
</Context></Host>
```

2.ssj_ex07-2を削除し、コピーでなく新規プロジェクトとして作り直す→Tomcat起動

<h2>【原因と対策】</h2>
コピーしたプロジェクトをTomcatが認識できず、エラーが起こっていたっぽい。
動的Webプロジェクトはコピーした際に以下の設定が必要。 **基本的にプロジェクトは新規で作成する。**

１．ワークスペース名の変更（eclipseで表示されるプロジェクト名）
プロジェクトを選択して右クリック→「リファクタリング」→「名前変更」

２．コンテキストルートの変更（http://localhost:8082/xxx/のxxxの部分）
プロジェクトを選択して右クリック→「プロパティー」→「Webプロジェクトの設定」

３．プロジェクト名の変更（tomcatサーバーが認識するプロジェクト名）
ワークスペース名¥.settings¥org.eclipse.wst.common.component

```xml:org.eclipse.wst.common.component
<wb-module deploy-name="xxx">
```

xxxを手動で編集する。
※自動更新してくれないので、注意。

[参考：SE日記/動的Webプロジェクトのコピー]http://under-siege.jugem.jp/?eid=4
[iOS][Swift] UINavigationControllerからPopされたViewControllerを取得する方法

どのUIViewControllerから戻ってきたのか知りたいときに使えます。

```swift

private func getFromVC() -> UIViewController? {
        if let transitionCoordinator = self.navigationController?.transitionCoordinator {
            let fromVC = transitionCoordinator.viewController(forKey: UITransitionContextViewControllerKey.from)
            return fromVC
        }
        return nil
    }
```

[参考](https://stackoverflow.com/a/46114994)
プログラミングでよく見かける"コンテキスト(context)って何？

サンプルコードを眺めてると

```javascript
function foo(context){
    //...
}

function foo(ctx){
    //...
}
```
とか、この`context|ctx`と言うのをよく目にします。

まぁネーミングなんて何でもいいんですが、使われる頻度も多いので少し掘り下げてみました。


# コンテキストとは
まずは皆大好きWikipedia先生

- [コンテクスト - Wikipedia](https://ja.wikipedia.org/wiki/%E3%82%B3%E3%83%B3%E3%83%86%E3%82%AF%E3%82%B9%E3%83%88)

> (中略)
一般的に文脈（ぶんみゃく）と訳されることが多い。
文脈により「脈絡」、「状況」、「前後関係」、「背景」などとも訳される。

少し抽象的ですね。
次はe-Words先生

- [コンテキスト - e-Words](http://e-words.jp/w/%E3%82%B3%E3%83%B3%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88.html)

> (中略)
同じコード記述やプログラム上の要素が、その置かれているプログラム内での位置や、実行される際の内部状態などによって異なる振る舞いをしたり、異なる制約を受けたりすることを指してコンテキストということがある。

分かりやすいですね。

ここまで読むと、Wikipedia先生が「状況」と言っていた意味も何となく分かります。


# `state`と`context`
これら先生方の解説を踏まえると、
__`context` ≒ 状態__
を表すネーミングと言えそうです。

でも __[状態]__ だったら
__「`state`と被るんじゃ？」__
と思うかもしれません。

しかし`state`と`context`には、大きな違いがあります。


## state
ご存知、日本語訳でそのまんま「状態」を表す英語です。
プログラミングだけでなく一般的にも同じ意味で使われているので、こちらは馴染みが深いと思います。

ただプログラミングで使う場合は
__(変数)の中身によって異なる処理を行う場合は`state`__
と解釈します。

例えば...

```javascript
function today(state){
    if(state == "仕事"){
        console.log("帰りたい");
    }
    else if(state == "休日"){
        console.log("やったぜ");
    }
}
```
多少の粗相は目を瞑ってもうとして、分かりやすい例かと思います。
`state`の「状態」によって異なる「処理」を行っています。


## context
では、同じ「状態」を表すこちらは、どのような使い分けをするのでしょうか。

__(変数)の中身によらず同じ処理を行う場合は`context`__
と解釈します。

例えば...

```javascript
function shopping(context){
    addCart(context);
    pos(context);
    payment(context);
    intoBag(context);
}
```
こちらも多少の粗相はありますが、そのまんま買物を表した関数です。

`context`の「状態」が「りんご」でも「バナナ」でも「グラボ」でも何であっても、カートに入れて、レジ通して、支払して、バッグに入れるという一連の「処理」は変わりません。

そしてこれは`context`を分かりやすく表現する為に思いついた例ですが、実際には`item`などもっと具体的なネーミングにすべきです。

そう、`context`自体は結構曖昧な表現なので、乱用すると訳が分からなくなります。

ただプログラミングにおいては、関数だったり親階層だったりで強く意味付けされていて、冗長表現になってしまう事もあるかと思います。

つまり
__「もうこれ以上は意味付け出来ないよ！」とギブした時や、抽象的な表現が必要な時に使う、同じ処理が行われる [状態] を表すネーミング__
と言うことになります。
pickle No module namedのエラー対処法

# まず
変数とかパラメータをささっと保存したい時がある．
そんな時に使うのが`pickle`，もしくはpickleをラップした`dill`．

# 問題
```python
File "/usr/local/lib/python3.6/site-packages/dill/_dill.py", line 474, in find_class
    return StockUnpickler.find_class(self, module, name)
ModuleNotFoundError: No module named 'classifiers'
```

`classifiers`moduleないでって言われてる．

# 原因
`pickle`は`load`する時その型を一緒に読み込んでくる
`classifiers`型を探しにいくので，その場所を指定してあげればいい

# 解決法
`sys`にそのモジュールを追加してあげる．

```ファイル構成
src 
 |-home
 | |-views.py
 |
 |-scripts
   |-classifiers.py
```

```views.py
from scripts import classifiers
sys.modules['classifiers'] = classifier
```

以上．
JavaScriptでテキストノードを検索する方法（XPath）

## TL;DR

```javascript
/**
 * 条件に合ったコメントノードを取得します
 * @license WTFPL
 * @param {?string} pattern - ヒットさせる文字列
 * @param {?Object} target - 検索するコンテキストノード
 * @return {Array.<Object>} - テキストノードリスト
 */
const getTextNodes = (pattern, target) => {
    const context = target ? ((d) => {
        d.append(target.cloneNode(true));
        return d
    })(new Document()) : document;
    const xPathResult = document.evaluate(
        pattern ? `//text()[contains(., "${pattern}")]` : '//text()',
        context,
        null,
        XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,
        null
    );
    const result = [];
    let {snapshotLength} = xPathResult;

    while (snapshotLength--) {
        result.unshift(xPathResult.snapshotItem(snapshotLength));
    }

    return result;
};
```

### 使用方法

```javascript
const allTextNodes = getTextNodes(); // すべてのテキストノードを取得する

console.log(allTextNodes); // すべてのテキストノード
console.log(allTextNodes.length); // すべてのテキストノードの個数
console.log(allTextNodes[0].textContent);

allTextNodes[0].remove(); // 先頭のテキストノードを削除

console.log(allTextNodes('使用方法')); // コメントに「使用方法」を含むすべてのテキストノードを取得する
console.log(allTextNodes('', document.body)); // body 要素内のテキストノードをすべて取得する
console.log(allTextNodes('使用方法', document.body)); // コメントに「TODO」を含む body 要素内のテキストノードを取得する
```

## テキストノードを検索する

[JavaScriptで特定の文字列を含むコメントアウトを検索する方法（XPath）](https://qiita.com/soten_bluesky/items/fdab857cabe13d59519f)の余談記事です。

コメントノードが検索できるコードをテキストノードに置き換えたものです。
同じように検索したいノードタイプ別にXPATHを書き換えてあげればあらゆるノードが検索できます。
Android4系で出会ったCSSトラップたち

# 概要
**なぜ古いAndroidに対応しなければならないのか、コレガワカラナイ**

よくCSSアニメーションなどをいじくるのですが、
IEを直した思ったらAndroid（標準ブラウザ）で崩れる定番の流れ、あると思います。

ちなみにAndroid4系とうそぶきつつ、普段対応してるのは4.4です。
トラップに引っかかり、罠解除するたびに追記していきたいと思っております。

## アニメーションならJSでやればいいじゃん
やれるならな、やってるんだヨォ！！！（できるとは言っていない）
大手クライアント様ですと、JSを追加するのをとても嫌がられるんですのよ。オホホ。だからCSSでやれと言われるわけでございますのよ。

## Android Studioで見てんだよなぁ？
いや、やったけどさ、[Android Studio](https://developer.android.com/studio?hl=ja)でさ、ちゃんとバージョン指定してエミュレータで見たけどもね
**正常に動く（実機で動くとは言っていない）**
という状況にブチ当たったため、結局実機で見ています。ヨロシクゥ！

# 1. backgroundをsize込みで一括指定すると効かない

**👇 効きません**

```hoge.css
background: url("hoge.png") no-repeat left top / 100%;
```

**👇 効きます**

```hoge.css
background: url("hoge.png") no-repeat left top;
background-size: 100%;
```

# 2. 疑似要素（before,after）をanimationさせようとしても効かない

**👇 効かないと言い切れはしないけど**

```hoge.html
<div class="hoge-anime">ほげげ</div>
```
```hoge.css
.hoge-anime:before {
  content: "ぴよよ";
  animation: fadeAnime 1s infinite;
}
@keyframes fadeAnime {
  from { opacity: 0; }
  to { opacity: 1;  }
}
```

**👇 こちらのほうがよい**（諦めて要素を増やす）

```hoge.html
<div class="piyo-anime">ぴよよ</div>
<div class="hoge">ほげほげ</div>
```
```hoge.css
.piyo-anime {
  animation: fadeAnime 1s infinite;
}
@keyframes fadeAnime {
  from { opacity: 0; }
  to { opacity: 1;  }
}
```

これはAndroidに限った話ではないですけどね！
なるべく少ないソースで実現できるのがクール、というのはとっても分かるのですが、
疑似要素に対するアニメーションは不安定なので、ここは潔く諦めてdivとか増やす感じでいきましょう（動くときもある、というのがまた不気味）。

# 3. 複数のanimationを同時に行うとき、rotateが入ってると効かない


**👇 効かないと思われる**

```hoge.html
<div class="hoge-anime">ほげげ</div>
```
```hoge.css
.hoge-anime {
  animation: fadeAnime 1s infinite,
             rotateAnime 1s infinite;
}
@keyframes fadeAnime {
  from { opacity: 0; }
  to { opacity: 1;  }
}
@keyframes rotateAnime {
  from { transform: rotate(0deg); }
  to { transform: rotate(360deg);  }
}
```
この場合は、アニメーション自体を考え直さなくてはならないかもしれません:sob:
なんとかして、回転（rotate）とそれ以外の動きを分離させられないかがんばりましょう。

動かないと思ったら`transform`を別々にいじってて上書き合ってた、なんて初歩的ミスもありますので気をつけて！！

**👇 やっちゃうとはずい事例**

```hoge.css
.hoge-anime {
  animation: translateAnime 1s infinite,
             skewAnime 1s infinite;
}
@keyframes translateAnime {
  from { transform: translateY(0); }
  to {  transform: translateY(50px);   }
}
@keyframes skewAnime {
  from { transform: skewX(0); }
  to { transform: skewX(20deg);  }
}
```
`transform`しながら`transform`する（哲学）
**そりゃ動かねえわ**
って冷静に見ると思うんですけど、たまにやっちゃいます。
その場合は移動を`position:absolute;`でやれないか試してみましょう！

ただほんとは`absolute`よりも`translate`のほうが良いようです。
参考 👇
[absoluteではなくtranslateを使用する - CSSアニメーションの基礎知識のあとに学ぶ応用知識](https://iwb.jp/css-animation-applied-knowledge/#absolutetranslate)
[Web制作にGPU処理を取り入れる](https://w3g.jp/blog/web_gpu_adopt)
まあ、あくまで優先順位の話ですから、気に病むことはないと思います。

# 4. animation-directionの`reverse`と`alternate-reverse`が効かない

**👇 効きません**

```hoge.css
.hoge {
  animation-direction: alternate-reverse;
}
```

**👇 効きます**

```hoge.css
.hoge {
  animation-direction: alternate;
}
```
行って返ってを無限ループしたいアニメはよくあるので、これ地味に困るんですよね。
対応策は行って返って、までを１つのkeyframesに書くことかなと思います。
ただ要素をtransformとかで動かしてる場合はまだ対応しやすいんですが、
画像を使ったパラパラ漫画的アニメだと、コマ数を増やして対応するのはかなり大変です。
アニメ自体の動き変更も検討したほうが良いときもありそうです(ﾉД`)



他事象追記予定
Docker for WindowsをインストールしようとしたらRemoving filesで進まなくなった時の対処法

#起きたこと

　最近VirtuakBoxがHype-Vと共存できるみたいな話を聞いてじゃあついでにDocker入れるか～となって
入れようとしたらタイトル通りに止まってしまった。
![Docker.jpg](https://qiita-image-store.s3.amazonaws.com/0/267515/42f406fd-1dee-d2ef-cc97-1698f31096e4.jpeg)

#使用しているWindowsのバージョン
OS:Windows10 pro 1809

#ググった結果は
　すでにGitHubのissueに上がっており、[解決策](https://github.com/docker/hub-feedback/issues/1532#issuecomment-456858950)も出ていました。
内容は
>For anyone observing this issue on Windows 10, 1809: Try to go to Settings -> Update & Security -> Windows Security -> Threat Protection -> Manage ransomware protection -> Disable the protection, or allow the installer. This fixed the issue for me.



グーグル先生の力に頼って大まかに訳すと

　Windows10バージョン1809でこの問題に直面している人は 設定 -> 更新とセキュリティ -> Windows セキュリティ -> ウイルスと脅威の防止 -> ランサムウェアの防止 にある　*アプリをコントロールされたフォルダーアクセスで許可する*　でインストーラーを許可されたアプリに追加

すると良いらしいです。

#やってみた結果
　見事インスト―ル完了しました！（画像取り忘れましたすみません）

　ただし注意点として、許可されたアプリを追加する際に　*最近ブロックされたアプリ*　か　*すべてのアプリを参照*　で聞かれるのですが　*最近ブロックされたアプリ*　ではインストーラーは表示されないので *すべてのアプリを参照* から追加してください。
![ランサムウェア許可に追加.png](https://qiita-image-store.s3.amazonaws.com/0/267515/252b74db-a292-6e6b-373f-e746946b2d3e.png)
　まぁブロックしましたよ~みたいなメッセージが出てこない時点で何となくそんな気はしてましたが。

#結論
**Windows セキュリティのランサムウェア防止で引っかかっているので許可してあげるとインストールできる!**