[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[dennou-ruby:002307] GPhys 0.5.0 released
- To: dennou-ruby@xxxxxxxxxxx
- Subject: [dennou-ruby:002307] GPhys 0.5.0 released
- From: Takeshi Horinouchi <horinout@xxxxxxxxxxxxxxxxxx>
- Date: Mon, 06 Jun 2005 13:11:16 +0900
堀之内です.
多次元格子点データ取り扱いライブラリー GPhys をバージョンアップ
しました(ver 0.5.0):
http://ruby.gfd-dennou.org/products/gphys/
今回の主な改訂は以下のようになります:
(1) 遠隔データアクセスのための,gphys-remote
(http://ruby.gfd-dennou.org/products/gphys-remote/)
の取り込みと改良.(gphys-remote は今後は GPhys パッケージ
の一部としてメンテされます.)
(2) ファイル取り扱いの改善とデバグ.(Grib, GrADS, NetCDF全てに
関してです)
(3) 可視化ライブラリー GGraph の改良.
特に,(1) は,私としては目玉と思ってます.gphys-remote パッケー
ジには,ローカルなファイルシステム上の任意のディレクトリーを起点
とするディレクトリーツリーを扱うためのクラス GDir というのが入っ
ています.遠隔アクセスはこれを druby のフロントエンドにすること
で実現しているわけですが,GDir はローカルデータの扱いにも便利な
ので,現在私自身はローカルデータもリモートデータも共に GDir を使っ
て(従ってほとんどおんなじ具合いに)アクセスしています.特に irb
を使って対話的に処理する場合に便利です.
遠隔データの解析可視化は今のところ,シングルユーザー用になってま
す.ファイヤウォールを越えるためには ssh のポートフォーワーディ
ングを使います(-L オプションを使って ssh コネクションをはる).
こいつの使い方を示すため,チュートリアルをアップデートしようと思っ
てますが,基本的には下のような具合いになります(すみません,長い
です).
=GDirの利用1(ローカルデータアクセス)
==準備
irb 用スタートアップファイルを作ります(作らなくてもいいですが,
作った方が楽です).私は,普段の irb とは別にするため,
~/.irbrc_ggraph.rb
というファイルを用意し,下記のように alias してます.
alias irb_ggraph "irb -r $HOME/.irbrc_ggraph"
このため,下記のように起動します.
% irb_ggraph
=== ~/.irbrc_ggraph.rb の中身
私が使ってるのを下に示します.
その中で今の話に関係があるのを先に解説します.
GDir.top='/' # GDir用トップディレクトリーの設定.ここでは
# ファイルシステムのroot directoryにしてます.
# GDir.top='.' など,好きなように設定してください.
GDir.cd(Dir.pwd) # とりあえずカレントディレクトリーに cd しておきます.
# 上で GDir.top='.' とするなら要りません.
def pwd; GDir.pwd; end # 単に pwd と入れると,GDir の現在のディ
# レクトリーを表示します.
同様にして,ls, ls_l (==dir), cd, open (==data), open_all_data を
irb セッションのトップレベルで定義します.
では,全文です:
% cat .irbrc_ggraph.rb
print "Start interactive GGraph session\n"
require "numru/ggraph"
include NumRu
include GGraph
GDir.top='/'
GDir.cd(Dir.pwd)
def cwd; GDir.cwd; end
def pwd; GDir.pwd; end
def ls(path=nil); GDir.cwd.ls(path); end
def ls_l(path=nil); GDir.cwd.ls_l(path); end
alias dir ls_l
def cd(path); GDir.cd(path); end
def open_all_data; GDir.cwd.open_all_data; end # --> Hash of GPhys objs in cwd
def data(path); GDir.cwd.data(path); end # --> GPhys
alias open data
DCL.swpset('iwidth',700) # 適宜変える
DCL.swpset('iheight',700) # 適宜変える
#DCL.swpset('ldump',true)
DCL.swpset('lwait',false) # don't wait mouse click to show the next page
#DCL.swpset('lalt',true) # background plot
DCL.sgscmn(10) # set colomap (下記メモ参照)
DCL.gropn(1)
DCL.sgpset('lfprop',true) # to use the propotional font
DCL.sgpset('lcorner',false)
DCL.sgpset('isub', 96) # control character of subscription: '_' --> '`'
DCL.glpset('lmiss',true)
# メモ書き
# カラーマップ番号
# 01: dcl_original
# 02: black-orange-yellow-white
# 03: black-blue-cyan-white
# 04: blue-cyan-white-yellow-red
# 05: gray_scale
# 06: pastel_rainbow
# 07: black-rainbow-black
# 08: white_yellow_red
# 09: white_blue_black
# 10: short_green_original
# 11: black-rainbow-white
# 12: pink-rainbow-pink
==利用の実際
参考までに gphys の配布ディレクトリーで実行した場合です.
デモ用にプロンプトを変えるため,alias された irb_ggraph を使わず
直接呼びました.
% cd gphys-0.5.0
% irb -r $HOME/.irbrc_ggraph --simple-prompt
Start interactive GGraph session
*** MESSAGE (SWDOPN) *** GRPH1 : STARTED / IWS = 1.
>> ls
Directories:
'bin/'
'doc/'
'lib/'
'sample/'
'test/'
'testdata/'
Text files?:
'ChangeLog'
'README'
'TODO_ep_flux'
=> nil
>> ls_l
Directories:
512 Jun 06 12:03 bin/
1024 Jun 06 12:03 doc/
512 Jun 06 12:03 lib/
512 Jun 06 12:03 sample/
512 Jun 06 12:03 test/
512 Jun 06 12:03 testdata/
Text files?:
38396 Jun 06 12:00 ChangeLog
511 Jun 23 2003 README
117 Feb 16 15:55 TODO_ep_flux
=> nil
>> cd 'testdata/'
=> /am/murtmp/horinout/gphys-0.5.0/testdata/
>> ls
Directories:
'T.jan.ctl/' # NetCDF等のデータファイルが
'T.jan.grib/' # ディレクトリー扱いになることに注意
'T.jan.nc/'
'T.jan.packed.withmiss.nc/'
=> nil
>> cd 'T.jan.ctl/'
=> /am/murtmp/horinout/gphys-0.5.0/testdata/T.jan.ctl/
>> ls
Data:
'T'
=> nil
>> ls_l # ls_l は ls -l 相当.変数なら形などを表示
Data:
T [x=36,y=19,z=9,t=1] 'Temperature degC' (1)
=> nil
>> temp = open 'T'
=> <GPhys grid=<4D grid <axis pos=<'x' [36]>>
<axis pos=<'y' [19]>>
<axis pos=<'z' [9]>>
<axis pos=<'t' [1]>>>
data=<'T' [36, 19, 9, 1]>>
>> tone temp # これで図が表示される.
=> nil
>> cd '..'
=> nil
>> ls 'T.jan.nc/'
Data:
'lon'
'lat'
'level'
'T'
=> nil
>> temp2 = open 'T.jan.nc/T'
=> <GPhys grid=<3D grid <axis pos=<'lon' in '//am/murtmp/horinout/gphys-0.5.0/testdata/T.jan.nc' sfloat[36]>>
<axis pos=<'lat' in '//am/murtmp/horinout/gphys-0.5.0/testdata/T.jan.nc' sfloat[19]>>
<axis pos=<'level' in '//am/murtmp/horinout/gphys-0.5.0/testdata/T.jan.nc' sfloat[9]>>>
data=<'T' in '//am/murtmp/horinout/gphys-0.5.0/testdata/T.jan.nc' sfloat[36, 19, 9]>>
>> tone temp2 # これで上と同じ図が表示される.
=GDirの利用2(遠隔データアクセス)
今度は遠隔データアクセスです.そのためには,サーバーを立ち上げる
必要があります.必要なサーバー及びクライアントのコマンドは,
GPhys と共にインストールされます.
==サーバー立ち上げ
今度は先ほどのディレクトリーをトップディレクトリーとしてサーバー
を立ち上げてみます:
kterm その1
% cd gphys-0.5.0
% gdir_server . -a all
# -a all は任意のホストからのアクセス受け付け(ちょっと危険).
# デフォルトはローカルのみ.他にも port 番号などを指定できる.
URI: druby://horihost0:39708
[return] to exit
# サーバーURL(今回はdruby://horihost0:39708)を表示して待つ.
# ポート番号を指定しなかった場合は,適当な空きポートを使う.
# 今回は 39708 になった.
kterm その2(マシンは同じでも違っても良い)
% gdir_client
** A GPhys service client. To conetct, type in server's URI(return)
(format: druby://host:port). Type in help to see usage.
URI>> druby://horihost0:39708
# ここに上の URI を入力
すると以下のメッセージが出て,セッション開始:
***************************************************************
* WELCOME!
*
* You logged in druby://horihost0:39708
* with /usr/local/lib/ruby/site_ruby/1.8/numru/gdir_connect_ftp-like.rb:
* an irb-based ftp-like client of a gphys service (such as gdir_server.rb).
*
* This client is to be started as
*
* % irb --noinspect -r "numru/gphys_connect_ftp-like"
*
* if you are running on a interactive ruby shell such as irb,
* quit and start again like this.
***************************************************************
Type in
help
for available methods
以下,ローカルの場合と(ほぼ)同じようにすすめる.
irb(main):001:0> ls_l
Directories:
512 Jun 06 12:03 bin/
1024 Jun 06 12:03 doc/
512 Jun 06 12:03 lib/
512 Jun 06 12:03 sample/
512 Jun 06 12:03 test/
512 Jun 06 12:03 testdata/
Text files?:
38396 Jun 06 12:00 ChangeLog
511 Jun 23 2003 README
117 Feb 16 15:55 TODO_ep_flux
=> nil
# サーバー側のディレクトリーが表示されていることに注意
irb(main):002:0> cd 'testdata'
/testdata/
=> nil
irb(main):003:0> ls_l
Directories:
423 Sep 16 2003 T.jan.ctl/
13167 Mar 10 13:03 T.jan.grib/
26664 Aug 28 2003 T.jan.nc/
13716 Mar 10 10:38 T.jan.packed.withmiss.nc/
=> nil
irb(main):004:0> cd 'T.jan.nc'
/testdata/T.jan.nc/
=> nil
irb(main):005:0> ls_l
Data:
lon [lon=36] 'Longitude' (degrees_east)
lat [lat=19] 'Latitude' (degrees_north)
level [level=9] 'Level' (millibar)
T [lon=36,lat=19,level=9] 'Temperature' (degC)
=> nil
irb(main):006:0> start_dcl
# DCLは陽に開始する(ここが唯一の違い)
# start_dcl の中身は,上の irb_ggraph における DCL の設定
# と似たような感じになってます.これを使わず DCL.gropn し
# て構いません.
*** MESSAGE (SWDOPN) *** GRPH1 : STARTED / IWS = 1.
=> nil
irb(main):007:0> temp = open 'T'
=> #<DRb::DRbObject:0x40899fb4 @uri="druby://horihost0:39708", @ref=541953932>
#^^^ 遠隔オブジェクトなので,こんな風に表示される.
irb(main):008:0> tone temp # これで図が表示される.めでたしめでたし.
=> nil