youpyさん作のiTunesで聞いてる曲のレートが5だったらLast.fmに “Love” を送信してくれるやつを試してみようとした。cronで2分間隔とかで回して使うやつ。

gist: 58251 - love ☆☆☆☆☆ track

なんで二年近く前のやつを今頃使ってみようとしたのかというと、二年前は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って何なんだろうと思って調べてみたら、以下にたどり着いた。

RubyOSA: Ruby/AppleEvent Bridge

なるほど、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化とかはやり方が分からないのでそのうち調べる。

Alfred

Quicksilverのかわりに入れた。インターフェイスはお洒落。

PowerPack(£12)を購入すればディレクトリの閲覧やアクションの選択など、Quicksilver的な機能が使えるようにはなるけど、やはりQuicksilverに比べたら機能は少ない。特にQuicksilverのTriggersに相当する機能(ホットキー)がないのが移行してすぐは不便だった(iTunesの操作はすべてQuicksilverのTriggers経由で行っていたので)。

Alfredは日本語が通る

日本語が通るのは便利だ。例えばAddress Bookの人名検索をするとき。いちいちAddress Bookを開かず、Alfredの入力画面を呼び出して人名を入れるだけで検索できる。こんな感じ。

ただ、日本語が通るためTerminal.appなど、日本語環境で起動したときアプリケーション名がカタカナになってるソフトの起動時に日本語で呼び出さなきゃいけないのが地味に面倒くさい。Quicksilverでは「terminal」と入れれば良いものを、Alfredでは「ta-minaru」と入力した後、スペースキーでカタカナに変換し、さらにリターンキーで確定しないといけない。Terminal一つ起動するのになんでここまで苦労しなければならないのかと泣けてくる。

なんかネガティブな感想が多くなってしまったけど、事実上Quicksilverは開発止まってるし、Mac OS Xのアップデートである日いきなり使えなくなることも考えられるので、Quicksilverに依存しきりの人はランチャーの「次の選択肢」を考えておいた方がいいかも。

Divvy

最初はBreezeというソフトの方をmacZOTで知ってこういうウィンドウサイズ管理ソフトの導入を検討してた。Breeze買おうかなと思ってたんだけど、たまたまDivvyの存在を知ってこっちを使ってみたら、HUDっぽいUIで画面サイズを簡単に変更できるところが素晴らしくて、BreezeやめてDivvyを買った。

RubyKaigiで近くに座ってる人のMacBookの使い方を見てたらやたらSpacesでたくさん画面を作って切り替えながら作業してる人が多かった。

Spacesはメモリの量が少ないMacでやると重いので自分は使ってない。そもそもSpacesで複数の画面を切り替えて使っても、例えばブラウザーを見ながらテキストエディターに何かを入力するみたいな作業が必要なときには頻繁にスペースを切り替えなければならず、大変うざい。

一発でアプリケーションウィンドウサイズを変更して左にブラウザー、右にエディターみたいな使い方が出来たら便利だ。DivvyやBreezeならこういうことが出来る。Breezeの場合はウィンドウサイズと位置をあらかじめ登録しておかなければいけないけど、DivvyはHUDポップアップウィンドウを呼び出して、ドラッグで好きなようにウィンドウサイズ・位置を変更できる。こんな感じ。

13インチのMacBook Proは1280×800という解像度のため、データを参照しながらのテキスト入力などでは生産性がいまいちだけど、Divvyなどを使うことでセカンドディスプレイがなくてもデータを参照しながら効率的に入力作業を行うことが出来る。大変素晴らしい。

職場が変わって仕事ではWindows漬けだけど、Windowsにはこの辺の作業を快適にしてくれるソフトが少なくて、改めてMac良いと思う。Terminal内での操作感は基本的にUNIXやLinuxと同じだし。Macで仕事できてる人たちが本当にうらやましい。

家でMacBook Pro 15” (Mid 2009) を使うときはいつもはBoseのM2で音を鳴らしてるので気づかなかったんだけど、たまたま外で内蔵スピーカーを鳴らしてみたら、右側のスピーカーの音の方が大きく聞こえることに気がついた。システム環境設定の「サウンド」から内蔵スピーカーの「バランス」を左いっぱいにしても右側から音が出続けてる。これはいったいどういうことなんだ、保証期間過ぎた後にぶっ壊れたかと思っていろいろ調べてみたら、どうもそういう仕様らしい。

