La verdadera sabiduría reside en conocer la propia ignorancia.
Sócrates

Archivos en el mes de October del 2008

Agregador de Noticias (Lector de Feeds)

Para muchos de vosotros esta entrada os resultará inútil porque ya sabéis lo que es un Agregador de Noticias o un lector de feeds. De hecho muchos utilizaréis el Netvibes (como yo), el de Yahoo, el Google Reader…

¿Qué son? ¿Para qué sirven? ¿Para qué lo necesito? Pues para muestra un ejemplo.

Mira mi página pública del Netvibes. Netvibes te posibilita tener tu página privada a la que sólo tú puedes acceder después de registrarte e identificarte, y una página pública a la que cualquiera tiene acceso. También te permite tener un listado de contactos y acceder así fácilmente a sus páginas públicas. Compartir es vivir.

La página tiene una serie de Pestañas. Yo las divido por la temática (Lecturas, Ocio, Baloncesto…). Así puedes organizar más fácilmente las noticias.

Cada pestaña tiene una serie de canales o fuentes de noticias (feeds) o pequeñas aplicacioncitas (widget). Mantengo el término inglés ya que aún no existe una traducción al castellaño suficientemente aceptada.

Los feeds son en realidad ficheros XML que publican las fuentes de noticias. En ellos se listan las últimas noticias. Cuando hay una nueva modificación, el fichero cambia y tu lector de feeds te avisa. Así puedes sin hacer nada saber cuándo se publica una nueva noticia, y controlar fácilmente las noticias leidas y las no leidas.

De esta forma puedes seguir por ejemplo este blog y las aventuras de mi gata. Te subscribes a las entradas de esta bitácora y la añades a la pestaña de tu lector que prefieras. Para añadirla puedes

  • Pinchar en el iconito  que te sale de netvibes con tu netvibes abierto (estando logeado) 
  • En tu página de Netvibes pinchas en Add Content, luego en Add a feed e introduces la URL del fichero XML.

Y nada más, espero que os sirva a los que no concíais esto y sino comentadme lo que queráis.

Eurythmics - Sweet Dreams

Esta canción se publicó en 1983 como parte del álbum del mismo nombre, Sweet Dreams (Are Made of This). A parte de que musicalmente me gusta, esta canción me impactó y marcó desde la primera vez que la escuché cuando era un tierno mozo.

YouTube Preview Image

A esa tierna edad podía entender que algunos quieren utilizarte, aunque no sea una actitud que me gustaba ni me gusta. Pero no me cabía en la cabeza que algunos pudieran querer que les utilices. Incluso que abuses de ellos !

Desgraciadamente el tiempo me ha hecho ver que la afirmación es bastante cierta, la gente siempre espera algo de tí, ya sea utilizarte a tí, o que tú les utilices a ellos.

Tan difícil es hacer algo porque sí, sin esperar nada a cambio ?

Letra

Sweet dreams are made of this
Who am I to disagree?
Travel the world and the seven seas
Everybody's looking for something
Some of them want to use you
Some of them want to get used by you
Some of them want to abuse you
Some of them want to be abused
x2
I wanna use you and abuse you
I wanna know what's inside you
(Whispering) Hold your head up, movin' on
Keep your head up, movin' on
x5
Movin' on!
Sweet dreams are made of this
Who am I to disagree?
Travel the world and the seven seas
Everybody's looking for something
Some of them want to use you
Some of them want to get used by you
Some of them want to abuse you
Some of them want to be abused
I'm gonna use you and abuse you
I'm gonna know what's inside
Gonna use you and abuse you
I'm gonna know what's inside you

Una clase dividida

"Una clase dividida" es un interesantísimo experimento en una clase de primaria (tercer grado) en EEUU sobre la segregación social.

Para ver una muestra visitad la web en la que he descubierto este experimento, aquí en La Maldición de Sísifo. Os enganchará.

