1 points par GN⁺ 2024-12-25 | 1 commentaires | Partager sur WhatsApp
  • pISSStream est une application qui affiche en temps réel la capacité du réservoir d’urine de la Station spatiale internationale (ISS), avec prise en charge de macOS ainsi que d’iOS, watchOS et visionOS
  • Les données proviennent du flux officiel public de télémétrie de l’ISS de la NASA via Lightstreamer, et l’application affiche le dernier pourcentage de remplissage du réservoir lorsque les stations au sol reçoivent le signal
  • Sur macOS, la barre de menus affiche 🧑🏽‍🚀🚽 et le pourcentage de remplissage ; si la connexion ou le signal de télémétrie est interrompu, elle affiche 🧑🏽‍🚀❗, la dernière valeur reçue, ainsi que l’état « Connecting » ou « No Signal »
  • Sur iOS et watchOS, une interface simple affiche le niveau du réservoir en temps réel, tandis que visionOS propose une visualisation 3D basée sur l’API ImmersiveSpace et de l’audio spatial
  • Comme il s’agit de la première app Swift et de la première app pour plateformes Apple de l’auteur, la gestion des données anciennes et des erreurs n’est pas particulièrement robuste ; les Pull Requests de correction de bugs sont acceptées, mais il n’est pas prévu d’ajouter d’autres statistiques de l’ISS

Ce que fait pISSStream

  • pISSStream est une application qui affiche en temps réel la capacité du réservoir d’urine de l’International Space Station
  • Les plateformes prises en charge sont macOS, watchOS, iOS, visionOS
  • Principales fonctionnalités
    • Surveillance en temps réel du niveau du réservoir d’urine de l’ISS
    • Intégration à la barre de menus de macOS
    • Mises à jour en temps réel dans les apps iOS et watchOS
    • Visualisation 3D immersive sur visionOS
    • Audio spatial basé sur un deep-space soundscape dans l’écran immersif
    • UI améliorée et icône d’application personnalisée pour Vision Pro
    • Utilisation du flux officiel public de télémétrie de l’ISS de la NASA via Lightstreamer

Installation et conditions de build

  • Sur macOS, la dernière version DMG peut être téléchargée via le lien Download
  • Pour iOS, watchOS et visionOS, il faut compiler depuis les sources et signer avec son propre compte développeur en raison du modèle de sécurité d’Apple
  • Prérequis de build
    • Xcode 15.2 ou version ultérieure
    • Compte Apple Developer
    • Un appareil sous iOS 17.0 ou version ultérieure pour l’app iOS
    • Apple Vision Pro ou le simulateur visionOS
  • La procédure de build de base consiste à cloner le dépôt, ouvrir pISSStream.xcodeproj dans Xcode, sélectionner son équipe de développement dans Signing & Capabilities, puis compiler et exécuter sur l’appareil cible
  • Même sans compte Apple Developer, l’app peut être exécutée jusqu’à 7 jours sur simulateur ou appareil avec un profil de provisioning gratuit

Développement et déploiement sur visionOS

  • Le développement visionOS nécessite que le SDK visionOS soit installé dans Xcode
  • L’app utilise l’API ImmersiveSpace pour offrir une expérience de visualisation 3D et inclut de l’audio spatial pour renforcer l’immersion
  • Conditions requises
    • Un Mac Apple silicon
    • Xcode 15.2 ou version ultérieure
    • Un compte Apple Developer
    • Un Vision Pro avec le mode développeur activé
    • Un Mac et un Vision Pro connectés au même réseau Wi‑Fi
  • La procédure de développement sans fil consiste à autoriser le Developer Mode et le Remote Development sur le Vision Pro, puis à appairer le Vision Pro dans Devices and Simulators de Xcode, à le sélectionner comme cible de build et à lancer l’exécution
  • Problèmes courants
    • « Device not found » : vérifier la connexion Wi‑Fi
    • « Unauthorized device » : réappairer le Vision Pro
    • « Build failed » : mettre à jour le profil de provisioning
    • « No paired Vision Pro found » : vérifier la connexion et l’appairage du Vision Pro
    • « Invalid signing » : vérifier le compte développeur et le profil de provisioning

Utilisation selon la plateforme

  • Sur macOS, lorsque la connexion Lightstreamer et la réception du signal de télémétrie de l’ISS fonctionnent toutes deux normalement, l’élément de la barre de menus affiche 🧑🏽‍🚀🚽 et le pourcentage de remplissage
  • Si la connexion ou le signal de télémétrie de l’ISS est interrompu, l’élément de la barre de menus affiche 🧑🏽‍🚀❗ et la dernière valeur reçue, tandis que le menu indique « Connecting » ou « No Signal »
  • Sur iOS, il suffit d’ouvrir l’app pour consulter le niveau actuel du réservoir via une interface simple
  • Sur visionOS, on peut visualiser le réservoir de déchets de l’ISS en 3D immersive et voir son niveau de remplissage en temps réel
  • Sur watchOS, on peut suivre en temps réel depuis son poignet le niveau de remplissage du réservoir de déchets de l’ISS

