viernes, diciembre 18, 2009

Como ven los Fanboys los diferentes sistemas operativos

Navegando por Internet me he encontrado en esta web una imagen curiosa y simpática:


Actualizado 31/01/2010: En el blog de Dani Latorre me he encontrado un cuadro similar pero con lenguajes de programación, no os lo perdáis.

miércoles, diciembre 02, 2009

Manifiesto: En defensa de los derechos fundamentales en Internet

Ante la inclusión en el Anteproyecto de Ley de Economía sostenible de modificaciones legislativas que afectan al libre ejercicio de las libertades de expresión, información y el derecho de acceso a la cultura a través de Internet, los periodistas, bloggers, usuarios, profesionales y creadores de internet manifestamos nuestra firme oposición al proyecto, y declaramos que…
  1. Los derechos de autor no pueden situarse por encima de los derechos fundamentales de los ciudadanos, como el derecho a la privacidad, a la seguridad, a la presunción de inocencia, a la tutela judicial efectiva y a la libertad de expresión.
  2. La suspensión de derechos fundamentales es y debe seguir siendo competencia exclusiva del poder judicial. Ni un cierre sin sentencia. Este anteproyecto, en contra de lo establecido en el artículo 20.5 de la Constitución, pone en manos de un órgano no judicial -un organismo dependiente del ministerio de Cultura-, la potestad de impedir a los ciudadanos españoles el acceso a cualquier página web.
  3. La nueva legislación creará inseguridad jurídica en todo el sector tecnológico español, perjudicando uno de los pocos campos de desarrollo y futuro de nuestra economía, entorpeciendo la creación de empresas, introduciendo trabas a la libre competencia y ralentizando su proyección internacional.
  4. La nueva legislación propuesta amenaza a los nuevos creadores y entorpece la creación cultural. Con Internet y los sucesivos avances tecnológicos se ha democratizado extraordinariamente la creación y emisión de contenidos de todo tipo, que ya no provienen prevalentemente de las industrias culturales tradicionales, sino de multitud de fuentes diferentes.
  5. Los autores, como todos los trabajadores, tienen derecho a vivir de su trabajo con nuevas ideas creativas, modelos de negocio y actividades asociadas a sus creaciones. Intentar sostener con cambios legislativos a una industria obsoleta que no sabe adaptarse a este nuevo entorno no es ni justo ni realista. Si su modelo de negocio se basaba en el control de las copias de las obras y en Internet no es posible sin vulnerar derechos fundamentales, deberían buscar otro modelo.
  6. Consideramos que las industrias culturales necesitan para sobrevivir alternativas modernas, eficaces, creíbles y asequibles y que se adecuen a los nuevos usos sociales, en lugar de limitaciones tan desproporcionadas como ineficaces para el fin que dicen perseguir.
  7. Internet debe funcionar de forma libre y sin interferencias políticas auspiciadas por sectores que pretenden perpetuar obsoletos modelos de negocio e imposibilitar que el saber humano siga siendo libre.
  8. Exigimos que el Gobierno garantice por ley la neutralidad de la Red en España, ante cualquier presión que pueda producirse, como marco para el desarrollo de una economía sostenible y realista de cara al futuro.
  9. Proponemos una verdadera reforma del derecho de propiedad intelectual orientada a su fin: devolver a la sociedad el conocimiento, promover el dominio público y limitar los abusos de las entidades gestoras.
  10. En democracia las leyes y sus modificaciones deben aprobarse tras el oportuno debate público y habiendo consultado previamente a todas las partes implicadas. No es de recibo que se realicen cambios legislativos que afectan a derechos fundamentales en una ley no orgánica y que versa sobre otra materia.
Este manifiesto, elaborado de forma conjunta por varios autores, es de todos y de ninguno. Si quieres sumarte a él, difúndelo por Internet.

sábado, octubre 17, 2009

Trasegando

Ella se siente bién, yo me siento en el suelo tranquilito a mirarla, niño levantaté, no me siento con cojones, hoy me quedaré en la cama, rebufo y respiro y no sueño contigo, mi alma se amorra al colchón, ay prima mía , ¿qué quieres amor?, pues ya somos dos.

domingo, octubre 11, 2009

El Pilar 2009

Ayer sábado comenzaron oficialmente las fiestas del Pilar. Casi todos los años he ido a ver el pregón pero este año está siendo diferente. Al estar en Dublin no podré ver Zaragoza en estas fechas y, quizá por morriña, he buscado el video del pregón y después de verlo creo que me he perdido el mejor pregón que ha tenido Zaragoza en los últimos años (al menos hasta donde yo los recuerdo). Os dejo aquí el video para que podais ver al abuelo cantando.


martes, septiembre 22, 2009

Cómo vivir en Dublín y no morir en el intento (I)

Hoy vamos a comenzar una serie de tres entradas donde os explicaré todo lo necesario para sobrevivir en Dublín. En el post de hoy hablaremos de los preparativos.

Es muy importante si vais a venir a vivir a Dublín (o a otro país fuera de España) preparar la maleta correctamente y no olvidarnos de nada. Hacer una lista días antes del viaje y repasar que tenemos todo en la maleta será fundamental. Además debido a que compañías como Ryanair se ponen muy tontas con el tema del peso a facturar deberemos ceñirnos solamente a lo importante no transportando en la maleta nada innecesario.

A continuación podéis ver dos fotos con todo lo que debéis llevar en vuestra maleta:



Como véis sólo hay que llevar lo imprescindible. Fijaros en el detalle de que si hubieramos llevado ropa no tendríamos de donde colgarla ya que las perchas las necesitaremos para colgar los chorizos y el espetec.

A modo de resumen os hago una lista para que no os olvidéis de nada:
  • Chorizo
  • Jamón (serrano, nada de ese que llaman York que ni es Jamón ni es nada)
  • Salchichón
  • Más jamón
  • Espetec
  • Lomo (ya sabéis que habiendo lomo de otra cosa no como)
  • Si os sobra sitio podéis llevar más jamón
Si os preguntáis que como os váis a cambiar de ropa y esas cosas, que creo que no tienen ninguna importancia, siempre podéis ir al Pennys (a.k.a Primark) a comprar. Camisetas chulas a 6 € y pantalones vaqueros por 9 €. Vamos, que podéis comprar todos los días un pantalón y una camiseta por menos dinero del que os costaría comer todos los días jamón serrano... así que vosotros mismos.

sábado, septiembre 19, 2009

Modificaciones en ¿Cuándo llega mi bus?

Bueno, a raiz del comentario de Jorge en una entrada anterior me decidí a cambiar un poco la web para descubrir cuando llegan los autobuses a la parada.

Ahora veréis un nuevo botón en la página inicial: "Buscador de Postes". Si hacéis click en él llegaréis a una página con un aspecto similar a la imagen que acompaña a este post.
En el combo deberéis seleccionar la linea a consultar y si se quiere conocer en sentido contrario basta con clickar en "Cambiar de sentido" ¿fácil no?.

Cómo podéis ver tiene fallos, el primero por culpa de la codificación, que ya iré solucionando. Sí veis más cosas que no funcionan como os gustaría me dejáis un comentario por aquí o me mandáis mail.

Más sobre ¿Cuándo llega mi bus? aquí.

lunes, septiembre 14, 2009

Un fin de semana en el Ulster

