MacOSX 10.3 X11

実は上記OpenGLの動画を撮るのにはちょっと苦労した。Linux上で動画を撮る方法を調べたものの、見つかったのはx11rec*1のみ。ところがこいつはRuby製で、俺はRuby持ってない。今からRubyを入れてもあまり使わなそうなので、気合いでx11recをPerlに移植した。が、レートが低すぎて滑らかに撮れない。まぁ、xwdで連続撮影したものをImageMagicでつなげているだけなので仕方がない。このx11recのPerl版は頃合いを見て公開する。

Linuxで撮るのは無理だと判断して、今度はMacに注目。MacOSXには標準でOpenGLやらGlutやらが入っているので、Mac上でコンパイル→実行できると思ったが失敗。確かにコンパイルできるが、実行するとなぜかBus errorが発生する。XCodeでプロジェクト立ち上げれば良いのだけど、しばらくProject Builder(旧XCode的な総合開発環境)から離れていたせいで、操作感がつかめない。

ここで別の方法を思いつく。そう、MacOSX 10.3には標準でX11 for MacOSXがついている。ならば、LinuxからX11転送してMacOSX上でグラフィックを表示して、そこで録画すれば良いのだ。というわけで、急いでX11 for MacOSXをインストールして、転送準備する。これに関してはあまりつまづくことは無い。あえてあげれば環境変数DISPLAYの値か。

これで見事Mac上でOpenGLの動画を見れるようになった。次にこれを録画するソフトを探してインストール。ソフトはSnapz Pro Xが良さそう(シェアウェア!)。そうこうしてやっと撮れた。

[Snapz Pro X] http://www.ambrosiasw.com/utilities/snapzprox/

ちなみにこのソフトにはお試し期間が30日ついているので、後ろめたさを感じずに使える。でも、このソフトはすごい気に入ったのでレジストするかもしれない。うん、まじで気に入った。

OpenGLで視点移動のサンプル作ってみた。

[4.8MB] http://members.jcom.home.ne.jp/j-klein/movies/opengl-movie.mov

かなり楽しい。これを作る労力はほとんど皆無なのに、出来上がりが”いかにも”って感じなのがよいね。


【追記】上記リンクを開くとなぜかNot Foundになることがあるが、リロードすればOK。

なにか良いポインティングデバイスのアイディアは無いものか

タイトルの通り。今、PIC(といっても16F84(A)のみ)関連の知識をため込んでいるのだけど、まだまともな組み込みの成果物がない。LEDを点滅させるぐらいのものならばともかく、男ならセンサとかを使いたいじゃない。ミーハーな俺としてはスパイ映画みたいに、通過するとブザーがなる赤外線センサなんてのもいいのだけど、普段の生活で必要ないし。

で、やっぱり考えるのは「マウスって使いづらい」ってこと。特にネットをうろうろしているときなんかは特に使いづらい。マウスってパソコンに対してきっちり正面向いてないと使いづらいでしょ。もっと、だらだらと使える入力デバイスが欲しいわけ。

トラックボール*1って使いやすいのかな?

重箱の隅をつつくようで悪いのだが…

図書館でいろいろと本を物色していたら、OpenGL入門なる本を見つけたのでなんとなく借りてきた。俺はグラフィックの"G"の字も知らないのだけど、暇つぶしに「本の中のサンプル動かして遊ぼう」なんて考えたのだけど、甘かった。

なんで、本の中の完成されたサンプルをデバッグせにゃいかんのよ。(無知ゆえとはいえ)しばらく考えこんだのはP.51にある次の関数

void mymouse(int x, int y, int button, int state)
{
	...(省略)
}

この通り書いたらまったく動かない。だってこの関数は

void (*mousefunc)(int button, int state, int x, int y);

なんだもん。型的にはあってるからコンパイル通るしさ。でも、「この本の内容は本当に正しいのか?」と疑いながら読んでると、逆に良く覚えるね。少し読んではネットで調べたり、別のページと比較したりするから印象に残るのかな?


