ホーム > タグ > java
java
JRuby から Datomic を使う
- 2012年4月12日 9:55 PM
- 未分類
Clojure の作者 Rich Hickey が作ったデータベースサービス Datomic がおもしろそうなので、JRuby から使ってみました。
といっても、jar を JRuby で読んで debugger 起動してるだけですが。
Datomic って?
こちらの紹介記事が分かりやすいです。
大きな特徴は下記の 2 つ。
- クエリの処理とキャッシュをクライアント側 (Peer) で行うことにより、スケールしやすい
- データ (fact) を削除・更新しても過去のデータが残り、さらに任意の時点のデータベースにクエリを投げられる
かなり魅力的ですよね。
JRuby から使う
現在のところ Datomic のピアライブラリは JVM 用しかない (たぶんしばらくこのまま) ので、rubyist としては JRuby から使いたい。
ここでは Datomic Shell とほぼ同様の挙動を JRuby で実現します。
まず、JRuby の準備。rvm / rbenv 使ってるなら簡単。
rvm install jruby
rvm jruby
gem install ruby-debug
ピアライブラリのダウンロード、展開。
# datomic.com の "Get Datomic" から datomic-0.1.2753.zip をダウンロード
unzip datomic-0.1.2753
cd datomic-0.1.2753
このディレクトリに下記の内容で datomic.rb をつくる。
require "java"
# datomic ピアライブラリの jar をクラスパスに追加
require "./datomic-0.1.2753.jar"
# 依存ライブラリの jar をクラスパスに追加
Dir.glob("./lib/*.jar") do |jar|
require jar
end
require "rubygems"
require "ruby-debug"
Debugger.settings[:autoeval] = true
include_class "datomic.Entity"
include_class "datomic.Connection"
include_class "datomic.Database"
include_class "datomic.Peer"
include_class "datomic.TxReport"
include_class "datomic.Util"
include_class "java.io.FileReader"
# デフォルトでは inspect が <#…> みたいなそっけないものなので
# Java オブジェクトでは to_s (toString) を使う
Java::JavaLang::Object.class_eval do
def inspect; to_s; end
end
debugger
puts "" # debugger 直後に終了しないように
あとは –debug オプションつきで起動する。
ruby --debug datomic.rb
これで、Getting Started や Tutorial を試してみましょう。
実際に使うとなると、クエリや結果のクラスを拡張すると使いやすそうですね。
Processing 環境の比較
- 2011年9月30日 11:35 PM
- 未分類
IMSLP の楽譜を市販の楽譜っぽく製本するまで (ソフトウェア篇) | あるいは JRuby + iText による PDF の面付け (トンボ付き)
- 2010年9月1日 1:22 AM
- 未分類
通常 IMSLP などに保存されている楽譜は、実物の 1 ページが PDF の 1 ページに対応している。そのため、A3 ノビの紙に印刷して中綴じ製本するためには、適切にページを並べ替え、片面 2 ページづつ、両面で 4 ページを配置する – 面付けと呼ばれる – 必要がある。
簡易な面付けは Adobe Reader やプリンタドライバでも行える (N-up などと呼ばれる) が、これらの多くは紙面を均等に分割し、それぞれの中央に元のページに配置する。そのため、余白がノド (見開きの中央) にも来てしまい、三方裁ちをするような製本には向かない。
また、もとの PDF が菊倍版など楽譜に適した判型でなく、A4 などの判型になっている場合がある。この際は、一度菊倍版に配置しなおした上で、面付けを行う必要がある。
こうした処理が簡単にできる無償のソフトウェアが見つけられなかったので、書くことにした。
JRuby + iText を使う
PDF の作成・編集ライブラリには、Java で書かれた iText というライブラリが使いやすそうなので、これを使う。
ただ、私は Java での開発経験がないため、JRuby から利用することにした。JRuby は Ruby の Java による実装で、Java のクラスが扱えるのが大きな特徴。(今回はじめて使ったが、あまりにも簡単に Java のクラスが扱えて驚いた。今後も Java のライブラリが必要になったら使いたい。)
JRuby + iText のインストール
JRuby のインストール
今回は Mac OS X で開発 / 使用するので、Java のインストールは必要ない (標準でインストールされているため)。
JRuby は MacPorts を使ってインストールするので、必要なら MacPorts をインストールしておく。
MacPorts がインストールされていれば JRuby のインストールは下記のコマンドだけで完了する
sudo ports install jruby
インストールが終ったら、jirb コマンド (irb の jruby 版) などで、ちゃんと動くか試してみよう。
iText のインストール
iText 2.1.7 を利用する。最新版の 5 系より情報が多いのがその理由である。
SourceForge.net の iText のページから、下記の 3 つのファイルをダウンロードし /opt/local/share/java/jruby/lib 下にコピーしておく。
スクリプトの作成
今回は2つのスクリプトを作成した。
1in1.rb
入力ファイルのページを、指定したサイズのページ中央に配置して出力する。
jruby 1in1.rb [-with-tombo] 出力サイズ 入力ファイル名 [出力ファイル名]
2in1.rb
入力ファイルの2ページづつを、指定したサイズのページ中央に2つ横に並べて出力する。中綴じ製本用にページは並べ変えられ、出力の1ページ目が1枚目の表、2ページ目が1枚目の裏・・・となる。
jruby 2in1.rb [-with-tombo] [-first-page-is-left] 出力サイズ 入力ファイル名 [出力ファイル名]
引数
| -with-tombo | トンボ (トリムマーク) を出力する |
|---|---|
| -first-page-is-left | 1 ページ目が見開きの左側であることを指定する。省略時は 1 ページ目が見開きの右側になる。 |
| 出力サイズ | ’210×297′ のように ‘幅x高さ’ で指定する (単位は mm) か、下記のいずれかを指定する。 a3, a3+, a4, a5, a6, b3, b4, b5, b6, a3r, a3+r, a4r, a5r, a6r, b3r, b4r, b5r, b6r, kikubai, kikubai-alt ※ a3+ は A3 ノビ。r のついたものは長辺が横向き。kikubai は 227x304mm、kikubai-alt は 218x304mm。 |
| 入力ファイル名 | 入力ファイル名。 |
| 出力ファイル名 | 出力ファイル名。省略時は ‘出力サイズ_入力ファイル名’ |
使用例
菊倍版に変更。
jruby 1in1.rb kikubai src.pdf kikubai.pdf
菊倍版のページをA3ノビに配置(トンボつき)
jruby 2in1.rb -with-tombo a3+r kikubai.pdf a3+r.pdf
上例のサンプル
コード
主に自分で使うために作ったものなので、例外処理などほとんどなし。著作権は放棄しますので、ご自由に。
参考リンク
- JRuby + iText + Google Chart APIでPDF出力 – 税理士業界でSaaS開発を行うプログラマの記録 – s21g – 今回もっとも参考になったページ
- J# Examples – iText の .NET 版の日本語チュートリアル
- iText-2.1.7.tar.gz – iText 2.1.7 のドキュメント
ホーム > タグ > java
- 検索
- フィード
- メタ情報
