2010年6月21日月曜日

Kyoto Cabinetとluaとluajit

lua-5.14用にコンパイルした(/usr/local/lib/lua/5.1/)kyotocabinet.soを
luajitから使ってみました。luaとの違いは、おそらくループまわりの高速化になります。

vmplayer上の1core 2GHzで比較

$ lua kctest.lua order "casket.kch" 1000000

opening the database:
time: 0.001
setting records:
time: 4.013
getting records:
time: 3.867
removing records:
time: 4.019
closing the database:
time: 0.008

$ luajit kctest.lua order "casket.kch" 1000000
opening the database:
time: 0.001
setting records:
time: 3.576
getting records:
time: 3.483
removing records:
time: 3.417
closing the database:
time: 0.009

12%前後高速化したようです。

ちなみに、/usr/local/lib/kyotocabinet.soをldconfigしてないと、
luajitでは、require "kyotocabinet"で、セグメントフォルトしました。
luaでは、kyotocabinet.soが、見つからないというメッセージになりました。

ここら辺の面倒見は、luajitよりluaのが、いいようです。

仕組みを分かってないが、luajit-2.00-beta4.soと、リンクする必要はないのか。
必要なのは、Tokyo Tyrantみたいに、luaをKyoto Cabinet側に組み込むときかな?

そして、今後のlua-5.2.0登場で、luajitがどうなるのか戦々恐々としてます。

2010年5月13日木曜日

mb_convert_kanaで、半角から全角に変換されないASCII文字

$halfwidth = " !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~";

$fullwidth = " !”#$%&’()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[¥]^_`abcdefghijklmnopqrstuvwxyz{|} ̄";

echo $halfwidth,"\n";
echo mb_convert_kana( $halfwidth,"ASKVC","EUC-JP"),"\n";
echo $fullwidth,"\n";
 
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~

 !”#$%&’()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[¥]^_`abcdefghijklmnopqrstuvwxyz{|} ̄

",',\,~が変換されない。

2010年2月23日火曜日

Clojore 1.1とAOT

Excelsior JETを使って、(Sun Hotspot JVMと比較した)Clojureの起動速度を測定してみました。
IBM JVM J9の場合も追記しましたが、こちらはおもに処理速度を向上したい場合に向いているようです。
どちらも、バイナリは、OSXはなく、LinuxとWindowsの32/64bitがあるようです。

Excelsior JET
ベータ版は、最新のベータが存在するときだけ、配布しています。
体験版の有効期限は3か月です。
購入した場合、Windows版で1200.00ドル~ Linux版で、1900.00ドル~です。
日本の正規販売店もあります。

2010年2月時点の最新版は7.0で、ベータ版はありませんでした。
対応するjdk 1.6.0 update 16の場合は、プロファイルが存在するため作成作業が省略できます。

jc clojure.jarを実行すると clojureという実行ファイルができます。
この場合、java -jar clojure.jar に対応します。

IBM J9 JVM
Linuxの場合は、こちらのLinux-Downloadから取得しました。Windows版へは、リンク切れになってます。
Windowsで利用したい場合には、WebSphere Application Server Community Editionにも、少し古いバージョンが含まれていますので、こちらが利用できるようです。

AOTを有効にするには、-Xshareclassesをつけて実行します。
詳細は、こちらの記事や、ユーザーガイド中のSDK およびランタイム・ガイド「JVM 間でのクラス・データの共用」を確認してください。

CentOS5.4にRPMインストールしたところ、libstdc++.5.soが足りないと言われ、
確認したところ、libstdc++.6.so (4.1.2-46)のみあったため、
yum install compat-libstdc++-33.x86_64 compat-libstdc++-33.i386
で、互換ライブラリ(3.2.3-61)をインストールしました。

実行結果は、37%程度のスピードアップが確認できましたが、もともと起動速度がSun Hotspot JVMより遅いため、そちらを越えられませんでした。
ちなみに、安定後のループなどの処理速度はSun JVMより高速なようです。

実行結果
ちなみに、vmware上の CentOS5.4 x86_64 AthlonXP64 2GHz 1coreで、下記のような起動速度になりました。

Excelsior JETでAOT
$ jc clojre.jar
$ time ./clojure -i comment.clj
real 0m0.439s
user 0m0.080s
sys 0m0.142s

通常の起動
$ time java -cp clojure.jar clojure.main -i comment.clj
real 0m1.887s
user 0m1.289s
sys 0m0.170s

通常の起動(JAR)
$ time java -jar clojure.jar -i comment.clj
real 0m1.830s
user 0m1.294s
sys 0m0.157s

インタプリタのみで起動(JITなしで、実行は何倍も遅い)
$ time java -Xint -cp clojure.jar clojure.main -i comment.clj
real 0m1.628s
user 0m1.125s
sys 0m0.171s

