3 links about WebRTC

WebRTC (Real-Time Communications) is a communication way between 2 (or more) browsers without a server doing the job. It allows, for instance, to make video streaming, radio broadcasting stations, chats, or real-time edition apps.

World Base Chat: Meet your neighbors

Some weeks ago, at the beginning of the lockdown in Spain, I did a fork from another project to create World Base Chat, a tool to meet your neighbors online. It allows you to chat with your neighbors, the ones you know and the ones you don’t.

A bit of history

When the lockdown started, I encouraged the use of Next Door. This is a platform that allows neighbors to be in touch, make groups, offer and request help… However, some users said to me that this is requesting a lot of information and that’s true.

Next week, Google announced the shut down of Neighbourly, an app to connect you with your neighbors and make sharing local information more human and helpful.

I wanted a way to talk to people from my town to know, for instance, if I can help them with something. But, I also wanted the possibility to talk to people from NYC, New Delhi, and other locations to ask them how is the situation there. I wanted the capacity to ask people at the origin of the information in a time full of fake news.

I forked another project to build, spending only two days, the seed of World Base chat, a web app to meet your neighbors.

There are some users using the app, so I think that it could be a real thing.

World Base Chat app
World Base Chat

It is not too beautiful, but it owns the functionalities that everybody needs to stay in touch with their neighbors.

Functionalities of World Base Chat

It allows anonymous users to chose a location to chat with anybody connected to the same location or the regions that contain it. So, if you choose Madrid (the city), you can chat with people in Madrid (the city and the region) but also in Spain and in the World chat. Everybody is in the World chat because all the people are on the planet or orbiting around.

You can also create a group linked to any location. You can create a group for your neighborhood. A group to contact your friends from the bowling alley. You can create a group for your University campus or for the basketball court. Yes, you can create a group for whatever you want and share the link to spread the new meeting point.

You can also see some ‘Top hosts’ that are currently active, and the data from Wordlometer related to coronavirus, in order to avoid fake news.

I know that this is very basic functionality, but this bus just started its trip and I am thinking about the next stops while doing some little improvements.

Next stops

I did some tests and got some data, and I think that the bigger next stop is private chats with the possibility to add voice and/or video to the conversation. I am starting to validate this and I trust that it is going to be a changemaker.

There are other nice-to-have like beauty and/or custom user names, maybe a registry, an emoji keyboard, drawing open graph information when people share a link… but my bid is for video chat. What do you think?

I would love read your feedback, just here or in the World Base Chat.

Webby Chat: una comunidad en torno a cualquier web

Si estáis navegando desde un escritorio y no tenéis ningún bloqueador de scripts, arriba a la izquierda estaréis viendo un badge con un numerito. Eso es Webby Chat, un chat en el que el otro día un visitante me pidió que escribiese sobre algún proyecto porque llevaba mucho sin contar nada, y voy a satisfacerle precisamente hablando de ello: Webby Chat.

Conversación en Webby Chat

¿Qué es Webby Chat?

Webby Chat es un chat que permite a los usuarios conversar en cualquier web por la que estén navegando, creando comunidad allá donde pasan tiempo leyendo, viendo vídeos, jugando…

¿Qué aporta Webby Chat?

Los usuarios obtienen información y la oportunidad de conocer gente con sus mismos intereses de un modo sencillo, y las webs obtienen un modo de interacción con sus visitantes pudiendo fomentar su participación, navegación interna, etc.

Los que me seguís, ya sabéis que como buen freelance hago todo tipo de proyectos, y hace unos meses empecé a trabajar de manera estable con una empresa muy potente para ver cómo podíamos ayudar a los usuarios a comunicarse con amigos y gente nueva sin que perdiesen el foco de lo que estaban haciendo, el resultado está siendo Webby Chat.

