GNU/Linux, Java

Instalando J2SE 6 y NetBeans 6 en Linux

Una vez descargados los archivos para la instalación, como es de suponerse, entramos a la consola y nos pasamos a la carpeta en donde se encuentran tales archivos, por ejemplo, en mi caso que estoy con Mandriva la carpeta es: /home/windoctor/Descarga

Y en la consola solo ejecutamos

[windoctor@localhost Descarga]$  ./jdk-6u2-linux-i586.bin

Una vez instalado el kit de desarrollo de Java, procedemos a establecer el PATH. Para ello podemos ir y editar al archivo /etc/profile y agregar al final estas lineas:

JAVA_HOME=/home/windoctor/Descarga/jdk1.6.0_02
PATH=$PATH:$JAVA_HOME/bin
export PATH JAVA

Reiniciamos y listo! Esto cuando quisieramos compilar desde la misma consola.

Sin embargo al querer instalar netbeans seguramente pondrá un mensaje como:

Java SE Development Kit (JDK) was not found on this computer…………….

La solución puede ser agregarle como parámetro la carpeta donde tenemos el JDK, por ejemplo:

[windoctor@localhost Descarga]$ ./netbeans-6.0-linux.sh –javahome /home/windoctor/Descarga/jdk1.6.0_02

Y con esto ya comienza la instalación con el típico asistente.

Saludos!!

Seguridad&Hack/Crack, Windows

Analizando a los Antivirus

  1. PC World realizó la primera edición de los Premios PC World México 2007”, único reconocimiento en nuestro país que distingue a los mejores productos de tecnología del año. 

En el pasado año 2007, la guerra de los Antivirus por demostrar cuál es el más confiable y efectivo en cuánto a detectar y eliminar los virus se trata estuvo nuevamente muy reñido e interesante.

En esta primera Edicion Kaspesky Internet Security 7.0 obtuvo el primer lugar en su categoria como «Mejor Suite de Seguridad para el Consumidor« , en esta categoria estuvieron nomidados  Eset Smart Security (NOD32) y Symantec Norton 360.

EN MI EXPERIENCIA PERSONAL

Cuándo de analizar la seguridad de los Sistemas Operativos, Navegadores y Suites de Seguridad se trata, nunca nadie se pone de acuerdo y esto es más que lógico. Diferentes empresas realizan análisis para determinar cuál es el mejor producto, sin embargo, muchas veces estos «análisis» dejan mucho que desear, pese a que estas empresas dicen no tener ningúna preferencia ó vinculo con alguna de estas empresas que desarrollan el producto en cuestión como para pensar en una manipulación, sabemos bien, que esto no es del todo cierto.

Los premios PC World 2007 de este año, reconocieron a Kaspersky como la mejor Suite de Seguridad y a experiencia propia y a la de muchos usuarios, sumada a los análisis comparativos que realizan otras empresas, avalan este resultado.

Durante este 2007, decidi evaluar  por cuenta propia y en cierta forma de manera un tanto «empirica» y experimental a los mejores Antivirus del mercado. Durante esos 12 meses, probe la versión demo de 30 días de dichos antivirus, tales como:

  • Kaspersky
  • NOD32
  • Norton
  • AVG
  • BitDefender
  • Mcafee
  • Panda

 entre otros más. Debido a que me desenvuelvo en un ambiente en donde los virus estan a diario, en todas máquinas y unidades de almacenamiento extraibles, pensé en que podia ser un buen año para evaluar a diversos antivirus y sacar una conclusión propia.

Si bien es cierto que no existe antivirus 100% efectivo y que nosotros como usuarios finales debemos tener una navegación segura en internet, evitando entrar a sitios dudosos, tales como aquellos donde se prestán servicios como «serials, cracks, pornografia, etc«, también es cierto que muchas veces, por necesidad debemos guardar o copiar algún archivo de una unidad USB y es aquí cuándo la necesidad de contar con un buen antivirus es indispensable. (Lo mejor es usar Linux)

AVG es un excelente antivirus, que en su vesión gratuita me resulto muy efectivo, incluso mejor que muchos otros antivirus como BitDefender y Norton. Y es que a decir verdad, hoy por hoy, Norton sigue siendo uno de los antivirus más utilizados pese a su mal funcionamiento. En años anteriores, Norton cayo notablemente en su rendimiento de detección de virus, realmente pasaba por alto bastantes virus y cuándo lograba detectar a alguno, en muchas ocasiones no era posible eliminarlo o desinfectarlo. Pese a todo esto que es la misma opinión de muchos usuarios, PC WORLD siempre nominaba a Norton como uno de los «mejores». Quizá de unos dos años para acá, Norton mejoro notablemente, pero aún así, no concuerdo en lo absoluto para nombrarlo como uno de los mejores.

