แอป macOS บนแถบเมนูที่แสดงสถานะถังปัสสาวะของ ISS แบบเรียลไทม์
(github.com/Jaennaet)- pISSStream เป็นแอปที่แสดงความจุของถังปัสสาวะบนสถานีอวกาศนานาชาติ (ISS) แบบเรียลไทม์ รองรับ macOS เมนูบาร์ รวมถึง iOS, watchOS และ visionOS
- ข้อมูลรับมาจากสตรีมเทเลเมทรี ISS สาธารณะอย่างเป็นทางการของ NASA ผ่าน Lightstreamer และจะแสดงเปอร์เซ็นต์การเติมล่าสุดของถังเมื่อสถานีภาคพื้นกำลังรับสัญญาณอยู่
- บน macOS จะแสดง 🧑🏽🚀🚽 และเปอร์เซ็นต์การเติมบนแถบเมนู และเมื่อการเชื่อมต่อหรือสัญญาณเทเลเมทรีหลุด จะเปลี่ยนเป็น 🧑🏽🚀❗ พร้อมค่าที่รับได้ล่าสุด และสถานะ “Connecting” หรือ “No Signal”
- iOS และ watchOS ใช้อินเทอร์เฟซแบบเรียบง่ายเพื่อแสดงระดับถังแบบเรียลไทม์ ส่วน visionOS มีการแสดงผลแบบ 3D ด้วย ImmersiveSpace API และเสียงเชิงพื้นที่
- เนื่องจากเป็นแอป Swift และบนแพลตฟอร์ม Apple ตัวแรก จึงไม่ได้จัดการกับข้อมูลเก่าและการจัดการข้อผิดพลาดอย่างเข้มงวดนัก รับ Pull Request สำหรับแก้บั๊ก แต่ไม่มีแผนจะเพิ่มสถิติอื่นของ ISS
pISSStream ทำอะไร
- pISSStream เป็นแอปที่แสดงความจุของถังปัสสาวะของ International Space Station แบบเรียลไทม์
- แพลตฟอร์มที่รองรับคือ macOS, watchOS, iOS, visionOS
- ความสามารถหลักมีดังนี้
- ตรวจสอบระดับถังปัสสาวะของ ISS แบบเรียลไทม์
- ทำงานรวมกับ macOS เมนูบาร์
- อัปเดตแบบเรียลไทม์ในแอป iOS และ watchOS
- การแสดงผล 3D แบบดื่มด่ำบน visionOS
- เสียงเชิงพื้นที่บนหน้าจอแบบดื่มด่ำที่อิงจาก deep-space soundscape
- UI ที่ปรับปรุงสำหรับ Vision Pro และไอคอนแอปแบบกำหนดเอง
- ใช้สตรีมเทเลเมทรี ISS สาธารณะอย่างเป็นทางการของ NASA ผ่าน Lightstreamer
ข้อกำหนดสำหรับการติดตั้งและบิลด์
- สำหรับ macOS สามารถดาวน์โหลด DMG รุ่นล่าสุดได้จากลิงก์ Download
- iOS, watchOS, visionOS ต้องบิลด์จากซอร์สและเซ็นด้วยบัญชีนักพัฒนาของตนเอง เนื่องจากโมเดลความปลอดภัยของ Apple
- เงื่อนไขก่อนบิลด์มีดังนี้
- Xcode 15.2 ขึ้นไป
- Apple Developer account
- อุปกรณ์ iOS 17.0 ขึ้นไปสำหรับแอป iOS
- Apple Vision Pro หรือ visionOS Simulator
- ขั้นตอนการบิลด์พื้นฐานคือโคลนรีโพซิทอรี จากนั้นเปิด
pISSStream.xcodeprojใน Xcode เลือกทีมพัฒนาใน Signing & Capabilities แล้วบิลด์และรันบนอุปกรณ์เป้าหมาย - แม้ไม่มี Apple Developer account ก็ยังรันบนซิมูเลเตอร์หรืออุปกรณ์ได้สูงสุด 7 วันด้วย provisioning profile แบบฟรี
การพัฒนาและแจกจ่ายบน visionOS
- การพัฒนาบน visionOS ต้องติดตั้ง visionOS SDK ใน Xcode
- แอปใช้ ImmersiveSpace API สำหรับประสบการณ์การแสดงผล 3D และมีเสียงเชิงพื้นที่เพื่อเพิ่มความสมจริง
- ข้อกำหนดมีดังนี้
- Mac ที่ใช้ Apple silicon
- Xcode 15.2 ขึ้นไป
- Apple Developer Account
- Vision Pro ที่เปิดใช้งานโหมดนักพัฒนาแล้ว
- Mac และ Vision Pro ที่เชื่อมต่ออยู่บนเครือข่าย Wi‑Fi เดียวกัน
- ขั้นตอนการพัฒนาแบบไร้สายคือ อนุญาต Developer Mode และ Remote Development บน Vision Pro จากนั้นจับคู่ Vision Pro ใน Devices and Simulators ของ Xcode แล้วเลือกเป็นอุปกรณ์เป้าหมายเพื่อรัน
- ปัญหาที่พบบ่อยมีดังนี้
- “Device not found”: ต้องตรวจสอบการเชื่อมต่อ Wi‑Fi
- “Unauthorized device”: ต้องจับคู่ Vision Pro ใหม่
- “Build failed”: ต้องอัปเดต provisioning profile
- “No paired Vision Pro found”: ต้องตรวจสอบการเชื่อมต่อและการจับคู่ Vision Pro
- “Invalid signing”: ต้องตรวจสอบบัญชีนักพัฒนาและ provisioning profile
วิธีใช้งานในแต่ละแพลตฟอร์ม
- บน macOS เมื่อทั้งการเชื่อมต่อ Lightstreamer และการรับสัญญาณเทเลเมทรี ISS ทำงานปกติ รายการบนแถบเมนูจะแสดง 🧑🏽🚀🚽 พร้อมเปอร์เซ็นต์การเติม
- เมื่อการเชื่อมต่อหรือสัญญาณเทเลเมทรี ISS หลุด รายการบนแถบเมนูจะแสดง 🧑🏽🚀❗ พร้อมค่าที่รับได้ล่าสุด และในเมนูจะแสดง “Connecting” หรือ “No Signal”
- บน iOS เมื่อเปิดแอปจะเห็นระดับถังปัจจุบันผ่านอินเทอร์เฟซแบบเรียบง่าย
- บน visionOS สามารถดูถังของเสียของ ISS แบบ 3D ที่ดื่มด่ำ และเห็นภาพระดับการเติมแบบเรียลไทม์
- บน watchOS สามารถติดตามระดับการเติมของถังของเสีย ISS แบบเรียลไทม์ได้จากข้อมือ
แรงจูงใจในการสร้างและข้อจำกัด
- แรงจูงใจในการสร้างคือความรู้สึกว่า การทำแอปมุกที่อ่านข้อมูลเทเลเมทรีจริงแบบเรียลไทม์จากห้องน้ำของสถานีอวกาศได้ภายในช่วงบ่ายเดียวเป็นเรื่องที่ “ตลกสิ้นดีแต่ก็น่าทึ่งในเวลาเดียวกัน”
- มันยังเป็นข้ออ้างที่ดีในการเรียน Swift ด้วย แต่แรงจูงใจหลักคือความ ไร้สาระสุดขีด ของตัวแอปเอง
- ปัญหาที่ทราบมีดังนี้
- เนื่องจากเป็นแอป Swift และแพลตฟอร์ม Apple ตัวแรก จึงไม่ใช่งานที่เป็นสุดยอดของแนวปฏิบัติการเขียนโค้ดที่ดี
- อาจพังได้ในแบบคาดไม่ถึงจากทริกเกอร์เล็กน้อย
- ไม่ได้จัดการกับข้อมูลเก่าอย่างจริงจัง
- ไม่ได้ใส่ใจกับการจัดการข้อผิดพลาดมากนัก
- ยินดีรับ Pull Request สำหรับแก้บั๊ก
- ผู้พัฒนารู้จักสตรีมข้อมูลนี้ผ่าน ISS Mimic และแม้ ISS Mimic จะมีสถิติที่มากกว่าและน่าสนใจกว่าระดับถังปัสสาวะมาก แต่ก็ไม่มีแผนจะเพิ่มเข้าใน pISSStream
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
ได้รู้จักสตรีมข้อมูลจาก https://iss-mimic.github.io/Mimic/ ซึ่งมีสถิติที่น่าสนใจและมากกว่าแค่ถังปัสสาวะเต็มแค่ไหนเยอะมาก
ประโยคที่ว่า “จะไม่เพิ่มสิ่งเหล่านั้นสักอย่าง” นี่แหละเป็นวิธีสื่อสาร สิ่งที่ไม่ใช่เป้าหมาย ของโปรเจกต์ได้สมบูรณ์แบบ
น่าเอาเป็นกรณีศึกษาด้านแนวปฏิบัติที่ดีของการสื่อสารในโอเพนซอร์ส
น่าจะกลายเป็นหนังที่นักบินอวกาศควบคุมปริมาณการเปลี่ยนแปลงของถังเพื่อสื่อสารเป็นรหัสมอร์ส แล้วมีใครสักคนที่เป็น ADHD และติดตั้งแอปเมนูบาร์นี้ไว้สังเกตเห็นสถานการณ์จนช่วยทุกคนได้
ปัญหาที่เหลืออยู่ตอนนี้คือจะส่งตัวเองขึ้นไปถึงตรงนั้นได้อย่างไร
ชักอยากเสียเวลาไปทำ SVG ของ ISS แล้วเอาข้อมูลนี้มาใส่แอนิเมชันด้วย
น่าจะใช้ Real World Assets(tm) ล่อคนรุ่นบูมเมอร์ได้
ติดตามบอตบน Bluesky ที่โพสต์กระทู้ HN ที่ได้เกิน 50 คะแนนอยู่ แล้วจู่ ๆ ก็เห็นลิงก์ GitHub ที่คุ้นตาเลยตกใจ
มันเป็นโพสต์ที่ผมเคยลงเองใน Show HN เมื่อประมาณ 5 วันก่อน (https://news.ycombinator.com/item?id=42464454) เลยสงสัยว่าทำไมถึงโผล่มาอีก ที่จริงแล้วไม่ใช่โพสต์ของผม
ดีใจจริง ๆ ที่ในบรรดาโปรเจกต์โอเพนซอร์สที่ทำมาตลอดราว 15 ปี นี่กลายเป็นโปรเจกต์ที่ได้รับความนิยมที่สุด
สำหรับคำถามว่า “แล้วทำไปทำไม?” คำตอบที่จริงใจก็คือ “เพราะคิดว่ามันตลกดี” และตอนนั้นกำลังหาอะไรเรียบง่ายสำหรับโปรเจกต์ Swift แรก พอเห็น iss-mimic ก็รู้ทันทีว่าต้องทำอันนี้
สคริปต์สำหรับข้อมูลน่าจะยังทำงานอยู่ที่ไหนสักแห่ง แต่น่าเสียดายที่ไม่ได้ทำถึงขั้นเป็น เว็บไซต์ตารางจัดอันดับ
แสดง ระดับน้ำ ด้วยได้ไหม และแสดงจังหวะที่สลับระหว่างสองถังได้หรือเปล่า?
ผมเคยเป็น หัวหน้าฝ่ายเทคนิคและ flight controller ของทีมที่ NASA ซึ่งเผยแพร่ข้อมูลเทเลเมทรีนี้เป็นส่วนหนึ่งของ ISSLive
ISS Mimic ใช้ API นี้ และตอนนั้นเราได้เผยแพร่ความรู้เกี่ยวกับโครงการสถานีอวกาศให้สาธารณชนมาหลายปี: https://youtu.be/xAhw_8B25N0?si=OZXH9sZ0bY_iX40V
ผ่านไป 12 ปีแล้วมี PissStream ออกมา ก็ตลกดีมาก
ดีใจที่เซิร์ฟเวอร์ไลฟ์สตรีมถูกใช้งานอย่างดี และจริง ๆ แล้วยังมีข้อมูลเทเลเมทรีดี ๆ อีกมาก
ชอบ ISSMimic
ถ้าพูดจริงจัง ตัวอย่างการใช้เทเลเมทรีแบบเรียลไทม์ของ ISS ที่ไร้สาระสุดขีดแบบนี้คงมีไม่มาก แต่ก็น่าทึ่งที่เรื่องโง่ ๆ แบบนี้ไม่เพียงทำได้ แต่ยังทำได้ง่ายมากด้วย
ขอคารวะ NASA และผู้เกี่ยวข้องที่ทำให้สิ่งนี้เป็นไปได้ตั้งแต่แรก
พอดูแดชบอร์ด ISS Mimic แล้วก็รู้สึกอีกครั้งว่ามี ข้อมูลเทเลเมทรี ที่น่าสนใจมากจริง ๆ
ถ้าใช่ พอถึงเวลานั้นคงอยากนั่งรอคำอำลาครั้งสุดท้ายของสถานีอยู่หน้าเทอร์มินัล
ลองพอร์ตอันนี้ไปเป็นเว็บแล้ว: https://gistpreview.github.io/?76f03f49be58344bfa64c9d5d9f0ec29
ซอร์สโค้ดอยู่ที่นี่: https://gist.github.com/simonw/76f03f49be58344bfa64c9d5d9f0ec29
ทำโดยวางทั้ง GitHub repository ของ Swift ลงใน Gemini 2.0 แล้วขอให้พอร์ตเป็นเว็บเพจ: https://gist.github.com/simonw/b4aec4e879e50ac74f6f9cc6e1cdc0a1
พอให้พรอมป์เดียวกันกับ Aider แล้วเพิ่มว่า “ให้ใช้ API เดียวกับโค้ด Swift” ก็สำเร็จในครั้งเดียว แต่ Claude ถ้าบอกแค่ว่า “เว็บเพจ” จะทำครั้งเดียวไม่สำเร็จ ต้องพรอมป์เพิ่มอีกหลายรอบ
ChatGPT-4o สร้าง URL สำหรับโหลด lightstream.js แบบหลอนขึ้นมา สุดท้ายต้องดีบักเอง
แม้งานเล็ก ๆ แบบนี้ ผลลัพธ์ก็ยังต่างกันมากตามการเปลี่ยนพรอมป์ เลยเข้าใจได้ง่ายว่าทำไมใน HN ถึงมีทั้งคนที่มองว่า ผู้ช่วยเขียนโค้ด LLM เหมือนการเสด็จมาครั้งที่สอง และคนที่มองว่าทั้งหมดเป็นแค่คำโม้
เป็นตัวอย่างที่ดีของ การประมวลผลสตรีม
ผมเป็นสมาชิกทีม ISS Mimic และชอบสิ่งนี้ งานยอดเยี่ยม
ถ้ากังวลเรื่องความเป็นส่วนตัวของนักบินอวกาศ ค่าถังปัสสาวะไม่ได้สะท้อนการเติมปัสสาวะโดยตรงจากลูกเรือ
ผมก็สงสัยเหมือนกันว่าค่านั้นสะท้อนอะไรจริง ๆ
ดูเหมือนว่ายังไม่ได้มองลึกเข้าไปถึงจิตวิญญาณของ UWMS
ชื่อตัวแปรตรงประเด็นมาก
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)หลังจากเลิกปรับแต่ง label แล้ว ก็ลืมลบ enum ที่ไม่ได้ใช้ออกไปตามธรรมชาติ
ผมเป็นคนทำ apolloinrealtime.org และตอนนี้ทำงานอยู่ใน โปรแกรม ISS
ขอคารวะ
ไม่รู้เลยว่านี่เป็นข้อมูลสาธารณะ
น่าจะส่งการแจ้งเตือนได้ทุกครั้งที่ลูกเรือปัสสาวะ
ถ้ามีข้อมูลวิเคราะห์ทางเคมีอื่น ๆ ด้วยก็อาจเป็นไปได้
NASA อาจขายข้อมูลวิเคราะห์นั้นให้พวกคลั่งไคล้การเก็บข้อมูลเพื่อแก้ปัญหางบประมาณ แล้วติดโฆษณาบนหน้าจอทุกจอของ ISS ก็ได้
กลับน่าแปลกใจด้วยซ้ำที่ยังไม่มีสตาร์ทอัพ YC ทำ ส้วมอัจฉริยะ แบบนี้ออกมา