投稿

10月, 2009の投稿を表示しています

ubuntu に couchdb の trunk をインストール

couchdb をインストールした。 erlang のインストール sudo apt-get install erlang 依存パッケージ類のインストール sudo apt-get install gcc libtool automakehelp2man libicu38 libicu-dev libmozjs-dev spidermonkey-bin libcurl4-gnutls-dev couchdb の最新版をチェックアウト svn co http://svn.apache.org/repos/asf/couchdb/trunk couchdb couchdb の build とインストール cd couchdb ./bootstrap ./configure make && sudo make install /etc/init.d/ に couchdb のシンボリックリンクをはっておく sudo ln -s /usr/local/etc/init.d/couchdb /etc/init.d/ couchdb 系のスクリプトの所有者を couchdb にする /usr/local/var$ sudo chown -R couchdb /usr/local/var couchdb の起動 sudo /etc/init.d/couchdb start curl 経由でアクセスを確認してみる curl http://localhost:5984/ {"couchdb":"Welcome","version":"0.11.0b"} と表示されます。 追記: @voluntas 先生より Ubuntu 9.10 なら couchdb 0.10.0 が aptitude で入るよ。  とのことです。ありがとうございました。絶対にこっちが楽ですw

RTM.vim

PySpa#6 で RTM (Remember The Milk) を vim から操作するためのプラグイン RTM.vim を作成しました。個人的に欲しかったものだったので、3 日間をフル活用させていただきました。RTM でタスク管理している (今から利用される方も) vim 使いの方はぜひ使ってみてください。 インストール cURL (SSL は必須ではありません) のインストールと PATH の追加 ダウンロード URL: http://curl.haxx.se/download.html ※ Windows ユーザは curl.exe を vim.exe と同ディレクトリーにいれるか、PATH を追加 md5.vim (created by Yukihiro Nakadaira ) のインストールと plugins への追加 ダウンロード URL: http://www.vim.org/scripts/script.php?script_id=2806 Remember The Milk API Key の取得 取得 URL: http://www.rememberthemilk.com/services/api/keys.rtm ※ Non-commercial use (非商用利用) で利用可能 .vimrc へ取得した API Key などをセット rtm_api_key: 取得した api_key let rtm_api_key=' YOURAPIKEY ' rtm_shared_secret: 取得した shared secret let rtm_shared_secret=' YOURSHAREDSECRET ' RTM.vim のインストールと plugins への追加 ダウンロード URL: http://bitbucket.org/Surgo/rtm.vim/src/ ※ "get source" リンクからダウンロード可能 API 経由でのアクセスをアクティベート vim を起動し、以下のコマンドを実行し、アクティベート用の URL を取得 :RTM -a 取得した URL にアクセス・ログインし、承認 (vim は起動したまま) T

pyqt4 の widget に マウスなイベントハンドラを追加する

