| @技術/プログラミング
本当は tech.portalshit.net に書くべきネタなのかもしんないけど jekyll 動かすのだるいのでここに書きます。

Node.jsをMacにインストールしてたんだけど(何にも使ってなくてただインストールしてただけ)、NodeがVersion 0.5くらいになってからインストールに失敗するようになった。gcc関連のエラーが出てるっぽい。なんかXcode 4.2が悪いとかネットを検索すると出てくるので、削除してosx-gcc-installer入れたりしたけど結局変わらずだった。Xcodeのバージョンを落として4.1にしてみたりもしたけど効果がなかった。

OS入れ直すしかないかなー、めんどくさいなーと思っていたところ、 `brew doctor` したときの画面を見てたら、「homebrewで入れたopensslとreadlineにシンボリックリンクがはってあってPATHが通ってるから消しとけや」みたいな警告が出た。readlineやopensslはRubyを自分でインストールするときに必要なので入れてた。まさか関係あるとは思っていなかったので `brew doctor` したときに出るこの辺の警告は無視してたんだけど、警告に従って `brew unlink readline; brew unlike openssl` してみたらすんなりNode.jsがインストールできた。

というわけでして、homebrewで入れたreadlineとかopensslを /usr/local 以下にシンボリックリンクするとインストールに失敗するソフトもあるようですので、皆様におかれましてはご注意下さい。

| @技術/プログラミング

Railsで建物名みたいなカラムに building ってのを当ててたら

ActionView::Template::Error (no block given (yield)):

みたいなエラーが出るんですけど、Railsで building って予約語なんですかね。

なんか Rails Wiki のReserved Words You Can’t Use は真っ白だし、古い方のWikiの予約語一覧 にも building は入ってないし。

とりあえず複数形にして対応したけど気持ち悪い。

追記

どうやらMongoidに起因するエラーのようです。

| @技術/プログラミング

RVM、便利に使わせてもらっていたけど、Rubyの新しいのがリリースされるたびにいろいろアレだったので rbenv を使ってみることにした。移行、しんどいかなと思ってたけど非常に簡単で大変よかった。

RVMのキモさ

RVMの悪いところはググればいろいろ出てくるけど、OSの cd やRubyの gem コマンドをシェルスクリプトで置き換えるとか、行儀が悪いところが問題らしい。個人的に気にくわなかったのがRVMがどんどんでかくなっていって、Rubyのビルドに必要なパッケージまで管理できるようになったところとか(.rvm以下に新しくシステムができるみたいな感じがキモかった)、パッケージインストール用のコマンドがhelpドキュメントでは rvm package install なのに rvm pkg install にいつの間にか変わっていて訳がわからないところとか、よくわからないシェルスクリプトがログイン時に実行されるところとか、 rvmsudo っていうコマンドのキモさとかいろいろ。

rbenv

rbenvはRubyのバージョンを切り替えるためのツールなのでインストールはやってくれないけど、ruby-buildというツールを別に入れることで、 rbenv install 1.9.2-p290 とかでRubyのインストールもこなしてくれるようになる。

あまりRVMを使いこなしてたとはいえなかった自分にとってはrbenvくらいでちょうどいいような感じがする。gemsetとか使わんし。そんくらいだったBundler使うし。

インストールは以下のページが参考になります。

なおrbenvはRubyインストール時のconfigureオプションの指定方法が特殊です。直接は指定できないようなので以下のようにします。(homebrewでインストールしたreadlineとiconvのパスを指定する例)

$CONFIGURE_OPTS="--with-readline-dir=/usr/local --with-iconv-dir=/usr/local" rbenv install 1.9.2-p290

デフォルトのオプションなしのRubyだとearthquake.gemが動かなかったりjekyllが使えなかったりするので僕は↑のオプションを追加しました。よろしかったらお試し下さい。

| @労働

申し遅れましたが先月末からペパボで働いてます。Ruby on Railsで開発してます。社内IRCがあってVimやEmacs使ってる人がごろごろいて居心地いいです。前の会社よりも早く帰れるようになったのでNEETの頃みたいに毎日ブログ更新したいですね。以上、よろしくお願いいたします。

| @Mac/iPhone

仕事するときはWindowsでもLinuxでもVimを使っているので、最近ではVimが手足のようになっています。エレベーターに乗るときも j k を押そうとしてしまうほどです。しかしMacでコードを書くときはTextMateも使ってしまいます。TextMate Bundleが提供するスニペットや + R でスクリプトを走らせる機能とかやはり便利ですね。

しかしVimが手足のようになってる皆さんならお分かりいただけるかと思いますが、Vimmerは口より先に j k を連打してカーソルを動かそうとしますし、Ctrl + uCtrl + d による高速スクロール、Visualモードによる選択・一括編集、 #* を利用した検索なしのテキストエディティングなんて苦痛でしかないわけなんですね。

