1 puntos por GN⁺ 2024-12-25 | 1 comentarios | Compartir por WhatsApp
  • pISSStream es una app que muestra en tiempo real la capacidad del tanque de orina de la Estación Espacial Internacional (ISS) y es compatible con macOS en la barra de menú, además de iOS, watchOS y visionOS
  • Los datos se reciben del stream oficial público de telemetría de la ISS de la NASA mediante Lightstreamer, y muestra el porcentaje más reciente de llenado del tanque cuando una estación terrestre está recibiendo la señal
  • En macOS muestra 🧑🏽‍🚀🚽 y el porcentaje de llenado en la barra de menú; si se pierde la conexión o la señal de telemetría, muestra 🧑🏽‍🚀❗, el último valor recibido y el estado “Connecting” o “No Signal”
  • En iOS y watchOS ofrece una interfaz simple para ver el nivel del tanque en tiempo real, mientras que en visionOS brinda una visualización 3D basada en ImmersiveSpace API y audio espacial
  • Como es su primera app en Swift y para plataformas de Apple, no maneja de forma muy activa los datos antiguos ni los errores; acepta Pull Requests para corregir bugs, pero no planea agregar otras estadísticas de la ISS

Qué hace pISSStream

  • pISSStream es una app que muestra en tiempo real la capacidad del tanque de orina de la International Space Station
  • Las plataformas compatibles son macOS, watchOS, iOS, visionOS
  • Sus funciones principales son las siguientes
    • Monitoreo en tiempo real del nivel del tanque de orina de la ISS
    • Integración con la barra de menú de macOS
    • Actualizaciones en tiempo real en las apps de iOS y watchOS
    • Visualización inmersiva en 3D en visionOS
    • Audio espacial basado en deep-space soundscape en la vista inmersiva
    • UI mejorada y un ícono de app personalizado para Vision Pro
    • Uso del stream oficial público de telemetría de la ISS de la NASA mediante Lightstreamer

Requisitos de instalación y compilación

  • En macOS se puede descargar el DMG de la versión más reciente desde el enlace de Download
  • En iOS, watchOS y visionOS, por el modelo de seguridad de Apple, hay que compilar desde el código fuente y firmar con una cuenta propia de desarrollador
  • Los requisitos previos para compilar son los siguientes
    • Xcode 15.2 o superior
    • Apple Developer account
    • Un dispositivo con iOS 17.0 o superior para la app de iOS
    • Apple Vision Pro o el simulador de visionOS
  • El procedimiento básico de compilación consiste en clonar el repositorio, abrir pISSStream.xcodeproj en Xcode, elegir tu equipo de desarrollo en Signing & Capabilities y luego compilar y ejecutar en el dispositivo de destino
  • Incluso sin una Apple Developer account, se puede ejecutar hasta 7 días en simulador o dispositivo con un perfil de aprovisionamiento gratuito

Desarrollo y despliegue en visionOS

  • Para desarrollar en visionOS, es necesario tener instalado el visionOS SDK en Xcode
  • La app usa la ImmersiveSpace API para la experiencia de visualización 3D e incluye audio espacial para aumentar la inmersión
  • Los requisitos son los siguientes
    • Mac con Apple silicon
    • Xcode 15.2 o superior
    • Apple Developer Account
    • Vision Pro con el modo desarrollador activado
    • Mac y Vision Pro conectados a la misma red Wi-Fi
  • El proceso de desarrollo inalámbrico consiste en permitir Developer Mode y Remote Development en Vision Pro, emparejar Vision Pro en Devices and Simulators de Xcode, seleccionarlo como destino de compilación y ejecutar
  • Los problemas comunes son los siguientes
    • “Device not found”: hay que verificar la conexión Wi-Fi
    • “Unauthorized device”: hay que volver a emparejar Vision Pro
    • “Build failed”: hay que actualizar el perfil de aprovisionamiento
    • “No paired Vision Pro found”: hay que verificar la conexión y el emparejamiento de Vision Pro
    • “Invalid signing”: hay que revisar la cuenta de desarrollador y el perfil de aprovisionamiento

