双方向リストと2分木
後期1発目で、どこまで説明していたっけ?状態から、確認しながらスタート。 後の双方向・2分木の利点を理解してもらうために、 改めて「リスト構造」の利点・欠点について質問をする。
双方向リスト
基本、シーケンシャルアクセスの単純リストでは、 次のデータ参照は簡単だけれども、テキストエディタみたいなものを作る場合、 1つ前の行を参照…が単純リストでは不便。 そこで1つ前の行に戻れればいいということで、双方向リストを紹介。
struct BDList { struct BDList* prev ; int data ; struct BDList* next ; } ;
このデータ構造の特徴を理解してもらうための簡単なプログラムとして、 双方向リストの指定ポインタの後ろに1件データ追記を紹介。
void insert( struct BDList* p , int x ) { struct BDList* n ; n = (struct BDList*)malloc( sizeof( struct BDList ) ) ; if ( n != NULL ) { n->data = x ; n->prev = p ; n->next = p->next ; p->next->prev = n ; p->next = n ; } }
しかしながら、この補助関数 insert() では、最前のデータを作ることはできない。 1つ前バージョンの補助関数を作ったり、最前データだけ特別処理でプログラムを 書くこともできるけど煩雑になり、プログラムの間違いの可能性も高くなる。 こういう場合は一般的に番兵を用いる。 最前および最尾に、実際には利用しないダミーデータを入れておけば、 特別処理を書かなくて済む。
また、最前・最尾のダミーでは、無駄なデータが2ヶ所現れてしまう。 しかし、最前の番兵データの1つまえを実際の最尾データ、実際の最尾データの次を最前の番兵データとすれば、番兵は1つで済む。こういう構造であれば、末尾が先頭に つながっている構造なので、「双方向循環リスト」と呼ばれる。 となるようにポインタ
2分木の導入
単純リストでは、目的データを検索する場合、シーケンシャルアクセスしかできないため、 検索にはO(N)の処理となってしまう。 高速に検索したいのであれば、配列ならばランダムアクセスができるため、 二分探索法が利用でき、処理もO(log N)となる。 リスト構造でも、二分探索法のように速くかつ、途中にデータの挿入削除のできるように したい。この場合に使われるのが2分木。
struct Tree { int data ; struct Tree* left ; struct Tree* right ; } ;

