木曜日, 8月 27, 2009

PythonでNotifyOSD

眠いので簡単に。後で追記するかも。

角ウサギからUbuntuの通知欄が格好良くなったのだけど、それをPythonから使うための簡単なコード。
import pynotify

pynotify.init("notify-example")
n = pynotify.Notification(
"notify-example",
"Hello, NotifyOSD",
"notification-message-IM")
n.show()

日曜日, 8月 02, 2009

UbuntuでWiiリモコンアプリ開発

ちょっと前からUbuntuでWiiリモコンを使ったアプリケーションを作る方法を調べていて、基本的な事がやっと分かったのでメモ。
事後的に書いているので、足りないところがあるかも。

用意するもの


Ubuntuの入ったパソコン(バージョンは9.04を使っています)
Wiiリモコン
センサーバー(自作してもいいけど)

インストール


まずは何はなくとも関連するライブラリのインストール。
cwiidというモジュールと、それのpythonバインドを使います。今回Pythonは2.6でやりました。3.0で出来るかは未調査です。
apt-get install python-cwiid

これで基本的なところは入るはず。
WiiリモコンとUbuntuの疎通確認にはwmguiが便利。
apt-get install wmgui

これについては説明を省きます。

基本のコード



import cwiid
import time

#Wiimoteクラスをインスタンス化する
#press 1 + 2 button
wiimote = cwiid.Wiimote()

#レポートモードを設定
wiimote.rpt_mode = cwiid.RPT_ACC

#こういう指定もできる
#wiimote.rpt_mode = cwiid.RPT_BTN | cwiid.RPT_ACC

#レポートモード一覧
#cwiid.RPT_ACC
#cwiid.RPT_CLASSIC
#cwiid.RPT_IR
#cwiid.RPT_STATUS
#cwiid.RPT_BTN
#cwiid.RPT_EXT
#cwiid.RPT_NUNCHUK

#そして状態取得
while True:
print wiimote.state
time.sleep(1)


基本のコード解説


importは見ての通り。timeはウェイトを仕込むためなので必須ではないです。念のため。
注意すべきはwiimote = cwiid.Wiimote()のところ。このWiimoteのインスタンス化のタイミングで、Wiiリモコンの1ボタンと2ボタンを同時押ししないと、インスタンス化してくれず、RuntimeErrorが投げられてしまう。
これではちょっと不便なので回避方法が無いかは調べているところ。

無事インスタンス化されたら、次は状態取得。wiimoteインスタンスのrpt_modeというフィールドに、WiiMote.RPT_で始まるフラグを入れると、それに応じた値がwiimote.stateに入るようになります。このフラグは論理和で複数取得が可能なので、ボタン状態と傾きの2つが知りたかったら、wiimote.rpt_mode = cwiid.RPT_BTN | cwiid.RPT_ACCとやればOK。
どこを指しているかを知るにはRPT_IRを使います。この時、センサーバーかその代わりが無いと、何の値も取得できません。

ここから先は、Cwiidのサイトとかを参考にして下さい。とはいえ、Cwiidのサイトは分かり辛いのですが。
今回最も、役に立ったのは、このページ(リンク切れ中 2009/10/27時点)です。言葉は分からないけど、画像とサンプルコードのおかげで、どうすればいいのか非常に分かりやすいです。
というか、上に書いたことのほとんどは、このページの前部分の要約みたいなものだったりします。
後ろの方には、キャリブレーションのやり方も出ているので参考にどうぞ。
(cwiidのサイトにもキャリブレーションのやり方は書いてあります)



雑談

昨日、本屋に行ったら、WiiRemoteプログラミングという本が出ていたのだけど、

内容はWindowsでの開発だったので、残念ながら私の役には立ちそうになかった。センサーバーの自作とかも載っていたけど、そのために1冊買うのはちょっとなあ。将来買うかもしれないけど、少なくとも今はそういう本があることだけ覚えておくことにしよう。

サマーウォーズ見てきた


サマーウォーズ見てきました。

何書いてもネタバレになるので、公式サイトにある情報だけで簡単に。

「デジモンアドベンチャー ぼくらのウォーゲーム」が好きな人は、確実にお勧め。
デジタルワールド(ネット世界)での危機が、現実の危機へと繋がっていくという基本的な部分は同じだけど、ウォーゲームでの演出が、サマーウォーズでどう変わっているのか。子供たちだけの戦争から、親戚一同による戦争になることで、物語がどう変化するのかとか、いろいろな見方が楽しめます。

もう一つ、この物語は、主人公のネット世界のアバターが乗っ取られる事から展開していくのだけど、その姿はミッキーマウスを彷彿とさせる姿。そしてそれに対抗する親戚軍団の一人のアバターがウサギの姿。で、この映画の配給はワーナー。
つまり、ウサギのオズワルド対ミッキーマウス = ワーナー 対 ディズニーという構図があるわけです。物語の舞台の一つであるネットサービス集合体の名前もOZなので、オズワルドを暗示しているようないないような。
物語としては、この構図自体にそれほど意味を持たせているようでは無いのだけど。

SFとしてはデジタルワールドとデジモンという、2つの大きな嘘をつけなくなった分、細かいところで苦労しているなあという印象。
だけど物語自体は単純明快で展開もテンポ良く進むので、そういうごちゃごちゃしたことは見終わった後に考えて、観劇中は物語に没入しといた方がお得です。

土曜日, 8月 01, 2009

コアラの中のアンドロイドと、動かない砂糖

今更気づいたけど、Ubuntu9.10に向けてUbuntuの中でAndroidのアプリケーションを動かそうという、取り組みがあるらしい。

Specs/AndroidExecutionEnvironment

9.04ではSugar環境がちゃんと動いてくれず、いろいろ設定を変えたりしたり、jhbuildから動かそうと四苦八苦していまして。結局出来ないので余っているマシンに8.04を入れて、そっちでやろうと思っていたのですが、Androidに心移りしそう。

SugarやるならFedoraってことなのかね。
RedHat系は慣れていないので避けたいのだけど、開発環境と割り切れば一台用意してもいいのかな。

追記:
Fedora11はSugarで起動できるオプションがあるらしい。俄然欲しくなってきました。
古いPCを捨てて、コンパクトなマシンを買おうかな。