urlfeliz2018.c

Código

En 2017, trabajando con varias piezas con URLs, decidí realizar 27 felicitaciones navideñas con este motivo. Programé un pedacito de código C (con VI, por supuesto, y from scratch, como a mí me gusta) que ha generado 27 URLs únicas. Las he acomodado con GIMP/Linux sobre papel fotográfico que me regalaron con la impresora y al que no sabía qué uso dar.

Me gusta la unicidad del (pseudo)azar programable, que dota de cierto engañoso aura a cada una de las pequeñas piezas que, por momentos, pensé en personalizar, pero intervenía en el azaroso gestar de las mismas. Ya es suficiente con que las URLs comiencen con mi SLD (Second Level Domain), en lugar de un dominio generado al azar..


/*****************************************
urlfeliz2018.c

Programa crear URLs que no tengan ningún sentido más que el azaroso.
Añado la dirección del servidor para que si alguien quiere ir, al menos aparezca una mínima explicación de en qué consiste el proyecto.
Derivo a una URL que contiene una búsqueda en mi blog incluyendo la palabra "urlarga" que remitirá a una entrada específica creada para tal fin.

*****************************************/

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
#include <wchar.h>
#include <locale.h>

// Longitud de la URL formada, incluyendo protocolo y servidor
#define LONGITUD_MAX 729
// Para realizar 27 URLs arbitrarias
#define NUM_URLS 27

int main()
{
  setlocale(LC_CTYPE, ""); // Necesario para que funcionen las ñ
  
  int  i, j, letra, l_alfa, l_prot, l_serv, l_base;
  // Un alfabeto incluyendo algunos signos de puntuación
  wchar_t alfabeto[] = L"0123456789ABCDEFGHIJKLMNÑOPQRSTUVWXYZabcdefghijklmnñopqrstuvwxyz!!$%&/()=?¿¡,;:-_+ç";
  wchar_t URL[LONGITUD_MAX];
  wchar_t protocolo[] = L"http://";
  wchar_t servidor[] = L"giusseppe.net/blog/?s=feliz&2018&urlarga&";

  l_alfa = wcslen(alfabeto);
  l_prot = wcslen(protocolo);
  l_serv = wcslen(servidor);
  l_base = l_prot + l_serv;

  srand (time(NULL));

  for (j = 0; j < NUM_URLS; j++)
  {
    wmemset(URL, L'\0', LONGITUD_MAX);
    wcscpy(URL, protocolo); 
    wcscat(URL, servidor); 
    for (i = l_base; i < (LONGITUD_MAX-1); i++)
    {
      letra = rand() % l_alfa; // Obtenemos una letra (índice) al azar del alfabeto
      // Aleatoriamente, si el anterior no era un punto ni una /, ni estamos al final de la URL, ponemos un punto.
      if ((!(rand()%5)) && (URL[i-1] != L'.') && (URL[i-1]!=L'/') && (i != (LONGITUD_MAX-1))) URL[i]=L'.';
      else URL[i]=alfabeto[letra];
    };
    wprintf(L"|%ls|\n", URL);
  };
} // main()

urlfeliz2018.c

Ejecución

La salida de este programa compilado es un listado de 27 URLs inventadas de 729 caracteres, que fueron compuestas sobre postales y enviadas en las navidades de 2018.