2010年3月30日火曜日

openbrok: シンボリックリンクの扱い

SRC_ROOT 直下にシンボリックリンクがあるとダメっぽい。 インデックス生成後にソースコードを表示すると例外が発生してしまう。 分散しているコードツリーを SRC_ROOT の下にシンボリックリンクで集めたらよさそうと思ったんだけど、そうもいかないみたい。残念。

2010年3月22日月曜日

opengrok: SCMと連携

まず、リポジトリの場所について。リポジトリはリモートにあってもかまわないけど、 opengrok で使う場合はちょくちょくリポジトリにアクセスが発生するのでローカルにおいておいた方がよさげ。 svnsync なり cvsup なり rsync なりでミラーリングしておく。

で、このリポジトリから一旦チェックアウトしておく必要があって、 よく分からないけどそういうものらしい。ちょっと面倒。 そこにファイルがないとインデックスが作成されないようで、 svn co --depth=files ... みたいにしてもダメだった。

というわけで、仮に以下のようにチェックアウトしたとします:

~/src
     /linux
     /openbsd
     /opengrok

インデックスの作成はopengrok に付属の run.sh を編集して使うのが便利で、 run.sh は結局以下のようになりました。

#!/bin/sh

PROGDIR=`dirname $0`

# REQUIRED The root of your source tree SRC_ROOT=/home/yourname/src

# REQUIRED The directory where the data files like # Lucene index and hypertext cross-references are stored DATA_ROOT=/var/opengrok/data

# OPTIONAL A tab separated files that contains small # descriptions for paths in the source tree PATH_DESC=${PROGDIR}/paths.tsv

EXUB_CTAGS=/usr/bin/ctags

# You might want to add more available memory, and perhaps use a server jvm? JAVA_OPTS="-server -Xmx1024m"

LOGGER="-Djava.util.logging.config.file=conf/logging.properties"

java ${JAVA_OPTS} ${PROPERTIES} ${LOGGER} -jar ${PROGDIR}/opengrok.jar
${SCAN_FOR_REPOS} -c ${EXUB_CTAGS} -s ${SRC_ROOT} -d ${DATA_ROOT} -W configurat ion.xml -r on -H -S -v -P

# OPTIONAL java ${LOGGER} -classpath ${PROGDIR}/opengrok.jar org.opensolaris.opengrok.web.Efta rFile ${PATH_DESC} ${DATA_ROOT}/index/dtags.eftar

-P オプションを付けると複数のプロジェクトを個別にあつかうことができます。

あと、リポジトリ、それをチェックアウトしたもの、opengrok のインデックスで 結構な数のファイルが作成され、inode が足りなくなってハマリました。

opengrok: OpenGrok を使う

OpenGrok は Sun 謹製のクロスリファレンスツール。

対応している言語は

  • C/C++
  • Shell Scripts (like ksh, sh)
  • Perl
  • Java, Java Class files, JAR files
  • ELF files
  • troff man pages
  • Zip, Gzip, BZip2, Tar
  • meta language files (like XML, SGML or HTML)

これ以外のファイルでもリファレンスが正しくできないだけで、 全く表示されないということはない。

また、主要なSCM に対応している。

ちょっと使ってみただけだけど lxr と比べて、対応している SCM が多かったりと 高機能な割に導入が簡単で見た目もよい。 あとは Python と Ruby に対応してくれれば... まあ自分で作ればいいか。


以下、opengrok をインストールしたときのメモ。OS は debian-lenny。

sun-java6-jdk, tomcat5.5, tomcat5.5-admin, tomcat5.5-webapps, exuberant-ctags あたりをインストール。

opengrok-0.8.1.tar.gz をダウンロードして、適当に展開。 このディレクトリを ~/opengrok-0.8.1 としておきます。

source.war の deploy:

cd ~/opengrok-0.8.1
sudo ./OpenGrok deploy

/etc/tomcat5.5/policy.d/04webapps.policy でパーミッションを追加:

