Author Archive

  • Como Zipear y Almacenar Log Files

    0

    Si tienen una aplicación en producción es sumamente importante no borrar los logs jamás. Por qué ? Porque SIEMPRE van a encontrar una situación donde van a necesitar saber en que momento pasó tal cosa. Hay una ley que siempre se cumple,

    Los backups nunca se necesitan hasta el momento que perdiste todo, ahi si no lo tenés empezá a buscar otro laburo.

    Un ejemplo claro es un reclamo de un cliente..

    Cliente – Hola, me llego un cargo de un servicio que no pedí.
    Yo – WTF!

    Inmediatamente solicito al cliente datos para poder ubicar en mis logs la acción exacta que generó esa factura y resolver el problema.

    En mi caso utilizo varios niveles de log partiendo del más detallista (SQL) hasta el más evidente (ERROR). Actualmente Memudoya.com está generando 100 MB de logs diarios, lo que nos dá casi unos 3GB de logs al mes. Según que tipo de hosting estemos contratando ésto puede ser un dolor de cabeza y nos tienta a borrar logs que consideramos viejos.

    Tengo conocimiento de que Google por ejemplo, guarda logs de apache desde al menos el 2007. Es increíble, pero si. Imagínense la cantidad de información que están backupeando a diario.

    Para archivar los logs hice un shell script muy sencillo que corre a diario con un CRON para almacenar los logs como ZIP. También me di cuenta que generalmente lo que más querés ver son los logs del día, asi que la idea es que este script archive los logs de ayer.

    Algo de código:

    #!/bin/sh
    
    #declare yesterday
    DATE=$(date --date='1 day ago' +%Y-%m-%d)
    
    OLD=/var/log/myapp/old
    
    mv /var/log/myapp/mydomain.$DATE* $OLD
    
    zip -m9 /usr/share/mybackup/$DATE-myapp.zip $OLD/*
    

    No es para nada complicado, pero es SUPER útil. Espero les sirva.

  • Como NO Hacer Una Aplicación – Claro

    1

    Mis amigos de Claro Argentina tienen una aplicación que permite hacer varios tramites y consultas online. Uno de ellos es el supuesto registro de una tarjeta de crédito para poder cargar si algún equipo de tu cuenta está con factura fija y se quedó sin crédito.

    Veamos el menú, mas allá del diseño patético y poco práctico ubicamos la función que queremos. Registrar una tarjeta de crédito.

    Y teniendo en cuenta el servicio horrible que da Claro no nos podíamos encontrar otra cosa más que esta.

    Ni siquiera llamar ?. Son patéticos.

  • Geolocacion en Javascript

    0

    Hoy en dia es super importante localizar a nuestros visitors, por eso hay varias APIs que nos permiten a partir de la IP saber desde donde estan haciendo el request. MaxMind es una base de datos con una version open source la cual nos permite hacer llamados a sus funciones para poder determinar los datos de locación del request. Maxmind.

    Primero debemos referenciar al js file de Maxmind

    <script type="text/javascript" src="http://j.maxmind.com/app/geoip.js"></script>
    

    Ahora debajo de la inclusion de este script escribimos la llamada.

      var lat = geoip_latitude();
      var lon = geoip_longitude();
      var city = geoip_city();
      var country = geoip_country_name();
      var countryCode = geoip_country_code();
    // now you got the info, do whatever you want
    

    Geolocación en el client side es util relativamente, ya que de esta manera el contenido generado es probablemente que sea llamado usando ajax. Yo prefiero concretamente una solucion server side, que permita ya brindarle al usuario en el primer request contenido para su locación.

    En poco tiempo estamos implementando en Memudoya.com una base de Maxmind offline (local, actualizable) para poder brindar a los visitantes destacados de su zona.

    Have a good one.

  • Una Buena Razon Para No Usar Siempre La Misma Password

    0

    Días atrás twitter puso en alerta a algunos usuarios para que cambien las passwords porque estaban siendo victimas de prishing. Pasa y pasa que muchos developers hacen herramientas open source, como por ejemplo foros open source PHP los cuales tienen exploits. Trackean sus instalaciones y cuando el foro se hace un poco popular ingresan con un master password (por ejemplo) y se roban todas las passwords y emails. Este es el típico caso donde te chorean la password. Viste que facil es que sepan tu password ? Bueno, ahora perfectamente saben que no deben poner la misma password para todos los sites.

    Ahora, es muy molesto estar acordandose passwords y demas, para eso, hoy les acerco una tecnica para aquellos Java Boys que quieran tener un poco de complicacion en sus vidas.

    La técnica se basa en 1 password master y un 1 string random que puede perfectamente ser el nombre del servicio.

    Por ejemplo, yo elijo como password master “rodrigo” y por ejemplo el servicio de email de yahoo es simplemente “yahoo”. Entonces tenemos “rodrigo”+”yahoo”, en el caso de gmail seria, “rodrigo” +”google” and so on.

    Ahora, como combinar estas palabras para generar una password ? Usamos un algoritmo MD5 bien casero en Java. El código.

    public class MD5Generator() {
    private MessageDigest messageDigest;
    
    private MessageDigest getMessageDigestMD5() throws NoSuchAlgorithmException {
    	if (this.messageDigest == null) {
    		this.messageDigest = MessageDigest.getInstance("MD5");
    	}
    	return this.messageDigest;
    }
    
    public String generate(String key) throws Exception {
    	// start fresh
    	this.getMessageDigestMD5().reset();
    	this.getMessageDigestMD5().update(key.getBytes());
    	byte[] bytes = this.getMessageDigestMD5().digest();
    	// buffer to write the md5 hash to
    	StringBuffer buff = new StringBuffer();
    	for (int l = 0; l < bytes.length; l++) {
    		String hx = Integer.toHexString(0xFF & bytes[l]);
    		// make sure the hex string is correct if 1 character
    		if (hx.length() == 1) buff.append("0");
    		buff.append(hx);
    	}
    	return buff.toString().trim();
    }
    }
    

    Ahora, el uso seria algo asi:

    String master = "rodrigo";
    String service = "yahoo";
    String longMD5 = new MD5Generator().generate(master+service);
    

    La variable longMD5 va a ser un choclo como esto: “37b0227d88adcf07ddb469fa45ad2938″ per pueden hacer un substring para acortarla a por ejemplo 8 caracteres.

    String pass = new MD5Generator().generate(master+service).substring(0,8);
    

    Que lo disfruten.

  • Mas JQuery parte V

    0

    Unwrap elementos

    El método “.wrap()” existe hace rato, pero ahora John Resig ha agregado “.unwrap()” el cual remueve todos los tags exteriores al nodo JQuery seleccionado. Como funciona ?

    Supongamos el siguiente HTML:

    <div>
      <p>Some text here</p>
    </div>

    Queremos extraer el tag <p>, entonces usamos “.unwrap()”.

    $("p").unwrap();

    Este metodo quita el tag <div> que contiene a <p>. Elimina fácilmente el parent tag.

Page 5 of 49« First...«34567»102030...Last »