2010年11月21日(第191回)
テスト期間中につき、IT研究会メンバー担当の収録でお送りしました。
機械工業会交流事業・エコ見学会
福井高専と福井県機械工業会青年部との交流事業にて、 今回はエコロジー関係の施設などの見学会で、大阪京都にいってきました。
大阪産業大学ソーラーカー
車関連の技術の実践教育が有名な大阪産業大学で、 変わった特徴として、1割が留学生(多くは中国)の大学で、 プロジェクト教育に力をいれている。 50%がなんらかのプロジェクトに参加している。
話をお聞きしたのは、ソーラーカープロジェクト代表の村上先生。 最初に、大学の説明として、 「企業が人柄熱意可能性を求めている。 社会人基礎力の教育方法は、答えのない教育がいいのでは。」 といった説明。 中心のソーラーカーの話として、 現在燃料電池、ソーラーカー、熱発電などの環境自動車に取り組んでいる。 日本では石油3億kl/年を消費し、熱40%、動力源40%に利用。 地球に届く太陽光エネルギー85,000TW,人類が消費15TWの消費なので、 太陽エネルギーを使うのは有望。 メカな部分が最小なので、エンジンに比べモーターは耐久年数が長い。
ソーラーカーラリーで世界大会優勝の車体
てんぷら油でパリダカールラリーに参戦した車体
乾電池でover100Km/hを達成した車体。38Kgしかない。
そらえもん。
ソーラーカーラリーで優勝の車体の太陽電池パネル。
衛星用の高価な単結晶シリコン太陽電池なので、超お高い。
京セラ•ファインセラミック館
次に見学したのは、京セラ本社のファインセラミック館。 総務の人の説明なので、会社の方針とかのお話が中心となりました。
精神世界の無限の力、人の可能性には限りがない。 '59よりブラウン管の電子銃の絶縁体セラミックが始まり。 現在、通信、情報、環境エネルギー、自動車が中心となっている。
創業の名誉会長:稲盛和夫氏の、社是:敬天愛人。"living together"にそって運営。 成功の秘訣は、成功するまで諦めないこと。 負けた時が敗北でない。諦めた瞬間に敗北が決まる。
ソーラーエネルギー部門は'75より。儲けのない部門だった。 再生可能エネルギーが重要。 現在、民生普及用の太陽電池では、最高性能の多結晶シリコンで、 max18.5%変換効率の物が京セラで開発されている。
本社ビルの屋上・壁面の太陽電池。一般家庭×60件分の発電能力。
ビル壁面で角度や方角では不利な点もあるけど….
京(みやこ)エコロジーセンター
京都議定書が締結されたCOP3の開催されたときの記念館。 体験型展示館: 太陽光発電、雨水利用、地熱発電、高断熱外壁。
ARToolKitのsampleVRMLがようやく動く
他の雑務の合間にちょろちょろと実験しているARToolKitだけど、 OpenVRMLを使うサンプルプログラム(sampleVRML)がMac OS Xで 動かず、手間取った。 簡単に言えば、慣れないXcodeのルールを分かってないだけだった。
コンパイル中のエラーを見ると、C++のメソッドがたっぷり出てきたし、 名前修飾(mangling)のルールがgccのバージョン違いで発生しているのかと 思っていた。でもgccのオプションを調べてもgcc-2.Xと3.Xは違うみたい だけど、その後は特にトラブルの解説もない。
実は単純に、openvrmlのダイナミックリンクライブラリlib*.dylibの コピーする先が違ってただけじゃん。やっぱりXcodeとか慣れない統合環境は、 解ってないなぁ…
共用体と列挙型、グラフィックディスプレィの構造
構造体の続きということで、共用体と列挙型の説明を行う。 後半は、中間試験以降のグラフィックスの導入ということで、 ディスプレィの構造について説明する。
共用体と列挙型
共用体の説明ということで、異なる型のデータを保存する場合で、その型のうちのどれか1つ という場合には、共用体を使うということで説明を行う。
union Data { int integer ; double real ; char string[ 10 ] ; } ; union Data x[ 3 ] ; x[0].integer = 1234 ; x[1].real = 1.234 ; strcpy( x[2].string , "斉藤" ) ;
ただし、上記の例はどの型のデータが保存されたのかヒントになるような情報も 保存しなければ不便だけど….
列挙型は、プログラムの中でデータを区別するためのヒントのような情報で数値を列挙したい ときに使う。
enum Week { SUN , MON , TUE , WED , THR , FRI , SAT } ; enum Week w ; for( w = SUN ; w <= SAT ; w++ ) { if ( w == WED ) { // 水曜日の処理.... } }
グラフィックディスプレィの構造
グラフィックスのネタの導入ということで、最近のディスプレィの構造を説明する。
- CRT(ブラウン管)
- 高電圧を使った電子銃から飛び出た電子を、偏向ヨークで画面上の電子のぶつかる場所をコントロールする。ディスプレィの表面には電子がぶつかると光る蛍光体を塗ってある。 古くは、一筆書きで描くようなベクトルスキャン方式があったけど、 普通のテレビなどは、ラスタースキャン方式で電子のあたる場所を左右移動しながら上下移動することで、画面一面に情報を表示する。 色を表現する際には、各色の電子をとばし、スリットを抜けた電子のぶつかる場所に応じて、 違う色の蛍光体を塗っておく。 欠点は、巨大なディスプレイが作りにくい。厚さを薄くできない。
- 液晶
- 液晶は、電圧によって通り抜ける光の偏光方向をコントロールできる。 透明電極が配線されたガラス板の間に液晶を入れ、これを偏光板とカラーフィルタと重ねる。 液晶で発光を細かく制御しにくいため、色の再現性が悪かったり、偏光方向が変わるまでの 時間がかかるため、残像がでる。偏光板と液晶のずれから、横方向からだと表示が見にくくなる などの問題がある。
- 有機EL
- ドットごとにLEDが並んでいるような構造。現段階では巨大なモニターは作りにくいけど、 発色がいい。
- プラズマディスプレィ
- 電極と発光部の間にガスを封入して、その間に高電圧を加え放電させて光る。
MoodleサーバのHTTPSの設定
学校でのICT活用の一環である Moodle サーバの活用だけど、 今まで http 接続で、https 接続は自作鍵だったので、 警告メッセージが出たり、携帯でアクセスできなかったりという問題があった。
以前に、学科サーバでUPKIオープンドメイン証明書自動発行検証プロジェクトを利用して、https を 利用出来るようにしたけど、 出遅れて設定をしてなかったので、同様に 福井高専の Moodle サーバも、 https を利用出来るように設定した。
前回の学科サーバでの設定から日も経っているので、設定の間違いやらで 何度か再設定をしたり、学外からのアクセスの ReverseProxy の設定の 問題とかもあったけど、ようやく設定終了。
芦田先生のOSの授業で、一部実験していて家からだと使えんかった…という皆様方、 再度お試しあれ。
B木とハッシュ法
2分木の応用(式の表現・意思決定木)の説明が終わったので、 B木とハッシュ法の説明を行った。
B木
2分木では、ポインタの参照も頻繁に発生するし、偏った木への対応も面倒なので、 その対処方法として B木が使われる。 イメージは、2分木をそのままN要素にしただけ。
#define N 4 struct BTree { int size ; // ノード内に実際に入っているデータ件数。 int data[ N ] ; struct BTree* ptr[ N+1 ] ; // data[i]〜data[i+1]は、ptr[i+1]に保存 } ;
Wikipediaより引用
B木では、データの追加の際に、ノードの中央値を上のノードに組み込む 処理を行うために、木の偏りが発生しにくいようになっている。
Wikipediaより引用
B木の改良型であるB+木をさらに発展させたアルゴリズムが、 データベースエンジンで用いられている。 データベースでは、全要素シーケンシャルアクセスなどが発生するため、 B+木ではノードを横断的に移動するためのポインタを持っているのが特徴。
ハッシュ法
ここまでに説明してきた方法は、速くても であったが、もっと速いアルゴリズムは無いか?
電話番号の検索であれば、電話番号そのものが保存場所という方式であれば、 一発でデータを見つけることができるが、メモリはあまりにも無駄遣いとなる。
int tel = 272925 ; int a[ 1000000 ] ; a[ tel ] = tel ;
このままでは、メモリがムダだけど、電話番号であれば、50件程度ならば、 末尾2桁が同じ場合は、極めて少ない。
int a[ 100 ] ; a[ tel % 100 ] = tel ;
この様に、データの一部分を計算処理(ハッシュ関数)で抜き出し、 その値(ハッシュ値)を保存場所とする方式は、ハッシュ法と呼ばれる。 また、異なるデータでも同じハッシュ値になる(衝突)場合があり、 この対処方法で、いろいろな方法がある。 ここでは、最も簡単な「イス取りゲームでダメなら隣りに座る」方式(オープンアドレス方)を紹介する。
// 電話番号が保存されているかを判断する #define SIZE 100 int hash[ SIZE ] ; // 電話番号0はエントリ無しとして扱う int hash_func( int tel ) { return tel % SIZE ; } void entry( int tel ) { int h = hash_func( tel ) ; while( hash[ h ] != 0 ) { // 溢れると無限ループの問題あり h = (h + 1) % SIZE ; } hash[ h ] = tel ; } int search( int tel ) { int h = hash_func( tel ) ; while( hash[ h ] != 0 ) { // 無限ループの問題あり if ( hash[ h ] == tel ) return tel ; // 見つかった h = (h + 1) % SIZE ; } return 0 ; // 見つからない }
データベースの正規形とオブジェクト指向
データベースの設計におけるER図の書き方で、 補足説明として対応数やロール、弱実体などの説明を行う。 この際に、汎化の説明があったので、これに伴いオブジェクト指向の話を少し行う。
オブジェクト指向の一部として、派生・導出・継承というキーワードを簡単に説明する。 また、ER図との関連性として、UMLを紹介し、フローチャートやPADなどが 振る舞い図として発展していることや、データ記述でもクラス図なども紹介する。
次に、データベースの正規化の話の説明として、第2正規形までを説明。 全属性が単一の値であれば原子値と呼ばれ、 すべての項目が原子値になっているものを第一正規形と呼ぶ。 一つのキーが決まると、他の属性も1つの物に絞り込める場合、 従属関係があると呼ばれる。 一つのキーが決まれば、他の属性がすべて従属するものは完全従属と呼ばれる。 他の非キー項目間で従属関係があるものは、部分従属と呼ばれる。 部分従属がなくて完全従属であれば、第2正規形と呼ぶ。
ネットワークと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アドレスではネットワーク番号とホスト番号に 分けて、ネットワーク番号が違えば別サブネット、同じならサブネット内で通信という メカニズムまでを説明する。
2010年11月14日(第190回)
- 数学の部屋 第54回 物理の池田先生にインタビュー 長水先生
math101114.mp3 - 長水先生が生出演
- 誠市、ご縁市について
長水先生が生出演しました。
鯖江の地域通貨「ハピー」です。誠市に福鉄で来るともらえるそうです。
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 機能の無いカメラを購入しないとダメあるね。