J9 JVM AOT
$ time /opt/ibm/java-x86_64-60/jre/bin/java -cp clojure.jar clojure.main -i comment.clj
real 0m3.321s
user 0m1.651s
sys 0m0.242s
$ time /opt/ibm/java-x86_64-60/jre/bin/java -Xint -cp clojure.jar clojure.main -i comment.clj
real 0m2.741s
user 0m1.285s
sys 0m0.173s

$ time /opt/ibm/java-x86_64-60/jre/bin/java -Xshareclasses -cp clojure.jar clojure.main -i comment.clj
real 0m2.424s
user 0m0.991s
sys 0m0.165s

$ time /opt/ibm/java-x86_64-60/jre/bin/java -Xint -Xshareclasses -cp clojure.jar clojure.main -i comment.clj
real 0m2.149s
user 0m0.835s
sys 0m0.109s

ソフトウエアのバージョン
$ cat /etc/redhat-release
CentOS release 5.4 (Final)

$ java -version
java version "1.6.0_16"
Java(TM) SE Runtime Environment (build 1.6.0_16-b01)
Java HotSpot(TM) 64-Bit Server VM (build 14.2-b01, mixed mode)

$ java -jar clojure.jar -e '(println *clojure-version*)'
{:major 1, :minor 1, :incremental 0, :qualifier }

$ jc|head -n 2
Excelsior JET v7.0 Evaluation Version (c) Excelsior 1997,2009
Active Java SE Version 1.6.0_16 (profile 16)

