Novedades en el tutorial

Después de una larga vacación, estoy retomando el tutorial (ni tan larga, hace unos meses hice una corrección al Ejemplo1).

Inicialmente he traducido el ejemplo3 al inglés, y pues veremos de hacerlo pronto con el ejemplo4, para luego poner algún ejemplo mas. Ah si, también he subido todo el código al repositorio en sourceforge (a pesar que los .zip de cada ejemplo, vienen con código fuente incluido):

Saludos.

P.D. Acabo de añadir a las descargas un solo comprimido con todos los ejemplos: Ejemplos del tutorial

Saludando a una vieja amiga

Pues hace unos años cuando adquirí una nueva PC (una Pentium IV), pude pasar al almacén mi valiente Pentium. Y unos años después llegaron a mi restos de un par de PCs MMX, pude revivir una usando algunas partes de mi Pentium, y de una manera muy mal agradecida, la dejé en el olvido.

Pero pasaron los años y la MMX que la usaban mis padres, murió (no se si la tarjeta madre o el procesador), y pues entre prueba y prueba, vi que mi valiente Pentium, seguía viva, razón por la que decidí rectificar mi error, pero esta vez con piezas de la MMX.

Y aquí están las fotos de mi trabajo, hasta parece arte jeje, tuve que limpiar mucho, pero el resultado fue bueno.

Aquí la estaba limpiando

Limpiando mi pc

Ya con algunas piezas

Ya con algunas piezas, aunque sin los buses aún

Aqui ya levantando D.O.S. o como quise pensar… 133 Megahertz de puro poder jeje.

133 megahertz de puro poder

Y así quedó, aunque me falta instalarle el mítico windows 95.

Así quedó, que linda.

Y para comentar, es una:
Pentium de 133 Mhz (con turbo)
Tarjeta Madre M535
48Mb de RAM
4Gb de Disco Duro Western Digital
Tarjeta de video Trident con 4Mb de memoria
Tarjeta de video Yamaha (PCI)
Lector de CD LG
Y le agregué una tarjeta de red D-Link y para los que dicen “Ni USB tiene”, pues le añadí una tarjeta adaptadora de USB. Falta ver si funcionan.

Ahora solo me falta ponerle nombre, e instalar el Sistema Operativo y los jueguitos que tenía (ya quiero jugar Earthworm Jim) jeje.

Un poco de hacking, seleccionar contactos en facebook

Creo que todos los que hemos creado un evento en facebook o administramos un grupo, alguna vez necesitamos seleccionar a todos los contactos, pero nos da flojera hacer click en todos los contactos, para esto algunas personas desarrollaron un script javascript que funcionó por un tiempo.

Este script, buscaba un id ‘friends’, pero como los cuates de Facebook no son tontos, hicieron que el id del elemento a buscar se genere aleatoriamente, ahora en vez de usar el id estático: ‘friends’, se genera una cadena extraña.

Para pillar la cadena, debemos usar un addon de firefox llamado ‘firebug’ o en el navegador Safari, una vez habilitadas las herramientas de desarrollo, solo hay que iniciar el Inspector Web, creo que en IE también hay una extensión similar

Tanto en Firefox, como en Safari, se debe hacer click en el ícono de la lupa para inspeccionar elementos, y buscar el panel principal de la lista de contactos a añadir, para luego encontrar su id en el código fuente.

Captura de pantalla fb

Una vez que tenemos el id, pues solo necesitamos ejecutar el script que ya todos conocen (reemplazando el id donde se debe), aunque le hice unas pequeñas modificaciones.


javascript:elms=document.getElementById('AQUI_VA_EL_ID').getElementsByTag
Name('input');for(var fid in elms){if(typeof elms[fid] === 'object')
{elms[fid].click()}}

Para los que sabemos un poquitín de javascript, vemos que la cosa es fácil, el script busca el ‘div’ que contiene la lista de contactos (usando el id del ‘div’), dentro busca los elementos de tipo ‘input’ (que serían los checkbox), y les hace click.

No es tan simple para los que no son devs, pero yo creo que ayuda.

Problemas con Mac OS X 10.6.7 (Mail y Dashboard)

El problema
Hace un tiempo apliqué la actualización 10.6.7 del OSx, pero esto me causó algunos problemas:
1. No podía quitar el Mail (command+Q), se cerraba la ventana, pero la aplicación seguía corriendo (el menú no se cerraba), y la única forma de cerrar el Mail, era matando el proceso.

2. El Dashboard se congelaba, por ejemplo, tengo el Dictionary como widget del Dashboard, y ni bien escribía una o dos letras, o cambiaba el diccionario, se congelaba el dashboard, y lo mismo pasaba con los demás widgets. Y al igual que el Mail, solo podía reiniciar el dashboard, matando el proceso.

