情シスは何度でも甦るさ。

VBA!VBA!

slackで未払い残業代を手にいれる

GWも明けて五月病真っ只中の季節ですが、新卒の人たちは社会人生活を謳歌してるのでしょうか。

え?GWも出勤?しかも、残業代が出ない?ブラック企業へ入社おめでとう!

でも、そんな可哀想なあなたに、slackを使って、ブラック企業から未払い残業代を請求する方法を伝授します。

もくじ

  1. どうやって残業代を請求するの?
  2. 準備
    1. slackのアカウント取得
    2. APIのURLを取得
    3. curlのダウンロード
  3. slackにつぶやく
    1. batファイルを作る
    2. メッセージを飾ってみる
    3. スタートアップ/シャットダウンスクリプトの設定
  4. そして本当の戦い

1.どうやって残業代を請求するの?

残業代に必要なものは、残業していたという記録です。 それは、就労時間を記録したメモでもよいのですが、メモなんてしてる暇ねーよ。さっさと帰りたいんだよ。しかも、周りに怪しまれるじゃねーか。

というわけで、PCをオン・オフしたところでslackにメッセージを飛ばすことで就労時間を自動で記録するのがゴールです。

2.準備

対象はWindows PCです。 MAC?そんな会社ブラックじゃねーよ。

1.slackのアカウント取得

slack.com にいってアカウント作るべし。 [company name] ってあるけど、本当の会社名入れないように。URLに使われるだけだから、適当なワードを入力すること

2.APIアドレスの設定

Incoming WebHooks という通知用のURLを取得する。 設定画面から、URLを取得できる。 詳しくは以下参照のこと
Incoming WebHooksを使用して、GitBucketにpushしたり、pull request作成,pull requestをマージ,pull requestにコメント,issue作成等をした際にSlackのチャンネルに通知メッセージを投稿してみる - keiwt’s diary

3. curlのダウンロード

公式にもある通り、メッセージを通知するのは、cURLコマンドで先ほど取得したURLにPOSTするのが一番楽。 だが、Windowsでは、curlコマンドはないので、ダウンロードする。 詳細は以下を参照。
Windows®環境にcURLコマンドを実行できるようにインストールする手順 | ええかげんブログ(本店)

会社PCだとインストールできない場合もあるが、zip版を落とせば解凍しただけでコマンドが使える。 適当なフォルダで解凍しましょう。 その後、環境変数PATHにそのフォルダを設定しておく。

3. slackにつぶやく

batファイルを作成し、以下のコマンドを書いて実行する。

start.bat

curl -X POST --data-urlencode "payload={\"text\":\"start working!\"}" https://hooks.slack.com/services/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

ダブルコーテーションをエンコードするのは、WindowscURLの仕様です。参考

え?proxy使ってる?

ならばこう。

start.bat(proxy設定)

curl -X POST --proxy http://192.168.1.1:8080 --data-urlencode "payload={\"text\":\"start working!\"}" https://hooks.slack.com/services/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

え?sslがなんたらとかへんなエラーが出た?

curl performs SSL certificate verification by default, using a "bundle" of Certificate Authority (CA) public keys (CA certs). If the default bundle file isn't adequate, you can specify an alternate file using the --cacert option.  
If this HTTPS server uses a certificate signed by a CA represented in the bundle, the certificate verification probably failed due to a problem with the certificate (it might be expired, or the name might not match the domain name in the URL).  
If you'd like to turn off curl's verification of the certificate, use the -k (or --insecure) option.

じゃ、メッセージの通り、-kオプションを追加で。

start.bat(-kオプション)

curl -X POST --data-urlencode "payload={\"text\":\"start working!\"}" -k https://hooks.slack.com/services/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

で、実行すると

f:id:ryoben:20150509220437p:plain

おめでとう!

2. メッセージを飾ってみる

今回起動用とシャットダウン用とで2つbatファイルを作るので、ついでに日本語にしてみる。
なお、slackのAPIでは文字コードをutf−8で送らなければならず、WindowscURLコマンドラインでは文字化け不可避なので、apiに渡す部分を外部ファイル化する。 また、あとあとスタートアップスクリプトとして利用できるように、cdコマンドなども追記しとく

start.bat

c:
cd C:¥script¥slack
curl -X POST --data-urlencode payload@start.json  https://hooks.slack.com/services/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

start.json (文字コードはutf−8)

{
"text": "今日も一日がんばるぞい!",
"channel":"#work",
"username":"社畜",
"icon_emoji":":smiley:"
}

end.bat

c:
cd C:¥script¥slack
curl -X POST --data-urlencode payload@end.json  https://hooks.slack.com/services/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

end.json (文字コードはutf−8)

