Hatena::Graph Hack: zshでの日々のトレーニング量を全自動でグラフに

bashからzshにswitchしてからもう少しで2ヶ月になります。最近はzshに加えてscreenも利用するようになり、さらに快適な環境で作業ができるようになってきました。zshとscreenの組み合わせは本当に便利です。

それで、昨日の夜、ふとこんなことを考えました。

zshbashと違ってコマンドの履歴に、入力したコマンドのタイムスタンプが記録されている。(history-allについては、横着プログラミング 第3回: 履歴マニアを参照)
だから、

% history-all | awk '{ print $1}' | uniq -c
[...]
     67 15.1.2006
    206 16.1.2006
    493 17.1.2006
    297 18.1.2006
     43 19.1.2006
    128 20.1.2006
    831 21.1.2006
    644 22.1.2006

こんな風に集計をしてやれば、日々zshでどのくらいの量のコマンドを実行しているのかがわかる。
はてなにはHatena::Graphがあるんだから、その集計結果をHatena::Graphで見られるようにしたら面白そう。でも、Hatena::Graphは今まで一度も使ったことがないし、Hatena::GraphにはWebサービス経由で操作できなさそうだから、ちょっと難しいかもしれない。幸い、CSVファイルからのインポートが利用できるようなので、WWW::Mechanizeをうまく使えば、やりたいことは実現できるかも。

そんなわけで、今日、作りました。

300行くらいのPerlスクリプトで、やりたかったグラフ生成を全自動化できました。やっていることは簡単です。まず最初にzshのコマンド履歴を集計してCSVファイルに変換します。そしてWWW::Mechanizeを用いて、認証 -> CSVファイルインポートページ -> アップロード の工程を順番に行います。これだけです。

こんなグラフができました。

zsh training

Hatena::GraphもWebサービスで操作できるようになれば、いいのになぁ。

追記 (2006/01/24 21:50)

ソースコードを公開しました。お試し下さい。

コードはid:miyagawaさんのXML::Liberalid:naoyaさんのAcme::Web20::Validatorを参考にして書きました。拡張しやすい構造になっているので、zsh training以外のグラフが生成できるようにすれば、面白いかと思います。

ちなみに、ディレクトリ構造はこんな感じです。

% tree                                                                        [~/export/Hatena-GraphHack-0.01]
.
|-- Changes
|-- README
|-- boot.pl
|-- config.yml
|-- lib
|   `-- Hatena
|       |-- GraphHack
|       |   |-- Content
|       |   |   `-- ZshTraining.pm
|       |   `-- Content.pm
|       `-- GraphHack.pm
`-- t
    `-- 00_compile.t

5 directories, 8 files