OmniAICreator/Qiita-1.07M huggingface dataset:
ButterKnife 7.0への移行ガイド

引用: http://yslibrary.net/2015/06/29/how-to-migrate-to-butterknife-7/

# ButterKnife 7.0への移行ガイド

2015/06/28、[ButterKnife](https://github.com/JakeWharton/butterknife)の7.0.0がリリースされました。  
6.x系からAPIの変更が何点かあるので、簡単に移行手順をまとめます

## アノテーション
### `@InjectView/@InjectViews` -> `@Bind`

Viewを変数にひもづけるアノテーションが、`@Bind`に変更になりました。  
複数の場合も`@Bind`です。とりあえず全部置換しましょう。

### `@Optional`の廃止

レイアウトに存在しないかもしれないViewの時、今までは`@Optional`を利用していましたが、7.0からは`@Nullable`を使います。support-annotationsライブラリの`@Nullable`でも、別のライブラリの`@Nullable`でも構わないようです。

## メソッド名
下記のように変更になっています。

`ButterKnife.inject` -> `ButterKnife.bind`  
`ButterKnife.reset` -> `ButterKnife.unbind`

余談ですが、Fragmentの場合は`onDestroyView`で`ButterKnife.unbind`するようにしましょう。  
Githubでソース見てると忘れてるものを偶に見かけます。

## Proguard設定
ButterKnifeによって自動生成されるクラス名が`FooActivity$$ViewInjector`から`FooActivity$$ViewBinder`に変更されたので、Proguard設定も変える必要があります。  
下記のようになります。

```
-keep class butterknife.** { *; }
-dontwarn butterknife.internal.**
-keep class **$$ViewBinder { *; }

-keepclasseswithmembernames class * {
    @butterknife.* <fields>;
}

-keepclasseswithmembernames class * {
    @butterknife.* <methods>;
}
```

## 新しく追加された機能
### Resource Binding

stringやbool, color等のxmlに定義されたリソースを変数にバインド出来るようになりました。  
下記のアノテーションを使います。

- `@BindBool`: `R.bool`を`boolean`にバインド
- `@BindColor`: `R.color`を`int/ClorStateList`にバインド
- `@BindDimen`: `R.dimen`を`int`(ピクセルサイズ)あるいは`float`(正確な数値)にバインド
- `@BindDrawable`: `R.drawable`を`Drawable`にバインド
- `@BindInt`: `R.int`を`int`にバインド
- `@BindString`: `R.string`を`String`にバインド


こちらからは以上です。

参考: [butterknife/CHANGELOG.md at master · JakeWharton/butterknife](https://github.com/JakeWharton/butterknife/blob/master/CHANGELOG.md)
VPCの構成まとめ


##VPCの構成要素
####VPC
仮想上に構築されるネットワーク領域。

####サブネット
VPC内をさらに分割しらネットワーク領域、インスタンスはこの中に所属する。

####ルートテーブル
ネットワーク用語を使わずに説明するのは難しいですが、、
サブネットとVPC内での通信（ネットワークトラフィック）を関連付ける道標のようなもの。

####インターネットゲートウェイ(以下IGW)
VPCとVPC外のインターネットを繋ぐ門のようなもの。

####ElasticIP
インスタンスに付いているネットワークインターフェイスと固定のPublicIPアドレスをひもづける。

####ネットワークACL(以下ACL)
サブネットへのネットワークアクセスを制御する。

####セキュリティグループ(以下SG)
インスタンスへのネットワークアクセスを制御する。

####インスタンス（EC2、RDS）
必ずどこかのサブネットに所属する仮想上のサーバー。

####ロードバランサ
マネージド型サービスの為、EC2・RDSのようにインスタンス単位での管理はない。
なので必ずどこかのVPCに所属する

####ネットワークインターフェイス(以下ENI)
VPC上のネットワークに接続するための最小単位。EC2やRDSならインスタンスごとに、ELBなら接続するAZごとに作成されます。

##よく混同しがちなもの
####サブネット、アベイラビリティゾーン
サブネットはネットワーク上の区分け、アベイラビリティゾーンは物理的に離れているデータセンターのこと、現実世界の話。
なので一つのアベイラビリティゾーンに複数のサブネットを作ることも出来る。

####インターネットゲートウェイ、ネットワークインターフェイス
インターネットゲートウェイは外のインターネットにつながるための門。
ネットワークインターフェイスはVPC内で通信するための接続口、ここがインターネットゲートウェイにつながるとVPC外と通信できる。PCでいうとLANポートみたいなもの。

##VPC構成図

![VPC構成_03.jpg](https://qiita-image-store.s3.amazonaws.com/0/35271/4f7bb605-7528-41de-382c-7fc40d9357bc.jpeg "VPC構成_03.jpg")

AWSのルートテーブルはVPC作成の際に自動的にメインルートテーブルというものが作成されます。図でいうとルートテーブル1がそれにあたります。
このメインルートテーブルは自動的に作成直後はVPC内のlocalアクセスが定義されています。インターネットに接続する場合、作成したインターネットゲートウェイのIDを0.0.0.0/0で定義します。このルートテーブル1につながったサブネットはインターネットへのアクセスが可能になります。

_注意!!_
サブネット内のセキュリティグループで制限を加えていたりするとアクセス出来ないのであくまでサブネット単位での道ができたと考えるのが近い。その道を通れるのかどうかはACLやSGの設定次第です。

またユーザーが作成するカスタムルートテーブルといったものがあります。図で言うとルートテーブル2です。
これの使いドコロはDirectConnectなどを利用する際のバーチャルプライベートゲートウェイ（VGW）へのルーティングなどに利用されます。
AWSのルートテーブルは基本VPC内部のルーティングは自動的にAWSがわで作られているのであまり意識しにくいところですが、
仮想環境をつなぐ影の立役者といったとこでしょうか。

このあたりをもっと理解するのであればネットワークの入門書などでルーティングの基礎を理解するとより上の図の各レイヤーについてイメージできると思います！
windowsにrubyをインストール


WindowsにRubyをインストールする(初心者向け)
http://qiita.com/shimoju/items/41035b213ad0ac3a979e


##プロキシの設定
```bash:
set http_proxy=http://プロキシサーバ:ポート
set http_proxy_user=プロキシサーバ用のユーザID
set http_proxy_pass=プロキシサーバ用のパスワード
```

##gem installで必要な物をインストール
```bash:
gem install xxx
```
Lumenで省かれたartisan route:listコマンドを追加する方法

Laravelに比べて軽量・高速なLumenですが、Laravelから省かれた機能も多いです。
エンドポイントが少ないAPIであればいいのですが、多くなってくると確認するのが面倒臭くなってきます・・・
なので欲しくなってくるのが ```artisan route:list```コマンド！

移植しようかと思っていたら、すでに作っている人が居らっしゃったので使わせて頂きました。

[https://github.com/appzcoder/lumen-route-list](https://github.com/appzcoder/lumen-route-list)

ダウンロードしてきたlumen-route-listの```app```フォルダをプロジェクトの```app```フォルダに上書きして、以下を追記。

```bootstrap/app.php
$app->register('App\Providers\AppzcoderRoutesCommandServiceProvider');
```

すると、artisanに```route:list```が追加されます。
毎回確認したりするのが面倒くさかったので、非常に便利です！

## 追記の追記 2015-08-30
下記のコマンドの改造を見た[sakuemon](https://github.com/sakuemon)様が本家にプルリクを送ってくれました。
なので、コマンド改造をせずに拡張された```route:list```が表示出来るようになっています。
sakuemonさんに感謝！

# 追記
~~導入した```route:list```コマンドを改造する方法を投稿しました。~~
~~こちらも合わせてどうぞ。~~
~~[Lumenで省かれたartisan route:listコマンドを追加する方法 改造編](http://qiita.com/aozora0000/items/335b930b482502d734e9)~~
よく忘れるhtmlでのあのCに◯とか上に点とか＆とか

# 本当によく忘れるのでメモ（個人的よく使う順）

| HTML | 表示 | 例 |
|:-----------|:------------|:------------|
| `&copy;` | &copy; | XXX &copy; All Rights Reserved. とか |
| `&rsquo;` | &rsquo; | can&rsquo;t とか don&rsquo;t とか |
| `&lt; &gt;` | &lt;&gt; | ホーム &gt; 1層目 &gt; 2層目 とか |
| `&amp;` | &amp; | M&amp;A とか |
| `&nbsp;` | &nbsp; | 改&nbsp;行&nbsp;な&nbsp;し&nbsp;空&nbsp;白 |
| `&rarr;` | &rarr; |  |
| `&quot;` | &quot; |  |
| `&diams;` | &diams; |  |

# 参考

特殊文字一覧　http://e-words.jp/p/r-htmlentity.html
便利な変換ツール　http://tech-unlimited.com/escape.html
[DocFetcher] HTML の日本語を検索できるようにするための修正版

HTML や XLS を串刺し検索できるありがたいオープンソースアプリケーション「[DocFetcher](http://docfetcher.sourceforge.net/en/index.html)」は大変優れもの。

しかし残念なことに、HTML の日本語だけがなぜかインデックスに登録されない。

この問題を[フォーラム](http://sourceforge.net/p/docfetcher/bugs/1003/)で相談したところ、たちどころに[1.1.14の修正版](http://docfetcher.sourceforge.net/docfetcher-1.1.14-portable.zip)を作ってくれた。ありがたいことです。これで HTML の日本語（おそらく中国語や韓国語なども）を検索できるようになった。

いずれはmasterにも取り入れられると思うけど、それまではこれを使うとよい。

なお、HTML のプレビューはまだときどき文字化けするのだけど、[Refresh Current Page] をクリックすれば正常に表示される。これはどうも DocFetcher というよりはレンダリングエンジンとして使われている IE が頭悪いせいっぽい（追記: 他のWindows PCでは正常だったので、自分の環境が汚れているせいと思われる）。
AndEngine入門 1

この記事は[こちらの記事](http://www.raywenderlich.com/12065/how-to-create-a-simple-android-game)を参考にしています。

#開発環境
OS:Windows 8.1
Eclipse Mars(4.5.0) 日本語化済み
AndroidSDK r24.4.3

#AndEngineを実行するためのシステム要件
ここではAndEngineのバージョン GLES2.0を使用する場合のシステム要件です。それ以前のバージョンについては知りません。

1.OpenGL ES 2.0がサポートされている
2.Android 4.0.3(API 15)以上
3.エミュレータを使用する場合は、GPU emulationをONにする

よって、Android 4.0.3(API15)以上をAndroidSDK　Managerでインストールしておく必要があります。
#AndEngineの導入

1.AndEngineを[こちら](https://github.com/nicolasgramlich/AndEngine)からzipファイルでダウンロードし、任意の場所に展開しておきます。

ダウンロードできたらEclipseにプロジェクトしてインポートします。
[ファイル]-[インポート]をクリックします。以下の画面が表示されます。
![image](https://qiita-image-store.s3.amazonaws.com/0/75209/56bd5215-be73-d7e6-b4a6-2ebab5a9dad6.png)

2.[既存プロジェクトをワークスペースへ]を選択し、[次へ]を選択します。。
3.1でダウンロード、展開したAndEngineのフォルダを指定します。
![image](https://qiita-image-store.s3.amazonaws.com/0/75209/d55661a4-e532-ae56-ba28-d34c1385d4af.png)

4.完了をクリックします。
5.パッケージエクスプローラに下記のように表示されていればOKです。
![image](https://qiita-image-store.s3.amazonaws.com/0/75209/da3461fc-5048-363f-758a-2108d430d8e0.png)


#ゲームを作る
ここでは**The Tower of Hanoi**という名前の簡単なパズルゲームを作ります。
ゲームといっても、棒に積み重なった浮き輪みたいなものをドラッグして動かすという単純なものです。
![image](https://qiita-image-store.s3.amazonaws.com/0/75209/41807563-4a7b-89d8-9ce5-edb085a4d6e8.png)

##プロジェクトを作成する
まずは新規プロジェクトを作成します。

1.[ファイル]-[新規]-[プロジェクト]をクリックします。
下記の画面になります。**Androidアプリケーション・プロジェクト**を選択して、[次へ]をクリックします。
![image](https://qiita-image-store.s3.amazonaws.com/0/75209/c71a99e0-c8bd-b06a-2e72-fbd9be5b6960.png)

2.任意のアプリケーション名を指定します。
このとき、[最小必須SDK]、[ターゲットSDK],[次でコンパイル],をAndroid 4.0.3(API15)以上のものを選択します。テーマはなんでもよいでしょう。
入力、選択したら[次へ]をクリックします。

![image](https://qiita-image-store.s3.amazonaws.com/0/75209/42cb1f72-130b-91bb-9620-be5ffb616a7d.png)

3.[カスタムランチャーアイコンを作成する]と、[アクティビティーの作成]のチェックは、ここでは不要なので外しておきます。
外したら完了をクリックします。
![image](https://qiita-image-store.s3.amazonaws.com/0/75209/0b14c478-4b2f-42c4-ed29-01c0421c75fe.png)

こんな感じでプロジェクトが作成されます。
![image](https://qiita-image-store.s3.amazonaws.com/0/75209/2621af25-066c-d720-ce58-a1d18551ab7c.png)

4.AndEngineが使えるようにします。今作成したプロジェクトを右クリックして、[プロパティ]を選択します。下記のような画面になります。

![image](https://qiita-image-store.s3.amazonaws.com/0/75209/05d92b64-8c00-282a-fae8-92038ac3c727.png)

5.先ほど追加した、AndEngineが表示されています。選択してOKをクリックします。
ここにAndEngineが表示されていない場合の対処については、後述します。
![image](https://qiita-image-store.s3.amazonaws.com/0/75209/15b3e384-f178-8a2f-ea04-2a34ec1e2b8f.png)

6.AndEngineがライブラリとして追加されました。OKをクリックして画面を閉じます。
![image](https://qiita-image-store.s3.amazonaws.com/0/75209/222fc87e-1e90-1254-25b4-952526ba2f1f.png)

##AndEngineがライブラリの一覧に出てこない場合
パッケージ・エクスプローラーには確かにAndEngineが表示されているのに、ライブラリの一覧に出てこない場合は下記を確認してください。

パッケージ・エクスプローラの[AndEngine]プロジェクトを右クリックし、[プロパティー]を選択します。

![image](https://qiita-image-store.s3.amazonaws.com/0/75209/facef2eb-f35d-9254-b9a2-1e41c6c70392.png)

プロパティウィンドウで[ライブラリ]のチェックが入っているか確認します。
入っていなかったら、チェックをいれてOKで閉じます
![image](https://qiita-image-store.s3.amazonaws.com/0/75209/713c1567-39c6-4c24-e416-29a7f02a22de.png)

これでもう一度、ライブラリの一覧に表示されるかどうか確認してください。

#おわり
環境の整備が整ったら、実際にコーディングをします。
この続きは[こちら](http://qiita.com/PianoScoreJP/items/46d4b2a6a56555590a1b)で
Raspberry Pi 2で気温・気圧・高度センサのBMP180を使う

以前[Edison](http://qiita.com/masato/items/8fa12bf1ae6e7c34a27d)と[Arduino](http://qiita.com/masato/items/7c9e621ba09b75f73ce7)でBMP180の気温・気圧・高度センサを使ってみました。Raspberry Piにはプルアップ用抵抗が最初から付いています。[BMP180](https://www.switch-science.com/catalog/1598/)などI2C通信するブレイクアウトの場合はGPIOのプルアップが不要で使えます。また、AdafruitからBMP用の[Pythonライブラリ](https://github.com/adafruit/Adafruit_Python_BMP)も提供されているので初心者に優しいセンサーです。Arduino、Edison、Raspberry Piのどれでも使えるので1つあるといろいろ楽しめます。


## I2Cの設定

[Raspberry Pi 2とセンサーデータで遊ぶための初期設定](http://qiita.com/masato/items/f6d485c24205564c9adb)に書いた方法でI2Cの設定をしています。


## 使い方

### 準備

スイッチサイエンスから[SparkFun製](https://www.sparkfun.com/products/11824)の[BMP180](https://www.switch-science.com/catalog/1598/)を購入しました。SparkFunの[配線方法](https://learn.sparkfun.com/tutorials/bmp180-barometric-pressure-sensor-hookup-)ページを見ながらつないでいきます。Pythonプログラムから使用するライブラリはAdafruitの[Adafruit_Python_BMP](https://github.com/adafruit/Adafruit_Python_BMP)を使います。


* 製品購入  : [BMP180](https://www.switch-science.com/catalog/1598/)
* 配線方法  : [BMP180 Barometric Pressure Sensor Hookup](https://learn.sparkfun.com/tutorials/bmp180-barometric-pressure-sensor-hookup-)
* ライブラリ: [Adafruit_Python_BMP](https://github.com/adafruit/Adafruit_Python_BMP)

### ブレッドボード配線

以下のように配線します。

```
DA (SDA)	 (BMP180)  -> SDA1 P02 (Raspberry Pi)
CL (SCL)	 (BMP180)  -> SCL1 P03 (Raspberry Pi)
"-" (GND)	 (BMP180)  -> GND  P09 (Raspberry Pi)
"+" (VDD)	 (BMP180)  -> 3.3v P01 (Raspberry Pi)
```

![raspi-2-bmp180.png](https://qiita-image-store.s3.amazonaws.com/0/43745/13145bad-0ebb-86b9-635e-3b0b1111cd2c.png)


配線が終わったら[i2cdetect](http://www.lm-sensors.org/wiki/man/i2cdetect)コマンドで確認します。アドレスは0x77です。

```bash
$ i2cdetect -y 1
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- 77
```

### ライブラリのインストール

最初にPythonの開発用ライブラリをインストールします。GitHubのAdafruitリポジトリから[Adafruit_Python_BMP](https://github.com/adafruit/Adafruit_Python_BMP)をcloneします。

```bash
$ sudo apt-get update
$ sudo apt-get install git build-essential python-dev python-smbus
$ cd ~/
$ git clone https://github.com/adafruit/Adafruit_Python_BMP.git
```

sudoでPythonのパッケージをインストールします。

```bash
$ cd ~/python_apps/Adafruit_Python_BMP
$ sudo python setup.py install
...
Installed /usr/local/lib/python2.7/dist-packages/spidev-3.0-py2.7-linux-armv7l.egg
Finished processing dependencies for Adafruit-BMP==1.5.0
```

### センサーデータ取得

examplesのディレクトリに移動してサンプルのテストプログラムを実行します。BMP180だけで3種類のデータが取れました。

* 気温: 29.10 度C
* 気圧: 100,640.00 パスカル
* 高度: 57.19 メートル
* 海面気圧 : 100,635.00 パスカル

```bash
$ cd ~/python_apps/Adafruit_Python_BMP/examples
$ sudo python simpletest.py
Temp = 29.10 *C
Pressure = 100640.00 Pa
Altitude = 57.19 m
Sealevel Pressure = 100635.00 Pa
```
Android 端末画面を Windows に表示/操作可能な Android Control の使い方

Windows から簡単に Android を操作できないかな。。。と思って調べた結果。ROOT 化されていなくても、使える。
ただし、Gesture の使い勝手がイマイチなので、Airdroid (AirMirror)に軍配が上がるか。。。

とりあえず、メモがてら投稿しておきます！

と、SO-05D と F-06E では実行できることができたので、ドライバのインストールも詳細まで記載してるん。

***

# Android Control インストール方法

## Android 端末

### デバッグモードを有効にする

#### 1. [設定] 画面を開く

#### 2. [開発者向けオプション] を選択

>[開発者向けオプション] が表示されていない場合は、[設定]-[端末情報]-[ビルド番号] を 7 回タップする

#### 3. [USB デバッグ] にチェックを付けて、USB デバッグモードを有効にする


## Windows 端末
#### 1. ADB(Android Debug Bridge) ドライバをインストールする
##### Xperia シリーズの場合
(1) [PC コンパニオン](http://www.sonymobile.co.jp/support/software/pcc/2.3/) から Sony PC Companion_Web.exe をダウンロードする
(2) PC Companion をインストールする
(3) 端末をパソコンに接続する
または、端末をパソコンに接続した際に、PC Companion のインストールを尋ねられるため、そこからインストールする。

>(例) SO-05D の場合
>[設定]-[Xperia]-[USB 接続設定]-[PC Companion のインストール]にチェックをつける。

##### ARROWS シリーズの場合
(1) [Android携帯端末ソフトウェア開発者向けサポート情報](http://spf.fmworld.net/fujitsu/c/develop/sp/android/) からダウンロードする
(2) [ADB 用 USB ドライバ] から F-06E を選択

>(例) F-06Eの場合

(3) ソフトウェア使用許諾契約書について [同意する] を選択
(4) ADB 用 USB ドライバ(usb_ADBdriver_Fujitsu_2.03.zip) と ADB 用 USB ドライバ説明書(Readme.txt) をダウンロードする
(5) ドライバ説明書を参照して、インストールする

##### GALAXY、AQUOS PHONE、MEDIAS、ELUGA、DIGNO … シリーズの場合
>最下部の参考を参照。

##### 上記以外の場合
(1) Android SDKをインストール
(2) Android SDK Managerから「Google USB Driver」をダウンロード
(3) Android端末のUSBデバッグをON
(4) コントロールパネル > デバイスマネージャーを開く
(5) Androidデバイス名 > プロパティ > 詳細タブ > ハードウェアIDを選択
(6) 「～VID_XXXX&PID_XXXX～」のVIDとPIDの後のXXXがそれぞれ、ベンダ ID とプロダクト IDになるのでメモ
(7) Android SDK インストール先の「.\extras\google\usb_driver\android_winusb.inf」をテキストエディタで開く
(8) Windowsが32bitの場合[Google.NTx86]セクションに、64bitなら[Google.NTamd64]セクションに下記を参考に追記。

```ini:android_winusb.inf
;機種名（コメント）
%SingleAdbInterface% = USB_Install, USB\VID_****&PID_####
%CompositeAdbInterface% = USB_Install, USB\VID_****&PID_####&MI_01
```

(9) (5)で確認したAndroidデバイス名のプロパティを開く
(10) ドライバータブ > ドライバーの更新 > コンピュータを参照してドライバーソフトウェアを検索します > すべてのデバイスを表示 > ディスク使用 > 「製造元のファイルのコピー元」に[7]のINFの場所指定 > OK > Android Composite ADB Interface > 次へ > 「ドライバーの更新警告」が出たら「はい」

#### 2. Android SDK をインストールする
>platform-tools が必要になる
>C:\Users\%USERNAME%\AppData\Local\Android\sdk\platform-tools

#### 3. [Android Control](https://docs.google.com/file/d/0B5j0444hGlxeb0J3TDAtSmhKelU/edit) をダウンロードする

#### 4. Android Control を実行する
(1) ダウンロードした Android Control.exe を実行する
(2) Droid@Screen の ADB メニューから、[ADB Executable Path] を選択し、3 のインストール先を参照し adb.exe を選択する。
(3) Android 端末を接続する
(4) [Reload Devices] ボタンを押す
>押さなくても接続したら勝手に画面が表示された。
>倍率の調整と Gesture の使い勝手が気になる……

# 参考
* [スマホの画面が壊れてしまってもWindowsから操作できるようになる『Android Control』](http://www.lifehacker.jp/2014/06/android_control.html)

* [【ソフトガジェット】Android端末画面をWindowsに表示し操作もできる『Android Control』](http://gadget.uassist.co.jp/post/detail149.html)
48時間でSchemeを書こう学習メモ

#はじめに
Haskellの学習のため「48時間でSchemeを書こう」をやっていきます。
内容には間違いが多々含まれる可能性がありますので、
間違いがあればコメントで指摘して頂けると幸いです。

# 参考
[Write Yourself a Scheme in 48 Hours](https://en.wikibooks.org/wiki/Write_Yourself_a_Scheme_in_48_Hours)
[48時間でSchemeを書こう(翻訳版)](https://ja.wikibooks.org/wiki/48%E6%99%82%E9%96%93%E3%81%A7Scheme%E3%82%92%E6%9B%B8%E3%81%93%E3%81%86)

#学習メモ
* [構文解析](http://qiita.com/0zawa/items/04c552a8c0a3b21c6a64)
* [構文解析2](http://qiita.com/0zawa/items/6918c5a31dff426c2505)
* [構文解析3](http://qiita.com/0zawa/items/f3d799a5a5fc6b5cc6f9)
* [構文解析4](http://qiita.com/0zawa/items/3430010dc770f2f97094)

* [評価:第一部](http://qiita.com/0zawa/items/b50e7c7358029d8fa746)
* [評価:第一部2](http://qiita.com/0zawa/items/f45ec66685e7d0156c36)
* [エラー処理と例外](http://qiita.com/0zawa/items/fa9c9e6b249b4d6765fd)
* [評価:第二部](http://qiita.com/0zawa/items/cdb6de50f4ab40e721bd)
* [評価:第二部2](http://qiita.com/0zawa/items/720d47ce28ded4fb555e)
* [評価:第二部3](http://qiita.com/0zawa/items/626c5bf3d634b27b6fe9)
* [REPLの作成](http://qiita.com/0zawa/items/e08770bf2abc41165ee8)
48時間でSchemeを書こう/構文解析

# 参考URL
[48時間でSchemeを書こう/構文解析](https://ja.wikibooks.org/wiki/48%E6%99%82%E9%96%93%E3%81%A7Scheme%E3%82%92%E6%9B%B8%E3%81%93%E3%81%86/%E6%A7%8B%E6%96%87%E8%A7%A3%E6%9E%90)

#ソース
https://github.com/0zawa/scheme_in_48_hours/blob/master/parsing.hs

# Parsec
Haskellのパーサライブラリです。
パーサを作るのにいろいろと便利な機能があるようです。
以降、Parsecの機能を使ってSchemeパーサを実装していきます。

# Parsecのインポート
```haskell
import Text.ParserCombinators.Parsec
```
とします。

今回はspaces関数の衝突防止のため下記のようにして
spacesを除いてimportします。

```haskell
import Text.ParserCombinators.Parsec hiding (spaces)
```

# Parser型
パースを行う関数はParser aを返します。
aは任意の型です。

ここではParserの詳細は深く追わず、Parser aは

* String型の入力を受け取る。
* パース結果(a型）を返す。
* パースされなかった文字列もどこかに保持している。

ものだと仮定して進めます。

# 記号の認識
Parsecに用意されているoneOf関数を使って、指定した記号を認識する関数を作成します。

```haskell
symbol :: Parser Char
symbol = oneOf "!#$%&|*+-/:<=>?@^_~"
```

oneOf関数は指定した文字列(ここでは"!#$%&|*+-/:<=>?@^_~")が
入力文字列の先頭に含まれるかどうかパースし、
含まれていればその文字を(Parserに入れて)返します。

こうして作成したパース関数はParsecのparse関数と
組み合わせて使います。

parse関数は

* Parser型を返すパース関数
* パーサーの名前
* 入力文字列(String型)

を引数に取り、Either型を返します。

パース関数にoneOfを指定する場合は

```hs
parse (oneOf "#!$") "test" "#123"
```
のようにします。
上記の結果Either型のRightに"#"が入ったものが戻り値になります。

# Schemeで使用可能な記号を認識する

oneOf関数を使って定義したsymbolとparseを使ってSchemeで使用可能な記号をパースする関数を作ります。

```hs
readExpr :: String -> String
readExpr input = case parse symbol "lisp" input of
    Left err -> "No match: " ++ show err
    Right val -> "Found value"
```
symbolで定義した記号が入力文字列の先頭に含まれていなかった場合、
parse関数はEither型のLeftにエラーを入れて返します。

結果としてreadExpr関数は
入力した文字列の先頭に

* symbolで定義した記号が含まれれば"Found Value"
* 含まれていなければ"No match: (エラー理由)"

の文字列を返す関数になります。

この関数に標準入力で取得した文字列を渡すようにして、

```haskell
main :: IO ()
main = do args <- getArgs
          putStrLn (readExpr (args !! 0))
```

ビルドして実行すると挙動を確認できます。

```bash
% ghc parsing.hs
% ./parsing $
Found value
% ./parsing a
No match: "lisp" (line 1, column 1):
unexpected "a"
```

ここまでがパーサーの入門的な基本説明です。
このあとLispの型を定義して本格的なパーサーの作成に進んでいきます。

[48時間でSchemeを書こう/構文解析２](http://qiita.com/0zawa/items/6918c5a31dff426c2505)へ
Parallels Desktop のログがHD容量を圧迫したので削除しました。

Parallels Desktopを強制終了したりするとHDを圧迫する事象に遭遇しました。ログファイルが肥大化しているようなのでターミナルから削除しました。環境はParallels Desktop 10 for Macです。

# Parallels Desktopのログサイズを調べる
ターミナルからParallels Desktopのログサイズを調べます。

```bash:ログファイルのサイズを調査
du -sm /Users/ユーザー名/Documents/Parallels/Windows\ 8.1\ 1.pvm/parallels.log

17823983	/Users/ユーザー名/Documents/Parallels/Windows 8.1 1.pvm/parallels.log
```
`parallels.log`というのがログファイルみたいです。ローテーションされているようなのですが、一時的にログファイルサイズが増えてしまう場合もあると思います。

# Parallels Desktopのログを削除する
一応Parallels Desktopを終了しておきました。ターミナルからログを削除します。

```bash:ログファイルを削除
rm /Users/ユーザー名/Documents/Parallels/Windows\ 8.1\ 1.pvm/parallels.log
```
`parallels.log`が削除されました。

# おまけ
`parallels.log`を削除した後にParallels Desktopを起動したところ、削除した`parallels.log`は勝手に生成されていました。特にログを削除しても問題ないってことなんですかね(☝ ՞ਊ ՞)
UIViewの位置操作・取得を簡単に行うための拡張

#What is this?

An extension to get/set UIView's position easier.
Need a sample? See just below *UIView+Extension.swift*.

#これは？
下記投稿をSwiftに書き換えました。
[UIViewの位置取得・操作のための便利カテゴリー](http://qiita.com/naoty_k/items/9d05decdba8db0198781)

このままコピペ→保存で使えます。
使い方は末尾に。


```UIView+Extension.swift
import UIKit

extension UIView {

	var top : CGFloat{
		get{
			return self.frame.origin.y
		}
		set{
			var frame		= self.frame
			frame.origin.y	= newValue
			self.frame		= frame
		}
	}

	var bottom : CGFloat{
		get{
			return frame.origin.y + frame.size.height
		}
		set{
			var frame		= self.frame
			frame.origin.y	= newValue - self.frame.size.height
			self.frame		= frame
		}
	}
	
	var right : CGFloat{
		get{
			return self.frame.origin.x + self.frame.size.width
		}
		set{
			var frame		= self.frame
			frame.origin.x	= newValue - self.frame.size.width
			self.frame		= frame
		}
	}

	var left : CGFloat{
		get{
			return self.frame.origin.x
		}
		set{
			var frame		= self.frame
			frame.origin.x	= newValue
			self.frame		= frame		
		}
	}
}
```


#使い方：
```Swift

var foo = UIView()
var bar = UIView()
var baz = UILabel()

...

// fooを左から10pxの位置に配置
foo.left	= 10

// barをfooの右から10pxの位置に配置
bar.left	= foo.right + 10

// UIViewを継承しているので、UILabelでも使える
baz.left	= bar.right + 10
```

便利。
位置関連のコードはダラダラ長くなりがちだしダルいんで、少しでも楽したい。
Michael Abrash Interview 2

http://qiita.com/7of9/items/6a43ce4c0ef1dc6b19ec
の続き

Michael Abrash Interview:
https://www.youtube.com/watch?v=a7My8zbDNRI&list=PL_MJualihC5AxdlHgVUROYKbNAaPJ5PE4&index=2)

(0:54-)
The first real game I remember playing was "breakout". The computer I <font color=blue>had</font> was CP/M computer, that has resolution of 160 x 72. And I wrote "space invaders" for it. I would say maybe dozens of people ever played <font color=red>XXX boy XXX</font>.

(1:09-)
And when the IBM PC came out, I said to my wife "You know, I bet I can write the game for that <font color=red>(XXX: would self?).</font>". So she's <font color=red>XXX</font>, "O.K." and we spent our life savings to buy the IBM PC, which was at that time 6,000 dollars.

赤文字3か所が聞き取りができていない。

青文字の部分も別の単語かもしれない。
EC2上にプライベートプロキシサーバを構築する


```shell-session
osx$ 手元の端末のプロンプト
ec2$ EC2インスタンスのプロンプト
```

# プロキシサーバのセットアップ

EC2インスタンスに接続します。OSは何でも良いですが、今回は Amazon Linux を使います。

```
osx$ ssh ec2-user@ec2-X-X-X-X.ap-northeast-1.compute.amazonaws.com
```

プロキシサーバとして tinyproxy をインストールします。

```
ec2$ sudo yum --enablerepo=epel install tinyproxy
```

後ほど SSH でトンネリングして使うので、listen させるのは localhost のみでOK。

```
ec2$ sudo sed -ie 's/#Listen 192.168.0.1/Listen 127.0.0.1/g' /etc/tinyproxy/tinyproxy.conf
```

自動起動させておく場合は以下を実行しておきましょう。

```
ec2$ sudo chkconfig tinyproxy on
```

# 起動

プロキシサーバを起動します。

```
ec2$ sudo service tinyproxy start
```

起動したら、意図したポートを listen しているか確認しましょう。

```
ec2$ ss -ln|grep 8888
tcp    LISTEN     0      128            127.0.0.1:8888                  *:*
```

# トンネリング

SSHでトンネルを掘ります。手元でバインドするポートは何でも良いですが、今回は 9999 を使います。

```
osx$ ssh -N -L 9999:localhost:8888 ec2-user@ec2-X-X-X-X.ap-northeast-1.compute.amazonaws.com
```

# 動作確認

例えば以下のようにして外から見えるIPアドレスを確認し、EC2のアドレスが返って来れば成功です。

```
osx$ curl --proxy localhost:9999 ipv4.wtfismyip.com/text
X.X.X.X
```
setImageしたUIButtonをタップしたときに影を乗せたい

UIButtonをUIButtonTypeCustomで作成する際に単純にbackgroundColor = [UIColor whiteColor] なんかのボタンを作ってしまうとタップした際に影が表示されず、押している感がなくなる事が多いと思います。

他にも、UIButtonにsetImageした場合も同様ですね。
そのためにデザイナーさんに逐一影の画像をお願いするのも手間ですし、余計な画像が増えてしまうので私は以下のようなClassを作成して動的にHighlightedへ指定するようにしています。

```lang:objective-c
#define UICOLOR_RGBA(R,G,B,A) [UIColor colorWithRed:R/255.0f green:G/255.0f blue:B/255.0f alpha:A]

/**
 *  指定したUIColorで生成したImageを返す
 */
+ (UIImage *)imageWithColor:(UIColor *)color
                       rect:(CGRect)rect
{
    UIGraphicsBeginImageContext(rect.size);
    [color setFill];
    UIRectFill(rect);
    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    
    return newImage;
}
```

この関数を、適当なCommonClassに記述してどこからでも呼び出せるようにしています。
使い方は、例えば以下のような方法があります。

```lang:objective-c
    [self.myButton setBackgroundImage:[CHZCommon imageWithColor:UICOLOR_RGBA(0, 0, 0, 0.3f) rect:self.myButton.bounds] forState:UIControlStateHighlighted];
```

こうすると、タップしたときにいい感じに影を乗せる事ができると思います。
この関数には他にも応用的な使い方がいくらでもありますので、どこかに定義しておくと便利に使えると思います。
Pythonの引数はすべて参照渡し


らしい。知らんかったよ。
というか、あまり気にしてなかった。

intあたりは、挙動からみて特別扱いで値渡しなのかなーと思ってたら、「すべて」参照渡しだったのね。

以下、ipython での実験。

```python
In [27]: i = 1

In [28]: id(i)
Out[28]: 140513240953112

In [29]: def func(a):
   ....:     print a, id(a)
   ....:     a += 1
   ....:     print a, id(a)
   ....:     return a
   ....: 

In [30]: b = func(i)
1 140513240953112	<- ここまでは同じ場所(id)を参照している
2 140513240953088 <- ここで別場所(id)へコピーされた

In [31]: id(b)
Out[31]: 140513240953088

```


もう一例

```python
In [32]: i = 1

In [33]: id(i)
Out[33]: 140513240953112

In [34]: def func(a):
   ....:     print a, id(a)
   ....:     return a
   ....: 

In [35]: b = func(i)
1 140513240953112

In [36]: id(b)
Out[36]: 140513240953112	<- ここでもiと同じ場所(id)を参照している

In [37]: b
Out[37]: 1	<- iと同じ場所から読み出している

In [38]: b += 2 <- ここで別場所(id)へコピーされた

In [39]: id(b)
Out[39]: 140513240953064 <- ほら変わってる
```
へぇ。そういうことなのね。



## 参考

 - [[Python]常識ですよ？と言われないための引数入門](http://note.crohaco.net/2014/python-argument-intro/)


## 所感
pythonで頑張ってチューニングしてみたら、Arrayインデックス経由の参照コストが最後までネックになってしまった。んー、pythonに精通していれば、まだやりようはあるのかも知れないけど、pythonで頑張るくらいなら言語変えたほうが早いよねーというのもあるから、なかなかpythonの深い部分へは潜る必要性がない。興味はあるんだけど。

言語変更の選択肢として、今は安易にC/C++に行ってしまうけど、Go言語をもっとテキパキ使えるようにしておくことが必要だよねー、とは思ってる。思ってはいる。ほんとに。

おわり。
プロ野球速報APIを使ってみた

#プロ野球速報APIを使ってみた

最近、プロ野球速報を取得するAPIが公開された(非公式)ので使ってみました。

##使い方
~~割と適当に~~

```
<?php
//実質取得はココ
$game_infos = @json_decode(file_get_contents('http://botch.herokuapp.com/v0/scores/' . $date));
$title = date('Y年m月d日', strtotime($date)) . 'の<br />プロ野球';
?>

<?php if ($game_infos === null):?>
<table class="game_table">
    <tr>
        <th style="width:130px;border: none;"><?php echo $title;?></th>
        <td>APIの取得に失敗しました</td>
    </tr>
</table>
<?php elseif ($game_infos === array()):?>
<table class="game_table">
    <tr>
        <th style="width:130px;"><?php echo $title;?></th>
        <td>中止</td>
    </tr>
</table>
<?php else:?>
    <?php foreach ($game_infos->data as $game_info):?>
    <table class="game_table">
        <tr>
            <th><?php echo $title;?></th>
            <td><?php echo $game_info->away->team;?></td>
            <td><?php echo $game_info->away->score;?></td>
            <td>
                <?php
                    $info = '';
                    if ($game_info->info->inning == 'yet'){
                        $info .=  $game_info->info->start . '～';
                    }elseif ($game_info->info->inning == 'stop'){
                        $info .= '中止';
                    }elseif ($game_info->info->inning == 'end'){
                        $info .= '試合終了';
                    }elseif (preg_match('/^([0-9]{1,2})([t,b])$/' , $game_info->info->inning ,$inning)){
                        $info .= $inning[1] . '回';
                        if ($inning[2] == 't'){
                            $info .= '表';
                        } else {
                            $info .= '裏';
                        }
                    } else {
                        //それ以外はとりあえずそのまま突っ込んでおく
                        $info .= $game_info->info->inning;
                    }
                ?>
                <?php echo $info;?>
            </td>
            <td><?php echo $game_info->home->score;?></td>
            <td><?php echo $game_info->home->team;?></td>
        </tr>
    </table>
    <?php endforeach;?>

<?php endif;?>

```

##APIでやってること
[ソースも公開](https://github.com/p1ch-jp/BotchAPI)されているのでやってることを見てみました。

- node.jsのCronJobで定期的(20秒ごと)にヤフーのプロ野球のページにアクセス
- ブラウザ情報より必要なデータを取得
- 取得したデータはmongoDBへ保存

てなことをやってるらしい。


##まとめ
やってること自体はシンプル。

でもこれ作ってるの大学1年生っぽい。地味にすごい。

http://chiraura.me/
Postfix でメール受信時に API 経由で処理を実行する

メール受信時に、自動で内容の解析を行う処理を API 経由で行う必要があったため、その設定をメモします。

## Postfix の alias の設定
API リクエストを送信するために alias ファイルに設定を追加

info@xxxxxx.xxx 宛てメールを受信したときに Curl でリクエストを送信する

```
[/etc/aliases]
info: "|xargs -0 -I% curl --url http://<URL> --data % > /dev/null"
```

`newaliases` コマンドで設定を反映する

## PHP でリクエストを受け取る
```
$mailData = file_get_contents('php://input');
```
でメールのデータを取得できます。
デザイナーでもできるselect文

インターネットサービスはデータが命。LPだってUIだってデータがなくちゃPDCA回せない、でもGoogle Analiticsじゃわからないユーザーデータも参照したい。
そんなデザイナーにも出来るSQL。表現の仕方が間違ってても気にしない。理屈じゃないんだ、感覚でわかればOK!

##基本
###何をデータにするか決める: select
表示する結果のカラムを指定します。\*だと全部。count(\*)またはcount(1)で全体が何行あるのか、count(カラム名）で指定したカラムが何行あるのか表示します。

###どこからとるのか決める: from
データを取ってくるテーブルを書くところ。またはサブクえりを書くところ

###なにを条件にするのか決める: where
and とか or とか not とか
カラム名 =　とか　＞　とか　＜
おんなじカラムで複数とOKならin ('なにか','なにか','なにか')とか
to_cher()とか


ここまでわかればとりあえずデータは持って来れる。

***

## byシリーズ
###order by
指定したカラム名で並び替える！デフォルトだと昇順！

### group by
指定したカラム名でグループをつくって集計に備えます。いちいち指定してあげないとすぐ動かなくなる。めんどくさい。

***

##サブクエリ

jsのfunctionみたいな感じ。
下のイタリックの部分。

*select
  カラム
from
  (select ~~ from ~~ where ~~ )*

ここで色んな色んな条件をつけたサブクエリを用意して、セグメントしたデータが取れるようになる。あと、複数のテーブルからデータを持ってきて比較できる。すごい！

###union
サブクエリのデータをまとめて、一つのテーブルにまとめられる。
でも、selectでとってくるカラムとカラム数が合ってないとまとめてくれないから、
「0 as わかりやすいカラム名」とかでとりあえずカラムそろえるといい。

###inner join
*from
  サブクエリ1
 inner join
  サブクエリ2*
みたいにサブクエリとサブクエリの間に使う。
カラム数関係なく、2つの表を比べて１と２で合致したものだけを残して表示してくれるすごいやつ。２つ以上にしてもいい。

###left join
*from
  サブクエリ1
 left join
  サブクエリ2*
inner join と使い方にてるけど、結果が微妙に違う。
１と比較して２ににも当てはまる物を表示＋２には当てはまらなかった１の要素も表示する。

例えば以下みたいなデータがあったとして、

|クエリ１|クエリ２|クエリ３|クエリ4|
|:-----------|:------------|:------------|:------------|
|A|A| |A|
|B|||B||
|C|C|C|C|
|D|D|||

一つ左隣のデータと比較しながら返すので

|クエリ１|クエリ２|クエリ３|クエリ4|
|:-----------|:------------|:------------|:------------|
|A|A| ||
|B|||||
|C|C|C|C|
|D|D|||

こんな感じで出てくる。


***

##便利なやつ

###to_char('','')
引数の変換に使うやつ。

*to_char(create_date,'yyyy-MM') = '2014-07'*
これだと、create_dateのカラム内にある値を、yyyy-mmの書式で書き換えますよってなる。
なので　＝'2014-01'みたく月単位で指定するときに便利。
集計結果でも使える。

###case - when - then - else - end
*case 参照したいカラム　when 条件 then 結果 else それ以外の場合の結果 end*
if elseみたいなやつ。

###sum()
計算するやつ

###row_number()
数字を付けるやつ

*row_number() over(partition by itemid order by itemid)*
row_numberが「順番に数字をつけるよ！」
overが「まてまて、数字付ける前に次の条件で区切ったり並び替えたりしようよ」
partition byが「次のカラムの値が同じやつで分けるよ」
order byが「次のカラム値で並び替えるよ」

っていうことで、同じitemidの中で１〜順番に数字が付いていく仕組み。
AFNetWorking1.x系を使用しているプロジェクトをAFNetWorking2.x系に切り替える


いま担当している案件ではAFNetWorking1.x系を使用していたのですが
改修を機にAFNetWorking2.x系に切り替えることになりました。

###大きな変更点

AFNetWorking1.x系では
*AFHTTPClient*クラスを使用していましたが、
AFNetWorking2.x系では
*AFHTTPRequestOperationManager*クラスを使用するように変更されたようです。

###その他変更点

公式のドキュメントを読みましょう。

[[AFNetworking 2.0 Migration Guide]](https://github.com/AFNetworking/AFNetworking/wiki/AFNetworking-2.0-Migration-Guide)

###具体的な変更方法

公式のドキュメントにAFNetWorking1.x系からAFNetWorking2.x系へ書き換えるサンプルが記述されているので、そこを読みましょう（手抜き
実際に変更してみた感想ですが、AFHTTPRequestOperationManagerクラスを使用した記述に書き直したあとに、過去のソースからコピペでパスやパラメーターをもってくれば、特に問題なく動いたので、変更するための負荷はそんなにかからない印象です。

**あ、ユニットテスト書いてちゃんと通信されてるいるかどうか、きちんと確認しましょうね。**
Atomをコマンドラインから起動する(mac OS X)

ターミナルでディレクトリ移動していて、カレントディレクトリをAtomで開きたいことはないだろうか？オレはある

ということで、ターミナルからAtomを起動できるようにaliasを貼る
基本どのzshやら他のシェルでも似たような書き方をすればよいでしょう

と言う方法あったんですけど、いつのバージョンからか設定画面からできるそうです。


## 前提条件
* シェル bash
* OS OSX 10.10
* Atom 1.0

Atomを起動して、メニューバーのAtomを開き
Install Shell Commandsを選択する。これでダイアログが表示されOKをすとターミナルからatomコマンドが使えるようになる。
![aa](https://qiita-image-store.s3.amazonaws.com/0/69434/007dfecb-3622-e3cf-1ef3-f0fa2ae628a1.png)

上記を実行すると何が起こったのか確認してみると、atomの起動シェルのエイリアスが/user/local/bin/atomにはられるようである。

```
> which atom
/usr/local/bin/atom
> ls -la /usr/local/bin/atom
/usr/local/bin/atom -> /Applications/Atom.app/Contents/Resources/app/atom.sh
```
--------

##最初に書いたオリジナルの方式　も残しておく

適当なエディタでbashの設定ファイルを開き

```sh
emacs ~/.bash_profile
```

下部に以下のようにAtomが起動するパスにatomというコマンドで起動するようにエイリアスを貼る

```sh
alias atom="/Applications/Atom.app/Contents/MacOS/Atom"
```

これから、カレントディレクトリを開きたい場合は、以下のようにしてやればAtomがカレントディレクトリを開いた状態で起動する

```
# atom ./
```
エラー　<s3dReadConfigFile:75>: Can't open file for reading

#今日の課題
実機（Galaxy SⅢ　SC-6D）をつないでアプリを動作させたい

#問題
runするとエラーが出る

`<s3dReadConfigFile:75>: Can't open file for reading`

#解決
しばらく待ったら反映されました（苦笑

実機はデバッグモードになっているか、
解決策は何か、
などやっていたらいつの間にか画面が現れていました

#感想
そんな事もある
そんな風に思えるようになったこの頃です
正規表現で置換する際に、あるパターンにマッチさせたいが、その一部のみを置換したい


表題の際には以下の正規表現パターンを使えばいいと気づいた。
http://ref.xaio.jp/ruby/classes/string/gsub

> Ruby 1.9では、パターンの中で(?<名前>パターン)という形でカッコに名前を付けられます。
> 第2引数replacementの中では、\k<名前>という書式でそのカッコに当てはまる部分を埋め込めます。

```rb
s = "one two, three four, five six"
puts s.gsub(/(?<first>\w+)\s+(?<second>\w+)/, '\k<second> \k<first>')
two one, four three, six five
```
ダブルクリックで iTerm2 上の Vim を開く

普段、 iTerm2 上で Vim を使っているのですが、 Finder 上のファイルをちょっと編集するのにダブルクリックで Vim を開きたいと思ったので、AppleScript でランチャーアプリを作成しました。

Automator を開き、 AppleScript を選択して以下のコードを VimLauncher.app という名前で保存

2016/06/09 スクリプトを修正しました。

``` AppleScript:VimLauncher.app
on run argv
	
	set the_path to POSIX path of (item 1 of argv)
	set cmd to "vim " & escapeSpace(the_path)
	
	if isAppRunning("iTerm2") then
		
		tell application "iTerm"
			activate
			select last window
			tell current window
				set newtab to (create tab with default profile)
				tell newtab
					tell current session
						write text cmd
					end tell
					activate
				end tell
			end tell
		end tell
	else
		activate application "iTerm"
		tell application "iTerm"
			tell current window
				tell current session
					write text cmd
				end tell
				activate
			end tell
		end tell
	end if
	
end run

on isAppRunning(appName)
	tell application "System Events" to (name of processes) contains appName
end isAppRunning

on escapeSpace(myText)
	set oldDel to AppleScript's text item delimiters
	set AppleScript's text item delimiters to " "
	set myText to every text item of myText
	set AppleScript's text item delimiters to "\\ "
	set myText to myText as string
	set AppleScript's text item delimiters to oldDel
	return myText
end escapeSpace
```

あとは、特定の拡張子のデフォルトアプリケーションを作成した VimLauncher.app に設定します。

---
このあたりを参考にさせていただきました。
* http://superuser.com/questions/139352/mac-os-x-how-to-open-vim-in-terminal-when-double-click-on-a-file
* https://gist.github.com/reyjrar/1769355
* http://www.kiwi-us.com/~mizusawa/penguin/html_hint/applescript/script_memo.html#Delimit
mongoDB をローカルに設置する場合とリモートに設置する場合とで処理時間性能を比較する (その1)

# 目的

　　mongoDB をローカルに設置する場合とリモートに設置する場合とで処理時間性能の違いを確認する。
　　今やっている業務で、同一システムで、mongoDB と Oracle の両方を使うケースが出てきた。
　　Oracle と mongoDB を同一サーバーに載せることは多少疑問も残るため、その確認として試験を行う。


#  設定

　　* mongoDB は、現在の最新版 (3.0.4 Linux版)を使用する。
　　* ネットワーク問題とかも顕著になるように、1 insert 1 ドキュメントとする


#  ping で疎通を確認

(mongo クライアント側 -> mongo 側)
$ ping 192.168.xxx.xxx -s 1500 -c 100
PING 192.168.xxx.xxx (192.168.xxx.xxx) 1500(1528) bytes of data.

--- 192.168.xxx.xxx ping statistics ---
100 packets transmitted, 100 received, 0% packet loss, time 99103ms
rtt min/avg/max/mdev = 0.867/0.977/2.139/0.124 ms

* もともとそれほどパフォーマンスのいい環境ではないです。


# ローカルに mongoDB を置いた場合とリモートに置いた場合との insert の時間比較

![無題2.png](https://qiita-image-store.s3.amazonaws.com/0/84341/83bc5fb6-6a7f-48b7-64a5-48b6fbae1a6d.png)


# 考察

　**あまりに差がありすぎた！！**

　システムパラメータとか何もチューニングをしていない状況での確認なので、まだまだ修正の余地は十分ある。

　パフォーマンスモニタを見る限り、CPU、メモリ、ディスクI/O については問題ないような気がしている。

　ネットワークについては、低いレベルで転送速度が張り付き気味？
　この辺のあたり（受信バッファ、送信バッファ、等）がチューニングの観点かも。。。
Goのencoding/jsonでタグが反映されなくてハマったしょうもない話


Goではstructを定義して、Marshalするとjsonに変換されますね。
例えば、

```go
type Person struct {
	ID int
	Name string
	Email string
	Age int
	Address string
	memo string
}

person := &Person {
	ID: 1,
	Name: "Gopher",
	Email: "goher@example.com",
	Age: 5,
	Address: "",
}

p, err := json.Marshal(person)
```
こんな感じに

```json
{
	"ID":1,
	"Name":"Gopher",
	"Email":"goher@example.com",
	"Age":5,
	"Address":""
}
```

出力されるkey名を変えたいときは、structの定義にタグを付ければいいのですが、
↓だと反映されない。。orz

```go
type Person struct {
	ID int
	Name string `json: "name"`
	Email string
	Age int
	Address string
	memo string
}
```

なんでかというと、
タグの`json:`と`"name"`の間にスペースがあるから。

なんともしょうもない理由だけど、これ
コンパイル時にエラーにならないし、警告もでないからサクッと見過ごしてしまう。。

スペースを入れずに↓のようにすれば

```go
type Person struct {
	ID int
	Name string `json:"name"`
	Email string
	Age int
	Address string
	memo string
}
```
しっかり反映される。

```json
{
	"ID":1,
	"name":"Gopher",
	"Email":"goher@example.com",
	"Age":5,
	"Address":""
}
```

という、しょうもないハマりレポートでした。みんな気をつけよう!!
.Play でAnimation再実行

### 概要
Animator を使ったアニメーション再実行がうまく動かなかったので
 「.Play」 使って無理やり動かした件について

### 引用元
> https://spphire9.wordpress.com/2015/02/13/unity%E3%81%A7%E3%82%A2%E3%83%8B%E3%83%A1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%92%E3%82%82%E3%81%86%E4%B8%80%E5%BA%A6%E5%86%8D%E7%94%9F%E3%81%99%E3%82%8B/


### 作業
下記のコードをAnimatorコンポーネントが設定してある
オブジェクト内の別スクリプトに記述する。
後は任意の場所で、下記でいう「TestAction()」を呼び出せばOK。

※引数を利用すればアニメーションの開始フレームを指定できる。
　第3引数に 0.0f を設定すれば、何度でも同じアニメーションを頭から再生できる。

### コード
```lang:test.cs
Animator _anim;

void Start() {
　　_anim = GetComponent<Animator>();
}

public void TestAction() {
　　_anim.Play("test1", 0, 0.0f);
}

// 第1引数の test1 は AnimatorControllerのstate名
// 第2引数は 指定のレイヤー。 0 =「Base Layer」（多分。）
// 第3引数は アニメーションの開始フレーム。 0.0f = 最初

```

![test1A.png](https://qiita-image-store.s3.amazonaws.com/0/23248/d49a8762-72a3-c8e4-7526-82bb909fc864.png)
ワードプレスで作成したブログの表示不具合について

ワードプレスで作成したブログのスマホ表示の際、謎の白いスペースで記事のタイトルが隠れてしまいます。Webクリエイターの方など、修正方法をご教示頂けないでしょうか？

プラグインは使用しておらず、スマホでもパソコンと同じ表示にさせています。

また有料サーバを使用しているのに覚えのない広告が出てしまうのですが、どう削除すればいいでしょうか？
mac版日頃のPC作業を自動化＆効率化！

# mac版 日頃のPC作業を自動化＆効率化！

エンジニアやプログラマの日頃の作業を少しでも軽減、効率化できないか、、  
とふと時々考える時があったのでめもめも。

![スーパーコンピューター](https://s3.amazonaws.com/f.cl.ly/items/3j3y1X2S112P3t191f3d/IBM_Electronic_Data_Processing_Machine_-_GPN-2000-001881.jpg)

## まず無駄を見つける**(断捨離!)**


### PCを起動したら必ずしている事（**開始時にやっている事**）
1. 必要アプリの起動
 * 画面下のdockに表示されているものならアイコンを右クリックで、「ログイン時に開く」等でも設定できます。http://dezisaru.com/mbpr15/11836.html

2. ブラウザの利用  
 * [google analytics](https://www.google.com/intl/ja_jp/analytics/) や、計測、分析サイトのレポートを見る 
     * 同じ指標で、あれば統合できないか検討し、apiやクローリングツール等をつかって、各サービスに自動ログインし統合しレポート化  
   具体的な詳細は、別途qiitaにアップできればと思います。apiが提供されていなければ、curlやwget等を利用してスクレイピング！ 
http://web-prog.com/php/curl-login-scraiping/
 * タイムカード
     * クライアントアプリで、キーボードやマウスを自動で操作するツールもあるので、それを利用(会社によって規制されている場合は正しくそれにｗ)
 * **chatwork**や**slack**などのコミュケーションツール。
     * １つに絞るように提案するか、どちらのツールにて、api通知できるようにしておくなど。chatworkを利用しているのであれば、slackにきた通知をchatworkに来るように。

3. ターミナルの利用  
 * **.bashrc**や、**.zshrc** で、dotfiles系のセットアップや、必要な秘密キー認証等をしておく。

  
### 毎日やっている事(**作業中にやっている事**)
1. 開発していて、ググる時
 * エンジニアなら毎日〜100回ぐらいはググっているのではないでしょうか。
     * **evernote**の[chrome拡張](https://chrome.google.com/webstore/detail/evernote-web-clipper/pioclpoplcdbaefihamjohnefbikjilc?hl=ja)で、必要な記事をサクッとストック。 
     * もう一つ、個人的にこれできたら効率化だけでなく、
新しいイノベーションができると思います！▶[検索作業を自動AI化※準備中](http://qiita.com/matsuyoro/items/bd80266e70dd2d9736cf)

2. タスクチェック、[redmine](redmine,JIRA,trac等での),[JIRA]
(https://www.atlassian.com/ja/software/jira),[trac](http://trac.edgewall.org/)等
 * slackや、chatwork等をコミュケーションの中心とし、そこに新しいタスクが追加されたら通知がいくようにし、コメントや進捗通知等もできるようにしておくとよい。

3. 監視ツールのチェック
 * [Zabiix](http://www.zabbix.com/jp/)や[mackerel](https://mackerel.io/ja/)、[nagios](https://www.nagios.org/)などで、  
  運用しているサービスの死活チェック等
     * 同じくslackやchatworkにアラート情報の通知がいくように。**mackerel**は監視のグラフ画像も一緒おくってくれる機能がすでにあるようです。

4. プログラミング
 * 使っている言語や、ミドルウェアにあわせてエディタを利用
     * エディタ毎のショートカット機能やコマンドの把握 

         > Unity http://docs.unity3d.com/ja/current/Manual/UnityHotkeys.html 
   vim http://qiita.com/hide/items/5bfe5b322872c61a6896 
   xcode http://nanananande.helpfulness.jp/post-1837/ 
   sublime http://jobtech.jp/other/451/ 
   
         > iOS開発でxcodeを使う場合等、エディタ毎の**コードスニペット**機能で、よく使うコードの断片を再利用。   xcode http://blog.dalt.me/774

5. ターミナルで緊急時の対応等
 * .zshrcや、.bashrcを利用して、**tmux**等を利用して、複数のサーバーに一括で操作できるようにしておく等。

6. その他、色々なアプリを起動する
 * Macなら**Ctrl**+**スペースキー**で、アプリ名を検索すればすぐ起動できます。


## ポイント！

* **重複**する作業を見つける
* **考える必要のない**作業は自動化できないか考える
* レポート確認など、別々の管理画面にアクセスして同じ指標をチェックするものは**統合**できないか。
* **同じようなツール**を複数つかっていないか。chatworkとslack、skypeとLINE等。
* よく使うファイル、ディレクトリや、ブックマークが**使いやすいところ**にあり、呼び出しやすいか
* **作業の中心**をつくって、そこから蜘蛛の巣上に色々なツールを利用できないか検討する。(slackで監視情報のアラートを取得したり、slack上で指定の命令を打つと、このツールが呼び出せる等)

## 将来的にやりたい

* サブディスプレイを、**サポート用のAI(人工知能)**にしたい。
* バックグラウンドでキーボード情報を取得して、一定の条件にあてはまるパターンを入力したら、先読みして必要なアプリを起動し必要情報をだす。  
 入力情報をもとに、パターンを覚えていくアルゴリズムを開発したいｗ。  
 そもそも、もう一台PCを用意して、音声認識だけで検索や必要アプリの起動などはすぐできるが、さすがにPCに向かってしゃべるのは恥ずかしいww（笑）
Scala: テストでfailしたものを最後にまとめてレポートするようにしたい


Scalatestで大量のテストをしていると、どこかでテストケースがFailした場合、コンソールをスクロールして該当テストケースを探さないといけなくなります。スクロールして探すのは手間ですし、できれば失敗したテストケースだけまとめて後で教えてほしいものです。

ここでは、この課題を解決すべく、失敗したテストケースをまとめて報告するようにする設定について紹介します。

設定は簡単で、build.sbtにテストのオプションを追加するだけです。

```scala:build.sbt
// Show reminder of failed and canceled tests
testOptions in Test += Tests.Argument("-oI")
```

こうすることで、どこかでテストがコケても、テスト結果の出力の最後にFailしたテストケースが集まり、Failを把握しやすくなります。

![1__🐝ShouldBee__sh_.png](https://qiita-image-store.s3.amazonaws.com/0/889/ee3d85b2-46cd-1909-bd24-af2106008fe2.png)

ちなみに、`I`以外にも`T`,`G`などのオプションも指定可能。

```
I - show reminder of failed and canceled tests without stack traces
T - show reminder of failed and canceled tests with short stack traces
G - show reminder of failed and canceled tests with full stack traces
```

参考: [scala - How to configure sbt test / ScalaTest to only show failures? - Stack Overflow](http://stackoverflow.com/questions/21806312/how-to-configure-sbt-test-scalatest-to-only-show-failures)
【デザインパターン】 Adapterパターン

##概要
インタフェースに互換性の無いクラス同士を組み合わせるためのパターン

以下の4種類のクラスからなる
1. Targetクラス(2.が利用するためのインターフェイスを定義)
2. Clientクラス(1.のインターフェイスにしたがう)
3. Adapteeクラス(適合させる必要のある既存のインターフェイスを持つ)
4. Adapterクラス(3.のインターフェイスを1.のインターフェイスに適合させる)

##具体例と実装
描画ソフトとOSを例にすると

上記1~4はそれぞれ
1. 描画ソフトクラス
2. ユーザークラス
3. Windows描画クラス
4. OS依存機能共通化クラス

が対応する。
コードの詳細は以下

```rb:drawing_software.rb
class DrawingSoftware
  def initialize(drawing_object)
    @drawting_object = drawing_object
  end

  def draw
    # 描画オブジェクトを描画する
    @drawing_object.draw
  end
end
```

```rb:user.rb
  drawing_softrware = DrawingSoftware.new(WindowsAdapter.new(drawing_object))
  drawing_software.draw
```

```rb:windows_drawer.rb
class WindowsDrawer
  def initialize(drawing_object)
    @drawing_object = drawing_object
  end

  def sketch
    # 描画オブジェクトの下絵を描く
    @drawing_object.sketch
  end

  def paint
    # 描画オブジェクトの下絵を仕上げ描画を完成させる
    @drawing_object.paint
  end
end
```

```rb:windows_adapter.rb
class WindowsAdapter
  def initialize(drawing_object)
    @drawer = WindowsDrawer.new(drawing_object)
  end

  def draw
    @drawer.sketch
    @drawer.paint
  end
end
```


##メリット
* 変更を加えるのが困難なクラスに手を入れずにクライアントがそれを利用できるようになる
* 複数のアダプターを用意することで、異なる互換性のないコンポーネントに対応ができるようになる

##まとめ
変更がしにくく、互換性のないクラスを組み合わせて利用する際に便利なパターン
【デザインパターン】 Factory Methodパターン

##概要
オブジェクトの生成をサブクラスに委譲するパターン

以下の4種類のクラスからなる
1. Productクラス(生成するオブジェクトのインターフェイスを定義)
2. Concrete Productクラス(1.のクラスのインターフェイスを実装)
3. Creatorクラス(オブジェクトを生成するためのfactory methodを定義)
4. ConcreteCreatorクラス(2.のインスタンスを返すようにfactory methodをオーバーライドする)

##具体例と実装
スピーカーを例にすると

上記1~4はそれぞれ
1. スピーカークラス
2. アナログスピーカークラス、デジタルスピーカークラス
3. スピーカー製造クラス
4. アナログスピーカー製造クラス、デジタルスピーカー製造クラス

が対応する。
コードの詳細は以下

```rb:speaker.rb
class Speaker
  def play(source)
    fail NotImplementedError
  end
end
```

```rb:digital_speaker.rb
class DigitalSpeaker < Speaker
  def play(source)
    # 音源をデジタル出力
  end
end
```

```rb:analog_speaker.rb
class AnalogSpeaker < Speaker
  def play(source)
    # 音源をアナログ出力
  end
end
```

```rb:speaker_creator.rb
class SpeakerCreator
  def initialize
  end

  def speaker
    fail NotImplementedError
  end
end
```

```rb:digital_speaker_creator.rb
class DigialSpeakerCreator < SpeakerCreator
  def speaker
    DigitalSpeaker.new
  end
end
```

```rb:analog_speaker_creator.rb
class AnalogSpeakerCreator < SpeakerCreator
  def speaker
    AnalogSpeaker.new
  end
end

```

##メリット
* オブジェクトの使用者がオブジェクトの生成過程を知る必要がなくなる
* template methodパターンと組み合わせることでDRYなコードが書ける

##まとめ
生成しなければならないオブジェクトのクラスを事前に知ることができない場合に利用するパターン
技術英語 > In oom_kill_process(), the variable 'points' is unsigned int. Print it [as such].

https://github.com/torvalds/linux/commit/f0d6647e85050c6ca70d69a647e3c653dd9b349a

> In oom_kill_process(), the variable 'points' is unsigned int.  Print it <font color=red>as such</font>.

>`-`	pr_err("%s: Kill process %d (%s) score <font color=red>%d</font> or sacrifice child\n",
>`+`	pr_err("%s: Kill process %d (%s) score <font color=red>%u</font> or sacrifice child\n",
>message, task_pid_nr(p), p->comm, <font color=red>points</font>);

unsigend intの書式指定子を%dとしていたのを%uに修正している。

上の例文では「points変数は unsigned int だから、<font color=red>そのように(意訳：その書式で)</font>Printせよ」。

as such は that way に置き換えても同じだろうか?
Ruby on Rails Tutorial にチャレンジ！のための環境構築(3)



brewfile がどこにできたのか、確認するところからです。

って、どうやって確認したらいいの？
よくわかりません。。。
基本的なことだとは思うのですが、ここで捕まっていては進めません。
Ruby on Rails Tutorial にとっては脇道と思われるので、
ひとまず棚上げにします。
ひとまずね。

さて。

[rbenvつかってrailsチュートリアルやってみよう！](http://niwatako.tips/20140724/article121.html)
を参考に、rbenvのインストールして、railsインストールまで一気にいきたいと思います。
[rbenv を利用した Ruby 環境の構築](http://dev.classmethod.jp/server-side/language/build-ruby-environment-by-rbenv/)も参考にさせていただきました。

その前に。
rbenv使うと、複数のRubyバージョンを共存させられるらしいです。


## 1. rbenvをインストールします。

> $ brew update
> $ brew install rbenv ruby-build
  
> $ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
 
> $ source ~/.bash_profile
>$ rbenv --version

すんなりできました。
rbenv 0.4.0

echo〜で、rbenv の初期化スクリプトを .bash_profile へ追加するそうです。

## 2. rbenvを使ってRubyをインストール

> $ rbenv install -l

で、rbenvでインストール可能なバージョンが表示される。
すごい量がでてきてびっくり。

Railsチュートリアルでは　ver2.0.0 が前提で、「2.0.0-p481　が安定版」らしいので

>$ rbenv install 2.0.0-p481
>$ rbenv rehash

いつも使うRubyをこのバーションに固定するには

>$ rbenv global 2.0.0-p481

とするらしい。

>$ ruby -v

で、バージョンの確認をすると

>ruby 2.0.0p481 (2014-05-08 revision 45883) [x86_64-darwin14.3.0]

と出ました。
設定できた。

新しくインストールしたRubyやその拡張機能の追加をrbenvに反映させるための「rehash」のコマンドを毎回しなくてもいいようにするには

>$ gem install rbenv-rehash
>$ rbenv rehash

としとくみたいです。
これで、2.0.0p481バージョンについては「rehash」が自動実行されるようになりました。


## 3.Railsをインストール

やっとここまできました。

>$ gem install rails --version 4.0.5

なんかいっぱい "skipping"　してるみたいですけど…
errorじゃないからいいのかな？

>Installing ri documentation for rails-4.0.5
>27 gems installed

と出て、インストール終了。

>$ rails -v
>Rails 4.0.5

>$ gem install bundler

を実行。

## 4.Railsプロジェクトを作成！

おぉ〜！ついにここまでたどり着きました。
って、スタートもしてないですけどね。

>$ mkdir rails_projects
>$ cd rails_projects
>$ rails new first_app

ぱちぱちぱち。
成功しました。
さて、やっと Tutorial に戻ります。

お?!　と、いうことは、環境構築は完了ですか？
ぱちぱちぱち。

あ…宿題は残ってましたね。
まぁ、またおいおい確認します。
続きは後日！


BGM:ロシュフォールの恋人たち
Ruby on Rails Tutorial にチャレンジ！のための環境構築(2)


Brewfileインストール中のエラーで休憩してました。
続きを始めます。

[2.3.2 gitにBrewfileを作成
  自分のGithub（無ければ作成しよう）で、Brewfileという新しいリポジトリを作成する。](http://joker.hatenablog.com/entry/2014/11/09/014607) とさらっと書かれているので、この手順を探します。

[Homebrew-fileでhomebrewでインストールしたパッケージの管理をする](http://www.task-notes.com/entry/20150316/1426474800)
を参考にさせてもらいます。

1.GitHubに「Brewfile」という名前のリポジトリを作る。
　　無料アカウントはリポジトリを非公開に出来ないのでPrivate

2.Homebrew-fileのインストール
　　…これはすでに実行済み。
　　
3.リポジトリの登録
　　あ。SSHの公開鍵の登録がわからない。。。
　　素直に[GitHubとBitbucketへの公開鍵の登録方法+SSHで複数鍵の使い分け](http://www.task-notes.com/entry/20150210/1423537200)の手順に従います。
　　今回は、Bitbucketの登録なし・GitHubのみ登録ですが、指示通りconfig作りました。
　　ssh-keygenコマンドで作成するときに聞いてくるpassphraseを指定するとssh接続するときに入力を求められる、というのを読み飛ばしてたようで、素直に設定してしまい、接続テストで聞かれて気付きました。
　　ということは、接続のたびに入力…作り直して、省略することに。
　　次の接続テストではpassphraseの入力を求められず、接続成功。

> % brew file set_repo -r [Githubアカウント名]/Brewfile　　

　を実行すると、
>Warning: Permanently added the RSA host key for IP address '192.30.252.128' to the list of known hosts.

　となっちゃう。。。
　cloneがうまくできてないのかな？
　
　リポジトリのページの右下にある「HTTPS clone URL」のcopy clipboardでコピー。
　
> git clone [ペースト]

　成功しました。

4.Brewfileを編集する

> brew file edit

　とすると

>$ git clone git@github.com:JFCheval/Brewfile /usr/local/Library/JFCheval_Brewfile
fatal: destination path '/usr/local/Library/JFCheval_Brewfile' already exists and is not an empty directory.
can't clone git@github.com:JFCheval/Brewfile.
please check the repository, or reset with
    $ brew file set_repo

　となるので、ファイル作るみたいです。

> cd ?
> vi Brewfile
> brew file edit

　ファイルできたのでBrewfileを今いれているパッケージで初期化してみるらしい。

> brew edit init

　　無事終わったんだけど。。。
　　自分の初心者っぷりに orz
　　どこにファイルができたんだかわかりません。。。　　


脱力ついでに、ひとまず今日はここまで！
続きは後日！

BGM:LIFE!
Ruby on Rails Tutorial にチャレンジ！のための環境構築(1)




##はじめます。

ほぼVBAしか触ったことないので「初」づくしになりますが [Ruby on Rails Tutorial](http://railstutorial.jp/) をやってみたいと思います。
環境構築からこけそうな予感…
粘り強く行きますよ！
Macに開発環境を入れるのも「初」です。

##環境
- MacBook
- OS X Yosemite(10.10.2) … クリーンインストールしました

##参照
まずは、Homebrewを入れます。
[Yosemiteで、Homebrew環境構築手順（brew, brew cask, brew file）](http://joker.hatenablog.com/entry/2014/11/09/014607)



##手順
* 1. XCode
* 2. Java
* 3. Homebrew
* 4. Git
* 5. Homebrew拡張:caskroom
* 6. Homebrew拡張:brew-file


##まず『XCode』
環境構築について書いてるサイトをいろいろ見てみると、XCodeは重いからCommand Line Tools for Xcodeでいいよ、と書いてるんですが、いいです。丸ごと入れてみます。
XCode 6.2

##Java
Homebrewを使ってるうちに、インストールするソフトがJavaを必要とすることがある…と書いてるサイトがあって、
そのうちJavaも勉強しようと思っているので、
先に入れとくことにしました。
バージョンも気にするべきなのかなぁ、と思いつつも、ひとまず最新を。
ver1.8.0_40


##Homebrew

パッケージ管理システム

[homebrewとは何者か。仕組みについて調べてみた](http://qiita.com/omega999/items/6f65217b81ad3fffe7e6)
で、学んだ気になりつつ。

[Homebrew]
(http://brew.sh/index_ja.html)
を見てインストール開始。

>ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

Homebrew 0.9.5

あれ？　ruby入ってる。
OSに入ってるんだね。


##Git
>brew install git

意外にすんなり入りましたよ。
git version 2.3.4


##Homebrew拡張:caskroom
>brew install caskroom/cask/brew-cask

brew-cask version 0.53.3
このまま順調にいけばいいな…

##Homebrew拡張:brew-file

[brew-file: MacのHomebrewでBrewfileを扱うbrewallを改名した](http://rcmdnk.github.io/blog/2014/08/26/computer-mac-homebrew/)
というサイトも参考に。

>$ brew tap rcmdnk/file
>$ brew install brew-file

のうち、まず１行目。

>brew tap rcmdnk/file

こけた。。。
error: RPC failed; result=56, HTTP code = 200 | 52.00 KiB/s
fatal: The remote end hung up unexpectedly
fatal: early EOF
fatal: index-pack failed

もう一回。
>brew tap rcmdnk/file

あ。成功した。なんで？

あとでエラー調べてみたら、
[git cloneに失敗する](http://nantonaku-shiawase.hatenablog.com/entry/2013/09/01/111820)
というサイトが見つかったので、
「git RPC failed; result=56」
で検索。
[Git Clone Fails - error: RPC failed; result=56, HTTP code = 200](https://confluence.atlassian.com/pages/viewpage.action?pageId=693897332)
[gitでファイルをhttpで転送する際の上限サイズを超えてしまったことが原因らしい。](http://qiita.com/shiro615/items/af15be4798a6de73730c)

そうなのか。
とりあえず入ったので、次。

>brew install brew-file

なんかエラーメッセージが出てこけたような気がするので、もう一回実行してみます。
> Error: brew-file-3.3.10 already installed
> To install this version, first `brew unlink brew-file'

あれ？ 入ってるみたい。
１回目の最後、
> OSError: [Errno 2] No such file or directory

だったんですが、これは GitHub上にあるBrewfileとつなげたMac上のHomebrewのフォルダがないよっていわれてるんでしょうか…

と、なるとGitHubにリポジトリ作って…って、まずその方法から確認しないといけないので、ひとまず今日はここまで！

続きは後日！

BGM:サマーウォーズ