El documental está dividido en 6 partes, la primera de ellas la enlazo abajo. Te puedes saltar el primer minuto y medio, yo no entiendo lo que dice el hombre, y lo interesante es el documental.

YouTube Preview Image

Manejo de Excepciones y Errores en una arquitectura Java

Podemos considerar que una Excepción en programación es una situación poco habitual que provoca resultados inesperados o incoherentes en nuestros métodos, pero que es contemplada en el análisis, diseño y construcción de nuestro sistema : el sistema se puede recuperar de estas situaciones.

Como ejemplos podemos citar envíos duplicados de información, una caída de nuestra base de datos, información inválida o incosistente como un número de teléfono con un formato incorrecto…

Para mantener códigos robustos que manejen estas situaciones, los lenguajes de programación incorporan mecanismos para el manejo de excepciones como parte de sus estructuras de control.

Y las situaciones poco habituales que provocan resultados inesperados o incoherentes y que no controlamos ? Eso es un error en tiempo de ejecución en nuestro sistema, que puede desembocar en una inconsistencia de datos en nuestra base de datos o en la finalización inesperada de nuestro sistema.

Un buen indicador de la calidad de un sistema software es comprobar cómo responde cuando se producen fallos, ya sean esperados y controlados (excepciones) o inesperados e incontrolados (errores).

Excepciones en Java

En el caso de Java se utilizan bloques try - catch - finally, throw y throws, y las subclases de java.lang.Exception. Un método lanzarán (mediante un throw) una excepción (una clase que hereda java.lang.Exception) provocando que se abandone el flujo de ejecución normal y cediendo el control al bloque en el que se capturará (en un bloque try - catch - finally). En la declaración del método se incluye throws para avisar de que puede lanzar una excepción.

Existen muchas excepciones predefinidas en Java, pero también nosotros podemos crear excepciones particulares a nuestros sistemas : basta crear una clase que extienda de java.lang.Exception.

Existen dos grandes tipos de excepciones en Java :

  • Checked Exceptions (excepciones controladas). Se corresponden a errores previstos, controlados en el codigo y por tanto permite al sistema recuperarse. Son lo que hemos definido anteriormente como excepciones. El compilador Java es una gran ayuda ya que te obliga a capturarlas en un bloque try - catch - finally o a declarar que el método puede devolver una excepción (declarando un throws).
  • Unchecked Exceptions (excepciones no controladas). Son excepciones no previstas ni controladas, y por tanto puede provocar inconsistencia de datos y la finalización inesperada del sistema : lo que hemos definido anteriormente como errores en tiempo de ejecución. En Java se implementan como subclases de java.lang.RuntimeException (que a su vez hereda de java.lang.Exception) y el compilador no nos obliga a capturarlas ni a declarar que nuestros métodos pueden lanzarlas. NullPointerException o IllegalArgumentException son dos ejemplos de estas excepciones.

No olvides utilizar la parte finally de los bloques try - catch - finally para liberar recursos como conexiones o archivos.

Manejo de Excepciones en una arquitectura Java

Al invocar un método deberíamos obtener como resultado o bien el resultado normal de la ejecución o bien no hacer absolutamente nada. Las excepciones nos servirán para comunicar a las capas superiores información sobre por qué no se ha hecho nada si fuese necesario.

La utilización de bloques try - catch - finally es más costoso en términos de tiempo de ejecución y recursos que la utilización de bloques if - else.

  • Por tanto es recomendable utilizar excepciones para controlar el flujo, es mejor utilizar los mecanismos de control de flujo ya existentes que consumen menos y son más fácilmente mantenibles.
  • Tampoco es recomendable capturar una excepción en un bloque catch y no hacer nada, o no hacer nada más que lanzarla nuevamente.

Es aconsejable que las excepciones no rompan la encapsulación. Por ejemplo si en una capa inferior se produce una excepción (por ejemplo una SQLException en la capa de persistencia), a la capa superior no le interesa conocer los detalles de implementación, sino:

  • si se puede recuperar del error, es aconsejable transformar la excepción original en otra excepción controlada o checked con la información necesaria para recuperar que la capa superiro se pueda recuperar.
  • o si no puede recuperarse del error pasamos a la capa superior una excepción no controlada o unchecked si no se debe continuar el flujo normal, o bien un resultado nulo si no se quiere hacer nada especial.

