digital matter

2009 年 3 月 のアーカイブ

Mac OSXでAIRを複数起動させる

参考:Adobe AIRを多重起動する方法

Macでもほぼ同じ方法で実現できたのでメモ。

ただし、Macの場合、ターミナルから起動する必要がある。

$ open -n /Applications/hoge.app

で、起動したあと、Application.xmlを書き換えてもう一度同じコマンドを実行することで、2つめを起動させることができる。IDが重複しなければいくつでも可能。

Macの場合は

/Applications/hoge.app/Contents/Resource/META-INF/AIR/Application.xml

にApplication.xmlがあるので、Windowsのときと同じくIDを適当にユニークにしてやればOK。

ちなみに

/Applications/hoge.app/Contents/MacOS/hoge &

で複数起動させようとしたらやたら不安定になった。注意。

関連する投稿

Mac OSX 10.5でhamachiを自動起動する

Hamachiのインストールまでは他のサイト参照のこと。

実行した環境は10.5.6 Leopard。

自動起動手順は以下のサイトにまとめられてる。

trak3r’s hamachi-for-os-x-start-up-on-boot at master – GitHub

/Library/StartupItems/Hamachiディレクトリを作成する。

# cd /Library/StartupItems/
# mkdir Hamachi
# cd Hamachi

HamachiとStartupParameters.plistの2ファイルを/Library/StartupItems/Hamachiに設置する。

viとかでそれぞれコピペ。

# vi Hamachi
# vi StartupParameters.plist

その際、Hamachiファイルは

/usr/bin/hamachi -c /Users/robertdobson/.hamachi start

この行だけ自分のHOMEディレクトリに書き換える。

# chmod 755 Hamachi
# chmod 755 StartupParameters.plist

で、再起動すればOK。plistに755はいらないかも。

関連する投稿

LeopardでHIDを使おうとした失敗のメモ

Mac OSX 10.5.6 Leopard+Python 2.5でHIDを使おうとしばらく頑張ってたけど、とりあえず失敗の歴史メモ。解決方法は書いていません。

PyUSB

libusbのラッパー。これが動けば一番楽なのだけど…

libusbはkernalにHIDを取られてしまうのでOSXで動かないとどこかに書いてあった。一応.kextファイルを作成することで動くようになるらしいのだけど、今回rootでの処理が必要なものは使えなかったので諦め。

ちなみに良質なコードのサンプルはpyMissileにある。

これも。日本語。Python/PyUSB – SasadaLabWiki

あと、便利なドキュメントはこちら。wiki:projects:python:pyusb:pydoc    [wiki.erazor-zone.de]

それとlibusb用の.kextファイルの作り方はこちら。

Re: device not opened for exclusive access?: msg#00058 lib.libusb.devel.general

ちなみに何が失敗するかというと、こんな感じ。

>>> import usb
>>> bus = usb.busses()
>>> dev = bus[4].devices[1]
>>> handle = dev.open()
>>> handle.detachKernelDriver(0)
>>> handle.detachKernelDriver(1)
>>> conf = dev.configurations[0]
>>> handle.setConfiguration(conf)
>>> intf = conf.interfaces[0][0]
>>> intf
<usb.Interface object at 0x11398>
>>> handle.claimInterface(intf)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
usb.USBError: usb_claim_interface: couldn't claim interface
>>> handle.setAltInterface(intf)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
usb.USBError: usb_set_altinterface: could not set alternate interface

SWIG+HID_Utilities

Control USBIO module from Python on MacOSX

基本的には、上記サイトに書いてある通り。

はまった場所はHID_Utilities_External.hのvoid *をchar *に書き換えておかないといけないこと。これはdylibをビルドしたあとならHID_Utilities_External.hの修正だけでOK。ビルド前なら一緒にHID_Queue_Utilities.cの当該部分も変更しておく必要あり。あとキャスト必要かも。

SetReportは成功して、デバイスにコマンドを処理させることはできた。

ただ、SWIGにはコールバックでPythonのメソッドを呼ばせる方法がないらしく頓挫。まぁ、なくても変数には入るらしくて、それを監視すればいいだけの話なのだけれど、それがうまくいかなくて結局頓挫。一応その方法の説明は以下のあたり。%constantディレクティブを使えばいいらしい。

SWIG Basics Pointers to functions and callbacks

Users guide for fd2python ←コールバックあるような気も?

もうひとつ頓挫の理由として、HIDGetReportの結果が目的の結果にならないこと。データを読み出すコマンドをHIDSetReportで送った後には、確かに値が変化するのだけど、どうも正しいデータにならない…原因つかめず。あと、iSerialNumberの取得もデータが化けてうまくいかず。

pyglet

pyglet自体はマルチメディア関連のクロスプラットフォームフレームワークみたいなもの。

その中にdarwin_hid.pyというOSX用のHIDライブラリがある。

これはcocoaにctypesでアクセスしている模様。これが一番確率高いなー、とは思う。

実際、

import pyglet.input
devices = pyglet.input.get_devices()
dev = devices[1]

