Giter VIP home page Giter VIP logo

eqmonitor's People

Contributors

dependabot[bot] avatar github-actions[bot] avatar restyled-commits avatar restyled-io[bot] avatar siketyan avatar yumnumm avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

eqmonitor's Issues

プライバシーポリシーの作成

現状

  • 利用規約内にプライバシーポリシーを参照と記述があるが、プライバシーがない

対応

  • プライバシーポリシーの作成
  • アプリ側表示対応

地震情報通知/表示の高速化

背景

サーバ「地震情報来たぞ! FCMで送信するで!」
[1秒ほどの遅延]
スマホ「お、FCMからペイロード届いたで! 通知ほい!」
ワイ「他の地震ソフトウェアの方が早く表示できているな…」
ワイ「せめてアプリ起動中だけでも、情報の表示を早くしたいな…」

要件(仮)

  • サーバがペイロードを送信(準備完了)してから500ms以内にユーザがその情報を確認可能
  • アプリ起動中の通信(強震モニタを除く)は100KB/min以下

  • HTTP/S経由で自作APIを0.5sec間隔くらいで叩きまくる
    • 通信量がかさむのと、サーバに負荷がかかる
    • Cloudflare等々のCacheは活用できなさそう(CloudflareのAPIでキャッシュクリアをしてから、伝播するまでの時間を考えると即時性がなくなる)
    • 配信対象のペイロードの更新時刻もしくはHash値のみをGETし、変化した時にペイロード本体をGETする?
  • WebSocket経由でサーバと接続しBroadcastする
    • Node.jsでWebSocketサーバを建てる ←同時接続数がどのくらいまで行けるのかは要検証。攻撃に対する防御は要調査
  • Firebase In-App Messagingを使う
    実際にどんなものなのか、遅延はどのくらいなのか等々要調査

用語

  • FCM: Firebase Cloud Messaging
  • 地震情報: 緊急地震速報やDMDATAから配信される震度震源情報などを指す

Sentryでクラッシュ監視

クラッシュログの共有許可ダイアログ入れたほうがいいかもなぁ〜

というか入れないとな

TTS(Text-to-Speech)の設定

現状

アプリ「地震やで! TTSくん頼んだぞい!」
TTS「き ん き ゅ う じ し ん そ く ほ う い ば ら き け ん な ん ぶ で じ し ん ………」
ワイ「読み上げ遅いねん! 読み上げてる間に地震来ちゃうわ! しかもクソデカボイス! 耐えられん!」

実装したい機能

  • TTSの有効/無効
  • TTSの読み上げ音量調節
  • TTSの読み上げ速度調節
  • アプリの状況で指定(Foreground / Background)
  • デバイスのマナーモードの有無で読み上げるかどうかの条件指定

観測点のリフレッシュ改善

観測点の表示更新を1000msごとに行う実装にしている
Obx(() => someWidget());
にして動的に更新するようにする

通知条件の設定

現状

アプリ「能登半島付近で予想最大震度4の地震やで〜 通知送るぞい!!」
ワイ「能登半島またか…Twitter見てみよっと…」←どんな地震の通知でも欲しい人
ユーザ1「いや… 今北海道にいるのに能登半島の地震情報どうでもええねん…」 ←この地震の通知全然必要なかった人
ユーザ2「あら、お母さん大丈夫かな… せっかくだし電話してみよう…」 ←この地震の通知が役に立った人
通知したい地域と する必要がない地域を自分で選べるようにしたい。 任意の地域で震度XX以上〜 というのも欲しい。

解決策

  • ユーザに事前に各地域の(予想)最大震度条件を指定してもらう
    • EEW予報の各地域の予想最大震度(1次細分化地域)
    • VXSE5xの各地域の最大震度(1次細分化地域)
      のうち任意の電文で通知条件を満たした場合には、当該電文のEventIDを記録し、以後同じEventIDの電文が飛んできたら、条件の再評価はせずに通知する。

→ FCM PayloadにMap<JmaIntensity, List>のデータを乗っける。(Listは、一次細分化地域コード)
この部分はデータ量が大きくなる可能性が十分にあるので gzip.encode(json)し、base64.encode(data)する。

利用規約改正

現状

テンプレートを改変し、利用規約として運用しているが、必要ない部分が多い

対応

  • テンプレートをベースに利用規約作り直す。

オフライン時例外処理

現状

オフライン時にエラー表示がなく、ユーザが気が付きにくい

対応

  • connectivity_plusパッケージの導入
  • 接続状況を監視するStateNotifierProviderを作成
  • SnackBarでエラー表示できるようにする(BuildContextに対してextension作成?)

利用規約とLICENSEが矛盾している

LICENSEはMIT/X11ライセンスとなっており、改変・再配布などが認められていますが
利用規約では

7. 禁止行為

  • 本アプリを逆アセンブル、逆コンパイル、リバースエンジニアリングする行為、及び本アプリのソースコードを解析しようと試みる行為
  • 本アプリにコードを注入する行為
  • 本アプリを複製、送信、譲渡、貸与または改変する行為

