21 junio 2010

Clase CDATA en JDOM

Importante: para evitar errores, es recomendable utilizar en los campos que contengan texto en un documento XML la clase CDATA para incorporar texto a dichos campos. Por ejemplo:

...
Element el= new Element("noticia");

el.addContent(new Element("observaciones").addContent(new CDATA("Noticia ya publicada")));
...


quedará en el documento XML como:

<noticia>
<observaciones><![CDATA[# Noticia ya publicada]]></observaciones>
</noticia>




06 mayo 2010

Hacer un TRANSFORM con MySQL

Tenemos una tabla que contendrá las claves que queremos totalizar:

CREATE TABLE tCodApi (
CodApi VARCHAR(25) NOT NULL,
PRIMARY KEY(CodApi)
);

La llenamos con las claves que necesitamos.

INSERT INTO tCodApi
SELECT CodApi
FROM tramApis
GROUP BY CodApi;

Ahora generamos una consulta de la siguiente manera, con el select más externo, recorremos la tabla de claves, y el GROUP_CONCAT va generando una única cadena que contendrá todos los valores del grupo. El concat más externo nos facilitará la tarea de generar la cadena final.

select
concat (
"SELECT t.FechaPeticion ",
group_concat(
concat(
", SUM(IF(.tCodApi = '", api.CodApi, "', 1, 0)) as '", api.CodApi, "'"
)
order by api.CodApi
separator " "
),
" FROM TramitacionAPIS t ",
" GROUP BY FechaPeticion ",
" ORDER BY FechaPeticion DESC ",
" LIMIT 0,20; "

) as pepe
FROM tCodApi api
where api.CodApi<>"--"
order by api.CodApi;

27 abril 2010

Acceso desde Tomcat a ficheros en discos externos

Problema: Apache Tomcat en Windows, dentro de un servlet se ha de hacer una operación de lectura sobre un fichero alojado en un disco externo, llamémosle Z:. Para acceder a dicho disco hay que determinar la ruta UNC, es decir:

Z:\carpeta1\carpeta2\fichero.txt

hay que transformarlo en

\\servidor\carpetaCompartida\carpeta1\carpeta2\fichero.txt

Esto por una parte, pero otra tanto otra fundamental es que el usuario sobre el que corre el servicio Tomcat, tenga permisos de lectura/escritura sobre la carpeta compartida, es decir, tenga acceso a

\\servidor\carpetaCompartida\carpeta1\carpeta2\fichero.txt

La prueba del 9 es la siguiente: si desde un programa hecho en java, puedes acceder a dicho fichero sin problemas, pero desde dentro del servlet no, entonces estamos en el caso de problemas de permisos.

Solución: (En Windows XP) Vamos a Panel de Control, Herramientas administrativas, y hacemos que el servicio se ejecute con el usuario que sí tiene acceso a dicho recurso compartido.

Espero que sea de utilidad.

09 diciembre 2009

Cómo detectar el navegador del usuario con JavaScript

Me voy a ir apuntando en algún sitio todas esas búsquedas que voy haciendo por los mares virtuales, para ver si de una vez por todas no hago las mismas cada vez que me enfrento a los mismos problemas.
Hoy hay que localizar el navegador del usuario. Por qué? Bien, la razón es que el Internet Explorer tiene una manera de interpretar las medidas de la caja del modelo CSS. La manera no es ilógica (como en un principio pensé, soy malo, y qué?) pero es diferente a la de los demás, y no cumple la recomendación del W3C. Así que me toca localizar el navegador, y aplicar la hoja de estilos en función del navegado. Amos p'allà...!


Como lo estoy haciendo con jsp, tiramos de google, y probamos una de las millones de opciones, que, como no, funciona. http://www.ericgiguere.com/articles/how-to-detect-internet-explorer.html





<%
String ua = request.getHeader( "User-Agent" );
boolean isFirefox = ( ua != null && ua.indexOf( "Firefox/" ) != -1 );
boolean isMSIE = ( ua != null && ua.indexOf( "MSIE" ) != -1 );
response.setHeader( "Vary", "User-Agent" );
%>

<p> <%=ua %></p>




Por ejemplo, para mi nuevo y flamante Google Chrome para MAC OSX, la respuesta es


Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_2; en-US) AppleWebKit/532.5 (KHTML, like Gecko) Chrome/4.0.249.30 Safari/532.5

Para el Firefox 3.5.5 para MAC OSX, la respuesta es:

Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; es-ES; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5 GTB6

Me quedan las pruebas para los navegadores sobre Windows, para ver respuestas y en función de cada uno cargar un CSS u otro.

02 septiembre 2009

BCN-Cerdanyola-Sant Cugat y vuelta

Día de "descoberta". Desde casa a Torre Baró, de ahí a Cerdanyola por la montaña, pasando por Can Lloses. De Cerdanyola, por carretera hasta Sant Cugat. Allí hay dos posibilidades, volver por Can Borrell o bien seguir hasta coger la Arrrabassada. Segunda opción. La verdad es que se hace largo. Una vez llegado a BCN, quedan 11km. y vuelvo a casa por la montaña llegando de nuevo a Torre Baró, y de ahí a casita.
Posted by Picasa

22 agosto 2009

BCN-Cerdanyola y vuelta

Sábado 07:30h

Hoy era día de descubrimiento. No había hecho esta ruta y tenía tiempo y ganas. De BCN a Torre Baró y de ahí a la Carretera de Cementerio de Horta. Un poco más abajo se abre un camino que te lleva a Cerdanyola. Luego es cuestión de encontrar la carretera que te trae de nuevo a BCN, pasando por Can Coll, el Forat del Vent, etc.... Luego 5km más a Torre Baró y a casa. 1h26min. Lo cierto es que hay una primera parte de bajar mucho y rápido, y luego 8km de subidita.

Otra para el álbum de rutas.


Posted by Picasa

20 agosto 2009

Salida con bici

Hoy he tenido la posibilidad y hay que aprovecharla. Me he levantado prontito y con ganas y a las 06:30h he ido a dar una vueltecita con la bici. Hay que aprovechar las horas de menos calor, porque estos días pega con ganas.

He ido por el lateral de la Ronda, y he subido por la carretera de Vallvidrera. Me ha costado, y sobre todo la parte final, que coge unas rampas importantes. Una vez llegado a la bifurcación hacia el Tibidabo, todo es bajada. En total, 50min. de sufrir y 30min. de bajada casi sin pedales.

08 abril 2009

Carcassonne, el principio del "casulé"

Hemos visitado Carcassonne, bajo una finísima lluvia. La ciudad, llena de personal, y remodelada para los visitantes, es bonita, curiosa, y merece la pena verla.

En ella hemos probado el plato típico de la zona, el "cassoulet", que ha derivado en la comidilla de todas las vacaciones. Le llaman la fabada francesa, y hasta aquí puedo leer.

13 diciembre 2008

Hibernate: Primeros pasos

Este es el intento n mil de comenzar con Hibernate. Por ahora todo me va bien con mi Eclipse, mi Tomcat 5.5.27, mi MySQL 5.0 y unos servlets que me funcionan desde hace tiempo. Ahora hay que dar un paso más y utilizar Hibernate, que me han hablado maravillas, pero que no he podido hacer funcionar. Al lío:

Lo primero es bajarse el hibernate-core y las hibernate-tools. Ok. Hecho. Las tools se utilizan para poder facilitar tareas en Eclipse. Cuando las descomprimimos, tenemos dos carpetas features y plugins. Los contenidos de las mismas, los debemos pasar a las carpetas correspondientes de la instalación de Eclipse que tengamos. Ok. Hecho. Rearrancamos Eclipse con la opción -clean, y vemos qué ha ocurrido. En Software Updates > Installed Software, debemos localizar un elemento Hibernate Tools. Si es así, lo tenemos bien instalado. Continuamos.

Busco algún tutorial en Google para ver cómo comenzar y encuentro éste: http://programacion-shinseiki21.blogspot.com/2008/02/hibernate.html, que está muy bien, pero tiene algún paso demasiado rápido. Por ejemplo, a él le funcionan las librerías que indica que se han de cargar en el Build Path del proyecto, pero falta alguna. En mi caso, aparte del slf4j-api-x.y.z.jar, debía cargar slf4j-log4j12-x.y.z.jar pues de lo contrario me daba error al ejecutar el programa.

Una vez las pruebas hechas, y adaptadas a mi máquina, todo fue "flors i violes".

08 octubre 2008

Ubuntu y los problemas al compilar C



Haciendo una PAC de FPI con el Ubuntu, me he encontrado que con la instalación básica da una serie de errores al utilizar el gcc.

De hecho lo que pasa es que faltan librerías y no encuentra el stdio.h y otros. Una rápida vuelta por Google nos da la solución: hay que instalar algo más. Vamos a ello!.

sudo apt-get install build-essential

Esto instala las librerías que toque y te permite compilar sin problemas.

04 octubre 2008

Fujitsu Amilo M7440G, Disco duro y WiFi

Pues aquí estamos, con un disco duro que ha fallecido en acto de servcio, la garantía caducada y con un poquito de tiempo. Lo primero es comprar un disco duro SATA: 160 Gb, 46 EUR. OK. Segundo, se instala. OK. Probamos de instalar el XP: el ordenador no detecta el disco duro: malo! Probamos de instalar el Ubuntu, detecta el mío el del vecino y no se cuántos más ;-) Tiramos de linux y nos encontramos con que no va el WiFi, y ya me dirás un portátil sin WiFi es un fijo con la pantalla pequeña. Solución: Google, Ubuntu Amilo M7440G WiFi. Nos lleva a la página de una pequeña aplicación que te permite activar el Wifi: http://fsam7440.sourceforge.net/es/install.html. Se siguen las instrucciones al pie de la letra, y ...a navegar!

