header image

Ryuzeeの他サイト

mixi Twitter Twitter

Categories

携帯対応

QRコード

RING

人気ブログランキング



新着記事

2008/11/15 10:19:44 Trac, フリーソフト none Comments
add Hatena Bookmark Tags:

先日作ったプラグインだが、IEだと動かなかった。普段IEなんて使わないので、全く気づかなかったよorz

ということで、修正した。ダウンロード

前回は、JAVAScriptで、window.onsubmitの時にチェックを行っていたんだけど、IEがこのイベントを通ってくれない(何かと競合?)ので、明示的にDOMからsubmitするフォームを取得して、そいつに対して、onsubmitを割り当てることで解決。

なお、新規登録はこれでOKだったが、チケット更新については、更新用フォームにidがついていないので、そのままだとうまく行かない。
ちゅうことで、テンプレートのticket.csについて、

<?cs if:trac.acl.TICKET_CHGPROP || trac.acl.TICKET_APPEND ?>の後の
<form action=”<?cs var:ticket.href ?>#preview” method=”post”>
について
<form action=”<?cs var:ticket.href ?>#preview” method=”post” id=”newticket”>
のように変更すると、更新時もチェックできるようになる。

なんだかんだで意外と面倒。

なお、改めて、Firefox、Opera、Safari、GoogleChrome、IEで動作確認をした限りは問題なさそう。

2008/11/14 23:10:23 Trac, 日記 none Comments
add Hatena Bookmark Tags:

今日考えたことのまとめ

  • Cakeで作るかCIで作るかそれが問題だ

    CakePHPは、DBの設計がまとも&CRUDが多いようなシステムは簡単。
    CIは自由度が高いから、フレームワークをあまり意識しなくても色々できる。
    さぁ、どっちを選択するか考えよう。

  • 実はJAVAはJDK1.5以降かなり取り残されている。アノテーションとか、良く分からん。ヤバイので勉強する必要がある。
  • フレームワークについていえば、StrutsよりSeasar2というのは間違いない。昨日会社に来ているパートナーさんと話したが、Seasar2はStrutsの開発効率の1.5倍、生のServletを書くのと比較して2倍程度の生産性はありそう。
  • TracはBTSやITSという側面もあるんだけど、実はコミュニケーションプラットフォームなんだよね。
  • この間作ったTracのプラグインが実はIEだと動作しない。エラーは出ないようなんだけど、window.submitを検知しない。IEでのJavaScriptのデバッグは面倒だし、俺はIEなんか使わないからとりあえず放置。
2008/11/09 09:16:47 Trac, 日記 none Comments
add Hatena Bookmark Tags:

昨日作ったプラグインだけど、新規登録の時にしかチェックしなくて良いなら、こんな面倒なことはしなくても、他の実現手段がある。

実現手段としては、プロジェクト内のtemplatesディレクトリにある、site_newticket.csに直接、チェック用のJAVAScriptを記述すれば良い。
この方法だと、チケットの編集の時はダメなんだけどね。

一応それぞれのテンプレートがどういう動きをするかメモにしておく。

  • site_header.cs
    ヘッダーの先頭(bodyタグの直後)に差込できる。
  • site_footer.cs
    フッターの末尾(/bodyタグの直前)に差込できる。
  • site_css.cs
    カスタムCSSの設定ができる。
  • site_newticket.cs
    新規チケット登録フォームの先頭に、差込できる

図示すると下記のようになる。赤い箇所が差し込まれた箇所になる。

2008/11/08 20:39:04 Trac, フリーソフト, 日記 none Comments
add Hatena Bookmark Tags:

前回のエントリを受けて、とりあえず初めてプラグイン書いてみた。

機能:予めtrac.iniに指定した条件に従って、チケットの新規作成および更新時に、入力フィールドのチェックをJavaScriptで行う。

ダウンロードはこちら(validation-0.0.1.zip)から。対象Tracのバージョン:0.10系のみ。

#不要なファイルが混じっていてインストールに失敗する不具合を修正しました(11/11)

インストールはpython setup.py installとし、trac.iniで、validator.* = enabledに設定するだけ。

trac.iniの設定の例は以下の通り。

[validator]
rule_0 = document.getElementById('milestone').options.selectedIndex != 0
message_0 = マイルストーンを選択してください。
precond_1 = document.getElementById('owner') != undefined
rule_1 = document.getElementById('owner').options.selectedIndex != 0
message_1 = 担当者を選択してください。
rule_2 = document.getElementById('keywords').value != ""
message_2 = キーワードを入力してください。
rule_3 = document.getElementById('due_assign').value.match(/^[0-9]{4}/[0-9]{2}/[0-9]{2}$/)
message_3 = startdate in invalid

