15 diciembre 2006

Continuará...

Este blog continúa en ....



Blogs varios

Por culpa de rfilgueiras, acabo de instalar wordpress en mi dominio. Ando con las dudas de si pasarme o no a ese blog y dejar este. Allí comento, aparte de las ventajas del nuevo blogger sobre el antiguo, las dudas y los no motivos para dejar este y pasarme a aquel.

Ventajas de pasar el blog a mi dominio:
  • El "orgullo" de tener el blog en tu dominio
Pegas:
  • El espacio en disco de mi dominio es limitado. Con el tiempo (este blog lleva ya dos años en marcha) seguro que lo acabo llenando y tengo que ampliar la cuenta.
  • En blogger no tengo problemas de mantenimiento. Alguien lo hace por mí.
Hala, rfilgueiras, te dejo que me convenzas...

14 diciembre 2006

Interface de usuario curiosa

En Mind.net veo un post en el que hace referencia a una interface curiosa hecha con java.

Básicamente es un mapa de estados unidos en el que al ir escribiendo el código postal deseado, va iluminando las zonas correspondientes a los posibles códigos postales que tenemos hasta el momento. Si pulsamos 1, ilumina, por ejemplo, uno de los estados. Al pulsar la siguiente cifra, va apagando zonas y así hasta llegar a la zona concreta del código postal entero.

Es una idea bastante curiosa.

Ajedrez en javascript

Veo en Yo Programador un post sobre un juego de ajedrez en javascript. Ocupa sólo 5k y aunque no valida todas las jugadas como debiera, la verdad es que juega un poco y es asombroso lo que se hace con tan poco código.

13 diciembre 2006

Una curiosidad de rmi

Una cosilla de rmi que está bien pensada, que ha probado un compañero de trabajo y le ha funcionado.

Cuando un cliente de rmi pide un objeto remoto a un servidor de rmi, en realidad hay dos clases. Por un lado está el objeto real/remoto en el servidor. Por otro, el cliente tiene un objeto stub que representa al objeto real/remoto. Cuando se llama a un método del objeto stub, este llama a través de red al método del objeto real/remoto en el servidor, espera su resultado y lo devuelve.

Pues bien, aquí la curiosidad. Si obtenemos dos veces el mismo objeto remoto, tendremos dos objetos stub distintos. Si el servidor recibe dos veces el mismo objeto parámetro remoto, tendrá dos objetos parámetro stub distintos. Sin embargo, le método equals de esos dos objetos stub, devuelve true. De alguna forma, el equals "sabe" que los dos objetos stub representan el mismo objeto remoto y devuelve true.

equals clases stub

Compiz

Por casualidad he descubierto Compiz. Aunque había oido hablar de ello, no lo había visto y la verdad es que es alucinante las cosas que se inventan.

Compiz es una especie de añadido para el escritorio de linux-suse. Con él se pueden hacer cosas como esta:

12 diciembre 2006

Ono sigue haciendo de las suyas

Esta mañana, nuevamente, sin internet. No sé cuánto tiempo llevaba desconectado, pero afortunadamente se restableció la conexión a los pocos minutos de encender el ordenador. Sigo esperando que estén haciendo algún tipo de mantenimiento y esto no sea la tónica habitual. Hasta ahora no pasaba, al menos con tanta frecuencia.

11 diciembre 2006

Más de ONO

Esta mañana otra vez sin internet, desde las seis de la madrugada, hora a la que encendí el ordnador, hasta las 7 y media, hora en que lo apagué. Este fin de semana largo ha habido, que yo sepa, tres cortes de internet con ONO a esas horas. Espero que sea puntual, porque tampoco ando muy convencido con el resto.

08 diciembre 2006

ono

Los de ONO un pequeño desastre, al menos en la zona de Alcalá en la que yo vivo.

Internet

En dos meses escasos que llevo con ellos, ya he tenido dos cortes largos. No sé exactamente cuánto tiempo, porque acabé apagando el ordenador y a otra cosa. El caso es que los cortes fueron a horas intempestivas de la madrugada, sobre las cinco, que quizas piensan es buena hora para labores de mantenimiento, pero a los que nos caemos de la cama habitualmente nos molestan un poco.

Televisión

El 95% del tiempo va bien, pero hay ratos largos en que es imposible verla. Empiezan a dar problemas de falta de señal, pixelado de imagen, incluso pérdida total de imagen durante unos segundos y sonidos entrecortados. Cuando le da por esto, está así un buen rato, como una o dos horas. Aproximadamente le pasa una vez por semana, pero no en un horario ni día fijo.

Teléfono

Bien, salvo que todavía no me han dado de baja de telefónica. Supuestamente se encargan ellos, pero llevo dos meses pagando dos teléfonos, el de ellos y el de telefónica. Unos quince días después de darme de alta con ellos llamé para ver cómo iba la baja con telefónica. Me preguntaron si había rellenado ya los papeles solicitando dicha baja. ¿Qué papeles?. No me dieron ni me dijeron nada en el momento de darme de alta, así que quince después y por haber llamado yo, me los mandaron por correo. Otra semana más de espera a que llegaran. Los reenvié por correo y tres semanas más tarde que todavía "dicen " que no los han recibido, que me envían otros. Estoy en espera de ellos y llevo dos meses pagando dos teléfonos.

Comentando con otros vecinos y usuarios de ONO, todos han tenido este tipo de problemas. Mi vecino de arriba seis meses hasta que consiguió que le hicieran la baja de telefónica. Un compañero de trabajo de Alcalá me comenta sobre los cortes de internet. Un amigo del edificio de enfrente sobre los pixelados de televisión.

En fin, se ve que ONO Alcalá no va demasiado bien...

05 diciembre 2006

Sin diseño

Ando ahora liado, empezando un nuevo proyecto en el trabajo, algo ambicioso porque pretendo hacer algo que sirva para varios proyectos.

El tema del diseño me desborda y puedo pasarme pensando en UML y papeles un montón de tiempo para al final posiblemente llegar a un diseño más general y más complicado de la cuenta. También estoy bastante seguro de que ese diseño luego no sirve para nada o, al menos, cuanto más código se vaya haciendo, menos se parece al diseño.

Así que he decidido no hacer grandes diseños. Voy a tratar de seguir algunas de las filosofías de las metodologías ágiles, programación extrema y demás.

Trataré de ponerme hitos (historias de usuario, casos de uso o cómo queramos llamarlos) cortos y trataré de con un diseño mínimo, resolver esos hitos de la forma más rápida y directa posible en el código. Eso sí, pensando en rehacer/modificar el código ya hecho a menudo, según se vayan añadiendo hitos, trataré también de hacer clases de test unitario, con JUnit o similar.

Desde luego, será más divertido que el pasarse pensando en el diseño varios días, semanas o meses, con la duda continua de si se te olvida algo o no, si será lo suficientemente general o no.

Me siguen quedando las dudas de si haciéndolo de esta manera obtendré algo lo suficientemente general para varios proyectos, pero al menos esa preocupación no será el agobio de pensar en abstracto, sino agobio de cosas por (re)hacer en el código. Si el rehacer código se hace desde el principio, poco a poco según se vayan planteando las necesidades con los nuevos hitos, espero que tampoco será demasiado gravoso.

De todas formas, esto es lo que siempre acabamos haciendo, ya que los diseños que se hacen al principio no se siguen ni siquiera el primer día que se empiza a programar.

Ya iré contando la experiencia....

03 diciembre 2006

Editor simple en java

En mis apuntes de programación acabo de publicar un tutorial para novatos sobre cómo hacer un editor de textos simple en java.

No es nada del otro mundo, sólo puede salvar y cargar de fichero y las opciones de buscar, cortar, copiar y pegar. En él simplemente se aprovecha para explicar algunos ejemplos de cómo leer y escribir ficheros, hacer copy-paste, el JFileChooser, JOptionPane, etc. Todos ellos con un ejemplo tonto de uso, sin meterse en profundidades.

Si es que cuando uno se cae de la cama todos los días a las 5 de la madrugada, algo tiene que hacer para no aburrirse...

01 diciembre 2006

Bugzilla es divertido

Como comenté anteriormente, instalé bugzilla en el trabajo y lo hemos puesto en marcha. A la hora de repartir bugs, es entretenido en algunos casos ver cómo se lo toma la gente que resuelve las incidencias. Este es el comentario literal en uno de los bugs

te cambio 3 de complejidad ciclomatica por una de error de consola que la tengo repe.

Al final los bugs son como los cromos, se cambian los "repes" y si no me gusta el mio, te lo cambio por el tuyo.

28 noviembre 2006

Colaboraciones en la Chuwiki

Quiero agradecer un par de colaboraciones interesantes en la Chuwiki.

Por un lado, Pete ha añadido un pequeño tutorial de Hola Mundo con J2EE y JBoss, aunque de momento está sin terminar, lleva buen ritmo.

Por otro, Walter ha añadido la forma de inicializar los gráficos con graphics.h de Borland C++ y un resumen de las funciones gráficas que nos ofrece este compilador.

Así que gracias a ambos, les animo a seguir metiendo más cosas y animo a cualquiera que quiera colaborar a seguir el ejemplo. Cuantas más cosas metamos entre todos, más gente podrá ver resueltas sus dudas y problemas.

25 noviembre 2006

Diseño del software

La verdad es que cada vez estoy más desilusionado con el diseño de software, el uml, metodologías de desarrollo y todo lo demás.

Es cierto que se necesita pensar antes de ponerse a codificar, tener claro que se quiere hacer, pensar posibles soluciones y elegir la mejor. Lo que cada vez me parece perder más el tiempo es escribir todo eso en papel antes de codificar, hacer diagramas uml, de clases, de secuencia, etc.

Ojo, sí es conveniente de vez en cuando hacer un diagrama, pero yo creo que basta con uno informal y con poco nivel de detalle, lo suficiente para que nos entendamos los programadores.

Lo que no veo en absoluto es meterse a un diseño detallado, metiéndose a nivel de clases y métodos. El porqué es sencillo. Vamos a perder mucho tiempo y en cuanto llevemos un par de días tirando código, van a empezar a salir todas las cosas que no pensamos en el diseño y al final el código no se va a parecer en nada al diseño. Hasta que no hacemos el código, es bastante imposible prever todos los detalles, el diseño detallado sirve más bien de poco.

También el cliente en general suele ayudar bastante a que hacer diseño detallado sea una pérdida de tiempo. Habitualmente el cliente no sabe lo que quiere y cambia de opinión sobre la marcha. Bastan un par de cambios de idea elegidos adecuadamente para que el diseño detallado (y el no tan detallado) se vaya a la porra.

