zt日記

書いているのは Kazuhiro NISHIYAMA a.k.a. ZnZです。
2001|09|10|11|12|
2002|01|02|03|04|05|06|07|08|09|10|11|12|
2003|01|02|03|04|05|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|
2012|04|05|06|09|

この日記にはツッコミを入れられます。 ツッコミを入れたい日付をクリックすると、フォームが現れます。

xreaでtDiaryを使う方法はxrea.com で tDiary を使う方法インストールメモXREA + tDiary + Namazuをどうぞ。


2003年11月01日(Sat)

[k-of] lessプレゼン

lessプレゼンはああいうのじゃなくてless プレゼンのすすめを想定していたのですが、IRCで言うときにURLを出さなかったのが敗因かも。

[k-of] 昼食会

最年少rubyist(RRRWiki調べ)と一緒に昼食会に参加。

日本Rubyの会の話いろいろ。

quickml.comに制限がかかってしまったので、日本Rubyの会でquickmlサーバ希望という話を出してみたらfdiary.netのQuickMLサーバを、という話になって、日本Rubyの会のDNS(のMX)をそっちに向ければいいと言う話になっていたようななっていなかったような感じでした。

[k-of] 午後

Ruby実践事例の紹介が終わった後1階まで降りてしまって誰もいなかったのでよくわからなかったのでそのまま帰ってしまったり、\ay日記をみるとLC2003の方も見に行きたかったと後悔してみたり。

[ruby] tk/testrunner.rb

いくつか直してruby-devへ。


2003年11月02日(Sun)

[ruby] nkf

nkf が半角カナに弱過ぎなんじゃなくてデフォルトのオプションだと半角カナはないものとして処理するのにcgi.rbに埋め込まれていて変更困難なのが問題なのではないかと。半角カナ対応自体は-Xとか-xとかのオプションがあるぐらいなので、それをつければうまくいくはず。

[web] 投票

次の投票はタブをスペースいくつ分にしてるかを希望。RNNはLinkavailable: Ruby,diaryに入っていないのであまりみてないので…。

本日のツッコミ(全5件) [ツッコミを入れる]

Before...

moriq [-x については言及すべきでしたが忘れてました。 -eS で化けるとこも見せてなかったし…。]

moriq [ツッこんだら Script Error て出た。]

moriq [あれ? こんどは出ない…出力保存しとけばよかった。すみません]


2003年11月04日(Tue)

[Linux] Red Hat Linux 7.1 Security Advisories

VMware上なのでたまにupdate。

[k-of]

和宏じゃないです。moriqさんも同じ読みだけど字が違います。

[ruby] 多重代入

こんなとこに()がといえばこんなことも出来るようですが、使い道が思いつきません。
% irb18 --simple-prompt
>> x = [1,[2,[3,4]],5]
=> [1, [2, [3, 4]], 5]
>> a,(b,(c,d)),e = x
=> [1, [2, [3, 4]], 5]

[ruby] RubyとGUI

いくつか使ってみた(or使おうとした)感じでは…
Ruby/Tk
rubyのconfigureの時に指定するオプションがわかってtcltklibが出来ればインストールは簡単。VMware上のwoodyではdebパッケージで指定されているものを参考にして.../configure --prefix=$HOME/opt/ruby18 --program-suffix=18 --with-default-kcode=none --with-dbm-include=/usr/include/db1 --with-tklib=tk8.3 --with-tk-include=/usr/include/tk8.3 --with-tcllib=tcl8.3 --with-tcl-include=/usr/include/tcl8.3 --enable-ipv6 --with-lookup-order-hack=INETでRuby/Tkが使えるようになった。cygwin上では使えず。
GUIを作る上では簡単なwidgetだけでいいのなら簡単に作れる。
FXRuby
普通にFOXとFXRubyをmakeしてインストールするだけ。woodyでもcygwinでもすんなり動いた。
test/runner.rbやexamplesを動かしただけなのでプログラムの書きやすさは不明。fox-unicodeの開発が止まっているようで日本語への対応状況が不明。
Ruby/Qt
QtやRuby/Qtのどのバージョンを組み合わせればいいのかよくわからずインストールできなかった。
Ruby/GTK2
Qtと同じく何を入れればいいのか調べるのが面倒であきらめた。cygwin上ではsetup.exeで入れてみてもうまく動かなかった。
Ruby/SDL
GUIとは違うような…ということでインストールを試すこともしていません。ゲーム系ならSDLが一番ポータブルに出来るのかもしれません。
Apollo
Windowsのみ? Delphiとかを使ったことないとかなり厳しい感じがします。
VisualuRuby
Windowsのみ。Tkのように文字の大きさに合わせてボタンの大きさが自動で決まるとかは簡単に出来なかったので文字のサイズとかが変わっても対応できるようなものを作るのは大変そう。
WideStudio
configureがautoconfじゃないのでrubyから使えるようにする方法がよくわからなかった。
Ruby/Fltk
Ruby GUI センターによるとこういうのもあるらしい。
本日のツッコミ(全3件) [ツッコミを入れる]

