DATE : 2007/04/13 (Fri)
今日の駅前はやけににぎやかでした。
まず、政治家が車の上でがなり立てていました。どうも、国民投票法案が衆議院本会議で可決したことを受けての演説のようでした。
少し進むと、スーツを着こなした宣教師に話しかけられました。あやしい片言の日本語で、2、3の質問を受けました。
(;^ω^)キリスト系のようですが、うさんくささ全開でした。
さらに進むと、怪しい団体が演説の準備を始めていました。ときどき駅前での演説を見かけるのですが、今回はやはり国民投票法案関連のことのようです。
(;^ω^)春になるといろいろと活発ですね……。
DATE : 2007/04/11 (Wed)
ラーメンが好きなので、今日も食堂でラーメンを注文しました。
しかし、席について箸で麺を混ぜようとしたところで妙な負荷を手に感じました。
(;゚Д゚)麺がしなびてくっついています。
確か、前に同じラーメンを食べた時は、もっと麺に張りがあってつやつやしていたはずです。ところが、箸にのった麺は、張りがなければ輝きもありません。
(;・∀・)いや、もしかするとこれこそがスープに合った本来の麺なのかもしれない。
スープはよく絡んでいるようだったので、そう思いながら麺を口に運びました。
(;´Д`)……
麺が口の中ででろでろにとろけて、小麦本来の味わいが口の中全体に蔓延していきました。
とても食べられたものではありませんでしたorz 噛むことすら、本能が拒否反応を示していました。
その日は少々時間に追われていたことと、味わいのおかげで文句を言う元気すら出ませんでした。なので、結局麺以外の具とスープを平らげるに留まりました。
(;´Д`)水で作ったカップラーメンを食べたこともありますが、まだこちらの方がおいしかったです……。
DATE : 2007/04/09 (Mon)
これまで LMS (Lego Mindstorms Simulator) 上で動作していたものを実機上で動作させてみました。
LMS 上では Java を使ってプログラムを組んでいたのですが、実機向けに NQC に移植しました。
( ^ω^)さすがにマインドストーム専用だけあって、NQC は組みやすいです。
やはり、LMS と実機とではかなり動作が違います。例えば、LMS がマインドストームをシミュレートする速度は実機の速度と同じではありませんし、それが一定に保たれる保証はありません。
(;^ω^)もっと高性能なマシン上でシミュレートすれば話は別かもしれませんが。
なので、経過時間に依存する処理は、LMS と実機とではその経過時間の閾値が異なってきます。
また、光センサーの取得する明るさも LMS と実機とでは異なります。実機では、床画像のピクセル値の明るさが光センサーの取得する明るさとなります。実機の場合、完全に白い紙や黒い部分、光源は存在しないので、光センサーの取得する値は実際に床へかざして確かめる必要があります。
さらに、床が黒い部分から白い部分に光センサーが移った場合、取得する明るさが一瞬のうちに暗い値から明るい値へと切り替わるわけではありません。連続的に、暗い値→少し明るい値→明るい値へと変化します。変化する速度は瞬間的なものですが、光センサーから明るさを取得するタイミングによっては中途半端な値が出てくることもあります。
今回、白い紙の上で黒い線をライントレースした後、線上にある灰色の領域に触れると90°回転するという動作を実機上で行いました。すると、ライントレースの最中に回転が始まってしまうという事態が頻発しました。これは、ちょうど光センサーの変わり目の値を読んでしまったことで起きた現象でした。
( ^ω^)結局は、黒い線を灰色に、回転するための領域を黒とすることで、ライントレース中に灰色を検出しないようにしました。
(;^ω^)これはなかなか、実機でないと気付かない現象ですね。
DATE : 2007/04/07 (Sat)
「オブジェクト指向プログラミング入門第2版(新装版)」(Timothy A.Budd 著、羽部正義訳、ピアソンエデュケーション発行、2002年)を読みました。
(;^ω^)原著は1997年発行と、情報関係としては古い部類に入る本です。
オブジェクト指向の大まかなイメージから始まり、各言語でのオブジェクト指向の実現方法、クラス間の依存性、フレームワーク、デザインパターン、実装方法へと話がつながっていきます。
ただ、古いせいかオブジェクトコンポジションにはあまり触れられていませんでした。もっとも、継承の解説でサブクラスとサブタイプ(置換原則の成り立つサブクラス)が区別されていたり、委任(委譲)のみで継承を再現できることが挙げられているため、サブクラスについては継承よりもオブジェクトコンポジションを使うべきということが導けるようにはなっています。
ちなみに、STL の例から、オブジェクト指向は必ずしも万能ではないと述べられている点は非常に興味深い点です。結局のところ、使いどころが肝心ということなのでしょう。ソフトウェアの複雑さは、各々の処理があちこちに依存することから生まれてきます。その複雑さをうまくオブジェクトに封じ込めることで依存関係を少なくしようというのがオブジェクト指向の一目的です。すると、オブジェクトに封じ込める必要のない部分(オブジェクトになんらかの処理を加えるだけの処理など)までオブジェクトに封じ込めてしまうと、逆にコードが複雑になってしまいます(例えば、再利用という観点から見ると、要素のソートを行うアルゴリズムは、オブジェクトの中に封じ込めるよりも独立した関数とした方が再利用できます。ソートを行う操作をオブジェクトに用意することはあっても、アルゴリズムは独立させたほうが便利というわけです)
オブジェクト指向そのものについて語られているため、オブジェクト指向に関する幅広い知識が得られたように思います。古いとはいえ、フレームワークやデザインパターンは今や当たり前の技術になりました。むしろ、こういった当たり前の部分をしっかり解説してくれる本は貴重とも言えます。
(;^ω^)ところで、奥付にもあるのですが、原著は2002年の時点で第3版が出ているんですよね。もうそろそろ邦訳版が出てもおかしくはないと思うのですが……。
(;^ω^)邦訳3版がでたら原著は4版が出た……ということにはならないように祈りたいと思います。
DATE : 2007/04/05 (Thu)
LMS のプロジェクト設定ファイルの中身は、次のようになっています。
プロジェクト全体は、Project 要素として記述します。
<?xml version="1.0" encoding="UTF-8"?> <Project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../Config/Project/Project.xsd"> <Scene>scenario/example/scene.xml</Scene> <RCX>scenario/example/rcx.xml</RCX> </Project>
ここで重要な点は、プロジェクト設定ファイル内の相対パスは LMS のインストールディレクトリが基点となるということです(LMS 1.41時点)。つまり、パスは絶対パスで記述するか、LMS のインストールディレクトリからの相対パスで記述しなければなりません。
例えば、Project 要素の xsi:noNamespaceSchemaLocation 属性には「../../Config/Project/Project.xsd」というパスが設定されています。これは、「<LMS のインストールディレクトリ>/Config/Project/Project.xsd」を表します。
そのため、プロジェクトを格納するディレクトリの場所には注意が必要です。特に、ディレクトリを移動した場合はパスの書き換えが必要になる場合もあります。上の例では、LMS のインストールディレクトリの直下に scenario ディレクトリを作成して、その中に example ディレクトリを作っています。
上記の注意を踏まえた上で、プロジェクト設定ファイルには、以下の設定を記述します。
- 場面設定ファイルのパス(Scene 要素)
- 仮想 RCX ロボット設定ファイルのパス(RCX 要素)
なお、次のように RCX 要素を追加することで、複数の仮想 RCX ロボットをシミュレートすることもできます。
<RCX>scenario/example/rcx.xml</RCX> <RCX>scenario/example/rcx.xml</RCX> <RCX>scenario/example/rcx.xml</RCX>