blog.monophile.net

コンピュータのこととかのメモ。

Takaaki Yamamoto

東京工業大学において計算機科学と応用数学を学び、 情報科学芸術大学院大学[IAMAS] においてメディア表現を専攻し修了。 現在は digitiminimi Inc. において、インフラエンジニアとして生計をたててている。

work

各種システム構築と管理を承ります。

Cloud PlatformOpenstack, GCP, AWS, Azure, ...
Openstackkeystone, glance, cinder, swift, neutron, nova, ...
VirtualizationQEMU+KVM, LXD/LXC, Docker, ...
OSDebian GNU/Linux, Ubuntu, CentOS, ...
NetworksIPSec, L2TP, VXLAN, WirelessAP, ...
WebAppsWordPress, GitLab, Redmine, ...
Configuration ManagementAnsible, Terraform, ...
MonitoringNagios, Munin, ...

posts

pylibloを使ってOSCメッセージを扱う

以前、pyOSCを使ってOSCメッセージを扱いましたが、今回はpylibloを使ってみます。 pylibloの方がpyOSCよりもpythonっぽいライブラリな感じがしますね。 # install  Debian/Ubuntuでは以下のコマンドで一発。

$ sudo apt-get install python-liblo

send

下記のpylibloのexampleコードを簡略化したものを載せます。

import liblo, sys
try:
    target = liblo.Address("127.0.0.1",8000)
except liblo.AddressError, err:
    print str(err)
    sys.exit()
liblo.send(target, "/foo/message1", 123, 456.789, "test")
 基本的なことは以上です。 もはやコメントも必要ないくらい簡単ですね。
["/foo/message1", 123, 456.789, "test"] -> 127.0.0.1:8000
 上記のメッセージを127.0.0.1:8000に送っているだけです。
recv
 続いて受信。 こちらも簡単だと思います。 add_methodでメッセージの区分を指定して、コールバックする関数を指定しているだけですね。 ポイントはadd_methodの引き数である'if'とかでしょうか。 'i'はint型を表し、'f'はfloat型を表します。 二回目のadd_methodは第一と第二引き数にNoneを指定することによって、 どの区分にも当てはまらなかったメッセージを処理する関数を設定しています。 そして最後に100[ms]ごとにメッセージを読みだしています。
import liblo, sys
try:
    server = liblo.Server(8000)
except liblo.ServerError, err:
    print str(err)
    sys.exit()

def foo_bar_callback(path, args):
    i, f = args
    print "received message '%s' with arguments '%d' and '%f'" % (path, i, f)

def fallback(path, args, types, src):
    print "got unknown message '%s' from '%s'" % (path, src.get_url())
    for a, t in zip(args, types):
        print "argument of type '%s': %s" % (t, a)

server.add_method("/foo/bar", 'if', foo_bar_callback)
server.add_method(None, None, fallback)

# loop and dispatch messages every 100ms
while True:
    server.recv(100)

参考URL