OmniAICreator/Qiita-1.07M huggingface dataset:
WebStorm から MongoDB へ接続してみる


これは [WebStorm / PhpStorm Advent Calendar 2014](http://qiita.com/advent-calendar/2014/webstorm) の９日目(12/9)の投稿です。

たいしたネタやノウハウではないのですが、フロントエンドで何かやるとき、MongoDB を使うケースも最近ふえてきたのではないでしょうか。

WebStorm だとプラグインがあるので、お手軽に MongoDB のデータの中身が参照できますので紹介します！ちなみに Mac へ MongoDB へ導入する手順については、こちらに書いたのでよろしければ参照ください。
⇒ [Homebrew で Mac に MongDB をインストールする手順メモ](http://qiita.com/hkusu/items/c258cc685fdf07a8b880)

### 前提環境

- WebStorm：`9.0.1`
- MongoDB：`2.6.5`

### プラグインを導入してみる

`mongo` で検索すると出てきます。

![スクリーンショット_2014-12-08_21_34_57.png](https://qiita-image-store.s3.amazonaws.com/0/35733/f54f8977-a196-ab58-f3eb-a2a5fa5a9311.png "スクリーンショット_2014-12-08_21_34_57.png")

プラグインをインストール後、WebStorm を再起動すると、右側のタブに `Mongo Explorer` が追加されています。設定アイコンを押します。

> ちなみに MongoDB は裏で起動しておく必要がある（MongoDB 自体を起動する機能は無い）ので、予め起動しておきます。

![スクリーンショット_2014-12-08_21_37_33.png](https://qiita-image-store.s3.amazonaws.com/0/35733/97508541-66c9-a82d-e1f8-df5b3f3e2e3d.png "スクリーンショット_2014-12-08_21_37_33.png")

`mongo` コマンドのパスを入力、また `Servers` 欄の左下の `+` アイコンを押下して、サーバの設定を追加します。私の場合、下記の情報だけ（デフォルトのまま）で接続できました。`Test Connection` ボタンで接続テストできます。

![スクリーンショット_2014-12-08_21_50_08.png](https://qiita-image-store.s3.amazonaws.com/0/35733/38795ae7-62ca-6dd7-5871-b65eddb0e362.png "スクリーンショット_2014-12-08_21_50_08.png")

タブの右側に先ほど追加したサーバが追加されるので、リフレッシュアイコンを押下します。もしうまくリフレッシュできなかったら、サーバを選択して [右クリック]→[Refresh this server] を選択します。

![スクリーンショット_2014-12-09_11_46_32.png](https://qiita-image-store.s3.amazonaws.com/0/35733/86ad3fd6-7794-6caa-f766-3fec4edfac5a.png "スクリーンショット_2014-12-09_11_46_32.png")

接続できると、テーブル(スキーマ？)毎にデータが閲覧できます^^ 左側のアイコンで、表示をギュッとしたり、検索とか出来ます。

![スクリーンショット_2014-12-08_21_51_00.png](https://qiita-image-store.s3.amazonaws.com/0/35733/1a8f1036-200d-3e5d-064f-4983f24bf63f.png "スクリーンショット_2014-12-08_21_51_00.png")

以上、プラグインの簡単な紹介でした！ 明日(12/10)はまた自分のターンなので、WebStorm と TypeScript の使用感について、簡単に紹介させて頂きます :smile:
AndroidStudio beta 0.8.9 から 1.0 へアップデートする方法

1. update確認先をdev に変更。
2. AndroidStudio 0.9.9 へアップデート。
3. AndroidStudio 1.0 へアップデートが可能になる。

実は、バージョン0.9.9はベータ0.8.9を1.0へアップデートするためのパッチ。
[2014120901.png](https://qiita-image-store.s3.amazonaws.com/0/33483/af03769d-8dcc-aec4-a749-709afedb2227.png)

そして、devにしか存在しないため、アップデート確認先が他の箇所だと入手できない。
確認先がstableとかbetaの人は要注意。!
Composerインストール手順(Windows)

## はじめに
Composerは、PHP 5.3以上向けの依存関係管理ツールです。前もってPHPをインストールしておく必要があります。PHPがインストールされていない場合はインストールしておきましょう。

一応、私が作った手順のリンクです。

* [お手軽PHP開発環境構築(Windows)](http://qiita.com/mikoski01/items/af9ba7283f28033a3083)


## Composerのインストール
Composerをインストールしてきいきます。ここではインストーラーを使ってインストールしていきます。

### プロキシの設定
もし構築するPCがプロキシを介している場合はインストールする前にプロキシの設定を行います。プロキシを介してない場合は読み飛ばしてください。

OSの環境変数に下記のように設定してください。

* 変数名: HTTP_PROXY 
* 値: http://<プロキシサーバ名>:<ポート番号>

【例】ホスト:proxy.mytest.co.jp、ポート:8080の場合
![proxy_env.png](https://qiita-image-store.s3.amazonaws.com/0/61752/be8045cd-bc86-48c9-2faa-c8cec847a156.png)


### インストーラーによるセットアップ
インストーラーを下記サイトからダウンロードします。

* [composerのサイト(Windows)](https://getcomposer.org/doc/00-intro.md#installation-windows)

「Composer-Setup.exe」をダウンロードしたら実行します。

![composer_1.png](https://qiita-image-store.s3.amazonaws.com/0/61752/99f4e514-a26a-9b2e-11b4-e1ab2d792465.png)
「Next >」を押下。

![2014-12-08_150819.png](https://qiita-image-store.s3.amazonaws.com/0/61752/9438b9ff-65a3-4156-57b4-5efd5794f0e3.png)
Composerをコンテキストメニュー(右クリックメニュー)で利用できるようにしたい場合は「Install Shell Menus」を選択する。特にこだわりがない場合はこれを選択。

![composer_3.jpg](https://qiita-image-store.s3.amazonaws.com/0/61752/5aad8634-87e5-9528-c8bb-e72a54cc9a87.jpeg)
PHPのパスを選択して「Next >」を押下。

![composer_4.jpg](https://qiita-image-store.s3.amazonaws.com/0/61752/abc906a1-e1aa-f849-318e-b9c4394e7e53.jpeg)
「Install」を押下。

![composer_5.jpg](https://qiita-image-store.s3.amazonaws.com/0/61752/c6054683-65a8-816f-ffd5-dbdb91050836.jpeg)
セットアップ中。しばらく待ち。

![composer_6.jpg](https://qiita-image-store.s3.amazonaws.com/0/61752/bd5104f9-15a6-230f-030d-d35cbfdb91e8.jpeg)
「Next >」を押下。

![composer_7.jpg](https://qiita-image-store.s3.amazonaws.com/0/61752/586411f8-94cf-a280-30c8-8cc348888440.jpeg)
「Finish」押下。完了です！


正しくインストールされているか、コマンドプロンプトを起動して「composer」と打って確認しましょう。下のような画面が出てくれば正常にインストールされています。
![2014-12-08_153510_.jpg](https://qiita-image-store.s3.amazonaws.com/0/61752/1505965e-f757-1f62-bb3f-6f31c675327a.jpeg)


 *ここではインストーラーを使用してインストールしましたが、手動でもインストール可能です。手動でインストールしたい場合は下記サイトを参照。*

* [composerのサイト(Windows Manual)](https://getcomposer.org/doc/00-intro.md#manual-installation)


以上。
Homebrew で Mac に MongDB をインストールする手順メモ


## 前提環境

- OS：`Mac OS X 10.9.5`
- Homebrew：`0.9.5`

> もし Homebrew がはいってなければ、[公式ページ](http://brew.sh/index_ja.html)どおり、次のようにインストールします。
> `ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"`
> ※ 執筆時とコマンド内容が変わってるかもしれないので、公式ページを確認ください。
> ※ 事前に Xcode のインストール(および起動して許諾への同意)が必要かも。もしくはコンパイルできる環境。

## 手順

といっても brew コマンドで一発。

```shell:
$ brew install mongodb
```

バージョンを確認してみます。

```shell:
$ mongo --version

MongoDB shell version: 2.6.5
```

## MongoDB の起動

MongDBの設定ファイルは `/usr/local/etc/mongod.conf` にあります。このファイルの中に `dbPath` が定義されているので、MongoDB を起動する場合は、このパスを指定して起動します。

```shell:
mongod --dbpath /usr/local/var/mongodb
```

ターミナルに表示される起動ログに、ポート番号が記載されています。デフォルトは `27017` みたい。

## MongoDB への接続

MongoDB が起動している状態で、

```
$ mongo
```

プロンプトが `>` になるので、これで各種のコマンドを叩けます。試しにデータベースの一覧を表示するには、次のようにします。

```shell:
> show dbs;
```

おしまい。
Linux 良く使うコマンドメモ



１つ前にいたカレントディレクトリに移動( /var/www/html/　から /etc/nginx/ に移動した状態で、```cd -```で /var/www/html/に戻ることができる

```shell:
cd -
```


lsコマンドで表示できないくらいの、大量の画像ファイル等の数をカウント

```shell:
ls -1 | wc -l
```

カレント配下の容量順一覧を表示

```shell:
du ./* | sort -nr
```

ログファイルなど、膨大なファイルをrmコマンドで直削除できない場合に。（扱い注意！！）

```shell:
echo /var/log/201109*.log | xargs rm
```

agコマンドなどが使えない時のカレントディレクトリからのgrep

```shell:
find ./ -type f -print | xargs grep -n 'hoge'
```

古いファイルを一括移動（カレントの30日前ファイルを/tmp/に移動）

```
find ./ -mtime +30 -name "*.log" | xargs mv --target-directory=/tmp/
```
[PC1→PC2] vagrantで独自boxを作って配布する

##[PC1]独自boxを作成する
###VM で /etc/udev を無効化する
まずこれを行わないとMACアドレスが固定化されてしまい、別のPCでvagrant upできなくなる。

```linux
% vagrant ssh
```

VM 内で下記を実行し、/etc/udev を無効化します。

```linux
$ sudo ln -s -f /dev/null /etc/udev/rules.d/70-persistent-net.rules
```

###Box を作成、登録する
設定を終えた box を package します。

```linux
% vagrant package
```

カレントディレクトリに package.box が作成されたので、これを登録します。

```linux
% vagrant box add BOX_NAME package.box
```

下記で登録を確認できます。

```linux
% vagrant box list
```

実体はこちら。

```linux
% ls ~/.vagrant.d/boxes
```

ここでpackage.boxをPC2に渡す。重いのでAirDropがオススメ。

##[PC2]boxから仮想マシンを作成する
###vagrantにboxを追加する

boxに追加

```linux
vagrant box add BOX_NAME ./package.box
```

boxが追加されたことを確認。

```linux
vagrant box list
```

仮想マシンを作成する。

```linux
vagrant init BOX_NAME
```

仮想マシンを立ち上げ、sshで中に入る。

```linux
vagrant up 
vagrant ssh
```

##完了

注意点としては、[PC1]でvagrantの共有フォルダ（/vagrant）に入っていたファイルはbox作成時にパッケージングされませんでしたので、先にgithubなどにアップロードして、上記がひと通り終わったとに、[PC2]でインストールするのがよいでしょう。
（このクラウド時代に）仮想化に向いた自作サーバを作る話

# いつもの

皆様こんにちは、はじめましての方ははじめまして。

[CYBIRDエンジニア Advent Calendar](http://qiita.com/advent-calendar/2014/cybird) 10日目担当となりました入社3年目の @asuky です。
個人的には物理環境とか仮想化とかネットワークが担当のつもりです。

昨日の @gucchon さんのお話はクラウドを使う方にとっては、常に心に留めなくてはならぬことだと思います。

RIやMarketPlaceに限らずとも、精力的かつ継続的に値下げを行うAWS、この間も[転送料が安くなる](https://aws.amazon.com/jp/blogs/aws/aws-data-transfer-price-reduction/)お話も伺いまして、世はまさにクラウドファースト。

そんなWeb業界のみならないクラウド全盛な世の中から背を向け、本日は自宅に置ける仮想化に向いたサーバを作る話をします。

# 自作サーバのポイント
一昔前は流行っていたのですが、昨今ではベンダ製のエントリーモデルの方が安くなっていたりするケースもありますが…。
とはいえ、仮想化という特化目的に使うのであれば、やっぱり自分で作った方が安上がりです。

…サーバのコストを下げたい？自分でサーバ作れば一番安上がりなんだぜ？（多分）

なお自作の手順はあちこちに書いてあるので、探して下さい。

自宅にラックマウントサーバやCatalystを置いてしまうような方は、そっとブラウザを閉じていただけると幸いです。

## 性能
仮想化環境では物理サーバ1台につき、仮想サーバが最大何台稼働可能かという**統合率**が重要になります（統合率が低いと、物理サーバを多数調達する必要が出てくるため、コストに跳ね返ります）。
CPUはなるべく多コア、メモリも多量に積んでより多数のサーバを稼働可能にするべきです。
しかしCPUは大変電気を食うので、とりあえず良いもの、とかすると電気代が嵩みます。
**TDPが低くてコア数スレッド数が多いもの**（周波数は諦める）を選びましょう。
（IntelのCPUだとTのついたモデルが該当します…現在ならCore i7 4790Tとかオススメ）

## 騒音と冷却
サーバの冷却を行うファンは欠かせないものですが、その稼動音は周囲の方が不快に感じる可能性があります。
**ファンは20db未満**のものならあまり気になりません（実感的に）。
…冷却力と低騒音はトレードオフです、**初起動からしばらくはBIOS上で筐体内部温度を確認**します。
なおIntelのCPUには、Turbo Boostという特定コアに負荷が偏ったときに周波数をTDPまで自動的に上昇させる機能がありますが…切った方が無難です（排熱が足りてないだけかもしれませんが…ファンを増やすとうるさいので頑張って数や回転数を調整しましょう）。

またサーバだけではなく、**普通の一般向けルータやスイッチも熱を持ちやすい**です。
アルミ製だろうが何だろうが**冷却しないと熱で壊れる**ので、風を当てましょう。

![cooling.jpg](https://qiita-image-store.s3.amazonaws.com/0/5651/168e2e40-e4fe-a753-ada5-a2798589789f.jpeg)
↑クリップ付きのファンでルータを冷やすの図

## ストレージ
仮想環境の場合は**SSD推奨**です（耐久性や信頼性が程々ならそんな高くない）。
仮想サーバを複数動かすと、**DiskI/Oは確実にボトルネック**になります。

![SSD.jpg](https://qiita-image-store.s3.amazonaws.com/0/5651/e712a926-bcd2-a6cd-d326-f5cc07b92678.jpeg)
↑最近だと240GB前後が10000円程度で市販されてますね

また市販されているようなマザーボードのちゃっちぃRAID機能に頼るよりは、mdadmのようなOSレイヤーでRAID1を組むほうが良いと思います（RAID5や6は最低必要ディスク本数が増えるのでイマイチ）。

mdadm利用時は**復旧手順を用意しておくことは当然**として、**間違って故障してないディスクを抜かないように！**（一度検証時にやらかしたんだぜ…）

大体ディスクのUUIDらしきものは（大体は）見えるところに書いてあるので、OS側でudevadmコマンドを叩きつつ探しましょう。

あと方法はなんでもいいのでSMART情報は見ておいて下さい。

## その他
**ネットワークのポートが2つ**あるマザーボードを選んでおくと何かと便利です（2本足構成にできるので）、その時CentOSがNICを2つ認識しなくても、慌てずドライバを探して入れます（CentOSはAtherosのチップをデフォルトで認識しない様子）。
電源に**無意味に容量の大きな電源を使わない**ようにしましょう、80plus認証とか気にするより電気代優先です。
あと**仮想サーバのイメージを置くストレージをネットワーク越しに作るのもボトルネックになるのでNG**です。テンプレート（AMI的なもの）を置くぐらいなら良いと思いますが…。

# 終わりに

とりあえず前述の内容を守れば、それなりに使える小粋な物理サーバができますので、CentOSを突っ込んでOpenStackやCloudStackのホストにしてみるなり、素直にKVMを入れて仮想サーバを立てるなり楽しんでください（ぶん投げ）。

KVM入れるだけならyum groupinstall "Virtualization*"とかやったら一発なので、後はvirt-installで仮想サーバをぽこぽこ作りましょう（これも元になるテンプレートにかなり仕込みが必要ですが）。

ちなみにサーバ自作しても…大規模運用は難しいでしょう（出来ないことはないですが、手間に見合うかどうかが不明）。
自作する手間もあるし電気代かかるしラッキングできないから場所取りますし。
でも検証用に手元で使える物理サーバがあるのは嬉しいんじゃないかと思う今日このごろなのでした。

明日は、弊社内の大先輩にあたるSayakaさんからのお話がありますので、皆様拝聴頂きたく思います。

> 2014/12/30 21:25 追記
> なんか中途半端だったので続き書きました。
> http://qiita.com/asuky/items/c529091036f7936c19c1
【バージョンアップの前に！】Android Studio 1.0がリリースされました！

Android Studioの1.0がリリースされました！
http://tools.android.com/

開発から2年での完成です！ :tada: 


さて、0.8系や0.9系を使っていた方も多いと思います。
そこで**バージョンアップをする前に**いくつかのチェックポイントを。


1. JDK7はインストール済みですか？（Lollipopでコンパイルするには、JDK7が必要です）
2. Macの場合SDKの場所がappの中から出す必要があります。アップデートの途中でSDKがappの中に入っているので、出してくださいと促すメッセージが出ますので、そこで、sdkをappの外に出してください。
3. Gradleのバージョンが上がるので、いくつかサポートされないものが出てきます。サポートされないものはとりあえず、build.gradleからコメントアウトしてみましょう
4. ビルドが通っても安心出来ません！実行してみましょう。昨日の記事の様な意味不明なエラーで実行出来ない場合があります。
5. AndroidのBuildToolsはバージョンアップしましたか？

とりあえず、自分がアップデートしてみて思ったことを書きました。
皆さんの少しでもお役に立てれば嬉しく思います。
MySQLコマンドまとめ

## ログイン

```bash
$ mysql -uroot # root でログイン
$ mysql -u ユーザ名 -p
Enter password: [パスワード]
$ mysql -h xxx.xxx.xxx.xxx -u username -p  # リモートアクセス
```

## サーバ操作

**セッション統計情報の表示**

```mysql
show status;
```

**バージョンを確認**

```bash
$ mysql --version
```

```mysql
> show variables like 'version';
```

**現在の同時接続数**

```mysql
show status like "Threads_connected";
```

## ユーザ操作

**ログイン中のユーザ**

```mysql
select user();
```

**ユーザ一覧を表示**

```mysql
select host,user from mysql.user;
```

**ユーザ作成**

```mysql
create user 'user_name'@'host_name' identified by 'password';

# 権限付与と同時に行う場合
GRANT ALL PRIVILEGES ON db_name.* TO 'user_name'@'host_name' IDENTIFIED BY 'local' WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON db_name.* TO 'user_name'@'host_name' IDENTIFIED BY 'local' WITH GRANT OPTION;
```

**ユーザ削除**

```mysql
drop user 'user_name'@'host_name;
```

**権限の付与**

```mysql
grant all privileges on db_name.table_name to 'user_name'@'host_name';
flush privileges;
```

**ユーザ権限確認**

```mysql
show grants; # 現在ログイン中のユーザ
show grants for 'user_name'@'host_name'; # ユーザを指定
```

**パスワード変更**

```mysql
update mysql.user set password=password('password') where user='user';
flush privileges; # 権限変更を反映
```

## データベース操作

**データベース一覧を表示**

```mysql
show databases;
```

**データベースの作成**

```mysql
create database db_name;
```

**使用するデータベースを選択**

```mysql
use db_name
```

**データベース削除**

```mysql
drop database db_name;
```

## テーブル操作

**テーブル一覧を表示**

```mysql
show tables;
```

**カラム一覧を表示**

```mysql
desc table_name;

# Collation 付き
show full columns from table_name;
```

**ステータス情報を表示**

```mysql
show table status (like "table_name");
```

## 起動・停止

```bash
$ mysql.server start # 起動
$ mysql.server start --skip-grant-tables #　パスワード無しでログイン
$ mysql.server stop # 停止
```

## インデックスを確認
```ruby
# 特定のテーブル
show index from table_name;

# 特定のデータベース
> use information_schema;
> SELECT * FROM statistics where TABLE_SCHEMA = database_name;
```
ofxOpenCvを使って動画をリアルタイム解析してパーティクルを弾くサンプルをopenFrameworks0.8.4で動かす


Beyond Interaction　メディアアートのためのopenFrameworksプログラミング( http://www.bnn.co.jp/books/3746/ )を読みながらMac上でサンプルを動かしていたら
3-4-4 ofxBox2DとofxOpenCvを組み合せる
あたりでバージョンの壁にぶち当たったのでググりまくった時のメモ。

色々調べていると、フォーラムで似たようなことで困っている人がいて、その人への著者の回答を発見。

http://openframeworks.jp/forum/topic.php?id=256

>書籍のofxContorAnalysysを使う方法、いまとなってはちょっと賢い方法ではないような気がしてきています。下記の資料を参考に、VectorFieldを使用して映像とのインタラクションを実現してみたほうが、いろいろ可能性が拡がりそうです。ソースコードも添付してありますので、参照してみてください。
openFrameworks addonを利用する – ofxControlPanel、ofxOpenCv
http://yoppa.org/ma2_11/3282.html

それならばとそっちを試してみることにした。

# サンプルを動かすための手順

第７回：openFrameworks addonを利用する – ofxControlPanel、ofxOpenCv
http://yoppa.org/ma2_11/3282.html

今回はこちらのサイトからダウンロードできるサンプルのうちのひとつ
06_OpencvParticle
を動かすための手順について書いていきます。

testApp.cpp
104,107行あたりの

	vidGrabber.grabFrame();
	vidPlayer.idleMovie();

こうなっているところを

	vidGrabber.update();
	vidPlayer.update();

に修正する。


guiTextBase.cppで

	fontPtr->bLoadedOk

みたいになっているところを何箇所か

	fontPtr->isLoaded()

こう修正する。

testApp.cpp 53行目の

	vidGrabber.close();

もクラッシュの原因になるようなので消しておく。


さらに

	QTKit.framework
	Accelerate.framework
	CoreVideo.framework

を足す。

とりあえずこれで動くようにはなりました。

![スクリーンショット 2014-12-09 11.01.01.png](https://qiita-image-store.s3.amazonaws.com/0/2288/b258d27e-3e74-c078-1f39-be092a0dca36.png "スクリーンショット 2014-12-09 11.01.01.png")


# 所感

ググっている最中に気になったのが、今年の情報が少ないこと。
本もPDF版の初版は2010年みたいだし。
紙のほうは第二版が2013年に出てるみたいだけど、そっちは情報が新しいんだろうか？


この本とかちょっと新しいしKindle版出てるから買ってみようかな。


<a href="http://www.amazon.co.jp/gp/product/B00FDPNZ1S/ref=as_li_ss_tl?ie=UTF8&camp=247&creative=7399&creativeASIN=B00FDPNZ1S&linkCode=as2&tag=valletta052-22">Mastering openFrameworks: Creative Coding Demystified</a><img src="http://ir-jp.amazon-adsystem.com/e/ir?t=valletta052-22&l=as2&o=9&a=B00FDPNZ1S" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />
PHP + Slim Framework + PHPActiverecord + Twig な環境で Relations を使えるようにする

自分用メモ。

PHP + Slim + PHPActiverecord + Twig で以下のような環境。

```PHP:Hoge.php
<?php
class Hoge extends ActiveRecord\Model
{
    static $belongs_to = array(
        array('Fuga'),
    );
}
?>
```
```PHP:Fuga.php
<?php
class Fuga extends ActiveRecord\Model
{
}
?>
```
```PHP:test.php
<?php
$app = new ¥Slim¥Slim();

$app->get('/', function() use ($app) {
    $hoge = new ¥Hoge();
    $app->render('hoge.twig', array('hoge' => $hoge));
});

$app->run();
?>
```
```HTML:hoge.twig
<html>
<body>
{{ hoge.fuga.name }}
</body>
</html>
```

各種ライブラリをダウンロードしたままだと、

```
An exception has been thrown during the rendering of a template ("Call to undefined method: fuga") in "hoge.twig" at line 3.
```

というエラーになる

どうも、公開状態のままでは、Associates にうまく対応できていないみたい。
Stable(2010/06/27) はそこそこ古い状態なのでしょうがないかな。
Nightly Build(2013/04/13) も古いけどw

で、PHPActiverecord を一部書き換えて、エラーを回避する。

```PHP:MyModel.php
class MyModel extends ActiveRecord¥Model
{
    public function __isset($attribute_name)
    {
        if (array_key_exists($attribute_name, $this->attributes))
            return true;

        if (array_key_exists($attribute_name, static::$alias_attribute))
            return true;

        if (method_exists($this, "get_${attribute_name}"))
            return true;

        if (static::table()->has_relationship($attribute_name))
            return true;

        return false;
    }
}
```
```PHP:Hoge.php
<?php
class Hoge extends MyModel
<後略>
?>
```
```PHP:Fuga.php
<?php
class Fuga extends MyModel
<後略>
?>
```

今回のような環境を利用しているなら、すでに対応済みだと思うけど。
自分でハマったのでメモ。
baserJSでチェックボックスを装飾する


コーポレートサイトにちょうどいいJavaScriptライブラリ **baserJS** の解説記事です。

Webサイトと詳しいAPIリファレンスはこちら [baserJS Webサイト](http://baserproject.github.io/baserjs/)

## 装飾のための要素を追加する

input要素を装飾する場合、CSSの`appearance: none`などを使用すれば、ある程度の装飾はできますが、ブラウザの対応だったり、痒いところに手が届かなかったり、デザインによっては満足に実装できないケースがあります。

baserJSの`bcCheckbox`メソッドは、実行するとチェックボックスに対して、装飾のための要素を追加することができます。

### HTML

```html
<input type="checkbox" name="key" id="foo" />
<label for="foo">foo</label>
```

### JavaScript

```js
$(':checkbox').bcCheckbox();
```

上記のJavaScriptを実行するとHTMLは以下のように変化します。

付加されるクラス名は変更可能です。

```html
<span class="-bc-form-element -bc-wrapper -bc-wrapper--blur -bc-form-checkbox-wrapper -bc-wrapper--unchecked">
  <input type="checkbox" name="key" id="foo" class="-bc-element -bc-form-element -bc-form-element--blur -bc-form-checkbox -bc-form-element--unchecked" aria-checked="false">
  <label for="foo" class="-bc-form-element -bc-form-element__label -bc-form-element__label--blur -bc-form-checkbox__label -bc-form-element__label--unchecked">foo</label>
</span>
```

### 状態変化

要素の一部には自動でイベントが登録され、状態によって変化します。この変化を利用して、CSS側で装飾の変化を記述するとよいでしょう。

#### フォーカス時のクラス
- `-bc-wrapper--blur` ←→ `-bc-wrapper--focus`
- `-bc-form-element--blur` ←→ `-bc-form-element--focus`
- `-bc-form-element__label--blur` ←→ `-bc-form-element__label--focus`

#### チェック時のクラス

- `-bc-wrapper--unchecked` ←→ `-bc-wrapper--checked`
- `-bc-form-element--unchecked` ←→ `-bc-form-element--checked`
- `-bc-form-element__label--unchecked` ←→ `-bc-form-element__label--checked`

#### チェック時の属性

- `aria-checked="false"` ←→ `aria-checked="true"`

## サンプル

http://codepen.io/YusukeHirao/pen/wBMjbN
baserJSでラジオボタンを装飾する


コーポレートサイトにちょうどいいJavaScriptライブラリ **baserJS** の解説記事です。

Webサイトと詳しいAPIリファレンスはこちら [baserJS Webサイト](http://baserproject.github.io/baserjs/)

## 装飾のための要素を追加する

input要素を装飾する場合、CSSの`appearance: none`などを使用すれば、ある程度の装飾はできますが、ブラウザの対応だったり、痒いところに手が届かなかったり、デザインによっては満足に実装できないケースがあります。

baserJSの`bcRadio`メソッドは、実行するとラジオボタンに対して、装飾のための要素を追加することができます。

### HTML

```html
<input type="radio" name="key" id="foo" />
<label for="foo">foo</label>
```

### JavaScript

```js
$(':radio').bcRadio();
```

上記のJavaScriptを実行するとHTMLは以下のように変化します。

付加されるクラス名は変更可能です。

```html
<span class="-bc-form-element -bc-wrapper -bc-wrapper--blur -bc-form-radio-wrapper -bc-wrapper--unchecked">
  <input type="radio" name="key" id="foo" class="-bc-element -bc-form-element -bc-form-element--blur -bc-form-radio -bc-form-element--unchecked" aria-checked="false">
  <label for="foo" class="-bc-form-element -bc-form-element__label -bc-form-element__label--blur -bc-form-radio__label -bc-form-element__label--unchecked">foo</label>
</span>
```

### 状態変化

要素の一部には自動でイベントが登録され、状態によって変化します。この変化を利用して、CSS側で装飾の変化を記述するとよいでしょう。

#### フォーカス時のクラス
- `-bc-wrapper--blur` ←→ `-bc-wrapper--focus`
- `-bc-form-element--blur` ←→ `-bc-form-element--focus`
- `-bc-form-element__label--blur` ←→ `-bc-form-element__label--focus`

#### チェック時のクラス

- `-bc-wrapper--unchecked` ←→ `-bc-wrapper--checked`
- `-bc-form-element--unchecked` ←→ `-bc-form-element--checked`
- `-bc-form-element__label--unchecked` ←→ `-bc-form-element__label--checked`

#### チェック時の属性

- `aria-checked="false"` ←→ `aria-checked="true"`

## サンプル

http://codepen.io/YusukeHirao/pen/dPYxVR
AndroidのGmailアプリでmailtoリンクのbody部分を指定しても空白になる

<pre>
mailto:hogehoge@hoge.com?subject=aaa&body=bbb
</pre>
というリンクを作成した時に、メーラーの本文にbbbが入っていることを期待するわけだがそれが入っていない。

バージョン5.0.0のバグのよう。5.0.1にアップデートするとbody部分も入るようになる。おまえー
AWS利用中のDBコネクションエラー

AWSでアプリをBeanstalkからデプロイしたときに表示されたDBコネクションエラー

`WARN  o.h.e.jdbc.internal.JdbcServicesImpl - HHH000342: Could not obtain connection to query metadata : Cannot create 
PoolableConnectionFactory (Communications link failure The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.)`

パケットがサーバに届いていない。権限問題と思われ
↓
原因
セキュリティグループの設定漏れで、アクセス元からのポート接続ができない状態でしたので
設定修正しました。
AWSでJenkinsスレーブをAutoScaling(笑)させてみた

Jenkinsではノード追加のAPIがないためスレーブ用のEC2インスタンスをおこしても人手でノードを追加しなければならないです(なんか良いプラグインとか方法とかあるのかな？)
そこをなんとかしてAutoScalingさせてみました。

AWSの構成としては以下のようにしました。
ミソは10.0.200.0/28のサブネットにスレーブ用のEC2を立てるところで、これでスレーブ用のEC2は10.0.200.3～10.0.200.14※で立ち上がってきます。
※ [各サブネットの CIDR ブロック内にある IP アドレスのうち、最初の 4 個と最後の 1 個は両方とも AWS によって予約されています](http://docs.aws.amazon.com/ja_jp/AmazonVPC/latest/UserGuide/VPC_Subnets.html)

![Jenkinsスレーブautoscaling(1).png](https://qiita-image-store.s3.amazonaws.com/0/16768/9783cf0f-255c-35e1-d1ca-b15f3a00d281.png)

そして、この10.0.200.3～10.0.200.14をあらかじめJenkinsのノードに追加しました。
これで立ち上がったEC2に応じてスレーブがオンラインになります。
スレーブを落としてみてEC2を立ち上げ直してみるとやや時間はかかるもののノードがオンラインになります。

![jenkins_slave_autoscaling.png](https://qiita-image-store.s3.amazonaws.com/0/16768/2fb93158-888d-ce11-3b29-e0939864a3ca.png)

以上のように無理やり感ありますが、JenkinsスレーブのAutoScaling適用をしてみました。
サブネットの範囲内でスケールアウトやスケールインもできるはず。
Android Studio に "JVMがないよ"と起動拒否されるところから

#はじめに
JavaなしのYosemiteでJDK7を入れたら拒否されたので対応しました。

空プロジェクトをRunするところまでは確認しています。

![スクリーンショット 2014-12-09 9.54.34.png](https://qiita-image-store.s3.amazonaws.com/0/12362/bd670912-629f-5528-8973-65b90b1c3101.png)


#インストール手順
JDKやAndroidStudioをダウンロードしたり、は省きます。
ダウンロード後のフローに沿ってガイドされています。
https://developer.android.com/sdk/index.html

#設定
##~~Androidのinfo.plistを書き換え~~ 

この方法はダメだ！という記述が追加されていました。
http://tools.android.com/tech-docs/configuration/osx-jdk
 >On Mac OSX, the version of Java used to run the IDE is generally chosen for you automatically, and the choice is based on an entry in the Info.plist file in the IDE installation. Please note: Do not edit Info.plist to pick a different version. That will break not only the application signature, but also future patch updates to your installation. Instead, you can pick a different JDK by setting the $STUDIO_JDK environment variable, as described in the IDE Configuration document.

次の方法がオススメ？

##(a)$STUDIO_JDKを設定
>$ export STUDIO_JDK=/Library/Java/JavaVirtualMachines/jdk1.7.0_71.jdk
$ open /Applications/Android\ Studio.app

##(b)ターミナルから起動するのが面倒
ターミナルで一度次のように入力

>$ ls  /Library/Java/JavaVirtualMachines/

jdk1.7.0_71.jdkだなっと

>$ launchctl setenv STUDIO_JDK /Library/Java/JavaVirtualMachines/jdk1.7.0_71.jdk

あとは通常どおりアプリを起動し、アラートも表示されず実行が確認できました。

##(c)面倒だからJDK6
http://support.apple.com/kb/DL1572?viewlocale=ja_JP

#余談：他にもカスタマイズ
http://tools.android.com/tech-docs/configuration

#さいごに
info.plistを編集するのはだめなのかと。
アップデートするときに毎回言われることあるし、開発者側では後ほどの影響を考えると触られたくない気持ちはわかります。

launchd.confファイルに記述する方法も有効らしいのですが、こちらではAndroid Studioは起動できませんでした
> $ sudo vi /etc/launchd.conf

```
setenv STUDIO_JDK /Library/Java/JavaVirtualMachines/jdk1.7.0_71.jdk
```
Modal 表示中の UIViewController 越しに UIVisualEffectView を使う

12/9 の記事を [@jarinosuke](https://twitter.com/jarinosuke) が書かせて頂きます。

![blur_modal_gif.gif](https://qiita-image-store.s3.amazonaws.com/0/4085/68b343f8-f35f-263d-2dc9-0fb9907825f7.gif)


## [UIModalPresentationStyle](https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIViewController_Class/)

```UIViewController``` には ```presentationStyle``` というプロパティがあり、ここに指定の値を入れることにより ```presentViewController:animated:completion``` で表示された場合に ```UIViewController``` はその Presentation Style に習った表示のされ方をします。

iOS 8 からこの ```UIModalPresentationStyle``` に ```UIModalPresentationOverFullScreen``` が加わりました。
説明を読んでみると、

> A view presentation style in which the presented view covers the screen. The views beneath the presented content are not removed from the view hierarchy when the presentation finishes. So if the presented view controller does not fill the screen with opaque content, the underlying content shows through.

とあります。

今までの Presentation Style では表示のアニメーションが終わったと同時に後ろの ```UIViewController``` の View は表示されなくなっていたのですが、この Presentation Style を表示される側に指定することで表示する側の View も後ろ側で表示されたままになります。

なので、表示された側の View を透かしてあげることで後ろ側の View が見えて来るというわけになります。

## Sample

GitHub に上記を実装したコードをあげました。とても短いので是非見てみて下さい。

[jarinosuke/ModalBlurSample](https://github.com/jarinosuke/ModalBlurSample)

主なポイントは二つだけです。

### 1.[表示する UIViewController の presentationStyle を指定する](https://github.com/jarinosuke/ModalBlurSample/blob/master/ModalBlurSample/ViewController.swift#L14)

```swift
blurModalViewController.modalPresentationStyle = .OverFullScreen
```

### 2.[表示された UIViewController の View を透かしてあげる](https://github.com/jarinosuke/ModalBlurSample/blob/master/ModalBlurSample/BlurModalViewController.swift#L14-L18)

```swift
self.view.backgroundColor = .clearColor()
        
let visuaEffectView = UIVisualEffectView(effect: UIBlurEffect(style: .Light))
visuaEffectView.frame = self.view.bounds
self.view.addSubview(visuaEffectView)
```

これだけで今まではややこしかった UIViewController をまたいだ view の表示ができるようになります。

## 参考

[jarinosuke/ModalBlurSample](https://github.com/jarinosuke/ModalBlurSample)

[Using UIVisualEffectView in a Modal View Controller](http://justabeech.com/2014/10/22/using-uivisualeffectview-in-a-modal-view-controller/)

[UIModalPresentationStyle](https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIViewController_Class/)
[Xcode]Analyzerでエラー


はまったのでメモ。

# 現象
Xcodeで「Product-Analyze」を実行したときに、以下のエラーが発生して実行できない。

>fatal error: malformed or corrupted AST file: 'Unable to load module "/Users/xxxx/Library/Developer/Xcode/DerivedData/ModuleCache/2AI83WDRKQ7VM/Darwin-29XPUSGKOXLVN.pcm": module file not found'
note: after modifying system headers, please delete the module cache at '/Users/xxx/Library/Developer/Xcode/DerivedData/ModuleCache/2AI83WDRKQ7VM'
1 error generated.


#試したこと
* プロジェクトのクリーン
* iOS Simulatorの変更(iPhone6にしたりiPhone5にしたり)
* Xcode再起動
* 「please delete the module cache」の指示通り、フォルダを削除
* 「/Users/xxx/Library/Developer/Xcode/DerivedData/」以下全削除　→　XCode再起動
* iOS Simulator のリセット。
	1. iOS Simulatorの起動
	2. 「iOS Simulator - Reset content and settings」を選択<br>
**<font color="red">※注意※ 全シュミレータがリセットされ、設定した情報が全部消えるので、自己責任でお願いします。</font>**
	3. 「Hardware - Device - Manage Devices」を選択
	4. 左下の「+」を押下し、必要なデバイスを追加
* 「Xcode - Preference - Locations」で「Device Data」の値を「custom」にして自分で指定。


上から順番にやっていき、最後ので解決。
シュミレータをリセットする前に試せばよかった・・・

#環境
* Xcode 6.1
* Mac OS 10.9.4
PowerShellでディレクトリのファイル一覧とタイムスタンプを取得する


###概要

コマンドプロンプトのdirコマンドだとタイムスタンプが分までしか出ないので
powershellで取得する方法を調べたので残す
(コメントの指摘内容を反映して（Split-Path）を使用するように修正)

* Select-Objectでもある程度は取得できるが微調整をしたかったのでGet-ItemPropertyを使う
* ファイルを除外したいときなどは-excludeオプションを追加する

###使い方
1. コマンドプロンプトを起動
2. cd /d で該当ディレクトリまで移動
3. powershellを起動
4. 以下のコマンドを実行


```powershell.exe
#ディレクトリ、フルパス、拡張子、ファイル名、更新日時
$logname="hoge.log"
echo "" > $logname
$List=Get-ChildItem  -Recurse -Name
foreach($a in $List)
{
    $fullname=$(Get-ItemProperty $a).FullName
    $name=$(Get-ItemProperty $a).Name
    $dir_fullpath=$(Split-Path $fullname -Parent) #フルパスフォルダ名を取得

    $lastIndex=$dir_fullpath.LastIndexOf("\")
    $dir=$(Split-Path $dir_fullpath -Leaf) #ディレクトリ名を取得

    $extension=$(Get-ItemProperty $a).Extension
    $timestamp=$(Get-ItemProperty $a).LastWriteTime.ToString('yyyy/MM/dd HH:mm:ss')
    echo "$dir`t$dir_fullpath`t$extension`t$name`t$timestamp" >>$logname
}

```
JenkinsのBuild Flowでジョブを並列実行しどれか成功したらOKにしてみた

ジョブを同時にいくつか実行してそのうちの1つでも成功したらOKとする[Build Flow](https://wiki.jenkins-ci.org/display/JENKINS/Build+Flow+Plugin)を書いたのでやり方をメモしておく。
リソースは使うがretryするより速い。

build flowは下記の例のようにする。
並列実行するジョブ(例ではtest-core)は以下のように設定しておく。

* 「ビルドを並行実行」をチェック
* [Random String Parameter Plugin](https://wiki.jenkins-ci.org/display/JENKINS/Random+String+Parameter+Plugin)のパラメータを設定してパラメータがかぶらないようにしておく(パラメータが同じだと1つしかジョブが実行されない)。

```groovy
// 並列に実行してどれか成功したらtrueを返す関数
def parallel_build(build_name, build_param, try_count = 3) {
  builds = new HashMap<?, ? extends Closure>()
  for (i in 0..<try_count) {
    builds["try${i}"] = {
      build(build_param, build_name)
    }
  }
  join = null
  ignore(FAILURE) {
    join = parallel(builds)
  }
  
  is_success = false
  for (i in 0..<try_count) {
    if (join["try${i}"].result.name == "SUCCESS") {
      is_success = true 
    }
  }
  
  return is_success
}

// ビルド表示名変更(おまけ)
build.displayName = "#${build.number} ${params["ENVIRONMENT"]} ${params["TYPE"]}"
// 並列実行
is_success = parallel_build("test-core", 
                            [TYPE: params["TYPE"], 
                             ENVIRONMENT: params["ENVIRONMENT"]])
// 失敗していたら失敗用のジョブ呼び出しをしてビルド結果を失敗に
if (!is_success) {
  build([FAILED_JOB_NAME: build.environment["JOB_NAME"], 
         FAILED_BUILD_URL: build.environment["BUILD_URL"]], 
        "test-failed-notifier")
  flowRun.state.result = FAILURE
}
```
【FileMaker】開発仕様書を自動で

開発でスクリプトや画面系のことばっかりに目が行きがちですが、FileMakerには、「データベースデザインレポート」というのがあります。
ぶっちゃけて言えば、開発仕様書を自動で作ってくれます。

メニューの「ツール」に潜んでます。
![ 1209_1.png](https://qiita-image-store.s3.amazonaws.com/0/60538/b2845363-e2cd-9f6f-3afa-7d7bca6d9850.png)

例えば一つのプロジェクトが終わる時、まとめて開発資料を納品する場合などに「FileMaker内でのデザインやこのボタンで使っているスクリプトはこれですよ」というようなドキュメントが用意できます。

このとき、ドキュメントに含めるFMファイルは全て開いておく必要があります。
そうでないと、ここ↓で選択できません。
![ 1209_2.png](https://qiita-image-store.s3.amazonaws.com/0/60538/39dbbd28-9b80-208d-ea62-a5d546c2358a.png)

ざっくり全部含めて「作成」ボタンをクリックすると、ファイルの分量によりますがほどなく出来上がります。
![ 1209_3.png](https://qiita-image-store.s3.amazonaws.com/0/60538/ad7b5d68-7249-890a-807e-5f464d3f5b64.png)

だがしかし、FileMakerらしからぬ仕様書のデザインではないですかー！？
![ 1209_4.png](https://qiita-image-store.s3.amazonaws.com/0/60538/0fc0e911-4de9-eae0-4566-bb4aa0ab6786.png)
私の中で「ありえないっしょ」って言ってるんですけど。

これでいいと思ってるのかな〜？
できればそのプロジェクトで使っているテーマから背景を表示するとかいろいろあるんじゃないかなー。

これを見てどう活用するか、を考えてみたのですが、最終納品時のチェックや修正時のチェックでしょうか。
システムのリニューアル修正時にどこで何が使われているかをざっと確認するときや不要な変数やフィールドを削除する、スクリプト内容や使用箇所も展開されるので、解析作業をする際には手っ取り早くできそうです。
FMでもボリュームの大きい開発はそれなりに画面数やスクリプト数、もちろんテーブル数もあるので、手書きで画面を追うよりは効率がいい感じです。


誰か他にもっといい活用法があったら教えてください。
Redmineのチケット一覧にアイコンを表示する

小ネタです。

Redmineではユーザーのメールアドレスと連動したGravatarのアイコンを表示することができます。
（管理→表示→Gravatarのアイコンを使用する）

しかしチケットの一覧画面では表示されないので、表示されるようにビューを変更してみました。

「この行を追加」と書いてある2行を追加します。

```erb:app/views/issues/_list.html.erb
<%= form_tag({}) do -%>
<%= hidden_field_tag 'back_url', url_for(params), :id => nil %>
<div class="autoscroll">
<table class="list issues <%= sort_css_classes %>">
  <thead>
    <tr>
      <th class="checkbox hide-when-print">
        <%= link_to image_tag('toggle_check.png'), {},
                              :onclick => 'toggleIssuesSelection(this); return false;',
                              :title => "#{l(:button_check_all)}/#{l(:button_uncheck_all)}" %>
      </th>
      <th>icon</th> <!-- ←この行を追加 -->
      <% query.inline_columns.each do |column| %>
        <%= column_header(column) %>
      <% end %>
    </tr>
  </thead>
  <% previous_group = false %>
  <tbody>
  <% issue_list(issues) do |issue, level| -%>
  <% if @query.grouped? && (group = @query.group_by_column.value(issue)) != previous_group %>
    <% reset_cycle %>
    <tr class="group open">
      <td colspan="<%= query.inline_columns.size + 2 %>">
        <span class="expander" onclick="toggleRowGroup(this);">&nbsp;</span>
        <%= group.blank? ? l(:label_none) : column_content(@query.group_by_column, issue) %> <span class="count"><%= @i$
        <%= link_to_function("#{l(:button_collapse_all)}/#{l(:button_expand_all)}",
                             "toggleAllRowGroups(this)", :class => 'toggle-all') %>
      </td>
    </tr>
    <% previous_group = group %>
  <% end %>
  <tr id="issue-<%= issue.id %>" class="hascontextmenu <%= cycle('odd', 'even') %> <%= issue.css_classes %> <%= level >$
    <td class="checkbox hide-when-print"><%= check_box_tag("ids[]", issue.id, false, :id => nil) %></td>
    <td><%= avatar(issue.assigned_to, :size => "30") %></td> <!-- ←この行を追加 -->
    <%= raw query.inline_columns.map {|column| "<td class=\"#{column.css_classes}\">#{column_content(column, issue)}</t$
  </tr>
  <% @query.block_columns.each do |column|
       if (text = column_content(column, issue)) && text.present? -%>
  <tr class="<%= current_cycle %>">
    <td colspan="<%= @query.inline_columns.size + 1 %>" class="<%= column.css_classes %>"><%= text %></td>
  </tr>
  <% end -%>
  <% end -%>
  <% end -%>
  </tbody>
</table>
</div>
<% end -%>
```

これでチケット一覧にもアイコンが表示されて誰のチケットか一目瞭然に。

プラグイン探したほうが早かったかも知れません。
不正SIPパケット宛の着信をフィルタリングする方法（YAMAHAルータ編）

SIPサーバのポートを空けていると、夜な夜なセキュリティの甘いSIPサーバを探すBotがやってきます。
VoIPソフトウェアによっては外部から内線のRegisterが出来る設定にも出来るので、場合によっては[不正利用](http://d.hatena.ne.jp/stealthinu/20100715/p1)をされてしまうこともあります。

YAMAHAの場合はその心配は無さそうですが、電話が鳴ってしまうことの対策は必要です。
自分が持つSIPアドレスを知らないと着呼できなよう、設定しておきましょう。

## STEP1: SIPアドレスを確認

 [トップ] ＞ [電話の設定] ＞ [VoIPの設定] ＞ [IP電話サーバの設定] の画面にある、
「IP電話サーバの修正/削除」の「設定」ボタンを押し、次の画面を開きます。

ここに表示されている「sipアドレス」を後ほど使うため、コピーしておきましょう。

![step1.png](https://qiita-image-store.s3.amazonaws.com/0/19199/95660afa-4f63-da29-ffbb-c6f7f3a939a6.png)

## STEP2: 自己SIPアドレスの登録

 [トップ] ＞ [電話の設定] ＞ [TELの共通設定] ＞ [基本設定] と画面を遷移し、自己SIPアドレスの登録をします。

赤い枠線のリンク先を開きましょう。

![NVR500_電話の設定_→_TELの共通設定_→_基本設定.png](https://qiita-image-store.s3.amazonaws.com/0/19199/f88a3e6d-6530-6c36-8d6e-49c4bf06380f.png)

その次に、着信SIPアドレスに先ほどコピーしたSIPアドレスを記入し、設定の確定を押します。

![sip-myaddress.png](https://qiita-image-store.s3.amazonaws.com/0/19199/c19f3a9d-f7ee-17b9-d9e8-bc060b9cd694.png)

## STEP3: 識別着信の設定

先ほどと同じ画面へ [トップ] ＞ [電話の設定] ＞ [TELの共通設定] ＞ [基本設定] と遷移し、識別着信の設定をします。

自己SIPアドレスのみ許可するよう、次のように設定しましょう。

![NVR500_電話の設定_→_TELの共通設定_→_基本設定 2.png](https://qiita-image-store.s3.amazonaws.com/0/19199/55193ddc-aa25-7d4e-447e-15589d9a03ee.png)

最後に画面下の設定の確定ボタンを押して反映すれば完了です。

## 番外編

そもそも発信にしか使わないのであれば、使用制限のプルダウンで、発信専用としてしまうのも手ですね。

![outgoing.png](https://qiita-image-store.s3.amazonaws.com/0/19199/c281d7c3-43ba-03fc-e58c-bca247e528c9.png)

## 参考サイト

* NVR500 で SIP SPAM 対策をしてみる | GUiLZ.ORG
http://www.guilz.org/2011/07/26/nvr500%E3%81%A7sip-spam%E5%AF%BE%E7%AD%96%E3%82%92%E3%81%97%E3%81%A6%E3%81%BF%E3%82%8B/

* 無言電話がかかってくる / 不正なSIPパケットを受信する
http://www.rtpro.yamaha.co.jp/RT/FAQ/VoIP/troublevoip-ans.html
ショートカットで対応するコントローラ、ビュー、スタイルを Sublime Text で開けるプラグイン作ったよ

最近 Titanium Studio を利用している方をよく見かけて、唯一羨ましいな、と思った機能がショートカットで対応するコントローラ、ビュー、スタイルを開けるというものでした。こんな便利なものがあったんですね。羨ましい（悔しい）！

というわけで、Sublime Text でも似たような機能を実現できるプラグインを作りました。

[https://github.com/k0sukey/sublimetext-AlloySwitcher](https://github.com/k0sukey/sublimetext-AlloySwitcher)

これでサイドバーのファイルツリーを探さなくて済みますね。プロジェクトが巨大になっていくにつれて苦痛だったんです。やったー！

インストール方法は[あすとろなんとかさん](https://twitter.com/astronaughts)の[ChatWork にファイルの中身をぶん投げる Sublime Text プラグインを作った](http://qiita.com/astronaughts/items/f7730d3b85e0b5bde7af)を参考にどうぞ。[https://github.com/k0sukey/sublimetext-AlloySwitcher](https://github.com/k0sukey/sublimetext-AlloySwitcher)を指定してください。

デフォルトのキーマップは、以下の通りです。

* コントローラ ```alt+c```
* ビュー ```alt+v```
* スタイル ```alt+s```

また、Sublime Text を使われているかわかりませんが、ぼくは CoffeeScript なんです！[という方](https://twitter.com/hntn)もいらっしゃると思います。大丈夫です。問題ありません。設定でコントローラ、ビュー、スタイルのフォルダと拡張子を指定できるようにしておきました。デフォルトはこんな感じです。

```json
{
	"controller_dir": "controllers",
	"view_dir": "views",
	"style_dir": "styles",
	"controller_ext": "js",
	"view_ext": "xml",
	"style_ext": "tss"
}
```

おまけで Alloy がコンパイルした Resources 配下のファイルも参照できるようにしておきました。デバッグ時に覗きたい時があったりしますよね。mobileweb とか BlackBerry はごめんなさい。

* iOS ```alt+i```
* Android ```alt+a```

さて、10日の担当は[森さん](https://twitter.com/sngmr)です。どんなえっちぃトークが繰り広げられるのでしょうか。とても楽しみです♡
クリーンな環境でJenkinsにDockerコンテナを起動させる方法

JenkinsでDockerコンテナを起動していると、ビルド失敗やDockerfileの編集で不要になったコンテナやイメージがたまってくることがあります。
Dockerコンテナ起動失敗の原因になることもあるので、適度に掃除しながら実行させる方法を紹介します。

## やりたいこと
1. Job(ワークスペース)ごとにコンテナを生成する
2. イメージは使いまわす
3. 使わなくなったコンテナやイメージは削除する

## 対象環境
* Docker: (Macでvolumeオプションを使う場合)1.3以降
* Jenkins: 1.458以降

### Jenkinsで使用するプラグイン
* [Managed Script Plugin](https://wiki.jenkins-ci.org/display/JENKINS/Managed+Script+Plugin)
 * Jobごとに生成するコンテナのタグ付けルールがバラバラだと競合する可能性があります。
 * そこで、スクリプトを共通化するプラグインを用いて、規則化されたタグ付けを行うようにします。

## スクリプト作成
### 登録方法
1. 「Jenkinsの管理」>「Managed files」>「Add a new Config」
1. 「Managed script file」を選択 

### スクリプト
* 「Name」は適当な名前をつける
* 「Argument list」を登録
 * docker_build_tag(ビルドタグ)
 * docker_run_command(Dockerコンテナ上で実行するコマンド)
 * dockerfile_dir(Dockerfileをおいたディレクトリ)
 * 実行ユーザーやポート指定が必要な方は適宜追加してください。
* 「Content」に以下のスクリプトを追加  

```bash
# ビルドパラメータ
docker_build_tag=$1
docker_run_command=$2
dockerfile_dir=$3

# Docker初期設定
boot2docker init
boot2docker up

# Docker環境変数
export DOCKER_HOST=tcp://$(boot2docker ip 2>/dev/null):2376
export DOCKER_CERT_PATH=~/.boot2docker/certs/boot2docker-vm
export DOCKER_TLS_VERIFY=1

# 未起動コンテナの削除
for container_id in $(docker ps -a -q -f status=exited); do
  docker rm ${container_id}
done

# 不要イメージの削除
for image_id in $(docker images | awk '/^<none>/ { print $3 }'); do
  docker rmi ${image_id}
done

# イメージ作成
docker build -t ${docker_build_tag}:1.0 ${dockerfile_dir}

# コンテナ上でworkspaceをビルド
docker run -it \
  -v ${WORKSPACE}:/workspace \
  -w /workspace \
  --name ${JOB_NAME} \
  $(docker images | grep ${docker_build_tag} | awk '{ print $3 }') \
  /bin/sh -c "${docker_run_command}"

# 今回のJobで作成したコンテナの削除
# docker runに"--rm=true"オプションをつければ同等のことはできるが、ビルド失敗した際は解析できるように外している
for container_id in $(docker ps -a -f status=exited | awk '/'${JOB_NAME}'/ { print $1 }'); do
  docker rm ${container_id}
done
```

## ジョブごとの設定
* 「ビルド」で「Execute managed script」を追加
* パラメータ指定例
![job.png](https://qiita-image-store.s3.amazonaws.com/0/13572/2ebbe813-0fdf-0e36-7ba1-cd432519d5ad.png)
JVMオプションのJavaコマンド起動スクリプトのひな形


```
java -XX:+PrintFlagsFinal -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
```

で状態の確認。

### ひな形

バッチ処理のjarを想定。Java7で使用中。Java8では未確認。
`-Xmx`やら`-Xms`やらは`JVM_TUNE`に書く、けど大抵はJVMが自動でよしなに設定してくれるんじゃないかな。

```bash:run.sh
function run_batch() {
  local TODAY=$(date +%Y_%m_%d)
  local JVM_LOG_DIR="/var/log/app_batch"

  local JVM_TUNE=""
  local JVM_GC_LOG="-Xloggc:$JVM_LOG_DIR/gc.log.$TODAY \
   -XX:+PrintGCDetails -XX:+PrintGCDateStamps \
   -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=10M"
  local JVM_DUMP="-XX:+HeapDumpOnOutOfMemoryError \
   -XX:HeapDumpPath=$JVM_LOG_DIR/ \
   -XX:ErrorFile=$JVM_LOG_DIR/hs_err_pid%p.log"
  local JVM_OPTS="$JVM_TUNE $JVM_GC_LOG $JVM_DUMP"

  java $JVM_OPTS -jar batch-${VER}.jar
  return 0
}
```

### 参考

* [Java - 見せてやろうJVMが持つ真のチカラを！ JVMのオプションを一覧する方法について。 - Qiita](http://qiita.com/taichi@github/items/7d2bb7d4af7fec8530c3)
* [Javaトラブルに応じた初動対応のまとめ - 見習いプログラミング日記](http://n-agetsuma.hatenablog.com/entry/2014/03/11/205012)
* [Java 7 CMS GCの基本的な情報の整理 - nekop's blog](http://nekop.hatenablog.com/entry/20140327/1395886237)
* [まじめにJVMチューニング: 第1回 まずは現状確認](http://x1.inkenkun.com/archives/367)
nginxでquery parameterを取得する方法は？

昔々、nginxモジュールを作ったときクエリパラメータの取得方法に悩んで作った関数
今はもうちょっとましな方法がありそうだけど、記録として
?callback=xxx で渡ってきたクエリパラメータを取得するサンプル
内部で"arg_"というsuffix付きで保存されているものを取得するといった感じのもの

```c
#define ARG_PARAMETER_CALLBACK "arg_callback"
...
  ngx_str_t *callback = ngx_http_get_arg(r, (u_char *)ARG_PARAMETER_CALLBACK);
...

static ngx_str_t *
ngx_http_get_arg(ngx_http_request_t *r, u_char *name) {
  ngx_http_variable_value_t *vv;
  ngx_str_t  key = {ngx_strlen(name), (u_char *)name};
  u_char    *data;
  ngx_str_t *str;

  str = ngx_pcalloc(r->pool, sizeof(ngx_str_t));

  vv = ngx_http_get_variable(r, &key, ngx_hash_key(key.data, key.len));
  if (vv == NULL || vv->not_found) {
    str->len = 0;
    str->data = (u_char *)"";
    return str;
  }

  data = ngx_pcalloc(r->pool, (vv->len + 1) * sizeof(u_char));
  ngx_cpystrn(data, vv->data, vv->len + 1);

  str->data = data;
  str->len = vv->len;

  ngx_str_null(&key);
  vv->data = NULL;

  return str;
}
```
bigqueryの前処理するには何が良いか

予め断っておくが、答えはない。むしろ質問で、以下の様なニーズを満たすソリューションはないものかと探している。
まあ、bigqueryなどにデータを入れる前に、データを適切な形にする前処理ストの為の適切なツールは何かという問いだ。

## 汚いデータは当たり前

最近[ニコニコデータセット](http://www.nii.ac.jp/cscenter/idr/nico/nico.html)を、BigQueryに入れようとして、悪戦苦闘している。
特にコメントには苦労する。大体この手のユーザーが自由に入力出来る系のデータは、仕様通りにデータは入っていた試しが無い。

例えば、タブ区切りでコメントデータを用意してインポートしたところ次のようなデータが見つかった。

![](http://i.gyazo.com/27745b5d0c21b68900acb4366dec82ee.png)

本来データが入るところに改行記号が大量に入っているそのためパースに失敗し、BigQueryのロードが止まる。
エラーハンドリングを、何万とかに設定してもエラーで止まる。最終的に、エラーが9千万あっても無視するようにしてデータを入れた。

![](http://i.gyazo.com/36e39cb0bb0de153f33f25ba434a826c.png)

## 簡単に前処理がしたい

このような場合に備えて簡単に前処理がしたい。

pythonの擬似コードで書くとこんな感じ

```py
import re
def remove_char(line): #手軽に関数化
   return re.sub('[\n\t]','',line)

lines=read('gs://foo/bar.*.gz') #手軽にデータを読める
lines=[remove_char(l) for l in lines] #大量の処理をするのに上で定義した関数が使える
save(lines,"gs://dest/bar.*.gz") #手軽にデータを書き出せる
```

みたいな感じで、ファイルの分散はよきに計らってくれて、開発者は、ロジックにだけ集中すれば良いようなのがあると良いな。
そういうのどういうのがあるか教えてほしい。

こういうのだったら嬉しい。

* Google Cloud Storage(gcs)のファイルを直接読んで、結果を直接gcsに書き出せる
* 基本的にやりたい処理の部分を書けば後はそのフレームワークが面倒を見てくれる。
* ユーザー独自の関数を簡単に利用できる。上の例でのremove_charみたいな処理が簡単に出来る

googleの今度出す[Google Cloud DataFlow](http://www.atmarkit.co.jp/ait/articles/1406/26/news130.html)がそんな感じだと良いな。
あるいはapache sporkがそんな感じだろうか(gcsがs3だと思うが)。
昔だったらpigを使っていたと思うが、最近はとんと見かけない。
SQLを使っても出来るだろうが、ロジックの部分が綺麗にかけないことが多い。
zshで範囲選択・削除・コピー・切り取りする

# 概要
これは[zsh Advent Calendar 2014](http://qiita.com/advent-calendar/2014/zsh)の9日目のエントリです。

最近zshのコマンドラインで表題の範囲選択とかを出来ることを知りました。で、それ自体は便利なんですが、かゆいところに手が届かない感じだったので自分でwidget（zshのキーバインドに割り当てられる関数みたいなやつ）を書きました。
その内容を共有します。

# 範囲選択
`control+@`か`control+space`でemacsのmarksetライクに範囲選択(`set-mark-command`)が出来ます。入力文字が変わる操作をすると範囲選択モードが終わります。

# 削除
範囲選択した状態で`control+h`とか押したら選択したところ全部消えて欲しいんですけど、いつも通りの1文字削除しかしてくれません。しかも、あろうことか範囲選択したところを（切り取りではなく）削除する機能がデフォルトでないようでした（あれば教えて下さい）
というわけで、

- `control+h`で普段は手前の1文字削除なんだけど範囲選択してたらその範囲を削除
- `control+d`で普段は後ろの1文字削除なんだけど範囲選択してたらその範囲を削除

というのを出来るようwidget書きました。

```zsh
function delete-region() {
    zle kill-region
    CUTBUFFER=$killring[1]
    shift killring
}
zle -N delete-region

function backward-delete-char-or-region() {
    if [ $REGION_ACTIVE -eq 0 ]; then
        zle backward-delete-char
    else
        zle delete-region
    fi
}
zle -N backward-delete-char-or-region

function delete-char-or-list-or-region() {
    if [ $REGION_ACTIVE -eq 0 ]; then
        zle delete-char-or-list
    else
        zle delete-region
    fi
}
zle -N delete-char-or-list-or-region

bindkey "^h" backward-delete-char-or-region
bindkey "^d" delete-char-or-list-or-region
```

# コピー
範囲選択した状態でEscape押してからwを押すと選択範囲をコピー(`copy-region-as-kill`)が出来ます。
oh-my-zshを使っていると、Escape→wが切り取り(`kill-region`)に割り当てられてるので注意。

で、この`copy-region-as-kill`はコピーしても範囲選択状態が続くんですよね。コピーしたら範囲選択は終わってほしいので、これもwidget書きました。

```zsh
function copy-region() {
    zle copy-region-as-kill
    REGION_ACTIVE=0
}
zle -N copy-region
bindkey "^[w" copy-region
```

ちなみに貼り付け(`yank`)は`control+y`です。

# 切り取り
`kill-region`というwidgetが用意されていて、これを呼ぶと選択範囲の切り取りが出来ます。しかしデフォルトではショートカットキーに割り当てられていません。で、単純にこの`kill-region`をてきとうなキーに割り当てても良かったんですが、ちょっと工夫してみました。
Emacsだと`control+w`が、この`kill-region`と同等の機能に割り当てられてます。ですが、zshのデフォルトだと`control+w`は単語切り取りです。
そこで、「普段は単語切り取り。範囲選択状態ならその範囲を切り取り」と言う挙動になるwidgetを書いてみました（と言うか僕のEmacsがそういう風にカスタマイズしてるんで同じにしたかっただけなんですけどね！）

```zsh
function backward-kill-word-or-region() {
    if [ $REGION_ACTIVE -eq 0 ]; then
        zle backward-kill-word
    else
        zle kill-region
    fi
}
zle -N backward-kill-word-or-region
bindkey "^w" backward-kill-word-or-region
```

# 補足
- コードはzshrcに書いて使ってください。
- キーバインド(コードの`bindkey`のところ)は好みで変えてください。
- 手前味噌ですが、以下と組み合わせて使いこなすとかなり便利なので、お試しあれ。
    - [シェルのコマンドライン上で自分の移動したい位置にカーソルを瞬時に移動する方法 - Qiita](http://qiita.com/takc923/items/daf15ee2ace10471f6c8)
    - [zshでよく使うキーバインドまとめ - Qiita](http://qiita.com/takc923/items/08792b7188b5c11e0f21)
- 大したことは書いてないんですが、コードの内容を理解にするには`man zshzle`読むと良いです。
- 動作はver5.0.5で確認してます。
Intel EdisonのFastIOを使う


# 問題の認識
　[第一日目のEdisonアドベントカレンダー](http://qiita.com/yoneken/items/f35848f93ed06d130a5b)では，[MRAAライブラリ](https://github.com/intel-iot-devkit/mraa)を使ってLEDをチカチカ点灯させました．このときのIOアクセスを手段を詳しく見てみると，ポートをファイルデバイスとして[openし](https://github.com/intel-iot-devkit/mraa/blob/master/src/gpio/gpio.c#L411)，[writeで書き込んでいる](https://github.com/intel-iot-devkit/mraa/blob/master/src/gpio/gpio.c#L498)ことがわかります．
　[この方法だとポートの状態を変更するのに19.1[us]ほどかかるのですが，実はもっと早く，変更にかかる時間を0.4[us]ほどまで短縮できる方法があります](https://communities.intel.com/thread/56516)．それが，ポートに対応するメモリを直接叩く方法です．Edisonは，マイコン等とは違いポートが直接メモリにマップされてはいないですが，このアクセス方法は有効なようです．[このへんによる](http://www.eevblog.com/forum/microcontrollers/intel-edison-36841/msg520732/?PHPSESSID=60d2c9b1e82ee0965d112099d79665af#msg520732)と，実際は，100[MHz]で動作しているコプロセッサのQuarkでリアルタイムOSが動作して，IOを担当しているらしいです．そのため，IOはどんなに改善したとしても50[MHz]が限界なのだとか．

# プログラム
```cpp:led_fast.c
#include <stdio.h>
#include <unistd.h>
#include <mraa.h>

int main(int argc, char *argv[])
{
	mraa_init();

	fprintf(stdout, "Hello mraa.\nVersion: %s\n", mraa_get_version());

	mraa_gpio_context gpio;
	gpio = mraa_gpio_init(20);
	if(gpio == NULL){
		return 1;
	}

	mraa_gpio_dir(gpio, MRAA_GPIO_OUT);
	
	// FastIOの指定
	mraa_gpio_use_mmaped(gpio, 1);

	int i;
	for(i=0;i<10;i++){
		mraa_gpio_write(gpio, 1);
		usleep(1000*1000);

		mraa_gpio_write(gpio, 0);
		usleep(1000*1000);
	}

	mraa_gpio_dir(gpio, MRAA_GPIO_IN);

	mraa_deinit();

	return ret;
}
```

$ gcc -lmraa -o led_fast led_fast.c

　[前回のコード](http://qiita.com/yoneken/items/f35848f93ed06d130a5b)と比べても，変わったところは，ポートの入出力を設定した後に， *mraa_gpio_use_mmaped* の関数を呼んでいるところだけです．この関数を呼んでおくと，[mraa_gpio_write関数の中で，自動的にメモリを直接叩くようになります](https://github.com/intel-iot-devkit/mraa/blob/master/src/gpio/gpio.c#L477)．

# 実験
　いつものアクセス方法で叩いた[動画](https://vine.co/v/Ov7WQ51PBEq)．
　メモリを直接叩いたほうの[動画](https://vine.co/v/OvHTb5WU5h5)．

　・・違い，よーわからんですな．．

# まとめ
+ EdisonでFastIOを使うときは，mraa_gpio_use_mmapedを一度呼ぶだけでOK．
Goサーバのデプロイ周辺

# はじめに

この記事は「[Gunosy Advent Calendar 2014](http://qiita.com/advent-calendar/2014/gunosy)」の7日目の記事です。

## おまだれ

Gunosyの小出と申します。主にプロビジョニングとかデプロイを担当してます。
たまにapiとかのコードを書いてます。

# GunosyにおけるGoサーバのデプロイ

※2014/12現在の状況です（今後良い方法があれば変更していくと思います）

## デプロイ全体

Gunosyでは、サーバプロビジョニング・デプロイに、Chefレシピ + AWSの[Opsworks](http://aws.amazon.com/jp/opsworks/)を利用しています。

ざっくりデプロイ手順としては、

* テストが通ればビルド
* バイナリとその他ファイルをtar.gzに固めてS3にupload
* OpsworksでS3からサーバに展開&プロセスマネージャを再起動

といった手順でやっています。

## プロセスマネージャと周辺レシピ

GunosyのGoプロダクトはいくつかありますが、プロセスマネージャとしては、基本的に[einhorn](https://github.com/stripe/einhorn)（または状況に応じて一部supervisor）を利用しています。

いずれの場合も、共通化できるところはなるべく共通化し、ちょいと実行レシピをすげかえればOKみたいな感じにしています。
下記2つのパターンとも、ConfigureとDeployで利用しているCookbook/Recipeは全く一緒のものです。

[このへん](https://github.com/aws/opsworks-cookbooks/blob/release-chef-11.10/rails/recipes/configure.rb)を参考にconfigファイルを作ったり、[このへん](https://github.com/aws/opsworks-cookbooks/tree/release-chef-11.10/unicorn/templates/default)を参考にして、起動/停止スクリプトの配備をしたりしています。

### einhornを利用したサーバの一例

![einhorn.png](https://qiita-image-store.s3.amazonaws.com/0/49173/23f2b548-1fee-b18f-eef9-13c7a8d5b90c.png)

### supervisorを利用したサーバの一例

![supervisor.png](https://qiita-image-store.s3.amazonaws.com/0/49173/f9ba0ab5-06bc-2f38-8077-417010f3477f.png)


# まとめ

> 共通化できるところはなるべく共通化

と、一言で書きましたが、再利用性を高めるために、共通の設定/プロダクト固有の設定の分離や、configファイルの書式・構造の統一、など、結構苦戦しています。

その話はまた別の機会にできたら、と思います。
libPods.aのビルド手順

「pod install」を実行後作成されたxcworkspaceファイルを開いたところ、libPods.aが作成されていなかったため、備忘録ですが libPods.a のビルド手順に関するメモです。

#### ビルド手順
以下、Xcode 6.1.1で操作する前提とします。

##### 手順1. PodsプロジェクトをSchemeに追加する
1. Product > Scheme > Manage Schemes... メニューを選択
2. 表示される画面にて、PodsプロジェクトのShowチェックボックスをONにし、[Close]ボタンをクリック

##### 手順2. Build Locationを設定する
1. Xcode > Preferences... メニューを選択
2. ツールバーの「Locations」を選択し、[Advanced...]ボタンをクリック
3. Build Location の設定で「Custom」を選択し、ラジオボタン横のプルダウンメニューから「Relative to Workspace」を選択
 * Productsは「Build/Products」、Intermediatesは「Build/Intermediates」で自動設定される

##### 手順3. Podsプロジェクトのビルド
1. XcodeのツールバーにあるSchemeポップアップメニューから、「Pods」を選択する
2. 続けて「iOS Device」を選択する
3. Product > Build メニューを選択し、ビルドを実行する

#### 参考URL
http://makotton.com/2014/08/22/404
http://www.shigekitakeguchi.com/archives/1026