« October 2006 | Main | December 2006 »

November 2006

2006.11.25

Apacheでクライアント証明書

 Apache2.0.59+Tomcat5.5でクライアント証明書を使用した場合、証明書を要求するエリアに対してPOSTリクエストを行うと405エラーが発生。画面およびログファイルを見た感じ、Tomcat側ではなくApache側でのエラーっぽい(Tomcatまでリクエストが届いていない)。Apache側でSSLVerifyClientを無効にしてみるとエラーが出なくなるので、クライアント証明書を使用していることが原因なのはほぼ間違いなさそう。

 で、いろいろと調べてみると、同じ現象に関する内容を発見。どうも、Apacheのバグっぽいですね。しかも、かなり以前からの。

 2.0用のパッチもあるようですが、ビルドする環境なんてもっておらず、仕方がないのでApache2.2.3に変更することに。まぁ、LocationディレクティブなどでTomcatへのフォワードとSSL証明書の要求を同時に記述できるので、設定の仕方としてはわかりやすくなりましたが。

 ところで、サーバ側SSL証明書に登録されているホスト名と異なるホスト名でアクセスした場合(例えばhttp://localhost/~など)、証明書の選択ダイアログが出てこない(IEの場合)のはそういうものなんでしょうか。もっとも、最初に「ホスト名が違います」の警告ダイアログが表示されますし、クライアント証明書を有していない状態でhttp://localhost/~などでアクセスした場合はページにアクセスできないので、実用上は問題ないとは思いますが。

| | Comments (0) | TrackBack (0)

2006.11.17

履歴付きメモツール(ひとりWiki+Subversion)

 メモツールとしてひとりWikiを使用し、そのデータをSubversionで履歴管理する方法を考えてみました。

 ひとりWikiのメリットとして、


  1. スタンドアローンで動作するWikiシステムなので、サーバの起動等が不要。なので、例えばプログラムとデータファイル一式をUSBメモリなどに入れて持ち歩けば、(OSの条件をクリアすれば)どこででも使用可能。

  2. Wikiなので、(慣れれば)整形記述が楽。個人的には、Wikiで記述可能な範囲の表現であれば、Wordなどで整形しながら記述するより、Wikiの方が素早く作成できるのでは、と思います。

  3. htmlファイルで出力できるので、まとめた内容の配布がしやすい。


ってのが考えられるかと思います。ただ、編集内容の履歴管理は行っていないため、保存してしまうと「この部分前はなんて書いてたっけ?」ってことになってしまう場合も。で、その部分をSubversionを用いて保管することができないかと検討してみたわけです。

 Subversionのメリットとしては割愛するとして、今回のキーとなる部分は、


  1. FSFS形式で作成したリポジトリにfileプロトコルでアクセスするようにすれば、サーバ不要。なので、例えばUSBメモリの中にリポジトリとワークコピーを作成しておけば、気軽に持ち運び可能。


ってところでしょうか。

 ひとりWikiのデータは、ひとりWikiのexeがあるフォルダ内のdataフォルダ内に格納されるので、リポジトリをその付近に作成してdataフォルダが直接ワークコピーとなるように構築。例えば、ひとりWikiのexeを C:\htwiki というフォルダに格納しているとすると、


  1. C:\htwiki\data・・・データ格納フォルダ

  2. C:\htwiki\repository・・・Subversionリポジトリ(FSFS)

  3. (その他のフォルダは省略)


ってな感じのフォルダ状態となります。で、repositoryに対してsvn.exeやTortoiseSVNを用いてdataフォルダをあらかじめ登録しておき、リポジトリのfile:///C:/htwiki/repository/dataをC:\htwiki\dataにチェックアウト。最初は、「ファイルが存在しますがよろしいですか?」という確認(警告)が表示されますが、気にせずに「はい」を実行。
 あとはsvn.exeやTortoiseSVNを用いてしかるべきタイミングでコミットしていけば、「履歴付きメモツール」のできあがり。

 ただ、これだけだとコミット忘れが発生する可能性があるので、ひとりWikiの起動とコミット処理を一体化したバッチファイルを作成し、普段はそれを用いてひとりWikiを起動するようにしてみました。
 コミット処理の部分は、ひとりWikiで削除されたファイルに関して漏れる可能性があったので、Sed for Windowsも組み合わせて、以下のようなバッチファイルとなっています(svn.exeやsed.exeにはパスが通っているという前提です)。

svn.exe st data | find "!" | sed -e "s/![ ]*\([^ ]*\)/\1/g" > delete.txt
for /F %%I in (delete.txt) DO svn.exe delete %%I
svn.exe st data | find "?" | sed -e "s/?[ ]*\([^ ]*\)/\1/g" > add.txt
for /F %%I in (add.txt) DO svn.exe add %%I
del delete.txt
del add.txt
svn.exe ci data -m ""

 なお、コメントは常にブランクとなるようにしていますが、必要に応じて入力できるようにすることもできるはずです。

#ひとりWikiのプラグインとして作成すれば、もっとスマートに作れるのかもしれません(^^;

| | Comments (1) | TrackBack (1)

2006.11.15

WorkStyle

 GTD(Getting Thing Done)にできるだけ準拠したタスク管理システムのWorkStyle。試しに、インストールしてみました。
 Python版ではなく、Java版(ver0.4)をダウンロードしたのですが、対応しているTomcatのバージョンが不明・・・。なので、とりあえず5.5系列のwebappsフォルダ内にworkstyle.warファイルをコピーして、Tomcat起動。http://localhost:8080/workstyle/でトップページにアクセスしてあれこれと操作。
 ん~~?? IE6の場合、ちらほらとJavaScriptのエラーが発生してしまっている?? FireFox2.0でやってみると、IE6だと(正常に)動かなかったと思われる部分も問題なく動くようです。

 それはさておき、シンプルな画面構成でいい感じです。タグを登録することにより、担当者を割り振ることもできるみたいです。試しにしばらく使ってみることにするかな。

| | Comments (1) | TrackBack (0)

2006.11.14

Apache2.2+Tomcat5.5

 Apache HTTP Server2.2とTomcatを連携する場合は、Apache2.0以前の時と異なり、mod_jk/mod_jk2は要らなくなった・・・という話を耳にしたので、とりあえず調査。

 Apache側のmod_proxy_ajpにより連携できるようになっているようですね。何も考えずに、とりあえずはjsp-examplesとservlets-examplesの2つのパスに関してTomcat側に処理を送るようにしてみました(今回使用したのはApache2.2.3 + Tomcat5.5.20)。

 httpd.confファイルの

#LoadModule proxy_module modules/mod_proxy.so
#LoadModule proxy_ajp_module modules/mod_proxy_ajp.so

の2行のコメントを解除し、
<Location /jsp-examples/>
  ProxyPass ajp://localhost:8009/jsp-examples/
</Location>
<Location /servlets-examples/>
  ProxyPass ajp://localhost:8009/servlets-examples/
</Location>
という行を追加するだけでOK(Tomcat側のservers.xmlがデフォルトのままという前提ですが)。
 Tomcat→Apacheの順番で起動し、http://localhost/jsp-examples/でリクエストすると、TomcatのJSPサンプルページが表示される・・・はずです(上記以来のURL(例えばhttp://localhost/index.htmlなど)は、Apache側で処理されることとなります)。

 ちなみに、httpサーバに届くリクエストURLに対して、Tomcat側のコンテキストルートを指定することができるので、

<Location /jsp/>
  ProxyPass ajp://localhost:8009/jsp-examples/
</Location>
なんて記述すると、http://localhost/jsp/でJSPサンプルページにアクセスできるようになります。全てのリクエストをTomcat側に流す場合は
<Location />
  ProxyPass ajp://localhost:8009/
</Location>
って感じで指定するとOKっぽいです。

| | Comments (8) | TrackBack (6)

2006.11.11

FreeMind 0.9.0

 FreeMind0.8.0がリリースされてから1年強。0.9.0のベータ版が公開されていました(現時点ではβ8のようです)。

 ざっくりと、以下のような機能が追加されているようです。


  1. 属性情報の入力。
  2. フィルタリング機能。
  3. WYSIWYGによる編集機能。
  4. GroovyによるScript。
  5. その他。

 まだまともに使っていたわけではないので、具体的にどのような時にどういう風に使えばいいのかは分かりませんが(^^;;

 なお、別途JavaHelp Systemが必要となるようです(最初javax.help.HelpBrokerクラスが見つからないと怒られてしまった)。JavaでHelpシステムを構築するためのライブラリだそうですが・・・WYSIWYGエディタの部分などに使用しているのかな?

| | Comments (0) | TrackBack (0)

2006.11.06

Trac0.10はunicodeベースに

 Trac0.10で2バイト文字で悩まされていますが・・・0.10のReleaseNoteに文字コードをutf-8からunicodeに変更したので、多くの非西洋言語においては様々な問題につながると書かれていました。

原文:

Trac used to handle text content by using str objects, in which Unicode characters were represented using UTF-8 encoding. This lead to various problems with most non-western languages.

 見事にその影響を食らっていたわけですな(^^; ってことは、今回のとりあえずの対応は、やはり「その場しのぎ」でしかないようで、utf-8にエンコードし直して処理するのではなく、他方をunicodeに変換して処理するのが正解か?

 なお、文字コードが変更されたことに伴うガイドラインも公開されているようなので、また読んでおくこととしますか・・・。

| | Comments (0) | TrackBack (0)

Trac0.10と日本語wikiページ名

 Trac0.10で日本語wikiページ名がエラーになるという件ですが、何のことはなく、単に独自にカスタマイズしていた部分でエラー吐いていただけでした(爆)。

 原因としては、BackLinksと同じ原因でした(^^;
 ソース上の怪しい場所に対して、encode('utf-8')を適用することでエラーを回避。

 ってことで、 Trac0.10で日本語で書いた2つのトラブルはいずれも(とりあえずは)解決。

#しかし、挙動が変わったのはなぜだろう?? より汎用的な仕様にするために(オリジナルで)修正した部分が、結果として過去のバージョンとの互換性を一部失ってしまっているんでしょうか・・・。

| | Comments (0) | TrackBack (1)

2006.11.05

Trac0.10&BackLinks

 Trac0.10の環境でBackLinksマクロが上手く動かない件ですが・・・関連しそうな資料を見つけました。

StringIO -- ファイルのように文字列を読み書きする

StringIO オブジェクトはユニコードも 8-bit の文字列も受け付けますが、この2つを混ぜることには少し注意が必要です。この2つが一緒に使われると、 getvalue() が呼ばれたときに、 (8th ビットを使っている)7-bit ASCII に解釈できない 8-bit の文字列は、 UnicodeError を引き起こします。

 ただ、実際にはgetvalue()以前のところでエラーが出ているようなので、こうなったらTry&Errorってことで、文字コードの変換処理などをいろいろと試してみたところ、とりあえず、結果的に以下の修正で日本語ページ名の場合でも問題なく処理できるようになりました。


  • マクロファイルの先頭に# -*- coding: UTF-8 -*-を追加し、ファイルのエンコーディングを明示的に指定。
  • 自分自身のページを除外するif文(33行目)において、DB取得結果の文字コードをutf-8に変換するように。if row[0].encode('utf-8') != thispage:
  • リンク元ページ名をセットする処理(35行目)も同様にutf-8に変換。buf.write(row[0])

(元ソースは、MacroBazaarで公開されているBackLinks.3.pyです)

 もっとも、これが効率のいい処理なのかどうかは不明ですし、こういう回避が正しいのかどうかも不明ですが(^^;

| | Comments (0) | TrackBack (0)

2006.11.04

Trac0.10と日本語

 Webアプリケーションで(多くの場合)避けては通れないのが非英語圏の文字の取り扱い。
 Trac0.9.xでは、Subversionの属性情報で文字が化けたものの、それ以外では特に不都合を感じたことはありませんでした。
 で、Trac0.10では・・・これまた謎な挙動が。


  • 日本語wikiページ名が問題なく使用できる環境とできない環境とがある? テスト環境を含めていくつかの環境で構築しているのですが・・・OSからして違っていたりするので、どこに問題があるのやら?(Pythonなどのバージョンは基本的に同じものを使用しているはずなのですが)
  • 日本語wikiページでエラーが出る環境においても、リポジトリブラウザは問題なし。
  • BackLinksマクロにおいて、カレントページが日本語wikiページの場合に、エラーが出るようになった。これはどちらの環境でも同じ。0.9.xの時は問題なかったのに。

 Trac本体のソースを見比べてみると、かなり大幅に変更されているようで、そのあたりが影響している可能性は高そうですが・・・普段Pythonを使っているわけではないので、どこをどういじればどういう動きをするのか、ほとんど分かっていません(汗)。

 まぁ、日本語wikiページの使用は、僕自身はできれば避けたいところですので(本当はSubversionに追加するファイルからも2バイト文字を排除したいくらい)、注意して扱えばいいとは思うのですが。

#本文(wikiページの内容)やファイルの内容(リポジトリブラウザで閲覧するソースファイルなど)、属性の内容(Subversionで登録した属性)などにおいては日本語も問題なく表示できることを望みますが、そういう意味では0.10の動きの方がいいのかも。

| | Comments (0) | TrackBack (2)

2006.11.03

2バイト文字を含む属性値

 Subversionで2バイト文字を含む属性値を登録して、それをTracのリポジトリブラウザで表示した場合・・・

  • Trac0.9.5(Win2k):属性値の表示が見事に化ける
  • Trac0.10(WinXP):問題なく表示できる
     属性の処理を行っているのは、versioncontrol/web_ui/browser.pyになるのですが、ソースを見比べてみると・・・書き換わっていました。

     ちなみに、Trac0.9.5の場合、上記ソース(日本語版)の23行目を

    from trac.util import sorted, to_utf8

    に、87行目を
    'props': dict([(name, to_utf8(value, "Shift_JIS"))

    にすると、とりあえずごまかせました。ShiftJIS固定で処理しているので、他のエンコードが混じったらNGとなりますが(笑)。

  • | | Comments (0) | TrackBack (0)

    2006.11.02

    FilenameSearchPlugin

     Tracで、リポジトリ内からファイルを検索するときに、ファイル名でサクッと検索できるといいなぁ・・・ということで、FilenameSearchPluginを導入してみました。

     Trac Hacksのリポジトリブラウザから、Revision1480の時点のファイルをアーカイブで取得。Zipファイルを展開し、いつも通り

    python setup.py install

    でサクッとインストール。C:\Python23\Lib\site-packages\TracFilenameSearch-1.0-py2.3.eggができあがっていることを確認。

     Admin画面でPluginを有効にした後、念のためApacheを再起動。Tracの検索画面に、検索対象としてFilenameのチェックボックスが追加されているので、試しにチェックを入れて*.javaって感じで検索を行ってみると、javaソースの一覧が表示されました。

    #なぜか今は存在しないファイルが大量に表示されていたので、tracadminでresyncを行ってリポジトリとの同期処理を実行。綺麗になったのはいいのですが・・・なぜチェンジログがずれていたんだろう??

    | | Comments (0) | TrackBack (0)

    2006.11.01

    Trac0.10でZipダウンロード

     Trac0.10では、リポジトリブラウザの画面において、Zip形式での一括ダウンロードがサポートされるようになっています。

     trac.iniに

    [browser]
    downloadable_paths = *

    を追加すると、リポジトリブラウザからzip形式でのダウンロードができるようになるのですが、そのままではファイル名に2バイト文字が含まれていると、見事に文字化けします(笑)。

     ソースを調べてみると、changeset.pyの598行目の

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

    の部分でファイル名の文字コードを定義しているようです。なので、UTF-8を上手く処理できるZipユーティリティがあれば問題ないのでしょうが、残念ながらそういうツールを知らないので、試しにこの部分をShift_JISにしてみました。

     基本的に2バイト文字が含まれているファイル名も、文字化けすることなく取得することができるようになりましたが・・・「~」が含まれていると、encoding error: invalid character \uff5eというエラーが出てしまいます。「~」などの文字が鬼門になるのは、Java以外でも起こりうるんですね(^^;

    | | Comments (0) | TrackBack (0)

    « October 2006 | Main | December 2006 »