OmniAICreator/Qiita-1.07M huggingface dataset:
わーい、すごーい

[Golangのネタ](http://qiita.com/sakajunquality/items/5c4a2dc6967e584193ad)はすでにあるけど、
いっぱい「わーい、すごーい」したいフレンズのために[]byteばんもつくってみたよ!!
あと、パッケージのおそとからフレンズをまもるためにフィールドめいのせんとうをこもじにしておいたよ!!
「...（せいしきめいしらない）」がなんだかむなしさをかんじるね...!!

```go
package main

import "fmt"

type Friends struct {
	messageBuffer []byte
}

func main() {
	fmt.Println(NewFriends().wai().sugoi().tanoshii().friends("くそりぷ"))
}

func NewFriends() *Friends {
	return &Friends{
		messageBuffer: make([]byte, 0, 1024),
	}
}

func (f *Friends) wai() *Friends {
	f.messageBuffer = append(f.messageBuffer, "わーい\n"...)
	return f
}

func (f *Friends) sugoi() *Friends {
	f.messageBuffer = append(f.messageBuffer, "すごい\n"...)
	return f
}

func (f *Friends) tanoshii() *Friends {
	f.messageBuffer = append(f.messageBuffer, "たのしー\n"...)
	return f
}

func (f *Friends) friends(skill string) *Friends {
	f.messageBuffer = append(f.messageBuffer, "君は"...)
	f.messageBuffer = append(f.messageBuffer, skill...)
	f.messageBuffer = append(f.messageBuffer, "がとくいな、フレンズなんだね!!\n"...)
	return f
}

func (f *Friends) String() string {
	return string(f.messageBuffer)
}
```

元ネタ: [わーい、すごーい](http://qiita.com/t_ishida/items/bae7e62950d81f427f13)
iOS AdMobでテスト広告を表示したい時の罠

# 背景

AdMobを使って広告付きiOSアプリを開発しているとき、実機でテスト広告をなかなか思うように表示できない問題に直面した。

# 一般的な実装（Swift 3.2）

```swift
let simulator: Bool = false;  //trueでシミュレーター、falseで実機

var ad: GADBannerView = GADBannerView(adSize: kGADAdSizeSmartBannerPortrait);

ad.frame.origin = CGPoint(x: 0, y: view.bounds.height - ad.frame.height);
ad.frame.size = CGSize(width: view.bounds.height, height: view.bounds.height);

ad.adUnitID = "AdMobの広告ID";
ad.delegate = self;
ad.rootViewController = self;

let gadRequest: GADRequest = GADRequest();
gadRequest.testDevices = simulator ? [kGADSimulatorID] : ["端末ID"];
ad.load(gadRequest);

view.addSubview(ad);
```

テスト広告を表示したい時は、**gadRequest.testDevices** を設定する。とりわけ実機で表示する場合には**端末ID**が必要となる。あとは端末で`設定 -> プライバシー -> 広告 -> 追跡型広告を制限`をOFFにすれば良い。
![IMG_7729.PNG](https://qiita-image-store.s3.amazonaws.com/0/67153/6ba9ec91-3584-06ad-d913-d4c4968dbdc9.png)

# 端末IDの確認方法

何も考えずに上のソースコードを組み込んだプログラムを実機でRunしてみれば、デバッグエリアのログに`<Google> To get test ads on this device, call: request.testDevices = @[ @"端末ID" ];`という風に表示される。

# 罠

一度**端末ID**を確認してしまえば永久にそれでテスト広告が表示できるわけではなかった。なんと、**端末ID**は別のものに変更されてしまうことがあるのだ。gadRequest.testDevices は設定したままでもリリースすることができるが、リリース後に端末IDが変更されてしまっては困る。

# 原因

テスト広告を表示するには**追跡型広告を制限のOFF**が必要であるが、これをONに一度してしまうと、**端末IDがリセット**されてしまうのだ。

# 解決方法

追跡型広告を制限のON / OFFの切り替えをしないことしか見つけられていない。良い方法があったら教えていただきたい。
わーい、すごーい

#わーい、すごーい
Swiftたのしー!
UIKitバージョンはなかったので作った
[https://github.com/himazin19990927/sugo-i](https://github.com/himazin19990927/sugo-i)
![スクリーンショット 2017-02-11 1.33.12.png](https://qiita-image-store.s3.amazonaws.com/0/74507/30b25cb7-3612-43f8-da0d-401848345850.png)
![スクリーンショット 2017-02-11 1.33.02.png](https://qiita-image-store.s3.amazonaws.com/0/74507/c109301e-15ee-7676-ebb5-15748e3e133c.png)

こーどなんてうごけばいいよね

#パクリ元
[http://qiita.com/Happa8/items/ccb11c50b2de8f915599](http://qiita.com/Happa8/items/ccb11c50b2de8f915599)
fiddler2のcomposerでファイル送信

### リクエストヘッダ
```
POST http://www.example.com/ HTTP/1.1
Host: www.example.com
Content-Type: multipart/form-data; boundary=----AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
```
### リクエストボディ
```
------AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Content-Disposition: form-data; name="comment"

testcomment
------AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Content-Disposition: form-data; name="file"; filename="test.extension"
Content-Type: application/octet-stream

<@INCLUDE *C:\Project\test.extension*@>
------AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA--
```
### 説明
1ブロック目：パラメータを送る
2ブロック目：ファイルを送る

ハイフンの数に注意
ボディの各boundaryの前に--が多く、最後に--が付く
送信するファイルの適切な形式のContent-Typeがあれば適宜設定
[UE4]Blueprintの関数のpureとconstの違い

# 初めに結論

* `pure`はドキュメントとは異なりクラスのメンバーを変更可能
* `const`ならばクラスのメンバーを変更できない
* 実行ピンを消すのは`pure`, `const`は変わらない

# 説明

Blueprintの関数にはpureのオプションとconstのオプションがある。

pureのオプションを有効にするとそのBPの関数は「純粋関数」となるとドキュメントでは説明されている。

> 関数は 純粋関数 または 非純粋関数 のどちらかになります。両者の大きな違いは、純粋関数がステートやクラスのメンバーを一切変更しないのに対し、 非純粋関数はステートを自由に変更します。純粋関数は通常、データ値を出力するだけの getter 関数や演算子に使用されます。 
> https://docs.unrealengine.com/latest/JPN/Engine/Blueprints/UserGuide/Functions/index.html#純粋関数と非純粋関数

一方、constのオプションは普段は隠されており、ドキュメント中には明確な説明はない。

![option_setting_details.PNG](https://qiita-image-store.s3.amazonaws.com/0/54764/e6c1bab5-323b-4003-82ca-7160c68ce808.png)


## 比較表

挙動を調べると以下のような違いがある。


|  | 通常 | pure  | const  | pure & const |
|:-:|:-:|:-:|:-:|:-:|
| sample | ![normal_fn.PNG](https://qiita-image-store.s3.amazonaws.com/0/54764/2cff0bef-e621-6f4e-9d76-b36b1d0c4c0f.png) | ![pure_fn.PNG](https://qiita-image-store.s3.amazonaws.com/0/54764/fff78caa-e342-459e-60da-df8d3d2a343a.png) | ![const_fn.PNG](https://qiita-image-store.s3.amazonaws.com/0/54764/c65e1432-6373-e290-3711-1709e0031a74.png) | ![constpure_fn.PNG](https://qiita-image-store.s3.amazonaws.com/0/54764/b121e051-3192-ea5a-8335-946b125e4728.png) |
|実行ピン | あり | なし | あり | なし |
|メンバーの変更 | 可能 | 可能 | 不可 | 不可 |
|Selfへの参照入力pin <br/>(除くBP関数ライブラリ) | あり | なし | あり | あり |

## メンバーの変更

たとえば関数の中身が以下のようなグラフとする。
※`param`はクラスのprivateメンバー変数
![code.PNG](https://qiita-image-store.s3.amazonaws.com/0/54764/a25715aa-18e9-1a25-10fe-b8cef3c7f503.png)

pureを設定した場合、返り値の値は変更後の値が返ってくる。

一方、constを設定すると、そもそもこのグラフはコンパイルできない。

```
Error Variable  param  is read-only within this context and cannot be set to a new value
```

## Selfへの参照入力pin

クラスBPやLvBPで関数を作成すると、通常はデフォルトが`Self`を指すObjectリファレンス型の入力ピン（引数）が自動でノードにつく。

`pure`を設定すると`Self`入力ピンはつかないが、`const`を設定した場合はつく。両方設定した場合は`const`が優先となって入力ピンがつく。


※Blueprint関数ライブラリの関数を除く


# まとめ

* BPの純粋関数は実はクラスのメンバーを変更可能
* 変えられなくするためにはconstをつける
* pureは主に実行ピンの有り無し、selfへの参照入力ピンの有無に影響
Rundeckの前段にnginxを配置してhttps化する

# はじめに
RundeckはデフォルトだとWebの管理画面はhttpなんだけど、まともに使うならhttps化しておきたい。

いちおう、Rundeck単体でもSSLの設定することは可能っぽいんだけど、
http://rundeck.org/docs/administration/configuring-ssl.html

見るからにちょっと、めんどくさそうで、Rundeck初心者には敷居が高そうである。

ところで、Rundeckの前段にnginxを配置してhttps化する構成なら大体nginxの知識+αでなんとかなりそうなので、nginxでSSL復号化する構成にしてみる。

# RundeckのSSL復号化をnginxにオフロードする

前段のnginxでSSL復号化する構成については、公式wikiに以下のような簡単な説明があるんだけど、
https://github.com/rundeck/rundeck/wiki/FAQ#can-i-do-ssl-offloading

>Yes, If you have load balancer or reverse proxy, you can let them handle SSL and just do http between them and RunDeck servers:
* Set up RunDeck as http
* in profile file, add option -Drundeck.jetty.connector.forwarded=true to RDECK_JVM
* Set framework.rundeck.url and grails.serverURL to use https

簡単すぎである。

これを読み解いて何を言ってるかを理解したので、補足説明しておく。

> * Set up RunDeck as http

これは、読んだまま、普通にhttpの構成として、Rundeckをセットアップする。

> * in profile file, add option -Drundeck.jetty.connector.forwarded=true to RDECK_JVM

これは `/etc/rundeck/profile` に `RDECK_JVM` という起動オプションを設定している変数があるので、 それに `-Drundeck.jetty.connector.forwarded=true` を追加しろということ。

```/etc/rundeck/profile
...

RDECK_JVM="-Djava.security.auth.login.config=$JAAS_CONF \
           -Dloginmodule.name=$LOGIN_MODULE \
           -Drdeck.config=$RDECK_CONFIG \
           -Drundeck.server.configDir=$RDECK_SERVER_CONFIG \
           -Dserver.datastore.path=$RDECK_SERVER_DATA/rundeck \
           -Drundeck.server.serverDir=$RDECK_INSTALL \
           -Drdeck.projects=$RDECK_PROJECTS \
           -Drdeck.runlogs=$RUNDECK_LOGDIR \
           -Drundeck.config.location=$RDECK_CONFIG/rundeck-config.properties \
           -Djava.io.tmpdir=$RUNDECK_TEMPDIR \
           -Drundeck.server.workDir=$RUNDECK_WORKDIR \
           -Dserver.http.port=$RDECK_HTTP_PORT \
           -Drundeck.jetty.connector.forwarded=true"
```

> * Set framework.rundeck.url and grails.serverURL to use https

これは `/etc/rundeck/framework.properties` の `framework.rundeck.url` のスキームを `https` にしてねというのと、

```/etc/rundeck/framework.properties

...

framework.server.name = localhost
framework.server.hostname = localhost
framework.server.port = 4440
framework.server.url = http://rundeck.example.com:4440
framework.rundeck.url = https://rundeck.example.com
```

`/etc/rundeck/rundeck-config.properties` にある `grails.serverURL` のスキームも `https` にしてね

```/etc/rundeck/rundeck-config.properties
...

# change hostname here
grails.serverURL=https://rundeck.example.com

```

ということらしい。

あとはnginxのSSLを復号化する設定はこんなかんじ。SSL証明書の作り方とかは割愛。特にRundeck関係ないので知らなければぐぐってくれ。

```/etc/nginx/nginx.conf
...

http {
    ....

	server {
		listen 443;
		set_real_ip_from   '10.0.0.0/8';
		real_ip_header     X-Forwarded-For;
		proxy_set_header   Host $host;
		proxy_set_header   X-Forwarded-Proto https;

		ssl on;
		ssl_certificate /etc/nginx/keys/server.crt;
		ssl_certificate_key /etc/nginx/keys/server.key;

		server_name rundeck.example.com;
        ....

		location / {
			proxy_pass http://rundeck:4440;
		}
	}
}
```

これで `https://rundeck.example.com` でアクセスできるようになった。
javascriptで現在実行中のファイルパス（__FILE__）及び行番号（__LINE__）を取得する方法

注: ```arguments.callee``` はstrict mode では使えず、```Error.prototype.stack``` は標準化から外れています。あくまでデバック目的にだけ利用し、一般公開するソースコードには含めないことを推奨します。また、```__FILE__``` はURLから生成しており、サーバに存在するファイルパスとは異なることがあります。

```js
Object.defineProperty(window, '__STACK__', {
	get: function(){
		let origin = Error.prepareStackTrace;
		Error.prepareStackTrace = function(_, stack){ return stack; };
		let err = new Error;
		Error.captureStackTrace(err, arguments.callee);
		let stack = err.stack;
		Error.prepareStackTrace = origin;
		return stack;
	}
});
Object.defineProperty(window, '__FILE__', {
	get: function(){
		let filename = __STACK__[1].getFileName().replace(location.origin, "").replace(window.location.search, "");
		if(!filename) filename = "/";
		return filename;
	}
});
Object.defineProperty(window, '__LINE__', {
	get: function(){
		return __STACK__[1].getLineNumber();
	}
});
console.log("__FILE__", __FILE__);
console.log("__LINE__", __LINE__);
```

jQueryの ``$.ajax()`` ( ``$().load()``, ``$.get()``, ``$.getScript()`` なども ``$.ajax() ``のラッパーなのでこれに含まれる) で外部ファイルを読み込んだ場合、 xmlHttpRequest による読み込みなのでデフォルトではファイル名が取得されない（Chrome のconsole で試すと、VM上に展開されているのがわかる）。従って``__FILE__`` は使えない（``__LINE__`` は使える）。その為これらを使いたい場合は、上記とは別に工夫する必要がある。

まず、読み込み元のファイルに以下を記述する。

```js
$.ajaxSetup({
	dataFilter: function(data) {
		let filename = this.url.replace(location.origin, "").replace(/\?.*/, "");
		if(this.dataType === "script") return `__XHR_FILE__ = "${filename}";\n` + data;
		else if(this.dataType === "html") return `<script class="init_script">__XHR_FILE__ = "${filename}";<\/script>` + data;
		else return data;
	},
});
```

こうすれば、(dataType が "script" と "html" のとき限定だが) ``__XHR_FILE__`` に現在のファイルパスが代入される。あとは読み込み先のファイルで ``__XHR_FILE__`` を参照するだけ。

注意点として、javascript は非同期でファイル読み込みを行っているので、あるファイル内で ``__XHR_FILE__ ``が代入された後、別のファイルの読み込みが起こり ``__XHR_FILE__ `` の値が置き換わる可能性がある。細かくは試してないが、ファイルの最初の行で ``let xml_file = __XHR_FILE__;`` のように値をコピーしておけば問題ないだろう。
vscodeのESLintの設定

#### １．VSCodeExtension
Extensionsメニューから https://marketplace.visualstudio.com/items?itemName=dbaeumer.vscode-eslint をインストール
#### ２．ESLintインストール
`npm install -g eslint` グローバルかローカルにインストール
#### ３．設定
参考: http://qiita.com/mysticatea/items/dc35ced6bd5e782f50cd
・設定ファイルはgoogleのものを使う
　`npm install -g eslint-config-google`
・カレントディレクトリに`.eslintrc.json`を作成
　`"extends": "google",`を追記

``` 自分の.eslintrc.json
{
  "env": {
    "browser": true,
    "commonjs": true,
    "es6": true,
    "node": true
  },
  "parserOptions": {
    "ecmaFeatures": {
      "jsx": true
    },
    "sourceType": "module"
  },
  "globals": {
    "angular": false,
    "moment": false,
    "_": false,
    "$": true
  }, 
  "extends": "google", // googleの設定を読み込む
  "rules": {
    "require-jsdoc": "off",
    "valid-jsdoc": "off",
    "max-len": "off",
    "no-var": "off",
    "no-invalid-this":"off"
  }
}

```

<del>４．`code > Preferences > Settings` に下記を追加</del>
↓自動でインポートされるので不要

```
"eslint.options": {
 "configFile": "/Users/カレントディレクトリ/.eslintrc.json"
 }
```
↑自動でインポートされるので不要

http://eslint.org/
Recruit Technologies Night #4 - リクルートにおけるAI活用のリアル まとめ

# 開催概要

* 日時：2/10（金）19:10-21:30くらい
* 場所：グラントーキョーサウスタワー（リクルート本社）
* 開催：リクルートテクノロジーズ

# リクルート式AIの活かし方

* 「AI = DeepLearningなどの特徴量抽出」と定義
* リクルートでのAI活用のポリシーは、技術を施策まで落とし込むこと
* リクルート内では、ARTという社内用APIを使用している（おそらく3月中にオープンソース化するらしい）

# 事例1　ARTによる文書分類と文書校閲

* NLPで文書のタグ付け（どのジャンルの記事か？）と校閲（掲載して良い口コミか？）を自動化
* 完全自動化せず、精度によって人間が確認作業を実施
* 課題と学び
 * なんだかんだ100%自動化はできない
 * すぐに使えるわけではない、パラメータの調整等が必要
 * 事業会社のAIに対する過剰な期待
 * そもそもデータがない<br>
　⇒　AIはあくまでも人間をサポートするもの、人間の脳をベースにしているため間違いもある<br>
　⇒ 誰もがDeepLearningを使える時代だからこそ、データの量や質が重要

# 事例2　CNNによる物体認識

* CNN(Convolutional Neural Network)とは
 * ConvolutionとPoolingを繰り返す
 * CNNを物体認識に使用
 * インフラはAWS、ライブラリはCaffeが多い
* CNN活用事例1 - HotPepper Beauty
 * オンラインネイルブック
 * ネイルの画像を開くと、似たデザインのネイルの画像が一覧表示される
 * 爪を認識、デザインを把握、RGB値を取得して似たデザインのネイルを表示
* CNN活用事例2 - カーセンサー
 * 車の画像から車種を教えてくれる機能
 * 車のパーツを識別するアルゴリズムを作り、そこにカーセンサーのデータを投入
 * 流通量の少ない車については、フィードバック機能で追加学習できるようにしている
* 課題と学び
 * 前提：ビジネスサイドの期待値の高さ・・・ビジネスサイドに知識がないのではなく、本気で良いサービスを作ろうという熱意があるからこその期待値の高さ
 * 課題1：教師用データがない・・・データを集めるためのWebサイトを作成
 * 課題2：精度があがらない<br>
   　・・・1. 学習データが足りない、2. ラベル分割不足、3. ハイパーパラメータが適当でない<br>
うち、1と2は人力で解決、3はDFOやベイズ最適化を用いた自動パラメータの設定で解決可能<br>
　⇒エンジニアもビジネスサイドに熱意によりそい、応える努力をすべき<br>
　⇒柔軟な発想でビジネスサイドの期待と現実のギャップを埋める必要がある

# まとめ
* リクルートの技術活用のポリシーは、手段は問わずにビジネスにつなげること
* ポリシーに則っていれば、OSSの使用やベンチャー企業との協働もする
* データ活用シーンは事業の様々なところへ拡大している、今後も開拓していく
* リクルートで大切にしているのは、技術力×施策におとすコミット力×情報力

# 感想
* 当方は入社後ずっとSIプロジェクトに参画しているため、事業会社の技術部門（厳密には別会社だが）との違いを実感できて面白かった。<br>
正直、ビジネスサイドの熱意に応えるにしても、SIでは利害関係等によりできないことが多く、軋轢が発生しやすいため。（事業会社でもあるのかもしれないが）
* 上記理由から、リクルートテクノロジーズの収益構造が気になった。
* 当方もDeepLearningを勉強しているものの、実用化（施策化）するにはかなりの技術力と労力と調査が必要だということを実感した。
Amazon Aurora データ暗号化時のパフォーマンス

**2018/01/13追記：**
現状では暗号化の有無による性能差はほとんどなくなりました。

 * **[Amazon AuroraでR4インスタンスを試してみる](https://qiita.com/hmatsu47/items/f060f11b16d2892dee9a)** ※2017/10/31時点
 * **[MeltdownとかSpectreとか騒ぎがあったので、Amazon Aurora（MySQL互換）R4インスタンス再テスト（mysqlslap）](https://qiita.com/hmatsu47/items/656ebb6575c31bf1a90e)** ※2018/01/08時点
 * **[「AWS、またパッチ当てたってよ」と聞いたので3度目のAurora（MySQL互換）R4テスト（mysqlslap）](https://qiita.com/hmatsu47/items/48e4af366c680c69f2ac)** ※2018/01/13時点

---

以前、[MySQL 5.7の透過的データ暗号化](http://qiita.com/hmatsu47/items/476d446887244de17ae4)についての記事を書きましたが、**Amazon RDS for MySQL**や**Amazon Aurora**でそれに近い機能として**KMS（Key Management Service）を利用したリソースの暗号化**があります。

**[Amazon RDS リソースの暗号化](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/Overview.Encryption.html)**

これらのうち、**Amazon Aurora**（最近「RDS for」が外れました）について、暗号化の有無でパフォーマンスが変化するかどうかを、mysqlslapを使って確認してみました。

※当然ですが、結果はワークロードによって大きく変化する場合があります。参考程度に見てください。

# 設定
インスタンスを作るときに**「暗号を有効化」**を**「はい」**にするだけ（必要ならマスターキーも選択。暗号キーのローテーションをするなら個別に生成してデフォルト以外のものを選択する）です。
少し古いですが、クラスメソッドさんの説明記事がわかりやすいです。

**[[新機能]RDS for Auroraで暗号化がサポートされました](http://dev.classmethod.jp/cloud/aws/kms-for-aurora/)**

なお、DB（クラスター）パラメータグループでは、デフォルトから以下の項目のみ設定を変更しています（以下のパフォーマンス調査には直接関係ありませんが、utf8mb4を扱うことを想定しています）。

 - innodb_file_per_table = 1 (ON)
 - innodb_file_format = Barracuda
 - innodb_large_prefix = 1 (ON)
 - binlog_format = MIXED （**バイナリログあり**の場合）

# テスト内容
以下の組み合わせでmysqlslapを実行してみました。

 - 暗号化　あり／なし
 - バイナリログ　あり／なし
 - インスタンスタイプ　db.r3.large／db.r3.xlarge

mysqlslapの指定パラメータは、簡単なテーブルを自動生成し、150スレッド・2000クエリで読み書きするものです。

```bash:mysqlslap
$ mysqlslap --auto-generate-sql --auto-generate-sql-guid-primary --engine=innodb --number-int-cols=20 --number-char-cols=20 --concurrency=150 --auto-generate-sql-write-number=2000 --auto-generate-sql-execute-number=2000 --auto-generate-sql-load-type=mixed -u 【ユーザ名】 -h 【クラスタエンドポイント】 -p
```

# 結果

 - **db.r3.largeの場合**

| 暗号化 | バイナリログなし | バイナリログあり |
|:-:|:-:|:-:|
| なし | 57.062 | 59.692 |
| あり | 57.146 | 65.418 |

 - **db.r3.xlargeの場合**

| 暗号化 | バイナリログなし | バイナリログあり |
|:-:|:-:|:-:|
| なし | 36.087 | 42.576 |
| あり | 34.880 | 46.457 |

バイナリログがない場合、暗号化の有無はほとんどパフォーマンスに影響を与えていないようです。
db.r3.xlargeの時は数値が逆転してしまっていますが、計測誤差または外部環境の影響が考えられます。

バイナリログがある場合は、I/Oのパターンが変わるせいか、暗号化のオーバーヘッドが少し生じました。
db.r3.large・db.r3.xlargeともに、**9～10%程度**でした。
※より大きなインスタンスタイプの場合は結果が違う可能性もあります。

# まとめ

「オーバーヘッドが（概ね）10%以内」は、結果だけをみればMySQL 5.7の透過的データ暗号化とほぼ同じです。
おそらく、CPUのAES-NI命令を使ってブロック（ページ）の暗号化／復号を行うタイプの処理になるので、あまり差がないのだと思います。
但し、Amazon Aurora（RDSも）の場合、テーブル領域だけでなく、ストレージに保存されるデータ全体が暗号化される点が違います。

なお、通信経路の暗号化は、RDS（MySQL）と同じ方法で行うことができます（JDBCを使う場合は[こちら](http://qiita.com/hmatsu47/items/0b459375d76f806d539a)）。

---

**【おまけ】**
Amazon Aurora関連投稿記事へのリンクを集めました。

 * **[Qiitaに投稿したAmazon Aurora関連記事](http://hmatsu47.hatenablog.com/aurora)**
メモ

#CentOS7
##systemctl

サービス管理

```
 # systemctl start サービス名
 # systemctl stop サービス名
 # systemctl restart サービス名
 # systemctl status サービス名
```

設定ファイルとか

```
/etc/systemd/system/
/usr/lib/systemd/system/
```

##ログ確認
systemdのログ確認

```
# journalctl -xe
```

サービス名でフィルタ

```
# journalctl -xe -u httpd
```

##firewalld

ゾーン確認

```
# firewall-cmd --list-all
# firewall-cmd --list-all --zone ゾーン名
# firewall-cmd --list-all-zones
```

#SELinux
##SELinux設定

```# getenforce```

|設定値|説明|
|---|---|
|enforcing|有効|
|permissive|ログ出力のみでアクセス制限はしない|
|disabled|無効|


## SELinux無効化

設定ファイルでdisabledにして再起動

```
# vi /etc/sysconfig/selinux
SELINUX=disabled
```

```# reboot```

記述を間違うと起動しない事があるので注意


##問題切り分け

permissiveにして確認する
setenforceではdisabledにはできない

```
# setenforce permissive
または
# /usr/sbin/setenforce 0
```

元に戻す

```
# /usr/sbin/setenforce enforcing
# /usr/sbin/setenforce 1
```

##モジュール作成

SELinuxのログからポリシーモジュール作成。
grep等で切り出してコマンドに渡してやると良い。

```
# cat /var/log/audit/audit.log | audit2allow -M mypm

# ls -1 mypm.*
mypm.pp  <= ポリシーモジュール
mypm.te  <= ポリシー定義ファイル
```

ポリシーモジュールインストール
```# semodule -i mypm```


ポリシーモジュール削除
```# semodule -r mypm.pp```


##ログが出ないのにアクセスできない時

ログ出力の抑止ルールがある

```
# seinfo |grep Dontaudit
   Auditallow:        157    Dontaudit:        8030
```

OFFにする

```
# semodule -DB
または
# semanage dontaudit off
```


    # seinfo |grep Dontaudit
       Auditallow:        157    Dontaudit:           0


これでログが出るはずなのでモジュール作成なりなんなりする。


ログ抑止を元に戻す

```
# semodule -B
または
# semanage dontaudit on
```


[SELinux ポリシーモジュール作成 – 闘い続けるSEの戯言](http://www.nightmare-yk.com/?p=776)
[8.3.2. サイレント拒否の原因](https://access.redhat.com/documentation/ja-JP/Red_Hat_Enterprise_Linux/6/html/Security-Enhanced_Linux/sect-Security-Enhanced_Linux-Fixing_Problems-Possible_Causes_of_Silent_Denials.html)
WindowsにApache2.4をインストールする手順

①[https://www.apachelounge.com/download/](https://www.apachelounge.com/download/)からWindows版Apacheをダウンロードする。

②ダウンロードした「httpd-2.4.23-win64-VC14.zip」を展開して中にある「Apache24」を任意のディレクトリに配置する。

③「\Apache24\conf\」内にある設定ファイル「http.conf」を開き修正する。
以下のApache24フォルダへのパスを変更する。
・37行目ServerRoot
・245、246行目のDocumentRoot
・364行目のScriptAlias
・380行目のDirectory
※ポートを設定する場合は58行目にて設定する。（通常は80番）

④サーバーネームの設定をする。
・221行目の先頭にある「#」を削除してServerName有効にする。
Chainerで楽曲分類をやってみた

初投稿です。
ChainerとかCaffeとかよく触るのですが、画像処理系がほとんどなので音声処理系もやってみようと思ってやりました。
Chainerを使って、２つの曲を分類する分類器を作って、PCのマイクに音楽を入力して分類させてみます。

# 分類する曲

今回は以下の2つの曲を分類します。
・「Crossing Field」 (LiSA)
・「蘇生」 (Mr.Children)

(最初LiSAの曲を４つくらい録音して学習させたら、学習はできたけど推定ができなかったので、分けやすそうな曲をチョイスしました)

# 録音環境

実際にテスト時にマイクに音楽をかけるので、それと同じ状況で上の２曲を１回ずつ録音してデータセットを作りました。
録音にはPythonのPyAudioを使いました。（コードは以下の通り）

```python:audio-input.py
import pyaudio
import numpy as np
import time

CHUNK = 1024
RATE = 8000
p = pyaudio.PyAudio()

stream = p.open(format=pyaudio.paInt8,
                channels=1,
                rate=RATE,
                frames_per_buffer=CHUNK,
                input=True)

while stream.is_active():
    input = stream.read(CHUNK)
    print list(np.frombuffer(input, dtype='int8'))

stream.stop_stream()
stream.close()
p.terminate()
```

これをターミナルで以下のように打ってエンター押した後に、マイクに向かって音楽をかけました。
僕はスマホのスピーカーを近づけて録りました。

```
$ Python audio-input.py > hogehoge.txt
```

出来上がったテキストファイルは適当に処理して、pythonで扱いやすい形にします。
これをChainerで書いた学習プログラムに投げます。

# 学習

モデルは以下のように定義しました。
時系列データを逐次与えていくので、けっこう有名だしLSTM使えばいいんじゃないか？　という浅い発想でとりあえずLSTM入れました。

```Python:learn.py
class MyRNN(chainer.Chain):
    def __init__(self, input_dim, hidden_dim, output_dim):
        super(MyRNN, self).__init__(
            fc1=L.Linear(input_dim, hidden_dim),
            lstm2=L.LSTM(hidden_dim, hidden_dim),
            fc3=L.Linear(hidden_dim, output_dim),
        )

    def __call__(self, xs, t):
        self.lstm2.reset_state()
        for i, x in enumerate(xs):
            x = x[np.newaxis, :]
            x = Variable(cuda.to_gpu(x))
            fc1 = self.fc1(x)
            lstm2 = self.lstm2(fc1)
            fc3 = self.fc3(lstm2)

            if i == len(xs) - 1:
                t = Variable(cuda.to_gpu(t))
                loss = F.softmax_cross_entropy(fc3, t)
                accuracy = F.accuracy(fc3, t)

        return loss, accuracy
```

input_dim（入力層の次元）は1024です。これはaudio-input.pyのCHUNKに対応します。
hidden_dim（隠れ層の次元）は、好きな値で良いのですが今回は1024にしました。
output_dim（出力層の次元）は、2です。2曲の分類なので。

まあ、ほんとはクラスを3つにして、1つはどの曲もかかっていないというクラスにするべきかもですが、データ作るのがちょっと面倒だったので、とりあえずこんな感じで学習させました。

# 推論

マイクに向かって音楽を流して推論させてみたところ、そこそこ上手くいきました。ただ、「蘇生」を数十秒ほど流した後に「Crossing Field」に切り替えると、上手く推定できていなかったりして、その逆もありました。

とりあえず、曲を流してから、推論するプログラムを起動させると、AメロでもBメロでもサビでも関係なくちゃんと推定できました。

プログラムをgithubに上げてはいないのですが（コード自体もそんなに長くないです）、要望があれば対応します。
教授「Conflict.... なにそれ.. ブランチ消せ！作業やりなおせ！」

##Conflictとは...?
一言でいえばmergeの衝突です
たとえば、

```
冬ですね
とても寒いですね
お元気ですか
```

という元のファイルがあったとして、この状態でエンジニアAとエンジニアBがそれぞれbranchを作って作業したとします。

```Aがmergeした内容.html
冬ですね
とてもあたたかいです
お元気ですか
```
Aがmergeしたあとに、

```Bがmergeしようとした内容.html
冬ですね
とても眠いです
お元気ですか
```

すると、gitの方で
「同じ時期にbranch作った二人のエンジニアが違うこと言ってるぞ...　どうしたらいい？」
ってエンジニアBに聞いてくるんですねー
これがConflictです。たぶん。

対処法
#Terminalで治す場合
git statusでConflictを起こしてるファイルの確認
vim　対象ファイルを開く

```Conflictファイル.html
冬ですね
<<<<<<< HEAD
とても眠いです
=======
とてもあたたかいです
>>>>>>> 
お元気ですか
```
こんな感じになってるとおもうので<<<<とか＝＝＝＝とか消して必要な部分を修正して保存して終了
できたらgit add 対象ファイルで　pushまですれば直ります
#GitHubで治す場合
mergeボタン押そうとするとボタンの上に
This branch has　conflict that must be resolute
みたいなボタンができてると思うので押すとやはり

```Conflictファイル.html
冬ですね
<<<<<<< HEAD
とても眠いです
=======
とてもあたたかいです
>>>>>>> 
お元気ですか
```
のようなことが書いてあると思うので、<<<<と＝＝＝>>>>を消して問題を解決させて
Mark as　resolveを押してcommit changedボタンを押せば直せます。

githubで治す場合はできるだけ少なく影響範囲の少ないやつが良いですね。
バグったりしそうなので、できればterminalで直した方がいいかもしれないです
ラジアンと度の変換をするRubyコード

## サンプルコード

```ruby
# 度からラジアンを求める
def radian(degree)
  degree * Math::PI / 180
end

# ラジアンから度を求める
def degree(radian)
  radian * 180 / Math::PI
end

a = [-360, -315, -270, -225, -180, -90, -45, 0, 45, 90, 180, 225, 270, 315, 360]
a.each{|v|
  r = radian(v) # 度をラジアンに変換
  d = degree(r) # ラジアンを度に変換
  puts "#{v} -> #{r} -> #{d}"
}
```

## 実行結果

```
-360 -> -6.283185307179586 -> -360.0
-315 -> -5.497787143782138 -> -315.0
-270 -> -4.71238898038469 -> -270.0
-225 -> -3.9269908169872414 -> -225.0
-180 -> -3.141592653589793 -> -180.0
-90 -> -1.5707963267948966 -> -90.0
-45 -> -0.7853981633974483 -> -45.0
0 -> 0.0 -> 0.0
45 -> 0.7853981633974483 -> 45.0
90 -> 1.5707963267948966 -> 90.0
180 -> 3.141592653589793 -> 180.0
225 -> 3.9269908169872414 -> 225.0
270 -> 4.71238898038469 -> 270.0
315 -> 5.497787143782138 -> 315.0
360 -> 6.283185307179586 -> 360.0
```

## 参考資料

- 角度 - Wikipedia https://ja.wikipedia.org/wiki/%E8%A7%92%E5%BA%A6
- ラジアン - Wikipedia https://ja.wikipedia.org/wiki/%E3%83%A9%E3%82%B8%E3%82%A2%E3%83%B3
- 度 (角度) - Wikipedia https://ja.wikipedia.org/wiki/%E5%BA%A6_(%E8%A7%92%E5%BA%A6)
CentOS 6.8 で yum update

```
CentOS 6.8はvault.centos.orgを参照してもyum updateが失敗します
参照先をみてみるとSourceしかありませんね
```

![vault.png](https://qiita-image-store.s3.amazonaws.com/0/163928/cc2d057f-6424-0a77-46aa-970d06cc149b.png)

<p>
<p>

```
ならば、問題なさそうなミラーサイトを参照するようにBaseリポジトリを書き換えましょう
（今回はIIJを参照するようにしてみました）
```

![iij.png](https://qiita-image-store.s3.amazonaws.com/0/163928/1d7081b3-c9f8-f568-b7da-7799b2362409.png)

<p>
<p>

```
6.7までと同じように書き換えて…
```

```
$ sudo sed -i -e "s|mirror\.centos\.org/|ftp\.iij\.ad\.jp/pub/linux/|g" /etc/yum.repos.d/CentOS-Base.repo
$ sudo sed -i -e "s|#baseurl=|baseurl=|g" /etc/yum.repos.d/CentOS-Base.repo
$ sudo sed -i -e "s|mirrorlist=|#mirrorlist=|g" /etc/yum.repos.d/CentOS-Base.repo
```

<p>
<p>

```
yum update
```
```
読み込んだプラグイン:fastestmirror
更新処理の設定をしています
Determining fastest mirrors
base                                                     | 3.7 kB     00:00
base/primary_db                                          | 4.7 MB     00:00
extras                                                   | 3.4 kB     00:00
extras/primary_db                                        |  37 kB     00:00
updates                                                  | 3.4 kB     00:00
updates/primary_db                                       | 4.3 MB     00:00
依存性の解決をしています
--> トランザクションの確認を実行しています。
```

<p>

**参考**
[1] http://luozengbin.github.io/blog/2015-08-29-%5Btips%5D%5Blinux%5D%E6%97%A7%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3centos%E3%81%A7yum%E6%9B%B4%E6%96%B0%E3%81%A7%E3%81%8D%E3%81%AA%E3%81%8F%E3%81%AA%E3%81%A3%E3%81%9F%E6%99%82.html
ML-Askでテキストの感情分析

ちゃお……†

今回は[感情分析ライブラリML-Ask](http://arakilab.media.eng.hokudai.ac.jp/~ptaszynski/repository/mlask.htm)について紹介します。

# ML-Askができること
## 感情の推定
2,100語の辞書によるパターンマッチングで{喜, 怒, 哀, 怖, 恥, 好, 厭, 昂, 安, 驚}の10種類の感情を推定します。この2,100語は、[感情表現辞典](http://amzn.to/2kaxAkU)に基づいているそうです。

## 感情の強さ
間投詞、擬態語、がさつな言葉、顔文字、「！」や「？」の数で感情の強さを推定します。

## ネガポジ分類
推定された感情から文を{ネガティブ、ポジティブ、ニュートラル}の３種類に分類します。

## 文脈の考慮
Contextual Valence Shifters (CVS) という概念に基づいて, 文脈を考慮した感情推定を行います. たとえば, 「好きとは言えない」という文の場合、「好き」が否定されているので、「好き」の逆の感情である「厭」だと推定します。

## 活性的かどうか
推定された感情を元に文が{ACTIVE, NEUTRAL, PASSIVE}であるかの分類します。たとえば、「昂」はACTIVEで、「哀」はPASSIVEです。

# ML-AskのPython実装
Python 2系、3系どちらにも対応しています。
## 開発用リポジトリ
https://github.com/ikegami-yukino/pymlask
Contributions are welcome!

## インストール
```
pip install pymlask
```
※MeCabがないと動きません
## 使い方
```py

from mlask import MLAsk
emotion_analyzer = MLAsk()
emotion_analyzer.analyze('彼のことは嫌いではない！(;´Д`)')
# => {'text': '彼のことは嫌いではない！(;´Д`)',
#     'emotion': defaultdict(<class 'list'>,{'yorokobi': ['嫌い*CVS'], 'suki': ['嫌い*CVS'], 'iya': ['嫌']}),
#     'orientation': 'mostly_POSITIVE',
#     'activation': 'ACTIVE',
#     'emoticon': ['(;´Д`)'],
#     'intension': 2,
#     'intensifier': {'exclamation': ['！'], 'emotikony': ['(;´Д`)']},
#     'representative': ('yorokobi', ['嫌い*CVS'])
#     }

```
Herokuのpostgresqlバックアップしてローカルに突っ込む

## バックアップ開始
`heroku pg:backups capture --app アプリ名`


## バックアップIDをメモ
`Backing up DATABASE to バックアップID... ⣯ pending`


## ローカルにダウンロードする
`curl -o latest.dump $(heroku pg:backups public-url バックアップID --app アプリ名)`

## ファイルのDL完了
ローカルに、latest.dumpが保存された

## postgresが使えるかバージョンを確認
`postgres --version`

## ローカルにあるpostgresqlのサーバーを起動
postgres -D /usr/local/var/postgres

## データベース一覧で確認
`psql -l`

## データベース作成
`createdb データベース名`

## リストア
`pg_restore --verbose --clean --no-acl --no-owner -h localhost -d データベース名 latest.dump`

## データベースに接続

`psql -U ユーザー名 データベース`

## テーブル確認
`\d`

## テーブルのフィールド確認
`\d テーブル名`

ここでOwnerとユーザー名が一致してないと権限エラーになります。


## 切断
`\q`

## ローカルにあるpostgresqlのサーバーを停止

`pg_ctl -D /usr/local/pgsql/data stop`
Windowsをクリーンインストール後に入れるツールn個(2017年版)新規購入時も 更新中

おすすめがあれば教えて下さい。なるべくportable版を選んでいます。
(参考)Windowsをクリーンインストール後に入れるツール12個(2016年版)
http://qiita.com/shufo/items/355514ba4177bc8ab335
(参考)全てのWindowsユーザを幸せにするツールたち
http://qiita.com/shuheilocale@github/items/a1800805c237fa07f2cd

「ハードディスク」がぶっ壊れて、再インストールが必要になったのでWindowsをクリーンインストール後に入れた管理ツールなどを忘備録として。
excelをインストールする前作業です。

以下順不同
(1)まずは、これ。ハードディスクの健康診断＜管理者アカウント必要＞
CrystalDiskInfo Portable
http://portableapps.com/apps/utilities/crystaldiskinfo_portable
http://crystalmark.info/software/CrystalDiskInfo/

(2)ポイントクリップ　PointClip/選択できない文字列を、連続して拾い上げてテキストにしたい
http://mt-soft.sakura.ne.jp/web_dl/petit_tool/pointClip/

(3)Aspia/Maintenance Software
http://safestdownloads.net/aspia-download.aspx

(4)SystemExplorer Portable＜管理者アカウント必要＞
https://triton.casey.jp/portable/systemexplorer-portable/

(5)プログラムの追加と削除 一覧出力
http://www.gigafree.net/system/install/PGLST.html


更新中

(98)IMEの設定を変更して無変換・変換にIMEのオフ・オンを割り当てる
http://www.karakaram.com/mac-ime

(99)excelをインストールする。

(101)クリーナーソフト CCleaner
http://freesoft-100.com/pasokon/cleaner.html

(102)TimeTune＜管理者アカウント＞時刻合わせ-電池も切れていると、思います。
http://forest.watch.impress.co.jp/library/software/timetune/

(103)PDF ファイルのしおり（ブックマーク）を編集！「JPdfBookmarks」 
http://www.gigafree.net/tool/pdf/jpdfbookmarks.html

(104)AdwCleaner 知らないうちに組み込まれてしまったアドウェアなどを検出し、削除できる
http://www.vector.co.jp/soft/winnt/util/se506143.html

(105)「Folder Size Explorer」サイズの大きいファイルやフォルダを探し出す！ 30日限定でした。
http://www.gigafree.net/utility/analyze/FolderSizeExplorer.html
JavaScript作業MEMO 困った時はTurbolinksをOFF

# 特定のページのみにJavaScriptを当てたい
どハマりしてしまったのでログ。
特定のページのみにJavaScriptを当てたい場合、
> 読み込ませたいjsファイルを、Asset Pipelineの対象から外す
読み込ませたいjsファイルを、precompile対象に追加する
読み込ませたいjsファイルを、Turbolinksの対象から外す
app/views/layouts/application.html.erbにて、「特定のページのときだけ」対象のjsファイルをincludeする記述を追加する
（引用：[メモ置き場 メモ置き場「とあるJavascriptを特定のページ(とあるcontrollerのとあるaction)でだけロードして実行したい」](
http://manori.hateblo.jp/entry/2014/09/28/230304))

この記事の手順に従うとうまくいくは、ず、なのだが、うまくいかず。

```application.js
//= require jquery
//= require jquery_ujs

//= require_tree .
//= stub reload
```
デフォルトで記載してある'require turbolinks'を削除することで、特定のページにのみに当てたいjs(reload.js)が作動するようになりました。どこかのviewで読まれたjsがturbolinksのせいで引き継がれてしまう模様。turbolinksに関して今後要勉強。

# 参考リンク
[メモ置き場 メモ置き場「とあるJavascriptを特定のページ(とあるcontrollerのとあるaction)でだけロードして実行したい」](
http://manori.hateblo.jp/entry/2014/09/28/230304)
Docker でプライベートレジストリを構築する(NOT オレオレ証明書)

# TL;DR
- ちゃんとした証明書を使う方法(自己署名証明書を使わない方法)の記事を調べてもあまりない
- ちゃんとした証明書でプライベートレジストリを構築する方法を書いてみました

# 手順
## 1. 証明書・秘密鍵の作成
### 1-1. 証明書を取得
安かったので(ワイルドカード証明書で9000円/年)
https://www.kingssl.com/
を使ってみました。
※admin@ドメイン名 の様なメールアドレスが受信できる必要があります。

また、CSRは IIS で作成したので以降は、IISが前提です。

CSR作成、証明書のエクスポートは割愛しますが、↓を見ると分かります。
CSRの生成方法について（Microsoft Internet Information Services 7.0/7.5）新規・更新
https://www.kingssl.com/ssl_support/technical/csr_support/csr_1.html

###1-2. PKCS #12ベースのファイル(.pfx)から秘密鍵と証明書を取り出す
IIS から秘密鍵付きでエクスポートした.pfxは、秘密鍵と証明書が一緒になったバイナリーファイルなので、openssl コマンドでそれぞれを取り出します。
こういう時 Bash on Windows 便利！

PKCS #12詳細: http://qiita.com/kunichiko/items/3e2ec27928a95630a73a

```
> openssl pkcs12 -in wildcard_tsunomur.xyz_20170210.pfx -out wildcard_tsunomur.xyz_20170210.crt.txt
Enter Import Password:<エクスポートした時のパスワード>
MAC verified OK
Enter PEM pass phrase:<なんでもOK>
Verifying - Enter PEM pass phrase:
```

-out で出力したファイルに、**暗号化された秘密鍵** と **証明書** が含まれます。
```-----BEGIN ENCRYPTED PRIVATE KEY-----``` 以降が**暗号化された秘密鍵**、```-----BEGIN CERTIFICATE-----``` 以降が**証明書**です。

それぞれを、tsunomur.xyz.key(秘密鍵)とtsunomur.xyz.crt(証明書)に分割します。

###1-3. 暗号化を解除

```
> openssl rsa -in tsunomur.xyz.key -out tsunomur.xyz.key
Enter pass phrase for tsunomur.xyz.key:<↑で入力したパスワードを入力>
```

## 2. プライベートレジストリの起動
```
> mkdir certs
<certs ディレクトリにtsunomur.xyz.keyとtsunomur.xyz.crtを保存>
> docker run -d -p 5000:5000  --name registry -v /mnt/docker/registry:/var/lib/registry -v `pwd`/certs:/certs -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/tsunomur.xyz.crt -e REGISTRY_HTTP_TLS_KEY=/certs/tsunomur.xyz.key registry:latest
```

## 3. コンテナ を push
```
docker tag microsoft/iis dr.tsunomur.xyz:5000/iis
docker push dr.tsunomur.xyz:5000/iis
```

# 補足
## 認証付きにする
registry 自体でBasic認証をかけることが出来ます。nginx 等でリバースプロキシを使うもできます。
※以下はコンテナに入ってファイルを書き換えるという手抜き手順です。
　この辺で今フィルファイルのオーバーロードができそう。
　https://docs.docker.com/registry/configuration/

```
- registry コンテナに入る
docker exec -it registry sh

- auth ブロックを追加
vi /etc/docker/registry/config.yml
---
auth:
  htpasswd:
    realm: basic-realm
    path: /etc/registry_passwd
---

- htpasswd ファイルを生成
htpasswd -Bc /etc/registry_passwd tsunomur
```
docker stop -> docker start で反映します。

### ログイン

```
> docker login https://dr.tsunomur.xyz:5000
Username: tsunomur
Password:
Login Succeeded
```

## プライベートレジストリからイメージを削除する
レジストリ内部では、レイヤーで保存されており、依存関係があることから簡単に削除することができません。
↓のツールを使うと依存関係を含めきれいに削除してくれるようです。ただし自己責任です。

burnettk/delete-docker-registry-image
https://github.com/burnettk/delete-docker-registry-image

# 参考
SSL 証明書を IIS から Apache に移行する方法
http://webos-goodies.jp/archives/51249316.html
認証付きのDocker Private registryを立てる
http://deeeet.com/writing/2014/10/02/docker-private-registry-auth/
基本 HTTP 認証でサポートされた Docker プライベート・レジストリーをセットアップする
http://www.ibm.com/developerworks/jp/linux/library/l-docker-private-reg/
registry
https://hub.docker.com/_/registry/
JavaScriptでCIE76色差計算

[Color difference（wikipedia）](https://en.wikipedia.org/wiki/Color_difference#CIE76)で公開されているCIE76の色差計算式をJavaScriptで書いてみました

wikipediaで公開されている計算式は以下のとおりです。
> ![CIE76](https://wikimedia.org/api/rest_v1/media/math/render/svg/9452dc1872bffcc360663245e22ca32d5a84f3c1)
（「[Color difference](https://en.wikipedia.org/wiki/Color_difference#CIE76)」（5 Feb 2017, at 02:30. UTC）『ウィキペディア』より引用）

計算式そのものはシンプルなので[JavaScriptで色差計算（ユークリッド）](28c7b61d6b8ca54c5b94)のプログラムとほとんど差はありません。

```js:cie76
function cie76(L1,a1,b1, L2,a2,b2) {
	return Math.sqrt(
			Math.pow(L2 - L1, 2) +
			Math.pow(a2 - a1, 2) +
			Math.pow(b2 - b1, 2)
			);
}
```

しかし実行するにはRGBではなくLab色空間での値が必要となるため、実際に使う際はRGBからLabへ変換してから呼び出す必要があります。

JavaScriptでRGBからLab色空間へ変換するプログラムは[JavaScriptでRGBからLab色空間への変換](09caabe6bec46a2a0858)で公開していますので、それを使って以下のような感じでRGBをLabに変換してから呼び出す必要があります。

```js
var [L1, a1, b1] = rgbToLab(r1, g1, b1);
var [L2, a2, b2] = rgbToLab(r2, g2, b2);
distance = cie76(L1,a1,b1, L2,a2,b2);
```

または

```js
distance = cie76.apply(this, 
		rgbToLab(r1,g1,b1).concat(rgbToLab(r2,g2,b2))
		)
```

です。

## 関連リンク
- [色差アルゴリズムの違いをビジュアル化してみた](98c218bc5616eaaba9a0)
- [JavaScriptでCIEDE2000色差計算](860f061a2ab7a4f2d06f)
- [JavaScriptでCIE94色差計算](3488df50b7082d4fcffb)
- [JavaScriptでユークリッド色差計算](28c7b61d6b8ca54c5b94)
- [JavaScriptでHSVからRGBに変換](633d1bf6baf008e82847)
- [JavaScriptでRGBからLab色空間への変換](09caabe6bec46a2a0858)
GitLab の Artifact 掃除ツール

GitLab では CI で build した成果物を artifact として保存することができます。

なんかいつのまにか GitLab サーバーのディスクの使用量が増えちゃってるなあと思ったらこの artifact が膨れ上がっていました。
`gitlab-ci.yml` の [expire_in](https://docs.gitlab.com/ce/ci/yaml/#artifacts-expire_in) で保存する期間を制限しましょう。

また、GitLab は次のようにしてバックアップを取得することができます。保存する期間を指定しておけば、バックアップ時にそれを過ぎたものは自動で削除してくれます。

```
gitlab-rake gitlab:backup:create
```

このバックアップファイルには次のファイルが含まれます。

* repositories/
* db
* uploads.tar.gz
* builds.tar.gz
* artifacts.tar.gz
* lfs.tar.gz

はい、 `artifacts.tar.gz` が含まれてます。`artifact` が増えるとバックアップファイルも大きくなるのです。

GitLab の画面から artifact を削除するには pipeline の build 履歴から各 build を開いて Erase ボタンをポチポチする必要があります。数が少なければポチポチやっても良いのですが大量にあると大変です。
なんかツールがないかなと思ったらやっぱりありました。

https://gitlab.com/JonathonReinhart/gitlab-artifact-cleanup

## gitlab-artifact-cleanup の使い方

docker で試します

```
docker run -it --rm python:2.7 bash
```

`private_token` は GitLab の User Settings -> Account で確認できます

```
pip install python-gitlab python-dateutil pytz

cat <<_EOD_ > /root/.python-gitlab.cfg
[global]
default = gitlab1
ssl_verify = true
timeout = 5

[gitlab1]
url = https://gitlab.example.com
private_token = ****************
_EOD_

curl -O https://gitlab.com/JonathonReinhart/gitlab-artifact-cleanup/raw/master/gitlab-artifact-cleanup

python gitlab-artifact-cleanup --all-projects -m "5 days"
```

これで 5 日を過ぎた tag 付きでない artifact が削除されます。

`--project {namespace}{project_namem}` で特定のプロジェクトだけを対象にすることもできます。
`-n` もしくは `--dry-run` で削除される build を確認することができます。

### python-gitlab のマズイ実装

gitlab-artifact-cleanup で使われている [python-gitlab](https://github.com/gpocentek/python-gitlab) は paging されたデータをなぜか再帰呼出しして取得しようとするのでページ数が多いと

```
gitlab.exceptions.GitlabConnectionError: Can't connect to GitLab server (maximum recursion depth exceeded in cmp)
```

というエラーでコケてしまいます。

```
sys.setrecursionlimit(2000)
```

などとして回避することも可能ですが、時間ができたら直してもらうようにしよう。

[gitlab-artifact-cleanup script unable to delete some artifacts #217](https://github.com/gpocentek/python-gitlab/issues/217)
えー...
『ゼロから作るDeep Learning』5章 メモ

斎藤康毅:『[ゼロから作るDeep Learning](http://amzn.to/2lvOawT)』オライリージャパン，2016．
理解を深めるためにメモします．

# 5章　誤差逆伝播法
**誤差逆伝播法**
学習の際，重みパラメータに関する損失関数の勾配を数値微分によって求めたが，数値微分より，効率よく行う手法

## 導入される数学の概念

* 計算グラフ (computational graph)
* 順伝播 (forward propagation)
* 逆伝播 (backward propagation)
* アフィン (Affine) 変換  
  幾何学の分野で，ニューラルネットワークの順伝播で行う行列の内積のこと

***

式 $(5.12)$ を丁寧に書く．

まず，
$
\begin{eqnarray}
y
&=& 
\dfrac {1} { 1+\exp \left( -x\right)}
\tag{5.9}
\end{eqnarray}
$

なので，式 $(5.9)$ より
$$
y^{2}= 
\dfrac {1^{2}} {\left( 1+\exp \left( -x\right) \right) ^{2}}
$$

を準備しておく．
式 $(5.12)$ を解いていく．

```math
\begin{eqnarray}
\dfrac {\partial L} {dy}y^{2}\exp \left( -x\right)
&=& 
\dfrac {\partial L} {dy}\dfrac {1} {\left( 1+\exp \left( -x\right) \right) ^{2}}\exp \left( -x\right)\\
&=& 
\dfrac {\partial L} {dy}\dfrac {1^{2}} {\left( 1+\exp \left( -x\right) \right)}\dfrac{\exp \left( -x\right)}{\left( 1+\exp \left( -x\right) \right)}\\
&=& 
\dfrac {\partial L} {dy}y\dfrac{\exp \left( -x\right)}{ 1+\exp \left( -x\right)}\\
&=& 
\dfrac {\partial L} {dy}y\left(\dfrac {\exp \left( -x\right)} { 1+\exp \left( -x\right)}+\dfrac {1} { 1+\exp \left( -x\right)}-\dfrac {1} { 1+\exp \left( -x\right)}\right)\\
&=& 
\dfrac {\partial L} {dy}y\left(\dfrac {1+\exp \left( -x\right)} { 1+\exp \left( -x\right)}-\dfrac {1} { 1+\exp \left( -x\right)}\right)\\
&=& 
\dfrac {\partial L} {dy}y\left(1-\dfrac {1} { 1+\exp \left( -x\right)}\right)\\
&=& 
\dfrac {\partial L} {dy}y(1-y)\\
\end{eqnarray}
```
間違い等あれば教えていただけると嬉しいです．
# 随時更新するかも :snowflake:
Cognos レポートでSQL直書き時に使用するpromptmanyをオプションにする方法

Cognosのレポートの中でSQLを直接記載して、テーブルからデータを取得する事が可能ですが、SQL自体にパラメーターでフィルターをかけたい場合、promptmanyを使用すると思います。
このpromptmanyを使うと、基本的にフィルターが必須になってしまうので、オプショナルにする方法を共有します。

何を言っているか、下の内容を見て頂いた方が早いと思いますのでご一読ください。

##内容
以下の様なレポートを作成しています。値のプロンプトには、データとしてSALES_PERSONを指定しています。
パラメーター名として、pSP という名称を指定しています。
![001.PNG](https://qiita-image-store.s3.amazonaws.com/0/147246/c715d2a3-f4dc-5128-874f-acc08c9c7051.png)

リストのデータは、以下のようにSQLを直書きで取得しています。
この時、以下のようにpromptmanyでフィルターをかけています。
![002.PNG](https://qiita-image-store.s3.amazonaws.com/0/147246/dbc3cab1-6eba-4a4a-e313-06d7c5a01a93.png)

レポートを実行すると、以下のように「データなし」になります。
これはpromptmanyが必須になってしまっているためです。
![003.PNG](https://qiita-image-store.s3.amazonaws.com/0/147246/396edb94-d169-270f-5107-be6c7b3bb35c.png)

プロンプトを選択すると表示ができます。
![004.PNG](https://qiita-image-store.s3.amazonaws.com/0/147246/db51f478-04d9-1561-04e5-908769693462.png)

フィルターをオプションにしたい場合、以下のようにpromprmanyを記載します。
select * from XXXXX.SALES where SALES_PERSON in #promptmany('pSP','',"'NoSelect'")# or 'NoSelect' = #promptmany('pSP','',"'NoSelect'")# 
![005.PNG](https://qiita-image-store.s3.amazonaws.com/0/147246/0fd69f14-4f5f-1bce-9acc-fa072e4d448e.png)

実行すると、このようにオプショナルフィルターのため、全てのデータが初期表示されます。
![006.PNG](https://qiita-image-store.s3.amazonaws.com/0/147246/7181e2b4-0564-3aeb-d159-8b566a6cab53.png)

とてもSpecificな内容ですが、実際のプロジェクトで困って調べてやっと見つかったやり方なので、どこかで役に立つかもと思い投稿しました。

#複数選択の場合(2021/12/1追記)
すいません、前述の書き方だと複数選択の場合エラーになりました。
複数選択の場合、正しい書き方は以下ですね。
()が必要だし、= ではなく in ですね。

```html
select * from XXXXX.SALES where SALES_PERSON in ( #promptmany('pSP','',"'NoSelect'")# ) or 'NoSelect' in ( #promptmany('pSP','',"'NoSelect'")# )
```

#Likeで複数検索を前後方一致したい場合(2021/12/6追記)
やってみたら出来たというレベルで恐縮ですが、一応おいておきます。
splitの区切り文字は', ' (カンマ+ブランク)ですが、これはDb2でテストしているからかも知れません。ご使用のRDBMS側でSQLキャッチして区切り文字を何にすべきかは確認した方が良いです。

```html
select * from XXXXX.SALES where SALES_PERSON like #join('%'' or SALES_PERSON like  ''%',split(', ',sq(promptmany('pSP','token',"'NoSelect'",'%','','%'))))# or 'NoSelect' in ( #promptmany('pSP','',"'NoSelect'")# )
```
ImageMagickでよく使うメモ

## 透明部分以外を黒塗りにしたい

```
convert in.png -fill black -colorize 100 out.png
```
| in.png | out.png |
|-----------|------------|
| ![in.png](https://qiita-image-store.s3.amazonaws.com/0/2490/f9a8d19b-eb81-c6ac-e6bf-ed41fe7ee5b9.png) | ![out.png](https://qiita-image-store.s3.amazonaws.com/0/2490/6d00cee8-94b6-7709-769a-267a95490385.png) |

`-colorize`の値を変えると塗る量を調節できます。

```
convert in.png -fill black -colorize 70 out.png
```
| in.png | out.png |
|-----------|------------|
| ![in.png](https://qiita-image-store.s3.amazonaws.com/0/2490/f9a8d19b-eb81-c6ac-e6bf-ed41fe7ee5b9.png) | ![out.png](https://qiita-image-store.s3.amazonaws.com/0/2490/99991ece-5d7b-6ada-c6ce-19587b12ce53.png) |

## ドット絵を拡大したい

```
convert icon015.png -sample 480x480 item.png
```
| icon015.png | item.png |
|-------------|----------|
| ![icon015.png](https://qiita-image-store.s3.amazonaws.com/0/2490/57fd877d-8282-29b2-4d16-903d359eb98b.png) | ![item.png](https://qiita-image-store.s3.amazonaws.com/0/2490/00e672f2-a716-ffbb-016a-a608240016f1.png) |

## タイル状の画像を分割したい

```
convert sprite.png -crop 32x32 icon%03d.png
```

## 参考
* http://image-magick.com/2014/09/25/colorize/
* http://xr0038.hatenadiary.jp/entry/20130106/1357457937
* http://kreisel.fam.cx/webmaster/clog/2009-03-22-1.html
[TouchDesigner] GLSL-TOPをShaderToyのフォーマットに最適化する

![td_final.png](https://qiita-image-store.s3.amazonaws.com/0/127402/9fa3d25e-099c-60b5-2cb3-cee3854f638b.png)

GLSLを使用するにあたって、ShaderToyに掲載されているコードを参考にコーディングを行うことが多いと思います。
ShaderToyとは、WebGLをベースにしたシェーダー共有サイトで、ものすごくハイレベルなプログラムが多く存在します。

これらをそのままコピペしてTouchDesignerに持ち込むことができれば、TouchDesignerが手元になくとも、Web上で作成したものをそのまま利用できますので、開発の場所を選ばなくなります。

今回は、ShaderToy上で実装した以下のGLSLプログラムをTouchDesigner上で出力してみたいと思います。
[Orbits by Kodai - ShaderToy](https://www.shadertoy.com/view/Mdt3Wl)
![2017-02-10_201542.png](https://qiita-image-store.s3.amazonaws.com/0/127402/a2ba6de0-bfd0-2d29-ee56-aec53aa70a6f.png)

# ShaderToyのデフォルト変数
**iGlobalTime** : 現在の時間
**fragCoord** : 現在処理中のピクセル位置
**iResolution** : 出力画像のピクセル解像度
**fragColor** : 出力する色

これらを利用して、以下のような結果を出力することができます。
![2017-02-10_202440.png](https://qiita-image-store.s3.amazonaws.com/0/127402/d72228bb-d139-025b-2e1a-85baabd0843e.png)

この変数をTouchDesigner用にフォーマットしてあげれば、このコードをそのままコピペしてTouchDesigner上で実行することができます。

# TouchDesigner用にフォーマット
![2017-02-10_201701.png](https://qiita-image-store.s3.amazonaws.com/0/127402/30f3bc3a-0219-fb8a-1e8a-f451bd226b7d.png)

GLSLには、シェーダープログラム外部から値を受け取るためのUniform変数というものがあり、GLSL-TOPのパラメーターから定義することができます。
また、シェーダーエラーを確認するためにInfo-DATを結んでおきます。

### iGlobalTimeとiResolution
TouchDesignerには、iGlobalTimeとiResolutionに対応するデフォルト変数が無い(見つけ出せてないだけかもしれませんが)為、Uniform変数で代用してあげます。
![2017-02-10_203828.png](https://qiita-image-store.s3.amazonaws.com/0/127402/8c975fc0-d262-590c-68d9-fe6477aab846.png)

この設定したUniform変数の値は、GLSLプログラム側でこのように宣言すると受け取ることができます。
![2017-02-10_204117.png](https://qiita-image-store.s3.amazonaws.com/0/127402/cd124ba7-e8ca-9590-571e-7e06083c2ddc.png)

### fragCoord
TouchDesigner上では、現在処理している位置をUV(0から1)座標で返します。ShaderToyのfragCoordは、現在処理している**ピクセル座標**を返しますので、これに合わせていきます。
現在の処理UV座標に解像度をかけてあげれば、処理中のピクセル位置に変換することができます。
![2017-02-10_204753.png](https://qiita-image-store.s3.amazonaws.com/0/127402/173e4fc1-0c2b-b7db-60e3-fe2dfb513ec9.png)

## fragColor
ShaderToy上では、fragColorの出力宣言をmain関数の引数内に記述しますが、
![2017-02-10_205249.png](https://qiita-image-store.s3.amazonaws.com/0/127402/1e12e43f-d647-1c89-c795-0d60ef3d982b.png)

TouchDesigner上では以下のようにmain関数の外に宣言します。
![2017-02-10_205200.png](https://qiita-image-store.s3.amazonaws.com/0/127402/f2f36bba-4ffc-a221-723f-c4dd0c9f0cf1.png)

# 最終的なプログラム
```glsl:glsl1_pixel
uniform float iGlobalTime;
uniform vec2 iResolution;

vec2 fragCoord = vec2(vUV.s*iResolution.x, vUV.t*iResolution.y);

float PI = 3.1415926535;

out vec4 fragColor;
void main()
{
	
	vec2 p = (fragCoord.xy * 2.0 - iResolution.xy) / min(iResolution.x, iResolution.y);
    
    vec3 destColor = vec3(0.0);
    
    for(float i = 0.0; i < 6.0; i++){
        vec2 q = p + vec2(cos(iGlobalTime + i * PI / 3.0), sin(iGlobalTime + i * PI / 3.0)) * 0.7 * cos(iGlobalTime);
        destColor += 0.05 / length(q);
    }
    
    fragColor = vec4(destColor, 1.0);
}
```
何かするとすっごーいって言ってくれるフレンズ(bot)を作ってみた

botkitを使ってサクッとIQが低くなるChat Botを作ってみた

![スクリーンショット 2017-02-10 20.43.32.png](https://qiita-image-store.s3.amazonaws.com/0/55219/a9159939-6658-59f0-c172-3174c388b10a.png)


```javascript:friends.js
if (!process.env.token) {
    console.log('Error: Specify token in environment');
    process.exit(1);
}

var Botkit = require('botkit');
let fs = require('fs')

var controller = Botkit.slackbot({
    debug: false
});

var bot = controller.spawn({
    token: process.env.token
}).startRTM();


controller.hears(['(.*)してみた','(.*)しました'],['ambient,message_received'], function(bot, message) {

    let done = message.match[1];
    bot.reply(message, `君は${done}できるフレンズなんだね!!\nすっごーい!`)

});

```

ソースコードは [github](https://github.com/tamanugi/friends) にもあげています
コマンドでユーザ追加-Windows server運用

# TL;DR
Windows serverでもCUI操作で運用できるといろいろ楽ですね。
今回はユーザ追加の操作です。
コマンドプロンプトでもpowershellでも実行できます。

```
##ユーザ追加
net user $username /add
##パスワード設定
net user $username $password
##ユーザの一覧で作成されたことを確認する
net user
##以上。

#今回はリモートデスクトップ使う権限もつけたかった。
net localgroup "Remote Desktop Users" $username /add
#当該ユーザの権限確認
net user $username
```
UIImageとUIImageViewの違い

# 参考

[Difference between UIImage and UIImageView](http://stackoverflow.com/questions/8070805/difference-between-uiimage-and-uiimageview)

# UIImage


`UIImage`はオブジェクトのデータ（すなわち、pngファイルからの画像)を保持しているデータオブジェクトを生成する







# UIImageView

`UIImageView`は、`UIImage`を表示するためのカスタムビュー。`UIImageView`インスタンスをIBまたはコードのいずれかで作成し、画像を画面に表示するためのカスタムビュー
Visual Studio for Mac で xUnit を実行する方法

Visual Studio for Mac は標準では NUnit に対応しているようですが、 xUnit へは対応していません。

そこで別途拡張機能をインストールして、 IDE から xUnit を実行・デバッグできるようにします。

## 拡張機能をインストールする

* [xunit/xamarinstudio.xunit: xUnit.net support for Xamarin Studio](https://github.com/xunit/xamarinstudio.xunit)

です。

Xamarin Studio の場合、この Installation にある手順で拡張機能を追加できますが、Visual Studio for Mac では、まだ？ Gallery に "xUnit.NET 2 testing framework support" が出てきません。

なので、手動でインストールします。

* [Releases · xunit/xamarinstudio.xunit](https://github.com/xunit/xamarinstudio.xunit/releases)

にある最新の ``MonoDevelop.XUnit.MonoDevelop.XUnit2_x.x.x.mpack`` をダウンロードします。（現在最新は 0.7.1 でした）

次に Visual Studio for Mac を起動し、システムメニューの「Extensions...」を選択、続いて「Install from file...」を選択して、先程ダウンロードした ``.mpack`` ファイルを選択します。

![](http://blog.amay077.net/assets/images/posts/how_to_use_xunit_on_visual_studio_for_mac_01.png)

無事インストールが完了したら、（念のために）Visual Studio for Mac を一度終了して、再度起動します。

そして、 xUnit のテストプロジェクトが含まれたソリューションを開きます。

![](http://blog.amay077.net/assets/images/posts/how_to_use_xunit_on_visual_studio_for_mac_02.png)

メニュー -> View を Test に切り替えると Unit Tests のペインが表示され、テストケースが読み込まれているのが確認できます。

ここから 「Run All」 や、個別のテストケースを右クリックしてテストを実行できます。

※いろんな Xamarin Studio の拡張機能は、手動インストールすることで Visual Studio for Mac でも使用可能？？？
Trumbowyg で日本語を入力する

## Trumbowyg
https://github.com/Alex-D/Trumbowyg

## 日本語入力厳しい
javascript の WYSIWYG エディターである Trumbowyg、簡単に使えるんですが、WYSIWYG モード時に日本語入力をすると、HTML モードに切り替えないと入力内容が確定されないという不具合があるようです。
-> [Do not react to the Japanese(multibyte character) #315](https://github.com/Alex-D/Trumbowyg/issues/315)


## 対策
というわけでこうした。

```javascript
// フォーム送信時
$('.submit-btn').on('click', function () {
  // 日本語入力時のバグ対策
  $('.trumbowyg-viewHTML-button').trigger('mousedown');
});
```

パッと見これで困ってる人があまりいないようなんですが、どうやって解決してるんでしょうか……:zzz:
Microsoft Azure で仮想マシンを立てたときの調査結果

<h3>先日、勉強会でVisualStudio + Xamarinでアプリ開発することが決まったのでMicrosoft Azure で開発環境を作った。(結局デバッグ用のエミュレータが動かなくて破棄した)
で、調べたことをまとめたメモ


#Q:何が必要？
A:下記のものが必要。
・必須
クレジットカード、デビッドカードのどちらか(支払いに必要。アカウント作成時に必須登録なので試用版でも必須)
Microsoft アカウント(無料)
Azureアカウント(無料)

・推奨
  Azureでとりあえず試したいことのまとめ
  月々1000円程度の予算(Webサービスとして公開するなら10000円程度は欲しいかも。)
  設定ミスで１万円以上の請求が来ちゃったときの心構え(Azureは自動で止まるから来ないと思うが・・・)

#Q:サービスを停止し忘れて大量の課金が発生したりしない？
A:Azureは事前に課金上限を設定しておくと、その上限を超えた場合にすべてのインスタンスを停止する機能がある。らしい。
また、この機能とは別にアラートを設定することもでき、アラートの条件を満たすとアラートを飛ばしてくれる機能もある。
不安な人は、Azureの設定時にまず課金周りの設定を行うとよい。

#Q:サイト内の試算を見ると2000円程度で開発できるって書いてある。でも、試算ページへ飛んで試算すると6000円とか普通にかかる計算になるんだけど？
  
A:試算ページでは、「インスタンス」を「１か月ずっと起動した」場合のコストでデフォルト試算される。
  (Webサービスとして使うなら停止させずに使うだろうから)
  例えば、週末の１日だけ勉強会用に使うなら、時間部分の数値を32時間あたりにすれば実際のコストがわかる。

**追記 2017/02/13**
仮想マシンを立てた場合、仮想マシンのインスタンスとは別にストレージの料金もかかってた。（そりゃそうだ。）
ストレージは使用しているストレージ分を1GBいくらで計算されるようだ。
 
  
#Q:MSDNサブスクリプションってなんだ？

A:~~「特典」？と思われる。VisualStudio Proなどを持っている人は、Azureの機能を月々いくらかまでなら無料で使用できる。~~
MSDNサブスクリプションは、マイクロソフトが提供する開発者向けのサービスをまとめて提供するプログラム。サブスクリプション単体でも購入できる。
Azureのアカウントを新規作成した場合、MSDNサブスクリプションとは別の、Azure試用評価版サブスクリプション（￥20500分）がついてくる。
  
#Q:「インスタンス」の課金の仕組みがわからん。

A:インスタンスは状態として「起動」「停止」の状態があって、「起動」状態の時間で課金額が決まる。
  なので、使っていないときにインスタンスをこまめに停止しておけば課金はされない・・・はず。
  だから複数のインスタンスを持っていても、全て停止状態なら課金されず、逆にすべて起動すれば
  「インスタンス」分すべての課金がされる。

**追記2017/02/13**
インスタンスの停止は、仮想マシンのシャットダウンでは課金状態が続くらしい。
Azureのポータル画面から仮想マシンのページ(接続、開始、再起動、停止がある画面)を開きそこから操作すること。
停止されていれば、状態が割り当て解除になっているはず
また、インスタンスとは別にストレージの使用料金はかかる。インスタンスを作った場合、１ヶ月ずっと停止状態でもストレージの利用料金はかかることに注意。

#Q:試算ツールがあるのは分かった。でもAzureの機能がありすぎてどれを対象にすればいいのかわからない。
A:下記ルールを守ればテキトーでいいんじゃないかな？うん。
  ・開発用の環境は、使用する時間だけを試算する。
  ・既に行うことが決まっているものだけ試算対象にする。（やるかもしれない程度のものは試算しない）
  ・環境のスペックは低めのものを選択する。(スぺックが不足すれば後からここを追加する。)
**追記2017/02/15**
仮想マシンを使う場合、インスタンスの所属グループが違うとサイズ変更エラーが起こることがあるみたい。
http://qiita.com/towtow/items/709b0889a82b7fe8204f

<br>  
  これで試算した分が最少金額。後はスペック向上や追加機能の利用で２倍程度まで膨らむかも。
  インスタンスの増設とかをすればさらにかかるけど。
  
  まずはテキトーに選択して試算。払ってもいいと思ったら「えいやっ」で決定。
  後は実際の請求から確認すればいいのではないか？

**追記2017/02/13**
サブスクリプションのページから現在の課金額のデータを確認できた。
以下やり方

１．ベルアイコンからクリックし、サブスクリプション名(ここなら無料試用版)をクリック
![無題.png](https://qiita-image-store.s3.amazonaws.com/0/143913/824253aa-a4ce-c5c8-a10d-abb4d2950717.png)

２．現在の課金状態が表示される。合計はここで分かる。
　　各サービスでどれぐらい使っているかを知りたい場合、グラフ画像をクリックする。
![無題2.png](https://qiita-image-store.s3.amazonaws.com/0/143913/82c9e6c8-90ed-434e-2e22-02da4606cd9b.png)

３．サービスごとの課金額の明細が表示される。
　　さらにサービスをクリックすれば、１日ごとの課金額を表示してくれる。
![無題3.png](https://qiita-image-store.s3.amazonaws.com/0/143913/92ce17ca-9d6e-1338-daba-e72de6cb3abc.png)


#Q:エミュレータが動かなかった？
A:AzureはHyper-Vをベースにして構築されているらしい。
Hyper-V上では仮想マシンの構築を行えないので、エミュレータが起動できなかった。
Windows 10 以上のOSならNested Hyper-Vで起動できる可能性があるが、Azure上では
MSDNサブスクリプションがないと環境構築できないため採用できなかった。