BitDefender hace unos años fué un ganador de estos premios PC World. En esta su última versión, me dejo mucho que desear. Durante estos 12 meses que evalué a los antivirus, de forma conciente infectaba a mi máquina para ver si el anvirus instalado era capaz de detectarlo y eliminarlo. Cuándo toco el turno a BitDefender, infecte a mi máquina con dos virus, uno muy famoso que tiene la capacidad ocultar las carpetas y crear una replica de ellas bajo la extensión .exe. Seguido de otro antivirus cuya principal seña es que al abrir la unidad de almacenamiento infectada, pone como fondo una imágen pornográfica.

El resultado de esto si bien no fué critico al grado de formatear el equipo, si trajo consecuencias serias, modifico varias entradas del registro, restringio el acceso al Administrador de Tareas, Línea de comandos, Editor del Registro de Windows, etc. BitDefender fué incapaz de detectar alguno de estos dos virus, si bien es cierto que con estas pruebas no se puede determinar el grado de efectividad de un antivirus, finalmente el usuario siempre tomará a las experiencias que tiene como parámetros para determinar que antivirus le fué más efectivo. En este caso, el resultado fué irremediable, desinstalar por completo BitDefender antes de concluir los 30 días de prueba e instalar otro antivirus que fuera capaz de eliminar estos virus.

Fué entonces cuando toco el turno a NOD32. En los últimos años, NOD32 sonaba muy fuerte entre los usuarios y a decir verdad, yo lo considero como uno de los mejores pesé a lo que a continuación relataré. Al instalar NOD32, detecto los virus anteriormente mencionados y fue capaz de «eliminarlos» ó al menos para NOD32 así fué. Sin embargo, las entradas en el registro de dichos virus seguian, el primer punto fué este, NOD32 fué incapaz de eliminar por completo las entradas del Registro. Posteriormente, me percaté que el comportamiento extraño de la memoria USB infectada aún persistia. Fué entonces cuándo en esa ocasión, inicie en mi máquina desde Linux y pude ver como dichos archivos del virus ahi estaban.

Como prueba fué cuando decidi instalar a Panda. Al realizar el escaneo con panda detecto los virus que supuestamente NOD32 ya habia eliminado. En esta ocasión, Panda fué capaz de eliminar realmente a los virus y a sus entradas del registro. Aunque para muchos, Panda es un antivirus muy malo, esto lo dicen sin ninguna base. Panda en realidad es un buen antivirus con una buena efectividad en detección y eliminación de virus, pero su peor punto en contra es la lentitud con las que realiza la transferencia entre unidades de almacenamiento, pues es Panda quien debe supervisar cada archivo copiado en busca de alguna amenaza. Esto realentiza mucho al sistema.

Llegado el turno de Kaspersky que fué el último antivirus que probe. Obtuve excelentes resultados en la detección y eliminación de amenazas. Todos los virus fueron detectados y eliminados efectivamente. Su interfaz de usuario es muy agradable a la vista, sin duda cuándo probe este antivirus me gusto bastante, paso muy bien las precarias pruebas que realice con el, elimino bien las entradas del Registro y fué el único antivirus en detectar como una amenaza a la parte cliente de un troyano.

Los demás antivirus, tuvieron un desempeño aceptable, todos con pros y contras y a una opinión muy personal que puede servir de base para algún usuario que este en la elección de algún Sistema Antivirus, aqui propongo una lista de los 5 mejores Antivirus basados en mi experiencia personal que tuve estos 12 meses pasados y también en base a los diferentes análisis hechos por varias empresas:

  1. Kaspersky Internet Security 7.0
  2. Mcafee VirusScan 2008
  3. Panda Internet Security
  4. AVG Internet Security
  5. NOD32 v3.0
Bases de Datos, MySQL

Transacciones en MySQL

 

El concepto de «Bases de Datos Transaccionales» es un sinónimo de fiabilidad superior a las Bases de Datos comúnes. Las Transacciones son ampliamente utilizadas en Sistemas Bancarios por mencionar solo un ejemplo.

Una Base de Datos Transaccional alberga la idea de «o todo ó mejor nada». Para más información en wikipedia.org´