Lo que veo más útil con mis compañeros de trabajo es repartirnos el trabajo y dejar claras las interfaces entre nosotros, bien sean métodos de las clases, mensajes de sockets o como sea que se comunique el sofware que hacemos. A veces basta con decir los métodos o mensajes y que se espera que haga la clase cuando recibe el mensaje o la llamada al método. Otras veces es necesario un diagrama de secuencia para definir una interacción en el tiempo algo más compleja. Una vez hecho esto, que nos facilitará la integración, basta con que cada uno programe a su bola su trozo de código.

Cada vez veo más útil el tema de refactorización de código. Al igual que es imposible diseñar con detalle, también es imposible hacer bien el código a la primera. Es importante tomarse con frecuencia pequeños periodos de tiempo para arreglar el código ya hecho, alternando código nuevo con arreglos de código existente. Además, los IDEs actuales, como eclipse, vienen con montones de opciones de refactorización de código. Basta seleccionar un trozo de código para separarlo en un método aparte, para llevarse un atributo o un método de una clase a su clase padre, etc.

En resumen, que la forma que veo más útil de desarrollo de software es pensar un poco y hacer los diagramas justos para que todos los programadores sepamos que se espera de nuestro código y cómo interactua con el de los demás. Luego cada uno piensa su código y se pone a hacerlo. Es importante arreglar el código sobre la marcha según se vaya embarullando.

Me queda un tema que todavía no tengo claro, que es el de cómo conseguir que el código de una persona sea reutilizado por otra. No sirve poner documentación del código accesible ni comentar. La gente simplemente no busca ahí cuando necesita hacer algo, salvo que sea algo realmente complicado. Aunque todavía no hemos llegado a ello, cada vez me estoy conenciendo más de que la forma mejor para conseguir esto va a ser la programación en parejas típica de la programación extrema. Quizás también las reuniones diarias de unos minutos entre varios programadores para contarse qué están haciendo, qué problemas tienen, qué podrían hacer en común para ambos.

23 noviembre 2006

syncback

Como siguiente paso a la compra del disco duro externo USB, me he bajado syncbak. Es un programa de copias de seguridad con un montón de opciones, entre que se incluyen unas opciones interesantes de sincronización de directorios.

Se le dicen los dos directorios, por supuesto en mi caso uno en el disco duro interno y otro en el externo, y se le dan las opciones de copia que se desea. Pueden ser cosas como esta:
  • Lo que está en origen que no está en destino, copiarlo.
  • Lo que está en destino que no está en origen, copiarlo o ignorarlo. Si elegimos copiarlo, cada vez que borremos un fichero en origen y ejecutemos el programa, se nos restaurará.
  • Si el mismo fichero está modificado en ambos lados, quedarse con la versión más moderna.
  • etc
Se pueden crear varias tareas de este estilo con distintos directorios, por ejemplo, mi directorio de fotos de cámara digital, mi directorio con la página web, etc. Estas tareas se pueden lanzar a mano o programarlas para que se hagan a cierta hora.

Resumiendo, una cosa útil para tener copias de seguridad en dos discos, poder restaurar, etc.

21 noviembre 2006

Editor de textos

Estoy haciendo en plan de muestra para la página web un pequeño editor de textos en java. Simplemente una caja de texto para escribir y opciones de menú para salvar fichero, cargar fichero y buscar una cadena de caracteres en el texto escrito.

Recuerdo hace muchos, muchos, muchos años, en los tiempos del basica (o gwbasic) que también hice en varias ocasiones un editor de textos. ¡Vaya diferencia!

Antes, con el basica, me preocupaba yo de todo. Controlar la posicion x,y del cursor, capturar las teclas para escribirlas, capturar las teclas de borrado para borrar, las flechas para moverme, etc, etc. Manejaba arrays y arrays de caracteres y variables con posiciones dentro de esos arrays y me dedicaba a mover arrays de caracteres de un sitio a otro.

Ahora, con java, no hay que preocuparse de cómo hacer las cosas. El problema principal con java es pelearse con la API, para encontrar el método o la clase que hace lo que tú quieres hacer, porque es seguro 100% que hay un método o una clase que hace lo que quieres hacer, pero no sabes cómo se llama. Es más, hay más métodos y clases que hacen más cosas que las que posiblemente quieras hacer o te imagines siquiera que puedes querer hacer en toda tu vida.

Antes querías hacer poca cosa y con eso ya tenías trabajo para varios días, haciéndolo. Ahora quieres hacer muchas cosas y tienes trabajo para varios días, buscando quién lo hace.

20 noviembre 2006

Mis cacharros y yo

Nada, que al final el disco duro externo que me compré un asquito. Seguía fallando, aunque parece que en el otro puerto USB se portaba algo mejor.

Esta tarde fuí al Media Market a cambiarlo y por si acaso, cojí otro de otra marca. El primero era un iomega de 320 Gigas, 120 €. El que he cogido ahora es un LaCie de 250 Gigas, 100 € menos un céntimo. Este parece que va bien, al menos en dos horas dándole caña no ha fallado.

Por cierto, que contándole mis penas con los cacharros a un compañero de trabajo, más o menos le dije: "este fin de semana me he comprado un móvil y un disco duro. El disco duro me falla y voy a cambiarlo esta tarde. El móvil bien, pero es porque no lo he mirado". Se lo paso para que lo vea, le echa un ojo, me mira luego a mi y dice -"Pone error en tarjeta". "No, si ya te dije que no lo había mirado", contesté.

Menos mal que se arregló apagando y encendiendo...

La informática es un asco o yo soy un pupas

Mi historia con los cacharros, informáticos sobre todo, es una verdadera odisea.

El primer ordenador que compré tuve que devolverlo porque no le iba el puerto serie. Me trajeron otro y era una tecla del teclado la que no iba. El siguiente no le funcionaba la toma del micrófono en la parte delantera. En otra ocasión se me fué al garete la placa madre y tuve que cambiarla.

En cuanto a CD/DVD, ya se me han fastidiado un lector de DVD y un grabador de CD. Sé que tienen una vida limitada, pero en ambos casos me ha parecido más bien una escasez de vida.

El nero se me queda colgado a veces cuando quiero grabar un DVD. Por supuesto, se carga el DVD. El Dreamweaver también da fallos de vez en cuando y hay que cerrarlo.

Y lo que más me cabrea en estos momentos, el disco duro que compré ayer me ha dado unos problemas raros, estilo

"Windows no pudo guardar todos los datos para el archivo D:\\$Mft. Se perdieron los datos La posible causa de este error puede ser un error en el hardware de su PC o en la conexión de red. Intente guardar este archivo en otro sitio.

Lo de $Mtf puede cambiar por el fichero que esté intentando copiar en el momento.

Mirando por internet veo que este problema pasa, no queda claro si es del disco duro o de windows, pero tiene pinta que es algún problema de tiempos con el que windows es muy exigente.

De momento parece que se ha solucionado metiendo el disco en otro puerto USB, pero desde luego ya no lo uso tranquilo. Además ese aviso de "se perdieron los datos" no es como para dejar tranquilo a nadie.

Hay ocasiones que me apetece tirar el ordenador por la ventana y dedicarme al pastoreo de ovejas. Aunque quizás tampoco sea buena idea, seguro que los pastores de ahora tienen móvil y palm contador de ovejas ...

18 noviembre 2006

La casa por la ventana

Esta mañana, de compras, la casa por la ventana. Un móvil entero para reemplazar la batería estropeada del móvil viejo. Un disco duro externo de 320 Gigas para hacer copias de mis fotos y videos del disco.

En realidad el disco duro externo tenía ganas de él precisamente para copias de las fotos de la camara digital y de los vídeos VHS de los niños que estoy pasando a DVD. Me daba "cosa" tener una única copia en un disco duro. Las fotos no me dan para un DVD y los videos me ocuparían varios DVD. En fin, un pequeño rollo.

Al instalar ubuntú, vi que iba bastante bien, aunque un pelín lento. Tenía una partición antigua de 2 Gigas en la que hace mucho instalé un linux antiguo. Al instalar ubuntú ese espacio se le queda chico y 256 megas de swat teniendo 256 megas de memoria también se me antoja poco.

Ahora, con el disco externo y el principal en varias particiones, a ver si soy capaz de vaciar una de ellas, de 80 Gigas, para dejársela totalmente a ubuntú. Como dije en otra ocasión, soy nostálgico de unix y voy a intentar pasarme a él. Posiblemente tenga de dejar windows para ciertas cosas, pero trataré de usar linux y software gratuito lo más que pueda.

Foro java de eMagister

Los de eMagister han contactado conmigo para hacerme "experto" de java en su foro de java.

En principio yo no me comprometía a nada, simplemente a visitar y contetar en el foro cuando tuviera tiempo. Como eso es algo que hago habitualmente, no ese foro, pero sí en otros, pues no había problema por mi parte y dije que por mi parte.

Serpiente Chuidiang La primera pega se presenta cuando me piden una foto mía para poner allí. Les propuso poner un logo, este de la izquierda en concreto, pero me dijeron que no, que podían superponerlo encima de la foto, pero que mejor la foto.

Como de todos es sabido que soy un poco feo, pues dije que no quería enviar foto. No pasó nada. Me hicieron experto igualmente y me pusieron en su lugar una silueta genérica.


careto chuidiangVaya, eso es el segundo problema. Antes estaba dado de alta en ese foro como usuario normal y tenía puesto mi careto, el de la izquierda, que es parece más a mí que la silueta que ellos me han puesto. Al menos tengo ojos. Ahora tengo la silueta de ellos y no puedo cambiarla otra vez por esto (el enlace de "Datos personales" no funciona).

Así que sigo visitando el foro y contestando, pero al ser "experto" no puedo poner la imagen que yo quiera mientras que los afortunados usuarios no expertos del foro sí pueden.

16 noviembre 2006

Curiosidades de java

No hace mucho, viendo código java por internet, me encontré con una expresión como esta:

if ( "".equals(variableString) )
...

Lo primero me llamó la atención lo curioso de ella. Se puede poner una cadena entre comillas... y llamar a métodos de la clase String con ella.

Luego, puestos a mirar el porqué se hace esa curiosa llamada cuando la forma aparentemente habitual es esta otra

if ( variableString.equals("") )
...

se me ocurrió el posible motivo. Muchas veces esa variableString nos viene como parámetro de un método o vete tú a saber de dónde, por lo que puede ser null. La llamada a equals() dará una excepción en ese caso. Para evitarlo, el if se hace más complejo

if ( (variableString != null) && (variableString.equals("")) )
...

debiendo, además, fiarnos de que el compilador va a ser listo y cuando comprueba que la primera condición no se cumple no se molesta en comprobar la segunda. Normalmente el compilador es listo y lo hace así. De todas formas, para no tener que fiarse, el if todavía es más peor

if (variableString != null)
if (variableString.equals(""))
...

Sin embargo, haciéndolo con el "".equals(variableString), se evita esa comprobación adicional de que no sea null y esa confianza ciega en el compilador.

