tmaeda 日記

トップ «前5日分 追記

tmaeda 日記

興味の対象は、各種プログラミング言語(Ruby,Objective-C,Scheme,OCaml,Haskellなど)、WebObjects, rails, Linux、Mac、数学、音楽、写真(特に VR)、猫などです。ツッコミは短く鋭く愛を込めて(出典:たださんの日記)。リンクはどうぞご自由に。

アンテナでの更新チェックには、antenna.lirs か、index.rdf をご利用ください。


2009-11-16 (Mon) [長年日記]

_ tumblrimport1.0 を公開

指定したTumblrのポストをtumblr4rでガーッと取って来て、 Spotlight用のインデックスを作成する tumblrimport1.0 というのを公開しました。

起動しっぱなしにしておくと、だいたい24時間置きに Tumblrを取得しなおしてインデックスを作り直しますので、 Dockで右クリックして「ログイン時に開く」してお使いください。

「Googleで site:foo.tumblr.com 付けて検索すりゃー いいじゃん」というツッコミは覚悟しております。 RubyCocoaでCocoaのPluginを作ってみたかっただけなんです。

作成にあたってはRubyCocoaの機能を存分に利用させて頂きました。 データはActiveRecord経由でsqliteで保存したり、ActiveRecordの モデルオブジェクトをCocoaBindingでUIに接続し、 ActiveRecordオブジェクトをUIに表示したり、UIからActiveRecordの データを書き換えたりしてます。 CoreDataよりはActiveRecordの方がだいぶ使い慣れているし、 migration機能とか便利なので非常に良いです。

利用した主なライブラリ: RubyCocoa 1.0.1のちょっと後のtrunk, ActiveSupport 2.2.2, ActiveRecord 2.2.2, yaml_waml 0.3.0, tumblr4r 0.7.2のちょっと後のtrunk(手前味噌)

急募:アイコンデザイナー。

Todo:.tumbiファイル用のQuickLook Pluginも作ってみようかなぁ。RubyCocoaで。

Todo: Snow Leopard 対応、どうしよっかなぁ。希望者が多ければがんばる。

ソースはそのうちgithubに公開予定。RubyConfから帰って来てからかなぁ。

Google Sitesってのを初めて使ってみたけど、どうも使いにくい。 自分でhikiかRedMineでも設置した方がよかった。そのうち移行する。

ダウンロードはこちらから。

みなさんのとこで、ちゃんと動いてます???


2009-09-23 (Wed) [長年日記]

_ RubyによるMacOSXデスクトップアプリケーション開発入門

著者の高尾さんからご献本頂きました。ありがとうございました。

RubyによるMac OS Xデスクトップアプリケーション開発入門 ~Ruby×RubyCocoa/MacRuby×HotCocoa~ RubyによるMac OS Xデスクトップアプリケーション開発入門 ~Ruby×RubyCocoa/MacRuby×HotCocoa~

RubyCocoaをメインで扱った世界で2番目、日本で初めての本。 (ちなみに、世界で1番目の本はProgramming Cocoa with Ruby)。

この本は以下の3部構成になっている。

  • 第1部「はじめてのRubyCocoa」
  • 第2部「RubyCocoaを使ったアプリケーションの開発」
  • 第3部「MacRubyとHotCocoa」

第1部で、Hello world的な簡単なプログラムの作成を通して、 XcodeやInterface Builderでの開発の基本的な流れを掴める。

第2部で、「シークレットマネージャー」というパスワード管理をする 実用的なアプリケーションの作成を通して、より広く深くRubyCocoaでの 開発について学べる。

第3部からはMacRubyの話に変わり、MacRuby 0.4の特徴や MacRuby/HotCocoaでの開発の流れを学べる。

Cocoa の開発では、Xcode、Interface Builderなどの 開発ツールの使い方に慣れるのが大変なのだが、 この本では非常に豊富に図を使い、更にその図の中に非常に 丁寧に説明が書かれているので、図のどこに注目し何をすれば 良いのか、というのが非常にわかりやすくなっている。 まさに「手取り足取り」で教えてもらっている感覚。

また特徴的なのが、第2部ではアプリケーションを開発する だけにとどまらず、「OSXのヘルプメニューから表示できるヘルプの 作り方」とか「インストーラーの作り方」など他のCocoa関連の本では あまり触れられていない内容についてもしっかり説明されているので、 実際にアプリケーションを配布するところまで迷わずできるようになる。