A grandes razgos, la idea es que al momento de que estamos ejecutando por ejemplo una sentencia UPDATE, esta sentencia no tenga ningún efecto hasta que nosotros lo indiquemos con COMMIT. Por ejemplo;

UPDATE bd SET campo=’valor’ WHERE id=1;

Normalmente, al ejecutar la sentencia de arriba, inmediatamente los cambios se reflejarian. Pues bien, el concepto de transacción va enfocado a que al ejecutar dicha sentencia no pase nada!! Y los cambios sean realizados hasta que escribamos la sentencia COMMIT.

UPDATE bd SET campo=’valor’ WHERE id=1;

………………

………………

COMMIT; //Cuándo ejecutemos COMMIT es cuándo hasta ese momento todas las sentencias que le preceden tendrán efecto! antes no.

Esto es especialmente útil en muchos casos cuando debemos ejecutar varias sentencias SQL pero sabemos que si alguna de ellas falla por X razón entonces todo estará mal, los datos corrompidos y eso es un grave problema! Entonces, es cuando podemos pensar en usar Transacciones, si en alguna sentencia ocurre un error, se ejecuta ROLLBACK y con esto NADA se modifica, todo vuelve a su estado original, y en cambio, si todo salio bien, se ejecuta COMMIT y los cambios se realizan!

– UN SENCILLO EJEMPLO

Es importante aclarar que para trabajar con Transacciones, las tablas deben de ser de tipo InnoDB y no MyISAM, si son de este último tipo NO funcionará así que antes de continuar deben asegurarse que usarán una tabla InnoDB. En este ejemplo, usaremos la base de datos addressbook que se utilizo en el ejercicio de «Creación de Reportes en Java»

La descarga la pueden hacer aqui (click derecho y guardar como ó de lo contrario les aparecerá que no existe la página). Dentro de la carpeta esta el script sql el cuál se debera ejecutar para crear la BD.

La única tabla que contiene es de tipo MyISAM por lo cuál es necesario cambiarla a InnoDB. Para ello desde la línea de comandos de MySQL se escribe la siguiente sentencia:

 ALTER TABLE `addressbook`.`contacts` ENGINE = InnoDB;

 No es necesario trabajar con esta tabla, cada uno de ustedes puede trabajar con cualquier BD que ya tenga, esto solo es a modo de ejemplo.

Una vez que ya esta todo listo, abriremos dos ventanas de la línea de comandos de MySQL. Para mayor comodidad y a modo de visualizar mejor los resultados, cambiaremos el color de fondo a una de ellas y a la otra la dejaremos así.

Ahora bien, este ejercicio consiste en usar transacciones, modificar el campo Telefono de la persona que tiene el id=57. Como se sabe, los cambios no surtirán efecto hasta que nosotros lo indiquemos con la sentencia COMMIT. En una ventana, ejecutamos lo que muestra la siguiente figura:

transacciones_mysql

 Observamos que la persona con el id=57 tiene un valor de «1234567» en el campo Telefono. Ahora bien, en la otra ventana que tenemos disponible es donde iniciaremos la transacción:

transacciones_mysql2

Al teclear las sentencias mostradas en la anterior figura, nuevamente nos cambiamos a la otra ventana y ejecutamos por segunda vez la consulta SELECT * FROM contacts;

Al ejecutar tal consulta NO observarán el cambio de teléfono. Notarán que sigue teniendo el valor de 1234567. Esto pasa debido a que como ya comentamos, se trata de una transacción y aún no aceptamos (commit) o rechazamos (rollback) los cambios. Ahora, si nuevamente volvemos a la ventana en donde se inicio la transacción y tecleamos el COMMIT, los cambios ya tendrán un efecto:

transacciones_mysql3

Para aplicar esto de las Transacciones desde Java y de igual forma usando MySQL, este link les servirá en su aprendizaje:

http://www.proactiva-calidad.com/java/jdbc/transacciones.htm

Si te ha servido la información proporcionada en este artículo, te agradeceria dejarás algún comentario!

Bases de Datos, Java, MySQL, Programación

Creación de Reportes en Java – Parte III

Si has llegado aquí sin leer la primera y segunda parte, debes leerlos antes de continuar:

Ir a la Segunda parte

En esta última parte del tutorial veremos como ejecutar desde nuestra aplicación Java el reporte que ya hemos diseñado.

Si se percatarón que al ejecutar el reporte desde la vista de diseño, automáticamente se genero un archivo con el mismo nombre que el reporte pero bajo la extensión .jasper. Este archivo es el que deberemos mandar a llamar desde nuestra aplicación java.