入力チェックは10個まで設定可能で、rule_0からrule_9までが有効。利用しない場合は未設定で可。
rule_xは、実際の判定条件で、正しい入力値の状態をJavaScriptで記入する。
message_xは、判定条件に合致しなかった場合のメッセージ本文をそのまま記入する。
precond_xは、実際の判定条件に入る前の事前条件をJavaScriptで記入する。(主にOwnerとかで利用する)
個々の設定値の妥当性はチェックしてないので、この設定を間違えるとTracがエラー起こしたりするよ。

※なお、初めてプラグイン作ったので、作り方があっているのかも良く分からんし、設計思想が正しいのかも分からん。もっと言えば、作った機能はそもそもTracに存在するとかいう可能性もある。そういう前提でご利用は自己責任で。

2008/11/08 15:31:00 Trac, 日記 none Comments
add Hatena Bookmark Tags:

会社でTracを使っているんだけど、そこで困るのが、人によってチケットの書き方に差がある、という点。
タスクの粒度の違いについては、まぁ仕方がないのだが、担当者を設定しなかったり、種別や優先度を設定しなかったりすると、そのタスクが闇に埋もれてしまう可能性があってちょっと嫌だ。

んで、Tracのプラグインで、予め指定しておいたフィールドは、少なくとも必須チェックくらいはして、未入力だったらチケット登録できなくする、というようなものを探してみたのだが、気に入るのが無かった。

気にいらない奴はBasicFieldValidationPatch。何が気に入らないって、入力不足の場合、次画面で、未入力箇所があるよーーーん、とだけ表示して、ブラウザバックを強要され、戻ると、今入れた内容が消えているんだよ。ブラウザの設定の兼ね合いもあるけど、これは使いにくい。

ということで以下のようなプラグインを作ろうかと。

  • trac.iniに必須チェックする項目名を書いておくとチェックしてくれる。
  • trac.iniに型もしくは正規表現を書いておくと、チェックしてくれる。
  • Submit先でエラー箇所を表示するが、エラー以外の項目はちゃんとそのまま残っていること、もしくはSubmitの際にJAVAScriptでチェックすること
  • カスタムフィールドもチェックできる。
  • Trac0.10系とTrac0.11系の両方に対応している。

Trac0.11系であれば、ITemplateStreamFilterを使えばなんとかなりそう。Trac0.10系であれば、IRequestFilterを使うと思われる。

2008/10/22 19:59:54 Trac, 日記 none Comments
add Hatena Bookmark Tags: ,

どうも認証付のProxy経由だとTracのサーバにアクセスができない模様。

.NETでソースが公開されているGPLソフトウェアなので、ちょいとソースみてパッチ書いて送ろうかな。

2008/10/20 07:06:26 Trac, 日記 none Comments
add Hatena Bookmark Tags: ,

Trac ExplorerはSubversionのWindows用クライアントであるTortoiseSVN(トータスSVN)のアドオンとして動作するツールで、Subversionでのコミットログの記述の際に、関連するTracのチケット番号を挿入したりすることが出来る。
(このツールはVisual Studioとも連携できるらしい)

普通は手動で、コミットログを書いて、fixedとかrefとか書いているんだけど、「あれ?あのチケット何番だっけ?」みたいなことも往々にして発生するので、このツールは非常に便利だ。

動作の前提条件

動作には、.NET Framework2.0が必要。また当然ながら、TracおよびTortoiseSVNも必要になる。TortoiseSVNのバージョンはHook Scripts機能が利用できる1.5.4以上のバージョンにする。
また、TracとのデータのやりとりはXMLRPCを利用するので、Trac側には、XML_RPCプラグインを導入し、設定しておくこと。
XMLRPCについては、過去の記事参照

インストール

Trac Explorerはhttp://tracexplorer.devjavu.com/から入手できる。
入手したらセットアップを起動する。

次に、ワーキングコピーディレクトリに移動し、右クリックしてTortoseSVNを選択し、Settingsを選択。
ここでHook Scripts以下のIssue Tracker Integrationを選択し(以下の画面)、Addボタンを押下する。

ここで、Working Copy Pathを設定し、Parametersは空白のままOKを押す

さらにTracの連携先の設定画面が出てくるので「Add New Trac Server」ボタンを押下し、接続先のTracを指定する。

TracのURLの指定。認証している場合は認証情報も設定する。

その後はNextボタンを連打していき、最後に自動表示するチケットの種類を選択する。

Trac Explorer上から自動補完するキーワードを設定する。

というようなことを終わらせると、Clipboardに設定がコピーされるので、それを、空白にしているParametersの箇所に張り付ける。これで設定が完了する。

実際の画面は以下のようになり、予め指定したWorking Copy上でコミットしようとすると、画面右側に「Choose Ticket」という項目が追加されており、これをクリックすると、以下のようなチケット連携画面が表示されるので、一番左列のプルダウンを選択し、設定するキーワードを指定すると良い。

そうすると、コミットログ入力画面に自動で下記のように設定される。

