2006年 11月 19日

svk

ソースリポジトリのリビジョン調べる方法がわからない。
svk info するとミラーリポジトリのリビジョンがでてくるし……その先が知りたいのだよ!!(バージョン文字列を自動化したい

2006年 11月 18日

次の gem

newcocoa という gem を作ろうと思った。ので、Makefile 式の Cocoa パッケージングを Rakefile 式に変更中

2006年 11月 17日

nib! nib!

http://lab.lowreal.net/trac/browser/c/mac/iircv
インターフェイス殆ど書き直した(わらい

  • 設定ウィンドウを追加。
  • メニューも nib から読むように

しかしまだローカライズファイルを作ってない。もうちょっと使ってみてリリースしよう(リリース?

todo

  • ローカライズ
  • ホットキーの設定がない (Set Key! とかでるやつってどうやって実装すればいいんだ)
  • Universal Binary

nib のファイル名はどこで指定するのか

そういえばこれがわからなかったからキモかったんだよなぁ。調べてたらわかった。Info.plist に指定するらしい。

	<key>NSMainNibFile</key>
	<string>Main</string>
	<key>NSPrincipalClass</key>
	<string>NSApplication</string>

上の例だと Main.nib がロードされる (NSApplicationMain から?)。
NSPrincipalClass はなんか起動時に自動的にインスタンス化されるもの?らしい。ないと console にエラー吐いて起動しない。

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++

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