OmniAICreator/Qiita-1.07M huggingface dataset:
【知らなかった…】Objective-Cでプロパティ名の先頭につけてはいけない単語

# プロパティ名の先頭に「new」はダメ

初めて遭遇したエラーでした。

```
property's synthesized getter follows Cocoa naming convention
for returning 'owned' objects
```

Cocoaってついてるし、裏側の話だと思ったけど、naming conventionって書いてあるから、
~~「名付けの習慣」とでも直訳するんでしょうか。~~ → 「命名規則」ですね！

プロパティを定義することで、ゲッターメソッド、セッターメソッドも自動で作られているようです。
そのため、newやcopyなどは自身のオブジェクトを返すためのメソッドとして

# その他

先頭につけてはいけないワードが他にも有るようです。

* new
* alloc
* copy
* mutableCopy
* init

いままで意識していませんでしたが、言語ごとの予約語、命名規則などは、
予め、知識として入れておかねばなりませんね……（汗）

参考：
http://tsukaayapontan.web.fc2.com/doc/xcode/objc/starting009.html

# 補足

ちょっとまだ読んでいる途中だけど……。
`@property`の後ろで指定しているカッコの中は、ARCのためだけと思っていたら、それだけではなかったのね。なるほどー……。
http://www.ecoop.net/memo/archives/objective-c-property-basics.html
Webアプリの動作確認やデモにngrokが便利


色んな所で紹介されているのでご存じの方も多いとは思いますが、メモを兼ねて書きました。

# ngrokとは

* https://ngrok.com/

ルーターやNAT背後のマシンで動作しているアプリに外部からアクセスできるようトンネリングしてくれるサービスです。
利用者は基本的に各OS向けのコマンドラインツールを実行するだけなので非常に簡単に使えます。

# セットアップ
下記から環境に応じたファイルをダウンロードしPATHを通しましょう。

* https://ngrok.com/

# 実行
## デフォルト

ローカルポート9000番でWebアプリが起動している場合、次のコマンドを実行します。