だけでHIDの一覧を取得可能。しかしこのデバイスにSetReportをしたいのだけどどうすればいいのか不明。元々キーボードやマウスやコントローラーに特化しているようで、深いことをしようとしたら自分で書く必要があるっぽい。まだ追いかける余地は結構あるけどなー…

関連する投稿

applemtp.sysのブルースクリーンの解決方法

隣の席の人がMacBookにBootCampでインストールしたWindows XPで、ブルースクリーン(BSOD)に悩まされてたので解決メモ。applemtp.sysのエラーで、タッチパッドのドライバらしい。XPとVistaで頻発するとか。

Apple – Support – Downloads

まぁ、つまり、アップデートしろ、と。

自分で試したわけではないので、何ら保証はできませんが。

一応このエラーだけを修正するアップデートは

Multi-Touch Trackpad Update for Windows XP & Vista

これなんだけど、普通のBoot Camp Updateを当てればOKなのかな?

訂正:

逆らしい。

graっちぇgraっちぇ: Trackpad patch v 2.1.2.100はスルーの方向で。(泣)

2.1.2.100のパッチを当てた人がエラー起きてるらしい。隣の人はBoot Camp Update 2.1を当てたらエラーが起きなくなったと言っていたが…

バージョンが戻って安定するようになったのか、もしくは気のせいか。

追伸:

やっぱ安定してないらしい。

とりあえず古いapplemtp.sysを持ってきて差し替えたらいいんじゃないでしょうかね。

関連する投稿

pygletのHIDモジュールを使う

Mac OSXのPythonでHIDを使う系の話の流れで、Python2.5+SWIG+libHIDUtilities.dylibを追っていたのだけど、ここに来て問題発覚。

SWIG Basics

SWIGってコールバック呼べないのね…コールバック関数の結果を変数として得ることはできるみたいだけど。HIDの入力イベントを通知とかはできないみたい。一応、フラグをずっと監視とかしたらできそうだけど。

しょうがないので、アプローチを変更。HID関係のメソッド名で検索をかけていたらpygletなるものを発見。クロスプラットフォームのマルチメディアライブラリ。OpenGLから動画の再生から色々できるらしい。日本語のドキュメントもあり。結構メジャーなのかな。

pyglet プログラミングガイド

HID部分だけ引っ張り出して使えそうな雰囲気なので、これで試してみる。

ちなみにさっくりHIDのデバイスリストを列挙するテストをしてみた。

>>> import pyglet.input
>>> pyglet.input.get_devices()
[DarwinHIDDevice(name=Apple IR), DarwinHIDDevice(name=***)]

マーヴェラス。

関連する投稿

Python対話モードでのコード補完

Pythonの対話モードでコード補完を使えるということを知った。

環境はMac OSX Leopard+Python2.5.4(Ports)

インタラクティブモードで補完とかヒストリの読み書きとか – Seeking for my unique color.

readlineモジュールがインストールされていなかったので、Portsでインストール。

$ sudo port install py25-readline

これで

>>> import rlcompleter, readline
>>> readline.parse_and_bind("tab: complete")

で補完がばっちり効く。これは便利。

毎回打ち込むのは忘れそうなので、インタラクティブシェルが起動したときに自動で実行されるようにしたい。どうやらsitecustomize.pyというものを書けばいいらしい。

$ vi /Library/Python/2.5/site-packages/sitecustomize.py

import rlcompleter, readline
readline.parse_and_bind("tab: complete")

でいいかなと思ったらどうやら違うらしい。sitecustomize.pyはどこに置けばいいんだろう…

関連する投稿

OSXのlocateデータベースを更新する

Mac OSX 10.5 Leopardでlocateコマンドのデータベースを更新する方法のメモ。

$ sudo sh /etc/periodic/weekly/310.locate

で、おk。

関連する投稿

applemtp.sysのブルースクリーンの解決方法

隣の席の人がMacBookにBootCampでインストールしたWindows XPで、ブルースクリーン(BSOD)に悩まされてたので解決メモ。applemtp.sysのエラーで、タッチパッドのドライバらしい。XPとVistaで頻発するとか。

Apple – Support – Downloads

まぁ、つまり、アップデートしろ、と。

自分で試したわけではないので、何ら保証はできませんが。

一応このエラーだけを修正するアップデートは

Multi-Touch Trackpad Update for Windows XP & Vista

これなんだけど、普通のBoot Camp Updateを当てればOKなのかな?

訂正:

逆らしい。

graっちぇgraっちぇ: Trackpad patch v 2.1.2.100はスルーの方向で。(泣)

2.1.2.100のパッチを当てた人がエラー起きてるらしい。隣の人はBoot Camp Update 2.1を当てたらエラーが起きなくなったと言っていたが…

バージョンが戻って安定するようになったのか、もしくは気のせいか。

追伸:

やっぱ安定してないらしい。

とりあえず古いapplemtp.sysを持ってきて差し替えたらいいんじゃないでしょうかね。

関連する投稿