$/opt/ibm/java-x86_64-60/bin/java -version
java version "1.6.0"
Java(TM) SE Runtime Environment (build pxa6460sr7-20091215_02(SR7))
IBM J9 VM (build 2.4, JRE 1.6.0 IBM J9 2.4 Linux amd64-64 jvmxa6460sr7-20091214_49398 (JIT enabled, AOT enabled)
でした。

2010年2月14日日曜日

Clojure-CLR 1.1.0をVisual C# 2008 Express Edition SP1でビルドするのに用意したものをメモ

GitHubにClojure 1.1.0のCLR実装(ClojureCLR 1.1.0)が用意されているので、インストール手順を見ながらVisual C# 2008 Express Edition SP1で、ビルドしてみた。

準備
まずは、開発環境から、アセンブリとソースのディレクトリ構成まで整える。
開発環境
DL Visual C# 2008 Express Edition with SP1 もしくは、Visual Studio 2008 SP1
SP1について
http://www.microsoft.com/japan/msdn/vstudio/downloads/sp/vs2008/sp1/
必要なアセンブリ(インストールするもの)
DL Microsoft .NET Framework 3.5 SP1 (Full packege版)
DL NUnit 2.5.2
必要なアセンブリ(配置するもの)
DL Rhino Mocks 3.5 - For .Net 3.5 (with Castle assemblies)
ビルドに必要なソースファイル
DL Clojure-CLR 1.1.0
DL Microsoft Dynamic Language Runtime Change Set 38141あたり

フォルダ構成
dev\
- richhickey-clojure-clr-ee572b9\ (名前を変えてもOK)
- DLR_Main\
- RhinoMocks\

・devフォルダにDynamic Language Runtimeと、Clojure-CLRをフォルダごと配置
・devフォルダにRhinoMocksフォルダを作成して、ファイルをコピー

プロジェクトのビルド
・richhickey-clojure-clr-ee572b9\ClojureフォルダのClojureCLR.slnというソリューションファイルをVisual Studioもしくは、Visual C#で開く。
・Runtimeが構成できないというポップアップウインドウを無視する。
・そのまま、ビルドからソリューションのビルドを実行する。
・ビルドが終わると、richhickey-clojure-clr-ee572b9\Clojure\Clojure.Main\bin\Debugフォルダ内に、コンパイラ(Clojure.Compile.exe)とREPL(Clojure.Main.exe)ほか関連ファイルが用意される。

ClojureCLRを実行する
Clojure.Main.exeを実行すれば、java -cp clojure.jar clojure.mainと同じようにREPL(対話型評価環境)が起動する。
・CLR環境では、CLASSPATHのかわりに環境変数clojure.load.pathが用意されている。
設定したパス内の*.clj.dllと*.cljをさがす。
参考:Running ClojureCLR

そのほか
・Simple.Console.exeの使い方→Running ClojureCLR
・CLR,C#の呼び出し→CLR Interop, Completing CLR interop
・CLRに合わせたclojure.coreの変更→Translating core.clj
・未実装の機能やclojure.contribについて→ToDo
やはりJava呼び出ししているところの書き換えが必要なようです。
Wikiは、進行状況に合わせて変更されている。
ビルドテストは、
(require '(clojure [test-clojure :as main]))
(main/run)
Testing clojure.test-clojure.data-structuresで、2エラーありました。
・Clojure.Source.dllやClojure.Tests.dllはなんだ?

2008年9月21日日曜日

非同期javascriptダウンロード

Google Analytics
http://adwords.google.com/support/bin/answer.py?hl=jp&answer=77083
urchin.js を使用する場合
ga.js を使用する場合

AJAX Libraries API
http://code.google.com/apis/ajaxlibs/
document.write('<script src="http://www.google.com/jsapi"></script>');
<script>
// Load jQuery
google.load("jquery", "1");

// on page load complete
google.setOnLoadCallback(function() {
// code
});
</script>

2008年9月15日月曜日

OpenVPN 2.1_rc10@CentOS4でrpmbuildに失敗

rc10でやったのだが、UDP接続時のバグ修正のrc11が出てるので、表記のみ置き換えて書いてみた
ちなみにOpenVPN 2.0.9は、DAGからyum installできます。

・CentOS4で、OpenVPN 2.1_rc10のrpmbuildに失敗する

yum install pam-devel pam
yum install --enablerepo=rpmforge lzo-devel lzo

wget 'http://openvpn.net/release/openvpn-2.1_rc11.tar.gz'
rpmbuild -tb openvpn-2.1_rc11.tar.gz

2.0.9と違い、pkcs11-helper-devel (スマートカード対応ライブラリ)が必要といわれる。

wget 'http://www.opensc-project.org/files/pkcs11-helper/pkcs11-helper-1.06.tar.bz2'
rpmbuild -tb pkcs11-helper-1.06.tar.bz2 だと、pkcs11-helper-1.06-2%{dist}.i386.rpmみたいなのが出来上がるので、
rpmbuild -tb pkcs11-helper-1.06.tar.bz2 --define="dist .rhel4"
とかを実行する

rpm -ivh --test /usr/src/redhat/RPMS/i386/pkcs11-helper-1.06-2.rhel4.i386.rpm
rpm -ivh --test /usr/src/redhat/RPMS/i386/pkcs11-helper-devel-1.06-2.rhel4.i386.rpm


rpm -ivh /usr/src/redhat/RPMS/i386/pkcs11-helper-1.06-2.rhel4.i386.rpm
rpm -ivh /usr/src/redhat/RPMS/i386/pkcs11-helper-devel-1.06-2.rhel4.i386.rpm
ひと段落。

rpmbuild -tb openvpn-2.1_rc11.tar.gz
また失敗。
openvpn.spec
226: %doc contrib/ easy-rsa/ management/ sample-*/ plugin/README.*
(2.0.9ではあった)managementフォルダがないのに、設定上あるのでrpmを作る途中で止まる。

tar xvzf openvpn-2.1_rc11.tar.gz openvpn.spec

vi openvpn.spec
226G (で指定行へ移動)
management/ を消す。

cp openvpn-2.1_rc11.tar.gz /usr/src/redhat/SOURCES/
rpmbuild -bb openvpn.spec

成功。
rpm -ivh --test /usr/src/redhat/RPMS/i386/openvpn-2.1_rc10-1.i386.rpm

rpm -ivh /usr/src/redhat/RPMS/i386/openvpn-2.1_rc10-1.i386.rpm

OpenVPNのサーバ設定はほかを参照してくださいな。

ほかにopenvpn.specのおかしいところ。

55: %{!?with_pkcs11:BuildRequires: pkcs11-helper-devel}
56: %{!?with_pkcs11:Requires: pkcs11-helper}
-define "with_pkcs11 1"なら pkcs11-helper-develがいらない!?

102: %configure --disable-dependency-tracking %{?with_password_save:--enable-password-save} %{?without_lzo:--disable-lzo} %{?with_kerberos:--with-ssl-headers=/usr/kerberos/include}

pthread対応もほしいところ。「 %{?with_pthread:--enable-pthread}」
SSL/TLS鍵認証の遅延が改善されるらしい。

pkcs11は、「 %{?without_pkcs11:--disable-pkcs11}」
55: %{!?without_pkcs11:BuildRequires: pkcs11-helper-devel}
56: %{!?without_pkcs11:Requires: pkcs11-helper}
にしたほうがいいかも。

226: %doc contrib/ easy-rsa/ management/ sample-*/ plugin/README.*
(2.0.9ではあった)managementフォルダがないに、設定上あるのでrpmを作る途中で止まる。

Google Chrome と Java Applet と 管理者権限 @Windows Vista

Windows Vista上で、JDKやJRE 6u7をインストールした環境でインストールの確認を行うと失敗します。

Google Chromeで、Java Appletを利用するには、Java SE 6a Update 10以上のJREかJDKが必要です。
9/15現在で対応するのは、6u10のRC版のみになります。そのうち通常のダウンロードでも提供されるでしょう。

JREとGoogle Chromeのインストール後再びインストールの確認をしてみると、失敗します。
(URLバーにabout:pluginsでも確認できます)

Vista上ではGoogle Chromeを管理者権限で起動しないとJavaのNPAPIプラグインが見つからないようです。