OmniAICreator/Qiita-1.07M huggingface dataset:
メモ：Vagrant の bash_completion が v1.6 系に対応した

https://github.com/mitchellh/vagrant/blob/master/contrib/bash/completion.sh

```
$ mv completion.sh $(brew --prefix)/etc/bash_completion.d/vagrant
```

追記：box 名に VAGRANTSLASH が展開されてしまうのを / に修正するパッチは以下。

```diff
@@ -65,7 +65,7 @@
     then
         case "$prev" in
             "init")
-              local box_list=$(find $HOME/.vagrant.d/boxes -mindepth 1 -maxdepth 1 -type d -exec basename {} \;)
+              local box_list=$(find $HOME/.vagrant.d/boxes -mindepth 1 -maxdepth 1 -type d -exec basename {} \;|sed -e 's/-VAGRANTSLASH-/\//')
               COMPREPLY=($(compgen -W "${box_list}" -- ${cur}))
               return 0
             ;;
@@ -111,7 +111,7 @@
       then
         case "$prev" in
             "remove"|"repackage")
-              local box_list=$(find $HOME/.vagrant.d/boxes -mindepth 1 -maxdepth 1 -type d -exec basename {} \;)
+              local box_list=$(find $HOME/.vagrant.d/boxes -mindepth 1 -maxdepth 1 -type d -exec basename {} \;|sed -e 's/-VAGRANTSLASH-/\//')
               COMPREPLY=($(compgen -W "${box_list}" -- ${cur}))
               return 0
               ;;
```

Cf.) https://github.com/kura/vagrant-bash-completion/pull/24
railsを勉強する上で役に立ったサイトまとめ


適宜追加していきます。

# 小学生でもわかるRuby on Rails入門
まずrailsでどんな事が出来るのかなんとなく理解するのにはいいかと思います。
http://openbook4.me/projects/92/

# 初心者向けのRuby on Railsの用語説明
「rakeとかなんぞや」ってのをさらっと説明しているので軽く目を通しておくといいかも。
http://www.u-ziq.com/blog/2007/12/ruby_on_rails.html

# Ruby on Rails 4入門
おなじみdotinstallは上のやつが終わってからのがわかりやすいかと。
http://dotinstall.com/lessons/basic_rails_v2

# Ruby on Rails チュートリアル 実例を使ってRailsを学ぼう
これまでのプログラムを全部やると２章くらいまではパラ読みでもおっけーぽいです。
http://railstutorial.jp/

現在進行中。。。


どこかおすすめがあればコメントででも教えてください！
お名前.comで取得したドメインを別サービス(さくらVPS)に設定する



お名前.comでドメインとったものの、
設定がわかりにくかったので手順メモ。

---------------------------------------


1.[ドメインNavi]にログイン
2.[ドメイン設定]タブ
3.[DNS関連機能の設定]サイドメニュー
4.[DNSレコード設定を利用する]設定する
5.[~.com(取得したドメイン選択)]入力画面へ進む
6.[ホスト名][タイプ][TTL][VALUE][状態]を入力して、追加
※設定時の参考情報:DNSの解説 for ビギナー
http://mage8.com/websitetips/dns.html

7.[DNSレコード設定用ネームサーバー変更確認]にチェックいれて、確認画面へ進む、設定する
8.[NaviTop]タブ
9.[~.com(取得したドメイン選択) ネームサーバー　変更]
10.[設定する]

Done!反映を待つ!(3分ぐらいで反映された)
ImageMagickなのに左にも上にもappendできる！

@chocomelon: なんでImageMagickって左と上にappendできないの？死ぬの？

@t_cyrill: ファイルの引数逆にすればええやん

@chocomelon: めんどいやん。わかりづらいやん。

__ってことで左にも上にもappendできるバッチ作った__

__こんなふうにしたいときに有効だよ！__

