2009/10/15

various Gravity

今や携帯やゲームのコントローラーで一般的になった加速度センサー。Android もそれに対応していて、Java を通じてハードウェアに加えた加速度の値を取り出すことができる。ただ、Android が載っている Linux の仕組み上、ハードウェアに直接 Java がアクセスできるはずもないので、C(++) のコードを経由してデバイスドライバにアクセスする。

----

ところで、Android で加速度センサーにアクセスする C(++)のコードを実装するには、必ず特定のヘッダを実装しなければならない。それが sensors.h だ。加速度センサーは今いる場所の重力加速度(※)を基準にした値がハードウェアから渡ってくることが多いので、上記の sensors.h にも いろいろな場所の重力の値が定義されている。それを以下に引用しておく。

/**
* Values returned by the accelerometer in various locations in the universe.
* all values are in SI units (m/s^2)
*/

#define GRAVITY_SUN (275.0f)
#define GRAVITY_MERCURY (3.70f)
#define GRAVITY_VENUS (8.87f)
#define GRAVITY_EARTH (9.80665f)
#define GRAVITY_MOON (1.6f)
#define GRAVITY_MARS (3.71f)
#define GRAVITY_JUPITER (23.12f)
#define GRAVITY_SATURN (8.96f)
#define GRAVITY_URANUS (8.69f)
#define GRAVITY_NEPTUNE (11.0f)
#define GRAVITY_PLUTO (0.6f)
#define GRAVITY_DEATH_STAR_I (0.000000353036145f)
#define GRAVITY_THE_ISLAND (4.815162342f)

こんなところに Android 持ってかねーYO! という値がたくさん定義されている。誰か DEATH STAR に Android を持っていった人、是非重力加速度の具合を体で感じ、俺に是非教えてください。

----

(※)地球の場合 9.8 m/s^2。物理でやったよね! 俺はスカーリ忘れてた

2009/10/13

incresing age

節目の日を迎えた。だからというわけではないけれども、Ethnaプロジェクトで自分がとろうとしているスタンスについてアクティブなメンテナに告げた。いろいろな意味ですっきりした。

いわゆる「自分探し」をプログラムを読みまくってやっているというのも、自分らしいと思う。現状維持ではしょうがない。プライベートが大きく変わる一年でもあるし、いろいろな意味で節目の一年にしたい。

2009/10/02

sed as grep replacement

デーモン化したプログラムのログを syslog に吐かせていて、そのログのみを抽出したいと考えた。だが、grep(1) もない、awk(1) もない。テキスト系のプログラムで役に立ちそうだったのは cat(1) と sed(1) だけであった ....

サーバやPC上のUNIXで作業をするときは上記のような環境は考えられないわけだが、組み込み環境ではフットプリント(ストレージの消費量)を抑えるためにそういうことが往々にしてある。要するに、sed を grep の代わりとして使いたいわけです ... と思ったとき5分くらい手間取ったのでメモしておく。

----

たとえば、search.txt から regex にマッチする行だけを出力したい場合は、以下のようにする。これは /regex/ という条件文を ! で否定し、d で「マッチしないものを削除する」ことにより、逆にマッチするものを出力するという変なことをしている。

cat search.txt | sed -e '/regex/!d'

正直、こんなことをするのは組み込み環境以外ないし、どうでもいいっちゃいいんだけどね(藁

2009/10/01

[memo] malloc, free(3)

http://www.linux.or.jp/JM/html/LDP_man-pages/man3/malloc.3.html

考えてみれば当たり前なんだけど、free(3) に渡すポインタは malloc(3) 等から返ってきたポインタ「そのもの」でなければならない。以下のコードは FreeBSD 6.4 Release だと実行時に「warning: modified (chunk-) pointer」という警告が出る。Linuxだとアボートする。



バッファに構造体の中身をコピーするようなコードを書いているときに、上記のような間違いを犯したことがあるので記録しておく。

vital work

http://www.amazon.co.jp/dp/4756116396
Programming is a marvellous, vital, challenging activity, and books on
programming should brim over with enthusiasm for it!

(プログラミングとは、素晴らしい、生き生きとした、挑戦的な行為であり、プログ
ラミングに関する書籍は、それへの熱狂で溢れかえっているべきなのだ!) (※)

同僚に貸していた「エキスパートCプログラミング - 知られざるCの深層」が手元に戻ってきたのでパラパラめくってたんだけど、何度読んでもいい本だ。内容もさることながら、訳が素晴らしい。もし技術文書の翻訳を仕事にする機会がまたあるなら、こんな仕事をしてみたいと思う。

(※) P19. Preface より引用