Un año más, llega el día internacional de la copia de seguridad

Hoy, como cada 31 de marzo, se celebra el día de la copia de seguridad.

Así que ya sabéis qué hacer:

Coda

Revisando mis archivos, vi que ya hablé del asunto en 2015, 2017, 2023 y 2024.

Otra coda

Creo que alguna vez lo comenté, pero uso syncthing para mantener sincronizado (y replicado) mi contenido más importante entre mi ordenador de sobremesa, el portátil y el servidor doméstico (que está encendido 24/7).

Ahora el blog tiene una lista de entradas relacionadas construida usando LLMs

He implementado las entradas relacionadas en el blog. Dos entradas están relacionadas cuando el producto escalar de sus embeddings es alto.

Así que en primer lugar he asociado a cada entrada un embedding. Las entradas son ficheros de markdown con un preámbulo en yaml. Los embeddings no están creados directamente sobre el texto bruto de la entrada sino sobre la entrada y algunos de los elementos, no todos, del preámbulo.

Una nueva selección de novedades relevantes del mundo de los LLMs

Todo el mundo lleva días hablando del MCP. Creo que ni merece la pena decir qué cosa es.

MCP es un mecanismo para empoderar agentes. Para los primeros que creé utilié CrewAI pero he migrado a LangChain porque:

  • A CrewAI le encantan las dependencias tochas: para cualquier trivialidad crea entornos de varios GB.
  • CrewAI está diseñado para un tipo de agentes muy concreto —agentes a los que se delega enteramente el control del flujo del proceso— que no son exactamente los que más me interesan ahora –que suelen incluir un elemento de control por mi parte—.

Aunque todo el mundo habla de LangChain y CrewAI, hay algunas innovaciones interesantes, entre las cuales:

De H3, Z3 y R2 al "vibe coding" pasando por algunos asuntos más

Uber ha desarrollado H3, una retícula global de hexágonos para georeferenciar puntos y objetos. Cada hexágono tiene asociado un único ID y el sistema está concebido para poder correr de manera eficiente los algoritmos habituales: vecinos próximos, ruta más corta, etc.

OpenTimes es un sistema para mostrar el tiempo de viaje (en distintos medios) entre ubicaciones de EEUU. Tiene precalculados los miles de millones de valores de la correspondiente matriz y lo particular de la cosa es que almacena y sirve los datos desde R2, un sistema de Cloudfare similar al archiconocido S3 de Amazon pero orientado a la distribución eficiente de información para aplicaciones web.

Isosemanas

Muchos fenómenos tienen una periodicidad intrínsecamente semanal (p.e., el tráfico). Eso puede motivar el uso la semana como unidad temporal de referencia en determinados análisis en lugar del mes o el día.

Existe gente que tal vez no esté al tanto de que existe un estándar ISO para definir y representar las semanas sin ambigüedad, el ISO 8601. Sus principales características son

  • Las isosemanas comienzan el lunes y terminan el domingo.
  • La primera isosemana del año es la que contiene el primer jueves del año.
  • Un año contiene típicamente 52 isosemanas, aunque algunos (entre ellos, 1903, 1908, 1914, 1920, 1925, 1931, 1936, 1942, 1948, 1953, 1959, 1964, 1970, 1976, 1981, 1987, 1992, 1998, 2004, 2009, 2015, 2020, 2026, 2032, 2037, 2043, 2048, 2054, 2060, 2065, 2071, 2076, 2082, 2088, 2093, 2099) contienen 53.
  • Las isosemanas se representan con el formato YYYY-Www (e.g., 2025-W10 para la décima semana de 2025)

Hoy en día no merece la pena que indique cómo calcular ni manipular isosemanas en los lenguajes de programación más usuales: casi cualquier LLM lo sabe y lo puede ayudar a uno a crear funciones como

Varios asuntos relacionados con la causalidad

I.

