Upgrade to Pro — share decks privately, control downloads, hide ads and more …

mild-web-sap#14

 mild-web-sap#14

「授業用に簡易な心拍データ提供サーバを作った話」
ゆるWeb勉強会@札幌 OnLine #14

Hiroto YAMAKAWA

August 30, 2021
Tweet

More Decks by Hiroto YAMAKAWA

Other Decks in Programming

Transcript

  1. #ゆるWeb札幌 公立千歳科学技術大学 情報システム工学科 専任講師 R&D: Experimental Development of ICT Systems (ex:

    City-Bus Tacking System) Computer in Education, Programming and Programmer's Learning Communities: 6789:9;<=>=?=@=A;BC7DE7FGHIH 2
  2. #ゆるWeb札幌 ghij$]3N[4!"klhmXno(pqrs 5 学生が一つの教室に たくさんいると、 変動が大きくて みてても楽しい ☺ オンライン授業で 誰もいない教室に

    センサーおいても 変動がなくて たのしくない (ずっと700ppmのまま) 😰 Wio-Nodeで CO2センサーの APIを作って、 学生が叩く 学生の自宅で CO2センサーを 用意してもらうのは 現実的じゃない 💸
  3. #ゆるWeb札幌 £žš¤ž 8 OAuth2 Fitbitアプリ 私のFitbit 私のスマホ Bluetooth Wi-Fi/4G 在宅の学生

    (プログラミング初心者) Vanilla JS+C3.js 自作のデータ提供サーバー (Java/SpringBoot) HTTP/WebSocket 認証 1日の私 HTTP (Web-API) どんな活動してても 心拍数は 24h 変化のある データがとれる 心拍数提供 ここまでは Fitbit側が 勝手にやってくれる スケジューリングと キャッシュで 御行儀よく取得した い Fitbitサーバー
  4. #ゆるWeb札幌 LTなので、作ってる最中に個人的に思い通りにいった・いかなかった要点だけをさらっと紹介 ソースコードは https://github.com/gishi-yama/fitbit-api-proxy です。 (application.yaml の clientId, clientSecret, callbackURLを各自設定すれば動きます)

    紹介したい内容: 1. OAuth2の設定と接続には ScribeJava を使うと便利 2. JSONのデシリアライズにはJava 17 Records 使うと便利 3. データの更新スケジューリングと簡易のキャッシュはSpringBootがやっぱり便利 4. WebSocketにしようと思ったけどRESTでもよかった(反省) *+,-./+0Q§¨ 10
  5. #ゆるWeb札幌 Spring + OAuth2 だとSpring Security があげられるが、 慣れてないとOAuth2 プロパイダーにあわせて設定&テストするのは結構めんどう... ScribeJava

    (https://github.com/scribejava/scribejava)を使うと、 50種類ぐらいのプロパイダに簡単に接続できるらしく、良い感じだった。 Springを使ってない時や、Springでも統合認証する必要がなければおすすめかも? ©=ª:E«Q¬-„®¯$R;°±87¢¦²H³H;1´ž„µ¶ 12 Fitbit側で生成・登録された情報で手軽に使える
  6. #ゆるWeb札幌 Java 17 の Records を使うと、1行で Value Object 用のクラスを用意できる ⇒

    クラスの数は変わらないが、クラスのために必要な行数は格段に減った ²°©ÁQ*•€XYÃ$R²H³H;¿Ä;Ŧ±98ÆD;´ž„µ¶ 17
  7. #ゆるWeb札幌 これで私の心拍数が刻々と配信されるぜー! と思ったらそうでもなかった 1. Fitbitアプリが起動していないと、リアルタイムに心拍数を取得しない @¦¢°9±Ó¦:$š¤ž„Ô34rÕÅÖ°×ZP¤Ø34kÙÚs 21 Bluetooth Fitbitアプリ Bluetooth通信をリアルタイムに行うためには、 Fitbitアプリが(バックグラウンドでも)動いている

    ことが必要 ⇒ スワイプの手癖でアプリを終了してしまう スマホ側の オートメーションで とにかく常時起動の きっかけを作る (頻繁に確認されるので  かなり煩わしい) スマホアプリが 起動していないと、 Fitbit側に蓄積される だけで、アプリに 送信されない
  8. #ゆるWeb札幌 これで私の心拍数が刻々と配信されるぜー! と思ったらそうでもなかった 2. そもそも、Fitbitアプリ自体から、Fitbitサーバーまでの反映が15分-20分ごとだった @¦¢°9±Ó¦:$š¤ž„Ô34rÕÅÖ°×ZP¤Ø34kÙÚs 22 "...when an active Bluetooth

    connection is available, Fitbit's apps will show the summary values displayed on the device. Often, this data has not yet synced with Fitbit's servers." Fitbitアプリ 私のスマホ Wi-Fi/4G Fitbitサーバー 15-20分に一回同期 WebSocketの 意味なし --- https://dev.fitbit.com/build/reference/web-api/devices/ "Fitbit devices automatically sync every 15–20 minutes. The data is then processed server side and available via the Fitbit API. There is no live data exposed via Bluetooth." --- https://community.fitbit.com/t5/Web-API-Development/ Fitbit-Charge-HR-realtime-data/m-p/697877#M1451 作る前に下調べはしっかりしよう