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 指定してるときは完全に消えるわけじゃないからなぁ

2006年 11月 13日

iircv だいたいよさげ


アイコンは http://www.xfce-look.org/content/show.php?content=23517 が public domain だったので gimpshop で文字のっけて shadow った……gimpshop むずかしすぎる。

  • width と行数を設定できるように
  • 一番上にゴミが見えることがあるのをちゃんと直す(行数指定とともに)
  • ホットキー(Ruby/Cocoa では無理?)

http://lab.lowreal.net/trac/browser/c/mac/iicv.rb (最新)

wanna

drawAtPoint はあんまり連続描画するもんじゃないらしいので LayoutManager を使ってみたい。
ざっと眼を通したけど(メソッド名だけ)めんどくさそう

RegisterHotKey

拡張ライブラリ作ったけど、なんかもっと簡単にやるほうほうがある気がしてならない。Carbon の関数をインポートする機能ってないんかなぁ

Carbon で拡張ライブラリつくるときのメモ

#include の順番が地味に重要だった。

#include <ruby.h>
#include <Carbon/Carbon.h>

だとコンパイルエラー

#include <Carbon/Carbon.h>
#include <ruby.h>

すればおk

#!/usr/bin/ruby

require 'mkmf'
$CFLAGS << " -framework Carbon "
$LDFLAGS << " -framework Carbon "
create_makefile 'osxhotkey'

とか一応やらないとリンクが通らない

hotkey こんなん

app = NSApplicationWithHotKey.sharedApplication
ref = app.register_hotkey("command+shift+j") do
	puts 'hello'
end

app.run

学内だとチェックインできねぇ

rubygems で拡張ライブラリ

ってどうやってかくんだ><><
っていうか、学内のネットワークおそぎるんだよおおおおおお

拡張ライブラリ

newgem して (Hoe は生成ファイルがよくわからない……) 書いたけど、これでいいのか謎だなぁ。
拡張ライブラリビルドしないと test できないから

Rake::TestTask.new("test") { |t|
	sh %{ruby setup.rb config}
	sh %{ruby setup.rb setup}
	t.libs << "test"
	t.libs << "ext"
	t.pattern = "test/**/*_test.rb"
	t.verbose = true
}

みたいにしたけど、setup.rb に引数わたせないよなぁ。今回は渡す必要ないからいいけどどうするんだろ。
他のライブラリの Rakefile 読みまくるか

iircv ホットキー対応

した。 http://lab.lowreal.net/trac/changeset/472
osxhotkey が必要。rubyforge のアカウントが承認されてないので http://lab.lowreal.net/site-ruby/ においとく。

Mac のアイコン

/Developer/Applications/Utilities/Icon Composer.app で作るみたいだ。
Foo.app/Resouces/bar.icns として、Info.plist に

	<key>CFBundleIconFile</key>
	<string>bar</string>

を加えると .app のアイコンになった。

2006年 11月 12日

似非 Ircv

IRC を表示する DRb クライアント

require 'drb/drb'
require "rice/irc"
require "rice/observer"

class Ircv < RICE::SimpleClient
	def initialize(uri, nick, user, username, pass, *channels)
		super(nick, user, username, pass, *channels)
		@o = DRbObject.new_with_uri(uri)
	end

	def uped(subject, message)
		super
	end

	def message(subject, message)
		_, nick, user, host = */(.*?)!(.*?)@(.*?)/.match(message.prefix)
		line = '%s %s' % [nick, message.params.join(" ")]
		@o.call(line)
	end

	def downed(subject, message)
		super
	end
end

o = Ircv.new("druby://localhost:9876", "ircv", "ircv", "ircv", "password")
c = RICE::Connection.new('irc-gateway-host', 6667)
c.add_observer(o)

begin
	c.start
rescue RICE::Connection::Closed
	puts 'closed'
	sleep 30
	retry
end

てきとー

折り返し

そういえば折り返しができてないや

実装してみたけど読みにくかった

ステルス

やっぱちゃんと消えるようにしたいなぁ。じゃまだよなぁ。ねむい。

10秒たったらフェイドアウトするようにしてみた。
しかしちゃんと本家 Ircv の挙動確認しよう……

setIgnoresMouseEvents:

nib

インターフェイスビルダー使って実装する方法が未だにわからない。Ruby 側へのコネクションってどうやって張るんだろう。

偽 Ircv

http://lab.lowreal.net/trac/browser/c/mac/iicv.rb
いろいろ変えた。DRb のフロントオブジェクトである proc は write メソッド共通にしたので

class OutIO < IO
	def initialize(write_proc)
		@proc = write_proc
	end

	def write(arg)
		@proc.call(arg)
	end
end

$stdout = OutIO.new(DRb.new_with_uri(uri))

とかもできるはず。あとステータスアイテムを出すようにしたりとか、いろいろ変更した。

DRb クライアント側も

require 'drb/drb'
require "rice/irc"
require "rice/observer"

class Ircv < RICE::SimpleClient
	def initialize(uri, nick, user, username, pass, *channels)
		super(nick, user, username, pass, *channels)
		@o = DRbObject.new_with_uri(uri)
	end

	def uped(subject, message)
		super
	end

	def message(subject, message)
		_, nick, user, host = */(.*?)!(.*?)@(.*?)/.match(message.prefix)
		case message
		when RICE::Command::PRIVMSG
			line = "%s %s %s¥n" % [message.params[0], nick, message.params[1]]
			@o.call(line)
		when RICE::Command::NOTICE
			line = "%s %s %s¥n" % [message.params[0], nick, message.params[1]]
			@o.call(line)
		else
			type = "#{message.class.to_s.sub(/^.*::/o, '').downcase}"
			line = "%s %s %s¥n" % [type, nick, message.params.join(' ')]
			@o.call(line)
		end
	end

	def downed(subject, message)
		super
	end
end

o = Ircv.new("druby://localhost:9876", "ircv", "ircv", "ircv", "password")
c = RICE::Connection.new('host', 6667)
c.add_observer(o)

begin
	c.start
rescue RICE::Connection::Closed
	puts 'closed'
	sleep 30
	retry
end

みたいしてちょっと読みやすいようにした。

iircv

なんかときどき唐突に消えちゃうんだよなぁ。なんでだかわからない。fadein fadeout のコードをコメントアウトしてもなるからそのへんではないし……

数時間かかってわかった…… str.split(//) だけでは文字単位の分割にならないんだ。だから不正な文字がまざって Cocoa 側でエラーになる。
$KCODE を設定するか、正規表現にフラグたてないとだめか。ハマりすぎた。split(//u) にして完了