- โปรแกรมอ่าน RSS ตัวใหม่ที่ปฏิเสธแนวคิดพื้นฐานร่วมกันของโปรแกรมอ่าน RSS ทั่วไปอย่าง ภาระหน้าที่ในการ 'จัดการรายการที่ยังไม่ได้อ่าน' ตั้งแต่รากฐาน และถ่ายทอดอุปมาของ 'สายน้ำ (River)' ที่เนื้อหาจะมาถึง คงอยู่ แล้วหายไปอย่างเป็นธรรมชาติไปทั่วทั้งอินเทอร์เฟซ
- ตั้งค่า half-life ให้แต่ละแหล่งฟีดได้ ทำให้เนื้อหาแต่ละประเภทมีอายุการแสดงผลต่างกัน เช่น ข่าวด่วน 3 ชั่วโมง เอสเซย์ 7 วัน และแก้ปัญหาที่แหล่งซึ่งโพสต์ถี่ครอบงำฟีดทั้งหมดได้ในระดับโครงสร้าง
- แทนที่จะ "ทำเครื่องหมายว่าอ่านแล้ว" ใช้อินเทอร์แอ็กชันเชิงฟิสิกส์แบบ 'ปล่อยไป' ที่ปัดการ์ดให้ลอยหายไป พร้อมออกแบบรายละเอียดทั้งแรงสั่นตอบสนอง แอนิเมชัน และการเลิกทำไว้อย่างประณีต
- แยกบล็อกส่วนตัวออกจาก URL ของฟีดเป็น 'Voices' เพื่อปฏิบัติต่อบุคคลและสื่อไม่เหมือนกัน และการวิเคราะห์หัวข้อกับคำแนะนำที่ใช้ AI ทั้งหมดจะทำงาน บนอุปกรณ์เท่านั้น
- มี UI เฉพาะสำหรับ iPhone, iPad และ Mac รวมถึงประสบการณ์แบบเดสก์ท็อปโดยเฉพาะอย่าง Command-K palette และโหมดคัดกรองเร็ว Sift
River — อินเทอร์เฟซหลัก
- หน้าหลักเป็น River ที่รวมฟีดทั้งหมดไว้เป็นสายน้ำเดียว และไม่มีตัวนับบทความที่ยังไม่ได้อ่าน
- เหตุผลที่ตัดตัวนับออกไม่ใช่เพื่อความมินิมอล แต่เป็นการตัดสินเชิงปรัชญาว่า "ตัวปัญหาคือการนับนั่นเอง"
- หลังมาถึงได้ระยะหนึ่ง บทความจะค่อย ๆ จางลงและหายไป โดยไม่ต้องมีการทำเครื่องหมายว่าอ่านแล้วหรือจัดหมวดหมู่ ราวกับน้ำที่ไหลผ่านใต้สะพาน
- แต่ละบทความมีค่า velocity ที่กำหนดว่ามันจะเก่าเร็วแค่ไหน
- ข่าวด่วน: หายไปใน 3 ชั่วโมง
- ข่าวทั่วไป: 18 ชั่วโมง
- เอสเซย์: 3 วัน
- บทสอนแบบ evergreen: สูงสุด 1 สัปดาห์
- รายการที่เก่าลงจะค่อย ๆ มืดลงก่อนหายไปทั้งหมด โดยผู้ใช้ไม่ต้องทำอะไรเพิ่มเติม
- ยึดหลักว่า "ข้อมูลมีอายุขัยตามธรรมชาติ และอินเทอร์เฟซควรเคารพสิ่งนั้น"
Half-Life — ตั้งค่า half-life รายแหล่ง
- กำหนด half-life ให้ทุกแหล่งเพื่อควบคุมระยะเวลาที่บทความจะอยู่ใน River
- ฟีดข่าวด่วนอย่าง BBC World: 3 ชั่วโมง
- Ars Technica: 18 ชั่วโมง
- แหล่งที่อัปเดตช้าอย่าง Aeon, The Marginalian: 1 สัปดาห์
- แก้ปัญหาที่ฟีดเรียงตามเวลาทั้งหมดหลังยุค Google Reader ต้องเจอ นั่นคือ แหล่งที่โพสต์เยอะกลบทุกอย่างที่เหลือ
- ต่อให้ The Verge ลงวันละ 20 ชิ้นก็จะหายไปภายในไม่กี่ชั่วโมง ขณะที่เอสเซย์ของ Craig Mod ที่ลงเดือนละครั้งจะคงอยู่ได้หลายวัน
- ตอน onboarding จะมีความเร็วให้เลือก 5 ระดับ ได้แก่ Breaking, News, Article, Essay, Evergreen โดยเลือกเพียงหนึ่งระดับต่อแหล่ง แล้ว River จะจัดการที่เหลือเอง
Release — แทน 'ทำเครื่องหมายว่าอ่านแล้ว' ด้วย 'ปล่อยไป'
- "mark as read" ที่โปรแกรมอ่าน RSS ส่วนใหญ่ใช้มีนัยทางภาษาคล้ายผู้ดูแลระบบกำลังเคลียร์เอกสาร
- Current แทนที่สิ่งนี้ด้วย Release
- ใน River หาก ปัดซ้ายค้างยาว ที่การ์ด การ์ดจะปลิวหายไป และการ์ดที่เหลือจะจัดเรียงเข้าที่เหมือนสายน้ำที่ไหลมาเติมช่องว่าง
- เมื่ออ่านถึงท้ายบทความ ปุ่ม Release จะลอยขึ้นมาจากด้านล่าง แตะครั้งเดียวก็กลับสู่ River ได้ และบทความนั้นจะหายไปแล้ว
- รายละเอียดของอินเทอร์แอ็กชันเชิงฟิสิกส์:
- ระหว่างลาก การ์ดจะยุบเล็กน้อยเพื่อ สร้างความตึงเครียด
- ยิ่งเข้าใกล้จุดวิกฤต เอนจินแรงสั่นจะสั่นถี่ขึ้นเรื่อย ๆ
- มีแสงอุ่น ๆ ปรากฏที่ขอบ และเมื่อผ่านจุดวิกฤตการ์ดจะปลิวออกไป
- มี ช่วงเวลาให้เลิกทำ: บทความที่ปล่อยไปแล้วยังคงอยู่ในหน่วยความจำอีกไม่กี่วินาทีเพื่อย้อนกลับได้ โดยไม่มีหน้าต่างยืนยัน
การปรับแต่งละเอียดรายแหล่ง
- นอกจาก velocity ยังมีตัวเลือกเพิ่มเติมสำหรับแต่ละแหล่ง
- full article fetch: ดึงข้อความเต็มจากเว็บโดยตรงสำหรับฟีดที่ให้มาแค่ย่อหน้า teaser
- โหมดเว็บคอมิก: เปลี่ยนเป็นผู้อ่านที่เน้นรูปภาพ รองรับซูม เลื่อนภาพ และแสดง alt-text (เหมาะกับ XKCD เป็นต้น)
- ปิดเสียง: ซ่อนแหล่งนั้นเป็นเวลา 1 สัปดาห์
- ปักหมุด: ตรึงแหล่งนั้นไว้ด้านบนของ River
- ตัวเลือกเหล่านี้ไม่ได้ซ่อนอยู่ลึกในเมนูตั้งค่า แต่เข้าถึงได้ด้วยการ ปัดหนึ่งครั้งบนแต่ละแหล่ง
The River Speaks — การ์ดแนะนำแบบไดนามิก
- Current สังเกตพฤติกรรมการใช้งานแล้วแทรก การ์ดแนะนำที่ไม่รบกวน ไว้ระหว่างบทความ
- หากแหล่งใดโพสต์ 18 ชิ้นในวันเดียว จะมีการ์ด "The Verge posted 18 items today" พร้อมตัวเลือก จำกัดความเร็วหรือปิดเสียง 24 ชั่วโมง
- หากข้ามบทความจากแหล่งเดียวกัน 10 ชิ้นติด จะมีคำแนะนำว่า "You've skipped 10 from TechCrunch. Quiet or remove?"
- หากอ่านแหล่งใดอย่างต่อเนื่อง จะมี คำแนะนำให้ปักหมุด และหากอ่านหัวข้อเดียวกันจากหลายแหล่งต่อเนื่อง จะมี คำแนะนำให้สร้าง Current ใหม่
- การ์ดเหล่านี้ ไม่ใช่คำแนะนำจากอัลกอริทึม และไม่ได้ออกแบบมาเพื่อเพิ่มการมีส่วนร่วมหรือแย่งชิงความสนใจ
- เปรียบเหมือน "บรรณารักษ์ที่สังเกตนิสัยของคุณแล้วจัดชั้นหนังสือใหม่อย่างเงียบ ๆ"
- การประมวลผลอัจฉริยะทั้งหมด ทำงานบนอุปกรณ์เท่านั้น: ใช้การประมวลผลภาษาธรรมชาติเพื่อระบุหัวข้อ และใช้ Foundation Models (เมื่อใช้งานได้) เพื่อตรวจสอบบทความที่เกี่ยวข้อง โดยไม่มีข้อมูลใดถูกส่งไปยังเซิร์ฟเวอร์
Voices — แยกคนออกจากสื่อ
- โปรแกรมอ่าน RSS ส่วนใหญ่มักแสดงแหล่งต่าง ๆ เป็นเพียง รายชื่อ URL ของฟีด ในแถบด้านข้าง
- Current แยกฟีดที่ คนคนเดียวเป็นผู้เขียน อย่างบล็อกส่วนตัวออกมาเป็น Voice
- "ไม่ใช่การติดตามตัวบุคคล แต่เป็นการติดตามน้ำเสียง"
- ฟีดที่ถูกกำหนดเป็น Voice จะถูกรวมไว้ในแท็บ Voices เพื่อสร้างไทม์ไลน์เรียงตามเวลา
- Voice ที่เคลื่อนไหวมากจะแสดงแบบสีเต็ม ส่วน Voice ที่เงียบจะเป็น โทนเทา เพื่อไม่บีบให้ต้องสนใจ
- แตะ Voice เพื่อกรองให้เหลือเฉพาะบทความของคนนั้น
- iPad: แสดงชื่อและ favicon ในแถบด้านข้าง
- iPhone/Mac: แสดงเป็น แถวใบหน้าที่เลื่อนได้ เหนือไทม์ไลน์
- Current จะ ตรวจจับบล็อกส่วนตัวอัตโนมัติ (จากแพตเทิร์นซับโดเมน ความถี่การโพสต์ และสัญญาณจาก byline) และเสนอให้กำหนดเป็น Voice อย่างนุ่มนวล แต่การตัดสินใจสุดท้ายเป็นของผู้ใช้
Currents — คอลเลกชันแบบกำหนดเอง
- River คือมุมมองเริ่มต้นที่รวมทุกอย่างไว้ด้วยกัน และเมื่ออยากจำกัดขอบเขตจึงใช้ Currents
- อยู่ในแถบแนวนอนด้านบนของหน้าจอ และสลับได้ด้วยการปัดครั้งเดียว
- มีให้มา 3 แบบเป็นค่าเริ่มต้น:
- River: ฟีดทั้งหมด
- Voices: คนที่ติดตามอยู่
- Read Later: บทความที่บันทึกไว้ (แคชออฟไลน์ พร้อม สีแอมเบอร์อุ่น เพื่อบอกว่าเป็น "ของฉัน")
- คำว่า "โฟลเดอร์" สื่อถึงภาระในการจัดระเบียบ และ "หมวดหมู่" ชวนให้นึกถึงสเปรดชีต จึงเลือกใช้คำว่า Currents ที่หมายถึงลำน้ำย่อยในแม่น้ำสายใหญ่
- การ์ดแนะนำแบบไดนามิกยังอาจตรวจจับรูปแบบการอ่านและ แนะนำให้สร้าง Current ใหม่ ได้ด้วย
Calm by Design — ระบบการออกแบบ
- ระบบการออกแบบเริ่มต้นจากหลักที่ว่า "ทุกอินเทอร์เฟซล้วนเป็นข้อเสนอว่าผู้ใช้ควรรู้สึกอย่างไร"
- แท็กไลน์ภายในระบบการออกแบบคือ "Calm but not boring. Beautiful but not loud. Typography as hero. Color as punctuation."
- เนื้อความหลักใช้ ฟอนต์ serif ของระบบ iOS ขนาด 16~18pt และขยายตาม Dynamic Type
- เป็นการเลือกโดยตั้งใจในสภาพแวดล้อมที่แอปส่วนใหญ่ใช้ sans-serif: ฟอนต์ serif คือมาตรฐานของการอ่านงานยาวมาตลอด 500 ปี
- ใน reader view จะขยายเป็น serif 18pt และในหน้าว่างหรือช่วงที่ชวนครุ่นคิดจะใช้ระดับไทโปกราฟีแบบ "poetic" โดยเฉพาะ
- มี ชุดสี 9 แบบ และแต่ละแบบมีทั้งโหมดสว่างและมืด:
- Bright: อิงจากสีน้ำเงินของ iOS
- Paper: งาช้างอุ่นและแอมเบอร์ ให้ความรู้สึกเหมือนอ่านใต้แสงเทียน
- Ocean: teal และ seafoam โทนเย็น
- Dusk: violet และ lavender แบบนุ่มนวล
- Ember: rust และ rose โทนอุ่น
- Midnight: ดำ OLED แท้
- Slate: ชุดสีแบบตัวแก้ไขโค้ด
- Terminal: เขียว phosphor บนพื้นดำ สำหรับคนที่จดจำ CRT ได้
- Solarized: ชุดสีอันประณีตของ Ethan Schoonover
- สีไม่ได้ใช้เพื่อการตกแต่ง แต่ใช้ในความหมายเชิง semantic: แอมเบอร์อุ่นหมายถึง "ของฉัน" เสมอ (บทความที่บันทึกไว้ คอลเลกชันส่วนตัว), teal สดหมายถึง "ของใหม่", เขียว sage คือความสำเร็จ, แดงคือข้อผิดพลาด
Motion & Touch — แอนิเมชันและแรงสั่น
- แอนิเมชันไม่ใช่ของตกแต่ง แต่เป็น คำศัพท์ (vocabulary)
- มีระดับจังหวะเวลา 5 ขั้น:
- Instant (0.15 วินาที): ฟีดแบ็กจิ๋ว
- Quick (0.22 วินาที): อินเทอร์แอ็กชันหลัก
- Standard (0.28 วินาที): การเคลื่อนย้ายการ์ด
- Gentle (0.35 วินาที): แผงต่าง ๆ
- Smooth (0.45 วินาที): การเคลื่อนไหวบรรยากาศ
- จังหวะเวลาที่สม่ำเสมอช่วยสร้าง ความไว้วางใจโดยไม่รู้ตัว
- พื้นหลังมี CurrentLines: คลื่นไซน์ 5 เส้นที่มีแอมพลิจูดและเฟสเฉพาะตัว ไหลช้า ๆ เพื่อเพิ่มชีวิตชีวาให้แอปในระดับที่ไม่ใช่แค่เห็น แต่ รู้สึกได้
- รายละเอียดการสื่อสารด้วยแรงสั่น:
- ท่า Release: แตะหนึ่งครั้งเมื่อถึง 50% ของแรงตึง, เมื่อเข้าใกล้จุดวิกฤตจะเป็น จังหวะพัลส์ที่เร่งเหมือนการเต้นของหัวใจ, และเมื่อทริกเกอร์จะเป็นการยืนยันแบบ สองชั้น ด้วยแรงแตะแรงตามด้วยแตะนุ่ม
- เมื่อการเลื่อน River นิ่ง จะมี "ลมหายใจออก" แบบละเอียด และเมื่อเปิดบทความของ Voice จะมีพัลส์ที่นุ่มนวล
- เมื่อเปิดใช้ Reduce Motion การเคลื่อนไหวทั้งหมดจะหยุดอย่างสมบูรณ์: ตัดเส้นบรรยากาศออก การเปลี่ยนหน้าทำทันที ไม่มีข้อยกเว้น
- การเข้าถึงไม่ใช่สวิตช์เปิดปิดฟีเจอร์ แต่เป็น ข้อจำกัดในการออกแบบที่ทำให้ทั้งระบบดีขึ้น
Four Swipes — ปรับแต่งท่าปัดได้
- ทุกการ์ดใน River มี ช่องท่าปัด 4 ทิศทาง: ซ้ายสั้น ซ้ายยาว ขวาสั้น ขวายาว
- ค่าเริ่มต้นคือ: ซ้ายสั้น=ทำเครื่องหมายว่าอ่านแล้ว, ซ้ายยาว=Release, ขวาสั้น=บันทึก, ขวายาว=แชร์
- ทุกช่องสามารถ แมปใหม่ เป็นการทำงานที่ต้องการได้: ทำเครื่องหมายว่าอ่านแล้ว/ยังไม่ได้อ่าน, Release, บันทึก, ปิดเสียงแหล่ง, แก้ไขแหล่ง, แชร์ หรือไม่ทำอะไรเลย
- หน้าตั้งค่ามี การ์ดพรีวิวแบบสด ให้ลองปัดก่อนนำไปใช้จริง
- การปัดสั้นและยาวใช้จุดวิกฤตที่ต่างกันและมี แรงสั่นตอบสนองที่แยกแยะได้
The Small Things — ฟีเจอร์เล็ก ๆ
- ปัดจากขอบซ้าย: ค้นหา, ปัดจากขอบขวา: ตั้งค่า
- ในช่วงแรก ๆ จะมีคำใบ้ปรากฏเมื่อเข้าใกล้ขอบ และจะเลิกแสดงอัตโนมัติหลังครบ 3 ครั้ง
- แสดงความคืบหน้าในการอ่านเป็น ภาษาธรรมชาติ แทนเปอร์เซ็นต์ เช่น "Just started", "Halfway through" บนการ์ดใน River
- full-text search: ทำดัชนีบทความทั้งหมดที่เคยเลื่อนผ่านและทั้งหมดที่เคยอ่าน เพื่อให้ผลลัพธ์ปรากฏทันทีที่พิมพ์ ทำให้ฟีดกลายเป็น ความทรงจำที่ค้นหาได้
- Read Later ไม่ใช่คิว แต่เป็น ห้องสมุด: บทความที่บันทึกไว้จะถูกแคชแบบออฟไลน์ ไม่หมดอายุ และรออยู่เหมือนหนังสือบนชั้นโดยไม่มีตัวนับ
Beyond the Phone — ประสบการณ์บน iPad และ Mac
- ไม่ใช่แค่ให้แอป iPhone ขยายไปอยู่บนจอใหญ่ แต่เป็นการออกแบบ ประสบการณ์เฉพาะของแต่ละแพลตฟอร์ม
- iPad:
- แถบด้านข้างแบบพับได้: แหล่งต่าง ๆ, Currents, และ Voices จะเลื่อนเข้ามาเมื่อจำเป็น และหายไปเมื่อไม่ต้องการ
- โหมดแนวนอน: แถบด้านข้างและตัวอ่านวางคู่กัน เปิดบทความแล้วก็ไม่หลงตำแหน่งใน River
- โหมดแนวตั้ง: ซ่อนแถบด้านข้าง ให้ River กินพื้นที่เต็มจอ
- Mac:
- ออกแบบแบบ keyboard-first
- Command-K: ใช้ command palette เพื่อสลับ Current, ย้ายไปยังแหล่ง, ค้นหา, เปลี่ยนธีม และทำทุกอย่างได้โดยไม่ต้องไล่เมนู
- โหมด Sift: โหมดที่สอดคล้องกับวิธีคัดกรองงานจริงบนเดสก์ท็อป กดปุ่มเดียวเพื่อให้แต่ละบทความแสดงเต็มจอ แล้วใช้ ปุ่มเดียว สำหรับ Release, บันทึก หรือข้าม
What I Left Out — สิ่งที่ตั้งใจตัดออก
- ไม่มีตัวนับบทความที่ยังไม่ได้อ่านโดยสิ้นเชิง: ไม่ใช่แค่ "ยังไม่ได้ใส่" แต่คือ "จะไม่มีวันใส่" เป็นการตัดสินใจทางปรัชญา ตัวนับยังไม่ได้อ่านอาจทำให้แอปดีขึ้นในฐานะผู้จัดการ RSS แต่ทำให้แย่ลงในฐานะผู้อ่าน RSS
- ไม่มีเลย์เอาต์ 3 พาเนล: ตัดโครงสร้างแถบฟีด + รายการบทความ + หน้าต่างอ่านออกไป รับคำถามอย่างจริงจังว่าทำไมทุกคนถึงลอกเลย์เอาต์ที่ Brent Simmons คิดขึ้นในปี 2002 กันมาตลอด 20 ปี
- ไม่มีการคิวเรตด้วยอัลกอริทึม: มองว่าโซเชียลมีเดียได้แทนที่ phantom obligation ด้วย "ความกลัวว่าจะพลาดสิ่งที่กำลังเกิดขึ้นตอนนี้ (FOMO)" River จึงไหลตามลำดับการมาถึงเท่านั้น และมีเพียง velocity ที่ผู้ใช้ตั้งไว้เท่านั้นที่มีผล
- story threading: แม้สร้างระบบที่รวมบทความเกี่ยวข้องจากหลายแหล่งเป็นเธรดเชิงเรื่องเล่าเสร็จแล้ว แต่ เปิดตัวโดยปิดการทำงานไว้ แม้การตรวจสอบด้วย Foundation Models บนอุปกรณ์จะทำงานแล้วก็ตาม เพราะวิธีนำเสนอยังไม่เหมาะสม จึงเลือกพักไว้จนกว่าจะพร้อม หรืออาจตลอดไป แทนที่จะปล่อยของที่ยังไม่เสร็จครึ่ง ๆ กลาง ๆ
- งบประมาณด้านประสิทธิภาพ: ทุกอุปกรณ์ต้องได้ 60fps และระหว่างเลื่อนต้องใช้หน่วยความจำต่ำกว่า 150MB
- CurrentLines ทำงานที่ 30fps ไม่ใช่ 60fps เพื่อเผื่อทรัพยากร
- การเปลี่ยนหน้าบางส่วนถูกทำให้ง่ายกว่าต้นแบบ: เพราะบนฮาร์ดแวร์รุ่นเก่าเกิดเฟรมดรอป
- "ประสิทธิภาพคือฟีเจอร์ และอาการกระตุก (jank) คือบั๊ก"
3 ความคิดเห็น
แนวคิดน่าสนใจดี แต่จากประสบการณ์ที่ผ่านมา ความพยายามในอุดมคติแบบนี้ไม่ค่อยมีที่ประสบความสำเร็จนัก..
จนถึงตอนนี้น่าจะยังเป็น Feedly ที่ฟีเจอร์ AI ก็ดี และโดยรวมใช้งานได้ลงตัวที่สุดนะ
ตั้งแต่ใช้ Reeder มาก็แทบไม่ได้มองรีดเดอร์ตัวอื่นเลยครับ
ถ้าเป็นคนที่ใช้ RSS รีดเดอร์อยู่แล้ว นี่เป็นบทความที่ชวนให้สนใจมากเลยครับ
แนวคิดการออกแบบก็ดีนะ แต่เพราะยังอยู่ช่วงเริ่มต้นหรือเปล่า จุดเสียใหญ่คือยังไม่มีการปรับแต่งคีย์ลัดเองได้
เดี๋ยวจะลองใช้อีกสักสองสามวันครับ
ความรู้สึกว่าต้องอ่านให้หมดที่คอยหลอกหลอน