OmniAICreator/Qiita-1.07M huggingface dataset:
数百台のノードを監視するときのLibreNMSチューニング

LibreNMSは豊富なメトリックを収集してくれますが、その分監視ノード数が増えるとパフォーマンスチューニングが必要になってきます。
そこで私が行ったチューニングをご紹介します。

今回は「その辺に転がってるサーバ1台で監視してみた」というシチュエーションです。

 - 監視サーバのストレージはHDD
 - DB,Appは非分散

公式にも色々のっています
http://docs.librenms.org/Support/Performance/

#同時polling数変更
台数が増えてくると、cronが一週するまでにpollingが終わらなくなってくるので、同時にpollingする数を増やす必要があります。
闇雲に増やすとdisk ioがスパイクするので、トライ＆エラーで調整する必要があります。

    */5  *    * * *   librenms    /opt/librenms/cronic /opt/librenms/poller-wrapper.py 16

#rrdcached
http://docs.librenms.org/Extensions/RRDCached/
RRDファイルへの書き込みをキャッシュしてdisk ioを低減させることが出来ます。
今回導入した中では一番効果が高かったです。

```
sudo apt-get install rrdcached
sudo mkdir /var/run/rrdcached
sudo chown librenms:librenms /var/run/rrdcached/
```

```:/etc/default/rrdcached
OPTS="-s librenms"
OPTS="$OPTS -l unix:/var/run/rrdcached.sock"
OPTS="$OPTS -j /var/lib/rrdcached/journal/ -F"
OPTS="$OPTS -b /home/admin/rrd/ -B"
OPTS="$OPTS -w 1800 -z 1800 -f 3600 -t 4"
```

#memcached
キャッシュによりデータベースへのアクセス回数を減らす事が出来ます。

```
sudo apt-get install memcached php5-memcached
```

```:/etc/memcached.conf
-m 512
```

```
sudo service memcached restart
```

#それでもダメなら
SSDとメモリを買いましょう
standaloneのsolrのインデックスのお手軽バックアップ

スタンダアローンのsolrにも、backup APIがあるので、それを定期的に実行すれば簡易的なバックアップがとれます。ちょっと必要になったので振り返れるようにメモ。

numberToKeepのパラメタを渡すことで世代管理もできるので、一週間分を残したいなら

`curl http://localhost:8983/solr/collectionName/replication?command=backup&numberToKeep=7`

を、cronで毎日実行とすれば十分です。

https://cwiki.apache.org/confluence/display/solr/Making+and+Restoring+Backups

レストアの仕方は以前に書いたのでこちら参考に。
http://qiita.com/n_slender/items/93216bae005ac96b75c4
Android 7.0のNFC HCE-Fの実装について

Android 7.0のNFCにHCE-Fが追加されたということで、AOSPソースコードの変更点について調べてみました。

HCE-Fは、FeliCaのHost-based Card Emulationのことです。

AndroidのNFC機能のソースコードは、external/libnfc-nci と packages/apps/NFC にあります。commit logを探したら、HCE-Fに関するcommitがそれぞれ一つずつありました。

# external/libnfc-nci
* これはNFCチップのドライバとNFCのプロトコルスタックです。
* NFCチップとHostのやりとりは、 NFC ForumのNCIを使っています。

* sonyの人による "Implementation of HCE for NFC-F."というcommit
 * https://android.googlesource.com/platform/external/libnfc-nci/+/4fa41c72cb561579743db93db9e1e57845f60860 
 * 変更は数十行と少ないです。
 * このcommitでは元々持っている Type 3 tag emulationのコードに、HCE-F用のIDを付加して上位に渡す機能を追加しています。


# packages/apps/NFC
* これはNFCのサービスを含んだアプリケーションです。
* sonyの人による "Implementation of HCE for NFC-F."というcommit
 * https://android.googlesource.com/platform/packages/apps/Nfc/+/ecb8d7bbd1a44cd3edbcb6c5d903fc8d9a625d70
 * 変更は結構あります。
 * この変更がHCE-Fの実際の処理のようです。
 * EnabledNfcFServices.java HostNfcFEmulationManager.java RegisteredNfcFServicesCache.java RegisteredT3tIdentifiersCache.java SystemCodeRoutingManager.java　が追加されてます。
 * 詳しい変更点はあとで調べるかも

# frameworks/native/
* hcefのパーミッション設定
* sonyの人による "Implementation of HCE for NFC-F."というcommit
 * https://android.googlesource.com/platform/frameworks/native/+/fb6ddc0d2f0f13e9bebe2c7b6870d49128ce19a0 
 * hcefの設定ファイル android.hardware.nfc.hcef.xml を追加


# 考察
* HCE-Fの機能はチップの特別な機能を必要としていないので、NCI対応のNFCチップを搭載しているAndroid端末なら、Android 7.0にアップデートすれば、HCE-Fを使えるようになるみたいです。

# 参考
* ケータイ用語の基礎知識 第772回：HCE-Fとは
 * http://k-tai.watch.impress.co.jp/docs/column/keyword/1019763.html
* [nfc]HCE-FはAndroid7から使える hiro99ma blog
 * https://hiro99ma.blogspot.jp/2016/09/nfchce-fandroid7.html 
* AN11690 NXP NCI Android Porting Guidelines
 * http://www.nxp.com/documents/application_note/AN11690.pdf
gitLibとかgitよく使うコマンド

https://jp.linux.com/Linux%20Jp/tutorial/429196-tutorial2015050701

サーバー側

```shell-session
cd パス/プロジェクト名.git
git --bare init
```

ローカル

```shell-session
git init
git add <filename>
git commit -m "初めてのコミット"
git remote add origin ssh://git@ホスト:パス/プロジェクト名.git
git push origin master

```

強制的にプルする

```shell-session
git fetch origin
git reset --hard origin/master
```

普通にプル

```shell-session
git pull --rebase origin master
```

コンフィグファイルなど、普段はpushしたくないけど、必要な時pushしたい

```shell-session
#設定
git update-index --skip-worktree コンフィグファイル
#設定解除
git update-index --no-skip-worktree コンフィグファイル
```

変更されたファイル一覧

```shell-session
git status
```
環境構築tomcat



java install
http://zero-config.com/centos/install-java8.html

tomcat
	
http://weblabo.oscasierra.net/installing-tomcat7-on-redhat/

SELINUX
Permissiveモード
http://park1.wakwak.com/~ima/centos4_selinux0001.html

ポート開放
http://qiita.com/khirose/items/77f9071a70d94700db3e


tar展開
tar xvf ファイル名.tar

sudo yum install *.rpm


yum remove mariadb-libs
rm -rf /var/lib/mysql/
mysql-community-common.x86_64 0:5.7.15-1.el7
mysql-community-libs-5.7.15-1.el7.x86_64
mysql-community-client-5.7.15-1.el7.x86_64
mysql-community-server.x86_64 0:5.7.15-1.el7



http://weblabo.oscasierra.net/mysql-57-init-setup/
パスワードなどの設定

mail

yum localinstall mysql-community-libs-compat-5.7.15-1.el7.x86_64.rpm

http://www.unix-power.net/centos7/postfix.html


smtp

http://tech.respect-pal.jp/mail_debug_with_mailcatcher/
http://qiita.com/satzz/items/0361a7093a57b459e15b
http://qiita.com/tokida/items/2aa7dae82aa969f10420
http://d.hatena.ne.jp/plasticscafe/20080930/1222778825
yum install sqlite-devel
pdf to jpeg


pdfをjpegに変換するツール

```shell-session
yum install poppler-utils
pdftoppm
```


phpから使えるようにする
https://github.com/waarneembemiddeling/php-pdftoppm/blob/master/src/PdfToPpm.php


サムネールも作る
http://yokensaka.com/centos/?p=316


サムネール作って
```shell-session
convert -thumbnail 115x163 in_file out_file
```

縦につなげる
```shell-session
convert -append 画像1 画像2 画像3 出力画像
```

参考
http://qiita.com/foo9/items/f930358d379c0fa9ceb5
ssh関連のパーミションまとめ



何かと迷うのでまとめときます。


`~/.ssh` > 700
`~/.ssh/autholized_keys` > 600
`~/.ssh/config` > 600
`~/.ssh/id_rsa` > 600
`~/.ssh/id_rsa.pub` 644
`~/.ssh/known_hosts` 644


### おまけ - ~/.ssh/confgの例

* 私のBitbucket接続用の例です

```
Host bitbucket.org
  User git
  HostName bitbucket.org
  IdentityFile ~/.ssh/id_rsa_to_bitbucket
  IdentitiesOnly yes
```
CentOS6に最新のredisをインストールする

### 何があったか（経緯など）
CentOS の yum経由で入れたredisが古く、
```
error msg :ERR unknown command 'SCAN'
```
が表示されて困った

調べたところ、まんまgistに解決策が上がっていて解決したので記録として残すことにした

### 解決策
最新のredisをインストールする

### インストール
```
rpm -Uvh http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm

yum --enablerepo=remi,remi-test install redis
```

以上、解決。

### 参照サイト
Install Redis on Centos 6 · GitHub : https://gist.github.com/nghuuphuoc/7801123
2･8･16進数　Javaの問題をTypeScriptにしてみる2-2

次の中からコンパイルエラーになるものを選びなさい。

A. int a = 267;
B. int b = 0413;
C. int c = 0x10B;
D. int d= 0b100001011;
E. int e = 0827;

答えはEになります。
0を先頭にした場合8進数になるので827の8は表現できません。

これをTypeScriptにするとこのようになります。

A. a:number = 267;
B. b:number = 0o413;
C. c:number = 0x10B;
D. d:number = 0b100001011;
E. e:number  = 0o827;