Si os nombro Leinster o Munster seguramente no sabréis de que os estoy hablando pero si os nombro el Ulster a todos os suena (a pesar de que acualmente el Leinster es el campeón de la Copa de Europa de rugby...)
Es triste pero todos conocemos el Ulster debido a los "problemas" (The Troubles) que comenzaron allá por el 66.
Mucha gente cree que el Ulster es lo mismo que Irlanda del Norte, nada más lejos de la realidad. Ulster es una de las cuatro provincias de Irlanda (no confundir Irlanda con la República de Irlanda o con Irlanda del Norte). Lo que tiene de especial Ulster es que está dividido. Tres de sus condados pertenencen a la República y seis a Irlanda del Norte (realmente estos seis condados conforman Irlanda del Norte).

Ir al Norte significa tener que cambiar euros por libras ya que estaremos entrando en el Reino Unido. De esto nos daremos cuento muy pronto ya que todas las calles están llenas de banderitas con la Union Jack.

Nada más llegamos a Belfast hablamos con un grupo de italianos con los que habíamos viajado desde Dublín y les prupusimos compartir un black cab (un taxi negro) con el que visitar los murales. Ellos aceptaron así que los cinco nos metimos en el vehículo que podéis ver a continuación.


Al primer sitio que nos llevó el taxista (yo creo que era católico) fue a los murales católicos de Belfast Oeste (Belfas Oeste es la zona más problemática del Ulster). Allí pudimos ver unos cuantos murales. Muchos de ellos no tenían una relación directa con los problemas... otros sí.


El siguiente es un mural en defensa de los deportes gaélicos, en concreto del hurling. Los deportes gaélicos estuvieron prohibidos durante muchos años.


Después de los murales fuimos a ver la peace line. Un muro de 7 metros de altura que "mantiene la paz" en Belfast. Tiene una longitud de varias millas y recorre desde el centro de Belfast hasta las montañas dividiendo Belfast Oeste y comunicandola sólo por dos puertas. Es típico poner algun mensaje en el muro. Personajes muy famosos han escrito en él.


Cruzado el muro fuimos a ver los murales en la zona protestante. Los murales cambian radicalmente. Son más agresivos. Casi siempre hacen referencia a temas bélicos o militares. A continuación podeis ver uno de ellos.


Belfast es una ciudad que merece la pena visitar... una día. Más tiempo allí significa estar metido en un pub porque no tienes otra cosa que hacer, pero un día merece la pena dedicarle. Es limpia y a pesar de lo que muchos me habían contando a mi me resulto bonita. Por todos lados había banderitas y en determinadas zonas (bastantes zonas) había banderas de grupos paramilitares protestantes. Por mucho que en los telediarios nos traten de vender que los problemas acabaron la tensión se nota y respira en la ciudad.

Para terminar el día en Belfast nos metimos en un pub (típico de estilo victoriano). Allí conocimos a un tipo de lo más curioso. Cuando me vió bebiendo media pinta me dijo que los hombres bebían pintas y me invito a una pinta de Guinness. Nos pusimos a hablar, de todo un poco, la ciudad, el tiempo... lo típico que puedes hablar con un desconocido en un bar de España.
La conversación se fue desarrollando hasta que al hombre le entró la nostalgia. Nos confesó que los protestantes mataron a su hermano pequeño y los 15 años que había estado en la cárcel por pertenencia al IRA. No voy a relatar todo lo que nos contó pero digamos que tuvimos una versión real de la situación y sentimiento actual en Irlanda del Norte, que dicho sea de paso nada tiene que ver con lo que nos cuentan en la prensa.

Al siguiente día siguiente fuimos al auténtico destino de nuestra excursión: la Giant's Causeway. Después de una paliza de autobús haciendo paradas en todo lo que el conductor consideraba destacable llegamos a una de las maravillas de Irlanda.


Al llegar no hacía mucho viento y el mar estaba calmado pero poco a poco se fue enrabietando.


La Calzada del Gigante (The Giant’s Causeway) es una espectacular formación rocosa reserva natural nacional y el único paraje de Irlanda del Norte declarado Patrimonio Mundial por la Unesco. Actualmente sólo se conservan los extremos: la Giant’s Causeway en Irlanda y la isla de Staffa en Escocia, con formaciones rocosas similares.

La explicación científica es que las rocas de la Causeway se formaron hace 60 millones de años, cuando una capa de lava basáltica líquida fluyó por un valle sobre estratos de creta preexistentes. Cuando la lava se enfrió y condensó, se contrajo creando un patrón de grietas hexagonales en ángulo recto con las superficies que se enfriaban. Con el tiempo, el basalto se abrió a lo largo de las grietas de contracción, formando las columnas hexagonales.

Aunque claro, también existe una leyenda sobre estas piedras.

Y finalmente aquí me podeís ver a mi.


Un fin de semana completo.

miércoles, septiembre 09, 2009

Muchos nueves

Hoy es 09/09/09 y son las 09:09... sólo quería que lo supierais :)

domingo, septiembre 06, 2009

Jar Finder

Jar Finder es una web que nos permite descubrir en que archivo .jar se esconde esa clase java que no encontramos.

Llevo ya algunos años que no me pasa, pero recuerdo cuando estaba en la universidad... cuantas veces tenía una excepción ClassNotFoundException al usar librerías de terceros que me refería una clase que no sabía donde conseguir. Era entonces cuando servicios como este te facilitaban la vida.

Aunque se que a muchos no les estoy descubriendo nada nuevo, pues ya conocerán esta web u otras similares, no puede evitar mencionarlo en este blog por si alguien no sabía de su existenia.

viernes, agosto 28, 2009

Replicar la caché de segundo nivel en un cluster JBoss AS

El escenario es el siguiente: tenemos un cluster de servidores JBoss AS (4.2.x) con varios nodos, tenemos una única base de datos (en mi caso MySQL) y para evitar el uso abusivo de esta tenemos una caché de segundo nivel en cada nodo del cluster (que lógicamente sera JBoss Cache ya que nos viene de gratis con el servidor). Por defecto esta caché no se replicará cuando sea modificada en uno de los nodos en los otros nodos así que vamos a ver las modificaciones que tenemos que hacer.

Lo primero será modificar el fichero persistence.xml para definir el uso de la caché:

<!-- Activamos la caché -->
<property name="hibernate.cache.use_second_level_cache" value="true"/>
<!-- Definimos un prefijo para las regiones de la caché -->
<property name="hibernate.cache.region_prefix" value="MiPrefijo"/>
<!-- Definimos el proveedor de la caché -->
<property name="hibernate.cache.provider_class" value="org.jboss.ejb3.entity.TreeCacheProviderHook"/>
<property name="hibernate.treecache.mbean.object_name" value="jboss.cache:service=EJB3EntityTreeCache"/>
Las clases que querarmos persistir en la caché tendrán que tener la siguiente anotación:

@Cache(usage = CacheConcurrencyStrategy.TRANSACTIONAL, region="MiRegion")
En el fichero ejb3-entity-cache-service.xml definiermos la nueva región:

<!-- Definición de mi región-->
<region name="/MiPrefijo/MiRegion">
<attribute name="maxNodes">10000</attribute>
<attribute name="timeToLiveSeconds">5000</attribute>
</region>
Y eso es todo, ahora ya podéis divertiros escribiendo en la caché de un nodo y viendo como la otra cambia de valor automáticamente. Por supuesto está cache es mucho más configurable y en la web de JBoss podéis encontrar más información.

lunes, agosto 24, 2009

Cámaras en los autobuses

