OmniAICreator/Qiita-1.07M huggingface dataset:
PHPでXMLファイルを読み込みで配列変数に格納する方法

# 方法
json_encodeを使うとできます。

```php
$xml_obj = simplexml_load_file('./aaa.xml');
$xml_ary = json_decode(json_encode($xml_obj), true);
```

# 注意点
XMLで配列を使用する場合は、要素数が一つの場合は配列が作成されません。

```php:index.php
<?php
function get_xml_ary($xml){
    $xml_obj = simplexml_load_string($xml);
    $xml_ary = json_decode(json_encode($xml_obj), true);
    return $xml_ary;
}
$xml = '<a><b>[0] 1234</b><b>[1] 1234</b></a>';
var_dump(get_xml_ary($xml));

$xml = '<a><b>[0] 1234</b></a>';
var_dump(get_xml_ary($xml));
```

```:output
array(1) {
  'b' =>
  array(2) {
    [0] =>
    string(4) "[0] 1234"
    [1] =>
    string(4) "[1] 4567"
  }
}
array(1) {
  'b' =>
  string(4) "[0] 1234"
}
```

# 参考
http://fdays.blogspot.jp/2011/03/php-simplexml.html
http://php.net/manual/ja/function.simplexml-load-string.php#102277
netBeans PHPバンドル でnode開発する時httpモジュール使ってるファイル開いて右クリックでRun with Node.jsするの面倒なので▶で実行できるようにする

プロジェクトのプロパティ＞実行構成
実行方法を「スクリプト(コマンド行で実行)」に変更
「デフォルトのPHPインタプリタの使用のチェック」を外す
「PHPインタプリタ」にnodeのpathを入力
「開始ファイル」に任意のスクリプトを指定