En mi caso, cada vez que quiero activar el WiFi, tengo que ir a la carpeta donde tengo el programa y hacer un sudo modprobe fsam7440.

En cuanto coja pràctica con el Linux, haré un método más ràpido.

28 septiembre 2008

81a Travessa del Port de BCN

Este año ha ido mejor que el anterior. Mucho mejor. El año pasado quedé el penúltimo, y éste, a pesar de haber llegado fuera de tiempo por 3 minutos, me ha ido muy bien. Hay cosas que he de mejorar, además de entrenar de una manera más... constante, y es el tema de orientación. He nadado muchos más metros de lo que tocaba, pues me iba continuamente hacia la derecha, perdiendo mucho tiempo volviendo hacia donde estaban el resto de los nadadores.


El año que viene el objetivo es bajar de la hora, y con un poco de tiempo y entreno, y nadando en plan waterpolista, lo conseguiré.

25 septiembre 2008

Vuelta, de nuevo, a correr...

Después de varias semanas acudiendo puntual a la cita con el fisio, de saber lo que es aguantar dolor de verdad, de saber lo que es una Indiba, y de buscar en Internet qué es eso de Ciriax, con lo que duele, por fín, me han dejado que trotase 10 min. por Collserola. Para mi una experiencia quasi-religiosa, y rara, pues no he tenido ninguna molestia en la pierna. Esperemos que vaya bien...!


