1 poin oleh GN⁺ 3 jam lalu | 1 komentar | Bagikan ke WhatsApp
  • Bitchat adalah aplikasi perpesanan P2P terdesentralisasi untuk iOS·macOS yang menggabungkan jaringan mesh Bluetooth dan Nostr berbasis internet, sehingga dapat beroperasi tanpa akun, nomor telepon, atau server pusat
  • Saat offline, aplikasi ini mendukung relay hingga 7 hop melalui Bluetooth LE, dan saat terhubung ke internet akan terhubung ke kanal global maupun berbasis lokasi melalui lebih dari 290 relay Nostr
  • Pesan pribadi memprioritaskan Noise Protocol di Bluetooth, beralih ke NIP-17 milik Nostr jika tidak bisa terhubung, dan jika keduanya tidak memungkinkan maka disimpan dalam antrean sampai dapat dikirim
  • Berdasarkan presisi geohash, tersedia kanal tingkat blok, lingkungan, kota, provinsi, dan negara, serta mendukung perintah ala IRC seperti /slap, /msg, /who dan Emergency Wipe untuk menghapus data dengan tiga kali ketukan
  • Proyek ini dirilis ke domain publik dan dapat dijalankan dengan Xcode atau just, tetapi build untuk perangkat fisik memerlukan pengaturan Developer Team ID dan entitlement

Arsitektur transport yang menggabungkan Bluetooth dan Nostr

  • Bitchat adalah aplikasi native iOS·macOS yang menggabungkan pesan Bluetooth dan Nostr, dan juga tersedia di App Store
  • Jaringan mesh Bluetooth secara otomatis menemukan dan menghubungkan perangkat di sekitar tanpa internet
    • Berkomunikasi langsung secara P2P melalui Bluetooth LE, dan merelay pesan hingga 7 hop melalui perangkat terdekat
    • Mendukung enkripsi end-to-end berbasis Noise Protocol dan forward secrecy
    • Menggunakan format paket biner terkompresi yang disesuaikan dengan batasan Bluetooth LE serta duty cycle yang dioptimalkan untuk baterai
    • Kanal mesh #bluetooth ditujukan untuk komunikasi offline dalam situasi seperti demonstrasi, bencana, atau wilayah terpencil
  • Lapisan transport Nostr menyediakan pesan internet melalui lebih dari 290 relay global
    • Membuat ruang obrolan berbasis lokasi dengan koordinat geohash, dan menggunakan identitas terenkripsi sementara yang baru untuk setiap wilayah
    • Pesan pribadi dilindungi dengan pembungkusan gift wrapping NIP-17
    • Kanal lokasi memerlukan koneksi internet dan dapat digunakan untuk komunitas lokal, acara setempat, dan diskusi regional
      • block 7 karakter: blok kota
      • neighborhood 6 karakter: kawasan·lingkungan
      • city 5 karakter: kota
      • province 4 karakter: provinsi
      • region 2 karakter: negara·wilayah besar
  • Routing pesan pribadi secara otomatis memilih sarana transport yang tersedia
    1. Jika sesi Noise yang ada dapat digunakan, koneksi Bluetooth yang cepat dan lebih privat akan diprioritaskan
    2. Jika Bluetooth tidak tersedia, pesan dikirim melalui jaringan relay dengan kunci publik Nostr penerima dan NIP-17
    3. Jika kedua cara tidak tersedia, pesan disimpan dalam antrean lalu dikirim otomatis saat koneksi terbentuk
  • Juga tersedia kompresi pesan LZ4, mode baterai adaptif, optimasi jaringan, perintah ala IRC, dan Emergency Wipe untuk segera menghapus semua data dengan tiga kali ketukan
  • Detail protokol lebih lanjut dapat dilihat di Technical Whitepaper

Build, lokalisasi, dan lisensi

  • Untuk menjalankan di Xcode, gunakan perintah berikut dari repositori
cd bitchat
open bitchat.xcodeproj
  • Untuk menjalankan di perangkat fisik, Anda perlu menyiapkan konfigurasi lokal dan code signing
    • Gandakan berkas konfigurasi dengan cp Configs/Local.xcconfig.example Configs/Local.xcconfig
    • Tambahkan Developer Team ID ke berkas baru tersebut, lalu Bundle ID default akan disetel menjadi chat.bitchat.<team_id>
    • Anda harus mengubah entitlement group.chat.bitchat secara manual menjadi group.<your_bundle_id>
  • Di macOS, setelah brew install just, Anda dapat menyiapkan dan menjalankan source dengan just run
    • Setelah itu, jalankan just clean untuk mengembalikan ke keadaan semula untuk build dan pengembangan aplikasi mobile
  • Sumber daya lokalisasi dibagi antara aplikasi dan shared extension
    • Tambahkan string aplikasi dasar dan aturan bentuk jamak ke Localizable.strings dan Localizable.stringsdict di bitchat/Localization/Base.lproj/
    • String shared extension dikelola di bitchatShareExtension/Localization/Base.lproj/Localizable.strings
    • Kunci sebaiknya ditulis agar maksudnya terlihat jelas, seperti app_info.features.offline.title, dan sebisa mungkin gunakan kembali kunci yang sudah ada
    • Untuk perubahan lokalisasi, verifikasi kompilasi dengan xcodebuild -project bitchat.xcodeproj -scheme "bitchat (macOS)" -configuration Debug CODE_SIGNING_ALLOWED=NO build
  • Proyek ini didistribusikan ke domain publik, dan syarat detailnya dapat dilihat di LICENSE