El bazar de java

En el trabajo, en una parte de la aplicación, construimos un árbol (un JTree de java) de cosas muy serias e importantes consultando una base de datos y lo mostramos en pantalla.

Hace poco hicimos unas pequeñas modificaciones y en unas pruebas construimos un árbol grande, con muchos elementos. Las modificaciones hacían además que las consultas a base de datos fueran más lentas de lo normal. El caso es que el árbol tardaba unos quince segundos en cargarse.

¡Sorpresa!. Mientras se carga el árbol de base de datos, el JTree en vez de vacío, mostraba esto

JTree por defecto de java
Resulta que ese "hipermercado" de cosas es lo que muestran los JTree de java por defecto mientras nadie les diga lo contrario. En nuestras pruebas de la aplicación se mostraba eso durante unos quince segundos, hasta que era reemplazado por las cosas serias e interesantes de los jefes y clientes serios (con bigote).

Por supuesto, el cabreo-cachondeo de los mismos fué mayúsculo.

11 noviembre 2006

Linux Ubuntu

Como siempre he trabajado en unix (solaris por más señas) y lo de windows es algo relativamente nuevo (ya unos años, pero no tantos como en solaris), soy un nostálgico de los sistemas unix.

Siempre he tenido en casa instalada alguna versión de linux: red hat primero, mandrake después y finalmente suse. Sin embargo, nunca me habían satisfecho del todo. El "feeling" (que diria los ingleses) nunca era bueno del todo. El sistema de ventanas no era tan elaborado como windows o el de solaris. El movimiento de ratón no me convencía. La instalación de algo nuevo siempre me daba quebraderos de cabeza, siempre he sido programador, nunca administrador. A pesar de toda la fama de linux, tanto red hat, como madrake como suse se me quedaban colgados en ocasiones, posiblemente por culpa de algo de mi hardware.

Sin embargo, sigo siendo nostálgico de los sistema unix y, fiel a mi nostalgia, acabo de instalar ubuntu. Lo primero que me ha maravillado es la facilidad de instalación. No me ha preguntado nada, salvo cuatro tonterías, como idioma, ciudad en la que estoy por aquello de la hora .... y las particiones del disco duro. Bueno, eso de las particiones no es ninguna tontería. O sabes lo que haces o puedes montar un buen estropicio. Afortunadamente, eso de las particiones es de lo poco que controlo en linux. Por no preguntar, no pregunta ni qué usuario quieres para root. Bueno, sí pregunta que usuario quieres y supongo que ese es el root, porque no hay otro.

Listo, funciona todo a la primera y sin hacer nada: sonido, internet, los discos de windows ya montados, etc, etc. Además, el ratón y las fuentes de letras me parecen correctas.


Seguiré una temporada con él a ver como va la cosa.

09 noviembre 2006

MiArroba

Navegando, he descubierto http://miarroba.com/

Es este sitio te das de alta y te dan un montón de cosas: página web con 500 megas, transferencia ilimitada, php y mysql, blogs, foros para que crees y administres tú mismo, etc, etc.

Eso es lo bueno. Lo malo es que va algo lento, tiene demasiada propaganda, aunque en tu foro y tu blog no meten más que un banner arriba del todo. La otra pega es que el firewall me avisa de vez en cuando que "ha prohibido acceder a mi ordenador desde el sitio miarroba.com". También te dan muchas cosas de publicidad, para que recogas direcciones de correo y se las mandes, etc, etc.

En fin, dan mucho a cambio de publicidad. De todas formas y para probar qué tal he abierto un blog, por supuesto también de programaión y un foro de java, C++ y php.

El blog no creo que crezca mucho, puesto que prefiero seguir escribiendo en este. En cuanto al foro, lo visitaré de vez en cuando para ver cómo va, pero tampoco pienso hacerle demasiada propaganda.

08 noviembre 2006

Continuum

Continuum es otra herramienta de gratis similar al CruiseControl, de esas que están pendientes en un proyecto de si alguien mete algo en CVS (o subversion o lo que tengamos) y lo saca, lo compila y envía un correo avisando automáticamente.

Aunque no he hecho demasiadas pruebas, la he instalado para ver qué pinta tiene. Desde luego de aspecto me gusta más que CruiseControl.

En primer lugar la instalación es mucho más sencilla. En CruiseControl tienes que andar copiando y creando directorios a mano, con lo que te lees el manual para ver qué es lo que tienes que hacer, o no hace nada. Continuum es simplemente desempaquetar en un sitio y ejecutar.

Continuum crea un usuario administrador que desde el mismo navegador puede añadir nuevos proyectos, eliminarlos y demás. Los demás usuarios pueden ver los resultados de la compilación y hacer compilaciones. En CruiseControl toda la administración se hace desde un fichero .xml, en el que ahora tengo varios proyectos y en el que tengo varios bloques muy similares repetidos (una vez por proyecto). Unicamente cambia el directorio, el nombre del proyecto y poco más.

Sin embargo hay una cosa que no me ha gustado de Continuum. Si el proyecto es maven, Continuum pide que en el pom.xml esté la información necesaria para extraer el proyecto de CVS. Eso quiere decir que en el pom.xml hay que meter un CVSROOT válido, con usuario y todo. ¿Por qué el pom.xml que está en CVS y supuestamente es compartido por todos los programadores del proyecto debe llevar un usuario de uno de ellos dentro?.

Tampoco me ha funcionado a la primera el meter un proyecto maven con subproyectos. Como de momento tengo CruiseControl funcionando, tampoco me he preocupado de investigar cómo hacerlo y ese es el momento en que dejé las pruebas con Continuum.

Sin embargo, la buena pinta que tiene, me hace pensar que en cualquier momento volveré a él para probar.

05 noviembre 2006

Maven otra vez

Como últimamente ando muy metido en maven, qué menos que hacer un pequeño tutorial para iniciarse en maven.

He puesto lo mínimo para hacerse una idea y empezar con un pequeño proyecto java, pero se me han quedado muchas cosas en el tintero. La verdad es que cuanto más me meto en maven, más cosas descubro y más me gusta el que todos los proyetos se hagan igual, que el script de compilado no sea distinto en cada sitio, no tener que revisar los antiguos scripts de otros proyectos para que el script del nuevo proyecto se parezca.

Sin embargo, contar todo lo de maven, aparte de que yo no me lo sé, iba a ser demasiado extenso y rollo. Por eso prefiero un pequeño tutorial para enterarse de qué va y dar los primeros pasos, de forma que el que tenga interés tenga una base mínima para empezar a investigar.

BorderLayout, FlowLayout y BoxLayout

Acabo de hacer un pequeño ejemplo de cómo usar el BorderLayout, FlowLayout y BoxLayout. Estos Layouts de java se complementan bien para hacer la típica ventana principal de una aplicación, en la que hay una zona central grande y luego una serie de botonería en la parte superior y en el lado derecho o izquierdo.

A ver si para la siguiente pongo un pequeño ejemplo de un JFrame en el que se use su zona de menús, una barra de herramientas y un JDesktopPane, para meter dentro JInternalFrame. Quizás también un hueco para poner en el lado derecho un pequeño menú/botonería.

Por cierto, para este ejemplo tonto de una clase, pero para el que tenía que generar el jar para poner en el Applet de la página, me he creado un mini-proyecto con maven. Esta herramienta, una vez que se conoce, es tan simple y eficiente para estas tareas básicas que me la he instalado en casa y la estoy usando para mis pequeños programitas.

02 noviembre 2006

Validar la entrada de un JTextField

Cuando queremos que un JTextField sólo se puedan admitir dígitos, o una longitud determinada o cualquier otra restricción, hay muchas posibles soluciones.

He tratado o probado muchas de ellas. En este blog, en mi página de Tutoriales de Java y en varios foros he ido poniendo algunas de ellas.

Al final, me he decidido a poner en la Chuwiki un artículo en que se recopilan todas ellas, con un pequeño ejemplo. Allí tienes un pequeño listado con ejemplos de cómo conseguir que un JTextField sólo admita núemeros.

Para el caso concreto de números, a mi me gusta más la opción del JFormattedTextField, ya que es bastante tonta y nos ahorra convertir luego el String a un número y viceversa.

En cuanto a limitar la longitud total, a mi me gusta más la de reemplazar el Document.

01 noviembre 2006

Plugins de Maven

Sigo investigando con maven.

En FreeHep he encontrado un pequeño "filón" de plugins para maven.

Un tema que me preocupaba eran los objetos remotos de rmi en java. Para que funcionen, una vez compilados, hay que pasarles el compilador rmic. No tenía muy claro cómo se hacía esto con maven y creo que lo he encontrado. Hay un plugin de forma que poniendo en el pom.xml qué clases son las que necesitan pasar rmic, lo pasa. En la Chuwiki puedes ver qué es lo que hay que añadir al pom.xml para que maven pase el rmic a las clases que lo necesitan.

También había oido hablar de él, pero aquí lo he encontrado. Otro plugin de maven que desempaqueta las librerías externas que necesitamos (log4j.jar, ojdbc14.jar, etc) y empaqueta sus class junto con los nuestros en un único jar. De esta forma evitamos tener que distribuir nuestra aplicación con varios jars. En la Chuwiki puedes ver la configuración del plugin jarjar en el pom.xml.

Además de plugins, en FreeHep hay otras librerías java que pueden ser interesantes.

31 octubre 2006

No es oro todo lo que reluce

Como ya he comentado, llevo varios días jugando y poniendo en marcha varias herramientas que se supone ayudan a las costumbres de buena programación: Cruise Control, Maven, Bugzilla, etc.

En el caso concreto de Maven estoy contento y ahorra mucho trabajo. También hay muchas cosas que es capaz de hacer y que ayudan, pero....

Maven es una herramienta gratuita desarrollada en plan libre y con montones de plug-ins propios o de terceros también en plan libre. El problema que tiene todo esto es que la documentación es escasa y dispersa por internet. El caso es que cuando quiero hacer algo, me puedo pasar unas cuantas horas buceando por google en busca de una respuesta.

Por ejemplo, no me funciona el comando mvn site:stage, y por lo que veo en internet, simplemente no funciona bien.

Tampoco acabo de encontrar cómo trata maven con las clases Remote de rmi y el rmic. Veo que había un plugin para maven 1, pero todavía estoy buscando a ver si encuentro algo para maven 2.

El plugin de cobertura, que ya mencioné en alguna ocasión, se encuentra fácilmente en la página de maven para maven 1, pero no para maven 2. Hay que irse a la página oficial de cobertura para desde ahí llegar el plugin para maven 2.

Algo similar me pasa con eclipse. Existen muchos plugins de terceros, pero algunos dan problemas o van retrasados respecto a las versiones nuevas. Me acabo de bajar eclipse 3.2 y el plugin de jalopy, para formatear código, me da problemas, a veces va, a veces no.

