Como dar formato a un número en xslt: format-number

10 Febrero, 2010 por Juan Sin comentarios »

Para los que o bien nos guste, o bien nos vemos obligados a usar transformadas xslt a veces en exceso, muchas veces nos encontramos con algunos problemas como son los números. Cuando debemos de hacer operaciones que van mas allá de sumar y restar dentro de una transformada xslt, nos encontramos muchas veces con un gran problema al mostrar los resultados de las operaciones. Por ejemplo, un caso practico (el mio de hoy, aunque me pasa desde que empecé a trabajar con xslt), ha sido que tengo que mostrar un combo (select) con maletas, pero cuando el trayecto es español, como no, al precio de esas maletas (incluido en el combo) hay que añadir un 7% de iva. Al proceder a esto, muchas veces me aparecen números que son auténticos chorizos, por ejemplo 37.000000004€, por lo que queda un poco feo en un combo. La solución es dar formato al numero/variable y dejarlo truncado a 2 decimales.

Para dar formato a un numero en una transformada xslt, podemos utilizar la función nativa de xslt format-number. Esta función cuenta con 2 parámetros, un primero que especificamos el numero a dar formato y como segundo parámetro que especifica cual sera el formato que se le dará al numero. La función tendría un formato tal que:

/**
 * Función de xslt nativa e independiente del lenguaje, ya sea java, .Net, php, etc. para dar formato a un numero desde XSLT
 * pero a veces puede provocar algún que otro fallo dependiendo del lenguaje que la implementa.
 * @param number Numero a dar formato
 * @param format Formato que se le dará, se utilizan los caracteres ('0', '#', '.', ',', '%')
 * @return Numero con su formato especificado
 */
string format-number(string number, string format)
<xsl:variable name="variable" select="'7.35001'" />
<xsl:value-of select="format-number($variable, '#.00')" />
<!-- El resultado es: 7.35 -->

