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

Ruby 1.9.2-p290 がリリースされたので入れてみた。RVMで。

$ rvm install 1.9.2 --with-readline-dir=/usr/local #homebrewで入れたreadlineのパスを指定
$ rvm migrate ruby-1.9.2-p180 ruby-1.9.2-p290

migrate を実行したところ、警告が出ながらも次のような感じでマイグレーションは完了した。

$ rvm migrate ruby-1.9.2-p180 ruby-1.9.2-p290
Are you sure you wish to MOVE gems from ruby-1.9.2-p180 to ruby-1.9.2-p290?
This will overwrite existing gems in ruby-1.9.2-p290 and remove them from ruby-1.9.2-p180 (Y/n): Y
Moving gemsets...
Moving ruby-1.9.2-p180 to ruby-1.9.2-p290
Making gemset ruby-1.9.2-p290 pristine.
ERROR: Error running 'rvm gemset pristine' under ,
please read /usr/local/rvm/log//gemset.pristine.log
Moving ruby-1.9.2-p180@global to ruby-1.9.2-p290@global
Making gemset ruby-1.9.2-p290@global pristine.
ERROR: Error running 'rvm gemset pristine' under ,
please read /usr/local/rvm/log//gemset.pristine.log
Do you wish to move over aliases? (Y/n): Y
Do you wish to move over wrappers? (Y/n): Y
Do you also wish to completely remove ruby-1.9.2-p180 (inc. archive)? (Y/n): Y
Successfully migrated ruby-1.9.2-p180 to ruby-1.9.2-p290

一見、問題なく移行できたように思えるのだけど、この後rakeなどexecutableなgemをコマンドラインから実行すると以下のようなエラーが出る。