余談だけど、OpenGLって凄いなぁ。さっきも書いた通りグラフィックなんて全然分からないし、3Dなんてもってのほかなんだけど、凄い簡単に3Dのカメラワークを操作出来たりするのね。格子状の立方体のまわりをカメラがぐるぐる回るサンプルを作ったときはちょっとした感動さえ感じたし。他の多くのプログラミングのジャンルと違ってバリバリ数学使うっぽいのも楽しい。

未知の世界 - 組み込みプログラミング

最近やねうらお氏(id:yaneurao)がFOMAをパソコンから操作するために、PICをつかった制御プログラムを作成したという話があった。それを毎日見ながら、「組み込みってもしかして面白いのか!?」なんて思い始めていたのだけど、今日我慢出来なくなって勉強しはじめてみた。

ネット上でキーワード「PIC」にかかるサイトを総当たり的に読んで、勢いで秋葉原にいってROMライタなるものを購入。なれない手つきでハンダこてを操り、 ROMライタを完成させるが、ここで重要なことに気付く。

ROMライタやPIC用のアセンブラが全部Windows用だ…。Windows持ってねぇ。

またもやネット上を捜しまわって、Linux用ROMライタ「akipic*1」、Linuxアセンブラ「gpasm*2」、Linux用PICシミュレータ「gpsim*3」を見つけて、すべてインストールした。ハッキリ言って、かなり時間かかった。

ともかく、無事シミュレータが動いて感動しているところ。ちょっと機会をみてLinuxでPICプログラミングする方法を書いてみるつもり。

っていうかgpsimってシミュレータ面白い。実際のブレッドボード(PICの絵)上で入出力を目視できるから、それこそROMライタとか無くてもソフトウェア上で組み込み気分が味わえる(あくまで、気分だけど)。

インタプリタを作った

また、遊びでインタプリタを作ってみた。文法はまるで英語の文章のような感じにしたかったんだけど、いまいち。なんとなくプログラムを公開してもいないのに、文法の解説してみる。

階乗をを求めるコードは以下の通り。

#!/home/jklein/dev/sproject/talkc/talkc

一番目の引数の階乗を出力する。
続きを読む

COINS

[COINS] http://www.coins-project.org/

これは凄いかも。まだ、詳しい仕様なんかは見てないけど、要は高級言語アーキテクチャに依存しない中間言語の開発だ。解説とかを読んでてドキドキしてくる。詳しくはリンク先の『Coinsコンパイラの流れ』をじっと見てもらえば分かると思うけど、簡単に解説してみる。

コンパイラのおおまかな処理の流れは次のような感じになる。

入力言語
↓ <字句解析・構文解析中間言語
↓ <最適化>
目的言語

例えば、C系のコンパイラだと構文解析を経て解析木を作り、最適化した後でマシン語アセンブラを出力するわけだ。この流れの中でCoinsが担当するのは中間言語の部分で、次のようになる。

入力言語
↓ <字句解析・構文解析
                                          • +
高水準共通中間表現
↓ <最適化> Coins部分
低水準共通中間表現
                                          • +
↓ 目的言語

あらかじめ言っておくが、この図はもの凄い簡略図だ。リンク先のドキュメントを読めば分かるけど、高水準・低水準共通中間表現からCコードを生成したり、最適化が高度だったり、低水準共通表現から有名なアーキテクチャへのコードは作成済みだったりと、かなりの完成度(に見える)。

だから、新言語をX86用に作りたいのであれば、やるべき事は『新言語 → 高水準共通言語』へのパーサを作るだけ。もちろん言語特有の最適化は必要だけど、本当に大部分はCoinsがやってくれるみたい。しかもこのパーサが出来れば、コンパイルするだけじゃなくてCへ変換したりもできるし、X86用のつもりが有名アーキテクチャすべてに自動的に対応する。

やばい、なんか興奮して書きすぎた。書きすぎついでに驚愕の事実を紹介。このCoinsの大部分(17万行)はJavaで出来てる。