Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

20190312 Visualization System in Rust

256 views

Published on

Visualization System in Rust

Published in: Software
  • Be the first to comment

  • Be the first to like this

20190312 Visualization System in Rust

  1. 1. Shinjuku.rs #3 Visualization System in Rust - - - Rustで作る可視化サーバの紹介 - - - Author: Toshihiro YAMAGUCHI Date: 2019-03-12
  2. 2. ⾃⼰紹介 ⼭⼝ 聖弘 (やまぐち としひろ) Twitter: @toshihiro_yama 興味のあること 機械学習、データマイニング セキュリティ技術 OpenGLによる3D CG (今⽇はこちらの話) 最近、Happy Hacking Keyboardの⼆⼑流を始めました。 Shinjuku.rs #3 :: Visualization System in Rust 2
  3. 3. 可視化システムって何ですか︖ CTFという、セキュリティ技術のイベントをご存知でしょうか︖ そこでは、イベントの可視化システムが活躍しています。 画像引⽤: 左上から反時計回りに、Nirvana改、Etnoscope、Amaterasu零、Trend Micro CTF 可視化サーバ Shinjuku.rs #3 :: Visualization System in Rust 3
  4. 4. 可視化システムの役割 CTFの競技状況を⾒える化する 理由︓競技の状況がわからないから ⾒える化する例 各チームの得点・ランキング 各チームが解けた問題を表⽰ (Nice to Have) 各チームが出しているネットワークパケットを表⽰ 問題がどこまで解けたのか表⽰ 問題が解けると出現する、カッコいいエフェクト etc, etc, etc Shinjuku.rs #3 :: Visualization System in Rust 4
  5. 5. 可視化システムにRustを使うと得られる恩恵 処理速度が速い 60 fpsを維持するための⾼速な処理が可能。 ガベージコレクションがない GCによる画⾯のカクツキが起きない。 クロスプラットフォームで動作するアプリが作りやすい 開発はLinux、本番はWindowsという環境でも、Rustのコ ンパイラでどちらでも動作可能なアプリを作成可能。 さらにSDL2 + OpenGLは多くの環境で動作可能。 新規ライブラリの導⼊が楽 Crateのおかげで導⼊が簡単。 たとえクロスプラットフォームな開発環境でも、多くの ライブラリが両⽅の環境で動いてくれる。 Shinjuku.rs #3 :: Visualization System in Rust 5
  6. 6. OpenGLでGUIを作るのに便利な「Dear ImGui」はおススメ 「imgui-sdl2」Crateで導⼊も簡単。 Shinjuku.rs #3 :: Visualization System in Rust 6
  7. 7. 実装するのに苦労したこと Shinjuku.rs #3 :: Visualization System in Rust 7
  8. 8. C++で作ってたときの話 よくあるOpenGLによる描画システム 次のタイミングで3Dオブジェクトがどこにいるべきかを計算 するスレッドと、描画スレッドが交互に動作。 Shinjuku.rs #3 :: Visualization System in Rust 8
  9. 9. C++で作ってたときの話 外部コマンドを受け付けるスレッドも追加 外部コマンド受信⽤にサーバ⽤スレッドが登場。 イベント処理⽤スレッドも登場。 Shinjuku.rs #3 :: Visualization System in Rust 9
  10. 10. Rustでこれを実装しようとすると Arc<Mutex<*>>地獄になる。 様々なものをArc<Mutex<*>>しないと、計算スレッドと 描画スレッドの間を⾏き来できない。 終いにはArc<Mutex<Vec<Arc<Mutec<*>>>>>とか登場 する。 (括弧の数が合わなくて数えたりもする。) もうArc<Mutex<*>>を⾒たくなくなる。 Shinjuku.rs #3 :: Visualization System in Rust 10
  11. 11. Slackのコミュニティでいただいた⾔葉で⽬から鱗 Arc-Mutex関連問題の最中にいただいた⾔葉 ただ、正直なところMutexに頼らないよう構造を変えるのが ベストだと思います アドバイスありがとうございました。 ⼀⼈のRustaceanが救われました。 Shinjuku.rs #3 :: Visualization System in Rust 11
  12. 12. 現在のフロー いったんスレッドやめました。 私のレベルが上がったら再チャレンジします。 HTTPサーバは別スレッドで動作するが、やりとりするデータ がイベントデータだけなので影響が少ない。 Shinjuku.rs #3 :: Visualization System in Rust 12
  13. 13. 教訓 マルチスレッドな環境でもデータを便利に扱えるような、 そんな抽象的なライブラリを作れる⼈ならともかく、 初⼼者にスレッドが乱⽴するプログラムは⻤⾨︕ 最初は、可能な限りスレッドがいらない構造にするのもアリ。 Shinjuku.rs #3 :: Visualization System in Rust 13
  14. 14. Thank You! Shinjuku.rs #3 :: Visualization System in Rust 14

×