OmniAICreator/Qiita-1.07M huggingface dataset:
vagrant upでエラー homesteadとAnsible使用時　メモ

『ansible』

■エラー内容
-> % vagrant up

Bringing machine 'default' up with 'virtualbox' provider...

An action 'up' was attempted on the machine 'default',
but another process is already executing an action on the machine.
Vagrant locks each machine for access by only one process at a time.
Please wait until the other Vagrant process finishes modifying this
machine, then try again.


■プロセス確認
-> % ps

 PID TTY           TIME CMD
23935 ttys001    0:00.04 /Applications/iTerm.app/Contents/MacOS/iTerm2 --server login -fp jun
23937 ttys001    0:00.18 -zsh
13999 ttys002    0:00.01 vagrant up
14000 ttys002    0:09.81 ruby /opt/vagrant/embedded/gems/gems/vagrant-1.8.6/bin/vagrant up
55052 ttys002    0:00.05 /Applications/iTerm.app/Contents/MacOS/iTerm2 --server login -fp jun
55054 ttys002    0:00.28 -zsh
19888 ttys003    0:00.06 /Applications/iTerm.app/Contents/MacOS/iTerm2 --server login -fp jun
19890 ttys003    0:00.45 -zsh
43556 ttys004    0:00.05 /Applications/iTerm.app/Contents/MacOS/iTerm2 --server login -fp jun
43566 ttys004    0:00.34 -zsh
45692 ttys004    0:00.20 php artisan serve
45698 ttys004    0:00.18 /Applications/MAMP/bin/php/php5.5.10/bin/php -S localhost:8000 /Users/jun/workspace/quickstart/server.php
64337 ttys005    0:00.19 /bin/zsh --login
55672 ttys006    0:00.03 /Applications/iTerm.app/Contents/MacOS/iTerm2 --server login -fp jun
55674 ttys006    0:00.28 -zsh

■プロセスkill
-> % kill 13999
-> % kill 14000


『homestead』

■エラー内容
-> % vagrant up

Bringing machine 'homestead-7' up with 'virtualbox' provider...
==> homestead-7: Checking if box 'laravel/homestead' is up to date...
Vagrant cannot forward the specified ports on this VM, since they
would collide with some other application that is already listening
on these ports. The forwarded port to 8000 is already in use
on the host machine.

To fix this, modify your current project's Vagrantfile to use another
port. Example, where '1234' would be replaced by a unique host port:

  config.vm.network :forwarded_port, guest: 80, host: 1234

Sometimes, Vagrant will attempt to auto-correct this for you. In this
case, Vagrant was unable to. This is usually because the guest machine
is in a state which doesn't allow modifying port forwarding. You could
try 'vagrant reload' (equivalent of running a halt followed by an up)
so vagrant can attempt to auto-correct this upon booting. Be warned
that any unsaved work might be lost.

■プロセス確認
-> % ps
45698 ttys004    0:00.18 /Applications/MAMP/bin/php/php5.5.10/bin/php -S localhost:8000 /Users/jun/workspace/quickstart/server.php

■プロセスkill
-> % kill 45698
Unityで自作DLLライブラリをインポートしたらエラーが出たとき

# はじめに
##### 環境 
- Win 8.1 
- Unity5.3.5p5
- Visual Studio Community 2013

C#でDLLを作成しUnityにインポートしたところ以下のようなエラーが出ました。
```
Unhandled Exception: System.Reflection.ReflectionTypeLoadException: The classes in the module cannot be loaded.
```
なんか使えないクラスとかを使おうとしているかロードできないって言われました。
しかし、DLL内にはUnityでも動くようなコードしか書いていない・・はて？と思い少し調べました。
ggっても解決しなかったので、私の場合の解決方法を備忘録として記載します。同様の人がいれば幸い

# 色々検索した結果
- http://qiita.com/awm-kaeruko/items/ec0bdf2d42c657b9d41e

こちらの記事で同様のエラーが出ている様子
たしかに私のDLL内にも同様の「AssemblyInfo.cs」というファイルが自動で入っていたので消してみた

が、しかし未だエラー消えず。。

