Python ポケットリファレンス
昨日買い忘れた一冊を購入。
■Pyinotify
http://trac.dbzteam.org/pyinotify
こんな便利なものがあるじゃん!
今日はインストールだけしとくか。
sudo easy_install pyinotify
完了。
py-kqueueという便利そうなものを発見。
■py-kqueue – スコトプリゴニエフスク通信
http://d.hatena.ne.jp/perezvon/20080330/1206879201
ここにあるように、
sudo easy_install py-kqueue
で、インストール・・・出来ない!!
sys/event.hが無いんだって。
sudo aptitude install libevent-dev
これで、event.hはインストールされたはずだが同様のエラー。
kqueuemodule.c内の”sys/event.h”を”event.h”に変えてもエラー発生。
う~ん・・・。
効率のよい、ファイルの監視はどうすべきなのだろうか?
特定のディレクトリ配下を毎回全スキャンしても、平気なくらいのファイル数しかないが、それでも0.5秒に一回スキャンするのはちょっと・・・と思いつつ、ファイルをハッシュで管理しても、変更があったか確認するために変更時刻は比較してるしなぁ。
変更時刻を得る処理は重たいのか?
この辺は・・・カーネル関係の本が必要?
ちょっと調べたらこんな感じ。
■ファイル更新の監視 どう書く?org
http://ja.doukaku.org/15/nested/#comment461
・・・って自分で書いたのと変わらない。
これでいいのかな?
.Net FrameworkにはFileSystemWatcherなるものがあるらしい。
■FileSystemWatcher クラス (System.IO)
http://msdn.microsoft.com/ja-jp/library/system.io.filesystemwatcher(VS.80).aspx
アセンブリ: System (system.dll 内)
なんて書いてあるけど、こいつはカーネルレベルで監視!?
どっちにしても.Netは関係ないんだけど
RPCで呼び出したシステムが動作してくれない。
と思ったら不具合なのか仕様なのかわからないけど、定期的に関数を呼ぶ必要があるようだ。
その関数と言うのはなんでもよくて、
def dummy(self):
pass
なんてのでもOK。
これってひどくないか?
RPCで呼びたいときに呼んでるのに、定期的に(例えば0.5秒間隔)関数を呼ばなければならないのか?
ちょっとソースを見てみたけど、どこが原因かわからず。
TCP関連のソースまで辿り着いてしまったので、この件はバージョンアップと供に解決すことを願い、後回し。
Comet Daily » Blog Archive » Scalable Real-Time Web Architecture, Part 2: A Live Graph with Orbited, MorbidQ, and js.io
http://cometdaily.com/2008/10/10/scalable-real-time-web-architecture-part-2-a-live-graph-with-orbited-morbidq-and-jsio/
このチュートリアルを参考していたが、なぜかエラーが・・・。
仕組みが分からずチュートリアルをやっていたこともあり、不明点だらけのため、なかなか進まず。
仕方ないので、エラー箇所を特定すべく、ひとつひとつ追って行った。
追えばデバッグの仕方も自然と身につくものだ・・・初めはあんなにわけのわからないエラーログが、読めばいい場所がわかってくる。
で、結果的に追っていくと最後のJSON通知でエラーが発生しているらしい。
早速ググってみると同じ現象の人発見!
Stomp / IE6 fixes) so I’d – Orbited Discussion | Google グループ
http://groups.google.com/group/orbited-users/browse_thread/thread/03486da9596e9dd1/c561d4a26e8e7046?show_docid=c561d4a26e8e7046&pli=1
さらに記事を読んでいくとpython-cjsonパッケージを使えと書いてある。
パッケージを使えとあるが、Python環境はここで閉じておきたいのでsetuptoolsを使う。
sudo easy_install python-cjson
これだけで解決した。
さらにコメントの主を見てみると・・・どこかで見覚えがあるMichael Carterさん。
チュートリアルの人だ!!
名前を覚えるつもりは無かったけど、何十回も見ていたページなだけあって、知らずと記憶に残ってたらしい。
これくらい追っていれば多少なりともなんか身に付くよね、と思った。
sudo aptitude install build-essential
sudo aptitude install python-devsudo easy_install twisted
sudo easy_install orbited
sudo easy_install morbid
[tutorial]How to: Django, Comet, Orbited, Stomp, MorbidQ, js.io | Thought Outflux | Anirudh Sanjeev
http://anirudhsanjeev.org/tutorialhow-to-django-comet-orbited-stomp-morbidq-jsio/
Comet Daily » Blog Archive » Scalable Real-Time Web Architecture, Part 2: A Live Graph with Orbited, MorbidQ, and js.io
http://cometdaily.com/2008/10/10/scalable-real-time-web-architecture-part-2-a-live-graph-with-orbited-morbidq-and-jsio/
ホームディレクトリにPythonの環境を整えてくれるvirtual pythonというものもあるのだが、Ubuntuの場合、site-packagesディレクトリではなく、dist-packagesという名前のせいで動作せず。
コードを書き換えるか、dist-packagesにシンボリックリンクを張れば解決出来そうだけど、ノートPC自体自分の環境なので今回はいいや。
Orbited – Networking for the Web
http://orbited.org/
この情報、国内は少ない!
cometを使いたいのだが、ちょいとイレギュラーな使い方になりそうだ・・・。
今日は”おい〜!!”ってことがあったが、書けないので、書かず、Python2.6の話でも。
Ubuntu 8.10でPython2.6を使おうとすると何かと困る。
例えば、メニュー設定がうまく動かなかったり、dpkgの依存関係で怒られたり・・・と。
そんなわけで、Ubuntuの構成上は2.5を使い、Django関係は2.6を使うという状態になってる。
CentoOSでPython2.6 & mod_pythonを使おうとするとこれまた大変らしい。
パッケージ管理を行っているOSはパッケージで済ませたいところだが、そうも行かないらしい。
と言うわけで大変だったという話を聞いた。
SRPMを使えば依存関係をそれなりに維持しつつ出来るかもしれないが、テストする環境がないので、機会があれば。
Ubuntu 9.04ではPython2.6が搭載されてるということで楽しみだったりする。
・・・のだが、MacBookでいきなり動くとも思えないので、人柱の状況を見つつ、移行予定。
Ubuntuのメニューを変更する”メインメニュー”が開かない。
原因はPython2.6にしたことだった。
意外とPythonがOSに関わっていることが多くてびっくり。
OSはPython2.5に戻し、Eclipseの設定だけPython2.6にしておこう。