Appleのサポートサイトには、2010年モデルのMacBook Proからサブウーファーが内蔵されているのでそういう仕様だ、という記事が載っかってる。

MacBook Pro (15-inch, Mid 2010):左右のスピーカーのバランス

しかし英語のDiscussion Boardを見ると、2009年の4月にすでに左右の音量バランスの違いに気がついているユーザーがいてスレッドが立っている。

Apple - Support - Discussions - Macbook Pro Speakers are built wrong …

2009年以降のモデルのMacBook Proはサウンドが2.1チャンネルになっており、サブウーファーが追加されているらしい。そしてそのサブウーファーは右側のスピーカーと一体の部品になっており、トラックパッドの右上あたりに位置している(macbook-pro-17-in-bits.jpg (JPEG 画像, 800x600 px))。システム環境設定の「サウンド」から「バランス」で操作できるのは右と左のバランスで、サブウーファーは操作できないそう。つまり音量バランスを左いっぱいにしても右側から音が出続けているように感じるのはサブウーファーのせいというわけ。

Mac OS Xの10.6.4アップデートでMacBook Pro (Mid 2010)の問題は解決されたということになってるらしいんだけど(Mac OS X v10.6.4 アップデートについて)、2009モデルでは全然解決されてないしAppleはなんとかしろや。

Cha-Chingからのデータの書き出し方法について書いときます。

Cha-Chingから他のソフトにCSVでデータを書き出すことが出来ます。ただしテキストエンコーディングがUTF-16と若干特殊なため、取り込み先のソフトで若干の混乱を引き起こすことが予想されます。以下にiComptaへのインポートの手順を記します。

まずCha-ChingでAccountを選択し、File->Export CSV File... でファイルを書き出します。

Cha-Chingが書き出すCSVは情報量が少なく、データはTitleとDateとAmountの三つのカラムしか持たないので、銀行口座やクレジットカードといったアカウントの情報を維持したい場合は、アカウントごとの書き出しが必要になります。そしてそれを各々iComptaにインポートしていく感じですね。

次に書き出したCSVファイルを適当なテキストエディターで開きます。僕はCotEditorを使いました。そんでテキストエンコーディングをUTF-16からUTF-8に変換します。

いよいよiComptaへのインポートです。

まずデフォルトだとテキストエンコーディングがMac OS Romanとかになっていますから、ここをUTF-8に変更します。またCha-ChingからエクスポートされたCSVは日付のフォーマットがyy/MM/ddになので、インポート画面でDate formatも変える必要があります。さらに何行目からデータを読み取るかといった項目もあるので、ここを2行目からにしましょう(1行目はカラム名が書いてあるので)。

次の画面で読み込む各々のカラムがiComptaでどの情報に相当するのかを割り当てます。

そのまんまTitleはTitleに、DateはDateに、AmountはAmountにしてしまえば問題ないです。

以上の手順をアカウントごとに繰り返してやれば綺麗なかたちでCha-ChingからiComptaに移行できます。

なお、Cha-ChingのDBはSQLite3なので、SQL得意な方は sqlite3 ~/Library/Application Support/Cha_Ching_2/Cha_Ching.2ccdb とかしてごにょごにょすると、タグとかカテゴリーとかもっと多くの情報をiComptaに移せるかもしれないし移せないかもしれないです。

お小遣い管理にはCha-Chingを使っていたんだけど、Mac版はずーっとベータ版のままで正式版が公開されず、iPhone版もMac版とは完全な同期を取れないという致命的な欠陥があるため(PayeeとTransaction Titleがごちゃ混ぜになるとか)、iComptaというソフトを使ってみることにした。

iCompta

二週間くらい試用してみたけどわりといい感じだったのでiPhone版とMac版を買ってみた。

