- 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 ตัวอักษร: ประเทศหรือภูมิภาคขนาดใหญ่
- การกำหนดเส้นทางข้อความส่วนตัว จะเลือกวิธีส่งที่ใช้งานได้โดยอัตโนมัติ
- หากใช้เซสชัน Noise ที่มีอยู่ได้ จะให้ความสำคัญกับการเชื่อมต่อ Bluetooth ที่รวดเร็วและเป็นส่วนตัวมากกว่า
- หากใช้ Bluetooth ไม่ได้ จะส่งผ่านเครือข่าย relay โดยใช้คีย์สาธารณะ Nostr ของผู้รับและ NIP-17
- หากใช้ไม่ได้ทั้งสองวิธี จะเก็บข้อความไว้ในคิว และส่งให้อัตโนมัติเมื่อเชื่อมต่อได้
- ยังมีการบีบอัดข้อความด้วย 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 ความคิดเห็น
ความคิดเห็นจาก Hacker News
เมื่อวานติดตั้ง Radicle desktop client แล้วกรอกชื่อผู้ใช้และรหัสผ่านใหม่ แต่ไม่มีอะไรเกิดขึ้นเลย ต่อให้รีสตาร์ตแอปก็ยังผ่านหน้าสร้างบัญชี·ล็อกอินไปไม่ได้ การใช้งาน Radicle ของผมเลยจบลงตรงนั้น
ถ้าให้ความสำคัญกับความพร้อมใช้งาน ก็ควรทบทวน dependency
libs.gms.locationและควรกระจายแอปบน F-Droid ด้วย(https://gitlab.com/fdroid/fdroiddata/-/merge_requests/24907#...)ที่ Fusion Festival ผมเปิด Bitchat แล้วเดินไปรอบ ๆ พบอุปกรณ์ราว 20 เครื่องกับข้อความไม่กี่ข้อความ แต่ไม่มีใครตอบข้อความที่ผมส่งเลย จากคน 80,000 คนที่พบแค่ 20 เครื่องก็แปลว่าไม่ได้ไม่มีผู้ใช้เลย แต่ก็ไม่ได้มาก และไปได้สูงสุดแค่ 2 hops จึงมีความหนาแน่นไม่พอจะครอบคลุมทั่วงาน
มันมีประโยชน์ตอนที่คุณต้องนั่งแยกจากเพื่อนบนเครื่องบินเพราะไม่อยากจ่ายเพิ่ม 50 ดอลลาร์เพื่อเลือกที่นั่งติดกัน
ถ้าสนใจ BitChat ก็น่าจะติดตั้งไว้ก่อนได้ เผื่อมันเริ่มดังขึ้นหรือคุณได้เจอคนที่จะใช้ด้วยกัน พอลองเองแล้ว ความรู้สึกของการส่งข้อความ โดยไม่มี Wi‑Fi หรือเครือข่ายมือถือ มันชวนไม่อยากเชื่อ
geohash แบบซ้อนกันก็น่าจะโอเค แต่ก็น่ากังวลว่าจะสับสนแบบวิทยุสื่อสารที่ถ้ามีแค่ฝ่ายหนึ่งอยู่ในระยะ ก็จะเห็นบทสนทนาแค่ครึ่งเดียว ปัจจุบัน geohash แคบได้ถึงราว 1 เอเคอร์ ซึ่งละเอียดเกินไป แต่ก็อาจมีประโยชน์เวลาหอพักมหาวิทยาลัย 12 ชั้นทั้งตึกใช้ห้องแชตเดียวกัน
เว็บไซต์ Radicle แสดงดีไซน์ที่น่าสนใจในฐานะแพลตฟอร์ม Git repository ผมชอบ ระยะขอบเต็มความกว้าง, โครงสร้างการนำทางที่จัดมาดี, และการเรนเดอร์โค้ดที่ดูสวย
Bitchat เป็นโปรเจ็กต์ของ AOS โปรเจ็กต์ ค่อนข้างน่าแปลกใจที่ไม่ได้โฮสต์ซ้ำบน ngit ซึ่งเป็นอีกโปรเจ็กต์ของ AOS เหมือนกัน
ถ้าหลงไปกับ Nostr purism ก็มักลงเอยด้วยการมีคนเห็นโพสต์แค่ 5 คน ผมชอบ protocol นี้นะ แต่ถ้าจะเพิ่มผู้ใช้ ก็ต้องเอาแอปไปไว้ในที่ที่ผู้คนอยู่กันอยู่แล้ว
สงสัยว่ามันมีความสามารถพิเศษอะไรเมื่อเทียบกับผลิตภัณฑ์ส่งข้อความแบบกระจายศูนย์อื่น ๆ อย่าง Nostr หรือ XMTP
มีการคุยกันเรื่องนี้เมื่อวันก่อน: “Government orders GitHub to remove Bluetooth-based chat app Bitchat: Jack Dorsey”
https://news.ycombinator.com/item?id=49036433