<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>digital matter &#187; Python</title>
	<atom:link href="http://blog.loadlimits.info/category/python/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.loadlimits.info</link>
	<description>Just another WordPress weblog</description>
	<lastBuildDate>Tue, 31 Aug 2010 21:25:15 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>PythonでMIDI出力をしてみる</title>
		<link>http://blog.loadlimits.info/2009/10/python%e3%81%a7midi%e5%87%ba%e5%8a%9b%e3%82%92%e3%81%97%e3%81%a6%e3%81%bf%e3%82%8b/</link>
		<comments>http://blog.loadlimits.info/2009/10/python%e3%81%a7midi%e5%87%ba%e5%8a%9b%e3%82%92%e3%81%97%e3%81%a6%e3%81%bf%e3%82%8b/#comments</comments>
		<pubDate>Fri, 16 Oct 2009 03:15:53 +0000</pubDate>
		<dc:creator>hotpi</dc:creator>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[解決]]></category>
		<category><![CDATA[MIDI]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://blog.loadlimits.info/2009/10/python%e3%81%a7midi%e5%87%ba%e5%8a%9b%e3%82%92%e3%81%97%e3%81%a6%e3%81%bf%e3%82%8b/</guid>
		<description><![CDATA[既存のPythonで作ったWindowsアプリケーションにMIDI出力を組み込む用事があったので、実験してみました。
参考サイトはこちら。
sulume blog» ブログアーカイブ » python で MIDI を使う
MIDIIO.dllというのはおーぷんMIDIぷろじぇくとで公開されているMIDIメッセージ入出力用ライブラリです。
これもダウンロードして、pyファイルと同じ場所に置いておきます。
で、ソースコードはこちら。


import ctypes
import time

midiiolib = ctypes.windll.LoadLibrary(r".\MIDIIO.dll")

c_deviceName = ctypes.create_string_buffer(32)

midiiolib.MIDIOut_GetDeviceName(0, c_deviceName, 32)
midiout = midiiolib.MIDIOut_Open(c_deviceName.value)

c_mess = ctypes.create_string_buffer(3)
c_mess.value = '\x90\x3C\x64'

midiiolib.MIDIOut_PutMIDIMessage(midiout, c_mess.value, 3)

time.sleep(3)

midiiolib.MIDIOut_Close(midiout)


説明することもあまりないですが、8行目のMIDIOut_GetDeviceNameで、MIDI出力の先頭のデバイスの名前を先に取得します。
で、その名前を使ってMIDIOut_Openで出力デバイスを開きます。
11～12行目ではノートを作成します。とりあえずドの音でも鳴らしておきます。この辺もMIDIIO.dllに入っていたドキュメントのサンプルと同じ。
あとはMIDIOut_PutMIDIMessageで出力するだけです。
ちゃんと閉じておかないと、次回音が鳴らなかったりする（オープンに失敗します）ので、MIDIOut_Closeで閉じておきましょう。
実験として、ちょっと長いデータを指定してみる。

import ctypes
import time

midiiolib = ctypes.windll.LoadLibrary(r".\MIDIIO.dll")

c_deviceName = ctypes.create_string_buffer(32)

midiiolib.MIDIOut_GetDeviceName(0, c_deviceName, 32)
midiout = midiiolib.MIDIOut_Open(c_deviceName.value)

notes = ['\x90\x3C\x64',
         '\x90\x3E\x64',
         '\x90\x40\x64',
  [...]]]></description>
			<content:encoded><![CDATA[<p>既存のPythonで作ったWindowsアプリケーションにMIDI出力を組み込む用事があったので、実験してみました。</p>
<p>参考サイトはこちら。</p>
<p><a href="http://sulume.com/blog/2009/09/26/midi-for-python/" target="_blank">sulume blog» ブログアーカイブ » python で MIDI を使う</a></p>
<p>MIDIIO.dllというのは<a href="http://openmidiproject.sourceforge.jp/" target="_blank">おーぷんMIDIぷろじぇくと</a>で公開されているMIDIメッセージ入出力用ライブラリです。</p>
<p>これもダウンロードして、pyファイルと同じ場所に置いておきます。</p>
<p>で、ソースコードはこちら。</p>
<p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:2fa1f3e8-7c3e-41fb-a2b6-dd8d92243198" class="wlWriterEditableSmartContent">
<pre name="code" class="py">import ctypes
import time

midiiolib = ctypes.windll.LoadLibrary(r".\MIDIIO.dll")

c_deviceName = ctypes.create_string_buffer(32)

midiiolib.MIDIOut_GetDeviceName(0, c_deviceName, 32)
midiout = midiiolib.MIDIOut_Open(c_deviceName.value)

c_mess = ctypes.create_string_buffer(3)
c_mess.value = '\x90\x3C\x64'

midiiolib.MIDIOut_PutMIDIMessage(midiout, c_mess.value, 3)

time.sleep(3)

midiiolib.MIDIOut_Close(midiout)
</pre>
</div>
<p>説明することもあまりないですが、8行目のMIDIOut_GetDeviceNameで、MIDI出力の先頭のデバイスの名前を先に取得します。</p>
<p>で、その名前を使ってMIDIOut_Openで出力デバイスを開きます。</p>
<p>11～12行目ではノートを作成します。とりあえずドの音でも鳴らしておきます。この辺もMIDIIO.dllに入っていたドキュメントのサンプルと同じ。</p>
<p>あとはMIDIOut_PutMIDIMessageで出力するだけです。</p>
<p>ちゃんと閉じておかないと、次回音が鳴らなかったりする（オープンに失敗します）ので、MIDIOut_Closeで閉じておきましょう。</p>
<p>実験として、ちょっと長いデータを指定してみる。</p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:15aded9d-7788-453b-bed8-2cb716e5ff49" class="wlWriterEditableSmartContent">
<pre name="code" class="py">import ctypes
import time

midiiolib = ctypes.windll.LoadLibrary(r".\MIDIIO.dll")

c_deviceName = ctypes.create_string_buffer(32)

midiiolib.MIDIOut_GetDeviceName(0, c_deviceName, 32)
midiout = midiiolib.MIDIOut_Open(c_deviceName.value)

notes = ['\x90\x3C\x64',
         '\x90\x3E\x64',
         '\x90\x40\x64',
         '\x90\x41\x64',
         '\x90\x43\x64',
         '\x90\x45\x64',
         '\x90\x47\x64',
         '\x90\x48\x64']

c_mess = ctypes.create_string_buffer(3)

for note in notes:
    c_mess.value = note

    midiiolib.MIDIOut_PutMIDIMessage(midiout, c_mess.value, 3)
    time.sleep(0.5)

time.sleep(1.0)

midiiolib.MIDIOut_Close(midiout)
</pre>
</div>
<p>和音を鳴らしてみるテスト。</p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:ba211cd2-3e06-4c92-b11b-773b63841952" class="wlWriterEditableSmartContent">
<pre name="code" class="py">import ctypes
import time

midiiolib = ctypes.windll.LoadLibrary(r".\MIDIIO.dll")

c_deviceName = ctypes.create_string_buffer(32)

midiiolib.MIDIOut_GetDeviceName(0, c_deviceName, 32)
midiout = midiiolib.MIDIOut_Open(c_deviceName.value)

notes = ['\x90\x3C\x64',
         '\x90\x40\x64',
         '\x90\x43\x64']

c_mess = ctypes.create_string_buffer(3)

for note in notes:
    c_mess.value = note

    midiiolib.MIDIOut_PutMIDIMessage(midiout, c_mess.value, 3)

time.sleep(3.0)

midiiolib.MIDIOut_Close(midiout)
</pre>
</div>
<p>とりあえずこれだけできれば満足なので終了。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.loadlimits.info/2009/10/python%e3%81%a7midi%e5%87%ba%e5%8a%9b%e3%82%92%e3%81%97%e3%81%a6%e3%81%bf%e3%82%8b/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ImportError: MemoryLoadLibraryの対処法</title>
		<link>http://blog.loadlimits.info/2009/04/importerror-memoryloadlibrary%e3%81%ae%e5%af%be%e5%87%a6%e6%b3%95/</link>
		<comments>http://blog.loadlimits.info/2009/04/importerror-memoryloadlibrary%e3%81%ae%e5%af%be%e5%87%a6%e6%b3%95/#comments</comments>
		<pubDate>Mon, 20 Apr 2009 18:11:00 +0000</pubDate>
		<dc:creator>hotpi</dc:creator>
				<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://blog.loadlimits.info/?p=126</guid>
		<description><![CDATA[wxPythonで作ったWin32アプリケーションをpy2exeでひとつのファイルにまとめていたら、あるPCで以下のようなエラーが発生。
&#160;&#160;File &#34;zipextimporter.pyo&#34;, line 82, in load_module
&#160;&#160;File &#34;wx__init__.pyo&#34;, line 45, in &#60;module&#62;
&#160;&#160;File &#34;zipextimporter.pyo&#34;, line 82, in load_module
&#160;&#160;File &#34;wx_core.pyo&#34;, line 4, in &#60;module&#62;
&#160;&#160;File &#34;zipextimporter.pyo&#34;, line 98, in load_module
ImportError: MemoryLoadLibrary failed loading wx_core_.pyd
発生したマシンはWindows XP Professional SP3で、ユーザは管理権限。他のマシンでは発生しなくて、発生原因が不明だったのだけど、「ImportError: MemoryLoadLibrary failed loading wx_core_.pyd」で検索したらそれっぽいのがたくさん&#8230;
結構メジャーな問題？
解決策は主にこのフォーラムに。
OpenSubtitles.org // View topic &#8211; Solution for MemoryLoadLibrary failed loading wx_core_.pyd
早い話が、msvcp71.dllを持ってきて入れろってことらしい。py2exeを実行したときに一緒に配置されるmsvcr71.dllではなく。
msvcp71.dllが何なのかと、うまく動かない環境ではこのファイルがどうなってるのかは後で調べます。軽く見たところでは、こんなことらしい。
答えてねっと 投稿全文表示
下記のVC++2005再頒布可能パッケージに含まれているのかな&#8230;未確認。
ダウンロードの詳細 : Visual C++ 2005 再頒布可能パッケージ (x86)
出所不明だけど、DLLだけ入手するなら以下のサイトから。
DLL-files.com &#8211; [...]]]></description>
			<content:encoded><![CDATA[<p>wxPythonで作ったWin32アプリケーションをpy2exeでひとつのファイルにまとめていたら、あるPCで以下のようなエラーが発生。</p>
<p>&nbsp;&nbsp;File &quot;zipextimporter.pyo&quot;, line 82, in load_module</p>
<p>&nbsp;&nbsp;File &quot;wx__init__.pyo&quot;, line 45, in &lt;module&gt;</p>
<p>&nbsp;&nbsp;File &quot;zipextimporter.pyo&quot;, line 82, in load_module</p>
<p>&nbsp;&nbsp;File &quot;wx_core.pyo&quot;, line 4, in &lt;module&gt;</p>
<p>&nbsp;&nbsp;File &quot;zipextimporter.pyo&quot;, line 98, in load_module</p>
<p>ImportError: MemoryLoadLibrary failed loading wx_core_.pyd</p>
<p>発生したマシンはWindows XP Professional SP3で、ユーザは管理権限。他のマシンでは発生しなくて、発生原因が不明だったのだけど、「ImportError: MemoryLoadLibrary failed loading wx_core_.pyd」で検索したらそれっぽいのがたくさん&hellip;</p>
<p>結構メジャーな問題？</p>
<p>解決策は主にこのフォーラムに。</p>
<p><a href="http://forum.opensubtitles.org/viewtopic.php?t=881" target="_blank">OpenSubtitles.org // View topic &#8211; Solution for MemoryLoadLibrary failed loading wx_core_.pyd</a></p>
<p>早い話が、msvc<strong><u>p</u></strong>71.dllを持ってきて入れろってことらしい。py2exeを実行したときに一緒に配置されるmsvc<strong><u>r</u></strong>71.dllではなく。</p>
<p>msvcp71.dllが何なのかと、うまく動かない環境ではこのファイルがどうなってるのかは後で調べます。軽く見たところでは、こんなことらしい。</p>
<p><a href="http://www.kotaete-net.net/Default.aspx?pgid=14&amp;qid=40145228620" target="_blank">答えてねっと 投稿全文表示</a></p>
<p>下記のVC++2005再頒布可能パッケージに含まれているのかな&hellip;未確認。</p>
<p><a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=32bc1bee-a3f9-4c13-9c99-220b62a191ee&amp;DisplayLang=ja" target="_blank">ダウンロードの詳細 : Visual C++ 2005 再頒布可能パッケージ (x86)</a></p>
<p>出所不明だけど、DLLだけ入手するなら以下のサイトから。</p>
<p><a href="http://www.dll-files.com/dllindex/pop.php?msvcp71" target="_blank">DLL-files.com &#8211; Download of msvcp71</a></p>
<p>同じ人の別のマシンで、また別のエラーが出てるらしいんだよなぁ&hellip;それも調べないと。</p>
<p>追記：</p>
<p><a href="http://www.py2exe.org/index.cgi/ProblemsToBeFixed" target="_blank">ProblemsToBeFixed &#8211; py2exe.org</a></p>
<p>ってゆーか、公式にまるっと全部書いてあったYo！</p>
<p>py2exe 0.6.8で発生したので、とりあえず0.6.9にしてみるか&hellip;0.6.8で直ってるみたいなことが書いてあるのだけど&hellip;</p>
<p>まぁでも解決策はmsvcp71.dllを置けってことなのね。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.loadlimits.info/2009/04/importerror-memoryloadlibrary%e3%81%ae%e5%af%be%e5%87%a6%e6%b3%95/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>wxPythonでラジオボタンのラベルを複数行にはできないらしい</title>
		<link>http://blog.loadlimits.info/2009/04/wxpython%e3%81%a7%e3%83%a9%e3%82%b8%e3%82%aa%e3%83%9c%e3%82%bf%e3%83%b3%e3%81%ae%e3%83%a9%e3%83%99%e3%83%ab%e3%82%92%e8%a4%87%e6%95%b0%e8%a1%8c%e3%81%ab%e3%81%af%e3%81%a7%e3%81%8d%e3%81%aa%e3%81%84/</link>
		<comments>http://blog.loadlimits.info/2009/04/wxpython%e3%81%a7%e3%83%a9%e3%82%b8%e3%82%aa%e3%83%9c%e3%82%bf%e3%83%b3%e3%81%ae%e3%83%a9%e3%83%99%e3%83%ab%e3%82%92%e8%a4%87%e6%95%b0%e8%a1%8c%e3%81%ab%e3%81%af%e3%81%a7%e3%81%8d%e3%81%aa%e3%81%84/#comments</comments>
		<pubDate>Mon, 06 Apr 2009 23:41:00 +0000</pubDate>
		<dc:creator>hotpi</dc:creator>
				<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://blog.loadlimits.info/?p=125</guid>
		<description><![CDATA[ソースを見る限りできないっぽい。
一度書いたエントリ消えてたので詳細とかはなしっす…
]]></description>
			<content:encoded><![CDATA[<p>ソースを見る限りできないっぽい。</p>
<p>一度書いたエントリ消えてたので詳細とかはなしっす…</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.loadlimits.info/2009/04/wxpython%e3%81%a7%e3%83%a9%e3%82%b8%e3%82%aa%e3%83%9c%e3%82%bf%e3%83%b3%e3%81%ae%e3%83%a9%e3%83%99%e3%83%ab%e3%82%92%e8%a4%87%e6%95%b0%e8%a1%8c%e3%81%ab%e3%81%af%e3%81%a7%e3%81%8d%e3%81%aa%e3%81%84/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>LeopardでHIDを使おうとした失敗のメモ</title>
		<link>http://blog.loadlimits.info/2009/03/leopard%e3%81%a7hid%e3%82%92%e4%bd%bf%e3%81%8a%e3%81%86%e3%81%a8%e3%81%97%e3%81%9f%e5%a4%b1%e6%95%97%e3%81%ae%e3%83%a1%e3%83%a2/</link>
		<comments>http://blog.loadlimits.info/2009/03/leopard%e3%81%a7hid%e3%82%92%e4%bd%bf%e3%81%8a%e3%81%86%e3%81%a8%e3%81%97%e3%81%9f%e5%a4%b1%e6%95%97%e3%81%ae%e3%83%a1%e3%83%a2/#comments</comments>
		<pubDate>Thu, 12 Mar 2009 09:26:00 +0000</pubDate>
		<dc:creator>hotpi</dc:creator>
				<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://blog.loadlimits.info/?p=122</guid>
		<description><![CDATA[Mac OSX 10.5.6 Leopard+Python 2.5でHIDを使おうとしばらく頑張ってたけど、とりあえず失敗の歴史メモ。解決方法は書いていません。
PyUSB
libusbのラッパー。これが動けば一番楽なのだけど…
libusbはkernalにHIDを取られてしまうのでOSXで動かないとどこかに書いてあった。一応.kextファイルを作成することで動くようになるらしいのだけど、今回rootでの処理が必要なものは使えなかったので諦め。
ちなみに良質なコードのサンプルはpyMissileにある。
これも。日本語。Python/PyUSB &#8211; SasadaLabWiki
あと、便利なドキュメントはこちら。wiki:projects:python:pyusb:pydoc&#160;&#160;&#160; [wiki.erazor-zone.de]
それとlibusb用の.kextファイルの作り方はこちら。
Re: device not opened for exclusive access?: msg#00058 lib.libusb.devel.general
ちなみに何が失敗するかというと、こんな感じ。

&#62;&#62;&#62; import usb
&#62;&#62;&#62; bus = usb.busses()
&#62;&#62;&#62; dev = bus[4].devices[1]
&#62;&#62;&#62; handle = dev.open()
&#62;&#62;&#62; handle.detachKernelDriver(0)
&#62;&#62;&#62; handle.detachKernelDriver(1)
&#62;&#62;&#62; conf = dev.configurations[0]
&#62;&#62;&#62; handle.setConfiguration(conf)
&#62;&#62;&#62; intf = conf.interfaces[0][0]
&#62;&#62;&#62; intf
&#60;usb.Interface object at 0x11398&#62;
&#62;&#62;&#62; handle.claimInterface(intf)
Traceback (most recent call last):
  File "&#60;stdin&#62;", line 1, in &#60;module&#62;
usb.USBError: usb_claim_interface: couldn't claim [...]]]></description>
			<content:encoded><![CDATA[<p>Mac OSX 10.5.6 Leopard+Python 2.5でHIDを使おうとしばらく頑張ってたけど、とりあえず失敗の歴史メモ。解決方法は書いていません。</p>
<h2><a href="http://pyusb.berlios.de/" target="_blank">PyUSB</a></h2>
<p>libusbのラッパー。これが動けば一番楽なのだけど…</p>
<p>libusbはkernalにHIDを取られてしまうのでOSXで動かないとどこかに書いてあった。一応.kextファイルを作成することで動くようになるらしいのだけど、今回rootでの処理が必要なものは使えなかったので諦め。</p>
<p>ちなみに良質なコードのサンプルは<a href="http://pymissile.googlecode.com/svn/trunk/missile.py" target="_blank">pyMissile</a>にある。</p>
<p>これも。日本語。<a href="http://vega.ence.kyushu-u.ac.jp/wiki/Python/PyUSB" target="_blank">Python/PyUSB &#8211; SasadaLabWiki</a></p>
<p>あと、便利なドキュメントはこちら。<a href="http://wiki.erazor-zone.de/wiki:projects:python:pyusb:pydoc" target="_blank">wiki:projects:python:pyusb:pydoc&#160;&#160;&#160; [wiki.erazor-zone.de]</a></p>
<p>それとlibusb用の.kextファイルの作り方はこちら。</p>
<p><a href="http://osdir.com/ml/lib.libusb.devel.general/2007-01/msg00058.html" target="_blank">Re: device not opened for exclusive access?: msg#00058 lib.libusb.devel.general</a></p>
<p>ちなみに何が失敗するかというと、こんな感じ。</p>
<div class="wlWriterEditableSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:4af09774-a5ce-409a-a149-17319d993f2e" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px">
<pre name="code" class="py">&gt;&gt;&gt; import usb
&gt;&gt;&gt; bus = usb.busses()
&gt;&gt;&gt; dev = bus[4].devices[1]
&gt;&gt;&gt; handle = dev.open()
&gt;&gt;&gt; handle.detachKernelDriver(0)
&gt;&gt;&gt; handle.detachKernelDriver(1)
&gt;&gt;&gt; conf = dev.configurations[0]
&gt;&gt;&gt; handle.setConfiguration(conf)
&gt;&gt;&gt; intf = conf.interfaces[0][0]
&gt;&gt;&gt; intf
&lt;usb.Interface object at 0x11398&gt;
&gt;&gt;&gt; handle.claimInterface(intf)
Traceback (most recent call last):
  File "&lt;stdin&gt;", line 1, in &lt;module&gt;
usb.USBError: usb_claim_interface: couldn't claim interface
&gt;&gt;&gt; handle.setAltInterface(intf)
Traceback (most recent call last):
  File "&lt;stdin&gt;", line 1, in &lt;module&gt;
usb.USBError: usb_set_altinterface: could not set alternate interface
</pre>
</div>
<h2>SWIG+<a href="http://developer.apple.com/samplecode/HID_Utilities_Source/index.html" target="_blank">HID_Utilities</a></h2>
<p><a href="http://www-acc.kek.jp/WWW-ACC-exp/KEKB/control/member/N.Yamamoto/Python/USBIO/HIDonMacOSX/Control%20USBIO%20module%20from%20Python%20on%20MacOSX.html" target="_blank">Control USBIO module from Python on MacOSX</a></p>
<p>基本的には、上記サイトに書いてある通り。</p>
<p>はまった場所はHID_Utilities_External.hのvoid *をchar *に書き換えておかないといけないこと。これはdylibをビルドしたあとならHID_Utilities_External.hの修正だけでOK。ビルド前なら一緒にHID_Queue_Utilities.cの当該部分も変更しておく必要あり。あとキャスト必要かも。</p>
<p>SetReportは成功して、デバイスにコマンドを処理させることはできた。</p>
<p>ただ、SWIGにはコールバックでPythonのメソッドを呼ばせる方法がないらしく頓挫。まぁ、なくても変数には入るらしくて、それを監視すればいいだけの話なのだけれど、それがうまくいかなくて結局頓挫。一応その方法の説明は以下のあたり。%constantディレクティブを使えばいいらしい。</p>
<p><a href="http://www.swig.org/Doc1.3/SWIG.html#SWIG_nn30" target="_blank">SWIG Basics Pointers to functions and callbacks</a></p>
<p><a href="http://www.johnnyland.info/Users_guide.html" target="_blank">Users guide for fd2python</a> ←コールバックあるような気も？</p>
<p>もうひとつ頓挫の理由として、HIDGetReportの結果が目的の結果にならないこと。データを読み出すコマンドをHIDSetReportで送った後には、確かに値が変化するのだけど、どうも正しいデータにならない…原因つかめず。あと、iSerialNumberの取得もデータが化けてうまくいかず。</p>
<h2><a href="http://www.pyglet.org/index.html" target="_blank">pyglet</a></h2>
<p>pyglet自体はマルチメディア関連のクロスプラットフォームフレームワークみたいなもの。</p>
<p>その中に<a href="http://code.google.com/p/pyglet/source/browse/trunk/pyglet/input/darwin_hid.py" target="_blank">darwin_hid.py</a>というOSX用のHIDライブラリがある。</p>
<p>これはcocoaにctypesでアクセスしている模様。これが一番確率高いなー、とは思う。</p>
<p>実際、</p>
<div class="wlWriterEditableSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:e3b04464-b81f-40c2-9ad1-c559864eb5f8" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px">
<pre name="code" class="py">import pyglet.input
devices = pyglet.input.get_devices()
dev = devices[1]</pre>
</div>
<p>だけでHIDの一覧を取得可能。しかしこのデバイスにSetReportをしたいのだけどどうすればいいのか不明。元々キーボードやマウスやコントローラーに特化しているようで、深いことをしようとしたら自分で書く必要があるっぽい。まだ追いかける余地は結構あるけどなー…</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.loadlimits.info/2009/03/leopard%e3%81%a7hid%e3%82%92%e4%bd%bf%e3%81%8a%e3%81%86%e3%81%a8%e3%81%97%e3%81%9f%e5%a4%b1%e6%95%97%e3%81%ae%e3%83%a1%e3%83%a2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Python対話モードでのコード補完</title>
		<link>http://blog.loadlimits.info/2009/03/python%e5%af%be%e8%a9%b1%e3%83%a2%e3%83%bc%e3%83%89%e3%81%a7%e3%81%ae%e3%82%b3%e3%83%bc%e3%83%89%e8%a3%9c%e5%ae%8c/</link>
		<comments>http://blog.loadlimits.info/2009/03/python%e5%af%be%e8%a9%b1%e3%83%a2%e3%83%bc%e3%83%89%e3%81%a7%e3%81%ae%e3%82%b3%e3%83%bc%e3%83%89%e8%a3%9c%e5%ae%8c/#comments</comments>
		<pubDate>Tue, 10 Mar 2009 09:52:00 +0000</pubDate>
		<dc:creator>hotpi</dc:creator>
				<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://blog.loadlimits.info/?p=119</guid>
		<description><![CDATA[Pythonの対話モードでコード補完を使えるということを知った。
環境はMac OSX Leopard+Python2.5.4(Ports)
インタラクティブモードで補完とかヒストリの読み書きとか &#8211; Seeking for my unique color.
readlineモジュールがインストールされていなかったので、Portsでインストール。
$ sudo port install py25-readline
これで
&#62;&#62;&#62; import rlcompleter, readline    &#62;&#62;&#62; readline.parse_and_bind(&#34;tab: complete&#34;)
で補完がばっちり効く。これは便利。
毎回打ち込むのは忘れそうなので、インタラクティブシェルが起動したときに自動で実行されるようにしたい。どうやらsitecustomize.pyというものを書けばいいらしい。
$ vi /Library/Python/2.5/site-packages/sitecustomize.py
import rlcompleter, readline    readline.parse_and_bind(&#34;tab: complete&#34;)
でいいかなと思ったらどうやら違うらしい。sitecustomize.pyはどこに置けばいいんだろう…
]]></description>
			<content:encoded><![CDATA[<p>Pythonの対話モードでコード補完を使えるということを知った。</p>
<p>環境はMac OSX Leopard+Python2.5.4(Ports)</p>
<p><a href="http://d.hatena.ne.jp/syou6162/20070516/1179307750" target="_blank">インタラクティブモードで補完とかヒストリの読み書きとか &#8211; Seeking for my unique color.</a></p>
<p>readlineモジュールがインストールされていなかったので、Portsでインストール。</p>
<p>$ sudo port install py25-readline</p>
<p>これで</p>
<p>&gt;&gt;&gt; import rlcompleter, readline    <br />&gt;&gt;&gt; readline.parse_and_bind(&quot;tab: complete&quot;)</p>
<p>で補完がばっちり効く。これは便利。</p>
<p>毎回打ち込むのは忘れそうなので、インタラクティブシェルが起動したときに自動で実行されるようにしたい。どうやらsitecustomize.pyというものを書けばいいらしい。</p>
<p>$ vi /Library/Python/2.5/site-packages/sitecustomize.py</p>
<p>import rlcompleter, readline    <br />readline.parse_and_bind(&quot;tab: complete&quot;)</p>
<p>でいいかなと思ったらどうやら違うらしい。sitecustomize.pyはどこに置けばいいんだろう…</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.loadlimits.info/2009/03/python%e5%af%be%e8%a9%b1%e3%83%a2%e3%83%bc%e3%83%89%e3%81%a7%e3%81%ae%e3%82%b3%e3%83%bc%e3%83%89%e8%a3%9c%e5%ae%8c/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Pythonを使ってUSBデバイスの接続検知をする</title>
		<link>http://blog.loadlimits.info/2009/02/python%e3%82%92%e4%bd%bf%e3%81%a3%e3%81%a6usb%e3%83%87%e3%83%90%e3%82%a4%e3%82%b9%e3%81%ae%e6%8e%a5%e7%b6%9a%e6%a4%9c%e7%9f%a5%e3%82%92%e3%81%99%e3%82%8b/</link>
		<comments>http://blog.loadlimits.info/2009/02/python%e3%82%92%e4%bd%bf%e3%81%a3%e3%81%a6usb%e3%83%87%e3%83%90%e3%82%a4%e3%82%b9%e3%81%ae%e6%8e%a5%e7%b6%9a%e6%a4%9c%e7%9f%a5%e3%82%92%e3%81%99%e3%82%8b/#comments</comments>
		<pubDate>Thu, 12 Feb 2009 10:23:00 +0000</pubDate>
		<dc:creator>hotpi</dc:creator>
				<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://blog.loadlimits.info/?p=114</guid>
		<description><![CDATA[というのを色々調べてMSDN見て構造体の定義を書いたりして、RegisterDeviceNotificationを使ってwxPythonのトップウィンドウにWM_DEVICECHANGEを送るところまで成功して、それをSpy++で確認中にOSが落ちたり色々あったけど、じゃあそれをWndProcで処理する方法を調べようかなと思って「WM_DEVICECHANGE Python」で検索をかけたところ、カナダのサイトに行きついた末、そこからのリンクでwxPythonのwikiに”そのものずばり”なサンプルコードが載っていることを発見してやるせなくなったところが、今です。
前置き長すぎたけど、やり方はこちら。
MonitoringWindowsUsb &#8211; wxPyWiki
あー。
あー…。
]]></description>
			<content:encoded><![CDATA[<p>というのを色々調べてMSDN見て構造体の定義を書いたりして、RegisterDeviceNotificationを使ってwxPythonのトップウィンドウにWM_DEVICECHANGEを送るところまで成功して、それをSpy++で確認中にOSが落ちたり色々あったけど、じゃあそれをWndProcで処理する方法を調べようかなと思って「WM_DEVICECHANGE Python」で検索をかけたところ、カナダのサイトに行きついた末、そこからのリンクでwxPythonのwikiに”そのものずばり”なサンプルコードが載っていることを発見してやるせなくなったところが、今です。</p>
<p>前置き長すぎたけど、やり方はこちら。</p>
<p><a title="MonitoringWindowsUsb - wxPyWiki" href="http://wiki.wxpython.org/MonitoringWindowsUsb" target="_blank">MonitoringWindowsUsb &#8211; wxPyWiki</a></p>
<p>あー。</p>
<p>あー…。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.loadlimits.info/2009/02/python%e3%82%92%e4%bd%bf%e3%81%a3%e3%81%a6usb%e3%83%87%e3%83%90%e3%82%a4%e3%82%b9%e3%81%ae%e6%8e%a5%e7%b6%9a%e6%a4%9c%e7%9f%a5%e3%82%92%e3%81%99%e3%82%8b/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PyUSBがVistaで使えないという話。</title>
		<link>http://blog.loadlimits.info/2008/12/pyusb%e3%81%8cvista%e3%81%a7%e4%bd%bf%e3%81%88%e3%81%aa%e3%81%84%e3%81%a8%e3%81%84%e3%81%86%e8%a9%b1%e3%80%82/</link>
		<comments>http://blog.loadlimits.info/2008/12/pyusb%e3%81%8cvista%e3%81%a7%e4%bd%bf%e3%81%88%e3%81%aa%e3%81%84%e3%81%a8%e3%81%84%e3%81%86%e8%a9%b1%e3%80%82/#comments</comments>
		<pubDate>Mon, 22 Dec 2008 10:00:00 +0000</pubDate>
		<dc:creator>hotpi</dc:creator>
				<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://blog.loadlimits.info/?p=108</guid>
		<description><![CDATA[
libusbをWindows Vistaに入れるとUSB機器全般使えなくなるらしい。


Pythonで開発中のUSBデバイスの操作に、PyUSB使おうと思っていただけに非常に残念。しかもlibusb-win32のこの更新頻度では対応の見込みは厳しそうだなぁ&#8230;


PyUSBがVistaではhid.dllを使うようになってくれたりしたらいいのかも。


調べてる最中に見つけた面白そうなものをメモ。


八角研究所 : レゴマインドストームNXTをPythonから操作するNXT_Pythonを使ってみる（1） &#8211; とりあえず走らせてみよう


独学Linux:WiiリモコンでBerylを動かす方法《実践編No.1》 &#8211; livedoor Blog（ブログ）


しかしPythonのライブラリの豊富さは何なの？


[追記]


libusb-win32のバックエンドにWinUSBを使う開発が進行中らしい。


LibUsb-Win32 &#8211; osdev-j (MMA)&#160;


SourceForge.net: libusb-win32-devel


ちゃんと進行してるっぽい。2009年くらいのリリースとか。


でも自分の用途には間に合わないけどね！
]]></description>
			<content:encoded><![CDATA[<p>
libusbをWindows Vistaに入れるとUSB機器全般使えなくなるらしい。
</p>
<p>
Pythonで開発中のUSBデバイスの操作に、<a href="http://pyusb.berlios.de/" target="_blank">PyUSB</a>使おうと思っていただけに非常に残念。しかも<a href="http://libusb-win32.sourceforge.net/" target="_blank">libusb-win32</a>のこの更新頻度では対応の見込みは厳しそうだなぁ&hellip;
</p>
<p>
PyUSBがVistaではhid.dllを使うようになってくれたりしたらいいのかも。
</p>
<p>
調べてる最中に見つけた面白そうなものをメモ。
</p>
<p>
<a href="http://www.hakkaku.net/articles/20080728-253" target="_blank">八角研究所 : レゴマインドストームNXTをPythonから操作するNXT_Pythonを使ってみる（1） &#8211; とりあえず走らせてみよう</a>
</p>
<p>
<a href="http://blog.livedoor.jp/vine_user/archives/51038020.html" target="_blank">独学Linux:WiiリモコンでBerylを動かす方法《実践編No.1》 &#8211; livedoor Blog（ブログ）</a>
</p>
<p>
しかしPythonのライブラリの豊富さは何なの？
</p>
<p>
[追記]
</p>
<p>
libusb-win32のバックエンドにWinUSBを使う開発が進行中らしい。
</p>
<p>
<a href="http://wiki.osdev.info/?LibUsb-Win32" target="_blank">LibUsb-Win32 &#8211; osdev-j (MMA)&nbsp;</a>
</p>
<p>
<a href="http://sourceforge.net/mailarchive/forum.php?forum_name=libusb-win32-devel" target="_blank">SourceForge.net: libusb-win32-devel</a>
</p>
<p>
ちゃんと進行してるっぽい。2009年くらいのリリースとか。
</p>
<p>
でも自分の用途には間に合わないけどね！</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.loadlimits.info/2008/12/pyusb%e3%81%8cvista%e3%81%a7%e4%bd%bf%e3%81%88%e3%81%aa%e3%81%84%e3%81%a8%e3%81%84%e3%81%86%e8%a9%b1%e3%80%82/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Visual Studio 2005でIronPython</title>
		<link>http://blog.loadlimits.info/2008/12/visual-studio-2005%e3%81%a7ironpython/</link>
		<comments>http://blog.loadlimits.info/2008/12/visual-studio-2005%e3%81%a7ironpython/#comments</comments>
		<pubDate>Mon, 15 Dec 2008 11:00:00 +0000</pubDate>
		<dc:creator>hotpi</dc:creator>
				<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://blog.loadlimits.info/?p=107</guid>
		<description><![CDATA[
IronPythonで.NETでMONOでWindowsもMacOSXもまとめてヒャッハーしたくなったのでとりあえず導入してみた。


こちらのサイトがわかりやすい。 
もう何時でもリリース出来るのでは？ IronPython for Visual Studio 2005の9月版 &#8211; ふにゃるん


導入した時点のバージョンは「Visual Studio 2005 SDK Version 4.0」


ダウンロードはこちらから。 
Download details: Visual Studio 2005 SDK Version 4.0


2007年2月版だったけど、インストール作業自体は上記と何も変わらず。


さっくり動いて超便利。


ところで、IronPythonって2.4系なのかー。


[追記]
と思ったらIronPython2.0のStableが4日前に来てたー！


http://www.codeplex.com/IronPython/Release/ProjectReleases.aspx?ReleaseId=8365


こっちは2.5 compatibleでっす。


あぁ&#8230;VS2008を買おうか迷う。
]]></description>
			<content:encoded><![CDATA[<p>
IronPythonで.NETでMONOでWindowsもMacOSXもまとめてヒャッハーしたくなったのでとりあえず導入してみた。
</p>
<p>
こちらのサイトがわかりやすい。 <br />
<a href="http://d.hatena.ne.jp/Wacky/20061021/1161426964" target="_blank">もう何時でもリリース出来るのでは？ IronPython for Visual Studio 2005の9月版 &#8211; ふにゃるん</a>
</p>
<p>
導入した時点のバージョンは「Visual Studio 2005 SDK Version 4.0」
</p>
<p>
ダウンロードはこちらから。 <br />
<a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=51a5c65b-c020-4e08-8ac0-3eb9c06996f4&amp;DisplayLang=en" target="_blank">Download details: Visual Studio 2005 SDK Version 4.0</a>
</p>
<p>
2007年2月版だったけど、インストール作業自体は上記と何も変わらず。
</p>
<p>
さっくり動いて超便利。
</p>
<p>
ところで、IronPythonって2.4系なのかー。
</p>
<p>
[追記]<br />
と思ったらIronPython2.0のStableが4日前に来てたー！
</p>
<p>
<a href="http://www.codeplex.com/IronPython/Release/ProjectReleases.aspx?ReleaseId=8365" target="_blank" title="IronPython - Release: 2.0">http://www.codeplex.com/IronPython/Release/ProjectReleases.aspx?ReleaseId=8365</a>
</p>
<p>
こっちは2.5 compatibleでっす。
</p>
<p>
あぁ&hellip;VS2008を買おうか迷う。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.loadlimits.info/2008/12/visual-studio-2005%e3%81%a7ironpython/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Pythonで、サーバからの画像取得で止まる</title>
		<link>http://blog.loadlimits.info/2008/10/python%e3%81%a7%e3%80%81%e3%82%b5%e3%83%bc%e3%83%90%e3%81%8b%e3%82%89%e3%81%ae%e7%94%bb%e5%83%8f%e5%8f%96%e5%be%97%e3%81%a7%e6%ad%a2%e3%81%be%e3%82%8b/</link>
		<comments>http://blog.loadlimits.info/2008/10/python%e3%81%a7%e3%80%81%e3%82%b5%e3%83%bc%e3%83%90%e3%81%8b%e3%82%89%e3%81%ae%e7%94%bb%e5%83%8f%e5%8f%96%e5%be%97%e3%81%a7%e6%ad%a2%e3%81%be%e3%82%8b/#comments</comments>
		<pubDate>Mon, 13 Oct 2008 06:23:00 +0000</pubDate>
		<dc:creator>hotpi</dc:creator>
				<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://blog.loadlimits.info/?p=96</guid>
		<description><![CDATA[サーバで画像に動的にExif情報を付加して、それをローカルのPythonで大量取得しようとしてハマったのでメモ。 
ローカル側は超省略するけど、以下のような感じ。 

# URLをXMLから取得
image_path = i.find("Url").text
# 認証のかかっている場所から画像取得
img = urllib2.urlopen(urllib2.Request(unicode(image_path), None, {"Authorization": "Basic " + basicAuth}))
localfile = file('./' + id + ".jpg", "wb")
# 読み書き
localfile.write(img.read())
img.close()
localfile.close()

上記を10000ファイルくらい繰り返しで取得する。 
が。 
img.read()のところでなぜか止まる。
  大体10個くらい読み込んだ時点で止まる。 

Traceback (most recent call last):
  File "***.py", line 62, in &#60;module&#62;
    localfile.write(img.read())
  File "C:Python25libsocket.py", line 291, in read
    data = [...]]]></description>
			<content:encoded><![CDATA[<p>サーバで画像に動的にExif情報を付加して、それをローカルのPythonで大量取得しようとしてハマったのでメモ。 </p>
<p>ローカル側は超省略するけど、以下のような感じ。 </p>
<div class="wlWriterSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:0e497e50-f2dc-40da-a0dd-84330a1632ba" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px">
<pre name="code" class="py"># URLをXMLから取得
image_path = i.find("Url").text
# 認証のかかっている場所から画像取得
img = urllib2.urlopen(urllib2.Request(unicode(image_path), None, {"Authorization": "Basic " + basicAuth}))
localfile = file('./' + id + ".jpg", "wb")
# 読み書き
localfile.write(img.read())
img.close()
localfile.close()</pre>
</div>
<p>上記を10000ファイルくらい繰り返しで取得する。 </p>
<p>が。 </p>
<p>img.read()のところでなぜか止まる。<br />
  <br />大体10個くらい読み込んだ時点で止まる。 </p>
<div class="wlWriterSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:65a5f519-2ee1-4987-9d8f-ab7c27332a68" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px">
<pre name="code" class="py">Traceback (most recent call last):
  File "***.py", line 62, in &lt;module&gt;
    localfile.write(img.read())
  File "C:Python25libsocket.py", line 291, in read
    data = self._sock.recv(recv_size)
  File "C:Python25libhttplib.py", line 509, in read
    return self._read_chunked(amt)
  File "C:Python25libhttplib.py", line 573, in _read_chunked
    line = self.fp.readline()
  File "C:Python25libsocket.py", line 331, in readline
    data = recv(1)
KeyboardInterrupt</pre>
</div>
<p>色々調べた結果、サーバ側でContent-Lengthを返さないと止まることがあるっぽい。 </p>
<p>ということでサーバ側をちょこちょこ修正。<br />
  <br />無事、止まらずに実行できるようになりました。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.loadlimits.info/2008/10/python%e3%81%a7%e3%80%81%e3%82%b5%e3%83%bc%e3%83%90%e3%81%8b%e3%82%89%e3%81%ae%e7%94%bb%e5%83%8f%e5%8f%96%e5%be%97%e3%81%a7%e6%ad%a2%e3%81%be%e3%82%8b/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PythonスクリプトをWindowsのexe形式にする</title>
		<link>http://blog.loadlimits.info/2008/10/python%e3%82%b9%e3%82%af%e3%83%aa%e3%83%97%e3%83%88%e3%82%92windows%e3%81%aeexe%e5%bd%a2%e5%bc%8f%e3%81%ab%e3%81%99%e3%82%8b/</link>
		<comments>http://blog.loadlimits.info/2008/10/python%e3%82%b9%e3%82%af%e3%83%aa%e3%83%97%e3%83%88%e3%82%92windows%e3%81%aeexe%e5%bd%a2%e5%bc%8f%e3%81%ab%e3%81%99%e3%82%8b/#comments</comments>
		<pubDate>Tue, 07 Oct 2008 09:31:00 +0000</pubDate>
		<dc:creator>hotpi</dc:creator>
				<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://blog.loadlimits.info/?p=95</guid>
		<description><![CDATA[特に迷うことは何もない。py2exeでさっくり。
Tutorial &#8211; py2exe.org
色々モジュールインポートしていても、難なく作成できる。pySerialとか使ってたけど余裕。
ただし、Vista SP1+Python2.5で作成したexeをXP SP2に持っていこうとしたら
プロシージャ エントリ ポイント _except_handler4_common がダイナミック リンク ライブラリ msvcrt.dll から見つかりませんでした
と表示されて実行できない。
msvcrt.dllのバージョンの問題らしいのだけど&#8230;？
現在調査中。というか主に.NET Frameworkをインストール中。どうかな。
]]></description>
			<content:encoded><![CDATA[<p>特に迷うことは何もない。py2exeでさっくり。</p>
<p><a href="http://www.py2exe.org/index.cgi/Tutorial" target="_blank">Tutorial &#8211; py2exe.org</a></p>
<p>色々モジュールインポートしていても、難なく作成できる。pySerialとか使ってたけど余裕。</p>
<p>ただし、Vista SP1+Python2.5で作成したexeをXP SP2に持っていこうとしたら</p>
<p><em>プロシージャ エントリ ポイント _except_handler4_common がダイナミック リンク ライブラリ msvcrt.dll から見つかりませんでした</em></p>
<p>と表示されて実行できない。</p>
<p>msvcrt.dllのバージョンの問題らしいのだけど&#8230;？</p>
<p>現在調査中。というか主に.NET Frameworkをインストール中。どうかな。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.loadlimits.info/2008/10/python%e3%82%b9%e3%82%af%e3%83%aa%e3%83%97%e3%83%88%e3%82%92windows%e3%81%aeexe%e5%bd%a2%e5%bc%8f%e3%81%ab%e3%81%99%e3%82%8b/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
