Garbage In, Garbage Out http://www.lacoctelera.com/gigo Diseño web, tecnología, e internet. es-es http://www.lacoctelera.com/myfiles/gigo/gigo65x65.png Garbage In, Garbage Out http://www.lacoctelera.com/gigo the-shaker v0.1. More on http://www.the-shaker.com Integracion continua http://www.lacoctelera.com/gigo/post/2008/01/11/integracion-continua 2008-01-11T16:02:32+00:00 otros En mi nuevo trabajo hace tiempo que me preguntaba por que habia un programa llamado CruiseControl compilando y ejecutando tests continuamente a nivel de integracion. Hoy me ha picado la curiosidad de saber por que se hace esto.

Cuando varios programadores trabajan en un mismo proyecto con un sistema de control de versiones como Subversion o el antiguo CVS es normal tener conflictos entre desarrolladores cuando alguno de ellos envio sus ultimos cambios al servidor.

Es decir, si te mandan desarrollar una nueva caracteristica en un proyecto web o arreglar algun bug, normalmente te actualizas tu version del programa con un update, haces los cambios, compilas, ejecutas tests, y si todo va bien, envias tus cambios al servidor para que los incorpore al repositorio del proyecto. Pues bien, es normal que otros desarrolladores tambien envien nuevos cambios al repositorio y que esos cambios, a veces, puedan entrar en conflicto con los de otros programadores.

La Integracion Continua consiste en compilar y ejecutar los tests de todo el proyecto contenido en el repositorio compartido por los programadores para detectar lo mas pronto posible esos posibles conflictos y arreglarlos cuanto antes. Esto puede ser manual, pero lo habitual y recomendable es hacerlo automaticamente con una herramienta como CruiseControl para evitar fallos humanos.

Si quieres ampliar informacion sobre esto, te recomiendo que leas el articulo de Martin Fowler sobre Integracion Continua (en ingles).

]]>
http://www.lacoctelera.com/gigo/post/2008/01/11/integracion-continua#comentarios
Por la libertad de expersion y en solidaridad con Krusher http://www.lacoctelera.com/gigo/post/2007/11/09/por-libertad-expersion-y-solidaridad-con-krusher 2007-11-09T12:51:02+00:00 otros Recientemente, se ha dictado una sentencia que condena al responsable de la frikipedia, Krusher, sin posibilidad de apelacion, por unos comentarios hechos por otra persona en contra de la mafia de la SGAE (Sociedad General de Autores y Editores), a la que me da nauseas enlazar, pero bueno.

A estos personajes no les gusta que se les llame por su nombre, asi que hacen uso de sus tentaculos para sobornar a politicos y a quien haga falta para recaudar impuestos revolucionarios injustos a traves de CDs virgenes, memoras, reproductores MP3, etc. e incluso para conseguir sentencias favorables para seguir recaudando mas y enriquecer a los cuatro ricachuelos y pseudo-artistas de siempre.

Reproduzco aqui la imagen de la entrada de la frikipedia que ha causado esta sentencia en solidaridad con Krusher y por la libertad de expresion, que despues del secuestro de El Jueves y ahora esto, parece que esta bien tocada de muerte. Es posible que haya personas en este pais - España - capaces de pisotear descaradamente la constitucion?

Mas informacion:
http://www.davidarcos.net/2007/11/09/free-krusher/

]]>
http://www.lacoctelera.com/gigo/post/2007/11/09/por-libertad-expersion-y-solidaridad-con-krusher#comentarios
Que es Linux - Usando Ubuntu http://www.lacoctelera.com/gigo/post/2007/11/08/que-es-linux-usando-ubuntu 2007-11-08T18:29:18+00:00 linux Hace una semanas me harte de la lentitud de Windows, de sus cuelgues, y de los virus, asi que decidi instalar Linux Ubuntu.

Que es Linux para gente no experta