第3部のMacRubyの説明では、MacRubyとRubyの違い*1とか、 RubyCocoaとMacRubyの違い*2 などについてもそれぞれのコードを対比させたり、実行結果を見比べるなどして非常に親切丁寧に わかりやすく説明されている。

またHotCocoaでの開発についても、iCalからTodoを抜き出して一覧表示/管理する TodoListという実用的なアプリケーションの作成を通じて一通り開発の流れを掴むことができる。 またここでもMacRuby本体をアプリケーションの中に含めて配布する方法などについても 触れられている。

最後の付録にはJoel on Software で説明されている 「やさしい機能仕様」 に沿って書かれた第2部「シークレットマネージャー」の「仕様書」まで 付いているのも面白い。

これはRubyKaigi2009での高尾さんの発表を聞いても感じたことだが、 全体を通してものすごく親切にわかりやすく説明されている印象。 Cocoaというやや特殊な開発環境での開発もこの本があればつまずかずに 最初の一歩を踏み出せると思う。

*1 MacRubyはCocoaを利用して実装しなおされたRubyなのでRubyのObjectクラスは MacRubyではNSObjectだったりRubyのStringクラスは MacRubyではNSMutableStringだったりする

*2 RubyCocoaで使われていたib_actionとかib_outletが、MacRubyでは不要になる、などなど


2009-08-21 (Fri) [長年日記]

_ RubySapporoNight Vol.11 で RubyCocoa で MVC の話をしました

ソースコードはこちら(github)

RubyCocoaMVCDemo1 ってのが会場でのデモで実際に作ったもの。

RubyCocoaMVCDemo2 ってのが質疑応答のときにチラッとしゃべった、Observerパターンを利用して、Model側からControllerへ表示更新の通知を 行うようにしたもの。

Counter.rbの中でrequire 'observer'して include Observableして、値が更新されたときに changed と notify_observers するようにし、CounterController.rbでは@counter.add_observer(self)しただけ。 これで、Controllerの中から自分でupdateを呼んでやらなくても、 @counterに変更が生じたらCounterControllerに通知が飛んで来て (updateメソッドが呼ばれて)画面へ変更の反映が行われる。

RubyCocoaMVCDemo3 ってのが質疑応答で質問があがった 「RubyCocoaでもKVOは使えるのか?」に対する返答ですが、 私、CocoaBindingあまり好きじゃないので、正直こういう設計で 合っているのかどうかは激しく謎。とにかくRubyCocoaでもCocoaBinding は動いてますよ、という証明にはなるかな、と。

Counterでのインスタンス変数へのアクセッサをattr_readerから kvc_accessorに変更。これでcounterインスタンス変数に変更が 生じたときにCocoaBindingでつながれたオブジェクトに通知が 飛ぶようになる。 そして、Controllerの親クラスをNSWindowControllerからNSObjectControllerに 変更し、CounterのインスタンスはControllerの中でnewするのをやめて、 nibファイル内に予めインスタンス化し、Controllerのcontentとして 接続。後はCocoaBindingでLabelにはselectionのcounterをバインド。 これによりソースコードの方はめちゃめちゃスリムになってます (その分、どこで何やってるかわからなくなる。ここが嫌い)


2009-07-23 (Thu) [長年日記]

_ プロセスを二重起動させない方法

バッチ処理とかクロール処理みたいなスクリプトをcronで 定期的に起動するとき、前に起動した処理がまだ終わってないのに 次の起動時間が来てしまって同じバッチが二重に起動されちゃうことって ありますよね。しかも、二重に起動することで負荷が高くなって、更に 処理が終わらなくなって、また次の起動時間が来て三重に起動されて、、、と負のスパイラルに陥って Load Average がとんでもない数字になったり。

で、こういうのってよくある処理なので、いちいち個別の スクリプトの中に埋め込むんじゃなく、何かのラッパーコマンドで やって欲しいなぁと思い(rlwrapみたいなイメージ)、 とりあえず start-stop-daemon が使えそうな気がしたので、 やってみました。daemonじゃないコマンドを起動するのに start-stop-daemonを使って良いのだろうか、という後ろめたさはあるんですが、、、

