1 คะแนน โดย GN⁺ 3 시간 전 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • Bitchat เป็นแอปส่งข้อความ P2P แบบกระจายศูนย์สำหรับ iOS และ macOS ที่ผสานเครือข่าย Bluetooth mesh เข้ากับ Nostr บนอินเทอร์เน็ต ทำงานได้โดยไม่ต้องมีบัญชี หมายเลขโทรศัพท์ หรือเซิร์ฟเวอร์กลาง
  • ในโหมดออฟไลน์ รองรับการส่งต่อผ่าน Bluetooth LE ได้สูงสุด 7 ฮอป และเมื่อเชื่อมต่ออินเทอร์เน็ตจะเชื่อมต่อกับช่องทางทั่วโลกและตามตำแหน่งผ่าน Nostr relay มากกว่า 290 แห่ง
  • ข้อความส่วนตัวจะให้ความสำคัญกับ Noise Protocol บน Bluetooth ก่อน หากเชื่อมต่อไม่ได้จะสลับไปใช้ NIP-17 ของ Nostr และหากใช้ไม่ได้ทั้งสองแบบจะเก็บไว้ในคิวจนกว่าจะส่งได้
  • มีช่องทางตามระดับความละเอียดของ geohash ตั้งแต่บล็อก ละแวก เมือง รัฐ ไปจนถึงประเทศ พร้อมรองรับคำสั่งแบบ IRC อย่าง /slap, /msg, /who และ Emergency Wipe ที่แตะสามครั้งเพื่อล้างข้อมูล
  • โครงการนี้เผยแพร่เป็น สาธารณสมบัติ และสามารถรันได้ด้วย Xcode หรือ just แต่การบิลด์ลงอุปกรณ์จริงต้องมี Developer Team ID และการตั้งค่า entitlement

โครงสร้างการส่งข้อมูลที่ผสาน Bluetooth และ Nostr

  • Bitchat เป็นแอปเนทีฟสำหรับ iOS และ macOS ที่รวม Bluetooth mesh และ Nostr ไว้ด้วยกัน และมีให้ใช้งานบน App Store
  • เครือข่าย Bluetooth mesh จะค้นหาและเชื่อมต่ออุปกรณ์ใกล้เคียงโดยอัตโนมัติโดยไม่ต้องใช้อินเทอร์เน็ต
    • สื่อสารแบบ P2P โดยตรงผ่าน Bluetooth LE และส่งต่อข้อความผ่านอุปกรณ์ใกล้เคียงได้สูงสุด 7 ฮอป
    • รองรับการเข้ารหัสแบบต้นทางถึงปลายทางและ forward secrecy บนพื้นฐานของ Noise Protocol
    • ใช้รูปแบบแพ็กเก็ตไบนารีแบบบีบอัดที่ออกแบบให้เหมาะกับข้อจำกัดของ Bluetooth LE และใช้ duty cycle ที่ปรับให้เหมาะกับแบตเตอรี่
    • ช่อง mesh #bluetooth มุ่งเป้าไปที่การสื่อสารออฟไลน์ในการประท้วง ภัยพิบัติ หรือพื้นที่ห่างไกล
  • ชั้นการส่งข้อมูลของ Nostr ให้บริการส่งข้อความผ่านอินเทอร์เน็ตด้วย relay ทั่วโลกมากกว่า 290 แห่ง
    • สร้างห้องแชตตามตำแหน่งด้วยพิกัด geohash และใช้ตัวตนเข้ารหัสชั่วคราวใหม่ในแต่ละพื้นที่
    • ข้อความส่วนตัวได้รับการปกป้องด้วย NIP-17 gift wrapping
    • ช่องทางตามตำแหน่งต้องใช้อินเทอร์เน็ต และใช้สำหรับชุมชนท้องถิ่น งานกิจกรรมในพื้นที่ และการสนทนาในภูมิภาค
      • block 7 ตัวอักษร: บล็อกเมือง
      • neighborhood 6 ตัวอักษร: เขตหรือละแวก
      • city 5 ตัวอักษร: เมือง
      • province 4 ตัวอักษร: รัฐหรือจังหวัด
      • region 2 ตัวอักษร: ประเทศหรือภูมิภาคขนาดใหญ่
  • การกำหนดเส้นทางข้อความส่วนตัว จะเลือกวิธีส่งที่ใช้งานได้โดยอัตโนมัติ
    1. หากใช้เซสชัน Noise ที่มีอยู่ได้ จะให้ความสำคัญกับการเชื่อมต่อ Bluetooth ที่รวดเร็วและเป็นส่วนตัวมากกว่า
    2. หากใช้ Bluetooth ไม่ได้ จะส่งผ่านเครือข่าย relay โดยใช้คีย์สาธารณะ Nostr ของผู้รับและ NIP-17
    3. หากใช้ไม่ได้ทั้งสองวิธี จะเก็บข้อความไว้ในคิว และส่งให้อัตโนมัติเมื่อเชื่อมต่อได้
  • ยังมีการบีบอัดข้อความด้วย LZ4, โหมดแบตเตอรี่แบบปรับตัว, การปรับแต่งเครือข่าย, คำสั่งแบบ IRC และ Emergency Wipe ที่แตะสามครั้งเพื่อลบข้อมูลทั้งหมดทันที
  • ดูรายละเอียดโปรโตคอลเพิ่มเติมได้ใน Technical Whitepaper

