Zope/Plone開発勉強会(2009年2月)の報告
最近は、開発勉強会の報告専用ブログのようになっておりますが、こりずに2月の勉強会の報告を致します。
2月20日(土)にいつも通り、新宿区曙橋で開催しました。前日までの出張の疲れなどで、大幅に遅刻をし申し訳ないと思いつつ、会場入りしました。
今回は、Ploneの仕様的バグへの対処が出来れば良いと思い望みました。
- Plone3.3 のワークフロー用プルダウンメニューのアドバンスから、日時を変更しても変更が反映されず、保存された旨のメッセージが出るというものです。
- お客様からの指摘でしり、複雑な部分で修正出きないと思ったのですが、思いのほか簡単に見つかり、修正出きました。
- その後、テストコードを書き、コアコードにコミットしようとしたのですが、残念なが権限関係の部分でテストが通らず、保留状態にしています。
- MS-Officeファイルを検索対象にするアドオンプロダクトを公開していますが、それのコピーライト部分に当社の名前があり、それに対してコメントを頂いたので、修正してPYPIに登録し直しました。
その時にも話をしたのですが、Ploneのユーザ管理画面のロールを管理する部分で、インターフェースが分かりにくい部分があり、それの対処をしてみました。
具体的には、グループ経由でロールが継承されている場合にも、チェックボックスでロールを外せるようになっているが、実際にはそれは適用されないという部分です。
現在テスト中なのですが、皆さんに相談したら、コアコードを直した方が良いとのアドバイスを頂いたので、早めにコミットしようと思います。
- カテゴリ
- Zope/Plone
- 開発情報
- 固定リンク
- ¦
- コメント (0)
- ¦
- トラックバック (0)
Zope/Plone開発勉強会(合宿バージョン)の報告2
遅くなってしまいましたが、開発勉強会の報告2を書きます。
Plone4用に日本語全文検索時の、全角スペース区切りでもアンド検索になるZope2.12の改造について、Zopeの開発レポジトリにに対して、テストが完了し、田原さんに代理コミットして頂きました。テストに手こずった理由は、最近のZopeから、bin/zopectl test という引数が使えなくなり、専用に、bin/test にてテストを実施するようになり、その為に、「zc.recipe.testrunner」を使用する必要があり、そのセットアップがうまく出来なかったためです。
詳しく言うと、testrunnerとmy.developper の組み合わせで上手くテスト環境が作れなかったということです。
そこで、いつも慣れているPlone4のテスト環境から、ZopeをSVNから取得するように変更し、テストするようにしました。
その方法を下記に記載します。
http://dev.plone.org/plone/browser/buildouts/plone-coredev/branches/4.0/
をまるごと、チェックアウトして、
bootstrap.py を実行し、
その後、下記を修正してから、./bin/buildout を実行
sources.cfg を編集
auto-checkout =を追加 下記を変更
Zope2
[sources]
#Zope2 = svn svn://svn.zope.org/repos/main/Zope/branches/2.12
Zope2 = svn svn://svn.zope.org/repos/main/Zope/trunk
test.cfg を編集
eggs =を追加
Zope2
versions.cfg を編集 下記を変更
#extends = http://download.zope.org/Zope2/index/2.12.3/versions.cfg
extends = http://svn.zope.org/*checkout*/Zope/trunk/versions.cfg
コミット結果は下記参照
http://svn.zope.org/?view=rev&rev=108734
http://svn.zope.org/?view=rev&rev=108735
- カテゴリ
- Zope/Plone
- 開発情報
- 固定リンク
- ¦
- コメント (0)
- ¦
- トラックバック (0)
Zope/Plone開発勉強会(合宿バージョン)の報告1
2010年1月29日(金)から1月31日(日)までの間で、Zope/Plone開発勉強会(合宿バージョン)を開催し、参加してきました。この勉強会は昨年春から、月に1回、土曜日日中に都内で開催してきました。1月は志向を変えて、雪山でスキーしたりのんびりしながら、Zope/Ploneに触れようということで行いました。
今回は、菅平高原・峰の原のマウンテンパパというペンションに宿泊しました。(これらの開発外の報告は改めて)
土曜日から5名、日曜日は計8名の参加がありました。内容はここにやりたい事を決めて、みんなに聞いたり意見をもらったりしながら、自由に開発を進めた感じです。
私は、複数の課題を持って行き、皆から多くの意見をもらえました。実際にメインで開発する予定であったものは未完成で持ち越しになってしまいました。
開発したもの
- Plone3用日本語全文検索プロダクト BigramSplitterの改造
- 全文検索時に、全角スペースでもアンド検索になるように改造した。
- monkey patch形式で行っている
- BigramSplitter 1.0b2をリリース
- 期限前・期限後のコンテンツが作成者にも、リンクをたどる事が出来ないバグの解消
- Ploneの仕様的バグだと思われるものです。管理者で使っていると気がつかないのですが、複数人でワークフローを使って、管理するサイトでは、現状ままでは使いにくいと思われます。
- 他のメンバーにも意見を頂いたのですが、これが良いという答えが見つかりませんでした。
- まずは、コンテンツタブからはこの期限関係の制限を除外するプロダクトを作りました。
- 今しばらくテストをしたり、整理をし、公開する予定です。
- Plone4用に日本語全文検索時の、全角スペース区切りでもアンド検索になるZope2.12の改造
- BigramSplitterにて実装したものを、Zope2.12最新版に適用させようとしました。
- Zope単体のインストールをすることが減って、現状の環境に合わせて、SVNから取得するなどを行い、テストをしました。
- 最終的には、完成間近で、テスト環境の整備に時間がかかり出来ませんでした。
- 近日中に何とかしたいと思います。
- Plone アクセシビリティ機能のプロダクトの完成
- 以前の作りかけを、リファクタリングしながら、コードを書き直していました。
- リファクタリングは終わったのですが、その先に進めませんでした。
- こちらも次回持越しです。今しばらくお待ち下さい。
その他
- Ploneジーニアスバー(何でも相談室)の常時開催
- といいながら、私が清水川さんにバシバシ質問して、邪魔をしてしまいました。もうしわけありません。
- buildout環境・mr.developper環境構築のもろもろ
- Unittestなどテストの粒度についてのお話を聞いた
全体的に、楽しく過ごせ、成果もそれなりに上がったので、満足しています。
また、このような機会を作れるようにしたいと思います。
- カテゴリ
- Zope/Plone
- 開発情報
- 固定リンク
- ¦
- コメント (0)
- ¦
- トラックバック (0)
Ploneの英語のメーリングリスト紹介
現在、Zope/Plone開発勉強会合宿をに来ています。
ここでも仕事などに関連するプロダクトの作成を行っております。
突然ですが、質問を受けたので、Plone開発関係のメーリングリスト(英語)のリストをまとめてみたいと思います。
Ploneの開発ML
https://lists.sourceforge.net/lists/listinfo/plone-developers
Ploneプロダクト関連のML
http://lists.plone.org/mailman/listinfo/product-developers
マーケティングやイベントなど主催などML
http://lists.plone.org/mailman/listinfo/evangelism
国際化対応ML
http://lists.plone.org/mailman/listinfo/plone-asiapacific
Plone-users ML
https://lists.sourceforge.net/lists/listinfo/plone-users
アジア太平洋関連ML
http://lists.plone.org/mailman/listinfo/plone-asiapacific
他にもたくさんのものがありますが、Ploneの開発ということでは、これらは参考になることも多いと思います。
- カテゴリ
- Zope/Plone
- 固定リンク
- ¦
- コメント (0)
- ¦
- トラックバック (0)
2010年も既に半月経過
早いもので、2010年が明けて半月が経過しました。
遅ればせながら、今年もヨロシクお願いいたします。
年末年始にかけても、Plone4リリース向けてのバグフィックスを行ったり、Plone用のアドオンプロダクトを作り公開したりとしていました。今年もこれらの活動を継続して行きたいと思います。
現在は、3月の年度末に向けて、複数のPloneサイト構築の案件をこなしています。いつもどおりの慌ただしい年度末になりそうです。
- カテゴリ
- 日常
- 固定リンク
- ¦
- コメント (0)
- ¦
- トラックバック (0)
PloneでMS-Officeファイルを検索対象にするプロダクト公開
PDF関連
Plone3からPDFの検索がデフォルトでサポートされました。これはベースOSにxpdfなどを前もってインストールしておくことで可能になります。
CentOSにおいては、popplerというパッケージがあり、それをインストールすれば日本語のPDFも検索対象になります。
ここでいう、検索対象とは、ファイルの中の本文がインデックス化されるかということです。
MS-Office関連
MS-Wordにおいても、wv(wvWare)をインストールしておくことで、拡張子にxが付かない(xml形式でない物)は検索対象になります。
また、MS-Excel, PowerPoint などを検索対象にさせるプロダクトも存在します。しかしこのプロダクトで使っている、ベースのモジュールが、xlhtmlというもので、2004年頃で開発が止まっているようです。私が試したときには、64bit版CentOSでコンパイルすることが出きませんでした。
さらに、xml形式で保存する、OpenXMLといわれる形式を持つ、MS-Word, Excel, PowerPointやOpenOfficeファイルなどを検索させるために、Products.OpenXmlというPloneのアドオンプロダクトが存在します。
今回、MS-Office関連ファイルの検索をどうしてもしたいという要求と、Plone関連の海外のコミュニティからの情報収集で、これらの検索に注目している人が多く存在しするということがわかり、きちんと使えるものを実装しようという動きになりました。
c2.transform.msoffice を公開
様々なアプローチを検討した中、Javaのモジュールで有る、Apache POIを使うのが一番いいであろうということになりました。このApache POIは、Apacheライセンスの元で公開されておリ、多くの実績があることもわかり、且つ、うちも取り組んでいるLucen検索エンジンをベースにした、Solrでも使われていることがわかりました。
また、インストールの手順を多くすると、複雑になり、環境によって動かないなどのトラブルも多く発生すると考えました。そのため、POIを同梱(jarファイルにまとめた)して、Ploneのプロダクトとして配布することとしました。
公開サイト: PyPI http://pypi.python.org/pypi/c2.transform.msoffice
Plone.org: http://plone.org/products/c2.transform.msoffice
インストール方法
[buildout]
eggs =
c2.transform.msoffice
zcml =
c2.transform.msoffice
$ ./bin/buildout
なお、動作には、JRE(Java)の実行環境が必要になります。
みなさんテストに協力いただきフィードバックをいただけると助かります。
(Windowds環境にはまだ対応していません)
Ploneは、イントラネットを構築するうえで、有効なCMSツールになってきているのだと思います。
追記(2009年12月21日): Plone3.x では日本語の検索が標準でサポートされていません。日本語でファイル検索をするには、Products.BigramSplitter を一緒に入れる必要があります。
さらに、インデックスを作る際の無駄な動きを防止するために、collective.indexing を一緒に使うことをおすすめします。- カテゴリ
- Zope/Plone
- 開発情報
- 固定リンク
- ¦
- コメント (1)
- ¦
- トラックバック (0)
Plone研究会&Ploneパーティー2009
昨日(2009年12月9日)に、Plone研究会&Ploneパーティー2009というイベントを、Plone User's Group Japanの主催で行いました。
今回、私はメインスピーカーとして、Plone4のプレビューを行いました。
Plone4は現在アルファー2がリリースされており、年明け早々には正式リリースされるのではないかと感じています。そのリリースを前に、何が変わったのかということと、実際にアルファ版を見ていただく会となりました。
パーティー全体は、約20名の参加者とともに、お酒を飲みながらプレゼンを聞いていただいたり、食事を食べたり、Ploneなど技術的なお話をしたりしました。
久しぶりにお会いしたメンバーもおり、大いに話が盛り上がりました。
最後に、発表資料をこのブログに添付します。Ploneのバージョン遷移(2005年から)とPlone4の機能をピックアップしています。
- カテゴリ
- Zope/Plone
- 固定リンク
- ¦
- コメント (0)
- ¦
- トラックバック (0)
Plone3の日本語検索とメールバグ
先週末の12月5日(土)に、第6回Zope/Plone開発勉強会が行われました。
今回はサポートをメインにすると宣言しておきながら、いつも通りマイペースで開発をしてしまいました。(反省)
今回は、Plone3でもPlone4と同様に日本語検索ができるようにするプロダクトをPyPIにアップロードするということ目標にしました。
検索については、1年以上前から手がけている、BigramSplitterをバージョンアップさせました。
http://pypi.python.org/pypi/Products.BigramSplitter
現状ベータバージョンなのですが、理由はアンインストールがうまく機能していないためです。これについては、引き続き調査を行っていきたいと思います。
勉強会中に次の課題として思いついた、これらパッチを簡単にセットアップできる「まとめ」パッケージを作ろうとしたのですが、こちらは時間切れでした。次回に回します。
前回作成し、公開した、c2.patch.plone3mail ですが、Plone3開発本で有名なMartin Aspeli氏からメールがきました。
なぜ本体コードを修正せずにパッチで作っているのか?ということでした。
理由としては、Plone3.0, 3.1, 3.2などの既にリリースされているPloneでも問題なくメールが出せる仕組みを作りたいからということと、Ploneカンファレンスの時にAlec氏にPlone3の方の話をしたら、そんなにいい顔をされなかったからです。
そうとはいえ、今後、Plone3.3.3のリリースもされる予定ですし、そちらを治しておいた方が良いと思い、昨日3.3の最新コードにコミットしました。
- カテゴリ
- Zope/Plone
- 固定リンク
- ¦
- コメント (0)
- ¦
- トラックバック (0)
Pythonスクリプトを使って便利な機能を実装
田原悠西さんからZope/Ploneのアドベントカレンダーのバトンがやってきました。
ネタをいろいろと考えてみましたが、普段便利に良く使ってるが、書くことが少ないだろうと思う、ZMIから簡単に実行できるScript(Python)ネタをいくつか書こうと思います。
Script(Python)は、制限が厳しく、指定されたものしかインポートできないなどありますが、ある程度の操作ならここでできます。
下記のスクリプトを記述し、上部の「test」ボタンをクリックすると実行されます。引数を設定した場合は、引数入力画面が表示されます。
なお、結果がない場合は、画面が遷移しません。
いずれのScript(Python)もZMIからportal_skins/custom/ 以下に設置しています。
コンテンツの数を数える(すべての)
catalog = context.portal_catalog
items = catalog()
print len(items)
return printed
コンテンツの数を数える(画像のみ)
catalog = context.portal_catalog
items = catalog(portal_type='Image')
print len(items)
return printed
ページの本文内に、ある文言(引数で指定)が入っている物URLを列挙
Parameter List : s
catalog = context.portal_catalog
items = catalog(portal_type='Document')
for item in items:
obj = item.getObject()
text = obj.getText()
if s in text:
print item.getURL()
# print obj.absolute_url() でもOK
return printed
ワークフロー遷移(非公開のコンテンツを公開する)
catalog = context.portal_catalog
wftool = context.portal_workflow
items = catalog()
for item in items:
obj = item.getObject()
review_state = wftool.getInfoFor(obj, 'review_state', '')
if review_state == 'private':
wftool.doActionFor(obj, 'publish')
print 'ID: ', item.getId, ' is Published'
return printed
オブジェクトのリインデックス(newsパスの以下)
catalog = context.portal_catalog
items = catalog(path='/Plone/news')
for item in items:
obj = item.getObject()
obj.reindexObject()
print item.getId
return printed
登録ユーザの列挙
mtool = context.portal_membership
members = mtool.listMembers()
print 'Toltal : ', len(members)
for member in members:
print member.id, member.getProperty('fullname'), member.getProperty('email')
return printed
インストール可能な物と既にされているアドオンプロダクトの列挙
qi = context.portal_quickinstaller
for p in qi.listInstallableProducts():
print 'install able: ', p['id']
for p in qi.listInstalledProducts():
print 'installed: ',p['id']
return printed
次のバトンは、安田さんにお願いしようと思います。
- カテゴリ
- Zope/Plone
- 固定リンク
- ¦
- コメント (0)
- ¦
- トラックバック (0)
MeCabで日本語読みを出力 on Windows
NVDAという、オープンソースのスクリーンリーダ(視覚障害者などの為のツール)があります。それの日本語で使用するためのお手伝いを少しだけしています。
先日のミーティングで、読み上げ側担当の方から、MeCabを使って、読みを出力することできないかな?って相談をもらいました。少し時間がたってしまいましたが、ここで公開しておきます。
#coding: cp932
from ctypes import cdll, c_char_p
LIBPATH = "C:\\Program Files\\MeCab\\bin\\libmecab.dll"
ARGV = "mecab " + "-Oyomi"
def main(text):
if isinstance(text, unicode):
text = text.encode('utf-8')
lib = cdll.LoadLibrary(LIBPATH)
tagger = lib.mecab_new2(ARGV)
s = lib.mecab_sparse_tostr(tagger, text)
ret = c_char_p(s).value
lib.mecab_destroy(tagger)
return ret
if __name__ == '__main__':
import sys
argv = ' '.join(sys.argv[1:]).decode('cp932')
# argv = u"ドラえもんの歌を聞く"
print main(argv).decode('utf-8')
ポイントは、MeCabの辞書を、UTF-8でインストールしておく必要があります。
- カテゴリ
- 開発情報
- 固定リンク
- ¦
- コメント (0)
- ¦
- トラックバック (0)