martes, 23 de diciembre de 2008

Feliz Navidad

Légolas, Discordia y Guille te desean una Feliz Navidad.

Hemos preparado una foto navideña para celebrarlo y felicitarte y, sí, antes de que se desate la polémica como con la postal de la Casa Real, admitimos que hay un pequeño montaje ya que nos resulto casi imposible posar a los tres a la vez. De hecho sólo había un gorro de Papa Noel.




Por otro lado queríamos mandar una foto de nuestro Belén pero yo me dedico a montarlo mientras que Légolas y Discordia juegan a "Godzilla en Judea".



¡Feliz Navidad!

sábado, 18 de octubre de 2008

Mi primera marcha BTT: Montes de la Cañada 2008

Aunque con un poco de retraso os aburriré con una batallita de finales de Septiembre, mi primera marcha ciclista de montaña...

Algunos días antes

Se acercaba el día de la Marcha BTT Montes de La Cañada y ya llevábamos un par de años pensando en participar. De todos modos iba a ser la primera marcha para Elías y para mí y pensábamos en correrla con tranquilidad. Tanto era así que teníamos conversaciones como esta:
"Que no, que no Jesús, que no me voy a picar. Hace tiempo que perdí la dignidad y el espíritu competitivo. No me importará quien me adelante, yo voy a ir a terminar la carrera."
"Elías no sé tú pero yo pienso ir a rebufo del coche escoba."
Y llegó el Domingo 28 de Septiembre

Finalmente quedamos Elías, Diego y yo para hacer la marcha. Había estado lloviendo bastante durante los días antes así que, aunque había mucha, tal vez no había tanta gente como era de esperar.


Con mi primer dorsal, el 416, me situé con Elías en la parte final del pelotón para no molestar y tomarnos las cosas con tranquilidad. Diego se fue más adelante y no lo volveríamos a ver hasta dos horas más tarde. Entonces nos dieron la salida neutralizada en la que se daba una vuelta por el pueblo y la gente empezó a adelantarnos como loca: grupos 2 o 3, de 7, solitarios, más y más gente, hasta un abuelo con una bici diminuta y chirriante que llevaba una bolsa de Mercadona colgando del manillar (presumiblemente con un bocadillo). Elías y yo nos mirábamos con cierto asombro pero sin ninguna vergueza y de vez en cuando yo miraba atrás por si venía el coche escoba pero ni rastro. Nos habrían adelantado unos 50 pero aún quedaba mucha gente por detrás.

Primera vuelta: el videojuego.

Entonces cruzamos la salida y comenzó la primera vuelta. Íbamos cogiendo ritmo pero todavía nos iban adelantando y la cosa siguió así hasta más o menos el tercer kilómetro. Fue entonces cuando le dije a Elías que teníamos que pasar al padre e hijo de unos 10 años que iban justo delante nuestro porque empezaban a estorbar. Dicho y hecho y lo siguiente que vimos era un grupo que nos sacaba un poco de distancia. Los cogimos y los pasamos, lo malo es que delante había otro grupos. Los cogimos y los pasamos, pero, volvíamos a ver más gente a nuestro alcance... La historia se repetía una y otra vez.

La marcha se había convertido en un maldito videojuego arcade en nivel fácil. Era como jugar al Outrun en vivo adelantando y adelantando. Fue así como llegamos a una bajada conocida que termina en un giro de 90º bastante estrecho. Le dejé un poco de distancia a Elías por delante y miraba hacia atras por si venía alguien inexperto que me pudiese tirar en la frenada. ¡Despejado! Tomo la curva y... ¡Elias en la cuneta! Bueno más bien en el cauce del Turia.

Ramas y arbustos impedían verlo claramente. Sangraba por la rodilla.

Elías ¿estás bien? - Pregunté preocupado.
Sí tranquilo, no es nada. -Entonces mi cara cambió convirtiéndose en una mezcla de enfado y cachondeo.
Pero tío... ¿Cómo te caes en esa curva? ¡La conocemos de sobra!

En fin, encima de caerse tuvo que aguantar mi bronca y el cachondeo posterior con los colegas.

Reanudamos la marcha y seguimos adelantando a más y más gente durante el resto de la vuelta, bastantes más de los que nos adelantaron durante la vuelta neutralizada.

El maldito gordo cabrón de azul.