Mirad un momento la foto que acompaña esta entrada (perdón por la calidad, está hecha con mi iPhone) ¿Qué pensais que es lo que se ve en la televisión?


Es lo mismo que veía yo al mirar por la luna delantera del autobús. Puede que muchos lo hayan acertado, aunque también los habrá que pensasen que era una película. Esto fue en el autobús que me trajo de Belfast (donde estuvo hace unos días, de los cuales os pienso hablar más adelante porque la verdad es que la situación que allí se vive bien merece una entrada en este blog). Durante todo el trayecto se podía ver en la televisión lo mismo que veía el conductor. No se si también lo irían grabando por si hubiese un accidente pero la verdad es que como anécdota me resulto curioso, nunca lo había visto.

viernes, agosto 14, 2009

Nueva versión mejorada del "recarga baterías"

A comienzo de este año comentábamos la existencia de una máquina vista en Barcelona para recargar las baterías de nuestros móviles (previo pago de 1 euro). Hoy me he encontrado en un centro comercial de Dublín una nueva versión mejorada. En esta ocasión no tenemos que estar vigilando nuestro móvil ya que este se entroduce en una especie de buzón/consigna mientras se recarga. El precio sigue siendo 1 euro. He estado mirando y permite cargar 3 tipos diferentes de teléfonos: Nokia, Sony Ericsson y no recuerdo el tercero.

Una máquina que creo que debería estar en todos los centros comerciales, aeropuertos y grandes estaciones. Con un mantenimiento practicamente nulo es un servicio añadido que puede sacarle del apuro a más de uno.

miércoles, agosto 12, 2009

Una frase a recordar por los programadores

Una cita que todos los programadores deberían recordar:
“Write your code as if the next guy to maintain it is a homicidal maniac who knows where you live" (por Kathy Sierra y Bert Bates).

No voy a decir nombres pero a mi ha sido leer lo de "homicidal maniac" y venirme una cara a la cabeza... daré una pista: coordenadas 0,0

viernes, agosto 07, 2009

Encuesta sobre: ¿Cuándo llega mi bus?

He estado mirando las estadísticas de la web para iPhone ¿Cuándo llega mi bus? y me he llevado una grata sorpresa: desde el día 1 de marzo (fue el día que le puse Google Analytics) hasta hoy sólo cuatro días no se ha usado esta aplicación. La media de uso es de cinco consultas diarias que la verdad, son más de las que yo pensaba; más cuando yo no la uso desde que me vine a vivir a Dublín.

El caso es que se que algunos de los que usáis la aplicación leéis este blog así que me gustaría preguntaros un par de cosas:
  • Los dos accesos directos que hay ya no se usan, al menos yo no los uso, así que en su lugar podríamos poner otra cosa ¿qué os gustaría? ¿O directamente un hueco? ¿O dejar los accesos directos?
  • ¿Os molesta la pequeña publicidad de Google?
  • ¿Os molesta que cambie de página para mostrar los resultados? ¿preferiríais hacer la busqueda y ver los resultados en la misma página?
Bueno, me gustaría que los que usáis la aplicación me escribieseis en los comentarios de este post vuestras opiniones.

miércoles, julio 29, 2009

Ryanair como último recurso

Hace no muchos años volar en avión era prohibitivo. Era caro y sólo te lo podías permitir si ibas de vacaciones a estar una larga temporada en el lugar de destino. Hoy en día podemos permitirnos irnos un fin de semana a Londres y es muy probable que paguemos más por las dos noches de hotel que por el billete de ida y vuelta en una compañía Low Cost. Esto se lo debemos en gran parte a Ryanair.

No fue Ryanair la primera compañía que lo implantó (fué Southwest Airlines en 1973) pero sí que fue la primera en traernos a Europa esta modalidad de viajar por el aire (estó ocurrió a comienzo de los años noventa).
La forma en la que consiguen ser más baratas la podemos ver en este gráfico.
Como se aprecia quitan todo lo que pueden considerarse lujos. Tienen muchos menos empleados por viajero y mucha más densidad de asientos por avión. Todo esto está muy bien hasta cierto punto. Hay un límite que no se puede sobrepasar. Estaremos todos de acuerdo con que es mejor volar 150 personas en un avión pagando 50€ por persona, que volar una sola persona pagando 7.500€ pero que ocurre si nos ofrecen meternos 600 personas a 10€ por cabeza. Hay un límite, está claro. Y Ryanair lo supera con creces.

Hoy en día hay multitud de compañías de bajo coste algunas de más bajo coste que otras y podemos comparar con cual nos interesa más viajar. Pero no es oro todo lo que reluce. Hay que tener cuidado cuando por querernos ahorrar unos pocos euros reducimos demasiado la calidad. No estoy hablando de tener el avión plagado de publicidad o que las azafatas se empeñen en tratar de venderte cupones para el sorte de un coche, eso es cansino pero no molesto. Estoy hablando de sólo poder facturar hasta 15 kilos mientras otras compañías como Aerlingus permiten facturar 20 kg. Por cada kilo que te pasas Ryanair te cobra 15€ por lo que si llevamos un equipaje de 20 kg pagaremos 75€ de sanción. Además Ryanair, en algunos aeropuertos, se está poniendo muy drástico con el equipaje de mano y sólo permite subir un bulto, esto es, las mujeres tienen que meter su bolso dentro del equipaje de mano al igual que lo que compres en el duty free. En caso contrario ya sabes... 30€ de sanción. Y aquí viene un detalle que me gustaría remarcar. Ese equipaje de mano extra por el que te hacen pagar 30€ es independiente de lo que pese, puedes llevar 1 kg o 10 kg y pagarás 30€. Creo que ya sabéis por donde voy no? es mejor subir un segundo equipaje de mano con los kilos que te pases de equipaje facturado siempre que estos sean más de dos. Es decir, si un día os pasáis 5 kilos de equipaje, lo metéis en una bolsa y lo subis de equipaje de mano. Si se ponen bordes os harán pagar 30€ que es menos que los 75€ que os cobrarían al facturar.

Pero bueno, aun con el tema del equipaje hay veces que sale mejor de precio Ryanair verdad? bueno, pues yo sigo diciendo que no. Una cosa es bajo coste y otra que te traten como si fueras ganado. Noticias como que se están planteando ofrecer billetes para volar de pie o que están pensando en cobrar por hacer uso de los aseos no hace más que confirmar mis afirmaciones.
Y ahora vamos con lo que más controversía puede crear... Si habéis volado con Ryanair habréis notado un ligero dolor de cabeza al terminar el viaje. Hay muchas sospechas de que la presión en cabina de los aviones de Ryanair es ligeramente inferior a la que debería y esto es así para ahorrar combustible. No debe sorprendernos. Ryanair son especialistas en ahorrar costes, por ejemplo los billetes no tienen plazas asignadas para evitar el tiempo que pierden los pasajeros en localizar su asiento. Hay medidas que me parecen perfectas y que otras compañías deberían copiar pero otras que no.

En resumen, creo que las compañías low cost han sido una revolución y que para un vuelo de 2 horas es tontería pagar un billete de una aerolínea tradicional pero Ryanair es lo peor. Hay que tratar por todos los medios de evitarla. Hacerdme caso, si tenéis que volar de España a Irlanda hacerlo con Aerlingus y olvidaros de Michael O'Leary y sus aviones, no os arrepentiréis.

lunes, julio 27, 2009

Presentando a los workers (Javascript)

Hace una semana John Resig se hacía eco con un post en su blog sobre los workers. Ya os podéis imaginar lo liado que he estado que ni me había enterado de la introducción de esta característica en los navegadores de última generación (Firefox 3.5...).

Lo que los workers nos aportan es poder ejecutar código en segundo plano sin la preocupación de bloquear la pantalla al usuario. Si programais aplicaciones con mucho javascript, AJAX, etc... sabréis de que os estoy hablando. Bueno, pues con esto, en teoría, se solucionan nuestros problemas (realmente se solucionarán cuando todos los navegadores los implementen).

Vamos a ver como funcionan (he puesto comentarios para explicar cada una de las lineas):

// declaramos el worker, su funcionalidad estara en el fichero .js pasado al constructor
var myWorker = new Worker("worker.js");

// codigo que se ejecutara cuando el worker termine
myWorker.onmessage = function(e){
// en e.data tenemos la respuesta del worker
alert(e.data);
};

// arrancamos el worker
myWorker.postMessage("start");
Y ahora el código propio del worker (el fichero worker.js):

// dentro de esta funcion pondremos la logica a ejecutar por el worker
onmessage = function(e){
// en e.data tenemos la informacion enviada en el momento de arrancar el worker
if ( e.data === "start" ) {
// una vez terminada la ejecucion devolvemos la respuesta
postMessage("done");
}
};
Por supuesto desde el código principal también podemos hacerle cosas al worker como, por ejemplo, finalizarlo:

myWorker.terminate();

viernes, julio 24, 2009

Los países de la web

Me acabo de topar con un post que me ha hecho gracia y quiero compartir con vosotros. Es una comparación entre 13 sitios web y otros tantos paises. Para muestra un botón:

jueves, julio 23, 2009

Dexter

Llevo unas cuantas semanas queriendo hablaros sobre Dexter. Una serie de la que pronto comenzará su cuarta temporada y que es un poco diferente a lo que nos tienen acostumbrados los americanos.

La serie se basa en los libros del mismo nombre y que tratan de un joven forense del departamento de policía de Miami con una pasión especial por la sangre. El tipo en cuestión no tiene sentimientos y disfruta matando gente. Cuando su padre (agente de policía ya muerto) se dió cuenta le educó para que sólo asesinara a delincuentes.

Lo principal de la serie es que, al contrario que House, no hay una mini-trama en cada episodio sino que la trama comienza con cada temporada y termina al final de la misma (cosa que no ocurre con Lost). Por lo tanto a día de hoy tenemos tres temporadas, o lo que es lo mismo, tres tramas distintas.

La primera temporada es donde descubrimos a Dexter y sus secretos. Existe una trama que durará toda la temporada donde un desconocido asesino irá dejando cuerpos sin sangre por diferentes sitios. También en cada capítulo veremos a Dexter salir a cazar a alguna víctima (asesinos, etc...).

La segunda temporada es, en mi opinión, la mejor. Dexter estará asustado porque toda la policía va destrás de él (pero sin saber que es él). Además empezará a tener ciertos sentimientos que le harán "débil" y que tendrá que conseguir elimiar. Si has visto la primera temporada y no la segunda no se a que estás esperando. Si a raiz de leer este post quieres ver la serie bajaté las dos primeras temporadas y no te quedes sólo en la primera. Hazme caso.

Y la que actualmente es la última temporada, es decir, la tercera, es un poco más floja que las otras dos. Dexter tendrá un socio en el que no sabe si confiar o no. La temporada prácticamente carece de mini-tramas y tendremos que verla entera. No te pierdes nada si no la ves.

Bueno, pues más o menos esa es mi opinión de Dexter. Otro claro ejemplo de que hoy por hoy las series que nos vienen de USA les dan mil vueltas a los productos nacionales.
Dexter no es una serie de la que serás tan adicto como Lost, House... pero merece la pena verla. Ah, se me olvidaba, al igual que House esta serie gira entorno a un personaje y los demás son meros secundarios.

lunes, julio 20, 2009

Colorzilla

Una extensión que seguro tenéis instalada en vuestro Firefox es Colorzilla, y sino la tenéis y os dedicais a la programación web ya tardáis en instalarla. Nos añadirá un pequeño icono en la esquina inferior izquierda de nuestro navegador que al clickarlo nos cambiará el cursor en una cruz que nos informará del código RGB del color del píxel sobre el que tengamos posicionado el cursor.

Puede que no os esté descubriendo nada nuevo o que conozcáis otras soluciones mejores (que podéis poner en los comentarios) pero me gusta tener apuntadas en mi blog todas las herramientas que uso en mi trabajo para no olvidarme de ninguna de ellas :)

sábado, julio 18, 2009

Visualizador PK7 para Mac

Desde que me vine a vivir a Dublín uno de los problemas que tenía era poder visualizar las e-facturas de Movistar en mi Macbook. Aquí no tenía ningun PC con Windows y está visto que para Telefónica sólo existe ese sistema operativo así que no podía verlas. Hoy he descubierto MacPK7 un pequeño programa para Mac que nos permite ver esas e-facturas. Es muy simple y funciona muy bien. Incluso permite exportarlas a .pdf.

Si sois usuarios de un iPhone y un PC ya tenéis una excusa menos para tirar el PC y compraros un Mac.

martes, julio 07, 2009

Hazte Industrial

De tan cutre es graciosa y pegadiza... Hazte Industriaaaaaaaaaal!

jueves, junio 25, 2009

Freakonomics

Freakonomics es un libro escrito por Steven D. Levitt (economista) y Stephen J. Dubner (periodista). Bajo el título podemos leer: Un economista políticamente incorrecto explora el lado oculto de lo que nos afecta, y es que de eso trata este libro; no tiene nada que ver con la economía que todos conocemos.
Preguntas como: ¿Qué resulta más peligroso: una pistola o una piscina? o ¿Qué tienen en común un maestro de escuela y un luchador de sumo? serán resueltas por este economista y profesor de la Universidad de Chicago.

El libro no tiene un hilo conductor sino que consta de varios capítulos que no tienen nada que ver entre si y que siempre tratan de contestar a una pregunta cuanto menos extraña. Nos sorprenderán los resultados a los que llegaremos sobre todo porque el sentido común parece creer lo contrario pero los números nunca mienten. Un apunte curioso es que en un capítulo desmonta la creencia popular de que en EEUU el candidato que más dinero ha gastado en la campaña es quien gana las elecciones, mejor dicho, desmonta la creencia de que la razón por la que gana es por gastar el dinero (gastar dinero y ganar están relacionados pero no son causa y efecto).

La idea principal que he aprendido al leer este libro es que porque dos sucesos tengan relación no significa que el primero provoque el segundo, ni que el segundo provoque el primero ya que puede haber un tercer suceso que provoca ambos.

Me gustó más El economista camuflado pero creo que este también es un buen libro que os gustará si os gustan este tipo de libros (a mi me ha gustado).

sábado, junio 20, 2009

Sun Open Communities Forum

Ayer terminó en Madrid el Sun Open Communities Forum. Han sido dos largos días de conferencias alrededor de Sun Microsystems, Java, Solaris, el software libre...
Como ya sabreis si me seguís en Twitter he estado por allí viendo que se cocía y ahora es el turno de que os lo cuente a vosotros.

No os puedo engañar. Me gustaría decir que fue todo fantástico, que aprendía cosas nuevas cada minuto, que la tecnología fluía por el ambiente pero os estaría mintiendo. Yo dividiría las conferencias a las que asistí en tres grandes grupos.

