Github Copilot: 5 meses después

Llevo un tiempo usando a diario Github Copilot: una IA de autocompletado de código que parece tener vida propia.

Un caso real buscando una API de conversión de moneda.

GitHub Copilot está disponible como una extensión para Visual Studio Code, Neovim y JetBrains. Va mandando el código y el contexto del entorno (lenguaje de programación usado, todo el código del proyecto y los nombres de los archivos) a los servidores de OpenAI, donde es completado y enviado de vuelta como una sugerencia. Al pulsar Tab, la sugerencia se añade al código, y al pulsar Esc se descarta.

Está basado en una IA llamada Codex, un descendiente de GPT-3 ajustado para su aplicación sobre lenguajes de programación y entrenado sobre todos los repositorios de dominio público de Github. Esto incluye código, comentarios y documentación en todos los lenguajes de programación imaginables.

Usarlo por primera vez es emocionante. Poner el nombre de una función y que genere no sólo su código sino también un enlace válido a una API de conversión de moneda parece sacado de una novela de ciencia ficción. Pero pasado el hype inicial es fácil ver que la herramienta no es perfecta. Necesita ser guiada para llegar al resultado esperado y hay que entender qué está escribiendo para no perder el control.

Por ejemplo, en el segundo 0:30 del vídeo anterior intenta usar un servicio de pago, así que defino una URL del Banco Central Europeo para darle una pista de qué herramientas usar. Y aun así, el código generado no es perfecto y hay que corregir a mano la expresión regular para parsear los datos.

Las pirámides de la muerte son uno de sus errores más típicos.

Aun así, decidí dejar el plugin activado durante los últimos 5 meses, y entre trabajar y programar por hobby lo he probado con muchos lenguajes distintos: Python, JS, CSS, C++, PHP, SQL, Arduino, VBS, OpenScad, GLSL… y ha sido un cambio radical en mi forma habitual de programar. Uno de esos saltos que se producen pocas veces.

Cuando era pequeño, mi padre compraba la Computer Hoy todos los meses y yo me la leía de arriba a abajo. En una edición, había una guía que rezaba algo así como "aprenda a optimizar sus tareas con Visual Basic" y por algún motivo me dio por seguirla. Cuando vi la magia que había en pensar una idea, describírsela a un ordenador y verla hecha realidad, sentí el primero de esos saltos.

Desde entonces, empecé a programar en VBS sin mucho más que aquella guía y unas fotocopias que alguien me consiguió. Mi forma de resolver mis necesidades era mirar esos 20 folios fotocopiados una y otra vez hasta que daba con una respuesta. Cuando los folios ya estaban ajados y amarillentos, llegó internet a casa y se produjo el siguiente salto.

Programar se volvió muy distinto. Ahora mi conocimiento no se limitaba a unos pocos folios, sino a la referencia completa de Visual Basic o cualquier otro lenguaje que quisiera aprender. Y entre referencias online, foros e hilos de correo seguí programando hasta empezar la Universidad, que fue cuando aprendí lo que era un IDE con debugger.

Ese salto también fue muy grande. Ahora podía escribir en un editor de texto que le ponía colores a mi código, me autocompletaba algunos métodos, me permitía navegar por la referencia del lenguaje con solo pulsar Ctrl+Space y ver línea a línea cómo cambiaba el estado de mi aplicación. Y por si fuera poco ahora el foro era Stack Overflow.

En la actualidad sigo programando así, pero cuento con otro as en la manga: la habilidad de no mirar una API si no recuerdo algo, de dejar al IDE terminar mi código siguiendo el mismo estilo de mi codebase, y en general de dedicarme a la parte divertida de la programación en vez de pelearme con la API de Matplotlib, Puppeteer o PyTorch.

Programando reconocimiento de imagen con una webcam en una Raspberry con sólo pedírselo por favor en un comentario.

Cuando salió Copilot todas las opiniones con una semana de uso eran que iba a reemplazar a los programadores y que era una herramienta mágica, por eso me quise esperar a haberlo probado un buen tiempo para entender cuál era su sitio en la caja de herramientas del programador. Y mi conclusión es que es muy, muy útil si se usa con algo de filosofía.

