地震の観測のために作ったソフトのお話
この記事は防災アプリ開発 Advent Calendar 2023 - Adventar 23日目の記事です。
先日は孤独のコーヒーさんの防災に関わってきて約4年間 #AdventCalendar - Qiitaです!これからも仲良くさせてください((
DiscordBotということで私が制作を挫折した奴ですね、、、、、、今度また再チャレンジします!!
素晴らしい記事だったので是非見てください!!!!!
簡単な自己紹介
多分皆さんはお前誰だよ??って思ってると思います。
簡単に言うと地震の観測と地震に関するソフトを作っている者です。
アドベントカレンダーに関しては今年初めて書かせていただいてます(緊張)
あと今日は私の誕生日です!やったぜ!!!!
それと、この記事は2記事目です
1記事目はC# formで地震情報を表示する(C#未経験者向け) - tomorinのPC日記です。
ぜひ見てやってください!
地震の観測について
さて、地震の観測については、NishitokyoCam - YouTubeという者でやらせていただいています。実は1年くらい前からやってましたが、しっかりアカウントを作ってやってる観測はこのチャンネルです。
↑2023/5/11 4:16 最大震度:5強 千葉県南部での地震 西東京市 震度3 - YouTube
地震に関するソフト
地震に関するソフトについては今までで3つソフトを作りました。そのソフトをざーーっくり紹介していきたいと思います。
1つ目はtomoQuake
このソフトに関しては記事を書いてるので見てください(雑)
2つ目はEarthQuakeReplayBuffer
このソフトに関してはまた後々、、、
3つ目はEQWeather
このソフトは天気に関する情報と地震情報をリストで表示するソフトです。
これに関しては記事を書いてないので、簡潔に説明します。
↑スクショ
このようなソフトです。バグがあまりにも多すぎるので配布はしません((
説明が簡潔すぎる!!!
ちなみにですがC#を主に利用してソフトを作成しています!
今回の記事では、上記のEarthQuakeReplayBuffer(以下EQRBとします)について書いていきたいと思います、、、
そもそもEQRBってなんぞ?
はい。「おそらくEQRBって何だよ?」ってなってる人が大体だと思うので、ぱっと書きます。
EQRBとは、OBSのリプレイバッファ機能(ドラレコのやつみたいな、映像を遡って一定時間保存する機能)を使用して地震の観測をしている人向けのソフトで、地震情報を受信したら、リプレイバッファを保存させるというソフトです。
自分で言うのもアレですが、結構気に入ってます。
なんでEQRB作ったの?
まず、元々リプレイバッファの保存自体は、KuriharaCamさんが作成されたFileKCCというソフトを使用させていただいて、EEWを受信すると、カウントダウンが始まりリプレイバッファが保存されるという仕組みでやっていました。
←Falseないやん!!
フローチャートとか普段書かないからこれでいいのかわからないまま作ったのは内緒
少し作ろうか検討し始めた出来事
皆さんご存じの通り、svir.jpというそうしさんが経営していた無料でEEWを受信できるサービスがDMDATA.JP Service | DMDATA.JPに移行してしまったせいで学生の私はもちろん加入できるわけもなくNIEDの強震モニタからのEEWに頼っていました。
あ、svir.jpへのリクエストはマジで迷惑になるからやめようね!!
やべえ絶対に作んないととなった出来事
こちらも皆さん絶対知っているであろうNIEDの強震モニタからのEEW受信が規約の変更によりできなくなってしまったので、、、FileKCCが使えなくなってしまいました!
多分皆さんは常時録画すればええやん!と思うかもしれないですが、これと同じくらいのタイミングで、地震の観測をストレージの少ない別のPCで行うようになったので、常時の録画も厳しい状況でした(録画の編集がめんどくさいっていうのも少しあったのは秘密)
ここでひらめく私
しかし、ちょうどこの厳しいよ><!!と嘆いていたころ、tomoQuakeを制作していて、だいぶC#のことを理解してきていたので私は「地震情報でリプレイバッファを保存すればええやん!!!」とひらめき制作に取り掛かりました。
制作開始
上のなんやかんやがあって制作を開始しました。
FileKCCによるリプレイバッファの保存ができなくなったから地震情報から保存するソフト作ろうかなっていうか作るわ
— ともりん (@tomorin1223) 2023年7月23日
作るぞーと思いながらVisualStudioを開いて黙々と新しい地震情報を受信するとイベントを起こすところまではスムーズに作っていけました。そこまでは、、、
あれ?なかなかうまくいかないぞ?
はい。うまくいかなかったんです。タイマー処理が、、、
私はこの時バカなのか何なのかわからなかったのですが、カウントの数が入った変数を1秒ずつひいていって0になったら保存!としていたのですが、なんかよくわからずできませんでした。正直自分でもなんでできなかったのかわかってません。
そのまま「わかんないよ;;」といい開発を諦めていました、、、
しかし!?
しかし学校の帰り道(たしか)ふと思ったのです。
「あれ?カウントダウンの時間をカウントダウン開始の時間に足してそっから現在の時間とカウントダウンを足した時間をいい感じにすればええやん!!!」と。
思いついたときは(゚∀゚)キタコレ!!状態でしたね。
そして数日たちその方法を実装&組みなおしをしました。するととんとん拍子にプログラムができていきました。
EQRBのプログラムずっと迷ってたのがやっと解決した天才かもしれない褒めて
— ともりん (@tomorin1223) 2023年8月15日
そして完成へ
なんやかんやあってソフトが完成しました。ソフトの基本を作った後も、現在は震度で保存するかの条件を決められるようにしたりして、いい感じに仕上げました。
EQRB完成です!
— ともりん (@tomorin1223) 2023年9月9日
デバッガーになりたい人はお気軽にDMください!
↓紹介動画 pic.twitter.com/VcrZmJK3zb
最後に
ここまで記事を読んでくれてありがとうございます。
EQRBに関しての配布は、上にあるツイートに飛んでもらってDMなりリプなりしてもらえれば渡すと思うので、ぜひぜひお気軽にお願いします!!
おまけ:新しい地震情報を受信したらイベントを発生させている方法
このようなソフトを作るとき、地震情報を新しく受信したら何かを行うということをすると思うのですが、それをどうやっているのか?ということです。
私は、地震情報に付属してくる地震情報ID1と地震情報ID2を順番に取得し続けて、受信と同時にID1とID2が同じかを調べ、一致しなかったとき、イベントを発生させる、とい方法でやっています。もっといい方法があったらこっそりDMなどで教えてください((
遺言
記事の文章がおかしいのは初心者だからですっていう言い訳は1つ記事を出したので使えない、、、ただただ語彙力が無い!!
明日の記事
ちなみに明日はそうしさんの記事です。すげえ人すぎて震えてます...