1 ポイント 投稿者 GN⁺ 2024-12-25 | 1件のコメント | WhatsAppで共有
  • pISSStreamは国際宇宙ステーション(ISS)の尿タンク容量をリアルタイムで表示するアプリで、macOSメニューバー、iOS、watchOS、visionOSに対応
  • データはNASAの公式公開ISSテレメトリストリームをLightstreamerで取得し、地上局が信号を受信している間、最新のタンク充填率を表示する
  • macOSではメニューバーに🧑🏽‍🚀🚽と充填率を表示し、接続またはテレメトリ信号が途切れると🧑🏽‍🚀❗と最後の受信値、“Connecting”または“No Signal”の状態を表示する
  • iOSとwatchOSはシンプルなインターフェースでリアルタイムのタンク水位を表示し、visionOSはImmersiveSpace APIベースの3D可視化と空間オーディオを提供する
  • 初めてのSwiftおよびAppleプラットフォームアプリのため、古いデータの処理やエラー処理には積極的ではなく、バグ修正用のPull Requestは受け付けるが、他のISS統計を追加する予定はない

pISSStreamの機能

  • pISSStreamはInternational Space Stationの尿タンク容量をリアルタイムで表示するアプリ
  • 対応プラットフォームはmacOS、watchOS、iOS、visionOS
  • 主な機能は次のとおり
    • ISS尿タンク水位のリアルタイム監視
    • macOSメニューバー統合
    • iOSおよびwatchOSアプリのリアルタイム更新
    • visionOSでの没入型3D可視化
    • 没入型画面でのdeep-space soundscapeベースの空間オーディオ
    • Vision Pro向けの強化されたUIとカスタムアプリアイコン
    • NASA公式公開ISSテレメトリストリームをLightstreamerで使用

インストールとビルド条件

  • macOSは最新リリースのDMGをDownloadリンクから入手できる
  • iOS、watchOS、visionOSはAppleのセキュリティモデルのため、ソースからビルドし、自分の開発者アカウントで署名する必要がある
  • ビルドの前提条件は次のとおり
    • Xcode 15.2以上
    • Apple Developer account
    • iOSアプリ用のiOS 17.0以上のデバイス
    • Apple Vision ProまたはvisionOSシミュレータ
  • 基本的なビルド手順は、リポジトリをクローンした後、pISSStream.xcodeprojをXcodeで開き、Signing & Capabilitiesで開発チームを選択してから、対象デバイスでビルドして実行する流れ
  • Apple Developer accountがなくても、無料のプロビジョニングプロファイルでシミュレータやデバイス上で最大7日間実行できる

visionOS開発と配布

  • visionOS開発には、XcodeにvisionOS SDKがインストールされている必要がある
  • アプリは3D可視化体験のためにImmersiveSpace APIを使用し、没入感を高めるために空間オーディオを含む
  • 要件は次のとおり
    • Apple silicon Mac
    • Xcode 15.2以上
    • Apple Developer Account
    • 開発者モードが有効なVision Pro
    • 同じWi-Fiネットワークに接続されたMacとVision Pro
  • ワイヤレス開発手順は、Vision ProでDeveloper ModeとRemote Developmentを許可した後、XcodeのDevices and SimulatorsでVision Proをペアリングし、ビルド対象として選択して実行する流れ
  • よくある問題は次のとおり
    • “Device not found”:Wi-Fi接続の確認が必要
    • “Unauthorized device”:Vision Proの再ペアリングが必要
    • “Build failed”:プロビジョニングプロファイルの更新が必要
    • “No paired Vision Pro found”:Vision Proの接続とペアリングの確認が必要
    • “Invalid signing”:開発者アカウントとプロビジョニングプロファイルの確認が必要

プラットフォーム別の使い方

  • macOSでは、Lightstreamer接続とISSテレメトリ信号の受信がどちらも正常な場合、メニューバー項目に**🧑🏽‍🚀🚽**と充填率が表示される
  • 接続またはISSテレメトリ信号が途切れると、メニューバー項目は**🧑🏽‍🚀❗**と最後の受信値を表示し、メニューには“Connecting”または“No Signal”が表示される
  • iOSでは、アプリを起動するとシンプルなインターフェースで現在のタンク水位を確認できる
  • visionOSでは、ISSの廃棄物タンクを没入型3Dで見ながら、リアルタイムの充填水位を可視化する
  • watchOSでは、手首でISS廃棄物タンクの充填水位をリアルタイムに追跡する

