ふと、libxml-ruby本家を確認したら、いつのまにか0.8.3になってた。
RubyForge: LibXML: ファイルリスト
7月に入ってから怒涛のupdate
jruby+Java DOMに逃げてなんとかやりすごしていたのだけど、これは期待できるか?と再チャレンジ。
とりあえず自分ところのアプリの範囲では「[BUG] object allocation during garbage collection phase」で落ちることがなくなった。
I/Fをlibxml-rubyのままにしておいて正解だった。単にCRubyで実行しただけ。
やはりlibxml2の性能は魅力。
OS: CentOS 5.2
ruby: 1.8.5
libxml2: 2.6.26
libxml-ruby: 0.8.3
extend_proxyで javaのクラスにメソッドを生やす
以前、libxml-rubyで [BUG] object allocation during garbage collection phase で、元々libxml-rubyを使って書いてたコードをjavaのDOM/XPath APIに置き換えるために、ラッパを書いた。
のだけど、
「JRuby徹底入門」という本を読んだら、javaのクラス(のproxy)にメソッドを後付けするにはJavaUtilities.extend_proxyを使う、という例が載ってた。
なるほど便利。
なんでも実行時に決定できるってすごいことだな。
jruby:1.1.3
Sun Java: 1.6.0_05
OS:CentOS 5.2
$KCODE='u'
require 'java'
# org.w3c.dom.Documentにlibxml-ruby風I/F追加
JavaUtilities.extend_proxy('org.w3c.dom.Document') do
def root
self.documentElement
end
end
# org.w3c.dom.Nodeにlibxml-ruby風I/F追加
JavaUtilities.extend_proxy('org.w3c.dom.Node') do
@@xpath = nil
def to_s
self.nodeValue.to_s
end
def next
self.nextSibling
end
def text?
self.nodeType == org.w3c.dom.Node::TEXT_NODE
end
def [](name)
self.getAttribute(name)
end
def parent
self.parentNode
end
def child
self.firstChild
end
# XPathオブジェクトを返す
#
# TODO: XPathオブジェクト1つで使いまわしてみたが・・・
# evaluateの都度生成よりはいいような気がするがどうだろう
def get_xpath
if !@@xpath
factory = javax.xml.xpath.XPathFactory.newInstance()
@@xpath = factory.newXPath()
end
@@xpath
end
# 指定されたノードに対するxpath式のクエリ結果を返す
#
# expr::
# XPath式
def find(expr)
nodelist = self.get_xpath.evaluate(expr, self, javax.xml.xpath.XPathConstants::NODESET)
ret = []
for i in 0..(nodelist.length - 1)
ret.push(nodelist.item(i))
end
ret
end
end
# 指定されたファイルをopenしてXML文書を返す
#
# fn_in::
# ファイル名。nilの場合、stdinを適用
def build_doc(fn_in)
st = java.lang.System.in
if fn_in
st = java.io.FileInputStream.new(fn_in)
end
factory = javax.xml.parsers.DocumentBuilderFactory.newInstance()
builder = factory.newDocumentBuilder()
builder.parse(st)
end
doc = build_doc("test.xml")
doc.find("//entity").each { |e|
puts e["name"]
}VMware ESXiを そこいらのPCにインストールした
あちこちで話題になっているように、VMware ESXiが無償になった。
VMware ESXi: サーバ仮想化のためのハイパーバイザー - VMware
これは試さねば~、ということでISOイメージをダウンロード→CD-Rに焼いた。
SATA HDDがあまっていたので、とりあえず目の前にあるデスクトップPCを標的に。
ブツはeMachinesのJ2934
CDから起動し、セットアップが立ち上がるのをじっと待つ。
なんかメッセージ出た、と思ったらメモリが足らないらしい。VMwareサイトのpdfにMinimum 1GBって書いてある、よく見たら。
もう、試してみないと気がすまない精神状態で、近所のツクモまでダッシュしてPC3200な1GB×2を購入。
※BIOSではDDR400って出てたけど、J2934のページを改めて見るとPC2700って書いてあるな・・
合計2.5GBにしたらなんだかセットアップの立ち上がりも早くて、あっさりインストール完了
スペック:
CPU:Celeron D341(2.93GHz)
メモリ:2.5GB(DDR 400、256MB×2+1GB×2)
HDD:SATA 80GB 7200rpm
NIC:Intel PRO 10/100
再起動し、ESX Serverがさくっと起動。
コンソールからネットワーク周辺、パスワードをポチポチ設定
画面表示にしたがってESX ServerからVICをダウンロード →手近のノートPC(XP)にインストール
VICから、仮想マシンを作成。
仮想マシン1:
OS:Windows Server 2003 R2 Enterprise Edition
メモリ:512MB
仮想ディスク:SCSI(LSI Logic) 16GB
VICを実行しているノートPC上にインストールディスクイメージがあったので、これをVIC経由でConnectしつつセットアップ。うーん便利。
このページからSCSIドライバのFDイメージをDL。F6で読み込ませてセットアップ。
これもVIC側経由でConnect。便利便利。
問題なくインストール終了。コンソールから使うとさすがにマウスポインタが飛んだりするけど、リモートデスクトップで使う分には違和感はない。
元ハードのスペックが高くないからといって、仮想マシン一個だけでは、物理PCのまま使ってた方がマシだろう、ということでSP2をあてつつCentOSのインストールを始めちゃう。
仮想マシン2:
OS:CentOS 5.2
メモリ:512MB
仮想ディスク:SCSI(LSI Logic) 16GB
この状態でホストメモリの使用量は1.4GBぐらい。
仮想マシンごとのHostMemの合計が1.1GBぐらいなので、ESXが300MBちょい持っていってるってことなのかな。
仮想マシン2つでCPU周波数がそれぞれ1GHzちょいなら、linuxもう1つぐらいが実用的な(このPCでの)限界かな~。そうするとメモリが余っちゃうから、1GB割り当てでもいいか。
ESXi、かなりいいかも
デュアルコア、クアッドコアで試してみたいな
phpBB3の日本語での検索
phpBB3で掲示板を建てたのだけど、困ったことがある。
それは日本語でトピックを検索すると、hitするワードとhitしないワードがあること。
phpBB備え付けの検索の場合、自前でキーワード分割しているそうで、特に日本語の分割がもう1つ直感的でないのが困った。
phpBBは検索バックエンドを、phpBB自前とMySQLにお任せするモードの切り替えができる。
じゃあ、MySQLに組み込みで日本語もOKな全文検索エンジンTritonnを使ったら解消するんじゃなかろーか。
ということでやってみた。
環境:CentOS:5.2(元5.1、yumでupgrade)
php:5.1.6-20.el5_2.1
phpBB:3.0.2
MySQL:Tritonnプロジェクトが配布しているもので置き換える
手順メモ:
- 既に起動しているmysqldを停止
# /etc/init.d/mysql stop
- mysqlをアンインストール
ここの環境では、すでにmysql(5.0.45)がインストールされていたが、削除する。
php-mysqlが依存していて削除できなかったので--nodepsで強行# rpm -e --nodeps mysql mysql-server
- ハマったのがphpのモジュール。
ここの環境では「php-mbstring」がインストールされておらず後々ハマることに。
別の場所のCentOS5.1には入ってたんだけどな~。何の依存だったんだろう・・・。
とにかくyumでインストール# yum install php-mbstring
- tritonnプロジェクトからrpmを入手しインストール
http://sourceforge.jp/projects/tritonn/files/
MySQL-client-5.0.51a-tritonn.1.0.10.i386.rpm
MySQL-server-5.0.51a-tritonn.1.0.10.i386.rpm
MySQL-shared-5.0.51a-tritonn.1.0.10.i386.rpm
mecab-0.97-tritonn.1.0.10.i386.rpm
mecab-ipadic-2.7.0.20070801-tritonn.1.0.10.i386.rpm
senna-1.1.3-tritonn.1.0.10.i386.rpm# rpm -Uvh ダウンロードしたrpm
- 共有ライブラリを更新したので一応リフレッシュした
# ldconfig # /etc/init.d/httpd restart
- phpBBをセットアップする
phpBB本家からアーカイブを入手
適当な場所に展開
apache経由で参照できるようにconf設定
database作って、
ブラウザでセットアップ開いて、指示に従って終了 - Admin CPに入る
- [メイン]タブ → サーバ設定 → 検索設定
検索バックエンドを「Fulltext mysql」に変更
「latin系キャラクタセット以外のUTF-8文字の使用(mbstringによるサポート)」が「はい」になっていることを確認。ウチの環境の場合、「PCREによるサポート」は「いいえ」になってる。
で保存 - [メンテナンス]タブ → データベース → 検索インデックス
「Fulltext mysql」の「インデックス作成」を押す
- [メイン]タブ → サーバ設定 → 検索設定
これで準備完了。
後は適当にトピックを書き込んで検索するだけ。
結果は期待通り上々。
なんというか抽象化・隠蔽の妙を見た、という感じ。多謝多謝。
- 既に起動しているmysqldを停止
lively試してみた
ぶひぶひ
日本語入力したら化けた。Fx3+Vista x64
そもそもチャットをやらないだけに、面白みが見えないな~
チャットを中心にすえたUIだからか、室内の移動がポインタでさくっと移動できるのはストレスがなくていい。
MMORPGやセカンドライフではこういうわけにいかんものね。
本家のサムネイル見てると、すでにやけに飾りこまれた部屋が多くて驚く。
http://www.lively.com/popular