26 julio 2008

Nos vamos de vacaciones...


No te das cuenta, pero las esperas. Al menos es mi caso. Estás tan metido en la rutina, en las teclas que has de ir tocando cada día que a veces cuesta dar el paso de pensar en qué vas a hacer en vacaciones. Antes esto era parte ya del momento. Ahora lo que pides es tiempo para hacer aquello que no haces durante el resto del año: NADA. O como mucho leer un poco y jugar con tus hijos, los que tenemos.


Este año toca Almería, por muchas razones, y sobre todo por recomendación de los amigos: es un paraíso, payas vírgenes, etc... Para mi, que sea tranquilo relajado, con pocas cosas que tenga que ver (obligadas) y con rutina vacacional: desayuno, piscina, comida, siesta, piscina, cena y a las diez en la cama estés. La panacea...


Powered by Qumana

11 mayo 2007

Continuamos entrenando

Hoy, Jueves 10/05. Oportunidad para entrenar y dar un paseito por Collserola. Tiro de mi repertorio de entrenos, y por el tiempo escojo el itinerario R1 de 7'6km. Subida fuerte por la entrada a Collserola que hay detrás de la Clínica Stauros, llegada al passeig de les aigües y vuelta por detrás de la montaña a Torre Baró y bajada por la carretera. La subida bien, tranquila sin parar y con sensaciones buenas. La pierna no me duele, y eso ya es un logro. No me quiero forzar. Así que me relajo al llegar arriba y voy al trote cochinero hasta la parte más alta del recorrido donde bajo las pulsaciones hasta dejarlas por debajo de 120. Continuamos para bingo, hasta la parada de autobús de Torre Baró, donde para otro minutillo para bajar pulsaciones. Y continúo carretera abajo por la acera que han acabado hace un par de meses, y que evitará que el autobús y los coches hagan extraños para evitar a los caminantes. A los 40 min., como me tengo acostumbrado últimamente, comienzo a caminar para relajar músculos y llegar a casa bien.