Cómo se usa en cada plataforma

  • En macOS, cuando tanto la conexión de Lightstreamer como la recepción de la señal de telemetría de la ISS funcionan correctamente, el elemento de la barra de menú muestra 🧑🏽‍🚀🚽 y el porcentaje de llenado
  • Si se pierde la conexión o la señal de telemetría de la ISS, el elemento de la barra de menú muestra 🧑🏽‍🚀❗ y el último valor recibido, y en el menú aparece “Connecting” o “No Signal”
  • En iOS, al abrir la app se puede ver el nivel actual del tanque en una interfaz simple
  • En visionOS, se puede ver el tanque de desechos de la ISS en 3D inmersivo y visualizar su nivel de llenado en tiempo real
  • En watchOS, se puede seguir en tiempo real desde la muñeca el nivel de llenado del tanque de desechos de la ISS

Motivación y limitaciones

  • La motivación fue que resulta “ridículo pero al mismo tiempo asombroso” poder hacer en una tarde una app de broma que lee datos reales de telemetría en tiempo real del baño de una estación espacial
  • También sirvió como una buena excusa para aprender Swift, pero la motivación central fue lo absurdo de la propia app
  • Los problemas conocidos son los siguientes
    • Como es su primera app en Swift y para plataformas de Apple, no representa precisamente la cumbre de las buenas prácticas de programación
    • Puede romperse de maneras inesperadas por detalles mínimos
    • No responde activamente a datos antiguos
    • No presta demasiada atención al manejo de errores
  • Se agradecen los Pull Requests para corregir bugs
  • Conoció el stream de datos a través de ISS Mimic, que tiene muchas más estadísticas interesantes que el nivel del tanque de orina, pero no planea agregarlas a pISSStream