El primer grupo estaría formado por las charlas estilo a Mesa redonda: Adopción del OpenSource en la empresa o Uso de herramientas Open Source en Indra para el desarrollo de proyectos I+D+i en el área de eInclusion. En mi modesta opinión este tipo de charlas simplemente sobraban. La primera, la mesa redonda, podría haber sido interesante con un público profano que no conociera más software libre que Firefox pero no delante de 200 programadores. La segunda, me fuí a los dos minutos de comenzar. En la mesa redonda había también un tipo de Indra, que después de hablar de los beneficios que estaban obteniendo gracias al uso de software libre respondió a la pregunta de si liberaban software con que ellos no liberaban software porque eran una empresa de "integración"; vamos que nos dijo manzanas traigo.

Otro grupo de charlas estaría compuesto por las que impartió Simon Ritter y alguna más. Estas charlas a pesar de ser conferencias técnicas tenían un nivel muy bajo, no profundizaban, eran como un stand en el SIMO que te vende las virtudes de su producto pero que no te acaba de enseñar lo que hay por debajo. Para mí no llegarón al nivel exigible.

Y por fin llegamos al tercer grupo, el del contenido aprovechable. Y este lo era por dos razones o porque era realmente una buena charla, o porque debido a mi desconocimiento la charla me resultaba didáctica. Por ejemplo las charlas de OSGi y el Enterprise Service Bus y Desarrollo e Integracion con OpenESB puede que a un experto en integración no le enseñaran nada pero a mí me resultaron curiosas. Luego estaban las conferencias como Software Libre e Internet donde Alvaro López (del proyecto Cherokee) nos contó como estabamos "perdiendo" derechos debido a las aplicaciones web como Gmail (ahora el software y los datos los tienen terceros en lugar de nosotros) y también nos presento Cherokee, un servidor web que por un lado se puede configurar a golpe de click mediante una interfaz gráfica y por otro, promete un mejor rendimiento que Apache en entornos exigentes. En Escalabilidad de grandes plataformas- MySQL la gente de Tuenti nos contó lo que Gimente y Plunchete (de debug_mode=ON) siempre nos cuentan en el JUG Zaragoza (que los "join's" no escalan). Un detalle tonto que me llamó la atención de esta conferencia fue el siguiente: si tenemos que particionar una tabla de la base de datos y particionar memcached no debemos hacerlo con el mismo criterio ya que si nos fallara memcached provocaríamos tal cantidad de peticiones a su homóloga en base de datos que se nos caería también. Es un detalle obvio que me llamó la atención. Java Everywhere fue la conferencia de Peyrona, un autentico peso pesado en esto del software. Andaluz con mucha gracia con el que tuve el placer de echarme una cerveza. Su conferencia fue después de comer cuando la siesta quiere vencer a las ganas por aprender pero este hombre está muy acostumbrado a hablar en público, yo creo que el que más de todos los ponentes. Cual Steve Jobs se movía de derecha a izquierda mientras hablaba y hacía bromas. Debo decir que tenía muchas esperanzas en una charla técnica y profunda y en lugar de ello me encontré en una charla 2.0 (por lo de que allí el publico colaborabamos y hablabamos) divertida pero no muy técnicamente didáctica. Consistió en comentar entre todos los lugares donde se ha aplicado o se está aplicando Java y comentar como está hecho y opiniones al respecto. Java está por ejemplo dentro de un bolígrafo con el que tu escribes y directamente se te digitaliza lo escrito. O en el robot que mandaron a Marte... sorprendente. JRuby on Rails. Ruby on Rails sobre la JVM estuvo dividida en tres partes. Una de Ruby, otra de Rails y por último JRuby. Me gustó mucho porque yo conocía Ruby on Rails sólo de oidas y ahora ya se lo que es. Fue una de esas charlas de las que sales diciendo: A ver que se me ocurre programar para usar Rails. Desarrollo y test de componentes Ajax fue otra charla muy interesante donde se comentaron consejos a la hora de programar con javascript.

Por último estuvieron los talleres. Yo asistí a dos: Hands-on Spring 3.0: The next generation impartido por Sergi (del que si Dani no se equivoca es el único en toda España certificado por SpringSource para impartir educación sobre Spring) y Buenas prácticas en el desarrollo web con Grails donde me enteré como funcionaba Grails y vi las bondades de convención sobre configuración. Me gustó más el segundo taller porque más que taller fue una demostración de Grails mientras que el primero debido a la cantidad de gente que estabamos había cierto descontrol.

En resumen, dos días de congreso gratis, con comidas incluidas, donde conoces gente y pones caras a nombres y voces que ya conocías. Donde algunas conferencias eran muy interesantes, otras estuvieron bien y otras estuvieron mal pero eras libres de salirte con tu portatil a mirar el correo mientras esperabas a la siguiente. Las instalaciones un diez y la localización un cuatro.

Actualizado 25/06/2009:
En este enlace podéis encontrar las fotos del evento.

Actualizado 15/09/2009:
Han publicado los vídeos de las conferencias.

Rendimiento de bucles 'for' en Java 5

Hace ya algún tiempo leí un post sobre el rendimiento de los bucles 'for' en Javascript. El mencionado comentario defendía el rendimiento de los bucles decrementales sobre los incrementales alegando que en los primeros se compara la variable 'contador' con la constante 'cero' mientras en los incrementales se tiene que comparar en cada iteración con la variable que indica el número de iteraciones. Debido a que comparar con una constante es más rápido que con una variable los bucles decrementales son más rápidos.

Pues a mi se me ha ocurrido probar lo mismo en Java, en la máquina virtual que lleva Mac OS X (una JDK 5.0). Como podeis ver dentro del bucle lo único que hago es incrementar una variable (por hacer algo). Aquí teneis los resultados y el código utilizado:

Primero probé un bucle incremental; lo ejecuté tres veces saliendo un tiempo medio de 15.062 ms.
long loops = 2100000000;
long aux = 0;
long startTime = System.currentTimeMillis();
for (long cont=0; cont<=loops; cont++){
aux++;
}
long endTime = System.currentTimeMillis();
El bucle decremental también lo ejecuté varias veces consiguiendo un tiempo medio de 15.051 ms:
long loops = 2100000000;
long aux = 0;
long startTime = System.currentTimeMillis();
for(long cont=loops; cont>=0; cont--){
aux++;
}
long endTime = System.currentTimeMillis();
También se me ocurrió ver como se comporta el outboxing the Java 5.0. Le costó 15.063 ms.
Long loops = new Long(2100000000);
long aux = 0;
long startTime = System.currentTimeMillis();
for (long cont=0; cont<=loops; cont++){
aux++;
}
long endTime = System.currentTimeMillis();
Como podeis ver las diferencias son mínimas a pesar de los 2.100 millones de iteraciones. Sí que es cierto que el bucle decremental tiene un rendimiento mejor (10 ms) pero es claramente despreciable. En los cuatro años que llevo de vida profesional nunca he tenido un bucle tan grande como el que he usado para las pruebas y no se vosotros pero yo y la mayoría de la gente que conozco ven más "sencillos" los bucles incrementales. Es más fácil meter la pata con los < y <= en los decrementales y tener una iteración de más.
Otra cosa que sí que me ha sorprendido es el rendimiento del outboxing, es lo mismo usar long que Long supongo que esto es debido al compilador, es decir, que el bytecode acaba siendo el mismo.

miércoles, junio 10, 2009

El último aragonés vivo

