Steven
Steven3 นาทีที่อ่าน

สี่รีลีสใน 26 ชั่วโมง: งานเดินท่อของ language setting กับ "bridge release"

GeekBye v1.7.6 ถึง v1.8.1: language setting ที่ไม่เคยออกไปพ้นแล็ปท็อป, overlay แบบ Cmd+/ ที่โชว์ keybinding จริงของคุณ, เวอร์ชันที่ไม่มีการแก้โค้ดเลยสักบรรทัด — และปัญหาไก่กับไข่ของการย้าย feed อัปเดตอัตโนมัติ

วิศวกรรม
รีลีส
เดสก์ท็อป
GeekBye รีลีส
สี่รีลีสใน 26 ชั่วโมง: งานเดินท่อของ language setting กับ "bridge release"

ระหว่างเช้าวันพฤหัสถึงบ่ายวันศุกร์ในเดือนกุมภาพันธ์ 2026 GeekBye ปล่อยสี่รีลีส: v1.7.6, v1.7.7, v1.8.0 และ v1.8.1 — 16 คอมมิต ห่างกันราว 26 ชั่วโมงระหว่างแท็กแรกกับแท็กสุดท้าย ไม่มีตัวไหนเป็นข่าวพาดหัวได้ด้วยตัวเอง แต่รวมกันแล้วพวกมันคือภาพเหมือนของสิ่งที่สัปดาห์แห่งรีลีสเล็ก ๆ บรรจุอยู่จริง ๆ: ฟีเจอร์ที่ในที่สุดก็เดินทางจนจบ, overlay เพิ่มคุณภาพชีวิต, เลขเวอร์ชันที่ไม่มีโค้ดอยู่ข้างใน และงาน release engineering ที่ให้บทเรียนได้จริง ๆ หนึ่งชิ้น

ภาษาที่ไม่เคยออกไปพ้นแล็ปท็อป

GeekBye มี setting สำหรับภาษาของ transcript มาตั้งแต่กันยายน 2025 มันทำงานได้ — ในเครื่อง เลือกภาษาสเปน แล้วไปป์ไลน์ speech-to-text บนเครื่องก็ถอดเสียงภาษาสเปนอย่างขยันขันแข็ง แต่ลอง grep โค้ดเบสของ v1.7.5 หา setting ตัวนั้นดู คุณจะเจอมันแค่สามที่พอดี: audio handler, Settings UI และ settings hook ไม่อยู่ใน API client ไม่อยู่ใน session tracker เป็นเวลาสี่เดือน ทุก request ที่ออกจากเครื่องตาบอดเรื่องภาษา: session record ฝั่ง backend ไม่รู้เลยว่าตัวเองแทนภาษาอะไร และ AI chat ได้รับ transcript ภาษาสเปนโดยไม่มีคำใบ้สักนิดว่ามันเป็นภาษาสเปน

v1.7.6 คือรีลีสที่ setting ตัวนี้เดินทางจนจบ — สองคอมมิต หนึ่งวัน ตอนนี้การเริ่ม audio session พก transcriptLanguage ใน payload และ request แบบ stream-chat ของ AI ก็ได้ฟิลด์เดียวกัน โดยร้อยผ่าน helper ตัวเล็ก ๆ ที่อ่าน setting แล้วจงใจคืน undefined เมื่อค่าเป็น auto หรือยังไม่ถูกตั้ง เพื่อให้ backend รุ่นเก่า degrade อย่างนุ่มนวลแทนที่จะสำลักฟิลด์ที่มันไม่รู้จัก ใน diff ยังมีตัวแก้โบนัสเงียบ ๆ ซ่อนอยู่ด้วย: การจะส่งภาษาได้ การเริ่ม session ต้องย้ายไปหลังการ resolve ภาษา — ซึ่งตามที่เราอ่าน มันปิด error path หนึ่งไปด้วย ที่ session อาจถูกเริ่มไปแล้ว (และถูกนับเข้า limit) แล้วกลายเป็นกำพร้าเมื่อการ resolve ภาษาล้มเหลวในอึดใจถัดมา

บทเรียนนี้ขยายผลได้ทั่วไป: setting ไม่ได้ถือว่า ship แล้วเมื่อมันมี UI และมีผลลัพธ์ มันถือว่า ship แล้วเมื่อมันไปถึงผู้บริโภคทุกรายที่ควรรู้เรื่องมัน ของเราหยุดอยู่ที่เส้นแบ่งเครือข่ายนานสี่เดือน และไม่มีใครสังเกต เพราะพฤติกรรมในเครื่อง — พฤติกรรมที่มองเห็นได้ — ถูกต้องมาตลอด (บันทึกไว้หน่อยว่า นี่เป็นแค่ก้าวแรกแบบหยาบ ๆ ของการจัดการภาษา; การสอนให้ AI ตอบเป็นภาษาของบทสนทนาจริง ๆ เป็นบทที่มาทีหลังมากในเรื่องนี้)

Cmd+/ — overlay ที่ไม่โกหกเรื่อง keybinding ของคุณ

