2007年 12月 28日

可愛い女の子

可愛い女の子をいまいちイメージできなくなっている。リアルよりリアリティのあるのを想像したい。プログラミングは大事だけど、可愛い女の子をちゃんと想像できなくなるのはまずい。

ruby1.8.6

もうほんとどうしよもないところでハマったりするので Mac でも 1.8.6 を常用することにした……

sudo rm -rf /usr/lib/ruby/gems 
sudo port install ruby
exec zsh (パスとおしなおし)
wget http://rubyforge.org/frs/download.php/29548/rubygems-1.0.1.tgz
tar xzvf rubygems-1.0.1.tgz
cd rubygems-1.0.1
sudo ruby setup.rb
sudo gem install resh

BridgeSupport の WebKit のところでおわた……

/opt/local/bin/ruby install.rb config --build-universal=yes
(in /Users/cho45/project/rubycocoa/src)
install.rb: entering config phase...
create ext/rubycocoa/extconf.rb
create framework/GeneratedConfig.xcconfig
create framework/src/objc/Version.h
create tests/Makefile
---> framework
create /Users/cho45/project/rubycocoa/src/framework/src/objc/osx_ruby.h ...
create /Users/cho45/project/rubycocoa/src/framework/src/objc/osx_intern.h ...
BSROOT="/Users/cho45/project/rubycocoa/src/framework/bridge-support" CFLAGS="-arch ppc -arch i386 -isysroot /Developer/SDKs/MacOSX10.4u.sdk" /opt/local/bin/ruby build.rb
Generating BridgeSupport metadata for: WebKit ...
./gen_bridge_metadata.rb:1800:in `compile_and_execute_code': Can't compile C code... aborting (RuntimeError)
command was: gcc  /tmp/src-0-28704.m -o /tmp/bin-0-28704 -F"/System/Library/Frameworks" -framework WebKit -framework Foundation  -include /tmp/src-0-28704.h  2>/tmp/log-0-28704

/usr/bin/ld: /System/Library/Frameworks/WebKit.framework/WebKit load command 20 unknown cmd field
collect2: ld returned 1 exit status
	from ./gen_bridge_metadata.rb:1051:in `collect_types_encoding'
	from ./gen_bridge_metadata.rb:521:in `collect'
	from build.rb:101
	from build.rb:50:in `measure'
	from build.rb:101
	from build.rb:62:in `each'
	from build.rb:62
config failed
hook /Users/cho45/project/rubycocoa/src/framework/post-config.rb failed:
'system BSROOT="/Users/cho45/project/rubycocoa/src/framework/bridge-support" CFLAGS="-arch ppc -arch i386 -isysroot /Developer/SDKs/MacOSX10.4u.sdk" /opt/local/bin/ruby build.rb' failed
try 'ruby install.rb --help' for usage
rake aborted!
Command failed with status (1): [/opt/local/bin/ruby install.rb config --bu...]
/Users/cho45/project/rubycocoa/src/rakefile:26
(See full trace by running task with --trace)

misc/bridgesupport/build.rb で WebKit はずして継続してるけど、Chemr がビルドできなくなりそうだなぁ……どうしたらいいんだろ……Leopard じゃないとだめなのかなぁ……

2007年 12月 27日

d2

おー、タイトルもその場編集できるー

「日記を書く」をクリックしたとき、タイトルの input 要素までスクロールしてほしい。

日記かいてない

ここ最近日記を書いていないということは、ここ最近何も考えていないということだと思う。考えようとするときは、文章にするし、文章にするときは、日記にする。日記をふりかえって、書いていないところがあるなら、そこは何も考えていないところだ。

なんだか、どうも、「浮き足立っている」感じがする。落ちつきがない。客観的じゃない。綺麗なことも考えてない。ぜんぜんだめだ。ぜんぜんだめだ、と書いて安心しちゃだめだ。

本当に嫌な人

からまれたら、どうするのがいいんだろう……実際のところ、ネットだから、リアルだから、という差はだんだんなくなっていくし (なぜならネットがリアルの延長にあるから)、誰もがネットを使いはじめると、だんだん、嫌な人、決定的に合わない人とも出会いやすく、からまれやすくなる。今のところ、mixi とか、そういう部分でしか目立たないけれど、増えていく。実際に、そういったところ以外でもいることはいる。(例えば nicovideo なんかでも感じることができる)

徹底的な無視、といっても、SPAM 行為と一緒で、どうしてもすりぬけてくるものがある。そういう人達を、確実にどうにかする方法は、今のところないように思える。からまれたら終わり。いじめと同じだ……

安全なところから、他人を凹ませて、外に出れなくして、喜ぶ人、というのが、一定数いる。なんらかのタイミングで、自分さえ、そうなるかもしれない。気付かないうちに、既になっているかもしれない。素晴しい人は死んでいく。未来を感じない。

一年

一年のまとめ、みたいなのをやろうと思っているけど、なんだか、結局やらないで終わりそうで、まずい。いろいろあったけど、不確定なことが多くて、どうしよもない。

jsm メモ

  • 謎な環境で eval される。
    • Component.classes とかはもちろんあるけど、IO はない。alert もない (めんどす)
  • Components.utils.import の第二引数を省略すると、現在の名前空間に import される (これどうやってるんだろ)
  • resource Protocol の setSubstitution に http: を指定して import しようとすると失敗する?
  • なんか instanceof がうまくいかない
    • 謎な環境なせいで prototype のオブジェクトが別になってる?

とりあえず File のユーティリティをちょこっと (名前空間とかまだちゃんと考えてないのでサンプル程度に) 書いてみた。なんかすぐ影響力のでかい人 (海外の) とかが別の作りそうで気がすすまない (無駄になる気がする)

Components.classes["@mozilla.org/network/io-service;1"]
          .getService(Components.interfaces.nsIIOService)
          .getProtocolHandler("resource")
          .QueryInterface(Components.interfaces.nsIResProtocolHandler)
          .setSubstitution("coderepos.org", IO.newURI("file:///Users/cho45/coderepos/platform/gecko/jsm/"));
          // .setSubstitution("coderepos.org", IO.newURI("http://svn.coderepos.org/share/platform/gecko/jsm/"));
Components.utils.import("resource://coderepos.org/file.jsm");

var file = IO.getFile("Temp", "test.txt")
File.write(file, "foobar");
alert(File.read(file)); //=> foobar

File.open("/tmp/hoge.txt", "write text", function (stream) {
    stream.writeString("foobarbaz");
});

これテストコードどうやって書けばいいんだ…… MozRepl ?

フォントサイズとか口調とか

啓蒙的な、主張が多い長文書いてる日記/ブログで、本文部分に font-size: 80% のスタイルがあたってると、そういうところになんで気を配らないんだろうと思うなぁ。

あと、何度も書いてるけど「~なんだが。」ってのは、ちゃんとした積み上げがない人が使うと本当にダサい……

どうでもいいけど↓の「jsm メモ」を、用語も何もしらない気持ちで読むとなんか笑ってしまう。

jsm 考えないといけないこと

  • どこにリソースほぞんするか
    • resource ディレクトリだと特権もってないユーザが起動したときこまる
    • profile のどっかなのかなぁやぱ
  • resource: でどこにわりあてるか
    • ドメイン (どこのドメイン?) + なんちゃら
  • すぐに使えるように、ダウンロードを自動でやるやつ (ないとめんどくさくて使えないよね……)
    • 安全じゃない
  • テスト方法
  • コンセプト
    • jslib みたいに完全なラッパにしない (nsIFile とか、nsIScriptableIO とかはできるかぎり活用する)
    • めんどくさいし、他の XPCOM のラッパを全部書かなくても十分つかえるから
  • とっかかりをどうするか
    • 管理する Add-on つくる ← 嫌 (ユーザにはどんなライブラリを使っているかなんて関係ないから)
    • 一関数にまとめてそれだけコピペ (どんぐらい短かくできる?)
2007年 12月 26日

拡張機能

userChrome.js に対して拡張機能にまとめるメリットがいまいちわかってない……

  • 複数ファイル使ったりとかの場合はむしろ必須
  • 設定が Tools -> Add-ons からアクセスできる (という仕組みが用意されている)
  • Mozilla Add-ons に登録できる


デメリット

  • userChrome.js にくらべて作るのがめんどくさい
    • 一回 Rakefile 書けばすみそうだけど
  • 気軽に書きかえられない
    • 書きかえてすぐコミット、とかができない
      • インストールしたあとにチェックアウトディレクトリへ symlink しなおせばいいだろうけど、それもめんどくさい (これは自分はいいけど、他の人がコミットしずらくなる)
  • ↑とかぶるけど設定画面ちゃんと作らないと使えない


あと拡張機能の content とかを content.jar とかに圧縮してるけど、あれのメリットがよくわからない。書きかえにくくなって嫌だ……chrome.manifest も書きかえないといけないし……

Fx3b2 フルズームの座標ずれ

なんか小数点以下の扱いに問題ありそう (縮小時だけ)

ejs.js はやくなった

コンパイル時間はともかく、実行時間が replace による簡単な置換の2倍程度まではやくなった。

COUNT = 500;

var t = "aaaa<%=s.foo%>bbbbb<%=s.bar%>ccc";
var e = EJS(t);
var f = EJS(t, {useWith:true});
var m = {foo:"test", bar:"foobar"};
var b = [
	function compile () {
		EJS(t);
	},
	function processing () {
		e.run(m);
	},
	function processing_with_with () {
		f.run(m);
	},
	function replace () {
		t.replace(/<%=s\.(\w+)%>/, function (_,a) {
			return m[a];
		});
	}
];


for (var i = 0; i < b.length; i++) {
	var fun = b[i];
	print(fun.name);
	var res = 0;
	for (var j = 0; j < COUNT; j++) {
		var now = (new Date).getTime();
		fun();
		res += (new Date).getTime() - now;
	}
	print(res + "ms / " + (res/COUNT) + "ms");
};
Spidermonkey
compile
283ms / 0.566ms
processing
25ms / 0.05ms
processing_with_with
37ms / 0.074ms
replace
12ms / 0.024ms

Rhino
compile
5094ms / 10.188ms
processing
500ms / 1ms
processing_with_with
670ms / 1.34ms
replace
279ms / 0.558ms

ejs.js の高速化より Spidermonkey と Rhino の速度差のほうに驚いた

replace の正規表現に g がついてないから、実際は replace はもうすこし遅いですね