Google Workspace for everyone

Enlace

Del anuncio que hizo hace un par de semanas Google anunciando la disponibilidad global de Workspace:

Starting today, you can enable the integrated experience in Google Workspace by turning on Google Chat. Use Rooms in Google Chat as a central place to connect, create and collaborate with others.

Había olvidado completamente que Google Chat también es un producto que existe. Lo he abierto con curiosidad y me he encontrado con un historial viejo de Google Hangouts, por lo que asumo que definitivamente este es el reemplazo de Hangouts Chat. El reemplazo de las llamadas de Google Hangouts fue Google Meet.

Sin embargo, no hay que confundir Google Meet con Google Duo, el cual me pareció ver hace poco que seguía vivo. No corre la misma suerte Google Allo, que parece que sí ha muerto. ¿Y Google Spaces? En la entrada se le menciona, pero si visito https://spaces.google.com se me redirige a la página de inicio de Google Workspace también.

No sé si en Google son conscientes de lo cómico que resulta de puertas para fuera su política sobre aplicaciones de mensajería que nacen, crecen, se reproducen y mueren, pero es que es difícil de narices saber qué productos coexisten a la vez en su ecosistema.

elfcat

Enlace

elfcat es un visualizador gráfico para inspeccionar las estructuras de datos y bytes internos de un binario ELF. Genera un archivo HTML que tiene metainformación y que con el ratón permite ver cada estructura de datos de forma individual. Está programado en Rust.

Esto me hubiese venido estupendamente hace un tiempo cuando me dedicaba en mis ratos libres a escribir parsers ELF y ese tipo de cosas como parte del sistema operativo homebrew que estaba construyendo y que sabe Dios cuándo retomaré.

Good and Bad Elixir ➜

Enlace

Super buenos consejos para escribir código Elixir más manejable.

Las funciones con side-effects suelen devolver resultados tipo {:ok, term()} | {:error, term()}. Si estás trabajando con funciones que tienen side-effects, no las conectes con la siguiente función con un pipe. Es mejor tratar los resultados con un case o con un with.

Super de acuerdo en esto. Recuerdo que hace no demasiado me pareció «superapropiado» hacer un fmap monádico en Elixir para poder escribir luego código fancy a lo Haskell:

# Just don't. Not a very smart idea despite what it looks like
def fmap({:ok, x}, f), do: {:ok, f.(x)}
def fmap(whatever, _), do: whatever

def readline(path),
  do:
    File.read(path)
    |> fmap(&String.split(&1, "\n"))
    |> fmap(&Enum.filter(&1, fn line -> line != "" end))

Pero desde que conozco el with, no sólo no me parece necesario sino que oh dios mío por qué pude pensar que esto era buena idea. En caso de que deje de cumplirse con la secuencia de condiciones, with evalúa el bloque completo al valor devuelto por la primera función que salió mal, dejandolo todo más limpio.

def readline(path),
  do:
    with {:ok, contents} <- File.read(path),
         {:ok, lines} <- String.split(contents, "\n"),
         {:ok, trimmed} <- Enum.filter(lines, fn line -> line != "" end) do
      trimmed
    end

Supongo que no será la única epifanía ocurrida en este mundo al conocer la palabra clave with.

Invirtiendo esferas

Enlace

Las recomendaciones de YouTube me han lanzado este vídeo que me deja tan fascinado como confuso sobre cómo se pueden invertir círculos y esferas, y toda la matemática y condiciones que hay detrás de este proceso.

(No, no puedes darle la vuelta como un calcetín a un balón de baloncesto; se conoce que esto sólo se puede hacer con esferas hipotéticas hechas de un material hipotético que puede atravesarse a sí mismo.)

El vídeo es de 1994 y está subido a YouTube en 2011, y debe estar en esa lista que se hace el algoritmo de YouTube cada mes de «vídeos viejos que deben resurgir en el feed de recomendados sin razón alguna»…

El RSS se quiere poner de moda

Enlace

Google tiene planes para integrar un lector RSS en Google Chrome. Podría ser interesante para ver si se pone de moda RSS otra vez. O al menos que los sitios vuelvan a señalizar con la etiqueta de descubrimiento para que los que usamos extensiones podamos capturar el feed.

Hubo una época en la que los navegadores tenían lectores RSS integrados. Internet Explorer, Firefox, hasta Safari. Poco a poco fueron perdiendo esta funcionalidad, siendo Firefox el último en traicionar eliminando los marcadores dinámicos y el botón RSS.

thumbnail-maker

Enlace

thumbnail-maker es un port a HTML5 de mi template para crear miniaturas para los vídeos de makigas. Esta primera versión hace l justo y lo necesario para poder generar sobre la marcha miniaturas PNG de alta calidad usando el navegador web y save-svg-as-png.

Parece que a raíz de emitir en directo su desarrollo por Twitch han empezado a aparecer parodias de mis miniaturas por el canal del servidor de Discord… 🥲

El origen de AWS

Enlace

Un hilo de Twitter (meh) escrito por alguien que estuvo ahí para verlo nacer y crecer.

«En el año 2000, servidores Sun recién estrenados aparecían en eBay a 10 centavos a medida que las start-ups empezaban a caer (esto era pre-AWS, así que tenías que montarte tu propio datacenter). […]»

Como retailers, siempre nos enfrentamos a una gran estacionalidad. El tráfico y el beneficio siempre surgía en noviembre y diciembre. Jeff empezó a pensar: tenemos este exceso de servidores por 46 semanas, ¿por qué no empezamos a alquilarlo a otras empresas?

El hilo de @DanRose999

Supongo que en términos de recursos, hoy es un poco más eficiente que tu empresa quiebre, si el cadáver que dejan tus servidores puede ser aprovechado por la siguiente empresa a la que alojen… 🤔

discordjs-voicerole

Enlace

Una pequeña librería Node.js para Discord.js que hice este fin de semana para facilitar esconder y mostrar canales cuando entras a un canal de voz. Ya está integrada en mi bot, pero he considerado más oportuno extraer esa funcionalidad a una librería separada para poder reusar la función en otros bots.

Este código fuente vive en GitHub y no en git.danirod.es por la misma razón por la que existe este código fuente en primer lugar: por visibilidad. Por eso tampoco está en mi namespace personal, sino en el de mi canal de YouTube.