sábado, marzo 28, 2009

Ya estoy en Dublín

Bueno pues sólo quería deciros que ya he pasado mi primera noche en Dublín.
Me hubiera gustado escribir antes para agredeceros las despedidas que me hicisteis, tanto la gente del trabajo como mis amigos y compañeros de fútbol pero aquí no hay tanto Internet por todos lados como yo presuponía. El lado malo es que después de tanta despedida no voy a poder volver por Zaragoza en una buena temporada... sino vaya chasco.
Os cuento que el lunes empiezo en una academia 20 horas por semana, todas las mañanas a saco. Y que aquí esta la cosa muy pero que muy chunga para encontrar trabajo, mucho más de lo que yo pensaba, están bajando hasta el precio de los alquileres porque ya no debe haber tanta demanda.
Y bueno señores/as que muchas gracias por todo y voy a ver si hago algo productivo que todavía estoy muy descentrado.

Gracias a todos y un saludo.

martes, marzo 24, 2009

Un nuevo blog

Hoy os quiero contar un nuevo proyecto que voy a poner en marcha. Es un nuevo blog que he creado sólo para hablar de las aventuras que me vayan ocurriendo en Dublín. Tengo la intención de escribir todas las entradas en inglés y espero/supongo que en los próximos meses tenga mucha más actividad ese nuevo blog que este. Por supuesto aquí seguiré escribiendo cosas, en castellano, que no tenga relación con Dublín o que sean tan interesantes que valga la pena ponerlas en los dos.
Bueno, aquí teneis: Just Another Blog From Dublin.

viernes, marzo 20, 2009

Juan Olvido - Después de Todo

miércoles, marzo 18, 2009

Invocar procedimientos almacenados desde Hibernate (II)

Hace algún tiempo comenté una forma de invocar procedimientos almacenados (stored procedures) desde Hibernate.
Hoy os traigo otra forma menos manual (sin tener que manejar la connection). Básicamente consiste en definir la llamada al procedimiento almacenado en el fichero de mapeo de Hibernate. Personalmente los grandes ficheros XML no me gustan y considero las anotaciones un gran avance en ese sentido así que en próximos posts volveremos a retomar el tema haciendo uso de anotaciones.

Pero vayamos al grano. Lo primero será definir en el fichero que mapea la clase una llamada al procedimiento almacenado, en este ejemplo será: "p_get_members" al cual se le pueden pasar dos parámetros: "rank" y "from".

<sql-query name="getMembers" callable="true">
<return alias="m" class="com.abel.MembersDTO" mode="read">
<return-property name="id" column="ID/">
<return-property name="name" column="NAME/">
<return-property name="homeAddress">
<return-column name="HOME_STREET">
<return-column name="HOME_ZIPCODE">
<return-column name="HOME_CITY">
</return-property>
</return>
{call p_get_members (:rank, :from)}
</sql-query>
Como se puede ver se ha "envuelto" la llamada al procedimiento almacenado de forma que ahora desde java podremos invocar la query "getMembers" pasándole un par de parámetros y estaremos invocando el procedimiento almacenado. Además se han mapeado las columnas devueltas a los atributos del DTO: ID a id, NAME a name, y también he puesto en el ejemplo una compuesta, es decir, las columnas HOME_STREET, HOME_ZIPCODE y HOME_CITY se mapean al atributo homeAddress; ¡tened cuidado!, en este último caso el orden es muy importante.

Fijaros y no os olvidéis del parámetro callable=”true”. Sin ese parámetro no podréis invocar stored procedures.

Los tag <return-column> pueden ser omitidos si el alias devuelto coincide con el nombre del atributo en el que tiene que ser mapeado. A mi personalmente siempre me gusta declararlos ya que de esa forma se ve más claro cuando debes refactorizar o hacer cambios futuros (puede que el alias cambie en alguna refactorización).

Otro parámetro, en este caso opcional, es el lock-mode. Con esto mejoramos el rendimiento informando a Hibernate si el procedimiento es para sólo lectura (read) o de modificación (update).

