« 2006年10月 | トップページ | 2006年12月 »

2006.11.29

Cocoa Life Vol.3 校了! だと思う

年末発売の「Cocoa Life Vol.3」も、原稿チェック〜直しのサイクルを繰り返し、締め切りの日がきたのでおしまい、って感じ。まだ作業自体はあるけれど、内容的にはほぼ FIX といったところ。

ちょうど今回掲載分の緊急モーションセンサライブラリ SMSUTILSオレンジニュースに掲載されていたので、いい宣伝になるかも。

|

2006.11.26

どんな通知が飛んでるかを調べる Notification Watcher.app

調べものをしていたら、distributed notification で Finder のサイドバーの変更を監視して、ボリュームのマウントを知るというものを見つけた。"com.apple.sidebarlists.503.systemitems" (503はuid) なんて通知の存在をどうやって知るんだろう?と思ってちょっと探してみたら、CocoaDev: SideBarContent 経由で、Notification Wathcer というユーティリティがあるってことがわかった。

これは、NSDistributedNotificationCenter と NSWorkspace に飛んでくる通知をひたすら表示するというもの。けっこう眺めているだけでおもしろい。すげーたくさんの通知が飛んでる。デスクトップピクチャの変更が "com.apple.desktop" で飛んでるんだけど、いったい何に使うのだろ?

|

2006.11.23

RubyCocoa 今日のコミット (2006.11.23)

  • RubyCocoa.framework への libruby のリンクがおかしかったのを修正

以前にふじもとさんが、ppc でビルドした universal binary パッケージが intel で動かないって言っていたやつの原因がコレ。こないだ Jonathan が -undefined suppress を無効にしたので発見できた。

それにしても、dylib だろうと LDFLAGS にまんまファイル名書けばイメージの中に入れることができるのな。知らなかったよ。

|

2006.11.22

第21回 Cocoa勉強会(12/2)のお知らせ

今年最後の Cocoa勉強会のお知らせ。12/2(土) 13:00より。見学の申し込みは、勉強会の質問フォーム からどうぞ。

予定されている発表は次のとおり。まだ流動的なカンジ。

  • 「プライベートフレームワークを使う」 (2006.11.25 追記: 中止)
  • 「コマンドラインで作るAutomatorアクション」
  • 「HIG:ソフトウエアアップデートの方法」
  • 「IBで複雑なビューを設計する時のテクニック。」
  • 「iTunesのようなNSBrowserをつくる(リベンジ)」(木村)

というわけで 4月にぐだぐだになってしまった発表 のコントローラ部分の再設計の話。まだ構想しかないけど、1週間あればどうにかなるっしょ。この半年の成長を見せるよ。

|

2006.11.20

VIM の Portfile に KaoriYa パッチなど追加

トーフサロンの Vim7.0 + KaoriYa を Mac OSX にインストールするMakefile と、2xup.org の Vim7.0 + KaoriYa を Mac OSX にインストールする の手順を MacPorts 化してみた。

  • 7za のパッケージをインストールしても、PATH が port プロセス中で /usr/local/bin に設定されていない(かつ system コマンドでは フルパスは記述できないっぽい)ために実行されないこと。結局 /usr/bin にシンボリックリンクをつくった
  • -lmigemo のテストを通すために configure.env を追加する必要があったこと

が、今回のハマリポイント。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

|

2006.11.19

Cocoa のコーディングスタイル

ここんとこ、年末にだす Cocoa勉強会の会誌「Cocoa Life Vol.3」のレビューをひたすらやってるわけだけど、Growl の記事のチェックでプロジェクトの Trac を検索していたいら、Growl coding standards ってのを見つけた。

で、なんとなく調べたくなったので、Cocoa のコーディングスタイルについて書かれたものを探してみた。

Coding Guidelines for Cocoa

本家 Apple による ADC ドキュメント。見た目上の話でなく、名前づけのルールの話がほとんど。その多くは Cocoa では常識となっている話なので「そうですね」とうなずくばかり。

だけれど、"Tips and Techniques for Framework Developers"は、フレームワークの実装デザインの話でおもしろい。

WebKit Coding Style Guidelines

WebKit プロジェクトのガイドライン。インデントの幅から括弧のつけかたなど、見た目の話がばりばり。"Right" と "Wrong" が例示されているので、本文をほとんど読まなくてもわかる。C++ にまで触れているものは珍しいと思う。

