というようなことを元々は teck.kayac.com Advent Calender 2013 の17日目 の記事として考えてたんだけど、結局なんか無性にWicketの事を書きたくなっちゃったので、お蔵入りになった記事をこっちに書く事にする。
カレンダーのノリで書いてたのをそのまま持ってくると大分寒い感じがするが、面倒なので不自然なカレンダー要素を消す意外は無編集で。
勤怠管理してますか?
私はと言うとまあお察しください。そう、勤怠管理は面倒です。
- 何時に出社したか?
- 何時ににどれくらい休憩したか?
- 何時に退勤したか?
覚えてられないですね。退勤時に記録を付けるときにはもう記憶が曖昧です ><;
ということで退勤時間の自動検出ソリューションとか言って、適当に休憩や退勤の時間を記録するライフ八苦したいと思います。
いかにして自動的に記録するか
自分は最近 MacBookPro Retina 13インチ 16GBメモリ 512GB SSD というとても快適な環境で仕事してるのですが(16GBも積んでるとVirtualBox&Vagrantによる開発環境が本当に快適)
- 昼休憩はスクリーンセーバーで日々萌え萌え画像を垂れ流して「 頭おかしい人 」を演出
- 出社退社移動中はPC閉じてスリープ
という感じなので、スクリーンセーバーになってた時間とスリープしてた時間が後から分かれば休憩、退勤の時間が分かると言えます。(実際は業務内容と時間を紐づける必要がありますが、今のところ自分の業務内容は一つだけなので考えなくてOK。複数案件抱えてたりしてる人は本当に大変そうです…)
問題はスリープの状態は記録出来ないこと。記録付けたくてもPCが眠ってるのでPC自身がアクション起こせません。
ということでジョースター卿に教えを乞いました
なるほど!!!
ということでジョースター卿の教えを受けてPC稼働中は常に記録を取り続け、スクリーンセーバーの時は記録しない、という感じにやってあげるとうまく行きそうな気がしてきました。
具体的には?
homebrew で mysql を入れた後、適当に create database して適当に以下のようなテーブルを用意して
CREATE TABLE receive (
time datetime NOT NULL,
PRIMARY KEY (`time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
以下のようなスクリプトを書いてcronに設定
#!/bin/bash
if [ "" == "$(ps aux | grep ScreenSaverEngine | grep -v grep)" ]; then
/usr/local/opt/mysql/bin/mysql -u root beacon_receiver -e "insert into receive values (now());"
fi
* * * * * /bin/bash ~/.beacon.sh
するとこんな感じのスクリプトを用意ししてぺろっと出力すると
- 9時半に出社してる
- 13時15分ぐらいから昼飯行ったっぽい
- なんか 13:50 辺りでちょっと復帰してるの気になるけど…
- 20時45分ぐらいに退社してる
というのが分かって「 あらやだ便利! 」という感じになりました。ソース一式はこちら⇒https://gist.github.com/mix3/7973095
お試しあれ。
なお、日々ちゃんと勤怠管理出来てる人には関係ない話の模様。