Un comando para obtener explicaciones sencillas con Gemini CLI
Hola, soy un inútil.
Ha pasado mucho tiempo. Estaba acumulando energía. Es broma, solo estaba holgazaneando. Lo siento.
Así que, aunque es un pequeño truco, como Gemini CLI ha sido lanzado, es una alegría para los usuarios de CLI.
Yo solo lo puse en mi .bashrc.
ghelp() {
(echo "Explica esto" ; cat $1 ) | gemini
}
No es nada del otro mundo, pero el hecho de tener que pasar por el navegador para que el LLM explicara el código ha desaparecido, lo que lo hace más fácil.
Con esto, por ejemplo:
[curljs]
thepassenger:[haturatu]:~/git/curljs$ ghelp curl.js
Este código es un script de Node.js que utiliza la librería [Puppeteer](https://pptr.dev/) para obtener el contenido de una página web especificada.
A continuación, se explica qué hace cada parte del código.
1. **`const puppeteer = require('puppeteer');`**
* Carga la librería Puppeteer. Esta librería se utiliza para controlar los navegadores Chrome o Chromium mediante programación.
2. **`(async () => { ... })();`**
* Esta es una "función asíncrona de ejecución inmediata". Al envolver todo el código en una función asíncrona, se permite el uso de la palabra clave `await` en su interior. `await` es necesario para esperar a que finalicen los procesos que consumen tiempo (como iniciar el navegador o cargar una página).
3. **`const url = process.argv[2];`**
* Almacena el tercer argumento pasado desde la línea de comandos en la variable `url`.
* Ejemplo: Si se ejecuta `node script.js https://example.com`, `process.argv[2]` contendrá `https://example.com`.
4. **`if (!url) { ... }`**
* Muestra un mensaje de error si no se especifica una URL y termina el script de forma anormal con `process.exit(1)`.
5. **`const browser = await puppeteer.launch({ headless: true });`**
* Inicia una nueva instancia del navegador.
* `headless: true` es una configuración para ejecutar el navegador en segundo plano sin mostrar la interfaz de usuario (pantalla). Si se desea ver el funcionamiento del navegador, por ejemplo, durante la depuración, se debe establecer en `false`.
6. **`const page = await browser.newPage();`**
* Abre una nueva pestaña (página) en el navegador iniciado.
7. **`await page.goto(url, { waitUntil: 'networkidle2' });`**
* Navega a la URL especificada.
* `waitUntil: 'networkidle2'` es una opción importante para esperar a que la página se cargue. Esto espera hasta que no haya nuevas conexiones de red durante 500 milisegundos después de que el número de conexiones de red sea dos o menos. Es útil para mostrar correctamente sitios web modernos (como SPAs) que cargan contenido dinámicamente con JavaScript.
8. **`await new Promise(resolve => setTimeout(resolve, 5000));`**
* Después de que la página haya terminado de cargar, espera 5 segundos adicionales.
* Esto se inserta como un tiempo de espera adicional para animaciones que no se cargan completamente solo con `networkidle2`, o para contenido que aparece después de una operación específica.
9. **`const html = await page.content();`**
* Obtiene el contenido HTML completo de la página. Esto incluye todos los elementos HTML generados dinámicamente por JavaScript.
10. **`console.log(html);`**
* Imprime el HTML obtenido en la consola.
11. **`await browser.close();`**
* Cierra la instancia del navegador y libera los recursos. Si se olvida esto, el proceso podría seguir ejecutándose.
### Resumen
Este script realiza el proceso de **"obtener la página web de la URL especificada en la línea de comandos, en su estado final después de que la ejecución de JavaScript haya terminado, y mostrar su HTML en la salida estándar"**.
Es un método muy útil cuando se desea obtener información de sitios web que se renderizan dinámicamente con JavaScript (como SPAs), y que no se puede obtener con una simple solicitud HTTP (por ejemplo, para web scraping).
Así es como lo muestra.
Bueno, eso es todo....