• libxml-ruby 0.8.3が出てた

    ふと、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ぐらい。
    s00.PNG


    仮想マシンごとのHostMemの合計が1.1GBぐらいなので、ESXが300MBちょい持っていってるってことなのかな。
    s01.PNG


    仮想マシン2つでCPU周波数がそれぞれ1GHzちょいなら、linuxもう1つぐらいが実用的な(このPCでの)限界かな~。そうするとメモリが余っちゃうから、1GB割り当てでもいいか。
    s3.PNG


    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」の「インデックス作成」を押す

    これで準備完了。

    後は適当にトピックを書き込んで検索するだけ。
    結果は期待通り上々。
    なんというか抽象化・隠蔽の妙を見た、という感じ。多謝多謝。
  • lively試してみた

    ぶひぶひ


    日本語入力したら化けた。Fx3+Vista x64
    そもそもチャットをやらないだけに、面白みが見えないな~
    チャットを中心にすえたUIだからか、室内の移動がポインタでさくっと移動できるのはストレスがなくていい。
    MMORPGやセカンドライフではこういうわけにいかんものね。

    本家のサムネイル見てると、すでにやけに飾りこまれた部屋が多くて驚く。
    http://www.lively.com/popular