Slackに気を取られすぎる問題とその解決
この記事は「さくらインターネット Advent Calendar 2015」の20日目の記事です。
Slackは非常に気の利いたチャットツールで、とても便利に使っています。
問題
しかし、このツールにも問題があります。
ジョインしているチャンネルが多くなると未読のメッセージがつぎつぎに溜まり、未読を消化したい欲と仕事に集中したい欲を常に戦わせる状態となります。
(そして、だいたい未読を消化したい欲が勝ちます)
解決
仕事の効率を高めるはずのツールで仕事の集中力を欠いてしまっては仕方がないので、この問題を2つのツールを使って解消します。
Slack Silencer
まず、Slack Silencerというツールを使います。
このツールは指定したチャンネルをミュートにしてくれます。ミュート状態のチャンネルはリスト上に薄く表示され、メッセージの未読を伝える白文字の表示になりません。また、メンションされた場合にはバッジが付きますが、通知は飛ばなくなります。
ジョインしておきたいけどリアルタイムでウォッチする必要がないチャンネルをミュートすることで、未読を消化したい欲に振り回されることがぐっと少なくなります。
使い方
1. SlackのAPI tokenを作成
Slack Web API | Slackより作成可能です。
2. tokenを環境変数に設定
export SLACK_API_TOKEN=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
3. Slack Silencerをgit clone
git clone git@github.com:dopin/slack-silencer.git
4. コマンドラインよりプログラムを実行
# foo, barのチャンネルがミュートされる
/path/to/slack-silencer/mute.rb foo bar
ちなみに自分は、就業時間の09:30-18:30の間だけミュートするため、以下のようにcrontabに設定しています。
# 9:30からミュート 30 9 * * * /path/to/slack-silencer/mute.rb foo bar # 18:30にミュート解除 30 18 * * * /path/to/slack-silencer/mute.rb
Slack Reporter
Slack Silencerを使うことで未読により集中力を削がれることはなくなりました。
しかし、ミュートにしている間に投稿されたメッセージは既読扱いにされてしまうため、就業後にゆっくりメッセージを読もうとすると探しだすのが大変という新たな問題が発生します。
そこで、この問題を解決するため、Slack Reporterというツールを作成しました。 このツールは指定の期間に投稿されたメッセージをレポートにまとめてくれるツールです。
レポートのサンプル
使い方
1. SlackのAPI tokenを作成 (※ Slack Silencerで実施済みの場合スキップ)
Slack Web API | Slackより作成可能です。
2. tokenを環境変数に設定 (※ Slack Silencerで実施済みの場合スキップ)
export SLACK_API_TOKEN=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
3. Slackのユーザ名を環境変数に設定(オプション)
設定するとSlackのダイレクトメッセージでレポートのパスをお知らせします。
export SLACK_USER=xxxxxxxxxx
4. Slack Reporterをgit clone
git clone git@github.com:hogesuke/slack-reporter.git
5. コマンドラインよりプログラムを実行
# 9:30から18:30のメッセージを対象にする場合 /path/to/slack-reporter/reporter.rb 0930 1830 # 現時刻から1時間前までのメッセージを対象にする場合 /path/to/slack-reporter/reporter.rb 60
これもcrontabに設定し、自動実行させると便利でしょう。
# 18:30にレポート作成 30 18 * * * /path/to/slack-reporter/reporter.rb 0930 1830
レポートファイルは/path/to/slack-reporter/contents/
ディレクトリにhtmlファイルとして生成されます。
一件落着(?)
Slack Reporterについては、このAdventCalendarを書いている直前までコーディングしていたため、まだ運用できていません…
追記
ブクマコメントにて、最近Slackに実装されたdo not disturb
で良いのでは?というご意見を複数いただいたので、ちょっと追記します。
do not disturb
を設定すると、メンションされた際の通知は飛ばなくなりますが、未読の状態は分かってしまいます。具体的には、チャンネルリストに白太文字で表示され、Slackアプリのアイコンに赤丸で未読が存在することが分かる表示になります。
インボックスゼロ派の自分としては、この状態が目に入ると未読を消化せずにはいられないので、上で紹介しているツールでサイレントな環境を作っています。
追記2
ブコメで使ってみるって書いてくださってる方、ありがとうございます!
ただ、実のところSlack Reporterに関しては、メンションやリンク、Botによる投稿などの表示が不完全で一部見づらいものになっています。これについては、使いながら徐々に改善していく予定です。
また、PullRequestも歓迎してます。よかったらPR送ってください。
- 作者: 松下雅和,小島泰洋,長瀬敦史,坂本卓巳
- 出版社/メーカー: 技術評論社
- 発売日: 2016/06/28
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (2件) を見る
YAPC::Asia 2015 は最高のフェスだった
Raspberry PiとOpenCVでスプラトゥーンの勝敗を自動記録する仕組みを作ってみた
ikashot.net
※ 現在、IEで画像が表示できない不具合があります。お手数ですがIE以外でのアクセスをお願い致します…すみません。
何を作ったか
スプラトゥーンではバトルの履歴を見れないようになっているので、勝率がわかりません。自分の勝率がどの程度なのか知りたいなーと思ったので、勝敗を自動記録する仕組みを作ってみました。
仕組み
以下のような流れで処理しています。
- Raspberry Piのpicameraで、TV画面をキャプチャする
- キャプチャ画像のなかにWIN or LOSEの結果が表示されているかOpenCVを使って判定する
- WIN or LOSEが検出されたら、WebAPIを通して結果画面のイメージと勝敗をアップロードする
不格好ですが、こんな具合にラズパイをセットしてTV画面をキャプチャしてます。
OpenCVの画像認識について
WIN or LOSEの判定はOpenCVを使用して行っています。
画像認識できるようにするまでの手順はだいたい以下のような感じです。
- サンプル画像の取得
- 特徴の抽出
- 検出器の生成
- OpenCVの画像認識コードの実装
サンプル画像の取得
まず、検出対象の「WIN」と「LOSE」のポジティブサンプルと、どちらでもないネガティブサンプルを用意する必要があります。
今回はWINサンプルを400、LOSEサンプルを300、またどちらでもないネガティブサンプルを3万用意しました。精度の高い検出をするには、数千単位でサンプルを用意する必要があるみたいですが、そこまでやるのは辛いので妥協しています。
左: WINサンプル 中央: LOSEサンプル 右: ネガティブサンプル
特徴の抽出
特徴抽出っていうのは、ここが目でここが鼻でここが口みたいなのを示してあげることです(たぶん)。
難しいことはよく分からなかったので、今回は結果画面の「WIN」「LOSE」っていうのはここのことだよっていう座標を示しています。
これにはTrainingAssistantというツールを使用しました。
github.com
このツールを使うとブラウザで簡単にポジティブサンプルとネガティブサンプルの分類と、特徴の抽出(検出対象座標の記録)ができます。
こんな具合です。詳しくは作者さんのブログ記事に記載されています。
OpenCV 2.4.2で分類器を作る - shkh's blog
検出器の生成
ツールを使って生成されたポジティブ、ネガティブの分類と特徴点が示されたテキストファイルをもとに検出器を生成します。 これにはOpenCVのコマンドを使用します。
これもTrainingAssistantの作者さんのブログ記事を参考に実行しました。
OpenCV 2.4.2で分類器を作る - shkh's blog
この工程が一番時間がかかります。Core i5、メモリ16GBのMacBookProで完了まで丸2日かかりました。
ただ今回はネガティブサンプルが3万とポジティブサンプルに比べて多すぎたことが原因かもしれません。減らせばもうちょい速くなりそう。
OpenCVの画像認識コードの実装
生成された検出器を使って実際に画像認識するコードを実装します。 これは検索するとたくさんサンプルコードが出てくるので、それを参考にすると簡単に実装可能です。
自分はこのQiitaの記事を参考に実装しました。
python+OpenCVで顔認識をやってみる - Qiita
こんな具合に検出してくれます。
一応、検出してくれますが精度は悪いです。部屋が暗いと認識されずらかったり、WINをLOSEと間違えたりします。
この精度の悪さを補うため実際のコードでは、20フレーム中に3フレーム以上認識したら正しい検出として画像をアップロードする、といったようなワークアラウンドを埋め込まんでます。
精度が悪い原因はポジティブサンプル数が少ないことだと思うので、しばらくしてサンプルが集まったら検出器を作りなおそうかと思います。
以上!
以上で、簡単な画像認識を実現できました。ツールやサンプルコードを上げてくれている方がけっこういるので、その恩恵にあずかると割と簡単に実現できますね。ほんとう、みなさんには圧倒的感謝です。
Raspberry Piについて
最近、ラズパイ2がでて性能が飛躍的に上がりましたが、自分は間違って古いモデルを買ってしまいました。
この古いモデルは、CPU1コア、メモリ512MBというスペックで、OpenCVのビルドに6時間、Pythonのビルドに2時間かかります。けっこう厳しいです。picameraでのキャプチャについても5fpsぐらいしか出ていなくて、だいぶカクカクです。
ラズパイを購入する際は、まちがって古いモデルを買わないようにご注意ください…
ラズパイのセットアップについても情報はネットにたくさんあるので、困ることはありませんでした。OSもRaspbianというDebian系のLinuxなのでDebianやUbuntuの情報を転用でき、情報がなくて困るということはまずないかなぁという気がしています。
もし使ってみたい方がいたら…
GitHubで検出器を含めてソースコードを公開していますので、自由に使っていただくことが可能です。
github.com
github.com
しかながら、インストール手順をまったく書けていません…
もし、使ってみたいという方がいましたら@hogesuke_1までメンションください。まじめにインストール手順を書こうと思います。
ところで
いま、さくらインターネットがRapidSSLを1年無料で使えるキャンペーンをやっています。イカショットもこのキャンペーンを利用してhttps化してみました。
さくらのサービスを使っている方は利用されてみてはいかがでしょうか(イカだけに)。
ラピッドSSL提供開始記念キャンペーン! | さくらインターネット
【さくらのクラウド】Minecraftサーバをコマンド操作なしで簡単構築
さくらのクラウドには、スタートアップスクリプトという機能があり、サーバ作成時に任意のスクリプトを実行することができます。Minecraftサーバを構築するスクリプトを指定すれば、簡単にコマンド操作なしでマルチユーザで遊べる環境を構築できます。
とはいうものの、さくらのクラウド公式ではMinecraftサーバ構築のスクリプトは提供されていません。今回、自分のメモを兼ねて、構築に必要な手順をスクリプトにまとめたのでそれを公開します。
これをコピペすれば、すぐに遊べる環境が構築できるはずです。
Minecraftサーバ構築スクリプト
#!/bin/bash # @sacloud-once # @sacloud-desc Minecraft Serverをセットアップします。 # @sacloud-desc (このスクリプトは、CentOS6.XもしくはScientific Linux6.Xでのみ動作します) # @sacloud-require-archive distro-centos distro-ver-6.* # @sacloud-require-archive distro-sl distro-ver-6.* #---------iptablesの設定---------# cat <<'EOT' > /etc/sysconfig/iptables *filter :INPUT DROP [0:0] :FORWARD DROP [0:0] :OUTPUT ACCEPT [0:0] :fail2ban-SSH - [0:0] -A INPUT -p tcp -m multiport --dports 22 -j fail2ban-SSH -A INPUT -p TCP -m state --state NEW ! --syn -j DROP -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT -A INPUT -p icmp -j ACCEPT -A INPUT -i lo -j ACCEPT -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT -A INPUT -p udp --sport 123 --dport 123 -j ACCEPT -A INPUT -p udp --sport 53 -j ACCEPT -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT -A INPUT -p tcp -m tcp --dport 25565 -j ACCEPT -A fail2ban-SSH -j RETURN COMMIT EOT service iptables restart #---------iptablesの設定終わり---------# #---------Javaのインストール---------# yum install -y java-1.8.0-openjdk #---------Javaのインストール終わり---------# #---------Minecraft Serverのインストール---------# wget -P ~/minecraft https://s3.amazonaws.com/Minecraft.Download/versions/1.8.7/minecraft_server.1.8.7.jar # 一度起動し、eula.txtファイルを生成させる java -Xms1024M -Xmx1024M -jar minecraft_server.1.8.7.jar nogui echo eula=true > ~/minecraft/eula.txt # upstartの設定ファイルを作成 cat <<'EOT' > /etc/init/minecraft.conf description "Minecraft server" chdir /root/minecraft exec java -Xms1024M -Xmx1024M -jar minecraft_server.1.8.7.jar nogui start on startup EOT # 起動 start minecraft #---------Minecraft Serverのインストール終わり---------#
注意点
Minecraftサーバを利用するにあたって、ライセンス利用規約に同意する必要があります。
スクリプト上ではこの利用規約に承認する処理が組み込まれているため、利用規約を確認し承認したうえで上記のスクリプトを使用するようにしてください。
https://account.mojang.com/documents/minecraft_eula
スタートアップスクリプトの登録方法
- コンパネ右上のユーザ名表示部のプルダウンをクリック
- プルダウンメニューの「設定」をクリック
- 左サイドのメニューからスクリプトを選択
- 画面上部の「+追加」ボタンをクリック
- 上記のスクリプトをすべてコピー&ペーストし作成
以上の操作によりスクリプトが追加可能です。
追加したスクリプトはサーバ作成画面->ディスク修正->配置するスタートアップスクリプト
で選択してください。
最小サーバスペック
CPU: 1コア
メモリ: 2GB
OS: CentOS 6.X, Scientific Linux6.X
Minecraftサーバの起動には最低1GBのメモリが必要となるため、1GBより大きいサイズのメモリが必要となります。
2万円クーポン
キャンペーンをやっているようなので、今なら無料で試せますよ。
こんにちは!さくらインターネットです(*´v`*)
先日実施しました「さくらのクラウド」クーポンの配布について、ご好評により7月末まで延長いたします。
是非、関心のある方はさくらのクラウドを使ってみてください♪
→続く pic.twitter.com/JTLPHrPUpn
— さくらインターネット_カスタマーサポート (@sakura_ope) 2015, 6月 1
ニコニコ動画の再生画面を少しだけシンプルにするChrome拡張を作ってみた
ニコニコ動画の再生画面、いろんな情報がひっきりなしに目に飛び込んできて動画に集中できない。 なので、これを少しシンプルにして集中できるようにしてみました。
before
after
なにが違うの?
- 動画上部のニュース表示部を削除
- 動画下部のオススメ動画一覧を削除
リンク
AngularJSを使ってタグベースのはてブビューアを作ってみた
はてブビューア Skimii
http://skimii.net
作ったもの
タグベースのはてブビューアを作りました。
ウォッチしたいキーワードをタグとして登録すると、ブックマークされたエントリをタグごとに一覧表示します。
作った理由
自分の興味対象にピンポイントでアクセスしたいという理由です。 はてなブックマーク公式では、かなり大きなくくりでのカテゴリ分けなので、ウォッチしたい対象にピンポイントでアクセスしにくいなぁと感じていました。
タグごとにエントリを表示できるので、対象を絞ることができノイズの少ない情報を得られるかと思います。
しかしながら…
インタレスト機能 - はてなブックマークヘルプ
すでに公式で同じものが提供されています。作成途中で気づいた…
ただ、公式には無い機能もあります。
- ブックマーク数の閾値設定
- すでに読んだエントリを表示しない設定
構成
- フロントエンド:AngularJS1.3、Bootstrap3
- バックエンド:Ruby + Sinatra
- サーバ:さくらVPS 1G
- DB:MySQL
- HTTPサーバ:Nginx
- APサーバ:Unicorn
AngularJSの感想
Angularの最初の印象は、便利すごい最高って感じで完全に浮かれてた。これがあれば何でも簡単に作れると感じた。ただ、どんなものでもそうだけど正しい使い方をしなければだんだんと辛みが積もってくる。
自分の場合、Angularの正しい使い方がよく分からなくて、だいぶ右往左往した。そして、少し前の反Angular的なノリに便乗して、自分ワルクナイ、Angularワルイみたいな言い訳をしていた。
ただ、辛みが頂点に達して、どうにか改善しようと調べ始めるとだいたい解決策が存在して、それを適用するとかなり改善されるというブレイクスルーを何度か経験した。やっぱり自分が悪かったんや…。
しかし、これはかなり初心者的な話しなので、Angularはやっぱり最強だってことじゃなくて、最初の取っ付きやすさに反してAngularもそれなりに習得大変だなという感想。
ただ、ほんとにミニマムなツールであれば、辛みに気づく前に完成するので、そういうところで使うと最強であるかもしれない。
Angularで2つ作ったので、次はAngular2の正式リリースまで冬眠しようと思う。
Sinatraの感想
シンプルでいい。前にRailsに取り組んだときは覚えること多くてかなり辛かった思い出があるので、このシンプルさは本当にうれしい。
ただ、規模が大きくなったり複数人で開発するとなった場合は、Railsのレールが大いに機能するのだろうと思う。その点、sinatraは大規模な開発は弱いかもしれない。 だけど、自分が趣味で作る規模であればSinatraで十分だし、情報も多く転がってるのでこれからもお世話になりそう。
次に向けて
このWebアプリ作るのに4ヶ月かかっていて、ちょっと時間かかりすぎだなぁって思ってる。2ヶ月目ぐらいで雑に動くものはできてるんだけど、そこから詰めるのにさらに2ヶ月かかっている。
次は、ミニマムで雑だけど使えるものを目指して短時間での開発を意識したい。Reactで何か作る。1ヶ月でリリースしたいなぁ。
参考
はてブAPIでwebサービスを作りたい全ての人に向けて書きました
作成にあたり参考にしました。ありがとうございます。
英語の勉強を始めて1ヶ月。その感想。
英語の勉強を初めて1ヶ月たった。自分としてはめずらしく勉強の習慣は定着できているので、そこは良かったかなと思う。だけど、ダメなところもいろいろ感じ始めている…。
適当に感想を書いていく。
前よりもさらに時間がかかっている
最近、学習に集中できなくなってきていて、ぜんぜん関係ないことが頭の中をぐるぐる回っている。前は新規2ページと前日復習2ページを45分ぐらいだったんだけど、今では1時間超える日が多い。これは、単純に英語の勉強に飽き始めてるのか、たまたま最近心配事が多くてそうなっているのか分からないけど、あまり良くない兆候だなぁといった感じ。
あ!これDuo3.0でやったところだ!
日常に出てくる日本語が勉強した英語と紐付いて、あ、これやったなという体験が少し出てきた。こういうのが積み重なっていくと学習も楽しくなりそう。
忘れるスピードが半端ない
次の日にはちゃんと思い出せなくなるのは分かっていたことだけど、一部は思い出せたり喉まででかかってたりした。しかし、1ヶ月も経つと跡形もなく忘れていて唖然とする。1ヶ月周期ぐらいで復習しないとすべてを忘れて学習した意味もなくしてしまうかもと感じたので、近いうちに最初から復習してみたいと思う。
もっと基礎知識を付けたい
例文を覚える際に構文の成り立ちがよく分からなかったり、冠詞のルールが分かんなかったりで色々と疑問が多い。それをちゃんと覚えたらもうちょっと例文覚えるのも楽になるかもなと思う。次の1ヶ月の課題はこのへんの知識をきちんと身に付けることかな。
とりあえず1ヶ月続いたけど、つぎの1ヶ月続けられるかけっこう不安。あんまり力入れすぎると苦しくなって放り出す気がするので、いい加減にやっていきたい。