OmniAICreator/Qiita-1.07M huggingface dataset:
Pixi.jsで全画面表示

こんな感じのコードがあった時

```js
var STAGE_WIDTH = 400;
var STAGE_HEIGHT = 300;

var stage = new PIXI.Stage(0x66FF99);
var renderer = PIXI.autoDetectRenderer(STAGE_WIDTH, STAGE_HEIGHT);

document.body.appendChild(renderer.view);

requestAnimFrame(update);

function update() {
    requestAnimFrame(update);
    renderer.render(stage);
}
```

jQueryを使った場合、こんな感じに書ける

```js
var $window = $(window);
 
// XXX: debounce
$window.resize(onResize);
 
function onResize() {
    var width;
    var height;
    var ratioWidth;
    var ratioHeight;
    var ratio;
    
    width = $window.width();
    height = $window.height();
    ratioWidth = width / STAGE_WIDTH;
    ratioHeight = height / STAGE_HEIGHT;
    if (ratioWidth < ratioHeight) {
        ratio = ratioWidth;
    } else {
        ratio = ratioHeight;
    }
    
    renderer.view.style.width = ~~(STAGE_WIDTH * ratio) + 'px';
    renderer.view.style.height = ~~(STAGE_HEIGHT * ratio) + 'px';
}
```

以上です。
もう面倒くさいからPhantomJS単体でファイルをダウンロードする

# 課題
S::R::D （webDriver）+ PhantomJS でファイルダウンロードができない

# 解決法
前回から検証を進めた結果、以下の方法が良いと思いました。

* S::R::D でエクスポートボタンをクリックした状態を、PhantomJSにうまいこと渡してダウンロード処理をする

