こんにちは。TIG DXチーム 2の辻です。
先日開催された Go Conference 2019 Autumn に参加/登壇したので、その内容をレポートします。
The Gopher character is based on the Go mascot designed by Renée French.
きっかけ
マネージャーとの面談で、勉強会やカンファレンスで登壇して貢献していきたいと話していたところ Go Conference 2019 Autumn の CfP を募集を見かけたので応募しました。
アイデアの種
Go の goroutine や channel を用いることで並行処理をシンプルに書くことができます。基本的な計算をマルチスレッドで高速化する試みは、私が Qiita に書いた Golangを用いた様々な計算の高速化 の記事が詳しいです。
もちろん同じアルゴリズムを用いて Go 以外の言語でも実装できるのですが、Go でシンプルに実装でき、効率的に実行されることが確認できました。Qiita で 100 いいね程度の反響があり Go の並行処理をベースにしたネタで Go Conference に登壇したら面白いのではないか、と考えました。
私が競技プログラミング部にも所属していたのもあり HTTF といったマラソン形式のコンテストでよくもちいられる「焼きなまし法」を並行化したら面白いのではないかと考え、どのような並行化手法が存在するかサーベイしました。
サーベイする中で興味深かった論文が『温度並列シミュレーテッド・アニーリング法とその評価』 1です。従来のシミュレーテッドアニーリングは 1 プロセスで温度を少しずつ冷却して、良い結果を探索するアプローチです。本論文では、一定の温度を持つ複数のプロセスが並行してシミュレーテッドアニーリングをします。隣接する温度のプロセス間で、解を一定の条件で交換して最適な解を探索するアプローチです。基本的なアイデアはシンプルながら、最適化能力は劣化せず、並行化でき、処理時間の短縮に寄与します。
Go は並行処理が書きやすく、上記の研究のような並行化アプローチをシンプルに実装できます。Qiita に書いたような基本的な計算処理だけでなく、論文で示されているアルゴリズムを Go で実装して、なんなら Go のパッケージを用いて計算過程を可視化したら面白いと考えました。
準備
アイデアのブラッシュアップ
当社では TIG Friday というイベントが隔週で実施されています。当社の澁川のアイデアから生まれたイベントです。以下のようなコンセプトで運営されています。
外部の発表が怖い人の練習台とかになれるように。完璧な資料じゃなくて、発表のタネから目が出たぐらいの状態で書き出した箇条書きの資料とかベースで10分x2+質疑ぐらいでわいわいやりたい。準備を頑張らないのがコンセプト。
TIG Friday でどうですか? と声をかけていただき、社内で練習する機会をいただきました。準備を頑張らない、というコンセプトのイベントでしたが Go Conference の CfP に出すアイデアだったのでがっつり準備しました😋
アイデアを共有し、有識者からフィードバックをいただき改善できるので、非常によい機会だと感謝しています。
CfP
登壇のネタは決まったものの、 CfP は出したことがなかったので Go Conference への道は CfP の書き方を知ることからでした。
以下のサイトが特に参考になりました。
- Go Conference Tokyo 2019 Autumn
- 初めて海外カンファレンス登壇するためにやったこと
- Go Conference 2019 SpringのPaperCallを初めて使ってみた感想+α
- RubyKaigiのCFPへの応募例 #rubykaigi
発表準備
しばらくして CfP が採択されたことをメールで確認しました。Go Conference 2019 Autumn への登壇が決まりました。初めての登壇でしたので、持てる力を十分に発揮できるよう、登壇の素振りは数回は実施しました。伝える内容がクリアになっているかどうかや、発表時間に気をつけていました。
発表
当日の発表は Vuls にコントリビュートしている有名な方の裏番組だったので、人が集まるか心配していましたが、杞憂でした。来ていただいた方、ありがとうございます。
資料は Speaker Deck に公開されています。
発表後の質問タイムでは、「実際に業務でシミュレーテッドアニーリングが使われる機会があるのか?」といった質問がありました。私は業務で実装したことはないですが、先進的 AI プロジェクトをリードしている当社の Strategic AI Group というチームでは実際の業務で使われています。
その他にも参加者や登壇者の方から面白かったなどのコメントをいただき、貢献できてよかったです。
めちゃくちゃ面白いのでZehi! https://t.co/7urPamheSZ
— Shogo Tomioka (@tomiokasyogo) October 28, 2019
シミュレーテッドアニーリングで経路探索、ニューラルネットワークの実装など、GoでアルゴリズムやMLの話の多さがいいね。
— zreactor/yuriemon (@z_reactor) October 28, 2019
サーバー言語というイメージから脱却、データサイエンスにも適した言語のイメージが強まる
#gocon
rand.Randがglobal lock取るのはたしかにそりゃそうだなぁ #gocon #gocon_b
— かるぱねるら (@karupanerura) October 28, 2019
goの並列処理簡単にできる特徴は色んなところに応用できるんだな #GoCon
— tomoko.h (@_tomoko523) October 28, 2019
Golangで並行シミュレーテッドアニーリング
中で何をやっているかは何やらなのですが、自分が全くわかっていない領域の話を聞けるのは楽しいですね。巡回セールスマン問題が実際に画面に表示されながら解かれて行くのは面白かったです!完全に解を出せなくても、最適解に近づけていくというアプローチがあるのですね。
http://gsagawa.hatenablog.com/entry/2019/10/29/092018
緊急登壇
ところで、当社から急遽、澁川も登壇しています。急遽というのは、登壇者が現れなかったというハプニングがあり、その代打登壇です。もともとのセッションは Multi-cloud portability for Go applications というテーマでした。澁川は Go Cloud について解説されていました。後日澁川から聞いた話では
セッションの PaperCall では Go Cloud を紹介します、となっていたので、当日発表されるであったであろう内容をエスパーしてエミュレーションしました
ということでした😁
Go Cloud はクラウドポーダブルなアプリケーションを開発する上で非常に興味深いプロダクトです。Go Cloud は本ブログで連載中です。こちらも是非見ていただければと思います。
- Go Cloud#1 概要とBlobへの活用方法
- Go Cloud#2 Pub/Subの概要紹介
- Go Cloud#3 Go CloudのDocStoreを使う
- Go Cloud#4 URLを編集するパッケージ
- Go Cloud#5 AWSのローカルモック環境であるLocalStackを活用する
- Go Cloud#6 GCPのローカルエミュレータを活用する
- To be continued …
参加してみて
はじめてのカンファレンス登壇でしたが、社内メンバーの手厚いサポートもあり、充実した機会になりました。
運営のみなさまには、このような貴重なカンファレンスを主催していただいたことに感謝しております。当社も Tofu on Fire(名札)枠としてサポートさせていただきました📛
フューチャー株式会社でTofu on Fire(名札)スポンサーしてます。 #gocon pic.twitter.com/vv5XoBEBQP
— 渋川よしき (@shibu_jp) October 27, 2019
Gopher のみなさんからの応募もお待ちしております!