リアルタイムのISS尿タンク状態を表示するmacOSメニューバーアプリ
(github.com/Jaennaet)- 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件のコメント
Hacker News のコメント
https://iss-mimic.github.io/Mimic/ でこのデータストリームを知ったが、尿タンクがどれだけ満たされているか以外にも、はるかに多くの興味深い統計がある。
「そのどれも追加しない」という一文こそ、このプロジェクトの非目標を伝える完璧な言い方だ。
オープンソースコミュニケーションの模範事例として学ぶ価値がある。
宇宙飛行士たちがタンクの変化量を調整してモールス信号で通信し、ADHD があってこのメニューバーアプリを入れていた誰かが異変に気づいて全員を救う、みたいな映画になりそうだ。
あとは、どうやって自分の体をそこまで送り込むかだけが問題だ。
ISS のSVGを作って、このデータでアニメーションまで付けるのに時間を使いすぎたくなってしまう。
Real World Assets(tm) で団塊世代を釣れそうだ。
Bluesky で 50 点超えの HN 投稿を流すボットをフォローしているのだが、見覚えのある GitHub リンクが突然出てきて驚いた。
5 日ほど前に自分で Show HN に投稿した記事(https://news.ycombinator.com/item?id=42464454)だったので、なぜ今さら出てくるのかと思ったら、実は自分の記事ではなかった。
この 15 年ほどで作ったオープンソースプロジェクトの中で、これがいちばん人気になったのは本当にうれしい。
「でも、なぜ作ったの?」という問いには、「面白いと思ったから」が正直な答えで、Swift の最初のプロジェクトとしてシンプルなものを探していて、iss-mimic を見た瞬間にこれをやるべきだと思った。
データ用スクリプトはどこかで動いているはずだが、残念ながらランキングサイトまでは作れなかった。
水位も表示して、2 つのタンクの間で切り替わる瞬間を見せられるだろうか?
NASA でこのテレメトリデータを ISSLive の一部として公開していたチームの技術リード兼フライトコントローラだった。
この API を ISS Mimic が利用していて、当時私たちは何年にもわたって宇宙ステーション計画を一般向けに紹介していた: https://youtu.be/xAhw_8B25N0?si=OZXH9sZ0bY_iX40V
12 年後に PissStream が出てくるとは、かなり笑える。
ライブストリームサーバーがちゃんと使われていてうれしいし、実際ほかにも良いテレメトリデータはたくさんある。
ISSMimic が好きだ。
真面目な話、ISS のリアルタイムテレメトリをここまで極端にくだらない用途に使う例もそうないだろうが、こんなばかげたことが可能なだけでなく、とても簡単にできるというのが驚きだ。
最初から可能にしてくれた NASA と関係者には敬意を表したい。
ISS Mimic ダッシュボードを見て、興味深いテレメトリデータが本当にたくさんあることも改めて実感した。
もしそうなら、その瞬間が来たら端末の前でステーションの最後の別れを待ちたい。
これを Web に移植してみた: https://gistpreview.github.io/?76f03f49be58344bfa64c9d5d9f0ec29
ソースコードはこちら: https://gist.github.com/simonw/76f03f49be58344bfa64c9d5d9f0ec29
Swift の GitHub リポジトリ全体を Gemini 2.0 に貼り付けて Web ページに移植してくれと頼んで作った: https://gist.github.com/simonw/b4aec4e879e50ac74f6f9cc6e1cdc0a1
Aider に同じプロンプトを与えて「Swift コードと同じ API を使え」と付け加えたら一発でできたが、Claude は単に「Web ページ」と言うだけでは一発ではできず、何回か追加のプロンプトが必要だった。
ChatGPT-4o は lightstream.js を読み込む URL を幻覚し、結局自分でデバッグする羽目になった。
こんな小さな作業でも、プロンプトの違いで結果が大きく変わるのだから、LLM コーディング支援を再臨のように見る人と、全部ハッタリだと見る人に HN で毎回意見が割れる理由も理解しやすい。
ストリーム処理の良い例だ。
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)ラベルのカスタマイズを諦めたあと、未使用の enum を消すのを自然と忘れてしまった。
apolloinrealtime.org を作った者で、今はISS プログラムで働いている。
敬意を表する。
これが公開情報だとは知らなかった。
乗組員が小便するたびに通知を送ることもできそうだ。
ほかの化学分析データまであれば可能かもしれない。
NASA はその分析データをデータ収集マニアに売って予算問題を解決し、ISS のあらゆる画面に広告を表示できるかもしれない。
むしろ、まだ YC スタートアップがこういうスマートトイレを出していないのが不思議なくらいだ。