「タブ禁止だから、subversion の pre-commit スクリプトでコミットさせないよ」というのが豪快でカッコイイ。pre-commit てそういうのにも使えるんだね。

Hillegass: Cocoa Style

通称「ヒレガス本」、「Mac OS X Cocoaプログラミング」の著者として知られる Aaron Hillegass によるスタイル解説。

中盤の「#pragma でマークして、メソッドをグループ化しよう」や、終盤の「メソッド名を get~ とするのは、引数を参照渡しするものに限る」というあたりがおもしろい。

Adium X - Coding Style Guidelines

チャットアプリケーション Adium X のスタイルガイドライン。書いてあるように Growl のものをベースにしたとのことで、Growl のガイドラインとだいたい同じ。

メッセージや if 文が長くなって複数になるときや空白の空けかたまで、コード自体のレイアウトについては、これがいちばん細かく指定していると思う。ここまでやるのはエディタのサポートが欲しいところ。

その他(名前の付けかた)

名前の付けかたは CocoaDevCentral の"Cocoa Style for Objective-C: Part I" (Part II) や、荻原剛志 著「Objective-C Mac OS X プログラミング」の Appendix B が詳しい。

|

2006.11.16

RubyCocoa 今日のコミット

  • Foundation, AppKit の関数からの返り値の retain 忘れに対処 (r1219)

ふじもとさんが発見してくれたバグ ([rubycocoa-devel:458]) を修正。retained フラグの設定が 3箇所くらいにばらけてしまって、コードを整理したいところだけれど、apple-unstable ブランチで削除されるファイルなので気にしないことにする。

そろそろ trunk ってばリリースできるんじゃないかなあ、と観測気球をあげてみる。

|

2006.11.14

RubyConf 2006 の反応を追加

Matzにっきに RubyConf 2006 の話がでていたので、先月の記事「RubyConf 2006 "Leveraging Mac OS X from Ruby" by Laurent Sansonetti」 に反応を追加。

ココログだと日付を変更すると URI が変わってしまうので、日付はそのままで通知のエントリをここに。なんだかばかばかしい。

|

第12 回 Cocoa 勉強会 関西 に行ってきた

関西のみなさん、ありがとうございました。というわけで勉強会のレポート。

OpenBase version 10

最近リリースされた、OpenBase の 10.0 の紹介。よく知らなかったのだけど、Cocoa 関連の機能も充実してる。Free 版の Solo でもいろいろできるようになったとのこと。RDB 自体にはあまり興味がない(仕事ではいじってるし)のだけれど、こういう周辺ツールはさわってみたい。とりあえず「そのうちやること」リストに追加。

Mac でマイコン LAN 制御

Mac から UDP 通信でマイコンを制御する話。ハードウェア方面はさっぱりな自分なので、ただ見てるだけなのだけど、やっぱりモノが動くのは楽しい。

インデックスカラーの描画環境を持つNSImageのサブクラスを作る

インデックスカラーが Cocoa になって使いにくくなったので、そのクラスをつくっちゃおう、という話。こういうのは、クラスをどうデザインしたか、ってあたりの話が好きなので、かなり面白かった。

dylib の謎

Mac OS X のダイナミックリンクライブラリって、他の Unix 系の環境と比べてちょっと変わっている。それを、dyld のソースコードから解説するという話。

RubyCocoa でも、けっこうこのあたりは悩んだ(知らなかったから)ので、うんうんうなずくことばかり。Tiger で dyld の中が変わったということは知識として知ってはいたけれど、実際に増えた機能なんかも知ることができたのでお得な気持ち。

画面のキャプチャとその応用事例

スクリーンキャプチャを OpenGL 経由で撮る方法と、それを利用したツールについて。必要は発明の母、というか「ほしいならつくればいいじゃん」というノリがかっこいい。

ううん、やっぱ画像処理も勉強したいなあ。なんだか「勉強したいこと」がまた増えてしまった。いつするのかはわからないけれど。

|

2006.11.12

Wiki スパムを退治

英語の RubyCocoa Wiki にスパムページがつくられていたので削除。めんどい。

シェルサーバ上で以下の手順でやった。

  1. wc.write のファイルを cvs remove で削除
  2. cvs admin -o で、削除以前のバージョンを削除
  3. wc.read を cvs update

|

2006.11.09

