Re: Re: Pythonを使わずにバージョン比較する

2011年2月19日 at 0:33

無料のサーバーでもPEAR実装されているところが出てきたんでしょうか?
私の印象では、無料サーバーではPEARが実装されていないような印象があったので・・・。

サーバーの実装ではなくて、PEARのライブラリの再配布という形で対応しています(ライブラリはLGPL)。PHPのコードですし、これならサーバーを選ばない…はずです。(ちょうど別スレッドのマルチバイト対応で書いた、Punycodeのライブラリと同じパターンです)

・PHPベースでいいのが見つからなかった
・他のライブラリーはテキストベースでHTMLベースで比較してくれるものが少ない
・自分達でつくろうと思ったが時間がかかったし効率悪い
・もう既にPythonで良いライブラリあるし〜

という理由で、htmldiff.py を使い続けています。


「バージョン比較だけPythonだなんて美しくない」という思いが自分に起こったのでしょうねwink
もっともそれが始まりではなくて、使っているサーバーがPythonは実行できないけどconcrete5は動くというサーバーだったためですが。

上記の Text_DIFF は、あくまでも、テキストのDIFFなので、本家では検討しましたが却下となりました。今後、大幅なバージョンアップと、レンタルサーバーなどでのバージョンアップが期待できない限り、本家で取り入れる予定はありません。


Pythonは読めないなりに読んでみたわけですが、「HTMLをタグで区切ってリストとして表し、テキスト比較をする」という処理をやっているように見えます。要するに

<div>hoge</div> → {"<div>", "hoge", "</div>"}


というイメージですね。それをhtmldiff.pyではhtml2listという関数が担当していて、Pythonのdifflibというのがリスト比較をしています。
そういうわけで、やっていることは実質的にテキスト比較ではないかと思うんです。そういうわけで、こちらでリスト変換のプログラムだけ書いておけば、Text_Diff(などのテキスト比較ライブラリ)で比較すればよかろう、という発想に至ったわけです。

htlmdiff.py と同等、もしくはそれ以上の機能を実装でき、MITライセンスとバッティングしない、PHPライブラリがある場合は、よろしくお願いします〜。


本家のhtmldiff.pyでも、テキスト比較ということで時々動作が怪しいときがありますね。例えば

<a href="/download_file/1">ダウンロード</a>
<a href="/download_file/2">ダウンロード</a>


の両者の比較だと、タグ単位での比較になるので、比較結果が

<del><a href="/download_file/1"></del><ins><a href="/download_file/2"></ins>ダウンロード</a>


という感じになります(アップしたPHPでの実装でも同じです)。タグの構造がおかしなことになっていますし、これは改善の余地ありかな、と思っています。
リスト変換を工夫すればできるのかもしれませんが、やりかけてややこしくなりそうだったので保留にしています(とりあえず現状ではhtmldiff.pyでもそうなってるからいいや、という感じです)。

ちなみに concrete5 本家や、私たち日本語公式サイトでも、無料サーバーでの運用を考えて開発していません。

有料サーバーで、月々250円のサーバーで立派に concrete5 が動くので、無料サーバーを使う利点が無くなっているというのが実情です。

無料サーバーは、

・機能の制約がありすぎる
・機能の制限があるから concrete5 インストール出来ない可能性が高い
・サーバーでユーザーサポートがないから
・ユーザーフォーラムでもサポートする人が足らない
・人手が足らない = ヘルプ作ってくれる人
・人手が足らない = 検証してくれる人
・人手が足らない = フォーラムでサポートしてくれる人


もしもよろしければ、build1024さん、無料サーバー担当を、お願いしていいですか ( ̄ー ̄)ニヤリ


結局「concrete5は動くけどPythonは動かない」というのがレアケースなんですよね。
今concrete5を設置して動作している無料サーバーが、symphonic-net.comと、海外になりますが000webhost.comの2つでして、両者とも見事にこのケースに該当しています(前者は非公式ながら動いていましたが、いつの間にか使えなくなっていました)。
いくつか気になる無料サーバーもあることですし、他のサーバーでも動作確認やってみようかな、と思いますsmiling