Es el nucleo de varios sistemas operativos completos llamados distribuciones. Un sistema operativo sirve para interactuar con el ordenador. El mas utilizado hoy en dia es Windows. La diferencia de Linux con Windows es que Linux es libre, y se puede conseguir gratis. Tiene fama de ser mucha mas seguro que Windows y de ser dificil de utilizar, pero esto ultimo ha cambiado mucho hasta el punto de que hoy puedo decir que casi es tan facil de utilizar como Windows.

Ubuntu

Ubuntu es una distribucion, es decir, un sistema operativo completo basado en Linux. Esta destinado para gente que no es informatica y es muy facil de instalar y de usar. Puedes descargar una imagen del CD en www.ubuntu.com, grabarla (con Nero por ejemplo), y probarlo en tu ordenador sin necesidad de instalarlo. Si te gusta, luego puedes instalarlo e incluso hacerlo convivir con Windows.

Lo que vas a ver

Si has grabado el CD de Ubuntu, inserta el CD, apaga el ordenador, enciende, y veras el sistema linux funcionando sin instalarlo - un poco lento debido al uso del CD. Veras algo asi:

Y en la ultima version veras algo asi:

Si te gusta y decides instalarlo, que sepas que podras tenerlo instalado junto con Windows. Para ello, Ubuntu dejara instaldo un menu para que elijas arrancar Windows o Linux al encender tu ordenador.

Compatibilidad con Windows

Los programas Linux normalmente son diferentes pero equivalentes y al 99% compatibles con Windows. Por ejemplo, no podras hacer funcionar Word o Excel, pero si tendras tu OpenOffice que puede manejar los archivos de Microsoft Office.

Ademas, Ubuntu viene con muchisimos programas de serie: un editor fotografico parecido a Photoshop llamado Gimp, varios programas para escuchar musica, reproductores de peliculas, juegos, etc.)

Yo tengo instalado OpenOffice para usar documentos Word y Excel, Gimp, Skype, aMSN para messenger, Amarok que es un reproductor de musica increible capaz de obtener las letras de las canciones por internet y capaz de manejar mi iPod, aMule que es la version de eMule de Linux, Firefox como navegador web, y varios reproductores de peliculas divx y DVD (Totem y Mplayer).

Ademas, instalar y desinstalar programas es ahora mas facil que nunca en Ubuntu Linux.

Olvidate de virus. Olvidate de tener que llamar a un amigo cuando todo va muy lento y necesites reinstalar Windows. Linux ya es facil de usar. Pruebalo y alucina con el cambio!

]]>
http://www.lacoctelera.com/gigo/post/2007/11/08/que-es-linux-usando-ubuntu#comentarios
Sigamos con el blog http://www.lacoctelera.com/gigo/post/2007/11/08/sigamos-con-blog 2007-11-08T17:23:33+00:00 otros Creo que es una tonteria terminar el blog porque si porque a veces tengo ganas de contar algo, asi que sigo. Quizas no muy frecuentemente, pero de vez en cuando escribire algo.

]]>
http://www.lacoctelera.com/gigo/post/2007/11/08/sigamos-con-blog#comentarios
Microsoft Surface: el futuro es asombroso y ya esta aqui http://www.lacoctelera.com/gigo/post/2007/06/29/microsoft-surface-futuro-es-asombroso-y-ya-esta-aqui 2007-06-29T11:04:48+00:00 usabilidad otros Acabo de ver los videos de Microsoft Surface. No tengo palabras. El c Menudo chisme guapo. Una especie de mesa-pantalla que iteracciona con los objetos y con tus manos al estilo iPhone, pero en gigante. No tengo mas comentarios, mejor ver los videos:

http://www.microsoft.com/surface/

]]>
http://www.lacoctelera.com/gigo/post/2007/06/29/microsoft-surface-futuro-es-asombroso-y-ya-esta-aqui#comentarios
ClamAV: antivirus gratuito http://www.lacoctelera.com/gigo/post/2007/06/23/clamav-antivirus-gratuito 2007-06-23T13:39:25+00:00 otros Cualquiera que use Linux conoce ClamAV o Clam Antivirus, el antivirus de código abierto para UNIX. Bueno, en este tipo de sistemas realmente no hace falta antivirus si tienes cuidado con la administración del sistema. Realmente creo que está especialmente diseñado para escanear emails y sistemas windows.

Bueno, dejando de lado estas historias, esta entrada la escribo para aquellos que quieran un antivirus sin tener que gastarse la pasta en los sangrantes antivirus típicos. Hombre, no tiene la misma eficacia, pero sirve de sobra para mí. Esto más un mínimo de cuidado es suficiente.

Aquí se puede descargar para Windows.

]]>
http://www.lacoctelera.com/gigo/post/2007/06/23/clamav-antivirus-gratuito#comentarios
Nunca uses macros con el mismo nombre en Velocity aunque se usen en diferentes paginas http://www.lacoctelera.com/gigo/post/2007/06/13/nunca-uses-macros-con-mismo-nombre-velocity-aunque-se-usen 2007-06-13T15:07:10+00:00 velocity Este problema fue para volverme loco.

Tenia dos macros velocity (velocimacros) con el mismo nombre y diferentes parametros siendo usadas para mostrar un menu en paginas diferentes. De repente, el menu de una de estas desparecia de repente. A veces al reves: era el otro menu el que desaparecia.

Mi compañero reconocio rapidamente el problema y me advirtio que no se podian tener dos macros con el mismo nombre y diferentes parametros aunque estuvieran siendo usados en paginas diferentes.

Parece ser que cuando se carga una de las paginas que contiene la macro, velocity debe compilarla, y luego falla cuando intenta compilar la otra con el mismo nombre.

]]>
http://www.lacoctelera.com/gigo/post/2007/06/13/nunca-uses-macros-con-mismo-nombre-velocity-aunque-se-usen#comentarios
Backword: aprende ingles con Firefox http://www.lacoctelera.com/gigo/post/2007/05/17/backword-aprende-ingles-con-firefox 2007-05-17T11:44:59+00:00 extensiones firefox Leo en HacheMuda una extension para Firefox para aprender ingles: BackWord . La instalas, reinicias Firefox, y puedes ver lo que significan las palabras casi instantaneamente con tan solo situar el raton encima de una palabra inglesa.

Problema: Por defecto esta configurado en chino. Vete a Herramientas > Extensiones. Selecciona BackWord y pulsa opciones para configurarlo. Ahi mismo puedes configurarlo para que se active pulsando la tecla CTRL, ya que a veces es irritante que te salgan las palabras continuamente.

]]>
http://www.lacoctelera.com/gigo/post/2007/05/17/backword-aprende-ingles-con-firefox#comentarios
Surefire a STDOUT http://www.lacoctelera.com/gigo/post/2007/05/08/surefire-stdout 2007-05-08T15:03:13+00:00 java/j2ee Surefire es el plugin de Maven que se encarga de los tests. Por defecto, deja sus informes en un fichero en el directorio target.

Para la mayoria de la gente (como yo) es tedioso tener que acceder al fichero, abrirlo, y buscar la linea que te interesa. Con este comando haces que surefire saque los informes por consola:

mvn test -Dsurefire.useFile=false

]]>
http://www.lacoctelera.com/gigo/post/2007/05/08/surefire-stdout#comentarios
Seleccion discontinua en Firefox 3 http://www.lacoctelera.com/gigo/post/2007/04/10/seleccion-discontinua-firefox-3 2007-04-10T15:00:57+00:00 navegadores Firefox SI que mola! Tal y como leo en walhez , Firefox 3 soportara seleccion discontinua. Y que es eso? Pues esto:

Texto con diferentes partes seleccionadas discontinuamente

ACTUALIZACION