1 comentarios

 
GN⁺ 2024-12-25
Opiniones en Hacker News
  • Descubrí el stream de datos en https://iss-mimic.github.io/Mimic/, y hay estadísticas mucho más numerosas e interesantes que qué tan lleno está el tanque de orina
    La frase “no voy a agregar nada de eso” es la forma perfecta de comunicar los no objetivos del proyecto
    Vale la pena aprenderlo como buena práctica de comunicación open source

    • Por alguna razón me imagino una situación en la que se cortan todas las comunicaciones y el único sensor que funciona es el sensor del tanque de orina
      Sería una película donde los astronautas se comunican en código Morse controlando los cambios del tanque, y alguien con ADHD que tiene instalada esta app de la barra de menús se da cuenta de la situación y salva a todos
    • Además de https://iss-mimic.github.io/Mimic/, también vale mucho la pena leer la página del proyecto: https://github.com/ISS-Mimic/Mimic
    • Con todos esos datos, parece que podrían ayudar a hacer un ataque de ingeniería social bastante sucio contra la ISS y su tripulación
      El único problema que queda es cómo subir físicamente hasta allá
    • No debí haberme enterado de esta información peligrosa
      Ahora me dan muchas ganas de pasar demasiado tiempo haciendo un SVG de la ISS y animándolo con estos datos
    • Ahora toca crear un token que se rebasee según el valor de presión de la esclusa de aire
      Con Real World Assets(tm) se podría enganchar a los boomers
  • Sigo en Bluesky a un bot que publica posts de HN con más de 50 puntos, y me sorprendió ver de pronto un enlace de GitHub familiar
    Pensé que era el post que yo mismo había subido como Show HN hace unos 5 días (https://news.ycombinator.com/item?id=42464454) y me pregunté por qué aparecía de repente, pero en realidad no era mi post
    Me alegra sinceramente que, entre los proyectos open source que he hecho en los últimos 15 años aproximadamente, este se haya convertido en el más popular
    A la pregunta “¿pero por qué lo hiciste?”, la respuesta honesta es “porque me pareció gracioso”; estaba buscando algo simple para mi primer proyecto en Swift, vi iss-mimic y de inmediato sentí que tenía que hacer esto

    • ¿También tienes planes de ponerle AI y monetizarlo?
    • Yo intenté algo parecido: usé la ubicación de la ISS para calcular “el país al que más le orinan” los astronautas
      El script de datos debe andar funcionando por algún lado, pero lamentablemente nunca llegué a hacer el sitio web con ranking
    • ¿No has pensado convertir esto en una librería? Parece que el panel de información de todas las apps Swift necesita este indicador tan importante
    • Creo que habría que combinarlo con este indicador y fuente de datos que hice: https://www.secretbatcave.co.uk/electronics/shart-o-meter/
    • Tengo entendido que están desarrollando una forma de reciclar la orina como agua
      ¿Podrías mostrar también el nivel de agua y el momento en que se transfiere entre los dos tanques?
  • Fui líder técnico y controlador de vuelo del equipo de NASA que publicó estos datos de telemetría como parte de ISSLive
    ISS Mimic usó esta API, y en aquel entonces pasamos varios años acercando al público al programa de la estación espacial: https://youtu.be/xAhw_8B25N0?si=OZXH9sZ0bY_iX40V
    Es bastante gracioso que, 12 años después, aparezca PissStream
    Me alegra que el servidor de livestream esté siendo útil, y de hecho hay muchos otros buenos datos de telemetría
    Me encanta ISSMimic

    • No me arrepiento, y lo volveré a hacer
      Hablando en serio, quizá haya pocos usos tan extremadamente triviales de la telemetría en tiempo real de la ISS, pero me sorprende que algo tan tonto no solo sea posible, sino además muy fácil
      Mis respetos a NASA y a las personas involucradas que lo hicieron posible desde el inicio
      Al ver el panel de ISS Mimic también volví a notar que hay muchísimos datos de telemetría interesantes
    • Me pregunto si el stream de telemetría continuará hasta el final cuando la ISS sea finalmente retirada y destruida
      Si es así, cuando llegue ese momento me gustaría estar frente a la terminal esperando la última despedida de la estación
    • La música me recuerda al tema de Star Trek Voyager, y es curioso que en realidad no sea la misma música
  • Probé portarlo a la web: https://gistpreview.github.io/?76f03f49be58344bfa64c9d5d9f0ec29
    El código fuente está aquí: https://gist.github.com/simonw/76f03f49be58344bfa64c9d5d9f0ec29
    Lo hice pegando todo el repositorio de GitHub en Swift en Gemini 2.0 y pidiéndole que lo portara a una página web: https://gist.github.com/simonw/b4aec4e879e50ac74f6f9cc6e1cdc0a1

    • Incluso le puso manejo de errores básico
    • También probé pedirles algo similar a Claude y ChatGPT-4o, y la variación en los resultados fue bastante grande
      Al darle el mismo prompt a Aider y agregar “usa la misma API que el código Swift”, salió a la primera; pero con Claude, si solo decía “página web”, no lo lograba de una y hacía falta prompting varias veces más
      ChatGPT-4o alucinó la URL desde la cual cargar lightstream.js, y al final tuve que depurarlo yo mismo
      Incluso en una tarea tan pequeña, los resultados cambian mucho según las variaciones del prompt, así que es fácil entender por qué en HN siempre se dividen entre quienes ven a los asistentes de programación con LLM como la segunda venida y quienes creen que todo es puro humo
    • Para usarlo éticamente, también habría que incluir atribución por agradecimiento
    • Si alguien dice que los LLM no son mejores que copiar y pegar de Stack Overflow, pienso citar este port a la web
  • Es un buen ejemplo de procesamiento de streams

  • Soy miembro del equipo de ISS Mimic, y me gusta. Gran trabajo
    Si preocupa la privacidad de los astronautas, los valores del tanque de orina no reflejan directamente los aportes de orina de la tripulación

    • Comparado con ISS Mimic, “gran” quizá sea un poco exagerado, pero acepto el cumplido con gusto
      También me da curiosidad qué refleja realmente ese valor
      Parece que todavía no he mirado hasta lo más profundo del alma del UWMS
    • Entonces me da genuina curiosidad qué refleja en realidad
  • Los nombres de variables son precisos
    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)

    • Originalmente intenté cambiar el color de fondo y de primer plano del elemento de la barra de menús, pero las etiquetas de MenuBarExtra de SwiftUI no parecían admitir cambios de color, al menos no de una forma evidente
      Después de abandonar la personalización de la etiqueta, naturalmente olvidé borrar el enum que ya no se usaba
  • Soy la persona que hizo apolloinrealtime.org, y ahora trabajo en el programa de la ISS
    Mis respetos

    • Apollo in Real Time es un recurso abrumadoramente excelente. Gracias
  • No sabía que esto fuera información pública

    • Es público porque se opera con fondos públicos
    • Una API podría haber reemplazado una solicitud de acceso a la información
  • También podría enviar una notificación cada vez que un tripulante orina

    • Entonces, ¿no se podría identificar qué astronauta fue por la cantidad?
      Si hubiera también otros datos de análisis químico, quizá sería posible
      NASA podría vender esos datos de análisis a los fanáticos de recolectar datos para resolver sus problemas de presupuesto, y poner anuncios en todas las pantallas de la ISS
      De hecho, me sorprende que todavía ninguna startup de YC haya lanzado un inodoro inteligente así