RubyCocoa 今日のコミット

  • QTKit のサポートを追加 (r1214)

最近 rubycocoa-talk によくでてくる Eloy Duran からのパッチをマージ。長いこと塩漬けにしててごめんな。

 require 'osx/qtkit'

で QTKit が使えるようになる、はず。NSRect や NSSize と同じようなノリで QTTimeRange や QTTime も使える。

|

2006.11.08

ObjectiveBasic

CocoaDev の エントリで見つけた、新しい? Cocoa ブリッジ ObjectiveBasic

日本語サイトがえらいたいへんなコトになっている KBasic をベースに Cocoa や Carbon を利用できるものにした製品で、IDE 込みでユニバーサルバイナリまでつくれるってものらしい。

サンプル(テトリス)を見たところ、ヘッダの import とか basic らしくないところもあると思う。GUI のモデル自体は Cocoa なので、プログラム自体はわりと読める。逆に、Visual Basic 経験者にはあんまり有利な点がないかも。

|

2006.11.07

RubyCocoa で Objective-C の型情報をどういうスタイルにする?

ひ日誌 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 に登録もできるので型変換が正確に行われる。

ここでのポイントは、

  • 型情報には Cの型をそのまま使う
  • レシーバとセレクタは省略する

つまり、結果的に Objective-C のメソッド定義と同じように書けるっていうこと。

Rubyの型を定数的に利用する、こういうのもありかも。

 objc_form 'foo:bar:', OSX::NSObject, OSX::NSView, Integer

|

やるじゃないか WWDR

今週の木曜に開催される木下さんの「Cocoaセミナー」に行く予定だったのだけれど、先週アタマに肺炎になって仕事を休みすぎてしまったため、どうにもスケジュールの都合がつかない。

キャンセルの連絡先が見つからなかったので、ダメもとで案内のメールに返信で「行けなくなりました」メールをだしておいた。ら、ちゃんと返事がきた。申し訳ないけれど、この手のメールが読まれるものだとは思っていなかったよ。やるじゃないか、WWDR。

|

2006.11.05

Rabbit-0.5.0 の MacPorts をコミット

しました。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

となってしまったので見送り。リンカのオプションで解決できそうに思ったのだけど、結果として大敗。

|

rb-gnome にまたも苦戦

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 側の関数名を変更しても影響なさそうなので、そんなパッチを追加。

|

2006.11.04

Dock アイコンを有効に使うためのクラスライブラリ

いくつかのアプリケーションで、Dock のアプリケーションアイコンにアプリの状況を表示するものがある。仕組みとしては、NSApplication の delegate メソッド applicationDockMenu: を使うのだけろうけど、いちいちアイコンのグラフィックを合成してつくるのはそれなりに手間だ。

そんなときお役立ちなのが、次のクラス/サンプルだ。ライセンスは Creative Commons Attribution License

  • CTBadge - Mail.app の未読件数のように、枠とその中に文字(数字)を表示
  • CTProgressBadge - 時計タイプのプログレスバー(?)を表示

利用してみたいのだけど、使うようなアプリが自分のにはないなあ。

|

2006.11.03

UFS のパーティションを HFSX に変更

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 での提供はたぶん明日になります。

|

RubyCocoa のサンプルを検証

既知の問題はすべて退治したと思うので、サンプルを動かしてみた。せっかくなので、試した項目をメモ。

HelloWorld.rb

 % ruby HelloWorld.rb
  • "Hello!" ボタンを押すと、コンソールに "Hello again, world!" と出力される
  • "Goodbye!" ボタンを押すと、終了する

TransparentHello.rb

 % ruby TransparentHello.rb

画面上に影つきの赤い文字が表示される。

fontnames.rb

 % ruby fontnames.rb

フォントの一覧が出力される。

itunes_albums.rb

 % ruby itunes_albums.rb

iTunes のライブラリのアルバム名の一覧が出力される。

sndplay.rb

 % ruby sndplay.rb

システムのビープ音が鳴る。

sndplay2.rb, sndplay3.rb も sndplay.rb と同じ

speak.rb

 % ruby speark.rb speak_me.txt

RubyCocoa についての説明をしゃべる

CurrencyConverter

  • "Exchange Rate" と "Dollars to Convert" に入力すると結果が "Ammount in Other Currency" に表示される

Hakoiri-Musume

  • パネルが動かせる

(ルールを知らないので、どうすればいいかわからん)