Sólo deberíamos de crear excepciones propias cuando aporten algo útil como información extra cuando sean capturadas o comportamientos propios (como un tratamiento especial en un log).

Al capturar excepciones también capturamos las que heredan de ésta. Por tanto al capturar una excepción del tipo java.lang.Exception también estamos capturando todas las unchecked (ya que heredan de java.lang.RuntimeException y ésta hereda de java.lang.Exception). Hay que tener cuidado de si esto es realmente lo que queremos.

Por todo lo dicho anteriormente, la gestión de las excepciones nos debería de servir para recuperarnos ante errores esperados. Pero deberíamos tener en cuenta que pueden existir errores no controlados. Podríamos gestionar estos errores en un único punto, desviando todas las excepciones no capturadas a un action donde se tratarán (típicamente presentación de una página de error con un mensaje y las acciones permitidas para el usuario, así como la auditoría del error). Podemos indicar en el web.xml esta redirección :

<error-page>

      <exception-type>java.lang.Throwable</exception-type>

      <location>/gestionErrores.do</location>

</error-page>

Enlaces recomendados

El Lenguaje de Programación Java

Java es un Lenguaje de Programación de Alto Nivel diseñado por Sun Microsystems a primeros de los años 90, en plena transición desde la Programación Estructurada, en la que el lenguaje C copaba el mercado, hacia la emergente Programación Orientada a Objetos (POO en español, OOP en inglés), en la que competiría con C++.

Sus características fueron la base de su éxito  :

  • Al ser un lenguaje de más alto nivel es más fácil de aprender y se reduce el tiempo y coste de los desarrollos y de las pruebas (se simplifica la programación, se eliminan los punteros, la gestión de la memoria ya no la hace el programador…).
  • Implementa el paradigma de programación POO : Jerarquía de Clases, Herencia, Polimorfismo, Encapsulación y ocultamiento de la información.
  • Hacía especial énfasis en la Modularidad y Reutilización de los componentes, es la base para la aparición de APIs (Application Programming Interface). Todo esto facilita enormemente el desarrollo, el trabajo en paralelo entre equipos y disminuía enormemente el tiempo de desarrollo y pruebas.
  • Es un lenguaje Multiplataforma, es decir es independiente de la platarforma (máquina + sistema operativo) en la que se ejecute, con lo cual obtenemos programas Portables, gracias a la Máquina Virtual Java (JVM).
  • Es gratuito !
  • La irrupción poco después de Internet supondría el éxito definitivo de este lenguaje.

Qué necesitamos para comenzar a programar con este lenguaje ?

  • Documentación, un montón de documentación. Creo que es lo primero en que pensar.
  • Después necesitaremos las herramientas para desarrollar en Java que podemos descargarnos gratuitamente de Sun : el Java Development Kit o JDK, que básicamente nos proporciona un compilador java y un entorno para ejecutar programas java. Podemos encontrar sus diferentes versiones en el sitio web de Sun. Podemos utilizar Java 2 Standard Edition (J2SE), Java 2 Enterprise Edition (J2EE) o Java 2 Mobile Edition (J2ME).
  • No confundir con el Java Runtime Environment o JRE que son las herramientas imprescindibles que necesitan los programas basados en Java para poder ejecutarse (la JVM es una instancia del JRE).
  • Ahora nos basta con cualquier editor de texto, pero es altamente recomendable (imprescindible profesionalmente) utilizar software que nos ayude, un IDE (Integrated Development Kit) que nos proporciona editores de texto más potentes y otras herramientas que nos ayudan al desarrollo y pruebas. Eclipse es el más extendido entre los gratuitos, pero también Intelli J Idea es útil y potente entre los gratuitos.

Comenta