ROSのインストール

まずはROSがサポートしているubuntu 11.04をインストールしておく。(省略)

http://www.ros.org/wiki/diamondback/Installation/Ubuntu

上記ページに従ってROSのインストールを進める。

1.インストール

1-1. ubuntuのリポジトリを設定する。

 特に何もしなかった。

1-2. sources.listを編集する。

端末を起動して以下を実行すればよい。

sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu natty main" > /etc/apt/sources.list.d/ros-latest.list'

1-3. キーを設定する。

以下を実行する。

wget http://packages.ros.org/ros.key -O - | sudo apt-key add -

1-4. インストール

あらかじめ、updateしておく。

sudo apt-get update

とりあえず「Desktop-Full Install」をインストールしてみる。以下を実行する。

sudo apt-get install ros-diamondback-desktop-full

1-5. 環境設定

以下を実行して環境設定を行う。

echo "source /opt/ros/diamondback/setup.bash" >> ~/.bashrc
. ~/.bashrc

とりあえず以上まですんなり進んだ。

MSI U135でubuntuがシャットダウンできない

MSI U135にubuntu 11.04をインストールしてみた。

基本的に問題がないと思ったところでシャットダウンしてみたら、背景画面が表示された状態でハングしてしまう。リブートも同様。

ググってみたら解決方法は簡単だった。

/etc/modprobe.d/blacklist.conf

rootになって上記のファイルをviで開き、以下の1行を最後に加えるというもの。

blacklist rt2800pci

どうやらwifiドライバが悪さをするようなので、読み込まないようにすればいいらしい。

元ネタはこちら。MSIのノートブックに共通する問題らしい。

http://askubuntu.com/questions/21749/msi-u130-freezes-on-shutdown

MacPortsのselfupdate失敗

久しぶりにselfupdateしたら失敗した。新しいバージョンになってイロイロ変わったらしい。

$ sudo port selfupdate
port registry doesn't exist at "/opt/local/var/macports/registry/registry.db" and couldn't write to this location
... 省略 ...

http://logrepo.blogspot.com/2010/08/macports-18x-19x.html

上のサイトのように、/opt/local/etc/macports/ のmacports.conf.defaultをmacports.confに上書きして、sudo port installedを実行したらデータベースが作成された。

余談だが、「はてな記法」って何年使ってもしっくりこないな。

PharoでのSound

ダウンロードした状態のPharoでは音が鳴らない。

SettingsBrowserのAppearanceにSoundがあるが、オンにできない。

Soundを有効にするには、ワークスペースで以下の式を実行する必要がある。

AbstractSoundSystem soundEnabled: true.

BaseSoundSystem soundEnabled: true.

これでバッハのフーガを演奏できるようになる。

AbstractSound stereoBachFugue play.

SettingsBrowserのSoundもオンになるが、画面上でオフにすることはできないようだ。どうなっているの?

まあ、PharoではSoundに注意が払われていないようなので仕方ないか。

追記:goonshさんの指摘によりSound有効化の式を修正しました。

Pharoによるプログラミング入門

3年生ゼミのプログラミング入門では、言語環境としてPharoを採用した。今まで個人学習のためにSmalltalk/80系の言語を推奨したことはあったけど、全体で採用したのは始めての試みである。

私がメインで開発に使用している言語ながら、今まで入門として使ったことがなかったのは、率直に言ってプログラミングの経験が全くない初心者に教える自信がなかったから。

その考えが変わったのはいろいろあるのだけれど、大きな理由の一つはちょうど良い題材が見つかったからである。「がまぐ」は土本さんが編集されている中高生向けのオンラインゲーム雑誌であるが、オッサンホイホイの異名通り私もすっかり虜になって、これをネタとしてみたいという思いが強くなった。

 がまぐ:http://sites.google.com/site/gamagreader/

