2006年 11月 16日

IIrcv - dRuby インターフェイスの時系列通知サーバ

IIrcv - 汎用通知サーバ with dRuby

Windows には Ircv というイカしたメッセージを表示するものがあるのですが、Mac だとこれっぽいのがないので作ってみました。Growl だと時系列が乱れたりするのでなんかだめだってときに便利かもしれません。

これを作るにあたりいろいろ学んだので楽しかった。

  • Cocoa 全般の構造
  • アプリケーションバンドルの作り方
  • バンドル内のファイルのアクセス法
  • NSLayoutManager の使い方少し
  • .icns ファイルの作り方 (/Developer/Applications/Utilities/Icon Composer.app)
  • dmg ファイルをコマンドラインから作る方法 (hdiutil create)
  • 拡張ライブラリの実装法とドキュメントの書き方
  • 拡張ライブラリ rubygems の作り方
  • ユーザ入力が必要な実装のテストの書き方

あと言語依存を解決したい。Interface Builder で nib 作って読み込む方法がいまだにわからないのでどうにかしたい。

Universal Binary 云々は確認がめんどい割に面白くないのでやる気がおきない。

catalyst


フォント等幅で ./script/testforiircv_server.pl -d 2>&1 | iircvstdout.rb

InterfaceBuilder

わかってきた。すっごい便利だなぁ。

  • アウトレットって何? => インスタンス変数の変な名称
  • アクションって何? => インスタンスメソッドの変な名称

Ruby のクラスを作りたい場合を(とは限らないけど)、例えば Classes で NSObject を選んで Classes -> Subclass ... するとサブクラスができるので、それに対してアウトレット/アクションを設定する。でもって Instantiate ... するとインスタンスが出現するので、Ctrl + ドラッグで配置したコントロールとアウトレット/アクションを結びつけていく。
例えばボタンを Ctrl クリックしてそのインスタンスされたオブジェクトにドロップするとアクション一覧がでてどれに接続するか選べる。
とかいうものらしい。あとは Ruby 側でインスタンス化したりするのと一緒だけど、アプリケーションバンドル化しないとうまく実行できないのでちょっとめんどい。Makefile 書いて、make clean; make; open IIrcv.app みたいなのを毎回実行するようにしてる。

おまけ。Create Files For ... するとクラスのひな形を作ってくれていいんだけど、もちろん Objective-C。なので Ruby に変換するのを Ruby ででっちあげた。

#!/usr/bin/ruby

require 'erb'

header = ARGF.read
_, class_name, super_class = */@interface ([^¥s]+) : ([^¥s]+)/.match(header)

outlets = header.scan(/IBOutlet id (.*?);/)
actions = header.scan(/^- ¥(IBAction¥)(.*?):¥(id¥)sender;/)

ERB.new(DATA.read, $SAFE, '-').run
__END__
require 'osx/cocoa'
include OSX

class <%=class_name%> < <%=super_class%>
	<%- outlets.each do |outlet| -%>
	ib_outlets :<%=outlet%>
	<%- end %>
	<%- actions.each do |action| -%>

	def <%=action%>(sender)
	end
	<%- end %>

	def awakeFromNib
	end
end
2006年 11月 15日

ドキュメント書くのめんどくさい

todo

  • universal binary (拡張ライブラリのコンパイル/検証するのがめんどい)

gerry++

トイレ詰まった。もっかい流したら流れた。こええ

2006年 11月 14日

IIrcv.dmg

http://lab.lowreal.net/test/IIrcv.dmg
IIrcv.app and dmg にしてみた! バージョン番号さえまだつけてない!
svn の自動で Revision つける keyword を毎回忘れる。

Makefile を Rakefile にしたい。

C の rdoc

親モジュールの解析ができてなくて失敗するなぁ。

	module = rb_eval_string("OSX");
	HotKey = rb_define_class_under(module, "HotKey", rb_cObject);

とかやってるせいなんだけど、どうすればいいんだろう。

c_parser のソース読んだけど無理みたいだ。組み込みモジュール以外は認識できないみたい

IIrcv キーワードハイライトを実装

IIrcv

メニューの意味がわかりにくいよなぁ。隠すと消さないは一個にまとめたい。

  • 表示されてないとき -> 表示して隠さないようにする
  • 表示されているとき -> 隠す

みたいな感じなのかな。でも min_alpha 指定してるときは完全に消えるわけじゃないからなぁ