2003-01-10
@ FRIDAY
中島美嘉が表紙だったので思わず買ってしまった。FRIDAYなんて初めて買ったけど、なんとも低俗な雑誌ですね(w
@ [linux] treeコマンド
なんでVineにはないんだろう。というわけで、RedhatのミラーからいつものようにSRPMを落としてインストール。
2005-01-10
@ [java][ruby] JRubyを使ってみる(1)
とりあえずCVSからHEADをcoしてビルド。
$ ant jar ... BUILD SUCCESSFUL Total time: 9 seconds
$ java -jar lib/jruby.jar -e \
'print "Hello world with ruby #{RUBY_VERSION} #{RELEASE_DATE} #{RUBY_PLATFORM}\n"'
Hello world with ruby 1.8.2 0 java
RELEASE_DATEは設定されてないのかな。
@ [java][ruby] JRubyを使ってみる(2)
ruby-1.8.2に同梱されているライブラリが使えるかテストしてみました。
- use_csv.rb
-
if ARGV.length == 0 puts "Usage: #{File.basename($0)} CSV" exit(0) end require 'csv' CSV.open(ARGV[0], "r") do |row| p row end - test.csv
foo,bar,hoge 1,2,3
普通のrubyで実行。
$ ruby -v ruby 1.8.2 (2004-12-23) [i386-linux] $ ruby use_csv.rb test.csv ["foo", "bar", "hoge"] ["1", "2", "3"]
JRubyの場合。
$ java -jar lib/jruby.jar use_csv.rb test.csv
use_csv.rb:5:in `require': No such file to load -- csv (LoadError)
from use_csv.rb:5
「csvなんかないよ」と言われるので、LOAD_PATHを通してみます。
$ java -jar lib/jruby.jar -I /usr/lib/ruby/1.8 use_csv.rb test.csv ["foo", "bar", "hoge"] ["1", "2", "3"]
おお。普通に使えますね。
ちなみに、-Iで明示的にLOAD_PATHを通す以外に、もう1つ方法がありました。
$ ant -projecthelp ... jar.standalone Create a standalone jruby.jar file using libraries from RUBY_HOME/lib/ruby/1.8 ...
このjar.standaloneというタスクは、$RUBY_HOME/lib/ruby/1.8の下にあるファイルを解析してjruby.jarに突っ込んでおく、というものみたいです。試しにやってみます。私の環境(Debian)では、ライブラリは/usr/lib/rubyにインストールされてので、先ほどのタスクの説明にしたがってRUBY_HOMEには/usrだけ指定します。
$ RUBY_HOME=/usr ant jar.standalone ... BUILD SUCCESSFUL Total time: 19 seconds
出来上がったjarを見てみると、確かにライブラリのファイルみたいなものが入っています。
$ jar tvf lib/jruby.jar ... 8500 Mon Jan 10 15:45:12 JST 2005 ostruct.rb.ast.ser 7834 Mon Jan 10 15:45:16 JST 2005 parsearg.rb.ast.ser 2364 Mon Jan 10 15:45:10 JST 2005 parsedate.rb.ast.ser ...
というわけで、ライブラリが同梱されているjarでもう1回やってみましょう。
$ java -jar lib/jruby.jar use_csv.rb test.csv ["foo", "bar", "hoge"] ["1", "2", "3"]
おお! -Iがなくても動きました。
@ [debian][java] SargeでJDK-1.3が動かない
JDK-1.3を入れたのですが、起動しようとするとエラーが。
$ JAVA_HOME=/usr/lib/j2sdk1.3-sun ant /usr/lib/j2sdk1.3-sun/bin/i386/native_threads/java: error while loading shared libraries: libstdc++-libc6.1-1.so.2: cannot open shared object file: No such file or directory
とりあえずあるバージョンの共有ライブラリがないという話だけだと思うので、適当にsymlink張ってみると動きました。
# ln -s /usr/lib/libstdc++-libc6.2-2.so.3 \ /usr/lib/libstdc++-libc6.1-1.so.2 $ JAVA_HOME=/usr/lib/j2sdk1.3-sun ant Buildfile: build.xml does not exist! Build failed
@ [java][ncommons] java.net.URL#getPath()
このメソッドって1.3から導入されたものなんですね。nCommonsをJDK-1.2でビルドしようとしたらこれ使ってるところでコンパイルエラーが。一応標準ライブラリのクラス使うときはJavadocの「導入されたバージョン」を見ているのですが、JDK-1.3のAPIドキュメントだとgetPath()には何にも書かれてなかったので普通に使ってました。しかも今調べたらJDK-1.4のAPIドキュメントにはしっかり「導入されたバージョン: 1.3」と書かれてありました。何だよ〜。
@ [java][ncommons] Lumberjackを使う
nCommons自体はJDK-1.2以上で動作するのですが(はず)、org.homeunix.kazz.ncommons.i18n.CommonsI18nMessagesというクラスで使用しているCommons I18nがjava.util.loggingを使っており*1、結果としてJDK-1.4以上じゃないと(全体としては)動きません。しかし以前こんなことを書いたのを思い出したので、インストールしてみました。
アーカイブを解凍するとlibディレクトリ配下にlogging.jarがあるのでこれをクラスパスに含めるようにして実行すると...
java.io.FileNotFoundException: /usr/local/java/jdk-1.2/jre/lib/logging.properties
(そのようなファイルやディレクトリはありません)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.(FileInputStream.java:61)
at java.util.logging.LogManager.readConfiguration(LogManager.java:205)
at java.util.logging.LogManager.(LogManager.java:48)
...
と言われるので、lib/logging.propertiesを$JAVA_HOME/jre/lib/にコピー。これでうまくいきました。というわけでJDK-1.2にもフル対応(のはず)。
*1 別に使わなくてもいいと思うんだけど
@ [memo] デスマーチが起きる理由 - 3つの指標
途中まで読んで挫折。またあとで。(from BONGOLE BLOG;)
@ 車輪の再発明
私もたけぞうさんの意見に賛成。それと引用されている「プログラマーのためのプログラマー日記」の言葉も昔読んだことがあって、「まったくそうだよなぁ」と思った記憶があります。「使う」だけじゃ欧米には勝てませんって*1。作らないと!*2
nCommonsも車輪の再発明っぽい機能がいっぱいありますが、作り始めた時はCommonsにはそういうものがなかったんですよねぇ。
@ ふぅ
今日はなんかいっぱい日記書いたな。まだ書きたいことあるんですけど、明日にしよう。
2006-01-10
@ [perl] Perlで文字列を暗号化/復号化する
Crypt::CBCというモジュールでお手軽に暗号化/復号化出来ます。
日本語だとはてな伊藤さんのCrypt::CBC による Blowfish 暗号化に詳しい情報があります。
@ [soft] Browser Assistant
IEやFirefoxなどの各ブラウザでマウスジェスチャを可能にする常駐型アプリ。新しいブラウザ入れてもいちいちプラグイン追加しなくていいので便利です。