OmniAICreator/Qiita-1.07M huggingface dataset:
Plot.lyのstreaming APIでSyncGatewayの_changesをリアルタイムでグラフに描画する

今回は簡単な実装でリアルタイムにストリームデータをグラフ描画できる[Plot.ly](https://plot.ly/)を使って、SyncGatewayの_changes APIで受信したドキュメントの変更をグラフ化してみました。<a href="http://ijokarumawak.github.io/couchbase/2015/05/11/syncgateway-changes-plotly/#demo">デモビデオ</a>もあります!

以前から、SyncGatewayの_changes APIについては、紹介してきましたが、これを使ってリアルタイムにグラフ描画をやってみたかったのです。

手軽にデータを可視化するツールを探していてPlot.lyを見つけました。ストリーミングAPIも備えているので、まさに本企画に持ってこいです :)

本文は[ブログ](http://ijokarumawak.github.io/couchbase/2015/05/11/syncgateway-changes-plotly/)で公開しています。

<img src="http://ijokarumawak.github.io/assets/images/syncgateway-changes-plotly.png">

# Table of Contents

1. <a href="http://ijokarumawak.github.io/couchbase/2015/05/11/syncgateway-changes-plotly/#architecture">システム構成</a>
2. <a href="http://ijokarumawak.github.io/couchbase/2015/05/11/syncgateway-changes-plotly/#demo">デモビデオ</a>
3. <a href="http://ijokarumawak.github.io/couchbase/2015/05/11/syncgateway-changes-plotly/#async-realtime">非同期のデータをリアルタイム表示するのは難しい</a>

コード解説

1. <a href="http://ijokarumawak.github.io/couchbase/2015/05/11/syncgateway-changes-plotly/#dependencies">利用ライブラリ</a>
2. <a href="http://ijokarumawak.github.io/couchbase/2015/05/11/syncgateway-changes-plotly/#graph-options">グラフオプション</a>
3. <a href="http://ijokarumawak.github.io/couchbase/2015/05/11/syncgateway-changes-plotly/#create-stream-graph">ストリーム用のグラフを作成</a>
4. <a href="http://ijokarumawak.github.io/couchbase/2015/05/11/syncgateway-changes-plotly/#changes-api">SyncGatewayの_changesを定期的に実行</a>
5. <a href="http://ijokarumawak.github.io/couchbase/2015/05/11/syncgateway-changes-plotly/#streaming-plotly">Plot.lyにデータをストリーミング</a>
Boot2DockerのDocker MySQLにローカルマシンから接続する

## 前提条件
* OS X: 10.10.3
* VirtualBox: 4.3.26
* Homebrew: 0.9.5

## Boot2Docker install

Macでdockerを使うためHomebrewでboot2dockerをインストールする。 

```
$ brew install boot2docker
```

## Boot2Docker set up

boot2dockerのイメージを起動する。

```
$ boot2docker init

...

$ boot2docker up
Waiting for VM and Docker daemon to start...
.o
Started.
Writing /Users/shua/.boot2docker/certs/boot2docker-vm/ca.pem
Writing /Users/shua/.boot2docker/certs/boot2docker-vm/cert.pem
Writing /Users/shua/.boot2docker/certs/boot2docker-vm/key.pem

To connect the Docker client to the Docker daemon, please set:
    export DOCKER_HOST=tcp://192.168.59.103:2376
    export DOCKER_CERT_PATH=/Users/shua/.boot2docker/certs/boot2docker-vm
    export DOCKER_TLS_VERIFY=1
    
$ export DOCKER_HOST=tcp://192.168.59.103:2376
$ export DOCKER_CERT_PATH=/Users/shua/.boot2docker/certs/boot2docker-vm
$ export DOCKER_TLS_VERIFY=1
```

## MySQL Docker Container 起動

MySQLのDockerコンテナーを起動する。

```
$ docker run --name test-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d -p 13306:3306 mysql:5.6.24

$ docker ps
CONTAINER ID        IMAGE               COMMAND                CREATED             STATUS              PORTS                     NAMES
14a48fd740d1        mysql:5.6.24        "/entrypoint.sh mysq   16 minutes ago      Up 1 minutes       0.0.0.0:13306->3306/tcp   test-mysql
```

## MySQLクライアントをローカルマシンにインストール
```
$ brew install mysql
==> Installing mysql dependency: openssl
==> Downloading https://homebrew.bintray.com/bottles/openssl-1.0.2a-1.yosemite.bottle.1.tar.
######################################################################## 100.0%
...

$ mysql --version
mysql  Ver 14.14 Distrib 5.6.24, for osx10.10 (x86_64) using  EditLine wrapper
```

## 接続

以下のようにすれば接続できる。boot2docker上でMySQLのDockerコンテナーが動いているので、接続先ホストはboot2dockerのVMホストにしておくこと。

```
$ mysql -h`boot2docker ip` -P13306 -uroot -pmy-secret-pw
Warning: Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.6.24 MySQL Community Server (GPL)

Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>
```

# 以上
encodeに関するエラー

設定はきちんとしているのにencodeエラーが消えない状況に何度か陥ったのでメモ。

## テンプレートの保存場所が間違っている
メールの本文を保存している場所が違うmailer/viewの中にあったので出てた...

```
mv app/views/mailer1/template_name.html.erb app/views/mailer2/template_name.html.erb
```
としたらなおった・・・ケアレスミス！

## 特殊文字を使ってた
``` ① ```は使えないらしい。メールの件名に使おうとしたらダメだった。
この辺は知ってないとできないところかな。

## どうやってエラーを特定する？
1. 中身を一旦消して、本文がダメなのかどうか見る
2. 本文がダメだったら半分復活させてみて・・とかやる
3. 本文がOKになっても起こるようなら件名にある

根気よくやるしかないのかな。経験を積むとあ、ここかな？ってわかるらしい。
【mBaaS】mobile backendのファイルストアをちょっと便利に使う

[ニフティクラウド mobile backend](http://mb.cloud.nifty.com/)ではスマホアプリのバックエンドの汎用的な機能を提供しています。

主な機能としては

* データストア（DB）
* ファイルストア(ファイルストレージ)
* プッシュ通知
* 会員管理

などがあります。

しかもこれらを基本無料で、機能的な制限もなく利用できるため、本格的な商用アプリだけでなく個人で作ったアプリにちょっと通信を使った機能を組み込んでみたいなんて時にも活用できます。

## ファイルストアの残念なところ
タイトルにもあるとおり、この記事ではファイルストアについて取り上げます。
ファイルストア機能はその名の通り画像やテキストのファイルをクラウド上に保存しておくことができる機能です。
ただ、この機能は以下のような仕様になっています。

* ファイルの情報は以下の6点
 * ファイル名
 * ファイルの種類
 * ファイルサイズ
 * 作成日時
 * 更新日時
 * ACL(アクセス権情報)
* 同一名のファイルは複数置けない
* 検索にファイル名を活用する場合に部分一致が使えない
* DBのフィールドとしてファイルもしくはポインタ情報を入れられない

つまり、ファイルストア機能をそのまま扱うには、実質ファイル名をバイネームで指定して引っ張ってくるしかないということになります。
これはかなり使いにくい、というか動的にファイルを扱うのは不可能に近い仕様となっています。
それではこれをなんとかしてもう少し扱いやすくする方法について説明します。

## 解決方法：データストアのフィールドにファイル名を格納する
シンプルではありますが、ファイル名はユニークな値なので、データストアに「fileName」フィールドを用意して、そこにファイル名を入れて管理することで、ファイルに擬似的に属性を付与したりすることが可能になります。
この方法を使うと、ファイルアップロード者の付与や写真にタグ付けする機能なんかも作れるようになります。
せっかく無料で使えるサービスですし、上手に活用して効率的にアプリを作りたいですね。

具体的な実装方法や活用方法の例などは次回書きます。

## おまけ
あまり知られていませんが、mobile backendのファイルストア機能には「[公開ファイル機能](http://mb.cloud.nifty.com/doc/dashboard/filestore.html#ファイルを公開してHTTPSで取得可能にする)」があります。
簡単に言うと決められたURLにGETリクエストを送るだけで、mobile backend機能の実装なしでファイルストア上のファイルを取得できる機能です。
ブラウザ上でアプリ作成してアプリケーションIDさえ発行されれば、アプリ側にはURLを指定すること以外は一行もコードを組み込む必要がないので、コードは組み込みたくないけどファイルストレージは活用したい、という人にはオススメです。
使い方は以下のドキュメントを参照してください。

ファイルを公開してHTTPSで取得可能にする : http://mb.cloud.nifty.com/doc/dashboard/filestore.html#ファイルを公開してHTTPSで取得可能にする
複数の Heroku アカウントを使い方

## プラグインをインストール

`heroku plugins:install https://github.com/heroku/heroku-accounts.git`

## 使い方

### アカウントを追加

例えば、personalというアカウント名をすると：

`heroku accounts:add personal`

```
Enter your Heroku credentials.
Email: あなたのメール
Password: パスワード
```

### SSH キーを作る

`ssh-keygen -t rsa -C "アカウントのメール"`

### ~/.ssh/config というファイルに情報を追加

```
Host heroku.personal
  HostName heroku.com
  IdentityFile ~/.ssh/id_heroku_personal_rsa
  IdentitiesOnly yes
```

### アカウントを一覧

`heroku accounts`

### アカウントを使う

`heroku accounts:set personal`

### アカウントを削除する

`heroku accounts:remove personal`

### Heroku のプロジェクトをCloneする

例えば、practice アカウントに my-first-appというプロジェクトがあると

`git clone git@heroku.practice:my-first-app.git`

Heroku のコマンドを実行する時、もし　`no app specified`っていうエラーが発生したら、このコマンドを実行すると大丈夫だと思います：

`heroku git:remote -a アプリケーション名`
scopeの使い道

scopeを使ったのでメモ。

## なんでscope使うの？
``` .hoge.hogehoge ```のようにメソッドチェーンができるから。複雑な検索(``` .where(...) ```みたいな)がやりやすくなります。

## 今回やったことは？
2つのDBがあり、それらはhas_manyでリレーションしていて、whereするときに汎用的に使えるようにすること。
書いたコードはこんな感じ。

```lang:sample.rb
scope :item_is, -> id{ where(item_id: id) }
scope :my_item, -> item_is(1)
scope :your_item, -> item_is(2)
scope :his_item, -> item_is(3)
scope :hers_item, -> item_is(4)
```
1行目のitem_idが引数名となる。もし取ってくる値がitem_idではなく、違うものになったときは1行目の``` where(item_id: id) ```の()中だけ変更すれば2~3行目の検索内容を同時に変えることができ、汎用性が出る。

## socpeにしたらうまくいかない？
私はscopeを書く前にいったん、whereで書いて任意の値が取れるかどうかを試してから書き換えました。この時scopeに書き換えると動かないという状況になりました。その原因はArrayクラスだったからでした。

```
Arrayクラス　→　whereは使えない。selectやmapなどで検索する
ActiveRecord →　whereが使える。
```
というわけで、Arrayクラスとかに入れてしまったものに対してはwhere/scopeが使えないというわけ。今後もこれに引っ掛かりそうだ・・・
Emacsで絵文字を表示する

せっかくUnicodeに絵文字が入ってるんだしフォントで表示したいよね。したいしたい。

筆者はOS XでEmacsを使ってるので他の環境ではどう見えるのか知らないけど、とりあえず設定してみた。

![emacs-emojis.png](https://qiita-image-store.s3.amazonaws.com/0/4121/d42a8093-1a7c-c855-9534-47a9b0428978.png)

~~*(画像は本記事の設定済みOS XのEmacs 24.5で[SKK日本語入力FEP](http://coexe.web.fc2.com/programs.html)の絵文字辞書❤を表示したところ)*~~

> **注意: ↑の画像はEmacsのカラー絵文字機能が有効だったEmacs24のものです**
> Emacs 25, 26ではカラー絵文字を表示することは基本的にはできません。
> また、モノクロの絵文字表示にも[Symbola](http://users.teilar.gr/~g1951d/) フォントのインストールが必要です。

~~つまるところ絵文字のグリフが入ったフォントセットが適切に設定されてないから何も見えないので、要するに今はまだ過渡期なんだって話ですね。~~

~~ただの設定なんだけれど、若干ややこしかったので https://github.com/zonuexe/emoji-fontset.el に置いた。~~ **これはEmacs 25, 26では基本的に必要のない設定です**。

**Emacs 25, 26では設定は追加されましたがカラー絵文字の表示はできないのでSymbolaを入れてください。**

## フォント

[Unicode Fonts for Ancient Scripts](http://users.teilar.gr/~g1951d/)にある`Symbola`フォントを入れるとよろし。~~入れなくても、Macなら`Apple Color Emoji`を、Windowsなら`Segoe UI Emoji`を利用するようにしてる。~~

**Emacs 25, 26では`Symbola`フォントをインストールする必要があります。**

## ~~インストール~~

この項目は**歴史的な記述**です。Emacs 25以降では、絵文字のフォントについて特別なカスタマイズをしたい場合を除いては**このパッケージをインストールする必要はありません**。

~~私はCaskを使ってるので、`$HOME/.emacs.d/Cask`ファイルにこんな感じに書いてインストールする。~~

```el:Cask
(depends-on "emoji-fontset")
```

```el
(use-package emoji-fontset
  :if window-system
  :init
  (emoji-fontset-enable "Symbola"))
```

~~[いまどきのEl-Get](http://d.hatena.ne.jp/tarao/20150221/1424518030)では`$HOME/.emacs.d/init.el`に、こんなふうに書けばよさそう。~~

```init.el
(el-get-bundle zonuexe/emoji-fontset.el
  (emoji-fontset-enable "Symbola"))
```

## できないこと

いまのところ国旗は一工夫しないと表示できなさそう。ご存じの通り国旗の絵文字は `[ＪＰ][ＧＢ][ＵＳ][ＫＲ]` のような二文字の[国名コード](https://ja.wikipedia.org/wiki/%E5%9B%BD%E5%90%8D%E3%82%B3%E3%83%BC%E3%83%89)を並べて記述することになってて、その二文字の組合せを国旗として表示するかどうかは表示する側の実装に依存する。

とは言ってもエディタなので、国旗として展開された方が良いのか文字のままで扱った方が編集中には便利なのかは悩みどころ。やるとすれば[imakado/emoji](https://github.com/imakado/emoji)みたいな方式が良いのかなあ。

```
🇧🇷🇨🇳🇩🇪🇪🇸🇫🇷🇬🇧🇮🇹🇯🇵🇰🇷🇷🇺🇺🇸🇮🇸🇮🇪🇦🇿🇦🇫🇿🇼🇧🇴🇰🇵
```

## 注意

~~絵文字がいっぱい入ったファイルを開くと重いよ！ 設定するだけなら特に問題なさそう。~~

**Emacs 25, 26ではカラー絵文字のサポートが削除されたので、そんなに重くはなくなりました。**

~~あと、`(emoji-fontset/turn-on)`は中身で`window-system`の判定入れてるので、呼び出す側では特に分岐しなくても良い。~~

### 2015年11月8日 追記

~~MELPAに収録されたので <kbd>M-x package-install emoji-fontset</kbd> でインストールできます ヾ(〃＞＜)ﾉﾞ~~

~~それに伴って函数名が`emoji-fontset/turn-on`から`emoji-fontset-enable`に変更になったので気をつけてください。~~

**MELPAでもインストールはできますが、Emacs 25, 26では特別な設定をしたい場合以外は基本的に不要です。**

### 2016年7月27日 追記

Emacs 25.1では、[デフォルトでいい感じの設定](https://github.com/emacs-mirror/emacs/commit/8d9e5bab41aa1995d801112b8413b514e59f033e)と[macOSでのカラー絵文字サポートの廃止](https://github.com/emacs-mirror/emacs/blob/2c2b0cd07c143e33af9f7237ef4819c28764a90f/etc/NEWS#L2610-L2617)が入ってるんで、アップデートするひとは**もはや`emoji-fontset.el`をインストールする必要はない**ですよ ヾ(〃＞＜)ﾉﾞ

~~Emacs 25以前と25.1以降で`init.el`を利用したい場合は`emoji-fontset.el`を最新版に更新して、以下のように書くといいです。~~ **Emacs26を利用してください。**

```init.el
(custom-set-variables '(emoji-fontset-check-version nil))
(emoji-fontset-enable "Symbola")
```

Symbola以外のフォントを設定してるひとは引き続き利用できるので、最新版に更新するだけで問題ないです。

### 2018年7月18日 追記

この記事の書かれた時期との情勢の変化によって誤読されにくいように変更
VMWare Player上のCentOSのネットワーク設定

[前回](http://qiita.com/kumaboarder/items/dbb03c409a68bf589054)の続き

#Objective
CentOSをInternetに接続する
CentOSをブリッジ接続でホストOSと接続するように設定する

[参考サイト](http://linux.oboe-gaki.com/archives/000374.html)

:one: VMWare Playerの画面→ネットワーク設定でブリッジを選択。「物理ネットワーク接続の状態を複製」にチェック。

:two: CentOSのアプリケーション→システムツール→設定→ネットワーク
デフォルトでは優先がオフになっていたので、オンに変更。
すると、自動的にIPアドレスを取得してくれた。

![無題.png](https://qiita-image-store.s3.amazonaws.com/0/76485/66805a0e-8294-46fc-9b78-726196546a6e.png)

:three: Firefoxを起動して、Internetに接続できたことを確認。
![無題.png](https://qiita-image-store.s3.amazonaws.com/0/76485/d93d90a2-3141-6856-1221-71198384d497.png)
slider pro設置

headタグ内


    <link rel="stylesheet" href="<?php echo esc_url( get_template_directory_uri() ); ?>/css/slider-pro.min.css" type="text/css" />
    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
    <script src="<?php echo esc_url( get_template_directory_uri() ); ?>/js/jquery.sliderPro.min.js"></script>


bodyタグ内

    <div class="sp-slides">
        <!-- Slide 1 -->
        <div class="sp-slide">
            <img class="sp-image" src="hMG_0013.jpg"/>
        </div>
        <!-- Slide 2 -->
        <div class="sp-slide">
            <img class="sp-image" src="IMG_0018.jpg"/>
        </div>
        <!-- Slide 3 -->
        <div class="sp-slide">
            <img class="sp-image" src="IMG_0019.jpg"/>
        </div>
    </div>

レスポンシブでシンプルな記述で導入可能なのが魅力。
細かい設定も可能。

ただカルーセルがうまくいかない（やりかたわからん）
２つ以下のときのスライドがうまくループしないという欠点あり。

けど完成度高いスライダーです。
Windows で ruby + guard + MozRepl で、ファイル変更を監視してブラウザを自動リロード


まずは、FireFox のアドオンで、MozRepl インストール
https://addons.mozilla.org/ja/firefox/addon/mozrepl/

FireFox 再起動後に、ツール > MozRepl > Start をクリック
これで、C:\>telnet localhost 4242 に繋がり、ブラウザにコマンド送信できる。

次に ruby から MozRepl に繋げる autoreload.rb スクリプトを作成する

~~~ruby
#!ruby
# MozRepl でリロードを実行する
require "net/telnet"
telnet = Net::telnet.new("Host" => "localhost", "Port" => 4242)
telnet.cmd( "BrowserReload();" ) { |c| puts c }
~~~

次に guard のインストール

~~~shell
gem install wdm
gem install guard-shell
guard init
~~~

Guardfile ファイルができるので、以下の様に編集する

~~~ruby
guard 'shell' do
  watch(/(.*).*rb/) {|m| `tail #{m[0]}` }
end
~~~

ファイル監視のスタート
Guardfileがある所で

~~~shell
C:\>guard start -i
~~~

※ただし秀丸での修正で、なぜか下層フォルダだけ反応しない(samba経由だからか・・・)
JSAI2015 2日目 2015.05.31(日)




## ユーザーとの長期伴走を考慮したブライダル・ウェディング情報の情報推薦システムの構築
リクルートテクノロジーズ
リクルートマーケティングパートナーズ

### 背景
挙式の準備では長期間, 多岐にわたり必要な情報を収集しなければならない（3ヶ月から半年ほど）
人によって挙式に求める嗜好性はばらつきがある
**推薦システムでの解決**
各領域ごとに推薦を行うと領域が変わるごとに学習が必要になってしまう

### 既存研究
* コンテンツベースの手法
ユーザー属性とアイテム属性の関係性をモデル化
コールドスタートに強いが, 属性に依存してしまう

* 協調フィルタリングを用いた手法

### 目的
コンテンツベースの手法を元に, 簡便な方法としてアソシエーションを用いた手法を提案
各領域を横断した推薦システムを提案する

### アルゴリズム
ユーザーの記事に対する閲覧, ブックマークからスコアを算出
{ホテル: 10, レストラン: 5, 教会: 0}
のように１つの記事に対してアイテム属性へのスコアを付ける

記事の閲覧情報を元にアソシエーションを行い, アイテム間の共起関係を算出
教会 - ホテル: Confidence = 0.7
(教会 = 12) - (ホテル = 12 * 0.7 = 8.4)

### 実験
ゼクシィのアプリ上で実験
期間によって重みを付けて新着記事・未読記事を優先

- オフラインテスト
Matrix Factorization（Spark MLib）との比較
提案手法の方がいい結果

- オンラインテスト
転移学習（共起関係を考慮）ありなしで比較
提案手法の方がいい結果

### 今後の展開
記事内容の自然言語処理によるアイテムの属性化
協調フィルタリングの組み合わせによるハイブリッド化
各領域ごとにおける潜在変数の追加



## コメント機能付動画共有サービスにおけるネタバレ検知
ニコニコ動画におけるネタバレ検知
データをAPI経由で取得し, 有識者に各コメントがネタバレかどうかを判断してもらう

* ルールベース
「〜が」「〜は」などのネタバレになりそうな表現で判断
単語のバーストしたかどうかで判断

* 機械学習
単語のngramなどで教師あり学習



## 献立の雰囲気を考慮した料理情報推薦システム

### 背景
* 単一レシピサイト
クックパッド, 楽天レシピ

* 献立サイト
ユーザーの好みや融通を効かせることができない

### システム概要
ユーザーの選択に合わせてリアルタイムに提案される料理が提案される

ユーザーの入力「中華」
→麻婆豆腐, 回鍋肉, 棒々鶏
→ユーザーの選択「麻婆豆腐」
→肉団子, 卵スープ, 棒々鶏

### アルゴリズム
レシピ名の単語と食材でレシピをベクトル化
k-meansでクラスタリング（最小クラスタのレシピ数が5以下にならないように）
クラスタ同士の共起関係を献立への出現回数でCosine類似度を用いて算出



## 大規模リワード広告システムにおける行動履歴と広告属性を利用したコンバージョン予測モデルの構築

サイバーエージェント
ヤフー

### 背景
リワード広告
コンバージョン成立で報酬を支払う


### 目的
広告利益の最大化
行動履歴と広告属性によるCV予測

### 提案手法
* クリック・CV × 広告マトリクスからNMFによってレコメンド広告を取得
クリックしてCVしたら1, CVしなかったら0

* 広告属性からロジスティック回帰によりCV予測を行いレコメンド広告を取得
ユーザー: 性別, 年齢, 前月課金額
広告: 広告の種類, 有料・無料, 広告カテゴリ

Score = NMF(0-1) + Logistic(0-1)
あまり結果は出てなく, 単体の手法の方が出ている



## 東日本大震災時のツイートのトピック系列の可視化と分析

### 背景 / 目的
Twitterから入ってくるデータはフォローなどのネットワーク情報に左右される
議論話題の変遷が観測可能なツールの実現

### 提案手法
#### 1. テキスト抽出

Twitter × LDA
LDAは短文やノイズに弱いので前処理が必要

* 一つのユーザーの全てのツイートを一つにまとめる
* 最初にURL, HashTag, ユーザー名, HTMLタグ, リツイート部分を除去
* 抽出したいのは議論のツイートなので形態素解析の結果の単語数が閾値以下の場合は無視

#### 2. トピック抽出

文書をBag-of-Wordsで表現してLDA（PLDA）で抽出
単語をtf-idfでスコアリング

#### 3. トピック系列の生成
トピックの時系列関係を表す
Ti[t]とTj[t+1]（現在のトピックと1区間後のトピック）でトピック × 単語間のコサイン類似度を計算
類似度が閾値を超えていたら同一トピックとして表現する

#### 4. トピックを可視化
HTML5 + Canvas + JavaScript



## ニューラルネットワークを用いたTweetデータの分類に関する研究

### 背景 / 目的
Twitterのシステム上, ユーザーが災害時にツイートを探しづらい
Tweetを分類して災害時に有益か無益か判断

### 提案手法
* バックプロパゲーション（NN）
ツイートをJUMAN形態素解析に掛けてカテゴリ, リンク, 文字数などを説明変数に

* ロジスティック回帰
NNモデルの検証・比較用



## ソフトクラスタリングを用いた災害情報の分類

### 先行研究
RTに基づいたクラスタリング

* 択一的分類（ハードクラスタリング）が適切か？
* 著名人のツイートが同じクラスタにまとめられやすい

### 提案手法
1. Tweet間の類似性＝RTしたユーザーの重複率（Jaccard係数）
2. 閾値を超えたらTweetノード間にエッジを貼る
3. ネットワークソフトクラスタリング[07 Zhang]


## 複雑ネットワークを用いた学術研究の動向に関する研究

### 背景 / 目的
既存研究から, ネットワークの中心にいる研究者はリーダーであることが言える
研究資金の分配
優位な研究者の特徴抽出

### 提案手法
1. 科研費と研究者ネットワークの相関分析
共著者ネットワークの中心性と科研費の相関係数

2. 研究者のクラスタリングから特徴抽出
10年前と現在の中心性の順位からクラスタリング

### 結果

研究者はリーダー・底辺・没落・成長クラスタの4つに分かれる
リーダー・成長クラスタに属する研究者の特徴

* 共著者数が多い
* 副分野を持つ人が多い
* 所属変更者が多い
質問：気象情報APIは何mメッシュでしょうか？


（この投稿は[Yahooデベロッパーネットワーク](http://developer.yahoo.co.jp/developer/community/)への質問です）

## 質問内容
気象情報APIで降水強度（実測値・予測値）を得る場合、得られる実測値・予測値は何mメッシュのデータとなるでしょうか？雨雲レーダーと同様に250mメッシュと考えてよろしいでしょうか？

## 参考URL
[Yahoo!地図、250mメッシュで降水域を予測する「高解像度降水ナウキャスト」に対応](http://internet.watch.impress.co.jp/docs/news/20141024_672909.html)
Nexus 6にAndroid M Developer Preview をインストール

Nexus 6用の Android M の Developer Preview をインストールしてみました。
端末が初期化されたり高性能な文鎮化が出来上がるケースも考えられるので、インストールは自己責任で。

# 準備
USB デバッグを有効にし、OEM Unlock でブートローダーを unlock する。
1. 開発者オプションを有効にする
2. 「開発者オプション」「USB デバッグ」にチェック
3. 「開発者オプション」「OEMロック解除を有効にする」にチェック

ここからは、端末と構築済みの開発環境がちゃんと認識されてる状態で実施。
以降は adb にパスが通ってる状態の Terminal で作業を行う。

# ブートローダーのアンロック
Terminal を起動し
1. adb reboot bootloader
2. fastboot oem unlock
3. YES を選んでアンロック。この時点で端末の内容は初期化される。

# Android M Developer Preview のイメージを適用する
[ここ](http://developer.android.com/preview/download.html)から「Hardware System Images」の Nexus 6 "shamu" のイメージをダウンロードして展開しておく。

* shamu-MPZ44Q-preview-c1d6506a.tgz
* MD5: 307cbf9dab0a38df4ab2639d02be12aa
* SHA-1: c1d6506a74094bdb2f4b8677c7fe4967334f9ea8

と、あるので tgz をダウンロードし展開する。

展開すると下記のファイルが出てくる。
* bootloader-shamu-moto-apq8084-71.11.img
* flash-all.bat
* flash-all.sh
* flash-base.sh
* image-shamu-MPZ44Q.zip
* radio-shamu-D4.01-9625-05.16+FSG-9625-02.94.img

ここで Terminal から flash-all.sh を実行すると、いつものごとく失敗する。
今回のログは下記の通り。

> archive does not contain 'boot.sig'
> archive does not contain 'recovery.sig'
> fastboot(3869,0xa0d941d4) malloc: *** mach_vm_map(size=1779851264) failed (error code=3)
> *** error: can't allocate region
> *** set a breakpoint in malloc_error_break to debug
> failed to allocate 1778070480 bytes
> error: update package missing system.img

なので flash-all.sh ではなく flash-base.sh を使ってイメージを適用する。
image-shamu-MPZ44Q.zip を展開して中身のファイルを取り出す。
中には

* boot.img
* cache.img
* recovery.img
* system.img
* userdata.img
* android-info.txt

が入ってる。
面倒なので、このファイルを全部 flash-all.sh が置いてあるフォルダに持ってくる。
持ってこない場合は img を適用する際に、そのフォルダがあるパスに移動して「faslboot flash xxxx.img」 を実施。

flash-all.sh は無視してイメージ適用の準備に使う flash-base.sh を使って下記の手順で行う。

1. ./flash-base.sh
2. fastboot flash recovery recovery.img
3. fastboot flash boot boot.img
4. fastboot flash system system.img
5. fastboot flash cache cache.img
6. fastboot flash userdata userdata.img
7. fastboot reboot

これで再起動すると Android M Developer Preview が適用されている状態になる。
system.img は時間がかかるので「Developer Documentation」の[Android M Preview
Developer Docs](http://developer.android.com/preview/download.html#top)に目を通すなどがオススメ。
ubuntu 12.01 での VNC サーバ構築


## vnc server をインストール

```
sudo apt-get install vnc4server
sudo apt-get install gnome
sudo apt-get install ubuntu-desktop
sudo apt-get install ibus-mozc
sudo apt-get install compizconfig-settings-manager
vncserver
password 初めて起動する時にパスワードを聞いてくるので、入力する
```

[参考ページ](http://fishrimper.blogspot.jp/2013/06/ubuntu-1304-server-vnc4server-gnome.html)


### 起動・停止

```
vncserver :1
vncserver -KILL :1
```

:1 はディスプレイ番号で、起動・停止時に指定する
Phoenix Frameworkをインストール


Elixirの代表的なwebフレームワークであるPhoenix Frameworkをインストールする。

### Phoenix Frameworkをインストール
```
$ mix local.hex
$ mix archive.install https://github.com/phoenixframework/phoenix/releases/download/v0.13.1/phoenix_new-0.13.1.ez
```

### プロジェクト作成
```
$ mix phoenix.new hello_phoenix
* creating hello_phoenix/config/config.exs
... いろいろ表示 ...
* creating hello_phoenix/priv/static/images/phoenix.png

Fetch and install dependencies? [Yn] Y

Phoenix uses an optional assets build tool called brunch.io
that requires node.js and npm. Installation instructions for
node.js, which includes npm, can be found at http://nodejs.org.

After npm is installed, install your brunch dependencies by
running inside your app:

    $ npm install

If you don't want brunch.io, you can re-run this generator
with the --no-brunch option.


We are all set! Run your Phoenix application:

    $ cd hello_phoenix
    $ mix deps.get
    $ mix phoenix.server

You can also run it inside IEx (Interactive Elixir) as:

    $ iex -S mix phoenix.server

```

### サーバー起動

```
$ cd hello_phoenix
$ mix phoenix.server
==> fs (compile)
Compiled src/sys/inotifywait.erl
Compiled src/sys/fsevents.erl
Compiled src/sys/inotifywait_win32.erl

... いろいろ表示 ...

Compiled web/views/layout_view.ex
Generated hello_phoenix app
[info] Running HelloPhoenix.Endpoint with Cowboy on port 4000 (http)

module.js:340
    throw err;
          ^
Error: Cannot find module 'hello_phoenix/node_modules/brunch/bin/brunch'
    at Function.Module._resolveFilename (module.js:338:15)
    at Function.Module._load (module.js:280:25)
    at Module.runMain (module.js:492:10)
    at process.startup.processNextTick.process._tickCallback (node.js:244:9)

```

brunch.ioがないよと、起動時にエラーがでてしまう。

ブラウザでアクセスしたら、表示が変になってしまっている。

今回はphoenix frameworkを動かしてみたいだけなので、
プロジェクト作成時に以下のように表示された通り、--no-braunchをつけて、再度プロジェクトを作成する。

```
If you don't want brunch.io, you can re-run this generator
with the --no-brunch option.
```

### 再度プロジェクト作成
```
$ cd ..
$ rm -r hello_phoenix/
$ mix phoenix.new hello_phoenix --no-brunch
```

### 再度サーバー起動
```
$ cd hello_phoenix/
$ mix phoenix.server
==> fs (compile)
Compiled src/sys/inotifywait_win32.erl
... いろいろ ...
Compiled lib/hello_phoenix/endpoint.ex
Generated hello_phoenix app
[info] Running HelloPhoenix.Endpoint with Cowboy on port 4000 (http)
```

### localhost:4000にアクセス

#### ターミナル上
```
[info] GET /
[info] Processing by HelloPhoenix.PageController.index/2
  Parameters: %{"format" => "html"}
  Pipelines: [:browser]
[info] Sent 200 in 7ms

```

#### ブラウザ表示
![Kobito.npD51r.png](https://qiita-image-store.s3.amazonaws.com/0/40041/263b9b40-bfb8-6754-deaa-077eb0a84e48.png "Kobito.npD51r.png")

今度はちゃんと表示される。
Jekyll Tips（Jekyllチュートリアル）を翻訳しました

こんにちは。
[@tanaka_kc](https://twitter.com/tanaka_kc)です。

## 概要
先日公開された、[Jekyll Tips](http://jekyll.tips)を日本語翻訳しました。

[Jekyll Tips in Japanese](http://jekylltips-ja.github.io) - Jekyll Tips 日本語版

Tipsという名前ですが、
内容はJekyllのチュートリアルになっています。

普通のHTMLサイトを、Jekyll化していくプロセスで学べるので、
すごく学びやすい形ではないかなと思います。

ぜひ、一度チュートリアルを試してみてください。


## 学ぶとどんないいことがあるか

このチュートリアルは単にJekyllを学ぶだけではなく、
[CloudCannon](http://cloudcannon.com)というJekyll対応のCMSと組み合わせた使い方も学べます。

CloudCannonは、**ノンデベロッパー**や**クライアント**でも、
Jekyllで作ったサイトを簡単に編集できることを大切にしているサービスです。

自分はある程度理解してツールを使えるけど、
チームの他のメンバーには敷居が高くて使わせられない...
という悩みを解決してくれるかと思います。

また、今回の日本語翻訳によって、
チームメンバーやクライアントに英語を読ませる必要がなくなります。
短時間で、さっと学べます。（英語読むのしんどいからって、良い情報に触れられないのはイヤですよね...）

実際に読んでみて、
Jekyllの全体像と、できることを学ぶには、
良い順番で構成されていると思ったので、個人的にはオススメです。

Jekyllはじめて！という方でも、
楽しんでもらえると思います。


## ところでJekyll Tipsってなに？

Jekyll Tipsは、
先に紹介したCloudCannonが作成したチュートリアルです。

CloudCannonは、5月に[Jekyll Conf 2015](http://jekyllconf.com/)を主催したチームです。
[CEOのプレゼン（英語）](https://www.youtube.com/watch?v=NuChR_YdjrI)もあるので、CloudCannonについて学びたい人はぜひチェックです。

Jekyllが大好きで、Jekyllをサービスの核に据えている、
そんな彼らが作ったチュートリアルです。

なお、今回の翻訳は、
CloudCannonの中の人に連絡をして、[了承を得ました](https://twitter.com/mikeneumegen/status/604692342306578432)。


## チュートリアルをやってみよう

やることは簡単です。
Jekyll Tipsのサイトにアクセスし、Guideを順番にやるのみです。

英語版でも良いですし、時短のために翻訳版でやっても良いです。
好きな方で進めてもらえれば良いかなと思います。

* [英語版Jekyll Tips](http://jekyll.tips)
* [日本語版Jekyll TIps](http://jekylltips-ja.github.io)


それでは、Jekyll、CloudCannonを楽しんでいただければと思います！
WEBRick - ワンライナーでサーバを起動する

適当なディレクトリから以下を実行

```bash
$ ruby -rwebrick -e 'Thread.start{WEBrick::HTTPServer.new(DocumentRoot:".",Port:"7777").start};gets'
```

* http://localhost:7777
* `return`キーでWEBRickを終了
JSの奇妙な宣言

自分で書いたJavaScriptをClosure Compilerにかけて圧縮していたのですが、その過程で妙なことに気が付きました。出力結果を見てみると、

```js:output.js
function f(){
  var a,c,d;
  //中略
  var c=foo(c),c=bar(c);
}
```
のように、同じ変数が何度も宣言されていました。一瞬バグを疑いましたが、どうやら正常な動作のようでした。

# 同じ変数の再宣言
明示的に変数を宣言可能な言語において、同じスコープ内で同名の変数を宣言すると、たいていはエラーになるものですが、JavaScriptに関しては**そうではありません**。

JavaScriptの関数内で行われた変数宣言は、それが関数のどこにあっても、[宣言だけは関数の先頭にあるものと同等の動作をします](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Statements/var#var.E3.81.AE.E5.B7.BB.E3.81.8D.E4.B8.8A.E3.81.92.EF.BC.88hoisting.EF.BC.89)（通称「巻き上げ」と呼ばれます）。

[ECMA-262の10.5節](http://www.ecma-international.org/ecma-262/5.1/#sec-10.5)の8番目では、コード実行時の変数宣言の処理について、以下のようになっています（わかりにくい単語などは適宜置き換えています）。

1. コードの中に出てきた変数宣言を、順に処理する。
2. Environment Record[^1]にその変数があるかチェックする。
3. **変数がなければ**、Environment Recordに変数を作って、`undefined`をセットする。

このようになっていますが、すでに同名の変数が同じスコープにあった場合、3をスルーしてしまうので、**何も起こりません**。（初期値の代入は通常の代入として機能しますが）、変数宣言はエラーも出さず、何事もなかったかのようにコードは実行されます。

# 注意
意図的に複数回の宣言を書いても、1度だけ宣言した場合と動作は全く同じです。

```js
//正常に動作はする（でもほぼ確実に無駄）
var c, c, c, c, c, c, c, c, c, c, c, c, c, c;
```

書けると言っても、実用のコードで書くべき場面は皆無と言っていいでしょう。

[^1]: JavaScriptでは、グローバル変数はグローバルオブジェクト（ブラウザでは`window`）のプロパティとして存在しますが、それと同様に、関数の呼び出しごとに「Environment Record」というオブジェクトが作られ、引数やローカル変数はそのプロパティである、というように振舞います。ただし、このEnvironment Recordオブジェクト自体にアクセスする標準的な方法はありません。
python clickでサブコマンドを簡単に実装する


# はじめに

Qiitaのコメントで、紹介してもらったclickを調べてみたら、簡単にサブコマンドを実装できることが分かったので、そのやり方をまとめておく。サブコマンドとは、スクリプトの第一引数が、コマンドになっているような形態のコマンドで、git, svnなどのバージョン管理コマンドや、djangoのプロジェクト管理スクリプトmanage.pyなどにみられる形式だ。

# 環境構築

clickは、pythonの標準パッケージではないので、pipでインストールする。

```
$ pip install click
```

# 基本

基本的なコードは以下のようになる。


```python
import click

@click.group(invoke_without_command=True)
@click.pass_context
def cli(ctx):
    if ctx.invoked_subcommand is None:
        print ctx.get_help()
    else:
        print('gonna invoke %s' % ctx.invoked_subcommand)


@cli.command(help='description 1')
@click.argument('target', required=False)
def subcommand1(target):
    print "sub command 1"

@cli.command(help='description 2')
@click.argument('target', required=False)
def subcommand2(target):
    print "sub command 2"

if __name__ == '__main__': cli()
```

cliがすべての起点になる関数となり、subcommand1とsubcommand2がそれぞれサブコマンドの実装になる。それぞれの説明はhelp変数として、@cli.commandに入力する。以下、コマンドのhelpを表示した内容を示す。

```
Usage: sample.py [OPTIONS] COMMAND [ARGS]...

Options:
  --help  Show this message and exit.

Commands:
  subcommand1  description 1
  subcommand2  description 2
```

Commandsにsubcommand1,2が登録されているのがわかる。

# Tips

## ショートカットの作成

（サブ）コマンド名が長すぎて、ショートカットコマンドを作りたい場合がある。その場合は、Groupクラスを拡張して実装する。

```python
...

class AliasedGroup(click.Group):
    def get_command(self, ctx, cmd_name):
        rv = click.Group.get_command(self, ctx, cmd_name)
        if rv is not None:
            return rv

        if cmd_name == 'shortcut':
            return click.Group.get_command(self, ctx, 'subcommand1')

        return None

@click.group(cls=AliasedGroup, invoke_without_command=True)
@click.pass_context
def cli(ctx):
...
```

上記のように、@click.groupのcls引数として実装したAliasedGroupを指定する。すると、

```
$ python ./sample.py shortcut
gonna invoke shortcut
sub command 1
```

上記のようにsabcommand1の実装が動く。

## 通常のcommands実装をサブコマンドにする

複数のファイルに分割して、サブコマンドを実装したい場合は、コマンド実装をして、それをgroupにaddする方法があります。

```
@click.group(invoke_without_command=True)
@click.pass_context
def handle(ctx):
    if ctx.invoked_subcommand is None:
        print ctx.get_help()
    else:
        print('gonna invoke %s' % ctx.invoked_subcommand)

@click.command()
def hoge():
    pass

handle.add_command(hoge)
```

# 今後

試し次第、連結コマンドの実装なども紹介していきたい。
CloudCannon Static Site Tutorial を翻訳しました

こんにちは。[@tanaka_kc](https://twitter.com/tanaka_kc)です。

[CloudCannon](http://cloudcannon.com)、使ってますか？

チームでウェブサイトを管理するなら、おすすめのサービスです。
（最近Jekyllに対応して、**JekyllをGUIで管理できる**ので、けっこうアツいです）

このサービスのチュートリアル
&quot;CloudCannon Static Site Tutorial&quot;を日本語翻訳しました。

内容はCloudCannonの入門で、
基礎中の基礎です。

シンプルなチュートリアルですが、
概要をサッと（でも正確に）掴みたいときに、
英語だとなんだかんだ時間がかかってしまいますよね。

画像がたくさん使われていれば雰囲気が掴めるのでまだマシですが、
文字だけだと雰囲気すらつかめません。

今回の翻訳で、すこしですがCloudCannonを学ぶスピードが早くなると思います。

僕は、会社の「**技術にそこまで詳しくない人たち**」に読んでもらったり、
勉強会で使ったりしようと思っています。

ぜひ同じように、もしくは、
より便利に使っていただければ嬉しいです。

## 翻訳にあたって

最初は、社内向け、勉強会でちょっと使えたらな、
というぐらいに考えて訳しはじめました。

どうせ日本語訳をつくって、便利に活用するつもりなら、
本家の人に連絡しておこうということで、
CloudCannonの中の人（CEO!!）に連絡をしました。

快くOKをしてくれて、[Jekyll.tips](http://jekyll.tips) もオススメしてくれました。
これも翻訳してみると伝えると「Excellent」と言って喜んでくれました。

日本語は「こんにちは」しか知らないということなので、
ちゃっかり「ありがとう」を教えてみました（笑）

[一連の会話はこんな感じ](https://twitter.com/tanaka_kc/status/604565089920774144)でした。

また、英語の勉強は以下の書籍、サービス、ツールを使いました。

*   [びっくり英読法（本）](http://www.amazon.co.jp/dp/4806120006)
*   [バイリンガール（Youtube）](https://www.youtube.com/user/cyoshida1231)
*   [Google翻訳アプリ（iOS）](https://itunes.apple.com/gb/app/google-translate/id414706506?mt=8)

本は、社長がわたしてくれました。
バイリンガールは、発音やちょっとしたフレーズの勉強にすごく役立っています。

Google翻訳アプリでは、本来の使い方をするわけではなく、
音声入力を使って、**自分の発音が認識されるかどうか**、を確かめるのに使っています。

バイリンガールや英語のプレゼン、音楽などで発音を耳に入れて、
Google翻訳アプリに、見よう見まねで発音してみて、きちんと日本語に翻訳されればOK、というようにしています。

けっこう、良いエクササイズだと思ってます（笑）

## チュートリアルの使い方

さて、翻訳したチュートリアルは、以下のステップでお使いいただけます。

1.  CloudCannonでサイトを1つ作る
2.  zipファイルをダウンロードする
3.  zipファイルを解凍し、ファイルをすべてアップロードする
4.  index.htmlをビジュアルエディタで開く

まず、CloudCannonにチュートリアル用のサイトを用意しましょう。
（もしアカウントを持っていなければ、作りましょう）

![cc_create_site.png](https://qiita-image-store.s3.amazonaws.com/0/34795/cc650127-7be5-a7e9-0fcc-33d01eaae20e.png)


次に、[こちらのzipファイルをダウンロード](https://github.com/tanakakc/CloudCannon-Static-Site-Tutorial/archive/master.zip)してください。
今回の翻訳したチュートリアルのデータです。

ダウンロードしたzipファイルを解凍すると、
5つのファイルがありますので、CloudCannonに作ったサイトにすべてアップロードします。（ドラッグ&amp;ドロップで簡単にアップロードできます！）

![cc_drag_and_drop_files.png](https://qiita-image-store.s3.amazonaws.com/0/34795/9d0e77cb-08a3-ebb7-7d06-09c3ee9f517d.png)


index.htmlを選び、右上の鉛筆アイコンをクリックしてビジュアルエディタを開きましょう。開けたら、上から読み始めてください。

![cc_visual_editor.png](https://qiita-image-store.s3.amazonaws.com/0/34795/3169ae05-05cb-3598-8133-a0351257a78d.png)


以上でチュートリアルを開始できます。
短時間で済むシンプルなチュートリアルです。

## 終わりに

CloudCannonは、技術に詳しくないチームメンバー、顧客などに、Jekyllなどの技術を簡単・シンプルに使えるよう設計されたサービスです。

日本ではまだまだ知名度は低いですが、  
日本語の情報が増えたり、勉強会などが開かれるようになれば、たくさんの人が使うようになるサービスだと思います。

これからの成長が楽しみなサービスですので、
ぜひ、CloudCannonに登録をしてみてはいかがでしょうか？

参考リンク：

* [CloudCannon](http://cloudcannon.com)
* [Jekyll.tips](http://jekyll.tips)
* [tanakakc/CloudCannon-Static-Site-Tutorial](https://github.com/tanakakc/CloudCannon-Static-Site-Tutorial)
Can't set headers after they are sent.で怒られた

herokuにexpressをデプロイして別サーバからアクセスしたら

```
Origin http://〜 is not allowed by Access-Control-Allow-Origin.
```
といって怒られた。
そこでexpress側から「Access-Control-Allow-Origin」ヘッダを送出してやるようにした。
すると今度はアプリ自体がクラッシュしてしまうご様子。
「heroku logs --tail」としてログを見ながらアクセスしてみると

```
Error: Can't set headers after they are sent.
```
というエラーが出てアプリが停止してしまっていた。
ぐぐってみると[StackOverflow](http://stackoverflow.com/questions/7042340/node-js-error-cant-set-headers-after-they-are-sent)に同様の質問がありました。

```
res.writeHeadしたらres.writeかres.endしか使えないよ
```
ということらしい。

```
res.writeHead(200, {
			'Access-Control-Allow-Origin':'*'
		  });
res.json(data);
```
となっていたのを

```
res.header(
			'Access-Control-Allow-Origin','*'
		  });
res.json(data);
```
としたら行けました。

###ぐぐって出てきたソースを切り貼りしてハマってぐぐって解決。
むむぅ。
NSString stringWithFormatの引数の便利な指定


# 引数の場所の指定ができる

``` objective-c
+ (instancetype)stringWithFormat:(NSString *)format
```

objective-cで文字列を生成する↑のメソッド。
```%[引数番号]$@```のように指定すると引数を任意の場所に挿入することができる。
びっくり。


``` objective-c
    NSString *sampleStr = [NSString stringWithFormat:@"%1$@くんと%2$@ちゃんが歩いていました。%1$@くんはお花を持っていました", @"タカシ", @"ハナコ"];

//=>タカシくんとハナコちゃんが歩いていました。タカシくんはお花を持っていました
```

# どこで役に立つ？
私はautolayoutのVFLを指定する時に使ってます。
Viewの指定を取り回しできるので楽。

``` objective-c
    //VFLで文字列をまとめる
    NSString *horizontalFormat      =   [NSString stringWithFormat:@"H:|-20-[%@]-20-|", topViewKey];
    NSString *addHorizontalFormat   =   [NSString stringWithFormat:@"H:|-20-[%1$@]-20-[%2$@(==%1$@)]-20-|", leftViewKey,rightViewKey];
    NSString *verticalFormat        =   [NSString stringWithFormat:@"V:|-88-[%1$@]-20-[%2$@(==%1$@)]-20-|", topViewKey, leftViewKey];
    NSString *addVertivalFormat     =   [NSString stringWithFormat:@"V:|-88-[%1$@]-20-[%2$@(==%1$@)]-20-|", topViewKey, rightViewKey];
    
```

以上です！
VMWare ESXiで作成されている開発環境をVagrant用にコンバートしてみる - その①

#まえがき
過去にVMWare ESXiを利用して作成した開発環境を、ローカルPCのスペック向上をいいことに
Vagrant（VirtualBox形式が一般的かな）を利用したローカル環境用にコンバートしてみようと思います。


##環境情報
OS：Windows8
メモリ：12GB
対象のゲストOS：CentOS5

##やることの全体像
1. VMWare ESXiからイメージを抜く
2. VMWare Playerの形式をコンバートしてVirtualBoxで起動
<br>※その①ではここまで
3. ユーザ情報やsudoなどVagrantとして必要な設定を追加
4. VagrantのBOXイメージとして作成

###VMWare ESXiからイメージを抜く
* コンバータは下記のサイトからダウンロードして利用
http://www.vmware.com/jp/products/converter

* 管理サーバに接続して、対象のゲストOSを選択してVMWare Player形式でダウンロード
**ゲストOSのサイズと間の通信速度によってそれなりに時間がかかると思います**

###VMWare Playerの形式をコンバートしてVirtualBoxで起動
* コンバータは下記からダウンロードして利用
https://my.vmware.com/jp/web/vmware/details?productId=352&downloadGroup=OVFTOOL350

* コマンドプロンプトを利用して対象のファイルをOVF形式に変更
下記のサイトを参考
http://april.fool.jp/blogs/2013/08/vm-vmware%E3%81%AE%E3%82%A4%E3%83%A1%E3%83%BC%E3%82%B8%E3%82%92virtualbox%E3%81%A7%E8%AA%AD%E3%81%BF%E8%BE%BC%E3%82%80%E3%81%AB%E3%81%AF/

* VirtualBoxでの起動
これまた上記のサイトを参考
http://april.fool.jp/blogs/2013/08/vm-vmware%E3%81%AE%E3%82%A4%E3%83%A1%E3%83%BC%E3%82%B8%E3%82%92virtualbox%E3%81%A7%E8%AA%AD%E3%81%BF%E8%BE%BC%E3%82%80%E3%81%AB%E3%81%AF/

これで、VirtualBoxで起動出来るようになったのでVagrantで扱えるように
次回移行で構成変更を実施していきます。
Matlab: figureをビデオに書き込む

プロットをビデオファイルに書き込んでいく方法.
VideoWriterクラスオブジェクトを作成して, open, writeVideo, closeメソッドで書き込む.

ビデオファイル形式 > doc VideoWriter
書き込めるオブジェクト形式 > doc writeVideo
レンダリングは'opengl'がデフォルト（doc Figureのプロパティ > Renderer）

```matlab:figure_to_video
x = 0:100;
y = sin(x);

writerObj = VideoWriter('test.avi');
open(writerObj);

fig = plot(x,y);
set(fig, 'XDataSource', 'x');
set(fig, 'YDataSource', 'y');
set(gca, 'Xlim', [0 100], 'Ylim', [-20 20]);
set(gca,'nextplot','replacechildren');

for k = 0:20
    y = k*sin(x);
    refreshdata(fig);
    
    frame = getframe(gcf);
    writeVideo(writerObj, frame);
end

close(writerObj);

```

イメージとしての保存
http://qiita.com/jellied_unagi/items/7f2f7529bafcbcd5f5d3
objective-c/php 画像のアップロード　vagrantへ



xcodeでNSLogをおこなう




```log
'name' <font color='#888a85'>=&gt;</font> <small>string</small> <font color='#cc0000'>'***'</font> <i>(length=7)</i>


'type' <font color='#888a85'>=&gt;</font> <small>string</small> <font color='#cc0000'>''</font> <i>(length=0)</i>
      

'tmp_name' <font color='#888a85'>=&gt;</font> <small>string</small> <font color='#cc0000'>''</font> <i>(length=0)</i>
      

'error' <font color='#888a85'>=&gt;</font> <small>int</small> <font color='#4e9a06'>1</font>
      

'size' <font color='#888a85'>=&gt;</font> <small>int</small> <font color='#4e9a06'>0</font>
```



上記error1について調べると、ファイルサイズがでかいことが判明！
なので、、、php.iniファイルのfilesizeをいじれば解決！！

     
 
          
                   
                                     
参考資料 
-    
https://www.softel.co.jp/blogs/tech/archives/1824
Sparkのメトリクスを取る(WIP)

目的
====
- Sparkのメトリクスを取りたい
- 各ノードの性能監視をしたい


データソース
===========
- Sparkのmetrics
- Gangliaのmetrics
- 各ノードの性能情報
   - cpu, load average, memory usage, disk i/o, network i/o...

Sparkのmetrics
==============
公式ドキュメント(1.3.1)
---------------------
https://spark.apache.org/docs/1.3.1/monitoring.html

- http://&lt;driver-node&gt;:4040
- To view the web UI after the fact, set spark.eventLog.enabled to true before starting the application. This configures Spark to log Spark events that encode the information displayed in the UI to persisted storage.
- If Spark is run on Mesos or YARN, it is still possible to reconstruct the UI of a finished application through Spark’s history server, provided that the application’s event logs exist. 
   - ./sbin/start-history-server.sh

検討事項
-------
- 実際に取れるメトリクスの値は不明
- GraphiteSinkがあるので、Graphiteに直接メトリクスを保存できるみたい
- Ganguliaのメトリクスも取れるっぽいけど、ライセンスの問題でSparkをカスタムビルドしないとダメらしい
   - Spark on EMRではGanguliaが使えるようにプロビジョニングできたはずなので、このカスタムビルド仕様になってないか確認する

Gangliaのmetrics
================
EMRのbootstrap-actionの`install-ganglia-metrics`を見ると、GangliaSink.scalaを使うようになっている。以下、追いかけたソースコード。

https://github.com/awslabs/emr-bootstrap-actions/blob/master/spark/install-ganglia-metrics

https://github.com/apache/spark/blob/master/extras/spark-ganglia-lgpl/src/main/scala/org/apache/spark/metrics/sink/GangliaSink.scala

https://github.com/dropwizard/metrics/blob/master/metrics-ganglia/src/main/java/com/codahale/metrics/ganglia/GangliaReporter.java

https://github.com/ganglia/gmetric4j/blob/master/src/main/java/info/ganglia/gmetric4j/gmetric/GMetric.java
Powershell＋AutoHotkeyでホットキーを便利に登録

はじめに
---------------------------

ネットサーフィンをしていたら、AutoHotkeyというものを発見しました。
面白そうだったので、試しに、Powershellと連携させて、ホットキー登録を行ってみました。

ちなみに、AutoHotkeyの使い方等については以下サイトを参考にしました。
http://ahkwiki.net/


実行環境スペック
---------------------------
OS：Microsoft Windows 8
PowerShellバージョン：3.0

手順１：Chocolateyのインストール
---------------------------
・Powershellを「管理者として実行する」
・以下コマンドを実行（参考 https://chocolatey.org/）

```ps1
iex ((new-object net.webclient).DownloadString('https://chocolatey.org/install.ps1'))
```

手順２：AutoHotkeyのインストール
---------------------------
以下コマンドを実行。

```ps1
choco install autohotkey.portable
```

※なお、AutoHotkey（Portable）を選択しているのは筆者の好みによるもの。無印のAutoHotkeyやAutoHotkey（Install）でも、多分、問題はないと思う。


手順３：AutoHotkeyを使ってみる
---------------------------
例えば、筆者は以下のようなスクリプトを作成してみた。

```ps1:startup.ps1
&{
$_peek     = "C:\opt\Peek Through\Peek Through.exe"
$_feewhee  = "C:\opt\feewhee\feewhee.exe"
$_ledim    = "C:\opt\LeDimmer\LeDimmer.exe"
$_pause    = "C:\opt\pause_103\pause.exe"
$_ahk      = "C:\ProgramData\chocolatey\lib\autohotkey.portable\tools\AutoHotkey.exe"
$_tempfile = Join-Path (Split-Path $script:myInvocation.MyCommand.path -parent) "temp\startup.ahk"

@"
Run,$_peek
Run,$_feewhee
Run,$_ledim
Run,$_pause
+!p up::Run,powershell.exe
+^!q up::Run,$_ledim
+!/ up::
  WinGetClass, class, A
  WinGetTitle, title, A
  MsgBox, class=%class%／title=%title%
  Return
"@ > $_tempfile
& $_ahk $_tempfile
}
```

ちょっとだけ解説
---------------------------
上記スクリプトを実行すると、以下処理が行われる。
１．各種プログラム（Peek Through、feewhee、LeDimmer、pause）の実行
※各種プログラムは別途インストールが必要。

２．ホットキー登録
　・[Shift + Alt + P]押下でPowershellの実行
　・[Ctrl + Shift + Alt + Q]押下でLeDimmerの実行
　・[Ctrl + Shift + /]押下でアクティブウィンドウのクラス名、タイトル名の表示


AutoHotkeyの良い所
---------------------------
・スクリプト実行形式なので、Powershellとの相性がいい
・ホットキー登録以外のことも、色々できる。例えば、
　・クリック操作、キー押下操作などの自動化
　・クリップボード処理
　など。

・ホットキー設定のために、GUIでポチポチしなくて済む

AutoHotkeyのここが知りたい
---------------------------
・実行時オプションとして、コマンドを文字列として直接渡せないか。
例えば、Powershellで、以下のように書けたら素敵だと思う。

```ps1
$_ahk      = "C:\ProgramData\chocolatey\lib\autohotkey.portable\tools\AutoHotkey.exe"

#ホットキーを登録しバックグラウンドジョブとして待機させる
$job = Start-Job {"+!p up::Run,powershell.exe" | & $_ahk}

#バックグラウンドジョブを停止しホットキーを解除する
$job | Stop-Job
```

おわりに
---------------------------

AutoHotkeyに関しては、筆者自身、使い始めたばかりで、まだまだ分からないことが多いです。
「こんな使い方があるよ」とか「この使い方は良くない」などの情報があれば、ご教示いただけるとありがたいです。
Spherical Harmonics > Self-adjoint operators > have the property that eigenfunctions with different eigenvalues are orthogonal

http://www.ohio.edu/people/mohlenka/research/uguide.pdf

1.2 R^2 : Fourier Series
Eq.6の前

> ... Self-adjoint operators have the property that eigenfunctions with different eigenvalues are orthogonal.

```math
-n^2<q_n(\theta), q_m(\theta)> = <\Delta_{2S}q_n(\theta), q_m(\theta)> = <q_n(\theta), \Delta_{2S}q_m(\theta)> = -m^2<q_n(\theta),q_m(\theta)>. --- (6)
```
> If n != m, we must have

```math
<q_n(\theta),q_m(\theta)> = 0.
```

＜q_n, q_m＞に対して、前に-n^2や-m^2がついたもの、あるいは片方にDelta_{2S}がついたものは同等になるようだ。

6式の由来が不明である。
Spherical Harmonics > generated in the same way as Fourier Series, simply in one dimension higher

http://www.ohio.edu/people/mohlenka/research/uguide.pdf

1.2 R^2 : Fourier Seires
の最初の一文

> Spherical Harmonics can be generated in the same way as Fourier Series, simply in one dimension higher.

CGなどでSpherical Harmonicsを使っている例があるが、何を長所としているかの理解が不足している。

時々こういう情報を集めて理解を増したい。

Fourier Seriesの拡張したもの、というのはわかりやすいかもしれない。
Elixirインストール


Macにelixir環境を整えたので、記載する。

### インストール

まずは、brewのアップデートをする。

```
sudo brew update
```


本題のelixirを追記する。
 
```
sudo brew install elixir
```


### インストール確認
#### help表示
```
$ elixir --help
Usage: elixir [options] [.exs file] [data]

  -v                Prints version and exit
  -e "command"      Evaluates the given command (*)
  -r "file"         Requires the given files/patterns (*)
  -S "script"       Finds and executes the given script
  -pr "file"        Requires the given files/patterns in parallel (*)
  -pa "path"        Prepends the given path to Erlang code path (*)
  -pz "path"        Appends the given path to Erlang code path (*)
  --app "app"       Start the given app and its dependencies (*)
  --erl "switches"  Switches to be passed down to erlang (*)
  --name "name"     Makes and assigns a name to the distributed node
  --sname "name"    Makes and assigns a short name to the distributed node
  --cookie "cookie" Sets a cookie for this distributed node
  --hidden          Makes a hidden node
  --detached        Starts the Erlang VM detached from console
  --no-halt         Does not halt the Erlang VM after execution

** Options marked with (*) can be given more than once
** Options given after the .exs file or -- are passed down to the executed code
** Options can be passed to the erlang runtime using ELIXIR_ERL_OPTIONS or --erl
```

#### バージョン表示
```
$ elixir --version
Elixir 1.0.4
```

### 参考URL
http://elixir-lang.org/install.html
Gemfileをパースする


```
Bundler::Definition.build('Gemfile', nil, nil).dependencies
```

[Github: definition.rb](https://github.com/bundler/bundler/blob/master/lib/bundler/definition.rb)

# Sample

```
$ rails new demo
$ cd demo
$ ./bin/rails console
```

## IRB

### Parse Gemfile

```
irb> result = Bundler::Definition.build('Gemfile', nil, nil).dependencies
=> [<Bundler::Dependency type=:runtime name="rails" requirements="= 4.2.1">, <Bundler::Dependency type=:runtime name="sqlite3" requirements=">= 0">, <Bundler::Dependency type=:runtime name="sass-rails" requirements="~> 5.0">, <Bundler::Dependency type=:runtime name="uglifier" requirements=">= 1.3.0">, <Bundler::Dependency type=:runtime name="coffee-rails" requirements="~> 4.1.0">, <Bundler::Dependency type=:runtime name="jquery-rails" requirements=">= 0">, <Bundler::Dependency type=:runtime name="turbolinks" requirements=">= 0">, <Bundler::Dependency type=:runtime name="jbuilder" requirements="~> 2.0">, <Bundler::Dependency type=:runtime name="sdoc" requirements="~> 0.4.0">, <Bundler::Dependency type=:runtime name="byebug" requirements=">= 0">, <Bundler::Dependency type=:runtime name="web-console" requirements="~> 2.0">, <Bundler::Dependency type=:runtime name="spring" requirements=">= 0">]
```

## All gems

```
irb> result.collect{|gem| gem.name }
=> ["rails", "sqlite3", "sass-rails", "uglifier", "coffee-rails", "jquery-rails", "turbolinks", "jbuilder", "sdoc", "byebug", "web-console", "spring"]
```

## Gem

```bash
irb> gem = result.first
```

### Name

```bash
irb> gem.name
=> "rails"
```

### Type

```bash
irb> gem.type
=> :runtime
```

### Platforms

```
irb> gem.platforms
=> []
```

### Groups

```bash
irb> gem.groups
=> [:default]
```

### Source

```bash
irb> gem.source
=> nil
```

### Version

```bash
irb> gem.requirements_list
=> ["= 4.2.1"]
```
Laravel動作時にmcrypt関係のエラーが出る

### 環境
* Ubuntu 14.10 (VMWare)
* Laravel Framework version 5.0.31
* php5.5

### 事象

Laraveでビルドインサーバ実行時に以下のようなMCRYPT関係のエラーが出る。また、ブラウザで確認しようとしても、画像のようなエラーが出る。

```
root@ubuntu:~/sample# php artisan serve
PHP Notice:  Use of undefined constant MCRYPT_RIJNDAEL_128 - assumed 'MCRYPT_RIJNDAEL_128' in /root/sample/config/app.php on line 83
Laravel development server started on http://localhost:8000/
[Sat May 30 19:38:36 2015] PHP Notice:  Use of undefined constant MCRYPT_RIJNDAEL_128 - assumed 'MCRYPT_RIJNDAEL_128' in /root/sample/config/app.php on line 83
[Sat May 30 19:38:36 2015] PHP Fatal error:  Call to undefined function Illuminate\Encryption\mcrypt_get_iv_size() in /root/sample/vendor/compiled.php on line 12184
```
![ScreenClip.png](https://qiita-image-store.s3.amazonaws.com/0/50690/be58db4a-8103-66ce-9af2-7fcc992b4a3a.png)


### 対処方法

mcryptをインストール/有効化して、再度実行する

```
# apt-get install php5-mcrypt
# php5enmod mcrypt
# php artisan serve
Laravel development server started on http://localhost:8000/

```
JavaScriptハイブリッドアプリフレームワークメモ


# 概要

ハイブリッドアプリをつくる場合、何を使うかのメモ。

* <a href="http://qiita.com/hmukaida/items/3eaa17ebc0e841bbc515" target="_blank">ハイブリッドアプリケーションとその界隈について情報整理</a>
* <a href="http://developer.telerik.com/featured/what-is-a-hybrid-mobile-app/" target="_blank">What is a Hybrid Mobile App? -Telerik Developer Network</a>
* <a href="http://www.gajotres.net/ionic-vs-onsenui/" target="_blank">Ionic vs OnsenUI</a>


# 一覧

## <a href="https://facebook.github.io/react-native/" target="_blank">React Native</a>

* <a href="http://qiita.com/naoya@github/items/ecda4d3089902dcbea53" target="_blank">React Native ファーストインプレッション - Qiita</a>
* <a href="http://www.raywenderlich.com/99473/introducing-react-native-building-apps-javascript" target="_blank">Introducing React Native: Building Apps with JavaScript</a>


## <a href="http://ionicframework.com/" target="_blank">Ionic</a>
AngularJS

## <a href="https://www.nativescript.org/" target="_blank">Native Script</a>

## <a href="https://www.meteor.com/" target="_blank">Meteor</a>
* フロントからバックエンドまでフルスタック。
* フォルダ構成などが綺麗
* <a href="http://docs.meteor.com/#/basic/buildingmobileapps" target="_blank">*Once you've built your web app with Meteor, you can easily build a native wrapper for your app and publish it to the Google Play Store or iOS App Store with just a few commands*</a>


## <a href="http://reapp.io/" target="_blank">Reapp</a>

## <a href="https://tabrisjs.com/" target="_blank">Tabris.js</a>

## <a href="http://ja.onsen.io/" target="_blank">Onsen UI</a>

AngularJS

## <a href="http://phonegap.com/" target="_blank">PhoneGap</a>

PhoneGapはCordovaが元になっている。
Beegoを使ってみた

# 初期設定もろもろ
## ☆Beegoのインストールについて
こちらでサクッとインストール
[http://qiita.com/macococo/items/e5ace2550418ccced9ac#2-2]

## ☆scaffoldingしてみる
強力なscaffoldingがないと
使わないつもりだったんですがあったのでbeegoを使ってます。

プログラムのコードでDB接続周りがカオスな作りになると
いい思い出が一切ないのでこの辺は自動生成に任せつつ。。。

下記URLのgenerateの記述を確認
[https://github.com/beego/bee]
appcodeを実行すると各それぞれのプログラムが
既存データベースのスキーマから作成可能です。

## Main.goに初期設定をコーディング
```go:main.go

package main

import (
	"fmt"
	"github.com/astaxie/beego"
	"github.com/astaxie/beego/orm"
	_ "github.com/go-sql-driver/mysql"
	// cronのようにスケジューラを使ったtasksを使う場合はここで呼んでおく
	_ "project/tasks" // this is the task import
	// routersを読み込み
	_ "project/routers"
)

func init() {
	initDatabase()
	initTemplateExt()
}

func main() {
	beego.Run()
}

func initDatabase() {
	// project/conf/app.confに定義した値を取得
	dbLink 	:= fmt.Sprintf(
		"%s:%s@%s/%s?charset=%s",
		beego.AppConfig.String("masterUser"),
		beego.AppConfig.String("masterPass"),
		beego.AppConfig.String("masterHost"),
		beego.AppConfig.String("masterDb"),
		beego.AppConfig.String("dbCharset"),
	)

	// 各種初期設定
	orm.RegisterDriver("mysql", orm.DR_MySQL)
	orm.RegisterDataBase("default", "mysql", dbLink)
	orm.SetMaxIdleConns("default", 100)
	orm.SetMaxOpenConns("default", 100)
}

func initTemplateExt() {
	// テンプレートの拡張子をhtmlでも使えるように
	beego.AddTemplateExt(".html")
}
```
Hyperlapse.jsで400エラーが出るときの対応


#**概要**

<a href="https://github.com/TeehanLax/Hyperlapse.js/" target="_blank">Hyperlapse.js</a>は、Google Street Viewからタイムラプスが作れるライブラリです。

##参考記事

* <a href="http://tips.hecomi.com/entry/20130418/1366295029" target="_blank">Hyperlapseで環状八号線を南下する動画を Google ストリートビューからつくってみた</a>
* <a href="http://wisteriahill.sakura.ne.jp/Hyperlapse/" target="_blank">GoogleのStreetViewを動画にするHyperlapseを使ってみる</a>



#**エラー**

タイムラプス作成途中で、画像が400エラーになってしまいました。解決方法は以下リンクにありました。

* <a href="https://github.com/TeehanLax/Hyperlapse.js/issues/21" target="_blank">simple.html does not work by Cross-Origin error · Issue #21 · TeehanLax/Hyperlapse.js</a>

`Hyperlapse.js/examples/js/GSVPano.js`の中にある、`this.composePanorama`を以下のように変更します。エラーが起きた時も画像を返してやるように対処しています。

```js
this.composePanorama = function (panoId) {

    this.setProgress(0);
    console.log('Loading panorama for zoom ' + _zoom + '...');

    var w = (_zoom==3) ? 7 : Math.pow(2, _zoom),
        h = Math.pow(2, _zoom - 1),
        self = this,
        url,
        x,
        y;

    _count = 0;
    _total = w * h;

    for( y = 0; y < h; y++) {
        for( x = 0; x < w; x++) {
            url = 'https://maps.google.com/cbk?output=tile&panoid=' + panoId + '&zoom=' + _zoom + '&x=' + x + '&y=' + y + '&' + Date.now();
            (function (x, y) { 
                var img = new Image();
                img.addEventListener('load', function () {
                    self.composeFromTile(x, y, this);
                });
                img.addEventListener('error', function () {
                    self.composeFromTile(x, y, new Image());
                });
                img.crossOrigin = 'anonymous';
                img.src = url;
            })(x, y);
        }
    }

};
```

以上。
wordpress jsとcss読み込み

    <link rel="stylesheet" href="<?php echo esc_url( get_template_directory_uri() ); ?>/css/slider-pro.min.css" type="text/css" />

    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>

    <script type="text/javascript" src="<?php echo esc_url( get_template_directory_uri() ); ?>/js/jquery.sliderPro.min.js"></script>
jQueryのトラバース系メソッドをちゃんと学ぶ





##find()

find()メソッドは、対象のjQueryオブジェクトの子孫要素を対象として要素を絞り込む。

▼使用例

```javascript:find.js

//1. 変数$textChildに、p要素内のsmall要素を格納
$textChild = $('p').find('small');

//2. button要素をマウスオーバーするとbutton要素内の.iconを拡大
$('button').mouseover(function () {
  $(this)
    .find('.icon')//ここで選択している要素が切り替わる
    .css('transform', 'scale(1.3)');
});


```



##filter()

filter()メソッドは、対象のjQueryオブジェクトそのものを対象として要素を絞り込む。

▼使用例

```javascript:filter.js

//変数$firstHeadingに、section要素内の一つめのh3要素を格納
$firstHeading = $('section h3').filter(':first-child');

```


随時更新していくだあ・・・