いちいちWebブラウザを切り替えて色々検索したりする必要もなく、生産性はあがるだろうと思われる。

2008/10/07 01:05:54 Trac, 日記 none Comments
add Hatena Bookmark Tags: ,

前回のエントリにて、discypusさんから、

試してませんが、shift_jisではなく、cp932を指定すると解決するかも知れません。
http://www.python.jp/doc/2.4/lib/standard-encodings.html

というご指摘をいただいたので、早速試してみた。
Tracのバージョンは0.10.4。pythonはまだ古くて2.3なんだけど、結果としてはうまくいった。

/usr/lib/python2.x/site-packages/trac/versioncontrol/web_ui/にある、changeset.pyの600行目

zipinfo.filename = new_node.path.encode('utf-8')

を以下にすれば良い。

zipinfo.filename = new_node.path.strip('/').encode('cp932')

う~ん。すばらしい。
#でも機種依存文字をファイル名に付けるのはやめようね

2008/10/05 07:40:09 Trac, 日記 2 Comments
add Hatena Bookmark Tags: ,

Tracではchangesetをzipに固めてダウンロードできる機能があるんだけど、このzipの中に日本語ファイル名が含まれると文字化けする。
仕様書や手順書のようなものには普通日本語ファイル名を付けるだろうから、ということで直してみた。
Tracのバージョンは0.10.4

/usr/lib/python2.x/site-packages/trac/versioncontrol/web_ui/にある、changeset.pyが修正対象だ。

600行目

zipinfo.filename = new_node.path.encode('utf-8')

の箇所でzipにファイルを含める際の文字コードをUTF-8にしているので、この箇所を以下の通りに変更する

zipinfo.filename = new_node.path.strip('/').encode('shift_jis')

この修正が完了したら、同じフォルダにあるchangeset.pycを削除した上で、apacheを再起動(restartもしくはstop,start)する。
以上で対応は完了だ。

ちなみに、Tracで日本語ファイル名を扱う際の注意事項として、日本語ファイル名に機種依存文字を入れないこと。
入れると、こんな感じのエラーになる。(当たり前だが、文字コード変換が出来ない)

Traceback (most recent call last):
  File "/usr/lib/python2.3/site-packages/trac/web/main.py", line 406, in dispatch_request
    dispatcher.dispatch(req)
  File "/usr/lib/python2.3/site-packages/trac/web/main.py", line 237, in dispatch
    resp = chosen_handler.process_request(req)
  File "/usr/lib/python2.3/site-packages/trac/versioncontrol/web_ui/changeset.py", line 249, in process_request
    self._render_zip(req, filename, repos, diff_args)
  File "/usr/lib/python2.3/site-packages/trac/versioncontrol/web_ui/changeset.py", line 601, in _render_zip
    zipinfo.filename = new_node.path.strip('/').encode('shift_jis')
UnicodeError: Shift_JIS encoding error: invalid character u2460

(u2460はEnclosed Alphanumericsで丸囲み数字だね)

2008/09/07 19:00:50 Trac none Comments
add Hatena Bookmark Tags:

Tracを実案件ほぼ全てに使っていて、顧客にも公開しているケースが多々あるのだが、その際に顧客から出た要望。
チケットの追加、変更で全部メールを送信しているのだが、TracWysiwygプラグインを使って編集した場合にあまり気にせず[[BR]]が大量に含まれ、それがそのままメールされてしまう。
これかなり醜いメールが飛ぶので、カスタマイズして、[[BR]]はCRLFに変換するようにしてみた。

対象モジュールは/usr/lib/python2.3/site-packages/trac/notification.pyである。
対象箇所は290行目からのメール送信部分など。
まず頭のほうで、

import string

を追加した上で、
メール送信用のテンプレートを読み込んでレンダリング箇所の直後に変換処理を追加すれば良い。

def send(self, torcpts, ccrcpts, mime_headers={}):
   from email.MIMEText import MIMEText
   from email.Utils import formatdate, formataddr
   body = self.hdf.render(self.template_name)

の直後に

body = string.replace(body, '[[BR]]', 'rn')

だ。これだけで大分見栄えも違う。
なお、作業完了後、apacheの再起動が必要だ。(mod_python利用の場合)

あとは、このソースを見る限り、テンプレートの読み込みによってメール本文を作っている。
デザインを変えたかったら、/usr/share/trac/templates/にあるticket_notify_email.csをカスタマイズすれば良い。
但し、メールの頭にある段組部分は、/usr/lib/python2.3/site-packages/trac/ticket/notification.pyの中で頑張って作られており、その箇所をカスタマイズしたい場合は、さらにモジュールのカスタマイズが必要になる。

« 前の記事 

add to hatena hatena.comment (0) add to del.icio.us (0) add to livedoor.clip (0) add to Yahoo!Bookmark (0) Total: 0