2 ポイント 投稿者 GN⁺ 2023-12-25 | 1件のコメント | WhatsAppで共有
  • Endurainは、ユーザーがデータとホスティング環境を自ら管理できるよう設計されたセルフホスト型フィットネストラッキングサービスで、Stravaに似ているが、プライバシー保護とカスタマイズに重点を置いている
  • フロントエンドは Vue.js、バックエンドは Python FastAPI ベースで、PostgreSQL、Jaeger、Alembic、SQLAlchemy などを用いてアクティビティデータ管理と基本的なトラッキングを構成している
  • Strava と Garmin Connect との連携をサポートし、.gpx.tcx.fit ファイルによるアクティビティの手動アップロードも可能
  • Docker イメージと docker-compose.yml.example のサンプルが提供されており、設定は環境変数で処理することで、デプロイとカスタマイズを容易にしている
  • GitHub リポジトリは読み取り専用ミラーで、プロジェクト活動は Codeberg で行われており、現在は新機能よりも基盤強化に注力する 一時的な機能凍結 状態にある

Endurainが提供する機能

  • Endurainはセルフホスト型フィットネストラッキングサービスで、ユーザーがデータとホスティング環境を完全に制御することを目指している
  • Strava に似たサービスだが、重点は プライバシー保護 とカスタマイズにある
  • アクティビティデータは、外部サービス連携またはファイルアップロード方式で取り込める
    • Strava 連携をサポート
    • Garmin Connect 連携をサポート
    • .gpx.tcx.fit ファイルの手動アップロードをサポート

技術構成

  • フロントエンドは Vue.js、Notivue、Bootstrap CSS で構成されている
  • バックエンドは Python FastAPI を中心に構成されている
    • Alembic
    • SQLAlchemy
    • Apprise
    • Strava 連携用 stravalib
    • Garmin Connect 連携用 python-garminconnect
    • .gpx 取り込み用 gpxpy
    • .tcx 取り込み用 tcxreader
    • .fit 取り込み用 fitdecode
  • データベースには PostgreSQL を使用
  • 基本的なトラッキングとモニタリングには Jaeger が使われている

デプロイと設定

  • Endurain のデプロイ向けに Docker イメージ が提供されている
  • リポジトリには docker-compose.yml.example ファイルがあり、デプロイ例を確認できる
  • 設定は 環境変数 を通じて処理され、柔軟性とカスタマイズのしやすさを提供する
  • 詳細は Endurain documentation で確認できる

デモ環境

  • インストールなしで Endurain を体験できるデモが提供されている
  • デモ環境は Europe/Lisbon タイムゾーン基準で毎日深夜0時にリセットされる
  • デモには重要なデータを保存しないこと

プロジェクト運営状況とライセンス

  • GitHub リポジトリは 読み取り専用ミラー であり、Issue・プルリクエスト・プロジェクト活動は Codeberg で管理されている
  • Endurain は 一時的な機能凍結 状態にある
  • 多言語対応があり、Codeberg Translate を通じて翻訳に貢献できる
  • ライセンスは AGPL-3.0
  • Endurain® は João Vitória Silva の商標
    • 個人、教育、研究、コミュニティ目的の非商用セルフホスト、および名称・ロゴの使用は許可される
    • 有料ホスティング、製品、サービス提供のように Endurain の名称やロゴを商用利用することは、事前の書面による許可なしには認められない

