1 puntos por GN⁺ 3 시간 전 | 1 comentarios | Compartir por WhatsApp
  • Bitchat es una app de mensajería P2P descentralizada para iOS y macOS que combina una red mesh Bluetooth con Nostr basado en internet, y funciona sin cuentas, números de teléfono ni servidores centrales
  • Sin conexión, admite retransmisión de hasta 7 saltos mediante Bluetooth LE; con conexión a internet, se conecta a canales globales y basados en ubicación a través de más de 290 relays de Nostr
  • Los mensajes privados priorizan el Noise Protocol por Bluetooth; si no es posible conectarse, cambian a NIP-17 de Nostr, y si ninguna de las dos opciones está disponible, quedan en cola hasta que puedan enviarse
  • Ofrece canales por bloque, barrio, ciudad, estado/provincia y país según la precisión del geohash, además de comandos estilo IRC como /slap, /msg y /who, y Emergency Wipe para borrar datos con tres toques
  • El proyecto fue publicado como dominio público y puede ejecutarse con Xcode o just, aunque las compilaciones en dispositivos reales requieren configurar el Developer Team ID y los entitlements

Estructura de transmisión que combina Bluetooth y Nostr

  • Bitchat es una app nativa para iOS y macOS que combina mesh Bluetooth y Nostr, y también está disponible en la App Store
  • La red mesh Bluetooth descubre y conecta automáticamente dispositivos cercanos sin internet
    • Se comunica directamente P2P mediante Bluetooth LE y retransmite mensajes hasta 7 saltos a través de dispositivos vecinos
    • Admite cifrado de extremo a extremo basado en Noise Protocol y secreto hacia adelante
    • Usa un formato de paquetes binarios comprimidos adaptado a las limitaciones de Bluetooth LE y ciclos de actividad optimizados para batería
    • El canal mesh #bluetooth está orientado a comunicaciones offline en protestas, desastres, zonas remotas y escenarios similares
  • La capa de transporte Nostr ofrece mensajería por internet a través de más de 290 relays globales
    • Crea salas de chat basadas en ubicación con coordenadas geohash y usa una nueva identidad cifrada temporal para cada región
    • Los mensajes privados se protegen con gift wrapping de NIP-17
    • Los canales de ubicación requieren conexión a internet y se usan para comunidades locales, eventos cercanos y debates regionales
      • block 7 caracteres: manzana urbana
      • neighborhood 6 caracteres: zona o barrio
      • city 5 caracteres: ciudad
      • province 4 caracteres: estado o provincia
      • region 2 caracteres: país o región grande
  • El enrutamiento de mensajes privados elige automáticamente el medio de transmisión disponible
    1. Si se puede usar una sesión Noise existente, prioriza una conexión Bluetooth rápida y más privada
    2. Si Bluetooth no está disponible, envía por la red de relays usando la clave pública de Nostr del destinatario y NIP-17
    3. Si ninguno de los dos métodos está disponible, guarda el mensaje en cola y lo entrega automáticamente cuando se establece la conexión
  • También ofrece compresión de mensajes LZ4, modo de batería adaptativo, optimización de red, comandos estilo IRC y Emergency Wipe para eliminar de inmediato todos los datos con tres toques
  • El protocolo detallado puede consultarse en el Technical Whitepaper

Compilación, localización y licencia

  • Para ejecutarlo en Xcode, usa los siguientes comandos en el repositorio
cd bitchat
open bitchat.xcodeproj
  • Para ejecutarlo en un dispositivo real, hay que preparar la configuración local y la firma de código
    • Clona el archivo de configuración con cp Configs/Local.xcconfig.example Configs/Local.xcconfig
    • Al agregar el Developer Team ID al nuevo archivo, el Bundle ID predeterminado queda configurado como chat.bitchat.<team_id>
    • Debes cambiar manualmente group.chat.bitchat en los entitlements por group.<your_bundle_id>
  • En macOS, después de brew install just, es posible configurar y ejecutar el código fuente con just run
    • Luego, al ejecutar just clean, se restaura el estado original para compilar y desarrollar la app móvil
  • Los recursos de localización están divididos entre la app y la extensión para compartir
    • Las cadenas de la app principal y las reglas de pluralización se agregan en Localizable.strings y Localizable.stringsdict dentro de bitchat/Localization/Base.lproj/
    • Las cadenas de la extensión para compartir se gestionan en bitchatShareExtension/Localization/Base.lproj/Localizable.strings
    • Las claves deben escribirse de forma que expresen la intención, como app_info.features.offline.title, y se deben reutilizar las claves existentes siempre que sea posible
    • Los cambios de localización se verifican compilando con xcodebuild -project bitchat.xcodeproj -scheme "bitchat (macOS)" -configuration Debug CODE_SIGNING_ALLOWED=NO build
  • El proyecto se distribuye como dominio público; los términos detallados pueden consultarse en LICENSE