Existen varias clases que nos serviran para ejecutar al reporte desde nuestra aplicación, por ejemplo la clase JasperPrint, JasperReport, etc.

Todas estas clases se encuentran en el paquete net.sf.jasperreports y dicho paquete esta en la libreria jasperreports-2.0.3.jar.

Aqui hay algo importante que señalar, cuando se descarga el programa de iReport trae consigo mismo a la libreria de JasperReport (recordemos que la que genera en si los reportes es JasperReport, iReport es solo la herramienta visual para diseñar los reportes y hace uso de JasperReport), además tambien trae algunas otras librerias que son necesarias para poder ejecutar los reportes y además algunas otras librerias que serán utiles por ejemplo cuando se desee generar reportes con gráficos, histogramas, exportar a excel, etc.

Entonces, lo que se hace cuando se trabaja con el programa de iReport, es propiamente diseñar el reporte ahi, una vez compilado, el archivo .jasper que nos genera lo copiamos a nuestra carpeta del proyecto, luego abrimos NetBeans, se escribe el código pero obtendremos algunos errores pues NetBeans no sabrá en que paquetes se encuentran las clases que arriba mencione (JasperPrint, JasperReport, etc). Entonces lo que se hace es agregar la libreria jasperreports-2.0.3.jar (panel izquierdo, click derecho en Libraries–add Jar/Folder) y con esto ya no obtendremos errores.

Ahora bien, no solo era necesario agregar esa libreria, también es necesario agregar otras más que como ya comentaba son necesarias al momento de ejecutar el reporte. Una vez que se tienen tales librerias, ahora si se proseguia a escribir el código y listo!!

¿A donde voy con todo esto?… Resulta que ahora no estamos usando el programa de iReport de forma independiente! Estamos usando el plugin de iReport para NetBeans. Por lo cuál era de suponerse ó al menos yo lo supuse, que al instalar dicho plugin, me agregaria esas librerias al path donde NetBeans busca los paquetes necesarios a importar y por lo cuál ya no iba a ser necesario agregar esas librerias en cada aplicación que generará reportes.

Sin embargo, esto no fué así. Al momento de escribir el código, obtuve errores precisamente porque no encontraba la localización de las clases JasperReport, JasperPrint, etc., clases que se encuentran como ya comenté en la libreria jasperreports-2.0.3.jar.

Entonces lo que tuve que hacer, fué copiar esas librerias que vienen al bajar el programa de iReport (ojo! dije programa de iReport, NO el plugin para NetBeans) y agregarlas a mi proyecto. Ahora bien, no estoy seguro de que esto deba ser así, sigo pensando que al instalar el dichoso plugin debe venir ya todo preparado para evitar la molestia de tener que estar agregando al proyecto esas librerias, sin embargo si no se hace así, se obtienen errores, desconozco en este momento si existe algún truco o alguna opción para evitar esto, por lo cuál tuve que agregar manualmente tales librerias.

Ahora bien, lo anterior no fué ningún problema, de hecho al momento que obtuve el error supe de inmediato que faltaba la libreria de jasperReport, sin embargo lo comentó aqui para que ustedes sepan.

En el proyecto que bajaron, existe una carpeta llamada misClases, dentro de dicha carpeta se encuentran las librerias. Si han abierto el proyecto, seguro se han percatado que en la clase ReporteAgenda hay errores:

errores_libreria.png

Entonces, lo que deben hacer es copiar la carpeta misClases a C:\ ó a la carpeta de Java ó a algun otro lado donde ustedes deseen y entonces agregar todas las librerias de dicha carpeta al proyecto de NetBeans.

agrega_libreria

Al hacer esto, ya no obtendremos los errores y podremos ejecutar el reporte desde la aplicación Java. Bastará con introducir el número de ID del contacto que se desea visualizar y presionar el Botón.

aplicacion_reporte.png

Nuevamente pongo el link de descarga del proyecto:

http://www.mediafire.com/?dz9cxgtigzt

http://www.mundobyte.net/archivos/Java_2007/Ejemplo_Reportes.zip

El archivo de llama Ejemplo_Reportes.zip

Por último les comento que para crear el ejecutable, como saben, NetBeans generá la carpeta llamada «dist » dentro de dist es donde deberan copiar la carpeta que contiene los reportes con su extensión .jasper, en este ejemplo, la carpeta es llamada «reportes». Si dicha carpeta «reportes» no esta dentro de la carpeta «dist» el programa no se ejecutará, no funcionará sencillamente por que el programa no encontrará en el path al archivo .jasper.

