OmniAICreator/Qiita-1.07M huggingface dataset:
CUDAもcmakeでコンパイルする



### CUDAのインストール(Fedora)
Fedoraだと[公式](https://developer.nvidia.com/cuda-downloads)でリポジトリ(rpmで配布されている)を取得した後、

```command
yum install cuda
```

で入れると問題が少いと思う。現在(2014/8/21)Fedora20ではCUDA6.5が入る。
rpmfusionのnVidiaドライバーを使用してる場合は`/etc/yum.repos.d/cuda.repo`を書き換えて
標準で無効にしておくと問題が少い。

```:/etc/yum.repos.d/cuda.repo
[cuda]
name=cuda
baseurl=http://developer.download.nvidia.com/compute/cuda/repos/fedora20/x86_64
enabled=0 # 無効化
gpgcheck=1
gpgkey=http://developer.download.nvidia.com/compute/cuda/repos/GPGKEY
```

この場合

```command
yum --enable-repo=cuda install cuda # install
yum --enable-repo=cuda update       # update
```

とする必要がある。

### cmakeでコンパイル
CUDAのコンパイルには`nvcc`を用いる。
nsightを使用したくない場合、cmakeを使えばいろいろ勝手に設定してくれる。

`/usr/local/cuda/samples/0_Simple/vectorAdd/vectorAdd.cu`あたりをとりあえずコピーしてくる。

```
vectorAdd/CMakeLists.txt
          vectorAdd.cu
```

のようになっているとする。この`vectorAdd.cu`をコンパイルする最小のCMakeLists.txtは以下の通りだ：

```cmake:vectorAdd/CMakeLists.txt
cmake_minimum_required(VERSION 2.8)
find_package(CUDA REQUIRED)
cuda_add_executable(vectorAdd vectorAdd.cu)
```

これで

```command
cmake .
make
```

とすれば`vectorAdd`がコンパイルされる。
せっかくなのでバージョン情報等も出してもいいだろう。

```cmake:vectorAdd/CMakeLists.txt
cmake_minimum_required(VERSION 2.8)
find_package(CUDA REQUIRED)
message("-- CUDA --")
message("Version: " ${CUDA_VERSION})
message("Library: " ${CUDA_CUDA_LIBRARY})
message("Runtime: " ${CUDA_CUDART_LIBRARY})
cuda_add_executable(vectorAdd vectorAdd.cu)
```

他のオプションについては

```command
cmake --help-module FindCUDA
```

とすれば見れる。
他のアカウントのS3バケットを利用してみる

![s3-crossacount.png](https://qiita-image-store.s3.amazonaws.com/0/16768/139d3f24-05f1-5d41-43a5-3480404f148f.png)

上記のように、アカウントAからのアカウントB所持のBucketを利用してみるのを、リソースベースのポリシーを利用してやってみた。
今のところアカウントAのManagement ConsoleでアカウントBのBucketを表示して操作はできなさそう。

# ACLでなんとかしてみる

* アカウントAのemail、もしくは以下のようにアカウントAの適当なS3 Bucketからower idを調べておく

```bash
$ aws s3api get-bucket-acl --output text --query 'Owner.ID' --bucket [適当なBucket]
```
* アカウントBのマネージメントコンソールで対象のS3 BucketのPropertiesからPermissionsを設定
 * Permissionを追加し、Ganteeに上で調べた[emailもしくはowner id]を指定して与えたい権限にチェックを入れてSave
* アカウントAで対象のS3 Bucketにアップロードしてみる => 成功
 * アップロードされたオブジェクトはアカウントAに対する権限しかない

```bash
$ aws s3 cp [適当なファイル] s3://[対象のS3 Bucket]/
```

# Bucket Policyでなんとかしてみる

 * アカウントBのマネージメントコンソールで対象のBucketのPilicyを以下のように設定する

```json
{
	"Version": "2008-10-17",
	"Statement": [
		{
			"Effect": "Allow",
			"Principal": {
				"AWS": "arn:aws:iam::[アカウントAのアカウントID]:root"
			},
			"Action": "s3:*",
			"Resource": [
				"arn:aws:s3:::[対象のBucket名]/*",
				"arn:aws:s3:::[対象のBucket名]"
			]
		}
	]
}
```

 * アカウントAで対象のS3 Bucketにアップロードしてみる => 成功
  * アップロードされたオブジェクトはアカウントAに対する権限しかない

```bash
$ aws s3 cp [適当なファイル] s3://[対象のS3 Bucket]/
```

# オブジェクトにアカウントBの権限がつかないのをなんとかしてみる

* 上記どちらの手順でもアップロードしたオブジェクトはアカウントBの権限がなく、アカウントBから閲覧や権限変更ができない(バケットに権限はあるので削除などは可能)
 * Bucket PolicyでアカウントBのアクセスを許可してもオブジェクトのownerとバケットのownerが一致しないため適用されないらしい（[Amazon S3に別アカウントから書き込みを許可する場合の設定 | cloudpack技術情報サイト](http://blog.cloudpack.jp/2014/08/04/allow-other-account-to-write-to-amazon-s3/)参照）


* 一応、以下のようにアップロードするとACLが設定されてアカウントBからも閲覧や権限変更が可能になる。

```bash
$ aws s3 cp --acl bucket-owner-full-control [適当なファイル] s3://[対象のS3 Bucket]/
or
$ aws s3 cp  [適当なファイル] s3://[対象のS3 Bucket]/ --grants full=emailaddress=[アカウントBのe-mail]
```


* 対象のBucketに対して以下のようなBucket PolicyをStatementに追加すると、アカウントBに対してフルコントロール権限を付けることを強制できる
 * が、上記のアップロード例2つのうち後の方しか許さないような形なので柔軟性はないのかな

```json
		{
			"Effect": "Deny",
			"Principal": {
				"AWS": "arn:aws:iam::[アカウントAのアカウントID]:root"
			},
			"Action": "s3:PutObject",
			"Resource": "arn:aws:s3:::[対象のBucket]/*",
			"Condition": {
				"StringNotEquals": {
					"s3:x-amz-grant-full-control": "emailaddress=[アカウントBのe-mail]"
				}
			}
		}

```
PHP5.4と.5.5におけるemptyの挙動の違い


少しハマったのでメモ。PHP5.4と5.5で挙動が違います。カッコ内で代入するときにPHP5.4だとParse errorに、PHP5.5だと正常に動作します。

PHP5.4では

```php:PHP5.4
$ php -v
PHP 5.4.24 (cli) (built: Jan 19 2014 21:32:15)
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies

$ php -r 'empty($test = "test");'

Parse error: parse error, expecting `')'' in Command line code on line 1

```

PHP5.5では

```php:PHP5.5
$ php -v
PHP 5.5.15 (cli) (built: Aug 21 2014 15:44:52)
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.5.0, Copyright (c) 1998-2014 Zend Technologies

$ php -r 'empty($test = "test");'
```

PHPマニュアルを見ると、5.5で挙動が変わってました。5.5では式も評価するようになっています。

[PHPマニュアル](http://php.net/manual/ja/function.empty.php)


![PHP__empty_-_Manual.png](https://qiita-image-store.s3.amazonaws.com/0/14066/73f481ee-7f02-71eb-fb53-fc42436fbf43.png "PHP__empty_-_Manual.png")
文字列から \w と - 以外の文字を排除する方法二題

- `\w` 単語構成文字 `[a-zA-Z0-9_]`

`String#gsub` を使って、不要な文字を空文字に置き換えてしまうのがラクですよね。
#`\w` と `-` 以外の文字クラスを用意する
そして文字列から該当文字を排除する。一番単純な発想（というかお題を考えればコレが真っ先に出る）。

```ruby
phrase.gsub(/[^\w-]/, "")
```
#`\W` から `-` を除去した文字クラスを用意する
`\w` 以外の文字全体の文字クラスが `\W`（`[^a-zA-Z0-9_]`）なので、ここから `-` を排除した文字クラスを作りたい。
##文字クラスの復習
>###文字クラス
文字クラス(character class) とは角括弧 [ と ] で囲まれ、1個以上の文字を列挙したもので、 いずれかの1文字にマッチします。
　：
文字クラス内に別の文字クラスを含めることができます。 `[a-z[0-9]]` は `[a-z0-9]` と同じ意味を持ちます。これだけではあまり意味がありませんが、文字クラスは `&&` という、共通部分を取る演算をサポートしているため、これと組合せることで意味を持ちます。文字クラスでは、否定(`^`)範囲(`-`)共通部分(`&&`)列挙(並べる)という演算が可能ですが、これらは `-` > (列挙) > `&&` > `^` という順の結合強度を持ちます。
文字クラス内の3つのメタ文字を通常の文字の意味で使用したい場合には、 `\` によってエスケープする必要があります。
[正規表現｜るりま](http://rurema.clear-code.com/1.9.3/doc/spec=2fregexp.html)

##共通部分を導出
- `\W` から `-` を除去する
- つまり `-` 以外の文字全体（`[^-]`）と `\W` との共通部分（積）を取る
- 文字クラス内に文字クラスを組み合わせて `[\W&&[^-]]`

```ruby
phrase.gsub(/[\W&&[^-]]/, "")
```
#あとがき
`\W` `\S` `\D` `\H` などの `\w` `\s` `\d` `\h` 以外の文字全体の文字クラスは個人的にほとんど使いません。
しかしなぜか `\W` を使っていた正規表現を元にして変更するときに `&&` を使ったのでメモ書きしました。
でも、大元に立ち返って `\w` から考え直した方が楽そうです。
Backbone.jsでtrigger()を使用した場合のコールバック関数への引数

Backbone.jsを使っていて、trigger()で発火するコールバック関数に引数を渡す際につまづいたのでメモ

#コールバック関数に渡す引数が1つの場合
trigger()を使用する際、コールバック関数へ1つの引数を渡すには

```
var arg = "foo";
obj.$el.trigger("func", arg);
```

→ "foo" がコールバック関数に渡される。

という感じで、第2引数に記述して渡す。

#コールバック関数に渡す引数が2つ以上の場合
これがよくわからなくて、とりあえずどっかの本かサイトで

```
var arg1 = "foo";
var arg2 = "bar";
obj.$el.trigger("func", arg1, arg2);
```

とあったので、やってみたら渡した先でarg2はundefinedとなってしまった。
実際はこうではなく

`obj.$el.trigger("func", [arg1, arg2]);`
とやるのが正しいらしい。というか、普通に公式のリファレンスに載っていた。
また、受け取る先の関数では

```
function callback(arg){
  var arg1 = arg[0];
  var arg2 = arg[1];
  //some code here
}
```

ではなく

```
function callback(arg1, arg2){
  //some code here
}
```

でOKっぽい。
cmakeとgit submoduleで他のプロジェクトを簡単にimportする

複数のプロジェクトで共通して必要なプロジェクトや、
外部のライブラリを使用したいが、システムにインストールしたく無い場合にどうするか。
cmake + gitを用いれば簡単に解決できます。

### Requirements

C++プロジェクトprojに外部のC++プロジェクトsubを使用する場合を例に取って考えます。
上述のように以下の方法を実行するには

- projがcmakeで管理されている事
- proj, subがgitで管理されている事
- subがcmakeで管理されているか、ヘッダのみで構成されているテンプレートライブラリである事

が必要です。

### Procedure

まずgitのリポジトリは

- `yourhost:repos/proj.git`
- `anotherhost:repos/sub.git`

のようになっているとします。各自の環境に合わせて読み替えてください。

アイデアは以下の通りです。

- `git submodule`を使用すれば外部のプロジェクトを取得できる
- cmakeの`include_directories`マクロを使用すれば`git submodule`で取得したライブラリを簡単にincludeできる
- 外部プロジェクトがヘッダだけなら、それらをコンパイルする必要がないからincludeできれば十分
- 外部プロジェクトがcmakeで管理されていればそのツリーを親プロジェクトのツリーに取り込める

よって手順としては、

1. projにおいて`git submodule`によりsubを取得する
2. projの`CMakeLists.txt`に`include_directories`を記述する
3. subがcmake管理の場合は`add_subdirectory`マクロで取り込む

のみです。

### 例

```
proj/CMakeLists.txt
     mod1/CMakeLists.txt
          func1.cpp
          func2.cpp
     main.cpp
     sub/
```

```
sub/mod1/func1.hpp
         func2.hpp
    mod2/func1.hpp
```

のような場合

```cmake:proj/CMakeLists
...
include_directories(.)
...
```

としておけば例えば`mod1/func1.cpp`においてincludeパスを指定する事なく:

```cmake:proj/mod1/CMakeLists.txt
add_library(mod1 STATIC
  func1.cpp
  func2.cpp
)
# -Iは特に指定しなくていい
```

```cpp:proj/mod1/func1.cpp
#include "sub/mod2/func1.hpp"
...
```

のようにincludeする事が可能となります。
適用 vs 適応

理系だからって日本語を間違って使っていいってことにはなりませんよ

**適用**は「一般的な規則や定理を具体的な事例に当てはめること」。他動詞。

例:

* HTML 文書にスタイルシートを適用する
* 関数を値に適用する
  * 「関数に値を適用する」ではない
* クイックソートアルゴリズムを乱数列に適用する
* 修正パッチをプログラムに適用する
* 経営に失敗した企業に会社更生法を適用する

**適応**は「状況に合せて自分自身を変化させること」または「対象と相性がよく効果を発揮すること」。自動詞。

例:

* 最初の意味
  * 企業が市場の変化に適応するために事業戦略を変更する
  * 海から陸に上がった生物が地上の環境に適応する
* 二つ目の意味
  * 挿入ソートアルゴリズムは予めある程度ソートされたデータに適応する
  * 花粉症に適応する薬
rocketeerでdeployする

#インストール
###composerインストール
```bash
curl -sS https://getcomposer.org/installer | php
```
composer.pharをパスが通っているディレクトリに移動します。

```bash
mv composer.phar /usr/local/bin/composer
```

rocketeerを配置したいディレクトリに移動します。
下記コマンドを実行します。

```bash
composer require anahkiasen/rocketeer:dev-master
```
カレントディレクトリ配下に、vendorというディレクトリが配置されています。
vendor/bin/rocketeer ファイルが出来上がっていればOKです。

#初期設定を行う
```bash
 ./rocketeer ignite
```

いくつか質問されますが、すべてEnterキーを押していきます。
実行したディレクトリ配下に、.rocketeer というディレクトリが作成されます。

#設定ファイルを変更する
.rocketeerディレクトリに移動し、設定ファイルを編集していきます。

```bash
cd .rocketeer
ls
config.php  hooks.php  logs  paths.php  remote.php  scm.php  stages.php
```

#リポジトリ情報の設定を行います。

```bash
vi scm.php
変更箇所は、下記です。
'repository' => 'リポジトリURL',
リポジトリアクセスに認証が必要であれば、こちらを設定します。
'username'   => 'ユーザ名',
'password'   => 'パスワード',
こちらも必要に応じて変更してください。
'branch'     => 'master',
```

#デプロイ先サーバの設定を行います。

```bash
vi config.php
今回は、productionをそのまま利用します。
ホストや、対象サーバへログインするための情報を設定します。
'production' => array(
   'host'      => '',
   'username'  => '',
   'password'  => '',
   'key'       => '',
   'keyphrase' => '',
   'agent'     => '',
),
```

#デプロイ先のディレクトリを指定します

```bash
vi remote.php
変更箇所は、
'root_directory'   => '/var/www/',
'app_directory' => 'AppName',
```

その他パーミッション設定等もありますが、今回は単純にデプロイのみの説明です。

#実際にデプロイしてみる

```bash
cd vendor/bin
./rocketeer deploy
```

#確認する
対象サーバにリポジトリから取得したファイルが展開されていればOKです。
下記のようにcurrentというのがシンボリックリンクで作成されます。

```bash
current -> /var/www/AppName/releases/20140821142320
```

#トラブルシューティング系
リポジトリサーバに、オレオレ証明書を利用していたりする場合(httpsでリポジトリアクセス）
には、デプロイ対象サーバ側に、.gitconfigを配置し、

```bash
[http]
　　　sslverify = false
```
としておかないと、リポジトリにアクセスできず、エラーとなります。
IRC+HubotをDockerでサクッと試す

Dockerで立てたIRCに、Dockerで立てたHubotを常駐させますよ、という話

## コンテナの相互関係

```
+---------------------+
|goldeneggg/centos    |
| +------------------------+
+-| goldeneggg/centos-ngircd     +-----------------------------+
  |                        <-----+   goldeneggg/hubot-irc      |
  +------------------------+     |                             |
                                 |                             |-+
                                 +-----------------------------+ |
                                    | goldeneggg/hubot           |-+
                                    +----------------------------+ |
                                        |dockerfile/nodejs         |
                                        +--------------------------+
```

### IRCサーバー (=ngircd)
* [拙作](http://qiita.com/jpshadowapps/items/6333c0b4850a03f12c51) を使用

### Hubot
* [goldeneggg/hubot Repository | Docker Hub Registry - Repositories of Docker Images](https://registry.hub.docker.com/u/goldeneggg/hubot/)
* node.jsが必要
    * 公式で公開されている [dockerfile/nodejs Repository | Docker Hub Registry - Repositories of Docker Images](https://registry.hub.docker.com/u/dockerfile/nodejs/) をベースコンテナとして使用した 
* 元々hubot & hubot-irc で1つのコンテナにしようとしていたが、hubotが様々なチャットツールに対応しているメリットを活かす為、分けることにした
    * （が、このあたりはどういう構成にするのがイケてるのかまだ自信が無いです）
* hubot-ircと分けたので、hubotコンテナでやる事は以下のステップまで
    * coffeescriptとhubotをインストール(npm install)
    * redis-serverをインストール・起動
    * テスト用のbotをcreate

### hubot-irc
* [goldeneggg/hubot-irc Repository | Docker Hub Registry - Repositories of Docker Images](https://registry.hub.docker.com/u/goldeneggg/hubot-irc/)
* 上記のhubotコンテナをベースコンテナとして使用
* このコンテナでやること
    * hubot-ircをインストール(npm install)
    * hubot-ircで必要な環境変数の設定
        * `HUBOT_IRC_NICK`
        * `HUBOT_IRC_UNFLOOD`
        * ※ `HUBOT_IRC_SERVER `, `HUBOT_IRC_ROOMS`の2つも必要だが、IRCの実行状態に依存するので`docker run -e <ENV>`で指定することにした
    * 上記hubotコンテナで作成したbotをircモードで起動
* ※ irc以外のアダプタを追加したい場合は、接続先だけircから変更して同じような構成をコンテナを作成すれば良い（と思う）

## 実行＆動作確認

* ircサーバーを起動する
    * デフォルトで `#Test`というチャンネルを用意している

```bash
$ docker pull goldeneggg/centos-ngircd
$ docker run -t -d -p 6667:6667 goldeneggg/centos-ngircd
```

* 任意のircクライアントでircに接続する
    * サーバー : コンテナが動いてるホストマシンのIP/ホスト名
    * ポート : 6667
    * チャンネル : `#Test`
* ircコンテナのipアドレスを確認する

```bash
$ docker inspect <IRC_CONTAINER_ID> | grep IPAddress

        "IPAddress": "172.17.0.46",
```

* hubotをircにjoinさせる

```bash
$ docker pull goldeneggg/hubot-irc
$ docker run -e HUBOT_IRC_SERVER=<ircコンテナのIPアドレス> -e HUBOT_IRC_ROOMS=#Test \
  -t -d goldeneggg/hubot-irc
```

* hubotの動作状況を`ping`で動作確認 => `PONG`が返ってくればOK

```
> @hubot ping
PONG
```

* 追加した独自scriptの動作確認。`sushi`という文字列に反応してネタを返す

```
> sushi
はまち
```
Jenkinsのジョブの説明でHTMLを使う設定

# はじめに
* 新しいJenkinsをインストールして、ジョブの説明をHTMLで書いてやろうと思ったらデフォルトでは対応していなかった
* 数年前の自分はどこかで調べて設定してたのだろう...
* また、忘れるかもしれないのでメモメモ


# どういうときに便利なの？
* ジョブの説明や実行したビルドの説明のメモがHTMLでかけるから便利なのです
* マークダウンではないのでHTMLにある程度なれていれば、誰でも書き方を調べることなく使える
* 色付けしたり、簡単なリストを書いてみたり、リンクをつけたり...

# やること
* Jenkinsのダッシュボードから[Jenkinsの管理]▶︎[グローバルセキュリティの設定]を開き、**マークアップ記法** で**Raw HTML**を選択する
* ただそれだけなんです
* てっきりプラグインかとおもったけど違いました

# Markdown派な方へ
* [PegDown Formatter Plugin](https://wiki.jenkins-ci.org/display/JENKINS/PegDown+Formatter+Plugin)をインストール後、**マークアップ記法** で**PegDown**を選択すればPegdownが使えるようになります

# ～ただの宣伝～
* [全国のSeleniumer必読](http://qiita.com/oh_rusty_nail/items/b8ba525d31ea7c522856)
* Seleniumerといっていますが、Selenium, SauceLabs, Travis, Jenkinsに関するノウハウ書いているのでよかったら参考にしてみてください
リモートのGitブランチをローカルブランチに落とす

# リモートのGitブランチをローカルブランチに落とす

リモートブランチにどんなブランチがあるかを確認する。
gitの-aオプションでリモートブランチも一覧取得できる。

```bash
$ git branch -a
```

ローカルブランチ名を指定してリモートブランチを引っ張ってくる。

```bash
$ git checkout -b local_branch origin/remote_branch
```

-bオプションでブランチを作りながらチェックアウトする。
originとは、リモートの意味
TurbolinksでYouTube iframe APIを使う


## やりたいこと
Railsで、YouTube iframe APIを使って動画埋め込みで表示している。ページ遷移すると、YouTubeの埋め込みがロードされない。

## やったこと

```onYouTubeIframeAPIReady``` を page:load 内に加えることで解決した。


## 参考

- [javascript - Can Youtube play nicely with Turbolinks? - Stack Overflow](http://stackoverflow.com/questions/18751904/can-youtube-play-nicely-with-turbolinks)

	- この中で紹介されているコードを使うとうまくいった。
10.10を消して10.9を入れる

リカバリーも何もない状態の場合を想定。

# 手順

1. 10.10が入っているmacを、Linuxのusbブート。
1. 自分はarchlinuxのisoをusbにddで書き込んで起動させた。
1. Diskのパーティションを削除。
1. 電源を落としてoptionキー押しながら起動。
1. 無線LANの接続を行い少し待つとインターネットリカバリーの項目が出るので選択。
1. ディスクユーティリティでパーティション作成
1. 購入時期によって10.8などが入る。
1. 10.9に更新すればよい。

# インストール後に行ういつもの設定


[Mac OS Xの隠し設定をこじあけるターミナルコマンド19 ｜ ライフハッカー［日本版］](http://www.lifehacker.jp/2013/12/131217mac_terminal.html)

> （12）起動時のチャイム音を消す

```bash:
sudo nvram SystemAudioVolume=%80
```

> （15）ウィンドウアニメーションをオフにして古いMacをスピードアップする

```bash:
defaults write NSGlobalDomain NSAutomaticWindowAnimationsEnabled -bool false
```

[Macで.DS_Storeファイルを作らない方法&削除ツール | BLANCBOOTH](http://blancbooth.com/archives/62)

```bash:
defaults write com.apple.desktopservices DSDontWriteNetworkStores true
```

## dmgマウント時のチェックをなくす

![スクリーンショット 2014-08-21 20.46.58.png](https://qiita-image-store.s3.amazonaws.com/0/25728/bb6c632d-4a87-c163-ea00-4b661fc76b3d.png)
Posting comment programatically in activeadmin

seems no internal interface to post a comment but it can be done by just creating comment object directly.

```
      comment = ActiveAdmin::Comment.new(
        resource_id: id,
        resource_type: 'Post',
        namespace: active_admin_config.namespace.name                      
      )
      comment.author = current_active_admin_user                                 
      comment.body = "I am robot and proud <a href='http://robotandproud.com/'>check</a> this out."
      comment.save
```
初めてのiOSアプリケーションをswiftに書き換えてみた

初めてのiOSアプリケーションをSwiftに書き換えてみました。

Objective-Cはほとんどわからないのであってるか不安ですが
動いているのでとりあえずGithubへ。

https://github.com/bnrh29/iPhone101-swift

時間があれば２つ目のiOSアプリケーションも書き換えてみようと思います。
java.lang.UnsatisfiedLinkErrorで怒られた時にやったこと



```cpp:
E/AndroidRuntime(32748): java.lang.UnsatisfiedLinkError: Native method not found: org.cocos2dx.lib.Cocos2dxHelper.nativeSetApkPath:(Ljava/lang/String;)V
```
Eclipseが怒るにはjniが見つかりませんのエラーのようです。
しかし、Cocos2dxHelper内に行くと最初に触っているNativeのJNIがこいつっぽいのでこのメソッドだからでは無い様子。

ひょっとすると本来必要なものが呼ばれていないのではとパスをごちゃごちゃいじるも解決せず。

解決方法はAndroidManifest.xml内を次のようにすることでした。

```xml:
         <meta-data android:name="android.app.lib_name"
                       android:value="cocos2dcpp" />
        <activity android:name="org.cocos2dx.cpp.AppActivity"
                  android:label="@string/app_name"
                  android:screenOrientation="portrait"
                  android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
                  android:configChanges="orientation">
```

AppActivityが継承するCocos2dxActivityないから呼んでいるこのnativeSetApkPathがないということは、本来あるべきcppから生成されるバイナリが見つからないということなので、このAppActivityより前に"かつapplicationタグ内に"この宣言されていないと見えていないということでした。

たくさんのライブラリーにリンクさせてManifestをいじるとよくmeta-dataの場所を動かしたりするので、こういうことには注意しなければなりません。
Node.jsでもSpy-jsを使ってみる

WebStorm 8とSpy-jsによるJavaScriptのトレースについては[こちら]( http://qiita.com/laco0416/items/985044f0019ebef6cb2c)ですでに解説しましたので、今度は噂のWebStorm 9の新機能、「Spy-js for Node.js」を試してみようと思います。と言ってもほとんどやることは変わらず、Webアプリケーションの方で出来たことがNode.jsでも出来るよというだけのことです。

この記事の作成にあたっては[WebStorm公式ブログ](http://blog.jetbrains.com/webstorm/2014/08/tracing-debugging-and-profiling-node-js-with-spy-js/)を参考にしました。

※この解説で使用したWebStormは **WebStorm 9 EAP WS-138.1495**です。正式アップデートに向けて今後変更される可能性もあるので注意してください。また、WebStorm 9 EAPの使用も自己責任でお願いします。

# サンプルプロジェクトを作る
今度はNode.jsのアプリケーションを作るので、簡単に済ませるために新規プロジェクトを「Node.js Express App」で作成しましょう。「Express」というのはNode.jsのウェブアプリケーションフレームワークです。

プロジェクトを作成したらまずは一度実行してちゃんと動くか試してみましょう。デフォルトではlocalhostの3000番ポートでExpressが立ち上がっているはずです。

![Imgur](http://i.imgur.com/qEwt07y.png)

# 実行構成を作る
ちゃんと動くのを確認したところで、Spy-jsを使う準備をしましょう。一旦Runウィンドウからプログラムを停止して、「Run」>「Edit Configurations」から実行構成ダイアログを開きます。「+」ボタンから「Spy-js for Node.js」を選択してください。実行するJavaScriptファイルは先ほど実行したNode.jsと同じように「bin/www」を指定します。

![Imgur](http://i.imgur.com/6DzIVmL.png)

# 実行してみる
それでは作った実行構成を使ってみましょう。実行するとRunウィンドウが表示され、早速サーバー側のイベントが表示されるはずです。先ほどと同じようにlocalhostの3000番ポートにアクセスするとページが表示され、Spy-js側にもたくさんイベントが発生しているのがわかると思います。

![Imgur](http://i.imgur.com/GkS1xez.png)

たくさんあるイベントのうち、「fs.stat」の実行時間が長い方を開いてください。これがExpressとブラウザの応答の主な処理を行っているイベントです。先頭に「send」というファイルのメソッドがあり、展開するととんでもない数と深さになっていると思います。実はこれはほとんどがExpressのnode_module内のスクリプトファイル由来のもので、特に見たいものではありません。なのでフィルタリングをしてみましょう。Runウィンドウの左上にある漏斗のボタンを押して、「Edit Capture Exclusions」を選択します。下の画像のように、node_moduleの中の関数は除外するように設定して、もう一度Spy-jsを実行しなおしてみましょう。するとfs.statsイベントは消えて、「SendStream.error」というイベントに変わっているはずです。これを開き直すと、自分のプロジェクトの「routes/index.js」ファイルが先頭にきています。

![Imgur](http://i.imgur.com/ntH3ZgD.png)

 トレースされているindex.jsの無名関数はURLのルーティングを行う関数で、リクエストとレスポンスが引数に渡されているのでここでチェックすることができます。

![Imgur](http://i.imgur.com/6zbryYl.png)

# おまけ
ここまでSpy-jsを使ってきましたが、トレース結果のソースに緑色のハイライトがかかっているのには気づいていますよね？これは実際に実行されたコードを色付けしています。それがよく分かる例を試してみましょう。

プロジェクト内の「routes/index.js」を次のように書き換えます。

```js:index.js
var express = require('express');
var router = express.Router();

/* GET home page. */
router.get('/', function (req, res) {
  var i = Math.round(Math.random());
  if (i == 0) {
    res.render('index', {title: 'Express 0'});
  }
  else{
    res.render('index', {title: 'Express 1'});
  }
});

module.exports = router;
```

ランダムにページのタイトルが変わるようにしてみました。これでSpy-jsを実行して、さっきと同じように「SendStream.error」イベントを見てみましょう。ifの分岐のどちらに進んだのか、緑色のハイライトで一目瞭然ですね。ここで乱数の値iが読めないのは[前回](http://qiita.com/laco0416/items/985044f0019ebef6cb2c)のWebアプリケーションのSpy-jsのほうで述べたとおりです。

![Imgur](http://i.imgur.com/FNEB9Ji.png)
Cordovaを使ったiOSアプリでvideoタグをインライン再生

config.xmlに以下追加

```lang:XML
<preference name="AllowInlineMediaPlayback" value="true"/>
```

videoタグに以下のようにwebkit-playsinlineというattributeを追加

```lang:HTML
<video src="sample.mp4" webkit-playsinline="1"></video>
```
Android バッテリー消費回避策

CyanogenModベースROMで待機時のバッテリ消費が激しい場合の緩和策。
Google Play開発者サービスに関するものなのでCM以外でも効果があるかもしれない。
何回も英語を見るのが億劫なので日本語でまとめておく。
ソースに画像があるのでそれも見ながらやると分かりやすいかもしれない。
※一部、２．にてプロセスの絞り込みの部分で「全体」に変更（CM10だとシステム内に無かったため）

ソース： http://forum.xda-developers.com/oneplus-one/general/guide-google-play-services-battery-t2832525

筆者ROM：LiquidSmooth 3.2


1. Android標準の「設定」にて
-

「設定」→「セキュリティ(orプライバシー)」→「Privacy Guard」

右上のメニューボタン又は端末のメニューボタンを押して「Show Built-In Apps」にチェックを入れる。

「Google Play Services」の「location以外」をOFFにする。


2. Android Tunerでの設定
-

上記でも減るようなら、 Android Tuner(要root権限）を入れて下記設定を行う。

1. 起動して左上のボタンを押す、もしくは右方向にスワイプしてメニューを出す
2. 「アプリスタートアップとイベント」を開く
3. タイプを「全て」にする
4. 画面下部右のボタンを押して「全体…」にする
5. 中から「Google Play開発者サービス」を選択
6. 下の方にある「WAKEUP」のチェックを外す。
7. 再度スワイプメニューを出して「アプリ」を選択
8. 最下部真ん中のボタンを押して「全体…」にする
9. 中から「Google Play開発者サービス」を「開く」→「詳細」
10. 「サービス」タブを選択
11. 下記項目のチェックを外す(カッコ内は個数)

analytics.* (4)
ads.* (4)
com.google.android.location.reporting.* (8)
goをソースからコンパイルしてgodocが見つからない

# 概要

goをソースからコンパイルしたときに「godocが見つからないよー」というのを何回か繰り返したので忘備録．

# 別途インストールする

1.2 から go.tools に移行したらしい．http://golang.org/doc/go1.2#go_tools_godoc
別途インストールする．

```
$ go get code.google.com/p/go.tools/cmd/godoc
```
Hibernateでleft joinを行おうとした際に重複したインスタンスが現れる対処法

下記のソースだと、Hibernateでleft joinして、取得したリストの要素が重複していた。

```java
StringBuffer hql = new StringBuffer("");
hql.append(" from Cat as cat left outer join cat.mate as mat ");

Session currentSession = getHibernateTemplate().getSessionFactory().getCurrentSession();
Query query = currentSession.createQuery(new String(hql));

List<Cat> cats = query.list(); // 重複した要素が取得される。
return cats;
```

下記のようにHQLの先頭のselectにdistinctをつけると良いみたい。

```java
StringBuffer hql = new StringBuffer(" select distinct cat "); // distinctをつける。
hql.append(" from Cat as cat left outer join cat.mate as mat ");

Session currentSession = getHibernateTemplate().getSessionFactory().getCurrentSession();
Query query = currentSession.createQuery(new String(hql));

List<Cat> cats = query.list();
return cats;
```

ちなみにCtiteriaで作成しているときは

```java
criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
```
を指定すると良いみたい。

参考URL
http://stackoverflow.com/questions/14056457/left-join-fetching-duplication
MySQL tips


####FIND_IN_SET
```sql
select * from repositories
where FIND_IN_SET("keyword", tags)
```

####Case Sensitive

```sql
select * from table where content LIKE BINARY'%SEARCH%';
```

####OS X : mySql cmd
```OSX
 sudo /usr/local/mysql/support-files/mysql.server start
 
 sudo /usr/local/mysql/support-files/mysql.server stop
 
 sudo /usr/local/mysql/support-files/mysql.server restart
```
ActiveRecordを高速化するAdequateRecordは何をするものか

# TL;DR

- AdequateRecordはActiveRecordの機能の名前
    - 新しいgemとかでは無い
- `#find` `#find_by` そして `#find_by_XXX`を2倍に高速化する

    > ![finder_ips.png](https://qiita-image-store.s3.amazonaws.com/0/153/b825adad-399f-f3fa-48d5-912c6e7f7ce9.png)
    > 引用: [AdequateRecord Pro™: Like ActiveRecord, but more adequate | Tenderlovemaking](http://tenderlovemaking.com/2014/02/19/adequaterecord-pro-like-activerecord.html)

- 内部的にはクエリ呼び出しの度にActiveRecordが生成するオブジェクトをキャッシュする
    - 対象を`#find`などに限っているのは、生成されるオブジェクトや条件が単純だから

# Rails 4.2.0 beta1 リリース

先日Rails 4.2.0 beta1がリリースされて、そのリリースブログの中にAdequate Recordなるものが

## ActiveRecordの動作

ActiveRecordの`#where`などを使ってDBからレコードを引っ張ってくる場合、中ではだいたいこんなことが起きる（らしい）

1. `ActiveRecord::Relation`が構築される
    - `#where`とか`#order`とかの呼び出され方とかを記憶してる
2. そこから`ARel::Node`を作る
    - DBMSに寄らない抽象構文木(AST)
    - ArelはSQL ASTを扱うためのRubyライブラリらしい
3. SQL文字列を作ってDBに渡す
4. 返ってきたレコードからインスタンスを生成

## AdequateRecordがやること（推測）

`#find` `#find_by` `#find_by_XXX`の3つの形式の呼び出しを行った時に、最初の一回目だけ`ActiveRecord::Relation`を作って、それ以降はそこを経由せずに直接`ARel::Node`にいく。
`ARel::Node`自体をキャッシュしているのか、それの作り方をキャッシュしているのかは知らない。

`#where`に適応されないのは、取りうる場合の数が非常に多いため。それと`#where`や`#order`はメソッドチェインして使うので、どうしても`ActiveRecord::Relation`を作らざるを得ない。一方、`#find`系メソッドは返り値がモデルインスタンスなので、それ以上`ActiveRecord::Relation`に対して変更を加えないことが分かるので、それの生成をスキップできる。

## 感想

インタフェースへの変更無しにパフォーマンスが改善されるのは非常に嬉しい。
ベンチマークを見る限り`ActiveRecord::Relation`の生成がそもそも重たいっぽいので、そちら側のパフォーマンス改善にも期待したい。

# 参考

- [Riding Rails: Rails 4.2.0 beta1: Active Job, Deliver Later, Adequate Record, Web Console
](http://weblog.rubyonrails.org/2014/8/20/Rails-4-2-beta1/)
- [AdequateRecord Pro™: Like ActiveRecord, but more adequate | Tenderlovemaking](http://tenderlovemaking.com/2014/02/19/adequaterecord-pro-like-activerecord.html)
Visual Studio Onlineで、Pull Requestを行う方法

Visual Studio Onlineで、リポジトリをGitに選択した場合には、GithubのようにPull Requestを使った開発フローを行うことができます。
##新規ブランチを作成
チームエクスプローラーの分岐ボタンをクリックして、新規ブランチを作成します。直訳すると分岐で合ってるのでしょうけど、ブランチとカタカナで書いてあった方が分かりやすいですよね。
![新規分岐作成.png](https://qiita-image-store.s3.amazonaws.com/0/7839/eaa5fa45-feb7-afb8-0d13-31cb50aca2a2.png)

ブランチを作成すると「発行されていない分岐」というリストの中に、ブランチが入ります。はじめどんな状態なのか分からなかったのですが、「リモートリポジトリにプッシュされていないブランチ」という意味のようです。
![発行されていない分岐.png](https://qiita-image-store.s3.amazonaws.com/0/7839/20eec578-1914-8afa-ca71-bdf6235160eb.png)

##リポジトリをリモートへ上げる
ローカルリポジトリにしか存在しないブランチをプッシュするには、右クリックメニューの中の「分岐の発行」を選択します。慣れもあるのでしょうが、プッシュ機能では、新しいブランチをリモートへ同期させることは出来ないため少々戸惑うポイントです。作成直後でも「分岐の発行」は行えますので、後々Pull Requestするつもりがあるブランチなら発行してしまいましょう。
![分岐の発行.png](https://qiita-image-store.s3.amazonaws.com/0/7839/157c51d5-97f6-c0a6-5548-594c5ea70dc7.png)

##Webでブランチの確認
Visual Studio Onlineで確認するとブランチが共有されているのが確認できます。残念ながらGitlabのように、masterブランチに、特定のメンバーがだけがコミットできるようにロックを掛けるような機能はまだ無いようです。
![ブランチの共有.png](https://qiita-image-store.s3.amazonaws.com/0/7839/9ee79029-37af-dc34-4c06-edf8577fc227.png)

##プルリクエストを行う
masterから分岐したブランチをプッシュしたので、エラーが表示されていますが、New Pull Requestをクリックして、ブランチ名を選択すれば、Pull Requestをすることができます。
リクエストを受けた方は、コードへコメントを入れて、差し戻すことも可能なので、コードレビューとしても使うことが可能です。
![プルリクエスト.png](https://qiita-image-store.s3.amazonaws.com/0/7839/d21d0345-b6f2-da58-5270-de89aad24f12.png)

かなりGithubやGitlabに近い開発フローが実現できそうです。
Sova WP のご紹介


# Sova WP のご紹介
WordPressをはじめたいとか、運用してる方向けのお話です。
サーバーの知識とかはそんなになくても大丈夫です。

* WordPress をはじめたいけどサーバーとかどうしたらいいんだろう？
* WordPress を運用してるけど、なんか重いよ？

そんなときにおすすめしたいサーバーです。

## Sova WP とは？

WoredPress専用のクラウドサーバーです。詳しいスペックとかは下記を御覧いただければと思います。

http://wp.sova.jp

特筆すべきは、「とにかく高速、もしくは高速にするためのチューニングが簡単に行える」というところかた思います。
また、バックアップや、セキュリティ面でも安心です。

普通のレンタルサーバー（WordPress専用じゃない）で、ここまでのことをやろうとすると、そこそこ難しいです。技術的にもそうですが、運用フローなども考えなければいけません。
もちろん、どちらにもいい面があるとは思いますが、もう、WordPressしか動かさないとか、とにかく手軽に始めたいとかっていう場面では、Sova WP はとてもいい選択肢かと思います。

## ランニングコストは？
下記がプラン一覧です。

https://admin.sova.sg/ja/plans

「スモール」をみてみますと、1,980/月となってますね。（2014.08.21現在）
最近のレンタルサーバーとかと比較すると値段の割に、ディスク容量が〜とか思うかもしれませんが、
普通のレンタルサーバーですと、メール機能だったり、ウィルススキャンだったりとか、もしかしたらあっても使わないって機能がいっぱいセットになってますよね。
Sova WP の場合は、料金をすべて WordPress を快適に運用するために支払うといった感じでしょうか。余計なものがない。
はじめから WordPress しか動かさないっていうことであれば、対価に見合う最高の環境かと思います。

## 試用できる？
ある程度（といっても相当の）のアクセスが見込めるというのであれば、「スモール」や「ミディアム」をお試しではじめるといいかもしれません。
新規ということで、「フリー」プランがあります。
いずれにしろ、フローは同じかと思いますので、「フリー」を例に紹介していきたいと思います。

### 順番待ちに並ぶ

![Sova_-_Vending_Machine_for__Tuned__Software.png](https://qiita-image-store.s3.amazonaws.com/0/41589/9a5ca1e0-c772-94eb-4a97-eaec7cfe242e.png "Sova_-_Vending_Machine_for__Tuned__Software.png")

### アカウント登録

![Sova_-_Vending_Machine_for__Tuned__Software.png](https://qiita-image-store.s3.amazonaws.com/0/41589/c95304d1-0aad-d357-cd21-2af594805f80.png "Sova_-_Vending_Machine_for__Tuned__Software.png")

必要な情報を入力してアカウントを作成します。

ログインして、再度順番待ちに並ぶ感じですかね。

だいたい、数日間で招待メールが届くかと思います。

次回は、セットアップ項目をご紹介したいと思います。

[Sova WP のご紹介つづき](http://qiita.com/kobayash/items/e7366d90ee1c63213cec)
WebStorm+Spy-jsの使い方

WebStorm9のEAPが始まり、目玉機能の一つに「Spy-jsのNode.jsトレース」が掲げられていますが「そもそもSpy-jsって何なの？」っていう方も多いと思いますので、今更ですがWebStorm8のSpy-jsと使い方をおさらいしておこうと思います。

なお、この記事の内容は[WebStorm公式ブログ](http://blog.jetbrains.com/webstorm/2014/04/spy-js-webstorm-secret-service/)を参考にしました。動画もあるのでぜひご一読ください。

# Spy-jsとは？
[Spy-js](http://spy-js.com/)はJavaScriptの **トレース**、**デバッグ**、 **プロファイリング**の3つの機能から構成されるツールです。Spy-jsはWebStorm, PhpStorm, RubyMine, PyCharm(Professional), IntelliJ IDEA(Ultimate)にバンドルされていますが、スタンドアロンで動くものも配布されています。WebStorm8ではWebアプリケーションだけですが、WebStorm9ではNode.jsのサーバーアプリケーションに対しても使えるようになります。

## トレース
Spy-jsのトレース機能は「console.log無しでコードを追いかける」ことが可能です。ブラウザ依存性がなくなり、あらゆるプラットフォーム、デバイス、ブラウザで、イベントの発生タイミングや、ユニットテストの実行などが行えるようになります。

## デバッグ
Spy-jsでは、トレースした時点での引数の値を見ることが出来ます。つまり、「ブレークポイントなしでデバッグ」が行えます。また、Spy-jsからソースコードへジャンプするのも簡単です。

## プロファイリング
イベントで呼び出された関数がどれだけの時間を使ったかをSpy-jsが表示してくれるので、アプリケーションの高速化、最適化に大活躍です。

実際に使ってみないとこの強力さは実感できないと思うので、これから簡単なデモアプリで試してみましょう。

# Spy-jsを試してみよう
それではお手元のWebStorm8を起動してください。適当にEmpty projectを作ってこんな感じのHTMLとJSを書きます。アプリケーション側でSpy-jsを意識する必要はありません。

```html:index.html
<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
</head>
<body>
<div>
    <input id="input" type="text"/>
    <button onclick="onClick()">Click</button>
    <h4 id="label"></h4>
</div>
<script src="app.js"></script>
</body>
</html>
```

```js:app.js
function onClick() {
  var input = document.getElementById("input");
  setLabel(input.value);
}

function setLabel(text){
  var label = document.getElementById("label");
  label.innerHTML = text;
}
```

## 実行構成を作る
WebStormで「Run」>「Edit Configurations」をクリックしてください。出てくる実行構成ダイアログの左上に「+」ボタンがあるのでクリックして、下の方にある「Spy-js」を選択します。
適当に名前をつけて、「URL to trace」にトレースするページのURLを入力します。プロジェクト内のHTMLであれば右側のドロップダウンリストから、自動的にWebStormの開発サーバー上で立ち上げられるURLを選択できます。

![Imgur](http://i.imgur.com/KNqJhf9.png)

## 実行する
実行構成が出来たら早速実行しましょう。実行するとRunウィンドウが下のペインに開くので、index.htmlをブラウザでプレビューしましょう。ご存知かとは思いますがHTMLのプレビューはindex.htmlをエディタで開き、右上に出てくるブラウザのアイコンをクリックです。

ブラウザの右上にスパイのアイコンが浮かんだら接続成功です。一度でうまくいかないことが多々あるのでその時はリロードしてください。

![spyjs_anim.gif](https://qiita-image-store.s3.amazonaws.com/0/20253/25dbf1d9-cd18-beac-9c9f-9b51bfdf7d0a.gif)

接続したらRunウィンドウにさっそくトレース結果が表示されているはずです。「script app　0.242ms」は「scriptタグでapp.jsを読み込むのに0.242msかかった」という意味です。クリックすると呼び出しの内訳が右側に表示されます。「app global scope 0.242ms」と表示されているのは、「app.jsのグローバルスコープの実行に0.242msかかった」というプロファイリング結果です。その右側には実行時の変数の値が表示されています。

![Imgur](http://i.imgur.com/oodpu2J.png)

それでは本番です。input要素に適当に文字を入力して、ボタンをクリックしてみましょう。トレース結果に「click」イベントが表示されるはずです。内訳には「onClick」と、そこから呼び出される「setLabel」が表示されています。

「setLabel」をダブルクリックするとソースコードにジャンプして呼び出された関数が見れます。さらに引数にマウスを乗せるとその時の値が確認できます。Runウィンドウの右側にも同じものが表示されていますね。残念ながらローカル変数にアクセスすることは出来ないのですが、デバッグが必要な値はそもそもローカル変数にするなという気もします。きちんと関数が分離されていれば必要な値はブレークポイント無しでもスパイが見ていてくれます。

![Imgur](http://i.imgur.com/u5hwnT2.png)

ところで、もう一度ボタンをクリックしてみると、「click」イベントが **x2**となりますね。同じイベントのトレースは自動でグルーピングされ、表示される実行時間はグループ内の平均値になります。簡易的なベンチマークのように使ってもいいですね。

また、「click」を右クリックすると、「click」イベントをミュートする（トレース対象から外す）ことや、逆に「click」イベントだけをキャプチャすることが可能です。

# もっと詳しく知りたい方は
Spy-jsの詳しいドキュメントは[GitHub](https://github.com/spy-js/spy-js)に書かれています。Spy-jsが動く仕組みや、もっと詳しい使い方について知りたい方はぜひ御覧ください。
MongoDBコマンド集（ユーザ操作）

## ユーザ一覧

```
db.system.users.find()
```

## ユーザ作成

#### 1. 認証モードをOFFにしておく

`/etc/mongod.conf`

```
noauth=true
# auth=true
```

#### 2. ユーザを作成する

ユーザはデータベースごとに作成する。adminデータベースで作成されたユーザは管理者となる。

**管理者ユーザの作成**

```bash
$ mongo
> use admin

# すべてのデータベースの管理者権限をもつユーザの作成
> db.createUser(
  {
    user: "ユーザ名",
    pwd: "パスワード",
    roles:
    [
      {
        role: "userAdminAnyDatabase",
        db: "admin"
      }
    ]
  }
)

# 特定のデータベースのみ管理者権限をもつユーザの作成
> use データベース名
> db.createUser(
  {
    user: "ユーザ名",
    pwd: "パスワード",
    roles:
    [
      {
        role: "userAdmin",
        db: "データベース名"
      }
    ]
  }
)

# アクセス制限が全くないユーザの作成
> use admin
db.createUser(
    {
      user: "ユーザ名",
      pwd: "パスワード",
      roles: [ "root" ]
    }
)
```

**一般ユーザの作成**

```bash
$ mongo
> use データベース名
db.createUser(
    {
      user: "ユーザ名",
      pwd: "パスワード",
      roles: [
        { 
          role: "read", # or "readWrite"
          db: "データベース名" 
        }
      ]
    }
)
```

#### 3. 認証の確認

```bash
> db.auth("ユーザ名","パスワード")
> 1 # 成功
```

mongoシェル起動時に認証する場合は、

```bash
$ mongo データベース名 -u ユーザ名 -p パスワード
```


#### 4. 認証モードをONに戻してMonboDBを再起動

`/etc/mongod.conf`

```
# noauth=true
auth=true
```

```bash
$ sudo service mongod restart
```

## ユーザの削除

```bash
> use データベース名
> db.system.users.remove({user:"username"})
```
Unity:Buildに含まれるシーンのリストを取得

これも知りませんでした、
つーか記憶の片隅にあったけど覚えてなかった。

ProjectSettings->EditorBuildSettings.assetの中身をエディタで開けばOK

enabled: 1　はビルドに含めるシーン

リストの上から下に向かってScenes In Build の0オリジンで番号順に並んでいる。
Xcode6 Beta6に移行した直後にLinker Errorが多発したら rm -rf ~/Library/Developer/Xcode/DerivedData とまずやってみる


まあ、タイトルそのままです。
stackoverflow などでも言われています。
http://stackoverflow.com/questions/25388444/xcode-6-beta-6-apple-mach-o-linker-error

Build Cleanとかしても治らなければ

`rm -rf ~/Library/Developer/Xcode/DerivedData`

としてみましょう。
私も一発で解決しました。良かったよかった。

追記
=====

なおったと思ったら今度は **iOS Simulatorが起動しなくなった**。
「SimulatorのImageが無いからXcodeのPreferneceからDownloadしろ」
というようなダイアログが出てくるが、既にDownload済みのように見える。

色々謎でしたが、 Macを再起動したらなおりました。
http://stackoverflow.com/questions/24033417/unable-to-run-app-in-simulator-xcode-beta-6-ios-8
Visual Studio Online(Gitリポジトリ)をSourceTreeで使う

##概要
VisualStudioのGit対応も進んできてひと通りの操作は、行えるようになってきましたが、SourceTreeの方が慣れていて使い勝手が良いと思われている人も多いのでは無いでしょうか。
同じGitなので、SourceTreeも使えるはずとローカルリポジトリをSourceTreeへドラッグ＆ドロップしてみてもデフォルトでは、動作しません。
原因は、MSアカウントが二段階認証になってることに起因しているようです。
##手順
①Visual Studio Onlineを開きます。
②右上の自分の名前をクリックします。
![名前クリック.png](https://qiita-image-store.s3.amazonaws.com/0/7839/3866cfb8-fc0c-b653-f218-8490c0ca44c3.png)
③ポップアップが開きますので、その中のMy Profileをクリックします。
![My Profile.png](https://qiita-image-store.s3.amazonaws.com/0/7839/a4f0d5a8-7ddc-e316-7cea-b7c32d0b10e9.png)
④ダイアログが表示されますので、CREDENTIALSタブを選択します。
⑤Enable alternate credentialsをクリックします。
![認証設定前.png](https://qiita-image-store.s3.amazonaws.com/0/7839/c571d644-0b41-9a53-c8c6-a463933c8816.png)
⑥User nameとPasswordを設定して、Save changesボタンをクリックすれば、SourceTreeで操作が可能になります。
パスワードに関しては、強度が厳しくなっているようで、単純（弱い）パスワードだと怒られますので、下記アドレスからログインして変更する必要があります。
https://account.live.com/
【小ネタ】文字列でのバージョン比較がちょー簡単

#Gem::Version classを利用する

http://docs.seattlerb.org/rubygems/Gem/Version.html
>The Version class processes string versions into comparable values. A version string should normally be a series of numbers separated by periods. Each part (digits separated by periods) is considered its own number, and these are used for sorting. So for instance, 3.10 sorts higher than 3.2 because ten is greater than two.

>If any part contains letters (currently only a-z are supported) then that version is considered prerelease. Versions with a prerelease part in the Nth part sort less than versions with N-1 parts. Prerelease parts are sorted alphabetically using the normal Ruby string sorting rules. If a prerelease part contains both letters and numbers, it will be broken into multiple parts to provide expected sort behavior (1.0.a10 becomes 1.0.a.10, and is greater than 1.0.a9).

こんなかんじでcompareできちゃいます

```rb:version_compare.rb
Gem::Version.new('0.4.1') > Gem::Version.new('0.10.1')
```
HTML5の音声合成でコンピューターが話している感じの音声を実現してみる

#デモページ
実際の出力は[デモページ](http://garoo.jp/demo/ffcc/)で試すことができます。
http://garoo.jp/demo/ffcc/

#やりたかったこと
ナビゲーションの音声を作りたくて、どうせならクライシスコアファイナルファンタジーVIIの戦闘のナビゲーションのようなコンピューターっぽい音声にしてみたかったので調べてみたが、HTML5でできそうだったので試してみた。
[![](http://img.youtube.com/vi/ns3iuLbNbCI/0.jpg)](https://www.youtube.com/watch?v=ns3iuLbNbCI&t=34)

#やったこと
##Macのsayコマンドで音声データを作成
Macのコンソールで下記コマンドを叩く。
`say -o Modulating_Phase -v Samantha "Modulating Phase"`
aiffファイルで出力されるので、iTunesでmp3に変換
参考サイト：[Mac　Text To Speechでしゃべらせた内容をAIFFで保存](http://ambientlife.jugem.jp/?eid=84)

##html5で実装
* 音声ファイルとインパルス応答用のファイルを読み込む。
* 音声ファイルにインパルス応答用のファイルを合成する。
* 出力する。

```javascript:sound.js
var files = [
    "sounds/spreader50-65ms.wav",
    "sounds/Modulating_Phase.mp3",
    "sounds/Activating_Combat_Mode.mp3",
    "sounds/Conflict_Resolved.mp3",
];
 
if(typeof(webkitAudioContext)!=="undefined")
    var audioctx = new webkitAudioContext();
else if(typeof(AudioContext)!=="undefined")
    var audioctx = new AudioContext();
 
var source = null;

var convolver = audioctx.createConvolver();
var revlevel = audioctx.createGain();
revlevel.gain.value = 6;
convolver.connect(revlevel);
revlevel.connect(audioctx.destination);

var compressor = audioctx.createDynamicsCompressor();
var volume = audioctx.createGain();

var buffers = [];
var loadidx = 0;
var req = new XMLHttpRequest();
 
function LoadBuffers() {
    req.open("GET", files[loadidx], true);
    req.responseType = "arraybuffer";
    req.onload = function() {
        if(req.response) {
            audioctx.decodeAudioData(req.response,function(b){
                buffers[loadidx]=b;
                if(++loadidx < files.length)
                    LoadBuffers();
            },function(){});
        }
        else
            buffers[loadidx] = audioctx.createBuffer(VBArray(req.responseBody).toArray(), false);
    };
    req.send();
}
function Play(number) {
    source = audioctx.createBufferSource();

    source.buffer = buffers[number];
    convolver.buffer = buffers[0];

    source.connect(volume);
    volume.gain.value = 1;
    volume.connect(compressor);

    compressor.connect(convolver);
    compressor.connect(audioctx.destination);

    source.start(0);
}
```
参考サイト：[Web Audio API を使用したゲーム用音声の開発](http://www.html5rocks.com/ja/tutorials/webaudio/games/)

#やれなかったこと
完成した音声ファイルの出力
pythonでopenメソッドをモック化したときにAttributeErrorになった

pythonで

```py
open(file_path, 'r')
```

みたいなのをモック化するとき、テストスクリプトに

```py
if __name__ == '__main__':
    unittest.main()
```

って書いて直接実行するときは

```py
__builtins__.open = MagicMock()
```

みたいにしていた。


でもコマンドラインから
`$ python -m unittest2 -v test_module`
みたいに実行すると
`AttributeError: 'dict' object has no attribute 'open'`
っておこられる。
このとき

```py
__builtins__['open']
```

のようにすれば参照できるので、テストコード内で

```py
def get_builtins_open(self):
    if __name__ == '__main__':
        return __builtins__.open
    else:
        return __builtins__['open']

def set_builtins_open(self, input):
    if __name__ == '__main__':
        __builtins__.open = input
    else:
        __builtins__['open'] = input
```

こんなメソッドを作った。。。
HTMLでリンクを生成するときにURIスキームより前に入れても問題がない文字列一覧

# URIスキームの仕様
URIスキームの代表的なものには以下のようなものが存在します。

* http
* https
* javascript

通常URIスキームより前に文字列を入れると、URIスキームが正しく認識されなくなります。

```text
"xss"http://example.com
```

しかしこの仕様は、HTMLのリンクでは回避することができます。

# URIスキームの仕様を回避する
URIスキームの仕様をHTMLのリンクで回避するには、以下のような数値文字参照を使用します。

* \&#x9;
* \&#xa;
* \&#xd;
* \&#x20;

`&#x20;`は半角スペースで、[以前の記事](http://qiita.com/llamakko/items/c61220b44de4bc7c4e15)でも紹介したようにスキーム名の先頭に半角スペースを入れても動作するようになっています。
`&#xa;`　`&#xd;`この2つは改行コードで、これも半角スペースと同じ働きをします。
最後に残った`&#x9;`は見慣れない数値文字参照ですよね。
これは何かというと、`HT`です。
分かりやすく言うと、`水平タブ`のことです。
水平タブも、半角スペースと同じ働きをします。
これらの数値文字参照を使ったリンクをHTMLで生成すると、以下のようになります。

```html
<a href="&#x20;javascript:alert(1)">xss</a>
```

もちろんこのリンクにアクセスをすると、きちんとjavascriptスキームが認識されてalert(1)が出てきます。

このような抜け道がURIスキームには存在するので、ユーザから入力されたURIをチェックする正規表現を作る際には気をつけてください。
httpとhttpsしか受け入れないようにホワイトリスト方式で正規表現を作ることも1つの手ですね。
【html】スマートフォン対応Webページの横幅指定

簡単な内容ですが、長い間引っかかってしまったので…。

スマートフォン向けのWebサイトを作る場合に、CSSで、

```css:style.css
body {
    width: 100%;
}
```

としても横幅が画面幅よりも大きくなってしまって意図しない大きさになってしまいます。
このような感じ。
![スクリーンショット 2014-08-21 11.22.05.png](https://qiita-image-store.s3.amazonaws.com/0/48393/7dba7d07-73a5-345d-d9e6-aad4469ec963.png)

画像はChrome Developer Toolでiphone5をエミュレートして表示しています。白背景の部分が表示領域、濃灰が現在は表示されていないが存在するページ領域です。横スクロールしてしまいます。

解決は非常に簡単で、次のmeta要素を入れるだけです。

```
<meta name="viewport" content="width=device-width">
```

無事、ページ幅が画面幅になりました。
iPhoneとiPadで#defineで定義する定数の値を変える


```objectivec:
#define IS_IPAD (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
#define IMAGE_WIDTH (IS_IPAD ? 200 : 100)
```

iPhoneの場合はIMAGE_WIDTHが100に、iPadの場合は200になります。
ログを定期監視してメール

大量に出力されても、cronで指定したタイミングでしか送信しないので安心。

#使い方
```lang:crontab
* * * * * /bin/sh /root/watch.sh /var/log/messages 【通知先メールアドレス】>> /tmp/watch.log
```

#スクリプト
```lang:watch.sh
#!/bin/sh
TARGET=$1
MAILTO=$2

BASE="$(basename $0)"
TFILE="/tmp/$BASE.tail"
PFILE="/tmp/$BASE.prev"
DFILE="/tmp/$BASE.diff"
LFILE="/tmp/$BASE.log"

tail $TARGET > $TFILE
if (diff $PFILE $TFILE | grep '^>' > $DFILE); then
   SUBJECT="`hostname -s` watch ${TARGET}"
   cat $DFILE | mail -s "$SUBJECT" $MAILTO
else
   date >> $LFILE
fi

mv $TFILE $PFILE
```

# 補足
いちいち報告しなくて良い項目は、diff -X で指定する除外ファイルを作ってやると良し
AnsibleでFirewalldモジュールを使うときの注意

追記:
Ansible version1.9より、firewalldモジュールに<code>immediate</code>パラメータが追加され、よりわかりやすく記述できるようになりました。

```yaml:tasks/firewalld.yml
- firewalld: zone=public service=http state=enabled permanent=true immediate=yes
  tags: firewalld
```
これでランタイムと永続化が同時に出来るようです。便利！

↓ Ansible version1.9以前のお話
--
CentOS7向けのAnsible Playbookを作るときにハマったのでメモ。


Ansible Fireawlld Module
http://docs.ansible.com/firewalld_module.html



Ansibleのドキュメントを見ると、全てのサンプルが<code>permanent=true</code>になっているので、じゃあ、ってその通りやるとランタイムで入らない。（永続化の設定しか入らない）

```yaml:tasks/firewalld.yml
- firewalld: zone=public service=http state=enabled permanent=true
  tags: firewalld
```

>永続化オプションはランタイムに直接影響しません。これらのオプションはリロードあるいは再起動後にのみ利用可能になります。ランタイムかつ永続的な設定をするには、両方を指定する必要があります。 --permanentオプションは全ての永続的引数の最初に無ければなりません。 
https://fedoraproject.org/wiki/FirewallD/jp


ランタイムでFirewalldを変更する場合は、<code>permanent=false</code>にする必要がある。

```yaml:tasks/firewalld.yml
- firewalld: zone=public service=http state=enabled permanent=false
  tags: firewalld
```
SPARQLにおける文字列連結とURI化


調べても意外に載っていなかったので，ちょこっと書きます。
SPARQLのクエリでは，出力する文字列を編集してURI化できます。

##SELECT文の場合
ここでは，これまで文字列だったObjectをURIにして出力するというクエリを書きます。
以下の例では，casNumberが文字列（例："13292-46-1"）だったものを，```http://bio2rdf.org/cas:13292-46-1```　のようにURIにします。

```sparql
PREFIX dbowl: <http://dbpedia.org/ontology/> #prefixを使って簡略的に書きます。
SELECT distinct ?oo
WHERE {?s dbowl:casNumber ?o.
FILTER ( !(?o = "")) #空白文字を除く
BIND (URI(CONCAT("http://bio2rdf.org/cas:",?o)) as ?oo)
      }
ORDER BY ?o #番号順に並び替え
```

##CONSTRUCT文の場合
ちなみにRDFの形で出力したい場合には，CONSTRUCTを使えばOKです。

```sparql
PREFIX dbowl: <http://dbpedia.org/ontology/>
CONSTRUCT
{?s dbowl:casNumber ?oo}
WHERE {?s dbowl:casNumber ?o.
FILTER ( !(?o = ""))
BIND (URI(CONCAT("http://bio2rdf.org/cas:",?o)) as ?oo)
      }
ORDER BY ?o
```

##元データまで変更する場合

もとのRDFデータまで変更したい場合には（RDFのトリプルストアによっては挿入・削除の機能をサポートしています。）以下のようにUpdate用のクエリを投げれば，もとのデータまで変更してくれます。

```sparql
PREFIX dbowl: <http://dbpedia.org/ontology/>

DELETE {?s dbowl:casNumber ?o }
INSERT {?s dbowl:casNumber ?oo }
WHERE {?s dbowl:casNumber ?o.
FILTER ( !(?o = ""))
BIND (URI(CONCAT("http://bio2rdf.org/cas:",?o)) as ?oo)
      }
```

これが出来ると，もともとは文字列だったけれどもURIを発見した時や，もう少しその文字列に説明を加えたい場合（URIにするとObjectをSubjectやPredicateに出来る）外部で公開されているデータと繋げたい場合（URIの方が繋げやすい）に便利です。

###おまけ

[こちら](http://lodcu.cs.chubu.ac.jp/SparqlEPCU/project.jsp?projectID=CasConcatTest)にデータを載せておいたので，お気軽にSPARQLクエリを投げてみてください。
> CONSTRUCTは使えません。悪しからず…
元データを変更した場合にはもとに戻しておいてください（え）
ChatworkにINFOボックスを投稿

#使い方
> cw.sh 【ルーム番号】 "タイトル" "本文"

#スクリプト
```lang:cw.sh
#!/bin/sh
TOKEN=【ここに発行されたAPI Token】
TITLE=""

while getopts t:r:s: OPT
do
    case $OPT in
        t)  TO="$to [To:$OPTARG]"
            ;;
        r)  ROOM=$OPTARG
            ;;
        s)  TITLE="$OPTARG"
            ;;
        \?) echo "Usage: $0 -r <roomid> [-t <to>] [-s <subject>] [<message>]"
            exit
            ;;
    esac
done

shift $((OPTIND - 1))

if [ -p /dev/stdin ]; then
    BODY=`cat -`
else
    BODY=$@
fi

MESSAGE="${TO}[info][title]${TITLE}[/title]${BODY}[/info]"

/usr/bin/curl -k -X POST \
-H "X-ChatWorkToken: ${TOKEN}"  \
-d "body=${MESSAGE}" \
"https://api.chatwork.com/v2/rooms/${ROOM}/messages" > /dev/null 2>&1
```
Sassの参考サイト

# 参考サイト
Sass(CSS記述用のメタ言語)について

・compass(Sassのフレイムワーク)設定
　→　[link]
(http://www.atmarkit.co.jp/ait/articles/1402/25/news098.html)

・Sassの参考サイト：説明～使い方(Compass含む)
　→　[link]
(http://liginc.co.jp/designer/archives/11623)

・Sassでよく使うやつ(ミニリファレンス)
　→　[link]
(http://www.rakuin.com/notes/programming/sass/sass-function.html)

・Sassのもっと詳しく(リファレンス系)
　→　[link(オレオレリファレンス)]
(http://tenderfeel.github.io/SassReference/)
　→　[link2(使い方集)]
(http://www.webdesignleaves.com/wp/htmlcss/270/)


# 疑問

・@charasetが消える
> ※WindowsのcmdでCompassやSassを使ってコンパイルすると@charset部分が削除される。
　→　[link]
(http://parashuto.com/rriver/development/utilizing-sass-compass-in-an-organization)


# ハマったのでメモ

2014/08/25現在、Sass、Compassの最新版をインストールすると
**「*@import: "compass";*」**がコンパイルできない問題に。。。
　　※*「@import: "compass/css3";」「@import: "compass/reset";」*などは何故かいけた。
　　※windows環境でしか試していない。

ググっていろいろ試したがよくわからなかったので、以下のようにバージョン指定(※)して
Sass＋Compassをインストールしなおしたら出来るようになった。
　　※バージョンダウンした。

```lang:cmd(Windows)

gem uninstall compass
gem uninstall sass
gem install sass --version "3.2.10"
gem install compass --version "0.12.2"
```

ちなみにハマってた時のエラー↓

```lang:コンパイル失敗時のエラー内容

error sass/style.scss (C:/Ruby193/lib/ruby/1.9.1/tempfile.rb:346:in `rmdir': No such file or directory 
- [プロジェクトのディレクトリ]/.sass-cache/75fcaf1b4852ceb732871195e41567cc2a7d8997/C%058%092Ruby193%092lib%092ruby%092gems%0921.9.1%092gems%092compass-core-1.0.1%092stylesheets%092compass%092utilities%092general%092_hacks.scssc20140825-5644-1llx8vi.lock)
```

参考にしたサイト
　→　[link]
(http://560days.com/lab/2014/04/001528.php)
HeokuのAddOn papertrailで不要なログを保存しない方法

自ブログより抜粋: http://konyu.hatenablog.com/entry/2014/08/21/105813

ログをリアルタイム検索及び、アーカイブしてくれる便利サービス
Papertrailがある、こいつにはHerokuにもアドオンがあり大変便利

便利なんだがデフォルトだとDBのログも拾ってしまう。
これで拾ってしまうと、1日あたりのログの保存容量がムダに高いプランにせねばならず効率的ではない。

そこで今回はPostgresのログを表示しないようにする。

## Postgresのログを表示しない設定


herokuの各アプリの管理画面から、papertrailに飛び、Account画面に進む
Account画面の **Settings** にアクセスし、下部にある


**Filter Unnecessary Logs**

Ignore logs matchingに、避けたいものを、正規表現で追加していけば良い。

今回はpostgresと入っているものだけ避けたいので、以下のようにセッティングした
(notification|router|png|jpg|postgres)
最後に **Update** ボタンを押して設定を更新させれば完成
Wordpress のDBから OGP の設定に必要なデータを抜き出す

# したいこと

OGP の設定項目である、以下情報を設定するためにデータを抜いてくる。

|項目名|取得内容|
|:--|:--|
|og:title|`<title>`タグ|
|og:description|（保留）|
|og:url|記事のURL|
|og:site_name|（保留）|
|og:image|記事のメイン画像|


# 使ったクエリ

```sql
SELECT 
    p.post_title AS title
    , p.post_title AS description -- ひとまずtitleと同じ値にしとく
    , p.guid AS url
    , "wordpress.com" AS site_name -- ひとまずベタ書き
    , (SELECT guid FROM wp_posts WHERE id = IFNULL(pm.meta_value,0)) AS image
FROM wp_posts p 
 LEFT JOIN wp_postmeta pm 
        ON pm.post_id = p.id 
       AND pm.meta_key = 'main_picture' 
WHERE p.post_type = 'post' 
  AND p.post_status IN ('pending','publish');
```

# 参考サイト

* http://wpdocs.sourceforge.jp/%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9%E6%A6%82%E8%A6%81#.E3.83.86.E3.83.BC.E3.83.96.E3.83.AB.EF.BC.9A_wp_posts
* http://web.mt-systems.jp/archives/441
* http://d.hatena.ne.jp/jiikko/touch/20130418/1366276665

## 備考

保留の欄はそのうち埋めます。
Unityのitweenをシンプルに実装。

以下からダウンロード
https://code.google.com/p/itween/

iTween.csをpluginsにドラック&ドロップ
![スクリーンショット 2014-08-21 10.34.20.png](https://qiita-image-store.s3.amazonaws.com/0/38279/5f1f50d1-120c-cfce-b75e-37d934d82960.png)

以下のスクリプトを作成して対象のGameObjectにaddComponetする。

```csharp:ItweenSample
using UnityEngine;
using System.Collections;

public class ItweenSample : MonoBehaviour {
	public GameObject gameobject;
	Hashtable table = new Hashtable();		// ハッシュテーブルを用意

	private void Start()
	{
		table.Add("x", 100);			// xを10まで移動
		table.Add("y", 50);			// yを5まで移動
		table.Add("time", 1.0f);		// トゥイーン時間は3秒
		table.Add("delay", 1.0f);		// 1秒遅らせてからトゥイーンスタート
		table.Add("oncomplete", "CompleteHandler");
		table.Add("oncompletetarget", gameObject);

		iTween.MoveTo(gameObject, table);	// 第二引数にハッシュテーブルをセット
		//iTween.MoveTo(gameObject, iTween.Hash("x", 20, "looptype", iTween.LoopType.loop));
		// 4秒かけて、y軸を260度回転
		//iTween.RotateTo(gameObject, iTween.Hash("y", 260, "time", 4.0f));
		// 4秒かけて、y軸を3倍に拡大
		//iTween.ScaleTo(gameObject, iTween.Hash("y", 3, "time", 4.0f));
	}

	private void OnTriggerStay(Collider other)
	{
		Debug.Log ("OnTriggerStay");
	}
		
	private void StartHandler()
	{
		Debug.Log ("StartHandler");
	}

	private void UpdateHandler()
	{
		Debug.Log ("UpdateHandler");
	}

	private void CompleteHandler()
	{
		Debug.Log ("CompleteHandler");
	}

}
```
（注意点）
MoveToをハッシュテーブルより後に書くと当然実行順番的にアウト。
EventHandlerに引数を入れられない。
RspecでJSのテストが失敗する


#### 環境

- Rails 4.1.5
- PostgreSQL 9.3.5
  - pg 0.17.1
- poltergeist-1.5.1
- capybara-2.4.1
- rspec-3.0.0
- Qt 4.8.6
- Phantomjs 1.9.7


### エラー内容
以下のエラーが不規則に発生する。
Poltergeist・Webkitどちらでも発生。

```bash
An error occurred in an after hook
  ActiveModel::MissingAttributeError: missing attribute: encrypted_password
```

```bash
NoMethodError:
  undefined method `fields' for nil:NilClass
```

```bash
An error occurred in an after hook
  ActiveRecord::StatementInvalid: PG::UnableToSend: extraneous data in "T" message
```

```bash
PG::UnableToSend: another command is already in progress
```

その他、テスト実行時にハングアップする。postgresのプロセスを強制終了でテストを終了できる。
（`PG::ConnectionBad: PQsocket() can't get socket descriptor: SAVEPOINT active_record_1`）

### 確認できているIssueなど

- [josevalim / shared_connection.rb](https://gist.github.com/josevalim/470808)
- [Lots of Postgres errors in RSpec integration test with Zeus](http://stackoverflow.com/questions/21081956/lots-of-postgres-errors-in-rspec-integration-test-with-zeus)



### 試したこと・対応策

#### Javascriptの処理の終了を待つ

上記のIssueにも載っているが、以下のメソッドを追加し、テスト中に`wait_for_ajax`を実行することで
処理が正常に行われるようになった。

```ruby
module WaitForAjax
  def wait_for_ajax
    Timeout.timeout(Capybara.default_wait_time) do
      loop until finished_all_ajax_requests?
    end
  end

  def finished_all_ajax_requests?
    page.evaluate_script('jQuery.active').zero?
  end
end
```

#### gem pg のアップデートを待ってみる

最初はPotergeistで発生し、Webkitに変更しても発生したことから、PostgreSQL依存のエラーかもしれない。
と思って、pgのリポジトリを覗いてみるとバージョン0.18がもうすぐでそうな感じ。

関係ありそうなissue（[PG.connect ignores connect_timeout](https://bitbucket.org/ged/ruby-pg/issue/188/pgconnect-ignores-connect_timeout)）もあるので、gemのアップデートを待ってみようと思う。