1 điểm bởi GN⁺ 2024-12-25 | 1 bình luận | Chia sẻ qua WhatsApp
  • 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.xcodeproj trong 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

 
GN⁺ 2024-12-25
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ở

    • Không hiểu sao tôi lại hình dung cảnh mọi liên lạc đều bị cắt, và cảm biến duy nhất còn hoạt động là cảm biến bồn nước tiểu
      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ả
    • Không chỉ https://iss-mimic.github.io/Mimic/, trang dự án cũng rất đáng đọc: https://github.com/ISS-Mimic/Mimic
    • Nếu có toàn bộ dữ liệu đó, có vẻ nó sẽ giúp thực hiện một cuộc tấn công social engineering khá bẩn nhắm vào ISS và phi hành đoàn
      Vấn đề còn lại là làm sao đưa cơ thể mình lên tới đó
    • Lẽ ra tôi không nên biết thông tin nguy hiểm kiểu này
      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
    • Giờ đến lượt tạo một token được rebase theo giá trị áp suất airlock
      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

    • Có kế hoạch gắn AI vào đây để kiếm tiền không?
    • Tôi cũng từng thử thứ tương tự: dùng vị trí của ISS để tính “quốc gia bị các phi hành gia tè lên nhiều nhất”
      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ó ý định biến cái này thành thư viện không? Có vẻ mọi ứng dụng Swift đều cần chỉ số quan trọng này trong bảng thông tin
    • Có lẽ nên kết hợp chỉ số này với nguồn dữ liệu tôi đã làm: https://www.secretbatcave.co.uk/electronics/shart-o-meter/
    • Theo tôi biết thì họ đang phát triển cách tái chế nước tiểu thành nước
      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

    • Không xin lỗi đâu, và tôi sẽ làm nữa
      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ị
    • Tôi tự hỏi khi ISS cuối cùng ngừng hoạt động và bị phá hủy, liệu luồng telemetry có tiếp tục đến tận phút cuối không
      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
    • Nhạc làm tôi liên tưởng đến theme của Star Trek Voyager, nhưng thú vị là thực ra không phải cùng một bản nhạc
  • 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

    • Nó còn thêm cả xử lý lỗi cơ bản
    • Tôi cũng thử giao việc tương tự cho Claude và ChatGPT-4o, và kết quả dao động khá lớn
      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
    • Nếu dùng cho đúng đạo đức thì cũng nên kèm ghi công vì lòng biết ơn
    • Nếu ai đó nói LLM chẳng hơn gì copy-paste từ Stack Overflow, tôi sẽ viện dẫn bản port lên web này
  • Đâ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

    • So với ISS Mimic thì “rất tốt” có thể hơi quá, nhưng tôi xin nhận lời khen
      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
    • Vậy thật sự nó phản ánh điều gì? Tôi thực sự tò mò
  • 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)

    • Ban đầu tôi định đổi màu nền và màu chữ của mục trên menu bar, nhưng label MenuBarExtra của SwiftUI dường như không hỗ trợ đổi màu, ít nhất là không theo cách thấy ngay được
      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

    • Apollo in Real Time là một tư liệu xuất sắc đến choáng ngợp. Cảm ơn
  • Tôi không biết đây là thông tin công khai

    • Vì được vận hành bằng tiền công nên nó được công khai
    • Có thể một API đã thay thế cho yêu cầu tự do thông tin
  • Có lẽ cũng có thể gửi thông báo mỗi khi phi hành đoàn đi tiểu

    • Vậy liệu có thể nhận diện đó là phi hành gia nào dựa trên lượng nước tiểu không?
      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