1 Punkte von GN⁺ 2024-12-25 | 1 Kommentare | Auf WhatsApp teilen
  • pISSStream ist eine App, die die Kapazität des Urintanks der Internationalen Raumstation (ISS) in Echtzeit anzeigt und macOS-Menüleiste sowie iOS, watchOS und visionOS unterstützt
  • Die Daten stammen aus dem offiziellen öffentlichen ISS-Telemetrie-Stream der NASA und werden per Lightstreamer empfangen; wenn eine Bodenstation das Signal empfängt, zeigt die App den aktuellen Füllstand des Tanks an
  • Unter macOS zeigt sie in der Menüleiste 🧑🏽‍🚀🚽 und den Füllstand an; wenn die Verbindung oder das Telemetriesignal abreißt, erscheinen 🧑🏽‍🚀❗, der zuletzt empfangene Wert sowie der Status „Connecting“ oder „No Signal“
  • iOS und watchOS zeigen den Live-Tankfüllstand über eine einfache Oberfläche an; visionOS bietet eine 3D-Visualisierung auf Basis der ImmersiveSpace API sowie Spatial Audio
  • Da es die erste Swift- und Apple-Plattform-App ist, geht sie mit veralteten Daten und Fehlerbehandlung nicht besonders aktiv um; Pull Requests für Bugfixes sind willkommen, weitere ISS-Statistiken sind jedoch nicht geplant

Was pISSStream macht

  • pISSStream ist eine App, die die Kapazität des Urintanks der International Space Station in Echtzeit anzeigt
  • Unterstützte Plattformen sind macOS, watchOS, iOS und visionOS
  • Die wichtigsten Funktionen sind:
    • Echtzeit-Monitoring des ISS-Urintankfüllstands
    • Integration in die macOS-Menüleiste
    • Live-Updates in den iOS- und watchOS-Apps
    • Immersive 3D-Visualisierung unter visionOS
    • Spatial Audio auf Basis einer deep-space soundscape in der immersiven Ansicht
    • Verbesserte UI und eigenes App-Icon für Vision Pro
    • Nutzung des offiziellen öffentlichen ISS-Telemetrie-Streams der NASA über Lightstreamer

Installation und Build-Voraussetzungen

  • Für macOS kann das aktuelle DMG-Release über den Link Download heruntergeladen werden
  • iOS, watchOS und visionOS müssen wegen Apples Sicherheitsmodell aus dem Quellcode gebaut und mit einem eigenen Entwicklerkonto signiert werden
  • Build-Voraussetzungen sind:
    • Xcode 15.2 oder neuer
    • Apple Developer account
    • Gerät mit iOS 17.0 oder neuer für die iOS-App
    • Apple Vision Pro oder visionOS-Simulator
  • Der grundlegende Build-Ablauf besteht darin, das Repository zu klonen, pISSStream.xcodeproj in Xcode zu öffnen, unter Signing & Capabilities das Entwicklungsteam auszuwählen und anschließend auf dem Zielgerät zu bauen und auszuführen
  • Auch ohne Apple Developer account kann die App mit einem kostenlosen Provisioning Profile bis zu 7 Tage lang im Simulator oder auf einem Gerät ausgeführt werden

visionOS-Entwicklung und Bereitstellung

  • Für die visionOS-Entwicklung muss das visionOS SDK in Xcode installiert sein
  • Die App nutzt die ImmersiveSpace API für das 3D-Visualisierungserlebnis und enthält Spatial Audio für mehr Immersion
  • Anforderungen sind:
    • Apple-Silicon-Mac
    • Xcode 15.2 oder neuer
    • Apple Developer Account
    • Vision Pro mit aktiviertem Developer Mode
    • Mac und Vision Pro im selben WLAN
  • Der drahtlose Entwicklungsablauf besteht darin, auf der Vision Pro Developer Mode und Remote Development zuzulassen, die Vision Pro in Xcodes Devices and Simulators zu koppeln, sie als Build-Ziel auszuwählen und die App auszuführen
  • Häufige Probleme sind:
    • „Device not found“: WLAN-Verbindung prüfen
    • „Unauthorized device“: Vision Pro erneut koppeln
    • „Build failed“: Provisioning Profile aktualisieren
    • „No paired Vision Pro found“: Verbindung und Kopplung der Vision Pro prüfen
    • „Invalid signing“: Entwicklerkonto und Provisioning Profile prüfen