Motivation de départ et limites

  • L’idée vient du fait qu’il est à la fois « ridicule et fascinant » de pouvoir créer en un après-midi une app gag qui lit de vraies données de télémétrie en temps réel provenant des toilettes de la station spatiale
  • C’était aussi un bon prétexte pour apprendre Swift, mais la motivation principale était le caractère absurde de l’app elle-même
  • Problèmes connus
    • Comme il s’agit de la première app Swift et de la première app pour plateformes Apple de l’auteur, elle ne représente pas le sommet des bonnes pratiques de développement
    • Elle peut casser de façon inattendue au moindre petit déclencheur
    • Elle ne gère pas activement les données anciennes
    • La gestion des erreurs n’a pas fait l’objet d’une grande attention
  • Les Pull Requests de correction de bugs sont les bienvenues
  • L’auteur a découvert le flux de données via ISS Mimic, qui propose bien plus de statistiques intéressantes que le seul niveau du réservoir d’urine, mais il n’est pas prévu de les ajouter à pISSStream

1 commentaires

 
GN⁺ 2024-12-25
Commentaires sur Hacker News
  • J’ai découvert le flux de données via https://iss-mimic.github.io/Mimic/, et il contient des statistiques bien plus nombreuses et intéressantes que le niveau de remplissage du réservoir d’urine.
    La phrase « rien de tout cela ne sera ajouté » est une façon parfaite de communiquer les non-objectifs du projet.
    C’est un exemple à retenir comme bonne pratique de communication open source.

    • Je ne sais pas pourquoi, mais ça me fait imaginer une situation où toutes les communications sont coupées et où le seul capteur encore fonctionnel est le capteur du réservoir d’urine.
      Les astronautes communiquent en morse en modulant les variations du réservoir, et quelqu’un avec un TDAH qui a installé cette app de barre de menus remarque la situation et sauve tout le monde : ça ferait un film.
    • En plus de https://iss-mimic.github.io/Mimic/, la page du projet vaut vraiment le détour : https://github.com/ISS-Mimic/Mimic
    • Avec toutes ces données, j’ai l’impression qu’on pourrait mener une attaque d’ingénierie sociale assez crade contre l’ISS et son équipage.
      Le seul problème restant, c’est de trouver comment envoyer son corps jusque-là-haut.
    • Je n’aurais pas dû apprendre l’existence de ces informations dangereuses.
      Ça me donne beaucoup trop envie de passer du temps à créer un SVG de l’ISS et à l’animer avec ces données.
    • Il est temps maintenant de créer un token qui se rebase en fonction de la pression du sas.
      On pourrait piéger les boomers avec des Real World Assets(tm).
  • Je suis sur Bluesky un bot qui publie les posts HN dépassant 50 points, et j’ai été surpris de voir soudain apparaître un lien GitHub familier.
    Je l’avais moi-même posté en Show HN il y a environ cinq jours (https://news.ycombinator.com/item?id=42464454), donc je me suis demandé pourquoi il ressortait d’un coup, avant de comprendre que ce n’était en fait pas mon post.
    Je suis sincèrement heureux que, parmi les projets open source que j’ai créés ces quelque 15 dernières années, celui-ci soit devenu le plus populaire.
    À la question « mais pourquoi l’avoir fait ? », la réponse honnête est « parce que je trouvais ça drôle » ; je cherchais un premier projet Swift simple, je suis tombé sur iss-mimic et j’ai tout de suite senti que c’était ça qu’il fallait faire.

    • Tu prévois aussi d’y ajouter de l’IA pour le monétiser ?
    • J’ai fait un truc un peu similaire : j’ai utilisé la position de l’ISS pour calculer « le pays qui se fait le plus arroser de pipi » par les astronautes.
      Le script de données doit encore fonctionner quelque part, mais malheureusement je ne suis jamais allé jusqu’à faire un site de classement.
    • Tu n’envisages pas d’en faire une bibliothèque ? Tous les panneaux d’information des apps Swift ont l’air d’avoir besoin de cet indicateur essentiel.
    • Je crois qu’il faut combiner cet indicateur avec la source de données que j’ai créée : https://www.secretbatcave.co.uk/electronics/shart-o-meter/
    • Il me semble qu’ils travaillent sur une méthode pour recycler l’urine en eau.
      Est-ce que tu peux aussi afficher le niveau d’eau, et montrer le moment où ça bascule entre les deux réservoirs ?
  • J’étais à la NASA le responsable technique et contrôleur de vol de l’équipe qui a publié ces données de télémétrie dans le cadre d’ISSLive.
    Cette API a été utilisée par ISS Mimic, et à l’époque nous avons fait connaître le programme de la station spatiale au public pendant plusieurs années : https://youtu.be/xAhw_8B25N0?si=OZXH9sZ0bY_iX40V
    Voir PissStream arriver 12 ans plus tard, c’est quand même assez drôle.
    Je suis content que le serveur de livestream serve encore, et il y a en fait beaucoup d’autres bonnes données de télémétrie.
    J’aime beaucoup ISSMimic.

    • Je ne suis pas désolé, et je le referai.
      Plus sérieusement, c’est sans doute l’un des usages les plus profondément futiles de la télémétrie temps réel de l’ISS, mais c’est incroyable que ce genre de bêtise soit non seulement possible, mais très facile à faire.
      Respect à la NASA et à toutes les personnes qui ont rendu ça possible dès le départ.
      Le tableau de bord ISS Mimic m’a aussi rappelé à quel point il y a de nombreuses données de télémétrie intéressantes.
    • Je me demande si le flux de télémétrie continuera jusqu’au bout quand l’ISS sera finalement arrêtée puis détruite.
      Si oui, quand ce moment arrivera, j’aurai envie d’être devant mon terminal à attendre le dernier adieu de la station.
    • La musique me rappelle le thème de Star Trek Voyager, et c’est amusant qu’en réalité ce ne soit pas le même morceau.
  • J’en ai fait un portage web : https://gistpreview.github.io/?76f03f49be58344bfa64c9d5d9f0ec29
    Le code source est ici : https://gist.github.com/simonw/76f03f49be58344bfa64c9d5d9f0ec29
    Je l’ai créé en collant tout le dépôt GitHub Swift dans Gemini 2.0 et en lui demandant de le porter en page web : https://gist.github.com/simonw/b4aec4e879e50ac74f6f9cc6e1cdc0a1

    • Il a même ajouté une gestion des erreurs de base.
    • J’ai essayé de faire quelque chose de similaire avec Claude et ChatGPT-4o, et les résultats variaient pas mal.
      En donnant le même prompt à Aider et en ajoutant « utilise la même API que le code Swift », ça a marché du premier coup ; avec Claude, si je disais seulement « une page web », ça ne marchait pas du premier coup et il a fallu quelques prompts de plus.
      ChatGPT-4o a halluciné l’URL à utiliser pour charger lightstream.js, et j’ai finalement dû déboguer moi-même.
      Même sur une tâche aussi petite, les résultats changent beaucoup selon les variations du prompt ; ça rend facile à comprendre pourquoi, sur HN, certains voient les assistants de codage LLM comme une seconde venue du messie tandis que d’autres considèrent que tout ça n’est que du vent.
    • Pour un usage éthique, il faudrait aussi inclure une attribution en remerciement.
    • La prochaine fois que quelqu’un dira que les LLM ne valent pas mieux qu’un copier-coller de Stack Overflow, je compte citer ce portage web.
  • C’est un bon exemple de traitement de flux.

  • Je fais partie de l’équipe ISS Mimic, et j’aime beaucoup. Beau travail.
    Si la confidentialité des astronautes vous inquiète, la valeur du réservoir d’urine ne reflète pas directement l’ajout d’urine par l’équipage.

    • Comparé à ISS Mimic, « beau » est peut-être un peu exagéré, mais j’accepte le compliment avec gratitude.
      Je me demande aussi ce que cette valeur reflète réellement.
      Je n’ai pas encore vraiment plongé dans les profondeurs de l’âme de l’UWMS.
    • Dans ce cas, je suis vraiment curieux de savoir ce qu’elle reflète en réalité.
  • Les noms de variables sont parfaits.
    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)

    • À l’origine, je voulais changer la couleur d’arrière-plan et de premier plan de l’élément de barre de menus, mais les libellés MenuBarExtra de SwiftUI ne semblaient pas permettre de modifier les couleurs, du moins pas de manière immédiatement évidente.
      Après avoir renoncé à personnaliser le libellé, j’ai naturellement oublié de supprimer l’enum inutilisée.
  • Je suis le créateur d’apolloinrealtime.org, et je travaille maintenant sur le programme ISS.
    Respect.

    • Apollo in Real Time est une ressource absolument exceptionnelle. Merci.
  • Je ne savais pas que c’était une information publique.

    • C’est public parce que c’est financé par des fonds publics.
    • Une API a peut-être remplacé une demande d’accès à l’information.
  • On pourrait aussi envoyer une notification à chaque fois qu’un membre d’équipage urine.

    • Est-ce qu’on ne pourrait pas alors identifier de quel astronaute il s’agit à partir du volume ?
      Avec d’autres données d’analyse chimique, ce serait peut-être possible.
      La NASA pourrait vendre ces données d’analyse aux collectionneurs de données pour régler ses problèmes de budget, et afficher des pubs sur tous les écrans de l’ISS.
      À vrai dire, je suis surpris qu’aucune startup YC n’ait encore lancé ce genre de toilettes intelligentes.