既存のバージョン管理されていない、それなりに大きい規模のプロジェクトを SVN でバージョン管理しようとしている今日この頃。
手始めに現状のリソースの一部を Eclipse(+Subclipse) に 1プロジェクトとしていれてプロジェクトまるごとリポジトリに突っ込んだ結果、SVN を見に行く処理の度に激しく重くなってしまいました。
現時点でプロジェクトフォルダ内にあるファイル数は約 50000 個、フォルダは約 2500個、データ量 1.85GB。
いくら Eclipse が昔に比べパフォーマンスがよくなったとはいえ、この数を扱うとさすがに重い。そのせいなのか同期に失敗したり(というか反映が激しく遅かったり)、ところどころ動作が怪しい。
このままでは作業に支障がでる、ということでリポジトリから部分チェックアウトして別個プロジェクトとして作業することにし、無事軽快さを取り戻しました。
.project を svnignore に追加しておけばリポジトリとの齟齬もありません。
難点は現状チェックアウトフォルダがプロジェクトルートじゃないと同期がとれなくなることでしょうか。ある親フォルダの、一部の子フォルダのみバージョン管理させたい場合は子フォルダごとにプロジェクトを分けるか、親フォルダでチェックアウトして svnignore で更新フォルダを限定するかのどちらかの対応しかなさそうです。
前者で対応する場合、作業セット(working set)(パッケージエクスプローラの右上の▽ボタン)を使うと、VS.NET のソリューションみたくパッケージエクスプローラの表示をフィルタリングできるのでよさそうです。
ナビゲーターフィルターもそれなりに使えそうですが、こちらは表示しないものを選択するネガティブフィルタリングであることと、編集が若干手間なのがネックです。
[[|Eclipseのナビゲーターのフィルターパターン追加http://fenrir.naruoka.org/archives/000530.html]](Fenrir’s BLog)
投稿者: editor
JavaSctript で信頼できる数値の範囲
JavaScript’s Defects on Numbers
Eclipse の Java2Script Pacemaker プラグイン開発者のブログより、
0×20000000000000 (54ビット)を超える値は信用できないよ、という記事。
以下ほぼ原文訳。
テストスクリプト:
javascript:alert (0x1ffffffffffffe);
javascript:alert (0x1fffffffffffff);
javascript:alert (0x20000000000000);
javascript:alert (0x20000000000001);
上記のテストスクリプトを実行すると、最後の二つの値が全く同等になることが確認できます(Firefox 2.0, IE 6.0 で確認)。
結論として、安全な数値範囲は -0x1fffffffffffff(-9007199254740991) から 0x1fffffffffffff(9007199254740991)までの範囲(正負それぞれ53ビット)です。Java から JavaScript への変換で、Java の long 値を JavaScript の数値に変換する時は演算結果が正しくなくなることがあります。
上の記事では J2S についてのみ書かれてるのだと思いますが、GWT でも該当するかもしれません。
Highslide JS で簡単にサムネイル画像ポップアップ
Highslide JS
近頃は汎用的で高機能な Ajax JavaScript ライブラリが充実してきましたが、ただサムネイル拡大表示をスマートに行いたい、という時はこちらのほうがこれを使うのがよさそうです。
一番単純な例は次のようなものです。
<!– ヘッダで定義しておく –>
<script type=”text/javascript” src=”my-highslide-dir/highslide.js”></script>
<!– 実際にサムネイル表示する –>
<a href=”拡大画像のURL” class=”highslide” onclick=”return hs.expand(this)”>
<img src=”サムネイル画像のURL” />
</a>
JavaScript 非対応の時はただ拡大画像へのリンクになるあたりがスマートです。
画像のポップアップだけではなく、ポップアップ画像に任意の説明を付与も比較的簡単にでき、機能面でも素晴らしいですね。
参考サイトを参照すると詳しい使い方や利用例があります。
参考:
– Highslide JS でサムネイル画像を拡大表示する(小粋空間)
– Highslide JS のサンプルページ(caramel-tea.com)
JSEclipse 導入でエラー
JavaScript 用 Eclipse プラグインは JSEclipse がよさそう、ということで
Eclipse 3.3.1 に JSEclipse 1.5.3 を下の更新サイト
からいれてみたのですが、Eclipse を再起動して早速 *.js ファイルを開いてみたところ、次のようなエラーが…
Error opening the editor
とりあえず ソフトウェア更新→構成の管理→JSEclipse 1.5.3を選択し、更新をスキャンしてみたところ、Adobe Labs に JSEclipse 1.5.5 があるよ、と言われたのでそれをインストールし、無事動作しました。
最初から Adobe Labs からインストールすればよかったのですね。
Update site: Adobe Labs
http://download.macromedia.com/pub/labs/jseclipse/autoinstall/
ちなみに、InterAKT と Adobe の関係については FAQを参照するとわかるのですが、InterAKT が Adobe に買収され、その結果 JSEclipse を含む一部の製品が Adobe Labs に移ったようです。
PostgreSQL で使える全文検索エンジン
– Ludia
wiki: http://ludia.sourceforge.jp/moin.cgi/#id9
内部で Senna と MeCab が使われています。
PostgreSQL に Ludia をインストールすると、Senna の構文での文字列検索を行える @@ 演算子等、全文検索用の機能が追加されます。
SELECT content FROM fooTable WHERE content @@ ‘今日は+です’
結果:
| content |
| 今日はくもりです |
| 今日はいい天気ですね。|
PHP4 と PHP5 の Sigleton Pattern
PHP4 での Singleton
error_reporting(E_ALL);
class Foo {
function &getInstance(){
static $_singleton;
if(empty($_singleton)){
$_singleton = new Foo();
}
return $_singleton;
}
var $_n;
function add(){
echo (++$_n).”\n”;
}
}
$o1 =& Foo::getInstance();
$o1->add(); // 1
$o2 =& Foo::getInstance();
$o1->add(); // 2
$o2->add(); // 3
$o1->add(); // 4
& と static の使い方が肝です。
static キーワードは、指定したローカル変数のライフサイクルを延長するためのキーワードです(注1)。
メソッド定義とメソッド呼び出しの両方に & を付けないと、参照でなくコピーになってしまい、個別のインスタンスになるために結果が 1,2,1,3 になってしまいます。
PHP5 の場合も上のコードを変更なしで Singleton Pattern として動作させることが可能です。
さらに、メソッドの戻り値が標準で参照になるため、& を外しても singleton を実現することができ、クライアントコードが誤用する可能性がなくなったといえます(注2)。
このように PHP4 ではクライアントに特殊なメソッド呼び出し方をしないと意図しない結果になるため、Singleton な動作が必要な箇所については極力非公開にして内部利用にとどめるほうが賢明かも、です。
注1:
static キーワードには、スコープ(可用範囲)を広げる効果はありません。
ローカル変数がフィールドになるわけではないため、異なるメソッドで同じ名前の変数を指定しても、別個の変数になります。
注2:
ただし、クライアントコードで
$o1 = clone Foo::getInstance();
のように clone を使って意図的にコピーを行った場合、PHP4 で & を付けなかったときと同様の結果になります。
この場合はクライアント側で結果が予測できるため、問題にはならないでしょう。
参考:
– PHP4 でデザインパターン(Do You PHP?)
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でマウスジェスチャー