```
ngrok http 9000
```
![002.png](https://qiita-image-store.s3.amazonaws.com/0/131679/79b5ee2e-89f7-4347-2640-9f6510bbec76.png)

起動しました。この状態で、```Forwarding```に表示されたURLにアクセスするとローカルマシンのポート9000番にフォワードされます。
デフォルトだとサブドメイン名は起動の度にランダムに割り当てられますが、[ngrokを使用してローカル環境を外部に公開する](http://qiita.com/kitaro729/items/44214f9f81d3ebda58bd)にあるように任意の名前を指定することもできるようです。(未確認)

試しにスマフォからこのURLを叩くと...確かに画面が表示され、コンソールにはアクセスログが出力されます。
![003.png](https://qiita-image-store.s3.amazonaws.com/0/131679/e4504607-d410-4229-78e4-c0c658d09549.png)

## リージョン指定

httpコマンドはリージョンの指定もできます。デフォルトはUSですが、Asiaを指定する場合は以下です。


```
ngrok http --region ap 9000
```

「Region」に`Asia Pacific (ap)`と表示されていますね。
![006.png](https://qiita-image-store.s3.amazonaws.com/0/131679/68fd7ecc-1699-deef-0c8e-0ffd1527d77d.png)

## アップデート

ちなみに今回、途中で最新バージョンにアップデートしてます。最初のスクリーンショットには`update available ...`、最後のには`Version 2.1.3`と表示されてる理由がそれです。
アップデートもコマンドラインからの実行でOKです。

```
ngrok update
```

# 所感

スマフォ対応のWebアプリを作ってる最中ですぐ動作確認したいときなど、公開サーバーにデプロイするまでもなく手軽に試せるのでよく使ってます。
あとは客先での打合せや提案時のデモなど、ちょっとしたものを作って見てもらいたい時なんかにも重宝しますね。
aws-sdk-goでRDSのgeneral.logとかを取得するヤツ

### `aws-sdk-go`でRDSのgeneral.logを取得するためのTips


```go
package main

import (
	"fmt"

	"github.com/aws/aws-sdk-go/aws"
	"github.com/aws/aws-sdk-go/aws/credentials"
	"github.com/aws/aws-sdk-go/aws/session"
	"github.com/aws/aws-sdk-go/service/rds"
)

func main() {
	profile := "rds"
	svc := rds.New(session.New(&aws.Config{
		Credentials: credentials.NewSharedCredentials("", profile),
		Region:      aws.String("ap-northeast-1"),
	}))

	req := &rds.DownloadDBLogFilePortionInput{
		DBInstanceIdentifier: aws.String("DB_NAME"),
		LogFileName:          aws.String("general/mysql-general.log.2016-07-27.08"), // Required
		Marker:               aws.String("0:0"),
	}

	err := svc.DownloadDBLogFilePortionPages(req,
		func(p *rds.DownloadDBLogFilePortionOutput, lastPage bool) bool {
			if p.LogFileData != nil {
				fmt.Println(*p.LogFileData)
			}

			if lastPage == false {
				fmt.Println(*p.Marker)
			}
			return true
		})

	if err != nil {
		fmt.Println(err.Error())
		return
	}
}
```



得られるデータ

```
160727  7:46:21	    1 Query	set local oscar_local_only_replica_host_status=1;
        		    1 Query	SELECT * FROM hoge;
160728  7:46:22	    1 Query	set local oscar_local_only_replica_host_status=1;
        		    1 Query	SELECT * FROM hoge;
[Your log message was truncated]
```

みたいなSQLの内容と

```
0:12483476
```

のようなMarkerが付いてくる。
`rds.DownloadDBLogFilePortionOutput`は`return true`ではなく
`return false`にして`Marker`を利用して
よしなにやさしくAPIを叩いてあげた方が良いと思う。実際はどうなんだろう。
ASP.net MVC + VB.net Oracle 検索画面

#概要
検索画面では、検索キーを入力して検索結果を表示する。
この当たり前の処理をメモ。

#環境
Visual Studio Community 2015
VB.net
.net framework4.5.2
Oracle11g
Oracle Client12c
IE11

#前提
ADO.net Entity Framework⇒データベースからEF Designerで、edmxファイルを作成しておく。

#実装
```HogeController.vb
Dim db as New TESTEntities

Function Search(ByVal keyword As String)
 return View(db.TEST01.Where(Function(b) b.column01 = keyword))
```
```Search.vbhtml
@modeltype IEnumerable(Of TEST01)
@Code
    ViewData("Title") = "Search"
End Code
<h2>Search</h2>
<!--検索部-->
@Using Html.BeginForm("Search", "HOGE", FormMethod.Post, New With {.class = "form-inline"})
    @Html.Label("keyword", "Column01:", New With {.class = "control-label"})
    @Html.TextBox("keyword", "", New With {.class = "form-control"})
    @<text>
    <input type="submit" value="検索" class="btn btn-link" />
    </text>
End Using
<!--表示部-->
<table class="table">
　<tr>
    <th>Column01</th>
    <th>Column02</th>
    <th>Column03</th>  
  </tr>
@For Each item In Model
  @<tr>
    <td>@item.column01</td>
    <td>@item.column02</td>
    <td>@item.column02</td>
  </tr>
Next
</table>
```

#メモ
@Html.TextBox("**keyword**",　←この要素名が、
コントローラーの
Function Search(ByVal **keyword** As String) ←同じ名称でないと表示されない
なんでやろ＝次までに調査＝
Goでzipファイルつくる

```go

package main

import (
	"archive/zip"
	"os"
	"path"
)

func main() {
	// 生成するzipファイル
	file, _ := os.Create("foo.zip")

	// zipファイルを閉じる
	defer file.Close()

	// zipファイルにzip.NewWriterで書けるようにする
	// つまり w が色々な情報を持っている
	w := zip.NewWriter(file)

	// unzipした時のファイル名
	f, _ := w.Create(path.Base("foo.txt"))

	// 書き込む内容
	_, _ = f.Write([]byte("hogehoge"))

	_ = w.Close()
}
```
peridot で始める消耗しないPHPのテスト


PHPUnit はなんかもうテスト書くにはつらすぎる。つらすぎる。

のでシンプルに簡単に小さく始められるperidotを導入してみます。

公式 & サンプルコードなどはこちら

http://peridot-php.github.io/

## 始める

まずはComposer 

````
$ composer require peridot-php/peridot
````

空っぽのディレクトリを作って適当に `test/sample.spec.php` などのファイルを作成。以下を記述します。

````
<?php //arrayobject.spec.php
describe('ArrayObject', function() {
    beforeEach(function() {
        $this->arrayObject = new ArrayObject(['one', 'two', 'three']);
    });

    describe('->count()', function() {
        it("should return the number of items", function() {
            $count = $this->arrayObject->count();
            assert($count === 3, "expected 3");
        });
    });
});
?>
````

コマンドを叩いてテスト実行

````
$ ./vendor/bin/peridot test

  ArrayObject
    ->count()
      ✓ should return the number of items


  1 passing (19 ms)
````

超ラクチン！

## peridot コマンドについて

引数にファイル名を渡して個別にテストする事が可能。面倒なxmlとか書く必要はなし

ディレクトリを渡せば中を全部洗ってくれる。デフォルトでは`*.spec.php`が検査対象となる。
 
### テスト設定など

共通で読み込みが必要な処理などがアレば、設定ファイル(defalt: `peridot.php`)に記述することが出来る。

諸々の前処理のほか、イベント駆動でコードをフックして走らせたりなど柔軟性ばっちり

http://peridot-php.github.io/events.html

## テストの記述

describe-it 方式でテストを記述する。クロージャの`$this`には `\Peridot\Core\Scope`が入ってくる。

クロージャで`$this`を使うのが気持ち悪い人はきっとJavascript力が足りない。

クロージャの`$this`によくわからないオブジェクトが勝手にセットされてるのが気持ち悪い人もきっとJavascript力が足りない。

describe(context)/it形式で suite-testを記述していくのに加え、xdescribe xit でdraftのテストを記述出来る。

beforeEachはテスト毎に実行されるもので、`$this`コンテキストに値をはやしたり出来る。

http://peridot-php.github.io/syntax.html

## その他

− phpstorm とかでブレイクポイント張ることも可能。PHP Scriptとして実行する。
- 薄いのでプラグイン制作も捗る。[ここ](https://github.com/peridot-php/peridot-httpkernel-plugin)とか参考になりそう 
- Lumen 用のプラグイン作ってみた [こちら](http://qiita.com/mikakane/items/d7ee6006f88a923e3a7d)
Git 自分用まとめ

# 概要

- Gitの概念から学習して開発環境構築。
- Githubをゴリゴリ使えるようになるために学習したことまとめ

# 2017/6/2追記
[Git をはじめからていねいに](https://github.com/takanabe/introduction-to-git) を読んでていねいに追記した。


# やってみたこと

- Git本日本語訳を読んだ（２．２まで）
- Git Flowの説明を各所で読んだ
- MacでGit環境を構築
- GithubをリモートとしてPushしてみた
- TravisCIと連携させて眺めた

# メモ

1. git checkout -b [branch名]
2. 開発
3. git statusで出た差分をgit add (git add -Aで良い。git add . だと削除分が反映されない)
4. git commit -m "[開発した内容]"
5. git push origin [branch名]

# ていねいな追記



## gitの複数アカウント

複数アカウント使う場合、~/.gitconfigのGlobalと、./.git/configのリポジトリ単位でuser、emailを設定しておく。

```bash:~/.gitconfigのGlobal
cat ~/.gitconfig
[user]
        name = user1
        email = user1@example.co.jp
```

```bash:./.git/configのGlobal
cat ./.git/config
[user]
        name = user2
        email = user2@example.com
```

## コミット時に所有者を指定

コミット時に--authorでuser、emailを指定する。

```
git commit --author='user1 <user1@example.co.jp>' -m "comment"

git commit --author='user2 <user2@example.com>' -m "comment"
```

## コミットの打ち直し

コミットを打ち直すには、--amendを使用する。

```
$ git commit --author='fk2000 <fujiwarak@gmail.com>' --amend -m "hello.txt add"
```


## 編集の取り消し
viで変更した内容を破棄するにはgit checkout -- fileを使用する。

```
$ git checkout -- hello.txt
```

## git addの取り消し
git addしたファイルを、元に戻す（Unstage）にはgit reset HEAD fileを使用する

```
$ git reset HEAD hello.txt
```

## コミットの親子関係参照

コミットの親子関係を見るには、git log --graphを利用する。

```
$ git log --graph
* commit 926a6cd86e144c91da85c8d3e3ed58c05183f366
| Author: fk2000 <fujiwarak@gmail.com>
| Date:   Fri Jun 2 12:05:41 2017 +0900
|
|     hello.txt edit
|
* commit aa974f3d52ee395e041fc829eb180224f20af1d3
  Author: fk2000 <fujiwarak@gmail.com>
  Date:   Fri Jun 2 11:17:14 2017 +0900

      hello.txt add
```


# これからやりたいこと

- TravisCIとかと連動させて幸せなデプロイ環境を構築する。
- おれgithubで開発してますアピール

# 参考にしたサイト

- [Git - Book](https://git-scm.com/book/ja/v2)
- [個人開発環境にGithub Flowを適用する](http://chroju.github.io/blog/2015/10/04/individual-github-flow/)
- [Git をはじめからていねいに](https://github.com/takanabe/introduction-to-git)
Fabric Engine 2 ライセンス体系(2016年7月版）

SIGGRAPH 2016 に合わせてリリースされた Fabric Engine 2.3 ではライセンス体系に微変更が加わった（2016年7月）。以前の記事 http://qiita.com/yamahigashi@github/items/b428c5c81bc29d7b2ec1 をふまえ記録のため2016年7月時点での情報を以下に書き留める。

最新の情報には常に公式ページをあたられたい。
ライセンス一覧: http://fabricengine.com/get-fabric/
EULA: http://fabricengine.com/eula/


| ライセンス名                                  | EVALUATION(個人） | FABRIC FIFTY         | INDIVIDUAL              | TEAM                      | STUDIO                       |
| :-------------------------------------------- | ----------------  | -------------------- | ----------------------  | ------------------------  | -----------                  |
| 形態                                          | 個人              | スタジオ             | シングルサイト、個人    | シングルサイト、チーム    | シングルサイト、無制限ユーザ |
| 評価版 / 商用版                               | 評価              | 評価/商用            | 商用                    | 商用                      | 商用                         |
| 人間[^1]                                      | 1                 | 5                    | 1                       | 20                        | 無制限                       |
| バッチ[^2]                                    | なし              | 45                   | 5                       | 無制限                    | 無制限                       |
| 拠点制限                                       | Yes               | Yes                  | Yes                     | Yes                       | Yes                          |
| プレミアムサポート                            | –                 | –/Yes                | Yes                     | Yes                       | Yes                          |
| クラウド（AWSなど)での使用                    | No                | No                   | No                      | 制限付きで可              | 制限付きで可                 |
| 料金（レンタル）                              | free              | -                    | $1.2k / 年              | $10k / 年                 | $45k / 年                    |
| 料金（買い切り）サポート料初年度免除        | -                 | 初年度以降 $5k       | $2k +サポート料（年額） | $20k  +サポート料（年額） | 応相談                       |

* *なお全てのライセンスで全プラットフォーム (Windows, Linux, OS X) を利用可能*
* *EVALUATION(個人）は1スタジオ2ライセンスまで取得可能*
* *買い切りの場合の年間サポート料は応相談(以前のものが目安）*
* *Enterpriseソリューションは応相談で各種制限なし*

[^1]: Interactiveライセンス. ユーザが操作可能なライセンス
[^2]: Headlessライセンス. コマンドラインからなどでデータの処理のみに使用することができるライセンス



## 変更点

以前のものと比較すると、FABRIC FIFTY の扱いが大きく変わった。まとめると

* [FABRIC FIFTY] 有償オプションが増えた
* [FABRIC FIFTY] 無料で使用可能なのは1スタジオ1年限定、初年度以降は年額 $5K
* [FABRIC FIFTY] インタラクティブライセンス5つ（有償と無償で違いがあるか要確認）
Windows の SourceTree で GitHub から fetch/push ができなかった

# 現象

Windows の SourceTree で Fetch しようとしたら、いつまでたっても終わらない。進行状況を表示すると、下記のようなメッセージのまま進まなかった。

```
The server's host key is not cached in the registry. You
have no guarantee that the server is the computer you
think it is.
The server's rsa2 key fingerprint is:
ssh-rsa 2048 16:27:ac:a5:76:28:2d:36:63:1b:56:4d:eb:df:a6:48
If you trust this host, enter "y" to add the key to
PuTTY's cache and carry on connecting.
If you want to carry on connecting just once, without
adding the key to the cache, enter "n".
If you do not trust this host, press Return to abandon the
connection.
Store key in cache? (y/n)
```

GitHub のホストを信頼していいか聞いているが、 SourceTree から入力できない…

# 解決策

[WindowsのSourceTreeでBitbucketからクローンできなかった](http://qiita.com/moo/items/5ee3208254c34719914b) を参考に

コマンドプロンプトで
```
"C:\Program Files (x86)\Atlassian\SourceTree\tools\putty\plink.exe" -ssh -C -i "path\to\private\key.ppk" git@github.com
```

と実行すると、上記メッセージが表示され、 y と返答。

```
Using username "git".
Server refused to allocate pty
Hi chatii! You've successfully authenticated, but GitHub does not provide shell
access.
```

となり、 GitHub にアクセスできた。これで SourceTree からも GitHub へアクセスできるように。
【プログラマーのための数学】一次独立と一次従属

## 目次
[プログラマーのための数学 - 目次](http://qiita.com/Esfahan/items/ab63e7c5bcf812dff2a9)

## 一次独立とは
`v1,v2,⋯,vn`というn個のベクトルがあるとき、
`k1v1+k2v2+⋯+knvn = 0`が成り立つのは、
`k1=k2=⋯=kn = 0`のときのみであるとき、
ベクトルの組`v1,v2,⋯,vn`は一次独立であるという。 

「一次独立」を「線形独立」と言うこともあります。
また、一次独立でない場合，一次従属または線形従属となります。

## 例

例1のv1、v2、v3というベクトルは一次独立です。
`k1v1 + k2v2 + k3v3 = 0`が成り立つのは、`k1=0, k2=0, k3=0`のときのみです

```lang:例1
     | 1 |       | 0 |       | 0 |
v1 = | 0 |  v2 = | 1 |  v3 = | 0 |
     | 0 |       | 1 |       | 1 |
```


例2のv1、v2、v3というベクトルは、一次独立ではない(一次従属)例です。

```lang:例2
     | 1 |       | 1 |       |  0 |
v1 = | 1 |  v2 = | 0 |  v3 = | -1 |
     | 0 |       | 1 |       |  1 |
```

なぜ、例2が一次独立ではないのかというと、
`k1=1, k2=−1, k3=1`のときも、`k1v1 + k2v2 + k3v3 = 0`が成り立ってしまうからです。
最初に書いた通り、一次独立とは、
`k1v1 + k2v2 + k3v3 = 0`が成り立つのは、`k1=0, k2=0, k3=0`のときのみです。
なので、例2は一次独立ではありません。

## 図形的意味、性質
#### 2次元の時
- v1,v2が一次独立のとき、v1,v2で張られる三角形がつぶれていない
- a→, b→が1次独立であるならば、a→, b→は平行でない。
逆にa→, b→が平行でなければ、a→, b→は1次独立である。

#### 3次元の時
- v1,v2,v3が一次独立のとき、v1,v2,v3で張られる四面体がつぶれていない
- a→, b→, c→が1次独立であるならば、a→, b→, c→は同一平面内にない。
逆に、a→, b→, c→が同一平面になければ、a→, b→, c→は1次独立である。

## その他
ベクトルの次元とベクトルの本数は異なっていても問題ありません。例えば二本の空間ベクトルの一次独立性、一次従属性を考えることもあります。

ただし、次元数よりもベクトルの本数が多い場合はすべて一次従属になります。

[参考]
[proofcafe.org](http://proofcafe.org/k27c8/math/math/liner_algebraI/page/liner_independence/)
[高校数学の美しい物語](http://mathtrain.jp/linearlyindep)
http://www.ravco.jp/cat/view.php?cat_id=6618&PHPSESSID=
http://www.ravco.jp/cat/view.php?cat_id=6649&PHPSESSID=

[関連記事]
[プログラマーのための数学 - 目次](http://qiita.com/Esfahan/items/ab63e7c5bcf812dff2a9)
SoftLayerに関する情報源

「SoftLayerに関してまとまった情報が欲しい！！！」
というそんなあなたのために、まとめてみました。

#書籍
まとまった情報の王道である書籍。
（ちなみに筆者はKindleアプリの電子書籍にはまり中です。場所をとらず、持ち運びも簡単で、検索機能で気になった箇所もすぐに見つかります。大事な箇所にハイライトをつけたり、読みかけのところにしおりを残せます。）
[SoftLayer 詳細解説ガイド](https://www.amazon.co.jp/SoftLayer-%E8%A9%B3%E7%B4%B0%E8%A7%A3%E8%AA%AC%E3%82%AC%E3%82%A4%E3%83%89-Think-Books-%E5%AE%89%E7%94%B0/dp/4844339869/ref=sr_1_1?s=books&ie=UTF8&qid=1469602922&sr=1-1&keywords=softlayer)
[SoftLayerシステム構築実践ガイド](https://www.amazon.co.jp/SoftLayer%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E6%A7%8B%E7%AF%89%E5%AE%9F%E8%B7%B5%E3%82%AC%E3%82%A4%E3%83%89%EF%BC%88Think-Books%EF%BC%89-%E6%97%A5%E6%9C%ACSoftLayer%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC%E4%BC%9A/dp/4844338145/ref=sr_1_2?s=books&ie=UTF8&qid=1469602922&sr=1-2&keywords=softlayer)

#無料配布のPDF
技術者向けにSoftLayerのことを体系的に理解してほしいとのことで、
不定期で更新されているPDFです。
[柔らか層本](https://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&uact=8&ved=0ahUKEwi55uP9jJPOAhXHkZQKHTAKAl0QFggcMAA&url=https%3A%2F%2Fwww.ibm.com%2Fdeveloperworks%2Fcommunity%2Ffiles%2Fform%2Fanonymous%2Fapi%2Flibrary%2Fb1409dc8-fbc4-4d02-b799-b70334c67b92%2Fdocument%2F91df8465-51c6-4ec2-a338-b32982fec202%2Fmedia%2F%25E6%258A%2580%25E8%25A1%2593%25E3%2582%2588%25E3%2582%258A%25E3%2581%25AA%25E4%25BA%25BA%25E3%2581%258C%25E6%259C%2580%25E5%2588%259D%25E3%2581%25AB%25E8%25AA%25AD%25E3%2582%2580%25EF%25BC%259A%25E6%259F%2594%25E3%2582%2589%25E3%2581%258B%25E5%25B1%25A4%25E6%259C%25AC.1.8.pdf&usg=AFQjCNGEw8moskeegimWCGZ6xXxqVcntZg)
http://qiita.com/TOMOARI/items/082aa33c3643e32f9277

#CHANGE MAKERS ソフトレイヤー コンフィグレーションガイド
SoftLayerの操作方法やサービス活用方法のみならず、デザインパターンやユースケースも掲載されております。
[ソフトレイヤー活用ガイド第2部「コンフィグレーション・ガイド」](https://www.change-makers.jp/docs/softlayer-config-guide)
[Linux][C/C++] forkとthreadとスレッドローカル変数の動作確認メモ

forkとthreadとスレッドローカル変数の関係性のメモ

```cpp:forkとthread_local
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/wait.h>
#include <pthread.h>
#include <thread>

static __thread int val = 0;

int main()
{
	int p_id;
	int status;
	int return_code = 0;

	printf("%d : 親プロセス 開始 val = %d\n", getpid(), val);

	val = 1000;

	auto th = std::thread([]{
			printf("%d : thread 開始 val = %d\n", getpid(), val);
			val = 100;
			printf("%d : thread 終了 val = %d\n", getpid(), val);
			});

	if ((p_id = fork()) == 0) {
		/* 子プロセス */
		printf("%d : 子プロセス開始 val = %d\n", getpid(), val);
		sleep(1);
		val = 200;
		printf("%d : 子プロセス終了 val = %d\n", getpid(), val);
	} else {
		/* 親プロセス */
		if (p_id == -1) {
			exit(EXIT_FAILURE);
		}

		wait(&status);
		printf("%d : 親プロセス終了 val = %d\n", getpid(), val);
	}

	th.join();

	return 0;
}
```

```console:ビルドと実行結果
$ g++ -std=c++11 fork_and_threadlocal.cpp -pthread
$ ./a.out
11217 : 親プロセス 開始 val = 0
11217 : thread 開始 val = 0       // 1000ではなく初期値0になっている
11217 : thread 終了 val = 100
11219 : 子プロセス開始 val = 1000  // fork時に親プロセスでの値がそのままコピー(またはCOWによりまだ共有？)されている
11219 : 子プロセス終了 val = 200
11217 : 親プロセス終了 val = 1000  // 子プロセスの変更の影響は受けない
```

`fork` の仕様上当然といえば当然なのだろうけれども、thread_local変数は初期状態(今回は0)にはならなかった。
ただ、fork後にはたいていはexec*を呼ぶらしいので実際使う場合にはあまり関係ないかもしれない。

# 参考
[Man page of FORK](https://linuxjm.osdn.jp/html/LDP_man-pages/man2/fork.2.html)
[fork - Wikipedia](https://ja.wikipedia.org/wiki/Fork)
[技術的雑談-プロセスの生成と後始末(Linux C++編) - Tsubasa's HomePage](http://www.himajin2001.com/fswiki/wiki.cgi?page=%B5%BB%BD%D1%C5%AA%BB%A8%C3%CC-%A5%D7%A5%ED%A5%BB%A5%B9%A4%CE%C0%B8%C0%AE%A4%C8%B8%E5%BB%CF%CB%F6(Linux%20C%2B%2B%CA%D4))
[マルチスレッドのコンテキスト切り替えに伴うコスト - naoyaのはてなダイアリー](http://d.hatena.ne.jp/naoya/20071010/1192040413)
情報量 divergence

# 1. 状態が持つ情報量と確率
ある状態Aが観測される。

この状態Aが珍しいものであればあるほど、その観測から得られる情報量は多い。

例えば下の2つの状態を比較します。

　状態1. 彼は中華人民共和国出身だ
　状態2. 彼はバチカン出身だ

「彼」について、より「情報量」が多いのはどちらでしょうか？
どちらも「出身国」という情報を示しているだけなので、両者がもたらす情報量は対等でしょうか。

しかし、中国の人口は13億7千万人[wiki](https://ja.wikipedia.org/wiki/%E4%B8%AD%E8%8F%AF%E4%BA%BA%E6%B0%91%E5%85%B1%E5%92%8C%E5%9B%BD)なのに対し、バチカンは千人以下[wiki](https://ja.wikipedia.org/wiki/%E3%83%90%E3%83%81%E3%82%AB%E3%83%B3)だそうです。

なので、

　状態1から得られる情報量：彼は約13億7千万人の中の誰かだ。
　状態2から得られる情報量：彼は約千人の中の誰かだ。

状態2が生じれば、「彼」を1000分の1の確率で特定できてしまう、という事です。
状態1では、そうはいきません。世界の7人に1人ぐらいは中国出身なので。

珍しい状態であればあるほど、それが持つ情報量が大きい、とはこういう理屈です。

# 2. 自己情報量 self information
[日wiki](https://ja.wikipedia.org/wiki/%E6%83%85%E5%A0%B1%E9%87%8F), [英wiki](https://en.wikipedia.org/wiki/Quantities_of_information)

上の議論から、状態$A$の持つ情報量$I(A)$は、その状態の生じる確率$p(A)$で表せる。
この$I(A)$をなんと呼ぶかというと、self informationと呼ぶ。
日本語表現はネット上では色々出てくる。
情報量、選択情報量、自己情報量、自己エントロピー.. etc

ここでは素直に自己情報量としておきます。

自己情報量$I(A)$には、いくつかの性質が求められます。
　1. 確率$p(A)$に対して単調減少
　2. 確率$p(A)$に対して連続
　3. 加法性を持つ

1に関しては上で議論しました。
2に関しては、僅かに$p(A)$が変化したら、$I(A)$も僅かに変化してほしい、という事。
3に関しては、状態$A$と状態$B$が独立に同時に得られた時、それらの自己情報量を単純加算したい、という事です。

「身長66cmである」「ジェダイ・マスターである」の自己情報量を加算したい。
個々の自己情報量では足りないけれど、2つを足せば「ヨーダ！？」に近くなる。

実は、この3つの性質を満たすという条件から関数は一義に決まってしまいます。

```math
I(A)=\log\frac{1}{p(A)}=-\log p(A)
```
この時、対数の底には何を取っても良いのですが、普通は2(bit)を使います。
10を取ればdigit, $e$を取ればnatという事ですね。
当然、底が違えば単純比較はできないので注意。

自己情報量$I(A)$の期待値をエントロピー(Shannon entropy)と呼び、$H(A)$と書きます。
期待値$E$は構成要素とそれが生じる確率の積和なので、

```math
\begin{eqnarray}
H(A)&=&E[I(A)]\\
&=&\sum_{i=1}^n p(a_i)\, I(a_i)\\
&=&-\sum_{i=1}^n p(a_i)\, \log p(a_i)
\end{eqnarray}
```

えーと、$a_i$は、$A$を構成する要素で、それぞれが生じる確率$p(a_i)$を考えるのでこうなるわけです。

```math
A = \{a_1,\ a_2,\ ...,\ a_i,\ ...,\ a_n\}
```

# 3. 情報量 divergence

で、何を考えるか、というとですね。

今、観測データ$x$が得られました。
このデータ$x$が確率変数$X$に従っている確率を$P(x)$とします。

```math
P(x)=p(X=x)
```

次に、新たな観測$a$が得られました。
この$a$を知った上で、観測$x$が確率変数$X$に従っている確率を$Q(x)$とします。

```math
Q(x)=p(X=x\,|\,a)
```

問題になっているのが$x$と$X$の関係にある事に注意してください。

新たな観測$a$によって得られた「$x$と$X$の関係に関する情報量」は、
$a$を得る前後の差分になるので、

```math
\big(-\log Q(x) \big)-\big(-\log P(x) \big)= \log \frac{P(x)}{Q(x)}
```

で、Shannon entropyと同様に$x$について期待値を取ったものをカルバック・ライブラー情報量 Kullback-Leibler divergenceと呼びます(連続分布の場合は積分)。

```math
D_{KL}(P||Q) = \sum_x p(x) \, \log \frac{P(x)}{Q(x)}
```

いや、いいんですよ、これでも。
これによって2つの確率分布$P(x)$と$Q(x)$を比較できますね。

ただですね、要注意ポイントは、PとQに対して対称じゃない事です。

```math
D_{KL}(P||Q) \neq D_{KL}(Q||P)
```

つまり$D_{KL}$は、$P(x)$と$Q(x)$の距離として扱えない。
不便だなぁ、という事で改良されたのがジェンセン・シャノン情報量 Jensen-Shannon divergenceです。

```math
\begin{eqnarray}
D_{JS}(P||Q)=&&λ \, D_{KL}\big(Q||λQ+(1-λ)P\big)\\
&&+(1-λ)\, D_{KL}\big(P||λQ+(1-λ)P\big)
\end{eqnarray}
```

対称となるのは、$λ=1/2$の時で、

```math
D_{JS}(P||Q)=\frac{1}{2}\bigg\{ D_{KL}(P \, || \, \frac{P}{2}+\frac{Q}{2})
+D_{KL}(Q \, || \, \frac{P}{2}+\frac{Q}{2}) \bigg\}=D_{JS}(Q||P)
```



# 実装
[前々回の記事](http://qiita.com/kilometer/items/58a1a353b9475bbf27c6)と[前回](http://qiita.com/kilometer/items/f410c27906ff073d2e91)に、これをRから使った計算例を出しています。

　

どっとはらい
{entropy} "文脈"クラスタ解析 -2

[前回](http://qiita.com/kilometer/items/58a1a353b9475bbf27c6)の問題点は、サンプルデータが、文字の「出現頻度」を操作した群だった事でした。
当然、文字の頻度が変われば遷移確率も変化するのですが、じゃぁ素直に文字の頻度だけでクラスタ化できるじゃないか、という事です。

という事で、「出現頻度」を変えずに「遷移確率」を変えたデータでやってみる。

# 1. サンプルデータの工夫
![sample.png](https://qiita-image-store.s3.amazonaws.com/0/92401/a410f31f-4b66-784d-606e-1480519b3d93.png)

[前回](http://qiita.com/kilometer/items/58a1a353b9475bbf27c6)と同じ様式で図示してあります。

ミソは、パッと見では前半20データと後半20データを見分けられないと思います。

作り方のレシピ。

```r
set.seed(1)

N <- 200

datA <- NULL
datB <- NULL
for(i in 1:20){
  dat <- sample(c(1:5), N, replace = T)
  dat1 <- dat

  for(k in 1:2){
    a <- c(1:length(dat))[dat == 1] +1
    dat1[sample(a, length(a)*0.3)] <- sample(c(1,2,4), 1)
  }

  for(k in 1:2){
    a <- c(1:length(dat))[dat == 3] +1
    dat1[sample(a, length(a)*0.5)] <- sample(c(1,5), 1)
  }
  dat1 <- dat1[1:N]

  dat2 <- sample(dat1, length(dat1))

  datA <- cbind(datA, dat1)
  datB <- cbind(datB, dat2)
}


dat <- cbind(datA, datB)
```

発想は、「遷移確率を偏らせた文字列```dat1```」を用意しておいて、「それをランダムに並び替えた文字列```dat2```」を作る。このペアを20セット作ってる、という理屈です。

```dat1```の偏らせ方は、例えば「1」の次に来る文字の30%を、「1, 2, 4」のどれかに置き換える、としています。これを2回繰り返しかけて、あと、「3」次を50%で「1,5」のどちらかに置き換える事を2回しています。

ペアになっている```dat1```と```dat2```は、「文字の出現頻度」は完全に一致しているので、それに基づいたクラスタ解析をすると、やはりペアになる。
<img alt=clust_No.png src=https://qiita-image-store.s3.amazonaws.com/0/92401/7641b501-3e76-755f-82e4-d613b4c73ba6.png>
+20番のものと完全に文字頻度が一致しているのが見て取れる。

```r
i <- 1

callN <- NULL
for(i in 1:ncol(dat)){
  dati <- factor(dat[,i], levels=type)
  
  callN <- cbind(callN, c(table(dati)))
}
clust_callN <- hclust(dist(t(callN)))
```

# 2. 遷移確率マトリックス
![tpmatrix.png](https://qiita-image-store.s3.amazonaws.com/0/92401/697f8615-6b8e-2e3c-3518-70fa941ef524.png)
これも[前回](http://qiita.com/kilometer/items/58a1a353b9475bbf27c6)と同じ様式で図示してあります。

今度は、一見して、前半・後半の違いが分かりますね。

# 3. JS divergence

何それ？という方は、こちらの[記事](http://qiita.com/kilometer/items/5be635edefeadaca9281)。
<img width=700, alt=JSD.png src=https://qiita-image-store.s3.amazonaws.com/0/92401/902e6302-5195-5f76-d778-7997aa6a5132.png>

いい感じですね。

# 4. clustering
![clust.png](https://qiita-image-store.s3.amazonaws.com/0/92401/17541a84-7109-61e1-5f18-1bdba36efe4f.png)

という事でメデタシ。
Laravelでログを出力する

# 前置き
この記事はlaravel5.0で動作確認を行ない書いております.

# laravelでのログの使い方
laravelでログ出力を行うのは簡単で, ログファサードを使用して

```php
Log::debug('デバッグメッセージ')
```

と, ログレベルに対応したメソッドを呼び出してやるだけでログが書き出されます.

# ログの出力レベルを変更する
デフォルトではログの出力レベルが最低(あるいは最高？)の`debug`レベルになっており
全てのログが出力されます.
開発段階では, これでよいのですが, 流石にProd環境で全てのログを出すのもバカバカしいので, 
ログの出力レベルを変えたいところです.
ちょっと調べたところ, ログ出力レベルには対応する設定項目があるわけではなく, Loggerの実体であるMonoLogインスタンスに, 直接設定を渡してやる必要のようだ.
どこでこの設定を行うのかだが, DIコンテナの生成時か, 各コントロール共通のMiddlewareを作ってその中でやるかするのが良さそうです.
ここでは, 参考サイトを真似て, `AppServiceProvider#register`で行うことにします.

```php:app/Providers/AppServiceProvider.php
    public function register()
    {
        $this->app->bind(
            'Illuminate\Contracts\Auth\Registrar',
            'App\Services\Registrar'
        );

        // ログレベルの設定
        $monolog = Log::getMonoLog();
        foreach ($monolog->getHandlers() as $handler) {
            $handler->setLevel(env('APP_LOG_LEVEL', 'error'));
        }
    }
```

あとは, 各環境毎に`.env`ファイルでAPP_LOG_LEVELを設定してあげるだけでOKです.

## 追記
laravelのバージョン5.2では, config/app.phpで`log_level`の値を設定することができるようです.

```php:config/app.php
'log_level' => env('APP_LOG_LEVEL', 'debug'),
```

コメントで教えてくださった@nunulk さん, ありがとうございました


# 実行されたSQLをログに出したい
SQL実行時に, `illminate.query`というイベントが発生するので, このイベントに対するイベントハンドラを用意してやれば良い.

こんな感じのイベントハンドラクラスを作成し

```php
class QueryLogTracker {

    /**
     * Create the event handler.
     *
     * @return void
     */
    public function __construct()
    {
        //
    }
    /**
     * Handle the event.
     *
     * @param  illuminate.query  $event
     * @return void
     */
    public function handle($query, $bindings)
    {
        //
        if (env(APP_DEBUG)) {
            Log::debug('EXECUTE SQL:[' . $query . ']', ['BINDINGS'=>json_encode($bindings)]);
        }
    }
}
```

app/Providers/EventProvider.phpにて, `illminate.query`イベントに対するイベントハンドラとして登録してやればOK

```php
    /**
     * The event handler mappings for the application.
     *
     * @var array
     */
    protected $listen = [
        'event.name' => [
            'EventListener',
        ],
        'illuminate.query' => [ // 追加
            'App\Handlers\Events\QueryLogTracker',
        ],
    ];
```

# 参考
http://stackoverflow.com/questions/32168163/laravel-5-different-log-levels-for-development-and-production

http://qiita.com/deadcheat/items/1161efe5484a83ca3a2e

https://laravel.com/docs/5.2/errors
Bash | あなたが扱っているのは本当に環境変数ですか？ (環境変数を上書きできているようで出来てないケース )


# スクリプト

たとえば「環境変数 `COLOR` に何が与えられても、シェル内で上書きして標準出力する」というスクリプトがある場合。

```bash:env.sh
COLOR='green'

echo Varbiable color is $COLOR
echo ENV color is $(printenv COLOR)
```

# 環境変数を渡した場合

`COLOR=red` を渡してシェルを実行しても、出力は当然、上書きされた値になる。

```bash
$ COLOR=red bash env.sh
```

```
Varbiable color is green
ENV color is green
```

# 環境変数を渡さなかった場合

だがそもそも環境変数 `COLOR=` を渡さずシェルを実行した場合。
普通の変数は存在するが、環境変数は存在しない状態になった。

```bash
$ bash env.sh 
```

```bash
Varbiable color is green
ENV color is
```

# どうやら

シェル実行時に環境変数を渡した場合は、その変数は「環境変数」扱いに。
そうでない場合は「普通の変数」扱いになるようだ。

なおかつご覧のとおり、シェルでは「環境変数」と「普通の変数」の区切りは、わりと曖昧っぽい。

# 結論

- スクリプト内で、いきなり大文字の変数代入 ( `NAME=yuma` ) をしても、環境変数にはならない。
- スクリプト内で環境変数を作る場合は export ( ex. `export NAME=yuma` )  する。
- いちど環境変数に「なった」ものは、`NAME=yuma` のように、普通の変数と同じように代入できる。
- スクリプト起動時に `Name=yuma example.sh` のように書いた場合、その変数に対して、スクリプト内で export したのと同じ効果が得られる。


# 初期指定されていない環境変数を上書きする

export すると環境変数を上書きできる。

## スクリプト

```bash:env.sh
export COLOR='green'

echo Varbiable color is $COLOR
echo ENV color is $(printenv COLOR)
```

## 結果

```bash
$ bash env.sh
```

```bash
Varbiable color is green
ENV color is green
```


# 環境

- bash 3.2
- sh 3.2

# 参考

- https://www.digitalocean.com/community/tutorials/how-to-read-and-set-environmental-and-shell-variables-on-a-linux-vps








<!-- Update From Qiita API -->

# チャットメンバー募集


何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
peter cooper's multi version irb

https://gist.github.com/peterc/1226588

```rb
def foo(bar: 'default')
  puts bar
end

foo # => 'default'
foo(bar: 'baz') # => 'baz'
```

```bash
vagrant@precise64:~/data$ rvm 2.2.3 exec ruby 1.rb
default
baz
vagrant@precise64:~/data$ rvm 1.9.3 exec ruby 1.rb
1.rb:1: syntax error, unexpected tLABEL, expecting ')'
def foo(bar: 'default')
            ^
1.rb:1: syntax error, unexpected ')', expecting $end
def foo(bar: 'default')
                       ^
```
Ionic2でプラグインを使うとき - GitHubで公開されているプラグインのインストール先は固定化しておくと吉

辛いことが起きた。

GitHubで公開されているプラグインの更新が掛かった結果、全く動作しなくなってしまった。

Ionicでpluginをインストールするときに、コミットのハッシュ値かブランチ名（たぶんタグもOK）を指定すると、そういったことが起こらないようになる（もしくはforkしとくとかね）。

プラグインを追加するときに、次のコマンドを打つと、そのコミットのハッシュ値のファイルをダウンロードしてくれる。

```
ionic plugin add http://github.com/作者/リポジトリ名#ハッシュ値
```

でも、package.jsonに記載される値はどうも保存されないようなので、同じプロジェクト内の他の人でも同じバージョンが使えるように書き換えておく。


```package.json(修正前)
{
  "cordovaPlugins": [
    {
      "locator": "http://github.com/作者/リポジトリ名",
      "id": "プラグインのID"
    }
  ]
}

```
↓

```package.json(修正後)
{

  "cordovaPlugins": [
    {
      "locator": "http://github.com/作者/リポジトリ名#ハッシュ値",
      "id": "プラグインのID"
    },

  ],
}
```

なにか悪いことをしてしまったのかと自分のプロジェクトのブランチを戻って調査した時間のことを考えると涙が出てきます。
[解決] 80070006-2000CエラーでWindows10アップグレードができなかった件

Windows10無料アップグレードの期限も間近に迫ってきたので、ずっと放置してあったhp 2760p（Windows8.1/64bit/4GB/64GB SSD換装済み）のアップグレードに再度着手。Windows10化バッチコイ派なのでもっと早い段階で一度はチャレンジしたんだけど、再起動かかって一定のところまで進んだあとになにかしらのエラーで断念して8.1に巻き戻って再起動。Windows Update画面をみると「80070006-2000C」というエラーが赤字で出ているという状態。再チャレンジする度に3GBほどのアップデータをDLするのでなかなかに心が折れる。数回試したところで断念した保留にしてました。
しばらく時間が空いたのでアップデータにもなにかしらの進歩があるかもと思って何度かやってみるも結果は同じ。[こちら](http://www.tomshardware.com/forum/id-2754912/windows-upgrade-error-80070006-2000c.html)にあるようなコマンドプロンプトからの呪文も試したけど効果無し。また復元ポイントを全て消すべし、というのも試したけどダメ。

結局のとこ、空き容量を広げたら通りました。準備段階ではなにも警告されないのでまさかと思ったんですが、容量食ってたPhotoshop Elements 9とOffice 365をアンインストールして30GB近くあけたらOKでした。もともと十数GB空いてたので、まさかそれ以上いるとは。Office365は簡単に再インストールできたけど、PhotoshopはCD-ROM発掘しないとだし、まぁ家族用だから当面無しでいっか...

もうちょっとユーザフレンドリーなエラーを出してほしいすね。
ruby pipe

```rb
r, w = IO.pipe
Thread.new do
  w.write "foo"
  w.close
end
p r.read
```

```rb
r, w = IO.pipe
Process.fork do
  w.puts "foo"
  w.close
end
p r.gets 
```

```rb
r, w = IO.pipe
Process.fork do
	r.close
  w.write "foo"
end
w.close
p r.read 
```

https://www.sitepoint.com/forking-ipc-ruby-part-ii/

https://github.com/kschiess/cod
Serverlessフレームワークでデバッグする（ブレークポイントかける）方法

ServerlessフレームワークでLambda関数をデバッグする方法をまとめました。

# 単体テスト
指定のLambda関数のevent.jsonにて入力パラメータを書き、下記コマンドを実行

```
$sls function run
```

# デバッグ（ブレークポイントをかける）
ローカルでLambda起動できるオフラインサーバ（擬似API Gateway）を構築します。
[serverless-offline](https://github.com/dherault/serverless-offline)モジュールをインストール

```
$npm install serverless-offline --save
```

プロジェクトのs-functions.jsonにてプラグインを追加します。
"plugins": ["serverless-offline"]

プロジェクトフォルダにて下記コマンドでserverless-offlineをデバッグ起動します。
（[node-inspector](https://github.com/node-inspector/node-inspector)のインストールが別途必要です）

```
$node-debug $(type -p serverless) offline start --prefix <stage名> --debugOffline
Node Inspector v0.12.8
Visit http://127.0.0.1:8080/?port=5858 to start debugging.
Debugging `/Users/admin/.nvm/v4.3.2/bin/serverless`

Debugger listening on port 5858

Serverless: Starting Offline: <stage名>/us-east-1.  

(略)

Serverless: Offline listening on http://localhost:3000  
```

serverless-offlineは3000ポートで起動します。

```
http://localhost:3000/<stage名>/<api>
```

node-inspectorにアクセスします。
http://127.0.0.1:8080/?port=5858

![スクリーンショット 2016-07-27 14.43.44.png](https://qiita-image-store.s3.amazonaws.com/0/55077/22e37584-eeaf-81a7-d4e0-ad88d336c3b8.png)


utilステージにtestのGET APIを作成していたとして
ブラウザで下記URLにアクセス(リクエスト)
http://localhost:3000/util/test

ブレークポイントで止まり、変数もデバッガーでチェックできます。

![スクリーンショット 2016-07-27 14.54.10.png](https://qiita-image-store.s3.amazonaws.com/0/55077/fd1657da-7e63-0c33-35ec-17000e032bfc.png)
Docker 1.12 RC5 swarm mode をさわってみる

## 概要
Docker 1.12 RC2 のころと RC5 で変わっているところをメモ。
Docker swarm mode で遊んでみた感想。

### 不具合
CentOS7でrpmからインストールされているのですが、RC5でバグが混じってます。(github上では[すでに修正されている](https://github.com/docker/docker/commit/3cddda3bbb0cbc6f600b228b61e1110e0cf34c65)ので次のリリースではなおっているでしょう。)
[不具合](https://github.com/docker/docker/commit/04104c3a1e6cad30cb41b762e8832215466c0e95)の関係で
`/usr/lib/systemd/system/docker.socket`
がインストールされなくなったのですが
`/usr/lib/systemd/system/docker.service`
内に
`Require=docker.socket`
と記載があり、docker.socketが無いため、dockerサービスが立ち上がりません。
とりあえずは手動で修正(該当行を削除して`systemctl daemon-reload`)しましょう。


## 変わったところ

```
 docker swarm init --listen-addr <node-01のIPアドレス>:2377
```
RC2のころはこれで普通にクラスタ初期化できてましたが、一部環境では

```
Error response from daemon: could not choose an IP address to advertise since this system has multiple addresses - specify one with --advertise-addr
```
といわれます。アドレスいくつも持ってる場合はlistenじゃなくてadvertiseを使いましょう

```
 docker swarm init --advertise-addr <node-01のIPアドレス>:2377
```
また、クラスタ初期化時に、Tokenが発行されます。
node用とmanager用です。

```
docker swarm init --advertise-addr 192.168.57.220:2377
Swarm initialized: current node (3p05tbv2ap6guq3m6whxxtx1l) is now a manager.

To add a worker to this swarm, run the following command:
    docker swarm join \
    --token SWMTKN-1-0l6b3efum2k90ejmxmc3zlbhlu342djlgoysbshbwy15m15l9x-7yjzu2zzsrhpklbgk84i3uaev \
    192.168.57.220:2377

To add a manager to this swarm, run the following command:
    docker swarm join \
    --token SWMTKN-1-0l6b3efum2k90ejmxmc3zlbhlu342djlgoysbshbwy15m15l9x-detp1i0geqf3t1axmwhsf1oyo \
    192.168.57.220:2377
```
既存のクラスタに参加する場合は、このTokenが必要となります。

```
 docker swarm join --token <TOKEN> <node-01のIPアドレス>:2377
```
セキュアになったというか、ミスが減りそうですね。

## 遊んでみた感想
VirtualBoxで遊んでいたので、何か特有のことがあるかもしれません。
### kernel panic おきなくなった
RC2のころ、nodeを `systemctl stop docker` からの `systemctl start docker`したら、数秒でkernel panicになることがあったのですが、それがなくなりました。
原因さっぱりわからないし、ログ見てもわからなかったので報告できてなかったのですが、良かったです。

### managerが2つだと(相変わらず)つらい。
managerが3とか5いないと、分断されたときにどちらが正常なクラスタとして動いていいのかわからないですしね。

* Leaderを落とすと、Reachableだったもう1つのmanagerがLeaderに昇格してくれない。Leaderを復帰させたらReachableだったほうがLeaderになってLeaderだったほうがReachableに変わります。
* Reachableのほうを落としたあと、managerではないnodeを落とすと、Activeのままになった。そこでUnreachableになっているmanagerを立ち上げると、Reachableになり、それと同時に落ちていたnodeがDownになる。
diff > Link > 行内の変更箇所が色強調されるツール / 改行を好まない理由

関連
http://qiita.com/Mura-Mi/items/7fed2867e072f16110b8

## ツール

行内の変更箇所だけ色付けが強調されるツールもある。例として、[TFS (Visual Studio 2012)](http://benefic.net/compare-and-merge-source-control-code-better/)。

ファイル比較だけの場合、以下にツールの候補があがっている。
http://unix.stackexchange.com/questions/11128/diff-within-a-line

vimdiffあたりなど変更箇所が分かりやすい。

ただ、gitなどのバージョン履歴にて使うには別途工夫がいるかもしれない。

(追記)
@okzk さんの記事でgitにあることが記載されていた。
http://qiita.com/okzk/items/9756ac2827e78b9beca5


## 改行を好まない理由

コードに改行を入れた場合、エディタの検索結果が読みにくくなり、ソースリーディングがしにくくなる。
いくつかのエディタでは検索時に検索キーワードを含む１行(＋設定による前後数行)を検索結果窓に表示する。

例として、`:name`で検索した結果

```txt:改行なし検索結果
params.require[:model].permit(:id, :name, :address, :postal, :score)
params.require[:model].permit(:id, :name, :address, :postal, :score)
params.require[:model].doit(:id, :name, :address, :postal, :score)
params.require[:model].permit(:id, :name, :address, :postal, :score)
params.require[:model].replace(:id, :name, :address, :postal, :score)
```

```txt:改行あり検索結果
                                    :name,
                                    :name,
                                    :name,
                                    :name,
                                    :name,
```

改行なしの場合は、:nameパラメータがどういう関数で使われているかが一見できる。改行ありの場合は、検索結果の先を開いて見ないと理解できない。

一方で、「変更箇所を明白にしてdiffを読む人が変更箇所を理解しやすく」という意図に賛成する。

「行を分ける．」の例１に賛成する。複数のincludeを１行にまとめる必然性がないと感じているから。
「行を分ける．」の例２には上記の理由から賛成しかねる。


SourceTreeのUIやgithubのwebブラウザUI, bitbucketのwebブラウザUIなどで標準的に行内の変更箇所だけの色づけがされるようになればいいと思う。
Cannot read property 'fuga' of undefined　とは

エラーの内容について、ちゃんと意味を理解できていなかったので書いてみる。
今プロジェクトでjsを使っているのだが、その際に表題のような
`Cannot read property 'fuga' of undefined`
というエラーが出たりする。
これが出た時に、
「fugaがundefinedなんですね！」
というと
「fuck」
という顔をされてしまい、説明をいただきました。
英語の問題ですね。

問題は
`「'fuga' of undefined」`
意味は「undefined の　'fuga'」

fuga がundedinedなんじゃなくて、
「undefinedにある'fuga'property（名前付きの値）は読み込めません。」
という意味になる。
ということはfugaの前のオブジェクトがundefinedだということ。

今回は
hoge = undefined
hoge.fuga()
とすると上記のエラーが出た。つまりhogeがundefinedだったのだ。

なのでこういうエラーが出た時にエラーチェックをしようとしたければ

```js
if (hoge)
  hoge.fuga()
else
 ...
```
とすると、hogeがundefindedのときにきちんと分岐してくれる。


勉強になった。
Seeed Studio FUSION PCB


※ 2016年7月、Eagleユーザー向けです。一番安いプランで発注予定。
サイズや枚数、色によって料金や送料(重さ)が変わります。

# PCB (5cm x 5cm (10枚))
$ 9.90


# オーダーフォーム
http://www.seeedstudio.com/fusion_pcb.html

# PCBの色 (5cm x 5cm (10枚))

- 9.90ドル (緑)
- 19.90ドル (赤、白、黄、青 )
- 29.90ドル (黒) 

# デザインルールチェック
## DRU for ﻿2-layer board (2層)

http://www.seeedstudio.com/document/rar/SeeedStudio_2layer_DRU_no_angle_20140221.rar

## DRU for 4-layer board (4層)
http://www.seeedstudio.com/document/rar/SeeedStudio_4layer_DRU_no_angle_20140221.rar

# ガーバーデータ生成用のファイル

## Seeed Gerber Generater 2-layer board 

http://www.seeedstudio.com/document/rar/Seeed_Gerber_Generater_2-layer.zip

## Seeed Gerber Generater 4 layer board 
http://www.seeedstudio.com/document/rar/Seeed_Gerber_Generater_4-layer_1-2-15-16.rar

# 送料

![Seeed.png](https://qiita-image-store.s3.amazonaws.com/0/99731/de374164-89b3-d2ac-a40a-819f53869cde.png "Seeed.png")
QMLにて、動的生成したエレメントのクリッピング描画

# QMLのクリッピングの基本

QMLでエレメントを重ねていったときに、ベースとなる Rectangle をはみ出さずに描画したいというときは、clipプロパティを指定するだけです。描画領域の外にはみ出てしまうアニメーションを作るときなどで使います。

```qml
    Rectangle {
        id: parentRect
        x: 25; y: 25
        width: 150; height: 150
        color: "red"
        clip: true

        Rectangle {
            id: childRect
            x: 25; y: 25
            width: 150; height: 150
            color: "green"
        }
    }
```

# createObject()でエレメントを動的生成する場合

createObject() では第一引数に parent のエレメントを指定します。
しかし、ここでclip有効な parent を指定しても クリップを無視して描画がはみ出てしまいます。

```qml
    Rectangle {
        id: parentRect
        x: 25; y: 25
        width: 150; height: 150
        color: "red"
        clip: true
    }

    Component.onCompleted: {
        var hoge = hogeRect.createObject(parentRect);
    }

    Component {
        id: hogeRect
        Rectangle {
            x: 25; y: 25
            width: 150; height: 150
            color: "green"
        }
    }
```

この場合、ベースとなるエレメントと同じサイズの透明な Rectangle を重ねて、それをcreateObject() の parent としてあげると、はみ出さずに描画してくれます。

下のコードでいうと、transparentRect が parentRect によってクリップされるので、動的生成したいエレメントの親を transparentRect にしてあげれば良いということになります。

```qml
    Rectangle {
        id: parentRect
        x: 25; y: 25
        width: 150; height: 150
        color: "red"
        clip: true

        Rectangle {
            id: transparentRect
            width: parent.width; height: parent.height
            color: "transparent"
        }
    }

    Component.onCompleted: {
        var hoge = hogeRect.createObject(transparentRect);
    }

    Component {
        id: hogeRect
        Rectangle {
            x: 25; y: 25
            width: 150; height: 150
            color: "green"
        }
    }
```

## 微妙に不具合な気もしますけど。。。

createObject() で parentRect を指定した場合も、ちゃんとクリップしろよって思うけど。
Electron終了時にCacheを消す

# <i class="fa fa-cubes"></i> 概要

`XMLHttpRequest`を使うアプリで、
`C:\Users\%USERNAME%\AppData\Roaming\package.jsonのnameフィールド\Cache`
にファイルが増えていくことを観測した。(発見時で500MBほど溜まっていた)
具体的には「f_*」といったファイル。(ディスクキャッシュ？)

調査しても削除タイミングやしきい値が見つからなかった。
アプリ終了時に削除することにしたが、`fs`を使った削除はしたくなかったのでElectronの機能で削除したかった。
削除対象は`localStorage`などでない通常のキャッシュ。[^1]


どちらかと言えば`Chrome`(`Chromium`)範疇の話だと思います。

詳しい方がいらっしゃいましたら、キャッシュの仕組みをレクチャーしていただきたいものです。

# <i class="fa fa-cogs"></i> 検証環境

* Windows7 Professional 64bit
* electron 1.2.6
* node v5.2.0

# <i class="fa fa-code"></i> コード

```js

var Electron = require('electron')
var BrowserWindow = Electron.BrowserWindow;

var mainWindow = null

Electron.app.on('window-allclosed', function(){
	if (process.platoform != 'darwin') {
		Electron.app.quit()
	}
})

Electron.app.on('ready', function() {
	mainWindow = new BrowserWindow()

	mainWindow.on('closed', function() {
		Electron.session.defaultSession.clearCache(() => {})
		mainWindow = null
	})
})

```

今作っているのはウィンドウが一つなので、ウィンドウ終了時に呼び出してますが、`Electron.app.quit()`の直前の方がよかったような。

# <i class="fa fa-book" aria-hidden="true"></i> 参考

* [electron/session.md at master · electron/electron]
* [how to implement clear cache feature in electron · Issue #4903 · electron/electron]
* [Google Chrome - ForensicsWiki] 


[electron/session.md at master · electron/electron]:https://github.com/electron/electron/blob/master/docs/api/session.md#sesclearcachecallback
[how to implement clear cache feature in electron · Issue #4903 · electron/electron]:https://github.com/electron/electron/issues/4903

[Google Chrome - ForensicsWiki]:http://www.forensicswiki.org/wiki/Google_Chrome#Disk_Cache

[^1]: 別メソッドでこれらも削除可能
Pokemon Go 和 Foursquare 商業模式的互相影響

和同事聊天的時候突然想到 Pokemon Go 和店家合作推動成功的話，
可能會威脅到 Foursquare 近年來建立的和商家之間的商業模式。

目前只有想到 user 量病毒式的成長，但是還沒看得出來會風行多久。

先在這邊做一下筆記，之後再觀察好了。
【論文読み】Dialogue State Tracking using Long Short Term Memory Neural Networks

# [Dialogue State Tracking using Long Short Term Memory Neural Networks](http://www.phontron.com/paper/yoshino16iwsds.pdf)
## どんなもの？
RNN + LSTM を使うことで対話状態追跡を行う。

## 先行研究と比べてどこがすごい？
先行研究ではRNNを使っていた。しかし、単純なRNNではより広い文脈を捉えようとすると勾配消失問題が発生してしまう。そこでRNN+LSTMを使うことで問題を緩和し、より広い文脈を捉えられるようにした。

## 技術や手法のキモはどこ？
全体図は以下のようになっており、ユーザ発話から現在の対話状態が出力される。
<img width="570" alt="スクリーンショット 2016-07-27 10.17.44.png" src="https://qiita-image-store.s3.amazonaws.com/0/77079/173ed8fe-2edb-c7da-0796-3ed55ba02a36.png">

以下を結合したベクトルがLSTMに入力される:

* ユーザ発話をdoc2vecで単語埋め込みベクトルに変換
* その他ユーザ発話の特徴を捉えたベクトル

単語埋め込みベクトルに変換することで、データのスパース性に対処している。

その他の特徴は以下の2つを組み合わせたもの:

* フレーム値の出現
* 入力された発話と各スロット間の意味的類似度

フレーム値の出現の方のベクトルは、各フレーム値の出現に対応する要素が1、その他は0となるようなベクトル。
意味的類似度のベクトルは、入力発話中の各単語とスロット名の間の類似度を計算する。類似度の計算は単語とスロット名についてWordNetを用いて行う。

## どうやって有効だと検証した？
評価項目はAccuracy, Precision, Recall, F1。
評価対象は、Baseline, RNN, LSTM, Baselineと提案手法のLSTMを組み合わせたCombination。
データセットはDSTCタスクのデータセットを用いた。
LSTM単体の性能はよくないが、Baselineと組み合わせたものは性能が良いという結果になった。

<!--
|           | N | Base  | RNN  | LSTM  | Combi  |
|-----------|---|---|---|---|---|
| Accuracy  |   |   |   |   |   |
| Precision |   |   |   |   |   |
| Recall    |   |   |   |   |   |
| F1        |   |   |   |   |   |
-->

## 議論はある？
埋め込みベクトルを計算するにしてはデータ量が少なすぎたので、他のデータセットを使うことを検討中。


## 次に読むべき論文は？

* [Robust dialog state tracking using
delexicalised recurrent neural networks and unsupervised adaptation](http://mi.eng.cam.ac.uk/~sjy/papers/htyo14.pdf)
* [Word-based dialog state tracking
with recurrent neural networks](http://mi.eng.cam.ac.uk/~sjy/papers/hety14.pdf)
GitHubからのスパムメールを受け取らなくする方法

今朝になって**[GitHub] Subscribed to XXX/UnrealEngine notifications**という件名のメールが大量に来ていました。内容はどれも「UnrealEngineのプロジェクトがフォークされたので通知します」というようなもの。しかしリンク先を見てみると明らかにスパムです。大変ウザったいなと思って調べてみたらさっそく公式のフォーラムにスレッドができていました。
https://forums.unrealengine.com/showthread.php?118366-GitHub-Notification-Spam-and-Disabling-Auto-Watch-on-UnrealEngine-GitHub-Forks

このスレッドに通知を解除する方法が紹介されていました。
GitHubにログインして https://github.com/settings/notifications へアクセスすると通知設定画面が開きます。Automatic watchingのチェックを外せばプロジェクトのフォークが行われても勝手にメール通知が飛んでくることはなくなります。
![](https://forums.unrealengine.com/attachment.php?attachmentid=103708&stc=1)
PowerShell 5.0で2GB以上のファイルをzip圧縮する

# 
　PowerShell 5.0からCompress-Archiveが追加されて、cmdletから簡単にzipファイルが作成できるようになった。

```ps1
Compress-Archive src\dir dest.zip
```

しかし、まだ制限事項があり、Technetによると、

[TN Compress-Archive](https://technet.microsoft.com/ja-jp/library/dn841358.aspx)
> Because Compress-Archive relies upon the Microsoft .NET Framework API System.IO.Compression.ZipArchive to compress files, the maximum file size that you can compress by using Compress-Archive is currently 2 GB. This is a limitation of the underlying API.

とあり、現状、2GBのファイルまでしか圧縮できないようだ。
　もっとも、別に.NET Framework 4.5にそのような制限があるわけではないので、2GB以上のファイルを圧縮したいのであれば、直接フレームワークの機能を使ってしまえばよい。

```ps1
Add-Type -AssemblyName System.IO.Compression.FileSystem

[IO.Compression.ZipFile]::CreateFromDirectory(src\dir, dest.zip)
```

さらに細かく書くなら、

```ps1
Add-Type -AssemblyName System.IO.Compression.FileSystem

[IO.Compression.ZipFile]::CreateFromDirectory(src\dir, dest.zip, [IO.Compression.CompressionLevel]::Optimal, $true, [Text.Encoding]::Default)
```

としてエンコードをShift-JISにすれば、現状のCompress-Archiveでは化けてしまう、日本語のファイル名やディレクトリ名も保存できる。

日本語版が出る頃には、この辺りも改善されてるといいな。
Vimのカーソル移動が遅くなった原因

まとめて色々vimの設定をかえたら、vimのカーソル移動が急に遅くなってしまいました。.vimrcをところどころコメントアウトしていって原因を探していったところ、とても初歩的なミスだったので、ちゃんと原因を探すのがめんどくさい人がググって見つかるようにメモしておきます。

僕の場合、マークダウンの見出しサイズを変えるのに設定した以下のようなキーマップに、移動キーが含まれていたのが原因でした。移動キーが含まれているキーマップを設定してしまうと、次のキーを押すか、一定時間何も押されないのを待つまで、どのコマンドなのかを判断できないため、移動が遅くなってしまいます。

```
" markdown
:nnoremap h1 mx0i<C-r>'#<ESC>`x
:nnoremap h2 mx0i<C-r>'##<ESC>`x
:nnoremap h3 mx0i<C-r>'###<ESC>`x
:nnoremap h0 mx0dw`x
```

`h*`の部分を`t*`に変えて解決。ちなみに上記のキーマップは、いまいる行の先頭に`#`をいれたり消したりできるようになっていて、ちょっとしたメモをマークダウンでとるときにはMouを普段使っている僕としては便利だと思っています。
【Sublime Text 3 】html,css,js毎にカラースキームを設定する

こういう感じで。割りと捗ります。

![min.png](https://qiita-image-store.s3.amazonaws.com/0/34660/c3e6c14e-2c26-89e1-f914-b8f8ac4fb259.png)

## 手順

カラースキームなどを設定したいシンタックス・タイプのファイルを開いている状態で、下記メニューを選択する。  

> Sublime Text > Preferences > Settings - Syntax Specific

![minmenu.png](https://qiita-image-store.s3.amazonaws.com/0/34660/47c60494-7864-e1c9-9d5b-cd95a5cb1dc1.png)

当該のシンタックスに限定した設定ファイルが開くので、例えば下記のように設定を書き込むことで、初期設定やユーザー設定に上書きした内容を適用することができる。

```setting:SCSS.sublime-settings
{
  "color_scheme": "Packages/Sepiarize Color Scheme/Sepia Colourful.tmTheme",
  "font_size": 14,
  "font_face": "Rounded M+ 1mn regular"
}

// cssはゴミゴミしないし横幅もあまり広がらないのでフォントサイズを大きめにしたい、それにあわせて書体変えたりウェイトを一段階上げたい
```

設定したいタイプのファイル毎、手順を繰り返します👍
npm使ってるプロジェクトでgitのブランチ移動した時にちゃんとクリーンしたい時のコマンド

**\*\*注意\*\***ファイルを削除するコマンドを含んでるので、何が起きても保証できません。

 
```
git clean -xdf -e .idea && npm cache clean && npm install 
```

## `git clean`コマンド Gitで管理してないファイルを削除する

```
git clean 
```

### オプション

- x - すべての追跡されていないファイル(リポジトリで管理されていないファイルと .gitignore以下 )
- d - ディレクトリ以下も検索する
- f - force = 強制
- e - 特定のファイルを削除対象から外す (.ideaはWebStorm使いのため無視)
- n - 取り敢えず確認するだけ

( 先に確認するだけってことで、`git clean -xdn -e .idea` にしとくと安心 ) 

## npm cache clean && npm install
キャッシュとかもちゃんと消して再インストールする(git cleanでnode_modulesとかも消えてる想定)
【Swift】RxSwiftのPlaygroundを読む⑦

RxSwiftのPlaygroundを読んでみるシリーズ今回は
任意のタイミングで値を流す操作についてです。
([Connectable_Operators](https://github.com/ReactiveX/RxSwift/blob/master/Rx.playground/Pages/Connectable_Operators.xcplaygroundpage/Contents.swift))

# Connectable Operators
ObservableをConnectable Observableというものに変換する操作です。
Connectable Observableはconnectメソッドを呼ばないと値が流れません。
逆に、connectメソッドを呼ぶまで値が流れるのを止めておく、ということができます。

## publish
シンプルに、connectメソッドを呼ぶと値が流れ始めるConnectableObservableにする。

```swift
let disposeBag = DisposeBag()

let publish = Observable
    .just("🍑")
    .publish()

publish
    .subscribe { print($0) }
    .addDisposableTo(disposeBag)

publish.connect() // ←このタイミングで値が流れる
```

**結果**

```
Next(🍑)
Completed
```

## replay
connectメソッドを呼んだ後、
新たにsubscribeするものに対し、
bufferSize分前のイベントを流す。

```swift
let replay = ["🍑", "🍐", "🍎", "🍇", "🍊"]
    .toObservable()
    .replay(3)

replay
    .subscribe { print("1:", $0) }
    .addDisposableTo(disposeBag)

replay.connect() // ←このタイミングで値が流れる

replay
    .subscribe {print("2:", $0) }
    .addDisposableTo(disposeBag)
```

**結果**

```
1: Next(🍑)
1: Next(🍐)
1: Next(🍎)
1: Next(🍇)
1: Next(🍊)
1: Completed
2: Next(🍎)
2: Next(🍇)
2: Next(🍊)
2: Completed
```

## multicast
指定した別のObservableに対しても同じ値を流す。
(値の型が一致してないといけない。)

```swift
let subject = PublishSubject<String>()
subject
    .subscribe { print("PublishSubject:", $0) }
    .addDisposableTo(disposeBag)

let multicast = Observable
    .just("🍑")
    .multicast(subject) // ←subjectにも値が流れる

multicast
    .subscribe { print("multicst:", $0) }
    .addDisposableTo(disposeBag)

multicast.connect() // ←このタイミングで値が流れる
```

**結果**

```
PublishSubject: Next(🍑)
multicst: Next(🍑)
PublishSubject: Completed
multicst: Completed
```

# おわりに
ConnectableObservableへの変換はHot変換と呼ばれるそうです。
([HotなObservable とColdなObservable / Hot変換](http://qiita.com/kazu0620/items/bde4a65e82a10bd33f88#hotなobservable-とcoldなobservable--hot変換))
Cold/Hot Observableはまだ「うん？」という状態ですが、
ちゃんと押さえておく必要がありそうです。

次回はエラー処理についてです。

# 参考
https://github.com/ReactiveX/RxSwift/tree/master/Rx.playground
zeppelinでR interpreterを使う。


- なんかdefaultでいけそうなのに設定しないと使えないっぽい
- ver. 0.7.0

なので、いろいろやってメモ的な

https://zeppelin.apache.org/docs/0.6.0/interpreter/r.html

- %r, %knitrは使えてない。。。

したこと

- sparkでspark Rを有効にしてbuild
- spark, zeppelin masterでRをinstall
- zeppelinのpom.xmlに

```
<module>r</module>
```

を追加
Web版GooglePlayMusicで再生中の歌詞を表示するブックマークレット作った

# ぽえむ
音楽聞いていると、歌詞見たくない？俺は見たい。そして歌いたいよね。
しかし、探すのめんどい。探しているうちに曲は1分は進んで時間を無駄にしたと思ってしまう。
これだ！って思ったら開きたい。

(むしろ再生中にカラオケみたいにしてくれよーGoogle先生。)

# 歌詞表示に使ったサイト

https://www.musixmatch.com/

# 使い方

これコピって

``` js
javascript: window.open(encodeURI('https://www.musixmatch.com/ja/lyrics'+'/'+document.getElementById('player-artist').textContent.replace(/ /g, '-')+'/'+document.getElementById('currently-playing-title').textContent.replace(/ /g, '-')));
```

ブックマークバーに追加して、GooglePlayMusicでリンクを押す

![88da5712fa979f1f58025141943c6613.gif](https://qiita-image-store.s3.amazonaws.com/0/25772/9f012186-f78d-edc5-f11f-2c2fbc806d72.gif)

Work♡Music

# 色々ダメだということが分かったので、検索にした。

``` js
javascript: window.open(encodeURI('https://www.musixmatch.com/ja/search'+'/'+document.getElementById('player-artist').textContent+' '+document.getElementById('currently-playing-title').textContent));
```
PHPで設定ファイルを外において取り出す。

準備するファイルとして

環境設定用ファイル Env.php
総合的に継承させるクラスファイル App.php
継承先のテストファイル TestApp.php

Env.php

    連想配列をリターンするだけです。

```
return [
'data1' => 'data1desu',
'data2' => 'data1desu',
];
```

App.php

    先ほどのEnv.phpを読み込んで返す（指定された配列のデータ）

```
class App{

public static function Env($const){
$return = require_once('Env.php');
return $return[$const];
}
}
```

TestApp.php

    で、使う。

```
class TestApp extends App{

public function CallEnv(){
echo self::Env('data1');
}

}
```

ネームスペースやら何やら含めるようになると、クラス内では、この形で共通の定数を使うのがいいかと。
Laravelの形式(config直下の環境ファイル）のような使い方をする場合はこんな感じかなと。