นัดกับแสง
บทที่เพิ่มใน DSM 1.1 ให้ปฏิทินรู้จักฟ้า: ดวงอาทิตย์ ดวงจันทร์ ทางช้างเผือก และปรากฏการณ์ที่มองเห็นได้ด้วยตาเปล่า ทุกอย่างคำนวณในเครื่อง ไม่ต่อเน็ต ไม่ขอสิทธิ์ตำแหน่ง มีเป้าหมายสองข้อ คือถ่ายรูปให้ได้แสงที่ต้องการ กับทำให้นัดสำคัญอย่างเดท มื้อเย็นกับครอบครัว หรือทริป ได้เวลาและทิศที่ดีที่สุดของวันนั้น ตัวเลขในบทนี้เป็นค่าจริงของ 27 ก.ย. ถึง 31 ต.ค. 2569 ลากแถบเวลาด้านบนแล้วทุกจอขยับตาม บทนี้อนุมัติแล้ว แต่แอปยังไม่ได้ทำตาม
ในบทนี้
- ปฏิทินที่มีชั้นฟ้าข้างขึ้นข้างแรมเป็นรูปดวงจันทร์ที่มุมของวัน ปรากฏการณ์เป็นป้ายชั้นที่สี่ที่ไม่แย่งที่ของงาน แถบฟ้าของวันบอกชั่วโมงที่ดวงจันทร์อยู่บนฟ้า วันหยุดที่ว่างช่วงแสงทองขึ้นเป็นคำชวน
- หน้าฟ้า เข็มทิศสามมิติโดมฟ้าเหนือเข็มทิศ หมุนตามเครื่อง เส้นทางดวงอาทิตย์คือแถบฟ้าของวันที่ยกขึ้นไปบนฟ้า ลากแถบเวลาเพื่อดูว่าแสงจะมาจากทิศไหน สูงเท่าไร เงายาวแค่ไหน
- ปรากฏการณ์และทางช้างเผือกเฉพาะเรื่องใหญ่ที่เห็นได้จากที่นี่ บอกเวลาและทิศที่ต้องมอง ทางช้างเผือกบอกเป็นช่วงเวลาที่ฟ้ามืดและใจกลางอยู่สูงพอ ทั้งรายคืนและทั้งปี
- แสงกับนัดบอกโอกาสของนัด แล้วแอปเสนอเวลาที่ฟ้าเป็นใจ เตือนเมื่อเวลาที่ตั้งไว้พลาดสิ่งที่ตั้งใจไปดู และวางแผนแสงของทริปตามที่ที่จะไป
หลักของระบบฟ้า
หกข้อในภาพรวมยังใช้ครบ ข้อด้านล่างเพิ่มเข้ามาเฉพาะเรื่องฟ้า ถ้าเจอกรณีที่ไม่ได้เขียนไว้ ให้เลือกทางที่ตรงกับข้อเหล่านี้
ฟ้าเป็นฉาก ไม่ใช่กิจกรรม
ของบนฟ้าไม่มีสีของตัวเอง ใช้หมึกกับสีของแถบฟ้าเท่านั้น สีสดบนจอยังเป็นของกิจกรรมของผู้ใช้ กับสีของตอนนี้ซึ่งคือดวงอาทิตย์
พูดเมื่อเปลี่ยนการตัดสินใจ
วันธรรมดาที่ฟ้าไม่มีอะไร ปฏิทินหน้าตาเท่าเดิม ฟ้าจะขึ้นมาบนนัดก็ต่อเมื่อมันทำให้นัดดีขึ้นได้ หรือเวลาที่ตั้งไว้กำลังจะพลาด
ทิศต้องชี้ได้จริง
ทุกทิศที่บอกเป็นองศามีภาพให้หันตาม โดมหมุนตามเครื่อง ด้านไกลของโดมคือด้านที่กำลังหันหน้าไป
แถบฟ้าเส้นเดียวกันทุกที่
เส้นทางดวงอาทิตย์บนโดมคือแถบฟ้า 24 ชั่วโมงของ drawer ที่ดัดขึ้นไปบนฟ้า ใช้สีชุดเดียวกัน ตำแหน่งบนแถบกับบนโดมจึงอ่านเทียบกันได้
เฉพาะที่ตามองเห็น
ปรากฏการณ์ต้องเห็นได้ด้วยตาเปล่า จากที่ที่ผู้ใช้อยู่ ในเวลาที่ฟ้ามืดพอ ถ้าไม่ครบสามข้อก็ไม่ขึ้นปฏิทิน
บอกสิ่งที่ไม่รู้
แอปรู้เรขาคณิตของฟ้า ไม่รู้เมฆ ภูเขาที่บังขอบฟ้า และแสงเมือง ทุกจอที่ชวนให้ออกไปดูต้องบอกข้อนี้ไว้ในประโยคเดียว
สามจอที่เปลี่ยน
หน้าแรกได้ชั้นฟ้าเพิ่ม โดยไม่มีแถบเมนูใหม่ ทางเข้าหน้าฟ้าคือเวลาขึ้นตกที่มุมขวาของหัวเดือน ซึ่งมีอยู่แล้วตั้งแต่ 1.0 หน้ารายละเอียดของนัดได้แถวฟ้าของนัดนั้น และหน้าฟ้าเป็นหน้าใหม่ บนจอพับหน้าฟ้าไปอยู่ในแผงขวาแทนรายการของวัน แบบเดียวกับหน้ารายละเอียด
จากเอกสารไปโค้ด
ทั้งหมดเป็นฟังก์ชันล้วนใน core/model ทดสอบได้แบบเดียวกับ ColorMathTest ไม่มีสิทธิ์ใหม่ใน manifest และไม่มีอะไรเขียนลง Calendar Provider จนกว่าผู้ใช้จะกดนัดเอง
| ส่วน | ในโค้ด | งาน | หน้า |
|---|---|---|---|
| ตำแหน่งดวงอาทิตย์ ดวงจันทร์ ดาวเคราะห์ | SkyCalculator ใน core/model เรียก Astronomy Engine (io.github.cosinekitty:astronomy, MIT) | ใหม่ แทน SolarCalculator กับ LunarCalculator | เข็มทิศฟ้า |
| ฟ้าของหนึ่งวัน | SkyDay: ขึ้น ตก แสงทอง ฟ้าน้ำเงิน มืดสนิท จันทร์ขึ้นตก ผ่าน LocalDaylight | ขยายจาก SunTimes | ปฏิทิน |
| ชั้นฟ้าบนเดือน | layoutWeek() ชั้นที่สี่ กับ WeekPainter วาดดวงจันทร์และดาว | ปรับ | ปฏิทิน |
| ปรากฏการณ์ | skyEvents(range, place) คำนวณสด รวมเข้า MonthEvents ใน CalendarRepository ตารางฝนดาวตกอยู่ใน assets/sky | ใหม่ ไม่เขียนลง provider | ปรากฏการณ์ |
| ทางช้างเผือก | milkyWayNight(date, place) | ใหม่ | ปรากฏการณ์ |
| หน้าฟ้า | SkyRoute(date, time, place) เป็น PaneRoute ใน ui/sky/ โดมวาดบน Canvas เดียว หมุนด้วย TYPE_ROTATION_VECTOR แก้ทิศเหนือจริงด้วย GeomagneticField | ใหม่ | เข็มทิศฟ้า |
| โอกาสของนัด | Occasion เก็บใน Room คู่กับสีที่กำหนดเอง ผูกด้วย sync id | ใหม่ | แสงกับนัด |
| เวลาที่ฟ้าเป็นใจ และคำเตือน | suggestTimes(occasion, date, place), lightHint(event) | ใหม่ | แสงกับนัด |
| ที่ของฟ้า | DaylightRepository: สถานที่ของนัด (Geocoder ของระบบ) ก่อน แล้วทริปของวันนั้น แล้วเมืองที่เลือกในตั้งค่า แล้วเมืองหลักของเขตเวลา | ปรับ | แสงกับนัด |
| แจ้งเตือนตามฟ้า | WidgetRefresh แบบเดียวกัน: setWindow ไม่ปลุกเครื่อง ไม่ขอสิทธิ์ exact alarm | ใหม่ | แสงกับนัด |
ตั้งแต่ 1.1 เวลาขึ้นตกของฉากตัวอย่างในทุกหน้าเป็นค่าที่คำนวณได้จริงของกรุงเทพฯ วันที่ 2 ต.ค. 2569 คือ 06:07 กับ 18:07 (1.0 ประมาณไว้ที่ 06:09 กับ 18:03)
ขอบเขตที่เลือกไว้
สามเรื่องนี้เปลี่ยนหน้าตาไม่มาก แต่เปลี่ยนความแม่นและขอบเขตของงาน แต่ละข้อบอกทางที่เลือก และเมื่อไรควรกลับมาดูใหม่
- ตำแหน่งของผู้ใช้ ตอนนี้ใช้เมืองหลักของเขตเวลา คนเชียงใหม่จะเห็นเวลาของกรุงเทพฯ ซึ่งคลาดราว 9 นาที จึงให้เลือกเมืองเองในตั้งค่า ไม่ขอสิทธิ์ตำแหน่ง ถ้าอยากให้แม่นระดับจุดที่ยืนอยู่ ต้องขอ
ACCESS_COARSE_LOCATIONแบบไม่บังคับ - วันพระ ปฏิทินจันทรคติไทยเป็นกฎ ไม่ใช่ตำแหน่งจริงของดวงจันทร์ จึงต่างจากข้างขึ้นข้างแรมทางดาราศาสตร์ได้หนึ่งวัน ปฏิทินจึงแสดงเฉพาะดวงจันทร์จริง ถ้าจะมีวันพระต้องทำเป็นชั้นของมันเอง
- เมฆและแสงเมือง ไม่รู้ทั้งสองอย่างถ้าไม่ต่อเน็ต แอปจึงบอกตรง ๆ ว่าไม่รู้ ถ้าภายหลังแอปมีสิทธิ์
INTERNETด้วยเหตุอื่น ค่อยเพิ่มพยากรณ์เมฆเป็นชั้นบนสุดของคำแนะนำ