となっていて、改変・再配布・ソースコードの参照などができなくなっています(かつOSSではなくなっています)

ロードマップ

通知関連

  • 通知条件(任意に地域で/選んだ地域で、選んだ震度を超えた場合に通知)
    • FCMペイロードに細分化地域とその情報を添付する

設定関連

  • 設定関連を提供するインターフェースの作成
    • DB/KVSの選択
    • 初期化をいつ行うのか
  • #91
    • 声の高さ/速さ

マップ関連

  • #56
    • syncfusion_flutter_mapsライブラリからCustomPainterを用いた低レベルな描画へ変更
  • リアルタイム震度が有感レベルまで達した時に、震度アイコンを表示するのかしないのかの設定
  • 地震検知アルゴリズムの検討/開発
    • 単位時間あたりのリアルタイム震度の変化量を各細分化地域ごとに見てあげて一定値を超えた場合に通知?
  • 地震情報表示UIの改善
    • スマホという小さい画面でどれだけ重要度の低い情報を絞って完結に表示できるかが勝負(な気がする)
    • 詳細表示ページは必要。(表示中に続報が来た場合にどうするのか)
  • 海外のマップ追加

地震履歴関連

  • PostgREST経由で地震履歴を取得するようにする
    • ローカルDB(isar?)にキャッシュ?

その他

  • デバイスの加速度センサーの値も表示できるようにする
  • #55
  • #53 #54

VXSE53表示バグ改善

  • マグニチュードがNullのときにうまく表示されない
  • M0.0表示になってしまう
  • APIの型定義(OpenAPI DOC使おうかな)
  • PostgreSQLのテーブル構造改善

バックグラウンド時にもHTTPリクエストが発生する

バックグラウンドにいるときは1秒おきのFetch(強震モニタの画像)をFetchしないようにする。
(バッテリー/データ容量の関係)

オプションでForground Taskでゴニョゴニョやって即時通知っていうのもありかもしれないな…

アップデータの実装

新たなReleaseが出たときに案内する
https://twitter.com/YumNumm/status/1515635512672804864?t=Zn0y-caimWn3FIKNE3wEng&s=19

スプラッシュ画面の消去

現状

現在、スプラッシュ画面を表示しているが横画面だと正常に表示されない上 GIFなので、もっさりしている。

対応

Flutter側のスプラッシュ画面を消去し、ネイティブスプラッシュのみにする。

Widgetの自動更新

[手法]

  • Kotlinのネイティブ実装でAPIを定期的に引っ張ってきて処理する
  • FlutterのWorkmanager経由で定期的に引っ張ってきて処理する

マップレンダリングエンジンの変更

現状

  • syncfusion_flutter_mapsを利用しているが、GeoJSONの描画に多くのCPU時間が必要
  • ズーム/パン時に60fps達成できておらず、カクカクしている
  • 特定の地物のみ塗りつぶし 等ができない。すなわち、震度分布図や緊急地震速報の予想震度を表示したり、津波予報が発表された際の可視化が非常に面倒。
  • 緊急地震速報発生時に、P,S波到達予想円を描画できない。(CustomPainterを利用する案を検討していたが、実装が難しすぎる。)

対応

  • マップレンダリングエンジンの変更flutter_map
  • 日本地図のソース用意(GeoJSON->PBF)
  • 検証 マップのズーム/パン時のFPS値を確認する(目標: 自端末で45fps以上)
  • マップの塗りつぶし状態を変更できるようにする

iOS向けにビルドすると、pod installでコケる

flutter build iosflutter build ipaをするとawesome_notifications周りが原因でpod installが止まってしまいます。

こちら rafaelsetragni/awesome_notifications#232 に書いてあるような修正をすると、pod installを正常に実行できます。
具体的には、ios/podfileの一部を

platform :ios, '10.0'

に、ios/Flutter/AppFrameworkInfo.plistの一部を

<key>MinimumOSVersion</key>
<string>10.0</string>

に変更することでpod installが正常に実行できます。

通知バナーをタップした際に詳細を表示できるように

DmDataからの通知をタップしたときに、その通知の元となった伝聞を取得し、適切な形式で表示できるようにしたい。

  • FCMのData Payloadに電文を乗っける
    ↑通知時に発生するデータ通信量が大きくなってしまうのに加えて、gzip圧縮したとしても5KiBの制限を超えてしまう可能性があるため却下
    − Data Payloadに元となったデータへのURLを掲載する。
    ↑CloudFlareのキャッシュをかけても良い(毎回でURL変えれば良い)ので現実的。

通知地域の登録

EEW通知を受け取ったときに、通知するかどうかの条件分岐機能として 事前に登録した地域がEEWの対象かどうかを追加する。

現時点では、svir.jpのJSON内に各地域の予想震度が含まれているため、FCMにこのデータを圧縮して一緒に飛ばせばできそう。
Screenshot_20220419-215516_Termius

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.