1 điểm bởi GN⁺ 3 giờ trước | 1 bình luận | Chia sẻ qua WhatsApp
  • Bitchat là ứng dụng nhắn tin P2P phi tập trung cho iOS và macOS, kết hợp mạng mesh Bluetooth với Nostr dựa trên Internet, hoạt động không cần tài khoản, số điện thoại hay máy chủ trung tâm
  • Khi ngoại tuyến, ứng dụng hỗ trợ chuyển tiếp tối đa 7 hop qua Bluetooth LE; khi có kết nối Internet, ứng dụng kết nối tới các kênh toàn cầu và theo vị trí thông qua hơn 290 relay Nostr
  • Tin nhắn riêng tư ưu tiên dùng Noise Protocol qua Bluetooth; nếu không thể kết nối thì chuyển sang NIP-17 của Nostr, và nếu cả hai đều không khả dụng thì được giữ trong hàng đợi cho đến khi có thể gửi
  • Cung cấp các kênh theo cấp độ khối phố, khu phố, thành phố, tỉnh/bang và quốc gia tùy theo độ chính xác geohash; hỗ trợ các lệnh kiểu IRC như /slap, /msg, /whoEmergency Wipe để xóa dữ liệu bằng cách chạm ba lần
  • Dự án được phát hành dưới dạng public domain và có thể chạy bằng Xcode hoặc just, nhưng để build trên thiết bị thật cần cấu hình Developer Team ID và entitlement

Kiến trúc truyền tải kết hợp Bluetooth và Nostr

  • Bitchat là ứng dụng native cho iOS và macOS kết hợp Bluetooth mesh với Nostr, đồng thời cũng có trên App Store
  • Mạng mesh Bluetooth tự động tìm và kết nối các thiết bị xung quanh mà không cần Internet
    • Giao tiếp P2P trực tiếp qua Bluetooth LE, chuyển tiếp tin nhắn qua các thiết bị lân cận tối đa 7 hop
    • Hỗ trợ mã hóa đầu cuối dựa trên Noise Protocol và forward secrecy
    • Sử dụng định dạng gói nhị phân nén phù hợp với giới hạn của Bluetooth LE và duty cycle tối ưu pin
    • Kênh mesh #bluetooth nhắm tới liên lạc ngoại tuyến trong các tình huống như biểu tình, thảm họa và khu vực xa xôi
  • Lớp truyền tải Nostr cung cấp nhắn tin qua Internet thông qua hơn 290 relay trên toàn cầu
    • Tạo phòng chat theo vị trí bằng tọa độ geohash và sử dụng danh tính mã hóa tạm thời mới cho mỗi khu vực
    • Tin nhắn riêng tư được bảo vệ bằng NIP-17 gift wrapping
    • Kênh vị trí cần kết nối Internet và được dùng cho cộng đồng địa phương, sự kiện tại chỗ và thảo luận khu vực
      • block 7 ký tự: khối phố trong đô thị
      • neighborhood 6 ký tự: khu vực, khu phố
      • city 5 ký tự: thành phố
      • province 4 ký tự: bang, tỉnh
      • region 2 ký tự: quốc gia, khu vực quy mô lớn
  • Định tuyến tin nhắn riêng tư tự động chọn phương thức truyền tải khả dụng
    1. Nếu có thể dùng phiên Noise hiện có, ưu tiên kết nối Bluetooth nhanh và riêng tư hơn
    2. Nếu không thể dùng Bluetooth, gửi qua mạng relay bằng khóa công khai Nostr của người nhận và NIP-17
    3. Nếu cả hai cách đều không khả dụng, giữ tin nhắn trong hàng đợi và tự động chuyển tiếp khi kết nối được thiết lập
  • Cũng cung cấp nén tin nhắn LZ4, chế độ pin thích ứng, tối ưu hóa mạng, các lệnh kiểu IRC và Emergency Wipe để xóa tức thì toàn bộ dữ liệu bằng cách chạm ba lần
  • Có thể xem giao thức chi tiết trong Technical Whitepaper

Build, bản địa hóa và giấy phép

  • Để chạy trong Xcode, dùng các lệnh sau trong repository
cd bitchat
open bitchat.xcodeproj
  • Để chạy trên thiết bị thật, cần chuẩn bị cấu hình cục bộ và ký mã
    • Nhân bản file cấu hình bằng cp Configs/Local.xcconfig.example Configs/Local.xcconfig
    • Khi thêm Developer Team ID vào file mới, Bundle ID mặc định sẽ được đặt thành chat.bitchat.<team_id>
    • Cần tự đổi group.chat.bitchat trong entitlement thành group.<your_bundle_id>
  • Trên macOS, sau khi brew install just, có thể chạy cấu hình và mã nguồn bằng just run
    • Sau đó chạy just clean để khôi phục về trạng thái ban đầu cho việc build và phát triển ứng dụng di động
  • Tài nguyên bản địa hóa được chia giữa ứng dụng và share extension
    • Chuỗi của ứng dụng chính và quy tắc số nhiều được thêm vào Localizable.stringsLocalizable.stringsdict trong bitchat/Localization/Base.lproj/
    • Chuỗi của share extension được quản lý tại bitchatShareExtension/Localization/Base.lproj/Localizable.strings
    • Khóa nên được viết sao cho thể hiện rõ ý định, như app_info.features.offline.title, và tái sử dụng khóa hiện có nhiều nhất có thể
    • Kiểm tra biên dịch các thay đổi bản địa hóa bằng xcodebuild -project bitchat.xcodeproj -scheme "bitchat (macOS)" -configuration Debug CODE_SIGNING_ALLOWED=NO build
  • Dự án được phân phối dưới dạng public domain; có thể xem điều kiện chi tiết trong LICENSE

