Cómo estamos construyendo una alternativa de Google Photos de código abierto con React Native

@ ehsan6shaFunctionland

Empaquetamos la tecnología en un gadget, brindando a los usuarios privacidad, versatilidad y la nueva UX de la web descentralizada.

La mayoría de nosotros usamos Google Photos para almacenar nuestros valiosos recuerdos y capturas de pantalla de documentos que necesitamos con frecuencia, como tarjetas de identificación. Esto fue beneficioso para nosotros y para Google.

Podríamos usar almacenamiento gratuito y una buena interfaz de aplicación para acceder a nuestras fotos a expensas de nuestra privacidad, y Google podría mejorar sus algoritmos de Inteligencia Artificial con el feed de nuestras fotos a expensas de una oferta de almacenamiento gratuito.

Sin embargo, todo cambió en junio, cuando Google detuvo su servicio gratuito. Ahora se ha convertido en una pérdida para nosotros, pérdida de privacidad, pérdida de dinero y, lo que es más importante, pérdida de confianza en lo que Google podría cambiar en el futuro.

Ese fue el momento en que mi amigo publicó nuestro borrador de trabajo para construir una alternativa de código abierto de Google Photos con React Native, pero no fue cuando comenzamos el proyecto.

https://github.com/functionland/photos

¿Cómo comenzó?

Fue hace dos años cuando las criptomonedas y fueron lo más destacado de la página de noticias, una vez más. Todos estaban entusiasmados con el potencial de para descentralizar los bancos centrales tradicionales, sin embargo, las noticias no tenían muchos titulares sobre el trabajo que se estaba haciendo para descentralizar toda la web.

En ese momento, mi amigo, un experto en inteligencia artificial, y yo, un desarrollador de pila completa, discutimos esto y comenzamos a buscar en Internet. Nos encontramos con varios proyectos prometedores destinados a descentralizar la web y, finalmente, después de analizar muchos de ellos, IPFS e IPLD, ambos de código abierto, nos llamaron la atención.

Nos parecieron prometedores, ya que tenían una estructura madura y una gran comunidad de desarrolladores de código abierto contribuyendo a ellos.

Entonces pensamos, esto era genial, ¿por qué la gente no los usaba en lugar de los servidores de almacenamiento central? Y la respuesta no fue difícil.

Mientras hablamos con nuestros amigos desarrolladores y no desarrolladores, se hizo evidente que incluso muchos desarrolladores no estaban al tanto de estos proyectos y muchos no desarrolladores no tenían el conocimiento técnico para configurarlos en sus computadoras, a pesar de que era solo un pocas líneas de mando.

Además, no había muchas aplicaciones que pudieran conectarse a ellos o su UX no era tan atractiva como las desarrolladas por la gran tecnología.

Pensamos que un marco que combina API de backend fáciles de usar, lo suficientemente fácil para un desarrollador de front-end promedio, y un hardware preconfigurado, plug and play para una persona no técnica, puede llenar este vacío y llevar la web descentralizada a todo el mundo está en casa.

Debo mencionar que NAS, como Synology, aunque poderoso, no es lo que queríamos lograr. Queríamos un nodo de aplicación completo, en otras palabras, un servidor descentralizado, no solo un disco de archivos.

Algunos antecedentes:

Nos unimos a la comunidad de IPFS e IPLD para aprender más al respecto. Después de unos meses, nos dimos cuenta de su enorme potencial para cumplir la promesa de la web descentralizada. Si no sabe qué es IPFS, significa "Sistema de archivos interplanetario".

Como su nombre indica, es un sistema de archivos, diseñado para descentralizar el almacenamiento de archivos y datos con conexión p2p, un reemplazo del protocolo http.

Utiliza el conjunto de herramientas libp2p, implementando el mismo protocolo que habilita la conexión p2p de la red Ethereum. IPFS también utiliza IPLD, datos enlazados interplanetarios. Si está familiarizado con JSON-LD, tiene las mismas bases pero es mucho más poderoso, porque puede vincular cualquier tipo de datos entre sí.

En palabras simples, IPFS codifica el contenido de los datos y le da este hash al usuario. El hash es único por contenido de archivo, lo que significa que dos archivos con el mismo contenido exacto tienen exactamente el mismo hash, por lo que tiene deduplicación incorporada, ¡no se necesita "limpieza de disco"!

