ネ ッ トワー クを利用 した
NMR予
約管理 システ ム
榊原
正明・太田
裕市
物質工学科
An NMR Resewation Management System using an htemet Network
Masaaki SAKAKIBARA and Yuichi OTA
Department ofMaterins Science,Faculty ofEngineeringTotto U verdtt TOttO ,680-8552 Japan E―mtt [email protected]五
‐
u.acjpAbstratt Toimprovehemmgmentof3JMRre驚Ⅳ五わ閤,areservatlollmanagment systmwas des頓 翻 uslnghe m輸 旺t=witthis,he re―atioll simtion crould h easily即脚 using a timetable lhe desigrtl concat tt hiS事血 偽eOlained including nge ofhe螂 魏 and
contents ofdle progrm.
KeJwordd Timetable,NML Rettah叫 CGLNeWork
1.は
じめにわれわれは
,い
ままで にネ ッ ト上 でのさまざま な プ ロ グ ラ ム 開発 を行 って きた [1],[2],[3]ぅ[4],[5]ぅ [6].
この うち天然水の採水予約のプログラムについ ては,当 初は Visual Basicで 作成 しLANを 利用 し て行 った
[4][5].し
か し,CGIを
用いれば,ネ
ッ ト上でのプログラムの作成 や,修
正が容易 にで き ることがわか った[6]. 鳥取大学 には,従来2 7 0MHzの核磁 気共鳴(N
MR)装
置が設置 されてい るが,学
会 前,卒
論, 修論の締 め切 り前には利用者数が増大 し,利
用 の 予約 を とることは容易ではなか った。この度新 た に5 0 0MHzの
装置が導入 され,利
用者 の分散 に よ り,若
子の混雑解消が期待 され るが,利
用の予 約 についてはい っそ うの混雑が予想 されている。 従来 ぅ2 7 0MHzの
予約 は ぅ備 え付 けの予約用 紙 に書 き込 むや り方で行 われてお り,5 0 0MHz
の予約は管理者へのメールで行われていた。 しか しどち らも予約状況が把握 しに くく,ネ
ッ ト上で の予約 シス>ム
の構築 が期待 され る状況であつた。 そ こで本研究室では,鳥
取大学工学部NMR運
営 委員会 か らの依頼 にも とづいて,ネ
ッ ト上での予 約 システムの展 開 として,予
約管理 システムの作 成 を行 つた 。 ただ し他 のプログラムに影響されないように, 研究室 に新 た に,予
約管理専用 のサーバ を立ち上 げた。サーバ の OSは Red Hat Linux 6.0で,web
のサーバ プログラムには Apacheを 使用 した。CG
Iプ
ログラムには Perl言 語を使用 した[7]ぅ [8], [9]. システムの基本的な部分が出来上が り,実
用化 のめ どがついたので,5 0 0MHzは
8月 のは じめ か ら,2 7 0MHzは
9月 16日 か ら web上 での予約 を開始 した。そ こで,こ
のシステムの使用法 と概 略について報告 す る。2
予約管理 システ ムの概要この シ ス テ ム を利 用 す る た め に はパ ス ワー ド が必要 で あ る 。パ ス ワー ドを入 力 す る と
,最
初 の ペ ー ジで メニ ュー が表 示 され る。利用 したいもの を5 0 0MHz,2 7 0MHz,蛋
白質構 造解 析 支援 シ ステ ム (Octane) Insight II予約 管 理 システ ム MacroModel予約管 理 システ ム 予約管理 のお しらせ,掲
示板 か ら選択 す る。NMR,Octaneを
選 ぶ と,それ ぞれ の連絡 事項 と予約状 況 の画 面 にな る 。画 面 の上 部 に連絡事項 が表 示 され,そ
の下 に現在 の予約状 況がタイムテ ー ブル で表 示 され る.図
1にタ イ ムテー ブル の画 面 を示 す 。 タイム>―
ブル には,縦
方 向に は 日付,横
方 向 には時刻 が表 示 されて い る 。 日付 は 当 日か ら2週
間先 まで表 示 され て い る。時刻 は午前9時か ら午 後 8時までが 30分間隔,午後8時
か ら翌朝 までが 一括表示 とな る。 この画 面構成 はNMR,Octane
華義筆難
│::::::::::1鴎
攘
潔
‖
螂
Ⅷ
期 聴 滞
抑
肇響警箸黎箸響黎黎響肇響響繁肇≡
≡
4:=募
=
黒∽ 騨垂
垂
妻
争
≧
│:郭
華
に共 通 で あ る 。すで に予約 され て い る時 間帯 には, そ の対 応 す る場 所 に研 究 室 に対応 した背景色 と, 学 生,院
生,教
職 員 に対応 した文 字 色 で名 前 が表 示 され て い る 。 「 予約 」 を選択 すれ ば,予
約 画 面 に移 る。研 究 室 名 と 日時 はセ レク トで選択 し,身
分 は ラ ジオ ボ タ ンで選択 し,使
用者名 を入 力 す る 。次 に取 り消 し用 のパ ス ワー ドを入 力 す る。送信 ボ タ ンを押 せ ば,予
約 が完 了 す る 。 当 日よ り2週
間先 と,す
で に予約 されて い る時 間帯 には 予約 は で きな い よ うにな って い る。27
0 MHzの場合,1回
は2時間以 内で あ り)1人
つ き 2回まで しか 予約 で きな い 。後 者 の制 限 につ いて は,今
後 対応 す る予定 で あ る 。 「 予 約解 除 」 を選択 すれ ば)予
約解 除 の画 面 に な り,研
究室 と身分 と名 前 を入 力 して送 信 す る。 す で に複 数 の予約 が され て い る場 合 は画 面 に予約 され て い る 日時 が表示 され るので,そ
の 中か ら選 │を■工甚:=:二:■=幕
ユ荘 粋第 秘 耳:堪理 ル 堪=::,:=妥 与│ャ =ィ纂喜:二,11ユ鞘 努,'孝孝ηを,:,:,│ここ,:==茅を,,工=エエア,孝を ===:=を :'■ 図1
タイムテ ー ブル の画 面鳥 取 大 学 工 学 部 研 究 報 告 第 30巻 択 して
,パ
ス ヮー ドを送信 すれ ば削除で きる。 し か し当 日の削除 はで きない よ うに して い る。 「 利 用規定 」 を選択 すれ ば,利
用規定 を読 む こ とがで きる。なお Octaneの利 用規 定 は,まだ準 備 されて いない 。3.フ
ァイル の説 明 フ アイル構成 は,プ
ログラ ム本体「 index.cgi」 とデ ー タ格納 デ ィ レク トリ「data」 か らな る 。 dataディ レク トリ中に以 下 の フ ァイル が あ る。Alletxt
全 体 のお知 らせbbs.txt
掲 示板 デ ー タ###.dat
予約 デ ー タ ###。sort
予 約 デ ー タ を ソー トした フ ァイル###.log
予約 デ ー タの ログ ###.txt お矢日らせ ###.kitei利用 規 定 ※上記5つの フ アイル の"###″の部分 には,管理 す る機 器 固有 の名 前(500,270,Ins,Mac)が
変 数$mllrから入 る 。4.プ
ログラム の説 明 最初 は,メ ニ ュー画 面が表 示 され る. 処理 項 目には「 全体 のお知 らせ の表 示」,「
掲 示板 」お よび機 器 ご との「 お知 らせ」 と「 予約状 況」,「
予約 」,「
予 約 の解 除」 ぅ「 利 用規 定 の 表示 」 とが あ る. 「 お知 らせ 」 と「利 用規 定 」 は,お
知 らせ や規 定 の 書 か れ た テ キ ス ト フ ァ イ ル (###.txtぅ ###.kitei)を読 み こん で表 示 して い る. 「利 用規定 」 はサ ブル ー チ ンkitei
で,全
体 のお知 らせ はサ ブル ー チ ン siraseで行 つてい る 。 「 予約 状況 」 は,ソ
ー トされ た予約デー タ フ ァ イル (###.sort)を 読 み こみ,タ
イムテ ー ブル上 に順 番 に配 置 して表 示 して い る 。 「 予約 」で は,送
信 され た予約 デ ー タ につ いて 以 下 の項 目をチ ェ ック して い る. ① 既 に予約 され ている時間 と重 な っていないか 。 ② 無効 な 日付 ・時刻ではないか 。 (予約 日が過去 の 日でないか,開始 時刻>終
了時刻, 2 7 0MHzで予約時間が 2時 間を越 えていないか,2月
30日,2月
31日,4,6,9, 11月
の31 日はないか 。) ③ 利用者名 ぅパ スワー ドが入力されているか。 以上 のチ ェ ック した後,予
約データはデータフ アイル (###.dat)に 書 きこまれ る。 書 き込 まれ る内容 は以下の とお りで あ る. 予約 日付,開
始時刻,終
了時刻,研
究室,身
分 (学生)院
生,教
職員),使
用者,取
り消 し用 の パ ス ワー ド 作 成 され たデ ー タ ファイル (###.dat)の データ を 日付 で ソー トして ソー トフ ァイル(###。sort) に書 き出す。 「 予約 の解 除」では,研
究室名 と身分 と使用者 名 を入力 して送信 すると,送信 したデー タ(研究室 名 と身分 と使用者名)と一致する予約データを,ソ ー トフアイル (###.sort)か ら読 み出 し)画
面に表 示 す る。解除 したい予約 をチェ ック して,そ
の予 約 に対応 したパ ス ワー ドを送信 する. 送 信 さ れ た パ ス ワ ー ドとデ ー タ フ ァ イ ル (###.dat)に 記録 されて い るパ ス ワー ドが 一致す れば,データファイル(###.dat)か ら予約データを 削除 し,再
び ソー トファイル(###.sort)を 作成 す る。 デ ー タ フ アイル (###.dat)か らの予約データの 削除 を具体 的に説 明する と以下 の ようにな る. 予約デー タの うち削除するデータ以外 は>ン
ポ ラ リファイル に書 き込み,そ
のテ ンポ ラ リファイ ル の フアイル名 を###.datに書 き換 えてい る。 ログフアイル は,管
理者が必要 に応 じて作成できるようにす る予定であ る。 「 掲 示 板 」 で は 掲 示 板 の デ ー タ フ ア イ ル (bbs.txt)の 内容 を表示 させてい る.発言 フォーム か ら書 きこみが行 なわれ た場合
,送
信 されたデー タを整形 ぅ漢字 コー ドを″EUCカコー ドに変換 してデ ータフアイル(bbs.txt)に 書 きこんだ後,画面に表 示 してい る。 “2月 29日"の
入力 に対 しては,う るう年の判 定 も行 ってい る(リ ス ト1)。 なお、$err4=0は
「 うるう年」であることを示 してい る. 本 システムでは,学
外か らのア クセス制限 を設 けると同時に,学
内での利用者 も制 限で きるよう に認証(パス ワー ド)の設定 も行 つて い る.5.タ
イムテー プル の説明 タイムテー ブル には,2週
間先 まで の予約状況 が 日付,曜 日 と ともに表 示 され る(サブル ー チ ン listと col_set)。 この表示の仕 方を説明する.5.1
タイムテー ブル の表示 localtime関数 を用 いて,当
日の 日付 を求めて い る (リ ス ト2)。 年は西暦■900と
して得 られ るが,+1900と
す るので,2000年
以 降 も問題 は生 じない 。 同様 な操作 を行 い,表 示する最終 日(当 日か ら2 週 間後)の 日付 を求め,$last_calに 代入 している (リ ス ト3).
ソー トフアイルか ら予約データを1行ずつ読み こんで,","で
区切 つて各変数 に代入 しぅ日付 は $xdayに代入 され る (リ ス ト4)。 予約 日が,当
日($today)≦ 予約 日($xday)≦2週
週間先 ($last_cal)の 場合 に以下 の操作 Pを 行 う。 P:ソー トファイルか ら読み出された予約データの 日付 ($xday)が1つ
前 に読 み出された予約デー 夕の 日付($yday)と 異な る場合 は操作Ql,Q2,R
を実行 し,等しい場合 は操作 Q3,Rを 実行する。 図2
操作 Pから Rま での フローチ ヤー ト 最初 の読 み 出 しで は ぅ$ydayに は値 がないので $yday=$today-1よ り求めている. Ql:10Caltime関 数 を用いて次の 日を求めて, 日付,曜日のみの行 を追加 する。これ を($xday 〉=$yday)に
な る まで繰 り返す 。 Q2:予約 開始時刻 ($starttime)が 9時でなけれ ば)9時
か ら予約開始時刻 まで空 白で埋める。 Q3:前の予約データの終 了時刻($yesend)と 間が あ る場合 ($starttime≠ $yesend),そ の間を空 白で埋 め る. R:予約 の表示 と して ぅ予約時間に対応 したセル と 使用者名 ($username)を 表示す る。 ソー トフアイル の 1回 の読み込みは操作 Rま で 関連 している。操作Pか
ら Rま でのフローチ ヤー トを図2に
示す 。鳥 取 大 学 工 学 部 研 究 報 告 第 30巻
ソー トフアイルのすべての予約データを読 み出 し、 フアイル をクローズ した後で以下の操作 Sを 行 う。
S:予約デ ー タの最後 の予約 日($yday)と 表示最終
日($last_cal)に ついて,($last_cal〉 $yday) で あれば localtime関数 を用 いて次 の 日を求 めて
,日
付,曜
日のみの行 を最終 日まで追加 す る。5.2
セルの横幅の計算 タイム>―
ブルでのセル の横 幅は,サ
ブルーチ ンcol_setで求めてい る。予約時間は30分間単 位 で行 われるので,30分
間に対応 す るセル の横 幅 ($colspan)を ととした。そのために以下に示すよ う│こ 30分を 50と 変換 した。例 えば,9時
30分は 950ぅ 16 Httは 1600と なる(リ ス ト5). 計算式 ($colspan=($yend― $ystart)/50)に $yendと $ystartの 値 を代入 して ぅ予約時間 と空 白 に対するセルの横幅($colspan)を 求めている。 予約時間に対す る横幅の計算 $ystart g $starttimei $yend = $endtimei空白に対する横幅の計算
(①,② の場合
)①異なる日付でかつ開始時刻≠
9時の場合
$ystart = 9oO; $yend = $starttime; ②同じ日付で,か
つ前の予約 と時間が空いている 場合(右辺の$yendは 前の予約データの終了時刻) $ystart i syendi Syend = $starttimei 各変数$starttime,Sendtime はそれぞれ予約 開始時刻,予
約終 了時刻 を示 してい る。6.今
後 の予定 認証 又 は制 限 を設 けて い る予約 用 のCGIとは別 に,認
証 無 しの 閲 覧用 のCGIを作 成 して,こ
の シ ステ ム (予約 状 況 な ど)を
公 開 す る予定 であ る. 以下 の操作 を コマ ン ドで行 え る よ うにす る。 管理 システ ム全体 につ い て 「 お知 らせ」 の変更,掲
示板 で の発 言 の削除, 研 究 室 の削除・ 追加,装
置 の削 除・ 追加,背
景 色 と文 字色 名 どの変更. 各装 置 につ いて 「 お知 らせ 」 の変 更,予
約 の修 正,利
用状 況 の 表 示 (使用 時 間 の表 示・ 集 計).
7.終
わ りにWeb上
のタ イ ム>―
ブル を用 い た予約管理 シス テ ムは ぅ学 内の どこか らで も予約 状況 の把 握 を容 易 に行 う こ とで きっ非 常 に実用性 の高 い もので あ る。今後,学
内 にお け る他 の共 同利 用機 器 の予約 システ ム と して も利 用 す る こ とが考 え られ る.FT―
NMR管
理 者 で あ る浅原 雅 浩氏 には,今
回作 成 したシス テ ム につ いて多数 の助 言 をいた だ きま した 。 こ こに明記 して謝 意 を表 します 。8.参
考 (プ ログ ラム リス トの抜粋) リス ト1 if(Syears%400==0)( $err4 = 0; }elsif ($years%100 == 0)( $err4 = 1, }elsif ($years%4 == 0){ $err4 = 0, }else{ Serr4 = 1; } }リス ト
2
第2巻
,第
2号 ,1998年
, $sec_day=60*60*24;#1日の秒数; [3]榊原 正 明,太田裕 市 :鳥 取 大 学 実 験 系 廃 液 の分 $sec_x=$sec_day*14,#2週間分の秒数; 留 ・ 貯 留 の フ ロ ー シ ー ト,未
発 表. $tine=tine;#1970年 1月 1日からの秒数を返す。($secl,$ninl,$hourl,$dayl,$■o■
1,$yearl,swdayl) = [4]榊
原 正 明,立
花 良 ―,高
見 和 邦,松
本 法 子,堀localtine(Stine),
内敏 史
:LANを
用 い て の採 水 場 所 予 約 プ ロ グSyearl+=1900;
ラ ム
,鳥
取 大 学 工 学 部 研 究 報 告,28巻
,第
1$■ o■1+十;
$■onl = sprintf("%。 2dD,$monl), Iブ, 1997, pp.119-124.
$dayl=sprintf('%.2d',$dayl); [5]榊原 正 明
,立
花 良 ―,松
本 法 子:採水 場 所 決 定 の た め の プ ロ グ ラ ム の作 成 ―身 近 な 自然 環 境 のリス ト
3
探 索 を兼 ね て 一っ コ ン ピ ュー タ&エ
デ ュケ ー シ($sec2,$nin2,$hour2,$day2,$■o■2,$year2,$wday2) =
ョ ン
,Vol.4,1998,pp.75-81.
localtiIIle($tine + $seC_x); $last_cal=$year2.$■on2.Sday2; [6]榊
原 正 明,坂
本 光 歩,南
和 明,熊
倉 純 史 :ネ ッ ト上 の採 水 予 約 シ ス カ ム ,未 発 表. リス ト4 [7]秋
本 祥 ―,古川 剛:CGIプログ ラ ミン グ入 門, $data = "./data/$nlllr.sort"; 翔 泳 社. open(DATA,'$data");flock(DATA,2); [8]伊
藤 和 人 :入門Perl,秀
和 シ ス テ ム.while($line=く
DATA>){ [9]中
島 靖 :Per15リ フ ァ レ ンス ブ ック,情
報 管($xday,Sstarttine,$endtine,$syozOku,Stype,$usernane,Sp 二 里 . asswd) 三split(/,/,$line), リス ト5 if ($ystart%50 1= 0){; $ystart += 20; }; if ($yend%50 1= 0){; $yend += 20; }; 参 考文 献 [1]榊原 正 明