Estos es un problemilla que te puede pasar parseando un String que representa un BigDecimal en Java.
La típica entrada de texto, simple en apariencia, te puede dar por culo un buen rato si intentas recuperar números decimales.
Una entrada como “1,8″ la puedes interpretar como una representación en String de un BigDecimal. Entonces, si vas a saco puedes pensar que lo suyo es hacer tal que así:
BigDecimal numerito = new BigDecimal("1,8");
Lo malo es que 1,8 no tiene sentido como número para los “anglos”, por lo que habrá que reformatear para obtener un “1.8″. Para eso hay que hacer un NumberFormat con el Locale español:
Locale locale = new Locale("es", "ES");
NumberFormat nf = NumberFormat.getInstance(locale);
Ahora que tenemos el “formateador” podemos parsear el numero:
Number numero = nf.parse("1,8");
Ahora podría pensar que con numero.doubleValue() te puedes quedar tan ancho pero no exactamente. El BigDecimal que obtienes con new BigDecimal(numero.doubleValue()) es el siguiente:
1.8000000000000000444089209850062616169452667236328125
¿Por que narices sale eso a partir de un 1,8? Pues ni puta idea, pero pasemos de eso. Yo quiero un número que sea un 1,8 y lo puedo obtener así:
new BigDecimal(numero.toString())
Y eso es todo. Una chorrada pero que te puede tocar las narices sobre manera, sobretodo si tienes que meter el valor ese en un campo de la base de datos que puede que no esté dimensionado para albergar el chorro de arriba.
Aquí tenemos otro articulito traducido por mí. Se trata de un tutorial de Chris Neeman destinado al diseño de un framework en PHP para crear una Intranet. El original, siempre mucho más fiable, lo podéis encontrar en DevShed.
Diseño de un marco de trabajo para una Intranet
Este artículo es la segunda parte de una serie sobre frameworks para aplicaciones para intranets. Ahora que sabemos todo sobre un marco de trabajo para aplicaciones y como funciona en un entorno intranet, vamos a ver la estructura general y el diseño de la intranet y de las aplicaciones. Sigue leyendo para ver como se va a hacer todo esto.
Primero vamos a crear una compañía ficticia que tiene algún tipo de base para las aplicaciones de intranet que vamos a crear. Después vamos a echar un vistazo al sistema de ficheros de la intranet. Y finalmente vamos a discutir el CSS y las plantillas que dará a las aplicaciones una apariencia similar.
Aquí tenéis otro artículo traducidos sobre introducción a programación. En este caso, no se trata de nada de Java, sino de PHP y MySQL. Creo que es un buen articulito de ejemplo para meterse por primera vez en este tema. Bueno, es otra de mis traducciones, así que recomiendo mirar el original, escrito por Alejandro Gervasio en Devshed.
Construir un motor de búsqueda con MySQL y PHP 5
Si mantienes un sitio web de tamaño medio en crecimiento, puedes llegar a la conclusión de que necesitas un buscador interno para mejorar la experiencia del visitante de la web. Este artículo, el primero de tres partes, te introducirá en la elaboración de un buscador usando PHP y MySQL.
Introducción
Siendo uno de los lenguajes de programación más populares de la web actualmente, PHP da a los desarrolladores web las herramientas para hacer un vasto arsenal de aplicaciones que no podían ser creadas hace unos años. Sitios web database-driven, carritos de compra, sistemas de paginación y mecanismos de validación de formularios son sólo unos cuantos ejemplos de lo que se puede hacer con es lenguaje de scripting. PHP ha evolucionado significativamente y ahora muestra un maduro modelo orientado a objetos.
Sin embargo, hay que notar que aparte de la abundancia de aplicaciones web que pueden ser creadas fácilmente con PHP, hay una en particular que se está volviendo muy popular en muchos de los sitios web modernos a medida que crecen. En este caso, nos referimos al desarrollo de un motor de búsqueda interno para cualquier sitio web, usando las capacidades suministradas por el potente tandem MySQL/PHP5.
Los motores de búsqueda basados en web han existido durante mucho tiempo y han evolucionado constantemente, principalmente debido a los continuos avances de grandes compañías como Yahoo y Google entre otras.
Sin embargo, ahora no se trata de ser tan ambicioso como para abordar un proyecto tan complejo. En cambio, enfocaremos nuestra atención en una situación concreta que algunos desarrolladores de PHP tienen que afrontar frecuentemente. Deben tratar un sitio web de tamaño medio que requiere la implementación de un buscador interno, de modo que los usuarios puedan encontrar los contenidos que buscan de un modo más directo y fácil, sin la necesidad de navegar a través de un montón de páginas irrelevantes.
Desde un punto de vista teórico, hacer este tipo de aplicaciones puede parecer un proceso bastante simple que puede ser llevado a cabo sin más problemas. Pero en realidad, desarrollar un motor de búsqueda eficiente con PHP 5 y MySQL puede ser un reto, especialmente si eres un desarrollador de PHP que da sus primeros pasos en el área del desarrollo web.
Considerando que más y más sitios web están añadiendo buscadores propietarios a sus estructuras, en estos artículos, tres tutoriales, se va a enseñar como crear una aplicación de búsqueda web que puede ser adaptada fácilmente a tus necesidades personales. Pro supuesto, como habrás podido adivinar, se van a usar algunas tablas básicas de una base de datos MySQL para guardar los contenidos de un hipotético sitio web, pero esta condición puede se modificada rápidamente para trabajar con otro servidor de base de datos diferente.
Una vez presentado el objetivo de esta serie de artículos, es el momento de empezar a aprender cómo desarrollar un motor de búsqueda extensible usando la potente combinación MySQL/PHP5.
Read the rest of this entry »
Pues yo sigo poniendo articulitos traducidos por el que os escribe. Son pildorillas de información técnica sobre tecnologías (Java) que creo que van bien para saber que existen y para qué sirven. Esta vez es un artículo sobre las annotations en aplicaciones web, que podréis encontrar en Enterprise Tech Tips de Sun y que está escrito por Shing Wai Chan.
Bueno, vamos a empezar con Using Annotations in Web Applications.
La quinta versión de Java EE (Enterprise Edition) introdujo las llamadas “annotations”, una forma de simplificar el desarrollo y configuración de aplicaciones empresariales. En el artículo Using Security Annotations in Enterprise Beans, publicado el 31 de marzo pasado, se mostró como usar las “anotaciones” para simplificar el desarrollo de aplicaciones seguras que usan enterprise beans. Algunas de las annotations de Java EE 5 son específicar para las aplicaciones web. Ejemplos de este tipo son @Resource, @EJB, y @WebServiceRef. Otras anotaciones, como @RunAs y @DeclareRoles, están relacionados con la seguridad. Las anotaciones que se relacionan con la seguridad fueron presentados en la “propina” Using Security Annotations in Enterprise Beans.
Aquí tenemos un artículo de ejemplo de uso, en una aplicación web, de las tecnologías JSF, Spring 2.0 y Java Persistence. A continuación, a modo de práctica de inglés técnico y para no desconectarme demasiado de las tecnologías web java, puesto que cada vez programo menos, os pongo una traducción y tal. El articulo está sacado del blog de Carol McDonald, dentro de Java.net.
A modo de mostrar el uso de JSF, Spring 2.0 y Java Persistence en Glassfish, la autora ha montado una aplicación de ejemplo que consiste en paginación de conjuntos de datos sobre un catálogo de una tienda.
Esta aplicación de ejemplo de un catálogo de una tienda demuestra el uso de JavaServer Faces, la nueva API de Java Persistence, y Spring 2.0 para implementar la paginación. La autora cogió el ejemplo Pagination of Data Sets in a Sample Application using JSF, Catalog Facade Stateless Session, and Java Persistence APIs y lo modificó ligeramente para usar Spring Bean en lugar de los beans de sesion sin estado de EJB 3.0. Si se comparan los dos ejemplos, verás que el código es casi el mismo, la principal diferencia es la configuración en xml extra para Spring, lo cual no es fácil.
Descarga el código de la aplicación de ejemplo SpringJPA
Nótese: la autora modificó la parte de integración de Spring JSF en esta aplicación para usar org.springframework.web.jsf.DelegatingVariableResolver en lugar del Managed Bean ServiceLocator para obtener una referencia al CatalogService Spring Bean desde el application context de Spring.
Read the rest of this entry »
Pues nada, traduciendo chuminadas. Aquí lo que tenemos es un articulito de CoreJavaTechTips en el que, para aquellos que estamos liados con el java, se recomienda el uso de la clase BigDecimal para representar cantidades de dinerito, en lugar de usar un tipo primitivo como double. Esta tonteria puede ser útil para aquellos que empiezan en el mundillo, aunque para los que ya llevamos un tiempo está un poco pasado. De todas formas sirve para rellenar.
El artículo está hecho por un tal John Zukowski y dice algo así…
Si curras con número en coma flotante puedes usar tipos primitivos como el double, pero si tienes que aplicarle operaciones como si a un importe le añadieras el IVA, por ejemplo, ten cuidadito. Éste tipo de operaciones puede que no te den el resultado correcto, pues sólo te puede dar el valor que se pueda almacenar en un número binario y tal. A continuación nos dan un ejemplo.
Tenemos un programa “Calc” con el que empezamos con un montante de 100.05$, y nos dan un 10% de descuento antes de aplicarnos un 5% de impuestos los jodíos. Para ver el resultado, el pogramita usa la clase NumberFormat para formatear el resultado para mostrar el dinerito.
import java.text.NumberFormat;
public class Calc {
public static void main(String args[]) {
double amount = 100.05;
double discount = amount * 0.10;
double total = amount - discount;
double tax = total * 0.05;
double taxedTotal = tax + total;
NumberFormat money = NumberFormat.getCurrencyInstance();
System.out.println("Subtotal : "+ money.format(amount));
System.out.println("Discount : " + money.format(discount));
System.out.println("Total : " + money.format(total));
System.out.println("Tax : " + money.format(tax));
System.out.println("Tax+Total: " + money.format(taxedTotal));
}
}
Como usamos el tipo double para todos los cálculos internos, tenemos los siguientes resultados:
Subtotal : $100.05 Discount : $10.00 Total : $90.04 Tax : $4.50 Tax+Total: $94.55
Greg Wilkins ha dado una propuesta para los temitas de asincronía de JSR315 para el proceso de especificación de Servlet 3.0.
La propuesta se puede encontrar aquí, y en el blog de Greg hay una introducción a dicha propuesta. En la propuesta, el contenedor de servlet necesita nuevos poderes (gestionar más mime types), además de que hay más métodos de pedir servlets (requests) y de devolver objetos (responses), para gestionar suspensión y reanudación de peticiones (queeeee wapo!!!). El descriptor de despligue de aplicaciones web se debe modificar para indicar cómo convertir tipos, además de para indicar si un servlet es asíncrono o no.
Aunque la propuesta está fuertemente influenciada por Jetty Continuations, ésta intenta evitar algunos de los temas más polémicos de continuations.
A ver si tengo ganas y me la miro a fondo, y si tengo muuuchas más ganas al igual hago una traducción de estar por casa.
Vía TheServerSide.com.
(Ojo: esto está importado de galifate.blogspot.com)
Puesto que estoy un poco pez en esto del PHP, y no me vendría mal aprender puesto que en SmallSquid usamos esta tecnología, voy a colgar o traducir de vez en cuando algún artículo que vea por ahí sobre el tema. Éste, en concreto, lo he sacado de DevShed. Así que vamos allá.
Antes de seguir, aviso a los que no quieren que le “rayen” con cosas densas. Pasad del rollo y mirar algún otro post o id directamente a los tentáculos del chipirón, que siempre hay cosas más interesantes que leer.