OmniAICreator/Qiita-1.07M huggingface dataset:
シンプルなユーザー登録の修正

[前回作成した「シンプルなユーザー登録」](http://qiita.com/altere5/items/33510ac8253c075cafad)の問題点や改善を行った方がよい部分の修正を行う。

**<font color="#dc143c">※なお、元記事側では本件の修正内容（文字種チェックの実装、暗号化ロジックの変更等）の反映と、さらにその他の修正を反映しておりますので、最新版のソースは[「シンプルなユーザー登録」](http://qiita.com/altere5/items/33510ac8253c075cafad)側をご確認ください。</font>**

#問題点の確認

前回作成した「シンプルなユーザー登録」には以下のような問題や改善点がある。

1. ユーザーが重複登録されてしまう
2. パスワードの検証が行われていない

上記について修正を行う。

#｢1.ユーザーが重複登録されてしまう｣問題の修正

この問題は、通常同一メールアドレスを持つユーザーは多重登録できないが、現状の実装では重複登録ができてしまう問題。

##問題の原因と修正内容

原因は登録時にメールアドレスの重複を行っていない為
今回は登録時の検証ルールに重複をチェックするルールを実装し、多重登録が行われないように修正を行う。

対応としては標準で準備されているisUniqueルールを利用し重複をチェック。
※コメント欄でのご指摘ありがとうございます

#｢2.パスワードの検証｣を実装

先日のユーザー登録画面ではパスワード欄が１つしかなく、万が一誤入力した場合ユーザーはその事に気づくことができない。
その為、パスワードについては確認の為に２回入力させる方がよいと思われる。

##修正内容

入力フォーム上に確認用の入力フィールドを準備し、二つのフィールドの入力内容の一致チェックを行う。

具体的には新しくpasswordConfirmメソッドを追加。
passwordフィールドとpassword_confirmフィールドを比較し結果を返す。
一致していればTrue、一致していない場合はFalseを返しエラーとする。

```php:passwordConfirm
	public function passwordConfirm($check){

		//２つのパスワードフィールドが一致する事を確認する
		if($this->data['User']['password'] === $this->data['User']['password_confirm']){
			return true;
		}else{
			return false;
		}

	}
```
レビュー時の勘所２ ActiveRecordのオブジェクトから何かを作る

たとえば、一部のattributeだけを突っ込んだArrayを作りたい場合

```rb
result = [
	  user.first_name,
	  user.last_name,
	  user.birthday
	]
```

こんなかんじに書かず、Hash#sliceを書くと少しシンプル？に

```rb
result = user.slice(*%w(first_name last_name birthday)).values
```

こう書ける

指摘+αで少し調べた。(詳しくはコメ欄)

* 実はsliceに渡すのはString(%w)じゃなくてSymbol(%i)じゃなくてOK
    * `result = user.slice(*%i(first_name last_name birthday)).values`
    * 手元で適当に試したところ、元のものから6%ほど高速化
* というかsliceしてvaluesするのなんかよりmapしてsendしたほうが早い
    * `result = %i(first_name last_name birthday).map{|m| user.send m}`
    * これまた手元で適当に試したところ、元のものから84.5%ほど高速化	

うーん。`map`使うのはなんとなく主語にあたる`user`がうしろに行きすぎて読みづらいんだけどこの速度差なら許容できる程度の誤差だな・・・

`slice`は内部で`Object#public_send`を使っているので、`send`で使えるものならなんでも(attributesに限らずメソッドでも)同様に処理することが出来る。

おそらくRubyのHashがOrderedHashになったからだと思うけれど、sliceに渡すキーの順番を変えると、valuesのArrayの順番もそれに従って変化する。
レビュー時の勘所１ if xxx.present?〜 → Object#try(ブロック渡し)

よくやるかんじの書き方

```rb
first_user_fullname = ""
if group.users.first.present?
  first_user = group.users.first
  first_user_fullname = first_user.last_name + " " + first_user.first_name
else
 first_user_fullname = "名無しさん"
end
```

これはこんなかんじに書き換えられる

```rb
first_user_fullname = group.users.first.try do |first_user|
  first_user.last_name + " " + first_user.first_name
end
first_user_fullname ||= "名無しさん"
```
RubyでHTTPステータスコードを確認する方法

## 必要なクラスとモジュール
1. Net::HTTP
2. URI

## ステータスコードを確認する
以下のコードで文字列でステータスコードが返却される

```rb:ruby
Net::HTTP.get_response(URI.parse(site.uri)).code
```

## タイムアウトも付けたい

```rb:ruby
TIME_OUT = 10 # 10秒でタイムアウト
status = timeout(TIME_OUT){
  Net::HTTP.get_response(URI.parse(site.uri)).code
}
```
デフォルトでipv6でつながってしまう問題の回避

node.js 0.12ではipv6がデフォルトでつながる。

何も指定しないでsv.listen(port)でサーバーをたててしまうとデフォルトでipv6になってしまうのでsv.listen(port,'0.0.0.0')を'0.0.0.0'を指定してipv4のアドレスを明示的にする


```
var connect = require('connect')
var bodyParser = require('body-parser')
var http = require('http')

var app = connect()
app.use(bodyParser.urlencoded({ extended: true }));
app.use(function(req, res){
  res.end('hello');
})
http.createServer(app).listen(3000, '0.0.0.0');
```

※参考
https://github.com/joyent/node/issues/9195
PlayFramework：フォームの内容をCacheに格納してViewで取り出す

# View

```scala:confirm.scala.html
@()
// Cacheと、フォーム用の内部クラスをインポート
@import play.cache.Cache;
@import controllers.TestController.TestForm;

@main("確認画面") {

// asInstanceOfでキャスト、definingでdata変数に入れる
@defining(Cache.get("data").asInstanceOf[TestForm]) { data =>

// 再格納
@Cache.set("data", data, 60 * 30)

// 表示
@data.foo

}
}
```

# Controller
```java:TestController.java

import static play.data.Form.*;
import play.cache.Cache;
import play.data.Form;

public class TestController extends Controller {

    // フォーム用の内部クラス
    public static class TestForm {
        String foo;
    }

    public static Result showConfirm() {

        // フォームの入力内容を取得
        Form<TestForm> form = form(TestForm.class).bindFromRequest();
        TestForm data = form.get();
        
        //Cacheにセット
        Cache.set("data", data, 60 * 10);

        // 確認画面へ
        return ok(confirm.render());
    }

}
```

# 何故こんなことをしたのか
フォームで入力受け付け→確認画面表示→DBにインサート
というWebアプリを作っていて、セッションで値を受け渡そうと思ったが、
PlayFrameworkのセッションは、署名によって偽装できないがただのクッキーであるらしい

そこで、従来のセッションに似た機能のCacheを使ってみた
https://www.playframework.com/documentation/ja/2.3.x/JavaCache

しかしCache.setしたは良いが、それをいざ確認画面のViewで使いたいとき
どうすれば良いかわからずにはまってしまったので解決策のメモを残す

Viewで再格納しないとその後のインサート処理で使えなかった(Cache.getしてもnullが返却される)
時間があったらソースを見て詳しい仕様を確認したい

このCacheはスレッドセーフのようなので、多分問題ないはず
http://sourceforge.jp/projects/sfnet_ehcache/
SVN+Jenkins+Redmine

# やりたいこと
## コミットしたらビルド開始
## ビルド成功したら静的解析
## ビルド成功したらテスト実施
## OneClickでリリースモジュール作成
### リリーススクリプト作成
## Redmineでレビュー
## 管理を楽にする
* プロジェクトテンプレートでお決まりのJobを作成


# コメント
* Taskerみたいにトリガとイべントを分けて考えるとよさそう。
* タグを張ったらってできるのか？
WordPress Popular Posts Plugin　で、サムネイル表示にチェックができない、、、、

ランキングを行うWordPress Popular Postsだが、
１時間以上ハマったので、書いておくと
Imagemagicか、PHP GDが無いと、チェックがつかないようにできているようです。
（ちゃんと説明を読みなよ！って思いました。） orz

##ハマった内容
どんだけ、頑張ってもサムネイルの表示にチェックして保存すると、チェックが消える。

![wp.png](https://qiita-image-store.s3.amazonaws.com/0/44315/f79290bf-2848-2486-d1cb-ad1414d5ad2b.png)


```shell-session
#yum install php56-gd
#service httpd restart
```

その後、Popular Postsを設定してみましょう。

GDが入ってるかどうかは、 phpinfo()すればわかります。
cocos2d-x(v3.4)とCocosStudio(v2.1)を併用した際に発生した問題点


cocos2d-x(v3.4)とCocosStudio(v2.1)を併用した際に、色々行き詰ま事がありました。
忘れないようにまとめておこうと思います。

## Mac版のv2.0のCocosStudioがv2.1にアップデート出来ない

<b>・問題</b>
CocosStudioを開き、「Check For Update」を実行すると、v2.1は発見されるが、
更新を行うと強制終了してしまう。 
cocos2d-x(v3.4)はCocosStudio(v2.0)のファイルを読むとバージョンエラーになるので、
CocosStudio(v2.1)のファイルを使うしかない。
（そもそもv2を使わず、v1を使う選択肢もありますが・・・）

<b>・解決法</b>
MacでCocosStudio(v2.1)の使用は諦めました。
公式HPにはv2.1は置いていなかったので、v2.0から更新するしかないようです。
Windows版は問題なく更新出来たので、面倒ですがWindows版を使おうと思います。

## CSBファイル内で設定されているファイルパスが解決出来ない

<b>・問題</b>
出力したCSBファイル内で画像などファイルパスを指定している場合に、
ファイルパスがフルパスで無いとプログラムで読み込んだ時に解決が出来ない。
（CSBファイルからのカレントパスでは解決出来ない）

Resources以下がこんな感じだとする。

~~~
.
└── Resources
    └── res
        └── Main
            ├── MainLayer.csb
            └── bg.png
~~~

MainLayer.csb内で、「bg.png」とファイルパスを指定していても、
フルパスしか解決できないため、読み込めない。
正しくは「res/Main/bg.png」と指定されていないといけない。

<b>・解決法</b>
cocos2d-xのSRCを解析したところ、JSONフォーマットでの読み込みは、
Jsonファイルからのカレントパスに対応されていました。
CSBファイルの読み込みは何故か対応されていませんでした（バグ？）。

ですので、JSONフォーマットで出力して使用すれば問題ないようです。

~~~C++
Node *node = CSLoader::getInstance()->createNode("MainLayer.json");
~~~

どうしてもCSBファイルを使いたい場合は、cocosのサーチパスに追加する方法もあります。

~~~C++
FileUtils::getInstance()->addSearchPath("res/Main");
~~~

パスが把握しづらくなるので、おすすめはしませんが。。。

## CocosStudio(v2)で出力したCSBとJSONからはNodeしか作れない

<b>・問題</b>
CocosStudio(v2)で作ったCSBからノードを作成し、ListViewに追加すると、
インスタンスがNodeなので、正常に動かない。
ListViewに正常に追加が出来るのは、Widgetのみである。

<b>・解決法</b>
CocosStudio(v1)で吐き出して、Widgetを作成するしかないような気がします。。。
現在、模索中なので情報が入り次第、更新していこうと思います。
NodeをWidgetにAddして、そのWidgetを追加する手もあるけどNodeの無駄ですよね・・・。

## LayerとSceneとNodeとWidgetの使い分けがよく分からない
特にLayerはどうゆう時に貼るべきなのかが分かりません・・・。
cocos2d-x(v2)時代は、タッチ管理をしてたけど、v3でも同じなのかなぁ。
今後、SRC解析して調べて行こうかと思います。
ここらへんを理解出来てないと、すごく作りづらい・・・
ES6 Modules 間では export/import された変数（？）は同期される


ES6 Modules に関する小ネタです。ちょっと言葉では説明しにくいのでコードを見てください。

```foobar.js
export var foo = 'Foo';
export var bar = {
  changeFoo() {
    foo = 'Bar';
  }
};
```

```index.js
import { foo, bar } from './foobar';

console.log(foo);
bar.changeFoo();
console.log(foo);
```

`babel-node index.js` と実行すると Foo Bar と 出力されます。Foo Foo ではありません。Node.js で CommonJS を書いていた人からすると、？？？となる挙動ですね。`index.js`での `foo` はただの変数ではないのです。

## CommonJS なら・・・

CommonJS で素直に同じようなモジュールを書こうとすると、以下のようになると思います。これだと当然 Foo Foo と出力されますね。`bar.changeFoo()` を呼んでも `foobar.js` の `module.exports.foo` も更新されませんし、`index.js` の `foo` も更新されません。

```foobar.js
var foo = 'Foo';
module.exports.foo = foo;
var bar = {
  changeFoo: function () {
    foo = 'Bar';
  }
};
module.exports.bar = bar;
```

```index.js
var foo = require('./foobar').foo;
var bar = require('./foobar').bar;

console.log(foo);
bar.changeFoo();
console.log(foo);
```

## ES6 Modules の仕様（？）

どうやらこれは ES6 Modules の仕様のようです。[仕様](https://people.mozilla.org/~jorendorff/es6-draft.html)のどこに書いてあるかはわからないのですが、Babel でも Traceur でもこういう挙動をするので・・・。

Babel でコンパイルした結果は以下のようになっています。

```foobar.js
'use strict';

Object.defineProperty(exports, '__esModule', {
  value: true
});
var foo = 'Foo';
exports.foo = foo;
var bar = {
  changeFoo: function changeFoo() {
    exports.foo = foo = 'Bar';
  }
};
exports.bar = bar;
```

```index.js
'use strict';

var _foobar = require('./foobar');

console.log(_foobar.foo);
_foobar.bar.changeFoo();
console.log(_foobar.foo);
```

foo は変数ではなく Object の property として参照され、常に値が同期されるようになっていることがわかります。

## だからなに？

だからどうだということもないのですが、（そういう設計が良いか悪いかは別として）変更される状態を持つ module を書く場合、以下のように無理に Object にぶら下げなくても

```
export default {
  foo: 123,
  bar: 234
};
```

気軽に直接 export できますね。

```
export var foo = 123;
export var bar = 234;
```

おわり。
VBAHaskellの紹介 その11 （木構造）

やっと「すごいHaskellたのしく学ぼう！」の７章まで進んだところ、139ページから始まる二分木の解説の中で、「リストを1要素ずつ辿って値を返す操作はたいがい畳み込みで実装できる」という表現に感銘を受けた。

```hs
let nums = [8,6,4,1,7,3,5]
let numsTree = foldr treeInsert EmptyTree nums
```
これをVABHaskellでもやってみる。VBAで木構造といえばCreateObject("Scripting.Dictionary")として連想配列が使える [^1] ようだが、キーの順序はVBAデフォルトの大小関係しか対応できない。ここは任意の比較関数を与えて連想配列を実装してみたいところだ。
ただし、きちんとした平衡二分探索木構築のアルゴリズムを実装する能力がないことと、要素を挿入した新しい木を返す関数がVBAで効率よく実装できないという問題があるが、あくまでサンプルということで前者は無視、後者はハッキング [^2] で誤魔化すことにする。
結果的に、[テストモジュール](https://github.com/mYmd/VBA/blob/master/test_module.bas)の treeTest() に書いた通り、バラバラな型のキーで木構造を作ることができた。大小比較は、「型が異なるときは変数のVarTypeで比較、配列どうしだったら次元と要素数で比較、そうでなければ数値もしくは文字列のデフォルトの大小関係」と指定したが、厳密で弱い順序関係なら何でも指定できるはずだ。ノードの集合を定義した後で、木構造自体は foldr 一発で構築している。

```vbnet
'型がバラバラで配列も含む木構造のテスト
Sub treeTest()
    Dim nodes As Variant, tree As Variant
    Debug.Print "型がバラバラで配列も含むキーによる木構造のテスト"
    '===============ノードの集合===============
    nodes = Array(makeNode(75676786, "A", p_comp000) _
                , makeNode("abc", "B", p_comp000) _
                , makeNode(iota(1, 8), "C", p_comp000) _
                , makeNode("鳥小屋", "D", p_comp000) _
                , makeNode(6, "E", p_comp000) _
                , makeNode(makeM(2, 2, iota(1, 4)), "F", p_comp000) _
                , makeNode(300, "G", p_comp000) _
                , makeNode(iota(1, 15), "H", p_comp000) _
                , makeNode("犬小屋", "I", p_comp000) _
                , makeNode(makeM(2, 3, iota(1, 6)), "J", p_comp000) _
              )
    '===============畳み込みによる木の構築===============
    tree = foldr(p_insertNode, Empty, nodes)
    '===============キーの選択===============
    Debug.Print """abc"" => ";
    printM getNode("abc", tree)
    Debug.Print """犬小屋"" => ";
    printM getNode("犬小屋", tree)
    Debug.Print "iota(1, 8) => ";
    printM getNode(iota(1, 8), tree)
End Sub

```

[VBAHaskellの紹介 その10 （ループの性能が上がらない）](http://qiita.com/mmYYmmdd/items/635986ecf38dfc4d55df)
[VBAHaskellの紹介　その1　（最初はmapF）](http://qiita.com/mmYYmmdd/items/c731edf943acc0a0ebe9)

ソースコード：
https://github.com/mYmd/VBA
dllバイナリ：
https://github.com/mYmd/VBA/blob/master/bin/mapM (32bit-Office用)
https://github.com/mYmd/VBA/blob/master/bin/mapM64 (64bit-Officey用)


[^1]: 実は使ったことがない
[^2]: 今回APIに入れたmoveVariant関数（VARIANT変数のmove）を使った
gemやらhomebrewなどのバージョンアップを忘れずに

何か新しいパッケージやライブラリの類を入れる際には、各種バージョンアップを忘れずに。
順序は　管理ツールを更新　紐づくものを更新　クリーンアップ　の順で。


<h3>homebrewと管理しているパッケージを更新</h3>

まず、homebrew自体を更新
<pre>
$ brew update
</pre>

続いて、homebrewで管理しているパッケージをまとめて更新（引数を与えずすべて更新）
<pre>
$ brew upgrade
</pre>

最後にクリーンアップ（古いバージョンのfomula:パッケージのこと）を削除
<pre>
$ brew upgrade fomula
</pre>

<h3>「RubyGems」そのものと管理しているパッケージを更新</h3>
ライブラリを管理しているRubyGemsそのものが古いと、管理しているライブラリの更新、新規追加そのものがうまくいかないこともあるみたいです。

まず、RubyGemsそのものを更新するためにrubygems-updateを更新
<pre>
$ gem install rubygems-update
</pre>

<pre>
Fetching: rubygems-update-2.4.6.gem (100%)
Successfully installed rubygems-update-2.4.6
Parsing documentation for rubygems-update-2.4.6
Installing ri documentation for rubygems-update-2.4.6
Done installing documentation for rubygems-update after 0 seconds
1 gem installed
</pre>

続いて、RubyGemsの更新
<pre>
$ update rubygems
</pre>

紐付いているライブラリの更新（下記のケースではすべて更新しているので、１５分くらいかかりました）
<pre>
$ gem update
</pre>

<h3>RubyGemsそのものを更新する方法　別解</h3>

最新のバージョンにする場合。
<pre>
$ gem update --system
</pre>

<h3>クリーンアップもわすれずにね</h3>

homebrewに関するクリーンアップ
<pre>
$ brew cleanup
</pre>

gemに関するクリーンアップ
<pre>
$ gem cleanup
</pre>


<h3>参考</h3>
Homebrewまとめ
http://qiita.com/vintersnow/items/fca0be79cdc28bd2f5e4
RubyGemsのアップデートについて
http://www.task-notes.com/entry/20150111/1420967228
ゲームのタスク管理 Version 1

# 今回について
* まず、タスクを作るために完成品だけを投稿はしません。
* 徐々に完成するためのノウハウを書いていきます。
* なので、今回はVersion 1を発表します。


# タスク管理とは？
* 各ゲームオブジェクトを1つのタスクにまとめ、そこでUpdateやRenderなどをすること。
* コマンドパターンに近いかな。
* ゲーム制作するにあたっては必ずと言っていいほど、必要に技術です。

## なんで、そんな管理法が必要なの？
* 簡単に言うと、ゲームオブジェクト分UpdateやRenderをゲーム管理する部分に書かなければならないから。
* 最初に登録してしまえば、あとはタスクでやらせるので、効率的に良い。

# タスク管理の作り方
## 1. 基底クラス作成（HierarchyBehavior）
* まず、タスクでUpdateやRenderなど統一する処理をするゲームオブジェクトの基底クラスを作る。（親クラス）
* ここで注意点なのが、基底クラスに純粋仮想関数を作るかもしれないが、これは仮想関数のほうがよい。
    * なぜなら、必ず、UpdateやRender等の統一する処理を書かないゲームオブジェクトもあるはずだからです。

## 2. 派生クラス作成（GameObject）
* ゲームオブジェクトに先ほど作成した基底クラスを継承する。
* 派生クラス(ゲームオブジェクト)に基底クラスにある仮想関数を使うものだけオーバーライドする。
* これでゲームオブジェクトの準備は完了！！

## 3. タスクになるHierarchyを作成。
* Hierarchyクラス(タスク)を作る。
* そこにHierarchyBehaviorの可変長配列を作る。
* HierarchyBehaviorに書いた仮想関数の関数をここのクラスに書く。
    * なぜなら、1つの関数で可変長配列に入っているゲームオブジェクトを回すからです。
* 作った関数の中に可変長配列をfor文等を使って、すべて回す。
* これで一通り完成だ！

## 4. タスクの使い方。
* ゲーム管理部分にHierarchyの実態を作る。
* その実態にゲームオブジェクトを登録していく。
* そして、HierarchyのUpdateやRender等を書く。
* そうすれば、登録したゲームオブジェクトが実行されます。

# 終わりに
* これで一通り完成です。
* これは、最初に考えるタスク管理法だと思います。
* 今後は、もっと便利なタスク管理法を投稿します。
今更人に聞けないJava5からの新機能

会社で上司から「お前Java書けるんだよな？」と聞かれると必ず「書けます」と回答します。
しかしその後心の中で付け加えます。(ただしすごい古いバージョンのJavaだけれど・・・）

自分が大学で勉強していた当時のJavaのバージョンはJ2SE 5.0。
Javaの勉強を始めたばかりのころ、1.4からバージョンアップしたため、自分は「Java1.5」と呼んでいたはずです。
しかしあれから10年以上経ち、いつの間にか最新版はJava SE 8になっていました。さらに来年にはJava SE 9がリリースされると聞きます。

![30億デバイスで.png](https://qiita-image-store.s3.amazonaws.com/0/64230/7865f522-8e8a-736d-efca-ca34533763fc.png)

30億デバイスで動作するJavaは後方互換性がウリです（と同時に批判される特徴でもあります）。
過去のバージョンで書かれたソースコードが最新のJavaでも動作します。
ただし、『書かれたコードが動作する』と『そのように実装されることが推奨される』は別の話です。
また、Javaもその歴史の中で時代に合わせて、生産性向上のために、あるいは時代のニーズに応える為に、新機能、新概念が追加されてきました。
現在の自分の知識でも仕事でJavaのプログラムを書くことに不都合は無かったのですが、せっかく新しい機能が追加されてきたのだから、それらを使ったほうがコードも明瞭簡潔、メンテしやすいものが書けるのではないか。
そして何より自分の知識を古いままにしておくのは恥ずかしいと思い、このゴールデンウィークを利用してJava5～Java8までに追加された機能について勉強することにしました。

僕と同じように**「Javaは昔に勉強したきりだけれども、今はどのような機能が追加されているのだろう」**という人のためにこの記事を書きました。
そのため、Javaの基本やクラスやメソッドなどの説明は今回はしません。

**「え～、知らないの～？」って言われたくなーい**　（この元ネタが分かる人は30歳前後とみました)

今回の学習では[田中裕一さん](http://qiita.com/yuichielectric)の[Java最強リファレンス](http://www.amazon.co.jp/Java-%E6%9C%80%E5%BC%B7%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9-%E7%94%B0%E4%B8%AD-%E8%A3%95%E4%B8%80/dp/4797380144)を使用しました。
「Javaの基本は分かっているけれど、そこから先になると怪しいというか書いた経験がない」という人にとって知りたい情報がコンパクトにまとめられています。

他にも参考リンクを貼っていないリンクを含め、様々なホームページを勉強の参考資料とさせてもらいました。ありがとうございました。

----
[今更人に聞けないJava5からの新機能(J2SE 5.0)](http://qiita.com/Usek/items/3ff30e7a1a87ba64cb58)
[今更人に聞けないJava5からの新機能(Java SE 7)](http://qiita.com/Usek/items/3b0ae76a08d2f1678884)
[今更人に聞けないJava5からの新機能(Java SE 8)](http://qiita.com/Usek/items/8f689d9ad59c0c441626)

この記事は自分の学習を主目的として書いたため、間違いが書かれているかもしれません。間違いを見つけた場合、ぜひコメントで指摘をいただきたいのです。よろしくお願いします。
Facebook Share

---

Facebookで動的にog:imageを変更してシェアをするときのメモ

```php
<?php
	
$arr = [1,2,3,4,5,6,7,8,9];
shuffle($arr);
$num = $arr[0];
	
$data = http_build_query([], "", "&");
$u = urlencode('http://xxx.com?code='.$num);
$url = 'https://graph.facebook.com?id='.$u.'&scrape=true';
$result = file_get_contents($url, false, stream_context_create(["https" => ["method"  => "POST", "content" => $data]]));
var_dump($result);
	
$image = '';
$images = [
		'https://xxx.jpg',
		'https://xxx.jpg',
		'https://xxx.jpg',
		'https://xxx.jpg',
		'https://xxx.jpg',
		'https://xxx.jpg',
		'https://xxx.jpg',
		'https://xxx.jpg',
		'https://xxx.jpg',
		'https://xxx.jpg',
];
	
if (isset($_GET['code'])) $image = $images[$_GET['code']];

?>
```

```html
<meta property="og:site_name" content="jumpin" />
<meta property="og:title" content="jumpin top" />
<meta property="og:type" content="website" />
<meta property="og:image" content="<?= $image; ?>" />
<meta property="og:url" content="http://jumpin.onl?code=" />
<meta property="og:description" content="jumpin description" />
```

```js
$('#fb-share').click(function() {
	FB.ui({
		method: 'share',
		href: 'http://jumpin.onl?code=<?= $num; ?>'
	},
	function (response) {
		if (response != null) alert('投稿完了しました！');
	});
});
```
Go言語: 依存するパッケージ一覧を調べたい

Go言語で、自分が作っているプログラムが依存する外部パッケージを調べる方法です。下記のコマンドを実行すると、カレントディレクトリ以下のプログラムが依存する外部ライブラリが全て表示されます。標準ライブラリは表示されないようになっています。

```console
$ go list -f '{{join .Deps "\n"}}' |  xargs go list -f '{{if not .Standard}}{{.ImportPath}}{{end}}'
github.com/mattn/go-sqlite3
github.com/spf13/cobra
github.com/spf13/pflag
```
vagrantで共有フォルダを作成しない設定

Winows上のvagrantでFreeBSDのboxを利用するとき、どうしても共有フォルダをマウントすることができず、「mount_virtualbox_shared_folder」のところで必ずエラーが出てしまうようです。

エラーを放置するのも気持ち悪いので、共有フォルダのマウントを無効化してしまいます。

Vagrantfile に以下の設定を追加すると、共有フォルダのマウントが無効化されます。

```
config.vm.synced_folder ".", "/vagrant", disabled: true
```

「disabled: true」っていうのがミソ。

　
#### 公式ドキュメントの該当ページ
http://docs.vagrantup.com/v2/synced-folders/basic_usage.html
Config::Pitをシェルスクリプトで使う方法


Perlでアプリケーション開発をする時によく使うConfig::Pit。
コードとパスワードなどの秘密情報を分離できるわけですが、
これをバッチファイルなどのシェルスクリプトから使おうと思った時にちょっと方法がわからず戸惑いました。

Config::Pitにはコマンドラインアプリ`ppit`が同梱されているのですが
`ppit get myapp`とかするとyamlがそのまま渡されてきます。

```
DB_USER=$(perl -MConfig::Pit -e 'print pit_get("myapp")->{db_user}')
DB_PW=$(perl -MConfig::Pit -e 'print pit_get("myapp")->{db_pw}')
```

結局ppitコマンドは使えずPerlワンライナーでごにょごにょしたんですが、本当はどうしたらいいんでしょうかね？
apk から jad を取り出すバッチファイル

apk から dex を取り出して dex から class を取り出して class から jad に変換するサンプルは数あれど、誰も自動化したりしないのはなんでなんだぜ？
みんな毎回手でやってるのかしら？
jar の解凍オプションすら2日で忘れる貧弱スペックの私の脳みそでは難易度が高いです。

と、いうわけで書きました。用途は自分アプリで proguard の変換結果を確認するためです、念のため。
他人の apk をリバエンするのは法律に抵触する可能性があります。
利用は自己責任でお願いします。

jar はパスが通っている前提です。
要 dex2jar, jad

- [dex2jar](https://github.com/pxb1988/dex2jar)
- [jad](http://varaneckas.com/jad/)

```bat:apk2jad.bat
@echo off

rem 実行ディレクトリと対象ファイル
set CURRENT=%~dp0
set TARGET=%1

rem dex2jar と jar へのパス
set DEXJAR=%CURRENT%\tool\dex2jar\d2j-dex2jar.bat
set JADEXE=%CURRENT%\tool\jad\jad.exe

rem 出力ディレクトリ
set OUTPUT=%~dp1\output
set APK=%OUTPUT%\apk
set DEX=%OUTPUT%\dex
set JAD=%OUTPUT%\jad

rem 出力ディレクトリ作成
mkdir %OUTPUT%
mkdir %APK%
mkdir %DEX%
mkdir %JAD%

rem %1.apk を解凍
cd %APK%
jar xvf %TARGET%

rem classes.dex を展開
cd %DEX%
call %DEXJAR% %APK%\classes.dex

rem classes-dex2jar.jar を解凍
cd %DEX%
jar xvf %DEX%\classes-dex2jar.jar
del %DEX%\classes-dex2jar.jar

rem *.class を jad
call %JADEXE% -o -r -d%JAD% %DEX%\**\*.class
rem 関連付けとか IDE のシンタックスハイライトの関係で拡張子 java がいいならこっち
rem call %JADEXE% -o -r -sjava -d%JAD% %DEX%\**\*.class
```

下記のように apk2jad.bat と同一階層の tool 以下に dex2jar と jad を解凍したものを配置します。

```
apk2jad
├── apk2jad.bat
└── tool
    ├── dex2jar
    │   ├── d2j-jar2dex.bat
    │   └── lib
    │       └── *
    └── jad
        └── jad.exe
```

apk2jad.bat に *.apk をドロップすれば同一ディレクトリに output が出来上がります。

```
output/
├── apk
│   ├── AndroidManifest.xml
│   ├── META-INF
│   ├── assets
│   ├── classes.dex
│   ├── res
│   └── resources.arsc
├── dex
│   └── package
│       └── Hoge.class
└── jad
    └── package
        └── Hoge.jad(java)
```

Windows でバッチファイルなんてほとんど書かないのでなにか間違ってたらご指摘お願いします。

ノリと勢いで書いたけど、`app/build/intermediates/classes` 辺りに class ファイルができるから不要なんですかね？（一発でカマせるから）
でも個人的には apk から逆順に辿って proguard がどんな変換カマしたかを、ざっとでいいから見ておきたい。リリース前は特に。
naming > googleコーディング規約 (java) > クラス名 / ファイル名 > クラス名:UpperCamelCase | ファイル名: case-sensitive name of ...

cppの規約にはクラス名の規約は見当たらなかったが、javaの方はクラス名、ファイル名ともにあるようだ。

Thanks to M.M. at [SO](http://ja.stackoverflow.com/questions/9848/github-%E5%90%8D%E5%89%8D%E4%BB%98%E3%81%91%E3%81%8C%E3%81%86%E3%81%BE%E3%81%84%E3%81%A8%E6%80%9D%E3%82%8F%E3%82%8C%E3%82%8B%E3%83%97%E3%83%AD%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88/9850#9850)

http://google-styleguide.googlecode.com/svn/trunk/javaguide.html

> 5.2.2 Class names
Class names are written in UpperCamelCase.

> 2.1 File name
The source file name consists of the case-sensitive name of the top-level class it contains, plus the .java extension.


<hr>
javaとcppでクラス名の規約が統一されていない。バックグラウンドが異なるので仕方がないのかもしれない。
http://qiita.com/7of9/items/99da68d83c7fbe26aab4
UITableView/UIScrollViewでスクロール直後のスクロール方向を取得する

UIScrollViewの移動方向の取得というと、
`scrollViewWillBeginDragging:`の`contentOffset`の`CGPoint`と
`scrollViewDidScroll`時の`contentOffset`の`CGPoint`を比較して…
としている方が多いかと思います。

しかし、この方法ではただ方向が知りたいのにクラス内の変数が１つ増えてしまってなんかアレですよね…。

実は方向だけ取るなら`scrollViewWillBeginDragging:`だけで取ることができます。

```objc
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView{
    CGPoint translation = [scrollView.panGestureRecognizer translationInView:scrollView.superview];
    if(translation.y > 0){
        NSLog(@"down");
    }else{
        NSLog(@"up");
    }
}

```

scrollViewのプロパティにはpanGestureが仕込まれているのでそのままscrollViewとの相対位置を取ることができます。
このpanGestureに含まれる値はOSが初めてスクロールを検知した際の値が入るので、単純にUIScrollViewにタップした際の値は入りません。（`scrollViewWillBeginDragging`がそういった仕様なので当然ですね）
そのため必ず最初に検知した方向を取ることが出来るのです。

＊ただ注意しないといけないのは、これは最初の検知ということです。
ユーザーの動きを追跡しないので長くドラッグし続ける動作には向いていません。フリック等の検知に使うのが良いと思います。
naming > googleコーディング規約(cpp) > クラス名 / ファイル名 > クラス名:すべて小文字+(_/-) | ファイル名:記載なし

http://www.textdrop.net/google-styleguide-ja/cppguide.xml

ファイル名
> ファイル名はすべて小文字にするべきです。アンダースコア（_）やダッシュ（-）を含んでも構いません。プロジェクトで採用している規則にしたがってください。したがうべき一貫性のあるパターンがなければ、"_" を使うとよいでしょう。

クラス名の記載はないようだ。

https://google-styleguide.googlecode.com/svn/trunk/cppguide.html
にも見当たらない。
超sbt入門

#前書き

僕はscala言語が大好きなのですが、今までsbtっていうものに触れたことがありませんでした。
「scalaにはsbtが必要や！」とか、
「sbt知らないとscala使えないで！」っていうお声をよく聞いたので、今回、ゴールデンウィークにかるーく調べてみました。

#sbtって何や
ビルドツールです。
scalaのコードだけでも、scalacコマンドを使用したりすることでスタンドアローンのアプリケーションを生成することができるのですが、sbtを使ったほうが、モジュールやバージョン管理がしやすくなっちゃいます。
rubyでいうbundleみたいな感じかな？？

ちなみに、僕が大好きなplayframeworkを動かしているactivatorコマンドさんもsbtのプロジェクトです。
なので、
>$ activator run

というコマンドは、
>$ sbt run

でも同じ動作になります。
正確には、activatorの中でsbtが動作しているイメージです。
sbtをwebアプリケーション向けにしたのがactivatorであり、
例えば、sbtには新しくwebアプリケーションのテンプレートを提供する仕組みはありませんが、activatorには備わっています。
つまり、
>$ sbt new foobar-application

はできませんが、
>$ activator new foobar-application

は実行可能です。
コンパイルなどをした場合は、同じようにtargetディレクトリに中間ファイルが生成されます。

#どうやって使ったら良いんですか？？

これは、サンプルのアプリケーションを用意するのがわかりやすいでしょう。
今回は、動作を確認することを目的にするので、最小のアプリケーションを開発します（同じみのHelloWorldです）。

まずは、sbtをインストールしましょう。
それぞれのOSにおけるインストールの仕方は、下記URLを参照下さい。
http://www.scala-sbt.org/0.13/tutorial/ja/Setup.html

僕はMacOSだったので、brewで一発でした。
>$ brew install sbt

sbtが正常に動作することを確認したら、開発のための適当なディレクトリを生成します。
その中にbuild.sbtというファイルを作ります

build.sbtには、最低限、nameとversionだけ書けばオッケーです！
>name := "demoProject"
version := "1.0"

一応、sbt本家のサイトでは次のようなディレクトリ構成が推奨されています。

```

src/
  main/
    resources/
      <メインの jar に含むデータファイル>
    scala/
      <メインの Scala ソースファイル>
    java/
      <メインの Java ソースファイル>
  test/
    resources/
      <テストの jar に含むデータファイル>
    scala/
      <テストの Scala ソースファイル>
    java/
      <テストの Java ソースファイル>
build.sbt

```


けど、別にこのディレクトリ構成は必須ではないので、
build.sbtとコンパイルしたいファイルを、同一階層に並べても問題ありません。

しかし、プロジェクトの規模が大きくなったりした場合は、
推奨されているディレクトリ構成のほうが、種類の違うファイル（scala, java, testコード など）をディレクトリごとに分けられるので、このディレクトリ構成が良いでしょう。

コンパイルするコード自体は、適当に次のようなものを用意しました。

```

object HelloWorld extends App {
  println("Hello World!")
}

```

シンプルに、helloworldだけです。
前述した通り、このファイルの置き場所はどこでも大丈夫です。

では、実行してみます。
まずはコンパイルです。
アプリケーションのルートディレクトリで、次のコマンドを実行してください。
>$ sbt compile

次に、runコマンドで実行できます。
>$ sbt run

#感想

scalaのコードをこんな感じでビルドできるのは強いなーって感じましたね。
scalaの強みは、javaVM上で、インタープリンタでも実行できて、コンパイルしてスタンドアロンでも動作するところにあると思うので、sbtを使えばより強力なコードを書けると思います。
scalacコマンドでは、どうしても複数のファイルをまとめて、同じプロジェクトでってなるときついので・・・。

次回は、少し複雑なscalaプロジェクトの作成にチャレンジしたり、
もう少し、sbtを掘り下げても面白いかなって思います。

今回は、本当にsbtの入門までにて、失礼します。
お気軽にレビュー、コメントお願いします。

今回のコードは僕のGitHubにて公開しています。
https://github.com/pukka/Sbt-demo-project

それでは、失礼します。
Rubyのcapacityについて

Rubyのcapacityについて調べたのでまとめた。

実際のコードはこちらにまとめた。 https://github.com/ksss/capa

# 背景

golangのsliceはcapacity(以下capa)を指定できる。

```go
a = make([]int, 0, 1000) // 長さ=0,capa=1000のslice
```

これをRubyでもできたら便利になる場面があるだろうかと思って調べてみた。

# 目的

あらかじめメモリーを確保しておくmethodを用意することで、速度的に有利になる場面があるのか調査する。
よい結果が出ればRuby調査用gemとしてまとめる。

# 実験

## 準備

### ruby

```
$ ruby --version
ruby 2.2.2p95 (2015-04-13 revision 50295) [x86_64-darwin14]
```

### コード

Rubyに仮想のmethod`Array.new_capa`があったとする。

```ruby
a = Array.new_capa(1000)
```

実装イメージ

```c
#include "ruby.h"

static VALUE
rb_s_ary_new_capa(VALUE klass, VALUE capa)
{
  return rb_ary_new_capa(FIX2LONG(capa));
}

void
Init_ext()
{
  rb_define_singleton_method(rb_cArray, "new_capa", rb_s_ary_new_capa, 1);
}
```

### gnuplot

Benchmarkを可視化するためにgnuplotを使用した。

```
brew install gnuplot
```

また、gnuplotコマンドラッパー用のgemが便利そうだったので使ってみた。[^1]

```
gem install gnuplot
```

# 結果

n回pushするコードを用意して比べてみた。

初期オブジェクトに0〜10000回、1回刻みでpush回数を変えていった場合のrealtimeと`ObjectSpace.memsize_of_all`をプロットした。

### 速度

![realtime](https://raw.githubusercontent.com/ksss/capa/master/benchmark/bench.png)

みにくいが紫色の点が`Array.new`、緑の点が`Array.new_capa`で初期オブジェクトを作った場合の結果。

### メモリー


![memory](https://raw.githubusercontent.com/ksss/capa/master/benchmark/memory.png)

メモリーは当然ながら顕著な違いが現れた。

通常の`Array.new`で作るArrayの初期capaは3である。

そこからpushしていくと容量が足りなくなるのでcapaを増やさなければならない。
しかしながら一づつcapaを増やしてしまうとメモリの再確保回数が多くなってしまうためある程度メモリーを確保してメモリ確保回数を減らしているようだ。

そのため、メモリ確保はどうしても階段状になってしまう。


# 考察

## 速度

速度的には今回の計測ではほとんど差はみられないという結果になった。

速度的な性能はreallocによるオーバーヘッドが大きいほど向上し得たとかんがえられるが、その回数があまり多くはないため大した差が産まれなかったものと考えられる。
たとえ差があったとしてもほとんど誤差の範囲なので、このままでは実用的ではないだろう。

## メモリー

最初からメモリを確保してしまっている`Array.new_capa`ではメモリの再確保は発生していないので最小限の確保だけで済んでいるようだ。

この特性からメモリーリソースがシビアな場面でわずかに威力を発揮することがあるかもしれない。

とはいえ`Array.new(n)`等で最初から指定した大きさのArrayを作っておき、`push`ではなく`[]=`をつかうことで、
指定したメモリー量でオブジェクトを作ることは可能なので通常はこちらを使えば問題ないだろう。[^2]

# 更に調査したいこと

## プロットの分散具合

速度グラフをよく見ると、全体的に線形に広がっていっているようにみえる。ほとんどのプロットは下端に集まっているのに対して、上端にも少量のプロットが集まっているように見受けられる。
単純に誤差なのであればコードの実行回数が増えてもまんべんなく広がるように予想されるが、上端に集まるのであれば、特定の条件下で少しだけ性能が劣化するタイミングがあるのかもしれない。

## ケース

capaをあらかじめ確保しておいたほうが有利になる場合が他にあるかも知れない。
が、現状思いつかない。

# まとめ

結果としてはgolangのようにcapaを指定できる方法がRubyにもあったとしても、ほとんど優位にはならないことがわかった。

したがってこのようなGemを作ることは現状無意味だろう。

というわけで**Rubyはよくできててすごい**。

[^1]: 最近はあんまりアップデートされていないようだ
[^2]: 実際にプロットしてみたが予想通り線形のプロットとなり、まったく差が見られなかった
iOS Developer Program購入手順（有料会員登録）


ついに、iOS Developer Programを購入しましたー:bowtie:
なので、備忘録として下記に手順を記載します。
これで、晴れて実機テストできます！


## 有料会員登録前の注意事項
- 利用するApple IDの氏名を英語に変更しておいてください。  
氏名にマルチバイト文字を利用していると後々、面倒なことになるみたいなので、ローマ字に変更をしておいたほうが良いそうです。
- **ブラウザは、Safariを利用してください。**  
  Chromeで行うと登録画面で原因不明のエラーとか発生します :kissing_smiling_eyes: 

## 登録の手順
１）iOS Developer Programにアクセスします。
https://developer.apple.com/jp/programs/ios/

２）「今すぐ登録」ボタンをクリックします。
![02.png](https://qiita-image-store.s3.amazonaws.com/0/27276/5a8d9514-f520-bcd6-d576-ab5e1d817cc6.png)

３）「続ける」ボタンをクリックします。
![03.png](https://qiita-image-store.s3.amazonaws.com/0/27276/4d3878e9-085a-c903-2daa-acf47eee122e.png)

４）「サインイン」をクリックします。
![04.png](https://qiita-image-store.s3.amazonaws.com/0/27276/1a541ddc-87ee-e1a2-036a-767fe85cc7b5.png)


５）個人か、法人を選択できるので今回は個人で進めます。
　「Individual」をクリックします。
![05.png](https://qiita-image-store.s3.amazonaws.com/0/27276/a7ef98d2-2eda-fe8c-8098-89b12cf5c4f3.png)

６）Apple IDとパスワードを入力します。
　「Sign In」をクリックします。
![06.png](https://qiita-image-store.s3.amazonaws.com/0/27276/2f763018-7b35-a3ee-a162-30bcd35be538.png)

７）契約書を読んで、同意する場合のみチェックボックスをオンにします。
　「Agree」ボタンをクリックします。
![07.png](https://qiita-image-store.s3.amazonaws.com/0/27276/bc98d501-f096-3de5-20e3-5ed1c735494a.png)

８）請求書の送付先情報を登録します。
　　電話番号は、携帯を指定する場合は、下記の例をご参照ください。
　　例）「080-1234-5678」の場合は、「81 80-1234-5678」と記入します。

![08.png](https://qiita-image-store.s3.amazonaws.com/0/27276/18e30083-d9d6-c975-d5ad-482252468683.png)


９）今回は、iPhoneアプリを開発するので、「iOS Developer Program」を選択します。
　「Continue」をクリックします。
![09.png](https://qiita-image-store.s3.amazonaws.com/0/27276/89ce0186-456c-884a-74be-efa0e405d399.png)

１０）登録した情報に間違いがないか確認します。
　　　間違いがなければ「Continue」をクリックします。
![10.png](https://qiita-image-store.s3.amazonaws.com/0/27276/8c9553d7-dd9a-5894-4efc-0506cf959112.png)


１１）iOS Developer Programの契約書が表示されるので、全文を確認します。
同意する場合のみチェックボックスをONにして「I Agree」をクリック。
![11.png](https://qiita-image-store.s3.amazonaws.com/0/27276/8ffb869a-a2e3-0887-2534-dbcfcb360670.png)

１２）iOS Developer Programを購入する場合のみ、「Buy Now」をクリックします。
![12.png](https://qiita-image-store.s3.amazonaws.com/0/27276/904938c3-0831-a4c1-3ed8-bec8b2d76987.png)

１３）Apple IDとパスワードを入力します。
　　　「サインイン」をクリックします。
![13.png](https://qiita-image-store.s3.amazonaws.com/0/27276/1d0774b6-6cc0-f7f3-0fa3-b3c2d4e25418.png)

１４）クレジット情報を入力します。（※フリガナは、カタカナで入力していないとエラーが出ました。）
　　「続ける」をクリックします。
![14.png](https://qiita-image-store.s3.amazonaws.com/0/27276/f979cf8a-e2c9-2fad-9b69-b4d18ecabd15.png)


１５）入力に間違いがないか確認します。
　　　間違いがない場合のみ「ご注文の確定」をクリックします。
![15.png](https://qiita-image-store.s3.amazonaws.com/0/27276/633bee97-5e2c-6106-215e-c2f3d3485c50.png)

１６）完了画面が表示されます。
　　　登録に使ったApple IDに登録してあるメールアドレスに同様の内容が送信されていることを確認します。
![16.png](https://qiita-image-store.s3.amazonaws.com/0/27276/24724325-ae07-d670-5e94-6b4fe1f81fdf.png)

以上です :tada:
Markdown記法のテンプレート

# タイトル

## 目次
* [はじめに](#はじめに)
* [フォーマット](#フォーマット)
* [いろいろ](#記法いろいろ)（[チェックボックス](#チェックボックス)、[引用符](#引用符)）
* [テーブル](#テーブル)
* [赤文字](#赤字について)
* [コード](#コード・ソース)
* [おわりに](#おわりに)
    * [画像](#画像)
    * [リンク付き画像](#リンク付き画像)

---------------------------------------
## はじめに
上のほうにある[編集リクエストを作成する]を押してコピペすればいいと思うよ

---------------------------------------
## 記法いろいろ

1. ノーマル
2. ``縁取り``
3. **太文字**
4. ~~取り消し~~

$$中央寄せ$$

- 右揃せは、んーー・・・

### チェックボックス
- [x] はじめにを読む
- [x] コピペしてみる
- [ ] 記事を考えてみる
- [ ] 投稿する

### 引用符
>> Ａ「そんな装備で大丈夫か？」

> Ｂ「大丈夫だ、問題ない」

Ａ「まさか忘れたとは言わせないよ」

---------------------------------------
## テーブル

#### パターンＡ
| |X|Y|Z|
|:-:|:-:|:-:|:-:|
|A|あああ|いいい|ううう|
|B|hoge| |fuga|

#### パターンＢ
|リンゴ|ブドウ|バナナ|
|---|---|---|
|10|20|30|
|10|20|30|

#### パターンＣ
<table>
<tr><td>あ</td><td>い</td><td>う</td></tr>
<tr><td>か</td><td>き</td><td>く</td></tr>
<tr><td>さ</td><td>し</td><td>す</td></tr>
</table>

---------------------------------------
## 赤字について

```html
<span class="red">赤色文字</span>
<span class="blue">青色文字</span>
```
文字に反応するというわけではなく、自動で色が変わる（基本的には）

---------------------------------------
## コード・ソース


perl = pl

```pl:title
#!/usr/bin/env perl
use strict;
use warnings;
use utf8;

sub hoge () {
    return fuga();
}

1;
```

json

```json
{
  "lv": 23,
  "exp": 1000,
  "deck": [
    1111,
    2222,
    3333,
  ],
  "items": [
    {
      "id": 100001
      "item_id": 1234,
      "amount": 2,
    },
  ],
}
```

bash

```bash
$ sudo yum install hogehoge
```

---------------------------------------
## おわりに
もっといろんなことやりたいという方はこちら

* [すべてがわかる魔法のリンク](https://www.google.co.jp/)

### 画像

![画像が表示できなかった場合の文字](https://pbs.twimg.com/profile_images/506247898036596736/d_2bvYNl_normal.png "taiga")

### リンク付き画像
[![aaa](https://pbs.twimg.com/profile_images/506247898036596736/d_2bvYNl_normal.png)](https://www.google.co.jp)

*画像の中央寄せや右寄せは、んーー*

***
x86版android

# はじめに

zenfone2がintelのx86アーキテクチャなためx86androidの国内普及期に入ってきたと思われるためまとめておく

## 互換性問題

### Dalvik

javaで書かれたコードはDalvik VMによって仮想マシンで動くため問題なく動く

### NDK

NDKを使ってC/C++などで書かれたコードは機種依存のためそれぞれのアーキテクチャ用のバイナリが必要
ただしx86版のandroidにはarm用のコードをx86用に変換する仕組みがあるので多少パフォーマンスが落ちるがarmのバイナリでも動く

※Houdini Binary Translator

### 動かないソフト

* 端末チェック（アーキテクチャ関係ない）
* x86バイナリ（テストしてないやつ）持ってる場合にエンディアンでバグる
* ブラウザプラグイン（Flashなど）
* 動画プレイヤー（armに最適化されたものはカクカクになる）

### 関連記事

http://pc.watch.impress.co.jp/docs/column/ubiq/20130926_616841.html
http://www.4gamer.net/games/990/G999019/20130725009/
http://www.4gamer.net/games/047/G004743/20120308091/
http://japanese.engadget.com/promo/intel_64bit_Android/
Ansibleで複数の網元サイトのWordPressアップデートを実施する

複数WordPressを管理してる時に、すべてのWordPressを一発でアップデート出来たら嬉しいですよね。
そこで、[網元](http://ja.amimoto-ami.com/)で作ったサイトを一括でアップデートできるAnsible Playbookを書いてみました。

詳しくは[Github](https://github.com/horike37/ansible-amimoto-wordpress-update)にあげていますが、以下の形でアップデートに必要な操作を記述しています。

```main.yml
---
- name: Update core
  shell: '{{ wp_cli_dir }}/wp core update --path={{ wordpress_dir }}/{{ ohai_ec2["instance_id"] }} --allow-root'

- name: Update plugin
  shell: '{{ wp_cli_dir }}/wp plugin update --all --path={{ wordpress_dir }}/{{ ohai_ec2["instance_id"] }} --allow-root'
  
- name: Update theme
  shell: '{{ wp_cli_dir }}/wp theme update --all --path={{ wordpress_dir }}/{{ ohai_ec2["instance_id"] }} --allow-root'

- name: WordPress update db
  shell: '{{ wp_cli_dir }}/wp core update-db --path={{ wordpress_dir }}/{{ ohai_ec2["instance_id"] }} --allow-root'
```

実施前は必ずスナップショットを取ってからPlaybookを流すようにしましょう。
それではよいアップデート祭りを！
SpriteKitを試してみる9 SKSpriteNodeのcolor


SKSpriteNodeのプロパティにcolorが存在するが、ここにUIColor.grayColor()をセットした場合、if文でイコールか確認しても何故かイコールになりません。

```
let s = SKSpriteNode(texture: nil, color: UIColor.grayColor(), size: CGSizeMake(50,50))

if(s.color.isEqual(UIColor.grayColor())){
	// ここに来てくれない
}

```

ログで確認してみると違いが発覚します。

```
 NSLog("%@ %@", s.color, UIColor.grayColor())
```

ログ結果

```
UIDeviceRGBColorSpace 0.5 0.5 0.5 1 UIDeviceWhiteColorSpace 0.5 1
```

s.colorはUIDeviceRGBColorSpaceなのに、grayColorはUIDeviceWhiteColorSpaceになっており、16進数での世界では別のデータになっている為にイコールではない・・・みたい。
ちなみにredColorやblueColorといった色はイコールが成り立ちます。色によってUIDeviceRGBColorSpaceかUIDeviceWhiteColorSpaceが決まるよう。
では何故、SKSpriteNodeにセットしたgrayColorがUIDeviceRGBColorSpaceで表現されるようになったかと言うと確証はありませんが、rectangleに色をセットする場合、UIColorからCGColorを取得してセットするが、colorのgetメソッドで色を取得する際、元のCGColorからUIColorに変換する際は元々はUIDeviceWhiteColorSpaceでもUIDeviceRGBColorSpaceにしてしまうのではないか・・・と推測しています。

ではこれを回避する手段として、とりあえずの策としてSKSpriteNodeのサブクラスにcolorを持つ別プロパティを用意してそれで色の確認を取るようにしています。今イチクールな回避策ではないと思うが、今はとりあえずこれで良しとしています。

```
class BaseUnit: SKSpriteNode {
	var enemyColor : UIColor = UIColor.blueColor()
}
```
cursor-history Package つくった

GW中の５日で４つ Package つくったった。全部小物だが。。。

[cursor-history](https://atom.io/packages/cursor-history)

Vim には jumplist というものがある。
ブラウザの履歴の様に、過去のカーソル位置を、`ctrl-i`, `ctrl-o` で行き来出来て便利だ。

Atom に乗り換えてそういうのが欲しいと思ったので作った。
ただこういう Package が無いわけではなく、[last-cursor-position](https://atom.io/packages/last-cursor-position) というものがあり、少し前までこれを使っていた。

動作に不満がでたのと実装を理解したかったのでコードを読んで、結局自分で実装することになってしまった。

# Features

* マルチカーソルの時は無視します。

# Keymap

デフォルトのキーマップは無し。好きなのを設定して下さい。

* e.g.

```coffeescript
'atom-workspace':
  'ctrl-i': 'cursor-history:next'
  'ctrl-o': 'cursor-history:prev'
```

* [vim-mode](https://atom.io/packages/vim-mode) 使ってるなら

```coffeescript
'atom-text-editor.vim-mode.command-mode':
  'ctrl-i': 'cursor-history:next'
  'ctrl-o': 'cursor-history:prev'
```

# 使い方

* `cursor-history:next`: 進む
* `cursor-history:prev`: 戻る
* `cursor-history:reset`: ヒストリのクリア

# カーソル位置はいつ保存される？

現状、以前のカーソルとの行の差を見て、ヒストリに記憶するか判断してます。(Default: 5行以上)
`rowDeltaToRemember` で変更可能
この条件はかなり改善の余地がある。 Pane に Item が Activate した時点でも保存すべき、とか、もっと細かい条件を Configurable にしたりとか。。。

# TODO
- [x] Point ではなく、Marker を使うべき(バッファの変更に強いから).
- [ ] シリアライズして、再起動してもヒストリが残るようにする.
- [ ] ヒストリに記録する条件をもう少し丁寧に
- [ ] さらに条件を設定できるように.



今の状態でも使えるが、改善の余地はかなりある。
もう少し improve したら vim-mode に fit するようにして、PRを送ってみようとも思う。
Visual Studio Code向けにざっくりEmacsキーバインドを定義した

# はじめに
Visual Studio CodeだろうとEmacsキーバインドが欲しいですよね？
ユーザ定義でキーバインドを定義できるので、ざっくりとですが定義してみました。

# JSONファイル
https://github.com/nana4gonta/emacs-visual-studio-code
コピペして使ってください。

(5/17)プラットフォーム別にJSONファイルを分けました。
各ファイルで定義が被るので今後はJSONを生成するようにしたい

# 今のところの課題
- 自分のEmacs知識が足りないので、定義しきれていないキーバインドあるかも
- バッティングしてるキーバインドを直してない
- `ctrl+s`, `ctrl+r`で検索してるときに、`ctrl+s`, `ctrl+r`で次のヒットしたものに移動したい
- <del>実は`win+`や`cmd+`, `meta+`のような各環境独自のプレフィックスを別環境に持っていくと、プレフィックスなしでキーバインドが定義されてしまう</del>(プラットフォーム別にファイルを分けることで対応しました)

プルリクとか、Qiitaへのコメントください
`setopt  auto_param_keys` 〜 「カッコの対応などを自動的に補完」の謎

こんにちは．現実逃避に他の人の `.zshrc` を参考にしながら書き足していたら謎な設定項目に出くわしたのでその解説をしようと思います．

その設定とはタイトルにもある `AUTO_PARAM_KEYS` のことです．`setopt auto_param_keys` でググると，以下のようなコメントが付記された皆さんの `.zshrc` がヒットします．揃いも揃って同じ文言です；何せ皆さんコピペしますからね:)

```zsh:.zshrc
## カッコの対応などを自動的に補完
setopt auto_param_keys
```

ほうほう？よく分からんけど便利そうだぞ？試してみよう！

```zsh
$ ls .zsh{_history,env,rc,
```

ここでタブを連打してみます．

![](http://i.gyazo.com/633f3731499fd96fb0cb2cc55e31a3d5.gif)

……閉じカッコの補完を有効化するわけではなさそうですね．どのタイミングでも普通の補完候補しか出てきません．困ったときの `man zshoptions` です．

> ### AUTO_PARAM_KEYS \<D\>
> If a parameter name was completed and a following  character (normally  a  space)  automatically  inserted,  and the next character typed is one of those that have to  come  directly after  the  name  (like  `}`,  `:`, etc.), the automatically added character is deleted,  so  that  the  character  typed comes immediately after the parameter name.  Completion in a brace expansion is affected similarly: the  added  character is a `,`, which will be removed if `}` is typed next.

（`man zshoptions` から引用；一部記号などを読みやすいよう整形）

ふむふむ…… つまり，

1. パラメータ名が補完されたあと，続けて文字（普通，空白などの区切り文字）が自動的に挿入されたとき，
2. もし次にタイプされた文字が特定の文字（例えば `}` や `:` など）であれば，
3. 1で自動挿入された文字は削除されて代わりにタイプされた文字がその場所に置かれる．
4. 波カッコによる展開における補完の場合も同様に振る舞う：この場合の区切り文字であるカンマ `,` は閉じカッコ `}` がタイプされると自動的に削除される．

なーるほどー カッコの補完じゃなくて，カッコとかを補完したあとの**特定の記号の自動削除とタイプされた文字への置き換え**ですね．

![](http://i.gyazo.com/02a2957a8fbe3fa8a0e90f242fe9dcbf.gif)

明るく表示されているカンマは未確定状態で，閉じカッコ `}` を入力すると消えてしまいます．タブやカンマそのものをタイプすることでカンマを確定させることができます．（設定によって表示は異なると思います．）

今回は brace expansion のカンマの例で説明しましたが，他にも parameter expansion でもこの動作をします（引用した man でもこちらを念頭に説明しているようですね）．例えば下記のような補完後の編集子を使った記法への移行がスムーズに行えます．

![](http://i.gyazo.com/6900d0a2b449132022582d5c4c7213a0.gif)

こっちだと未確定の `}` は明るくなってないですが，`:` 入力でスムーズに置き換えられていることが分かります（これどこの設定変えれば明るくなるの〜）．というか，今回調べて初めてこの手の編集子の記法をいくつか知りました．詳しくは `man zshexpn` を見てください．

また，他にも似たような挙動を制御するオプション `AUTO_PARAM_SLASH` や `AUTO_REMOVE_SLASH` があるようですので，気になる方は確認してください．とはいえ，`AUTO_PARAM_KEYS` も含め，いずれも**デフォルトで有効な設定**ですので，`.zshrc` に書かずとも普段から意識せずに活用していると思います．

----

最後に，せっかくですので，`.zshrc` にこの設定を書くときはちゃんとこんな感じのコメントを書きましょう！

```zsh:.zshrc
## 自動補完される余分なカンマなどを適宜削除してスムーズに入力できるようにする
setopt auto_param_keys
## 自動補完したカンマなどが勝手に削除されないようにする（未確定状態にしない）
unsetopt auto_param_keys
```

ちなみに参考までに，こちらは海外の方が書いていた英語のコメントになります：

```zsh:.zshrc
setopt auto_param_keys # remove trailing spaces after completion if needed
```

ではではっ！Have a nice day!
Atomエディターメモ

## ショートカット

|キー| コマンド|
|:---|:---|
| Ctrl+Shift+m |Markdownプレビュー |

## Font

### Settings

* Font Family: Inconsolata
* Font Size: 14

## Package

* japanese-wrap
* autocomplete-plus
* autocomplete-emojis
* autocomplete-snippets
* linter
* symbol-gen
* git-plus
* git-control
新しいMacBookAirを買ったので設定メモ

## Homebrew

```sh
$ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
$ brew install wget
$ brew install pkg-config
```

## Ricty Font

* 事前にXQuartzをインストールしておく

```sh
$ brew install pkg-config
$ brew tap sanemat/font
$ brew install ricty
$ cp -f /usr/local/Cellar/ricty/3.2.4/share/fonts/Ricty*.ttf ~/Library/Fonts/
```

## zsh

* 事前にXCodeをインストールし、一度起動しておく

```
$ brew install zsh
$ brew install zsh-syntax-highlighting
```

## Scala

* Javaをインストールしておく
* JDKをインストールしておく(Oracleから)

```
$ brew install scala
$ brew install sbt
$ brew install typesafe-activator
```

## Unity

* Unity5のページからインストーラーをダウンロードしてインストール

## その他

* Chrome
* Google Drive
* Line
* Atom
* IntelliJ IDEA
* Virtual Box
* Vagrant
* Google IME
* Total Terminal

* capsキーとctrlキーを入れ替え
Rails 新規作成formの作り方~newとbuildの違い~

#基本形
記事(article)の新規作成form(:title, :content, :image)

```rb:articles_controller.rb
def new
  @article = Article.new
end
```
```erb:new.erb
<%= form_for @article do |f| %>
  <p class="form-group field">
    <%= f.label :title, class: "control-label" %>
    <%= f.text_field :title, class: "form-control" %>
  </p>
  <p class="form-group field">
    <%= f.label :content, class: "control-label" %>
    <%= f.text_area :content, class: "form-control", rows => 6 %>
  </p>
  <p class="form-group field">
    <%= f.label :image, class: "control-label" %>
    <%= f.file_field :image %>
  </p>
<% end %>

```

#親モデルと結びつける
記事(article)に紐づくコメント(comment)の新規作成(:content)
(ここではarticles/show内で新規作成)

```rb 
@comment = @article.comments.build 
```
```rb
 @comment = Comment.new 
```
を使う2通りがある。どちらでもできるが何が違うのだろうか。
まずは利用例から。

## buildの利用

```rb:route.rb
resources :articles do
  resources :comments do
  end
end
```

```rb:articles_controller.rb
  @article = Article.find(params[:id])
  @comment = @article.comments.build #buildの利用

```

```erb:show.erb
  <%= form_for [@article, @comment] do |f| %>
    <p class="field form-group">
      <%= f.label :content, class: "control-label" %>
      <%= f.text_area :content, class: "form-control" rows => 6 %>
    </p>
    <p>
      <%= f.submit "コメントする", class: "btn btn-primary" %>
    </p>
  <% end %>

```

## newの利用

```rb:route.rb
#buildと一緒
resources :articles do
  resources :comments do
  end
end
```

```rb:articles_controller.rb
  @article = Article.find(params[:id])
  @comment = Comment.new #newの利用

```

```erb:show.erb
  <%= form_for [@article, @comment] do |f| %>
    <p class="field form-group">
      <%= f.label :content, class: "control-label" %>
      <%= f.text_area :content, class: "form-control" rows => 6 %>
    </p>
      <%= f.hidden_field :user_id, :value => @user.id #newで追加 %>
    <p>
      <%= f.submit "コメントする", class: "btn btn-primary" %>
    </p>
  <% end %>

```

## buildとnewの違い
newはモデルのインスタンス生成でお馴染みである。buildも似ているが、外部参照キーを自動でセットしてくれるという点で異なる。つまり、親要素への結びつけが必要な場合ちょっと楽に出来る。（わざわざ、外部参照キーを自分で書く必要がない。）
よって、この場合buildを使うほうがよさそうだ。

##参考
[Ruby on Rails 備忘録 – Ride On Rails](http://rubyonrails.gachinko.org/3-1/build/)
React + Ratchet のサンプルアプリケーションを Flux + ES6(Babel) で作り直す

Reactを学ぶ上で、[Sample Mobile Application with React and Cordova](http://coenraets.org/blog/2014/12/sample-mobile-application-with-react-and-cordova/) の内容が非常に勉強になった。このサンプルアプリケーションを、FluxとES6(Babel)で書きなおしてみた。

## 構築環境

OS：Windows8.1
node：v0.12.2（nvmw利用）
react：0.13.2
flux：2.0.3

## 各種リンク

GitHub上のソースコード：[https://github.com/azk0305/mobile_employee_directory](https://github.com/azk0305/mobile_employee_directory)

デモサイト：http://react.mnj-tokorozawa.jp/mb_emp_dir/

### 補足

[Monaca](https://ja.monaca.io/)でも動作できたことを確認。
EC-CUBE3のデバッグモードへの変更の仕方

# デバッグモードとは
EC-CUBE3では、デフォルトで、開発者向けのツールやデバッグ情報などを表示する機能を持っています。
運用を開始する際には、デバッグモードを無効にしないといけませんが、開発中は是非有効にしてください。
きっと、開発者の手助けになるでしょう。

# 変更の仕方

html/index.phpを書き換えるだけ！
Applicationに設定を渡してあげれば、デバッグモードで開発ができます。
設定は、 `array('env' => 'dev')` です。

```php
# before
<?php

require_once __DIR__.'/../vendor/autoload.php';

$app = new Eccube\Application();
$app->run();

```

```php
# after
<?php

require_once __DIR__.'/../vendor/autoload.php';

$app = new Eccube\Application(array(
    'env' => 'dev',
));
$app->run();

```
Swift勉強会資料

Swfit勉強会で使った資料をまとめました。

- vol1. 基礎編
    - [プレゼン資料 - SlideShare](http://www.slideshare.net/nagaminehiromasa/ios-52486179)
    - [SwiftでViewControllerを扱う - Qiita](http://qiita.com/web_chiro/items/66dc637463f98716bfa5)
    - [SwiftでViewを扱う - Qiita](http://qiita.com/web_chiro/items/7485cee8b73849f0c847)
- vol2. ViewControllerを使う
    - [プレゼン資料 - SlideShare](http://www.slideshare.net/nagaminehiromasa/swift-study-vol03) ( [Original](https://hayate1996.github.io/swift_presen) )
    - [SwiftでGestureを扱う - Qiita](http://qiita.com/web_chiro/items/06a87514c49dd86c38ad)
- vol3. Animationを実装する
    - [プレゼン資料](https://hayate1996.github.io/swift-animation-presentation/#/)
Centos7にNodejs、express、compassをインストールする 

Centos7.0にexpressをインストールしようとして少しはまったのでメモ。

#NodeJSのインストール
```bash:Console
$ sudo yum install epel-release
$ sudo yum install nodejs npm
```

#express-generatorのインストール
```bash:Console
$ sudo npm install -g express-generator
```
express.jsのひな形を作ります。

```bash:Console
$ express -c compass testweb
```
#実行
```bash:Console
$ cd testweb
$ npm install
$ npm start
```
ブラウザからアクセスしてみると以下のようなエラーが出て止まってしまった。

```
events.js:72
        throw er; // Unhandled 'error' event
              ^
Error: spawn ENOENT
    at errnoException (child_process.js:1011:11)
    at Process.ChildProcess._handle.onexit (child_process.js:802:34)
npm ERR! weird error 8
npm ERR! not ok code 0
```
Rubyのcompassがインストールされていないといけないそうなので以下のようにインストールした。

```bash:Console
$ sudo yum install ruby-devel
$ sudo gem update --system
$ sudo gem install compass
```

#再度実行

```bash:Console
$ npm start
```

これでうまく動いた。
Rails 基本的なCRUDのController

#基本的なCRUD
MythreadControllerを例に
Create->新規作成(new, create)
Read->データ一覧・個別の表示(index, show)
Update->データの更新(edit, update)
Delete->データの削除(delete)
の機能を持つコントローラを考えます。

Viewは以下があるという認識で。
1. データの一覧の表示 index.ctp
2. 個別データの表示 show.ctp
3. 新規作成ページの表示 new.ctp
4. 編集ページの表示 edit.ctp


```rb:MyTreadsController
class MyThreadsController < ApplicationController
  #before_actionで各メソッドを呼び出す前にメソッドを呼び出す
  #onlyでどのメソッドで呼び出すか制限をかける
  before_action :set_my_thread, only: [:show,:update,:edit,:delete]

  #index->データの一覧の表示
  def index
    #mythreadのデータの全件取得
    @my_threads = MyThread.all
  end

  #show->個別データの表示
  def show
  #before_actionでデータの取得は完了している
  end

  #new->新規作成ページの表示
  def new
    #モデルオブジェクトの生成
    @my_threads = MyThread.new
  end

  #create->新規データの登録
  def create
    #formのデータを受け取る
    @my_threads =MyThread.create(my_thread_params)
    #saveメソッドでデータをセーブ　*newメソッド + saveメソッド = createメソッド
    if @my_threads.save
      #saveが完了したら、一覧ページへリダイレクト
      redirect_to my_threads_path
    else
      #saveを失敗すると新規作成ページへ
      render 'new'
    end
  end

  #edit->編集ページの表示
  def edit
  #before_actionでデータの取得は完了している
  end

  #update->編集のアップデート
  def update
    #編集データの取得
    if @my_threads.update(my_thread_params)
      #updateが完了したら一覧ページへリダイレクト
      redirect_to my_threads_path
    else
      #updateを失敗すると編集ページへ
      render 'edit'
    end
  end

  #destroy->データの削除
  def destroy
    #データの削除
    @my_threads.destroy
    #一覧ページへリダイレクト
    redirect_to my_threads_path
  end

  private
  #strong parameters リクエストパラメターの検証（これがないとうまくいかないので注意）
  def my_thread_params
    params.require(:my_thread).permit(:title)
  end

  #共通処理なので、before_actionで呼び出している
  def set_my_thread
   #特定データの取得
    @my_threads = MyThread.find(params[:id])
  end

end
```
UniRxのシンプルなサンプル その9(TimerとInterval 一定時間後に実行)

[UniRxのシンプルなサンプルの取扱説明書](http://qiita.com/Marimoiro/items/b0c66c6c22cf58bde049)
[前(ObservableWWW.Get ダウンロード)](http://qiita.com/Marimoiro/items/dbd84ed9c6d5aa129f2a)
[UniRxのシンプルなサンプルの取扱説明書 その10(プッシュを遅らせる Delay)](http://qiita.com/Marimoiro/items/a6131e9bde9b0d13b1ba)

# 一定時間後に実行 #
今回はわかりやすいそして何度か出てきているTimerとIntervalを紹介します。
それぞれ一定時間後、一定時間ごとにプッシュしてくれます。
例えばアニメーションとか、なんかそんな感じのものを作るときに便利です。

JavaScriptのsetTimeoutやsetIntervalに近い動作をします。

今回はそれぞれ5秒後に青くなるGameObjectと50msごとに徐々に緑になっていくGameObjectを作ります。

## 前準備 ##
TimerというTimerSample.csが貼り付けられているGameObject
IntevalというIntevalSample.csが貼り付けられているGameObject

## 5秒後に青くなる ##

n秒後に何かを起こしたい場合Timerが便利です。
今回は5秒後にGameObjectを青くします。
コードはこんな感じ

```csharp:TimerSample.cs
using UnityEngine;
using System.Collections;
using UniRx;
using System;

public class TimerSample : MonoBehaviour {

	// Use this for initialization
	void Start () {
        //5秒たったらプッシュ
        Observable.Timer(TimeSpan.FromSeconds(5)).Subscribe(_ =>
        {
            //青くする
            GetComponent<SpriteRenderer>().color = Color.blue;
        }).AddTo(this);
	}
	
}
```

特に難しいところはないと思います。
Observable.Timer(TimeSpan dueTime)
でdueTime後に1度だけ値がプッシュされます。
で、青くしています。

## 50msごとに徐々に緑に ##
一定時間ごとに起こしてほしい処理を記述するにはIntervalが便利です。
アニメーションとかをメインの処理と分離できるのでおすすめ。
今回は徐々に緑にしていきます。

```csharp:IntervalSample.cs
using UnityEngine;
using System.Collections;
using UniRx;
using System;


public class IntevalSample : Base {

	// Use this for initialization
	void Start () {

        //50ms毎に購読する
        Observable.Interval(TimeSpan.FromMilliseconds(50)).Subscribe(l =>
        {
            //緑色に近づける
            GetComponent<SpriteRenderer>().color = Color.Lerp(Color.white, Color.green, l / 200.0f);
        }).AddTo(this);
    }
	
}
```
先ほどのTimerがIntervalに変わっただけです。
Observable.Interval(TimeSpan dueTime)
で一定時間ごとにプッシュしてくれます。
プッシュされてくる値は何回目のプッシュかなのでそれを使って[Color.Lerp](https://msdn.microsoft.com/ja-jp/library/microsoft.xna.framework.graphics.color.lerp%28v=xnagamestudio.31%29.aspx)を使用して色を徐々に変えていきます。

## 実行結果 ##
というわけでこんなかんじで5秒後に青になるものと緑に近づくものが出来ました。
![スクリーンショット 2015-05-06 15.55.39.png](https://qiita-image-store.s3.amazonaws.com/0/77177/094853c2-c6ff-57ac-e7a4-25c0aec406ad.png)

## 補足 ##
Frame数を数えて同じ動作をするTimerFrameとIntervalFrameもあります。