OmniAICreator/Qiita-1.07M huggingface dataset:
NeoBundle+localrcでプロジェクト固有のプラグインを遅延読み込み

[tpope/vim-rails](https://github.com/tpope/vim-rails)のように、プロジェクトに応じて読み込むかを変えたいプラグインが存在する。Djangoプロジェクトでvim-railsを読み込んでも無意味だからだ。

それをNeoBundle+localrcで実現する

# NeoBundleLazyの復習

[Shougo/neobundle.vim](https://github.com/Shougo/neobundle.vim)の`:NeoBundleLazy`を使うと、特定のfiletypeのバッファを開いた時にだけプラグインを読み込むことが簡単にできる。これによって不必要なプラグインを読み込まずに済むようになるのでvimの高速化が期待できる。

例えば次のように書けばcoffeescriptのファイルを開いたタイミングで[kchmck/vim-coffee-script](https://github.com/kchmck/vim-coffee-script)を読み込む。

```vim:.vimrc
NeoBundleLazy 'kchmck/vim-coffee-script', {'autoload': {'filetypes': ['coffee']}}
```

# プロジェクト固有プラグインを遅延読み込み

同様のことをvim-railsで行いたいがfiletypeと結びつけるのは不適切だ。[thinca/vim-localrc](https://github.com/thinca/vim-localrc)を使い、Railsプロジェクト内でvimを開いたときは自動的にvim-railsを読み込むようにする。

まず忘れずにvim-railsを`:NeoBundleLazy`する。

```vim:.vimrc
NeoBundleLazy 'tpope/vim-rails'
```

そしてRailsディレクトリに.local.vimrcファイルを設置して、その中で`:NeoBundleSource`を実行する。引数がNeoBundleLazyと若干異なることに注意。

```vim:path/to/your/rails/project/.local.vimrc
NeoBundleSource vim-rails
```
ESLPodcast 13 - Dining at a Restaurant II (Fast) 

* to die for : great, it's the best.
* I passed~ : refuse
* vibe: moods,
* laid back : to be relax.  <=> uptight : to be concern over
* ritzier : expensive
* wait staff: waiter : 礼儀正しく思いやりのある
* snooty : 俗物的な，気取った
* gobble down my food :eat it too quickly,
* split the bill  :割り勘 = go Dutch
* be accustomed to do : 〜慣れている

I love coming to this Italian restaurant. 

The appetizers and desserts are to die for.

When the waiter came to our table to take our order, my friend ordered a lobster ravioli dish, and I ordered my favorite, lasagna. 

The waiter then asked us, "Would you like a soup or salad with that?" My friend said yes; I passed on both.

  The vibe in the restaurant is pretty laid back, not at all uptight like you find in some of the ritzier restaurants in Beverly Hills. 

The wait staff is courteous, although sometimes the hostesses can be a bit snooty . 

 Anyway, when our meals arrived, everything was cooked to perfection. 

Since I didn't order any appetizers, soup, or salad, I was starved. 

Even though I was really hungry, I tried not to gobble down my food too quickly. 

I didn't want my friend to think I was a pig! 

But even though I tried not to, I still overate. 

When the waiter asked if we wanted any dessert or after dinner drinks, I just couldn't resist getting the apple-filled crepes. 

They are the best.

  When we got our check, my friend and I split the bill, as we're accustomed to do. 

I frankly prefer to go Dutch when I eat out with friends. 

So that was the end of a really great meal. 

Now I have to hit the gym if I'm going to lose any of this extra weight I gained from eating that lasagna!
ESLPodcast 13 - Dining at a Restaurant II (Fast) 

* to die for : great, it's the best.
* I passed~ : refuse


I love coming to this Italian restaurant. 

The appetizers and desserts are to die for.

When the waiter came to our table to take our order, my friend ordered a lobster ravioli dish, and I ordered my favorite, lasagna. 

The waiter then asked us, "Would you like a soup or salad with that?" My friend said yes; I passed on both.

  The vibe in the restaurant is pretty laid back, not at all uptight like you find in some of the ritzier restaurants in Beverly Hills. 

The wait staff is courteous, although sometimes the hostesses can be a bit snooty . 

 Anyway, when our meals arrived, everything was cooked to perfection. 

Since I didn't order any appetizers, soup, or salad, I was starved. 

Even though I was really hungry, I tried not to gobble down my food too quickly. 

I didn't want my friend to think I was a pig! 

But even though I tried not to, I still overate. 

When the waiter asked if we wanted any dessert or after dinner drinks, I just couldn't resist getting the apple-filled crepes. 

They are the best.

  When we got our check, my friend and I split the bill, as we're accustomed to do. 

I frankly prefer to go Dutch when I eat out with friends. 

So that was the end of a really great meal. 

Now I have to hit the gym if I'm going to lose any of this extra weight I gained from eating that lasagna!   Script by Dr. Jeff McQuillan
RubyでBase64URLエンコーディング


Base64は`A–Z`, `a–z`, `0–9`, `+`, `/`の64文字を使って文字列をエンコードする方式で、`+`と`/`がURLパラメータとして使うにはふさわしくないので、それを`-`と`_`に置き換えたものをBase64URLエンコーディングと言います。

参考：http://ja.wikipedia.org/wiki/Base64

この方式でエンコード/デコードするには、Base64クラスの`urlsafe_encode64`と`urlsafe_decode64`を使えば出来ます。

```ruby:encode_decode.rb
require "base64"

basic_enc   = Base64.encode64('ab?cd~')         # => "YWI/Y2R+ZQ==\n"
original = Base64.decode64(basic_enc)           # => "ab?cd~e"

urlsafe_enc = Base64.urlsafe_encode64('ab?cd~') # => "YWI_Y2R-ZQ=="
original = Base64.urlsafe_decode64(urlsafe_enc) # => "ab?cd~e"
```

http://ruby-doc.org/stdlib-1.9.3/libdoc/base64/rdoc/Base64.html


## おまけ：パディングの'='をなくして、少し短くする

base64エンコードは4文字区切りなので、エンコード結果が4の倍数にならなかったときはパディングと言って'='が入ります。
これは別に削除してしまってもデコード時に4の倍数になるように'='を追加してあげられるので


```ruby:base64.rb
module Base64
  def self.short_urlsafe_encode64(str)
    urlsafe_encode64(str).delete('=')
  end

  def self.short_urlsafe_decode64(str)
    urlsafe_decode64(str + '=' * (-1 * str.size & 3))
  end
end
```

```ruby:encode_decode.rb
enc = Base64.short_urlsafe_encode64('ab?bc~e')  # => "YWI_YmN-ZQ"
original = Base64.short_urlsafe_decode64(enc)   # => "ab?cd~e"
```

のような関数を作り、使うことができます。
tcpdump の便利なオプション

### `-A`
パケットの内容を ASCII で表示する。HTTP とか SMTP とかのキャプチャに便利。

    tcpdump -A port 80

---
### `-X`  
パケットの内容を 16進とASCIIで表示する。あまり使わない。

    tcpdump -X port 80

---
### `-i interface`
インタフェースを指定する。２枚刺しやブリッジとかしている場合は必須。

    tcpdump -i eth1 port 80

未指定ならループバックを除いた一番最初のインタフェースのみ。any を指定するとすべてのインタフェース。

    tcpdump -i any port 80

---
### `-nn`
ホスト名やポート番号をそのまま表示する。80 を http とか表示されても逆に判りにくいし。

    tcpdump -nn port 80

53 ポートをキャプチャする場合はこれ（または `-n`）を指定しておかないと tcpdump による PTR レコードの検索まで tcpdump で拾ってしまいかなりうざいです。

---
### `-p`
プロミスキャスモードにしない。

    tcpdump -p port 80

messages とかに `kernel: device eth0 entered promiscuous mode` のようなログが残らなくなります。その代わりそのホスト宛てのパケットしかキャプチャされません。

カーネルログが監視されててもこっそりキャプチャ出来ます。

---
### `-w file`
キャプチャ結果をファイルに出力する。出力されたファイルは Wireshark で開けます。

    tcpdump -w a.cap port 80

---
### `-r file`
`-w` で出力したキャプチャ結果を読み込んで表示する。
とりあえずキャプっといて後で詳細な条件を指定して抽出とかできる。

    tcpdump -r a.cap host 192.0.2.123

---
### `-s size`
キャプチャのバッファサイズを指定する。

    tcpdump -w a.cap -s 65535 port 80

デフォルトだと 96 バイトのため `-A` や `-X` や `-w` でも先頭の 96 バイトしかキャプチャされません（CentOS 5 では）。適当に大きなサイズにしておくと良いです。CentOS 6 だとデフォルトで 65535 のようです。

大きくしすぎるとパケットを取りこぼす可能性が高まるようです。
ShellScript で try-throw-catch-finally

## 追記

全世界に\<del\>もしかしたら恥を\</del\>知らしめるためにも [GitHub に上げました](https://github.com/kaosf/shellscript-try-catch-finally)．

```sh
git clone https://github.com/kaosf/shellscript-try-catch-finally
cd shellscript-try-catch-finally
```

で即座に試せます．

----

何もこんなことしなくても…　とも思いますが．

```sh:run.sh
#! /bin/sh

finally() {
  RET=$?
  echo "return code: $RET"
  if [ $RET -ne 0 ]; then
                              #
    echo "ERROR!"             # here is 'catch' block
                              #
  else
    echo "no error (OK!)"
  fi
                              #
  echo "final process"        # here is 'finally' block
                              #
  exit $RET
}
set -e
trap finally EXIT
                              #
./a.sh                        # here is 'try' block
./b.sh                        # exit 1, exit 2, ... mean 'throw'
./c.sh                        #
```

```sh:a.sh
#! /bin/sh
echo 'a'
exit 0
```

```sh:b.sh
#! /bin/sh
echo 'b'
exit 1
```

```sh:c.sh
#! /bin/sh
echo 'c'
exit 0
```

`./run.sh` で走らせてみると…

```text
a
b
return code: 1
ERROR!
final process
```

`echo $?` で終了コードを確かめてみると…

```text
1
```

`b.sh` の `exit 1` を `exit 0` とか `exit 2` とかに変えて試してみて下さい．

と言うより，そもそももっといい方法無いですか？Perl 使えとか Python 使えとかは無しでオネシャス (‘o‘)ノ

## 参考サイト

* [シェルスクリプト入門 [変数]](http://www.k4.dion.ne.jp/~mms/unix/shellscript/shell_para.html)
* [suz-lab - blog: シェルスクリプトで例外処理(try-catch文)的なもの](http://blog.suz-lab.com/2012/09/try-catch.html)
* [シェルスクリプトでシグナルハンドラを書く - IT 東京 楽しいと思うこと](http://d.hatena.ne.jp/mikeda/20090307/1236440209)
windows版 SourceTreeでsshを利用してGitHubにpushとかpullとかする方法

###前提
* GitHubのアカウントおよびリポジトリを持っている
* そのアカウントに公開鍵を追加できる([google検索結果](https://www.google.co.jp/webhp?sourceid=chrome-instant&ion=1&ie=UTF-8#hl=ja&gs_rn=7&gs_ri=psy-ab&tok=6SH2tSxR1XCpcEG-jp2tkg&cp=13&gs_id=p8&xhr=t&q=github+%E5%85%AC%E9%96%8B%E9%8D%B5+%E8%BF%BD%E5%8A%A0&es_nrs=true&pf=p&sclient=psy-ab&oq=github+%E5%85%AC%E9%96%8B%E9%8D%B5%E3%80%80%E8%BF%BD%E5%8A%A0&gs_l=&pbx=1&bav=on.2,or.r_cp.r_qf.&bvm=bv.44442042,d.dGI&fp=899a520736c209d4&ion=1&biw=1787&bih=1124&bs=1))

##SourceTree上からGUIでキーペアを作成する
* SourceTreeで、tools > create or import ssh keys をクリック
* 下の方にある `Parameters` をみて、 `SSH-2 RSA` `1024` であることを確認する
* generate をクリック。その後マウスを適当に動かしてプログレスバーを最後まで進める
* 右側の `Save private key` を押して作成された秘密鍵を保存する
* 左側の `Save public key` は **押さずに**、`Public key for pasting in to OpenSSH authorized_keys file:`の下のwindowに書かれている公開鍵の情報をコピる (`ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAA...` こんなやつ)
* githubのアカウントにその公開鍵を登録する

##GitHubからリポジトリをクローン
#### SourceTree上で、GitHubのリポジトリをクローンする
* SouceTreeで、`Clone / New`ボタンをクリック
* Source Path / URL に`Read+Write access`ができるパスを入力する。`git@github.com:hoge/fuga.git`みたいなやつ。（githubのリポジトリのクローンURLを選ぶ部分で`ssh`を選ぶとでてくる）
* パス入力後、`Clone`ボタンを押すと、`Launch SSH Agent?`ときかれるので、`Yes`
* 秘密鍵の場所を聞かれるので、`Save private key`で保存した秘密鍵を選択する
* `Click Retry When Ready` ときかれるので、`Retry`
* GitHub上のリポジトリがクローンされる

これでOK!

---

**下記、複数のキーを利用したアクセスの方法について大幅に修正しました。以前の方法ではうまくうごかないことがわかりました。すいません＞＜ 2013/4/2**

##現在、微妙な解決しかできていない問題について
####異なる秘密鍵を利用したい場合の方法
pageantの`view keys`で一番上にあるキーがSourceTreeによって利用されるので、Remove Key,Add keyを利用して、利用したい秘密鍵が一番上に来るように毎回調整してから、pushやpullなどを実行する

非常に面倒ですが、多分SourceTreeのバージョンが上がれば対応してくれるだろうと思われることなので、僕はしばらく一つの秘密鍵だけで生きていこうと思います。
コマンドラインで XLSX を CSV に変換する

Excel があれば「名前を付けて保存」で CSV 形式を選択すれば普通に CSV 形式で保存できるが、引用符の設定が出来ないなど出力に制限がある。なのでコマンドラインで変換したい、かつカスタムしたいという条件を満たすにはどうするか？ [xlsx2csv](https://github.com/dilshod/xlsx2csv) を使おう。

https://github.com/dilshod/xlsx2csv

使い方は README にある通り python を入れて xlsx2csv.py を 実行すれば良いが、引用符が基本的にない状態で出力されてしまう。どうすればよいか？

114 行目が *csv.QUOTE_MINIMAL* でハードコードされている。

```python
    writer = csv.writer(outfile, quoting=csv.QUOTE_MINIMAL, delimiter=delimiter)
```

これを *csv.QUOTE_ALL* に変えればすべてのフィールドが引用符ありで出力される。これ以外のオプションについての説明は [csv モジュールの説明](http://docs.python.jp/2/library/csv.html#csv.QUOTE_ALL) に投げることにする。

```python
    writer = csv.writer(outfile, quoting=csv.QUOTE_ALL, delimiter=delimiter)
```

似たような記事がないか探したけどなかったので書き起こしました。
csvファイルからhtmlの表を作る

仕事で自動テストを利用しているのですが、結果が見にくかったので、シェルでhtml化する方法を調べてみました。テストの実行結果などが記載されているcsvファイルはあるとして、そのファイルを入力してhtmlの表を作る方法です。

下記のようなcsvファイルがあったとします。

```
項番,シナリオ名,テスト結果
1,test_1, OK
2,test_2, OK
3,test_3, NG
4,test_4, OK
```

下記スクリプトは、↑のようなcsvファイルを入力としてhtmlの表を出力します。
引数で指定されたcsvファイルの内容をhtml_bodyパラメータに設定して、cat以降でindex.htmlファイルへ出力しています。

```sh:sample.sh
#!/bin/sh

html_body="<table border=1>"
while read line; do
	str="<tr>"
	IFS=','
	set -- $line
	for col do
		str="${str}<td>$col</td>"
	done
	str="${str}</tr>"
	html_body="${html_body}${str}"
done < "$1"
html_body="${html_body}</table>"

cat << EOF > ./index.html
<!DOCTYPE html>
<html>
<head><meta charset="UTF-8" /></head>
<body>
	$html_body
</body>
</html>
EOF
```

こんな感じのスクリプトを作っておくと、自動テストとかの結果も見やすくていいです。
CCSpriteBatchNodeのzOrder

CCSpriteBatchNodeは、1枚のテクスチャを使って
沢山のNodeを表示してもドローコールを抑えてくれる便利なクラスだけど、
一枚のテクスチャにしか対応していないため、
複数を使う場合、それぞれのBatchNodeにaddChildしたNodeのzOrderの値は反映できない。

例えば、各キャラクタごとにBatchNodeを設定して
いっぱい表示しても、同じ表示位置になる。
（Aのキャラの後ろにBのキャラ、その後ろにまたAのキャラみたいな感じは出来ないっぽい

それぞれのBatchNodeごとの表示順は反映してくれそうだけど・・・
なんかいい方法が無いものか。
（レンダリング順序、透明性、ピクセル深度この辺も使えないのか
http://www.cocos2d-iphone.org/forum/topic/16895
Windows8で既定のブラウザを IE以外にすると メトロ版IE10が消える


以下に怪奇現象のレポートがある


[Win8CP] 既定のブラウザを IE 以外に設定すると Windows 8 アプリの IE が使えなくなってしまう - マイクロソフト コミュニティ
http://answers.microsoft.com/ja-jp/ie/forum/ie10_cp-windows_cp/win8cp/99b04cb5-19d8-40ec-b91b-560f5f68651c
不要なgitのtagをまとめて削除する

別にgitに限った話じゃなくて、linuxでまとめて処理を実行するというだけ。

### 何かよくわからないtagが大量に湧いたとき

例えば、「v2.*.*」みたいなバージョン番号のtagが大量に出現してしまったとする。
これをまとめて消すには以下のようにする。

```
$ git tag | grep '^v2.*' | xargs -I % git tag -d %
```

git tagのリストをgrepで抽出し、xargsを使って次に繋がるコマンドを連続で実行する。
という意味だと思う。

実際に使ってみたら、あっという間にゴミが消えて、ちょっと感動した。
selfが特定の値の時だけ置き換えるメソッド

```ruby
class Object
  def kick(a, r=nil)
    if self == a
      if block_given?
        yield
      else
        r
      end
    else
      self
    end
  end
end
```

んで

```ruby
  p a.kick(3, nil)
```

とするとaが３の時だけnilを、それ以外のときはそれを表示します。

こんなメソッド定義してみたけど、すでに存在する？
APNSで通知が飛ばない場合に考えられる問題

APNS(Apple Push Notification Service)を使ってプッシュ通知がうまく送信できないとき、エラーをみても情報が少なく解決するのに頭を悩ませることが多々あるかと思います。
その際に、陥りやすいミスを列挙しました。送信できない場合は以下の点をチェックしてみてください。

## 1.証明書は正確に生成できているか
APNS用の証明書を作る際、コマンドラインで複数のコマンドを実行することによって証明書を生成するため、間違ったコマンドを入力していると正しい証明書が生成されません。
筆者は以下のコマンドで生成されることを確認していますので、記載しておきます。aps_production_ck.pemがAPNSでプッシュ通知を送る際に必要な証明書です。(productionは本番環境/developmentはテスト環境)

 - aps_production_identity.cert ... iOS Dev Centerからダウンロードした証明書
 - aps_production_key.p12 ... aps_production_identityをインストールしてキーチェーンストアから書きだした鍵

```
openssl x509 -in aps_production_identity.cer -inform der -out aps_production_cert.pem
openssl pkcs12 -nocerts -out aps_production_key.pem -in aps_production_key.p12
cat aps_production_cert.pem aps_production_key.pem > aps_production_ck.pem
```

証明書を生成するスクリプトを公開しました。
http://qiita.com/0x0c@github/items/0514e8b11f84fc0fde36
証明書を生成するアプリを公開しました。
https://itunes.apple.com/jp/app/pempem/id876280659?mt=12

## 2.証明書のパスワードは間違っていないか
これはサーバサイドでの話です。
証明書のパスワードが間違っている場合、送信ができませんのでパスワードをチェックしましょう。

## 3.(Development環境の時)ProductionがEnabledになっていないか
iOS Dev CenterのApp IDs画面からプッシュ通知を送ろうとしているアプリの状況を確認しましょう。Push Notificationの欄でProduction(本番環境)がEnabledになっている場合、Development(開発環境)の証明書を使ってもプッシュ通知を送ることができません。

## 4.Provisioning fileを最新版にする
iOS Dev CenterのApp IDsからPush NotificationをEnabledにしたあと、ローカルに保存されているProvisioning fileを最新版にしないと、アプリ側でプッシュ通知がONになりません。XcodeのWindow->OrganizerからProvisioning fileをRefreshしてください。
もしくは、ダウンロードしなおしてインストールし直してください。

## 5.AdHocで配信しているアプリはPush通知を受信しない
AdHocのProvisioning fileはDevelopment向けではないため、AdHocで配信しているアプリはPush通知を受診することができません。
なので、実機転送したアプリ出ないとPush通知のテストはできません。
TestFlightを使ってアプリを配信していると、陥る罠だと思います。
**プッシュ通知を送る際の証明書はProductionのものを使うと動く可能性があるようです。こちらの環境では確認できていません。**

## 6.Device Tokenの取得方法が間違っている
iOS8からDevice Tokenの取得の方法が変わりました。
そのため、iOS7で動いていたコードでもiOS8では正しく動作しません。
新しいDevice Tokenの取得方法にコードを書き直す必要があります。
その際、iOS8とそれ以前とで条件分岐する必要があります。

Device Tokenを取得するライブラリを書きましたのでご活用ください。
https://github.com/0x0c/M2DPushNotificationManager

## 7.Device Tokenが混ざっていると飛ばない
Development環境のtokenとProduction環境のtokenを混ぜて送信すると動かないようです。
環境を切り替える際はテーブルをトランケートするか、別々のテーブルを使用したほうが良さそうです。
(@hodadeさんより)

## 8.大量に送信するとTCPコネクションが切断される
プッシュ通知を大量に送るとAppleのサーバがTCPコネクションを切断してくるため、再送制御が必要になります。

## 9.証明書が失効していないか？
受託や他社との共同プロジェクトの場合、Developerアカウントへのアクセス権限がないことがあるかと思います。
その際、証明書の失効期限を確認する手段が限られ、気がついたら失効していた！なんてことが発生することがあります。

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

間違っている情報があったら指摘していただけると幸いですm(_ _)m
UIButton をグラデーションにする


UIButton をグラデーションにする方法はググると色々あるし、[NVUIGradientButton](https://github.com/nverinaud/NVUIGradientButton) とかのライブラリもあるんだけど、単純に背景をグラデーションにしたいだけの場合色々やる必要は無かったのでメモ的に。


```objective-c:IKGrayButton.h
//
//  IKGrayButton.h
//  Ikuzo
//
//  Created by Haruyuki Seki on 3/28/13.
//

#import <UIKit/UIKit.h>

@interface IKGrayButton : UIButton

@end
```

```:objective-c:IKGrayButton.m
//
//  IKGrayButton.m
//  Ikuzo
//
//  Created by Haruyuki Seki on 3/28/13.
//

#import "IKGrayButton.h"
#import "UIColor+Utilities.h"
#import <QuartzCore/QuartzCore.h>

@implementation IKGrayButton

- (id)initWithCoder:(NSCoder *)aDecoder
{
    self = [super initWithCoder:aDecoder];
    [self setTitleColor:[UIColor hexToUIColor:@"666666" alpha:1.0f] forState:UIControlStateNormal];
    CAGradientLayer *gradient = [CAGradientLayer layer];
    gradient.frame = self.bounds;
    gradient.colors = @[
                        (id)[[UIColor hexToUIColor: @"fdfbf3" alpha: 1.0] CGColor],
                        (id)[[UIColor hexToUIColor: @"d7d6d1" alpha: 1.0] CGColor]
                        ];
    gradient.cornerRadius = 3;
    gradient.borderColor =[[UIColor hexToUIColor:@"cccccc" alpha:1.0] CGColor];
    gradient.borderWidth = 1.0f;
    [self.layer insertSublayer: gradient atIndex: 0];

    return self;
}

@end
```

上記は、Storyboard 上でボタンを配置した場合のコード。Storyboard で配置したボタンのクラス指定を、上の IKGrayButton にすると以下のようなグラデーションになります。

![button](https://dl.dropbox.com/u/442212/qiita/IKGrayButton.png)

ちなみに、hex で UIColor の色指定をする為に、以下のようなカテゴリ拡張を入れています。

```objective-c:UIColor+Utilities.m
//
//  UIColor+Utilities.m
//  Ikuzo
//
//  Created by Haruyuki Seki on 3/28/13.
//

#import "UIColor+Utilities.h"

@implementation UIColor (Utilities)
+ (UIColor*) hexToUIColor: (NSString *)hex alpha: (CGFloat)a
{
	NSScanner *colorScanner = [NSScanner scannerWithString: hex];
	unsigned int color;
	[colorScanner scanHexInt: &color];
	CGFloat r = ((color & 0xFF0000) >> 16) / 255.0f;
	CGFloat g = ((color & 0x00FF00) >> 8) / 255.0f;
	CGFloat b =  (color & 0x0000FF) / 255.0f;
	return [UIColor colorWithRed: r green: g blue: b alpha: a];
}

@end
```
AWS環境下で、mysql5.6系をインストールしたら、unicornが起動しなくなった


### yumでインストール済みのmysqlを削除
※バックアップ等はしっかり行うこと。

```bash
sudo yum remove mysql*


### Mysql5.6系をyum install

```bash
sudo yum install http://ftp.jaist.ac.jp/pub/mysql/Downloads/MySQL-5.6/MySQL-client-5.6.10-1.el6.x86_64.rpm \              http://ftp.jaist.ac.jp/pub/mysql/Downloads/MySQL-5.6/MySQL-shared-compat-5.6.10-1.el6.x86_64.rpm \              http://ftp.jaist.ac.jp/pub/mysql/Downloads/MySQL-5.6/MySQL-server-5.6.10-1.el6.x86_64.rpm \              http://ftp.jaist.ac.jp/pub/mysql/Downloads/MySQL-5.6/MySQL-devel-5.6.10-1.el6.x86_64.rpm  \               http://ftp.jaist.ac.jp/pub/mysql/Downloads/MySQL-5.6/MySQL-shared-5.6.10-1.el6.x86_64.rpm
```

### おまじない

```bash
sudo mysql_install_db```
```

### 起動中かもしれないので、再起動

```bash
sudo /etc/rc.d/init.d/mysql restart 
```

### gemの隠し場所にあるファイルからインストールしたgemを初期状態へ戻す

```bash
gem pristine mysql2
```

### unicorn起動

```bash
unicorn_rails -c config/unicorn.conf -D 
```

### 確認

```bash
$ ps auxww | grep unicorn
ec2-user 20848  0.0  8.4 168952 51164 ?        Sl   11:42   0:01 unicorn_rails master -c config/unicorn.conf -D                            
ec2-user 20851  0.0 13.4 827776 81840 ?        Sl   11:42   0:01 unicorn_rails worker[0] -c config/unicorn.conf -D                         
ec2-user 20854  0.0 10.1 257516 61496 ?        Sl   11:42   0:00 unicorn_rails worker[1] -c config/unicorn.conf -D                         
ec2-user 21387  0.0  0.0   6596   592 pts/0    S+   15:25   0:00 grep unicorn
```
MySQLで複数行を一括でUPDATEする

FrogApps 技術ブログ始めました！
RailsやiOS、HTML5の情報を発信中!! → http://qiita.com/teams/frogapps

----
データベースを運用していると、一気にデータを投入したり、更新する必要が出てきます。
MySQLではINSERT文では複数行同時に更新できますが、UPDATEでは用意されていません。

そこで、UPDATEとJOINを組み合わせて、既存のテーブルを一気に更新してみます。

例) original_dataテーブルのbodyの値を複数行一気に更新する

まずは元データを作ります。

```
CREATE TABLE tbl1(id INTEGER PRIMARY KEY, body VARCHAR(255));
INSERT INTO tbl1(id, body) VALUES(1, '001');
INSERT INTO tbl1(id, body) VALUES(2, '002');
INSERT INTO tbl1(id, body) VALUES(3, '003');
INSERT INTO tbl1(id, body) VALUES(4, '004');
INSERT INTO tbl1(id, body) VALUES(5, '005');
INSERT INTO tbl1(id, body) VALUES(6, '006');
```

このうち、書き換えたい行の情報をテーブルに挿入します。

```
CREATE TEMPORARY TABLE tbl1map(tbl1_id INTEGER, body varchar(255));
INSERT INTO tbl1map(tbl1_id,body) VALUES(1,'aaa');
INSERT INTO tbl1map(tbl1_id,body) VALUES(4,'ddd');
```

そして、INNER JOINを使ってUPDATEします。

```
UPDATE tbl1
  INNER JOIN tbl1map ON tbl1.id=tbl1map.tbl1_id
  SET tbl1.body=tbl1map.body;
```

これで、下記の様にまとめて更新されました。

```
mysql> SELECT * FROM tbl1;
+----+------+
| id | body |
+----+------+
|  1 | aaa  |
|  2 | 002  |
|  3 | 003  |
|  4 | ddd  |
|  5 | 005  |
|  6 | 006  |
+----+------+
```
JavaScriptをテスト駆動開発する環境を整える

いちいち同じ事を書くのも変なので、こちらに切り出しておきます。

## JasmineのMatcher

[Matchers · pivotal/jasmine Wiki](https://github.com/pivotal/jasmine/wiki/Matchers)

非推奨になったMatcherはどれか、などの記述がある。

## Jasmine Setup

1. コンソールで実行

```
$ mkdir flickr-client
$ cd flickr-client
$ jasmine init
$ rake jasmine
```

1. ブラウザで確認

```
http://localhost:8888
```

## Guard Setup

1. コンソールで実行

```
$ guard init
$ mkdir public/coffeescripts
$ mkdir spec/coffeescripts
$ vi Guardfile
```

1. コードを書く

```ruby:Guardfile
guard 'coffeescript', input: 'public/coffeescripts', output: 'public/javascripts'
guard 'coffeescript', input: 'spec/coffeescripts', output: 'spec/javascripts'

guard 'livereload' do
  watch(%r{public/.+\.(css|js|html)})
  watch(%r{spec/.+\.(css|js|html)})
end
```

1. コンソールで実行

```
$ guard
```

1. ChromeのLiveReloadをEnableする

## Other Setup

1. 必要なライブラリをpublic/javascriptsフォルダにコピーする

```
$ cp .../jquery.js public/javascripts
$ cp .../knockout-2.1.0.js public/javascripts
```


-----
ブログやってます：[PAPA-tronix !](http://weed.cocolog-nifty.com/wzero3es/)
ターミナルでクリップボードのコピペ

普段はターミナルとブラウザを行ったり来たりしながら仕事をしていて、クリップボードを互いの文字データやりとりに多用しています。ただ、コピペをするのに、今までマウスに頼っていました。なぜなら、Ctrl-C/Vはターミナル内のプログラムが使用するため、通常はターミナル自体はCtrl-C/Vをコピペ用途にハンドルしないからです。それが日頃の作業効率を下げていると感じたので、ショートカットキーを調べてみました。

#Linux Gnome-terminal
Copy `Ctrl + Insert`
Paste `Shift + Ctrl + v`

#Mac Terminal
Copy `Command + c`
Paste `Command + v`

#Windows
Copy `Alt + Space, e, k`
Paste `Alt + Space, e, p`

まぁ、Macは調べるまでもなく以前から知っていました。Windowsは持ってないので、今ググって載せました（未検証。[引用元](http://stackoverflow.com/questions/131955/keyboard-shortcut-to-paste-clipboard-content-into-command-prompt-window-win-xp)）。

問題のLinux Gnome-terminal ですが、Pasteは非常に素直だと思いました。私は日本語キーボードで `Ctrl` キーを左手の手の腹で押す人なので、`Shift + Ctrl` は無理なくタイプできます。ただ、Copy が若干素直じゃないなと感じます。普段 `Insert` キーをタイプすることがほとんど無いからです。幸いなことに `Insert` は極端には押しにくくない場所にあるので、そのうち慣れるのではないかと思います。
tmuxのステータスラインの色を起動したホスト毎に変える

# 動機
1. 自宅でMBAでtmux起動して作業したり、会社のPCでtmuxして作業したり、リモートにsshしてからtmux起動して作業したり、しかも更にそれらを入れ子で行ったり、といったふうに使い方に応じて色んな場所でtmuxを起動してるんだが…。
2. たまに今作業してる端末がどこのtmuxなのか勘違いしたまま作業をしてしまい、あれ？てなることがあります。
3. 一応ステータスラインの脇の方にホスト名は表示してるので確認すればわかるんだけど、普段はあまり目に入らない模様。
4. そんなわけでより目に入りやすいステータスライン全体の色を変えたら良いんじゃないかなってことで試してみた。

#設定内容
自分用の設定ファイルは基本[github](https://github.com/kawaz/dotfiles)で管理しててどのホストでも共通のを使ってるので環境変数をみて切り替えるようにしてみた。

## ~/.tmux.conf の抜粋。
デフォルト(その他サーバ)はマゼンダ、仕事PC(ホスト名:trooper)はシアン、MacbookAirは緑にしてます。

```~/.tmux.conf
set-option -g status-bg magenta
if-shell '[[ "$HOSTNAME" == "trooper" ]]' "set-option -g status-bg cyan"
if-shell '[[ "${OSTYPE:0:6}" == "darwin" ]]' "set-option -g status-bg green"
```

`if-shell`は便利です、ここでは適当に環境変数をみて設定を上書きしてます。

- `HOSTNAME`は言わずもがな
- `OSTYPE`が`darwin`ってのはMac OSチェックです。


##適用後の見た目
こんな感じ。
![screenshot](http://cdn-ak.f.st-hatena.com/images/fotolife/y/y-kawaz/20130319/20130319142708.png)

現在の作業端末がわかりやすくなって満足です。

ところでこの入れ子のスクリーンショット取ってて気づいてしまったんだが、各ホストで時計ズレ過ぎｗｗ この後ntpdateした上でntpdが起動するようにしておきました(^^;

# はてダからのセルフ転載です
via. http://d.hatena.ne.jp/y-kawaz/20130319/1363672391
新はてダの存在により旧はてダが阻害されてる感に辟易したのでQiitaへ脱出中
tmuxで既存セッションがあればnew-sessionせずにアタッチする

tmux関連ネタとしてよくみる奴だけど、発動条件に自分なりのこだわり条件をつけたものを使ってます。

##やりたいこと
- tmuxに引数がついている場合は何か別のことをしたいはずなのでそのまま通す
- tmuxに引数が無くかつ既存セッションが存在する場合のみattach-sessionに差し替える
- 不要な定義でメモリを消費したくない
  - 環境変数`TMUX`をチェックしてtmux外にいる場合のみ適用
  - 環境変数`PS1`をチェックしてインタラクティブシェルのときだけ適用

##bashrcの記述
```bash
#tmuxで既存セッションがあればnew-sessionせずにアタッチする
if [[ -z $TMUX && -n $PS1 ]]; then
  function tmux() {
    if [[ $# == 0 ]] && tmux has-session 2>/dev/null; then
      command tmux attach-session
    else
      command tmux "$@"
    fi
  }
fi
```
Object Orientation オブジェクト指向

##Object Orientation

###Notice
You should change your recognition.
1. Package => Class
2. Subroutine of Package => Method of Class

###Reading
There is car manufacture(Class). Pushing car generating button(Constructor), car(Object) is generated.
Car can run ahead and chime klaxon(Method).
And it can load burden and understand own location information(Insert value into reference).

When you want another car, you can get another one(Object) by pushing the button(Constructor).
The car(Object) has it own having.
So nobody cannot interfere(Capsulize). 

Changing something in car manufacture(Global variables in Name Space or something) make effects on all cars(but the effect is only in the name space).

For example, if there is parking lot in the manufacture(Global variables in name space), parking(method) makes vacant spaces decreased. 

###Notice2
1. You cannot call method(subrountine) which starts with '_' by '->' from outer of the class.
e.g) Never call $obj->_hoge; from main package.

2. You cannot directly edit object's value(value of reference).
e.g) Never operate like $obj->{huge} = "bar"; from main package

3. You cannot edit global variables which is in name space of class.
e.g.) Never $package_name::hoge = "bar";
SceneKit-3D-rendering Objective-C framework

http://developer.apple.com/library/mac/#documentation/3DDrawing/Conceptual/SceneKit_PG/Introduction/Introduction.html

Cocoa環境で3Dモデルのあれこれみたいです。
別のものを調べてたらたまたま見つけて一人で驚いていました。

パーサー書く手間を省ける？
使ってみないとなんともですが、パッと見はすごく使えそう。
これでパーシングして独自形式にコンバートしてiOSで使うというシナリオが見える気がする
Django のモデルに生やしたメソッドから自身の検索をする


    class Email(models.Model):
        email = models.EmailField(max_length=75, help_text="メールアドレス")
    
        def test(self):
            return Email.objects.all()

self.objects とかだと ModelManager が instance からは参照できないのでどうしようかと思ったけど、そのメソッドの中で自身のクラス参照できた。
異なるvimプロセス間でのコピペ

tmuxを多様する自分にとっては嬉しいプラグインでした。

```vim:.vimrc
NeoBundle 'vim-scripts/yanktmp.vim'

"------------------------------------
" yanktmp.vim
"------------------------------------
map <silent> sy :call YanktmpYank()<CR>
map <silent> sp :call YanktmpPaste_p()<CR>
map <silent> sP :call YanktmpPaste_P()<CR>
```

- 参考
http://secondlife.hatenablog.jp/entry/20060705/1152110844
phpunit.xml の XSD (XML Schema)

GitHub の下記に phpunit.xml の XSD があります。

- [phpunit.xsd](https://raw.github.com/sebastianbergmann/phpunit/master/phpunit.xsd)

XSD が無くても困りませんが、下記のように書いておくとエディタや IDE によっては入力補完出来るようになるので少し便利です。

```xml
<?xml version="1.0" encoding="utf-8" ?>
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:noNamespaceSchemaLocation="https://raw.github.com/sebastianbergmann/phpunit/master/phpunit.xsd"
>
    <testsuites>
        <testsuite name="tests">
            <directory>./tests/</directory>
        </testsuite>
    </testsuites>
</phpunit>
```
BlocksKitをまねしてCLLocationManagerにblockを追加してみた


割と簡単にできてびっくりしている。

やりたかったこと
----
Delegateメソッドを書かずに、CLLocationManagerを使いたかった。

通常位置情報を扱う場合は、CLLocationManagerのdelegateを登録し、ViewController等にDelegateメソッドを追加して実装します。ですがこの方法は王道ですが、メソッドが増えたりソースコード的に書きにくい読みにくい等あってあまり好きではありません。なので、Delegateを使わずにやってみたいと思ってました。
同じようなニーズを、UIAlertView等のiOS標準のクラスでやっているのが[BlocksKit](https://github.com/pandamonia/BlocksKit)です。
[iOSコーディングスタイルを変えてしまうBlocksKitの紹介](http://d.hatena.ne.jp/h_mori/20120220/1329691866)

BlocksKitがやってること
----
BlocksKitはUIAlertViewのDelegateをblockで置き換えてます。どうやっているのかソースコードを見ると、A2DynamicDelegateというライブラリを使っていました。
[UIAlertView+BlocksKit.m](https://github.com/pandamonia/BlocksKit/blob/master/BlocksKit/UIKit/UIAlertView%2BBlocksKit.m)
[A2DynamicDelegate](https://github.com/pandamonia/A2DynamicDelegate)←BlocksKitに同梱

仕組みが分からないけどパクってみる
----
A2DynamicDelegateの仕組みは、今の脳みそでは難しくて理解できません。ですがBlocksKitでの使い方をパクりながら、blockを使ったCLLocationManagerを実装してみました。


```objc:CLLocationManager+block.h

#import <Foundation/Foundation.h>
#import <CoreLocation/CoreLocation.h>

@interface CLLocationManager(block)

#pragma mark - Responding to Location Events
//– locationManager:didUpdateLocations:
@property (nonatomic, copy) void (^didUpdteLocations)(CLLocationManager *,NSArray *);
@end
```

```objc:CLLocationManager+block.m


#import "CLLocationManager+block.h"
#import "A2BlockDelegate.h"


@interface A2DynamicCLLocationManagerDelegate : A2DynamicDelegate

@end
@implementation A2DynamicCLLocationManagerDelegate
- (void)locationManager:(CLLocationManager *)manager
     didUpdateLocations:(NSArray *)locations
{
    id realDelegate = self.realDelegate;
    if (realDelegate && [realDelegate respondsToSelector:@selector(locationManager:didUpdateLocations:)])
        [realDelegate locationManager:manager didUpdateLocations:locations];

    void (^block)(CLLocationManager *,NSArray *) = [self blockImplementationForMethod:_cmd];
    if (block)
        block(manager, locations);

    return;
}
@end

@implementation CLLocationManager(block)
@dynamic didUpdteLocations;
+ (void)load {
    @autoreleasepool {
        [self registerDynamicDelegate];
        [self linkDelegateMethods: @{
                // self property : Delegate methods
                @"didUpdteLocations": @"locationManager:didUpdateLocations:",
        }];
    }
}

@end
```

呼び出し元のViewControllerを書きます。

```objc:ViewController
- (void)viewDidLoad
{
    [super viewDidLoad];
	// Do any additional setup after loading the view, typically from a nib.
    self.manager = [[CLLocationManager alloc] init];
    self.manager.didUpdteLocations = ^(CLLocationManager *m,NSArray *a){
        NSLog(@"%@", [a objectAtIndex:0]);
    };
    [self.manager startUpdatingLocation];
}
```

エミュレータを起動して、NSLogがはき出される事を確認しました。
拍子抜けするぐらいあっさり動きました。

ソースコードがすごいシンプルになる可能性
----
位置情報を扱うアプリのControllerは、Delegateメソッドが多数生えて「下に長く」なっていきます。ですがDelegateの代わりにblockを使うこの方法ならば、シンプルに書いていけそうです。

おまけ：BlocksKit入れるならCocoaPodが楽
----

```ruby:Podfile
platform :ios, '5.0'
pod 'BlocksKit'
```
を用意して``pod install``
文法定義を図示する方法

ABNF, ANTLR 3, Bison, GOLD, JavaCC, Jison, PEG.js で定義した文法を図示するには次の web ページを利用すると良い。
　　http://bottlecaps.de/convert/

利用例：
======
[javascript で四則演算数式を評価する例](http://qiita.com/items/fdb57e61ca91e832976e)
で使った peg.js での計算式の文法定義
　　http://homepage2.nifty.com/youichi_kato/src/pegjs/expression/arithmetics.pegjs

を図示したもの
　　http://homepage2.nifty.com/youichi_kato/src/pegjs/expression/ebnf/aritmetics/index.html

参考：
 -  http://stackoverflow.com/questions/8154790/visualize-lalr-grammar
 > Visualize LALR grammar
windows版 SourceTreeのコミットログに自動でブランチ名とかチケット番号を入れる方法

[branch名に、チケット番号仕込むと、良い事あった。](http://riskrisk.hatenablog.com/entry/2012/01/19/011406)
を参考にさせてもらいました。

#コミットログにチケット番号が書いてあるとGUIでみた時とか検索とか便利だよね。
*(たとえチケット管理システムと連携してなかったとしても！)*
##でも正直自分で毎回いれるのめんどくさい・・・。

ということで、
`ブランチ名-チケット番号` のブランチからコミットすると自動でログが挿入されるようなhookを書きました。

ブランチ名が先なのは、コマンドラインから操作したくなったときにタブ補完が効かせやすそうだったからで深い意味はありません。

ブランチ名をコミットメッセージの最後に追加してるのは、SourceTreeの blameからlogを見た時にhistoryタブを見なくても良くなりそうだったので、ないよりはいいだろうということで入れておきました。


`pre-commit-msg`でやろうとしたんですが、GUIでcommitを押したタイミングでSourceTreeからcommitが走ってて、pre-commit-msgだといいタイミングで実行できないので`commit-msg`でやりました。

`--amend`のときに気をつければ問題ない・・・はず。

```sh:.git/hooks/commit-msg
#!/bin/sh

#ブランチ名を取得 もっといい方法あるかも。
Branch="$(git branch | grep "*" | awk '{print $2}')"

if [ $Branch == "master" ] ; then
	#masterでのコミットは別ルールにしたかったのでとりあえず分けてみた
	ReqestNo=""
	CommitBranch="master"
else
	#正規表現でブランチ名からとチケット番号と、コミット番号抜きのブランチ名を取得
	ReqestNo="$(echo $Branch | sed -e "s/^.*-\([0-9]\+\)$/\1/g")"
	CommitBranch="$(echo $Branch | sed -e "s/^\(.*\)-[0-9]\+$/\1/g")"
fi

#コミットメッセージの最初にチケット番号を、最後にコミット番号抜きのブランチ名を追加
mv $1 $1.tmpbycommit-msg
echo -n "[#$ReqestNo] " > $1
cat $1.tmpbycommit-msg >> $1
echo "*$CommitBranch" >> $1
```

このスクリプトをログを自動挿入したいリポジトリのhooksにおいてやればOKです。

`hotfix-9999` のブランチで`ほっととっとバグだぜー`というメッセージでコミットすると、

`[#9999] ほっととっとバグだぜー
*hotfix`

というログになります。

SourceTree上のhistoryタブからは

`[#9999] ほっととっとバグだぜー *hotfix`

という感じで1行にみえて色々はかどります。
evernote-editor のエディタに CotEditor を指定する

コマンドラインで Evernote のノート作成や編集が行える [evernote-editor](https://github.com/hpoydar/evernote-editor) というツールがあります。

導入は `gem install evernote-editor` で行うことができます。

ノート編集用のテキストエディタは、デフォルトでは vim になっていますが、CotEditor を使うようにできます。そのためには、テキストエディタを次のように指定します。

```
'open -W -n -F -a CotEditor'
```

初回起動時にエディタを聞かれるのでそこで指定するか、`.evned` ファイルに記載すればよいです。
CentOS on VMware Fusionネットワークアダプタの構成メモ


VPSを契約する前に、VMwareのCentOSで試験したいときに使える構成です。

2つのネットワークアダプタを使います。

1つ目は「Macのネットワーク接続を共有（NAT）」。
これはCentOSがMacの外側に接続するため、yum install等に使います。
「物理ネットワークに直接接続（ブリッジ）」にしてもいいですが、NATだとネット環境による問題が少なくて楽です。

2つ目は「Macでのみ使用できる専用ネットワークを作成(ホストオンリー)」。
Mac（ホストOS）とCentOS（ゲストOS）を繋ぐアダプタです。

Mac側のIPアドレスを確認してみます。
Macのターミナルでifconfigを実行。

```
$ ifconfig
（中略）
vmnet1: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
        ether 00:50:56:XX:XX:XX
        inet 172.16.144.1 netmask 0xffffff00 broadcast 172.16.144.255
```

vmnet1がゲストOSと通信を行うための仮想ネットワークインターフェイスです。
MacのIPアドレスは172.16.144.1だとわかります。

次に、CentOSのターミナルでifconfigを実行します。

```
$ ifconfig
（中略）
eth1      Link encap:Ethernet  HWaddr 00:50:56:YY:YY:YY  
          inet addr:172.16.144.128  Bcast:172.16.144.255  Mask:255.255.255.0
（中略）
```

CentOSのIPアドレスは172.16.144.128です。
しかし、CentOSが起動する度に172.16.144.129, 172.16.144.130, …とIPアドレスが変化します。
172.16.144.128から動的に割り振っているようです。

Macからsshで接続するとき、動的IPだとその都度CentOSのIPアドレスを確認しなければなりません。
固定IPの方が使いやすいため、eth1のIPアドレスは172.16.144.127にしました。
設定方法は割愛。

これで、気軽にsshで接続できます。

```
$ ssh ユーザー名@172.16.144.127
```
MT5でブログ記事アイテム数が多い場合の不具合

MT5でブログ記事アイテムを大量に登録した場合に、&lt;MTEntryAssets&gt; でアイテムが取得できない不具合がある。

mt_entry_summary テーブルの entry_summary_vchar_idx(varchar(255)) がオーバーして、正常な AssetID が保存されてない為なので、mt_entry_summary 参照部分を回避。

```Template/Tags/Asset.pm

        #if ( $e->has_summary('all_assets') ) {
        if ( 0 ) {
            @$assets = $e->get_summary_objs( 'all_assets' => 'MT::Asset' );
        }
        else {
            require MT::ObjectAsset;
```
アプリケーションの多重起動を禁止する

Mutexで実装してみました。ちゃんと書くとけっこう大変ですね。

```csharp
static class Program
{
    [STAThread]
    static void Main()
    {
        using (var mutex = new Mutex(false, "YOUR_APPLICATION_NAME_Running"))
        {
            try
            {
                if (mutex.WaitOne(0))
                {
                    Run(mutex);
                }
                else
                {
                    // 起動済みのウィンドウをアクティブにすると親切かも
                    MessageBox.Show("多重起動はできません");
                }
            }
            catch (AbandonedMutexException)
            {
                // new Mutex()～WaitOne()の間で、既に起動中のプロセスが強制終了した
                // この場合もMutexの所有権は取得できているので、起動して問題ない
                Run(mutex);
            }
        }
    }

    static void Run(Mutex mutex)
    {
        try
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }
        finally
        {
            // 例外で終了したときにMutexが解放されないのを防ぐため、finallyで行う
            mutex.ReleaseMutex();
        }
    }
}
```

ちなみに、別のコンストラクタを使った以下の書き方は、参考サイトによると正しくないそうです。
理由が書かれていなかったので、ご存じの方は教えていただけるとうれしいです。
同期周りは難しい…

```csharp
Mutex m = new Mutex(true, "myApp", out createdNew);
```

# 参考
http://stackoverflow.com/questions/646480/is-using-a-mutex-to-prevent-multipule-instances-of-the-same-program-from-running
http://stackoverflow.com/questions/819773/run-single-instance-of-an-application-using-mutex
Rcppの４様態

某ドキュメントのほぼまんまなんだけど，Rcppでコードを生成する場合，大まかに四つの方法に分けられるかと


## ソースに書いてコンパイルし，Rでロードする

C/C++のまんまの関数コードだけのファイル

```fibonacci00.cpp

int fibonacci(const int x){
  if(x==0)return(0);
  if(x==1)return(1);
  return fibonacci(x-1)+fibonacci(x-2);
}
```

これをRcpp/Rで利用するためラッパー関数コードだけのファイル

```fibonacci0.cpp
#include <Rcpp.h>
extern int fibonacci(const int x);

extern "C" SEXP fibWrapper ( SEXP xs ) {
  int x = Rcpp::as<int>(xs);
  int fib = fibonacci (x);
  return Rcpp::wrap(fib);
}
```

んでもって二つをR CMD でコンパイル

```
$ R CMD SHLIB fibonacci0.cpp fibonacci00.cpp 
g++ -shared -L/usr/local/lib -o fibonacci0.so fibonacci0.o fibonacci00.o -L/R/libs/Rcpp/lib -lRcpp -Wl,-rpath,/R/libs/Rcpp/lib -L/usr/local/lib/R/lib -lR
```

Rでロードして利用

```
> dyn.load ("fibonacci0.so")
> .Call ("fibWrapper", 10)
[1] 55
> dyn.unload ("fibonacci0.so")
```

-----

## inlineパッケージを使ってコードもRのスクリプトに書き込む

```R.R
> library (inline)
> library (Rcpp)
> incltxt <- '
+ int fibonacci(const int x){
+   if(x==0)return(0);
+   if(x==1)return(1);
+   return fibonacci(x-1)+fibonacci(x-2);
+ }'

> fibRcpp <- cxxfunction(signature(xs = 'int'),
+                        plugin = 'Rcpp',
+                        incl = incltxt,
+                        body = '
+                        int x = Rcpp::as<int>(xs);
+                        return Rcpp::wrap(fibonacci(x));
+                        ')
> fibRcpp(10)
[1] 55
```

-----

## attriburesを使う．ラッパーを定義する必要なし

```fibonacci.cpp
#include<Rcpp.h>
using namespace Rcpp;

// [[Rcpp::export]]
int fibonacci(const int x){
  if(x < 2)
    return x;
  else
    return(fibonacci(x - 1))+fibonacci(x-2);
}
```

sourceCpp()でコンパイルする．ラッパーを定義する必要なし

```
> sourceCpp ("fibonacci.cpp")
> fibonacci(10)
[1] 55
```


-----

まだある

## cppFuncitonを使う．これまたRのスクリプトにコードを書く

```
> txt <- '
+ int fibonacci (const int x) {
+ if ( x < 2) return ( x ) ;
+ return ( fibonacci ( x - 1) ) + fibonacci ( x - 2) ;
+ }'
> fib <- cppFunction(txt)
> fib (10)
[1] 55
```


Rcppは進化が激しいので，追って整理するのが大変．．．
facebookのOpenGraphでサムネイルが表示されない件を調べてみた

## 現象

* facebookのOpenGraph投稿でog:imageで指定したサムネイル(200x200)がウォールに表示されない
* [FacebookDebugger](https://developers.facebook.com/tools/debug)で調べていると以下のような警告が表示される場合がある
 * 警告で表示されるサムネイルのURLとog:imageのURLが異なる

```
og:image should be larger:	Provided og:image is not big enough. Please use an image that's at least 200x200 and preferably 1500x1500. (Maximum image size is 5MB.) Image 'https://hogehoge.com/thumbnail' will be used instead.
```

## 原因

* 現象が発生したサービスではOpenGraph対象のURLを再利用していたが、facebook側にキャッシュが残っていて既に削除されたサムネイルに対してリクエストが飛んでいたと思われる

## サービスとしての対策

 * 以下のような対策があるのかな
  * URLを再利用せずに一意にする(日時をいれたクエリをつけるとか、uuidをパスにいれるとか)
  * キャッシュを削除する手段はない？(過去にはURL Linterがあったらしいが、現状はFacebookDebuggerにリダイレクトされる、FacebookDebuggerはリキャッシュしかできないっぽい)

## 再現手順

 * AWSのEC2を起動する
 * 以下のようにOpenGraph用のページを返すApacheを設定する

```
$ sudo yum install httpd -y
$ sudo vi /var/www/html/index.html
<html>
<head>
<title></title>
<meta property="og:title" content="hoge" />
<meta property="og:type" content="article" />
<meta property="og:url" content="http://[EC2のpublicDNS]" />
<meta property="og:image" content="http://[EC2のpublicDNS]/thumbnail" />
<meta property="og:site_name" content="hoge" />
<meta property="og:description" content="hoge" />
</head>
<body>
</body>
</html>

$ cd /var/www/html
$ sudo wget [適当な画像のURL]
$ mv [適当な画像] thumbnail
$ sudo /etc/init.d/httpd start
```

 * [FacebookDebugger](https://developers.facebook.com/tools/debug)でhttp://[ec2のpublicDNS]にアクセスする
  * => 特に問題なくサムネイルが取得できる
 * EC2でthumbanilへのパスを変更する

```
$ sudo mv /var/www/html/thumbnail{,2}
$ sudo vi /var/www/html/index.html 
# => og:imageでサムネイルの名前をthumbnail2に変更する

```
 * [FacebookDebugger](https://developers.facebook.com/tools/debug)でhttp://[ec2のpublicDNS]にアクセスする
  * => 以下の警告が表示される(thumbnail2へのアクセスでないことに注意)

```
og:image should be larger:	Provided og:image is not big enough. Please use an image that's at least 200x200 and preferably 1500x1500. (Maximum image size is 5MB.) Image 'http://[EC2のpublicDNS]/thumbnail' will be used instead.
```
Vagrant導入メモ

 vargrant用のOSイメージを用いて
 スクリプトで指定したHW構成にてCUIより仮想環境を立ち上げる。

環境は下記の通り。 
Max OS X 10.7.5
gem 1.3.6
ruby 1.8.7

# 事前作業
## Virtual Boxのダウンロードとセットアップ
https://www.virtualbox.org/wiki/Downloads

# 本作業
## vagrantの導入
```vagrantの導入とCentOSイメージの導入
# gem install vagrant
# イメージのURLは vagrantbox.es を参照のこと
% vagrant box add centos5.8_x86_64 http://tag1consulting.com/files/centos-5.8-x86-64-minimal.box
% vagrant init centos5.8_x86_64
#; 作業ディレクトリに Vagrantfile が作成される。こいつが仮想環境の設定ファイル
```

## ホストとの接続Ethを作る
VMのIPを192.168.1.50にする。
下記の用にVagrantfileを編集する。
```
Vagrant::Config.run do |config|
 # 中略...
 # ↓が追記
  config.vm.base_mac = "080027F7F048"
  config.vm.customize ["modifyvm", :id, "--memory", 1024]
  config.vm.network :hostonly, "192.168.50.2", :netmask => "255.255.255.0"
 # 中略...
end

 # ↓も追記
include_vagrantfile = File.expand_path("../include/_Vagrantfile", __FILE__)
load include_vagrantfile if File.exist?(include_vagrantfile)
```

## 基本的な操作
Vagrantfileの配置されたディレクトリで下記を実行。
``` 仮想環境の起動停止処理
# 仮想環境立ち上げ
% vagrant up
# 仮想環境シャットダウン
% vagrant halt
```

※ ホスト側のVagrantfileが存在するディレクトリは、仮想側の/vagrantにマウントされている

## Sahara https://github.com/jedi4ever/sahara
Saharaはvagrantで上げるインスタンスの変更について rollback - commitを可能にする
``` 
% vagrant gem install sahara
```

```基本操作
% vagrant sandbox on　# saharaによる管理開始
% vagrant sandbox rollback # ここまでの変更を on 時まで戻す
% vagrant sandbox commit # ここまでの変更をcommitする
```

# 参考サイト
http://www.ryuzee.com/contents/blog/4292
http://kazuph.hateblo.jp/entry/2013/02/05/234243
bashで指定した範囲の日付を表示するだけの関数

「"何月何日から何月何日まで"という感じで日付を範囲指定して様々なコマンドを実行したい」ということが良くあるので、bashで以下のような簡単な関数を作ってみました。

.bashrc とか .bash_profile あたりに書いておけば動きます。
あとrubyが必要です。

```bash
dateseq() {
    FROMDATE=`echo "$1" | sed -e 's/-/,/g'`
    TODATE=`echo "$2" | sed -e 's/-/,/g'`
    ruby -rdate -e "(Date.new(${FROMDATE})..Date.new(${TODATE})).each{|d| puts d.to_s }"
}
```

以下のように実行します。

```
$ dateseq 2013-03-01 2013-03-05
2013-03-01
2013-03-02
2013-03-03
2013-03-04
2013-03-05
```

for文に渡して、指定した日付分、コマンドを実行することができます。

```
$ for d in `dateseq 2013-03-01 2013-03-05`; do echo 'Today is '$d; done
Today is 2013-03-01
Today is 2013-03-02
Today is 2013-03-03
Today is 2013-03-04
Today is 2013-03-05
```

やってみて思ったけど、どうせruby呼び出すんだったら独立したコマンドにした方がよかったですね^^;
その方が拡張しやすいし。

あとで考えます。
vimで文字コード指定してファイルを開く


``` vim
vim -c ":e ++enc=utf8" inedx.html
vim -c ":e ++enc=euc-jp" inedx.html
vim -c ":e ++enc=shift_jis" inedx.html
```



参照
http://jehupc.exblog.jp/12130310 
http://nanasi.jp/articles/howto/file/open-with-format.html
Wordpressの抜粋出力関数the_excerpt()を、もう少し使い勝手良くしてみた関数。


仮にcustom_excerpt()として、function.phpに以下を記述

``` functions.php
if ( !function_exists('custom_excerpt') ):
	function custom_excerpt($length=null, $post_obj=null) {
		// $post_objが無い時はglobal $postからpostオブジェクトを取得
		if( !isset($post_obj) ) {
			global $post;
			$post_obj = $post;
		}
		// デフォルトの文字長セット
		if( !isset($length) ) { $length = 150; }
		$content = mb_substr(strip_tags($post_obj->post_content), 0, $length);
		return $content;
	}
endif;
```

テンプレート側では以下のようにして使う

``` page-hoge.php
// While Loopの中では
<?php while(have_posts()): the_post(); ?>
	<?php echo custom_excerpt(100); ?>
<?php endwhile; ?>

// get_posts()からのforeachでは
<?php $posts = get_posts(array(
	'post_type' => 'post',
)); ?>
<?php foreach($posts as $post): ?>
	<?php echo custom_excerpt(100, $post); ?>
<?php endforeach; ?>
```

参考URL
http://csspro.digitalskill.jp/%E3%83%81%E3%83%A5%E3%83%BC%E3%83%88%E3%83%AA%E3%82%A2%E3%83%AB/wordpress-excerpt%E3%81%AE%E6%96%87%E5%AD%97%E6%95%B0%E3%82%92%E3%83%97%E3%83%A9%E3%82%B0%E3%82%A4%E3%83%B3%E4%BD%BF%E3%82%8F%E3%81%9A%E3%81%AB%E5%A5%BD%E3%81%8D%E3%81%AA%E6%95%B0%E3%81%AB%E7%B0%A1/
Capistranoでハマったのでメモ


capistrano使ってて自分でtaskを作ってゴニョゴニョしたい時とか有るじゃないですか? それをやっててハマった訳なんですよ。恥ずかしながら、今までロクに自分でcapistranoを弄ったことなかったので気付くまで時間かかりました。capistranoをよく使う方的には当たり前な挙動なのかも知れないのですが、ハマったのはコレです。

```zsh
cap shell

cap> cd /tmp
cap> pwd 
```

これ、まさかの "/home/[user-name]" です。仕組を想像してみれば考え辛い結果(中を見てないのですが推測するに、こういうソフトウェアなので、runメソッドの度にワンセッションをブロードキャストしながら連続実行しているのでしょう)でもないのですがサーバー設定用のシェルスクリプト書いているつもりでノリノリでやってみたらハマっちゃったというのが顛末です。

```zsh
cap shell
cap> cd /tmp && pwd 
```

こうすれば結果は "/tmp" になります。環境変数を設定しながらビルドする場合もそうです。

```zsh
cap export JAVA_HOME=/path/to/java/home && cd /path/to/workdir && git clone git@githost/project/master && cd /path/to/project && /path/to/maven/bin/mvn package -Pproduction
```

せっかくServer側にCapistranoを設定しなくても良いというのが魅力に感じたポイントなので環境変数はどこまでサーバーのセットアップ時にやっておくのか? (全サーバーに.bashrcを整えておく) というのが出てしまいそうなのが悩み所です。そこでタスクの内容をその場でシェルスクリプトとしてジェネレートして、送り付けた後に実行するというのも良いのかな? と思ったところ、

https://github.com/nadarei/mina

こんなの見付けたので、ついでにメモ。
Emacsで「<」「>」を手打ちしないHTML編集


Emacsのはなしです。
さいきん[Emacs Rocks](http://emacsrocks.com)というのを見つけて興奮しております。

その中で見た、HTMLに関わるEmacsコマンド等を勉強したのでメモ。

- [Emacs Rocks! Episode 12: Working with HTML](http://emacsrocks.com/e12.html)

## zen-coding
[このあいだ入れたzen-coding](http://qiita.com/items/10bb1185ce0c62efc5de)です。やっぱり便利ですね。

こまかい説明は省きますが、zen-codingを使うと
手打ちするのがダルい、ネスト深めなHTMLとかも一瞬で出せます。

例えば、zen-codingのmodeで開いたファイルで、

```
html>head+body>div>ul>li*5
```

こんな感じのものを書いて、TABを押すと、

```
<html>
    <head>
    </head>
    <body>
        <div>
            <ul>
                <li></li>
                <li></li>
                <li></li>
                <li></li>
                <li></li>
            </ul>
        </div>
    </body>
</html>
```

わさぁっ、とこんなのが出てきます!

上で書いたくらいのzen-codingの書式なら、

- ネストは```>```
- 隣接は```+```
- 繰り返しは```*(数字)```

だけ覚えておけばすいすい書けるので、
勉強コストが低いのもいいですね。

ちなみに、**「HTMLはインデントなしじゃー!!」**派の方は、.emacsかinit.elに

```lisp
(setq zencoding-indentation 0)
```

と書いておきましょう。
というか、zen-coding使いつつインデントありにするのは結構しんどそう。。


## sgml-mode

つい先程気づいたんですが、Emacsにzen-codingを入れた時に、
**sgml-mode**というのも付いてきていたようです。

zen-codingが内部で使ってそうな関数が色々入っているので、
このあたりもマスターすると、更に小回りの利く編集ができそうです。

### sgml-tag

関数```sgml-tag```は、たぶん```C-c C-o```にバインドされてます。
タグ名だけ打てばHTMLタグを入れてくれるというやつです。

```html
<body>
|
</body>
```

この状態で```C-c C-o RET section```すると

```html
<body>
<section>|</section>
</body>
```
でん! とsectionタグができて、カーソルはその中に移動してます。

----

そしてもう少し小回りの利くところ!
さっきの状態から、```<section></section>```を選択して、
```C-c C-o RET div```とすると、

```html
<body>
<div><section></section></div>|
</body>
```
はい、選択部分をdivで囲んでくれました! いいかんじ!

---

また一部のタグでは、タグ自体を生成した後にattributeも聞いてくれるので、黙々とこたえると吉です。

例えば、```C-c C-o RET input```して、
type → text → name → email → value → foo@bar
とぽちぽち書いていれば、

```html
<input type="text" name="email" value="foo@bar">
```
ちゃんとこうなります。
記号を一切タイプしないというのがすごい。

---

なお、```M-x describe-function RET sgml-tag```すると解説が読めます。
Emacsの関数すべてにおいてこれは使えるので、べんりですよ。

### sgml-electric-tag-pair-mode
これがすごい。
```M-x sgml-electric-tag-pair-mode```でmodeをonにしておいて、

```html
<div|></div>
```

タグ名を編集すると…(hogeと入力)

```html
<divhoge|></divhoge>
```

**閉じタグも変わった!!**
というわけで修正の手間が半分で済みます。

もちろん、開きタグと閉じタグが遠くはなれていてもOKです。


### そのほか

ほかにもsgml-modeで使えるものはいっぱいあります。
キーバインドはどれも```C-c```で始まるものになっていて、
比較的覚えやすいのではないでしょうか。

- sgml-close-tag: ```C-c C-e```
いまいる場所のHTMLタグを閉じます。
タグ書きすぎて、ネストの訳が分からなくなったときにも使えそう。

- sgml-skip-tag-forward: ```C-c C-f```
HTMLタグ単位で、前に移動します。

- sgml-skip-tag-backward: ```C-c C-b```
HTMLタグ単位で、後ろに移動します。
(このあたりは、1タイプで済むキーバインドに差し替えてもいいかなぁという気も)

- sgml-sgml-tags-invisible: ```C-c TAB```
HTMLタグを非表示/表示。テキストブラウザみたいな表示になる。

- sgml-delete-tag: ```C-c DELETE```
HTMLタグを削除。(カーソルのいる位置を囲んでいるタグだけ削除。中身はそのまま残る)

- html-headline-1: ```C-c 1```
h1タグを入力。```C-c 1```〜```C-c 6```まである。

- html-check-boxes: ```C-c C-c c```
チェックボックスをまとめて、ダイアログで入力。
だいたいvalueだけ入力すれば勝手に書いてくれるので、かなり早い。
同様のhtml-radio-buttons: ```C-c C-c r```もあり。

- html-href-anchor: ```C-c C-c h```
aタグを(ry

- html-image: ```C-c C-c i```
imgタグを(ry

## まとめ

今回実は、記事を書くにあたって新しくインストールしたものはゼロで、
ぜんぶzen-codingを入れたときに付いてきたものなんですね。。。
これだけいろいろ入っていたのに、使ってなかったとはもったいない。

これから仕事でもばりばりHTMLを書きそうなので、
Emacsに助けてもらいつつコーディングスピード上げようと思います。
Python で日付の計算


昨日の日時を取りたいと思ったら、1日分の timedelta を作って、date オブジェクトをそのまま引いてあげればいい。

    >>> import datetime
    >>> from datetime import timedelta
    >>> t = timedelta(days = 1)
    >>> d = datetime.date.today()
    >>> d
    datetime.date(2013, 3, 27)
    >>> d - t
    datetime.date(2013, 3, 26)

[8.1. datetime — 基本的な日付型および時間型](http://docs.python.jp/2/library/datetime.html)
Upgraded to Padrino 0.11.0

Padrino 0.11.0 、基本的には楽ちんに上げられたんですが、変なことをしていた場合等はややハマる箇所があったのでShare~します。

## haml => 4.0 にしとく（追記）

忘れていたけど、 3.x 系だと動いてくれないので `bundle update haml` する。padrinoはhamlに対して依存関係を持たないので、一緒に上がってはくれないので注意。

## actionpack ~> 3.0.0 の依存がある場合

やばい（小並感）。

具体的には以下のような現象が起こって爆死する。

```
Bundler could not find compatible versions for gem "rack":
  In Gemfile:
    padrino (>= 0) ruby depends on
      rack (>= 1.5.2, ~> 1.5) ruby

    actionpack (= 3.2.12) ruby depends on
      rack (1.4.5)
```

正確には Sinatra => 1.4 が Rack 1.5.2 以上を要求するということ。

actionpack 自体は将来にわたって純粋にRailsのものなので、コレに依存している処理は Rack や tilt に含まれる何かで代替すべきであろう。

難しいのがRailsでもPadrinoでも使えるようにしたかったライブラリ達で、例えばkaminari は現状 actionpack >= 3.0.0 への依存があるので Padrino 0.11.0 と一緒に使うのが難しい。

Rails 4 対応を待つ(actionpack 4.0.0では rack ~> 1.5.2 への依存となる)か、暫定的にforkするか、あるいは actionpack 自体はヘルパーでしか使っておらず、モデルのページネーション自体には関係がないので、actionpackへの依存を任意とするようにロビー活動をするか……ということになるのかなあ……。

## `request.route_obj.named`

これは http_router のバージョンアップによる影響っぽいんだけれど、今まで「コントローラ＋アクション」の情報が入っていた named というAPIが無くなったっぽい。その代わり、むしろactionとcontrollerがちゃんと独立して取れるようになっているので進化しているとも言える。なので、使っていたら適切にrenameすべき。

具体的には [rspce-padrino](https://github.com/udzura/rspec-padrino/issues/4) というgemで問題になっているので、作者のudzuraさんがきっと超高速で直してくれることでしょう。わー期待

## `request.preferred_type` が変わった

これは Sinatra 側の変更。ただの文字列だったが、 `Sinatra::Request::AcceptEntry` と言うものを返すようになった。 `to_s` を呼べば文字に戻せる。

詳しくは [rkhのブロッグ記事](http://rkh.im/sinatra-1.4) の「Mime-Type Parameters」の項目を読めば、もっと色々できるようになったんやね〜と言うのが分かる。

## `enable :protection` がデフォルトになった

```
you need to set up a session middleware *before* Rack::Protection::SessionHijacking
```

と言われることがある。たいてい `enable :sessions` を忘れている。

ウェッブ API だし… みたいな場合は `disable :protection` とした上で、必要と思われる rack-protection のミドルウェアを個別利用するのが良さそう。

## `Rakefile`

ここは普通に警告が出るのでそのまま対応すればいいが、以下のような変更をする必要がある。

```diff:Rakefile
-require File.expand_path('../config/boot.rb', __FILE__)
 require 'padrino-core/cli/rake'
+PadrinoTasks.use(:activerecord)
+PadrinoTasks.use(:database)
 PadrinoTasks.init
```

## ＊　＊　＊

ぼくが引っかかったのはコレくらいです。何か引っかかったら、 [便利なウェブサービス](https://github.com/padrino/padrino-framework/issues) があるので検索したり質問してみたりしてください。