Una vez hemos definido el procedimiento tendremos que invocarlo. Para ello haríamos algo similar a esto:
Session session = memberDAO.getSession();
Query query = session.getNamedQuery("getMembers");
query.setInteger("rank", 1);
query.setDate("from", initialDate);
List listOfManagers = query.list();
Por último pero no menos importante (last but not least que dirían los americanos) os aviso de que esta forma de invocar a los procedimientos almacenados tiene unas limitaciones que no tendríamos si lo hiciésemos directamente a través de la conexión (connection). Esto se debe a las diferencias entre las diversas bases de datos (la semántica y sintaxis):
  • No podréis usar las funciones setFirstResult() o setMaxResults() para paginar los resultados del stored procedure.
  • Se recomienda usar el estándar SQL92: {? = call functionName()} o {? = call procedureName(}. No está soportado las llamadas con sintaxis nativas.
Además, en función de la base de datos que estéis utilizando, consultar la documentación oficial de Hibernate ya que hay limitaciones propias de cada base de datos.

Y como ya sabeis, cualquier duda, corrección, opinión o comentario será bienvenido.

lunes, marzo 16, 2009

La Campana de Huesca

Cuenta la leyenda que el rey Ramiro II, por su condición de monje, fue mal recibido por los prohombres del Reino de Aragón, que le despreciaban a causa de su clerecía. Angustiado por esa actitud, envió un mensajero a consultar al abad del monasterio de San Ponce de Tomeras, al que perteneció hasta ser encumbrado a la realeza. El abad escuchó atentamente al mensajero real y, sin comentarios, lo llevó al huerto monacal. Sacó luego un cuchillo y cortó las coles que sobresalían de la plantación, diciendo al sorprendido mensajero aragonés: "Ve y explícale al rey lo que acabas de ver". De vuelta a Huesca, el enviado contó a Ramiro II la escena. Este entendió el significado y convocó a los nobles para unas Cortes en Huesca, lanzando el rumor de que se proponía fundir una campana, cuyos sones se oirían en todo el reino. Los llamados acudieron a la cita pensando en alguna futura tontería por parte del rey. No sabían que Ramiro había aleccionado a hombres de su confianza, a los que apostó, bien armados, en una sala del palacio real oscense, aún hoy conocida como "La Campana de Huesca". Y a medida que entraban, uno a uno, fueron decapitados y puestas sus cabezas en el suelo, formando un círculo. Cuando éste se completó, fue decapitado el capitoste -algunos dicen era el obispo de la ciudad- y su cabeza, colgando de una cuerda sujeta a la bóveda, dispuesta a manera de badajo en el centro del tremendo redondel. Y sí, los tañidos de esta campana se oyeron bien: los nobles escarmentaron y el rey pudo gobernar tranquilo. (Durán Gudiol, Antonio)

jueves, marzo 12, 2009

Un cambio de rumbo

Como un gran barco que empieza a virar poco a poco para encaminarse a un nuevo puerto hoy os puedo anunciar que comienza uno de los giros más importantes que ha dado mi vida hasta ahora. El día 27 de marzo habrá concluido el cambio de rumbo. Para entonces estaré en Dublín.
Ya habrá tiempo en los próximos días para escribir un post emotivo despidiéndome de tod@s y principalmente de Zaragoza, la ciudad que hace 12 años nunca pensé que dejaría.

Muchos pensarán que he elegido el peor momento, con toda la crisis, pero en ese aspecto no tengo ningún miedo. Con crisis o sin ella la vida siempre es igual: el que vale vale y el que no pa policía local. En breves descubriré si valgo o si tengo que estudiar para policía :)

Si alguno de los que leéis esto estáis en Dublín o conocéis gente allí que me pueda mover el curriculum ponerme un comentario y os lo paso para que lo mandéis; a ver si puedo ir con un par de entrevistas concertadas.

martes, marzo 10, 2009

El Padrino

"¿Vives con tu familia?. Bien, porque un hombre que no vive con su familia no puede ser un hombre"

domingo, marzo 08, 2009

Programas imprescindibles en mi día a día (gratuitos)

Os listo aquí algunos de los programas que siempre tengo instalados en mi ordenador del trabajo. Son gratuitos por lo que os los podéis descargar de internet sin problemas:
  • Firebug: La imprescindible extensión de Firefox. Si programas para la Web necesitas tener este plug-in instalado en tu navegador. Podrás hacer debug de javascript, inspeccionar el código, hacerle cambios en caliente...
  • Notepad++ : El editor de texto que no tiene nada que ver con el Notepad clásico de Windows. Este es más parecido a Ultraedit (aunque reconozco que peor) pero libre y gratuito.
  • Paint .Net: Otro programa cuyo nombre engaña. No tiene nada que ver con el clásico Paint. Con este programa podremos manejar capas, etc. No es el Photoshop pero para dibujar un icono o modificar una imagen nos sobra.
  • Coolruler: la regla mágica que aparecerá por la pantalla para que podamos medir en centímetros o píxeles lo que queramos. Muy últil a la hora de pintar las webs.
  • Dia: Necesario cuando la empresa no quiere pagar una licencia de Visio. Nos permite hacer diagramas de muchos tipos (UML, entidad-relación...)
  • Launchy: El lanzador de aplicaciones para Windows. Lo haremos aparecer con una combinación de teclas (en mi caso Crtl + Tab) y son escribir un par de letras del programa que queremos ejecutar lo lanzaremos.
Por supuesto a esta lista debería añadir los clásicos como Firefox... pero he preferido centrarme en esos pequeños programas no tan conocidos y que te hacen el trabajo más fácil.

viernes, marzo 06, 2009

Con todos ustedes: Fuckowski

... ¿¡¡MESAS!!? No, no, de mesas nada. Si lo que queréis son mesas las compráis en Ikea. Nosotros lo que os ofrecemos son superficies cuadrúpedas de despliegue y explotación compatibles dot NET y J2EE, con sistema de sincronización de filostros y derivación de forlayos. ¿Que no necesitáis tanta tecnología? Bueno, no es eso lo que piensa vuestra competencia. No sabes la que se avecina en el sector… créeme, nuestros últimos análisis indican que en tres meses todo modelo de negocio que no contemple la derivación de forlayos en sus superficies cuadrúpedas va a quedar obsoleto. No querréis quedaros fuera, no… Sí, sí, exactamente… considéralo una inversión a medio plazo. Invertir en forlayos es posicionarse en el mercado del mañana. ¿Para el lunes? Sí, no te preocupes, te mando a nuestro mejor analista… Okey. Hasta pronto ...

Esto que acabeis de leer es parte de un libro escrito por Alfredo de Hoces y que se ha convertido en un clásico entre los programadores. Se titula Fuckowski, memorias de un ingeniero. Si no lo habéis leído y trabajais en una multinacional es muy posible que os sintáis identificado en alguna de sus páginas. Es gratis leerlo en internet aunque también podeis comprarlo impreso en papel.
Un libro muy recomendable... con un final... ufff, se le va un poquito la pinza :)

lunes, marzo 02, 2009

Cómo medir los píxeles

Cuando se está programando una web muchas veces es necesario medir cuantos pixeles ocupa un texto, DIV, un TR, una imagen...
Para esto podemos usar una extensión de Firefox llamada MeasureIt (que se traduciría por Mídelo).
Por supuesto la pega de esto es que sólo sirve para medir lo que se está mostrando en el Firefox. Para llegar más allá y poder medir cualquier cosa que se esté mostrando en el monitor podemos usar CoolRuler, una regla que podremos desplazar por la ventana y nos permitirá tomar medidas en píxeles o centímetros tanto en horizontal como vertical.
Personalmente utilizo la Coolruler que gracias a Launchy puedo hacer aparecer con tan sólo pulsar un par de teclas.

Un día de estos tengo intención de publicar una lista con los seis o siete programas gratuitos que utilizo a menudo en mi trabajo. Estad atentos al blog.