2010年6月28日月曜日

旧compojure.orgのサイトミラー

旧compojure.org? (compojure-0.2.0程度)の ミラーサイト を試験的に用意しました。
(ソース)

gh-pagesについても(6/28現在)エラーが出ているので、用意してみました。
(ソース)(7月上旬には復帰)

2010年6月22日火曜日

php pecl探索

APCやmemcachedなど従来から使われている物以外のPHPに新しい使い勝手を追加するpecl拡張を紹介したいと思います。 

ssh2
指定したファイルからの暗号鍵認証も、パスワード認証も可能。
SFTP接続からアップロード・ダウンロード、切断まで。
タイムアウトがある場合は、ポーリングについては不明ですので、バッチ処理を挟む場合、ファイル操作ごとに接続するなどしましょう。
http://www.php.net/ssh2

tokyo_tyrant
Webクラスター環境で、共有セッションの管理などに使えます。
http://www.php.net/manual/ja/tokyo-tyrant.installation.php 
ttserver -port 2000 -ext /path/to/expire.lua -extpc expire 30.0 '/tmp/sessions.tct#idx=ts:dec'
TokyoTyrantサーバーをluaで拡張することができます。
セッション管理は、pecl側で制御することも出来ます。

Tokyo Cabinet と Tokyo Tyrantが入っていれば、(rpmかlocalインストールなどで、自分は、specからインストールしました)。luaも入れておきましょう。
pecl install tokyo_tyrantで、いけますよ。(現在は、1.0前なので、 pecl install tokyo_tyrant-0.5.0 とか必要)
http://www.php.net/tokyo-tyrant
http://github.com/mkoppanen/php-tokyo_tyrant/

oauth
OAuthのC実装2010年6月2日にめでたく1.0.0がリリース
http://php.net/oauth


lzf
ストリーム圧縮向けの高速な圧縮伸張をサポート。
ただし、肝心のストリーム圧縮やフィルターでの利用は出来ない模様。
http://www.php.net/lzf

libevent
待望のモジュール、PHPでスレッドベースのイベントサーバが用意できます。いままでも、プロセスベースや、HTTP処理ベースの並列化は可能でしたが、のような軽量な処理 が可能になります。
http://www.php.net/libevent


mongo
MongoDB接続用モジュール

http://www.php.net/mongo

amqp
RabbitMQな どAMQP実装へのクライアント用の接続モジュールです。
http://www.php.net/amqp

stomp
こちらも、メッセージキュー(ActiveMQなど、stompプロトコルに対応した)クライアント用の接続モジュールです。

http://www.php.net/stomp

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>