3/26メモ

heroku

わかりやすい。

heroku 上で Rails アプリが動くところまでざっと見てみました。てか、heroku の前にまともに Rails の勉強しなきゃ。

ほほう。

vagrant

上の heroku の動画で vagrant を使っていて、docker や virtualbox はコマンドラインからガリガリ使っていたけど、vagrant は名前くらいしか知らなかったのでちょっとメモしておく。

うんうん、virtualbox のイメージも空から降ってくるべきですよね。

swig

sirenmruby から MRI に移植してるんだけど、どうせなら SWIG で OpenCASCADE ラッパーな ruby-occt を作ってゴニョゴニョすべきかなと思いつつ

を見てたんだけど、PythonOCC では大量の SWIG 用ラッパーファイルで頑張ってらっしゃる。*.i だけなら流用できるのかなー、でも python なんちゃらって文字があるぞ。めんどいなあ…。そもそも siren は OCCT の無駄に多いクラスや機能を適度にまとめて使えることが利点だから、フル機能の OCCT を使いたいんだったら PythonOCC やネイティブな OpenCASCADE を使えばいいと思ってたりして悩みどころです。

Kinect 360 買っちゃった

前々回と前回の OpenCV まわりに関連して、とうとう Kinect を購入しました。Kinect for Windows じゃなく 360 でもとりあえずは研究に使えるらしいし、ドライバや SDK が厳格そうな Windows で開発するわけでもない、360なら価格も中古で低価格程度ということで Amazon で5000円の中古をポチ。ヤフオクで2000円弱で出品されてるんですが、動作保証と電源ケーブル同梱版、手続きの早さで割高だけど Amazon のを購入しました。

月曜日(明日)届く予定です。楽しみ。Kinect の到着を待つ間、Python で書いていた(というかコピペしてた)ステレオマッチング処理を Ruby で書き直そうと思ってドキュメントを見てたら ruby-opencv には StereoSGBM()ない模様

こんな時に颯爽と実装してプルリクをぶん投げられる人になりたい…。

デジタルデバイス処分

PS3、楽天 KOBO、NEC LifeTouch NOTE、Lavie Tab W 708 など使ってないデバイスを処分中。ハンディカムや液タブも売り出そうか悩み中です。

OpenCASCADE 6.9.0 を LMDE でビルド

先日、自宅サーバの Debian GNU/Linux Jessie 32bit 版で OpenCASCADE 6.9.0sirenビルドしました

自宅サーバは、SSH で外部からアクセスして開発ができるので便利である一方、オンボード Atom 搭載の省電力サーバなのでコンパイルにはもの凄く時間がかかります。そこで、Intel Core i7 を搭載した普段使い用のラップトップでもビルドしようと思います。

ラップトップは、LMDE(Linux Mint Debian Edition) の無印、あえて言うなら version 1 です。先日、LMDE 2 がリリースされましたが環境を壊すかもしれないのが怖くてまだ移行していません。なお、こちらは 64 bit です。

OCCT 6.8.0 ベースの siren をビルドして開発に使っていたので、こちらも難なくビルドできると思いきや、VTK を指定しないと Visualization 以下のモジュールが上手くビルドすることができませんでした。

configure の出力では、VTK は optional 扱いになっていたのですが、必須なのかなあ…?たしかに先日の Debian の記事でも明示的に VTK を指定していました。なお、VTK は自分の記憶が正しければ 6.8.0 の時点で既に OCCT に利用されていたようですが、その時は確実に optional だったはずです。(VTK をインストールしなくても Visualization 以下のビルドが通っていました)

ないなら入れてしまえと apt-cache search vtk するも、バージョン 5.8 しか公式リポジトリにはありませんでした。試しに libvtk5.8, libvtk5-dev を install して OCCT 6.9.0 をビルドしてみても、やはりビルドが通りません。 なお、Debian の Jessie には公式リポジトリに VTK 6.1 があったため、APT 経由で入れたらビルドが通りました。

ということで、ソースコードを取得して自分でビルドしましょう。VTK の公式サイトのダウンロードページから、対象となる 6.1 の tar ボールをダウンロードします。

cd /tmp
wget http://www.vtk.org/files/release/6.1/VTK-6.1.0.tar.gz
tar zxvf VTK-6.1.0.tar.gz
cd VTK-6.1.0

README.html にビルド方法が載っているので、それに従ってビルドします。

cmake.
make

README.html では cmake ではなく curses 版の cmake である ccmake と書いてありますが、cmake でも通ります。

ビルドにはもちろん CMake が必要です。また、依存しているライブラリもいくつかあると思いますが、幸運なことに自分の環境では追加ライブラリを指定することなく全てのビルドが成功しました。VTK を Debian で APT 経由からインストールした際、200 MB 前後の依存ライブラリがどっと降ってきたので心配でした。ヨカッタ。

例に漏れず、インストールは次のようにします。

sudo make install

インストールによって、ヘッダファイルは /usr/local/include/vtk-6.1 以下に、ライブラリファイルは /usr/local/lib 以下に設置されました。インストールパスは cmake オプションで指定できるはずです。

さて、これで OCCT 6.9.0 のビルド環境は整ったはずです。前回の手順どおりに、一気にやっちゃいます。

cd /tmp
wget http://files.opencascade.com/OCCT/OCC_6.9.0_release/opencascade-6.9.0.tgz
tar zxvf opencascade-6.9.0.tgz
cd opencascade-6.9.0/
./build_configure
./configure -prefix=/opt/occ690 \
-with-vtk-include=/usr/local/include/vtk-6.1 \
-with-vtk-library=/usr/local/lib

