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.

Montar blobs de Azure en Linux

Si necesitas más espacio en un sistema, por ejemplo, para almacenar copias de seguridad, puedes montar un almacenamiento en la nube como los blobs de Azure en Linux para dotar a tu sistema de almacenamiento «infinito» a un precio muy competitivo aprovechando el Storage.

Se puede hacer con cualquiera, yo lo voy a hacer con Azure porque es con el que suelo trabajar por defecto, aunque haya trabajado con muchos otros.

Esto lo he hecho en Ubuntu 18.04 aunque debería de poderse hacer con más o menos complicaciones en cualquier versión de Linux.

  1. Actualizar repositorios
    wget https://packages.microsoft.com/config/ubuntu/18.04/packages-microsoft-prod.deb
    dpkg -i packages-microsoft-prod.deb
    apt-get update
    
  2. Instalar paquetes
    apt-get install blobfuse fuse -y
    
  3. Crear directorio temporal
    mkdir /mnt/resource/blobfusetmp -p
    
  4. Crear archivo de configuración
    vi ~/fuse_connection.cfg
    #Hay que poner las siguientes líneas sin comentarios y con los valores de tu cuenta, tu key y tu container
    #accountName myaccount
    #accountKey storageaccesskey
    #containerName mycontainer
    chmod 600 fuse_connection.cfg
    
    
  5. Montar en un directorio
    mkdir ~/disks
    blobfuse /root/disks --tmp-path=/mnt/resource/blobfusetmp  --config-file=/root/fuse_connection.cfg -o attr_timeout=240 -o entry_timeout=240 -o negative_timeout=120
    

Si esta última llamada la metes en un script que se llame, por ejemplo, desde rc.local te asegurarás de que la «unidad cloud» que has creado en Azure se monte con cada arranque del sistema.

Con esto habrás conseguido tener una nueva unidad montada aprovechando los blobs de Azure en Linux que, aunque sí tendrá más latencia que las unidades físicas de las que dispongas, su precio será mucho menor.

Cursos para el verano

Si este verano vas a ser una de esas personas afortunadas con un montón de tiempo libre, tal vez quieras invertir parte de ese tiempo en formarte. En ese caso, hay muy buenos cursos para hacerlo.

Cursos para el verano

Por Internet hay multitud de cursos de distintas áreas de desarrollo y, aunque todos hay que elogiarlos porque alguien se ha tomado la molestia de compartir conocimiento, no todos son igual de buenos.

Hoy os traigo unos pocos que, a mi parecer, destacan sobre la mayoría de contenidos de Internet, por si queréis aprovechar vuestro tiempo para seguirlos y aprender más de tecnología de lo que ya sabéis.

Cursos destacados:
  • Tech dev guide: es una web de Google en la que hay cuatro itinerarios para formarse: programación básica, programación avanzada, Machine Learning y Cloud Computing.
  • A Code-First introduction to Natural Language Processing: es un nuevo curso de fast.ai que se centra en el procesamiento de lenguaje natural. Va muy al grano y es muy práctico.
  • Crypto101: es un curso para adentrarse en el mundo de la criptografía empezando desde cero, por lo que no hace falta que sepas ni lo que significa criptografía.
  • Learning how to learn: no es un curso sobre desarrollo, pero es el curso más popular de Coursera por algo. Con este curso aprenderás distintos métodos para aprender del mejor modo posible.
  • Wargames: para los que no vivisteis el Internet de finales de los 90 (los albores de Internet), el mejor modo que teníamos de aprender en aquel entonces cosas sobre desarrollo o, como en este caso, seguridad eran los juegos de guerra. Era un modo de aprender a programar jugando, en el que se proponían retos en orden ascendente de dificultad en el que cada uno te abría la puerta del siguiente.
  • Ethernaut: basado en el anterior, propone diferentes retos para aprender sobre seguridad en la máquina virtual de Ethereum.
  • Teach me Quantum: un curso sobre Quantum Computing que empieza en lo más básico y llega a un punto bastante avanzado y actual.

Estos 7 son los que más destacan de entre los que conozco, pero seguro que hay muchos otros que no conozco, así que decidme ¿qué y cómo vais a aprender este verano?