BlueJ, el editor para aprender el lenguaje java.

Bluej es un sencillo editor de código java con el objetivo de servir como una herramienta de aprendizaje de dicho lenguaje. Permite ver la estructura de clases en forma gráfica, editar textualmente y en forma gráfica el código. Edita, compila y depura código java.

Pantalla Bluej
Pantalla Principal de Bluej

El editor está hecho en java lo que le permite ejecutarse en Windows, Unix, Linux y Mac que tengan instalado la máquina virtual de java. Otra de las ventajas: es gratuito. Puedes descargar la última versión desde aquí. Cuenta con un tutorial en español en formato pdf.

Pantalla del Editor de Código
Pantalla del Editor de Código

 

Webmin 1.610 no muestra las particiones de formato GPT.

La versión de webmin 1.610 trae un bug que no permite ver ni editar las particiones de un disco con formato GPT en CenOS 6. Esto ya ha sido detectado por varios usuarios y ya se publicó un archivo para solucionar este problema. En ésta página de bugs del proyecto puedes descargar el archivo e instalar el parche. Si no, tendrás que esperar hasta la nueva versión de webmin donde ya corregirán el error.

Una vez que descargues el archivo fdisk-lib.pl que se encuentra en esa página cópialo a la carpeta donde se encuentra el original, reemplazándolo. En mi caso se encuentra en /usr/libexec/webmin/fdisk/.

Una vez reemplazado webmin mostrará la partición “desaparecida”.

OCAJP 7. Definir la estructura de una clase java.

Definir la estructura de una clase java.

Las clases java tienen dos principales elementos: métodos y campos (fields). Los métodos en otros lenguajes son equivalentes a las funciones y los campos son lo equivalentes a las variables. En java ambos elementos son conocidos como miembros de la clase. Un método es una operación que puede ser llamado por otros métodos. Un método puede recibir datos por medio de Parámetros. Un método puede regresa un valor y declara de que tipo será este valor. Los Parámetros recibidos y los valores regresados por un método son representados por variables.

Las clases java hacen o crean objetos. Un objeto es una instancia creada en tiempo de ejecución  de una clase  ubicada en la memoria utilizada por un programa java. El estado de un programa es representado por todos los objetos de las diferentes clases que lo conforman.

La declaración completa de un método es conocida como la firma (signature) del método.

Ejemplo de una clase simple de java.

Simple Clase Java
Simple Clase Java

Para hacer comentarios de varias líneas en el código, java utiliza el estilo de C.  Pra iniciar un comentario se utilizan los caracteres /* y para terminar el comentario */  Java ignora todo lo contenido entre ese par de caracteres. Si se utiliza el formato de comentario que se muestra en el código anterior se logra a través de la herramienta javadoc generar automáticamente documentación de la clase en formato html. Otra forma de hacer comentarios, en una linea es usando los caracteres //. Todo lo que escriba después de esos caracteres será ignorado por java.

La primera línea de código después del comentario sirve para definir la clase. Se especifica primeramente un modificador de acceso (public) que indica que cualquier clase de cualquier paquete de clases puede acceder a nuestra clase y utilizarla. Se puede omitir este modificador de acceso (public) lo que le indicaría a java que a la clase definida sólo pueden acceder a ella clases del mismo paquete. Un paquete (package) en java, es la forma en que java organiza las clases y demás elemento, es una colección de clases que realizan una función similar. Paquete (package) es otro elemento de la estructura del código de la clase. Sin embargo el el ejemplo antes visto, no se especifica. Si se especificara debería ser la primera línea ejecutable en una clase, antes de definir la clase.

Como en el ejemplo no se especifica ningún paquete, el directorio pertenece a un paquete por default que lo representa el directorio donde fue creado el archivo que contiene el código de la clase. Todas las clases que se codificaran en el mismo directorio y sin especificar el paquete, pertenecerían al mismo paquete default.

Enseguida del modificador de acceso public se encuentra la palabra reservada class que le indica a java que se va a definir una clase. Enseguida se debe proporcionar el nombre que se le va a asignar a la clase, en este caso EstructuraClaseJava. El nombre de la clase puede ser cualquiera que le quiera dar el programador. Por regla de java se utiliza una palabra o palabras que indiquen un sustantivo ya que representarán un objeto en sí. Por regla el nombre de la clase empieza con Mayúscula y se utiliza el formato UpperCamelCase, es decir, si el nombre de la clase está compuesta de varias palabras, cada palabra debe empezar con mayúscula y el resto de la palabra con mayúsculas. Esto es sólo por convención, ya que el compilador java no marcará error si solo se emplean minúscula o sólo mayúsculas o una mezcla de estas, el nombre será válido para java.

