ネットワークとTCP/IP
先週のネットワークの物理層(LAN)の続きということで、 WANの全容を紹介した後、Ethernetの接続とTCP/IPの話をする。
WAN
LANでは拠点内の接続だけど、WANでは接続は電話が中心となる。 電話では音声の波を電気の波に変換して送られるが、 コンピュータのデジタル信号で送る場合には、間にモデムが入る。 しかし、通常の電話では64Kbps通信しかできないので、 デジタル信号で送るISDN(Max 128Kbps)が出てきた。 しかしながら速度が遅いため、音声信号の高周波帯にデジタル信号を入れ、 下り優先で帯域を割り振ったADSLが使われる。 しかしながら交換機までの距離が短くないと高速通信ができない。 最近は、CATVやFTTH(光ファイバ通信)が使われ、100Mbps通信ができる。
本当なら、AM/FM/PMなどの変調方式も説明すべきだけど、 時間を考え省略。
EthernetとIP接続
Ethernetの説明として、サブネットに分割しルータで中継…というIP接続の基本を説明する。
説明にあたり、バス型・リング型・スター型・ネット型・ツリー型などの説明の後、 Etherではバス型接続で、CSMA/CD方式をとることを説明する。
CSMA/CD方式では、 (a)バスが使われていないことを検出(Carrier Sense)し、 (b)使われていなければ使う(Multiple Access)。 しかしながら、キャリア無し検出からデータを出すまでの間のタイムラグがあるため、 (c)信号をだしたら他に使う人がいて通信に失敗するかもしれない(Collision Detect) このため、 (d)衝突が発生したらリトライするけど、リトライ待ち時間は乱数で決める。 この方式では、バスに接続する機器が多いと、どちらにしろ待ち時間が長くなる。 このため、ネットワークを細かく分離したサブネットを作る。 サブネット間には、ルータやブリッジを置いて、中継をしてもらう。
サブネットの分割以外にも、接続用のHUBで内部的な接続を必要に応じてつなぐ スイッチングHUBを使うことで、バス競合を減らすように工夫をする。 でも、分割されたサブネットのどこに機器があるのか、どう中継させるのかを 判断するメカニズムが必要。
IPプロトコルは、このサブネット間の中継を行うためのプロトコルで、 ネットワークの聞きを識別するための番号を個別に割り振る。 この番号は、IPv4では32bitを用いるが、近年のIPv4アドレスの枯渇から、 IPv6が使われるようになってきた。IPv6では、128bitを使用するため、アドレス枯渇はない。
授業時間が短くなってきたので、IPアドレスではネットワーク番号とホスト番号に 分けて、ネットワーク番号が違えば別サブネット、同じならサブネット内で通信という メカニズムまでを説明する。
PTAMお試し中
ARToolKitを試す中、sampleVRMLのライブラリのコンパイルがうまく通らず、 現実逃避の情報探し。 この中で、リアルタイムに画像内の特徴点を見つけ、空間認識できる PTAM(Parallel Tracking and Mapping for Small AR Workspaces – Source Code) なるものを見つける。カメラの移動による視差変化を使ってくれて、 ソースコードも公開されている。
デモ画面を見ていても、最初のカメラ移動から空間をうまく認識しているのが 分かるし、普通のMacBookで動いているのもすごい。
Webに載っている情報を元に、手元でコンパイルを試みているけど、 うまく通ってくれないなぁ…
# もう少し別ネタを元にコンパイル試すか…
# Xcode 使わないで書いてある環境の方が馴染みやすいと
# 思うのはオッサンな証拠…
コンパイルを試みるけど、TooN::Vector で Zerosが見つからないとかいう エラーがでる。TooNのベクトルのZero初期化なんだけど、どうも バージョンが合っていないと思われるので、最初から 入れ直し。
Auto Focus カメラはダメ、単焦点Webカメラ必須
上記の資料にそって作業したところ、うまく動くようになった。 しかしながら、問題が1つ。 iSight だと、パソコン操作者側を撮るので、外付けのUSBカメラに変えてみた。 外付けでも普通に動き出すのはいいんだけど、 実験で使用したのは Auto Focus 付きのUVCカメラなんだけど、 初期状態のフォーカスに固定になり、視点移動でカメラを動かすけど、 ピンボケでトラッキング対象をうまく見つけられない。
ということで、単焦点のAuto Focus 機能の無いカメラを購入しないとダメあるね。
ARToolkit拡張現実感プログラミング入門…
卒研でARToolkitが使えないかと、試したりしているんだけど、 外部カメラの解像度指定方法しらべてたら、参考にしている 『ARToolkit拡張現実感プログラミング入門』の一番最初の部分が、 そのままWebに載っているじゃないの…
ほっほぉ、OpenGLの解説のいい本も紹介してある。 さっそく発注するあるね。
Mac OS Xでカメラ解像度指定
simpleTestあたりの実験で、USB外部カメラが使えるのはいいんだけど、 iSight なら丁度いいサイズ(max?)なんだけど、外部カメラは最大解像度で ムダに大きい動画を取得している。調べてみると、 main で arVideoOpen( vconf ) を呼び出す際の vconf がプログラム先頭で、 以下のように宣言されてるのね。
// // Camera configuration. // #ifdef _WIN32 char *vconf = "Data\\WDM_camera_flipV.xml"; #else - char *vconf = ""; // デフォルトそのままだとダメ。 + char *vconf = "-width=640 -height=480"; #endif
使える設定は、プログラムの "ARToolKit/doc/video/index.html#VideoMacOSX" に説明が書いてある。
秋の遠足にてバーベキュー
3年生の工場見学旅行中に例年実施されている 秋の遠足にて、4EIでは「ふくい健康の森」にて バーベキューをしました。
朝は、雨が降っていて心配でしたが、 集合時間には晴れ、バス停から健康の森までを ウォーキング。参加費1000円にて昨日購入した 食材が足りるかなと心配でしたが、調度良い量で きれいにすべてなくなりました。


晴れているとはいえ、季節的にも寒いバーベキューでしたが、 楽しめました。
2分木で式を表現
2分木の応用として、2項演算子と数値を表現する方法を説明した。
式と表記法
木での表現の前に、式を演算子の優先順位のカッコ無しで表現する手法として、 逆ポーランド記法などを説明する。また、逆ポーランド記法で表記されたデータを 処理する場合にはスタックなどが便利であることも説明する。
中置記法: 1+2*3 逆ポーランド記法: 1,2,3,*,+ (後置記法) 前置記法: +,1,*,2,3
スタックを使えば、逆ポーランド記法データから値を求める処理が簡単。 数値ならスタックに積む。演算子なら2つデータを取って計算し、結果を再びスタックに積む。
| | | | |3| + | | |2| |2| |6| / \ |1| |1| |1| |1| |7| 1 * ------------------- / \ 1 , 2 , 3 , * , + 2 3
2分木で式を表現
struct Expr { int value ; // left,right==NULLの時は数値 char op ; struct Expr* left ; struct Expr* right ; } ; struct Expr* Integer( int v ) { // 数値の木を作る struct Expr* ans ; ans = (struct Expr*)malloc( sizeof( struct Expr ) ) ; if ( ans != NULL ) { ans->value = v ; ans->op = ' ' ; // dummy ans->left = ans->right = NULL ; } return ans ; } struct Expr* Operator( char op , // 式の木を作る struct Expr* l , struct Expr* r ) { struct Expr* ans ; ans = (struct Expr*)malloc( sizeof( struct Expr ) ) ; if ( ans != NULL ) { ans->value = 0 ; // dummy ans->op = op ; ans->left = l ; ans->right = r ; } return ans ; } int eval( struct Expr* e ) { // 木の式を評価 if ( e->left == NULL && e->right == NULL ) { return e->value ; } else { int l = eval( e->left ) ; int r = eval( e->right ) ; switch( e->op ) { case '+' : return l + r ; case '*' : return l * r ; } } } void main() { struct Expr* exp = Operator( '+' , Integer( 1 ) , Operator( '*' , Integer( 2 ) , Integer( 3 ) ) ) ; printf( "%d" , eval( exp ) ) ; }
Moodleネットワーク機能
現在福井高専で運用している Moodle サーバへの機能拡張をするための、 打ち合わせに同席した。現在、f-leccsではシングルサインオンにより、 県立大学に設置されている f-leccs の Moodle サーバは、関係学校より 自由に使える。 こういう2重のMoodleサーバを運用している中で、機能拡張で、 Moodle ネットワーク機能と、携帯でアンケートを取る機能を、見せてもらった。
Moodleネットワーク機能は、他のMoodleサーバにも接続できるようになる機能みたい。 シングルサインオンで使える f-leccs があるから、 必須ではないが、将来的にシームレスに Moodle を連携するときには便利かな。
家庭用向け太陽光発電システムって…
今年度は、福井県機械工業会の方々との連携事業に関係しているけど、 エコがキーワード。講習会では、太陽光発電などの話を聞いているけど、 実際家庭で使う太陽光発電の話が家電Watchで記事になっているので、 メモを残す。
緊急連絡システムのメールでの確認
緊急連絡システムでは、システム全体の利用状況を見るために、 全学校で緊急メールが出されると、管理者用のメールアドレスにも メールを送るようにしてある。 でも、もう一人の管理者の先生から、最近管理者用のメールが届かないとの連絡。 (私は熊の季節には、あまりにも数多いメールが来るので、自分宛ははずしておいた)
確認してみると、最近情報処理センターのメールシステムの更新で、 管理者用のメールアドレスから、実際の管理者へのメール転送機能が設定されていなかったのが 原因だった。 ということで、センターの方に転送の設定方法を聞いて設定。 実際は、usermin(webmin)で、.forward ファイルを編集する。 usermin には、.forwardファイルを直接書き込む設定があったので、 .forward ファイルの書き方を確認しながら、転送設定を行った。
メモリ階層とネットワークの基礎
先週の授業で、OSに関係する部分の説明を終えていたが、 メモリ階層の話が抜けていたので補足。
メモリ階層
コンピュータで利用するデータには、局在性があり よく利用するデータと利用頻度の低いデータがある。 これに応じてコンピュータでは、高速・高価なメモリと、低速・安価なメモリを うまく使い分けることで、「見かけ上、高速なメモリが大容量あるようにみせる」 メモリ階層は、 (a)もっとも速く利用頻度の高いCPU内部の汎用レジスタ(多くても数百バイト)と、 (b)キャッシュメモリ(数キロバイトでS-RAMを使う)、 (c)主記憶(数ギガバイトでD-RAMを使う)、 (d)補助記憶装置(ハードディスクの仮想メモリ)で、遅くて大容量。 を使い分けている。

ネットワークの基礎
計算機システムのOSネタの後半は、ネットワークについて説明を行う。 最初に、ネットワークの利用目的として、共有・分散をキーワードに、説明を行う。
- 資源共有(資源分散)
-
ハードウェア資源を共有。プリンタサーバ(ハードウェアの共有)、 ファイルサーバ(データの共有・ハードディスクの共有)。 アプリケーションサーバ(アプリケーションの共有,ライセンスであんまり使われていないけど)
- 負荷分散
-
ムーアの法則で、コンピュータ処理速度は限界に達している。 さらなる高速化のために、計算処理を複数のコンピュータで分散して実行する。 グリッドコンピューティングやクラウドコンピューティングなど。
- リスク分散
-
ネットワークの歴史的には、Internetの元のARPANETなどは、軍の中央コンピュータが核ミサイル破壊で、全体が動かなくなるリスクを、別なコンピュータで代用できるようにした所が始まり。現在でもコンピュータの故障リスクをなくすために、複数台で処理することが普通。 クラウドもリスク分散を兼ねている。
ネットワークの歴史として、 (1)TSSによる端末・サーバ間通信、 (2)ARPANETによるネットワーク基礎の確立、 (3)LANの発達、 (4)LAN間接続でWANの発達、 (5)WWW(World Wide Web)の発達 を紹介。
ネットワーク物理層
パソコン・周辺装置インタフェースとして、パラレル接続(高速・ケーブル配線が手間)・シリアル接続(低速・ケーブル配線が容易)がある。 シリアル接続の中で、Ethernetは接続の代表格で、 10BASE/2,5 では、同軸ケーブル接続が基本。 しかしターミネータの必要性から、接続機器の追加削除が不便だった。 10BASE/Tで、間にHUBを置いて分岐する。 10BASE/Tは、100BASE-TX、1000BASE-??と発達している…
Apache+SSL起動でパスフレーズ入力を…
学科のサーバでは、UPKIオープンドメイン証明を使用しているが、 登録時にパスフレーズを埋め込んでいるために、サーバ起動時に いつも入力待ちになっていた。 ちょいとググったら、技が載っていたので、メモ&設定。
# うほ、便利…