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を買ってみる。

本日のツッコミ(全1件) [ツッコミを入れる]

# Nay [参考になりますな。<コピー]


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 のほとんどが呼び出せます。

参考

Tags: Subversion

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 回りを見ていると、なんだか林くんの足跡を辿っているような気分になるな。

参考

Tags: Subversion

SvnTask

肝心の AntTask はこちら

使い方は同梱の build.xml を参考にどうぞ。

Tags: Subversion

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,
        )
      )
   )

2007-05-07 (Mon)

黄金週間まとめ

今年は、どこにも出かけずお家で引きこもっていたわけだが、それなりの成果を出せたので満足。

JRubyに送ったパッチがapplyされて嬉しい。1.0RC1に含まれる模様。

JRubyのソースは、とても読みやすいので驚いた。JavaとRubyのソースが読める人ならだいたい何をやっているか分かるんじゃないかな。 綺麗にJavaとRubyのクラスをマッピングしているあたりがお見事。

Tags: JRuby tDiary
本日のツッコミ(全2件) [ツッコミを入れる]

# takeda-soft [今年は?今年も?w そんなこと言われたら僕も読んでみたくなりました。そのコードクレジットにkoichiroの文字が入..]

# ko [そこは追求しない方向でw>今年は? 応援ありがとう。さっそくIconvにクレジット入りましたよ。もうちょっとがんばっ..]