3 คะแนน โดย GN⁺ 2024-06-13 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • Unforget เป็นแอปจดโน้ตแบบมินิมอลที่เขียนโน้ตลงในเครื่องก่อน แล้วค่อยใช้งานต่อผ่านการซิงก์แบบเข้ารหัส โดยชูทั้งความเป็นส่วนตัวและการใช้งานข้ามอุปกรณ์
  • มาในรูปแบบ Progressive Web App จึงใช้งานได้บนเบราว์เซอร์ เดสก์ท็อป และมือถือ โดยทำงานได้โดยไม่ต้องพึ่ง Electron.js
  • รองรับการเขียน Markdown, การส่งออกในรูปแบบ JSON แบบคลิกเดียว, API แบบเปิด, และมีตัวเลือกทั้ง self-hosting กับคลาวด์
  • สมัครใช้งานฟรีเพื่อใช้การสำรองข้อมูลและการซิงก์บนคลาวด์ที่เข้ารหัสอย่างสมบูรณ์ได้ และไม่ต้องใช้อีเมลหรือหมายเลขโทรศัพท์
  • รองรับการนำเข้าจาก Google Keep, Apple Notes และ Standard Notes แต่ความสามารถและวิธีติดตั้งจะแตกต่างกันไปตามเบราว์เซอร์

โน้ตแบบออฟไลน์ก่อนและการควบคุมข้อมูล

  • Unforget เป็นแอปจดโน้ตแบบออฟไลน์ก่อนที่เรียบง่าย และมีการซิงก์แบบเข้ารหัสตั้งแต่ต้นทางถึงปลายทาง
  • รูปแบบแอปและสภาพแวดล้อมการใช้งาน

    • เป็น Progressive Web App ที่ใช้งานได้บนเบราว์เซอร์ เดสก์ท็อป และมือถือ
    • ทำงานได้โดยไม่ต้องใช้ Electron.js และรองรับการติดตั้งแบบคลิกเดียวตามตัวเลือก
    • ชูการออกแบบที่ให้ความสำคัญกับความเป็นส่วนตัวเป็นอันดับแรก และเป็นโอเพนซอร์สภายใต้สัญญาอนุญาต MIT
  • การเขียน การย้ายข้อมูล และการส่งออก

    • รองรับการเขียน Markdown
    • สามารถนำเข้าจาก Google Keep, Apple Notes และ Standard Notes ได้
    • สามารถส่งออกข้อมูลโน้ตเป็นรูปแบบ JSON ได้แบบคลิกเดียว
  • การซิงก์และการขยายความสามารถ

    • ผ่านการสมัครฟรี สามารถสำรองโน้ตขึ้นคลาวด์ในสถานะที่เข้ารหัสสมบูรณ์ และซิงก์ระหว่างหลายอุปกรณ์ได้
    • การสมัครไม่ต้องใช้อีเมลหรือหมายเลขโทรศัพท์
    • มีให้เลือกทั้ง self-hosting และคลาวด์
    • สามารถสร้างไคลเอนต์ของตนเองได้ผ่าน API แบบเปิด

วิธีติดตั้งตามแต่ละเบราว์เซอร์

  • Unforget ใช้งานได้ทันทีจากเบราว์เซอร์ และวิธีติดตั้งจะแตกต่างกันไปตามสภาพแวดล้อม
  • รองรับการติดตั้ง

    • Chrome: ใช้ไอคอนติดตั้งในแถบ URL
    • Edge: ใช้ไอคอนติดตั้งในแถบ URL
    • Android Browser: เมนู → Add to Home Screen
    • Safari Desktop: Share → Add to Dock
    • Safari iOS: Share → Add to Home Screen
    • Firefox Android: ใช้ไอคอนติดตั้งในแถบ URL
  • ข้อจำกัดการติดตั้ง

    • Firefox Desktop ไม่สามารถติดตั้งได้

