http://sf.net/(sf.net)でも採用されているViewCVS(sourceforge.net)。私はずっとcvsweb(fh-heilbronn.de)を使っていると思っていたのだが実はそうではないらしい。ダウンロードしてみた。 このViewCVSはPythonで書かれている。しかもCGIはもちろん、standaloneでも動かせるというスグレモノだった。standaloneはおもしろい。-rでリポジトリを指定して動かすとWebサーバが上がって、そのリポジトリを見ることができる。しかも-gオプションをつけるとGUIのコントロールまでついてきちゃう。ログはApacheのに似たのがstdout(かstderr)に出てくる。 この実装力(?)は何からくるものなのだろう。普通はそこまで作らないでしょ。ソースを軽く眺めてみたのだけど、Webサーバを動かす力はBaseHTTPServerモジュールの威力のように見える。単にGETやPOSTのハンドラを定義するだけでWebサーバになるわけだから。GUIはおなじみTkinterだ。こいつには私も何度もお世話になっている。Tkだからネイティブ(?)のGUIと比べると今となってはショボい感じもあるが、WindowsでもLinuxでもほとんど同じように動いてくれる。 つまりPythonの偉いところはモジュールが最初からついてくるところだろう。Rubyもだんだんそうなるらしいが、PythonやPHPのモジュール力の強さはどうしようもないところまできている。Rubyけっこう好きだけど使わないのはそういうところだ。いくらPythonのスレッドがタコっぽくても、気づくとPythonを使ってしまう。あとPythonはモジュールの調査もしやすいんだよね。起動してimportほげほげ、help(ほげほげ)でだいたい使い方がつかめる。 それに、Pythonは性悪説の言語だから悪人でも安心して使えるというのもある。おれ、プログラマとしてはけっこう邪悪だからね。 (追記) 2003-08-08 11:02 Python 性悪説というのはあまりメジャーな説ではないらしい。 (追記) 2003-08-08 09:55 Pythonは追加モジュールもソースをとってきてpython setup.py bdist_rpmだけでRPMのパッケージができてしまうものが多い。Rubyは1.4時代は次のようなテンプレートからspecファイルを作っていた。今は1.8だから、もう使えないかもしれないが。
%define name ---rewrite-me---
%define ver x.x.x
%define rel 1
%define prefix /usr
Summary: ---rewrite-me---
Name: %name
Version: %ver
Release: %rel
Vendor: Watanabe
Packager: Watanabe T <XXXXXXXX@XXXX.XXX>
Copyright: GPL ---checkit---
URL: http://www.rewrite-here.neto/
Group: Foo/Bar
Source: http://www.rewrite-here.neto/%{name}-%{ver}.tar.gz
BuildRoot: /var/tmp/%{name}-root
NoSource: 0
# PreReq: hogehoge
%description
(from README)
---rewrite-me---
%prep
%setup
%build
ruby extconf.rb
if [ "$SMP" != "" ] ; then
make -j $SMP
else
make
fi
%install
rm -rf $RPM_BUILD_ROOT
make install libdir=$RPM_BUILD_ROOT%{prefix}/lib/ruby/1.4 \
archdir=$RPM_BUILD_ROOT%{prefix}/lib/ruby/1.4/${RPM_ARCH}-linux
%clean
rm -rf $RPM_BUILD_ROOT
%files
%defattr(-,root,root)
%doc README* COPYING ChangeLog TODO doc*
%{prefix}/lib/ruby/*/*.rb
%{prefix}/lib/ruby/*/*/*