OmniAICreator/Qiita-1.07M huggingface dataset:
github-pagesへnginxからredirect

# nginx redirect to Github Pages #

## つまり

- 運営したいURL(サーバ) [http://takagi.makei.nu](http://takagi.makei.nu)

- 運営したいコンテンツ [http://pharaohkj.github.io/takagi.makei.nu/](http://pharaohkj.github.io/takagi.makei.nu/))

とあって、リバースプロキシ nginx を使って、github-pagesのインフラを使わせてもらおうという話。

## まずgithub-pages

1. Githubでプロジェクトを作る。今回は *takagi.makei.nu*
2. **gh-pages** というブランチを作る
3. コンテンツを書く
4. http://pharaohkj.github.io/takagi.makei.nu/ でページが見られるのを確認する。

## nginxのconfを書く

1. CentOSのパッケージでは `/etc/nginx/conf.d/xxx.conf`に書く流儀らしいので、`/etc/nginx/conf.d/takagimakei.nu.conf`を作成
2. 中身はこんな感じ
  - server_name は cname/a レコードで設定したもの
  - redirectのログは出しておく(noticeじゃないと出ないらしい)
  - 書いたら `/etc/init.d/nginx configtest` からの `service nginx reload`

``` 
server {
        access_log /var/log/nginx/takagi.makei.nu.access.log main;
        error_log /var/log/nginx/takagi.makei.nu.error.log notice;
        server_name takagi.makei.nu;
        rewrite_log on;
        # rewrite ^(.*) http://pharaohkj.github.io/takagi.makei.nu$1 ;
        location / {
                rewrite ^/(.+) $1 break;
                proxy_pass http://pharaohkj.github.io/takagi.makei.nu/$1;
        }
}
```

## テスト

curlを詳細出力実行でヘッダやレスポンスがみられてわかりやすい。あと、nginxのログも見ること。rewriteはハマりやすい。

```
$ curl http://takagi.makei.nu -v
* STATE: INIT => CONNECT handle 0x60002d7e0; line 1011 (connection #-5000)
* Rebuilt URL to: http://takagi.makei.nu/
* Hostname was NOT found in DNS cache
*   Trying 49.212.145.99...
* Adding handle: conn: 0x60006a4d0
* Adding handle: send: 0
* Adding handle: recv: 0
* Curl_addHandleToPipeline: length: 1
* 0x60002d7e0 is at send pipe head!
* - Conn 0 (0x60006a4d0) send_pipe: 1, recv_pipe: 0
* STATE: CONNECT => WAITCONNECT handle 0x60002d7e0; line 1058 (connection #0)
* Connected to takagi.makei.nu (49.212.145.99) port 80 (#0)
* STATE: WAITCONNECT => DO handle 0x60002d7e0; line 1177 (connection #0)
> GET / HTTP/1.1
> User-Agent: curl/7.37.0
> Host: takagi.makei.nu
> Accept: */*
>
* STATE: DO => DO_DONE handle 0x60002d7e0; line 1263 (connection #0)
* STATE: DO_DONE => WAITPERFORM handle 0x60002d7e0; line 1384 (connection #0)
* STATE: WAITPERFORM => PERFORM handle 0x60002d7e0; line 1395 (connection #0)
* HTTP 1.1 or later with persistent connection, pipelining supported
< HTTP/1.1 200 OK
* Server nginx/1.6.0 is not blacklisted
< Server: nginx/1.6.0
< Date: Tue, 16 Sep 2014 10:13:24 GMT
< Content-Type: text/html; charset=utf-8
< Content-Length: 1041
< Connection: keep-alive
< Last-Modified: Tue, 16 Sep 2014 04:04:34 GMT
< Expires: Tue, 16 Sep 2014 10:23:24 GMT
< Cache-Control: max-age=600
< Accept-Ranges: bytes
< Via: 1.1 varnish
< Age: 0
< X-Served-By: cache-ty68-TYO
< X-Cache: MISS
< X-Cache-Hits: 0
< X-Timer: S1410862404.676017,VS0,VE170
< Vary: Accept-Encoding
<

(コンテンツの中身)

```
Goのimport文で悩まない方法

Golang は使われていないものまで import しているとコンパイル時にエラーになります。

この仕様自体はとてもいいと思うのですが，ちょっとしたファイルを試行錯誤している時にどこかの行をコメントアウトする度に import 文も書き換えないとコンパイルできないというようなことが発生してイライラする事があります。

せっかくの静的型付け言語ですのでこの辺りを自動でいい感じにしてくれると嬉しいです。

そんなあなたに `goimports` がおすすめです

  * [goimports - GoDoc](https://godoc.org/golang.org/x/tools/cmd/goimports)

Emacs などのエディタで保存時に `gofmt` をかけて自動整形させる設定は誰でもしていることと思いますが，`goimports` は `gofmt` と全く同じ用に使えてかつ import 周りを自動でいい感じにしてくれるという優れものです。

インストールは `go get` でサクッと

    go get golang.org/x/tools/cmd/goimports

Emacs を使っている場合は go-mode を読み込んでから以下のように `gofmt` の代わりに `goimports` を使うようにすればいいです。

```el:init.el
(setq gofmt-command "goimports")
(add-hook 'before-save-hook 'gofmt-before-save)
```

注意点としては GUI の Emacs を使っている場合は環境変数の PATH と GOPATH をシェルから引き継がないといけません。

GOPATHの中にプロジェクトが増えるとドンドン遅くなっていきます。そんな時はGoのソースコードが存在しないディレクトリを `$GOPATH/src/.goimportsignore` に書いて無視するようにします。自動的に作成することもできます。

* [pwaller/goimports-update-ignore: Generate .goimportsignore and make goimports fast](https://github.com/pwaller/goimports-update-ignore)

```
go get github.com/pwaller/goimports-update-ignore
goimports-update-ignore -max-depth 1
```
ruby1.9.3&unicornでLogger使ってログローテするとログたくさんできたよ＼(^o^)／

ruby1.9.3 と sinatra、unicornの構成でWebシステム運用中です。
unicornのworker_process は5 に設定。

そんな設定下で、下記のようなコードがありました。

```controller.rb
logger = Logger('hoge.log', daily)
logger.info "hogehoge"
```

期待する動きとしては、/log/hoge.log が出来て、
日付が変わるときに /log/hoge.log.YYYYMMDD になってローテートしてくれるハズ。

しかし、現実は非情であり。

日付が変わると、
/log/hoge.log.YYYYMMDD
ができると、その後に続くように
/log/hoge.log.YYYYMMDD.1
/log/hoge.log.YYYYMMDD.2
/log/hoge.log.YYYYMMDD.3
/log/hoge.log.YYYYMMDD.4
…というログファイルが生成されます。

どうやら、workerのプロセスごとに個別にローテートをしようとしてくれている。
…ですが。
これだとログファイルの数だけとっ散らかっていき可読性悪いことこの上ないです。

普通に logrotate.d を使うしかないのか、、と思っていましたが、
同様の問題に当たった方が、プロセスセーフを考慮したLoggerを作ってくれていました。

process_safe_logger というgem になります。

https://github.com/sonots/process_safe_logger

また、Ruby2.1.0からは、デフォルトでプロセスセーフになったとのこと。

http://blog.livedoor.jp/sonots/archives/33965293.html

おお、これは嬉しい！感謝感謝です。
とはいえ、現行システムはgem対応までしかできないですけどね…ｗ


## 翌日譚

あれー相変わらずログは「hoge.log.YYYYMMDD.1」形式で出力されてるorz
改めて記事の内容を確認していったところ、プロセスセーフという言葉を完全に勘違いしていますね…
お恥ずかしい。。
ログファイルのロックや上書きが発生してしまうことが問題であり、
ログファイルが複数できるのは仕様上正しい動きのようです。

これは、ログを収集するプログラム（fluentdですが）の方で吸収するのがいいかもしれないな…。
備忘録LibreOffice

# LibreOffice

## Calc

### xls形式で保存する時に置き換わってしまう文字がある

「～」全角波ダッシュ、「―」全角ダッシュ、などの文字は、
xls形式に保存する際、別の文字に置き換わることがある。

例えば、全角波ダッシュ「～」は全角チルダ「～」になる、など。
UTF-8からShift-JISに変換する処理が挟むと、
発生するような気がする。
OSなどの環境によっても動作が異なるかも。

LibreOfficeでMs-Office形式に保存したファイルが、
思い通りの挙動を取らなかい場合は、
これらの文字が変わっていないか、確認してみること。

* http://qiita.com/kasei-san/items/3ce2249f0a1c1af1cbd2#comment-8fad37c8c54f97338eca
* http://ja.wikipedia.org/wiki/%E6%B3%A2%E3%83%80%E3%83%83%E3%82%B7%E3%83%A5



### シェルで新規作成するodsの保存先

エクスプローラ上で右クリック→新規作成→OpenDocument 表計算
などのように、シェル上でodsファイルを新規作成する際の
テンプレート(厳密にはテンプレートファイルではない)となるodsファイルは、↓に入っている

    LibreOfficeのインストールフォルダ\share\template\shellnew\soffice.ods

この soffice.ods を自分好みに編集しておくと、新規作成時に楽。

LibreOfficeのインストールフォルダが Program Files (x86) などにある場合、
管理者権限を用いることで、この soffice.ods に編集やコピーができるようになる。

なお、LibreOffice上で新規作成した場合は、
この soffice.ods は使われないので、注意。

http://alcyones.wordpress.com/2013/02/22/libreofficeandale-sans-ui/

### LibreOffice上で新規作成する際の標準テンプレート指定

LibreOffice上で新規作成する際は、設定してある標準テンプレートが用いられる。
標準テンプレートは、↓の手順で設定する。

1. ファイル→ドキュメントテンプレート→管理 でテンプレートマネージャーを開く
2. 任意のテンプレートを選択
3. 選択した状態で[規定値に設定]ボタンが現れたら、クリック

これで、規定値に設定したテンプレートが、新規作成時に用いられる。
**シェルで新規作成する際に用いる soffice.ods は用いない事に注意。**

テンプレートの保存先は、↓で確認・編集できる。

1. ツール→オプション で、オプションウィンドウを開く
2. LibreOffice→パス をクリック
3. 種類列のテンプレートを参照

### ExcelVBAを使う

マクロの先頭に↓を書く。

    Option VBASupport 1

http://emasaka.blog65.fc2.com/blog-entry-449.html


### 最初の文字を大文字にしない

1. [ツール] → [オートコレクトオプション] をクリック
2. オプションタブにて、「すべての文を大文字で始める」のチェックを外す
    * 2文字目を小文字にする」「ダッシュに置換」のチェックも外しておいたほうがいい
Collectionから特定のModelを取得してくる


## 今回やったこと
* queryで条件を指定してデータを取得してくる

## ソースコード
```javascript:app/controllers/index.js
var library = Alloy.Collections.user;
library.fetch();

$.word.addEventListener('change', function(e){
  Ti.API.debug(e);
  var property = $.property.getValue();
  library.searchByName(property, e.value);
});
```

```javascript:app/models/user.js
extendCollection: function(Collection) {
  _.extend(Collection.prototype, {
    // extended functions and properties go here
    searchByName: function(property, word){
      var q = "SELECT * FROM " + this.config.adapter.collection_name + " WHERE " + property + " LIKE '\%" + word + "\%'";
      this.fetch({query: q});
    }
  });

  return Collection;
}
```

[前回](http://qiita.com/te2ka/items/6cff43d34b3535c53bad)まではextendModelの中の_.extend内に色々書いてましたが，今回はModel(レコード)に対してではなくCollection(テーブル)に対して条件指定して絞り込みを行うのでextendCollection内に記述します．

## 問題点
ソースコードを見ればわかりますが，もろにSQLインジェクションを受けてしまいます．
SQLインジェクション対策として``library.fetch({query: { statement: 'SELECT * from ' + table + ' where author = ?', params: [searchAuthor] }}); // 公式ドキュメントより``のようにqueryをstatementとparamsにわければ良いと書かれていたのでやってみたところ，うまくいかなかったので現在模索中．
FluentDをMac OSXにインストールしてみた


##インストール
http://www.fluentd.org/download
のページよりdmgファイルをダウンロードし、インストールする。

##起動方法

```fluentd:起動
sudo launchctl load /Library/LaunchDaemons/td-agent.plist
```

##停止方法

```fluentd:停止
sudo launchctl unload /Library/LaunchDaemons/td-agent.plist
```

##設定ファイル

```fluentd:環境ファイル
sudo vi /etc/td-agent/td-agent.conf
```

すごいシンプルです。
iPhoneを持って帰宅/外出すると、自動で家電の電源をオン/オフさせるアプリ作った

# 自宅からの距離で、自宅の照明をオン/オフしたい

[フューチャーホームコントローラー](https://rti-giken.jp/) という面白いガジェットがあります。
音声で赤外線リモコン操作が出来るというものです。温度計、明るさセンサーも内蔵されています。
WEBページ経由でのリモコン操作も出来ますし、APIも公開されているのでアプリを作ってコントロールする事も出来ます。

Swift言語でiPhoneアプリを作ってみたかったので、自宅からの距離によってフューチャーホームコントローラーを
制御するアプリ FHCCommander (Future Home Controller Commander) を作ってみました。
多分このアプリを使いたい人は、世の中に数名いるかどうかなので、AppStoreで公開するよりはソースコードを公開する方が
多くの人の役に立ちそうなので、githubにて公開しました。 https://github.com/FUKUZAWA-Tadashi/FHCCommander.git
Swiftサンプルプログラムを読みたい人には有用かもしれません。

iPhoneアプリはこれで2作目で、とても馴れたとは言えず、常識的なiOSの作法もわかってない部分があるかと思いますが
笑って許して下さい。

SwiftプログラムはXcode6以上でなければビルド出来ません。iOSはバージョン8以上が必要です。
iOS Dev Center からダウンロードしてインストールする必要があります。

## フューチャーホームコントローラーの設定

FHCCommanderは、「家電」と「操作」の組み合わせでFHCにコマンドを送ります。
それらが既に用意されていれば、FHC側の設定は必要ありません。
しかしFHCCommanderが呼び出すための専用家電カテゴリを作っておくと便利かと思います。
例えば、帰宅時に部屋が暗かった場合にのみ照明をつける、というような動作をさせたい場合とか、
一度に複数の家電の電源をオフにしたいといった場合に便利です。

あらかじめ、家電「照明」と、その操作「つける」「けす」が登録されているとします。
「設定画面に行く」→「コマンド設定を行う」でコマンドを追加します。

```js:ittekimasu.js
function main(host, secret,command,args)
{
  action("照明","けす");
  // action("エアコン", "オフ");
}
```

```js:tadaima.js
function main()
{
  if (5 > sensor_lumi()) {
    action("照明","つける");
  }
}
```

リモコンの編集メニューから、「新規作成する」で新しい機材「FHCC」を作ります。
「動作を新規に追加する」をクリックします。
種類を「その他」に、その他種類名を「帰宅」にします。
操作方法を「コマンド実行」にして、追加したコマンド tadaima.js を選択します。

同様に、動作「外出」を新規追加して、コマンド ittekimasu.js を割り当てます。

## iPhoneに FHC Commander を転送

ここでは細かいやり方は書きません。
iOS開発者ならわかるでしょう。

- iPhoneをiOS8にアップデート
- iPhoneを開発用機材として登録
- Xcode6でFHCCommanderをビルド
- Xcode6でFHCCommanderをiPhoneに転送

## FHCCommanderの設定

FHCCommanderが起動したら、下のタブの Settings をタップして設定画面にします。
FHCアドレスの欄に、自分のフューチャーホームコントローラーのローカルIPアドレスを記入します。
mailaddressとpasswordの欄に、登録したメールアドレスとパスワードを記入します。

次に「自宅設定」ボタンをタップすると、現在位置情報から自宅緯度経度の欄が自動設定されます。
また、LANのSSIDと、フューチャーホームコントローラーのAPIを呼び出すのに必要なSECRETを自動取得し、
それぞれの欄を自動設定します。
パスワードが間違っていたりすると、SECRETは取得出来ません。

SECRETが取得できているようならば、フューチャーホームコントローラーに登録された機材と動作の一覧も取得できています。
画面下部の Action タブをタップして、外出/帰宅時の動作を選択します。

![iOS Simulator Screen Shot 2014.09.15 23.55.51.png](https://qiita-image-store.s3.amazonaws.com/0/23220/d2c0474d-fbe3-5e69-10f2-c8773926e070.png)


これで設定完了。

## 動作確認

iPhoneを持って外出してみましょう。アプリがバックグラウンドになっていても、コマンドは実行されるはずです。
但し、自宅LANに接続されたかどうかのチェックはバックグラウンドでは出来ないようです。
「自宅LANに接続されたら」のスイッチは切っておく方が良いでしょう。（機能削除すべきかな）

Have fun !

![iOS Simulator Screen Shot 2014.09.16 0.09.20.png](https://qiita-image-store.s3.amazonaws.com/0/23220/7c58d903-b59c-1e02-5d8b-38102406c2b1.png)


## 今後

登録した地点からの距離によって、URLスキームを使って他アプリを呼び出すアプリと、
URLスキームから呼び出されてFHCにコマンドを送るアプリの、2つのアプリに分離した方が
色々と応用が効いて楽しそうな気がします。
（バックグラウンドからURLスキームでアプリ呼び出しが出来ないと無理ですが、どうなんでしょう？）
なお今の所作る予定はないです。

フューチャーホームコントローラーがHomeKitに対応すれば、もっとマシなアプリから制御したり、
Siriを通して命令したり出来るようになると思います。 （HomeKitへの対応予定があるかどうかは知りません）

### 謝辞

フューチャーホームコントローラーを開発されました 株式会社rti技研 様、面白いガジェットを作って頂いてありがとうございます。
小飼弾さんの [swift-json](http://qiita.com/dankogai/items/e3d9882f4d25bc44cc03) を使わせて頂きました。
Apple社の Reachability サンプルプログラムを使わせて頂きました。
MacでApp:revealupを動かしてみる


追記: コメントでyusukebeさんに指摘いただき、carton使わないよう修正しました＞＜


まずこれをみてかっけーと思った
>一瞬でクールなスライドがつくれる「App::revealup」をリリースしました - ゆーすけべー日記 http://yusuke.be/post/88914879289

perlの環境構築よくわかんないけど、かっこいいスライド作りたいのでしらべてみた

perlのインストール

```bash
brew install plenv
plenv install 5.18.2
plenv install-cpanm
plenv global 5.18.2
plenv rehash && rehash
```

環境変数を.zshrcに設定

```.zshrc
# perl
export PERL_LOCAL_LIB_ROOT="/Users/`whoami`/perl5:$PERL_LOCAL_LIB_ROOT";
export PERL_MB_OPT="--install_base "/Users/`whoami`/perl5"";
export PERL_MM_OPT="INSTALL_BASE=/Users/`whoami`/perl5";
export PERL5LIB="/Users/`whoami`/perl5/lib/perl5:$PERL5LIB";
export PATH="/Users/`whoami`/perl5/bin:$PATH";
```


cpanmでrevealupをインストール
はじめは、carton使ってたけど、使わない方針で！

```bash
cpanm App::revealup
```


あとは適宜、表示用のslide.mdを用意

```slide.md
### title
desc

---
### title2
desc

----
```

最後に、コマンドたたいてブラウザで見れるかチェック

```
revealup server ./slide.md --port 5000
```

ブラウザで、http://localhost:5000 叩いて見れたらOK

![画面サンプル](http://i.imgur.com/tmrPsocl.png?1)
Evernote検索方法


よく忘れるので、備忘録です。


###全文検索

```
検索する単語
```

※上記で指定した単語を含むノートを検索する。


###ノートブック検索

```
notebook:検索対象のノートブック名
```

※半角スペースのあるノートブックを検索する際はダブルクォーテーションで囲む。



###タグ検索
```
tag:タグ名
```

※半角スペースのあるタグを検索する際はダブルクォーテーションで囲む。

```
-tag:タグ名
```

※先頭に-を付けると、指定したタグを含まないノートを検索する。

```
-tag:*
```

※-と*を併用することで、タグが指定されていないノートを検索する。

###タイトル検索

```
intitle:タイトル名
```

※上記で指定したタイトル名を含むノートを検索する。

```
-intitle:タイトル名
```

※先頭に-を付けると、指定したタイトル名を含まないノートを検索する。



###あいまい検索

```
any:PHP Ruby
```

※anyを使うことでいずれかの単語が含まれているノートを検索する。
※anyで指定する単語は半角スペースで区切ることでいくつでも指定できる
※空白を含む単語は指定できないようだ。


###作成日時検索

```
created:20100101
```

※上記で2010年1月1日以降に作成されたノートを検索する。

```
-created:20100101
```

※上記で2010年1月1日以前に作成されたノートを検索する。


検索にはyear, month, dayも指定できる。

```
created:week
```

※上記で今週中に作成されたノートを検索する。

```
-created:year
```

※上記で今年以前に作成されたノートを検索する。


###更新日時検索

```
updated:20110101
```

※2011年1月1日以降に更新されたノートを検索する。
※その他の使い方は作成日時検索を参照。


###リソース検索

```
resource:image/
```

*※上記で画像付きのノートを検索する。




##上記検索条件は複数同時に指定可能

```
開発環境 tag:開発 notebook:自作
```

タグに「開発」が指定された「自作」ノートブックの中から、
「開発環境」という単語を含むノートを検索する。


###共有されたノートを検索
sharedate:*
Chromeにインストールしている拡張4


1は[こちら](http://qiita.com/koshihikari/items/2c8842ab02dbffdf9df5)
2は[こちら](http://qiita.com/koshihikari/items/9361b5e825cea2818764)
3は[こちら](http://qiita.com/koshihikari/items/fb44c49d26d1f7af37e1)
5は[こちら](http://qiita.com/koshihikari/items/2a578bf662fc5fbf4d0f)



##LiveReload
https://chrome.google.com/webstore/detail/livereload/jnihajbhpnppcggbcgedagnkighmdlei

ファイルを編集した際、Cmd + Rを押さなくてもブラウザをリロードしてくれます。

Gruntと組み合わせて使っていますが、保存時に毎回ChromeをアクティブにしてCmd + Rをしていたのが不要になりました。
たったそれだけのことですが、非常に便利です。

  
##MobileLayouter
https://chrome.google.com/webstore/detail/mobilelayouter/kihlbahoakoeaogacjmpghbmnmpmllan?hl=ja

UAを切換えてスマホやタブレットでの表示を確認できます。

類似の拡張の中にはブラウザ毎UAを切換えてしまうので、
検索ページを表示した際に見にくくなり、わざわざシークレットウインドウやユーザの切り替えを行っていましたが、
この拡張はタブ単位でUAを切り替えることができるので、そういった手間が不要で重宝しています。


##Octotree
https://chrome.google.com/webstore/detail/octotree/bkhaagjahfmjljalopjnoealnfndnagc

gitHubで任意のリポジトリページを表示した際、
画面左にファイルツリーを表示してくれます。

深い位置にあるファイルへのアクセスやディレクトリ構成の確認等に役立ちます。

##JSON Editor
https://chrome.google.com/webstore/detail/json-editor/lhkmoheomjbkfloacpgllgjcamhihfaj?utm_source=chrome-ntp-launcher

これは拡張ではなくアプリですが、便利なので紹介します。

JSONをオブジェクトツリーとして表示してくれます。

短いJSONなら大丈夫ですが、長くなると見通しが悪くなるのでこのアプリにペーストしてチェックしています。
Chromeにインストールしている拡張5


1は[こちら](http://qiita.com/koshihikari/items/2c8842ab02dbffdf9df5)
2は[こちら](http://qiita.com/koshihikari/items/9361b5e825cea2818764)
3は[こちら](http://qiita.com/koshihikari/items/fb44c49d26d1f7af37e1)
4は[こちら](http://qiita.com/koshihikari/items/1677a99cc6a29c73a66b)


##OneTab
https://chrome.google.com/webstore/detail/onetab/chphlpgkkbolifaimnlloiipkdnihall

現在開いている複数のタブへのリンクを1つのページにまとめてくれます。

Pocketに保存する程でもないけど、今は読む時間がないという時に利用しています。


##Save to Pocket
https://chrome.google.com/webstore/detail/save-to-pocket/niloccemoadcdkdjlinkgdfekeahmflj

現在開いているページをPocketに保存してくれます。

Pocketは一時期使っていませんでしたが、iPhoneのReederやGunosyからもPocketに保存できるので、Macでじっくりと読みたい記事などを保存するのに使っています。



##はてなブックマーク Coogle Chrome 拡張
https://chrome.google.com/webstore/detail/%E3%81%AF%E3%81%A6%E3%81%AA%E3%83%96%E3%83%83%E3%82%AF%E3%83%9E%E3%83%BC%E3%82%AF-googlechrome-%E6%8B%A1%E5%BC%B5/dnlfpnhinnjdgmjfpccajboogcjocdla

現在開いているページをはてなブックマークに保存してくれます。

Pocketとの使い分けは下記のようにして、はてなブックマークに保存する前にPocketでフィルタリングをかけています。

1.iPhoneのReederやGunosyで気になってMacでじっくりと読みたい記事はPocketに保存。
2.Pocketに保存した記事の内、保存しておきたい記事をはてなブックマークに保存。

はてなブックマークの拡張はChromeよりFirefoxの方が使いやすいので、
はてなブックマークに保存した記事の閲覧にはFirefoxを使用しています。

##Nimbus Screenshot
https://chrome.google.com/webstore/detail/nimbus-screenshot/bpconcjcammlapcogcnnelfmaeghhagj

スクリーンキャプチャを撮ってくれます。

見えている範囲、ページ全体、指定範囲等でキャプチャでき、キャプチャ後に簡単な図形や注釈を挿入することも出来ます。

>以前はAwesome Screenshotを使っていましたが、閲覧したサイトのURLを収集しているという記事を見てこちらに切換えました。
[iOS8 対応]UILabelをカスタムフォントにすると、クラッシュする問題。


#Xcode6で実行した
```objectivec:Appdelegate.m
[[UILabel appearance] setFont:[UIFont fontWithName:@"フォント名" size:15]];
```


```objectivec:TableView
-(NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
    NSArray *arry = [NSArray arrayWithObjects:NSLocalizedString(@"A",@"B",@"C" nil), nil];
    
    return [arry objectAtIndex:section];
}
-(NSString *)tableView:(UITableView *)tableView titleForFooterInSection:(NSInteger)section
{
     NSArray *arry = [NSArray arrayWithObjects:NSLocalizedString(@"A",@"B",@"C" nil), nil];
    
    return [arry objectAtIndex:section];
}
```
titleForHeaderInSection, titleForFooterInSectionで、iOS8環境でクラッシュしてしまう。
下記のエラーメッセージでクラッシュする。

```
Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'scaledValueForValue: called on a font that doesn't have a text style set'
```

##現状
現状は、カスタムフォントを外して個別に設定することで対応しましたが、解決方法はまだ見つけていません。
コードを音楽にする「コードサウンド」をWebAudioAPIで作った


![2014-09-16-codesound.png](https://qiita-image-store.s3.amazonaws.com/0/2152/e6ad5cf2-7ab9-9d70-0208-81b0a222d0d4.png "2014-09-16-codesound.png")

この前、ハッカソンで作る機会があったので作ってみた。そろそろコードレビューは次世代に行ってもいいと思う。字面や挙動を追うのではなく、コードが奏でる音。それで良し悪しを判断する。…くると思います。いや、こないか。

こちらが、成果物のコードサウンドちゃん。動作確認はChromeでしかしてないので、ごめんなさい＋コードはかなり汚いです、ごめんなさい。

- コードサウンド http://tech.basicinc.jp/assets/page/codesound/
- ソースはこちら https://github.com/zaru/codesound

どんな動作するのかというと、コードを文字単位に切って、文字に対して音を割り当てて、それを単純に再生させているだけ。一応、タブコードでのインデントがあると、再生速度が上がっていきます。つまり、ネストが深いコードは音が早くて聞きにくくて、ダメコード！っていうわけです。まぁ、実際は早い部分がないと飽きちゃうんですけどね。

そんで、ハッカソン開催した時の記事はこちら。どんなハッカソンだったのか参考までに。

- ハッカソン開催記事 http://tech.basicinc.jp/app/2014/09/16/hackathon/

# Web Audio API

今回はじめてまともにWeb Audio APIなるものをさわったのだけど、こいつは凄い。音声の処理や合成を簡単にやってくれる。キーボードピアノだって作れる。

```javascript:javascript
var AudioContext = window.AudioContext || window.webkitAudioContext,
ctx = new AudioContext();
var oscillator = ctx.createOscillator();
var gainNode = ctx.createGain();
oscillator.type = 'sawtooth'; // 音の波形
oscillator.detune.value = 0; // 音の高さとか調整？
oscillator.frequency.value = 880; // 周波数 880Hz
gainNode.gain.value = 0.05; // 音量

oscillator.connect(gainNode);
gainNode.connect(ctx.destination);

oscillator.start();
```

これだけで、音が鳴る！簡単。

## 波形

oscillator.typeで音の波形、なる音のタイプを選択できる。個人的には、sineとsawtoothが好み。

- 正弦波 : sine
- 矩形波 : square
- ノコギリ波 : sawtooth
- 三角波 : triangle
- カスタム波形 : custom

## ハマった所

ハマったというか、音楽っぽくするためにちゃんと単音がでないといけないんだけど、なんか変につながっちゃう！と思ったら、`createOscillator().start()`と`createOscillator().stop()`で、再生と停止で、音を区切らないとダメだったという。てっきり`start()`したら、あとは周波数変えれば良きにはからってくれるかと思ってた。

そして、`stop()`すると再度`createOscillator()`インスタンスを再生成する必要がある。ここもハマりポイントだった…。

```javascript:javascript
var AudioContext = window.AudioContext || window.webkitAudioContext,
ctx = new AudioContext();
var oscillator = ctx.createOscillator();
var gainNode = ctx.createGain();

var score = [440, 550, 660, 770, 880];
function sound(score) {
  var count = 0;
  var flag = false;

  return function() {

    if (flag == true) {
      oscillator.stop();
    }

    // ここで再生成する
    oscillator = ctx.createOscillator();
    oscillator.connect(gainNode);
    gainNode.connect(ctx.destination);

    oscillator.frequency.value = score[count];
    oscillator.type = 'sine';
    oscillator.detune.value = 0;
    gainNode.gain.value = 0.05;

    oscillator.start();

    count += 1;

    if (count <= score.length) {
      flag = true;
      setTimeout(soundFunc, 250);
    } else {
      oscillator.stop();
    }
  }
}

var soundFunc = sound(score);
soundFunc();
```

## 参考サイト

今回コードサウンドを作るのに、下記サイトに大変お世話になりました。ありがとうございます。

- http://curtaincall.weblike.jp/portfolio-web-sounder/webaudioapi-basic/oscillator
Pylintの使い方メモ


## インストールと準備

```
pip install pylint
pylint --generate-rcfile > ~/.pylintrc
```

`~/.pylintrc`を修正してカスタマイズすることができる

*例えば*

```
const-rgx=[a-z_][a-z0-9_]{2,30}$
const-name-hint=[a-z_][a-z0-9_]{2,30}$
include-ids=yes
symbols=yes
disable=W0142,C0111
```
を指定、W0142は **kwargs などの引数のワーニングを出さないようにする設定。
disableの設定をいじって何をチェックするかなど調整することができる。
[PyLint メッセージ一覧](http://pylint-messages.wikidot.com/all-codes)

## 出力のフォーマットについて
メッセージタイプ: 行:[オブジェクト:] メッセージ

* 主なメッセージタイプ説明
 * (C) convention, コーディング基準まもってなくねぇか？
 * (R) refactor, リファクタリングが必要じゃない？
 * (W) warning, Python特有の問題かも？
 * (E) error, バグがあるかもよ？

## 使い方例

```
$ pylint somefile.py

Warning: option include-ids is deprecated and ignored.
Warning: option symbols is deprecated and ignored.
************* Module handlers.account
W: 15, 4: Arguments number differs from overridden method (arguments-differ)
W: 22, 8: Attribute 'ERRORS' defined outside __init__ (attribute-defined-outside-init)
W: 85, 8: No exception type(s) specified (bare-except)
E: 66,19: Class 'User' has no 'objects' member (no-member)
E:100, 8: Bad first argument 'CommonHandler' given to super() (bad-super-call)
E:112,19: Class 'User' has no 'objects' member (no-member)
E:136, 8: Bad first argument 'CommonHandler' given to super() (bad-super-call)
W:160, 8: No exception type(s) specified (bare-except)
E:146,23: Class 'User' has no 'objects' member (no-member)
E:148,19: Class 'User' has no 'DoesNotExist' member (no-member)
E:172, 8: Bad first argument 'CommonHandler' given to super() (bad-super-call)

...

Global evaluation
-----------------
Your code has been rated at 6.90/10 (previous run: 6.43/10, +0.48)

...

```

みたいな感じで、評価が出る。
前回との差も出してくれるみたい。
Wordpressの初回設定をサクッと済ませるスクリプト


所定のディレクトリにwordpressを解凍したあとに行う設定をサクッとすませるためのスクリプトです。`DATABASE_NAME_HERE`と`USERNAME_HERE`と`PASSWORD_HERE`を適宜設定してください。

同じサーバーに幾つかWordpressを設置するときに重宝してます。対話式にしてもいいかも。

使う場所はwordpressってディレクトリがある場所です。

例）

```
# pwd
/var/www/html
# ls
wordpress
```

実行

```
# sh setup-wp.sh 
```


```bash:setup-wp.sh
#!/bin/bash -eu

## 以下の設定情報を編集して使ってください。
DATABASE_NAME_HERE=oreore-wp-lp
USERNAME_HERE=oreore-lp-user
PASSWORD_HERE=oreore-super-password

## ここより下は編集しなくていいです（バグってなければ）

cd wordpress

cp wp-config-sample.php wp-config.php
echo 変更前
cat wp-config.php | grep -E "DB_NAME|DB_USER|DB_PASSWORD"

perl -p -i.org -e "s/database_name_here/${DATABASE_NAME_HERE}/" wp-config.php
perl -p -i.org -e "s/username_here/${USERNAME_HERE}/" wp-config.php
perl -p -i.org -e "s/password_here/${PASSWORD_HERE}/" wp-config.php

echo 
echo 変更後
cat wp-config.php | grep -E "DB_NAME|DB_USER|DB_PASSWORD"

chown -R apache:apache ../wordpress
ls -l ../

mysql -uroot -e "create database ${DATABASE_NAME_HERE};"
mysql -uroot -e "grant all privileges on ${DATABASE_NAME_HERE}.* to ${USERNAME_HERE}@localhost identified by "\""${PASSWORD_HERE}"\"";"
```


ちなみに新規に構築したCentOSにWordpressをインストールするまでのスクリプトはこちら。

```bash:install-wp.sh
yum update -y
yum groupinstall -y "Development Tools"
yum -y install gcc make gcc-c++ kernel-devel-`uname -r` zlib-devel openssl-devel readline-devel sqlite-devel perl wget
yum -y install curl bind-utils file git mailx man ntp openssh-clients patch rsync screen sysstat dstat htop iotop traceroute vim-enhanced
yum -y install httpd mysql-server php php-mysql php-mbstring

cd /var/www/html
curl -LO http://ja.wordpress.org/latest-ja.tar.gz
tar xvzf latest-ja.tar.gz

```

こんだけ。楽ちん。
渋谷milkcocoaハッカソンを行いました

こんにちは！Technical Rockstarsの部谷[@syuhei_hiya](https://twitter.com/syuhei_hiya)です。先日主催したハッカソンのまとめです。
**東京都内でハッカソンや勉強会がありましたら、誘って下さい！よろしくお願いします。**

## 渋谷milkcocoaハッカソンを行いました。

http://connpass.com/event/8469/

初めて主催したハッカソンでしたが思った以上に濃いメンバーが集まり、また３時間という限られた時間の中で、全員がそれぞれひとつ発表できるものを作ることができました。主催者として、非常に嬉しかったです。

![10617332_621200904667751_2102488056_n.jpg](https://qiita-image-store.s3.amazonaws.com/0/54243/27345261-a7e7-2d11-7909-6ba3334dcd40.jpeg)

会場は新大宗ビル9Fです。 MOVIDA JAPAN様、East Ventures様ありがとうございました。




![shibuya_hackathon1.jpg](https://qiita-image-store.s3.amazonaws.com/0/54243/2358a031-c766-5025-8893-dd41b0dea750.jpeg)

最初に弊社CTOの[@nobkz](https://twitter.com/nobkz)が[milkcocoa](https://mlkcca.com)の説明を行いました。milkcocoaを使うと
**データの保存、同期やアカウントの新規登録、ログインを簡単に実現することができます。**

その後３時間、黙々と作業していただきました。途中フォローも入りましたが、おおむねみなさん自力で作っていました。

最後に発表会を行いました、これがとても面白かったです。全部は紹介しきれないので、いくつかピックアップしてご紹介します。


![10685286_621200328001142_1688065799_n.jpg](https://qiita-image-store.s3.amazonaws.com/0/54243/a69f5663-f5eb-63c5-c4e2-b7c0b6c611b2.jpeg)
これはお絵描きアプリです。描いた絵をmilkcocoaのデータストアに保存しています。




![DSC_0119.JPG](https://qiita-image-store.s3.amazonaws.com/0/54243/dd6b56fe-0e52-548f-e751-7943e5c11f14.jpeg)

http://agriscape.bitbucket.org
MMDを用いて、音楽に合わせて、画面の色をを変えることで、スマートフォンとのデータ通信にmilkcocoaを使われたそうです。上記のurlでテキストを送信すると初音ミク側に反映されます。この方は[Mashup Awards](http://mashupaward.jp/)で、milkcocoaを利用して頂いたそうです。ハッカソン終盤ぎりぎりで、来られて見せてくれました。ハッカソン三日前に作ったそうです。

---



**milkcocoaハッカソン**は、ただmilkcocoaの使い方を理解するハッカソンではありません。本来アプリ開発は時間がかかるものです。このハッカソンではmilkcocoaを用いてアプリ開発を高速にし、アイデアを簡単に実現することを体感していただきます。

![10711303_621200671334441_1545489057_n.jpg](https://qiita-image-store.s3.amazonaws.com/0/54243/48eba4ed-250e-72b3-910d-4af916764434.jpeg)





## 次は天王洲アイル

１０月４日に株式会社サムライインキュベートさんと、ハッカソンに近い勉強会を行います。この１日で何か作りたい！と思う方々、ぜひお越し下さい！

http://bd937566c2d179a9bc480c61b1.doorkeeper.jp/events/14805
明後日です！よろしくお願いします。
シェル上の文字列に色をつける（ピクセル画像も作る）(ANSI color code)

# 文字に色をつける

![Screenshot from 2014-09-16 16:15:26.png](https://qiita-image-store.s3.amazonaws.com/0/53766/f5cabf40-b46a-6218-3622-430a4f38184e.png)

ほとんどのシェルではシェル上で色をつけることを許容しているので、
ANSI escape codeという規格を通してやれば、様々な色の文字列を生成出来ます。
http://en.wikipedia.org/wiki/ANSI_escape_code

自分の環境でどのような色が使えるかは、

CentOS/RedHat系なら
`/etc/DIR_COLORS`
などを参照すればわかります。
http://www.atmarkit.co.jp/flinux/rensai/linuxtips/358dircolors.html

ちなみに僕の環境(CentOS)で`/etc/DIR_COLORS`は
![Screenshot from 2014-09-16 16:02:18.png](https://qiita-image-store.s3.amazonaws.com/0/53766/f2aaa734-d39a-21b1-123d-c861fc5d6184.png)
こんな感じでした。

読んでみると

```shell-session:/etc/DIR_COLORS
# Attribute codes:
# 00=none 01=bold 04=underscore 05=blink 07=reverse 08=concealed
# Text color codes:
# 30=black 31=red 32=green 33=yellow 34=blue 35=magenta 36=cyan 37=white
# Background color codes:
# 40=black 41=red 42=green 43=yellow 44=blue 45=magenta 46=cyan 47=white
```

とのこと、これら

 * Attribute codes,
 * Text color codes,
 * Background color codes,

を組み合わせて文字の色・背景・装飾をいじるみたいです。

`echo "\e"`もしくは`echo "\033"`
で生成するエスケープ文字を`(escape)`として(ブラウザで表示できない)

`(escape)[(上記の数字);(上記の数字)m (texts..)`
などという風に上記の`00~08`,`30~37`,`40~47`の数字を`;`で区切って`(escape)[`と`m`の間に挟めば
その地点より文字の表示の仕方が変更されます。
もとに戻すときは`(escape)[0m`とすれば十分です。

なお、属性はあとから上書きされていくため、![Screenshot from 2014-09-16 16:19:57.png](https://qiita-image-store.s3.amazonaws.com/0/53766/9fd6152c-ceda-e800-ffbc-053ec40450d6.png)
こんな風になります。

このサイトを参考にしました。
http://www.linuxquestions.org/questions/linux-software-2/adding-colors-to-your-motd-105038/


## シェル上で表示可能な画像
これを応用すると、ログイン時やプログラム実行時に使えるピクセル画像を作れます

シェルで表示させたとき
![Screenshot from 2014-09-16 15:46:14.png](https://qiita-image-store.s3.amazonaws.com/0/53766/827ee00f-22b2-22d0-4891-ffd82c9f6786.png)

テキストエディタで開いたとき
![Screenshot from 2014-09-16 15:53:21.png](https://qiita-image-store.s3.amazonaws.com/0/53766/858bda34-cc87-1421-cf67-d39f3cccc5ef.png)


```
AAABBCC
AABBBBD
AAADDDD

のような書き方から上のマリオの画像のようなものを生成
```
CentOS6.5 で tag vlan を設定する

# 概要
CentOS6.5 で tag vlan を設定したくなったので備忘録です

# 作業内容
* vconfig をインストールします

```
# yum install vconfig
```

* VLAN を有効化します

```/etc/sysconfig/network
# cat /etc/sysconfig/network
~略~
VLAN=yes
VLAN_NAME_TYPE=DEV_PLUS_VID_NO_PAD
```

* ここまでで一度反映しておく

```
# service network restart
```

上記の ```DEV_PLUS_VID_NO_PAD``` は VLAN 名の書式を定義している。下記に表を載せておきます。

| 設定内容 | 表記 |
| :-: | :-: |
| VLAN_PLUS_VID | vlan0010 |
| VLAN_PLUS_VID_NO_PAD | vlan10 |
| DEV_PLUS_VID | eth0.0010 |
| DEV_PLUS_VID_NO_PAD | eth0.10 |

個人的に ```DEV_PLUS_VID_NO_PAD``` に慣れ親しんでいるのでこれでいきます。

* vlan 1300 を追加したいので設定する

```
# vconfig add eth0 1300
Added VLAN with VID == 1300 to IF -:eth0:-
```

* 追加されたことを確認します

```
# cat /proc/net/vlan/config
VLAN Dev name    | VLAN ID
Name-Type: VLAN_NAME_TYPE_RAW_PLUS_VID_NO_PAD
eth0.1300     | 1300  | eth0
```

* VLAN1300 と紐付ける I/F を作成します

```
# cat /etc/sysconfig/network-scripts/ifcfg-eth0.1300
DEVICE="eth0.1300"
BOOTPROTO="static"
IPADDR="192.168.1.1"
IPV6INIT="no"
NETMASK="255.255.255.0"
ONBOOT="yes"
```

* 反映させます

```
# service network restart
```

# 最後に
スイッチ側にも VLAN1300 を作成してポート周りの設定を行った後 VLAN1300 に属しているホスト同士で通信できれば完了です。
Jruby HDFS API


Install
```$ gem install hdfs_jruby```

Set Env
```$ export HADOOP_HOME```

Example 

一覧取得

```test_ls.rb
require 'hdfs_jruby'

...

Hdfs.ls(path) do | stat |
  p stat
end
```

読み込み

```test_read.rb
require 'hdfs_jruby/file'

...
 
Hdfs::File.open(file, "r") do | io |
  while line = io.gets
    p line
  end
end

Hdfs::File.open(file, "r").each do | line |
  print line
end

```

書き込み

```test_write.rb
require 'hdfs_jruby/file'

...
 
Hdfs::File.open(file, "w") do |io|
  io.print "test\n"
end

```

その他

```test_etc.rb

# 存在するか？
Hdfs.exists?(file)

# ファイルかどうか？
Hdfs.file?(file)

# ディレクトリかどうか？
Hdfs.directory?(file)

```

参考

https://github.com/shinjiikeda/hdfs_jruby
http://rubydoc.info/gems/hdfs_jruby/0.0.7/frames
RDSインスタンスのユーザでTRIGGER作成・更新する方法

RDSのMySQLインスタンスは、RDSにて作成したユーザにSUPER権限は無いためエラーになります。


これを解決するためには、parameter groupの"log_bin_trust_function_creators"を"1"にすれば解決できます。

![parameter groupを変更します。](http://cdn-ak.f.st-hatena.com/images/fotolife/t/twinuma/20140916/20140916152130.png)

なお、この変更ではRDSの再起動は不要です。
Vim + Python 開発環境設定メモ


# Install パッケージ
Pythonのソースコードをキレイにメンテする時に役立つツール

```
$ sudo pip install flake8 pyflakes pep8 pylint jedi
$ sudo apt-get install vim-python-jedi
```

condaでやる場合

```
$ sudo conda install flake8 pyflakes pep8 pylint jedi
```

# NeoBundleの準備
Vimのプラグインの管理ツール

```
mkdir -p ~/.vim/bundle
git clone https://github.com/Shougo/neobundle.vim ~/.vim/bundle/neobundle.vim
```

vimrc に、NeoBundle の設定を記述する

```
vi ~/.vimrc
" bundleのディレクトリ指定
set runtimepath+=~/.vim/bundle/neobundle.vim/
" neobundleを読み込む
call neobundle#begin(expand('~/.vim/bundle/'))
" neobundle を管理
NeoBundleFetch 'Shougo/neobundle.vim'

" **** 導入するプラグイン ****
NeoBundle 'Flake8-vim'
NeoBundle 'davidhalter/jedi-vim'
NeoBundle 'hynek/vim-python-pep8-indent'
NeoBundle 'Townk/vim-autoclose'
NeoBundle 'scrooloose/syntastic'

" neobundle を閉じる
call neobundle#end()

" インストールするか自動でチェック
NeoBundleCheck
```

# PyFlakeの設定

```
"保存時に自動でチェック
let g:PyFlakeOnWrite = 1
let g:PyFlakeCheckers = 'pep8,mccabe,pyflakes'
let g:PyFlakeDefaultComplexity=10
```

# syntasticの設定

```
let g:syntastic_python_checkers = ['pyflakes', 'pep8']
```

# jediの確認

```
:h jedi
```

でヘルプが出たらOK
Git初心者のためのGit入門

私もGit初心者ですが、使いながら、ちょっとずつ書き溜めておいたものをとりあえず公開します。
これからも適宜変更していく予定です。

# Gitとは

Gitでは、ファイルの状態を好きなときに更新履歴として保存しておくことができます。そのため、一度編集したファイルを過去の状態に戻したり、編集箇所の差分を表示したりすることができます。

古いファイルを元に編集したファイルで、他人の編集した最新ファイルを上書きしようとすると、サーバにアップロードした際に警告が出ます。そのため、チームにて開発する際に非常に協力なツールとなります。

# Gitで使う用語

## リポジトリ

プログラムやファイルを蓄積しておく場所

### ローカルリポジトリ

現在作業中のリポジトリです。主に自分のPCや開発サーバーなどで作業する場合はローカルリポジトリとりなります。
また、リモートリポジトリからリポジトリをクローンして，自分のPC上やサーバー上に環境を構築することもできます。

### リモートリポジトリ

外部サーバのリポジトリです。リモートリポジトリはローカルリポジトリを通じて作業を行います。

## ワーキングツリー

実際に作業しているディレクトリのことです。

## インデックス

ワーキングツリーでの編集後、リポジトリへのコミットの前に次のコミットの対象となる状態を保持している場所です。

### ワーキングツリーとインデックス

Gitでは、コミットを実行した時にワークツリーから直接リポジトリ内に状態を記録するのでなく、その間に設けられているインデックスの設定された状態を記録するようになっています。
そのため、コミットでファイルの状態を記録するためには、まずインデックスにファイルを登録する必要があります。

使用例

```
git add .  // ワーキングツリーにて編集したディレクトリをインデックスに登録する
git commit  // 
```

## ブランチ
履歴の流れを分岐して記録していくものです。
分岐したブランチは他のブランチの影響を受けないため、同じリポジトリ中で複数の変更を同時に進めていくことができます。

### ローカルブランチ
ローカルリポジトリ内で管理されるブランチです。

### リモートブランチ
リモートリポジトリにあるブランチです。

### リモートトラッキングブランチ
リモートブランチをローカルリポジトリへトラッキング(追跡)するためのブランチです。

例

```
origin/master　// originにあるmasterブランチをトラッキングする
origin：リモートリポジトリ名
master：ブランチ名
```

## チェックアウト

リポジトリにあるブランチを，ワーキングツリーに展開することです。主にブランチを切り替える際などに利用します。
Gitでは，ブランチだけでなくタグや特定のコミット，リモートリポジトリのブランチなどもチェックアウトすることができます。

## コミット

インデックスに追加したファイルをリポジトリに登録します。その際には作業範囲や内容をメッセージとして追加します。

## プッシュ

ローカルリポジトリの変更履歴をリモートリポジトリに共有します。
プッシュを行うことで、リモートリポジトリに自分の変更履歴がアップロードされて、リモートリポジトリ内の変更履歴がローカルリポジトリの変更履歴と同じ状態になります。

## リビジョン

コミット毎に作成されるハッシュ値のことです。Gitではハッシュ値を使って世代管理を行っています。

## HEAD
現在チェックアウトしているブランチの最新コミットを指定する代名詞。

## FETCH_HEAD
最後に取得したリモートブランチの最新コミットを指定する代名詞。

## ORIG_HEAD
前のHEADの値を指定する代名詞。

## MERGE_HEAD
マージ中に生成され，ブランチにマージするコミットが記録されている代名詞。

# よく使うgitコマンド

|コマンド|内容|
|:---|:---|
|git init|リポジトリを作成する|
|git clone|既存のリポジトリの複製を作る|
|git status|変更の加えられたファイルを複製する|
|git diff|ファイルに加えられた変更点をdiff形式で表示する|
|git add |ファイルやディレクトリをインデックスに追加する<br>git add . (カレントディレクトリの指定)<br>git add --all (全てのファイルを指定)|
|git commit|インデックスに追加されたファイルをコミットする|
|git log|コミットログを見る|
|git reset|直前のコミットを取り消す<br>git reset --hard <ハッシュ値> //戻りたい時点のハッシュ値に戻す|
|git branch|ブランチ一覧を表示する。|
|git fetch|すべてのリモートブランチをコピーする|
|git merge (リモートリポジトリ名) / (ブランチ名)|指定したブランチを現在チェックアウトしているブランチにマージする|
|git mergetool|マージの際にコンフリクトしたファイルをマージするツール|
|git rm ファイル名|ファイルの削除<br> -r でディレクトリの削除<br> --chached でハードディスク上にはファイルを残し、ステージングエリアから除外|
|git remote|リモートリポジトリを表示|
|git reflog|コミットやmergeしたときのログを見る|
|git revert|作業ツリーを指定したコミット時点の状態にまで戻す|
|git config --help|ヘルプを見る|


# 本記事の参考サイト

参考にさせていただいたサイトを掲載しておきます。

[サルでもわかるGit入門 〜バージョン管理を使いこなそう〜 | どこでもプロジェクト管理バックログ](http://www.backlog.jp/git-guide/)
[Gitを使いこなすための20のコマンド | SourceForge.JP Magazine](http://sourceforge.jp/magazine/09/03/16/0831212)
[Gitチートシート - Qiita](http://qiita.com/ktaro/items/1d8c8ae698a88b1d6f0f)
[分散バージョン管理 Git 役立つコマンド一覧](http://uguisu.skr.jp/Windows/git.html)
[Gitコンフリクト解消ガイド（git mergetoolの使い方） - Qiita](http://qiita.com/yuya_presto/items/5d99499cf96c0ebb09f8)
[こわくない Git](http://www.slideshare.net/kotas/git-15276118?ref=http://morizyun.github.io/blog/how-to-git-review-book/)
Advanced Custom Fieldsを利用して写真をFBページにPOSTしたい

#### Advanced Custom Fieldsを利用して写真をFBページにPOSTしたい

## やりたいこと
以下のような投稿をAPI経由から行いたい。
![__2014-09-16_14-51-36_2014-09-16_14-51-51.jpg](https://qiita-image-store.s3.amazonaws.com/0/24590/83c11e6e-ea9b-9739-76ca-470bef0fc4d9.jpeg)


上記を実現するにあたり、Advanced Custom Fieldsの設定と、
Facebookページのアクセストークンを取得しておく必要がある。

#### Advanced Custom Field側
* 画像用カスタムフィールドの設定
* 概要用カスタムフィールドの設定  

カスタムフィールドを設定したら下記エリアに、
フィールドキーが表示されるのでメモしておいて下さい。
（表示オプションにチェックを入れないと表示されないです。）

![__Salon__WordPress_2014-09-16_14-54-26_2014-09-16_14-55-11.jpg](https://qiita-image-store.s3.amazonaws.com/0/24590/3f8afd29-8658-3292-bedd-a0ad59fee861.jpeg)


参考：http://klutche.org/archives/1395/

#### FB側の作業
* アクセストークンの取得  
参考：http://qiita.com/iwanomotoo/items/e4de999971fbf7231496

## 実装上のポイント
* **WP更新のタイミングを識別してPOSTを実行する。**
* **WP更新時にAdvance Custom Fieldの入力値をPOSTから抽出する。**

※Advance Custom Fieldの入力値をデータベースから取得する方法だと上手くいかなかったので、
今回はPOSTから抽出して実装しました。もっと調べたら他に方法があるのかも。。

以下をfunction.phpに記述。

````
/** Facebook Post API**/
/*
 * 記事のステータスが変更された段階で、投稿処理を実行する
 * */
add_action('transition_post_status', 'my_fb_function', 10, 3); 
function my_fb_function($new_status, $old_status, $post){

  /* Facebook API 初期化*/
  if($post->post_type == 'post' && $new_status == 'publish' && ($old_status == 'draft' || $old_status == 'pending' || $old_status == 'auto-draft' || $old_status ==  'private' || $old_status == 'future')){

    /* production server */
    $appId = 'アプリケーションID（App_ID）';
    $secret = 'アプリのシークレットキー（SECRET_KEY）';
    $id = 'FBページID（PAGE_ID）';
    $access_token = 'アクセストークン（ACCESS_TOKEN）';
    require_once 'src/facebook.php';
    $facebook = new facebook(array('appId' => $appId, 'secret' => $secret));
    $facebook->setfileuploadsupport(true);

    /* 投稿用オブジェクト取得 */ 
    $fb_image = $_POST['fields']['field_xxxxxxxxxxxxx'];//フィールドキーを入力
　  $fb_summary = $_POST['fields']['field_yyyyyyyyyyyyy'];//フィールドキーを入力
    $fb_summary = strip_tags($fb_summary);
    $fb_title = strip_tags($post->post_title);

　  /* 投稿処理 */
　  $message =  'タイトル：'.$fb_title. 
　      '概要：'.$fb_summary.
  　    'URL'. get_permalink($post->ID) ;

 　 // 画像取得    
 　 $thumbnail = wp_get_attachment_image_src($fb_image, 'full'); 
 　 $regex = '/^http(s)?:\/\/[^\/\s]+(.*)$/';
 　 $url;
 　 if ( preg_match( $regex, $thumbnail[0], $m ) ) {
  　  $url = $m[2];
  　}
  　$file_name =   $_SERVER['DOCUMENT_ROOT'] . $url;
  　$params = array( 
    　'access_token' => $access_token, 
    　'message' => $message, 
    　'image' =>'@' . $file_name 
  　);

  　// 投稿
  　$post = $facebook->api('/' . $id . '/photos/', 'post', $params);
　
  }else{
　
  　  return;
  }
}
````

無理やり感が否めない。もっと上手く実装できるはず。
Sublime Text 3 のプラグインメモ


## package control
view -> show console
で↓をコピペ
```
import urllib.request,os; pf = 'Package Control.sublime-package'; ipp = sublime.installed_packages_path(); urllib.request.install_opener( urllib.request.build_opener( urllib.request.ProxyHandler()) ); open(os.path.join(ipp, pf), 'wb').write(urllib.request.urlopen( 'http://sublime.wbond.net/' + pf.replace(' ','%20')).read())
```

## Alingnment
```:``` とか ```=``` とかの整列

## BracketHighlighter
```{}``` のハイライト

## Find++
検索の拡張

## FindKeyConflicts
キーマップのコンフリクト

## Git
Git

## GitGutter
リアルタイムに差分表示

## Keymaps
キーマップ一覧

## Local History
ローカルヒストリー

## SideBarEnhancements
サイドバー拡張

## Sublime Files
コマンドラインちっくにファイル開く

## SublimeLinter
linter

## Sublimerge 
マージ
Chromeにインストールしている拡張3


1は[こちら](http://qiita.com/koshihikari/items/2c8842ab02dbffdf9df5)
2は[こちら](http://qiita.com/koshihikari/items/9361b5e825cea2818764)
4は[こちら](http://qiita.com/koshihikari/items/1677a99cc6a29c73a66b)
5は[こちら](http://qiita.com/koshihikari/items/2a578bf662fc5fbf4d0f)



##Momentum
https://chrome.google.com/webstore/detail/momentum/laookkfknpbbblfpciffpaejjkokdgca

Chromeの新規タブを開いた時にいい感じの壁紙を表示してくれます。

簡単なタスク管理の機能もあるようですが、タスク管理としては使用せず、
新規タブを開いた時の気分転換のためだけに使用しています。

壁紙は1日毎に変わるので日めくりカレンダー間隔で使用しています。

##QR-Code Tag Extension
https://chrome.google.com/webstore/detail/qr-code-tag-extension/bcfddoencoiedfjgepnlhcpfikgaogdg

現在表示しているページのURLをQRコードにしてくれます。

似たような拡張は他にもありますが、この拡張ではQRコードを新規タブで開くのではなく
ポップアップで開くので気に入っています。

>※Macで開いているページをiPhoneで開く際に使用していましたが、
[こちら](http://qiita.com/koshihikari/items/2c8842ab02dbffdf9df5)のPushbulletを使用するようになってからは使用頻度がかなり減りました。

##SimpleExtManager
https://chrome.google.com/webstore/detail/simpleextmanager/kniehgiejgnnpgojkdhhjbgbllnfkfdk

インストールした拡張/アプリの一覧を表示し(無効な拡張含む)、
有効/無効の切換え、オプション画面の表示、削除を簡単に行えます。

Chrome標準の拡張管理よりも見やすいので重宝しています。

##ColorPick Eyedropper
https://chrome.google.com/webstore/detail/colorpick-eyedropper/ohcpnigalekghcmgcdcenkpelffpdolg

カラーピッカーです。

ページ内の写真からもカラーコードを抽出できます。
Chromeにインストールしている拡張2


1は[こちら](http://qiita.com/koshihikari/items/2c8842ab02dbffdf9df5)
3は[こちら](http://qiita.com/koshihikari/items/fb44c49d26d1f7af37e1)
4は[こちら](http://qiita.com/koshihikari/items/1677a99cc6a29c73a66b)
5は[こちら](http://qiita.com/koshihikari/items/2a578bf662fc5fbf4d0f)


##Copy Fixer
https://chrome.google.com/webstore/detail/copy-fixer/gkpoieconkiifjafemnnohlegmfpipaa

何も選択していない状態でCmd + CでページタイトルとURLをクリップボードのコピーしてくれます。

地味に便利。

##Adblock Plus
https://chrome.google.com/webstore/detail/adblock-plus/cfhdojbkjhnklbpkdaibdccddilifddb

ページ内の広告を非表示にしてくれる拡張です。

Firefoxをメインにしている頃から使用。

##Feedly Background Tab
https://chrome.google.com/webstore/detail/feedly-background-tab/gjlijkhcebalcchkhgaiflaooghmoegk

Feedlyの記事をバックグラウンドで開くために使用しています。

Feedlyの記事をn/pもしくは、j/kで移動し、
デフォルトでは;で	をの記事をバックグラウンドで開いてくれます。

>スターを付与/外した後はその記事を;で開くことができなくなるので、
スターを操作した後は一度他の記事にフォーカスを移し、
再度開きたい記事にフォーカスを合わせて;で開いています。

##Show Title Tag
https://chrome.google.com/webstore/detail/show-title-tag/pkbffbhglicfngmppdlpmpblfgnkdgio

Chromeではページのタイトルはタブに表示されますが、
長いタイトルや複数のタブを開いた場合はタイトルが読めなくなります。

この拡張をインストールすればページのタイトルをページ内の隅に表示することが出来ます。

表示位置は左上、右上、左下、右下に指定可能です。
Chromeにインストールしている拡張



2は[こちら](http://qiita.com/koshihikari/items/9361b5e825cea2818764)
3は[こちら](http://qiita.com/koshihikari/items/fb44c49d26d1f7af37e1)
4は[こちら](http://qiita.com/koshihikari/items/1677a99cc6a29c73a66b)
5は[こちら](http://qiita.com/koshihikari/items/2a578bf662fc5fbf4d0f)



##Pushbullet
https://chrome.google.com/webstore/detail/pushbullet/chlffgpmiacpedhhbkiomidkjlcfhogd

同じGoogleアカウントのPushbulletをインストールしたデバイス間でデータを送受信できます。

送受信したデータの履歴を全てのデバイスから閲覧/削除できるので重宝しています。

以下の組み合わせでデータを送受信できるのを確認済み。
>     PC/Mac -> iOS
>     PC/Mac -> Android
>     PC/Mac -> 異なるPC/Mac
>     iOS -> PC/Mac
>     Android -> PC/Mac
>     iOS -> Android
     ※PC/Mac -> 異なるPC/Macに送信する際は、送信したPC/Macにも通知が出る

送信できるデータは以下の5つです。
1.メモ
2.閲覧中のページのURL(受信したデバイスでクリッカブルなURLを送信)
3.ファイル
4.todo(受信したデバイスでcheckをつけることの出来るリスト形式のデータを送信)
5.住所(受信したデバイスでGoogleMapへのリンクを送信。日本語の施設/地名はGoogleMapでうまく表示されない。東京タワーではアメリカ大陸が表示されるだけだが、tokyo towerにすると東京タワーのGoogleMapが開く)


##Chrome to Mobile
https://chrome.google.com/webstore/detail/chrome-to-mobile/idknbmbdnapjicclomlijcgfpikmndhd/related

PC/Macで閲覧中のページをスマホに転送できます。

メモを送るならPushbulletですが、URLをChromeで開くならこっちの方が手間が少ないのでインストール。

##LastPass
https://chrome.google.com/webstore/detail/lastpass-free-password-ma/hdokiejnpimakedhajhdlcegeplioahd?hl=ja

ログインが必要なサイトのID/PWをクラウドに保存し、次回そのサイトにアクセスした際、
ID/PWが自動で入力されてます(自動ログインも設定可能)。
これ無しではwebサービスは利用できないくらい依存中。
ID/PW以外にクレジットカード番号/セキュリティコードや銀行口座番号、メモなども保存できます。

##ハングアウト
https://chrome.google.com/webstore/detail/hangouts/nckgahadagoaajjgafhacjanaoiihapd?hl=ja

Googleアカウントのユーザ間でメッセージをやりとりできます。

スタンプの使えないLineのようなものですが、複数デバイスにインストールできます。

複数デバイス間で送受信したメッセージが同期されるので、
電車の中ではiPhoneで使用、仕事中はMacで使用という風にシームレスに使えるので
Googleアカウントを持っている相手にはLineよりこちらをつかっています。

メッセージをMacのキーボードで書けるのは楽。
Macショートカット



備忘録です。

####再起動
---
>Command + Ctrl + 電源ボタン

####起動しているアプリケーションを強制終了する
---
>Command + Option + Escをクリックして起動中のアプリ一覧から
強制終了したいアプリを選択。

####Finderで任意のディレクトリを開く
---
>Shift + Command + g

####ゴミ箱を空にする
---
>FinderでCommand + Shift + delete

####スライドショー開始
---
>Finderでスライドショーに指定したいファイルを選択し、Command + Option + y

####画面全体のキャプチャを取る
---
>Command + Shift + 3

####画面の一部のキャプチャを取る(指定範囲のキャプチャ)
---
>Command + Shift + 4

####特定のウインドウのキャプチャを取る
---
>Command + Shift + 4を押して、Space

####ターミナル画面をリセットする
---
>Ctrl + L
もしくは、以下のコマンドを実行
clear

####ターミナルで実行中のプログラムを止める
---
>Ctrl + C
無期限 Facebookアクセストークンの取得方法

FBブームが過ぎ去りつつあるが、今後使うかもしれないのでメモ。

## 手順１. アクセストークンを取得するためのコード取得

まず、以下の情報を確認しておく

* アプリケーションID（App_ID）
* アプリのシークレットキー（SECRET_KEY）
* アプリケーションを運用しているサーバーURL （http://hogehoge.com/）

```
https://www.facebook.com/dialog/oauth?client_id=App_ID&redirect_uri=http://hogehoge.com/&scope=manage_pages,publish_actions,offline_access
```

上記のURLにアクセスするとコードを取得できる。
ここで取得できるコード（XXXX）は、アクセストークンを取得する際に使うのでメモ。

## 手順２. アクセストークン取得

```
https://graph.facebook.com/oauth/access_token?client_id=App_ID&redirect_uri=http://hogehoge.com/&client_secret=SECRET_KEY&code=XXXX
```

上記URLにアクセスすると「access_token=YYYY&expires=(数値)」というのが取れる。YYYYの部分をメモ。


## 手順3 . Facebookページとしてのアクセストークンを取得する。

```
https://graph.facebook.com/me/accounts?access_token=YYYY
```

先ほど取得したYYYYを上記URLに付与してアクセス。
自分の管理しているFBページが一覧で表示されるので、操作したいFBページのアクセストークンの箇所をメモする。



## 備考
[Facebook Debuger](https://developers.facebook.com/tools/debug)にアクセストークンを入力すると有効期限が確認出来る。

## 注意点
FBアカウントのパスワードを変更してしまうと、アクセストークンが切れてしまうことがある。

## 参考
[カンタロー CGI 自動投稿のためのFacebookアクセストークンを取得する](http://kantaro-cgi.com/blog/external-service/get_facebook_token.html)


以上。
Sublimetext2でのスニペットの登録の仕方


###1、SublimeText2を起動し、Tools -> New Snippet…で新規スニペットを開く。


###2、登録したいスニペットを記述する
下記、サンプル

```
<snippet>
     <!-- <content></content>に登録したいスニペットを記述する -->
     <content><![CDATA[
Hello, ${1:this} is a ${2:snippet}.
]]></content>
     <!-- <tabTrigger></tabTrigger>に記述された文字を入力し、Tabキーを押すとスニペットが展開される -->
     <tabTrigger>hello</tabTrigger>
     <!-- <scope></scope>にはこのスニペットを有効にする言語を指定する。空白だと全ての言語で有効。 -->
     <scope>source.js</scope>
</snippet>
```

\<content>\</content>内の${1:this}${2:snippet}は
スニペットを展開した際にカーソルが存在する位置を指定します。

カーソルの位置は$(数値:選択済みにする単語}で指定します。
>※選択済みにする単語はなくてもよい。
>その場合は選択済みではなく、カーソル位置になります。
>${1:}もしくは、${0}でスニペット展開後にカーソルをその位置に置きます。

\<scope>\</scope>はこのスニペットが有効になるモード。
何も指定しなければ、常に有効です。

特定のファイルでのみこのスニペットを有効にしたければ、
スニペットを有効にしたいファイルを開き、
Command + Option + pでSublimeText2の下部に現在のモードが表示されます。

※上記コードの場合、jsファイルでスニペットを展開した際、
thisという単語が選択済みになっていて、
次にTabキーを押すとsnippetという単語が選択されます。


###3、作成したスニペットに名前をつけて保存する
保存場所は下記の通り。

```
/Users/ユーザ名/Library/Application Support/Sublime Text 2/Packages/User
```

保存するファイルの拡張子に.sublime-snippetを付けてください。
※1スニペットファイルには、1スニペットを記述します。
config_h.SHが無く、perlのbuild失敗



# エラーメッセージ

```bash
./UU/extract: line 42: ./12:config_h.SH: No such file or directory
```

# 適用バージョン

* 5.16.2
* 5.21.2

では、事象を確認。
恐らく、バージョン関係なく発生するかと。

# 対策

原因は、よくわからないんだけれど…`GREP_OPTIONS`が影響しているよう。

```bash:エラーが出る
export GREP_OPTIONS="--color=auto -n"
```

```bash:エラーが出ない
export GREP_OPTIONS="--binary-files=without-match --color=auto"
```

エラーが出ないとしているけれども、これでもダメな環境があるかもしれない。
buildする時は、いっそ`GREP_OPTIONS=""`的に空にしちゃうといいかもしれない。

# おまけ:エラー周りひと通り

```bash
What extensions do you wish to load dynamically?
[B Compress/Raw/Bzip2 Compress/Raw/Zlib Cwd DB_File Data/Dumper Devel/PPPort Devel/Peek Digest/MD5 Digest/SHA Encode Fcntl File/Glob Filter/Util/Call GDBM_File Hash/Util Hash/Util/FieldHash I18N/Langinfo IO IPC/SysV List/Util MIME/Base64 Math/BigInt/FastCalc NDBM_File Opcode POSIX PerlIO/encoding PerlIO/mmap PerlIO/scalar PerlIO/via SDBM_File Socket Storable Sys/Hostname Sys/Syslog Text/Soundex Tie/Hash/NamedCapture Time/HiRes Time/Piece Unicode/Collate Unicode/Normalize XS/APItest XS/Typemap arybase attributes mro re threads threads/shared]  
What extensions do you wish to load statically? [none]  
 
 
End of configuration questions.
 
 
Stripping down executable paths...
 
Creating config.sh...
Hmm...You had some extra variables I don't know about...I'll try to keep 'em...
    Propagating recommended variable $LANG...
    Propagating recommended variable $LC_ALL...
    Propagating recommended variable $malloc_cflags...
    Propagating recommended variable $perl_revision...
    Propagating recommended variable $perl_subversion...
    Propagating recommended variable $perl_version...
 
Doing variable substitutions on .SH files...
./UU/extract: line 42: ./12:config_h.SH: No such file or directory
Installation failure: sh Configure -Dprefix=/Users/rozary/.plenv/versions/5.16.2 -de -Dusedevel -A'eval:scriptdir=/Users/rozary/.plenv/versions/5.16.2/bin' at /Users/rozary/.plenv/plugins/perl-build/bin/../lib//Perl/Build.pm line 350.
ABORT
```
Android端末でopenFileOutputで作成したファイルの確認

AndroidアプリでPDFを作成して保存するという処理を書いた時に確認する方法を調査したのでメモ。

## 使用ツール　adb shell
Android実機を接続して

```
SDKパス/platform-tools/
./adb shell
```

実行できたら

```
run-as アプリのパッケージ名
```

/data/data/パッケージ名がカレントディレクトリになります。

あとは```file/```をご確認ください。

ちなみに```run-as```をやらないとパーミッションの問題でエラーでます。

## 参考サイト

Android実機で/data以下のファイルを確認する openFileOutputでファイル作成したらこの方法でチェックしよう | サクッとJava研修室
http://saku-java.be-ourselves.jp/2014/05/13/android-openfileoutput-file-check/
php-buildが動かなくなったので対応メモ


概要
---
phpenvとphp-buildを使ってphpのバージョン管理をしている環境を想定。手元のPHPのバージョンを5.3から5.4に上げようと思ってphp-buildしようかと思ったら以下のようにエラー詳細が何も出ず困ったので対応メモ。

```bash
-----------------
|  BUILD ERROR  |
-----------------

Here are the last 10 lines from the log:

-----------------------------------------
-----------------------------------------
```

対応
---

### 1. brewパッケージの更新

php-buildのバージョンアップをします。
現時点では *v0.10.0* が最新のようです。

```bash
$ brew update && brew upgrade
```

### 2. tar.bz2 をダウンロード
この段階でphp-buildすると以下のようなエラーとなります。
（エラー詳細が出てくれるようになりました。）

```bash
-----------------
|  BUILD ERROR  |
-----------------

Here are the last 10 lines from the log:

-----------------------------------------
curl: (22) The requested URL returned error: 404
-----------------------------------------
```

phpのtarballをダウンロードする時点でこけてしまうのであらかじめダウンロードして処理をスキップさせます。
http://php.net/releases/ から好きなバージョンのtarballをダウンロードしてきます。

### 3. tarballをphp-build用のディレクトリにコピー

```bash
$ cp ~/Downloads/php-5.4.16.tar.bz2 /var/tmp/php-build/packages
```

### 4. libzが見つからないので対応

3.までの手順を終わらせて再度php-buildしようとすると以下のエラーが出ました。

```bash
Here are the last 10 lines from the log:

-----------------------------------------
rm: conftest.dSYM: is a directory
configure: error: Cannot find libz
-----------------------------------------
```

[こちらの記事](http://box406.hatenablog.com/entry/2013/12/13/122215) を参考に対応

```bash
$ xcode-select --install
```

ポップアップが出てくるので同意してインストールします。

### 5. 準備完了

再度コマンド実行してインストールできることを確認！

```bash
$ php-build 5.4.16 ~/.phpenv/versions/5.4.16
```

参考
---
- http://qiita.com/hokutoasari/items/734dce029373ff92fdce#2-2
- http://box406.hatenablog.com/entry/2013/12/13/122215
日本語クラスを作る

変数などに日本語や絵文字が使えると書いてあるから、クラスにも使えるんじゃないかと試してみる。

##コード
```swift:class.swift
class 数学 {
    class func 乱数() -> UInt32 {
        return arc4random()
    }
}

数学.乱数() % 4 //0～3の値
```
##結論
おもしろい。

##参考
- [Swiftでクラスメソッド](http://qiita.com/econa77/items/5f9f079953e331207886)
- [[Swift] 乱数取得でキャストにハマったのでメモ(arc4random)](http://qiita.com/m-tsuchiya/items/37c0c1b52f0dd70e190d)
NERD Treeのよく使うショートカットキー

自分用のチートシートとして書き残しておく。

o ディレクトリを展開 or ファイルを開く
t ファイルを新しいタブで開く
u 親ディレクトリをカレントに指定
C 指定ディレクトリをカレントディレクトリに指定
F ディレクトリのみ表示
I 隠しファイルの表示を切り替え
q NERDTreeを閉じる

P カーソルをルートディレクトリの場所へ移動。
p カーソルを一つ上の親ディレクトリに移動。
K カーソルを最初の子ノードに移動 最初の子へ。
J カーソルを最後の子ノードに移動 最後の子へ。 
メニュー

m メニューを開く
（メニューはどうやって閉じるんだろう？いまはEnterキーを２回で閉じている。）
メニュー操作
a 新しいファイル、新しいディレクトリを作る。
 ファイル名が「/」で終わる場合はディレクトリが作成される。
 m ファイル、ディレクトリを移動する。
 d ファイル、ディレクトリを削除する。
 c  ファイル、ディレクトリをコピーする。
 g grepを実行（grep用のプラグインをインストール済み）