7.18.2016

Key rules to implement Exceptions in Java

Java exceptions is a good mechanism to respond to unexpected conditions in our program. But sometimes a wrong implementation can cause that our program become a nightmare at production time. For instance, it can overflow our error logs with wrong information making impossible to find the problem's source.

In this post I want to show a recap of what to do and what to avoid while implementing Java Exceptions, and how to deal with the most common exceptions types.

Lets start with the rules. 


Basic rules for exceptions.


Following these three rules will help you to implement exceptions in a easier way. The rules are:


  • Be specific
  • Throw early
  • Catch late
this rules are well explained in this article.

What to avoid.

In this other article you'll find a list of anti-patterns for exceptions. In summary these anti-patterns are:


  • Log and throw.
  • Throwing just java.lang.Exception.
  • Throwing the kitchen sink.
  • Catching just java.lang.Exception
  • Destructive wrapping.
  • Log and return null.
  • Catch and ignore.
  • Throw from within finally block.
  • Multi-line log messages.
  • Unsupported operation returning null.
  • Ignoring java.lang.InterruptedException
  • Relying on getCause method.

List of common exceptions.

ArrayIndexOutOfBoundsException and IndexOutOfBoundsException.

ArrayIndexOutOfBoundsException is thrown when a portion of code tries to access
an array either at a position less than 0 or at a position greater than or equal to its length.

IndexOutOfBoundsException is the same as ArrayIndexOutOfBoundsException but applicable to collections.

You can avoid these exceptions from being thrown if you check the index position as follow:

if(index > 0 && index < myList.size()){
//Access list element.



ClassCastException.

ClassCastException extends from RunTimeException, means that it is an unchecked exception. This exception is thrown when an object fails an IS-A test. You can use the instanceof operator before casting an object to verify whether it can be cast or not.

IllegalArgumentException.

As the name of this exceptions specifies, IllegalArgumentException is thrown when a method has passed illegal or inappropriate arguments.

This Exception is usually used to validate the arguments that are passed to a method.


IllegalStateException.

IllegalStateException is used more as a signal. It notifies that a method has been invoked at an illegal or inappropriate time. For more information refer to the API documentation.

You can thrown this exception in your code to signal that a method being requested for execution can't be called for the current state of an object. 

NullPointerException.

This is the most common exception of all. This exception is thrown if you try  to access a method or a variable with a null value.

Validating if the reference we are about to use is not null is a way to avoid this exception.

NumberFormatException.

This exception is thrown when a program has tried to convert a string with an inappropriate format to one of the numeric types.




    

3.22.2016

Coming back

Today I found my old blog, i read myself five years ago.
Look at that boy.
Oh boy!
I am able to read beyond his techie articles.
I am able to identify his motivation,
hi only wants to change the world.

I'm wondering what happened with that boy.
I hope hi is still alive.

11.08.2011

Control de versiones


Introducción.

Debido a la necesidad de repartir el trabajo y que varias personas participan en la generación de los archivos o entregables, puede llegar un momento en el cual no se tenga el conocimiento de qué  versión del archivo o ducumento sea la más actualizada.

Para evitar esto, se puede implementar un sistema de control de versiones. Existen varios de estos sistemas en el mercado, por ejemplo:
  • CVS
  • Subversion
  • Git
  • Mercurial
  • Bazzar
  • Plastic SCM
Esta entrada se centra en describir qué es Subversion, conceptos básicos y arquitectura.

¿Qué es Subversion?

Subversion o también conocido como SVN, es un sistema de que administra archivos, directorios y los cambios realizados a estos. Esto permite recuperar versiones previas de un archivo o un directorio y examinar los cambios que han sufrido.
Subversion puede trabajar en un entorno de red, lo que permite ser utilizado por varias personas y diferentes equipos.

Conceptos básicos.

Control de versiones.

Un sistema de control de versiones (o sistema de control de revisiones o sistema de control de la configuración) es un sistema que da seguimiento a las versiones (o revisiones) de archivos y directorios. Lo que hace un sistema de control de versiones útil es el hecho de poder explorar los cambios que resultaron en cada versión y quién los realizo.

El repositorio.

Es la base del sistema de control de versiones, es la central donde se almacena toda la información y cualquier número de clientes se puede conectar a este.

La copia de trabajo.

La copia de trabajo es literalmente una copia local de un usuario en particular, y las tareas de comunicar los cambios realizados a los archivos recaen en el cliente de SVN.

Las revisiones.

Cuando el cliente de SVN comunica los cambios realizados cualquier número de archivos y directorios se gestiona como una transacción atómica ¿Qué significa esto? Que cuando se envían los cambios al repositorio deben de ser todos o ninguno de ellos.


Fig. Representación de las revisiones.

 

Descripción del ciclo de trabajo.

El ciclo de trabajo común con SVN se podría representar de la siguiente manera:
  1. Actualizar la copia de trabajo (update).
  2. Realizar tus cambios. Ya sea a archivos existentes en el repositorio o agregar, eliminar o mover otros archivos.
  3. Revisar los cambios.
  4. Corregir errores.
  5. Resolver cualquier conflicto.
  6. Enviar cambios (commit).

 

Arquitectura de SVN.

Un sistema de control de versiones encaja en una arquitectura cliente servidor similar a un servidor de archivos (FTP), pero a diferencia del servidor de archivos  cuenta con sus peculiaridades ya mencionadas. A continuación se muestra  detalle los elementos que contiene SVN.
Servidor: El servidor se puede descargar sin costo desde http://subversion.tigris.org/ donde también se puede encontrar recursos e información sobre su uso.
Cliente: Existen varios clientes para gestionar la copia de trabajo. Para Windows se encuentra TortoiseSVN (http://tortoisesvn.tigris.org/ ) el cual es un cliente que se incorpora al explorador y es fácil de usar.



Fig. Arquitectura de SVN. fuente: SVN-book.


Conclusiones.

El objetivo principal de SVN es gestionar las revisiones que van surgiendo, y compartir estas a través de la red con otros compañeros de trabajo, para contar con la versión más actual. Se puede encontrar información muuuuy completa en el SVN-book en línea: http://svnbook.red-bean.com/

10.21.2011

BPMN

Actualmente las empresas están en una carrera sin fin en búsqueda de la calidad total, donde pretenden encontrar la excelencia de sus servicios o productos. Para esto ellos necesitan analizar sus procesos para poder encontrar puntos de mejora en ellos. BPM es la notación que nos ayuda a representar y documentar de manera gráfica procesos y flujos de negocio.

En este post pretendo mostrar una breve introducción a BPMN, definir sus bases y la notación básica, para después entrar a detalle a los patrones de modelado con BPM.

Intro.

La documentación y modelado de procesos conlleva algunos beneficios que se ven reflejados en el producto o servicio que proporcione la empresa o institución, como lo son:

  • Comunicación de los diferentes actores que intervienen en el proceso.
  • Proporciona un enfoque orientado al trabajo.
  • Eliminan ambigüedades


El modelado de procesos según Stephen A. White “involucra la captura de una secuencia ordenada de actividades e información de apoyo. Modelar un proceso de negocio implica representar como una empresa realiza sus objetivos centrales”.


Dentro del modelado se pueden identificar tres grandes categorias de procesos:

  • Orquestación. Describe como una única entidad de negocio lleva a cabo las cosas.
  • Coreografía. Decribe el protocolo esperado entre los participantes
  • Colaboración. Describe tanto la orquestación como la coreográfia entre las entidades.


Elementos Básicos BPMN.

  • Evento de inicio.
    • Indica cuando un proceso inicia.
    • Representa los insumos necesarios del proceso.
    • No cuenta con flujos entrantes.





  • Actividad
    • Representa el trabajo realizado.
    • Consume recursos.


  • Actividad ciclo estándar.
    • Representa una actividad que debe realizarse de manera iterativa dentro del proceso.
    • Monitoreo, evaluaciones, análisis.



  • Compuerta decisiones.
    • Representa la elección de caminos alternos.


  • Compuerta paralela o switch.
    • Representa inicio de actividades en paralelo.
    • Permite sincronizar varios caminos paralelos e uno solo.


  • Tarea script.
    • Tarea que se utiliza para representar una notificación.


  • Evento.
    • Indica que algo ha pasado (un evento).
    • Delimita lago entre el inicio del proceso y su fin.


  • Evento de fin.
    • Representa los productos obtenidos del proceso.


  • Subproceso. (Creo no necesita explicación)

      •  Flujo de secuencia.
        • Representa el flujo ordenado que le sigue a una actividad o subproceso.


      • Flujo de mensaje.
        • Relaciona una tarea o un subproceso con un elemento de datos.


      • Objeto de datos.
        • Representa un objeto de información, este puede ser electrónico o físico.

      Lo que acabamos de ver son las bases para empezar a jugar con esta notación, hay que tener en cuenta que el modelado con BPM se esta volviendo uno de los conocimientos base para las personas que estan inmersas en la informática. Por último existe una gran variedad de herramientas que nos ayudan a modelar con esta notación. En lo personal les recominedo BizAgi  es una herramienta sencilla de usar y nos puede exportar nuestros modelos en varios formatos.

      3.23.2011

      Introducción a DOJO

      DOJO es un paquete de librerías de JavaScript, que nos ayudan a que el desarrollo de aplicaciones web dinámicas sea más sencillo. DOJO nos provee una serie de componentes para formularios, componentes para facilitar el intercambio de datos, manipular DOM y algunos efectos que si los desarrolláramos con JavaScript sería un poco tedioso, a demás "para que reinventar la rueda". 


      Esta entrada solo pretende ser una breve introducción a DOJO, como instalarlo, comenzar a usarlo y donde conseguir más información.


      Manos a la obra:


      ¿Donde puedo conseguir las librerías de DOJO?
      Las versiones más recientes de DOJO se pueden conseguir en DOJOToolKit. La versión más reciente al momento de escribir esto es la 1.6


      Ya tengo las librerías de DOJO pero ¿en que consiste DOJO?
      La arquitectura de DOJO es fácil de entender. DOJO consiste en tres paquetes principales:

      • dojo: Se encuentra la BASE de DOJO, o mejor conocido como el kernel.
      • dijit: Se encuentran los componentes o widgedts estables que podemos utilizar
      • dojox: Se encuentran componentes extras o extensiones a DOJO.
       NOTA: Los componentes en dojox aun no son 100% estables, se podría decir que pueden ser utilizados bajo tu propia responsabilidad.



      Fig. Arquitectura de DOJO


      ¿Y ahora como inicio?
      Primero hay que comenzar incluyendo las librerías de DOJO en tu applicación, a esto se le conoce como bootstrapping.

      Existen dos maneras de incluir DOJO en tus proyectos:
      • A través del servicio en la nube habilitando las librerías con la siguiente linea:
      <script src="http://ajax.googleapis.com/ajax/libs/dojo/1.6/dojo/dojo.xd.js" type="text/javascript"></script>



      • Pero como descargamos las librerías y las tenemos dentro de nuestro proyecto hay que incluirlas de similar manera a la anterior. Tenemos que hacer referencia a el archivo con nombre dojo.js que se enceuntra dentro del paquete de dojo. sería de la siguiente manera
      <script src="dojo/dojo.js" type="text/javascript"></script>


      Una ves que cargamos la base de DOJO, solo falta indicar que componentes o mejor dicho módulos de DOJO queremos utilizar, para configurar esto debe de ser en un bloque </script> como el que se muestra a continuación:


      <script type="text/javascript">
            // Agregamos el modulo para efectos
           dojo.require("dojo.fx");
      </script>


      Como se puede observar utilizamos una función de DOJO, dojo.require() y como parametro le pasamos el paquete que queremos utilizar en forma de cadena, en este caso dojo.fx. Y ahora si esta todo listo para utilizar este paquete. Aqui les dejo un ejemplo muy sencillo de como utilizar DOJO el ejemplo completo esta aquí 



      <html>
      <head>
          <meta charset="utf-8">
          <title>Tutorial: Hello Dojo!</title>
          <!-- load Dojo -->
          <script>
              // New: Require in the dojo.fx module

      dojo.require("dojo.fx");
      // Remember, dojo.ready waits for both the DOM and all dependencies
      dojo.ready(function(){
          // The piece we had before - change our innerHTML
          dojo.byId("greeting").innerHTML += ", from " + dojo.version;
          // Now, slide the greeting
          dojo.fx.slideTo({
              top: 100,
              left: 200,
              node: dojo.byId("greeting")
          }).play();
      });
          </script>
      </head>
      <body>
          <h1 id="greeting">Hello</h1>
      </body>
      </html>



      Del código anterior podemos remarcar lo siguiente: 



      • dojo.ready() : Funciona como un alias para la función dojo.addOnLoad(). Nos permite ejecutar una función cuando el modelo de DOM termine de cargarse.
      • dojo.byId() : Obtiene el elemento con el identificador especificado.



      Para conocer más acerca de DOJO podemos remitirnos a:


      DOJOToolkit y a DOJO Campus


      Como les comente esto solo es una pequeña introducción, hay que resaltar que esta tecnología esta creciendo muy rápidamente y debemos estar al pendiente de sus actualizaciones.