ฟีเจอร์ฝั่งผู้ใช้ของ v1.8.0 คือ overlay คีย์ลัดบน Cmd+/ — คอมโพเนนต์ใหม่ 193 บรรทัด กับหนึ่งการตัดสินใจเชิงดีไซน์ที่ควรขโมยไปใช้: มันไม่ render cheat sheet แบบ hardcode มันดึงconfig คีย์ลัดตัวเป็น ๆ มาแล้ว render customKeys || defaultKeys ผู้ใช้ที่ remap คีย์ไปแล้วจึงเห็นคีย์ของตัวเอง overlay คีย์ลัดที่โชว์ค่า default ให้คนที่เปลี่ยนมันไปแล้วไม่ใช่เอกสาร; มันคือข้อมูลผิด ๆ ที่จัด typography มาสวย

ที่เหลือเป็นการเก็บงานความถูกต้องเล็ก ๆ น้อย ๆ: overlay จัดตำแหน่งตัวเองไว้ซ้ายหรือขวาของการ์ดแอป แล้วแต่ว่าจอฝั่งไหนมีที่ว่าง และปิดตัวเองด้วย Escape ด้วยการกด Cmd+/ ซ้ำ หรือด้วยการคลิกข้างนอก ตัว Cmd+/ เองก็เข้าร่วมระบบ preset ที่ remap ได้แบบเดียวกับคีย์ลัดตัวอื่นทุกตัว — ซึ่งสำคัญ เพราะ Cmd+/ คือ "toggle comment" ใน editor ส่วนใหญ่ และเครื่องมือสำหรับนักพัฒนาไม่ควรไปนั่งทับคีย์ของ editor แบบที่คุณย้ายมันหนีไม่ได้

bridge release

งานวิศวกรรมที่น่าสนใจเกิดขึ้นในเลขเวอร์ชันที่ไม่มีใครมองซ้ำสองรอบ v1.8.0 ยังย้าย releases ของโปรเจกต์ไปยัง GitHub organization ใหม่ด้วย — ดูผิวเผินก็แค่จัดบ้าน org แต่ auto-update ของแอปเดสก์ท็อปมีคุณสมบัติอยู่ข้อหนึ่ง: URL ของ feed ถูกฝังอยู่ใน binary การติดตั้ง v1.8.0 ทุกตัว poll releases ของ organization ใหม่ ส่วนการติดตั้งทุกตัวที่อยู่ข้างนอกโลกจริง — ทั้งหมดเป็น v1.7.7 หรือเก่ากว่า — poll ตัวเก่าไปตลอดกาล เว้นแต่จะมีอะไรไปโผล่ที่นั่น

นั่นแหละไก่กับไข่: publish รีลีสถัดไปของคุณไปที่ repo ใหม่ที่เดียว แล้วฝูง client ที่มีอยู่ทั้งหมดจะไม่มีวันเห็นมันเลย สิบหกนาทีหลังแท็ก v1.8.0 แฟล็กใหม่ก็ลงจอดในสคริปต์รีลีส: --publish-owner ซึ่งเขียนทับปลายทางที่ electron-builder อัปโหลด artifact หลัง build เสร็จ — อย่างที่คอมเมนต์ในโค้ดบอกไว้ชัด ๆ ว่า "โดยไม่กระทบโค้ดแอปที่คอมไพล์แล้ว" เคล็ดลับมีแค่นั้น และมันคือรอยต่อที่ถูกต้องพอดีเป๊ะ: feed ที่ฝังอยู่ใน binary กับปลายทางอัปโหลดของ artifact เป็นการตัดสินใจสองเรื่องคนละเรื่องกัน และการ migration ต้องการให้ทั้งสองถูกแยกออกจากกันหนึ่งรีลีส build v1.8.1 ให้ชี้ไปที่ feed ใหม่ อัปโหลดมันขึ้น repo เก่า; client เก่าเห็นอัปเดตที่นั่น ติดตั้งมัน แล้วตื่นขึ้นมา poll organization ใหม่ commit message เรียกสิ่งนี้ว่า "bridge release" (รีลีสสะพานเชื่อม) ซึ่งเป็นชื่อที่ถูกต้องแล้ว v1.8.1 ถูกแท็กหลัง v1.8.0 ไป 2 ชั่วโมง 20 นาที (สำหรับที่มาที่ไปว่าทำไมโปรเจกต์นี้ถึงปฏิบัติต่อ auto-update ด้วยความเคารพระดับเฉียดความกลัว ดูอัปเดตอัตโนมัติที่ทำให้แอปของเราฆ่าไม่ตาย)