Es fácil dejarse llevar por las soluciones que propone Copilot (al fin y al cabo no hay Oscar al mejor código). Pero como no es perfecto, sin saber qué está haciendo es fácil hacer código poco funcional. O lo que es peor: funcional pero con vulnerabilidades difíciles de detectar. Algo parecido a hacer copy-paste indiscriminado de Stack Overflow.

Está claro que hay una tendencia hacia una programación cada vez más asistida. Y si el futuro está en herramientas como Copilot, tendremos que atajar retos como evitar la distracción de las recomendaciones o favorecer el pensamiento crítico ante sugerencias que impliquen malas prácticas y aproximaciones anticuadas; algo parecido a lo que ocurre con las IAs entrenadas en datasets reales y sus prejuicios adquiridos.

Por el momento podemos probarlo para entender mejor sus implicaciones. Si has leído hasta aquí y estás interesado, te gustará saber que la telemetría sólo se usa para ver qué soluciones son aceptadas, pero el código que se escribe no alimenta al modelo. Siendo un producto de Windows es probable que estén tirando la caña para pescarnos luego con un servicio de suscripción, así que podéis apuntaros a la beta antes de que sea demasiado tarde.

Todos los vídeos de este post han sido generados así, sin tener que mirar la referencia de FFMPEG por enésima vez.

No hay comentarios

Thüring: un roguelike programable

Este fin de semana he estado en la Global Game Jam (GGJ) haciendo un juego en 48 horas junto a @pabletos y @j_coronel. El resultado ha quedado bastante guay así que lo dejo por aquí.

Banner de Thüring

Una game jam es un evento en el que los participantes tienen que desarrollar un juego en torno a un tema con un límite de tiempo. La GGJ es un evento anual a nivel mundial con sedes físicas por todo el mundo, como la que ofreció espacio_RES en esta ocasión. El límite eran 48 horas y el tema era Duality.

Ya habíamos participado en otras jams anteriormente como la Familiar Game Jam, Ludum Dare o GM48; pero este es uno de los juegos que más cerrados han quedado en tan poco tiempo. La mecánica consiste en superar niveles de un roguelike (un juego de exploración por turnos) añadiendo fichas a un tablero.

Captura in-game de Thüring

El comportamiento del tablero es bastante sencillo: va leyendo las instrucciones de arriba hacia abajo (como una máquina de Turing) y aplicándolas sobre el jugador. La mecánica es bastante emergente y con muy pocos elementos se pueden encontrar muchas estrategias distintas, así que seguiremos puliéndolo para subirlo a la App Store.

Pese a haber participado en muchas jams, esta ha sido la primera en la que no hemos ido a la modalidad remota. Y aunque eso de estar en una casa 48 horas en modo cueva haciendo un juego no está nada mal, conocer a tantos desarrolladores, diseñadores y artistas tan buenos no tiene comparación, así que definitivamente repetiremos.

No hay comentarios

La llegada de los transformers

Las siguientes conversaciones han sido completamente generadas por una inteligencia artificial a la que sólo le he suministrado las tres primeras frases en negrita:

-/-<>

La magia que hay detrás de este autocompletar hipervitaminado es GPT-3, un algoritmo entrenado para continuar textos de forma convincente. En algunos casos logra captar rasgos tan sutiles y humanos como el humor mientras mantiene conversaciones complejas alrededor de un tema.

GPT-3 pertenece a la familia de algoritmos conocidos como transformers, que han demostrado ser muy efectivos reconociendo patrones complejos en secuencias de elementos. Tratando el lenguaje como una secuencia de palabras se pueden entrenar para que, dado un texto de entrada (contexto), lo complete de la forma más creíble.

Gracias al Information Sciences Institute de Los Ángeles he recibido una invitación para probar esta herramienta, una de las más avanzadas en la actualidad, el Optimus Prime del lenguaje natural. Ya ha cosechado muchos éxitos resolviendo retos basados en texto como mantener conversaciones indistinguibles de las de un humano, ayudar a escribir novelas o incluso programar software a petición.

Un robot transformer arrasando una ciudad

Un grado tan profundo de entendimiento del lenguaje natural puede mejorar enormemente nuestra forma de comunicarnos con interfaces conversacionales como Google Assistant o Alexa. Y como un gran poder conlleva una gran responsabilidad, la empresa que hay detrás de esta herramienta la está abriendo al público de forma gradual y con cautela. Actualmente, sólo es posible usarla por invitación o pagando una suscripción con una tarifa por número de palabras generadas.

