daemonfreaks.com

PythonでAMF

posted by jun-g at Mon, 14 Jul 2008 01:39 JST

PYthonでAMFを扱うためのライブラリにPyAMFというのがありまして、こいつにはDjangoやGAE、WSGI上で動作させる為のゲートウェイモジュールが含まれていて、サイトに掲載されているサンプルもそれらを利用したものになっているのですが、そもそもそういったフレームワークが使えない、WSGI準拠でもない既存の環境で使用するにはどうすれば良いのか今ひとつわからなかったので、ちょろっと調べて、サイトにあるHelloWorldを動作させる為のシンプルなCGIを書いてみました。

#!/usr/bin/env python
# coding: utf-8

import sys
import pyamf
import pyamf.remoting.gateway

def echo(value):
    return value

services = {"echo": echo}

base_gateway = pyamf.remoting.gateway.BaseGateway(services)
context = pyamf.get_context(pyamf.AMF0)
pyamf_request = pyamf.remoting.decode(sys.stdin.read(), context)
pyamf_response = pyamf.remoting.Envelope(pyamf_request.amfVersion,
                                         pyamf_request.clientType)

for name, message in pyamf_request:
    pyamf_response[name] = base_gateway.getProcessor(message)(message)

print "Content-type: %s\n" % pyamf.remoting.CONTENT_TYPE
print pyamf.remoting.encode(pyamf_response, context).getvalue()

とまあ、こんな感じで、リクエストデータをPythonオブジェクトに変換、処理結果をAMFに変換してレスポンス、とすれば良いみたいです。何者にも依存しない最小の処理が分かれば既存の環境への組み込み方も考え易くなりますね。

ちなみに、Flexを全然触っていないので、AMF3で新たに扱えるようになったオブジェクトがそれぞれどういったものなのか、さっぱりわかっていません…。まずい…。

あと、FreeBSD portsにPyAMFが存在しなかったので、作ってsend-prしておきました。ports/125573です。

そんなこんなで、今日もわさびむの更新は無しです。という言い訳を書きたかっただけなのでした。

Flex勉強中

posted by jun-g at Mon, 04 Feb 2008 02:14 JST

WineのおかげでWindows版Firefox2+Flash9も動くようになったので、ダラダラとFlexの勉強中。開発環境は、FreeBSD + Flex2SDK(日本語版) + FlexCompilerShell + vim。

最初のお題として、電卓を作ってみた。

肝心の計算ロジックはevalでごまかそうと思ってたのに、AS3ってevalが使えないみたいで自前でゴリゴリ書くハメになった。そして勢いで書いたらグダグダなコードになった…。うーん…、ま、いいか。

次は動きのあるUIとか、サーバと連系する何かとか作ってみよう。

FreeBSD + Wine で Flash9 を使う

posted by jun-g at Sun, 27 Jan 2008 17:46 JST

なんだか最近Flex/AS3が流行っているみたいで、丁度最近FreeBSDのports treeにもFlex2 SDKがcommitされたので僕も勉強しよう、って思ったんやけど、肝心のFlash9が動かないというガッカリな状況なので諦めていたところ、Wine上のFirefox+Flash9が結構安定して動作するという情報があったので試してみた。

ちなみに、手元の環境は1/19頃の6-STABLEで、Wineのバージョンは0.9.54。デスクトップ環境はGNOME 2.20.3。

まず、6系の場合はカーネル回りにパッチを当てる必要があるようなので、FreeBSD WikiのWineのページからパッチを入手し、手順どおりにパッチを当ててmake worldしておく。

次にWineのインストール。ports treeのemulators/wineで

# make install clean

すればOK。6Rを使用していて前述のとおりカーネルにパッチを当ててmake worldした場合はWineも再度ビルド/インストールし直す必要があるみたい。あと、無用なトラブルを避けるために~/.wineがある場合はリネームして退避しておく。

次はX.Orgの設定。Composite Extentionを無効にしないとWineが動作しないようなので、/etx/X11/xorg.confを編集し、

Section "Extensions"
        Option       "Composite" "false"
EndSection

としておく。

次にWindows版Firefoxをインストールする。ここから日本語版をダウンロードして

$ wine Firefox\ Setup\ 2.0.0.11.exe

でインストーラが起動する。インストールが完了したらデスクトップに「Mozilla Firefox」のアイコンが出来上がるので、ダブルクリックでWineのFirefoxが起動する。

次にFlash Playerのインストール。ダウンロードはここから。ダウンロードしたら、

$ wine install_flash_player.exe

でインストーラが起動してインストールできる。インストールが完了したら、Firefoxを再起動してアドレスバーに about:plugins と入力して、Flash9プラグインが問題なくインストールされているか確認。

about:plugins

ここまで出来た状態で、Flash9を使用しているサイトがそこそこ普通に見られるようになっているはず。映像が欠けたり、音に時折ノイズが乗ったりするけど、落ちたりはしない。感動。

次に、もうちょっと実用的に使うためにWineの設定を行う。

まず、そのままだとWineで動作しているアプリケーションに日本語入力が出来ない。これを可能にするため、~/.wine/user.regに

[Software\\Wine\\X11 Driver]
"InputStyle"="root"

を追記する。これで日本語入力が可能になる。

あと、Wineの仕様として、英字フォントが指定されていてテキスト内に日本語(非ASCII文字)が混じっている場合、その日本語テキストには代替フォントが適用されずにそのまま文字化けしてしまうみたい。このため、Flex2でフォントの指定なしに生成したswfファイルや、ニコニコ動画のコメントなどがすべて「<」という文字に文字化けしてしまう。

TwitterでnitoyonさんにFlex2のデフォルトフォントはVerdanaだと教えてもらったので、~/.wine/system.regの

[Software\\Microsoft\\Windows NT\\CurrentVersion\\FontSubstitutes]

のエントリに

"Verdana"="IPAPGothic"

を追加すると、IPAPゴシックフォントが使用されるようになり、Flex2でフォントの指定なしに生成したswfファイルの文字化けが直る。

Hello, World!

次にニコニコ動画。色々試してみたところ、ニコニコ動画のコメントはフォントに「Arial」を指定しているっぽい。という事で前述の~/.wine/system.regのFontSubstitutesのエントリに

"Arial"="IPAPGothic"

を追記。これでコメントがちゃんと見られるようになる。

ニコニコ動画

これで思う存分ニコニコ動画が観られるAS3の勉強が出来るようになった。やったね。とはいえ、こんな苦労しなくても良いように早くFreeBSDネイティブなFlash9プラグインが配布されればいいのに。

以下、参考にしたページ。