Hatena::Graph Hack: zshでの日々のトレーニング量を全自動でグラフに
bashからzshにswitchしてからもう少しで2ヶ月になります。最近はzshに加えてscreenも利用するようになり、さらに快適な環境で作業ができるようになってきました。zshとscreenの組み合わせは本当に便利です。
それで、昨日の夜、ふとこんなことを考えました。
zshはbashと違ってコマンドの履歴に、入力したコマンドのタイムスタンプが記録されている。(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ファイルインポートページ -> アップロード の工程を順番に行います。これだけです。
こんなグラフができました。
Hatena::GraphもWebサービスで操作できるようになれば、いいのになぁ。
追記 (2006/01/24 21:50)
コードはid:miyagawaさんのXML::Liberalとid: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