Cocoa Life Vol.3 校了! だと思う
年末発売の「Cocoa Life Vol.3」も、原稿チェック〜直しのサイクルを繰り返し、締め切りの日がきたのでおしまい、って感じ。まだ作業自体はあるけれど、内容的にはほぼ FIX といったところ。
ちょうど今回掲載分の緊急モーションセンサライブラリ SMSUTILS がオレンジニュースに掲載されていたので、いい宣伝になるかも。
| 固定リンク
年末発売の「Cocoa Life Vol.3」も、原稿チェック〜直しのサイクルを繰り返し、締め切りの日がきたのでおしまい、って感じ。まだ作業自体はあるけれど、内容的にはほぼ FIX といったところ。
ちょうど今回掲載分の緊急モーションセンサライブラリ SMSUTILS がオレンジニュースに掲載されていたので、いい宣伝になるかも。
| 固定リンク
調べものをしていたら、distributed notification で Finder のサイドバーの変更を監視して、ボリュームのマウントを知るというものを見つけた。"com.apple.sidebarlists.503.systemitems" (503はuid) なんて通知の存在をどうやって知るんだろう?と思ってちょっと探してみたら、CocoaDev: SideBarContent 経由で、Notification Wathcer というユーティリティがあるってことがわかった。
これは、NSDistributedNotificationCenter と NSWorkspace に飛んでくる通知をひたすら表示するというもの。けっこう眺めているだけでおもしろい。すげーたくさんの通知が飛んでる。デスクトップピクチャの変更が "com.apple.desktop" で飛んでるんだけど、いったい何に使うのだろ?
| 固定リンク
以前にふじもとさんが、ppc でビルドした universal binary パッケージが intel で動かないって言っていたやつの原因がコレ。こないだ Jonathan が -undefined suppress を無効にしたので発見できた。
それにしても、dylib だろうと LDFLAGS にまんまファイル名書けばイメージの中に入れることができるのな。知らなかったよ。
| 固定リンク
今年最後の Cocoa勉強会のお知らせ。12/2(土) 13:00より。見学の申し込みは、勉強会の質問フォーム からどうぞ。
予定されている発表は次のとおり。まだ流動的なカンジ。
というわけで 4月にぐだぐだになってしまった発表 のコントローラ部分の再設計の話。まだ構想しかないけど、1週間あればどうにかなるっしょ。この半年の成長を見せるよ。
| 固定リンク
トーフサロンの Vim7.0 + KaoriYa を Mac OSX にインストールするMakefile と、2xup.org の Vim7.0 + KaoriYa を Mac OSX にインストールする の手順を MacPorts 化してみた。
が、今回のハマリポイント。MacPorts 組み込みの機能を使えば、たぶん curl コマンドをたたかなくてよいのだろうけど、調べるのがめんどうだったので横着。
CMigemo は、DarwinPortsWiki-JP の PrivatePortFile を使えばよい。
以下は公式 (r20293) の Portfile との diff。
Index: editors/vim/Portfile =================================================================== --- editors/vim/Portfile (revision 400) +++ editors/vim/Portfile (working copy) @@ -53,6 +53,30 @@ } } +### apply KaoriYa's patches and enable migemo +### see http://2xup.org/log/2006/09/13-0220 +post-fetch { + cd ${distpath} + if { ![file exists "vim7-daily-w32j.exe"] } { + system "curl -s -O http://www.kaoriya.net/testdir/vim7-daily-w32j.exe" + } + if { ![file exists "configure.diff"] } { + system "curl -s -O http://2xup.org/repos/vim/configure.diff" + } +} + +post-patch { + # apply kaoriya patch + system "7za x ${distpath}/vim7-daily-w32j.exe" + system "cat vim7-daily-w32j/patches/* | patch -p0" + # apply patch for migemo from 2xup.org + system "cat ${distpath}/configure.diff | patch -p0" +} + +configure.env LDFLAGS="-L${prefix}/lib" \ + CFLAGS="-I${prefix}/include" +### + configure.args --enable-gui=no --without-x --disable-gpm \ --mandir=${prefix}/share/man
| 固定リンク
ここんとこ、年末にだす Cocoa勉強会の会誌「Cocoa Life Vol.3」のレビューをひたすらやってるわけだけど、Growl の記事のチェックでプロジェクトの Trac を検索していたいら、Growl coding standards ってのを見つけた。
で、なんとなく調べたくなったので、Cocoa のコーディングスタイルについて書かれたものを探してみた。
本家 Apple による ADC ドキュメント。見た目上の話でなく、名前づけのルールの話がほとんど。その多くは Cocoa では常識となっている話なので「そうですね」とうなずくばかり。
だけれど、"Tips and Techniques for Framework Developers"は、フレームワークの実装デザインの話でおもしろい。
WebKit プロジェクトのガイドライン。インデントの幅から括弧のつけかたなど、見た目の話がばりばり。"Right" と "Wrong" が例示されているので、本文をほとんど読まなくてもわかる。C++ にまで触れているものは珍しいと思う。
「タブ禁止だから、subversion の pre-commit スクリプトでコミットさせないよ」というのが豪快でカッコイイ。pre-commit てそういうのにも使えるんだね。
通称「ヒレガス本」、「Mac OS X Cocoaプログラミング」の著者として知られる Aaron Hillegass によるスタイル解説。
中盤の「#pragma でマークして、メソッドをグループ化しよう」や、終盤の「メソッド名を get~ とするのは、引数を参照渡しするものに限る」というあたりがおもしろい。
チャットアプリケーション Adium X のスタイルガイドライン。書いてあるように Growl のものをベースにしたとのことで、Growl のガイドラインとだいたい同じ。
メッセージや if 文が長くなって複数になるときや空白の空けかたまで、コード自体のレイアウトについては、これがいちばん細かく指定していると思う。ここまでやるのはエディタのサポートが欲しいところ。
名前の付けかたは CocoaDevCentral の"Cocoa Style for Objective-C: Part I" (Part II) や、荻原剛志 著「Objective-C Mac OS X プログラミング」の Appendix B が詳しい。
| 固定リンク
ふじもとさんが発見してくれたバグ ([rubycocoa-devel:458]) を修正。retained フラグの設定が 3箇所くらいにばらけてしまって、コードを整理したいところだけれど、apple-unstable ブランチで削除されるファイルなので気にしないことにする。
そろそろ trunk ってばリリースできるんじゃないかなあ、と観測気球をあげてみる。
| 固定リンク
Matzにっきに RubyConf 2006 の話がでていたので、先月の記事「RubyConf 2006 "Leveraging Mac OS X from Ruby" by Laurent Sansonetti」 に反応を追加。
ココログだと日付を変更すると URI が変わってしまうので、日付はそのままで通知のエントリをここに。なんだかばかばかしい。
| 固定リンク
関西のみなさん、ありがとうございました。というわけで勉強会のレポート。
最近リリースされた、OpenBase の 10.0 の紹介。よく知らなかったのだけど、Cocoa 関連の機能も充実してる。Free 版の Solo でもいろいろできるようになったとのこと。RDB 自体にはあまり興味がない(仕事ではいじってるし)のだけれど、こういう周辺ツールはさわってみたい。とりあえず「そのうちやること」リストに追加。
Mac から UDP 通信でマイコンを制御する話。ハードウェア方面はさっぱりな自分なので、ただ見てるだけなのだけど、やっぱりモノが動くのは楽しい。
インデックスカラーが Cocoa になって使いにくくなったので、そのクラスをつくっちゃおう、という話。こういうのは、クラスをどうデザインしたか、ってあたりの話が好きなので、かなり面白かった。
Mac OS X のダイナミックリンクライブラリって、他の Unix 系の環境と比べてちょっと変わっている。それを、dyld のソースコードから解説するという話。
RubyCocoa でも、けっこうこのあたりは悩んだ(知らなかったから)ので、うんうんうなずくことばかり。Tiger で dyld の中が変わったということは知識として知ってはいたけれど、実際に増えた機能なんかも知ることができたのでお得な気持ち。
スクリーンキャプチャを OpenGL 経由で撮る方法と、それを利用したツールについて。必要は発明の母、というか「ほしいならつくればいいじゃん」というノリがかっこいい。
ううん、やっぱ画像処理も勉強したいなあ。なんだか「勉強したいこと」がまた増えてしまった。いつするのかはわからないけれど。
| 固定リンク
英語の RubyCocoa Wiki にスパムページがつくられていたので削除。めんどい。
シェルサーバ上で以下の手順でやった。
| 固定リンク
最近 rubycocoa-talk によくでてくる Eloy Duran からのパッチをマージ。長いこと塩漬けにしててごめんな。
require 'osx/qtkit'
で QTKit が使えるようになる、はず。NSRect や NSSize と同じようなノリで QTTimeRange や QTTime も使える。
| 固定リンク
CocoaDev の エントリで見つけた、新しい? Cocoa ブリッジ ObjectiveBasic。
日本語サイトがえらいたいへんなコトになっている KBasic をベースに Cocoa や Carbon を利用できるものにした製品で、IDE 込みでユニバーサルバイナリまでつくれるってものらしい。
サンプル(テトリス)を見たところ、ヘッダの import とか basic らしくないところもあると思う。GUI のモデル自体は Cocoa なので、プログラム自体はわりと読める。逆に、Visual Basic 経験者にはあんまり有利な点がないかも。
| 固定リンク
ひ日誌 11/03 の「addRubyMethod_withType の構文糖」に反応。
リンク先での主題ではないけれど、型エンコードを使うのって、そもそもどうなんだろう。今は裏道的な扱いだけれど、オープンにガンガン使うには型エンコードってわかりにくいと思うのだ。
たとえば例に挙がっている
def foo_bar(view, index) end objc_form 'foo:bar:', '@@:@I'
は、こんなほうがよいだろう。
objc_form 'foo:bar:', 'NSObject *', 'NSView *', 'int' # seems -> -(NSObject *) foo:(NSView *)aView bar:(int)index # or objc_form 'foo:bar:', 'id', 'id', 'int'
冗長ではあるけれど、コードを書く人にも読む人にもこういった形式のほうがやさしい。型エンコードを利用した設定も objc_form_ocencode とか長い名前のメソッドで利用できてもよい。
おそらく BridgeSupport の機能を利用して parse できるので、それを利用すれば処理も簡単にできるし、さらに BridgeSupport に登録もできるので型変換が正確に行われる。
ここでのポイントは、
つまり、結果的に Objective-C のメソッド定義と同じように書けるっていうこと。
Rubyの型を定数的に利用する、こういうのもありかも。
objc_form 'foo:bar:', OSX::NSObject, OSX::NSView, Integer
| 固定リンク
今週の木曜に開催される木下さんの「Cocoaセミナー」に行く予定だったのだけれど、先週アタマに肺炎になって仕事を休みすぎてしまったため、どうにもスケジュールの都合がつかない。
キャンセルの連絡先が見つからなかったので、ダメもとで案内のメールに返信で「行けなくなりました」メールをだしておいた。ら、ちゃんと返事がきた。申し訳ないけれど、この手のメールが読まれるものだとは思っていなかったよ。やるじゃないか、WWDR。
| 固定リンク
しました。svn update 後、sudo port -n upgrade rb-rabbit でアップデートできるはず。
ruby-gnome 0.15.0 は
% rabbit rabbit.rd dyld: NSLinkModule() error dyld: Symbol not found: _GLIST2ARY2F Referenced from: /opt/local/lib/ruby/vendor_ruby/1.8/powerpc-darwin8.8.0/pango .bundle Expected in: flat namespace
となってしまったので見送り。リンカのオプションで解決できそうに思ったのだけど、結果として大敗。
| 固定リンク
Rabbit の Portfile は簡単にできたので、さっそく試してみると
require "gtk2"
のところでエラー。そんなとこ、ありえないっつーの!
% port contents rb-gnome | grep gtk2 %
うむ、ホントにないや。
もう一度 -d -v 付けてインストールし直しして、出力を確認しよう。
/usr/bin/ld: warning -prebind has no effect with -bundle /usr/bin/ld: multiple definitions of symbol _gtk_target_list_get_type rbgtktargetlist.o definition of _gtk_target_list_get_type in section (__TEXT,__t /opt/local/lib/libgtk-x11-2.0.dylib(gtkselection.o) definition of _gtk_target_li /usr/bin/ld: warning multiple definitions of symbol _setregid /opt/local/lib/libruby.dylib(process.o) definition of _setregid /usr/lib/gcc/powerpc-apple-darwin8/4.0.1/../../../libm.dylib(setregid.So) defini /usr/bin/ld: warning multiple definitions of symbol _setreuid /opt/local/lib/libruby.dylib(process.o) definition of _setreuid /usr/lib/gcc/powerpc-apple-darwin8/4.0.1/../../../libm.dylib(setreuid.So) defini collect2: ld returned 1 exit status make[2]: *** [gtk2.bundle] Error 1 make[1]: *** [all] Error 2
gtk_target_list_get_type() 関数が、gtk+ と ruby-gnome2 でぶつかってんな。調べてみると、gtk+-2.10 で同名の関数が追加されたようだ。こういうとき、Google Code Search 便利だな。
利用先を調べた結果、 ruby-gnome2 側の関数名を変更しても影響なさそうなので、そんなパッチを追加。
| 固定リンク
いくつかのアプリケーションで、Dock のアプリケーションアイコンにアプリの状況を表示するものがある。仕組みとしては、NSApplication の delegate メソッド applicationDockMenu: を使うのだけろうけど、いちいちアイコンのグラフィックを合成してつくるのはそれなりに手間だ。
そんなときお役立ちなのが、次のクラス/サンプルだ。ライセンスは Creative Commons Attribution License。
利用してみたいのだけど、使うようなアプリが自分のにはないなあ。
| 固定リンク
Rabbit 0.5.0 がリリースされたので、手元の Portfile を修正して port upgrade していたら、またカーネルごと落ちた。どうもファイルシステムが壊れているらしい。これで4回目くらいだ。
今まで
/ - HFS+ システム用 Users - HFS+ fstab で Users にマウント UFS - UFS UNIX ツール用。 /usr/local と /opt にシンボリックリンク
というパーティション構成にしていた。UFS もそろそろやめてもいいかなと思ったので、HFSX に変更することにした。ジャーナリングつけられるし。
% sudo newfs_hfs -s -J -v VOLNAME /dev/disk0s9
というわけで、MacPorts 環境を再構築中。rabbit-0.5.0 の MacPorts での提供はたぶん明日になります。
| 固定リンク
既知の問題はすべて退治したと思うので、サンプルを動かしてみた。せっかくなので、試した項目をメモ。
% ruby HelloWorld.rb
% ruby TransparentHello.rb
画面上に影つきの赤い文字が表示される。
% ruby fontnames.rb
フォントの一覧が出力される。
% ruby itunes_albums.rb
iTunes のライブラリのアルバム名の一覧が出力される。
% ruby sndplay.rb
システムのビープ音が鳴る。
sndplay2.rb, sndplay3.rb も sndplay.rb と同じ
% ruby speark.rb speak_me.txt
RubyCocoa についての説明をしゃべる
(ルールを知らないので、どうすればいいかわからん)
動かない(というか動く理由がわからない)ので修正。
このアプリって終了する方法が Dock から終了するしかないのか。
NSDocument ベースで構成されているけど、べつにドキュメントじゃないので複数ドキュメントウインドウを開いたり、保存しようとすると落ちる。まあ、いいか。
(おわり)
| 固定リンク
と、rubycocoa-devel で Laurent に言われた。そういや Mac ではこの2つの文字は別のコードなんだよね、忘れてた。
自分の環境では、JTerminal の環境設定で「円マークをバックスラッシュに置き換える」にチェックをつけていて、端末上では全部"¥"にしているのだ。キーボード上で option + ¥ と入力するのもめんどくさいし。で、ML に投稿するときにコード修正をそのままコピペしてしまったので、向こうからすると「アレ?」と思うわけだ。ちょっとしたカルチャーショック。
そう考えると、日本語 Windows のパスなんか、外国の人から見たら「なんじゃこりゃ?」という感じなんだろうか。なんだか面白いな。
(注:都合上、¥と\は全角にしています)
| 固定リンク
macosxhints の Compile universal binaries by default という記事で、オプションなしでユニバーサルバイナリをつくることのできる cc が紹介されていた。
おもしろそうと思って見てみたが、本当にオプションを追加して execv しているだけだった。うーん、なんかメリットより副作用のほうが多そうだなあ。Xcode ネイティブのプロジェクトだと、結局 ARCHS の設定が必要になるし。
| 固定リンク
ふじもとさんが「RubyRaiseMan でファイルを開くと落ちる」と言っていた件。完全なるイージーミスで恥ずかしい…(さらに修正も1回デタラメな間違いしたし)
| 固定リンク
Laurent が既に apple-unstable で修正していたらしい([rubycocoa-dev:387])。でも、その修正だとクラッシュはしなくなるけど、メモリリークが起きてしまう問題が残るはずなので([rubycocoa-devel:431])、別のアプローチで。
| 固定リンク
最近のコメント