2002-05-07 (Tue) やっとプロジェクト開始しそう
▲ JAXP1.1でDOMをStream出力
今までできないと思ってXercesのDOMSerializerを使ってたけど、JAXPではXSLT無しでTransformするとコピーになる仕様らしい。
void printNode(Node node) { TransformerFactory tf = TransformerFactory.newInstance(); Transformer copy = tf.newTransformer(); Source source = DOMSource(node); Result result = new StreamResult(System.out); copy.transform(source, result); }
▲ UML モデリングのエッセンス 第2版
4881358642買っちゃった。リファクタリングのマーティンの本。
▲ プログラミング作法
4756136494も買っとけばよかった。
▲ SUN CERTIFIED PROGRAMMER FOR THE JAVA PLATFORM.
Java認定資格をとってみようかとユル〜く決心。目標はDeveloper。というわけで4872804392を買ってみる。
2003-05-07 (Wed)
▲ Subversion クライアント
Subversion のリポジトリがWebDAV ライブラリからうまくアクセスできないのは、リポジトリに XSLT を設定しているからでは?
himi さんによると現状の Subversion が吐き出す XML は、ダメダメで
SVNIndexXSLT "/~svn/svnindex.xsl"
を設定しているとクライアントが正しくファイルシステムを認識できない可能性があるかもとのこと。
しかしこれを外してしまうと著しく表示が寂しくなるので、ウチのリポジトリでは Subversion repository に習って HTML と XML の両方のビューを用意しました。
あとリポジトリをチェックアウトするような AntTask は、Subversion が提供している SWIG Java binding を利用するのが手っ取り早いでしょう。Java から Subversion API のほとんどが呼び出せます。
参考
▲ SWIG Java binding
...手っ取り早いと思ったので実際やってみました。
んが、ちっとも手っ取り早くないことが判明。
- Subversion 0.20.1 ではダメ
- Python の例は豊富だけど Java は、あんまり情報ナシ
- Windows 環境だとますます情報少な目
乗りかかった船なので Ant からチェックアウトできるところまでやってみました。
Subversion の SWIG インターフェースは、リポジトリと同じサーバで動かすことを想定しているのか、認証関係のサポートがほとんどないみたい。結局適当に svn_client.i へ、svn_client_ctx を構築するヘルパ関数を追加して対処。
Index: svn_client.i =================================================================== --- svn_client.i (revision 5817) +++ svn_client.i (working copy) @@ -270,3 +270,36 @@ %include svn_client.h +/* ----------------------------------------------------------------------- + simple client context setup. +*/ + +%inline %{ + +void svn_client_setup_ctx(svn_client_ctx_t *ctx, apr_pool_t *pool, char *username, char *password) +{ + apr_array_header_t *providers + = apr_array_make(pool, 1, sizeof(svn_auth_provider_object_t *)); + svn_auth_provider_object_t *simple_provider + = (svn_auth_provider_object_t *)apr_pcalloc(pool, sizeof(*simple_provider)); + svn_auth_baton_t *ab; + + svn_client_get_simple_provider(&simple_provider, pool); + + *(svn_auth_provider_object_t **)apr_array_push(providers) = simple_provider; + svn_auth_open(&ab, providers, pool); + svn_auth_set_parameter(ab, SVN_AUTH_PARAM_DEFAULT_USERNAME, + username); + svn_auth_set_parameter(ab, SVN_AUTH_PARAM_DEFAULT_PASSWORD, + password); + + ctx->auth_baton = ab; + ctx->prompt_func = NULL; + ctx->prompt_baton = NULL; + ctx->log_msg_func = NULL; + ctx->log_msg_baton = NULL; + ctx->notify_func = NULL; + ctx->notify_baton = NULL; +} + +%}
あとは swig を使って生成した C と Java の Subversion wrapper をコンパイルすればよいのですが、これも一苦労。C ソースは JNI から呼び出せるように DLL としてコンパイルする必要があります。
大変なので wrapper のソースと Win32 用の DLL をまとめて以下に置きます。
アーカイブ中の lib/win32/svn_swig_java-rev5817-2.dll を Subversion のインストールしたディレクトリへ起きます。ここには PATH が通っている必要があります。インストーラで Subversion をインストールしていれば問題ないでしょう。
このへんの Subversion binding 回りを見ていると、なんだか林くんの足跡を辿っているような気分になるな。
参考
2006-05-07 (Sun)
▲ Apache2のSSL
黄金週間最後の課題をクリアすべくSSLを導入しようとしてハマる。SSLを有効にすると今まで設定していたnon-SSL側の設定が無効になってしまうのであった。
Apacheの<VirtualHost>ディレクティブをよくよく読み返してやっと気がついたが、VertualHostに適切なIPとportを振らずに、SSLもnon-SSLのバーチャルホストも`*'にしていたので設定が干渉してたのが原因でした。気がついてみればなんでもないが、悩んでしまった。
これでアプリケーションはlighttpdで、認証周りはApacheな環境ができた。
RailsApp <--- lighttpd(FastCGI) <--- Apache(SSL+BASIC認証) <--- browser
あとportsのphpが整理されCGIとmod_phpが共存できるようになったり、mod_phpがデフォルトでは無効だったりになったので、この機会にphpアプリも上記のようにlighttpd(FastCGI)で動かすようにしてみた。
サンプルで入ってるlighttpdの設定をコメントアウト外して有効にし、phpのcgiコマンド名がphp -> php-cgiに変わったのでそれを修正しただけで動いちゃった。
# php stuff fastcgi.server = ( ".php" => ( "localhost" => ( "socket" => "/tmp/php-fastcgi.socket", "bin-path" => "/usr/local/bin/php-cgi", "mini-procs" => 1, "max-procs" => 1, ) ) )
- 参考: 携帯電話用webメーラー … http://alk.dip.jp/apache2-default/sv330.html
2007-05-07 (Mon)
▲ 黄金週間まとめ
今年は、どこにも出かけずお家で引きこもっていたわけだが、それなりの成果を出せたので満足。
- [JRUBY-79]: RUBYLIB environment variable ignored
- [JRUBY-673]: Dir.chdir with no arguments does not honor ENV['HOME']
- codelistプラグイン
- mixingプラグイン
JRubyに送ったパッチがapplyされて嬉しい。1.0RC1に含まれる模様。
JRubyのソースは、とても読みやすいので驚いた。JavaとRubyのソースが読める人ならだいたい何をやっているか分かるんじゃないかな。 綺麗にJavaとRubyのクラスをマッピングしているあたりがお見事。
# Nay [参考になりますな。<コピー]