flan.png
![07_00_flandre.png](https://qiita-image-store.s3.amazonaws.com/0/26265/19d8bd35-7039-b37c-9196-7b06ee9634e0.png)

koakuma.png
![08_00_koakuma.png](https://qiita-image-store.s3.amazonaws.com/0/26265/c6d136da-7db4-c9cb-f161-371fca9bb6d8.png)

sanae.png
![09_00_sanae.png](https://qiita-image-store.s3.amazonaws.com/0/26265/c2dc9d2f-6990-c289-45ca-a938d0110918.png)

###例1: フランちゃん起点にして左に数珠つなぎ

```bash
./append.sh -left flan.png koakuma.png sanae.png append1.png
```
append1.png
![append.png](https://qiita-image-store.s3.amazonaws.com/0/26265/a0adf00f-8c87-96e9-2ab0-6d4726d4d133.png)

###例2: フランちゃんを起点に上に数珠つなぎ

```bash
./append.sh -top flan.png koakuma.png sanae.png append2.png
```

append2.png
![append.png](https://qiita-image-store.s3.amazonaws.com/0/26265/8cc21da1-ca9f-8daa-febe-4fc32f66cb97.png)

もちろん右にも下にもつなげるよ！（右と下はデフォルトのappendでできます）

##使い方
appended.pngに出力したいを保存したい場合

```bash
./apend.sh -(left|right|top|bottom) file1.png file2.png ..... appendedfile.png
```

##スクリプト本体

append.sh

```bash
#!/bin/bash                                                                                                                                           

if [ $# -lt 3 ]; then
    echo "Usage: append DIRECTION file1 file2 ... dest"
    echo "i.e.: append -left 01.png 02.png dest.png"
    echo "DIRECTION = [-left|-right|-top|-bottom]"
    exit
fi

DIRECTION=$1
shift;
ARGS=("$@")
DEST=${ARGS[((${#ARGS[@]}-1))]}

FILES="${ARGS[@]:0:((${#ARGS[@]}-1))}"

case "$DIRECTION" in
    "-left"|"-right") OPTIONS='+append';;
    "-top"|"-bottom") OPTIONS='-append';;
esac

case "$DIRECTION" in
    "-left"|"-top") FILES=`echo "$FILES" | awk '{for(i=NF;i>0;i--) printf("%s ",$i);}' | xargs`;;
esac

convert $OPTIONS $FILES $DEST
```

gistも貼っとくよ！

https://gist.github.com/chocomelonchan/3f5f6dde1a32e9e34d35

ちなみに…このスクリプトは @chocomelon があーだこーだ言ってたら隣に居た @t_cyrill がいい感じにして（作って）くれました。
Greple v6.22: New Look'n'Feel

# LINKS

- [github](https://github.com/kaz-utashiro/greple)

# SCREEN SHOT

![kobito.1399904900.418686.png](https://qiita-image-store.s3.amazonaws.com/0/36551/a591bbf2-50d6-ac58-63a7-2db5ab4a1a19.png "kobito.1399904900.418686.png")

# 主な変更点

## COLOR

- ANSI 256色シーケンスに対応して、それをデフォルトにした。
- 多色モード (`--colorful`) をデフォルトにして、色数も増やした。
- ファイル名と行番号のカラー対応。
  - テキストとの境界がわかりやすい。
  - ブロックの切れ目がわかりやすい。

## 必須パターンの追加

- + で始まるパターンは、必ず含まれることを指示。
  - `--need` オプションの対象外。
- 必須パターンが1つでもあれば、それ以外はオプショナルになる。
  - マッチカウントを増やしたければ `--need +n` で追加できる。
  - `--need -n` は、最大数から n 減らすという意味になる。

## new `--call` option

- 領域キャッシュを実現するために `--call` オプションを追加。
  - キャッシュ機能については bm.pm モジュールを参照。
  - 汎用的なキャッシュ機能は未実装。
- 前処理のために使用することも可能。

# 必須パターンの使用例

このコマンドは、元々文章の校正用に作りはじめたものです。今翻訳しているのはセキュリティに関する書籍ですが、その中に compromise という言葉が頻繁に出てきます。この訳語がなかなか難しくて、いつもこうすればいいという定訳が定まりません。文脈に応じて、改竄、攻撃、侵害、侵入、障害、妥協、譲歩、損なう、など様々な訳し方が考えられます。これがどのように訳してあるかを、次のようにして確認することができます。

オプション `--both` は、`-Mbm` モジュールで定義してあって、原文と訳文の両方を含めて1ブロックで扱います。ブロックは、grep の「行」に相当します。パターン中の compromise の先頭には + が付いているので、この文字列が必ず含まれるブロックを検索します。それ以外はあってもなくてもいいのですが、あれば色付けして表示します。

![kobito.1399908676.592605.png](https://qiita-image-store.s3.amazonaws.com/0/36551/5ed15453-0a0e-a2d6-be95-6cc6e9957a26.png "kobito.1399908676.592605.png")


# 過去記事
> - http://utashiro.hatenablog.com/entry/2013/11/19/004359
> - http://utashiro.hatenablog.com/entry/2013/12/03/112157
> - http://utashiro.hatenablog.com/entry/2013/12/07/143120
> - http://utashiro.hatenablog.com/entry/2013/12/15/183327
Rx で Chain of Responsibility


今さらだけど GoF の Chain of Responsibility パターン。「自分に処理できないタスクは上へ投げる」ってやつ。Reactive な感じでやるとこんな感じかなあと思って書いてみた。

```csharp:
void Main()
{
    var document = "有給届";
    
    var kakariCho = CreateManager("係長", document, d => String.Equals(document, "遅刻届"));
    var kaCho = CreateManager("課長", document, d => String.Equals(document, "有給届"));
    var buCho = CreateManager("部長", document, d => String.Equals(document, "退職届"));
    
    Observable.Concat(new [] { 
        kakariCho,  // 係長
        kaCho,      // 課長
        buCho       // 部長
    })
    .FirstOrDefault() // 最初の１人に承認されたら終了
    .Timeout(TimeSpan.FromDays(1)) // 猶予１日
    .Subscribe(x => Debug.WriteLine(String.IsNullOrEmpty(x) 
        ? "あなたの届書は却下されました" 
        : x + "が承認しました"));
}

/// 管理職を作成する（役職名、渡された届書、自分に承認できる届書）
IObservable<string> CreateManager(string managerTitle, string document, Predicate<string> canIAccept)
{
    return Observable.Create<string>(o => Task.Run(() => 
    {
        if (canIAccept(document)) 
        {
            o.OnNext(managerTitle); // 承認
        }
        o.OnCompleted();
    }));
}
```

管理職の人を ``IObservable`` に見立てて、自分が処理できるなら ``OnNext`` を呼ぶ、処理できないなら ``OnNext`` は呼ばずに ``OnComplete`` しちゃう。
で、係長・課長・部長の IObservable を ``Concat`` で役職の低い順につなげて、 ``FirstOrDefault()`` で最初の承認がもらえるまで待つ、みたいな。

係長・課長・部長が誰も承認しなかった時、タイムアウトするまで待ちが発生しちゃうのが難点。→ ``Take(1)`` じゃなくて ``FirstOrDefault`` すればいいみたい。誰も承認しなかった場合 ``default(string)`` つまり空文字が流れてくる。

あと、係長→課長→部長と管理職のハンコリレーが必要な場合に対応できていない、Concat なので係長の結果を課長に引き継いでないから。

んーどうしようか。。。
第21回オフラインリアルタイムどう書く groovy で


問題 : http://d.hatena.ne.jp/torazuka/20140509/yhpg
他の実装へのリンク : http://qiita.com/torazuka/items/cbdb6b581a57e4754dd4
イベント : http://yhpg.doorkeeper.jp/events/10503

当日時間があれば書きたかった groovy。

```groovy
// tested with Groovy Version: 2.3.0 JVM: 1.7.0_07 Vendor: Oracle Corporation OS: Mac OS X

def solve_impl( src )
{
  fixed=new HashSet()
  (0..<5).inject( [:] ){ acc,pri->
    src.each{
      (num,w)=it
      key=w[pri]
      att=( acc[key]=acc[key] ?: [] )
      if ( ! fixed.contains(num) && att.size<4 ){
        att.push( num )
        fixed.add(num)
      }
    }
    acc
  }
}

def format( r )
{
  r.keySet().findAll{ r[it] && ! r[it].isEmpty() }.sort().collect{
    [it, r[it].sort().join(":")].join("_")
  }.join("|")
}

def parse( src ){
  src.split(/\|/).collect{
    (a,b)=it.split("_")
    [a as Integer, b ]
  }
}

def solve(src){
  format( solve_impl( parse( src ) ) )
}

def test( src, expected )
{
  actual = solve( src )
  if ( actual == expected ){
    println "ok"
  } else {
    printf( "%s->%s / %s\n", src, actual, expected )
  }
}

/*0*/ test( "1_12345", "1_1" );
/*1*/ test( "30_32451", "3_30" );
```

いつも通り、テストデータの大半は省略。

ruby版( http://qiita.com/Nabetani/items/7d7c46438339b730cc4b )をそのまま移植した。

初期値付き HashMap がない（と思うんだけど、どうだろう）から `||=` を使おうと思ったらそれもなく、仕方ないので if 文を書いてしまった。
なんか残念。だったんだけど、エルビス演算子( `?:` )を使う機会が得られたのでよしとしようか。
GrapeでAPIを構築時のメモ


基本的な構成や手順は後で。とりあえずつまったところをメモ。

## こんなModelで

```
class Post < ActiveRecord::Base
  has_many :post_relationships
  has_many :categories, through: :post_relationships
  validates :name, presence: true
  accepts_nested_attributes_for :categories
end

class PostRelationship < ActiveRecord::Base
  belongs_to :post
  belongs_to :category
end

class Category < ActiveRecord::Base
  has_many :post_relationships
  has_many :posts, through: :post_relationships
end
```

##上記のようなモデルで多対多のリレーションを含めた形で結果を返す

```
# api.py
module API
  class Base < Grape::API
    prefix 'api'
    version 'v1', using: :path
    format :json

    mount Post_API
  end
end

# post_api.py
class Post_API < Grape::API
  resource :posts do

    # http://localhost:3000/api/v1/posts
    get do
      # Post.all() ←これだとカテゴリーの中身が返らない。
      # これでカテゴリー含めて返る
      Post.all()as_json(include: :categories)
    end

    # http://localhost:3000/api/v1/posts/1
    get ':id' do
      Post.find(params[:id])
    end
  end
end
```
横からにゅるっとメニュー（ドロワーメニュー）を実装してみた




#にゅるにゅるさせたい

スマホサイトの開発で「ドロワーメニュー（あの、ボタン押すと横からにゅるっと出てくるやつ）」が欲しいな〜　ということで探していた所、いくつかいいもの見つけました。

##sidr
http://www.berriart.com/sidr/

##jSlideMenu
http://qiita.com/ukitaka/items/64e4589e37944bf032d9

##jquery slim menu
http://adnantopal.github.io/slimmenu/


他にもいろいろあるようなので、下記を参照。
http://liginc.co.jp/web/js/jquery/56550


#どれがいいの？

上の３つ、全て試してみたところ、sidrがいいなあ、と思いました。
実装がしやすいのと、右から、左から、レスポンシブメニュー、などなど、デフォルトで色々なオプションが備わっていたからです。

jSlideMenu は、なぜかチラつきが多かったです。
ぬるぬる気持ちいいとの評判があるので、私の手違いがあったのかも。

jquery slim menuはお手軽、レスポンシブ。
でも横からにゅるっとではなく、縦方向でした。
特にレスポンシブは求めなかったので、今回はパス。

ということでsidrを採用！
実装方法はここで書くまでもないでしょう。


#sidrのちょっとしたTips 

実装自体は公式ドキュメントに従って簡単にできましたが、
ちょっと気になる部分がありました。

スマホで見ると、ロードする時に一瞬、\<li>内のテキストがまる見えに。
まあ、ほんの少しで消えるけど。気になる…。

解決策は、メニュー部分のidに display:none を入れるだけ。

```
<div id="sidr" style="display:none">
  <!-- Your content -->
  <ul>
    <li><a href="#">List 1</a></li>
    <li class="active"><a href="#">List 2</a></li>
    <li><a href="#">List 3</a></li>
  </ul>
</div>
```

当たり前といえばそうですが。

あとは、メニューに「閉じる」ボタンを付けたいと思っています。
メニューボタンではなくて、テキストの「閉じる」を押したらメニューが引っ込むようにしたい。
さて、これはどうやって実装しようかなあ。

次回に？続く。
docker-registry で Riak CS を使用する

docker-registry の storage に Riak CS を指定してみました

## Riak CS

Riak CS の環境を構築して、あらかじめ、Bucket を作成しておきます

```
$ s3cmd mb s3://container
```


## docker-registry

### イメージの取得

docker-registry のイメージを取得します

```
$ docker.io pull registry:latest
```

### config.yml

access_key と secret_key、bucket、proxy 等の設定を追加します

```
common:
    loglevel: info
    search_backend: "_env:SEARCH_BACKEND:"
    sqlalchemy_index_database:
        "_env:SQLALCHEMY_INDEX_DATABASE:sqlite:////tmp/docker-registry.db"

dev:
    storage: s3
    boto_bucket: container
    s3_access_key: GFLC3W_XLO1PBBJESTBG
    s3_secret_key: SY-kACsHLvOayPUZ0q6I9GnlAR4dDAgjey4I_Q==
    s3_bucket: container
    s3_encrypt: false
    s3_secure: false
    secret_key: 4TLvi2erYFKMx0lwRx4YQTLxZryb3oG7Gu13iURsfAuy6OZgLRRJN7jPSAhgxDhH
    storage_path: /images
    boto_host: riak.example.com
    boto_port: 8080
    boto_proxy: riak.example.com
    boto_proxy_port: 8080
```

### 起動

DOCKER_REGISTRY_CONFIG に config.yml を指定して起動します

```
$ docker.io run -d -t -p 5000:5000 -v /home/vagrant/conf:/conf -e DOCKER_REGISTRY_CONFIG=/conf/config.yml -e SEARCH_BACKEND=sqlalchemy -e SETTINGS_FLAVOR=dev registry:latest
```

### docker push

他のホストからイメージを push します

```
$ docker.io push registry.example.com:5000/ubuntu-14.04
The push refers to a repository [registry.example.com:5000/ubuntu-14.04] (len: 1)
Sending image list
Pushing repository registry.example.com:5000/ubuntu-14.04 (1 tags)
511136ea3c5a: Image successfully pushed
5e66087f3ffe: Image successfully pushed
4d26dd3ebc1c: Image successfully pushed
d4010efcfd86: Image successfully pushed
99ec81b80c55: Image successfully pushed
5bd70d096094: Image successfully pushed
Pushing tag for rev [5bd70d096094] on {http://registry.example.com:5000/v1/repositories/ubuntu-14.04/tags/latest}
```

s3cmd で確認してみます

```
$ s3cmd ls s3://container/images/repositories/library/
                       DIR   s3://container/images/repositories/library/ubuntu-14.04/
```

### イメージの検索

```
$ curl -X GET http://registry.example.com:5000/v1/search 2> /dev/null
{"num_results": 1, "query": "", "results": [{"description": "", "name": "library/ubuntu-14.04"}]}
```

### docker pull

さらに他のホストでイメージを pull してみます

```
$ docker.io pull registry.example.com:5000/ubuntu-14.04
Pulling repository registry.example.com:5000/ubuntu-14.04
5bd70d096094: Pulling image (latest) from registry.example.com:5000/ubuntu-14.04, end5bd70d096094: Download complete
511136ea3c5a: Download complete
5e66087f3ffe: Download complete
4d26dd3ebc1c: Download complete
d4010efcfd86: Download complete
99ec81b80c55: Download complete
$ docker.io images
REPOSITORY                               TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
registry.example.com:5000/ubuntu-14.04   latest              5bd70d096094        13 minutes ago      266 MB
```


## 参考
- [dotcloud/docker-registry](https://github.com/dotcloud/docker-registry)
- [Riak CS](http://docs.basho.com/riakcs/latest/)
UITableView.tableHeaderView の高さ変更


一度 nil を代入して上げないとなぜか反映されない。
うーん、そういうものなんでしょうか・・・。

``` objective-c
UIView *tableHeaderView = self.tableView.tableHeaderView;
CGRect newFrame = tableHeaderView.frame;
newFrame.Size.Height = newHeight;
tableHeaderView.frame = newFrame;
self.tableView.tableHeaderView = nil;
self.tableView.tableHeaderView = tableHeaderView;
```
Android のデータベースでテーブルの結合に困ること

Android で利用できるデータベースは SQLite3 ですが、クエリの結果は`Cursor`という抽象化されたインタフェースで取り扱っています。
`SQLiteDatabase` で直接 SQL を実行するインタフェースもありますが、SELECT 文だけは特別扱いされ、返り値が`Cursor`となるため、ほぼ確実にクエリ結果を取り扱うには`Cursor`とつきあうことになります。

ここで、あるデータベースに以下のような複数のテーブルがあったと仮定します。

* table_1

|_id|name|description|
|----|----|----|
|1|foo|first entry|
|2|bar|second entry|
|3|baz|another entry|

* table_2

|_id|age|description|
|----|----|----|
|1|13|hogehoge|
|2|14|fugafuga|
|3|16|piyopiyo|

これらのテーブルから、`_id`を元に結合したクエリを投げてみます。

```sql

SELECT * FROM table_1, table_2 WHERE table_1._id = table_2._id;
```

これによって得られる`Cursor`で、クエリ結果のセットにアクセスするには、以下のようにします。

```java

Cursor cursor = // query...

if (cursor == null) 
    return;

try {
    while (cursor.moveToNext()) {
        long id = cursor.getLong(cursor.getColumnIndex(BaseColumns._ID));
        String name = cursor.getString(cursor.getColumnIndex("name"));
        int age = cursor.getInt(cursor.getColumnIndex("age"));
        String description = cursor.getString(cursor.getColumnIndex("description"));

        // do something with the result...
    }
} finally {
    cursor.close();
}
```

`Cursor#getColumnIndex(String)`を使って、カラム名に対応する、1行分のデータを格納しているコレクションのインデックスを取得し、そのインデックスを元に、結果セットからデータを取り出します。

さて、`table_1`と`table_2`にはそれぞれ、`description`という名前のカラムが存在します。
`Cursor`を経由したアクセスでは、どちらのものかを区別するようなコードの書き方はしていませんが、結果自体は取得できているようです。

実のところ、テーブルを結合した際、同じ名前のカラムが存在した時、それぞれテーブルごとにカラムを絞り込む機能は`Cursor`にはありません。
内部的には、`Map`のようなデータ構造でクエリ結果のセットを管理しています。つまり、カラム名の衝突は`Map`におけるキーの衝突と同じ結果をもたらすことになります。よって、データ自体は存在し取得もできていますが、取得できるデータは、`Cursor`が持つ結果セットに最後に追加された（実質上書きされた）データになります。

このような事態を避けるには、カラム名を衝突しないように作るか、ある程度正規化しないで、最初から結合した状態にしておくか、クエリを別々に分けるかのいずれかの手段で対処します。
画面遷移してもグローバル変数が残る例について


##画面遷移してもオブジェクトが残る？
JSを書いていて、宣言していないのに宣言されていたり代入していないのに値が入っていたり、、、
変な挙動をしていたので原因を調べてみました。

画面遷移してもグローバル変数のオブジェクトが残っていることが・・・？
ものは試しで、まずは以下のプログラムを同じ画面でglobal1, global2, global1の順に開いてみてください。
すると、宣言していないnameでエラーでないし、global1の挙動が変わります。
なにこれこわい。

```html:global1.html
<script>
  eval(name);
</script>
```

```html:global2.html
<script>
name = 'alert("Hello!!!")';
</script>
```



##原因
ということで早速原因なのですが、nameが残った原因は、windowオブジェクトのnameプロパティの仕様によるものでした。
nameはブラウザのウィンドウが開かれた際にウィンドウ自体を指すwindowオブジェクトができた際に生成され、画面が遷移してもウィンドウが閉じられなければそのまま残ります（ドメインが変わると残りません）。


結局のところ、global2.htmlでalertメソッドを表す文字列をnameに設定し、global1.htmlでグローバル変数のnameをeval関数で実行していたのでした。
evalこわい。



##window.name確認
nameの確認をしておきましょう。
Developer toolの要素の検証>Sources内で変数宣言しているところなどにbreak pointを仕掛けてあげて、右のカラムのglobalからnameを確認することができます。
nameはwindowの名前を表し、初期値は空文字で、任意の文字列を設定することができます。
![スクリーンショット 2014-05-12 14.46.30.png](https://qiita-image-store.s3.amazonaws.com/0/34652/561535f0-383c-357d-64fd-cd8417ae338d.png)

##その他のオブジェクトについて
globalには600以上のオブジェクトが表示されています。
気になってブラウザで生成される600以上のオブジェクトをチェックしました。
![test.jpg](https://qiita-image-store.s3.amazonaws.com/0/34652/fb0d1f89-892d-1864-956d-7b8d96859081.jpeg)

全部やりましたが、結局残るのはnameだけでした。残念。


なんでこんな仕様になっているのかいまいちわかりませんが、
nameを使ったクロスドメイン通信などなど、色んな使われ方がされているみたいです。


おしまいっ
In-App Purchase 参考リンクまとめ


消費型(Consumable)のプロダクト実装時に調べたメモ。
このあたり見ればだいたいいける。

##■公式
#####・In-App Purchase プログラミングガイド
https://developer.apple.com/jp/devcenter/ios/library/documentation/StoreKitGuide.pdf

#####・レシート検証 プログラミングガイド
https://developer.apple.com/jp/devcenter/ios/library/documentation/ValidateAppStoreReceipt.pdf

#####・SKPaymentQueue Class Reference
https://developer.apple.com/librarY/mac/documentation/StoreKit/Reference/SKPaymentQueue_Class/Reference/Reference.html


##■StoreKit 関連
#####・StoreKitのトランザクションの基礎
http://nantekottai.com/2011/10/31/basics-of-storekit-transaction/

#####・【iPhone】課金処理が勝手に走る状態の防止【StoreKit】
http://kumagai-naoto.blogspot.jp/2012/11/iphonestorekit.html

#####・実例でみるiPhoneアプリ内課金(In App Purchase) アプリへの組み込み 
http://kray.jp/blog/iphone-in-app-purchase-2/

#####・アプリ内課金　実装編
http://d.hatena.ne.jp/kozy_twt/20110423/1303544282

##■その他
#####・失敗しない iOS In-App Purchase プログラミング
http://d.hatena.ne.jp/glass-_-onion/20111201/1322697417

#####・iOSのアプリ内課金(In App Purchase)での注意点
http://www.aguuu.com/archives/2012/12/in-app-purchase-annotation/
Gradleでミスってたので

以下重要。

```groovy
task myTask(type:タスク型){
  設定
}
task myTask << {
  ビルドアクション
}
```

設定にアクション書いてたせいで、Gradle実行の直後に実行されたり、
アクション中に、dependsOnとか書いて警告出されたりすること多々ありますな。

しっかりと書いてくれている人っていたっけなぁ。
GitHubに登録してある公開鍵をauthorized_keysに追加するコマンド

GitHubに登録してある公開鍵は`https://github.com/${USERNAME}.keys`で公開されているので、それを`curl`か`wget`でダウンロードしてきて、`~/.ssh/authorized_keys`にリダイレクトしれやればいい。

### `curl`の場合
```console
$ curl https://github.com/itiut.keys >> ~/.ssh/authorized_keys
```

### `wget`の場合
```console
$ wget https://github.com/itiut.keys -qO - >> ~/.ssh/authorized_keys
```
オプションの`-O`は、ゼロ`0`ではなく大文字のオー`O`。
Selenium WebDriverでFireFoxを指定した時のエラーについて

# 問題
Play2.2でSelenium WebDriverを使用したテストをする際にFireFoxWebDriverを使用したとき、

> Unable to connect to host 127.0.0.1 on port 7055

のエラーが発生する。


# 原因
Play2.2のリポジトリにはバージョン0.9.0のFluentLeniumが定義されているが、どうやらこれが最新のFireFoxには対応していないようだ。
最新版は0.10.0なので、そちらのバージョンを使用するように設定する。


# 対応
build.sbt の libraryDependencies のところに、以下の内容を追記する

```scala
("org.fluentlenium" % "fluentlenium-festassert" % "0.10.0" % "test")
  .exclude("org.jboss.netty", "netty")
```
rails(4.1.0)でaction名がlocationとなっているものの中でredirect_toするとstack level too deepエラーが発生した。


locationだけではなくmessageでエラーが発生したいう人もいた。
[RailsでSystemStackError: stack level too deepに遭遇した… - (define -ayalog '())](http://ayato.hateblo.jp/entry/20140117/1389969735)

原因はコントローラーの継承元のApplicationControllerのどこかに既に定義しているのだろうとは思うが、見つけられなかった。

stack level too deepエラーが発生したらaction名を変更すればとりあえずリダイレクト処理が上手く行ったが、action名に指定してはいけない名前一覧みたいのをほしいと思った。

---

以下ソース


```routes.rb
  root 'hoge#index'
  get 'location' => 'hoge#location'
  get 'message' => 'hoge#message'
```


```hoge_controller.rb
class HogeController < ApplicationController
  def index
    render :text => "index"
  end

  def location
    redirect_to :root
  end
  
  def message
    redirect_to :root
  end
end

```

`/location` にアクセスした時の画面

![スクリーンショット 2014-05-12 22.13.00.png](https://qiita-image-store.s3.amazonaws.com/0/6561/b19008be-1825-e4d9-c02c-7d6c65a737c6.png "スクリーンショット 2014-05-12 22.13.00.png")
日本語文字列照合順番の一部を整理整頓してみる (2)

> [日本語文字列照合順番の一部を整理整頓してみる](http://qiita.com/kuroky_plus/items/6b31a69a5a43afbcd285) から始まる一連のポストである．

まず，立ち位置をおさらいしておく．

> JIS X 4061 から，
> 
> *    1. (2) 読み・表記照合
> *    3.3 (1)/4.1 基本照合規則
>
> を採用し，（日本語を解しない）実装者に要件を説明することを念頭に置いて，記述を整理することを狙う

とする．根源的には，二つの文字列の大小関係（順序）を定める課題であり，実際に並べ替える作業とは独立である．ただし，誤解の恐れがないときには簡便のため，「順番を決める」「順序を決める」「整列する」「ソートする」などの用語をほぼ同じ意味で用いる．

「実装者」は，ここでは ConTeXt の実装者を想定する．ConTeXt MkIV では，多言語混植といったことを最初から意図しているので，JIS X 4061 のうち，欧字記号・ラテンアルファベットについては，JIS X 4061 ではなく各言語の慣習に従わせるという方針で説明したい．

なお，ConTeXt で索引を指定するときには

```tex
\index{索引へ表示させたい文字列}
```

または

```tex
\index[整列に利用したい文字列]{索引へ表示させたい文字列}
```

とソースを記述することを想定する．

さて，「読み・表記照合」を採用した立場で，非日本語話者に概要をまず話すならば，以下のように説明したい．

> 大まかには，音でソートする．日本語には，音を表現するために「かな」があり，かつ同じ音を表現するのであるが，「ひらがな」と「カタカナ」が存在する．正規化するためにはどちらかに寄せるのが妥当だが，（通常は表記に音引きを用いないという理由により，単純なため）「ひらがな」へ正規化して考えればよい．
> 
> 日本語は，固有の文字であるひらがなとカタカナのほかに，漢字およびラテンアルファベット，ギリシア文字，キリル文字，（絵文字を生んだような文化から想像できる通り，多岐にわたる）各種記号を織り交ぜて表記する．カタカナからひらがなへの変換は容易であるから，ソート処理系の中で当然実装されるべきである．一方，漢字を用いた語をどう読むか（どんな音に対応するか）については，日本語の文法知識すら必要になるため，ユーザがひらがなまたはカタカナですべて与えると仮定してよい．ただし，[KAKASI](http://kakasi.namazu.org/) のように半自動化（ときたま間違えるので，そのときはユーザが陽に与えればよい）する仕組みもあるので，プリプロセッサなどを挟む仕組みは用意しておいてほしい．なお，各種記号は（音ではなく）そのまま扱い，ラテンアルファベット，ギリシア文字，キリル文字からなる単語は，元の言語の自然な整列順序に従えばよいとしたい．

なお，索引のことまで考えると以下の点までは最初に説明しておくのがよかろう．

> 索引の見出し（グルーピング）に関しては，その分量や著者，編集者，出版社などによってもまちまちではある．もっとも大雑把には，
> 記号・数字・ギリシア文字／アルファベット／あ／か／さ／た／な／は／ま／や／ら／わ
> とされるだろう．ただし，「あ」は「ア」にも「あ行」にも「ア行」にも「あ～お」にもなりうる．また，分量が多ければ，「アルファベット」は A..Z に分解されるし，「あ／…／わ」についても「あ／い／う／え／お／か／き／…／わ／を／ん」になりうる．
knockout-validationでBootstrapのform-groupにhas-errorを付ける

# knockout-validation の decorateInputElement

[knockoutjs](http://knockoutjs.com) + [knockout-validation](https://github.com/Knockout-Contrib/Knockout-Validation) を使うと、フォームのフィールドへの入力値をリアルタイムに検証し、その結果をユーザーにフィードバックする動的フォームをかなり容易に作成できます。

特に、knockout-validation に decorateInputElement: true を与えると、エラーのある input に validationElement クラスを付与できるため、border-colorを変えるなどしてエラー箇所を分かりやすく表示できます。(このオプション、以前は decolateElement と呼ばれていたのですが、[名前が変わったそうです](https://github.com/Knockout-Contrib/Knockout-Validation/wiki/Configuration))

# Bootstrap との組み合わせ

ところがこれを [Bootstrap](http://getbootstrap.com/) と組み合わせようとすると、ちょっと困ったことになります。

なぜなら Bootstrap ではエラーのあるコントロールの表示を変えるのに input 自身ではなくそれを囲む div.form-group に has-error というクラスを指定しなければならないためです。

knockout-validation では errorElementClass というオプションで、エラーのあるコントロールに付与するクラス名を指定できますが、コントロールを囲む div.form-group にクラスを追加するという機能はないようです。

# そこで

コントロールの parentNode をたどり、.form-group にマッチするものに has-error を追加するコードを以下のように書きました。

```js
// 要素の親のうち form-group であり、なおかつエラー要素を含むものに 
// config.errorParentClass クラスを指定する
var original_handler = ko.bindingHandlers.validationElement.update;
ko.bindingHandlers.validationElement.update =
    function (element, valueAccessor, allBindingsAccessor) {
        original_handler(element, valueAccessor, allBindingsAccessor);
        var config = ko.validation.utils.getConfigOptions(element);
        var group = $(element).parents('.form-group');
        group.toggleClass(
            'has-error',
            group.find("."+config.errorElementClass).length > 0
        );
    };
```

１つの form-group に複数のコントロールが含まれる場合、１つでもエラーになるものがあれば has-error となるようにしてあります。

# jsfiddle で確かめられます

上記のコードは以下の jsfiddle で確かめられます。

http://jsfiddle.net/6B332/1/
【Rails】ActiveAdmin内のjust-datetime-pickerでタイムゾーンをTokyoにする

ActiveAdmin内でDateTimeオブジェクトを扱う際に、標準のテキストボックスに日時を入力する形式は少し不便です。

そんな時下記を使うと、カレンダーから日付をピックアップすることができます。
https://github.com/mspanc/just-datetime-picker

ただ、残念ながらUTCのみに対応しておらず、Tokyoのタイムゾーンで日付を入力することができません。

just-datetime-pickerをforkして修正された下記を使うと良いです。
https://github.com/adriantoman/just-datetime-picker

これをRailsのGemfileに書き込んで、任意のファイルのedit画面に下記を追記しましょう。

      f.input :datetime, as: :just_datetime_picker, :input_html => { :value => { :combined_value => resource.datetime.in_time_zone("Tokyo"), :date => resource.datetime.in_time_zone("Tokyo")}}

あとはうまいことTokyoゾーンで日付を入力することができます。
jsonschema validation on flask

jsonschema をつかってpostされてきたjsonのバリデーションを行い、エラーのあるフィールドがあったら処理を中断してどこにエラーがあったのかをステータスコード400のjsonでレスポンスする


```py:app.py
from flask import Flask
app = Flask(__name__)

import json_schema
import json


schema = {
  "name": {
    "type": "string",
    "required": True
  },
  "age": {
    "type": "number",
    "required": True
    "maximum": 120,
    "minimum": 0
  }
}

@app.route("/")
@json_schema.validate("POST", schema)
def index():
    if request.is_post:
        data = json.loads(request.data)
        print data["name"]
        print data["age"]
        return "Hi! "+data["name"]
    else:
        return "Hi!"

if __name__ == "__main__":
    app.run()
```

-----

https://gist.github.com/yuiseki/9715d6289ff65fa6e1b2

```py:json_schema.py
import json
from jsonschema import ValidationError, exceptions
from jsonschema.validators import Draft3Validator
 
from functools import wraps
 
from flask import _request_ctx_stack, request, jsonify
 
def _validate(schema, data):
    reqv = Draft3Validator(schema)
    errors = []
    for e in reqv.iter_errors(data):
        errors.append(dict(name=e.path[0], reason=e.validator))
    return errors
 
def validate(method, schema):
    def decorator(f):
        @wraps(f)
        def decorated_func(*args, **kws):
            ctype = request.headers.get("Content-Type")
            method_ = request.headers.get("X-HTTP-Method-Override", request.method)
            if method_.lower() == method.lower() and "json" in ctype:
                data = json.loads(request.data)
                errors = _validate(schema, data)
                if len(errors) > 0:
                    resp = jsonify(result="failure", reason="invalid json", errors=errors)
                    resp.status_code = 400
                    return resp
            return f(*args, **kws)
        return decorated_func
    return decorator
```
arachni によるクロスサイトスクリプティングのテスト

最近セキュリティ周りが盛り上がっていて、現場でもセキュリティテストをどうしているのかと話にあがったので調べてみたら、面白いGemsがあったので試してみた記録を共有

## 公式サイト
こちらを参照 → [arachni](http://www.arachni-scanner.com/ "arachni")

## arachni のインストール
gems になっているためRubyさえ入っていれば、あとはいつも通り gem install するだけです。

```
$ gem install arachni
```

Ruby1.9.3 から対応しているみたいなので、2014/5/12現在の公式のRuby環境には対応しているみたいです。
Ruby2.1.2 で試してみたところインストールは出来ましたが、実行中に落ちるのでRuby2.0ぐらいで試すのが良いかもしれません。
Github上のissuesにはv0.5では対応している雰囲気でしたが、私はまだ試しておりません。

## arachni の実行

実行は、arachni コマンドにURLを入力するだけで実行できます。
最初は自分が所持しているJenkinsに対してXSSのテストをしてみましたが、数日程度たっても終了しなかったためある程度大きくなると実行に時間がかかる可能性もあるため注意が必要そうです。

```
$ arachni http://localhost
```

## arachni にてレポート出力

XSSのテストを実行してくれても見える形にレポートを出力してくれないと上長に提出できない方もいらっしゃると思うので、レポートの出力の仕方は下記となります。

```
$ arachni -fv http://localhost --report=afr:outfile=test.com.afr
$ arachni --repload=test.com.afr --report=html:outfile=my_report.html
```

上記を実行するとテストを行ってから afr形式にてレポートを出力し、その後、afr形式をhtml形式にて出力しております。
html形式以外にも下記の形式にならば出力は可能なようです。

```
・HTML
・Metareport
・Marshal
・YAML
・Arachni
```

## 最後に
セキュリティに関してのテストツールは日本語の資料も少なく、情報も少ないと思っていますが、この記事が誰かの役に立ったのならば幸いです。
２Ｄシューティングの備忘録

クリックした位置に弾を飛ばす

            var v = Input.mousePosition;
            v.z = transform.position.z - Camera.main.transform.position.z;
            var worldVector3 = Camera.main.ScreenToWorldPoint(v);
            worldVector3.x += -mEmitter.transform.position.x;
            worldVector3.y += -mEmitter.transform.position.y;

            var bullet = (GameObject)Instantiate(mBulletPrefab, mEmitter.transform.position, Quaternion.identity);

            var rad = Mathf.Atan2(worldVector3.y, worldVector3.x);
            var vx = Mathf.Cos(rad);
            var vy = Mathf.Sin(rad);

            bullet.rigidbody2D.velocity = new Vector2(MoveSpeed * vx, MoveSpeed * vy);
iPadとiPhoneで定数値をかえたい場合にカテゴリを定義する

みなさんInterface BuilderやStoryboardは使っているでしょうか？

自分は作り込みのしやすさからコードでViewを構築することの方が多いです。
その際、できるだけiPhoneかiPadかで処理を分けずに対応したいのですが、どうしてもViewのサイズやフォントサイズ、マージンなどの定数値を分けたい時があります。
「iPhoneの時は幅100ptでiPadのときは幅200ptにしたい」などですね。

そもそも絶対値ではなくて相対的に定まるようにした方がいいだろ、とか突っ込みはあるかと思いますが、どうしても避けられない時もあるのです(たぶん、、、)

その際にどうやって対応しているのかを参考程度に共有いたします。

僕の場合は処理分けの箇所が多いときは別途カテゴリに定数をまとめます。

```YPPView+ViewSpec.h
#import "YPPView.h"

@interface YPPView (ViewSpec)
+(CGFloat)itemWidth;
@end
```

```YPPView.ViewSpec.m
#import "YPPView+ViewSpec.h"

static const CGFloat kItemWidthForPhone = 100.f;
static const CGFloat kItemWidthForPad = 200.f;

@implementation YPPView (ViewSpec)

+(CGFloat)itemWidth
{
  if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad){
    return kItemWidthForPad;
  } else {
    return kItemWidthForPhone;
  }
}
@end
```

```YPPView.m
-(void)layoutSubviews
{
  [super layoutSubviews];

  self.item.frame = CGRectMake(0.f, 0.f, [self.class itemWidth], 50.f);
}
```

カテゴリに分けるとViewの実装部に分岐が入らずにスッキリします。
どうしても処理分けが必要で、かつ箇所が多い場合はこんな感じで対応しています。

ちなみに、こんな風にもアクセスできます。

```YPPView.m
-(void)layoutSubviews
{
  [super layoutSubviews];

  self.item.frame = CGRectMake(0.f, 0.f, YPPView.itemWidth, 50.f);
}
```

クラス変数風でかっこいいですね！
補完効かないみたいですけど。
自分使ってませんけど。
１文字のQStringが半角英字かどうかを判定

# ![yotsuba_s.jpg](https://qiita-image-store.s3.amazonaws.com/0/36751/ba04f0f8-9c02-ffc6-0603-467f65afd633.jpeg)方法１

QString１文字が半角英字（アルファベット）かどうかを判定する関数を作ってみた。（Qtにそんな関数がすでにあるのか探したけど見つからず…）

```cpp:
bool isAlphabet(QString a)
{
    int u = a.constData()->unicode();
    // A~Z or a~z
    return (65 <= u && u <= 90) || (97 <= u && u <= 122);
}
```

ASCII CODE（アスキーコード）はこんな取り方。

```cpp:
QString("A").constData()->unicode(); // 65
QString("Z").constData()->unicode(); // 90
QString("a").constData()->unicode(); // 97
QString("z").constData()->unicode(); // 122
```

# ![yotsuba_s.jpg](https://qiita-image-store.s3.amazonaws.com/0/36751/ba04f0f8-9c02-ffc6-0603-467f65afd633.jpeg)方法２

コメントで教えていただいた方法もあります。こちらの場合、文字コード（65とか、90とか）を意識しなくてよいぶんスマートに書けます。

```cpp:
bool isAlphabet(QString a)
{
    QChar ch = a.at(0);
    return ch.isLetter() && (ch.isLower() || ch.isUpper());
}
```
herokuでRuby on rails を動かす時の注意点まとめ

標準設定ではエラーになってpush出来ないので下記設定を追加しましょう。

# sqliteに対応していないのでPostgreSQLに

■gemfileを
`gem 'sqlite3'`
から
`gem 'sqlite3', groups: %w(test development), require: false
gem 'pg', groups: %w(production), require: false`

■databade.ymlを変更
`production:
  adapter: pg
  database: db/production.pg
 #  adapter: sqlite3
 #  database: db/production.sqlite3
  pool: 5
  timeout: 5000`

# .css等のassetsファイルが読み込まれない
Rails4だと読み込まれていない。
対処するには、
/config/environments/production
の下記設定を変更/追加する。

`config.cache_classes = true
config.serve_static_assets = true
config.assets.compile = true
config.assets.digest = true`


他にも何かあれば追記するのでコメントをお願いします！
Javaで相関関係がある列挙型を定義する


**[この記事はTumblrでも公開しています](http://yutaono.tumblr.com/post/85515055398/java)**

## はじめに

Javaの列挙型はメソッドを持つことはできますが、メソッド中で識別子による条件分岐処理を入れることは、列挙型の特徴を捉えておらず、また可読性の面であまりいい設計ではありません。

その問題を解消するための方法を忘備録としてメモします。

## 方法
例として、Colorという列挙型を考えます。Colorは、WHITE識別子の裏はBLACK、またBLACK識別子の裏はWHITEという相関関係を持ちます。


まず一番シンプルな列挙型は以下のようになります。

```java
enum Color {
	WHITE, BLACK;
}
```

これに、WHITEの裏はBLACK、またBLACKの裏はWHITEという相関関係を定義するために以下のようにinverseメソッドを定義します。

```java
enum Color {
	WHITE, BLACK;
	
	public Color inverse() {
		if (this == WHITE) {
			return BLACK;
		} else {
			return WHITE;
		}
	}
}
```

この書き方でも期待した動作はしますが、例えばコンストラクタを持たせた場合、列挙型Colorの性質を表す部分が分離して可読性が下がります。

そこでインスタンス変数とコンストラクタを用いて、以下のように設定しようとしました。

```java
enum Color {
	WHITE(BLACK), BLACK(WHITE);

	public final Color inverse;
	Color(Color inverse) {
		this.inverse = inverse;
	}
}
```

しかし、これはコンパイルするとエラーがでます。

```
$ javac Color.java
Color.java:2: エラー: 前方参照が不正です
    WHITE(BLACK), BLACK(WHITE);
          ^
エラー1個
```

WHITEのコンストラクタが呼ばれた時に、まだ宣言されていないBLACKを参照していることが原因です。

これを解決するために、Color列挙型に抽象メソッドを宣言し、それぞれの識別子で独自関数としてオーバーライドしました。

```java
enum Color {
    WHITE{
        @Override
        public Color inverse() {
      	     return BLACK;
        }
    },
    BLACK{
        @Override
        public Color inverse() {
            return WHITE;
        }
    };

    abstract Color inverse();
}
```

これによって今後の拡張をする際にも列挙型の性質を一つの部位に書くことができます。


## まとめ
- コンストラクタで相関関係を定義すると、前方参照のエラーが起きる。
- 相関関係を定義するときには、抽象メソッドを識別仕事に独自関数としてオーバーライドして実現する。
postgresql+phpの環境構築 (Mac OSX, Marvericks)


apacheとphpはMacに標準で用意されているものを使い、postgresは[Homebrew](http://brew.sh/)でインストールした。

Homebrewでpostgresqlのインストール
---------

```bash
$ brew install postgresql
```

pgsqlの拡張機能を追加
--------
標準で用意されているphpには，pgsqlの拡張機能が入ってない．
ソースコードをダウンロードして，インストールした．
標準で入っているphpと同じバージョンのものをダウンロードし，適当な場所に解凍し，

```bash
$ ./configure
```

をする．問題なければ，拡張機能のディレクトリに移動し，`phpize`を実行する．

```bash
$ cd ext/pgsql
$ phpize
```
autoconfがないとエラーがでた．

```
Configuring for:
PHP Api Version:         20100412
Zend Module Api No:      20100525
Zend Extension Api No:   220100525
Cannot find autoconf. Please check your autoconf installation and the
$PHP_AUTOCONF environment variable. Then, rerun this script.
```

Homebrewでautoconfをインストールし，再度`phpize`を実行すると，configureが作成されたので，pgsqlをコンパイルし，インストールした．

```bash
$ brew install autoconf
$ phpize
$ ./configure
$ make
$ cp modules/pgsql.so /path/to/php_extension_dir
```

php.iniの編集
----
phpの設定ファイルphp.iniにpgsqlの行を追記．

```
extension=pgsql.so
```

設定ファイルに書かれている行のコメントを外せばいいのかと思いきや，

```
;extension=php_pgsql.dll
```

これはwindows用のdllファイル．紛らわしかった．
apacheを再起動して，`phpinfo()`で，pgsqlが読み込まれていることを確認できた．
svnリポジトリをgithubにup

### 準備

authors.txt を用意

~~~
(svn ユーザ名)=(GitHubユーザ名) <GitHubメールアドレス>
~~~

ユーザ名がなくてもメアドさえあれば紐づけてくれるようでした

~~~
$ cat authors.txt
user0001=mist-dev <mist-dev@example.com>
user0002=hoge <hoge@example.com>
user0003= <fuga@example.com>
~~~

今回は以下のディレクトリで作業します

~~~
~
└ workspace
    ├ authors.txt
    └ $REPO_NAME
~~~

### うp

svnリポジトリをgit-svnでコンバートしてpushしたらエラーに

~~~
$ cd ~/workspace
$ git svn clone --authors-file=authors.txt -s svn://xxx.xxx.xxx.xxx/$REPO_NAME $REPO_NAME
$ cd $REPO_NAME
$ git remote add origin https://github.com/$REPO_NAME.git
$ git push origin master

Counting objects: 7406, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2594/2594), done.
error: RPC failed; result=22, HTTP code = 0
fatal: The remote end hung up unexpectedly
Writing objects: 100% (7406/7406), 1.94 MiB, done.
Total 7406 (delta 2709), reused 7132 (delta 2483)
fatal: The remote end hung up unexpectedly
fatal: expected ok/error, helper said '2004?݊Ňm????/z?Le?Q? ?L?
                                                                   ???h?$?1;/T'
~~~

http://kkurahar.github.io/blog/2013/09/21/stash-new-repo/ をみたところGitのバージョンが怪しそう

~~~
$ git --version
git version 1.7.4.4
~~~

HomeBrewでgitをインストールし、そちらをみるよう設定する

~~~
$ brew install git
$ vi ~/.bash_profile
# こんなかんじでPATHに/usr/local/binを優先

export PATH=/usr/local/bin:$PATH
~~~

.bash_profileを読み込み直し、git のバージョンを確認

~~~
$ source ~/.bash_profile
$ git --version
git version 1.9.3
~~~

git-svnからやりなおし再度push

~~~
$ cd ~/workspace
$ git svn clone --authors-file=authors.txt -s svn://xxx.xxx.xxx.xxx/$REPO_NAME $REPO_NAME
$ cd $REPO_NAME
$ git remote add origin https://github.com/$REPO_NAME.git
$ git push origin master

Counting objects: 7406, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2592/2592), done.
Writing objects: 100% (7406/7406), 1.94 MiB | 626.00 KiB/s, done.
Total 7406 (delta 2712), reused 7132 (delta 2485)
To https://github.com/$REPO_NAME.git
 * [new branch]      master -> master
~~~

無事GitHubにソースをあげることができました
`rails new -m` で指定する初期化テンプレートを自動生成

「毎回 `devise`とか`rspec`とか`Gemfile`に書いて色々と初期化するのめんどくせー。」という人のためにRailsには `rails new -m TEMPLATE`という便利なオプションが提供されています。

## テンプレートを自動生成

とはいえ「テンプレートも作るのもめんどくせー。」と7つの大罪の一つに完全に侵されてる人達も多いことでしょう。そういう人向けに自動初期化テンプレート自体を自動生成してくれるサービスがあります。

http://railswizard.org/

で適当に使いたい機能をクリックで追加して、`Finish`を押すだけで初期化テンプレートが作成されます。`rails new -m`はURLでも引数に取れるのでいちいちテンプレートファイルをダウンロードしてくる必要さえなし。怠惰ばんざ～い！
Androidアプリでタッチした位置(座標)を取得する方法

**Androidアプリでタッチした位置(座標)を取得する方法**
--------------------------------------------------------------------

画面でタッチした位置を取得する方法をメモ。
（簡単すぎるが、あまり使わないので忘れがちのため）

アプリを起動して画面をタッチした場合、ActivityクラスのonTouchEventが呼び出される。その際に引数として渡されるMotionEventクラス内のメソッドを使用することでタッチした位置(座標)を取得できる。

**■実装方法**
=====================================================================

タッチしたX軸とy軸の位置を取得する処理をonTouchEvent内に記載する。

```java
public boolean onTouchEvent(MotionEvent event)
{
	//X軸の取得
	float pointX = event.getX();
	
	//Y軸の取得
	float pointY = event.getY();
	
	//取得した内容をログに表示
	Log.d("TouchEvent", "X:" + pointX + ",Y:" + pointY);
	
	return true;
}
```

以上、参考まで。

---
[簡単家計簿 Androidアプリ](https://play.google.com/store/apps/details?id=jp.example.keepingbook.app&hl=ja)
[Rails 4.x] devise でサインイン・アウト(ログイン・アウト)した後のリダイレクト先の変更

# サインアウト後のリダイレクト先指定

```rb:app/controllers/application_controller.rb
class ApplicationController < ActionController::Base
  private

  # Overwrite the url
  def after_sign_out_path_for(resource_or_scope)
    root_path
  end
end
```

# サインイン後のリダイレクト先を指定

```rb:app/controllers/application_controller.rb
class ApplicationController < ActionController::Base
  protect_from_forgery

  # Overwrite the url
  def after_sign_in_path_for(resource)
    "/logout"
  end
end
```
Gradle + Coberturaでsrc/test/resources以下のファイルがリソースとして読み込まれない

test/resourcesに依存したテストを書いている場合、
<code>./gradlew test</code>だとテストが成功するが、
<code>./gradlew cobertura</code>だとテストが成功しない。

./gradlew coberturaの時は、どうやらリソースを見に行ってくれる先が、<code>$buildDir/instrumented_classes</code>になっているらしい。

<code>$buildDir/instrumented_classes</code>にクラスを持って行ったりとかはcoberturaReportタスクでしているカバレッジリポートを取得するための準備作業らしいのだけれども、コレが原因でJenkinsさんが怒りまくるので、以下をtestタスクに書いて回避した。

訂正）間違えてた。。。アクションになってないからClearしちゃうとダメになってました。

```groovy:
def instDir = "$buildDir/instrumented_classes"
task setInstResources(){
    dependsOn 'testClasses'
}
setInstResources << {
  copy{
    from sourceSets.test.output.resourcesDir
    into instDir
  }
}
test {
  dependsOn 'setInstResources'
  useJUnit()
}
```
WindowsのRails開発環境からLinuxへCapistranoでdeployするとコケる

## 前提条件
- `Capistrano`はdeployするときに`Gemfile.lock`が必要になります。
- Windowsで作成された`Gemfile.lock`はLinux環境と互換性がありません。

はい、詰んだ。

4年前から問題になってるそうですが未だに解決していません。Windows冷遇されすぎじゃないですか？

## 対策1

一旦Linux環境に`git pull`してそこで`Gemfile.lock`を作り直す。

欠点: Windowsで開発がしたいっつってんだろうが！

## 対策2

`Gemfile.lock`を直接いじる

具体的には`pg (0.17.1-x86-mingw32)`などWindowsっぽいところを`pg (0.17.1)`に変更する。

欠点: 自動生成されるファイルをいじるの気持ち悪い。

## お願い
自動化できそうな気もするので誰かこのためのCapistranoのtaskを書いてくれませんか？

## 参考

https://help.ninefold.com/hc/en-us/articles/201335424-Deploying-a-Windows-Created-Rails-App
Mac上のPhpStormにTomorrow Themeのカラー設定をインポートする


# Tomorrow Themeをcloneしてくる
- githubからcloneする

```bash
$ git clone git@github.com:chriskempson/tomorrow-theme.git
```

# Tomorrow ThemeをPhpStormにインポートする
- PhpStormのメニューバーの `File -> Imports Settings` を選択。
- さきほどcloneしたコードの `tomorrow-theme/Jetbrains/settings.jar` をインポートする。
- PhpStormを再起動する
- 再起動後は `Tomorrow` のカラーが設定されている。

Tomorrowで良い人はこれで終わり。

# Tomorrow Nightにしたいひと
- `PhpStorm -> Preferences` を選択
- `Preferences` の中の `Editor -> Colors & Fonts` を選択肢し、 `Tomorrow Night` に変更し、OKを押す。
- PhpStormを再起動して反映を確認。
TypeScript を使った Node.js の開発環境 (無料版)

![Node.js](http://nodejs.org/images/logos/nodejs.png "Node.js")
![TypeScript](http://www.typescriptlang.org/content/images/logo_small.png "TypeScript")

できれば、[こちら(Professional版)](http://qiita.com/akmiyoshi/items/13b4d81e0d11d172780f)の開発環境をオススメしますが。
Visual Studio Express 2013 for Web で TypeScript を使った Node.js の開発環境が無料で構築できます。
Visual Studio Express 2013 for Web は、[こちら](http://www.visualstudio.com/ja-jp/downloads/download-visual-studio-vs.aspx)からダウンロードできます。

#1. Windows OS のバージョンを確認します。
サポートされる OS を以下に挙げます(Windows Server 系を除きます)。

|OS          |サービスパック          | x86/x64               |
|:----------:|:----------------------|:----------------------|
|Windows 7   |Service Pack 1 (SP1) 　|x86 および x64          |
|Windows 8   |                       |x86 および x64          |
|Windows 8.1 |                       |x86 および x64          |

#2. Windows 7 Service Pack 1 をインストールします。
Windows 7 で Service Pack 1 が入ってない場合は Service Pack 1 をインストールします。
Windows 8 および Windows 8.1 の場合は 4. に進みます。
   【Windows 7 Service Pack 1 (SP1) をインストールする方法】
    　⇒ http://windows.microsoft.com/ja-jp/windows7/learn-how-to-install-windows-7-service-pack-1-sp1
> Windows 7 SP1 がすでにインストールされているかどうかを調べる方法もこちらのサイトで解説されています。

#3. Internet Explorer 11 をインストールします(Windows 7 のみ)。
Windows 7 で [Internet Explorer のバージョンが 10 より下の場合](http://www.microsoft.com/ja-jp/security/pc-security/ver_ie.aspx)は Internet Explorer 11 をインストールします。
   【Internet Explorer 11 のダウンロード】
    　⇒ http://windows.microsoft.com/ja-jp/internet-explorer/ie-11-worldwide-languages

#4. Visual Studio Express 2013 for Web をインストールします。
   【Visual Studio Express 2013 for Web ダウンロードサイト】
    　⇒ http://www.visualstudio.com/ja-jp/downloads/download-visual-studio-vs.aspx

#5. 「Visual Studio 2013 Update 2 RC」をインストールします。
   【ダウンロードサイト】
    　⇒ http://www.microsoft.com/ja-jp/download/details.aspx?id=42307

#6. Node.js をインストールします。
　　以下のダウンロードサイトから「Windows Installer (.msi)」をダウンロードします。
　　32-bit または 64-bit は OS に合わせてください。インストールオプションはデフォルトのままでお願いします。
   【ダウンロードサイト】
    　⇒ http://nodejs.org/download/
![2014-0512-1700.png](https://qiita-image-store.s3.amazonaws.com/0/32879/19e7eab1-8cc9-5622-caeb-831586e38c35.png)

![2014-0512-1346.png](https://qiita-image-store.s3.amazonaws.com/0/32879/17cae8fa-ccbd-de1b-194c-27266c76be48.png)

#7. Node.js Tools for Visual Studio (ベータ版)をインストールします。
   【ダウンロードサイト】
    　⇒ https://nodejstools.codeplex.com/
![2014-0512-2313.png](https://qiita-image-store.s3.amazonaws.com/0/32879/772b85aa-4613-5aa9-876e-2657b92dd7f9.png)


以上で開発環境が完成しました。
使い方はまた今度～。

# 参考

* [TypeScript を使った Node.js の開発環境 (Professional版)](http://qiita.com/akmiyoshi/items/13b4d81e0d11d172780f) (有料だけどオススメ。90日間無料で評価版として使用可能です)

# スクリーンショット

![2014-0512-1744.png](https://qiita-image-store.s3.amazonaws.com/0/32879/2d703540-03fa-fa6e-f411-ceb9c3c6f9b3.png)

![2014-0507-1951.png](https://qiita-image-store.s3.amazonaws.com/0/32879/b277de70-bdbc-2acc-4bf4-35a6a6e09d39.png)

![2014-0507-1955.png](https://qiita-image-store.s3.amazonaws.com/0/32879/47b89a8c-23dc-72ea-8d99-68918e2f7b99.png)


![2014-0507-2009.png](https://qiita-image-store.s3.amazonaws.com/0/32879/6e08ee83-9eb2-cdea-adbe-ceab9af4ba6d.png)
[Rails] rescue_fromは後に書いた指定が優先される

`application_controller.rb` に `rescue_from` を書いて Exception を扱うことがよくあると思います。今日はこの優先順位でハマりました。最初はステータスコードの番号順だよねという単純な理由で以下のようにしていました。

```rb:app/controllers/application_controller.rb
  rescue_from CanCan::Unauthorized, with: :render_403
  rescue_from Exception, with: :render_500 if Rails.env.production?
```

`render_500` の中ではエラーをメールで飛ばす処理とかが実装されているので、本番だけ動かすようにしていました。この指定で、開発環境では `CanCan::Unauthorized` は正しく `render_403` で拾うことができました。

ただ、このコードを production に載せると問題が発生しました。 `CanCan::Unauthorized` は `render_500` に行ってしまうのです。「テストも通っていたのになぜ……」と悩みましたが、どうやらこの指定は後に指定したものが優先されるようです。上記の指定では、 `if Rails.env.production?` がついているせいで後に指定したものが無視されていました。

## 結論

`CanCan::Unauthorized` を優先するため後に書き、 `unless Rails.env.development?` に変えました。 こうしておくことで test と production を同じ動きにすることができ、正しくテストを落とせます。

```rb:app/controllers/application_controller.rb
  rescue_from Exception, with: :render_500 unless Rails.env.development?
  rescue_from CanCan::Unauthorized, with: :render_403
```
UUIDについて


ここで言うUUIDとは Universally Unique Identifier のこと。


# Androidでの生成方法

```
UUID.randomUUID().toString()
```

参考: [UUID | Android Developers](http://developer.android.com/reference/java/util/UUID.html)


# iOS での生成方法

```
NSString *uuid = [[NSUUID UUID] UUIDString];
```

参考1: [UUIDの作り方 – Objective-C, iOSアプリ開発 i Devris](http://i.devris.info/creating-uuid)
参考2: [NSUUID Class Reference](https://developer.apple.com/library/mac/documentation/Foundation/Reference/NSUUID_Class/Reference/Reference.html)


# Unity での生成方法

Mono(.NET)が提供するSystem.Guidクラスで簡単に生成できる。（GUIDはUUIDの実装のひとつ）

```
System.Guid guid=System.Guid.NewGuid();
```

参考： [【Unity】UUIDの生成と保存 - KYUCON*BLOG](http://www.kyucon.com/blog/2014/01/unityuuid.html)


# その他参考

UUIDはOFSで標準化されているらしい

* [UUID - Wikipedia](http://ja.wikipedia.org/wiki/UUID)

GUIDはUUIDの実装のひとつ

* [GUID - Wikipedia](http://ja.wikipedia.org/wiki/GUID)

以下のページで iOS でのUUID生成はCFUUIDを使っているが（この記事が書かれた時期的な問題と思われる）、現時点では前述のNSUUIDを使う方法が簡単っぽい。

* [アプリケーションで一意のIDを生成、取得する - Kazzzの日記](http://d.hatena.ne.jp/Kazzz/20120531/p1)

MonoでのGuid.NewGuidの動作について書かれた記事、後で読む。

* [mono での NewGuid と RngCryptoServiceProvider - やこ～ん SuperNova2](http://d.hatena.ne.jp/saiya_moebius/20090319/1237419298)
Android で通知を出すときに必要なパーミッション

通知時にバイブレーションするのであれば、以下のパーミッションを取れば良いだけ。

```xml

<uses-permission android:name="android.permission.VIBRATE" />
```

しかし、通知を出すためだけに、通常は必要のない以下のパーミッションを要求する端末がある（Optimus シリーズのとある端末）。

```xml

<uses-permission android:name="android.permission.WAKE_LOCK" />
```

通知を出したら`SecurityException`で落ちた、と言う時にはこれを疑う。
kibana + elasticsearchで"No result"とかいう青いバナーが出た時の対処法

# Trouble

fluentd + elasticsearch + kibanaがなかなか言うこと聞いてくれない。状況的には、一つのfluentdのノードからログを飛ばして、elasticsearchに突っ込んで、kibanaで見ようとしているが、見えない。

`No results There were no results because no indices were found that match your selected time span
`
という青いバナーがkibana上にでてくる。elasticsearchがうまく読み込まれていないっぽい？

# Research
apacheのmod_rewriteで曲げてelasticsearchにアクセスをしている。とりあえず、曲げ先のurlにアクセスして、elasticsearchの200がみれるか確認したところ、表示されたので、疎通はしている。

fluentdが生きているかnode/masterで確認
`$ ps aux | grep fluentd`

LISTENされているか確認
`$ netstat -an | grep 24224`

パケットが飛んでいるか確認
`$ /usr/sbin/tcpdump port 24224`

通信されている。fluentdのmasterのログをみて、飛んできていることも確認済み。

ということは、elasticsearchが死んでいる or fluentd->elasticsearchの部分がうまくいっていないっぽい。elasticsearchのlogが更新されていない。。

elasticsearch の設定を見直すことにした。

[fluentd -> Elasticsearch 大量データ転送でトラブル | diaspora](http://blog.kakipo.com/trouble-with-fluentd-and-elasticsearch/)

しかしうまくいかない。。

# Workaround
kibanaでelasticsearchの中身が無いよっていうバナーがでていたので、elasticsearchのエラーかと勘違いしていたが、いろいろと調査していくと、
[Kibana3というのもありまして - @johtaniの日記 2nd](http://blog.johtani.info/blog/2013/06/19/introduction-kibana3/)

どうやらkibana側とelasticsearch側で日付だとかindexだとかをあわせる必要があるらしい。（*とかで検索すればいい感じに出してくれるのかと思っていた…）
とりあえず、kibanaの右上の歯車マークから、indexのタブにいって、Index patternに[]付きでindexの名前を書いたところ、上手くいった。

`$ curl -X GET localhost:9200/_cat/shards
apache_access-201405 0 p STARTED 940 313.2kb 100.67.120.153 Sugar Man`

この場合は`[apache_access-201405]`こう書いて、リフレッシュする。

ちょっと設計考えないとノリではダメな感じになっている。