HybridLangApp

  • "Objective-C Controller" ボタンを押すと、"Objective-C Controller !!" と表示される
  • "Ruby Controller" ボタンを押すと、"Ruby Controller !!" と表示される

MyViewer

動かない(というか動く理由がわからない)ので修正。

  • メニュー File > Open File... で複数の画像ファイルを開く
  • メニュー File > Inspector... で
    • "Shrink" ボタンで前面の画像が小さくなる
    • "All" ボタンで開いているすべての画像が小さくなる

このアプリって終了する方法が Dock から終了するしかないのか。

Pong

  • "Start" ボタンでゲーム開始
  • "Stop" ボタンで一時停止、"Start" で再開
  • "Reset" ボタンでゲーム中止
  • "Start" でまたプレイできる

RubyRaiseMan

  • "新規レコード" でてきとうに作成
  • 複数行を選択して、"レコード削除" で削除。ダイアログが表示される。
  • 保存 > 閉じる > 開く でドキュメントの保存と読み込みができる

RubyRocks

  • スペースキーと矢印キーでゲームできる

NSDocument ベースで構成されているけど、べつにドキュメントじゃないので複数ドキュメントウインドウを開いたり、保存しようとすると落ちる。まあ、いいか。

RubyRoundTransparentWindow

  • スライダを動かすと、透明度が変わる。円形から五角形に変わる。

RubySpotlight

  • 初期検索条件のまま Enter
  • 検索結果のファイルを選択して、ファイル内容とメタデータが表示される

RubyTypingTutor

  • キーを押すと黄色いビューに反映される
  • "bold" "italic" チェックボックスが左側のビューに反映される
  • 左右のビューでドラッグ&ドロップできる
  • コピーした内容をテキストエディットにペーストできる

SimpleApp

  • 赤 / 緑 / 青 ボタンで色が変わる
  • スレッド ボタンで透明度スライダが動いて、左下のビューの色の透明度が変わる
  • スレッド動作中でも色が変更できる

dotview

  • スライダで円の大きさが変わる
  • カラーウェルで円の色が変更できる
  • ドラッグ&ドロップで円が移動する

multinib

  • ボタンによって表示されるパネルの内容が変わる

thread0

  • ウインドウの時刻が毎秒更新される
  • "Hello" ボタンを押すと、メッセージが表示された後、時刻の表示に戻る

(おわり)

|

そこって 円記号(¥)じゃなくてバックスラッシュ(\)じゃないの?

と、rubycocoa-devel で Laurent に言われた。そういや Mac ではこの2つの文字は別のコードなんだよね、忘れてた。

自分の環境では、JTerminal の環境設定で「円マークをバックスラッシュに置き換える」にチェックをつけていて、端末上では全部"¥"にしているのだ。キーボード上で option + ¥ と入力するのもめんどくさいし。で、ML に投稿するときにコード修正をそのままコピペしてしまったので、向こうからすると「アレ?」と思うわけだ。ちょっとしたカルチャーショック。

そう考えると、日本語 Windows のパスなんか、外国の人から見たら「なんじゃこりゃ?」という感じなんだろうか。なんだか面白いな。

(注:都合上、¥と\は全角にしています)

|

2006.11.02

いつでもユニバーサルな cc

macosxhints の Compile universal binaries by default という記事で、オプションなしでユニバーサルバイナリをつくることのできる cc が紹介されていた。

おもしろそうと思って見てみたが、本当にオプションを追加して execv しているだけだった。うーん、なんかメリットより副作用のほうが多そうだなあ。Xcode ネイティブのプロジェクトだと、結局 ARCHS の設定が必要になるし。

|

RubyCocoa 今日のコミット

  • automatic ns_overrides がちゃんと動かないケースに対処

ふじもとさんが「RubyRaiseMan でファイルを開くと落ちる」と言っていた件。完全なるイージーミスで恥ずかしい…(さらに修正も1回デタラメな間違いしたし)

|

2006.11.01

RubyCocoa 今日のコミット

  • プレースホルダの問題を修正 (r1196)

Laurent が既に apple-unstable で修正していたらしい([rubycocoa-dev:387])。でも、その修正だとクラッシュはしなくなるけど、メモリリークが起きてしまう問題が残るはずなので([rubycocoa-devel:431])、別のアプローチで。

|

« 2006年10月 | トップページ | 2006年12月 »