ホーム » スタッフ (ページ 208)

スタッフ」カテゴリーアーカイブ

2025年6月
1234567
891011121314
15161718192021
22232425262728
2930  

検索・リンク

オープンソースKinectドライバ公開だってさ

Microsoftのゲーム機XBox360用の3D認識のカメラKinectが ハックされてドライバが公開されている。 動作デモの動画をみていると、ステレオ視差での奥行がリアルタイムで取得できるみたい。 LinuxのUSBドライバとして使えるようだし、面白そう。

Google SketchUp 8 とDXFプラグイン

単なるメモ。 ARToolKitの実験の中で、3D CADソフトを入れてみることに。 Metasequoia(メタセコイア)もあるけど、 使いやすそうな Google SketchUp8 をひとまず試す。 どちらにしろ、データ互換性は重要だし有償Pro版はもったいないし、 DXF出力のプラグインを入れる。

なんだ、ARToolKitだと、拡張子.MQOを読むのか…DXF出力じゃ、 全然ダメじゃん。それに、Metasequoiaの方が、ポリゴンから曲面をつくってくれる サブディビジョンサーフェスとかは、Metasequoiaの方が便利そうだな… でも、Windows環境だけかよ…

いちょうの葉っぱの吹雪

1011221206_240x320.jpg

ネットワークとプロトコル(TCP/DNS/WWW)

ネットワークの説明の最終段階ということで、先週のIPプロトコルの続きを説明。

IPプロトコルがデータ中継のプロトコルで、IPアドレスにサブネットを論理積(AND)をとったもの (ネットワーク番号)が 同じなら、直接通信するし、違えばゲートウェイ(ルータ)に中継を依頼する。 ルータは、ネットワーク番号で送るべき先を決め、送り先を決めるために接続先に関する 情報をお互いに教えあっていることを説明する。 よって、ネットワーク接続では、IPアドレス・サブネットマスク・ゲートウェイの設定が重要。 しかしこういう設定は解りづらいので、DHCPだと自動的に設定できるようになる。

IPでは、パケットに分割して送るが、衝突などでデータは消えて正しく届かないかもしれない。 この場合には再送しなければいけないが、欠落パケットの再送などをしていると、 相手先に届くパケットの順番は、めちゃくちゃになる。 この辺の再送やパケット順の復活を担当するのが、TCPプロトコル。 このプロトコルは再送でリアルタイム性が悪いため、UDPプロトコルも使われる

IPプロトコルでは、相手先コンピュータをIPアドレスで指定するが、こういう番号は 人間は覚えづらい。解りやすいコンピュータ名としてドメイン名があり、 組織や国が解りやすくなる。ドメイン名からIPアドレスを調べたり、アドレスから名前を 調べるためのプロトコルがDNS(Domain Name Service)

TCP/IPで通信ができても、1つのコンピュータ内で複数のネットワークサービスが 利用できる場合、IPアドレスだけでは通信するサービスを区別できない。 このため、コンピュータ内の通信処理を区別するためにポート番号がある。 一般的なネットワークサービスでは、プロトコル毎にポート番号が決まっている。

WWW(World Wide Web)では、URL(最近はURI)をもとに通信が行われる。 (1)URIのコンピュータ名をDNSでIPアドレスを調べる。 (2)スキーマ欄をみて、プロトコルとポート番号が決まる。 (3)相手サーバに、httpプロトコルによって"/"配下のファイル名部分の情報で『くれ!』とたのむ。 (4)サーバは、一般的にHTML形式のデータを送り返す。 (5)ブラウザはHTML形式の情報を解析して、画面上に情報を表示する。

2010年11月21日(第191回)

テスト期間中につき、IT研究会メンバー担当の収録でお送りしました。

機械工業会交流事業・エコ見学会

福井高専と福井県機械工業会青年部との交流事業にて、 今回はエコロジー関係の施設などの見学会で、大阪京都にいってきました。

大阪産業大学ソーラーカー

車関連の技術の実践教育が有名な大阪産業大学で、 変わった特徴として、1割が留学生(多くは中国)の大学で、 プロジェクト教育に力をいれている。 50%がなんらかのプロジェクトに参加している。

話をお聞きしたのは、ソーラーカープロジェクト代表の村上先生。 最初に、大学の説明として、 「企業が人柄熱意可能性を求めている。 社会人基礎力の教育方法は、答えのない教育がいいのでは。」 といった説明。 中心のソーラーカーの話として、 現在燃料電池、ソーラーカー、熱発電などの環境自動車に取り組んでいる。 日本では石油3億kl/年を消費し、熱40%、動力源40%に利用。 地球に届く太陽光エネルギー85,000TW,人類が消費15TWの消費なので、 太陽エネルギーを使うのは有望。 メカな部分が最小なので、エンジンに比べモーターは耐久年数が長い。

1011200859_314x235.jpg
ソーラーカーラリーで世界大会優勝の車体
1011200859-1_314x235.jpg
てんぷら油でパリダカールラリーに参戦した車体
1011200859_211x314.jpg
乾電池でover100Km/hを達成した車体。38Kgしかない。
1011200859-2_314x235.jpg
そらえもん。
1011200859-3_314x235.jpg
ソーラーカーラリーで優勝の車体の太陽電池パネル。
衛星用の高価な単結晶シリコン太陽電池なので、超お高い。

京セラ•ファインセラミック館

次に見学したのは、京セラ本社ファインセラミック館。 総務の人の説明なので、会社の方針とかのお話が中心となりました。

精神世界の無限の力、人の可能性には限りがない。 '59よりブラウン管の電子銃の絶縁体セラミックが始まり。 現在、通信、情報、環境エネルギー、自動車が中心となっている。

創業の名誉会長:稲盛和夫氏の、社是:敬天愛人。"living together"にそって運営。 成功の秘訣は、成功するまで諦めないこと。 負けた時が敗北でない。諦めた瞬間に敗北が決まる。

ソーラーエネルギー部門は'75より。儲けのない部門だった。 再生可能エネルギーが重要。 現在、民生普及用の太陽電池では、最高性能の多結晶シリコンで、 max18.5%変換効率の物が京セラで開発されている。

1011200859_235x314.jpg
本社ビルの屋上・壁面の太陽電池。一般家庭×60件分の発電能力。
ビル壁面で角度や方角では不利な点もあるけど….
1011200859-4_314x235.jpg

京(みやこ)エコロジーセンター

京都議定書が締結されたCOP3の開催されたときの記念館。 体験型展示館: 太陽光発電、雨水利用、地熱発電、高断熱外壁。

1011200859-1_235x314.jpg
1011200859-2_235x314.jpg

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 ; // 見つからない
}

システム

最新の投稿(電子情報)

アーカイブ

カテゴリー