1 komentar

 
GN⁺ 3 jam lalu
Komentar Hacker News
  • Kemarin saya memasang klien desktop Radicle dan memasukkan nama pengguna serta kata sandi baru, tetapi tidak terjadi apa-apa. Bahkan setelah aplikasi dimulai ulang, saya tetap tidak bisa melewati layar pembuatan akun/login, jadi penggunaan Radicle berakhir di sana

  • Jika mementingkan ketersediaan, dependensi libs.gms.location perlu ditinjau ulang dan aplikasinya juga harus didistribusikan di F-Droid(https://gitlab.com/fdroid/fdroiddata/-/merge_requests/24907#...)

    • Sepertinya pengelola repositori sudah berhenti meninjau PR dan membalas pesan. Jika ingin melanjutkan, kemungkinan besar seseorang harus melakukan fork
  • Saat Fusion Festival, saya menyalakan Bitchat sambil berkeliling dan menemukan sekitar 20 perangkat serta beberapa pesan, tetapi tidak ada yang membalas pesan yang saya kirim. Dari 80 ribu orang, 20 perangkat berarti bukan tidak ada pengguna sama sekali, tetapi juga tidak banyak, dan hanya sampai maksimal 2 hop, sehingga kepadatannya belum cukup untuk menjangkau seluruh area acara

    • Setahu saya ini sudah dipakai di beberapa aksi protes dan saat ini juga digunakan dalam protes CJP di India. Pemerintah India juga meminta GitHub menghapus repositorinya
    • Setidaknya mesh Wi-Fi sudah ditambahkan, tetapi di luar situasi protes yang menyangkut hidup dan mati, laju adopsinya cukup lambat
      Ini berguna saat terpisah dari rombongan di pesawat karena tidak mau membayar 50 dolar ekstra untuk duduk berdampingan
    • Untuk proyek niche seperti ini, 20 perangkat sudah termasuk angka yang cukup besar
    • Fakta bahwa ini benar-benar berfungsi cukup keren. Saya membawa AirTag untuk mencari rombongan di festival berisi 30 ribu orang, tetapi sama sekali tidak berfungsi
    • Terakhir kali saya memakainya, yang muncul hanya gambar Hitler yang digambar dengan seni ASCII. Namun awal tetaplah awal
  • Jika tertarik dengan BitChat, ada baiknya memasangnya dulu untuk berjaga-jaga jika nanti populer atau bertemu orang yang juga memakainya. Setelah mencobanya langsung, rasanya tidak nyata bisa saling mengirim pesan teks tanpa Wi-Fi atau jaringan seluler

    • Setiap kali pergi ke tempat ramai, saya menjalankannya untuk mengecek. Namun untuk chat internet yang bukan mesh, saya berharap ada chat berbasis sekitar alih-alih geohash. Pada geohash, selalu sulit memilih tingkat ketelitian jangkauan yang diinginkan
      Geohash bertumpuk mungkin tidak buruk, tetapi saya khawatir akan membingungkan seperti radio dua arah, ketika hanya satu pihak yang berada dalam jangkauan sehingga hanya setengah percakapan yang terlihat. Saat ini geohash dipersempit hingga sekitar 1 acre sehingga terlalu presisi, tetapi bisa berguna jika seluruh asrama kampus 12 lantai memakai satu ruang chat
    • Aplikasi chat Bluetooth sudah ada. Tahun lalu, dalam penerbangan Ryanair di Eropa, saya memakai Berkanan yang saya temukan di App Store untuk mengobrol dengan teman-teman yang duduk terpisah; tampilannya buruk, tetapi fiturnya bekerja dengan baik
  • Situs Radicle menampilkan desain yang menarik sebagai platform repositori Git. Saya suka margin lebar penuh, struktur navigasi yang tersusun baik, dan rendering kode yang enak dilihat

    • Saya penasaran apakah bisa dibuat layanan yang menghubungkan URL repositori Git sembarang lalu menampilkannya dalam bentuk yang sama
  • Bitchat adalah proyek dari AOS. Agak mengejutkan bahwa proyek ini tidak di-host ulang di ngit, yang juga merupakan proyek AOS

    • Agak mengejutkan tidak ada mirror di ngit, tetapi bisa dipahami mengapa itu tidak dijadikan lokasi hosting utama. Karena proyeknya harus berada di tempat yang benar-benar bisa ditemukan orang
      Jika terlalu tenggelam dalam purisme Nostr, sering kali hasilnya hanya 5 orang yang melihat postingan. Saya suka protokolnya, tetapi untuk menambah pengguna, aplikasi harus ditempatkan di tempat orang-orang sudah berada
  • Saya penasaran apakah ada fitur khusus dibanding produk messaging terdesentralisasi lain seperti Nostr atau XMTP