Antes se me olvido poner el enlace al articulo original, pero para contestar el comentario, la seleccion se hace manteniendo pulsada la tecla CTRL.

Segun me cuentan en los comentarios, este es el articulo original .

]]>
http://www.lacoctelera.com/gigo/post/2007/04/10/seleccion-discontinua-firefox-3#comentarios
El Gobierno se plantea eliminar las ingenierías superiores y reducir su duración http://www.lacoctelera.com/gigo/post/2007/04/10/el-gobierno-se-plantea-eliminar-ingenierias-superiores-y 2007-04-10T14:53:32+00:00 otros Parece que el problema de las ingenierias empieza a tener una solucion:

El Gobierno se plantea eliminar las ingenierías superiores y reducir su duración

Como ingeniero tecnico me viene de perlas, pero reconozco que el problema es complejo porque ahora los que se quejan son los superiores, y no les falta razon.

En este problema de titulitis, hace ya mucho tiempo que vi claro la solucion: empezar a trabajar cuanto antes. Por eso, despues de soñar toda mi vida con hacer la superior, decidi abandonar la idea. Era solo eso: un sueño. En la realidad, es pura burocracia. Trabajando y con ganas es como mas se aprende, si lo que realmente quieres es aprender.

]]>
http://www.lacoctelera.com/gigo/post/2007/04/10/el-gobierno-se-plantea-eliminar-ingenierias-superiores-y#comentarios
Tests con EasyMock http://www.lacoctelera.com/gigo/post/2007/04/05/tests-con-easymock 2007-04-05T15:05:45+00:00 java/j2ee EasyMock es una libreria muy util para hacer pruebas unitarias con JUnit. Nos sirve para crear cualquier objeto fantasma (mock) y hacer que devuelva un resultado concreto para una entrada concreta.

Por ejemplo, si queremos probar un servicio que necesita un DAO para obtener un dato, podemos crear un DAO fantasma (mock) que realice esa funcion y asi librarnos de dependencias y probar el servicio unitariamente.

Para usar EasyMock tan solo hay que hacer 3 cosas:

  1. Crear el objeto fantasma (mock) con createMock
    IMyDAO mockDAO = EasyMock.createMock(IMyDAO.class);
    
  2. Proporcionar los parametros de entrada concretos y los objetos de salida concretos (si es necesario) con expect:
    DAOPK pk = new DAOPK("111"); // clave de lo que se busca
    DAOReturn return = new DAOReturn("Alex");
    EasyMock.expect(mockDAO.find(pk)).andReturn(return);
    
  3. Generar la implementacion del mock con replay:
    EasyMock.replay(mockDAO);

Asi ya tendriamos un mock para el DAO y podriamos probar el servicio pasandole este mock:

MyService service = new MyService();
service.setDao(mockDAO);

Customer customer = new Customer("111"); service.findCustumer(customer);

]]>
http://www.lacoctelera.com/gigo/post/2007/04/05/tests-con-easymock#comentarios
Plugin para Eclipse que permite acceder a las implementaciones de las interfaces http://www.lacoctelera.com/gigo/post/2007/04/04/plugin-eclipse-permite-acceder-las-implementaciones 2007-04-04T11:55:24+00:00 java/j2ee Acabo de encontrar un plugin para Eclipse muy util que inserta en el menu contextual (el menu que sale con el boton derecho) opciones para poder ver la implementacion de un metodo de una interfaz:

Implementors Eclipse Plug-in

Es decir, si tenemos un bean que usa una interfaz de este tipo:

public class MyClass {

private MyInterface bean; ... public void myMethod { bean.callMethod(); } }

