Archive for April, 2010

  • Java 7 – Project Coin

    0

    Como en las versiones anteriores, Java 7 va a traer una serie de agregados al lenguage para hacer más fácil su escritura y lectura. Éstos cambios apuntan a las tareas de mayor uso para reducir su complejidad innecesaria.

    Strings en switch statements

    Hasta hoy solo se puede hacer switch con valores numéricos, pero a partir de esta nueva versión, se intruducen los strings también como un valor correcto para hacer un switch. Es un gran avance ya que solo se podía hacer un simil switch con valores String utilizando sentencias if-else.

    switch("something") {
      case: "something": //do blabla
        break;
      case: "other" // do blabla 2
        break;
    }
    

    Inicialización de Generics mejorada

    En Java 5 se introdujo el concepto de Generics, lo cual permite parametrizar una colección para evitar posteriores casteos. Siempre fue muy engorroso hacer una nueva instancia de esa collección ya que hay que utilizar algo asi:

    Map map = new HashMap();
    

    Java 7 infiere el tipo para evitar ese código engorroso.

    Map map = new HashMap();
    

    Inicialización de Collections simplificada

    Otro feature interesante es la inicialización de collections la cual se asemeja a la inicialización de los arrays en Java.

    // asi se incializa un array
    String[] array = new String[] {"a", "b", "c"};
    
    // asi se va a inicializar una collection
    List list = ["a", "b", "c"];
    

    Manejo de recursos automatizado

    Este es un feature que me da bastante dudas, quiero tenerlo en frente para poder probarlo y pronto. Existe un nuevo tipo de try statement. Dentro de este try se declaran recursos que deben ser cerrados manualmente como por ejemplo algun Input o Output stream. Una vez que el statement try termina, cierra automáticamente todos los recursos abiertos. Como lo hace ? ni idea, debe tener un set de clases a cerrar supongo.

    try {
      FileInputStream input = new FileInputStream("myfile.txt");
      // read your file
    }
    // the input was closed automatically
    

    Por ahora eso es lo que tenemos con lo que respecta al Project Coin, acá les dejo algunos recursos:

    Project coin: http://openjdk.java.net/projects/coin/
    Java 7: https://jdk7.dev.java.net/

  • Como Resolver Tree Conflicts en SVN

    1

    Muy cansado del famoso tree conflict de SVN cuando tratamos de hacer rebase de una versión a otra me dedique a ver que se podía hacer. Muchas veces el tree conflict es dado porque SVN piensa que los 2 archivos, el local y el remoto, fueron modificados, pero son iguales por eso SVN no da ningun tipo de opción ni sugerencia para resolver éste conflicto.

    Cuando estamos seguros que ambos files son los mismos podemos aplicar este comando que va a decir que el WORKING copy (mi copia local) es la que debe prevalecer:

    svn resolve --accept working project/src/somefile.bin
    

    Si esto no funciona (me funcionó y muy bien) la solución Nro 2 es borrar los local changes y recrear el project manualmente. Así de triste.

  • 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.