Urano Dev

Desarrollamos software para ecommerce

Programando con Github Copilot y PHP

Imagen del sitio Inspire.urano.dev

Les comparto mi experiencia con github Copilot. Hace tiempo tuve la idea de tener en el explorador (actualmente uso Edge), cuando abre una nueva pestaña, una imagen y una cita o quote, seleccionadas o curadas previamente por mí.

En twitter sigo a @naval, y varias de sus frase, me parece muy lógicas, aunque poco comunes.

Por otro lado, tengo varios proyectos actualmente, y estoy por iniciar otro muy demandante la siguiente semana. Y necesitaba hacer algo pequeño, que me diera esa sensación de logro, de terminar algo.

Y finalmente, dando una vuelta por mis repositorios de github (privados todos hasta hoy) vi una invitación a usar Copilot.

Entonces decidí probar Copilot para este pequeño proyecto.

El resultado está aquí: https://inspire.urano.dev

El video de cómo usé Copilot lo publicaré en mi nuevo canal de YouTubeUrano Dev – YouTube

Este último trimestre estaré creando contenido dirigido a programadores.

Si te interesa Woocommerce, WordPress, PHP, Laravel, Shopify, Magento, inscríbete a mi canal y puedes seguirme en Twitter: Urano Dev (@UranoDev) / Twitter

Proceso de Instalar y usar Copilot.

Primero tienes que contratar el servicio en github, dentro de tu perfil y tu cuenta. En mi caso tomé la promoción de dos meses gratis y 10 USD mensuales, o 100 USD anuales, después de los dos meses.

Instalé la extensión en VS Code. Hice la conexión de permisos, y listo, empezó la magia.

El detalle lo mostraré en el video. Aquí un resumen

Una de las funcionalidades que tiene Copilot es que tu escribes en un comentario lo que quieres hacer, en inglés. Y entonces Copilot te sugiere código.

Por ejemplo

//load images from urls in json format

Escribes el comentario das enter y te sugiere cargar un archivo que supone tiene formato json:

// get the json file
$json = file_get_contents('backgrounds.json');

Y te lo sugiere con comentario y todo, como si te estuviera explicando el código que sugiere
Si lo aceptas, lo que sigue es cargar la data en un array y luego hacer un loop con foreach…

// decode the json file
$json_data = json_decode($json, true);

// loop through the array
foreach ($json_data as $key => $value) {

Esto es solo un adelanto, en su momento lo podrán ver en el video (espero terminar de editarlo esta semana)

 

Pero ¿Qué es github Copilot?

Es el uso de inteligencia artificial para sugerir código, en una tarea específica.

Cuando programas hay varias fases.

Está la de entender el problema, entender lo que quieres lograr, definirlo.

Luego diseñas la solución tipo «voy a tomar de la Base de Datos los posts que tengan una categoría, y entonces los voy a ordedar por categoría, y entonces por cada post checo si el autor tiene permisos para…»

Y luego viene l aparte crear el código para que haga lo que diseñaste. Y en este punto es donde hoy veo ayuda de Copilot.

En mi caso no cargo data de archivos JSON, entonces no sé la function que hace en PHP, pero githubm sí, y también sabe cómo cargar esa data JSON a un array, y sabe que un array lo tienes que procesar, elemento a elemento, por eso te sugiere el foreach

Si no usar Copilot, tendría que ir a la documentación de PHP o a google, y seguramente terminaría copiando y pegando parte de ese código. Otra parte del código ya la autocompleta VS Code, como la estructura del loop foreach.

Entonces, el beneficio que veo es que haces menos switch, menos multitasking entre escribir código y ir a google a buscar información.

Creo que incluso si ya sabes las funciones y el proceso para hacer algo (como cargar data en formato JSON), Copilot te ahorra el teclear esa información.

Que no me gustó de Copilot

La parte que no me gustó es que cuando sugiere la conexión a la base de datos, y el query con SELECT (creo que Copilot va a la BD para incluir nombres de tablas y columnas en el query), no usa Try / Catch, algo que creo que todos terminamos haciendo. Digo ya que hizo la parte difícil, que le cuesta hacerlo con validaciones ye incluyendo lo que considero mejores prácticas.

Por ejemplo, este es el código final, casi todo generado por Copilot, para obtener la info de la Base de datos:

</pre>
<div>
<div>//get random record from table 'images'</div>
<div>$random = $db->query("SELECT * FROM images ORDER BY RAND() LIMIT 1");</div>
<div>$random = $random->fetch_assoc();</div>
<div>$url = $random['url'];</div>
<div>$img_author = $random['img_author'] ?? "autor desconocido";</div>
</div>
<pre>//get random record from table 'quotes'
$random = $db->query("SELECT * FROM quotes, series where series.id = quotes.id_serie ORDER BY RAND() LIMIT 1");
$random = $random->fetch_assoc();
$quote = $random['quote'];
$series = $random['name'];
$quote_author = $random['author'];
$link_author = $random['link'];

Los comentarios son míos, en los que Copilot se basa para generar el código.

La verdad, no se había ocurrido la mezcla de RAND() y LIMIT 1

Conclusión de usar Copilot.

Creo que es un buen inicio. Seguramente, si usa la retroalimentación que nosotros le demos, como lo de encerrar la conexión a la BD en try / Catch, en algún momento Copilot lo hará así. Supongo que Machine Learning lo que usa.

En algunos casos la sugerencia es obvia, como conectar a una base de datos o leyendo un archivo, o convertir JSON en un array. Pero a veces puede descubrir alguna idea que es nueva para tí, alguna función, o en mi caso el SELECT.

Y con la oferta de dos meses sin costo, les sugiero intentar usarlo.

Y compartir sus experiencias.