Aún es una aplicación muy nueva, y es probable que vayan surgiendo nuevas funcionalidades a medida que nos vayáis pidiendo o vayamos detectando las distintas necesidades, pero por el momento ya la tenemos en distintos sabores dependiendo de quien seas:

Si eres un visitante

Si eres un visitante (no como los de V, si no de sitios web) que dedica mucho tiempo a leer noticias en periódicos, a ver memes, vídeos, a comprar, a jugar online, a usar aplicaciones (como Google Docs u Office365) en las que no siempre sabes hacer todo; tal vez eches en falta un poco de inmediatez, el poder comentar algo o preguntarle a alguien.

Tal vez te surja la duda de si alguien conoce una oferta o cupón descuento para ese producto que te interesa pero aún no te has decidido a comprar, o quieras comentar esa noticia de última hora que parece que anuncia el fin del mundo.

Para ti, visitante, navegante asiduo, comprador informado o creador de memes… para ti tenemos una estupenda extensión de Chrome que te permitirá hablar con otros visitantes allá donde estés sin tener que esperar a que el webmaster que corresponda instale Webby Chat para ti.

Si eres un webmaster

Si administras una web, empresa, blog, sitio de reportajes, canal de streaming… hay muchos motivos por los cuales podrías tener interés en estar en contacto continuo con los usuarios que están navegando por tu sitio. Puede que te interese su feedback, sus problemas y preocupaciones, puede que quieras charlar con esas personas para descubrir quienes son, puede que quieras echarles una mano o pedírsela… Sin embargo, lo que es seguro (porque es algo que todos queremos) es que quieres más tiempo en página y más navegación interna.

Seguro que te ha costado mucho que lleguen hasta tu web, ¿no te gustaría que se pasasen más tiempo contigo? ¿no te gustaría que visitaran un par de noticias o productos más?

Muchos community managers se pasan el día jugando al ping pong con los usuarios para enviarlos desde Facebook, Twitter, Instagram, TikTok, Twitch, Youtube, etc. hasta las webs donde pueden consumir la información o lo que sea. Sin embargo, al llegar hacen el consumo mínimo y rebotan de nuevo hacia su red social favorita.

Con Webby Chat esto se puede mitigar aportándoles valor en tiempo real en la propia web, facilitándoles in situ un link hacia otra cosa que les interese.

Si este es tu caso, tenemos sabores de Webby Chat para ti.

Webby Chat con WordPress

Puedes usar el plugin de WordPress que con dos clicks te da toda la funcionalidad. Lo podéis ver, por ejemplo, en la propia página de Webby Chat.

Webby Chat sin WordPress

Si no funcionáis con WordPress, tenéis la opción de incluir un archivo css y otro js que se encargarán de hacer el trabajo. Por ejemplo, en este mi sitio, es una simple etiqueta metida con Google Tag Manager.

Sea cual sea vuestro lado del barco, no dudéis en probar Webby Chat, que ya veréis como ayuda en la navegación y, por favor, cuando lo hagáis no os quedéis en silencio. Dadnos feedback, pedidnos ayuda, contadnos qué echáis en falta o preguntadnos cómo podéis tener usuarios oficiales como el que uso yo para chatear en esta web.

¡Ojo! Cuidado en Firebase con el forEach de los Snapshots de la Realtime Database

Firebase es un PaaS de Google con un nivel de abstracción muy alto que te permite tener un completo backend serverless. Hacía años que no lo usaba y estoy encantado con él, pero hay que andarse con ojo porque ningún entorno ni tecnología llega a ser perfecto.

La semana pasada estaba programando una cosa en Javascript usando la librería de Firebase, para un proyecto en el que he usado su Realtime Database para montar un sistema de presencia que me diga en todo momento quién está on y quién está off.

En un momento dado, detecté un problema que no entendía de dónde podía venir:

Hacía una query a la base de datos, que me devolvía unos resultados que yo procesaba. Sin embargo, el resultado era un único dato cuando en la BBDD tenía que haber más. Tras unos cuantos tests, me di cuenta de que si lo mismo lo programaba de distintos modos (que deberían comportarse igual) ¡el resultado era distinto!