De todas formas, sigue mereciendo la pena meterse en estas cosas, ahorran mucho trabajo y es mejor pelearse o no disponer de alguna de estas funcionalidades secundarias que andar haciendo todo desde cero y a pelo.

26 octubre 2006

SimpleDateFormat y DecimalFormat

Últimamente me he tenido que pelear un poco con SimpleDateFormat y DecimalFormat.

No es que me haya tendio que pelear, porque tampoco son clases tan dificiles de usar, pero por un lado me he visto en la necesidad de convertir fechas en formato ddMMyy a formato dd/MM/yyyy y viceversa (cosas del trabajo).

Por otro lado, en algún foro y creo que ha sido a más de una persona, he contestado algunas dudas sobre el DecimalFormat. Además, según puse en un post anterior, me tropecé con una curiosidad que no sabía sobre los porcentajes y DecimalFormat.

En fin, que todo esto me ha animado a escribir en la Chuwiki un pequeño ejemplo de DecimalFormat comentando algunas de sus peculiaridades y otro con SimpleDateFormat.

25 octubre 2006

Cobertura Plugin Usage

Comenté de un plugin para maven que permite sacar un informe en el que sale qué trozos de código se han recorrido en los test unitarios y que trozos no se han recorrido.

Aquí está el cómo configurar maven para que coja ese pluging

Cobertura Plugin Usage: " org.codehaus.mojo cobertura-maven-plugin "

Una sesión de herramientas

Ultimamente me he instalado casi todas las herramientas instalables. Lo siguiente viene a ser más o menos un día de trabajo entre herramientas.

Cuando me pongo a trabajar, que no suele coincidir con el momento en el que llego al trabajo, abro el eclipse. Un plugin de eclipse, llamado mylar, se va a revisar nuestra página de bugzilla y me trae a eclipse todos los errores que alguien ha levantado en el proyecto. Simultánemente, veo en el thunderbird que bugzilla me ha enviado correos con los mismos bugs que se han levantado y mylar me ha traido a eclipse.

Reviso los errores y elijo uno para ponerme a trabajar. Con mylar lo marco como activo y en ese momento se pone en marcha automáticamente un cronómetro. Me dedico a revisar ficheros java, depurar y así hasta que encuentro el error. Desactivo (paro el cronómetro) del bug a la hora del café, cuando me interrumpen, etc y vuelvo a activarlo cuando sigo.

Cuando encuentro el error y lo corrijo, le digo a mylar que meta en cvs todos los ficheros que he tocado. Automáticamente pone un comentario en CVS del estilo "progresando en el bug ###". Añado al comentario algo más específico de lo que he hecho.

Le digo también a mylar que adjunte al bug de bugzilla mi contexto de eclipse. Esto guarda en bugzilla junto al bug un fichero xml en el que se dice qué ficheros he tocado para corregir el bug. Cualquier otro que tenga el mismo proyecto en eclipse con mylar, puede ver qué ficheros he tocado.

Finalmente, con mylar en eclipse marco el bug como "resolved fixed" o como "no me da la gana corregirlo (wontfix que diría bugzilla)" y mylar se encarga de tocar la página de bugzilla. Este último envía un correo a la persona que ha levantado el bug. Me autocomplazco un rato mirando con mylar el histórico de bugs que he resuelto en los últimos días y viendo cuánto tiempo he tardado en cada uno de ellos. Otras veces hago lo mismo, pero tirándome de los pelos viendo que un pueñetero bug lleva un par de días abierto y todavía no tengo ni idea de por donde van los tiros.

Un rato después, CruiseControl ve que he tocado ficheros en CVS del proyecto, así que automáticamente saca dichos ficheros y compila el proyecto entero desde cero. Cuando termina, me envía un correo diciéndome si los fuentes que he metido en CVS compilan o no correctamente.

Y todo herramientas gratuitas.

24 octubre 2006

jakarta commons io

Acabo de enterarme de otro proyecto de jakarta, el commons io, en el que hay montones de utilidades para java para el manejo de entradas/salidas. Entre otras, está por ejemplo la posibilidad de ver el espacio libre en disco duro, copia de ficheros, manejo de nombres de ficheros, manejo de ficheros de texto a base de leer líneas, etc, etc.

Aparte de la posible utilidad de todo esto, lo que más me llama la atención, como ando metido con maven y con sus informes sobre el proyecto, son los informes maven que han metido en su documentación.

El de checkstyle no lo conocía, pero parece que revisa las cosas típicas de estilo de java, como poner nombres de clases con mayúscula primero y minúscula después, métodos empiezan con minúscula, etc.

Me ha llamado especialmente la atención el de cobertura. Básicamente nos por qué partes de código han pasado nuestros test de JUnit y qué partes no han tocado. De esta forma sabemos lo completos que son nuestros test. Además, pinchando en las clases del informe, acabamos llegando al listado del fuente, en el que se marcan en verde y rojo las líneas por las que pasa o no pasa el test.

También me ha llamado la atención JDiff, que nos muestra las diferencias entre dos APIS de nuestro proyecto en distintas versiones, indicándonos qué clases se han añadido, borrado o modificado de una versión a otra, al igual que los métodos. Es curioso ver, por ejemplo, el JDiff aplicado a las versiones 1.4.2 y 1.5.0 de java.

Es increible la cantidad de cosas que hace la gente por el mundo, y lo más increible, gratis.

21 octubre 2006

Math.pow()

Es curioso, pero en este post del foro de java comentan que al hacer

Math.pow(-3.0, 1.0/3.0)

que teóricamente es la raíz cúbica de -3, que debería dar -1.44 aproximadamente, lo haces en java y sale NaN (Not a Number).

Revisando la API de Math.pow() vemos una cosa realmente curiosa, dice que ese es el comportamiento esperado
  • If the first argument is finite and less than zero
    • if the second argument is a finite even integer, the result is equal to the result of raising the absolute value of the first argument to the power of the second argument
    • if the second argument is a finite odd integer, the result is equal to the negative of the result of raising the absolute value of the first argument to the power of the second argument
    • if the second argument is finite and not an integer, then the result is NaN.



Bueno, pues no deja de ser curioso este comportamiento tan inesperado que impide echar ciertas cuentas. No el caso de la raíz cúbica, que se puede hacer con el método Math.cbrt() (CuBic RooT), pero sí el de las raices impares de más rango que la cúbica.

19 octubre 2006

Reconocedor de idiomas

Hace mucho, mucho tiempo leí en una revista "Scientific American" la forma de que un programa pueda reconocer un idioma o incluso generar un texto, por ejemplo en Alemán, de forma que aunque el texto no tenga sentido ninguno, una persona que no sepa Alemán lo identificaría inmediatamente como Alemán.

El algoritmo es bien sencillo. Basta tener varios textos de muestra en varios idiomas y hacer unas estadísticas sobre el número de apariciones de las letras o de las parejas de letras o de trios de letras. Por ejemplo, "hola", tiene las parejas "ho", "ol" y "la".

Cuando queramos saber un texto de qué idioma es, basta con comparar sus grupos de letras con los que tenemos en los distintos idiomas, para ver a cual se parece más.

En cuanto a generar el texto, sólo hay que apuntar después de cada pareja de letras, qué letra suele seguir a esa pareja concreta, qué probabilidades tiene cada letra de seguir a una pareja. En inglés, por ejemplo, detrás de un "th" es bastante posible que vaya una vocal y casi imposible que vaya otra consonante. Para generar el texto basta con elegir la primera pareja de letras e ir generando las siguientes letras de acuerdo con esas probabilidades.

Bien, pues al menos de la primera parte, la de reconocer el idioma, he hecho un pequeño programa de ejemplo en java, que por supuesto puedes probar en forma de Applet, bajarte los fuentes o el jar como aplicación independiente. Por supuesto, también, no garantizo en absoluto que funcione bien y sólo sirve para jugar un poco con él si te interesa el tema.

Lo de generar el texto, seguramente lo añada dentro de poco.

Dreamweaver

La verdad es que soy un poco "rupestre".

Empecé con la informática allá en los tiempos del sinclair zx81 (anterior al Spectrum). Luego seguí con los ordenadores de fósforo verde y aprendí a escribir a máquina antes de usarlos. En el trabajo caí en un cutre-empresa que trabajaba con estaciones de trabajo unix y no se gastaban un duro en entornos de desarrollo, así que pasé muchos años programando con el vi (uno de los mejores editores del mundo), pero que está muy orientado a comandos desde teclado.

Todo esto hace que sea un usuario muy orientado a usar el teclado y que el ratón muchas veces sea más una molestia, algo que retarda el hacer las tareas, más que una ayuda.

Por ello quizás, siempre me han gustado los programas simples, sin demasiadas ventanas y con posibilidad de hacer las cosas con teclas en vez de ir con el ratón a un menú y navegar entre submenus y submenus de submenus.

Hasta no hace mucho, para mi página web, usaba el netscape composer. Una herramienta gratuita y simple, pero que permitía escribir fácilmente y tocar directamente el código html. Para mí siempre ha sido una de las herramientas más cómodas para trabajar con html. Probé por encima varias más avanzadas, como la de microsoft que venía con visual studio 6 (no recuerdo el nombre), dreamveaver, etc. Todas me parecieron muy engorrosas. Para hacer una simple página web pedían cosas como montar un sitio web, definir un montón de parámetros, si te descuidas te lo suben al servidor web, etc.

Sin embargo, hace poco me puse Dreamveaver y me puse a mirarlo con un poco más de detalle. Sigue pareciendome una herramienta engorrosa. Nada más abrirla sale un "ventanón" con montones de subventanas que no sé para qué sirven (ni las he usado en el tiempo que llevo) y el espacio de trabajo (para escribir tu página) es más bien reducido.

Pero he visto que tiene pequeñas maravillas. Todo lo que echaba en falta en una herramienta simple como netscape composer, lo tiene esta herramienta. Las cosas más útiles que he encontrado son:
  • Revisa todos los vínculos de tu sitio, indicándote si hay alguno erroneo. Para un sitio como el mio tarda un rato, pero lo hace
  • Si cambias el nombre de una página o la mueves de directorio, arregla todos los links en las demás. Con netscape composer ese era el principal motivo para NO mover las cosas. netscape no hace eso. ¡¡La de horas que me he pasado cambiando y revisando links!!
  • Y lo mejor de todo, el tema de plantillas. Puedes hacer un esqueleto de página web con huecos para rellenar más adelante. Ese esqueleto se graba como plantilla. Cuando luego quieras crear la página, le dices que es según la plantilla y llisto. Te sale la página con su formato y los huecos para que pongas el texto. Si cambias la plantilla, se cambia automáticamente el formato de todas las páginas. ¡¡La de horas que me he pasado cambiando el aspecto de las páginas una a una!!
Modernizarse o morir...

17 octubre 2006