Tiene Andrew Gelman una entrada en su blog, Rubinism: separating the causal model from the Bayesian data analysis, que es, según se mire, relevante o trivial. Esencialmente distingue entre el RCM (modelo causal de Rubin) y el análisis bayesiano (de datos):

  • El RCM (o modelo de los efectos potenciales en inferencia causal) lo resume como un modelo en el que se entiende que los datos proceden de una muestra en la que, en el mejor de los casos, se ha visto el efecto de un tratamiento dado en cada sujeto.
  • El análisis bayesiano como un marco más amplio que puede servir para analizar el RCM (aunque hay alternativas) o para otras cuestiones.

A todo esto, el RCM se llama también modelo de Neyman-Rubin. Neyman (el de los intervalos de confianza) introdujo una versión limitada del modelo en su tesis de maestría de 1923 y muchos años después, en los 70, Donald Rubin lo extendió y generalizó en una serie de artículos como este.

¿Por qué seleccionar "el mejor" modelo?

Tiene Ripley, el gran Ripley, un artículo de hace 20 años titulado Selecting Amongst Large Classes of Models donde discute la cuestión —la del título de esta entrada— y dice:

Deberíamos preguntarnos por qué queremos seleccionar un modelo. Parece ser un error extendido que la selección de modelos trata de “seleccionar el mejor modelo”. Si buscamos un modelo explicativo, deberíamos tener presente que puede haber varios modelos explicativos (aproximadamente) igual de buenos: lo aprendí de David Cox cuando era un profesor novato en el Imperial College tras haber hecho muchas selecciones informales de modelos en problemas aplicados en los que me hubiera resultado útil haber podido presentar soluciones alternativas.

GPT en 500 líneas de SQL y algunos asuntos más

Creo que vamos a oír hablar bastante en los próximos meses sobre el uso de algoritmos en la administración. Civio abrió fuego hace casi un año con el caso de BOSCO y vuelve a la carga con Las prisiones españolas usan un algoritmo sin actualizar desde 1993 para decidir sobre permisos de salida, un artículo que permite muchas lecturas y algunas de ellas, desafortunadas.

La noticia anterior da pie, sin duda, a

¿Acabaremos programando todos en ensamblador?

Un lenguaje de programación es un lenguaje que media entre el que nos es familiar a los humanos y el que reconocen las computadoras. Los lenguajes de alto nivel nos resultan más cómodos; los de bajo nivel, más crípticos. Todos conocemos, pienso, el trade-off.

Ahora todo el mundo programa en Python. Pero los hay que lo hacen de una manera rara:

Hay un nuevo tipo de programaciónn que llamo [Andrej Karpathy] “programación de vibraciones”, en la que te entregas por completo a las vibraciones, adoptas exponenciales y te olvidas de que el código existe. Es posible porque los LLM (por ejemplo, Cursor Composer con Sonnet) se están volviendo demasiado buenos. Además, solo hablo con Composer con SuperWhisper, por lo que apenas toco el teclado. Pido las cosas más tontas como “reducir el relleno en la barra lateral a la mitad” porque soy demasiado vago para buscarlo. “Acepto todo” siempre, ya no leo los diffs. Cuando recibo mensajes de error, simplemente los copio y pego sin comentarios; generalmente, eso lo soluciona. El código crece más allá de mi comprensión habitual, tendría que leerlo realmente durante un tiempo. A veces, los LLM no pueden corregir un error, así que simplemente busco alternativas o pido cambios aleatorios hasta que desaparece. No está tan mal para proyectos de fin de semana intrascendentes, pero sigue siendo bastante divertido. Estoy desarrollando un proyecto o una aplicación web, pero en realidad no es programación: solo veo cosas, digo cosas, ejecuto cosas y copio y pego cosas, y en general funciona.

Modelos gratuitos en OpenRouter y algunos asuntos más

Las dos noticias del siglo de la semana en el mundo de los LLMs:

Aquí, The Economist argumenta que los LLMs no nos igualarán sino lo contrario, que contribuirá a separar aún más el desempeño socioeconómico de los individuos en función de su capacidades cognitivas (separate the best from the rest, en su formulación original).