Node.jsで標準入力がパイプかどうか判定する

例えば入力ファイルの行数をカウントするlinecount.jsっていうのがあったとして

$ node linecount.js foo.txt

っていう使い方と

$ cat foo.txt | linecount.js

って両方に対応したいときNode.jsではprocess.stdin.isTTYを使えば判定できる。

if (process.stdin.isTTY) {
  // $ node linecount.js foo.txt
  // みたいに実行した時の処理
}
else {
  // $ cat foo.txt | linecount.js
  // みたいに実行した時の処理
}

HTMLでリンクを押した時にリファラを付けないようにする

<a href="http://example.com/" rel="noreferrer">link</a>

のように rel="noreferrer" をつければリンク先のリクエストに対してリファラを付与しないらしい。Chromeでしか確認してないからブラウザ対応はよくわからん。

仕様もある。
http://www.whatwg.org/specs/web-apps/current-work/multipage/links.html#link-type-noreferrer

開発中にリファラがあるとどうしても不便な状況になって見つけた。

vimのBundleでインストールしようとしたらエラった

最近vimの設定とか全然いじってないんだけどひさびさにプラグイン追加してBundleInstall実行したらなんかエラった。

Cloning into /Users/hokamura/.vim/bundle/vim-coffee-script...
error: Malformed value for push.default: simple
error: Must be one of nothing, matching, tracking or current.
fatal: bad config file line 21 in /Users/hokamura/.gitconfig

push.default: simpleがダメらしい。普通にgit使ってる分には動いてるからなんでだろうと思ったらvimに /usr/local/bin へのパスが通ってなくて /usr/bin/git を見てて、こいつのバージョンが古くてsimple対応してないのでエラったみたい。

vimの設定いじる元気がないのでBundleInstallのときだけpush.defaultの設定をコメントアウトした。

rbenvでruby2.0.0-p0のインストール

ruby-buildをアップデートしたら

$ brew update
$ brew upgrade ruby-build

2.0.0-p0がきてたので

$ rbenv install
...
2.0.0-p0
...

インストールしようとしたらエラった。

$ rbenv install 2.0.0-p0
Downloading openssl-1.0.1e.tar.gz...
-> https://www.openssl.org/source/openssl-1.0.1e.tar.gz
Installing openssl-1.0.1e...
Installed openssl-1.0.1e to /Users/xxx/.rbenv/versions/2.0.0-p0

Downloading ruby-2.0.0-p0.tar.gz...
-> http://ftp.ruby-lang.org/pub/ruby/2.0/ruby-2.0.0-p0.tar.gz
Installing ruby-2.0.0-p0...

BUILD FAILED

Inspect or clean up the working tree at /var/folders/8c/vgm8fdh97qd4y3c61wd2003m0000gn/T/ruby-build.20130225075459.58371
Results logged to /var/folders/8c/vgm8fdh97qd4y3c61wd2003m0000gn/T/ruby-build.20130225075459.58371.log

Last 10 log lines:
installing default gems:      /Users/xxx/.rbenv/versions/2.0.0-p0/lib/ruby/gems/2.0.0 (build_info, cache, doc, gems, specifications)
                              bigdecimal 1.2.0
                              io-console 0.4.2
                              json 1.7.7
                              minitest 4.3.2
                              psych 2.0.0
                              rake 0.9.6
                              rdoc 4.0.0
                              test-unit 2.0.0.0
The Ruby openssl extension was not compiled. Missing the OpenSSL lib?

OpenSSLをインストールして

$ brew install openssl

configureのオプションを指定したんだけどエラーメッセージが変わった。

$ RUBY_CONFIGURE_OPTS="--with-openssl-dir=`brew --prefix openssl`" rbenv install 2.0.0-p0
Downloading ruby-2.0.0-p0.tar.gz...
-> http://ftp.ruby-lang.org/pub/ruby/2.0/ruby-2.0.0-p0.tar.gz
Installing ruby-2.0.0-p0...

BUILD FAILED

Inspect or clean up the working tree at /var/folders/8c/vgm8fdh97qd4y3c61wd2003m0000gn/T/ruby-build.20130225085320.23480
Results logged to /var/folders/8c/vgm8fdh97qd4y3c61wd2003m0000gn/T/ruby-build.20130225085320.23480.log

Last 10 log lines:
    0 enumerator.so

[NOTE]
You may have encountered a bug in the Ruby interpreter or extension libraries.
Bug reports are welcome.
For details: http://www.ruby-lang.org/bugreport.html

make: *** [.rbconfig.time] Abort trap: 6
make: *** Waiting for unfinished jobs....
make: *** [encdb.h] Abort trap: 6

そういえばOSX LionのデフォルトのGCCllvm-gcc)だとこけるんだっけと思ってgcc-4.2を指定したらできた。

$ CC=/usr/bin/gcc-4.2 RUBY_CONFIGURE_OPTS="--with-openssl-dir=`brew --prefix openssl`" rbenv install 2.0.0-p0
Downloading ruby-2.0.0-p0.tar.gz...
-> http://ftp.ruby-lang.org/pub/ruby/2.0/ruby-2.0.0-p0.tar.gz
Installing ruby-2.0.0-p0...
Installed ruby-2.0.0-p0 to /Users/hokamura/.rbenv/versions/2.0.0-p0
$ rbenv local 2.0.0-p0 
$ ruby -v
ruby 2.0.0p0 (2013-02-24 revision 39474) [x86_64-darwin11.4.2]

ヤッター。

キーワード引数使えちゃうぜー!ひゃほう!

$ irb
irb(main):001:0> def foo(a: 'b', c: 'd')
irb(main):002:1>   puts a
irb(main):003:1>   puts c
irb(main):004:1> end
=> nil
irb(main):005:0> foo(a: 'hoge')
hoge
d
=> nil

次にbundler入れて適当にインストールしてみようと思ったら

# Gemfile
source 'https://rubygems.org'

gem 'rails'
$ gem install bundler --pre
$ bundle install --path vendor/bundle
Unfortunately, a fatal error has occurred. Please see the Bundler 
troubleshooting documentation at http://bit.ly/bundler-issues. Thanks!

/Users/hokamura/.rbenv/versions/2.0.0-p0/lib/ruby/2.0.0/net/http.rb:917:in `connect': SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed (OpenSSL::SSL::SSLError)
...

なんかSSLでエラった。

証明書の問題っぽいのでググったら次のよう証明書を設定すればいいらしい。

$ brew install curl-ca-bundle
$ cp /usr/local/Cellar/curl-ca-bundle/1.87/share/ca-bundle.crt /usr/local/etc/openssl/cert.pem

これでbundle installもデキター

CharlesでProxyするときのSSL証明書

CharlesでSSLをProxyするときに証明書のエラーでサイトがみれないときは以下の「Charles CA Certificate bundle」というリンクから証明書をダウンロードしてキーチェーンに登録すると見れるようになる。
http://www.charlesproxy.com/documentation/using-charles/ssl-certificates/