Docker Machineの環境変数を少し楽に設定する

少し前にローカルのDocker実行環境をboot2dockerからDocker Machineに乗り換えました。 The 'boot2docker' command line interface is officially deprecated. とか言われたら勿論即乗り換えますよね(あぶない)。

https://docs.docker.com/machine/

Docker Machineではdockerコマンドの対象となるDockerホストを指定するために、シェルの環境変数eval "$(docker-machine env MACHINE_NAME)"で設定することになっています。 シンプルな1行とはいえ入力するとなると結構面倒なので、雑にですがシェル関数を作りました。 docker-env MACHINE_NAMEと入力するだけで環境変数を設定できて便利です。

みんな考えることは同じらしく、後になって調べてみると同様のコードがたくさん見つかったのでした。

MattermostをElectronでデスクトップアプリ化した

最近は面白いと思ったものを気が向いた時になんとなく触る、ということが多いです。

最近MattermostというWebベースのチャットアプリを使い始めました。 (Dockerで公開されているというのは本当に便利ですね。ちょっと試してみるためだけにサーバーの環境を触らなくて済むし、自力で環境を整える手間が省けます)

www.moongift.jp

Webアプリの常としてブラウザを開いていないと使えないので、うっかりウィンドウを閉じてしまわないよう意外に気を使います。 Chromeでタスクバーにショートカットを作れば見た目上は別アプリにできるんですが、Macではこの方法が使えないので地味に不便でした。

ElectronでChatworkをデスクトップアプリ化 (Webview + badge) - Qiitaをたまたま見て「これだ」と思ったのでElectronを使ってMattermostのデスクトップアプリを作ってみました。

github.com

続きを読む

wxWidgetsからmrpt::guiを使う

RawlogViewerのソースとwxGLCanvasの説明を見ていたら、mrpt::guiを使ってMRPTの描画方法でGUI表示ができました。

CMyGLCanvasBaseがwxGLCanvasを継承しているので、単にwxAppを使って実装してやればよいようです。

f:id:yuya-oc:20160206211854p:plain

もっとmrpt::guiやmrpt::openglの中身を覗いていけば、直接OpenGLを触っているところがわかるような気もするけれど面倒なのでやらない。

MRPT in Mac OS X

丸1年何も書かないのも如何なものかと思う次第なわけでして。

Mac OS XでMRPTをビルドする

最近、Mac(OS X 10.9.2 + clang)でMRPTのビルドに成功しました。バージョンアップが進み、以前に比べてMacでもビルドしやすくなっているようです。推奨の依存ライブラリをHomebrewで入れ、主にヘッダのインクルード絡みの問題を排除していったらビルドできてしまいました。(とは言っても、少なくとも名前なしセマフォの実装を直さないといけませんし、mrpt::hwdriversの一部クラスはビルドできないのですが)

f:id:yuya-oc:20160206212106p:plain

この記事が下書きの間にパッチのプルリクをmasterにマージしてもらえました。1.1.1からはcmakeオプションを幾つかOFFにするだけでビルドできるようになると思われます。やった!

$ cmake .. -DBUILD_ARIA=OFF -DBUILD_XSENS_MT3=OFF -DBUILD_XSENS_MT4=OFF
続きを読む

関西支部総会・勉強会

2/23のマイクロマウス関西支部総会に誘われたので参加してきました。

その中の勉強会で一つ発表をする機会をいただきましたので、「気軽に便利なソフトウェア開発ツールを使っていこう」という流れで、バージョン管理システムのGitの取っ掛かりについての話をしてました。趣味の話のためのプレゼンというのもなかなか無い機会で、大変楽しむことができました。

試しにSlideShareなんぞ使ってみちゃったり。スライドの個人情報部分は少し削ってます。ぶっちゃけ隠したところでバレバレですが。

具体的な使い方までは口頭とスライドでは多分伝えられないだろう、ということで後半のコマンド解説はものすごくざっくりした作りになってます。コマンドの詳しい説明は各種Webサイトや書籍をご覧ください。

続きを読む

Google Testを使ってみる

何もしてないというわけではないんですよ、一応は...

Google C++ Testing Framework

GTest (Google C++ Testing Framework)というライブラリがあります。

これは何かと言うと、名前の通りC++のテストをするためのフレームワークで、テストを割ときれい・簡単に実装することができます。

以前から存在は知っていたのですが、唐突に気が向いたので使ってみることにしました。

オレオレなライブラリの検証とかに使えるんじゃないですかね。

続きを読む

mrpt::poses::CPose2Dのメモ

MRPTには2次元/3次元空間での姿勢を扱うのに便利なCPose2D/CPose3Dクラスがあるのですが、これの取り扱いをずっと勘違いしていて嵌ってしまったのでメモ。

相対の姿勢移動と移動後の姿勢から元の姿勢を求める

姿勢Aの状態から相対的な姿勢Bだけ移動した姿勢Cは、MRPTでは次のように書きます。

C = A + B

逆にCとBから元々の姿勢Aを求めたい場合、次のようにします。

A = C + (-B)

A = C - Bではダメです。計算結果が変わってしまいます。

実装の実態

-Bと+(-B)で結果が変わるのはかなり気持ち悪いです。なぜこのようになるか調べてみました。チュートリアルを読んでみると、これはA+Bが同時変換行列の掛け算で実装されていることに起因するようです。

それぞれの姿勢を同時変換行列A,B,Cで表した場合

C = A + B ⇔C = AB

となります。また、この式とB = C - Aという実装の定義から

B = inv(A)・C ⇔ B = C - A

となります。A = C・inv(B)ですから、A = C - Bではダメだということがわかります。そこでAを求めるために-B⇔inv(B)を利用して、

A = C + (-B)

と記述する必要が出てきてしまうのです。

同次変換だと知ってしまえば理解できるのですが、記述一つで結果が変わってしまうのはバグを生みやすいので注意が必要だと感じました。

もっと綺麗な方法を知ってる人がいたら教えてください。