qt では QLineEdit などの QWidget に デフォルトではマウスなイベントハンドラがないらしい。なので、clicked, pressed, released などを connect しても無反応です。もし、デフォルトの QWidget にマウスなイベントハンドラーを追加したい場合は、本家 ML に Widget のサブクラスを作ってフックしろとあった。 from PyQt4 import QtCore, QtGui class QLineEdit(QtGui.QLineEdit): def __init__(self, parent=None): QtGui.QLineEdit.__init__(self, parent) def mousePressEvent(self, event): self.emit(QtCore.SIGNAL("pressed()")) def mouseReleaseEvent(self, event): self.emit(QtCore.SIGNAL("clicked()")) self.emit(QtCore.SIGNAL("released()")) 乱暴ですが、上記のコードでデフォルトのイベントをハンドリングできます。 clicked については Press と Release を両方フックする必要があると書いてありましたけど、いつどこで押されて、何秒以内に離されたかとか厳密に制御されたい型は実装しちゃってください(笑 他にも Qt では、デフォルトのイベントで渡ってくる情報が少なかったりするので、サブクラスでフックしちゃってます。

PyQt4 の qtdemo を PyInstaller で実行ファイル形式にする

vcredist のインストール (インストーラー) "C:\WINDOWS\WinSxS\x86_Microsoft.VC90.CRT_*" 配下に "msvcm90.dll", "msvcp90.dll", "msvcr90.dll" という dll が作成されている (フォルダが複数ある場合は最新のやつ) を、python path に複製する。 pywin32 のインストール (インストーラー) PyQt4 のインストール (インストーラー) PyInstaller のインストール これは svn から trunk をチェックアウトし、PATH に追加する svn co http://svn.pyinstaller.org/trunk/ pyinstaller-trunk PyInstaller の設定 python Configure.py さくっと demo を実行ファイル形式にしてみる (なんでもいい) cd \path\to\qtdemo\richtext\textobject Makespec.py -F -K -w textobject.pyw Build.py textobject.spec 実行するとメッセージがダーっと流れて、exe ファイルができる ... ... Appending archive to EXE C:\path\to\qtdemo\richtext\textobject\dist\textobject.exe 実行できるよ (textobject を実行するときは files ディレクトリを作成された exe がある dist ディレクトリ配下に複製してください)

ubuntu で nginx から memcache を利用する

memcached, python-memcache のインストールと起動 sudo apt-get install memcached python-memcache sudo /etc/init.d/memcached start 初期設定だと 11211 番ポートで起動しています。変えたい場合は /etc/memcached.conf で。 memcached とお話してみる (telnet 編) まずは telnet 経由でお話してみる。プロトコルについては official wiki を見ればいいと思います。 telnet 127.0.0.1 11211 Trying 127.0.0.1... Connected to 127.0.0.1. Escape character is '^]'. 'foo' という key で フラグ 0、無期限 (0)、 3 byte のデータ 'bar' を格納 set foo 0 0 3 bar STORED 'foo' という key の value を取得する get foo VALUE foo 0 3 memcached の情報を見てみる stats items STAT items:1:number 4 STAT items:1:age 56560 memcached とお話してみる (python-memcache 編) 上記の一連の流れを python-memcache でやってみる。 >>> import memcache >>> cache = memcache.Client(['127.0.0.1:11211']) >>> dir(cache) >>> cache.flush_all() # いったんクリアしといた >>> cache.set('foo', 'bar') True >>> cache.get('foo') 'bar' >>> nginx に memcach

ubuntu への nginx のインストールと load balancer としての利用

nginx のインストール aptitude で リポジトリからインストールしてみる。 sudo aptitude install nginx sudo /etc/init.d/nginx start nginx の初期設定 ubuntu では、(apache 同様) サイト毎の conf がモジュール化されており、default のモジュールは /etc/nginx/sites-enabled/default となっている。 sudo vi /etc/nginx/sites-enabled/default 私は apache2 同様、 ./sites-available/* にモジュール化したサイトの conf をつっこんでおき、 ./sites-enabled/* 内にシンボリックリンクを作成するようにしています。 nginx では、いまのところ apache2 のように a2emod などのコマンドがないため、自作しておくと便利かも(指定されたモジュールのシンボリックリンクをはるだけだけど・・・)。 ロードバランサの設定 テストとして、google のホストをロードバランスしてみる。ubuntu の nginx.conf は ./conf.d/* を include するため、 conf.d 内に loadbalance.conf を作成する。 sudo vi /etc/nginx/conf.d/loadbalance.conf 以下のように書いてみる。 upstream httpdcluster { server www.google.com:80; server www.google.co.jp:80; server www.google.co.uk:80; } server { listen 8080; server_name localhost; location / { proxy_pass http://httpdcluster; } } 例では、 httpdcluster と命名したサーバー郡をロードバランシングする。 これにより、 8080 番の /* を httpdcluster 郡に振り分けることができる。 http: