Eclipse で SVN 利用時 JavaHL にすると強制終了する時のトラブルシューティング

Eclipse 3.3, Subversive または Subclipse を利用し、Apache2.2 用 Subversion 1.4.5 をインストールした環境でローカルで使っていたところ、SVN リポジトリへのアクセスが発生すると、黙って Eclipse が落ちる、という現象が発生しました。プライマリなパースペクティブが SVN リポジトリにアクセスするものだと Eclipse が全く起動しなくなったり…
 
調べてみたところ、結論として、パスが通る場所(PATH で指定されている場所)に libapr-1.dll があり、libapr-1.dll と eclipse/plugin/*javahl* にある libjavahl-1.dll の(Apache の)バージョンが異なる場合に JavaHL を呼び出した瞬間に Eclipse が落ちるようです。
 
以下のいずれかの方法で対策できます。
(A) Subversion をアンインストールするか、PATH から <Subversion ホームディレクトリ>/bin を外す
(B) Apache2.2 用でなく Apache 2.0 用 Subversion (1.4.x) をインストールする
(C) plugin/*javahl*_X.X.X にあるすべての DLL を、使いたい Subversion の DLL にまるごと置き換える
(D) JavaHL でなく SVNKit など PureJava 実装の SVN コネクタを使う。
 
C の案を採用する場合、Subversive なら

eclipse\plugins\org.polarion.team.svn.client.javahl_1.1.*

Subclipse なら

eclipse\plugins\org.tigris.subversion.javahl.win32_1.2.*

に、それぞれのプラグインで使われている JavaHL の DLL があります。
 
また、置き換える DLL は Subversion ダウンロードページからダウンロードした svn-win32-1.4.*_javahl.zip の中の

javahl/libsvnjavahl-1.dll
bin/*.dll

です。
 
追記:
– 2007-10-26: (C)の案でSubversive についてのみ書いていましたが、本日 Subclipse にして再発したため、再調査の上加筆修正しました。
 
参考:
久しぶりにJavaHL(気の向くままに…)

Windows で SVN – 環境準備から Web 公開、利用までの手順

OS: Windows XP SP2
サーバ環境: Apache 2.2.6 + Subversion 1.4.5 + TortoiseSVN 1.4.5
クライアント環境: Eclipse 3.3 + Subclipse 1.2.x
 
という構成で、SVN 環境を構築したのでその手順を残しておきます。
参考にしたサイトについては後述。
 
– Apache 2.2 をダウンロード、インストール
  詳細は省略
– Subversion インストール
  Apache 2.2 用 zip 版(svn-win32-*.zip)をダウンロード(インストーラが必要なら Apache 2.0 用 exe 版(svn-*-setup.exe)をインストール後、zip 版を上書きする)
 コマンドラインから利用するため、 Subversion インストールフォルダの bin にパスを通しておく。
 
– コマンドラインで SVN リポジトリ作成
引用: http://terai.xrea.jp/Subversion/Apache2.html#uc9cfee4

mkdir c:\svn
svnadmin create c:\svn\hoge
svn mkdir file://localhost/c:/svn/hoge/trunk -m “mkdir trunk”
svn mkdir file://localhost/c:/svn/hoge/tags -m “mkdir tags”
svn mkdir file://localhost/c:/svn/hoge/branches -m “mkdir branches”

– Apache の httpd.conf で SVN リポジトリが見られるように設定
以下の行がコメントアウトされていれば、コメントアウトをはずして有効にします。

LoadModule dav_module modules/mod_dav.so
LoadModule dav_fs_module modules/mod_dav_fs.so

以下の行がなければ、LoadModule の最後に追加します。

LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so

最後に、以下のように、Location や VirtualHost タグで DAV, SVNParentPath を設定します。

<Location /svn>
  DAV svn
  SVNParentPath “c:/svn”
</Location>

これで、Apache を再起動すればブラウザで

http://localhost/svn/hoge

とアクセスして接続を確認することができます。
 
– TortoiseSVN インストール
 これは任意。インストールするとエクスプローラで右クリックでSVNリポジトリが作成できるようになります。
 http://tortoisesvn.net/downloads から、自分の環境用の msi をダウンロード
 インストールし、マシンを再起動したあとに同ページの下にある Language Packs の Japanese をダウンロードして実行すると、設定から日本語が選択できるようになります。
設定方法は、エクスプローラを開いて適当な場所で右クリック→ TortoiseSVN → Settings → General の Language を日本語して OK 、です。
 
 
– Eclipse 3.3 インストール
 詳細は省略。
 
– Subclipse インストール
 Eclipse のインストール/更新メニューで新規リモートサイトとして

http://subclipse.tigris.org/update_1.2.x

を指定すればインストールできます。
 
– Elicpse で SVN 対応
SVN リポジトリーエクスプローラーを開き、SVN リポジトリビューで右クリック、新規→リポジトリーロケーションで以下のように入力します。

http://localhost/svn/hoge

パッケージエクスプローラで既存のプロジェクトを右クリック→チーム→プロジェクト共用→SVN
で、あとはそのままウィザードを進めれば SVN を利用することができます。
 
参考:
Apache2 で Subversion をネットワークに対応(てんぷらメモ)
 SVN リポジトリの作成と Apache での公開手順。
Subversion を Windows で GUI 中心に使う(Landscape – エンジニアのメモ)
 Subversion + TortoiseSVN の導入手順。

Google – 検索ワードのはやりを見る Google Trends

Google Trends
 
流行語関係で検索してみると、こんな感じになります。脈絡ない検索してますが、あくまで例として。
 
上の時系列グラフでいつ多く利用された言葉なのかがわかるようになっています。
下には各国の検索結果が表示されていて、国、地域ごとの違いも比較できます。
 
center と centre の利用状況
 
もちろん1つの単語だけでも検索できます。
 
ライブドア

Eclipse でマウスジェスチャ(Windows)

プラグインで全てのエディタでマウスジェスチャを有効にするというのは現状無理らしいので、フリーソフトのマウ筋で以下の設定をして Eclipse でマウスジェスチャを実現させてみました。
 
MauSuji.ini:
(Target, Action のみ抜粋。既存の設定がある場合要調整)

[Target]
Number_0=1
Succession_0=0
HookType_0=1
WheelRedirect_0=0
FileName0=”eclipse.exe”
 
[Action]
TargetNumber0=1
Gesture0=3
Gesture0_0=12
Gesture0_1=14
Comment0=”エディタを閉じる”
Case0_0=10
CommandTarget0_0=0
Wait0_0=0
Key0_0=599
TargetNumber1=1
Gesture1=3
Gesture1_0=11
Gesture1_1=14
Comment1=”右のタブに移動”
Case1_0=10
CommandTarget1_0=0
Wait1_0=0
Key1_0=546
TargetNumber2=1
Gesture2=3
Gesture2_0=11
Gesture2_1=13
Comment2=”左のタブに移動”
Case2_0=10
CommandTarget2_0=0
Wait2_0=0
Key2_0=545
Comment3=”ファイル新規作成”
Case3_0=10
CommandTarget3_0=0
Wait3_0=0
Key3_0=590

 
とりあえず Firefox の All in one gesture にならい、
 
– 右ドラッグしながら↑→ – タブを右に移動
– 右ドラッグしながら↑← – タブを左に移動
– 右ドラッグしながら↑ – ファイル新規作成(タブ作成)
– 右ドラッグしながら↓→ – 現在のタブのファイルを閉じる
 
としてみました。
デフォルトの設定のままだと右クリックでコンテキストメニューを開く時に一瞬ジェスチャモードに入ってもたつき感があったため、設定→マウス感度の設定→タイムアウトを短くし、150ミリ秒くらいにしました。
 
参考:
Eclipseでマウスジェスチャー

Plugin – 言語パックが出ていないバージョンを日本語化する / 他機能ファイル検索

 
Pleiades
EclipseWiki の説明ページ
このプラグインを適用すると、公式 Language Package が出ていない Eclipse 3.3 を日本語化することができます。
 
GotoFile Eclipse Plugin
EclipseWiki の説明ページ
このプラグインを適用すると、編集メニューに「クイック検索(Ctrl+Alt+N)」の機能が追加され、頭文字だけのキャメルケース検索や、曖昧検索ができるようになります。
思ったほどもたつきも感じませんし、標準のファイル検索機能(Ctrl+Alt+R, Ctrl+Shift+R)よりもだいぶ便利です。
GotoFile update site:

http://www.muermann.org/gotofile/update

 
2007-10-09 現在、GotoFile Plugin をインストールする時に「この環境に適当でないフィーチャーを無視する」にチェックが入っていると、対応バージョンを検出してくれませんでしたが、チェックを外してインストールしても問題なく動作します。

PuTTY でデフォルト設定を変更する

度忘れしていたのでメモ。
 
引数なしで putty.exe を起動し、設定を変更後に
“セッション” カテゴリを選択し、 “保存されたセッション”の欄で Default Settings を選択して保存ボタンでOK。
 
端末のプライベートキーファイルを設定するには、
“接続” -> “SSH” -> “認証” カテゴリを選択し、”認証パラメータ”の欄で認証のためのプライベートキーファイルに(puttygen.exe で作成した) *.pty ファイルを設定すればよい。
 
OpenSSH の ssh-keygen で作成した秘密鍵を putty でも使いたい場合は puttygen で Load ボタンでssh-keygen で作成した秘密鍵(id-dsa や id-rsa)を選択後 Save private key ボタンで .pty 形式に変換できる。
鍵の内容は同じなので、publick key は両方の秘密鍵で共通。

DHTML ページのアクティブな HTML ソースを表示する

Ajax を使っているページをブラウザでソース表示すると、スクリプト実行が反映されない HTML ソースしか取得できません。
そこで、JavaScript 実行結果が反映された現在の BODY の中身を表示する “javascript:” スキームを使ったスクリプトを書いてみました。
 

javascript:open(“about:blank”).document.write(“<PLAINTEXT>”+document.body.innerHTML);

ソースを表示したいページのアドレスバーの URL 入力欄にコピペして実行すると、新しいウィンドウでソースを表示します。
※ポップアップがブロックがされる場合、一旦解除して、アクセスしなおしてください。
  
選択コピー可能なように新しいウィンドウを立ち上げているところがミソです(alert だとコピー不可)。
 
Windows IE6, Firefox2.0 で動作確認済です。

コーディング規約 – いいコードの書き方

いいコードとは, 心得5ヶ条(ThinkIT)
電通国際情報サービスの高安氏らによる記事。良書です。
 
ブール値を返すメンバー関数の命名規則(吉田誠一のホームページ)
JDK の API 命名規則を元にして、英文で通るメソッド命名規則について書かれています。
 
参考:
コーディング規約の会(オブジェクト倶楽部)

SUPER C – マルチメディアファイル相互変換をするフリーソフト

http://www.erightsoft.net/Superdc.html
 
未使用ですが、携帯動画変換君のように 3gp など携帯向けの動画、音声も変換することができるようです。
 
参考:
あらゆるマルチメディアファイルを相互変換するフリーソフト「SUPER C」(GIGAZINE)

symfony – Propel を仲介せずに databases.yml に書かれた設定や DB接続インスタンスを得る

sfDatabaseManager クラスを使うことで Propel より低いレイヤーでデータベースの情報を得たり、(Creaole による)データベース接続を行うことができます。
この方法を使うと databases.yml の設定を一時的に変更した上でデータベースアクセスができるようになります。

$manager = new sfDatabaseManager();
$manager->initialize(); // インスタンスに database.yml ファイルを読み込んで初期化する。
$db = $manager->getDatabase(“propel”); // “propel:” 以下を参照し、sfDatabase のインスタンスを得る。 引数を省略すると default: を参照する
 
// database.yml の設定を参照する例:
echo $db->getParameter(“phptype”).”\n”; // propel: param: phptype: を参照(“mysql” など)
echo $db->getParameter(“host”).”\n”; // propel: param: host: を参照(localhost など)
echo $db->getParameter(“database”).”\n”; // propel: param: database: を参照
echo $db->getParameter(“username”).”\n”; // propel: param: username: を参照
 
// databases.yml の設定を一時的に上書きする例:
$db->setParameter(“database”, null); // 特定のデータベースに接続しない。
                                     // (データベースが存在しなくてもエラーにならないため
                                     // CREATE DATABASE したい場合やテーブルを一切利用
                                     // しない場合などに有用)
 
// データベース接続の例:
// databases.yml の設定をもとに Creole のデータベース接続インスタンスを得る
// (vendor/creole/Connelction.php で定義される Connection 抽象クラスのインスタンス)
$con = $db->getConnection();
 
$rs = $con->executeQuery(“SELECT CURRENT_TIMESTAMP AS time”); // クエリを発行。
while($rs->next()){ // ポインタを進める(複数レコード対応)
    $row = $rs->getRow(); // レコードを連想配列で取得
    echo $row[“time”];
}

 
参考:
Class sfDatabaseManager(symfony API)
 sfDatabaseManager のクラス定義。
 
Class sfDatabase(symfony API)
 sfDatabaseManager::getDatabase() で得られるインスタンスの定義。
 
SymfonyAPI – Connection Interface Reference(cpr.in-berlin.de による symfony の phpdoc)
 sfDatabase::getConnection() で得られるインスタンスの定義。
 
SymfonyAPI – ResultSet Interface Reference(同上)
 Connection::executeQuery() で得られるインスタンスの定義。