海野秀之(うんのひでゆき)の外部記憶
Twitter (twilog) / RSS / アンテナ / ぶくま
HHKになぜλキーがないのかと和田先生を問い詰めてみたい (が、もちろんそんな勇気はない)
http://www.lingr.com/room/gauche/archives/2007/01/31
というのを見ていて思い出した。
小学生のころ電話級とったんですが、その試験勉強本にでてくるλという字の読み方がわからなくて、こころの中で「入る(はいる)」と読んでいた。
とくに支障はありませんでした。
おお、すてき。どれくらい素敵って、思いついたのが自分じゃなかったのがくやしいくらい、素敵。
例によって ja.reddit 経由。
% web off
で、ネットがみられなくできたらいいと思いませんか?
ってなわけで、 「WEBrick でプロキシサーバを作る(るびま)」 を参考に、たまに遮断できるプロキシサーバを書いてみました。
#!/usr/local/bin/ruby
# proxy.rb [offline]
#
# a http proxy server can shutout your request when set as offline.
#
# 2007/Feb/02 written by UNNO Hideyuki.
require 'webrick'
require 'webrick/httpproxy'
require 'uri'
empty_response_handler = Proc.new(){|req, res|
res.body = <<EOS
<html><head><title>Web offline!</title></head>
<body style="margin-left:3em;">
<H1>It is now isolated from Web space.</H1>
<p>Enjoy your more <b>important</b> activity!<br/>
- proxy.rb written by UNNO Hideyuki.</p>
</body></html>
EOS
}
config = {
:BindAddress => '127.0.0.1',
:Port => 8080,
:Logger => WEBrick::Log::new('logfile.txt'), # ←もちろん、てきとーに変えるべし
:ProxyVia => false,
# 親プロキシは必要に応じて
:ProxyURI => URI.parse('http://hogehoge:8080/')
}
if ARGV[0] and ARGV[0] == 'offline'
config[:ProxyContentHandler] = empty_response_handler
end
s = WEBrick::HTTPProxyServer.new(config)
trap('INT'){ s.shutdown }
s.start
お見せするほどの物じゃない気はしますが、~/bin/web はこんなの:
#! /usr/local/bin/ruby
# -*- mode:ruby -*-
PROXY='/home/ほげ/bin/proxy.rb'
def kill_proxy
t = 0
user=`whoami`.chomp
while proxy_pid=`/bin/ps -u#{user} | grep proxy.rb`.slice(/^(\d+)/, 1)
cmd="kill #{proxy_pid}"
puts "[Stop] #{cmd}"
system cmd
sleep 0.5
t += 1
break if t > 100
end
end
case ARGV[0]
when 'on', 'online'
puts "Turn on to be online."
kill_proxy
system("#{PROXY} 2> /dev/null&")
print "[Start Proxy] ", `sleep 1; /bin/ps -e | grep proxy.rb`, "\n"
when 'off', 'offline'
puts "Isolated from Web space, enjoy!"
kill_proxy
system("#{PROXY} offline 2> /dev/null&")
print "[Start Proxy with offline mode] ", `sleep 1; /bin/ps -e | grep proxy.rb`, "\n"
when 'kill'
kill_proxy
else
print <<EOS
web [on|online|off|offline]
on | online: (re)start http proxy server with online mode.
off | offlne: with offline mode.
kill : kill the proxy.
EOS
proxy_pid=`/bin/ps -e | grep proxy.rb`.slice(/^(\d+)/, 1)
if proxy_pid
puts "\nNow proxy is runnig with pid:#{proxy_pid}."
else
puts "\nProxy is not running now."
end
end
あとは、使っているブラウザに http://127.0.0.1:8080/ をプロキシとして設定すれば、 おっけい。
こんなの欲しがってるの、ぼくだけ?
ちょっと修正: kill のあとに少し待った方がいいみたいなので、sleep ついか。 (0.5 という数字に意味があるのかどうか不明)