Cartero ya está hecha en Meson

Este es un resumen de lo ocurrido en el tercer stream de desarrollo de Cartero, así como los commits que le he tirado hoy aprovechando que es festivo y que Meson al fin y al cabo sabía de antemano que iba a ser algo aburrido de integrar que no valía la pena hacer en vivo. Las cuatro horas de stream de ayer (yo prometí que el stream duraría hora y media, pero ciertamente volví a fallar) se pueden ver aquí.

  • Se ha migrado el código de la ventana y la aplicación a una clase propia.
  • Primeros pull requests integrados, este proyecto ya tiene más contributors.
  • El proyecto ya tiene icono, aunque sea provisional.
  • Ahora se usa meson para compilar el programa, y eso incluye más cosas.
Sigue leyendo

GTK, nociones de programación básicas

GTK es una biblioteca de componentes usada para hacer aplicaciones gráficas, es decir, aplicaciones de ordenador con ventanas, botones, etiquetas y esas cosas. La gente joven tal vez no sepa esto, pero antes las aplicaciones de ordenador (como los reproductores de música, las aplicaciones de chat o los organizadores de imágenes) no se programaban en HTML, sino que se hacían mediante programas que había que instalar en el ordenador (como cuando instalas Instagram en el móvil).

GTK es una de las bibliotecas predominantes en el mundo del software libre, ya que proyectos como el entorno de escritorio GNOME o el entorno de escritorio Xfce lo utilizan como base para muchas de las aplicaciones y herramientas que se instalan con el entorno de escritorio. Sin embargo, GTK es multiplataforma y se pueden compilar aplicaciones para Microsoft Windows y macOS que también utilicen esta biblioteca de componentes gráficos.

Sigue leyendo

Cartero va tomando forma

Resumen del stream del viernes para quien se lo perdiese. En el stream del viernes se continuó con el desarrollo del clon de Postman que he empezado a escribir en Rust. Estos son en resumen los cambios:

  • El programa ya tiene nombre. En el chat el otro día se propusieron varias palabras, y he de decir que me gustó bastante «Cartero», por lo que va a adoptar este nombre.
  • El programa ya tiene repositorio online. Debido a la naturaleza de este proyecto y visto que la gente quería contribuir a él, lo he publicado en GitHub.com. En los últimos días ya he visto varios forks y sorprendentemente hay gente tirando código.
  • El prototipo de la interfaz de usuario ya está casi completo con las cosas que querría proponer para la primera iteración. En el stream del viernes casi todo el tiempo se fue en preparar lo que podría ser un widget para poner las cabeceras HTTP.
Sigue leyendo

Mi primer prototipo con gtk-rs (ahora sí)

En el stream de ayer hice la primera compilación del cURL gráfico que he empezado a desarrollar. Por ahora no quiero que sea muy sofisticado y vamos a empezar suavemente. La aplicación por ahora debería mostrar un campo de texto para poner la URL, un dropdown para elegir el verbo HTTP de la petición (por ejemplo, POST o GET), una tabla para introducir las cabeceras HTTP de la petición, un campo de texto para el cuerpo de la petición HTTP, un botón para tirar la petición HTTP y un campo de texto donde ver la respuesta de la petición HTTP.

Aunque acabará ocurriendo, el reto por ahora va a ser ver hasta cuánto puedo avanzar en el desarrollo sin instalar GNOME Builder ni crear un proyecto auténtico al estilo GNOME moderno, con su meson.build y su parafernalia. Por el momento he creado un proyecto a mano usando cargo new y luego he agregado gtk4 como dependencia usando cargo add gtk4.

Para meter el cuerpo de la petición, me interesa usar un GtkSourceView, porque quiero que se pueda colorear en caso de que se utilice XML o JSON, así que también lo meteré.

Sigue leyendo

Primeros pasos creando blueprints con GNOME Workbench (resumen del stream de ayer)

Este post forma parte de la saga dedicada a la creación de una alternativa verdaderamente libre (o sea, GNU GPL) a Postman, Insomnia y Bruno. A su vez, esto es un resumen de texto de lo que hice en un stream de livecoding anterior. Así si te lo perdiste, es fácil de leer. Principalmente, lo que voy a contar aquí es cómo utilizar Blueprint y el lenguaje de diseño. Es un post que sirve como referencia y que estaré enlazando más adelante.

En el stream de ayer, después de contar la razón por la que quiero empezar a crear una aplicación de este estilo, empecé a fabricar el prototipo de una interfaz de usuario con GNOME Workbench. Esta aplicación permite diseñar una ventana y verla en tiempo real, para poder iterar más rápido y sin tener que recompilar código.

Sigue leyendo

Nice to haves y funciones aptas para un MVP