Unityの公式QAを見たら[こんなもの](https://forum.unity3d.com/threads/ideas-reflectiontypeloadexception-the-classes-in-the-module-cannot-be-loaded.230389/)が
この方はどうやら同様のエラーの様子。色々回答を見ているとどうやら.NETのverの問題とのこと

# 解決方法
しかし、DLLのプロジェクトを見てもver3.5までのUnityでも動くコードしか書いてないし・・・と思ったけど、よく考えたらVisualStudioのでは4.0以上の設定でコンパイルしているはずなのでエラー出るのは当たり前だった

なので、DLL側のプロジェクト設定を変更したら解決した
具体的には
```
[プロジェクト名].csproj 
```
というファイルがプロジェクト直下にあるはずなのでそれを開く
すると"TargetFrameworkVersion"という項目が"v4.5"になっていた
それを画像のように"v3.5"に変更すれば終わり

![updateJpg.jpg](https://qiita-image-store.s3.amazonaws.com/0/138731/ca569c49-b7f2-f550-14dd-c02b96fe8ad4.jpeg)
AzureのFace APIを試してみる

# はじめに
先日はAWSのことを書きましたが今日はAzureについて書いてみます。
とりあえず最近画像の顔認識がやりたいなぁと思っていたのですが、とはいえデータセットを用意するのも辛いな、とか思っていたところなんとAzureには良い感じのサービスが有ることがわかりました！
てなわけで、今回はFace APIを使って顔認識を実行してみます。

# Azureセットアップ
## アカウントの取得
これはトップ画面からやれば普通にできると思うので適宜実施してください。
携帯とクレカは必須です。

## Cogntive Servicesのセットアップ

さて、ログイン後は下記のような画面担っているかと思います。
(これまたおしゃれで良い画面ですね)

![edited1.png](https://qiita-image-store.s3.amazonaws.com/0/99704/3773fcfb-1732-723d-c04e-257dad863781.png "edited1.png")

それは置いておいて、サービスのセットアップを開始します。
左下の「その他のサービス」をクリックし、Cognitive Services accountsを選択します。
数が多いので、スクリーンショットのように絞り込むと楽です。

![edited2.png](https://qiita-image-store.s3.amazonaws.com/0/99704/a71e622d-8c63-fc67-dc36-453804601fd0.png "edited2.png")

出てきた画面で「追加」をクリックします。
![edited3.png](https://qiita-image-store.s3.amazonaws.com/0/99704/65700572-d90d-0acc-f247-bcce6f96c752.png "edited3.png")

スクリーンショットを参考に情報を入力します。
![edited4.png](https://qiita-image-store.s3.amazonaws.com/0/99704/162e7240-72fc-5dc2-867e-381c429815dd.png "edited4.png")

同様に。
![edited5.png](https://qiita-image-store.s3.amazonaws.com/0/99704/52a8a87e-4e69-5ded-04c0-668b1b542035.png "edited5.png")

最後はLegal Termsのところを表示して、Agreeボタンを押すのを忘れないようにしてください。
![edited6.png](https://qiita-image-store.s3.amazonaws.com/0/99704/aceb47c8-95bd-de12-3d9f-9c26a1dd21f1.png "edited6.png")

デプロイ中待ちます。
![edited7.png](https://qiita-image-store.s3.amazonaws.com/0/99704/c10354b3-584f-0124-5b42-96e686f175eb.png "edited7.png")

デプロイが終わるとこんな画面が開きます。
![edited8.png](https://qiita-image-store.s3.amazonaws.com/0/99704/364eb647-9e27-5159-29dd-a730460ffeb7.png "edited8.png")

## キーの入手
この手のサービスは兎にも角にも鍵を入手しないと始まりません。
Keysをクリックしてください。
![edited9.png](https://qiita-image-store.s3.amazonaws.com/0/99704/e9a18af9-8977-0a0a-9a7c-556f7ccf814d.png "edited9.png")

2つありますが、どちらでも良いので控えておきます。
![edited10.png](https://qiita-image-store.s3.amazonaws.com/0/99704/c75af37e-9048-4262-5633-9589e45e6fa8.png "edited10.png")

## サンプルコードの実行
お得意のnode.jsのsdkが見当たらないので、とりあえずpythonで実行します。
https://www.microsoft.com/cognitive-services/en-us/face-api/documentation/Get-Started-with-Face-API/GettingStartedwithFaceAPIinPython

コードは丸パクリですが、

```python:test.py
import cognitive_face as CF

KEY = 'subscription key'
CF.Key.set(KEY)

img_url = 'https://raw.githubusercontent.com/Microsoft/Cognitive-Face-Windows/master/Data/detection1.jpg'
result = CF.face.detect(img_url)
print result
```

これをそのまま、subscription keyのところだけ、先程のキーに置き換えて実行すると下記の様な結果が返ります。

```
[{u'faceId': u'c067fe40-2f56-4241-bc60-dc6bb1a918bf', u'faceRectangle': {u'width': 89, u'top': 66, u'height': 89, u'left': 446}}]
```

なるほど、ということで、全く人の顔が写っていない写真も試してみます。
これはWeb上にある適当な画像のURLで上のコードのimg_urlを置き換えて実行します。
すると

```
[]
```

という空の配列が返ります。

## ダッシュボード
ちなみに上のコードを実行したあと、ダッシュボードの表示はこんな感じになります。
![edited12.png](https://qiita-image-store.s3.amazonaws.com/0/99704/cf0c3eb3-396a-5b69-c0ff-543b56e0b9ad.png "edited12.png")

何回呼び出したかとかパッと見すぐに分かりそうで、いいですね。

# まとめ
非常に簡単に顔認識が実現できてしまいました。
アカウント取得含めても30分もかからないで実行できちゃうあたりが楽ちんでいいですね。
これを使ってちょっと作りたいものがあるのでがんばってみます！
PrimeFacesで動的にenable/disableを切り替えるとき

Client Side APIを使えば動的にenable/disableを切り替えられる。

```html
<p:commandButton action="#{...}" widgetVar="test"/>
<p:commandButton onclick="PF('test').enable();" value="enable"/>
<p:commandButton onclick="PF('test').disable();" value="disable"/>
```

しかし、困ったことにタグのdisabled属性でdisableにされていると、
APIでenableにしてもボタンが動作しなかったり入力値がPOSTされなかったりする。

```html
<p:commandButton action="#{...}" widgetVar="test" disabled="#{hoge}"/> <!-- not work -->
<p:commandButton onclick="PF('test').enable();" value="enable"/>
<p:commandButton onclick="PF('test').disable();" value="disable"/>
```

初期表示時にdisableで、後からenableにしたい場合は初期表示時にAPIでdisableにする。


```html
<p:commandButton action="#{...}" widgetVar="test"/> <!-- work -->
<p:commandButton onclick="PF('test').enable();" value="enable"/>
<p:commandButton onclick="PF('test').disable();" value="disable"/>
<script>
    if(#{hoge}){
        PF("test").disable();
    }
</script>
```

PrimeFacesを使っているとJavascriptと相性悪いなーと思うことが多い。
選択（結合：等価結合、内部結合)


## 結合について

結合は基本的に 2 つのテーブルを使用しますが、3 つ以上のテーブルを同時に結合することも可能です。結合できるテーブルの数に制限はありません。
構文としては、FROM 句の後ろに JOIN 句、ON 句のセットを結合するテーブルの分だけ記述していくことで、3 つ目以降のテーブルを結合できます。


テーブルを結合することで複数のテーブルからデータを参照することができます。最も頻繁に使用する結合は等価結合(または内部結合といいます)です。等価結合とは指定した列について同じデータを持つレコード同士を結びつける結合です。指定した列のデータがどちらかにしかないレコードは抽出されません。テーブルを等価結合するにはJOIN句を使用します。


## JOIN ... ON （INNER JOIN）

結びつかないと表示されないです。結びついたパターンは全て表示。

JOIN句を使用してテーブルを等価結合するには以下のようにSQLを書きます。なお，INNERは省略することができます。


```sql
SELECT 列名1, 列名2, ...
FROM テーブル名1 [INNER] JOIN テーブル名2
  ON テーブル名1.列名 = テーブル名2.列名
[WHERE 条件式など]
```

JOIN句で結合するテーブルを指定し，どの列をキーにして結合するかをON句で指定します。また，等価結合は以下のように書くこともできます。

```sql
SELECT 列名1, 列名2, ...
FROM テーブル名1, テーブル名2
WHERE テーブル名1.列名 = テーブル名2.列名
```

### SQLサンプル

例として売上伝票と商品マスタを商品コードをキーにして結合します。

__売上明細__

|伝票番号|商品コード|
|:---:|:---:|
|01-101|A001|
|01-102|A002|
|01-103|B002|
|01-104|D001|

__商品__

|商品コード|商品名|
|:---:|:---:|
|A001|冷蔵庫|
|A002|洗濯機|
|B001|エアコン|
|B002|空気清浄機|
|C001|液晶テレビ|

```sql
SELECT 売上明細.伝票番号, 商品.商品コード, 商品.商品名
FROM 商品 JOIN 売上明細
  ON 商品.商品コード = 売上明細.商品コード
```

__結果__

|伝票番号|商品コード|商品名|
|:---:|:---:|:---:|
|01-101|A001|冷蔵庫|
|01-102|A002|洗濯機|
|01-103|B002|空気清浄機|
Excel作業で使う小技

## ショートカット

|機能|操作|
|:------------:|:------------:|
|枠線 |Ctrl + Shift + & |
|編集モードに変換（文字を入力時方向キーでセル移動しないため）|F2|
|拡大|スクロール下 + Ctrl|
|縮小|スクロール上 + Ctrl|
|列・行の挿入|列か行を選択した状態で Ctrl + Shift + +|
|直前の操作を繰り返す| Ctrl + y|

## よく使う事
- セルの先頭に「=」を持ってくる場合は、接頭辞として「'」シングルコーテーションを使用。
MacOS Sierraでclang+OpenMPを使う方法 2016.11


自分のMacBookPro(MacOS Sierra 10.12.1)でopenMPを使うことになったので、その手順をまとめます。初めは[公式ホームページ](https://clang-omp.github.io/)を参照しながら試みたのですが、ビルドができず失敗しました。 ~~そこでHomebrewで構築することにしました。~~ **追記：LLVM 8.1から公式のclangがOpenMPに対応したため、以下で紹介する`clang-omp`を導入するより最新のLLVMを導入したほうがいいです。（追記参照）**

## Getting the source code, Building
Homebrewをつかってclang-ompをインストールします。

```
$ brew tap homebrew/boneyard
$ brew install clang-omp
```

## Using

PATHを通すために.zshrc等に環境変数を設定します。!date!の部分はインストールされた最新のフォルダ名を入れてください。

```.zshrc
export C_INCLUDE_PATH=/usr/local/Cellar/libiomp/!date!/include/libiomp:$C_INCLUDE_PATH
export CPLUS_INCLUDE_PATH=/usr/local/Cellar/libiomp/!date!/include/libiomp:$CPLUS_INCLUDE_PATH
export LIBRARY_PATH=/usr/local/Cellar/libiomp/!date!/lib:$LIBRARY_PATH
```
試しにサンプルを動かします。


```test_omp.cpp
#include <iostream>
#include <omp.h>

int main() {
  #pragma omp parallel
  {
    // ここがコア数分だけ並列に実行される。１コアだと１つです。
    printf("Hello, World ! %d of %d\n", omp_get_thread_num(), omp_get_num_threads());
  }
  return 0;
}
```


```
$ clang-omp++ -fopenmp test_omp.cpp -o test_omp 
$ ./test_omp
Hello, World ! 3 of 4
Hello, World ! 0 of 4
Hello, World ! 2 of 4
Hello, World ! 1 of 4
```
成功です。ちなみに僕のMacBookProのコア数は

```
$  system_profiler SPHardwareDataType | grep Cores
      Total Number of Cores: 2
```
２つですが、４並列されているのは[Hyper-threading](http://e-words.jp/w/%E3%83%8F%E3%82%A4%E3%83%91%E3%83%BC%E3%82%B9%E3%83%AC%E3%83%83%E3%83%87%E3%82%A3%E3%83%B3%E3%82%B0.html)が有効になっているかららしいです。無効にしたい方は、

```
$ sudo nvram SMT=0
```
で無効にできます。

## 追記：2016/11/09
[EqualL2](http://qiita.com/EqualL2)さんからより良い方法を教えていただきました。ありがとうございます！
LLVM 8.1から公式のclangがOpenMPに対応したため、`clang-omp`はこれ以上更新されないそうです。そのため最新のLLVMを導入したほうがいいです。僕のMac上でも動作を確認できました。

#### 1.`llvm`をインストール
```
$ brew install llvm
```
#### 2.(.bashrcなどに)エイリアスを設定

```
alias clang-omp='/usr/local/opt/llvm/bin/clang -fopenmp -L/usr/local/opt/llvm/lib -Wl,-rpath,/usr/local/opt/llvm/lib'
alias clang-omp++='/usr/local/opt/llvm/bin/clang++ -fopenmp -L/usr/local/opt/llvm/lib -Wl,-rpath,/usr/local/opt/llvm/lib'
```

## 参考
- [OpenMP®/Clang](https://clang-omp.github.io/)
- [Macでclang+OpenMP 2016](http://qiita.com/r9y9/items/2e382887ee7e9fa0fb9f)
- [clang-ompのセットアップ](http://qiita.com/ymmtmdk/items/652660ce41a30961670c)
- [clang-ompをbrewをつかってインストールしてみた](http://ameblo.jp/migakazuba/entry-12025979501.html)
- [Mac OS X Lion (Server) で Hyper-Threading を ON/OFFする方法](http://discus-hamburg.cocolog-nifty.com/mac_de_oracle/2012/06/os-x-lion-serve.html)
KPTバッドパターン

# 概要
業務プロセス改善に用いられる「KPT」ですが、
結果を見ていていくつかのバッドパターンのようなものがあったので
自分への戒めを込めてまとめてみたいと思います。

# 1.次のKPTまでの期間が長すぎる
## 起こってしまう事象
リリースやプロジェクトの完了時にKPTを行うようなパターンですが、
リリースが長引いてしまったりすると前回が数カ月前！のような状態になることがあるようです。
当然ながら前回のKPTの内容など覚えておらず、今期の作業内容も思い出せない！
というような状況に陥ってしまいます。

## 改善策
週次、月次等KPTの間隔を短く取る。

短くしすぎるとKPT自体にコストがかかってしまうため、そのあたりは要調整です。

# 2.前回のTryが評価されない
## 起こってしまう事象
Keep/Problem/Tryを振り返る期間の内容からのみひねり出してしまい前回のTryについての評価がされない。
前期間のTryがどうだったかは、今期間の取り組みを振り返ることでわかります。
Tryを忘れてしまってはプロセス改善になりません。

## 改善策
KPTの開始時に前期間のTryを分析して今期間のKeepとProblemに振り分ける。

前回のTryを実際に試してみた結果をKeep/Problem/Tryに分解します。
Tryがうまくいったのであれば継続するのでKeep、
うまくいかなかったのであればそれを分析してProblem、
実施できなかったのであればTry、もしくは実施できなかった理由がProblem
として分解されます。

# 3.ProblemとTryに関連が無い。
## 起こってしまう事象
ProblemとTryを列挙することに終始してしまい、
ProblemとTryの間の関連が無い状態になってしまう。
結果として、Problemに対して対応策となるTryが無い、
もしくはTryの原因となるProblemが無い
という状況になります。

## 改善策
ProblemとTryに番号を振って紐づけましょう。

どのProblemからどのTryが発生したのかがわかるようにすることが重要です。

# 4.Keepに実績を書いてしまっている
## 起こってしまう事象
表題の通り。
Keepは次期以降も継続する施策なので実績は含まれません。
実績をKeepに挙げても次期以降で参考にならないので、やった気になれますが役に立ちません。

## 改善策
実績をあげられた原因を分析する

例えば
「いつもスケジュールが遅延するが、今回はスケジュール通りに行うことができた」
が実績としてあるのであれば、
「XXという見積もり方法を取り入れることでうまくいった」
のような原因があるはずです。(ないのであればKeepにはあげられません)
この場合、「XXを次回以降も実践する」がKeepとなります。

# まとめ
KPTは基本的に起こった事象を深堀して次の期間のプロセスを改善するためのツールです。
今期間のProblemからTryを見つけ、それを次の期間でKeepするのかさらに別のTryをするのかを分析します。
Keep/Problem/Tryの間の関連がわからなくなったら大体失敗なので、
それぞれがつながっていることを意識して分析するといいと思います。
WEBフロントエンド開発にHaxeつかってたけどElmに乗り換えてもいいかなって思った話

これは[市ヶ谷Geek★Night「型のあるフロントエンドの世界〜フロントエンド・フロンティア〜」](http://ichigayageek.connpass.com/event/43149/?utm_campaign=event_reminder&utm_source=notifications&utm_medium=email&utm_content=title_link)でのLTで発表内容です。

---

これはElm使ってみたら良かったよというお話です。

<div class="alert alert-warning"><i class="fa fa-warning"></i>この発表のタイトルにHaxeが含まれていますが、”型のあるフロントエンドの世界”という当勉強会のタイトルにちなんで付けているだけで、Haxeに対する不満は殆ど出てきません。<br><br>あらかじめご容赦下さいm(__)m</div>

---

## まぁ、でもHaxeという名前も出したのでHaxeについてもちょっとご紹介しておきましょう。

---

## Haxe使ってた理由

* DeadCodeEliminationでコンパイル後のコードが必要なコードだけになる！
* 標準ライブラリがそこそこ豊富（フロントエンドのJavascriptと比較して）
* 構造的部分型便利！
* コンパイル時にAssetをコードに埋め込める機能
* コンパイル早い
* 何か言語機能が欲しくなった時のマクロ

---

## Haxeやめようかなって思った理由

---

<div class="alert alert-danger text-center">
＿人人人人人人人人人人人人人人人人人人人＿<br>
＞　FlashDevelopがWindowsでしか使えない　＜<br>
￣Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y￣
</div>

---

Haxeの弱点はエディタが少ないことにあるのは既知の事実かと思いますが、これまで愛用していたIDEAのHaxeプラグインの更新が止まってしまい、Macから利用できるまともなIDEがなくなってしまいました…

---

![スクリーンショット 2016-11-04 13.05.44.png](https://qiita-image-store.s3.amazonaws.com/0/28406/bf7159d7-4f52-d5bb-c86d-5d36e978e76d.png)

最後に更新されたのが、約1年前…
その間にIDEAの最新バージョンが上がり利用出来なくなってしまいました…

---

そんな失意の中、ある噂を耳にします。

---

## Elm、FRPやめるってよ

---

## Elmって何？

* AltJSの一種
* Haskell由来のシンタックス
* ElmArchitectureという概念でアプリケーションを構築する

---

## Elmへの最初の印象

* ミニマムであり、シンプルな言語仕様というコンセプトは大変興味深かった
* ElmArchitectureという概念が昨今のフロントエンドライブラリ／フレームワーク戦争から一線を外れている（言語がArchitectureを持っている）ことに好感が持てた
* でも、Signalという概念を用いてFRPだというあたりで、ちょっと仰々しいなと思って敬遠…

---

## 最新のElm

* Signalを撤廃しました
* ClosureCompiler対応
* RequireJS、CommonJS対応

Signalを撤廃したことで、ElmArchitectureが非常にシンプルなものになり、また、ClosureCompilerやRequireJS、CommonJSへ対応することで実用性も大分高まってきました。

---

家庭をもってしまって学習時間を無限にとれるわけでもないエンジニアにとって、これから習得する技術がシンプルであることは非常に重要です。

Elmは学習する点に於いて次のようなメリットがあります。

---

* 言語仕様がシンプルなので、習得までの時間がそこまで必要ない（主観だけどES6覚えるより楽）
* Elmには仮想DOMのモジュールがパッケージとして提供されているので、Js界隈にある仮想DOMライブラリ戦争を気にしなくても良い
* ElmArchitectureを学んでおけばいいので、プロジェクトによってArchitectureを提供するフーレームワークを学習する必要はない

---

## Elmいいかもと思った方は早速試した見よう

http://elm-lang.org/try

---

## おわり
Markdown コードブロック中にバッククオート3つを表示したい

## 経緯

マークダウンの説明を Qiita に投稿したく、コードブロック中にバッククオートを3つ表示させたかったのですが、少し手間取ってしまいました。

普段コードブロックを記載する場合はバッククオート3つで慣れているのですが、これではコードブロック中にバッククオート3つ ```` ``` ```` を挿入することができません。

    ```
    ``` <- これと、
    Hello, world
    ``` <- これを表示したい
    ```

インライン中のバッククオートは **n+1のバッククオートで囲めばよい** と、すぐに検索にもかかるのですが、コードブロック中のバッククオート3つはどのように記載すればよいのでしょうか。
参考: [Markdown記法 チートシート \- Qiita > Code - コードの挿入](http://qiita.com/Qiita/items/c686397e4a0f4f11683d#code---%E3%82%B3%E3%83%BC%E3%83%89%E3%81%AE%E6%8C%BF%E5%85%A5)

## 結果

そこでMarkdownの原文『[Daring Fireball: Markdown Syntax Documentation]([Daring Fireball: Markdown Syntax Documentation](https://daringfireball.net/projects/markdown/syntax))』の**CODE BLOCKS**の項目を確認すると、コードブロックは **それぞれの行を少なくとも4つのスペースか1つのタブでインデントしてね** と記載されています。

> To produce a code block in Markdown, simply indent every line of the block by at least 4 spaces or 1 tab. For example, given this input:

そこで、以下のように先頭に4つのスペースを挿入すると、コードブロック中にバッククオート3つを挿入することができました。

        ```
        Hello, world
        ```

## おわりに

先ほど紹介したMarkdownの原文では、**CODE BLOCKS**の項目に

> Markdown wraps a code block in both &lt;pre> and &lt;code> tags.

ともありました。
これは、


        ```
        Hello, world
        ```

と入力すると、

```html
<pre><code>Hello, world</code></pre>
```

のようにマークアップされるのが適切な処理です。

マークアップされたHTMLを Qiita / esa.io / DocBase / GitHub で確認してみると、Qiita だけ `<code>` で囲まれずに

```html
<pre>Hello, world</pre>
```

となっていましたが、何か意図があるのでしょうか。
Qiita だけ tab キーがインデントではなく、focus 移動なのも少々使いづらいですね。

こちらからは以上です。
Rails controller で早期で綺麗にreturnする方法

コントローラーを使い込んできたときに使える。早期で綺麗にreturnする方法です。
メイン処理に影響を与えないパターンでGuard Clauseとか呼ばれている。

##まず通常
早期リターンを使いこなすだけでも、本筋の処理が見えてわかりやすい。
このままでもいいけどね。

```Ruby
def add_friend

if @friend.has_no_money?
  redirect_to "/"
  return
end

@friend.welcome

end

```

##テクニック１
後置ifと and で繋げる。無理な要求してたときに乱暴に返したいときに使える。

```Ruby
def add_friend
redirect_to "/" and return if @friend.has_no_money?

@friend.welcome
end
```


##テクニック２
丁寧に返すとメッセージ文だけで増えてくるので、
早期リターンをメソッドに分けるのだ。
これがお気に入り。(trueを返すのが気になるけど)

```Ruby
def add_friend
skip_no_money and return

@friend.welcome
end

private
def skip_no_money
  if @friend.no_money?
    redirect_to "/", notice: 'Sorry, You are not acceptable.'
    return true 
  end
end

```

##テクニック３
あとは、アクション前に拾ってしまう。
```
before_action :skip_no_money, only: [:add_friend]
```

参考
http://qiita.com/wadako111/items/54c3dcf6c5fc03b04678
http://blog.arkency.com/2014/07/4-ways-to-early-return-from-a-rails-controller/
Rubyの引数を、改めて考え直す。

#スコープが異なると、変数を利用できない
関数を定義しても、スコープが違う変数を利用することができない。

異なるスコープの変数を利用するためには、引数を使う必要がある。その仕組をまとめておこうと思う。

サンプルとして、「好きなラーメン屋を出力する」というプログラムを書く。

```
def favoriteLamenShop(name)
  puts "#{name}が大好き。"
end

favoriteLamenShop("二郎")
```
→出力は 「二郎が大好き。」となる。

#プログラムの流れ
1. 関数の宣言部分はまずスルーされるため、初めに読まれるのはfavoriteLamenShop("二郎")の部分。
2. すると、"二郎"という引数が、宣言したfavoriteLamenShopの引数（name）で読み込まれる。
3. 引数nameに入った「二郎」は、「puts "#{name}が大好き。"」のところで、nameに入れられる。
4. 結果、「二郎が大好き」が出力される。

#本引数と仮引数の名前は異なっても構わない。
関数を読み出す時の引数を本引数、関数を宣言するときの引数を仮引数と言う。
これらの名前が異なっても問題はない。

今度は、好きなラーメン屋をユーザーに入力してもらう、というプログラムを書いてみる。

```
def favoriteLamenShop(name)
  puts "#{name}が大好き"
end

input = gets.to_s
favoriteLamenShop(input)
```

本引数はname, 仮引数はinputとなっており、名称が異なる。
だが問題なくプログラムは、ユーザーが入力した値を関数の結果として返す。

例えば「天下一品」と入力すれば、「天下一品が大好き」と出される。

注意点としては、関数の宣言時に、関数内では引数の名前を同じにすることくらい。

以上。
RodCutterMemoized#maxProfitをリファクタリングする

「Javaによる関数型プログラミング」の「7.2.3 計算結果のメモ化」に再帰計算をメモ化によって高速化する話題が載っています。

元のソースコードは公式サイトにあります。

* https://media.pragprog.com/titles/vsjava8/code/recur/fpij/RodCutterMemoized.java
* https://media.pragprog.com/titles/vsjava8/code/recur/fpij/Memoizer.java

Memoizerクラスは、汎用っぽく作ってあるとはいえ、引数が一個限定だったりと、本当に必要なのかという疑問もあるのですが、今回はこちらの要不要については見送ります。

お題はRodCutterMemoizedクラスのmaxProfit()の方です。
元のコードは以下のようになっています。

```java
  public int maxProfit(final int rodLength) {
    BiFunction<Function<Integer, Integer>, Integer, Integer> compute =
      (func, length) -> {
        int profit = (length <= prices.size()) ? prices.get(length - 1) : 0;
        for(int i = 1; i < length; i++) {
          int priceWhenCut = func.apply(i) + func.apply(length - i);
          if(profit < priceWhenCut) profit = priceWhenCut;
        }
        return profit;
      };
    return callMemoized(compute, rodLength);
  }
```

読めない。。。
じゃぁリファクタリングするとどうなるかというと、こうなります。

```java
  public int maxProfit(final int rodLength) {
      return callMemoized(this::computeMaxProfit, rodLength);
  }

  private int computeMaxProfit(Function<Integer, Integer> func, final int length) {
      int profit = (length <= prices.size()) ? prices.get(length - 1) : 0;
      for(int i = 1; i < length; i++) {
          int priceWhenCut = func.apply(i) + func.apply(length - i);
          if(profit < priceWhenCut) profit = priceWhenCut;
      }
      return profit;
  }
```

はい、スッキリしました。
ここでの教訓は、「ラムダの中にたくさん書くな」です。沢山書くくらいなら、privateメソッドを作って、メソッド参照で渡しましょう。

ソースコードの内容については、本文で詳しく書かれていますが、簡単にいうと、computeMaxProfitの引数funcは、computeMaxProfit自身のラッパーになっています。直接計算するcomputeMaxProfitとちがって、funcは内部的に過去の計算結果をキャッシュしているので、func.apply(i)を呼んだ時は、キャッシュがあればキャッシュが返ってきます。キャッシュがない場合は、再びcomputeMaxProfitが呼ばれて再帰になります。
CentOS7+CUDA7

CentOS7にCUDAを挿入したので、手順残しておきます。

まず、NVIDIAのサイトに行き、CUDAのファイルをダウンロードします。
https://developer.nvidia.com/cuda-downloads

私はrunfileをダウンロードしました。以下に手順を書きます

```ruby:rootになりランレベルを下げます
init 3
```
ランレベルを下げてrootになります。
その後、先程ダウンロードしたrunfileのディレクトリに移動します。
その後ファイルを実行します。

```ruby:runfileの実行
sh runfile.run
```

あとは指示に従ってインストールします。
その後ランレベルを戻します。

```ruby:ランレベル5
init 5
```

今のままでバージョンを確認するとエラーが出てしまいます

```ruby:バージョン確認
nvcc -V
```

その後、pathを.bashrcにパスを書きます。
.bashrcは/home/名前/ にあります。
試しに ls -laを実行しファイルがあるか確認してみてください。

```ruby:.bashrc
export PATH=/usr/local/cuda-8.0/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-8.0/lib64:/lib:$LD_LIBRARY_PATH
```

記入したら以下を実行してください

```ruby:.bashrc
source .bashrc
```
バージョンの確認

```ruby:バージョン確認
nvcc -V
```
私の場合以下のコメントが出力されました

```ruby:バージョン確認
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2016 NVIDIA Corporation
Built on Sun_Sep__4_22:14:01_CDT_2016
Cuda compilation tools, release 8.0, V8.0.44
```

以上
Unity アフィリエイト プログラムについて調べてみた


## はじめに
2016/11/1に開催されたUNITE Los Angelesにて、Unity Asset Storeのアフィリエイトプログラムの提供が発表されました。まだ出回っている情報が少ないですが[FAQ](https://unity3d.com/jp/affiliates/faq "FAQ")の内容を中心にまとめてみました。


## 内容
* Unity Affiliate プログラムとは、管理しているブログやWebサイトやソーシャルメディア等経由でUnity Asset Storeのアセットの購入が成立した場合に報酬がが発生する仕組み
* アフィリエイトリンクのトラッキング期限はクリックから24時間
* Unity IDとアフィリエイトプログラムで使用するIDは別物
	* 別途アフィリエイト用のアカウントが必要
* 以下に該当するWebサイト/コンテンツはリジェクトされる可能性がある
	* Unityやその他サードパーティの商標を侵害している
	* 性的な表現を含む
	* 悪意、暴力、誹謗中傷を含む
	* 差別を助長する
	* 違法な活動を助長したり、そもそも違法である
	* UnityのWebサイトやAsset Storeから文章や画像を流用している
	* ユーザーにオンラインプライバシーポリシーを明示していない
	* 誤ってクリックさせるような手段を使っている
	* Unityの商標をドメインに含む
	* その他不適切な要素を含む
		* 何が不適切かはUnityの判断による
* Asset Storeパブリッシャーもアフィリエイトプログラムに参加できるが、アフィリエイトリンクをパブリッシャープロフィールやアセットの説明や一覧ページに含むことは禁止されている
* アフィリエイトプログラムへの参加は無料
	* 参加登録は[こちら](https://unity3d.com/affiliates/apply "こちら")から
	* 連絡先情報やプロモーション用のURLを入力すると5営業日以内に審査される
		* **私の場合は、申し込んだ翌日には審査が通過していた**
	* 審査結果はメールで連絡が来ます
* アフィリエイトリンクの作成方法は、参加申請承認時のメールにLink MakerのURLが記載されている
	* https://www.assetstore.unity3d.com/jp/#!/linkmaker/XXXXXXXX
		* XXXXXXXXの部分はAffiliate ID (aid) でアカウント毎に異なる
	* 任意のアセットを検索し「Create Link」をクリックするだけでアフィリエイトのリンクが作成できる
* アフィリエイト報酬は購入が発生してから最少支払い額を超えていた場合に90日後に支払われる
* 報酬率はユーザが購入したアセットが5ドル未満だったら2%、5ドル以上だったら5%


## 参考
[Unity Affiliate プログラム](https://unity3d.com/jp/affiliates "Unity Affiliate プログラム")
[よくある質問](https://unity3d.com/jp/affiliates/faq "よくある質問")
シェルって何なのって人たちへ＃003

#対象
環境問わず(winは仮想ね)、上司、先輩に「シェル勉強しなさい。」と脅された、または諭された人たち。（負けんな）

# なぜ修得しなければならないの？
「Linuxを勉強しましょう」ってこと

Linuxのいい記事を見つけました。
http://www.atmarkit.co.jp/ait/articles/1602/16/news016.html

bash
http://www.atmarkit.co.jp/ait/articles/0202/05/news001.html


次回はファイル関連の実例でも
#WK: Unable to acquire assertion for process 0

## 現象

SDWebImage と WKWebView を使ったアプリを iOS 10 上で動かして、画像をたくさん読み込むと以下のエラーが出て終了する。デバッガには落ちてくれない。

```
#WK: Unable to acquire assertion for process 0
```

メモリの問題かと思ったけど、didReceiveMemoryWarning は呼ばれない。

## 調査

エラーメッセージで検索したら次の2つが引っかかった。

- <a href="https://github.com/WebKit/webkit/blob/master/Source/WebKit2/UIProcess/ios/ProcessAssertionIOS.mm#L169">WebKit のソースコード</a>
- <a href="http://stackoverflow.com/questions/39831006/on-ios-10-gltf-webgl-app-crashes-application-is-build-using-wkwebview">Stackoverflow の質問</a>

WebKit のソースを読んでもよくわからない。BKSProcessAssertion とかいう内部クラスを使ってるし。でも、pid = 0 っておかしい気がする。
Stackoverflow の質問は、JavaScript と WebGL だから関係ない筈…。

## 対処

とりあえず SDImageCache の maxMemoryCountLimit を設定したら落ちなくなった。maxMemoryCost でもいいと思う。

```
SDImageCache.sharedImageCache().maxMemoryCountLimit = 100
```

## 
考察
 憶測

たぶん、iOS 10 では UIImage や WebKit が GPU をたくさん使うようになって、メインメモリではなく GPU のメモリを奪い合って落ちてるんだと思う。

## 追記

機種によっても症状は変わって、

- iPhone 5 ... メモリ警告が出て、問題なく動く (GPU 使ってない？)
- iPhone 5s, 6 ... 落ちる
- iPhone 7 ... 問題なし (GPU に余裕がある？)

だったりします。
Apache Flexでよく使うUIコンポーネントの使い方

# はじめに
個人的によく使うApache FlexのUIコンポーネントの使い方を簡単にまとめます。

# ラベル
![無題.png](https://qiita-image-store.s3.amazonaws.com/0/102121/18f0dfd0-4492-a5fe-5b56-de8e19f9760b.png)

```mxml:mxml
<s:Label text="普通のラベル" />
<s:Label text="赤色のラベル" color="#ff0000" />
```
text属性に設定した文字列が表示されます。
color属性を指定することで文字の色を変更できます。

# ボタン
![1.png](https://qiita-image-store.s3.amazonaws.com/0/102121/31a7b6ed-2c88-3a5d-aed5-10bd21aeaf06.png)

```mxml:mxml
<s:Button label="普通のボタン" height="30"/>

<s:Button label="青色のボタン" height="30" color="#ffffff" fontWeight="bold" chromeColor="#3355cc"/>
```
label属性に設定した文字列が表示されます。
高さはいつも30pxにすることが多いです。
青色のボタンもよく使います。

# テキストインプット
![2.png](https://qiita-image-store.s3.amazonaws.com/0/102121/891b12ac-5667-d5bd-6521-4f312c8c5374.png)

```mxml:mxml
<s:TextInput id="ti1" />
```
ActionScript側で```ti1.text```のようにアクセスすることで値の取得や設定ができます。

# テキストエリア
![2.png](https://qiita-image-store.s3.amazonaws.com/0/102121/1b3e6c8c-779a-6ffa-8cb5-c335d93ae98b.png)

```mxml:mxml
<s:TextArea id="ta1" />
```
テキストインプットと同様に、
ActionScript側で```ta1.text```のようにアクセスすることで値の取得や設定ができます。

# ラジオボタン
![無題.png](https://qiita-image-store.s3.amazonaws.com/0/102121/20435b1b-c272-7278-42c7-5caeff605450.png)

```mxml:mxml
<s:RadioButton id="rb1" label="あああ" groupName="group1" selected="true" />
<s:RadioButton id="rb2" label="いいい" groupName="group1" />
```
label属性に設定した文字列が表示されます。
ActionScript側で```rb1.selected```のようにアクセスすることでラジオボタンの選択状態を取得できます。
（ラジオボタンが選択されている場合は、trueになります）

# チェックボックス
![無題.png](https://qiita-image-store.s3.amazonaws.com/0/102121/4718d994-62bc-37e2-a76d-6d19b6cf63c0.png)

```mxml:mxml
<s:CheckBox id="cb1" label="あああ" />
```
label属性に設定した文字列が表示されます。
ActionScript側で```cb1.selected```のようにアクセスすることでチェックボックスの選択状態を取得できます。
（チェックボックスが選択されている場合は、trueになります）

# ドロップダウンリスト
![無題.png](https://qiita-image-store.s3.amazonaws.com/0/102121/797ca31e-d89f-9839-1768-68a07c6c7491.png)

```mxml:mxml
<s:DropDownList id="ddl1" labelField="value" dataProvider="{ac}" selectedIndex="0" />
```

```as3:ActionScript
import mx.collections.ArrayCollection;

[Bindable]
private var ac:ArrayCollection = new ArrayCollection(
    [{value: "あああ"}, {value: "いいい"}, {value: "ううう"}]
);
```
dataProvider属性でArrayCollectionのデータとバインディングして利用することが多いです。
labelField属性でArrayCollectionのデータのどのキーの値を表示に利用するかを指定します。
ActionScript側で```ddl1.selectedIndex```のようにアクセスすることでドロップダウンリストの選択状態を取得できます。

# データグリッド
![無題.png](https://qiita-image-store.s3.amazonaws.com/0/102121/fbde5967-7fd5-cb86-2cd4-f8cae0f14a0a.png)

```mxml:mxml
<s:DataGrid dataProvider="{ac2}" >
    <s:columns>
        <s:ArrayList>
            <s:GridColumn headerText="列１" dataField="c1" />
            <s:GridColumn headerText="列２" dataField="c2" />
        </s:ArrayList>
    </s:columns>
</s:DataGrid>
```
```as3:ActionScript
import mx.collections.ArrayCollection;

[Bindable]
private var ac2:ArrayCollection = new ArrayCollection(
    [{c1: 100, c2: "aaa"}, {c1: 200, c2: "bbb"}, {c1: 300, c2: "ccc"}]
);
```
dataProvider属性でArrayCollectionのデータとバインディングして利用することが多いです。
CGRectZeroがSwift3.0での変更された点


##Swift2.3以下

今まではCGRectZeroだけでよかった

CGRectZero -> CGRect.zeroに

###コード

```
let cell: UIView = UIView(frame: CGRectZero)
```


##Swift3.0以上

###コード
Swift3.0からはCGRect.zeroに


```
let cell: UIView = UIView(frame: CGRect.zero)
```
activerecord-import

http://qiita.com/xend/items/79184ded56158ea1b97a

```bash
[bomb@bombnet data]$ rg -F ".create([" rails
rails/railties/lib/rails/generators/rails/app/templates/db/seeds.rb.tt
6:#   cities = City.create([{ <%= key_value :name, "'Chicago'" %> }, { <%= key_value :name, "'Copenhagen'" %> }])

rails/railties/guides/code/getting_started/db/seeds.rb
6:#   cities = City.create([{ name: 'Chicago' }, { name: 'Copenhagen' }])

rails/activerecord/lib/active_record/persistence.rb
29:      #   User.create([{ :first_name => 'Jamie' }, { :first_name => 'Jeremy' }])
37:      #   User.create([{ :first_name => 'Jamie' }, { :first_name => 'Jeremy' }]) do |u|

rails/activerecord/test/cases/persistence_test.rb
200:    topics = Topic.create([ { "title" => "first" }, { "title" => "second" }])
224:    topics = Topic.create([ { "title" => "first" }, { "title" => "second" }]) do |t|

rails/activerecord/test/cases/associations/has_many_associations_test.rb
788:    companies(:first_firm).clients_of_firm.create([{"name" => "Another Client"}, {"name" => "Another Client II"}])
```
XCode上のFix it Replaceやattentionへのショートカット


以下の画像のようなやつ
![スクリーンショット 2016-11-04 17.46.55.png](https://qiita-image-store.s3.amazonaws.com/0/64331/c4ed0e8d-8e74-34f0-5607-4b3fe3f65eaa.png "スクリーンショット 2016-11-04 17.46.55.png")

これが大量にある場合ショートカットを知らないときつい！
そしていつも忘れる！！

次に移動

```
Ctrl+Cmd+'
```

前に移動

```
Ctrl+ Cmd+"
```
RailsじゃないRuby+RSpec環境をDockerでつくる

# はじめに

RailsではないRuby環境を作る機会があったため残しておく。

# 前提環境

vagrant 上の Ubuntu 15.10 をホストOSにして開発します。
本エントリーは以下の環境が構築されている前提で記載します。

- 物理マシンOS
    - Windows 10
- 仮想マシンOS
    - Ubuntu 15.10 <- ここにdockerをインストール

# Dockerfile 作成

イメージは公式のrubyイメージを利用しました。
`/tmp` で `bundle install` しているのはビルドの度に `bundle install` しないためのハックです。

```:Dockerfile
FROM ruby:2.3.1
ENV LANG C.UTF-8
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev
RUN gem install bundler
WORKDIR /tmp
ADD Gemfile Gemfile
ADD Gemfile.lock Gemfile.lock
RUN bundle install
ENV APP_HOME /myapp
RUN mkdir -p $APP_HOME
WORKDIR $APP_HOME
ADD . $APP_HOME
```

# docker-compose.yml 作成

docker コマンドをシンプルにしたいため `docker-compose` を利用します。

```yml:docker-compose.yml
version: "2"
services:
  app:
    build: .
    volumes:
      - .:/myapp
```


# Gemfile 作成

`Gemfile` と `Gemfile.lock` を作成します。
`Gemfile.lock` は空のままで良いです。

```:Gemfile
source "https://rubygems.org"

gem "rspec"
```

# bundle install

`docker-compose build` では `Gemfile.lock` が更新されなかったため、コンテナにログインして `bundle install` します。

コンテナにログイン。

```
$ docker-compose run app bash
```

`bundle install` 実行

```
# bundle install
```

# RSpec 実行

以上で RSpec 環境ができました。
必要なファイルを作成し以下のコマンドで RSpec を実行できます。

```
$ docker-compose run app rspec -fd xxx_spec.rb
```
[Swift] Alamofire + Unbox + Realm が無かったので作ってみました。

## 作ろうと思った背景
私はいつもAPIなどで取得したJSONを変換するときに [Unbox](https://github.com/JohnSundell/Unbox) にお世話になっています。
毎回毎回トランスファーなど作らなくても良いようにしたかったのでとりあえず作ってみました。

## いつも利用しているライブラリ
Networking : [Alamofire](https://github.com/Alamofire/Alamofire)
Decoder : [Unbox](https://github.com/JohnSundell/Unbox)
Database : [Realm](https://realm.io/)


## インスパイアー
[UnboxedAlamofire](https://github.com/serejahh/UnboxedAlamofire)
[Alamofire](https://github.com/Alamofire/Alamofire)から[Unbox](https://github.com/JohnSundell/Unbox)に変換を楽にするのはすでに作ってくれている人がいた！！

## 今回作ったライブラリ
[CustomUnboxedAlamofire](https://github.com/KITSUKI-INC/CustomUnboxedAlamofire)

名前の通り、Realm だけのためではなく、[Unbox](https://github.com/JohnSundell/Unbox) からCustomObjectに変換できるようになっています。
どんな値にも受け渡せるのでちょっと便利かも？

## サンプルコード
### Model
``` swift
class Candy: Object, CustomUnboxed {

    dynamic var name: String = ""
    dynamic var sweetnessLevel: Int = 0

    static func custom(unboxer: Unboxer) throws -> CustomUnboxed {
        let candy: Candy = Candy()
        candy.name = try unboxer.unbox(key: "name")
        candy.sweetnessLevel = try unboxer.unbox(key: "sweetness_level")
        return candy
    }
}
```

### Logic
``` swift
let url = "https://raw.githubusercontent.com/serejahh/UnboxedAlamofire/890674cdfdcf2424f2c45ff5f4af455ccfaf7617/UnboxedAlamofireTests/fixtures/test_object.json"
        
Alamofire.request(url).responseObject { (response: DataResponse<Candy>) in
    if let candy: Candy = response.result.value {
        debugPrint(candy)
    }
}
```

それっぽく動いているみたいですが、もし何かあれば [CustomUnboxedAlamofire](https://github.com/KITSUKI-INC/CustomUnboxedAlamofire) こちらでご報告ください。
対応できそうでしたら対応します。

## 気にしちゃいけないこと
[Realm Docs Json](https://realm.io/docs/swift/latest/#json)
Json to Realm ができるみたいなのですが。。。
個人的には今回の方が Realm だけではなく他のものにも変換できるので好きかもですw
【SDWebImage】UITableViewCellやUICollectionViewCell内の画像をフェードインで表示する

単純に cellForRowAtIndexPath や willDisplayCell 内で画像のフェードイン処理を書いただけではcellが読み込まれるたびにフェードイン処理が走ってしまう。

↓

SDWebImageは表示した画像をキャッシュしてくれるので、
画像を表示する際、キャッシュ以外（ネットワーク）から取得した場合のみフェードインするようにすれば良い。

```
imageView.sd_setImageWithURL($0, placeholderImage: UIImage(named: "placeholderImage"), options: .CacheMemoryOnly, completed: { (image, error, type, url) in
    if type == .None {
        // キャッシュ以外から画像を取得した場合はフェードインで画像を表示
        self.imageView.alpha = 0
        UIView.animateWithDuration(0.5, animations: {
             self.imageView.alpha = 1
        })
     }
})
```
Pepper ハッカソンに役に立ちそうな ボックスを 4つ

Pepper を使ったハッカソンに役に立ちそうなChoregraphe のボックスを４つ公開しました。
お役に立てれば幸いです。

ボックスは https://github.com/takujikawata/webapiboxlibrary で公開しています。

（2017/4/30 NAOqi2.5.5 でも動くように一部ボックスライブラリを変更しました）

# ボックスライブラリを Choregraphe に取り込む

ここではサンプルボックスをボックスライブラリという形態で公開しています。ボックスライブラリの読み込み方は次を参考にしてください。

http://qiita.com/Atelier-Akihabara/items/db907ed319b8af0984db#%E3%83%9C%E3%83%83%E3%82%AF%E3%82%B9%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA%E3%81%AE%E8%AA%AD%E3%81%BF%E8%BE%BC%E3%81%BF

# サンプルボックスの説明

４つのサンプルボックスの概要を説明します

## Simple HTTP request ボックス
HTTP リクエストを発行するボックス。結果はボックスの出力 onStopped に出力されます。リクエスト URL はプロパティーで設定

接続例： http://mysrv.com/ にアクセス、内容を Pepper が喋る
<img width="353" alt="変数をSimple_HTTP_requestに設定_と_Untitled_-_Choregraphe.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/81650/a776f50c-245d-12c9-0812-914d39c0ed3c.jpeg">

## Upload file ボックス
HTTP リクエストを発行し、プロパティーで指定されたファイルをリクエスト URL に送るボックス。 サーバーからのレスポンスはボックスの出力 output に出力されます。

接続例： http://srv/image にプロジェクト内にあるファイル image.jpg を送る。サーバーからのレスポンスを Pepper が喋る
<img width="343" alt="変数をUpload_fileに設定_と_Untitled_-_Choregraphe.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/81650/31e058aa-2ebc-431e-3a05-c713f210e3ad.jpeg">

## Download File ボックス
HTTP リクエストを発行し、サーバーからのレスポンスを、プロパティーで指定されたファイルに保存するボックス。保存されたファイルのパスはボックスの onStopped 出力に出力されます。

接続例： http://mysrv/voice にアクセス。結果を voice.wav というファイルに保存。Play Sound File ボックスで再生

<img width="331" alt="変数をDownload_Fileに設定_と_Untitled_-_Choregraphe.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/81650/3817718e-d2a0-1f7d-4059-d48eeaafc650.jpeg">

## WebSocket ボックス
WebSocket 接続を行うボックス。プロパティー Server URI に接続先の URI を ws:// の形式で設定します。 onStart 入力呼び出しによりサーバーとの接続が確立されます。 sendMessage 入力に文字列を送ることで、サーバーにメッセージを送信、onMessage 出力はサーバーからのメッセージを出力します。

接続例： ws://wssev/ws に WebSocket 接続。Speech Reco ボックスが音声認識した内容を サーバーに送る、またサーバーからのメッセージを発話する

<img width="435" alt="変数をWebSocketに設定_と_Untitled_-_Choregraphe2.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/81650/e3833b61-130e-3c9a-d92a-b00fc3bdfec4.jpeg">

#ボックスを自身のプロジェクトで利用するための準備作業

Simple HTTP request、Upload file、Download File ボックスはそれぞれ requests モジュールを使っています。 requests モジュールは Pepper 本体にはインストールされていますが、バーチャルロボットにはインストールされていません。
バーチャルロボットでもこれらボックスを利用できるようにするためには、開発中の Choregraphe プロジェクトのディレクトリに移動し、次のコメンドを実行します。

```
virtualenv env
./env/bin/pip install requests --target lib --no-compile
```

WebSocketボックスは websocket-client モジュールを使っています。 WebSocket ボックスを扱うアプリはChoregraphe プロジェクトのディレクトリに移動し、次のコメンドを実行、必要なモジュールをプロジェクト内に読み込みます。

```
virtualenv env
./env/bin/pip install websocket-client --target lib --no-compile
```

**上記作業が終わったら、env というフォルダと lib というフォルダーが作られているかと思います。このうち env フォルダーは プロジェクトには必要のないファイルなので、上記準備作業終了後削除しておいてください。(この配下のファイルが大きいのでChoregrapheをこのフォルダを残したまま開くとファイル読み込みで Choregraphe が固まってしまいます、、)**　

例：
```
rm -r env
```

#最後に

ハッカソンなどでの開発に役に立ちそうなボックスを紹介しました。プロトタイピング開発などに役に立てば幸いです。
Unityでwarningがあったらjenkinsでエラー通知する

# warningをエラー扱いにする

以下のようにビルド前にAssetsフォルダ下に warnerror+ な .rsp ファイルを置いておく

```sh
echo "-warnaserror+" > $WORKSPACE/Assets/gmcs.rsp
echo "-warnaserror+" > $WORKSPACE/Assets/smcs.rsp
```

![jenkins_unity.png](https://qiita-image-store.s3.amazonaws.com/0/15038/85e4f13f-edd5-04fb-a041-ea6acef17786.png)


## .rsp ファイルについてはこちら
https://docs.unity3d.com/ja/current/Manual/PlatformDependentCompilation.html

# 参考
http://qiita.com/kyubuns/items/9c1059bf38f864bd63fa
http://qiita.com/kyubuns/items/cf6e410c21c1d9a0ef18
Lumen MiddlewareからControllerにパラメータを渡す方法

元々パラメータをsessionに保存してControllerに使うつもりで、最初に考えた方法は

* bootstrap/app.php に記述
* ServiceProvider読み込みにフック
* 設定ファイルの読み込み
* エイリアスの登録
* ミドルウェアに登録

ですが、うまく行きませんでした。

もっと簡単な方法でrequestに追加します。

```
$request->attributes->add(['user' => $user]);
return $next($request);
```

Controller側受け取る方法

```
use Illuminate\Http\Request;

public function index(Request $request)
{
    $user = $request->get('user');
}
```

Middlewareのサンプルソース

```
<?php

namespace App\Http\Middleware;

use Closure;
use App\Models\Entities\User;

class BeforeMiddleware
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        $user['user_agent'] = $_SERVER['HTTP_USER_AGENT'];
        $user['ip'] = $_SERVER['REMOTE_ADDR'];
        $user['referer'] = $_SERVER['HTTP_REFERER'] ?? '';

        $userObj = new User();
        $userObj->setProperties($user);
        $request->attributes->add(['user' => $userObj]);

        return $next($request);
    }
}
```

それで解決。
Laravelマイクロフレームワーク Lumen 5.3 ガイド

Lumen5.2からAPIサービスやJSON APIサービスの構築を中心になるため、sessionやviewはフレームワークに含まれてないです。
Lumenのドキュメントは[こちら](https://lumen.laravel.com/docs/5.3)

# Lumenの概要
LumenはLaravelのコンポーネントを使用したマイクロフレームワークで、フルスタックのWebフレームワークSymfonyに対するSilexの位置付けと同じです。Lumenは高速化のために生まれて、同じくマイクロフレームワーク[silex](http://silex-users-jp.phper.jp)より早くて、現在最速のPHPフレームワークの一つです。

# Lumenはいつ使うべきか
・大量のトラフィックを捌く必要のあるもの
・APIサーバー


# インストール
composerを使って、下記のコマンドでインストールできます。

```
composer global require "laravel/lumen-installer"
```
# ルーティング
ルートはroutes/web.phpに書きます。
書き方は幾つかあります。

```
・パラメータがある場合
$app->get('/hello/{uid}/{pass}', 'HelloController@index');

・Route Groupsで使う場合
$app->group(['namespace' => 'App\Http\Controllers'], function($group){
    $group->get('hello/{uid}/{pass}', 'HelloController@index');
});
・パラメータのバリデーションチェック
$app->get('/hello/{uid:[0-9]+}/{pass:[0-9]+}', 'HelloController@index');
```
# Middleware
middlewareファイルはapp/Http/Middlewareに格納します。

・ルートに登録する方法

```
$app->get(
    '/hello/{uid}/{pass}',
    [
       'middleware' => 'before',
       'uses' => 'HelloController@index'
    ]
);
```
・ bootstrap/app.phpに登録な方法

```
$app->routeMiddleware([
    'before' => App\Http\Middleware\BeforeMiddleware::class,
]);
```

# MiddlewareからControllerにパラメータを渡す方法
簡単な方法でrequestに追加します。

```
$request->attributes->add(['user' => $user]);
return $next($request);
```

Controller側受け取る方法

```
use Illuminate\Http\Request;

public function index(Request $request)
{
    $user = $request->get('user');
}
```

# phpUnit テストの使い方
Lumenをインストールすると、デフォルトでphpunit.xmlが設置されています。

```
<?xml version="1.0" encoding="UTF-8"?>
<phpunit backupGlobals="false"
         backupStaticAttributes="false"
         bootstrap="bootstrap/app.php"
         colors="true"
         convertErrorsToExceptions="true"
         convertNoticesToExceptions="true"
         convertWarningsToExceptions="true"
         processIsolation="false"
         stopOnFailure="false"
         syntaxCheck="false">
    <testsuites>
        <testsuite name="Application Test Suite">
            <directory suffix="Test.php">./tests</directory>
        </testsuite>
    </testsuites>
    <filter>
        <whitelist processUncoveredFilesFromWhitelist="true">
            <directory suffix=".php">./app</directory>
            <exclude>
                <file>./app/Http/routes.php</file>
            </exclude>
        </whitelist>
    </filter>
    <php>
        <env name="APP_ENV" value="testing"/>
        <env name="CACHE_DRIVER" value="array"/>
    </php>
</phpunit>
```

## テストの場所
デフォルトの状態では、tests/配下を対象として実行されます。
任意のディレクトリに変更する場合は<directory suffix="Test.php">./tests</directory>から忘れずに変更してください。

サンプルで用意されているtests/ExampleTest.phpを実行してみましょう。

Lumenプロジェクトのディレクトリで、実行します。
composerでphpunitを導入した場合は、./vendor/bin/phpunitを指定して実行します。

```
$ ./vendor/bin/phpunit tests/ExampleTest.php
```

ファイルを指定して実行する場合は上記の様になります。
全てテストする場合は、

```
$ ./vendor/bin/phpunit
```
としてください。
ローカルで実行するansible-vaultのdecryptとencryptで楽をする

ホームディレクトリに.vault_passwordとかのファイルを作成し、ansible-vaultのパスワードを入力する。

次に、以下のエイリアスを.bashrcあたりに追加し、bashを再読み込みする。

```:.bashrc
alias encrypt='ansible-vault encrypt --vault-password-file ~/.vault_password'
alias decrypt='ansible-vault decrypt --vault-password-file ~/.vault_password'
```

後は暗号化・復号対象ファイルを以下のように指定すると、パスワード入力無しで実行できる。

```
暗号化
encrypt repositories/sample/naisho.config

復号
decrypt repositories/sample/naisho.config
```
CakePHP3 備忘録 | debug_kitのSQLiteがコケる

# debug_kitのSQLiteがコケる

Win10+vagrant+winnfsdの固有の問題かもしれない。
SQLiteがクラッシュしてDisk/IOエラーが出る…。

```
SQLSTATE[HY000]: General error: 10 disk I/O error
```

エラーはアプリケーション本体ではなく**debug_kit**が問題。
下記画像でSQLiteが怪しいことがわかる。

![192.168.11.26-2016-11-04-20-03-52.png](https://qiita-image-store.s3.amazonaws.com/0/41812/dd817bc8-3955-87ed-6d6d-56b8ec4de02c.png)

`tmp/debug_kit.sqlite`を削除すると戻るのだがすぐ再発。
その場合には、**[ここ](http://book.cakephp.org/3.0/ja/debug-kit.html)**にあるようにストレージにmysql等を利用すれば良い。

分かるとは思うが、キー```'Datasources'```の配下に設置。

```
/**
 * The debug_kit connection stores DebugKit meta-data.
 */
'debug_kit' => [
    'className' => 'Cake\Database\Connection',
    'driver' => 'Cake\Database\Driver\Mysql',
    'persistent' => false,
    'host' => 'localhost',
    //'port' => 'nonstandard_port_number',
    'username' => 'dbusername',    // Your DB username here
    'password' => 'dbpassword',    // Your DB password here
    'database' => 'debug_kit',
    'encoding' => 'utf8',
    'timezone' => 'UTC',
    'cacheMetadata' => true,
    'quoteIdentifiers' => false,
    //'init' => ['SET GLOBAL innodb_stats_on_metadata = 0'],
],
```

「テーブルは？」と思ったがSQLiteのときもdebug_kitが勝手に作っているはずなので、そのまま確認。本来的にはちゃんとドキュメントなどを確認したほうが良いのだと思う。
予想どおりテーブルはdebug_kitが作成してくれた。
Google Chromeでbox-shadowが出たり出なかったりする

box-shadowがchromeでレンダリングされないという事象。（chrome以外では安定して表示されている）

```
box-shadow: 0 1px 3px rgba(0,0,0,0.25)
```

と指定していて、表示されない。
出たり出なかったりする、というのは、 **スーパーリロードすると出ることがある** ということ。

ちなみにレンダリングされていないときにデベロッパーツールでbox-shadowをon/offさせても効果はありません。

ググってもなかなか情報が出てこなくて、試行錯誤したんですが

```
box-shadow: 0 1px 3px 1px rgba(0,0,0,0.13);
```

というように第4引数のspread?を指定すると安定して表示されるようになりました。
（アルファの0.25を0.13にしているのはspreadを指定したために影が濃くなったので薄くしたという感じです）

chromeのバグだと思うんですが、謎です。



## background-image が悪さしてる？

box-shadowとbackground-imageのあわせ技が問題あるという声も（未確認）
MacでWiFiの電波状況をすぐに調べられるようにする

# はじめに
Macに標準でインストールされている「ワイヤレス診断」アプリを使うと, WiFiの電波状況を調べることができる.

ただし, 起動時の画面が邪魔だったり, アプリの場所がよくわからなかったりでいまいち不便.
すぐに起動できるアプリをAppleScriptで作ってみた.

# 実際の動作
![demo_wifiscan-starter.gif](https://qiita-image-store.s3.amazonaws.com/0/135313/1f631e0b-903b-0ebf-6ed0-d7eb02ae80f7.gif)

# 使い方
1. 下のリンクからzipファイルをダウンロード & 解凍.
2. **WiFiScan Starter.app**を起動.

<https://github.com/icchi-h/WiFiScan-Starter/releases>

# 詳細
<http://blog.icchi.me/mac-wifi-scan-starter>
C言語で乱数を生成

# rand関数
C言語で乱数を生成したい、そんな時は乱数を返すrand関数を使用します。
乱数を生成するためには元となる種が必要になります。

種が同じ値だと出力される値が同じになってしまい、乱数になりません。
そこで現在時刻を種として使用し、プログラムが起動したタイミングで種の値が変わるようにします。

種を設定するにはsrand関数を使用するのですが、先に現在時刻を返すtime関数を見てみましょう。

# time関数
現在時刻を出力するために、time関数を用います。

## time関数のプロトタイプ宣言
time関数のプロトタイプの宣言は以下のようになっています。

```C
time_t time(time_t *time);
```

プロトタイプの宣言の仕方は、`返り値の型 関数名(引数の型);`です。
今回の場合は`time_t`が返り値の型、`time`が関数名、`time_t *time`が引数の型を指しています。

`time_t *time`での`*`はポインタ変数を使いますよ、という宣言をしているだけなので、ポインタの中身を出す`*`とは異なります。

関数を利用するときは`time(引数)`と記述し、引数には`time_t型のポインタ`を渡すか`NULL`を指定します。
返り値は1970年1月1日0時0分0秒（UTC）からの経過秒数です。

## 引数 time_t型のポインタとNULLの違い
``` C
time_t m;
time(&m);
```
``` C
time(NULL);
```
どちらのやり方でも返り値は同じ値が返ってきますが、
time_t型のポインタを渡す場合には、引数のアドレスにも返り値の値が格納されます。

# 乱数の生成
これらを組み合わせて、以下のように書いたりします。

``` C
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main {
 srand((unsigned int) time(NULL)); //現在時刻を元に種を生成
 int price = (rand()%3+1) * 100; //100、200、300の何れかを返す
}
```
rand関数を使用するには`stdlib.h`、time関数を使用するには、`time.h`を読み込む必要があるので、最初にincludeします。

srand関数で生成した種を元に、rand関数は乱数（0~RAND_MAX）を返しますが、`%`演算子を使えば、乱数の値を制限できます。

`%3`することで0~2が返ってくるので、`1`を足して`100`を掛けると、100、200、300の何れかを返すようになります。


#参考

[C言語入門 - 関数のプロトタイプ宣言](http://webkaru.net/clang/function-declaration-prototypes/)
[時間情報の取得 time() - 時間の扱い - 碧色工房](http://www.mm2d.net/main/prog/c/time-01.html)
[C言語逆引きハンドブック](https://www.amazon.co.jp/C%E8%A8%80%E8%AA%9E%E9%80%86%E5%BC%95%E3%81%8D%E3%83%8F%E3%83%B3%E3%83%89%E3%83%96%E3%83%83%E3%82%AF-%E6%9E%97-%E6%99%83/dp/4863540922/ref=sr_1_2?ie=UTF8&qid=1478254301&sr=8-2&keywords=C%E8%A8%80%E8%AA%9E+%E9%80%86%E5%BC%95%E3%81%8D)
allowBackupの設定は適切ですか？

AndroidStudioで新しいプロジェクトを作成した時、AndroidManifestにデフォルトで記載されるあの記述 `android:allowBackup="true"` この設定実は危険なんです。
皆さんのアプリでは適切に設定されていますか？

```xml
<application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
...
```

### Android Mからどうやら問題が発生しそう
allowBackupの設定自体はAndroid 2.2の時から存在していましたが、バックアップの方法が明示的には示されていませんでした。
しかし、Android Mからは`Auto Backup for Apps`と機能が導入され、自動的にバックアップがGoogleDriveにとられるようになりました。

[Auto Backup for Appsについて](
http://tiro105.hateblo.jp/entry/2015/10/23/204154)によると
> GCMのregistration idとかは端末ごとに割り当てるものなので、バックアップを取られるとプッシュ通知が送られてこなくなる
端末に依存したファイルがある場合バックアップの対象から外すか、ファイルに書き込まない設計にする

プッシュ通知が届かないと、サービスによっては大きなダメージを受けてしまいますね。

バックアップや復元はどんな状態で起きるのでしょうか？
#### 自動バックアップの発動条件
- 端末がアイドル状態
- 端末が充電状態
- 端末がwifiに接続されていること
- 以前のバックアップから24時間以上経過していること

#### どのユーザーに影響するのか？
 - Android M以上
 - 設定 -> バックアップとリセット -> データのバックアップがONになっている
 - 機種変更もしくは初期化後、バックアップから復元を選択したユーザー
 
最近端末を初期化する機会があったので試してみましたが、私のアプリ[採点簿](https://play.google.com/store/apps/details?id=com.bowyer.KyudoScoreBookSecond&hl=ja)は`true`を指定していたので、実際にデータがすべて復元されました。
※プッシュ通知が届くかどうかはまだ未検証です。


### 回避策はあるのか？
一番簡単なのは`android:allowBackup="false"`を指定することです。
しかし、アプリによっては機種変更時のデータ引き継ぎを簡単にできるこの設定をそう簡単に捨てるのは嫌ですよね。

Googleのサンプルによると、バックアップの設定を個別に設定できそうでした。
https://github.com/googlesamples/android-AutoBackupForApps/blob/master/Application/src/main/res/xml/backup.xml#L24

```xml
<exclude domain="sharedpref" path="gcm"/>
```
と、バックアップから除外出来る設定がありました。
もし、バックアップを有効にするのであればここの設定を見直したほうが良いです。

### バックアップ設定に使えるタグ
```xml
<full-backup-content>
    <指定したファイルが除外される domain=["file" | "database" | "sharedpref" | "external" | "root"]
    path="string" />
    <exclude domain=["file" | "database" | "sharedpref" | "external" | "root"]
    path="string" />
</full-backup-content>
```
 - include:それ以外のファイルはバックアップされなくなる
 - exclude:指定したファイルが除外される
 - file:`getFilesDir()`で取得できるファイルディレクトリ
 - database:アプリのデータベース
 - sharedpref:アプリの`shared_prefs`
 - external:`getExternalFilesDir()` で取得出来るディレクトリ
 - root:`getApplicationInfo().dataDir()`で取得出来るアプリのデータディレクトリ


### 確認方法
アプリをビルドしたら、実際に除外設定が出来ているか確認します。
都合上、私のアプリのパッケージ名`com.bowyer.KyudoScoreBookSecond`を指定しています。
コマンドにはご自身のパッケージ名を指定して下さい。

#### 設定ファイルのパースをログ出力するためのフラグを立てる
```
$ adb shell setprop log.tag.BackupXmlParserLogging VERBOSE
```
#### 自分でバックアップを発生させるには、次のコマンドを使ってBackup Managerを初期化する
```
$ adb shell bmgr run
```

#### 初期化が完了したら、バックアップを実行
```
$ adb shell bmgr fullbackup com.bowyer.KyudoScoreBookSecond
```

#### バックアップが取得できたらアプリのデータを消して次のコマンドを実行し、復元の検証
```
$ adb shell bmgr restore <TOKEN> com.bowyer.KyudoScoreBookSecond
```

TOKEN に関しては、以下のコマンドを実行し、Current: ラベルの後に続く 16 進文字列を使って下さい

```
$ adb shell dumpsys backup
```

詳しい情報は公式サイトをご確認下さい。
https://developer.android.com/guide/topics/data/testingbackup?hl=ja#TestingRestore

私のアプリは`android:allowBackup="true"`になっているので、完全にデータが復元されてしまいました。

※プッシュ通知が受信できるかどうかは後日検証したら追記します。

検証したりする余裕がある方は、ぜひ各項目の設定を試してみてください。
Docker for Windowsで仮想環境を使おうとしたらBSoDが発生

# 概要
スポットで時間が空いたので、Dockerを研究してみようと思いインストール。
いざ仮想環境を用意してテストしようと思ったらPCの起動時に必ずBSoDが発生して作業が出来なくなった。

# 開発環境
* Windows 10 Pro 64bit
 * バージョン 1607
 * OSビルド 14393.351
* **ウィルスバスタークラウド** (後述するが、これが要因の一つの模様。)
 * バージョン番号 11.0.1158
* Docker for Windows

# 問題発生までの手順
1. Docker for Windowsをインストール。
1. 初期設定で「Hyper-Vを有効にしますか」という旨のダイアログが出るので実行。
1. 自動でWindowsが再起動。
1. 以降、必ず「APC_INDEX_MISMATCH」でBSoDが発生、起動できなくなる。

# 復旧手順
##BIOS設定の変更##
[仮想化機能を有効にするためのBIOS設定](http://www.tekwind.co.jp/faq/ASU/entry_134.php)があるということで確認。
該当項目がEnabledになっていたので、Disabledに変更。

* ~~Execute Disable Bit~~ **重要そうな項目だったのでEnabledに再度変更、その状態でも復旧を確認しました。**
* Intel(R) VirtualizationTechnology

# 問題の原因について
復旧後、同様の症状が起きてないかと思って検索したところ、[こちらのページ](http://taityo-diary.hatenablog.jp/entry/2016/10/08/190816)を発見。
この方はトレンドマイクロに問い合わせ、個別パッチ提供により解決したとのことですが、
今回の問題と発生状況、環境が酷似しているため、当方も同じ要因で起きていたのではないかと思われます。

ちなみに、OSが同様でウィルスバスターが入っていない別PCで試してみたところ、
元気に動作していることからも、ウィルスバスターが関係しているのは間違いないのではないかと思います。


# 【メモ】解決には繋がらなかった手順
**Dockerサービスの停止**
問題が発生したタイミング的にDockerを疑い、「コンピュータの管理」からDockerのサービスを無効して再起動。

**Dockerのアンインストール**
サービスの停止では解決しなかったため、根本的にDockerを消そうとアンインストールを試みるも、
「Windowsインストーラーが正しくインストールされていない～」との内容が表示されて実行できず。
特に意味がないかも思いつつ、Dockerのインストールパスを変更してアクセス出来ないようにしてみた。