RubyKaigi 2023に登壇してFusumaについて話した

RubyKaigi 2023

RubyKaigi2023で登壇してFusumaについて話した。

CFPを出したら通過してしまい、まだまだ先の話だと思っていたら、あっという間に当日が来てしまった。

資料づくりがままならないのに途中でGem入れたほうが面白いだろうなと思ってしまったのが良くなかった。 新しくGemをこしらえてきたのだけれど、ギリギリの発表10分前に2つリリースすることになるとは思ってもみなかった。 結果fusuma本体が落ちるバグ入りプラグインをリリースをしてしまい、その後すぐに修正した。余裕を持ったスケジュールが大事。

今でも自分がRubyKaigiに登壇するなんて思ってもいなかったし、なんならもう一週間経つけれど、あんまり実感がない。 https://rubykaigi.org/2023/schedule/#day1 で並んでる面々、みんな凄い人ばかりで、自分が並んでるのが違和感があるというか、まだそんな感じがする。

RubyKaigi is 祭

ランチブレイクの時にRubyKaigiって祭りだよねという話をしていた。 あの短い期間だけ、町がRubyistに包まれるあの熱狂的でカオスな状況、まさしく祭りだと思う。

好きなトークを聞いて、久々に会う友人・はじめましての人と話して、松本グルメ探訪し、夜はOfficial Party、Drinkup、After Party、会期中ずっとRubyの話してるのすごい楽しい。

トーク聞きに来てくれた友人の夫妻と久々に会ったらお子さんがめっちゃ大きくなってて謎に感動したり、 推しのk0kubunさんやペンさんと写真を撮ってホクホクしていたり、 初めてRubyKaigiに来たという若者見つけてバーに連れて行ったり、 特にDay 3は After Party🍺 => 居酒屋🍺 => ラーメン屋🍺 => コンビニ🍺 みたいな感じで朝までずっと飲んで話してた。

みんな体力持つなぁと思ってたんですが、多分この楽しい時間をこのRubyKaigi終わらせたくないんですよね。だからRubyKaigiの夜は長い。

ちなみに最初に参加したのはRubyKaigi 2019の福岡の時で、その時もめちゃくちゃ楽しかったけど、今回はもっと楽しめた気がする。Kaigi is back!

RubyKaigiを盛り上げてきてくださったスタッフの皆様、スポンサーしてくれている企業さんには頭が上がりません。本当にありがとうございます。

Fusumaについて発表した

FusumaはLinuxのタッチパッド向けのマルチタッチジェスチャのツール。gem install fusuma でジェスチャが効くようになる。 ネィティブでジェスチャ実装されてないLinuxディストロでもほとんどのケースでマルチタッチジェスチャが使えるようになる。

初めて作ったGemなのでそれなりに思い入れがあって、また長くメンテしてると色々リファクタリングしたくなって、その結果プラグインで拡張できるようになったりしたのでその仕組みを中心に話した感じ。

YouTubeにアーカイブがあがってました。

同時通訳

RubyKaigiは日 -> 英の同時通訳があって、自分の発表を英語に通訳してもらって日本語ネイティブじゃない方にもトークを聞いてもらえる。これめちゃくちゃすごい。

自分は通訳の方を入れて話すのは初めてだった。 当日になってギリギリまで資料を弄ってしまっていたので、事前に送った資料との差分が出ていてそのギャップを埋めるのにてんやわんやさせてしまいました。本当に申し訳ありません。

二人の通訳の方がセクション毎に交代して通訳を担当するのでお互いのパートで表現のニュアンスのズレがでないか調整をしていた。 技術通訳をされているプロの方々で、担当してくれた方はバッファやキューなどのデータ構造のことを認識されていて、その上でどの表現が適切か、発火はFireかTriggerか、みたいな細かいところまで質問していただけて、すごく新鮮な体験だった。

あと、通訳し終わる前にスライドが次に移動すると英語で聞いている人が理解しづらくなるので、話の区切りでは適宜間を持たせたほうが良いという話や、みなさんどうしても早口になるのでゆっくり落ち着いて話すようにというアドバイスをいただきました。 しかし、想定よりも若干時間が余ったのでかなりオタク特有の早口出てしまったと思います。すみません。

登壇資料

トークの中で話してた、ヨドバシに通ってMac触って挙動を確認してたのは本当で、それでエッジスワイプをプロトタイプのxSwipeに実装できた。 Macのトラックパッド上を2本指で右端からからスワイプすると通知センター開くやつで、右端指1本分くらいの領域を通過したあとその領域にもう1回連続でタッチが入り移動するとトリガされるやつ。 ただ、Synapticsではタッチパッド上の絶対位置が取れて同じような実装が出来るのだが、相対移動しか取れないLibinputだと端を取るのがちょっと難しくまだFusumaには移植できてない。

PluginとPipeline

Fusumaはジェスチャ認識のフローをパイプラインとしてイベントでやり取りするようになっており、その中の各タスクはプラグインとして拡張可能かつ差し替え可能になっている。 全てがプラグイン、Fluentdにかなり影響を受けている。

Image from Gyazo

後半にOne more thing的なノリで新しいプラグインを発表した。

ThumbSense

ThumbSenseはSony CSLの暦本先生の2003年の論文とその実装で、オリジナルはWindows向けのソフトウェア。 これをFusumaのPluginとして実装した。

Image from Gyazo

タッチパッドが追加の修飾キーになるようなイメージ。親指でタッチパッドに触れる間JやFのキーがクリックにリマップされる。 タッチを検知してキーボードレイヤの変更を依頼するfusuma-plugin-thumbsense と、外部プロセスから動的にレイヤ変更できるキーリマッパーのfusuma-plugin-remapの2つのGemで実現している。

Image from Gyazo

実は親指を使わなくても便利で、よく片手だけホームポジションに残してタッチパッド操作している。
それと、タッチ->Fを押しっぱなしでドラッグをすると、そのドラッグ中はタッチパッドから手が離れても問題ないように実装している。 そのおかげでこの間はタッチパッドを自由にスクロールしたりスワイプしたりできる!!

Image from Gyazo

つまり、このようにドラッグ中に別のワークスペースにスワイプして移動してドロップができる。 これまでのマウスやタッチパッドの制約を超えた操作ができるようになる。 ThumbSenseが出た当時はスワイプジェスチャは無かったので、これはかなり画期的だったと思う。 すごく便利だから、みんなLinuxにしてFusuma使ってみよう。

あとタップしてクリックする機能を使わなくなるので、これをオフにするとキーボード入力中にタッチパッド触って誤操作することが無くなって、めちゃくちゃ快適になる。 完全に副作用なのだけれど、タッチパッドの不満点を一気に解消できていて最高。

今後の展望

ThumbSenseは自分の中でかなり良い環境改善になった。 これからしばらくThumbSenseの使い勝手とキーリマッパーとしての拡張性を向上させていきたい。

LibinputのPalm Detectionとの兼ね合いが微妙なのでなんとかしたい気持ちもあるし、あとFusumaのinputプラグインはLibinputをFFI経由で使えるようにしたい、色々やりたいことがある。

RubyKaigiの後

しばらく余韻が抜けてなくて、いやー、楽しかったなと思い出している。 次のRubyKaigiは沖縄、めちゃくちゃ楽しみ。MINASWAN、また沖縄で会いましょう!

それと、RubyKaigi後お仕事の話を色々と頂けており嬉しい限りです。ありがとうございます。

[PR]法人としてRubyのお仕事お請けしております。よろしくおねがいします。:pray: