<   2007年 06月 ( 7 )   > この月の画像一覧
apache から zope につなぐ (VirtualHostMonster と Apache proxy_module) 続き
LANの外からアクセスしたところ,やはり ZWiki のアイコン画像をうまく参照できていない. http://foo:8081/ のように apache を介さずアクセスすれば問題ないが, http://foo:80/zp/ のようにすると駄目なので, URL を zope に引き渡す際の問題と思える.

/var/log/apache/error.log で File does not exist となっているアイコン画像ファイルについて,ブラウザから直接 zope にアクセスした場合に対応する URL を探ってみた.その結果, /var/www/misc_/ZWiki/star_icon は http://foo:8081/misc_/ZWiki/star_icon が, /var/www/p_/sp は http://foo:8081/p_/sp が,対応するファイルであることがわかった.

そこで, /etc/apache/httpd.conf における mod_probe の設定において,上記に対応する行,すなわち

ProxyPass /p_ http://localhost:8081/VirtualHostBase/http/foo:80/VirtualHostRoot/_vh_zp/p_/
ProxyPassReverse /p_ http://localhost:8081/VirtualHostBase/http/foo:80/VirtualHostRoot/_vh_zp/p_/
ProxyPass /misc_ http://localhost:8081/VirtualHostBase/http/foo:80/VirtualHostRoot/_vh_zp/misc_/
ProxyPassReverse /misc_ http://localhost:8081/VirtualHostBase/http/foo:80/VirtualHostRoot/_vh_zp/misc_/
を追加したところ,この問題は解決した.fastcgi 方式でも同様の変換をすべきだったのだろう.
[PR]
by edogawadai_bio | 2007-06-20 01:54 | comp
apache から zope につなぐ (VirtualHostMonster と Apache proxy_module)
fastcgi による apache から zope へのリクエスト割り振りを試みたところ, ZWiki のアイコン画像の参照だけうまくいかなかった.このとき var/log/apache/error.log には下記のように表示された.

[Fri Jun 15 14:37:34 2007] [error] [client 192.168.1.2] File does not exist: /var/www/misc_/ExternalEditor/edit_icon
[Fri Jun 15 14:37:34 2007] [error] [client 192.168.1.2] File does not exist: /var/www/misc_/ZWiki/star_icon
[Fri Jun 15 14:37:34 2007] [error] [client 192.168.1.2] File does not exist: /var/www/p_/sp

「 apache zope 」を検索語で調べると, Apache でアクセスを受け取り,一部を Zope に任せる方法は他にも幾つかあるらしい.そのうち「 VirtualHostMonster と Apache のプロキシ機能を使う方法」は簡単そうであり,丁寧な説明のあるページを見つけたので,これを用いることにした.
http://desktop.good-day.net/blog/index.cgi/software/zope/plone/publish.htm
http://desktop.good-day.net/blog/index.cgi/software/zope/plone/mapping.htm

試した環境および意図する設定は下記の通り.
machine: debian/etch (192.168.1.2)
zope2.9: LANでは port 8081 でリクエストを受けとる. http://192.168.1.2:8081/manage/ で ZMI .
外部からは apache を介して, port 80 で受けとる. http://foo/zp/manage/ で ZMI . (foo はインターネット上でのホスト名とする)
apache1.3: port 80 で受けとる.

つまり, http://foo/zp/* は Zope が,他は Apache が,という風にして処理の振り分けを行なう.

1. ZMI (Zope Management Interface) にて VirtualHostMonster 導入

http://192.168.1.2:8081/manage にブラウザでアクセスし,ZMI画面へ行く.「 VirtualHostMonster 」というプロダクトを右上の Add にて追加する. ID を尋ねられるが,空白でなければ適当でよいらしい.試した環境では,Add したところ下記のエラーがあらわれた.

Site Error
An error was encountered while publishing this resource.

Error Type: BadRequest
Error Value: This container already has a Virtual Host Monster

「すでにある」とのエラー内容から,あらためて ZMI の root folder を眺めると,最下行の virtual_hosting という ID のインスタンスが, VirtualHostMonster であることがわかった.つまり既に導入されていたということになるが,自分で行なった覚えはないので何らかのパッケージのインストール時のデフォルト設定だと思う.

とりあえず既に存在していることがわかったから,次に進む.

2. apache の proxy_module を有効にする

/etc/apache/modules.conf において proxy_module が存在するかを確認する.

% grep proxy_module /etc/apache/modules.conf
LoadModule proxy_module /usr/lib/apache/1.3/libproxy.so

存在しない場合は,同ファイルを管理する下記コマンドを実行してみる.

% sudo /usr/sbin/apache-modconf apache

試した環境では,これにより有効になった.

