May 12

log4j 1.2.15

 

Normalmente en mis proyectos maven añado el log4j, siempre la versión 1.2.12. No por ningún motivo en particular. Símplemente era la versión disponible la primera vez que lo añadí a un proyecto maven y luego ha prevalecido el copy-paste de esa dependencia de un proyecto a otro.

El otro día cree un proyecto en casa y no tenía ningún sitio de donde copiar esta dependencia, así que me fuí a internet y busqué cómo ponerla. Puse la 1.2.15, que es la última que encontré disponible para maven.

Me pongo a compilar con maven, a generar el proyecto para eclipse y … ¡¡ Sorpresa !!. Da fallo. Busco el motivo y resulta que entre los jar que no puede bajarse, está el javamail, el activation.jar y algún otro más de los de SUN. Efectivamente, SUN no permite distribuir sus jar, por lo que oficialmente no se puede hacer. En los repositorios maven que hay por el mundo, no están estos jar de SUN, así que maven no se los puede bajar. Hay que bajárselos a mano y ponerlos en tu repositorio local de maven.

Y digo yo… ¿necesito javamail para log4j? Y aunque sea así, ¿voy a usarlo?. Pues más bien no. No tengo ningún interes en recibir por correo el log de mi aplicación y tampoco tengo ningún enemigo al que odie lo bastante como para mandárselo. Mejor dicho, sí lo tengo, pero lo que no tengo son ganas de quedarme de patitas en la calle.

Creo que esta vez se han pasado un poco. Entiendo que un momento dado, ante un error crítico, alguna aplicación crítica quiera enviar un correo a alguien. Pero, ¿es con un log.error(…) la mejor forma de hacerlo?. Desde luego puede ser cómoda en vez de usar javamail directamente, pero ¿tienen que cargar todas las aplicaciones que quieran un uso normal de log4j cargar con javamail?. A mi, desde luego, no me gusta.

Y aquí es donde llegamos a un punto donde siempre he tenido mis dudas. Por un lado la lógica y la elegancia me dicen que debería hacerse algo como log4j-core.jar con lo básico de log4j, es decir, sacar los log por pantalla o por fichero y poco más. Luego, deberían hacerse otros jar de amplicación, como log4j-mail.jar, log4j-bd.jar, etc, de forma que cada uno cargue sólo con lo que necesita. Sin embargo, la pereza me pediría que hubiera un único log4j-con-todo.jar y despreocuparme de andar buscando los que debo. Si me sobra el 90% del jar, da igual, no pasa nada.

Y esas dudas son las que siempre me corroen en el trabajo. Ante un proyecto gigante… ¿hacemos muchos jar pequeñitos por temas, de forma que en otros proyectos podamos llevarnos aquellos mini-jar que necesitamos? o por el contrario ¿hacemos un mega jar con todo y si un proyecto no necesita parte de él no pasa nada?

En la primera opción, al empezar un proyecto, debemos empezar a elegir jars que necesitamos y a coger también los jar de los que dependen esos jar. Afortunadamente maven nos ayuda en el proceso. Sin embargo, la segunda opción es menos elegante pero infinitamente más cómoda. Cuando empiezo el proyecto, me copio el mega-jar-que-lo-tiene-todo y a trabajar, sin más complicaciones.

¿Tú qué eliges?. ¿Elegancia o pereza?

May 11

Ubuntu Hardy Heron: Mi gozo en un pozo

 

Bueno, pues parece que canté victoria demasiado pronto. Aunque conseguí hacer funcionar bien mi Ubuntu Hardy Heron con la tarjeta gráfica ATI y Compiz, sólo fue un espejismo. No sé muy bien si se debe a que se fue la luz y se cayó de golpe el linux, o si símplemente al apagar y reiniciar. El caso es que al arrancar se queda la pantalla negra. Si arranco en recuperación de errores y reconfiguro el servidor de X, arranca, pero no puedo entrar en mi usuario de administración.