Si hacemos clic con el boton derecho sobre "callMethod", veremos una opcion "Open Implementation" que nos permitira ver el codigo de la implementacion en lugar de ir a la declaracion del metodo en la interfaz.

]]>
http://www.lacoctelera.com/gigo/post/2007/04/04/plugin-eclipse-permite-acceder-las-implementaciones#comentarios
Maravillosa SQL para paginar resultados http://www.lacoctelera.com/gigo/post/2007/03/27/maravillosa-sql-paginar-resultados 2007-03-27T16:21:00+00:00 sql Sencilla consulta SQL para paginar resultados para base de datos Oracle:

SELECT far_id, ROWNUM AS page_position, list_position FROM
(
  SELECT articles.far_id, ROWNUM AS list_position FROM
  (
    SELECT far_id
    FROM far
    ORDER BY far_id
  )
  articles
)
WHERE list_position BETWEEN :min AND :max
]]>
http://www.lacoctelera.com/gigo/post/2007/03/27/maravillosa-sql-paginar-resultados#comentarios
Solucion al PermGen OutOfMemoryError http://www.lacoctelera.com/gigo/post/2007/03/21/solucion-al-permgen-outofmemoryerror 2007-03-21T15:32:46+00:00 java/j2ee A mi me ha pasado muchas veces que al cuarto o quinto despliegue en Tomcat, saltan excepciones del tipo PermGen OutOfMemoryError.

Gracias a mi red en del.icio.us , he encontrado una posible solucion añadiendo los siguientes parametros a la maquina virtual que ejecuta Tomcat (o el contenedor J2EE que tengas):

-XX:+UseConcMarkSweepGC -XX:+CMSPermGenSweepingEnabled -XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=128m

La explicacion en ingles en: Notes to self .

]]>
http://www.lacoctelera.com/gigo/post/2007/03/21/solucion-al-permgen-outofmemoryerror#comentarios
StringBuilder en lugar de StringBuffer en JDK5 http://www.lacoctelera.com/gigo/post/2007/03/20/stringbuilder-lugar-stringbuffer-jdk5 2007-03-20T13:02:53+00:00 java/j2ee Supongo que muchos ya sabeis las diferencias entre String y StringBuffer. Basicamente, String es sincrono y por tanto mas lento, y StringBuffer es asincrono y mas rapido. Hay mas diferencias, pero os remito a la API JDK5 .

En JDK5 hay una clase nueva llamada StringBuilder que tiene el mismo API que StringBuffer , es asincrona, pero es mas rapida. Se supone que va a sustituir StringBuffer asi que es mejor usar la nueva.