3. apache の VirtualHost 設定

/etc/apache/httpd.conf を編集し,ファイル末尾に下記を加える.

NameVirtualHost *
<VirtualHost *:80>
ServerName foo
ProxyRequests Off
<Directory proxy:*>
Order deny,allow
Allow from all
</Directory>
ProxyPass /zp http://localhost:8081/VirtualHostBase/http/foo:80/VirtualHostRoot/_vh_zp/
ProxyPassReverse /zp http://localhost:8081/VirtualHostBase/http/foo:80/VirtualHostRoot/_vh_zp/
</VirtualHost>

そして apache の再起動.

% sudo /etc/init.d/apache restart


4. 確認

LAN 内部では http://192.168.1.2/manage/ で ZMI に至ることを確認.
LAN 外部からの確認は, http://foo/zp/公開設定のページ に外からつながることを確認.
[PR]
by edogawadai_bio | 2007-06-17 05:55 | comp
apache から zope につなぐ (fastcgi)
解放するポートを80番だけにしたい,かつ,apache と zope を両方使いたい,ということで,80番ポートで apache を動かしておき,一部のアクセスは zope に処理を任せるようにした.http://ns.jk.to/zwiki/InstallMemo を参考にした.

チェックには エキサイト翻訳 のウェブ翻訳を利用させてもらった.
[PR]
by edogawadai_bio | 2007-06-16 00:18 | comp
fuga
最近,『怪物王女』という漫画・アニメが気に入っている.とくにフランドルという「ふが」としか言わない人造人間が良い.「ふが」はもちろん,藤子不二雄の『怪物くん』のキャラクターであるフランケンの「ふんがー」から来ている.しかし「ふが」自体,何か親しみを覚えるというか馴染み深い響きだ.

…と思っていたら,国産メタ構文変数 fuga と同じであることに気がついた.同系列のメタ構文変数 hoge は一説によると藤子不二雄作品に由来するらしい(↓)が, fuga についてもルーツは一緒なのかもしれない.

ほげを考えるページ http://kmaebashi.com/programmer/hoge.html
[PR]
by edogawadai_bio | 2007-06-16 00:05 | niji
zope timezone bug ?
COREBlog2 および zwiki on plone において追加したエントリの作成日時が,実際より数時間くらい進んでいることに気づいた. zwiki については気にしなければどうということでもないが, COREBlog2 については未来のエントリとして扱われてしまい,表示に支障をきたしていた.

タイムゾーンの問題かと思い設定箇所を探したものの, 非 plone の zwiki における option 以外に見つけられなかった. あきらめかけていたところ, zope 2.9.6 においてシステムのタイムゾーンがグリニッジ標準時 (GMT) 以外だと現れるバグがあるらしい,という 情報(例えば http://www.zope.org/Collectors/Zope/2191 )に行き当たった.

debian/etch のパッケージとして導入したこともあり, zope 自体のバージョンを上げる気になれず,タイムゾーンを GMT にして回避を試みる.

/etc/timezone を Asia/Tokyo から Etc/GMT などに変えればいいのだが,直接編集してよいものか判らなかったので,下記の方法をとった.


% sudo tzconfig
Your current time zone is set to Asia/Tokyo
Do you want to change that? [n]: y
Please enter the number of the geographic area in which you live:
1) Africa 7) Australia
:
Number: 12

GMT GMT+0 GMT+1 GMT+10 GMT+11 GMT+12 GMT+2 GMT+3 GMT+4 GMT+5
:
Please enter the name of one of these cities or zones
You just need to type enough letters to resolve ambiguities
Press Enter to view all of them again
Name: [] GMT
Your default time zone is set to 'Etc/GMT'.
Local time is now: Wed Jun 13 17:15:56 GMT 2007.
Universal Time is now: Wed Jun 13 17:15:56 UTC 2007.

% cat /etc/timezone
Etc/GMT

[PR]
by edogawadai_bio | 2007-06-14 17:48 | comp
COREBlog2 の設置
COREBlog2 を試してみる. debian/etch においては,対応するパッケージ導入後,下記のようにすると利用できた.

% cd /var/lib/zope2.9/instance/plone-site/Products
% sudo ln -s /usr/share/zope/Products/COREBlog2 .
% sudo /etc/init.d/zope2.9 restart
% (Plone に管理者権限でログインし,頁右上「サイト設定」で COREBlog2 を追加)

Plone は動作が重いとは聞いていて実際にそうだなと感じたが,その上で動く COREBlog2 や zwiki はさらに遅い. Plone 上でない zwiki はそんなでもないのだが….
[PR]
by edogawadai_bio | 2007-06-11 23:56 | comp
Linux環境でのImageJのバージョンアップ
数ヶ月ぶりにImageJのバージョンアップをした(1.38d→1.38t).

ZIPファイルの入手~展開

http://rsb.info.nih.gov/ij/download/src/ に最新版のソースファイルがZIP形式でおいてある.
http://rsb.info.nih.gov/ij/download.html
からは安定版(1.37)がダウンロードできるが,上記に比べて古い(現在のところ2006年秋のリリース).

% cd opt/ImageJ
% wget http://rsb.info.nih.gov/ij/download/src/ij138t-src.zip

以前のバージョンのファイルを退避する.
% mv api api_backup
% mv ij.jar ij.jar_backup

展開する.
% unzip ij138t-src.zip
% mv source src-138t
% cd src-138t

ソースの整形

ImageJ用プラグインを作成する際には,ImageJのAPIを使う必要がある. ImageJのAPIドキュメントはjavadocで生成できるが,その記述は十分ではない.その場合にはソース自体を参照する必要があるが,インデントや改行コードがまちまちであり, 読みづらいので統一する.

余分なファイルが入っていることがあるので,javaソースファイル以外を列挙し,必要に応じて削除する.

ファイル名を眺める.
% find ij -type f | grep -v "\.java"
% find -type f | grep -v "\.java"

余計なファイルを消す.
% rm .FBCIndex
% rm -rf .FBCLockFolder
% rm .gdb_history

改行コードをLF(0x0a)に統一する.
% find ij -type f | xargs ~/bin/2jis.pl

ImageJには改行なしの"}"で終わっているソースファイルが60くらいある.文法的に間違いではないようだが,astyleによる整形時に問題になる(astyle 側のバグ? "}"が一つ多く出力されてしまう).そのため,前もってファイル末尾が改行で終わるように書換える.tail_ret.pyはそのためのスクリプト.

% find ij -type f | xargs ~/bin/tail_ret.py

astyleでソースファイルを整形.
% find ij -type f | xargs astyle -j --style=java -p -s

もとのファイルがfoo.java.origなどとなっているので消す.
% find ij -type f -path '*\.java\.orig' | xargs rm

コンパイル

(あれば)パッチをあてる.

% patch ij/plugin/AboutBox.java ~/aboutbox.patch

コンパイルし,ij.jarを作る. ただし開発環境であるLinuxでの実行はij.jarではなくbuildを直接使うようにする. IJ_Props.txtのカスタマイズを容易にするため.

% ant build

About画面のカスタマイズ.動作には不要.
% cp ~/about_image.jpg build/about_add.jpg
% ant build

APIドキュメントを../apiに作る.
% ant javadocs

環境設定

build/IJ_Props.txt

ij/Prefs.javaで読み込む.ij.jarにクラスファイルを格納して実行する様式の場合,ij.jar内に入ってしまうので編集が面倒になる.
メインメニュー・ポップアップメニューの全構成を管理する.例えばpopupの最後に popup13=Save などと追加することで画像の右クリックメニューからファイル保存可能になる.
ショートカットキーの一部を管理する.メニュー項目を直接起動することによる.例えば lookup04="Fire"... を lookup04="Fire[L]"... に変更すると,Lキー押下で起動する.

IJ_Prefs.txt

ij/Prefs.javaで読み込む.Windowsの場合,ImageJのインストールディレクトリ(C:\Program Files\ImageJ\等)に存在する.MacOS Xの場合,/home/ユーザ/Library/Preferences/ に存在するらしいが,未確認.Linux場合,/home/ユーザ/ に存在する.
ImageJの終了時に更新されるため,編集する際にはImageJを終了させておくとよい.
ショートカットキーの一部を管理する.メニューPlugins-Shortcutsから追加・削除できるものと同じ.IJ_Props.txtのショートカットキーと重複する場合は無効となる.
最近開いたファイルの一覧や,ImageJのメニューから設定可能な項目を管理する.
プラグインからも,Prefsオブジェクトを用いることで各種パラメタをIJ_Prefs.txtに管理させることができる.

変更点

http://rsb.info.nih.gov/ij/notes.htmlにまとめられている.

開発していて気づいた変更点として,ver. 1.38rでのGaussianBlur.javaの大幅改訂がある.publicメソッドの一部も変更されているため,同ファイルを利用するプラグインについても対応が必要.カーネルサイズが大きい場合,多重解像度を用いて高速に処理するようになった(ソースファイルをざっと読んだ限りでは).それにともない,パラメタが「カーネル幅(画素単位)」から「正規分布の分散」に変更された.従来のパラメタの1/2.5くらいの数値を用いると同等の結果になるらしい.つまり以前 25だったら,新版では10とのこと.
[PR]
by edogawadai_bio | 2007-06-08 23:41 | img