{
"text": "今日も一日がんばったぞい!",
"channel":"#work",
"username":"社畜",
"icon_emoji":":skull:"
}

オプションの説明
text:メッセージ本文
channel:slack上のチャンネル(なしでも可)
username:つぶやいた人の名前
icon_emoji:つぶやいた人のアイコンを絵文字で指定できる。一覧はここから

これらのファイルを C:¥script¥slack に全部置いて順番に実行すると、こんな感じになる。
f:id:ryoben:20150509222605p:plain

ちゃんと時間が記録されてますね(もちろん日付も見える)
では、最後の仕上げ

3. スタートアップ/シャットダウンスクリプトの設定

このスクリプトWindowsのスタートアップ/シャットダウン時のスクリプトとして動作させます。 簡単なのは、グループポリシーを使用してスタートアップ/シャットダウン時に先ほどのスクリプトを指定します。 以下参照(XPですが)
@IT:Windows TIPS -- Tips:グループ・ポリシーを使って、コンピュータの終了時にコマンドを実行する

4. そして本当の戦い

slackは無料枠で、10000メッセージが保存されるので、5000日分つまり13年は出退勤の時刻が保存可能。 あとは、その証拠(slackの就労記録と実際の給与明細の労働時間とか)を持って労働基準監督署にヘルプミーして、会社を相手に一戦交えれば晴れて未払い残業代をゲットだぜ!

補足

うまく動かないんだぜ?
グループポリシーのスクリプト実行時の環境変数PATHは、ユーザー変数は認識しないので、システム変数のPATHを設定すること。
PATH自体設定できない場合は、batファイル内でフルパスでcurlコマンドを実行。

グループポリシーが使えない場合
スタートアップにショートカットを置くか、トリガーを起動時にしたタスクを作成することで、起動時のスクリプトは実行できる
しかし、シャットダウン時は、そういう方法が使えないので、slackへのメッセージ通知コマンドの後ろにシャットダウンコマンドを書いたbatファイルを作り、PCの電源を切る時は、そのbatファイルを起動するようにする(若干厳しいか・・・)

ruby 2.1.0 on Amazon Linux で小数点以下の割り算が0.0になる

偏差値を割り出す小数点以下のめんどうな計算なのだが
開発環境とプロダクションで、同じrubyバージョン、同じデータ同じロジックなのに、計算結果が異なる。 しかも、irbやコマンドベースで実行するとちゃんと出るという謎仕様。

式  
(0.8125 - 1.14003927)  * 0.5 / 0.62771825

開発環境(Mac OSX 10.10.3)

$ ruby -v
ruby 2.1.0p0 (2013-12-25 revision 44422) [x86_64-darwin14.0]

$ ruby -e "p (0.8125 - 1.14003927)  * 0.5 / 0.62771825"
-0.2608967239681178

プロダクション(PaaS の sqaleを利用)

$ ruby -v
ruby 2.1.0p0 (2013-12-25 revision 44422) [x86_64-linux]

#OSは Amazon Linux
$ cat /etc/issue
Amazon Linux AMI release 2012.09
Kernel \r on an \m

$ ruby -e "p (0.8125 - 1.14003927)  * 0.5 / 0.62771825"
-0.2608967239681178

ただし、デバッグログだとこの計算式が0になる。 なんで?

#debg log
(0.8125 - 1.14003927)  * 0.5 / 0.62771825 =>: -0.0

解決方法

なんか括弧でくくったら直った。

式
(0.8125 - 1.14003927)  * (0.5 / 0.62771825)  

#debg log
(0.8125 - 1.14003927)  * (0.5 / 0.62771825)=>: -0.260896723968117847073377

しかも、小数点以下の桁が増えた。 rubyとOSとの問題?

ExcelとかWordファイルをテキストに一括変換

やりたいこと
SIerの成果物とExcelとWordで作られた議事録とで矛盾がないかチェックしたい
 => 機能名や画面・帳票名をキーに全ての議事録ファイルを検索して、書いてあることをチェックしたい
  => 議事録ファイルを一括でテキストに変換してGrepしたい ←コレ


ということをやりたかったのですが、vectorフリーソフト探してもいいのが見つからない。


そうやって悩んでいたら、Winmergeのアドオンで、wordやexcelのdiffできるやつがあったなー。あれテキストに変換してdiffするんじゃなかったっけと思って調べたらビンゴ

xdoc2txt

  • 使い方
  xdoc2txt.exe -f word.doc
  => word.txt が作成
  xdoc2txt.exe -f  doc/*
 => docフォルダ配下のファイルが一括でtxtに変換


あとは、エディタ(サクラエディタ)のGrep検索で、ファイルの中身をGrepして、該当の箇所を検索できましたとさ。