2007年 06月 22日

gerry++

2007年 06月 20日

require "net/telnet"

t = Net::Telnet.new("Host" => "localhost", "Port" => 4242, "Prompt" => /repl> ¥z/n)
t.cmd ""

DATA.read.each do |l|
	t.cmd l do |s|
		puts s
	end
end

__END__
var prefs = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService);
prefs.setIntPref("network.proxy.type", 0);
2007年 06月 19日

アレェ。なんで xcodebuild で plist が読めないよ! とか怒られるんだろう。ML のテストがとおらないのもこれのせいっぽいなぁ。

というかテストの書きかたがわるいよなぁ。せっかく Ruby でかいてるんだから require して new しまくったほうがいい予感だ。

xcodebuild がだめなのは別の問題だ。てか ML のテストはうちの環境だと再現しない?

テスト変更
http://rubycocoa.svn.sourceforge.net/viewvc/rubycocoa/trunk/src/framework/tool/rubycocoa/test/test_rubycocoa.rb?r1=1846&r2=1845&pathrev=1846

テスト失敗したときのエラーメッセージがもうちょいマシになるはず……

2007年 06月 18日

gem update --system した。

Mac は gem cleanup もした。

Thunderbird userChrome.js

Firefox と実行環境がちょっと違うっぽい。Cc, Ci, kXULNS とかが定義されてないので自分で定義しておく必要がある (Fx だと定義済みのコンテキストになってる)

うーん。メニューへの追加方法がわからない。menuitem がない。どうなってるんだろ。userChrome.js をちょい変更したらプロキシのやつは改変なしで動いた。
http://lab.lowreal.net/trac/browser/c/userChrome/proxy.uc.js

gerry++

2007年 06月 17日

userChrome でプロキシ設定きりかえ

FoxyProxy を(たいして機能をつかっていないのに、複数プロキシをきりかえたいというだけで) つかっていたのだけれど、やめた。
普通にステータスバーから切り替えさえできればいいので (なんか FoxyProxy だとこれができないのだ。設定画面が Cmd-W で閉じれないし)、userChrome で prefs をいぢるようにした。