Lo que sí he notado es que en la bajada se me cargan mucho las piernas. La causa no la tengo clara, pero no debo de apoyar bien el pie, y las zapatillas que uso no deben ser especialmente blandas. Todo ello hace que tema las bajadas como pocas cosas. Prefiero subir, o bien bajar por un sitio blandito...

Espero este finde continuar con la recuperación...

10 mayo 2007

Java Byte[] y los acentos

Cómo una cosa tan sencilla se complica tanto. Total, unos acentos de nada. Pero claro, la informática la dominan los ingleses, que carecen de estas lindezas de la escritura. Y menos mal que alguien le da por inventar un "nuevo" código de caracteres ISO-8859-1... Y claro, si trabajas en Java con byte[] necesitas decirle el tipo de codificación que hay en esa matriz de byte. Y cómo? Pues al final con InputSource (org.xml.sax.InputSource) que dispone de un método para decir qué tipo de codificación tiene, y así forzar a que el SAXBuilder cree el documento XML correctamente. Espero que pueda servir a alguien....

public Document genXMLDocument(byte[] b){
Document doc = null;
try {
ByteArrayInputStream bais = new ByteArrayInputStream(b);
InputSource is = new InputSource(bais);
is.setEncoding("ISO-8859-1");
SAXBuilder sxb = new SAXBuilder();
doc = sxb.build(is);
} catch (JDOMException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}

return doc;
}

25 diciembre 2006

Mitja Marató de Vilanova del 2006

El recorrido de la Mitja Marató de Vilanova del 2006. Per mi la primera vegada que intentava una distància com aquesta en una cursa, i la veritat és que és una miqueta dur, però bé. Total 1:44 en fer els 21 km i escaig.

He tingut tiretes durnat uns dies, però ho he pogut aguantar bé i he tornat a entrenar.

L'any que vé ho farem millor! Posted by Picasa

06 noviembre 2006

Cross Popular de Sants 2006

El recorrido del Cross Popular de Sants 2006 con una marca personal impresionante, para mi, 46:18. Sufrimiento a partir del kilómetro 6, pero he aguantado como un campeón. Estoy orgulloso! Posted by Picasa

09 octubre 2006

El entreno de muchos días

O bien en el sentido de las agujas del reloj, más duro al principio y más suave al final, o bien al revés, éste es el itinerario de muchas tardes de entreno. Aproximadamente són unos 8km, por Collserola. Posted by Picasa