Después del nombre de la clase se inicia un bloque que contendrá tanto los campos como los métodos de la clase. Recuerde que un bloque se forma con los corchetes de apertura y cierre. Por conveniencia por lo general se especifican primeramente todos los campos (fields) de la clase y enseguida los métodos, pero no es necesario, métodos y campos se pueden distribuir de otras formas, pueden ir primero los métodos y después los campos, o en forma intercalada, el compilador no marcará error.

En la siguiente linea del código de ejemplo, se declara una variable de instancia o campo x. En éste caso primero se establece el modificador de acceso del campo como privado (private). Ésto indica que a ese campo, otras clases, no lo pueden acceder directamente. Enseguida del modificador de acceso se declara el tipo del campo. Un tipo puede ser el nombre de una clase o un tipo primitivo de java, en este caso es int (número entero).  Enseguida se especifica el nombre de la variable o campo.  Por último punto y coma (;) que define el fin de una instrucción java. Java recomienda que el nombre de los campos, si es una sola palabra, se escriban con minúsculas. Si esta compuesta por varias palabras, la primera palabra inicie con minúsculas y el resto, la primer letra de la palabra inicie con mayúscula y el resto de la palabra con minúsculas al estilo lowerCamelCase.

El siguiente elemento en el ejemplo es un constructor. Esta estructura comienza especificando un modificador de acceso (public) y un nombre que es exactamente igual al nombre de la clase y un conjunto de paréntesis de apertura y cierre. Dentro de esos paréntesis pueden ir una serie de parámetros, pero en el ejemplo están vacíos. Enseguida le sigue un bloque de código que inicia por un corchete de apertura y termina con un corchete de cierre como ya hemos visto. Más adelante en otro tema se tratará específicamente de esta estructura llamada constructor. Los constructores no regresan ningún tipo de valor.

El último elemento en el ejemplo es un método. Se especifica el modificador de acceso (public), el tipo de dato a regresar por el método (int) en este caso un tipo primitivo entero, el nombre del método que por convención de java se declara de la forma lowerCamelCase visto anteriormente, un paréntesis de apertura, una lista de parámetros separados por comas y el paréntesis de cierre. A esta declaración le sigue un bloque de código como los que ya hemos visto. El nombre del método es metodoDeEjemplo. Lo convencional es que inicie con el nombre de un verbo ya que por lo generar los método representan acciones.

En el ejemplo el método solo recibe un parámetro del tipo entero y de nombre m. Si el método recibiera más parámetros, cada par tipo y nombre de variable, irían separados por comas. Como éste método  debe regresar un valor dentro del bloque del método debe haber una instrucción return que debe regresar un dato del tipo especificado en la definición del método, en nuestro caso de tipo entero.

No pueden existir dos métodos con la misma firma (signature) en una misma clase. La firma de un método esta compuesto por el nombre del método, el número de parámetros, el tipo de parámetros y el orden de los parámetros en la lista de parámetros. Los constructores también tienen una firma. Una firma no incluye el tipo de dato que retorna un método.

 

 

 

 

OCAJP 7. Java Básico. Definir el alcance de las variables.

Definir el alcance de las variables.

Los parámetros de un método en una clase son conocidos como variables temporales. El valor y el nombre de estas variables expiran cuando el método llamado regresa el control al código que lo invocó. Cualquier variable definida en la lista de parámetros del método o dentro del cuerpo del método permanecen en memoria sólo lo que dura  en ejecutarse el método llamado.

En java existen cuatro tipos de variables:

  • Variables de Instancia (Campos No-Estáticos). Los objetos almacenan su estado individual en campos no-estáticos. Son declarados sin la palabra clave static. Sus valores son únicos para cada instancia u objeto.
  • Variables de Clase (Campos Estáticos). Son campos declarados con el modificador static. Hay sólo una copia de esta variable para todas la instancias de la clase.
  • Variables Locales. Es en donde los métodos de los objetos almacenan su estado temporal. Se declaran parecido a los campos. No existe una palabra clave para especificar que una variable es local sino que depende donde la variable es declarada: dentro de los corchetes que definen un método. Son accesibles sólo dentro del método que las declaró y no son accesibles del resto de la clase.
  • Parámetros. Son las variables que conforman la firma de un método. Son siempre clasificados como variables y no como campos. También se encuentran en otras construcciones que aceptan parámetros como los son los constructores y manipuladores de excepciones.

Llamaremos campos a  las variables de instancia y de clase. Llamaremos variables a las anteriores más las locales y parámetros. Un campo o field está disponible en memoria el tiempo que el objeto que la contiene permanezca en memoria. En java una variable local debe de ser declarada antes de ser  usada.

