複数バージョンの LL を入れる話を集めてみた

理由はいろいろあると思いますが、ある言語の複数のバージョンを一つのシステム上で使い分けたい場合があります。そのためのツールと記事をただただ並べてみました。1

※ ところで小規模、中規模案件で人気のありそうな PHP こそこういうツールが必要な気がするのですが、そういう話は聞かないですね。mod_php は PHP 単体で環境が完結しないので難しいのかもしれません。

PHP については phpfarm を使うと複数のバージョンを同一マシンに簡単にインストールできます。

cf. phpfarmを使って複数バージョンのPHPをインストール

ただし 2010-10-31 現在ではインストールできるだけで動的な切り替えなど気の利いた機能はありません。

比較表

 本体の切り替え要件ライブラリの切り替え
RubyrvmbashBundler
PerlperlbrewPerllocal::lib
PythonpythonbrewPythonvirtualenv

意外なことに Perl, Python は複数バージョン入れるツール自身が元の言語で書かれています。Perl はシステム標準に入っているディストリビューションが多いからまだ分かるけど、Python でこの戦略を採用するのはちょっと大胆な気がします。

※ Python は virtualenv だけでも複数バージョンを切り替えて使うことができます。ただし、インストールや動的な切り替えまでは面倒みてくれません。そんなときに pythonbrew が便利なようです。

rvm

rvm の記事はもう書いてあります。

rvmを使ってREEへの移行を考える - あーありがち(2010-07-17)

Bundler

Bundler の記事ももう書いてあります。

Bundler 0.9.26 を触ってみた - あーありがち(2010-07-19)

perlbrew

perlbrew があれば perlbrew で切り替えて使う Perl のための lib はシステム標準のものとは分離しているので、local::lib はなくても大丈夫ということのようです。複数の lib 環境を使いたければたぶん local::lib はあった方が便利だと思います。その辺も rvm + Bundler 環境に似ているんじゃないでしょうか。

local::lib

root 権限が必要なく、アプリとライブラリをセットにして配布するといった用途にも使えるみたいです。

cpanminus

これは完全に脱線です。2010年に開発の始まった新しいパッケージ管理ツールで、基本的には従来からある cpan, cpanplus の代わりになります。よりコンパクトに、つまり快適に動いて嬉しいらしいです。cpan-outdated と組み合わせたり、cpan に上がっていないパッケージをインストールしたりできるとか。2

cpanminus は gihyo.jp のモダン Perl 連載で CPAN を取り上げた直後に開発が始まっていて、まだあまりまとまった日本語ドキュメントはないっぽいですね。

pythonbrew

perlbrew inspired.

virtualenv

ずっと勘違いしていました。virtualenv は rvm と同じレイヤーの仕事はしていないんですね。

  • rvm や perlbrew のようには処理系のインストールはしない
  • インストール済みの処理系のうち、何をどこで使います、という環境構築ができる

ツール、と考えるとよいようです。rvm で特定のディレクトリに .rvmrc を置いたときのようなイメージでしょうか。

Python はもともと複数バージョンをシステムにインストールすることが特に面倒じゃないのかも。だとしたら virtualenv のアプローチだけで確かに十分かもしれません。

ただし easy_install は virtualenv を考慮してくれないので pip を使うとよい、という感じのようです。

pip も試してみないといけないなぁ。

homebrew

これも完全に脱線。MacOSX の比較的コンパクトで最近評判のいいパッケージングシステム。Ruby製。ややこしい。

  1. 頑張って調べたんだけど、半年以上前に miyagawa がサラッと tweet しててちょっと凹んだ。まぁ間違ってないっぽいのでよかった。 

  2. それ以前はローカルで好きな場所にインストールするには Perl Makefile.PL が主流。 

簡単なWeb作り向けRakefile作った

ビックリするくらい素朴な作業向けです。要は

  • HTML の文法チェックを tidy
  • リンク切れチェックを linkchecker
  • アップ作業を lftp
  • バージョン管理を svnhggit でやっているとして commit してないファイルはどれ?
  • サイトマップは YAML で書いて XOXO で吐き出して Wiki に貼っちゃえば共有も楽じゃね?

というツールです。基本的には生HTMLの static なサイト向け。

本当は Windows でも自動化できるようにという意図があって tidy や linkchecker を採用してるんだけど、linkchecker の Windows バイナリは GUI になってて全自動にできないし、ftp は ncftp を採用するつもりだったけど ncftp だと exclude の指定ができないので諦めて lftp という構成になってます。しかもあとで気づいたけど Open3 は Windows で使えないし。

とりあえず自分は便利で楽になりました。満足してます。

疑問

hg stat -A の結果が変。

unknown なはずのファイルの表示が環境によって違う。

versionpackage表示
1.2.1FinkI
1.3.1epelI
1.1.2ports?
1.2.1MacPorts?

こうして見ると ports 系が正しいように見えるんだけど、バージョンもバラバラなので何が正しいのかよく分からない。

ignored って ignore 指定したファイルだけなんじゃないの? ignore 指定もしてないし add もしていないファイルは unknown なんじゃないのかなぁ。

