digital matter
このサイトをご覧のInternet Explorer 6 ユーザーの皆様へ
総閲覧者数中 10.72% (2010/07/18現在)

‘default’ カテゴリーのアーカイブ

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=***)]

マーヴェラス。

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

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

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

で、おk。

TortoiseSVNをMac OSXで使う

ニーズは結構あるんですよね。デザイナとかMacユーザ多いし。Macユーザに聞くとMacのSubversionクライアントには決定打がないとも。

TortoiseSVN for Apple OSX

Wineとかで何とかTortoiseSVNをMac上で動くようにしてしまおうという記事。まだ試してないですが、時間があるときにMac miniにインストールしてみよう。

PythonでWebカメラから静止画を撮影してみる

あ、Windows Live Writer新しくなってから始めて使ったわ…

VideoCapture(名前ないのか…)を使うと楽にカメラが扱える。

PILをインストールしてから、VideoCaptureの当該バージョンを自分のPythonインストールディレクトリに上書きすればいいだけ。

実行環境はWindows Vista Ultimate+Qcam Pro for notebook+Python 2.5

ソースは以下。超簡単。

import re
import time
from VideoCapture import Device

def main():
    t = time.time()
    cam = Device(devnum=0,showVideoWindow=1)
    print time.time() - t
    cam.setResolution(640,480)
    print time.time() - t
    for i in xrange(100):
        print time.time() - t
        cam.saveSnapshot('testtestimage%d.jpg' % i)
    print time.time() - t

if __name__ == '__main__':
    main()

実行結果は以下の通り。わりと早いし安定してる気がする。初回のsaveSnapshotで時間がかかるのか。以降は0.02秒程度なので余裕。今後実用してみて耐久性を見る予定。

0.680999994278
0.891999959946
0.891999959946
2.18300008774
2.20499992371
2.22799992561
2.25200009346
2.27399992943
2.29699993134
2.33400011063
2.35700011253
2.38000011444
2.40300011635
2.42499995232
2.4470000267
2.46900010109
2.49099993706
2.5150001049
2.53699994087
2.56100010872
2.58599996567
2.60800004005
2.63100004196
2.65700006485
2.6779999733
2.70199990273
2.72499990463
2.74699997902
2.77200007439
2.79399991035
2.81900000572
2.84200000763
2.86400008202
2.88800001144
2.9240000248
2.94600009918
2.96900010109
2.992000103
3.01399993896
3.03900003433
3.06399989128
3.08800005913
3.11100006104
3.132999897
3.15499997139
3.18700003624
3.20900011063
3.23200011253
3.25699996948
3.27999997139
3.30500006676
3.32699990273
3.34899997711
3.37199997902
3.39299988747
3.41400003433
3.43600010872
3.45900011063
3.48000001907
3.50300002098
3.52500009537
3.54600000381
3.56900000572
3.59100008011
3.61299991608
3.63499999046
3.65799999237
3.68000006676
3.70300006866
3.72399997711
3.7460000515
3.76900005341
3.79099988937
3.81299996376
3.83500003815
3.8599998951
3.88199996948
3.90599989891
3.92700004578
3.9470000267
3.97799992561
4.0
4.02200007439
4.04500007629
4.06699991226
4.09100008011
4.11500000954
4.13599991798
4.15899991989
4.1819999218
4.20399999619
4.22600007057
4.24900007248
4.27200007439
4.29299998283
4.31699991226
4.33899998665
4.36299991608
4.38400006294
4.40499997139
4.42499995232
4.44900012016
4.47000002861

ちなみにshowVideoWindow=1はカメラのウィンドウを表示するモードなので、0にしてテストもしてみたが、時間の増加量は大差ない模様。

あと、Qcamのオートフォーカスを効かせるためには一度saveSnapshotしてから、しばらくおかないとダメらしい。試してないけど、getImageでも多分平気。