Hoy os traigo un corto de David Terrer: "El último aragonés vivo". Es un corto gracioso, especialmente si eres o has vivido en Aragón, en caso contrario igual no conoces la cerveza Ambar ni lo que significó el gol de Nayim. Personalmente creo que otros cortos que he colgado en el blog son mejores (o más profesionales) pero este también está muy bien.

lunes, mayo 18, 2009

Los amantes de Teruel

Cuenta la tradición que a principio del siglo XIII vivían en Teruel los jóvenes Diego Martínes de Marcilla e Isabel de Segura, descendientes de familias muy principales. La vecindad de ambas casas y el trato constante desde la infancia se convirtieron con el tiempo en un profundo amor mutuo; entonces Diego solicitó de Don Pedro Segura, padre de Isabel, la mano de su hija. Éste, aunque estimaba la nobleza y las dotes del pretendiente, rehusó aceptar, alegando su escasez de fortuna por tener hermano mayor que heredaría a su padre, en tanto él podía dotar a su hija con generosidad. Informado Diego de esta dificultad, resolvió pedir a su amada un plazo de espera para lograr la hacienda necesaria al deseo de su padre; Isabel le concedió cinco años y él partió a la guerra.

Durante su ausencia Don Pedro intentó con ahínco que Isabel aceptara otros pretendientes, pero ella, fiel a su promesa, no aceptó ninguno. Llegado el fin del plazo y como Diego no regresaba, don Pedro apremió a su hija para que sé casara y ésta, viendo que el plazo de los cinco años había pasado sin saber nada de su amante, aceptó. A poco su padre concertó la boda con un vecino de Teruel cuyo nombre desconocemos y entonces regresó Diego cargado de honores y riquezas, cuando su Isabel pertenecía a otro dueño ante Dios y los hombres. El amante, desesperado, se reunió con su amada para despedirse de ella, rogándole que, en prenda de su imposible amor, le diera un beso, con lo cual se consideraría satisfecho. Ésta, invocando su honestidad, lo negó y entonces, luego de intentarlo de nuevo, Diego cayó muerto a sus pies.

Enterado el marido de cuanto acababa de ocurrir, decidió llevar el cuerpo del amante a la puerta de su casa, donde al amanecer lo descubrió su padre, don Martín de Marcilla, quién luego del natural sobresalto, transido de dolor, dispuso el entierro de su hijo en la Iglesia de San Pedro.

Durante la celebración litúrgica, todos los asistentes vieron acercarse al cuerpo inanimado a una dama encubierta que, llegando hasta él, descubrió su cara y lo besó, quedando allí reclinada hasta que, en el momento de iniciarse el entierro, fueron a apartarla y vieron que era Isabel Segura, quien no obedecía a los ruegos para que se retirase porque estaba muerta.

Ante el asombro de los presentes y después de que el novel marido relatara lo ocurrido, se decidió enterrar juntos a los dos amantes que tan desdichados habían sido en vida. Sucedió este infausto acontecimiento en 1217, siendo juez de Teruel don Domingo Celadas.

Desde entonces, la tradición nunca se interrumpió, contada de padres a hijos a través de los siglos. Documentos y obras literarias han recogido los pormenores de esta hermosa tradición histórica, la más importante de Aragón junto con la de la Virgen del Pilar. (José Luis Sotoca)

martes, mayo 12, 2009

Fallece Antonio Vega

Vía Yahoo! noticias me entero de que: "El compositor madrileño Antonio Vega ha fallecido hoy a los 51 años a consecuencia de una neumonía, ha confirmado a Efe un portavoz de la Sociedad General de Autores (SGAE)."

lunes, mayo 04, 2009

Susan Boyle

No se si por España estará teniendo tanta repercusión esta mujer como la tiene por las islas. Quizá ya haya rulado algún mail en cadena con el video (que por cierto algún espabilado ha puesto que no se pueda "embeber" así que sólo os puedo poner el link). El caso es que sino lo habéis visto os va a sorprender.

Os adelanto que hasta la fecha ya ha sido visto más de 50 millones de veces, que se dice pronto.

http://www.youtube.com/watch?v=9lp0IWv8QZY

jueves, abril 30, 2009

Convertir .doc a .pdf

Estoy seguro de que en más de una ocasión habéis necesitado convertir un fichero .doc a .pdf y no teníais ningún programa instalado en vuestro PC y no os apetecía meter más basura en ese Windows que ya se va atascando. O estabais en otro ordenador (universidad, trabajo...) y no teníais la posibilidad de instalar ningún nuevo software. Pues hoy os traigo una solución.
Con PDF Generator no tendréis más que seleccionar el fichero a convertir y en un momento recibiréis un mail con la URL desde donde podréis descargar vuestro nuevo fichero .pdf.
¿Cómo? ¿Qué no os apetece dar vuestro mail para que luego os lo llenen de basura? Pues para eso esta GuerrillaMail, una web que te generará una cuenta de correo temporal para recibir ese tipo de mails.

Espero que os sea útil.

miércoles, abril 29, 2009

La recesión en Irlanda

No sabía si poner esta entrada en este blog o en el otro pero creo que mejor ponerlo aquí. Los irlandeses son muy orgullosos de lo suyo y no les hace gracia que los de fuera mostremos las deficiencias que tienen. Este video que os pongo se rodó hace unos días en el mismo centro de Dublín. Buscaban empleados para una cadena de supermercados y se formó la cola que vais a ver. No os perdáis los comentarios (me refiero a los que tiene el video en YouTube). Veréis lo que piensan algunos irlandeses de los extranjeros que venimos a "quitarles" el trabajo.



Por otra parte ya que algunos me han escrito reclamando noticias mías y otros quejándose de que lo poco que escribo sobre mi vida en Dublín lo hago en inglés os voy a contar algunas cosillas (aunque nunca me ha gustado hablar de mi en este blog).

Lo primero debo decir que está haciendo muy buen tiempo (weather, que no time). Llueve a veces, ya que esto es Irlanda, pero en general tenemos mucho sol. Es engañoso porque con este sol en España hace calor pero aquí hace frío. Yo todos los días llevo camiseta, sudadera y chaqueta o abrigo.

Estuve tres semanas en una academia bastante buena y cara que me pilla a 10 minutos andando de mi casa. El problema era que mi gramática era mejor que la que allí enseñaban pero mi speaking y listening no. Pero bueno, eran 4 horas al día viviendo en inglés. Ahora llevo dos semanas sin academia. Mi novia vino o pasar cinco días y esta semana también se está pasando rápida. Aquí el problema es que es muy difícil hablar en inglés. Vivo rodeado de españoles. Sólo hablo inglés con un sudafricano que vive en el piso. Así que es muy posible que me apunte a otra academia 4 semanas (esta otra academia es mucho más barata, pero me han dicho que hay españoles, en la otra no había).

Sobre el tema curro aquí las cosas están muy chungas. No os podéis imaginar cuanto. Así que hay gente parada con buen nivel de inglés y con experiencia, por lo que yo, que tengo un buen CV pero mi inglés no es "fluency" pues... mal lo llevo.

El tema comida pues ahí está. Abuso de la pasta pero también me hago algo de verdura (principalmente guisantes congelados y menestra). Hambre no paso pero me privo de muchas cosas. ¡Qué duro es ser emigrante!... pero más duro es ser emigrante sin Internet!!!!!!!!
Ahora estoy de prestado en la habitación de uno que pilla la wifi del vecino porque sino me tengo que ir a la biblioteca pública que esta a 20 minutos y que últimamente está llena de críos que en vez de estar en clase están allí estudiando.

