นี่คือตัวจัดการคลิปบอร์ดสำหรับ macOS ที่เก็บสิ่งที่คัดลอกไว้ทีละรายการ แล้วค่อยเลือกนำมาใช้ภายหลัง
ผมสร้างมันขึ้นมาโดยคำนึงถึงการหารายได้ตั้งแต่แรก วันแรกก็เริ่มคุยเรื่องราคาแล้ว และอีกสามวันถัดมาก็ตัดสินใจได้ว่าจะขายด้วยโมเดลแบบไหน ดังนั้นมันไม่ใช่งานอดิเรกที่ทำไปเรื่อยแล้วเผลอปล่อยออกมา แต่พอทำเสร็จแล้ว คนที่ใช้มันมากที่สุดกลับเป็นผมเอง และนั่นคือจุดที่น่าพอใจที่สุด
ช่วงที่รู้สึกว่าดีที่สุดคือเวลาใช้งานร่วมกับ AI เวลารันหลายพรอมป์ต์หรือสั่งให้มันปล่อยผลลัพธ์ออกมาที่คลิปบอร์ด ข้อมูลจะถูกสะสมไว้เป็นระเบียบ และต่อให้กำลังทำอย่างอื่นอยู่ก็ไม่พลาด
คุณสามารถแก้ไขเนื้อหาที่สะสมไว้ได้ ตัวจัดการคลิปบอร์ดส่วนใหญ่เป็นประวัติแบบอ่านอย่างเดียว แต่ที่นี่สามารถเปิดแต่ละรายการขึ้นมาแก้ไขได้ทันทีและบันทึกด้วย ⌘S มีเลขบรรทัด รองรับการค้นหาด้วย ⌘F และแทนที่ด้วย ⌘R การไม่ต้องย้ายสิ่งที่คัดลอกไปแก้ในเอดิเตอร์แล้วคัดลอกกลับมาใหม่ มีผลมากกว่าที่คิด
ระหว่างพัฒนาก็ใส่ของเล็ก ๆ น้อย ๆ ที่จำเป็นเข้าไปด้วย เช่น ฟอร์แมต JSON·SQL·Mongo, XML↔YAML, ถอดรหัส JWT, เข้ารหัส Base64/URL, ยูนิกซ์ไทม์สแตมป์, SHA-256, AES, เลือกการ์ดสองใบแล้วกด ⌘D เพื่อดู diff ระดับบรรทัด สิ่งเหล่านี้ทำขึ้นเพราะขี้เกียจเปิดแท็บเบราว์เซอร์
ในสภาพตั้งต้น แอปจะไม่ขอสิทธิ์ระบบแม้แต่อย่างเดียว ข้อมูลทั้งหมดถูกเข้ารหัสและเก็บไว้ในเครื่องเท่านั้น ไม่มีการวิเคราะห์ ไม่มีการติดตาม และไม่มีเซิร์ฟเวอร์
บันทึก 24 วัน
มันถูกสร้างด้วย Claude Code ผมเปิดดูเพราะมีประวัติการสนทนาเหลืออยู่ พบว่าตลอด 24 วันมีทั้งหมด 310 รายการ และเมื่อแยกตามลักษณะก็มี 28 รายการที่เป็นการชี้ข้อบกพร่อง และ 15 รายการที่เป็นการปฏิเสธหรือย้อนข้อเสนอ ถ้าเรียงตามลำดับเวลาก็เป็นแบบนี้
7/5 (30 รายการ) — คำสั่งแรกคือ "ถามความต้องการจากผมแล้วช่วยทำให้ชัดเจนขึ้น" ภายในวันนั้นก็ตั้งชื่อและ bundle ID, ใส่ base64 กับ beautify, และเพิ่มมุมมองรายละเอียดด้วย ⌘⏎ เรื่องที่ว่า "นี่น่าจะขายบน App Store ที่ $4.99 ไหม" ก็ถูกพูดถึงในวันนั้นเช่นกัน แล้วก็ถอดฟีเจอร์วางอัตโนมัติออกไปด้วย "ดูเหมือนจะกลายเป็นการวางโดยไม่ตั้งใจ งั้นเอาออกเถอะ"
7/6~7/7 — การถามว่า "เนื้อหาในคลิปบอร์ดถูกเก็บไว้ที่ไหน?" นำไปสู่การเพิ่มการเข้ารหัสแบบเก็บในเครื่อง แก้บั๊กที่เวลา copy จาก Excel แล้วถูกมองเป็นรูปภาพ และไล่แก้ปัญหาที่คีย์ลัด ⌘⇧V ใช้งานไม่ได้อยู่สองวัน โดยถึงขั้นรัน log show เองแล้วส่ง log กัน
7/8 — ตัดสินใจโมเดลการขายได้แน่นอน ตอนแรกชั่งใจระหว่างเก็บเงินตั้งแต่ต้นกับปล่อยฟรีแล้วให้จ่ายในแอป โดยคุยกันว่า "หรือจะขายแบบเสียเงินตั้งแต่แรกไปเลย? ฟรีแค่ใช้งาน 30 วันอะไรแบบนั้น" → สุดท้ายเลือกแบบทดลองใช้ฟรี 30 วัน แล้วก็คืนฟีเจอร์วางอัตโนมัติที่เอาออกไปเมื่อสามวันก่อน เพราะพอใช้เองแล้วรู้สึกว่า "เลือกแล้วไม่วางให้ทันทีมันไม่สะดวก"
7/11 — สร้างฟีเจอร์ snippet ขึ้นมาแล้วฆ่าทิ้ง "ประสบการณ์ใช้งานห่วยมาก" → "ลองเสนอทิศทางปรับปรุงมา ถ้ายังแย่ก็ลบฟีเจอร์" → "ไม่ เอาออกเลย" การตัดสินใจทิ้งสิ่งที่สร้างไปแล้วคือเรื่องที่ยากที่สุด
7/12~7/16 — ตอนแรกพิจารณาการออกไลเซนส์ผ่าน Lemon Squeezy และ PayPal ก่อนจะสรุปมาที่ App Store หลังจากนั้นก็วนอยู่กับปัญหา verify ที่อยู่ไม่ผ่าน, รหัสธนาคาร, W-8BEN และความกังวลเรื่องจดทะเบียนธุรกิจ ใช้เวลากับเรื่องพวกนี้มากกว่าการเขียนโค้ดเสียอีก
7/19 — ส่งเข้าตรวจรีวิวไปแล้วด้วยซ้ำ แต่ระหว่างดูสกรีนช็อตของ launcher ก็พบว่าชื่อแอปถูกติดตั้งเป็น DevClip-AppStore เลยยกเลิกการส่งแล้ว build ใหม่
7/25 — ถูกรีเจกต์ เหตุผลคือ Guideline 2.4.5 (Performance: Hardware Compatibility)
รีเจกต์ และการตัดสินใจที่ปิดจบใน 24 วัน
ฟีเจอร์ที่กลายเป็นเหตุผลให้ถูกรีเจกต์ ดันเป็นฟีเจอร์นั้นพอดี นั่นคือ 'วางทันที' ที่ผมเคยถอดออกเองเมื่อวันที่ 5 กรกฎาคมเพราะคิดว่าเสี่ยง แต่พออีกสามวันต่อมาลองใช้แล้วรู้สึกไม่สะดวกจึงเอากลับมา มันใช้สิทธิ์ Accessibility และ Apple มองว่านี่เป็น "การใช้งานที่ไม่ได้มีจุดประสงค์ด้านการช่วยการเข้าถึง"
ถ้าถอดฟีเจอร์นี้ออกก็จบง่าย แต่เพราะมันเป็นฟีเจอร์ที่เคยเอาออกไปครั้งหนึ่งแล้วและต้องเอากลับมาเพราะจำเป็น คราวนี้ผมเลยเลือกจะรักษามันไว้ แทนที่จะลบออก ผมเปลี่ยนวิธีการขอสิทธิ์แทน
เดิมทีก็ปิดไว้เป็นค่าเริ่มต้นอยู่แล้ว และจะขอสิทธิ์ก็ต่อเมื่อผู้ใช้เปิดเองเท่านั้น ปัญหาคือผู้รีวิวไม่มีวิธีตรวจสอบข้อเท็จจริงนี้จากหน้าจอไหนเลย ดังนั้นเมื่อเปิด toggle แล้วจึงไม่พาไปยังหน้าต่างขอสิทธิ์ระบบทันที แต่จะแสดงหน้าต่างอธิบายในแอปก่อน เนื้อหาประมาณว่า "ใช้เพื่อส่ง ⌘V หนึ่งครั้งทันทีหลังเลือกรายการเท่านั้น และจะไม่อ่านเนื้อหาจากแอปอื่น" และจะไปยังหน้าต่างขอสิทธิ์ระบบก็ต่อเมื่อกด "ดำเนินการต่อ" เท่านั้น
ผมใส่เส้นทางทดสอบซ้ำไว้ในหมายเหตุการรีวิวว่า "สามารถกดทดสอบได้โดยตรงที่ Settings > General" แล้วส่งเข้าตรวจอีกครั้ง และก็ผ่าน
"จริง ๆ แล้วมันทำงานแบบนั้นอยู่แล้ว" กับ "ผู้ใช้สามารถตรวจสอบได้ว่าเป็นแบบนั้น" เป็นคนละปัญหากันจริง ๆ
วิธีทำงานร่วมกับ AI
ผมแทบไม่ได้เขียนโค้ดด้วยตัวเองเลย หน้าที่ของผมคืออ่านและตัดสินสิ่งที่ถูกสร้างขึ้นมาจากพรอมป์ต์ ถึงจะเป็นวิศวกร แต่ครั้งนี้พูดได้ว่าทุ่มไปกับงานวางแผนและ QA แทบทั้งหมด
มันไม่ได้ราบรื่นไปหมด มีปัญหาที่ลากรูปภาพไม่ได้ซึ่งถูกลองแก้แบบเดา ๆ ถึงสามครั้ง และทุกครั้งก็เป็นหน้าที่ผมที่ต้องตรวจเอง จนกระทั่งผมพูดว่า "ช่วยทดสอบหน่อย ผมจะได้ไม่ต้องตรวจเองทุกอย่าง" หลังจากนั้นวิธีทำงานจึงเปลี่ยนเป็นตรวจสอบด้วยข้อมูลจริงก่อนแล้วค่อยแก้ จากนั้นบั๊กที่ผมหาเจอด้วยมือก็ถูกตรึงเป็นเทสต์เพิ่มเข้าไปเรื่อย ๆ และตอนนี้เทสต์จำนวนมากจากทั้งหมด 270 รายการก็เกิดจากกระบวนการแบบนั้น
สุดท้ายมี commit 87 ครั้ง, Swift ราว 10,000 บรรทัด และเทสต์ 3,700 บรรทัด
ภายใน 30 วันแรก ฟีเจอร์ทั้งหมดใช้ฟรี หลังจากนั้นฟีเจอร์พื้นฐานก็ยังใช้ฟรีต่อไป และ Pro ไม่ได้เป็นแบบสมัครสมาชิก แต่เป็นการจ่ายครั้งเดียว
2 ความคิดเห็น
ดูเหมือนว่าจะรองรับฟีเจอร์เกือบทั้งหมดที่มีใน Raycast แล้ว ไม่ทราบว่ามีจุดไหนที่แตกต่างกันบ้างครับ?
ใช่ครับ ถ้าดูแค่ประวัติคลิปบอร์ด ก็มีส่วนที่ทับซ้อนกันเยอะครับ แต่ Raycast มีฟีเจอร์อื่น ๆ อีกมากนอกจากคลิปบอร์ด เลยรู้สึกว่ามันเยอะเกินไปหน่อย
สิ่งที่ผมให้ความสำคัญมีประมาณนี้ครับ
อย่างแรกคือให้เบา และจัดการเฉพาะประวัติคลิปบอร์ดเท่านั้น ตอนนี้ขนาดประมาณ 2 MB ครับ
และสามารถแก้ไขเนื้อหาที่บันทึกไว้จากหน้ารายละเอียดได้ เวลาตรวจดูพรอมป์หลาย ๆ อันแล้วแก้เล็กน้อยล่วงหน้า สะดวกดีครับ
ผมใส่ใจเรื่องการค้นหาและการจัดโฟลเดอร์ด้วยครับ พยายามแก้ปัญหาข้อมูลที่จำเป็นตอนทำงานซึ่งใช้ครั้งเดียว หรือข้อมูลที่ขี้เกียจกลับไปค้นหาใหม่
ทำให้ค้นหาได้จากเนื้อหา แท็ก ชื่อเรื่อง เป็นต้น
ต่อไปอยากให้สามารถเพิ่มฟีเจอร์หรือการจัดวางเองผ่านปลั๊กอินได้ แต่ส่วนนี้ยังไม่ได้กำหนดรายละเอียดชัดเจนครับ
ผมก็คิดว่า Raycast เป็นแอปที่ดีครับ และอยากพยายามให้เป็นตัวเลือกตามความชอบของแต่ละคนได้
ขอบคุณสำหรับความคิดเห็นครับ