¿Qué hize?

  • Lo primero que hice, fue limpiar la PRAM (Reiniciar presionando option+command+P+R), no funcionó
  • la segunda posibilidad, era problemas en el disco, revisé el disco con la utilidad de discos, y me pidió reparar el disco arrancando desde el DVD del Leopard. Reinicie mi macbook presionando la tecla C (para que inicie desde el disco), y reparé el disco y los permisos. Pero el problema no se fue.
  • En este punto, empecé a navegar en el Internet para buscar posibles soluciones. Encontré que el problema del Mail, tiene que ver con las cuentas IMAP (por ejemplo mi cuenta en google mail), recomiendan en un foro eliminar las cuentas IMAP del Mail, reiniciar la macbook y volver a añadir la cuenta. Ya eliminé mi cuenta de google mail del Mail, y vi que el problema se arregló porque ya puedo quitar el Mail normalmente, después de publicar esta entrada, reiniciaré mi macbook y añadiré nuevamente la susodicha cuenta.

    Para el otro problema del dashboard, no encontré algún foro que me de información útil. Primero pensé que podría ser algún widget problemático, los fui quitando uno a uno y el problema seguía. Luego busqué si había instalado algún widget de terceros para borrarlo y ver si este era el problema, pero nada, no tenía nada “extra” instalado.

    Entonces recordé que puedo ver los logs del sistema en la Consola (Applications/Utilities/Console), y noté ahí que occurrían ciertos eventos de advertencia de este tipo:
    DashboardClient Warning [110ee0] |Mingler|Error| failed to connect to the server: NSInvalidReceivePortException connection went invalid while waiting for a reply

    Ya con este log, hice la búsqueda en google y llegué a:
    Apple Support Communities

    Donde en resumen dice que de hay que borrar:
    [UserHome]/Library/Application Support/SyncServices/Local
    Y listo, desaparecen las advertencias de la consola, y ya no se congela el dashboard.

Y eso es todo, espero les sea útil, y no se tarden tanto como yo en resolver el problema.

Ejemplo 4 del tutorial de Jasper Reports API, liberado!

Después de muucho tiempo… (creo que Britney Spears saca un disco mas rápido de lo que yo escribo un ejemplo para el tutorial jeje), pero aquí está, el cuarto ejemplo del tutorial.

En este ejemplo, implementé un reporte agrupado, aunque lo más novedoso e interesante para mi gusto, es que no usé simplemente SQL para recuperar los datos del reporte, sino que usé JPA, y no en una aplicación web, sino en una aplicación de escritorio, gracias a Hibernate (y como siempre usando Mysql).

Espero disfruten el cuarto ejemplo.
Ejemplo4: Reporte agrupado usando JPA

Second chapter of the JasperReports tutorial released!

Hi, today I had released the second chapter of the Jasper Reports API tutorial (I had translated the second sample to English). This because the tutorial had reach the 100 sample downloads some days ago.

First sample using the JasperReports API

I hope this can be understood easily, and I am waiting for your comments.

Thanks.

Tercer capítulo del tutorial de JasperReports

Hola a todos, primero pedir disculpas si es que alguien sigue el tutorial de JasperReports, se que me demoré mucho en publicar este siguiente ejemplo, pero ya está aquí, es un ejemplo mas completo, usando una base de datos y utilizando el JRViewer.

Espero les sea de utilidad.

Ejemplo3: Reporte con datos

Espero sus comentarios.

Compilando con Ant en Leopard.

En el proyecto en el que trabajo, usamos Ant desde IntelliJ IDEA para compilar y desplegar el mismo.

Necesito ejecutar unos tests con TestNG desde Ant, pero no desde IDEA, sino desde consola, y al querer ejecutar los tests salió una excepción:

Exception in thread "main" java.lang.UnsupportedClassVersionError: Bad version number in .class file

Esta es debido a que se está usando un JDK para ejecutar la aplicación que es una versión anterior al JDK con que se compiló la misma.

Verificando en algunos foros, me doy cuenta que Ant usa el JDK que esta referenciado por la variable de entorno JAVA_HOME, y como en OsX, se puede definir el JDK a usar por defecto de otra manera, entonces yo no tenía definida la variable JAVA_HOME.

Para definir que quiero usar el JDK 1.6, tengo que editar el archivo .profile del folder Home de mi cuenta de usuario, claro que primero tengo que habilitar la característica para ver todos los archivos en Finder (o usar mUCommander si prefieren).

Para habilitar el ver todos los archivos en el Finder:
1. En la consola, ejecutar: defaults write com.apple.Finder AppleShowAllFiles YES
2. Reiniciar el Finder (alt + click derecho en el ícono del Finder y “Forzar reinicio”).

Para volver a la normalidad, los mismos pasos, pero se cambia el “YES” por “NO”

Ahora hay que editar el archivo “.profile” que se encuentra en la carpeta “home” de la cuenta de usuario (dicha carpeta tiene el mismo nombre del a cuenta de usuario) y añadir esta línea:

export JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Home

Además y puse en este archivo la ruta a ANT:

export ANT_HOME=/Volumes/Work/externalProjects/apache-ant-1.7.1
export PATH=$ANT_HOME/bin:$PATH

Para verificar que se usa el JDK correcto, traté de compilar el proyecto, pero me salió una excepción de memoria insuficiente:

java.lang.OutOfMemoryError: Java heap space

Entonces, tenemos que aumentar el tamaño de la memoria que puede usar Ant para compilar el proyecto, ésto se puede hacer de varias formas, pero elegí el usar la variable de entorno ANT_OPS, es decir añadí esto al archivo “.profile”:

export ANT_OPTS=-Xmx256m

Y listo, con eso ya solucioné mis pequeños inconvenientes al compilar con Ant en Leopard.