« October 2007 | Main | December 2007 »

November 2007

2007.11.29

脱・戦士

一番くじ 機動戦士ガンダム 脱戦士編

挑戦してみたところ、「湯飲み」でした。

とりあえず、ハロ湯飲みを選択(^^;

| | Comments (0) | TrackBack (0)

2007.11.25

Teedaで権限別のトップページ

 アプリケーションによっては、例えば「管理者」「特別ユーザ」「一般ユーザ」といった感じで複数の権限があるばあいがあります。で、権限によって、ページに表示される内容が異なってきたりします。
 ログイン後に表示されるトップページ(別にトップページでなくてもいいのですが)において、権限によって若干の違いはあるが、大半の内容は共通であったりするような場合、さてさて、どのように実行するのが開発&メンテナンスが楽なのやら??

Continue reading "Teedaで権限別のトップページ"

| | Comments (0) | TrackBack (0)

2007.11.23

httpリクエストツール

 httpサーバに対して、1秒あたりのリクエスト数を徐々に増やしながら、負荷状況を調べるための簡単なツールを作ってみました。⇒HttpTest.java

 Java6で動作確認しています。
 パラメータを組み合わせることで、最初は10リクエスト/秒、1分ごとに10リクエスト/秒ずつ増やすといったようなことも可能です。
 試しに最大で200リクエスト/秒まで増やしてVMware上のApache(CentOS5)に対してテストしてみたところ、リクエスト数が少ないうちはほぼ安定したリクエスト数だったのですが、リクエスト数が増えてくると、1秒あたりのリクエスト数が±5%程度はばらけてしまいました。まぁ、この程度のばらつきは仕方がないところでしょうかね(^^;

※1リクエストあたりの応答時間の長さによってもばらつきが変わってくるかもしれません。ま、あくまで簡易的なツールってことで。

| | Comments (0) | TrackBack (0)

2007.11.20

ファイルアップロードの進捗

 ファイルのダウンロードの際は、ブラウザのダウンロードダイアログで進捗がわかりますが、アップロードの際も工夫して実装すれば進捗を表示させることができるんですね。

DWR を使用した Ajax ベースのファイル・アップロード・ポートレットの開発
ファイル・アップロード・プロセスの進行状態がわかるプログレス・バーを表示する

 自分が作るアプリケーションでファイルアップロード処理を使う機会は基本的にないのですが、そういう機会があった場合に使ってみたいところです。

| | Comments (0) | TrackBack (0)

2007.11.19

Trac IniAdminPlugin

 Tracの設定ファイル(config/trac.ini)をWebから編集するためのプラグイン。Adminプラグイン(0.11からは標準コンポーネントに含まれるように)と組み合わせることで、ほとんどの設定をWebブラウザ経由で行えるようになります。

 加えて、昔から使用しているプロジェクトの場合(僕の場合は、0.8.xの頃に使い始めたのですが)、バージョンアップの過程でいろいろな設定が追加されているのですが、IniAdminPluginを使用することで、「現在どのような設定があるのか」を簡単に知ることができる、というメリットもあります(^^; (もちろん、0.10版Trac.iniに関して0.11版Trac.iniに関して記載されているページを見れば、どういった設定項目があるかはわかるのですが)

Continue reading "Trac IniAdminPlugin"

| | Comments (0) | TrackBack (0)

2007.11.18

JavaでSCP

 JavaでLinuxマシンに対してファイルのコピー(転送)を行う必要がでてきたので、少し調べてみました。方法としては、ftpやscp、sambaのファイル共有等いろいろとあるかと思いますが、新たにデーモンを起動するのもアレなので(現在sshdのみ稼働)、第一選択肢としてはscpを。

 で、検索してみると、[Java]Java で ssh や scp を呼び出す(1)のページでいろいろと書かれていました。
 とりあえずは、Ganymed SSH-2 for Javahttp://www.ganymed.ethz.ch/ssh2/からダウンロード。今回ダウンロードしたのは、ganymed-ssh2-build210.zip(2006-10-06版)。

Continue reading "JavaでSCP"

| | Comments (0) | TrackBack (0)

2007.11.17

Subversionでコミットメッセージを必須に

 pre-commitのフックスクリプトを書くことにより、簡単にコミットメッセージを必須にすることが可能。ってことで、試してみました。

1.リポジトリのhooksフォルダ内のpre-commit.tmplファイルをpre-commitファイルとしてコピー。
2.スクリプトによるアクセスコントロールは不要(AuthzSVNAccessFileを利用)なので、commit-access-control.plを実行している行はコメントアウト。
3.grep "[a-zA-Z0-9]"の部分をgrep "."に書き換え。
4.pre-commitに対してchmod a+x pre-commitで実行権限を付与。

とりあえず、コミットメッセージを入力せずにコミットしようとした場合、

Error: Commit failed (details follow):
Error: MERGE request failed on '/svn/test'
Error: 'pre-commit' hook failed with error output:

って感じでコミットに失敗します。

Continue reading "Subversionでコミットメッセージを必須に"

| | Comments (0) | TrackBack (1)

2007.11.10

TracGanttCalendarプラグイン

 ってことで、TracGanttCalendarプラグインを入れてみました。

# mkdir ganttcalendarplugin
# svn checkout http://svn.sourceforge.jp/svnroot/shibuya-trac/plugins/ganttcalendarplugin/trunk ganttcalendarplugin
って感じでソースコードを取得し(今回取得したのはRevision12)、普通にpython setup.py install

 README.jaを参考にtrac.iniファイルに開始日・終了日・進捗率のカスタムフィールドを追加して、Apacheを再起動。

Continue reading "TracGanttCalendarプラグイン"

| | Comments (0) | TrackBack (0)

2007.11.09

Trac0.11devをインストールしてみる

 Trac0.11-devをインストールしてみました。環境はちょいと前に構築したCentOS5。元々テスト環境なので、失敗したらまたOSから積み直せばOK(笑)。理由は、TracGanttCalendarプラグインを触ってみたかったから(まぁ、あくまでテスト環境の構築のみで、日常業務用の環境はまだまだ当分0.10.4のままになるとは思いますが・・・)。

 Trac0.11はGenshiが必要となるので、まずはそれをインストール。ez_setup.pyを実行した際にsetuptoolsがインストールされているので、それを利用すれば簡単にインストール可能(Python用のパッケージマネージャってとこですか)。
 自分の環境では、easy_install は/usr/local/share/python2.5.1/binにインストールされていて、かつパスの通っているところへのリンクは張っていなかったので、

/usr/local/share/python2.5.1/bin/easy_install Genshi

とフルパスを指定して実行。今回試したところ、0.4.4がインストールされました。

Continue reading "Trac0.11devをインストールしてみる"

| | Comments (1) | TrackBack (0)

2007.11.08

Trac&XML-RPC(4)

【複数の処理をまとめて実行する】

List<Object> command = new ArrayList<Object>();
for (int i=1; i<=10; i++) {
 Map<String, Object> table = new HashMap<String, Object>();
 table.put("methodName", "ticket.get");
 table.put("params", new Object[] { Integer.valueOf(i) });
 command.add(table);
}
Object[] result = (Object[]) client.execute(config, "system.multicall", new Object[] { command.toArray(new Object[command.size()]) });

 例えば、チケットIDが1~10の10個のデータを取得するとした場合、もちろん10回リクエストを行うという方法もあるわけですが、multicallを行うことで、1回のリクエストでまとめてデータを取得することが可能です。通信回数が減ることで、応答時間の向上等が期待できるのではないかと思われます。

Continue reading "Trac&XML-RPC(4)"

| | Comments (0) | TrackBack (0)

2007.11.07

Trac&XML-RPC(3)

Trac&XML-RPCの続き。

【チケットの内容を取得する】

Object[] result = (Object[])client.execute(config, "ticket.get", new Object[] { Integer.valueOf(1) });

 指定したIDのチケットの内容を取得します。戻り値の内容は、配列の順番で以下のような感じになります。

TicketID
引数の値と同じ結果となるはず

チケット作成日時
Integer

チケット最終更新日時
Integer

チケットの内容
java.util.Map


 日時に関しては、new Date(((Integer)result[2]).longValue()*1000); のような感じでjava.util.Dateに変換することができます。取得した内容はIntegerですが、1000倍する際に桁あふれが起こってしまうため、longとして扱う必要があります。

 チケットの内容(Map)に関しては、summary=テストチケット1, keywords=, status=new・・・のような感じで格納されていますので、必要な項目をget("summary")のような感じで取得することができます。

Continue reading "Trac&XML-RPC(3)"

| | Comments (0) | TrackBack (0)

2007.11.05

TortoiseSVNとSSLクライアント証明書

テスト用の環境でない限り、あまりないケースだとは思いますが・・・。

1.プライベートCA(A)を作成し、それで署名したサーバ証明書/クライアント証明書を用いてサーバ環境を構築。
2.TortoiseSVNでアクセスする際は、(A)で署名したクライアント証明書をインポートしてからアクセス。
3.プライベートCAの期限が切れた等の理由で、再度作成((B)とします)。サーバ証明書/クライアント証明書も再作成。
4.この状態でTortoiseSVNでアクセスを行おうとした場合、「不明なCA」というエラーが出てアクセスできない!(期待した結果はクライアント証明書の選択ダイアログが表示されること)
5.TortoiseSVNの設定ダイアログで、認証情報を全てクリアしても現象改善せず。

Continue reading "TortoiseSVNとSSLクライアント証明書"

| | Comments (0) | TrackBack (1)

2007.11.04

Trac&XML-RPC(2)

 順番が逆になってしまいましたが、Tracで使用できるXML-RPCのコマンド一覧は、http://hostname/tracproj/test/login/xmlrpcのような感じでアクセスすることで見ることができます(認証が不要な場合は、http://hostname/trcproj/test/xmlrpcのような感じになります)。メソッドの処理内容、引数、戻り値の内容はそのページを見れば書いてあります(英語ですが)。

 Javaのオブジェクトと対比させると、
・array⇒Object[]
 (各要素の中身はStringだったりIntegerだったり、はたまたObject[]だったりするようです)
・string⇒String
・int⇒Integer
・struct⇒Map
 (値の中身はStringだったりIntegerだったり、Object[]だったり)
・base64⇒byte[]
ってなところでしょうか(使った範囲での解釈なので、もしかしたら違う内容があったりするかもしれません)。

 なお、各メソッドにアクセスするためには、XML_RPCのpermissionに加えて、それぞれのメソッドに対応するpermissionが必要です(例えば、Ticketの内容を取得するためには、XML_RPCとTICKET_VIEWのpermissionが割り当てられている必要があります)。TRAC_ADMINのpermissionが割り当てられている場合は、permissionの追加を行うことなく、全てのメソッドにアクセスすることができます。

| | Comments (0) | TrackBack (0)

2007.11.03

Trac&XML-RPC

Javaを使って、Trac&XML-RPC。使用したライブラリは、Apache XML-RPCです。URLやID/PWの指定はJavaアプリからXML-RPCでTracのTicketを更新を参照。使ったのはTrac0.10.4&XML-RPCプラグイン(Rev.1950)の組み合わせなので、今後のバージョンでは挙動が変わる可能性もあるかと。

【マイルストーンの一覧を取得】


Object[] result = (Object[])client.execute(config, "ticket.milestone.getAll", new Object[0] );

引数は不要なのでこんな感じ。サーバに登録されているマイルストーンの一覧が戻ってきます。並び順は、Ticket作成時のマイルストーンコンボボックスの並び順と一致するようです。なお、戻り値の各要素自体はStringとなっています(が、直接String[]へのキャストはできません)。

【指定したマイルストーンの詳細を取得】


Map map = (Map)client.execute(config, "ticket.milestone.get", new String[] { "milestone3" } );

指定したマイルストーンの情報がMapに格納されて戻ってきます。内容としては、name(String)、description(String)、due(Integer)、completed(Integer)が格納されています。順番に、マイルストーンの名称、内容、期限、完了日(完了していない場合は"0")で、期限および完了日をJavaのDateオブジェクトに変換する場合は、1000倍した値を引数にnew Date(((Integer)due).intValue()*1000)のような感じで処理すればOK。

Continue reading "Trac&XML-RPC"

| | Comments (0) | TrackBack (0)

« October 2007 | Main | December 2007 »