การบิลด์ การแปลภาษา และไลเซนส์

  • หากต้องการ รันใน Xcode ให้ใช้คำสั่งต่อไปนี้จากที่เก็บซอร์ส
cd bitchat
open bitchat.xcodeproj
  • หากต้องการรันบนอุปกรณ์จริง ต้องเตรียมการตั้งค่าในเครื่องและการเซ็นโค้ด
    • คัดลอกไฟล์ตั้งค่าด้วย cp Configs/Local.xcconfig.example Configs/Local.xcconfig
    • เพิ่ม Developer Team ID ลงในไฟล์ใหม่ แล้ว Bundle ID เริ่มต้นจะถูกตั้งเป็น chat.bitchat.<team_id>
    • ต้องเปลี่ยน entitlement ของ group.chat.bitchat เป็น group.<your_bundle_id> ด้วยตนเอง
  • บน macOS สามารถติดตั้ง just ด้วย brew install just แล้วรันการตั้งค่าและซอร์สด้วย just run
    • จากนั้นหากรัน just clean จะคืนสู่สถานะเดิมสำหรับการบิลด์และพัฒนาแอปมือถือ
  • ทรัพยากรการแปลภาษา แยกเป็นตัวแอปและส่วนขยายแชร์
    • สตริงของแอปหลักและกฎพหูพจน์พื้นฐาน ให้เพิ่มใน bitchat/Localization/Base.lproj/ ที่ Localizable.strings และ Localizable.stringsdict
    • สตริงของส่วนขยายแชร์จัดการที่ bitchatShareExtension/Localization/Base.lproj/Localizable.strings
    • คีย์ควรเขียนให้สื่อความหมาย เช่น app_info.features.offline.title และควรนำคีย์เดิมกลับมาใช้ซ้ำเมื่อเป็นไปได้
    • ตรวจสอบการคอมไพล์ของการเปลี่ยนแปลงด้านภาษาได้ด้วย xcodebuild -project bitchat.xcodeproj -scheme "bitchat (macOS)" -configuration Debug CODE_SIGNING_ALLOWED=NO build
  • โครงการนี้เผยแพร่เป็น สาธารณสมบัติ และดูเงื่อนไขโดยละเอียดได้ที่ LICENSE

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

 
GN⁺ 3 시간 전
ความคิดเห็นจาก Hacker News
  • เมื่อวานติดตั้ง Radicle desktop client แล้วกรอกชื่อผู้ใช้และรหัสผ่านใหม่ แต่ไม่มีอะไรเกิดขึ้นเลย ต่อให้รีสตาร์ตแอปก็ยังผ่านหน้าสร้างบัญชี·ล็อกอินไปไม่ได้ การใช้งาน Radicle ของผมเลยจบลงตรงนั้น

  • ถ้าให้ความสำคัญกับความพร้อมใช้งาน ก็ควรทบทวน dependency libs.gms.location และควรกระจายแอปบน F-Droid ด้วย(https://gitlab.com/fdroid/fdroiddata/-/merge_requests/24907#...)

    • ดูเหมือนผู้ดูแล repository จะหยุดทั้งการรีวิว PR และการตอบข้อความไปแล้ว ถ้าจะเดินหน้าต่อมีโอกาสสูงว่าจะต้องมีใครสักคน fork
  • ที่ Fusion Festival ผมเปิด Bitchat แล้วเดินไปรอบ ๆ พบอุปกรณ์ราว 20 เครื่องกับข้อความไม่กี่ข้อความ แต่ไม่มีใครตอบข้อความที่ผมส่งเลย จากคน 80,000 คนที่พบแค่ 20 เครื่องก็แปลว่าไม่ได้ไม่มีผู้ใช้เลย แต่ก็ไม่ได้มาก และไปได้สูงสุดแค่ 2 hops จึงมีความหนาแน่นไม่พอจะครอบคลุมทั่วงาน

    • เท่าที่ทราบ มันถูกใช้ในการประท้วงหลายครั้ง และตอนนี้ก็ใช้ในการประท้วง CJP ในอินเดีย ด้วย รัฐบาลอินเดียยังขอให้ GitHub ลบ repository นี้ด้วย
    • อย่างน้อยก็เพิ่ม mesh Wi‑Fi เข้ามาแล้ว แต่ยกเว้นสถานการณ์ประท้วงที่เป็นเรื่องเป็นตาย การยอมรับใช้งานก็ค่อนข้างช้า
      มันมีประโยชน์ตอนที่คุณต้องนั่งแยกจากเพื่อนบนเครื่องบินเพราะไม่อยากจ่ายเพิ่ม 50 ดอลลาร์เพื่อเลือกที่นั่งติดกัน
    • สำหรับโปรเจ็กต์เฉพาะกลุ่มแบบนี้ เจออุปกรณ์ 20 เครื่องก็นับว่าเยอะพอสมควรแล้ว
    • ที่มันใช้งานได้จริงนี่ค่อนข้างเจ๋งเลย ในเทศกาลที่มีคน 30,000 คน ผมเอา AirTag ไปเพื่อหากลุ่มเพื่อน แต่ใช้การไม่ได้เลย
    • ครั้งล่าสุดที่ใช้ มีแต่ รูปฮิตเลอร์ที่วาดด้วย ASCII art ถูกโพสต์อยู่ ถึงอย่างนั้นก็ยังถือว่าเป็นการเริ่มต้น
  • ถ้าสนใจ BitChat ก็น่าจะติดตั้งไว้ก่อนได้ เผื่อมันเริ่มดังขึ้นหรือคุณได้เจอคนที่จะใช้ด้วยกัน พอลองเองแล้ว ความรู้สึกของการส่งข้อความ โดยไม่มี Wi‑Fi หรือเครือข่ายมือถือ มันชวนไม่อยากเชื่อ

    • ทุกครั้งที่ไปที่คนเยอะ ๆ ผมจะเปิดมันขึ้นมาเช็กดู แต่สำหรับการแชตอินเทอร์เน็ตที่ไม่ใช่ mesh ผมอยากได้ การแชตตามบริเวณใกล้เคียง มากกว่า geohash มันยากเสมอที่จะเลือกระดับความละเอียดของ geohash ให้ตรงช่วงที่ต้องการ
      geohash แบบซ้อนกันก็น่าจะโอเค แต่ก็น่ากังวลว่าจะสับสนแบบวิทยุสื่อสารที่ถ้ามีแค่ฝ่ายหนึ่งอยู่ในระยะ ก็จะเห็นบทสนทนาแค่ครึ่งเดียว ปัจจุบัน geohash แคบได้ถึงราว 1 เอเคอร์ ซึ่งละเอียดเกินไป แต่ก็อาจมีประโยชน์เวลาหอพักมหาวิทยาลัย 12 ชั้นทั้งตึกใช้ห้องแชตเดียวกัน
    • แอปแชตผ่าน Bluetooth มีอยู่แล้ว ปีที่แล้วผมใช้ Berkanan ที่หาเจอใน App Store เพื่อคุยกับเพื่อนที่นั่งแยกกันบนเที่ยวบิน Ryanair ในยุโรป ถึงหน้าตาจะห่วย แต่ฟังก์ชันทำงานได้จริง
  • เว็บไซต์ Radicle แสดงดีไซน์ที่น่าสนใจในฐานะแพลตฟอร์ม Git repository ผมชอบ ระยะขอบเต็มความกว้าง, โครงสร้างการนำทางที่จัดมาดี, และการเรนเดอร์โค้ดที่ดูสวย

    • สงสัยว่าจะทำบริการที่เชื่อม Git repository URL แบบสุ่มแล้วแสดงผลในรูปแบบเดียวกันได้ไหม
  • Bitchat เป็นโปรเจ็กต์ของ AOS โปรเจ็กต์ ค่อนข้างน่าแปลกใจที่ไม่ได้โฮสต์ซ้ำบน ngit ซึ่งเป็นอีกโปรเจ็กต์ของ AOS เหมือนกัน

    • ที่ไม่มี mirror บน ngit ก็น่าแปลกใจนิดหน่อย แต่ก็เข้าใจได้ที่ไม่ใช้เป็นที่โฮสต์หลัก เพราะมันต้องอยู่ในที่ที่คนจะหาเจอจริง ๆ
      ถ้าหลงไปกับ Nostr purism ก็มักลงเอยด้วยการมีคนเห็นโพสต์แค่ 5 คน ผมชอบ protocol นี้นะ แต่ถ้าจะเพิ่มผู้ใช้ ก็ต้องเอาแอปไปไว้ในที่ที่ผู้คนอยู่กันอยู่แล้ว
  • สงสัยว่ามันมีความสามารถพิเศษอะไรเมื่อเทียบกับผลิตภัณฑ์ส่งข้อความแบบกระจายศูนย์อื่น ๆ อย่าง Nostr หรือ XMTP

    • ออฟไลน์ใช้ Bluetooth mesh ส่วนออนไลน์ทำงานผ่าน Nostr
      มีการคุยกันเรื่องนี้เมื่อวันก่อน: “Government orders GitHub to remove Bluetooth-based chat app Bitchat: Jack Dorsey”
      https://news.ycombinator.com/item?id=49036433
    • อธิบายไว้ในย่อหน้าแรกของ https://bitchat.free/