Cualquiera que tenga el hash del archivo, puede encontrar dónde se encuentra el archivo usando una tabla hash descentralizada y conectarse directamente al host usando “libp2p” y buscar el contenido. Incluso puede crear un clúster para mantener un conjunto de nodos sincronizados entre sí, de modo que si uno cae, otro pueda servir el archivo.

Puede definir qué archivos debe servir su nodo (y mantener una copia local) y cuáles no. No es necesario tener una dirección IP estática o un nombre de dominio para entregar un archivo a otros, lo cual es una ventaja en comparación con los servicios en la nube o NAS.

¿Como le fue?

Empezamos a utilizar IPFS para almacenar archivos de forma descentralizada e IPLD como base de nuestro motor de base de datos. Sin embargo, hubo una deficiencia. Cualquiera que tenga el hash puede acceder a los datos de IPFS.

Eso no es tan privado, ¿verdad? Aunque IPFS tiene un modo privado, en ese momento (y actualmente), no funciona bien en Internet y es más adecuado para redes privadas. Pero había otra tecnología para cubrir este agujero, llamada reencriptación de proxy. Esto significa que encripta sus datos localmente usando su clave privada.

Cuando desea compartir el archivo con alguien, utiliza el cifrado de proxy para volver a cifrar el archivo con la clave pública de la otra persona y anunciar la dirección del nuevo archivo en Internet.

Ellos recuperan el archivo encriptado y pueden desencriptarlo usando su propia clave privada. Para que pueda compartir un archivo cifrado sin compartir su clave privada.

Teníamos todas las piezas resueltas y, para unirlas, necesitábamos hardware simple con todos los requisitos preinstalados. Luego se convierte en un nodo plug-and-play que se puede utilizar como servidor de aplicaciones.

Utiliza un paquete de código abierto que permite que cualquiera lo use libremente y contribuya No requiere ninguna configuración técnica Se puede acceder a través de Internet usando libp2p sin ningún dominio o IP estática Puede servir tanto archivos como datos (base de datos) Cifra y protege datos del usuario

Es modular, lo que significa que se pueden agregar módulos de hardware (torres) según sea necesario. Por ejemplo, se puede agregar a la base un módulo de hardware (torre) para minar cripto y uno para almacenamiento adicional.

El software proporciona API fáciles de usar para que los desarrolladores front-end creen aplicaciones sin tener que lidiar con el código back-end.

Esto es lo que se nos ocurrió en términos de diseño de hardware y lo llamamos "caja" (inicialmente "Caja negra", ¡pero lo cambiamos para que no se confunda con un aparato de avión!):

Aunque "box" es el hardware diseñado para ofrecer una opción de configuración previa a las personas que no conocen la tecnología, cualquiera puede instalar el software del servidor de box (un paquete de back-end de recifrado de IPFS + IPLD + proxy) en cualquier computadora, incluso frambuesa pi, y convertirlo en una "caja".

La disponibilidad de datos también fue importante. ¿Qué pasa si la caja del usuario se destruye como resultado de una inundación? Pensamos que un usuario debería poder tener más de una "caja" o compartirla con un miembro de la familia o un amigo (pudiendo acceder solo a su parte de los archivos) y sincronizar el contenido para tener más de una copia de sus archivos ¡En caso de que una inundación destruyera una de las cajas!

También debería poder conectarse a la red filecoin, una red de almacenamiento de archivos descentralizada construida sobre IPFS para almacenar archivos de forma segura en una red de nodos descentralizados a un costo reducido, para brindar más seguridad a las personas más cautelosas.

Luego pensamos en encontrar una manera de permitir que los desarrolladores de aplicaciones para el usuario se subieran a bordo rápida y fácilmente. Hablando de rápido y fácil en términos de “lenguajes de programación”, Javascript fue el aparente ganador. ¡Un lenguaje poderoso y ampliamente utilizado!

Por eso, pensamos en Node.js como una buena opción para que el backend proporcione API que los desarrolladores de front-end puedan utilizar en cualquier aplicación, incluidas las aplicaciones nativas de reacción y reacción.

Fue más o menos cuando Google anunció que nos cobraría por las fotos, y pensamos que podría ser una buena contribución y un escaparate para esta plataforma de código abierto.

Y para mostrar lo fácil que era desarrollar en este backend y lo útil que sería para los usuarios finales, comenzamos a desarrollar una alternativa de Google Photos nativa de reacción de código abierto utilizando react native.

