Ứng dụng thanh menu macOS hiển thị trạng thái bể chứa nước tiểu của ISS theo thời gian thực
(github.com/Jaennaet)- pISSStream là ứng dụng hiển thị dung tích bể chứa nước tiểu của Trạm Vũ trụ Quốc tế (ISS) theo thời gian thực, hỗ trợ thanh menu macOS cũng như iOS, watchOS và visionOS
- Dữ liệu được lấy từ luồng telemetry ISS công khai chính thức của NASA bằng Lightstreamer, và hiển thị tỷ lệ bể được lấp đầy mới nhất khi trạm mặt đất đang nhận tín hiệu
- Trên macOS, ứng dụng hiển thị 🧑🏽🚀🚽 cùng tỷ lệ lấp đầy trên thanh menu; nếu kết nối hoặc tín hiệu telemetry bị ngắt, ứng dụng hiển thị 🧑🏽🚀❗ cùng giá trị nhận được gần nhất và trạng thái “Connecting” hoặc “No Signal”
- iOS và watchOS hiển thị mực bể theo thời gian thực qua giao diện đơn giản, còn visionOS cung cấp trực quan hóa 3D dựa trên ImmersiveSpace API và âm thanh không gian
- Vì đây là ứng dụng Swift và Apple platform đầu tiên, phần xử lý dữ liệu cũ và xử lý lỗi chưa được chú trọng; dự án nhận Pull Request sửa lỗi nhưng không có kế hoạch bổ sung các thống kê ISS khác
pISSStream làm gì
- pISSStream là ứng dụng hiển thị dung tích bể chứa nước tiểu của International Space Station theo thời gian thực
- Các nền tảng được hỗ trợ là macOS, watchOS, iOS, visionOS
- Các tính năng chính gồm:
- Theo dõi mực bể chứa nước tiểu của ISS theo thời gian thực
- Tích hợp thanh menu macOS
- Cập nhật thời gian thực trong ứng dụng iOS và watchOS
- Trực quan hóa 3D nhập vai trên visionOS
- Âm thanh không gian dựa trên deep-space soundscape trong màn hình nhập vai
- UI được cải thiện và biểu tượng ứng dụng tùy chỉnh cho Vision Pro
- Sử dụng luồng telemetry ISS công khai chính thức của NASA qua Lightstreamer
Điều kiện cài đặt và build
- Với macOS, có thể tải DMG bản phát hành mới nhất từ liên kết Download
- iOS, watchOS, visionOS cần được build từ mã nguồn và ký bằng tài khoản nhà phát triển riêng do mô hình bảo mật của Apple
- Điều kiện tiên quyết để build như sau:
- Xcode 15.2 trở lên
- Apple Developer account
- Thiết bị chạy iOS 17.0 trở lên cho ứng dụng iOS
- Apple Vision Pro hoặc trình mô phỏng visionOS
- Quy trình build cơ bản là clone repository, mở
pISSStream.xcodeprojtrong Xcode, chọn development team trong Signing & Capabilities, rồi build và chạy trên thiết bị đích - Ngay cả khi không có Apple Developer account, bạn vẫn có thể chạy trên trình mô phỏng hoặc thiết bị tối đa 7 ngày bằng provisioning profile miễn phí
Phát triển và phân phối visionOS
- Để phát triển visionOS, cần cài visionOS SDK trong Xcode
- Ứng dụng sử dụng ImmersiveSpace API cho trải nghiệm trực quan hóa 3D và bao gồm âm thanh không gian để tăng độ nhập vai
- Yêu cầu như sau:
- Mac dùng Apple silicon
- Xcode 15.2 trở lên
- Apple Developer Account
- Vision Pro đã bật Developer Mode
- Mac và Vision Pro kết nối cùng mạng Wi-Fi
- Quy trình phát triển không dây là bật Developer Mode và cho phép Remote Development trên Vision Pro, sau đó ghép đôi Vision Pro trong Devices and Simulators của Xcode, chọn làm đích build rồi chạy
- Các vấn đề thường gặp gồm:
- “Device not found”: cần kiểm tra kết nối Wi-Fi
- “Unauthorized device”: cần ghép đôi lại Vision Pro
- “Build failed”: cần cập nhật provisioning profile
- “No paired Vision Pro found”: cần kiểm tra kết nối và ghép đôi Vision Pro
- “Invalid signing”: cần kiểm tra tài khoản nhà phát triển và provisioning profile
Cách sử dụng theo từng nền tảng
- Trên macOS, khi cả kết nối Lightstreamer và việc nhận tín hiệu telemetry ISS đều bình thường, mục trên thanh menu sẽ hiển thị 🧑🏽🚀🚽 cùng tỷ lệ lấp đầy
- Nếu kết nối hoặc tín hiệu telemetry ISS bị ngắt, mục trên thanh menu sẽ hiển thị 🧑🏽🚀❗ cùng giá trị nhận được gần nhất, và menu sẽ hiển thị “Connecting” hoặc “No Signal”
- Trên iOS, khi mở ứng dụng, bạn có thể xem mực bể hiện tại qua một giao diện đơn giản
- Trên visionOS, bạn có thể xem bể chất thải của ISS dưới dạng 3D nhập vai và trực quan hóa mực lấp đầy theo thời gian thực
- Trên watchOS, bạn có thể theo dõi mực lấp đầy của bể chất thải ISS theo thời gian thực ngay trên cổ tay
Động cơ tạo ra và hạn chế
- Động cơ tạo ra ứng dụng là ý tưởng rằng có thể tạo trong một buổi chiều một ứng dụng đùa đọc dữ liệu telemetry thời gian thực thật sự từ nhà vệ sinh của trạm vũ trụ, điều vừa “lố bịch” vừa đáng kinh ngạc
- Đây cũng là một cái cớ tốt để học Swift, nhưng động cơ cốt lõi là chính sự phi lý của ứng dụng
- Các vấn đề đã biết gồm:
- Đây là ứng dụng Swift và Apple platform đầu tiên nên không phải đỉnh cao của các thực hành lập trình tốt
- Có thể hỏng theo những cách bất ngờ chỉ vì các tác nhân nhỏ
- Không chủ động xử lý dữ liệu cũ
- Không quá chú trọng xử lý lỗi
- Pull Request sửa lỗi được hoan nghênh
- Luồng dữ liệu được biết đến thông qua ISS Mimic, và dù ISS Mimic có nhiều thống kê thú vị hơn rất nhiều so với mực bể chứa nước tiểu, chúng sẽ không được bổ sung vào pISSStream
1 bình luận
Các ý kiến trên Hacker News
Tôi biết đến luồng dữ liệu ở https://iss-mimic.github.io/Mimic/, và nó có nhiều thống kê thú vị hơn rất nhiều so với việc bồn nước tiểu đầy đến đâu
Câu “sẽ không thêm bất kỳ thứ nào trong số đó” chính là cách hoàn hảo để truyền tải mục tiêu không hướng tới của dự án
Đáng học như một thực hành tốt về giao tiếp trong mã nguồn mở
Có lẽ sẽ thành một bộ phim trong đó các phi hành gia điều chỉnh mức thay đổi của bồn để liên lạc bằng mã Morse, rồi một người mắc ADHD có cài ứng dụng menu bar này nhận ra tình hình và cứu tất cả
Vấn đề còn lại là làm sao đưa cơ thể mình lên tới đó
Giờ lại muốn dành quá nhiều thời gian để tạo SVG của ISS rồi gắn animation bằng dữ liệu này
Có thể dụ được thế hệ boomer bằng Real World Assets(tm)
Tôi theo dõi một bot trên Bluesky đăng các bài HN đạt hơn 50 điểm, và khá bất ngờ khi đột nhiên thấy một liên kết GitHub quen thuộc
Tôi đã tự đăng nó lên Show HN khoảng 5 ngày trước (https://news.ycombinator.com/item?id=42464454), nên lúc đầu thắc mắc sao nó lại xuất hiện, nhưng hóa ra không phải bài của tôi
Tôi thật sự vui vì trong số các dự án mã nguồn mở mình làm trong khoảng 15 năm qua, đây đã trở thành dự án phổ biến nhất
Còn với câu hỏi “nhưng tại sao lại làm nó?”, câu trả lời thành thật là “vì tôi thấy nó buồn cười”; tôi đang tìm một thứ đơn giản cho dự án Swift đầu tiên, thấy iss-mimic và lập tức cảm giác mình phải làm cái này
Script lấy dữ liệu chắc vẫn còn chạy ở đâu đó, nhưng tiếc là tôi chưa làm được hẳn website bảng xếp hạng
Có thể hiển thị cả mực nước và cho thấy thời điểm chuyển đổi giữa hai bồn không?
Tôi từng là technical lead kiêm flight controller của nhóm ở NASA đã công khai dữ liệu telemetry này như một phần của ISSLive
ISS Mimic đã dùng API này, và khi đó chúng tôi đã giới thiệu chương trình trạm vũ trụ với công chúng trong vài năm: https://youtu.be/xAhw_8B25N0?si=OZXH9sZ0bY_iX40V
12 năm sau lại có PissStream thì khá buồn cười
Rất vui vì máy chủ livestream vẫn được dùng tốt, và thật ra còn nhiều dữ liệu telemetry hay khác nữa
Tôi thích ISSMimic
Nói nghiêm túc thì có lẽ hiếm có trường hợp nào dùng telemetry thời gian thực của ISS theo cách cực kỳ tào lao như thế này, nhưng thật đáng kinh ngạc là việc ngớ ngẩn như vậy không chỉ khả thi mà còn rất dễ làm
Xin bày tỏ sự kính trọng tới NASA và những người liên quan đã khiến điều này có thể ngay từ đầu
Nhìn dashboard ISS Mimic cũng khiến tôi nhận ra lại rằng có rất nhiều dữ liệu telemetry thú vị
Nếu có, khi khoảnh khắc đó đến, tôi muốn ngồi trước terminal chờ lời tạm biệt cuối cùng của trạm
Tôi đã port cái này lên web: https://gistpreview.github.io/?76f03f49be58344bfa64c9d5d9f0ec29
Mã nguồn ở đây: https://gist.github.com/simonw/76f03f49be58344bfa64c9d5d9f0ec29
Tôi tạo nó bằng cách dán toàn bộ repo GitHub Swift vào Gemini 2.0 và yêu cầu port thành trang web: https://gist.github.com/simonw/b4aec4e879e50ac74f6f9cc6e1cdc0a1
Khi đưa cùng prompt cho Aider và thêm “hãy dùng cùng API với code Swift” thì chạy được ngay lần đầu, nhưng với Claude, nếu chỉ nói “trang web” thì không được ngay và cần thêm vài prompt nữa
ChatGPT-4o thì hallucinate URL để tải lightstream.js, và cuối cùng tôi phải tự debug
Ngay cả với một việc nhỏ như thế này, kết quả thay đổi rất lớn theo prompt, nên khá dễ hiểu vì sao trên HN lần nào cũng có người xem trợ lý lập trình LLM như lần giáng thế thứ hai, còn người khác thì coi tất cả chỉ là phét lác
Đây là một ví dụ hay về xử lý stream
Tôi là thành viên nhóm ISS Mimic, và tôi thích nó. Làm rất tốt
Nếu lo về quyền riêng tư của phi hành gia, thì số liệu bồn nước tiểu không phản ánh trực tiếp việc phi hành đoàn thêm nước tiểu vào
Tôi cũng tò mò con số đó thực sự phản ánh điều gì
Có vẻ tôi vẫn chưa nhìn sâu vào tận linh hồn của UWMS
Tên biến rất chuẩn
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)Sau khi từ bỏ việc tùy biến label, tôi rất tự nhiên quên xóa enum không dùng đến
Tôi là người tạo apolloinrealtime.org, và hiện đang làm việc trong chương trình ISS
Xin bày tỏ sự kính trọng
Tôi không biết đây là thông tin công khai
Có lẽ cũng có thể gửi thông báo mỗi khi phi hành đoàn đi tiểu
Nếu có thêm dữ liệu phân tích hóa học thì có thể làm được
NASA có thể bán dữ liệu phân tích đó cho những người nghiện sưu tầm dữ liệu để giải quyết vấn đề ngân sách, và hiển thị quảng cáo trên mọi màn hình của ISS
Thật ra tôi còn ngạc nhiên là vẫn chưa có startup YC nào tung ra loại bồn cầu thông minh như vậy