Al pasar por meta y comenzar la segunda y última vuelta las cosas habían cambiado. Ya no se veían grupos y la cosa se había estirado bastante. No se veía a casi nadie por delante ni por detrás. Con unos 200 m de ventaja rodaba un biker corpulento con mallot azul. Pensé que lo alcanzaríamos poco a poco pero, un par de kilómetros más tarde, seguía ahí.

Fue entonces cuando, al pasar por la curva de la caída de Elías, se adueñó de mi un sentimiento casi desconocido: competitividad. Me giré hacia Elías y con mirada obstinada grité:

¡Vamos a por ese maldito gordo cabrón de azul!
Ja ja ja ja ¡Que picado que eres! - Contestó

Pero el gordo cabrón de los huevos tiraba bastante para nosotros, al contrario de lo que pensaba, se nos iba un poco en las numerosas pequeñas rampas que había. De todos modos hacía rato que me había dado cuenta de que yo iba bastante bien en los llanos, me percaté de que después de las subidas, casi todos se tomaban un respiro y que a mí no me hacia mucha falta. Decidí usar eso contra el maldito gordo, no podía hacer otra cosa en realidad.

Una pequeña rampa y se abrió ante nosotros una de los llanos más largos. Poco a poco nos acercábamos, ¡lo estábamos consiguiendo! De repente estaba a su altura y el maldito gordo de azul resulto ser... ¡Un señor de unos 60 años! ¡Joder!

Era momento para malas noticias: el hombre respondía al pique, yo había gastado casi todas mis fuerzas y se acababa el llano. Y así, una vez más en mi vida, tuve que ver como un anciano me superaba en una subida. Lo tenía otra vez delante y tenía que esforzarme para mantener su rueda.

Elías nos alcanzó al poco tiempo y se convirtió en un espectador de lujo durante el siguiente kilómetro que era de terreno mixto: yo le pasaba en los planos y el hombre me aleccionaba en las subidas. ¡Diosssss! ¡No se acababa nunca!

Pero el pique parecía pasarle más factura a él (que poca vergüenza tengo al afirmar esto: 32 años contra unos 60) Se acercaba la subida más larga y aunque en principio le tenía que favorecer presentía que ahí conseguiría adelantarlo definitivamente.

El último adelantamiento.

Comencé la suave ascensión a su rueda y a los pocos metros se confirmaron mis sospechas: yo podía ir más rápido. Tenía que adelantarlo pero el rodaba por el lado fácil y me tuve que salir por su derecha donde las piedras sueltas y las grietas me dificultaban mantener la velocidad. Justo cuando estaba terminando de sobrepasarlo alguno de los obstáculos me lanzó contra el. Faltó poco para tirarlo y me disculpé por ello. Fué el broche de oro a nuestro pique. Después de eso se quedó atrás y no lo volví a ver.

Y sobre esta batallita sólo me queda decir:

Amigo, si por casualidad lees esto, ni que decir tiene que lo de gordo cabrón no iba en serio y fue fruto de la adrenalina.

Tramposos y más tramposos

Elías tenía ahora mucho mejor cara que yo, me sobrepasó en la subida y a duras penas podía seguir su rueda. Pero se acabó, los 3 km que quedaban eran prácticamente llanos y no se veía a nadie delante. Elías no parecía tener ganas de subir el ritmo y yo decidí terminar quemando mis últimas fuerzas intentando alcanzar a alguien más así que lo pasé. Poco después divisé a un globero, iba muerto. No lo entendía, con esa velocidad ni de coña podría haber rodado 36km por delante mío. Lo adelanté fácil y vi a otro mas adelante que no marchaba más rápido que el primero ¿cómo podía ser? Quedaba poco para meta pero lo justo para pasarlo y así ocurrió.

La explicación es bien fácil: hay gente que da unos tres cuartos de vuelta y se espera a ser doblada para terminar completando sólo una. Al final te dan tu posición en la llegada y las cuentas no te cuadran. Finalizaron unos 260 y yo fui el 202 de ellos. Pienso que hubieron entre 20 y 30 tramposos por delante de mí.



Y eso es todo de momento, ahora estoy planeando participar en la marcha de Moral de Calatrava pero eso será otra historia.

martes, 9 de septiembre de 2008

Experimentado con ArgoUML y CodeIgniter

Llevaba bastante tiempo con ganas de probar Codeigniter. Después de comparar Symfony y Zend Framework hace unos cuantos meses, alguien me sugirió hacerlo. Por cierto con los avances que han tenido cada uno de estos proyectos dicha comparativa está prácticamente obsoleta.