Jasper Report

Con un ejemplo tonto que me hizo un compañero de trabajo y el correo que me envió John, de Colombia, he hecho un guia-burros de Jasper Report. No es más que una especie de "Hola mundo", pero por algo se empieza.

Espero que algún Rodrigo de riolambre, que creo que un poquito de esto sabe, colabore y meta más cosas en la Chuwiki esa. Si no, cualquier otro que sepa un poco del tema está invitado a tocarlo.

14 octubre 2006

DecimalFormat

Una pequeña estupidez, que está comentada, pero me he tropezado con ella, sobre la clase DecimalFormat de java.

Resulta que si como formato de números ponemos "%" o algo con ese caracter, como "###.##%", la clase multiplica el número por 100 y lo pone en formato de tanto por ciento.

DecimalFormat formateador = new DecimalFormat("%");
System.out.println (formateador.format(0.344));

devuelve como salida

%34

Mientras que

DecimalFormat formateador = new DecimalFormat("###.## %");
System.out.println (formateador.format(0.344));

devuelve como salida

34,4 %

Es una buena forma de evitar ir multiplicando o dividiendo el número en código. Normalmente para cuentas con porcentajes suele venir mejor usar el tanto por uno. Lo del tanto por ciento normalmente es para mostrar en pantalla.

Me explico:
  • Para calcular el 34% de un numero, lo más fácil es hacer numero*0.34 y no la cuenta habitual de numero*34.0/100.0
  • Para calcular qué porcentaje es un número a de un número b, lo fácil es hacer a/b que lo devuelve en tanto por uno, y no lo de a/b*100.0 que lo devolvería en tanto por ciento.
  • etc, etc.
Vaya, que nos ahorramos andar arrastrando por el código el dichoso 100...

13 octubre 2006

ono

Me acabo de dar de alta en ono y ya puestos a hacer gasto, lo he cogido todo: televisión, teléfono e internet.

Me dí de alta por teléfono un martes. Ese mismo día me dijeron que el técnico vendría a ponerme los cables el siguiente martes sobre las cinco y media, hora que yo había solicitado. El técnico aparecio puntual y tardó casi dos horas en instalar todo. No es complejo, pero son tres cables que tiene que llevar por la casa y dos aparatos a instalar, el decodificador de tv y el cable modem para el internet. Cuando se fué sólo funcionaba internet. El decodificador que trajo estaba mal y el teléfono no lo probamos, poque me comentó que el cajetín de telefonos de la calle estaba mal y a mí no me llegaba señal.

Volvió al día siguiente por la mañana, con un decodificador nuevo y habiendo arreglado lo del teléfono. Con ello ya tenía el decodificador de TV en condiciones y señal en el teléfono. Sin embargo, el teléfono iba a medias, podía hacer llamadas interprovinciales pero no locales. La tele seguía sin ir. El tema es que todavía no me habían dado de alta en el servicio.

Esta mañana tempranito (Viernes después de un Jueves festivo) ya estaba todo funcionando. El internet funcionó desde el primer día. El teléfono y la televisión, desde que llamé para darme de alta hasta que lo he tenido en marcha, han pasado semana y media.

En general, salvo esas pequeñas vicisitudes que se solucionaron rápido, el servicio ha ido bastante bien. El técnico puntual, venía cuando decía que iba a venir.

12 octubre 2006

Ares

En su día probé un poco con e-mule y con Kazaa.

El primero me dejaba el ordenador colgado. Después de mucho mirar, buscar por los foros y demás vi que no era el único al que le pasaba y la conclusión a la que llegué al final es que era algún tipo de incompatibilidad con mi tarjeta de red, una D-Link Airplus DWL-520+

El Kazaa no tenía ese problema, al menos con tanta frecuencia, aunque sí me dejaba colgado el ordenador de pascua en ramos.

Ahora, aparte de que tengo otra tarjeta de red (no wi-fi), acabo de hacer unas pruebas con Ares. Me ha dejado maravillado este programa, comparado con los otros dos. No hay tantísimos ficheros para descargar como había en e-mule, pero es miles de veces más rápido bajando cosas. Aparentemente no lleva ningún tipo de ad-ware como llevaba kazaa y no hay que andar configurando cosas raras como en e-mule. En fin, un programa sencillo de usar y muy veloz descargando.

10 octubre 2006

Eclipse y CVS

Bueno, ahora que han pasado unas horas desde mi última experiencia de eclipse con cvs, creo que no voy a echar demasiados juramentos.

Mi experiencia con el cvs de eclipse, "team" según el menú de eclipse, no es nada buena. Le veo muchas pegas que o bien no he sabido solucionar, o bien no se puede. Voy a enumerar algunas de las que menos me gustan:

  1. No puedes poner en eclipse un proyecto cvs que ya tengas fuera. Eclipse obliga a hacer él el checkout del proyecto. Al hacerlo así, mete además con los fuentes sus ficheros de proyecto .classpath y .project. No he conseguido hacer funcionar cvs sobre un proyecto de cvs que tuviera previamente sacado.
  2. No consigo hacer updates recursivos por los directorios. Cuando alguien toca algo en cvs, debo irme desde línea de comandos de ms-dos o bash al directorio en cuestión y hacer el update a mano, o bien ir en eclipse, paquete por paquete, haciendo update.
  3. Si cambio de nombre un paquete, con las opciones de refactor, eclipse "borra" el paquete viejo, pero no de cvs. Sin embargo, haciendo updates tampoco lo saca. Debe acordarse que ese paquete tiene ahora otro nombre. ¿Como borro el paquete de cvs?. Desde eclipse imposible, porque ni siquiera puedo verlo. Hay que irse nuevamente a una ventana de ms-dos o bash y hacerlo a mano.
  4. De vez en cuando falla y marca paquetes como que los tengo editados, pero no muestra ningún fichero editado. Veo también que se "corrompe" el fichero Root de algunos directorios CVS, de forma que queda inutilizable y no me queda más remedio que repararlo a mano.
En fin, Eclipse me parece maravilloso en muchos aspectos, como la cantidad de plug-ins gratuitos que tiene, muchos más que netbeans. También me parece maravilloso su forma de hacer código y las opciones de refactoring. Pero desde luego, con cvs es mejor no meterse si no quieres perder la ilusión por este IDE.

Eclipse y CVS

Bueno, ahora que han pasado unas horas desde mi última experiencia de eclipse con cvs, creo que no voy a echar demasiados juramentos.

Mi experiencia con el cvs de eclipse, "team" según el menú de eclipse, no es nada buena. Le veo muchas pegas que o bien no he sabido solucionar, o bien no se puede. Voy a enumerar algunas de las que menos me gustan:

  1. No puedes poner en eclipse un proyecto cvs que ya tengas fuera. Eclipse obliga a hacer él el checkout del proyecto. Al hacerlo así, mete además con los fuentes sus ficheros de proyecto .classpath y .project. No he conseguido hacer funcionar cvs sobre un proyecto de cvs que tuviera previamente sacado.
  2. No consigo hacer updates recursivos por los directorios. Cuando alguien toca algo en cvs, debo irme desde línea de comandos de ms-dos o bash al directorio en cuestión y hacer el update a mano, o bien ir en eclipse, paquete por paquete, haciendo update.
  3. Si cambio de nombre un paquete, con las opciones de refactor, eclipse "borra" el paquete viejo, pero no de cvs. Sin embargo, haciendo updates tampoco lo saca. Debe acordarse que ese paquete tiene ahora otro nombre. ¿Como borro el paquete de cvs?. Desde eclipse imposible, porque ni siquiera puedo verlo. Hay que irse nuevamente a una ventana de ms-dos o bash y hacerlo a mano.
  4. De vez en cuando falla y marca paquetes como que los tengo editados, pero no muestra ningún fichero editado. Veo también que se "corrompe" el fichero Root de algunos directorios CVS, de forma que queda inutilizable y no me queda más remedio que repararlo a mano.
En fin, Eclipse me parece maravilloso en muchos aspectos, como la cantidad de plug-ins gratuitos que tiene, muchos más que netbeans. También me parece maravilloso su forma de hacer código y las opciones de refactoring. Pero desde luego, con cvs es mejor no meterse si no quieres perder la ilusión por este IDE.

04 octubre 2006

Cruise Control

Bueno, ya he estado jugando más y tengo más claro lo de Cruise Control.

Una vez instalado y configurado Cruise Control, tiene asignada un area de trabajo con los fuentes de los proyectos. Normalmente está dormido y espera cierto tiempo (el que le digamos en la configuración) para despertar. Cuando despierta, mira los proyectos (a través de CVS o el sistema de control de versiones que usemos) para ver si alguien ha cambiado algún fichero fuente. Si ve que ha habido cambios, puede o no traerse los nuevos fuentes (según le indiquemos en la configuración) y llama al script de compilado del proyecto. Se lleva bien con maven y con ant, por lo que nos vale perfectamente con el pom.xml (de maven) o el build.xml (de ant).

Si la compilación es correcta, en http://localhost:8080 se puede ver que todo ha ido bien. Si falla, se ve el fallo en el mismo sitio y además puede incluso enviar un correo a la persona que indiquemos.

Es curioso, pero en esa página de localhost se ve si ha ido bien o no la compilación y los fuentes que se han tocado y provocado la compilación.

En fin, que lo tengo arrancado y en marcha con un par de proyectos y parece que funciona bien. En cuanto alguien mete algo en CVS que no compila, la herramienta se "chiva" al jefe de proyecto ;-).

03 octubre 2006

Cruise Control

Siguiendo, en el trabajo, con la manía de probar nuevas herramientas que se supone que nos pueden ayudar, ayer me bajé e instalé Cruise Control.

Es una herramienta, gratis por supesto para que se la pueda permitir mi cutre-empresa, que supuestamente compila los proyectos desde cero todos los días (o cada cierto tiempo que le indiquemos). Si el proyecto tiene test de JUnit o similar, también los ejecuta. Si algo falla, se puede configurar para que envíe un correo a la gente implicada, responsables del proyecto o lo que sea.

La instalación para windows es fácil, simplemente se ejecuta el instalable y ya está. El tema de la configuración me ha parecido más complejo.

En primer lugar, los resultados del compilado parece que se pueden ver en formato web con jsp. Eso parece indicar que es necesario instalar un Tomcat o similar, pero no. Cruise Control viene con una cosa (creo que se llama Jetty) que hace las veces.

La documentación que da parece que está un poco obsoleta para la versión más moderna. En los ficheros de configuración de ejemplo que copie, tuve que descomentar algunas lineas que venían comentadas y comentar (eliminar) otras que estaban sin comentar. En fin, que a base de probar y de intuición "femenina" conseguí, en unos minutos que me compilara un proyecto y después de varias horas, ver los resultados en un navegador.

