Ruby

Linuxでマルチタッチのジェスチャにショートカットを割り当てるFusumaというGemを作った

linuxのマルチタッチのジェスチャを認識してショートカットを発火するプログラムを作った。 https://github.com/iberianpig/fusuma Fusumaという名前でRubyGemsに公開した。 Linux上のタッチパッドでのジェスチャをキーイベントにマッピングし、スワイプを検知したらワークスペースを移動させるなどの処理を可能にする。 ちなみにsyncapticsドライバ向けのPerlでの先行実装のxSwipe を過去に作っていて、こちらを元にRubyでlibinputドライバ向けに書き直している。 ワークスペースの切り替えする横スワイプが襖をガーってスライドさせる動作と似てるところが由来。 仕組み $ libinput-debug-events libinputをデバッグするコマンドを叩き、画面をスワイプすると下記のようなログが見える event10 GESTURE_SWIPE_BEGIN +4.28s 3 event10 GESTURE_SWIPE_UPDATE +4.28s 3 6.47/ 1.35 (13.12/ 2.73 unaccelerated) event10 GESTURE_SWIPE_UPDATE +4.29s 3 7.52/ 1.02 (16.13/ 2.19 unaccelerated) event10 GESTURE_SWIPE_UPDATE +4.30s 3 11.73/ 0.36 (18.04/ 0.55 unaccelerated) event10 GESTURE_SWIPE_UPDATE +4.32s 3 12.90/-0.36 (19.41/-0.55 unaccelerated) event10 GESTURE_SWIPE_UPDATE +4.33s 3 16.09/-1.32 (23.24/-1.91 unaccelerated) event10 GESTURE_SWIPE_UPDATE +4.35s 3 17.56/-1.97 (24.33/-2.73 unaccelerated) event10 GESTURE_SWIPE_UPDATE +4.36s 3 19.34/-2.24 (25.97/-3.01 unaccelerated)

Amazon Dash Buttonで出社する

この記事は出社芸アドベントカレンダーの18日目の記事です。 今日のアドベントカレンダーに登録した。 現在0:31。あと23時間半くらいある! 余裕だね! ちなみに夜開いてる喫茶店がなかったのでこの記事はHUBで書いてる。すごくうるさい。 出社時間をSlackに報告する 弊社は出社自由。リモートもOKで出社も自由。 (自分はリモートすると孤独で寂しかったりするので、旅行中以外は割と出社してる) ※詳細は出社芸アドベントカレンダー1日目出社自由の会社を作ったよ | rake enjoyをご参照。 でもルールがあって、何時ごろ出社するか(/どこで仕事するか)をSlackのチャンネルで報告する義務がある。 リモートが多い時はこんな感じになる。 自由だ…。 ◯◯時頃出社しますと報告するのが面倒になってきた 出社時刻をSlackでつぶやくだけで遅れたりすることで怒られるなどは全く無い。 この会社に入ってアラームを設定することが無くなった。 起きたら何時に出社するか決めてSlackで報告すればいい。 しかし、毎日、何時になるかといちいち考えたりするのすら面倒になってくる。 プログラマは怠惰な生き物。 あのラリー・ウォールも怠惰(Laziness)がプログラマの美徳だと名言している。 自動化しよう 朝起きて時計を確認、何時ごろに出社するか決めて、Slackアプリを開き、報告する。 このフローを自動化する。なるべく楽に。 作戦としては今流行りのAmazon Dash Buttonを使う。 押したらSlackへ何時に行くかつぶやく。 起きたらAmazon Dash Buttonを押すだけ。俺がデリバリーされる。 準備するもの Amazon Dash Button これはAmazonで買える。500円。安い。 対象商品の初回購入時が500円割引されるので実質タダ。 なお、ものによっては到着に時間がかかるものもあるので注意。 とりあえず翌日届くレノアにした。 ローカルサーバ Amazon Dash Buttonはローカルネットワークに接続し、ボタンを押すとローカルネットワーク上にブロードキャストされる。 そのブロードキャストがAmazon Dash Buttonから来たかをMacアドレスで判断する。そうであれば任意のアクションを実行するだけ。 ボタンが押された時に任意のアクションをキャッチするのにローカルネットワーク上で動作する常時稼働サーバーが必要。 みんなのお家に眠っているラズベリーパイを使おう。 エンドポイント 任意のアクションをキャッチする場所が必要。 Slackのエンドポイントを直接作っても良いが、拡張性をもたせるため、IFTTTでエンドポイントを作る。 IFTTTのエンドポイントさえあれば、GmailでもGoogleカレンダーでも何にでも連携出来る。 実装する 処理は大きく見ると下記の様な流れになる Amazon Dash Button ---> LocalServer ---> IFTTT ---> Slack IFTTTとSlackを連携する 前述したとおり、Slackとの連携部分を作る。 無料のクラウドサービスIFTTTで作る。 もっと自由にやりたいならAWS Lambdaを使おう。 エンドポイントを作る