La semana pasada empecé a trastear con CodeIgniter y volví a darle vueltas a la cuestión de que no tuviera una serie de comandos para ayudar con la generación de controladores, modelos, etc. Así que se me ocurrió utilizar mi querido ArgoUml para "pintar" las clases y después generarlas en los directorios del proyecto.

El genearador de código PHP

Entonces me di de bruces con lo que para mí es un viejo problema en la generación de clases de ArgoUML: añade el prefijo "class." al nombre de tu clase como nombre de fichero. Es decir, si tu clase se llama Clientes obtendrás un fichero de nombre class.Clientes.php. Me topé por primera vez con esto en un proyecto llevado a cabo en mi trabajo en el que la capa de presentación está hecha en Flex y el resto en PHP. Nos encontramos con la restricción, por parte de AmfPHP, de que el nombre de las clases y los ficheros que la contienen debe ser el mismo. Esta misma obligación nos la encontramos en CodeIgniter, o sea, nuestra clase Clientes deberá encontrarse en el fichero clientes.php.

Otro convenio utlizado por ArgoUML me terminaría afectado: el nombre de las clases generadas tiene antepuesto toda la cadena de paquetes de la que depende. Me explico: si nuestra clase Clientes pertenece al paquete modelo, tomará como nombre modelo_Clientes.

Estuve pensando como salvar esta dificultades pero las cosas que se me ocurrían no eran muy limpias. Finalmente opté por una solución que tampoco es como para estar orgulloso pero me pareció con bastante diferencia la mejor: recompilar el módulo generador de código PHP de ArgoUML a mi gusto.

¡Viva el código libre! Un par de cambios y a volar

Pues nada a navegar por la página de Argo y buscar el código fuente del subproyecto ArgoUML-PHP. No cuesta mucho dar con el repositorio SVN así que un checkout y ya tenía el código en mi PC.

Después de esto tengo que reconocer que la cosa fue bastante fácil, si no, os aseguro que la pereza hubiese podido conmigo. El código descargado viene con el archivo de proyecto para abrirlo en Eclipse. Nos encotraremos algún problema de dependencias con archivos .jar que podremos obtener de la propia instalación de Argo. Una vez resueltas sólo hay que abrir el fichero NameGenerator.java y localizar dos porciones de código.

La primera corresponde a la nomenclatura de las clases con el prefijo de paquetes. Hay que comentar el código tal como veis aquí:


public static final String generateClassifierName(Object modelElement) {
if (!Model.getFacade().isAClassifier(modelElement)) {
throw new ClassCastException(modelElement.getClass()
+ " has wrong object type, Classifier required");
}

String sName = Model.getFacade().getName(modelElement);

/*String sPackageName = generatePackageName(modelElement);
if (sName != null && sPackageName != null
&& sPackageName.length() > 0) {
sName = sPackageName + "_" + sName;
}*/

return sName;
}


El segundo cambio es el del nombre del fichero:


if (iMajorVersion > 4) {
if (Model.getFacade().isAInterface(modelElement)) {
sFilename += "interface.";
} else if (Model.getFacade().isAClass(modelElement)) {
sFilename += "class.";
} else {
sFilename += "unknown.";
}
}


se cambia la cadena "class." por la vacía y resuelto.

Después de hacer esto creamos nuestro .jar y sustituimos el existente en el directorio /ext de la intalación de ArgoUML. Al principio el programa no me lo cogía, al generar código no me aparecían las opciones PHP4 ni PHP5, finalmente lo resolví eliminado el archivo manifest del .jar.



Modelando

Lo primero que tendremos que hacer es imitar la parte de la estructura de CodeIgniter que nos interesa. Para ello crearemos un proyecto nuevo en Argo y después un paquete llamado models y otro llamado cotrollers. Hacemos esto para que llegados al momento de generar código asignemos como ruta nuestro path a Codeigniter/system/application y cada una de las clases vayan a su directorio correspondiente.



Aviso que necesitaremos añadir al path de PHP la ruta hasta CodeIgniter/system/application por la forma en la que Argo nos escribirá los requires entre clases.

Ya solo nos queda un quebradero de cabeza. Todas nuestras clases de controlador deberían heredar de la clase Controller de CodeIgniter pero si representamos la misma en nuestro modelo se nos creará un require de una clase que no debería existir (ya está definida en el framework). La solución que se me ocurrió para esto fue añadir una clase adaptador MiController que hereda de Controller de Codeigniter. Esta clase la generaremos sólo una vez ya que después le añadiremos en el editor "extends Controller" y si volvemos a generarla machacaremos el cambio y tendremos que volver a escribirlo. Después todas las clases controlador que creemos heredarán de MiController.