![スクリーンショット 2015-04-08 13.38.17.png](https://qiita-image-store.s3.amazonaws.com/0/13289/0a892a82-d3e3-fe91-99e9-ebbcf904f628.png)


NodeJSプラグインって右クリックでRun with Node.jsする機能しか無いのかな
require先追っかけてくれない
AtomでanyenvのPATH


AtomのPackageってRubyとか呼ぶの結構多いよね。

Dockとかから起動したときとかPATHが設定されてなくて困るよね。

init.coffeeにこんなの書いておくといいね。

```coffee:init.coffee
if process.env.PATH.indexOf('anyenv') == -1
  anyenvPath = "#{process.env.HOME}/.anyenv"
  if fs.existsSync(anyenvPath)
    shims = fs.readdirSync("#{anyenvPath}/envs/").map (file)->
      "#{anyenvPath}/envs/#{file}/shims"
    .join(":")
    process.env.PATH = "#{shims}:#{process.env.PATH}"
```
[Mac版] PC起動時に中身が消えるフォルダを作る方法

Webの仕事をしていると、たくさんのファイルをダウンロードしたり、
サーバーにアップするための画像を一旦HDDに書き出したりと、
ゴミが非常に溜まりやすいです。1週間もするとPCがゴミだらけで、
掃除するのも気が重い。

ファイルをゴミ箱にストックしていくと、ゴミ箱もパンパン！
ゴミ箱を掃除しようと開いてみると、不安でなかなか消せない。

ある日、「起動時に空になるフォルダを作れないかな？」と
疑問になり、いろいろ試してみました。

OSXはUnix系のOSであり、tmpディレクトリがあるはず。
Unixのtmpディレクトリは、起動と同時にクリアされるので、
これは使えそうだ。

ということで仕組みは下記の通りです。

1. /tmp 直下にディレクトリを作成します（ここではTmpDesktopとします）
2. デスクトップにシンボリックリンクを作成して、アクセスしやすい状態にします。
3. PC起動時にTmpDesktopが消えてしまうので、ユーザーログイン時に自動で作成されるようにします。

では詳細をみてみましょう。

## TmpDesktopを起動時に自動作成

ここではmac純正アプリのAutomatorを使います。

### Automatorでアプリを作成
まずはAutomatorを立ち上げて、『アプリケーション』を選択します。
![スクリーンショット 2015-04-08 10.17.38.jpg](https://qiita-image-store.s3.amazonaws.com/0/74723/e2fd4f0f-1926-b9d0-bc37-09003c724aa9.jpeg)

検索ウィンドウで『新規フォルダ』を検索し、フローに追加します。
![スクリーンショット 2015-04-08 10.20.34.jpg](https://qiita-image-store.s3.amazonaws.com/0/74723/e56ff618-fe03-c9ac-1a5f-20ac79d223f4.jpeg)

次に名前と場所の設定を行います。ここでは名前をTmpDesktopとします。
場所の設定ですが、tmpディレクトリが隠しフォルダのため、ちょっと手間がかかります。
Finderで『移動』→『フォルダへ移動』で/tmpと入力します。そして、tmpフォルダをサイドバーに
追加してきます。

Automatorで場所指定を『その他』にして、サイドバーに追加したtmpを選択します。
![スクリーンショット-2015-04-08-12.03.58.jpg](https://qiita-image-store.s3.amazonaws.com/0/74723/d60c70b4-73d5-0a0b-b990-f12307a848ad.jpeg)

最後に実行ボタンをクリックして、フォルダが作成されたかどうかを確認します。
これでフローができましたので、名前をつけてmacの『アプリケーション』フォルダに保存します。

### 起動時に自動処理
自動処理をしてくれるアプリケーションの作成ができましたので、
それを起動時に立ち上げるように設定します。

『システム環境設定』の『ユーザーとグループ』を選択して、左サイドバーから
自分のユーザーを選択します。右側の『ログイン項目』タブを開き、『+』ボタンで
先ほど作成しましたアプリケーションを追加します。
![スクリーンショット-2015-04-08-13.33.23.jpeg](https://qiita-image-store.s3.amazonaws.com/0/74723/2fdd59b8-e42a-86c1-64e4-83f0dd0f887d.jpeg)

### デスクトップにシンボリックリンクを作成する
/tmp/TmpDesktop ではアクセスがしにくいので、デスクトップに
アクセスしやすいリンクを作成します。
ターミナルを立ち上げて下記のコマンドを実行します。
`ln -s /tmp/TmpDesktop /Users/[macのユーザー名]/Desktop/TmpDesktop`

これで完成です。デスクトップにTmpDesktopができていることを確認して
消えても良いファイルを試しに入れてみます。macを再起動して、TmpDesktopの中身が
空になっていればOKです。

起動時にデータがなくなるので、大切なデータは間違っても入れないで下さいね！
macが急に落ちてしまった！なんてこともありますので、いつなくなっても良いような
ファイルだけそこにまとめましょう！

私の場合は、スクリーンショットの書き出し場所をTmpDesktopに変更して、
起動時になくなるようにしていたり、ブラウザのダウンロード保存先もそこにしています。
1度ダウンロードしたものはまたダウンロードできるものがほとんどなので、
消えても困りません。大事なものはすぐに移動させます。

この方法はゴミ箱を通さないので、PC内のゴミに困っている方はぜひお試し下さい。
日本語IMが有効なMac上のChromeでショートカットキーでコピー/ペーストをすると数秒待たされる問題 （最新版なら軽減してるけど）

## 追記 2015-12-09 16:00:00JST

たしかにレインボーカーソル出るほどひどい状態ではなくなったけど、やっぱりまだ1秒くらいは遅延がある。つらぽよ。

* Mac: 10.11.1
* Chrome: 47.0.2526.80 (64-bit)

----

## 追記 2015-12-02 20:00:00JST

12/01付けでChrome v47の安定版出てます。 [Chrome Releases: Stable Channel Update](http://googlechromereleases.blogspot.jp/2015/12/stable-channel-update.html)
[Log - 46.0.2490.86..47.0.2526.73 - chromium/src - Git at Google](https://chromium.googlesource.com/chromium/src/+log/46.0.2490.86..47.0.2526.73?pretty=fuller&n=10000)にも、これのfix commitの`7e0fac6e1d8c79e7658a94e96a3f0246dc541d82`が含まれているので、最新版にすればもう発生しないはず。
もし、発生するひとがいたらコメントくれるかgoogle codeにissue登録するのがよいと思います。
追記ここまで。

----

発生するのが確認されたバージョン
-------------------------------

* Mac: 10.10.2
* Chrome: 41.0.2272.118 (64-bit)

暫定の回避方法
---------------

* 日本語IM以外のIMEを使う （ [AquaSKK](https://github.com/codefirst/aquaskk)（@mzpさんのリポジトリのが最新でいいのかな？）, Google日本語入力など）
* ほかのブラウザを使う
* 右クリックのコンテキスメニューからコピペする

事象
---------
数ヶ月前だか数週間前だかから、Chromeでコピペをするとレインボーカーソルが出て数秒待たされる現象が発生してた。
検索してもあまり同じ症状のひとが見つからなかったんだけど、Chromiumのトラッカーみたら、4日前にIssueが上がってた。

[Issue 473850 - chromium - Chrome hangs on copying/pasting text in a input field on Mac - An open-source project to help move the web forward. - Google Project Hosting](https://code.google.com/p/chromium/issues/detail?id=473850)


発生条件が書いてあって、

1. なんらかの入力フォームであること
2. ⌘+C, ⌘+Vのショートカットを使うこと （コンテキストメニューからだと発生しない）
3. **OS標準の日本語IMを使っていること** (Google日本語入力を使えば発生しない)

IssueのなかではGoogleの検索フォームでも再現と書いてあるけど、手元の環境では再現しない。Issueのコメントでもその旨指摘されているので、プロファイルからログアウトした状態で確実に再現する方法をご存知の方は上記Issueでもここのコメントででも指摘してもらえると、fixの助けになると思います。
Google Spreadsheetだと確実に再現するんだけど、プロファイルにログインしちゃってるからなあ。

----

### 追記 2015-07-21 16:58:00JST

上記イシューでも指摘されてるけど、日本語IMが入ってるであろうユーザーでしか発生してないようで、IMEに関係してるんじゃないか的な話があり、より問題が再現しにくくなってる様子。ツライ。
ふつうのプログラマが関数型プログラミングから学べること

　関数型プログラミングには様々なメリットがあり、それらは関数型プログラミング言語を使っていない場合にも役にたつ。

　一番参考にしたいのが『**副作用**』の問題だ。さんざん指摘されているように、バグの大きな要因の一つが副作用だ。プログラマが意図しない・気づかない・忘れている副作用のために、ソフトウェアは予想外の動作に陥ってバグを生む。関数型言語では、基本的に関数には一切副作用を許さないというポリシーでこの問題に対処しようとする。

　非関数型言語でも、このアイデアを活用しよう。プログラムの設計で『**副作用のある部分**』と『**副作用のない部分**』を明確に区別してモジュール（クラス、メソッド）を設計するのだ。こうすることで、以下のようなメリットが生まれる。

1. 明確で共有しやすい設計ポリシーが得られる
2. テストの自動化が容易になる（副作用のないモジュールのテストは比較的容易）
1. テストの品質が向上する（上記で自動化率が向上するため）
2. コードの再利用性が高まる（副作用のないモジュールは再利用しやすい）
3. デバッグの効率が高まる（副作用系バグ、そうでないバグを区別したアプローチ）

　残念ながら非関数型言語では言語側のサポート（例：副作用警告みたいなものとか）はないので、モジュールの命名規則などを使って副作用の有無を示すなどの運用上の工夫が必要である。しかし、そのコストを払っても有り余るぐらいのメリットが生じるだろう。
Overtoneで音楽プログラミング！


Overtoneは手軽に音楽をプログラミングできる言語やライブラリないかなと探していて見つけたもの。

http://vimeo.com/22798433

## Install 

https://github.com/overtone/overtone/wiki/Installing-overtone
にしたがってインストールする。

### Leiningenのインストール

[leiningen](https://github.com/technomancy/leiningen)を入れる。

```bash
brew install leiningen
```

これはClojureのプロジェクト管理ツールみたいで`lein`というコマンドを使えるようになる。
Rubyで言う`rails`のようなものと思えばいいのかもしれない。

### Overtoneのインストール

Overtoneはleinプロジェクトのライブラリとしてインストールする。

leinのプロジェクトを作るには、

```bash
lein new [プロジェクト名]
```

でできる。

今回は、ドキュメントにしたがって

```bash
lein new tutorial
```

とする。
こうするといくつかのファイルが生成される。

その中の、`project.clj`というのがこのプロジェクトのDependencyを管理するもの。Railsで言えば`Gemfile`のようなもの。ここにovertoneを書いて`bundle install`の代わりに`lein deps`すれば依存を解決してくれる。

つまり、Overtoneを使うには、`project.clj`を以下のように記述：

```tutorial/project.clj
(defproject tutorial "0.1.0-SNAPSHOT"
  :description "FIXME: write description"
  :url "http://example.com/FIXME"
  :license {:name "Eclipse Public License"
            :url "http://www.eclipse.org/legal/epl-v10.html"}
  :dependencies [ [org.clojure/clojure "1.5.1"]
                  [overtone "0.9.1"] ])
```

その上で

```bash
lein deps
```

すれば良い。

## REPL

[REPL](https://github.com/overtone/overtone/wiki/Starting-a-REPL) もある

```
$ lein repl
user=> (+ 1 2)
3
```

http://java.ociweb.com/mark/clojure/article.html


## Clojureの基礎を学ぶ

REPLが出来るようになったところでClojureを学んでおこう。
とりあえず定数と関数の作り方だけ実験しておく

http://java.ociweb.com/mark/clojure/article.html

### 定数

定義

```
user=> (def startTime (System/currentTimeMillis))
#'user/startTime
```

呼び出し

```
user=> startTime
1402215629503
```


### 関数

####例1：引数なし

定義

```
user=> (defn time [] (System/currentTimeMillis))
#'user/time
```

呼び出し

```
user=> (time)
1402215719995
user=> (time)
1402215822935
```

```
user=> time
#<user$time user$time@5a9eca0a>
```


###例2：引数あり

定義

```
user=> (defn add [x y] (+ x y))
#'user/add
```

呼び出し

```
user=> (add 1 2)
3
```

## 音を出してみる

https://github.com/overtone/overtone/wiki/Getting-Started

```
(use 'overtone.live)  ; ライブラリをインポート
(definst foo [] (saw 220))  ; instrument foo を定義
(foo)  ; 音を出す fooを実行
(stop) ; 音を止める
```

## ちょっとカッコいい音楽を奏でてみる

https://github.com/overtone/overtone/wiki/Live-coding

```
(use 'overtone.live)

(definst kick [freq 120 dur 0.3 width 0.5]
  (let [freq-env (* freq (env-gen (perc 0 (* 0.99 dur))))
        env (env-gen (perc 0.01 dur) 1 1 0 1 FREE)
        sqr (* (env-gen (perc 0 0.01)) (pulse (* 2 freq) width))
        src (sin-osc freq-env)
        drum (+ sqr (* env src))]
    (compander drum drum 0.2 1 0.1 0.01 0.01)))

(definst c-hat [amp 0.8 t 0.04]
  (let [env (env-gen (perc 0.001 t) 1 1 0 1 FREE)
        noise (white-noise)
        sqr (* (env-gen (perc 0.01 0.04)) (pulse 880 0.2))
        filt (bpf (+ sqr noise) 9000 0.5)]
    (* amp env filt)))

(def metro (metronome 128))

(defn player [beat]
  (at (metro beat) (kick))
  (at (metro (+ 0.5 beat)) (c-hat))
  (apply-by (metro (inc beat)) #'player (inc beat) []))

(player (metro))
```

止めるときは

```
(stop)
```

で！
勤務"時間"と正しく向き合う



# 規則的に生活する方法

急な残業などで不規則になりがちな社会人生活

身体にとってムリな勤務状態を続けていると３年以内に健康を損なうことを自身の経験によって知ることができた昨今

社会人なりに規則的な生活を送るコツを紹介してみる


## 睡眠時間の決め方

* 起床時間を決める

* ムリなく起きられる就寝時間を決める

* 決めた時間に休み、起きる

これだけ

身体を休めることは会社員にとって非常に大切


## 出勤時間の決め方

会社の始業時間の１時間ぐらい前に着くように自宅を出発する

会社の就業時間に日々左右される生活をやめる

自身の行動サイクルに会社の勤務時間がまるっと含まれている感覚で行動できるのが理想

それにより日々の余裕も人生の余裕も生まれる


## タイムテーブル

例えば以下のような１日のタイムスケジュールを決める

これを毎日の行動の基本とし、なるべく変化させない

* 06:00 起床

* 08:00 出勤

* 20:00 退勤

* 00:00 就寝


## イレギュラー

### 繁忙期

繁忙期で仕事が多くなる期間は、必要な日数だけ退勤時間を後ろにずらす

たとえば、

```
5営業日間、
退勤時間を20:00時から22:00時に変更すると
10時間の作業時間が新たに手に入る
```

のように考える

退勤時間以外のタイムスケジュールは変えない


### 急な残業、用事

集中して対応し、なるべく短い日数で元のペースにもどす


## "眠れない"

ぐっすり眠るだけが身体を休める方法ではない

目をつぶって横になるだけでも、横になって読書でも、明日の仕事のために身体が休まればなんでもよい


## 入浴

帰宅後、浴槽での入浴がベター


## 勤務時間外

睡眠時間と勤務時間を規則的にすると、それ以外の行動も時間割に則ってくる

趣味やエクササイズの時間も開始時間や長さがある程度決まってくる


## 休日

起床時刻を平日から1時間以上変えないのがよい

平日よりも遅く起きる"寝溜め"は、次の週の体調に影響が出て最悪

どうしても"寝溜めたい"ならば就寝時間を前倒す、早寝の"寝溜め"がおすすめ
yahooログインボタンの設置方法

yahooログインボタンの設置方法について確認させてください。
ホームページ内にyahooトップページに遷移するボタンをサイズ調整して設置したいと思っています。

下記ページよりボタンサイズを変更できるようですがアプリケーションIDやロールバックURLを指定しなければボタンサイズを変更したものを取得できないのでしょうか？指定が必要な項目（state、noneなど）を教えて頂けますか。
他に指定しなければならない項目がございましたら教えて頂けますでしょうか。

また、下記サイト以外にヤフーのログインボタンのサイズ変更を行う方法がございましたら合わせてご確認ください。

よろしくお願いいたします。

http://developer.yahoo.co.jp/yconnect/server_app/explicit/
Scalaの繰り返し文

# Scalaでの繰り返し構文
Scalaで使えるループはfor, while, do-whileの3種類があるみたいなのでそれぞれを使って"Hello World"が10回表示されるものを書いてみました。

```HelloWorld.scala
object HelloWolrd {
  def main(args: Array[String]): Unit = {
    forHello
    whileHello
    doWhileHello
  }
  
  def forHello = for(i <- 0 to 9) println("Hello Wolrd " + i)

  def whileHello = {
    var i = 0
    while(i < 10) { 
      println("Hello Wolrd " + i)
      i += 1
    }
  }

  def doWhileHello = {
    var i = 0
    do {
      println("Hello Wolrd " + i)
      i += 1
    } while(i < 10)
  }
}
```

whileとdo-whileに対してforはかなりすっきり書けることが分かりました、whileとdo-whileはあんまり使われなさそうな予感。
公開鍵暗号方式のデジタル署名


デジタル署名とは、デジタル文書の正当性を保証するために付けられる、暗号化された署名情報のことで、公開鍵暗号方式を利用しているみたいなのでついでに

なりすましなどに対抗するために
文書を送ったのが自分であることを証明する

##手順
１　秘密鍵を利用して暗号化
　　データを誰かに見られても問題無い、今回は送信者が本人と判断したいだけなので

２　受信者は公開鍵を利用して複号化
　　複合化できたということは相手は秘密鍵を持っているため、本人と判断できる

##問題あり
データのサイズが大きいと秘密鍵を使って暗号化するときに時間がかかってしまう。

##解決策
ハッシュ値を暗号化する。ハッシュ値とは、対象となるデータと計算式を使って計算された値で、同じデータからは必ず同じハッシュ値が得られ、データが少しでも改竄されるとハッシュ値は異なります。

１　送信者は元のデータとデータから得られたハッシュ値を暗号化したものを受信者に送ります

２　受信者は受け取ったデータからハッシュ値を取得し、暗号化されたハッシュ値を復号化します

３　受信者は２つのハッッシュ値を比較します

この結果２つのハッシュ値が同じならば、秘密鍵での暗号化に時間をかけずに、送信者が本人だと判断することができますね。
公開鍵暗号方式とは


##手順
まず前提として **公開鍵**と **秘密鍵**があり
**公開鍵で暗号化したデータは秘密鍵でしか複号できない**
**秘密鍵で暗号化したデータは公開鍵でしか複号できない**

1  受信者は公開鍵と秘密鍵を作成し、公開鍵を外部に対して公開する（秘密鍵は公開しない）
2 送信者は公開鍵をデータを暗号化し送信します
　（第三者は秘密鍵を持ってないので複合化できない）
3 受信者は送られたデータを秘密鍵を使って複号します


##問題点
共通鍵を使う場合と比べて、処理が複雑になるため処理速度が遅くなる傾向がある
共通鍵暗号方式とは


##手順

１ 受信者は暗号化にも複合化にも使える鍵を２つ用意しておき、送信者に１つを送っておく

２ 送信者は受け取った鍵を使って暗号化して、データを送る
 これで第三者に見られても安心

３ 受信者は受け取ったデータをもう１つの鍵で複合化する

##問題点が２つ
１つ目
　送信者に鍵を送る際に、鍵が第三者に見られてしまう可能性がある
　
２つ目
　複数人とデータをやり取りする際に、相手ごとに鍵を用意する必要があるということ
nginxのキャッシュ階層を深くしすぎてinodeが枯渇した

nginxのproxy_cache_pathの設定がよくなかったためにinodeが枯渇してエラーになったので、メモしておきます。

## 設定

以下のようにしていました。

```
proxy_cache_path  /var/nginx/cache levels=2:2:2 keys_zone=hoge:10m inactive=10m max_size=100m;
```

### levels

今回の現象に関係あるlevelsについて説明します。

levelsはキャッシュファイルのディレクトリ階層を設定するパラメータです。
`levels=2:2:2`だと「2文字を3階層」になります。

キャッシュのキーのMD5が`b7f54b2df7773722d382f4809d65029c`の場合だと、キャッシュのファイルのフルパスは以下のようになります。

```
/var/nginx/cache/9c/02/50/b7f54b2df7773722d382f4809d65029c
```

この設定により、ひとつのディレクトリに全キャッシュファイルを置くのではなく、ディレクトリを作って複数のディレクトリに分散させてファイルを置いていくことができます。


これは、Linuxのファイルシステムのひとつであるext3で、ひとつのディレクトリにファイルを大量に置くとパフォーマンスが低下する問題への対応策だと思われます。

> Linuxにはあまり詳しくないので、指摘等あればコメントお願いします。

パラメータの詳細についてはnginxの[ドキュメント](http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_cache_path)を見てください。

## ディレクトリ数

それならばファイルが複数ディレクトリになるべく分散したほうが良いと考えて`levels=2:2:2`にしていました。

さて、MD5のHEX文字列から2文字のディレクトリを作るとすると`00`から`ff`までの256のディレクトリが作られます。

3階層だと`256 * 256 * 256`で最大`16,777,216`ものディレクトリが作られることになります。

## max_size

proxy_cache_pathにはmax_sizeというパラメータがあり、キャッシュ全体のサイズの上限を管理しています。

キャッシュがこのサイズを超えると、最も使われていないファイルを削除してくれるようになっています。

ところが、この機構は空っぽになったディレクトリは削除しません。

max_sizeを小さい値に設定しておいてキャッシュのファイルが増えすぎないようにしてもディレクトリが残るので、inodeが消費されていく一方です。

inactiveによる削除についても同様です。

> 当初、キャッシュディレクトリの合計サイズを調べて「max_sizeを超えているのに削除されない」と思っていましたが、nginxが見ているのがキャッシュのファイルサイズだけのようなので、大量ディレクトリによるスペース消費は抑制できないためでした

## まとめ

多階層のlevelsによって大量にディレクトリが作られることによって、inodeが枯渇してエラーになるという事態が発生してしまいました。

また仮にinodeに余裕があったとしても、1ディレクトリが4096バイトを使うので、`16,777,216 * 4096`で最大64GBを消費するので、場合によってはスペースが先に枯渇するかもしれません。

さて、階層を浅くすると、ファイルの分散の度合いは下がります。

ただし今は`max_size=100m`にしているため、キャッシュの平均サイズが1KBと考えるとファイル数は10万程度までしか増えません。

このファイル数であれば「2文字1階層」の`256`ディレクトリでも、1ディレクトリ平均400ファイルになるので大丈夫そうです。

max_sizeを増やす可能性があるので、ひとまず`levels=2:2`に設定を変更することになったのでした。
githubへのコミットメッセージ > Coverity > 静的解析ツールの結果報告

[neovimのissue865](https://github.com/neovim/neovim/issues/865)

上記のissueにタイトルとして[Coverity]という単語がある。

neovimのissueを見ていると、他に[RFC][RDY][bug]などの記載がある。それらと同等のものとして[Coverity]があるようだが、意味がよくわからなかった。

alcやオックスフォード現代英英辞典で"coverity"を引いてみたが、それらしい単語は見つかっていない。

Coverityというのは静的解析ツールらしい。

[issue988](https://github.com/neovim/neovim/issues/988)
の先頭に
「Please find the latest report on new defect(s) introduced to neovim/neovim found with Coverity Scan.」
という記載があった。

静的解析ツールでまずいとこが見つかったので修正してね、ということらしい。
Werckerでテスト時に必要なモジュールをインストールする方法


[Wercker](http://wercker.com/)はテストの進行状況がリアルタイムで確認できたりするUIがイケているCIツール。現在ベータバージョンで、Privateリポジトリでも無料で使うことが出来る。


Werkerはテストに必要なDBなどのモジュールを[Service](http://devcenter.wercker.com/articles/services/)を登録することでテスト時に使用することができる。

この時Serviceとして使えるものは[Box](http://devcenter.wercker.com/articles/boxes/)といい、以下のページから探すことが可能。
https://app.wercker.com/#explore

既存のものに目的のものが見当たらない場合、[Bashスクリプト](http://devcenter.wercker.com/articles/boxes/bash.html)か[Chef](http://devcenter.wercker.com/articles/boxes/chef.html)によってすることもできる。
Chefも結局Bashスクリプトでchef-solo呼んでるだけだけど。

## Kuromoji入りのElasticSearchでテストする例

### そもそもElastic Searchのテストって？？

Elastic Searchでテストを書く例は第3回Elastic Search勉強会の@tady_jpさんのTest Driven Search参照
https://github.com/tadyjp/test_driven_search

### 既存のリソース

Kuromojiが入っていないBoxなら公開されている。
https://github.com/wunki/wercker-box-elasticsearch

### 自前でBoxを作る

Kuromoji という日本語形態素解析をしてくれるものを含んだ Elasticsearch 環境をBoxにしてみた例

https://github.com/wantedly/box-kuromoji-elasticsearch

```ruby:wercker-box.yml
name: kuromoji-elasticsearch
version: 0.0.6
inherits: wantedly/ubuntu12.04-chef@0.0.1
type: service
platform: ubuntu@12.04
description: elasticsearch with kuromoji plugin
keywords:
  - elasticsearch
  - kuromoji
  - japanese search
packages:
  - elasticsearch@1.0.1
  - kuromoji@2.0.0
script: sudo chef-solo -c $WERCKER_SOURCE_DIR/solo.rb -j $WERCKER_SOURCE_DIR/solo.json -l debug
env:
  WERCKER_ELASTICSEARCH_VERSION: 1.0.1
  WERCKER_ELASTICSEARCH_URL: $$HOST$$:9200
  WERCKER_ELASTICSEARCH_HOST: $$HOST$$
  WERCKER_ELASTICSEARCH_PORT: 9200
```

のように wercker-box.yml を作る。

重要な部分は、

```
script: sudo chef-solo -c $WERCKER_SOURCE_DIR/solo.rb -j $WERCKER_SOURCE_DIR/solo.json -l debug
```

で、ここで何を行うかを指定している。
solo.json の中身はChefの話になるので割愛するが、興味がある人はリポジトリのソースコードを読んでみて欲しい。

ドキュメントに従ってBoxを登録すると、

https://app.wercker.com/#applications/52f897ae705d57c1620246f9/tab/details

のようになり、

```
services:
  - wantedly/kuromoji-elasticsearch@0.0.6
```

と利用することができるようになる。
Ruby(ActiveSupport)で、今月中といった範囲を一瞬で作成する方法


今月作成された記事を検索する場合、今までは

```
time = Time.now
this_month = time.beginning_of_month..time.end_of_month
Article.where(created_at: this_month)
```

といった感じに書いていましたが、```all_month```メソッドを使うと簡単に書けるようになるようです。


```
Article.where(created_at: Time.now.all_month)
```

すっきり！


他にも```all_day```、```all_week```、```all_year```があります。


```
Time.new(2015, 4, 6).all_day
=> 2015-04-06 00:00:00 +0900..2015-04-06 23:59:59 +0900

Time.new(2015, 4, 6).all_week
=> 2014-03-31 00:00:00 +0900..2015-04-06 23:59:59 +0900

Time.new(2015, 4, 6).all_month
=> 2015-04-01 00:00:00 +0900..2015-04-30 23:59:59 +0900

Time.new(2015, 4, 6).all_year
=> 2015-01-01 00:00:00 +0900..2015-12-31 23:59:59 +0900
```
Treasure Data を使う時にとりあえず読んでおくと良いドキュメント


## データインポート

http://docs.treasuredata.com/articles/import-overview

1. Streaming Import
2. App Mobile SDK
3. Bulk Import

の3種類ある。

Webアプリだと1,3の2つでログ的なものは1, DBにストアしているものは3の方法で入れれば、大抵の場合は良さそう。

## スキーマ定義

TDは基本的にはログをJSON形式で送るだけなので、予めテーブルを作ったり、スキーマを決めておく必要はない。

ただ、データを送信した後に、解析する際、各フィールドを`v['user_id']`と言った形でアクセスせずに、`user_id`でアクセスできるようにするために、以下のようにスキーマを定義すると良い。このスキーマを作ることで、デフォルトの型が指定される。また、定義は後で変更することが出来る。

http://docs.treasuredata.com/articles/schema


## 事例集

https://examples.treasuredata.com/

Hive Query の例が色々載っていて参考になる。
ただし、たまに間違いがあるので注意ｗ

## TreasureData UDF
http://docs.treasuredata.com/articles/udfs

UDFを使うとセッションでの最初のアクセス元を求める等、普通のSQLでは書くことが難しいクエリが簡単にかけたりする。


## パフォーマンスチューニング
http://docs.treasuredata.com/articles/performance-tuning


- TD_TIME_RANGE と TD_TIME_FORMAT は一緒に使ってはいけない
- v['hoge']を使わずにカスタムスキーマを使う
- `SELECT COUNT(DISTINCT(field))` を使ってはいけない
 - `SELECT COUNT(1) FROM (
  SELECT DISTINCT field FROM tbl
) t` と書く
- `ORDER BY` より `SORT BY` を使う ([違いについて](https://cwiki.apache.org/confluence/display/Hive/LanguageManual+SortBy#LanguageManualSortBy-DifferencebetweenSortByandOrderBy))
- `GROUP BY` はより分散できるものを先に置く
 - good: SELECT GROUP BY uid, gender
 - bad:  SELECT GROUP BY gender, uid
Treasure Dataでユーザー属性ごとに一覧ページのクリック率を解析する方法


Webページを運営していたら、トップページなど何らかのコンテンツの一覧ページはあるはずです。今回は、クリック率はどう変化するかなどをGoogle Analyticsじゃなく、自前で実装してより細かい分析を出来るようにするという話。

実装する際の課題としては以下の2つ。

1. 結果結果など何らかの一覧ページにおいて、表示した結果がクリックされたか、そのクリックはその次のアクションにつながったか、滞在時間はどのくらいかがなど知りたい

 => アクションが起こるタイミングが同時ではないので、複数のログをまとめた、各ユーザーセッションごとの結果を作成する方法が知りたい


2. ユーザーの属性（ログというよりはDB上のデータ）によって結果の傾向が変わるかを知りたい

 => ログをDBの情報と紐付けて解析したい




## 1. クリック情報を含むインプレッションログを作成する方法

これは、トレジャーデータのドキュメントに、

アドネットワークで、インプレッションログとクリックログからクリック率などを算出する例
http://docs.treasuredata.com/articles/analyzing-adnetwork-logs

が存在していたのでこれを見れば一発。


取得するログとしては、概ね以下のもの。

- 広告を出したページのURL
- ユーザーID(ログインしている場合)
- ユーザーのセッションハッシュ
- ユーザーのデバイスなどの環境情報
- 広告主のID
- 出した広告のID
- 広告単価

これらをImpression時とClick時にとっておくと必要なものは解析できそう。

ユーザーのセッションハッシュがなく、IPアドレスやユーザーIDなど、恒久的に同じ場合、
http://docs.treasuredata.com/articles/udfs#tdsessionize
を使うと、擬似的にセッションを作る事が出来る。

また、クリック順などが重要な場合、
http://docs.treasuredata.com/articles/udfs#tdxrank
を使うと何番目のクリックだったかなどを取ることが出来る。


## 2. ユーザーや属性ごとの分析をする方法

ログにユーザーのIDが入っているので、これとユーザ属性をJOINできれば良い。
TD側で分析するためには、DBにあるユーザー属性に関するデータをTDに送る必要があるが、その方法。

### 方法1：解析時に、ユーザーDBの内容をTDに全部入れる

まぁやるだけ。
必要なユーザーデータだけ入れるなどすれば、10万行ぐらいで、1時間もかからずに全部突っ込むことが出来た。

### 方法2：DBの情報更新時に、TDに入れ最後の情報のみ用いる

ユーザーの情報もログのように更新があるたびにTDに流す方法。解析前にバッチ処理を走らせる必要が無いのがこちらのメリット。

解析時には、TDは現状では、更新処理が出来ないので、
http://docs.treasuredata.com/articles/udfs#tdlast
を用いて最新のものだけを取得して使用すれば良い。

この関数がないとGROUP BYを使っためんどくさいクエリを書かないといけないので、これ知っているとだいぶ楽になる。
Docker でコンテナを立ち上げた時に Hubot を起動したい

Hubot 自体を GitHub においておくとして、それを持ってきて Docker コンテナ上で動かす時、コンテナを立ち上げた時に自動で Hubot の起動もできたら、極少数の作業で環境が整う。

## Hubot のリポジトリに Dockerfile をつくる

Hubot の動作に必要なイメージは[以前の記事](http://qiita.com/KeithYokoma/items/465304db13e1c571d658)で作ったものを使う。

```title:Dockerfile
FROM your/hubot
MAINTAINER keithyokoma

# env set up 1
ENV HOME /home/docker
ENV HUBOT_SLACK_TOKEN token
RUN mkdir /home/docker/hubot
ADD . /home/docker/hubot

# install hubot dependencies
RUN cd /home/docker/hubot && npm install

# start hubot on run docker container
CMD cd /home/docker/hubot; bin/hubot --adapter slack
```

## コンテナを起動する

GitHub のリポジトリを clone したら、以下のコマンドでコンテナを起動する。そうすると、Dockerfile の最後の行の CMD にあるコマンドが実行され、Hubot が立ち上がる。

```
$ docker run -d hubot_image_name
```
CodeIgniterからMODx API (MODx Evolution)を利用する方法

以下のようなコードを追加することで、CodeIgniterからMODx Evolutionで作成されたリソース、チャンクなどを呼び出せるようになります。
#コード
以下の内容をCodeIgniterのindex.phpに追加します。
```php:/index.php
$modx_dir = '/MODxのインストール先ディレクトリ/';
define('MODX_API_MODE', true);
include($modx_dir . 'index.php');
```
以下のようなライブラリを追加します。
```php:/application/libraries/lib_modx_api.php
//if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class lib_modx_api extends DocumentParser {
    public function __construct() {
       parent::__construct();
    }
}
```
#使用例
リソースID1の本文(content)を出力したい場合の例
```php:example.php 
class example extends CI_Controller {
    function __construct()
    {
        parent::__construct();
        $this->load->library('lib_modx_api');
    }
    function index() {
        $result['content'] = $this->lib_modx_api->getField('content', 1);
        $this->load->view('example', $result);
    }
}
```
#注意点
MODxはGPLv2であるが、CodeIgniter2はOSL3.0で、ライセンスは非互換とされているため、この使い方はライセンス違反になる恐れがありますので注意が必要です。
CodeIgniter3はMITライセンスのため問題ないと思います。
AWS Configが利用可能リージョンの拡大したので設定してみる

2015/03/07に利用可能リージョン拡大

米国東部（バージニア北部）
欧州（アイルランド）
アジアパシフィック（シドニー）
米国西部（オレゴン）
アジアパシフィック（東京） - New
米国西部（北カリフォルニア） - New
アジアパシフィック（シンガポール） - New
南米（ブラジル） - New
ヨーロッパ（フランクフルト） - New

# 出来ること

* AWSリソースのいわゆる履歴管理、構成管理が実現できます。
* リソースが変更されるとSNSでメールを送信する事もできる。
* メールはJSONで送信されるので、プログラムで利用できます。
* サードパーティ製の監視ツールを使用すると、インスタンスタイプ変更時にアラートとかできるそうです。

# 設定方法

Webコンソールからポチポチ簡単に設定できる

1.    コンソールでConfig選択
1.   Get Started Now押す
1.    まったく初めてならCreate a new bucket
1.    他のリージョンでも設定済みならChoose a bucket from my account
1.    Amazon SNS Topic: リソースの変更をメール通知したい場合はSNSを作る。既存のSNSを選択する
1.    Role: S3とSNSを使用する為の権限を付与します
1.    Allowを押す→画面が切り替わるまで、５秒くらい待つ
1.    Resource Lookupの画面になったら設定完了

# 感想

* インスタンスの変更履歴とか見れるのは便利
* コンソール画面には遅れて反映される。
Data shown may be up to 10 minutes old.
* リソースの変更が逐一メールされるので、結構なメールがくる

# 参考
Amazon Web Services ブログ
http://aws.typepad.com/aws_japan/2015/04/aws-config-update-more-regions-friendly-notifications-partner-support.html
JAWS-UG 中央線 第5回の勉強会に参加した

# 勉強会の基本情報
【日　時】2015年4月3日 19:30~21:30
【会　場】東京都千代田区丸の内1-9-2 グラントウキョウサウスタワー 41F グラントウキョウ サウスタワー　リクルートジョブズセミナールーム
【参加費】無料
【主　催】JAWS-UG中央線支部
【申し込み】https://jaws-ug-chuoline.doorkeeper.jp/events/21726

# 発表概要
*「CloudwatchをGrafana+Graphiteで見るようにしたら幸せになった件」 アプリボット 西村さん 20分
*「AWSがなければ実現しなかったパン田一郎」 リクルートジョブズさん 20分
*「とあるKVSをAutoScaleしてみる」 CyberZ 上原さん 20分
* LT枠 40分（お一人5分の8枠）

# 内容
### CloudwatchをGrafana+Graphiteで見るようにしたら幸せになった件
* cloudwatch + snsが、いろいろなデメリットがある
 * 閾値設定：　自動化必須
 * メール通知：見落とす
 * ログイン：面倒、監視値のみを共有できない
 * 値の保持：2週間
* 対応
 * Fluentd + Graphite + Grafanaで実現した幸せ
 * 例1：　http://qiita.com/inokappa/items/ee993b14f82e544ca6e4
 * 例2：　http://www.ryuzee.com/contents/blog/6944
* 改善効果
 * 値の投げ入れが自由
 * 2週間以上残しておける
 * Time rangeが自由自在
 * DevOpsな雰囲気
* DevOpsな雰囲気の説明
 * 問題：開発者(Dev)は、AWS権限を持っていないので、インフラ(Ops)が操作できるAWS GUIを見えないので、システム状況を把握できない
 * 対応効果：開発者は、Graphite + Grafanaのアカウントを持って、いつでもシステム状況を把握できるようになる

##### 参照
* grafana
 * https://github.com/grafana/grafana
* graphite
 * http://graphite.wikidot.com/
 * https://github.com/graphite-project/graphite-web
* その他：cloudwatch + zabbix
 * http://blog.serverworks.co.jp/tech/2014/11/27/why-zabbix-aws/
 * http://dev.classmethod.jp/cloud/aws/zabbix-with-cloudwatch/


### AWSがなければ実現しなかったパン田一郎
* パン田一郎とは
 * http://line.froma.com/
 * パン田一郎に、天気情報を聞ける
 * アルバイトの情報を教えてもらう
* 資料
 * http://atl.recruit-tech.co.jp/blog/2084/
* AWSアーキテクチャ構成
 * ![AWSアーキテクチャ構成](http://atl.recruit-tech.co.jp/wp-content/uploads/2014/07/img_lp_06.png)
 * http://atl.recruit-tech.co.jp/のブログに参照


### とあるKVSをAutoScaleしてみる
* What is AutoScaling
 * AutoScaleの定義： 最大最小数、ELB、VPC、ヘルスチェック、閾値、待機時間......
 * 「負荷増えたからサーバー1台増やしたよ」と通知
 * 「負荷減ったからサーバー1台減らしたよ」と通知
 * AutoScalingは、サーバーをLaunch, Terminateするだけ
* 運用での注意点
 * 必要なログは退避：ログは、fluentdとかで退避しとくこと削除時サーバーごと消えるので 
 * サーバーへの更新はAMIも
* Aerospike紹介
 * http://www.aerospike.com/
 * カラム指向型NoSQL
 * SSD or オンメモリ
 * Cassandraに似ているかな


# 感想
* 久しぶり、AWS勉強会に参加したので、いろいろな知識を復習できる
* LTの話は、とてもおもしろかった
* 会場は、東京駅の隣なので、とても便利だ、家と近いので、うれしかった
* JAWS-UG中央線メンバーとリクルートの皆さん、ありがとうございます
SwiftでObjctive-C id型の対応をclosureで逃げた話


# SwiftでObjctive-C id型の対応をclosureで逃げた話

仮にこういうObjective-Cのインターフェースがあったとする

番号を元にユーザーを検索する処理

```objc
- (void)searchForNumber:(int)number completionBlock:(id)block
```

このメソッドをSwift側で使いたい場合にid型なのでclosureが突っ込めないという自体になった場合の逃げの対策としてObjective-C側でBlocks型でラップする方向で回避できる

```objc
- (void)searchForNumber:(int)number completionUserBlock:(void (^)(User *))block
{
    [self searchForNumber:number completionBlock:(id)block];
}
```

するとこう書ける

```swift
self.searchForNumber(10) { (user:User)->Void in
    NSLog(user is \(user))
}
```

省略するとこうかな

```swift
self.searchForNumber(10) {
    NSLog(user is \($0))
}
```

ポイントはインターフェースの末尾の引数がblock(closure)であること、それによりSwiftで使う場合に末尾の引数を`()`の外に出せて書きやすくなる

これを利用することでオーバーロード的な使い方も可能になる
例えば検索結果としてユーザーに加えてサービスも追加になった場合はさっきと同じで以下のようにラップする

```objc
- (void)searchForNumber:(int)number completionUserAndServiceBlock:(void (^)(User *, Service *))block
{
    [self searchForNumber:number completionBlock:(id)block];
}
```

するとSwift側はこうなる

```swift
self.searchForNumber(10) {
    NSLog(user is \($0), service is \($1))
}
```

さっきと呼び出し方はあまり変えてないのに同じ書き方でパラメーターの取得ができるの超便利

場面としてそんな必要になることはないだろうけど、closureでレスポンス受け取るような場合はやってみるといいかも
Unity5系で作成したプロジェクトをUnity4.6系で開くときの注意点

##Unity5系で作成したプロジェクトをUnity4.6系で開くときの注意点

UnityメニューのEdit/Project Settings/Editorを開き、
・ vertion controlのmodeを「Visible Meta Files」にする
・ Asset Serializationのmodeを「Force Text」にする

これだけ。

注意：
・ Unity5系で作成したAnimationやAnimatorはUnity4.6系では開けなかった。(アニメーションを作り直す)
・ まれにtransformの値がおかしくなっているGameObjectがある。（位置を再設定する）
Wordpressで固定ページのトップページを除いた親階層を配列で取得する方法

#使い方
functionに次項の内容を追記して、呼び出したいテンプレート上で以下のように記述します。
```php:page.php
get_parents($page_id);
```
$page_id = 固定ページのページID
#コード
```php:function.php
function get_parents($page_id)
{
    if (is_page($page_id)) {
        $tmp_pages = array();
        $tmp_post_id = $page_id;
        while ($tmp_post_id <> 0) {
            $tmp_post = get_post($tmp_post_id);
            $tmp_pages[] = $tmp_post;
            $tmp_post_id = $tmp_post->post_parent;
        }
        $result = array_reverse($tmp_pages);
        return $result;
    } else {
        return false;
    }
}
```
GoogleTagManager：特定ドメイン、特定ディレクトリ除外設定

#条件＆やりたいこと


 * サブドメインサイトが複数ある
 * サブドメインサイトへのリンククリックイベントをGTMで取得している
 * 特定のサブドメイン、特定のディレクトリを複数除外したい

##リンク取得タグにルールを設定

```sh
{{element url}} 正規表現に一致 ^(?!.*(aaa|bbb|ccc|uploads))
{{element url}} 正規表現に一致 .*(hogehoge.com/)
{{event}} 等しい gtm.linkClick
```
1行目と2行目をひとまとめにしたかったけど、正規表現初心者にはムリがあった

###結果
>「www.hogehoge.com/」→イベント発生
>「aaa.hogehoge.com/」→除外
>「bbb.hogehoge.com/uploads/image.jpg」→除外

###TGMルールのメモ
* ルールはand条件
* orはルールを分ける

GTMも正規表現もよくわかってないので、もっと効率の良いやり方があると思うのですが :sweat_smile:
Whileで繰り返し。ターミナルからTweetしたり検索するスクリプト

OAuth1Sessionを使ってターミナルからツイートしたり検索したりというスクリプト。

words = raw_input(u"input-tweet: ")
search_words = raw_input(u"Keyword?: ")

両方の要素が空である場合にループを抜けます。

ターミナルからツイートするのは意外と便利なのかもしれません。

```python:twform.py

#!/user/bin/env python
# -*- coding: utf-8 -*-
from requests_oauthlib import OAuth1Session
import json
import sys, codecs
sys.stdout = codecs.getwriter("utf-8")(sys.stdout)


while True:
	
	words = raw_input(u"input-tweet: ")
	search_words = raw_input(u"Keyword?: ")

	C_KEY = "************************************"
	C_SECRET = "************************************"
	A_KEY = "************************************"
	A_SECRET = "************************************"


	def Post_msg():
		url = "https://api.twitter.com/1.1/statuses/update.json"
		params = {"status": words,"lang": "ja"}
		tw = OAuth1Session(C_KEY,C_SECRET,A_KEY,A_SECRET)
		req = tw.post(url, params = params)
		if req.status_code == 200:
			print "Success! Your Tweet: ", unicode(words, "utf-8")
		else:
			print req.status_code
		return Post_msg

	def Limit_Status():
		url = "https://api.twitter.com/1.1/application/rate_limit_status.json"
		params = {}
		tw = OAuth1Session(C_KEY,C_SECRET,A_KEY,A_SECRET)
		req = tw.get(url, params = params)
		if req.status_code == 200:
			limit = req.headers["x-rate-limit-remaining"]
			print ("API remain: " + limit)
		return Limit_Status
	
	def Search_words():
		url = "https://api.twitter.com/1.1/search/tweets.json?"
		params = {
				"q": unicode(search_words, "utf-8"),
				"lang": "ja",
				"result_type": "recent",
				"count": "20"
				}
		tw = OAuth1Session(C_KEY,C_SECRET,A_KEY,A_SECRET)
		req = tw.get(url, params = params)
		tweets = json.loads(req.text)
		for tweet in tweets["statuses"]:
			print (tweet["created_at"])
			print (tweet["user"]["screen_name"]), (tweet["user"]["name"])
			print (tweet["text"])
			print "=" * 60
			
		return Search_words
		
	if words:
		Post_msg()
		Limit_Status()
	elif search_words:
		Search_words()
		Limit_Status()
	else:
		break
```
ActiveJobの引数にはなんでも突っ込んでいいわけではない

ActiveJobの引数に独自クラスを突っ込むとエラーになった。

```
ActiveJob::SerializationError (Unsupported argument type: Foo::Bar):
```

serializationしてるから、下記以外のクラスを入れたらエラーになるらしい。

```
Raised when an unsupported argument type is being set as job argument. We currently support NilClass, Fixnum, Float, String, TrueClass, FalseClass, Bignum and object that can be represented as GlobalIDs (ex: Active Record). Also raised if you set the key for a Hash something else than a string or a symbol.
```

http://edgeapi.rubyonrails.org/classes/ActiveJob/SerializationError.html
自然言語処理、音声認識に必要なコーパスリンク集

#自然言語処理、音声認識に必要なコーパスリンク集

##音声認識
[音声認識コーパス　参考リンク](http://research.nii.ac.jp/src/list.html)
[日本語話言葉コーパス　参考リンク](http://pj.ninjal.ac.jp/corpus_center/csj/data/rdb-str/)

##自然言語処理
[自然言語処理コーパス　参考リンク](http://d.hatena.ne.jp/jetbead/20110915/1316103058)
[自然言語処理コーパス２　参考リンク](http://ijustat.com/link/corpus.html)


[国語国立研究所 データベース・データ集](https://www.ninjal.ac.jp/database/
)

[日本語 WordNet(日本語の概念辞書)　参考リンク](http://nlpwww.nict.go.jp/wn-ja/)

[東北大学 Open Resources 　参考リンク](http://www.cl.ecei.tohoku.ac.jp/index.php?Open%20Resources)


[自然言語処理のためのリソース　京都大学](http://nlp.ist.i.kyoto-u.ac.jp/index.php?NLP%E3%83%AA%E3%82%BD%E3%83%BC%E3%82%B9)

[NAISTテキストコーパス 　参考リンク](https://sites.google.com/site/naisttextcorpus/
)


[国立国語研究所コーパス 　参考リンク](
http://www.ninjal.ac.jp/corpus_center/
)


[欅コーパス プロジェクト](
https://github.com/ajb129/tscorpus/tree/master/japanese
)

[欅コーパス プロジェクトについて](http://www.anlp.jp/proceedings/annual_meeting/2014/pdf_dir/P8-8.pdf)

###有料

[ALAGIN 言語資源・音声資源サイト　参考リンク](https://alaginrc.nict.go.jp/resources/nict-resource/li-info/li-outline.html)



##翻訳
[グラム先生がまとめてくれた対訳コーパスコーパス　参考リンク](http://phontron.com/japanese-translation-data.php?lang=ja)

[Wikipedia日英京都関連文書対訳コーパス　参考リンク](https://alaginrc.nict.go.jp/WikiCorpus/)
igo-pythonでmecab-ipadic-neologdをつかう

MeCabはインストール済みだと仮定します。

### 手順
1. igo-pythonをインストールする`pip install igo-python`　
2. [igo-0.4.5.jar](http://sourceforge.jp/projects/igo/releases/55029)をダウンロードする
3. [mecab-ipadic-neologd](https://github.com/neologd/mecab-ipadic-neologd)をダウンロードする(git clone)
4.  `mecab-ipadic-neologd`に移動して`./bin/install-mecab-ipadic-neologd`を実行。するとbuildディレクトリができる。
5. `mecab-ipadic-neologd/build/mecab-ipadic-2.7.0-20070801-neologd-20150401`に`igo-0.4.5.jar`をコピーして次のコマンドを実行 `java -cp igo-0.4.5.jar net.reduls.igo.bin.BuildDic neologd . "utf-8"`

以上で終わりです。
うまく行ったかどうか試してみます。

```
Python 2.7.8 (default, Mar 31 2015, 12:51:47)
Type "copyright", "credits" or "license" for more information.

IPython 3.0.0 -- An enhanced Interactive Python.
?         -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help      -> Python's own help system.
object?   -> Details about 'object', use 'object??' for extra details.

In [1]: import igo

In [2]: t  = igo.tagger.Tagger('neologd')  # 先ほどjava ~ で作成したディレクトリへのパス

In [3]: for i in t.parse(u'アップルは Apple Watchを4月24日に国内発売します。'):
   ...:     print i.surface
   ...:
アップル
は
Apple Watch
を
4月24日
に
国内
発売
し
ます
。
```
Apple Watchは通常のMeCabではまとめて取得できませんが、mecab-ipadic-neologdのお陰で取得できていますね。今回はneologdを作成したディレクトリで実行したので問題ありませんでしたが、コメントにも書いたように実際に利用するときは作成したneologディレクトリにパスを通す必要があります。

これでMeCabをインストールしなくても柔軟に形態素解析できるので便利です。

## 注意点

### igo用辞書コンパイルのコマンドの解説

igo-0.4.5.jarがあるディレクトリで、
`java -cp igo-0.4.5.jar net.reduls.igo.bin.BuildDic 辞書保存ディレクトリのパス mecab-ipadic-neologd内のbuidディレクトリへのパス 文字コード`

### igo用の辞書コンパイル時のエラー

`Exception in thread "main" java.lang.OutOfMemoryError: Java heap space`というようなエラーが出た場合、オプションに`-Xmx1024m`を追加してやってください。詳細は把握していませんが、ヒープが足りないらしいのでサイズ指定して足りるようにしている見たいです。

`java -Xmx1024m -cp igo-0.4.5.jar net.reduls.igo.bin.BuildDic neologd . "utf-8"`

[こちら](http://bakedmemo.blogspot.jp/2013/01/igo-php.html)を参考にさせていただいたのですが、僕は1024では同様のエラーが出たのでなんとなく倍の2048にするとエラーが無くなりました。

## 参考
下記の記事を参考にさせていただきました。ありがとうございます。
* [メモ](http://hideaki-t.blogspot.jp/2015/03/mecab-ipadic-neologdigo-python.html)
* [BackedMemo](http://bakedmemo.blogspot.jp/2013/01/igo-php.html)
ファイルシステムの話


https://docs.docker.com/terms/filesystem


ファイルシステムはストレージにあるデータをどのように保存しどのように取得するかを決める仕組みのことである。ファイルシステムがなければ、データはただの塊であり、名前をつけたり、ディスク上のどこからどこまでが1つのグループであるかを判断することができなくなる。

## Linuxのファイルシステム

Linuxシステムが立ち上がるためには、以下の2つのファイルシステムが必要である。

1. boot file system (bootfs)
2. root file system (rootfs)

### ブートファイルシステム

- ブートローダーとカーネルが入っている
- ユーザーは変更できない
- ブートが終わるとアンマウントされる

### ルートファイルシステム

- 通常のLinux-likeなOSのディレクトリ構造を構築するもの
 - /dev, /proc, /bin, /etc, /lib, /usr, /tmp などのディレクトリ
 - バイナリやライブラリなどのファイル

このルートファイルシステムの中身と構造の違いが、あるソフトウェアパッケージが特定のLinuxのディストリビューションに依存することの原因となっている。そのためDockerは複数のLinuxディストリビューションのrootfsを同時に立ち上げてこの問題を解決している。
バイオプログラミングメモ


Google.com: "bio programming"


大きく遺伝子や細胞の役割をプログラミングしようとするものと微生物をプログラミングしようとするものに別れる。

## 研究グループ

### Microsoft Research
http://research.microsoft.com/en-us/groups/biology/


### BIOFAB
http://biofab.synberc.org/
http://www.wired.com/2013/04/bio-fab-open-source-language/


### MIT
http://web.mit.edu/voigtlab/
http://www.technologyreview.com/news/422283/software-for-programming-microbes/



## synthetic biology

dupon社のsoronaソロナ: 糖分から微生物を使ってポリエステルを作る
synthetic biology

ムーアの法則の5,6倍の速度で遺伝子解析の値段が下がっている。現在30万、2年後には1万ぐらい。
解析と組み立てる技術のコストが下がっている

糖分を検知すると電気が発生するとか

## iGEM

### UT-Tokyo
http://igem-ut.net/index.html

### 東工大
http://www.titech.ac.jp/news/2013/024331.html


## 薬を作るときの3フェーズ

臨床試験(人での試験)の前段階まで

### 1. ターゲットの特定

病原菌にあり、人にないタンパク質を特定する
特にそれが、呼吸器系など病原菌の生死に関わるタンパク質でないといけない

### 2. 酵素ではなく病原菌本体を殺すか

特定したターゲットを破壊する化合物を見つけたとして、それが本当に病原菌本体を殺すかをシャーレ上で確かめる

### 3. マウス実験

実際に生物の体内で効果を発揮するか確かめる
Capybara::Poltergeist::TimeoutErrorが稀に起こる問題の対応


`Capybara::Poltergeist::TimeoutError`で苦しんでいて解決した方法のシェア

## 対象となる症状

条件1: 以下の様なエラーが出る

```
  1) #show User can view signle preference articles
     Failure/Error: sign_in_as candidate
     Capybara::Poltergeist::TimeoutError:
       Timed out waiting for response to {"name":"visit","args":["http://127.0.0.1:38925/user/auth/facebook/callback"]}. It's possible that this happened because something took a very long time (for example a page load was slow). If so, setting the Poltergeist :timeout option to a higher value will help (see the docs for details). If increasing the timeout does not help, this is probably a bug in Poltergeist - please report it to the issue tracker.
     # ./spec/support/user_macros.rb:4:in `sign_in_as'
     # ./spec/concerns/single_preference_concern_spec.rb:28:in `block (2 levels) in <top (required)>'
```

条件2: timeoutの時間を60秒といったありえないぐらい長くしてもまだタイムアウトが起こる

```ruby:spec/spec_helper.rb
    Capybara.register_driver :poltergeist do |app|
      Capybara::Poltergeist::Driver.new(app, js_errors: true, timeout: 60)
    end
```

条件3: Time outが起こる時、そのテストはcapybaraが使われる最初の方テストである

## 対応方法


https://github.com/teampoltergeist/poltergeist/issues/294
によると、Timeoutの計算の際に、Asset Compileの時間が乗っかてしまっている可能性があるらしい。

なので、テストが始まる前に一度読み込んでおくと解決する。
例えば、`application.js`と`application.css`がある場合は以下のようにする。

```ruby:spec/spec_helper.rb
  # HACK to force asset compilation in a Rack request so it's ready for
  # the Poltergeist request that otherwise times out.
  config.before(:all) do
    if self.respond_to? :visit
      visit '/assets/application.css'
      visit '/assets/application.js'
    end
  end
```

速度を気にしているサイトだとjsは`header.js`と`footer.js`に分かれていたりするだろうし、適宜コンパイルに時間がかかっていそうなアセットを事前に読み込んでおくと良い。
S3にダイレクトアップロードするときに必要なもの



`key`: "uploads/#{SecureRandom.hex}/${filename}" # ファイル名
`acl`: "public-read"  # アクセス権限の設定
`policy`: [policy]  # アップロードするファイルの条件の設定
`signature`: [signature]  # policyをAWSのSecret Keyで暗号化したもの
`AWSAccessKeyId`: "AKIA......"  # AWSのAccess Key


policyとsignatureの実装例

```
def policy
  Base64.encode64(policy_data.to_json).gsub("\n", "")
end

def policy_data
  {
    expiration: @options[:expiration],
    conditions: [
      ["starts-with", "$utf8", ""],
      ["starts-with", "$key", ""],
      ["content-length-range", 0, @options[:max_file_size]],
      {bucket: @options[:bucket]},
      {acl: @options[:acl]}
    ]
  }
end

def signature
  Base64.encode64(
    OpenSSL::HMAC.digest(
      OpenSSL::Digest::Digest.new('sha1'),
      @options[:aws_secret_access_key], policy
    )
  ).gsub("\n", "")
end
```

## Formで注意すること

```
authenticity_token: false
multipart: true
```

## 参照

https://github.com/railscasts/383-uploading-to-amazon-s3/tree/master/gallery-jquery-fileupload
Android 5.0 WebView 40 でJavaScriptのダイアログが出ない(alert, confirm, promptなど)

Android 5.0 で厄介な現象を発見したのでメモ。

2015/04/08 追記
WebView 42 で修正されたかも。

現象
====

* アプリのWebViewでサイトを閲覧しているとJavaScriptのダイアログが出ない。
* confirmダイアログが出ず、常にキャンセル扱いとされるため、ボタンを押しても何も起きないように見える。
* つまり確定ボタンなど、ここぞというボタンが動かない！！！


発生するバージョン
===============

* Android 5.0
* WebView 41 (現時点で最新版) https://play.google.com/store/apps/details?id=com.google.android.webview&hl=ja


なぜこのような問題が？
===================

半日くらいかけて調べましたが、どうやら不具合のようです。地味に影響大きいんじゃ？？

https://code.google.com/p/chromium/issues/detail?id=447607


回避方法
=======

思いつくままに

* WebViewをアンインストールして前のバージョンに戻す
* WebChromeClientのonJsConfirm, onJsAlert, onJsPrompt, onJsBeforeUnloadを自前で実装する http://developer.android.com/reference/android/webkit/WebChromeClient.html
* 外部ブラウザで開く（開くように誘導する）
* 不具合が直るまで様子を見る


WebViewは思わぬ機種依存・バージョン依存にハマることも多く、厄介ですね。。
ShapefileをバイナリベクトルタイルにしてS3でホストする最短経路（書きかけ）

# 概要
mapbox-tile-copy で一撃でアップロードする。

# 必要なもの
- Amazon Web Services のアカウント
- node.js 実行環境（特に npm）
- <strike>tippecanoe https://github.com/mapbox/tippecanoe</strike>
- mapbox-tile-copy https://github.com/mapbox/mapbox-tile-copy

# 設定
## S3 の設定
https://github.com/mapbox/mapbox-tile-copy の Configuration にあるとおり、シェル環境で credential を適切に設定する。私の場合には、~/.aws/credentials を設定することにした。

## mapbox-tile-copy
1. node.js を入れる
2. npm install -g mapbox-tile-copy

# 作業記録
これから
EmacsでFunction Keyに割り当てを行うと、普通のエディター（？）のように使えた。

　VimよりEmacsのほうが、日本語の文書作成をするには使い易くて使うようになりました。ただ、Emacsはキーバインドが特殊で戸惑うことが多くて続けて使うには不安がありました。
　EmacsはFunctio Keyの割り当てが少ないので、ここに頻繁に使う機能をわりあてたら、とても使いやすくなりました。Emacs使いからすると邪道なのかもしれませんがお許しください。こんなこと、みんな知っているようで書いていると恥ずかしくなります。
　主に、バッファの切り替え、ブックマーク、コピー、ペースト、Window切り替え、Undoの操作をFunctionに割り当てています。文章作成だけなら、これだけで充分と思われます。

init.elへの追加
Function key 割り当てのほかに、キーボードマクロに一行コピー操作を貼り付ける。これも便利。M-x cline で使用する。

;;;---------------------------------------------------------------------
;;; F1設定
;;;---------------------------------------------------------------------
(define-key global-map [f2] 'switch-to-buffer) ;バッファの変更 
(define-key global-map [S-f2] 'list-bookmarks) ;バッファの変更 
(define-key global-map [f4] 'list-bookmarks) 
(define-key global-map [S-f4] 'bookmark-set)
(define-key global-map [f5] 'set-mark-command) ; マーク
(define-key global-map [f6] 'kill-ring-save) ;Copy
(define-key global-map [f7] 'yank) ;
(define-key global-map [S-f7] 'kill-region) ;
(define-key global-map [f8] 'other-window) ;
(define-key global-map [S-f8] 'delete-other-windows) ;
(define-key global-map [f9] ' kill-buffer ) 
(define-key global-map [f10] 'undo) 

;;;---------------------------------------------------------------------
;;; キーボードマクロ
;;;--------------------------------------------------------------------

(fset 'cline
   [?\C-a ?\C-@ ?\C-e ?\M-w ?\C-a down])

(fset 'kline
   "\C-a\C-@\C-e\C-w")
Android Studio の Command + Shift + A で "include non-menu actions" にチェックを入れる方法(1.2より前の ver)

2015-04-08 に version 1.2Beta に変更したら Command + Shift +A で全部検索対象になってた。ので、このメモ自体意味なくなった。

## まず結論

`Command + Shift + A` 2回でOK。

## Android Studio の `Command + Shift + A` が便利！

Android Studio の `Command + Shift + A` (windows だと `Ctrl + Shift + A` ) は強力で便利です。

ToolWindow や Editor 上にて、上記ショートカットを実行するとActionName や OptionName でインクリメンタルサーチして一覧を表示してくれます。

Android Studio にはたくさんのショートカットキーが存在していますが、全てを覚えるのはちょっと大変そうです。

そこで、 `Command + Shift + A` が便利です。

それっぽい単語を入力すると、それらしきメニューを表示してくれて、中から対象のものを実行できます。

例えば、「New」などと入力すると、ファイルの新規作成や、プロジェクトの新規作成が選択肢の絞りこまれて表示されます。

新規作成は `Command + N` なので、有り難みが少ない例ですね…

他には、「git」などと、入力すると、関連しそうなメニューを表示してくれます。

例えば、 Add など、便利です。

## コンテキストメニューのメニューラベル(なんて呼ぶのが正しい？)も表示したい

他にも、 CommitDirectory などができたら便利そうです！

そこで、 `Command + Shift + A` を行い「commit」と入力してみると、、、、、出てこない。。。

ToolWindow で Project を表示しているときなどに、右クリックすると表示されるコンテキストメニューには存在するのに、 `Command + Shift + A` 「commit」には見つかりません。

ならば、「Git」と打って、Git メニューを表示したい！と、思ったのですが、それも出来ない。

このようなケースでインクリメンタルサーチを行いたい場合は、 "include non-menu actions" のチェックを入れれば検索されるようになります。

せっかくショートカットキーの `Command + Shift + A` なのに、マウス操作は嫌です。

で、最初に書いた結論。 `Command + Shift + A` 2回でOKです。

これで、"include non-menu actions" にチェックが入った状態になります。
Go あるある: sync.WaitGroup を値渡しして goroutine が deadlock

以下のように `sync.WaitGroup` により goroutine を待つプログラムがあるとします。

```go
package main

import (
	"fmt"
	"sync"
	"time"
)

func main() {
	var wg sync.WaitGroup

	wg.Add(1)
	go func(wg sync.WaitGroup) {
		fmt.Println("Sleeping...")
		time.Sleep(1 * time.Second)
		fmt.Println("Awaken!")
		wg.Done()
	}(wg)

	wg.Wait()
	fmt.Println("Done")
}
```

一見問題なさそうですが、実行してみると deadlock が検出されます。

```
$ go run main.go
Sleeping...
Awaken!
fatal error: all goroutines are asleep - deadlock!

goroutine 1 [semacquire]:
sync.(*WaitGroup).Wait(0x2081a0020)
        /usr/local/Cellar/go/1.4.2/libexec/src/sync/waitgroup.go:132 +0x169
main.main()
        /Users/yuya/src/github.com/yuya-takeyama/go-practice/main.go:20 +0x7a
exit status 2
```

これは `sync.WaitGroup` を持った変数 `wg` を値渡しで goroutine に渡すことによってコピーが発生するためです。

以下のようにポインタ渡しにすることで解決できます。
(main 以外は省略します。)

```go
func main() {
	wg := new(sync.WaitGroup)

	wg.Add(1)
	go func(wg *sync.WaitGroup) {
		fmt.Println("Sleeping...")
		time.Sleep(1 * time.Second)
		fmt.Println("Awaken!")
		wg.Done()
	}(wg)

	wg.Wait()
	fmt.Println("Done")
}
```

実行します。

```
$ go run main.go
Sleeping...
Awaken!
Done
```

問題なく実行を完了できました。

もしくは goroutine からクロージャとして変数 `wg` を参照しても良いでしょう。

```go
func main() {
	var wg sync.WaitGroup

	wg.Add(1)
	go func() {
		fmt.Println("Sleeping...")
		time.Sleep(1 * time.Second)
		fmt.Println("Awaken!")
		wg.Done()
	}()

	wg.Wait()
	fmt.Println("Done")
}
```

実行結果は同じなので省略。

実際は goroutine の中で別の関数を呼び出すときにうっかり値渡ししてしまうことが多いかも。
Nginx向けにPHPをソースコードからインストール

本記事はNginxは既にインストールされている前提としております。Nginxのインストール方法は[こちら](http://qiita.com/HayneRyo/items/eccc36302623088ad7f3)を参考にしてください。

## ソースコードを取得し、展開する

PHPデベロッパーサイトから使用したいバージョンのソースコードを取得し、展開します。

```
$ wget http://jp1.php.net/get/php-5.6.7.tar.gz/from/this/mirror
$ tar zxvf php-5.6.7.tar.gz
```

## ソースコードをビルドする

実際にコンパイルし、インストールを実行します。

```
$ ./configure
    --prefix=/usr/local/stow/php-5.6.3
    --with-pear=/usr/local/stow/php-5.6.3/lib/pear
    --with-pgsql=/usr/local
    --with-mysql=/usr/local
    --with-pdo-mysql
    --with-pdo-pgsql
    --with-curl
    --with-zlib
    --with-mcrypt
    --with-openssl
    --disable-fileinfo
    --enable-fpm
$ make
$ make test
$ sudo make install
```

Apacheの場合は同一プロセスで動作させることが出来るモジュール版PHPが提供されていますが、Nginxには存在しません。Nginx上でPHPを利用する場合はCGIの形式を取り、PHPの処理要求が発生したら常駐しているphp-cgiのプロセスに処理要求を行うことになります。そのため、Nginxからの要求をphp-cgiへ伝えてやるプログラムが間に必要になります。そのプログラムが「PHP-FPM」であり、これを有効にするオプションが「--enable-fpm」となります。

その他オプションについては必要に応じて設定する必要があるので説明は割愛します。

## 起動ファイルを用意

PHP-FPMの自動起動ファイルを設置、設定します。起動ファイルの雛形はコンパイル時のディレクトリ群の中に在り、それを複製して利用します。

```
$ sudo cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
```

## PHP-FPMの設定

インストール先に既に設定ファイルの雛形が用意されているので、これを複製して環境に合わせて設定します。

```
$ cd /usr/local/stow/php-5.6.7/etc
$ cp php-fpm.conf.default php-fpm.conf
$ diff php-fpm.conf php-fpm.conf.default
--------------------------
26d25
< pid = /var/run/php-fpm.pid
34d32
< error_log = /var/log/php-fpm/php-fpm.log
151,154c149,150
< ;user = nobody
< user = nginx
< ;group = nobody
< group = nginx
---
> user = nobody
> group = nobody
--------------------------
$ sudo mkdir /var/log/php-fpm
```

## Nginxの設定

Nginx本体の設定についても、PHPが動くように変更を加えます。

```
  location / {
<     root   /var/www;
<     index  index.php;
---
>     root   /usr/share/nginx/html;
>     index  index.html index.htm;
  }

> #location ~ \.php$ {
> #    root           html;
> #    fastcgi_pass   127.0.0.1:9000;
> #    fastcgi_index  index.php;
> #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
> #    include        fastcgi_params;
> #}
---
< location ~ \.php$ {
<     root           /var/www;
<     fastcgi_pass   127.0.0.1:9000;
<     fastcgi_index  index.php;
<     fastcgi_param  SCRIPT_FILENAME  /var/www$fastcgi_script_name;
<     include        fastcgi_params;
< }
```

## 各サービスの起動

実際にWEBサーバを起動して挙動を確認しましょう。

```
$ /etc/init.d/php-fpm start
$ /etc/init.d/nginx start
```
AWS CLIとjqで有効期限切れのIAMサーバー証明書を探す

AWSコマンドラインインターフェイス（CLI）と jqコマンドを使ってこれまでにIAMにアップロードしたサーバー証明書の中から有効期限切れになっているものを探す方法です。

AWS IAMのドキュメント

* [サーバー証明書のアクション - AWS Identity and Access Management]( http://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/actionsIAMServerCerts.html)
* [list-server-certificates &mdash; AWS CLI 1.7.19 documentation](http://docs.aws.amazon.com/cli/latest/reference/iam/list-server-certificates.html)

jqコマンド

* [jq Manual](http://stedolan.github.io/jq/manual/)
* [軽量JSONパーサー『jq』のドキュメント：『jq Manual』をざっくり日本語訳してみました ｜ Developers.IO](http://dev.classmethod.jp/tool/jq-manual-japanese-translation-roughly/)


実行したコマンド

```bash
$ TODAY=`date --utc +'%Y-%m-%dT00:00:00Z'`
$ aws iam list-server-certificates | jq --raw-output ".ServerCertificateMetadataList[] | select(.Expiration < ¥"${TODAY}¥") | .Expiration +¥" -- ¥"+ .ServerCertificateName"
```

出力結果

```
2014-06-26T23:59:59Z -- ＜証明書の名前＞
2015-03-21T23:59:59Z -- ＜証明書の名前＞
2013-11-30T23:59:59Z -- ＜証明書の名前＞
...

```

jqコマンドはとても便利でした。
【rm】Linux コマンド

#rm [option] file,dir
指定したファイルやディレクトリを削除する。

##option
`-d`
ディレクトリのリンクを解除する。管理者権限が必要。

`-f`
ファイルを削除する際に確認メッセージを表示しない。ファイルがない場合でも警告メッセージを表示しない。

`-i`
ファイルを削除する際にファイルを削除して良いか、確認メッセージを表示する。

`-r`
ディレクトリを再帰的に削除する。
(ディレクトリ以下の全てのディレクトリとファイルを削除)

`-v`
ファイルを削除する前にファイル名を表示する。
Androidでアプリアイコンにバッジが付けれる？getUserBadgedIconについて調べてみた

API Level 21からPackageManager#getUserBadgedIconというメソッドが追加されました
http://developer.android.com/reference/android/content/pm/PackageManager.html#getUserBadgedIcon(android.graphics.drawable.Drawable,android.os.UserHandle


結論から言うと現在は特定の条件で固定のバッジを表示するのみのようです。

実装は
https://github.com/android/platform_frameworks_base/blob/a6ed1b9547dcd592031a415739cc7e672c068f7c/core/java/android/app/ApplicationPackageManager.java#L881 より

```java
    @Override
    public Drawable getUserBadgedIcon(Drawable icon, UserHandle user) {
        final int badgeResId = getBadgeResIdForUser(user.getIdentifier());
        if (badgeResId == 0) {
            return icon;
        }
        Drawable badgeIcon = getDrawable("system", badgeResId, null);
        return getBadgedDrawable(icon, badgeIcon, null, true);
    }
```
のようになっていて、getBadgeResIdForUserでリソースIDを取得して、Drawableを取得して返していて、
getBadgeResIdForUserでは以下のように固定のバッジ画像のリソースIDを返しているため、投稿した時点では固定のバッジをつけるのみのようです。

```
    private int getBadgeResIdForUser(int userHandle) {
        // Return the framework-provided badge.
        UserInfo userInfo = getUserIfProfile(userHandle);
        if (userInfo != null && userInfo.isManagedProfile()) {
            return com.android.internal.R.drawable.ic_corp_icon_badge;
        }
        return 0;
    }
```


isManagedProfileについてはこちらの記事に書かれているようです。企業や学校などで管理されたプロファイルを利用するようです。
Android 5.0 API概要
http://firespeed.org/diary.php?diary=kenz-1784


標準のLauncherアプリではないですが、Launcherアプリが対応していれば、Broadcastを投げてバッジを付ける方法もあるようで、Lineアプリなどは対応しているようです