0-59/30 * * * * /sbin/start-stop-daemon --start --pidfile /home/tmaeda/var/run/mybatch/foo.pid\
 --make-pidfile --startas /usr/local/bin/mybatch -- --my_batch_option1 --my_batch_option2 > /home/tmaeda/log/foo.log 2>&1

で、二重に起動しようとすると、

process already running.

とメッセージが出て、戻り値1で終了してくれます。

start-stop-daemonは --make-pidfile を渡すことで、pidファイルを生成してくれるのですが、 プロセスが終了したときに自動的に消してくれるわけじゃないので、若干お行儀の悪いやり方です。 とはいっても、まずはpidファイルを見て、そこに書かれているpidのプロセスが存在するかを確認し、 なければ起動する、という動きをしてくれるので、「pidファイルが残ったままだから、プロセスは 死んだのに次のコマンドが起動できない」なんてことは起きません。

もっと良いやり方をご存知の方は教えてくださいー。


2009-07-20 (Mon) [長年日記]

_ RubyKaigi2009にスタッフとして参加してきました

19日終了→朝まで打ち上げ→始発の飛行機で札幌へ帰宅→荷物の片付けをして爆睡、を経て、 いまこれを書いています。会期中はホテルに帰った後も翌日の準備などがあるので、 なかなか睡眠時間も確保できずトラブルが起きるとまともにご飯が食べられないような こともあるので、これをやれるのは3日連続ぐらいが限界だなぁ、という感じがします。

初日に会場ネットワークの制限のキツさ(帯域の細さ、Ustream配信が4分で強制切断される)が 発覚し、いろいろ大変でしたが2日目以降についてはUstream用にはイーモバイルを利用し、 イーモバイルはUSB延長ケーブルを利用して電波の受信しやすい場所に置くなどの工夫をし、 なんとか安定した配信は確保できました。

工夫の結果については、中会議場で配信作業をしてくれていた、suzukiさんが 詳しくレポートしてくれています(レポート1レポート2レポート3 )。 私は一応、中会議場の配信周りの番長だったのですが、 suzukiさんとid:mickey24@Tukuba.Rさんがあまりにも素晴らしすぎて私は配信周りについては 何もすることが無かったです(おかげでネットワーク周りやその他諸々に専念できました)。

ネットワークに関しては与えられた環境の中では最善といえる状態にできたと思いますが、 来場者に満足頂ける環境ではなかったのが残念です。メインコンテンツはあくまでも 講演や講演者来場者とのコミュニケーションであって、 ネットワークはオマケといえばそうなんですけども、、、

RubyKaigiに関しては私は会場探しなどはしてないので、 他の人から聞いた話や、自分がRuby札幌でのイベント時に経験していることからの推測も混じりますが、

  • 想定する人数が収容できて
  • 使いたいときに空いていて
  • 予算の範囲で借りられる金額で
  • 来場者が来やすい場所にあって
  • ネットワークや電源やプロジェクターや音響設備などが快適に使えて

という条件を満たす会場を見つけるのは本当に難しいのだろうと思います。


2003|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|10|11|12|
2006|01|02|04|05|06|07|08|09|10|11|12|
2007|01|03|06|07|08|09|10|11|12|
2008|01|02|03|04|06|07|10|12|
2009|01|03|06|07|08|09|11|
全文検索:

% grep '' *.td2

2009年
11月
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
本書きました!
Tags:

2009-11-16 (Mon)

* tumblrimport1.0 を公開
2009-09-23 (Wed)
* RubyによるMacOSXデスクトップアプリケーション開発入門
2009-08-21 (Fri)
* RubySapporoNight Vol.11 で RubyCocoa で MVC の話をしました
2009-07-23 (Thu)
* プロセスを二重起動させない方法
2009-07-20 (Mon)
* RubyKaigi2009にスタッフとして参加してきました
2009-07-19 (Sun)
* サイン会
2009-07-15 (Wed)
* Ruby 逆引きレシピ すぐに美味しいサンプル&テクニック 232
2009-07-01 (Wed)
* NEC Express5800 110Gd の CPU を換装したら、電気代が2000円も安くなった
最近のツッコミ:
  1. Pharmg716 (09-27)
  2. tmaeda (07-24)
  3. takahashim (07-22)
SapporoRubyKaigi02 Speaker RubyKaigi2009Staff RubyKaigi2008Staff