03 octubre 2006

Volviendo al Apache 2.0.59

Esto que hago como unas cuantas veces al año siempre me acaba por dar problemas. En fin, que tengo que poner en marcha el Apache, MySQL, PHP, Perl y alguna cosilla más, y la primera en la frente: tengo instalada la versión de Apache la 2.2.2, que se supone que es la última. Pues bien, cuando hay que configurar el PHP como módulo, empieza a ponerme peros. Tira de Google, hasta que algún buen samaritano pone en su web que hay incompatibilidades. Tiramos para atrás. Vamos a ver qué es lo que se soporta y qué es lo que no. En el "curro" tengo una 1.3.27 que va como una moto, pero por aquello de no ser un individuo poco moderno, digo, vamos a poner una 2.0.xx. Descargamos a buena velocidad, y le damos al .msi, que a más de uno le ha dado un disgusto. Pues no iba a ser menos: no funciona. Da un error de Windows de que hay un problema con el Windows Installer.
Google de nuevo nos da la respuesta a través de la página de Microsoft, que dicho sea de paso, no se lleva bien con el Firefox, o era al revés? El caso es que ábrete un Explorer, y la respuesta: hay que volver a registrar (msiexec /regserver) el MsiExec.exe con el Windows en modo a prueba de fallos. Como es la primera vez, pues hace "ilu". Reinicio, aprieto F8, y entramos en un "nuevo mundo", donde todo debe estar más controlado. Ejecutamos el comando para re-registrar el msiexec.exe, y recuerdo que el otro día mientras instalaba nosequé (puede que la última versión de la mula), se fue la luz por una avería de Fecsa-Endesa. Ya sabemos el porqué de las cosas.
Una vez ejecutado el comando, volvemos a reiniciar, seleccionamos Windows XP dentro de las posibilidades de la máquina, y desinstalamos el Apache 2.2.x (pero qué bien y que ordenadito!) mediante el apache_2.2.2-win32-x86-no_ssl.msi. Ya queda menos. Volvemos a ejecutar mediante un doble-clic el apache_2.0.59-win32-x86-no_ssl.msi, y esta vez va como una moto. Ponemos el directorio que nos interesa, el dominio que queremos y voilà, la máquina está preparada. Apuntamos el Firefox a http://localhost, y voilà: la página de inicio del Apache. Esta noche promete!

Instalamos el PHP 5.1.6

Lo tengo descomprimidito y preparado en mi %PHP_HOME%. Ahora volvemos a Google, y buscamos "configuring apache php5", y lo primero que hemos de hacer es localizar nuestro httpd.conf, que hallamos inmaculado en %APACHE_HOME%conf. Lo editamos y empezamos a "meterle mano":

# For PHP 5 do something like this:
LoadModule php5_module "%PHP_HOME%/php5apache2.dll"
AddType application/x-httpd-php .php

# configure the path to php.ini
PHPIniDir "%PHP_HOME%"

Donde %PHP_HOME% es el directorio donde tengamos instalado nuestro PHP. Esto va bien, ya que cuando cambiemos de PHP, poco hemos de tocar el httpd.conf.

Probamos a colocar en la carpeta donde sirve los documentos el fichero con el phpinfo():


phpinfo();
?>

y ahí está, perfecto! Ya tenemos el Apache+PHP5. Vamos a ver si se lleva bien con el MySQL que ya funciona desde hace unos días.... Algo que no veo en el phpinfo() me da en la nariz que tendremos "dificultades".

Probando MySQL 5.22

Hacemos un script de conexión a una tabla que tengo funcionando, y falla. Parece que tenía razón. Nos vamos al php.ini, y verificamos las líneas:

; Directory in which the loadable extensions (modules) reside.
extension_dir = "%PHP_HOME%ext"

y descomentamos la línea:

extension=php_mysql.dll

Ahora sí que sí.