¿Acabaremos programando todos en nanolang?

Hace casi un año escribí ¿Acabaremos programando todos en ensamblador?, que comenzaba así: 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. Hay lenguajes muy próximos a los humanos, como scratch o logo. Otros, a la máquina, como C o ensamblador. Mucha gente opta por uno en la zona media del espectro, como Python. ...

28 de enero de 2026 · Carlos J. Gil Bellosta

El teorema de Napoleón via SymPy

Durante el pasado periodo estival, como es tradición, me extrajeron alevosamente de la M-30. Me introdujeron en una caja metálica, me amarraron a una silla y me torturaron durante seis horas, en el transcurso de las cuales, las únicas percepciones del mundo exterior que impactaron mis sentidos fueron calor, ruido, cerros, pinos y dolores en las asentaderas. Como no había otra cosa que hacer y tenía frescos los enunciados de los problemas de la última olimpiada internacional de matemáticas —que, como recordarán los lectores del blog, tuvo cierto impacto mediático por el excelente resultado logrado en ella por los LLMs más avanzados—, me puse con uno de ellos. Estoy muy pagado de mí mismo por el hecho de que, salvo por un par de cabos sueltos que solo pude rematar cuando conseguí lápiz, papel y silencio, dejé uno de ellos prácticamente resuelto. ...

4 de septiembre de 2025 · Carlos J. Gil Bellosta

¿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ón 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 usando 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. ...

27 de febrero de 2025 · Carlos J. Gil Bellosta

El bee-bot vía "artefactos" de Claude

El “bee-bot” es un juego infantil educativo no particularmente barato. Así que he construido una versión web de la cosa en poco rato. En particular, le he dicho a Claude: I want to create a webpage to play a version of the bee-bot game for children. In the main canvas there is a grid. In two random squares of the grid, there are a bee and a flower. The interface are four buttons with numbers 1-4, four arrows and a go button. The child needs to type the sequence of numbers and arrows and when the go button is pressed, the bee will move. Say, if the sequence is 2, up, 4, right, 2, the bee will move two squares, then turn up, advance 4 squares, turn right, and move two squares. ...

24 de octubre de 2024 · Carlos J. Gil Bellosta

Números aleatorios, estado interno y su relación con el paralelismo

I. En primer lugar, no voy a hablar de números aleatorios sino seudoaleatorios. Resumiéndolo todo mucho, un generador de números seudoaleatorios (PRNG en lo que sigue) es una función que a partir de una secuencia fácilmente adivinable (p.e., 0, 1, 2,…) genera otra de números con apariencia aleatoria. Los números de la secuencia adivinable constituirían los distintos estados del PRNG. En R, Python y otros lenguajes populares, el generador de números aleatorios hace dos cosas: generar un número aleatorio y actualizar el estado. ...

11 de julio de 2023 · Carlos J. Gil Bellosta

Mnemo, la aplicación

Mnemo es una pequeña aplicación que he construido para ayudarme a recordar esas cosas que me consta que se me van a olvidar: palabras, conceptos simples, nombres de personas, etc. Externamente se ve como un canal (privado) de Telegram en el que un par de veces al día me aparecen notificaciones con un resumen de la cosa. Internamente, es la combinación de tres cosas: Una base de datos en Notion. Un bot de Telegram. Un workflow de n8n que corre en mi servidor local y que orquesta todo el proceso. La base de datos la actualizo manualmente. Cada vez que tropiezo con algo que merece la pena ser recordado, añado un registro con información básica: un rótulo, una breve descripción, un enlace para indagar más. ...

29 de junio de 2023 · Carlos J. Gil Bellosta

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 desarrollador, 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. ...

18 de mayo de 2023 · Carlos J. Gil Bellosta

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

18 de abril de 2023 · Carlos J. Gil Bellosta

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

SE significa arriba, en el título, squared errors, pero lo que se cuenta debajo aplica a cualquier 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 y que, típicamente trataban de estimar el número futuro de casos, hospitalizaciones y defunciones. Fueron desarrollados por la crème de la crème: MIT, Columbia, Harvard, Google, etc. Todos, sobre el papel, tenían RMSEs 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 y ha colgado en la persiana el siguiente cartelito (con mi traducción): ...

28 de marzo de 2023 · Carlos J. Gil Bellosta

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.

23 de marzo de 2023 · Carlos J. Gil Bellosta