制作動機と限界

  • 制作動機は、宇宙ステーションのトイレから出る実際のリアルタイムテレメトリデータを読むジョークアプリを午後だけで作れることが「ばかばかしくもあり、同時に驚くべきこと」だという点にある
  • Swiftを学ぶための良い口実でもあったが、中心的な動機はアプリ自体の不条理さだった
  • 既知の問題は次のとおり
    • 初めてのSwiftおよびAppleプラットフォームアプリなので、優れたコーディング慣行の頂点ではない
    • 些細なきっかけでも予想外の形で壊れる可能性がある
    • 古いデータに積極的に対応しない
    • エラー処理にはあまり気を配っていない
  • バグ修正用のPull Requestは歓迎する
  • データストリームはISS Mimicを通じて知ったもので、ISS Mimicには尿タンク水位よりもはるかに多く興味深い統計があるが、pISSStreamには追加しない予定

1件のコメント

 
GN⁺ 2024-12-25
Hacker News のコメント
  • https://iss-mimic.github.io/Mimic/ でこのデータストリームを知ったが、尿タンクがどれだけ満たされているか以外にも、はるかに多くの興味深い統計がある。
    「そのどれも追加しない」という一文こそ、このプロジェクトの非目標を伝える完璧な言い方だ。
    オープンソースコミュニケーションの模範事例として学ぶ価値がある。

    • なぜか、通信がすべて途絶え、動作しているセンサーが尿タンクセンサーだけという状況を思い浮かべてしまう。
      宇宙飛行士たちがタンクの変化量を調整してモールス信号で通信し、ADHD があってこのメニューバーアプリを入れていた誰かが異変に気づいて全員を救う、みたいな映画になりそうだ。
    • https://iss-mimic.github.io/Mimic/ だけでなく、プロジェクトページもぜひ読む価値がある: https://github.com/ISS-Mimic/Mimic
    • あのデータが全部そろっているなら、ISS と乗組員に対してかなり汚いソーシャルエンジニアリング攻撃を仕掛ける助けになりそうだ。
      あとは、どうやって自分の体をそこまで送り込むかだけが問題だ。
    • こんな危険な情報を知るべきではなかった。
      ISS のSVGを作って、このデータでアニメーションまで付けるのに時間を使いすぎたくなってしまう。
    • 次はエアロック圧力値に合わせてリベースされるトークンを作る番だ。
      Real World Assets(tm) で団塊世代を釣れそうだ。
  • Bluesky で 50 点超えの HN 投稿を流すボットをフォローしているのだが、見覚えのある GitHub リンクが突然出てきて驚いた。
    5 日ほど前に自分で Show HN に投稿した記事(https://news.ycombinator.com/item?id=42464454)だったので、なぜ今さら出てくるのかと思ったら、実は自分の記事ではなかった。
    この 15 年ほどで作ったオープンソースプロジェクトの中で、これがいちばん人気になったのは本当にうれしい。
    「でも、なぜ作ったの?」という問いには、「面白いと思ったから」が正直な答えで、Swift の最初のプロジェクトとしてシンプルなものを探していて、iss-mimic を見た瞬間にこれをやるべきだと思った。

    • これにAIを載せて収益化する計画もあるのか?
    • 自分も似たようなことをやったことがあって、ISS の位置を使って宇宙飛行士たちに「最も多くおしっこを浴びせられている国」を計算した。
      データ用スクリプトはどこかで動いているはずだが、残念ながらランキングサイトまでは作れなかった。
    • これをライブラリ化するつもりはないのか? すべてのSwift アプリの情報パネルにこの重要指標が必要そうだ。
    • 自分が作ったこの指標とデータソースを組み合わせるべきかもしれない: https://www.secretbatcave.co.uk/electronics/shart-o-meter/
    • 尿を水として再利用する方法を開発中だと理解している。
      水位も表示して、2 つのタンクの間で切り替わる瞬間を見せられるだろうか?
  • NASA でこのテレメトリデータを ISSLive の一部として公開していたチームの技術リード兼フライトコントローラだった。
    この API を ISS Mimic が利用していて、当時私たちは何年にもわたって宇宙ステーション計画を一般向けに紹介していた: https://youtu.be/xAhw_8B25N0?si=OZXH9sZ0bY_iX40V
    12 年後に PissStream が出てくるとは、かなり笑える。
    ライブストリームサーバーがちゃんと使われていてうれしいし、実際ほかにも良いテレメトリデータはたくさんある。
    ISSMimic が好きだ。

    • 申し訳ないとは思っていないし、またやるつもりだ。
      真面目な話、ISS のリアルタイムテレメトリをここまで極端にくだらない用途に使う例もそうないだろうが、こんなばかげたことが可能なだけでなく、とても簡単にできるというのが驚きだ。
      最初から可能にしてくれた NASA と関係者には敬意を表したい。
      ISS Mimic ダッシュボードを見て、興味深いテレメトリデータが本当にたくさんあることも改めて実感した。
    • ISS が最終的に退役して破壊されるとき、テレメトリストリームが最後まで流れ続けるのか気になる。
      もしそうなら、その瞬間が来たら端末の前でステーションの最後の別れを待ちたい。
    • 音楽が Star Trek Voyager のテーマを思い出させるが、実際には同じ曲ではないという点が面白い。
  • これを Web に移植してみた: https://gistpreview.github.io/?76f03f49be58344bfa64c9d5d9f0ec29
    ソースコードはこちら: https://gist.github.com/simonw/76f03f49be58344bfa64c9d5d9f0ec29
    Swift の GitHub リポジトリ全体を Gemini 2.0 に貼り付けて Web ページに移植してくれと頼んで作った: https://gist.github.com/simonw/b4aec4e879e50ac74f6f9cc6e1cdc0a1

    • あいつ、基本的なエラーハンドリングまで入れてきた。
    • Claude と ChatGPT-4o にも似たようにやらせてみたが、結果のばらつきがかなり大きかった。
      Aider に同じプロンプトを与えて「Swift コードと同じ API を使え」と付け加えたら一発でできたが、Claude は単に「Web ページ」と言うだけでは一発ではできず、何回か追加のプロンプトが必要だった。
      ChatGPT-4o は lightstream.js を読み込む URL を幻覚し、結局自分でデバッグする羽目になった。
      こんな小さな作業でも、プロンプトの違いで結果が大きく変わるのだから、LLM コーディング支援を再臨のように見る人と、全部ハッタリだと見る人に HN で毎回意見が割れる理由も理解しやすい。
    • 倫理的に使うなら、感謝のクレジット表記も含めるべきだ。
    • 誰かが LLM は Stack Overflow のコピペ以上の価値はないと言ったら、このWeb 移植を引き合いに出すつもりだ。
  • ストリーム処理の良い例だ。

  • ISS Mimic のチームメンバーだが、気に入った。素晴らしい仕事だ。
    宇宙飛行士のプライバシーが心配なら、尿タンクの数値は乗組員が直接尿を追加したことを反映しているわけではない。

    • ISS Mimic と比べれば「素晴らしい」は少し大げさかもしれないが、褒め言葉はありがたく受け取っておく。
      その数値が実際には何を反映しているのかも気になる。
      まだ UWMS の魂の奥深くまでは覗けていないようだ。
    • だとすると、実際には何を反映しているのか本気で気になる。
  • 変数名が正確だ。
    static let pissYellowLight = Color(red: 0.95, green: 0.85, blue: 0.2)
    static let pissYellowDark = Color(red: 0.7, green: 0.6, blue: 0.1)

    • もともとはメニューバー項目の背景色と前景色を変えようとしていたが、SwiftUI のMenuBarExtraラベルは、少なくともぱっと見で分かる方法では色変更をサポートしていないようだった。
      ラベルのカスタマイズを諦めたあと、未使用の enum を消すのを自然と忘れてしまった。
  • apolloinrealtime.org を作った者で、今はISS プログラムで働いている。
    敬意を表する。

    • Apollo in Real Time は圧倒的に素晴らしい資料だ。ありがとう。
  • これが公開情報だとは知らなかった。

    • 公的資金で運営されているから公開されている。
    • 1 つの API が情報公開請求の代わりになったのかもしれない。
  • 乗組員が小便するたびに通知を送ることもできそうだ。

    • そうすると、量でどの宇宙飛行士か特定できるのでは?
      ほかの化学分析データまであれば可能かもしれない。
      NASA はその分析データをデータ収集マニアに売って予算問題を解決し、ISS のあらゆる画面に広告を表示できるかもしれない。
      むしろ、まだ YC スタートアップがこういうスマートトイレを出していないのが不思議なくらいだ。