zsh: /usr/local/rvm/gems/ruby-1.9.2-p290/bin/rake: bad interpreter: /usr/local/rvm/rubies/ruby-1.9.2-p180/bin/ruby: no such file or directory
rake aborted!
No Rakefile found (looking for: rakefile, Rakefile, rakefile.rb, Rakefile.rb)
/usr/local/rvm/gems/ruby-1.9.2-p290/gems/rake-0.8.7/lib/rake.rb:2377:in `raw_load_rakefile'
(See full trace by running task with --trace)

shebangに書いてあるrubyのパスがmigrate時に削除した ruby-1.9.2-p180 なのが問題なわけだ。

正しい対処方法かどうかは自信がないが、Rubyでサクサクッとshebangを書き換えるやつを書いた。以下みたいなやつ。

こいつを実行してやるとshebangが正しく書き換わったexecutableなgemができる。万が一のためにbackupファイルを作るのでこれをzshで rm *_backup とかしてやるといいと思います。

と思ったけど、結局↑のRubyの入れ方はまずいみたいで、jekyllとかCライブラリに依存する系のgemが動かなくなってしまったので rvm implode してRVMをまるっと入れ替えた(20回くらいRubyをインストールしなおした)。次の記事にでも書きます…。

| @雑談

2011年7月の阿蘇

IT企業は都会に多いけど、田舎にもあればいいのに、と思う。というのは帰省していて阿蘇が大変過ごしやすかったから。福岡では僕のようなおっさんが夜寝て朝起きただけで顔や頭がアブラべっちょりになるけど、阿蘇ではそのような悲劇は起こらない。涼しいから。日中も過ごしやすく、エアコンなしで快適に積ん読や2chまとめサイト巡回がはかどる。節電とかバカみたいだった。

| @雑談

E-19PL was mine

6年前に買ったゴルフ2を手放した。

所有していたゴルフ2はE-19PLという型番で、GTIというラインだった。時の流れと重力と金のなさには抗えず、福岡に引っ越したことや経済面で維持が難しくなって、四度目の車検を前に手放した。査定はゼロ円だったので無料で買い取り業者に引き取ってもらった。

大学を出て実家に帰り、病気が治って一度目の退院をした後にばあちゃんに買ってもらったのがこのゴルフ2だった。その後病気が再発したため、G-CSF注射による骨痛や倦怠感に耐えながらゴルフを運転して通院したり、病気が治ってからは天気が良いとばあちゃんを連れて久住をドライブしたり、就職してからは毎日の通勤のほか九州各地の映画館に映画を見に行ったりと、20代の大半の時間はゴルフと一緒だった。

希少な3ドアのゴルフ2 GTIをあっけなく手放したことは後ろめたくもある。買い取り業者はスクラップにはしないと言っていたけど、こんな感じで手放すくらいなら誰か欲しい人を探して直接譲れば良かったと思う。

最後一年は洗車すら満足にしてあげられなかったが、本当に楽しかった。ありがとう。

| @雑談

福岡のいいところ

  1. 住職近い
    庶民でも会社まで15分のとこに住める。
  2. 食べ物安い
    3500円飲み放題で吐きそうなくらい食べ物出てくる。九州各地から届く生鮮食品も安い。
  3. 街がせまい
    移動が楽。海沿いに繁華街があるため土地が平ら。自転車で移動できる。
  4. 電車が空いてる
    朝の通勤時間帯も金曜の夜の終電もがらがら。
  5. 自然がある
    離れ島みたいなとこまで船ですぐ遊びに行けるしわりと都会なのに自然が豊富。
  6. 空港が近い
  7. 勉強会たくさんやってる
    ウェブ系のコミュニティが活発。

福岡の悪いところ

  1. ラーメン二郎がない
    インスパイア系しかなくて高い。
  2. 街が狭い
    悪いことすると町中に知れ渡る。
  3. やくざの抗争
    手榴弾怖い。
  4. 飲酒運転
    あぶない。
  5. 恫喝大臣
    コンセンサス得ろよ。
  6. けむい。
    屋台でたばこ吸う客うざい。
  7. 給料安い
    物価が安いので。

| @労働

こういう会社で働けたら幸せだろうなと思います。

理想の会社

  1. Gitでソースコード管理している。
  2. 会社のGithubアカウントがある。
  3. 外部に公開されている技術ブログがある。
  4. IDEよりVimやEmacsを使うことが奨励されている。
  5. 社員が勉強会に参加することを奨励している。
  6. オープンソースコミュニティに貢献している。
  7. 音楽を聞きながら仕事できる。
  8. Rubyで開発できる。
  9. 会議が短い。
  10. アジャイル開発を実践している。
  11. テストコードがある。
  12. エンジニアは全員ノートパソコンで開発して、好きかってに席を替わってペアプログラミングとかやってる。
  13. MacとLinuxしかない。
  14. 優秀なデザイナーがいる。
  15. でかい本屋が近くにある。
  16. プログラムを書くことが好きな人たちが集まっている。
  17. SEという肩書きの人がいない。
  18. 大所帯でない。
  19. 金曜の夜はみんなはやく帰る。
  20. イスに金をかけている。
  21. 社員がfoursquareで会社のMayorの座を競い合っている。

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

Lokkaで /article.php?id=数字 なURLへのアクセスをリダイレクトできました。

SinatraではURLの ? 以降のクエリストリングは request.query_string というオブジェクトの中に入るらしい。そういうわけなので次のようなコードでリダイレクト処理してます。

module Lokka
  module RedirectArticles
    def self.registered(app)
      app.get %r{/article.php} do
        unless request.query_string.empty?
          /id=(d+)?/ =~ request.query_string
          redirect "/#{$1}", 301
        end
      end
    end
  end
end

Sinatra、Lokka越しで初めて本格的に利用させもらってますけど便利ですね。

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

ポータルシットをLokkaで置き換えました。

Lokkaでリプレースしようと決めたのが2月8日なので(たぶんLokka - portal shit!)、5ヶ月弱要したことになります。

今回こだわったのが、

  1. P_BLOGから記事本文はもちろん、コメントも移行する
  2. 移行スクリプトはテスト駆動で開発する
  3. Markdownで本文を書けるようにする
  4. 旧記事へのアクセスをリダイレクトする (未実装)

の4点。

TDDデビュー

移行スクリプトについては初めてテストファーストで開発してみましたが、なかなか勉強になりました。やたら長いメソッドを書かないように気を付けたり。長いメソッドはテストしにくいですね。あと途中でLokkaの仕様不足が露呈してコードを書き直したりしたんですが、そういうときもきちんとテストを書いているおかげで、一ヶ所変更したらプログラム全体がぶっ壊れるというような事態を避けることができ、大変良かったです。

herokuデビュー

最初はさくらVPSで運用しようかと思っていましたが、herokuで簡単に使えるのがLokkaの売りなわけですし、heroku使ったことがないのは若干まずいだろと思っていたのでとりあえずherokuで運用することにしました。楽でいいです。失業者が出るレベル。

ただ旧記事(/article.php?id=***)へのアクセスをリダイレクトするつもりで移行スクリプト書いたりしてたんですが、herokuで運用する限りにおいては nginx.conf を編集したりできないのでリダイレクトは実現できなそう。Sinatraで拡張子phpへのアクセスをリダイレクトするという変態的な処理はできないのでしょうか。クエリストリングの扱いがネックになりそう。場合によっちゃ結局さくらVPSで運用するかもです。

加えてherokuは画像のアップロードができないので、画像のアップロード先は別に用意する必要があります。プラグイン使ってAWSをストレージとして利用するとか。JAWS九州の勉強会に二回ほど参加して、Amazonのエバンジェリスト玉川さんの話とか聞いてAWS使わないと来年の今頃は失業してそうな空気を感じ取ったのでそのAWSにも手を出してみたいですね。

まとめ

Lokka、プラグインが簡単に作れるので本体のロジックにほとんど変更を加えることなくいろいろできて楽しいです。Sinatraベースなので困ったことがあったらSinatraのドキュメントを見ると大体なんとかなりそうな感じがします。リストカット感覚でブログ作ったり消してる人におすすめです。