แล้ว v1.7.7 ล่ะ? หนึ่งคอมมิต ตัว version bump เอง ไม่มีตัวแก้ ไม่มี revert ไม่มีคำอธิบายใน history — การอ่านที่ดีที่สุดของเราคือมันเป็นการ publish ที่ต้องรันซ้ำ และเรายอมรับแบบนั้นดีกว่าแต่งเรื่องขึ้นมา บางครั้งเลขเวอร์ชันมีอยู่เพราะการปล่อยซอฟต์แวร์เป็นกระบวนการในโลกจริงที่มีสะดุดแบบโลกจริง ไม่ใช่ pure function ของ source tree ส่วนคำถามว่าทำไม 1.7 ถึงกลายเป็น 1.8 ตั้งแต่แรก: ไม่มีคอมมิตไหนบอก แต่การย้าย feed คือเส้นแบ่งความเข้ากันได้ที่มีความหมายจริง — binary 1.8.x ทุกตัวมองไปที่ organization คนละอันกับ binary 1.7.x ทุกตัว — และนั่นสมควรได้ minor bump ยิ่งกว่าฟีเจอร์ไหน ๆ

สามสิ่งที่สัปดาห์นี้สอนเรา

  1. ตามรอย setting ไปให้ถึงผู้บริโภคทุกราย language preference "เสร็จแล้ว" อยู่สี่เดือนขณะที่ backend ยังตาบอด การที่พฤติกรรมในเครื่องซึ่งมองเห็นได้นั้นถูกต้อง คือสิ่งที่ทำให้ช่องว่างนี้รอดมาได้พอดี — คำถามสำหรับ audit คือ "ใครอีกบ้างที่ควรรู้ค่านี้?" ถามซ้ำที่ทุกเส้นแบ่ง
  2. จง render config ตัวเป็น ๆ ไม่ใช่เอกสาร overlay คีย์ลัดอ่าน source of truth ตัวเดียวกับที่ระบบคีย์ลัดใช้ วิธีอื่นใดจะเริ่มเพี้ยนตั้งแต่ครั้งแรกที่ผู้ใช้ customize
  3. การย้าย feed ต้องมีหนึ่งรีลีสที่อาศัยอยู่ในสองโลกพร้อมกัน feed ใหม่ใน binary, repo เก่าสำหรับอัปโหลด ถ้าเครื่องมือรีลีสของคุณแยกสองเป้าหมายนี้ออกจากกันไม่ได้ จงเพิ่มแฟล็กก่อนที่จะต้องใช้มัน — ของเรามาถึงหลังจากถูกต้องการไปแล้ว 16 นาที ซึ่งก็ใกล้พอจะนับว่าทันเวลา

สำหรับบทก่อนหน้าของเรื่องราวยุค v1 ดูหน้า Login นั่นแหละคือ Demo (v1.7.5); และสำหรับภาพรวมทั้งเส้นเรื่อง ดูกายวิภาคของการส่งมอบซอฟต์แวร์ให้สมบูรณ์แบบ

บทความที่เกี่ยวข้อง

การประชุมที่กลับมาหาเจอได้จริง ๆ: รีลีส Timeline
Steven
Steven3 นาทีที่อ่าน

การประชุมที่กลับมาหาเจอได้จริง ๆ: รีลีส Timeline

GeekBye v1.7.3 เปลี่ยน dropdown ของการประชุมให้กลายเป็น timeline ของจริง — วันที่แบบมนุษย์อ่านง่าย, ค้นหาได้, breadcrumb ที่บอกว่าคุณอยู่ในการประชุมไหน ส่วนข้างใต้: race ของ auto-select, screenshot ที่เกิดก่อนการประชุมของตัวมันเอง และการแก้บั๊ก Windows 5 ครั้งใน 28 นาที

วิศวกรรม
UX
เดสก์ท็อป
รีลีสขนาด 127 คอมมิตจริง ๆ แล้วคืออะไร
Steven
Steven2 นาทีที่อ่าน

รีลีสขนาด 127 คอมมิตจริง ๆ แล้วคืออะไร

GeekBye v1.7.0 คือ 127 คอมมิตในสิบเอ็ดวัน จากภายนอกมันดูเหมือนเรื่องเล็ก ๆ ร้อยกว่าเรื่อง แต่จากภายในมันคือฟีเจอร์ใหญ่สองอย่างที่ถักทอเข้าด้วยกัน — และหนึ่งในนั้นถูกสร้างผิดที่ แล้วต้องรื้อออกมาสร้างใหม่กลางรีลีส นี่คือกายวิภาคของรีลีสขนาดใหญ่

วิศวกรรม
รีลีส
สถาปัตยกรรม
ส่งมอบสามสิบภาษาโดยไม่มีตาข่ายรองรับ
Steven
Steven4 นาทีที่อ่าน

ส่งมอบสามสิบภาษาโดยไม่มีตาข่ายรองรับ

GeekBye v1.8.3 ต่อ react-i18next เข้าไปและแปลทั้งแอปเป็น 30 ภาษา ส่วนที่เป็น library นั้นเป็นงานปกติ ส่วนที่น่าสนใจคือสิ่งที่ขาดหายไป: ไม่มีการเช็ก key parity และไม่มีตัวดึงสตริง — ภาษาอังกฤษที่ hardcode ไว้จึงหลุดออกมา, typo ภาษาเดนมาร์กหลุดขึ้น production, และ changelog เองก็ตกลงกันไม่ได้ว่าแอปพูดได้ 28, 29 หรือ 30 ภาษากันแน่

วิศวกรรม
i18n
Desktop