スポーツジムのシャワールームから学ぶ非同期プログラミング

2023年7月26日

プログラミング

eyecatch 毎日、午前中にスポーツジムへ通っていると、大体同じ顔ぶれの人達がいます。 そして、平日の午前中からスポーツジムへ通っている人達って一体どんな職業の人なんだろう?って不思議に感じてしまいました。 自分のように仕事の合間に2時間ほど抜けてサウナまで入ってくるような仕事をしているとは思えないけど、恐らく自分も同じように不思議に思われているに違いない。

シャワールームでの気付き

そのスポーツジムには、シャワールームがあり、銭湯や温泉などにある時間止め系のカラン方式です。 こんなヤツです。 PUSHすると一定時間で水が止まる方式なんですが、その時間がなんと5秒程度なんですよ。 節水したいのもわかるけど、シャワールームにある蛇口としては、片手で常にPUSHし続けていないとまともに体が洗い流せません。 シャワールームで片手が奪われた状態になると、もはや何をするにも非常に難しい状態になるんですよ。 でも、ある時、5秒経たずに水が止まることが度々あり、この蛇口の仕様の詳細が見えてきました。

蛇口の仕様

最初になんとなく想像していたのは、PUSHを押したタイミングで5秒間(ぐらい)水を出し続けるというのはあっていると思います。 でも、5秒経つ前に、継続する意味で水が出ている状態でもう一回PUSHを押した場合、その時点から5秒追加されるか、前回の5秒+5秒の時間、水が出続けると考えがちですが、 その時は、2秒ぐらいで水が停止しました。 想定していたピンク色の部分が無くなっていたんですね。 ラスト1秒ぐらいでPUSHすると、そこから5秒程度継続されたので、このデバッグから次のような仕様であると考えられます。
・PUSHボタンを押すと、5秒間放水スタートする。 ・途中でPUSHボタンを押した場合、ラスト1秒以内であれば、以前の5秒をリセットして、そこから5秒放水する。 ・途中でPUSHボタンを押した場合、ラスト1秒よりも手前であれば、無視する。
おいおい、無視するなよ、と思いました。このif処理いらんやろ! ※あくまで、自分の体感で計測した感覚値での推測です。

ユーザーインターフェイスに活用

上記水道のイベント仕様を、javascriptなどの非同期イベントなどで最近プログラミングした事を思い出しました。 ゲームのキー操作によるコントロールのときのプログラムです。 次のようなプログラムをサンプルとして作ってみました。 <meta charset='utf-8'> <button id='push'>PUSH</button> <input type='text' name='time'> <script> let global_push_count = 0 elm_button().addEventListener('click' , (()=>{ global_push_count++ view_time(+new Date() , global_push_count) })) function view_time(time_0 , push_count){ if(global_push_count !== push_count){return} const t = ((+ new Date()) - time_0) / 1000 if(t >= 5){ elm_time().value = '5.000' setTimeout((()=>alert('5秒経ったよ!')),0) } else{ elm_time().value = t requestAnimationFrame((()=>{view_time(time_0 , push_count)})) } } function elm_button(){ return document.getElementById('push') } function elm_time(){ return document.querySelector(`input[name='time']`) } </script> PUSHボタンをクリックするとカウントが0からスタートして、5秒後にアラートが表示されます。 カウント中にPUShボタンを押すと、0秒にリセットされて、その5秒後にアラートが表示されます。 以前の処理は無視するようにしました。 ちなみに、requestAnimationFrameでの非同期処理を行っているので、5秒ぴったりになるのが難しいので、時間が過ぎたら、その時点で、5秒ピッタリの値を強制的に埋め込んでいます。

デモ

あとがき

シンプルなフローですが、実際にプログラミングしてみると、ほんのちょっと思考しないと、思ったとおりになりませんね。 とりあえず、スポーツジムのシャワールームには、このプログラミングは適用されませんが、自分が作るプログラムのフローでは活かせそうです。 スポーツジムでのちょっとした気付きでした。

人気の投稿

このブログを検索

ごあいさつ

このWebサイトは、独自思考で我が道を行くユゲタの少し尖った思考のTechブログです。 毎日興味がどんどん切り替わるので、テーマはマルチになっています。 もしかしたらアイデアに困っている人の助けになるかもしれません。

ブログ アーカイブ