Para que Cruise Control pueda compilar el proyecto, es necesario que haya un build.xml de ant o un pom.xml de maven que sea capaz de compilar el proyecto, puesto que Cruise Control lo unico que hace es llamar a uno de esos y recoger los resultados. Cruise Control también es capaz de detectar si ha cambiado algún fuente en cvs de forma que hace o no la compilación según lo considera necesario.

Me queda configurar lo de que envíe correos.

21 septiembre 2006

Nuevamente Mylar

Esto es algo que me ha comentado un compañero de trabajo, pero que no he probado.

En un post anterior comenté sobre Mylar, un plug-in de eclipse que hace de programador de tareas y que permite recoger bugs desde bugzilla o similar.

Un compañero me ha comentado una nueva característica que parece muy útil de Mylar. Si un programador de un proyecto resuelve una incidencia con eclipse y mylar, cogiéndola de bugzilla, cuando termina puede marcarla como terminada desde el mismo eclipse-mylar. Mylar automáticamente añade un adjunto (attachment) propio a la incidencia. Ese adjunto no es más que un fichero propio de Mylar en el que se indican, de alguna forma, qué ficheros se han tocado para resolver esa incidencia y que son los que en eclipse se ven si filtramos con Mylar (como comenté en el post anterior).

Si ahora ese compañero no está (ha encontrado un trabajo mejor en otro sitio, que suele ser lo habitual) y se reabre la incidencia (no había terminado de arreglarla correctamente, que también suele ser lo habitual), lo normal es que le caiga a otro pringado que todavía no ha encontrado trabajo en otro sitio.

Con eclipse-mylar es muy fácil. El nuevo pringado abre eclipse, se conecta a bugzilla, se trae la incidencia y ¡¡maravilla!!, eclipse-mylar importa el fichero adjunto y le filtra automáticamente los ficheros java mostrándole sólo aquellos que se tocaron para resolver la incidencia. Este nuevo pringado no debe perder un par de horas rebuscando entre los tres mil ficheros java del proyecto grande cuáles demonios son los que tienen que ver con el fallo.

Todavía no me he instalado Mylar. ¿Por qué?. El problema que tengo es que como instalo y desinstalo miles de plug-ins para probar en eclipse, ahora intento instalar mylar me da un error de eclipse y no se instala. Cualquier día tendré que reinstalar eclipse desde cero y poner el mylar este, que parece una pequeña maravilla para proyectos grandes.

17 septiembre 2006

Historieta en el Criptonomicón

Estoy leyendo la novela del criptonomicón (novela gorda, partida en tres libros). Hay una pequeña historia que me ha llamado la atención y por eso la escribo aquí.

En la novela el protagonista tiene en su portatil un texto cifrado por los Japoneses (nipos) en la segunda guerra mundial. Ese texto ha estado oculto y nadie lo ha descifrado nunca. En el texto supuestamente está la localización de un depósito de oro que los japonenes tenían escondido durante la guerra.

Los "malos" de la novela consiguen por malas artes meter al protagonista de la novela junto con su portatil en una carcel de Filipinas y consiguen hacerlo de tal manera que pueden ver la pantalla de su portatil, pero sólo la pantalla. Su intención es mantenerlo en la carcel hasta que descifre el código y ver el texto en claro con la ubicación del oro japones.

El protagonista, que para eso es el protagonista y es muy listo, lo sabe, así que se propone descifrar el código, pero sin mostrarlo por pantalla y a su vez presentar un texto falso. Ahí viene lo interesante. ¿Como ver el código descifrado sin mostrarlo por pantalla? ¿Cómo escribir un texto falso sin que se vea en pantalla?

Para la primera solución, nuestro protagonista aprovechó que sabía morse. Descifró el código con un programa que se hizo, de forma que lo volcara a un fichero, sin visualizarlo en pantalla. Con un segundo programa y usando la librería XLEDS, envió el fichero ... ¡a uno de los leds del teclado!, de forma que parpadeando en morse, le mostraba el contenido del fichero.

En cuanto a generar el fichero falso para mostrar en pantalla, hizo un programa similar, pero con la barra de espacio. Luego se dedicó a ver ficheros largos con el comando "more" de unix. Pulsando la barra espaciadora rítmicamente, aparentemente estaba viend el fichero, pero en realidad estaba escribiendo en morse un fichero falso.

No deja de ser una novela, pero desde luego la idea es original.

16 septiembre 2006

Monitor TFT

Acabo de comprarme un monitor TFT de 19" y marca "ni-su".