Cha-Chingは画面がMac Likeで、iSightで写真を撮ってレシートの内容を保存とか、お金の動きを入力するのが楽しくなる仕掛けがたくさんあった。しかしある期間でいくら収入があっていくら支出したのかが一目で確認できなかった。グラフ表示とかもできない。とりあえず赤字になってないことくらいは分かるんだけど、収入と支出の割合みたいのが分からないので、「今月使いすぎたかもなー」というような使い方ができなかった。

それに対してiComptaはお金の動きがある度にその時点での財産を表示してくれるし、チャートや円グラフも表示してくれて、「どのカテゴリーにいくら使ったか」がわかりやすい。例えば一ヶ月にどれだけ「外食」に金を費やしたかとか、ガソリンにいくら使ったかとか。

またTransactionごとにそのときの残高を表示してくれるので、お金の動きを追いやすい。

正直、見た目のMacっぽさとか入力する気を起こさせるという点ではCha-Chingの方が優れていると思うけど(iComptaは会計ソフト度満点というか、グラフの描画とかがWindowsのアプリケーションっぽい)、いまんところ確実にiPhoneとシンクできてデータを欠損しないのでしばらくこっちを使ってみることにします。

文字コードがSHIFT-JISなHTMLファイルが200個くらいあって、これをUTF-8に変換したいと思っている。iconvとかいうのを使ってTerminalからやる方法を見つけたんだけど、これシェルスクリプトが分かんないとうまくいかないっぽい。というわけであきらめた。

Mac OS Xにはシェルスクリプトが分からない人のためにAutomatorという決まり決まったワンパターンな操作を自動化するソフトがあるのでこれを使おうとした。Photoshopにもこういう機能ありますよね。画像をまとめてリサイズするとかそれ系。

AutomatorはTigerのときとかに少し使ったことあったんだけど、Snow Leopardになってからなんか結構変わってる。ググってみると「Snow Leopardになってさらに便利になった」とか書いてある。しかし全然使い方が分からない。ヘルプファイルの内容からして分からないし、アップルのサポート記事でもリンク切れ起こしてたりしてもう発狂寸前。

単純にHTMLファイルを開いて文字コードをSHIFT-JISからUTF-8に変換して同じ名前で保存して欲しいんだけど、なんか簡単な方法ないですかね?

と、思ってたんだけどすごいのを発見した!!!

MultiTextConverter @ アールケー開発

これはやばい。HTMLを解析して <head></head> 内にメタタグまで入れてくれちゃう!! もうちびりそう!!!

まじ助かったわ〜。さっさとルーティンワーク終わらせて帰ってサッカーに備えよう。

やっぱりタスクをiPhoneから参照したい

いまでもThe Hit ListがMacでは一番好きなタスク管理ソフトだけど、iPhoneアプリがないのがさすがに不満になってきた。朝礼で予定を報告するときとかにタスクリストが見られないのが不便。iPhoneアプリがあればこういうことが可能になる。

The Hit ListのタスクはiCalのTo Doと同期できる。しかしiPhoneのカレンダーはiCalのTo Doの同期に対応してないし、そもそもiPhoneのカレンダーはできがあまりよくない。

2Do

iPhoneのタスク管理ソフトで2Doっていうのがある。これはUIがThe Hit Listに似ててなかなかよさげ。しかもMacのiCalと同期する機能がある(iCalのTo Doと同期できる)従ってiCalを介してThe Hit Listと2Doを同期できるわけだ。

しかしこのやり方には致命的な欠陥がある。The Hit ListはタスクをiCalのTo Doと同期するときに、入れ子になっているタスクの処理がへんてこりんになる。例えば、

タスクA -> タスクB -> タスクC

みたいな構造のタスクがあったとする。この階層構造を保持したまま同期されることを期待するけど、このアイテムがiCalのTo Doになったときは

タスクA:タスクC

みたいな表記になる。これは不便きわまりない。

というわけでせっかく買ったものの2Doには30分くらいで見切りを付けて(Lite版は無料だけどSync機能が使えない)、そして一年以上愛用してきたThe Hit Listも見限って、今後はTaskPaperを使ってみようかと思っている。

iPhone版のTaskPaperについては筆を改めます。