岩月 [ありがとうございました。参考になります。]

さかい [遅くなりましたが、cygwin用のruby-gnome2のパッケージを作り直しました。 cygwin-ruby18...]

とみた [お名前直しました。失礼しました。]


2003年11月05日(Wed)

[ruby][cygwin] gtk2

gtk2.soのLoadErrorはcygwinのライブラリとかを入れまくったら解決した。一気に入れたのでどれを入れれば解決だったのかはわからないまま。


2003年11月06日(Thu)

[net] Gmane -- Mail To News And Back Again

Gmaneの存在はEmacs関係のメーリングリストで知ったと思います。入っていないメーリングリストを読みたいときにも便利そうです。

[Windows] Messengerサービス

smbclient -M hostnameでWindowsにメッセージが送れるという話から止めておいた方がいいという話になってMS03-043: 「メッセンジャー」サービスの停止方法に書いてある手順で停止しておいた。


2003年11月07日(Fri)

[Inferno] on Windows XP

なぜかInfernoを入れてみる。Inferno日記にあるようにショートカットの作成には失敗していた。emu.exeが出来ていなかったのでemu.newからコピーしてみて起動すると、デフォルトのC:\Users\Infernoへのインストールだとemu.exeを実行したときにpanic: root path 'C:\inferno' does not existとなってしまって起動できなかった。そこでC:\Infernoにインストールし直すと起動できた。

本日のツッコミ(全1件) [ツッコミを入れる]

moriq [事前にStart Menu\Programsを作ればいけたはず。 emu.exeにオプションを: D:\usr\In..]


2003年11月08日(Sat)

[web] リビング+:ドメインの新常識はケータイが作る?

この記事の最後の方をみて日本語ドメイン名プラグインを入れてみた。こういうのが必要になってくるということはそろそろメインのブラウザをIE(コンポーネントを使ったブラウザ)以外にした方がいいのかもしれない。


2003年11月09日(Sun)

[web] Access forbidden!

http://kitaj.no-ip.com/tdiary/ をSleipnirでみるとAccess forbidden!になる。他に見えないという話を見かけないのでMozilla Firebirdで見てみたら見えた。謎。

本日のツッコミ(全1件) [ツッコミを入れる]

きた [うーん,なんででしょう. User-Agentって変えてますか?]


2003年11月10日(Mon)

[Windows] Mozilla Firebird 0.7 日本語版

0.7の英語版を入れていて日本語版を入れてみたけどメニューとかが英語のままだったのでアンインストールして入れ直し。プロファイルとかを消すようにしてしまったらMozilla関係を数件だけ追加していたブックマークをlost。新しく起動してプロファイルを作成すると日本語で出るようになった。

[web] Re: Access forbidden!

User-Agentは変えてないのですが…、と思ったら「Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; i-NavFourF; .NET CLR 1.0.3705; .NET CLR 1.1.4322)」になってました。日本語ドメイン名プラグインの影響?

本日のツッコミ(全1件) [ツッコミを入れる]

きた [理由は忘れてしまいましたが,i-NavFourFはBadRobotに指定してました. 解除したので大丈夫だと思います..]


2003年11月11日(Tue)

[ruby] ry

