新規作成 | 一覧 | RSS | FrontPage | 検索 | 更新履歴
[Calendar/When/Ruby/1.実行環境/3.when.rb] (前:2.irb|次:4.railsデモ) (English)

3.when.rb

<bin>ディレクトリのwhen.rbはMS-DOS版のコマンドとして動くwhen.exeに似た動作をするサンプル・スクリプトです。

単独動作モード

when.rb は設定ファイル when.rb.config を参照して動作しますが、 今回のリリースではwhen.rb.config を、

 --when.rb.config----
 #?:localhost:10001
 !:ja.Windows-31J
 G:Gregorian
 J:Julian
 W:_e:Japanese
 K:_e:Chinese
 E:ChineseLuniSolar?time_basis=+09&intercalary_span=3
 --------------------

のようにしています。

1行目は # でコメントアウト、2行目の ! が端末の言語と文字コードの指定、 3行目以降が出力に用いる暦法や暦年代の省略記号の指定です。 省略記号 D はユリウス通日に割り当てているので指定不要です。

Windows のコマンドプロンプトで下記のように関ヶ原の合戦当日を見てみます。

 $ ruby when.rb 慶長8.9.15 /DGJWK
 ["2306835", "1603-10-19", "1603-10-09", "慶長08(1603).09.15", "万暦31(1603).09.15"]

この例では、文字コードがWindows-31Jの端末から年号付きの暦日を指定し、 ユリウス通日(D)、グレゴリオ暦(G)、ユリウス暦(J)、日本暦日(W)、中国暦日(K)の日付を計算し、 結果を文字コードWindows-31Jで返しています。

慶長8.9.15の詳細情報を表示するには、下記のようにします。

 $ ruby when.rb 慶長8.9.15 /W :to_m17n
 {:frame=>"http://hosi.org/When/CalendarTypes/Japanese",
  :precision=>0,
  :trans=>{},
  :query=>{"area"=>"日本", "period"=>"江戸時代", "name"=>"後陽成", :validate=>:epoch},
 :sdn=>2306835,
 :calendar=>["http://hosi.org/When/TM/CalendarEra/Japanese::江戸時代::慶長", 1595],
 :notes=>
  [[{:note=>"干支", :value=>"癸卯(39)", :position=>"共通"}],
   [{:note=>"月名", :value=>"長月", :position=>"月建"}],
   [{:note=>"干支", :value=>"戊辰(4)", :position=>"共通"}]],
 :cal_date=>[8, "9", 15]}

クライアントサーバモード

前項のようにコマンドラインから毎回 when.rb を起動すると、 起動するたびに日本や中国の暦日情報をメモリにロードするため時間を消費してしまいます。 この時間を省略するため、when.rb はクライアントサーバモードを持っています。

when.rb.config の1行目の # を外して ? オプションを有効にするとクライアントサーバモードで動作します。

 --when.rb.config----
 ?:localhost:10001
 --when.rb.config----

この例では、localhost の10001番ポートを使用します。

サーバ

引数なしで when.rb を実行するとサーバとして動作します。

 $ ruby when.rb
 2013-05-30T11:46:09.849: Start

その後、クライアント側から次項のような操作をしたときのログは、下記のようになります。

 2013-05-30T11:47:54.192: Query - 慶長8.9.15 /DGJWK
 2013-05-30T11:47:56.774: Respond (   2582 ms)
 2013-05-30T11:48:00.990: Query - 慶長8.9.15 /DGJWK
 2013-05-30T11:48:01.004: Respond (     14 ms)
 2013-05-30T11:48:18.244: Query - 慶長8.9.15 /DGJWK
 2013-05-30T11:48:18.258: Respond (     14 ms)
 2013-05-30T11:49:54.149: Query - 慶長8.9.15 /W :to_m17n
 2013-05-30T11:49:54.301: Respond (    152 ms)
 2013-05-30T11:49:57.797: Query - 慶長8.9.15 /W :to_m17n
 2013-05-30T11:49:57.806: Respond (      9 ms)
 2013-05-30T11:50:15.720: Query - 慶長8.9.15 /W :to_m17n
 2013-05-30T11:50:15.732: Respond (     12 ms)

最初の「慶長8.9.15 /DGJWK」で日本暦日と中国暦日のメモリへのロード、 最初の「慶長8.9.15 /W :to_m17n」で日本暦注のメモリへのロードを行っています。 メモリにロードされた情報の参照にはあまり時間がかかりません。

クライアント

引数ありで when.rb を実行するとクライアントとして動作します。

別のコマンドプロンプトを立ち上げ、

 $ ruby when.rb 慶長8.9.15 /DGJWK
 ["2306835", "1603-10-19", "1603-10-09", "慶長08(1603).09.15", "万暦31(1603).09.15"]

を3回

 $ ruby when.rb 慶長8.9.15 /W :to_m17n
 {:frame=>"http://hosi.org/When/CalendarTypes/Japanese",
  :precision=>0,
  :trans=>{},
  :query=>{"area"=>"日本", "period"=>"江戸時代", "name"=>"後陽成", :validate=>:epoch},
 :sdn=>2306835,
 :calendar=>["http://hosi.org/When/TM/CalendarEra/Japanese::江戸時代::慶長", 1595],
 :notes=>
  [[{:note=>"干支", :value=>"癸卯(39)", :position=>"共通"}],
   [{:note=>"月名", :value=>"長月", :position=>"月建"}],
   [{:note=>"干支", :value=>"戊辰(4)", :position=>"共通"}]],
 :cal_date=>[8, "9", 15]}
を3回実行してみます。

それぞれ最初の1回だけ、少し時間がかかります。