電子計測
2002.5.20
最初の説明が終わったら出席確認です.パソコンの時計が合っているかを確認したら出席のメールを出してください.今 回の件名は
inst 5-20 attend s0040**
です.それ以外は前回と同じです.
なお,入力ミスがあると出席として認 められないことになりますので,慎重に行ってください.文 字はすべて1バイト文字 (半角英数字) です.途中に入るスペースは一度に一個だけと してください.スペースは全部で3個です.また,**の部分は自分の学生番号の下二桁 です.他学科の人はそれなりに修正して下さい.
教科書 p.19-90
今回はスクリプト言語のRubyを使用します.そのため,ターミナルでスクリプト を実行する手順を復習します.まず,Rubyのスクリプトを実行するためのコマン ドは
$ ruby
です.しかし,引数としてスクリプトのファイル名をつけないとターミナルは入 力を待ち続けている状態になってしまいますので,注意してください.この場合 は,Ctrl + C のキー操作でプロセスを強制的に中止してコマンドプロ ンプトを表示させてください.
Rubyのスクリプトをエディタで作成しますが,ホームディレクトリで作業をすると, たくさんのファイルがありごちゃごちゃしてくるので,あらかじめディレクトリ を作っておきましょう.まだの人は,
$ mkdir ~/script
のようにして作業用のディレクトリを作成し,
$ cd ~/script
で,ディレクトリを移動します.
教科書 p.91-114
XEmacsでRubyのスクリプトを作成する際に,Rubyのための専用モードを使用でき るようにしておくと便利です.カッコの整合性やループの処理の範囲,定数の色 分けなど視覚的にずいぶんと見やすくなります.まずは,その準備をしてみましょ う.手順は,次のようになります.
まずはじめに行うのはruby-mode.elという設定ファイルの準備です.これは,
/usr/doc/ruby-1.6.2/misc/
ディレクトリにあるので,これを自分のホームディレクトリに用意した専用のディ レクトリにコピーします.方法は,まず,ディレクトリを作成し,コピーと言う 順番です..以下の作業を行います.
$ mkdir -p ~/lib/emacs
$ cp /usr/doc/ruby-1.6.2/misc/ruby-mode.el ~/lib/emacs
これによりファイルが新たに作成した lib ディレクトリの中の emacs ディレクトリにコピーされます.次に,設定ファイルの編集です. エディタでホームディレクトリにある .xemacs.el を編集します.ま ず,以下の記述をファイルの最後の方の ;;; が2行にわたって並んで いる部分の上に加えます.
(setq load-path (append '("~/lib/emacs") load-path)) (require 'font-lock) (autoload 'ruby-mode "ruby-mode") (setq auto-mode-alist (append (list (cons "\\.rb$" 'ruby-mode)) auto-mode-alist)) (setq interpreter-mode-alist (append '(("ruby" . ruby-mode)) interpreter-mode-alist)) |
この後,Xemacsを起動して拡張子が .rbのファイルを読み込むとモー ドラインにRubyという表示が出て,Rubyの編集モードとなります.うまくいかな かった場合には記述のどこかが間違っているので,よく調べてください.
今日の「インターネット」の普及はWWWによるところが大きいでしょう.それま で、電子メールやFTP,また,Gopherなどが使用されていましたが、テキストに 埋め込まれた「ハイパーリンク」の機能により参照先に自由に移動でき、画像も 扱うことができる機能により,WWWは多くの人の注目を集め、またたくまにネッ ト利用の中心を担うようになってきました.今では、音声や動画像も扱うことが でき、CGIによりインタラクティブな利用法も可能です.現在も,次々と新しい 技術が開発されており、今後も発展を続けていくことでしょう.
ここでは,その基本的な仕組みに限定し、WWWにおいて,サーバとクライアント がどのような仕事をしているのか、自分で実際にネットワークプロトコルを試し てみて,実感することとします.そのための最初の操作は、HTTP (Hyper Text Transfer Protocol) によるサーバとの通信です.
教室のパソコンでWWWにアクセスする際にはNetscape Navigatorを使用すること が最も多いと思われます.それ以外にも方法はありますが、画像表示や表の再現 などを考えると、他の選択肢は機能が少し貧弱です.このようなNavigatorのよ うなアプリケーションをクライアント(顧客)といい,ページのデータを提供する アプリケーションをHTTPサーバと言います.(サーバとは「仕える者」の意味です から、現実世界ではクライアントの方が「偉い」のですが,ネットワークのクラ イアント/サーバシステムではサーバの方が威張っています.)
また,上記のようなサーバプログラムは表だって動く必要はなく,目につかない ところでひっそりと接続を待ち受けて処理を行います.そのような処理を「バッ クグラウンド処理」と言いますが、サーバプログラムについては、特に、「デー モン」という言葉が用いられます.デーモンとはdaemonのことで,ギリシャ神話 にある神々と人間の間に介在する二次的な神のことです.demonと語源は同じで すが,意味が少し変ってきますので,綴りには注意してください.
一方、クライアントプログラムの作業はサーバからダウンロードしたページデータを解 釈して,画面上に整形して表示すること、リンクとして埋め込まれているURLを クリックするとそのページにアクセスすることが主な仕事です.その際にクライ アント側がサーバに対して要求している項目は種々ありますが、実際に使用され ているものはわずかです.以下に代表的な例を示します.
GET | 情報を得る |
HEAD | ヘッダのみ得る |
POST | データを送る |
PUT | データを格納するように要求する |
クライアントが送信するのは、これらのメソッドとHTTPのバージョンです.また, 要求などの命令の区切りは「改行」になりますが,HTTPではDOSのような \r\n が使われます.要求の終了は,改行のみの行により行います.
サーバ側はクライアントに対して返答しますが、その際のメッセージのコード番 号が重要な意味を持っています.以下に代表的な応答コードの意味を示します.
200番台 | 成功 |
400番台 | クライアントのエラー |
500番台 | サーバのエラー |
たとえば、このページの最後の方には宿題ページへのリンクが用意されています が、実際にアナウンスの時間になるまでページ自体は用意されません.そうする と、リンクをクリックしたときにはエラーが表示されます.LinuxのNetscapeで はページに大きく「Not Found」と表示されますが、ウィンドウの枠にあるタイ トルには「404 Not Found」と表示されています.上の400番台のエラーはそのよ うなときに登場します.ちなみに、WindowsのInternet Explorerでは図1のよう なページが表示され、エラー番号も良く見ると記述されています.
図1 404エラーの画面
さらにサーバ側からページのデータとして返してくるデータ本体のサイズも伝え られます.それは,
Content-Length:
のような行で表示されます.クライアントが読み込むべきページのデータ量にな るものです.これらの情報が含まれる部分を「ヘッダ」と呼び、空行 (改行だけ の行) の後で、サーバは本体を送信します.
上記の流れを試すために、以下のスクリプトを作成して実行してみましょう.こ のスクリプトは1年生の時の「情報科学概論」で使用した教科書である,まつも とゆきひろ/石塚圭樹著,「オブジェクト指向スクリプト言語Ruby」のp.89にあ るものの誤植を訂正したものです.
require 'socket' host = "localhost" port = 80 path = "/" if %r!http://(.*?)(?::(\d+))?(/.*)! =~ ARGV[0] host = $1 port = Integer($2) if $2 path = $3 end s = TCPsocket::open(host, port) s.print "GET #{path} HTTP/ 1.0\r\n\r\n" print s.read |
使用しているのはGETメソッドだけです.これをたとえば、client.rb という名前で保存したとすると、
$ ruby client.rb http://www.ecs.shimane-u.ac.jp/
や,もっと手近なサーバであれば、
$ ruby client.rb http://172.16.1.3/
のようにして使用します.自分の好きなページのデータを表示させてみてくださ い.
上のスクリプトは単純にデータを取得するだけですので、画面にはヘッダとHTML データがそのまま出てきます.ヘッダ部分を見ると上で説明した内容が記述され ているのが分かると思いますが、ページのデータが多い場合には画面がスクロー ルアウトして見えないかも知れません.パイプライン処理により結果を less などのページャに流すと見やすくなります.
このようなページデータを受け取ったあと、見やすい形に整形する機能が通常の クライアントに備わっていますが、そこではHTML言語で記述された内容を解釈し ているだけです.とりあえず,上記のままではページ内容を見にくいので,スク リプトを少しだけ改良して,ブラウザみたいな仕事をさせてみます.最後の 行を次のような2行に変更してみましょう.
data = s.read print data.gsub(/<.*>/,' ') |
先ほどと同じようにパイプライン処理で less を通して見てください. 少しはWWWクライアントらしくなったでしょうか.
次に、HTML言語について見てみましょう.これまで,HTMLについては簡単には説明してきました.たとえば、1年生の時の エレクトロニクスセミナーAでコース別でしたが紹介しています.ここでは,少 し古いページですが、昨年市民講座として開設した「Linux体験講座」の内容で 進めてみましょう.
http://www.ecs.shimane-u.ac.jp/~nawate/linux/HTML.html
を見てください.表の記述法については、昨年度のコンピュータセミナーのペー ジに少し詳しく書いてありますので、そちらのページも参照してください.
また,皆さんが実際にネットワーク越しに自分で作成したWWW ページを閲覧する模擬実験を行うためには、以下の手順が必要になります.
$ mkdir public_html $ chmod 755 public_html |
上記のように public_html ディレクトリを作成し、そこにHTMLで記述したページを index.html という名前で保存します.そうすると,Netscapeの場所入力欄 に、
172.16.1.3/~b00**/
と入力してアクセスできます.試しに次のようなページをXEmacsで作成し、表示させてみ てください.その際に、あらかじめファイル名を指定して次のように起動すると,
$ xemacs index.html &
XEmacsの YaHtml モードが自動的に読み込まれ、タグによる色分けや二重引用符の 整合を取るための下線などの機能が加わります.
<html> <head> <title>Hoge hoge</title> </head> <body> This is a test page.<br> Contents is now under construction.<br> </body> </html> |
ページの記述は「ヘッダ」と「ボディ」にわかれ,それぞれタグにより示されて います.開始タグに対して終了タグはスラッシュが加わっている点が異なります. また,終了タグが不要なケースもありますが、HTMLブラウザは基本的に厳密な動 作よりも多少の曖昧さを許容してくれるように動作するので,不完全なタグでも ページの表示自体はだいたいできるようになっています.
ページの背景色や文字色の変更や、ハイパーリンクなどは先ほど例にあげた昨年 のテキストを参照してください.特に、HTMLで難しいのは「表」の表現ですが、 その辺りも昨年の例で試してみてください.以下に示すのは,単純な表の例のソー スです.
<table border> <tr bgcolor=#aaaaff><td>Blue line</td><td>青い行</td></tr> <tr><td bgcolor="red">Red cell</td><td bgcolor="yellow">黄色い枠</td></tr> </table> |
上記の作業を時間内で行ってください.HTMLについては表の作成を練習しておい てください.
授業の終りに宿題の説明をしますので、アナウンスに注意してください.