Todavía está en desarrollo activo y el lanzamiento inicial será en julio, pero estábamos muy emocionados de compartirlo tan pronto como llegamos a una versión funcional. Puedes ver el github aquí:

https://github.com/functionland/photos

¿Dónde estamos ahora?

La aplicación Fotos es la primera aplicación de front-end, como un reemplazo de código abierto para Google Photos, que puede conectarse a cualquier backend (AWS, GCloud, Azure, otros hosts, caja, red IPFS llamada filecoin) para almacenar y buscar fotos. Lo hicimos usando react-native y mecanografiado, y minimizamos el uso de estados de reacción en él para minimizar las re-renderizaciones y hacerlo tan fluido como Google Photos.

"Box-server" es el back-end de código abierto que se utiliza para almacenar los datos, sincronizar datos entre cajas y volver a cifrar y compartir los archivos con otros.

Proporciona una biblioteca javascript para ser importada en la aplicación nativa de react y permite que la aplicación se conecte directamente a la caja del usuario usando libp2p.

"Graph" es la biblioteca de código abierto que permite a los desarrolladores de aplicaciones para el usuario interactuar con la "caja", utilizando un paquete familiar.

El código para todos estos están empaquetados en la “caja” monorepo:

https://github.com/functionland/box

Planeamos lanzar la demostración de trabajo de MVP de "box" y la aplicación Photos, en julio. En ese momento, los usuarios deberían poder probarlo para almacenar sus fotos y acceder a ellas con la misma experiencia que obtienen ahora con Google Photos, y probar la web descentralizada y realmente poseer sus datos.

También permite a los desarrolladores de aplicaciones para el usuario ver las API y comenzar a desarrollar sus propias aplicaciones si lo encuentran útil. Si desea leer más sobre la idea de caja, eche un vistazo a nuestro sitio web:

https://fx.land

¿El potencial?

La idea de la "caja" puede ser un paso adelante para llevar la web descentralizada al hogar de todos y, al menos parcialmente, reemplaza los servicios tradicionales de gran tecnología con su correspondiente versión descentralizada. Web3.0 libera a Internet del control de algunas corporaciones y devuelve el control de los datos a los usuarios.

"Caja" puede convertirse en su "Agente leal". Si Netflix quiere sugerirle películas, no obtiene su información. Almacena su información en su propia caja e instala la aplicación de sugerencia de películas proporcionada por la comunidad (incluso puede ser la propia Netflix). Netflix se conecta a su caja y envía una lista de películas que tiene. “Box” procesa los datos de Netflix, los compara con sus datos y le sugiere las películas. No se envían datos de su caja a Netflix, pero aún le permite obtener sugerencias de películas personalizadas o compartir lo que quiera con quien quiera de una manera encriptada y segura.

Pero si es GRATIS, ¿cómo se sustenta? ¡Los desarrolladores que se suben a bordo también necesitan comer!

Al igual que la experiencia web actual, existirían muchas aplicaciones gratuitas y también de pago. Los usuarios pueden optar por instalar un módulo de minería (torre) en su caja, para que extraiga criptomonedas y se las guarde.

Luego, si el desarrollador de una aplicación establece un precio por la aplicación que desarrolla, box paga el precio con la moneda extraída, en lugar de pagar a Google, o cualquier corporación, con nuestros datos privados y atención por anuncios.

Además, permite a los desarrolladores personalizar aplicaciones para su propia caja y compartir esta versión personalizada (y probablemente rica en funciones) de la aplicación con amigos y familiares.

En este camino, nos encantaría contar con el apoyo de la comunidad de desarrolladores. Puede consultar nuestro repositorio de GitHub para hacernos saber sus comentarios.

¡Espero ansiosamente escuchar sus comentarios! Por favor, no dude en dejar comentarios constructivos o echar por tierra toda la idea. Solo en la sabiduría común prosperaremos, nadie lo sabe todo, definitivamente no los novatos que comenzaron esto 🙂 – Amor y paz, Functionlandby Functionland @ ehsan6sha. Empaquetamos la tecnología en un gadget, brindando a los usuarios privacidad, versatilidad y la nueva UX de la web descentralizada.Posee tus datos

Historias relacionadas

Etiquetas

Únete a Hacker Noon

Crea tu cuenta gratuita para desbloquear tu experiencia de lectura personalizada.