So-net無料ブログ作成

Zope3 のメッセージカタログ [Zope 3]

Zope 3.2 b2 を入れてみたら、メッセージが日本語になってた。
http://www.zope.org/Products/Zope3/3.2.0b2/Zope320b2Released
気づいてなかったけど、 b1 の時から日本語が出るみたい。

ありがたやありがたや。
まぁ、日本語のドキュメントが無い今は、メッセージが日本語化されてるのは結構じゃまなんですが
#「本に書いてある xxxx というのは、日本語の yyyy のことなんだな」と考えなきゃいけないし・・
「日本語化されているか?」という問いが「日本語がちゃんと取り扱えるか?」ではなく、ただ単に
「日本語のメッセージが表示されるか?」という意味のことが多い気がする。
(私は、日本語が正しく取り扱えればメッセージは英語でいいです。)
これで(まだ途中かも知れないですが)「標準で日本語化されてます」と大手を振って言える。

ここらへんでやっているみたいです。
http://wiki.zope.jp/Zope3TransJa

メッセージは全部英語になってもいいので、Introspector に
「動的に提供されているインターフェースはありません」なんて言われたくない人は、
zope/app/locales の ja というディレクトリから下を削除すればいいみたいです。


The Zope 3 Developer's Handbook の 13章 [Zope 3]

http://www.zope.org/Wikis/DevSite/Projects/ComponentArchitecture/Zope3Book/contentobject.html
インストールとか概要っぽい話を12章までで終えて、いよいよサンプルパッケージを作る最初の章。
この章の中で、最低限動作するパッケージを作る手順が完結しているので、パッケージ作成のための自分の理解を図るためにメモっておく。

この章をマスターすると、ZODB にオブジェクトを登録したり見たりする事が出来る。
(自分の思った見た目で見るためには 14章の知識が必要)

この章で出来るソースはこちら↓から参照できる
http://svn.zope.org/book/trunk/messageboard/step01/

[大まかな機能]
ツリー型の掲示板。MessageBoard が全体のコンテナになって、
MessageBoard は中に Message を持つことが出来る。
Message は 中に Message と File を持つことが出来る。

[インターフェースを書く]←ここ一番大事!
http://svn.zope.org/book/trunk/messageboard/step01/interfaces.py?rev=27149&view=auto
Zope3 のインターフェースとは、オブジェクトがどんなメソッドやプロパティを持っているかを宣言するためのもの。
オブジェクト同士は、インターフェースを介してのみやり取りするので、どんな機能を持つかはインターフェースを見れば分かる。
実際に、どんな動作をするかは、それを implements() しているクラスに書く。
(以下、書いてあることのだいたいの意味合い)
IMessage
→Message は title と body プロパティを持つ。
IMessageBoard
→MessageBoard はコンテナで、子供として IMessage しか持てない。description プロパティを持つ
IMessageContained
→Message は、IMessage か IMessageBoard の子供にしかなれない。
IMessageContainer
→Message は、コンテナで、子供として IMessage か IFile しか持てない。

IMessage を IMessageBoard と同じように、IContainer から派生させて良い場合もあるが、
今回の例では Message が、
・子供に Message(とFile) を持つことが出来る(IMessageContainer で定義)
・親には Message(とMessageBoard)がなれる(IMessageContained で定義)
という特性を持つため・・・つまり、IMessage の宣言の中に再帰的に IMessage を使わなくちゃいけなくなるために(でもって、それはできない)
Message の持つインターフェースを3つに分けて、
Message クラスがその3つのインターフェースを implements するようにしている。

[テストケースを書く]
http://svn.zope.org/book/trunk/messageboard/step01/tests/
やってることは、クラスの実装コード(messageboard.py, message.py)の docstring からテストを実行すること。
クラスの docstring の中では、クラスが必要なインターフェースを implement しているか(VerifyClass)と、プロパティの読み書きのテストだけしている

この本のように、tests パッケージ(ディレクトリ)にしなくても、
http://oss.timedia.co.jp/index.fcgi/kahua-web/show/Zope3/%c4%b6%a5%b7%a5%f3%a5%d7%a5%eb%a4%ca%a5%a2%a5%d7%a5%ea%a5%b1%a1%bc%a5%b7%a5%e7%a5%f3%a4%f2%ba%ee%a4%ed%a4%a6%20%a4%bd%a4%ce2
の「テストコードを書く」のように、tests モジュール(tests.py という1つのファイル)にまとめてもよい。

[実装コードを書く]
http://svn.zope.org/book/trunk/messageboard/step01/messageboard.py?rev=27149&view=auto
http://svn.zope.org/book/trunk/messageboard/step01/message.py?rev=27149&view=auto
この章では、ほとんど何もやってない。implements するフェースを記述する以外は、プロパティの初期化だけ。
#次の章(14章)では、ZPT で View を作るときに、ZPT から呼ばれるメソッドをクラスに実装してる。
Zope 3 は UNICODE 中心で動いているので、文字列の初期値は UNICODE で指定してね。