class MiController extends Controller
{
// --- ASSOCIATIONS ---


// --- ATTRIBUTES ---

// --- OPERATIONS ---

/**
* Short description of method __construct
*
* @access public
* @return mixed
*/
public function __construct()
{
// section -87--2--75--55--89caeb7:11c46a97fcc:-8000:00000000000008BA begin
parent::__construct();
// section -87--2--75--55--89caeb7:11c46a97fcc:-8000:00000000000008BA end
}

}


Lo mismo nos ocurrirá con las clases modelo pero la solución es exáctamente la misma.


class MiModelo extends model
{
// --- ASSOCIATIONS ---


// --- ATTRIBUTES ---

// --- OPERATIONS ---

/**
* Short description of method __construct
*
* @access public
* @author Depto. Web/WAP de Alvento Soluciones, <guillermo@alvento.com>
* @return mixed
*/
public function __construct()
{
// section -87--2--75--55-438df237:11c46b7f1db:-8000:0000000000000878 begin
parent::Model();
// section -87--2--75--55-438df237:11c46b7f1db:-8000:0000000000000878 end
}

} /* end of class MiModelo */


Una vez hecho esto podremos modelar tranquilamente creando nuestras clases, modificándolas en Argo y volviendo a generar el código sin perder lo que hayamos escrito en el IDE (como ya expliqué en su día)




viernes, 29 de agosto de 2008

La cena del Sábado y la vuelta a casa

Recogimiento

El sábado fue un día de descanso. Casi todos querían dedicar una día a no hacer nada, simplemente a descansar.

Yo pensaba salir un poco por la tarde a eso de las 6 pero el tiempo se puso muy feo y se me fueron las ganas. Aquella tarde aparecieron unas nubes por las montañas de alrededor que parecían ir descendiendo por sus laderas como una avalancha a cámara lenta. Nos quedamos embobados contemplando el fenómeno pensando si llegarían hasta nuestra altura, pero la cosa no fue a más.

La cena

En realidad el único plan del día era pegarse una buena cena en Potes. A falta de sardinas cenaríamos en un asador.



La cena estuvo bastante bien, la mayoría nos decantamos por el Entrecot a la Tresviso. La salsa de queso estaba muy buena. Lo acompañamos de una tabla de quesos y patés de la zona y nos pusimos las botas. Una vez más conseguí salir de un restaurante sin tirar nada por la mesa.


La vuelta



Que tristes son los viajes de retorno, se hacen mucho más pesados que los de ida. Nada más salir hicimos parada en el mirador de Piedrasluengas, había salido un buen día y valía la pena.


Después el flamante GPS de Ernesto nos hizo tomar un "atajo" camino de Burgos que, más tarde, calculamos en una pérdida de tiempo de 45 minutos. Con todo esto llegamos a Moncófar a las 10 de la noche.

Por qué queremos volver a Cantabria.

Queremos volver por que nos quedaron unas cuantas cosas por hacer:
  • Subir en el teleférico de Fuente De y volver haciendo senderismo y/o MTB
  • Hacer la ruta de Tresviso. Es una ruta de senderismo bastante difícil por lo que sabemos y sí que harían falta los bastones para ayudarse a caminar ;)
  • Senderismo por el Cares. Parece que es una ruta que se está poniendo bastante de moda entre los senderistas.

A esto hay que añadirle que te pasas una semanita a unos 18-20º, mientras en tu ciudad están a unos 40º. Claro que yo se de alguien que volvería para comer sardinas.

martes, 26 de agosto de 2008

El día de la etapa reina. Como torear y hacer MTB al mismo tiempo.

¡En marcha!

Viernes 15 de Agosto, al fin sale un día soleado y además resulta que era el día en que íbamos a hacer la salida más larga con las bicicletas.

Nos pusimos en marcha a las 10:30 y como siempre por allí: cuesta arriba. Dejamos Armaño y llegamos a Rases. Hasta ese momento todo bien, habían algunas cuestas duras pero asequibles.


Lo malo fue que al llegar a Rases nos encontramos con esas malditas rampas que, aunque pertenecen a caminos de tierra, se hormigonan para que los vehículos tengan tracción. Dicho de otro modo: la cosa empezó a ponerse bastante fea. Aguantamos bastante pero justo en la última rampa antes del cruce de caminos al que habíamos llegado el primer día tanto Beni como yo no pudimos más y tuvimos que rebajarnos a caminar.