(function () {
	const prefs = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService);
	var proxySetting = [
		function Disable () {
			prefs.setIntPref("network.proxy.type", 0);
		},
		function LocalSocks () {
			prefs.setIntPref("network.proxy.type", 1);
			prefs.setCharPref("network.proxy.socks", "localhost");
			prefs.setIntPref("network.proxy.socks_port", 10080);
		},
		function School () {
			prefs.setIntPref("network.proxy.type", 1);
			prefs.setCharPref("network.proxy.http", "");
			prefs.setIntPref("network.proxy.http_port", 8081);
		},
	];
	const ID = "status-bar-proxy-uc";
	var statusbar = document.getElementById("status-bar");
	var panel     = document.createElementNS(kXULNS, "statusbarpanel");
	var iconimg   = <><![CDATA[
		data:image/png;base64,
		iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAQAAAC1+jfqAAACzGlDQ1BJQ0Mg
		UHJvZmlsZQAAeJx9kEtoE1EUhr87WgRpFTRWKQp3VbNoy9C6qC6Upta0VmIY
		U/tAkHRyk4ydTMY7k/jAhQjiRrC6FDc+cCUupQsXLoQuRAqKuhHBpVhBENyI
		xMUkzUirFwa+Oefe/5z/h45k3vddQ0LFC7WVTsmZ2Tm55Q0ddNEJkLcDfySb
		PQGQ932XdefnewTA2/6N+/89XXpmdg6EBBKliA8AifmIx4HEhdAPQZwBEnY5
		XwDhA306Z42CuAdsK8V4PsYFFdggngBHbF+HYOSA8bpdCkGsAqZXcDww9gLD
		hcCugHEPjJszs3MyWjOchMP7YNOrdm0ugCePYXdvu5bcA7umYWmoXfthIQDR
		vRIUhwYBEJ0p6PjUaPzohS134PftRuPXg0bj90PY9BFeuHZN15sZCfEaIh8A
		JNLKU9qxpZVOyayuFh1XxSLduB35jfRgyWrRvzjKBIBhuD8O01th8jrc/Qz7
		n8LOZ5DtgtxBjKu0vlBdDAFGq/4l7ZTKoRw0zUHZLwdNc0iO+L6r5Gi14tdC
		peWEZw/0ybzrSu2UymEgtQqUrqvCABW31vK7HehU3tQpoBeMogrGmizOFfJH
		J4EBEG8K6ugY0AdisegcmwCSwMuiPjYVsdjhhBO5iI3Dnps50WS8auZkpMmq
		H6asln5QPzXWqp/LH88CPSAOLVQnLaAbjOTlcm46YpG7XB7NNPk5s7goHDwU
		HhKLNCn68dFUKeLg4OKQRuGh0DgELGx40yUbY0maL3h8QeNwnhoKicVpUhmu
		9a0pSPOD+c18Z943H5lfF3tqyXbnmj7r2Cu3vpNFodd0m93mTpG+TZURXFxK
		KCprnoLYprHtit5iT1vJXrn1Xd3I/Iy5VLFJ/cyjCFhA41BH4RKgGIlN+1d6
		Cnf5yvM97VnvNi+dedu5fOWvrKrrXKk1V3//t+/F36s/zbABaFPXSTsAAAB3
		SURBVCjPrZFBFcAgDEO/DR4WcFYR4IT78ICNyekuMKCD28KF14Y0pPAnAkJC
		CLumo6AoSiaScbZ9oygV3yp+pfTXfqr5eXYXt54apBGSIUi/xINCsgrWg1gP
		6y/qnMf1UpRMIqOUXQ7j3N+oZpVi22MX8bSLIx4U5UEkYy3cDgAAAABJRU5E
		rkJggg==
	]]></>.replace(/¥s/g, "");

	var img = document.createElementNS(kXULNS, "image");
	img.setAttribute("src", iconimg);

	var menu = document.createElementNS(kXULNS, "menupopup");
	var sett = document.createElementNS(kXULNS, "menuitem");
	sett.setAttribute("disabled", "true");
	menu.appendChild(sett);
	proxySetting.forEach(function (f) {
		var mi = document.createElementNS(kXULNS, "menuitem");
		mi.setAttribute("label", f.name);
		var command = function (e) {
			if (menu.hidePopup) menu.hidePopup();
			sett.setAttribute("label", "Cur: "+f.name);
			// reset
			["http", "ssl", "ftp", "gopher"].forEach(function (p) {
				prefs.setCharPref("network.proxy."+p, "");
				prefs.setIntPref("network.proxy."+p+"_port", 0);
			});
			f();
		};
		if (!arguments.callee.called) { command(); arguments.callee.called = true }
		mi.addEventListener("command", command, false);
		menu.appendChild(mi);
	});

	panel.appendChild(img);
	panel.appendChild(menu);
	panel.setAttribute("tooltiptext", "Change proxies");
	panel.addEventListener("click", function (e) {
		menu.showPopup(panel, -1, -1, "popup", "bottomleft", "topleft");
	}, false);

	var t = document.getElementById(ID)
	if (t) t.parentNode.removeChild(t);
	panel.id = ID;
	statusbar.appendChild(panel);
})();

インストールしていたアドオンが一個へった。

http://lab.lowreal.net/trac/browser/c/userChrome/proxy.uc.js

2007年 06月 15日

Xocde lproj

lproj を追加するときは nib を右クリックしてアレするみたいだけど、plist の中身を見てのなかなかよくわからない構造になっててどうしたらいいのかなぞい。
add のときに lproj だったら特別な処理が必要だよなぁ。lproj 内の nib スキャンしてほげほげとかやんないとだめかなぁ。滅多に追加しないから Xcode でやればいい気もする。


あと nib を dictionary(?) つかって更新するようにタスクを書いてあるけど、これ Rakefile に書いてしまうと Xcode でビルドしたときまずい。というか Xcode と IB だけで開発するとき (nibtool つかわない) って多言語化はどうやってるんだろう……

Cocoa

チートシートつくってみたけど、メソッドが多すぎてぜんぜんはいらない。
http://lab.lowreal.net/test/pdfkit.png (PDFKit のリファレンスをひこうと思うときは、なぜかいつもネットワークにつながらない場所にいるので)
スクラップブックにいれとけばいいだけだけど!!

2007年 06月 14日

Xcode TemplateInfo.plist

ってなんなんだろ。いま単純に消してしまっているけど、なんかたぶん設定が書かれるんだよなぁ。

FilesToMacroExpand だけ処理すればよくて、あとリネーム規則がかかれるっぽいけど、どっかに詳しい説明がないかなぁ

project.pbxproj は FilesToMacroExpand になくても強制的に変換されるっぽい

http://rubycocoa.svn.sourceforge.net/viewvc/rubycocoa?view=rev&revision=1838