Esperando este tutorial les sea útil como iniciación para aquellos que recien se inician en Java y llegado al tema de Bases de Datos, reportes, impresiones, etc. Si te ha servido la información, quizá puedas tomarte la molestia de dejar algún comentario y así saber si ha sido de interés para alguien.

Saludos!!

Bases de Datos, Java, MySQL, Programación

Creación de Reportes en Java – Parte II

En la primer parte de este tutorial establecimos los parámetros necesarios para el diseño de nuestro reporte con iReport que gracias a un plugin aún en fase beta ya se puede tener iReport como modulo de NetBeans. En esta segunda parte, continuaremos con el diseño del reporte.

Ya comentaba que tenemos una pequeña paleta con algunos componentes y mencionabamos la diferencia entre el Static Text y Text Field. Ahora, prosigue hacer el diseño, es decir, la presentación visual de nuestro reporte.

La región details es la que contendrá los datos que devuelva la consulta SQL, por lo tanto, es de suponerse que estos deberán ser componentes Text Field y no Static Text.

Para insertar los componentes, los seleccionamos del panel derecho presionando con el mouse y sin soltarlo, arrastramos al área de diseño. Al igual que pasa con los controles SWING, al seleccionar un componente tenemos el panel de propiedades, así podemos modificar el color, tamaño y tipo de fuente. Entendido esto, procedemos a realizar un diseño similar al mostrado por la figura:

diseno_reporte.png

Al agregar un Text Field a nuestra área de diseño, observaremos que tienen el texto de $F{field} . Deberemos cambiar la palabra «field» que se encuentra dentro de las llaves y poner el nombre de los campos que nos devolverá la consulta SQL. Si a estas alturas hay aún algún despistado que no sabe de lo que hablo, me refiero a los campos de la consulta SQL que hicimos:

«SELECT name, telefono, email FROM contacts»

Y estos campos son los que encontraremos en el panel izquierdo al desplegar la opción de Fields. Ahora bien, para asignar esos campos a los Text Fields, basta con dar doble click al Text Field y editarlo ó bien seleccionar el TextField y en el panel de propiedades ir a la propiedad Expression y ahi cambiar el valor.

Las cajas de texto que estan en la región de pageFooter son para indicar el número de página, pongo a continuación el valor de las dos Text Field en caso de no identificar bien lo que esta escrito en la imágen.

«Page » + $V{PAGE_NUMBER} + » of «

«» + $V{PAGE_NUMBER}

Con esto, si hemos hecho todo correctamente, ya podemos tener una vista de nuestro reporte, así que podemos ir al menú Designer y ejecutar el reporte con Run report.

La figura muestra el resultado de ejecutar dicho reporte!

reporte_preview.png

Ahora, como se observa en la figura, obtenemos un reporte en base a una consulta SELECT sin ninguna condición WHERE. A menudo, en la realidad casi siempre los reportes serán bajo ciertos criterios, por ejemplo, en el caso más sencillo de este ejemplo, deseariamos mostrar los datos del contacto que tenga el id = 3.

Para ello necesitamos agregar un parámetro. En el panel izquierdo, vamos a la opción Parameters, click derecho, Add y escogemos parameters.

add_param.png

Le asignamos algún nombre a dicho parámetro. Posteriormente debemos modificar la consulta, si anteriormente teniamos:

SELECT name, telefono,email FROM contacts

Ahora solo agregaremos la clausula WHERE con el parámetro que acabamos de agregar:

SELECT name, telefono,email FROM contacts WHERE id = $P{id} 

donde $P{ } indica que se trata de un parámetro. «id» es el nombre de este parámetro.

Por último, para ver los resultados debemos establecer una valor por default. Esto se consigue seleccionando el parámetro y en el panel de propiedades establecer a Default Value el valor «1» ó del número de id que se quiera visualizar (poner el valor con comillas dobles).

Con esto al ejecutar de nuevo el reporte, ya obtendremos un nuevo reporte bajo cierto criterio.

Lo único que falta ahora es crear el código para poder llamar desde nuestra aplicación Java al reporte, por ejemplo, que al dar click en un boton, el reporte se ejecute, ya seá que mande directo a impresión ó nos muestre la vista previa como en la figura de arriba.

Esto lo veremos en la tercera y última parte de este tutorial.