2005-12-09
■ [javascript] Ruby.js
(via 最速インターフェース研究会)
javascript上に、「Ruby風」のメソッドを実装するスクリプト。
使用例より:
[1, 2, 3].each(function(item) { alert(item * 2) })
each! eachが!
[1, 2, 3].map(function(item) { return(item * 2) //returnが省略できないことに注意 }).each(alert) //関数を直接渡すこともできる
functionをdoに置き換えたらRubyと見間違えそう。
スクリプト本体はこちら:ruby-talk:117184
2005-12-13
■ [softs] Screenをはじめよう
後輩に説明するために、GNU Screenのイントロダクションを書いてみた。まだ書きかけだけど。
ずっと前にも同じような文書を書こうとした形跡があるけど、結局必要に迫られないと完成しないっぽい。
2005-12-16
■ [hiki] サーバによってログインできなくなる件
http://xxxxxxxx.com/w/ というアドレスにhiki(0.8.4)を設置したら、管理者でログインできなくなった。 どうやら、ブラウザ側がcookieを受け取ってくれない模様。
ドットの数によってcookieが拒否されるとかいう 仕様もあったりするみたいだけど、hikiが送信するcookieはdomainは設定していないようなので、これではないよなぁ。
不可解なのは、w3mでヘッダをダンプさせると
yhara@cosmos:~/temp % w3m -dump_head 'http://xxxxxxxx.com/w/?c=login&p=FrontPage&name=admin&password=xxxxxx' Received cookie: session_id=f1170464443bc6ad HTTP/1.1 200 OK Date: Fri, 16 Dec 2005 20:06:12 GMT Server: Apache Set-Cookie: session_id=f1170464443bc6ad; path=/w/; expires=Fri, 16 Dec 2005 21:06:12 GMT Connection: close Content-Type: text/html
のようにちゃんとcookieを受け取ってくれるのだが、
w3m 'http://xxxxxxxxx.com/w/?c=login&p=FrontPage&name=admin&password=xxxxxx'
のようにアドレスを開くと受け取ってくれない(Received cookie: という表示が出ない)ということ。どうなってるんだ。
サーバの実体はxxxx.s153.xrea.comなのだが、XREAの設定の問題なのだろうか?
(12/17追記: http://www.xxxxxxxx.com/w/でもアクセスできるように設定してみたが、結果は同じだった。 ドメインのドットの数云々は関係ないようだ。)
2005-12-18
■ [hiki] ログインできない件 その2
(その1はこちら)
「xrea hiki」でgoogle検索してみたら、ITSに既に登録されているのを発見。気づけよ俺!
が、ITSの方をよく読むと、0.8.4では何も設定しなくても動くはずのようだ。これはおかしい。
XREAのサポート掲示板をcookieで検索すると、こんな記事があった。
2002/06/22, 05:53 PM raccy 色々調べてみました。 どうやら、フォルダにアクセスの場合はクッキーが発行されないようです。 domainもpathも明示して、発行しようとしてもダメでした。 (以下略)
試しにhikiconf.rbの
@cgi_name = 'hiki.cgi'
を有効にしてみると……ログインできた!
■ [hiki] ログインできない件 その3
簡単なCGIを作って検証してみた。
#!/usr/bin/env ruby require 'cgi' print <<EOH Content-Type: text/html Set-Cookie: #{CGI::Cookie.new('name'=>'time', 'value'=>Time.now.to_s)} <html><body>#{CGI.escapeHTML CGI.new.inspect}</body></html> EOH
これをa.cgiとし、ディレクトリ/test/以下に置く。.htaccessに、DirectoryIndex a.cgiのように書いておく。
http://xxxxxx.com/test/a.cgi にアクセスした場合はちゃんとcookieが貰えるが、 http://xxxxxx.com/test/ だと貰えなかった。
まとめとしては、XREAにHiki(0.8.4)を置く場合は、hikiconf.rbで@cgi_name = 'hiki.cgi' の行を有効にしておく ということで。
未だ分からないのは、
- なぜw3mでオプション-dump_headを付けた場合だけcookieが貰えるのか
- そもそも、apacheでどんな設定をすればこんなことが起きるのか(^^;
という辺りか。
■ [hiki] ログインできない件 その4
「なぜw3mでオプション-dump_headを付けた場合だけcookieが貰えるのか」の答えがひらめいた。HEADリクエストだからだろう。
実際に、Net::HTTPを使ってHEAD、GET、POSTリクエストを試してみる。
yhara@cosmos:~ % ruby -rnet/http -e'Net::HTTP.start("xxxxxxx.com"){|http| http.head("/test/").each{|k,v| puts "#{k}: #{v}"}}' connection: close content-type: text/html date: Sun, 18 Dec 2005 06:48:04 GMT server: Apache set-cookie: time=Sun+Dec+18+15%3A48%3A04+JST+2005; path=/test/
yhara@cosmos:~ % ruby -rnet/http -e'Net::HTTP.start("xxxxxxx.com"){|http| http.get("/test/").each{|k,v| puts "#{k}: #{v}"}}' cache-control: no-cache connection: close content-type: text/html x-powered-by: ModLayout/3.2.1 date: Sun, 18 Dec 2005 06:48:13 GMT server: Apache transfer-encoding: chunked
yhara@cosmos:~ % ruby -rnet/http -e'Net::HTTP.start("xxxxxxx.com"){|http| http.post("/test/","").each{|k,v| puts "#{k}: #{v}"}}' cache-control: no-cache connection: close content-type: text/html x-powered-by: ModLayout/3.2.1 date: Sun, 18 Dec 2005 06:48:25 GMT server: Apache transfer-encoding: chunked
HEADのときはヘッダにset-cookieが含まれているが、GET、POSTではそれがない。
同時に、「apacheでどんな設定をすればこんなことが起きるのか」の方もヒントが得られた。 GET、POSTの場合だけmod-layoutが使用されるようだ。
XREAのサポート掲示板をmodlayoutで検索すると、こんな記事が見つかった。
2005/02/21, 02:28 PM webmaster 広告の自動挿入、ModLayout関連のでのエラーは既知の問題となっています。 特にヘッダーを操作、上書きする処理にエラーが発生します。クッキー、Location等で期待しないエラーが発生します。 このような場合は、手動で挿入してください。 残念ながら、現在のところ、ModLayout関連のエラーは修正予定はありません。 別の広告配信システムを1年以上前から用意していますが、変更いたしますと、ModLayout関連のコマンドが使えなくなるため、保留しています。
CGIのパス名を省略しなければうまく動くので、「ModLayoutとDirectoryIndexを同時に使用した際の問題」だと思うが、 これ以上の深追いは止めることにした。修正予定がないんじゃしょうがないしなぁ。
□ まゆ [ウコン効かなかった。]