キャプチャボードとかのソースでもいけるっぽいので、何かできそう。というか、DirectShowソースか。画面キャプチャで何かできるかな…

PythonでHIDからiSerialNumberを取得

USBデバイスからiSerialNumberを取得するべく悪戦苦闘していた。

kernelのDeviceIoControlで何とか取得することには成功したのだけど、さらに調べてみるとhid.dllにHidD_GetSerialNumberStringという関数があるのを発見。

hid = windll.hid
buf = c_ubyte * 0xff
buf = buf()
print hid.HidD_GetSerialNumberString(handle, byref(buf), 0xff)
print buf[0:]

こんな感じでOK。Pythonの場合。バッファは適当。最大128ワイドキャラクタとか書いてあったけど。

HidD_GetSerialNumberString(MSDN)

Pythonで簡単にXML-RPCクライアント

Pythonでxmlrpclib使うと、簡単にXML-RPCが扱える。

FlashとサーバサイドでXML-RPC使おうとしたときに、サーバ側のAPIのテストと、XMLのサンプルをFlash作る人に渡したりするのだけど、それがちょこっと書くだけでできるので便利。何せ2行で済む。

# -*- encoding: utf-8 -*-
import xmlrpclib

print xmlrpclib.dumps(
    (
        {'image':xmlrpclib.Binary('hoge')},
        {'username':u'name'},
        {'title':u'item title'},
        {'mail':u'user e-mail'},
        {'comment':u'item comment'},
        {'itemlist':[3,2,3,1]}
    ), 'sample.hogehogeAPI')

結果はこんな感じに。

<?xml version='1.0'?>
<methodCall>
<methodName>sample.hogehogeAPI</methodName>
<params>
<param>
<value><struct>
<member>
<name>image</name>
<value><base64>
aG9nZQ==
</base64></value>
</member>
</struct></value>
</param>
<param>
<value><struct>
<member>
<name>username</name>
<value><string>name</string></value>
</member>
</struct></value>
</param>
<param>
<value><struct>
<member>
<name>title</name>
<value><string>item title</string></value>
</member>
</struct></value>
</param>
<param>
<value><struct>
<member>
<name>mail</name>
<value><string>user e-mail</string></value>
</member>
</struct></value>
</param>
<param>
<value><struct>
<member>
<name>comment</name>
<value><string>item comment</string></value>
</member>
</struct></value>
</param>
<param>
<value><struct>
<member>
<name>itemlist</name>
<value><array><data>
<value><int>3</int></value>
<value><int>2</int></value>
<value><int>3</int></value>
<value><int>1</int></value>
</data></array></value>
</member>
</struct></value>
</param>
</params>
</methodCall>

簡単すぎる…

んで、この結果をFlashの人に渡して、こんな感じで送ってくれと言える。

サーバのAPIをテストする場合は

# -*- encoding: utf-8 -*-
import xmlrpclib

server_url = 'http://sample.dev/add';
server = xmlrpclib.Server(server_url);

result = server.sample.hogehogeAPI(
        {'image':xmlrpclib.Binary('hoge')},
        {'username':u'name'},
        {'title':u'item title'},
        {'mail':u'user e-mail'},
        {'comment':u'item comment'},
        {'itemlist':[3,2,3,1]}
    )

こんな感じで書き換えてやればOK

RHEL 5.2でSkypeを使う

ニーズ度外視エントリシリーズ。

Skype for Linuxをダウンロード – 最新バージョンをダウンロード

SkypeのサイトにRedHat Enterprise Linux版はないので、一番可能性のありそうなCentOS版を持ってくる。

LinuxにRPMで公開鍵をインポートしてyum経由でSkypeをインストールするメモ – Knowledge Database IT

ほぼまんま、こちらの情報でOK。

$ wget http://www.skype.com/go/getskype-linux-centos
$ wget http://gd.tuwien.ac.at/infosys/phone/skype/rpm-public-key.asc