1件のコメント

 
GN⁺ 2023-12-25
Hacker Newsのコメント
  • intervals.icu(https://intervals.icu/) に少しずつ移行している
    寄付ベースなので、ある程度「オープンソース」に近く、Stravaよりずっと良いと感じる

    • 「寄付ベースだからオープンソースに近い」とは、いったいどういう意味なのか分からない
    • サイト上で ソースコードへのリンク を見つけられないのだが、どこを見ればいいのか気になる
    • それは少し違う。Stravaは ソーシャルプラットフォーム に近く、intervals.icuはトレーニングと進捗管理のプラットフォームに近い
      Stravaを使う理由は、友人や家族がモチベーションを与えてくれるからであって、より大きなパワー値や心拍数を得たいからではない
  • Webアプリとしては欠けている機能が1つあり、スマートウォッチが記録したアクティビティの自動追跡 は難しいように見える
    回避策としては、いったんStravaに自動インポートし、その後StravaをEndurainに接続する形になりそう

    • WebアプリでもGarminスマートウォッチのアクティビティを自動で取り込める
      GarminはFITアクティビティを取り込むためのConnect向けRESTインターフェースを提供している
      https://developer.garmin.com/gc-developer-program/activity-a...
    • スマートウォッチがStravaへ直接アクティビティを上げるわけではないのでは? 通常はGarmin Connectのようなメーカーのクラウドサービスに接続され、Stravaがそちらと API連携 する構造だと思う
      だから欠けているのは、Endurainと主要メーカーのプラットフォームとの連携だろう。実際に欠けているかどうかはコードを確認していない
    • 以前使ったときは、Suuntoアプリで ユーザー定義のデータアップロード を設定できて、当時のStravaへのアップロードもそういう方式だった
      Garminでも可能だった記憶はあるが、最新版はよく分からない
    • ひとつの方向性として、複数のサービスと連携する RunGap に統合することもあり得る
  • プロの開発者ではなく、10年前に大学で学んだ開発概念くらいの知識しかないのだとしたら、これほど完成度が高く見えるシステムを作ったのは立派だ
    ただ、元の開発者本人なのかは分からないが、あとで足を引っ張るようなミスをしてしまったのではないかと怖くならないのか気になる。たとえばセキュリティ問題や、後から修正しづらい不具合のようなものだ

    • 長い間アマチュアプログラマーではあったが、コーディングが本当に得意になるだけの時間はなかった
      些細なタイプミスや、本来簡単に見つかるはずのバグに1時間を無駄にしてしまうタイプだ
      ChatGPTをプロジェクト補助、コード生成、コードの問題点の指摘などに使っている
      特にありふれた機能を実装するとき、自分ひとりでやるより 境界条件 をよく押さえてくれるし、セキュリティホールを塞いでほしいと頼んでも、自分のレベルよりはうまく対処してくれる
      昨日もフォームを埋めるボットを防ぐ戦略を7つ提案してくれて、そのうちいくつかを数分で適用したら、ボット問題がすぐに止まった
      もちろんミスは起きるが、AIツールは自分自身の批判的思考と組み合わせて使えば、そうしたミスを減らす助けになる。AIを頻繁に修正したり、特定の種類の問題を防ぐ観点から助けを求めたり、既存の知識をもとにプロンプトを組み立てたりすれば、ずっと良い答えが得られる
    • どんな開発者でもミスはする。経験とは、明白なミスの基準線を、より明白ではないミスの側へ移してくれるだけだ
      印象的なのは、システムを作り、しかもおそらくコミュニティからのフィードバックに開いている点で、これは経験豊富な開発者がセキュリティを心配して何年もひとりで作るより、むしろ良い結果につながるかもしれない
      ミスそのものより重要なのは、発見して修正する速さ だと思う。そして同じことが再び起きないよう、リンター、単体テスト、型システム、CI/CDのような自己強化的な仕組みを整えることが重要だ。冗談半分でこれを謙虚さベースの開発と呼んでいる
    • こうした恐れに振り回されると、実際には何も作れなくなる
      どれほど経験豊富な開発者でもこうしたミスはする。自分はもうその段階を超えたと思っているなら、真実を見るにはもっと経験が必要だ
      学ぶ最良の方法は、プロジェクトを作り、ミスをし、それをどう直すかを見つけることだ。直すのが難しいほど、次のプロジェクトでは最初の設計段階から考慮するようになる
    • PHPをざっと見たところ、パスワードハッシュに SHA-2 を使っているようなので、そうした問題がある可能性はかなり高そうだ
      AIであれ初心者であれ、結局はどれだけ間違っているかの程度の差にすぎないと思う
    • 何を恐れるべきなのか分からない。実際のリスクとは何だろう?
  • 名前が素晴らしい。enduranceと、スペインの偉大な自転車競技チャンピオン Miguel Induráin の名前をかけた言葉遊びに見える
    https://en.m.wikipedia.org/wiki/Miguel_Indur%C3%A1in

    • 皆が狂ったようにドーピングしていた時代の中でも、さらにその頂点にいた選手だった
      EPOの先駆者であるDr. Conconiと組んでいたし、摘発されたことはないが、クリーンだった可能性は低いと思う
  • これはバックアップ機能付きの 代替フロントエンド に近いのではないか?
    結局、このツールに来る前に、まずデータをStravaに渡さなければならない構造に見える

    • そのようだ。問題は、Strava APIの規約(https://www.strava.com/legal/api)が、Stravaの機能を複製することを明示的に禁じている点だ
  • Stravaがまったく不要な、自作のかなり粗削りな代替手段もある: https://github.com/cfe84/gpx-tools/blob/main/README.md
    GPXトラックがあるフォルダで実行する CLIコマンド で、セグメントはJSONファイルに直接定義し、そのうえでセグメントごとの成績を一覧できる
    アクティビティの記録はOsmAndで行い、foldersyncでsyncthing経由の同期を行ったあと、対象フォルダで実行して使っている
    セグメント計算ロジックは参考になるかもしれない。素晴らしいと主張するつもりはないが、サーバーに組み込むのに向いた追加機能になるかもしれない

  • Stravaのキラー機能はセグメントだと思う。
    ユーザー全体で最速の記録、つまりKOMに興味がなくても、特定の道路区間で時間の経過とともに自分の進捗を比較できるのは価値がある。
    心拍数と体感強度をあわせて見れば、現在の体力がどの程度か、あるいは最高のコンディションからどれだけ落ちているかを見積もれる。

    • 誰かがアクティビティ種別ごとのセグメントとランキングのためのオープンな中央ハブを作ればよい。
      その次には、悪質なセグメントや投稿者をブロックまたは削除する方法が必要で、投票システムもあり得る。
      アクティビティ中にセグメントを検出するのは厄介なので、もっと調べてみたかった。たぶんChatGPTの説明を借りることもできるだろうが、緯度・経度のバウンディングボックスと、その中で開始・終了地点を検出する方式が関係していることくらいは分かっている。
      Stravaがセグメントについて何らかの特許を持っていたと、うっすら記憶している。
    • すばらしい機能なのは確かだが、Stravaはそれをかなり強く押し出していて、年80ドルを払いたくなってしまう。
  • Gadgetbridge[0]のようなモバイルツールとどう併用できるのか気になる。
    このアプリはスマートウォッチの独自アプリを回避し、健康データや位置データを商用サービスにアップロードしないようにしてくれる。
    ただしGarminの主要なスポーツウォッチには対応しておらず、一部のデバイスしかサポートしていない[1]。そのため、ウォッチをUSBで接続してトラックを移し、コンピューターからアクセスする必要があり、モバイル対応はない。
    [0] https://f-droid.org/en/packages/nodomain.freeyourgadget.gadg...
    [1] https://gadgetbridge.org/gadgets/

  • Fediverseと連携するのか。Stravaを使う主な理由は、ソーシャルネットワークとしての性格にある。
    Garmin Connectは分析ツールがStravaより優れている。Endurainはまだ使っていない。

    • StravaのFOSS ActivityPub版が欲しい。
  • Runalyzeがもうオープンソースではなくなったのは残念だが、以前のバージョンはまだ残っている。
    https://github.com/Runalyze/Runalyze