Nutzung je nach Plattform

  • Unter macOS werden im Menüleisteneintrag 🧑🏽‍🚀🚽 und der Füllstand angezeigt, wenn sowohl die Lightstreamer-Verbindung als auch der Empfang des ISS-Telemetriesignals normal funktionieren
  • Wenn die Verbindung oder das ISS-Telemetriesignal abreißt, zeigt der Menüleisteneintrag 🧑🏽‍🚀❗ und den zuletzt empfangenen Wert an; im Menü erscheint „Connecting“ oder „No Signal“
  • Unter iOS lässt sich nach dem Start der App der aktuelle Tankfüllstand über eine einfache Oberfläche ansehen
  • Unter visionOS sieht man den ISS-Abfalltank immersiv in 3D und visualisiert den Live-Füllstand
  • Unter watchOS lässt sich der Füllstand des ISS-Abfalltanks in Echtzeit am Handgelenk verfolgen

Motivation und Grenzen

  • Die Motivation für die Entwicklung lag darin, dass es „absurd, aber zugleich erstaunlich“ ist, an einem Nachmittag eine Scherz-App bauen zu können, die echte Live-Telemetriedaten aus der Toilette einer Raumstation ausliest
  • Es war außerdem ein guter Vorwand, Swift zu lernen, doch die zentrale Motivation war die Absurdität der App selbst
  • Bekannte Probleme sind:
    • Als erste Swift- und Apple-Plattform-App ist sie nicht der Gipfel guter Coding-Praktiken
    • Sie kann schon durch kleine Auslöser auf unerwartete Weise kaputtgehen
    • Sie reagiert nicht aktiv auf veraltete Daten
    • Fehlerbehandlung wurde nicht besonders stark berücksichtigt
  • Pull Requests für Bugfixes sind willkommen
  • Der Datenstream wurde über ISS Mimic entdeckt; ISS Mimic enthält weit mehr und interessantere Statistiken als den Urintankfüllstand, diese sollen jedoch nicht in pISSStream ergänzt werden

