shiny fluid example


[tag:]

昨日shinyに追加されたfluid dynamicsのexampleが とてもgolangらしくてよい。

・main()はイベント処理に集中、図の作成は別のgoroutineで行う ・Crosses(StageVisible)で表示中かどうかの判定 ・マウスイベントや図の情報は共有データとし、MutexでLock/Unlock ・表示中はtickerで60Hz毎にsimulate()を回す  (1/60秒毎に発火するchannelを使用) ・非表示中は短絡させ、simulateを行わないようにする ・図ができたらchannel経由でイベントを送る  (マウスやキーボードのイベントと同列で他のgoroutineがイベントを発火できる)

特に最後のポイントは結構肝だと思っている。
これまでいくつかのGUIライブラリを触ってきたが、 golangでchannel経由のイベント処理をちゃんと実装して いたものはなく、ほとんどがコールバックだった。

stでもchannelでイベント処理の振り分けを行っているが、 こういうことができると全体の見通しがよくなってすてきだ。