Empece este blog para guardar los descubrimientos en programacion que hago cuando tengo un error y por mas que busco en san Google, no encuentro nada hasta despues de horas de andar buscando y horas de prueba y error. Si a alguien algun dia le sirve, que bueno. En general es para mi porque se me olvidan muchos de estos descubrimientos.

Wednesday, October 12, 2011

Errores al commitear en el SVN

Hoy al intentar darle commit a un projecto al svn, el maravilloso svn te da esos errores horripilosos donde el detalle del error te deja mas confundido sin idea de por donde buscar.

El error decia lo siguiente:

org.tigris.subversion.javahl.ClientException: Attempted to lock an already-locked dir
svn: Working copy 'C:\path' locked

El error dice: Se intento bloquear un directorio que ya esta bloqueado. C:\tu directorio bloqueado.

Esto se soluciona de la siguiente manera:
Al estar en la perspectiva TeamSynchronize,
darle clic derecho al projecto con el error ----> Team---->Cleanup.

Esto debe solucionar este error. 

Despues nos encontramos con otro de sus errores maravillosos. 
org.tigris.subversion.javahl.ClientException: Entry already exists
svn: 'C:\path' is already under version control

El error dice: La entrada ya existe en el svn. Tu directorio esta bajo control de version.

Esto es porque en las carpetas del projecto deben existir carpetas .svn que se fueron cuando se le da copy/paste a las carpetas. Esto es facil de obviar y se soluciona entrando a las carpetas del projecto y eliminando estas carpetas .svn. Con esta solucion hay que tener un poco mas de cuidado, no borres carpetas .svn sin saber cual es la que te esta dando el problema de commit. Si estas comiteando diversas carpetas del projecto, prueba ir comiteando una por una para encontrar cual es la carpeta en la que debes eliminar los .svn para que no elimines las carpetas .svn que si estan correctas. 

Feliz programacion. 

Thursday, October 6, 2011

CSV Reader

El dia de hoy aprendi mucho. Tengo tiempo de estar creando programas que lean archivos txt o csv desde hace un tiempo, pero nunca habia empezado el programa completamente de 0; siempre tuve referencias. Como el mismo problema con los Regex, la manipulacion de csv (que hasta hoy aprendi que significa Comma separated values) los hacia en archivos jsp, no en un java class. Aqui no hay mucha diferencia excepto la manipulacion del csv. Nunca antes necesite distinguir las cabeceras de las columnas del csv, solo habia utilizado el file.readLine() comun y corriente porque pues el nombre de las cabeceras no era requerido. En mi ultimo programa, estos eran de suma importancia. Hoy google si se porto bien conmigo (dado que el tema en general es sencillo) y encontre una excelente pagina que quiero dejar registrado.

http://www.adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=CSV

Este pequeño tutorial requiere de la descarga de un javacsv2.1.zip (que encuentras el link de descarga en el mismo link anterior) para utilizar la libreria CsvReader. Muy util el tutorial y sencillo el tutorial y pues a continuar programando!!!



Wednesday, October 5, 2011

Java Regular Expression

Regular expressions, o comunmente conocidas como Regex siempre me han dado dolor de cabeza. No, este no es un tutorial de regex pq honestamente aun no las comprendo a plenitud.

Mi primer encuentro con los regex fue cuando se me solicito que en el ingreso de la direccion de una pagina web no se permitiera que el usuario ingresara aaaaaabbbbbbccccccc o 1111143333344444, entienden la idea.

Pues esto se puede hacer con iteradores sobre el string, pero se ve feo, poco creativo y enogorroso. En su lugar, le di un vistazo a las regex. Excelente. Las regex me permitian buscar patrones y de encontrarlo, saber que hacer con ellos. Hasta hay testers de regex online que te permiten revisar tu regex y compararlo con strings para ver si encuentras un patron.

Mi tester online favorito es  http://www.regular-expressions.info/javascriptexample.html

Ingenua y nueva en los regex, no sabia que habia distincion cuando lo utilizas en Java y en JavaScript. Busca testers para Java; si lo encuentras, pasalo que por mas google que hago, nada. Como era una pagina web, use javascript y no se dijo mas. Para Java la cosa cambia mucho y son pocos los sitios web que te ayudan a diferenciarlo.

Entonces, algunos de mis hallazgos.
En Java, los regex llevan por default el * y el $ en el string a comparar, lo cual busca tu patron en todo el string, en lugar en cualquier porcion del string que se encuentre tu patron.

Solucion:
agrega .* REGEX .* en tu expresion y voila! Esto permitira que tome el matches() si encontro patron en cualquier porcion del string.

Ejemplo:
    Pattern p = Pattern.compile(".*(\\w)\\1{3}.*") ;
    matcher m = p.matecher(String);
        if (m.matches()){
             aqui va tu codigo;
       }

NOTA: recuerda que la \\ es una \ de escape.

Eso fue un poco de dolor de cabeza.
Leyendo mas para ver si por fin entendia las regex (nope, aun no), encontre que los regex que pruebes en tu online tester para javascript funcionaran a la perfeccion en tu java class si utilizas el metodo find() en lugar de matches()

Ejemplo:

Pattern p2 = Pattern.compile("(\\w)\\1{2}");
Matcher m2 = p2.matcher(text);
if (m2.find()) {
tu codigo aqui;
}


Bueno, a mi me ayudo bastante! :)

NOTA: la primera solucion se mostro mas efectiva que el find(). Para su consideracion :P