[configure.zcml を書く]←ここ二番目に大事!
http://svn.zope.org/book/trunk/messageboard/step01/configure.zcml?rev=27149&view=auto
configure.zcml を書くことにより Zope 3 にコンポーネントを登録できる。
IAttributeAnnotable を implements するよー、と宣言しておくと Zope3 が metadata(Dublin Core) のプロパティに値をセットしてくれる。
IContentContainer を implements するよー、と宣言することにより、Content Space のコンテナだなってことが Zope 3 君に理解できる。
IAttributeAnnotable や IContentContainer は、宣言するだけで Python の実装コードで、何かメソッドを定義するわけじゃないので marker interface と言うんだそうな。

permission はインターフェースに対して設定する。↓その他は、実物を見て推測して
http://svn.zope.org/book/trunk/messageboard/step01/configure.zcml?rev=27149&view=auto

[View を書く]
http://svn.zope.org/book/trunk/messageboard/step01/browser/configure.zcml?rev=27149&view=auto
browser ディレクトリの中の configure.zcml を記述することにより、入力フォームや view を作成。
http://svn.zope.org/book/trunk/messageboard/step01/browser/configure.zcml?rev=27149&view=auto
ZPT(HTML) を書かなくても、最低限の View はできますよ、という例。
・コンテンツを表示する(containerViews)
・コンテンツを追加する(addform)
・コンテンツを編集する(editform)
・Zope3 のメニューに追加フォームへのリンクを追加する(addMenuItem)

ZPT で書いた View を作りたいと言う場合は、14章参照
http://www.zope.org/Wikis/DevSite/Projects/ComponentArchitecture/Zope3Book/componentviews.html


Zope3 の PAU の設定(その2) [Zope 3]

http://blog.so-net.ne.jp/nakagami/2005-11-17 のつづき

Pluggable Authentication Utility (PAU)で、ユーザーを割り当てることができて、
人の単位で権限を付与することはできたけど、複数の人に 一度の操作で Grant する方法が
どっかにあるはずだぞ・・・と思っていたが、Group Folder というプラグインを使えばいいらしい。
PAU の Plugins に、Group Folder を追加し、その Group Folder に Principal Folder 等からユーザーを検索して追加してあげると、Group Folder の単位で権限を付与できることが分かった。

考え方として、Plone の Group User Folder と同じ。
#Zope 3 をいじってると、随所で Zope/Plone の考え方が役に立ってとってもうれしい。

Group Folder プラグインを使わなくても、Content Space の Grant で、
principals.zcml から検索して Authenticated Users に権限を与えておけば、
Principal Folder で認証されたユーザーが その権限が使える。

Group Folder を使おうとすると、ユーザーを登録するたびに、Group Folder にも追加しなきゃいけないような場面もあるが、組み合わせで何とかなるか・・・って感じ。
Group Folder の中に Group Folder を追加することも出来るので、XXX部 に A課と B課と C課 があって、それぞれの課に、課員が登録されているっていう感じにも、一応できる。

その他、ここまでで気づいた点。
Group Folder を Add するときに入力した Group ID prefix を見る方法がないぞ?
Principal Folder Prefix は、Prefix タブで見ることは出来る(変更はできない)。
いずれにせよ、Register As の時に入力された値は、PAU の Configure で設定するのに使うけど、
途中で変えられないので、名前選びは慎重にしよう


Zope3 の PAU の設定(その1) [Zope 3]

