hatenaの記事のように、FluentdやGrowthForecastを使ったロギングって面白そうだなーと思って自分でもやってみた。アプリケーション毎のアクティブな時間を取るまず考えたのはこれ。キーイベント発火回数ほど細かくなくても、「アクティブにしている時間の割合」が取れたらそれはそれで良いかな、と。1秒ごとにアクティブなアプリを調べてロギングしていく。Xにおいてアクティブなアプリケーションを調べるならAppleScriptが簡単。application))これだけでアクティブにしているアプリケーション名が取れる。tellといった形でプロセス名として取ることもできるらしい。以下のように変形することもできる。trueなんにせよAppleScript一行で取れるので、ワンライナーのコマンドで書ける。1s</source>のように書けば1秒ごとにAppleScript経由でアクティブなアプリケーション名がemitされる。これをdatacounterで1分ごとに集計。Twitter.app</match>これで主要なアプリがどれくらいアクティブになっているかがだいたい取れる。そのままgrowthforecastに投げてしまう。iTerm_percentage,Emacs_percentage,Chrome_percentage,Twitter_percentage,unmatched_percentage</match>こんなかんじでそれぞれのアプリの単位時間あたりのアクティブ率の変化がグラフで取れて、複合グラフにするとというかんじで「あぁ、このへんはずっとEmacsで何か書いてて、このへんはずっとTwitter見てるな」とかが分かる。Emacsの文字入力数を取るEmacsで色々作業する場合に、どんな言語をどれくらい書いているか...じゃなくても、major-modeごとに集計できたら良いかな、と。post-self-insert-hookで文字入力した際にhookして非同期プロセスからfluentdに送信する。'my-insert-hook)上記のようなelispをEmacsの設定に書いておけば、文字が入力されるごとにそのバッファのmajor-mode名がcurlを使ってHTTP経由でemitされる。start-process関数は非同期にコマンド実行されるので連打していても動作が重くなったりしない。perl_count,ruby_count,javascript_count,minibuffer_count,unmatched_count</match>といった感じで、1分間あたりに文字入力が起こった回数をmajor-mode毎に集計してグラフ化できる。zshの実行コマンドを取るzshでもシェルコマンド実行前後に処理を挟むことができるので、実行したコマンドで集計したりできる。localhost:9880/zsh}preexec_functions=(preexec_fluent)のようなものを~/.zshrcに書いておけば、コマンド実行するたびにそのコマンド名がemitされる。ls_count,cd_count,unmatched_count</match>コマンドごとに集計する意味はあまり無いかもしれないけど、特定のコマンドをよく使う、という場合は割合を知ることができて良いかも?合計値を取れば1分あたりどれくらいzshでコマンド叩いているか、の推移は分かると思う。Lispテクニックバイブルを少しずつ読み進めてる。