« September 2008 | Main | November 2008 »

October 2008

2008.10.26

RICHO R10

 5年ぶりくらいにデジカメを買い換えました。買ったのは、RICHO R10

 選択基準は、
・光学ズームの倍率ができるだけ高いものを(以前使っていたのは3倍)。
・コンパクトなものを(気軽に持ち運びしやすいものを)
の2点。

 比較対象となったのは、オリンパス μ1060。最終的にR10にしたのは、R10の方が使っていておもしろそうだったから(^^; (あとは、マクロの再接近距離が1cmっていうのもありますが)

Continue reading "RICHO R10"

| | Comments (0) | TrackBack (0)

2008.10.25

pflogsumm

 Postfixのログ解析ということで、pflogsummをインストール。CentOS5の場合は、

yum install postfix-pflogsumm

でサクッとインストール。

 複数のログファイルをまとめて解析することもできるので、複数台のSMTPサーバのログの内容を1つに集約することも可能(ログファイルをコピーする方法は別途考えなければなりませんが)。

 毎晩実行して前日分のレポートをメールで送信するという方法もありますが、テキストファイルに保存してhttp経由で閲覧するという使い方もありかと。

| | Comments (0) | TrackBack (0)

2008.10.21

Tracの検索機能

Tracの検索において、複数単語を入力した場合はANDでの検索となります。ただし、複数の検索文字列として認識させるためには、

1.半角ダブルクォーテーションで文字列を囲む(例:"ほげ" "ふ が"⇒「ほげ」と「ふ が」に)
2.半角シングルクォーテーションで文字列を囲む(例:'ほげ' 'ふ が'⇒「ほげ」と「ふ が」に)
3.半角スペースで区切る(例:ほげ ふ が⇒「ほげ ふ」と「が」に)

といった感じで指定する必要があります。

上記の例では「ほげ」と「ふ」の間は全角スペース、「ふ」と「が」の間は半角スペースなので、このような挙動を示しますが、検索エンジンなどでは全角スペースも区切り文字と見なすものもあります。

Continue reading "Tracの検索機能"

| | Comments (0) | TrackBack (0)

2008.10.16

mod_proxy_balancerの設定反映はrestartで

既知の問題およびHowToまとめ
balancer manager statistics incorrect after additional balancer
Workers parameter is invalid after graceful restart

 mod_proxy_balancerの設定変更を行った場合は、apache gracefulではなくapache restartで。

#mod_proxy関連って、気をつけて使わないと思わぬところではまりそうですね・・・。

| | Comments (0) | TrackBack (0)

2008.10.15

文字色をセットするマクロ(Trac0.11.1)

# -*- coding: utf-8 -*-

from trac.core import *
from trac.wiki.macros import WikiMacroBase

class ColorMacro(WikiMacroBase):
    def expand_macro(self, formatter, name, args):
        values = args.split('::')
        if len(values) != 2:
            return 'Invalid Argument. (Two arguments required)'
        return unicode('<font color="%s">%s</font>' % (values[0], values[1]) )

TracのWikiページ等へは、

[[Color(blue::青色の文字で出力)]]
[[Color(#ff0000::赤色の文字で出力)]]

のような感じで入力します。

入力値のバリデーションを行っていなかったり、引数の使い方がアレだったりしますが・・・。次の課題は、出力時のバリデーションの仕方ですかねぇ。

| | Comments (0) | TrackBack (1)

2008.10.14

チケット更新時のsubmitをフックする

 ITemplateStreamFilterを使って、チケット更新のsubmit時に(クライアント側に)処理を追加する。

 ITemplateStreamFilterで定義されているdef filter_stream(self, req, method, filename, stream, formdata)関数において、

if filename == 'ticket.html':
    stream |= Transformer('//form[contains(@id, "propertyform")]').attr('onsubmit', u"alert('ほげ')")

のような感じで、Formに対してonsubmit属性を追加すればOK。実際にはJavaScriptで何らかの処理を書くことになるかと思います。

 上手く処理を記述すると、入力内容のチェックを(クライアント側でも)行うことができるようになるかと(ただし、JavaScriptが無効になっていると反応しませんが)。

 なお、htmlに追加する文字列中に"が含まれていると、エスケープされてしまい正しく動かなくなってしまうようです。

| | Comments (0) | TrackBack (1)

2008.10.13

カスタムクエリ画面で更新日を条件に抽出したい

 最近、かなりTracのソースをいじっているなぁ・・・。プラグインだけで完結して本体に手を加えずに済む場合もありますが、場合によってはTrac本体に手を加える場合も(まぁ、頑張ればプラグインだけで完結するものもあるとは思いますが)。

 ってことで、カスタムクエリの画面で、各Ticketの最終更新日を条件に抽出することができる機能の追加に挑戦。編集対象となるソースは、ticket/query.py

__init__関数内の

self.fields = TicketSystem(self.env).get_ticket_fields()

の次の行に
self.fields.append( { 'type':'text', 'name':'changetime', 'label':u'更新日', 'value': u'' } )

を追加。これにより、Queryページの条件指定コンボボックスに更新日の項目が追加されます。

リクエストを処理する(リクエストURLを構築する)_get_constraints(self, req)関数内の

ticket_fields.append('id')

の次の行に
ticket_fields.append('changetime')

を追加。この部分を忘れると、リクエストURLに含まれていてもサクッと無視されてしまいます(ここにたどり着くのに時間がかかりました・・・)。

Continue reading "カスタムクエリ画面で更新日を条件に抽出したい"

| | Comments (2) | TrackBack (2)

2008.10.12

カスタムクエリのページング機能の不具合

 Tracのカスタムクエリにおいて、条件を1つも指定せずに抽出した場合、ページングが正しく機能しないようです(Trac0.11.1)。最初に抽出した際はページ番号も表示されており、いかにもページングできそうな感じなのですが、クリックしても1ページ目が表示されてしまいます(しかも、ページングの選択が消えてしまいます)。

 調べてみると、http://trac.edgewall.org/ticket/7544 : Pagination in ticket query doesn't work when no constraints are definedで報告されており、r7505で修正されているようです。

 修正内容からすると、条件が指定されていなかった場合、構築されたSQLが文法的に間違っていたものになっていたような感じですかね。

#まぁ、無理矢理「ステータスを全て選択」した状態で抽出すれば同じ結果を得ることができますが(^^;

| | Comments (0) | TrackBack (0)

2008.10.11

genshi.filters.transform

 TracのITemplateStreamFilterなどでテンプレートhtmlファイルに加工する場合に有用なTransformerのAPIドキュメント。実際には、genshi.buildertagオブジェクトあたりも組み合わせて使うことが多いのではないかと。

 処理適用前のhtmlサンプルと、適用後の処理結果を見比べれば、実際にどういう挙動をしているのかがわかります。

| | Comments (0) | TrackBack (0)

2008.10.10

チケットに対するリンクを一覧表示するマクロ

BackLinksMacroを参考に、チケットに対するリンク一覧を表示するマクロを作ってみました。SQLなどを修正しただけなので、「参考」といっていいレベルなのかどうか微妙ではありますが(苦笑))。

Wikiページ、チケットのdescription、チケットのコメントに、#123のような感じのフォーマットで記述されているリンクを抽出して一覧に表示します。ticket/templates/ticket.html に対して

${wiki_to_html(context, '[[TicketBackLinks()]]')}
のような感じで記述しておくと、全てのチケットにおいて自動的に処理されるようになります。

【制限事項その他】
・#123という形式(#+番号)しかサポートしてません。
・番号の桁数が少ないチケットを表示するとき、パフォーマンスに問題が出てくる可能性があります。
 (文末等に存在するリンクを抽出するため、いったんLIKE '%#123%'で取得し、後から正規表現で#1234などを除去するようにしているため)

#SQLiteで直接正規表現を使うことができればいいのですが・・・(一応regexp関数の準備はされているようですが、使い方(使えるようにする方法)がわからない・・・)。

ダウンロードはこちらから:TicketBackLinks-r52.zip (2.4K)

#2008/11/03 正規表現等を修正しました(関係のないチケットまでリンクしていた)&egg形式でインストールできるようにしました。

| | Comments (0) | TrackBack (0)

2008.10.09

チケットの属性変更可否をもう少し細かくしてみた

Tracのデフォルトのチケット編集画面では、各種属性は全て変更可か全て変更不可という感じでの制御となっています(TICKET_CHGPROP権限を用いたall or noneでの制御)。

そのため、例えば「このプロパティはチームリーダーにしか編集(変更)させたくない」というようなケースには対応できません。ってことで、何となく作ってみました。

・3種類まで「権限グループ」を設定可。
・それぞれの権限に、制御対象となる属性名(milestoneとかtypeとか)をiniファイルに登録。
 なお、IniAdminPluginの画面から登録できるようにしています。
・権限を有していない場合、チケット編集画面において「編集不可」となります(表示はされます)。
・前提条件として、TICKET_CHGPROPが必要となります(TICKET_CHGPROPの上乗せのような感じでの動きとなります)。

ダウンロードはこちらから:TicketPropsController.zip (1.9K)

#なお、画面表示の部分しか制御していないため、強引に編集した結果をリクエストにセットされた場合には無防備です。

※2008/10/30:ダウンロードファイルを、pythonソースそのものからegg形式でインストール可能な形式(zipでアーカイブ)に変更しました。zipファイルを展開し、python setup.py install でインストールできます。

| | Comments (6) | TrackBack (1)

2008.10.08

Ticketの添付ファイルのファイル名を加工する

Tracプラグインの練習。例によって、実用性は深く考えないでください。

Ticketに添付ファイルを登録した場合、ファイル名の先頭にチケットIDを付加してくれます。なお、その際、任意のPrefix(デフォルト値:ID)を付加することが可能です。

例)hoge.png ⇒ ID23-hoge.png

ダウンロードはこちらから:TicketAttachmentId.py (1.3K)

| | Comments (0) | TrackBack (1)

2008.10.07

チケット変更履歴の文字色を変えるプラグインその3

【プラグイン作成用インタフェースのメモ】

trac.web.chrome.ITemplateProvider
テンプレートhtmlファイルを含むプラグインをeggとして使う場合、ITemplateProviderでテンプレートの保存場所を指定する必要があるようです(ちなみに、eggを使わない場合、各プロジェクトのpluginsフォルダに配置したプラグインに関しては、(各プロジェクトの)templatesフォルダにhtmlファイルを格納すればOK)。

trac.prefs.IPreferencePanelProvider
「ユーザ設定」画面にタブを追加することができます。「変更を保存する」ボタンは自動的に作成されます。このボタンが押された場合、リクエストパラメータとして"action"に"save"がセットされてきますので、render_preference_panelの中で必要に応じて処理を振り分ければOK。値は、基本的にsession_attributeテーブルに格納することになるかと思います。

trac.admin.api.IAdminPanelProvider
「管理」ページに項目を追加することができます。render_admin_panelの中で必要に応じて処理を振り分けることとなります。

Continue reading "チケット変更履歴の文字色を変えるプラグインその3"

| | Comments (0) | TrackBack (0)

2008.10.06

チケット変更履歴の文字色を変えるプラグインその2

 Tracのiniファイルから値を取得する場合は、color = self.config.get('ticketchangecolor', 'color', 'black')のような感じで記述すればOK。ただ、これだけだと、iniファイルを(シェルなどから)直接編集する必要があるため、IniAdminPluginを経由して編集できるようにしたいところ。

 そういう場合は、プラグインを記述しているクラスに対して、Option(他にListOptionやIntOption、BoolOptionなどがあるようです。config.pyにて定義されています)を指定すればOKのようです。「登録ボタン」などは、IniAdminPluginが自動的に構築してくれます。

Continue reading "チケット変更履歴の文字色を変えるプラグインその2"

| | Comments (0) | TrackBack (0)

2008.10.05

チケット変更履歴の文字色を変えるプラグイン

ITemplateStreamFilterの練習がてら(?)、何となく作ってみました。テンプレートのhtmlファイルに対して処理を行う場所をXPathで指定するようになってるんですね。

単純に目的となる要素に対して属性を追加するだけならattrを記述すればいいんですね。他にも、前後にタグを追加(新たなタグで囲む)とか、いろいろなことができるような感じです。

# -*- coding: utf-8 -*-

from trac.core import *
from genshi.filters.transform import Transformer
from trac.web.api import ITemplateStreamFilter
from genshi.builder import tag

class TicketChangeColor(Component):
    implements(ITemplateStreamFilter)

    # ITemplateStreamFilter methods
    def filter_stream(self, req, method, filename, stream, formdata):
        if (filename == 'ticket.html'):
            xpath = '//ul[contains(@class, "changes")]'
            stream |= Transformer(xpath).attr('style', 'color: #cccccc')
        return stream


| | Comments (0) | TrackBack (0)

2008.10.04

VMwarePlayer用の仮想HDD

VMXBuilderで作成した仮想HDD。

20GB ⇒ 問題なし。
25GB ⇒ 仮想HDDが壊れているというメッセージが表示される。
30GB ⇒ 問題なし。

ちなみに、25GBでも、1ファイルにまとめるのではなく複数ファイルに分割するモードで作成した場合は問題なし。

謎な現象だ・・・。

| | Comments (0) | TrackBack (0)

« September 2008 | Main | November 2008 »