[Perdonad las faltas de ortografia, pero los britanicos no tienen acentos ni enies]

]]>
http://www.lacoctelera.com/gigo/post/2007/03/20/stringbuilder-lugar-stringbuffer-jdk5#comentarios
Retrotranslator Maven Plugin http://www.lacoctelera.com/gigo/post/2007/03/19/retrotranslator-maven-plugin 2007-03-19T17:21:42+00:00 java/j2ee Nueva version de JDK, problemas de compatibilidad con lo antiguo. Gracias a mi red en del.icio.us , he encontrado este plugin "retrotranslator" para maven que transforma clases JDK5 a JDK1.4. Gracias dahernan! Siempre ojo avizor. ;)

]]>
http://www.lacoctelera.com/gigo/post/2007/03/19/retrotranslator-maven-plugin#comentarios
Novedades en Java 1.5 http://www.lacoctelera.com/gigo/post/2007/03/17/novedades-java-1-5 2007-03-17T16:21:22+00:00 java/j2ee Hasta que he empezado a trabajar en mi nueva empresa, nunca me había dado de las novedades en el lenguaje en Java 1.5.

  1. Tipos de datos parametrizados, es decir, ahora se puede especificar el tipo de datos que contienen estructuras tales como Vector o Map.

    // Vector de cadenas
    Vector<String> v = new Vector<String>();
    v.addElement("Hola");
    String s = v.getElementAt(0);
    v.addElement(new Integer(20));// Daría error!!

    // HashMap con claves enteras y valores de vectores HashMap<Integer, Vector> hm = new HashMap<Integer, Vector>(); hm.put(1, v); Vector v2 = hm.get(1);

    Esto permite evitar el uso de castings y de autoboxing:

    Vector<Integer> v = new Vector<Integer>();
    v.addElement(30);
    Integer n = v.getElementAt(0);
    n = n+1;
  2. Mejoras en blucles. Ahora existe un nuevo for para recorrer colecciones y arrays sin usar Iterator:
    // Recorre e imprime todos los elementos de un array
    int[] arrayInt = {1, 20, 30, 2, 3, 5};
    for(int elemento: arrayInt)
    System.out.println (elemento);

    // Recorre e imprime todos los elementos de un Vector Vector<String> v = new Vector<String>(); for(String cadena: v) System.out.println (cadena);

  3. Tipo Enum.
    // Define una lista de 3 valores y luego comprueba en un switch 
    // cuál es el valor que tiene un objeto de ese tipo
    enum EstadoCivil {soltero, casado, divorciado};
    EstadoCivil ec = EstadoCivil.casado;
    ec = EstadoCivil.soltero;
    switch(ec)
    {
    case soltero:System.out.println("Es soltero");
    break;
    case casado:System.out.println("Es casado");
    break;
    case divorciado:System.out.println("Es divorciado");
    break;
    }
  4. Imports estáticos. Permiten usar métodos y propiedades estáticas sin tener que referenciar la clase específicamente.
    import static java.awt.Color;
    import static java.lang.Math;

    public class... { ... JLabel lbl = new JLabel(); lbl.setBackground(white); // Antes sería Color.white ... double raiz = sqrt(1252.2);// Antes sería Math.sqrt(...) }

  5. Argumentos variables. Ahora se puede pasar una lista de argumentos variable a una función como en C:
    // Funcion que tiene un parámetro String obligatorio
    // y n parámetros int opcionales

    public void miFunc(String param, int... args) { ... // Una forma de procesar n parametros variables for (int argumento: args) { ... } ... }

    ... miFunc("Hola", 1, 20, 30, 2); miFunc("Adios");

  6. Metainformación. Ahora se pueden añadir directivas que transmitan información a las herramientas de desarrollo tipo Eclipse, del mismo modo que @deprecated permite que el compilador muestre la palabra tachada. Por ejemplo:
    // Definición de una interfaz mediante metainformacion

    public @interface MiInterfaz { int metodo1(); String metodo2(); }

Hay muchas más novedades relacionadas con la máquina virtual y con las librerías. Te recomiendo leer este documento de donde he extraído yo la información más relevante.

]]>
http://www.lacoctelera.com/gigo/post/2007/03/17/novedades-java-1-5#comentarios
De vuelta desde Londres http://www.lacoctelera.com/gigo/post/2007/03/17/de-vuelta-desde-londres 2007-03-17T15:44:08+00:00 otros Siento mucho no haber escrito mucho este mes en el blog, pero he estado realmente ocupado.

Este mes me he mudado a Londres y esta semana he empezado a trabajar como Java Developer en Faculty of 1000 , una especie de Menéame para artículos de medicina y biología.

Aunque seguiré hablando de desarrollo web en general, será inevitable que comience a hablar más de Java y J2EE que de maquetación HTML/CSS y accesibilidad.

]]>
http://www.lacoctelera.com/gigo/post/2007/03/17/de-vuelta-desde-londres#comentarios
Test para una entrevista de trabajo en Londres http://www.lacoctelera.com/gigo/post/2007/02/27/test-una-entrevista-trabajo-londres 2007-02-27T16:34:46+00:00 otros java/j2ee Así se las gastan algunas empresas londinenses para contratar gente.

Test para una entrevista en Londres como Java Developer .

No os dejéis impresionar, no todas son tan tocap...

]]>
http://www.lacoctelera.com/gigo/post/2007/02/27/test-una-entrevista-trabajo-londres#comentarios