Para dar formato, podemos utilizar los siguientes caracteres:

  • '0': Los ceros, indican dígitos obligatorios, ignorando los ceros a la izquierda o derecha si son en la parte entera o decimal. Si por ejemplo tenemos el 34 y le aplicamos como formato 0000, nos quedaría tal que 0034. Lo mismo ocurre con los decimales, si tenemos nuevamente 34, el resultado de aplicar 0000.00 seria 0034.00.
  • '#': La almohadilla (#), sirve para dar formato a los dígitos ignorando los ceros innecesarios. Por ejemplo, si tenemos el 0034 y el 0034.0500 y le aplicamos el formato #.#, nos dará como resultado 34 en primer lugar y 34.1 en segundo lugar. OJO, que redondea los números, si pusiéramos al 0034.0500 dos almohadillas tal que #.##, quedaría 34.05. Tener en cuenta, además de que redondea los números, que ignorara todos los ceros que haya después de la posición que ocuparía la almohadilla, a diferencia del '0', que mantendría esos ceros.
  • '.': El punto se utiliza para establecer el limitador decimal, para diferenciar entre la parte entera y la decimal.
  • ',': La coma se utiliza para indicar si queremos y donde queremos situar los separadores de miles, por ejemplo, si tenemos 1000 y le aplicamos un formato tal que # o ####, el resultado siempre sera 1000, pero si aplicamos el formato #,### nos quedara 1,000, que manteniendo el formato y pasando 12350, quedaría 12,350 como resultado.
  • '%': Devuelve el resultado en %, como pasa en otros programas como el Excel, cuando le aplicamos el %, nos multiplicara por 100 y mantendrá el símbolo de porcentaje al final, tal que 7 con formato #% quedaría 700% como resultado.
  • Espero que os sirva tanto a vosotros como a mi.

Reemplazar texto en transformada xslt

20 Diciembre, 2009 por Juan Sin comentarios »

Trabajo desde hace años usando de una forma intensiva las transformadas xslt, y a pesar de que son fáciles de utilizar y se pueden hacer infinidad de cosas, llegando al caso de ser propiamente dicho, un lenguaje de programación, hay algo que siempre he echado en falta. A pesar de que xsl tiene funciones para el tratamiento de cadenas como substring, startwith, concat, etc. nunca he visto que tenga una función para reemplazar texto, algo que seria muy útil. Siempre que he tenido que hacer un reemplazo de texto lo he hecho de diferentes formas, a cual mas chapucera. Si tenia que sustituir una frase entera, llenaba el xsl de xsl:if o de xsl:choose con sus consecuentes xsl:when, pero si tenia que sustituir parte de una frase, ya la cosa se complicaba mas, usando casi siempre el nombre de espacio user, y definiendo una función en el lenguaje que utilizaba (en mi caso .net), pero esto tiene un problema, si por algún casual, quiero migrar a otro lenguaje (que no veo yo a mi jefe mucho por la labor), la transformada no me serviría fuera del entorno de .net.

Para solucionar este problema, decidí crear una función de xsl, mas que una función es un template, pero como a mi me gusta usar los templates como funciones con parámetros, también me gusta llamarlas funciones. Bueno, el caso es que he creado una función/template, que recibe 3 parámetros, y que vendría a ser mas o menos como el replace de php, pero con el funcionamiento del replace de javascript, porque de momento solo reemplaza de 1 en 1, digamos que no es un replace all. La función recibe 3 parámetros, uno con el texto a base, la cadena de donde queremos reemplazar el texto, otro parámetro con el texto que va a ser reemplazado, y otro parámetro con el texto a reemplazar. El código de la función seria el siguiente:

<!-- Funcion replace -->
<xsl:template name="replace">
   <!-- Cadena de texto -->
   <xsl:param name="text" />
   <!-- Texto que va a ser reemplazado -->
   <xsl:param name="replaceText" />
   <!-- Texto a reemplazar -->
   <xsl:param name="replacedText" />
 
   <!-- El replace propiamente dicho -->
   <xsl:value-of select="substring-before($text,$replaceText)" />
   <xsl:value-of select="$replacedText" />
   <xsl:value-of select="substring-after($text,$replaceText)" />
</xsl:template>
 
<!-- Ejemplo de utilizacion -->
<xsl:variable name="price">
   <xsl:call-template name="replace">
      <xsl:with-param name="text" select="$xml/POSIBILIDADES_PRECIO-IDA" />
      <xsl:with-param name="replaceText" select="','" />
      <xsl:with-param name="replacedText" select="'.'" />
   </xsl:call-template>
</xsl:variable>

Espero que esta pequeña función para xsl, os sea tan útil como a mi. Por cierto, el ejemplo me lo saque de uno que monte en el curro, así que cada uno lo tendrá que modificar en base a sus necesidades. A ver si me lo curro un poco y modifico la función para que sea un replace all, en lugar de un replace one.

OmmWriter beta 2

19 Diciembre, 2009 por Juan Sin comentarios »
Logo de OmmWriter

Logo de OmmWriter

El miércoles por la tarde recibí un correo de Rafa Soto (un correo automático), donde decía que acababan de publicar la versión beta 2 de OmmWriter, ya comentado anteriormente en este blog. En ese mismo momento me dispuse a bajarlo y sustituir la beta 1 por la beta 2.

Como ya he comentado en una entrada anterior, OmmWriter, el editor de textos Zen, OmmWriter es una aplicación para escribir textos con toda la tranquilidad del mundo, y salvo ciertos defectillos, es magnifica y la recomiendo a todos los que tengan un Mac

De entrada, la nueva versión, se aprecia que en cuanto a interfaz, no hay nada nuevo, pero a nivel interno, rendimiento, mejoras, fallos, si se ha trabajo bastante para mejorar la aplicación. Los cambios de la nueva versión son:

Nuevas características:

  • Contador de palabras
  • Backup automático, producido cada 3 minutos, guardandolo en el archivo situado en "Library/OmmWriter/OmmWriterBackup.omm"

Bugs corregidos:

  • Corregido un error en los micros i7 que fallaba al arrancar
  • Al abrir un archivo no te preguntaba si querías guardar el actual y perdías el contenido
  • Al parecer un error que se producía cuando presionábamos cmd+p
  • La beta 1 estaba limitada a la versión 10.5.5 de Mac Os X, se ha rebajado a la versión 10.5.0 de Mac Os X
  • Al parecer el tipo de letra script, perdía ciertas animaciones en algunas letras en ciertos tamaños de texto
  • OmmWriter no guardaba todos los archivos con codificación UTF-8
  • Al parecer, al minimizar la ventana desaparecía y era recuperable (a mi si me funcionaba)
  • El panel de guardar aparecía 2 veces.
  • El panel de "guardar antes de salir" esta mas detallado, ahora aparece "cancelar, no guardar, guardar"
  • El panel de "guardar antes de salir" desaparecía al cambiar de aplicación.
  • Los scrolls volvían al inicio cuando se abría un nuevo documento
  • Redibujado de scrolls cuando se borra un texto seleccionado
  • Redibujado de scrolls cuando se abre un nuevo archivo
  • El cursor es mas preciso para ciertas combinaciones de fuetes y tamaños.
  • Reducido al mínimo la transparencia de CharAnimationLayer, que lo hacia desaparecer cuando no se usaba (la verdad, no se a que se refiere).
  • Mejor experiencia al arrastrar la capa que engloba al texto al llevarlo a los bordes de la pantalla
  • El tipo de letra manuscrita, tenia cierto lag que se ha corregido a la hora de introducir texto
  • Cuando usábamos cmd+tab o cmd+q, cuando no teníamos el foco en un documento no guardado, producía que la interfaz se quedara transparente o se quedara en una transacción de transparencia. Como nota añadir que al hacer cmd+q para cerrar, si el documento no estaba guardado, a mi me petaba, pero con esta nueva versión ya me funciona
  • Corregido un error en las extensiones cuando estábamos en el panel de "guardar como"
  • Cambiado que cuando escribimos una palabra mal escrita salía en gris en lugar de rojo subrayado. Decir que ni en la anterior ni en esta versión, me subraya las palabras mal escritas

Poco a poco va mejorando esta magnifica aplicación, a ver si corrigen alguno de los errores que aun se siguen produciendo. Y como no, recomiendo a todo el que tenga un Mac Os X, que lo prueba, porque no se arrepentirá de usar OmmWriter.

Por fin de vacaciones

19 Diciembre, 2009 por Juan Sin comentarios »

Hace un mes retome el blog, después de mucho tiempo sin escribir en el. Por desgracia, el ritmo de trabajo, intentando, como no, sacar proyectos de meses de trabajo en pocos días, hacia que al llegar a casa lo que menos me apetecía era coger un ordenador. Por fin, y gracias a la incompetencia de los proveedores de servicios (webservice de datos) que no saben hacer la O con un canuto, no puedo avanzar mas en mi trabajo y por fin, puedo disfrutar de unas mas que merecidas vacaciones. Ya era hora de descansar, 35 días de vacaciones, contando festivos y fines de semana, repartidos hasta el 31 de Enero. A ver si gracias a este descanso puedo aprovechar, entre otras cosas, mas tiempo al blog.

Ampliación de Google Street View

27 Noviembre, 2009 por Juan Sin comentarios »
Aunque hace unas semanas que ya esta en funcionamiento, Google Street View, el servicio de imágenes callejeras de los mapas de Google, ha ampliado sensiblemente las zonas escaneadas. Este servicio estaba implantado en España en grandes ciudades como Madrid o Barcelona, pero hace unas semanas han ampliado el servicio a casi toda España, incluyendo incluso, pueblos de las alpujarras.
Para gente que vive en grandes ciudades, este servicio era y es muy útil, porque cuando tienes que ir a un sitio, puedes buscarlo no solo por el numero, sino como si estuvieras físicamente allí, ademas que puedes memorizar el camino como si fueras en el coche, algo que es muy interesante y útil. Ahora y gracias a un gran esfuerzo por parte de Google, casi toda España puede disfrutar de este servicio, con el que ademas, podemos ver y curiosear mucho por todo el país.
Llevo muchos años trabajando en el sector del turismo y creo que con esta ampliación, se puede promocionar el turismo creando guías interactivas gracias a Google. El tiempo dirá si las grandes empresas turísticas Españolas saben sacar el jugo a esta herramienta.

España en Street ViewAunque hace unas semanas que ya esta en funcionamiento, Google Street View, el servicio de imágenes callejeras de los mapas de Google, ha ampliado sensiblemente las zonas escaneadas. Este servicio estaba implantado en España en grandes ciudades como Madrid o Barcelona, pero hace unas semanas han ampliado el servicio a casi toda España, incluyendo incluso, pueblos de las alpujarras.

Para gente que vive en grandes ciudades, este servicio era y es muy útil, porque cuando tienes que ir a un sitio, puedes buscarlo no solo por el número, sino como si estuvieras físicamente allí, ademas que puedes memorizar el camino como si fueras en el coche, algo que es muy interesante y útil. Ahora y gracias a un gran esfuerzo por parte de Google, casi toda España puede disfrutar de este servicio, con el que ademas, podemos ver y curiosear mucho por todo el país.

Llevo muchos años trabajando en el sector del turismo y creo que con esta ampliación, se puede promocionar el turismo creando guías interactivas gracias a Google. El tiempo dirá si las grandes empresas turísticas Españolas saben sacar el jugo a esta herramienta.

Por cierto, destacar el hecho, de que Google ha apostado por España y ha ampliado tanto Google Street View, que nos hemos posicionado como el segundo país del mundo en zonas escaneadas, detrás de EEUU y delante de Australia.

El primer Iphone

27 Noviembre, 2009 por Juan 2 comentarios »
Primer Iphone

Primer Iphone

A veces me da por buscar palabras a lo loco por el Google Images, al igual que me pasa con la Wikipedia, que empiezo a buscar a lo mejor Fabada, luego Asturias, luego Celta, y voy relacionando relacionando y acabo a lo mejor en como los chinos construían los arrozales. Pues con Google Images, me pasa igual, y buscando buscando, no se como he llegado a encontrarme una foto, no se si seria un Fake del primer Iphone. En la foto se ve un teléfono de Apple, que aunque me recuerda mas a las maquinitas de algunos supermercados como Mercadona para firmar con la tarjeta de crédito, se parece a las antiguas Palms en blanco y negro con un súper lápiz con pantalla táctil. Ahí se queda la imagen para que cada uno saque sus conclusiones sobre lo que podría haber sido el primer Iphone.

OmmWriter, el editor de textos Zen

26 Noviembre, 2009 por Juan 2 comentarios »

Logo de OmmWriter

Logo de OmmWriter

Captura OmmWriterLogo de OmmWriter

Logo de OmmWriter

Hace poco descubrí un nuevo editor de texto para Mac llamado OmmWriter, al principio me parecio un poco simple y raro, puesto que es un fondo muy zen (sencillo donde los haya) con una musiquita relajante. Pense que era un bloc de notas pero mas tirando a rollo zen. Cuando apago la televisión, música y me puse a escribir, descubri que es cierto de lo que supuestamente trata este editor, y es que su objetivo es concertrar toda la atencion en lo que se esta escribiendo.

Cuando quitas todas las distracciones, donde el unico sonido que se escucha es la música zen y las pulsaciones de teclado, que ademas de las propias, OmmWriter tiene unos soniditos especiales para las pulsaciones, da una sensación de relajación muy buena, ademas de que tienes una pantalla entera con un fondo muy relajante donde se va escribiendo y lo único que aparece es el texto que escribes, sin menús ni nada que pueda distraer.
No hay palabras para explicar como se escribe desde este editor de texto, simplemente hay que probarlo.
De entre otras opciones como abrir y guardar documentos (logicamente tenian que venir), podemos cambiar el tipo de letra y tamaño, asi como los sonidos del teclado, musica de fondo e imagen de fondo, entre varias opciones preestablecidas, siempre entre ellas con un tono muy relajante, como musica de la naturaleza con sonidos de animales, rios, mar, etc.
Solo le veo un pequeño problema a este programa, y es que cuando movemos el ratón para activar el menú de opciones y pasamos el raton por encima de alguna opción, hecho en falta un title que nos indique que es cada opción, salvo eso, creo que el cometido de este programa lo cumple a la perfección.
Por último decir, que quien tenga la suerte de tener un Mac y quiera probar este genial editor de textos, puede hacerlo desde la página principal del proyecto OmmWriter (http://www.ommwriter.com/)
Logo de OmmWriter

Logo de OmmWriter

Hace poco descubrí un nuevo editor de texto para Mac llamado OmmWriter, al principio me pareció un poco simple y raro, puesto que es un fondo muy zen (sencillo donde los haya) con una musiquita relajante. Pensé que era un bloc de notas pero mas tirando a rollo zen. Cuando apago la televisión, música y me puse a escribir, descubrí que es cierto de lo que supuestamente trata este editor, y es que su objetivo es concentrar toda la atención en lo que se esta escribiendo.

Cuando quitas todas las distracciones, donde el único sonido que se escucha es la música zen y las pulsaciones de teclado, que además de las propias, OmmWriter tiene unos soniditos especiales para las pulsaciones, da una sensación de relajación muy buena, además de que tienes una pantalla entera con un fondo muy relajante donde se va escribiendo y lo único que aparece es el texto que escribes, sin menús ni nada que pueda distraer.

No hay palabras para explicar como se escribe desde este editor de texto, simplemente hay que probarlo.

De entre otras opciones como abrir y guardar documentos (lógicamente tenían que venir), podemos cambiar el tipo de letra y tamaño, asi como los sonidos del teclado, musica de fondo e imagen de fondo, entre varias opciones preestablecidas, siempre entre ellas con un tono muy relajante, como música de la naturaleza con sonidos de animales, rios, mar, etc.

Solo le veo un pequeño problema a este programa, y es que cuando movemos el ratón para activar el menú de opciones y pasamos el raton por encima de alguna opción, hecho en falta un title que nos indique que es cada opción, salvo eso, creo que el cometido de este programa lo cumple a la perfección.

Por último decir, que quien tenga la suerte de tener un Mac y quiera probar este genial editor de textos, puede hacerlo desde la página principal del proyecto OmmWriter.

Captura OmmWriter

Nuevo look en el blog

26 Noviembre, 2009 por Juan Sin comentarios »
Despues de muchisimo tiempo sin escribir en el blog, ahora "disfruto" por llamarlo de alguna manera, porque es una jodienda, de una baja laboral por lumbago (como duele). Asi que como no me puedo mover para nada y como me tomo unos relajantes musculares que me dejan ko (drogado perdido), he decidido volver a echarle mano al blog y escribir un poco.
Lo primero que he hecho, ha sido cambiar el tema del blog, algo que llevaba mucho tiempo con ganas de hacer. He escogido el tema Cordobo Green Park 2 de Andreas Jacob (http://www.cordobo.com). Este tema es limpio y llamativo a la vez, bastante completo y mas ancho en todos los sentidos. El tema es mas ancho en la parte de contenido, por lo que se puede leer con mas facilidad y puedo aprovechar para poner codigos y ejemplos mas grandes, asi como imagenes rodeadas de texto y no como ahora, imagenes que el texto se encontraba encima o debajo. Por otro lado el menu lateral tambien es mas ancho, por lo que ahora los widgets de comentarios y entradas recientes.
Asi que despues de esto, espero volver a escribir articulos interesantes de esos que hacia tanto tiempo que no escribia, y aunque me cueste trabajo (ya que nunca me ha gustado eso de los blogs) cuando no tenga nada que escribir, o simplemente no tenga ganas, quizas escriba algo que lea en otros blogs, referenciadolos.

Después de muchisimo tiempo sin escribir en el blog, ahora "disfruto" por llamarlo de alguna manera, porque es una jodienda, de una baja laboral por lumbago (como duele). Así que como no me puedo mover para nada y como me tomo unos relajantes musculares que me dejan ko (drogado perdido), he decidido volver a echarle mano al blog y escribir un poco.

Lo primero que he hecho, ha sido cambiar el tema del blog, algo que llevaba mucho tiempo con ganas de hacer. He escogido el tema Cordobo Green Park 2 de Andreas Jacob. Este tema es limpio y llamativo a la vez, bastante completo y mas ancho en todos los sentidos. El tema es mas ancho en la parte de contenido, por lo que se puede leer con mas facilidad y puedo aprovechar para poner códigos y ejemplos mas grandes, así como imágenes rodeadas de texto y no como ahora, imágenes que el texto se encontraba encima o debajo. Por otro lado el menú lateral también es mas ancho, por lo que ahora los widgets de comentarios y entradas recientes.

Así que después de esto, espero volver a escribir artículos interesantes de esos que hacia tanto tiempo que no escribía, y aunque me cueste trabajo (ya que nunca me ha gustado eso de los blogs) cuando no tenga nada que escribir, o simplemente no tenga ganas, quizás escriba algo que lea en otros blogs, referenciadolos.

Mac Os X con PHP y Apache

29 Abril, 2009 por Juan 3 comentarios »

Como buen desarrollador web y acostumbrándome poco a poco al uso de Mac OS X, me he decidido a ponerme de lleno con el juego web que estoy desarrollando. Para hacer esto tengo que instalar o debería de instalar primero un IDE para el desarrollo, luego Apache y PHP, la base de datos no porque utilizo la de mi hosting y así evitar ciertos pasos que de momento y dado que esta en una fase alfa, me lo puedo ahorrar.

Como IDE necesito uno que tenga Intellisense (que autocomplete código) que funcione bien y reconozca todo, tanto variables y funciones, como clases, herencias, métodos estáticos, declaración de tipo de objeto por parámetro a un método, etc. por esto solo conocía 2, el Zend Studio que esta muy bien pero también es de pago y no barato precisamente y un poco lento, pero con mi ordenador no creo que hubiera problemas. El otro IDE es el Eclipse que aunque me suele consumir unos 400MB de RAM al tener 4GB no habría problema y es bastante completo y rápido, además de completar con muchos plugins que tiene el Eclipse. Por ultimo y de casualidad he descubierto que han terminado el plugin de NetBeans para usarlo como IDE de PHP y la verdad es que para mi gusto es el mejor, ya que es muy rápido, consume muy poco, tiene implementado todo lo que necesito en un bloque muy solido (no como Eclipse que tiene plugins que no terminan de encajar entre ellos) y lo mejor de todo, que para mi gusto y como IDE, me gusta mucho el NetBeans y su sistema de organización. Así que por esto me he quedado con NetBeans como IDE de PHP.

Una vez esta el IDE instalado, necesito el motor PHP y el servidor web Apache. Buscando en el disco duro encuentro que hay referencias a Apache y en la conflagración de sistema, hay un método de compartir que se llama "Compartir web", que de arrancarlo lo que hacemos es poner en marcha el servicio de Apache2. Ahora nos toca PHP, que para mi sorpresa también tiene viene instalado en Mac Os X por defecto, lo único que tenemos que hacer es descomentar la linea en la que carga el modulo de PHP y reiniciar Apache y ya tenemos todo listo y configurado para trabajar.

La verdad es una sorpresa encontrarme con Java y PHP y Apache ya instalado, algo que nos ahorra mucho tiempo a la hora de instalar todo lo necesario para trabajar

Por ultimo comentar que lamentablemente MySQL si deberemos de instalarla, aunque es mas sencillo que instalar que en Windows por lo que tardaremos lo que tardaremos en bajar el archivo de MySQL, hacer doble click y ejecutar los 2 o 3 archivos que lleva en su interior.

Continue de un bucle en Visual Basic

13 Abril, 2009 por Juan 1 comentario »

Es curioso. El otro día estaba trabajando con unos bucles o loops como les dicen algunos, en el curro con Visual Basic .Net 1.1, es decir VB.Net en su versión de 2003. La verdad es que yo siempre he sido un hombre de bandera (jajaja) pero no se porque me empeñe en usar el continue. Probando con diferentes formas de ponerlo, "Continue", "Next" y alguna más que no recuerdo, buscando por internet y preguntando ha algun compañero, al final llegue a la conclusión, de que no existe un "Continue" ni equivalente en Visual Basic .Net, una lástima teniendo en cuenta que en C# si tiene continue. Seguiré usando mis banderitas que me funcionan en todos los lenguajes.

Por si hay alguien que no entiende para que sirve el continue, básicamente lo que hace es saltar a la siguiente iteración de un bucle ignorando todo el código de ese bucle desde que se llama hasta que llega al final del bucle, por llamarlo de alguna manera, "esta vuelta ha terminado".