Python

¿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.

Una propuesta para cambiar la sintaxis de SQL y cuatro asuntos más

Mesop, una herramienta de Google para crear “AI apps” en Python.

¿Se nos está yendo el tamaño del código JavaScript de las páginas web de las manos? (De cuya lectura, además, he aprendido que existe webpagetest.org, que parece mejor que otras alternativas que he probado por ahí).

uv, un gestor de paquetes de Python “extremadamente rápido” escrito en Rust. ¿Tocará volver a migrar?

Aquí hay una discusión sobre la diferencia entre lugares y sitios —términos ambos que define estipulativamente—. Proyectos como OpenStreetMap se centran en los primeros: coordenadas, sistemas de referencia, mapas, etc. Overture Maps, parece ser, quiere centrarse en los segundos, los sitios, es decir, los bosques, edificios, panaderías, etc. que ocupan el espacio y que son el objetivo —los mapas son solo el medio— de nuestra preocupación por lo que puebla el espacio.

Algunas novedades tecnológicas que he recopilado en los últimos tiempos (no todas rompedoramente nuevas)

Últimamente he creado muchas pequeños scripts en Python con parámetros de todo tipo. Tanto esta entrada para los principios generales como, por supuesto, los LLMs más habituales, me han acabado ahorrando horas y horas de trabajo.

shelmet, un paquete de Python para interactuar con la shell, está comenzando a aparecer en la cabecera de mis scripts.

Estoy creando cada vez más diagramas como parte de la documentación de mis proyectos. Ninguna herramienta es tal como me gustaría, pero la más próxima a la que consideraría ideal que he encontrado por el momento es Excalidraw.

Más sobre paralelismos entre textos vía embeddings

Retomo el asunto de los paralelismos entre textos, que ya traté aquí, por el siguiente motivo:

  • Estoy explorando las posibilides del RAG
  • Para lo cual es necesario crear una base de datos documental con los fragmentos debidamente embebidos
  • En particular, estoy probando lo que chroma da de sí.

Esencialmente, chroma consiste en:

  • Una base de datos (SQLite, de hecho) donde se almacenan los fragmentos, sus metadatos y sus embeddings.
  • Mecanismos para crear los embeddings.
  • Mecanismos para buscar (por similitud de los embeddings) fragmentos relacionados con una petición de búsqueda.

Mis experimentos en español han sido catastróficos. La culpa, realmente, no parece ser de crhoma en sí sino de los algoritmos de embedding —se supone que específicos para el español— que he utilizado. Lo que sigue es un resumen de los resultados obtenidos en inglés, que parecen mucho mejores.

El modelo 3PL, ajustado con numpyro

Tenía ganas de meterle mano al modelo 3PL de la teoría de respuesta al ítem. Había un par de motivos para no hacerlo: que viene del mundo de la sicometría, que es un rollo macabeo, y que sirve —en primera aproximación— para evaluar evaluaciones (preguntas de examen, vamos), un asunto muy alejado de mis intereses. Pero acabaron pesando más:

  • Que se trata de un modelo generativo en el que los coeficientes tienen una función —y por tanto, interpretación— determinada y prefijada. Es decir, un modelo ad hoc construido desde primeros principios y no usando herramientas genéricas —piénsese en las anovas o similares—.
  • Que exige métodos de ajuste específicos. Por ahí usan MV vía EM.
  • Que pide a gritos una aproximación bayesiana, sobre todo a la hora de prefijar la distribución de las habilidades de los alumnos.
  • Que, finalmente, puede aplicarse fuera del estrecho ámbito de la teoría de la respuesta al ítem.
  • Y, además, que es fácilmente generalizable.

El problema en el que el modelo 3PL se propone como solución es sencillo:

Paralelismos entre textos vía embeddings: el caso, por poner uno, de los evangelios de Mateo y Marcos

Hace un tiempo tuve que leerlo todo sobre cierto tema. Entre otras cosas, cinco libros bastante parecidos entre sí. Era una continua sensación de déjà vu: el capitulo 5 de uno de ellos era casi como el tres de otro, etc. Pensé que podría ser útil —y hacerme perder menos tiempo— poder observar el solapamiento en bloques —sígase leyendo para entender mejor el significado de lo que pretendía—.

En esta entrada voy a mostrar el resultado de mis ensayos sobre unos textos distintos. Los que me interesaban originalmente estaban en PDF y hacer un análisis más o menos riguroso exigía mucho trabajo de limpieza previo. Pensando en otros textos distintos que vienen a contar la misma historia se me ocurrió utilizar dos de los evangelios sinópticos (en particular, los de Mateo y Marcos).

Twitter API: cómo usar una única cuenta para tuitear en nombre de terceros

I. El problema original

  • Tienes dos cuentas en Twitter, llámense @trabajo y @personal.
  • Tienes una única cuenta de desarrollador en Twitter. Supongamos que está vinculada al usuario @trabajo.
  • Quieres usarla para tuitear también en nombre de @personal.

Lo suyo sería disponer de dos cuentas de desarollador, una para cada usuario. Sin embargo, Twitter parece estar dando acceso a tu plataforma de desarrollador con cuentagotas y ni siquiera está claro si conceden más de una cuenta a una misma persona que maneje varios usuarios.

Código para resolver "wordles" en español

Este soy yo hoy mismo:

Este es mi script:

carlos@tiramisu:~$ wordle señor
Intento 1 -> seria

   Quedan 2 opciones.
   Las más populares son:
     señor : 228.79
     segur : 0.23

Intento 2 -> señor

Solución en 2 intentos: señor

Mi pequeño script tiende a ganarme. Lo cual me satisface enormemente.

En caso de que a alguien le interese, puede bajárselo de aquí. Existen dos versiones que implementan el mismo algoritmo, una en R y otra en Python. Las instrucciones de uso están en el repo.

Todos los SE son iguales, pero algunos son más iguales que otros

SE significa arriba_squared errors_, pero lo que aplica a cualquier otro tipo de error, incluso los que son más apropiados que los cuadráticos. El problema de los SE es que se tienden a considerar iguales y por eso se los promedia en engendros como el RMSE y similares. Pero incluso entre los SE hay jerarquías, como evidencia la siguiente historia.

Con lo del covid se pusieron en marcha muchas iniciativas. Una de ellas fue la del COVID-19 Forecast Hub. En ese hub se consolidaron los resultados de muchos modelos relacionados con el covid (relacionados con casos, hospitalizaciones y defunciones) desarrollados por la créme de la créme: MIT, Columbia, Harvard, Google, etc. Todos, sobre el papel, tenían RMSE’s envidiables. Pero ninguno valía para gran cosa. Al final, se ha impuesto la cordura y la página que recogía los resultados de los modelos ha chapado con el siguiente cartelito:

Mi "home server"

Hoy me voy a limitar a publicar una imagen de mi flamante home server corriendo la versión 0.1 de mi panel para el seguimiento del mi consumo eléctrico en tiempo real:

Sin duda, iré desgranando los detalles técnicos del sistemita en próximas entradas.