1 comentarios

 
GN⁺ 3 시간 전
Opiniones en Hacker News
  • Ayer instalé el cliente de escritorio de Radicle e ingresé un nuevo nombre de usuario y contraseña, pero no pasó nada. Incluso al reiniciar la app, no pude pasar de la pantalla de creación de cuenta/inicio de sesión, así que mi uso de Radicle terminó ahí.

  • Si les importa la disponibilidad, deberían reconsiderar la dependencia de libs.gms.location y distribuir también en F-Droid (https://gitlab.com/fdroid/fdroiddata/-/merge_requests/24907#...)

    • Parece que el mantenedor del repositorio dejó de revisar el PR y de responder mensajes. Para seguir adelante, es muy probable que alguien tenga que hacer un fork.
  • En Fusion Festival activé Bitchat y caminé por ahí; encontré unas 20 máquinas y algunos mensajes, pero nadie respondió a los mensajes que envié. De 80 mil personas, 20 dispositivos no significa que no hubiera usuarios en absoluto, pero tampoco eran muchos, y como llegó como máximo a 2 saltos, no había densidad suficiente para cubrir todo el predio del evento.

    • Tengo entendido que se usó en varias protestas y que actualmente también se usa en las protestas del CJP en India. El gobierno indio incluso pidió a GitHub que eliminara el repositorio.
    • Al menos ya se agregó Wi-Fi mesh, pero salvo en contextos de protesta donde hay vidas en juego, la adopción es bastante lenta.
      Es útil cuando te separan de tus acompañantes en un avión porque no quisiste pagar 50 dólares extra para sentarte junto a ellos.
    • Para un proyecto de nicho como este, 20 dispositivos ya es una cifra considerable.
    • Es bastante genial que realmente funcione. Llevé un AirTag a un festival con 30 mil personas para encontrar a mi grupo, pero fue completamente inútil.
    • La última vez que lo usé, solo había una imagen de Hitler hecha con arte ASCII. Aun así, por algo se empieza.
  • Si te interesa BitChat, vale la pena instalarlo por si se vuelve popular o te encuentras con alguien con quien usarlo. Al probarlo yo mismo, se sintió irreal poder intercambiar mensajes de texto sin Wi-Fi ni red móvil.

    • Cada vez que voy a un lugar concurrido lo abro para revisar. Dicho eso, en chats por internet que no son mesh, me gustaría que hubiera chat basado en cercanía en vez de geohash. Con geohash siempre es difícil elegir la granularidad del rango deseado.
      Los geohashes superpuestos podrían estar bien, pero me preocupa la confusión de que, como con un walkie-talkie, si solo un lado está dentro del rango se vea solo la mitad de la conversación. Actualmente el geohash se reduce hasta alrededor de 1 acre, lo que es demasiado preciso, aunque podría ser útil cuando todo un dormitorio universitario de 12 pisos usa una misma sala de chat.
    • Las apps de chat por Bluetooth ya existen. El año pasado, en un vuelo de Ryanair en Europa, usé Berkanan, que encontré en la App Store, para hablar con amigos sentados lejos; se veía horrible, pero funcionaba bien.
  • El sitio de Radicle muestra un diseño interesante como plataforma de repositorios Git. Me gustan los márgenes de ancho completo, la navegación bien organizada y el renderizado de código agradable.

    • Me pregunto si sería posible crear un servicio que conecte una URL arbitraria de repositorio Git y la muestre con el mismo formato.
  • Bitchat es un proyecto de AOS. Me sorprende que no lo hayan vuelto a alojar en ngit, otro proyecto de AOS.

    • Es un poco sorprendente que no haya un mirror en ngit, pero entiendo que no lo usen como alojamiento principal. Tiene que estar en un lugar donde la gente realmente pueda descubrirlo.
      Cuando caes en el purismo de Nostr, a menudo terminas con que apenas 5 personas ven tus publicaciones. Me gusta el protocolo, pero si quieres aumentar la cantidad de usuarios, tienes que poner la app donde la gente ya está.
  • Me pregunto si tiene alguna función especial frente a otros productos de mensajería descentralizada como Nostr o XMTP.