8進数の取り扱いの問題なので、もちろんTypeScriptでも答えはEです。

この表記はTypeScriptと言うよりも元のjavaScriptの物です。
注目するべきは８進数の0o827という表現です。
javaの0を頭文字につける形だと、１０進数の0うめと差がわかりづらいので少しわかりやすくされています。
ちなみにoはオクタの略です。
2時間で学ぶ React ハンズオン に参加した記録

## リンク
http://sha.connpass.com/event/39791/

## PR
勝尾寺ハッカソン　（2016-09-17~18）
http://www.innovation-osaka.jp/katsuojihack/

## 5 分でなんとなくわかる React

### JSの３つの大きな転換点

### Ajax
- JS での非同期通信
- 2005年代
- DOMを書き換えることが日常という文化
- Prototype.js
   - Ajaxやるならこれ
   - jQuery との戦争

### HTML5 & Node
- モジュール化
- たくさんのフレームワーク

### 戦争の収束（モダンJavascript）
- コンパイルして使う
- オブジェクト指向
- ライブラリはモジュールとして使う

## React とは
UIを作るためのライブラリ

### コンポーネントって？
- データ
- テンプレート
- イベント

をひとまとめにする

## コンポーネントのいいところ
再利用性が高い
→規模が大きくなったらどうなる？
→そこで flux の登場

## fluxとは
コンポーネントを管理する設計手法（概念であり、実装ではない）

### 実装の例
- fluxible
- fluxxor
- reflux

## 開発環境の説明

- react -> Reactコア
- react dom -> DOM レンダリングを行う部分
- watchfy -> ファイル監視。自動ビルド
- babelify -> babel の browserify用パッケージ
- もろもろ

## React 用語

- コンポーネント（いいねボタンを例に）
    - ボタン（クリック） -> event
    - いいね数 -> State
    - 親から受け取ったもの（クラス名や値など） -> props

### Virtual DOM とは

- 仮想DOM 
- 書き換わる前と後の diff だけを書き換える -> 早い！

## ハンズオン
https://github.com/Lebe-Inc/react-handson-vol0/

- lv1 ブランチ -> ブロックをクリックしてコインを出すゲーム
- lv2 ブランチ -> TODO リスト

※ lv2 ブランチは ひな形が準備されているので、作っていく。
※ lv2-comp ブランチは 完成形


### lv2 の解説
- bandle.js -> コンパイル後のJSファイル
- package.json に設定が書かれている
- script の部分で「どのJSファイルを元に どんな名前でJSファイルを出力しなさい」という設定を書いてある。
- flux ライクな書き方をしているので、これを見ながらflux になれることができる

## React CSS 
JS オブジェクトのようにスタイルを書き、コンポーネントにスタイルタグを使って読み込ませることで、CSS セレクタなどを使用せずにスタイルを当てることも出来る。

## コラム
なぜJSがフレームワークも含めて盛り上がるの？
→高機能なサーバを１つ手に入れるには高いお金が必要だが、クライアントはどんどんとスペック成長が見られるし、そのリソースを利用する方がサービス提供側は安くつくためでは？
ローカルサーバーを立ち上げて、LiveReloadさせる時のメモ

さっとローカルサーバーを立ち上げて、LiveReloadさせたい時のメモ。

`browser-sync`を使う。
まずは作業場所で、browser-syncのインストール。

```shell-session
$ npm init -y
$ npm i -D browser-sync
```

package.jsonにシェルを追記する。

```json
"scripts": {
  "start": "browser-sync start --server --files '**/*'"
},
```

npm startで、ローカルサーバーが立ち上がり、LiveReloadが開始される。

```shell-session
$ npm start
```

オプションを付け足したい場合は、下記から。
https://www.browsersync.io/docs/command-line#start
Laravel5でroute(web.php)を正しく設定してもNot foundになる場合の対処法

	Route::get('/dir', function () {
	    return view('welcome');
	});

で、http://sample.jp/dir
としても、Not foundになることがある。

その場合は、httpd.confを編集してApacheを再起動する。

たとえば、公開ディレクトリのパスが

	/home/laravel/public

の場合は、

	<Directory "/home/laravel">
	    #AllowOverride None
	    AllowOverride All
	</Directory>

	<Directory "/home/laravel/public">
	    # AllowOverride None
	    AllowOverride All
	</Directory>

とする。
OctoberCMSでもIDE補完

結局Laravelのための補完機能を入れるわけですが、少し異なるところもあるので、OctoberCMSでの開発の一つとして書きます。

OctoberCMSはLaravelベースなので、当然Laravelのファサードを多用します。しかし、ファサードの実態がどのクラスでどんなメソッドを持つかなど、毎回ソースコードやメモを辿って調べるのは面倒です。
なので、EclipseなどのIDEにそこは補完してもらいましょう。