El scope  ó alcance de las variable se refiere en que lugar del programa una variable específica puede ser usada o referenciada. Por lo general las variables pueden ser usada dentro del bloque de instrucciones al que pertenecen y no fuera de estos. Un bloque  se crea cada vez que tú abres y cierras corchetes ya sea para definir una clase, método o cualquier otra construcción que se verán más adelante. Más específicamente, el scope o alcance de una variable local abarca desde donde se declaró, hasta el corchete de cierre del bloque al que pertenecen El tiempo de vida de las variables depende del scope o alcance donde fueron declaradas. Sólo se puede declarar una vez una variable dentro de un bloque.

El alcance de los parámetros en un método, es todo el método completo. Las variables declaradas en la parte inicial de un ciclo for es el ciclo entero. Se puede declarar varias veces una variable local con el mismo nombre dentro de bloques no anidados dentro de un mismo método, pero es inválido declarar la variable local en bloques anidados.

Scope de Variables
Scope de variables

 

Kettle, una herramienta gratuita para extraer, transformar y cargar datos.

Todo trabajador en informática nos hemos topado con la necesidad de pasar datos de una base de datos a otra o de cargar datos a una base de datos desde archivos de texto , hojas de cálculo o archivos dbf, etc.

Y en ocasiones hay que subirlos o pasarlos en un formato diferente al del origen o tener que hacer correcciones u operaciones con los datos antes de que lleguen a su destino. El hacer los programas para llevar a cabo esas tareas llevaba tiempo, dinero y esfuerzo.

Afortunadamente ya existen herramientas tanto comerciales como gratuitas para llevar a cabo estas operaciones de forma casi automática y de forma gráfica. Una de esas herramientas que he utilizado mucho es Kettle de Pantaho. Una excelente herramienta ETL (extracción, transformación y carga) y además gratuita.

Esta desarrollada en java y permite hacer trabajos y transformaciones en forma gráfica. Para operaciones más complicadas de transformación de datos, permite crear tus propios scripts en javascript o java. Permite además guardar todos tus trabajos y transformaciones en un repositorio en una base de datos para poder ser compartidas y ejecutadas por otros miembros de la organización u equipo.

Puedes emplear las librerías java en las que se basa este software para integrar kettle en una aplicación java, ya sea desktop o web, y desde ahí ejecutar los trabajos y transformaciones.

Posiblemente de lo que adolece algo esta aplicación es de que no tiene una buena documentación, pero junto con la aplicación se descargan unos trabajos y transformaciones de ejemplos. Además existen unos unos libros que hablan de esta herramienta.

Se las recomiendo ampliamente. Pueden descargar la última versión desde el sitio de Kettle en Sourceforge, selecciones la versión que dice estable y la más reciente. Para ejecutar la aplicación necesitan tener instalado en su máquina Java 6 o mayor.

Les dejo una pantalla de este excelente software.. ¡saludos!

Kettle en acción
Kettle de Pentaho

 

Mapa conceptual de temas para certificación OCAJP

Mapa conceptual de los temas que abarca el examen Java SE 7 Programmer I para obtener la certificación Oracle Certified Associate, Java SE 7 Programmer (OCAJP)

Temas Oracle Certified Associate, Java SE 7 Programmer
Temas Oracle Certified Associate, Java SE 7 Programmer

En posteriores entradas del blog iremos viendo cada uno de los temas.

Informix: -23103 – code-set conversion function failed due to illegal sequence or invalid value

Resulta que necesitaba duplicar una base de datos informix en mi trabajo para probar unas nuevas implementaciones al sistema en producción.  La versión de informix en producción era 9.x. Me baje la versión de desarrollo de Informix que es gratuita pero versión 11.x. El sistema operativo de producción es Solaris 10. Mi ambiente de desarrollo Windows 7. Instalé la versión de desarrollo de Informix con algunos pequeños detalles pero al final la instaló y funcionó. Me pude conectar a ella sin problema.

Los operadores de la base de datos en producción me pasó el respaldo completo de la base de datos generada con el comando dbexport, una carpeta formada con el nombre de la base de datos más la extensión exp, Adentro trae los datos y los c comandos para crear la base de datos completa. Después de crear el Dbspace donde iba a estar la Base de Datos de Desarrollo me dispuse a crear la Base de Datos con el respaldo proporcionado.

Ejecuté el comando dbimport nombre_base_de_datos nombre_-d dbspace, el comando inició sin problemas, me aparecía en pantalla los comandos que iba ejecutando, la creación de las tablas y la carga de datos, de pronto se detuvo en la carga de los datos de una tabla, el mensaje que me arrojó fue:

“-23103 – code-set conversion function failed due to illegal sequence or invalid value”

Pues a investigar de que se trataba. El problema era el Locale de la base de datos que estaba importando y el locale del ambiente DOS desde donde estaba ejecutando el comando dbimport. Cada base de datos guarda el locale en el que fue creado. Echando un vistazo a las variables de la ventana DOS donde estaba ejecutando el comando, me aparecieron con el valor por omisión de la instalación de Informix, éstas eran CLIENT_LOCALE=en_US.8859-1 y DB_LOCALE=en_US.8859-1. La primera variable de ambiente le indica a Informix el locale del cliente, la segunda variable el locale de la base de datos.

Para obtener en que locale se creó la base de datos hay que ejecutar en la base de datos sysmatser de informix el siguiente comando:

select * from sysdbslocale where dbs_dbsname = 'nombre_base_de_datos';

La columna dbs_collate es la que andamos buscando, esta columna indica el que locale está la base de datos que queremos importar. En mi caso me arrejó en_US.819. Me fui a ventana de DOS donde estaba ejecutando el comando de importación, borre la Base de Datos creada parcialemente por medio de comando dbaccess.

Establecí las variables de ambiente de la siguiente forma: SET CLIENT_LOCALE=en_US.8859-1 y SET DB_LOCALE=en_US.819

Y nuevamente ejecuté el comando dbimport y asunto arreglado.

Espero y les sea de utilidad.

SuperGIS Desktop ¿un reemplazo a ArcGIS Desktop?

SuperGIS Desktop, un producto de SuperGeo Technologies Inc. o simplemente SuperGeo, es uno de varios productos orientados a la tecnología SIG desarrollados por esta compañía. Es un SIG (Sistema de Información Geográfica) de escritorio con una interfaz y funcionalidad muy parecida al ArcGIS de Esri. Enseguida un video introductorio de la compañía donde muestran los diferentes productos que desarrollan.

Desde su página permiten descargar los distintos productos totalmente funcionales para probarlos por un mes. Ya me he descargado tanto el software para escritorio como el de servidor. Para poder descargarlo hay que registrarse y autentificarse, ya que la licencia de prueba y la liga de donde bajar el software se envía vía e-mail.

Recomiendo bajar las versiones con fecha más reciente, los beta. Al parecer la nueva versión 3.1 trae algunos detalles que están corrigiendo. Lo que me gustó, es que a los pocos días de descargado e instalado, un representante de la compañía se pone en contacto contigo por medio del e-mail para saber tu opinión y darte soporte si has tenido algún problema con el software.

Si tienes Windows 7 o Vista, hay que hacer algunas modificaciones al sistema antes de instalar el software. Las instrucciones de cómo instalar correctamente el seoftware se encuentran en el mismo correo o en la página de la compañía.

Una vez que lo instalé, lo empecé a probar. La interfaz es muy parecida a la de ArcGIS, así que para los usuarios de éste no será muy difícil aprender a usarlo. Lee y carga archivos del formato shapefile de ESRI así como uno propietario (.geo) y algunos otros más. También soporta conexión a Personal GeoDatabase (.mdb), SQL Server, Oracle Spatial y Postgresql. Conecta a servicios OGC como WMS y WFS. Para una más detallada descripción de las características del programa pueden descargar  éste folleto.

La carga de archivos shapefiles lo hace correctamente y la navegación sobre el mapa sin problemas. En cuanto a la simbología de la las capas, no es tan avanzada como la del ArcGIS pero se defiende. Tuve problemas al querer cargar servicios WMS, no los desplegaba. Se los comenté a los de soporte y me dijeron que bajara la versión más nueva y asunto resuelto, por eso es que recomiendo bajar la versión más nueva, sin importar si es beta.

Para probar la conexión a GeoDatabases instalé Postgresql/Postgis 9.2. Una vez instalada y configurada exporté un archivo shapefile a través de la barra de herramientas Geodatabase Client que no viene por default, por lo que hay que activarla dando click derecho sobre las barras de herramienta y seleccionándola del menú flotante que aparece.

El shapefile fue exportado sin problemas y la carga igualmente. Pero al revisar la tabla creada me dí cuenta que no utiliza el tipo de campo GEOMETRY de Postgis. SuperGIS DEsktop 3.1 al parecer, utiliza su propia estructura para guardar la geometría de las features de la capa. En estos momentos estoy en espera de la respuesta de la compañía para confirmar esta característica. Ediciones sencillas trabajan bien, tanto en shapes como en la capa Potgresql.

En siguientes posts describiré con más detalle las pruebas con este software y los precios, si es que la compañía me los proporciona. Me despido dejando una captura de pantalla de SuperGIS.

SuperGIS