コンピュータネットワーク基礎
2004.5.7
小テストを採点した結果も今年度から公開することにしました.専用のページが ありますので,適宜利用してください.また,解答例を紹介したページもありま すので,参考にしてください.
総合情報処理センターによって割り当てられたパスワードは自分で変更可能です. センターのページ
にアクセスして変更できますので,検討して下さい.
コンピュータにおける1,000倍の意味は,1,024倍であることに注意が必要です. 表1に示してある法則を理解しておいて下さい.
1 kbps | 1,024 bps |
1 Mbps | 1,024 kbps = 1,048,576 bps |
1 Gbps | 1,024 Mbps = 1,048,576 kbps = 1073741824 bps (1.074E+09 bps) |
教科書の図1.8にあるように,厳密な矩形波は伝送できません.ここでは,帯域と波形の関係 を実際に自分で確認してみましょう.そのためにはグラフ化するツールなどを使 う方が視覚的にきれいに正確に表現できますが,この授業ではターミナルに波形を粗 くですが出力できる方式を考えてみます.言語としてはRubyを使ってみましょう. 次のようなスクリプトを利用します.
#!/usr/bin/ruby include Math n = ARGV[0].to_i a = Array.new(63,0) sp = " " for theta in 0..62 for k in 0..n a[theta] += 4 * sin((2*k + 1) * theta/10.0) / (2*k + 1) / PI end print theta/10.0, "\t", sp * (((a[theta] * 40 + 50) / 2).round), "*\n" end |
このスクリプトはダウンロード可能です.リンクの部分 を右クリックして出てくるメニューから「リンク先を名前をつけて保存」を選択 して適当な場所に保存して,ターミナルから実行します.先週行ったように,パネル(タスクバー)にある画面にGのアイコン をクリックしてGNOME 標準の仮想端末である「Gnomeターミナル」を起動します.画面には,コマンド プロンプト(コマンド入力待ち受け記号)である $ がありますので, そこがコマンド入力位置です.
$ ruby wave.rb 2
のように引数に数字(整数)をつけて実行します.この整数は基本となる三角関数 の何次の高調波まで計算するかを示すもので,スクリプトの中では 2*k+1 として入れてあります.ですから,0であればsin関数そのものになり ますし,1を入れると3次(奇数次しか扱わないので,2番目)の高調波まで取り込 んだ計算になります.文字を利用して表現しているので,ちょっと粗くなりますがそれでも7あ たりまでは見掛け上なんとかなっていると思います.どのくらいのところまで計 算すれば方形波になるのかも試してみましょう.
ASCIIコードのファイルを作成して,文字コードを眺めてみましょう.作業はター ミナルで行います.
$ cat > sample.txt
とすると,画面に文字を入力してそれを sample.txt というファイル に書き込むことができます.コマンドプロンプトがありませんがカーソル位置に 文字入力できます.例として,
ABCabc
と入力し,Enterキーを押して改行した後,Ctrl-Dの操作をします.これで, sample.txt に上のように ABCabc という文字が入力さ れていることになります.
このような方法によるデータの作成では,入力を間違った場合に修正は出来ませ ん.文字入力を間違えた場合には,Ctrl+Dで一旦終了して,また最初からやり直 します.それが気になる人は,エディタを使用して作成しても構いません.作成できたら,中身を確認してみましょう.ファイルの中身を見るコ マンドは cat です.
$ cat sample.txt
では,これらの文字の文字コードを見てみることにしましょう.教科書の図2.1 に実際のコードが示してあります.それと一致するでしょうか.文字コードを直 接見る方法はいろいろありますが,ここでは hexdump というコマンド を利用してみます.次のようにしてみましょう.
$ hexdump -xc sample.txt
きちんと作業できていると結果は次のようになるはずです.
0000000 4241 6143 6362 000a 0000000 A B C a b c \n 0000007 |
hexとはhexadecimalの略で,16進数の意味です.2進数はbinary,8進数はoctal, 10進数がdecimalです.dumpはダンプカーとして知られているダンプで,どさり と捨てる,放り投げる,の意味です.自分で他の文字を試してみるのも良いかも知れません.ASCIIコードの一覧は以 下のページなどで知ることが出来ます.
http://www.psl.ne.jp/perl/pdojo00b.html
次に,日本語の入っているもので同様の作業をしてみましょう.先ほどと同じ ように,
$ cat > sample-euc.txt
日本語あいう
としてみましょう.日本語を入力するときには,Shiftキーを押し下げたまま Spaceキーを押して入力モードを切替えます.図1に示すように,入力位置に[あ] が出ているとかんなによる日本語入力モードです.
図1 ターミナルにおける日本語入力モードの確認
$ hexdump -xc sample-euc.txt
結果は以下のようになっているはずです.
0000000 fcc6 dccb ecb8 a2a4 a4a4 a6a4 000a 0000000 306 374 313 334 270 354 244 242 244 244 244 246 \n 000000d |
見方が難しいですが,どうやら教科書とはコードが異なっているようです. Linuxが通常使用する日本語文字コードはEUCですので,図2.1で説明されている JIS X 0208とは違うコードが割り当てられていることがわかります.では,先ほ どのサンプルを教科書と同じようにJIS X 0208に変換してみましょう.
$ nkf -j sample-euc.txt > sample-jis.txt
以後の作業は先ほどと同じですので,各自で試してみて下さい.
0000000 241b 4642 4b7c 385c 246c 2422 2424 1b26 0000000 033 $ B F | K \ 8 l $ " $ $ $ & 033 0000010 4228 000a 0000010 ( B \n 0000013 |
ただし,結果の 解釈は図2.2にある「エスケープ・シーケンス」を理解する必要があります.
nkf はNihongo Kanji Filter の略です.詳 しくは jman コマンドで確認して下さい.テキストエディタによっても文字コードの中身を確認してみましょう.先ほど作 成したファイルをGNOME標準エディタであるgEditで開いてみます.パネル(タス クバー)ののアイコンをクリックする ことで図2の画面が起動します.
図2 gEditのメインウィンドウ
授業の終了20分前くらいにAクラスと Bクラス別の小テストを実施します.アナウ ンスに注意してください.また,提出は電子メールにより行いますので,メール の送信準備は忘れないでいて下さい.
授業の終りに宿題(AクラスとBクラス)の説明をしますので,アナウンスに注意してください.