1 ความคิดเห็น

 
GN⁺ 2024-06-13
ความคิดเห็นจาก Hacker News
  • อยากรู้ประสบการณ์ของคนที่เคยทำ PWA แบบ offline-first
    แนวคิดที่ใช้เว็บเป็นเพียงช่องทางกระจายแอป และใช้เบราว์เซอร์เป็นสภาพแวดล้อมรันไทม์นั้นน่าสนใจ แต่กังวลเรื่องความจุกจิกของ storage ฝั่ง local
    เพราะข้อมูลไม่ได้ปรากฏเป็นไฟล์อย่าง ~/.app/app.dat เลยให้ความรู้สึกว่า “ถ้ามองไม่เห็นก็อาจลืมไปได้” และยังติดใจเรื่องความเป็นไปได้ที่ข้อมูลจะหายไปกะทันหันเพราะเบราว์เซอร์อัปเดต รวมถึงความซับซ้อนในการจัดการ schema versioning ภายใต้โมเดลพื้นฐานของเว็บ
    ตอนย้ายไปคอมพิวเตอร์เครื่องใหม่ การพกพาข้อมูลก็เป็นปัญหาเช่นกัน และแม้จุดที่ถ้ามีแค่บัญชี GitHub ก็ deploy ได้โดยไม่ต้องมีเซิร์ฟเวอร์จะน่าสนใจ แต่ฝั่งข้อมูลยังดูไม่นิ่ง
    ต่อให้มองข้ามเรื่องที่ไม่มีอะไรแบบ SQLite ไป วิธีที่เอา SQLite ไปมัดรวมเป็นก้อน WebAssembly ก็ไม่ค่อยถูกใจอยู่ดี

    • เว็บสแตกมีความจุกจิกเล็ก ๆ น้อย ๆ เยอะจริง แต่ IndexedDB ทำงานได้ค่อนข้างเสถียรมาตลอด
      อย่างไรก็ตาม มีข้อจำกัดน่ารำคาญอยู่บ้าง เช่น เวลาสร้าง index ให้ storage ด้วยหลาย key กลับกำหนดแต่ละ key เป็นเรียงจากน้อยไปมาก/มากไปน้อยไม่ได้
      ถ้าเพิ่ม PWA ลงหน้า home เพื่อ install แล้ว เบราว์เซอร์ไม่ควรลบ IndexedDB ด้วยเหตุผลอย่างการอัปเดต และในทางปฏิบัติเบราว์เซอร์ต่าง ๆ ก็ดูเหมือนจะทำตามนั้น
      ประสบการณ์พัฒนา PWA โดยรวมมีทั้งดีและแย่ และขึ้นกับประเภทแอปมาก ถ้าเป็นแอปจดบันทึกที่ทำ encrypted cloud backup และ sync ได้ PWA อาจเป็นตัวเลือกที่ดีที่สุด แต่ถ้าต้องผสานกับแพลตฟอร์มลึกกว่านั้น เช่น เข้าถึง file system ก็คงเลี่ยง PWA
      อีกปัญหาหนึ่งคือ iOS Safari ซึ่งขาดฟีเจอร์ PWA หลายอย่าง เช่น background sync หรือ offline push notification และดูไม่น่าจะรองรับในอนาคตด้วย
      อยากรู้ว่ากำลังพิจารณา PWA สำหรับแอปบางตัวอยู่หรือเปล่า
    • คนที่ทำแอปบนเบราว์เซอร์ต้องระวังมากว่า เมื่อพื้นที่ดิสก์ไม่พอ เบราว์เซอร์จำนวนมากอาจทิ้งบางส่วนของ storage ของเว็บไซต์ได้
      ปกติก็น่าหงุดหงิดอยู่แล้ว แต่ถ้าไม่มี backup ฝั่งเซิร์ฟเวอร์ เรื่องนี้จะเกินกว่าคำว่าน่าหงุดหงิดธรรมดา
      ไม่แน่ใจว่าข้อควรระวังนี้ใช้กับ localStorage ด้วยหรือไม่ แต่จากประสบการณ์เคยเกิดกับ IndexedDB และดูเหมือนจะเกิดกับแอป Electron ด้วย
    • ผมมองว่า offline storage ที่ปลอดภัยที่สุดคือการใช้ browser file system (https://developer.mozilla.org/en-US/docs/Web/API/File_System...) เพื่อให้ข้อมูลอยู่นอกมือเบราว์เซอร์
      ใช้งานได้ค่อนข้างดี แต่ข้อเสียคือผู้ใช้ต้องเลือกไฟล์หรือไดเรกทอรีใหม่ทุกครั้งที่ใช้แอป และไม่มีวิธีบังคับให้ file picker เริ่มจากไดเรกทอรีเฉพาะที่ไม่ใช่ “ไดเรกทอรีที่รู้จักกันดี” ได้
    • ในเบราว์เซอร์ที่ใช้ Chromium ตอนนี้สามารถวางข้อมูลไว้เป็นไฟล์อย่าง ~/.app/app.dat ได้แล้ว
      อ้างอิง: https://developer.chrome.com/docs/capabilities/web-apis/file...
    • แอปนี้ดูเหมือนใช้ better-sqlite3[0] และเก็บฐานข้อมูลไว้ในไฟล์ชื่อ private/unforget.db[1]
      ผมไม่มีประสบการณ์กับ SQLite เลยไม่รู้ว่าไฟล์นั้นจะ volatile เท่า localStorage หรือเปล่า
      [0] https://www.npmjs.com/package/better-sqlite3
      [1] https://github.com/computing-den/unforget/blob/master/src/se...
  • ดูดีเลย ถ้าจะเสนออย่างหนึ่งคืออยากให้แสดง flow การเขียนบันทึก ให้ชัดขึ้น
    ตอนนี้ยังไม่ชัดว่าเป็น Markdown document ที่มี title และจัดระเบียบด้วย folder/โครงสร้าง hierarchy หรือเป็น “card” ที่ไม่มี title หรือ title เป็น optional แล้วจัดด้วย tag หรือเป็น Markdown document ยาว ๆ ที่ค่อย ๆ ต่อเติมไปเรื่อย ๆ
    แต่ละแบบคล้าย workflow ของระบบจดบันทึกกระแสหลักต่าง ๆ เลยอยากเข้าใจว่าออกแบบและ optimize flow แบบไหนไว้
    คำใบ้ว่าผู้สร้างเริ่มจากการเป็นผู้ใช้ Google Keep นั้นช่วยได้ แต่ผมเคยใช้ไฟล์ข้อความแบบ Homebrew, Simplenote, Obsidian ฯลฯ และพอมีแนวคิดเกี่ยวกับ Evernote หรือ OneNote อยู่บ้าง จึงอยากให้มีป้ายบอกทางเรื่องวิธีใช้งานเพิ่มอีกสักหน่อย

    • จริง ๆ แล้วผมไม่ได้คิดให้มากพอว่าผู้ใช้อาจย้ายมาจากระบบอื่นที่มีแนวคิดต่างกัน ผมจะอธิบาย workflow ในโน้ต demo ให้ดีกว่านี้
      ตอบแบบสั้น ๆ คือ ปกติจะเก็บโน้ตขนาดเล็กมาก ๆ แค่ไม่กี่บรรทัดหรือ checkbox สำหรับสิ่งที่ต้องทำ และหนึ่งไอเดียต่อหนึ่งโน้ต แต่ถ้าไอเดียบางอย่างเติบโตขึ้นตลอดหลายวัน โน้ตนั้นก็อาจใหญ่ขึ้นมากได้ และไม่มีการจำกัดขนาดโน้ต
      สามารถกำหนด title ของโน้ตด้วย # เหมือน Markdown มาตรฐานได้ และถ้าเว้นบรรทัดว่างหลังบรรทัดแรก บรรทัดแรกจะกลายเป็น title โดยอัตโนมัติ
      ไม่มีแนวคิดเรื่อง tag แยกต่างหาก แต่สามารถเขียน #someTag แล้วค้นหา #someTag ได้ตรง ๆ ฟีเจอร์ค้นหาเป็นการค้นหา substring แบบง่ายในโน้ตทั้งหมด ไม่มีฟีเจอร์ขั้นสูงอย่าง stemming
    1. ผมคิดว่ายิ่งมีตัวเลือกแอปจดบันทึกที่ self-host ได้มากเท่าไรก็ยิ่งดี
    2. คำผิดในหน้า demo: PriavcyPrivacy
    3. อยากรู้ว่าทำไมในเบราว์เซอร์หนึ่งถึงขึ้น error ว่า “Your browser does not support service workers. Please use another browser.” สามารถ workaround ได้ไหม หรือการใช้ service worker เป็นสิ่งจำเป็นต่อจุดเด่นของแอปนี้
    • ถ้าไม่มี service worker แอปก็จะไม่ทำงานแบบ offline อีกต่อไป และนั่นเป็นหนึ่งในฟีเจอร์หลัก
      จำได้ว่าเคยพยายามจดโน้ตใน Google Keep ระหว่างเดินทาง แล้วบางครั้งพบว่าใช้แบบ offline ไม่ได้
      อยากรู้ว่าใช้เบราว์เซอร์อะไรอยู่
    • คำผิดเล็ก ๆ อีกจุด: GitHub falvoredGitHub flavored
  • สงสัยว่ามีแผนจะผสานรวมอะไรอย่าง https://simplemde.com/ หรือไม่ เมื่อโน้ตเริ่มซับซ้อนขึ้น
    ถ้าเป็นโน้ตที่มีตารางและองค์ประกอบอื่น ๆ ผม/ฉันชอบ ตัวแก้ไขแบบ WYSIWYG ที่เรียบง่ายกว่า มากกว่าต้องคอยใส่ใจไวยากรณ์ Markdown ตลอดเวลา

    • อยากใส่ตัวแก้ไขแบบ WYSIWYG อยู่เหมือนกัน แต่ในการทดสอบช่วงแรกยังหาแบบที่ทำงานได้ดีบนทุกแพลตฟอร์มไม่เจอ
      จะลองพยายามเรื่องนี้ดูด้วย
  • เป็นงานที่ยอดเยี่ยม และหวังว่าจะพัฒนาต่อไปอีก
    นึกถึง Joplin ขึ้นมา เลยสงสัยว่าตั้งใจจะพาแอปนี้ไปในทิศทางไหน

    • เคยใช้ Joplin แล้วก็ชอบพอสมควร แต่มีปัญหาบางอย่างนอกเหนือจากที่เป็นแอป Electron
      เช่น เวิร์กโฟลว์ยังไม่รู้สึกว่าเร็วพอ ควรจะเปิดแอป แตะไม่เกินหนึ่งครั้ง แล้วเริ่มพิมพ์ได้ทันที และควรป้อนรายการสิ่งที่ต้องทำหลายรายการได้โดยไม่ต้องไปที่เมนูหรือกดปุ่มอื่น บนเดสก์ท็อปสุดท้ายแล้วทุกอย่างก็ควรเน้นคีย์บอร์ดเป็นหลัก
      กล่าวคืออยากให้ UI ไม่เข้ามาขวาง และมองว่าแอปจดโน้ตหลายตัวพลาดตรงนี้
      ในแง่ทิศทาง อยากทำให้ย้ายมาจากแอปอื่นได้ง่ายขึ้น ตอนนี้มีการนำเข้าจาก Google Keep แล้ว แต่ควรมีได้มากกว่านี้มาก
      มี API สาธารณะอยู่แล้ว ก็คงดีถ้ามีไคลเอนต์หรือการผสานรวมกับ Emacs, VS Code, Vim ออกมา
      นอกเหนือจากนั้น ตอนนี้ก็ตอบโจทย์ความต้องการของผม/ฉันแทบทั้งหมดแล้ว
  • มองหา คลังความรู้แบบมีโครงสร้าง ที่ดีกว่าอยู่เสมอ และปกติจะเลี่ยงแอป Electron หรือ JavaScript บนเดสก์ท็อป แต่ดูเหมือนการทดลองส่วนใหญ่จะมาจากฝั่งนั้น
    ถ้าเป็นแอป JavaScript สงสัยว่าเคยพิจารณารองรับไดอะแกรม Mermaid หรือไม่ แม้จะหนัก แต่เหตุผลที่ช่วงนี้ใช้ Joplin สำหรับจดโน้ตก็เพราะไวยากรณ์ Mermaid เปลี่ยนเกมเมื่อเทียบกับ Markdown ล้วน ๆ
    https://mermaid.js.org/

  • ช่วงหลังรู้สึกอึดอัดกับแอปจดโน้ตบน Android ในลักษณะคล้ายกัน แล้วก็เจอแอปที่ค่อนข้างยอดเยี่ยม เลยอยากแนะนำ
    เป็นแอปชื่อ Zettel Notes[1] ทำงานออฟไลน์เต็มรูปแบบ รองรับตัวเลือกซิงก์หลายแบบ และโน้ตเป็นไฟล์ Markdown ธรรมดาที่เก็บอยู่ในไดเรกทอรี
    [1] https://play.google.com/store/apps/details?id=org.eu.thedoc....

    • Zettel Notes น่าแนะนำ การผสาน Git กับ SourceHut ค่อนข้างยุ่งยากเล็กน้อย แต่พอตั้งค่าแล้วก็ยอดเยี่ยม และรองรับฟีเจอร์ Org ส่วนใหญ่ที่ผม/ฉันใช้ด้วย
  • มองหาแอปจดโน้ตที่โฮสต์เองได้และดูดีทั้งบนมือถือกับเดสก์ท็อปอยู่เสมอ
    สงสัยว่ามีแผนจะปล่อย Docker container ในสักวันหนึ่งหรือไม่

    • ถ้าทำให้การดีพลอยง่ายขึ้น การออก Docker container ก็น่าจะดี
  • ยอดเยี่ยม อยากทราบข้อมูลเพิ่มเติมเกี่ยวกับแอปเนทีฟ
    กำลังมองหาอะไรที่ เนทีฟ เบา และเร็ว เหมือน Apple Notes

    • ไม่ใช่แอปเนทีฟ แต่เป็น Progressive Web App (PWA)
      ใช้งานเองบน iPhone รุ่นเก่ามานานแล้ว เบาและเร็ว
      ถ้าจะติดตั้ง ให้ไปที่ Safari แล้วเลือกแชร์ → เพิ่มไปยังหน้าจอโฮม
  • สงสัยว่าใช้ตัวไหนสำหรับการซิงก์
    เคยดูโซลูชัน CRDT หลายตัว แต่ยังไม่แน่ใจว่าควรใช้อะไร และใน package.json ก็ไม่เจอ CRDT หรือลائبรารีซิงก์เฉพาะตัวใด
    ถ้าซิงก์เอง อยากรู้ว่าจัดการ conflict อย่างไร

    • ไม่ใช่ CRDT แต่เลือกวิธีที่ง่ายกว่านั้นมาก
      if (a.modification_time > b.modification_time) ...
      แค่นี้ทั้งหมด เหมือนฟีเจอร์อื่น ๆ เดิมทีตั้งใจจะทำ CRDT แต่พอใช้งานจริงก็พบว่าไม่ได้รู้สึกขาด
      เพราะไม่ใช่ตัวแก้ไขแบบทำงานร่วมกันที่ผู้ใช้หลายคนแก้ไขโน้ตเดียวกัน CRDT จึงไม่ได้มีประโยชน์มากนัก
      ในแอปจดโน้ตส่วนตัว กรณีที่จำเป็นต้องใช้ CRDT น่าจะมีแค่เวลาที่อุปกรณ์หลายเครื่องออฟไลน์พร้อมกัน แล้วแก้ไขโน้ตเดียวกันในเวลาเดียวกันเท่านั้น