1. Content Space で Folder を作って、Make a site (任意)
今回は test という Folder を作ったとして。
2. 1.の直後の画面、もしくは Content Space から ManageSite の中の default
( http://localhost/test/++etc++site/default/@@contents.html )で Plugable Authentication Utility を Add
3. Prefix は ブランク Object Name は入れないと適当に振ってくれる で Add
4. Register ボタンを押下
5. 次の画面 ( http://localhost/test/++etc++site/default/.../addRegistration.html ) で、Add
(The permission required for use は no value でOK)
6. Plugins タブで、Principal Folder を Add → Register
(Prefix と Register As の値を適当に入れる。)
7. 5.で作ったオブジェクト PluggableAuthentication の Configure タブで
・Credentials Plugins で Session Credentials を選択
・Authenticatior Plugins で 6.で Register As で設定したものを選択
して、Change
8. 6.で作ったオブジェクト PrincipalFolder の Contents タブで Add
9. Login(ex:nakagami)/Password/Title(ex:Hajime Nakagami) を入力して Add
ここまでで、ユーザー Hajime Nakagami(nakagami) ができる

10.Content Space ( http://localhost:8080/test/@@contents.html )で、Grant
11.PrincipalFolder で Search すると、Hajime Nakagami が選択できるようになるので Apply
12. Grants for the selected principal のところの「Site Manager」を Allow にして Change

この状態で、Site に対して Manager 権限が Hajime Nakagami に与えられる


kinterbasdbda [Zope 3]

そういえば、Firebird の Zope3 用 DA を psycopgda を改造して作りました。
#改造というより、ソースを刈り込んだって感じですが。
ここ↓に置いておきます。
http://www005.upp.so-net.ne.jp/nakagami/Zope3/index.html#kinterbasdbda

ZopeX3 3.0.0 がリリースされた頃に取り組んだんですが、
Zope3 の本体側に問題があって動きませんでした
http://www.zope.org/Collectors/Zope3-dev/304

Zope3.1 がリリースされてちゃんと使えるようになっているので、さらしておくことにしました。

一応、SQLScript を書いて、test タブで動作するのは確認できたんですが、
それ以上ちゃんとは使ってません(Zope3 の使い方自体が、まだよくわからんのです)


ZopeX3 の Subversion リポジトリ 調子悪し [Zope 3]

ひさしぶりに、ZopeX3 のコードを最新に同期してみようと思って

$ svn update


すると

svn: Can't recode string


と出てくる。
どうも、うまく decode できない encode でリポジトリに何かが追加されちゃったみたい。
Google君に聞いても、みんな「手の施しようがない」と書いている。

ためしに、svn co で、取得しなおしてみたら、ちゃんと取ってこれたが、
そちらのスナップショットで svn update すると

svn: XML parser failed in ''


と出てくる。

私は、ZopeX3 自体の開発はしないから、気が向いたときに check out すればいいけど・・・


Zope3Book のサンプルを動かしてみる [Zope 3]

Subversion のソースから構築した ZopeX3 に、

Zope Developpers Book
http://www.zope.org/Wikis/DevSite/Projects/ComponentArchitecture/FrontPage/Zope3Book
の 13章で説明している package をインストールしてみる
http://www.zope.org/Wikis/DevSite/Projects/ComponentArchitecture/Zope3Book/contentobject.html

ZopeX3 をソースから動かすのは
http://blog.so-net.ne.jp/nakagami/2005-03-14

動くようになった状態で

$ cd SomeWhere/Zope3/src
$ mkdir book
$ cd book
$ touch __init__.py
$ svn co svn://svn.zope.org/repos/main/book/trunk/messageboard/step01 \
  messageboard


でソースを取得

package-includes ディレクトリに



という内容のファイルを messageboard-configure.zcml というファイル名で保存する。


Zope3 とは何か(高橋メソッド) [Zope 3]

#ML にも投げといたけど、自分でもあとで探せるように
Zope3 とは何か を高橋メソッドで書いた
http://www005.upp.so-net.ne.jp/nakagami/presentation.html

ここ↓で紹介したプレゼンツール(かんさんの改良版 ver 2.1)をほぼそのままつかっているが、
http://blog.so-net.ne.jp/nakagami/2005-04-12
URL のパスの長さに制限があるのでプレゼン全体の長さにも制限がある。
(そのため、1本にする予定が ZopeX3 と Zope3 の説明の2本になってしまった)
これまた、高橋メソッドのコンセプトにあっていてよさげ。


Zope3Book メモ [Zope 3]

できる範囲でぼちぼちと Zope 3 の情報の収集・整理を始めてみる。
http://www005.upp.so-net.ne.jp/nakagami/Zope3/

Zope3Book を読みながら書いたメモを整理して公開してみる
http://www005.upp.so-net.ne.jp/nakagami/Zope3/Zope3BookMemo.html
私の英語力では理解しきれてないが、誰かの参考にでもなれば。
今後、私の理解が進めば補足・改定がされるかも。

PDF版を、ディスプレイで読んだが・・・読みにくい。
書籍を買ってもいいけど、それだったら違う本を買いたい気もするし、

誰か(1週間くらいで返すから)本貸して


Zope 2 と Zope 3 は違うもの [Zope 3]

Rob Page さんが神戸で話した内容が載ってる。
http://pcweb.mycom.co.jp/articles/2005/03/18/ossconf/
何をしゃべったか雰囲気はわかるが、記事は、何が言いたいんだかよくわからない文章だなぁ
#仕方ないけど

ところで、最近 Zope 3 Developer's Book をパラパラと読んでいるが、
Zope2/Plone が「Python で書かれた Xoops」であるのに対して
Zope X3 は「Python で書かれた JBoss」という感じなので、
Zope 2 は、だんだん使われなくなって Zope 3 での開発が盛んになる・・・とはならない気がする。

Zope Corp の人やバリバリのへび使いの人たちが、作る部分が多いものを構築するのには、
Zope 3 が良いだろう(私も、Zope 3 がバリバリ使えるようになりたい)。

しかし、さっとインストールしてちょっとブラウザで設定(せいぜいカスタマイズ)したら、
すぐ使えるようになる Zope 2 の(完成品に近い)半製品としての良さは Zope 3 にはない。
今後、Zope 3 をベースに Plone みたいな CMS アプリケーションを作る人もいるかもしれないが、
それだったら私は Plone を使うだろう。

私の感覚では、Zope 2 に変わるものはないけど、Zope 3 の対抗馬(というか目標)には、
J2EE という強敵がいるので、Zope 3 がメインストリームになるかどうかは、予断を許さない。
・・・でも、一時の混乱を考えたら、Zope 3 がここまで来ただけでも Jim Fulton さんは偉い。