define_method 初めて使った

バージョン管理されているかどうかの判別用のメソッドがほぼ完全に同じなので、define_method で生成した方がいいやと思ったんだけど、class や module の中でないと使えないみたいなので module SCM を定義して include SCM することで Global な空間にメソッドを持ってきた。

これでいいのか、これしか方法がないのかよく分からない。もっといい方法ありそうな気もするけど。

不満

sitemaps.xml も吐ければとりあえず思いつく範囲では結構使えるツールになるかと思ってライブラリを探したけど、gem で入れられる範囲ではあんまりいいのがないような。

Wedata のお勉強

以前から名前だけは知っていたけれどイマイチ実体のつかめないというか、イメージをつかめないでいた Wedata について調べてみた。

結論から言うと下のリンク先を読め。以上。

さすがにあんまりなので自分の言葉で簡単にまとめ直すと、

  • データベースとアイテムという単位があり、これは一般的な RDBMS で言うところのテーブルとレコード(名前がついている)のようなものに相当する
  • 読むのは自由、書くには OpenID での認証が必要
  • アイテムに key と value の組み合わせからなるデータを保存できる。ここは DBM 風。
  • ブラウザからも API からもこれらを CRUD できる

で、このアイテムの key と value の組み合わせに自分なりのルールを作って API から叩くと、Web 上にデータベースがあるように使えるというもの。それが Wedata、のはず。

ただデータベースと書くのは語弊があって、API からは内容で検索とかはできない。あくまでデータベースの一覧やアイテムの一覧が取得できるだけ。Web 上ではデータベースの description で検索したりアイテムの名前で検索とかできるけど、これも API ではできないんじゃないかなぁ。やってみてないけど。で、検索なんかは結局ローカルというかクライアント側で実装する必要がある。

Wedata はもともと AutoPagerize という Firefox extension で利用する情報を Web 上に保存する目的で Wiki の代わりに作られている。Wiki には基本的に Wiki 記法以外に構造を表す手段がなく、この構造も文書に特化している。自分も Wiki は好きで比較的なんでも Wiki にすればいいじゃんと思ってしまうが Wiki は Wiki で不便だよなぁとも思っていた。それがこの構造の部分。Wedata はそこをうまいこと DBM 風にして解決しようとする試みなのだな、きっと。

英辞郎を Linux デスクトップで

Windows では PDIC で、MacOSX では英辞郎ビューアでお世話になっている英辞郎。

伝統的には Un*x で辞書っつったら EPWING 形式なんじゃねーかなぁと思うんだけど、以前一度だけ FreeBSD 上で英辞郎を EPWING で利用できるように変換しようとして挫折した思い出があって、もしかしたらついに英辞郎を諦めなきゃダメかもなぁと考えていた。でも EPWING にこだわらなければ方法はあった。

の二つ。rdic は Ruby で書かれていて、おぉと思ったけど Ubuntu パッケージになっていなかったので今回は sdic の方を使うことにした。Emacs ユーザーじゃなきゃわざわざ辞書のために Emacs を立ち上げようとは思わないけどね。

インストールは他のアプリと同様 aptitude でできるんだけど、このときいきなり CD-ROM 上に英辞郎の辞書があることを前提に、sdic で利用する suffix array の構築に取りかかろうとする。辞書の取り込み用の UI はないのかな?と思ったけど、まぁ取り込もうとしているパスは分かるので、そのディレクトリを作ってご所望通りに辞書データを置いてから aptitude を叩いてインストールした。

機械が遅くて suffix array の構築にものすごく時間が掛かったけど、実際に辞書を引く動作自体は比較的軽い。これでかなり快適になった。やっぱインターネット越しにしか辞書がないなんて考えられない。もっと速く引けないと。

Yahoo! Widgets Engine の engine が SpiderMonkey だって忘れてた

リファレンスをつらつら眺めていたら debug window で /help って打ってみなって書いてあったのでやってみた。

Widget Engine Debugging Commands:
   /dump object              print all the properties of 'object'
   /trace function           print a message every time 'function' is called
   /untrace function         stop tracing 'function'
   /watch object.property    display a message when the given 'property' of 'object' changes
   /tracethrow [on|off]      turns on/off messages whenever an exception is thrown (on by default)
   (arbitrary JavaScript)    execute the given JavaScript
   /clear                    clear the debug output
   /help                     this list of commands

あ。

/dump system
system[languages]: ja,en,fr,de,es,it,nl,sv,no,da,fi,pt,zh_CN,zh_TW,ko
system[platform]: macintosh
...
...

あーっ!

そうか! そうだよ! 何度も目にしていたのにまたスルー力を発揮してしまっていた!

これ SpiderMonkey だ!

普段 Firebug とか MozRepl とか Rhino とかで SpiderMonkey そのものを目にする機会がないから忘れてた! まぁ dump なんて SpiderMonkey にはないけど、もしかするといろいろできるかもしんない。

いやー普段 OSX だから分かんなかったよ、って書こうと思ったらいつの間にか Fink にも SpiderMonkey きてたよorz

ブックマーク難民

