2017年10月10日火曜日

メモ: OpenJDK 関連 - 2017/10/10現在

OpenJDK

http://openjdk.java.net/


OpenJ9

https://www.eclipse.org/openj9/index.html

参考: NOT OpenJDK

Java Development Kit builds, from Oracle
http://jdk.java.net/

ライフサイクルなど

OpenJDK ライフサイクルおよびサポートポリシー

by Redhat
https://access.redhat.com/ja/node/1457743

"このナレッジでは、Red Hat Enterprise Linux (RHEL) に同梱される OpenJDK のライフサイクルとサポートポリシーについて説明します。ここで説明される内容は、Sun、Oracle、または IBM から提供されている Java ランタイムまたは JDK の実装には適用されません。"

"メジャーバージョンの OpenJDK のサポート終了日は、RHEL の各バージョンで最初に導入されてから 6 年、もしくは基本 RHEL プラットフォームが終了した日のいずれか早い方が採用されます。"

サポート終了日
OpenJDK 6 (1.6) 2016/12
OpenJDK 7 (1.7) 2018/6
OpenJDK 8 (1.8) 2020/10

Red Hat JVM/JDK Summary
https://access.redhat.com/articles/2950741


Zulu OpenJDK Builds, 100% Open Source Java SE -- Free to download and use

by Azul Systems
https://www.azul.com/products/zulu-and-zulu-enterprise/

Redhatが自社サポート終了日にあわせてOpenJDK 6のメンテナンスをやめるときに、引き継ぎするかどうかの話題が出てた。
http://mail.openjdk.java.net/pipermail/jdk6-dev/2016-December/003611.html

Versions
Java 9, 8, 7, and 6 (See download page for details)

Supported Platforms
Windows, Linux, MacOS, Cloud on Azure and AWS (See download page for details)

Zulu Enterprise
"Enterprise-grade support with 10 year support lifetime, and our Java experts can help you resolve issues quickly"

OpenJDKがGPLなので、Zuluのメンテ期間中は基本的に公開されるのではないか。
OpenJDK: GPLv2 + Classpath Exception
http://openjdk.java.net/legal/gplv2+ce.html
GPLリンク例外 by wikipedia


OpenJDKバイナリ配布

AdoptOpenJDK

https://adoptopenjdk.net/index.html

Build jdk8u144-b01
OpenJDK8 with HotSpot

Build jdk-9+181
OpenJDK9 with HotSpot
OpenJDK9 with Eclipse OpenJ9


Download Zulu:® tested, certified builds of OpenJDK

by Azul Systems
https://www.azul.com/downloads/zulu/

Versions
Java 9, 8, 7, and 6 (See download page for details)

Supported Platforms
Windows, Linux, MacOS, Cloud on Azure and AWS (See download page for details)


DockerHub

Zulu OpenJDK by Azul Systems

https://hub.docker.com/r/azul/zulu-openjdk/

9ea
8u144, 8, latest (8u144/Dockerfile)
7u154, 7, latest (7u154/Dockerfile)
6u97, 6, latest (6u97/Dockerfile)


参考: NOT OpenJDK

Official IBM® SDK, Java™ Technology Edition Docker Image
https://hub.docker.com/r/library/ibmjava/

1.8.0_sr5 (8.0-5.0)
1.9.0_ea2 (9.0 early access)

メモ: java 9とleiningenの関係 - 2017/10/10現在

leiningenと同じように-Xbootclasspath/aにclojure 1.8など(1.4以降)のjarを指定して、java 9からclojure.mainを呼んでも起動しない。