TextMateでVimのキーバインディングが使えないかなー、あるいはVimの中でTextMate Bundleが使えないかなー的なことを夢想していたら、それを実現しているテキストエディタがあったわけですよ。Vicoってやつでした。春頃チェックしてたんだけど、先日、「TextMate vim keybinding」みたいキーワードで検索していて改めてその存在を知ったので試用版をダウンロードして使ってみた次第です。まんまTextMate + Vimという感じ。

TextMateとの相違点としては、

  • Vimキーバインディング(Vimが使えない人には多分使いにくい)
  • デフォルトで日本語に対応!!!
  • デフォルトでサイドドロワーがついてる
  • ウィンドウ分割あり!!!

良くできてる点

  • TextMate Bundleが利用できる
  • GUIエディタとCLIエディタの長所をうまい具合に統合している。
  • TextMate同様、カスタムシェル変数を設定できる。
  • 従って + R でスクリプトを走らせるときに TM_RUBY という具合にシェル変数を設定しておくことで、RVMのRubyを実行時のインタープリタとして利用できる。

気になる点

  • テキストをインサートモード時にバックスペースで削除すると、削除するつもりのない文字を一文字余計に削除する
  • .vimrc を見て機能を拡張された状態のVimを使えるわけではなさそう
  • upコマンド(テキストが変更されていれば保存する機能)が使えない
  • なんとなく動作が不安定

このように気になる点がないわけでもないので、Vicoで書いていたこのテキストを途中でVimに切り替えて書いてしまっちゃった。Vimは .vimrc にごちゃごちゃ書いたりプラグインをインストールして始めて快適に使えるようになるので、キーバインディングだけviライクでもVimそのものの機能を提供してくれるわけではないVicoは、生粋のVimmerからするとちょっと使いにくいところがありますね。

それでも「j k 連打したい!」というVimmerの切実な欲求は満たしてくれますので、TextMate Bubdleは手放したくないというVimmerの皆様にはおかれましては導入をご検討いただければと思います。Mac App Storeで3540円ですが、以下から試用版がダウンロードできます。

| @技術/プログラミング

JekyllはLiquidというRubyのテンプレートエンジンを採用してるんですが、Liquid内でLiquidの文法をエスケープする方法が分からず大変苦しんでおりました。Jekyllの公式のDocument呼んでもXML出力時とかCGI出力時にコンテンツをエスケープする方法は書いてあるのに、Liquidテンプレート自体をエスケープする方法が書いてなく、大変不満でした。しかしその方法が分かったのでお知らせいたします。元ネタはスタックオーバーフロー。

例えば {{ "{% this " %}}} と表示させたかったらこうやります。

{{ "{% this " %}}}}

ちょっとトリッキーですね。

Pygmentsと組み合わせて使うことも可能ですが、いちいち {{ "{% highlight " %}}} のなかでコメントアウト処理をしてあげないといけないません。面倒くさいですね。

| @技術/プログラミング

Jekyllを使いだしてから気がつくと一年経ってました。いろいろ便利に使えており気に入っております。

PygmentでコードをシンタックスハイライトしたりLSIで関連記事表示したりと結構手を入れてはいたんだけど、いわゆる世間の一般のブログにあるようなカテゴリ一覧表示機能と、カテゴリごとの記事アーカイブ機能がなくて、それを若干不便に思っておりました。

ググってみたところ、プログラマー向けなブログツールなだけあっていろんな方法が出てきました。以下そのまとめ。

カテゴリ一覧

JekyllのLiquid (テンプレート言語) には {{ "{{ sites.categories " }}}} みたいタグがあるんだけど、こいつが意図したとおりに動かない。普通のRuby使いの感覚からすると site.categories ってカテゴリを沢山持った配列になってそうな気がするんだけどこれが違う。

<ul>
{{ "{{ for category in sites.categories " }}}}
  <li>{{ "{{ category.name " }}}}</li>
{{ "{{ endfor " }}}}
</ul>

↑みたいな感じのコード書くと何も表示されない。 site.categoires はHashで、{ "カテゴリ名" => カテゴリ内の記事一覧 } みたいな構造になってる。LiquidでHashのキーを取りだす方法が分からず、どうにもこうにもいかなかったので他の人が作っているプラグインを利用することにした。

↑のファイルを JEKYLL_ROOT/_plugins にコピーする。(_plugins というディレクトリがなければ作る)。そんでテンプレートを変更する。↑のやつを↓みたいにする。

<ul>
{{ "{{ for category in sites.iterable.categories " }}}}
  <li>{{ "{{ category.name " }}}}</li>
{{ "{{ endfor " }}}}
</ul>

2行目のところが変更点です。これでカテゴリ一覧表示ができるようになる。

カテゴリごとの記事一覧

カテゴリごとの記事一覧を表示する方法だけど、こういうのを発見した。

ここの generate_categories.rb を使えばカテゴリ内の記事一覧を作成できる。こんな感じ。

これもさっきのと同じように、JEKYLL_ROOT/_plugins にファイルをコピーする。そんでLiquidテンプレートを書き換えるんだけど詳細はプラグイン内の記事をご確認くだしあ。