grant codeBase "file:${catalina.home}/webapps/source/-" {
     permission java.security.AllPermission;
};

grant codeBase "file:${catalina.home}/webapps/source/WEB-INF/lib/-" {
     permission java.security.AllPermission;
};

次。クロスリファレンスしたいソースコードを用意。 このディレクトリを ~/src としておきます。

インデックスを作成:

java -server -Xmx1024m -s ~/src -d ~/ogk-data -W configuration.xml -v
sudo cp configuration.xml /var/opengrok/etc/configuration.xml

あとは tomcat を再起動すれば http://<your-site-url>:port/source/ で表示されるはず。

2010年3月14日日曜日

misc: コードリーディング

コードを読むのに、lxr + Firefox の internote プラグインが便利な気がする。

2010年3月13日土曜日

misc: graphviz (dot言語) から Ascii Art に変換 (graph-easy)

graphviz は dot言語から各種フォーマットに対応しているけど、 Ascii Art に変換できないのが不満といえば不満。

_GraphEazy では dot --> ascii-art の変換に対応していて、これを使うのがよさげ。

$ echo "[ test ] -- hoge --> [user1]" | graph-easy --as=graphviz

digraph GRAPH_0 {

  // Generated by Graph::Easy 0.64 at Sat Mar 13 00:38:04 2010

  edge [ arrowhead=open ];
  graph [ rankdir=LR ];
  node [
    fontsize=11,
    fillcolor=white,
    style=filled,
    shape=box ];

  test -> "user1" [ color="#000000", fontcolor="#000000", label=hoge ]

}
$ echo "[ test ] -- hoge --> [user1]" | graph-easy --as=graphviz | \
    graph-easy --from=graphviz
+------+  hoge   +-------+
| test | ------> | user1 |
+------+         +-------+

""[ test ] -- hoge --> [user1]"" の部分は graph-easy 形式。 ちょっとしたネットワーク図を AA で書くときは:

$ echo "[ test ] -- hoge --> [user1]" | graph-easy

と, graphviz を経由しなくても OK。

misc: 作成中の man ファイルの確認

man ファイルを編集した後、確認したくても man -f man.1 みたいなことができなくて どうしたものかと悩んでたけど、こうすればいいみたい:

groff -mandoc -Tlatin1 /usr/share/man/man1/man.1 | less

スッキリ。

2010年3月11日木曜日

python: epytext

epytext という物を知った

pydoc と互換性をとりつつ、より豊かな表現ができるらしい。 reStructuredText みたいなものか。文法も似ているし。

debian: backports を利用する

debian を使っていると、一部のパッケージだけ新しくしたいことがある。 tar ball を拾ってきて make install でもいいんだけど、バージョン管理とかめんどう。

そんなときは backports を使うとかなり便利。

まず、/etc/apt/sources.list に以下を追加:

deb http://www.backports.org/debian lenny-backports main contrib non-free

あとは順次更新していくだけ。

  • aptitude update
  • aptitude -t lenny-backports install "package"

ただ、このままにしておくと、upgrade した時に他のパッケージまで lenny-backports のもので更新されてしまってよろしくない。

/etc/apt/preferences に以下のようにしておくとよさげ:

Package: "package name"
Pin: release a=lenny-backports
Pin-Priority: 999

Package: *
Pin: release a=lenny-backports
Pin-Priority: 200

参考: http://www.backports.org/dokuwiki/doku.php?id=instructions

misc: コメントの指針

いつもコードにコメントを入れるか入れるまいか悩むけど、なるほどなと思った指針があったのでメモ。

http://www.infoq.com/jp/news/2010/03/To-Comment-or-Not-to-Comment

「なぜ」というコメント == 役に立つ
「どのように」というコメント == 疑わしい

2010年3月6日土曜日

mac: Mac OS X Server で Spotlight による Web 検索

デフォルトでは使用不可になっていて、有効にしてあげないといけない。

http://support.apple.com/kb/TA23537?viewlocale=ja_JP