レスポンスヘッダを取得する

いろいろあってレスポンスヘッダの最終更新日を取得して編集しようと思った。



<input type="button" value="GetHeader" onclick="getHeader()">
<div id="out_div">
</div>

取得できたヘッダ

Date: Sun, 12 Mar 2006 15:19:52 GMT
Server: Apache/2.0.53
Last-Modified: Sat, 11 Mar 2006 10:09:18 GMT
ETag: "afc012-c19-4d718f80"
Accept-Ranges: bytes
Content-Length: 3097
Keep-Alive: timeout=15, max=1500
Connection: Keep-Alive
Content-Type: text/html

yahooにアクセスしてみると

Date: Sun, 12 Mar 2006 15:26:27 GMT
P3P: policyref="http://privacy.yahoo.co.jp/w3c/p3p.xml", 
CP="CAO DSP COR CUR ADM DEV TAI PSA PSD IVAi IVDi CONi 
TELo OTPi OUR DELi SAMi OTRi UNRi PUBi IND PHY ONL UNI 
PUR FIN COM NAV INT DEM CNT STA POL HEA PRE GOV"
Expires: -1
Pragma: no-cache
Cache-Control: no-cache
Connection: close
Content-Type: text/html;charset=euc-jp

Last-Modifiedが常に付いてくるわけでも無さそう。
日付フォーマットも必ず同じって訳では無いだろうし。


現実的じゃないなぁ。

指定の回数繰り返す

times を使用すると、指定回数分処理を繰り返す事ができる。

breakを使うと途中で抜けられる。

no = nil

3.times {|i|
  no = i
  if i == 1
    break;	
  end
  puts "in times => " + i.to_s
}

puts no

- 処理結果 -
in times => 0
1

nextを使うと次の処理に移る。

no = nil

3.times {|i|
  no = i
  if i == 1
    next;	
  end
  puts "in times => " + i.to_s
}

puts no

- 処理結果 -
in times => 0
in times => 2
2

ファイルのロック

ファイルに排他をかけるには

File.flock

を使用する。

File::LOCK_EX

  • 排他ロック。同時にはただひとつのプロセスだけがロックを保持できます。
file = File.open("lock.txt" , "r")
p file.flock(File::LOCK_EX)

puts "unlock ?"
STDIN.gets()

p file.flock(File::LOCK_UN)

上記ロジックを別々のプロセスで実行すると
後からロックしようとしたプロセスは、ロックが解除されるまで待たされる。

File::LOCK_EX|File::LOCK_NB

  • ノンブロックモード。
file = File.open("lock.txt" , "r")
p file.flock(File::LOCK_EX|FILE::LOCK_NB)

puts "unlock ?"
STDIN.gets()

p file.flock(File::LOCK_UN)

上記ロジックを別々のプロセスで実行すると
後からロックしようとしたプロセスは、
ロックに失敗するとflockでfalseが返ってくる。



排他待ち(File::LOCK_EX)にさせるべきなのか、
排他待ちせず(File::LOCK_Ex|File::LOCK_NB)に
一定期間スレッドをスリープさせて何回かリトライさせるべきなのか。


後者の方が安全だろうなぁ。

追記

ロックをかけても、File.closeで閉じると排他も解除される。
それでもFile.flock(File::LOCK_UN)を行うと例外が発生する。

file_lock_a.rb:12:in `flock': closed stream (IOError)
        from file_lock_a.rb:12

Hikiのプラグインを作ってみた

こんなの


無料スペースのレンタルができたので公開してみます。
http://www3.pf-x.net/~spider-man/


外部ファイルにデータを保存していますが
排他処理を組み込んでいないので編集時にデータがおかしくなる可能性があります。
おかしくなったら手動で直します。(笑)
ファイルを排他して編集ってのをしたことがないので
いろいろ試してから組み込もうと思っています。
そもそも、Hikiでページじゃなくて外部ファイルに保存するってのは反則なのかな。

ToDo

  • Closedは通常表示しない。
  • 実績値(予定に対する結果の終了日)を入力できるようにする。
  • 予定日不明のデータを扱う。
  • Active情報と、非Activeな情報をそれぞれで表示する。(またはscriptで絞れる様にする)
  • ファイル排他