Investigando, descubro que el usuario normal sí entra, pero porque no tiene permisos para arrancar no sé qué (lo veo en el fichero de .xsesssion-errors, mientras que el usuario de administración sí los tiene, arranca lo que sea y se le cae la sesión, por lo que vuelta a carátula.

Si desinstalo compiz y desinstalo el driver específico de la ATI, entonces todo va de maravilla. Si instalo el driver de la ATI, linux símplemente no arranca, se queda la pantalla negra. Si pongo compiz, el administrador se sale o se le queda la pantalla blanca. En fin, no tengo ganas de seguir peleando con ello, al menos de momento. Fuera el driver de ATI y fuera Compiz. Tengo un escritorio normalito, pero al menos puedo trabajar.

Por cierto, Ubuntu Hardy Heron viene con Firefox 3.0 Beta. Pues ya le estoy viendo pegas, supongo que son de Firefox. El caso es que según escribo este post, cada vez que aprieto <INTRO> para cambiar de párrafo, se me mueve la barra de scroll vertical del navegador, por lo que mi caja de texto cada vez está más abajo o más arriba. Tras cuatro o cinco <INTROs>, tengo que tocar la barra de scroll para situar mi caja de texto en un sitio visible, ya que tiene a irse fuera de la pantalla.

No me pasa sólo con wordpress, sino también con otros editores de foros y demás. Así que ya me veo desinstalando este Firefox para poner el antiguo.

Otra pega más de este Firefox Beta es que de momento no admite la barra de google (o la barra de google no admite este Firefox, me da lo mismo). El caso es que no puedo ponerla y echo de menos algunas de sus funcionalidades, como ver el pagerank de la página que estoy visitando o ir directamente a las palabras que he buscado en google.  O el tooltip de traducción a español que sale cuando pones el cursor sobre una palabra inglesa.

Y todo esto me hace pensar un pequeño detalle. Hay mucha gente, entre los que me incluyo, (e incluyo por ejemplo al Dr Max Glaser), que dicen que Linux es mucho mejor que Windows y queremos pasarnos definitivamente a Linux y olvidarnos de Windows. Pero muchos no lo acabamos de hacer porque Linux sigue teniendo sus faltantes, sus problemas y sigue sin ser todo lo fácil que debiera. Ojo, no digo que si sabes un huevo, tienes mucha paciencia y te dedicas a ello no puedas afinarlo, pero de momento no es una cosa fácil al alcance de cualquiera.

¿Por qué queremos entonces pasarnos a linux? ¿Símplemente por odio a Microsoft? ¿Símplemente porque hemos oido que linux es mejor?. La experiencia de los usuarios normales no da la impresión de que linux sea mejor, desde luego. He tenido varias distribuciones de linux desde hace muchos años, más de diez: Mandrake, Red Hat, Suse, Ubuntu, y NUNCA, NUNCA he tenido un linux que no se me quedara colgado de vez en cuando o me diera problemas o en el que tuviera todo mi hardware bien instalado o en condiciones de uso (mi nuevo ubuntu Hardy Heron sigue sin dejarme montar cómodamente, ni de cualquier otra manera, los pen drive, problemas de permisos con los que tendré nuevamente que pelearme). Según mi experiencia, la realidad y el motivo por el que no nos pasamos totalmente a linux es

  • Queremos linux porque nos gusta el mundo del software libre y le tenemos algo de tirria a Microsoft. Es decir, ninguna razón práctica y real de peso, salvo que seas un extremista.
  • Linux da muchísimos más problemas que Windows y salvo que seas una persona con cierta experiencia en administración linux y tengas paciencia para afinarlo, no lo vas a tener 100%, salvo que suene la flauta y te hayas comprado un ordenador 100% compatible linux.

Posiblemente, linux sí sea mucho mejor y más fiable como servidor para una red (servidor web, de disco o lo que sea), pero es algo que un usuario normal como yo no tiene en su casa. No veo ningún motivo real y práctico para tener ubuntu instalado… y sin embargo ¡¡lo tengo!!. No quiero quitarlo.

En fin, supongo que es cuestión de tiempo. Supongo que Ubuntu ira bien con las tarjetas ATI cuando salga la distribución Ubuntu Super ATI y mi tarjeta esté obsoleta y justo esa distribución no la soporte.

May 10

Actualización a Ubuntu 8.04 Hardy Heron

 

Ayer decidí actualizar mi versión de Ubuntu Gutsy Gibbon por la nueva Hardy Heron. Como siempre, una odisea. Debo tener un ordenador la mar de raro porque no hay forma de que funcione todo bien a la primera.

Hago la actualización lanzando el comando

sudo update-manager -c

me pide la password de root y me saca la lista de actualizaciones indicándome arriba que hay una nueva versión disponible. Le digo actualizar, espero unas cuantas horas (tardó un montón en bajarse todo) y actualizo. Por supuesto, el sistema se rebota.

La primera pega. Mi password de usuario tiene caracteres especiales y no consigo entrar. El teclado está cambiado y no se escriben los caracteres que yo quiero. Así que a probar hasta que doy con la clave y consigo entrar.

Segunda pega, pantalla blanca y no sale el escritorio. Está ahí, porque veo el cursor cambiar de forma según lo paseo por encima y cuando "pincho a ojo" sobre donde supuestamente están las cosas, veo que el sistema parece que responde. A investigar qué pasa y sobre todo, cómo arreglarlo.

Lo primero, supongo que es cosa de la configuración de usuario, puesto que la carátula de entrada al menos sale. Así que con "Ctrl-Alt-F2" me paso a una consola de texto, entro como administrador y creo un nuevo usuario. Con "Ctrl-Alt-F7" vuelvo al modo gráfico, entro con el nuevo usuario y funciona bien. Va quedando acotado el problema, parece que es la configuración del antiguo usuario.

Para arreglar lo del teclado en la carátula de entrada y ver de paso si se arregla la configuración del usuario antiguo, decido reconfigurar el servidor de X. comando

sudo dpkg-reconfigure xserver-xorg

Nuevamente me pide la password de administrador y luego empieza a contarme todo el rollo de configuración de idioma y teclado, para que vaya metiendo. Tras rellenarlo todo y reiniciar el servidor de X con "Ctrl-Alt-Backspace" ya parece arreglado lo del teclado. Sin embargo, el antiguo usuario sigue dando pantallazo blanco.

Al final, recordando que intenté instalar beryl en su día, me meto por los directorios .gnome2, .gconf y me cargo todo lo que no se parece al usuario recien creado y todo lo que huela a beryl. También me cargo los directorios .beryl y .berylmanagerrc. Vuelvo al modo gráfico, entro y esta vez si va bien, usuario arreglado. Sí, ya sé que es un método chapuza de ensayo y error, pero al menos salió.

Finalmente, la última "peguilla". Compruebo que por defecto Compiz está funcionando y tengo los efectos de escritorio de ventanas "blandas" y cubo que da vueltas (tras habilitarlos), pero que van lentos como ellos solos. Así que voy a "sistema"->"administracion"->"controladores de hardware" y veo que el driver específico de mi tarjeta ATI no está habilitado. Lo habilito y finalmente va todo de maravilla.

Total, una tarde de lluvia entretenido en casa.

May 06

Clase Desktop en Java 6

 

Gracias a este tema del foro de java, he descubierto la clase Desktop de Java 6. Esta clase permite abrir e imprimir ficheros con la aplicación por defecto que indique el sistema operativo. También permite lanzar el navegador por defecto con una URI determinada o el cliente de correo.

Un código tan tonto como este

Desktop.getDesktop().open(new File("c:/pingucd/readme.txt"));

en windows abrirá el notepad con el fichero readme.txt.

Interesante y simplifica bastante algunas cosas.

May 01

Python con MySQL

 

Hay una tontería de la conexión de python con MySQL que me ha llamado la atención y aprovecho para comentar aquí. El tema es que según obtengamos el cursor de la conexión para hacer las consultas, podemos acceder a los resultados de una manera o de otra.

Si obtenemos el cursor de esta manera

conn = MySQLdb.connect (….)
cursor = conn.cursor()

una vez que hagamos una consulta y obtengamos una de las filas resultado, debemos acceder a cada uno de los campos usando un índice de un array

cursor.execute ("select * from tabla")
fila = cursor.fetchone()
# para acceder al primer campo
print fila[0]  

Sin embargo, al obtener el cursor podemos decir que queremos que las filas sean dictionaries, en vez de tuplas, de manera que podemos acceder a los campos usando el nombre del campo, en vez de un índice. Para ello, basta con obtener el cursor de esta manera

conn = MySQLdb.connect (…)
cursor = conn.cursor(MySQLdb.cursor.DictCursor)

y así podemos acceder a los campos a través de su nombre

cursor.execute("select * from tabla")
fila = cursor.fecthone()
# para acceder a uno de los campos
print fila["nombre_columna"]

Una tontería, pero estoy acostumbrado a java y a C++ y no a lenguajes tan flexibles.