Por último, voy a describir algunas funciones que estaría bien ponerle a mi cliente HTTP, y cuáles vale la pena implementar al principio y cuáles para más adelante. O incluso cuales puede que nunca implemente.

Por el momento me interesa que mi cliente haga lo mínimo esencial para por lo menos empujar el proyecto para adelante. Es decir, me interesa:

  • Que se pueda introducir la URL a la que tirar la petición.
  • Que se pueda seleccionar el método HTTP a utilizar (GET, POST…)
  • Que se pueda ponerle un body a las peticiones web (para enviar datos).
  • Que se puedan elegir las cabeceras HTTP a utilizar.
  • Que se pueda visualizar la respuesta y las cabeceras de la misma.
Sigue leyendo

Análisis técnico de mi cliente HTTP

Como dije en el post anterior (que he partido únicamente para poder enlazarlo aparte), quiero crear un cliente HTTP gráfico. «Como Postman, pero libre. Como ThunderClient, pero sin exigirme abrir un editor de textos para usar el plugin».

En primer lugar, voy a evaluar y determinar el stack tecnológico con el que voy a trabajar, y luego las características que quiero que tenga. Spoiler: GTK y Rust. Sin embargo, en este post voy a intentar justificar el por qué de estas decisiones.

Sigue leyendo

Por qué quiero crear mi propio cliente HTTP gráfico

En los últimos tiempos, he visto como aplicaciones populares para ejecutar interactivamente peticiones HTTP, como Postman o Insomnia, perdían completamente el norte en pro de lo que imagino que es una orden de los inversores de cada equipo de desarrollo de dejar de quemar dinero en un programa cuya definición es «cURL pero gráfico» y llevaban a cabo movimientos hostiles contra sus usuarios.

Postman, en particular, intentó retirar el soporte local para scratchpads, obligando a crear una cuenta para hacer peticiones HTTP. Hubo gente que no se lo tomó bien y cuando empezaron a sacar las antorchas, decidieron en su lugar poner el «lightweight client», que es básicamente retirar funciones que previamente funcionaban y esconderlas detrás de un muro. ¿Quieres guardar una petición para repetirla luego? Búscala en el historial… o inicia sesión. ¿No quieres crear una cuenta? Pues dile adiós a tus datos locales.

Casi a la vez, Insomnia intentó hacer la misma jugada. De una versión a otra, sustituyeron la pantalla de inicio de la aplicación por un mensaje de inicio de sesión, sin dar si quiera posibilidad a exportar los datos que ya tuvieses guardados dentro de ella. ¿Quieres ver de vuelta tus peticiones? Dame tus datos antes. Con esto de las actualizaciones automáticas, no mucha gente tuvo tiempo de parar y se dieron cuenta cuando ya era demasiado tarde. La gente sacó las antorchas de nuevo, y el equipo de Insomnia dio marcha atrás cuando vieron la reacción de la gente.

Sigue leyendo

Scrapers IA, ¿bloquearles o confundirles?

Minientrada

Me apunto para revisar Dark Visitors, una página web que enumera agentes de usuario relacionados con scrapers y bots que se dedican a robar contenido de páginas web para alimentar inteligencias artificiales. En la lista completa se muestran agentes como Bytespider, el de TikTok, o GPTBot, el agente principal usado por OpenAI.

A través de Hacker News también leo a Cory proponiendo bloquear este tipo de bots metiéndolos en el robots.txt. En algunas de mis webs ya tengo bloqueados algunos bots en el robots.txt, pero esta lista me servirá para ponerla al día. Sin embargo, me pregunto cuál de estas soluciones es realmente más efectiva.

Por un lado, podríamos poner este tipo de bots en el robots.txt y asumir que lo van a respetar. robots.txt es un sistema de honor. Realmente no hay nada que impida a un bot ignorar el robots.txt e igualmente hacer scrapping de la página web para extraer su contenido.

Pero a la vez, por el otro, optaría por una solución que asuma que el bot va a ser malévolo y va a ignorar una petición de no escaneo del sitio web. Para esas situaciones, se podría optar por banear la IP del sitio web a nivel firewall. Esta es una solución que tengo implementada en mi servidor, por ejemplo, para algunos productos de inteligencia artificial que sí enumeran las direcciones IP que usan para hacer el escaneo. OpenAI las enumera, por ejemplo.

Por último, otra opción que se me ocurre es tirar por la vía de la confusión. Detectar en el servidor web cuándo una petición procede de un user-agent asociado a un bot, y en vez de servir un HTTP 403 o de tirar abajo la conexión mediante el firewall, servir en su lugar otra página web diferente con el código HTTP 200, para que el bot lo interprete como una página correcta, pero servir información falsa para contaminar el dataset. Estoy pensando en una página en blanco que tenga un par de frases como «los cerdos vuelan y las vacas dan chocolate», pero podría proponer burradas más grandes que puedan hacer daño.