snapshot.forEach(s=> array.push(s.val()));
//vs
snapshot.forEach(s=>{array.push(s.val())});

Esas dos estructuras, daban resultados distintos ¿cómo podía ser?

Tras darle unas cuantas vueltas con cara de absoluta incredulidad llegué a la clave del asunto en el último sitio que me quedaba por mirar de la documentación de Firebase:

Último ejemplo de la documentación de Firebase
https://firebase.google.com/docs/reference/js/firebase.database.DataSnapshot#for-each

Se habían alineado Roma con Santiago:

  • Un desarrollador/diseñador había elegido usar un nombre habitual, dándole un comportamiento no habitual.
  • En Javascript todo lo que no sea falso/0/undefined se evalua como true.
  • La información referente a como funcionaba estaba en el último rincón de la documentación.

Todo habría sido distinto si el método se hubiese llamado cancellableForEach; o si al menos hubiesen comprobado que el valor recibido era verdadero comparándolo con el operador de igualdad estricta (“=== true”); o si, ya cogiéndolo por los pelos, la ejecución del método cuando reciba algo que no sea booleano arrojase un warning…

En cualquier caso, tras un rato de frustración el problema quedó solucionado.

Valga este post tanto para recordar que hay que tener cuidado en Firebase con el forEach de los Snapshots de la Realtime Database, como para recordar la importancia de los nombres que ponemos a las cosas.

El nivel de acceso Archive en Azure

En las cuentas de Storage en Azure, disponemos de varios elementos de configuración que influyen directamente en la disponibilidad de la información que vamos a almacenar, el precio de tenerlo guardado, el de acceder a los datos y la latencia que tendremos hasta poder leer el primer byte de información. Entre esos elementos está el propio tipo de cuenta y el nivel de rendimiento, así como el tipo de replicación. Para simplificar todo y no desviarnos del objetivo de este artículo, nos centraremos en las cuentas de tipo propósito general V2 (StorageV2) con nivel de rendimiento estándar y replicación LRS (Locally-redundant storage). De este modo nos podremos centrar en el elemento que nos interesa explicar hoy: el nivel de acceso.

Nivel de acceso Azure

Seguir leyendo en CompartiMOSS.

La gran pregunta (y su corta respuesta)

Recurrentemente hay quien me pregunta si estaría interesado en trabajar a jornada completa para una única empresa. Normalmente son clientes con los que ya he trabajado, o gente que me conoce de otras épocas. La respuesta muy corta es un sí. Hay ciertas cosas que creo que sólo se pueden hacer cuando estás trabajando para una empresa y precisamente ahora, que he tenido ciertos cambios en mi vida que me permiten ir a vivir a cualquier sitio del mundo (y tengo que tomar alguna decisión en ese sentido), puede ser un buen momento para involucrarme en un proyecto.

La respuesta no tan corta sigue siendo un sí, pero si todo encaja. Al fin y al cabo como autónomo estoy bien, me gano la vida haciendo cosas que me gustan y tengo mucha libertad. Es cierto que hay ciertos proyectos que están avanzando (¡pintan muy bien!) y que no querría dejar de lado ya que tampoco me consumen apenas tiempo, pero la parte más importante de mi día a día la podría remplazar.

Como decía, hay ciertas cosas que creo que no puedes hacer fácilmente como autónomo y que se echan de menos. Ya sea gestionar equipos de decenas de personas o plantear arquitecturas de grandes soluciones, hay cosas que como freelance te vas a encontrar pocas veces (o al menos yo no me encuentro muy a menudo).

A pesar de que me guste programar y que programe en cualquier cosa, creo que soy mejor con la arquitectura y mejor aún gestionando gente y proyectos. Como freelance, las cosas que me surgen acostumbran a ser más de desarrollo puro y duro.

Tampoco es que sea un mal programador, si atendemos a los artículos de Chritopher Wenham sobre las señales de ser un buen o mal programador, estoy dentro de los buenos. ¡De algo tenía que servir estar haciéndolo desde que tengo uso de razón!

El otro día, le resumí mis puntos fuertes a una persona a la que me tocaba actualizar, os les comparto:

  • Desarrollo, y conozco multitud de tecnologías/plataformas/lenguajes. Soy de los que creen que hay que usar la mejor herramienta para una solución que se quiera crear. Aunque no soy especialista en ninguna, por lo que cualquier desarrollador que lleve un par de años trabajando con X debería saber más que yo de X.
  • Se me da mejor la arquitectura que el desarrollo.
  • Se me da mejor gestionar que la arquitectura.
  • Como he tenido siempre un pie en el lado técnico y otro en el de negocio, hablo el idioma de todos. Soy un gran intercomunicador.
  • He participado en el proceso de selección de unas 100 personas. De 30 he liderado yo el proceso de selección y tenido la última palabra. Una tasa de acierto (gente que ha cumplido las expectativas y ha permanecido más de un año en la empresa) de más de un 95%.
  • He formado parte del consejo de dirección de una empresa de Ingram Micro (una multinacional) que tenía que pasar de 12 empleados a 100 en un año.
  • La gente a mi cargo siempre ha progresado muchísimo a nivel profesional, incluso gente que antes de entrar a mi cargo querían despedir.
  • He montado y gestionado empresas.
  • Los grupos a mi cargo directo han sido de hasta 10 personas, aunque indirectamente he influido en el modo de gestionar, formar, y mantener felices de decenas.
  • Se me da bien optimizar procesos y solucionar problemas (técnicos y conflictos interpersonales).

Como todo no pueden ser puntos fuertes, creo que mi mayor handicap ahora mismo es que llevo años sin trabajar hablando inglés. Antes tenía reuniones diarias con rusos, indios y americanos. Incluso me ha tocado decirle lo que había que hacer al director de IT de una empresa muy grande en USA, lo cual requiere algo de soltura y cintura. Sin embargo, tras 4 años sin usarlo apenas, creo que si tuviese que currar en inglés ahora no rendiría al 100% desde el principio.

Teniendo todo en cuenta, por hablar no perdemos nada y las cosas hay que verlas en su conjunto, pero para mi pesa más el lado de gestión que el de desarrollo y/o los proyectos grandes. Me “encanta” cuando hay problemas que nadie sabe resolver, son todo un reto. También daría puntos un proyecto en un país angloparlante (no me gusta verme mal en ese aspecto y quiero ponerle remedio cuanto antes). Los retos siempre me han motivado, pero también me gusta vivir (correr por la playa, escalar alguna montaña o ir a un concierto) por lo que obviamente busco equilibrio, así que como decía: sí, pero todo tiene que encajar.

Montar blobs de Azure en Windows

Tal y como hicimos hace unas semanas con Linux, vamos a montar blobs de Azure en Windows para poder usar un container como una unidad de almacenamiento barato.

La verdad es que con Azure CLI y usando el comando subst sería muy fácil montar algo. Sin embargo, todo buen programador ha de revisar si alguien antes que él ya se ha enfrentado al mismo problema. En este caso, así es.

La empresa Gladinet mantiene (o mantenía, ya que no parece muy actualizado y algunos conectores han dejado de funcionar) un software que te permite montar como una unidad virtual casi cualquier repositorio online que se os podáis imaginar.

La página de descargas es una locura, y sólo uno de los enlaces parece llevar a su última versión (la 4) que es la que incluye un conector a los blobs de Azure que funciona.

Una vez instalado y conectado con vuestro container, ya podréis acceder a su contenido y subir archivos como si de cualquier otra carpata de vuestro sistema se tratase.