Tracにガントチャートプラグイン導入@Debian Etch

Tracの導入の記事で導入したTracにガントチャートプラグインを導入してみました。

インストールはすごく簡単で、TracのpluginディレクトリにTracGanttのeggファイルを配置します。

# wget http://willbarton.com/files/TracGantt-0.3.2a-py2.4.egg

ReadMeを参考にtrac.iniに以下を追記します。
※componentsセクションなどすでにtrac.iniにある場合は、そのセクションに追記します。

[components]
tracgantt.* = enabled

[ticket-custom]
due_assign = text
due_assign.label = Due to assign
due_assign.value = DD/MM/YYYY

dependencies = text
dependencies.label = Dependencies
dependencies.value =

due_close= text
due_close.label = Due to close
due_close.value = DD/MM/YYYY

include_gantt = checkbox
include_gantt.label = Include in GanttChart
include_gantt.value =

[gantt-charts]
# The format of dates entered by humans in the above ticket fields
date_format = %m/%d/%Y

# Include the ticket summary in the gantt chart display
include_summary = true

# Trim the included summary to the given number of characters
summary_length = 16

# Use the creation date of a ticket as the "due assign" date if no
# assignment date is given
use_creation_date = true

# Show on the gantt chart the date the ticket was opened, to contrast
# with the assignment date.
show_opened = true

あとはapacheを再起動すれば、Tracにガントチャートのメニューが表示されるようになります。


ソースコードを読むためのツール

現在多くのアプリケーションのソースコードがネット上に公開されています。他人のソースコードを読むのは結構骨の折れる作業で、これを手助けしてくれるツールがいくつかあります。特にブラウザ上でHTMLのリングを用いてソースを追っかけるツール、Code Reading(コードリーディング)やCode Viewer(コードビューア)、Code Brower(コードブラウザ)、もっと広い範疇ではソースコードタグシステムとか呼ばれているものです。

私は個人的にLXRを使っていました。また、gonzuiGNU Globalも似たソフトウェアです。これらのソフトウェアを利用することで、関数や変数の定義場所、使用されている場所等がマウスクリックで追いかけられます。しかし、ずっと不満に思っていたことが一つ。ソースコードを読むとそこで理解したことをメモりたくなりますが、これらのソフトウェアではそこまでサポートされず、結局紙や他のテキスト文書に書くことになります。

しかし、最近Globalにメモ機能を付加したソフトウェアを見つけました。CodeReadingWikiというものです。 コメントを残したい行をダブルクリックすることでコメントを残せるようで、かなり便利そうです。だだし、最近は更新がないので、少し改造してみました。

ただ欲を言えば、その場でソースも修正できたり、SVNのリポジトリを直接見たりできるとさらに便利だろーなと思っています。バグトラッキングシステムTracのソースコードブラウザに、これらの機能を付加したツールを誰か作ってくれないかなぁ。いや自分で作って・・・・・


evalで変数名を変数にする@bash

シェルスクリプトで変数を使用していると、変数名を変数にしたい場合が出てきます。

しかし、以下のようなシェルを書いてもエラーになってしまいます。

#!/bin/bash
HOGE_1=1
HOGE_2=2
for i in 1 2; do
echo ${HOGE_$i}
done
?$ ./hoge.sh
./hoge.sh: line 6: ${HOGE_$i}: bad substitution

そこで、evalの登場です。evalは、引数を一度評価してから実行します。つまり、

HOGE="echo hoge"
eval $HOGE

を実行すると、evalは$HOGEの内容を評価し、”echo hoge”に変換します。さらにこれを実行するので、hogeと表示されます。これを使えば変数名を変数にできます。具体的には、以下のようにします。

#!/bin/bash
HOGE_1=1
HOGE_2=2
for i in 1 2; do
eval echo '$HOGE_'$i
done

実行すると、

$ ./hoge.sh
1
2

となりHOGE_1とHOGE_2の内容が表示されます。めでたしめでたし。


akamaitechnologies.comってなに??

ふとWindowsでnetstatを叩くと、akamaitechnologies.comというドメインに繋がっています。なんだここ?って思って調べてみると、どうやら多くのユーザにコンテンツを配信するサービスを行っている会社のドメインだといういうことがわかりました。

Windowsのアップデートや動画共有サイトでの動画配信等々を使用すると繋がるみたいです。トロイでなくて一安心。

アカマイ・テクノロジーズ


シェルスクリプトでファイル内の文字列を置換する

あるファイルをsedやtrで文字列置換したあと、同じファイルにリダイレクトすると空になってしまいますよね。そこでテンポラリファイルなどにリダイレクトした後に、mvするという方法がまず考えられますが、その分やることが増えて面倒です。

そこでedというラインエディタを使うと、ファイル内の文字列をコマンドラインで置換することができます。ラインエディタとはviやemacsといったエディタみたいなものですが、行単位でテキストを編集するためにこのように呼ばれます。それに対してviやemacsはスクリーンエディタと呼びます。

ちなみに、viやvimで文字列を置換する場合(hogehogeをaaaaaにする場合)

:%s/hogehoge/aaaaa/g

といったコマンドを使いますよね。これが実はedのコマンドexコマンドと呼び、edのコマンド由来であるため、viのexコマンドを使える人はedもすぐに使えます。

よって、シェルスクリプトで置換するには、以下のようにすると置換できます。

$ echo -e "%s/hogehoge/aaaaa/g\nw" | ed - ファイル名

ここでおや?って思った人もいると思います。コマンドの最後に\nwがあります。”w”はviで変更を保存するときと同じで、edもあくまでエディタなので、この保存コマンドが必要になります。”\n”は改行です。edは1行に1コマンドなので、置換するコマンドと保存するコマンドをこの改行で区別しています。echo に -eがあるのはこの改行文字列をechoで扱えるようにするためです。edの”-”は通常の端末メッセージを表示しないようにするオプションです。

上記ではechoでコマンドを作っていますが、リダイレクト”<”でコマンドの書かれたファイルを読み込んで実行することも可能です。

$ ed - ファイル名 < コマンドの書かれたファイル

また、ヒアドキュメントを使って以下のようにすることも可能です。

$ ed - << END
%s/hogehoge/aaaaa/g
w
END

hogehogeにマッチする行を削除するには、以下のようにすればOKです。これもviのコマンドと一緒ですね。

$ echo -e "g/hogehoge/d\nw" | ed - ファイル名

なお、シェルスクリプトでこのような処理を行う場合、”\”や”$”などがシェルで解釈されてしまうので、エスケープが必要になります。

(例)

$ echo -e "g/\$aaaaa/d\nw"
g/$aaaaa/d
w

$ echo -e "g/\\\\1aaaaa/d\nw"
g/\1aaaaa/d
w