[#CLJ-2077] Clojure can't be loaded from the boot classpath under java 9 - Clojure JIRA
https://dev.clojure.org/jira/browse/CLJ-2077

# jarをダウンロード
$ wget 'https://search.maven.org/remotecontent?filepath=org/clojure/clojure/1.8.0/clojure-1.8.0.jar'
# clojure.mainを呼んでみる
$ java -client -Xbootclasspath/a:./clojure-1.8.0.jar \
 clojure.main -e "(println \"hello\")"
# java.sql.Timestampが見つからないと怒られる
Exception in thread "main" java.lang.ExceptionInInitializerError
 ...
Caused by: java.lang.ClassNotFoundException: java.sql.Timestamp
 ...

clojure 1.9 beta1 で対処することになったが、clojure 1.8 までは変更しないことに

# jarをダウンロード
$ wget 'https://search.maven.org/remotecontent?filepath=org/clojure/clojure/1.9.0-beta2/clojure-1.9.0-beta2.jar'
$ wget 'https://search.maven.org/remotecontent?filepath=org/clojure/spec.alpha/0.1.134/spec.alpha-0.1.134.jar'
# clojure.mainを呼んでみる
$ java -client -Xbootclasspath/a:./clojure-1.9.0-beta2.jar:./spec.alpha-0.1.134.jar \
 clojure.main -e "(print \"hello\")"

(clojure1.9からclojure.jarとspec.alpha.jarが必要)

その他の回避策

Java 9 incompatibility · Issue #2149 · technomancy/leiningen
https://github.com/technomancy/leiningen/issues/2149

leinのシェルスクリプトファイルから、BOOTCLASSPATH変数を設定する箇所をコメントアウト

そろそろ設定をスキップできるようになるかも
Release 2.8.0-RC1 · technomancy/leiningen
https://github.com/technomancy/leiningen/releases/tag/2.8.0-RC1
"Support skipping bootclasspath for Java 9 compatibility. (Phil Hagelberg)"

どうしてもbootcalasspath/aを指定したいなら、java 8までか、clojure 1.9 beta1以降 (現在 beta2)を使おう。

2014年3月16日日曜日

Clojure 1.6.0 (beta-1)のJAVA API

Clojure 1.6.0 Beta1のJAVA APIのjavadocを作成ました。 Clojure1.5.1から変わっているらしい。

2013年7月7日日曜日

ClojureCLR-1.5.0 スナップショット

ClojureCLR 1.5.0のスナップショットをビルドしました。

ClojureCLRをビルドするのにパッケージを用意するのには、libフォルダにDLRを追加するのではなく、nuget経由でパッケージを使うようですが
現時点では、.net4.0(Release版)のみビルド出来ました。


skydriveにファイルを上げましたのでリンクを張っておきます。

更新:Microsoft.Dynamic.dll, Microsoft.Scripting.dll, Microsoft.Scripting.Metadata.dllを追加しました。

2013年7月5日金曜日

Clojure 1.5.1 Java API



1.5.1は1.3.0から変わりが無いように見える。
1.6.0で変更があるようで、clojure-dev MLでは議論されており、
githubのmasterリポジトリで確認できる。

pidigits Clojure #x program | Computer Language Benchmarks Game


Computer Language Benchmarks GameにGMPライブラリを使ったClojure pididitsを投稿してみた。

shootoutの投稿に関しては1ファイルで完結するなど規約が(どこかに)ある。
clojureでJNIを使う場合は、ファイル分けして対応するか3rdパーティライブラリを使うのだが、その制限でJNIを使うのは結構めんどくさい。


そこで、JNIのclassファイルをASMに書き換えて、compile後も動くようにリフレクションで呼び出すようにして対処した。

ASMの部分はこちらを参考にやってみた。
https://gist.github.com/athos/1033052

http://asm.ow2.org/eclipse/

一番不安なところは、元にしたjava版では実行時にエラーが起きているところ。
提出先でうまく動けばいいのだけど・・・。
(ローカルでは動いている)

http://benchmarksgame.alioth.debian.org/u64/program.php?test=pidigits&lang=java&id=2
http://benchmarksgame.alioth.debian.org/u32/program.php?test=pidigits&lang=java&id=2

また、clojure.asmが将来Clojureの公開APIから消える可能性があり、その場合は動作しなくなる予定。

2012年6月2日土曜日

プログラミング系で押さえておきたい出版社が電子版をかなり扱うようになってきた

出版用にレイアウトされたプログラム系の本が、2割引ぐらいでうっているらしい。


O'Reilly Japan Ebook Store

出版したオライリー本がの一部を扱っている

オーム社eStore(β)
オーム社の出版物のなかでもアジャイル系や各言語の有名な入門書がありおすすめ。

達人出版会
独自の本以外にも、インプレスジャパンやアスキー・メディアワークスの書籍も扱っている。

2011年12月9日金曜日

ClojureCLRを知ろう

この記事は、Clojure Advent Calendar 2011の記事(9日目)です。

ClojureCLRとはなにか?

ClojureCLRは、David Miller(@dmiller2718)さんがMicrosoft .NET Framework向けにポートしたClojure環境です。

あまり広報活動をしておらず、その動向があまり知られていないClojure環境でもあります。
2007年のClojure登場から遅れること1年、2008年秋から開発をはじめ、現在一段落ついたこともあり、今年10月のClojureの祭典Clojure/Conj 直前に公式ブログを開設してアンケートをおこなった結果をもとに、知名度向上やを開発コミュニティーの結成を目指しています。

一緒に個人のブログ(Rational Approximation)も始めていて、初回の記事はClojureCLRの創世記となっています。

この記事では、概観のみ説明でお茶を濁したいと思います。(時間がなかった。。。)

入門記事については、C#/.NET開発者のRob Rowe(@rippinrob)さんによるClojureCLRの連載がタイミングよく My Clojure Adventureで始まっていますのでこちらをよろしくお願いします。

リソース


現在の状況

githubのコミットヒストリーやタグを眺めると、Clojureの開発リポジトリを追う形で修正を行なっており、一ヶ月以内には反映するようなペースでJVM版の差分を取り込む形で開発が進んでいます。

現在のJVM本家と同じくリリース版は1.3.0、開発版は1.4.0のalpha2版が最新となっております。

ソースからは.net Framework 3.5と4.0向けのDebug/Releseビルドが可能です。
バイナリは現在リリース版の1.3.0までで、Debugビルドのみ用意されてますが、自前でビルドして試してみたところReleaseビルドとパフォーマンスの差はあまり無いようです。

Monoとの互換性

開発者が少ないこともあり、Monoの互換性まで手が回らない状況で実装を行なっているため、REPLのコンソール操作とコンパイラがまともに動作しない状況ですが、cljファイルやコンパイルして出来たexeとdllの実行などは行うことができます。

また、利用者アンケートの結果では開発者にも(マインド)ユーザーにも優先度が低いと判断されていますので、Monoで使いたいユーザーはパッチを作るのを前提としたほうが(誰かが)幸せになれます。
※アンケートの回答した中では実質ユーザは2人でした。。。

ちなみに、Boo、IronPython、F#、Phalanger(PHPコンパイラ)などは、Monoとの互換性も考慮して開発されています。

REPLの起動速度

REPLの起動は同じCPUでJVMを使った場合の2倍程度かかります。
但し、.NET Framework環境ではAOT(ngen)でネイティブバイナリ化が可能ですので、その場合にはJVM環境の1/2程度の時間で起動します。Mono環境でも同じ程度の時間で実行できました。

Windows 64bitではngenコマンドが、

%SystemRoot%\Microsoft.NET\Framework\<バージョン (v3.5, v4.0.30319)>\ngen.exe
%SystemRoot%\Microsoft.NET\Framework64\<バージョン (v3.5, v4.0.30319)>\ngen.exe

と用意されており、「Framework64」のngen.exeを実行する必要性があるので注意しましょう。 

REPLの起動については、「Clojure.dll」と「clojure.core.clj.dll」のみネイティブバイナリにしても起動が高速になります。
Mono環境では、「mono-sgen --aot」など、GCに世代別GCを使いAOTを行った場合に高速に起動出来ました。

バックエンドにLLVMを使うための「--llvm」オプションを使った場合は、REPLの起動が遅くなっていましたので、いまのところ相性は良くないようです。


ちなみに、AOT実行で起動やスクリプトの読み込みまで早くなりますが、JITより記述したプログラム部分の実行が早くなる訳ではありません。

まとめ

JVMに比べて、JITの実行速度最適化が進んだ実装がない共通言語基盤(CLI)ではありますが、 無償のAOT環境が用意されている点などREPL向けの環境でもありますので、 C#やVSの環境が苦手としている分野(知らないけど)でClojureCLRにも陽の目を浴びるチャンスがあるかもしれません。

leinningenなどのビルドツールなどが用意されていないなど、まだ実用的な環境を用意するには不備も多いですが、 頭の片隅にでもClojureCLRというものがあるということ、覚えていただければ幸いです。

以上、駄文にお付き合い下さいありがとうございました。

2011年9月25日日曜日

メモ:(MEAPを確認して)購入予定の書籍

"Monadic Design Patterns for the Web", Artima Press
by Greg Meredith (Lucius Gregory Meredith)
http://www.biosimilarity.com/main.html http://www.biosimilarity.com/publications.html

"Functional Programming in Scala", Manning Publications
by Paul Chiusano, Runar Bjarnason and Tony Morris
http://www.scala-lang.org/node/10448

?Big Data?
?Principels and best practice of scalable realtime data systems?
Manning Publications
by Nathan Marz
http://www.slideshare.net/nathanmarz/the-secrets-of-building-realtime-big-data-systems
https://thestrangeloop.com/sessions/cascalog

2010年11月13日土曜日

Quercas on Google App Engine

Quercus on Google App Engine利用時に、Slim3のServletで使われているように「load-on-startup」を「1」にしてやると、Spin-up時のcpu_msが3000前後でほぼ変わらないのに対し、Servletのレスポンスタイム(ms)が14000前後から3000前後と大幅に縮小されるのが確認できた。(まあ偏っただけかもしれないが・・)


「com.caucho.quercus.servlet.GoogleQuercusServlet」だけでは、効果が確認できなかった。そこで、GAEでは使わない「com.caucho.quercus.servlet.QuercusServlet」の設定を追加して、「load-on-startup」を「1」にしてやると、レスポンスタイムが短縮する変化が起きた。

WEB-INF/web.xml:

  <servlet>
    <servlet-name>quercus</servlet-name>
    <servlet-class>com.caucho.quercus.servlet.GoogleQuercusServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>

  <servlet>
      <servlet-name>QuercusHot</servlet-name>
    <servlet-class>com.caucho.quercus.servlet.QuercusServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>


spin-up時間

残りの、quercusを動かすための設定は、
WEB-INF/appengine-web.xml:
    <static-files>
      <exclude path="/**.php" />
    </static-files>
    <resource-files>
      <include path="/**.php" />
    </resource-files>

WEB-INF/lib:
に、resin.jarを追加。

resin.jarが、大きいいので分割するのに、appengineのdeployには「--enable_jar_splitting」が必要でした。 # appengine-java-sdk-1.3.8/bin/appcfg.sh --enable_jar_splitting update WEB-INF/..

設定については、下記のページを参照してください。
・http://blog.caucho.com/?p=187
・http://www.atmarkit.co.jp/fcoding/articles/gaephp/02/gaephp02b.html (日本語環境の設定あり)

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>

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を作る途中で止まる。