Pero lo que está inventado ya no se puede desinventar y han surgido una infinidad de proyectos que intentan replicar los éxitos recientes de GPT-3 en abierto. De hecho, cualquier persona sin ningún conocimiento de machine learning ya se puede instalar la versión open source GPT-Neo y probarla con un solo click (y una buena tarjeta gráfica).

Estas alternativas son bastante recientes -tienen menos de 6 meses- por lo que el tsunami de bots indistinguibles de un humano aun está por llegar, aunque ya se han visto algunos casos de mal uso, principalmente destinados a manipular la opinión pública para hacer bulto en los seguidores de un partido político o alterar la valoración de criptomonedas.

Clip del test de Voight-Kampff en Blade Runner

Hay estudios recientes que dicen que un 15% de las cuentas de Twitter podrían ser bots, y nuestros mecanismos para detectarlos aun son bastante poco efectivos. Y al igual que las fake news, han venido para quedarse, así que habrá que ir pensando soluciones escalables para distinguir humanos y bots. Al menos hasta que tengamos un test de Voight-Kampff.

No hay comentarios

El color de los videojuegos

En este proyecto he analizado la evolución de color en los videojuegos. He ido descargando longplays —vídeos de alguien pasándose un juego entero— y convirtiendo el color predominante de cada fotograma en una línea vertical, creando una línea de tiempo.

Al analizar los videojuegos desde este punto de vista he encontrado muchos patrones que se repiten. Aquí hablo de los que me han parecido más curiosos pero podéis verlos todos en el link al proyecto:

Game Colors

Algunos juegos usan el espectro para dar sensación de progreso al jugador. En Journey empezamos en un desierto y conforme resolvemos ciertos puzzles vamos descubriendo otras partes del mundo y el color va cambiando.

Otros juegos también usan el color para dar sensación de progreso, aunque de forma más directa: dividen el juego en mundos y cada uno de ellos tiene una paleta distinta. En algunos juegos con dinámicas poco cambiantes como Bit Trip Runner este recurso da más sensación de variedad. Es curioso cómo suelen empezar con tonos verdes y luminosos y van cambiando hacia tonos rojos y oscuros.

También hay juegos que no limitan la evolución del color al propio juego, sino que va cambiando a lo largo de una saga completa. Es el caso de Diablo, Elder Scrolls o BioShock. En todos ellos el color se va volviendo más vivo de un juego al siguiente. El caso de Diablo III fue bastante sonado y todo el mundo se quejaba de lo colorido que era.

La mayoría de juegos también usan el color para dar identidad al juego y muchos se pueden identificar fácilmente con solo ver la paleta de color. Algunos juegos como GRIS y Celeste no hacen honor a sus nombres, pero tienen una paleta que cualquiera que haya jugado podrá identificar.

Además de los juegos de este post he subido otros bastante curiosos, como la saga completa de Zelda, GTA o Final Fantasy. Pero no quería dejar de poner aquí otros juegos cuya paleta es simplemente espectacular y no se me ocurría ninguna otra excusa.

Empecé este post como una continuación del que escribí sobre el nombre de los colores, e inicialmente sólo pretendía sacar una paleta de color, no una línea temporal. Pero cuando vi lo que hizo el artista Dillon Baker con películas pensé que sería más interesante emularlo con videojuegos.

Para obtener los longplays, he usado la librería de descarga de vídeos online youtube-dl que hace poco retiró Github tras una denuncia de la SGAE estadounidense. La denuncia ha catapultado la popularidad de esta librería produciendo un efecto Streisand en toda regla y ya ha sido restaurada.

Lo más complicado tal vez ha sido identificar el color predominante de cada fotograma, que sigue siendo un campo de investigación activo. Probé a usar la media de todos los colores en pantalla, pero pasaba lo mismo que al mezclar todas las plastilinas y sale una masa de color gris y marrón. Así que terminé haciendo un clustering de los colores de la imagen y quedándome con el color que representa el cluster más grande.

Espectro de Papers, Please

El Papers, Please es gris de todas formas.

He pensado en subir a RedBubble versiones en alta resolución de estas líneas temporales en forma de cuadros, pero crear un producto por cada juego es un trabajo de chinos, así que si estáis interesados en alguno en particular podéis dejar un comentario y lo subiré de forma individual.