# rpm –import rpm-public-key.asc
# yum -y install skype-2.0.0.72-centos.i586.rpm

Loading "rhnplugin" plugin
rhel-x86_64-server-5      100% |=========================| 1.4 kB    00:00
Excluding Packages in global exclude list
Finished
Setting up Install Process
Parsing package install arguments
Examining skype-2.0.0.72-centos.i586.rpm: skype – 2.0.0.72-centos.i586
Marking skype-2.0.0.72-centos.i586.rpm to be installed
Resolving Dependencies
–> Running transaction check
—> Package skype.i586 0:2.0.0.72-centos set to be updated
–> Finished Dependency Resolution

Dependencies Resolved

=============================================================================
Package                 Arch       Version          Repository        Size
=============================================================================
Installing:
skype                   i586       2.0.0.72-centos  skype-2.0.0.72-centos.i586.rpm   19 M

Transaction Summary
=============================================================================
Install      1 Package(s)
Update       0 Package(s)
Remove       0 Package(s)

Total download size: 19 M
Downloading Packages:
Running rpm_check_debug
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
  Installing: skype                        ######################### [1/1]

Installed: skype.i586 0:2.0.0.72-centos
Complete!

こともなくインストール完了。

vncserverを起動して確認してみる。

$ vncserver -geometry 1024×769 -depth 16

で、WindowsマシンからこのサーバのIPアドレス:5901に接続してvncの画面上で

$ Skype &

見事Skype起動完了。簡単。チャットを使いたいだけなのでこれでOK。

Windows Vistaでシンボリックリンクを削除する

Vistaではシンボリックリンクを簡単に作成できる。

ローカルのApacheに色々開発環境移すのにシンボリックリンクを作った方が、全部htdocs以下に配置するより、開発単位でフォルダを一元管理できるので、ちょっとやってみた。

何より開発フォルダ名には日本語入ってるしね。

C:\xampp\htdocs> mklink /D hoge d:\dev\ほげ\htdocs

で、さっくりと c:\xampp\htdocs\hoge というシンボリックリンクディレクトリが作られる。

最初作る場所を間違えたので、移動しようと思って

C:xxx> move hoge C:\xampp\htdocs

とかやったら

アクセスが拒否されました。

とか表示されて移動できなかったので、一度消すことにした。

で、うっかり

C:\xxx> del hoge
C:\xxx\hoge\*、よろしいですか (Y/N)? y

としたらオリジナルの方の中身だけ消えてしまった…

そういえばディレクトリの削除はrmdirでしたね…

まぁ、当然といえば当然、なのかな?昔はこんなに親切に中身消してはくれなかったような気が?

delする前にそんな予感がして、バックアップを取ってあったので何も問題はなかったですが。

C:\xxx> rmdir hoge

とすればシンボリックリンクのディレクトリだけ削除できてOK。

…またうっかりやりそうだな…

WiimoteLibとスタック

WiimoteLib v1.2.1、BlueSoleilでしか動かないのかと思ったら東芝スタックでも動作できた。

ただし、MicrosoftのスタックではBluetooth上では認識して接続できるものの、WiimoteLibからはデバイスが見つからないと言われる。

繋げただけではHIDとして使用するようになっていなかったので、チェックを入れてみたがやはりダメ。

うーん、仕方がない…東芝でいいか…

あー、NXTが東芝で動かないんだった…orz

追記(2008/04/11)

SonyのDR-BT50もA2DPで接続できない…どうしろと…('A`)
(Vista 32bitにて)

追記(2008/04/21)

Bluetooth Stack for Windows by Toshiba
Version v5.10.15にアップデートしたらDR-BT50もつながるようになった。よかったー。
ドライバはPrincetonのサイトからダウンロード。
http://www.princeton.co.jp/download/ptm-ubt3s/top.html

追記(2008/04/21)その2

DR-BT50接続時に2回に1回の割合でブルースクリーンでOSが落ちる…なんぞ…orz