そもそも、前にGitHubでissueを発行したときも「ようわからん」的な返答を頂いたので、あまり一般的な方法じゃないんでしょうね。
[How to download file with Phantomjs?](https://github.com/aivaturi/Selenium-Remote-Driver/issues/97)

よって、webDriver の操作なしでファイルダウンロードを実行したほうが良いということになりました。

また、ログイン操作やクリック遷移はPhantomJS単体でもできるので、「うまいこと渡す」というのもやめました。そのサンプルコードが以下です。

```js:facebook_login.js
// コマンドラインからparameter を受け取り、facebookにログインしてログイン後のホーム画面をキャプチャする

// 引数受け取り
var system = require("system"); 
var username = system.args[1];
var password = system.args[2];

// facebookログイン
var page = require("webpage").create();
page.open("https://ja-jp.facebook.com/",function(){
    page.onLoadFinished = function(){
        page.render("facebook_login.png");
        phantom.exit();
    }
    page.evaluate(function(arr){
        document.querySelector("#email").value = arr[0];
        document.querySelector("#pass").value = arr[1];
        document.querySelector("#login_form").submit(); //フォームのIDを指定
    },[username,password]);
})
```

上記のコードはコンソールから以下のように実行します
`phantomjs facebook_login.js <facebookユーザ名> <facebookパスワード>`

正直、このサンプルは[ここ](http://blog.engineer.adways.net/archives/24176691.html)の内容をほぼ __パクっただけ__ なので、参照元様に感謝です。


# 今後
[ここ](http://qiita.com/mrk_21/items/404bb36351c4622107cf)の記事を参考にしてcoffeescriptでコードを書いていますが、getElementById の箇所で `TypeError: 'null' is not an object` エラーが頻発してます。慣れの問題なんでしょうが、coffeescriptは初めてなので何が問題なのかようわかっておりません。。
iOSでBluetoohLE アプリを作るための基礎知識

Bluetooth LEとは
----

従来のバージョンに比べ大幅に省電力化(Bluetooth LE)。ボタン電池1つのみでも数年駆動可能。

転送速度は1Mbps、データパケットサイズが8 - 27オクテットと非常に小さい。

以前のバージョンとの互換性を持たないが、ホスト側は2.1もしくは3.0を組み込んだ「デュアルモード」を実装可能。

→基本的には家電製品などなど組み込みむけの仕様

iOSでのBluetooth実装
----
    Game KitのPtoP機能をつかう

    Core Bluetoothによる実装
        Bluetooth LEを扱うためのフレームワーク

Bluetooth LE の概念
----
    ハード的にはiPhone4S以降より対応。
    iOS5まではiPhoneはセントラルのみになれる
    iOS6からは、iPhoneがセントラルにもペリフェラルにもなれる
    iOS7からは、APIがさらに強化されている

セントラル、ペリフェラル？
----
セントラルとペリフェラル

    セントラル (Central)
        サービス提供しているデバイスを扱う側

    ペリフェラル (peripheral)
        サービスを提供するデバイス側

が役割ごとの名前となります。

例えば家電の情報をBluetooth LEによりiPhoneなどでチェックできるものがあったとしたら

    家電がペリフェラルとしてサービスを提供
    iPhoneがセントラルとしてそのサービスを利用する

となります。

次に実際にbluetooth LEでのサービス提供には、さらにサービスとキャラクタリスティックという概念を知る必要があります。

プロファイルとサービスとキャラクタリスティック
----
Bluetoothでのデータをやり取りするにあたりプロファイル、サービスとキャラクタリスティックという概念が存在します。

    サービス(Service)　　　　　　
        提供するサービスの集合。提供するサービスに複数の種類のキャラクタリスティックを用いて、サービスを提供します。

    キャラクタリスティック (Characteristic)
        提供するサービスで扱うデータや情報のやり取りをする振る舞いごとの単位。
    プロファイル(Profile)
        これらサービス、キャラクタリスティックのあつかって提供する機能のまとまり

例としてはバッテリー情報を提供するデバイスがあったとしたら

    例えばバッテリーの残量情報,バッテリー情報の通知キャラクタリスティックの単位となります。
    サービスは複数のキャラクタリスティックを使ってサービス提供します。
    バッテリー情報の読み出し、パッテリー情報を通知など機能単位がサービス
 　 またそれらサービスをまとめて一つのバッテリーを扱う集合として、まとめたのがプロファイルとなります。

下記にBluetooth LEのプロファイル、サービスリストがあります。
https://developer.bluetooth.org/TechnologyOverview/Pages/Profiles.aspx

キャラクタリスティックの振る舞い

キャラクタリスティックはそれぞれで、どう振る舞うかを決めます。

ざっくりとした振る舞いの種類として

    データ読み込みを提供
        特定のデータをセントラルへ渡す
    データ書き込みを受け付ける
        セントラルからデータを受け取り、何らかの処理をする。
    イベントの通知機能を提供
        このキャラクタリスティックをオブサーブしたセントラルへ通知イベントをfireしたり、一緒にデータを送信したり。

の3種類があります。細かく分けるともっとありますが、基本的にこの３つのタイプです。

これらを組み合わせてサービスを作ります。

キャラクタリスティックは単体でデータを保持したり、さらにディスクリプタという値を保持するものを複数もってやり取りする場合もあります。

利用シーン考察
----
一回でおくれるパケットサイズが非常に小さいため、大容量のデータの転送にはむかないので、細かい情報のやり取りでいかに有意義なサービスが作れるかが肝か。ただしiOS7では転送量を変更できたと思うのでiOSデバイス同士ではその限りではないかも。

また、組み込みでの利用はこの通信使用内で制限されますが、iPhoneでペリフェラルの実装を行った場合は、ほかの通信手段とも組み合わせられるのでデータの転送自体は別でやるといったことが考えられます。iOS6ならペリフェラルになれることと今までのBluetoothを扱うときの用に接続自体にユーザーの確認等が必要ないので、工夫次第でいろいろな用途に使える。すれ違い通信とか行ける。



iOSでの実装方法
----
GameKit

    GKPeerPickerController
    1対1のみ対応。接続に確認が必要。用途絞れば使える。
    GKSession
    複数接続も対応可能。CoreBluetoothを抽象化してくれているので、CoreBluetoothよりは断然つかいやすい。

Core Bluetooth

    GKSessionより、さらに細かくハンドリングできる。おそらくRSSIとかの電波レベルを取得したり、細かいBluetooth LEの仕様の機能を使えるのはこちらだが、仕様自体をちゃんと把握しないといけないので面倒。


Multipeer Connectivity framework
  
    iOS7からのframework。bluetoothだけの実装ではないが、簡単にピアコネクションが行えるそう。

Core Bluetoothやってみて
----
backgroundでの継続処理はiOS7で強化されている（ちゃんとためしてないけど）

アプリを急に落としたりして、ちゃんとハンドリングしないと、接続が残るのか、頻繁にエラーが発生する。一旦Bluetoothのon/offしないとだめになったり。

Core Bluetoothだと接続の流れとか仕様をちゃんと理解するのが面倒。GameKitにすればよかった感。

Bluetoothテストアプリで仕様とかを確認した。 
https://itunes.apple.com/jp/app/lightblue/id557428110?mt=8
これを使うとテストがとってもやりやすい
 
iOS6のときに試しただけなのでiOS7での検証と具体的な実装例を以後説明していこうと思います。
JEP 188: Java Memory Model Update

Java5で導入された[JSR133 Java Memory Model(JMM)](https://jcp.org/en/jsr/detail?id=133)を更改する試み。

* http://openjdk.java.net/jeps/188
* https://wiki.openjdk.java.net/display/jmm/Main

JSR133/JMM関連情報

* [The Java Language Specification, Third Edition](http://docs.oracle.com/javase/specs/jls/se5.0/html/memory.html) / [和訳](http://www.y-adagio.com/public/standards/tr_javalang/17.doc.htm)
* [The JSR-133 Cookbook for Compiler Writers](http://g.oswego.edu/dl/jmm/cookbook.html) / [和訳](http://www.javareading.com/bof/cookbook-J20060917.html)
* [JSR 133 (Java Memory Model) FAQ](http://www.cs.umd.edu/~pugh/java/memoryModel/jsr-133-faq.html)

解説記事等

* [Javaの理論と実践: Javaメモリ・モデルを修正する 第1回](https://www.ibm.com/developerworks/jp/java/library/j-jtp02244/), [第2回](http://www.ibm.com/developerworks/jp/java/library/j-jtp03304/)
* [並行処理におけるメモリの可視性保証について](http://d.hatena.ne.jp/j5ik2o/20110220/1298215999), マルチコア時代に備えて本気でメモリモデルを理解しておこう [メモリバリア編](http://d.hatena.ne.jp/j5ik2o/20110228/1298840481), [リオーダー & finalフィールド 編](http://d.hatena.ne.jp/j5ik2o/20110225/1298610671)
iOSで動画アプリを作るための基礎知識やライブラリ

iOSで最近動画アプリが盛り上がっていますが、iOSは動画処理のAPIが充実していてAndroidより遥かに簡単に動画アプリを作成することが可能です。


そこで動画アプリを作成するための基礎知識から説明していきます。

使用すべきFramework,ライブラリ
-----

AVFoundation
https://developer.apple.com/library/ios/documentation/AVFoundation/Reference/AVFoundationFramework/_index.html

iOSでの動画処理はこのフレームワークを利用していきます。このフレームワークが存在するおかげでかなり動画アプリの作成のハードルが低くなっていると思います。

具体的にどんなアプリが作れるか例のアプリをのせながら記載します。

動画に対してフィルターをかける
----
まず処理として思い浮かぶのが写真と同様にフィルターをかけることです。


音声や動画を合成して一つの動画にする
----
写真と違うのは音声も一緒にのせることができる点がおもしろいところです。


動画に別の画像やアニメーションレイヤーをのせて、デコ動画を作ったり
----
ほかのスタンプなどの素材を重ねることも可能です。さらにAVFoundationはアニメーションを重ねることも
簡単に実現できます。

写真から動画をつくったり,動画から写真を抜き出す。
----
動画そのものの処理ではなく、写真からの動画生成や、また逆も可能です。



アプリ例
----
Roadmovies
https://itunes.apple.com/jp/app/roadmovies/id575022047?mt=8
このアプリがはやってから動画アプリに火がついた気がします。フィルター処理は動画と音声の合成などで可愛いムービー我作れますね

SLIDE MOVIES
https://itunes.apple.com/jp/app/slide-movies-haokina-yin-lede/id696463126?mt=8
写真から動画を生成するアプリがはやっていますが、一番はやっていそうなのはこれ。
動画より写真の方がよく撮るので、それを使う方がよりシーンとしてはおおい気がしますね。

Rabbit cam
https://itunes.apple.com/jp/app/jian-dan-kawaii-dong-huadekoapurirabbit/id722762207?mt=8
動画に対してデコレーションができるアプリです。これができるということは、素材の工夫やアニメーションの工夫でまだまだいろんな可能性がありそうです。

Acumo
https://itunes.apple.com/cl/app/acumo-akushon-dong-hua-zuo/id696248139?mt=8
動画自体のframe rateの変更や、逆再生なども実装可能です。別の面白さを演出できる可能もあります。


ライブラリ
----
GPUImage
https://github.com/BradLarson/GPUImage

AVFoundationをそのまま利用するのが難しい場合GPUImageを利用するとフィルター処理については
簡単に扱うことができます。
動画フィルターについてはこちらを利用する方がよいでしょう。


動画処理は写真処理よりさらに難易度高めで、挙動や概念が難しい部分があるので簡単には行きませんが、覚えたらいろいろなことができます。

今後は具体的な処理を説明していこうとおもいます。

ぜひ覚えて素晴らしいアプリを作っていきましょう！
AWS SQSを使ってみる

## SQSに関して

 * いろいろと解説されている、ここら辺の説明が図入りでわかりやすかった
  * [Amazon SQS による分散キュー ｜ Developers.IO](http://dev.classmethod.jp/cloud/amazon-sqs-queue-service/)
  * [Amazon SQSを使ってみた① | Septeni Engineers' Blog | セプテーニ エンジニアブログ](http://labs.septeni.co.jp/?p=822)

## Rubyからの利用について

 * 以下で解説されているように簡単
  * [RubyでAWSのSQSを使う - Qiita](http://qiita.com/gari_jp/items/005072ab220dbb23a5a4)

## 使用例

### バックエンドの画処理
 * WEBサーバのフロントエンドで時間がかかる画処理をしてレスポンスを返すとユーザが長い間待つことになるので、SQSを介してバックエンドで処理とか

![ハンズオン.png](https://qiita-image-store.s3.amazonaws.com/0/16768/c6866afc-63e9-e983-59d1-ea19e1649f93.png)

* 上記構成だと下図のように同じメッセージが複数インスタンスで取得され、処理される可能性があるらしい
 * 防止しようとするとDynamoDBなどでインスタンス間の同期処理が必要 

![2重ポール.png](https://qiita-image-store.s3.amazonaws.com/0/16768/8798a701-040b-de84-ee6b-18209192dff0.png)


### VPC間の通信
 * SQSはリージョンレベルのサービスなので、VPC間のやりとりをSQSで行う場合があるらしい
magit使用時git rebase -iでgit-rebase-modeが起動しないようにする


magit, 基本的に便利に使ってるけど`git-rebase-mode`はちょっとお節介すぎる. commitの順番を変えるために`M-p/M-n`で移動する必要がある等のオレオレキーバインド持って来られても困る. 今までのように普通のエディタで修正したい.

[git-modes/git-rebase-mode.el at master · magit/git-modes](https://github.com/magit/git-modes/blob/master/git-rebase-mode.el)

`defadvice`使う機会か, と思ったけど, 単純に特定ファイル開いた時の自動起動をなくすだけなら,

```
;;;###autoload
(add-to-list 'auto-mode-alist
             '("/git-rebase-todo\\'" . git-rebase-mode))
```

これを無効化してやればいいだけか. `auto-mode-alist`から削除する.

```
(setq auto-mode-alist (remove (rassoc 'git-rebase-mode auto-mode-alist) auto-mode-alist))
```


git-rebase-todoって一時ファイル作成はgit自身の機能なのね
MRI Array実装メモ(2.2.0-dev現在)


MRIのArray実装を追いかけたのでメモ。

# データ構造

```c:include/ruby/ruby.h
struct RBasic {
    VALUE flags;
    const VALUE klass;
};

struct RArray {
    struct RBasic basic;
    union {
         struct {
            long len;
            union {
                long capa;
                VALUE shared;
            } aux;
            const VALUE *ptr;
        } heap;
        const VALUE ary[RARRAY_EMBED_LEN_MAX];
    } as;
};
```

# 種類

単にArrayといってもMRIの内部的には3種類ある。

## Embed Array

as.aryの部分。

配列の長さがRARRAY_EMBED_LEN_MAX(現状3)以下であればRArray構造体の中にデータを入れてしまう。

こうすることで配列用のmallocとfreeを減らせるので少メモリ・高速化を図れる。

この配列の長さ(0〜3)はbasic.flagsの中に2bit分の領域を確保してあり、マスクを掛ければ長さが取れるようになっている。

```c:include/ruby/ruby.h
#define RARRAY_LEN(a) \
    ((RBASIC(a)->flags & RARRAY_EMBED_FLAG) ? \
     (long)((RBASIC(a)->flags >> RARRAY_EMBED_LEN_SHIFT) & \
      (RARRAY_EMBED_LEN_MASK >> RARRAY_EMBED_LEN_SHIFT)) : \
     RARRAY(a)->as.heap.len)
```

## Normal Array

as.heapの部分。

ptr: 配列の長さが4以上だとRArrayに入りきらない。なので別領域にメモリを確保してそのポインタを覚えておく。

len: Rubyオブジェクトとしての配列の長さ。

aux.capa: 配列のメモリを確保している分の長さ。len以下にはならない。メモリ確保(malloc)は一般的に重いので、大きめに確保しておいてRubyオブジェクトの長さはlenで表す。例えば`Array#pop`はaux.capaはそのままでlenを1つだけ減らしているだけで表現できる。これによりmallocとfreeの回数を減らしている。

## Shared Array

as.heap.aux.sharedの部分

CopyOnWriteを実現するための機能。表には出ないけどかなりの部分で使われている重要な概念。

basic.flagsにはこのオブジェクトがsharedかどうかのフラグを1bit分持っている。

```c:array.c
# define ARY_SHARED_P(ary) \
    (assert(!FL_TEST((ary), ELTS_SHARED) || !FL_TEST((ary), RARRAY_EMBED_FLAG)), \
     FL_TEST((ary),ELTS_SHARED)!=0)

#define ARY_SHARED_ROOT_P(ary) (FL_TEST((ary), RARRAY_SHARED_ROOT_FLAG))
```

Normal Arrayをsharedすると、freezeして間接的に参照するだけのARY_SHARED_ROOTを作る。自身はこのROOT参照するShared Arrayになる。

どのRubyオブジェクトを参照しているかをas.heap.aux.sharedで覚えておく。
また、SharedArrayのas.heap.ptrはSharedRootArrayのas.heap.ptrと同じものを見ている。

ROOTはいくつのArrayをsharedしているかをas.heap.aux.capaに書き込む。これによりShared Arrayのcapaはそれぞれで持っているので開いている領域を再利用している。

Arrayの破壊的なメソッドでは`rb_ary_modify`でSharedArrayだったらshared状態を解除するようになっている。

これにより、ただコピーしただけでは参照先の配列分malloc&freeしなくて良くなる。配列の長さが長いほど効果的。

`Array#shift`ではSharedしてから自身のas.heap.ptrを右にずらすという荒業(？)で高速化している(memmoveだと処理速度がサイズに比例する)。SharedしたROOTにはメモリを確保した箇所を覚えているのでfreeできるようになっている。

Sharedを解除する場合はShared数が1個だけならmemmoveして領域を使いまわす。新たに領域を確保してコピーしてfreeとするよりエコロジーになる。それ以上のShared数ならしょうがないので単にメモリ領域を確保してコピーする。

# わからないこと

- `Array#shift`でSharedじゃないオブジェクトかつ引数が指定されている場合単にメモリを全部ずらしている。
引数なしの時は`ary_make_shared`するのに引数ありだとしないときがあるのは何故だろう？
  - 引数が0,1,2,3の時だけ遅いようなのでバッチを書いた。 => https://github.com/ruby/ruby/pull/537
- ARY_DEFAULT_SIZEは何故16？
- Shared数をcapaに書くようにしているのは何故だろう？(unionでshared_lenという名前にするとか)うーん。sharedとかぶってよりややこしくなるのかな？

# 参考

http://i.loveruby.net/ja/rhg/book/object.html

https://twitter.com/_ko1/status/430973831818141696
画面キャプチャしてメール送信(ImageGrab)

* Windows機でしか見られない画面を毎日チェックするのって面倒です。またその端末の前に居ないと見れません。その問題を解決するために作ったソースの一部をメモしておきます。
* 画面キャプチャにはImageGrabを使いました。PILに入っています。Windowsのみ動作の模様。
* Ubuntu用には[pyscreenshot](https://pypi.python.org/pypi/pyscreenshot)というものもあるようです。
* 応用すると、py2exeで作ったexeをサポートして欲しい人に実行してもらい、画面の様子をHTTPでPOST送信ｰ>メール受信 など組み合わせる事ができます。

画面キャプチャ
===========
```py:画面キャプチャ例
import ImageGrab

def screen_capture(fname):
  img = ImageGrab.grab((150,50,1280,760)) # x,y, x,y
  img.save(fname)

def screen_capture_full(fname):
  img = ImageGrab.grab()
  img.save(fname)

if __name__ == '__main__':
  screen_capture("capture.png")
  screen_capture_fullscreen("capture_fullscreen.png")
```

画面キャプチャしてメール送信
=======================

```py:
from email.mime.multipart import MIMEMultipart
from email.mime.image import MIMEImage
import smtplib

import os
import capture
import time

def ie2png(pages):
    import subprocess
    for page in pages:
      fname = page[0] + ".png"
      ie = "C:\Program Files\Internet Explorer\iexplore.exe"
      p = subprocess.Popen([ie, "-k", page[1]])
      time.sleep(15) # 15秒も待てばレンダリング終わるでしょう。
      capture.screen_capture_full(fname)
      msg.attach(getimage(fname))
      p.kill()

def sendmail(subject, to):
    mailer = smtplib.SMTP()
    mailer.connect("192.168.11.100") # SMTPサーバー
    from_ = "batch@mydmain.com" # 送信者のメールアドレス。任意の値
    msg["subject"] = subject
    mailer.sendmail(from_, to, msg.as_string())
    mailer.close()

if __name__ == '__main__':
  pages = [
      ["googlenews","https://news.google.co.jp"],
      ["cacti","http://myserver/cacti/exported_graph/"],
  ]
  msg = MIMEMultipart()
  ie2png(pages)
  sendmail("news", "mymail@addr.com")
```

タスクスケジューラに登録。
fluent-plugin-forward-awsで疎結合なログ転送

自作プラグインの紹介です。
https://github.com/tomohisaota/fluent-plugin-forward-aws

小規模なプロジェクトでは、「スケールし、落ちないログ転送先」を確保するのはなかなか難しいものです。Fluentdには再送機能があるおかげで一時的な障害には対応しやすいですが、Auto Scaleのようにダイナミックにインスタンスが増減する構成だとログサーバの生死が大きな問題になります。

また、ログの転送先には様々なニーズがあるため、一台のログ転送先ですべてに対応しその構成を変更する度にログ転送先を止めるのは不便だと思います。

* Elastic Search + Kibanaで可視化したい
* GrowthForecastでグラフ化したい
* 自作のスクリプトで監視をしたい

その対策として作成したのが、fluent-plugin-forward-awsです。
すべてのログをAWSのS3+SNS+SQSを経由して転送することで、ログの転送元と転送先を疎結合にします。転送元の追加、削除はもちろん、負荷分散のために転送先を増やしたり、転送先を複数種類作ることも出来ます。

また、すべての通信がAWS経由となるため、ログ転送元とログ転送先を同じネットワークに接続する必要もありません。必要であれば自分のローカルPCや、モバイル端末にでもログを転送できます。

基本的なコンセプトはWikiに図としてまとめてあります。
https://github.com/tomohisaota/fluent-plugin-forward-aws/wiki/Forward-AWS-plugin-concept

僕はRuby初心者なので、より信頼性の高い実装にするために強力してくれる方を募集中です。
Node.js Debug and Test Tips


## 概要
Node.jsの開発で、デバッグやテストに役に立つTipsをまとめました。

## デバッグ
### console.xxx
標準出力にログを出力する。

- console.log()
- console.info()
- console.warn()
- console.error()
- console.dir()
- console.trace()  =>  スタックとレースを出力
- console.time()  =>  始めから終わりまでの時間を出力

### assert.xxx
値が期待した値と異なる場合は、例外を発生させる。

### node debug
コマンドライン上でデバッグする。

- c: continue 実行
- n: next 次の行を実行
- s: step 次の関数内を実行
- repl: プログラム内の変数や関数にアクセスする
- watch(): 変数の値をウォッチする。引数はテキストで変数名を指定する
- unwatch(): 変数の値をウォッチを解除する
- setBreakPoint / sb: ブレークポイントを設定する
- clearBreakPoint / cb: ブレークポイントを解除する

### node-inspector
GUI（Coogle Chromeのデバッガー）でデバッグする。

```
# node-inspectorをインストール
npm install -g node-inspector

# node-inspectorでデバッグするプロセスを起動する
node --debug-brk app.js

# node-inspectorを起動
node-inspector
```

## テスト
### mocha
ユニットテストのフレームワーク

```
npm install mocha
```

### supertest
expressのwebテストフレームワーク
mochaと合わせて使う、httpレベルのでテストが可能。

```
npm install supertest
node_modules/mocha/bin/mocha --reporter spec
```

### supertest-session
supertestにsession管理機能を追加したもの。
ログイン機能などがある場合はこちらを使うと良い。

```
npm install supertest-session
node_modules/mocha/bin/mocha --reporter spec
```
SublimeTextのカラースキームのコメント色を変えたい



/Users/[UserName]/Library/Application Support/Sublime Text 2/Packages/Theme - Cobalt2/cobalt2.tmTheme

```

<dict>
      <key>name</key>
      <string>Comment</string>
      <key>scope</key>
      <string>comment</string>
      <key>settings</key>
      <dict>
        <key>fontStyle</key>
        <string>italic</string>
        <key>foreground</key>
        <string>#7495ff</string> ← ココ
      </dict>
    </dict>
```
Go言語: go-json-restでJSONではなくHTMLを返す



[Go言語 - こんなに簡単! Goで作るRESTサーバー - Qiita](http://qiita.com/suin/items/f32fa82d6c35a34e8d16)でRESTサーバーを作る方法を紹介したが、部分的にJSON以外のものを返したい場合があったので、その方法をしらべてみた。


```go:main.go
package main

import (
    "github.com/ant0ine/go-json-rest"
    "log"
    "net/http"
)

func index(w *rest.ResponseWriter, req *rest.Request) {
	w.Header().Set("Content-Type", "text/html; charset=utf-8")
	w.Write([]byte("<div>html</div>"))
}

func main() {
    handler := rest.ResourceHandler{}
    handler.SetRoutes(
		rest.Route{"GET", "/", index},
    )
    log.Printf("Server started")
    http.ListenAndServe(":9999", &handler) // ポート9999で立ち上がる
}
```

```
HTTP/1.1 200 OK
Content-Length: 15
Content-Type: text/html; charset=utf-8
Date: Tue, 18 Feb 2014 18:02:42 GMT

<div>html</div>
```
Mac上で高速エミュレータを起動したらフリーズした時の対処法


#注意：自己責任です。

###対象者
MacでIntel指定のAVD起動したら画面中央にクルクルが表示される人

###対処法
Androidツールで落としたdmgファイルではなく直接ドライバをインストールする
http://software.intel.com/en-us/android/articles/intel-hardware-accelerated-execution-manager
**バージョン間違えないように注意する。**



自分の旧iMac(Mountain Lion)では動いたんだけど、新iMac(Mavericks)だと動かなくなったけど上のドライバインストールしたら解決した。
gitの日付指定はキケン

「○日のソフトだったら動いていたのに。。。」ということはよくある。

そんなときgitリポジトリではどうやって環境を再現するべきなのだろう。

結論を先に書いておくと、「きちんと運用をしておかないと機械的に厳密に再現することはできない」
＃良い方法があったら教えてください。

真っ先に思いつくのは`git log -1 --until=2013-01-23`などでその日付以前の最後のコミットを抽出し、checkoutするという方法。

だがこの方法には落とし穴がある。指定した日付以降にmergeした修正（当時まだ導入していない修正）を、checkoutしてしまう可能性があるのだ。

例えば下記の操作をした場合、2013/01/23リリースのソフトといえばcommit1までをcheckoutしたいが、実際にはcommit2までをcheckoutしてしまう。

    [2013-01-22]
      git checkout release-branch
      git commit -m "commit1"
    [2013-01-23]
      git checkout topic-branch
      git commit -m "commit2"
    [2013-01-24]
      git checkout release-branch
      git merge topic-branch
    (2013-01-23リリースのソフトで不具合発覚)
      git checkout `git log -1 --until="2013-01-23" --format=%H`

いやらしいのは`git log`を見る限りちゃんと日付で取り出せているように見えるので、知らず知らずのうちにぜんぜん違うソフトで作業してしまう可能性があることだ。

ではどう運用すればいいのだろうか。いくつか思いつく運用を列挙してみる。まぁ1か2が無難。

1. リリースブランチにmerge後、毎回タグをうつ
これが一番オーソドックスかつ確実。運用ルールを理解していない人が先走ってmergeしてしまった場合も、後追いでタグを打つこともできる。

2. リリースブランチにmerge後、毎回リリースブランチにコミットする
バージョンやリリースノートをリポジトリ内のファイルで管理している場合、この方法が自然。checkoutするときはバージョンファイルに対して`git log -1 --until`すればOK。欠点はファイル構成が変わってしまった場合少しトレースしにくくなること。なのでコミットログのフォーマットを決めておくとベター。

3. リリースブランチにmergeするときに、リリースブランチがfirst parentになるように気をつける
この運用がうまくいけば、`git log -1 --first-parent --until`で取り出せる。ただこれは共同開発するときに周知するのが難しいかな。。。見た目にもそういう運用をしていることが見えにくいので無意識に壊されてしまう可能性が高そう。
参考：[git log --first-parentのすゝめ](http://d.hatena.ne.jp/hiratara/20121107/1352284754)

4. mergeしない
常にリリースできる単位でしかコミットせず、他の誰かがコミットしてたらコミットやりなおし。。。できると思わないし、やりたくもないけど。てゆーかこんな神がかり的な運用ができるならgitいらないか。
androidでピヨって出てくるviewの実装方法


下のgif画像みたいな挙動をどうやって実装するかという話です

<img src="http://gifzo.net/BCUJT7mT45v.gif" width=200 />

[動画(youtube)](https://www.youtube.com/watch?v=YK_jr6Rf7p0&feature=youtu.be)

ネタ元 : [Android: show/hide a view using an animation(stackoverflow)](http://stackoverflow.com/questions/9252740/android-show-hide-a-view-using-an-animation)

ポイントは
* View.StartAnimationを使う
* View.setVisibilityでビューの表示/非表示を切り替える

サンプルを書いてみた

```activity_main.xml
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:layout_marginTop="100dp"
    >
    <!-- このTextViewをピヨっとさせたい -->
    <TextView
        android:id="@+id/childview"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:orientation="vertical"
        android:text="child view here!!"
        android:fontFamily= "sans-serif-light"
        android:textSize="30sp"
        android:textColor="#e2f2f8"
        android:gravity="center"
        android:visibility="gone"
        android:background="#17abe1"/>
</LinearLayout>

```

最小限の実装がこんな感じになる

```MainActivity.java
public class MainActivity extends ActionBarActivity {
    View containerView;
    View childView;
    Animation inAnimation;
    Animation outAnimation;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        containerView = findViewById(R.id.container);
        childView = findViewById(R.id.childview);
        inAnimation = (Animation) AnimationUtils.loadAnimation(this, R.anim.in_animation);
        outAnimation= (Animation) AnimationUtils.loadAnimation(this, R.anim.out_animation);
        containerView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // ビューが表示されてるか判定
                if(childView.getVisibility() == View.GONE){
					  // アニメーションしながらViewを表示
                    childView.startAnimation(inAnimation);
                    childView.setVisibility(View.VISIBLE);
                }
                else{
					  // アニメーションしながらViewを隠す
                    childView.startAnimation(outAnimation);
                    childView.setVisibility(View.GONE);
                }
            }
        });
    }
}

```

アニメーションの定義はネタ元にも載ってるけどY座標を上下させるように記述をするとピヨっとした感じになる 

```in_animation.xml
<translate
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="1000"
    android:fillAfter="false"
    android:fromXDelta="0"
    android:fromYDelta="-20%"
    android:toXDelta="0"
    android:toYDelta="0" />
```
outのアニメーションもfromとtoを入れ替えた感じにすれば問題ないです

あとたぶん思った感じにならないのでアニメーションさせるViewに対してMarginは取らないほうがいいです  

こういうコード毎回書くの面倒なので，ネタ元ではRelativeLayoutを継承してAnimatingRelativeLayoutというクラスにまとめています  
[Android: show/hide a view using an animation(stackoverflow)](http://stackoverflow.com/questions/9252740/android-show-hide-a-view-using-an-animation)
[Objective-C] KeyValueObserve（キー値監視）メモ


Cocoaフレームワークには、KVOと呼ばれるオブザーバの機能を標準で擁しています。
基本的な考え方は、KVO用に作られたメソッドを経由してプロパティを操作することで、適切にその変化をオブザーバに通知する、という仕組みです。

KVOに準拠するためにはプロパティのアクセサメソッドを適切に設定しないとなりませんが、通常のプロパティを使っている場合は特に問題なく準拠できていることになります。

##KVOの登録

とあるプロパティの値の変化を監視する場合。

```objc
// HogeClassのインスタンスを生成。`fuga`というプロパティを持っている想定
HogeClass *hoge = [[HogeClass alloc] init];

[hoge addObserver:self forKeyPath:@"fuga" options:NSKeyValueObservingOptionNew context:nil];
```

監視対象オブジェクトの`addObserver:forKeyPath:options:context:`メソッドにメッセージを送信し、監視元（オブザーバ）として自分自身を登録しています。
この登録を行ったクラス側では、以下のメソッドを実装する必要があります。（値が変化した際に呼び出されるメソッドです）

```objc
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
	// 変化した値がなにかを判別
	if ([keyPath isEqual:@"fuga"]) {
		// 処理したいキーだった場合は処理
	}
}
```

ちなみに渡される引数は以下の通りです。

| 引数 | 値 | 例 |
|--------|--------|---------|
| keyPath | 変化したキー | fuga |
| object | 監視対象オブジェクト | hoge |
| change | 変更された値 | fugaの値と変化した状態の情報 |
| context | 任意のオブジェクト | nil |

###contextについて

contextに渡す値はオブザーバに伝えたい任意の値です。
Appleのガイドラインから引用すると、

>
オブジェクトをオブザーバとして登録するときに、コンテキストポインタを提供することもできま
す。コンテキストポインタは、observeValueForKeyPath:ofObject:change:context:が呼び出さ
れたときに、オブザーバに渡されます。コンテキストポインタとしては、C言語のポインタおよびオ
ブジェクト参照を指定できます。コンテキストポインタは、監視の対象となる変化を識別する一意の
識別子として、あるいは、オブザーバに何らかのデータを渡すために使用できます。

この`context`を使用する際、ARC環境下では適切にキャストしないとコンパイルエラーになって使用できません。
具体的にはbridgeキャストを用いて以下のようにする必要があります。

```objc
self.context = @"hoge";
[hogeInstance addObserver:self forKeyPath:@"fuga" options:NSKeyValueObservingOptionNew context:(__bridge void *)self.context];
```

```objc
// 通知を受け取ったとき
NSString *hoge = (__bridge NSString *)context;
```

ちなみに`__bridge`キャストについては以下の記事が分かりやすいです。
[[iOS5] ARC : Autorelease, キャスト, 環境設定](http://blog.natsuapps.com/2011/11/ios5-arc-autorelease-bridge-xcode.html)


##KVOの削除

当然、登録した監視は外すことが出来ます。

```objc
[observedObject removeObserver:observer forKeyPath:@"fuga"];
```

`observedObject`は監視対象オブジェクト、`observer`は監視元オブジェクトです。
（例では`observedObject`が`HogeClass`オブジェクト）


##手動変更通知

監視対象となるプロパティによっては、すべての通知が行われると処理が多くなる場合があります。
その場合は、該当プロパティを手動通知に切り替えてまとめて通知したり、といったことが可能になっています。

手動通知を行う場合は`automaticallyNotifiesObserversForKey:`メソッドを実行し、その中で自動通知か手動通知かを振り分けます。

```objc
+ (BOOL)automaticallyNotifiesObserversForKey:(NSString *)theKey
{
	BOOL automatic = NO;
	if ([theKey isEqualToString:@"fuga"]) {
		automatic = NO;
	}
	else {
		automatic = [super automaticallyNotifiesObserversForKey:theKey];
	}

	return automatic;
}
```

さらに、`willChangeValueForKey:`、`didChangeValueForKey:`メソッドも実装する必要があります。

###手動通知を実装するアクセサメソッドの例

```objc
- (void)setFuga:(NSString *)theFuga
{
	[self willChangeValueForKey:@"fuga"];
	_fuga = theFuga;
	[self didChangeValueForKey:@"fuga"];
}
```
20140219 Ginza.rb Gemfileみせあい

途中参加、とりあえずかんあるけど、とりあえずメモあげます。


redcarpet 
 MarkDown -> HTML

pygments
　ハイライトとかできる

newrelic
　

capistrano-unicorn
 ユニコーンの再起動できるよ

sunspot
　裏でSolrよみこむやつ


zurui-sass-rails
　ずるいデザインのsass

annotate

i18n_generators
　モデル名とか自動でいれてくれるやつ。（Google翻訳とか使っててサービスが止まってるらしく、今使えないらしい）
　たたき台として使うならいいかも。

pry-remote
pry-bybag

ci-reportor
  Jenkinsでレポートするときに使う

meta_request
　chrome Extentionと一緒に使って、Railsの情報が取れる

fabrication
　factory girl的な


accept_values_for
　ワンライナーでテストを複数掛ける

growlとかあよ。

grape
　APIを作るときに作るGem
　newrelic-grapeもあるよ！

active_decorator
　特定のモデルだけで使えるデコレータ
　→テストの時にどうするのかは考えないと。


devise_async
　deviseのメール送信をキューに入れて非同期送信。


exception_notification
　例外をメールで

kaminari

seed-fu
　ちょっと見やすい・・・？seeds.rb
　あとで差分でマスタデータを登録するときとかに便利。

globalize
　マスタデータを国際化したい。何かで推奨されている奴らしい
　→入力は人手

rails-erd
　ER図をpdfで出してくれる。
　ないよりまし。

yard
　ドキュメントを出力するツール

timecop
　時間を使う場合に使えるものいろいろ。


active_resource
　使いづらいので、使わない方がいい。。。。


squeel
　複雑なSQLのwhereとか書くときに便利になる。

settingslogic
　開発と製品で別の設定ファイルが使う時とかに使える。
　設定を継承するやり方が出来る。デフォルト継承して開発・製品とかの設定を作れる。
　yamlの継承もできる。


database.ymlはerbのように使えます。


anemone
　スクレイピング
　→mechanizedよりも簡単に使える。

cachedresource
　ActiveResourceの結果をキャッシュする。
　ActiveResourceのリクエストの頻度が高いので、キャッシュ短くしても結構効果あり。

colorable
　色演算のためのもの。X11とかある。

delay_job_active_record


active_hash
　yamlをactive_recordのように使えるもの。


ransack
　検索機能を追加する
　

geocoder
　位置情報から住所とか取れる。逆もしかり


mini_magic


arproxy
　SQLをフックしてログに残す。
　デバッグでログに残すよう。結構重要。かなり便利
　過去の操作系残すといざとなれば全部戻せる。クエリは全部のこって実行ユーザもわかる。

split
　ABテスト用。結構便利
　Redis必須。


google-dfp-api
　広告用

gon

validates_timeliness
　時間のバリデートをいろいろ追加。

breadcrumbs_on_rails
　パンくずリスト。結構微妙。


brakeman
　脆弱性スキャン。Jenkinsのお供にどうぞ。


使ったことないやつばっかりだ・・・
Dart について思っていること

# 追記

いくつかフィードバックを頂いたので補足。


まず、 Dart と NaCl は比較対象じゃないだろ的な話は、別に比較してません。
何か新しい実行環境を載せるなら LLVM が乗った方が汎用性があるのでは？という意味です。
Dart も NaCl で動けばいいんだろうし。


あと、 Angular.Dart は確かに Angular.js のポーティングに留まらず、 Dart ならではの実装になっていると聞きます。
Angular は流行ってるように思いますが、 DI 周りとか見ても結構 JS の限界を突破している感じがするので、
そこから Dart に流れる人もいるのかもしれませんが、そこからの流入はあまり現実的な気がしないなぁ。。


話はずれるけど、 HTML5 の下りはあまりよく無かったです。うまく書けてなかったけど、例えば Gears のことです(HTML5 が始まる前から、俺の中でそのイメージが強くあったので)。その影響の流れを書き直しました、あくまでイメージでそこは本題じゃないけど。


# 本文

(キーワードでひっかかりやすいように、あえて Qiita に書いてみる)


Alt-JS の文脈で色々と出てきていて、個人的なここまでの感想を。


まず、自分にとって最も現実的なのは TypeScript であろうことは間違いないと思う。


CoffeeScript は解決している問題があまりにも少ないと思う。


Dart は夢を見過ぎだと思う。




でも、一番気になっているのは Dart だったりする。


Dart は基本的に全く新しい言語を一個作って、
その VM をブラウザに載せようという試みという理解。
つまり Dart VM が載ってないブラウザでは動かないから、
dart2js で変換する必要がある。



Dart 的には dart2js は台無しといえば台無しで、
本来の目的は全てのブラウザに Dart VM を載せて、
そこで JS の代わりに Dart が動くことだと思う。


つまり、標準化して Dart VM が IE や FireFox や Safari に載せる必要がある。
これが、「夢を見過ぎ」と言った理由だ。



もし、それが可能なら本当の意味で "ALT" JS なんだけど、
VM レベル、つまり実行環境レベルで載せ替えるのであれば、
NaCl の方が嬉しい人が多いだろうと思う。
PNaCl では、 CPU 非依存の中間コードで配布できるらしいので、それはもっと素晴らしい。
なぜなら LLVM 対応なら全てのブラウザで動き、 JS の代わりに自分が好きな言語をもっていくことができる可能性があるからだ。


少なくとも、言語を JS に変換する、 GWT とか emscripten よりはオーバーヘッドも低そうだし、
そうでなくても、やり方が素直に思える。


しかし、 Mozilla は Emscripten や asm.js を押してて、 PNaCl ですら夢である可能性はある。
唯一の望みは LLVM が Apple 由来であるため Safari は押せばもしかすると、、という点ぐらいだ。


そんな押し問答をしている間に、 ECMAScript 6 の普及を頑張るのが Web としては全うで、
少なくとも TypeScript レベルの ALT であれば、まあ無くてもいいかなぁと思える人は多いかもしれない。
(もちろん、問題は山積みだが)




ここまでの話は、 Web を知っている人であればあまり違和感無く聞いてもらえるかもしれない。
Dart の言語仕様にはいっさい言及していないのは、Web という世界では、標準じゃななければ意味を成さないから。
どんなに言語仕様が良くても、それはオナニーにしかならない。


で、ここまで Dart が「夢である」と言っておきながら、まだ気になるのは
Google はそんな夢のような仕様を何度も標準にしてきたからだ。


Google Gears が出てきた当初、あくまで Google の独自プロダクトだったし、標準にはならないだろ？と思った人は多いはず。
SPDY はどうだ、あんなオレオレプロトコル通るわけない、Google 以外使わないだろうとみんな思ったはず。

でも、 Gears は HTML5 に確実に影響し、いくつかは Web の標準になった。SPDY にいたっては長い潜伏期間の果てに HTTP を塗り替え始めた。
Google は、そういう「夢の様な話」を実現させてきた実績がある。一つではない。失敗も多々あるけど。




まとめると俺が一番気になっているのは Dart の言語仕様でも、 ALT-JS の行方でもない。


「 _Google が Dart という夢をマジで現実に持っていくために描くシナリオ_ 」 だ。


ブラウザというかなり特殊な舞台を背景にしているので、難しさはあるけど、
Google は Dart にそれなりにリソースを割いているように見えるので、無計画ではないのだろうと思う。


このあたりに詳しい人がいたら、是非お話を伺いたい。
また、以上の話は俺の理解の範囲なので、そこがすでに間違っていれば指摘も大歓迎です。
ちなみに、俺自身はしばらく TypeScript か普通の JS でいいかなと思ってる。
Twitter と Equinix 

NTP リフレクションが流行っているらしくて、ネットワークによっては海外サイトがつながりにくくなっています。「EC2につながらん」ってケースも。そんな状況でも Twitter にはサクサクつながります。なんで？どうやらEquinixのネットワーク使って、日本の拠点から海外拠点まで直でつないでいるからみたいです。

tracert した結果

****.tyo.equinix.com (ここまで日本)
xe-0-3-0.pao1-cr2.twttr.com (ここからtwitter US)
ae51.smf1-er1.twttr.com
VirtualBox on Windowsで、ダブルクリックでターミナル非表示でVMを立ち上げる

VirtualBoxの管理アプリを起動せずに、
アイコンのダブルクリックでVMをバックグラウンドで立ち上げ、作業するためのTipsです。

目的としては、SSHなどでログインして作業という使い方をするためのVMを使いたいときに、
ウインドウが、何一つ出ないようにかつ、簡単に所定のVMを起動できるようにするということになります。

VMのGUIいらない、管理アプリいらない、CMDのターミナルさえいらないうざいという方向けです。

```
Set ws = CreateObject("Wscript.Shell") 
ws.run "cmd /c ""c:\Program Files\Oracle\VirtualBox\VBoxHeadless.exe"" -v off -s VMの名前", vbhide
```

という内容の.vbsという拡張子がついたテキストファイルを任意の場所に置いてください。
ダブルクリックすると、VMが起動します。
何も変化がないように見えますが、TaskManagerから動いているのが分かると思います。
VBoxHeadless.exeのパスは、自分のインストールに合わせて適宜変更してください。

VMの名前は、

```
"c:\Program Files\Oracle\VirtualBox\VBoxManager.exe" list vms
```

で、リストアップされるので、それを設定します。
カスタムセルをつかってTableViewのセルを装飾しようとした場合のお約束

# 背景
カスタムセルを使いたくなる局面は結構多いのだが、必ずやることとその内容を忘れてしまうことが多いのでその覚書として。

# 問題
カスタムセルをつかってTableViewのセルを装飾しようとした場合、はじめにviewDidLoadにて登録処理をしないと反映されない。また、カスタムセルで設定した高さは、別途デリゲートメソッドで設定しないと実際に反映されない。

`- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath`

だけ実装してもうまくいかないですよ、という問題。

# 解法
まずはviewDidLoadでカスタムセルを登録。

```objc
   [self.tableView registerNib:[UINib nibWithNibName:@"RecordCell" bundle:nil] forCellReuseIdentifier:@"RecordCell"];
``` 

その後、下記のメソッドにて適切な高さを設定。

```objc
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    return 80;
}
```

これだと、セルの数だけこのメソッドが呼ばれるということで、`viewDidLoad`時に下記の設定を行うことにする。

```
self.tableView.rowHeight = 80;

```

# 参考
http://qiita.com/taka0125/items/eda7692034a68f7c0097
1章の環境構築時のhistoryとメモ

### 前提環境
1. CentOS6.3
1. VPS上で開発

### 環境構築部分+α
1. sudo yum update
1. sudo yum install git
	* なにはなくともGit
1. sudo yum install curl
	* RVMのためにcurlを入れる
1. curl -L get.rvm.io | bash -s stable
	* RVMのインストール
1. source ~/.profile
	* RVMインストール直後は有効になってないのでプロファイルを読み込む
1. sudo yum install libyaml-devel
	* なんでyamlだけ先に入れてるか思い出せない...
1. rvm get head && rvm reload
	* RVMの最新化
1. rvm install 1.9.3
	* Rubyのインストール
1. rvm use 1.9.3@rails3tutorial2ndEd --create --default
	* gemsetの作成。gemsetが何者なのかイマイチよくわかってないけど、Rubyのバージョンとインストールしたgemの組み合わせを保護しておいてくれるって感じなのかな
1. gem update --system 1.8.24
	* gemの最新化
1. vim .gemrc
	* gemrcを編集する
	<pre>
		install: --no-rdoc --no-ri
		update: --no-rdoc --no-ri
	</pre>
1. gem install rails -v 3.2.14
	* railsのインストール
1. sudo yum install libxslt-devel libxml2-devel libsqlite3-devel
	* railsに必要なライブラリをインストールする。
1. mkdir rails_projects
1. cd rails_projects
	* プロジェクト用ディレクトリ作成
1. rails new first_app
	* 最初のプロジェクトを作成
1. gem install sqlite3 -v 1.3.8
1. sudo yum install sqlite-devel
	* sqlite用のgemとライブラリが必要だったのでインストール
gitでコミット済みのコミットを分割し直す

gitで作業履歴が混入して複雑になってしまったヒストリー、あるいは分割コミットを間違えて不適切になってしまったヒストリーの前にどうしようか途方にくれたことがないでしょうか。そうしたとき、コミットAとコミットBの差分を簡単に作業ツリーに戻す方法があります。

```bash
git reset --hard 変更後コミットID
git reset --soft 変更前コミットID
git branch 新ブランチ名
```

後は普通にコミットすればOK。

ちなみに、現在のブランチがプッシュされておらず、２つ目のコマンドを打った時点で、自分のローカルの方がbehindになってなければ、ブランチの作成は不要です。
Androidアプリ爆速開発用ライブラリ3つ

Androidアプリ開発用の便利ライブラリのまとめがいくつかありますが、多すぎな感じがしたので3つに絞りました。

1. [parse.com](http://parse.com "parse.com")
海外のクラウドサービス parse.com。Twitter,Facebook認証からユーザー管理、ファイル保存までしてくれる。AndroidSDKもこの手のサービスでは最もこなれていて、非常に組み込みやすい。ソーシャル系のアプリに限らず、多くの用途に利用可能。

2. [Android Universal Image Loader](https://github.com/nostra13/Android-Universal-Image-Loader "Android Universal Image Loader")
Androidの超面倒な画像のロード処理をやってくれるライブラリ。キャッシュ管理等も充実している。

3. [Android ViewPagerIndicator](https://github.com/JakeWharton/Android-ViewPagerIndicator "Android ViewPagerIndicator")
ページャーを使うときに表示したいタブやドットを簡単に表示できるライブラリ。チュートリアル表示、コンテンツの分類一覧表示の際に重宝する。

以上
MovableTypeでサムネイル画像の横幅と高さの値を取得する方法

# 概要
カスタムフィールドでアップロードした画像の横幅と高さを取得する方法。
```
<img src="サムネイル画像パス" width="横幅" height="高さ" alt="記事タイトル名" />
```
アップロードした画像がユニークな場合、横幅と高さを自動で取得しHTML側で出すという仕組みです。
<$MTAssetThumbnailURL$>でサムネイル画像を取得することはできますが、これだけでは横幅や高さを取得することができません。
今回は、<$MTAssetThumbnailLink$>で対応することができました。
高さを揃えるJSなど、どうしても画像に値を入れたい場合は有効な手法でした。

# ソース
```html
<dt>
<mt:SetVarBlock name="alternate">alt="<mt:EntryTitle encode_html="1" />" class="fade"</mt:SetVarBlock>
    <mt:if tag="EntryThumbnail">
        <mt:EntryThumbnailAsset><a href="<mt:EntryLink />"><$mt:AssetThumbnailLink width='180' regex_replace='/<a.*?>(.*)</a>/','$1' regex_replace='/alt=""/','$alternate'$></a></mt:EntryThumbnailAsset>
    <mt:else>
        <a href="<mt:EntryLink />"><img src="それ以外だった場合の画像" alt="<mt:EntryTitle encode_html="1" />" class="fade" width='180' height="180" /></a>
    </mt:if>
</dt>
```
# 解説
・MTSetVar変数にaltの名前を挿入
・<mt:EntryThumbnailAsset>でサムネイル画像パスと高さと横幅を取得
・regex_replace=に自動で入るものを取り除く
・'$alternate'で指定したものを吐き出す

# 参考
・[テンプレートリファレンス](URL "http://www.movabletype.jp/documentation/appendices/tags/assetthumbnaillink.html")
・[MovableType サムネイルにもwidthとheight両方入れたいんだってばよ！](URL "http://www.prartweb.com/blog/2011/02/mt-width-height.php")
Rails4アプリに対してクロスドメインでAjaxでCookieを送信したい場合


## 長い前置き
最近はWebアプリケーションを開発するときにサーバ側とクライアント側のプロジェクトを分けて開発することが多い。その理由としては、最終的にはクライアント側のリソースをサーバリソースと一緒にしてデプロイするのだけど、最近はYeomanなどクライアント側の開発プロセスも複雑になってきたので分けたいためである。

サーバはRails、クライアントはYeomanを使ってJavaScriptで開発している。
ログイン認証はRails側でFacebookのOAuthを使用し、セッション情報の保持はCookieを使用している。

Railsはポート3000、クライアントはgrunt serveを使ってポート9000で実行しているのだが、JavaScriptからRailsのREST APIにリクエストを投げたときにOriginが違うのでRailsで作成したCookieが付与されないので、Rails側でセッション情報が取得できない。

ググると、jQuery.ajaxのオプションのsetCookieとかbeforeSendでsetRequestHeaderでCookieを設定できると書いてあったが、セキュリティ上出来なくなっていた。


## 環境
* Rails 4.0.2
* jQuery 1.9.1


## 解決方法
__jQuery.ajaxの指定オプション__
JavaScript側では、jQuery.ajaxのxhrField.withCredentialsオプションでtrueを設定する。

```javascript
$.ajax({
  url:targetUrl,
  type:'get',
  xhrFields: {
    withCredentials: true
  }
}).done(function(data) {
  // console.log(data);
});

```


__Rails側の対応__
application.rbにクロスドメイン対応を入れる。
Access-Control-Allow-Credentialsにtrueを設定した場合はAccess-Control-Allow-Originにワイルドカードは使えない模様。

```ruby
config.action_dispatch.default_headers = {
    'Access-Control-Allow-Credentials' => 'true',
    'Access-Control-Allow-Origin' => 'http://localhost:9000',
    'Access-Control-Request-Method' => '*'
}
```

## 参考資料
* StackOverflow:[How to set Cookie value with ajax request?](http://stackoverflow.com/questions/16851896/how-to-set-cookie-value-with-ajax-request)

* StackOverflow:[How to set access-control-allow-origin in webrick under rails?](http://stackoverflow.com/questions/2535454/how-to-set-access-control-allow-origin-in-webrick-under-rails)


おしまい。
enumerateLinesUsingBlock: を使って複数行のテキストを一行単位に処理する

# 背景
TextViewに入力された文字列を、一行単位かつ要素単位に分割して永続的に保管するためのメモ。
とりあえずは、複数行を一行単位に処理する手段を探していた。

# 解法
`(void)enumerateLinesUsingBlock:(void (^)(NSString *line, BOOL *stop))block`を利用する。

# 詳細
ブロック内のlineを使って、行単位にやりたいことを記述する

```objc
    //テキスト情報は一行単位で要素に分解
    NSMutableArray *lines = [NSMutableArray array];
    [_todaysRecord.contents enumerateLinesUsingBlock:^(NSString *line, BOOL *stop) {
        [lines addObject:line];
    }];
```


# 参考リンク
http://qiita.com/Ushio@github/items/828d0c806b72c4b71d8d
【Android】ListView内のTextViewのクリックイベント

質問です

ListViewのアイテム上にTextViewを置き、URLにタッチすればブラウザを起動するという処理は、TextViewにautoLink処理をすればできますが、URL以外の文字をタップしたときもtextViewにイベントを消費されてしまいます
Twitterや2ちゃんの専ブラのように、URLをタップしたときはブラウザに飛び、それ以外の文字をタップしたときはListViewのonItemClickを実行するという処理は、どのように実装すればいいのでしょうか

URL用のTextViewとその他の文字用のTextViewに分けて、URL用のTextViewにのみautoLink処理をすればいいのでしょうか？
hubotからcliを叩く方法


↓こんな感じのscriptをhubotに叩かせて結果を表示する方法を示します。

```bash
php cli/talk.php -a hello
hello
```

node.jsのspawnを用いて

```scripts/cli.coffee
spawn = require('child_process').spawn

module.exports = (robot) ->
  robot.respond /do-talk$/i, (msg) ->
    cli_talk = spawn('php', ['cli/talk.php', '-a', 'hello'])
    cli_talk.stdout.on 'data', (data) ->
      msg.send data
    cli_talk.stderr.on 'data', (data) ->
      console.log('cli_talk stderr: ' + data)
```
こんな感じで定義してあげれば

```
Hubot> hubot do-talk
Hubot> hello
```
このように結果を表示してくれます。
同様にして外部のscriptを叩けるので複雑な処理はcliにしてしまえば「coffeeはちょっと…」という方にもオススメです。


>参考
>・[Node.jsのspawnをつかってcoffescriptでps ax | grep sshを実行させるサンプル](http://blog.kzfmix.com/entry/1329911601)
>・[Node.js Child Processes](http://nodejs.jp/nodejs.org_ja/docs/v0.6/api/child_processes.html)
RubyでGoogle Driveにあるドキュメントを扱う


[gimite/google-drive-ruby](https://github.com/gimite/google-drive-ruby)を使うと簡単にです。

[README](https://github.com/gimite/google-drive-ruby/blob/master/README.rdoc)に基本的な使い方は書いていますが、今回は、ドキュメントを扱ってみます。

##やりたいこと
- ディレクトリの中にあるドキュメントのファイルを扱う。
- ドキュメントの中身を取得したい。

##その前に

###Googleアカウントに二段階認証をかけている場合。

[アプリケーション固有のパスワードを使用してログイン](https://support.google.com/accounts/answer/185833?hl=ja)してください。

##実施

```ruby:

require "rubygems"
require "google_drive"
 
#ログイン
session = GoogleDrive.login('Googleアカウント', 'Googleアカウントのパスワード')

#showfolders => true でフォルダ一覧も含める
session.files('showfolders' => true).each do |d|

  if d.title == 'フォルダのタイトル'
	#documentsでドキュメントの取得
    d.documents.each do |f|
		# ファイルのタイトル
		title = f.title
		# テキストでダウンロードするためのurlを生成
		url = f.document_feed_entry.css('content')[0]['src']
		url += '&exportFormat=txt&format=txt'

		#テキストの取得
		body = session.request(:get, url, :response_type => :raw)
		text = body.force_encoding('UTF-8')
    end
  end
end

```

##参考

[コチョナナバ: rubyでgoogle docsをテキストで取得する](http://kingyo-bachi.blogspot.jp/2013/04/rubygoogle-docs.html)
attrとpropで違う値が取得されるパターン

## 真偽値

``` html
<input id="hoge" type="checkbox" checked="checked" />
```

```js
console.log('prop:' + $('#hoge').prop('checked')); //true
console.log('attr:' + $('#hoge').attr('checked')); //"checked"
```

* disabledやreadonly等も同様

## パス（URL）関係

```html
<a id="a" href="./sample.html" />
```

```js
console.log('prop:' + $('#a').prop('href')); //絶対パス/sample.html
console.log('attr:' + $('#a').attr('href')); //./sample.html
```

* imgのsrcやformのaction等も同様 

## 省略してもブラウザが何とかしてくれるもの
```html
<input id="input2" />
<!-- typeを省略した場合はtype="text"として扱われる -->
```

```js
console.log('prop:' + $('#input2').prop('type')); //"text"
console.log('attr:' + $('#input2').attr('type')); //undefined
```

## ブラウザが非対応のもの

```html
<input id="input3" placeholder="sample" />
```

```js
//inputのplaceholderに対応していないブラウザの場合
console.log('prop:' + $('#input3').prop('placeholder')); //undefined
console.log('attr:' + $('#input3').attr('placeholder')); //"sample"
//対応している場合はどちらも「sample」になります。
```

* これを応用すればユーザーエージェントで識別しなくてもHTML5に対応しているかどうかを判断できます。

```js
console.log("placeholder" in document.createElement('input')); 
//対応しているブラウザの場合true
```
cmakeにおける変数の扱い

cmakeでは変数を

```cmake
set(HOMHOM "hom")
```

のように指定できます。
このようにして指定した変数はそれより下のディレクトリ以下に伝わりますが、
上には伝わりません。
上に伝える場合はCACHE指定子を使用します。

```cmake
set(HOMHOM "hom" CACHE STRING "homhom is hommm")
```

この場合、ccmakeにより変数を書き換える事が可能となります。

この仕様を利用して、一番親のディレクトリで

```cmake
set(CMAKE_BUILD_TYPE Release)
```

としておき、テスト用のディレクトリでは

```cmake
set(CMAKE_BUILD_TYPE Debug)
```
とする事が可能です。
HeigiSQL_PortableによるDB接続(自分用、投稿練習用)

## HeigiSQL_PortableでDB(MySQL)にアクセスする際のメモ

以下より『Portable』のボタンをぽちる
http://www.heidisql.com/download.php

HeidiSQL_x.x_Portable.zipが落ちてくるので
適当なディレクトリに解凍

heidisql.exeを起動する

左下の「新規」ボタンぽちる
セッション名「Unnnamed」を右クリックして「名前を付けて保存」
![new.png](https://qiita-image-store.s3.amazonaws.com/0/37006/a31a3a32-322a-a6f1-f1d0-4c54e9dbb02d.png)


* ネットワーク「MySQL(TCP/IP)」
* ホスト名/IP
* ユーザー
* パスワード

を入力してデータベースを選ぶ(コメントは任意)
![2.png](https://qiita-image-store.s3.amazonaws.com/0/37006/1ecfd853-6333-0a83-c9af-aa28716fdd0b.png)

「保存」を押して「開く」

![2.png](https://qiita-image-store.s3.amazonaws.com/0/37006/11d2eb20-0919-73e0-d686-4de12954de16.png)
公開鍵をヨリ楽に設置する方法


#課題

公開鍵を何度も何度も何度も何度も、authorized_keysに入れたり.sshの配下に置いたりするのは結構大変な経験をしてる方もいると思います。chefとかansibleとかあるから、少なくなってきてますが、、、それでもchefをするためのユーザに公開鍵を！みたいなことがあると思います。

#(きっと)今まで

```bash:各サーバで
$ ssh [SERVER]
$ mkdir /home/[USER]/.ssh
$ cat /tmp/[USER].pub >> /home/[USER]/.ssh/authorized_keys
$ chmod 600 /home/[USER]/.ssh/authorized_keys
```

#これから

```ssh-copy-id
remoteサーバから
$ ssh-copy-id -i .ssh/[送信したい].pub [USER]@[SERVER]
```

#補足

ssh-copy-idを複数回実行しても鍵が追記されるのでremoteサーバ側で公開鍵をpoolしておくと便利かもしれないです。

# まとめ

セキュアなsshd_configにしていると少し調整が入りますが、サーバがたくさんあったりすると時間短縮になると思います。
複数キーのルックアップテーブル

[メモ化](http://ja.wikipedia.org/wiki/%E3%83%A1%E3%83%A2%E5%8C%96)では、関数／メソッドの呼び出し結果を、そのときの引数とあわせて覚えておく必要があります。

記憶域としては、連想配列、すなわち`Dictionary<TKey, TValue>`クラスをルックアップテーブルとして使うのがよさそうですが、関数／メソッドのアリティは単項とは限らないので、複数のキーに対応しなければなりません。

一番シンプルなのは、キーとしてタプルを使う方法です。タプルは`Object.Equals()`メソッドをオーバーライドしていて、格納している構成要素がすべて一致すれば`true`が返ります。同じように`Object.GetHashCode()`メソッドもオーバーライドされています。つまり、`Dictionary<TKey, TValue>`のキーとして使うことができます。

ただし、既定の実装では、構成要素を比較する時に`object`型にキャストして比較します。構成要素が値型のときはボックス化されてしまうこともあり、効率はあまりよくありません。

効率を良くしたい場合は、タプル用の等値比較オブジェクト、すなわち`IEqualityComparer<T>`インターフェースの実装クラスを用意して、`Dictionary<TKey, TValue>`のコンストラクタに引数として渡すことになります。

タプルは`IStructuralEquatable`インターフェースを実装しているので、`IEqualityComparer<T>`インターフェースの実装クラスの型制約に`IStructuralEquatable`を付けておけばいいように思えますが、それも効率はよくありません。効率のためには、タプルの要素数ごとに別のクラスが必要になります。たとえば、要素数4のタプルであればこんな感じです。

```csharp:TupleComparer.cs
class TupleComparer<T1, T2, T3, T4> : EqualityComparer<Tuple<T1, T2, T3, T4>>
{
    private static readonly IEqualityComparer<T1> comparer1
        = EqualityComparer<T1>.Default;
    private static readonly IEqualityComparer<T2> comparer2
        = EqualityComparer<T2>.Default;
    private static readonly IEqualityComparer<T3> comparer3
        = EqualityComparer<T3>.Default;
    private static readonly IEqualityComparer<T4> comparer4
        = EqualityComparer<T4>.Default;
 
    public override bool Equals(Tuple<T1, T2, T3, T4> x, Tuple<T1, T2, T3, T4> y)
    {
        if (x == null || y == null) return (x == y);
        return (comparer1.Equals(x.Item1, y.Item1)
            && comparer2.Equals(x.Item2, y.Item2)
            && comparer3.Equals(x.Item3, y.Item3)
            && comparer4.Equals(x.Item4, y.Item4));
    }
 
    public override int GetHashCode(Tuple<T1, T2, T3, T4> obj)
    {
        if (obj == null) return 0;
        var hash = comparer1.GetHashCode(obj.Item1);
        hash = (31 * hash) ^ comparer2.GetHashCode(obj.Item2);
        hash = (31 * hash) ^ comparer3.GetHashCode(obj.Item3);
        hash = (31 * hash) ^ comparer4.GetHashCode(obj.Item4);
        return hash;
    }
}
```
そろそろJavaScriptでテストコードを書きたくなってきたのでざっと見

書きたい時に書ける環境が有ると素敵なので、少し情報を仕入れておきました。

テストフレームワーク
----
シンプルでフレキシブルなMochaというのが流行りらしい。
[Mocha - the fun, simple, flexible JavaScript test framework](http://visionmedia.github.io/mocha/)

Mochaはアサーションを持たない（！）ので、アサーションライブラリが別に必要。
Chaiがいいらしい。Chai自体はMochaプロジェクトとは関係なく、他のフレームワークにも適応できるようだ。不思議な感じ。
[Chai](http://chaijs.com/)


他の選択肢: Jasmineというのが一番人気ではあるらしい。BDDはTDDよりも求められるテストの粒度が鮮明で好ましい。
[Jasmine: Behavior-Driven JavaScript](http://jasmine.github.io/)

テストランナー
----
Karmaというのがあるらしいけど、Travis CI（後述）から実行する時はあっても無くてもいいらしいので今回はパス。
[Karma - Spectacular Test Runner for Javascript](http://karma-runner.github.io)

自動テスト
----
Travis CIはGithubのプロジェクトを自動でテストしてくれるCI。テスト結果のバッチをつけられるので、これをGithubに付けておくとかっこいい。
[Travis CI - Free Hosted Continuous Integration Platform for the Open Source Community](https://travis-ci.org/ "Travis CI - Free Hosted Continuous Integration Platform for the Open Source Community")

----

以上。
手が空き次第試してtemplateに組み込んでみます。
RailsでTimeZone系のいろいろを取得する


## タイムゾーンの国を取得

### タイムゾーンの国をすべて取得
```ruby:
tz_countries = TZInfo::Country.all
```

### 特定の国のタイムゾーン(地域)を取得する
```ruby:
tz = TZInfo::Country.get("JP")
=> #<TZInfo::Country: JP>

tz.zone_names
=> ["Asia/Tokyo"]
```

一つの国の中に複数のタイムゾーンが存在する国もある。

```ruby:
tz = TZInfo::Country.get("US")
=> #<TZInfo::Country: US>

tz.zone_names
=> ["America/New_York",
 "America/Detroit",
 "America/Kentucky/Louisville",
 "America/Kentucky/Monticello",
 "America/Indiana/Indianapolis",
 "America/Indiana/Vincennes",
 "America/Indiana/Winamac",
 "America/Indiana/Marengo",
 "America/Indiana/Petersburg",
 "America/Indiana/Vevay",
 "America/Chicago",
 "America/Indiana/Tell_City",
 "America/Indiana/Knox",
 "America/Menominee",
 "America/North_Dakota/Center",
 "America/North_Dakota/New_Salem",
 "America/North_Dakota/Beulah",
 "America/Denver",
 "America/Boise",
 "America/Shiprock",
 "America/Phoenix",
 "America/Los_Angeles",
 "America/Anchorage",
 "America/Juneau",
 "America/Sitka",
 "America/Yakutat",
 "America/Nome",
 "America/Adak",
 "America/Metlakatla",
 "Pacific/Honolulu"]
```

## 協定世界時(UTC)との時差を取得する

### 協定世界時との時差を秒を単位とする数値で取得する

```ruby:
name = "Asia/Tokyo"
=> "Asia/Tokyo"

ActiveSupport::TimeZone.create(name).utc_offset
=> 32400 #(秒)

```

### 協定世界時との時差を時間形式(+00:00/-00:00)のフォーマットで表示する

name/identifier(地域名)から取得する

```ruby:
name = "Asia/Tokyo"
=> "Asia/Tokyo"

ActiveSupport::TimeZone.create(name).now.strftime('%z').insert(3, ':')
=> "+09:00"
```

utc_offset(時差（秒）)から取得する

```ruby:
name = "Asia/Tokyo"
=> "Asia/Tokyo"

utc_offset = ActiveSupport::TimeZone.create(name).utc_offset
=> 32400 #(秒)

ActiveSupport::TimeZone.seconds_to_utc_offset(utc_offset)
=> "+09:00"
```
Asciinema の紹介

Asciinema という超便利なサービスを見つけました．

文字通り百聞は一見に如かずなのでまずは以下の動画をご覧下さい．

https://asciinema.org/a/7703

<script type="text/javascript" src="https://asciinema.org/a/7703.js" id="asciicast-7703" async></script>

自分のとあるリポジトリを編集してる風景です．コンソールでの作業がまんま記録されています．エイリアス使いまくりなのでちょくちょく `which` で確認してる様子を挟んでいますし作業自体も大したことないのですがまぁその点はさておくとして…

これさえあれば，勉強会の発表なんかのためのライブコーディングの練習をする必要もなく，記録さえしておけば「昨日はこれ動いたんだけどなぁ…」をそのまま再現出来ますね！

## インストール方法と使い方

公式ドキュメントである [Getting started - asciinema](https://asciinema.org/docs) にめっちゃシンプルに書いてあります．一応ここでも記しておくと以下の通りです．

インストール

```bash
sudo pip install --upgrade asciinema
```

録画開始

```bash
asciinema rec
```

録画が開始されたら適当にコマンド打って作業をします．

録画終了

```bash
exit # or Ctrl-D
```

録画終了時に，

```text
~ Asciicast recording finished.
~ Do you want to upload it? [Y/n]
```

と聞かれるのでアップロードして大丈夫ならそのまま Enter．これだけで，asciinema.org に動画がアップロードされます．

アカウントを作っておくことも出来ます．先ほどのドキュメントにもあるとおり，アップロードした動画を自分のアカウントと紐付けしたい場合は

```bash
asciinema auth
```

しておけば良いです．

## Tips

コマンドを入力してから Enter で実行するまでに一呼吸置くと見やすい動画になります．

ときどき `clear` コマンドで画面を一新してやると更に見やすい動画になります．Ctrl-L でも同じ事が出来てしまいますが，Ctrl-L だと唐突に画面が消えることになるのであえて `clear` コマンドを打つことで視聴者に意図を伝えると良いです．

## 参考

* [Asciinema](https://asciinema.org/)
* [Node GH](http://nodegh.io/) ※このサイトでそもそも Asciinema の存在を知った
youtubeのサムネイルURL

メモ

```html
<!-- 320×180px -->
<img src="http://img.youtube.com/vi/foo/mqdefault.jpg" alt="alt here..." />

<!-- 480×360px -->
<img src="http://img.youtube.com/vi/foo/0.jpg" alt="alt here..." />

<!-- 120×90px -->
<img src="http://img.youtube.com/vi/foo/1.jpg" alt="alt here..." />

<!-- 120×90px -->
<img src="http://img.youtube.com/vi/foo/2.jpg" alt="alt here..." />

<!-- 120×90px -->
<img src="http://img.youtube.com/vi/foo/3.jpg" alt="alt here..." />

```
等間隔の時間ベクトルを生成


たとえば 2014-01-01 00:00:00 から 2014-01-02 00:00:00 までのタイムスタンプのベクトルを1分間隔で生成したい場合はこうする。

```:R
as.POSIXlt("2014-01-01 00:00:00") + seq(0,(24*60*60),by=60)
```
Unity4.3.4でのmeta fileの挙動について

以下に「Unityで外部のバージョン管理システムを使用」とありますが、この情報が少し古い模様。

[Unityで外部のバージョン管理システムを使用]
(http://docs-jp.unity3d.com/Documentation/Manual/ExternalVersionControlSystemSupport.html)

Unity 4.3.4 では、
「Edit->Project Settings->Editor で Meta files を有効化」という項目は存在せず、
Meta Fileに関しては「Hidden Meta Files」と「Show Meta Files」の選択肢が存在する。


[Unityで外部のバージョン管理システムを使用]
(http://docs-jp.unity3d.com/Documentation/Manual/ExternalVersionControlSystemSupport.html)
を読むと、「Meta files を有効化」するとMeta Fileを生成し、
そうでない場合はMeta Fileを生成しないように読めるが
（実際、過去のバージョンはそういう挙動だったような気がするが定かではない）
Unity 4.3.4では、 **Meta Fileは必ず存在** し、「Hidden Meta Files」と「Show Meta Files」は
 **Meta File(*.meta)が隠し属性になるかそうでないか**  でしかないようだ。