martes, 21 de enero de 2014

Generar números aleatorios sin repetir con Java

¿Alguna vez os ha surgido la necesidad de generar números aleatorios sin que los mismos se repitan? Aquí os dejo una posible solución, codificado en Java:


public class NoRepeatRandom {

    private int[] numeros = null;
    private int N = -1;
    private int numRestantes = 0;
    
    public NoRepeatRandom(int minVal, int maxVal){
        N = (maxVal - minVal) + 1;
        numeros = new int[N];
        int n = minVal;
        for(int i = 0; i < N; i++)
          numeros[i] = n++;
        numRestantes = N;
    }

    public int getRandom(){
        // Devuelve -1 cuando no quedan números
        if(numRestantes <= 0) return -1;

        // Si no, calculamos un índice aleatorio
        int index = (int) (numRestantes * Math.random());
        int randNum = numeros[index];

        // Desplazamos el valor obtenido al final del array, y 
        // disminuimos el numero de elementos restantes:
        numeros[index] = numeros[size-1];
        numeros[--numRestantes] = randNum;

        // Devolvemos el número aleatorio
        return randNum;
    }
}

Para hacer uso de esta clase, deberemos crear un nuevo objeto de la siguiente forma:


public class Principal {
  
  public static void main(String[] args) {
    
    // El objeto random generará números aleatorios en el intervalo [1-1000]
    NoRepeatRandom random = new NoRepeatRandom(1, 1000);
    
    // El valor devuelto lo almacenamos en una variable tipo int:
    int num = random.getRandom();
    
    ....
  
  }
} 

viernes, 17 de enero de 2014

Programación de su ejecución mediante cronjobs del servidor

<< Leer entrada anterior "Creación del script"

Para que el script que hemos creado se ejecute automátcamente, deberemos crear un cronjob en nuestro servidor web. Para ello, deberemos conectarnos al mismo mediante SSH.

Recomiendo la utilización de Putty, un pequeño programa que nos servirá para realizar dicha conexión. Deberemos consultar en nuestro proveedor los datos de conexión (usuario y contraseña).

Abrimos Putty, e introducimos la ruta del servidor al que nos conectaremos:


Pulsamos sobre open, y se nos abrirá una consola pidiendo usuario y contraseña:



Una vez introducidos el usuario y contraseña, podremos interactuar de manera remota con el servidor. Para añadir el cronjob, ejecutaremos la sentencia crontab -e.

Tras esto, pulsando la tecla "Insert", podremos añadir una línea del tipo:
min(0-59) hour(0-23) day(1-31) month(1-12) day_of_week(0-7) command
Por ejemplo, para que nuestro script PHP se ejecute todos los días 15:02h de cada mes, deberemos introducir la siguiente línea:
15 2 15 * * * /usr/bin/wget http://www.dominio.com/ruta/script.php
Una vez introducida, deberemos pulsar SHIFT+Z para que se almacene en nuestro crontab. 

Obtención de los datos necesarios de facebook

Para comenzar, deberemos obtener los datos de nuestro facebook. Para ello, debemos acceder con nuestra cuenta de facebook a la página de desarrollarores haciendo click aquí para crear una nueva App de Facebook que utilizaremos para hacer las publicaciones. Habrá que seguir los siguientes pasos:

Crear nueva App, para ello hacer click en Aplicaciones, Create a New App:




Deberemos dar un nombre a la aplicación, y un identificador (que debe ser único), además de establecer el tipo de aplicación. Una vez establecidos, hacer clic en "Creación de aplicaciones":




Con esto, tendremos nuestra aplicación creada. Ahora deberemos apuntarnos el identificador de la app (APP_ID), y su clave secreta (APP_SECRET) (recuerde que no debe revelar esta clave a nadie).




Ahora necesitamos la clave de acceso de la aplicación, y otorgar los permisos necesarios. Para ello accedemos al enlace https://developers.facebook.com/tools/explorer, seleccionamos nuestra App, y después hacemos clic en "Obtener identificador de acceso":



Esto nos abrirá un diálogo para otorgar los permisos a nuestra aplicación. Aquí deberemos abrir la pestaña "Extended permissions", y seleccionar "manage_pages", "publish_stream", "photo_upload", "publish_actions", y hacer clic en "Get Access Token":



Esto nos devolverá a la ventana anterior, pero ya tendremos nuestra clave (ACCESS_TOKEN) disponible. Deberemos apuntárnosla también para utilizarla después.




Esta clave es válida únicamente durante dos horas, por lo que deberemos hacerla de larga duración. Para ello, deberemos modificar con los datos que tenemos la siguiente URL:

https://graph.facebook.com/oauth/access_token? client_id=APP_ID& client_secret=APP_SECRET& grant_type=fb_exchange_token& fb_exchange_token=ACCESS_TOKEN


Esto nos devolverá una cadena de texto, de donde deberemos extraer nuestra clave de acceso de larga duración (ACCESS_TOKEN). Únicamente deberemos apuntar lo que aparece destacado en la siguiente imagen: