✖
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);
✖
アレェ。なんで xcodebuild で plist が読めないよ! とか怒られるんだろう。ML のテストがとおらないのもこれのせいっぽいなぁ。
というかテストの書きかたがわるいよなぁ。せっかく Ruby でかいてるんだから require して new しまくったほうがいい予感だ。
xcodebuild がだめなのは別の問題だ。てか ML のテストはうちの環境だと再現しない?
テスト失敗したときのエラーメッセージがもうちょいマシになるはず……
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++
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
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 のリファレンスをひこうと思うときは、なぜかいつもネットワークにつながらない場所にいるので)
スクラップブックにいれとけばいいだけだけど!!
Xcode TemplateInfo.plist
ってなんなんだろ。いま単純に消してしまっているけど、なんかたぶん設定が書かれるんだよなぁ。
FilesToMacroExpand だけ処理すればよくて、あとリネーム規則がかかれるっぽいけど、どっかに詳しい説明がないかなぁ
project.pbxproj は FilesToMacroExpand になくても強制的に変換されるっぽい
http://rubycocoa.svn.sourceforge.net/viewvc/rubycocoa?view=rev&revision=1838