barryvdh/laravel-ide-helper（[packagist](https://packagist.org/packages/barryvdh/laravel-ide-helper), [github](https://github.com/barryvdh/laravel-ide-helper)）を使います。

### 手順
こちら「[OctoberCMSの導入](http://qiita.com/pikanji/items/7017e4264d960db27210)」のようにcomposerを使ってOctoberCMSを入れていれば、プロジェクトのルートディレクトリで下記を実行すれば必要な依存パッケージもすべてインストールしてくれます。

```bash
$ composer require --dev "barryvdh/laravel-ide-helper"
```

そして、設定ファイル`config/dev/app.php`の`providers`に下記のように追記します。開発環境のみで有効にするため、`config/app.php`の`providers`をオーバーライドします。`config/app.php`の`providers`に記述されていたものもすべて含める必要があります。

```php:config/dev/app.php
'providers' => array_merge(include(base_path('modules/system/providers.php')), [
    // ...
    Barryvdh\LaravelIdeHelper\IdeHelperServiceProvider::class,
]),
```

#### ファサードの補完
下記コマンドで一発です。

```bash
$ php artisan ide-helper:generate <output_filename>
```
`<output_filename>`で指定した名前のファイルが生成され、補完が効くようになります。
`<output_filename>`を省略した場合、デフォルトの`_ide_helper.php`という名前でファイルが生成されます。

##### エラーになる場合
自分の場合、実行したらこんなエラーに遭遇しました。

```
[Symfony\Component\Debug\Exception\FatalThrowableError]
Class 'League\Flysystem\AwsS3v3\AwsS3Adapter' not found
```

これは[こちら](https://github.com/barryvdh/laravel-ide-helper/issues/184)で説明されていますが、`config/filesystems.php`の`default`で`s3`を指定しているのが原因でした。一旦`local`に設定して上記コマンドを実行することでうまくいきました。

#### モデルクラスの補完
laravel-ide-helperはデフォルトで`app/models`ディレクトリにモデルクラスを探しに行くので、OctoberCMSの場合、プラグイン内のmodelsディレクトリを指定してやらなければなりません。

```bash
$ php artisan ide-helper:models --dir="plugins/<auther_name>/<plugin_name>/models" --dir="plugins/<auther_name>/<another_plugin>/models"
```

`--dir`でモデルクラスが格納されているディレクトリを指定します。
`--dir`は複数指定することができます。

これで、`_ide_helper_models.php`というファイルが生成され、補完が効くようになります。

### その後
パッケージを更新したり、モデルクラスを更新したりしたら、再度これらのコマンドを実行してファイルを更新する必要があります。

`composer.json`の`script`にイベントフックを記述すれば、`composer update`や`git commit`などのタイミングで自動的に更新をかけることができるようですが、それはまだ試してません。
技術英語 > 以前は（これまでは）～だった > Previously ～

`:h vim8` より

> Previously windows could only be accessed by their number.
以前はウィンドウはウィンドウ番号でしかアクセスできなかった。

`previously`を辞書で引くと「前もって、あらかじめ」という意味が出てくるが、この例文のように「以前は」という使い方もできる。

`formerly`もほぼ同じように使える：

> Formerly all dyes came from nature.
昔は染料はすべて天然のものであった.

参考：
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1117994416
技術英語 > This can cause big trouble to [the unwary]. / Be [wary] of a loop with a lot of breaks scattered through it. / It happens.

@ C++ Coding Standards: 101 Rules, Guidelines, and Best Practices by Herb Sutterら (No. 1473 / 6406)

> This can cause big trouble to <font color=red>the unwary</font>.

http://eow.alc.co.jp/search?q=Unwary
> 不用心な、軽率な

<hr>

@ Code Complete (No. 12651 / 36077)

> <font color=red>Be wary of</font> a loop with a lot of breaks scattered through it.


<hr>
余談。

寝ぼけながらCode Completeと101rulesを見ていたらwaryとunwaryのキーワードが重なった。

こういうリンクが時々起きる。

こういうことあるよね。 ( <font color=red>It happens</font> ).

https://american-phrases.blogspot.jp/2012/08/it-happens.html
Windows10のクリーンインストールで躓きがちなこととその対策

# きっかけ

OculusHomeを、またUnrealEngineやUnityを使うべく窓10を購入してあったので、インストールしてみた。その時に躓いたことをメモ。

しかしOculusHomeには「CPUがショボい」と蹴られてしまった。

# 環境

* EFI **ではない**(たぶん無関係)
* プロセッサはAMDの(無関係)
* 繋がってるドライブ(認識順)
    * SSD(480GB)：Linuxで使用、GPTなはず
    * HDD(2TB)：だいたいはLinuxで使用、GPTなはず
    * SSD(120GB)：インストール先

# ドライブX パーティションX にWindowsをインストールすることはできません

### 原因

原因そのものは不明だが、調べた限りでは以下のどちらかの条件で出る。エラーメッセージはGPTかどうかだけを問題にしているような記述だが、これは大嘘だ。

* EFI環境でGPTじゃないドライブを指定
* EFIかどうかにかかわらずGPTのとき、パーティションテーブルを作成した環境そのままではない(他のOSでパーティションテーブルを作った場合も含む)

どうやら「窓のシグネチャがないパーティションテーブルは認めない」ということらしい。

### 対策

該当ドライブのパーティションを全部削除してインストーラのものでもいいので窓のパーティショナでパーティションテーブルを作り直す。

# 新しいパーティションを作成できなかったか、既にあるパーティションが見つかりませんでした

### 原因

窓にリムーバブルでないストレージとして認識されるリムーバブルドライブがあること。USBメモリとかSDとかの一部とか外付けHDDなんかが該当する。

パーティショナーはドライブを直接認識しているのでHDDやSDDしか認識しないが、このエラーを出しているインストーラーはドライブレターで認識しているのでそういうストレージが認識されてるとドライブレターがずれて認識できなくなるというマヌケな原因のようだ。この問題は窓7以降ずっと存在するのでMSはこれを直す気はないっぽい。

### 対策

そういうドライブを外すのが基本だが、まさにそういうUSBメモリでインストールしている場合はそうもいかないのでその場合の対策を記す。

0. パーティションを切る(ここまでは普通に)
1. Shift-F10を押してコマンドプロンプトを出す
2. diskpart
3. list diskでドライブ一覧を表示
4. select disk xでインストール先のドライブを選択(xはドライブ番号)
5. list partitionでパーティション一覧を表示
6. select partition xでパーティションを選択(xはパーティション番号)
7. activeでそのパーティションから起動できるようにする
8. assignでパーティションにドライブレターを与える
9. list volumeでドライブレターを見る(インストール先とインストーラが入ってるストレージのドライブレターを覚えておく。以後仮にインストーラをX、インストール先をYとしておく)
10. exit
11. xcopy X:\*.* Y:\ /s /e /f
10. exit
11. インストーラのストレージを外して再起動(起動ドライブはインストール先)
12. インストーラが起動するのでそのままインストール

ごちゃごちゃしてるがインストール先パーティションにインストーラをコピーするのがキモ。それからインストール後に何も言わずに数回再起動するので慌てずそのまま進める。

# 総じて

インストーラが不親切。Linuxの各種ディストロのインストーラの方がずっと親切。OEMの方が多いからだろうけど。
Sierra の iCloud-KeyValueStore に不具合あり <- 10.12.1 bata3 で解消！

-- 10/22 更新
現行リリース・バージョン macOS Sierra 10.12 (Build:16A323) でも同様の不具合があります。
しかし 10.12.1 beta 3 (Build:16B2338c) ではエラーは発生しません。

--
近日中にリリースされる macOS(10.12) Sierraですが、GM では NSUbiquitousKeyValueStore に不具合があります。
macOS/OSX で NSUbiquitousKeyValueStore を使用されている場合、最終版 Sierra での確認をお勧めします。
## 現象
* NSUbiquitousKeyValueStore.defaultStore().Synchronize() で常に false(error) を返す。
* iCloud 側に変化があっても  NSUbiquitousKeyValueStoreDidChangeExternallyNotification が通知されない。

## 実験環境
* ハード/OS
 1 iMac (OSX EI Capitan 10.11.6)
 2 Parallel:VM (OSX EI Capitan 10.11.6 Bata 15G26a)
 3 MacBook Air (macOS Sierra 10.12 Bata8 16A313a)
 4 IPhone5実機 (iOS9.3.5)
 5 iPhone6実機 (iOS10.0 Beta8 16A313a)

* テストアプリ
1 当方作成のテストプログラム(swift)。1-5の組み合わせで, 3以外は相互通信可能。3のみNG。
2 Apple謹製サンプルプログラム([PrefsInCloud](https://developer.apple.com/library/content/samplecode/PrefsInCloud/Introduction/Intro.html#//apple_ref/doc/uid/DTS40011365):ObjC)改造版。1,2,3で実験。結果も同様。
  開発環境 Xcode8 Bata6(8S201h) + Swift2.3.

## 追記
* 本日 Apple Developer Technical Support (DTS) より、「エンジニアリングチームは(現象が)我々の側の問題と考えられ」「対策に取り組んでいる」旨、連絡がありました。ほぼ不具合と確信できたので報告します。
* Bug Repoter も発行しています。
* Sierra での仕様変更や Swift バージョン差異などを疑い、確認が遅れました。
* フォーラムにも上がっています(tacoは小職です)。[Unable to Sync with NSUbiquitousKeyValueStore on Sierra](https://forums.developer.apple.com/message/159555#159555) ,[Re: NSUbiquityIdentityDidChangeNotification not sent on Sierra GM](https://forums.developer.apple.com/message/177522)
* フォーラムではあまり騒ぎになっていません。世の中では iCloud-KeyValueStore (macOS版) をあまり使わないのかな？ちなみに小職は MKiCloudSync を Swift で書き直す過程でドハマリしました。
openvpnで接続しているクライアントのIPアドレスを見る

# openvpn status log

```
cat /etc/openvpn/openvpn-status.log
```
※ Ubuntu Xenialで確認済み

----

**または**

----

# openvpn telnet management

server.confで
```
management localhost 7505
```

```
telnet localhost 7505
help
```
してコマンドを確認

http://serverfault.com/questions/571592/how-to-view-connected-users-to-open-vpn-server
Pseudo-countを学習させてみる

過去１０回でパソコンを自作した後に、Ubuntu14.04、CUDA、cuDNN、chainer、dqn、LIS、Tensorflow、OpenAIGymを順次インストールし、いくつかモデルを走らせた。特に前回はDeep PredNetを学習させた。
http://qiita.com/masataka46/items/9c40013b08cd9703edf7

今回は飯塚氏が作成したPsedo-countコードでatari2600ゲームを学習させてみる。
M. Bellemare氏らのPseudo-count論文はこちら。
https://arxiv.org/pdf/1606.01868v1.pdf
飯塚氏のGitHub上のコードはこちら。
https://github.com/Itsukara/async_deep_reinforce
上記論文の内容に加えて、いろいろアイデアを入れているようだ。

##環境
CPU:Corei7 6700K
GPU:GTX1070
SSD:240GB
HDD:1TB
マザーボード:ASUS H170-pro
OS:Ubuntu14.04 LTS
python:2.7.6
CUDA:8.0 RC
cuDNN:5.1
TensorFlow:0.10.0
など

まずREADMEに従って環境を整える
##Anacondaのインストール
ここのサイト
http://morimori2008.web.fc2.com/contents/PCprograming/python/pythonAnaconda.html
に従って、Anacondaをインストールする。

```
wget https://3230d63b5fc54e62148e-c95ac804525aac4b6dba79b00b39d1d3.ssl.cf1.rackcdn.com/Anaconda2-2.4.1-Linux-x86_64.sh
sudo su
bash Anaconda2-2.4.1-Linux-x86_64.sh
source /root/.bashrc
```

##opencv3のインストール
このサイト
http://qiita.com/bohemian916/items/23abea5ef9fadcc8bce0
を参考にopencv3.1.0をインストールする。まずはパッケージをダウンロードしてきて解凍。

```
~/work/download
wget http://downloads.sourceforge.net/project/opencvlibrary/opencv-unix/3.1.0/opencv-3.1.0.zip
unzip opencv-3.1.0.zip
```

次にrequirementをインストールする。既に入ってるものもあるかもしれないが、上記サイトのコマンドをコピペで実行。

```
sudo apt-get install build-essential libgtk2.0-dev libjpeg-dev libtiff4-dev libjasper-dev libopenexr-dev cmake python-dev python-numpy python-tk libtbb-dev libeigen3-dev yasm libfaac-dev libopencore-amrnb-dev libopencore-amrwb-dev libtheora-dev libvorbis-dev libxvidcore-dev libx264-dev libqt4-dev libqt4-opengl-dev sphinx-common texlive-latex-extra libv4l-dev libdc1394-22-dev libavcodec-dev libavformat-dev libswscale-dev default-jdk ant libvtk5-qt4-dev
```

cmakeディレクトリに移動して設定。

```
cd opencv-3.1.0/cmake
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_TBB=ON -D BUILD_NEW_PYTHON_SUPPORT=ON -D WITH_V4L=ON -D WITH_FFMPEG=OFF -D BUILD_opencv_python2=ON ..
```

コア数が必要らしい。

```
grep -c ^processor /proc/cpuinfo
8
```

コア８個でmakeする。

```
make -j8
```

すると以下のようなエラーが出て８１％で止まった。

```
make[2]: *** [modules/cudalegacy/CMakeFiles/opencv_cudalegacy.dir/src/graphcuts.cpp.o] エラー 1
make[2]: *** 未完了のジョブを待っています....
make[1]: *** [modules/cudalegacy/CMakeFiles/opencv_cudalegacy.dir/all] エラー 2
make[1]: *** 未完了のジョブを待っています....
Linking CXX shared library ../../lib/libopencv_photo.so
[ 81%] Built target opencv_photo
make: *** [all] エラー 2
```
【Git-Flow】git-flowのリリース作業手順メモ

git-flowのリリース時に使うコマンドを忘れるのでメモる。

# git-flowのインストール

https://github.com/nvie/gitflow/wiki/Linux#other-linuxes

# 準備

やってなければ

```
git flow init
```

聞かれることは全部デフォルトのままでOK。

最新のdevelopになっていることを確認する

```
$ git checkout master
$ git pull -ff origin master
$ git checkout develop
$ git pull -ff origin develop
```

# リリース


```
$ git flow release start 1.0.0 // 開始。releaseブランチに移る。
$ vim CHANGELOG.md  // CHANGELOGを編集する。変更点とか書く。
$ git add CHANGELOG.md
$ git commit -m "bump version"
$ git flow release finish 1.0.0  // 終了。masterと　developにマージされる
```

とにかくpushする

```
$ git push origin develop
$ git push origin master
$ git push origin 1.0.0 // タグもpush
```

# 参考

http://danielkummer.github.io/git-flow-cheatsheet/
Sublime Textのウィンドウを透過させる

業務中にちょっと関係ないサイトみたりして若干背後が気になる時ありますよね。
知り合いのエンジニアがエディタを透かして動画観てたと言ってて早速導入、手順のメモ
隙間時間の可能性が広がります。

### 環境

- Windows
- packagecontrolが入ってる前提

## パッケージのインストール
`Ctrl` + `Shift` + `P`でpackage control: install package 選択、
GlassItを検索してインストール
サイトはhttps://packagecontrol.io/packages/GlassIt


ただしこのままだと動かないのでメニューバーの"View"->"Show Console"でコンソールを開いて確認

`Cannot find SetTransparency.exe! Please download and put into sublime path.`
SetTransparency.exeをダウンロードしろって言われてますね。

[https://github.com/ivellioscolin/settransparency/tree/master/binary](https://github.com/ivellioscolin/settransparency/tree/master/binary)からダウンロードし、SetTransparency.exeをsublimetextの実行ファイル`/C/Program Files/Sublime Text 3/sublime_text.exe`と同じ階層に配置

ここのパスを /C/Users/ユーザ名/AppData/Roaming/Sublime Text 3/
と勘違いしてハマった

すると`alt`とスクロールで薄くなります。

### 設定とコマンド

| key |   |
|:-:|:-:|
|`ctrl`+`alt`+`z`|透過増加|
|`ctrl`+`alt`+`c`|透過減少|
|`ctrl`+`alt`+`x`|デフォルト透過|

オンオフの切り替えは“Tools”->“Packages”->“Glass It”
設定変更は“Preferences”->“Package Settings”->“Glass It”
【修正済】iOS10でUnityAdsの動画広告が表示されなくなっていた件..(全体の15%?)

# 2016年9月のある日..
意気揚々とiOS9からiOS10に更新して自分のアプリをチェックしたら
UnityAdsで動画が全く再生されない状態になっていました。


# ログを出した

https://docs.unity3d.com/ja/current/ScriptReference/Advertisements.Advertisement-debugLevel.html

```
Advertisement.debugLevel = Advertisement.DebugLevel.Debug;
```

上記のコードを埋め込みiOS10で実行しました。


```iOS10
 Requesting Unity Ads ad plan from [なにかのURL]?platform=ios&gameId=[秘密]&sdkVersion=1506&macAddress=[秘密]&rawAdvertisingTrackingId=00000000-0000-0000-0000-000000000000&advertisingTrackingId=[秘密]&trackingEnabled=0&softwareVersion=10.0.1&deviceType=iPhone6,1&connectionType=cellular&unityVersion=5.3.4f1&encrypted=false
 [T:0x706766c0 S] -[UnityAdsInitializer initAnalyticsUploader]:105
not found
 
(Filename: /Users/builduser/buildslave/unity/build/artifacts/generated/common/runtime/UnityEngineDebugBindings.gen.cpp Line: 37)

DEBUG [T:0x706766c0 S] -[UnityAdsCampaignManager _processCampaignDownloadData]:100 {"responseCode":200,"status":"error","errorCode":"50051","errorMessage":"Cannot create gamer without required identifications."}
```

初期化時にrawAdvertisingTrackingIdが00000000-0000-0000-0000-000000000000でサーバーからエラーコードが返っていました。

調べた所、iOS10から追跡型広告制限が強化され、
「設定 > プライバシー > 広告 > 追跡型広告を制限:ON」にしているユーザはIDが0になるようです。
UnityAdsではこのユーザに対してエラーコード50051をだすようです。

<img width="180" alt="IMG_6752.PNG" src="https://qiita-image-store.s3.amazonaws.com/0/19692/b3b1da55-f7aa-990f-da4f-b907e1591ea1.png">

さらに調べた所、この設定をONにしているユーザは15%〜20%くらいとのこと。

参考)
https://www.tune.com/blog/attribution-ios-10-limit-ad-tracking/
https://fpf.org/2016/08/02/ios-10-feature-stronger-limit-ad-tracking/
https://forceoperationx.theblog.me/posts/1187052

ちなみにUnity5.3.4f1, Unity標準ServiceのUnityAdsで発生しました。

ネット上で発狂している人もおらず、
バージョンアップで解決するかもしれないです。

(つづく)

【追記】
2016/9/28 現在この問題は発生中です。
以下unity forumに今後の進捗など記載あります。
https://forum.unity3d.com/threads/unity-ads-1-x-and-2-x-not-working-for-ios-10.430226/

【追記の2】
2016/9/29 追跡型広告制限時も動画広告が再生されるように修正されたようです。 良かった!
Atomでブルーライトを削減してみる

まず *『ホントにブルーライト削減できてんのか』* という話は野暮ってモンで :bow:

Atom のスタイルシートに 1 行足すだけで、ブルーライト削減フィルター的なモノができそうだったので書いてみました。
コレくらいなら、パッケージとかテーマとか入れるほどでも…って感じです。

### こんな感じ

![](https://cloud.githubusercontent.com/assets/3993388/18557927/e2bdd8c2-7bab-11e6-89f8-48f81cf5b7f1.gif)

```less:styles.less
atom-workspace {
  -webkit-filter: brightness(90%) sepia(25%);
}
```

気分的なモノかもしれませんが、白系のテーマのギラつく感じは抑えられるかと。
フィルタの強さはお好みで調節してくださいネ。

黒系のテーマの場合でも、見た目の違和感があまり無いので、家のPCでは常用してます。

### こんなヒトにお勧め？

例えば、*"デザイナーがコーディングもする"* ようなシーンで、*『スクリーン全体の色を変えたくない！』* っていう需要も、あるにはあるんじゃないかなーと踏んでます。

でも、このCSSで効果があるかは未知数なので、マトモに対策したいなら [f.lux](https://justgetflux.com/) あたりを入れるか、[素直にメガネを買いましょう。](http://www.jins.com/jp/jins-screen/)
[Unity]RigidbodyのDragから終端速度を得る

Unity の Rigidbody に Dragと一定外力が与えられたときの、終端速度(terminal velocity)を出してみよう。

#実装

通常の運動方程式をプログラムで書くと、次のようなコードになる。

```csharp
void update() {
    float a = F/m;   // 加速度は外力F割ることの質量m
    v = v + a*dt;    // 速度に加速度×Δtを足す
    x = x + v*dt;    // 位置に速度×Δtを足す
}
```

簡単。シンプル。美しい。今回は理論の話になるので += 演算子はあえて使わないでおく。
で、Unity では抵抗力として Drag というのがある。この記事は数式が多いので、わかりやすいようにカタカナでドラッグと呼ぼう。
このドラッグの値を k とおく。以下頻繁に出てくる k はドラッグだよ。覚えといてくださいね。

んでドラッグの影響について、Unityでは次のようなコードで実装されている。けっこう自信ある。

```csharp
void update() {
    float a = F/m;
    v = v + a*dt;
    v = v * (1f - k*dt);  // これ。k は Drag
    x = x + v*dt;
}
```

増えた行がドラッグの適用だ。このようにドラッグは抵抗力という定義にもかかわらず外力として扱われておらず、速度を直接補正している。
なぜこんなことをしているかというと、ドラッグは逆方向に力を発生させるので、ドラッグが大きな値でなおかつΔtも大きい場合に発散してしまうケースがあるからだ。とくに強いバネを扱うと、簡単に発散する。抵抗の適用を遅らせることで、同フレームの速度を参照することができるので、発散を抑制することができる。ぼくもかつて自分のプロジェクトで発散に悩まされて、この方法に辿り着いた。
抵抗力が力として実装されていないおかげで解析はけっこう面倒なことになるのだけど、頑張って解いてみよう。

#解析

##抵抗式の外力換算

プログラムの
v = v * (1f - k*dt);
に注目すると、ドラッグ k は毎フレーム -v*k の加速度を発生させているのと同義だ。という理解で、以下ドラッグによる影響を外力に換算する。

```math
v' = v(1-k\Delta t) 　・・・・・・(1)\\
(1)より、 \\
v' = v - vk\Delta t \\
v を移項して　\\
v'-v = -vk\Delta t \\
v' は計算後、v は計算前なので v'-v は \Delta v の意味になるから \\
\Delta v = -vk\Delta t \\
\Delta t で両辺を割って　\\
\frac{\Delta v}{\Delta t} = -vk \\
左辺は加速度の意味になるので、運動方程式 F = ma よりドラッグの影響力 F_{k} は\\
F_{k} = m\frac{\Delta v}{\Delta t} = -mvk ・・・・・・(2)\\
```
やったね。これでドラッグkが及ぼす外力は、 -mvk （質量と速度とドラッグを乗算して符号を反転させたもの）であることがわかった。

##運動方程式の解析

次はドラッグと一定の外力が加わったときの運動方程式を立て、終端速度を導く。

```math
ma = F \\
いわゆる運動方程式。このFに一定の外力 F_{0} とドラッグの F_{k} を入れて\\
ma = F_{0} + F_{k} \\
F_{k}を先ほどの結果(2)で置き換えて、\\
ma = F_{0} - mkv \\
両辺をmで割って\\
a = \frac{F_{0}}{m} - kv \\
加速度を速度の微分で表すと \\
\frac{\Delta v}{\Delta t} = \frac{F_{0}}{m} - kv \\
右辺をvの係数でくくると \\
\frac{\Delta v}{\Delta t} = -k(v - \frac{F_{0}}{mk}) \\
vに関する項で両辺を割ると\\
\frac{1}{v-\frac{F_{0}}{mk}} \frac{\Delta v}{\Delta t} = -k \\
\Delta tを右辺に移して \\
\frac{\Delta v}{v-\frac{F_{0}}{mk}} = -k \Delta t \\
両辺を積分して \\
\int{\frac{\Delta v}{v-\frac{F_{0}}{mk}}} = \int{-k \Delta t} \\
積分を計算して \\
\ln{|v-\frac{F_{0}}{mk}|} = -kt + C \\
logを展開して \\
v-\frac{F_{0}}{mk} = \pm{e^{-kt+C}} \\
v について解くと \\
v = \frac{F_{0}}{mk} \pm{e^{-kt+C}} \\
\lim_{t \to \infty}{\pm{e^{-kt+C}}} = 0 より \\
\lim_{t \to \infty}{v} = \frac{F_{0}}{mk} ・・・・・・(3)\\
```
というわけで一定の外力が加わったときの終端速度を求めることができた。

##補正

が！まだ終わらない。最初に述べたドラッグの変則的な適用は、１フレーム未来の速度を計算していることになるため、１フレーム分の補正が必要となる。
ドラッグの式を再び適用する。

```math
(1)を再び\\
v' = v(1-k\Delta t) \\
vに先ほど(3)で算出した終端速度を代入して \\
v' = \frac{F_{0}}{mk}(1-k\Delta t) \\
```

このv'が、正真正銘の終端速度になる。ばんざい。

#検証

逆に、目的の速度に収束させようと思った場合の外力は、上式を変形して

```math
F_{0} = \frac{mkv'}{1-k\Delta t} \\
```

こうなる。この式を実際のプログラムで試してみよう。

```csharp
void FixedUpdate()
{
　　　　　　　　var rb = GetComponent<Rigidbody>();
　　　　　　　　var target_velocity = new Vector3(10f, 0f, 0f); // 10m/s の速度が目標
　　　　　　　　rb.AddForce(target_velocity*rb.mass*rb.drag/(1f-rb.drag*Time.fixedDeltaTime));
　　　　　　　　Debug.Log(rb.velocity.magnitude);
}
```

これをRigidbodyを持つ適当なオブジェクトに適用する。再生しながら drag や mass を変更しても、速度は変わらないことが確認できる。AddForceに渡す値が正しく調整されているからだ。そしてその速度は狙った通りの値になる。理屈と現実が一致するこの嬉しさよ。めでたしめでたし。
OPAM 1.2.2を使っている人がfishを使い始めるときの注意点

fishというシェルがどうやら良いらしいということでbashから乗り換えてみましたが、色々と問題が。

Homebrewで提供されているOPAMの安定版の最新バージョンは1.2.2ですが、OPAM 1.2.2のfish用の設定ファイルに誤りがあり、場合によってはfishシェルが正しく動作しなくなる場合があるので、書き残すことにしました。

ちなみに、OPAMのバージョンが古すぎる場合は、fish用の設定ファイル自体が存在しないこともあるので気をつけてください。


# config.fishの設定
~/.config/fish/config.fishに以下の一行を追加して下さい（.opam/がホームディレクトリ以外の場所にある場合は適宜修正して下さい）。


```fish:config.fish
source ~/.opam/opam-init/init.fish > /dev/null 2> /dev/null; or true
```

これがないと、OPAMでインストールしたパッケージがうまく実行されません。

# variables.fishの変更
init.fishは単にvariables.fishを呼び出しているだけですが、variables.fishに誤りがあるため、<font color=red>config.fishの変更だけを適用すると、fishシェルが正しく動作しなくなるので気をつけて下さい。</font>

ということで、~/.opam/opam-init/variables.fishの1行目と4行目をそれぞれ以下のように修正して下さい。

```fish:variables.fish
1 set -gx PATH ~/.opam/system/bin $PATH;

4 set -gx MANPATH "$MANPATH" ~/.opam/system/man;
```


注意すべきは、`$MANPATH`はダブルクォーテーションで囲まれていますが、`$PATH`は囲まれていないという点です。

`$PATH`をダブルクォーテーションで囲むと$PATHが`~/.opam/system/bin`で上書きされてしまい、OPAMでインストールされたパッケージのコマンド（とexit）以外は実行できなくなります。
一方、`"$MANPATH"`のダブルクォーテーションがないと、OPAMのマニュアルが正しく追加されません。

この辺はfishスクリプトの仕様がアレな感じがしますが、fishスクリプトの文法に明るくないので、どうしてこうなってるのかはよく分かりません…。

ちなみに、追加するパスはダブルクォーテーションで囲まれていても囲まれていなくても大丈夫なようです。
Lambda pythonから S3 にアクセスできない？


## やりたいこと
1. S3にデータがアップされたらSNSからVPC内のLambdaを起動
2. 起動したLambdaにてアップされたデータをS3から取得し、内容をパース
3. パースした内容を ElasticSearchにインサート

## 問題点
2.の手順でLambdaからS3にアクセスしようと思ったら、以下のエラーが発生

```
Exception (<class 'boto3.exceptions.ResourceNotExistsError'>) : The 's3' resource does not exist.
The available resources are:
```

## 確認内容

1. S3へのPutイベントでSNSをPublishし、Lambdaが起動することはOK
2. VPC内のLambdaから外部のサーバにアクセスできることはOK
3. Lambdaにてimport boto3、import botocore もエラーなくOK
4. でも、boto3のresourceなどでアクセスすると、s3 resourceは存在しないって怒られる。

確認のため、boto3で ec2 resourceをアクセスしにいったら同様に ec3 resouceは存在しないと怒られる。

## boto3がおかしい？

Lambda Functionをデプロイする際、必要なパッケージをダウンロードしてzipでアップしている。この時、きちんとboto3、botocore両方とも以下のコマンドで含めている。

```
pip install boto3 -t .
```

#### もしかして、Lambda Function内のboto3がおかしい??

## やったこと
試しに、Lambda Functionパッケージ内から boto3とbotocoreを
削除する。

削除した状態で Lmabda FunctionをDeployし、S3にファイルをアップロード。すると、SNS経由でLambdaに通知されたS3のKeyからデータを取得することに成功。

boto3をzipに含めたことが原因だったようです。。

##参考
- http://qiita.com/ijin/items/94c0bc4b8f6f5e77a591
- http://qiita.com/m-sakano/items/c53ba194a8574f44e78a
- http://qiita.com/sokutou-metsu/items/47c00bb381e1b103e878#_reference-734313aae611eb61bfe7
Playframework + ScalikeJDBCでコネクションプールを使用する

# 注意
!!!自分用メモ!!!

正しいやり方かどうかはわからない

# 困ったこと

DBs.setupAll をやらないと

```
play.api.http.HttpErrorHandlerExceptions$$anon$1: Execution exception[[IllegalStateException: Connection pool is not yet
 initialized.(name:'default)]]
```

となるので、どこでやるべきなのか迷ったけど、Moduleを使って起動時にやればいいのかなと。

# ソースコード
https://github.com/FScoward/ticketman

# build.sbt
```
  // scalikejdbc
  "org.scalikejdbc" %% "scalikejdbc"                  % "2.4.2",
  "org.scalikejdbc" %% "scalikejdbc-config"           % "2.4.2",
  "org.scalikejdbc" %% "scalikejdbc-play-initializer" % "2.5.1",
```

# application.conf

```
play.modules {
  # By default, Play will load any class called Module that is defined
  # in the root package (the "app" directory), or you can define them
  # explicitly below.
  # If there are any built-in modules that you want to disable, you can list them here.
  #enabled += my.application.Module

  enabled += "org.flywaydb.play.PlayModule"
  enabled += "modules.DBInitializerModule"

  # If there are any built-in modules that you want to disable, you can list them here.
  #disabled += ""
  disabled += "play.api.db.DBModule"
}

db {
  # You can declare as many datasources as you want.
  # By convention, the default datasource is named `default`

  default.driver = com.mysql.cj.jdbc.Driver
  default.url = "jdbc:mysql://localhost:3306/ticketman?characterEncoding=utf8&serverTimezone=UTC"
  default.username = root
  default.password = ""

  default.poolInitialSize=10
  default.poolMaxSize=10
  default.poolValidationQuery="select 1 as one"
}
```

# Module

```scala
package modules

import com.google.inject.AbstractModule
import play.api.Logger
import scalikejdbc.config.DBs

/**
 * Created by Fumiyasu on 2016/09/15.
 */
class DBInitializer {
  DBs.setupAll()
  Logger.debug(s"db setup...")
}

class DBInitializerModule extends AbstractModule {
  def configure() = {
    bind(classOf[DBInitializer]).asEagerSingleton()
  }
}
```
「Chainerによる実践深層学習」がわかりやすかった話

#背景
これまでChainerやTensorflowのサンプルコードやチュートリアルを色々実行したり、色んなサイトや書籍読んだりでなんとなくディープラーニングというかニューラルネットについて理解した気でいましたが、日々進化していくディープラーニングのアーキテクチャを論文読んでコーディングしようと思うと途端にどうしていいかわからなくなってしまう状態でした。
そんなときたまたま書店で目にした
[「Chainerによる実践深層学習」Ohmsha 新納浩幸[著]](https://www.amazon.co.jp/Chainer%E3%81%AB%E3%82%88%E3%82%8B%E5%AE%9F%E8%B7%B5%E6%B7%B1%E5%B1%A4%E5%AD%A6%E7%BF%92-%E6%96%B0%E7%B4%8D%E6%B5%A9%E5%B9%B8/dp/4274219348/ref=sr_1_1?ie=UTF8&qid=1473952134&sr=8-1&keywords=chainer%E3%81%AB%E3%82%88%E3%82%8B%E5%AE%9F%E8%B7%B5%E6%B7%B1%E5%B1%A4%E5%AD%A6%E7%BF%92)
がとてもわかりやすかったのでそのメモ。

#意外と簡単な事に気づいた基本構造
今までbackwardやってoptimizer.update()までやるためにはclass定義して、Linearとかfunction使って…と非常に複雑でブラックボックスになっている事をやらなければいけないと思っていたんですが、全然そんな事はなくて例えば、

```
x1 = Variable(...
x2 = Variable(...
x3 = Variable(...

z = (x1 + x2)**2 + (x2 * x3)**2
z.backward()
```

なんてやるとりっぱに逆誤差伝搬処理してくれて

```
x1.grad
```
に値が入るとのことで、勝手に難しく考えすぎていたことに気づかされるなど一気にChainerの難易度を下げてもらった感じです。

またあまり他の書籍ではかかれない各層への入力値(x)、出力値（y）、および微分値(∂y/∂x)の関係がグラフで示されているなど全体の流れと扱われる数値の関係性が非常にわかりやすく、これならフレームワークに頼らなくても自分で一からコーディングできるんじゃないかと思えるくらい丁寧に解説してくれています。

#Word2Vec
さらにこの本のありがたい箇所がこのWord2Vecの章にありました。ChainerのsampleでWord2Vecを試してみようと思うとdownload.pyを実行するよう書いてあるんですが、現在このスクリプトが存在していなくて挙動を見たいと思っても自分でデータを用意する必要があります。私自身もちょうど困っていたんですが、なんとこの本download.pyのスクリプトそのまま掲載してくれていてこれでデータ入手可能です。ありがたや…


#RNN
と、ずっと順調にコード書きながら読んでいたんですが、RNNの評価（パープレキシティ）のところで詰まりました。p87-88のeval-rnn.pyが動かない。本の通りにコード書いてjupyterで実行してみたところ、

```
ValueError: could not broadcast input array from shape (10000,100) into shape (6049,100)
```
とか、これをクリアしても

```
NameError: name 'max_id' is not defined
```
なんてのが出たりします。
上のshapeで怒られているのはvocabについての事で評価したい(loadしている)modelのvocabサイズを与える必要があるようです。なのでひとまずp88のeval-rnn.pyのコードで

```
test_data = load_data('ptb.test.txt')
test_data = test_data[0:1000]
train_data = load_data('ptb.train.txt") #追記
...
```

というようにtrainデータをloadすることでvocabをtrainデータにしました。
※load_dataについてはp83のコードそのまま。

次にmax_idのエラーについてはなんの説明もなく唐突に出てきますが、これはその少し前のページ（p86-87）に未知語を含む文は評価から外す旨の事が書かれているので、trainデータのvocabサイズだと思われます。なので一旦loadの方法をtrainデータとtestデータで分けて、trainデータのloadの際にvocabからmax_idを求める事にしました。
変更点1:p83のコードにmax_idを追記

```
...
    vocab[word] = len(vocab)
  dataset[i] = vocab[word]
max_id = len(vocab)#追記
return dataset
```

変更点2:testデータload用の関数を用意

```
def load_test_data(filename):
    words = open(filename).read().replace('\n','<eos>').strip().split()
    dataset = np.ndarray((len(words),), dtype=np.int32)
    for i, word in enumerate(words):
        if word not in vocab:
            vocab[word] = len(vocab)
        dataset[i] = vocab[word]
    print len(vocab)
    return dataset
```

これで動かしてみた所
※load_test_dataの前にtrainデータを読み込んでおく必要があります。
　じゃないとvocabがmodel作成時とずれる。

```
199.959115477
```
とそれっぽいパープレキシティの値出てきました。

今現在Attentionの手前ぐらいまで読み進めていますが、非常にわかりやすいと思います。
ひとまずここまで。この先もなにかあれば追記予定。
Qiitaの記事ページで目次をコンテンツエリアにも表示するユーザースクリプト

## 動機
Qiitaには記事内容の見出しから目次をページ内リンクとして表示する機能があります。

ところがその目次、投稿ユーザーの「人気の投稿」や広告エリアの下に表示されるので、ある程度スクロールしなければ内容を確認できず、記事の中身を見る前に概要や規模をざっくり把握するのには使えません。

そこで、右側に表示される目次をコピーしてコンテンツエリア上部に表示するユーザースクリプトを作りました。

## インストール
ユーザースクリプト拡張をインストール後、
Chrome: [Tampermonkey](https://chrome.google.com/webstore/detail/tampermonkey/dhdgffkkebhmkfjojejmpbldmpobfkfo?hl=ja)
Firefox: [Greasemonkey](https://addons.mozilla.org/ja/firefox/addon/greasemonkey/)

下記URLのRawボタンから。
https://gist.github.com/mino0123/17b0b1ef8c323baeb9e41219ab95f311

## イメージ
----
![スクリーンショット 2016-09-16 0.06.41.png](https://qiita-image-store.s3.amazonaws.com/0/144/a735adf5-bffd-a982-ed61-f275dcff5881.png)

----

## ソースコード
```js
// ==UserScript==
// @name        Qiita_TOC_to_content
// @namespace   mino0123
// @include     http://qiita.com/*/items/*
// @include     http://qiita.com/*/private/*
// @version     1
// @grant       none
// ==/UserScript==

const subColumnEl = document.getElementsByClassName('col-sm-3')[0];

if (subColumnEl) {

  const observer = new MutationObserver((mutations) => {

    const tocTreeEl = document.getElementsByClassName('tocTree')[0];
    const contentEl = document.querySelector('.markdownContent.clearfix');// avoid slide
    const hasTocItem = tocTreeEl.getElementsByTagName('li').length > 0;

    if (tocTreeEl && contentEl && hasTocItem) {
      // Disconnect observer
      observer.disconnect();
      // Copy toc to content
      const cloneToc = tocTreeEl.cloneNode(true);
      cloneToc.className += ' tocToContent';
      contentEl.insertBefore(cloneToc, contentEl.firstChild);
      // Add styles
      const styleEl = document.createElement('style');
      styleEl.type = 'text/css';
      styleEl.innerHTML = `
                          .tocToContent {
                            width: 100% !important;
                            border: 1px solid #CCC;
                            font-size: 70%;
                          }
                          .tocToContent a {
                            display: inline !important;
                          }
                          `;
      document.head.appendChild(styleEl);
    }

  });

  observer.observe(subColumnEl, { childList: true, subtree: true });

}
```

* 2016/11/25 Qiitaの更新に伴って動かなくなっていたので修正
AWS再入門 ~序章編~

# 概要

これから何回かに分けて、AWSの再入門をしていきたいと思います。
AWSの資格(ソリューションアーキテクト【アソシエイトレベル】 & デベロッパー【アソシエイトレベル】)を取る為に、[本1冊](https://www.amazon.co.jp/Amazon-Web-Services-パターン別構築・運用ガイド-%E3%80%80一番大切な知識と技術が身につく-ebook/dp/B00UWCYRZK/ref=sr_1_3?s=digital-text&ie=UTF8&qid=1473839952&sr=1-3&keywords=aws)をきちっと勉強しようと思い、再入門する事にしました。
AWSの資格取得はWhitePaperを読むのが一番らしいですが、【本で勉強 + 使い倒す】でいきます。

# クラウドとは

そもそもクラウドとはなんでしょうか。

- コンピュータリソースの利用形態です。
- クラウドの命名由来は、「雲」(cloud)からきています。
	- 元GoogleのCEOエリック・シュミットがインターネットにアクセスして、様々なリソースを利用できる仕組みを雲に例えた事から広がったとされています。

# クラウドコンピューティングの種類

## IaaS(Infrastructure as a Service)
仮想サーバやストレージなどのリソースをインターネット経由で提供するサービス。
ハードウェアの管理が不要となる。
## PaaS(Platform as a Service)
データベースやアプリケーションサーバ等のミドルウェアをサービスとして提供する。
## SaaS(Software as a Service)
ソフトウェアやアプリケーションの機能をインターネット経由で提供するサービス。
メール配信やキューサービス、業務管理システムなど多岐に渡るサービスを提供する。

# オンプレミスとAWSの違い

## オンプレミス
- サーバを設備を用意した組織が所有者。
- 初期費用が高い。
- 調達時間がかかる。

## AWS

- Amazonが所有者
	- ユーザーはあくまでも利用者
- 初期費用が安い
- 調達時間がかからない

# 共用サーバと専用サーバと仮想専用サーバの違い

レンタルサーバとAWSの違いにも当てはまる内ようです。AWSはイメージとして、「仮想専用サーバの拡張版」という位置付けになります。

|-|**共用サーバ**|**専用サーバ**|**仮想専用サーバ**|
|---|----|---|---|
|**利用形態**|1台の物理サーバを分割して利用|1台の物理サーバを専有|1台の物理サーバ上に立てた仮想サーバを利用|
|**コスト**|安い|高い|中間|
|**カスタマイズ**|ほぼ不可能|可能|可能|
|**セキュリティ**|コントロール不可|高くコントロール可能|高くコントロール可能|
|**他のユーザーの影響**|強く受ける|受けない|多少受ける|

# パブリッククラウドとプライベートクラウド

クラウド形態の分け方には、 **パブリッククラウド** と、 **プライベートクラウド** があります。
両者のクラウドは、 **「誰に対してサービスを提供するか」** という点で違います。

AWSは原則として、パブリッククラウドですが、AWS VPCを利用する事により、「パブリッククラウドでもあり、プライベートクラウドでもある」を実現しています。

## パブリッククラウド

不特定多数の利用者に向けて提供されるサービスを指す。

## プライベートクラウド

特定の企業・組織専用に提供されるサービスを指す。
AWSでは、AWS VPCを利用する事で、企業ONLYなプライベートクラウドっぽいものを作成できる。

# 終わり

今回は序章として、AWSの勉強に入る前に、クラウドの概念について再入門しました。

次回以降は、AWSの各種サービスに関して勉強していきたいと思います。

続きは次回。
Slim 3 Framework でログ出力したりQueryパラメータひろったり。その３

# その２で
Slim-Skeleton を導入してから肉付けが楽しい今日このごろ。回り道が多かったけどなんとなく理解できてきたんで。そろそろ本格的にプログラムしてみようかなとｗ。

# ログ出力に monolog が使える
Slim-Skeleton を導入すると [monolog](https://github.com/Seldaek/monolog) が使えるので楽ちん。`src/settings.php` に設定されているので簡単に使える。

```php:src/settings.php
  'logger' => [
    'name' => 'slim-app',
    'path' => __DIR__ . '/../logs/app.log',
    'level' => \Monolog\Logger::DEBUG,
  ],
```

使い方は下記みたいに使えばok。詳しくはソースみてもいいかも。`vendor/monolog/monolog/src/Monolog/Logger.php`

```php
$this->logger->addDebug('log');
$this->logger->addInfo('log');
$this->logger->addWarning('log');
```

# Queryパラメータを取得
slimには、method として GET, PUT やら普通にhttpのmethodがあるわけですが、ちょっと面白いのが map つーやつ。こいつ複数のmethodを一つでうけることができる優れもので、まあしないだろうけど GET/POST両方おなじuriで受けるときに便利に使えそう。

```php
$app->map(['GET', 'POST'], '/books', function (Request $request, $response, $args) {
```

とりあえずこんな感じで使ってみる。

```php
$app->map(['GET', 'POST'], '/test_param', function ($request, $response, $args) {
  $method = $request->getMethod();
  $uri = $request->getUri();

  // get/post
  if ($request->isGet() == 1) {
    echo "<br> isGet!! <br>";
    $allGetVars = $request->getQueryParams();
    foreach($allGetVars as $key => $param){
      //GET parameters list
      echo $param . "<br>";
    }
    //Single GET parameter
    $getParam = $allGetVars['name'];
    echo "<br> get name : " . $getParam . "<br>";
  } else {
    echo "<br> isPost!! <br>";
    $allPostPutVars = $request->getParsedBody();
    foreach($allPostPutVars as $key => $param){
      //POST or PUT parameters list
      echo $param . "<br>";
    }
    //Single POST/PUT parameter
    $getParam = $allPostPutVars['name'];
    echo "<br> post name : " . $getParam . "<br>";
  }
}
```

`getMethod()` `getUri()` は、[Slim Request](http://www.slimframework.com/docs/objects/request.html#the-request-uri) を参照するとよい。

で、簡単なフォームを作って試してみる。

```html
<html>
 <head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <title>sample</title>
 </head>
<body>
 <form action="http://ホストip:8080/test_param" method="post">
  名前：<br />
  <input type="text" name="name" size="30" value="" /><br />
  メールアドレス：<br />
  <input type="text" name="mail" size="30" value="" /><br />
  コメント：<br />
  <textarea name="comment" cols="30" rows="5"></textarea><br />
  <br />
  <input type="submit" value="登録する" />
 </form>
</body>
</html>
```

[get/post](http://stackoverflow.com/questions/32668186/slim-3-how-to-get-all-get-put-post-variables)両方に対応できるやん。簡単すなｗ

これで簡単なアプリつくれそーだｗ
次は、パラメータ受け取って色々なQueryを書いてみる。
9/15　今日の学習内容〜レイアウトテンプレートについて学習〜

###今日の学習内容
***
今日からモックアップ（そこまで忠実でない見本サイトのようなもの）を作成していくことになりました( ´ ▽ ` )ﾉ

なので、まずは**レイアウトテンプレート**について学習していきました。

####レイアウトテンプレートとは
***
レイアウトテンプレートとは各テンプレートをまとめる枠のようなものです。

Railsではレンダリングを行う際に、各アクションのテンプレートからレンダリングを始め、その後にレイアウトテンプレートに埋め込み、HTML全体を出力するようになっているようですね。

![アクションテンプレート画像.001.png](https://qiita-image-store.s3.amazonaws.com/0/137880/26792673-e5a1-c6d4-355d-1f0e34d38482.png)


アプリケーションを作成するときに、``bin/rails new``コマンドを使用していると、最初から``application.html.erb``というレイアウトテンプレートが作られます。↓

![スクリーンショット 2016-09-15 23.21.31.png](https://qiita-image-store.s3.amazonaws.com/0/137880/bd7677c3-fecd-ec82-c12d-2425a87be829.png)

``<%= yield %>``の中にアクション用のテンプレートが埋め込まれるそうです(￣▽￣)

####モックアップ用のレイアウトテンプレートを作っていく
***
早速、``application.html.erb``を書き換えていきます。↓

![スクリーンショット 2016-09-15 23.35.57.png](https://qiita-image-store.s3.amazonaws.com/0/137880/50e49650-5408-aa37-0cc9-9d3f27119a67.png)

文字コードを``utf-8``に指定するコードを足したことと、タイトルタグを書き換えたことが主な変更点ですかね＿φ(￣ー￣ )

タイトルタグの中身には、``page_title``という名前のヘルパーメソッドを作成して、ページごとにタイトルを変えられるようにします。↓

ちなみに、ヘルパーメソッドは``/app/helpers/application_helper.rb``に作成します。↓

![スクリーンショット 2016-09-15 23.48.52.png](https://qiita-image-store.s3.amazonaws.com/0/137880/59ad54b0-99f5-ff95-c8ff-e7d35e5148aa.png)

インスタンス変数``@page_title``が``about``アクションの中にあるので、``このサイトについて-Hello Rails!``と表示されることになったわけです。↓( ´ ▽ ` )ﾉ

![スクリーンショット 2016-09-15 23.48.21.png](https://qiita-image-store.s3.amazonaws.com/0/137880/2d22f51a-9ee4-934c-883f-abc4838d0818.png)

###あとがき
***
今日から、モックアップの作成に入って行きました。
まず、モックアップってなんなんだというところから始まったわけですが、プロトタイプの簡易版くらいの認識でいいんでしょうか？( ? _ ? )

今日は少し短くなりましたが、明日も引き続きモックアップの作成を続けていこうと思います。
読んでくださり、ありがとうございましたm(__)m

###参考にさせていただいたサイト・文献
***
- [改定基礎3版RubyOnRails](https://www.amazon.co.jp/dp/4844338153)
- [cloud9](https://ide.c9.io/)
Dockerゴミ掃除コマンド


ビルド用のJenkinsサーバーで定期的に動かしているコマンドです。

```
docker ps -q --filter "status=exited" | xargs --no-run-if-empty docker rm
docker ps -q --filter "status=dead" | xargs --no-run-if-empty docker rm
docker images | grep "months ago" | awk '{print $1 ":" $2}' | grep -v '<none>:<none>' | xargs --no-run-if-empty docker rmi
docker images | grep "weeks ago" | awk '{print $1 ":" $2}' | grep -v '<none>:<none>' | xargs --no-run-if-empty docker rmi
docker images | awk '/^<none>/ { print $3 }' | xargs --no-run-if-empty docker rmi
```

http://blog.n-z.jp/blog/2013-12-24-docker-rm.html に書いてあるものを改変しました。
gulp を使わず watchify で監視しつつ babel

呼吸をするように `gulp` を使ってたのでたまには `npm scripts` でやってみよっかなーと思ってやってみたら意外にいい感じだったのでメモ。

## install package

必要なパッケージをインストール

- browserify
- watchify
- babelify
- babel-preset-es2015

あとはプリセット、プラグインはお好きなやつを。

`$ npm install --save-dev browserify watchify babelify babel-preset-es2015`

## write .babelrc

`.bablerc` に以下を記述
```
{
    "presets": ["es2015"]
}
```

もちろんプリセットは自分が好きな吐き出したいやつに変えられる。

## npm scripts
npm scripts を記述

```package.json
"scripts": {
    "dev": "watchify main.js -t babelify -o bundle.js"
}
```

`watchify` で `main.js` を `babelify` で `transform(-t)` して ファイルに吐き出して（ `-o` ） `bundle.js` を作る。
git notes でコミット自体を変更せずに git に注釈を残す

git notes についてまとめます。

## <i class='fa fa-question'></i> git notes とは？
git のコミットの注釈を管理するコマンドです。
注釈の追加、編集、削除、参照など様々な操作が可能です。
namespace を設定することが可能で、デフォルトでは commits ネームスペースが指定されます。

## <i class='fa fa-hand-o-up'></i> 用途
コミットオブジェクトそのものを変更することなく、コミットに対して注釈（メモ）を補足できる。

例えばコミットしてからだいぶ経ってから古いコミットによるバグが発覚して、
あとからそのコミットにひも付けた注釈（メモ）を追加したい場合などです。

## <i class='fa fa-list'></i> 機能一覧
### <i class='fa fa-plus'></i> 追加
```bash
# HEADのコミットにノートを追加
$ git notes add -m "Note1" HEAD
# HEADの一つ前のコミットにノートを追加
$ git notes add -m "Note2" HEAD~
# 任意のコミットにノートを追加
$ git notes add -m "Note3" <some sha1 hash>
```

### <i class='fa fa-list'></i> リスト
左側のハッシュがnote本体のハッシュ。
右側のハッシュがnoteをつけたコミットのハッシュです。

```bash
$ git notes list
04ac83ee0e9b9bff9e4d5a8aa3c9945725ff9a51 8318a1b27be996a102d155c7e412846f6ddb0e1b
8de2ed665cb9306796f48d5ee9f80306267edd0b a958bd1ca331999827dc49247a8ed49ebc2f3ec3
```

### <i class='fa fa-eye'></i> 参照
```bash
$ git notes show 8318a1b27be996a102d155c7e412846f6ddb0e1b
Note1
```

### <i class='fa fa-file'></i> ログから確認
```bash
$ git log
commit 8318a1b27be996a102d155c7e412846f6ddb0e1b
Author: user
Date:   Wed Sep 14 21:26:29 2016 +0900

   hige

Notes:
   Note1

commit a958bd1ca331999827dc49247a8ed49ebc2f3ec3
Author: user
Date:   Wed Sep 14 21:16:42 2016 +0900

   hoge1, hoge2

Notes:
   Note2
```

## <i class='fa fa-github'></i> GitHub 連携
https://github.com/blog/707-git-notes-display

![git_notes.png](https://qiita-image-store.s3.amazonaws.com/0/43480/02b915e1-cc5f-3d5b-17b6-ddf3f75b632d.png)

GitHubを通して notes を共有することはできるが、WebUI はなくなってしまったようです。
あまり使われなかった、ということなのかな？

### <i class='fa fa-upload'></i> push
notes の情報は通常の push とは別に push する必要があります

```bash
$ git push origin refs/notes/commits
```

* ~/.gitconfig に追加

```
[alias]
	pushnotes = "!sh -c 'git push $1 refs/notes/*' -"
```

* alias で呼び出し

```bash
$ git pushnotes origin
```

### <i class='fa fa-download'></i> fetch
fetch も push と同じく別途 fetch する必要があります

```bash
$ git fetch origin refs/notes/commits:refs/notes/commits
```

* ~/.gitconfig に追加

```
[alias]
	fetchnotes = "!sh -c 'git fetch $1 refs/notes/*:refs/notes/*' -"
```

* alias で呼び出し

```bash
$ git fetchnotes origin
```

### <i class='fa fa-chrome'></i> GitHub で push した notes を確認する場合
`https://github.com/<user>/<repo>/tree/refs/notes/commits` にアクセスする

## <i class='fa fa-book'></i> 関連情報
* [2011-12-15 ruby-trunk-changes r34046 - r34056 - PB  memo](http://d.hatena.ne.jp/nagachika/20111215/git_notes_bottomup)
* [Git Notes Display - GitHub](https://github.com/blog/707-git-notes-display)
* [git-notes - git docs](https://git-scm.com/docs/git-notes)
* [Git Notes and GitHub](http://www.slideshare.net/matthewmccullough/git-notes-and-github)
Google Cloud Speech APIでストリーミング音声認識

*2016/9/14現在の情報です*

Google Cloud Speech APIでマイク入力からのストリーミング音声認識を試す.

以前[REST API版で録音済ファイルの認識を試した](http://qiita.com/sn6/items/a227cc92453817eeab11)ので、今回はgRPC版でストリーミング認識させてみる.

## 手順

[Google公式のサンプル] (https://github.com/GoogleCloudPlatform/python-docs-samples/tree/master/speech/grpc)
のREADMEの手順に従う.

今回試すのはストリーミング認識のtranscribe_streaming.py . 

Service Accountのjsonを得るところまではREST版と同じ手順.

1. Google Cloud platformにサインアップ
2. Developer consoleでプロジェクト作ってSpeech APIを有効化し、認証用のService Account jsonファイルを取得
3. ダウンロードしたjsonファイルを環境変数`GOOGLE_APPLICATION_CREDENTIALS` に設定
4. サンプルスクリプト実行
   1. portaudioを使えるようにする
   2. 必要なpipモジュールのインストール (virtualenv推奨)
   3. transcribe_streaming.pyを日本語認識できるよう設定
       1. recognition_configのlanguage_codeをen-USからja-JPに変更
       2. サンプリングレート等を自分の環境に合うように調整
       3. デバイス周りの設定は`record_audio` で、pyaudioのお作法で
    4. ```$ python transcribe_streaming.py``` でサンプルを実行し、マイクに向かって話しかける

起動するとlisten_print_loopの中でservice.StreamingRecognizeが値を返す限り認識が続く.(DEADLINE_SECSの秒数が経過するとタイムアウトで終了する)

このサンプルは発言に`exit`または`quit`の単語が含まれていると処理を終えるようになっている (*listen_print_loop*の後半) ので、これらの単語を`止まれ` とか `終了` とかに変えておくと日本語でも同じことができるだろう.

## 認識の挙動

- 一定期間の沈黙があるまで、多少の間があってもひとつながりの発話として認識される. 
- 認識が済むと結果のテキストとともに`is_final=True`と`confidence`が返される
- *streaming_config*に`interim_results=True`を指定すると発話途中の認識結果も取れる. 

発話途中の認識は単語レベルで行われているようで、ネットッワークを介してると思えない速さでびっくりする. ただし途中の認識結果は間違っていることもあるので、急がないなら全部終わるのを待った方が確実だろう.

その他のオプションは[gRPC APIのマニュアル](https://cloud.google.com/speech/reference/rpc/google.cloud.speech.v1beta1#google.cloud.speech.v1beta1.Speech.StreamingRecognize) 参照

Githubのコードはかなり頻繁に更新されているので、日々チェックした方が良い. 

## 不具合
MACとLinuxでそれぞれラップトップのビルトインマイク/USBの外付けマイクで試したが、いずれも3-10発話または15-30秒ぐらい経つと特にエラーもないまま認識しなくなる.
要調査.

## 雑感
v1beta1とあって、まだまだテスト段階なのかなと思われる.
gRPC (とpytonからの扱い方) に慣れないと正しく使うのが難しそう.
Xcode8で 　” is missing from working copy ”　消えました \(^^)/・・・・・が

## アップグレード通知きはった
Xcode8のアップグレード通知がきたので、アップグレードしてみました。
ターゲット ios5 のOBject-Cソース（Xcode7でワーニングなし）をコンパイルしたら、

![a.jpg](https://qiita-image-store.s3.amazonaws.com/0/75082/6de676eb-5daf-ae03-1d15-36c0eee932b7.jpeg)




ワーニングでました。
・おすすめの設定してねワーニング
・見知らぬワーニーング　なんたらファイル is missing from working copy　
でました。

## すすめられてもねぇ
おすすめ設定内容はこちら
![b.jpg](https://qiita-image-store.s3.amazonaws.com/0/75082/4bafeafd-c1ea-7177-9647-ee40068db092.jpeg)

残念な事に Xcodeは、IOS8より前のバージョンはサポートしないらしい。
無駄かもしれないが、おすすめの一部を遠慮しました。
> 後にios5 デバイスにダウンロードしてみたらXcodeからサポートしてないと拒否されました。( だめかぁ )
Xcode7に 戻さないとデバッグもできないようです。( モチーベーション⇩⇩⇩⇩ )
xcode7のXcodeを名前変えてインストールしたらシミュレーターなくなった (ToT)


## こやつらは何？
見知らぬワーニーング　なんたらファイル is missing from working copy
エラーであるなんたらファイルなんて存在しないのですが・・・・

Googleさんに聞いたらバージョン管理(SVN)関連らしい
そんな事一度もやった事ないし、知らないし、そんな事してたの？状態
しかし、見覚えあるファイル達で、Finderで削除したような記憶が・・・
これ自体問題にならないらしいのだが、なんか目障。
とても目障りなのである。いらいら
Googleさんの助言でコマンドラインでSVN rmなんた、commit らとかやったけど
ファイルが存在しないので、効果なしに見える。

紐付け破棄すればいいのだが・・・
XcodeでSVNは、Source controlで行うらしいので、その周辺調べる。
>後にGitと名乗るバージョン管理の方々である。


## 破棄

方法は、Source ControlのCommitで、破棄すれば良いみたいです。
Discard All Changesでもいけそうだけど、怖くて押せませんでした。

![a.jpg](https://qiita-image-store.s3.amazonaws.com/0/75082/81eeb8d2-4955-097c-e6b4-44f2198b986c.jpeg)




commitすると、こんなん出てきます。
どうも問題のファイルは、右のマーカーが「！」になってるようです。



![a.jpg](https://qiita-image-store.s3.amazonaws.com/0/75082/e3f2dcb2-0a5c-ca27-b137-f7c3e4e82e06.jpeg)



このファイルを右クリックして

![b.jpg](https://qiita-image-store.s3.amazonaws.com/0/75082/83434992-a8c8-097e-3947-e6df3b78642d.jpeg)


ポチっと**破棄**


![d.jpg](https://qiita-image-store.s3.amazonaws.com/0/75082/ebb9bb6e-3fea-07a8-0a8b-5c8242f37dd0.jpeg)


”ほんとに？　後戻りできないよ”って脅される
バックアップとってからでないと押せないですね

ポチっと　**破棄**

終わったら　下のCancelで戻って再ビルド
無事ワーニングが消えました。

あーすっきりしました。
間違って消した場合のリカバリーは、わからないから必ずバックアップしてね。
詳しい方おられましたらコメント願います。

意地もここまでです。後戻りする事にします。
さぁ　Xcode7に戻さないとね・・・・汗