En fin, después de eso alguna cuesta más y luego un ligero descenso para descansar. Íbamos buscando un cruce de caminos porque la ruta planificada era una especie de ocho y teníamos que tomar un camino a mano izquierda para después volver al mismo punto por el otro. Pero entonces lo vimos. Estaba allí y no nos dejaba pasar.

El secreto que Ernesto nunca contará a sus padres

Ante nosotros había una manada de vacas pastando y con ellas un macho enorme que nos miraba con cara de pocos amigos. La mala noticia era que el desconfiado animal estaba en la misma orilla de nuestro camino.

Pero antes de continuar hablaré un poco de los padres de Ernesto: se trata de una pareja aficionada al mundo taurino, no se pierden ni una sola corrida de toros de la tele, tienen DVDs de tauromaquia y cuando en Verano comienzan las fiestas patronales disfrutan de "els bous al carrer" (toros sueltos por las calles para quien no lo entienda). En resumen, son unos forofos de la fiesta nacional. Dicho esto sería obvio pensar "pues de tal palo tal astilla" ¿verdad?

Allí estábamos a unos 50 metros del toro, parados, pensando si había alternativa para esquivar a los animalitos no se fueran a molestar. No la había, así que Ernesto caló sus zapatillas en los pedales y se dirigío de forma decidida hacia el morlaco. Épico, si sus padres lo hubieran visto estarían orgullosos de él.



Pero nuestro bovino amigo sintió curiosidad y dio unos pasitos hacia delante quedándose justo en el centro del camino. Fue entonces cuando el heróico desfile de Ernesto se convirtió en una huída despavorida. Tengo que decir que no le vi ni dar la vuelta, debió ser el giro más rápido jamás dado sobre una bicicleta. Giró sobre si mismo mas rápido de lo que alguien lo hubiese hecho sobre un monociclo, de repente, en vez de alejarse se acercaba a mí acelerando. Si en vez de nueve hubiese tenido 18 piños habría llegado hasta el último esprintando. Huelga decir que el animal no se había molestado en seguirle.


Cuando me di cuenta Ernesto estaba casi en el Mediterráneo y Beni estaba frente al toro a unos 15 metros, parado. El bicho seguía con cara de mala hostia pero a Beni, pese a ir vestido de rojo, no le importaba mucho.

Finalmente se cansó de observarnos y se retiró a tres o cuatro metros de nuestro camino. Beni avanzó pasando por su lado y poco después le seguí yo. Me detuve y Ernesto no venía tras de mí. Me di la vuelta y se lo estaba pensando pero finalmente arrancó y menuda estampa ¡le faltaba camino a su derecha para pasar alejado del toro!



En fin, esperemos que sus padres nunca se enteren de esto. De todos modos, llegados a este punto, hay algo evidente que no podemos seguir ocultándo: Ernesto, eres adoptado.

De correlindes a cagalástimas

Seguimos subiendo por rampas muy duras en las que de vez en cuando caminábamos un poco para no perder la costumbre. De lo que no nos habíamos dado cuentas es que la posición del toro era justo la de la intersección que buscábamos y que, al concentrarnos en él, habíamos tomado la rama contraria, la de vuelta. El problema entonces fue que la ruta estaba pensada para subir por donde era más fácil y descender por la mayor inclinación, pero estábamos haciendo lo contrario.

Finalmente llegamos al punto más alto de nuestra ruta y lo celebramos con una foto triunfal digna de nuestra seriedad ante el reto acometido:



Después de eso comenzamos el descenso. Ernesto se escapaba gracias a su habilidad y Beni y yo bajamos más lentamente. Yo bajaba un poco más rápido así que en un momento dado se me ocurrió hacerle una foto en multidisparo.

Apareció entre los arboles con su estilo característico...



daba gusto verle...



su posición retrasada con respecto al sillín para tener más confianza...




pero ¡oye! ¡Que hay que girar! ¡Vamos nene que no vas tan rápido como para hacer un recto!



Bueno que se le va a hacer.


Después de eso seguimos por terreno mayoritariamente descendente hasta la vuelta a casa.

De compras

La tarde la dedicamos a hacer compras en Potes para la familia, etc. La cosa iba llegando a su fin y no nos podíamos olvidar de cumplir con la típica obligación.