5 comentarios

La otra Sevilla

La ciudad en la que nací tiene muchos escenarios cautivadores y surrealistas, como una enorme estructura orgánica en forma de setas en medio del centro histórico o los restos de una exposición universal que mostraba lo que iba a ser el futuro. No es de extrañar que George Lucas decidiera usarla como escenario del planeta Naboo.

Naboo en Sevilla (Plaza de España)

Pero existe una Sevilla menos turística y más apartada, en la que se vive otro tipo de surrealismo y se mezclan el entorno metropolitano con asentamientos chabolistas. Debido a su peligrosidad, la mayoría de sevillanos no nos adentramos en ella, así que he querido informarme un poco de algunos de los barrios más desconocidos de nuestra ciudad.

Las Vegas, 3000 Viviendas

Su construcción terminó en 1977 y desde el principio se consideró una zona insegura. Acogió a personas provenientes de zonas chabolistas como La Corchuela​ o El Vacie, y otras que deseaban mejorar su vivienda, como Torreblanca de los Caños y Los Pajaritos.

Las Vegas, Los Pajaritos

Apenas diez años después de su entrega, muchos de los bloques de pisos carecían de la mayoría de sus servicios originales, como agua caliente o ascensores, que ya no estaban operativos porque habían sido robados los motores. Es considerada como un claro exponente de «chabolismo vertical», en el que sus habitantes conviven con animales más o menos domésticos.

Se han publicado muchas noticias sobre reyertas, tiroteos e incautaciones de armas, que van desde katanas​ hasta fusiles de asalto Kalashnikov, pasando por subfusiles UZI, además de estupefacientes. La mayoría de los servicios públicos (bomberos,​ recogida de basura, autobuses​) no suelen entrar en las zonas más conflictivas si no cuentan con protección policial, ya que suelen sufrir amenazas, agresiones y hurtos.

Sin embargo también ha dado lugar a grandes artistas flamencos como Raimundo y Rafael Amador, miembros de Veneno y Pata Negra.

El Vacie, Polígono Norte

El surgimiento del Vacie no está bien definido, aunque se conoce como el asentamiento chabolista más antiguo de Europa. Algunas crónicas apuntan a que las primeras chabolas comenzaron a instalarse en torno al año 1932 albergando a familias de origen trashumante, principalmente de etnia gitana, pero también mestizos y payos que solían vivir del trapicheo o de la caza. Pero la historia mejor documentada del Vacie arrancó en 1954, año en el que varias familias construyeron sus propias viviendas en las tierras que la marquesa del Río cedió a los pobres.

El Vacie

Cuando se acercaba la Expo Universal de 1992, se instalaron viviendas prefabricadas. Este pequeño barrio ha llegado a tener más de 900 habitantes, aunque su población lleva en descenso unos diez años. En 2020 se aprobó su demolición debido a sus condiciones de insalubridad.

Casas Bajas, Torreblanca

Los inicios de Torreblanca de los Caños se remontan a finales del siglo XIX, al surgir un pequeño núcleo de población alrededor de una fábrica de aceites y jabones. A estas casas se sumaron las de jornaleros de los campos aledaños y familias de los presos del Canal del Bajo Guadalquivir. Este primer asentamiento compuesto por chozas se conoce como Torreblanca La Vieja. Con el tiempo, las chozas y chabolas se tornaron en casitas de autoconstrucción.

Torreblanca

Es una zona considerada conflictiva debido al tráfico de drogas, el chabolismo, la inmigración en condiciones precarias y el traspaso ilegal de viviendas sociales. Esta situación ha derivado en que esta parte del barrio se encuentre en unas condiciones de deterioro general, tanto de las viviendas como de las zonas comunes.

Estos barrios no son los más interesantes para el turismo, pero son una parte de esta ciudad sobre la que merece la pena saber un poco.

Todo aquí es ficticio, excepto el escenario. Nadie podría inventarse una ciudad como Sevilla.
— Arturo Pérez Reverte

2 comentarios

🍪 ¿Cookies?

Esta web usa cookies para identificar qué contenido es interesante y mejorar su calidad. Más información aquí.

4d8cd43bbbfbbd2b7aed08d9a2b0ef251cebfd3e2603b74b710a2d38b7f8ec39