configure の出力で Visualization 以下のパッケージもすべて「Yes」になっていることを確認し、

make -j8 install

で、ビルド&インストール。 ビルド時間を計測すると次のとおりになりました。

real  17m11.411s
user  97m46.908s
sys   5m26.720s

前回、3時間以上かかっていたビルドは17分で終わりました。これは強い。

6.9.0 を用いて siren をビルドし直すとこちらでもちゃんと動いているようです。ひとまず安心です。

mruby の public/private について

最近ちょっとバタバタしていてあまりプライベートに時間を割けませんでしたが、連休に台風接近が重なった事もあり、連休初日だけ出社して残りの二日はお休みを頂きました。ということで、メモ変わりにここのところの事を書き止めておきます。

mruby の public/private について

mrubyではpublic/privateキーワードを言語仕様上で制約しているらしいです。この辺の実装を調べていた時に、Matzさんご本人から教えていただきました。

自分のつぶやきにもあるように、mruby-sirenでShapeクラスのインスタンスをスクリプトサイドから作らせたくなかったので、initializeをprivateにしようとしたんですが、なかなか見付からず…

よくよく調べてみると、既にそういう話が出てきていました。

there a way to create private methods? #1357

機能制限されている詳細な経緯は分からないけれど、コンパクトで軽量なmrubyの方針においてpublic/privateは利用者側の運用に任せても特に差し支えない機能のはずだから入っていないのかもしれません。(間違ってたらご指摘をお願いします…!)

ちなみにmruby-sirenのShapeクラスは、initializeをスクリプト側から呼んだら例外を吐くようにしています。

mirb - Embeddable Interactive Ruby Shell
> s = Shape.new
(mirb):1: private method `new' called for Shape:Class (NoMethodError)
> 

実装はそのままこんな感じです。

siren のロゴを作ってみました

私個人がオープンソースで開発をしている三次元ベースの簡易 CAD システム「siren」のロゴを作成してみました。

今、自分が勤めている会社は海に関する仕事がメインで、マシンのホスト名やシステムの開発コード名に、海に関する用語をつけるのが慣例となっています。この簡易三次元 CAD は、会社の業務としてではなく、あくまでも個人的に開発しているものなんですが、その慣例に倣うかたちで「siren(セイレーン)」と名付けました。セイレーンは、ギリシャ神話に登場する海の怪物のひとつで、岩礁から美しい歌声で歌い、その声で船員たちを惑わし、航海中の船を遭難させたり難破させたりする怪物です。上半身は女性、下半身は鳥という奇妙な形をしているそうで、時代が下るにつれ、人魚の姿をしているとされたようです。そして、大きな音を出すサイレンはこのセイレーンが語源らしいです。

siren_logo_simple

ロゴについて

セイレーンとサイレンを組み合わせて描いてみました。途中から気付いたんですが、鮮かな色の影絵調+黒い文字にアンダーラインってものすごくFFのロゴっぽいですね。もうちょっと動的な水飛沫みたいなのを追加しようかとも思ったのですが、さらに天野喜孝風になるとアレなのでやめておきました。ちなみに、セイレーンのロゴについて調べているとスターバックスのマークもセイレーンがモデルらしいです。

当初はセイレーンだけだったんですが、siren の開発を手伝ってくれている弟に見せたところ「サイレンにしようぜ」といっていたので、試しにサイレンを立ててみたら、「セイレーンがサイレンをつかっている」という図らずしも良い具合なミスマッチ感が生まれました。

フォントなどのライセンスまわりがクリアになったら、そのうちクリエイティブコモンにしようと思っています。まだソースデータは公開していません。

読みについて

公式では siren を「セイレーン」と呼び、カタカナ表記もそうするように統一しています。ただし、読み(発音)については自由してもらって構いません、というのが公式のスタンスです。開発サイドではもっぱら「サイレン」と呼んでいます。日常的にセイレーンと呼ぶのは、自分で名付けておきながら、なんだか恥かしい感じがするのと、呼びやすさの意味からです。また、「シレン」と呼ぶ人もいました。通じさえすればいいので、どれも間違いではありません。 今のところユーザーはかなり少ないと思うし、あまり気にする人はいないかなー。

駆逐艦「島風」のローポリモデル作成

仕事の絡みもあって、Maya で作成した三次元モデルをゲームエンジン「Unity」に取り込む検証をしようと思いました。 手持ちの Maya は 2009 と、ちょっと古いんですが FBX 形式の読み書きもプラグインで対応しているようでひとまず安心。 Battle Station; Paciffic のような艦隊戦デモでも作れないものかと、例のごとく駆逐艦のローポリモデルを作ろうと思いました。

Maya 自体久々だったからキーバインドやマウス操作にも迷いつつ…。自作の簡易 3D CAD の siren で、スクリプトの動作検証用に作っていた駆逐艦「島風」の船型を流用してみました。

  1. siren で島風スクリプト(Ruby)を実行。
  2. 生成されたモデルは自由曲面で構成されたソリッドモデルだが、STL で一旦ファイルに保存。
  3. Maya で STL の船型を読み込み。
  4. 艦橋や主砲などを置いていき、島風完成!
  5. 完成した島風を FBX で出力して Unity に取り込み。

といった手順です。結果、上手くいきました。

自分が作った CAD で生成されたモデルをゲームエンジンの中で動かすのは小気味良くて楽しいですね。 モデル自体も、かなりやっつけ感がしますが、これはこれで楽しいからOKかな。

島風 大きい画像