Lo cogí en el beep de debajo de casa, en una oferta baratita (el más barato que he encontrado de 19"). La marca es hannsg y el monitor es HC194DP.

En principio estoy contento. No soy jugador empedernido del Quake ni un fan de ver películas divx. Soy más bien programador de ver pantallas de texto todo el rato, así que el monitor se comporta bastante bien. No sé que tal irán los refrescos con juegos de acción y películas de la guerra de las galaxias.

Tiene un par de altavoces, que no son gran cosa ni de gran calidad. El ajuste de volumen es algo incómodo y no puedo bajarlo lo suficiente. El nivel más bajo es demasiadao alto para trabajar a altas horas de la madrugada con mujer y niños durmiendo en habitaciones cercanas. Aunque bien pensado, puedo jugar con el volumen de windows, ese altavocito que sale abajo a la derecha.

También es el primer monitor TFT que tengo, así que no tengo nada con qué comparar. Antes en casa tenía uno de tubo de 14" o 15", así que 19" ahora me parecen una maravilla. En el trabajo tengo también uno de tubo de 17" (creo). Ya sabes, trabajo en una empresa de tecnología punta.

15 septiembre 2006

Joel on software

Ya lo mencioné en un post anterior, pero llevo varios días leyendo artículos de él y casi todos son geniales.

En Joel on software hay pequeños artículos en español (hay muchos más en inglés) sobre metodologías y formas de organizar y trabajar en los proyectos de software.

En ellos se cuentan verdades como puños, se pone a parir a las metodologías serias, a los consultores, a la política de la mayoría de las empresas y a muchas de las cosas que se dan por supuestas. Básicamente defiende que para hacer buen software lo que necesitas son buenos programadores y un mínimo de organización/planificación.

Las metodologías tradicionales no son más que un montón de reglas que tratan de hacer que los programadores mediocres llegen a un nivel mínimo, pero que atan y hacen sentirse incómodos a los buenos programadores.

Aunque en tu proyecto no haya algunas buenas costumbres, puedes implantarlas tú mismo, aunque no seas jefe, símplmente dedicando un poco de tiempo cada día para irlo haciendo sólo para tí en tu pc. Poco a poco, cuando la gente vaya viendo la utilidad de ello, se irán metiendo, aunque no hay un "jefe" que diga que hay que hacerlo así.

Esto es una de las cosas que he comprobado personalmente. En muchas ocasiones he hecho cosas para mí o como favor personal a un compañero, que me resultaban útiles a mí o a mi compañero, y he visto cómo se han "divulgado" incluso entre los "jefes" y lo han convertido en algo "importante" e "imprescindible". Recuerdo en concreto una interface gráfica para un equipo, que empecé a hacer por mi cuenta, como favor a un compañero. Cuando mi jefe me vio haciéndola, me prohibió seguir con ella, había otras cosas más importantes que hacer a las que dedicar mi tiempo. De todas formas, seguí haciéndola y cuando estuvo terminada, acabó en una feria en Paris para mostrar el equipo a los visitantes. Es más vistoso enseñar en una pantalla el equipo funcionando que enseñar el equipo apagado sobre una vitrina.

Volviendo a Joel on software, en la página hay montones de artículos divertidos del estilo comentado y prácticamente ninguno de ellos tiene desperdicio.

Primeros días con Bugzilla

Como comenté en un post anterior, acabo de instalar Bugzilla en el trabajo, en mi propio PC y para uso general.

La herramienta en sí está muy bien. Es cómoda de usar, no requiere demasiado aprendizaje y funciona muy bien. Echo de menos alguna cosilla, como la posibilidad de poner más campos para exportar en el formato CSV (en concreto la descripción larga del bug). También el poder restringir permisos a los usuarios, como el de abrir o cerrar incidencias, etc. En principio cualquier usuario que puede modificar incidencias puede modificar CUALQUIER campo de la incidencia. Sería quizás interesante que sólo pudieran cerrar incidencias o cambirar prioridades los responsables de las pruebas. De todas formas, nada grave, siempre y cuando se establezcan unas normas generales y la gente del proyecto sea más o menos responsable. Y lo son, teniendo en cuenta que todo lo que hagan queda registrado con su usuario.

De todas formas, quizá todo estos temas de permisos sean posibles y simplemente todavía no he encontrado dónde. Hay cosas, por ejemplo, como que cualquiera puede dar de alta un bug, pero queda en estado "sin confirmar", hasta que un usuario con permiso de confirmación lo confirme.

Me ha llamado la atención la buena acogida que ha tenido entre la gente del trabajo. Se lo he enseñado primero a los más "allegados", pero rápidamente se ha corrido la voz e incluso se han registrado como usuarios algunos "jefes". Por supuesto, ellos le han encontrado otras utilidades a la herramienta. La más pérfida es ver si trabajamos o no y vamos resolviendo bugs. Encima, como todo queda registrado con quién hace qué, pueden incluso saber quién resuelve más y quién menos.

La otra utilidad que le han visto los jefes es el de enseñársela a los clientes. Siempre han pedido que tengamos una herramienta de gestión de bugs interna. Siempre hemos dicho que la teníamos, pero ahora es la primera vez que podemos enseñar algo parecido. Creo que incluso lo quieren enseñar en las auditorías. También para preparar informes rápidamente que entregar a los clientes sobre el estado de nuestras incidencias internas.

12 septiembre 2006

Otros lenguajes que compilan a bytecodes

En lenguajes que compilan a bytecode hay una noticia que me ha llamado la atención. Por lo visto hay más lenguajes de programación, aparte de java, que compilan y generan bytecodes de java, de forma que se pueden ejecutar en una máquina virtual java. No deja de ser una opción interesante quizás para ciertas tareas, que resulten más fáciles de desarrollar en uno de estos lenguajes que en java.

¿Se podrán mezclar los bytecodes de un lenguaje con los de otro?. Creo que sería una prueba interesante de hacer.

03 septiembre 2006

Meneando noticias

Me he dedicado un poco a navegar por internet, intentando enterarme de algunas cosas sobre los blogs, feeds y demás que no acabo de entender bien como van. Aquí van algunas pequeñas explicaciones de lo que creo que he entendido, que seguramente será inexacto y equívoco, y algunos enlaces.

Resulta que los diarios (blogs), wikis, páginas de periódicos y muchas otras páginas tienen una cosa que llaman "feed". Esa cosa es una especie de página en un formato simple con las últimas noticias que se publican en ese blog, wiki y tal. El que hace el blog no tiene que preocuparse de ello, se hace automáticamente.

Este, por ejemplo, es el feed de este blog. Si lo estás viendo con firefox, pincha en "ver", "estilo de página", "sin estilo" para verlo más mejor. El de este blog es un fichero "atom.xml" (el que ofrece blogger). También hay otros con "rss", que es más o menos lo mismo, un fichero resumen, pero de otra manera.

Existen por otro lado montones de herramientas capaces de anotar estos feeds, de forma que un internauta pueda ver rápidamente los últimos añadidos a sus blogs favoritos. Por ejemplo, el mismo navegador firefox, se puede añadir como "favorito vivo" un "rss" de estos, de forma que en tus favoritos aparecerán automáticamente las, por ejemplo, 20 últimas publicaciones en ese blog. En http://www.coseju.com/rss.php?PHPSESSID=cf6fdcce689002c950e1d7ace36f6cbf tienes cómo hacerlo.

En el rss de este diario, tienes arriba a la derecha un "suscribe now". Ahí aparecen un montón de herramientas capaces de suscribirte a este diario. Debes elegir la que tengas. Por ejemplo, puedes, si tienes cuenta de gmail, ponerlo en tu página de búsqueda de google personalizada.

Hay sitios, como feedburner, que ofrecen a los que publican blogs la posibilidad de poner un icono en su sitio indicando que tienen "feed" y de alguna manera ellos lo ofrecen. La gente, pinchando el icono puede "suscribirse" a estas noticias con alguna de las herramientas comentadas antes, como el navegador firefox. La persona que publica el blog puede enterarse, a través de feedburner, cuantos navegantes hay suscritos a su "feed". En fin, algo complejo que todavía no acabo de entender bien y tengo que ver mejor como funciona esto.

Finalmente, supongo que con un fin parecido pero de otra manera, me he tropezado con meneame, un sitio en el que la gente manda noticias que se encuentra en los blogs y demás. Los visitantes de meneame pueden ver las noticias que han enviado los demás y darles un voto ("menearla") si les gusta. Meneame muestra primero las noticias más votadas, de forma que de alguna manera tienes una página de noticias "favoritas" de la gente. Vaya, otra cosa a investigar.

Supongo que la idea final de todo esto es que tú no tengas que revisar todos los blogs favoritos, sino tener las últimas noticias de todos ellos en un único sitio, el navegador firefox, la página de búsqueda de google u otras páginas (como netvibes), de forma que simplemente entrando ahí, ves las últimas publicaciones de todos tus sitios favoritos.

La verdad es que todas estas cosas avanzan muy rápido y me desbordan, sobre todo si tu actividad principal es otra, java en mi caso.

01 septiembre 2006

Mylar

Un compañero de trabajo, aprovechando que he puesto bugzilla, a hecho unas pruebas con Mylar.

Mylar es un plug-in para eclipse que permite gestionar nuestras tareas, poniendo tiempos de inicio, de fin, avisos, etc, etc. Vaya, un planificador de tareas integrado en eclipse.

Una vez creada una tarea, cuando trabajamos en ella, hay dos cosas interesantes que hace Mylar. Por un lado lleva el tiempo que estamos trabajando en esta tarea. Por otra, y lo que es realmente interesante, es que podemos "filtrar" las clases que vemos en nuestro arbol de clases de forma que sólo se ven las que estamos usando. Esto es muy interesante en proyectos grandes. Cuando dentro del proyecto grande, de miles de clases, trabajamos en un tema concreto, sólo veremos un grupo reducido de clases, las que nos han ido haciendo falta. Se facilita un montón el tema de navegar entre clases.

Mylar se integra además con bugzilla, trac y jira. Cuando creamos una nueva tarea, podemos poner la url de un bug que esté registrado por ejemplo, en bugzilla. Al hacerlo, el nombre de la tarea se pondrá automáticamente como el nombre del bug y además, permite abrir en una pestaña de eclipse un navegador en el que veremos el bug de bugzilla y podremos modificarlo.

La parte de bugzilla es curiosa, pero no sé si merece la pena abrir una tarea por cada bug, sobre todo en proyectos grandes en los que hay miles y miles de bugs. Quizás sea interesante si la empresa (o uno personalmente) lleva una estadística del tiempo que tarda en resolver cada bug. Al crear una tarea por bug, Mylar lleva el tiempo que trabajas en esa tarea, así que cuando terminas de arreglar el bug, tienes el tiempo que has tardado en resolverlo.

De todas formas, sólo por el filtro de clases en proyectos grandes, Mylar merece la pena.

31 agosto 2006

Bugzilla en los correos y windows

Al final he conseguido que bugzilla envie correos. Ha sido todo una historia.

El primer problema es que el servidor de smtp (el que envía los correos) es el de la empresa, por lo que para enviar correos necesito identificarme con mi usuario y password.

En bugzilla no encontré ningún sitio que permitiera configurar el usuario y password para el servidor smtp. Sí permitía poner el nombre/ip del servidor pero no usuario/password, al menos, yo no lo he encontrado.

Al final me decidí a, en vez de usar directamente smtp, configurar bugzilla para que use la utilidad sendmail de unix (se hace directamente desde el navegador). Como estoy en windows, tuve que buscar un sendmail para windows. ¡Sorpresa!. Hay un sendmail para windows con instalador para bugzilla. Si no queremos tocar los ficheros de bugzilla, hay que instalar sendmail en C:\usr\lib. Lo instalé, lo configuré y seguía sin funcionar.

Afortunadamente, sendmail tiene una salida de log para debug (hay que descomentar una línea en el fichero de configuración de sendmail.ini para que ese log salga). En ese log de debug veo toda la mensajería entre sendmail y mi servidor de smtp. En ese log veo que el servidor de smtp rechaza los envios de correo porque el campo "from" no coincide con mi dirección de correo real. En realidad esto se podría hacer, pueden ser distintas, pero el servidor de smtp de mi empresa no nos deja "inventarnos" otra personalidad para el "from".

El campo "from" de bugzilla pone "bugzilla-admin-daemon" o "bugzilla-admin" según de dónde se envíe el correo. Así que tanto buscando en los ficheros de bugzilla como desde el navegador en la página de configuración de correo, cambio todos estos "bugzilla-admin*" por mi dirección real de correo. ¡Voila!, ¡ya funciona!. La única pega es que voy a ser yo el que envíe todos los correos de bugzilla a todo el mundo.

Bueno, ahora a ver si convenzo a la gente para que lo use ....

30 agosto 2006

Bugzilla

Bugzilla es un conjunto de scripts cgi que con apache y una base de datos nos permite llevar desde el navegador una base de datos de errores/fallos/incidencias/"bugs" de nuestro proyecto.

En otras palabras, una vez instalado y configurado, cuando pruebo el programa en el que estoy trabajando y encuentro un fallo, abro el navegador, me conecto a la página donde tengo instalado bugzilla y escribo la incidencia.

Esto es útil para equipos de trabajo. Cada uno de los integrantes se da de alta en donde hemos instaldo nuestro bugzilla y da su correo electrónico. Cada vez que alguno encuentra un fallo en el programa, lo pone en bugzilla y da la dirección de correo del que se supone responsable del fallo. Bugzilla envía un correo con la incidencia a la persona indicada. Esta, cuando la mira, corrige o decide que no es de él, lo anota en bugzilla y correo al canto a la/s personas indicadas.

De esta forma, queda una base de datos con todos los fallos, la historia de esos fallos, si se han corregido o no, etc. La gente del navegador mozilla usa bugzilla y puedes verlo en marcha en https://bugzilla.mozilla.org/.

Bueno, me he decidido a probarlo en el trabajo, así cuando los "jefes" prueben los programas, en vez de anotar los fallos en un papel guarro (no de marca "guarro", sino "papel cutre arrancado de libreta de espiral que se me ha caido al suelo y he pisado por el camino"), podrán escribirlos sobre la marcha con el navegador, nos enteraremos automáticamente con un correo y cuando los arreglemos, les llegará el correo correspondiente.

He instalado bugzilla en windows, y todavía estoy peleandome un poco con ello. En el trabajo tenemos proxy y un servidor smtp que requiere contraseña. Además, estoy dentro de una red local. El caso es que lo he puesto todo, pero todavía no consigo que bugzilla envíe los correos. Si es que todo esto está pensado para funcionar en unix...

La instalación no es una instalación tonta, pero siguiendo las instrucciones y teniendo un poco de idea de qué va el tema, resulta más o menos asequible. Eso sí, hay que instalar perl para windows, una serie de módulos para perl que necesita bugzilla, el servidor apache y mysql si no están ya instalados, tocar la configuración de apache, etc, etc. Bueno, que me he tirado un par de horas consultando internet y demás para tenerlo más o menos en marcha.

Igual que bugzilla, hay otros.
  • JIRA, que es de pago.
  • Trac, que es gratis, pero me da la impresión de que está todavía un poco en pañales. Ellos mismos dicen que no ha sido probado suficientemente con MySQL y andan todavía por la versión 0.x
Otra cosa interesante de estos es que creo (no lo he leido todavía con atención) que se integran con CVS o subversion, usan diffs y demás, por lo que me da la impresión de que son capaces de marcar las versiones de los fuentes en los que está el bug y en la que se corrige o, al menos, tener en cuenta de alguna manera los fuentes del proyecto.

Finalmente, está Mylar, que tampoco he probado. Es un plug-in para eclipse que permite organizarte tareas. En cada tarea eclipse sólo muestra aquellos ficheros que son intersantes para la tarea, de forma que en un proyecto grande de miles de ficheros no se ven todos a la vez, sino sólo por tareas de pocos en pocos cada vez. Es decir, si para la tarea1 necesito fichero1.java, fichero2.java y fichero3.java, cuando seleccione la tarea1, eclipse sólo me mostrará esos ficheros y ocultará los demás. Lo que más me ha llamado la atención es que dice que es capaz de coger tareas de bugzilla, jira o trac. ¿Quiere esto decir que cojo un error/bug de bugzilla y lo puedo poner como tarea de mylar en eclipse?

Bueno, el caso es que estoy con todo esto. Seguiré investigando...

29 agosto 2006

Joel on Software

En Joel on Software hay un montón de artículos es español sobre temas de software. Son sobre cosas que se hacen bien o mal en las empresas, a la hora de hacer software, qué tener en cuenta para diseñar buenas interfaces de usuario, etc.

He leido varios de ellos y la verdad es que no tienen desperdicio. Dicen muchas verdades como puños y ponen en claro todas esas cosas que los desarrolladores sabemos que debemos hacer pero que no solemos hacer por pereza o por no saber hacer bien.

28 agosto 2006

Día Aciago

De vuelta al trabajo, después del mes de vacaciones. Un asquito.

Bueno, ahí van cuatro tonterías que he encontrado/me han encontrado y que en algún momento habrá que mirar:

15 agosto 2006

Acabo de encontrarme

Acabo de encontrarme en otra página. Resulta que en granainfo, en la parte de programación, está básicamente copiado este blog, manteniendo enlaces a la fuente original. No veo enlaces o artículos de otro sitio...

Bueno, me alegra comprobar que lo que escribo le parece lo suficiemente bien a alguien como para reproducirlo. Además, manteniendo un enlace al original, es más mejor.

28 julio 2006

Mozilla SeaMonkey

Jugando con internet acabo de descubrir mozilla seamonkey. Miré a ver que era y ponía que es una especie de navegador, correo y editor de html todo junto.

Lo he instalado y me ha decepcionado un poco. Es casi exactamente lo que antes era netscape, que venía con navegador, composer, etc. No quiero decir que el programa esté mal, sino simplemente que es lo mismo que el antiguo netscape, pero con otro nombre.

Seguiré con el firefox y el thunderbird, que me gustaron bastante más nada más instalarlos.

En cuanto a editor de html, tradicionalmente he utilizado el netscape composer. Sin embargo, hace poco, que empecé a meter algun java script ajeno, me empezó a hacer cosas raras. Y desde luego, no he conseguido que se trague una página php sin descuajeringarla, a pesar del que el 90% de la página es html. Por eso me he acabado cambiando a dreamweaber y de momento estoy contento con él. No uso todo lo que tiene, puesto que mis páginas son muy sencillitas, sólo html y algo mínimo de php en alguna ocasión, y algún javascript ajeno que inserto (contadores de estadísticas, google adsense, etc), unas pruebas con css, pero me hace bien lo que quiero que haga. Sobre todo no me descuajeringa una página cuando su extensión es php.

Crear .exe de java

Aunque la forma normal de hacer un programa java es generar un fichero jar, su ejecución puede ser compleja para un usuario que no conozca java. Por ello, entregar una aplicación java a un usuario normalito de ordenador suele requerir entregar también un .bat de arranque, que revise si existe máquina virtual, que ponga cosas como el classpath, etc, etc.

Hay utilidades que permiten pasar nuestro .jar a un fichero .exe normal de windows, de forma que a un usuario no programador le resulte más fácil el arranque.

Algunas de estas utilidades, como JSmooth, simplemente crean un pequeño exe que arranca la aplicación, pero necesitan que la máquina virtual esté instalada.

gcj sí crea un verdadero ejecutable, pero gcj está pensado para el entorno de gnu, por lo que para ejecutarlo en windows es necesario instalar previamente el cygwin. gcj venga mejor posiblemente para usuarios de linux/unix.

java2exe (ahora JexePack) también permite generar .exe, pero es una aplicación de pago.

Algunos IDE, como JBuilder, también permiten generar el exe.

De todas formas, no he probado ninguno de ellos. De momento no tengo ninguna necesidad especial de generar .exe. Además, pienso que se pierde un poco la filosofía de java, que es que el "ejecutable" se pueda ejecutar en cualquier sistema operativo. Tampoco suelo hacer aplicaciones para usuarios no programadores.

27 julio 2006

Cambiar el icono de la taza de café en java

La forma normal de cambiar el icono de la taza de café en java en una aplicación consiste en llamar al método setIconImage() del JFrame principal de la aplicación. Luego, el resto de JDialog de la aplicación deben ser hijos, nietos o biznietos de este JFrame, heredando así su icono. Puedes ver más detalles de este cambio de icono.

Sin embargo, ayer un compañero de trabajo encontró una forma más bruta de hacerlo, de forma que queda cambiado para todas las aplicaciones java de nuestro ordenador (salvo que ellas lo cambien de forma expresa dentro).

Este método de fuerza bruta consiste en buscar dentro de nuestra instalación de java los ficheros rt.jar y awt.dll, que contienen dentro dicho icono de la taza de café y cambiarlo por otro. En Cambiar el icono de la taza de café están los detalles.

25 julio 2006

Dos programas opuestos

Aquí un par de programitas para java que pueden ser más o menos útiles y que sirven para lo contrario.

El primero es un "descompilador" de java. El DJ Java Decompiler es un programita que dándole los ficheros .class es capaz de sacarnos los fuentes .java. Tiene interface gráfica y es gratis.

El otro programa, en realidad son varios, son los ofuscadores de código java. Precisamente para evitar que nuestros programas java puedan ser "descompilados", existen estos ofuscadores. Básicamente lo que hacen es cambiar los nombres de clases, métodos y variables por nombres crípticos. El programa .class puedes descompilarse igualmente, pero no es lo mismo intuir que el método setNombre(String nombre) de la clase Persona mete el nombre de la persona en la clase Persona, que intuir qué demonios hace afaewser(String afew) de la clase Xdañsiñwe. Supuestamente, además de ofuscar y ya puestos a tocar el jar, la mayoría de ellos llevan a cabo labores de optimización, tratando de reducir el jar lo máximo posible, eliminando código innecesario, variables no usadas, métodos no usados, etc. De hecho, la ofuscación de código es más bien un "efecto secundario" de este proceso. Para reducir el tamaño del jar, no hay nada como llamar a las clases, métodos y variables con nombres lo más cortos posibles. No he probado ninguno, pero por lo que he leido es lo que intuyo que hacen...

ProGuard es un ofuscador gratuito y en la misma página tienes un listado de otros ofuscadores de código.

21 julio 2006

Método toString() de Element de org.w3c.dom

Me he tropezado con un pequeño problemilla que cuento aquí por si a alguien más le pasa lo mismo.

Resulta que trabajando con la versión 1.4 de java, cuando tengo un Document correspondiente a un fichero xml guardado en memoria, haciendo toString() del Element raiz del Document, me devuelve un String con el contenido del fichero xml.

Sin embargo, ¡sorpresa!, en la versión 1.5 de java este método toString() ya no devuelve el String el formato xml, sino que devuelve una cosa rara, cortita, que no vale.

En Bug ID: 6181019 REGRESSION: org.w3c.dom.Element.toString() no longer returns the xml document: "toString" está comentado este problema con más detalle.

Contar líneas de código

Hay una cosa que descubrí hace ya bastante tiempo, pero que me llamó mucho la atención por su simplicidad, y es el cómo se pueden contar las líneas de código de un programa de una forma simple.

En su momento, cuando me ví en la necesidad de contar las líneas de código que habíamos hecho en el trabajo, y de esto hace mucho y no había las herramientas que hay ahora o, al menos, no se encontraban de forma gratuita en la red, me puse a pensar en ello y buscar por internet.

Lo de contar líneas tal cual (contar retornos de carro) me parecía poco fiable. Si alguien deja muchas líneas en blanco, no hace muchas líneas de código, pero se cuentan como tales. Los comentarios también contarían como líneas de código. Si alguien abre las llaves "{" en una nueva línea

public void funcion ()
{
...

hace más líneas de código que uno que lo pone todo seguido

public void funcion () {
...

Investigando por internet, encontré la forma muy aproximada y sencilla de hacerlo. ¡¡Basta con contar los punto y coma ";" del código!!

Como cada línea de código acaba en punto y coma (En C, C++, java y otros muchos lenguajes) esto nos da una aproximación muy buena y simple del número de líneas de código.

Además, si alguien es vago como yo y no quiere demasiada precisión en la medida, basta con encadenar unos comandos de unix/linux para contar algo parecido al número de puntos y coma

$ cat `find . -name *.java` | egrep ";" | wc -l

La primera parte saca un listado por pantalla (cat) de todos los ficheros .java que encuentre del directorio actual hacia abajo.

La segunda parte, filtra (egrep) para que en el listado sólo salgan las líneas que contienen al menos un punto y coma.

La tercera parte, cuenta (wc) las líneas del listado anterior.

El resultado es el número total de líneas de los ficheros .java que contienen al menos un punto y coma, es decir, una aproximación más o menos buena del número de líneas de código.

De todas formas, alguien que sepa un poco más de linux seguro que encuentra la forma de contar el número de ; de una forma también sencilla ...

Tutorial C y C++ , Programación de sockets con C y linux

Veo en Tutorial C y C++ , Programación de sockets con C y linux que han puesto uno de mis tutoriales en un marco y justo encima han puesto una cabecera de ellos.

El marco es directamente mi página, no es una copia, y en la cabecera ponen la página original. En fin, me parece todo bien y correcto, pero me ha llamado mucho la atención el verlo ...

17 julio 2006

El PageRank de google está cabra

Acabo de ver que después de cuatro meses de mis apuntes de programación. por fin tiene un PageRank. Le dieron uno de cero al poco de crear la página/dominio. Ahora tiene uno de 4, que es más o menos lo que tenía mi antigua página www.geocities.com/chuidiang.

Sin embargo, veo que el page rank actual está un poco tonto.

Mi diario de correr y bicicleta tiene un pagerank de 3. Si miro, según google, las páginas que enlazan a él, no hay ninguna. Tampoco tiene apenas visitas. Sin embargo, este diario de programación tiene sólo un pagerank de 2. Hay varias páginas que enlazan a él (según google) aparte de la mía y además tiene unas cuantas visitas diarias.

¿Cómo es posible esto?.

También hay otro mito que no sé si es real. Supuestamente con un pagerank más elevado tus páginas salen más arriba en los buscadores. Sin embargo, desde que mis apuntes de programación han pasado de pagerank 0 a pakerank 4 (el viernes o el sábado pasado), no he notado ningún cambio en el número de visitas.

Sin embargo, de vez en cuando sí noto cambios bruscos que duran temporadas largas de vez en cuando. Por ejemplo, el número de visitas se ha reducido casi a la mitad, de forma progresiva, desde mediados de Junio sin razón aparente (ver gráfico).

13 julio 2006

Ficheros KK

En todo proyecto informático que se precie hay uno o más ficheros "kk", que no sirven para nada, que nadie usa, pero que si se te ocurre borrar el proyecto deja de funcionar.

También suele haber varias versiones de ejecutable, cuyos ficheros se llaman así ejecutable_bueno.exe, ejecutable_nuevo.exe, ejecutable_hoy.exe, ejecutable_ultimo.exe. Está claro que esta nomenclatura de nombres es la más adecuada para saber cual es el que hay que arrancar, en función de que se quiera el bueno, el nuevo, el de hoy o el último.

También suele haber varias versiones antiguas, etiquetads ejecutable_antiguo.exe, ejecutable.exe.bak, ejecutable.exe.old, ejecutable_viejo.exe. De esta forma también es fácil saber qué se debe recuperar, según se quiera el old, el viejo, el bak o el antiguo.

Rizando el rizo, a veces también hay líneas de código que nunca se llaman, ni poniendo un breakpoint con el debugger en ellas, ni System.out, ni printf, ni de ninguna manera, pero ¡Ay de tí como se te ocurra borrarlas!. El ejecutable dejará de funcionar.