データベース(ガイダンス)
後期最初の担任クラスの授業ということもあり、 ホームルームも兼ねていたけど、非選択の学生さんが退出して、普通に授業。(^^;
最初の授業ということで、簡単なガイダンスとして、ネットワークが普及した現在、 データベースがどのように使われているのかを説明する。
データベースが情報共有のために重要な技術であり、Webシステムの中での使われ方 ということで、サーチエンジンの話(設立当初のYahooのユーザ登録型)や、 Google に代表されるクローラ・ロボットによるサーチエンジンの説明を行う。 これに伴い、データは巨大化し、大量のユーザを抱える現在、 データ検索を極めて短い時間で返答することの難しさを説明する。 このため、一般的なWebシステムでは、Webサーバを負荷分散目的で大量に配置し、 その後段にスレーブデータベースが待機し、その後段にさらにマスターデータベースが 並ぶという3段スキーマ構成の説明などを行う。 また、最近のIT産業では、システム構築からサービス開始までを短期間に行うために、 LAMP(Linux+Apache+MySQL+PHP)といった構成が多いことなども紹介。 さらに、普及しているリレーショナルデータベースシステムの名称として、 Oracle,MySQL,PostgreSQL,SQLite,BerkleyDBなどを紹介し、ネットワーク型、ファイル型 の違いやSQLを使うもの使わない物などがあることも紹介。
後半はデータベースが無かったら…という視点で説明。
C言語レベルの簡単な演習でデータベースっぽいことをする時は、 fscanf+fprintfだろうけど、大量データを永続的に扱いたいのであれば、 全データ読み込み&全データ出力のプログラムを書くのが簡単。 でも、データ量が増えれば、修正・追加のあった部分だけ書きこむ必要が出てくる。 しかしながら、1行1件のデータであれば1行の長さが変化するとダメ。 こういう場合には、1件のデータ長を固定として、lseek+fwrite+freadを使って ランダムアクセスのプログラムを書くことになる。
しかし、こういうプログラムは1件のデータ長が変化すれば、プログラムの修正も大変。 さらに、複数の並行処理で書き換えを行えるのであれば、flockなどを使ったプログラムが 必要となる。
iPad2届く
仕事用ということで発注をかけたiPad2がようやく届いた。 店頭でキーの打ちやすさとかも確認し、 それなりに使えそうだし、 会議の度にノートPCも重いかと考えた。
実際に使った感想は、キー入力はiPod touch でも使っているし、 十分に妥協点。
ただ利用頻度がそれなりに高いと思われるメールが残念。 IMAPで分類し溜め込んでいるメールが多いので、 フォルダの中を漁ることが多いけど、フォルダ移動が煩わしい…
あとFacebookアプリがiPad版まだ出ていないこと。
# 仕事用でしょ!?って言われそうだし、小さく書いておこう…
第5回歯みがきロボットコンテスト
第5回歯みがきロボットコンテストが、9/25(Sun)に勝山市越前大仏で 開催されました。 電子情報からも4EI藤原君の車体が自律部門で参加しました。
このロボコンは協賛でもあり運営では、電子情報の学生さんも審判として協力しています。

[福井新聞記事の写真を引用]
Arduino WiFiシールドな…(09/21)
- 09/21 Arduino WiFiシールドなども出てきそう…"最新Arduino:32ビット版、入門版などなど" (Make:Japan) http://tinyurl.com/3qw5979 #fnct #Arduino
この記事は、 の @TohruSaitohに掲載した #fnct タグ付き記事を、まとめたものです。
ソーラートラッカー
マインドストームNXTとレゴエネルギーセットの 部品を使ってソーラートラッカーを作ってみた。 手元で空いていたNXTが自宅の子供用で、 部品が微妙に違うため学校の部品も一部使ったり。 書いてあるだけの構成で作るのであれば、1時間もあれば組み立てはできる。
まだ、エネルギーメーターのデータをどのようにNXTに 取り込めるのかが未確認。NXT本体の[View]機能を使って、 サウンドセンサーとして扱えるのか光センサーとして扱えるのかとか 試したけれどダメ。 ファームウェアの更新も必要なのかな….
追記:
Energy Meter の使い方は、教育用レゴ・マインドストームNXTとエネルギーセットのページの下に、 『エネルギーセット用のプログラミングアイコンのダウンロード』という所から、 「アイコン」をダウンロードできる。Zipファイルを回答し、"Energy Meter In"とか"Energy Meter Out"を、マインドストームのプログラミング環境からインポートすれば、 以下のようにデータが取れるようになる。 入力値は、V-in,A-in,W-in,Jouleにて取得可能。出力値は *-out などで同様。

すこし動かしてみたけど、V-inは強い照明を一方向から安定的に照射しても、4.0〜4.7Vぐらいの範囲を、1秒間隔程度でひょろひょろと変動する。これじゃ、かなり平均とってやらないと、トラッキングは難しい。 モータ角度を"+0度"で10秒サンプリング、"-5度"動かして10秒サンプリング、"+5度"に動かして10秒サンプリング、3つの中で最も大きい出力値の角度に変更…この作業を、旋回角・仰角で交互に繰り返す…といったプログラムを作ることになるな…
LEGO educationすごいな…
ちょいとLEGOネタで、 LEGOエネルギーセットなるものが借りれた。 中身は、LEGOでエネルギーに関連する実験などができるように、モーター・太陽電池・エネルギーメーター・充電装置などが入っている。 今、教師用ガイドのCDを見てるけど、エネルギーに関連した実験が色々とできる。
LEGOエネルギーセット

タイヤだけの車体で坂を転がして位置エネルギーと運動エネルギーの実験に始まり、 風車や水車で発電し、風速(水量)と発生エネルギー量の相関をしらべる実験や、 滑車での重りのつり上げに必要なエネルギーを図らせたりと、 物理の実験ができる。
エネルギーメータも入力(V,mA,mW),出力(V,mA,mW),蓄積ジュール(max100J)と、 ひと通りのデータを観測できる。配線も、LEGOのブロックをはめるだけ… なんて楽なんだ…
# 配線してトラブルの原因を考えるのも大切な実験の一部
# ではあるけど、まず興味…という点では、よくできている。
LEGO education のカリキュラムには、以下のように書いてある。 たしかにこのセットでなら、実践できそうだ…
- 科学(理科)
- エネルギー回収・蓄積・伝達の実験、力と速度の測定、摩擦効果の検討、単 純な機械の実験、科学的フェアテストの実施、方向性を持つ探究、予測と 測定、データの照合、結論への到達。
- 設計と技術
- 現実的ニーズ(要求)への合致を目指すモデル形態の設計・作成(組み立 て)・テスト・評価、適正な素材と技法の選択、エネルギーを変換・伝達する システムとサブシステムの検討、平面説明図による技術的理解の拡大、技 術要素を発見しての立体動作モデル作成、チームによる共同作業。
- 数学(算数)
- 科学・テクノロジーに関係する業種で使われる数学の体験、距離・時間・質 量を測定、速度、重量、効率の計算、予測値・計測値のグラフ作成、データ の表作成と解釈、比率の概算値算出。
グリーンシティ・チャレンジセット
これは借りてはいないけど、この説明用CD-ROMを拝見。 再利用可能なエネルギーを…というテーマが書いてあるけど、 具体的に発電とかをする訳ではない。

基本的に、LEGO MindStorms NXTのロボットの基礎演習を終えた人に、 具体的に自分で工夫させながらロボットを作らせることを目標にしているみたい。
ライントレースロボットのコース周辺に、風車やダムや家を配置し、 ソーラーパネルに見立てたブロックや、ゴミに見立てたブロック、 穴の開いたダムを塞ぐためのブロックを、 マインドストームのロボットで動かし、その目標の達成に応じてポイントが与えられる。
ブロックを引っ掛けるためのメカニックな部分や、 色のついたゴミのブロックを色(明度?)判定で選別し回収といった内容であり、 あくまでロボット制御のテーマをグリーンシティという視点でモデル化したもの。
うーむ、学生実験ネタにするには、高いかな…
マインドストームとエネルギーセット
教育用レゴマインドストームNXTとレゴエネルギーセットを組み合わせると、制御技術との組合せが演習できる。 風力発電では、NXTとエネルギーセットを組合せて、 発電エネルギーの記録をとることができる。風車の旋回角もNXTのモータで制御できる構造になっている。(さすがに風向のトラッキングは難しいよな…) ソーラートラッカーでは、旋回角と仰角を2つのモータで制御できる構造で、 最初に光源の方向を変えながらデータを記録し、 最終的には光源の動きに追従するプログラムを作成する。

これなら、電子材料?の実験+ロボット制御っぽい実験にできるかな。