Ah, y por fin esta semana he conseguido solicitar el PPS number. Vamos, el número de la seguridad social para ser alguien aquí. Con eso ya podré abrir una cuenta en el banco, ir a pedir trabajo a las FAS (el INEM de aquí) y esas cosas.

Bueno, pues la verdad es que no tengo nada interesante que contar. Que paso muchas horas sólo viendo la tele o yendo al Tesco a comprar (aunque el zumo de naranja y las pizzas las compro en el ALDI que están más baratas, y la fruta en el mercadillo... bueno, miento, que ahora las pizzas las compro en Tesco que hay una oferta: las Dr Oetker por 1,90€. Ah, y las pechugas de pollo se la compro a un señor mayor que tiene una carnicería cerca de casa: 5 pechugas 6 €).

Un saludo para todos mis lectores en España y en el extranjero.

lunes, abril 20, 2009

La Fuente de los Incrédulos y el Canal Imperial

La realización de las obras del Canal Imperial, dada su envergadura, escapaban de las posibilidades específicas de la Real Sociedad Económica Aragonesa de Amigos del País, ya que se trataba de un viejo proyecto iniciado en los tiempos de Carlos I.

Cerca de dos siglos permanecieron paradas las obras del canal, no replanteándose seriamente su continuación hasta 1738 por parte de una compañía francesa, cuya ineficacia organizativa demoró indefinidamente la conclusión del proyecto que, por otra parte, vio aumentar espectacularmente su presupuesto.

Así llego el año de 1771, cuando el conde de Aranda, ya en la presidencia del gobierno, se dedicó al asunto y retiró la licencia a la citada compañía, nombrando una nueva dirección para la realización del canal. El canónigo Ramón Pignatelli era desde entonces el hombre que tomaba el encargo bajo sus manos y ya a partir de 1776 se observó un vivo ritmo en la ejecución de las obras, prueba del cual era la terminación cuatro años más tarde del acueducto que permitía salvar el río Jalón. Ya en 1782 las obras del canal llegaban a Zaragoza. Una vez construido el pequeño puerto de San Carlo en Casablanca, mediante una estructura de madera sobre el Huerva se consiguió que las aguas llegasen a lo que iba a ser el puentecillo de Miraflores en Torrero.

Por fin, el 30 de septiembre de 1786 se inauguró el puerto de San Carlos, del cual hoy en día aún cabe contemplar algunos restos de las primitivas instalaciones. Al día siguiente se inauguró el otro puerto, el de Miraflores. Con tal motivo hubo gran fiesta en toda Zaragoza, bajando trece barcazas por el canal, dos de las cuales permitieron a las autoridades locales viajar de puerto a puerto, ante la expectación de numerosos zaragozanos.

Días después se concluía la primera fuente abastecida por agua del canal, junto al puerto de San Carlos, conmemorando el feliz acontecimiento que muchos creían imposible. Por eso mismo la fuente hoy se denomina todavía “Fuente de los Incrédulos”. Es una fuente neoclásica de piedra blanca de cantería con bancos adosados que abrazan la fuente. El tesón de Pignatelli había triunfado. Sin embargo, este gran aragonés era derrotado por la muerte el 30 de junio de 1793 en una de las habitaciones de la casa de la Infanta.

El hombre del canal, fue sepultado en la Cripta del Pilar.

La construcción del Canal Imperial de Aragón fue, desde luego, el factor de desarrollo más importante para nuestro reino en aquel período. Tanto en función del aumento del regadío en la huerta zaragozana, como por su importancia como vía de transporte mediante barcazas, básica y fundamental en aquel tiempo y no sólo de mercancías sino también de pasajeros, sobre todo entre Tudela y Zaragoza.

Aunque financiado por el Estado el proyecto y su ejecución corrió a cargo de los propios aragoneses. La obra de Pignatelli sigue siendo un ejemplo vivo de fuerza y constancia para el resto de los aragoneses.

miércoles, abril 08, 2009

Google ha actualizado los pagerank

Hace un par de días Google actualizó los pagerank lo cual para algunas webs puede no ser una buena noticia pero para este blog es un notición ya que hemos subido una posición más. Cavilaciones Somatomórficas ¿o no? ya tiene pagerank 2. El crecimiento está siendo lento pero constante.
También quiero felicitar a www.thesweetfish.com pues ha obtenido, a los pocos meses de comenzar su aventura y gracias a su magnífico contenido, un pagerank de 3.

Ya estáis tardando en mirar vuestro pagerank… igual os lleváis una agradable sorpresa.

Actualizado 29/04/09:
La forma más fácil de conocer el pagerank es con la barra de Google. Si la tenéis instalada basta con visitar una web para saber su pagerank. Sino os la quereis instalar también podéis visitar esta web. Sólo hay que escribir la URL y os mostrará su pagerank.

lunes, abril 06, 2009

La mejor aplicación para el iPhone (hasta ahora)

Desde que salió hace unos días tengo clarísimo que la mejor aplicación disponible en la App Store es curiosamente una aplicación gratuita: el Skype. Poder hablar desde el iPhone como si estuvieras teniendo una conversación telefónica pero gratuita con cualquier lugar del mundo es algo increíble. Sólo necesitas encontrar una conexión WiFi abierta. Ya me podéis imaginar recorriendo las calles de Dublín con el iPhone en la mano buscando una red para poder llamar a mi novia. Después te puedes pegar hablando una hora o lo que quieras sin pagar ni un céntimo. Es realmente una aplicación imprescindible. Pero ahí no termina la cosa. Según algunos rumores que circulan por Internet la gente que esta probando la beta del nuevo sistema operativo (la versión 3.0) dicen que pueden conectarse al Skype vía 3G… es decir, que con tener una tarifa de datos plana (15€ al mes con Timofónica) tendríamos llamadas gratuitas sin tener que andar buscando redes abiertas.
Si tenéis un iPhone o un iPod Touch y no habéis bajando el Skype no se a que esperáis.

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.

sábado, febrero 28, 2009

El "Reciclatodo"

Sorprendido me quedé cuando encontré este contenedor en mitad de una calle de Granollers. Como se puede ver en la foto (está hecha con un iPhone, no esperéis la calidad de una réflex) permite reciclar Cd's, cartuchos de tinta de impresora, baterías de móvil, teléfonos móviles, pilas, bombillas de bajo consumo y halógenas.
Nunca había visto uno de estos por Zaragoza, ni por Madrid, ni por Barcelona... y es que hace tiempo que me llevo dando cuenta de que el Ayuntamiento de Granollers es diferente. No hay fiesta, Navidad, carnaval, San Jorge, San Juan, etc en la que el ayuntamiento no monte algo, gratuito por supuesto, para los ciudadanos. Además para la fiesta principal se amontonan los conciertos, gratuitos por supuesto, por diferentes plazas y parques. No se que partido gobierna allí, supongo que PSOE (o CiU quizá) pero está claro que es de los ayuntamientos más progresistas que he visto y la foto que acompaña este post así lo demuestra, un claro avance en cuanto a ecología.

Bueno, sólo quería mostraros lo que tiene una pequeña ciudad y no tenemos las grandes ciudades. A ver si el Sr. Belloch se entera y aprende y se deja de gastar el dinero en la mesa para su despacho.

jueves, febrero 26, 2009

Un poco de humor