1 Kommentare

 
GN⁺ 2024-12-25
Hacker-News-Kommentare
  • Ich bin über https://iss-mimic.github.io/Mimic/ auf den Datenstream gestoßen; dort gibt es viel mehr und interessantere Statistiken als nur, wie voll der Urintank ist.
    Der Satz „Nichts davon werde ich hinzufügen“ ist die perfekte Art, die Nicht-Ziele des Projekts zu vermitteln.
    Daraus kann man Best Practices für Open-Source-Kommunikation lernen.

    • Irgendwie stelle ich mir eine Situation vor, in der die gesamte Kommunikation ausgefallen ist und der einzige noch funktionierende Sensor der Urintank-Sensor ist.
      Das wäre ein Film, in dem die Astronauten über die Änderung des Tankstands Morsezeichen senden und jemand mit ADHS, der diese Menüleisten-App installiert hat, die Lage bemerkt und alle rettet.
    • Nicht nur https://iss-mimic.github.io/Mimic/, auch die Projektseite ist unbedingt lesenswert: https://github.com/ISS-Mimic/Mimic
    • Wenn all diese Daten vorhanden sind, könnten sie wohl bei ziemlich schmutzigen Social-Engineering-Angriffen gegen die ISS und ihre Crew helfen.
      Bleibt nur noch die Frage, wie man den eigenen Körper bis dorthin bekommt.
    • Diese gefährlichen Informationen hätte ich besser nicht erfahren sollen.
      Jetzt bekomme ich viel zu sehr Lust, ein SVG der ISS zu bauen und es mit diesen Daten zu animieren.
    • Jetzt ist es an der Zeit, einen Token zu bauen, der sich anhand des Luftschleusendrucks rebasiert.
      Damit könnte man Boomern Real World Assets(tm) andrehen.
  • Ich folge auf Bluesky einem Bot, der HN-Posts mit mehr als 50 Punkten veröffentlicht, und war überrascht, plötzlich einen vertrauten GitHub-Link zu sehen.
    Ich hatte den Beitrag vor etwa fünf Tagen selbst als Show HN gepostet (https://news.ycombinator.com/item?id=42464454), und fragte mich, warum er plötzlich auftaucht – tatsächlich war es aber gar nicht mein Beitrag.
    Ich freue mich wirklich, dass dies von den Open-Source-Projekten, die ich in den letzten rund 15 Jahren gebaut habe, das populärste geworden ist.
    Auf die Frage „Aber warum hast du es gebaut?“ ist die ehrliche Antwort: „Weil ich es lustig fand.“ Ich suchte für mein erstes Swift-Projekt etwas Einfaches, sah iss-mimic und dachte sofort: Das muss ich machen.

    • Gibt es auch Pläne, AI dranzuhängen und es zu monetarisieren?
    • Ich habe mal etwas Ähnliches ausprobiert: Ich habe die Position der ISS genutzt, um für die Astronauten das „am meisten angepinkelte Land“ zu berechnen.
      Irgendwo müsste noch ein Skript für die Daten laufen, aber leider habe ich es nie bis zu einer Ranglisten-Website gebracht.
    • Hast du darüber nachgedacht, daraus eine Library zu machen? Im Info-Panel jeder Swift-App scheint diese wichtige Kennzahl zu fehlen.
    • Ich glaube, ich sollte diese Metrik mit meiner Datenquelle kombinieren: https://www.secretbatcave.co.uk/electronics/shart-o-meter/
    • Soweit ich weiß, wird daran gearbeitet, Urin zu Wasser zu recyceln.
      Könntest du auch den Wasserstand anzeigen und den Moment zeigen, in dem zwischen den beiden Tanks umgeschaltet wird?
  • Ich war bei NASA der Technical Lead und Flight Controller des Teams, das diese Telemetriedaten als Teil von ISSLive veröffentlicht hat.
    Diese API wurde von ISS Mimic genutzt, und damals haben wir ein paar Jahre lang der Öffentlichkeit das Raumstationsprogramm nähergebracht: https://youtu.be/xAhw_8B25N0?si=OZXH9sZ0bY_iX40V
    Zwölf Jahre später PissStream zu sehen, ist ziemlich lustig.
    Schön, dass die Livestream-Server gut genutzt werden; tatsächlich gibt es noch viele andere gute Telemetriedaten.
    Ich mag ISSMimic.

    • Nicht entschuldigt, und ich würde es wieder tun.
      Im Ernst: Es dürfte nur wenige Beispiele geben, die die Echtzeit-Telemetrie der ISS so maximal trivial nutzen, aber es ist erstaunlich, dass so etwas Albernes nicht nur möglich, sondern auch sehr einfach ist.
      Respekt an NASA und alle Beteiligten, die das von Anfang an möglich gemacht haben.
      Beim Blick auf das ISS-Mimic-Dashboard ist mir auch wieder aufgefallen, wie viele interessante Telemetriedaten es wirklich gibt.
    • Ich frage mich, ob der Telemetrie-Stream bis ganz zum Ende weiterläuft, wenn die ISS endgültig außer Dienst gestellt und zerstört wird.
      Falls ja, möchte ich in diesem Moment vor dem Terminal sitzen und auf den letzten Abschiedsgruß der Station warten.
    • Die Musik erinnert an das Theme von Star Trek Voyager; lustig ist, dass es tatsächlich nicht dieselbe Musik ist.
  • Ich habe das hier ins Web portiert: https://gistpreview.github.io/?76f03f49be58344bfa64c9d5d9f0ec29
    Der Quellcode ist hier: https://gist.github.com/simonw/76f03f49be58344bfa64c9d5d9f0ec29
    Ich habe das komplette Swift-GitHub-Repository in Gemini 2.0 eingefügt und es gebeten, daraus eine Webseite zu portieren: https://gist.github.com/simonw/b4aec4e879e50ac74f6f9cc6e1cdc0a1

    • Das Ding hat sogar grundlegende Fehlerbehandlung eingebaut.
    • Ich habe Ähnliches auch mit Claude und ChatGPT-4o versucht, und die Ergebnisse schwankten ziemlich stark.
      Als ich Aider denselben Prompt gab und ergänzte „nutze dieselbe API wie der Swift-Code“, klappte es auf Anhieb; Claude schaffte es mit nur „Webseite“ nicht sofort und brauchte ein paar weitere Prompts.
      ChatGPT-4o halluzinierte die URL, von der lightstream.js geladen werden sollte, und am Ende musste ich selbst debuggen.
      Schon bei so einer kleinen Aufgabe ändern sich die Ergebnisse je nach Prompt erheblich; damit versteht man leicht, warum sich HN immer wieder zwischen Leuten spaltet, für die LLM-Coding-Assistenten wie die zweite Wiederkunft wirken, und solchen, die alles für heiße Luft halten.
    • Für eine ethische Nutzung müsste auch eine Quellenangabe aus Dankbarkeit enthalten sein.
    • Wenn jemand sagt, LLMs seien nicht besser als Copy-Paste von Stack Overflow, werde ich auf diese Web-Portierung verweisen.
  • Ein gutes Beispiel für Stream Processing.

  • Ich bin im ISS-Mimic-Team und es gefällt mir. Gute Arbeit.
    Falls jemand wegen der Privatsphäre der Astronauten besorgt ist: Der Urintankwert spiegelt keine direkten Urinzugaben der Crew wider.

    • Im Vergleich zu ISS Mimic ist „gut“ vielleicht etwas übertrieben, aber ich nehme das Lob dankend an.
      Ich bin auch neugierig, was dieser Wert tatsächlich widerspiegelt.
      Offenbar habe ich noch nicht bis in die tiefsten Seelenwinkel des UWMS geblickt.
    • Dann würde mich wirklich interessieren, was er tatsächlich widerspiegelt.
  • Die Variablennamen sitzen.
    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)

    • Ursprünglich wollte ich die Hintergrund- und Vordergrundfarbe des Menüleisten-Elements ändern, aber die Labels von MenuBarExtra in SwiftUI scheinen Farbänderungen zumindest nicht auf direkt sichtbare Weise zu unterstützen.
      Nachdem ich die Anpassung des Labels aufgegeben hatte, vergaß ich natürlich, das ungenutzte enum zu löschen.
  • Ich bin der Ersteller von apolloinrealtime.org und arbeite jetzt am ISS-Programm.
    Respekt.

    • Apollo in Real Time ist eine überwältigend gute Ressource. Danke.
  • Ich wusste nicht, dass das öffentlich zugängliche Informationen sind.

    • Da es öffentlich finanziert wird, ist es öffentlich.
    • Eine API könnte ein Informationsfreiheitsersuchen ersetzt haben.
  • Man könnte jedes Mal eine Benachrichtigung schicken, wenn ein Crewmitglied uriniert.

    • Könnte man dann nicht anhand der Menge identifizieren, welcher Astronaut es war?
      Mit weiteren chemischen Analysedaten wäre das vielleicht möglich.
      NASA könnte diese Analysedaten an Datensammler verkaufen, um ihre Budgetprobleme zu lösen, und auf allen Bildschirmen der ISS Werbung anzeigen.
      Eigentlich erstaunlich, dass noch kein YC-Startup so eine smarte Toilette herausgebracht hat.