10日のIRCの話題より。nokadaさん作。
% cat y.rb
def method_missing(sym) puts sym.to_s.sub(/^(..).+/, '\1(ry'); end
% ruby -Ke -ry -e ざぶとん
ざぶ(ry
%

[web]

今日のなんでやねんは問題なく見えるようになったけど、http://総務省.jp とかを試してもSleipnirの中だと使えないみたい。これだとほとんど意味がないのでアンインストール


2003年11月12日(Wed)

[Linux] ash -c 'hoge="-n"; echo "$hoge"'

ashで変数をechoする時に-nだけだとechoされないので、回避策を考えてみたが、echo -- "$hoge"とかもきかず、結局見た目が同じならかまわない場所だったのでash -c 'hoge="-n"; echo "$hoge "'のように後ろにスペースを入れて回避することにした。

[ruby] test/runner.rb --runner=tkとか--runner=foxとか

Runボタンを押してもう一回実行させるとtest_05_eq(TestDRbCore)とtest_const(TestConst)のFailureが増える。調べてみるとTestDRbCoreの方はtest_05_eq中にrequireして状態を変えているからもう一度実行したときに失敗する。TestConstの方はincludeで状態を変えているから。

tkで実行するとtest_assert_nothing_thrownとtest_assert_throwsがErrorになるのも調べないと。


2003年11月13日(Thu)

[ruby] test/runner.rb --runner=tkとか

CVSに入った後はみんなでつついて解決が早い。

[cygwin] Ruby/Tk

Tkを入れた後、自分でmakeしているruby18をconfigureし直してみたらこんな状態に。ln -s /usr/share /shareというシンボリックリンクを作ってごまかすと動いた。
% ruby18 -r tk -e 0
/opt/ruby18/lib/ruby/1.8/tk.rb:676:in `initialize': Can't find a usable init.tcl
 in the following directories:  (RuntimeError)
    C:/cygwin/share/tcl8.4 C:/cygwin/opt/ruby18/share/tcl8.4 C:/cygwin/opt/ruby1
8/usr/share/tcl8.4 C:/cygwin/opt/share/tcl8.4 C:/cygwin/opt/ruby18/library C:/cy
gwin/opt/library C:/cygwin/opt/../tcl8.4.1/library C:/cygwin/../tcl8.4.1/library
 
This probably means that Tcl wasn't installed properly.
        from /opt/ruby18/lib/ruby/1.8/tk.rb:676:in `new'
        from /opt/ruby18/lib/ruby/1.8/tk.rb:676
%

[NetBSD] console

VMware上のNetBSD 1.6.1でconsoleのプロンプトが出ないのでなぜかと思ったら、真っ黒なだけだった。Ctrl+Alt+Space Ctrl+Alt+F2で切り替えるとちゃんとプロンプトが出るので、違いを調べてみるとconsoleはTERM=vt100でCtrl+Alt+F2以降はTERM=vt220だった。cshに戻してみるとconsoleでもちゃんとプロンプトが出たのでenv TERM=vt220 zshでzshを起動してみるとconsoleでもちゃんと色つきのプロンプトが出てきた。まずいのはTERM環境変数なのかvt100なのに色を付けようとする.zshrcの設定の方なのか…。

[ruby] test/drb/

drb://hostname:portにつなぎに行くため、IPv6のある環境で/etc/hostsの設定がまずいとサーバがIPv6でlisten、/etc/hostsにIPv4のアドレス hostnameのみなのでIPv4でつなぎにいく、つながらない、という状態になる。


2003年11月14日(Fri)

[ruby][Ruby/Tk] ke-tk.rb

TkCanvasを使ってみるテストとしてke.javaの移植をしてみた。
#!/usr/bin/env ruby
# http://www.meigaku.ac.jp/~watayan/prog/java/nanisource.html
# の「何もしない Java applet に毛のはえたやつ」をRuby/Tkに移植したもの
require 'tk'
 
c = TkCanvas.new
c.pack
 
maxx, maxy = c.width, c.height
num = (ARGV.shift || 100).to_i
interval = (ARGV.shift || 0.5).to_f
 
num.times do
  Thread.start do
    x, y = rand(maxx), rand(maxy)
    while true
      dx = ((rand * 4.0 - 2.0) * 2).to_i
      dy = ((rand * 4.0 - 2.0) * 2).to_i
      dx = 0 if x + dx < 0 || x + dx > maxx
      dy = 0 if y + dy < 0 || y + dy > maxy
      TkcLine.new(c, x, y, x+dx, y+dy)
      x += dx
      y += dy
      sleep interval
    end
  end
end
 
Tk.mainloop

2003年11月16日(Sun)

[web][tDiary] RSS Auto-DiscoveryとかLIRSとか

[tDiary-devel] Re: Reference to RSS version from <link> elementのあたりでoutput_rdf.rbプラグインにはlinkの出力がつくようになったけど、makelirs.rbプラグインの方にはそういう仕組みがない。つけるにしてもContent-Typeがないと困りそう、と思ったけどtype属性は必須じゃないようなのでなくてもいいのかもしれない。

output_rdf.rbプラグインの出力を確認しようとしてたまたま開いていたmput's essayのソースを見てみたらRSSのlink要素として同じものが2つ。

[Mozilla Firebird] Link Toolbar

Mozilla 1.xだとlink要素がツールバーに出せたような…と思って探してみるとextensionsにあったので入れてみた。どこに追加されたのかと思ってよく見てみたらステータスバーのところに追加されていた。ツールバーって言う名前なのに…。それに移動できないのが困る。

[mail] S/MIME

りゅうさんがS/MIMEに興味があるということだったのでBecky! S/MIME Plug-inを入れてみた。お試しで使ってみるにはCAとしてkasairugに頼んでみるのがいいのかもしれない。

[web] cookie

mputさんの日記のポート番号が変更になったときにツッコミの名前のクッキーが残っていてなぜかと思って調べたら、Set-Cookieにはポート番号の情報がなくてSet-Cookie2にはポート番号があることに気づいた。

つまりサーバ上に任意のポートでサーバを起動できる権限があればクッキーを奪える可能性があると。

[web] スタイルシート

mputさんの日記の投稿ボタンの色がIE(Sleipnir)で見ると影が左上にあって押していないのに押し込んだ状態に見えてしまいます。Mozilla FirebirdやOperaだと出っ張ったように見えました。


2003年11月17日(Mon)

[mail][ML] spam

ruby-gnome2-devel-jaのようにspamが流れるMLがいくつかあるけど、管理者は気づいてないのかな。

[tDiary] version up

そろそろ1.5.6にあげてもいいかもしれない。1.4からのバージョンアップだとデータファイルの変換が必要なのが面倒だけど。

本日のツッコミ(全1件) [ツッコミを入れる]

むとぽん [気づいてはいるのですが回避策がわからんのです...。なんかご存じで?]


2003年11月18日(Tue)

[ruby] Ruby-GPGME

woodyのlibgpgme-devとlibgpgme6が0.3.5の環境で使ってみようとすると定数が定義されていないと言うことでエラーが出まくったのでifdefで囲んで無理矢理makeを通してみたが、やっぱりダメだった。
% ruby -0 -p -e '
gsub!(/^\s*rb_define_const\s*\(mGPGME, "([^"]+)",\s*INT2FIX\(\w+\)\);/, "#ifdef \\1\n\\&\n#endif")
' gpgme_n.c.orig > gpgme_n.c
% make clean
% make
gcc -fPIC -g -O2 -fPIC  -I. -I/usr/lib/ruby/1.6/i386-linux -I. -I/usr/include -DHAVE_GPGME_H   -c -o gpgme_n.o gpgme_n.c
gpgme_n.c: In function `rb_s_gpgme_get_sig_string_attr':
gpgme_n.c:1026: warning: assignment makes pointer from integer without a cast
gcc -shared  -L/usr/lib  -o gpgme_n.so gpgme_n.o -L. -lruby -lgpgme -lc
% ruby -Ilib examples/keylist.rb
lib/gpgme.rb:39:in `check_error': uninitialized constant GPGME_EOF at GPGME (NameError)

[ruby] ke-tk.rb

ke-gtk2.rbに移植されていたのを見て書き忘れていたのを思い出したけど、ke-tk.rbはしばらくたつとなぜか勝手にエラーもなく終了します。TkcLineが多くなりすぎるとまずい?

[mail][ML] spam対策

sourceforgeでMLの管理をしたことがないので、設定画面が確認できないのですが、投稿可能なのをsubscriber onlyに設定出来るはず。


2003年11月19日(Wed)

[Windows] chm

一覧が見えるかと思ってhttp://www.namikilab.tuat.ac.jp/~sasada/chm/ にアクセスしたら残念な思いをした。

[Windows] Opera 7.22(ja)

7.21(ja)からあげてみよう。

[Windows] IEにパッチを当てるとスクロール操作に不具合,パッチの品質に改めて注意が必要

The RWikiで編集しようとしたらtextareaのスクロールバーでこの不具合に遭遇。


2003年11月20日(Thu)


2003年11月22日(Sat)

[web] error

arika.org/diary/でエラー。
Content-Type: text/plain
 
/usr/lib/ruby/1.8/timeout.rb:42:in `new': execution expired (Timeout::Error)
 
/var/www/arika.org-diary/tdiary/tdiary.rb:619:in `eval_src'
/var/www/arika.org-diary/tdiary/tdiary.rb:65:in `join'
/var/www/arika.org-diary/tdiary/tdiary.rb:65:in `safe'
/var/www/arika.org-diary/tdiary/tdiary.rb:618:in `eval_src'
/var/www/arika.org-diary/tdiary/tdiary.rb:862:in `do_eval_rhtml'
/var/www/arika.org-diary/tdiary/tdiary.rb:812:in `eval_rhtml'
/var/www/arika.org-diary/tdiary/index.rb:80
/usr/lib/ruby/1.8/apache/ruby-run.rb:53:in `load'
/usr/lib/ruby/1.8/apache/ruby-run.rb:53:in `handler'
HTTPレスポンスヘッダを確認しようと思ってw3mで見るとTimeout::Errorが(eval):53:in `retrieve_bugs': getting item was failed (RuntimeError)に変わっていた。一度リロードするとTimeout::Errorになっていた。
HTTP/1.1 200 OK
Date: Sat, 22 Nov 2003 04:13:47 GMT
Server: Apache/2.0.48 (Debian GNU/Linux) mod_ruby/1.1.1
Connection: close
Content-Type: text/plain; charset=ISO-8859-1
charset=ISO-8859-1になっているということは表示されてしまったContent-Type: text/plainはHTTPヘッダとしては使われていないと。 /usr/lib/ruby/1.8/apache/ruby-run.rbの行からmod_rubyが使われていると推測でき、だとするとtdiary側でmod_rubyの場合のエラー表示処理がまずい(printがそのまま使われているのではないか)という可能性に気づく。というわけで確認してないけどこんな感じの修正で直るのかも。tdiary-develに投げておこう。
Index: index.rb
===================================================================
RCS file: /cvsroot/tdiary/core/index.rb,v
retrieving revision 1.22
diff -u -p -u -r1.22 index.rb
--- index.rb	25 Sep 2003 02:15:50 -0000	1.22
+++ index.rb	22 Nov 2003 04:19:42 -0000
@@ -110,3 +110,3 @@ begin
 rescue Exception
-	print "Content-Type: text/plain\n\n"
+	print @cgi.header( 'type' => 'text/plain' )
 	puts "#$! (#{$!.class})"

2003年11月23日(Sun)

[ruby] exerb

レシピの区切りにスペースが許されていないのはファイル名にスペースが入っていても大丈夫なように、ということだったような気がする。

[Ruby] gtk2

require 'gtk'require 'gtk2'に変えただけでGtk.initを忘れるとまともに動かなかった。カレンダーが表示できるのはいいけど、祝日を赤色にしようと思っても出来そうになくて残念な思いをした。
begin
  require 'gtk2'
  Gtk.init
rescue LoadError
  require 'gtk'
end
 
window = Gtk::Window.new
window.signal_connect("destroy") {
  Gtk.main_quit
}
 
cal = Gtk::Calendar.new
window.add(cal)
 
window.show_all
Gtk.main
本日のツッコミ(全1件) [ツッコミを入れる]

きた [そもそもGtkのGtkCalendar自体にそういう機能がないみたいですね.]


2003年11月25日(Tue)

[CSS] bodyにline-heightに指定するのは間違い(の可能性が高い)

全体にline-heightが指定されたページの最上部が消える(IE6)というブラウザのバグ問題の他に、The 'inherit' valuecomputed valueだからbodyのfont-sizeを基準にline-heightが計算されて、その計算後の値が継承されるため、h1などのフォントがbodyより大きいものでは行間が期待している状態より狭くなってしまう。
このフォントサイズで
line-heightが計算される。
この行と次の行が
重なる。

[Ruby] Exerbレシピの区切り

Windowsだとスペースの入ったファイル名はありがちだけどタブはファイル名に使えないからタブ区切りなのかと思ってました。

[CSS] 回避方法

bodyにline-heightを指定するのではなく*にline-heightを指定するというのを考えていました。単位無しにするのと比べると、どちらの方がブラウザのバグを踏む可能性が低いのでしょうか?

本日のツッコミ(全1件) [ツッコミを入れる]

ばけら [そういう場合は line-height: 120%; のような書き方ではなく line-height: 1.2..]


2003年11月26日(Wed)

[ruby] Symbol#===

Symbol#===を定義したことあるのはstate.rbぐらい。coerceみたいな感じのつもり。

[programming] here documentと区切り文字

EOTとかの内容に関係ない文字列になっていることも多いけど、HTMLなどのように内容を表す文字列を区切りにしてmmm-modeとかで適切に切り替わると便利なのに、と思う。

[ruby] Tempura

REXMLを使っていると言うことはCDATAを入れるとバグが見つかるかもと思って試してみたら「Tempura::Template.new_with_string(%Q[<x _child_xml_="'foo <![CDATA[cdata]]> bar'"></x>]).expand(binding) #=> "<x>foo bar</x>"」となった。

[web] プレインストールソフト

ブレインストールに空目。それでも何となく意味があってそうなのがこわい。

[Windows] AVG 6.0 (Free)

AVGを入れてみたけど、重かったので止めた。除外ファイルが指定できないとVMwareのディスクイメージとかのチェックしてほしくないものもチェックされてしまって厳しい。


2003年11月27日(Thu)

[word] 解放と開放

間違いやすい。

[ruby] throwとcatchのタグ

PStoreでタグを1種類しか使ってないけどネストした場合に大丈夫なのかなと思って試してみた。PStore.new('a.dat').transaction{|ps_a|PStore.new('b.dat').transaction{|ps_b|ps_b['foo']='bar';ps_a.abort};ps_a['foo']='bar'}でb.datだけちゃんと出来てa.datは出来ない。どうして大丈夫なのかと思ってソースを確認してみたら@abortというインスタンス変数がフラグになっていた。

[RD] ((<...>))の中に

(('...'))を使えば((<(('"も'も/も|も使えます'))|TEST>))ということで。""はたぶん省略記法なので、本来は(('...'))を使うべきだと思います。RDは自由度が低い代わりにエスケープできないということがおこらないようになっているはず。

本日のツッコミ(全1件) [ツッコミを入れる]

破レ傘 [昨日だったか今日だったか「解法」と書いてあわてて消しました。手書きだったんですが。]


2003年11月28日(Fri)

[ruby] test_env.rbのtest_has_value

値が空文字列の環境変数があるとENV.has_value?がtrueを返してしまってCPUを食いつぶされていた。GDBをみて使い方を勉強したところだったのでgdbでtrueを返す時のenv[0]を見てみたらLS_COLOR=だった。lsとかでちゃんと色が付いてるから空文字列になっていたとは気づかなかった。

[ruby] test/runner.rb

VMware上でいろんな環境で試すとOS毎の違いによるバグが見つかったり、自分の環境が原因のバグが見つかったりとおもしろい。

[ruby] on NetBSD 1.6.1

make -j4でmakeしようとするとmakeの途中でjob pipe read: Bad file descriptorになって止まってしまった。-j3とか-j8にすると止まるところが変わるのが不思議。-jNなしだとちゃんとmake出来る。


2003年11月29日(Sat)

[CVS] cvs update -dP

~/.cvsrcにupdate -dPと書いておくとか。.cvsrcを確認してみたらなんかいらないものも入ってる。(update -Rはデフォルトだから不要とか)
% cat ~/.cvsrc
checkout -P
cvs -z3
diff -up
log -N
rdiff -up
update -dPR

2003年11月30日(Sun)

[ruby] InflateProxyServer

天泣記をIEでも見えるようにするためのproxy serverを作ってみた。deflateをdecodeするものはInflateらしい。
% cat iproxy.rb
#!/usr/bin/ruby
 
require 'webrick/httpproxy'
 
class InflateProxyServer < WEBrick::HTTPProxyServer
  def proxy_service(req, res)
    super
    decode_deflate(req, res)
  end
 
  def decode_deflate(req, res)
    ce = res.header['content-encoding']
    if ce && /\Adeflate\z/i === ce
      require 'zlib'
      res.body = body = Zlib::Inflate.inflate(res.body)
      res.header.delete('content-encoding')
      res.header['content-length'] = body.length
    end
  end
end
 
if __FILE__ == $0
  config = Hash.new
  config[:BindAddress] = '127.0.0.1'
  config[:Port] = 8080
  config[:Logger] = WEBrick::Log::new($stderr, WEBrick::Log::DEBUG)
  config[:AccessLog] = [
    [ WEBrick::BasicLog::new($stderr), WEBrick::AccessLog::COMBINED_LOG_FORMAT ],
  ]
  s = InflateProxyServer.new(config)
  shutdown_proc = proc do
    s.shutdown
    exit
  end
  trap('INT', shutdown_proc)
  trap('TERM', shutdown_proc)
  s.start
end

[ruby] InflateProxyServerの続き

Content-Lengthがダメだったので修正。content-encodingをdecodeしたのに削ってなかったのもまずかったのでdeleteの処理も追加。


copyright © 2001-2013 ZnZ
Key fingerprint = 6E14 2C9C DBD7 874D 8B3C CAA8 9B58 5538 ED7E 1B73