Vía mail me ha llegado una imagen que me ha hecho gracia. Me alegro de no haber borrado el mail sin leerlo como suelo hacer con este tipo de correos.
No se si será un fake pero aun así me he reido. Os la pongo para que os riais también.

martes, febrero 24, 2009

Rendimiento de la función deepCopy

Hace unas semanas os mostraba otra forma de clonar objetos en Java. Una de las dudas que me quedaban era el rendimiento (o performance que dirían algunos aun escribiendo en castellano) que tendría esta función en comparación al clone().
He escrito un programita para poder comparar las dos formas de clonar y sacar conclusiones, podéis ver el código al final del post pero primero os quiero comentar los resultados.
En un árbol de tres niveles (padre - hijos - nietos) con un sólo padre, 320 hijos y 112.000 nietos (350 hijos cada uno de los hijos), es decir, 112.321 objetos a clonar los resultados han sido:
  • DeepCopy: 2.219 segundos.
  • Clone: 0.234 segundos.

Y no sólo esto, sino que si aumentábamos el número de hijos y nietos, por ejemplo a 400 y 400 respectivamente, el clone() seguía funcionando sin problemas mientras el deepCopy() arrojaba una java.lang.OutOfMemoryError: Java heap space. Todo esto ejecutando el código desde Netbeans 6.5 y sin modificar el tamaño de la Heap.

Por el contrario si reducimos el número de objetos a clonar: 50 hijos y 300 nietos cada uno (15.051 objetos en total) los tiempos se aproximan, como es lógico, y la función deepCopy() no se comporta tan mal:

  • DeepCopy: 0.469 segundos.
  • Clone: 0.047 segundos.

Por tanto queda claro que el uso de la función deepCopy no es aconsejable. Y no debería usarse a no ser que no sea posible implementar el método clone().

Actualizado: Gimenete me ha comentado que la función clone() del ArrayList no hace una clonación de los objetos contenidos, esto es lo que se llama "shallow copy" (copia superficial). He tenido que implementar una función handClone que lo que haga sea un bucle del ArrayList llamando a los clone() de los objetos contenidos.

Aquí tenéis el código con el que hice las pruebas (como siempre os agradecería que me comentarais si he cometido algún error):


import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

/**
*
* @author Abel J.
*/
public class Main {

public static void main(String[] args) {

int NUMERO_DE_HIJOS = 520;
int NUMERO_DE_NIETOS = 350;

System.out.println("Comenzando");

PersonaDTO personaHijo;
PersonaDTO personaNieto;
List<PersonaDTO> listaPersonasHijos = new ArrayList<PersonaDTO>();
List<PersonaDTO> listaPersonasNietos = null;

for(int i=0; i<NUMERO_DE_HIJOS; i++){
listaPersonasNietos = new ArrayList<PersonaDTO>();
for(int j=0; j<NUMERO_DE_NIETOS; j++){
personaNieto = new PersonaDTO("Nieto"+j, j, "Calle del nieto "+j, null);
listaPersonasNietos.add(personaNieto);
}
personaHijo = new PersonaDTO("Hijo"+i, i, "Calle del hijo "+i, listaPersonasNietos);
listaPersonasHijos.add(personaHijo);
}

PersonaDTO persona = new PersonaDTO("Padre", 28, "Calle del padre", listaPersonasHijos);

System.out.println("Termina la carga de datos, ahora hacemos la copia:");
PersonaDTO personaCopiada = null;
long startTime1 = 0;
long endTime1 = 0;
long startTime2 = 0;
long endTime2 = 0;
try{
startTime1 = System.currentTimeMillis();
personaCopiada = (PersonaDTO)persona.deepCopy();
endTime1 = System.currentTimeMillis();

startTime2 = System.currentTimeMillis();
personaCopiada = (PersonaDTO)persona.clone();
endTime2 = System.currentTimeMillis();

double seconds1 = (endTime1 - startTime1) / 1000.0;
double seconds2 = (endTime2 - startTime2) / 1000.0;

System.out.println("DeepCopy: "+seconds1+" segundos.");
System.out.println("Clone: "+seconds2+" segundos.");
}catch(Exception e){
System.out.println("Exception mientras copiaba: "+ e.getMessage());
}
}
}

/**
*
* @author Abel J.
*/
class PersonaDTO implements Serializable, Cloneable{
private String nombre;
private int edad;
private String direccion;
private List<PersonaDTO> hijos;

public PersonaDTO(){}

public PersonaDTO(String nombre, int edad, String direccion, List<PersonaDTO> hijos) {
this.nombre = nombre;
this.edad = edad;
this.direccion = direccion;
this.hijos = hijos;
}

/**
* @return the nombre
*/
public String getNombre() {
return nombre;
}

/**
* @param nombre the nombre to set
*/
public void setNombre(String nombre) {
this.nombre = nombre;
}

/**
* @return the edad
*/
public int getEdad() {
return edad;
}

/**
* @param edad the edad to set
*/
public void setEdad(int edad) {
this.edad = edad;
}

/**
* @return the direccion
*/
public String getDireccion() {
return direccion;
}

/**
* @param direccion the direccion to set
*/
public void setDireccion(String direccion) {
this.direccion = direccion;
}

/**
* @return the hijos
*/
public List<PersonaDTO> getHijos() {
return hijos;
}

/**
* @param hijos the hijos to set
*/
public void setHijos(List<PersonaDTO> hijos) {
this.hijos = hijos;
}

@Override
public boolean equals(Object obj) {
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
final PersonaDTO other = (PersonaDTO) obj;
if ((this.nombre == null) ? (other.nombre != null) : !this.nombre.equals(other.nombre)) {
return false;
}
if (this.edad != other.edad) {
return false;
}
if (this.hijos != other.hijos && (this.hijos == null !this.hijos.equals(other.hijos))) {
return false;
}
return true;
}

@Override
public int hashCode() {
int hash = 7;
hash = 11 * hash + (this.nombre != null ? this.nombre.hashCode() : 0);
hash = 11 * hash + this.edad;
hash = 11 * hash + (this.direccion != null ? this.direccion.hashCode() : 0);
hash = 11 * hash + (this.hijos != null ? this.hijos.hashCode() : 0);
return hash;
}

public Object deepCopy() throws Exception {
ObjectOutputStream oos = null;
ObjectInputStream ois = null;
try {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
oos = new ObjectOutputStream(bos);
// serialize and pass the object
oos.writeObject(this);
oos.flush();
ByteArrayInputStream bin = new ByteArrayInputStream(bos.toByteArray());
ois = new ObjectInputStream(bin);
// return the new object
return ois.readObject();
} catch (Exception ex) {
throw ex;
} finally {
try {
oos.close();
ois.close();
} catch (IOException ex) {
throw ex;
}
}
}

// clonacion a mano
static ArrayList<PersonaDTO> handClone(List<PersonaDTO> list) throws CloneNotSupportedException{
if(list != null){
ArrayList<PersonaDTO> newlist = new ArrayList<PersonaDTO>();
for(PersonaDTO obj : list){
newlist.add((PersonaDTO)(((PersonaDTO)obj).clone()));
}
return newlist;
}else{
return null;
}
}

@Override
protected Object clone() throws CloneNotSupportedException {
PersonaDTO obj = null;
try{
obj=(PersonaDTO)super.clone();
obj.setHijos(handClone(getHijos()));
}catch(CloneNotSupportedException ex){
System.out.println("No se puede duplicar");
}
return obj;
}
}