[Ruby]文字列をロケールのエンコーディングに変換する (1.9以上対象)

ファイル名など、システムのロケールに依存する文字列を出力する場合、スクリプト内にエンコーディング名を決め打ちしていると移植性が低下してしまうので、実行時にエンコード名を指定したい。
システムのロケールで設定されているエンコーディング名は Encoding.locale_charmap で取得できる。
"文字列".encode(Encoding.locale_charmap)
このようにして、ロケールのエンコーディングに変換された文字列を簡単に取得できる。

[Ruby]Web上のファイルを直接開く

Web上のファイルを直接開いて読み込むだけの単純な処理の場合、 net/http を使って長いコードを書かなくても、 open-uri を使うことで簡単にファイルを取得し通常のIOと同様に読み込むことができる。ハッシュの形で引数を指定することで、リクエストヘッダなどのオプションを指定できる。

例:
require 'open-uri'
  
open("http://example.com/hoge.html", "Referer" => "http://example.com/") {|file|
  puts file.read()
}
HTTPSの場合も同様に使うことができる。ただし、Ruby 1.9以上でHTTPSのページを開こうとすると、このようなエラーが出ることがある。

SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed (OpenSSL::SSL::SSLError)

この場合は以下のように :ssl_verify_mode オプションを指定すればよい。指定する値は OpenSSL::SSL::SSLContext#verify_mode= と同じである。サーバーの証明書を検証する必要がなれば、 OpenSSL::SSL::VERIFY_NONE で大丈夫である。
open("https://example.com/", :ssl_verify_mode => OpenSSL::SSL::VERIFY_NONE) {|file|
  puts file.read()
}
この場合もヘッダ等のオプションは同様に指定できる。

[iOS]シミュレータでMPMediaQueryのクエリを実行する

MPMediaQuery のクエリをシミュレータで実行しようとすると、
Could not open database at file://localhost/Users/名前/Library/Application%20Support/iPhone%20Simulator/5.1/Media/iTunes_Control/iTunes/MediaLibrary.sqlitedb?readonly_shm=1: unable to open database file
と表示される。シミュレータにはiPodのライブラリが入っていないので当然であるが、ライブラリ構築済みのiPhoneからシミュレータにライブラリのデータベースファイルをコピーすることで、シミュレータでも MPMediaQuery のクエリをテストできるようにする。

iFunBox を使って(脱獄不要)、 iTunes_Control/iTunes/MediaLibrary.sqlitedb のファイルを、上記エラーメッセージに記載されているディレクトリにコピーする。実行するクエリによっては他のデータベースファイルも必要になるかもしれないので、 MediaLibrary.sqlitedb を含むディレクトリ全体をコピーしておくとよいかもしれない。

[Vim]改行やタブで置換する

改行やタブを置換対象とする場合、正規表現のパターンには \n (改行文字) や \t (タブ文字)を使うが、置換先の文字列で改行文字やタブ文字を指定する場合にはこの表記は使えない。
置換後の文字列に改行文字やタブ文字を使う場合は、 Ctrl-v return および Ctrl-v tab で入力する。このときの画面上の表示は ^M (改行文字) ^I (タブ文字)となる。

[Git]除外ファイルを指定する

Macで自動生成される .DS_Store などのような不要なファイルを常にGitリポジトリから除外するように設定する方法。

特定のファイルをGitリポジトリに追加しないように設定するには、リポジトリのトップディレクトリに .gitignore というファイルを作成して、そこに除外したいファイルの名前を列挙する。
また、ローカルマシン上の全部のリポジトリに適用したい場合には、ホームディレクトリに .gitignore ファイルを置く。 .DS_Store はホームの .gitignore に書いておくとよい。