1 bình luận

 
Ý kiến trên Hacker News
  • Hôm qua tôi đã cài client desktop Radicle rồi nhập tên người dùng và mật khẩu mới, nhưng không có gì xảy ra. Khởi động lại ứng dụng cũng không vượt qua được màn hình tạo tài khoản/đăng nhập, nên việc dùng Radicle của tôi kết thúc ở đó

  • Nếu coi trọng tính khả dụng, cần xem xét lại phụ thuộc libs.gms.location và cũng nên phát hành trên F-Droid(https://gitlab.com/fdroid/fdroiddata/-/merge_requests/24907#...)

    • Có vẻ maintainer của kho đã dừng cả việc review PR lẫn trả lời tin nhắn. Nếu muốn tiếp tục, khả năng cao sẽ cần ai đó fork
  • Tôi bật Bitchat khi đi quanh Fusion Festival và phát hiện khoảng 20 thiết bị cùng vài tin nhắn, nhưng không ai trả lời tin nhắn tôi gửi. Trong 80.000 người mà có 20 thiết bị thì không phải là không có người dùng, nhưng cũng không nhiều; hơn nữa chỉ tối đa 2 hop, nên mật độ chưa đủ để phủ ngang khu vực sự kiện

    • Theo tôi biết, nó đã được dùng trong nhiều cuộc biểu tình và hiện cũng đang được dùng trong biểu tình CJP ở Ấn Độ. Chính phủ Ấn Độ cũng đã yêu cầu GitHub gỡ kho lưu trữ này
    • Ít nhất thì mesh Wi-Fi đã được thêm vào, nhưng ngoài các tình huống biểu tình liên quan đến sống còn, tốc độ chấp nhận khá chậm
      Nó hữu ích khi bạn bị tách khỏi nhóm trên máy bay vì không muốn trả thêm 50 đô la để ngồi cạnh nhau
    • Với một dự án ngách như thế này, 20 thiết bị đã là con số khá đáng kể
    • Việc nó thực sự hoạt động khá là hay. Tôi từng mang AirTag đến một lễ hội có 30.000 người để tìm nhóm của mình, nhưng nó hoàn toàn vô dụng
    • Lần cuối tôi dùng thì chỉ thấy đăng hình Hitler vẽ bằng ASCII art. Dù sao thì có khởi đầu vẫn là khởi đầu
  • Nếu quan tâm đến BitChat, cũng đáng cài sẵn phòng khi nó trở nên phổ biến hoặc gặp được người cùng dùng. Tự thử thì cảm giác nhắn tin mà không có Wi-Fi hay mạng di động khá phi thực tế

    • Mỗi khi đến nơi đông người tôi lại mở lên kiểm tra. Tuy vậy, với chat qua internet không phải mesh, tôi muốn có chat dựa trên khu vực lân cận hơn là geohash. Với geohash, lúc nào cũng khó chọn độ chi tiết cho phạm vi mong muốn
      Geohash chồng lớp cũng có thể ổn, nhưng tôi lo sẽ gây rối như bộ đàm: nếu chỉ một bên nằm trong phạm vi thì chỉ thấy một nửa cuộc trò chuyện. Geohash hiện tại có thể thu hẹp xuống khoảng 1 acre, quá chi tiết, nhưng có thể hữu ích khi toàn bộ một ký túc xá đại học 12 tầng dùng chung một phòng chat
    • Ứng dụng chat qua Bluetooth đã tồn tại rồi. Năm ngoái, trên một chuyến bay Ryanair ở châu Âu, tôi dùng Berkanan tìm thấy trên App Store để nói chuyện với bạn bè bị xếp ngồi xa; giao diện rất tệ nhưng chức năng thì hoạt động đúng
  • Trang Radicle cho thấy một thiết kế thú vị với tư cách nền tảng kho Git. Tôi thích lề toàn chiều rộng, cấu trúc điều hướng được tổ chức tốt và phần render code đẹp mắt

    • Tôi tự hỏi liệu có thể tạo một dịch vụ nhận bất kỳ URL kho Git nào rồi hiển thị theo cùng dạng đó không
  • Bitchat là một dự án của AOS. Khá bất ngờ là nó không được host lại trên ngit, cũng là một dự án AOS

    • Việc không có mirror trên ngit thì hơi bất ngờ, nhưng tôi hiểu vì sao họ không chọn làm nơi host chính. Nó cần ở nơi mọi người thực sự có thể tìm thấy
      Khi sa vào chủ nghĩa thuần túy Nostr, kết quả thường là chỉ có khoảng 5 người xem bài đăng. Tôi thích giao thức này, nhưng nếu muốn tăng người dùng thì phải đặt ứng dụng ở nơi mọi người đã có mặt
  • Tôi tò mò liệu nó có tính năng gì đặc biệt so với các sản phẩm nhắn tin phi tập trung khác như Nostr hay XMTP không