いろいろ悩むことがあって、ここ一ヶ月くらい、ずーっと『情熱プログラマー』を携帯していた。
趣味プログラマーであれ職業プログラマーであれ、プログラミング好きならGitHubをチェックしてるはずだし、GitとかRubyとかPythonとかTDDとかに興味あってしかるべきだと思うんだけど、世の中にはそうじゃない人も結構いる。
“Love It or Leave It” を簡単に実行できたらどれだけ楽だろう。
いろいろ悩むことがあって、ここ一ヶ月くらい、ずーっと『情熱プログラマー』を携帯していた。
趣味プログラマーであれ職業プログラマーであれ、プログラミング好きならGitHubをチェックしてるはずだし、GitとかRubyとかPythonとかTDDとかに興味あってしかるべきだと思うんだけど、世の中にはそうじゃない人も結構いる。
“Love It or Leave It” を簡単に実行できたらどれだけ楽だろう。
youpyさん作のiTunesで聞いてる曲のレートが5だったらLast.fmに "Love" を送信してくれるやつを試してみようとした。cronで2分間隔とかで回して使うやつ。
なんで二年近く前のやつを今頃使ってみようとしたのかというと、二年前はRubyとかUnixのことが全然分かんなくてブックマークしただけだったから。いまは多少はRuby分かるし、crontabの使い方も分かるので、いましかないと思ったわけです。
git clone git://gist.github.com/58251.git
cd 58251
ruby love.rb
初回起動時にはLast.fmのAPIキーやTokenを入力するようにコンソールにメッセージが表示される。その後こういうエラーが出てしまった。
/Library/Ruby/Gems/1.8/gems/rubyosa-0.4.0/lib/osa.bundle: dlopen(/Library/Ruby/Gems/1.8/gems/rubyosa-0.4.0/lib/osa.bundle, 9): no suitable image found. Did find: (LoadError)
/Library/Ruby/Gems/1.8/gems/rubyosa-0.4.0/lib/osa.bundle: no matching architecture in universal wrapper - /Library/Ruby/Gems/1.8/gems/rubyosa-0.4.0/lib/osa.bundle
from /Library/Ruby/Site/1.8/rubygems/custom_require.rb:29:in `require'
from /Library/Ruby/Gems/1.8/gems/rubyosa-0.4.0/lib/rbosa.rb:29
from /Library/Ruby/Site/1.8/rubygems/custom_require.rb:34:in `gem_original_require'
from /Library/Ruby/Site/1.8/rubygems/custom_require.rb:34:in `require'
from love.rb:71:in `initialize'
from love.rb:61:in `new'
from love.rb:61:in `get_instance'
from love.rb:34:in `main'
from love.rb:206
なんかアーキテクチャが違うとかそれ系のエラーメッセージが出ている模様。そもそもRubyOSAって何なんだろうと思って調べてみたら、以下にたどり着いた。
なるほど、Appleが用意してるRubyからMac OS Xのイベントとかを管理できるようにするやつか。RubyをAppleScript的な使い方が出来るようにするらしい。Snow Leopard発売前の2007年に出たVersion 0.4.0で開発止まってるみたいだし、64bit化したSnow Leopardでは使えないってことなんだろうか。いや、64bit化する前のMacBook黒からTimeMachineでデータを引き継いでるから、アーキテクチャに合わないRubyOSAが入ったままになってるのかもしんない。「10.6 Snow Leopard と RubyOSA のインストール - Numata Designed Factory」 という記事を参考に、RubyOSAを入れ直してみることにした。
svn checkout svn://rubyforge.org/var/svn/rubyosa
cd rubyosa/trunk
cat src/rbosa.c | (rm src/rbosa.c; sed "s/c ID/c RB_ID/g" > src/rbosa.c)
ruby extconf.rb
make
sudo make install
sudo make install-extras
インストール後、再度 ruby love.rb
を実行してみた。しかし今度は以下のようなエラーが出る。
/Library/Ruby/Site/1.8/rbosa.rb:470: warning: Passing no parameters to XML::Parser.new is deprecated. Pass an instance of XML::Parser::Context instead.
XML::Parser#string is deprecated. Use XML::Parser.string instead
/Library/Ruby/Site/1.8/rbosa.rb:558:in `__send_event__': Cannot send Apple Event 'coregetd' : procNotFound (-600) (RuntimeError)
from /Library/Ruby/Site/1.8/rbosa.rb:558:in `player_state'
from love.rb:77:in `playing?'
from love.rb:36:in `main'
from love.rb:206
どうも古いバージョンの libxml
を使わないとエラーが出るらしい。今度は「RubyOSA 0.4.0を使おうとしたのですが、Bus Errorが発生 - Watsonのメモ」という記事を参考に以下のようにした。
diff /Library/Ruby/Site/1.8/rbosa.rb /Library/Ruby/Site/1.8/rbosa.rb.org
39c39
< gem 'xml/libxml', '= 0.3.8.4'
---
> require 'xml/libxml'
とりあえず、irbでrbosaをrequireしてもエラーは出なくなった。
irb -r rbosa
>> itunes = OSA.app('iTunes')
=> <OSA::ITunes::Application:0x10173bb38 desc="'sign'($6B6F6F68$)">
iTunesでレートは★★★★★だけどLast.fmで "Love" マークが付いてない曲を再生しながら、もう一度 ruby love.rb
してみたところ、 {"status"=>"ok"}
が返ってきた。ちゃんとLast.fmで "Love" されてた。iTunesで音楽を聴いてるときにcronで回してあげれば常にレート5の曲をLast.fmで "Love" してくれるようになる。Launch Daemon化とかはやり方が分からないのでそのうち調べる。
VPSが安くなってきてるということなので使ってみることにした。自宅サーバーも一瞬考えはしたが、夏の発熱や騒音のことを考えるとVPSで十分かなという気がした。いま借りてるレンタルサーバーのDreamhostにはおおむね満足してるんだけど(ディスク容量・転送量無制限)、rootになれるかどうかはやっぱり大きい。あとDreamhostはsshでシェルにログインしたときのわずかなタイムラグが地味に気になる(zshでTab補完するときとか)。さくらVPSは速い回線から接続すればローカルのシェルと同じくらい速い。
OSはデフォルトだとCentOSなので、Ubuntuに入れ替えた。HDD容量は20GBだけど、普通にホームページ作ったり小さなプログラムを動かすくらいだったら十分かなと思う。
昼に公園で弁当を食べた。弁当箱を広げるとすぐに一羽のカラスがやってきた。追い払おうかとも思ったが、動きがおかしいことに気がついた。よく見ると片方の足が不自由なようだった。右足を引きずるようにして歩いている。普通のカラスならちょっと弁当を分けてやろうなんて全然思わない。むしろ害鳥にえさを与えるなんて忌むべき行為だと思ってる。でもこのカラスは足が不自由で、痩せていて、おまけに今日はとてつもなく寒かった。だから弁当に入っていたフジッリを一つ投げてやった。するとその様子を見て、後から後からカラスがどんどんやってきた。みんながこの弁当を狙っている。もう一度足の不自由なカラスに与えようとパスタを投げたら、体躯の良い力強いカラスが横から飛び込んできて、足の不自由なカラスを突き飛ばすようにして奪って食べた。そこで今度は、エビフライの尻尾の部分をわざと遠い位置に投げて、ほかのカラスがそちらに群がっている隙にパスタを足の不自由なカラスに与えた。カラスがうまそうにパスタを食べているのを眺めながら弁当箱を包み直し、会社に戻った。今夜は冷える。あの足の不自由なカラスはこの冬を越せるのだろうか。
『ソーシャル・ネットワーク』、面白かったです。マーク・ザッカーバーグよかった。真冬なのに短パン、サンダルで登校し、アイディアが思いついたら早速寮に帰ってもくもくとプログラムを書く。ルームメイトとアイディアを出し合い、窓にアルゴリズム式を書き、ああでもないこうでもないと徹夜で開発を行う。 “wget” やら “Emacs” やらみたいな単語が飛び交い、見る人の創作意欲を刺激する良い映画でした。サンデープログラミング頑張ろうという気にさせられました。ウェブ好きっ子は見て損はないです。
ポータルシットをリニューアルしようかと思ってます。ブログプラットフォームは2003年の時点で完成されてて、P_BLOGの提供する機能に不満なところはないんだけど、コメント欄を含むP_BLOGのMySQLのデータをうまい具合に移行して作り直したらいろいろ勉強になるだろうなと思って。目指してるのはRESTfulであることと、シンプルであること、Ruby製であること。RubyベースのCMSかRailsで置き換えようと思います。納期は未定。
23才のときに買ったカラマーゾフの兄弟(全4巻)はまだ1巻目の100ページまでしか読んでない。