Morphicならば元のJava実装よりも、かなりコンパクトに作れるだろうし、初心者でも十分把握できるレベルになるのではないかと思った。SqueakでなくPharoを選んだ理由は、単に個人的に興味があったのと、パッケージングがシンプルだということ。

授業の組み立てとしては、最初にProfStefで簡単な入門を行った後、「がまぐ 2011/2」のJackPotを例にPharo環境の説明を行い、後半は「ブロック崩し」「ピンポン」「弾幕ゲシュタルト(がまぐより)」から1つを選んでもらい、設計から作り上げるというもの。

前半のJackPotでは、オリジナルソースのPharo版のメソッドを一つ一つ説明しながら、役割や文法について理解してもらい、プレイヤーの高速化や宝物入手時の動作など「がまぐ」と同じストーリーで進めていった。

JackPotでは4種類のオブジェクトが登場する。「自分」「敵」「宝物」「ゲーム本体」である。MVCのようなすっきりとした設計ではなく、オブジェクトとその表現が直感的につながるよう、各々Morphとして実装していった。

後半で学生に実装済みのゲームを見せたところ、圧倒的に「弾幕ゲシュタルト」が人気だったので、設計から取りかかることにした。設計といってもゲームを見ながらオブジェクトを見いだしてCRCカードを作成するというもの。二人一組でゲームを文章化し、その文章をもとにオブジェクトや属性、振る舞いを明確にしていく。それほど厳密な定義ではなく、作成途中で方向性を見失わない程度のものとした。

最初にJackPotからキーボード処理など流用できる部分をコピーさせ、その後一つずつオブジェクトを仕上げていった。1台のPCを二人が交互に使うように、ペアプログラミングもさせてみた。10名の受講者がいたので5組のチームに分けた。

かなり単純化して提示したものの、全くの初心者である学生にとっては、難易度の高い学習体験だったことは間違いない。受講者中の1名は興味を持った4年生だったが「昨年のゼミよりずっと難しい」とコメントしていた。

それでも5組中の1組はほぼ完全に理解し、2組は自力である程度作れるようになった。残りの2組はサポートがあれば何とかできそうといったところ。レベルの差こそあれ、プログラムと動作との関係をきちんと理解した上で、きちんと問題解決しているようだった。当初の見込みよりはかなり高いレベルに達したと思うし、オブジェクト指向プログラミングの基本的な考え方は身に付いたのではないかと思う。

もちろん、教えた範囲はかなり限定している。基本的な考え方としては、オブジェクトとメッセージパッシング中心で行い、クラス階層や継承なども教えていない。キーワードメッセージもできるだけ引数1つになるように誘導していった。題材が単純で、かつ面白いということも良い方向に作用したようである。

8月3日からゼミ合宿が始まる。メインは4年生の卒研発表なのだが、3年生からも2組の発表がある。完全に理解した組と要サポートの組である。この両者の発表を通じて、前期の成果がどの程度なのかわかるだろう。とても楽しみにしている。

TeX Liveのインストール

どうもPharo By Exampleを生成するのに、今までのpTeXでは駄目そうなので、TeX Liveをインストールすることにした。

インストールはMacPortsより行い、以下を参考にした。

http://macwiki.sourceforge.jp/wiki/index.php/TeX_Live

インストールしたパッケージは以下の通り

tex-live tex-latex-extra texlive-bibtex-extra

MacでGainerMiniを使う(2)

シリアル通信でGainerMiniを使ってみた。

利用したソフトはJerminalである。

http://www.bsddiary.net/jerm/

ターミナルから、jerm -b 38400 /dev/cu.usbmodem1a21(usbmodelの後は環境による)でJerminalを起動する。

Q*?*を入力すると、プロンプト(Q*)に続いてバージョン番号等が得られる。

Q*KONFIGURATION_1*でコンフィグレーション1に切り替えることができる。

詳しいプロトコルは以下を参照した。

http://gainer.svn.sourceforge.net/viewvc/gainer/trunk/gainer/firmware/io-module_protocol.xls?view=log