Camino では Diigo ツールバーが動かないので del.icio.us(など)へのクロスポストができない。困ったなということで調べてみると Greasemonkey + userscript で同時ポストという技を使っている人がいるみたい。でも Camino は Greasemonkey も動かない。

Camino で Userscripts を利用する100-99の方法 (Camino Userscripts 100-99=1) - 2xup.org

によると Geekmonkey を使えばイケるらしいことは分かったが、そもそも標準でクロスポストの機能を持っている Diigo と del.icio.us に同時に投げたいなどという要求がないらしく、そんなスクリプトは見つからない。作れってか。今ちょっとそこには興味ないのですぐに動くものがほしいんだが。

Spurl.net というサービスは del.icio.us 限定だがサーバサイドでクロスポストの処理をやってくれるみたいだ。よーしじゃあアカウント作っちゃうぞー。import ! ……。経過がさっぱり分からない。しばらく放置したら import されてた。なんかゆってくれ。よーし検索! 化け化けじゃん。これじゃ Diigo の代わりにはならない。

うぬー。

※ del.icio.us へのクロスポストを諦めればいいじゃんと思ったあなた。正しいけれどもそれは今のところできない。理由は二つある。一つはバックアップのため。もう一つは後発のブックマークサービスの多くは機能が増えた分操作感が悪い。なんだかんだで del.icio.us は使いやすいのよ。検索はともかく、タグや時系列に眺め直すときには del.icio.us の方が楽なの。

[2006-10-26 追記]Diigolet やツールバーをアップデートしたら Firefox でもクロスポストできなくなったorz ふざけんなっ。

ふつふつと…

ぶっちゃけたいして面白くない映画だったが(ひどい)、昔のあぶない刑事の映画や TV シリーズが見たくなってきた。実家に帰れば VHS は手に入るんだけど、3倍で録ってたしなぁ…。ここは大人買いかーと思ったところ、TVシリーズの2作目は DVD 化してないのか? えー。そりゃ1作目の方がギラギラしててよかったけどさぁ。あ。今出てる DVD のシリーズはもっとあぶない刑事まで出るのね。なるほど。うーむ。

見ましたよ、まだまだあぶない刑事

ドラマも映画も全部見た人間が言うが、この映画を見るのはお約束を確認するための儀式である。誰がどう考えても無理があるのをすべて受け止める愛が必要。

なんだろうなぁ。どうせこの映画が破綻するのは目に見えてるんだから、もっとノリノリのまま行っちゃえばよかったのに変なシリアス路線を入れすぎてる。そんな感じ。

指定以下の CPU 使用率が持続したら shutdown

CPU-off (Vector)

98 - XP 対応。これがよさげ。

背景

わけあって Windows マシンを2台切り替えて使うことになった。その際、USB の切り替え機の方が安全だよ、という話は聞いていた。しかし USB のキーボードとマウスはサスペンドに落ちちゃうと復帰してから二度と使えなくなるという問題があった。(本体の対応にも設定にもよるんだろうけど。)

それでも連続運転しすぎて電源が壊れるよりマシということで Windows 標準の機能では実現できない、「しばらく使ってなかったら shutdown」という方法を採用した。(そのマシンは内部で電源トラブルが続出している VAIO だったのだ。)

注意

mfc70.dll, msvcp70.dll, msvcr70.dll が必要だが、これはアーカイブには入っていない。適当に調達すること。

他にも試したが、 PowerOffScheduler は設定を外部に保存しておくことができず、毎回起動してから設定を手で変更しなくてはいけない、Win-off はウィンドウ以外の状態がない(タスクトレイとかに入らない)ので、それぞれ却下とあいなった。

北陸郵政公社が感染

Web 日記と CMS

なんかどうも自分が Web 日記システムをあまり好きじゃないのは CMS 的な側面が欲しいと思っているんじゃないかという気がしてきた。

どういうことかというと、とりあえず非公開で日記エントリを追加し、エントリごとに公開、非公開を選べるような感じのものがあったら、とりあえずどかどか文章を書き、あとで推敲とかして、そんで公開、という流れを Web インターフェイスだけで実現できる。

こういうのがあったらなんか嬉しいような気がする。少なくともトラックバックとかの機能より、自分としては嬉しいな。文章が自分の中で「コンテンツ」以外に位置付けできないってことなのかなぁ。自分のコントロール下に常に置いておきたいって思うんだよな。だからローカルでスクリプトを動かしてアップするって形の日記スクリプトにはなんだか好意的。

Debian

いつも思うんだけど、いくらなんでもベースシステムに入るものが少なすぎないだろうか? 時間掛けてネットワークインストールしてこれ、っていうのはやっぱあんまり好きになれんのだよな。

いいディストリだとは思うんだけど。スタートアップがメンドイ。

割り切りが肝心

ファイル共有はあくまで作業スペース。ストックスペースへのアクセスにこのプロトコルは使っちゃだめだろう。

いや、作業スペースとしてネットワーク上のスペースをまったく使わない場合はこの限りじゃないか。ま、コラボ環境でのお話ってことで。

About

例によって個人のなんちゃらです